From dde9b98e4fe7ed2b4f76ccf1734e212b24bbb348 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 02:43:21 -0500 Subject: [PATCH 001/272] Beginning of multi-tenancy work --- common/dbcore.cpp | 32 ++++++++++++++++----- common/dbcore.h | 63 +++++++++++++++++++++++++++-------------- common/eqemu_config.cpp | 9 ++++++ common/eqemu_config.h | 7 +++++ zone/main.cpp | 24 ++++++++++++++++ zone/zonedb.cpp | 1 + zone/zonedb.h | 1 + 7 files changed, 109 insertions(+), 28 deletions(-) diff --git a/common/dbcore.cpp b/common/dbcore.cpp index 638fab4ae..0f07b5ab8 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -35,13 +35,14 @@ DBcore::DBcore() { mysql_init(&mysql); - pHost = 0; - pUser = 0; - pPassword = 0; - pDatabase = 0; - pCompress = false; - pSSL = false; - pStatus = Closed; + pHost = nullptr; + pUser = nullptr; + pPassword = nullptr; + pDatabase = nullptr; + pCompress = false; + pSSL = false; + pStatus = Closed; + connection_type = DATABASE_CONNECTION_DEFAULT; } DBcore::~DBcore() @@ -81,6 +82,8 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo Open(); } + + // request query. != 0 indicates some kind of error. if (mysql_real_query(&mysql, query, querylen) != 0) { unsigned int errorNumber = mysql_errno(&mysql); @@ -258,6 +261,21 @@ bool DBcore::Open(uint32 *errnum, char *errbuf) } } +void DBcore::SetMysql(MYSQL *mysql) +{ + DBcore::mysql = *mysql; +} + +int8 DBcore::GetConnectionType() const +{ + return connection_type; +} + +void DBcore::SetConnectionType(int8 connection_type) +{ + DBcore::connection_type = connection_type; +} + diff --git a/common/dbcore.h b/common/dbcore.h index 6fd09218e..cf5c4841f 100644 --- a/common/dbcore.h +++ b/common/dbcore.h @@ -2,8 +2,8 @@ #define DBCORE_H #ifdef _WINDOWS - #include - #include +#include +#include #endif #include "../common/mutex.h" @@ -13,38 +13,59 @@ #include #include +const int8 DATABASE_CONNECTION_DEFAULT = 0; +const int8 DATABASE_CONNECTION_CONTENT = 1; + class DBcore { public: - enum eStatus { Closed, Connected, Error }; + enum eStatus { + Closed, Connected, Error + }; DBcore(); ~DBcore(); - eStatus GetStatus() { return pStatus; } - MySQLRequestResult QueryDatabase(const char* query, uint32 querylen, bool retryOnFailureOnce = true); - MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true); + eStatus GetStatus() { return pStatus; } + MySQLRequestResult QueryDatabase(const char *query, uint32 querylen, bool retryOnFailureOnce = true); + MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true); void TransactionBegin(); void TransactionCommit(); void TransactionRollback(); - uint32 DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen); - void ping(); - MYSQL* getMySQL(){ return &mysql; } + uint32 DoEscapeString(char *tobuf, const char *frombuf, uint32 fromlen); + void ping(); + MYSQL *getMySQL() { return &mysql; } + void SetMysql(MYSQL *mysql); + + int8 GetConnectionType() const; + void SetConnectionType(int8 connection_type); protected: - bool Open(const char* iHost, const char* iUser, const char* iPassword, const char* iDatabase, uint32 iPort, uint32* errnum = 0, char* errbuf = 0, bool iCompress = false, bool iSSL = false); -private: - bool Open(uint32* errnum = 0, char* errbuf = 0); + bool Open( + const char *iHost, + const char *iUser, + const char *iPassword, + const char *iDatabase, + uint32 iPort, + uint32 *errnum = 0, + char *errbuf = 0, + bool iCompress = false, + bool iSSL = false + ); - MYSQL mysql; - Mutex MDatabase; +private: + bool Open(uint32 *errnum = nullptr, char *errbuf = nullptr); + + int8 connection_type; + MYSQL mysql; + Mutex MDatabase; eStatus pStatus; - char* pHost; - char* pUser; - char* pPassword; - char* pDatabase; - bool pCompress; - uint32 pPort; - bool pSSL; + char *pHost; + char *pUser; + char *pPassword; + char *pDatabase; + bool pCompress; + uint32 pPort; + bool pSSL; }; diff --git a/common/eqemu_config.cpp b/common/eqemu_config.cpp index cae737e98..4f29bb901 100644 --- a/common/eqemu_config.cpp +++ b/common/eqemu_config.cpp @@ -104,6 +104,15 @@ void EQEmuConfig::parse_config() DatabasePort = atoi(_root["server"]["database"].get("port", "3306").asString().c_str()); DatabaseDB = _root["server"]["database"].get("db", "eq").asString(); + /** + * Content Database + */ + ContentDbUsername = _root["server"]["content_database"].get("username", "").asString(); + ContentDbPassword = _root["server"]["content_database"].get("password", "").asString(); + ContentDbHost = _root["server"]["content_database"].get("host", "").asString(); + ContentDbPort = atoi(_root["server"]["content_database"].get("port", 0).asString().c_str()); + ContentDbName = _root["server"]["content_database"].get("db", "").asString(); + /** * QS */ diff --git a/common/eqemu_config.h b/common/eqemu_config.h index a4fb7797f..2f36a6317 100644 --- a/common/eqemu_config.h +++ b/common/eqemu_config.h @@ -74,6 +74,13 @@ class EQEmuConfig std::string DatabaseDB; uint16 DatabasePort; + // From + std::string ContentDbHost; + std::string ContentDbUsername; + std::string ContentDbPassword; + std::string ContentDbName; + uint16 ContentDbPort; + // From // QueryServ std::string QSDatabaseHost; std::string QSDatabaseUsername; diff --git a/zone/main.cpp b/zone/main.cpp index 6d3eee96c..1867ba42b 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -237,6 +237,29 @@ int main(int argc, char** argv) { return 1; } + /** + * Multi-tenancy: Content Database + */ + if (!Config->ContentDbHost.empty()) { + if (!content_db.Connect( + !Config->ContentDbHost.empty() ? Config->ContentDbHost.c_str() : Config->DatabaseHost.c_str(), + !Config->ContentDbUsername.empty() ? Config->ContentDbUsername.c_str() : Config->DatabaseUsername.c_str(), + !Config->ContentDbPassword.empty() ? Config->ContentDbPassword.c_str() : Config->DatabasePassword.c_str(), + !Config->ContentDbName.empty() ? Config->ContentDbName.c_str() : Config->DatabaseDB.c_str(), + Config->ContentDbPort != 0 ? Config->ContentDbPort : Config->DatabasePort + )) { + LogError("Cannot continue without a content database connection"); + return 1; + } + } else { + content_db.SetMysql(database.getMySQL()); + } +// +// auto results = content_db.QueryDatabase("SELECT id FROM items limit 10"); +// for (auto row = results.begin(); row != results.end(); ++row) { +// std::cout << row[0] << std::endl; +// } + /* Register Log System and Settings */ LogSys.SetGMSayHandler(&Zone::GMSayHookCallBackProcess); database.LoadLogSettings(LogSys.log_settings); @@ -543,6 +566,7 @@ int main(int argc, char** argv) { if (InterserverTimer.Check()) { InterserverTimer.Start(); database.ping(); + content_db.ping(); entity_list.UpdateWho(); } }; diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index cad4e1df8..60094bf84 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -20,6 +20,7 @@ extern Zone* zone; ZoneDatabase database; +ZoneDatabase content_db; ZoneDatabase::ZoneDatabase() : SharedDatabase() diff --git a/zone/zonedb.h b/zone/zonedb.h index b1d88539d..7c93b456c 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -577,6 +577,7 @@ protected: }; extern ZoneDatabase database; +extern ZoneDatabase content_db; #endif /*ZONEDB_H_*/ From 7cf52d467e6170a396f9e635f774d0d3488ad432 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:00:08 -0500 Subject: [PATCH 002/272] Migrate adventure database calls [skip ci] --- world/adventure_manager.cpp | 123 +++++++++++++++++++++++------------- world/main.cpp | 20 ++++++ world/worlddb.cpp | 1 + world/worlddb.h | 1 + zone/aa.cpp | 2 +- zone/command.cpp | 2 +- zone/zone.cpp | 2 +- 7 files changed, 105 insertions(+), 46 deletions(-) diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index c3e70b7ed..d4fbe1fc6 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -632,53 +632,90 @@ AdventureTemplate *AdventureManager::GetAdventureTemplate(int id) bool AdventureManager::LoadAdventureTemplates() { - std::string query = "SELECT id, zone, zone_version, " - "is_hard, min_level, max_level, type, type_data, type_count, assa_x, " - "assa_y, assa_z, assa_h, text, duration, zone_in_time, win_points, lose_points, " - "theme, zone_in_zone_id, zone_in_x, zone_in_y, zone_in_object_id, dest_x, dest_y, " - "dest_z, dest_h, graveyard_zone_id, graveyard_x, graveyard_y, graveyard_z, " - "graveyard_radius FROM adventure_template"; + std::string query = + SQL ( + SELECT + id, + zone, + zone_version, + is_hard, + min_level, + max_level, + type, + type_data, + type_count, + assa_x, + assa_y, + assa_z, + assa_h, + text, + duration, + zone_in_time, + win_points, + lose_points, + theme, + zone_in_zone_id, + zone_in_x, + zone_in_y, + zone_in_object_id, + dest_x, + dest_y, + dest_z, + dest_h, + graveyard_zone_id, + graveyard_x, + graveyard_y, + graveyard_z, + graveyard_radius + FROM + adventure_template + ) + ; auto results = database.QueryDatabase(query); if (!results.Success()) { return false; } - for (auto row = results.begin(); row != results.end(); ++row) { - auto aTemplate = new AdventureTemplate; - aTemplate->id = atoi(row[0]); - strcpy(aTemplate->zone, row[1]); - aTemplate->zone_version = atoi(row[2]); - aTemplate->is_hard = atoi(row[3]); - aTemplate->min_level = atoi(row[4]); - aTemplate->max_level = atoi(row[5]); - aTemplate->type = atoi(row[6]); - aTemplate->type_data = atoi(row[7]); - aTemplate->type_count = atoi(row[8]); - aTemplate->assa_x = atof(row[9]); - aTemplate->assa_y = atof(row[10]); - aTemplate->assa_z = atof(row[11]); - aTemplate->assa_h = atof(row[12]); - strn0cpy(aTemplate->text, row[13], sizeof(aTemplate->text)); - aTemplate->duration = atoi(row[14]); - aTemplate->zone_in_time = atoi(row[15]); - aTemplate->win_points = atoi(row[16]); - aTemplate->lose_points = atoi(row[17]); - aTemplate->theme = atoi(row[18]); - aTemplate->zone_in_zone_id = atoi(row[19]); - aTemplate->zone_in_x = atof(row[20]); - aTemplate->zone_in_y = atof(row[21]); - aTemplate->zone_in_object_id = atoi(row[22]); - aTemplate->dest_x = atof(row[23]); - aTemplate->dest_y = atof(row[24]); - aTemplate->dest_z = atof(row[25]); - aTemplate->dest_h = atof(row[26]); - aTemplate->graveyard_zone_id = atoi(row[27]); - aTemplate->graveyard_x = atof(row[28]); - aTemplate->graveyard_y = atof(row[29]); - aTemplate->graveyard_z = atof(row[30]); - aTemplate->graveyard_radius = atof(row[31]); - adventure_templates[aTemplate->id] = aTemplate; - } + for (auto row = results.begin(); row != results.end(); ++row) { + auto adventure_template = new AdventureTemplate; + adventure_template->id = atoi(row[0]); + strcpy(adventure_template->zone, row[1]); + + adventure_template->zone_version = atoi(row[2]); + adventure_template->is_hard = atoi(row[3]); + adventure_template->min_level = atoi(row[4]); + adventure_template->max_level = atoi(row[5]); + adventure_template->type = atoi(row[6]); + adventure_template->type_data = atoi(row[7]); + adventure_template->type_count = atoi(row[8]); + adventure_template->assa_x = atof(row[9]); + adventure_template->assa_y = atof(row[10]); + adventure_template->assa_z = atof(row[11]); + adventure_template->assa_h = atof(row[12]); + + strn0cpy(adventure_template->text, row[13], sizeof(adventure_template->text)); + + adventure_template->duration = atoi(row[14]); + adventure_template->zone_in_time = atoi(row[15]); + adventure_template->win_points = atoi(row[16]); + adventure_template->lose_points = atoi(row[17]); + adventure_template->theme = atoi(row[18]); + adventure_template->zone_in_zone_id = atoi(row[19]); + adventure_template->zone_in_x = atof(row[20]); + adventure_template->zone_in_y = atof(row[21]); + adventure_template->zone_in_object_id = atoi(row[22]); + adventure_template->dest_x = atof(row[23]); + adventure_template->dest_y = atof(row[24]); + adventure_template->dest_z = atof(row[25]); + adventure_template->dest_h = atof(row[26]); + adventure_template->graveyard_zone_id = atoi(row[27]); + adventure_template->graveyard_x = atof(row[28]); + adventure_template->graveyard_y = atof(row[29]); + adventure_template->graveyard_z = atof(row[30]); + adventure_template->graveyard_radius = atof(row[31]); + + adventure_templates[adventure_template->id] = adventure_template; + } return true; } @@ -686,7 +723,7 @@ bool AdventureManager::LoadAdventureTemplates() bool AdventureManager::LoadAdventureEntries() { std::string query = "SELECT id, template_id FROM adventure_template_entry"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; diff --git a/world/main.cpp b/world/main.cpp index 72cc6d391..cdd5bea82 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -137,6 +137,25 @@ void LoadDatabaseConnections() std::exit(1); } + + /** + * Multi-tenancy: Content database + */ + if (!Config->ContentDbHost.empty()) { + if (!content_db.Connect( + !Config->ContentDbHost.empty() ? Config->ContentDbHost.c_str() : Config->DatabaseHost.c_str(), + !Config->ContentDbUsername.empty() ? Config->ContentDbUsername.c_str() : Config->DatabaseUsername.c_str(), + !Config->ContentDbPassword.empty() ? Config->ContentDbPassword.c_str() : Config->DatabasePassword.c_str(), + !Config->ContentDbName.empty() ? Config->ContentDbName.c_str() : Config->DatabaseDB.c_str(), + Config->ContentDbPort != 0 ? Config->ContentDbPort : Config->DatabasePort + )) { + LogError("Cannot continue without a content database connection"); + std::exit(1); + } + } else { + content_db.SetMysql(database.getMySQL()); + } + } void CheckForXMLConfigUpgrade() @@ -587,6 +606,7 @@ int main(int argc, char** argv) { if (InterserverTimer.Check()) { InterserverTimer.Start(); database.ping(); + content_db.ping(); std::string window_title = StringFormat("World: %s Clients: %i", Config->LongName.c_str(), client_list.GetClientCount()); UpdateWindowTitle(window_title); diff --git a/world/worlddb.cpp b/world/worlddb.cpp index f45207273..57e911415 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -27,6 +27,7 @@ #include "sof_char_create_data.h" WorldDatabase database; +WorldDatabase content_db; extern std::vector character_create_allocations; extern std::vector character_create_race_class_combos; diff --git a/world/worlddb.h b/world/worlddb.h index e367803ec..06b681ff9 100644 --- a/world/worlddb.h +++ b/world/worlddb.h @@ -46,5 +46,6 @@ private: }; extern WorldDatabase database; +extern WorldDatabase content_db; #endif /*WORLDDB_H_*/ diff --git a/zone/aa.cpp b/zone/aa.cpp index 1ccc6f656..c9e2eea9a 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1595,7 +1595,7 @@ bool Mob::CanPurchaseAlternateAdvancementRank(AA::Rank *rank, bool check_price, void Zone::LoadAlternateAdvancement() { LogInfo("Loading Alternate Advancement Data"); - if(!database.LoadAlternateAdvancementAbilities(aa_abilities, + if(!content_db.LoadAlternateAdvancementAbilities(aa_abilities, aa_ranks)) { aa_abilities.clear(); diff --git a/zone/command.cpp b/zone/command.cpp index 757e2d522..8a48ac8bc 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -8225,7 +8225,7 @@ void command_npcedit(Client *c, const Seperator *sep) if (strcasecmp(sep->arg[1], "adventure_template_id") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'adventure_template_id' set to %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET adventure_template_id = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } diff --git a/zone/zone.cpp b/zone/zone.cpp index 16cdc0af8..58c484f93 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -2209,7 +2209,7 @@ void Zone::DeleteQGlobal(std::string name, uint32 npcID, uint32 charID, uint32 z void Zone::LoadAdventureFlavor() { const std::string query = "SELECT id, text FROM adventure_template_entry_flavor"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } From 91ca5dcaded5000775f84525d80d3d124968da5b Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:02:41 -0500 Subject: [PATCH 003/272] Migrate alternate_currency [skip ci] --- zone/zone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 58c484f93..f113805c1 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -2162,7 +2162,7 @@ void Zone::LoadAlternateCurrencies() AltCurrencyDefinition_Struct current_currency; const std::string query = "SELECT id, item_id FROM alternate_currency"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } From 8e441f006e6d531dab05a43a4222d46c1c6018ba Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:06:40 -0500 Subject: [PATCH 004/272] Migrate auras [skip ci] --- zone/aura.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/aura.cpp b/zone/aura.cpp index 50026f998..2c00f529e 100644 --- a/zone/aura.cpp +++ b/zone/aura.cpp @@ -837,7 +837,7 @@ void Mob::MakeAura(uint16 spell_id) } AuraRecord record{}; - if (!database.GetAuraEntry(spell_id, record)) { + if (!content_db.GetAuraEntry(spell_id, record)) { Message(Chat::Red, "Unable to find data for aura %s", spells[spell_id].name); LogError("Unable to find data for aura [{}], check auras table", spell_id); return; From 1737ef605ccb12b800a8997e7e229fb47d1f0194 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:09:59 -0500 Subject: [PATCH 005/272] Migrate blocked_spells [skip ci] --- zone/zone.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index f113805c1..05219a3cc 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1941,10 +1941,10 @@ void Zone::SetGraveyard(uint32 zoneid, const glm::vec4& graveyardPosition) { void Zone::LoadZoneBlockedSpells(uint32 zone_id) { if (!blocked_spells) { - zone_total_blocked_spells = database.GetBlockedSpellsCount(zone_id); + zone_total_blocked_spells = content_db.GetBlockedSpellsCount(zone_id); if (zone_total_blocked_spells > 0) { blocked_spells = new ZoneSpellsBlocked[zone_total_blocked_spells]; - if (!database.LoadBlockedSpells(zone_total_blocked_spells, blocked_spells, zone_id)) { + if (!content_db.LoadBlockedSpells(zone_total_blocked_spells, blocked_spells, zone_id)) { LogError(" Failed to load blocked spells"); ClearBlockedSpells(); } From 13e8199298957bd5989450a3d38565e058b83805 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:10:40 -0500 Subject: [PATCH 006/272] Migrate books [skip ci] --- zone/client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/client.cpp b/zone/client.cpp index 8c4b42957..70f543da9 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -2093,7 +2093,7 @@ void Client::ReadBook(BookRequest_Struct *book) { return; } - std::string booktxt2 = database.GetBook(txtfile, &book_language); + std::string booktxt2 = content_db.GetBook(txtfile, &book_language); int length = booktxt2.length(); if (booktxt2[0] != '\0') { From 7c2a3f602c24af2617ca19099f91c7b8c6f58fd4 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:12:53 -0500 Subject: [PATCH 007/272] Migrate char_create_combinations [skip ci] --- world/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index cdd5bea82..40a1f949e 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -424,8 +424,8 @@ int main(int argc, char** argv) { PurgeInstanceTimer.Start(450000); LogInfo("Loading char create info"); - database.LoadCharacterCreateAllocations(); - database.LoadCharacterCreateCombos(); + content_db.LoadCharacterCreateAllocations(); + content_db.LoadCharacterCreateCombos(); std::unique_ptr console; if (Config->TelnetEnabled) { From c98d2743c511ee348d926cccb52cbf803e948970 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:20:38 -0500 Subject: [PATCH 008/272] Migrate doors [skip ci] --- common/database.cpp | 6 +++--- zone/doors.cpp | 16 ++++++++-------- zone/guild.cpp | 32 -------------------------------- zone/zone.cpp | 4 ++-- zone/zonedb.h | 2 -- 5 files changed, 13 insertions(+), 47 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index 3f64a21f9..69ac0b997 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -1130,9 +1130,9 @@ uint32 Database::GetZoneID(const char* zonename) { if (zonename == nullptr) return 0; - for (auto iter = zonename_array.begin(); iter != zonename_array.end(); ++iter) - if (strcasecmp(iter->second.c_str(), zonename) == 0) - return iter->first; + for (auto & iter : zonename_array) + if (strcasecmp(iter.second.c_str(), zonename) == 0) + return iter.first; return 0; } diff --git a/zone/doors.cpp b/zone/doors.cpp index 92e83f06d..6cb0617fd 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -83,8 +83,8 @@ Doors::Doors(const char *model, const glm::vec4 &position, uint8 open_type, uint strn0cpy(door_name, model, 32); strn0cpy(destination_zone_name, "NONE", 32); - this->database_id = (uint32) database.GetDoorsCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); - this->door_id = (uint8) database.GetDoorsDBCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); + this->database_id = (uint32) content_db.GetDoorsCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); + this->door_id = (uint8) content_db.GetDoorsDBCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()); this->open_type = open_type; this->size = size; @@ -451,7 +451,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { if (!disable_add_to_key_ring) { sender->KeyRingAdd(player_key); } - if (database.GetZoneID(destination_zone_name) == zone->GetZoneID()) { + if (content_db.GetZoneID(destination_zone_name) == zone->GetZoneID()) { sender->MovePC( zone->GetZoneID(), zone->GetInstanceID(), @@ -462,7 +462,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { ); } else { sender->MovePC( - database.GetZoneID(destination_zone_name), + content_db.GetZoneID(destination_zone_name), static_cast(destination_instance_id), m_Destination.x, m_Destination.y, @@ -473,7 +473,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { } if ((!IsDoorOpen() || open_type == 58) && (!required_key_item)) { - if (database.GetZoneID(destination_zone_name) == zone->GetZoneID()) { + if (content_db.GetZoneID(destination_zone_name) == zone->GetZoneID()) { sender->MovePC( zone->GetZoneID(), zone->GetInstanceID(), @@ -484,7 +484,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { ); } else { sender->MovePC( - database.GetZoneID(destination_zone_name), + content_db.GetZoneID(destination_zone_name), static_cast(this->destination_instance_id), m_Destination.x, m_Destination.y, @@ -820,14 +820,14 @@ void Doors::SetDisableTimer(bool flag) { void Doors::CreateDatabaseEntry() { - if (database.GetDoorsDBCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()) - 1 >= 255) { + if (content_db.GetDoorsDBCountPlusOne(zone->GetShortName(), zone->GetInstanceVersion()) - 1 >= 255) { return; } /** * Persist */ - database.InsertDoor( + content_db.InsertDoor( GetDoorDBID(), GetDoorID(), GetDoorName(), diff --git a/zone/guild.cpp b/zone/guild.cpp index 166e6edfb..324223acf 100644 --- a/zone/guild.cpp +++ b/zone/guild.cpp @@ -408,35 +408,3 @@ void Client::GuildChangeRank(const char* name, uint32 guild_id, uint32 oldrank, SendGuildMembers(guild_id, true); }*/ - -bool ZoneDatabase::CheckGuildDoor(uint8 doorid, uint16 guild_id, const char* zone) { - - std::string query = StringFormat("SELECT guild FROM doors WHERE doorid = %i AND zone = '%s'", - doorid-128, zone); - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - if (results.RowCount() != 1) - return false; - - auto row = results.begin(); - return atoi(row[0]) == guild_id; -} - -bool ZoneDatabase::SetGuildDoor(uint8 doorid,uint16 guild_id, const char* zone) { - - if (doorid > 127) - doorid = doorid - 128; - - std::string query = StringFormat("UPDATE doors SET guild = %i WHERE (doorid=%i) AND (zone='%s')", - guild_id, doorid, zone); - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - return (results.RowsAffected() > 0); -} - diff --git a/zone/zone.cpp b/zone/zone.cpp index 05219a3cc..62ff342ec 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -743,7 +743,7 @@ void Zone::LoadZoneDoors(const char* zone, int16 version) LogInfo("Loading doors for [{}] ", zone); uint32 maxid; - int32 count = database.GetDoorsCount(&maxid, zone, version); + int32 count = content_db.GetDoorsCount(&maxid, zone, version); if(count < 1) { LogInfo("No doors loaded"); return; @@ -751,7 +751,7 @@ void Zone::LoadZoneDoors(const char* zone, int16 version) auto dlist = new Door[count]; - if(!database.LoadDoors(count, dlist, zone, version)) { + if(!content_db.LoadDoors(count, dlist, zone, version)) { LogError("Failed to load doors"); delete[] dlist; return; diff --git a/zone/zonedb.h b/zone/zonedb.h index 7c93b456c..cff2e14c1 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -503,8 +503,6 @@ public: bool DoorIsOpen(uint8 door_id,const char* zone_name); void SetDoorPlace(uint8 value,uint8 door_id,const char* zone_name); bool LoadDoors(int32 door_count, Door *into, const char *zone_name, int16 version); - bool CheckGuildDoor(uint8 doorid,uint16 guild_id, const char* zone); - bool SetGuildDoor(uint8 doorid,uint16 guild_id, const char* zone); uint32 GetGuildEQID(uint32 guilddbid); void UpdateDoorGuildID(int doorid, int guild_id); int32 GetDoorsCount(uint32* oMaxID, const char *zone_name, int16 version); From ec5be4985e260d3470f1f702256c3a55fd73ec15 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:22:36 -0500 Subject: [PATCH 009/272] Migrate factions [skip ci] --- zone/command.cpp | 4 ++-- zone/main.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 8a48ac8bc..e9aa79c3c 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -4015,7 +4015,7 @@ void command_faction(Client *c, const Seperator *sep) else { query = fmt::format("SELECT `id`,`name` FROM `faction_list` WHERE `name` LIKE '%{}%'", faction_filter.c_str()); } - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) return; if (results.RowCount() == 0) { @@ -4048,7 +4048,7 @@ void command_faction(Client *c, const Seperator *sep) revquery = fmt::format( "SELECT id,`name`, current_value FROM faction_list INNER JOIN faction_values ON faction_list.id = faction_values.faction_id WHERE `name` like '%{}%' and char_id = {}", faction_filter.c_str(), charid); } - auto revresults = database.QueryDatabase(revquery); + auto revresults = content_db.QueryDatabase(revquery); if (!revresults.Success()) return; if (revresults.RowCount() == 0) { diff --git a/zone/main.cpp b/zone/main.cpp index 1867ba42b..a8c63830c 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -353,7 +353,7 @@ int main(int argc, char** argv) { guild_mgr.LoadGuilds(); LogInfo("Loading factions"); - database.LoadFactionData(); + content_db.LoadFactionData(); LogInfo("Loading titles"); title_manager.LoadTitles(); From ed06129f9d848d7d1076b80566ed08a9cbd35fe3 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:24:21 -0500 Subject: [PATCH 010/272] Migrate fishing [skip ci] --- zone/forage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 24c4641e4..490e0ca27 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -274,7 +274,7 @@ void Client::GoFish() if (zone->random.Int(0, 399) <= fishing_skill ) { uint32 npc_id = 0; uint8 npc_chance = 0; - food_id = database.GetZoneFishing(m_pp.zone_id, fishing_skill, npc_id, npc_chance); + food_id = content_db.GetZoneFishing(m_pp.zone_id, fishing_skill, npc_id, npc_chance); //check for add NPC if (npc_chance > 0 && npc_id) { From 0d270fdac75c5cc599912b99e2318871195ec503 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:30:52 -0500 Subject: [PATCH 011/272] Migrate forage [skip ci] --- zone/forage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 490e0ca27..8e0290900 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -402,7 +402,7 @@ void Client::ForageItem(bool guarantee) { uint32 stringid = FORAGE_NOEAT; if (zone->random.Roll(25)) { - foragedfood = database.GetZoneForage(m_pp.zone_id, skill_level); + foragedfood = content_db.GetZoneForage(m_pp.zone_id, skill_level); } //not an else in case theres no DB food From b3e4d90e4f425d7056b8820e43e7f346cd69f96e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:31:06 -0500 Subject: [PATCH 012/272] Migrate tasks [skip ci] --- zone/tasks.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 778a556e3..bbee65c1e 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -69,7 +69,7 @@ bool TaskManager::LoadTaskSets() "ORDER BY `id`, `taskid` ASC", MAXTASKSETS, MAXTASKS ); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("Error in TaskManager::LoadTaskSets: [{}]", results.ErrorMessage().c_str()); return false; @@ -131,7 +131,7 @@ bool TaskManager::LoadTasks(int singleTask) const char *ERR_MYSQLERROR = "[TASKS]Error in TaskManager::LoadTasks: %s"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError(ERR_MYSQLERROR, results.ErrorMessage().c_str()); return false; @@ -188,7 +188,7 @@ bool TaskManager::LoadTasks(int singleTask) "`goalcount`, `delivertonpc`, `zones`, `optional` FROM `task_activities` WHERE `taskid` = " "%i AND `activityid` < %i ORDER BY taskid, activityid ASC", singleTask, MAXACTIVITIESPERTASK); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { LogError(ERR_MYSQLERROR, results.ErrorMessage().c_str()); return false; @@ -3349,7 +3349,7 @@ bool TaskGoalListManager::LoadLists() std::string query = "SELECT `listid`, COUNT(`entry`) " "FROM `goallists` GROUP by `listid` " "ORDER BY `listid`"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } @@ -3379,7 +3379,7 @@ bool TaskGoalListManager::LoadLists() "WHERE `listid` = %i " "ORDER BY `entry` ASC LIMIT %i", listID, size); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { continue; } @@ -3484,7 +3484,7 @@ bool TaskProximityManager::LoadProximities(int zoneID) { "`miny`, `maxy`, `minz`, `maxz` " "FROM `proximities` WHERE `zoneid` = %i " "ORDER BY `zoneid` ASC", zoneID); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } From df66c75df2fd9244b8cd05a8102345d869da33e6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:31:20 -0500 Subject: [PATCH 013/272] Migrate global_loot [skip ci] --- zone/zone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 62ff342ec..0b343cd4a 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -998,7 +998,7 @@ bool Zone::Init(bool iStaticZone) { LoadAlternateAdvancement(); - database.LoadGlobalLoot(); + content_db.LoadGlobalLoot(); //Load merchant data zone->GetMerchantDataForZoneLoad(); From f5cba5ecabec085e1b496237b236d3e618abfd43 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:41:09 -0500 Subject: [PATCH 014/272] Migrate tradeskills and traps [skip ci] --- zone/command.cpp | 4 ++-- zone/questmgr.cpp | 4 ++-- zone/tradeskills.cpp | 13 ++++++++----- zone/trap.cpp | 2 +- zone/zone.cpp | 4 ++-- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index e9aa79c3c..1bdb2562b 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -12150,7 +12150,7 @@ void command_enablerecipe(Client *c, const Seperator *sep) return; } if (recipe_id > 0) { - success = database.EnableRecipe(recipe_id); + success = content_db.EnableRecipe(recipe_id); if (success) { c->Message(Chat::White, "Recipe enabled."); } @@ -12177,7 +12177,7 @@ void command_disablerecipe(Client *c, const Seperator *sep) return; } if (recipe_id > 0) { - success = database.DisableRecipe(recipe_id); + success = content_db.DisableRecipe(recipe_id); if (success) { c->Message(Chat::White, "Recipe disabled."); } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 033b42f1a..274b4b8a1 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3158,7 +3158,7 @@ bool QuestManager::EnableRecipe(uint32 recipe_id) { bool success = false; if (recipe_id > 0) - success = database.EnableRecipe(recipe_id); + success = content_db.EnableRecipe(recipe_id); return (success); } @@ -3166,7 +3166,7 @@ bool QuestManager::DisableRecipe(uint32 recipe_id) { bool success = false; if (recipe_id > 0) - success = database.DisableRecipe(recipe_id); + success = content_db.DisableRecipe(recipe_id); return (success); } diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index b4451119f..8c9072eba 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -336,7 +336,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob } DBTradeskillRecipe_Struct spec; - if (!database.GetTradeRecipe(container, c_type, some_id, user->CharacterID(), &spec)) { + if (!content_db.GetTradeRecipe(container, c_type, some_id, user->CharacterID(), &spec)) { user->MessageString(Chat::Emote,TRADESKILL_NOCOMBINE); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); user->QueuePacket(outapp); @@ -489,7 +489,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac "FROM tradeskill_recipe_entries AS tre " "WHERE tre.componentcount > 0 AND tre.recipe_id = %u", rac->recipe_id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { user->QueuePacket(outapp); safe_delete(outapp); @@ -706,7 +706,7 @@ EQEmu::skills::SkillType Object::TypeToSkill(uint32 type) void Client::TradeskillSearchResults(const std::string &query, unsigned long objtype, unsigned long someid) { - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -759,7 +759,7 @@ void Client::SendTradeskillDetails(uint32 recipe_id) { "LEFT JOIN items AS i ON tre.item_id = i.id " "WHERE tre.componentcount > 0 AND tre.recipe_id = %u", recipe_id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -1427,7 +1427,10 @@ void Client::LearnRecipe(uint32 recipeID) "FROM char_recipe_list WHERE char_id = %u) AS crl " "ON tr.id = crl.recipe_id " "WHERE tr.id = %u ;", CharacterID(), recipeID); - auto results = database.QueryDatabase(query); + + // TODO: BOUNDARY REWRITE + + auto results = database.QueryDatabase(query); if (!results.Success()) { return; } diff --git a/zone/trap.cpp b/zone/trap.cpp index 7027f3e28..e235e3912 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -557,6 +557,6 @@ void Trap::UpdateTrap(bool respawn, bool repopnow) charid = 0; if (respawn) { - database.SetTrapData(this, repopnow); + content_db.SetTrapData(this, repopnow); } } diff --git a/zone/zone.cpp b/zone/zone.cpp index 0b343cd4a..38f23f8ee 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -956,7 +956,7 @@ bool Zone::Init(bool iStaticZone) { } LogInfo("Loading traps"); - if (!database.LoadTraps(short_name, GetInstanceVersion())) + if (!content_db.LoadTraps(short_name, GetInstanceVersion())) { LogError("Loading traps failed"); return false; @@ -1042,7 +1042,7 @@ void Zone::ReloadStaticData() { LogInfo("Reloading traps"); entity_list.RemoveAllTraps(); - if (!database.LoadTraps(GetShortName(), GetInstanceVersion())) + if (!content_db.LoadTraps(GetShortName(), GetInstanceVersion())) { LogError("Reloading traps failed"); } From 4b2fe732d2e70d9412dd356caf99063c5304d86e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:41:58 -0500 Subject: [PATCH 015/272] Migrate tributes [skip ci] --- zone/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/main.cpp b/zone/main.cpp index a8c63830c..c700f72f5 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -359,7 +359,7 @@ int main(int argc, char** argv) { title_manager.LoadTitles(); LogInfo("Loading tributes"); - database.LoadTributes(); + content_db.LoadTributes(); LogInfo("Loading corpse timers"); database.GetDecayTimes(npcCorpseDecayTimes); From 8d21225eb3f119b61f8329cd83a0a857cfacfa8b Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:43:16 -0500 Subject: [PATCH 016/272] Migrate veteran_reward_templates [skip ci] --- zone/zone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 38f23f8ee..7c40f84a9 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -2117,7 +2117,7 @@ void Zone::LoadVeteranRewards() "FROM veteran_reward_templates " "WHERE reward_slot < 8 and claim_id > 0 " "ORDER by claim_id, reward_slot"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } From 3a09197d77d80bbeba7413e8130e287b814314a9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:55:44 -0500 Subject: [PATCH 017/272] Migrate zone [skip ci] --- world/main.cpp | 2 +- world/zoneserver.cpp | 2 +- zone/bot_command.cpp | 2 +- zone/client_packet.cpp | 4 +-- zone/command.cpp | 14 +++++----- zone/main.cpp | 2 +- zone/questmgr.cpp | 2 +- zone/zone.cpp | 62 ++++++++++++++++++++++++++++++------------ zone/zoning.cpp | 10 +++---- 9 files changed, 63 insertions(+), 37 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 40a1f949e..2b92bde98 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -330,7 +330,7 @@ int main(int argc, char** argv) { database.PurgeAllDeletedDataBuckets(); LogInfo("Loading zones"); - database.LoadZoneNames(); + content_db.LoadZoneNames(); LogInfo("Clearing groups"); database.ClearGroup(); LogInfo("Clearing raids"); diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 08ccbfaff..0a31d40fe 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -108,7 +108,7 @@ bool ZoneServer::SetZone(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { if (zn) { strn0cpy(zone_name, zn, sizeof(zone_name)); - if (database.GetZoneLongName((char*)zone_name, &longname, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)) + if (content_db.GetZoneLongName((char*)zone_name, &longname, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)) { strn0cpy(long_name, longname, sizeof(long_name)); safe_delete_array(longname); diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index 9c202fed8..3b539d052 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -1061,7 +1061,7 @@ private: return; std::string query = "SELECT `short_name`, `long_name` FROM `zone` WHERE '' NOT IN (`short_name`, `long_name`)"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("load_teleport_zone_names() - Error in zone names query: [{}]", results.ErrorMessage().c_str()); return; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 1848a926c..7d8664737 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -6407,7 +6407,7 @@ void Client::Handle_OP_GMZoneRequest(const EQApplicationPacket *app) strcpy(tarzone, zname); // this both loads the safe points and does a sanity check on zone name - if (!database.GetSafePoints(tarzone, 0, &tarx, &tary, &tarz, &minstatus, &minlevel)) { + if (!content_db.GetSafePoints(tarzone, 0, &tarx, &tary, &tarz, &minstatus, &minlevel)) { tarzone[0] = 0; } @@ -12418,7 +12418,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) zoneid = atoi(row[0]); char* name = nullptr; - database.GetZoneLongName(database.GetZoneName(zoneid), &name); + content_db.GetZoneLongName(database.GetZoneName(zoneid), &name); Message(Chat::Yellow, "%d - %s", zoneid, name); } diff --git a/zone/command.cpp b/zone/command.cpp index 1bdb2562b..512992f51 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -4136,7 +4136,7 @@ void command_findzone(Client *c, const Seperator *sep) } } - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Error querying database."); c->Message(Chat::White, query.c_str()); @@ -4273,7 +4273,7 @@ void command_reloadlevelmods(Client *c, const Seperator *sep) void command_reloadzps(Client *c, const Seperator *sep) { - database.LoadStaticZonePoints(&zone->zone_point_list, zone->GetShortName(), zone->GetInstanceVersion()); + content_db.LoadStaticZonePoints(&zone->zone_point_list, zone->GetShortName(), zone->GetInstanceVersion()); c->Message(Chat::White, "Reloading server zone_points."); } @@ -4950,7 +4950,7 @@ void command_gmzone(Client *c, const Seperator *sep) int16 min_status = 0; uint8 min_level = 0; - if (!database.GetSafePoints( + if (!content_db.GetSafePoints( zone_short_name, zone_version, &target_x, @@ -9101,7 +9101,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(!strcasecmp(sep->arg[1], "listzones")) { std::string query = "SELECT zoneidnumber, short_name, long_name, version, flag_needed " "FROM zone WHERE flag_needed != ''"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -9642,8 +9642,8 @@ void command_deletegraveyard(Client *c, const Seperator *sep) return; } - zoneid = database.GetZoneID(sep->arg[1]); - graveyard_id = database.GetZoneGraveyardID(zoneid, 0); + zoneid = content_db.GetZoneID(sep->arg[1]); + graveyard_id = content_db.GetZoneGraveyardID(zoneid, 0); if(zoneid > 0 && graveyard_id > 0) { if(database.DeleteGraveyard(zoneid, graveyard_id)) @@ -12568,7 +12568,7 @@ void command_mysqltest(Client *c, const Seperator *sep) t = std::clock(); for (i = 0; i < atoi(sep->arg[1]); i++){ std::string query = "SELECT * FROM `zone`"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); } } LogDebug("MySQL Test Took [{}] seconds", ((float)(std::clock() - t)) / CLOCKS_PER_SEC); diff --git a/zone/main.cpp b/zone/main.cpp index c700f72f5..989962554 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -313,7 +313,7 @@ int main(int argc, char** argv) { } LogInfo("Loading zone names"); - database.LoadZoneNames(); + content_db.LoadZoneNames(); LogInfo("Loading items"); if (!database.LoadItems(hotfix_name)) { diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 274b4b8a1..73936bc2c 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3065,7 +3065,7 @@ int32 QuestManager::GetZoneID(const char *zone) { const char* QuestManager::GetZoneLongName(const char *zone) { char *long_name; - database.GetZoneLongName(zone, &long_name); + content_db.GetZoneLongName(zone, &long_name); std::string ln = long_name; safe_delete_array(long_name); diff --git a/zone/zone.cpp b/zone/zone.cpp index 7c40f84a9..0982f2d39 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -156,7 +156,7 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { /** * Set Shutdown timer */ - uint32 shutdown_timer = static_cast(database.getZoneShutDownDelay(zone->GetZoneID(), zone->GetInstanceVersion())); + uint32 shutdown_timer = static_cast(content_db.getZoneShutDownDelay(zone->GetZoneID(), zone->GetInstanceVersion())); zone->StartShutdownTimer(shutdown_timer); /* @@ -811,7 +811,7 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) pvpzone = false; if(database.GetServerType() == 1) pvpzone = true; - database.GetZoneLongName(short_name, &long_name, file_name, &m_SafePoint.x, &m_SafePoint.y, &m_SafePoint.z, &pgraveyard_id, &pMaxClients); + content_db.GetZoneLongName(short_name, &long_name, file_name, &m_SafePoint.x, &m_SafePoint.y, &m_SafePoint.z, &pgraveyard_id, &pMaxClients); if(graveyard_id() > 0) { LogDebug("Graveyard ID is [{}]", graveyard_id()); @@ -931,7 +931,7 @@ bool Zone::Init(bool iStaticZone) { } LogInfo("Loading static zone points"); - if (!database.LoadStaticZonePoints(&zone_point_list, short_name, GetInstanceVersion())) { + if (!content_db.LoadStaticZonePoints(&zone_point_list, short_name, GetInstanceVersion())) { LogError("Loading static zone points failed"); return false; } @@ -1019,7 +1019,7 @@ bool Zone::Init(bool iStaticZone) { petition_list.ReadDatabase(); LogInfo("Loading timezone data"); - zone->zone_time.setEQTimeZone(database.GetZoneTZ(zoneid, GetInstanceVersion())); + zone->zone_time.setEQTimeZone(content_db.GetZoneTZ(zoneid, GetInstanceVersion())); LogInfo("Init Finished: ZoneID = [{}], Time Offset = [{}]", zoneid, zone->zone_time.getEQTimeZone()); @@ -1036,7 +1036,7 @@ void Zone::ReloadStaticData() { LogInfo("Reloading static zone points"); zone_point_list.Clear(); - if (!database.LoadStaticZonePoints(&zone_point_list, GetShortName(), GetInstanceVersion())) { + if (!content_db.LoadStaticZonePoints(&zone_point_list, GetShortName(), GetInstanceVersion())) { LogError("Loading static zone points failed"); } @@ -1082,19 +1082,44 @@ bool Zone::LoadZoneCFG(const char* filename, uint16 instance_id) memset(&newzone_data, 0, sizeof(NewZone_Struct)); map_name = nullptr; - if(!database.GetZoneCFG(database.GetZoneID(filename), instance_id, &newzone_data, can_bind, - can_combat, can_levitate, can_castoutdoor, is_city, is_hotzone, allow_mercs, max_movement_update_range, zone_type, default_ruleset, &map_name)) - { + if (!content_db.GetZoneCFG( + content_db.GetZoneID(filename), + instance_id, + &newzone_data, + can_bind, + can_combat, + can_levitate, + can_castoutdoor, + is_city, + is_hotzone, + allow_mercs, + max_movement_update_range, + zone_type, + default_ruleset, + &map_name + )) { // If loading a non-zero instance failed, try loading the default - if (instance_id != 0) - { + if (instance_id != 0) { safe_delete_array(map_name); - if(!database.GetZoneCFG(database.GetZoneID(filename), 0, &newzone_data, can_bind, can_combat, can_levitate, - can_castoutdoor, is_city, is_hotzone, allow_mercs, max_movement_update_range, zone_type, default_ruleset, &map_name)) - { + if (!content_db.GetZoneCFG( + content_db.GetZoneID(filename), + 0, + &newzone_data, + can_bind, + can_combat, + can_levitate, + can_castoutdoor, + is_city, + is_hotzone, + allow_mercs, + max_movement_update_range, + zone_type, + default_ruleset, + &map_name + )) { LogError("Error loading the Zone Config"); return false; - } + } } } @@ -1107,8 +1132,9 @@ bool Zone::LoadZoneCFG(const char* filename, uint16 instance_id) return true; } -bool Zone::SaveZoneCFG() { - return database.SaveZoneCFG(GetZoneID(), GetInstanceVersion(), &newzone_data); +bool Zone::SaveZoneCFG() +{ + return content_db.SaveZoneCFG(GetZoneID(), GetInstanceVersion(), &newzone_data); } void Zone::AddAuth(ServerZoneIncomingClient_Struct* szic) { @@ -1487,7 +1513,7 @@ bool Zone::HasWeather() void Zone::StartShutdownTimer(uint32 set_time) { if (set_time > autoshutdown_timer.GetRemainingTime()) { if (set_time == (RuleI(Zone, AutoShutdownDelay))) { - set_time = static_cast(database.getZoneShutDownDelay(GetZoneID(), GetInstanceVersion())); + set_time = static_cast(content_db.getZoneShutDownDelay(GetZoneID(), GetInstanceVersion())); } autoshutdown_timer.SetTimer(set_time); @@ -2358,7 +2384,7 @@ uint32 Zone::GetSpawnKillCount(uint32 in_spawnid) { void Zone::UpdateHotzone() { std::string query = StringFormat("SELECT hotzone FROM zone WHERE short_name = '%s'", GetShortName()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) return; diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 8eaa05c5a..7ee503b66 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -170,7 +170,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { int16 minstatus = 0; uint8 minlevel = 0; char flag_needed[128]; - if(!database.GetSafePoints(target_zone_name, database.GetInstanceVersion(target_instance_id), &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_needed)) { + if(!content_db.GetSafePoints(target_zone_name, database.GetInstanceVersion(target_instance_id), &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_needed)) { //invalid zone... Message(Chat::Red, "Invalid target zone while getting safe points."); LogError("Zoning [{}]: Unable to get safe coordinates for zone [{}]", GetName(), target_zone_name); @@ -483,7 +483,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z char* pZoneName = nullptr; pShortZoneName = database.GetZoneName(zoneID); - database.GetZoneLongName(pShortZoneName, &pZoneName); + content_db.GetZoneLongName(pShortZoneName, &pZoneName); if(!pZoneName) { Message(Chat::Red, "Invalid zone number specified"); @@ -831,7 +831,7 @@ void Client::SendZoneFlagInfo(Client *to) const { const char *short_name = database.GetZoneName(zoneid); char *long_name = nullptr; - database.GetZoneLongName(short_name, &long_name); + content_db.GetZoneLongName(short_name, &long_name); if(long_name == nullptr) long_name = empty; @@ -839,7 +839,7 @@ void Client::SendZoneFlagInfo(Client *to) const { int16 minstatus = 0; uint8 minlevel = 0; char flag_name[128]; - if(!database.GetSafePoints(short_name, 0, &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_name)) { + if(!content_db.GetSafePoints(short_name, 0, &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_name)) { strcpy(flag_name, "(ERROR GETTING NAME)"); } @@ -861,7 +861,7 @@ bool Client::CanBeInZone() { int16 minstatus = 0; uint8 minlevel = 0; char flag_needed[128]; - if(!database.GetSafePoints(zone->GetShortName(), zone->GetInstanceVersion(), &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_needed)) { + if(!content_db.GetSafePoints(zone->GetShortName(), zone->GetInstanceVersion(), &safe_x, &safe_y, &safe_z, &minstatus, &minlevel, flag_needed)) { //this should not happen... LogDebug("[CLIENT] Unable to query zone info for ourself [{}]", zone->GetShortName()); return(false); From 262432f504f2013aed2a625b046e836fe8d862d5 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 03:58:30 -0500 Subject: [PATCH 018/272] Migrate start_zones [skip ci] --- world/client.cpp | 2 +- world/worlddb.cpp | 2 +- zone/client_packet.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/world/client.cpp b/world/client.cpp index 2d4b65e71..c33b3a8d1 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -1528,7 +1528,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) } } /* use normal starting zone logic to either get defaults, or if startzone was set, load that from the db table.*/ - bool ValidStartZone = database.GetStartZone(&pp, cc, m_ClientVersionBit & EQEmu::versions::maskTitaniumAndEarlier); + bool ValidStartZone = content_db.GetStartZone(&pp, cc, m_ClientVersionBit & EQEmu::versions::maskTitaniumAndEarlier); if (!ValidStartZone){ return false; diff --git a/world/worlddb.cpp b/world/worlddb.cpp index 57e911415..e1dbd0196 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -202,7 +202,7 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o p_character_select_entry_struct->Deity, p_character_select_entry_struct->Race ); - auto results_bind = database.QueryDatabase(character_list_query); + auto results_bind = content_db.QueryDatabase(character_list_query); for (auto row_d = results_bind.begin(); row_d != results_bind.end(); ++row_d) { /* If a bind_id is specified, make them start there */ if (atoi(row_d[1]) != 0) { diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 7d8664737..e5df21477 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -12374,7 +12374,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) std::string query = StringFormat("SELECT zone_id, bind_id, x, y, z FROM start_zones " "WHERE player_class=%i AND player_deity=%i AND player_race=%i", m_pp.class_, m_pp.deity, m_pp.race); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("No valid start zones found for /setstartcity"); return; @@ -12405,7 +12405,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) query = StringFormat("SELECT zone_id, bind_id FROM start_zones " "WHERE player_class=%i AND player_deity=%i AND player_race=%i", m_pp.class_, m_pp.deity, m_pp.race); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) return; From 6af1ae32aedf09e9ee9f54544e30968d4ef82a70 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 04:10:21 -0500 Subject: [PATCH 019/272] Migrate grids [skip ci] --- world/client.cpp | 2 +- zone/command.cpp | 18 +++++++++--------- zone/questmgr.cpp | 2 +- zone/spawn2.cpp | 2 +- zone/waypoints.cpp | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/world/client.cpp b/world/client.cpp index c33b3a8d1..c24dea2ab 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -1588,7 +1588,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) database.GetZoneName(pp.binds[4].zoneId), pp.binds[4].zoneId, pp.binds[4].x, pp.binds[4].y, pp.binds[4].z); /* Starting Items inventory */ - database.SetStartingItems(&pp, &inv, pp.race, pp.class_, pp.deity, pp.zone_id, pp.name, GetAdmin()); + content_db.SetStartingItems(&pp, &inv, pp.race, pp.class_, pp.deity, pp.zone_id, pp.name, GetAdmin()); // now we give the pp and the inv we made to StoreCharacter // to see if we can store it diff --git a/zone/command.cpp b/zone/command.cpp index 512992f51..8fa109cc8 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -2422,10 +2422,10 @@ void command_setlsinfo(Client *c, const Seperator *sep) void command_grid(Client *c, const Seperator *sep) { if (strcasecmp("max", sep->arg[1]) == 0) { - c->Message(Chat::White, "Highest grid ID in this zone: %d", database.GetHighestGrid(zone->GetZoneID())); + c->Message(Chat::White, "Highest grid ID in this zone: %d", content_db.GetHighestGrid(zone->GetZoneID())); } else if (strcasecmp("add", sep->arg[1]) == 0) { - database.ModifyGrid(c, false, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), zone->GetZoneID()); + content_db.ModifyGrid(c, false, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), zone->GetZoneID()); } else if (strcasecmp("show", sep->arg[1]) == 0) { @@ -2445,7 +2445,7 @@ void command_grid(Client *c, const Seperator *sep) target->CastToNPC()->GetGrid() ); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Error querying database."); c->Message(Chat::White, query.c_str()); @@ -2485,7 +2485,7 @@ void command_grid(Client *c, const Seperator *sep) } } else if (strcasecmp("delete", sep->arg[1]) == 0) { - database.ModifyGrid(c, true, atoi(sep->arg[2]), 0, 0, zone->GetZoneID()); + content_db.ModifyGrid(c, true, atoi(sep->arg[2]), 0, 0, zone->GetZoneID()); } else { c->Message(Chat::White, "Usage: #grid add/delete grid_num wandertype pausetype"); @@ -2500,18 +2500,18 @@ void command_wp(Client *c, const Seperator *sep) if (strcasecmp("add", sep->arg[1]) == 0) { if (wp == 0) //default to highest if it's left blank, or we enter 0 - wp = database.GetHighestWaypoint(zone->GetZoneID(), atoi(sep->arg[2])) + 1; + wp = content_db.GetHighestWaypoint(zone->GetZoneID(), atoi(sep->arg[2])) + 1; if (strcasecmp("-h", sep->arg[5]) == 0) { - database.AddWP(c, atoi(sep->arg[2]),wp, c->GetPosition(), atoi(sep->arg[3]),zone->GetZoneID()); + content_db.AddWP(c, atoi(sep->arg[2]),wp, c->GetPosition(), atoi(sep->arg[3]),zone->GetZoneID()); } else { auto position = c->GetPosition(); position.w = -1; - database.AddWP(c, atoi(sep->arg[2]),wp, position, atoi(sep->arg[3]),zone->GetZoneID()); + content_db.AddWP(c, atoi(sep->arg[2]),wp, position, atoi(sep->arg[3]),zone->GetZoneID()); } } else if (strcasecmp("delete", sep->arg[1]) == 0) - database.DeleteWaypoint(c, atoi(sep->arg[2]),wp,zone->GetZoneID()); + content_db.DeleteWaypoint(c, atoi(sep->arg[2]),wp,zone->GetZoneID()); else c->Message(Chat::White,"Usage: #wp add/delete grid_num pause wp_num [-h]"); } @@ -7111,7 +7111,7 @@ void command_wpadd(Client *c, const Seperator *sep) position.w = -1; } - uint32 tmp_grid = database.AddWPForSpawn(c, s2info->GetID(), position, pause, type1, type2, zone->GetZoneID()); + uint32 tmp_grid = content_db.AddWPForSpawn(c, s2info->GetID(), position, pause, type1, type2, zone->GetZoneID()); if (tmp_grid) { target->CastToNPC()->SetGrid(tmp_grid); } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 73936bc2c..c9e2ace70 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -1832,7 +1832,7 @@ void QuestManager::showgrid(int grid) { std::string query = StringFormat("SELECT `x`,`y`,`z` FROM grid_entries " "WHERE `gridid` = %i AND `zoneid` = %i " "ORDER BY `number`", grid, zone->GetZoneID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogQuests("Error loading grid [{}] for showgrid(): [{}]", grid, results.ErrorMessage().c_str()); return; diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 958500550..437846176 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -239,7 +239,7 @@ bool Spawn2::Process() { if (spawn_group->wp_spawns && grid_ > 0) { glm::vec4 wploc; - starting_wp = database.GetRandomWaypointLocFromGrid(wploc, zone->GetZoneID(), grid_); + starting_wp = content_db.GetRandomWaypointLocFromGrid(wploc, zone->GetZoneID(), grid_); if (wploc.x != 0.0f || wploc.y != 0.0f || wploc.z != 0.0f) { loc = wploc; diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 65f4fd099..7c44472c1 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -578,7 +578,7 @@ void NPC::AssignWaypoints(int32 grid, int start_wp) // Retrieve the wander and pause types for this grid std::string query = StringFormat("SELECT `type`, `type2` FROM `grid` WHERE `id` = %i AND `zoneid` = %i", grid, zone->GetZoneID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -597,7 +597,7 @@ void NPC::AssignWaypoints(int32 grid, int start_wp) query = StringFormat("SELECT `x`,`y`,`z`,`pause`,`heading`, `centerpoint` " "FROM grid_entries WHERE `gridid` = %i AND `zoneid` = %i " "ORDER BY `number`", grid, zone->GetZoneID()); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -1148,7 +1148,7 @@ int ZoneDatabase::GetRandomWaypointLocFromGrid(glm::vec4 &loc, uint16 zoneid, in std::string query = StringFormat("SELECT `x`,`y`,`z`,`heading` " "FROM grid_entries WHERE `gridid` = %i AND `zoneid` = %u ORDER BY `number`", grid, zone->GetZoneID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { Log(Logs::General, Logs::Error, "MySQL Error while trying get random waypoint loc from grid %i in zoneid %u; %s", grid, zoneid, results.ErrorMessage().c_str()); return 0; From 26b24c02f153c29df57a1e57b494611ba8091c4e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 04:23:44 -0500 Subject: [PATCH 020/272] Simplify connection logic --- world/main.cpp | 10 +++++----- zone/main.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 2b92bde98..4d5511f7c 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -143,11 +143,11 @@ void LoadDatabaseConnections() */ if (!Config->ContentDbHost.empty()) { if (!content_db.Connect( - !Config->ContentDbHost.empty() ? Config->ContentDbHost.c_str() : Config->DatabaseHost.c_str(), - !Config->ContentDbUsername.empty() ? Config->ContentDbUsername.c_str() : Config->DatabaseUsername.c_str(), - !Config->ContentDbPassword.empty() ? Config->ContentDbPassword.c_str() : Config->DatabasePassword.c_str(), - !Config->ContentDbName.empty() ? Config->ContentDbName.c_str() : Config->DatabaseDB.c_str(), - Config->ContentDbPort != 0 ? Config->ContentDbPort : Config->DatabasePort + Config->ContentDbHost.c_str() , + Config->ContentDbUsername.c_str(), + Config->ContentDbPassword.c_str(), + Config->ContentDbName.c_str(), + Config->ContentDbPort )) { LogError("Cannot continue without a content database connection"); std::exit(1); diff --git a/zone/main.cpp b/zone/main.cpp index 989962554..96dbac95d 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -242,11 +242,11 @@ int main(int argc, char** argv) { */ if (!Config->ContentDbHost.empty()) { if (!content_db.Connect( - !Config->ContentDbHost.empty() ? Config->ContentDbHost.c_str() : Config->DatabaseHost.c_str(), - !Config->ContentDbUsername.empty() ? Config->ContentDbUsername.c_str() : Config->DatabaseUsername.c_str(), - !Config->ContentDbPassword.empty() ? Config->ContentDbPassword.c_str() : Config->DatabasePassword.c_str(), - !Config->ContentDbName.empty() ? Config->ContentDbName.c_str() : Config->DatabaseDB.c_str(), - Config->ContentDbPort != 0 ? Config->ContentDbPort : Config->DatabasePort + Config->ContentDbHost.c_str() , + Config->ContentDbUsername.c_str(), + Config->ContentDbPassword.c_str(), + Config->ContentDbName.c_str(), + Config->ContentDbPort )) { LogError("Cannot continue without a content database connection"); return 1; From 4b55438b3a344cb11c4b7f5ea415043b0b40cfe4 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 23:29:24 -0500 Subject: [PATCH 021/272] Migrate ground_spawns [skip ci] --- zone/object.cpp | 1 + zone/zone.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/object.cpp b/zone/object.cpp index 4fbaef1c3..33dfb7e2a 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -695,6 +695,7 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec SaveWorldContainer(object.zone_id, id, inst); } +// Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs) { std::string query = StringFormat("SELECT max_x, max_y, max_z, " diff --git a/zone/zone.cpp b/zone/zone.cpp index 0982f2d39..c976f7b1d 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -302,7 +302,7 @@ bool Zone::LoadGroundSpawns() { memset(&groundspawn, 0, sizeof(groundspawn)); int gsindex=0; LogInfo("Loading Ground Spawns from DB"); - database.LoadGroundSpawns(zoneid, GetInstanceVersion(), &groundspawn); + content_db.LoadGroundSpawns(zoneid, GetInstanceVersion(), &groundspawn); uint32 ix=0; char* name = nullptr; uint32 gsnumber=0; From 9048265283e4c7bb3a03fa981ee174e3741cc667 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 11 Mar 2020 23:29:54 -0500 Subject: [PATCH 022/272] Migrate horses [skip ci] --- zone/horse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/horse.cpp b/zone/horse.cpp index 484b67149..0a23995ad 100644 --- a/zone/horse.cpp +++ b/zone/horse.cpp @@ -73,7 +73,7 @@ const NPCType *Horse::BuildHorseType(uint16 spell_id) { const char* fileName = spells[spell_id].teleport_zone; std::string query = StringFormat("SELECT race, gender, texture, mountspeed FROM horses WHERE filename = '%s'", fileName); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return nullptr; } From 286c08b8d5ef5efe390172bda1ce8ac537b4ffc3 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 00:00:39 -0500 Subject: [PATCH 023/272] Migrate spawn tables [skip ci] --- common/database_instances.cpp | 1 + shared_memory/main.cpp | 6 +++-- zone/aa.cpp | 6 ++--- zone/aura.cpp | 2 +- zone/client.cpp | 12 +++++----- zone/command.cpp | 40 ++++++++++++++++---------------- zone/forage.cpp | 2 +- zone/pets.cpp | 10 ++++---- zone/quest_parser_collection.cpp | 2 +- zone/questmgr.cpp | 10 ++++---- zone/spawn2.cpp | 20 ++++++++-------- zone/trap.cpp | 6 ++--- zone/zone.cpp | 8 +++---- 13 files changed, 64 insertions(+), 61 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 548a84bdb..b84924192 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -485,6 +485,7 @@ void Database::BuryCorpsesInInstance(uint16 instance_id) { void Database::DeleteInstance(uint16 instance_id) { + // TODO: BOUNDARY REWRITE std::string query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); QueryDatabase(query); diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index 69b46d896..fe4821e4a 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -84,8 +84,10 @@ int main(int argc, char **argv) { SharedDatabase database; LogInfo("Connecting to database"); - if(!database.Connect(Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(), - Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort)) { + if (!database.Connect( + Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(), + Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort + )) { LogError("Unable to connect to the database, cannot continue without a database connection"); return 1; } diff --git a/zone/aa.cpp b/zone/aa.cpp index c9e2eea9a..2e77684db 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -81,7 +81,7 @@ void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, u NPCType *made_npc = nullptr; - const NPCType *npc_type = database.LoadNPCTypesData(pet.npc_id); + const NPCType *npc_type = content_db.LoadNPCTypesData(pet.npc_id); if (npc_type == nullptr) { //log write LogError("Unknown npc type for swarm pet spell id: [{}]", spell_id); @@ -186,7 +186,7 @@ void Mob::TypesTemporaryPets(uint32 typesid, Mob *targ, const char *name_overrid NPCType *made_npc = nullptr; - const NPCType *npc_type = database.LoadNPCTypesData(typesid); + const NPCType *npc_type = content_db.LoadNPCTypesData(typesid); if(npc_type == nullptr) { //log write LogError("Unknown npc type for swarm pet type id: [{}]", typesid); @@ -281,7 +281,7 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) return; //assuming we have pets in our table; we take the first pet as a base type. - const NPCType *base_type = database.LoadNPCTypesData(500); + const NPCType *base_type = content_db.LoadNPCTypesData(500); auto make_npc = new NPCType; memcpy(make_npc, base_type, sizeof(NPCType)); diff --git a/zone/aura.cpp b/zone/aura.cpp index 2c00f529e..40cf4a481 100644 --- a/zone/aura.cpp +++ b/zone/aura.cpp @@ -871,7 +871,7 @@ void Mob::MakeAura(uint16 spell_id) return; } - const auto base = database.LoadNPCTypesData(record.npc_type); + const auto base = content_db.LoadNPCTypesData(record.npc_type); if (base == nullptr) { Message(Chat::Red, "Unable to load NPC data for aura %s", spells[spell_id].teleport_zone); LogError( diff --git a/zone/client.cpp b/zone/client.cpp index 70f543da9..377aae041 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -6205,21 +6205,21 @@ void Client::NPCSpawn(NPC *target_npc, const char *identifier, uint32 extra) if (id == "create") { // extra tries to create the npc_type ID within the range for the current zone (zone_id * 1000) - database.NPCSpawnDB(0, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC(), extra); + content_db.NPCSpawnDB(0, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC(), extra); } else if (id == "add") { // extra sets the respawn timer for add - database.NPCSpawnDB(1, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC(), extra); + content_db.NPCSpawnDB(1, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC(), extra); } else if (id == "update") { - database.NPCSpawnDB(2, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); + content_db.NPCSpawnDB(2, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); } else if (id == "remove") { - database.NPCSpawnDB(3, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); + content_db.NPCSpawnDB(3, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); target_npc->Depop(false); } else if (id == "delete") { - database.NPCSpawnDB(4, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); + content_db.NPCSpawnDB(4, zone->GetShortName(), zone->GetInstanceVersion(), this, target_npc->CastToNPC()); target_npc->Depop(false); } else { @@ -6323,7 +6323,7 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid NPCType *made_npc = nullptr; - const NPCType *npc_type = database.LoadNPCTypesData(pet.npc_id); + const NPCType *npc_type = content_db.LoadNPCTypesData(pet.npc_id); if(npc_type == nullptr) { LogError("Unknown npc type for doppelganger spell id: [{}]", spell_id); Message(0,"Unable to find pet!"); diff --git a/zone/command.cpp b/zone/command.cpp index 8fa109cc8..ebf2b0457 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -3097,7 +3097,7 @@ void command_npctypespawn(Client *c, const Seperator *sep) { if (sep->IsNumber(1)) { const NPCType* tmp = 0; - if ((tmp = database.LoadNPCTypesData(atoi(sep->arg[1])))) { + if ((tmp = content_db.LoadNPCTypesData(atoi(sep->arg[1])))) { //tmp->fixedZ = 1; auto npc = new NPC(tmp, 0, c->GetPosition(), GravityBehavior::Water); if (npc && sep->IsNumber(2)) @@ -4196,7 +4196,7 @@ void command_viewnpctype(Client *c, const Seperator *sep) else { uint32 npctypeid=atoi(sep->arg[1]); - const NPCType* npct = database.LoadNPCTypesData(npctypeid); + const NPCType* npct = content_db.LoadNPCTypesData(npctypeid); if (npct) { c->Message(Chat::White, " NPCType Info, "); c->Message(Chat::White, " NPCTypeID: %u", npct->npc_id); @@ -5811,7 +5811,7 @@ void command_npcspawn(Client *c, const Seperator *sep) // Option to try to create the npc_type ID within the range for the current zone (zone_id * 1000) extra = 1; } - database.NPCSpawnDB(0, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC(), extra); + content_db.NPCSpawnDB(0, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC(), extra); c->Message(Chat::White, "%s created successfully!", target->GetName()); } else if (strcasecmp(sep->arg[1], "add") == 0) { @@ -5824,20 +5824,20 @@ void command_npcspawn(Client *c, const Seperator *sep) // Respawn Timer default if not set extra = 1200; } - database.NPCSpawnDB(1, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC(), extra); + content_db.NPCSpawnDB(1, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC(), extra); c->Message(Chat::White, "%s added successfully!", target->GetName()); } else if (strcasecmp(sep->arg[1], "update") == 0) { - database.NPCSpawnDB(2, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); + content_db.NPCSpawnDB(2, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); c->Message(Chat::White, "%s updated!", target->GetName()); } else if (strcasecmp(sep->arg[1], "remove") == 0) { - database.NPCSpawnDB(3, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); + content_db.NPCSpawnDB(3, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); c->Message(Chat::White, "%s removed successfully from database!", target->GetName()); target->Depop(false); } else if (strcasecmp(sep->arg[1], "delete") == 0) { - database.NPCSpawnDB(4, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); + content_db.NPCSpawnDB(4, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); c->Message(Chat::White, "%s deleted from database!", target->GetName()); target->Depop(false); } @@ -5866,7 +5866,7 @@ void command_spawnfix(Client *c, const Seperator *sep) { std::string query = StringFormat("UPDATE spawn2 SET x = '%f', y = '%f', z = '%f', heading = '%f' WHERE id = '%i'", c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(),s2->GetID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::Red, "Update failed! MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -8607,7 +8607,7 @@ void command_npcedit(Client *c, const Seperator *sep) c->GetTarget()->CastToNPC()->GetSpawnGroupId() ); std::string query = StringFormat("UPDATE spawn2 SET animation = %i " "WHERE spawngroupID = %i", animation, c->GetTarget()->CastToNPC()->GetSpawnGroupId()); - database.QueryDatabase(query); + content_db.QueryDatabase(query); c->GetTarget()->SetAppearance(EmuAppearance(animation)); return; @@ -8728,7 +8728,7 @@ void command_qglobal(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "view")) { - const NPCType *type = database.LoadNPCTypesData(target->GetNPCTypeID()); + const NPCType *type = content_db.LoadNPCTypesData(target->GetNPCTypeID()); if(!type) c->Message(Chat::Yellow, "Invalid NPC type."); else if(type->qglobal) @@ -9725,7 +9725,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) return; } - database.NPCSpawnDB(6, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); + content_db.NPCSpawnDB(6, zone->GetShortName(), zone->GetInstanceVersion(), c, target->CastToNPC()); return; } @@ -9746,7 +9746,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) (sep->arg[7]? atof(sep->arg[7]): 0), (sep->arg[8]? atof(sep->arg[8]): 0), (sep->arg[9]? atoi(sep->arg[9]): 0)); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Invalid Arguments -- MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9766,7 +9766,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) std::string query = StringFormat("INSERT INTO spawnentry (spawngroupID, npcID, chance) " "VALUES (%i, %i, %i)", atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4])); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Invalid Arguments -- MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9789,7 +9789,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) atof(sep->arg[3]), atof(sep->arg[4]), atof(sep->arg[5]), atof(sep->arg[6]), atof(sep->arg[7]), atoi(sep->arg[8]), atoi(sep->arg[2])); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Invalid Arguments -- MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9811,7 +9811,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) "SET dist = '0', max_x = '0', min_x = '0', " "max_y = '0', min_y = '0', delay = '0' " "WHERE id = '%i' ", atoi(sep->arg[2])); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Invalid Arguments -- MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9824,7 +9824,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } if (strcasecmp(sep->arg[1], "addgroupspawn") == 0 && atoi(sep->arg[2])!=0) { - database.NPCSpawnDB(5, zone->GetShortName(), zone->GetInstanceVersion(), c, 0, atoi(sep->arg[2])); + content_db.NPCSpawnDB(5, zone->GetShortName(), zone->GetInstanceVersion(), c, 0, atoi(sep->arg[2])); c->Message(Chat::White, "Mob of group %i added successfully!", atoi(sep->arg[2])); return; } @@ -9843,7 +9843,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } std::string query = StringFormat("DELETE FROM spawn2 WHERE id = '%i'", s2->GetID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if(!results.Success()) { c->Message(Chat::Red, "Update failed! MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9872,7 +9872,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) std::string query = StringFormat("UPDATE spawn2 SET x = '%f', y = '%f', z = '%f', heading = '%f' " "WHERE id = '%i'", c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(),s2->GetID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::Red, "Update failed! MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9912,7 +9912,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) std::string query = StringFormat("UPDATE spawn2 SET respawntime = %u, variance = %u " "WHERE id = '%i'", new_rs, new_var, s2->GetID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::Red, "Update failed! MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); @@ -9941,7 +9941,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) std::string query = StringFormat("UPDATE spawn2 SET version = %i " "WHERE spawngroupID = '%i'", version, c->GetTarget()->CastToNPC()->GetSpawnGroupId()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::Red, "Update failed! MySQL gave the following error:"); c->Message(Chat::Red, results.ErrorMessage().c_str()); diff --git a/zone/forage.cpp b/zone/forage.cpp index 8e0290900..f14f1f968 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -280,7 +280,7 @@ void Client::GoFish() if (npc_chance > 0 && npc_id) { if (zone->random.Roll(npc_chance)) { if (zone->CanDoCombat()) { - const NPCType *tmp = database.LoadNPCTypesData(npc_id); + const NPCType *tmp = content_db.LoadNPCTypesData(npc_id); if (tmp != nullptr) { auto positionNPC = GetPosition(); positionNPC.x = positionNPC.x + 3; diff --git a/zone/pets.cpp b/zone/pets.cpp index b4897940a..6a5ae12ca 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -211,14 +211,14 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, //lookup our pets table record for this type PetRecord record; - if(!database.GetPoweredPetEntry(pettype, act_power, &record)) { + if(!content_db.GetPoweredPetEntry(pettype, act_power, &record)) { Message(Chat::Red, "Unable to find data for pet %s", pettype); LogError("Unable to find data for pet [{}], check pets table", pettype); return; } //find the NPC data for the specified NPC type - const NPCType *base = database.LoadNPCTypesData(record.npc_type); + const NPCType *base = content_db.LoadNPCTypesData(record.npc_type); if(base == nullptr) { Message(Chat::Red, "Unable to load NPC data for pet %s", pettype); LogError("Unable to load NPC data for pet [{}] (NPC ID [{}]), check pets and npc_types tables", pettype, record.npc_type); @@ -348,7 +348,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, "130, 139, 141, 183, 236, 237, 238, 239, 254, 266, 329, 330, 378, 379, " "380, 381, 382, 383, 404, 522) " "ORDER BY RAND() LIMIT 1", zone->GetShortName()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { safe_delete(npc_type); return; @@ -364,7 +364,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, monsterid = 567; // give the summoned pet the attributes of the monster we found - const NPCType* monster = database.LoadNPCTypesData(monsterid); + const NPCType* monster = content_db.LoadNPCTypesData(monsterid); if(monster) { npc_type->race = monster->race; npc_type->size = monster->size; @@ -389,7 +389,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, memset(petinv, 0, sizeof(petinv)); const EQEmu::ItemData *item = nullptr; - if (database.GetBasePetItems(record.equipmentset, petinv)) { + if (content_db.GetBasePetItems(record.equipmentset, petinv)) { for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++) if (petinv[i]) { item = database.GetItem(petinv[i]); diff --git a/zone/quest_parser_collection.cpp b/zone/quest_parser_collection.cpp index c3d38ce4f..9815a5ebb 100644 --- a/zone/quest_parser_collection.cpp +++ b/zone/quest_parser_collection.cpp @@ -488,7 +488,7 @@ QuestInterface *QuestParserCollection::GetQIByNPCQuest(uint32 npcid, std::string } //second look for /quests/zone/npcname.ext (precedence) - const NPCType *npc_type = database.LoadNPCTypesData(npcid); + const NPCType *npc_type = content_db.LoadNPCTypesData(npcid); if (!npc_type && npcid != ZONE_CONTROLLER_NPC_ID) { return nullptr; } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index c9e2ace70..aa7f439d2 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -193,7 +193,7 @@ void QuestManager::write(const char *file, const char *str) { Mob* QuestManager::spawn2(int npc_type, int grid, int unused, const glm::vec4& position) { const NPCType* tmp = 0; - if (tmp = database.LoadNPCTypesData(npc_type)) + if (tmp = content_db.LoadNPCTypesData(npc_type)) { auto npc = new NPC(tmp, nullptr, position, GravityBehavior::Water); npc->AddLootTable(); @@ -217,7 +217,7 @@ Mob* QuestManager::unique_spawn(int npc_type, int grid, int unused, const glm::v } const NPCType* tmp = 0; - if (tmp = database.LoadNPCTypesData(npc_type)) + if (tmp = content_db.LoadNPCTypesData(npc_type)) { auto npc = new NPC(tmp, nullptr, position, GravityBehavior::Water); npc->AddLootTable(); @@ -252,7 +252,7 @@ Mob *QuestManager::spawn_from_spawn2(uint32 spawn2_id) if (found_spawn) { SpawnGroup *spawn_group = zone->spawn_group_list.GetSpawnGroup(found_spawn->SpawnGroupID()); if (!spawn_group) { - database.LoadSpawnGroupsByID(found_spawn->SpawnGroupID(), &zone->spawn_group_list); + content_db.LoadSpawnGroupsByID(found_spawn->SpawnGroupID(), &zone->spawn_group_list); spawn_group = zone->spawn_group_list.GetSpawnGroup(found_spawn->SpawnGroupID()); if (!spawn_group) { return nullptr; @@ -272,7 +272,7 @@ Mob *QuestManager::spawn_from_spawn2(uint32 spawn2_id) return nullptr; } - const NPCType *tmp = database.LoadNPCTypesData(npcid); + const NPCType *tmp = content_db.LoadNPCTypesData(npcid); if (!tmp) { return nullptr; } @@ -1758,7 +1758,7 @@ void QuestManager::respawn(int npcTypeID, int grid) { quests_running_.push(e); const NPCType* npcType = nullptr; - if ((npcType = database.LoadNPCTypesData(npcTypeID))) + if ((npcType = content_db.LoadNPCTypesData(npcTypeID))) { owner = new NPC(npcType, nullptr, owner->GetPosition(), GravityBehavior::Water); owner->CastToNPC()->AddLootTable(); diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 437846176..5f4f465f4 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -192,7 +192,7 @@ bool Spawn2::Process() { } //try to find our NPC type. - const NPCType *tmp = database.LoadNPCTypesData(npcid); + const NPCType *tmp = content_db.LoadNPCTypesData(npcid); if (tmp == nullptr) { LogSpawns("Spawn2 [{}]: Spawn group [{}] yeilded an invalid NPC type [{}]", spawn2_id, spawngroup_id_, npcid); Reset(); //try again later @@ -431,7 +431,7 @@ bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList gettimeofday(&tv, nullptr); /* Bulk Load NPC Types Data into the cache */ - database.LoadNPCTypesData(0, true); + content_db.LoadNPCTypesData(0, true); std::string spawn_query = StringFormat( "SELECT " @@ -535,7 +535,7 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa gettimeofday(&tv, nullptr); /* Bulk Load NPC Types Data into the cache */ - database.LoadNPCTypesData(0, true); + content_db.LoadNPCTypesData(0, true); std::string spawn_query = StringFormat( "SELECT " @@ -907,7 +907,7 @@ void SpawnConditionManager::UpdateDBEvent(SpawnEvent &event) { event.next.day, event.next.month, event.next.year, event.enabled? 1: 0, event.strict? 1: 0, event.id); - database.QueryDatabase(query); + content_db.QueryDatabase(query); } void SpawnConditionManager::UpdateDBCondition(const char* zone_name, uint32 instance_id, uint16 cond_id, int16 value) { @@ -916,7 +916,7 @@ void SpawnConditionManager::UpdateDBCondition(const char* zone_name, uint32 inst "(id, value, zone, instance_id) " "VALUES( %u, %u, '%s', %u)", cond_id, value, zone_name, instance_id); - database.QueryDatabase(query); + content_db.QueryDatabase(query); } bool SpawnConditionManager::LoadDBEvent(uint32 event_id, SpawnEvent &event, std::string &zone_name) { @@ -926,7 +926,7 @@ bool SpawnConditionManager::LoadDBEvent(uint32 event_id, SpawnEvent &event, std: "next_month, next_year, enabled, " "action, argument, strict, zone " "FROM spawn_events WHERE id = %d", event_id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } @@ -968,7 +968,7 @@ bool SpawnConditionManager::LoadSpawnConditions(const char* zone_name, uint32 in std::string query = StringFormat("SELECT id, onchange, value " "FROM spawn_conditions " "WHERE zone = '%s'", zone_name); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } @@ -989,7 +989,7 @@ bool SpawnConditionManager::LoadSpawnConditions(const char* zone_name, uint32 in query = StringFormat("SELECT id, value FROM spawn_condition_values " "WHERE zone = '%s' AND instance_id = %u", zone_name, instance_id); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { spawn_conditions.clear(); return false; @@ -1006,7 +1006,7 @@ bool SpawnConditionManager::LoadSpawnConditions(const char* zone_name, uint32 in query = StringFormat("SELECT id, cond_id, period, next_minute, next_hour, " "next_day, next_month, next_year, enabled, action, argument, strict " "FROM spawn_events WHERE zone = '%s'", zone_name); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } @@ -1376,7 +1376,7 @@ int16 SpawnConditionManager::GetCondition(const char *zone_short, uint32 instanc "WHERE zone = '%s' AND instance_id = %u AND id = %d", zone_short, instance_id, condition_id ); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogSpawns("Unable to query remote condition [{}] from zone [{}] in Get request", condition_id, zone_short); return 0; //dunno a better thing to do... diff --git a/zone/trap.cpp b/zone/trap.cpp index e235e3912..7d205e563 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -162,7 +162,7 @@ void Trap::Trigger(Mob* trigger) for (i = 0; i < effectvalue2; i++) { - if ((tmp = database.LoadNPCTypesData(effectvalue))) + if ((tmp = content_db.LoadNPCTypesData(effectvalue))) { auto randomOffset = glm::vec4(zone->random.Int(-5, 5),zone->random.Int(-5, 5),zone->random.Int(-5, 5), zone->random.Int(0, 249)); auto spawnPosition = randomOffset + glm::vec4(m_Position, 0.0f); @@ -187,7 +187,7 @@ void Trap::Trigger(Mob* trigger) for (i = 0; i < effectvalue2; i++) { - if ((tmp = database.LoadNPCTypesData(effectvalue))) + if ((tmp = content_db.LoadNPCTypesData(effectvalue))) { auto randomOffset = glm::vec4(zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(-2, 2), zone->random.Int(0, 249)); auto spawnPosition = randomOffset + glm::vec4(m_Position, 0.0f); @@ -452,7 +452,7 @@ void Trap::CreateHiddenTrigger() if(hiddenTrigger) return; - const NPCType *base_type = database.LoadNPCTypesData(500); + const NPCType *base_type = content_db.LoadNPCTypesData(500); auto make_npc = new NPCType; memcpy(make_npc, base_type, sizeof(NPCType)); make_npc->max_hp = 100000; diff --git a/zone/zone.cpp b/zone/zone.cpp index c976f7b1d..8e3a6f750 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -436,7 +436,7 @@ void Zone::LoadTempMerchantData() { "AND se.spawngroupid = s2.spawngroupid " "AND s2.zone = '%s' AND s2.version = %i " "ORDER BY ml.slot ", GetShortName(), GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -509,7 +509,7 @@ void Zone::GetMerchantDataForZoneLoad() { "WHERE nt.merchant_id = ml.merchantid AND nt.id = se.npcid " "AND se.spawngroupid = s2.spawngroupid AND s2.zone = '%s' AND s2.version = %i " "ORDER BY ml.slot ", GetShortName(), GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); std::map >::iterator cur; uint32 npcid = 0; if (results.RowCount() == 0) { @@ -1580,7 +1580,7 @@ void Zone::RepopClose(const glm::vec4& client_position, uint32 repop_distance) quest_manager.ClearAllTimers(); - if (!database.PopulateZoneSpawnListClose(zoneid, spawn2_list, GetInstanceVersion(), client_position, repop_distance)) + if (!content_db.PopulateZoneSpawnListClose(zoneid, spawn2_list, GetInstanceVersion(), client_position, repop_distance)) LogDebug("Error in Zone::Repop: database.PopulateZoneSpawnList failed"); initgrids_timer.Start(); @@ -2286,7 +2286,7 @@ void Zone::DoAdventureActions() { if(ds->assa_count >= RuleI(Adventure, NumberKillsForBossSpawn)) { - const NPCType* tmp = database.LoadNPCTypesData(ds->data_id); + const NPCType* tmp = content_db.LoadNPCTypesData(ds->data_id); if(tmp) { NPC* npc = new NPC(tmp, nullptr, glm::vec4(ds->assa_x, ds->assa_y, ds->assa_z, ds->assa_h), GravityBehavior::Water); From 49d835165cfa8c33d5671f5f52aa114dcc636ca7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 00:01:30 -0500 Subject: [PATCH 024/272] Shared memory formatting main.cpp [skip ci] --- shared_memory/main.cpp | 172 ++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 81 deletions(-) diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index fe4821e4a..c5f8a5233 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -39,8 +39,11 @@ EQEmuLogSys LogSys; #ifdef _WINDOWS #include #else + #include + #endif + #include inline bool MakeDirectory(const std::string &directory_name) @@ -54,7 +57,7 @@ inline bool MakeDirectory(const std::string &directory_name) _mkdir(directory_name.c_str()); return true; } - + #else struct stat st; if (stat(directory_name.c_str(), &st) == 0) { @@ -69,13 +72,14 @@ inline bool MakeDirectory(const std::string &directory_name) return false; } -int main(int argc, char **argv) { +int main(int argc, char **argv) +{ RegisterExecutablePlatform(ExePlatformSharedMemory); LogSys.LoadLogSettingsDefaults(); set_exception_handler(); LogInfo("Shared Memory Loader Program"); - if(!EQEmuConfig::LoadConfig()) { + if (!EQEmuConfig::LoadConfig()) { LogError("Unable to load configuration file"); return 1; } @@ -85,8 +89,11 @@ int main(int argc, char **argv) { SharedDatabase database; LogInfo("Connecting to database"); if (!database.Connect( - Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(), - Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort + Config->DatabaseHost.c_str(), + Config->DatabaseUsername.c_str(), + Config->DatabasePassword.c_str(), + Config->DatabaseDB.c_str(), + Config->DatabasePort )) { LogError("Unable to connect to the database, cannot continue without a database connection"); return 1; @@ -114,133 +121,136 @@ int main(int argc, char **argv) { } std::string hotfix_name = ""; - bool load_all = true; - bool load_items = false; - bool load_factions = false; - bool load_loot = false; + + bool load_all = true; + bool load_items = false; + bool load_factions = false; + bool load_loot = false; bool load_skill_caps = false; - bool load_spells = false; - bool load_bd = false; - if(argc > 1) { - for(int i = 1; i < argc; ++i) { - switch(argv[i][0]) { - case 'b': - if(strcasecmp("base_data", argv[i]) == 0) { - load_bd = true; - load_all = false; - } - break; - - case 'i': - if(strcasecmp("items", argv[i]) == 0) { - load_items = true; - load_all = false; - } - break; - - case 'f': - if(strcasecmp("factions", argv[i]) == 0) { - load_factions = true; - load_all = false; - } - break; - - case 'l': - if(strcasecmp("loot", argv[i]) == 0) { - load_loot = true; - load_all = false; - } - break; - - case 's': - if(strcasecmp("skill_caps", argv[i]) == 0) { - load_skill_caps = true; - load_all = false; - } else if(strcasecmp("spells", argv[i]) == 0) { - load_spells = true; - load_all = false; - } - break; - case '-': { - auto split = SplitString(argv[i], '='); - if(split.size() >= 2) { - auto command = split[0]; - auto argument = split[1]; - if(strcasecmp("-hotfix", command.c_str()) == 0) { - hotfix_name = argument; - load_all = true; + bool load_spells = false; + bool load_bd = false; + + if (argc > 1) { + for (int i = 1; i < argc; ++i) { + switch (argv[i][0]) { + case 'b': + if (strcasecmp("base_data", argv[i]) == 0) { + load_bd = true; + load_all = false; } + break; + + case 'i': + if (strcasecmp("items", argv[i]) == 0) { + load_items = true; + load_all = false; + } + break; + + case 'f': + if (strcasecmp("factions", argv[i]) == 0) { + load_factions = true; + load_all = false; + } + break; + + case 'l': + if (strcasecmp("loot", argv[i]) == 0) { + load_loot = true; + load_all = false; + } + break; + + case 's': + if (strcasecmp("skill_caps", argv[i]) == 0) { + load_skill_caps = true; + load_all = false; + } + else if (strcasecmp("spells", argv[i]) == 0) { + load_spells = true; + load_all = false; + } + break; + case '-': { + auto split = SplitString(argv[i], '='); + if (split.size() >= 2) { + auto command = split[0]; + auto argument = split[1]; + if (strcasecmp("-hotfix", command.c_str()) == 0) { + hotfix_name = argument; + load_all = true; + } + } + break; } - break; - } } } } - if(hotfix_name.length() > 0) { + if (hotfix_name.length() > 0) { LogInfo("Writing data for hotfix [{}]", hotfix_name.c_str()); } - - if(load_all || load_items) { + + if (load_all || load_items) { LogInfo("Loading items"); try { LoadItems(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - - if(load_all || load_factions) { + + if (load_all || load_factions) { LogInfo("Loading factions"); try { LoadFactions(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - - if(load_all || load_loot) { + + if (load_all || load_loot) { LogInfo("Loading loot"); try { LoadLoot(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - - if(load_all || load_skill_caps) { + + if (load_all || load_skill_caps) { LogInfo("Loading skill caps"); try { LoadSkillCaps(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - - if(load_all || load_spells) { + + if (load_all || load_spells) { LogInfo("Loading spells"); try { LoadSpells(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - - if(load_all || load_bd) { + + if (load_all || load_bd) { LogInfo("Loading base data"); try { LoadBaseData(&database, hotfix_name); - } catch(std::exception &ex) { + } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; } } - + LogSys.CloseFileLogs(); return 0; } From 7ee28d636118e539af8466b6c3cb7e02c6e0a4aa Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 01:23:06 -0500 Subject: [PATCH 025/272] Migrate shared memory to use content database source; add logic in DB::core to prevent double freeing [skip ci] --- common/dbcore.cpp | 29 ++++++++++++++++++----------- common/dbcore.h | 10 ++++------ shared_memory/main.cpp | 31 +++++++++++++++++++++++++------ 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/common/dbcore.cpp b/common/dbcore.cpp index 0f07b5ab8..bc3ce0a72 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -42,11 +42,20 @@ DBcore::DBcore() pCompress = false; pSSL = false; pStatus = Closed; - connection_type = DATABASE_CONNECTION_DEFAULT; } DBcore::~DBcore() { + /** + * This prevents us from doing a double free in multi-tenancy setups where we + * are re-using the default database connection pointer when we dont have an + * external configuration setup ex: (content_database) + */ + std::string mysql_connection_host = mysql.host; + if (GetOriginHost() != mysql_connection_host) { + return; + } + mysql_close(&mysql); safe_delete_array(pHost); safe_delete_array(pUser); @@ -247,6 +256,10 @@ bool DBcore::Open(uint32 *errnum, char *errbuf) } if (mysql_real_connect(&mysql, pHost, pUser, pPassword, pDatabase, pPort, 0, flags)) { pStatus = Connected; + + std::string connected_origin_host = pHost; + SetOriginHost(connected_origin_host); + return true; } else { @@ -266,18 +279,12 @@ void DBcore::SetMysql(MYSQL *mysql) DBcore::mysql = *mysql; } -int8 DBcore::GetConnectionType() const +const std::string &DBcore::GetOriginHost() const { - return connection_type; + return origin_host; } -void DBcore::SetConnectionType(int8 connection_type) +void DBcore::SetOriginHost(const std::string &origin_host) { - DBcore::connection_type = connection_type; + DBcore::origin_host = origin_host; } - - - - - - diff --git a/common/dbcore.h b/common/dbcore.h index cf5c4841f..8c508255b 100644 --- a/common/dbcore.h +++ b/common/dbcore.h @@ -13,9 +13,6 @@ #include #include -const int8 DATABASE_CONNECTION_DEFAULT = 0; -const int8 DATABASE_CONNECTION_CONTENT = 1; - class DBcore { public: enum eStatus { @@ -35,8 +32,8 @@ public: MYSQL *getMySQL() { return &mysql; } void SetMysql(MYSQL *mysql); - int8 GetConnectionType() const; - void SetConnectionType(int8 connection_type); + const std::string &GetOriginHost() const; + void SetOriginHost(const std::string &origin_host); protected: bool Open( @@ -54,11 +51,12 @@ protected: private: bool Open(uint32 *errnum = nullptr, char *errbuf = nullptr); - int8 connection_type; MYSQL mysql; Mutex MDatabase; eStatus pStatus; + std::string origin_host; + char *pHost; char *pUser; char *pPassword; diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index c5f8a5233..a515903e1 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -87,6 +87,7 @@ int main(int argc, char **argv) auto Config = EQEmuConfig::get(); SharedDatabase database; + SharedDatabase content_db; LogInfo("Connecting to database"); if (!database.Connect( Config->DatabaseHost.c_str(), @@ -99,6 +100,24 @@ int main(int argc, char **argv) return 1; } + /** + * Multi-tenancy: Content database + */ + if (!Config->ContentDbHost.empty()) { + if (!content_db.Connect( + Config->ContentDbHost.c_str() , + Config->ContentDbUsername.c_str(), + Config->ContentDbPassword.c_str(), + Config->ContentDbName.c_str(), + Config->ContentDbPort + )) { + LogError("Cannot continue without a content database connection"); + return 1; + } + } else { + content_db.SetMysql(database.getMySQL()); + } + /* Register Log System and Settings */ database.LoadLogSettings(LogSys.log_settings); LogSys.StartFileLogs(); @@ -194,7 +213,7 @@ int main(int argc, char **argv) if (load_all || load_items) { LogInfo("Loading items"); try { - LoadItems(&database, hotfix_name); + LoadItems(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; @@ -204,7 +223,7 @@ int main(int argc, char **argv) if (load_all || load_factions) { LogInfo("Loading factions"); try { - LoadFactions(&database, hotfix_name); + LoadFactions(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; @@ -214,7 +233,7 @@ int main(int argc, char **argv) if (load_all || load_loot) { LogInfo("Loading loot"); try { - LoadLoot(&database, hotfix_name); + LoadLoot(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; @@ -224,7 +243,7 @@ int main(int argc, char **argv) if (load_all || load_skill_caps) { LogInfo("Loading skill caps"); try { - LoadSkillCaps(&database, hotfix_name); + LoadSkillCaps(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; @@ -234,7 +253,7 @@ int main(int argc, char **argv) if (load_all || load_spells) { LogInfo("Loading spells"); try { - LoadSpells(&database, hotfix_name); + LoadSpells(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; @@ -244,7 +263,7 @@ int main(int argc, char **argv) if (load_all || load_bd) { LogInfo("Loading base data"); try { - LoadBaseData(&database, hotfix_name); + LoadBaseData(&content_db, hotfix_name); } catch (std::exception &ex) { LogError("{}", ex.what()); return 1; From ea98a71f22f1bb1c62652e2c941accae87ece828 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 01:24:35 -0500 Subject: [PATCH 026/272] client_files/export main formatting [skip ci] --- client_files/export/main.cpp | 160 ++++++++++++++++++++--------------- 1 file changed, 91 insertions(+), 69 deletions(-) diff --git a/client_files/export/main.cpp b/client_files/export/main.cpp index ebe91353c..efd8f28c8 100644 --- a/client_files/export/main.cpp +++ b/client_files/export/main.cpp @@ -34,13 +34,14 @@ void ExportSkillCaps(SharedDatabase *db); void ExportBaseData(SharedDatabase *db); void ExportDBStrings(SharedDatabase *db); -int main(int argc, char **argv) { +int main(int argc, char **argv) +{ RegisterExecutablePlatform(ExePlatformClientExport); LogSys.LoadLogSettingsDefaults(); set_exception_handler(); LogInfo("Client Files Export Utility"); - if(!EQEmuConfig::LoadConfig()) { + if (!EQEmuConfig::LoadConfig()) { LogError("Unable to load configuration file"); return 1; } @@ -49,8 +50,13 @@ int main(int argc, char **argv) { SharedDatabase database; LogInfo("Connecting to database"); - if(!database.Connect(Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(), - Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort)) { + if (!database.Connect( + Config->DatabaseHost.c_str(), + Config->DatabaseUsername.c_str(), + Config->DatabasePassword.c_str(), + Config->DatabaseDB.c_str(), + Config->DatabasePort + )) { LogError("Unable to connect to the database, cannot continue without a database connection"); return 1; } @@ -92,93 +98,105 @@ int main(int argc, char **argv) { return 0; } -void ExportSpells(SharedDatabase *db) { +void ExportSpells(SharedDatabase *db) +{ LogInfo("Exporting Spells"); FILE *f = fopen("export/spells_us.txt", "w"); - if(!f) { + if (!f) { LogError("Unable to open export/spells_us.txt to write, skipping."); return; } - const std::string query = "SELECT * FROM spells_new ORDER BY id"; - auto results = db->QueryDatabase(query); + const std::string query = "SELECT * FROM spells_new ORDER BY id"; + auto results = db->QueryDatabase(query); - if(results.Success()) { - for (auto row = results.begin(); row != results.end(); ++row) { - std::string line; - unsigned int fields = results.ColumnCount(); - for(unsigned int i = 0; i < fields; ++i) { - if(i != 0) { + if (results.Success()) { + for (auto row = results.begin(); row != results.end(); ++row) { + std::string line; + unsigned int fields = results.ColumnCount(); + for (unsigned int i = 0; i < fields; ++i) { + if (i != 0) { line.push_back('^'); } - if(row[i] != nullptr) { + if (row[i] != nullptr) { line += row[i]; } } fprintf(f, "%s\n", line.c_str()); } - } else { + } + else { } fclose(f); } -bool SkillUsable(SharedDatabase *db, int skill_id, int class_id) { +bool SkillUsable(SharedDatabase *db, int skill_id, int class_id) +{ bool res = false; - std::string query = StringFormat("SELECT max(cap) FROM skill_caps WHERE class=%d AND skillID=%d", - class_id, skill_id); - auto results = db->QueryDatabase(query); - if(!results.Success()) { - return false; - } + std::string query = StringFormat( + "SELECT max(cap) FROM skill_caps WHERE class=%d AND skillID=%d", + class_id, skill_id + ); + auto results = db->QueryDatabase(query); + if (!results.Success()) { + return false; + } - if (results.RowCount() == 0) - return false; + if (results.RowCount() == 0) { + return false; + } - auto row = results.begin(); - if(row[0] && atoi(row[0]) > 0) - return true; + auto row = results.begin(); + if (row[0] && atoi(row[0]) > 0) { + return true; + } - return false; + return false; } -int GetSkill(SharedDatabase *db, int skill_id, int class_id, int level) { +int GetSkill(SharedDatabase *db, int skill_id, int class_id, int level) +{ - std::string query = StringFormat("SELECT cap FROM skill_caps WHERE class=%d AND skillID=%d AND level=%d", - class_id, skill_id, level); - auto results = db->QueryDatabase(query); - if (!results.Success()) { - return 0; - } + std::string query = StringFormat( + "SELECT cap FROM skill_caps WHERE class=%d AND skillID=%d AND level=%d", + class_id, skill_id, level + ); + auto results = db->QueryDatabase(query); + if (!results.Success()) { + return 0; + } - if (results.RowCount() == 0) - return 0; + if (results.RowCount() == 0) { + return 0; + } - auto row = results.begin(); + auto row = results.begin(); return atoi(row[0]); } -void ExportSkillCaps(SharedDatabase *db) { +void ExportSkillCaps(SharedDatabase *db) +{ LogInfo("Exporting Skill Caps"); FILE *f = fopen("export/SkillCaps.txt", "w"); - if(!f) { + if (!f) { LogError("Unable to open export/SkillCaps.txt to write, skipping."); return; } - for(int cl = 1; cl <= 16; ++cl) { - for(int skill = 0; skill <= 77; ++skill) { - if(SkillUsable(db, skill, cl)) { - int previous_cap = 0; - for(int level = 1; level <= 100; ++level) { + for (int cl = 1; cl <= 16; ++cl) { + for (int skill = 0; skill <= 77; ++skill) { + if (SkillUsable(db, skill, cl)) { + int previous_cap = 0; + for (int level = 1; level <= 100; ++level) { int cap = GetSkill(db, skill, cl, level); - if(cap < previous_cap) { + if (cap < previous_cap) { cap = previous_cap; } @@ -192,26 +210,28 @@ void ExportSkillCaps(SharedDatabase *db) { fclose(f); } -void ExportBaseData(SharedDatabase *db) { +void ExportBaseData(SharedDatabase *db) +{ LogInfo("Exporting Base Data"); FILE *f = fopen("export/BaseData.txt", "w"); - if(!f) { + if (!f) { LogError("Unable to open export/BaseData.txt to write, skipping."); return; } - const std::string query = "SELECT * FROM base_data ORDER BY level, class"; - auto results = db->QueryDatabase(query); - if(results.Success()) { - for (auto row = results.begin();row != results.end();++row) { - std::string line; - unsigned int fields = results.ColumnCount(); - for(unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) { - if(rowIndex != 0) + const std::string query = "SELECT * FROM base_data ORDER BY level, class"; + auto results = db->QueryDatabase(query); + if (results.Success()) { + for (auto row = results.begin(); row != results.end(); ++row) { + std::string line; + unsigned int fields = results.ColumnCount(); + for (unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) { + if (rowIndex != 0) { line.push_back('^'); + } - if(row[rowIndex] != nullptr) { + if (row[rowIndex] != nullptr) { line += row[rowIndex]; } } @@ -223,27 +243,29 @@ void ExportBaseData(SharedDatabase *db) { fclose(f); } -void ExportDBStrings(SharedDatabase *db) { +void ExportDBStrings(SharedDatabase *db) +{ LogInfo("Exporting DB Strings"); FILE *f = fopen("export/dbstr_us.txt", "w"); - if(!f) { + if (!f) { LogError("Unable to open export/dbstr_us.txt to write, skipping."); return; } fprintf(f, "Major^Minor^String(New)\n"); - const std::string query = "SELECT * FROM db_str ORDER BY id, type"; - auto results = db->QueryDatabase(query); - if(results.Success()) { - for(auto row = results.begin(); row != results.end(); ++row) { - std::string line; - unsigned int fields = results.ColumnCount(); - for(unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) { - if(rowIndex != 0) + const std::string query = "SELECT * FROM db_str ORDER BY id, type"; + auto results = db->QueryDatabase(query); + if (results.Success()) { + for (auto row = results.begin(); row != results.end(); ++row) { + std::string line; + unsigned int fields = results.ColumnCount(); + for (unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) { + if (rowIndex != 0) { line.push_back('^'); + } - if(row[rowIndex] != nullptr) { + if (row[rowIndex] != nullptr) { line += row[rowIndex]; } } From a37260fec5a637d7e310b02c5344711d76c170d8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 01:32:25 -0500 Subject: [PATCH 027/272] Port import and eport client files to use content database connection [skip ci] --- client_files/export/main.cpp | 33 ++++++++++++++++++++++++------- client_files/import/main.cpp | 38 +++++++++++++++++++++++++++++------- 2 files changed, 57 insertions(+), 14 deletions(-) diff --git a/client_files/export/main.cpp b/client_files/export/main.cpp index efd8f28c8..a6f3c3bec 100644 --- a/client_files/export/main.cpp +++ b/client_files/export/main.cpp @@ -49,6 +49,8 @@ int main(int argc, char **argv) auto Config = EQEmuConfig::get(); SharedDatabase database; + SharedDatabase content_db; + LogInfo("Connecting to database"); if (!database.Connect( Config->DatabaseHost.c_str(), @@ -61,7 +63,24 @@ int main(int argc, char **argv) return 1; } - /* Register Log System and Settings */ + /** + * Multi-tenancy: Content database + */ + if (!Config->ContentDbHost.empty()) { + if (!content_db.Connect( + Config->ContentDbHost.c_str() , + Config->ContentDbUsername.c_str(), + Config->ContentDbPassword.c_str(), + Config->ContentDbName.c_str(), + Config->ContentDbPort + )) { + LogError("Cannot continue without a content database connection"); + return 1; + } + } else { + content_db.SetMysql(database.getMySQL()); + } + database.LoadLogSettings(LogSys.log_settings); LogSys.StartFileLogs(); @@ -72,15 +91,15 @@ int main(int argc, char **argv) } if (arg_1 == "spells") { - ExportSpells(&database); + ExportSpells(&content_db); return 0; } if (arg_1 == "skills") { - ExportSkillCaps(&database); + ExportSkillCaps(&content_db); return 0; } if (arg_1 == "basedata") { - ExportBaseData(&database); + ExportBaseData(&content_db); return 0; } if (arg_1 == "dbstring") { @@ -88,9 +107,9 @@ int main(int argc, char **argv) return 0; } - ExportSpells(&database); - ExportSkillCaps(&database); - ExportBaseData(&database); + ExportSpells(&content_db); + ExportSkillCaps(&content_db); + ExportBaseData(&content_db); ExportDBStrings(&database); LogSys.CloseFileLogs(); diff --git a/client_files/import/main.cpp b/client_files/import/main.cpp index 109ff4859..3c25fa618 100644 --- a/client_files/import/main.cpp +++ b/client_files/import/main.cpp @@ -46,20 +46,44 @@ int main(int argc, char **argv) { auto Config = EQEmuConfig::get(); SharedDatabase database; + SharedDatabase content_db; + LogInfo("Connecting to database"); - if(!database.Connect(Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(), - Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort)) { - LogError("Unable to connect to the database, cannot continue without a " - "database connection"); + if (!database.Connect( + Config->DatabaseHost.c_str(), + Config->DatabaseUsername.c_str(), + Config->DatabasePassword.c_str(), + Config->DatabaseDB.c_str(), + Config->DatabasePort + )) { + LogError("Unable to connect to the database, cannot continue without a database connection"); return 1; } + /** + * Multi-tenancy: Content database + */ + if (!Config->ContentDbHost.empty()) { + if (!content_db.Connect( + Config->ContentDbHost.c_str() , + Config->ContentDbUsername.c_str(), + Config->ContentDbPassword.c_str(), + Config->ContentDbName.c_str(), + Config->ContentDbPort + )) { + LogError("Cannot continue without a content database connection"); + return 1; + } + } else { + content_db.SetMysql(database.getMySQL()); + } + database.LoadLogSettings(LogSys.log_settings); LogSys.StartFileLogs(); - ImportSpells(&database); - ImportSkillCaps(&database); - ImportBaseData(&database); + ImportSpells(&content_db); + ImportSkillCaps(&content_db); + ImportBaseData(&content_db); ImportDBStrings(&database); LogSys.CloseFileLogs(); From b22d8f6148aa785ed17ce4a698eb1cca3a5842c5 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 01:47:40 -0500 Subject: [PATCH 028/272] Migrate objects and pets [skip ci] --- zone/aa.cpp | 2 +- zone/command.cpp | 30 +++++++++++++++--------------- zone/object.cpp | 14 +++++++------- zone/zone.cpp | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 2e77684db..45ad357a2 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -55,7 +55,7 @@ void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, u } PetRecord record; - if (!database.GetPoweredPetEntry(spells[spell_id].teleport_zone, act_power, &record)) + if (!content_db.GetPoweredPetEntry(spells[spell_id].teleport_zone, act_power, &record)) { LogError("Unknown swarm pet spell id: {}, check pets table", spell_id); Message(Chat::Red, "Unable to find data for pet %s", spells[spell_id].teleport_zone); diff --git a/zone/command.cpp b/zone/command.cpp index ebf2b0457..ce778604b 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -10372,7 +10372,7 @@ void command_object(Client *c, const Seperator *sep) "ORDER BY id", zone->GetZoneID(), zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Error in objects query"); return; @@ -10499,7 +10499,7 @@ void command_object(Client *c, const Seperator *sep) if (id) { // ID specified. Verify that it doesn't already exist. query = StringFormat("SELECT COUNT(*) FROM object WHERE ID = %u", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (results.Success() && results.RowCount() != 0) { auto row = results.begin(); if (atoi(row[0]) > 0) // Yep, in database already. @@ -10529,7 +10529,7 @@ void command_object(Client *c, const Seperator *sep) od.y - 0.2f, od.y + 0.2f, // Much less processing power used this way. od.z - 0.2f, od.z + 0.2f); // It's pretty forgiving, though, allowing for close-proximity objects - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (results.Success() && results.RowCount() != 0) { auto row = results.begin(); objectsFound = atoi(row[0]); // Number of nearby objects from database @@ -10638,7 +10638,7 @@ void command_object(Client *c, const Seperator *sep) } else { // Object not found in-zone in a modifiable form. Check for valid matching circumstances. std::string query = StringFormat("SELECT zoneid, version, type FROM object WHERE id = %u", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success() || results.RowCount() == 0) { c->Message(Chat::White, "ERROR: Object %u not found", id); return; @@ -10667,7 +10667,7 @@ void command_object(Client *c, const Seperator *sep) // Convert to tradeskill object temporarily for changes query = StringFormat("UPDATE object SET type = %u WHERE id = %u", staticType, id); - database.QueryDatabase(query); + content_db.QueryDatabase(query); c->Message(Chat::White, "Static Object %u unlocked for editing. You must zone out and back in to " "make your changes, then commit them with '#object Save'.", @@ -10862,7 +10862,7 @@ void command_object(Client *c, const Seperator *sep) if (!(o = entity_list.FindObject(id))) { std::string query = StringFormat("SELECT zoneid, version, type FROM object WHERE id = %u", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success() || results.RowCount() == 0) { c->Message(Chat::White, "ERROR: Object %u not found", id); return; @@ -11002,7 +11002,7 @@ void command_object(Client *c, const Seperator *sep) // If this ID isn't in the database yet, it's a new object bNewObject = true; std::string query = StringFormat("SELECT zoneid, version, type FROM object WHERE id = %u", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (results.Success() && results.RowCount() != 0) { auto row = results.begin(); od.zone_id = atoi(row[0]); @@ -11097,7 +11097,7 @@ void command_object(Client *c, const Seperator *sep) od.heading, od.object_name, od.object_type, icon, od.size, od.solidtype, od.unknown020); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Database Error: %s", results.ErrorMessage().c_str()); return; @@ -11229,7 +11229,7 @@ void command_object(Client *c, const Seperator *sep) "objectname, type, icon, unknown08, unknown10, unknown20 " "FROM object WHERE zoneid = %u) AND version = %u", od.zone_instance, zone->GetZoneID(), zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message(Chat::White, "Database Error: %s", results.ErrorMessage().c_str()); return; @@ -11249,7 +11249,7 @@ void command_object(Client *c, const Seperator *sep) "objectname, type, icon, unknown08, unknown10, unknown20 " "FROM object WHERE id = %u AND zoneid = %u AND version = %u", od.zone_instance, id, zone->GetZoneID(), zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (results.Success() && results.RowsAffected() > 0) { c->Message(Chat::White, "Copied Object %u into instance version %u", id, od.zone_instance); return; @@ -11266,7 +11266,7 @@ void command_object(Client *c, const Seperator *sep) // No database error returned. See if we can figure out why. query = StringFormat("SELECT zoneid, version FROM object WHERE id = %u", id); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (!results.Success()) return; @@ -11319,7 +11319,7 @@ void command_object(Client *c, const Seperator *sep) "WHERE id = %u AND zoneid = %u " "AND version = %u LIMIT 1", id, zone->GetZoneID(), zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); c->Message(Chat::White, "Object %u deleted", id); return; @@ -11330,7 +11330,7 @@ void command_object(Client *c, const Seperator *sep) "WHERE id = %u AND zoneid = %u " "AND version = %u LIMIT 1", id, zone->GetZoneID(), zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) return; @@ -11346,7 +11346,7 @@ void command_object(Client *c, const Seperator *sep) query = StringFormat("DELETE FROM object WHERE id = %u " "AND zoneid = %u AND version = %u LIMIT 1", id, zone->GetZoneID(), zone->GetInstanceVersion()); - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); c->Message(Chat::White, "Object %u deleted. NOTE: This static object will remain for anyone currently in " "the zone until they next zone out and in.", @@ -11398,7 +11398,7 @@ void command_object(Client *c, const Seperator *sep) "unknown08, unknown10, unknown20 " "FROM object WHERE id = %u", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success() || results.RowCount() == 0) { c->Message(Chat::White, "Database Error: %s", results.ErrorMessage().c_str()); return; diff --git a/zone/object.cpp b/zone/object.cpp index 33dfb7e2a..3361b0e44 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -292,11 +292,11 @@ bool Object::Save() { if (m_id) { // Update existing - database.UpdateObject(m_id, m_type, m_icon, m_data, m_inst); + content_db.UpdateObject(m_id, m_type, m_icon, m_data, m_inst); } else { // Doesn't yet exist, add now - m_id = database.AddObject(m_type, m_icon, m_data, m_inst); + m_id = content_db.AddObject(m_type, m_icon, m_data, m_inst); } return true; @@ -306,11 +306,11 @@ uint16 Object::VarSave() { if (m_id) { // Update existing - database.UpdateObject(m_id, m_type, m_icon, m_data, m_inst); + content_db.UpdateObject(m_id, m_type, m_icon, m_data, m_inst); } else { // Doesn't yet exist, add now - m_id = database.AddObject(m_type, m_icon, m_data, m_inst); + m_id = content_db.AddObject(m_type, m_icon, m_data, m_inst); } return m_id; } @@ -319,7 +319,7 @@ uint16 Object::VarSave() void Object::Delete(bool reset_state) { if (m_id != 0) { - database.DeleteObject(m_id); + content_db.DeleteObject(m_id); } if (reset_state) { @@ -436,7 +436,7 @@ bool Object::Process(){ safe_delete(outapp); // Remove object - database.DeleteObject(m_id); + content_db.DeleteObject(m_id); return false; } @@ -553,7 +553,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) safe_delete(outapp); // Remove object - database.DeleteObject(m_id); + content_db.DeleteObject(m_id); if(!m_ground_spawn) entity_list.RemoveEntity(this->GetID()); } else { diff --git a/zone/zone.cpp b/zone/zone.cpp index 8e3a6f750..342cd6132 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -175,7 +175,7 @@ bool Zone::LoadZoneObjects() "unknown08, unknown10, unknown20, unknown24, unknown76, size, tilt_x, tilt_y, display_name " "FROM object WHERE zoneid = %i AND (version = %u OR version = -1)", zoneid, instanceversion); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("Error Loading Objects from DB: [{}]", results.ErrorMessage().c_str()); From ca49f3902f1a3384de2884cedb5798d39bbcc6bb Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 02:27:09 -0500 Subject: [PATCH 029/272] Migrate getZoneX calls and npc types calls [skip ci] --- world/adventure.cpp | 2 +- world/adventure_manager.cpp | 2 +- world/client.cpp | 16 +-- world/clientlist.cpp | 10 +- world/console.cpp | 12 +- world/console.old.cpp | 14 +-- world/eql_config.cpp | 4 +- world/eqw.cpp | 2 +- world/zonelist.cpp | 4 +- world/zoneserver.cpp | 12 +- zone/attack.cpp | 2 +- zone/client.cpp | 4 +- zone/client_packet.cpp | 8 +- zone/client_process.cpp | 4 +- zone/command.cpp | 212 ++++++++++++++++++------------------ zone/corpse.cpp | 2 +- zone/main.cpp | 2 +- zone/merc.cpp | 4 +- zone/npc.cpp | 2 +- zone/questmgr.cpp | 6 +- zone/spawn2.cpp | 8 +- zone/worldserver.cpp | 12 +- zone/zone.cpp | 6 +- zone/zonedb.cpp | 2 +- zone/zoning.cpp | 10 +- 25 files changed, 181 insertions(+), 181 deletions(-) diff --git a/world/adventure.cpp b/world/adventure.cpp index 3b784cd6e..2a61baf65 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -143,7 +143,7 @@ bool Adventure::Process() bool Adventure::CreateInstance() { - uint32 zone_id = database.GetZoneID(adventure_template->zone); + uint32 zone_id = content_db.GetZoneID(adventure_template->zone); if(!zone_id) { return false; diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index d4fbe1fc6..7446696b0 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -771,7 +771,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do sizeof(ServerPlayerClickedAdventureDoorReply_Struct)); ServerPlayerClickedAdventureDoorReply_Struct *sr = (ServerPlayerClickedAdventureDoorReply_Struct*)pack->pBuffer; strcpy(sr->player, player); - sr->zone_id = database.GetZoneID(t->zone); + sr->zone_id = content_db.GetZoneID(t->zone); sr->instance_id = (*iter)->GetInstanceID(); sr->x = t->dest_x; sr->y = t->dest_y; diff --git a/world/client.cpp b/world/client.cpp index c24dea2ab..82db1c4a7 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -785,7 +785,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { if (tutorial_enabled) { zone_id = RuleI(World, TutorialZoneID); - database.MoveCharacterToZone(charid, database.GetZoneName(zone_id)); + database.MoveCharacterToZone(charid, content_db.GetZoneName(zone_id)); } else { LogInfo("[{}] is trying to go to tutorial but are not allowed", char_name); @@ -796,7 +796,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { } } - if (zone_id == 0 || !database.GetZoneName(zone_id)) { + if (zone_id == 0 || !content_db.GetZoneName(zone_id)) { // This is to save people in an invalid zone, once it's removed from the DB database.MoveCharacterToZone(charid, "arena"); LogInfo("Zone not found in database zone_id=[{}], moveing char to arena character:[{}]", zone_id, char_name); @@ -1154,7 +1154,7 @@ void Client::EnterWorld(bool TryBootup) { else zone_server = zoneserver_list.FindByZoneID(zone_id); - const char *zone_name = database.GetZoneName(zone_id, true); + const char *zone_name = content_db.GetZoneName(zone_id, true); if (zone_server) { if (false == enter_world_triggered) { //Drop any clients we own in other zones. @@ -1267,7 +1267,7 @@ void Client::Clearance(int8 response) return; } - const char* zonename = database.GetZoneName(zone_id); + const char* zonename = content_db.GetZoneName(zone_id); if (zonename == 0) { LogInfo("zonename is nullptr in Client::Clearance!!"); TellClientZoneUnavailable(); @@ -1322,7 +1322,7 @@ void Client::Clearance(int8 response) void Client::TellClientZoneUnavailable() { auto outapp = new EQApplicationPacket(OP_ZoneUnavail, sizeof(ZoneUnavail_Struct)); ZoneUnavail_Struct* ua = (ZoneUnavail_Struct*)outapp->pBuffer; - const char* zonename = database.GetZoneName(zone_id); + const char* zonename = content_db.GetZoneName(zone_id); if (zonename) strcpy(ua->zonename, zonename); QueuePacket(outapp); @@ -1581,11 +1581,11 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) } Log(Logs::Detail, Logs::WorldServer, "Current location: %s (%d) %0.2f, %0.2f, %0.2f, %0.2f", - database.GetZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading); + content_db.GetZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading); Log(Logs::Detail, Logs::WorldServer, "Bind location: %s (%d) %0.2f, %0.2f, %0.2f", - database.GetZoneName(pp.binds[0].zoneId), pp.binds[0].zoneId, pp.binds[0].x, pp.binds[0].y, pp.binds[0].z); + content_db.GetZoneName(pp.binds[0].zoneId), pp.binds[0].zoneId, pp.binds[0].x, pp.binds[0].y, pp.binds[0].z); Log(Logs::Detail, Logs::WorldServer, "Home location: %s (%d) %0.2f, %0.2f, %0.2f", - database.GetZoneName(pp.binds[4].zoneId), pp.binds[4].zoneId, pp.binds[4].x, pp.binds[4].y, pp.binds[4].z); + content_db.GetZoneName(pp.binds[4].zoneId), pp.binds[4].zoneId, pp.binds[4].x, pp.binds[4].y, pp.binds[4].z); /* Starting Items inventory */ content_db.SetStartingItems(&pp, &inv, pp.race, pp.class_, pp.deity, pp.zone_id, pp.name, GetAdmin()); diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 92a02b6ec..b29af5a6b 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -293,7 +293,7 @@ void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnect if (cle->LSID()) AppendAnyLenString(&output, &outsize, &outlen, "%s LSID: %i LSName: %s WorldAdmin: %i", newline, cle->LSID(), cle->LSName(), cle->WorldAdmin()); if (cle->CharID()) - AppendAnyLenString(&output, &outsize, &outlen, "%s CharID: %i CharName: %s Zone: %s (%i)", newline, cle->CharID(), cle->name(), database.GetZoneName(cle->zone()), cle->zone()); + AppendAnyLenString(&output, &outsize, &outlen, "%s CharID: %i CharName: %s Zone: %s (%i)", newline, cle->CharID(), cle->name(), content_db.GetZoneName(cle->zone()), cle->zone()); if (outlen >= 3072) { connection->SendEmoteMessageRaw(to, 0, 0, 10, output); safe_delete(output); @@ -500,7 +500,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S countclients.Reset(); while(countclients.MoreElements()){ countcle = countclients.GetData(); - const char* tmpZone = database.GetZoneName(countcle->zone()); + const char* tmpZone = content_db.GetZoneName(countcle->zone()); if ( (countcle->Online() >= CLE_Status::Zoning) && (!countcle->GetGM() || countcle->Anon() != 1 || admin >= countcle->Admin()) && @@ -580,7 +580,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S while(iterator.MoreElements()) { cle = iterator.GetData(); - const char* tmpZone = database.GetZoneName(cle->zone()); + const char* tmpZone = content_db.GetZoneName(cle->zone()); if ( (cle->Online() >= CLE_Status::Zoning) && (!cle->GetGM() || cle->Anon() != 1 || admin >= cle->Admin()) && @@ -965,7 +965,7 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct* iterator.Reset(); while (iterator.MoreElements()) { cle = iterator.GetData(); - const char* tmpZone = database.GetZoneName(cle->zone()); + const char* tmpZone = content_db.GetZoneName(cle->zone()); if ( (cle->Online() >= CLE_Status::Zoning) && (whom == 0 || ( @@ -1282,7 +1282,7 @@ void ClientList::GetClients(const char *zone_name, std::vectorzone() == zoneid) diff --git a/world/console.cpp b/world/console.cpp index b3f36c923..aa67751e7 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -541,7 +541,7 @@ void ConsoleZoneShutdown( s->ZoneServerID = atoi(args[0].c_str()); } else { - s->zoneid = database.GetZoneID(args[0].c_str()); + s->zoneid = content_db.GetZoneID(args[0].c_str()); } ZoneServer *zs = 0; @@ -549,7 +549,7 @@ void ConsoleZoneShutdown( zs = zoneserver_list.FindByID(s->ZoneServerID); } else if (s->zoneid != 0) { - zs = zoneserver_list.FindByName(database.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); } else { connection->SendLine("Error: ZoneShutdown: neither ID nor name specified"); @@ -633,10 +633,10 @@ void ConsoleZoneLock( return; } - uint16 tmp = database.GetZoneID(args[1].c_str()); + uint16 tmp = content_db.GetZoneID(args[1].c_str()); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, true)) { - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", database.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(tmp)); } else { connection->SendLine("Failed to change lock"); @@ -651,10 +651,10 @@ void ConsoleZoneLock( return; } - uint16 tmp = database.GetZoneID(args[1].c_str()); + uint16 tmp = content_db.GetZoneID(args[1].c_str()); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, false)) { - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", database.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(tmp)); } else { connection->SendLine("Failed to change lock"); diff --git a/world/console.old.cpp b/world/console.old.cpp index 185b95751..e3b530dd3 100644 --- a/world/console.old.cpp +++ b/world/console.old.cpp @@ -616,7 +616,7 @@ void Console::ProcessCommand(const char* command) { if(sep.arg[1][0]==0 || sep.arg[2][0] == 0) SendMessage(1, "Usage: movechar [charactername] [zonename]"); else { - if (!database.GetZoneID(sep.arg[2])) + if (!content_db.GetZoneID(sep.arg[2])) SendMessage(1, "Error: Zone '%s' not found", sep.arg[2]); else if (!database.CheckUsedName((char*) sep.arg[1])) { if (!database.MoveCharacterToZone((char*) sep.arg[1], (char*) sep.arg[2])) @@ -711,13 +711,13 @@ void Console::ProcessCommand(const char* command) { if (sep.arg[1][0] >= '0' && sep.arg[1][0] <= '9') s->ZoneServerID = atoi(sep.arg[1]); else - s->zoneid = database.GetZoneID(sep.arg[1]); + s->zoneid = content_db.GetZoneID(sep.arg[1]); ZoneServer* zs = 0; if (s->ZoneServerID != 0) zs = zoneserver_list.FindByID(s->ZoneServerID); else if (s->zoneid != 0) - zs = zoneserver_list.FindByName(database.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); else SendMessage(1, "Error: ZoneShutdown: neither ID nor name specified"); @@ -828,10 +828,10 @@ void Console::ProcessCommand(const char* command) { zoneserver_list.ListLockedZones(0, this); } else if (strcasecmp(sep.arg[1], "lock") == 0 && admin >= 101) { - uint16 tmp = database.GetZoneID(sep.arg[2]); + uint16 tmp = content_db.GetZoneID(sep.arg[2]); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, true)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", database.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(tmp)); else SendMessage(1, "Failed to change lock"); } @@ -839,10 +839,10 @@ void Console::ProcessCommand(const char* command) { SendMessage(1, "Usage: #zonelock lock [zonename]"); } else if (strcasecmp(sep.arg[1], "unlock") == 0 && admin >= 101) { - uint16 tmp = database.GetZoneID(sep.arg[2]); + uint16 tmp = content_db.GetZoneID(sep.arg[2]); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, false)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", database.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(tmp)); else SendMessage(1, "Failed to change lock"); } diff --git a/world/eql_config.cpp b/world/eql_config.cpp index 9c065acb5..578e0d3a7 100644 --- a/world/eql_config.cpp +++ b/world/eql_config.cpp @@ -156,7 +156,7 @@ void EQLConfig::StartZone(Const_char *zone_ref) { bool EQLConfig::BootStaticZone(Const_char *short_name, uint16 port) { //make sure the short name is valid. - if(database.GetZoneID(short_name) == 0) + if(content_db.GetZoneID(short_name) == 0) return false; //database update @@ -191,7 +191,7 @@ bool EQLConfig::BootStaticZone(Const_char *short_name, uint16 port) { bool EQLConfig::ChangeStaticZone(Const_char *short_name, uint16 port) { //make sure the short name is valid. - if(database.GetZoneID(short_name) == 0) + if(content_db.GetZoneID(short_name) == 0) return false; //check internal state diff --git a/world/eqw.cpp b/world/eqw.cpp index a245d3cbd..a0c10fead 100644 --- a/world/eqw.cpp +++ b/world/eqw.cpp @@ -188,7 +188,7 @@ std::map EQW::GetPlayerDetails(Const_char *char_name) { res["character"] = cle->name(); res["account"] = cle->AccountName(); res["account_id"] = itoa(cle->AccountID()); - res["location_short"] = cle->zone()?database.GetZoneName(cle->zone()):"No Zone"; + res["location_short"] = cle->zone()?content_db.GetZoneName(cle->zone()):"No Zone"; res["location_long"] = res["location_short"]; res["location_id"] = itoa(cle->zone()); res["ip"] = long2ip(cle->GetIP()); diff --git a/world/zonelist.cpp b/world/zonelist.cpp index abb2a5f6f..53ac1f2ae 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -251,7 +251,7 @@ void ZSList::ListLockedZones(const char* to, WorldTCPConnection* connection) { int x = 0; for (auto &zone : pLockedZones) { if (zone) { - connection->SendEmoteMessageRaw(to, 0, 0, 0, database.GetZoneName(zone, true)); + connection->SendEmoteMessageRaw(to, 0, 0, 0, content_db.GetZoneName(zone, true)); x++; } } @@ -517,7 +517,7 @@ void ZSList::SOPZoneBootup(const char* adminname, uint32 ZoneServerID, const cha ZoneServer* zs = 0; ZoneServer* zs2 = 0; uint32 zoneid; - if (!(zoneid = database.GetZoneID(zonename))) + if (!(zoneid = content_db.GetZoneID(zonename))) SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: zone '%s' not found in 'zone' table. Typo protection=ON.", zonename); else { if (ZoneServerID != 0) diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 0a31d40fe..45b7f93c7 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -86,7 +86,7 @@ ZoneServer::~ZoneServer() { bool ZoneServer::SetZone(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { is_booting_up = false; - const char* zn = MakeLowerString(database.GetZoneName(iZoneID)); + const char* zn = MakeLowerString(content_db.GetZoneName(iZoneID)); char* longname; if (iZoneID) @@ -566,7 +566,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { SetZone_Struct* szs = (SetZone_Struct*)pack->pBuffer; if (szs->zoneid != 0) { - if (database.GetZoneName(szs->zoneid)) + if (content_db.GetZoneName(szs->zoneid)) SetZone(szs->zoneid, szs->instanceid, szs->staticzone); else SetZone(0); @@ -648,7 +648,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { if (s->ZoneServerID != 0) zs = zoneserver_list.FindByID(s->ZoneServerID); else if (s->zoneid != 0) - zs = zoneserver_list.FindByName(database.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); else zoneserver_list.SendEmoteMessage(s->adminname, 0, 0, 0, "Error: SOP_ZoneShutdown: neither ID nor name specified"); @@ -660,7 +660,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_ZoneBootup: { ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *)pack->pBuffer; - zoneserver_list.SOPZoneBootup(s->adminname, s->ZoneServerID, database.GetZoneName(s->zoneid), s->makestatic); + zoneserver_list.SOPZoneBootup(s->adminname, s->ZoneServerID, content_db.GetZoneName(s->zoneid), s->makestatic); break; } case ServerOP_ZoneStatus: { @@ -1018,13 +1018,13 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { break; case 1: if (zoneserver_list.SetLockedZone(s->zoneID, true)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", database.GetZoneName(s->zoneID)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(s->zoneID)); else this->SendEmoteMessageRaw(s->adminname, 0, 0, 0, "Failed to change lock"); break; case 2: if (zoneserver_list.SetLockedZone(s->zoneID, false)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", database.GetZoneName(s->zoneID)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(s->zoneID)); else this->SendEmoteMessageRaw(s->adminname, 0, 0, 0, "Failed to change lock"); break; diff --git a/zone/attack.cpp b/zone/attack.cpp index 4da160608..6c72fbe6a 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -1893,7 +1893,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk dead_timer.Start(5000, true); m_pp.zone_id = m_pp.binds[0].zoneId; m_pp.zoneInstance = m_pp.binds[0].instance_id; - database.MoveCharacterToZone(this->CharacterID(), database.GetZoneName(m_pp.zone_id)); + database.MoveCharacterToZone(this->CharacterID(), content_db.GetZoneName(m_pp.zone_id)); Save(); GoToDeath(); } diff --git a/zone/client.cpp b/zone/client.cpp index 377aae041..e8bbadb17 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -4004,7 +4004,7 @@ void Client::SendOPTranslocateConfirm(Mob *Caster, uint16 SpellID) { PendingTranslocateData.heading = m_pp.binds[0].heading; } else { - PendingTranslocateData.zone_id = ts->ZoneID = database.GetZoneID(Spell.teleport_zone); + PendingTranslocateData.zone_id = ts->ZoneID = content_db.GetZoneID(Spell.teleport_zone); PendingTranslocateData.instance_id = 0; PendingTranslocateData.y = ts->y = Spell.base[0]; PendingTranslocateData.x = ts->x = Spell.base[1]; @@ -5286,7 +5286,7 @@ void Client::SetStartZone(uint32 zoneid, float x, float y, float z) } // check to make sure the zone is valid - const char *target_zone_name = database.GetZoneName(zoneid); + const char *target_zone_name = content_db.GetZoneName(zoneid); if(target_zone_name == nullptr) return; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index e5df21477..49b5f7600 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -789,7 +789,7 @@ void Client::CompleteConnect() //enforce some rules.. if (!CanBeInZone()) { LogDebug("[CLIENT] Kicking char from zone, not allowed here"); - GoToSafeCoords(database.GetZoneID("arena"), 0); + GoToSafeCoords(content_db.GetZoneID("arena"), 0); return; } @@ -6400,7 +6400,7 @@ void Client::Handle_OP_GMZoneRequest(const EQApplicationPacket *app) uint16 zid = gmzr->zone_id; if (gmzr->zone_id == 0) zid = zonesummon_id; - const char * zname = database.GetZoneName(zid); + const char * zname = content_db.GetZoneName(zid); if (zname == nullptr) tarzone[0] = 0; else @@ -12357,7 +12357,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) { // if the character has a start city, don't let them use the command if (m_pp.binds[4].zoneId != 0 && m_pp.binds[4].zoneId != 189) { - Message(Chat::Yellow, "Your home city has already been set.", m_pp.binds[4].zoneId, database.GetZoneName(m_pp.binds[4].zoneId)); + Message(Chat::Yellow, "Your home city has already been set.", m_pp.binds[4].zoneId, content_db.GetZoneName(m_pp.binds[4].zoneId)); return; } @@ -12418,7 +12418,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) zoneid = atoi(row[0]); char* name = nullptr; - content_db.GetZoneLongName(database.GetZoneName(zoneid), &name); + content_db.GetZoneLongName(content_db.GetZoneName(zoneid), &name); Message(Chat::Yellow, "%d - %s", zoneid, name); } diff --git a/zone/client_process.cpp b/zone/client_process.cpp index d8ec451a9..9b7a0ecce 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -129,7 +129,7 @@ bool Client::Process() { CheckManaEndUpdate(); if (dead && dead_timer.Check()) { - database.MoveCharacterToZone(GetName(), database.GetZoneName(m_pp.binds[0].zoneId)); + database.MoveCharacterToZone(GetName(), content_db.GetZoneName(m_pp.binds[0].zoneId)); m_pp.zone_id = m_pp.binds[0].zoneId; m_pp.zoneInstance = m_pp.binds[0].instance_id; @@ -2087,7 +2087,7 @@ void Client::HandleRespawnFromHover(uint32 Option) m_pp.zone_id = chosen->zone_id; m_pp.zoneInstance = chosen->instance_id; - database.MoveCharacterToZone(CharacterID(), database.GetZoneName(chosen->zone_id)); + database.MoveCharacterToZone(CharacterID(), content_db.GetZoneName(chosen->zone_id)); Save(); diff --git a/zone/command.cpp b/zone/command.cpp index ce778604b..dafbdb7b1 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -813,7 +813,7 @@ void command_setfaction(Client *c, const Seperator *sep) std::string query = StringFormat("UPDATE npc_types SET npc_faction_id = %i WHERE id = %i", atoi(sep->argplus[1]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); } void command_serversidename(Client *c, const Seperator *sep) @@ -1171,7 +1171,7 @@ void command_zone(Client *c, const Seperator *sep) return; } - zoneid = database.GetZoneID(sep->arg[1]); + zoneid = content_db.GetZoneID(sep->arg[1]); if(zoneid == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); return; @@ -1306,7 +1306,7 @@ void command_peqzone(Client *c, const Seperator *sep) return; } else { - zoneid = database.GetZoneID(sep->arg[1]); + zoneid = content_db.GetZoneID(sep->arg[1]); destzone = database.GetPEQZone(zoneid, 0); if(zoneid == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); @@ -2105,7 +2105,7 @@ void command_zheader(Client *c, const Seperator *sep) if(sep->arg[1][0]==0) { c->Message(Chat::White, "Usage: #zheader "); } - else if(database.GetZoneID(sep->argplus[1])==0) + else if(content_db.GetZoneID(sep->argplus[1])==0) c->Message(Chat::White, "Invalid Zone Name: %s", sep->argplus[1]); else { @@ -3953,7 +3953,7 @@ void command_findnpctype(Client *c, const Seperator *sep) else // Otherwise, look for just that npc id. query = StringFormat("SELECT id, name FROM npc_types WHERE id = %i", id); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { c->Message (0, "Error querying database."); c->Message (0, query.c_str()); @@ -4290,7 +4290,7 @@ void command_zoneshutdown(Client *c, const Seperator *sep) if (sep->arg[1][0] >= '0' && sep->arg[1][0] <= '9') s->ZoneServerID = atoi(sep->arg[1]); else - s->zoneid = database.GetZoneID(sep->arg[1]); + s->zoneid = content_db.GetZoneID(sep->arg[1]); worldserver.SendPacket(pack); safe_delete(pack); } @@ -4308,7 +4308,7 @@ void command_zonebootup(Client *c, const Seperator *sep) ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *) pack->pBuffer; s->ZoneServerID = atoi(sep->arg[1]); strcpy(s->adminname, c->GetName()); - s->zoneid = database.GetZoneID(sep->arg[2]); + s->zoneid = content_db.GetZoneID(sep->arg[2]); s->makestatic = (bool) (strcasecmp(sep->arg[3], "static") == 0); worldserver.SendPacket(pack); safe_delete(pack); @@ -4491,7 +4491,7 @@ void command_zonelock(Client *c, const Seperator *sep) worldserver.SendPacket(pack); } else if (strcasecmp(sep->arg[1], "lock") == 0 && c->Admin() >= commandLockZones) { - uint16 tmp = database.GetZoneID(sep->arg[2]); + uint16 tmp = content_db.GetZoneID(sep->arg[2]); if (tmp) { s->op = 1; s->zoneID = tmp; @@ -4501,7 +4501,7 @@ void command_zonelock(Client *c, const Seperator *sep) c->Message(Chat::White, "Usage: #zonelock lock [zonename]"); } else if (strcasecmp(sep->arg[1], "unlock") == 0 && c->Admin() >= commandLockZones) { - uint16 tmp = database.GetZoneID(sep->arg[2]); + uint16 tmp = content_db.GetZoneID(sep->arg[2]); if (tmp) { s->op = 2; s->zoneID = tmp; @@ -4908,7 +4908,7 @@ void command_gmzone(Client *c, const Seperator *sep) const char *zone_short_name = sep->arg[1]; auto zone_version = static_cast(sep->arg[2] ? atoi(sep->arg[2]) : 0); std::string identifier = "gmzone"; - uint32 zone_id = database.GetZoneID(zone_short_name); + uint32 zone_id = content_db.GetZoneID(zone_short_name); uint32 duration = 100000000; uint16 instance_id = 0; @@ -7813,7 +7813,7 @@ void command_npceditmass(Client *c, const Seperator *sep) bool valid_change_column = false; bool valid_search_column = false; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); std::vector possible_column_options; @@ -7888,7 +7888,7 @@ void command_npceditmass(Client *c, const Seperator *sep) } int found_count = 0; - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { std::string npc_id = row[0]; @@ -7943,7 +7943,7 @@ void command_npceditmass(Client *c, const Seperator *sep) return; } - database.QueryDatabase( + content_db.QueryDatabase( fmt::format( "UPDATE `npc_types` SET {} = '{}' WHERE id IN ({})", change_column, @@ -8064,161 +8064,161 @@ void command_npcedit(Client *c, const Seperator *sep) if (strcasecmp(sep->arg[1], "name") == 0) { c->Message(Chat::Yellow,"NPCID %u now has the name %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET name = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "lastname") == 0) { c->Message(Chat::Yellow,"NPCID %u now has the lastname %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET lastname = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "flymode") == 0) { c->Message(Chat::Yellow,"NPCID %u now has flymode [%s]", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET flymode = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "race") == 0) { c->Message(Chat::Yellow,"NPCID %u now has the race %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET race = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "class") == 0) { c->Message(Chat::Yellow,"NPCID %u is now class %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET class = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "bodytype") == 0) { c->Message(Chat::Yellow,"NPCID %u now has type %i bodytype.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET bodytype = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "hp") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Hitpoints.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET hp = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "gender") == 0) { c->Message(Chat::Yellow,"NPCID %u is now gender %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET gender = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "texture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses texture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET texture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "helmtexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses helmtexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET helmtexture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "armtexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses armtexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET armtexture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "bracertexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses bracertexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET bracertexture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "handtexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses handtexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET handtexture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "legtexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses legtexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET legtexture = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "feettexture") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses feettexture %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET feettexture = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "herosforgemodel") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses herosforgemodel %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET herosforgemodel = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "size") == 0) { c->Message(Chat::Yellow,"NPCID %u is now size %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET size = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "hpregen") == 0) { c->Message(Chat::Yellow,"NPCID %u now regens %i hitpoints per tick.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET hp_regen_rate = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "manaregen") == 0) { c->Message(Chat::Yellow,"NPCID %u now regens %i mana per tick.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET mana_regen_rate = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "loottable") == 0) { c->Message(Chat::Yellow,"NPCID %u is now on loottable_id %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET loottable_id = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "merchantid") == 0) { c->Message(Chat::Yellow,"NPCID %u is now merchant_id %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET merchant_id = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "alt_currency_id") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'alt_currency_id' set to %s.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET alt_currency_id = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "npc_spells_effects_id") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'npc_spells_effects_id' set to %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET npc_spells_effects_id = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } @@ -8232,322 +8232,322 @@ void command_npcedit(Client *c, const Seperator *sep) if (strcasecmp(sep->arg[1], "trap_template") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'trap_template' set to %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET trap_template = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "special_abilities") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'special_abilities' set to %s.", npcTypeID, sep->argplus[2]); std::string query = StringFormat("UPDATE npc_types SET special_abilities = '%s' WHERE id = %i", sep->argplus[2],npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "spell") == 0) { c->Message(Chat::Yellow,"NPCID %u now uses spell list %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET npc_spells_id = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "faction") == 0) { c->Message(Chat::Yellow,"NPCID %u is now faction %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET npc_faction_id = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "damage") == 0) { c->Message(Chat::Yellow,"NPCID %u now hits from %i to %i", npcTypeID, atoi(sep->arg[2]), atoi(sep->arg[3])); std::string query = StringFormat("UPDATE npc_types SET mindmg = %i, maxdmg = %i WHERE id = %i", atoi(sep->arg[2]), atoi(sep->arg[3]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "meleetype") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a primary melee type of %i and a secondary melee type of %i.", npcTypeID, atoi(sep->arg[2]), atoi(sep->arg[3])); std::string query = StringFormat("UPDATE npc_types SET prim_melee_type = %i, sec_melee_type = %i WHERE id = %i", atoi(sep->arg[2]), atoi(sep->arg[3]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "rangedtype") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a ranged type of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET ranged_type = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "ammoidfile") == 0) { c->Message(Chat::Yellow,"NPCID %u's ammo id file is now %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET ammoidfile = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "aggroradius") == 0) { c->Message(Chat::Yellow,"NPCID %u now has an aggro radius of %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET aggroradius = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "assistradius") == 0) { c->Message(Chat::Yellow,"NPCID %u now has an assist radius of %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET assistradius = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "social") == 0) { c->Message(Chat::Yellow,"NPCID %u social status is now %i", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET social = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "runspeed") == 0) { c->Message(Chat::Yellow,"NPCID %u now runs at %f", npcTypeID, atof(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET runspeed = %f WHERE id = %i", atof(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "walkspeed") == 0) { c->Message(Chat::Yellow,"NPCID %u now walks at %f", npcTypeID, atof(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET walkspeed = %f WHERE id = %i", atof(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "AGI") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Agility.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET AGI = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "CHA") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Charisma.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET CHA = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "DEX") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Dexterity.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET DEX = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "INT") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Intelligence.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET _INT = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "STA") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Stamina.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET STA = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "STR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Strength.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET STR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "WIS") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Magic Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET WIS = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "MR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Magic Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET MR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "DR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Disease Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET DR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "CR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Cold Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET CR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "FR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Fire Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET FR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "PR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Poison Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET PR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Corrup") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Corruption Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET corrup = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "PhR") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a Physical Resistance of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET PhR = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "seeinvis") == 0) { c->Message(Chat::Yellow,"NPCID %u now has seeinvis set to %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET see_invis = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "seeinvisundead") == 0) { c->Message(Chat::Yellow,"NPCID %u now has seeinvisundead set to %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET see_invis_undead = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "seehide") == 0) { c->Message(Chat::Yellow,"NPCID %u now has seehide set to %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET see_hide = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "seeimprovedhide") == 0) { c->Message(Chat::Yellow,"NPCID %u now has seeimprovedhide set to %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET see_improved_hide = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "AC") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Armor Class.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET ac = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "ATK") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Attack.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET atk = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Accuracy") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Accuracy.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET accuracy = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Avoidance") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i Avoidance.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET avoidance = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "level") == 0) { c->Message(Chat::Yellow,"NPCID %u is now level %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET level = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "maxlevel") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a maximum level of %i.", npcTypeID, atoi(sep->argplus[2])); std::string query = StringFormat("UPDATE npc_types SET maxlevel = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "qglobal") == 0) { c->Message(Chat::Yellow,"Quest globals have been %s for NPCID %u", atoi(sep->arg[2]) == 0 ? "disabled" : "enabled", npcTypeID); std::string query = StringFormat("UPDATE npc_types SET qglobal = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "npcaggro") == 0) { c->Message(Chat::Yellow,"NPCID %u will now %s other NPCs with negative faction npc_value", npcTypeID, atoi(sep->arg[2]) == 0? "not aggro": "aggro"); std::string query = StringFormat("UPDATE npc_types SET npc_aggro = %i WHERE id = %i", atoi(sep->argplus[2]) == 0? 0: 1, npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "spawn_limit") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a spawn limit of %i", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET spawn_limit = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Attackspeed") == 0) { c->Message(Chat::Yellow,"NPCID %u now has attack_speed set to %f", npcTypeID, atof(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET attack_speed = %f WHERE id = %i", atof(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Attackdelay") == 0) { c->Message(Chat::Yellow,"NPCID %u now has attack_delay set to %i", npcTypeID,atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET attack_delay = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "Attackcount") == 0) { c->Message(Chat::Yellow,"NPCID %u now has attack_count set to %i", npcTypeID,atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET attack_count = %i WHERE id = %i", atoi(sep->argplus[2]),npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "findable") == 0) { c->Message(Chat::Yellow,"NPCID %u is now %s", npcTypeID, atoi(sep->arg[2]) == 0? "not findable": "findable"); std::string query = StringFormat("UPDATE npc_types SET findable = %i WHERE id = %i", atoi(sep->argplus[2]) == 0? 0: 1, npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "trackable") == 0) { c->Message(Chat::Yellow,"NPCID %u is now %s", npcTypeID, atoi(sep->arg[2]) == 0? "not trackable": "trackable"); std::string query = StringFormat("UPDATE npc_types SET trackable = %i WHERE id = %i", atoi(sep->argplus[2]) == 0? 0: 1, npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "weapon") == 0) { c->Message(Chat::Yellow,"NPCID %u will have item graphic %i set to his primary and item graphic %i set to his secondary on repop.", npcTypeID, atoi(sep->arg[2]), atoi(sep->arg[3])); std::string query = StringFormat("UPDATE npc_types SET d_melee_texture1 = %i, d_melee_texture2 = %i WHERE id = %i", atoi(sep->arg[2]), atoi(sep->arg[3]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } @@ -8565,21 +8565,21 @@ void command_npcedit(Client *c, const Seperator *sep) target->GetLuclinFace(), target->GetDrakkinHeritage(), target->GetDrakkinTattoo(), target->GetDrakkinDetails(), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "color") == 0) { c->Message(Chat::Yellow,"NPCID %u now has %i red, %i green, and %i blue tinting on their armor.", npcTypeID, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4])); std::string query = StringFormat("UPDATE npc_types SET armortint_red = %i, armortint_green = %i, armortint_blue = %i WHERE id = %i", atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "armortint_id") == 0) { c->Message(Chat::Yellow,"NPCID %u now has field 'armortint_id' set to %s", npcTypeID, sep->arg[2]); std::string query = StringFormat("UPDATE npc_types SET armortint_id = '%s' WHERE id = %i", sep->argplus[2], npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } @@ -8616,42 +8616,42 @@ void command_npcedit(Client *c, const Seperator *sep) if (strcasecmp(sep->arg[1], "scalerate") == 0) { c->Message(Chat::Yellow,"NPCID %u now has a scaling rate of %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET scalerate = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "healscale") == 0) { c->Message(Chat::Yellow, "NPCID %u now has a heal scaling rate of %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET healscale = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "spellscale") == 0) { c->Message(Chat::Yellow, "NPCID %u now has a spell scaling rate of %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET spellscale = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "no_target") == 0) { c->Message(Chat::Yellow, "NPCID %u is now %s.", npcTypeID, atoi(sep->arg[2]) == 0? "targetable": "untargetable"); std::string query = StringFormat("UPDATE npc_types SET no_target_hotkey = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "version") == 0) { c->Message(Chat::Yellow, "NPCID %u is now version %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET version = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } if (strcasecmp(sep->arg[1], "slow_mitigation") == 0) { c->Message(Chat::Yellow, "NPCID %u's slow mitigation limit is now %i.", npcTypeID, atoi(sep->arg[2])); std::string query = StringFormat("UPDATE npc_types SET slow_mitigation = %i WHERE id = %i", atoi(sep->argplus[2]), npcTypeID); - database.QueryDatabase(query); + content_db.QueryDatabase(query); return; } @@ -8704,7 +8704,7 @@ void command_qglobal(Client *c, const Seperator *sep) { if(!strcasecmp(sep->arg[1], "on")) { std::string query = StringFormat("UPDATE npc_types SET qglobal = 1 WHERE id = '%i'", target->GetNPCTypeID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if(!results.Success()) { c->Message(Chat::Yellow, "Could not update database."); return; @@ -8717,7 +8717,7 @@ void command_qglobal(Client *c, const Seperator *sep) { if(!strcasecmp(sep->arg[1], "off")) { std::string query = StringFormat("UPDATE npc_types SET qglobal = 0 WHERE id = '%i'", target->GetNPCTypeID()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if(!results.Success()) { c->Message(Chat::Yellow, "Could not update database."); return; @@ -9042,7 +9042,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = database.GetZoneID(sep->arg[2]); + zoneid = content_db.GetZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9061,13 +9061,13 @@ void command_flagedit(Client *c, const Seperator *sep) { std::string query = StringFormat("UPDATE zone SET flag_needed = '%s' " "WHERE zoneidnumber = %d AND version = %d", flag_name, zoneid, zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if(!results.Success()) { c->Message(Chat::Red, "Error updating zone: %s", results.ErrorMessage().c_str()); return; } - c->Message(Chat::Yellow, "Success! Zone %s now requires a flag, named %s", database.GetZoneName(zoneid), flag_name); + c->Message(Chat::Yellow, "Success! Zone %s now requires a flag, named %s", content_db.GetZoneName(zoneid), flag_name); return; } @@ -9076,7 +9076,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = database.GetZoneID(sep->arg[2]); + zoneid = content_db.GetZoneID(sep->arg[2]); } } @@ -9088,13 +9088,13 @@ void command_flagedit(Client *c, const Seperator *sep) { std::string query = StringFormat("UPDATE zone SET flag_needed = '' " "WHERE zoneidnumber = %d AND version = %d", zoneid, zone->GetInstanceVersion()); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if(!results.Success()) { c->Message(Chat::Yellow, "Error updating zone: %s", results.ErrorMessage().c_str()); return; } - c->Message(Chat::Yellow, "Success! Zone %s no longer requires a flag.", database.GetZoneName(zoneid)); + c->Message(Chat::Yellow, "Success! Zone %s no longer requires a flag.", content_db.GetZoneName(zoneid)); return; } @@ -9118,7 +9118,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = database.GetZoneID(sep->arg[2]); + zoneid = content_db.GetZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9141,7 +9141,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = database.GetZoneID(sep->arg[2]); + zoneid = content_db.GetZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9606,7 +9606,7 @@ void command_setgraveyard(Client *c, const Seperator *sep) return; } - zoneid = database.GetZoneID(sep->arg[1]); + zoneid = content_db.GetZoneID(sep->arg[1]); if(zoneid > 0) { graveyard_id = database.CreateGraveyardRecord(zoneid, t->GetPosition()); @@ -10047,12 +10047,12 @@ void command_instance(Client *c, const Seperator *sep) } else { - zone_id = database.GetZoneID(sep->arg[2]); + zone_id = content_db.GetZoneID(sep->arg[2]); } uint32 version = atoi(sep->arg[3]); uint32 duration = atoi(sep->arg[4]); - zn = database.GetZoneName(zone_id); + zn = content_db.GetZoneName(zone_id); if(!zn) { @@ -10207,7 +10207,7 @@ void command_setstartzone(Client *c, const Seperator *sep) startzone = 0; } else { - startzone = database.GetZoneID(sep->arg[1]); + startzone = content_db.GetZoneID(sep->arg[1]); if(startzone == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); return; @@ -10571,7 +10571,7 @@ void command_object(Client *c, const Seperator *sep) // biggie. query = "SELECT MAX(id) FROM object"; - results = database.QueryDatabase(query); + results = content_db.QueryDatabase(query); if (results.Success() && results.RowCount() != 0) { auto row = results.begin(); id = atoi(row[0]); diff --git a/zone/corpse.cpp b/zone/corpse.cpp index fd4174868..9ab4fed0b 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -837,7 +837,7 @@ bool Corpse::Process() { spc->zone_id = zone->graveyard_zoneid(); worldserver.SendPacket(pack); safe_delete(pack); - LogDebug("Moved [{}] player corpse to the designated graveyard in zone [{}]", this->GetName(), database.GetZoneName(zone->graveyard_zoneid())); + LogDebug("Moved [{}] player corpse to the designated graveyard in zone [{}]", this->GetName(), content_db.GetZoneName(zone->graveyard_zoneid())); corpse_db_id = 0; } diff --git a/zone/main.cpp b/zone/main.cpp index 96dbac95d..4e5b10aa1 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -446,7 +446,7 @@ int main(int argc, char** argv) { if (!strlen(zone_name) || !strcmp(zone_name, ".")) { LogInfo("Entering sleep mode"); } - else if (!Zone::Bootup(database.GetZoneID(zone_name), instance_id, true)) { + else if (!Zone::Bootup(content_db.GetZoneID(zone_name), instance_id, true)) { LogError("Zone Bootup failed :: Zone::Bootup"); zone = 0; } diff --git a/zone/merc.cpp b/zone/merc.cpp index 4e635fe72..2a165ec71 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -4757,7 +4757,7 @@ Merc* Merc::LoadMerc(Client *c, MercTemplate* merc_template, uint32 merchant_id, if(merc_template) { //TODO: Maybe add a way of updating client merc stats in a seperate function? like, for example, on leveling up. - const NPCType* npc_type_to_copy = database.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel()); + const NPCType* npc_type_to_copy = content_db.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel()); if(npc_type_to_copy != nullptr) { //This is actually a very terrible method of assigning stats, and should be changed at some point. See the comment in merc's deconstructor. @@ -4886,7 +4886,7 @@ void Merc::UpdateMercStats(Client *c, bool setmax) if (c->GetMercInfo().MercTemplateID > 0) { Log(Logs::General, Logs::Mercenaries, "Updating Mercenary Stats for %s (%s).", GetName(), c->GetName()); - const NPCType *npc_type = database.GetMercType( + const NPCType *npc_type = content_db.GetMercType( zone->GetMercTemplate(c->GetMercInfo().MercTemplateID)->MercNPCID, GetRace(), c->GetLevel()); if (npc_type) { max_hp = npc_type->max_hp; diff --git a/zone/npc.cpp b/zone/npc.cpp index 0cc2580fe..aef8d5fac 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -1969,7 +1969,7 @@ void Mob::NPCSpecialAttacks(const char* parse, int permtag, bool reset, bool rem if(permtag == 1 && this->GetNPCTypeID() > 0) { - if(database.SetSpecialAttkFlag(this->GetNPCTypeID(), orig_parse)) + if(content_db.SetSpecialAttkFlag(this->GetNPCTypeID(), orig_parse)) { LogInfo("NPCTypeID: [{}] flagged to [{}] for Special Attacks.\n",this->GetNPCTypeID(),orig_parse); } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index aa7f439d2..853623e3b 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -397,7 +397,7 @@ void QuestManager::Zone(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->requested_zone_id = content_db.GetZoneID(zone_name); ztz->admin = initiator->Admin(); strcpy(ztz->name, initiator->GetName()); ztz->guild_id = initiator->GuildID(); @@ -2675,7 +2675,7 @@ uint16 QuestManager::CreateInstance(const char *zone, int16 version, uint32 dura QuestManagerCurrentQuestVars(); if(initiator) { - uint32 zone_id = database.GetZoneID(zone); + uint32 zone_id = content_db.GetZoneID(zone); if(zone_id == 0) return 0; @@ -3060,7 +3060,7 @@ uint16 QuestManager::CreateDoor(const char* model, float x, float y, float z, fl } int32 QuestManager::GetZoneID(const char *zone) { - return static_cast(database.GetZoneID(zone)); + return static_cast(content_db.GetZoneID(zone)); } const char* QuestManager::GetZoneLongName(const char *zone) { diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 5f4f465f4..f0e16292a 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -458,7 +458,7 @@ bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList } } - const char *zone_name = database.GetZoneName(zoneid); + const char *zone_name = content_db.GetZoneName(zoneid); std::string query = StringFormat( "SELECT " "id, " @@ -562,7 +562,7 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa } } - const char *zone_name = database.GetZoneName(zoneid); + const char *zone_name = content_db.GetZoneName(zoneid); std::string query = StringFormat( "SELECT " "id, " @@ -1214,7 +1214,7 @@ void SpawnConditionManager::SetCondition(const char *zone_short, uint32 instance auto pack = new ServerPacket(ServerOP_SpawnCondition, sizeof(ServerSpawnCondition_Struct)); ServerSpawnCondition_Struct* ssc = (ServerSpawnCondition_Struct*)pack->pBuffer; - ssc->zoneID = database.GetZoneID(zone_short); + ssc->zoneID = content_db.GetZoneID(zone_short); ssc->instanceID = instance_id; ssc->condition_id = condition_id; ssc->value = new_value; @@ -1346,7 +1346,7 @@ void SpawnConditionManager::ToggleEvent(uint32 event_id, bool enabled, bool stri auto pack = new ServerPacket(ServerOP_SpawnEvent, sizeof(ServerSpawnEvent_Struct)); ServerSpawnEvent_Struct* sse = (ServerSpawnEvent_Struct*)pack->pBuffer; - sse->zoneID = database.GetZoneID(zone_short_name.c_str()); + sse->zoneID = content_db.GetZoneID(zone_short_name.c_str()); sse->event_id = event_id; worldserver.SendPacket(pack); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 60f770c92..ea11a74bc 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -576,7 +576,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_ZonePlayer: { ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(szp->name); - printf("Zoning %s to %s(%u) - %u\n", client != nullptr ? client->GetCleanName() : "Unknown", szp->zone, database.GetZoneID(szp->zone), szp->instance_id); + printf("Zoning %s to %s(%u) - %u\n", client != nullptr ? client->GetCleanName() : "Unknown", szp->zone, content_db.GetZoneID(szp->zone), szp->instance_id); if (client != 0) { if (strcasecmp(szp->adminname, szp->name) == 0) client->Message(Chat::White, "Zoning to: %s", szp->zone); @@ -586,17 +586,17 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) SendEmoteMessage(szp->adminname, 0, 0, "Summoning %s to %s %1.1f, %1.1f, %1.1f", szp->name, szp->zone, szp->x_pos, szp->y_pos, szp->z_pos); } if (!szp->instance_id) { - client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } else { - if (database.GetInstanceID(client->CharacterID(), database.GetZoneID(szp->zone)) == 0) { + if (database.GetInstanceID(client->CharacterID(), content_db.GetZoneID(szp->zone)) == 0) { client->AssignToInstance(szp->instance_id); - client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } else { - client->RemoveFromInstance(database.GetInstanceID(client->CharacterID(), database.GetZoneID(szp->zone))); + client->RemoveFromInstance(database.GetInstanceID(client->CharacterID(), content_db.GetZoneID(szp->zone))); client->AssignToInstance(szp->instance_id); - client->MovePC(database.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } } } diff --git a/zone/zone.cpp b/zone/zone.cpp index 342cd6132..217dd6e4d 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -83,7 +83,7 @@ Zone* zone = 0; void UpdateWindowTitle(char* iNewTitle); bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { - const char* zonename = database.GetZoneName(iZoneID); + const char* zonename = content_db.GetZoneName(iZoneID); if (iZoneID == 0 || zonename == 0) return false; @@ -186,7 +186,7 @@ bool Zone::LoadZoneObjects() for (auto row = results.begin(); row != results.end(); ++row) { if (atoi(row[9]) == 0) { // Type == 0 - Static Object - const char *shortname = database.GetZoneName(atoi(row[1]), false); // zoneid -> zone_shortname + const char *shortname = content_db.GetZoneName(atoi(row[1]), false); // zoneid -> zone_shortname if (!shortname) continue; @@ -1736,7 +1736,7 @@ ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Clien ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, const char* to_name, Client* client, float max_distance) { if(to_name == nullptr) return GetClosestZonePointWithoutZone(location.x, location.y, location.z, client, max_distance); - return GetClosestZonePoint(location, database.GetZoneID(to_name), client, max_distance); + return GetClosestZonePoint(location, content_db.GetZoneID(to_name), client, max_distance); } ZonePoint* Zone::GetClosestZonePointWithoutZone(float x, float y, float z, Client* client, float max_distance) { diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 60094bf84..b68fe2284 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -3552,7 +3552,7 @@ void ZoneDatabase::ListAllInstances(Client* client, uint32 charid) client->Message(Chat::White, "%s is part of the following instances:", name); for (auto row = results.begin(); row != results.end(); ++row) { - client->Message(Chat::White, "%s - id: %lu, version: %lu", database.GetZoneName(atoi(row[1])), + client->Message(Chat::White, "%s - id: %lu, version: %lu", content_db.GetZoneName(atoi(row[1])), (unsigned long)atoi(row[0]), (unsigned long)atoi(row[2])); } } diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 7ee503b66..eb5bc6805 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -156,7 +156,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { } /* Check for Valid Zone */ - const char *target_zone_name = database.GetZoneName(target_zone_id); + const char *target_zone_name = content_db.GetZoneName(target_zone_id); if(target_zone_name == nullptr) { //invalid zone... Message(Chat::Red, "Invalid target zone ID."); @@ -348,7 +348,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc if(this->GetPet()) entity_list.RemoveFromHateLists(this->GetPet()); - LogInfo("Zoning [{}] to: [{}] ([{}]) - ([{}]) x [{}] y [{}] z [{}]", m_pp.name, database.GetZoneName(zone_id), zone_id, instance_id, dest_x, dest_y, dest_z); + LogInfo("Zoning [{}] to: [{}] ([{}]) - ([{}]) x [{}] y [{}] z [{}]", m_pp.name, content_db.GetZoneName(zone_id), zone_id, instance_id, dest_x, dest_y, dest_z); //set the player's coordinates in the new zone so they have them //when they zone into it @@ -402,7 +402,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc } void Client::MovePC(const char* zonename, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { - ProcessMovePC(database.GetZoneID(zonename), 0, x, y, z, heading, ignorerestrictions, zm); + ProcessMovePC(content_db.GetZoneID(zonename), 0, x, y, z, heading, ignorerestrictions, zm); } //designed for in zone moving @@ -482,7 +482,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z const char* pShortZoneName = nullptr; char* pZoneName = nullptr; - pShortZoneName = database.GetZoneName(zoneID); + pShortZoneName = content_db.GetZoneName(zoneID); content_db.GetZoneLongName(pShortZoneName, &pZoneName); if(!pZoneName) { @@ -828,7 +828,7 @@ void Client::SendZoneFlagInfo(Client *to) const { for(; cur != end; ++cur) { uint32 zoneid = *cur; - const char *short_name = database.GetZoneName(zoneid); + const char *short_name = content_db.GetZoneName(zoneid); char *long_name = nullptr; content_db.GetZoneLongName(short_name, &long_name); From 951a77716cc8ac798ec3c63cb5c7c78947ff9ab0 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 02:34:02 -0500 Subject: [PATCH 030/272] Migrate NPC spells, emotes, merchantlist [skip ci] --- zone/mob_ai.cpp | 8 ++++---- zone/npc_scale_manager.cpp | 2 +- zone/zone.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 43d85c450..fae923bd3 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -2464,12 +2464,12 @@ bool NPC::AI_AddNPCSpells(uint32 iDBSpellsID) { AIautocastspell_timer->Disable(); return false; } - DBnpcspells_Struct* spell_list = database.GetNPCSpells(iDBSpellsID); + DBnpcspells_Struct* spell_list = content_db.GetNPCSpells(iDBSpellsID); if (!spell_list) { AIautocastspell_timer->Disable(); return false; } - DBnpcspells_Struct* parentlist = database.GetNPCSpells(spell_list->parent_list); + DBnpcspells_Struct* parentlist = content_db.GetNPCSpells(spell_list->parent_list); #if MobAI_DEBUG_Spells >= 10 std::string debug_msg = StringFormat("Loading NPCSpells onto %s: dbspellsid=%u, level=%u", this->GetName(), iDBSpellsID, this->GetLevel()); if (spell_list) { @@ -2636,13 +2636,13 @@ bool NPC::AI_AddNPCSpellsEffects(uint32 iDBSpellsEffectsID) { if (iDBSpellsEffectsID == 0) return false; - DBnpcspellseffects_Struct* spell_effects_list = database.GetNPCSpellsEffects(iDBSpellsEffectsID); + DBnpcspellseffects_Struct* spell_effects_list = content_db.GetNPCSpellsEffects(iDBSpellsEffectsID); if (!spell_effects_list) { return false; } - DBnpcspellseffects_Struct* parentlist = database.GetNPCSpellsEffects(spell_effects_list->parent_list); + DBnpcspellseffects_Struct* parentlist = content_db.GetNPCSpellsEffects(spell_effects_list->parent_list); uint32 i; #if MobAI_DEBUG_Spells >= 10 diff --git a/zone/npc_scale_manager.cpp b/zone/npc_scale_manager.cpp index ed65674fb..f9c98052d 100644 --- a/zone/npc_scale_manager.cpp +++ b/zone/npc_scale_manager.cpp @@ -166,7 +166,7 @@ void NpcScaleManager::ScaleNPC(NPC *npc) bool NpcScaleManager::LoadScaleData() { - auto results = database.QueryDatabase( + auto results = content_db.QueryDatabase( "SELECT " "type," "level," diff --git a/zone/zone.cpp b/zone/zone.cpp index 217dd6e4d..becf6312c 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -468,7 +468,7 @@ void Zone::LoadNewMerchantData(uint32 merchantid) { std::list merlist; std::string query = StringFormat("SELECT item, slot, faction_required, level_required, alt_currency_cost, " "classes_required, probability FROM merchantlist WHERE merchantid=%d ORDER BY slot", merchantid); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -2311,7 +2311,7 @@ void Zone::LoadNPCEmotes(LinkedList* NPCEmoteList) NPCEmoteList->Clear(); const std::string query = "SELECT emoteid, event_, type, text FROM npc_emotes"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } From d360c60289d62121feae1048cfb375151ded600e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 02:40:04 -0500 Subject: [PATCH 031/272] Migrate ldon traps and #hotfix [skip ci] --- zone/worldserver.cpp | 12 ++++++------ zone/zone.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index ea11a74bc..52338b6c8 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1984,32 +1984,32 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { std::string hotfix_name = std::string((char*)pack->pBuffer); LogInfo("Loading items"); - if (!database.LoadItems(hotfix_name)) { + if (!content_db.LoadItems(hotfix_name)) { LogError("Loading items failed!"); } LogInfo("Loading npc faction lists"); - if (!database.LoadNPCFactionLists(hotfix_name)) { + if (!content_db.LoadNPCFactionLists(hotfix_name)) { LogError("Loading npcs faction lists failed!"); } LogInfo("Loading loot tables"); - if (!database.LoadLoot(hotfix_name)) { + if (!content_db.LoadLoot(hotfix_name)) { LogError("Loading loot failed!"); } LogInfo("Loading skill caps"); - if (!database.LoadSkillCaps(std::string(hotfix_name))) { + if (!content_db.LoadSkillCaps(std::string(hotfix_name))) { LogError("Loading skill caps failed!"); } LogInfo("Loading spells"); - if (!database.LoadSpells(hotfix_name, &SPDAT_RECORDS, &spells)) { + if (!content_db.LoadSpells(hotfix_name, &SPDAT_RECORDS, &spells)) { LogError("Loading spells failed!"); } LogInfo("Loading base data"); - if (!database.LoadBaseData(hotfix_name)) { + if (!content_db.LoadBaseData(hotfix_name)) { LogError("Loading base data failed!"); } break; diff --git a/zone/zone.cpp b/zone/zone.cpp index becf6312c..bd00af26d 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -2082,7 +2082,7 @@ void Zone::SetInstanceTimer(uint32 new_duration) void Zone::LoadLDoNTraps() { const std::string query = "SELECT id, type, spell_id, skill, locked FROM ldon_trap_templates"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } @@ -2102,7 +2102,7 @@ void Zone::LoadLDoNTraps() void Zone::LoadLDoNTrapEntries() { const std::string query = "SELECT id, trap_id FROM ldon_trap_entries"; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } From 4375e514310964126815e9d3dec477764bcb04cc Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 02:42:04 -0500 Subject: [PATCH 032/272] Push up schema notes [skip ci] --- common/database_schema.h | 162 +++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/common/database_schema.h b/common/database_schema.h index 7f883aa9f..8acde5161 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -165,89 +165,88 @@ namespace DatabaseSchema { static std::vector GetContentTables() { return { - "aa_ability", - "aa_actions", - "aa_effects", - "aa_rank_effects", - "aa_rank_prereqs", - "aa_ranks", - "aa_required_level_cost", - "adventure_template", - "adventure_template_entry", - "adventure_template_entry_flavor", - "altadv_vars", - "alternate_currency", - "auras", + "aa_ability", // + "aa_actions", // not in use? + "aa_effects", // not in use? + "aa_rank_effects", // + "aa_rank_prereqs", // + "aa_ranks", // + "aa_required_level_cost", // not in use? + "adventure_template", // + "adventure_template_entry", // + "adventure_template_entry_flavor", // + "altadv_vars", // no longer in use? + "alternate_currency", // + "auras", // "base_data", - "blocked_spells", - "books", - "char_create_combinations", - "char_create_point_allocations", - "class_skill", - "damageshieldtypes", - "doors", - "faction_base_data", - "faction_list", - "faction_list_mod", - "fear_hints", - "fishing", - "forage", - "global_loot", - "goallists", + "blocked_spells", // + "books", // + "char_create_combinations", // + "char_create_point_allocations", // + "class_skill", // not in use? + "damageshieldtypes", // not in use ? + "doors", // + "faction_base_data", // + "faction_list", // + "faction_list_mod", // + "fear_hints", // not used + "fishing", // + "forage", // + "global_loot", // + "goallists", // "graveyard", - "grid", - "grid_entries", - "ground_spawns", - "horses", - "instance_list", - "items", - "ldon_trap_entries", - "ldon_trap_templates", - "lootdrop", - "lootdrop_entries", - "loottable", - "loottable_entries", - "merchantlist", - "npc_emotes", - "npc_faction", - "npc_faction_entries", - "npc_scale_global_base", - "npc_spells", - "npc_spells_effects", - "npc_spells_effects_entries", - "npc_spells_entries", - "npc_types", - "npc_types_metadata", - "npc_types_tint", - "object", - "pets", - "pets_equipmentset", - "pets_equipmentset_entries", - "proximities", - "races", - "skill_caps", - "spawn2", - "spawn_condition_values", - "spawn_conditions", - "spawn_events", - "spawnentry", - "spawngroup", - "spells_new", - "start_zones", - "starting_items", - "task_activities", - "tasks", - "tasksets", - "tradeskill_recipe", - "tradeskill_recipe_entries", - "traps", - "tribute_levels", - "tributes", - "veteran_reward_templates", - "zone", - "zone_points", - "zone_server", - "zoneserver_auth", + "grid", // + "grid_entries", // + "ground_spawns", // + "horses", // + "items", // + "ldon_trap_entries", // + "ldon_trap_templates", // + "lootdrop", // + "lootdrop_entries", // + "loottable", // + "loottable_entries", // + "merchantlist", // + "npc_emotes", // + "npc_faction", // + "npc_faction_entries", // + "npc_scale_global_base", // + "npc_spells", // + "npc_spells_effects", // + "npc_spells_effects_entries", // + "npc_spells_entries", // + "npc_types", // + "npc_types_metadata", // not in use? + "npc_types_tint", // + "object", // + "pets", // + "pets_equipmentset", // + "pets_equipmentset_entries", // + "proximities", // + "races", // not used - peq editor? + "skill_caps", // + "spawn2", // + "spawn_condition_values", // boundary rewrite (1) + "spawn_conditions", // + "spawn_events", // + "spawnentry", // + "spawngroup", // + "spells_new", // + "start_zones", // + "starting_items", // + "task_activities", // + "tasks", // + "tasksets", // + "tradeskill_recipe", // + "tradeskill_recipe_entries", // + "traps", // + "tribute_levels", // + "tributes", // + "veteran_reward_templates", // + "zone", // + "zone_points", // + "zone_server", // unused + "zoneserver_auth", // unused }; } @@ -321,6 +320,7 @@ namespace DatabaseSchema { "group_leaders", "hackers", "ip_exemptions", + "instance_list", "item_tick", "lfguild", "merchantlist_temp", From 3dc227e8cc679cea395276b6ca6f3e7ec28c8473 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 02:53:19 -0500 Subject: [PATCH 033/272] Update schema [skip ci] --- common/database_schema.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/database_schema.h b/common/database_schema.h index 8acde5161..50ce26781 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -226,7 +226,6 @@ namespace DatabaseSchema { "races", // not used - peq editor? "skill_caps", // "spawn2", // - "spawn_condition_values", // boundary rewrite (1) "spawn_conditions", // "spawn_events", // "spawnentry", // @@ -264,6 +263,7 @@ namespace DatabaseSchema { "eqtime", "launcher", "launcher_zones", + "spawn_condition_values", "level_exp_mods", "logsys_categories", "name_filter", From 06a51f555e6dfd4ef0b77dcc6388cfe15bc500eb Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 12 Mar 2020 03:15:14 -0500 Subject: [PATCH 034/272] Fix some stragglers --- world/adventure_manager.cpp | 2 +- zone/command.cpp | 2 +- zone/spawn2.cpp | 2 +- zone/spawngroup.cpp | 2 +- zone/zone.cpp | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index 7446696b0..21ad8a8e4 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -671,7 +671,7 @@ bool AdventureManager::LoadAdventureTemplates() adventure_template ) ; - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return false; } diff --git a/zone/command.cpp b/zone/command.cpp index dafbdb7b1..5c0504aea 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -9956,7 +9956,7 @@ void command_advnpcspawn(Client *c, const Seperator *sep) } if (strcasecmp(sep->arg[1], "testload") == 0 && atoi(sep->arg[2])!=0) { - database.LoadSpawnGroupsByID(atoi(sep->arg[2]),&zone->spawn_group_list); + content_db.LoadSpawnGroupsByID(atoi(sep->arg[2]),&zone->spawn_group_list); c->Message(Chat::White, "Group %i loaded successfully!", atoi(sep->arg[2])); return; } diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index f0e16292a..d362c8f44 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -166,7 +166,7 @@ bool Spawn2::Process() { } if (spawn_group == nullptr) { - database.LoadSpawnGroupsByID(spawngroup_id_, &zone->spawn_group_list); + content_db.LoadSpawnGroupsByID(spawngroup_id_, &zone->spawn_group_list); spawn_group = zone->spawn_group_list.GetSpawnGroup(spawngroup_id_); } diff --git a/zone/spawngroup.cpp b/zone/spawngroup.cpp index 6a7817bce..f33aa7fca 100644 --- a/zone/spawngroup.cpp +++ b/zone/spawngroup.cpp @@ -176,7 +176,7 @@ bool SpawnGroupList::RemoveSpawnGroup(uint32 in_id) void SpawnGroupList::ReloadSpawnGroups() { ClearSpawnGroups(); - database.LoadSpawnGroups(zone->GetShortName(), zone->GetInstanceVersion(), &zone->spawn_group_list); + content_db.LoadSpawnGroups(zone->GetShortName(), zone->GetInstanceVersion(), &zone->spawn_group_list); } void SpawnGroupList::ClearSpawnGroups() diff --git a/zone/zone.cpp b/zone/zone.cpp index bd00af26d..653070bba 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -937,13 +937,13 @@ bool Zone::Init(bool iStaticZone) { } LogInfo("Loading spawn groups"); - if (!database.LoadSpawnGroups(short_name, GetInstanceVersion(), &spawn_group_list)) { + if (!content_db.LoadSpawnGroups(short_name, GetInstanceVersion(), &spawn_group_list)) { LogError("Loading spawn groups failed"); return false; } LogInfo("Loading spawn2 points"); - if (!database.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion())) + if (!content_db.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion())) { LogError("Loading spawn2 points failed"); return false; @@ -1607,7 +1607,7 @@ void Zone::Repop(uint32 delay) quest_manager.ClearAllTimers(); - if (!database.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion(), delay)) + if (!content_db.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion(), delay)) LogDebug("Error in Zone::Repop: database.PopulateZoneSpawnList failed"); initgrids_timer.Start(); From 8effd671c5c2c7a832b4ef9c670bc817a800f77c Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 22 Mar 2020 03:27:44 -0500 Subject: [PATCH 035/272] Second pass through tables [skip ci] --- common/database_schema.h | 140 ++++++++++++++++++------------------- zone/client.cpp | 2 +- zone/command.cpp | 8 +-- zone/npc.h | 2 +- zone/npc_scale_manager.cpp | 4 +- zone/zone.cpp | 2 +- 6 files changed, 79 insertions(+), 79 deletions(-) diff --git a/common/database_schema.h b/common/database_schema.h index 50ce26781..7d87ff3c1 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -165,85 +165,85 @@ namespace DatabaseSchema { static std::vector GetContentTables() { return { - "aa_ability", // + "aa_ability", // -- "aa_actions", // not in use? "aa_effects", // not in use? - "aa_rank_effects", // - "aa_rank_prereqs", // - "aa_ranks", // + "aa_rank_effects", // -- + "aa_rank_prereqs", // -- + "aa_ranks", // -- "aa_required_level_cost", // not in use? - "adventure_template", // - "adventure_template_entry", // - "adventure_template_entry_flavor", // + "adventure_template", // -- + "adventure_template_entry", // -- + "adventure_template_entry_flavor", // -- "altadv_vars", // no longer in use? - "alternate_currency", // - "auras", // - "base_data", - "blocked_spells", // - "books", // - "char_create_combinations", // - "char_create_point_allocations", // + "alternate_currency", // -- + "auras", // -- + "base_data", // -- + "blocked_spells", // -- + "books", // -- + "char_create_combinations", // -- + "char_create_point_allocations", // -- "class_skill", // not in use? "damageshieldtypes", // not in use ? - "doors", // - "faction_base_data", // - "faction_list", // - "faction_list_mod", // + "doors", // -- + "faction_base_data", // -- + "faction_list", // -- + "faction_list_mod", // -- "fear_hints", // not used - "fishing", // - "forage", // - "global_loot", // - "goallists", // - "graveyard", - "grid", // - "grid_entries", // - "ground_spawns", // - "horses", // - "items", // - "ldon_trap_entries", // - "ldon_trap_templates", // - "lootdrop", // - "lootdrop_entries", // - "loottable", // - "loottable_entries", // - "merchantlist", // - "npc_emotes", // - "npc_faction", // - "npc_faction_entries", // - "npc_scale_global_base", // - "npc_spells", // - "npc_spells_effects", // - "npc_spells_effects_entries", // - "npc_spells_entries", // - "npc_types", // + "fishing", // -- + "forage", // -- + "global_loot", // -- + "goallists", // -- + "graveyard", // -- + "grid", // -- + "grid_entries", // -- + "ground_spawns", // -- + "horses", // -- + "items", // -- + "ldon_trap_entries", // -- + "ldon_trap_templates", // -- + "lootdrop", // -- + "lootdrop_entries", // -- + "loottable", // -- + "loottable_entries", // -- + "merchantlist", // -- + "npc_emotes", // -- + "npc_faction", // -- + "npc_faction_entries", // -- + "npc_scale_global_base", // -- + "npc_spells", // -- + "npc_spells_effects", // -- + "npc_spells_effects_entries", // -- + "npc_spells_entries", // -- + "npc_types", // -- "npc_types_metadata", // not in use? - "npc_types_tint", // - "object", // - "pets", // - "pets_equipmentset", // - "pets_equipmentset_entries", // - "proximities", // + "npc_types_tint", // -- + "object", // -- + "pets", // -- + "pets_equipmentset", // -- + "pets_equipmentset_entries", // -- + "proximities", // -- "races", // not used - peq editor? - "skill_caps", // - "spawn2", // - "spawn_conditions", // - "spawn_events", // - "spawnentry", // - "spawngroup", // - "spells_new", // - "start_zones", // - "starting_items", // - "task_activities", // - "tasks", // - "tasksets", // - "tradeskill_recipe", // - "tradeskill_recipe_entries", // - "traps", // - "tribute_levels", // - "tributes", // - "veteran_reward_templates", // - "zone", // - "zone_points", // + "skill_caps", // -- + "spawn2", // -- + "spawn_conditions", // -- + "spawn_events", // -- + "spawnentry", // -- + "spawngroup", // -- + "spells_new", // -- + "start_zones", // -- + "starting_items", // -- + "task_activities", // -- + "tasks", // -- + "tasksets", // -- + "tradeskill_recipe", // -- + "tradeskill_recipe_entries", // -- + "traps", // -- + "tribute_levels", // -- + "tributes", // -- + "veteran_reward_templates", // -- + "zone", // -- + "zone_points", // -- "zone_server", // unused "zoneserver_auth", // unused }; diff --git a/zone/client.cpp b/zone/client.cpp index e8bbadb17..dde425475 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8123,7 +8123,7 @@ void Client::SendFactionMessage(int32 tmpvalue, int32 faction_id, int32 faction_ faction_value = faction_before_hit; // default to Faction# if we couldn't get the name from the ID - if (database.GetFactionName(faction_id, name, sizeof(name)) == false) + if (content_db.GetFactionName(faction_id, name, sizeof(name)) == false) snprintf(name, sizeof(name), "Faction%i", faction_id); if (tmpvalue == 0 || temp == 1 || temp == 2) diff --git a/zone/command.cpp b/zone/command.cpp index 5c0504aea..b93b4c2b7 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -1799,7 +1799,7 @@ void command_timezone(Client *c, const Seperator *sep) c->Message(Chat::Red, "Setting timezone to %i h %i m", hours, minutes); uint32 ntz=(hours*60)+minutes; zone->zone_time.setEQTimeZone(ntz); - database.SetZoneTZ(zone->GetZoneID(), zone->GetInstanceVersion(), ntz); + content_db.SetZoneTZ(zone->GetZoneID(), zone->GetInstanceVersion(), ntz); // Update all clients with new TZ. auto outapp = new EQApplicationPacket(OP_TimeOfDay, sizeof(TimeOfDay_Struct)); @@ -9609,11 +9609,11 @@ void command_setgraveyard(Client *c, const Seperator *sep) zoneid = content_db.GetZoneID(sep->arg[1]); if(zoneid > 0) { - graveyard_id = database.CreateGraveyardRecord(zoneid, t->GetPosition()); + graveyard_id = content_db.CreateGraveyardRecord(zoneid, t->GetPosition()); if(graveyard_id > 0) { c->Message(Chat::White, "Successfuly added a new record for this graveyard!"); - if(database.AddGraveyardIDToZone(zoneid, graveyard_id) > 0) { + if(content_db.AddGraveyardIDToZone(zoneid, graveyard_id) > 0) { c->Message(Chat::White, "Successfuly added this new graveyard for the zone %s.", sep->arg[1]); // TODO: Set graveyard data to the running zone process. c->Message(Chat::White, "Done!"); @@ -9646,7 +9646,7 @@ void command_deletegraveyard(Client *c, const Seperator *sep) graveyard_id = content_db.GetZoneGraveyardID(zoneid, 0); if(zoneid > 0 && graveyard_id > 0) { - if(database.DeleteGraveyard(zoneid, graveyard_id)) + if(content_db.DeleteGraveyard(zoneid, graveyard_id)) c->Message(Chat::White, "Successfuly deleted graveyard %u for zone %s.", graveyard_id, sep->arg[1]); else c->Message(Chat::White, "Unable to delete graveyard %u for zone %s.", graveyard_id, sep->arg[1]); diff --git a/zone/npc.h b/zone/npc.h index 2b8edc9b9..020151028 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -269,7 +269,7 @@ public: void SetNPCFactionID(int32 in) { npc_faction_id = in; - database.GetFactionIdsForNPC(npc_faction_id, &faction_list, &primary_faction); + content_db.GetFactionIdsForNPC(npc_faction_id, &faction_list, &primary_faction); } glm::vec4 m_SpawnPoint; diff --git a/zone/npc_scale_manager.cpp b/zone/npc_scale_manager.cpp index f9c98052d..191d2540f 100644 --- a/zone/npc_scale_manager.cpp +++ b/zone/npc_scale_manager.cpp @@ -550,7 +550,7 @@ bool NpcScaleManager::ApplyGlobalBaseScalingToNPCStatically(NPC *&npc) npc->GetNPCTypeID() ); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); return results.Success(); } @@ -610,7 +610,7 @@ bool NpcScaleManager::ApplyGlobalBaseScalingToNPCDynamically(NPC *&npc) npc->GetNPCTypeID() ); - auto results = database.QueryDatabase(query); + auto results = content_db.QueryDatabase(query); return results.Success(); } diff --git a/zone/zone.cpp b/zone/zone.cpp index 653070bba..2cdfc99d6 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -815,7 +815,7 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) if(graveyard_id() > 0) { LogDebug("Graveyard ID is [{}]", graveyard_id()); - bool GraveYardLoaded = database.GetZoneGraveyard(graveyard_id(), &pgraveyard_zoneid, &m_Graveyard.x, &m_Graveyard.y, &m_Graveyard.z, &m_Graveyard.w); + bool GraveYardLoaded = content_db.GetZoneGraveyard(graveyard_id(), &pgraveyard_zoneid, &m_Graveyard.x, &m_Graveyard.y, &m_Graveyard.z, &m_Graveyard.w); if (GraveYardLoaded) { LogDebug("Loaded a graveyard for zone [{}]: graveyard zoneid is [{}] at [{}]", short_name, graveyard_zoneid(), to_string(m_Graveyard).c_str()); From 6127baf12a3daaa88e0ae3c06dc006604874b41e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 29 Mar 2020 20:16:17 -0500 Subject: [PATCH 036/272] Update schema [skip ci] --- common/database_schema.h | 151 ++++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 81 deletions(-) diff --git a/common/database_schema.h b/common/database_schema.h index 7d87ff3c1..6a7ccf612 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -165,87 +165,76 @@ namespace DatabaseSchema { static std::vector GetContentTables() { return { - "aa_ability", // -- - "aa_actions", // not in use? - "aa_effects", // not in use? - "aa_rank_effects", // -- - "aa_rank_prereqs", // -- - "aa_ranks", // -- - "aa_required_level_cost", // not in use? - "adventure_template", // -- - "adventure_template_entry", // -- - "adventure_template_entry_flavor", // -- - "altadv_vars", // no longer in use? - "alternate_currency", // -- - "auras", // -- - "base_data", // -- - "blocked_spells", // -- - "books", // -- - "char_create_combinations", // -- - "char_create_point_allocations", // -- - "class_skill", // not in use? - "damageshieldtypes", // not in use ? - "doors", // -- - "faction_base_data", // -- - "faction_list", // -- - "faction_list_mod", // -- - "fear_hints", // not used - "fishing", // -- - "forage", // -- - "global_loot", // -- - "goallists", // -- - "graveyard", // -- - "grid", // -- - "grid_entries", // -- - "ground_spawns", // -- - "horses", // -- - "items", // -- - "ldon_trap_entries", // -- - "ldon_trap_templates", // -- - "lootdrop", // -- - "lootdrop_entries", // -- - "loottable", // -- - "loottable_entries", // -- - "merchantlist", // -- - "npc_emotes", // -- - "npc_faction", // -- - "npc_faction_entries", // -- - "npc_scale_global_base", // -- - "npc_spells", // -- - "npc_spells_effects", // -- - "npc_spells_effects_entries", // -- - "npc_spells_entries", // -- - "npc_types", // -- - "npc_types_metadata", // not in use? - "npc_types_tint", // -- - "object", // -- - "pets", // -- - "pets_equipmentset", // -- - "pets_equipmentset_entries", // -- - "proximities", // -- - "races", // not used - peq editor? - "skill_caps", // -- - "spawn2", // -- - "spawn_conditions", // -- - "spawn_events", // -- - "spawnentry", // -- - "spawngroup", // -- - "spells_new", // -- - "start_zones", // -- - "starting_items", // -- - "task_activities", // -- - "tasks", // -- - "tasksets", // -- - "tradeskill_recipe", // -- - "tradeskill_recipe_entries", // -- - "traps", // -- - "tribute_levels", // -- - "tributes", // -- - "veteran_reward_templates", // -- - "zone", // -- - "zone_points", // -- - "zone_server", // unused - "zoneserver_auth", // unused + "aa_ability", + "aa_rank_effects", + "aa_rank_prereqs", + "aa_ranks", + "adventure_template", + "adventure_template_entry", + "adventure_template_entry_flavor", + "alternate_currency", + "auras", + "base_data", + "blocked_spells", + "books", + "char_create_combinations", + "char_create_point_allocations", + "doors", + "faction_base_data", + "faction_list", + "faction_list_mod", + "fishing", + "forage", + "global_loot", + "goallists", + "graveyard", + "grid", + "grid_entries", + "ground_spawns", + "horses", + "items", + "ldon_trap_entries", + "ldon_trap_templates", + "lootdrop", + "lootdrop_entries", + "loottable", + "loottable_entries", + "merchantlist", + "npc_emotes", + "npc_faction", + "npc_faction_entries", + "npc_scale_global_base", + "npc_spells", + "npc_spells_effects", + "npc_spells_effects_entries", + "npc_spells_entries", + "npc_types", + "npc_types_tint", + "object", + "pets", + "pets_equipmentset", + "pets_equipmentset_entries", + "proximities", + "skill_caps", + "spawn2", + "spawn_conditions", + "spawn_events", + "spawnentry", + "spawngroup", + "spells_new", + "start_zones", + "starting_items", + "task_activities", + "tasks", + "tasksets", + "tradeskill_recipe", + "tradeskill_recipe_entries", + "traps", + "tribute_levels", + "tributes", + "veteran_reward_templates", + "zone", + "zone_points", }; } From e9b361445f4e22931f32ec9b2ee0835a95f81ec6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 04:28:54 -0500 Subject: [PATCH 037/272] Add give item saylinks to #fi #itemsearch --- zone/command.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/zone/command.cpp b/zone/command.cpp index b93b4c2b7..ef947b1b5 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -7274,6 +7274,13 @@ void command_itemsearch(Client *c, const Seperator *sep) return; } + std::vector amounts = { + "1", + "10", + "100", + "1000" + }; + int count = 0; char sName[64]; char sCriteria[255]; @@ -7288,7 +7295,24 @@ void command_itemsearch(Client *c, const Seperator *sep) if (pdest != nullptr) { linker.SetItemData(item); - c->Message(Chat::White, "%u: %s", item->ID, linker.GenerateLink().c_str()); + std::string saylink_commands; + for (auto &amount : amounts) { + saylink_commands += EQEmu::SayLinkEngine::GenerateQuestSaylink( + "#gi " + std::to_string(item->ID) + " " + amount, + false, + "[" + amount + "] " + ); + } + + c->Message( + Chat::White, + fmt::format( + " Summon {} [{}] [{}]", + saylink_commands, + item->ID, + linker.GenerateLink() + ).c_str() + ); ++count; } From 128cc458fd458af68065f33875338960dc6ac058 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 04:29:52 -0500 Subject: [PATCH 038/272] Separate tradeskill queries to not be cross-boundary, clean up logic --- common/CMakeLists.txt | 2 + .../character_recipe_list_repository.h | 117 ++++ .../tradeskill_recipe_repository.h | 134 +++++ zone/client.h | 6 +- zone/client_packet.cpp | 198 ++++--- zone/tradeskills.cpp | 290 ++++++---- zone/trading.cpp | 501 +++++++++--------- 7 files changed, 837 insertions(+), 411 deletions(-) create mode 100644 common/repositories/character_recipe_list_repository.h create mode 100644 common/repositories/tradeskill_recipe_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index e312c202d..ce62fbb00 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -196,6 +196,8 @@ SET(common_headers queue.h races.h random.h + repositories/character_recipe_list_repository.h + repositories/tradeskill_recipe_repository.h rdtsc.h rulesys.h ruletypes.h diff --git a/common/repositories/character_recipe_list_repository.h b/common/repositories/character_recipe_list_repository.h new file mode 100644 index 000000000..d3349cf6a --- /dev/null +++ b/common/repositories/character_recipe_list_repository.h @@ -0,0 +1,117 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H +#define EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterRecipeListRepository { +public: + struct CharacterRecipeList { + int character_id; + int recipe_id; + int made_count; + }; + + static std::vector Columns() + { + return { + "char_id", + "recipe_id", + "madecount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string TableName() + { + return std::string("char_recipe_list"); + } + + static std::string BaseSelect() + { + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) + ); + } + + static CharacterRecipeList GetDefaults() + { + CharacterRecipeList character_recipe_list_entry; + + character_recipe_list_entry.character_id = 0; + character_recipe_list_entry.made_count = 0; + character_recipe_list_entry.recipe_id = 0; + + return character_recipe_list_entry; + } + + static std::vector GetLearnedRecipeList(int character_id) + { + std::vector character_recipe_list; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE char_id = {}", + BaseSelect(), + character_id + ) + ); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterRecipeList character_recipe_list_entry; + + character_recipe_list_entry.character_id = character_id; + character_recipe_list_entry.recipe_id = atoi(row[1]); + character_recipe_list_entry.made_count = atoi(row[2]); + + character_recipe_list.push_back(character_recipe_list_entry); + } + + return character_recipe_list; + } + + static CharacterRecipeList GetRecipe( + std::vector character_recipe_list, + int recipe_id + ) + { + for (auto &row : character_recipe_list) { + if (row.recipe_id == recipe_id) { + return row; + } + } + + return GetDefaults(); + } + +}; + +#endif //EQEMU_CHARACTER_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h new file mode 100644 index 000000000..9cdcb178a --- /dev/null +++ b/common/repositories/tradeskill_recipe_repository.h @@ -0,0 +1,134 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRADESKILL_RECIPE_REPOSITORY_H +#define EQEMU_TRADESKILL_RECIPE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TradeskillRecipeRepository { +public: + struct TradeskillRecipe { + int id; + std::string name; + int tradeskill; + int skillneeded; + int trivial; + uint8 nofail; + int replace_container; + std::string notes; + uint8 must_learn; + uint8 quest; + uint8 enabled; + }; + + static std::vector Columns() + { + return { + "id", + "name", + "tradeskill", + "skillneeded", + "trivial", + "nofail", + "replace_container", + "notes", + "must_learn", + "quest", + "enabled", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string TableName() + { + return std::string("tradeskill_recipe"); + } + + static std::string BaseSelect() + { + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) + ); + } + + static TradeskillRecipe New() + { + TradeskillRecipe entry; + + entry.id = 0; + entry.name = ""; + entry.tradeskill = 0; + entry.skillneeded = 0; + entry.trivial = 0; + entry.nofail = 0; + entry.replace_container = 0; + entry.notes = ""; + entry.must_learn = 0; + entry.quest = 0; + entry.enabled = 0; + + return entry; + } + + static TradeskillRecipe GetRecipe(int recipe_id) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {}", + BaseSelect(), + recipe_id + ) + ); + + TradeskillRecipe tradeskill_recipe = New(); + + auto row = results.begin(); + if (results.RowCount() == 0) { + return tradeskill_recipe; + } + + tradeskill_recipe.id = atoi(row[0]); + tradeskill_recipe.name = (row[1] ? row[1] : ""); + tradeskill_recipe.tradeskill = atoi(row[2]); + tradeskill_recipe.skillneeded = atoi(row[3]); + tradeskill_recipe.trivial = atoi(row[4]); + tradeskill_recipe.nofail = atoi(row[5]); + tradeskill_recipe.replace_container = atoi(row[6]); + tradeskill_recipe.notes = (row[7] ? row[7] : ""); + tradeskill_recipe.must_learn = atoi(row[8]); + tradeskill_recipe.quest = atoi(row[9]); + tradeskill_recipe.enabled = atoi(row[10]); + + return tradeskill_recipe; + } + +}; + +#endif diff --git a/zone/client.h b/zone/client.h index 58b0d9af8..fa863fae7 100644 --- a/zone/client.h +++ b/zone/client.h @@ -289,7 +289,7 @@ public: const char *message9 = nullptr); void Tell_StringID(uint32 string_id, const char *who, const char *message); void SendColoredText(uint32 color, std::string message); - void SendBazaarResults(uint32 trader_id,uint32 class_,uint32 race,uint32 stat,uint32 slot,uint32 type,char name[64],uint32 minprice,uint32 maxprice); + void SendBazaarResults(uint32 trader_id, uint32 in_class, uint32 in_race, uint32 item_stat, uint32 item_slot, uint32 item_type, char item_name[64], uint32 min_price, uint32 max_price); void SendTraderItem(uint32 item_id,uint16 quantity); uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity); uint32 FindTraderItemSerialNumber(int32 ItemID); @@ -325,7 +325,7 @@ public: void FilteredMessage(Mob *sender, uint32 type, eqFilterType filter, const char* message, ...); void VoiceMacroReceived(uint32 Type, char *Target, uint32 MacroNumber); void SendSound(); - void LearnRecipe(uint32 recipeID); + void LearnRecipe(uint32 recipe_id); bool CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill); EQApplicationPacket* ReturnItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type); @@ -745,7 +745,7 @@ public: inline uint16 MaxSkill(EQEmu::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } uint8 SkillTrainLevel(EQEmu::skills::SkillType skillid, uint16 class_); - void TradeskillSearchResults(const std::string &query, unsigned long objtype, unsigned long someid); + void SendTradeskillSearchResults(const std::string &query, unsigned long objtype, unsigned long someid); void SendTradeskillDetails(uint32 recipe_id); bool TradeskillExecute(DBTradeskillRecipe_Struct *spec); void CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float skillup_modifier, uint16 success_modifier, EQEmu::skills::SkillType tradeskill); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 49b5f7600..9085f1849 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -11828,90 +11828,166 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) if (first) //no favorites.... return; - const std::string query = StringFormat("SELECT tr.id, tr.name, tr.trivial, " - "SUM(tre.componentcount), crl.madecount,tr.tradeskill " - "FROM tradeskill_recipe AS tr " - "LEFT JOIN tradeskill_recipe_entries AS tre ON tr.id=tre.recipe_id " - "LEFT JOIN (SELECT recipe_id, madecount " - "FROM char_recipe_list " - "WHERE char_id = %u) AS crl ON tr.id=crl.recipe_id " - "WHERE tr.enabled <> 0 AND tr.id IN (%s) " - "AND tr.must_learn & 0x20 <> 0x20 AND " - "((tr.must_learn & 0x3 <> 0 AND crl.madecount IS NOT NULL) " - "OR (tr.must_learn & 0x3 = 0)) " - "GROUP BY tr.id " - "HAVING sum(if(tre.item_id %s AND tre.iscontainer > 0,1,0)) > 0 AND SUM(tre.componentcount) <= %u " - "LIMIT 100 ", CharacterID(), favoriteIDs.c_str(), containers.c_str(), combineObjectSlots); + const std::string query = StringFormat( + SQL ( + SELECT + tr.id, + tr.name, + tr.trivial, + SUM(tre.componentcount), + tr.tradeskill + FROM + tradeskill_recipe AS tr + LEFT JOIN tradeskill_recipe_entries AS tre ON tr.id = tre.recipe_id + WHERE + tr.enabled <> 0 + AND tr.id IN (%s) + AND tr.must_learn & 0x20 <> 0x20 + AND ( + ( + tr.must_learn & 0x3 <> 0 + ) + OR (tr.must_learn & 0x3 = 0) + ) + GROUP BY + tr.id + HAVING + sum( + if( + tre.item_id %s + AND tre.iscontainer > 0, + 1, + 0 + ) + ) > 0 + AND SUM(tre.componentcount) <= %u + LIMIT + 100 + ), + favoriteIDs.c_str(), + containers.c_str(), + combineObjectSlots + ); - TradeskillSearchResults(query, tsf->object_type, tsf->some_id); - return; + SendTradeskillSearchResults(query, tsf->object_type, tsf->some_id); } void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) { if (app->size != sizeof(RecipesSearch_Struct)) { - LogError("Invalid size for RecipesSearch_Struct: Expected: [{}], Got: [{}]", - sizeof(RecipesSearch_Struct), app->size); + LogError( + "Invalid size for RecipesSearch_Struct: Expected: [{}], Got: [{}]", + sizeof(RecipesSearch_Struct), + app->size + ); + return; } - RecipesSearch_Struct* rss = (RecipesSearch_Struct*)app->pBuffer; - rss->query[55] = '\0'; //just to be sure. + auto* p_recipes_search_struct = (RecipesSearch_Struct*)app->pBuffer; + p_recipes_search_struct->query[55] = '\0'; //just to be sure. + LogTradeskills( + "[Handle_OP_RecipesSearch] Requested search recipes for object_type [{}] some_id [{}]", + p_recipes_search_struct->object_type, + p_recipes_search_struct->some_id + ); - LogDebug("Requested search recipes for: [{}] - [{}]\n", rss->object_type, rss->some_id); - - // make where clause segment for container(s) - char containers[30]; - uint32 combineObjectSlots; - if (rss->some_id == 0) { + char containers_where_clause[30]; + uint32 combine_object_slots; + if (p_recipes_search_struct->some_id == 0) { // world combiner so no item number - snprintf(containers, 29, "= %u", rss->object_type); - combineObjectSlots = 10; + snprintf(containers_where_clause, 29, "= %u", p_recipes_search_struct->object_type); + combine_object_slots = 10; } else { // container in inventory - snprintf(containers, 29, "in (%u,%u)", rss->object_type, rss->some_id); - auto item = database.GetItem(rss->some_id); - if (!item) - { - LogError("Invalid container ID: [{}]. GetItem returned null. Defaulting to BagSlots = 10.\n", rss->some_id); - combineObjectSlots = 10; + snprintf(containers_where_clause, 29, "in (%u,%u)", p_recipes_search_struct->object_type, p_recipes_search_struct->some_id); + auto item = database.GetItem(p_recipes_search_struct->some_id); + if (!item) { + LogError( + "Invalid container ID: [{}]. GetItem returned null. Defaulting to BagSlots = 10.", + p_recipes_search_struct->some_id + ); + combine_object_slots = 10; } - else - { - combineObjectSlots = item->BagSlots; + else { + combine_object_slots = item->BagSlots; } } - std::string searchClause; - - //omit the rlike clause if query is empty - if (rss->query[0] != 0) { + std::string search_clause; + if (p_recipes_search_struct->query[0] != 0) { char buf[120]; //larger than 2X rss->query - database.DoEscapeString(buf, rss->query, strlen(rss->query)); - searchClause = StringFormat("name rlike '%s' AND", buf); + database.DoEscapeString(buf, p_recipes_search_struct->query, strlen(p_recipes_search_struct->query)); + search_clause = StringFormat("name rlike '%s' AND", buf); } //arbitrary limit of 200 recipes, makes sense to me. - const std::string query = StringFormat("SELECT tr.id, tr.name, tr.trivial, " - "SUM(tre.componentcount), crl.madecount,tr.tradeskill " - "FROM tradeskill_recipe AS tr " - "LEFT JOIN tradeskill_recipe_entries AS tre ON tr.id = tre.recipe_id " - "LEFT JOIN (SELECT recipe_id, madecount " - "FROM char_recipe_list WHERE char_id = %u) AS crl ON tr.id=crl.recipe_id " - "WHERE %s tr.trivial >= %u AND tr.trivial <= %u AND tr.enabled <> 0 " - "AND tr.must_learn & 0x20 <> 0x20 " - "AND ((tr.must_learn & 0x3 <> 0 " - "AND crl.madecount IS NOT NULL) " - "OR (tr.must_learn & 0x3 = 0)) " - "GROUP BY tr.id " - "HAVING sum(if(tre.item_id %s AND tre.iscontainer > 0,1,0)) > 0 AND SUM(tre.componentcount) <= %u " - "LIMIT 200 ", - CharacterID(), searchClause.c_str(), - rss->mintrivial, rss->maxtrivial, containers, combineObjectSlots); - TradeskillSearchResults(query, rss->object_type, rss->some_id); - return; + std::string query = fmt::format( + SQL( + SELECT + tr.id, + tr.name, + tr.trivial, + SUM(tre.componentcount), + crl.madecount, + tr.tradeskill + FROM + tradeskill_recipe + AS tr + LEFT + JOIN + tradeskill_recipe_entries + AS + tre + ON + tr.id = tre.recipe_id + LEFT JOIN( + SELECT + recipe_id, + madecount + FROM + char_recipe_list + WHERE + char_id = {} + ) AS crl ON tr.id = crl.recipe_id + WHERE + {} tr.trivial >= {} + AND tr.trivial <= {} + AND tr.enabled <> 0 + AND tr.must_learn & 0x20 <> 0x20 + AND ( + ( + tr.must_learn & 0x3 <> 0 + AND crl.madecount IS NOT NULL + ) + OR (tr.must_learn & 0x3 = 0) + ) + GROUP BY + tr.id + HAVING + sum( + if ( + tre.item_id {} + AND tre.iscontainer > 0, + 1, + 0 + ) + ) > 0 + AND SUM(tre.componentcount) <= {} + LIMIT + 200 + ), + CharacterID(), + search_clause, + p_recipes_search_struct->mintrivial, + p_recipes_search_struct->maxtrivial, + containers_where_clause, + combine_object_slots + ); + + SendTradeskillSearchResults(query, p_recipes_search_struct->object_type, p_recipes_search_struct->some_id); } void Client::Handle_OP_ReloadUI(const EQApplicationPacket *app) diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 8c9072eba..aba4a8a5d 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -33,6 +33,8 @@ #include "string_ids.h" #include "titles.h" #include "zonedb.h" +#include "../common/repositories/character_recipe_list_repository.h" +#include "../common/repositories/tradeskill_recipe_repository.h" extern QueryServ* QServ; @@ -467,7 +469,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac //ask the database for the recipe to make sure it exists... DBTradeskillRecipe_Struct spec; - if (!database.GetTradeRecipe(rac->recipe_id, rac->object_type, rac->some_id, user->CharacterID(), &spec)) { + if (!content_db.GetTradeRecipe(rac->recipe_id, rac->object_type, rac->some_id, user->CharacterID(), &spec)) { LogError("Unknown recipe for HandleAutoCombine: [{}]\n", rac->recipe_id); user->QueuePacket(outapp); safe_delete(outapp); @@ -704,56 +706,69 @@ EQEmu::skills::SkillType Object::TypeToSkill(uint32 type) } } -void Client::TradeskillSearchResults(const std::string &query, unsigned long objtype, unsigned long someid) { - - auto results = content_db.QueryDatabase(query); +void Client::SendTradeskillSearchResults( + const std::string &query, + unsigned long objtype, + unsigned long someid +) +{ + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; } - if(results.RowCount() < 1) - return; //search gave no results... not an error - - if(results.ColumnCount() != 6) { - LogError("Error in TradeskillSearchResults query [{}]: Invalid column count in result", query.c_str()); + if (results.RowCount() < 1) { return; } - for(auto row = results.begin(); row != results.end(); ++row) { - if(row == nullptr || row[0] == nullptr || row[1] == nullptr || row[2] == nullptr || row[3] == nullptr || row[5] == nullptr) - continue; + auto character_learned_recipe_list = CharacterRecipeListRepository::GetLearnedRecipeList(CharacterID()); - uint32 recipe = (uint32)atoi(row[0]); - const char *name = row[1]; - uint32 trivial = (uint32) atoi(row[2]); - uint32 comp_count = (uint32) atoi(row[3]); - uint32 tradeskill = (uint16) atoi(row[5]); + for (auto row = results.begin(); row != results.end(); ++row) { + if (row == nullptr || row[0] == nullptr || row[1] == nullptr || row[2] == nullptr || row[3] == nullptr || + row[5] == nullptr) { + continue; + } + + uint32 recipe_id = (uint32) atoi(row[0]); + const char *name = row[1]; + uint32 trivial = (uint32) atoi(row[2]); + uint32 comp_count = (uint32) atoi(row[3]); + uint32 tradeskill = (uint16) atoi(row[5]); // Skip the recipes that exceed the threshold in skill difference // Recipes that have either been made before or were // explicitly learned are excempt from that limit - if (RuleB(Skills, UseLimitTradeskillSearchSkillDiff) - && ((int32)trivial - (int32)GetSkill((EQEmu::skills::SkillType)tradeskill)) > RuleI(Skills, MaxTradeskillSearchSkillDiff) - && row[4] == nullptr) - continue; + if (RuleB(Skills, UseLimitTradeskillSearchSkillDiff) && + ((int32) trivial - (int32) GetSkill((EQEmu::skills::SkillType) tradeskill)) > + RuleI(Skills, MaxTradeskillSearchSkillDiff)) { - auto outapp = new EQApplicationPacket(OP_RecipeReply, sizeof(RecipeReply_Struct)); + LogTradeskills("Checking limit recipe_id [{}] name [{}]", recipe_id, name); + + auto character_learned_recipe = CharacterRecipeListRepository::GetRecipe( + character_learned_recipe_list, + recipe_id + ); + + if (character_learned_recipe.made_count == 0) { + continue; + } + } + + auto outapp = new EQApplicationPacket(OP_RecipeReply, sizeof(RecipeReply_Struct)); RecipeReply_Struct *reply = (RecipeReply_Struct *) outapp->pBuffer; - reply->object_type = objtype; - reply->some_id = someid; + reply->object_type = objtype; + reply->some_id = someid; reply->component_count = comp_count; - reply->recipe_id = recipe; - reply->trivial = trivial; + reply->recipe_id = recipe_id; + reply->trivial = trivial; strn0cpy(reply->recipe_name, name, sizeof(reply->recipe_name)); FastQueuePacket(&outapp); } - } void Client::SendTradeskillDetails(uint32 recipe_id) { - //pull the list of components std::string query = StringFormat("SELECT tre.item_id,tre.componentcount,i.icon,i.Name " "FROM tradeskill_recipe_entries AS tre " "LEFT JOIN items AS i ON tre.item_id = i.id " @@ -1124,9 +1139,9 @@ void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float NotifyNewTitlesAvailable(); } - LogTradeskills("skillup_modifier: [{}] , success_modifier: [{}] , stat modifier: [{}]", skillup_modifier , success_modifier , stat_modifier); - LogTradeskills("Stage1 chance was: [{}] percent", chance_stage1); - LogTradeskills("Stage2 chance was: [{}] percent. 0 percent means stage1 failed", chance_stage2); + LogTradeskills("[CheckIncreaseTradeskill] skillup_modifier: [{}] , success_modifier: [{}] , stat modifier: [{}]", skillup_modifier , success_modifier , stat_modifier); + LogTradeskills("[CheckIncreaseTradeskill] Stage1 chance was: [{}] percent", chance_stage1); + LogTradeskills("[CheckIncreaseTradeskill] Stage2 chance was: [{}] percent. 0 percent means stage1 failed", chance_stage2); } bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id, @@ -1305,29 +1320,51 @@ bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_ return GetTradeRecipe(recipe_id, c_type, some_id, char_id, spec); } -bool ZoneDatabase::GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id, - uint32 char_id, DBTradeskillRecipe_Struct *spec) +bool ZoneDatabase::GetTradeRecipe( + uint32 recipe_id, + uint8 c_type, + uint32 some_id, + uint32 char_id, + DBTradeskillRecipe_Struct *spec +) { - // make where clause segment for container(s) - std::string containers; - if (some_id == 0) - containers = StringFormat("= %u", c_type); // world combiner so no item number - else - containers = StringFormat("IN (%u,%u)", c_type, some_id); // container in inventory + std::string container_where_filter; + if (some_id == 0) { + // world combiner so no item number + container_where_filter = StringFormat("= %u", c_type); + } + else { + // container in inventory + container_where_filter = StringFormat("IN (%u,%u)", c_type, some_id); + } - std::string query = StringFormat("SELECT tr.id, tr.tradeskill, tr.skillneeded, " - "tr.trivial, tr.nofail, tr.replace_container, " - "tr.name, tr.must_learn, tr.quest, crl.madecount " - "FROM tradeskill_recipe AS tr " - "INNER JOIN tradeskill_recipe_entries AS tre " - "ON tr.id = tre.recipe_id " - "LEFT JOIN (SELECT recipe_id, madecount " - "FROM char_recipe_list WHERE char_id = %u) AS crl " - "ON tr.id = crl.recipe_id " - "WHERE tr.id = %lu AND tre.item_id %s AND tr.enabled " - "GROUP BY tr.id", - char_id, (unsigned long)recipe_id, containers.c_str()); + std::string query = StringFormat( + SQL ( + SELECT + tradeskill_recipe.id, + tradeskill_recipe.tradeskill, + tradeskill_recipe.skillneeded, + tradeskill_recipe.trivial, + tradeskill_recipe.nofail, + tradeskill_recipe.replace_container, + tradeskill_recipe.name, + tradeskill_recipe.must_learn, + tradeskill_recipe.quest + FROM + tradeskill_recipe + INNER JOIN tradeskill_recipe_entries ON tradeskill_recipe.id = tradeskill_recipe_entries.recipe_id + WHERE + tradeskill_recipe.id = %lu + AND tradeskill_recipe_entries.item_id %s + AND tradeskill_recipe.enabled + GROUP BY + tradeskill_recipe.id + ) + , + (unsigned long) recipe_id, + container_where_filter.c_str() + ); auto results = QueryDatabase(query); if (!results.Success()) { LogError("Error in GetTradeRecipe, query: [{}]", query.c_str()); @@ -1335,27 +1372,36 @@ bool ZoneDatabase::GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id return false; } - if(results.RowCount() != 1) - return false;//just not found i guess.. + if (results.RowCount() != 1) { + return false; + } auto row = results.begin(); - spec->tradeskill = (EQEmu::skills::SkillType)atoi(row[1]); - spec->skill_needed = (int16)atoi(row[2]); - spec->trivial = (uint16)atoi(row[3]); - spec->nofail = atoi(row[4]) ? true : false; - spec->replace_container = atoi(row[5]) ? true : false; - spec->name = row[6]; - spec->must_learn = (uint8)atoi(row[7]); - spec->quest = atoi(row[8]) ? true : false; - if (row[9] == nullptr) { - spec->has_learnt = false; - spec->madecount = 0; - } else { + spec->tradeskill = (EQEmu::skills::SkillType) atoi(row[1]); + spec->skill_needed = (int16) atoi(row[2]); + spec->trivial = (uint16) atoi(row[3]); + spec->nofail = atoi(row[4]) ? true : false; + spec->replace_container = atoi(row[5]) ? true : false; + spec->name = row[6]; + spec->must_learn = (uint8) atoi(row[7]); + spec->quest = atoi(row[8]) ? true : false; + spec->has_learnt = false; + spec->madecount = 0; + spec->recipe_id = recipe_id; + + auto character_learned_recipe_list = CharacterRecipeListRepository::GetLearnedRecipeList(char_id); + auto character_learned_recipe = CharacterRecipeListRepository::GetRecipe( + character_learned_recipe_list, + recipe_id + ); + + if (character_learned_recipe.made_count > 0) { + LogTradeskills("[GetTradeRecipe] made_count [{}]", character_learned_recipe.made_count); + spec->has_learnt = true; - spec->madecount = (uint32)atoul(row[9]); + spec->madecount = (uint32)character_learned_recipe.made_count; } - spec->recipe_id = recipe_id; //Pull the on-success items... query = StringFormat("SELECT item_id,successcount FROM tradeskill_recipe_entries " @@ -1379,33 +1425,41 @@ bool ZoneDatabase::GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id spec->onfail.clear(); //Pull the on-fail items... - query = StringFormat("SELECT item_id, failcount FROM tradeskill_recipe_entries " - "WHERE failcount > 0 AND recipe_id = %u", recipe_id); + query = StringFormat( + "SELECT item_id, failcount FROM tradeskill_recipe_entries " + "WHERE failcount > 0 AND recipe_id = %u", recipe_id + ); results = QueryDatabase(query); - if (results.Success()) - for(auto row = results.begin(); row != results.end(); ++row) { - uint32 item = (uint32)atoi(row[0]); - uint8 num = (uint8) atoi(row[1]); - spec->onfail.push_back(std::pair(item, num)); + if (results.Success()) { + for (auto row = results.begin(); row != results.end(); ++row) { + uint32 item = (uint32) atoi(row[0]); + uint8 num = (uint8) atoi(row[1]); + spec->onfail.push_back(std::pair(item, num)); } + } - spec->salvage.clear(); + spec->salvage.clear(); - // Don't bother with the query if TS is nofail - if (spec->nofail) - return true; + // Don't bother with the query if TS is nofail + if (spec->nofail) { + return true; + } // Pull the salvage list - query = StringFormat("SELECT item_id, salvagecount " - "FROM tradeskill_recipe_entries " - "WHERE salvagecount > 0 AND recipe_id = %u", recipe_id); - results = QueryDatabase(query); - if (results.Success()) - for(auto row = results.begin(); row != results.begin(); ++row) { - uint32 item = (uint32)atoi(row[0]); - uint8 num = (uint8)atoi(row[1]); - spec->salvage.push_back(std::pair(item, num)); + query = StringFormat( + "SELECT item_id, salvagecount " + "FROM tradeskill_recipe_entries " + "WHERE salvagecount > 0 AND recipe_id = %u", recipe_id + ); + + results = QueryDatabase(query); + if (results.Success()) { + for (auto row = results.begin(); row != results.begin(); ++row) { + uint32 item = (uint32) atoi(row[0]); + uint8 num = (uint8) atoi(row[1]); + spec->salvage.push_back(std::pair(item, num)); } + } return true; } @@ -1419,43 +1473,57 @@ void ZoneDatabase::UpdateRecipeMadecount(uint32 recipe_id, uint32 char_id, uint3 QueryDatabase(query); } -void Client::LearnRecipe(uint32 recipeID) +void Client::LearnRecipe(uint32 recipe_id) { - std::string query = StringFormat("SELECT tr.name, crl.madecount " - "FROM tradeskill_recipe AS tr " - "LEFT JOIN (SELECT recipe_id, madecount " - "FROM char_recipe_list WHERE char_id = %u) AS crl " - "ON tr.id = crl.recipe_id " - "WHERE tr.id = %u ;", CharacterID(), recipeID); - - // TODO: BOUNDARY REWRITE + std::string query = fmt::format( + SQL( + select + char_id, + recipe_id, + madecount + from + char_recipe_list + where + char_id = {} + and recipe_id = {} + LIMIT 1 + ), + CharacterID(), + recipe_id + ); auto results = database.QueryDatabase(query); if (!results.Success()) { return; } - if (results.RowCount() != 1) { - LogInfo("Client::LearnRecipe - RecipeID: [{}] had [{}] occurences", recipeID, results.RowCount()); + auto tradeskill_recipe = TradeskillRecipeRepository::GetRecipe(recipe_id); + if (tradeskill_recipe.id == 0) { + LogError("Invalid recipe [{}]", recipe_id); return; } + LogTradeskills( + "[LearnRecipe] recipe_id [{}] name [{}] learned [{}]", + recipe_id, + tradeskill_recipe.name, + results.RowCount() + ); + auto row = results.begin(); + if (results.RowCount() > 0) { + return; + } - if (row[0] == nullptr) - return; + MessageString(Chat::LightBlue, TRADESKILL_LEARN_RECIPE, tradeskill_recipe.name.c_str()); - // Only give Learn message if character doesn't know the recipe - if (row[1] != nullptr) - return; - - MessageString(Chat::LightBlue, TRADESKILL_LEARN_RECIPE, row[0]); - // Actually learn the recipe now - query = StringFormat("INSERT INTO char_recipe_list " - "SET recipe_id = %u, char_id = %u, madecount = 0 " - "ON DUPLICATE KEY UPDATE madecount = madecount;", - recipeID, CharacterID()); - results = database.QueryDatabase(query); + database.QueryDatabase( + fmt::format( + "REPLACE INTO char_recipe_list (recipe_id, char_id, madecount) VALUES ({}, {}, 0)", + recipe_id, + CharacterID() + ) + ); } bool Client::CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill) { diff --git a/zone/trading.cpp b/zone/trading.cpp index 1618e7770..27e4cc112 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -1755,286 +1755,315 @@ void Client::SendBazaarWelcome() "or use /buyer to set up your own Buy Lines.", atoi(row[0])); } -void Client::SendBazaarResults(uint32 TraderID, uint32 Class_, uint32 Race, uint32 ItemStat, uint32 Slot, uint32 Type, - char Name[64], uint32 MinPrice, uint32 MaxPrice) { +void Client::SendBazaarResults( + uint32 trader_id, + uint32 in_class, + uint32 in_race, + uint32 item_stat, + uint32 item_slot, + uint32 item_type, + char item_name[64], + uint32 min_price, + uint32 max_price +) +{ + std::string search_values = " COUNT(item_id), trader.*, items.name "; + std::string search_criteria = " WHERE trader.item_id = items.id "; - std::string searchValues = " COUNT(item_id), trader.*, items.name "; - std::string searchCriteria = " WHERE trader.item_id = items.id "; + if (trader_id > 0) { + Client *trader = entity_list.GetClientByID(trader_id); - if(TraderID > 0) { - Client* trader = entity_list.GetClientByID(TraderID); - - if(trader) - searchCriteria.append(StringFormat(" AND trader.char_id = %i", trader->CharacterID())); + if (trader) { + search_criteria.append(StringFormat(" AND trader.char_id = %i", trader->CharacterID())); + } } - if(MinPrice != 0) - searchCriteria.append(StringFormat(" AND trader.item_cost >= %i", MinPrice)); + if (min_price != 0) { + search_criteria.append(StringFormat(" AND trader.item_cost >= %i", min_price)); + } - if(MaxPrice != 0) - searchCriteria.append(StringFormat(" AND trader.item_cost <= %i", MaxPrice)); + if (max_price != 0) { + search_criteria.append(StringFormat(" AND trader.item_cost <= %i", max_price)); + } - if(strlen(Name) > 0) { - char *safeName = RemoveApostrophes(Name); - searchCriteria.append(StringFormat(" AND items.name LIKE '%%%s%%'", safeName)); + if (strlen(item_name) > 0) { + char *safeName = RemoveApostrophes(item_name); + search_criteria.append(StringFormat(" AND items.name LIKE '%%%s%%'", safeName)); safe_delete_array(safeName); } - if(Class_ != 0xFFFFFFFF) - searchCriteria.append(StringFormat(" AND MID(REVERSE(BIN(items.classes)), %i, 1) = 1", Class_)); + if (in_class != 0xFFFFFFFF) { + search_criteria.append(StringFormat(" AND MID(REVERSE(BIN(items.classes)), %i, 1) = 1", in_class)); + } - if(Race != 0xFFFFFFFF) - searchCriteria.append(StringFormat(" AND MID(REVERSE(BIN(items.races)), %i, 1) = 1", Race)); + if (in_race != 0xFFFFFFFF) { + search_criteria.append(StringFormat(" AND MID(REVERSE(BIN(items.races)), %i, 1) = 1", in_race)); + } - if(Slot != 0xFFFFFFFF) - searchCriteria.append(StringFormat(" AND MID(REVERSE(BIN(items.slots)), %i, 1) = 1", Slot + 1)); + if (item_slot != 0xFFFFFFFF) { + search_criteria.append(StringFormat(" AND MID(REVERSE(BIN(items.slots)), %i, 1) = 1", item_slot + 1)); + } - switch(Type){ - case 0xFFFFFFFF: - break; - case 0: - // 1H Slashing - searchCriteria.append(" AND items.itemtype = 0 AND damage > 0"); - break; - case 31: - searchCriteria.append(" AND items.itemclass = 2"); - break; - case 46: - searchCriteria.append(" AND items.spellid > 0 AND items.spellid < 65000"); - break; - case 47: - searchCriteria.append(" AND items.spellid = 998"); - break; - case 48: - searchCriteria.append(" AND items.spellid >= 1298 AND items.spellid <= 1307"); - break; - case 49: - searchCriteria.append(" AND items.focuseffect > 0"); - break; - - default: - searchCriteria.append(StringFormat(" AND items.itemtype = %i", Type)); - } - - switch(ItemStat) { - - case STAT_AC: - searchCriteria.append(" AND items.ac > 0"); - searchValues.append(", items.ac"); + switch (item_type) { + case 0xFFFFFFFF: break; - - case STAT_AGI: - searchCriteria.append(" AND items.aagi > 0"); - searchValues.append(", items.aagi"); + case 0: + // 1H Slashing + search_criteria.append(" AND items.itemtype = 0 AND damage > 0"); break; - - case STAT_CHA: - searchCriteria.append(" AND items.acha > 0"); - searchValues.append(", items.acha"); + case 31: + search_criteria.append(" AND items.itemclass = 2"); break; - - case STAT_DEX: - searchCriteria.append(" AND items.adex > 0"); - searchValues.append(", items.adex"); + case 46: + search_criteria.append(" AND items.spellid > 0 AND items.spellid < 65000"); break; - - case STAT_INT: - searchCriteria.append(" AND items.aint > 0"); - searchValues.append(", items.aint"); + case 47: + search_criteria.append(" AND items.spellid = 998"); break; - - case STAT_STA: - searchCriteria.append(" AND items.asta > 0"); - searchValues.append(", items.asta"); + case 48: + search_criteria.append(" AND items.spellid >= 1298 AND items.spellid <= 1307"); break; - - case STAT_STR: - searchCriteria.append(" AND items.astr > 0"); - searchValues.append(", items.astr"); - break; - - case STAT_WIS: - searchCriteria.append(" AND items.awis > 0"); - searchValues.append(", items.awis"); - break; - - case STAT_COLD: - searchCriteria.append(" AND items.cr > 0"); - searchValues.append(", items.cr"); - break; - - case STAT_DISEASE: - searchCriteria.append(" AND items.dr > 0"); - searchValues.append(", items.dr"); - break; - - case STAT_FIRE: - searchCriteria.append(" AND items.fr > 0"); - searchValues.append(", items.fr"); - break; - - case STAT_MAGIC: - searchCriteria.append(" AND items.mr > 0"); - searchValues.append(", items.mr"); - break; - - case STAT_POISON: - searchCriteria.append(" AND items.pr > 0"); - searchValues.append(", items.pr"); - break; - - case STAT_HP: - searchCriteria.append(" AND items.hp > 0"); - searchValues.append(", items.hp"); - break; - - case STAT_MANA: - searchCriteria.append(" AND items.mana > 0"); - searchValues.append(", items.mana"); - break; - - case STAT_ENDURANCE: - searchCriteria.append(" AND items.endur > 0"); - searchValues.append(", items.endur"); - break; - - case STAT_ATTACK: - searchCriteria.append(" AND items.attack > 0"); - searchValues.append(", items.attack"); - break; - - case STAT_HP_REGEN: - searchCriteria.append(" AND items.regen > 0"); - searchValues.append(", items.regen"); - break; - - case STAT_MANA_REGEN: - searchCriteria.append(" AND items.manaregen > 0"); - searchValues.append(", items.manaregen"); - break; - - case STAT_HASTE: - searchCriteria.append(" AND items.haste > 0"); - searchValues.append(", items.haste"); - break; - - case STAT_DAMAGE_SHIELD: - searchCriteria.append(" AND items.damageshield > 0"); - searchValues.append(", items.damageshield"); + case 49: + search_criteria.append(" AND items.focuseffect > 0"); break; default: - searchValues.append(", 0"); + search_criteria.append(StringFormat(" AND items.itemtype = %i", item_type)); + } + + switch (item_stat) { + + case STAT_AC: + search_criteria.append(" AND items.ac > 0"); + search_values.append(", items.ac"); + break; + + case STAT_AGI: + search_criteria.append(" AND items.aagi > 0"); + search_values.append(", items.aagi"); + break; + + case STAT_CHA: + search_criteria.append(" AND items.acha > 0"); + search_values.append(", items.acha"); + break; + + case STAT_DEX: + search_criteria.append(" AND items.adex > 0"); + search_values.append(", items.adex"); + break; + + case STAT_INT: + search_criteria.append(" AND items.aint > 0"); + search_values.append(", items.aint"); + break; + + case STAT_STA: + search_criteria.append(" AND items.asta > 0"); + search_values.append(", items.asta"); + break; + + case STAT_STR: + search_criteria.append(" AND items.astr > 0"); + search_values.append(", items.astr"); + break; + + case STAT_WIS: + search_criteria.append(" AND items.awis > 0"); + search_values.append(", items.awis"); + break; + + case STAT_COLD: + search_criteria.append(" AND items.cr > 0"); + search_values.append(", items.cr"); + break; + + case STAT_DISEASE: + search_criteria.append(" AND items.dr > 0"); + search_values.append(", items.dr"); + break; + + case STAT_FIRE: + search_criteria.append(" AND items.fr > 0"); + search_values.append(", items.fr"); + break; + + case STAT_MAGIC: + search_criteria.append(" AND items.mr > 0"); + search_values.append(", items.mr"); + break; + + case STAT_POISON: + search_criteria.append(" AND items.pr > 0"); + search_values.append(", items.pr"); + break; + + case STAT_HP: + search_criteria.append(" AND items.hp > 0"); + search_values.append(", items.hp"); + break; + + case STAT_MANA: + search_criteria.append(" AND items.mana > 0"); + search_values.append(", items.mana"); + break; + + case STAT_ENDURANCE: + search_criteria.append(" AND items.endur > 0"); + search_values.append(", items.endur"); + break; + + case STAT_ATTACK: + search_criteria.append(" AND items.attack > 0"); + search_values.append(", items.attack"); + break; + + case STAT_HP_REGEN: + search_criteria.append(" AND items.regen > 0"); + search_values.append(", items.regen"); + break; + + case STAT_MANA_REGEN: + search_criteria.append(" AND items.manaregen > 0"); + search_values.append(", items.manaregen"); + break; + + case STAT_HASTE: + search_criteria.append(" AND items.haste > 0"); + search_values.append(", items.haste"); + break; + + case STAT_DAMAGE_SHIELD: + search_criteria.append(" AND items.damageshield > 0"); + search_values.append(", items.damageshield"); + break; + + default: + search_values.append(", 0"); break; } - std::string query = StringFormat("SELECT %s, SUM(charges), items.stackable " - "FROM trader, items %s GROUP BY items.id, charges, char_id LIMIT %i", - searchValues.c_str(), searchCriteria.c_str(), RuleI(Bazaar, MaxSearchResults)); - auto results = database.QueryDatabase(query); - if (!results.Success()) { + std::string query = StringFormat( + "SELECT %s, SUM(charges), items.stackable " + "FROM trader, items %s GROUP BY items.id, charges, char_id LIMIT %i", + search_values.c_str(), + search_criteria.c_str(), + RuleI(Bazaar, MaxSearchResults) + ); + + auto results = database.QueryDatabase(query); + + if (!results.Success()) { return; - } - - LogTrading("SRCH: [{}]", query.c_str()); - - int Size = 0; - uint32 ID = 0; - - if (results.RowCount() == static_cast(RuleI(Bazaar, MaxSearchResults))) - Message(Chat::Yellow, "Your search reached the limit of %i results. Please narrow your search down by selecting more options.", - RuleI(Bazaar, MaxSearchResults)); - - if(results.RowCount() == 0) { - auto outapp2 = new EQApplicationPacket(OP_BazaarSearch, sizeof(BazaarReturnDone_Struct)); - BazaarReturnDone_Struct *brds = (BazaarReturnDone_Struct *)outapp2->pBuffer; - brds->TraderID = ID; - brds->Type = BazaarSearchDone; - brds->Unknown008 = 0xFFFFFFFF; - brds->Unknown012 = 0xFFFFFFFF; - brds->Unknown016 = 0xFFFFFFFF; - this->QueuePacket(outapp2); - safe_delete(outapp2); - return; } - Size = results.RowCount() * sizeof(BazaarSearchResults_Struct); - auto buffer = new uchar[Size]; - uchar *bufptr = buffer; - memset(buffer, 0, Size); + LogTrading("SRCH: [{}]", query.c_str()); - int Action = BazaarSearchResults; - uint32 Cost = 0; - int32 SerialNumber = 0; - char temp_buffer[64] = {0}; - int Count = 0; - uint32 StatValue = 0; + int Size = 0; + uint32 ID = 0; - for (auto row = results.begin(); row != results.end(); ++row) { - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Action); - Count = atoi(row[0]); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Count); - SerialNumber = atoi(row[3]); - VARSTRUCT_ENCODE_TYPE(int32, bufptr, SerialNumber); - Client *Trader2 = entity_list.GetClientByCharID(atoi(row[1])); - if (Trader2) { - ID = Trader2->GetID(); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, ID); - } else { - LogTrading("Unable to find trader: [{}]\n", atoi(row[1])); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, 0); - } - Cost = atoi(row[5]); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Cost); - StatValue = atoi(row[8]); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, StatValue); - bool Stackable = atoi(row[10]); - if (Stackable) { - int Charges = atoi(row[9]); - sprintf(temp_buffer, "%s(%i)", row[7], Charges); - } else - sprintf(temp_buffer, "%s(%i)", row[7], Count); + if (results.RowCount() == static_cast(RuleI(Bazaar, MaxSearchResults))) { + Message( + Chat::Yellow, + "Your search reached the limit of %i results. Please narrow your search down by selecting more options.", + RuleI(Bazaar, MaxSearchResults)); + } - memcpy(bufptr, &temp_buffer, strlen(temp_buffer)); + if (results.RowCount() == 0) { + auto outapp2 = new EQApplicationPacket(OP_BazaarSearch, sizeof(BazaarReturnDone_Struct)); + BazaarReturnDone_Struct *brds = (BazaarReturnDone_Struct *) outapp2->pBuffer; + brds->TraderID = ID; + brds->Type = BazaarSearchDone; + brds->Unknown008 = 0xFFFFFFFF; + brds->Unknown012 = 0xFFFFFFFF; + brds->Unknown016 = 0xFFFFFFFF; + this->QueuePacket(outapp2); + safe_delete(outapp2); + return; + } - bufptr += 64; + Size = results.RowCount() * sizeof(BazaarSearchResults_Struct); + auto buffer = new uchar[Size]; + uchar *bufptr = buffer; + memset(buffer, 0, Size); - // Extra fields for SoD+ - // - if (Trader2) - sprintf(temp_buffer, "%s", Trader2->GetName()); - else - sprintf(temp_buffer, "Unknown"); + int Action = BazaarSearchResults; + uint32 Cost = 0; + int32 SerialNumber = 0; + char temp_buffer[64] = {0}; + int Count = 0; + uint32 StatValue = 0; - memcpy(bufptr, &temp_buffer, strlen(temp_buffer)); + for (auto row = results.begin(); row != results.end(); ++row) { + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Action); + Count = atoi(row[0]); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Count); + SerialNumber = atoi(row[3]); + VARSTRUCT_ENCODE_TYPE(int32, bufptr, SerialNumber); + Client *Trader2 = entity_list.GetClientByCharID(atoi(row[1])); + if (Trader2) { + ID = Trader2->GetID(); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, ID); + } + else { + LogTrading("Unable to find trader: [{}]\n", atoi(row[1])); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, 0); + } + Cost = atoi(row[5]); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, Cost); + StatValue = atoi(row[8]); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, StatValue); + bool Stackable = atoi(row[10]); + if (Stackable) { + int Charges = atoi(row[9]); + sprintf(temp_buffer, "%s(%i)", row[7], Charges); + } + else { + sprintf(temp_buffer, "%s(%i)", row[7], Count); + } - bufptr += 64; + memcpy(bufptr, &temp_buffer, strlen(temp_buffer)); - VARSTRUCT_ENCODE_TYPE(uint32, bufptr, atoi(row[1])); // ItemID - } + bufptr += 64; - auto outapp = new EQApplicationPacket(OP_BazaarSearch, Size); + // Extra fields for SoD+ + // + if (Trader2) { + sprintf(temp_buffer, "%s", Trader2->GetName()); + } + else { + sprintf(temp_buffer, "Unknown"); + } - memcpy(outapp->pBuffer, buffer, Size); + memcpy(bufptr, &temp_buffer, strlen(temp_buffer)); - this->QueuePacket(outapp); + bufptr += 64; - safe_delete(outapp); - safe_delete_array(buffer); + VARSTRUCT_ENCODE_TYPE(uint32, bufptr, atoi(row[1])); // ItemID + } - auto outapp2 = new EQApplicationPacket(OP_BazaarSearch, sizeof(BazaarReturnDone_Struct)); - BazaarReturnDone_Struct *brds = (BazaarReturnDone_Struct *)outapp2->pBuffer; + auto outapp = new EQApplicationPacket(OP_BazaarSearch, Size); - brds->TraderID = ID; - brds->Type = BazaarSearchDone; + memcpy(outapp->pBuffer, buffer, Size); - brds->Unknown008 = 0xFFFFFFFF; - brds->Unknown012 = 0xFFFFFFFF; - brds->Unknown016 = 0xFFFFFFFF; + this->QueuePacket(outapp); - this->QueuePacket(outapp2); + safe_delete(outapp); + safe_delete_array(buffer); - safe_delete(outapp2); + auto outapp2 = new EQApplicationPacket(OP_BazaarSearch, sizeof(BazaarReturnDone_Struct)); + BazaarReturnDone_Struct *brds = (BazaarReturnDone_Struct *) outapp2->pBuffer; + + brds->TraderID = ID; + brds->Type = BazaarSearchDone; + + brds->Unknown008 = 0xFFFFFFFF; + brds->Unknown012 = 0xFFFFFFFF; + brds->Unknown016 = 0xFFFFFFFF; + + this->QueuePacket(outapp2); + + safe_delete(outapp2); } static void UpdateTraderCustomerItemsAdded(uint32 CustomerID, TraderCharges_Struct* gis, uint32 ItemID) { From 43716332aae96c1b4b4fc89a2b04b6e2a8f5ae5a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 05:49:43 -0500 Subject: [PATCH 039/272] Bulk load grids at repop and zone init instead of 2 costly individual selects per NPC, create repositories to decouple database logic from business logic --- common/CMakeLists.txt | 2 + common/repositories/grid_entries_repository.h | 126 ++++++++++++++++++ common/repositories/grid_repository.h | 121 +++++++++++++++++ zone/npc.h | 2 +- zone/waypoints.cpp | 71 +++++----- zone/zone.cpp | 9 ++ zone/zone.h | 7 + 7 files changed, 298 insertions(+), 40 deletions(-) create mode 100644 common/repositories/grid_entries_repository.h create mode 100644 common/repositories/grid_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index ce62fbb00..df2047ef9 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -197,6 +197,8 @@ SET(common_headers races.h random.h repositories/character_recipe_list_repository.h + repositories/grid_repository.h + repositories/grid_entries_repository.h repositories/tradeskill_recipe_repository.h rdtsc.h rulesys.h diff --git a/common/repositories/grid_entries_repository.h b/common/repositories/grid_entries_repository.h new file mode 100644 index 000000000..0c2e34d85 --- /dev/null +++ b/common/repositories/grid_entries_repository.h @@ -0,0 +1,126 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GRID_ENTRIES_REPOSITORY_H +#define EQEMU_GRID_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GridEntriesRepository { +public: + struct GridEntry { + int gridid; + int zoneid; + int number; + float x; + float y; + float z; + float heading; + int pause; + int8 centerpoint; + }; + + static std::vector Columns() + { + return { + "gridid", + "zoneid", + "number", + "x", + "y", + "z", + "heading", + "pause", + "centerpoint", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string TableName() + { + return std::string("grid_entries"); + } + + static std::string BaseSelect() + { + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) + ); + } + + static GridEntry Default() + { + GridEntry entry{}; + + entry.gridid = 0; + entry.zoneid = 0; + entry.number = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.pause = 0; + entry.centerpoint = 0; + + return entry; + } + + static std::vector GetZoneGridEntries(int zone_id) + { + std::vector grid_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE zoneid = {} ORDER BY gridid, number", + BaseSelect(), + zone_id + ) + ); + + for (auto row = results.begin(); row != results.end(); ++row) { + GridEntry entry{}; + + entry.gridid = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.number = atoi(row[2]); + entry.x = atof(row[3]); + entry.y = atof(row[4]); + entry.z = atof(row[5]); + entry.heading = atof(row[6]); + entry.pause = atoi(row[7]); + entry.centerpoint = atoi(row[8]); + + grid_entries.push_back(entry); + } + + return grid_entries; + } +}; + +#endif diff --git a/common/repositories/grid_repository.h b/common/repositories/grid_repository.h new file mode 100644 index 000000000..523c5212d --- /dev/null +++ b/common/repositories/grid_repository.h @@ -0,0 +1,121 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GRID_REPOSITORY_H +#define EQEMU_GRID_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GridRepository { +public: + struct Grid { + int id; + int zoneid; + int type; + int type2; + }; + + static std::vector Columns() + { + return { + "id", + "zoneid", + "type", + "type2", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string TableName() + { + return std::string("grid"); + } + + static std::string BaseSelect() + { + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) + ); + } + + static Grid Default() + { + Grid entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.type = 0; + entry.type2 = 0; + + return entry; + } + + static std::vector GetZoneGrids(int zone_id) + { + std::vector grids; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE zoneid = {}", + BaseSelect(), + zone_id + ) + ); + + for (auto row = results.begin(); row != results.end(); ++row) { + Grid entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.type2 = atoi(row[3]); + + grids.push_back(entry); + } + + return grids; + } + + static Grid GetGrid( + const std::vector& grids, + int grid_id + ) + { + for (auto &row : grids) { + if (row.id == grid_id) { + return row; + } + } + + return Default(); + } + +}; + +#endif diff --git a/zone/npc.h b/zone/npc.h index 020151028..7c108b4b7 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -303,7 +303,7 @@ public: int GetMaxWp() const { return max_wp; } void DisplayWaypointInfo(Client *to); void CalculateNewWaypoint(); - void AssignWaypoints(int32 grid, int start_wp = 0); + void AssignWaypoints(int32 grid_id, int start_wp = 0); void SetWaypointPause(); void UpdateWaypoint(int wp_index); diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 7c44472c1..47c293f12 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -561,62 +561,54 @@ void Mob::StopNavigation() { mMovementManager->StopNavigation(this); } -void NPC::AssignWaypoints(int32 grid, int start_wp) +void NPC::AssignWaypoints(int32 grid_id, int start_wp) { - if (grid == 0) + if (grid_id == 0) return; // grid ID 0 not supported - if (grid < 0) { + if (grid_id < 0) { // Allow setting negative grid values for pausing pathing - this->CastToNPC()->SetGrid(grid); + this->CastToNPC()->SetGrid(grid_id); return; } Waypoints.clear(); roamer = false; - // Retrieve the wander and pause types for this grid - std::string query = StringFormat("SELECT `type`, `type2` FROM `grid` WHERE `id` = %i AND `zoneid` = %i", grid, - zone->GetZoneID()); - auto results = content_db.QueryDatabase(query); - if (!results.Success()) { + auto grid_entry = GridRepository::GetGrid(zone->grids, grid_id); + if (grid_entry.id == 0) { return; } - if (results.RowCount() == 0) - return; + wandertype = grid_entry.type; + pausetype = grid_entry.type2; - auto row = results.begin(); - - wandertype = atoi(row[0]); - pausetype = atoi(row[1]); - - SetGrid(grid); // Assign grid number - - // Retrieve all waypoints for this grid - query = StringFormat("SELECT `x`,`y`,`z`,`pause`,`heading`, `centerpoint` " - "FROM grid_entries WHERE `gridid` = %i AND `zoneid` = %i " - "ORDER BY `number`", grid, zone->GetZoneID()); - results = content_db.QueryDatabase(query); - if (!results.Success()) { - return; - } + SetGrid(grid_id); // Assign grid number roamer = true; max_wp = 0; // Initialize it; will increment it for each waypoint successfully added to the list - for (auto row = results.begin(); row != results.end(); ++row, ++max_wp) - { - wplist newwp; - newwp.index = max_wp; - newwp.x = atof(row[0]); - newwp.y = atof(row[1]); - newwp.z = atof(row[2]); + for (auto &entry : zone->grid_entries) { + if (entry.gridid == grid_id) { + wplist new_waypoint{}; + new_waypoint.index = max_wp; + new_waypoint.x = entry.x; + new_waypoint.y = entry.y; + new_waypoint.z = entry.z; + new_waypoint.pause = entry.pause; + new_waypoint.heading = entry.heading; + new_waypoint.centerpoint = entry.centerpoint; - newwp.pause = atoi(row[3]); - newwp.heading = atof(row[4]); - newwp.centerpoint = atobool(row[5]); - Waypoints.push_back(newwp); + LogPathing( + "Loading Grid [{}] number [{}] name [{}]", + grid_id, + entry.number, + GetCleanName() + ); + + Waypoints.push_back(new_waypoint); + max_wp++; + } } cur_wp = start_wp; @@ -628,8 +620,9 @@ void NPC::AssignWaypoints(int32 grid, int start_wp) patrol = cur_wp; } - if (wandertype == GridRandom10 || wandertype == GridRandom || wandertype == GridRand5LoS) + if (wandertype == GridRandom10 || wandertype == GridRandom || wandertype == GridRand5LoS) { CalculateNewWaypoint(); + } } @@ -737,7 +730,7 @@ void Mob::FixZ(int32 z_find_offset /*= 5*/, bool fix_client_z /*= false*/) { if (IsClient() && !fix_client_z) { return; } - + if (flymode == GravityBehavior::Flying) { return; } diff --git a/zone/zone.cpp b/zone/zone.cpp index 2cdfc99d6..1bbdd411e 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1023,6 +1023,7 @@ bool Zone::Init(bool iStaticZone) { LogInfo("Init Finished: ZoneID = [{}], Time Offset = [{}]", zoneid, zone->zone_time.getEQTimeZone()); + LoadGrids(); LoadTickItems(); //MODDING HOOK FOR ZONE INIT @@ -1610,6 +1611,8 @@ void Zone::Repop(uint32 delay) if (!content_db.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion(), delay)) LogDebug("Error in Zone::Repop: database.PopulateZoneSpawnList failed"); + LoadGrids(); + initgrids_timer.Start(); entity_list.UpdateAllTraps(true, true); @@ -2481,3 +2484,9 @@ void Zone::SetQuestHotReloadQueued(bool in_quest_hot_reload_queued) { quest_hot_reload_queued = in_quest_hot_reload_queued; } + +void Zone::LoadGrids() +{ + grids = GridRepository::GetZoneGrids(GetZoneID()); + grid_entries = GridEntriesRepository::GetZoneGridEntries(GetZoneID()); +} diff --git a/zone/zone.h b/zone/zone.h index 1243e18c2..9dfe2c36e 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -24,6 +24,9 @@ #include "../common/types.h" #include "../common/random.h" #include "../common/string_util.h" +#include "zonedb.h" +#include "../common/repositories/grid_repository.h" +#include "../common/repositories/grid_entries_repository.h" #include "qglobals.h" #include "spawn2.h" #include "spawngroup.h" @@ -202,6 +205,9 @@ public: std::unordered_map> aa_abilities; std::unordered_map> aa_ranks; + std::vector grids; + std::vector grid_entries; + time_t weather_timer; Timer spawn2_timer; Timer hot_reload_timer; @@ -239,6 +245,7 @@ public: void LoadLDoNTrapEntries(); void LoadLDoNTraps(); void LoadLevelEXPMods(); + void LoadGrids(); void LoadMercSpells(); void LoadMercTemplates(); void LoadNewMerchantData(uint32 merchantid); From 79dbddd56e8556694d618688340ca9ca802e9b87 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 21:32:59 -0500 Subject: [PATCH 040/272] Decouple temporary merchant list call [skip ci] --- common/database_instances.cpp | 17 ++-- common/eqemu_logsys.h | 2 + common/eqemu_logsys_log_aliases.h | 16 ++++ zone/spawn2.cpp | 6 +- zone/waypoints.cpp | 4 +- zone/zone.cpp | 137 ++++++++++++++++++------------ zone/zone.h | 6 +- 7 files changed, 115 insertions(+), 73 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index b84924192..68496b61d 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -472,21 +472,16 @@ void Database::AssignRaidToInstance(uint32 raid_id, uint32 instance_id) } void Database::BuryCorpsesInInstance(uint16 instance_id) { - std::string query = StringFormat( - "UPDATE `character_corpses` " - "SET `is_buried` = 1, " - "`instance_id` = 0 " - "WHERE " - "`instance_id` = %u ", - instance_id - ); - auto results = QueryDatabase(query); + QueryDatabase( + fmt::format( + "UPDATE character_corpses SET is_buried = 1, instance_id = 0 WHERE instance_id = {}", + instance_id + ) + ); } void Database::DeleteInstance(uint16 instance_id) { - // TODO: BOUNDARY REWRITE - std::string query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); QueryDatabase(query); diff --git a/common/eqemu_logsys.h b/common/eqemu_logsys.h index cb880e038..51ec48bfc 100644 --- a/common/eqemu_logsys.h +++ b/common/eqemu_logsys.h @@ -115,6 +115,7 @@ namespace Logs { Flee, Aura, HotReload, + Merchants, MaxCategoryID /* Don't Remove this */ }; @@ -189,6 +190,7 @@ namespace Logs { "Flee", "Aura", "HotReload", + "Merchants", }; } diff --git a/common/eqemu_logsys_log_aliases.h b/common/eqemu_logsys_log_aliases.h index 2ca5127b6..42f973e79 100644 --- a/common/eqemu_logsys_log_aliases.h +++ b/common/eqemu_logsys_log_aliases.h @@ -571,6 +571,16 @@ OutF(LogSys, Logs::Detail, Logs::HotReload, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ } while (0) +#define LogMerchants(message, ...) do {\ + if (LogSys.log_settings[Logs::Merchants].is_category_enabled == 1)\ + OutF(LogSys, Logs::General, Logs::Merchants, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + +#define LogMerchantsDetail(message, ...) do {\ + if (LogSys.log_settings[Logs::Merchants].is_category_enabled == 1)\ + OutF(LogSys, Logs::Detail, Logs::Merchants, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ if (LogSys.log_settings[log_category].is_category_enabled == 1)\ LogSys.Out(debug_level, log_category, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ @@ -910,6 +920,12 @@ #define LogHotReloadDetail(message, ...) do {\ } while (0) +#define LogMerchants(message, ...) do {\ +} while (0) + +#define LogMerchantsDetail(message, ...) do {\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ } while (0) diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index d362c8f44..74ec8d588 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -480,7 +480,7 @@ bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList zone_name, version ); - results = QueryDatabase(query); + results = database.QueryDatabase(query); if (!results.Success()) { return false; @@ -547,7 +547,7 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa "WHERE instance_id = %u", zone->GetInstanceID() ); - auto results = QueryDatabase(spawn_query); + auto results = database.QueryDatabase(spawn_query); for (auto row = results.begin(); row != results.end(); ++row) { uint32 start_duration = atoi(row[1]) > 0 ? atoi(row[1]) : 0; uint32 end_duration = atoi(row[2]) > 0 ? atoi(row[2]) : 0; @@ -989,7 +989,7 @@ bool SpawnConditionManager::LoadSpawnConditions(const char* zone_name, uint32 in query = StringFormat("SELECT id, value FROM spawn_condition_values " "WHERE zone = '%s' AND instance_id = %u", zone_name, instance_id); - results = content_db.QueryDatabase(query); + results = database.QueryDatabase(query); if (!results.Success()) { spawn_conditions.clear(); return false; diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 47c293f12..fe470bd78 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -575,7 +575,7 @@ void NPC::AssignWaypoints(int32 grid_id, int start_wp) Waypoints.clear(); roamer = false; - auto grid_entry = GridRepository::GetGrid(zone->grids, grid_id); + auto grid_entry = GridRepository::GetGrid(zone->zone_grids, grid_id); if (grid_entry.id == 0) { return; } @@ -588,7 +588,7 @@ void NPC::AssignWaypoints(int32 grid_id, int start_wp) roamer = true; max_wp = 0; // Initialize it; will increment it for each waypoint successfully added to the list - for (auto &entry : zone->grid_entries) { + for (auto &entry : zone->zone_grid_entries) { if (entry.gridid == grid_id) { wplist new_waypoint{}; new_waypoint.index = max_wp; diff --git a/zone/zone.cpp b/zone/zone.cpp index 1bbdd411e..5c60e06fc 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -419,48 +419,79 @@ uint32 Zone::GetTempMerchantQuantity(uint32 NPCID, uint32 Slot) { return 0; } -void Zone::LoadTempMerchantData() { +void Zone::LoadTempMerchantData() +{ LogInfo("Loading Temporary Merchant Lists"); - std::string query = StringFormat( - "SELECT " - "DISTINCT ml.npcid, " - "ml.slot, " - "ml.charges, " - "ml.itemid " - "FROM " - "merchantlist_temp ml, " - "spawnentry se, " - "spawn2 s2 " - "WHERE " - "ml.npcid = se.npcid " - "AND se.spawngroupid = s2.spawngroupid " - "AND s2.zone = '%s' AND s2.version = %i " - "ORDER BY ml.slot ", GetShortName(), GetInstanceVersion()); - auto results = content_db.QueryDatabase(query); - if (!results.Success()) { - return; - } - std::map >::iterator cur; - uint32 npcid = 0; + + auto results = content_db.QueryDatabase( + fmt::format( + SQL( + SELECT + DISTINCT npc_types.id + FROM + npc_types + JOIN spawnentry ON spawnentry.npcID = npc_types.id + JOIN spawn2 ON spawn2.spawngroupID = spawnentry.spawngroupID + WHERE + spawn2.zone = '{}' + AND spawn2.version = {} + ), + GetShortName(), + GetInstanceVersion() + ) + ); + + std::vector npc_ids; for (auto row = results.begin(); row != results.end(); ++row) { - TempMerchantList ml; - ml.npcid = atoul(row[0]); - if (npcid != ml.npcid){ - cur = tmpmerchanttable.find(ml.npcid); - if (cur == tmpmerchanttable.end()) { - std::list empty; - tmpmerchanttable[ml.npcid] = empty; - cur = tmpmerchanttable.find(ml.npcid); - } - npcid = ml.npcid; - } - ml.slot = atoul(row[1]); - ml.charges = atoul(row[2]); - ml.item = atoul(row[3]); - ml.origslot = ml.slot; - cur->second.push_back(ml); + npc_ids.push_back(row[0]); + } + + results = database.QueryDatabase( + fmt::format( + SQL( + npcid, + slot, + charges, + itemid + FROM merchantlist_temp + WHERE npcid IN ({}) + ), + implode(", ", npc_ids) + ) + ); + + std::map >::iterator temp_merchant_table_entry; + + uint32 npc_id = 0; + for (auto row = results.begin(); row != results.end(); ++row) { + TempMerchantList temp_merchant_list; + temp_merchant_list.npcid = atoul(row[0]); + if (npc_id != temp_merchant_list.npcid) { + temp_merchant_table_entry = tmpmerchanttable.find(temp_merchant_list.npcid); + if (temp_merchant_table_entry == tmpmerchanttable.end()) { + std::list empty; + tmpmerchanttable[temp_merchant_list.npcid] = empty; + temp_merchant_table_entry = tmpmerchanttable.find(temp_merchant_list.npcid); + } + npc_id = temp_merchant_list.npcid; + } + + temp_merchant_list.slot = atoul(row[1]); + temp_merchant_list.charges = atoul(row[2]); + temp_merchant_list.item = atoul(row[3]); + temp_merchant_list.origslot = temp_merchant_list.slot; + + LogMerchants( + "[LoadTempMerchantData] Loading merchant temp items npc_id [{}] slot [{}] charges [{}] item [{}] origslot [{}]", + npc_id, + temp_merchant_list.slot, + temp_merchant_list.charges, + temp_merchant_list.item, + temp_merchant_list.origslot + ); + + temp_merchant_table_entry->second.push_back(temp_merchant_list); } - pQueuedMerchantsWorkID = 0; } void Zone::LoadNewMerchantData(uint32 merchantid) { @@ -807,7 +838,6 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) pgraveyard_id = 0; pgraveyard_zoneid = 0; pMaxClients = 0; - pQueuedMerchantsWorkID = 0; pvpzone = false; if(database.GetServerType() == 1) pvpzone = true; @@ -907,16 +937,18 @@ Zone::~Zone() { //Modified for timezones. bool Zone::Init(bool iStaticZone) { SetStaticZone(iStaticZone); - - //load the zone config file. - if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) // try loading the zone name... - LoadZoneCFG(zone->GetFileName(), zone->GetInstanceVersion()); // if that fails, try the file name, then load defaults - if(RuleManager::Instance()->GetActiveRulesetID() != default_ruleset) - { + //load the zone config file. + if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) { // try loading the zone name... + LoadZoneCFG( + zone->GetFileName(), + zone->GetInstanceVersion() + ); + } // if that fails, try the file name, then load defaults + + if (RuleManager::Instance()->GetActiveRulesetID() != default_ruleset) { std::string r_name = RuleManager::Instance()->GetRulesetName(&database, default_ruleset); - if(r_name.size() > 0) - { + if (r_name.size() > 0) { RuleManager::Instance()->LoadRules(&database, r_name.c_str(), false); } } @@ -980,12 +1012,11 @@ bool Zone::Init(bool iStaticZone) { LogInfo("Flushing old respawn timers"); database.QueryDatabase("DELETE FROM `respawn_times` WHERE (`start` + `duration`) < UNIX_TIMESTAMP(NOW())"); - //load up the zone's doors (prints inside) zone->LoadZoneDoors(zone->GetShortName(), zone->GetInstanceVersion()); zone->LoadZoneBlockedSpells(zone->GetZoneID()); //clear trader items if we are loading the bazaar - if(strncasecmp(short_name,"bazaar",6)==0) { + if (strncasecmp(short_name, "bazaar", 6) == 0) { database.DeleteTraderItem(0); database.DeleteBuyLines(0); } @@ -2487,6 +2518,6 @@ void Zone::SetQuestHotReloadQueued(bool in_quest_hot_reload_queued) void Zone::LoadGrids() { - grids = GridRepository::GetZoneGrids(GetZoneID()); - grid_entries = GridEntriesRepository::GetZoneGridEntries(GetZoneID()); -} + zone_grids = GridRepository::GetZoneGrids(GetZoneID()); + zone_grid_entries = GridEntriesRepository::GetZoneGridEntries(GetZoneID()); +} \ No newline at end of file diff --git a/zone/zone.h b/zone/zone.h index 9dfe2c36e..e0dbfe38e 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -205,8 +205,8 @@ public: std::unordered_map> aa_abilities; std::unordered_map> aa_ranks; - std::vector grids; - std::vector grid_entries; + std::vector zone_grids; + std::vector zone_grid_entries; time_t weather_timer; Timer spawn2_timer; @@ -372,8 +372,6 @@ private: uint32 pMaxClients; uint32 zoneid; uint32 m_last_ucss_update; - uint32 pQueuedMerchantsWorkID; - uint32 pQueuedTempMerchantsWorkID; GlobalLootManager m_global_loot; LinkedList client_auth_list; From 0c3dd7dc93ff51d2c6415faacefb95f5a3d9919f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 21:33:11 -0500 Subject: [PATCH 041/272] Update zone.cpp [skip ci] --- zone/zone.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/zone/zone.cpp b/zone/zone.cpp index 5c60e06fc..54e50f1d0 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -449,6 +449,7 @@ void Zone::LoadTempMerchantData() results = database.QueryDatabase( fmt::format( SQL( + SELECT npcid, slot, charges, From 019735c654404731f3e18f1c8cea5eff51d49c89 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 30 Mar 2020 23:25:32 -0500 Subject: [PATCH 042/272] Keeps spawns from doing individual loads and prefer bulk loading [skip ci] --- common/CMakeLists.txt | 1 + common/repositories/spawngroup_repository.h | 164 ++++++++++++++++++++ zone/command.cpp | 28 ---- zone/command.h | 1 - zone/spawn2.cpp | 9 +- zone/spawngroup.cpp | 17 ++ zone/zone.cpp | 45 +++--- zone/zone.h | 8 +- 8 files changed, 210 insertions(+), 63 deletions(-) create mode 100644 common/repositories/spawngroup_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index df2047ef9..d741ae81d 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -199,6 +199,7 @@ SET(common_headers repositories/character_recipe_list_repository.h repositories/grid_repository.h repositories/grid_entries_repository.h + repositories/spawngroup_repository.h repositories/tradeskill_recipe_repository.h rdtsc.h rulesys.h diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h new file mode 100644 index 000000000..4c800639f --- /dev/null +++ b/common/repositories/spawngroup_repository.h @@ -0,0 +1,164 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef EQEMU_SPAWNGROUP_REPOSITORY_H +#define EQEMU_SPAWNGROUP_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpawnGroupRepository { +public: + struct SpawnGroup { + int id; + std::string name; + int8 spawn_limit; + int dist; + float max_x; + float min_x; + float max_y; + float min_y; + int delay; + int mindelay; + int despawn; + int despawn_timer; + int wp_spawns; + }; + + static std::vector Columns() + { + return { + "id", + "name", + "spawn_limit", + "dist", + "max_x", + "min_x", + "max_y", + "min_y", + "delay", + "mindelay", + "despawn", + "despawn_timer", + "wp_spawns", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string TableName() + { + return std::string("spawngroup"); + } + + static std::string BaseSelect() + { + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) + ); + } + + static SpawnGroup New() + { + SpawnGroup entry; + + entry.id = 0; + entry.name = ""; + entry.spawn_limit = 0; + entry.dist = 0; + entry.max_x = 0; + entry.min_x = 0; + entry.max_y = 0; + entry.min_y = 0; + entry.delay = 0; + entry.mindelay = 0; + entry.despawn = 0; + entry.despawn_timer = 0; + entry.wp_spawns = 0; + + return entry; + } + + static std::vector GetZoneSpawnGroups( + const std::string &zone_short_name, + int zone_version + ) + { + std::vector spawn_groups; + + auto results = content_db.QueryDatabase( + fmt::format( + SQL ( + {} INNER JOIN spawn2 ON spawn2.spawngroupID = spawngroup.id + WHERE spawn2.zone = '{}' and spawn2.version = {} + ), + BaseSelect(), + zone_short_name, + zone_version + ) + ); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnGroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + spawn_groups.push_back(entry); + } + + return spawn_groups; + } + + static SpawnGroup GetGrid( + const std::vector &spawn_groups, + int spawn_group_id + ) + { + for (auto &row : spawn_groups) { + if (row.id == spawn_group_id) { + return row; + } + } + + return New(); + } + +}; + + +#endif //EQEMU_SPAWNGROUP_REPOSITORY_H diff --git a/zone/command.cpp b/zone/command.cpp index ef947b1b5..b7db3205e 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -345,7 +345,6 @@ int command_init(void) command_add("reloadworld", "[0|1] - Clear quest cache (0 - no repop, 1 - repop)", 255, command_reloadworld) || command_add("reloadzps", "- Reload zone points from database", 150, command_reloadzps) || command_add("repop", "[delay] - Repop the zone with optional delay", 100, command_repop) || - command_add("repopclose", "[distance in units] Repops only NPC's nearby for fast development purposes", 100, command_repopclose) || command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", 200, command_resetaa) || command_add("resetaa_timer", "Command to reset AA cooldown timers.", 200, command_resetaa_timer) || command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", 200, command_revoke) || @@ -5320,33 +5319,6 @@ void command_repop(Client *c, const Seperator *sep) zone->spawn2_timer.Trigger(); } -void command_repopclose(Client *c, const Seperator *sep) -{ - int repop_distance = 500; - - if (sep->arg[1] && strcasecmp(sep->arg[1], "force") == 0) { - - LinkedListIterator iterator(zone->spawn2_list); - iterator.Reset(); - while (iterator.MoreElements()) { - std::string query = StringFormat( - "DELETE FROM respawn_times WHERE id = %lu AND instance_id = %lu", - (unsigned long)iterator.GetData()->GetID(), - (unsigned long)zone->GetInstanceID() - ); - auto results = database.QueryDatabase(query); - iterator.Advance(); - } - c->Message(Chat::White, "Zone depop: Force resetting spawn timers."); - } - if (sep->IsNumber(1)) { - repop_distance = atoi(sep->arg[1]); - } - - c->Message(Chat::White, "Zone depoped. Repopping NPC's within %i distance units", repop_distance); - zone->RepopClose(c->GetPosition(), repop_distance); -} - void command_spawnstatus(Client *c, const Seperator *sep) { if((sep->arg[1][0] == 'e') | (sep->arg[1][0] == 'E')) diff --git a/zone/command.h b/zone/command.h index d64950f9c..e1b028bb1 100644 --- a/zone/command.h +++ b/zone/command.h @@ -246,7 +246,6 @@ void command_reloadworld(Client *c, const Seperator *sep); void command_reloadworldrules(Client *c, const Seperator *sep); void command_reloadzps(Client *c, const Seperator *sep); void command_repop(Client *c, const Seperator *sep); -void command_repopclose(Client *c, const Seperator *sep); void command_resetaa(Client* c,const Seperator *sep); void command_resetaa_timer(Client *c, const Seperator *sep); void command_revoke(Client *c, const Seperator *sep); diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 74ec8d588..3571effe9 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -165,7 +165,10 @@ bool Spawn2::Process() { return (true); } - if (spawn_group == nullptr) { + /** + * Wait for init grids timer because we bulk load this data before trying to fetch it individually + */ + if (spawn_group == nullptr && zone->GetInitgridsTimer().Check()) { content_db.LoadSpawnGroupsByID(spawngroup_id_, &zone->spawn_group_list); spawn_group = zone->spawn_group_list.GetSpawnGroup(spawngroup_id_); } @@ -916,7 +919,7 @@ void SpawnConditionManager::UpdateDBCondition(const char* zone_name, uint32 inst "(id, value, zone, instance_id) " "VALUES( %u, %u, '%s', %u)", cond_id, value, zone_name, instance_id); - content_db.QueryDatabase(query); + database.QueryDatabase(query); } bool SpawnConditionManager::LoadDBEvent(uint32 event_id, SpawnEvent &event, std::string &zone_name) { @@ -1376,7 +1379,7 @@ int16 SpawnConditionManager::GetCondition(const char *zone_short, uint32 instanc "WHERE zone = '%s' AND instance_id = %u AND id = %d", zone_short, instance_id, condition_id ); - auto results = content_db.QueryDatabase(query); + auto results = database.QueryDatabase(query); if (!results.Success()) { LogSpawns("Unable to query remote condition [{}] from zone [{}] in Get request", condition_id, zone_short); return 0; //dunno a better thing to do... diff --git a/zone/spawngroup.cpp b/zone/spawngroup.cpp index f33aa7fca..d1a83995f 100644 --- a/zone/spawngroup.cpp +++ b/zone/spawngroup.cpp @@ -325,6 +325,14 @@ bool ZoneDatabase::LoadSpawnGroupsByID(int spawn_group_id, SpawnGroupList *spawn } for (auto row = results.begin(); row != results.end(); ++row) { + LogSpawnsDetail( + "[LoadSpawnGroupsByID] Loading spawn_group spawn_group_id [{}] name [{}] spawn_limit [{}] dist [{}]", + row[0], + row[1], + row[2], + row[3] + ); + auto new_spawn_group = new SpawnGroup( atoi(row[0]), row[1], @@ -375,6 +383,15 @@ bool ZoneDatabase::LoadSpawnGroupsByID(int spawn_group_id, SpawnGroupList *spawn (row[4] ? atoi(row[4]) : 0) ); + LogSpawnsDetail( + "[LoadSpawnGroupsByID] Loading spawn_entry spawn_group_id [{}] npc_id [{}] chance [{}] condition_value_filter [{}] spawn_limit [{}]", + row[0], + row[1], + row[2], + row[3], + row[4] + ); + SpawnGroup *spawn_group = spawn_group_list->GetSpawnGroup(atoi(row[0])); if (!spawn_group) { safe_delete(new_spawn_entry); diff --git a/zone/zone.cpp b/zone/zone.cpp index 54e50f1d0..7d1266f9e 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1272,8 +1272,6 @@ bool Zone::Process() { EQEmu::InventoryProfile::CleanDirty(); - LogSpawns("Running Zone::Process -> Spawn2::Process"); - iterator.Reset(); while (iterator.MoreElements()) { if (iterator.GetData()->Process()) { @@ -1598,29 +1596,6 @@ void Zone::ClearNPCTypeCache(int id) { } } -void Zone::RepopClose(const glm::vec4& client_position, uint32 repop_distance) -{ - - if (!Depop()) - return; - - LinkedListIterator iterator(spawn2_list); - - iterator.Reset(); - while (iterator.MoreElements()) { - iterator.RemoveCurrent(); - } - - quest_manager.ClearAllTimers(); - - if (!content_db.PopulateZoneSpawnListClose(zoneid, spawn2_list, GetInstanceVersion(), client_position, repop_distance)) - LogDebug("Error in Zone::Repop: database.PopulateZoneSpawnList failed"); - - initgrids_timer.Start(); - - mod_repop(); -} - void Zone::Repop(uint32 delay) { if (!Depop()) { @@ -1640,8 +1615,19 @@ void Zone::Repop(uint32 delay) quest_manager.ClearAllTimers(); - if (!content_db.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion(), delay)) + LogInfo("Loading spawn groups"); + if (!content_db.LoadSpawnGroups(short_name, GetInstanceVersion(), &spawn_group_list)) { + LogError("Loading spawn groups failed"); + } + + LogInfo("Loading spawn conditions"); + if (!spawn_conditions.LoadSpawnConditions(short_name, instanceid)) { + LogError("Loading spawn conditions failed, continuing without them"); + } + + if (!content_db.PopulateZoneSpawnList(zoneid, spawn2_list, GetInstanceVersion(), delay)) { LogDebug("Error in Zone::Repop: database.PopulateZoneSpawnList failed"); + } LoadGrids(); @@ -2521,4 +2507,9 @@ void Zone::LoadGrids() { zone_grids = GridRepository::GetZoneGrids(GetZoneID()); zone_grid_entries = GridEntriesRepository::GetZoneGridEntries(GetZoneID()); -} \ No newline at end of file +} + +Timer Zone::GetInitgridsTimer() +{ + return initgrids_timer; +} diff --git a/zone/zone.h b/zone/zone.h index e0dbfe38e..bf986e6a1 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -259,7 +259,6 @@ public: void RemoveAuth(const char *iCharName, const char *iLSKey); void RemoveAuth(uint32 lsid); void Repop(uint32 delay = 0); - void RepopClose(const glm::vec4 &client_position, uint32 repop_distance); void RequestUCSServerStatus(); void ResetAuth(); void SetDate(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute); @@ -285,6 +284,8 @@ public: ZonePoint *GetClosestZonePoint(const glm::vec3 &location, uint32 to, Client *client, float max_distance = 40000.0f); ZonePoint *GetClosestZonePointWithoutZone(float x, float y, float z, Client *client, float max_distance = 40000.0f); + Timer GetInitgridsTimer(); + /** * GMSay Callback for LogSys * @@ -332,6 +333,7 @@ public: double GetMaxMovementUpdateRange() const { return max_movement_update_range; } + /** * Modding hooks */ @@ -352,8 +354,6 @@ private: bool staticzone; bool zone_has_current_time; bool quest_hot_reload_queued; - -private: double max_movement_update_range; char *long_name; char *map_name; @@ -384,7 +384,7 @@ private: Timer autoshutdown_timer; Timer clientauth_timer; Timer hotzone_timer; - Timer initgrids_timer; //delayed loading of initial grids. + Timer initgrids_timer; Timer qglobal_purge_timer; ZoneSpellsBlocked *blocked_spells; From dae20afcbaa7f2e2d818155ffe9bfb93d76aa6a4 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 31 Mar 2020 01:49:42 -0500 Subject: [PATCH 043/272] Fix character creation tenancy operations --- common/database.cpp | 55 -------------- common/database.h | 1 - .../character_recipe_list_repository.h | 4 +- common/repositories/grid_entries_repository.h | 2 +- common/repositories/grid_repository.h | 4 +- common/repositories/spawngroup_repository.h | 4 +- .../tradeskill_recipe_repository.h | 4 +- world/client.cpp | 64 +++++++++++++++- world/client.h | 7 ++ world/main.cpp | 20 ++--- world/worlddb.cpp | 74 ++++++++++++------- world/worlddb.h | 9 ++- zone/client.cpp | 5 +- zone/command.cpp | 53 ++++++++++--- 14 files changed, 186 insertions(+), 120 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index 69ac0b997..b3a4c0bf4 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -750,61 +750,6 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe return true; } -/* This only for new Character creation storing */ -bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv) { - uint32 charid = 0; - char zone[50]; - float x, y, z; - charid = GetCharacterID(pp->name); - - if(!charid) { - LogError("StoreCharacter: no character id"); - return false; - } - - const char *zname = GetZoneName(pp->zone_id); - if(zname == nullptr) { - /* Zone not in the DB, something to prevent crash... */ - strn0cpy(zone, "qeynos", 49); - pp->zone_id = 1; - } - else{ strn0cpy(zone, zname, 49); } - - x = pp->x; - y = pp->y; - z = pp->z; - - /* Saves Player Profile Data */ - SaveCharacterCreate(charid, account_id, pp); - - /* Insert starting inventory... */ - std::string invquery; - for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) { - const EQEmu::ItemInstance* newinv = inv->GetItem(i); - if (newinv) { - invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)", - charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor()); - - auto results = QueryDatabase(invquery); - } - - if (i == EQEmu::invslot::slotCursor) { - i = EQEmu::invbag::GENERAL_BAGS_BEGIN; - continue; - } - else if (i == EQEmu::invbag::CURSOR_BAG_END) { - i = EQEmu::invslot::BANK_BEGIN; - continue; - } - else if (i == EQEmu::invslot::BANK_END) { - i = EQEmu::invbag::BANK_BAGS_BEGIN; - continue; - } - i++; - } - return true; -} - uint32 Database::GetCharacterID(const char *name) { std::string query = StringFormat("SELECT `id` FROM `character_data` WHERE `name` = '%s'", name); auto results = QueryDatabase(query); diff --git a/common/database.h b/common/database.h index 95458c1c1..2239282ba 100644 --- a/common/database.h +++ b/common/database.h @@ -115,7 +115,6 @@ public: bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp); bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked); bool SetMQDetectionFlag(const char* accountname, const char* charactername, const char* hacked, const char* zone); - bool StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv); bool UpdateName(const char* oldname, const char* newname); /* General Information Queries */ diff --git a/common/repositories/character_recipe_list_repository.h b/common/repositories/character_recipe_list_repository.h index d3349cf6a..f0a53f099 100644 --- a/common/repositories/character_recipe_list_repository.h +++ b/common/repositories/character_recipe_list_repository.h @@ -62,7 +62,7 @@ public: ); } - static CharacterRecipeList GetDefaults() + static CharacterRecipeList NewEntity() { CharacterRecipeList character_recipe_list_entry; @@ -109,7 +109,7 @@ public: } } - return GetDefaults(); + return NewEntity(); } }; diff --git a/common/repositories/grid_entries_repository.h b/common/repositories/grid_entries_repository.h index 0c2e34d85..efb2126d7 100644 --- a/common/repositories/grid_entries_repository.h +++ b/common/repositories/grid_entries_repository.h @@ -74,7 +74,7 @@ public: ); } - static GridEntry Default() + static GridEntry NewEntity() { GridEntry entry{}; diff --git a/common/repositories/grid_repository.h b/common/repositories/grid_repository.h index 523c5212d..49305c33b 100644 --- a/common/repositories/grid_repository.h +++ b/common/repositories/grid_repository.h @@ -64,7 +64,7 @@ public: ); } - static Grid Default() + static Grid NewEntity() { Grid entry{}; @@ -113,7 +113,7 @@ public: } } - return Default(); + return NewEntity(); } }; diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index 4c800639f..7c55711b6 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -81,7 +81,7 @@ public: ); } - static SpawnGroup New() + static SpawnGroup NewEntity() { SpawnGroup entry; @@ -155,7 +155,7 @@ public: } } - return New(); + return NewEntity(); } }; diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h index 9cdcb178a..15ee26ce3 100644 --- a/common/repositories/tradeskill_recipe_repository.h +++ b/common/repositories/tradeskill_recipe_repository.h @@ -78,7 +78,7 @@ public: ); } - static TradeskillRecipe New() + static TradeskillRecipe NewEntity() { TradeskillRecipe entry; @@ -107,7 +107,7 @@ public: ) ); - TradeskillRecipe tradeskill_recipe = New(); + TradeskillRecipe tradeskill_recipe = NewEntity(); auto row = results.begin(); if (results.RowCount() == 0) { diff --git a/world/client.cpp b/world/client.cpp index 82db1c4a7..ebc01e03e 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -1568,7 +1568,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) /* Overrides if we have the tutorial flag set! */ if (cc->tutorial && RuleB(World, EnableTutorialButton)) { pp.zone_id = RuleI(World, TutorialZoneID); - database.GetSafePoints(pp.zone_id, 0, &pp.x, &pp.y, &pp.z); + content_db.GetSafePoints(pp.zone_id, 0, &pp.x, &pp.y, &pp.z); } /* Will either be the same as home or tutorial if enabled. */ @@ -1592,7 +1592,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) // now we give the pp and the inv we made to StoreCharacter // to see if we can store it - if (!database.StoreCharacter(GetAccountID(), &pp, &inv)) { + if (!StoreCharacter(GetAccountID(), &pp, &inv)) { LogInfo("Character creation failed: [{}]", pp.name); return false; } @@ -2075,3 +2075,63 @@ void Client::SetClassLanguages(PlayerProfile_Struct *pp) } } +bool Client::StoreCharacter( + uint32 account_id, + PlayerProfile_Struct *p_player_profile_struct, + EQEmu::InventoryProfile *p_inventory_profile +) +{ + uint32 character_id = 0; + char zone[50]; + character_id = database.GetCharacterID(p_player_profile_struct->name); + + if (!character_id) { + LogError("StoreCharacter: no character id"); + return false; + } + + const char *zone_name = content_db.GetZoneName(p_player_profile_struct->zone_id); + if (zone_name == nullptr) { + /* Zone not in the DB, something to prevent crash... */ + strn0cpy(zone, "qeynos", 49); + p_player_profile_struct->zone_id = 1; + } + else { + strn0cpy(zone, zone_name, 49); + } + + database.SaveCharacterCreate(character_id, account_id, p_player_profile_struct); + + std::string invquery; + for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) { + const EQEmu::ItemInstance *new_inventory_item = p_inventory_profile->GetItem(i); + if (new_inventory_item) { + invquery = StringFormat( + "INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)", + character_id, + i, + new_inventory_item->GetItem()->ID, + new_inventory_item->GetCharges(), + new_inventory_item->GetColor() + ); + + auto results = database.QueryDatabase(invquery); + } + + if (i == EQEmu::invslot::slotCursor) { + i = EQEmu::invbag::GENERAL_BAGS_BEGIN; + continue; + } + else if (i == EQEmu::invbag::CURSOR_BAG_END) { + i = EQEmu::invslot::BANK_BEGIN; + continue; + } + else if (i == EQEmu::invslot::BANK_END) { + i = EQEmu::invbag::BANK_BAGS_BEGIN; + continue; + } + i++; + } + + return true; +} \ No newline at end of file diff --git a/world/client.h b/world/client.h index 4dbad85c5..2bea3adf6 100644 --- a/world/client.h +++ b/world/client.h @@ -22,6 +22,7 @@ #include "../common/linked_list.h" #include "../common/timer.h" +#include "../common/inventory_profile.h" //#include "zoneserver.h" #include "../common/eq_packet_structs.h" @@ -71,6 +72,12 @@ public: inline EQEmu::versions::ClientVersion GetClientVersion() { return m_ClientVersion; } inline ClientListEntry* GetCLE() { return cle; } inline void SetCLE(ClientListEntry* iCLE) { cle = iCLE; } + bool StoreCharacter( + uint32 account_id, + PlayerProfile_Struct *p_player_profile_struct, + EQEmu::InventoryProfile *p_inventory_profile + ); + private: uint32 ip; diff --git a/world/main.cpp b/world/main.cpp index 4d5511f7c..03a39ea79 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -247,17 +247,10 @@ int main(int argc, char** argv) { if (argc > 1) { LogSys.SilenceConsoleLogging(); - /** - * Get Config - */ WorldConfig::LoadConfig(); Config = WorldConfig::get(); - /** - * Load database - */ LoadDatabaseConnections(); - LogSys.EnableConsoleLogging(); WorldserverCommandHandler::CommandHandler(argc, argv); @@ -340,12 +333,15 @@ int main(int argc, char** argv) { LogInfo("Clearing inventory snapshots"); database.ClearInvSnapshots(); LogInfo("Loading items"); - if (!database.LoadItems(hotfix_name)) - LogError("Error: Could not load item data. But ignoring"); - LogInfo("Loading skill caps"); - if (!database.LoadSkillCaps(std::string(hotfix_name))) - LogError("Error: Could not load skill cap data. But ignoring"); + if (!content_db.LoadItems(hotfix_name)) { + LogError("Error: Could not load item data. But ignoring"); + } + + LogInfo("Loading skill caps"); + if (!content_db.LoadSkillCaps(std::string(hotfix_name))) { + LogError("Error: Could not load skill cap data. But ignoring"); + } LogInfo("Loading guilds"); guild_mgr.LoadGuilds(); diff --git a/world/worlddb.cpp b/world/worlddb.cpp index e1dbd0196..83f0e2f4f 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -215,7 +215,7 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o float x = atof(row_d[2]); float y = atof(row_d[3]); float z = atof(row_d[4]); - if (x == 0 && y == 0 && z == 0) { GetSafePoints(player_profile_struct.binds[4].zoneId, 0, &x, &y, &z); } + if (x == 0 && y == 0 && z == 0) { content_db.GetSafePoints(player_profile_struct.binds[4].zoneId, 0, &x, &y, &z); } player_profile_struct.binds[4].x = x; player_profile_struct.binds[4].y = y; player_profile_struct.binds[4].z = z; @@ -392,7 +392,11 @@ int WorldDatabase::MoveCharacterToBind(int CharID, uint8 bindnum) return zone_id; } -bool WorldDatabase::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc,bool isTitanium) +bool WorldDatabase::GetStartZone( + PlayerProfile_Struct *p_player_profile_struct, + CharCreate_Struct *p_char_create_struct, + bool is_titanium +) { // SoF doesn't send the player_choice field in character creation, it now sends the real zoneID instead. // @@ -401,45 +405,63 @@ bool WorldDatabase::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* // For now, if no row matching row is found, send them to Crescent Reach, as that is probably the most likely // reason for no match being found. // - if(!in_pp || !in_cc) + if (!p_player_profile_struct || !p_char_create_struct) { return false; + } + + p_player_profile_struct->x = 0; + p_player_profile_struct->y = 0; + p_player_profile_struct->z = 0; + p_player_profile_struct->heading = 0; + p_player_profile_struct->zone_id = 0; + p_player_profile_struct->binds[0].x = 0; + p_player_profile_struct->binds[0].y = 0; + p_player_profile_struct->binds[0].z = 0; + p_player_profile_struct->binds[0].zoneId = 0; + p_player_profile_struct->binds[0].instance_id = 0; - in_pp->x = in_pp->y = in_pp->z = in_pp->heading = in_pp->zone_id = 0; - in_pp->binds[0].x = in_pp->binds[0].y = in_pp->binds[0].z = in_pp->binds[0].zoneId = in_pp->binds[0].instance_id = 0; // see if we have an entry for start_zone. We can support both titanium & SOF+ by having two entries per class/race/deity combo with different zone_ids - std::string query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i " + std::string query = StringFormat( + "SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i " "AND player_class = %i AND player_deity = %i AND player_race = %i", - in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race); - auto results = QueryDatabase(query); - if(!results.Success()) { + p_char_create_struct->start_zone, + p_char_create_struct->class_, + p_char_create_struct->deity, + p_char_create_struct->race + ); + + auto results = QueryDatabase(query); + if (!results.Success()) { return false; } LogInfo("SoF Start zone query: [{}]\n", query.c_str()); - if (results.RowCount() == 0) { - printf("No start_zones entry in database, using defaults\n"); - isTitanium ? SetTitaniumDefaultStartZone(in_pp, in_cc) : SetSoFDefaultStartZone(in_pp, in_cc); + if (results.RowCount() == 0) { + printf("No start_zones entry in database, using defaults\n"); + is_titanium ? SetTitaniumDefaultStartZone(p_player_profile_struct, p_char_create_struct) : SetSoFDefaultStartZone(p_player_profile_struct, p_char_create_struct); } else { LogInfo("Found starting location in start_zones"); auto row = results.begin(); - in_pp->x = atof(row[0]); - in_pp->y = atof(row[1]); - in_pp->z = atof(row[2]); - in_pp->heading = atof(row[3]); - in_pp->zone_id = atoi(row[4]); - in_pp->binds[0].zoneId = atoi(row[5]); - in_pp->binds[0].x = atof(row[6]); - in_pp->binds[0].y = atof(row[7]); - in_pp->binds[0].z = atof(row[8]); + p_player_profile_struct->x = atof(row[0]); + p_player_profile_struct->y = atof(row[1]); + p_player_profile_struct->z = atof(row[2]); + p_player_profile_struct->heading = atof(row[3]); + p_player_profile_struct->zone_id = atoi(row[4]); + p_player_profile_struct->binds[0].zoneId = atoi(row[5]); + p_player_profile_struct->binds[0].x = atof(row[6]); + p_player_profile_struct->binds[0].y = atof(row[7]); + p_player_profile_struct->binds[0].z = atof(row[8]); } - if(in_pp->x == 0 && in_pp->y == 0 && in_pp->z == 0) - database.GetSafePoints(in_pp->zone_id, 0, &in_pp->x, &in_pp->y, &in_pp->z); + if (p_player_profile_struct->x == 0 && p_player_profile_struct->y == 0 && p_player_profile_struct->z == 0) { + content_db.GetSafePoints(p_player_profile_struct->zone_id, 0, &p_player_profile_struct->x, &p_player_profile_struct->y, &p_player_profile_struct->z); + } - if(in_pp->binds[0].x == 0 && in_pp->binds[0].y == 0 && in_pp->binds[0].z == 0) - database.GetSafePoints(in_pp->binds[0].zoneId, 0, &in_pp->binds[0].x, &in_pp->binds[0].y, &in_pp->binds[0].z); + if (p_player_profile_struct->binds[0].x == 0 && p_player_profile_struct->binds[0].y == 0 && p_player_profile_struct->binds[0].z == 0) { + content_db.GetSafePoints(p_player_profile_struct->binds[0].zoneId, 0, &p_player_profile_struct->binds[0].x, &p_player_profile_struct->binds[0].y, &p_player_profile_struct->binds[0].z); + } return true; } @@ -783,4 +805,4 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In } return true; -} +} \ No newline at end of file diff --git a/world/worlddb.h b/world/worlddb.h index 06b681ff9..6f08b6fa5 100644 --- a/world/worlddb.h +++ b/world/worlddb.h @@ -29,7 +29,7 @@ struct CharacterSelect_Struct; class WorldDatabase : public SharedDatabase { public: - bool GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc, bool isTitanium); + bool GetStartZone(PlayerProfile_Struct* p_player_profile_struct, CharCreate_Struct* p_char_create_struct, bool is_titanium); void GetCharSelectInfo(uint32 account_id, EQApplicationPacket **out_app, uint32 client_version_bit); int MoveCharacterToBind(int CharID, uint8 bindnum = 0); @@ -38,6 +38,13 @@ public: bool LoadCharacterCreateAllocations(); bool LoadCharacterCreateCombos(); + + bool StoreCharacter( + uint32 account_id, + PlayerProfile_Struct *p_player_profile_struct, + EQEmu::InventoryProfile *p_inventory_profile + ); + private: void SetTitaniumDefaultStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc); void SetSoFDefaultStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc); diff --git a/zone/client.cpp b/zone/client.cpp index dde425475..6c440e4b6 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -5295,8 +5295,9 @@ void Client::SetStartZone(uint32 zoneid, float x, float y, float z) m_pp.binds[4].instance_id = zone->GetInstanceID(); } - if (x == 0 && y == 0 && z ==0) - database.GetSafePoints(m_pp.binds[4].zoneId, 0, &m_pp.binds[4].x, &m_pp.binds[4].y, &m_pp.binds[4].z); + if (x == 0 && y == 0 && z == 0) { + content_db.GetSafePoints(m_pp.binds[4].zoneId, 0, &m_pp.binds[4].x, &m_pp.binds[4].y, &m_pp.binds[4].z); + } else { m_pp.binds[4].x = x; m_pp.binds[4].y = y; diff --git a/zone/command.cpp b/zone/command.cpp index b7db3205e..66be91b64 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -7141,22 +7141,51 @@ void command_summonitem(Client *c, const Seperator *sep) item_status = static_cast(item->MinStatus); } - if (item_status > c->Admin()) + if (item_status > c->Admin()) { c->Message(Chat::Red, "Error: Insufficient status to summon this item."); - else if (sep->argnum == 2 && sep->IsNumber(2)) + } + else if (sep->argnum == 2 && sep->IsNumber(2)) { c->SummonItem(itemid, atoi(sep->arg[2])); - else if (sep->argnum == 3) + } + else if (sep->argnum == 3) { c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3])); - else if (sep->argnum == 4) + } + else if (sep->argnum == 4) { c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4])); - else if (sep->argnum == 5) + } + else if (sep->argnum == 5) { c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5])); - else if (sep->argnum == 6) - c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6])); - else if (sep->argnum == 7) - c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7])); - else if (sep->argnum == 8) - c->SummonItem(itemid, atoi(sep->arg[2]), atoi(sep->arg[3]), atoi(sep->arg[4]), atoi(sep->arg[5]), atoi(sep->arg[6]), atoi(sep->arg[7]), atoi(sep->arg[8])); + } + else if (sep->argnum == 6) { + c->SummonItem( + itemid, + atoi(sep->arg[2]), + atoi(sep->arg[3]), + atoi(sep->arg[4]), + atoi(sep->arg[5]), + atoi(sep->arg[6])); + } + else if (sep->argnum == 7) { + c->SummonItem( + itemid, + atoi(sep->arg[2]), + atoi(sep->arg[3]), + atoi(sep->arg[4]), + atoi(sep->arg[5]), + atoi(sep->arg[6]), + atoi(sep->arg[7])); + } + else if (sep->argnum == 8) { + c->SummonItem( + itemid, + atoi(sep->arg[2]), + atoi(sep->arg[3]), + atoi(sep->arg[4]), + atoi(sep->arg[5]), + atoi(sep->arg[6]), + atoi(sep->arg[7]), + atoi(sep->arg[8])); + } else { c->SummonItem(itemid); } @@ -7270,7 +7299,7 @@ void command_itemsearch(Client *c, const Seperator *sep) std::string saylink_commands; for (auto &amount : amounts) { saylink_commands += EQEmu::SayLinkEngine::GenerateQuestSaylink( - "#gi " + std::to_string(item->ID) + " " + amount, + "#si " + std::to_string(item->ID) + " " + amount, false, "[" + amount + "] " ); From 63eca22aacea33f769a305e9254bc9d3b8292c72 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 31 Mar 2020 02:49:42 -0500 Subject: [PATCH 044/272] Get factions fully moved over [skip ci] --- zone/aggro.cpp | 4 ++-- zone/client.cpp | 13 ++++++------- zone/main.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/zone/aggro.cpp b/zone/aggro.cpp index 87b98d599..24dd90e7d 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -61,7 +61,7 @@ void EntityList::DescribeAggro(Client *towho, NPC *from_who, float d, bool verbo } else if(my_primary < 0) { strcpy(namebuf, "(Special faction)"); } else { - if(!database.GetFactionName(my_primary, namebuf, sizeof(namebuf))) + if(!content_db.GetFactionName(my_primary, namebuf, sizeof(namebuf))) strcpy(namebuf, "(Unknown)"); } towho->Message(Chat::White, ".. I am on faction %s (%d)\n", namebuf, my_primary); @@ -170,7 +170,7 @@ void NPC::DescribeAggro(Client *towho, Mob *mob, bool verbose) { towho->Message(Chat::White, "...%s is on special faction %d", mob->GetName(), mob_primary); } else { char namebuf[256]; - if(!database.GetFactionName(mob_primary, namebuf, sizeof(namebuf))) + if(!content_db.GetFactionName(mob_primary, namebuf, sizeof(namebuf))) strcpy(namebuf, "(Unknown)"); std::list::iterator cur,end; cur = faction_list.begin(); diff --git a/zone/client.cpp b/zone/client.cpp index 6c440e4b6..1836e54bb 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -6849,7 +6849,7 @@ void Client::SendStatsWindow(Client* client, bool use_window) for (auto iter = item_faction_bonuses.begin(); iter != item_faction_bonuses.end(); ++iter) { memset(&faction_buf, 0, sizeof(faction_buf)); - if(!database.GetFactionName((int32)((*iter).first), faction_buf, sizeof(faction_buf))) + if(!content_db.GetFactionName((int32)((*iter).first), faction_buf, sizeof(faction_buf))) strcpy(faction_buf, "Not in DB"); if((*iter).second > 0) { @@ -7816,7 +7816,7 @@ FACTION_VALUE Client::GetFactionLevel(uint32 char_id, uint32 npc_id, uint32 p_ra if(pFaction > 0) { //Get the faction data from the database - if(database.GetFactionData(&fmods, p_class, p_race, p_deity, pFaction)) + if(content_db.GetFactionData(&fmods, p_class, p_race, p_deity, pFaction)) { //Get the players current faction with pFaction tmpFactionValue = GetCharacterFactionLevel(pFaction); @@ -7867,8 +7867,7 @@ void Client::SetFactionLevel(uint32 char_id, uint32 npc_id, uint8 char_class, ui // Find out starting faction for this faction // It needs to be used to adj max and min personal // The range is still the same, 1200-3000(4200), but adjusted for base - database.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), - faction_id[i]); + content_db.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), faction_id[i]); if (quest) { @@ -7917,7 +7916,7 @@ void Client::SetFactionLevel2(uint32 char_id, int32 faction_id, uint8 char_class // Find out starting faction for this faction // It needs to be used to adj max and min personal // The range is still the same, 1200-3000(4200), but adjusted for base - database.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), + content_db.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), faction_id); // Adjust the amount you can go up or down so the resulting range @@ -8018,7 +8017,7 @@ return; int32 Client::GetModCharacterFactionLevel(int32 faction_id) { int32 Modded = GetCharacterFactionLevel(faction_id); FactionMods fm; - if (database.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), faction_id)) + if (content_db.GetFactionData(&fm, GetClass(), GetFactionRace(), GetDeity(), faction_id)) { Modded += fm.base + fm.class_mod + fm.race_mod + fm.deity_mod; @@ -8039,7 +8038,7 @@ void Client::MerchantRejectMessage(Mob *merchant, int primaryfaction) // If a faction is involved, get the data. if (primaryfaction > 0) { - if (database.GetFactionData(&fmod, GetClass(), GetFactionRace(), GetDeity(), primaryfaction)) { + if (content_db.GetFactionData(&fmod, GetClass(), GetFactionRace(), GetDeity(), primaryfaction)) { tmpFactionValue = GetCharacterFactionLevel(primaryfaction); lowestvalue = std::min(std::min(tmpFactionValue, fmod.deity_mod), std::min(fmod.class_mod, fmod.race_mod)); diff --git a/zone/main.cpp b/zone/main.cpp index 4e5b10aa1..0a5739f59 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -322,7 +322,7 @@ int main(int argc, char** argv) { } LogInfo("Loading npc faction lists"); - if (!database.LoadNPCFactionLists(hotfix_name)) { + if (!content_db.LoadNPCFactionLists(hotfix_name)) { LogError("Loading npcs faction lists failed!"); return 1; } From 3b9016f5038c631d070eb44efabc373877c439f7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 31 Mar 2020 02:56:48 -0500 Subject: [PATCH 045/272] More faction calls [skip ci] --- zone/client.cpp | 7 ++++--- zone/npc.cpp | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index 1836e54bb..1c0226c40 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -7851,10 +7851,11 @@ void Client::SetFactionLevel(uint32 char_id, uint32 npc_id, uint8 char_class, ui int32 current_value; // Get the npc faction list - if (!database.GetNPCFactionList(npc_id, faction_id, npc_value, temp)) + if (!content_db.GetNPCFactionList(npc_id, faction_id, npc_value, temp)) { return; - for (int i = 0; i < MAX_NPC_FACTIONS; i++) - { + } + + for (int i = 0; i < MAX_NPC_FACTIONS; i++) { int32 faction_before_hit; int32 faction_to_use_for_messaging; FactionMods fm; diff --git a/zone/npc.cpp b/zone/npc.cpp index aef8d5fac..44cdd1344 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3195,7 +3195,7 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) if (mob->GetLevel() >= 50 || attacker->GetLevelCon(mob->GetLevel()) != CON_GRAY) { bool use_primary_faction = false; if (mob->GetPrimaryFaction() == sender->CastToNPC()->GetPrimaryFaction()) { - const NPCFactionList *cf = database.GetNPCFactionEntry(mob->CastToNPC()->GetNPCFactionID()); + const NPCFactionList *cf = content_db.GetNPCFactionEntry(mob->CastToNPC()->GetNPCFactionID()); if (cf) { if (cf->assistprimaryfaction != 0) { use_primary_faction = true; From 7d8347a556982eee7c99073b3c33b7b5d89981d4 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 31 Mar 2020 03:28:35 -0500 Subject: [PATCH 046/272] Update world item instance references [skip ci] --- world/worlddb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/world/worlddb.cpp b/world/worlddb.cpp index 83f0e2f4f..b7bec5459 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -746,11 +746,11 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In uint32 ornament_idfile = (uint32)atoul(row[13]); uint32 ornament_hero_model = (uint32)atoul(row[14]); - const EQEmu::ItemData *item = GetItem(item_id); + const EQEmu::ItemData *item = content_db.GetItem(item_id); if (!item) continue; - EQEmu::ItemInstance *inst = CreateBaseItem(item, charges); + EQEmu::ItemInstance *inst = content_db.CreateBaseItem(item, charges); if (inst == nullptr) continue; From 58534dea16d9cd830b685b65c740092ac55e8917 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 1 Apr 2020 00:57:34 -0500 Subject: [PATCH 047/272] Some cleanup [skip ci] --- zone/main.cpp | 5 ----- zone/mob_ai.cpp | 6 +++++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/zone/main.cpp b/zone/main.cpp index 0a5739f59..c7c03a33a 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -254,11 +254,6 @@ int main(int argc, char** argv) { } else { content_db.SetMysql(database.getMySQL()); } -// -// auto results = content_db.QueryDatabase("SELECT id FROM items limit 10"); -// for (auto row = results.begin(); row != results.end(); ++row) { -// std::cout << row[0] << std::endl; -// } /* Register Log System and Settings */ LogSys.SetGMSayHandler(&Zone::GMSayHookCallBackProcess); diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index fae923bd3..708c03fa6 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1821,7 +1821,11 @@ void NPC::AI_SetupNextWaypoint() { } else { pause_timer_complete = false; - LogPathing("We are departing waypoint [{}]", cur_wp); + LogPathingDetail( + "[{}] departing waypoint [{}]", + GetCleanName(), + cur_wp + ); //if we were under quest control (with no grid), we are done now.. if (cur_wp == EQEmu::WaypointStatus::QuestControlNoGrid) { LogPathing("Non-grid quest mob has reached its quest ordered waypoint. Leaving pathing mode"); From 72b1e58edb7c7b5d5db945a40efa83f3a3f2e7e7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 1 Apr 2020 06:07:44 -0500 Subject: [PATCH 048/272] Groundwork for world content service and content filtering --- common/CMakeLists.txt | 3 + common/content/world_content_service.cpp | 41 +++++ common/content/world_content_service.h | 163 ++++++++++++++++++ .../criteria/content_filter_criteria.h | 57 ++++++ common/ruletypes.h | 4 + world/main.cpp | 2 + world/world_server_command_handler.cpp | 40 +++++ world/world_server_command_handler.h | 1 + 8 files changed, 311 insertions(+) create mode 100644 common/content/world_content_service.cpp create mode 100644 common/content/world_content_service.h create mode 100644 common/repositories/criteria/content_filter_criteria.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index d741ae81d..0990afd1b 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -6,6 +6,7 @@ SET(common_sources cli/eqemu_command_handler.cpp compression.cpp condition.cpp + content/world_content_service.cpp crash.cpp crc16.cpp crc32.cpp @@ -116,6 +117,7 @@ SET(common_headers classes.h compression.h condition.h + content/world_content_service.h crash.h crc16.h crc32.h @@ -197,6 +199,7 @@ SET(common_headers races.h random.h repositories/character_recipe_list_repository.h + repositories/criteria/content_filter_criteria.h repositories/grid_repository.h repositories/grid_entries_repository.h repositories/spawngroup_repository.h diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp new file mode 100644 index 000000000..350208774 --- /dev/null +++ b/common/content/world_content_service.cpp @@ -0,0 +1,41 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "world_content_service.h" + +int WorldContentService::GetCurrentExpansion() const +{ + return current_expansion; +} + +void WorldContentService::SetCurrentExpansion(int current_expansion) +{ + WorldContentService::current_expansion = current_expansion; +} + +const std::vector &WorldContentService::GetContentFlags() const +{ + return content_flags; +} + +void WorldContentService::SetContentFlags(std::vector content_flags) +{ + WorldContentService::content_flags = content_flags; +} diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h new file mode 100644 index 000000000..850d536e2 --- /dev/null +++ b/common/content/world_content_service.h @@ -0,0 +1,163 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_WORLD_CONTENT_SERVICE_H +#define EQEMU_WORLD_CONTENT_SERVICE_H + +#include +#include + +namespace Expansion { + enum ExpansionNumber { + Classic = 0, + TheRuinsOfKunark, + TheShardsOfVelious, + TheShadowsOfLuclin, + ThePlanesOfPower, + TheLegacyOfYkesha, + LostDungeonsOfNorrath, + GatesOfDiscord, + OmensOfWar, + DragonsOfNorrath, + DepthsOfDarkhollow, + ProphecyOfRo, + TheSerpentsSpine, + TheBuriedSea, + SecretsOfFaydwer, + SeedsOfDestruction, + Underfoot, + HouseOfThule, + VeilOfAlaris, + RainOfFear, + CallOfTheForsaken, + TheDarkendSea, + TheBrokenMirror, + EmpiresOfKunark, + RingOfScale, + TheBurningLands, + TormentOfVelious, + MaxId + }; + + /** + * If you add to this, make sure you update LogCategory + */ + static const char *ExpansionName[ExpansionNumber::MaxId] = { + "Classic", + "The Ruins of Kunark", + "The Shadows of Luclin", + "The Planes of Power", + "Lost Dungeons of Norrath", + "Gates of Discord", + "Omens of War", + "Dragons of Norrath", + "Depths of Darkhollow", + "Prophecy of Ro", + "The Serpent's Spine", + "The Buried Sea", + "Secrets of Faydwer", + "Seeds of Destruction", + "Underfoot", + "House of Thule", + "Veil of Alaris", + "Rain of Fear", + "Call of the Forsaken", + "The Darkened Sea", + "The Broken Mirror", + "Empires of Kunark", + "Ring of Scale", + "The Burning Lands", + "Torment of Velious", + }; +} + +class WorldContentService { +public: + + int GetCurrentExpansion() const; + void SetCurrentExpansion(int current_expansion); + + bool IsClassicEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Classic; } + bool IsTheRuinsOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheRuinsOfKunark; } + bool IsTheShardsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShardsOfVelious; } + bool IsTheShadowsOfLuclinEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShadowsOfLuclin; } + bool IsThePlanesOfPowerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ThePlanesOfPower; } + bool IsTheLegacyOfYkeshaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheLegacyOfYkesha; } + bool IsLostDungeonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::LostDungeonsOfNorrath; } + bool IsGatesOfDiscordEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::GatesOfDiscord; } + bool IsOmensOfWarEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::OmensOfWar; } + bool IsDragonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DragonsOfNorrath; } + bool IsDepthsOfDarkhollowEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DepthsOfDarkhollow; } + bool IsProphecyOfRoEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ProphecyOfRo; } + bool IsTheSerpentsSpineEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheSerpentsSpine; } + bool IsTheBuriedSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBuriedSea; } + bool IsSecretsOfFaydwerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SecretsOfFaydwer; } + bool IsSeedsOfDestructionEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SeedsOfDestruction; } + bool IsUnderfootEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Underfoot; } + bool IsHouseOfThuleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::HouseOfThule; } + bool IsVeilOfAlarisEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::VeilOfAlaris; } + bool IsRainOfFearEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RainOfFear; } + bool IsCallOfTheForsakenEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::CallOfTheForsaken; } + bool IsTheDarkendSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheDarkendSea; } + bool IsTheBrokenMirrorEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBrokenMirror; } + bool IsEmpiresOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::EmpiresOfKunark; } + bool IsRingOfScaleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RingOfScale; } + bool IsTheBurningLandsEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBurningLands; } + bool IsTormentOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TormentOfVelious; } + + bool IsCurrentExpansionClassic() { return current_expansion == Expansion::ExpansionNumber::Classic; } + bool IsCurrentExpansionTheRuinsOfKunark() { return current_expansion == Expansion::ExpansionNumber::TheRuinsOfKunark; } + bool IsCurrentExpansionTheShardsOfVelious() { return current_expansion == Expansion::ExpansionNumber::TheShardsOfVelious; } + bool IsCurrentExpansionTheShadowsOfLuclin() { return current_expansion == Expansion::ExpansionNumber::TheShadowsOfLuclin; } + bool IsCurrentExpansionThePlanesOfPower() { return current_expansion == Expansion::ExpansionNumber::ThePlanesOfPower; } + bool IsCurrentExpansionTheLegacyOfYkesha() { return current_expansion == Expansion::ExpansionNumber::TheLegacyOfYkesha; } + bool IsCurrentExpansionLostDungeonsOfNorrath() { return current_expansion == Expansion::ExpansionNumber::LostDungeonsOfNorrath; } + bool IsCurrentExpansionGatesOfDiscord() { return current_expansion == Expansion::ExpansionNumber::GatesOfDiscord; } + bool IsCurrentExpansionOmensOfWar() { return current_expansion == Expansion::ExpansionNumber::OmensOfWar; } + bool IsCurrentExpansionDragonsOfNorrath() { return current_expansion == Expansion::ExpansionNumber::DragonsOfNorrath; } + bool IsCurrentExpansionDepthsOfDarkhollow() { return current_expansion == Expansion::ExpansionNumber::DepthsOfDarkhollow; } + bool IsCurrentExpansionProphecyOfRo() { return current_expansion == Expansion::ExpansionNumber::ProphecyOfRo; } + bool IsCurrentExpansionTheSerpentsSpine() { return current_expansion == Expansion::ExpansionNumber::TheSerpentsSpine; } + bool IsCurrentExpansionTheBuriedSea() { return current_expansion == Expansion::ExpansionNumber::TheBuriedSea; } + bool IsCurrentExpansionSecretsOfFaydwer() { return current_expansion == Expansion::ExpansionNumber::SecretsOfFaydwer; } + bool IsCurrentExpansionSeedsOfDestruction() { return current_expansion == Expansion::ExpansionNumber::SeedsOfDestruction; } + bool IsCurrentExpansionUnderfoot() { return current_expansion == Expansion::ExpansionNumber::Underfoot; } + bool IsCurrentExpansionHouseOfThule() { return current_expansion == Expansion::ExpansionNumber::HouseOfThule; } + bool IsCurrentExpansionVeilOfAlaris() { return current_expansion == Expansion::ExpansionNumber::VeilOfAlaris; } + bool IsCurrentExpansionRainOfFear() { return current_expansion == Expansion::ExpansionNumber::RainOfFear; } + bool IsCurrentExpansionCallOfTheForsaken() { return current_expansion == Expansion::ExpansionNumber::CallOfTheForsaken; } + bool IsCurrentExpansionTheDarkendSea() { return current_expansion == Expansion::ExpansionNumber::TheDarkendSea; } + bool IsCurrentExpansionTheBrokenMirror() { return current_expansion == Expansion::ExpansionNumber::TheBrokenMirror; } + bool IsCurrentExpansionEmpiresOfKunark() { return current_expansion == Expansion::ExpansionNumber::EmpiresOfKunark; } + bool IsCurrentExpansionRingOfScale() { return current_expansion == Expansion::ExpansionNumber::RingOfScale; } + bool IsCurrentExpansionTheBurningLands() { return current_expansion == Expansion::ExpansionNumber::TheBurningLands; } + bool IsCurrentExpansionTormentOfVelious() { return current_expansion == Expansion::ExpansionNumber::TormentOfVelious; } + +private: + int current_expansion; + std::vector content_flags; +public: + const std::vector &GetContentFlags() const; + void SetContentFlags(std::vector content_flags); +}; + +extern WorldContentService content_service; + +#endif //EQEMU_WORLD_CONTENT_SERVICE_H diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h new file mode 100644 index 000000000..c316bd87f --- /dev/null +++ b/common/repositories/criteria/content_filter_criteria.h @@ -0,0 +1,57 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CONTENT_FILTER_CRITERIA_H +#define EQEMU_CONTENT_FILTER_CRITERIA_H + +#include +#include "../../content/world_content_service.h" +#include "../../string_util.h" + +namespace ContentFilterCriteria { + static std::string apply() + { + std::string criteria; + + criteria += fmt::format( + " AND (min_expansion >= {} OR min_expansion = 0)", + content_service.GetCurrentExpansion() + ); + + criteria += fmt::format( + " AND (max_expansion <= {} OR max_expansion = 0)", + content_service.GetCurrentExpansion() + ); + + std::vector flags = content_service.GetContentFlags(); + for (auto &flag: flags) { + flag = "'" + flag + "'"; + } + + criteria += fmt::format( + " AND (content_flags IS NULL OR content_flags IN ({}))", + implode(", ", flags) + ); + + return std::string(criteria); + }; +} + +#endif //EQEMU_CONTENT_FILTER_CRITERIA_H diff --git a/common/ruletypes.h b/common/ruletypes.h index f1d00529f..85d670071 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -774,6 +774,10 @@ RULE_BOOL(HotReload, QuestsRepopWhenPlayersNotInCombat, true, "When a hot reload RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is triggered, quest timers will be reset") RULE_CATEGORY_END() +RULE_CATEGORY(Expansion) +RULE_INT(Expansion, CurrentExpansion, -1, "The current expansion enabled for the server [0 = Classic, 1 = Kunark etc.]") +RULE_CATEGORY_END() + #undef RULE_CATEGORY #undef RULE_INT #undef RULE_REAL diff --git a/world/main.cpp b/world/main.cpp index 03a39ea79..dbdad0079 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -90,6 +90,7 @@ union semun { #include "../common/net/servertalk_server.h" #include "../zone/data_bucket.h" #include "world_server_command_handler.h" +#include "../common/content/world_content_service.h" ClientList client_list; GroupLFPList LFPGroupList; @@ -106,6 +107,7 @@ uint32 numzones = 0; bool holdzones = false; const WorldConfig *Config; EQEmuLogSys LogSys; +WorldContentService content_service; WebInterfaceList web_interface; void CatchSignal(int sig_num); diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 9bad28541..38991f604 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -25,6 +25,9 @@ #include "worlddb.h" #include "../common/database_schema.h" #include "../common/database/database_dump_service.h" +#include "../common/content/world_content_service.h" +#include "../common/repositories/criteria/content_filter_criteria.h" +#include "../common/rulesys.h" namespace WorldserverCommandHandler { @@ -53,6 +56,7 @@ namespace WorldserverCommandHandler { function_map["database:set-account-status"] = &WorldserverCommandHandler::DatabaseSetAccountStatus; function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema; function_map["database:dump"] = &WorldserverCommandHandler::DatabaseDump; + function_map["test:test"] = &WorldserverCommandHandler::TestCommand; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); } @@ -271,4 +275,40 @@ namespace WorldserverCommandHandler { database_dump_service->Dump(); } + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Test command"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + if (!RuleManager::Instance()->LoadRules(&database, "default", false)) { + LogInfo("No rule set configured, using default rules"); + } + + content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion)); + + std::vector flags = { + "hateplane_enabled", + "patch_nerf_7077", + }; + + content_service.SetContentFlags(flags); + + LogInfo( + "Current expansion is [{}] ({}) is Velious Enabled [{}] Criteria [{}]", + content_service.GetCurrentExpansion(), + Expansion::ExpansionName[content_service.GetCurrentExpansion()], + content_service.IsTheShardsOfVeliousEnabled() ? "true" : "false", + ContentFilterCriteria::apply() + ); + } + } \ No newline at end of file diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index a32a78f0f..5291d7c24 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -31,6 +31,7 @@ namespace WorldserverCommandHandler { void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description); + void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); }; From 459303c0fe1645fed77f3c1a893ad766e9b49c30 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 2 Apr 2020 15:58:37 -0500 Subject: [PATCH 049/272] Hide test: command from the help output (Developer testing) [skip ci] --- common/cli/eqemu_command_handler.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/cli/eqemu_command_handler.cpp b/common/cli/eqemu_command_handler.cpp index 96ed5a155..d803d35d4 100644 --- a/common/cli/eqemu_command_handler.cpp +++ b/common/cli/eqemu_command_handler.cpp @@ -168,6 +168,11 @@ namespace EQEmuCommand { * Print section header */ std::string command_prefix = it.first.substr(0, it.first.find(":")); + + if (command_prefix.find("test") != std::string::npos) { + continue; + } + if (command_section != command_prefix) { command_section = command_prefix; std::cout << termcolor::reset << command_prefix << std::endl; From 1650a466a1cfc80ae36de73fc045cf10d1b357df Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 2 Apr 2020 19:38:26 -0500 Subject: [PATCH 050/272] Add instance list repository; split repository cmake config --- common/CMakeLists.txt | 18 +- .../repositories/instance_list_repository.h | 298 ++++++++++++++++++ world/world_server_command_handler.cpp | 94 ++++++ world/world_server_command_handler.h | 1 + 4 files changed, 404 insertions(+), 7 deletions(-) create mode 100644 common/repositories/instance_list_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 0990afd1b..1eff58828 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -109,6 +109,16 @@ SET(common_sources util/directory.cpp util/uuid.cpp) +SET(repositories + repositories/character_recipe_list_repository.h + repositories/criteria/content_filter_criteria.h + repositories/grid_repository.h + repositories/grid_entries_repository.h + repositories/spawngroup_repository.h + repositories/tradeskill_recipe_repository.h + repositories/instance_list_repository.h + ) + SET(common_headers any.h base_packet.h @@ -198,12 +208,6 @@ SET(common_headers queue.h races.h random.h - repositories/character_recipe_list_repository.h - repositories/criteria/content_filter_criteria.h - repositories/grid_repository.h - repositories/grid_entries_repository.h - repositories/spawngroup_repository.h - repositories/tradeskill_recipe_repository.h rdtsc.h rulesys.h ruletypes.h @@ -388,7 +392,7 @@ SOURCE_GROUP(Util FILES INCLUDE_DIRECTORIES(Patches SocketLib StackWalker) -ADD_LIBRARY(common ${common_sources} ${common_headers}) +ADD_LIBRARY(common ${common_sources} ${common_headers} ${repositories}) IF(UNIX) SET_SOURCE_FILES_PROPERTIES("SocketLib/Mime.cpp" PROPERTY COMPILE_FLAGS -Wno-unused-result) diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h new file mode 100644 index 000000000..aa7f0187a --- /dev/null +++ b/common/repositories/instance_list_repository.h @@ -0,0 +1,298 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_INSTANCE_LIST_REPOSITORY_H +#define EQEMU_INSTANCE_LIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class InstanceListRepository { +public: + struct InstanceList { + int id; + int zone; + int8 version; + int8 is_global; + int start_time; + int duration; + int8 never_expires; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "is_global", + "start_time", + "duration", + "never_expires", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("instance_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InstanceList NewEntity() + { + InstanceList entry{}; + + entry.id = 0; + entry.zone = 0; + entry.version = 0; + entry.is_global = 0; + entry.start_time = 0; + entry.duration = 0; + entry.never_expires = 0; + + return entry; + } + + static InstanceList GetInstanceListEntry( + const std::vector &instance_list, + int instance_list_id + ) + { + for (auto &row : instance_list) { + if (row.id == instance_list_id) { + return row; + } + } + + return NewEntity(); + } + + static InstanceList FindOne( + int instance_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + instance_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int instance_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + instance_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InstanceList instance_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(instance_list_entry.zone)); + update_values.push_back(columns[2] + " = " + std::to_string(instance_list_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(instance_list_entry.is_global)); + update_values.push_back(columns[4] + " = " + std::to_string(instance_list_entry.start_time)); + update_values.push_back(columns[5] + " = " + std::to_string(instance_list_entry.duration)); + update_values.push_back(columns[6] + " = " + std::to_string(instance_list_entry.never_expires)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + instance_list_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InstanceList InsertOne( + InstanceList instance_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(instance_list_entry.zone)); + insert_values.push_back(std::to_string(instance_list_entry.version)); + insert_values.push_back(std::to_string(instance_list_entry.is_global)); + insert_values.push_back(std::to_string(instance_list_entry.start_time)); + insert_values.push_back(std::to_string(instance_list_entry.duration)); + insert_values.push_back(std::to_string(instance_list_entry.never_expires)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + instance_list_entry.id = results.LastInsertedID(); + return instance_list_entry; + } + + instance_list_entry = InstanceListRepository::NewEntity(); + + return instance_list_entry; + } + + static int InsertMany( + std::vector instance_list_entries + ) + { + std::vector insert_chunks; + + for (auto &instance_list_entry: instance_list_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(instance_list_entry.zone)); + insert_values.push_back(std::to_string(instance_list_entry.version)); + insert_values.push_back(std::to_string(instance_list_entry.is_global)); + insert_values.push_back(std::to_string(instance_list_entry.start_time)); + insert_values.push_back(std::to_string(instance_list_entry.duration)); + insert_values.push_back(std::to_string(instance_list_entry.never_expires)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_INSTANCE_LIST_REPOSITORY_H diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 38991f604..0c7eb0ac1 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -28,6 +28,7 @@ #include "../common/content/world_content_service.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include "../common/rulesys.h" +#include "../common/repositories/instance_list_repository.h" namespace WorldserverCommandHandler { @@ -57,6 +58,7 @@ namespace WorldserverCommandHandler { function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema; function_map["database:dump"] = &WorldserverCommandHandler::DatabaseDump; function_map["test:test"] = &WorldserverCommandHandler::TestCommand; + function_map["test:repository"] = &WorldserverCommandHandler::TestRepository; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); } @@ -311,4 +313,96 @@ namespace WorldserverCommandHandler { ); } + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void TestRepository(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Test command"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + /** + * Insert one + */ + auto instance_list_entry = InstanceListRepository::NewEntity(); + + instance_list_entry.zone = 999; + instance_list_entry.version = 1; + instance_list_entry.is_global = 1; + instance_list_entry.start_time = 0; + instance_list_entry.duration = 0; + instance_list_entry.never_expires = 1; + + auto instance_list_inserted = InstanceListRepository::InsertOne(instance_list_entry); + + LogInfo("Inserted ID is [{}] zone [{}]", instance_list_inserted.id, instance_list_inserted.zone); + + /** + * Find one + */ + auto found_instance_list = InstanceListRepository::FindOne(instance_list_inserted.id); + + LogInfo("Found ID is [{}] zone [{}]", found_instance_list.id, found_instance_list.zone); + + /** + * Update one + */ + LogInfo("Updating instance id [{}] zone [{}]", found_instance_list.id, found_instance_list.zone); + + int update_instance_list_count = InstanceListRepository::UpdateOne(found_instance_list); + + found_instance_list.zone = 777; + + LogInfo( + "Updated instance id [{}] zone [{}] affected [{}]", + found_instance_list.id, + found_instance_list.zone, + update_instance_list_count + ); + + + /** + * Delete one + */ + int deleted = InstanceListRepository::DeleteOne(found_instance_list.id) ; + + LogInfo("Deleting one instance [{}] deleted count [{}]", found_instance_list.id, deleted); + + /** + * Insert many + */ + std::vector instance_lists; + + auto instance_list_entry_bulk = InstanceListRepository::NewEntity(); + + instance_list_entry_bulk.zone = 999; + instance_list_entry_bulk.version = 1; + instance_list_entry_bulk.is_global = 1; + instance_list_entry_bulk.start_time = 0; + instance_list_entry_bulk.duration = 0; + instance_list_entry_bulk.never_expires = 1; + + for (int i = 0; i < 10; i++) { + instance_lists.push_back(instance_list_entry_bulk); + } + + /** + * Fetch all + */ + int inserted_count = InstanceListRepository::InsertMany(instance_lists); + + LogInfo("Bulk insertion test, inserted [{}]", inserted_count); + + for (auto &entry: InstanceListRepository::All()) { + LogInfo("Iterating through entry id [{}] zone [{}]", entry.id, entry.zone); + } + + } + } \ No newline at end of file diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index 5291d7c24..66f81a130 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -32,6 +32,7 @@ namespace WorldserverCommandHandler { void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description); void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); + void TestRepository(int argc, char **argv, argh::parser &cmd, std::string &description); }; From 94ab6499c85f2fdc59c6b59e01f6fd39d55a1571 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:17:09 -0500 Subject: [PATCH 051/272] Create account_repository.h --- common/repositories/account_repository.h | 394 +++++++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 common/repositories/account_repository.h diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h new file mode 100644 index 000000000..6d8b51a9e --- /dev/null +++ b/common/repositories/account_repository.h @@ -0,0 +1,394 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ACCOUNT_REPOSITORY_H +#define EQEMU_ACCOUNT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AccountRepository { +public: + struct Account { + int id; + std::string name; + std::string charname; + int sharedplat; + std::string password; + int status; + std::string ls_id; + int lsaccount_id; + int gmspeed; + int revoked; + int karma; + std::string minilogin_ip; + int hideme; + int rulesflag; + std::string suspendeduntil; + int time_creation; + int expansion; + std::string ban_reason; + std::string suspend_reason; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id" + "name" + "charname" + "sharedplat" + "password" + "status" + "ls_id" + "lsaccount_id" + "gmspeed" + "revoked" + "karma" + "minilogin_ip" + "hideme" + "rulesflag" + "suspendeduntil" + "time_creation" + "expansion" + "ban_reason" + "suspend_reason" + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("{{TABLE_NAME}}"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Account NewEntity() + { + Account entry{}; + + entry.id = 0; + entry.name = ""; + entry.charname = ""; + entry.sharedplat = 0; + entry.password = ""; + entry.status = 0; + entry.ls_id = 'eqemu'; + entry.lsaccount_id = 0; + entry.gmspeed = 0; + entry.revoked = 0; + entry.karma = 0; + entry.minilogin_ip = ""; + entry.hideme = 0; + entry.rulesflag = 0; + entry.suspendeduntil = '0000-00-00 00:00:00'; + entry.time_creation = 0; + entry.expansion = 0; + entry.ban_reason = 0; + entry.suspend_reason = 0; + + return entry; + } + + static Account GetAccountEntry( + const std::vector &accounts, + int account_id + ) + { + for (auto &account : accounts) { + if (account.id == account_id) { + return account; + } + } + + return NewEntity(); + } + + static Account FindOne( + int account_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.charname = row[2]; + entry.sharedplat = atoi(row[3]); + entry.password = row[4]; + entry.status = atoi(row[5]); + entry.ls_id = row[6]; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11]; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14]; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17]; + entry.suspend_reason = row[18]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Account account_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(account_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(account_entry.charname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(account_entry.sharedplat)); + update_values.push_back(columns[4] + " = '" + EscapeString(account_entry.password) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(account_entry.status)); + update_values.push_back(columns[6] + " = '" + EscapeString(account_entry.ls_id) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(account_entry.lsaccount_id)); + update_values.push_back(columns[8] + " = " + std::to_string(account_entry.gmspeed)); + update_values.push_back(columns[9] + " = " + std::to_string(account_entry.revoked)); + update_values.push_back(columns[10] + " = " + std::to_string(account_entry.karma)); + update_values.push_back(columns[11] + " = '" + EscapeString(account_entry.minilogin_ip) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(account_entry.hideme)); + update_values.push_back(columns[13] + " = " + std::to_string(account_entry.rulesflag)); + update_values.push_back(columns[14] + " = '" + EscapeString(account_entry.suspendeduntil) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(account_entry.time_creation)); + update_values.push_back(columns[16] + " = " + std::to_string(account_entry.expansion)); + update_values.push_back(columns[17] + " = '" + EscapeString(account_entry.ban_reason) + "'"); + update_values.push_back(columns[18] + " = '" + EscapeString(account_entry.suspend_reason) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Account InsertOne( + Account account_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); + insert_values.push_back(std::to_string(account_entry.sharedplat)); + insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); + insert_values.push_back(std::to_string(account_entry.status)); + insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); + insert_values.push_back(std::to_string(account_entry.lsaccount_id)); + insert_values.push_back(std::to_string(account_entry.gmspeed)); + insert_values.push_back(std::to_string(account_entry.revoked)); + insert_values.push_back(std::to_string(account_entry.karma)); + insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); + insert_values.push_back(std::to_string(account_entry.hideme)); + insert_values.push_back(std::to_string(account_entry.rulesflag)); + insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); + insert_values.push_back(std::to_string(account_entry.time_creation)); + insert_values.push_back(std::to_string(account_entry.expansion)); + insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_entry.id = results.LastInsertedID(); + return account_entry; + } + + account_entry = InstanceListRepository::NewEntity(); + + return account_entry; + } + + static int InsertMany( + std::vector account_entries + ) + { + std::vector insert_chunks; + + for (auto &account_entry: account_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); + insert_values.push_back(std::to_string(account_entry.sharedplat)); + insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); + insert_values.push_back(std::to_string(account_entry.status)); + insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); + insert_values.push_back(std::to_string(account_entry.lsaccount_id)); + insert_values.push_back(std::to_string(account_entry.gmspeed)); + insert_values.push_back(std::to_string(account_entry.revoked)); + insert_values.push_back(std::to_string(account_entry.karma)); + insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); + insert_values.push_back(std::to_string(account_entry.hideme)); + insert_values.push_back(std::to_string(account_entry.rulesflag)); + insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); + insert_values.push_back(std::to_string(account_entry.time_creation)); + insert_values.push_back(std::to_string(account_entry.expansion)); + insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.charname = row[2]; + entry.sharedplat = atoi(row[3]); + entry.password = row[4]; + entry.status = atoi(row[5]); + entry.ls_id = row[6]; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11]; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14]; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17]; + entry.suspend_reason = row[18]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ACCOUNT_REPOSITORY_H From c0c1b5e6782655b0800d98d8cdbc19a2f3b0dd75 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:34:31 -0500 Subject: [PATCH 052/272] Move doc parser scripts to new generator folder --- utils/scripts/{ => generators}/lua-doc-parser.pl | 0 utils/scripts/{ => generators}/perl-doc-parser.pl | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename utils/scripts/{ => generators}/lua-doc-parser.pl (100%) rename utils/scripts/{ => generators}/perl-doc-parser.pl (100%) diff --git a/utils/scripts/lua-doc-parser.pl b/utils/scripts/generators/lua-doc-parser.pl similarity index 100% rename from utils/scripts/lua-doc-parser.pl rename to utils/scripts/generators/lua-doc-parser.pl diff --git a/utils/scripts/perl-doc-parser.pl b/utils/scripts/generators/perl-doc-parser.pl similarity index 100% rename from utils/scripts/perl-doc-parser.pl rename to utils/scripts/generators/perl-doc-parser.pl From 9e910ad90a93582ad140ea84e82dea26e4e0c972 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:34:37 -0500 Subject: [PATCH 053/272] Create repository-generator.pl --- .../generators/repository-generator.pl | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 utils/scripts/generators/repository-generator.pl diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl new file mode 100644 index 000000000..b5ae01e1c --- /dev/null +++ b/utils/scripts/generators/repository-generator.pl @@ -0,0 +1,297 @@ +#!/usr/bin/perl +use warnings FATAL => 'all'; + +# Author: Akkadius +# @file: repository-generator.pl +# @description: Script used to generate database repositories + +use File::Find; +use Data::Dumper; + +############################################# +# args +############################################# +my $eqemu_config = $ARGV[0]; +my $requested_table_to_generate = $ARGV[1]; + +my $i = 0; +while ($ARGV[$i]) { + # print "[$i] [" . $ARGV[$i] . "]\n"; + $i++; +} + +############################################# +# database +############################################# +use DBI; +use DBD::mysql; +use JSON; + +my $json = new JSON(); +my $content; +open(my $fh, '<', $eqemu_config) or die "cannot open file $eqemu_config"; { + local $/; + $content = <$fh>; +} +close($fh); + +############################################# +# database +############################################# +my $config = $json->decode($content); +my $database_name = $config->{"server"}{"database"}{"db"}; +my $host = $config->{"server"}{"database"}{"host"}; +my $user = $config->{"server"}{"database"}{"username"}; +my $pass = $config->{"server"}{"database"}{"password"}; +my $dsn = "dbi:mysql:$database_name:$host:3306"; +my $connect = DBI->connect($dsn, $user, $pass); + +my $table_names_exec = $connect->prepare( + " + SELECT + TABLE_NAME + FROM + INFORMATION_SCHEMA.COLUMNS + WHERE + TABLE_SCHEMA = ? + GROUP BY + TABLE_NAME + "; + +$table_names_exec->execute($database_name, $table_to_generate); + +my @tables = (); +while (my @row = $table_names_exec->fetchrow_array()) { + push(@tables, $row[0]); +} + +foreach my $table_to_generate (@tables) { + my $ex = $connect->prepare( + " + SELECT + COLUMN_NAME, + TABLE_NAME, + DATA_TYPE, + COLUMN_TYPE, + ORDINAL_POSITION, + COLUMN_KEY, + COLUMN_DEFAULT + FROM + INFORMATION_SCHEMA.COLUMNS + WHERE + TABLE_SCHEMA = ? + AND TABLE_NAME = ? + ORDER BY TABLE_NAME, ORDINAL_POSITION + " + ); + + $ex->execute($database_name, $table_to_generate); + + my $longest_column_length = 0; + my $longest_data_type_length = 0; + while (my @row = $ex->fetchrow_array()) { + my $column_name = $row[0]; + my $data_type = $row[2]; + + if ($longest_column_length < length($column_name)) { + $longest_column_length = length($column_name); + } + + my $struct_data_type = translate_mysql_data_type_to_c($data_type); + + if ($longest_data_type_length < length($struct_data_type)) { + $longest_data_type_length = length($struct_data_type); + } + } + + # 2nd pass + my $default_entries = ""; + my $insert_one_entries = ""; + my $insert_many_entries = ""; + my $find_one_entries = ""; + my $column_names_quoted = ""; + my $table_struct_columns = ""; + my $update_one_entries = ""; + my $all_entries = ""; + my $index = 0; + my %table_data = (); + my %table_primary_key = (); + $ex->execute($database_name, $table_to_generate); + while (my @row = $ex->fetchrow_array()) { + my $column_name = $row[0]; + my $table_name = $row[1]; + my $data_type = $row[2]; + my $column_type = $row[3]; + my $ordinal_position = $row[4]; + my $column_key = $row[5]; + my $column_default = ($row[6] ? $row[6] : ""); + + if ($column_key eq "PRI") { + $table_primary_key{$table_name} = $column_name; + } + + my $default_value = 0; + if ($column_default ne "NULL" && $column_default ne "") { + $default_value = $column_default; + } + if ($column_default eq "''") { + $default_value = '""'; + } + + my $struct_data_type = translate_mysql_data_type_to_c($data_type); + + # struct + $table_struct_columns .= sprintf("\t\t\%-${longest_data_type_length}s %s;\n", $struct_data_type, $column_name); + + # new entity + $default_entries .= sprintf("\t\tentry.%-${longest_column_length}s = %s;\n", $column_name, $default_value); + + # column names (string) + $column_names_quoted .= sprintf("\t\t\t\"%s\",\n", $column_name); + + # update one + if ($column_key ne "PRI") { + my $query_value = sprintf('\'" + EscapeString(%s_entry.%s) + "\'");', $table_name, $column_name); + if ($data_type =~ /int/) { + $query_value = sprintf('" + std::to_string(%s_entry.%s));', $table_name, $column_name); + } + + $update_one_entries .= sprintf( + "\t\t" . 'update_values.push_back(columns[%s] + " = %s' . "\n", + $index, + $query_value + ); + } + + # insert one + if ($column_key ne "PRI") { + my $value = sprintf("\"'\" + EscapeString(%s_entry.%s) + \"'\"", $table_name, $column_name); + if ($data_type =~ /int/) { + $value = sprintf('std::to_string(%s_entry.%s)', $table_name, $column_name); + } + + $insert_one_entries .= sprintf("\t\tinsert_values.push_back(%s);\n", $value); + $insert_many_entries .= sprintf("\t\t\tinsert_values.push_back(%s);\n", $value); + } + + # find one / all (select) + if ($data_type =~ /int/) { + $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); + $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); + } + elsif ($data_type =~ /float|double|decimal/) { + $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); + $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); + } + else { + $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s];\n", $column_name, $index); + $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s];\n", $column_name, $index); + } + + # print $column_name . "\n"; + + # print "table_name [$table_name] column_name [$column_name] data_type [$data_type] column_type [$column_type]\n"; + + $index++; + } + + ############################################# + # repository template + ############################################# + my $repository_template_file = './common/repositories/template/repository.template'; + my $repository_template = ""; + if (-e $repository_template_file) { + open(my $fh, '<:encoding(UTF-8)', $repository_template_file) or die "Could not open file '$repository_template_file' $!"; + + while (my $line = <$fh>) { + $repository_template .= $line; + } + + close $fh; + } + + if (trim($repository_template) eq "") { + print "Repository template not found! [$repository_template_file]\n"; + exit; + } + + foreach my $column (keys %{ $table_data{$table_to_generate} }) { + my $column_data = $table_data{$table_to_generate}{$column}; + my $data_type = $column_data->[0]; + my $column_type = $column_data->[1]; + my $ordinal_position = $column_data->[2]; + my $column_default = $column_data->[3]; + + # print "Column [$column] data_type [$data_type] column_type [$column_type] ordinal [$ordinal_position]\n"; + } + + my $table_name_camel_case = $table_to_generate; + my $table_name_upper_case = uc($table_to_generate); + $table_name_camel_case =~ s#(_|^)(.)#\u$2#g; + my $primary_key = ($table_primary_key{$table_to_generate} ? $table_primary_key{$table_to_generate} : ""); + my $database_connection = "database"; + + chomp($column_names_quoted); + chomp($table_struct_columns); + chomp($default_entries); + chomp($update_one_entries); + chomp($insert_one_entries); + chomp($insert_many_entries); + chomp($all_entries); + + print "Table name CamelCase [$table_name_camel_case]\n"; + print "Table name UPPER_CASE [$table_name_upper_case]\n"; + print "Table PRIMARY KEY [$primary_key]\n"; + print "Database connection [$database_connection]\n"; + + my $new_repository = $repository_template; + + $new_repository =~ s/\{\{TABLE_NAME_CLASS}}/$table_name_camel_case/g; + $new_repository =~ s/\{\{TABLE_NAME_UPPER}}/$table_name_upper_case/g; + $new_repository =~ s/\{\{PRIMARY_KEY_STRING}}/$primary_key/g; + $new_repository =~ s/\{\{TABLE_NAME_STRUCT}}/$table_name_camel_case/g; + $new_repository =~ s/\{\{TABLE_NAME_VAR}}/$table_to_generate/g; + $new_repository =~ s/\{\{DATABASE_CONNECTION}}/$database_connection/g; + $new_repository =~ s/\{\{DEFAULT_ENTRIES}}/$default_entries/g; + $new_repository =~ s/\{\{COLUMNS_LIST_QUOTED}}/$column_names_quoted/g; + $new_repository =~ s/\{\{TABLE_STRUCT_COLUMNS}}/$table_struct_columns/g; + $new_repository =~ s/\{\{FIND_ONE_ENTRIES}}/$find_one_entries/g; + $new_repository =~ s/\{\{UPDATE_ONE_ENTRIES}}/$update_one_entries/g; + $new_repository =~ s/\{\{INSERT_ONE_ENTRIES}}/$insert_one_entries/g; + $new_repository =~ s/\{\{INSERT_MANY_ENTRIES}}/$insert_many_entries/g; + $new_repository =~ s/\{\{ALL_ENTRIES}}/$all_entries/g; + + print $new_repository; + + my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; + + open(FH, '>', $generated_repository) or die $!; + + print FH $new_repository; + + close(FH); +} + +sub trim { + my $string = $_[0]; + $string =~ s/^\s+//; + $string =~ s/\s+$//; + return $string; +} + +sub translate_mysql_data_type_to_c { + my $mysql_data_type = $_[0]; + + my $struct_data_type = "std::string"; + if ($mysql_data_type =~ /tinyint/) { + $struct_data_type = 'int8'; + } + elsif ($mysql_data_type =~ /smallint/) { + $struct_data_type = 'int16'; + } + elsif ($mysql_data_type =~ /int/) { + $struct_data_type = 'int'; + } + + return $struct_data_type; +} \ No newline at end of file From fe718a6a1ddccd647c6aee54360d1737cdd4de4f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:34:43 -0500 Subject: [PATCH 054/272] Create repository.template --- .../repositories/template/repository.template | 252 ++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 common/repositories/template/repository.template diff --git a/common/repositories/template/repository.template b/common/repositories/template/repository.template new file mode 100644 index 000000000..e13624359 --- /dev/null +++ b/common/repositories/template/repository.template @@ -0,0 +1,252 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_{{TABLE_NAME_UPPER}}_REPOSITORY_H +#define EQEMU_{{TABLE_NAME_UPPER}}_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class {{TABLE_NAME_CLASS}}Repository { +public: + struct {{TABLE_NAME_STRUCT}} { +{{TABLE_STRUCT_COLUMNS}} + }; + + static std::string PrimaryKey() + { + return std::string("{{PRIMARY_KEY_STRING}}"); + } + + static std::vector Columns() + { + return { +{{COLUMNS_LIST_QUOTED}} + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("{{TABLE_NAME_VAR}}"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static {{TABLE_NAME_STRUCT}} NewEntity() + { + {{TABLE_NAME_STRUCT}} entry{}; + +{{DEFAULT_ENTRIES}} + + return entry; + } + + static {{TABLE_NAME_STRUCT}} Get{{TABLE_NAME_STRUCT}}Entry( + const std::vector<{{TABLE_NAME_STRUCT}}> &{{TABLE_NAME_VAR}}s, + int {{TABLE_NAME_VAR}}_id + ) + { + for (auto &{{TABLE_NAME_VAR}} : {{TABLE_NAME_VAR}}s) { + if ({{TABLE_NAME_VAR}}.{{PRIMARY_KEY_STRING}} == {{TABLE_NAME_VAR}}_id) { + return {{TABLE_NAME_VAR}}; + } + } + + return NewEntity(); + } + + static {{TABLE_NAME_STRUCT}} FindOne( + int {{TABLE_NAME_VAR}}_id + ) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + {{TABLE_NAME_VAR}}_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{FIND_ONE_ENTRIES}} + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int {{TABLE_NAME_VAR}}_id + ) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + {{TABLE_NAME_VAR}}_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + +{{UPDATE_ONE_ENTRIES}} + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + {{TABLE_NAME_VAR}}_entry.{{PRIMARY_KEY_STRING}} + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static {{TABLE_NAME_STRUCT}} InsertOne( + {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry + ) + { + std::vector insert_values; + +{{INSERT_ONE_ENTRIES}} + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + {{TABLE_NAME_VAR}}_entry.id = results.LastInsertedID(); + return {{TABLE_NAME_VAR}}_entry; + } + + {{TABLE_NAME_VAR}}_entry = InstanceListRepository::NewEntity(); + + return {{TABLE_NAME_VAR}}_entry; + } + + static int InsertMany( + std::vector<{{TABLE_NAME_STRUCT}}> {{TABLE_NAME_VAR}}_entries + ) + { + std::vector insert_chunks; + + for (auto &{{TABLE_NAME_VAR}}_entry: {{TABLE_NAME_VAR}}_entries) { + std::vector insert_values; + +{{INSERT_MANY_ENTRIES}} + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector<{{TABLE_NAME_STRUCT}}> All() + { + std::vector<{{TABLE_NAME_STRUCT}}> all_entries; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{ALL_ENTRIES}} + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_{{TABLE_NAME_UPPER}}_REPOSITORY_H From f984bd2fafd8f989270139d7815d4214adc68b5e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:34:54 -0500 Subject: [PATCH 055/272] Update instance list repository with auto generated code --- common/repositories/instance_list_repository.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index aa7f0187a..cc2c113a3 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -113,13 +113,13 @@ public: } static InstanceList GetInstanceListEntry( - const std::vector &instance_list, + const std::vector &instance_lists, int instance_list_id ) { - for (auto &row : instance_list) { - if (row.id == instance_list_id) { - return row; + for (auto &instance_list : instance_lists) { + if (instance_list.id == instance_list_id) { + return instance_list; } } From 3c9fe45af57649db9e5cd41834d593d089ebc86f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 01:58:06 -0500 Subject: [PATCH 056/272] Update repository generator --- .../generators/repository-generator.pl | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index b5ae01e1c..2aba4ce7f 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -4,6 +4,7 @@ use warnings FATAL => 'all'; # Author: Akkadius # @file: repository-generator.pl # @description: Script used to generate database repositories +# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/eqemu_config.json use File::Find; use Data::Dumper; @@ -12,7 +13,7 @@ use Data::Dumper; # args ############################################# my $eqemu_config = $ARGV[0]; -my $requested_table_to_generate = $ARGV[1]; +my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : ""; my $i = 0; while ($ARGV[$i]) { @@ -20,6 +21,11 @@ while ($ARGV[$i]) { $i++; } +if (!-e $eqemu_config) { + print "Error! Config file [$eqemu_config] not found\n"; + exit; +} + ############################################# # database ############################################# @@ -46,25 +52,30 @@ my $pass = $config->{"server"}{"database"}{"password"}; my $dsn = "dbi:mysql:$database_name:$host:3306"; my $connect = DBI->connect($dsn, $user, $pass); -my $table_names_exec = $connect->prepare( - " - SELECT - TABLE_NAME - FROM - INFORMATION_SCHEMA.COLUMNS - WHERE - TABLE_SCHEMA = ? - GROUP BY - TABLE_NAME - "; - -$table_names_exec->execute($database_name, $table_to_generate); - my @tables = (); -while (my @row = $table_names_exec->fetchrow_array()) { - push(@tables, $row[0]); +if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { + + my $table_names_exec = $connect->prepare( + " + SELECT + TABLE_NAME + FROM + INFORMATION_SCHEMA.COLUMNS + WHERE + TABLE_SCHEMA = ? + GROUP BY + TABLE_NAME + "); + + $table_names_exec->execute($database_name); + + while (my @row = $table_names_exec->fetchrow_array()) { + push(@tables, $row[0]); + } } +my $generated_repository_files = ""; + foreach my $table_to_generate (@tables) { my $ex = $connect->prepare( " @@ -263,7 +274,12 @@ foreach my $table_to_generate (@tables) { print $new_repository; - my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; + my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; + my $cmake_generated_reference = $generated_repository; + + $cmake_generated_reference =~ s/.\/common\///g; + + $generated_repository_files .= $cmake_generated_reference . "\n"; open(FH, '>', $generated_repository) or die $!; @@ -272,6 +288,10 @@ foreach my $table_to_generate (@tables) { close(FH); } +print "\n# Make sure to add generated repositories to common/CMakeLists.txt under the repositories section\n\n"; + +print $generated_repository_files . "\n"; + sub trim { my $string = $_[0]; $string =~ s/^\s+//; From cbd2336442e022041105505227bf3ea7e5aa99af Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 02:38:37 -0500 Subject: [PATCH 057/272] Update repository generator to check for schema [skip ci] --- .../generators/repository-generator.pl | 76 +++++++++++++++---- 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 2aba4ce7f..4d47cfff0 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -1,41 +1,62 @@ #!/usr/bin/perl use warnings FATAL => 'all'; +no warnings 'experimental::smartmatch'; +use experimental 'smartmatch'; # Author: Akkadius # @file: repository-generator.pl # @description: Script used to generate database repositories -# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/eqemu_config.json +# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/ use File::Find; use Data::Dumper; +use DBI; +use DBD::mysql; +use JSON; +my $json = new JSON(); ############################################# # args ############################################# -my $eqemu_config = $ARGV[0]; +my $server_path = $ARGV[0]; +my $config_path = $server_path . "/eqemu_config.json"; my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : ""; -my $i = 0; -while ($ARGV[$i]) { - # print "[$i] [" . $ARGV[$i] . "]\n"; - $i++; +############################################# +# world path +############################################# +my $world_path = $server_path . "/world"; +my $world_path_bin = $server_path . "/bin/world"; +my $found_world_path = ""; + +if (-e $world_path) { + $found_world_path = $world_path; +} +elsif (-e $world_path_bin) { + $found_world_path = $world_path_bin; } -if (!-e $eqemu_config) { - print "Error! Config file [$eqemu_config] not found\n"; +if ($found_world_path eq "") { + print "Error! Cannot find world binary!\n"; exit; } +############################################# +# validate config +############################################# +if (!-e $config_path) { + print "Error! Config file [$config_path] not found\n"; + exit; +} + +my $output = `cd $server_path && $found_world_path database:schema`; +my $database_schema = $json->decode($output); + ############################################# # database ############################################# -use DBI; -use DBD::mysql; -use JSON; - -my $json = new JSON(); my $content; -open(my $fh, '<', $eqemu_config) or die "cannot open file $eqemu_config"; { +open(my $fh, '<', $config_path) or die "cannot open file $config_path"; { local $/; $content = <$fh>; } @@ -77,6 +98,29 @@ if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { my $generated_repository_files = ""; foreach my $table_to_generate (@tables) { + + my $table_found_in_schema = 0; + + my @categories = ( + "content_tables", + "version_tables", + "state_tables", + "server_tables", + "player_tables", + "login_tables", + ); + + foreach my $category (@categories) { + if ($table_to_generate ~~ $database_schema->{$category}) { + $table_found_in_schema = 1; + } + } + + if ($table_found_in_schema == 0) { + print "Table [$table_to_generate] not found in schema, skipping\n"; + next; + } + my $ex = $connect->prepare( " SELECT @@ -242,6 +286,10 @@ foreach my $table_to_generate (@tables) { my $primary_key = ($table_primary_key{$table_to_generate} ? $table_primary_key{$table_to_generate} : ""); my $database_connection = "database"; + if ($table_to_generate ~~ $database_schema->{"content_tables"}) { + $database_connection = "content_db"; + } + chomp($column_names_quoted); chomp($table_struct_columns); chomp($default_entries); From 494811c04b9807e27133cec9904690d5d7b93e3c Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 02:41:44 -0500 Subject: [PATCH 058/272] Update repository-generator.pl --- utils/scripts/generators/repository-generator.pl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 4d47cfff0..15bec02b0 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -1,13 +1,15 @@ #!/usr/bin/perl -use warnings FATAL => 'all'; -no warnings 'experimental::smartmatch'; -use experimental 'smartmatch'; - # Author: Akkadius # @file: repository-generator.pl # @description: Script used to generate database repositories # @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/ +############################################# +# modules +############################################# +use warnings FATAL => 'all'; +no warnings 'experimental::smartmatch'; +use experimental 'smartmatch'; use File::Find; use Data::Dumper; use DBI; @@ -49,6 +51,9 @@ if (!-e $config_path) { exit; } +############################################# +# fetch schema from world +############################################# my $output = `cd $server_path && $found_world_path database:schema`; my $database_schema = $json->decode($output); From 82b017887d41bf5a13535109d48b042aa500df47 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 02:49:40 -0500 Subject: [PATCH 059/272] Upload generated repositories --- common/repositories/aa_ability_repository.h | 354 +++ .../repositories/aa_rank_effects_repository.h | 279 ++ .../repositories/aa_rank_prereqs_repository.h | 263 ++ common/repositories/aa_ranks_repository.h | 346 +++ .../repositories/account_flags_repository.h | 263 ++ common/repositories/account_ip_repository.h | 271 ++ .../repositories/account_rewards_repository.h | 263 ++ .../adventure_details_repository.h | 314 ++ .../adventure_members_repository.h | 258 ++ .../repositories/adventure_stats_repository.h | 330 +++ ...venture_template_entry_flavor_repository.h | 258 ++ .../adventure_template_entry_repository.h | 258 ++ .../adventure_template_repository.h | 506 ++++ .../alternate_currency_repository.h | 258 ++ common/repositories/auras_repository.h | 330 +++ common/repositories/banned_ips_repository.h | 258 ++ common/repositories/base_data_repository.h | 324 +++ .../repositories/blocked_spells_repository.h | 338 +++ common/repositories/books_repository.h | 266 ++ common/repositories/bug_reports_repository.h | 498 ++++ common/repositories/bugs_repository.h | 346 +++ common/repositories/buyer_repository.h | 287 ++ .../char_create_combinations_repository.h | 281 ++ ...char_create_point_allocations_repository.h | 362 +++ .../char_recipe_list_repository.h | 263 ++ .../character_activities_repository.h | 276 ++ .../character_alt_currency_repository.h | 263 ++ ...character_alternate_abilities_repository.h | 271 ++ .../repositories/character_auras_repository.h | 263 ++ .../character_bandolier_repository.h | 284 ++ .../repositories/character_bind_repository.h | 303 ++ .../repositories/character_buffs_repository.h | 375 +++ .../character_corpse_items_repository.h | 327 +++ .../character_corpses_repository.h | 618 ++++ .../character_currency_repository.h | 378 +++ .../repositories/character_data_repository.h | 1058 +++++++ .../character_disciplines_repository.h | 263 ++ .../character_enabledtasks_repository.h | 255 ++ .../character_inspect_messages_repository.h | 260 ++ .../character_item_recast_repository.h | 263 ++ .../character_languages_repository.h | 263 ++ ...haracter_leadership_abilities_repository.h | 263 ++ .../character_material_repository.h | 295 ++ .../character_memmed_spells_repository.h | 263 ++ .../character_pet_buffs_repository.h | 324 +++ .../character_pet_info_repository.h | 303 ++ .../character_pet_inventory_repository.h | 268 ++ .../character_potionbelt_repository.h | 271 ++ .../character_skills_repository.h | 263 ++ .../character_spells_repository.h | 263 ++ .../repositories/character_tasks_repository.h | 279 ++ .../character_tribute_repository.h | 269 ++ common/repositories/chatchannels_repository.h | 274 ++ .../command_settings_repository.h | 266 ++ .../repositories/completed_tasks_repository.h | 268 ++ common/repositories/data_buckets_repository.h | 274 ++ common/repositories/db_str_repository.h | 263 ++ common/repositories/db_version_repository.h | 253 ++ .../discovered_items_repository.h | 274 ++ common/repositories/doors_repository.h | 490 ++++ common/repositories/eqtime_repository.h | 293 ++ common/repositories/eventlog_repository.h | 322 +++ .../faction_base_data_repository.h | 290 ++ .../faction_list_mod_repository.h | 274 ++ common/repositories/faction_list_repository.h | 266 ++ .../repositories/faction_values_repository.h | 271 ++ common/repositories/fishing_repository.h | 298 ++ common/repositories/forage_repository.h | 282 ++ common/repositories/friends_repository.h | 263 ++ common/repositories/global_loot_repository.h | 352 +++ common/repositories/gm_ips_repository.h | 263 ++ common/repositories/goallists_repository.h | 258 ++ common/repositories/graveyard_repository.h | 290 ++ common/repositories/grid_repository.h | 2 +- .../repositories/ground_spawns_repository.h | 354 +++ common/repositories/group_id_repository.h | 268 ++ .../repositories/group_leaders_repository.h | 314 ++ common/repositories/guild_bank_repository.h | 309 ++ .../repositories/guild_members_repository.h | 314 ++ common/repositories/guild_ranks_repository.h | 327 +++ .../repositories/guild_relations_repository.h | 263 ++ common/repositories/guilds_repository.h | 314 ++ common/repositories/hackers_repository.h | 290 ++ common/repositories/horses_repository.h | 290 ++ .../instance_list_player_repository.h | 258 ++ .../repositories/instance_list_repository.h | 14 +- common/repositories/inventory_repository.h | 367 +++ .../inventory_snapshots_repository.h | 372 +++ .../inventory_versions_repository.h | 269 ++ .../repositories/ip_exemptions_repository.h | 266 ++ common/repositories/item_tick_repository.h | 290 ++ common/repositories/items_repository.h | 2522 +++++++++++++++++ common/repositories/keyring_repository.h | 261 ++ common/repositories/launcher_repository.h | 258 ++ .../repositories/launcher_zones_repository.h | 263 ++ .../ldon_trap_entries_repository.h | 258 ++ .../ldon_trap_templates_repository.h | 282 ++ .../repositories/level_exp_mods_repository.h | 266 ++ common/repositories/lfguild_repository.h | 311 ++ .../repositories/login_accounts_repository.h | 314 ++ .../login_api_tokens_repository.h | 290 ++ .../login_server_admins_repository.h | 306 ++ .../login_server_list_types_repository.h | 258 ++ .../login_world_servers_repository.h | 323 +++ .../logsys_categories_repository.h | 282 ++ .../lootdrop_entries_repository.h | 311 ++ common/repositories/lootdrop_repository.h | 258 ++ .../loottable_entries_repository.h | 287 ++ common/repositories/loottable_repository.h | 290 ++ common/repositories/mail_repository.h | 306 ++ common/repositories/merchantlist_repository.h | 303 ++ .../merchantlist_temp_repository.h | 271 ++ common/repositories/name_filter_repository.h | 258 ++ common/repositories/npc_emotes_repository.h | 282 ++ .../npc_faction_entries_repository.h | 279 ++ common/repositories/npc_faction_repository.h | 274 ++ .../npc_scale_global_base_repository.h | 463 +++ .../npc_spells_effects_entries_repository.h | 306 ++ .../npc_spells_effects_repository.h | 266 ++ .../npc_spells_entries_repository.h | 338 +++ common/repositories/npc_spells_repository.h | 410 +++ common/repositories/npc_types_repository.h | 1218 ++++++++ .../repositories/npc_types_tint_repository.h | 474 ++++ .../repositories/object_contents_repository.h | 335 +++ common/repositories/object_repository.h | 450 +++ .../perl_event_export_settings_repository.h | 298 ++ common/repositories/petitions_repository.h | 370 +++ .../pets_equipmentset_entries_repository.h | 263 ++ .../pets_equipmentset_repository.h | 266 ++ common/repositories/pets_repository.h | 303 ++ .../player_titlesets_repository.h | 266 ++ .../repositories/profanity_list_repository.h | 253 ++ common/repositories/proximities_repository.h | 303 ++ .../repositories/quest_globals_repository.h | 281 ++ common/repositories/raid_details_repository.h | 274 ++ common/repositories/raid_leaders_repository.h | 317 +++ common/repositories/raid_members_repository.h | 314 ++ common/repositories/reports_repository.h | 274 ++ .../repositories/respawn_times_repository.h | 271 ++ common/repositories/rule_sets_repository.h | 258 ++ common/repositories/rule_values_repository.h | 271 ++ common/repositories/saylink_repository.h | 258 ++ common/repositories/sharedbank_repository.h | 333 +++ common/repositories/skill_caps_repository.h | 273 ++ common/repositories/spawn2_repository.h | 362 +++ .../spawn_condition_values_repository.h | 268 ++ .../spawn_conditions_repository.h | 279 ++ common/repositories/spawn_events_repository.h | 354 +++ common/repositories/spawnentry_repository.h | 271 ++ .../repositories/spell_buckets_repository.h | 266 ++ .../repositories/spell_globals_repository.h | 274 ++ common/repositories/spells_new_repository.h | 2138 ++++++++++++++ common/repositories/start_zones_repository.h | 353 +++ .../repositories/starting_items_repository.h | 311 ++ .../repositories/task_activities_repository.h | 359 +++ common/repositories/tasks_repository.h | 370 +++ common/repositories/tasksets_repository.h | 258 ++ common/repositories/timers_repository.h | 279 ++ common/repositories/titles_repository.h | 360 +++ common/repositories/trader_audit_repository.h | 301 ++ common/repositories/trader_repository.h | 287 ++ .../tradeskill_recipe_entries_repository.h | 306 ++ common/repositories/traps_repository.h | 410 +++ .../repositories/tribute_levels_repository.h | 271 ++ common/repositories/tributes_repository.h | 279 ++ common/repositories/variables_repository.h | 274 ++ .../veteran_reward_templates_repository.h | 279 ++ common/repositories/zone_flags_repository.h | 255 ++ common/repositories/zone_points_repository.h | 378 +++ common/repositories/zone_repository.h | 930 ++++++ 170 files changed, 57003 insertions(+), 8 deletions(-) create mode 100644 common/repositories/aa_ability_repository.h create mode 100644 common/repositories/aa_rank_effects_repository.h create mode 100644 common/repositories/aa_rank_prereqs_repository.h create mode 100644 common/repositories/aa_ranks_repository.h create mode 100644 common/repositories/account_flags_repository.h create mode 100644 common/repositories/account_ip_repository.h create mode 100644 common/repositories/account_rewards_repository.h create mode 100644 common/repositories/adventure_details_repository.h create mode 100644 common/repositories/adventure_members_repository.h create mode 100644 common/repositories/adventure_stats_repository.h create mode 100644 common/repositories/adventure_template_entry_flavor_repository.h create mode 100644 common/repositories/adventure_template_entry_repository.h create mode 100644 common/repositories/adventure_template_repository.h create mode 100644 common/repositories/alternate_currency_repository.h create mode 100644 common/repositories/auras_repository.h create mode 100644 common/repositories/banned_ips_repository.h create mode 100644 common/repositories/base_data_repository.h create mode 100644 common/repositories/blocked_spells_repository.h create mode 100644 common/repositories/books_repository.h create mode 100644 common/repositories/bug_reports_repository.h create mode 100644 common/repositories/bugs_repository.h create mode 100644 common/repositories/buyer_repository.h create mode 100644 common/repositories/char_create_combinations_repository.h create mode 100644 common/repositories/char_create_point_allocations_repository.h create mode 100644 common/repositories/char_recipe_list_repository.h create mode 100644 common/repositories/character_activities_repository.h create mode 100644 common/repositories/character_alt_currency_repository.h create mode 100644 common/repositories/character_alternate_abilities_repository.h create mode 100644 common/repositories/character_auras_repository.h create mode 100644 common/repositories/character_bandolier_repository.h create mode 100644 common/repositories/character_bind_repository.h create mode 100644 common/repositories/character_buffs_repository.h create mode 100644 common/repositories/character_corpse_items_repository.h create mode 100644 common/repositories/character_corpses_repository.h create mode 100644 common/repositories/character_currency_repository.h create mode 100644 common/repositories/character_data_repository.h create mode 100644 common/repositories/character_disciplines_repository.h create mode 100644 common/repositories/character_enabledtasks_repository.h create mode 100644 common/repositories/character_inspect_messages_repository.h create mode 100644 common/repositories/character_item_recast_repository.h create mode 100644 common/repositories/character_languages_repository.h create mode 100644 common/repositories/character_leadership_abilities_repository.h create mode 100644 common/repositories/character_material_repository.h create mode 100644 common/repositories/character_memmed_spells_repository.h create mode 100644 common/repositories/character_pet_buffs_repository.h create mode 100644 common/repositories/character_pet_info_repository.h create mode 100644 common/repositories/character_pet_inventory_repository.h create mode 100644 common/repositories/character_potionbelt_repository.h create mode 100644 common/repositories/character_skills_repository.h create mode 100644 common/repositories/character_spells_repository.h create mode 100644 common/repositories/character_tasks_repository.h create mode 100644 common/repositories/character_tribute_repository.h create mode 100644 common/repositories/chatchannels_repository.h create mode 100644 common/repositories/command_settings_repository.h create mode 100644 common/repositories/completed_tasks_repository.h create mode 100644 common/repositories/data_buckets_repository.h create mode 100644 common/repositories/db_str_repository.h create mode 100644 common/repositories/db_version_repository.h create mode 100644 common/repositories/discovered_items_repository.h create mode 100644 common/repositories/doors_repository.h create mode 100644 common/repositories/eqtime_repository.h create mode 100644 common/repositories/eventlog_repository.h create mode 100644 common/repositories/faction_base_data_repository.h create mode 100644 common/repositories/faction_list_mod_repository.h create mode 100644 common/repositories/faction_list_repository.h create mode 100644 common/repositories/faction_values_repository.h create mode 100644 common/repositories/fishing_repository.h create mode 100644 common/repositories/forage_repository.h create mode 100644 common/repositories/friends_repository.h create mode 100644 common/repositories/global_loot_repository.h create mode 100644 common/repositories/gm_ips_repository.h create mode 100644 common/repositories/goallists_repository.h create mode 100644 common/repositories/graveyard_repository.h create mode 100644 common/repositories/ground_spawns_repository.h create mode 100644 common/repositories/group_id_repository.h create mode 100644 common/repositories/group_leaders_repository.h create mode 100644 common/repositories/guild_bank_repository.h create mode 100644 common/repositories/guild_members_repository.h create mode 100644 common/repositories/guild_ranks_repository.h create mode 100644 common/repositories/guild_relations_repository.h create mode 100644 common/repositories/guilds_repository.h create mode 100644 common/repositories/hackers_repository.h create mode 100644 common/repositories/horses_repository.h create mode 100644 common/repositories/instance_list_player_repository.h create mode 100644 common/repositories/inventory_repository.h create mode 100644 common/repositories/inventory_snapshots_repository.h create mode 100644 common/repositories/inventory_versions_repository.h create mode 100644 common/repositories/ip_exemptions_repository.h create mode 100644 common/repositories/item_tick_repository.h create mode 100644 common/repositories/items_repository.h create mode 100644 common/repositories/keyring_repository.h create mode 100644 common/repositories/launcher_repository.h create mode 100644 common/repositories/launcher_zones_repository.h create mode 100644 common/repositories/ldon_trap_entries_repository.h create mode 100644 common/repositories/ldon_trap_templates_repository.h create mode 100644 common/repositories/level_exp_mods_repository.h create mode 100644 common/repositories/lfguild_repository.h create mode 100644 common/repositories/login_accounts_repository.h create mode 100644 common/repositories/login_api_tokens_repository.h create mode 100644 common/repositories/login_server_admins_repository.h create mode 100644 common/repositories/login_server_list_types_repository.h create mode 100644 common/repositories/login_world_servers_repository.h create mode 100644 common/repositories/logsys_categories_repository.h create mode 100644 common/repositories/lootdrop_entries_repository.h create mode 100644 common/repositories/lootdrop_repository.h create mode 100644 common/repositories/loottable_entries_repository.h create mode 100644 common/repositories/loottable_repository.h create mode 100644 common/repositories/mail_repository.h create mode 100644 common/repositories/merchantlist_repository.h create mode 100644 common/repositories/merchantlist_temp_repository.h create mode 100644 common/repositories/name_filter_repository.h create mode 100644 common/repositories/npc_emotes_repository.h create mode 100644 common/repositories/npc_faction_entries_repository.h create mode 100644 common/repositories/npc_faction_repository.h create mode 100644 common/repositories/npc_scale_global_base_repository.h create mode 100644 common/repositories/npc_spells_effects_entries_repository.h create mode 100644 common/repositories/npc_spells_effects_repository.h create mode 100644 common/repositories/npc_spells_entries_repository.h create mode 100644 common/repositories/npc_spells_repository.h create mode 100644 common/repositories/npc_types_repository.h create mode 100644 common/repositories/npc_types_tint_repository.h create mode 100644 common/repositories/object_contents_repository.h create mode 100644 common/repositories/object_repository.h create mode 100644 common/repositories/perl_event_export_settings_repository.h create mode 100644 common/repositories/petitions_repository.h create mode 100644 common/repositories/pets_equipmentset_entries_repository.h create mode 100644 common/repositories/pets_equipmentset_repository.h create mode 100644 common/repositories/pets_repository.h create mode 100644 common/repositories/player_titlesets_repository.h create mode 100644 common/repositories/profanity_list_repository.h create mode 100644 common/repositories/proximities_repository.h create mode 100644 common/repositories/quest_globals_repository.h create mode 100644 common/repositories/raid_details_repository.h create mode 100644 common/repositories/raid_leaders_repository.h create mode 100644 common/repositories/raid_members_repository.h create mode 100644 common/repositories/reports_repository.h create mode 100644 common/repositories/respawn_times_repository.h create mode 100644 common/repositories/rule_sets_repository.h create mode 100644 common/repositories/rule_values_repository.h create mode 100644 common/repositories/saylink_repository.h create mode 100644 common/repositories/sharedbank_repository.h create mode 100644 common/repositories/skill_caps_repository.h create mode 100644 common/repositories/spawn2_repository.h create mode 100644 common/repositories/spawn_condition_values_repository.h create mode 100644 common/repositories/spawn_conditions_repository.h create mode 100644 common/repositories/spawn_events_repository.h create mode 100644 common/repositories/spawnentry_repository.h create mode 100644 common/repositories/spell_buckets_repository.h create mode 100644 common/repositories/spell_globals_repository.h create mode 100644 common/repositories/spells_new_repository.h create mode 100644 common/repositories/start_zones_repository.h create mode 100644 common/repositories/starting_items_repository.h create mode 100644 common/repositories/task_activities_repository.h create mode 100644 common/repositories/tasks_repository.h create mode 100644 common/repositories/tasksets_repository.h create mode 100644 common/repositories/timers_repository.h create mode 100644 common/repositories/titles_repository.h create mode 100644 common/repositories/trader_audit_repository.h create mode 100644 common/repositories/trader_repository.h create mode 100644 common/repositories/tradeskill_recipe_entries_repository.h create mode 100644 common/repositories/traps_repository.h create mode 100644 common/repositories/tribute_levels_repository.h create mode 100644 common/repositories/tributes_repository.h create mode 100644 common/repositories/variables_repository.h create mode 100644 common/repositories/veteran_reward_templates_repository.h create mode 100644 common/repositories/zone_flags_repository.h create mode 100644 common/repositories/zone_points_repository.h create mode 100644 common/repositories/zone_repository.h diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h new file mode 100644 index 000000000..3873b7e61 --- /dev/null +++ b/common/repositories/aa_ability_repository.h @@ -0,0 +1,354 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_AA_ABILITY_REPOSITORY_H +#define EQEMU_AA_ABILITY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AaAbilityRepository { +public: + struct AaAbility { + int id; + std::string name; + int category; + int classes; + int races; + int drakkin_heritage; + int deities; + int status; + int type; + int charges; + int8 grant_only; + int first_rank_id; + int8 enabled; + int8 reset_on_death; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "category", + "classes", + "races", + "drakkin_heritage", + "deities", + "status", + "type", + "charges", + "grant_only", + "first_rank_id", + "enabled", + "reset_on_death", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_ability"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaAbility NewEntity() + { + AaAbility entry{}; + + entry.id = 0; + entry.name = 0; + entry.category = -1; + entry.classes = 131070; + entry.races = 65535; + entry.drakkin_heritage = 127; + entry.deities = 131071; + entry.status = 0; + entry.type = 0; + entry.charges = 0; + entry.grant_only = 0; + entry.first_rank_id = -1; + entry.enabled = 1; + entry.reset_on_death = 0; + + return entry; + } + + static AaAbility GetAaAbilityEntry( + const std::vector &aa_abilitys, + int aa_ability_id + ) + { + for (auto &aa_ability : aa_abilitys) { + if (aa_ability.id == aa_ability_id) { + return aa_ability; + } + } + + return NewEntity(); + } + + static AaAbility FindOne( + int aa_ability_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_ability_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_ability_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_ability_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaAbility aa_ability_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(aa_ability_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(aa_ability_entry.category)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_ability_entry.classes)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_ability_entry.races)); + update_values.push_back(columns[5] + " = " + std::to_string(aa_ability_entry.drakkin_heritage)); + update_values.push_back(columns[6] + " = " + std::to_string(aa_ability_entry.deities)); + update_values.push_back(columns[7] + " = " + std::to_string(aa_ability_entry.status)); + update_values.push_back(columns[8] + " = " + std::to_string(aa_ability_entry.type)); + update_values.push_back(columns[9] + " = " + std::to_string(aa_ability_entry.charges)); + update_values.push_back(columns[10] + " = " + std::to_string(aa_ability_entry.grant_only)); + update_values.push_back(columns[11] + " = " + std::to_string(aa_ability_entry.first_rank_id)); + update_values.push_back(columns[12] + " = " + std::to_string(aa_ability_entry.enabled)); + update_values.push_back(columns[13] + " = " + std::to_string(aa_ability_entry.reset_on_death)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_ability_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaAbility InsertOne( + AaAbility aa_ability_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); + insert_values.push_back(std::to_string(aa_ability_entry.category)); + insert_values.push_back(std::to_string(aa_ability_entry.classes)); + insert_values.push_back(std::to_string(aa_ability_entry.races)); + insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(aa_ability_entry.deities)); + insert_values.push_back(std::to_string(aa_ability_entry.status)); + insert_values.push_back(std::to_string(aa_ability_entry.type)); + insert_values.push_back(std::to_string(aa_ability_entry.charges)); + insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); + insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); + insert_values.push_back(std::to_string(aa_ability_entry.enabled)); + insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_ability_entry.id = results.LastInsertedID(); + return aa_ability_entry; + } + + aa_ability_entry = InstanceListRepository::NewEntity(); + + return aa_ability_entry; + } + + static int InsertMany( + std::vector aa_ability_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_ability_entry: aa_ability_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); + insert_values.push_back(std::to_string(aa_ability_entry.category)); + insert_values.push_back(std::to_string(aa_ability_entry.classes)); + insert_values.push_back(std::to_string(aa_ability_entry.races)); + insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(aa_ability_entry.deities)); + insert_values.push_back(std::to_string(aa_ability_entry.status)); + insert_values.push_back(std::to_string(aa_ability_entry.type)); + insert_values.push_back(std::to_string(aa_ability_entry.charges)); + insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); + insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); + insert_values.push_back(std::to_string(aa_ability_entry.enabled)); + insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_AA_ABILITY_REPOSITORY_H diff --git a/common/repositories/aa_rank_effects_repository.h b/common/repositories/aa_rank_effects_repository.h new file mode 100644 index 000000000..27d830db5 --- /dev/null +++ b/common/repositories/aa_rank_effects_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_AA_RANK_EFFECTS_REPOSITORY_H +#define EQEMU_AA_RANK_EFFECTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AaRankEffectsRepository { +public: + struct AaRankEffects { + int rank_id; + int slot; + int effect_id; + int base1; + int base2; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "rank_id", + "slot", + "effect_id", + "base1", + "base2", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_rank_effects"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRankEffects NewEntity() + { + AaRankEffects entry{}; + + entry.rank_id = 0; + entry.slot = 1; + entry.effect_id = 0; + entry.base1 = 0; + entry.base2 = 0; + + return entry; + } + + static AaRankEffects GetAaRankEffectsEntry( + const std::vector &aa_rank_effectss, + int aa_rank_effects_id + ) + { + for (auto &aa_rank_effects : aa_rank_effectss) { + if (aa_rank_effects.slot == aa_rank_effects_id) { + return aa_rank_effects; + } + } + + return NewEntity(); + } + + static AaRankEffects FindOne( + int aa_rank_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_rank_effects_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_rank_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_rank_effects_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRankEffects aa_rank_effects_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_effects_entry.effect_id)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_rank_effects_entry.base1)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_rank_effects_entry.base2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_rank_effects_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRankEffects InsertOne( + AaRankEffects aa_rank_effects_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_rank_effects_entry.id = results.LastInsertedID(); + return aa_rank_effects_entry; + } + + aa_rank_effects_entry = InstanceListRepository::NewEntity(); + + return aa_rank_effects_entry; + } + + static int InsertMany( + std::vector aa_rank_effects_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_rank_effects_entry: aa_rank_effects_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_AA_RANK_EFFECTS_REPOSITORY_H diff --git a/common/repositories/aa_rank_prereqs_repository.h b/common/repositories/aa_rank_prereqs_repository.h new file mode 100644 index 000000000..29e102adc --- /dev/null +++ b/common/repositories/aa_rank_prereqs_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_AA_RANK_PREREQS_REPOSITORY_H +#define EQEMU_AA_RANK_PREREQS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AaRankPrereqsRepository { +public: + struct AaRankPrereqs { + int rank_id; + int aa_id; + int points; + }; + + static std::string PrimaryKey() + { + return std::string("aa_id"); + } + + static std::vector Columns() + { + return { + "rank_id", + "aa_id", + "points", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_rank_prereqs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRankPrereqs NewEntity() + { + AaRankPrereqs entry{}; + + entry.rank_id = 0; + entry.aa_id = 0; + entry.points = 0; + + return entry; + } + + static AaRankPrereqs GetAaRankPrereqsEntry( + const std::vector &aa_rank_prereqss, + int aa_rank_prereqs_id + ) + { + for (auto &aa_rank_prereqs : aa_rank_prereqss) { + if (aa_rank_prereqs.aa_id == aa_rank_prereqs_id) { + return aa_rank_prereqs; + } + } + + return NewEntity(); + } + + static AaRankPrereqs FindOne( + int aa_rank_prereqs_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_rank_prereqs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_rank_prereqs_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_rank_prereqs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRankPrereqs aa_rank_prereqs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_prereqs_entry.points)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_rank_prereqs_entry.aa_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRankPrereqs InsertOne( + AaRankPrereqs aa_rank_prereqs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_rank_prereqs_entry.id = results.LastInsertedID(); + return aa_rank_prereqs_entry; + } + + aa_rank_prereqs_entry = InstanceListRepository::NewEntity(); + + return aa_rank_prereqs_entry; + } + + static int InsertMany( + std::vector aa_rank_prereqs_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_rank_prereqs_entry: aa_rank_prereqs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_AA_RANK_PREREQS_REPOSITORY_H diff --git a/common/repositories/aa_ranks_repository.h b/common/repositories/aa_ranks_repository.h new file mode 100644 index 000000000..fe0a556ad --- /dev/null +++ b/common/repositories/aa_ranks_repository.h @@ -0,0 +1,346 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_AA_RANKS_REPOSITORY_H +#define EQEMU_AA_RANKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AaRanksRepository { +public: + struct AaRanks { + int id; + int upper_hotkey_sid; + int lower_hotkey_sid; + int title_sid; + int desc_sid; + int cost; + int level_req; + int spell; + int spell_type; + int recast_time; + int expansion; + int prev_id; + int next_id; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "upper_hotkey_sid", + "lower_hotkey_sid", + "title_sid", + "desc_sid", + "cost", + "level_req", + "spell", + "spell_type", + "recast_time", + "expansion", + "prev_id", + "next_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_ranks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRanks NewEntity() + { + AaRanks entry{}; + + entry.id = 0; + entry.upper_hotkey_sid = -1; + entry.lower_hotkey_sid = -1; + entry.title_sid = -1; + entry.desc_sid = -1; + entry.cost = 1; + entry.level_req = 51; + entry.spell = -1; + entry.spell_type = 0; + entry.recast_time = 0; + entry.expansion = 0; + entry.prev_id = -1; + entry.next_id = -1; + + return entry; + } + + static AaRanks GetAaRanksEntry( + const std::vector &aa_rankss, + int aa_ranks_id + ) + { + for (auto &aa_ranks : aa_rankss) { + if (aa_ranks.id == aa_ranks_id) { + return aa_ranks; + } + } + + return NewEntity(); + } + + static AaRanks FindOne( + int aa_ranks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_ranks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_ranks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_ranks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRanks aa_ranks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(aa_ranks_entry.upper_hotkey_sid)); + update_values.push_back(columns[2] + " = " + std::to_string(aa_ranks_entry.lower_hotkey_sid)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_ranks_entry.title_sid)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_ranks_entry.desc_sid)); + update_values.push_back(columns[5] + " = " + std::to_string(aa_ranks_entry.cost)); + update_values.push_back(columns[6] + " = " + std::to_string(aa_ranks_entry.level_req)); + update_values.push_back(columns[7] + " = " + std::to_string(aa_ranks_entry.spell)); + update_values.push_back(columns[8] + " = " + std::to_string(aa_ranks_entry.spell_type)); + update_values.push_back(columns[9] + " = " + std::to_string(aa_ranks_entry.recast_time)); + update_values.push_back(columns[10] + " = " + std::to_string(aa_ranks_entry.expansion)); + update_values.push_back(columns[11] + " = " + std::to_string(aa_ranks_entry.prev_id)); + update_values.push_back(columns[12] + " = " + std::to_string(aa_ranks_entry.next_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_ranks_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRanks InsertOne( + AaRanks aa_ranks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.cost)); + insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); + insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); + insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); + insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); + insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_ranks_entry.id = results.LastInsertedID(); + return aa_ranks_entry; + } + + aa_ranks_entry = InstanceListRepository::NewEntity(); + + return aa_ranks_entry; + } + + static int InsertMany( + std::vector aa_ranks_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_ranks_entry: aa_ranks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.cost)); + insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); + insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); + insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); + insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); + insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_AA_RANKS_REPOSITORY_H diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h new file mode 100644 index 000000000..2181835f7 --- /dev/null +++ b/common/repositories/account_flags_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ACCOUNT_FLAGS_REPOSITORY_H +#define EQEMU_ACCOUNT_FLAGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AccountFlagsRepository { +public: + struct AccountFlags { + int p_accid; + std::string p_flag; + std::string p_value; + }; + + static std::string PrimaryKey() + { + return std::string("p_flag"); + } + + static std::vector Columns() + { + return { + "p_accid", + "p_flag", + "p_value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_flags"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountFlags NewEntity() + { + AccountFlags entry{}; + + entry.p_accid = 0; + entry.p_flag = 0; + entry.p_value = 0; + + return entry; + } + + static AccountFlags GetAccountFlagsEntry( + const std::vector &account_flagss, + int account_flags_id + ) + { + for (auto &account_flags : account_flagss) { + if (account_flags.p_flag == account_flags_id) { + return account_flags; + } + } + + return NewEntity(); + } + + static AccountFlags FindOne( + int account_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_flags_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1]; + entry.p_value = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_flags_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountFlags account_flags_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(account_flags_entry.p_value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_flags_entry.p_flag + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountFlags InsertOne( + AccountFlags account_flags_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_flags_entry.id = results.LastInsertedID(); + return account_flags_entry; + } + + account_flags_entry = InstanceListRepository::NewEntity(); + + return account_flags_entry; + } + + static int InsertMany( + std::vector account_flags_entries + ) + { + std::vector insert_chunks; + + for (auto &account_flags_entry: account_flags_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1]; + entry.p_value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ACCOUNT_FLAGS_REPOSITORY_H diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h new file mode 100644 index 000000000..77c7d41d0 --- /dev/null +++ b/common/repositories/account_ip_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ACCOUNT_IP_REPOSITORY_H +#define EQEMU_ACCOUNT_IP_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AccountIpRepository { +public: + struct AccountIp { + int accid; + std::string ip; + int count; + std::string lastused; + }; + + static std::string PrimaryKey() + { + return std::string("ip"); + } + + static std::vector Columns() + { + return { + "accid", + "ip", + "count", + "lastused", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_ip"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountIp NewEntity() + { + AccountIp entry{}; + + entry.accid = 0; + entry.ip = ""; + entry.count = 1; + entry.lastused = current_timestamp(); + + return entry; + } + + static AccountIp GetAccountIpEntry( + const std::vector &account_ips, + int account_ip_id + ) + { + for (auto &account_ip : account_ips) { + if (account_ip.ip == account_ip_id) { + return account_ip; + } + } + + return NewEntity(); + } + + static AccountIp FindOne( + int account_ip_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_ip_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1]; + entry.count = atoi(row[2]); + entry.lastused = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_ip_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_ip_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountIp account_ip_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(account_ip_entry.count)); + update_values.push_back(columns[3] + " = '" + EscapeString(account_ip_entry.lastused) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_ip_entry.ip + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountIp InsertOne( + AccountIp account_ip_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_ip_entry.count)); + insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_ip_entry.id = results.LastInsertedID(); + return account_ip_entry; + } + + account_ip_entry = InstanceListRepository::NewEntity(); + + return account_ip_entry; + } + + static int InsertMany( + std::vector account_ip_entries + ) + { + std::vector insert_chunks; + + for (auto &account_ip_entry: account_ip_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_ip_entry.count)); + insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1]; + entry.count = atoi(row[2]); + entry.lastused = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ACCOUNT_IP_REPOSITORY_H diff --git a/common/repositories/account_rewards_repository.h b/common/repositories/account_rewards_repository.h new file mode 100644 index 000000000..5a0a113ba --- /dev/null +++ b/common/repositories/account_rewards_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ACCOUNT_REWARDS_REPOSITORY_H +#define EQEMU_ACCOUNT_REWARDS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AccountRewardsRepository { +public: + struct AccountRewards { + int account_id; + int reward_id; + int amount; + }; + + static std::string PrimaryKey() + { + return std::string("reward_id"); + } + + static std::vector Columns() + { + return { + "account_id", + "reward_id", + "amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_rewards"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountRewards NewEntity() + { + AccountRewards entry{}; + + entry.account_id = 0; + entry.reward_id = 0; + entry.amount = 0; + + return entry; + } + + static AccountRewards GetAccountRewardsEntry( + const std::vector &account_rewardss, + int account_rewards_id + ) + { + for (auto &account_rewards : account_rewardss) { + if (account_rewards.reward_id == account_rewards_id) { + return account_rewards; + } + } + + return NewEntity(); + } + + static AccountRewards FindOne( + int account_rewards_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_rewards_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_rewards_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_rewards_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountRewards account_rewards_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(account_rewards_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_rewards_entry.reward_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountRewards InsertOne( + AccountRewards account_rewards_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_rewards_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_rewards_entry.id = results.LastInsertedID(); + return account_rewards_entry; + } + + account_rewards_entry = InstanceListRepository::NewEntity(); + + return account_rewards_entry; + } + + static int InsertMany( + std::vector account_rewards_entries + ) + { + std::vector insert_chunks; + + for (auto &account_rewards_entry: account_rewards_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_rewards_entry.amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ACCOUNT_REWARDS_REPOSITORY_H diff --git a/common/repositories/adventure_details_repository.h b/common/repositories/adventure_details_repository.h new file mode 100644 index 000000000..19e3dbed8 --- /dev/null +++ b/common/repositories/adventure_details_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_DETAILS_REPOSITORY_H +#define EQEMU_ADVENTURE_DETAILS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureDetailsRepository { +public: + struct AdventureDetails { + int id; + int16 adventure_id; + int instance_id; + int16 count; + int16 assassinate_count; + int8 status; + int time_created; + int time_zoned; + int time_completed; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "adventure_id", + "instance_id", + "count", + "assassinate_count", + "status", + "time_created", + "time_zoned", + "time_completed", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_details"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureDetails NewEntity() + { + AdventureDetails entry{}; + + entry.id = 0; + entry.adventure_id = 0; + entry.instance_id = -1; + entry.count = 0; + entry.assassinate_count = 0; + entry.status = 0; + entry.time_created = 0; + entry.time_zoned = 0; + entry.time_completed = 0; + + return entry; + } + + static AdventureDetails GetAdventureDetailsEntry( + const std::vector &adventure_detailss, + int adventure_details_id + ) + { + for (auto &adventure_details : adventure_detailss) { + if (adventure_details.id == adventure_details_id) { + return adventure_details; + } + } + + return NewEntity(); + } + + static AdventureDetails FindOne( + int adventure_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_details_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_details_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureDetails adventure_details_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(adventure_details_entry.adventure_id)); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_details_entry.instance_id)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_details_entry.count)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_details_entry.assassinate_count)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_details_entry.status)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_details_entry.time_created)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_details_entry.time_zoned)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_details_entry.time_completed)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_details_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureDetails InsertOne( + AdventureDetails adventure_details_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); + insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); + insert_values.push_back(std::to_string(adventure_details_entry.count)); + insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); + insert_values.push_back(std::to_string(adventure_details_entry.status)); + insert_values.push_back(std::to_string(adventure_details_entry.time_created)); + insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); + insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_details_entry.id = results.LastInsertedID(); + return adventure_details_entry; + } + + adventure_details_entry = InstanceListRepository::NewEntity(); + + return adventure_details_entry; + } + + static int InsertMany( + std::vector adventure_details_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_details_entry: adventure_details_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); + insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); + insert_values.push_back(std::to_string(adventure_details_entry.count)); + insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); + insert_values.push_back(std::to_string(adventure_details_entry.status)); + insert_values.push_back(std::to_string(adventure_details_entry.time_created)); + insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); + insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_DETAILS_REPOSITORY_H diff --git a/common/repositories/adventure_members_repository.h b/common/repositories/adventure_members_repository.h new file mode 100644 index 000000000..10c221f4a --- /dev/null +++ b/common/repositories/adventure_members_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_MEMBERS_REPOSITORY_H +#define EQEMU_ADVENTURE_MEMBERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureMembersRepository { +public: + struct AdventureMembers { + int id; + int charid; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureMembers NewEntity() + { + AdventureMembers entry{}; + + entry.id = 0; + entry.charid = 0; + + return entry; + } + + static AdventureMembers GetAdventureMembersEntry( + const std::vector &adventure_memberss, + int adventure_members_id + ) + { + for (auto &adventure_members : adventure_memberss) { + if (adventure_members.charid == adventure_members_id) { + return adventure_members; + } + } + + return NewEntity(); + } + + static AdventureMembers FindOne( + int adventure_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureMembers adventure_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(adventure_members_entry.id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_members_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureMembers InsertOne( + AdventureMembers adventure_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_members_entry.id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_members_entry.id = results.LastInsertedID(); + return adventure_members_entry; + } + + adventure_members_entry = InstanceListRepository::NewEntity(); + + return adventure_members_entry; + } + + static int InsertMany( + std::vector adventure_members_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_members_entry: adventure_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_members_entry.id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_MEMBERS_REPOSITORY_H diff --git a/common/repositories/adventure_stats_repository.h b/common/repositories/adventure_stats_repository.h new file mode 100644 index 000000000..5b845f729 --- /dev/null +++ b/common/repositories/adventure_stats_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_STATS_REPOSITORY_H +#define EQEMU_ADVENTURE_STATS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureStatsRepository { +public: + struct AdventureStats { + int player_id; + int guk_wins; + int mir_wins; + int mmc_wins; + int ruj_wins; + int tak_wins; + int guk_losses; + int mir_losses; + int mmc_losses; + int ruj_losses; + int tak_losses; + }; + + static std::string PrimaryKey() + { + return std::string("player_id"); + } + + static std::vector Columns() + { + return { + "player_id", + "guk_wins", + "mir_wins", + "mmc_wins", + "ruj_wins", + "tak_wins", + "guk_losses", + "mir_losses", + "mmc_losses", + "ruj_losses", + "tak_losses", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_stats"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureStats NewEntity() + { + AdventureStats entry{}; + + entry.player_id = 0; + entry.guk_wins = 0; + entry.mir_wins = 0; + entry.mmc_wins = 0; + entry.ruj_wins = 0; + entry.tak_wins = 0; + entry.guk_losses = 0; + entry.mir_losses = 0; + entry.mmc_losses = 0; + entry.ruj_losses = 0; + entry.tak_losses = 0; + + return entry; + } + + static AdventureStats GetAdventureStatsEntry( + const std::vector &adventure_statss, + int adventure_stats_id + ) + { + for (auto &adventure_stats : adventure_statss) { + if (adventure_stats.player_id == adventure_stats_id) { + return adventure_stats; + } + } + + return NewEntity(); + } + + static AdventureStats FindOne( + int adventure_stats_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_stats_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_stats_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_stats_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureStats adventure_stats_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(adventure_stats_entry.guk_wins)); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_stats_entry.mir_wins)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_stats_entry.mmc_wins)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_stats_entry.ruj_wins)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_stats_entry.tak_wins)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_stats_entry.guk_losses)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_stats_entry.mir_losses)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_stats_entry.mmc_losses)); + update_values.push_back(columns[9] + " = " + std::to_string(adventure_stats_entry.ruj_losses)); + update_values.push_back(columns[10] + " = " + std::to_string(adventure_stats_entry.tak_losses)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_stats_entry.player_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureStats InsertOne( + AdventureStats adventure_stats_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_stats_entry.id = results.LastInsertedID(); + return adventure_stats_entry; + } + + adventure_stats_entry = InstanceListRepository::NewEntity(); + + return adventure_stats_entry; + } + + static int InsertMany( + std::vector adventure_stats_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_stats_entry: adventure_stats_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_STATS_REPOSITORY_H diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h new file mode 100644 index 000000000..703ebf513 --- /dev/null +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H +#define EQEMU_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureTemplateEntryFlavorRepository { +public: + struct AdventureTemplateEntryFlavor { + int id; + std::string text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template_entry_flavor"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplateEntryFlavor NewEntity() + { + AdventureTemplateEntryFlavor entry{}; + + entry.id = 0; + entry.text = 0; + + return entry; + } + + static AdventureTemplateEntryFlavor GetAdventureTemplateEntryFlavorEntry( + const std::vector &adventure_template_entry_flavors, + int adventure_template_entry_flavor_id + ) + { + for (auto &adventure_template_entry_flavor : adventure_template_entry_flavors) { + if (adventure_template_entry_flavor.id == adventure_template_entry_flavor_id) { + return adventure_template_entry_flavor; + } + } + + return NewEntity(); + } + + static AdventureTemplateEntryFlavor FindOne( + int adventure_template_entry_flavor_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_entry_flavor_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_entry_flavor_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_entry_flavor_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry_flavor_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplateEntryFlavor InsertOne( + AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry_flavor_entry.id = results.LastInsertedID(); + return adventure_template_entry_flavor_entry; + } + + adventure_template_entry_flavor_entry = InstanceListRepository::NewEntity(); + + return adventure_template_entry_flavor_entry; + } + + static int InsertMany( + std::vector adventure_template_entry_flavor_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry_flavor_entry: adventure_template_entry_flavor_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H diff --git a/common/repositories/adventure_template_entry_repository.h b/common/repositories/adventure_template_entry_repository.h new file mode 100644 index 000000000..844d3b3be --- /dev/null +++ b/common/repositories/adventure_template_entry_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H +#define EQEMU_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureTemplateEntryRepository { +public: + struct AdventureTemplateEntry { + int id; + int template_id; + }; + + static std::string PrimaryKey() + { + return std::string("template_id"); + } + + static std::vector Columns() + { + return { + "id", + "template_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template_entry"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplateEntry NewEntity() + { + AdventureTemplateEntry entry{}; + + entry.id = 0; + entry.template_id = 0; + + return entry; + } + + static AdventureTemplateEntry GetAdventureTemplateEntryEntry( + const std::vector &adventure_template_entrys, + int adventure_template_entry_id + ) + { + for (auto &adventure_template_entry : adventure_template_entrys) { + if (adventure_template_entry.template_id == adventure_template_entry_id) { + return adventure_template_entry; + } + } + + return NewEntity(); + } + + static AdventureTemplateEntry FindOne( + int adventure_template_entry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_entry_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_entry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_entry_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplateEntry adventure_template_entry_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry_entry.template_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplateEntry InsertOne( + AdventureTemplateEntry adventure_template_entry_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry_entry.id = results.LastInsertedID(); + return adventure_template_entry_entry; + } + + adventure_template_entry_entry = InstanceListRepository::NewEntity(); + + return adventure_template_entry_entry; + } + + static int InsertMany( + std::vector adventure_template_entry_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry_entry: adventure_template_entry_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h new file mode 100644 index 000000000..2087ae82a --- /dev/null +++ b/common/repositories/adventure_template_repository.h @@ -0,0 +1,506 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ADVENTURE_TEMPLATE_REPOSITORY_H +#define EQEMU_ADVENTURE_TEMPLATE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AdventureTemplateRepository { +public: + struct AdventureTemplate { + int id; + std::string zone; + int8 zone_version; + int8 is_hard; + int8 is_raid; + int8 min_level; + int8 max_level; + int8 type; + int type_data; + int16 type_count; + std::string assa_x; + std::string assa_y; + std::string assa_z; + std::string assa_h; + std::string text; + int duration; + int zone_in_time; + int16 win_points; + int16 lose_points; + int8 theme; + int16 zone_in_zone_id; + std::string zone_in_x; + std::string zone_in_y; + int16 zone_in_object_id; + std::string dest_x; + std::string dest_y; + std::string dest_z; + std::string dest_h; + int graveyard_zone_id; + std::string graveyard_x; + std::string graveyard_y; + std::string graveyard_z; + std::string graveyard_radius; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "zone_version", + "is_hard", + "is_raid", + "min_level", + "max_level", + "type", + "type_data", + "type_count", + "assa_x", + "assa_y", + "assa_z", + "assa_h", + "text", + "duration", + "zone_in_time", + "win_points", + "lose_points", + "theme", + "zone_in_zone_id", + "zone_in_x", + "zone_in_y", + "zone_in_object_id", + "dest_x", + "dest_y", + "dest_z", + "dest_h", + "graveyard_zone_id", + "graveyard_x", + "graveyard_y", + "graveyard_z", + "graveyard_radius", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplate NewEntity() + { + AdventureTemplate entry{}; + + entry.id = 0; + entry.zone = 0; + entry.zone_version = 0; + entry.is_hard = 0; + entry.is_raid = 0; + entry.min_level = 1; + entry.max_level = 65; + entry.type = 0; + entry.type_data = 0; + entry.type_count = 0; + entry.assa_x = 0; + entry.assa_y = 0; + entry.assa_z = 0; + entry.assa_h = 0; + entry.text = 0; + entry.duration = 7200; + entry.zone_in_time = 1800; + entry.win_points = 0; + entry.lose_points = 0; + entry.theme = 1; + entry.zone_in_zone_id = 0; + entry.zone_in_x = 0; + entry.zone_in_y = 0; + entry.zone_in_object_id = 0; + entry.dest_x = 0; + entry.dest_y = 0; + entry.dest_z = 0; + entry.dest_h = 0; + entry.graveyard_zone_id = 0; + entry.graveyard_x = 0; + entry.graveyard_y = 0; + entry.graveyard_z = 0; + entry.graveyard_radius = 0; + + return entry; + } + + static AdventureTemplate GetAdventureTemplateEntry( + const std::vector &adventure_templates, + int adventure_template_id + ) + { + for (auto &adventure_template : adventure_templates) { + if (adventure_template.id == adventure_template_id) { + return adventure_template; + } + } + + return NewEntity(); + } + + static AdventureTemplate FindOne( + int adventure_template_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14]; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplate adventure_template_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_template_entry.zone_version)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_template_entry.is_hard)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_template_entry.is_raid)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_template_entry.min_level)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_template_entry.max_level)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_template_entry.type)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_template_entry.type_data)); + update_values.push_back(columns[9] + " = " + std::to_string(adventure_template_entry.type_count)); + update_values.push_back(columns[10] + " = '" + EscapeString(adventure_template_entry.assa_x) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(adventure_template_entry.assa_y) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(adventure_template_entry.assa_z) + "'"); + update_values.push_back(columns[13] + " = '" + EscapeString(adventure_template_entry.assa_h) + "'"); + update_values.push_back(columns[14] + " = '" + EscapeString(adventure_template_entry.text) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(adventure_template_entry.duration)); + update_values.push_back(columns[16] + " = " + std::to_string(adventure_template_entry.zone_in_time)); + update_values.push_back(columns[17] + " = " + std::to_string(adventure_template_entry.win_points)); + update_values.push_back(columns[18] + " = " + std::to_string(adventure_template_entry.lose_points)); + update_values.push_back(columns[19] + " = " + std::to_string(adventure_template_entry.theme)); + update_values.push_back(columns[20] + " = " + std::to_string(adventure_template_entry.zone_in_zone_id)); + update_values.push_back(columns[21] + " = '" + EscapeString(adventure_template_entry.zone_in_x) + "'"); + update_values.push_back(columns[22] + " = '" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + update_values.push_back(columns[23] + " = " + std::to_string(adventure_template_entry.zone_in_object_id)); + update_values.push_back(columns[24] + " = '" + EscapeString(adventure_template_entry.dest_x) + "'"); + update_values.push_back(columns[25] + " = '" + EscapeString(adventure_template_entry.dest_y) + "'"); + update_values.push_back(columns[26] + " = '" + EscapeString(adventure_template_entry.dest_z) + "'"); + update_values.push_back(columns[27] + " = '" + EscapeString(adventure_template_entry.dest_h) + "'"); + update_values.push_back(columns[28] + " = " + std::to_string(adventure_template_entry.graveyard_zone_id)); + update_values.push_back(columns[29] + " = '" + EscapeString(adventure_template_entry.graveyard_x) + "'"); + update_values.push_back(columns[30] + " = '" + EscapeString(adventure_template_entry.graveyard_y) + "'"); + update_values.push_back(columns[31] + " = '" + EscapeString(adventure_template_entry.graveyard_z) + "'"); + update_values.push_back(columns[32] + " = '" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplate InsertOne( + AdventureTemplate adventure_template_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); + insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); + insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); + insert_values.push_back(std::to_string(adventure_template_entry.min_level)); + insert_values.push_back(std::to_string(adventure_template_entry.max_level)); + insert_values.push_back(std::to_string(adventure_template_entry.type)); + insert_values.push_back(std::to_string(adventure_template_entry.type_data)); + insert_values.push_back(std::to_string(adventure_template_entry.type_count)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_h) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.duration)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); + insert_values.push_back(std::to_string(adventure_template_entry.win_points)); + insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); + insert_values.push_back(std::to_string(adventure_template_entry.theme)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry.id = results.LastInsertedID(); + return adventure_template_entry; + } + + adventure_template_entry = InstanceListRepository::NewEntity(); + + return adventure_template_entry; + } + + static int InsertMany( + std::vector adventure_template_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry: adventure_template_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); + insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); + insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); + insert_values.push_back(std::to_string(adventure_template_entry.min_level)); + insert_values.push_back(std::to_string(adventure_template_entry.max_level)); + insert_values.push_back(std::to_string(adventure_template_entry.type)); + insert_values.push_back(std::to_string(adventure_template_entry.type_data)); + insert_values.push_back(std::to_string(adventure_template_entry.type_count)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_h) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.duration)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); + insert_values.push_back(std::to_string(adventure_template_entry.win_points)); + insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); + insert_values.push_back(std::to_string(adventure_template_entry.theme)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_x) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_y) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_z) + "'"); + insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14]; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ADVENTURE_TEMPLATE_REPOSITORY_H diff --git a/common/repositories/alternate_currency_repository.h b/common/repositories/alternate_currency_repository.h new file mode 100644 index 000000000..7c68b7b6d --- /dev/null +++ b/common/repositories/alternate_currency_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ALTERNATE_CURRENCY_REPOSITORY_H +#define EQEMU_ALTERNATE_CURRENCY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AlternateCurrencyRepository { +public: + struct AlternateCurrency { + int id; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("alternate_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AlternateCurrency NewEntity() + { + AlternateCurrency entry{}; + + entry.id = 0; + entry.item_id = 0; + + return entry; + } + + static AlternateCurrency GetAlternateCurrencyEntry( + const std::vector &alternate_currencys, + int alternate_currency_id + ) + { + for (auto &alternate_currency : alternate_currencys) { + if (alternate_currency.id == alternate_currency_id) { + return alternate_currency; + } + } + + return NewEntity(); + } + + static AlternateCurrency FindOne( + int alternate_currency_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + alternate_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int alternate_currency_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + alternate_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AlternateCurrency alternate_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(alternate_currency_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + alternate_currency_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AlternateCurrency InsertOne( + AlternateCurrency alternate_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + alternate_currency_entry.id = results.LastInsertedID(); + return alternate_currency_entry; + } + + alternate_currency_entry = InstanceListRepository::NewEntity(); + + return alternate_currency_entry; + } + + static int InsertMany( + std::vector alternate_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &alternate_currency_entry: alternate_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ALTERNATE_CURRENCY_REPOSITORY_H diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h new file mode 100644 index 000000000..5273ac0c5 --- /dev/null +++ b/common/repositories/auras_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_AURAS_REPOSITORY_H +#define EQEMU_AURAS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class AurasRepository { +public: + struct Auras { + int type; + int npc_type; + std::string name; + int spell_id; + int distance; + int aura_type; + int spawn_type; + int movement; + int duration; + int icon; + int cast_time; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "type", + "npc_type", + "name", + "spell_id", + "distance", + "aura_type", + "spawn_type", + "movement", + "duration", + "icon", + "cast_time", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("auras"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Auras NewEntity() + { + Auras entry{}; + + entry.type = 0; + entry.npc_type = 0; + entry.name = 0; + entry.spell_id = 0; + entry.distance = 60; + entry.aura_type = 1; + entry.spawn_type = 0; + entry.movement = 0; + entry.duration = 5400; + entry.icon = -1; + entry.cast_time = 0; + + return entry; + } + + static Auras GetAurasEntry( + const std::vector &aurass, + int auras_id + ) + { + for (auto &auras : aurass) { + if (auras.type == auras_id) { + return auras; + } + } + + return NewEntity(); + } + + static Auras FindOne( + int auras_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + auras_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2]; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int auras_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + auras_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Auras auras_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(auras_entry.npc_type)); + update_values.push_back(columns[2] + " = '" + EscapeString(auras_entry.name) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(auras_entry.spell_id)); + update_values.push_back(columns[4] + " = " + std::to_string(auras_entry.distance)); + update_values.push_back(columns[5] + " = " + std::to_string(auras_entry.aura_type)); + update_values.push_back(columns[6] + " = " + std::to_string(auras_entry.spawn_type)); + update_values.push_back(columns[7] + " = " + std::to_string(auras_entry.movement)); + update_values.push_back(columns[8] + " = " + std::to_string(auras_entry.duration)); + update_values.push_back(columns[9] + " = " + std::to_string(auras_entry.icon)); + update_values.push_back(columns[10] + " = " + std::to_string(auras_entry.cast_time)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + auras_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Auras InsertOne( + Auras auras_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(auras_entry.npc_type)); + insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); + insert_values.push_back(std::to_string(auras_entry.spell_id)); + insert_values.push_back(std::to_string(auras_entry.distance)); + insert_values.push_back(std::to_string(auras_entry.aura_type)); + insert_values.push_back(std::to_string(auras_entry.spawn_type)); + insert_values.push_back(std::to_string(auras_entry.movement)); + insert_values.push_back(std::to_string(auras_entry.duration)); + insert_values.push_back(std::to_string(auras_entry.icon)); + insert_values.push_back(std::to_string(auras_entry.cast_time)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + auras_entry.id = results.LastInsertedID(); + return auras_entry; + } + + auras_entry = InstanceListRepository::NewEntity(); + + return auras_entry; + } + + static int InsertMany( + std::vector auras_entries + ) + { + std::vector insert_chunks; + + for (auto &auras_entry: auras_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(auras_entry.npc_type)); + insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); + insert_values.push_back(std::to_string(auras_entry.spell_id)); + insert_values.push_back(std::to_string(auras_entry.distance)); + insert_values.push_back(std::to_string(auras_entry.aura_type)); + insert_values.push_back(std::to_string(auras_entry.spawn_type)); + insert_values.push_back(std::to_string(auras_entry.movement)); + insert_values.push_back(std::to_string(auras_entry.duration)); + insert_values.push_back(std::to_string(auras_entry.icon)); + insert_values.push_back(std::to_string(auras_entry.cast_time)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2]; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_AURAS_REPOSITORY_H diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h new file mode 100644 index 000000000..3ea08b845 --- /dev/null +++ b/common/repositories/banned_ips_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BANNED_IPS_REPOSITORY_H +#define EQEMU_BANNED_IPS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BannedIpsRepository { +public: + struct BannedIps { + std::string ip_address; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("ip_address"); + } + + static std::vector Columns() + { + return { + "ip_address", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("banned_ips"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BannedIps NewEntity() + { + BannedIps entry{}; + + entry.ip_address = 0; + entry.notes = 0; + + return entry; + } + + static BannedIps GetBannedIpsEntry( + const std::vector &banned_ipss, + int banned_ips_id + ) + { + for (auto &banned_ips : banned_ipss) { + if (banned_ips.ip_address == banned_ips_id) { + return banned_ips; + } + } + + return NewEntity(); + } + + static BannedIps FindOne( + int banned_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + banned_ips_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BannedIps entry{}; + + entry.ip_address = row[0]; + entry.notes = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int banned_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + banned_ips_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BannedIps banned_ips_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(banned_ips_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + banned_ips_entry.ip_address + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BannedIps InsertOne( + BannedIps banned_ips_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + banned_ips_entry.id = results.LastInsertedID(); + return banned_ips_entry; + } + + banned_ips_entry = InstanceListRepository::NewEntity(); + + return banned_ips_entry; + } + + static int InsertMany( + std::vector banned_ips_entries + ) + { + std::vector insert_chunks; + + for (auto &banned_ips_entry: banned_ips_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BannedIps entry{}; + + entry.ip_address = row[0]; + entry.notes = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BANNED_IPS_REPOSITORY_H diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h new file mode 100644 index 000000000..b5b2564a9 --- /dev/null +++ b/common/repositories/base_data_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BASE_DATA_REPOSITORY_H +#define EQEMU_BASE_DATA_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BaseDataRepository { +public: + struct BaseData { + int level; + int class; + std::string hp; + std::string mana; + std::string end; + std::string unk1; + std::string unk2; + std::string hp_fac; + std::string mana_fac; + std::string end_fac; + }; + + static std::string PrimaryKey() + { + return std::string("class"); + } + + static std::vector Columns() + { + return { + "level", + "class", + "hp", + "mana", + "end", + "unk1", + "unk2", + "hp_fac", + "mana_fac", + "end_fac", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("base_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BaseData NewEntity() + { + BaseData entry{}; + + entry.level = 0; + entry. + class = 0; + entry.hp = 0; + entry.mana = 0; + entry.end = 0; + entry.unk1 = 0; + entry.unk2 = 0; + entry.hp_fac = 0; + entry.mana_fac = 0; + entry.end_fac = 0; + + return entry; + } + + static BaseData GetBaseDataEntry( + const std::vector &base_datas, + int base_data_id + ) + { + for (auto &base_data : base_datas) { + if (base_data. { class }== base_data_id) { + return base_data; + } + } + + return NewEntity(); + } + + static BaseData FindOne( + int base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + base_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry. + class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + base_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BaseData base_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(base_data_entry.hp) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(base_data_entry.mana) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(base_data_entry.end) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(base_data_entry.unk1) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(base_data_entry.unk2) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(base_data_entry.hp_fac) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(base_data_entry.mana_fac) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(base_data_entry.end_fac) + "'"); + + auto + results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + base_data_entry. + class + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BaseData InsertOne( + BaseData base_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(base_data_entry.hp) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.mana) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.end) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.unk1) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.unk2) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.hp_fac) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.mana_fac) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.end_fac) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + base_data_entry.id = results.LastInsertedID(); + return base_data_entry; + } + + base_data_entry = InstanceListRepository::NewEntity(); + + return base_data_entry; + } + + static int InsertMany( + std::vector base_data_entries + ) + { + std::vector insert_chunks; + + for (auto &base_data_entry: base_data_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(base_data_entry.hp) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.mana) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.end) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.unk1) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.unk2) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.hp_fac) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.mana_fac) + "'"); + insert_values.push_back("'" + EscapeString(base_data_entry.end_fac) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry. + class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h new file mode 100644 index 000000000..613fd0c40 --- /dev/null +++ b/common/repositories/blocked_spells_repository.h @@ -0,0 +1,338 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BLOCKED_SPELLS_REPOSITORY_H +#define EQEMU_BLOCKED_SPELLS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BlockedSpellsRepository { +public: + struct BlockedSpells { + int id; + int spellid; + int8 type; + int zoneid; + std::string x; + std::string y; + std::string z; + std::string x_diff; + std::string y_diff; + std::string z_diff; + std::string message; + std::string description; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "spellid", + "type", + "zoneid", + "x", + "y", + "z", + "x_diff", + "y_diff", + "z_diff", + "message", + "description", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("blocked_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BlockedSpells NewEntity() + { + BlockedSpells entry{}; + + entry.id = 0; + entry.spellid = 0; + entry.type = 0; + entry.zoneid = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.x_diff = 0; + entry.y_diff = 0; + entry.z_diff = 0; + entry.message = ""; + entry.description = ""; + + return entry; + } + + static BlockedSpells GetBlockedSpellsEntry( + const std::vector &blocked_spellss, + int blocked_spells_id + ) + { + for (auto &blocked_spells : blocked_spellss) { + if (blocked_spells.id == blocked_spells_id) { + return blocked_spells; + } + } + + return NewEntity(); + } + + static BlockedSpells FindOne( + int blocked_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + blocked_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10]; + entry.description = row[11]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int blocked_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + blocked_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BlockedSpells blocked_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(blocked_spells_entry.spellid)); + update_values.push_back(columns[2] + " = " + std::to_string(blocked_spells_entry.type)); + update_values.push_back(columns[3] + " = " + std::to_string(blocked_spells_entry.zoneid)); + update_values.push_back(columns[4] + " = '" + EscapeString(blocked_spells_entry.x) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(blocked_spells_entry.y) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(blocked_spells_entry.z) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(blocked_spells_entry.x_diff) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(blocked_spells_entry.y_diff) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(blocked_spells_entry.z_diff) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(blocked_spells_entry.message) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(blocked_spells_entry.description) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + blocked_spells_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BlockedSpells InsertOne( + BlockedSpells blocked_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); + insert_values.push_back(std::to_string(blocked_spells_entry.type)); + insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.x_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.y_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.z_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + blocked_spells_entry.id = results.LastInsertedID(); + return blocked_spells_entry; + } + + blocked_spells_entry = InstanceListRepository::NewEntity(); + + return blocked_spells_entry; + } + + static int InsertMany( + std::vector blocked_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &blocked_spells_entry: blocked_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); + insert_values.push_back(std::to_string(blocked_spells_entry.type)); + insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.x_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.y_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.z_diff) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10]; + entry.description = row[11]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BLOCKED_SPELLS_REPOSITORY_H diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h new file mode 100644 index 000000000..f7927e41a --- /dev/null +++ b/common/repositories/books_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BOOKS_REPOSITORY_H +#define EQEMU_BOOKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BooksRepository { +public: + struct Books { + std::string name; + std::string txtfile; + int language; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "txtfile", + "language", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("books"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Books NewEntity() + { + Books entry{}; + + entry.name = ""; + entry.txtfile = 0; + entry.language = 0; + + return entry; + } + + static Books GetBooksEntry( + const std::vector &bookss, + int books_id + ) + { + for (auto &books : bookss) { + if (books.name == books_id) { + return books; + } + } + + return NewEntity(); + } + + static Books FindOne( + int books_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + books_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Books entry{}; + + entry.name = row[0]; + entry.txtfile = row[1]; + entry.language = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int books_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + books_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Books books_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(books_entry.txtfile) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(books_entry.language)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + books_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Books InsertOne( + Books books_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); + insert_values.push_back(std::to_string(books_entry.language)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + books_entry.id = results.LastInsertedID(); + return books_entry; + } + + books_entry = InstanceListRepository::NewEntity(); + + return books_entry; + } + + static int InsertMany( + std::vector books_entries + ) + { + std::vector insert_chunks; + + for (auto &books_entry: books_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); + insert_values.push_back(std::to_string(books_entry.language)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Books entry{}; + + entry.name = row[0]; + entry.txtfile = row[1]; + entry.language = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BOOKS_REPOSITORY_H diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h new file mode 100644 index 000000000..78a0b9af1 --- /dev/null +++ b/common/repositories/bug_reports_repository.h @@ -0,0 +1,498 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BUG_REPORTS_REPOSITORY_H +#define EQEMU_BUG_REPORTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BugReportsRepository { +public: + struct BugReports { + int id; + std::string zone; + int client_version_id; + std::string client_version_name; + int account_id; + int character_id; + std::string character_name; + int8 reporter_spoof; + int category_id; + std::string category_name; + std::string reporter_name; + std::string ui_path; + std::string pos_x; + std::string pos_y; + std::string pos_z; + int heading; + int time_played; + int target_id; + std::string target_name; + int optional_info_mask; + int8 _can_duplicate; + int8 _crash_bug; + int8 _target_info; + int8 _character_flags; + int8 _unknown_value; + std::string bug_report; + std::string system_info; + std::string report_datetime; + int8 bug_status; + std::string last_review; + std::string last_reviewer; + std::string reviewer_notes; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "client_version_id", + "client_version_name", + "account_id", + "character_id", + "character_name", + "reporter_spoof", + "category_id", + "category_name", + "reporter_name", + "ui_path", + "pos_x", + "pos_y", + "pos_z", + "heading", + "time_played", + "target_id", + "target_name", + "optional_info_mask", + "_can_duplicate", + "_crash_bug", + "_target_info", + "_character_flags", + "_unknown_value", + "bug_report", + "system_info", + "report_datetime", + "bug_status", + "last_review", + "last_reviewer", + "reviewer_notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("bug_reports"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BugReports NewEntity() + { + BugReports entry{}; + + entry.id = 0; + entry.zone = 'Unknown'; + entry.client_version_id = 0; + entry.client_version_name = 'Unknown'; + entry.account_id = 0; + entry.character_id = 0; + entry.character_name = 'Unknown'; + entry.reporter_spoof = 1; + entry.category_id = 0; + entry.category_name = 'Other'; + entry.reporter_name = 'Unknown'; + entry.ui_path = 'Unknown'; + entry.pos_x = 0; + entry.pos_y = 0; + entry.pos_z = 0; + entry.heading = 0; + entry.time_played = 0; + entry.target_id = 0; + entry.target_name = 'Unknown'; + entry.optional_info_mask = 0; + entry._can_duplicate = 0; + entry._crash_bug = 0; + entry._target_info = 0; + entry._character_flags = 0; + entry._unknown_value = 0; + entry.bug_report = ""; + entry.system_info = ""; + entry.report_datetime = current_timestamp(); + entry.bug_status = 0; + entry.last_review = current_timestamp(); + entry.last_reviewer = 'None'; + entry.reviewer_notes = ""; + + return entry; + } + + static BugReports GetBugReportsEntry( + const std::vector &bug_reportss, + int bug_reports_id + ) + { + for (auto &bug_reports : bug_reportss) { + if (bug_reports.id == bug_reports_id) { + return bug_reports; + } + } + + return NewEntity(); + } + + static BugReports FindOne( + int bug_reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + bug_reports_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3]; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6]; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9]; + entry.reporter_name = row[10]; + entry.ui_path = row[11]; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18]; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25]; + entry.system_info = row[26]; + entry.report_datetime = row[27]; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29]; + entry.last_reviewer = row[30]; + entry.reviewer_notes = row[31]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int bug_reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + bug_reports_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BugReports bug_reports_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(bug_reports_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(bug_reports_entry.client_version_id)); + update_values.push_back(columns[3] + " = '" + EscapeString(bug_reports_entry.client_version_name) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(bug_reports_entry.account_id)); + update_values.push_back(columns[5] + " = " + std::to_string(bug_reports_entry.character_id)); + update_values.push_back(columns[6] + " = '" + EscapeString(bug_reports_entry.character_name) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(bug_reports_entry.reporter_spoof)); + update_values.push_back(columns[8] + " = " + std::to_string(bug_reports_entry.category_id)); + update_values.push_back(columns[9] + " = '" + EscapeString(bug_reports_entry.category_name) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(bug_reports_entry.reporter_name) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(bug_reports_entry.ui_path) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(bug_reports_entry.pos_x) + "'"); + update_values.push_back(columns[13] + " = '" + EscapeString(bug_reports_entry.pos_y) + "'"); + update_values.push_back(columns[14] + " = '" + EscapeString(bug_reports_entry.pos_z) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(bug_reports_entry.heading)); + update_values.push_back(columns[16] + " = " + std::to_string(bug_reports_entry.time_played)); + update_values.push_back(columns[17] + " = " + std::to_string(bug_reports_entry.target_id)); + update_values.push_back(columns[18] + " = '" + EscapeString(bug_reports_entry.target_name) + "'"); + update_values.push_back(columns[19] + " = " + std::to_string(bug_reports_entry.optional_info_mask)); + update_values.push_back(columns[20] + " = " + std::to_string(bug_reports_entry._can_duplicate)); + update_values.push_back(columns[21] + " = " + std::to_string(bug_reports_entry._crash_bug)); + update_values.push_back(columns[22] + " = " + std::to_string(bug_reports_entry._target_info)); + update_values.push_back(columns[23] + " = " + std::to_string(bug_reports_entry._character_flags)); + update_values.push_back(columns[24] + " = " + std::to_string(bug_reports_entry._unknown_value)); + update_values.push_back(columns[25] + " = '" + EscapeString(bug_reports_entry.bug_report) + "'"); + update_values.push_back(columns[26] + " = '" + EscapeString(bug_reports_entry.system_info) + "'"); + update_values.push_back(columns[27] + " = '" + EscapeString(bug_reports_entry.report_datetime) + "'"); + update_values.push_back(columns[28] + " = " + std::to_string(bug_reports_entry.bug_status)); + update_values.push_back(columns[29] + " = '" + EscapeString(bug_reports_entry.last_review) + "'"); + update_values.push_back(columns[30] + " = '" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + update_values.push_back(columns[31] + " = '" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + bug_reports_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BugReports InsertOne( + BugReports bug_reports_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.account_id)); + insert_values.push_back(std::to_string(bug_reports_entry.character_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); + insert_values.push_back(std::to_string(bug_reports_entry.category_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_x) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_y) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_z) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.heading)); + insert_values.push_back(std::to_string(bug_reports_entry.time_played)); + insert_values.push_back(std::to_string(bug_reports_entry.target_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); + insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); + insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); + insert_values.push_back(std::to_string(bug_reports_entry._target_info)); + insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); + insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + bug_reports_entry.id = results.LastInsertedID(); + return bug_reports_entry; + } + + bug_reports_entry = InstanceListRepository::NewEntity(); + + return bug_reports_entry; + } + + static int InsertMany( + std::vector bug_reports_entries + ) + { + std::vector insert_chunks; + + for (auto &bug_reports_entry: bug_reports_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.account_id)); + insert_values.push_back(std::to_string(bug_reports_entry.character_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); + insert_values.push_back(std::to_string(bug_reports_entry.category_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_x) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_y) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_z) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.heading)); + insert_values.push_back(std::to_string(bug_reports_entry.time_played)); + insert_values.push_back(std::to_string(bug_reports_entry.target_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); + insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); + insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); + insert_values.push_back(std::to_string(bug_reports_entry._target_info)); + insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); + insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3]; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6]; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9]; + entry.reporter_name = row[10]; + entry.ui_path = row[11]; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18]; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25]; + entry.system_info = row[26]; + entry.report_datetime = row[27]; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29]; + entry.last_reviewer = row[30]; + entry.reviewer_notes = row[31]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BUG_REPORTS_REPOSITORY_H diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h new file mode 100644 index 000000000..db3a71c7e --- /dev/null +++ b/common/repositories/bugs_repository.h @@ -0,0 +1,346 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BUGS_REPOSITORY_H +#define EQEMU_BUGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BugsRepository { +public: + struct Bugs { + int id; + std::string zone; + std::string name; + std::string ui; + std::string x; + std::string y; + std::string z; + std::string type; + int8 flag; + std::string target; + std::string bug; + std::string date; + int8 status; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "name", + "ui", + "x", + "y", + "z", + "type", + "flag", + "target", + "bug", + "date", + "status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("bugs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Bugs NewEntity() + { + Bugs entry{}; + + entry.id = 0; + entry.zone = 0; + entry.name = 0; + entry.ui = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.type = 0; + entry.flag = 0; + entry.target = 0; + entry.bug = 0; + entry.date = 0; + entry.status = 0; + + return entry; + } + + static Bugs GetBugsEntry( + const std::vector &bugss, + int bugs_id + ) + { + for (auto &bugs : bugss) { + if (bugs.id == bugs_id) { + return bugs; + } + } + + return NewEntity(); + } + + static Bugs FindOne( + int bugs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + bugs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.name = row[2]; + entry.ui = row[3]; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7]; + entry.flag = atoi(row[8]); + entry.target = row[9]; + entry.bug = row[10]; + entry.date = row[11]; + entry.status = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int bugs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + bugs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Bugs bugs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(bugs_entry.zone) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(bugs_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(bugs_entry.ui) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(bugs_entry.x) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(bugs_entry.y) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(bugs_entry.z) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(bugs_entry.type) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(bugs_entry.flag)); + update_values.push_back(columns[9] + " = '" + EscapeString(bugs_entry.target) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(bugs_entry.bug) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(bugs_entry.date) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(bugs_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + bugs_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Bugs InsertOne( + Bugs bugs_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); + insert_values.push_back(std::to_string(bugs_entry.flag)); + insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); + insert_values.push_back(std::to_string(bugs_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + bugs_entry.id = results.LastInsertedID(); + return bugs_entry; + } + + bugs_entry = InstanceListRepository::NewEntity(); + + return bugs_entry; + } + + static int InsertMany( + std::vector bugs_entries + ) + { + std::vector insert_chunks; + + for (auto &bugs_entry: bugs_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); + insert_values.push_back(std::to_string(bugs_entry.flag)); + insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); + insert_values.push_back(std::to_string(bugs_entry.status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.name = row[2]; + entry.ui = row[3]; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7]; + entry.flag = atoi(row[8]); + entry.target = row[9]; + entry.bug = row[10]; + entry.date = row[11]; + entry.status = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BUGS_REPOSITORY_H diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h new file mode 100644 index 000000000..03f3a8946 --- /dev/null +++ b/common/repositories/buyer_repository.h @@ -0,0 +1,287 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_BUYER_REPOSITORY_H +#define EQEMU_BUYER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class BuyerRepository { +public: + struct Buyer { + int charid; + int buyslot; + int itemid; + std::string itemname; + int quantity; + int price; + }; + + static std::string PrimaryKey() + { + return std::string("buyslot"); + } + + static std::vector Columns() + { + return { + "charid", + "buyslot", + "itemid", + "itemname", + "quantity", + "price", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("buyer"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Buyer NewEntity() + { + Buyer entry{}; + + entry.charid = 0; + entry.buyslot = 0; + entry.itemid = 0; + entry.itemname = ""; + entry.quantity = 0; + entry.price = 0; + + return entry; + } + + static Buyer GetBuyerEntry( + const std::vector &buyers, + int buyer_id + ) + { + for (auto &buyer : buyers) { + if (buyer.buyslot == buyer_id) { + return buyer; + } + } + + return NewEntity(); + } + + static Buyer FindOne( + int buyer_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + buyer_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3]; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int buyer_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + buyer_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Buyer buyer_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(buyer_entry.itemid)); + update_values.push_back(columns[3] + " = '" + EscapeString(buyer_entry.itemname) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(buyer_entry.quantity)); + update_values.push_back(columns[5] + " = " + std::to_string(buyer_entry.price)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + buyer_entry.buyslot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Buyer InsertOne( + Buyer buyer_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(buyer_entry.itemid)); + insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); + insert_values.push_back(std::to_string(buyer_entry.quantity)); + insert_values.push_back(std::to_string(buyer_entry.price)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + buyer_entry.id = results.LastInsertedID(); + return buyer_entry; + } + + buyer_entry = InstanceListRepository::NewEntity(); + + return buyer_entry; + } + + static int InsertMany( + std::vector buyer_entries + ) + { + std::vector insert_chunks; + + for (auto &buyer_entry: buyer_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(buyer_entry.itemid)); + insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); + insert_values.push_back(std::to_string(buyer_entry.quantity)); + insert_values.push_back(std::to_string(buyer_entry.price)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3]; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_BUYER_REPOSITORY_H diff --git a/common/repositories/char_create_combinations_repository.h b/common/repositories/char_create_combinations_repository.h new file mode 100644 index 000000000..3c4baf5d5 --- /dev/null +++ b/common/repositories/char_create_combinations_repository.h @@ -0,0 +1,281 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHAR_CREATE_COMBINATIONS_REPOSITORY_H +#define EQEMU_CHAR_CREATE_COMBINATIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharCreateCombinationsRepository { +public: + struct CharCreateCombinations { + int allocation_id; + int race; + int class; + int deity; + int start_zone; + int expansions_req; + }; + + static std::string PrimaryKey() + { + return std::string("start_zone"); + } + + static std::vector Columns() + { + return { + "allocation_id", + "race", + "class", + "deity", + "start_zone", + "expansions_req", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_create_combinations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharCreateCombinations NewEntity() + { + CharCreateCombinations entry{}; + + entry.allocation_id = 0; + entry.race = 0; + entry.class = 0; + entry.deity = 0; + entry.start_zone = 0; + entry.expansions_req = 0; + + return entry; + } + + static CharCreateCombinations GetCharCreateCombinationsEntry( + const std::vector &char_create_combinationss, + int char_create_combinations_id + ) + { + for (auto &char_create_combinations : char_create_combinationss) { + if (char_create_combinations.start_zone == char_create_combinations_id) { + return char_create_combinations; + } + } + + return NewEntity(); + } + + static CharCreateCombinations FindOne( + int char_create_combinations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_create_combinations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_create_combinations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_create_combinations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharCreateCombinations char_create_combinations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(char_create_combinations_entry.allocation_id)); + update_values.push_back(columns[5] + " = " + std::to_string(char_create_combinations_entry.expansions_req)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_create_combinations_entry.start_zone + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharCreateCombinations InsertOne( + CharCreateCombinations char_create_combinations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_create_combinations_entry.id = results.LastInsertedID(); + return char_create_combinations_entry; + } + + char_create_combinations_entry = InstanceListRepository::NewEntity(); + + return char_create_combinations_entry; + } + + static int InsertMany( + std::vector char_create_combinations_entries + ) + { + std::vector insert_chunks; + + for (auto &char_create_combinations_entry: char_create_combinations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHAR_CREATE_COMBINATIONS_REPOSITORY_H diff --git a/common/repositories/char_create_point_allocations_repository.h b/common/repositories/char_create_point_allocations_repository.h new file mode 100644 index 000000000..22ec0a4ea --- /dev/null +++ b/common/repositories/char_create_point_allocations_repository.h @@ -0,0 +1,362 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H +#define EQEMU_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharCreatePointAllocationsRepository { +public: + struct CharCreatePointAllocations { + int id; + int base_str; + int base_sta; + int base_dex; + int base_agi; + int base_int; + int base_wis; + int base_cha; + int alloc_str; + int alloc_sta; + int alloc_dex; + int alloc_agi; + int alloc_int; + int alloc_wis; + int alloc_cha; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "base_str", + "base_sta", + "base_dex", + "base_agi", + "base_int", + "base_wis", + "base_cha", + "alloc_str", + "alloc_sta", + "alloc_dex", + "alloc_agi", + "alloc_int", + "alloc_wis", + "alloc_cha", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_create_point_allocations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharCreatePointAllocations NewEntity() + { + CharCreatePointAllocations entry{}; + + entry.id = 0; + entry.base_str = 0; + entry.base_sta = 0; + entry.base_dex = 0; + entry.base_agi = 0; + entry.base_int = 0; + entry.base_wis = 0; + entry.base_cha = 0; + entry.alloc_str = 0; + entry.alloc_sta = 0; + entry.alloc_dex = 0; + entry.alloc_agi = 0; + entry.alloc_int = 0; + entry.alloc_wis = 0; + entry.alloc_cha = 0; + + return entry; + } + + static CharCreatePointAllocations GetCharCreatePointAllocationsEntry( + const std::vector &char_create_point_allocationss, + int char_create_point_allocations_id + ) + { + for (auto &char_create_point_allocations : char_create_point_allocationss) { + if (char_create_point_allocations.id == char_create_point_allocations_id) { + return char_create_point_allocations; + } + } + + return NewEntity(); + } + + static CharCreatePointAllocations FindOne( + int char_create_point_allocations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_create_point_allocations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_create_point_allocations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_create_point_allocations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharCreatePointAllocations char_create_point_allocations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(char_create_point_allocations_entry.base_str)); + update_values.push_back(columns[2] + " = " + std::to_string(char_create_point_allocations_entry.base_sta)); + update_values.push_back(columns[3] + " = " + std::to_string(char_create_point_allocations_entry.base_dex)); + update_values.push_back(columns[4] + " = " + std::to_string(char_create_point_allocations_entry.base_agi)); + update_values.push_back(columns[5] + " = " + std::to_string(char_create_point_allocations_entry.base_int)); + update_values.push_back(columns[6] + " = " + std::to_string(char_create_point_allocations_entry.base_wis)); + update_values.push_back(columns[7] + " = " + std::to_string(char_create_point_allocations_entry.base_cha)); + update_values.push_back(columns[8] + " = " + std::to_string(char_create_point_allocations_entry.alloc_str)); + update_values.push_back(columns[9] + " = " + std::to_string(char_create_point_allocations_entry.alloc_sta)); + update_values.push_back(columns[10] + " = " + std::to_string(char_create_point_allocations_entry.alloc_dex)); + update_values.push_back(columns[11] + " = " + std::to_string(char_create_point_allocations_entry.alloc_agi)); + update_values.push_back(columns[12] + " = " + std::to_string(char_create_point_allocations_entry.alloc_int)); + update_values.push_back(columns[13] + " = " + std::to_string(char_create_point_allocations_entry.alloc_wis)); + update_values.push_back(columns[14] + " = " + std::to_string(char_create_point_allocations_entry.alloc_cha)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_create_point_allocations_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharCreatePointAllocations InsertOne( + CharCreatePointAllocations char_create_point_allocations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_create_point_allocations_entry.id = results.LastInsertedID(); + return char_create_point_allocations_entry; + } + + char_create_point_allocations_entry = InstanceListRepository::NewEntity(); + + return char_create_point_allocations_entry; + } + + static int InsertMany( + std::vector char_create_point_allocations_entries + ) + { + std::vector insert_chunks; + + for (auto &char_create_point_allocations_entry: char_create_point_allocations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h new file mode 100644 index 000000000..a4f0c2a92 --- /dev/null +++ b/common/repositories/char_recipe_list_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHAR_RECIPE_LIST_REPOSITORY_H +#define EQEMU_CHAR_RECIPE_LIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharRecipeListRepository { +public: + struct CharRecipeList { + int char_id; + int recipe_id; + int madecount; + }; + + static std::string PrimaryKey() + { + return std::string("recipe_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "recipe_id", + "madecount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_recipe_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharRecipeList NewEntity() + { + CharRecipeList entry{}; + + entry.char_id = 0; + entry.recipe_id = 0; + entry.madecount = 0; + + return entry; + } + + static CharRecipeList GetCharRecipeListEntry( + const std::vector &char_recipe_lists, + int char_recipe_list_id + ) + { + for (auto &char_recipe_list : char_recipe_lists) { + if (char_recipe_list.recipe_id == char_recipe_list_id) { + return char_recipe_list; + } + } + + return NewEntity(); + } + + static CharRecipeList FindOne( + int char_recipe_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_recipe_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_recipe_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_recipe_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharRecipeList char_recipe_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(char_recipe_list_entry.madecount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_recipe_list_entry.recipe_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharRecipeList InsertOne( + CharRecipeList char_recipe_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_recipe_list_entry.id = results.LastInsertedID(); + return char_recipe_list_entry; + } + + char_recipe_list_entry = InstanceListRepository::NewEntity(); + + return char_recipe_list_entry; + } + + static int InsertMany( + std::vector char_recipe_list_entries + ) + { + std::vector insert_chunks; + + for (auto &char_recipe_list_entry: char_recipe_list_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHAR_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/character_activities_repository.h b/common/repositories/character_activities_repository.h new file mode 100644 index 000000000..4682b655c --- /dev/null +++ b/common/repositories/character_activities_repository.h @@ -0,0 +1,276 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_ACTIVITIES_REPOSITORY_H +#define EQEMU_CHARACTER_ACTIVITIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterActivitiesRepository { +public: + struct CharacterActivities { + int charid; + int taskid; + int activityid; + int donecount; + int8 completed; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "charid", + "taskid", + "activityid", + "donecount", + "completed", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_activities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterActivities NewEntity() + { + CharacterActivities entry{}; + + entry.charid = 0; + entry.taskid = 0; + entry.activityid = 0; + entry.donecount = 0; + entry.completed = 0; + + return entry; + } + + static CharacterActivities GetCharacterActivitiesEntry( + const std::vector &character_activitiess, + int character_activities_id + ) + { + for (auto &character_activities : character_activitiess) { + if (character_activities.activityid == character_activities_id) { + return character_activities; + } + } + + return NewEntity(); + } + + static CharacterActivities FindOne( + int character_activities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_activities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_activities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_activities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterActivities character_activities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_activities_entry.donecount)); + update_values.push_back(columns[4] + " = " + std::to_string(character_activities_entry.completed)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_activities_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterActivities InsertOne( + CharacterActivities character_activities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_activities_entry.donecount)); + insert_values.push_back(std::to_string(character_activities_entry.completed)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_activities_entry.id = results.LastInsertedID(); + return character_activities_entry; + } + + character_activities_entry = InstanceListRepository::NewEntity(); + + return character_activities_entry; + } + + static int InsertMany( + std::vector character_activities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_activities_entry: character_activities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_activities_entry.donecount)); + insert_values.push_back(std::to_string(character_activities_entry.completed)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/character_alt_currency_repository.h b/common/repositories/character_alt_currency_repository.h new file mode 100644 index 000000000..2f815ef98 --- /dev/null +++ b/common/repositories/character_alt_currency_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_ALT_CURRENCY_REPOSITORY_H +#define EQEMU_CHARACTER_ALT_CURRENCY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterAltCurrencyRepository { +public: + struct CharacterAltCurrency { + int char_id; + int currency_id; + int amount; + }; + + static std::string PrimaryKey() + { + return std::string("currency_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "currency_id", + "amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_alt_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAltCurrency NewEntity() + { + CharacterAltCurrency entry{}; + + entry.char_id = 0; + entry.currency_id = 0; + entry.amount = 0; + + return entry; + } + + static CharacterAltCurrency GetCharacterAltCurrencyEntry( + const std::vector &character_alt_currencys, + int character_alt_currency_id + ) + { + for (auto &character_alt_currency : character_alt_currencys) { + if (character_alt_currency.currency_id == character_alt_currency_id) { + return character_alt_currency; + } + } + + return NewEntity(); + } + + static CharacterAltCurrency FindOne( + int character_alt_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_alt_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_alt_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_alt_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAltCurrency character_alt_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_alt_currency_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_alt_currency_entry.currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAltCurrency InsertOne( + CharacterAltCurrency character_alt_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_alt_currency_entry.id = results.LastInsertedID(); + return character_alt_currency_entry; + } + + character_alt_currency_entry = InstanceListRepository::NewEntity(); + + return character_alt_currency_entry; + } + + static int InsertMany( + std::vector character_alt_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &character_alt_currency_entry: character_alt_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_ALT_CURRENCY_REPOSITORY_H diff --git a/common/repositories/character_alternate_abilities_repository.h b/common/repositories/character_alternate_abilities_repository.h new file mode 100644 index 000000000..7866330ac --- /dev/null +++ b/common/repositories/character_alternate_abilities_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H +#define EQEMU_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterAlternateAbilitiesRepository { +public: + struct CharacterAlternateAbilities { + int id; + int16 aa_id; + int16 aa_value; + int16 charges; + }; + + static std::string PrimaryKey() + { + return std::string("aa_id"); + } + + static std::vector Columns() + { + return { + "id", + "aa_id", + "aa_value", + "charges", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_alternate_abilities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAlternateAbilities NewEntity() + { + CharacterAlternateAbilities entry{}; + + entry.id = 0; + entry.aa_id = 0; + entry.aa_value = 0; + entry.charges = 0; + + return entry; + } + + static CharacterAlternateAbilities GetCharacterAlternateAbilitiesEntry( + const std::vector &character_alternate_abilitiess, + int character_alternate_abilities_id + ) + { + for (auto &character_alternate_abilities : character_alternate_abilitiess) { + if (character_alternate_abilities.aa_id == character_alternate_abilities_id) { + return character_alternate_abilities; + } + } + + return NewEntity(); + } + + static CharacterAlternateAbilities FindOne( + int character_alternate_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_alternate_abilities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_alternate_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_alternate_abilities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAlternateAbilities character_alternate_abilities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_alternate_abilities_entry.aa_value)); + update_values.push_back(columns[3] + " = " + std::to_string(character_alternate_abilities_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_alternate_abilities_entry.aa_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAlternateAbilities InsertOne( + CharacterAlternateAbilities character_alternate_abilities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_alternate_abilities_entry.id = results.LastInsertedID(); + return character_alternate_abilities_entry; + } + + character_alternate_abilities_entry = InstanceListRepository::NewEntity(); + + return character_alternate_abilities_entry; + } + + static int InsertMany( + std::vector character_alternate_abilities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_alternate_abilities_entry: character_alternate_abilities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H diff --git a/common/repositories/character_auras_repository.h b/common/repositories/character_auras_repository.h new file mode 100644 index 000000000..47be33f4c --- /dev/null +++ b/common/repositories/character_auras_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_AURAS_REPOSITORY_H +#define EQEMU_CHARACTER_AURAS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterAurasRepository { +public: + struct CharacterAuras { + int id; + int8 slot; + int spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_auras"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAuras NewEntity() + { + CharacterAuras entry{}; + + entry.id = 0; + entry.slot = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterAuras GetCharacterAurasEntry( + const std::vector &character_aurass, + int character_auras_id + ) + { + for (auto &character_auras : character_aurass) { + if (character_auras.slot == character_auras_id) { + return character_auras; + } + } + + return NewEntity(); + } + + static CharacterAuras FindOne( + int character_auras_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_auras_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_auras_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_auras_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAuras character_auras_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_auras_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_auras_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAuras InsertOne( + CharacterAuras character_auras_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_auras_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_auras_entry.id = results.LastInsertedID(); + return character_auras_entry; + } + + character_auras_entry = InstanceListRepository::NewEntity(); + + return character_auras_entry; + } + + static int InsertMany( + std::vector character_auras_entries + ) + { + std::vector insert_chunks; + + for (auto &character_auras_entry: character_auras_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_auras_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_AURAS_REPOSITORY_H diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h new file mode 100644 index 000000000..cc91acbff --- /dev/null +++ b/common/repositories/character_bandolier_repository.h @@ -0,0 +1,284 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_BANDOLIER_REPOSITORY_H +#define EQEMU_CHARACTER_BANDOLIER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterBandolierRepository { +public: + struct CharacterBandolier { + int id; + int8 bandolier_id; + int8 bandolier_slot; + int item_id; + int icon; + std::string bandolier_name; + }; + + static std::string PrimaryKey() + { + return std::string("bandolier_slot"); + } + + static std::vector Columns() + { + return { + "id", + "bandolier_id", + "bandolier_slot", + "item_id", + "icon", + "bandolier_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_bandolier"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBandolier NewEntity() + { + CharacterBandolier entry{}; + + entry.id = 0; + entry.bandolier_id = 0; + entry.bandolier_slot = 0; + entry.item_id = 0; + entry.icon = 0; + entry.bandolier_name = '0'; + + return entry; + } + + static CharacterBandolier GetCharacterBandolierEntry( + const std::vector &character_bandoliers, + int character_bandolier_id + ) + { + for (auto &character_bandolier : character_bandoliers) { + if (character_bandolier.bandolier_slot == character_bandolier_id) { + return character_bandolier; + } + } + + return NewEntity(); + } + + static CharacterBandolier FindOne( + int character_bandolier_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_bandolier_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_bandolier_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_bandolier_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBandolier character_bandolier_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_bandolier_entry.item_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_bandolier_entry.icon)); + update_values.push_back(columns[5] + " = '" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_bandolier_entry.bandolier_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBandolier InsertOne( + CharacterBandolier character_bandolier_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.icon)); + insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_bandolier_entry.id = results.LastInsertedID(); + return character_bandolier_entry; + } + + character_bandolier_entry = InstanceListRepository::NewEntity(); + + return character_bandolier_entry; + } + + static int InsertMany( + std::vector character_bandolier_entries + ) + { + std::vector insert_chunks; + + for (auto &character_bandolier_entry: character_bandolier_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.icon)); + insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_BANDOLIER_REPOSITORY_H diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h new file mode 100644 index 000000000..bda62faa3 --- /dev/null +++ b/common/repositories/character_bind_repository.h @@ -0,0 +1,303 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_BIND_REPOSITORY_H +#define EQEMU_CHARACTER_BIND_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterBindRepository { +public: + struct CharacterBind { + int id; + int slot; + int16 zone_id; + int instance_id; + std::string x; + std::string y; + std::string z; + std::string heading; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "zone_id", + "instance_id", + "x", + "y", + "z", + "heading", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_bind"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBind NewEntity() + { + CharacterBind entry{}; + + entry.id = 0; + entry.slot = 0; + entry.zone_id = 0; + entry.instance_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + + return entry; + } + + static CharacterBind GetCharacterBindEntry( + const std::vector &character_binds, + int character_bind_id + ) + { + for (auto &character_bind : character_binds) { + if (character_bind.slot == character_bind_id) { + return character_bind; + } + } + + return NewEntity(); + } + + static CharacterBind FindOne( + int character_bind_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_bind_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_bind_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_bind_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBind character_bind_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_bind_entry.zone_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_bind_entry.instance_id)); + update_values.push_back(columns[4] + " = '" + EscapeString(character_bind_entry.x) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(character_bind_entry.y) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(character_bind_entry.z) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(character_bind_entry.heading) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_bind_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBind InsertOne( + CharacterBind character_bind_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bind_entry.zone_id)); + insert_values.push_back(std::to_string(character_bind_entry.instance_id)); + insert_values.push_back("'" + EscapeString(character_bind_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.heading) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_bind_entry.id = results.LastInsertedID(); + return character_bind_entry; + } + + character_bind_entry = InstanceListRepository::NewEntity(); + + return character_bind_entry; + } + + static int InsertMany( + std::vector character_bind_entries + ) + { + std::vector insert_chunks; + + for (auto &character_bind_entry: character_bind_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bind_entry.zone_id)); + insert_values.push_back(std::to_string(character_bind_entry.instance_id)); + insert_values.push_back("'" + EscapeString(character_bind_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_bind_entry.heading) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_BIND_REPOSITORY_H diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h new file mode 100644 index 000000000..044ce79c6 --- /dev/null +++ b/common/repositories/character_buffs_repository.h @@ -0,0 +1,375 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_BUFFS_REPOSITORY_H +#define EQEMU_CHARACTER_BUFFS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterBuffsRepository { +public: + struct CharacterBuffs { + int character_id; + int8 slot_id; + int16 spell_id; + int8 caster_level; + std::string caster_name; + int ticsremaining; + int counters; + int numhits; + int melee_rune; + int magic_rune; + int8 persistent; + int dot_rune; + int caston_x; + int caston_y; + int caston_z; + int ExtraDIChance; + int instrument_mod; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "character_id", + "slot_id", + "spell_id", + "caster_level", + "caster_name", + "ticsremaining", + "counters", + "numhits", + "melee_rune", + "magic_rune", + "persistent", + "dot_rune", + "caston_x", + "caston_y", + "caston_z", + "ExtraDIChance", + "instrument_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_buffs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBuffs NewEntity() + { + CharacterBuffs entry{}; + + entry.character_id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + entry.caster_level = 0; + entry.caster_name = 0; + entry.ticsremaining = 0; + entry.counters = 0; + entry.numhits = 0; + entry.melee_rune = 0; + entry.magic_rune = 0; + entry.persistent = 0; + entry.dot_rune = 0; + entry.caston_x = 0; + entry.caston_y = 0; + entry.caston_z = 0; + entry.ExtraDIChance = 0; + entry.instrument_mod = 10; + + return entry; + } + + static CharacterBuffs GetCharacterBuffsEntry( + const std::vector &character_buffss, + int character_buffs_id + ) + { + for (auto &character_buffs : character_buffss) { + if (character_buffs.slot_id == character_buffs_id) { + return character_buffs; + } + } + + return NewEntity(); + } + + static CharacterBuffs FindOne( + int character_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_buffs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4]; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_buffs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBuffs character_buffs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_buffs_entry.spell_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_buffs_entry.caster_level)); + update_values.push_back(columns[4] + " = '" + EscapeString(character_buffs_entry.caster_name) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(character_buffs_entry.ticsremaining)); + update_values.push_back(columns[6] + " = " + std::to_string(character_buffs_entry.counters)); + update_values.push_back(columns[7] + " = " + std::to_string(character_buffs_entry.numhits)); + update_values.push_back(columns[8] + " = " + std::to_string(character_buffs_entry.melee_rune)); + update_values.push_back(columns[9] + " = " + std::to_string(character_buffs_entry.magic_rune)); + update_values.push_back(columns[10] + " = " + std::to_string(character_buffs_entry.persistent)); + update_values.push_back(columns[11] + " = " + std::to_string(character_buffs_entry.dot_rune)); + update_values.push_back(columns[12] + " = " + std::to_string(character_buffs_entry.caston_x)); + update_values.push_back(columns[13] + " = " + std::to_string(character_buffs_entry.caston_y)); + update_values.push_back(columns[14] + " = " + std::to_string(character_buffs_entry.caston_z)); + update_values.push_back(columns[15] + " = " + std::to_string(character_buffs_entry.ExtraDIChance)); + update_values.push_back(columns[16] + " = " + std::to_string(character_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_buffs_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBuffs InsertOne( + CharacterBuffs character_buffs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); + insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.persistent)); + insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); + insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); + insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_buffs_entry.id = results.LastInsertedID(); + return character_buffs_entry; + } + + character_buffs_entry = InstanceListRepository::NewEntity(); + + return character_buffs_entry; + } + + static int InsertMany( + std::vector character_buffs_entries + ) + { + std::vector insert_chunks; + + for (auto &character_buffs_entry: character_buffs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); + insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.persistent)); + insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); + insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); + insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4]; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_BUFFS_REPOSITORY_H diff --git a/common/repositories/character_corpse_items_repository.h b/common/repositories/character_corpse_items_repository.h new file mode 100644 index 000000000..862dfa1d7 --- /dev/null +++ b/common/repositories/character_corpse_items_repository.h @@ -0,0 +1,327 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_CORPSE_ITEMS_REPOSITORY_H +#define EQEMU_CHARACTER_CORPSE_ITEMS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterCorpseItemsRepository { +public: + struct CharacterCorpseItems { + int corpse_id; + int equip_slot; + int item_id; + int charges; + int aug_1; + int aug_2; + int aug_3; + int aug_4; + int aug_5; + int aug_6; + int16 attuned; + }; + + static std::string PrimaryKey() + { + return std::string("equip_slot"); + } + + static std::vector Columns() + { + return { + "corpse_id", + "equip_slot", + "item_id", + "charges", + "aug_1", + "aug_2", + "aug_3", + "aug_4", + "aug_5", + "aug_6", + "attuned", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_corpse_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCorpseItems NewEntity() + { + CharacterCorpseItems entry{}; + + entry.corpse_id = 0; + entry.equip_slot = 0; + entry.item_id = 0; + entry.charges = 0; + entry.aug_1 = 0; + entry.aug_2 = 0; + entry.aug_3 = 0; + entry.aug_4 = 0; + entry.aug_5 = 0; + entry.aug_6 = 0; + entry.attuned = 0; + + return entry; + } + + static CharacterCorpseItems GetCharacterCorpseItemsEntry( + const std::vector &character_corpse_itemss, + int character_corpse_items_id + ) + { + for (auto &character_corpse_items : character_corpse_itemss) { + if (character_corpse_items.equip_slot == character_corpse_items_id) { + return character_corpse_items; + } + } + + return NewEntity(); + } + + static CharacterCorpseItems FindOne( + int character_corpse_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_corpse_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_corpse_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_corpse_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCorpseItems character_corpse_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_corpse_items_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_corpse_items_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(character_corpse_items_entry.aug_1)); + update_values.push_back(columns[5] + " = " + std::to_string(character_corpse_items_entry.aug_2)); + update_values.push_back(columns[6] + " = " + std::to_string(character_corpse_items_entry.aug_3)); + update_values.push_back(columns[7] + " = " + std::to_string(character_corpse_items_entry.aug_4)); + update_values.push_back(columns[8] + " = " + std::to_string(character_corpse_items_entry.aug_5)); + update_values.push_back(columns[9] + " = " + std::to_string(character_corpse_items_entry.aug_6)); + update_values.push_back(columns[10] + " = " + std::to_string(character_corpse_items_entry.attuned)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_corpse_items_entry.equip_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCorpseItems InsertOne( + CharacterCorpseItems character_corpse_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); + insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_corpse_items_entry.id = results.LastInsertedID(); + return character_corpse_items_entry; + } + + character_corpse_items_entry = InstanceListRepository::NewEntity(); + + return character_corpse_items_entry; + } + + static int InsertMany( + std::vector character_corpse_items_entries + ) + { + std::vector insert_chunks; + + for (auto &character_corpse_items_entry: character_corpse_items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); + insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_CORPSE_ITEMS_REPOSITORY_H diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h new file mode 100644 index 000000000..54d7e778c --- /dev/null +++ b/common/repositories/character_corpses_repository.h @@ -0,0 +1,618 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_CORPSES_REPOSITORY_H +#define EQEMU_CHARACTER_CORPSES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterCorpsesRepository { +public: + struct CharacterCorpses { + int id; + int charid; + std::string charname; + int16 zone_id; + int16 instance_id; + std::string x; + std::string y; + std::string z; + std::string heading; + std::string time_of_death; + int guild_consent_id; + int8 is_rezzed; + int8 is_buried; + int8 was_at_graveyard; + int8 is_locked; + int exp; + int size; + int level; + int race; + int gender; + int class; + int deity; + int texture; + int helm_texture; + int copper; + int silver; + int gold; + int platinum; + int hair_color; + int beard_color; + int eye_color_1; + int eye_color_2; + int hair_style; + int face; + int beard; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int wc_1; + int wc_2; + int wc_3; + int wc_4; + int wc_5; + int wc_6; + int wc_7; + int wc_8; + int wc_9; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + "charname", + "zone_id", + "instance_id", + "x", + "y", + "z", + "heading", + "time_of_death", + "guild_consent_id", + "is_rezzed", + "is_buried", + "was_at_graveyard", + "is_locked", + "exp", + "size", + "level", + "race", + "gender", + "class", + "deity", + "texture", + "helm_texture", + "copper", + "silver", + "gold", + "platinum", + "hair_color", + "beard_color", + "eye_color_1", + "eye_color_2", + "hair_style", + "face", + "beard", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "wc_1", + "wc_2", + "wc_3", + "wc_4", + "wc_5", + "wc_6", + "wc_7", + "wc_8", + "wc_9", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_corpses"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCorpses NewEntity() + { + CharacterCorpses entry{}; + + entry.id = 0; + entry.charid = 0; + entry.charname = ""; + entry.zone_id = 0; + entry.instance_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.time_of_death = '0000-00-00 00:00:00'; + entry.guild_consent_id = 0; + entry.is_rezzed = 0; + entry.is_buried = 0; + entry.was_at_graveyard = 0; + entry.is_locked = 0; + entry.exp = 0; + entry.size = 0; + entry.level = 0; + entry.race = 0; + entry.gender = 0; + entry.class = 0; + entry.deity = 0; + entry.texture = 0; + entry.helm_texture = 0; + entry.copper = 0; + entry.silver = 0; + entry.gold = 0; + entry.platinum = 0; + entry.hair_color = 0; + entry.beard_color = 0; + entry.eye_color_1 = 0; + entry.eye_color_2 = 0; + entry.hair_style = 0; + entry.face = 0; + entry.beard = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.wc_1 = 0; + entry.wc_2 = 0; + entry.wc_3 = 0; + entry.wc_4 = 0; + entry.wc_5 = 0; + entry.wc_6 = 0; + entry.wc_7 = 0; + entry.wc_8 = 0; + entry.wc_9 = 0; + + return entry; + } + + static CharacterCorpses GetCharacterCorpsesEntry( + const std::vector &character_corpsess, + int character_corpses_id + ) + { + for (auto &character_corpses : character_corpsess) { + if (character_corpses.id == character_corpses_id) { + return character_corpses; + } + } + + return NewEntity(); + } + + static CharacterCorpses FindOne( + int character_corpses_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_corpses_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2]; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9]; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_corpses_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_corpses_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCorpses character_corpses_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_corpses_entry.charid)); + update_values.push_back(columns[2] + " = '" + EscapeString(character_corpses_entry.charname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(character_corpses_entry.zone_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_corpses_entry.instance_id)); + update_values.push_back(columns[5] + " = '" + EscapeString(character_corpses_entry.x) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(character_corpses_entry.y) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(character_corpses_entry.z) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(character_corpses_entry.heading) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(character_corpses_entry.time_of_death) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(character_corpses_entry.guild_consent_id)); + update_values.push_back(columns[11] + " = " + std::to_string(character_corpses_entry.is_rezzed)); + update_values.push_back(columns[12] + " = " + std::to_string(character_corpses_entry.is_buried)); + update_values.push_back(columns[13] + " = " + std::to_string(character_corpses_entry.was_at_graveyard)); + update_values.push_back(columns[14] + " = " + std::to_string(character_corpses_entry.is_locked)); + update_values.push_back(columns[15] + " = " + std::to_string(character_corpses_entry.exp)); + update_values.push_back(columns[16] + " = " + std::to_string(character_corpses_entry.size)); + update_values.push_back(columns[17] + " = " + std::to_string(character_corpses_entry.level)); + update_values.push_back(columns[18] + " = " + std::to_string(character_corpses_entry.race)); + update_values.push_back(columns[19] + " = " + std::to_string(character_corpses_entry.gender)); + update_values.push_back(columns[20] + " = " + std::to_string(character_corpses_entry.class)); + update_values.push_back(columns[21] + " = " + std::to_string(character_corpses_entry.deity)); + update_values.push_back(columns[22] + " = " + std::to_string(character_corpses_entry.texture)); + update_values.push_back(columns[23] + " = " + std::to_string(character_corpses_entry.helm_texture)); + update_values.push_back(columns[24] + " = " + std::to_string(character_corpses_entry.copper)); + update_values.push_back(columns[25] + " = " + std::to_string(character_corpses_entry.silver)); + update_values.push_back(columns[26] + " = " + std::to_string(character_corpses_entry.gold)); + update_values.push_back(columns[27] + " = " + std::to_string(character_corpses_entry.platinum)); + update_values.push_back(columns[28] + " = " + std::to_string(character_corpses_entry.hair_color)); + update_values.push_back(columns[29] + " = " + std::to_string(character_corpses_entry.beard_color)); + update_values.push_back(columns[30] + " = " + std::to_string(character_corpses_entry.eye_color_1)); + update_values.push_back(columns[31] + " = " + std::to_string(character_corpses_entry.eye_color_2)); + update_values.push_back(columns[32] + " = " + std::to_string(character_corpses_entry.hair_style)); + update_values.push_back(columns[33] + " = " + std::to_string(character_corpses_entry.face)); + update_values.push_back(columns[34] + " = " + std::to_string(character_corpses_entry.beard)); + update_values.push_back(columns[35] + " = " + std::to_string(character_corpses_entry.drakkin_heritage)); + update_values.push_back(columns[36] + " = " + std::to_string(character_corpses_entry.drakkin_tattoo)); + update_values.push_back(columns[37] + " = " + std::to_string(character_corpses_entry.drakkin_details)); + update_values.push_back(columns[38] + " = " + std::to_string(character_corpses_entry.wc_1)); + update_values.push_back(columns[39] + " = " + std::to_string(character_corpses_entry.wc_2)); + update_values.push_back(columns[40] + " = " + std::to_string(character_corpses_entry.wc_3)); + update_values.push_back(columns[41] + " = " + std::to_string(character_corpses_entry.wc_4)); + update_values.push_back(columns[42] + " = " + std::to_string(character_corpses_entry.wc_5)); + update_values.push_back(columns[43] + " = " + std::to_string(character_corpses_entry.wc_6)); + update_values.push_back(columns[44] + " = " + std::to_string(character_corpses_entry.wc_7)); + update_values.push_back(columns[45] + " = " + std::to_string(character_corpses_entry.wc_8)); + update_values.push_back(columns[46] + " = " + std::to_string(character_corpses_entry.wc_9)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_corpses_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCorpses InsertOne( + CharacterCorpses character_corpses_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpses_entry.charid)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); + insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); + insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); + insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); + insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); + insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); + insert_values.push_back(std::to_string(character_corpses_entry.exp)); + insert_values.push_back(std::to_string(character_corpses_entry.size)); + insert_values.push_back(std::to_string(character_corpses_entry.level)); + insert_values.push_back(std::to_string(character_corpses_entry.race)); + insert_values.push_back(std::to_string(character_corpses_entry.gender)); + insert_values.push_back(std::to_string(character_corpses_entry.class)); + insert_values.push_back(std::to_string(character_corpses_entry.deity)); + insert_values.push_back(std::to_string(character_corpses_entry.texture)); + insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); + insert_values.push_back(std::to_string(character_corpses_entry.copper)); + insert_values.push_back(std::to_string(character_corpses_entry.silver)); + insert_values.push_back(std::to_string(character_corpses_entry.gold)); + insert_values.push_back(std::to_string(character_corpses_entry.platinum)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); + insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); + insert_values.push_back(std::to_string(character_corpses_entry.face)); + insert_values.push_back(std::to_string(character_corpses_entry.beard)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_corpses_entry.id = results.LastInsertedID(); + return character_corpses_entry; + } + + character_corpses_entry = InstanceListRepository::NewEntity(); + + return character_corpses_entry; + } + + static int InsertMany( + std::vector character_corpses_entries + ) + { + std::vector insert_chunks; + + for (auto &character_corpses_entry: character_corpses_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpses_entry.charid)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); + insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); + insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); + insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); + insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); + insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); + insert_values.push_back(std::to_string(character_corpses_entry.exp)); + insert_values.push_back(std::to_string(character_corpses_entry.size)); + insert_values.push_back(std::to_string(character_corpses_entry.level)); + insert_values.push_back(std::to_string(character_corpses_entry.race)); + insert_values.push_back(std::to_string(character_corpses_entry.gender)); + insert_values.push_back(std::to_string(character_corpses_entry.class)); + insert_values.push_back(std::to_string(character_corpses_entry.deity)); + insert_values.push_back(std::to_string(character_corpses_entry.texture)); + insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); + insert_values.push_back(std::to_string(character_corpses_entry.copper)); + insert_values.push_back(std::to_string(character_corpses_entry.silver)); + insert_values.push_back(std::to_string(character_corpses_entry.gold)); + insert_values.push_back(std::to_string(character_corpses_entry.platinum)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); + insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); + insert_values.push_back(std::to_string(character_corpses_entry.face)); + insert_values.push_back(std::to_string(character_corpses_entry.beard)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2]; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9]; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_CORPSES_REPOSITORY_H diff --git a/common/repositories/character_currency_repository.h b/common/repositories/character_currency_repository.h new file mode 100644 index 000000000..caed4ec5b --- /dev/null +++ b/common/repositories/character_currency_repository.h @@ -0,0 +1,378 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_CURRENCY_REPOSITORY_H +#define EQEMU_CHARACTER_CURRENCY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterCurrencyRepository { +public: + struct CharacterCurrency { + int id; + int platinum; + int gold; + int silver; + int copper; + int platinum_bank; + int gold_bank; + int silver_bank; + int copper_bank; + int platinum_cursor; + int gold_cursor; + int silver_cursor; + int copper_cursor; + int radiant_crystals; + int career_radiant_crystals; + int ebon_crystals; + int career_ebon_crystals; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "platinum", + "gold", + "silver", + "copper", + "platinum_bank", + "gold_bank", + "silver_bank", + "copper_bank", + "platinum_cursor", + "gold_cursor", + "silver_cursor", + "copper_cursor", + "radiant_crystals", + "career_radiant_crystals", + "ebon_crystals", + "career_ebon_crystals", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCurrency NewEntity() + { + CharacterCurrency entry{}; + + entry.id = 0; + entry.platinum = 0; + entry.gold = 0; + entry.silver = 0; + entry.copper = 0; + entry.platinum_bank = 0; + entry.gold_bank = 0; + entry.silver_bank = 0; + entry.copper_bank = 0; + entry.platinum_cursor = 0; + entry.gold_cursor = 0; + entry.silver_cursor = 0; + entry.copper_cursor = 0; + entry.radiant_crystals = 0; + entry.career_radiant_crystals = 0; + entry.ebon_crystals = 0; + entry.career_ebon_crystals = 0; + + return entry; + } + + static CharacterCurrency GetCharacterCurrencyEntry( + const std::vector &character_currencys, + int character_currency_id + ) + { + for (auto &character_currency : character_currencys) { + if (character_currency.id == character_currency_id) { + return character_currency; + } + } + + return NewEntity(); + } + + static CharacterCurrency FindOne( + int character_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCurrency character_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_currency_entry.platinum)); + update_values.push_back(columns[2] + " = " + std::to_string(character_currency_entry.gold)); + update_values.push_back(columns[3] + " = " + std::to_string(character_currency_entry.silver)); + update_values.push_back(columns[4] + " = " + std::to_string(character_currency_entry.copper)); + update_values.push_back(columns[5] + " = " + std::to_string(character_currency_entry.platinum_bank)); + update_values.push_back(columns[6] + " = " + std::to_string(character_currency_entry.gold_bank)); + update_values.push_back(columns[7] + " = " + std::to_string(character_currency_entry.silver_bank)); + update_values.push_back(columns[8] + " = " + std::to_string(character_currency_entry.copper_bank)); + update_values.push_back(columns[9] + " = " + std::to_string(character_currency_entry.platinum_cursor)); + update_values.push_back(columns[10] + " = " + std::to_string(character_currency_entry.gold_cursor)); + update_values.push_back(columns[11] + " = " + std::to_string(character_currency_entry.silver_cursor)); + update_values.push_back(columns[12] + " = " + std::to_string(character_currency_entry.copper_cursor)); + update_values.push_back(columns[13] + " = " + std::to_string(character_currency_entry.radiant_crystals)); + update_values.push_back(columns[14] + " = " + std::to_string(character_currency_entry.career_radiant_crystals)); + update_values.push_back(columns[15] + " = " + std::to_string(character_currency_entry.ebon_crystals)); + update_values.push_back(columns[16] + " = " + std::to_string(character_currency_entry.career_ebon_crystals)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_currency_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCurrency InsertOne( + CharacterCurrency character_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_currency_entry.platinum)); + insert_values.push_back(std::to_string(character_currency_entry.gold)); + insert_values.push_back(std::to_string(character_currency_entry.silver)); + insert_values.push_back(std::to_string(character_currency_entry.copper)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); + insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); + insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); + insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_currency_entry.id = results.LastInsertedID(); + return character_currency_entry; + } + + character_currency_entry = InstanceListRepository::NewEntity(); + + return character_currency_entry; + } + + static int InsertMany( + std::vector character_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &character_currency_entry: character_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_currency_entry.platinum)); + insert_values.push_back(std::to_string(character_currency_entry.gold)); + insert_values.push_back(std::to_string(character_currency_entry.silver)); + insert_values.push_back(std::to_string(character_currency_entry.copper)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); + insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); + insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); + insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_CURRENCY_REPOSITORY_H diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h new file mode 100644 index 000000000..7bef6272c --- /dev/null +++ b/common/repositories/character_data_repository.h @@ -0,0 +1,1058 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_DATA_REPOSITORY_H +#define EQEMU_CHARACTER_DATA_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterDataRepository { +public: + struct CharacterData { + int id; + int account_id; + std::string name; + std::string last_name; + std::string title; + std::string suffix; + int zone_id; + int zone_instance; + std::string y; + std::string x; + std::string z; + std::string heading; + int8 gender; + int16 race; + int8 class; + int level; + int deity; + int birthday; + int last_login; + int time_played; + int8 level2; + int8 anon; + int8 gm; + int face; + int8 hair_color; + int8 hair_style; + int8 beard; + int8 beard_color; + int8 eye_color_1; + int8 eye_color_2; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int8 ability_time_seconds; + int8 ability_number; + int8 ability_time_minutes; + int8 ability_time_hours; + int exp; + int aa_points_spent; + int aa_exp; + int aa_points; + int group_leadership_exp; + int raid_leadership_exp; + int group_leadership_points; + int raid_leadership_points; + int points; + int cur_hp; + int mana; + int endurance; + int intoxication; + int str; + int sta; + int cha; + int dex; + int int; + int agi; + int wis; + int zone_change_count; + int toxicity; + int hunger_level; + int thirst_level; + int ability_up; + int ldon_points_guk; + int ldon_points_mir; + int ldon_points_mmc; + int ldon_points_ruj; + int ldon_points_tak; + int ldon_points_available; + int tribute_time_remaining; + int career_tribute_points; + int tribute_points; + int tribute_active; + int8 pvp_status; + int pvp_kills; + int pvp_deaths; + int pvp_current_points; + int pvp_career_points; + int pvp_best_kill_streak; + int pvp_worst_death_streak; + int pvp_current_kill_streak; + int pvp2; + int pvp_type; + int show_helm; + int8 group_auto_consent; + int8 raid_auto_consent; + int8 guild_auto_consent; + int8 leadership_exp_on; + int RestTimer; + int air_remaining; + int autosplit_enabled; + int8 lfp; + int8 lfg; + std::string mailkey; + int8 xtargets; + int8 firstlogon; + int e_aa_effects; + int e_percent_to_aa; + int e_expended_aa_spent; + int aa_points_spent_old; + int aa_points_old; + int e_last_invsnapshot; + std::string deleted_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_id", + "name", + "last_name", + "title", + "suffix", + "zone_id", + "zone_instance", + "y", + "x", + "z", + "heading", + "gender", + "race", + "class", + "level", + "deity", + "birthday", + "last_login", + "time_played", + "level2", + "anon", + "gm", + "face", + "hair_color", + "hair_style", + "beard", + "beard_color", + "eye_color_1", + "eye_color_2", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "ability_time_seconds", + "ability_number", + "ability_time_minutes", + "ability_time_hours", + "exp", + "aa_points_spent", + "aa_exp", + "aa_points", + "group_leadership_exp", + "raid_leadership_exp", + "group_leadership_points", + "raid_leadership_points", + "points", + "cur_hp", + "mana", + "endurance", + "intoxication", + "str", + "sta", + "cha", + "dex", + "int", + "agi", + "wis", + "zone_change_count", + "toxicity", + "hunger_level", + "thirst_level", + "ability_up", + "ldon_points_guk", + "ldon_points_mir", + "ldon_points_mmc", + "ldon_points_ruj", + "ldon_points_tak", + "ldon_points_available", + "tribute_time_remaining", + "career_tribute_points", + "tribute_points", + "tribute_active", + "pvp_status", + "pvp_kills", + "pvp_deaths", + "pvp_current_points", + "pvp_career_points", + "pvp_best_kill_streak", + "pvp_worst_death_streak", + "pvp_current_kill_streak", + "pvp2", + "pvp_type", + "show_helm", + "group_auto_consent", + "raid_auto_consent", + "guild_auto_consent", + "leadership_exp_on", + "RestTimer", + "air_remaining", + "autosplit_enabled", + "lfp", + "lfg", + "mailkey", + "xtargets", + "firstlogon", + "e_aa_effects", + "e_percent_to_aa", + "e_expended_aa_spent", + "aa_points_spent_old", + "aa_points_old", + "e_last_invsnapshot", + "deleted_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterData NewEntity() + { + CharacterData entry{}; + + entry.id = 0; + entry.account_id = 0; + entry.name = ""; + entry.last_name = ""; + entry.title = ""; + entry.suffix = ""; + entry.zone_id = 0; + entry.zone_instance = 0; + entry.y = 0; + entry.x = 0; + entry.z = 0; + entry.heading = 0; + entry.gender = 0; + entry.race = 0; + entry.class = 0; + entry.level = 0; + entry.deity = 0; + entry.birthday = 0; + entry.last_login = 0; + entry.time_played = 0; + entry.level2 = 0; + entry.anon = 0; + entry.gm = 0; + entry.face = 0; + entry.hair_color = 0; + entry.hair_style = 0; + entry.beard = 0; + entry.beard_color = 0; + entry.eye_color_1 = 0; + entry.eye_color_2 = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.ability_time_seconds = 0; + entry.ability_number = 0; + entry.ability_time_minutes = 0; + entry.ability_time_hours = 0; + entry.exp = 0; + entry.aa_points_spent = 0; + entry.aa_exp = 0; + entry.aa_points = 0; + entry.group_leadership_exp = 0; + entry.raid_leadership_exp = 0; + entry.group_leadership_points = 0; + entry.raid_leadership_points = 0; + entry.points = 0; + entry.cur_hp = 0; + entry.mana = 0; + entry.endurance = 0; + entry.intoxication = 0; + entry.str = 0; + entry.sta = 0; + entry.cha = 0; + entry.dex = 0; + entry.int = 0; + entry.agi = 0; + entry.wis = 0; + entry.zone_change_count = 0; + entry.toxicity = 0; + entry.hunger_level = 0; + entry.thirst_level = 0; + entry.ability_up = 0; + entry.ldon_points_guk = 0; + entry.ldon_points_mir = 0; + entry.ldon_points_mmc = 0; + entry.ldon_points_ruj = 0; + entry.ldon_points_tak = 0; + entry.ldon_points_available = 0; + entry.tribute_time_remaining = 0; + entry.career_tribute_points = 0; + entry.tribute_points = 0; + entry.tribute_active = 0; + entry.pvp_status = 0; + entry.pvp_kills = 0; + entry.pvp_deaths = 0; + entry.pvp_current_points = 0; + entry.pvp_career_points = 0; + entry.pvp_best_kill_streak = 0; + entry.pvp_worst_death_streak = 0; + entry.pvp_current_kill_streak = 0; + entry.pvp2 = 0; + entry.pvp_type = 0; + entry.show_helm = 0; + entry.group_auto_consent = 0; + entry.raid_auto_consent = 0; + entry.guild_auto_consent = 0; + entry.leadership_exp_on = 0; + entry.RestTimer = 0; + entry.air_remaining = 0; + entry.autosplit_enabled = 0; + entry.lfp = 0; + entry.lfg = 0; + entry.mailkey = ""; + entry.xtargets = 5; + entry.firstlogon = 0; + entry.e_aa_effects = 0; + entry.e_percent_to_aa = 0; + entry.e_expended_aa_spent = 0; + entry.aa_points_spent_old = 0; + entry.aa_points_old = 0; + entry.e_last_invsnapshot = 0; + entry.deleted_at = 0; + + return entry; + } + + static CharacterData GetCharacterDataEntry( + const std::vector &character_datas, + int character_data_id + ) + { + for (auto &character_data : character_datas) { + if (character_data.id == character_data_id) { + return character_data; + } + } + + return NewEntity(); + } + + static CharacterData FindOne( + int character_data_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2]; + entry.last_name = row[3]; + entry.title = row[4]; + entry.suffix = row[5]; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92]; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_data_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterData character_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_data_entry.account_id)); + update_values.push_back(columns[2] + " = '" + EscapeString(character_data_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(character_data_entry.last_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(character_data_entry.title) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(character_data_entry.suffix) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(character_data_entry.zone_id)); + update_values.push_back(columns[7] + " = " + std::to_string(character_data_entry.zone_instance)); + update_values.push_back(columns[8] + " = '" + EscapeString(character_data_entry.y) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(character_data_entry.x) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(character_data_entry.z) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(character_data_entry.heading) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(character_data_entry.gender)); + update_values.push_back(columns[13] + " = " + std::to_string(character_data_entry.race)); + update_values.push_back(columns[14] + " = " + std::to_string(character_data_entry.class)); + update_values.push_back(columns[15] + " = " + std::to_string(character_data_entry.level)); + update_values.push_back(columns[16] + " = " + std::to_string(character_data_entry.deity)); + update_values.push_back(columns[17] + " = " + std::to_string(character_data_entry.birthday)); + update_values.push_back(columns[18] + " = " + std::to_string(character_data_entry.last_login)); + update_values.push_back(columns[19] + " = " + std::to_string(character_data_entry.time_played)); + update_values.push_back(columns[20] + " = " + std::to_string(character_data_entry.level2)); + update_values.push_back(columns[21] + " = " + std::to_string(character_data_entry.anon)); + update_values.push_back(columns[22] + " = " + std::to_string(character_data_entry.gm)); + update_values.push_back(columns[23] + " = " + std::to_string(character_data_entry.face)); + update_values.push_back(columns[24] + " = " + std::to_string(character_data_entry.hair_color)); + update_values.push_back(columns[25] + " = " + std::to_string(character_data_entry.hair_style)); + update_values.push_back(columns[26] + " = " + std::to_string(character_data_entry.beard)); + update_values.push_back(columns[27] + " = " + std::to_string(character_data_entry.beard_color)); + update_values.push_back(columns[28] + " = " + std::to_string(character_data_entry.eye_color_1)); + update_values.push_back(columns[29] + " = " + std::to_string(character_data_entry.eye_color_2)); + update_values.push_back(columns[30] + " = " + std::to_string(character_data_entry.drakkin_heritage)); + update_values.push_back(columns[31] + " = " + std::to_string(character_data_entry.drakkin_tattoo)); + update_values.push_back(columns[32] + " = " + std::to_string(character_data_entry.drakkin_details)); + update_values.push_back(columns[33] + " = " + std::to_string(character_data_entry.ability_time_seconds)); + update_values.push_back(columns[34] + " = " + std::to_string(character_data_entry.ability_number)); + update_values.push_back(columns[35] + " = " + std::to_string(character_data_entry.ability_time_minutes)); + update_values.push_back(columns[36] + " = " + std::to_string(character_data_entry.ability_time_hours)); + update_values.push_back(columns[37] + " = " + std::to_string(character_data_entry.exp)); + update_values.push_back(columns[38] + " = " + std::to_string(character_data_entry.aa_points_spent)); + update_values.push_back(columns[39] + " = " + std::to_string(character_data_entry.aa_exp)); + update_values.push_back(columns[40] + " = " + std::to_string(character_data_entry.aa_points)); + update_values.push_back(columns[41] + " = " + std::to_string(character_data_entry.group_leadership_exp)); + update_values.push_back(columns[42] + " = " + std::to_string(character_data_entry.raid_leadership_exp)); + update_values.push_back(columns[43] + " = " + std::to_string(character_data_entry.group_leadership_points)); + update_values.push_back(columns[44] + " = " + std::to_string(character_data_entry.raid_leadership_points)); + update_values.push_back(columns[45] + " = " + std::to_string(character_data_entry.points)); + update_values.push_back(columns[46] + " = " + std::to_string(character_data_entry.cur_hp)); + update_values.push_back(columns[47] + " = " + std::to_string(character_data_entry.mana)); + update_values.push_back(columns[48] + " = " + std::to_string(character_data_entry.endurance)); + update_values.push_back(columns[49] + " = " + std::to_string(character_data_entry.intoxication)); + update_values.push_back(columns[50] + " = " + std::to_string(character_data_entry.str)); + update_values.push_back(columns[51] + " = " + std::to_string(character_data_entry.sta)); + update_values.push_back(columns[52] + " = " + std::to_string(character_data_entry.cha)); + update_values.push_back(columns[53] + " = " + std::to_string(character_data_entry.dex)); + update_values.push_back(columns[54] + " = " + std::to_string(character_data_entry.int)); + update_values.push_back(columns[55] + " = " + std::to_string(character_data_entry.agi)); + update_values.push_back(columns[56] + " = " + std::to_string(character_data_entry.wis)); + update_values.push_back(columns[57] + " = " + std::to_string(character_data_entry.zone_change_count)); + update_values.push_back(columns[58] + " = " + std::to_string(character_data_entry.toxicity)); + update_values.push_back(columns[59] + " = " + std::to_string(character_data_entry.hunger_level)); + update_values.push_back(columns[60] + " = " + std::to_string(character_data_entry.thirst_level)); + update_values.push_back(columns[61] + " = " + std::to_string(character_data_entry.ability_up)); + update_values.push_back(columns[62] + " = " + std::to_string(character_data_entry.ldon_points_guk)); + update_values.push_back(columns[63] + " = " + std::to_string(character_data_entry.ldon_points_mir)); + update_values.push_back(columns[64] + " = " + std::to_string(character_data_entry.ldon_points_mmc)); + update_values.push_back(columns[65] + " = " + std::to_string(character_data_entry.ldon_points_ruj)); + update_values.push_back(columns[66] + " = " + std::to_string(character_data_entry.ldon_points_tak)); + update_values.push_back(columns[67] + " = " + std::to_string(character_data_entry.ldon_points_available)); + update_values.push_back(columns[68] + " = " + std::to_string(character_data_entry.tribute_time_remaining)); + update_values.push_back(columns[69] + " = " + std::to_string(character_data_entry.career_tribute_points)); + update_values.push_back(columns[70] + " = " + std::to_string(character_data_entry.tribute_points)); + update_values.push_back(columns[71] + " = " + std::to_string(character_data_entry.tribute_active)); + update_values.push_back(columns[72] + " = " + std::to_string(character_data_entry.pvp_status)); + update_values.push_back(columns[73] + " = " + std::to_string(character_data_entry.pvp_kills)); + update_values.push_back(columns[74] + " = " + std::to_string(character_data_entry.pvp_deaths)); + update_values.push_back(columns[75] + " = " + std::to_string(character_data_entry.pvp_current_points)); + update_values.push_back(columns[76] + " = " + std::to_string(character_data_entry.pvp_career_points)); + update_values.push_back(columns[77] + " = " + std::to_string(character_data_entry.pvp_best_kill_streak)); + update_values.push_back(columns[78] + " = " + std::to_string(character_data_entry.pvp_worst_death_streak)); + update_values.push_back(columns[79] + " = " + std::to_string(character_data_entry.pvp_current_kill_streak)); + update_values.push_back(columns[80] + " = " + std::to_string(character_data_entry.pvp2)); + update_values.push_back(columns[81] + " = " + std::to_string(character_data_entry.pvp_type)); + update_values.push_back(columns[82] + " = " + std::to_string(character_data_entry.show_helm)); + update_values.push_back(columns[83] + " = " + std::to_string(character_data_entry.group_auto_consent)); + update_values.push_back(columns[84] + " = " + std::to_string(character_data_entry.raid_auto_consent)); + update_values.push_back(columns[85] + " = " + std::to_string(character_data_entry.guild_auto_consent)); + update_values.push_back(columns[86] + " = " + std::to_string(character_data_entry.leadership_exp_on)); + update_values.push_back(columns[87] + " = " + std::to_string(character_data_entry.RestTimer)); + update_values.push_back(columns[88] + " = " + std::to_string(character_data_entry.air_remaining)); + update_values.push_back(columns[89] + " = " + std::to_string(character_data_entry.autosplit_enabled)); + update_values.push_back(columns[90] + " = " + std::to_string(character_data_entry.lfp)); + update_values.push_back(columns[91] + " = " + std::to_string(character_data_entry.lfg)); + update_values.push_back(columns[92] + " = '" + EscapeString(character_data_entry.mailkey) + "'"); + update_values.push_back(columns[93] + " = " + std::to_string(character_data_entry.xtargets)); + update_values.push_back(columns[94] + " = " + std::to_string(character_data_entry.firstlogon)); + update_values.push_back(columns[95] + " = " + std::to_string(character_data_entry.e_aa_effects)); + update_values.push_back(columns[96] + " = " + std::to_string(character_data_entry.e_percent_to_aa)); + update_values.push_back(columns[97] + " = " + std::to_string(character_data_entry.e_expended_aa_spent)); + update_values.push_back(columns[98] + " = " + std::to_string(character_data_entry.aa_points_spent_old)); + update_values.push_back(columns[99] + " = " + std::to_string(character_data_entry.aa_points_old)); + update_values.push_back(columns[100] + " = " + std::to_string(character_data_entry.e_last_invsnapshot)); + update_values.push_back(columns[101] + " = '" + EscapeString(character_data_entry.deleted_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_data_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterData InsertOne( + CharacterData character_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_data_entry.account_id)); + insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); + insert_values.push_back(std::to_string(character_data_entry.zone_id)); + insert_values.push_back(std::to_string(character_data_entry.zone_instance)); + insert_values.push_back("'" + EscapeString(character_data_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_data_entry.gender)); + insert_values.push_back(std::to_string(character_data_entry.race)); + insert_values.push_back(std::to_string(character_data_entry.class)); + insert_values.push_back(std::to_string(character_data_entry.level)); + insert_values.push_back(std::to_string(character_data_entry.deity)); + insert_values.push_back(std::to_string(character_data_entry.birthday)); + insert_values.push_back(std::to_string(character_data_entry.last_login)); + insert_values.push_back(std::to_string(character_data_entry.time_played)); + insert_values.push_back(std::to_string(character_data_entry.level2)); + insert_values.push_back(std::to_string(character_data_entry.anon)); + insert_values.push_back(std::to_string(character_data_entry.gm)); + insert_values.push_back(std::to_string(character_data_entry.face)); + insert_values.push_back(std::to_string(character_data_entry.hair_color)); + insert_values.push_back(std::to_string(character_data_entry.hair_style)); + insert_values.push_back(std::to_string(character_data_entry.beard)); + insert_values.push_back(std::to_string(character_data_entry.beard_color)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); + insert_values.push_back(std::to_string(character_data_entry.ability_number)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); + insert_values.push_back(std::to_string(character_data_entry.exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.points)); + insert_values.push_back(std::to_string(character_data_entry.cur_hp)); + insert_values.push_back(std::to_string(character_data_entry.mana)); + insert_values.push_back(std::to_string(character_data_entry.endurance)); + insert_values.push_back(std::to_string(character_data_entry.intoxication)); + insert_values.push_back(std::to_string(character_data_entry.str)); + insert_values.push_back(std::to_string(character_data_entry.sta)); + insert_values.push_back(std::to_string(character_data_entry.cha)); + insert_values.push_back(std::to_string(character_data_entry.dex)); + insert_values.push_back(std::to_string(character_data_entry.int)); + insert_values.push_back(std::to_string(character_data_entry.agi)); + insert_values.push_back(std::to_string(character_data_entry.wis)); + insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); + insert_values.push_back(std::to_string(character_data_entry.toxicity)); + insert_values.push_back(std::to_string(character_data_entry.hunger_level)); + insert_values.push_back(std::to_string(character_data_entry.thirst_level)); + insert_values.push_back(std::to_string(character_data_entry.ability_up)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); + insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); + insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_active)); + insert_values.push_back(std::to_string(character_data_entry.pvp_status)); + insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); + insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp2)); + insert_values.push_back(std::to_string(character_data_entry.pvp_type)); + insert_values.push_back(std::to_string(character_data_entry.show_helm)); + insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); + insert_values.push_back(std::to_string(character_data_entry.RestTimer)); + insert_values.push_back(std::to_string(character_data_entry.air_remaining)); + insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); + insert_values.push_back(std::to_string(character_data_entry.lfp)); + insert_values.push_back(std::to_string(character_data_entry.lfg)); + insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); + insert_values.push_back(std::to_string(character_data_entry.xtargets)); + insert_values.push_back(std::to_string(character_data_entry.firstlogon)); + insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); + insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); + insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); + insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); + insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_data_entry.id = results.LastInsertedID(); + return character_data_entry; + } + + character_data_entry = InstanceListRepository::NewEntity(); + + return character_data_entry; + } + + static int InsertMany( + std::vector character_data_entries + ) + { + std::vector insert_chunks; + + for (auto &character_data_entry: character_data_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_data_entry.account_id)); + insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); + insert_values.push_back(std::to_string(character_data_entry.zone_id)); + insert_values.push_back(std::to_string(character_data_entry.zone_instance)); + insert_values.push_back("'" + EscapeString(character_data_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_data_entry.gender)); + insert_values.push_back(std::to_string(character_data_entry.race)); + insert_values.push_back(std::to_string(character_data_entry.class)); + insert_values.push_back(std::to_string(character_data_entry.level)); + insert_values.push_back(std::to_string(character_data_entry.deity)); + insert_values.push_back(std::to_string(character_data_entry.birthday)); + insert_values.push_back(std::to_string(character_data_entry.last_login)); + insert_values.push_back(std::to_string(character_data_entry.time_played)); + insert_values.push_back(std::to_string(character_data_entry.level2)); + insert_values.push_back(std::to_string(character_data_entry.anon)); + insert_values.push_back(std::to_string(character_data_entry.gm)); + insert_values.push_back(std::to_string(character_data_entry.face)); + insert_values.push_back(std::to_string(character_data_entry.hair_color)); + insert_values.push_back(std::to_string(character_data_entry.hair_style)); + insert_values.push_back(std::to_string(character_data_entry.beard)); + insert_values.push_back(std::to_string(character_data_entry.beard_color)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); + insert_values.push_back(std::to_string(character_data_entry.ability_number)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); + insert_values.push_back(std::to_string(character_data_entry.exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.points)); + insert_values.push_back(std::to_string(character_data_entry.cur_hp)); + insert_values.push_back(std::to_string(character_data_entry.mana)); + insert_values.push_back(std::to_string(character_data_entry.endurance)); + insert_values.push_back(std::to_string(character_data_entry.intoxication)); + insert_values.push_back(std::to_string(character_data_entry.str)); + insert_values.push_back(std::to_string(character_data_entry.sta)); + insert_values.push_back(std::to_string(character_data_entry.cha)); + insert_values.push_back(std::to_string(character_data_entry.dex)); + insert_values.push_back(std::to_string(character_data_entry.int)); + insert_values.push_back(std::to_string(character_data_entry.agi)); + insert_values.push_back(std::to_string(character_data_entry.wis)); + insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); + insert_values.push_back(std::to_string(character_data_entry.toxicity)); + insert_values.push_back(std::to_string(character_data_entry.hunger_level)); + insert_values.push_back(std::to_string(character_data_entry.thirst_level)); + insert_values.push_back(std::to_string(character_data_entry.ability_up)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); + insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); + insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_active)); + insert_values.push_back(std::to_string(character_data_entry.pvp_status)); + insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); + insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp2)); + insert_values.push_back(std::to_string(character_data_entry.pvp_type)); + insert_values.push_back(std::to_string(character_data_entry.show_helm)); + insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); + insert_values.push_back(std::to_string(character_data_entry.RestTimer)); + insert_values.push_back(std::to_string(character_data_entry.air_remaining)); + insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); + insert_values.push_back(std::to_string(character_data_entry.lfp)); + insert_values.push_back(std::to_string(character_data_entry.lfg)); + insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); + insert_values.push_back(std::to_string(character_data_entry.xtargets)); + insert_values.push_back(std::to_string(character_data_entry.firstlogon)); + insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); + insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); + insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); + insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); + insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2]; + entry.last_name = row[3]; + entry.title = row[4]; + entry.suffix = row[5]; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92]; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_DATA_REPOSITORY_H diff --git a/common/repositories/character_disciplines_repository.h b/common/repositories/character_disciplines_repository.h new file mode 100644 index 000000000..bcca9c77b --- /dev/null +++ b/common/repositories/character_disciplines_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_DISCIPLINES_REPOSITORY_H +#define EQEMU_CHARACTER_DISCIPLINES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterDisciplinesRepository { +public: + struct CharacterDisciplines { + int id; + int16 slot_id; + int16 disc_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "disc_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_disciplines"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterDisciplines NewEntity() + { + CharacterDisciplines entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.disc_id = 0; + + return entry; + } + + static CharacterDisciplines GetCharacterDisciplinesEntry( + const std::vector &character_discipliness, + int character_disciplines_id + ) + { + for (auto &character_disciplines : character_discipliness) { + if (character_disciplines.slot_id == character_disciplines_id) { + return character_disciplines; + } + } + + return NewEntity(); + } + + static CharacterDisciplines FindOne( + int character_disciplines_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_disciplines_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_disciplines_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_disciplines_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterDisciplines character_disciplines_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_disciplines_entry.disc_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_disciplines_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterDisciplines InsertOne( + CharacterDisciplines character_disciplines_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_disciplines_entry.id = results.LastInsertedID(); + return character_disciplines_entry; + } + + character_disciplines_entry = InstanceListRepository::NewEntity(); + + return character_disciplines_entry; + } + + static int InsertMany( + std::vector character_disciplines_entries + ) + { + std::vector insert_chunks; + + for (auto &character_disciplines_entry: character_disciplines_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_DISCIPLINES_REPOSITORY_H diff --git a/common/repositories/character_enabledtasks_repository.h b/common/repositories/character_enabledtasks_repository.h new file mode 100644 index 000000000..9bb4b04b6 --- /dev/null +++ b/common/repositories/character_enabledtasks_repository.h @@ -0,0 +1,255 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H +#define EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterEnabledtasksRepository { +public: + struct CharacterEnabledtasks { + int charid; + int taskid; + }; + + static std::string PrimaryKey() + { + return std::string("taskid"); + } + + static std::vector Columns() + { + return { + "charid", + "taskid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_enabledtasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterEnabledtasks NewEntity() + { + CharacterEnabledtasks entry{}; + + entry.charid = 0; + entry.taskid = 0; + + return entry; + } + + static CharacterEnabledtasks GetCharacterEnabledtasksEntry( + const std::vector &character_enabledtaskss, + int character_enabledtasks_id + ) + { + for (auto &character_enabledtasks : character_enabledtaskss) { + if (character_enabledtasks.taskid == character_enabledtasks_id) { + return character_enabledtasks; + } + } + + return NewEntity(); + } + + static CharacterEnabledtasks FindOne( + int character_enabledtasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_enabledtasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterEnabledtasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_enabledtasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_enabledtasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterEnabledtasks character_enabledtasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_enabledtasks_entry.taskid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterEnabledtasks InsertOne( + CharacterEnabledtasks character_enabledtasks_entry + ) + { + std::vector insert_values; + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_enabledtasks_entry.id = results.LastInsertedID(); + return character_enabledtasks_entry; + } + + character_enabledtasks_entry = InstanceListRepository::NewEntity(); + + return character_enabledtasks_entry; + } + + static int InsertMany( + std::vector character_enabledtasks_entries + ) + { + std::vector insert_chunks; + + for (auto &character_enabledtasks_entry: character_enabledtasks_entries) { + std::vector insert_values; + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterEnabledtasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h new file mode 100644 index 000000000..df5047232 --- /dev/null +++ b/common/repositories/character_inspect_messages_repository.h @@ -0,0 +1,260 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H +#define EQEMU_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterInspectMessagesRepository { +public: + struct CharacterInspectMessages { + int id; + std::string inspect_message; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "inspect_message", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_inspect_messages"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterInspectMessages NewEntity() + { + CharacterInspectMessages entry{}; + + entry.id = 0; + entry.inspect_message = ""; + + return entry; + } + + static CharacterInspectMessages GetCharacterInspectMessagesEntry( + const std::vector &character_inspect_messagess, + int character_inspect_messages_id + ) + { + for (auto &character_inspect_messages : character_inspect_messagess) { + if (character_inspect_messages.id == character_inspect_messages_id) { + return character_inspect_messages; + } + } + + return NewEntity(); + } + + static CharacterInspectMessages FindOne( + int character_inspect_messages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_inspect_messages_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_inspect_messages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_inspect_messages_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterInspectMessages character_inspect_messages_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back( + columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'" + ); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_inspect_messages_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterInspectMessages InsertOne( + CharacterInspectMessages character_inspect_messages_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_inspect_messages_entry.id = results.LastInsertedID(); + return character_inspect_messages_entry; + } + + character_inspect_messages_entry = InstanceListRepository::NewEntity(); + + return character_inspect_messages_entry; + } + + static int InsertMany( + std::vector character_inspect_messages_entries + ) + { + std::vector insert_chunks; + + for (auto &character_inspect_messages_entry: character_inspect_messages_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H diff --git a/common/repositories/character_item_recast_repository.h b/common/repositories/character_item_recast_repository.h new file mode 100644 index 000000000..8c12e46df --- /dev/null +++ b/common/repositories/character_item_recast_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_ITEM_RECAST_REPOSITORY_H +#define EQEMU_CHARACTER_ITEM_RECAST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterItemRecastRepository { +public: + struct CharacterItemRecast { + int id; + int16 recast_type; + int timestamp; + }; + + static std::string PrimaryKey() + { + return std::string("recast_type"); + } + + static std::vector Columns() + { + return { + "id", + "recast_type", + "timestamp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_item_recast"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterItemRecast NewEntity() + { + CharacterItemRecast entry{}; + + entry.id = 0; + entry.recast_type = 0; + entry.timestamp = 0; + + return entry; + } + + static CharacterItemRecast GetCharacterItemRecastEntry( + const std::vector &character_item_recasts, + int character_item_recast_id + ) + { + for (auto &character_item_recast : character_item_recasts) { + if (character_item_recast.recast_type == character_item_recast_id) { + return character_item_recast; + } + } + + return NewEntity(); + } + + static CharacterItemRecast FindOne( + int character_item_recast_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_item_recast_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_item_recast_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_item_recast_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterItemRecast character_item_recast_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_item_recast_entry.timestamp)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_item_recast_entry.recast_type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterItemRecast InsertOne( + CharacterItemRecast character_item_recast_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_item_recast_entry.id = results.LastInsertedID(); + return character_item_recast_entry; + } + + character_item_recast_entry = InstanceListRepository::NewEntity(); + + return character_item_recast_entry; + } + + static int InsertMany( + std::vector character_item_recast_entries + ) + { + std::vector insert_chunks; + + for (auto &character_item_recast_entry: character_item_recast_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_ITEM_RECAST_REPOSITORY_H diff --git a/common/repositories/character_languages_repository.h b/common/repositories/character_languages_repository.h new file mode 100644 index 000000000..c9598b908 --- /dev/null +++ b/common/repositories/character_languages_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_LANGUAGES_REPOSITORY_H +#define EQEMU_CHARACTER_LANGUAGES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterLanguagesRepository { +public: + struct CharacterLanguages { + int id; + int16 lang_id; + int16 value; + }; + + static std::string PrimaryKey() + { + return std::string("lang_id"); + } + + static std::vector Columns() + { + return { + "id", + "lang_id", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_languages"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterLanguages NewEntity() + { + CharacterLanguages entry{}; + + entry.id = 0; + entry.lang_id = 0; + entry.value = 0; + + return entry; + } + + static CharacterLanguages GetCharacterLanguagesEntry( + const std::vector &character_languagess, + int character_languages_id + ) + { + for (auto &character_languages : character_languagess) { + if (character_languages.lang_id == character_languages_id) { + return character_languages; + } + } + + return NewEntity(); + } + + static CharacterLanguages FindOne( + int character_languages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_languages_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_languages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_languages_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterLanguages character_languages_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_languages_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_languages_entry.lang_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterLanguages InsertOne( + CharacterLanguages character_languages_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_languages_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_languages_entry.id = results.LastInsertedID(); + return character_languages_entry; + } + + character_languages_entry = InstanceListRepository::NewEntity(); + + return character_languages_entry; + } + + static int InsertMany( + std::vector character_languages_entries + ) + { + std::vector insert_chunks; + + for (auto &character_languages_entry: character_languages_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_languages_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_LANGUAGES_REPOSITORY_H diff --git a/common/repositories/character_leadership_abilities_repository.h b/common/repositories/character_leadership_abilities_repository.h new file mode 100644 index 000000000..6a9047662 --- /dev/null +++ b/common/repositories/character_leadership_abilities_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H +#define EQEMU_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterLeadershipAbilitiesRepository { +public: + struct CharacterLeadershipAbilities { + int id; + int16 slot; + int16 rank; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "rank", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_leadership_abilities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterLeadershipAbilities NewEntity() + { + CharacterLeadershipAbilities entry{}; + + entry.id = 0; + entry.slot = 0; + entry.rank = 0; + + return entry; + } + + static CharacterLeadershipAbilities GetCharacterLeadershipAbilitiesEntry( + const std::vector &character_leadership_abilitiess, + int character_leadership_abilities_id + ) + { + for (auto &character_leadership_abilities : character_leadership_abilitiess) { + if (character_leadership_abilities.slot == character_leadership_abilities_id) { + return character_leadership_abilities; + } + } + + return NewEntity(); + } + + static CharacterLeadershipAbilities FindOne( + int character_leadership_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_leadership_abilities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_leadership_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_leadership_abilities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterLeadershipAbilities character_leadership_abilities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_leadership_abilities_entry.rank)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_leadership_abilities_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterLeadershipAbilities InsertOne( + CharacterLeadershipAbilities character_leadership_abilities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_leadership_abilities_entry.id = results.LastInsertedID(); + return character_leadership_abilities_entry; + } + + character_leadership_abilities_entry = InstanceListRepository::NewEntity(); + + return character_leadership_abilities_entry; + } + + static int InsertMany( + std::vector character_leadership_abilities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_leadership_abilities_entry: character_leadership_abilities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H diff --git a/common/repositories/character_material_repository.h b/common/repositories/character_material_repository.h new file mode 100644 index 000000000..28d244128 --- /dev/null +++ b/common/repositories/character_material_repository.h @@ -0,0 +1,295 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_MATERIAL_REPOSITORY_H +#define EQEMU_CHARACTER_MATERIAL_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterMaterialRepository { +public: + struct CharacterMaterial { + int id; + int8 slot; + int8 blue; + int8 green; + int8 red; + int8 use_tint; + int color; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "blue", + "green", + "red", + "use_tint", + "color", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_material"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterMaterial NewEntity() + { + CharacterMaterial entry{}; + + entry.id = 0; + entry.slot = 0; + entry.blue = 0; + entry.green = 0; + entry.red = 0; + entry.use_tint = 0; + entry.color = 0; + + return entry; + } + + static CharacterMaterial GetCharacterMaterialEntry( + const std::vector &character_materials, + int character_material_id + ) + { + for (auto &character_material : character_materials) { + if (character_material.slot == character_material_id) { + return character_material; + } + } + + return NewEntity(); + } + + static CharacterMaterial FindOne( + int character_material_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_material_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_material_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_material_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterMaterial character_material_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_material_entry.blue)); + update_values.push_back(columns[3] + " = " + std::to_string(character_material_entry.green)); + update_values.push_back(columns[4] + " = " + std::to_string(character_material_entry.red)); + update_values.push_back(columns[5] + " = " + std::to_string(character_material_entry.use_tint)); + update_values.push_back(columns[6] + " = " + std::to_string(character_material_entry.color)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_material_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterMaterial InsertOne( + CharacterMaterial character_material_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_material_entry.blue)); + insert_values.push_back(std::to_string(character_material_entry.green)); + insert_values.push_back(std::to_string(character_material_entry.red)); + insert_values.push_back(std::to_string(character_material_entry.use_tint)); + insert_values.push_back(std::to_string(character_material_entry.color)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_material_entry.id = results.LastInsertedID(); + return character_material_entry; + } + + character_material_entry = InstanceListRepository::NewEntity(); + + return character_material_entry; + } + + static int InsertMany( + std::vector character_material_entries + ) + { + std::vector insert_chunks; + + for (auto &character_material_entry: character_material_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_material_entry.blue)); + insert_values.push_back(std::to_string(character_material_entry.green)); + insert_values.push_back(std::to_string(character_material_entry.red)); + insert_values.push_back(std::to_string(character_material_entry.use_tint)); + insert_values.push_back(std::to_string(character_material_entry.color)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_MATERIAL_REPOSITORY_H diff --git a/common/repositories/character_memmed_spells_repository.h b/common/repositories/character_memmed_spells_repository.h new file mode 100644 index 000000000..515096fdf --- /dev/null +++ b/common/repositories/character_memmed_spells_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_MEMMED_SPELLS_REPOSITORY_H +#define EQEMU_CHARACTER_MEMMED_SPELLS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterMemmedSpellsRepository { +public: + struct CharacterMemmedSpells { + int id; + int16 slot_id; + int16 spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_memmed_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterMemmedSpells NewEntity() + { + CharacterMemmedSpells entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterMemmedSpells GetCharacterMemmedSpellsEntry( + const std::vector &character_memmed_spellss, + int character_memmed_spells_id + ) + { + for (auto &character_memmed_spells : character_memmed_spellss) { + if (character_memmed_spells.slot_id == character_memmed_spells_id) { + return character_memmed_spells; + } + } + + return NewEntity(); + } + + static CharacterMemmedSpells FindOne( + int character_memmed_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_memmed_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_memmed_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_memmed_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterMemmedSpells character_memmed_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_memmed_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_memmed_spells_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterMemmedSpells InsertOne( + CharacterMemmedSpells character_memmed_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_memmed_spells_entry.id = results.LastInsertedID(); + return character_memmed_spells_entry; + } + + character_memmed_spells_entry = InstanceListRepository::NewEntity(); + + return character_memmed_spells_entry; + } + + static int InsertMany( + std::vector character_memmed_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &character_memmed_spells_entry: character_memmed_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_MEMMED_SPELLS_REPOSITORY_H diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h new file mode 100644 index 000000000..cfa6fab9d --- /dev/null +++ b/common/repositories/character_pet_buffs_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_PET_BUFFS_REPOSITORY_H +#define EQEMU_CHARACTER_PET_BUFFS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterPetBuffsRepository { +public: + struct CharacterPetBuffs { + int char_id; + int pet; + int slot; + int spell_id; + int8 caster_level; + std::string castername; + int ticsremaining; + int counters; + int numhits; + int rune; + int8 instrument_mod; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "slot", + "spell_id", + "caster_level", + "castername", + "ticsremaining", + "counters", + "numhits", + "rune", + "instrument_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_buffs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetBuffs NewEntity() + { + CharacterPetBuffs entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.slot = 0; + entry.spell_id = 0; + entry.caster_level = 0; + entry.castername = ""; + entry.ticsremaining = 0; + entry.counters = 0; + entry.numhits = 0; + entry.rune = 0; + entry.instrument_mod = 10; + + return entry; + } + + static CharacterPetBuffs GetCharacterPetBuffsEntry( + const std::vector &character_pet_buffss, + int character_pet_buffs_id + ) + { + for (auto &character_pet_buffs : character_pet_buffss) { + if (character_pet_buffs.slot == character_pet_buffs_id) { + return character_pet_buffs; + } + } + + return NewEntity(); + } + + static CharacterPetBuffs FindOne( + int character_pet_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_buffs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5]; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_buffs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetBuffs character_pet_buffs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_buffs_entry.spell_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_pet_buffs_entry.caster_level)); + update_values.push_back(columns[5] + " = '" + EscapeString(character_pet_buffs_entry.castername) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(character_pet_buffs_entry.ticsremaining)); + update_values.push_back(columns[7] + " = " + std::to_string(character_pet_buffs_entry.counters)); + update_values.push_back(columns[8] + " = " + std::to_string(character_pet_buffs_entry.numhits)); + update_values.push_back(columns[9] + " = " + std::to_string(character_pet_buffs_entry.rune)); + update_values.push_back(columns[10] + " = " + std::to_string(character_pet_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_buffs_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetBuffs InsertOne( + CharacterPetBuffs character_pet_buffs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); + insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_buffs_entry.id = results.LastInsertedID(); + return character_pet_buffs_entry; + } + + character_pet_buffs_entry = InstanceListRepository::NewEntity(); + + return character_pet_buffs_entry; + } + + static int InsertMany( + std::vector character_pet_buffs_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_buffs_entry: character_pet_buffs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); + insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5]; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_PET_BUFFS_REPOSITORY_H diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h new file mode 100644 index 000000000..a8fced0e8 --- /dev/null +++ b/common/repositories/character_pet_info_repository.h @@ -0,0 +1,303 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_PET_INFO_REPOSITORY_H +#define EQEMU_CHARACTER_PET_INFO_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterPetInfoRepository { +public: + struct CharacterPetInfo { + int char_id; + int pet; + std::string petname; + int petpower; + int spell_id; + int hp; + int mana; + std::string size; + }; + + static std::string PrimaryKey() + { + return std::string("pet"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "petname", + "petpower", + "spell_id", + "hp", + "mana", + "size", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_info"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetInfo NewEntity() + { + CharacterPetInfo entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.petname = ""; + entry.petpower = 0; + entry.spell_id = 0; + entry.hp = 0; + entry.mana = 0; + entry.size = 0; + + return entry; + } + + static CharacterPetInfo GetCharacterPetInfoEntry( + const std::vector &character_pet_infos, + int character_pet_info_id + ) + { + for (auto &character_pet_info : character_pet_infos) { + if (character_pet_info.pet == character_pet_info_id) { + return character_pet_info; + } + } + + return NewEntity(); + } + + static CharacterPetInfo FindOne( + int character_pet_info_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_info_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2]; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_info_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_info_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetInfo character_pet_info_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(character_pet_info_entry.petname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_info_entry.petpower)); + update_values.push_back(columns[4] + " = " + std::to_string(character_pet_info_entry.spell_id)); + update_values.push_back(columns[5] + " = " + std::to_string(character_pet_info_entry.hp)); + update_values.push_back(columns[6] + " = " + std::to_string(character_pet_info_entry.mana)); + update_values.push_back(columns[7] + " = '" + EscapeString(character_pet_info_entry.size) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_info_entry.pet + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetInfo InsertOne( + CharacterPetInfo character_pet_info_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); + insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.hp)); + insert_values.push_back(std::to_string(character_pet_info_entry.mana)); + insert_values.push_back("'" + EscapeString(character_pet_info_entry.size) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_info_entry.id = results.LastInsertedID(); + return character_pet_info_entry; + } + + character_pet_info_entry = InstanceListRepository::NewEntity(); + + return character_pet_info_entry; + } + + static int InsertMany( + std::vector character_pet_info_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_info_entry: character_pet_info_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); + insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.hp)); + insert_values.push_back(std::to_string(character_pet_info_entry.mana)); + insert_values.push_back("'" + EscapeString(character_pet_info_entry.size) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2]; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_PET_INFO_REPOSITORY_H diff --git a/common/repositories/character_pet_inventory_repository.h b/common/repositories/character_pet_inventory_repository.h new file mode 100644 index 000000000..65aab57a7 --- /dev/null +++ b/common/repositories/character_pet_inventory_repository.h @@ -0,0 +1,268 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_PET_INVENTORY_REPOSITORY_H +#define EQEMU_CHARACTER_PET_INVENTORY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterPetInventoryRepository { +public: + struct CharacterPetInventory { + int char_id; + int pet; + int slot; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "slot", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_inventory"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetInventory NewEntity() + { + CharacterPetInventory entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.slot = 0; + entry.item_id = 0; + + return entry; + } + + static CharacterPetInventory GetCharacterPetInventoryEntry( + const std::vector &character_pet_inventorys, + int character_pet_inventory_id + ) + { + for (auto &character_pet_inventory : character_pet_inventorys) { + if (character_pet_inventory.slot == character_pet_inventory_id) { + return character_pet_inventory; + } + } + + return NewEntity(); + } + + static CharacterPetInventory FindOne( + int character_pet_inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_inventory_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_inventory_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetInventory character_pet_inventory_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_inventory_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_inventory_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetInventory InsertOne( + CharacterPetInventory character_pet_inventory_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_inventory_entry.id = results.LastInsertedID(); + return character_pet_inventory_entry; + } + + character_pet_inventory_entry = InstanceListRepository::NewEntity(); + + return character_pet_inventory_entry; + } + + static int InsertMany( + std::vector character_pet_inventory_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_inventory_entry: character_pet_inventory_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_PET_INVENTORY_REPOSITORY_H diff --git a/common/repositories/character_potionbelt_repository.h b/common/repositories/character_potionbelt_repository.h new file mode 100644 index 000000000..f90b11f09 --- /dev/null +++ b/common/repositories/character_potionbelt_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_POTIONBELT_REPOSITORY_H +#define EQEMU_CHARACTER_POTIONBELT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterPotionbeltRepository { +public: + struct CharacterPotionbelt { + int id; + int8 potion_id; + int item_id; + int icon; + }; + + static std::string PrimaryKey() + { + return std::string("potion_id"); + } + + static std::vector Columns() + { + return { + "id", + "potion_id", + "item_id", + "icon", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_potionbelt"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPotionbelt NewEntity() + { + CharacterPotionbelt entry{}; + + entry.id = 0; + entry.potion_id = 0; + entry.item_id = 0; + entry.icon = 0; + + return entry; + } + + static CharacterPotionbelt GetCharacterPotionbeltEntry( + const std::vector &character_potionbelts, + int character_potionbelt_id + ) + { + for (auto &character_potionbelt : character_potionbelts) { + if (character_potionbelt.potion_id == character_potionbelt_id) { + return character_potionbelt; + } + } + + return NewEntity(); + } + + static CharacterPotionbelt FindOne( + int character_potionbelt_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_potionbelt_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_potionbelt_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_potionbelt_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPotionbelt character_potionbelt_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_potionbelt_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_potionbelt_entry.icon)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_potionbelt_entry.potion_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPotionbelt InsertOne( + CharacterPotionbelt character_potionbelt_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_potionbelt_entry.id = results.LastInsertedID(); + return character_potionbelt_entry; + } + + character_potionbelt_entry = InstanceListRepository::NewEntity(); + + return character_potionbelt_entry; + } + + static int InsertMany( + std::vector character_potionbelt_entries + ) + { + std::vector insert_chunks; + + for (auto &character_potionbelt_entry: character_potionbelt_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_POTIONBELT_REPOSITORY_H diff --git a/common/repositories/character_skills_repository.h b/common/repositories/character_skills_repository.h new file mode 100644 index 000000000..fa260609e --- /dev/null +++ b/common/repositories/character_skills_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_SKILLS_REPOSITORY_H +#define EQEMU_CHARACTER_SKILLS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterSkillsRepository { +public: + struct CharacterSkills { + int id; + int16 skill_id; + int16 value; + }; + + static std::string PrimaryKey() + { + return std::string("skill_id"); + } + + static std::vector Columns() + { + return { + "id", + "skill_id", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_skills"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterSkills NewEntity() + { + CharacterSkills entry{}; + + entry.id = 0; + entry.skill_id = 0; + entry.value = 0; + + return entry; + } + + static CharacterSkills GetCharacterSkillsEntry( + const std::vector &character_skillss, + int character_skills_id + ) + { + for (auto &character_skills : character_skillss) { + if (character_skills.skill_id == character_skills_id) { + return character_skills; + } + } + + return NewEntity(); + } + + static CharacterSkills FindOne( + int character_skills_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_skills_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_skills_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_skills_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterSkills character_skills_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_skills_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_skills_entry.skill_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterSkills InsertOne( + CharacterSkills character_skills_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_skills_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_skills_entry.id = results.LastInsertedID(); + return character_skills_entry; + } + + character_skills_entry = InstanceListRepository::NewEntity(); + + return character_skills_entry; + } + + static int InsertMany( + std::vector character_skills_entries + ) + { + std::vector insert_chunks; + + for (auto &character_skills_entry: character_skills_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_skills_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_SKILLS_REPOSITORY_H diff --git a/common/repositories/character_spells_repository.h b/common/repositories/character_spells_repository.h new file mode 100644 index 000000000..eeb745198 --- /dev/null +++ b/common/repositories/character_spells_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_SPELLS_REPOSITORY_H +#define EQEMU_CHARACTER_SPELLS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterSpellsRepository { +public: + struct CharacterSpells { + int id; + int16 slot_id; + int16 spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterSpells NewEntity() + { + CharacterSpells entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterSpells GetCharacterSpellsEntry( + const std::vector &character_spellss, + int character_spells_id + ) + { + for (auto &character_spells : character_spellss) { + if (character_spells.slot_id == character_spells_id) { + return character_spells; + } + } + + return NewEntity(); + } + + static CharacterSpells FindOne( + int character_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterSpells character_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_spells_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterSpells InsertOne( + CharacterSpells character_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_spells_entry.id = results.LastInsertedID(); + return character_spells_entry; + } + + character_spells_entry = InstanceListRepository::NewEntity(); + + return character_spells_entry; + } + + static int InsertMany( + std::vector character_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &character_spells_entry: character_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_spells_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_SPELLS_REPOSITORY_H diff --git a/common/repositories/character_tasks_repository.h b/common/repositories/character_tasks_repository.h new file mode 100644 index 000000000..2e3851415 --- /dev/null +++ b/common/repositories/character_tasks_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_TASKS_REPOSITORY_H +#define EQEMU_CHARACTER_TASKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterTasksRepository { +public: + struct CharacterTasks { + int charid; + int taskid; + int slot; + int8 type; + int acceptedtime; + }; + + static std::string PrimaryKey() + { + return std::string("taskid"); + } + + static std::vector Columns() + { + return { + "charid", + "taskid", + "slot", + "type", + "acceptedtime", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterTasks NewEntity() + { + CharacterTasks entry{}; + + entry.charid = 0; + entry.taskid = 0; + entry.slot = 0; + entry.type = 0; + entry.acceptedtime = 0; + + return entry; + } + + static CharacterTasks GetCharacterTasksEntry( + const std::vector &character_taskss, + int character_tasks_id + ) + { + for (auto &character_tasks : character_taskss) { + if (character_tasks.taskid == character_tasks_id) { + return character_tasks; + } + } + + return NewEntity(); + } + + static CharacterTasks FindOne( + int character_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterTasks character_tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_tasks_entry.slot)); + update_values.push_back(columns[3] + " = " + std::to_string(character_tasks_entry.type)); + update_values.push_back(columns[4] + " = " + std::to_string(character_tasks_entry.acceptedtime)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_tasks_entry.taskid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterTasks InsertOne( + CharacterTasks character_tasks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tasks_entry.slot)); + insert_values.push_back(std::to_string(character_tasks_entry.type)); + insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_tasks_entry.id = results.LastInsertedID(); + return character_tasks_entry; + } + + character_tasks_entry = InstanceListRepository::NewEntity(); + + return character_tasks_entry; + } + + static int InsertMany( + std::vector character_tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &character_tasks_entry: character_tasks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tasks_entry.slot)); + insert_values.push_back(std::to_string(character_tasks_entry.type)); + insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_TASKS_REPOSITORY_H diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h new file mode 100644 index 000000000..b0216e779 --- /dev/null +++ b/common/repositories/character_tribute_repository.h @@ -0,0 +1,269 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H +#define EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CharacterTributeRepository { +public: + struct CharacterTribute { + int id; + int8 tier; + int tribute; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "id", + "tier", + "tribute", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_tribute"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterTribute NewEntity() + { + CharacterTribute entry{}; + + entry.id = 0; + entry.tier = 0; + entry.tribute = 0; + + return entry; + } + + static CharacterTribute GetCharacterTributeEntry( + const std::vector &character_tributes, + int character_tribute_id + ) + { + for (auto &character_tribute : character_tributes) { + if (character_tribute.== character_tribute_id) { + return character_tribute; + } + } + + return NewEntity(); + } + + static CharacterTribute FindOne( + int character_tribute_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_tribute_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_tribute_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_tribute_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterTribute character_tribute_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(character_tribute_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_tribute_entry.tier)); + update_values.push_back(columns[2] + " = " + std::to_string(character_tribute_entry.tribute)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_tribute_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterTribute InsertOne( + CharacterTribute character_tribute_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tribute_entry.id)); + insert_values.push_back(std::to_string(character_tribute_entry.tier)); + insert_values.push_back(std::to_string(character_tribute_entry.tribute)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_tribute_entry.id = results.LastInsertedID(); + return character_tribute_entry; + } + + character_tribute_entry = InstanceListRepository::NewEntity(); + + return character_tribute_entry; + } + + static int InsertMany( + std::vector character_tribute_entries + ) + { + std::vector insert_chunks; + + for (auto &character_tribute_entry: character_tribute_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tribute_entry.id)); + insert_values.push_back(std::to_string(character_tribute_entry.tier)); + insert_values.push_back(std::to_string(character_tribute_entry.tribute)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h new file mode 100644 index 000000000..6d6ce6f56 --- /dev/null +++ b/common/repositories/chatchannels_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CHATCHANNELS_REPOSITORY_H +#define EQEMU_CHATCHANNELS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ChatchannelsRepository { +public: + struct Chatchannels { + std::string name; + std::string owner; + std::string password; + int minstatus; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "owner", + "password", + "minstatus", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("chatchannels"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Chatchannels NewEntity() + { + Chatchannels entry{}; + + entry.name = ""; + entry.owner = ""; + entry.password = ""; + entry.minstatus = 0; + + return entry; + } + + static Chatchannels GetChatchannelsEntry( + const std::vector &chatchannelss, + int chatchannels_id + ) + { + for (auto &chatchannels : chatchannelss) { + if (chatchannels.name == chatchannels_id) { + return chatchannels; + } + } + + return NewEntity(); + } + + static Chatchannels FindOne( + int chatchannels_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + chatchannels_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Chatchannels entry{}; + + entry.name = row[0]; + entry.owner = row[1]; + entry.password = row[2]; + entry.minstatus = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int chatchannels_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + chatchannels_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Chatchannels chatchannels_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(chatchannels_entry.owner) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(chatchannels_entry.password) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(chatchannels_entry.minstatus)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + chatchannels_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Chatchannels InsertOne( + Chatchannels chatchannels_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); + insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); + insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + chatchannels_entry.id = results.LastInsertedID(); + return chatchannels_entry; + } + + chatchannels_entry = InstanceListRepository::NewEntity(); + + return chatchannels_entry; + } + + static int InsertMany( + std::vector chatchannels_entries + ) + { + std::vector insert_chunks; + + for (auto &chatchannels_entry: chatchannels_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); + insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); + insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Chatchannels entry{}; + + entry.name = row[0]; + entry.owner = row[1]; + entry.password = row[2]; + entry.minstatus = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_CHATCHANNELS_REPOSITORY_H diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h new file mode 100644 index 000000000..92914b990 --- /dev/null +++ b/common/repositories/command_settings_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_COMMAND_SETTINGS_REPOSITORY_H +#define EQEMU_COMMAND_SETTINGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CommandSettingsRepository { +public: + struct CommandSettings { + std::string command; + int access; + std::string aliases; + }; + + static std::string PrimaryKey() + { + return std::string("command"); + } + + static std::vector Columns() + { + return { + "command", + "access", + "aliases", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("command_settings"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CommandSettings NewEntity() + { + CommandSettings entry{}; + + entry.command = ""; + entry.access = 0; + entry.aliases = ""; + + return entry; + } + + static CommandSettings GetCommandSettingsEntry( + const std::vector &command_settingss, + int command_settings_id + ) + { + for (auto &command_settings : command_settingss) { + if (command_settings.command == command_settings_id) { + return command_settings; + } + } + + return NewEntity(); + } + + static CommandSettings FindOne( + int command_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + command_settings_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CommandSettings entry{}; + + entry.command = row[0]; + entry.access = atoi(row[1]); + entry.aliases = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int command_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + command_settings_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CommandSettings command_settings_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(command_settings_entry.access)); + update_values.push_back(columns[2] + " = '" + EscapeString(command_settings_entry.aliases) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + command_settings_entry.command + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CommandSettings InsertOne( + CommandSettings command_settings_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(command_settings_entry.access)); + insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + command_settings_entry.id = results.LastInsertedID(); + return command_settings_entry; + } + + command_settings_entry = InstanceListRepository::NewEntity(); + + return command_settings_entry; + } + + static int InsertMany( + std::vector command_settings_entries + ) + { + std::vector insert_chunks; + + for (auto &command_settings_entry: command_settings_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(command_settings_entry.access)); + insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CommandSettings entry{}; + + entry.command = row[0]; + entry.access = atoi(row[1]); + entry.aliases = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_COMMAND_SETTINGS_REPOSITORY_H diff --git a/common/repositories/completed_tasks_repository.h b/common/repositories/completed_tasks_repository.h new file mode 100644 index 000000000..f05cd03cc --- /dev/null +++ b/common/repositories/completed_tasks_repository.h @@ -0,0 +1,268 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_COMPLETED_TASKS_REPOSITORY_H +#define EQEMU_COMPLETED_TASKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class CompletedTasksRepository { +public: + struct CompletedTasks { + int charid; + int completedtime; + int taskid; + int activityid; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "charid", + "completedtime", + "taskid", + "activityid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("completed_tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CompletedTasks NewEntity() + { + CompletedTasks entry{}; + + entry.charid = 0; + entry.completedtime = 0; + entry.taskid = 0; + entry.activityid = 0; + + return entry; + } + + static CompletedTasks GetCompletedTasksEntry( + const std::vector &completed_taskss, + int completed_tasks_id + ) + { + for (auto &completed_tasks : completed_taskss) { + if (completed_tasks.activityid == completed_tasks_id) { + return completed_tasks; + } + } + + return NewEntity(); + } + + static CompletedTasks FindOne( + int completed_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + completed_tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int completed_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + completed_tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CompletedTasks completed_tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + completed_tasks_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CompletedTasks InsertOne( + CompletedTasks completed_tasks_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + completed_tasks_entry.id = results.LastInsertedID(); + return completed_tasks_entry; + } + + completed_tasks_entry = InstanceListRepository::NewEntity(); + + return completed_tasks_entry; + } + + static int InsertMany( + std::vector completed_tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &completed_tasks_entry: completed_tasks_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_COMPLETED_TASKS_REPOSITORY_H diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h new file mode 100644 index 000000000..facd547d0 --- /dev/null +++ b/common/repositories/data_buckets_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DATA_BUCKETS_REPOSITORY_H +#define EQEMU_DATA_BUCKETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class DataBucketsRepository { +public: + struct DataBuckets { + int id; + std::string key; + std::string value; + int expires; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "key", + "value", + "expires", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("data_buckets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DataBuckets NewEntity() + { + DataBuckets entry{}; + + entry.id = 0; + entry.key = 0; + entry.value = 0; + entry.expires = 0; + + return entry; + } + + static DataBuckets GetDataBucketsEntry( + const std::vector &data_bucketss, + int data_buckets_id + ) + { + for (auto &data_buckets : data_bucketss) { + if (data_buckets.id == data_buckets_id) { + return data_buckets; + } + } + + return NewEntity(); + } + + static DataBuckets FindOne( + int data_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + data_buckets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + entry.expires = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int data_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + data_buckets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DataBuckets data_buckets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(data_buckets_entry.key) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(data_buckets_entry.value) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(data_buckets_entry.expires)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + data_buckets_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DataBuckets InsertOne( + DataBuckets data_buckets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); + insert_values.push_back(std::to_string(data_buckets_entry.expires)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + data_buckets_entry.id = results.LastInsertedID(); + return data_buckets_entry; + } + + data_buckets_entry = InstanceListRepository::NewEntity(); + + return data_buckets_entry; + } + + static int InsertMany( + std::vector data_buckets_entries + ) + { + std::vector insert_chunks; + + for (auto &data_buckets_entry: data_buckets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); + insert_values.push_back(std::to_string(data_buckets_entry.expires)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + entry.expires = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_DATA_BUCKETS_REPOSITORY_H diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h new file mode 100644 index 000000000..91a5f2bf4 --- /dev/null +++ b/common/repositories/db_str_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DB_STR_REPOSITORY_H +#define EQEMU_DB_STR_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class DbStrRepository { +public: + struct DbStr { + int id; + int type; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("db_str"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DbStr NewEntity() + { + DbStr entry{}; + + entry.id = 0; + entry.type = 0; + entry.value = 0; + + return entry; + } + + static DbStr GetDbStrEntry( + const std::vector &db_strs, + int db_str_id + ) + { + for (auto &db_str : db_strs) { + if (db_str.type == db_str_id) { + return db_str; + } + } + + return NewEntity(); + } + + static DbStr FindOne( + int db_str_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + db_str_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int db_str_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + db_str_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DbStr db_str_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(db_str_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + db_str_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DbStr InsertOne( + DbStr db_str_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + db_str_entry.id = results.LastInsertedID(); + return db_str_entry; + } + + db_str_entry = InstanceListRepository::NewEntity(); + + return db_str_entry; + } + + static int InsertMany( + std::vector db_str_entries + ) + { + std::vector insert_chunks; + + for (auto &db_str_entry: db_str_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_DB_STR_REPOSITORY_H diff --git a/common/repositories/db_version_repository.h b/common/repositories/db_version_repository.h new file mode 100644 index 000000000..9abf0da74 --- /dev/null +++ b/common/repositories/db_version_repository.h @@ -0,0 +1,253 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DB_VERSION_REPOSITORY_H +#define EQEMU_DB_VERSION_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class DbVersionRepository { +public: + struct DbVersion { + int version; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "version", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("db_version"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DbVersion NewEntity() + { + DbVersion entry{}; + + entry.version = 0; + + return entry; + } + + static DbVersion GetDbVersionEntry( + const std::vector &db_versions, + int db_version_id + ) + { + for (auto &db_version : db_versions) { + if (db_version. == db_version_id) { + return db_version; + } + } + + return NewEntity(); + } + + static DbVersion FindOne( + int db_version_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + db_version_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DbVersion entry{}; + + entry.version = atoi(row[0]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int db_version_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + db_version_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DbVersion db_version_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(db_version_entry.version)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + db_version_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DbVersion InsertOne( + DbVersion db_version_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(db_version_entry.version)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + db_version_entry.id = results.LastInsertedID(); + return db_version_entry; + } + + db_version_entry = InstanceListRepository::NewEntity(); + + return db_version_entry; + } + + static int InsertMany( + std::vector db_version_entries + ) + { + std::vector insert_chunks; + + for (auto &db_version_entry: db_version_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(db_version_entry.version)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DbVersion entry{}; + + entry.version = atoi(row[0]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_DB_VERSION_REPOSITORY_H diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h new file mode 100644 index 000000000..34fe05993 --- /dev/null +++ b/common/repositories/discovered_items_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DISCOVERED_ITEMS_REPOSITORY_H +#define EQEMU_DISCOVERED_ITEMS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class DiscoveredItemsRepository { +public: + struct DiscoveredItems { + int item_id; + std::string char_name; + int discovered_date; + int account_status; + }; + + static std::string PrimaryKey() + { + return std::string("item_id"); + } + + static std::vector Columns() + { + return { + "item_id", + "char_name", + "discovered_date", + "account_status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("discovered_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DiscoveredItems NewEntity() + { + DiscoveredItems entry{}; + + entry.item_id = 0; + entry.char_name = ""; + entry.discovered_date = 0; + entry.account_status = 0; + + return entry; + } + + static DiscoveredItems GetDiscoveredItemsEntry( + const std::vector &discovered_itemss, + int discovered_items_id + ) + { + for (auto &discovered_items : discovered_itemss) { + if (discovered_items.item_id == discovered_items_id) { + return discovered_items; + } + } + + return NewEntity(); + } + + static DiscoveredItems FindOne( + int discovered_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + discovered_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1]; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int discovered_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + discovered_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DiscoveredItems discovered_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(discovered_items_entry.char_name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(discovered_items_entry.discovered_date)); + update_values.push_back(columns[3] + " = " + std::to_string(discovered_items_entry.account_status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + discovered_items_entry.item_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DiscoveredItems InsertOne( + DiscoveredItems discovered_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); + insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); + insert_values.push_back(std::to_string(discovered_items_entry.account_status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + discovered_items_entry.id = results.LastInsertedID(); + return discovered_items_entry; + } + + discovered_items_entry = InstanceListRepository::NewEntity(); + + return discovered_items_entry; + } + + static int InsertMany( + std::vector discovered_items_entries + ) + { + std::vector insert_chunks; + + for (auto &discovered_items_entry: discovered_items_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); + insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); + insert_values.push_back(std::to_string(discovered_items_entry.account_status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1]; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_DISCOVERED_ITEMS_REPOSITORY_H diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h new file mode 100644 index 000000000..a0c4b289f --- /dev/null +++ b/common/repositories/doors_repository.h @@ -0,0 +1,490 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_DOORS_REPOSITORY_H +#define EQEMU_DOORS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class DoorsRepository { +public: + struct Doors { + int id; + int16 doorid; + std::string zone; + int16 version; + std::string name; + std::string pos_y; + std::string pos_x; + std::string pos_z; + std::string heading; + int16 opentype; + int16 guild; + int16 lockpick; + int keyitem; + int8 nokeyring; + int16 triggerdoor; + int16 triggertype; + int8 disable_timer; + int16 doorisopen; + int door_param; + std::string dest_zone; + int dest_instance; + std::string dest_x; + std::string dest_y; + std::string dest_z; + std::string dest_heading; + int invert_state; + int incline; + int16 size; + std::string buffer; + int client_version_mask; + int16 is_ldon_door; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "doorid", + "zone", + "version", + "name", + "pos_y", + "pos_x", + "pos_z", + "heading", + "opentype", + "guild", + "lockpick", + "keyitem", + "nokeyring", + "triggerdoor", + "triggertype", + "disable_timer", + "doorisopen", + "door_param", + "dest_zone", + "dest_instance", + "dest_x", + "dest_y", + "dest_z", + "dest_heading", + "invert_state", + "incline", + "size", + "buffer", + "client_version_mask", + "is_ldon_door", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("doors"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Doors NewEntity() + { + Doors entry{}; + + entry.id = 0; + entry.doorid = 0; + entry.zone = 0; + entry.version = 0; + entry.name = ""; + entry.pos_y = 0; + entry.pos_x = 0; + entry.pos_z = 0; + entry.heading = 0; + entry.opentype = 0; + entry.guild = 0; + entry.lockpick = 0; + entry.keyitem = 0; + entry.nokeyring = 0; + entry.triggerdoor = 0; + entry.triggertype = 0; + entry.disable_timer = 0; + entry.doorisopen = 0; + entry.door_param = 0; + entry.dest_zone = 'NONE'; + entry.dest_instance = 0; + entry.dest_x = 0; + entry.dest_y = 0; + entry.dest_z = 0; + entry.dest_heading = 0; + entry.invert_state = 0; + entry.incline = 0; + entry.size = 100; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + entry.is_ldon_door = 0; + + return entry; + } + + static Doors GetDoorsEntry( + const std::vector &doorss, + int doors_id + ) + { + for (auto &doors : doorss) { + if (doors.id == doors_id) { + return doors; + } + } + + return NewEntity(); + } + + static Doors FindOne( + int doors_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + doors_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.name = row[4]; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19]; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int doors_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + doors_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Doors doors_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(doors_entry.doorid)); + update_values.push_back(columns[2] + " = '" + EscapeString(doors_entry.zone) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(doors_entry.version)); + update_values.push_back(columns[4] + " = '" + EscapeString(doors_entry.name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(doors_entry.pos_y) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(doors_entry.pos_x) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(doors_entry.pos_z) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(doors_entry.heading) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(doors_entry.opentype)); + update_values.push_back(columns[10] + " = " + std::to_string(doors_entry.guild)); + update_values.push_back(columns[11] + " = " + std::to_string(doors_entry.lockpick)); + update_values.push_back(columns[12] + " = " + std::to_string(doors_entry.keyitem)); + update_values.push_back(columns[13] + " = " + std::to_string(doors_entry.nokeyring)); + update_values.push_back(columns[14] + " = " + std::to_string(doors_entry.triggerdoor)); + update_values.push_back(columns[15] + " = " + std::to_string(doors_entry.triggertype)); + update_values.push_back(columns[16] + " = " + std::to_string(doors_entry.disable_timer)); + update_values.push_back(columns[17] + " = " + std::to_string(doors_entry.doorisopen)); + update_values.push_back(columns[18] + " = " + std::to_string(doors_entry.door_param)); + update_values.push_back(columns[19] + " = '" + EscapeString(doors_entry.dest_zone) + "'"); + update_values.push_back(columns[20] + " = " + std::to_string(doors_entry.dest_instance)); + update_values.push_back(columns[21] + " = '" + EscapeString(doors_entry.dest_x) + "'"); + update_values.push_back(columns[22] + " = '" + EscapeString(doors_entry.dest_y) + "'"); + update_values.push_back(columns[23] + " = '" + EscapeString(doors_entry.dest_z) + "'"); + update_values.push_back(columns[24] + " = '" + EscapeString(doors_entry.dest_heading) + "'"); + update_values.push_back(columns[25] + " = " + std::to_string(doors_entry.invert_state)); + update_values.push_back(columns[26] + " = " + std::to_string(doors_entry.incline)); + update_values.push_back(columns[27] + " = " + std::to_string(doors_entry.size)); + update_values.push_back(columns[28] + " = '" + EscapeString(doors_entry.buffer) + "'"); + update_values.push_back(columns[29] + " = " + std::to_string(doors_entry.client_version_mask)); + update_values.push_back(columns[30] + " = " + std::to_string(doors_entry.is_ldon_door)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + doors_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Doors InsertOne( + Doors doors_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(doors_entry.doorid)); + insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.version)); + insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_y) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_x) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_z) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.opentype)); + insert_values.push_back(std::to_string(doors_entry.guild)); + insert_values.push_back(std::to_string(doors_entry.lockpick)); + insert_values.push_back(std::to_string(doors_entry.keyitem)); + insert_values.push_back(std::to_string(doors_entry.nokeyring)); + insert_values.push_back(std::to_string(doors_entry.triggerdoor)); + insert_values.push_back(std::to_string(doors_entry.triggertype)); + insert_values.push_back(std::to_string(doors_entry.disable_timer)); + insert_values.push_back(std::to_string(doors_entry.doorisopen)); + insert_values.push_back(std::to_string(doors_entry.door_param)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_instance)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_x) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_y) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_z) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.invert_state)); + insert_values.push_back(std::to_string(doors_entry.incline)); + insert_values.push_back(std::to_string(doors_entry.size)); + insert_values.push_back("'" + EscapeString(doors_entry.buffer) + "'"); + insert_values.push_back(std::to_string(doors_entry.client_version_mask)); + insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + doors_entry.id = results.LastInsertedID(); + return doors_entry; + } + + doors_entry = InstanceListRepository::NewEntity(); + + return doors_entry; + } + + static int InsertMany( + std::vector doors_entries + ) + { + std::vector insert_chunks; + + for (auto &doors_entry: doors_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(doors_entry.doorid)); + insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.version)); + insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_y) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_x) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.pos_z) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.opentype)); + insert_values.push_back(std::to_string(doors_entry.guild)); + insert_values.push_back(std::to_string(doors_entry.lockpick)); + insert_values.push_back(std::to_string(doors_entry.keyitem)); + insert_values.push_back(std::to_string(doors_entry.nokeyring)); + insert_values.push_back(std::to_string(doors_entry.triggerdoor)); + insert_values.push_back(std::to_string(doors_entry.triggertype)); + insert_values.push_back(std::to_string(doors_entry.disable_timer)); + insert_values.push_back(std::to_string(doors_entry.doorisopen)); + insert_values.push_back(std::to_string(doors_entry.door_param)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_instance)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_x) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_y) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_z) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.dest_heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.invert_state)); + insert_values.push_back(std::to_string(doors_entry.incline)); + insert_values.push_back(std::to_string(doors_entry.size)); + insert_values.push_back("'" + EscapeString(doors_entry.buffer) + "'"); + insert_values.push_back(std::to_string(doors_entry.client_version_mask)); + insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.name = row[4]; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19]; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_DOORS_REPOSITORY_H diff --git a/common/repositories/eqtime_repository.h b/common/repositories/eqtime_repository.h new file mode 100644 index 000000000..13aac3c07 --- /dev/null +++ b/common/repositories/eqtime_repository.h @@ -0,0 +1,293 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_EQTIME_REPOSITORY_H +#define EQEMU_EQTIME_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class EqtimeRepository { +public: + struct Eqtime { + int8 minute; + int8 hour; + int8 day; + int8 month; + int year; + int realtime; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "minute", + "hour", + "day", + "month", + "year", + "realtime", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("eqtime"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Eqtime NewEntity() + { + Eqtime entry{}; + + entry.minute = 0; + entry.hour = 0; + entry.day = 0; + entry.month = 0; + entry.year = 0; + entry.realtime = 0; + + return entry; + } + + static Eqtime GetEqtimeEntry( + const std::vector &eqtimes, + int eqtime_id + ) + { + for (auto &eqtime : eqtimes) { + if (eqtime. == eqtime_id) { + return eqtime; + } + } + + return NewEntity(); + } + + static Eqtime FindOne( + int eqtime_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + eqtime_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Eqtime entry{}; + + entry.minute = atoi(row[0]); + entry.hour = atoi(row[1]); + entry.day = atoi(row[2]); + entry.month = atoi(row[3]); + entry.year = atoi(row[4]); + entry.realtime = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int eqtime_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + eqtime_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Eqtime eqtime_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(eqtime_entry.minute)); + update_values.push_back(columns[1] + " = " + std::to_string(eqtime_entry.hour)); + update_values.push_back(columns[2] + " = " + std::to_string(eqtime_entry.day)); + update_values.push_back(columns[3] + " = " + std::to_string(eqtime_entry.month)); + update_values.push_back(columns[4] + " = " + std::to_string(eqtime_entry.year)); + update_values.push_back(columns[5] + " = " + std::to_string(eqtime_entry.realtime)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + eqtime_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Eqtime InsertOne( + Eqtime eqtime_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(eqtime_entry.minute)); + insert_values.push_back(std::to_string(eqtime_entry.hour)); + insert_values.push_back(std::to_string(eqtime_entry.day)); + insert_values.push_back(std::to_string(eqtime_entry.month)); + insert_values.push_back(std::to_string(eqtime_entry.year)); + insert_values.push_back(std::to_string(eqtime_entry.realtime)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + eqtime_entry.id = results.LastInsertedID(); + return eqtime_entry; + } + + eqtime_entry = InstanceListRepository::NewEntity(); + + return eqtime_entry; + } + + static int InsertMany( + std::vector eqtime_entries + ) + { + std::vector insert_chunks; + + for (auto &eqtime_entry: eqtime_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(eqtime_entry.minute)); + insert_values.push_back(std::to_string(eqtime_entry.hour)); + insert_values.push_back(std::to_string(eqtime_entry.day)); + insert_values.push_back(std::to_string(eqtime_entry.month)); + insert_values.push_back(std::to_string(eqtime_entry.year)); + insert_values.push_back(std::to_string(eqtime_entry.realtime)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Eqtime entry{}; + + entry.minute = atoi(row[0]); + entry.hour = atoi(row[1]); + entry.day = atoi(row[2]); + entry.month = atoi(row[3]); + entry.year = atoi(row[4]); + entry.realtime = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_EQTIME_REPOSITORY_H diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h new file mode 100644 index 000000000..adc413d55 --- /dev/null +++ b/common/repositories/eventlog_repository.h @@ -0,0 +1,322 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_EVENTLOG_REPOSITORY_H +#define EQEMU_EVENTLOG_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class EventlogRepository { +public: + struct Eventlog { + int id; + std::string accountname; + int accountid; + int status; + std::string charname; + std::string target; + std::string time; + std::string descriptiontype; + std::string description; + int event_nid; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "accountname", + "accountid", + "status", + "charname", + "target", + "time", + "descriptiontype", + "description", + "event_nid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("eventlog"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Eventlog NewEntity() + { + Eventlog entry{}; + + entry.id = 0; + entry.accountname = ""; + entry.accountid = 0; + entry.status = 0; + entry.charname = ""; + entry.target = 'None'; + entry.time = current_timestamp(); + entry.descriptiontype = ""; + entry.description = 0; + entry.event_nid = 0; + + return entry; + } + + static Eventlog GetEventlogEntry( + const std::vector &eventlogs, + int eventlog_id + ) + { + for (auto &eventlog : eventlogs) { + if (eventlog.id == eventlog_id) { + return eventlog; + } + } + + return NewEntity(); + } + + static Eventlog FindOne( + int eventlog_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + eventlog_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1]; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4]; + entry.target = row[5]; + entry.time = row[6]; + entry.descriptiontype = row[7]; + entry.description = row[8]; + entry.event_nid = atoi(row[9]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int eventlog_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + eventlog_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Eventlog eventlog_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(eventlog_entry.accountname) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(eventlog_entry.accountid)); + update_values.push_back(columns[3] + " = " + std::to_string(eventlog_entry.status)); + update_values.push_back(columns[4] + " = '" + EscapeString(eventlog_entry.charname) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(eventlog_entry.target) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(eventlog_entry.time) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(eventlog_entry.descriptiontype) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(eventlog_entry.description) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(eventlog_entry.event_nid)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + eventlog_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Eventlog InsertOne( + Eventlog eventlog_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.accountid)); + insert_values.push_back(std::to_string(eventlog_entry.status)); + insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.event_nid)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + eventlog_entry.id = results.LastInsertedID(); + return eventlog_entry; + } + + eventlog_entry = InstanceListRepository::NewEntity(); + + return eventlog_entry; + } + + static int InsertMany( + std::vector eventlog_entries + ) + { + std::vector insert_chunks; + + for (auto &eventlog_entry: eventlog_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.accountid)); + insert_values.push_back(std::to_string(eventlog_entry.status)); + insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.event_nid)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1]; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4]; + entry.target = row[5]; + entry.time = row[6]; + entry.descriptiontype = row[7]; + entry.description = row[8]; + entry.event_nid = atoi(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_EVENTLOG_REPOSITORY_H diff --git a/common/repositories/faction_base_data_repository.h b/common/repositories/faction_base_data_repository.h new file mode 100644 index 000000000..b727df0eb --- /dev/null +++ b/common/repositories/faction_base_data_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FACTION_BASE_DATA_REPOSITORY_H +#define EQEMU_FACTION_BASE_DATA_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FactionBaseDataRepository { +public: + struct FactionBaseData { + int16 client_faction_id; + int16 min; + int16 max; + int16 unk_hero1; + int16 unk_hero2; + int16 unk_hero3; + }; + + static std::string PrimaryKey() + { + return std::string("client_faction_id"); + } + + static std::vector Columns() + { + return { + "client_faction_id", + "min", + "max", + "unk_hero1", + "unk_hero2", + "unk_hero3", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_base_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionBaseData NewEntity() + { + FactionBaseData entry{}; + + entry.client_faction_id = 0; + entry.min = -2000; + entry.max = 2000; + entry.unk_hero1 = 0; + entry.unk_hero2 = 0; + entry.unk_hero3 = 0; + + return entry; + } + + static FactionBaseData GetFactionBaseDataEntry( + const std::vector &faction_base_datas, + int faction_base_data_id + ) + { + for (auto &faction_base_data : faction_base_datas) { + if (faction_base_data.client_faction_id == faction_base_data_id) { + return faction_base_data; + } + } + + return NewEntity(); + } + + static FactionBaseData FindOne( + int faction_base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_base_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_base_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionBaseData faction_base_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(faction_base_data_entry.min)); + update_values.push_back(columns[2] + " = " + std::to_string(faction_base_data_entry.max)); + update_values.push_back(columns[3] + " = " + std::to_string(faction_base_data_entry.unk_hero1)); + update_values.push_back(columns[4] + " = " + std::to_string(faction_base_data_entry.unk_hero2)); + update_values.push_back(columns[5] + " = " + std::to_string(faction_base_data_entry.unk_hero3)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_base_data_entry.client_faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionBaseData InsertOne( + FactionBaseData faction_base_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_base_data_entry.min)); + insert_values.push_back(std::to_string(faction_base_data_entry.max)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_base_data_entry.id = results.LastInsertedID(); + return faction_base_data_entry; + } + + faction_base_data_entry = InstanceListRepository::NewEntity(); + + return faction_base_data_entry; + } + + static int InsertMany( + std::vector faction_base_data_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_base_data_entry: faction_base_data_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_base_data_entry.min)); + insert_values.push_back(std::to_string(faction_base_data_entry.max)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FACTION_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h new file mode 100644 index 000000000..6cd1ec727 --- /dev/null +++ b/common/repositories/faction_list_mod_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FACTION_LIST_MOD_REPOSITORY_H +#define EQEMU_FACTION_LIST_MOD_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FactionListModRepository { +public: + struct FactionListMod { + int id; + int faction_id; + int16 mod; + std::string mod_name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "faction_id", + "mod", + "mod_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_list_mod"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionListMod NewEntity() + { + FactionListMod entry{}; + + entry.id = 0; + entry.faction_id = 0; + entry.mod = 0; + entry.mod_name = 0; + + return entry; + } + + static FactionListMod GetFactionListModEntry( + const std::vector &faction_list_mods, + int faction_list_mod_id + ) + { + for (auto &faction_list_mod : faction_list_mods) { + if (faction_list_mod.id == faction_list_mod_id) { + return faction_list_mod; + } + } + + return NewEntity(); + } + + static FactionListMod FindOne( + int faction_list_mod_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_list_mod_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_list_mod_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_list_mod_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionListMod faction_list_mod_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(faction_list_mod_entry.faction_id)); + update_values.push_back(columns[2] + " = " + std::to_string(faction_list_mod_entry.mod)); + update_values.push_back(columns[3] + " = '" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_list_mod_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionListMod InsertOne( + FactionListMod faction_list_mod_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); + insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); + insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_list_mod_entry.id = results.LastInsertedID(); + return faction_list_mod_entry; + } + + faction_list_mod_entry = InstanceListRepository::NewEntity(); + + return faction_list_mod_entry; + } + + static int InsertMany( + std::vector faction_list_mod_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_list_mod_entry: faction_list_mod_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); + insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); + insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FACTION_LIST_MOD_REPOSITORY_H diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h new file mode 100644 index 000000000..772bd10ee --- /dev/null +++ b/common/repositories/faction_list_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FACTION_LIST_REPOSITORY_H +#define EQEMU_FACTION_LIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FactionListRepository { +public: + struct FactionList { + int id; + std::string name; + int16 base; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "base", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionList NewEntity() + { + FactionList entry{}; + + entry.id = 0; + entry.name = ""; + entry.base = 0; + + return entry; + } + + static FactionList GetFactionListEntry( + const std::vector &faction_lists, + int faction_list_id + ) + { + for (auto &faction_list : faction_lists) { + if (faction_list.id == faction_list_id) { + return faction_list; + } + } + + return NewEntity(); + } + + static FactionList FindOne( + int faction_list_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.base = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_list_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionList faction_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(faction_list_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(faction_list_entry.base)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_list_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionList InsertOne( + FactionList faction_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); + insert_values.push_back(std::to_string(faction_list_entry.base)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_list_entry.id = results.LastInsertedID(); + return faction_list_entry; + } + + faction_list_entry = InstanceListRepository::NewEntity(); + + return faction_list_entry; + } + + static int InsertMany( + std::vector faction_list_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_list_entry: faction_list_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); + insert_values.push_back(std::to_string(faction_list_entry.base)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.base = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FACTION_LIST_REPOSITORY_H diff --git a/common/repositories/faction_values_repository.h b/common/repositories/faction_values_repository.h new file mode 100644 index 000000000..e21fd249c --- /dev/null +++ b/common/repositories/faction_values_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FACTION_VALUES_REPOSITORY_H +#define EQEMU_FACTION_VALUES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FactionValuesRepository { +public: + struct FactionValues { + int char_id; + int faction_id; + int16 current_value; + int8 temp; + }; + + static std::string PrimaryKey() + { + return std::string("faction_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "faction_id", + "current_value", + "temp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionValues NewEntity() + { + FactionValues entry{}; + + entry.char_id = 0; + entry.faction_id = 0; + entry.current_value = 0; + entry.temp = 0; + + return entry; + } + + static FactionValues GetFactionValuesEntry( + const std::vector &faction_valuess, + int faction_values_id + ) + { + for (auto &faction_values : faction_valuess) { + if (faction_values.faction_id == faction_values_id) { + return faction_values; + } + } + + return NewEntity(); + } + + static FactionValues FindOne( + int faction_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionValues faction_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(faction_values_entry.current_value)); + update_values.push_back(columns[3] + " = " + std::to_string(faction_values_entry.temp)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_values_entry.faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionValues InsertOne( + FactionValues faction_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_values_entry.current_value)); + insert_values.push_back(std::to_string(faction_values_entry.temp)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_values_entry.id = results.LastInsertedID(); + return faction_values_entry; + } + + faction_values_entry = InstanceListRepository::NewEntity(); + + return faction_values_entry; + } + + static int InsertMany( + std::vector faction_values_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_values_entry: faction_values_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_values_entry.current_value)); + insert_values.push_back(std::to_string(faction_values_entry.temp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FACTION_VALUES_REPOSITORY_H diff --git a/common/repositories/fishing_repository.h b/common/repositories/fishing_repository.h new file mode 100644 index 000000000..23e92dffc --- /dev/null +++ b/common/repositories/fishing_repository.h @@ -0,0 +1,298 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FISHING_REPOSITORY_H +#define EQEMU_FISHING_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FishingRepository { +public: + struct Fishing { + int id; + int zoneid; + int Itemid; + int16 skill_level; + int16 chance; + int npc_id; + int npc_chance; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "Itemid", + "skill_level", + "chance", + "npc_id", + "npc_chance", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("fishing"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Fishing NewEntity() + { + Fishing entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.skill_level = 0; + entry.chance = 0; + entry.npc_id = 0; + entry.npc_chance = 0; + + return entry; + } + + static Fishing GetFishingEntry( + const std::vector &fishings, + int fishing_id + ) + { + for (auto &fishing : fishings) { + if (fishing.id == fishing_id) { + return fishing; + } + } + + return NewEntity(); + } + + static Fishing FindOne( + int fishing_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + fishing_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int fishing_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + fishing_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Fishing fishing_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(fishing_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(fishing_entry.Itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(fishing_entry.skill_level)); + update_values.push_back(columns[4] + " = " + std::to_string(fishing_entry.chance)); + update_values.push_back(columns[5] + " = " + std::to_string(fishing_entry.npc_id)); + update_values.push_back(columns[6] + " = " + std::to_string(fishing_entry.npc_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + fishing_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Fishing InsertOne( + Fishing fishing_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(fishing_entry.zoneid)); + insert_values.push_back(std::to_string(fishing_entry.Itemid)); + insert_values.push_back(std::to_string(fishing_entry.skill_level)); + insert_values.push_back(std::to_string(fishing_entry.chance)); + insert_values.push_back(std::to_string(fishing_entry.npc_id)); + insert_values.push_back(std::to_string(fishing_entry.npc_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + fishing_entry.id = results.LastInsertedID(); + return fishing_entry; + } + + fishing_entry = InstanceListRepository::NewEntity(); + + return fishing_entry; + } + + static int InsertMany( + std::vector fishing_entries + ) + { + std::vector insert_chunks; + + for (auto &fishing_entry: fishing_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(fishing_entry.zoneid)); + insert_values.push_back(std::to_string(fishing_entry.Itemid)); + insert_values.push_back(std::to_string(fishing_entry.skill_level)); + insert_values.push_back(std::to_string(fishing_entry.chance)); + insert_values.push_back(std::to_string(fishing_entry.npc_id)); + insert_values.push_back(std::to_string(fishing_entry.npc_chance)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FISHING_REPOSITORY_H diff --git a/common/repositories/forage_repository.h b/common/repositories/forage_repository.h new file mode 100644 index 000000000..773a11a84 --- /dev/null +++ b/common/repositories/forage_repository.h @@ -0,0 +1,282 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FORAGE_REPOSITORY_H +#define EQEMU_FORAGE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ForageRepository { +public: + struct Forage { + int id; + int zoneid; + int Itemid; + int16 level; + int16 chance; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "Itemid", + "level", + "chance", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("forage"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Forage NewEntity() + { + Forage entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.level = 0; + entry.chance = 0; + + return entry; + } + + static Forage GetForageEntry( + const std::vector &forages, + int forage_id + ) + { + for (auto &forage : forages) { + if (forage.id == forage_id) { + return forage; + } + } + + return NewEntity(); + } + + static Forage FindOne( + int forage_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + forage_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int forage_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + forage_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Forage forage_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(forage_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(forage_entry.Itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(forage_entry.level)); + update_values.push_back(columns[4] + " = " + std::to_string(forage_entry.chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + forage_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Forage InsertOne( + Forage forage_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(forage_entry.zoneid)); + insert_values.push_back(std::to_string(forage_entry.Itemid)); + insert_values.push_back(std::to_string(forage_entry.level)); + insert_values.push_back(std::to_string(forage_entry.chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + forage_entry.id = results.LastInsertedID(); + return forage_entry; + } + + forage_entry = InstanceListRepository::NewEntity(); + + return forage_entry; + } + + static int InsertMany( + std::vector forage_entries + ) + { + std::vector insert_chunks; + + for (auto &forage_entry: forage_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(forage_entry.zoneid)); + insert_values.push_back(std::to_string(forage_entry.Itemid)); + insert_values.push_back(std::to_string(forage_entry.level)); + insert_values.push_back(std::to_string(forage_entry.chance)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FORAGE_REPOSITORY_H diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h new file mode 100644 index 000000000..37d7673c8 --- /dev/null +++ b/common/repositories/friends_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_FRIENDS_REPOSITORY_H +#define EQEMU_FRIENDS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class FriendsRepository { +public: + struct Friends { + int charid; + int8 type; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "charid", + "type", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("friends"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Friends NewEntity() + { + Friends entry{}; + + entry.charid = 0; + entry.type = 1; + entry.name = 0; + + return entry; + } + + static Friends GetFriendsEntry( + const std::vector &friendss, + int friends_id + ) + { + for (auto &friends : friendss) { + if (friends.name == friends_id) { + return friends; + } + } + + return NewEntity(); + } + + static Friends FindOne( + int friends_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + friends_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int friends_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + friends_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Friends friends_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + friends_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Friends InsertOne( + Friends friends_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + friends_entry.id = results.LastInsertedID(); + return friends_entry; + } + + friends_entry = InstanceListRepository::NewEntity(); + + return friends_entry; + } + + static int InsertMany( + std::vector friends_entries + ) + { + std::vector insert_chunks; + + for (auto &friends_entry: friends_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_FRIENDS_REPOSITORY_H diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h new file mode 100644 index 000000000..9c59f3468 --- /dev/null +++ b/common/repositories/global_loot_repository.h @@ -0,0 +1,352 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GLOBAL_LOOT_REPOSITORY_H +#define EQEMU_GLOBAL_LOOT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GlobalLootRepository { +public: + struct GlobalLoot { + int id; + std::string description; + int loottable_id; + int8 enabled; + int min_level; + int max_level; + int8 rare; + int8 raid; + std::string race; + std::string class; + std::string bodytype; + std::string zone; + int8 hot_zone; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "description", + "loottable_id", + "enabled", + "min_level", + "max_level", + "rare", + "raid", + "race", + "class", + "bodytype", + "zone", + "hot_zone", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("global_loot"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GlobalLoot NewEntity() + { + GlobalLoot entry{}; + + entry.id = 0; + entry.description = 0; + entry.loottable_id = 0; + entry.enabled = 1; + entry.min_level = 0; + entry.max_level = 0; + entry.rare = 0; + entry.raid = 0; + entry.race = 0; + entry. + class = 0; + entry.bodytype = 0; + entry.zone = 0; + entry.hot_zone = 0; + + return entry; + } + + static GlobalLoot GetGlobalLootEntry( + const std::vector &global_loots, + int global_loot_id + ) + { + for (auto &global_loot : global_loots) { + if (global_loot.id == global_loot_id) { + return global_loot; + } + } + + return NewEntity(); + } + + static GlobalLoot FindOne( + int global_loot_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + global_loot_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8]; + entry. + class = row[9]; + entry.bodytype = row[10]; + entry.zone = row[11]; + entry.hot_zone = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int global_loot_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + global_loot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GlobalLoot global_loot_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(global_loot_entry.description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(global_loot_entry.loottable_id)); + update_values.push_back(columns[3] + " = " + std::to_string(global_loot_entry.enabled)); + update_values.push_back(columns[4] + " = " + std::to_string(global_loot_entry.min_level)); + update_values.push_back(columns[5] + " = " + std::to_string(global_loot_entry.max_level)); + update_values.push_back(columns[6] + " = " + std::to_string(global_loot_entry.rare)); + update_values.push_back(columns[7] + " = " + std::to_string(global_loot_entry.raid)); + update_values.push_back(columns[8] + " = '" + EscapeString(global_loot_entry.race) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(global_loot_entry. + class) +"'"); + update_values.push_back(columns[10] + " = '" + EscapeString(global_loot_entry.bodytype) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(global_loot_entry.zone) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(global_loot_entry.hot_zone)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + global_loot_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GlobalLoot InsertOne( + GlobalLoot global_loot_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); + insert_values.push_back(std::to_string(global_loot_entry.enabled)); + insert_values.push_back(std::to_string(global_loot_entry.min_level)); + insert_values.push_back(std::to_string(global_loot_entry.max_level)); + insert_values.push_back(std::to_string(global_loot_entry.rare)); + insert_values.push_back(std::to_string(global_loot_entry.raid)); + insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry. + class) +"'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + global_loot_entry.id = results.LastInsertedID(); + return global_loot_entry; + } + + global_loot_entry = InstanceListRepository::NewEntity(); + + return global_loot_entry; + } + + static int InsertMany( + std::vector global_loot_entries + ) + { + std::vector insert_chunks; + + for (auto &global_loot_entry: global_loot_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); + insert_values.push_back(std::to_string(global_loot_entry.enabled)); + insert_values.push_back(std::to_string(global_loot_entry.min_level)); + insert_values.push_back(std::to_string(global_loot_entry.max_level)); + insert_values.push_back(std::to_string(global_loot_entry.rare)); + insert_values.push_back(std::to_string(global_loot_entry.raid)); + insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry. + class) +"'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8]; + entry. + class = row[9]; + entry.bodytype = row[10]; + entry.zone = row[11]; + entry.hot_zone = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GLOBAL_LOOT_REPOSITORY_H diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h new file mode 100644 index 000000000..085b41651 --- /dev/null +++ b/common/repositories/gm_ips_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GM_IPS_REPOSITORY_H +#define EQEMU_GM_IPS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GmIpsRepository { +public: + struct GmIps { + std::string name; + int account_id; + std::string ip_address; + }; + + static std::string PrimaryKey() + { + return std::string("ip_address"); + } + + static std::vector Columns() + { + return { + "name", + "account_id", + "ip_address", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("gm_ips"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GmIps NewEntity() + { + GmIps entry{}; + + entry.name = 0; + entry.account_id = 0; + entry.ip_address = 0; + + return entry; + } + + static GmIps GetGmIpsEntry( + const std::vector &gm_ipss, + int gm_ips_id + ) + { + for (auto &gm_ips : gm_ipss) { + if (gm_ips.ip_address == gm_ips_id) { + return gm_ips; + } + } + + return NewEntity(); + } + + static GmIps FindOne( + int gm_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + gm_ips_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GmIps entry{}; + + entry.name = row[0]; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int gm_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + gm_ips_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GmIps gm_ips_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(gm_ips_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + gm_ips_entry.ip_address + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GmIps InsertOne( + GmIps gm_ips_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + gm_ips_entry.id = results.LastInsertedID(); + return gm_ips_entry; + } + + gm_ips_entry = InstanceListRepository::NewEntity(); + + return gm_ips_entry; + } + + static int InsertMany( + std::vector gm_ips_entries + ) + { + std::vector insert_chunks; + + for (auto &gm_ips_entry: gm_ips_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GmIps entry{}; + + entry.name = row[0]; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GM_IPS_REPOSITORY_H diff --git a/common/repositories/goallists_repository.h b/common/repositories/goallists_repository.h new file mode 100644 index 000000000..62aed3079 --- /dev/null +++ b/common/repositories/goallists_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GOALLISTS_REPOSITORY_H +#define EQEMU_GOALLISTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GoallistsRepository { +public: + struct Goallists { + int listid; + int entry; + }; + + static std::string PrimaryKey() + { + return std::string("entry"); + } + + static std::vector Columns() + { + return { + "listid", + "entry", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("goallists"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Goallists NewEntity() + { + Goallists entry{}; + + entry.listid = 0; + entry.entry = 0; + + return entry; + } + + static Goallists GetGoallistsEntry( + const std::vector &goallistss, + int goallists_id + ) + { + for (auto &goallists : goallistss) { + if (goallists.entry == goallists_id) { + return goallists; + } + } + + return NewEntity(); + } + + static Goallists FindOne( + int goallists_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + goallists_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int goallists_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + goallists_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Goallists goallists_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + goallists_entry.entry + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Goallists InsertOne( + Goallists goallists_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + goallists_entry.id = results.LastInsertedID(); + return goallists_entry; + } + + goallists_entry = InstanceListRepository::NewEntity(); + + return goallists_entry; + } + + static int InsertMany( + std::vector goallists_entries + ) + { + std::vector insert_chunks; + + for (auto &goallists_entry: goallists_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GOALLISTS_REPOSITORY_H diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h new file mode 100644 index 000000000..f330d7c19 --- /dev/null +++ b/common/repositories/graveyard_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GRAVEYARD_REPOSITORY_H +#define EQEMU_GRAVEYARD_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GraveyardRepository { +public: + struct Graveyard { + int id; + int zone_id; + std::string x; + std::string y; + std::string z; + std::string heading; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone_id", + "x", + "y", + "z", + "heading", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("graveyard"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Graveyard NewEntity() + { + Graveyard entry{}; + + entry.id = 0; + entry.zone_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + + return entry; + } + + static Graveyard GetGraveyardEntry( + const std::vector &graveyards, + int graveyard_id + ) + { + for (auto &graveyard : graveyards) { + if (graveyard.id == graveyard_id) { + return graveyard; + } + } + + return NewEntity(); + } + + static Graveyard FindOne( + int graveyard_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + graveyard_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int graveyard_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + graveyard_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Graveyard graveyard_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(graveyard_entry.zone_id)); + update_values.push_back(columns[2] + " = '" + EscapeString(graveyard_entry.x) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(graveyard_entry.y) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(graveyard_entry.z) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(graveyard_entry.heading) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + graveyard_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Graveyard InsertOne( + Graveyard graveyard_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(graveyard_entry.zone_id)); + insert_values.push_back("'" + EscapeString(graveyard_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.heading) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + graveyard_entry.id = results.LastInsertedID(); + return graveyard_entry; + } + + graveyard_entry = InstanceListRepository::NewEntity(); + + return graveyard_entry; + } + + static int InsertMany( + std::vector graveyard_entries + ) + { + std::vector insert_chunks; + + for (auto &graveyard_entry: graveyard_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(graveyard_entry.zone_id)); + insert_values.push_back("'" + EscapeString(graveyard_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(graveyard_entry.heading) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GRAVEYARD_REPOSITORY_H diff --git a/common/repositories/grid_repository.h b/common/repositories/grid_repository.h index 49305c33b..cddeed021 100644 --- a/common/repositories/grid_repository.h +++ b/common/repositories/grid_repository.h @@ -103,7 +103,7 @@ public: } static Grid GetGrid( - const std::vector& grids, + const std::vector &grids, int grid_id ) { diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h new file mode 100644 index 000000000..9aab0e9b3 --- /dev/null +++ b/common/repositories/ground_spawns_repository.h @@ -0,0 +1,354 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GROUND_SPAWNS_REPOSITORY_H +#define EQEMU_GROUND_SPAWNS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GroundSpawnsRepository { +public: + struct GroundSpawns { + int id; + int zoneid; + int16 version; + std::string max_x; + std::string max_y; + std::string max_z; + std::string min_x; + std::string min_y; + std::string heading; + std::string name; + int item; + int max_allowed; + std::string comment; + int respawn_timer; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "version", + "max_x", + "max_y", + "max_z", + "min_x", + "min_y", + "heading", + "name", + "item", + "max_allowed", + "comment", + "respawn_timer", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ground_spawns"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroundSpawns NewEntity() + { + GroundSpawns entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.max_x = 2000; + entry.max_y = 2000; + entry.max_z = 10000; + entry.min_x = -2000; + entry.min_y = -2000; + entry.heading = 0; + entry.name = ""; + entry.item = 0; + entry.max_allowed = 1; + entry.comment = ""; + entry.respawn_timer = 300; + + return entry; + } + + static GroundSpawns GetGroundSpawnsEntry( + const std::vector &ground_spawnss, + int ground_spawns_id + ) + { + for (auto &ground_spawns : ground_spawnss) { + if (ground_spawns.id == ground_spawns_id) { + return ground_spawns; + } + } + + return NewEntity(); + } + + static GroundSpawns FindOne( + int ground_spawns_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ground_spawns_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9]; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12]; + entry.respawn_timer = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ground_spawns_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ground_spawns_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroundSpawns ground_spawns_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(ground_spawns_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(ground_spawns_entry.version)); + update_values.push_back(columns[3] + " = '" + EscapeString(ground_spawns_entry.max_x) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(ground_spawns_entry.max_y) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(ground_spawns_entry.max_z) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(ground_spawns_entry.min_x) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(ground_spawns_entry.min_y) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(ground_spawns_entry.heading) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(ground_spawns_entry.name) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(ground_spawns_entry.item)); + update_values.push_back(columns[11] + " = " + std::to_string(ground_spawns_entry.max_allowed)); + update_values.push_back(columns[12] + " = '" + EscapeString(ground_spawns_entry.comment) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(ground_spawns_entry.respawn_timer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ground_spawns_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroundSpawns InsertOne( + GroundSpawns ground_spawns_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); + insert_values.push_back(std::to_string(ground_spawns_entry.version)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_x) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_y) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_z) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_x) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_y) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.item)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ground_spawns_entry.id = results.LastInsertedID(); + return ground_spawns_entry; + } + + ground_spawns_entry = InstanceListRepository::NewEntity(); + + return ground_spawns_entry; + } + + static int InsertMany( + std::vector ground_spawns_entries + ) + { + std::vector insert_chunks; + + for (auto &ground_spawns_entry: ground_spawns_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); + insert_values.push_back(std::to_string(ground_spawns_entry.version)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_x) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_y) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_z) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_x) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_y) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.item)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9]; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12]; + entry.respawn_timer = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GROUND_SPAWNS_REPOSITORY_H diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h new file mode 100644 index 000000000..387ca4deb --- /dev/null +++ b/common/repositories/group_id_repository.h @@ -0,0 +1,268 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GROUP_ID_REPOSITORY_H +#define EQEMU_GROUP_ID_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GroupIdRepository { +public: + struct GroupId { + int groupid; + int charid; + std::string name; + int8 ismerc; + }; + + static std::string PrimaryKey() + { + return std::string("ismerc"); + } + + static std::vector Columns() + { + return { + "groupid", + "charid", + "name", + "ismerc", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("group_id"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroupId NewEntity() + { + GroupId entry{}; + + entry.groupid = 0; + entry.charid = 0; + entry.name = 0; + entry.ismerc = 0; + + return entry; + } + + static GroupId GetGroupIdEntry( + const std::vector &group_ids, + int group_id_id + ) + { + for (auto &group_id : group_ids) { + if (group_id.ismerc == group_id_id) { + return group_id; + } + } + + return NewEntity(); + } + + static GroupId FindOne( + int group_id_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + group_id_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2]; + entry.ismerc = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int group_id_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + group_id_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroupId group_id_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(group_id_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + group_id_entry.ismerc + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroupId InsertOne( + GroupId group_id_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + group_id_entry.id = results.LastInsertedID(); + return group_id_entry; + } + + group_id_entry = InstanceListRepository::NewEntity(); + + return group_id_entry; + } + + static int InsertMany( + std::vector group_id_entries + ) + { + std::vector insert_chunks; + + for (auto &group_id_entry: group_id_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2]; + entry.ismerc = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GROUP_ID_REPOSITORY_H diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h new file mode 100644 index 000000000..30b34db28 --- /dev/null +++ b/common/repositories/group_leaders_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GROUP_LEADERS_REPOSITORY_H +#define EQEMU_GROUP_LEADERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GroupLeadersRepository { +public: + struct GroupLeaders { + int gid; + std::string leadername; + std::string marknpc; + std::string leadershipaa; + std::string maintank; + std::string assist; + std::string puller; + std::string mentoree; + int mentor_percent; + }; + + static std::string PrimaryKey() + { + return std::string("gid"); + } + + static std::vector Columns() + { + return { + "gid", + "leadername", + "marknpc", + "leadershipaa", + "maintank", + "assist", + "puller", + "mentoree", + "mentor_percent", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("group_leaders"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroupLeaders NewEntity() + { + GroupLeaders entry{}; + + entry.gid = 0; + entry.leadername = ""; + entry.marknpc = ""; + entry.leadershipaa = 0; + entry.maintank = ""; + entry.assist = ""; + entry.puller = ""; + entry.mentoree = 0; + entry.mentor_percent = 0; + + return entry; + } + + static GroupLeaders GetGroupLeadersEntry( + const std::vector &group_leaderss, + int group_leaders_id + ) + { + for (auto &group_leaders : group_leaderss) { + if (group_leaders.gid == group_leaders_id) { + return group_leaders; + } + } + + return NewEntity(); + } + + static GroupLeaders FindOne( + int group_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + group_leaders_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1]; + entry.marknpc = row[2]; + entry.leadershipaa = row[3]; + entry.maintank = row[4]; + entry.assist = row[5]; + entry.puller = row[6]; + entry.mentoree = row[7]; + entry.mentor_percent = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int group_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + group_leaders_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroupLeaders group_leaders_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(group_leaders_entry.leadername) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(group_leaders_entry.marknpc) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(group_leaders_entry.maintank) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(group_leaders_entry.assist) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(group_leaders_entry.puller) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(group_leaders_entry.mentoree) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(group_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + group_leaders_entry.gid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroupLeaders InsertOne( + GroupLeaders group_leaders_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + group_leaders_entry.id = results.LastInsertedID(); + return group_leaders_entry; + } + + group_leaders_entry = InstanceListRepository::NewEntity(); + + return group_leaders_entry; + } + + static int InsertMany( + std::vector group_leaders_entries + ) + { + std::vector insert_chunks; + + for (auto &group_leaders_entry: group_leaders_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1]; + entry.marknpc = row[2]; + entry.leadershipaa = row[3]; + entry.maintank = row[4]; + entry.assist = row[5]; + entry.puller = row[6]; + entry.mentoree = row[7]; + entry.mentor_percent = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GROUP_LEADERS_REPOSITORY_H diff --git a/common/repositories/guild_bank_repository.h b/common/repositories/guild_bank_repository.h new file mode 100644 index 000000000..d23b66653 --- /dev/null +++ b/common/repositories/guild_bank_repository.h @@ -0,0 +1,309 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GUILD_BANK_REPOSITORY_H +#define EQEMU_GUILD_BANK_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GuildBankRepository { +public: + struct GuildBank { + int guildid; + int8 area; + int slot; + int itemid; + int qty; + std::string donator; + int8 permissions; + std::string whofor; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "guildid", + "area", + "slot", + "itemid", + "qty", + "donator", + "permissions", + "whofor", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_bank"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildBank NewEntity() + { + GuildBank entry{}; + + entry.guildid = 0; + entry.area = 0; + entry.slot = 0; + entry.itemid = 0; + entry.qty = 0; + entry.donator = 0; + entry.permissions = 0; + entry.whofor = 0; + + return entry; + } + + static GuildBank GetGuildBankEntry( + const std::vector &guild_banks, + int guild_bank_id + ) + { + for (auto &guild_bank : guild_banks) { + if (guild_bank. == guild_bank_id) { + return guild_bank; + } + } + + return NewEntity(); + } + + static GuildBank FindOne( + int guild_bank_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_bank_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildBank entry{}; + + entry.guildid = atoi(row[0]); + entry.area = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.qty = atoi(row[4]); + entry.donator = row[5]; + entry.permissions = atoi(row[6]); + entry.whofor = row[7]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_bank_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_bank_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildBank guild_bank_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(guild_bank_entry.guildid)); + update_values.push_back(columns[1] + " = " + std::to_string(guild_bank_entry.area)); + update_values.push_back(columns[2] + " = " + std::to_string(guild_bank_entry.slot)); + update_values.push_back(columns[3] + " = " + std::to_string(guild_bank_entry.itemid)); + update_values.push_back(columns[4] + " = " + std::to_string(guild_bank_entry.qty)); + update_values.push_back(columns[5] + " = '" + EscapeString(guild_bank_entry.donator) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(guild_bank_entry.permissions)); + update_values.push_back(columns[7] + " = '" + EscapeString(guild_bank_entry.whofor) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_bank_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildBank InsertOne( + GuildBank guild_bank_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_bank_entry.guildid)); + insert_values.push_back(std::to_string(guild_bank_entry.area)); + insert_values.push_back(std::to_string(guild_bank_entry.slot)); + insert_values.push_back(std::to_string(guild_bank_entry.itemid)); + insert_values.push_back(std::to_string(guild_bank_entry.qty)); + insert_values.push_back("'" + EscapeString(guild_bank_entry.donator) + "'"); + insert_values.push_back(std::to_string(guild_bank_entry.permissions)); + insert_values.push_back("'" + EscapeString(guild_bank_entry.whofor) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_bank_entry.id = results.LastInsertedID(); + return guild_bank_entry; + } + + guild_bank_entry = InstanceListRepository::NewEntity(); + + return guild_bank_entry; + } + + static int InsertMany( + std::vector guild_bank_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_bank_entry: guild_bank_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_bank_entry.guildid)); + insert_values.push_back(std::to_string(guild_bank_entry.area)); + insert_values.push_back(std::to_string(guild_bank_entry.slot)); + insert_values.push_back(std::to_string(guild_bank_entry.itemid)); + insert_values.push_back(std::to_string(guild_bank_entry.qty)); + insert_values.push_back("'" + EscapeString(guild_bank_entry.donator) + "'"); + insert_values.push_back(std::to_string(guild_bank_entry.permissions)); + insert_values.push_back("'" + EscapeString(guild_bank_entry.whofor) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildBank entry{}; + + entry.guildid = atoi(row[0]); + entry.area = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.qty = atoi(row[4]); + entry.donator = row[5]; + entry.permissions = atoi(row[6]); + entry.whofor = row[7]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GUILD_BANK_REPOSITORY_H diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h new file mode 100644 index 000000000..6601196ee --- /dev/null +++ b/common/repositories/guild_members_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GUILD_MEMBERS_REPOSITORY_H +#define EQEMU_GUILD_MEMBERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GuildMembersRepository { +public: + struct GuildMembers { + int char_id; + int guild_id; + int8 rank; + int8 tribute_enable; + int total_tribute; + int last_tribute; + int8 banker; + std::string public_note; + int8 alt; + }; + + static std::string PrimaryKey() + { + return std::string("char_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "guild_id", + "rank", + "tribute_enable", + "total_tribute", + "last_tribute", + "banker", + "public_note", + "alt", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildMembers NewEntity() + { + GuildMembers entry{}; + + entry.char_id = 0; + entry.guild_id = 0; + entry.rank = 0; + entry.tribute_enable = 0; + entry.total_tribute = 0; + entry.last_tribute = 0; + entry.banker = 0; + entry.public_note = 0; + entry.alt = 0; + + return entry; + } + + static GuildMembers GetGuildMembersEntry( + const std::vector &guild_memberss, + int guild_members_id + ) + { + for (auto &guild_members : guild_memberss) { + if (guild_members.char_id == guild_members_id) { + return guild_members; + } + } + + return NewEntity(); + } + + static GuildMembers FindOne( + int guild_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7]; + entry.alt = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildMembers guild_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(guild_members_entry.guild_id)); + update_values.push_back(columns[2] + " = " + std::to_string(guild_members_entry.rank)); + update_values.push_back(columns[3] + " = " + std::to_string(guild_members_entry.tribute_enable)); + update_values.push_back(columns[4] + " = " + std::to_string(guild_members_entry.total_tribute)); + update_values.push_back(columns[5] + " = " + std::to_string(guild_members_entry.last_tribute)); + update_values.push_back(columns[6] + " = " + std::to_string(guild_members_entry.banker)); + update_values.push_back(columns[7] + " = '" + EscapeString(guild_members_entry.public_note) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(guild_members_entry.alt)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_members_entry.char_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildMembers InsertOne( + GuildMembers guild_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_members_entry.guild_id)); + insert_values.push_back(std::to_string(guild_members_entry.rank)); + insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); + insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.banker)); + insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); + insert_values.push_back(std::to_string(guild_members_entry.alt)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_members_entry.id = results.LastInsertedID(); + return guild_members_entry; + } + + guild_members_entry = InstanceListRepository::NewEntity(); + + return guild_members_entry; + } + + static int InsertMany( + std::vector guild_members_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_members_entry: guild_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_members_entry.guild_id)); + insert_values.push_back(std::to_string(guild_members_entry.rank)); + insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); + insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.banker)); + insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); + insert_values.push_back(std::to_string(guild_members_entry.alt)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7]; + entry.alt = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GUILD_MEMBERS_REPOSITORY_H diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h new file mode 100644 index 000000000..a2e7c437b --- /dev/null +++ b/common/repositories/guild_ranks_repository.h @@ -0,0 +1,327 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GUILD_RANKS_REPOSITORY_H +#define EQEMU_GUILD_RANKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GuildRanksRepository { +public: + struct GuildRanks { + int guild_id; + int8 rank; + std::string title; + int8 can_hear; + int8 can_speak; + int8 can_invite; + int8 can_remove; + int8 can_promote; + int8 can_demote; + int8 can_motd; + int8 can_warpeace; + }; + + static std::string PrimaryKey() + { + return std::string("rank"); + } + + static std::vector Columns() + { + return { + "guild_id", + "rank", + "title", + "can_hear", + "can_speak", + "can_invite", + "can_remove", + "can_promote", + "can_demote", + "can_motd", + "can_warpeace", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_ranks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildRanks NewEntity() + { + GuildRanks entry{}; + + entry.guild_id = 0; + entry.rank = 0; + entry.title = ""; + entry.can_hear = 0; + entry.can_speak = 0; + entry.can_invite = 0; + entry.can_remove = 0; + entry.can_promote = 0; + entry.can_demote = 0; + entry.can_motd = 0; + entry.can_warpeace = 0; + + return entry; + } + + static GuildRanks GetGuildRanksEntry( + const std::vector &guild_rankss, + int guild_ranks_id + ) + { + for (auto &guild_ranks : guild_rankss) { + if (guild_ranks.rank == guild_ranks_id) { + return guild_ranks; + } + } + + return NewEntity(); + } + + static GuildRanks FindOne( + int guild_ranks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_ranks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2]; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_ranks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_ranks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildRanks guild_ranks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(guild_ranks_entry.title) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(guild_ranks_entry.can_hear)); + update_values.push_back(columns[4] + " = " + std::to_string(guild_ranks_entry.can_speak)); + update_values.push_back(columns[5] + " = " + std::to_string(guild_ranks_entry.can_invite)); + update_values.push_back(columns[6] + " = " + std::to_string(guild_ranks_entry.can_remove)); + update_values.push_back(columns[7] + " = " + std::to_string(guild_ranks_entry.can_promote)); + update_values.push_back(columns[8] + " = " + std::to_string(guild_ranks_entry.can_demote)); + update_values.push_back(columns[9] + " = " + std::to_string(guild_ranks_entry.can_motd)); + update_values.push_back(columns[10] + " = " + std::to_string(guild_ranks_entry.can_warpeace)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_ranks_entry.rank + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildRanks InsertOne( + GuildRanks guild_ranks_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); + insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_ranks_entry.id = results.LastInsertedID(); + return guild_ranks_entry; + } + + guild_ranks_entry = InstanceListRepository::NewEntity(); + + return guild_ranks_entry; + } + + static int InsertMany( + std::vector guild_ranks_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_ranks_entry: guild_ranks_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); + insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2]; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GUILD_RANKS_REPOSITORY_H diff --git a/common/repositories/guild_relations_repository.h b/common/repositories/guild_relations_repository.h new file mode 100644 index 000000000..effe37b13 --- /dev/null +++ b/common/repositories/guild_relations_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GUILD_RELATIONS_REPOSITORY_H +#define EQEMU_GUILD_RELATIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GuildRelationsRepository { +public: + struct GuildRelations { + int guild1; + int guild2; + int8 relation; + }; + + static std::string PrimaryKey() + { + return std::string("guild2"); + } + + static std::vector Columns() + { + return { + "guild1", + "guild2", + "relation", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_relations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildRelations NewEntity() + { + GuildRelations entry{}; + + entry.guild1 = 0; + entry.guild2 = 0; + entry.relation = 0; + + return entry; + } + + static GuildRelations GetGuildRelationsEntry( + const std::vector &guild_relationss, + int guild_relations_id + ) + { + for (auto &guild_relations : guild_relationss) { + if (guild_relations.guild2 == guild_relations_id) { + return guild_relations; + } + } + + return NewEntity(); + } + + static GuildRelations FindOne( + int guild_relations_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_relations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_relations_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_relations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildRelations guild_relations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(guild_relations_entry.relation)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_relations_entry.guild2 + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildRelations InsertOne( + GuildRelations guild_relations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_relations_entry.relation)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_relations_entry.id = results.LastInsertedID(); + return guild_relations_entry; + } + + guild_relations_entry = InstanceListRepository::NewEntity(); + + return guild_relations_entry; + } + + static int InsertMany( + std::vector guild_relations_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_relations_entry: guild_relations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_relations_entry.relation)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GUILD_RELATIONS_REPOSITORY_H diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h new file mode 100644 index 000000000..e785ef955 --- /dev/null +++ b/common/repositories/guilds_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_GUILDS_REPOSITORY_H +#define EQEMU_GUILDS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class GuildsRepository { +public: + struct Guilds { + int id; + std::string name; + int leader; + int16 minstatus; + std::string motd; + int tribute; + std::string motd_setter; + std::string channel; + std::string url; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "leader", + "minstatus", + "motd", + "tribute", + "motd_setter", + "channel", + "url", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guilds"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Guilds NewEntity() + { + Guilds entry{}; + + entry.id = 0; + entry.name = ""; + entry.leader = 0; + entry.minstatus = 0; + entry.motd = 0; + entry.tribute = 0; + entry.motd_setter = ""; + entry.channel = ""; + entry.url = ""; + + return entry; + } + + static Guilds GetGuildsEntry( + const std::vector &guildss, + int guilds_id + ) + { + for (auto &guilds : guildss) { + if (guilds.id == guilds_id) { + return guilds; + } + } + + return NewEntity(); + } + + static Guilds FindOne( + int guilds_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guilds_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4]; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6]; + entry.channel = row[7]; + entry.url = row[8]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guilds_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guilds_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Guilds guilds_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(guilds_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(guilds_entry.leader)); + update_values.push_back(columns[3] + " = " + std::to_string(guilds_entry.minstatus)); + update_values.push_back(columns[4] + " = '" + EscapeString(guilds_entry.motd) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(guilds_entry.tribute)); + update_values.push_back(columns[6] + " = '" + EscapeString(guilds_entry.motd_setter) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(guilds_entry.channel) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(guilds_entry.url) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guilds_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Guilds InsertOne( + Guilds guilds_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); + insert_values.push_back(std::to_string(guilds_entry.leader)); + insert_values.push_back(std::to_string(guilds_entry.minstatus)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); + insert_values.push_back(std::to_string(guilds_entry.tribute)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guilds_entry.id = results.LastInsertedID(); + return guilds_entry; + } + + guilds_entry = InstanceListRepository::NewEntity(); + + return guilds_entry; + } + + static int InsertMany( + std::vector guilds_entries + ) + { + std::vector insert_chunks; + + for (auto &guilds_entry: guilds_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); + insert_values.push_back(std::to_string(guilds_entry.leader)); + insert_values.push_back(std::to_string(guilds_entry.minstatus)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); + insert_values.push_back(std::to_string(guilds_entry.tribute)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4]; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6]; + entry.channel = row[7]; + entry.url = row[8]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_GUILDS_REPOSITORY_H diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h new file mode 100644 index 000000000..23bc189ba --- /dev/null +++ b/common/repositories/hackers_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_HACKERS_REPOSITORY_H +#define EQEMU_HACKERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class HackersRepository { +public: + struct Hackers { + int id; + std::string account; + std::string name; + std::string hacked; + std::string zone; + std::string date; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account", + "name", + "hacked", + "zone", + "date", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("hackers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Hackers NewEntity() + { + Hackers entry{}; + + entry.id = 0; + entry.account = 0; + entry.name = 0; + entry.hacked = 0; + entry.zone = 0; + entry.date = current_timestamp(); + + return entry; + } + + static Hackers GetHackersEntry( + const std::vector &hackerss, + int hackers_id + ) + { + for (auto &hackers : hackerss) { + if (hackers.id == hackers_id) { + return hackers; + } + } + + return NewEntity(); + } + + static Hackers FindOne( + int hackers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + hackers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1]; + entry.name = row[2]; + entry.hacked = row[3]; + entry.zone = row[4]; + entry.date = row[5]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int hackers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + hackers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Hackers hackers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(hackers_entry.account) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(hackers_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(hackers_entry.hacked) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(hackers_entry.zone) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(hackers_entry.date) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + hackers_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Hackers InsertOne( + Hackers hackers_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + hackers_entry.id = results.LastInsertedID(); + return hackers_entry; + } + + hackers_entry = InstanceListRepository::NewEntity(); + + return hackers_entry; + } + + static int InsertMany( + std::vector hackers_entries + ) + { + std::vector insert_chunks; + + for (auto &hackers_entry: hackers_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1]; + entry.name = row[2]; + entry.hacked = row[3]; + entry.zone = row[4]; + entry.date = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_HACKERS_REPOSITORY_H diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h new file mode 100644 index 000000000..a59c03136 --- /dev/null +++ b/common/repositories/horses_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_HORSES_REPOSITORY_H +#define EQEMU_HORSES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class HorsesRepository { +public: + struct Horses { + std::string filename; + int16 race; + int8 gender; + int8 texture; + std::string mountspeed; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("filename"); + } + + static std::vector Columns() + { + return { + "filename", + "race", + "gender", + "texture", + "mountspeed", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("horses"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Horses NewEntity() + { + Horses entry{}; + + entry.filename = ""; + entry.race = 216; + entry.gender = 0; + entry.texture = 0; + entry.mountspeed = 0.75; + entry.notes = 'Notes'; + + return entry; + } + + static Horses GetHorsesEntry( + const std::vector &horsess, + int horses_id + ) + { + for (auto &horses : horsess) { + if (horses.filename == horses_id) { + return horses; + } + } + + return NewEntity(); + } + + static Horses FindOne( + int horses_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + horses_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Horses entry{}; + + entry.filename = row[0]; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int horses_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + horses_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Horses horses_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(horses_entry.race)); + update_values.push_back(columns[2] + " = " + std::to_string(horses_entry.gender)); + update_values.push_back(columns[3] + " = " + std::to_string(horses_entry.texture)); + update_values.push_back(columns[4] + " = '" + EscapeString(horses_entry.mountspeed) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(horses_entry.notes) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + horses_entry.filename + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Horses InsertOne( + Horses horses_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(horses_entry.race)); + insert_values.push_back(std::to_string(horses_entry.gender)); + insert_values.push_back(std::to_string(horses_entry.texture)); + insert_values.push_back("'" + EscapeString(horses_entry.mountspeed) + "'"); + insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + horses_entry.id = results.LastInsertedID(); + return horses_entry; + } + + horses_entry = InstanceListRepository::NewEntity(); + + return horses_entry; + } + + static int InsertMany( + std::vector horses_entries + ) + { + std::vector insert_chunks; + + for (auto &horses_entry: horses_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(horses_entry.race)); + insert_values.push_back(std::to_string(horses_entry.gender)); + insert_values.push_back(std::to_string(horses_entry.texture)); + insert_values.push_back("'" + EscapeString(horses_entry.mountspeed) + "'"); + insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Horses entry{}; + + entry.filename = row[0]; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_HORSES_REPOSITORY_H diff --git a/common/repositories/instance_list_player_repository.h b/common/repositories/instance_list_player_repository.h new file mode 100644 index 000000000..811ae3a8d --- /dev/null +++ b/common/repositories/instance_list_player_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_INSTANCE_LIST_PLAYER_REPOSITORY_H +#define EQEMU_INSTANCE_LIST_PLAYER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class InstanceListPlayerRepository { +public: + struct InstanceListPlayer { + int id; + int charid; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("instance_list_player"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InstanceListPlayer NewEntity() + { + InstanceListPlayer entry{}; + + entry.id = 0; + entry.charid = 0; + + return entry; + } + + static InstanceListPlayer GetInstanceListPlayerEntry( + const std::vector &instance_list_players, + int instance_list_player_id + ) + { + for (auto &instance_list_player : instance_list_players) { + if (instance_list_player.charid == instance_list_player_id) { + return instance_list_player; + } + } + + return NewEntity(); + } + + static InstanceListPlayer FindOne( + int instance_list_player_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + instance_list_player_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int instance_list_player_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + instance_list_player_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InstanceListPlayer instance_list_player_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + instance_list_player_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InstanceListPlayer InsertOne( + InstanceListPlayer instance_list_player_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + instance_list_player_entry.id = results.LastInsertedID(); + return instance_list_player_entry; + } + + instance_list_player_entry = InstanceListRepository::NewEntity(); + + return instance_list_player_entry; + } + + static int InsertMany( + std::vector instance_list_player_entries + ) + { + std::vector insert_chunks; + + for (auto &instance_list_player_entry: instance_list_player_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_INSTANCE_LIST_PLAYER_REPOSITORY_H diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index cc2c113a3..f368233cb 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -27,13 +27,13 @@ class InstanceListRepository { public: struct InstanceList { - int id; - int zone; - int8 version; - int8 is_global; - int start_time; - int duration; - int8 never_expires; + int id; + int zone; + int version; + int is_global; + int start_time; + int duration; + int never_expires; }; static std::string PrimaryKey() diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h new file mode 100644 index 000000000..aa5d443c3 --- /dev/null +++ b/common/repositories/inventory_repository.h @@ -0,0 +1,367 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_INVENTORY_REPOSITORY_H +#define EQEMU_INVENTORY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class InventoryRepository { +public: + struct Inventory { + int charid; + int slotid; + int itemid; + int16 charges; + int color; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + int8 instnodrop; + std::string custom_data; + int ornamenticon; + int ornamentidfile; + int ornament_hero_model; + }; + + static std::string PrimaryKey() + { + return std::string("slotid"); + } + + static std::vector Columns() + { + return { + "charid", + "slotid", + "itemid", + "charges", + "color", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + "instnodrop", + "custom_data", + "ornamenticon", + "ornamentidfile", + "ornament_hero_model", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("inventory"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Inventory NewEntity() + { + Inventory entry{}; + + entry.charid = 0; + entry.slotid = 0; + entry.itemid = 0; + entry.charges = 0; + entry.color = 0; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + entry.instnodrop = 0; + entry.custom_data = 0; + entry.ornamenticon = 0; + entry.ornamentidfile = 0; + entry.ornament_hero_model = 0; + + return entry; + } + + static Inventory GetInventoryEntry( + const std::vector &inventorys, + int inventory_id + ) + { + for (auto &inventory : inventorys) { + if (inventory.slotid == inventory_id) { + return inventory; + } + } + + return NewEntity(); + } + + static Inventory FindOne( + int inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + inventory_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12]; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + inventory_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Inventory inventory_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(inventory_entry.itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(inventory_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(inventory_entry.color)); + update_values.push_back(columns[5] + " = " + std::to_string(inventory_entry.augslot1)); + update_values.push_back(columns[6] + " = " + std::to_string(inventory_entry.augslot2)); + update_values.push_back(columns[7] + " = " + std::to_string(inventory_entry.augslot3)); + update_values.push_back(columns[8] + " = " + std::to_string(inventory_entry.augslot4)); + update_values.push_back(columns[9] + " = " + std::to_string(inventory_entry.augslot5)); + update_values.push_back(columns[10] + " = " + std::to_string(inventory_entry.augslot6)); + update_values.push_back(columns[11] + " = " + std::to_string(inventory_entry.instnodrop)); + update_values.push_back(columns[12] + " = '" + EscapeString(inventory_entry.custom_data) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(inventory_entry.ornamenticon)); + update_values.push_back(columns[14] + " = " + std::to_string(inventory_entry.ornamentidfile)); + update_values.push_back(columns[15] + " = " + std::to_string(inventory_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + inventory_entry.slotid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Inventory InsertOne( + Inventory inventory_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_entry.itemid)); + insert_values.push_back(std::to_string(inventory_entry.charges)); + insert_values.push_back(std::to_string(inventory_entry.color)); + insert_values.push_back(std::to_string(inventory_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + inventory_entry.id = results.LastInsertedID(); + return inventory_entry; + } + + inventory_entry = InstanceListRepository::NewEntity(); + + return inventory_entry; + } + + static int InsertMany( + std::vector inventory_entries + ) + { + std::vector insert_chunks; + + for (auto &inventory_entry: inventory_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_entry.itemid)); + insert_values.push_back(std::to_string(inventory_entry.charges)); + insert_values.push_back(std::to_string(inventory_entry.color)); + insert_values.push_back(std::to_string(inventory_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12]; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_INVENTORY_REPOSITORY_H diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h new file mode 100644 index 000000000..36326e9de --- /dev/null +++ b/common/repositories/inventory_snapshots_repository.h @@ -0,0 +1,372 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_INVENTORY_SNAPSHOTS_REPOSITORY_H +#define EQEMU_INVENTORY_SNAPSHOTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class InventorySnapshotsRepository { +public: + struct InventorySnapshots { + int time_index; + int charid; + int slotid; + int itemid; + int16 charges; + int color; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + int8 instnodrop; + std::string custom_data; + int ornamenticon; + int ornamentidfile; + int ornament_hero_model; + }; + + static std::string PrimaryKey() + { + return std::string("slotid"); + } + + static std::vector Columns() + { + return { + "time_index", + "charid", + "slotid", + "itemid", + "charges", + "color", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + "instnodrop", + "custom_data", + "ornamenticon", + "ornamentidfile", + "ornament_hero_model", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("inventory_snapshots"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InventorySnapshots NewEntity() + { + InventorySnapshots entry{}; + + entry.time_index = 0; + entry.charid = 0; + entry.slotid = 0; + entry.itemid = 0; + entry.charges = 0; + entry.color = 0; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + entry.instnodrop = 0; + entry.custom_data = 0; + entry.ornamenticon = 0; + entry.ornamentidfile = 0; + entry.ornament_hero_model = 0; + + return entry; + } + + static InventorySnapshots GetInventorySnapshotsEntry( + const std::vector &inventory_snapshotss, + int inventory_snapshots_id + ) + { + for (auto &inventory_snapshots : inventory_snapshotss) { + if (inventory_snapshots.slotid == inventory_snapshots_id) { + return inventory_snapshots; + } + } + + return NewEntity(); + } + + static InventorySnapshots FindOne( + int inventory_snapshots_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + inventory_snapshots_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13]; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int inventory_snapshots_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + inventory_snapshots_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InventorySnapshots inventory_snapshots_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(inventory_snapshots_entry.itemid)); + update_values.push_back(columns[4] + " = " + std::to_string(inventory_snapshots_entry.charges)); + update_values.push_back(columns[5] + " = " + std::to_string(inventory_snapshots_entry.color)); + update_values.push_back(columns[6] + " = " + std::to_string(inventory_snapshots_entry.augslot1)); + update_values.push_back(columns[7] + " = " + std::to_string(inventory_snapshots_entry.augslot2)); + update_values.push_back(columns[8] + " = " + std::to_string(inventory_snapshots_entry.augslot3)); + update_values.push_back(columns[9] + " = " + std::to_string(inventory_snapshots_entry.augslot4)); + update_values.push_back(columns[10] + " = " + std::to_string(inventory_snapshots_entry.augslot5)); + update_values.push_back(columns[11] + " = " + std::to_string(inventory_snapshots_entry.augslot6)); + update_values.push_back(columns[12] + " = " + std::to_string(inventory_snapshots_entry.instnodrop)); + update_values.push_back(columns[13] + " = '" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(inventory_snapshots_entry.ornamenticon)); + update_values.push_back(columns[15] + " = " + std::to_string(inventory_snapshots_entry.ornamentidfile)); + update_values.push_back(columns[16] + " = " + std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + inventory_snapshots_entry.slotid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InventorySnapshots InsertOne( + InventorySnapshots inventory_snapshots_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + inventory_snapshots_entry.id = results.LastInsertedID(); + return inventory_snapshots_entry; + } + + inventory_snapshots_entry = InstanceListRepository::NewEntity(); + + return inventory_snapshots_entry; + } + + static int InsertMany( + std::vector inventory_snapshots_entries + ) + { + std::vector insert_chunks; + + for (auto &inventory_snapshots_entry: inventory_snapshots_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13]; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_INVENTORY_SNAPSHOTS_REPOSITORY_H diff --git a/common/repositories/inventory_versions_repository.h b/common/repositories/inventory_versions_repository.h new file mode 100644 index 000000000..4469756de --- /dev/null +++ b/common/repositories/inventory_versions_repository.h @@ -0,0 +1,269 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_INVENTORY_VERSIONS_REPOSITORY_H +#define EQEMU_INVENTORY_VERSIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class InventoryVersionsRepository { +public: + struct InventoryVersions { + int version; + int step; + int bot_step; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "version", + "step", + "bot_step", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("inventory_versions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InventoryVersions NewEntity() + { + InventoryVersions entry{}; + + entry.version = 0; + entry.step = 0; + entry.bot_step = 0; + + return entry; + } + + static InventoryVersions GetInventoryVersionsEntry( + const std::vector &inventory_versionss, + int inventory_versions_id + ) + { + for (auto &inventory_versions : inventory_versionss) { + if (inventory_versions. == inventory_versions_id) { + return inventory_versions; + } + } + + return NewEntity(); + } + + static InventoryVersions FindOne( + int inventory_versions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + inventory_versions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InventoryVersions entry{}; + + entry.version = atoi(row[0]); + entry.step = atoi(row[1]); + entry.bot_step = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int inventory_versions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + inventory_versions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InventoryVersions inventory_versions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(inventory_versions_entry.version)); + update_values.push_back(columns[1] + " = " + std::to_string(inventory_versions_entry.step)); + update_values.push_back(columns[2] + " = " + std::to_string(inventory_versions_entry.bot_step)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + inventory_versions_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InventoryVersions InsertOne( + InventoryVersions inventory_versions_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_versions_entry.version)); + insert_values.push_back(std::to_string(inventory_versions_entry.step)); + insert_values.push_back(std::to_string(inventory_versions_entry.bot_step)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + inventory_versions_entry.id = results.LastInsertedID(); + return inventory_versions_entry; + } + + inventory_versions_entry = InstanceListRepository::NewEntity(); + + return inventory_versions_entry; + } + + static int InsertMany( + std::vector inventory_versions_entries + ) + { + std::vector insert_chunks; + + for (auto &inventory_versions_entry: inventory_versions_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_versions_entry.version)); + insert_values.push_back(std::to_string(inventory_versions_entry.step)); + insert_values.push_back(std::to_string(inventory_versions_entry.bot_step)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InventoryVersions entry{}; + + entry.version = atoi(row[0]); + entry.step = atoi(row[1]); + entry.bot_step = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_INVENTORY_VERSIONS_REPOSITORY_H diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h new file mode 100644 index 000000000..094922551 --- /dev/null +++ b/common/repositories/ip_exemptions_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_IP_EXEMPTIONS_REPOSITORY_H +#define EQEMU_IP_EXEMPTIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class IpExemptionsRepository { +public: + struct IpExemptions { + int exemption_id; + std::string exemption_ip; + int exemption_amount; + }; + + static std::string PrimaryKey() + { + return std::string("exemption_id"); + } + + static std::vector Columns() + { + return { + "exemption_id", + "exemption_ip", + "exemption_amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ip_exemptions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static IpExemptions NewEntity() + { + IpExemptions entry{}; + + entry.exemption_id = 0; + entry.exemption_ip = 0; + entry.exemption_amount = 0; + + return entry; + } + + static IpExemptions GetIpExemptionsEntry( + const std::vector &ip_exemptionss, + int ip_exemptions_id + ) + { + for (auto &ip_exemptions : ip_exemptionss) { + if (ip_exemptions.exemption_id == ip_exemptions_id) { + return ip_exemptions; + } + } + + return NewEntity(); + } + + static IpExemptions FindOne( + int ip_exemptions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ip_exemptions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1]; + entry.exemption_amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ip_exemptions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ip_exemptions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + IpExemptions ip_exemptions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(ip_exemptions_entry.exemption_amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ip_exemptions_entry.exemption_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static IpExemptions InsertOne( + IpExemptions ip_exemptions_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ip_exemptions_entry.id = results.LastInsertedID(); + return ip_exemptions_entry; + } + + ip_exemptions_entry = InstanceListRepository::NewEntity(); + + return ip_exemptions_entry; + } + + static int InsertMany( + std::vector ip_exemptions_entries + ) + { + std::vector insert_chunks; + + for (auto &ip_exemptions_entry: ip_exemptions_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1]; + entry.exemption_amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_IP_EXEMPTIONS_REPOSITORY_H diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h new file mode 100644 index 000000000..cfb515c44 --- /dev/null +++ b/common/repositories/item_tick_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ITEM_TICK_REPOSITORY_H +#define EQEMU_ITEM_TICK_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ItemTickRepository { +public: + struct ItemTick { + int it_itemid; + int it_chance; + int it_level; + int it_id; + std::string it_qglobal; + int8 it_bagslot; + }; + + static std::string PrimaryKey() + { + return std::string("it_id"); + } + + static std::vector Columns() + { + return { + "it_itemid", + "it_chance", + "it_level", + "it_id", + "it_qglobal", + "it_bagslot", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("item_tick"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ItemTick NewEntity() + { + ItemTick entry{}; + + entry.it_itemid = 0; + entry.it_chance = 0; + entry.it_level = 0; + entry.it_id = 0; + entry.it_qglobal = 0; + entry.it_bagslot = 0; + + return entry; + } + + static ItemTick GetItemTickEntry( + const std::vector &item_ticks, + int item_tick_id + ) + { + for (auto &item_tick : item_ticks) { + if (item_tick.it_id == item_tick_id) { + return item_tick; + } + } + + return NewEntity(); + } + + static ItemTick FindOne( + int item_tick_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + item_tick_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4]; + entry.it_bagslot = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int item_tick_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + item_tick_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ItemTick item_tick_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(item_tick_entry.it_itemid)); + update_values.push_back(columns[1] + " = " + std::to_string(item_tick_entry.it_chance)); + update_values.push_back(columns[2] + " = " + std::to_string(item_tick_entry.it_level)); + update_values.push_back(columns[4] + " = '" + EscapeString(item_tick_entry.it_qglobal) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(item_tick_entry.it_bagslot)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + item_tick_entry.it_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ItemTick InsertOne( + ItemTick item_tick_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); + insert_values.push_back(std::to_string(item_tick_entry.it_chance)); + insert_values.push_back(std::to_string(item_tick_entry.it_level)); + insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); + insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + item_tick_entry.id = results.LastInsertedID(); + return item_tick_entry; + } + + item_tick_entry = InstanceListRepository::NewEntity(); + + return item_tick_entry; + } + + static int InsertMany( + std::vector item_tick_entries + ) + { + std::vector insert_chunks; + + for (auto &item_tick_entry: item_tick_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); + insert_values.push_back(std::to_string(item_tick_entry.it_chance)); + insert_values.push_back(std::to_string(item_tick_entry.it_level)); + insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); + insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4]; + entry.it_bagslot = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ITEM_TICK_REPOSITORY_H diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h new file mode 100644 index 000000000..bedde8084 --- /dev/null +++ b/common/repositories/items_repository.h @@ -0,0 +1,2522 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ITEMS_REPOSITORY_H +#define EQEMU_ITEMS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ItemsRepository { +public: + struct Items { + int id; + int16 minstatus; + std::string Name; + int aagi; + int ac; + int accuracy; + int acha; + int adex; + int aint; + int8 artifactflag; + int asta; + int astr; + int attack; + int augrestrict; + int8 augslot1type; + int8 augslot1visible; + int8 augslot2type; + int8 augslot2visible; + int8 augslot3type; + int8 augslot3visible; + int8 augslot4type; + int8 augslot4visible; + int8 augslot5type; + int8 augslot5visible; + int8 augslot6type; + int8 augslot6visible; + int augtype; + int avoidance; + int awis; + int bagsize; + int bagslots; + int bagtype; + int bagwr; + int banedmgamt; + int banedmgraceamt; + int banedmgbody; + int banedmgrace; + int bardtype; + int bardvalue; + int book; + int casttime; + int casttime_; + std::string charmfile; + std::string charmfileid; + int classes; + int color; + std::string combateffects; + int extradmgskill; + int extradmgamt; + int price; + int cr; + int damage; + int damageshield; + int deity; + int delay; + int augdistiller; + int dotshielding; + int dr; + int clicktype; + int clicklevel2; + int elemdmgtype; + int elemdmgamt; + int endur; + int factionamt1; + int factionamt2; + int factionamt3; + int factionamt4; + int factionmod1; + int factionmod2; + int factionmod3; + int factionmod4; + std::string filename; + int focuseffect; + int fr; + int fvnodrop; + int haste; + int clicklevel; + int hp; + int regen; + int icon; + std::string idfile; + int itemclass; + int itemtype; + int ldonprice; + int ldontheme; + int ldonsold; + int light; + std::string lore; + int loregroup; + int magic; + int mana; + int manaregen; + int enduranceregen; + int material; + int herosforgemodel; + int maxcharges; + int mr; + int nodrop; + int norent; + int8 pendingloreflag; + int pr; + int procrate; + int races; + int range; + int reclevel; + int recskill; + int reqlevel; + std::string sellrate; + int shielding; + int size; + int skillmodtype; + int skillmodvalue; + int slots; + int clickeffect; + int spellshield; + int strikethrough; + int stunresist; + int8 summonedflag; + int tradeskills; + int favor; + int weight; + int UNK012; + int UNK013; + int benefitflag; + int UNK054; + int UNK059; + int booktype; + int recastdelay; + int recasttype; + int guildfavor; + int UNK123; + int UNK124; + int attuneable; + int nopet; + std::string updated; + std::string comment; + int UNK127; + int pointtype; + int potionbelt; + int potionbeltslots; + int stacksize; + int notransfer; + int stackable; + std::string UNK134; + int UNK137; + int proceffect; + int proctype; + int proclevel2; + int proclevel; + int UNK142; + int worneffect; + int worntype; + int wornlevel2; + int wornlevel; + int UNK147; + int focustype; + int focuslevel2; + int focuslevel; + int UNK152; + int scrolleffect; + int scrolltype; + int scrolllevel2; + int scrolllevel; + int UNK157; + std::string serialized; + std::string verified; + std::string serialization; + std::string source; + int UNK033; + std::string lorefile; + int UNK014; + int svcorruption; + int skillmodmax; + int UNK060; + int augslot1unk2; + int augslot2unk2; + int augslot3unk2; + int augslot4unk2; + int augslot5unk2; + int augslot6unk2; + int UNK120; + int UNK121; + int questitemflag; + std::string UNK132; + int clickunk5; + std::string clickunk6; + int clickunk7; + int procunk1; + int procunk2; + int procunk3; + int procunk4; + std::string procunk6; + int procunk7; + int wornunk1; + int wornunk2; + int wornunk3; + int wornunk4; + int wornunk5; + std::string wornunk6; + int wornunk7; + int focusunk1; + int focusunk2; + int focusunk3; + int focusunk4; + int focusunk5; + std::string focusunk6; + int focusunk7; + int scrollunk1; + int scrollunk2; + int scrollunk3; + int scrollunk4; + int scrollunk5; + std::string scrollunk6; + int scrollunk7; + int UNK193; + int purity; + int evoitem; + int evoid; + int evolvinglevel; + int evomax; + std::string clickname; + std::string procname; + std::string wornname; + std::string focusname; + std::string scrollname; + int16 dsmitigation; + int16 heroic_str; + int16 heroic_int; + int16 heroic_wis; + int16 heroic_agi; + int16 heroic_dex; + int16 heroic_sta; + int16 heroic_cha; + int16 heroic_pr; + int16 heroic_dr; + int16 heroic_fr; + int16 heroic_cr; + int16 heroic_mr; + int16 heroic_svcorrup; + int16 healamt; + int16 spelldmg; + int16 clairvoyance; + int16 backstabdmg; + std::string created; + int16 elitematerial; + int16 ldonsellbackrate; + int16 scriptfileid; + int16 expendablearrow; + int16 powersourcecapacity; + int16 bardeffect; + int16 bardeffecttype; + int16 bardlevel2; + int16 bardlevel; + int16 bardunk1; + int16 bardunk2; + int16 bardunk3; + int16 bardunk4; + int16 bardunk5; + std::string bardname; + int16 bardunk7; + int16 UNK214; + int UNK219; + int UNK220; + int UNK221; + int heirloom; + int UNK223; + int UNK224; + int UNK225; + int UNK226; + int UNK227; + int UNK228; + int UNK229; + int UNK230; + int UNK231; + int UNK232; + int UNK233; + int UNK234; + int placeable; + int UNK236; + int UNK237; + int UNK238; + int UNK239; + int UNK240; + int UNK241; + int epicitem; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "minstatus", + "Name", + "aagi", + "ac", + "accuracy", + "acha", + "adex", + "aint", + "artifactflag", + "asta", + "astr", + "attack", + "augrestrict", + "augslot1type", + "augslot1visible", + "augslot2type", + "augslot2visible", + "augslot3type", + "augslot3visible", + "augslot4type", + "augslot4visible", + "augslot5type", + "augslot5visible", + "augslot6type", + "augslot6visible", + "augtype", + "avoidance", + "awis", + "bagsize", + "bagslots", + "bagtype", + "bagwr", + "banedmgamt", + "banedmgraceamt", + "banedmgbody", + "banedmgrace", + "bardtype", + "bardvalue", + "book", + "casttime", + "casttime_", + "charmfile", + "charmfileid", + "classes", + "color", + "combateffects", + "extradmgskill", + "extradmgamt", + "price", + "cr", + "damage", + "damageshield", + "deity", + "delay", + "augdistiller", + "dotshielding", + "dr", + "clicktype", + "clicklevel2", + "elemdmgtype", + "elemdmgamt", + "endur", + "factionamt1", + "factionamt2", + "factionamt3", + "factionamt4", + "factionmod1", + "factionmod2", + "factionmod3", + "factionmod4", + "filename", + "focuseffect", + "fr", + "fvnodrop", + "haste", + "clicklevel", + "hp", + "regen", + "icon", + "idfile", + "itemclass", + "itemtype", + "ldonprice", + "ldontheme", + "ldonsold", + "light", + "lore", + "loregroup", + "magic", + "mana", + "manaregen", + "enduranceregen", + "material", + "herosforgemodel", + "maxcharges", + "mr", + "nodrop", + "norent", + "pendingloreflag", + "pr", + "procrate", + "races", + "range", + "reclevel", + "recskill", + "reqlevel", + "sellrate", + "shielding", + "size", + "skillmodtype", + "skillmodvalue", + "slots", + "clickeffect", + "spellshield", + "strikethrough", + "stunresist", + "summonedflag", + "tradeskills", + "favor", + "weight", + "UNK012", + "UNK013", + "benefitflag", + "UNK054", + "UNK059", + "booktype", + "recastdelay", + "recasttype", + "guildfavor", + "UNK123", + "UNK124", + "attuneable", + "nopet", + "updated", + "comment", + "UNK127", + "pointtype", + "potionbelt", + "potionbeltslots", + "stacksize", + "notransfer", + "stackable", + "UNK134", + "UNK137", + "proceffect", + "proctype", + "proclevel2", + "proclevel", + "UNK142", + "worneffect", + "worntype", + "wornlevel2", + "wornlevel", + "UNK147", + "focustype", + "focuslevel2", + "focuslevel", + "UNK152", + "scrolleffect", + "scrolltype", + "scrolllevel2", + "scrolllevel", + "UNK157", + "serialized", + "verified", + "serialization", + "source", + "UNK033", + "lorefile", + "UNK014", + "svcorruption", + "skillmodmax", + "UNK060", + "augslot1unk2", + "augslot2unk2", + "augslot3unk2", + "augslot4unk2", + "augslot5unk2", + "augslot6unk2", + "UNK120", + "UNK121", + "questitemflag", + "UNK132", + "clickunk5", + "clickunk6", + "clickunk7", + "procunk1", + "procunk2", + "procunk3", + "procunk4", + "procunk6", + "procunk7", + "wornunk1", + "wornunk2", + "wornunk3", + "wornunk4", + "wornunk5", + "wornunk6", + "wornunk7", + "focusunk1", + "focusunk2", + "focusunk3", + "focusunk4", + "focusunk5", + "focusunk6", + "focusunk7", + "scrollunk1", + "scrollunk2", + "scrollunk3", + "scrollunk4", + "scrollunk5", + "scrollunk6", + "scrollunk7", + "UNK193", + "purity", + "evoitem", + "evoid", + "evolvinglevel", + "evomax", + "clickname", + "procname", + "wornname", + "focusname", + "scrollname", + "dsmitigation", + "heroic_str", + "heroic_int", + "heroic_wis", + "heroic_agi", + "heroic_dex", + "heroic_sta", + "heroic_cha", + "heroic_pr", + "heroic_dr", + "heroic_fr", + "heroic_cr", + "heroic_mr", + "heroic_svcorrup", + "healamt", + "spelldmg", + "clairvoyance", + "backstabdmg", + "created", + "elitematerial", + "ldonsellbackrate", + "scriptfileid", + "expendablearrow", + "powersourcecapacity", + "bardeffect", + "bardeffecttype", + "bardlevel2", + "bardlevel", + "bardunk1", + "bardunk2", + "bardunk3", + "bardunk4", + "bardunk5", + "bardname", + "bardunk7", + "UNK214", + "UNK219", + "UNK220", + "UNK221", + "heirloom", + "UNK223", + "UNK224", + "UNK225", + "UNK226", + "UNK227", + "UNK228", + "UNK229", + "UNK230", + "UNK231", + "UNK232", + "UNK233", + "UNK234", + "placeable", + "UNK236", + "UNK237", + "UNK238", + "UNK239", + "UNK240", + "UNK241", + "epicitem", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Items NewEntity() + { + Items entry{}; + + entry.id = 0; + entry.minstatus = 0; + entry.Name = ""; + entry.aagi = 0; + entry.ac = 0; + entry.accuracy = 0; + entry.acha = 0; + entry.adex = 0; + entry.aint = 0; + entry.artifactflag = 0; + entry.asta = 0; + entry.astr = 0; + entry.attack = 0; + entry.augrestrict = 0; + entry.augslot1type = 0; + entry.augslot1visible = 0; + entry.augslot2type = 0; + entry.augslot2visible = 0; + entry.augslot3type = 0; + entry.augslot3visible = 0; + entry.augslot4type = 0; + entry.augslot4visible = 0; + entry.augslot5type = 0; + entry.augslot5visible = 0; + entry.augslot6type = 0; + entry.augslot6visible = 0; + entry.augtype = 0; + entry.avoidance = 0; + entry.awis = 0; + entry.bagsize = 0; + entry.bagslots = 0; + entry.bagtype = 0; + entry.bagwr = 0; + entry.banedmgamt = 0; + entry.banedmgraceamt = 0; + entry.banedmgbody = 0; + entry.banedmgrace = 0; + entry.bardtype = 0; + entry.bardvalue = 0; + entry.book = 0; + entry.casttime = 0; + entry.casttime_ = 0; + entry.charmfile = ""; + entry.charmfileid = ""; + entry.classes = 0; + entry.color = 0; + entry.combateffects = ""; + entry.extradmgskill = 0; + entry.extradmgamt = 0; + entry.price = 0; + entry.cr = 0; + entry.damage = 0; + entry.damageshield = 0; + entry.deity = 0; + entry.delay = 0; + entry.augdistiller = 0; + entry.dotshielding = 0; + entry.dr = 0; + entry.clicktype = 0; + entry.clicklevel2 = 0; + entry.elemdmgtype = 0; + entry.elemdmgamt = 0; + entry.endur = 0; + entry.factionamt1 = 0; + entry.factionamt2 = 0; + entry.factionamt3 = 0; + entry.factionamt4 = 0; + entry.factionmod1 = 0; + entry.factionmod2 = 0; + entry.factionmod3 = 0; + entry.factionmod4 = 0; + entry.filename = ""; + entry.focuseffect = 0; + entry.fr = 0; + entry.fvnodrop = 0; + entry.haste = 0; + entry.clicklevel = 0; + entry.hp = 0; + entry.regen = 0; + entry.icon = 0; + entry.idfile = ""; + entry.itemclass = 0; + entry.itemtype = 0; + entry.ldonprice = 0; + entry.ldontheme = 0; + entry.ldonsold = 0; + entry.light = 0; + entry.lore = ""; + entry.loregroup = 0; + entry.magic = 0; + entry.mana = 0; + entry.manaregen = 0; + entry.enduranceregen = 0; + entry.material = 0; + entry.herosforgemodel = 0; + entry.maxcharges = 0; + entry.mr = 0; + entry.nodrop = 0; + entry.norent = 0; + entry.pendingloreflag = 0; + entry.pr = 0; + entry.procrate = 0; + entry.races = 0; + entry.range = 0; + entry.reclevel = 0; + entry.recskill = 0; + entry.reqlevel = 0; + entry.sellrate = 0; + entry.shielding = 0; + entry.size = 0; + entry.skillmodtype = 0; + entry.skillmodvalue = 0; + entry.slots = 0; + entry.clickeffect = 0; + entry.spellshield = 0; + entry.strikethrough = 0; + entry.stunresist = 0; + entry.summonedflag = 0; + entry.tradeskills = 0; + entry.favor = 0; + entry.weight = 0; + entry.UNK012 = 0; + entry.UNK013 = 0; + entry.benefitflag = 0; + entry.UNK054 = 0; + entry.UNK059 = 0; + entry.booktype = 0; + entry.recastdelay = 0; + entry.recasttype = 0; + entry.guildfavor = 0; + entry.UNK123 = 0; + entry.UNK124 = 0; + entry.attuneable = 0; + entry.nopet = 0; + entry.updated = '0000-00-00 00:00:00'; + entry.comment = ""; + entry.UNK127 = 0; + entry.pointtype = 0; + entry.potionbelt = 0; + entry.potionbeltslots = 0; + entry.stacksize = 0; + entry.notransfer = 0; + entry.stackable = 0; + entry.UNK134 = ""; + entry.UNK137 = 0; + entry.proceffect = 0; + entry.proctype = 0; + entry.proclevel2 = 0; + entry.proclevel = 0; + entry.UNK142 = 0; + entry.worneffect = 0; + entry.worntype = 0; + entry.wornlevel2 = 0; + entry.wornlevel = 0; + entry.UNK147 = 0; + entry.focustype = 0; + entry.focuslevel2 = 0; + entry.focuslevel = 0; + entry.UNK152 = 0; + entry.scrolleffect = 0; + entry.scrolltype = 0; + entry.scrolllevel2 = 0; + entry.scrolllevel = 0; + entry.UNK157 = 0; + entry.serialized = 0; + entry.verified = 0; + entry.serialization = 0; + entry.source = ""; + entry.UNK033 = 0; + entry.lorefile = ""; + entry.UNK014 = 0; + entry.svcorruption = 0; + entry.skillmodmax = 0; + entry.UNK060 = 0; + entry.augslot1unk2 = 0; + entry.augslot2unk2 = 0; + entry.augslot3unk2 = 0; + entry.augslot4unk2 = 0; + entry.augslot5unk2 = 0; + entry.augslot6unk2 = 0; + entry.UNK120 = 0; + entry.UNK121 = 0; + entry.questitemflag = 0; + entry.UNK132 = 0; + entry.clickunk5 = 0; + entry.clickunk6 = ""; + entry.clickunk7 = 0; + entry.procunk1 = 0; + entry.procunk2 = 0; + entry.procunk3 = 0; + entry.procunk4 = 0; + entry.procunk6 = ""; + entry.procunk7 = 0; + entry.wornunk1 = 0; + entry.wornunk2 = 0; + entry.wornunk3 = 0; + entry.wornunk4 = 0; + entry.wornunk5 = 0; + entry.wornunk6 = ""; + entry.wornunk7 = 0; + entry.focusunk1 = 0; + entry.focusunk2 = 0; + entry.focusunk3 = 0; + entry.focusunk4 = 0; + entry.focusunk5 = 0; + entry.focusunk6 = ""; + entry.focusunk7 = 0; + entry.scrollunk1 = 0; + entry.scrollunk2 = 0; + entry.scrollunk3 = 0; + entry.scrollunk4 = 0; + entry.scrollunk5 = 0; + entry.scrollunk6 = ""; + entry.scrollunk7 = 0; + entry.UNK193 = 0; + entry.purity = 0; + entry.evoitem = 0; + entry.evoid = 0; + entry.evolvinglevel = 0; + entry.evomax = 0; + entry.clickname = ""; + entry.procname = ""; + entry.wornname = ""; + entry.focusname = ""; + entry.scrollname = ""; + entry.dsmitigation = 0; + entry.heroic_str = 0; + entry.heroic_int = 0; + entry.heroic_wis = 0; + entry.heroic_agi = 0; + entry.heroic_dex = 0; + entry.heroic_sta = 0; + entry.heroic_cha = 0; + entry.heroic_pr = 0; + entry.heroic_dr = 0; + entry.heroic_fr = 0; + entry.heroic_cr = 0; + entry.heroic_mr = 0; + entry.heroic_svcorrup = 0; + entry.healamt = 0; + entry.spelldmg = 0; + entry.clairvoyance = 0; + entry.backstabdmg = 0; + entry.created = ""; + entry.elitematerial = 0; + entry.ldonsellbackrate = 0; + entry.scriptfileid = 0; + entry.expendablearrow = 0; + entry.powersourcecapacity = 0; + entry.bardeffect = 0; + entry.bardeffecttype = 0; + entry.bardlevel2 = 0; + entry.bardlevel = 0; + entry.bardunk1 = 0; + entry.bardunk2 = 0; + entry.bardunk3 = 0; + entry.bardunk4 = 0; + entry.bardunk5 = 0; + entry.bardname = ""; + entry.bardunk7 = 0; + entry.UNK214 = 0; + entry.UNK219 = 0; + entry.UNK220 = 0; + entry.UNK221 = 0; + entry.heirloom = 0; + entry.UNK223 = 0; + entry.UNK224 = 0; + entry.UNK225 = 0; + entry.UNK226 = 0; + entry.UNK227 = 0; + entry.UNK228 = 0; + entry.UNK229 = 0; + entry.UNK230 = 0; + entry.UNK231 = 0; + entry.UNK232 = 0; + entry.UNK233 = 0; + entry.UNK234 = 0; + entry.placeable = 0; + entry.UNK236 = 0; + entry.UNK237 = 0; + entry.UNK238 = 0; + entry.UNK239 = 0; + entry.UNK240 = 0; + entry.UNK241 = 0; + entry.epicitem = 0; + + return entry; + } + + static Items GetItemsEntry( + const std::vector &itemss, + int items_id + ) + { + for (auto &items : itemss) { + if (items.id == items_id) { + return items; + } + } + + return NewEntity(); + } + + static Items FindOne( + int items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2]; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42]; + entry.charmfileid = row[43]; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46]; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71]; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80]; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87]; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134]; + entry.comment = row[135]; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143]; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164]; + entry.verified = row[165]; + entry.serialization = row[166]; + entry.source = row[167]; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169]; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183]; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185]; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191]; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198]; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205]; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212]; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220]; + entry.procname = row[221]; + entry.wornname = row[222]; + entry.focusname = row[223]; + entry.scrollname = row[224]; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243]; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258]; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Items items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(items_entry.minstatus)); + update_values.push_back(columns[2] + " = '" + EscapeString(items_entry.Name) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(items_entry.aagi)); + update_values.push_back(columns[4] + " = " + std::to_string(items_entry.ac)); + update_values.push_back(columns[5] + " = " + std::to_string(items_entry.accuracy)); + update_values.push_back(columns[6] + " = " + std::to_string(items_entry.acha)); + update_values.push_back(columns[7] + " = " + std::to_string(items_entry.adex)); + update_values.push_back(columns[8] + " = " + std::to_string(items_entry.aint)); + update_values.push_back(columns[9] + " = " + std::to_string(items_entry.artifactflag)); + update_values.push_back(columns[10] + " = " + std::to_string(items_entry.asta)); + update_values.push_back(columns[11] + " = " + std::to_string(items_entry.astr)); + update_values.push_back(columns[12] + " = " + std::to_string(items_entry.attack)); + update_values.push_back(columns[13] + " = " + std::to_string(items_entry.augrestrict)); + update_values.push_back(columns[14] + " = " + std::to_string(items_entry.augslot1type)); + update_values.push_back(columns[15] + " = " + std::to_string(items_entry.augslot1visible)); + update_values.push_back(columns[16] + " = " + std::to_string(items_entry.augslot2type)); + update_values.push_back(columns[17] + " = " + std::to_string(items_entry.augslot2visible)); + update_values.push_back(columns[18] + " = " + std::to_string(items_entry.augslot3type)); + update_values.push_back(columns[19] + " = " + std::to_string(items_entry.augslot3visible)); + update_values.push_back(columns[20] + " = " + std::to_string(items_entry.augslot4type)); + update_values.push_back(columns[21] + " = " + std::to_string(items_entry.augslot4visible)); + update_values.push_back(columns[22] + " = " + std::to_string(items_entry.augslot5type)); + update_values.push_back(columns[23] + " = " + std::to_string(items_entry.augslot5visible)); + update_values.push_back(columns[24] + " = " + std::to_string(items_entry.augslot6type)); + update_values.push_back(columns[25] + " = " + std::to_string(items_entry.augslot6visible)); + update_values.push_back(columns[26] + " = " + std::to_string(items_entry.augtype)); + update_values.push_back(columns[27] + " = " + std::to_string(items_entry.avoidance)); + update_values.push_back(columns[28] + " = " + std::to_string(items_entry.awis)); + update_values.push_back(columns[29] + " = " + std::to_string(items_entry.bagsize)); + update_values.push_back(columns[30] + " = " + std::to_string(items_entry.bagslots)); + update_values.push_back(columns[31] + " = " + std::to_string(items_entry.bagtype)); + update_values.push_back(columns[32] + " = " + std::to_string(items_entry.bagwr)); + update_values.push_back(columns[33] + " = " + std::to_string(items_entry.banedmgamt)); + update_values.push_back(columns[34] + " = " + std::to_string(items_entry.banedmgraceamt)); + update_values.push_back(columns[35] + " = " + std::to_string(items_entry.banedmgbody)); + update_values.push_back(columns[36] + " = " + std::to_string(items_entry.banedmgrace)); + update_values.push_back(columns[37] + " = " + std::to_string(items_entry.bardtype)); + update_values.push_back(columns[38] + " = " + std::to_string(items_entry.bardvalue)); + update_values.push_back(columns[39] + " = " + std::to_string(items_entry.book)); + update_values.push_back(columns[40] + " = " + std::to_string(items_entry.casttime)); + update_values.push_back(columns[41] + " = " + std::to_string(items_entry.casttime_)); + update_values.push_back(columns[42] + " = '" + EscapeString(items_entry.charmfile) + "'"); + update_values.push_back(columns[43] + " = '" + EscapeString(items_entry.charmfileid) + "'"); + update_values.push_back(columns[44] + " = " + std::to_string(items_entry.classes)); + update_values.push_back(columns[45] + " = " + std::to_string(items_entry.color)); + update_values.push_back(columns[46] + " = '" + EscapeString(items_entry.combateffects) + "'"); + update_values.push_back(columns[47] + " = " + std::to_string(items_entry.extradmgskill)); + update_values.push_back(columns[48] + " = " + std::to_string(items_entry.extradmgamt)); + update_values.push_back(columns[49] + " = " + std::to_string(items_entry.price)); + update_values.push_back(columns[50] + " = " + std::to_string(items_entry.cr)); + update_values.push_back(columns[51] + " = " + std::to_string(items_entry.damage)); + update_values.push_back(columns[52] + " = " + std::to_string(items_entry.damageshield)); + update_values.push_back(columns[53] + " = " + std::to_string(items_entry.deity)); + update_values.push_back(columns[54] + " = " + std::to_string(items_entry.delay)); + update_values.push_back(columns[55] + " = " + std::to_string(items_entry.augdistiller)); + update_values.push_back(columns[56] + " = " + std::to_string(items_entry.dotshielding)); + update_values.push_back(columns[57] + " = " + std::to_string(items_entry.dr)); + update_values.push_back(columns[58] + " = " + std::to_string(items_entry.clicktype)); + update_values.push_back(columns[59] + " = " + std::to_string(items_entry.clicklevel2)); + update_values.push_back(columns[60] + " = " + std::to_string(items_entry.elemdmgtype)); + update_values.push_back(columns[61] + " = " + std::to_string(items_entry.elemdmgamt)); + update_values.push_back(columns[62] + " = " + std::to_string(items_entry.endur)); + update_values.push_back(columns[63] + " = " + std::to_string(items_entry.factionamt1)); + update_values.push_back(columns[64] + " = " + std::to_string(items_entry.factionamt2)); + update_values.push_back(columns[65] + " = " + std::to_string(items_entry.factionamt3)); + update_values.push_back(columns[66] + " = " + std::to_string(items_entry.factionamt4)); + update_values.push_back(columns[67] + " = " + std::to_string(items_entry.factionmod1)); + update_values.push_back(columns[68] + " = " + std::to_string(items_entry.factionmod2)); + update_values.push_back(columns[69] + " = " + std::to_string(items_entry.factionmod3)); + update_values.push_back(columns[70] + " = " + std::to_string(items_entry.factionmod4)); + update_values.push_back(columns[71] + " = '" + EscapeString(items_entry.filename) + "'"); + update_values.push_back(columns[72] + " = " + std::to_string(items_entry.focuseffect)); + update_values.push_back(columns[73] + " = " + std::to_string(items_entry.fr)); + update_values.push_back(columns[74] + " = " + std::to_string(items_entry.fvnodrop)); + update_values.push_back(columns[75] + " = " + std::to_string(items_entry.haste)); + update_values.push_back(columns[76] + " = " + std::to_string(items_entry.clicklevel)); + update_values.push_back(columns[77] + " = " + std::to_string(items_entry.hp)); + update_values.push_back(columns[78] + " = " + std::to_string(items_entry.regen)); + update_values.push_back(columns[79] + " = " + std::to_string(items_entry.icon)); + update_values.push_back(columns[80] + " = '" + EscapeString(items_entry.idfile) + "'"); + update_values.push_back(columns[81] + " = " + std::to_string(items_entry.itemclass)); + update_values.push_back(columns[82] + " = " + std::to_string(items_entry.itemtype)); + update_values.push_back(columns[83] + " = " + std::to_string(items_entry.ldonprice)); + update_values.push_back(columns[84] + " = " + std::to_string(items_entry.ldontheme)); + update_values.push_back(columns[85] + " = " + std::to_string(items_entry.ldonsold)); + update_values.push_back(columns[86] + " = " + std::to_string(items_entry.light)); + update_values.push_back(columns[87] + " = '" + EscapeString(items_entry.lore) + "'"); + update_values.push_back(columns[88] + " = " + std::to_string(items_entry.loregroup)); + update_values.push_back(columns[89] + " = " + std::to_string(items_entry.magic)); + update_values.push_back(columns[90] + " = " + std::to_string(items_entry.mana)); + update_values.push_back(columns[91] + " = " + std::to_string(items_entry.manaregen)); + update_values.push_back(columns[92] + " = " + std::to_string(items_entry.enduranceregen)); + update_values.push_back(columns[93] + " = " + std::to_string(items_entry.material)); + update_values.push_back(columns[94] + " = " + std::to_string(items_entry.herosforgemodel)); + update_values.push_back(columns[95] + " = " + std::to_string(items_entry.maxcharges)); + update_values.push_back(columns[96] + " = " + std::to_string(items_entry.mr)); + update_values.push_back(columns[97] + " = " + std::to_string(items_entry.nodrop)); + update_values.push_back(columns[98] + " = " + std::to_string(items_entry.norent)); + update_values.push_back(columns[99] + " = " + std::to_string(items_entry.pendingloreflag)); + update_values.push_back(columns[100] + " = " + std::to_string(items_entry.pr)); + update_values.push_back(columns[101] + " = " + std::to_string(items_entry.procrate)); + update_values.push_back(columns[102] + " = " + std::to_string(items_entry.races)); + update_values.push_back(columns[103] + " = " + std::to_string(items_entry.range)); + update_values.push_back(columns[104] + " = " + std::to_string(items_entry.reclevel)); + update_values.push_back(columns[105] + " = " + std::to_string(items_entry.recskill)); + update_values.push_back(columns[106] + " = " + std::to_string(items_entry.reqlevel)); + update_values.push_back(columns[107] + " = '" + EscapeString(items_entry.sellrate) + "'"); + update_values.push_back(columns[108] + " = " + std::to_string(items_entry.shielding)); + update_values.push_back(columns[109] + " = " + std::to_string(items_entry.size)); + update_values.push_back(columns[110] + " = " + std::to_string(items_entry.skillmodtype)); + update_values.push_back(columns[111] + " = " + std::to_string(items_entry.skillmodvalue)); + update_values.push_back(columns[112] + " = " + std::to_string(items_entry.slots)); + update_values.push_back(columns[113] + " = " + std::to_string(items_entry.clickeffect)); + update_values.push_back(columns[114] + " = " + std::to_string(items_entry.spellshield)); + update_values.push_back(columns[115] + " = " + std::to_string(items_entry.strikethrough)); + update_values.push_back(columns[116] + " = " + std::to_string(items_entry.stunresist)); + update_values.push_back(columns[117] + " = " + std::to_string(items_entry.summonedflag)); + update_values.push_back(columns[118] + " = " + std::to_string(items_entry.tradeskills)); + update_values.push_back(columns[119] + " = " + std::to_string(items_entry.favor)); + update_values.push_back(columns[120] + " = " + std::to_string(items_entry.weight)); + update_values.push_back(columns[121] + " = " + std::to_string(items_entry.UNK012)); + update_values.push_back(columns[122] + " = " + std::to_string(items_entry.UNK013)); + update_values.push_back(columns[123] + " = " + std::to_string(items_entry.benefitflag)); + update_values.push_back(columns[124] + " = " + std::to_string(items_entry.UNK054)); + update_values.push_back(columns[125] + " = " + std::to_string(items_entry.UNK059)); + update_values.push_back(columns[126] + " = " + std::to_string(items_entry.booktype)); + update_values.push_back(columns[127] + " = " + std::to_string(items_entry.recastdelay)); + update_values.push_back(columns[128] + " = " + std::to_string(items_entry.recasttype)); + update_values.push_back(columns[129] + " = " + std::to_string(items_entry.guildfavor)); + update_values.push_back(columns[130] + " = " + std::to_string(items_entry.UNK123)); + update_values.push_back(columns[131] + " = " + std::to_string(items_entry.UNK124)); + update_values.push_back(columns[132] + " = " + std::to_string(items_entry.attuneable)); + update_values.push_back(columns[133] + " = " + std::to_string(items_entry.nopet)); + update_values.push_back(columns[134] + " = '" + EscapeString(items_entry.updated) + "'"); + update_values.push_back(columns[135] + " = '" + EscapeString(items_entry.comment) + "'"); + update_values.push_back(columns[136] + " = " + std::to_string(items_entry.UNK127)); + update_values.push_back(columns[137] + " = " + std::to_string(items_entry.pointtype)); + update_values.push_back(columns[138] + " = " + std::to_string(items_entry.potionbelt)); + update_values.push_back(columns[139] + " = " + std::to_string(items_entry.potionbeltslots)); + update_values.push_back(columns[140] + " = " + std::to_string(items_entry.stacksize)); + update_values.push_back(columns[141] + " = " + std::to_string(items_entry.notransfer)); + update_values.push_back(columns[142] + " = " + std::to_string(items_entry.stackable)); + update_values.push_back(columns[143] + " = '" + EscapeString(items_entry.UNK134) + "'"); + update_values.push_back(columns[144] + " = " + std::to_string(items_entry.UNK137)); + update_values.push_back(columns[145] + " = " + std::to_string(items_entry.proceffect)); + update_values.push_back(columns[146] + " = " + std::to_string(items_entry.proctype)); + update_values.push_back(columns[147] + " = " + std::to_string(items_entry.proclevel2)); + update_values.push_back(columns[148] + " = " + std::to_string(items_entry.proclevel)); + update_values.push_back(columns[149] + " = " + std::to_string(items_entry.UNK142)); + update_values.push_back(columns[150] + " = " + std::to_string(items_entry.worneffect)); + update_values.push_back(columns[151] + " = " + std::to_string(items_entry.worntype)); + update_values.push_back(columns[152] + " = " + std::to_string(items_entry.wornlevel2)); + update_values.push_back(columns[153] + " = " + std::to_string(items_entry.wornlevel)); + update_values.push_back(columns[154] + " = " + std::to_string(items_entry.UNK147)); + update_values.push_back(columns[155] + " = " + std::to_string(items_entry.focustype)); + update_values.push_back(columns[156] + " = " + std::to_string(items_entry.focuslevel2)); + update_values.push_back(columns[157] + " = " + std::to_string(items_entry.focuslevel)); + update_values.push_back(columns[158] + " = " + std::to_string(items_entry.UNK152)); + update_values.push_back(columns[159] + " = " + std::to_string(items_entry.scrolleffect)); + update_values.push_back(columns[160] + " = " + std::to_string(items_entry.scrolltype)); + update_values.push_back(columns[161] + " = " + std::to_string(items_entry.scrolllevel2)); + update_values.push_back(columns[162] + " = " + std::to_string(items_entry.scrolllevel)); + update_values.push_back(columns[163] + " = " + std::to_string(items_entry.UNK157)); + update_values.push_back(columns[164] + " = '" + EscapeString(items_entry.serialized) + "'"); + update_values.push_back(columns[165] + " = '" + EscapeString(items_entry.verified) + "'"); + update_values.push_back(columns[166] + " = '" + EscapeString(items_entry.serialization) + "'"); + update_values.push_back(columns[167] + " = '" + EscapeString(items_entry.source) + "'"); + update_values.push_back(columns[168] + " = " + std::to_string(items_entry.UNK033)); + update_values.push_back(columns[169] + " = '" + EscapeString(items_entry.lorefile) + "'"); + update_values.push_back(columns[170] + " = " + std::to_string(items_entry.UNK014)); + update_values.push_back(columns[171] + " = " + std::to_string(items_entry.svcorruption)); + update_values.push_back(columns[172] + " = " + std::to_string(items_entry.skillmodmax)); + update_values.push_back(columns[173] + " = " + std::to_string(items_entry.UNK060)); + update_values.push_back(columns[174] + " = " + std::to_string(items_entry.augslot1unk2)); + update_values.push_back(columns[175] + " = " + std::to_string(items_entry.augslot2unk2)); + update_values.push_back(columns[176] + " = " + std::to_string(items_entry.augslot3unk2)); + update_values.push_back(columns[177] + " = " + std::to_string(items_entry.augslot4unk2)); + update_values.push_back(columns[178] + " = " + std::to_string(items_entry.augslot5unk2)); + update_values.push_back(columns[179] + " = " + std::to_string(items_entry.augslot6unk2)); + update_values.push_back(columns[180] + " = " + std::to_string(items_entry.UNK120)); + update_values.push_back(columns[181] + " = " + std::to_string(items_entry.UNK121)); + update_values.push_back(columns[182] + " = " + std::to_string(items_entry.questitemflag)); + update_values.push_back(columns[183] + " = '" + EscapeString(items_entry.UNK132) + "'"); + update_values.push_back(columns[184] + " = " + std::to_string(items_entry.clickunk5)); + update_values.push_back(columns[185] + " = '" + EscapeString(items_entry.clickunk6) + "'"); + update_values.push_back(columns[186] + " = " + std::to_string(items_entry.clickunk7)); + update_values.push_back(columns[187] + " = " + std::to_string(items_entry.procunk1)); + update_values.push_back(columns[188] + " = " + std::to_string(items_entry.procunk2)); + update_values.push_back(columns[189] + " = " + std::to_string(items_entry.procunk3)); + update_values.push_back(columns[190] + " = " + std::to_string(items_entry.procunk4)); + update_values.push_back(columns[191] + " = '" + EscapeString(items_entry.procunk6) + "'"); + update_values.push_back(columns[192] + " = " + std::to_string(items_entry.procunk7)); + update_values.push_back(columns[193] + " = " + std::to_string(items_entry.wornunk1)); + update_values.push_back(columns[194] + " = " + std::to_string(items_entry.wornunk2)); + update_values.push_back(columns[195] + " = " + std::to_string(items_entry.wornunk3)); + update_values.push_back(columns[196] + " = " + std::to_string(items_entry.wornunk4)); + update_values.push_back(columns[197] + " = " + std::to_string(items_entry.wornunk5)); + update_values.push_back(columns[198] + " = '" + EscapeString(items_entry.wornunk6) + "'"); + update_values.push_back(columns[199] + " = " + std::to_string(items_entry.wornunk7)); + update_values.push_back(columns[200] + " = " + std::to_string(items_entry.focusunk1)); + update_values.push_back(columns[201] + " = " + std::to_string(items_entry.focusunk2)); + update_values.push_back(columns[202] + " = " + std::to_string(items_entry.focusunk3)); + update_values.push_back(columns[203] + " = " + std::to_string(items_entry.focusunk4)); + update_values.push_back(columns[204] + " = " + std::to_string(items_entry.focusunk5)); + update_values.push_back(columns[205] + " = '" + EscapeString(items_entry.focusunk6) + "'"); + update_values.push_back(columns[206] + " = " + std::to_string(items_entry.focusunk7)); + update_values.push_back(columns[207] + " = " + std::to_string(items_entry.scrollunk1)); + update_values.push_back(columns[208] + " = " + std::to_string(items_entry.scrollunk2)); + update_values.push_back(columns[209] + " = " + std::to_string(items_entry.scrollunk3)); + update_values.push_back(columns[210] + " = " + std::to_string(items_entry.scrollunk4)); + update_values.push_back(columns[211] + " = " + std::to_string(items_entry.scrollunk5)); + update_values.push_back(columns[212] + " = '" + EscapeString(items_entry.scrollunk6) + "'"); + update_values.push_back(columns[213] + " = " + std::to_string(items_entry.scrollunk7)); + update_values.push_back(columns[214] + " = " + std::to_string(items_entry.UNK193)); + update_values.push_back(columns[215] + " = " + std::to_string(items_entry.purity)); + update_values.push_back(columns[216] + " = " + std::to_string(items_entry.evoitem)); + update_values.push_back(columns[217] + " = " + std::to_string(items_entry.evoid)); + update_values.push_back(columns[218] + " = " + std::to_string(items_entry.evolvinglevel)); + update_values.push_back(columns[219] + " = " + std::to_string(items_entry.evomax)); + update_values.push_back(columns[220] + " = '" + EscapeString(items_entry.clickname) + "'"); + update_values.push_back(columns[221] + " = '" + EscapeString(items_entry.procname) + "'"); + update_values.push_back(columns[222] + " = '" + EscapeString(items_entry.wornname) + "'"); + update_values.push_back(columns[223] + " = '" + EscapeString(items_entry.focusname) + "'"); + update_values.push_back(columns[224] + " = '" + EscapeString(items_entry.scrollname) + "'"); + update_values.push_back(columns[225] + " = " + std::to_string(items_entry.dsmitigation)); + update_values.push_back(columns[226] + " = " + std::to_string(items_entry.heroic_str)); + update_values.push_back(columns[227] + " = " + std::to_string(items_entry.heroic_int)); + update_values.push_back(columns[228] + " = " + std::to_string(items_entry.heroic_wis)); + update_values.push_back(columns[229] + " = " + std::to_string(items_entry.heroic_agi)); + update_values.push_back(columns[230] + " = " + std::to_string(items_entry.heroic_dex)); + update_values.push_back(columns[231] + " = " + std::to_string(items_entry.heroic_sta)); + update_values.push_back(columns[232] + " = " + std::to_string(items_entry.heroic_cha)); + update_values.push_back(columns[233] + " = " + std::to_string(items_entry.heroic_pr)); + update_values.push_back(columns[234] + " = " + std::to_string(items_entry.heroic_dr)); + update_values.push_back(columns[235] + " = " + std::to_string(items_entry.heroic_fr)); + update_values.push_back(columns[236] + " = " + std::to_string(items_entry.heroic_cr)); + update_values.push_back(columns[237] + " = " + std::to_string(items_entry.heroic_mr)); + update_values.push_back(columns[238] + " = " + std::to_string(items_entry.heroic_svcorrup)); + update_values.push_back(columns[239] + " = " + std::to_string(items_entry.healamt)); + update_values.push_back(columns[240] + " = " + std::to_string(items_entry.spelldmg)); + update_values.push_back(columns[241] + " = " + std::to_string(items_entry.clairvoyance)); + update_values.push_back(columns[242] + " = " + std::to_string(items_entry.backstabdmg)); + update_values.push_back(columns[243] + " = '" + EscapeString(items_entry.created) + "'"); + update_values.push_back(columns[244] + " = " + std::to_string(items_entry.elitematerial)); + update_values.push_back(columns[245] + " = " + std::to_string(items_entry.ldonsellbackrate)); + update_values.push_back(columns[246] + " = " + std::to_string(items_entry.scriptfileid)); + update_values.push_back(columns[247] + " = " + std::to_string(items_entry.expendablearrow)); + update_values.push_back(columns[248] + " = " + std::to_string(items_entry.powersourcecapacity)); + update_values.push_back(columns[249] + " = " + std::to_string(items_entry.bardeffect)); + update_values.push_back(columns[250] + " = " + std::to_string(items_entry.bardeffecttype)); + update_values.push_back(columns[251] + " = " + std::to_string(items_entry.bardlevel2)); + update_values.push_back(columns[252] + " = " + std::to_string(items_entry.bardlevel)); + update_values.push_back(columns[253] + " = " + std::to_string(items_entry.bardunk1)); + update_values.push_back(columns[254] + " = " + std::to_string(items_entry.bardunk2)); + update_values.push_back(columns[255] + " = " + std::to_string(items_entry.bardunk3)); + update_values.push_back(columns[256] + " = " + std::to_string(items_entry.bardunk4)); + update_values.push_back(columns[257] + " = " + std::to_string(items_entry.bardunk5)); + update_values.push_back(columns[258] + " = '" + EscapeString(items_entry.bardname) + "'"); + update_values.push_back(columns[259] + " = " + std::to_string(items_entry.bardunk7)); + update_values.push_back(columns[260] + " = " + std::to_string(items_entry.UNK214)); + update_values.push_back(columns[261] + " = " + std::to_string(items_entry.UNK219)); + update_values.push_back(columns[262] + " = " + std::to_string(items_entry.UNK220)); + update_values.push_back(columns[263] + " = " + std::to_string(items_entry.UNK221)); + update_values.push_back(columns[264] + " = " + std::to_string(items_entry.heirloom)); + update_values.push_back(columns[265] + " = " + std::to_string(items_entry.UNK223)); + update_values.push_back(columns[266] + " = " + std::to_string(items_entry.UNK224)); + update_values.push_back(columns[267] + " = " + std::to_string(items_entry.UNK225)); + update_values.push_back(columns[268] + " = " + std::to_string(items_entry.UNK226)); + update_values.push_back(columns[269] + " = " + std::to_string(items_entry.UNK227)); + update_values.push_back(columns[270] + " = " + std::to_string(items_entry.UNK228)); + update_values.push_back(columns[271] + " = " + std::to_string(items_entry.UNK229)); + update_values.push_back(columns[272] + " = " + std::to_string(items_entry.UNK230)); + update_values.push_back(columns[273] + " = " + std::to_string(items_entry.UNK231)); + update_values.push_back(columns[274] + " = " + std::to_string(items_entry.UNK232)); + update_values.push_back(columns[275] + " = " + std::to_string(items_entry.UNK233)); + update_values.push_back(columns[276] + " = " + std::to_string(items_entry.UNK234)); + update_values.push_back(columns[277] + " = " + std::to_string(items_entry.placeable)); + update_values.push_back(columns[278] + " = " + std::to_string(items_entry.UNK236)); + update_values.push_back(columns[279] + " = " + std::to_string(items_entry.UNK237)); + update_values.push_back(columns[280] + " = " + std::to_string(items_entry.UNK238)); + update_values.push_back(columns[281] + " = " + std::to_string(items_entry.UNK239)); + update_values.push_back(columns[282] + " = " + std::to_string(items_entry.UNK240)); + update_values.push_back(columns[283] + " = " + std::to_string(items_entry.UNK241)); + update_values.push_back(columns[284] + " = " + std::to_string(items_entry.epicitem)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + items_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Items InsertOne( + Items items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(items_entry.minstatus)); + insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); + insert_values.push_back(std::to_string(items_entry.aagi)); + insert_values.push_back(std::to_string(items_entry.ac)); + insert_values.push_back(std::to_string(items_entry.accuracy)); + insert_values.push_back(std::to_string(items_entry.acha)); + insert_values.push_back(std::to_string(items_entry.adex)); + insert_values.push_back(std::to_string(items_entry.aint)); + insert_values.push_back(std::to_string(items_entry.artifactflag)); + insert_values.push_back(std::to_string(items_entry.asta)); + insert_values.push_back(std::to_string(items_entry.astr)); + insert_values.push_back(std::to_string(items_entry.attack)); + insert_values.push_back(std::to_string(items_entry.augrestrict)); + insert_values.push_back(std::to_string(items_entry.augslot1type)); + insert_values.push_back(std::to_string(items_entry.augslot1visible)); + insert_values.push_back(std::to_string(items_entry.augslot2type)); + insert_values.push_back(std::to_string(items_entry.augslot2visible)); + insert_values.push_back(std::to_string(items_entry.augslot3type)); + insert_values.push_back(std::to_string(items_entry.augslot3visible)); + insert_values.push_back(std::to_string(items_entry.augslot4type)); + insert_values.push_back(std::to_string(items_entry.augslot4visible)); + insert_values.push_back(std::to_string(items_entry.augslot5type)); + insert_values.push_back(std::to_string(items_entry.augslot5visible)); + insert_values.push_back(std::to_string(items_entry.augslot6type)); + insert_values.push_back(std::to_string(items_entry.augslot6visible)); + insert_values.push_back(std::to_string(items_entry.augtype)); + insert_values.push_back(std::to_string(items_entry.avoidance)); + insert_values.push_back(std::to_string(items_entry.awis)); + insert_values.push_back(std::to_string(items_entry.bagsize)); + insert_values.push_back(std::to_string(items_entry.bagslots)); + insert_values.push_back(std::to_string(items_entry.bagtype)); + insert_values.push_back(std::to_string(items_entry.bagwr)); + insert_values.push_back(std::to_string(items_entry.banedmgamt)); + insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); + insert_values.push_back(std::to_string(items_entry.banedmgbody)); + insert_values.push_back(std::to_string(items_entry.banedmgrace)); + insert_values.push_back(std::to_string(items_entry.bardtype)); + insert_values.push_back(std::to_string(items_entry.bardvalue)); + insert_values.push_back(std::to_string(items_entry.book)); + insert_values.push_back(std::to_string(items_entry.casttime)); + insert_values.push_back(std::to_string(items_entry.casttime_)); + insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); + insert_values.push_back(std::to_string(items_entry.classes)); + insert_values.push_back(std::to_string(items_entry.color)); + insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); + insert_values.push_back(std::to_string(items_entry.extradmgskill)); + insert_values.push_back(std::to_string(items_entry.extradmgamt)); + insert_values.push_back(std::to_string(items_entry.price)); + insert_values.push_back(std::to_string(items_entry.cr)); + insert_values.push_back(std::to_string(items_entry.damage)); + insert_values.push_back(std::to_string(items_entry.damageshield)); + insert_values.push_back(std::to_string(items_entry.deity)); + insert_values.push_back(std::to_string(items_entry.delay)); + insert_values.push_back(std::to_string(items_entry.augdistiller)); + insert_values.push_back(std::to_string(items_entry.dotshielding)); + insert_values.push_back(std::to_string(items_entry.dr)); + insert_values.push_back(std::to_string(items_entry.clicktype)); + insert_values.push_back(std::to_string(items_entry.clicklevel2)); + insert_values.push_back(std::to_string(items_entry.elemdmgtype)); + insert_values.push_back(std::to_string(items_entry.elemdmgamt)); + insert_values.push_back(std::to_string(items_entry.endur)); + insert_values.push_back(std::to_string(items_entry.factionamt1)); + insert_values.push_back(std::to_string(items_entry.factionamt2)); + insert_values.push_back(std::to_string(items_entry.factionamt3)); + insert_values.push_back(std::to_string(items_entry.factionamt4)); + insert_values.push_back(std::to_string(items_entry.factionmod1)); + insert_values.push_back(std::to_string(items_entry.factionmod2)); + insert_values.push_back(std::to_string(items_entry.factionmod3)); + insert_values.push_back(std::to_string(items_entry.factionmod4)); + insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); + insert_values.push_back(std::to_string(items_entry.focuseffect)); + insert_values.push_back(std::to_string(items_entry.fr)); + insert_values.push_back(std::to_string(items_entry.fvnodrop)); + insert_values.push_back(std::to_string(items_entry.haste)); + insert_values.push_back(std::to_string(items_entry.clicklevel)); + insert_values.push_back(std::to_string(items_entry.hp)); + insert_values.push_back(std::to_string(items_entry.regen)); + insert_values.push_back(std::to_string(items_entry.icon)); + insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); + insert_values.push_back(std::to_string(items_entry.itemclass)); + insert_values.push_back(std::to_string(items_entry.itemtype)); + insert_values.push_back(std::to_string(items_entry.ldonprice)); + insert_values.push_back(std::to_string(items_entry.ldontheme)); + insert_values.push_back(std::to_string(items_entry.ldonsold)); + insert_values.push_back(std::to_string(items_entry.light)); + insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); + insert_values.push_back(std::to_string(items_entry.loregroup)); + insert_values.push_back(std::to_string(items_entry.magic)); + insert_values.push_back(std::to_string(items_entry.mana)); + insert_values.push_back(std::to_string(items_entry.manaregen)); + insert_values.push_back(std::to_string(items_entry.enduranceregen)); + insert_values.push_back(std::to_string(items_entry.material)); + insert_values.push_back(std::to_string(items_entry.herosforgemodel)); + insert_values.push_back(std::to_string(items_entry.maxcharges)); + insert_values.push_back(std::to_string(items_entry.mr)); + insert_values.push_back(std::to_string(items_entry.nodrop)); + insert_values.push_back(std::to_string(items_entry.norent)); + insert_values.push_back(std::to_string(items_entry.pendingloreflag)); + insert_values.push_back(std::to_string(items_entry.pr)); + insert_values.push_back(std::to_string(items_entry.procrate)); + insert_values.push_back(std::to_string(items_entry.races)); + insert_values.push_back(std::to_string(items_entry.range)); + insert_values.push_back(std::to_string(items_entry.reclevel)); + insert_values.push_back(std::to_string(items_entry.recskill)); + insert_values.push_back(std::to_string(items_entry.reqlevel)); + insert_values.push_back("'" + EscapeString(items_entry.sellrate) + "'"); + insert_values.push_back(std::to_string(items_entry.shielding)); + insert_values.push_back(std::to_string(items_entry.size)); + insert_values.push_back(std::to_string(items_entry.skillmodtype)); + insert_values.push_back(std::to_string(items_entry.skillmodvalue)); + insert_values.push_back(std::to_string(items_entry.slots)); + insert_values.push_back(std::to_string(items_entry.clickeffect)); + insert_values.push_back(std::to_string(items_entry.spellshield)); + insert_values.push_back(std::to_string(items_entry.strikethrough)); + insert_values.push_back(std::to_string(items_entry.stunresist)); + insert_values.push_back(std::to_string(items_entry.summonedflag)); + insert_values.push_back(std::to_string(items_entry.tradeskills)); + insert_values.push_back(std::to_string(items_entry.favor)); + insert_values.push_back(std::to_string(items_entry.weight)); + insert_values.push_back(std::to_string(items_entry.UNK012)); + insert_values.push_back(std::to_string(items_entry.UNK013)); + insert_values.push_back(std::to_string(items_entry.benefitflag)); + insert_values.push_back(std::to_string(items_entry.UNK054)); + insert_values.push_back(std::to_string(items_entry.UNK059)); + insert_values.push_back(std::to_string(items_entry.booktype)); + insert_values.push_back(std::to_string(items_entry.recastdelay)); + insert_values.push_back(std::to_string(items_entry.recasttype)); + insert_values.push_back(std::to_string(items_entry.guildfavor)); + insert_values.push_back(std::to_string(items_entry.UNK123)); + insert_values.push_back(std::to_string(items_entry.UNK124)); + insert_values.push_back(std::to_string(items_entry.attuneable)); + insert_values.push_back(std::to_string(items_entry.nopet)); + insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK127)); + insert_values.push_back(std::to_string(items_entry.pointtype)); + insert_values.push_back(std::to_string(items_entry.potionbelt)); + insert_values.push_back(std::to_string(items_entry.potionbeltslots)); + insert_values.push_back(std::to_string(items_entry.stacksize)); + insert_values.push_back(std::to_string(items_entry.notransfer)); + insert_values.push_back(std::to_string(items_entry.stackable)); + insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK137)); + insert_values.push_back(std::to_string(items_entry.proceffect)); + insert_values.push_back(std::to_string(items_entry.proctype)); + insert_values.push_back(std::to_string(items_entry.proclevel2)); + insert_values.push_back(std::to_string(items_entry.proclevel)); + insert_values.push_back(std::to_string(items_entry.UNK142)); + insert_values.push_back(std::to_string(items_entry.worneffect)); + insert_values.push_back(std::to_string(items_entry.worntype)); + insert_values.push_back(std::to_string(items_entry.wornlevel2)); + insert_values.push_back(std::to_string(items_entry.wornlevel)); + insert_values.push_back(std::to_string(items_entry.UNK147)); + insert_values.push_back(std::to_string(items_entry.focustype)); + insert_values.push_back(std::to_string(items_entry.focuslevel2)); + insert_values.push_back(std::to_string(items_entry.focuslevel)); + insert_values.push_back(std::to_string(items_entry.UNK152)); + insert_values.push_back(std::to_string(items_entry.scrolleffect)); + insert_values.push_back(std::to_string(items_entry.scrolltype)); + insert_values.push_back(std::to_string(items_entry.scrolllevel2)); + insert_values.push_back(std::to_string(items_entry.scrolllevel)); + insert_values.push_back(std::to_string(items_entry.UNK157)); + insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK033)); + insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK014)); + insert_values.push_back(std::to_string(items_entry.svcorruption)); + insert_values.push_back(std::to_string(items_entry.skillmodmax)); + insert_values.push_back(std::to_string(items_entry.UNK060)); + insert_values.push_back(std::to_string(items_entry.augslot1unk2)); + insert_values.push_back(std::to_string(items_entry.augslot2unk2)); + insert_values.push_back(std::to_string(items_entry.augslot3unk2)); + insert_values.push_back(std::to_string(items_entry.augslot4unk2)); + insert_values.push_back(std::to_string(items_entry.augslot5unk2)); + insert_values.push_back(std::to_string(items_entry.augslot6unk2)); + insert_values.push_back(std::to_string(items_entry.UNK120)); + insert_values.push_back(std::to_string(items_entry.UNK121)); + insert_values.push_back(std::to_string(items_entry.questitemflag)); + insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk5)); + insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk7)); + insert_values.push_back(std::to_string(items_entry.procunk1)); + insert_values.push_back(std::to_string(items_entry.procunk2)); + insert_values.push_back(std::to_string(items_entry.procunk3)); + insert_values.push_back(std::to_string(items_entry.procunk4)); + insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.procunk7)); + insert_values.push_back(std::to_string(items_entry.wornunk1)); + insert_values.push_back(std::to_string(items_entry.wornunk2)); + insert_values.push_back(std::to_string(items_entry.wornunk3)); + insert_values.push_back(std::to_string(items_entry.wornunk4)); + insert_values.push_back(std::to_string(items_entry.wornunk5)); + insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.wornunk7)); + insert_values.push_back(std::to_string(items_entry.focusunk1)); + insert_values.push_back(std::to_string(items_entry.focusunk2)); + insert_values.push_back(std::to_string(items_entry.focusunk3)); + insert_values.push_back(std::to_string(items_entry.focusunk4)); + insert_values.push_back(std::to_string(items_entry.focusunk5)); + insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.focusunk7)); + insert_values.push_back(std::to_string(items_entry.scrollunk1)); + insert_values.push_back(std::to_string(items_entry.scrollunk2)); + insert_values.push_back(std::to_string(items_entry.scrollunk3)); + insert_values.push_back(std::to_string(items_entry.scrollunk4)); + insert_values.push_back(std::to_string(items_entry.scrollunk5)); + insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.scrollunk7)); + insert_values.push_back(std::to_string(items_entry.UNK193)); + insert_values.push_back(std::to_string(items_entry.purity)); + insert_values.push_back(std::to_string(items_entry.evoitem)); + insert_values.push_back(std::to_string(items_entry.evoid)); + insert_values.push_back(std::to_string(items_entry.evolvinglevel)); + insert_values.push_back(std::to_string(items_entry.evomax)); + insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); + insert_values.push_back(std::to_string(items_entry.dsmitigation)); + insert_values.push_back(std::to_string(items_entry.heroic_str)); + insert_values.push_back(std::to_string(items_entry.heroic_int)); + insert_values.push_back(std::to_string(items_entry.heroic_wis)); + insert_values.push_back(std::to_string(items_entry.heroic_agi)); + insert_values.push_back(std::to_string(items_entry.heroic_dex)); + insert_values.push_back(std::to_string(items_entry.heroic_sta)); + insert_values.push_back(std::to_string(items_entry.heroic_cha)); + insert_values.push_back(std::to_string(items_entry.heroic_pr)); + insert_values.push_back(std::to_string(items_entry.heroic_dr)); + insert_values.push_back(std::to_string(items_entry.heroic_fr)); + insert_values.push_back(std::to_string(items_entry.heroic_cr)); + insert_values.push_back(std::to_string(items_entry.heroic_mr)); + insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); + insert_values.push_back(std::to_string(items_entry.healamt)); + insert_values.push_back(std::to_string(items_entry.spelldmg)); + insert_values.push_back(std::to_string(items_entry.clairvoyance)); + insert_values.push_back(std::to_string(items_entry.backstabdmg)); + insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); + insert_values.push_back(std::to_string(items_entry.elitematerial)); + insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); + insert_values.push_back(std::to_string(items_entry.scriptfileid)); + insert_values.push_back(std::to_string(items_entry.expendablearrow)); + insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); + insert_values.push_back(std::to_string(items_entry.bardeffect)); + insert_values.push_back(std::to_string(items_entry.bardeffecttype)); + insert_values.push_back(std::to_string(items_entry.bardlevel2)); + insert_values.push_back(std::to_string(items_entry.bardlevel)); + insert_values.push_back(std::to_string(items_entry.bardunk1)); + insert_values.push_back(std::to_string(items_entry.bardunk2)); + insert_values.push_back(std::to_string(items_entry.bardunk3)); + insert_values.push_back(std::to_string(items_entry.bardunk4)); + insert_values.push_back(std::to_string(items_entry.bardunk5)); + insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); + insert_values.push_back(std::to_string(items_entry.bardunk7)); + insert_values.push_back(std::to_string(items_entry.UNK214)); + insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.UNK220)); + insert_values.push_back(std::to_string(items_entry.UNK221)); + insert_values.push_back(std::to_string(items_entry.heirloom)); + insert_values.push_back(std::to_string(items_entry.UNK223)); + insert_values.push_back(std::to_string(items_entry.UNK224)); + insert_values.push_back(std::to_string(items_entry.UNK225)); + insert_values.push_back(std::to_string(items_entry.UNK226)); + insert_values.push_back(std::to_string(items_entry.UNK227)); + insert_values.push_back(std::to_string(items_entry.UNK228)); + insert_values.push_back(std::to_string(items_entry.UNK229)); + insert_values.push_back(std::to_string(items_entry.UNK230)); + insert_values.push_back(std::to_string(items_entry.UNK231)); + insert_values.push_back(std::to_string(items_entry.UNK232)); + insert_values.push_back(std::to_string(items_entry.UNK233)); + insert_values.push_back(std::to_string(items_entry.UNK234)); + insert_values.push_back(std::to_string(items_entry.placeable)); + insert_values.push_back(std::to_string(items_entry.UNK236)); + insert_values.push_back(std::to_string(items_entry.UNK237)); + insert_values.push_back(std::to_string(items_entry.UNK238)); + insert_values.push_back(std::to_string(items_entry.UNK239)); + insert_values.push_back(std::to_string(items_entry.UNK240)); + insert_values.push_back(std::to_string(items_entry.UNK241)); + insert_values.push_back(std::to_string(items_entry.epicitem)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + items_entry.id = results.LastInsertedID(); + return items_entry; + } + + items_entry = InstanceListRepository::NewEntity(); + + return items_entry; + } + + static int InsertMany( + std::vector items_entries + ) + { + std::vector insert_chunks; + + for (auto &items_entry: items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(items_entry.minstatus)); + insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); + insert_values.push_back(std::to_string(items_entry.aagi)); + insert_values.push_back(std::to_string(items_entry.ac)); + insert_values.push_back(std::to_string(items_entry.accuracy)); + insert_values.push_back(std::to_string(items_entry.acha)); + insert_values.push_back(std::to_string(items_entry.adex)); + insert_values.push_back(std::to_string(items_entry.aint)); + insert_values.push_back(std::to_string(items_entry.artifactflag)); + insert_values.push_back(std::to_string(items_entry.asta)); + insert_values.push_back(std::to_string(items_entry.astr)); + insert_values.push_back(std::to_string(items_entry.attack)); + insert_values.push_back(std::to_string(items_entry.augrestrict)); + insert_values.push_back(std::to_string(items_entry.augslot1type)); + insert_values.push_back(std::to_string(items_entry.augslot1visible)); + insert_values.push_back(std::to_string(items_entry.augslot2type)); + insert_values.push_back(std::to_string(items_entry.augslot2visible)); + insert_values.push_back(std::to_string(items_entry.augslot3type)); + insert_values.push_back(std::to_string(items_entry.augslot3visible)); + insert_values.push_back(std::to_string(items_entry.augslot4type)); + insert_values.push_back(std::to_string(items_entry.augslot4visible)); + insert_values.push_back(std::to_string(items_entry.augslot5type)); + insert_values.push_back(std::to_string(items_entry.augslot5visible)); + insert_values.push_back(std::to_string(items_entry.augslot6type)); + insert_values.push_back(std::to_string(items_entry.augslot6visible)); + insert_values.push_back(std::to_string(items_entry.augtype)); + insert_values.push_back(std::to_string(items_entry.avoidance)); + insert_values.push_back(std::to_string(items_entry.awis)); + insert_values.push_back(std::to_string(items_entry.bagsize)); + insert_values.push_back(std::to_string(items_entry.bagslots)); + insert_values.push_back(std::to_string(items_entry.bagtype)); + insert_values.push_back(std::to_string(items_entry.bagwr)); + insert_values.push_back(std::to_string(items_entry.banedmgamt)); + insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); + insert_values.push_back(std::to_string(items_entry.banedmgbody)); + insert_values.push_back(std::to_string(items_entry.banedmgrace)); + insert_values.push_back(std::to_string(items_entry.bardtype)); + insert_values.push_back(std::to_string(items_entry.bardvalue)); + insert_values.push_back(std::to_string(items_entry.book)); + insert_values.push_back(std::to_string(items_entry.casttime)); + insert_values.push_back(std::to_string(items_entry.casttime_)); + insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); + insert_values.push_back(std::to_string(items_entry.classes)); + insert_values.push_back(std::to_string(items_entry.color)); + insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); + insert_values.push_back(std::to_string(items_entry.extradmgskill)); + insert_values.push_back(std::to_string(items_entry.extradmgamt)); + insert_values.push_back(std::to_string(items_entry.price)); + insert_values.push_back(std::to_string(items_entry.cr)); + insert_values.push_back(std::to_string(items_entry.damage)); + insert_values.push_back(std::to_string(items_entry.damageshield)); + insert_values.push_back(std::to_string(items_entry.deity)); + insert_values.push_back(std::to_string(items_entry.delay)); + insert_values.push_back(std::to_string(items_entry.augdistiller)); + insert_values.push_back(std::to_string(items_entry.dotshielding)); + insert_values.push_back(std::to_string(items_entry.dr)); + insert_values.push_back(std::to_string(items_entry.clicktype)); + insert_values.push_back(std::to_string(items_entry.clicklevel2)); + insert_values.push_back(std::to_string(items_entry.elemdmgtype)); + insert_values.push_back(std::to_string(items_entry.elemdmgamt)); + insert_values.push_back(std::to_string(items_entry.endur)); + insert_values.push_back(std::to_string(items_entry.factionamt1)); + insert_values.push_back(std::to_string(items_entry.factionamt2)); + insert_values.push_back(std::to_string(items_entry.factionamt3)); + insert_values.push_back(std::to_string(items_entry.factionamt4)); + insert_values.push_back(std::to_string(items_entry.factionmod1)); + insert_values.push_back(std::to_string(items_entry.factionmod2)); + insert_values.push_back(std::to_string(items_entry.factionmod3)); + insert_values.push_back(std::to_string(items_entry.factionmod4)); + insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); + insert_values.push_back(std::to_string(items_entry.focuseffect)); + insert_values.push_back(std::to_string(items_entry.fr)); + insert_values.push_back(std::to_string(items_entry.fvnodrop)); + insert_values.push_back(std::to_string(items_entry.haste)); + insert_values.push_back(std::to_string(items_entry.clicklevel)); + insert_values.push_back(std::to_string(items_entry.hp)); + insert_values.push_back(std::to_string(items_entry.regen)); + insert_values.push_back(std::to_string(items_entry.icon)); + insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); + insert_values.push_back(std::to_string(items_entry.itemclass)); + insert_values.push_back(std::to_string(items_entry.itemtype)); + insert_values.push_back(std::to_string(items_entry.ldonprice)); + insert_values.push_back(std::to_string(items_entry.ldontheme)); + insert_values.push_back(std::to_string(items_entry.ldonsold)); + insert_values.push_back(std::to_string(items_entry.light)); + insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); + insert_values.push_back(std::to_string(items_entry.loregroup)); + insert_values.push_back(std::to_string(items_entry.magic)); + insert_values.push_back(std::to_string(items_entry.mana)); + insert_values.push_back(std::to_string(items_entry.manaregen)); + insert_values.push_back(std::to_string(items_entry.enduranceregen)); + insert_values.push_back(std::to_string(items_entry.material)); + insert_values.push_back(std::to_string(items_entry.herosforgemodel)); + insert_values.push_back(std::to_string(items_entry.maxcharges)); + insert_values.push_back(std::to_string(items_entry.mr)); + insert_values.push_back(std::to_string(items_entry.nodrop)); + insert_values.push_back(std::to_string(items_entry.norent)); + insert_values.push_back(std::to_string(items_entry.pendingloreflag)); + insert_values.push_back(std::to_string(items_entry.pr)); + insert_values.push_back(std::to_string(items_entry.procrate)); + insert_values.push_back(std::to_string(items_entry.races)); + insert_values.push_back(std::to_string(items_entry.range)); + insert_values.push_back(std::to_string(items_entry.reclevel)); + insert_values.push_back(std::to_string(items_entry.recskill)); + insert_values.push_back(std::to_string(items_entry.reqlevel)); + insert_values.push_back("'" + EscapeString(items_entry.sellrate) + "'"); + insert_values.push_back(std::to_string(items_entry.shielding)); + insert_values.push_back(std::to_string(items_entry.size)); + insert_values.push_back(std::to_string(items_entry.skillmodtype)); + insert_values.push_back(std::to_string(items_entry.skillmodvalue)); + insert_values.push_back(std::to_string(items_entry.slots)); + insert_values.push_back(std::to_string(items_entry.clickeffect)); + insert_values.push_back(std::to_string(items_entry.spellshield)); + insert_values.push_back(std::to_string(items_entry.strikethrough)); + insert_values.push_back(std::to_string(items_entry.stunresist)); + insert_values.push_back(std::to_string(items_entry.summonedflag)); + insert_values.push_back(std::to_string(items_entry.tradeskills)); + insert_values.push_back(std::to_string(items_entry.favor)); + insert_values.push_back(std::to_string(items_entry.weight)); + insert_values.push_back(std::to_string(items_entry.UNK012)); + insert_values.push_back(std::to_string(items_entry.UNK013)); + insert_values.push_back(std::to_string(items_entry.benefitflag)); + insert_values.push_back(std::to_string(items_entry.UNK054)); + insert_values.push_back(std::to_string(items_entry.UNK059)); + insert_values.push_back(std::to_string(items_entry.booktype)); + insert_values.push_back(std::to_string(items_entry.recastdelay)); + insert_values.push_back(std::to_string(items_entry.recasttype)); + insert_values.push_back(std::to_string(items_entry.guildfavor)); + insert_values.push_back(std::to_string(items_entry.UNK123)); + insert_values.push_back(std::to_string(items_entry.UNK124)); + insert_values.push_back(std::to_string(items_entry.attuneable)); + insert_values.push_back(std::to_string(items_entry.nopet)); + insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK127)); + insert_values.push_back(std::to_string(items_entry.pointtype)); + insert_values.push_back(std::to_string(items_entry.potionbelt)); + insert_values.push_back(std::to_string(items_entry.potionbeltslots)); + insert_values.push_back(std::to_string(items_entry.stacksize)); + insert_values.push_back(std::to_string(items_entry.notransfer)); + insert_values.push_back(std::to_string(items_entry.stackable)); + insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK137)); + insert_values.push_back(std::to_string(items_entry.proceffect)); + insert_values.push_back(std::to_string(items_entry.proctype)); + insert_values.push_back(std::to_string(items_entry.proclevel2)); + insert_values.push_back(std::to_string(items_entry.proclevel)); + insert_values.push_back(std::to_string(items_entry.UNK142)); + insert_values.push_back(std::to_string(items_entry.worneffect)); + insert_values.push_back(std::to_string(items_entry.worntype)); + insert_values.push_back(std::to_string(items_entry.wornlevel2)); + insert_values.push_back(std::to_string(items_entry.wornlevel)); + insert_values.push_back(std::to_string(items_entry.UNK147)); + insert_values.push_back(std::to_string(items_entry.focustype)); + insert_values.push_back(std::to_string(items_entry.focuslevel2)); + insert_values.push_back(std::to_string(items_entry.focuslevel)); + insert_values.push_back(std::to_string(items_entry.UNK152)); + insert_values.push_back(std::to_string(items_entry.scrolleffect)); + insert_values.push_back(std::to_string(items_entry.scrolltype)); + insert_values.push_back(std::to_string(items_entry.scrolllevel2)); + insert_values.push_back(std::to_string(items_entry.scrolllevel)); + insert_values.push_back(std::to_string(items_entry.UNK157)); + insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK033)); + insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK014)); + insert_values.push_back(std::to_string(items_entry.svcorruption)); + insert_values.push_back(std::to_string(items_entry.skillmodmax)); + insert_values.push_back(std::to_string(items_entry.UNK060)); + insert_values.push_back(std::to_string(items_entry.augslot1unk2)); + insert_values.push_back(std::to_string(items_entry.augslot2unk2)); + insert_values.push_back(std::to_string(items_entry.augslot3unk2)); + insert_values.push_back(std::to_string(items_entry.augslot4unk2)); + insert_values.push_back(std::to_string(items_entry.augslot5unk2)); + insert_values.push_back(std::to_string(items_entry.augslot6unk2)); + insert_values.push_back(std::to_string(items_entry.UNK120)); + insert_values.push_back(std::to_string(items_entry.UNK121)); + insert_values.push_back(std::to_string(items_entry.questitemflag)); + insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk5)); + insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk7)); + insert_values.push_back(std::to_string(items_entry.procunk1)); + insert_values.push_back(std::to_string(items_entry.procunk2)); + insert_values.push_back(std::to_string(items_entry.procunk3)); + insert_values.push_back(std::to_string(items_entry.procunk4)); + insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.procunk7)); + insert_values.push_back(std::to_string(items_entry.wornunk1)); + insert_values.push_back(std::to_string(items_entry.wornunk2)); + insert_values.push_back(std::to_string(items_entry.wornunk3)); + insert_values.push_back(std::to_string(items_entry.wornunk4)); + insert_values.push_back(std::to_string(items_entry.wornunk5)); + insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.wornunk7)); + insert_values.push_back(std::to_string(items_entry.focusunk1)); + insert_values.push_back(std::to_string(items_entry.focusunk2)); + insert_values.push_back(std::to_string(items_entry.focusunk3)); + insert_values.push_back(std::to_string(items_entry.focusunk4)); + insert_values.push_back(std::to_string(items_entry.focusunk5)); + insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.focusunk7)); + insert_values.push_back(std::to_string(items_entry.scrollunk1)); + insert_values.push_back(std::to_string(items_entry.scrollunk2)); + insert_values.push_back(std::to_string(items_entry.scrollunk3)); + insert_values.push_back(std::to_string(items_entry.scrollunk4)); + insert_values.push_back(std::to_string(items_entry.scrollunk5)); + insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.scrollunk7)); + insert_values.push_back(std::to_string(items_entry.UNK193)); + insert_values.push_back(std::to_string(items_entry.purity)); + insert_values.push_back(std::to_string(items_entry.evoitem)); + insert_values.push_back(std::to_string(items_entry.evoid)); + insert_values.push_back(std::to_string(items_entry.evolvinglevel)); + insert_values.push_back(std::to_string(items_entry.evomax)); + insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); + insert_values.push_back(std::to_string(items_entry.dsmitigation)); + insert_values.push_back(std::to_string(items_entry.heroic_str)); + insert_values.push_back(std::to_string(items_entry.heroic_int)); + insert_values.push_back(std::to_string(items_entry.heroic_wis)); + insert_values.push_back(std::to_string(items_entry.heroic_agi)); + insert_values.push_back(std::to_string(items_entry.heroic_dex)); + insert_values.push_back(std::to_string(items_entry.heroic_sta)); + insert_values.push_back(std::to_string(items_entry.heroic_cha)); + insert_values.push_back(std::to_string(items_entry.heroic_pr)); + insert_values.push_back(std::to_string(items_entry.heroic_dr)); + insert_values.push_back(std::to_string(items_entry.heroic_fr)); + insert_values.push_back(std::to_string(items_entry.heroic_cr)); + insert_values.push_back(std::to_string(items_entry.heroic_mr)); + insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); + insert_values.push_back(std::to_string(items_entry.healamt)); + insert_values.push_back(std::to_string(items_entry.spelldmg)); + insert_values.push_back(std::to_string(items_entry.clairvoyance)); + insert_values.push_back(std::to_string(items_entry.backstabdmg)); + insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); + insert_values.push_back(std::to_string(items_entry.elitematerial)); + insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); + insert_values.push_back(std::to_string(items_entry.scriptfileid)); + insert_values.push_back(std::to_string(items_entry.expendablearrow)); + insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); + insert_values.push_back(std::to_string(items_entry.bardeffect)); + insert_values.push_back(std::to_string(items_entry.bardeffecttype)); + insert_values.push_back(std::to_string(items_entry.bardlevel2)); + insert_values.push_back(std::to_string(items_entry.bardlevel)); + insert_values.push_back(std::to_string(items_entry.bardunk1)); + insert_values.push_back(std::to_string(items_entry.bardunk2)); + insert_values.push_back(std::to_string(items_entry.bardunk3)); + insert_values.push_back(std::to_string(items_entry.bardunk4)); + insert_values.push_back(std::to_string(items_entry.bardunk5)); + insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); + insert_values.push_back(std::to_string(items_entry.bardunk7)); + insert_values.push_back(std::to_string(items_entry.UNK214)); + insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.UNK220)); + insert_values.push_back(std::to_string(items_entry.UNK221)); + insert_values.push_back(std::to_string(items_entry.heirloom)); + insert_values.push_back(std::to_string(items_entry.UNK223)); + insert_values.push_back(std::to_string(items_entry.UNK224)); + insert_values.push_back(std::to_string(items_entry.UNK225)); + insert_values.push_back(std::to_string(items_entry.UNK226)); + insert_values.push_back(std::to_string(items_entry.UNK227)); + insert_values.push_back(std::to_string(items_entry.UNK228)); + insert_values.push_back(std::to_string(items_entry.UNK229)); + insert_values.push_back(std::to_string(items_entry.UNK230)); + insert_values.push_back(std::to_string(items_entry.UNK231)); + insert_values.push_back(std::to_string(items_entry.UNK232)); + insert_values.push_back(std::to_string(items_entry.UNK233)); + insert_values.push_back(std::to_string(items_entry.UNK234)); + insert_values.push_back(std::to_string(items_entry.placeable)); + insert_values.push_back(std::to_string(items_entry.UNK236)); + insert_values.push_back(std::to_string(items_entry.UNK237)); + insert_values.push_back(std::to_string(items_entry.UNK238)); + insert_values.push_back(std::to_string(items_entry.UNK239)); + insert_values.push_back(std::to_string(items_entry.UNK240)); + insert_values.push_back(std::to_string(items_entry.UNK241)); + insert_values.push_back(std::to_string(items_entry.epicitem)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2]; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42]; + entry.charmfileid = row[43]; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46]; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71]; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80]; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87]; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134]; + entry.comment = row[135]; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143]; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164]; + entry.verified = row[165]; + entry.serialization = row[166]; + entry.source = row[167]; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169]; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183]; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185]; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191]; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198]; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205]; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212]; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220]; + entry.procname = row[221]; + entry.wornname = row[222]; + entry.focusname = row[223]; + entry.scrollname = row[224]; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243]; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258]; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ITEMS_REPOSITORY_H diff --git a/common/repositories/keyring_repository.h b/common/repositories/keyring_repository.h new file mode 100644 index 000000000..a6c874780 --- /dev/null +++ b/common/repositories/keyring_repository.h @@ -0,0 +1,261 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_KEYRING_REPOSITORY_H +#define EQEMU_KEYRING_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class KeyringRepository { +public: + struct Keyring { + int char_id; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "char_id", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("keyring"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Keyring NewEntity() + { + Keyring entry{}; + + entry.char_id = 0; + entry.item_id = 0; + + return entry; + } + + static Keyring GetKeyringEntry( + const std::vector &keyrings, + int keyring_id + ) + { + for (auto &keyring : keyrings) { + if (keyring.== keyring_id) { + return keyring; + } + } + + return NewEntity(); + } + + static Keyring FindOne( + int keyring_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + keyring_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Keyring entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int keyring_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + keyring_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Keyring keyring_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(keyring_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(keyring_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + keyring_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Keyring InsertOne( + Keyring keyring_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(keyring_entry.char_id)); + insert_values.push_back(std::to_string(keyring_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + keyring_entry.id = results.LastInsertedID(); + return keyring_entry; + } + + keyring_entry = InstanceListRepository::NewEntity(); + + return keyring_entry; + } + + static int InsertMany( + std::vector keyring_entries + ) + { + std::vector insert_chunks; + + for (auto &keyring_entry: keyring_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(keyring_entry.char_id)); + insert_values.push_back(std::to_string(keyring_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Keyring entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_KEYRING_REPOSITORY_H diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h new file mode 100644 index 000000000..aa82afbc9 --- /dev/null +++ b/common/repositories/launcher_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LAUNCHER_REPOSITORY_H +#define EQEMU_LAUNCHER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LauncherRepository { +public: + struct Launcher { + std::string name; + int8 dynamics; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "dynamics", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("launcher"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Launcher NewEntity() + { + Launcher entry{}; + + entry.name = ""; + entry.dynamics = 0; + + return entry; + } + + static Launcher GetLauncherEntry( + const std::vector &launchers, + int launcher_id + ) + { + for (auto &launcher : launchers) { + if (launcher.name == launcher_id) { + return launcher; + } + } + + return NewEntity(); + } + + static Launcher FindOne( + int launcher_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + launcher_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Launcher entry{}; + + entry.name = row[0]; + entry.dynamics = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int launcher_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + launcher_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Launcher launcher_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(launcher_entry.dynamics)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + launcher_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Launcher InsertOne( + Launcher launcher_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_entry.dynamics)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + launcher_entry.id = results.LastInsertedID(); + return launcher_entry; + } + + launcher_entry = InstanceListRepository::NewEntity(); + + return launcher_entry; + } + + static int InsertMany( + std::vector launcher_entries + ) + { + std::vector insert_chunks; + + for (auto &launcher_entry: launcher_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_entry.dynamics)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Launcher entry{}; + + entry.name = row[0]; + entry.dynamics = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LAUNCHER_REPOSITORY_H diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h new file mode 100644 index 000000000..a8af8fe50 --- /dev/null +++ b/common/repositories/launcher_zones_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LAUNCHER_ZONES_REPOSITORY_H +#define EQEMU_LAUNCHER_ZONES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LauncherZonesRepository { +public: + struct LauncherZones { + std::string launcher; + std::string zone; + int port; + }; + + static std::string PrimaryKey() + { + return std::string("zone"); + } + + static std::vector Columns() + { + return { + "launcher", + "zone", + "port", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("launcher_zones"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LauncherZones NewEntity() + { + LauncherZones entry{}; + + entry.launcher = ""; + entry.zone = ""; + entry.port = 0; + + return entry; + } + + static LauncherZones GetLauncherZonesEntry( + const std::vector &launcher_zoness, + int launcher_zones_id + ) + { + for (auto &launcher_zones : launcher_zoness) { + if (launcher_zones.zone == launcher_zones_id) { + return launcher_zones; + } + } + + return NewEntity(); + } + + static LauncherZones FindOne( + int launcher_zones_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + launcher_zones_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LauncherZones entry{}; + + entry.launcher = row[0]; + entry.zone = row[1]; + entry.port = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int launcher_zones_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + launcher_zones_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LauncherZones launcher_zones_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(launcher_zones_entry.port)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + launcher_zones_entry.zone + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LauncherZones InsertOne( + LauncherZones launcher_zones_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_zones_entry.port)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + launcher_zones_entry.id = results.LastInsertedID(); + return launcher_zones_entry; + } + + launcher_zones_entry = InstanceListRepository::NewEntity(); + + return launcher_zones_entry; + } + + static int InsertMany( + std::vector launcher_zones_entries + ) + { + std::vector insert_chunks; + + for (auto &launcher_zones_entry: launcher_zones_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_zones_entry.port)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LauncherZones entry{}; + + entry.launcher = row[0]; + entry.zone = row[1]; + entry.port = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LAUNCHER_ZONES_REPOSITORY_H diff --git a/common/repositories/ldon_trap_entries_repository.h b/common/repositories/ldon_trap_entries_repository.h new file mode 100644 index 000000000..c4912fe17 --- /dev/null +++ b/common/repositories/ldon_trap_entries_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LDON_TRAP_ENTRIES_REPOSITORY_H +#define EQEMU_LDON_TRAP_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LdonTrapEntriesRepository { +public: + struct LdonTrapEntries { + int id; + int trap_id; + }; + + static std::string PrimaryKey() + { + return std::string("trap_id"); + } + + static std::vector Columns() + { + return { + "id", + "trap_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ldon_trap_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LdonTrapEntries NewEntity() + { + LdonTrapEntries entry{}; + + entry.id = 0; + entry.trap_id = 0; + + return entry; + } + + static LdonTrapEntries GetLdonTrapEntriesEntry( + const std::vector &ldon_trap_entriess, + int ldon_trap_entries_id + ) + { + for (auto &ldon_trap_entries : ldon_trap_entriess) { + if (ldon_trap_entries.trap_id == ldon_trap_entries_id) { + return ldon_trap_entries; + } + } + + return NewEntity(); + } + + static LdonTrapEntries FindOne( + int ldon_trap_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ldon_trap_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ldon_trap_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ldon_trap_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LdonTrapEntries ldon_trap_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ldon_trap_entries_entry.trap_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LdonTrapEntries InsertOne( + LdonTrapEntries ldon_trap_entries_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ldon_trap_entries_entry.id = results.LastInsertedID(); + return ldon_trap_entries_entry; + } + + ldon_trap_entries_entry = InstanceListRepository::NewEntity(); + + return ldon_trap_entries_entry; + } + + static int InsertMany( + std::vector ldon_trap_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &ldon_trap_entries_entry: ldon_trap_entries_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LDON_TRAP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/ldon_trap_templates_repository.h b/common/repositories/ldon_trap_templates_repository.h new file mode 100644 index 000000000..8033fb684 --- /dev/null +++ b/common/repositories/ldon_trap_templates_repository.h @@ -0,0 +1,282 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LDON_TRAP_TEMPLATES_REPOSITORY_H +#define EQEMU_LDON_TRAP_TEMPLATES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LdonTrapTemplatesRepository { +public: + struct LdonTrapTemplates { + int id; + int8 type; + int16 spell_id; + int16 skill; + int8 locked; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "spell_id", + "skill", + "locked", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ldon_trap_templates"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LdonTrapTemplates NewEntity() + { + LdonTrapTemplates entry{}; + + entry.id = 0; + entry.type = 1; + entry.spell_id = 0; + entry.skill = 0; + entry.locked = 0; + + return entry; + } + + static LdonTrapTemplates GetLdonTrapTemplatesEntry( + const std::vector &ldon_trap_templatess, + int ldon_trap_templates_id + ) + { + for (auto &ldon_trap_templates : ldon_trap_templatess) { + if (ldon_trap_templates.id == ldon_trap_templates_id) { + return ldon_trap_templates; + } + } + + return NewEntity(); + } + + static LdonTrapTemplates FindOne( + int ldon_trap_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ldon_trap_templates_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ldon_trap_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ldon_trap_templates_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LdonTrapTemplates ldon_trap_templates_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(ldon_trap_templates_entry.type)); + update_values.push_back(columns[2] + " = " + std::to_string(ldon_trap_templates_entry.spell_id)); + update_values.push_back(columns[3] + " = " + std::to_string(ldon_trap_templates_entry.skill)); + update_values.push_back(columns[4] + " = " + std::to_string(ldon_trap_templates_entry.locked)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ldon_trap_templates_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LdonTrapTemplates InsertOne( + LdonTrapTemplates ldon_trap_templates_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ldon_trap_templates_entry.id = results.LastInsertedID(); + return ldon_trap_templates_entry; + } + + ldon_trap_templates_entry = InstanceListRepository::NewEntity(); + + return ldon_trap_templates_entry; + } + + static int InsertMany( + std::vector ldon_trap_templates_entries + ) + { + std::vector insert_chunks; + + for (auto &ldon_trap_templates_entry: ldon_trap_templates_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LDON_TRAP_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h new file mode 100644 index 000000000..1d2909116 --- /dev/null +++ b/common/repositories/level_exp_mods_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LEVEL_EXP_MODS_REPOSITORY_H +#define EQEMU_LEVEL_EXP_MODS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LevelExpModsRepository { +public: + struct LevelExpMods { + int level; + std::string exp_mod; + std::string aa_exp_mod; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "level", + "exp_mod", + "aa_exp_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("level_exp_mods"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LevelExpMods NewEntity() + { + LevelExpMods entry{}; + + entry.level = 0; + entry.exp_mod = 0; + entry.aa_exp_mod = 0; + + return entry; + } + + static LevelExpMods GetLevelExpModsEntry( + const std::vector &level_exp_modss, + int level_exp_mods_id + ) + { + for (auto &level_exp_mods : level_exp_modss) { + if (level_exp_mods.level == level_exp_mods_id) { + return level_exp_mods; + } + } + + return NewEntity(); + } + + static LevelExpMods FindOne( + int level_exp_mods_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + level_exp_mods_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int level_exp_mods_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + level_exp_mods_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LevelExpMods level_exp_mods_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + level_exp_mods_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LevelExpMods InsertOne( + LevelExpMods level_exp_mods_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); + insert_values.push_back("'" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + level_exp_mods_entry.id = results.LastInsertedID(); + return level_exp_mods_entry; + } + + level_exp_mods_entry = InstanceListRepository::NewEntity(); + + return level_exp_mods_entry; + } + + static int InsertMany( + std::vector level_exp_mods_entries + ) + { + std::vector insert_chunks; + + for (auto &level_exp_mods_entry: level_exp_mods_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); + insert_values.push_back("'" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LEVEL_EXP_MODS_REPOSITORY_H diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h new file mode 100644 index 000000000..c95968ace --- /dev/null +++ b/common/repositories/lfguild_repository.h @@ -0,0 +1,311 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LFGUILD_REPOSITORY_H +#define EQEMU_LFGUILD_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LfguildRepository { +public: + struct Lfguild { + int8 type; + std::string name; + std::string comment; + int8 fromlevel; + int8 tolevel; + int classes; + int aacount; + int timezone; + int timeposted; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "type", + "name", + "comment", + "fromlevel", + "tolevel", + "classes", + "aacount", + "timezone", + "timeposted", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lfguild"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Lfguild NewEntity() + { + Lfguild entry{}; + + entry.type = 0; + entry.name = 0; + entry.comment = 0; + entry.fromlevel = 0; + entry.tolevel = 0; + entry.classes = 0; + entry.aacount = 0; + entry.timezone = 0; + entry.timeposted = 0; + + return entry; + } + + static Lfguild GetLfguildEntry( + const std::vector &lfguilds, + int lfguild_id + ) + { + for (auto &lfguild : lfguilds) { + if (lfguild.name == lfguild_id) { + return lfguild; + } + } + + return NewEntity(); + } + + static Lfguild FindOne( + int lfguild_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lfguild_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1]; + entry.comment = row[2]; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lfguild_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lfguild_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Lfguild lfguild_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(lfguild_entry.comment) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(lfguild_entry.fromlevel)); + update_values.push_back(columns[4] + " = " + std::to_string(lfguild_entry.tolevel)); + update_values.push_back(columns[5] + " = " + std::to_string(lfguild_entry.classes)); + update_values.push_back(columns[6] + " = " + std::to_string(lfguild_entry.aacount)); + update_values.push_back(columns[7] + " = " + std::to_string(lfguild_entry.timezone)); + update_values.push_back(columns[8] + " = " + std::to_string(lfguild_entry.timeposted)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lfguild_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Lfguild InsertOne( + Lfguild lfguild_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); + insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); + insert_values.push_back(std::to_string(lfguild_entry.tolevel)); + insert_values.push_back(std::to_string(lfguild_entry.classes)); + insert_values.push_back(std::to_string(lfguild_entry.aacount)); + insert_values.push_back(std::to_string(lfguild_entry.timezone)); + insert_values.push_back(std::to_string(lfguild_entry.timeposted)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lfguild_entry.id = results.LastInsertedID(); + return lfguild_entry; + } + + lfguild_entry = InstanceListRepository::NewEntity(); + + return lfguild_entry; + } + + static int InsertMany( + std::vector lfguild_entries + ) + { + std::vector insert_chunks; + + for (auto &lfguild_entry: lfguild_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); + insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); + insert_values.push_back(std::to_string(lfguild_entry.tolevel)); + insert_values.push_back(std::to_string(lfguild_entry.classes)); + insert_values.push_back(std::to_string(lfguild_entry.aacount)); + insert_values.push_back(std::to_string(lfguild_entry.timezone)); + insert_values.push_back(std::to_string(lfguild_entry.timeposted)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1]; + entry.comment = row[2]; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LFGUILD_REPOSITORY_H diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h new file mode 100644 index 000000000..9a9d8beca --- /dev/null +++ b/common/repositories/login_accounts_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGIN_ACCOUNTS_REPOSITORY_H +#define EQEMU_LOGIN_ACCOUNTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoginAccountsRepository { +public: + struct LoginAccounts { + int id; + std::string account_name; + std::string account_password; + std::string account_email; + std::string source_loginserver; + std::string last_ip_address; + std::string last_login_date; + std::string created_at; + std::string updated_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_name", + "account_password", + "account_email", + "source_loginserver", + "last_ip_address", + "last_login_date", + "created_at", + "updated_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_accounts"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginAccounts NewEntity() + { + LoginAccounts entry{}; + + entry.id = 0; + entry.account_name = 0; + entry.account_password = 0; + entry.account_email = 0; + entry.source_loginserver = 0; + entry.last_ip_address = 0; + entry.last_login_date = 0; + entry.created_at = 0; + entry.updated_at = current_timestamp(); + + return entry; + } + + static LoginAccounts GetLoginAccountsEntry( + const std::vector &login_accountss, + int login_accounts_id + ) + { + for (auto &login_accounts : login_accountss) { + if (login_accounts.id == login_accounts_id) { + return login_accounts; + } + } + + return NewEntity(); + } + + static LoginAccounts FindOne( + int login_accounts_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_accounts_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.account_email = row[3]; + entry.source_loginserver = row[4]; + entry.last_ip_address = row[5]; + entry.last_login_date = row[6]; + entry.created_at = row[7]; + entry.updated_at = row[8]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_accounts_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_accounts_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginAccounts login_accounts_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_accounts_entry.account_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_accounts_entry.account_password) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_accounts_entry.account_email) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_accounts_entry.last_login_date) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(login_accounts_entry.created_at) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(login_accounts_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_accounts_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginAccounts InsertOne( + LoginAccounts login_accounts_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_accounts_entry.id = results.LastInsertedID(); + return login_accounts_entry; + } + + login_accounts_entry = InstanceListRepository::NewEntity(); + + return login_accounts_entry; + } + + static int InsertMany( + std::vector login_accounts_entries + ) + { + std::vector insert_chunks; + + for (auto &login_accounts_entry: login_accounts_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.account_email = row[3]; + entry.source_loginserver = row[4]; + entry.last_ip_address = row[5]; + entry.last_login_date = row[6]; + entry.created_at = row[7]; + entry.updated_at = row[8]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGIN_ACCOUNTS_REPOSITORY_H diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h new file mode 100644 index 000000000..bbcf29770 --- /dev/null +++ b/common/repositories/login_api_tokens_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGIN_API_TOKENS_REPOSITORY_H +#define EQEMU_LOGIN_API_TOKENS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoginApiTokensRepository { +public: + struct LoginApiTokens { + int id; + std::string token; + int can_write; + int can_read; + std::string created_at; + std::string updated_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "token", + "can_write", + "can_read", + "created_at", + "updated_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_api_tokens"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginApiTokens NewEntity() + { + LoginApiTokens entry{}; + + entry.id = 0; + entry.token = 0; + entry.can_write = 0; + entry.can_read = 0; + entry.created_at = 0; + entry.updated_at = current_timestamp(); + + return entry; + } + + static LoginApiTokens GetLoginApiTokensEntry( + const std::vector &login_api_tokenss, + int login_api_tokens_id + ) + { + for (auto &login_api_tokens : login_api_tokenss) { + if (login_api_tokens.id == login_api_tokens_id) { + return login_api_tokens; + } + } + + return NewEntity(); + } + + static LoginApiTokens FindOne( + int login_api_tokens_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_api_tokens_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1]; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4]; + entry.updated_at = row[5]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_api_tokens_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_api_tokens_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginApiTokens login_api_tokens_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_api_tokens_entry.token) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(login_api_tokens_entry.can_write)); + update_values.push_back(columns[3] + " = " + std::to_string(login_api_tokens_entry.can_read)); + update_values.push_back(columns[4] + " = '" + EscapeString(login_api_tokens_entry.created_at) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_api_tokens_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginApiTokens InsertOne( + LoginApiTokens login_api_tokens_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_api_tokens_entry.id = results.LastInsertedID(); + return login_api_tokens_entry; + } + + login_api_tokens_entry = InstanceListRepository::NewEntity(); + + return login_api_tokens_entry; + } + + static int InsertMany( + std::vector login_api_tokens_entries + ) + { + std::vector insert_chunks; + + for (auto &login_api_tokens_entry: login_api_tokens_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1]; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4]; + entry.updated_at = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGIN_API_TOKENS_REPOSITORY_H diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h new file mode 100644 index 000000000..efb260a4a --- /dev/null +++ b/common/repositories/login_server_admins_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGIN_SERVER_ADMINS_REPOSITORY_H +#define EQEMU_LOGIN_SERVER_ADMINS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoginServerAdminsRepository { +public: + struct LoginServerAdmins { + int id; + std::string account_name; + std::string account_password; + std::string first_name; + std::string last_name; + std::string email; + std::string registration_date; + std::string registration_ip_address; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_name", + "account_password", + "first_name", + "last_name", + "email", + "registration_date", + "registration_ip_address", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_server_admins"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginServerAdmins NewEntity() + { + LoginServerAdmins entry{}; + + entry.id = 0; + entry.account_name = 0; + entry.account_password = 0; + entry.first_name = 0; + entry.last_name = 0; + entry.email = 0; + entry.registration_date = 0; + entry.registration_ip_address = 0; + + return entry; + } + + static LoginServerAdmins GetLoginServerAdminsEntry( + const std::vector &login_server_adminss, + int login_server_admins_id + ) + { + for (auto &login_server_admins : login_server_adminss) { + if (login_server_admins.id == login_server_admins_id) { + return login_server_admins; + } + } + + return NewEntity(); + } + + static LoginServerAdmins FindOne( + int login_server_admins_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_server_admins_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.first_name = row[3]; + entry.last_name = row[4]; + entry.email = row[5]; + entry.registration_date = row[6]; + entry.registration_ip_address = row[7]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_server_admins_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_server_admins_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginServerAdmins login_server_admins_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_server_admins_entry.account_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_server_admins_entry.account_password) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_server_admins_entry.first_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(login_server_admins_entry.last_name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_server_admins_entry.email) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_server_admins_entry.registration_date) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_server_admins_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginServerAdmins InsertOne( + LoginServerAdmins login_server_admins_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_server_admins_entry.id = results.LastInsertedID(); + return login_server_admins_entry; + } + + login_server_admins_entry = InstanceListRepository::NewEntity(); + + return login_server_admins_entry; + } + + static int InsertMany( + std::vector login_server_admins_entries + ) + { + std::vector insert_chunks; + + for (auto &login_server_admins_entry: login_server_admins_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.first_name = row[3]; + entry.last_name = row[4]; + entry.email = row[5]; + entry.registration_date = row[6]; + entry.registration_ip_address = row[7]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGIN_SERVER_ADMINS_REPOSITORY_H diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h new file mode 100644 index 000000000..c99e05729 --- /dev/null +++ b/common/repositories/login_server_list_types_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H +#define EQEMU_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoginServerListTypesRepository { +public: + struct LoginServerListTypes { + int id; + std::string description; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "description", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_server_list_types"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginServerListTypes NewEntity() + { + LoginServerListTypes entry{}; + + entry.id = 0; + entry.description = 0; + + return entry; + } + + static LoginServerListTypes GetLoginServerListTypesEntry( + const std::vector &login_server_list_typess, + int login_server_list_types_id + ) + { + for (auto &login_server_list_types : login_server_list_typess) { + if (login_server_list_types.id == login_server_list_types_id) { + return login_server_list_types; + } + } + + return NewEntity(); + } + + static LoginServerListTypes FindOne( + int login_server_list_types_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_server_list_types_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_server_list_types_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_server_list_types_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginServerListTypes login_server_list_types_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_server_list_types_entry.description) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_server_list_types_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginServerListTypes InsertOne( + LoginServerListTypes login_server_list_types_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_server_list_types_entry.id = results.LastInsertedID(); + return login_server_list_types_entry; + } + + login_server_list_types_entry = InstanceListRepository::NewEntity(); + + return login_server_list_types_entry; + } + + static int InsertMany( + std::vector login_server_list_types_entries + ) + { + std::vector insert_chunks; + + for (auto &login_server_list_types_entry: login_server_list_types_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h new file mode 100644 index 000000000..519de2457 --- /dev/null +++ b/common/repositories/login_world_servers_repository.h @@ -0,0 +1,323 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGIN_WORLD_SERVERS_REPOSITORY_H +#define EQEMU_LOGIN_WORLD_SERVERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoginWorldServersRepository { +public: + struct LoginWorldServers { + int id; + std::string long_name; + std::string short_name; + std::string tag_description; + int login_server_list_type_id; + std::string last_login_date; + std::string last_ip_address; + int login_server_admin_id; + int is_server_trusted; + std::string note; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "long_name", + "short_name", + "tag_description", + "login_server_list_type_id", + "last_login_date", + "last_ip_address", + "login_server_admin_id", + "is_server_trusted", + "note", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_world_servers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginWorldServers NewEntity() + { + LoginWorldServers entry{}; + + entry.id = 0; + entry.long_name = 0; + entry.short_name = 0; + entry.tag_description = ""; + entry.login_server_list_type_id = 0; + entry.last_login_date = 0; + entry.last_ip_address = 0; + entry.login_server_admin_id = 0; + entry.is_server_trusted = 0; + entry.note = 0; + + return entry; + } + + static LoginWorldServers GetLoginWorldServersEntry( + const std::vector &login_world_serverss, + int login_world_servers_id + ) + { + for (auto &login_world_servers : login_world_serverss) { + if (login_world_servers.id == login_world_servers_id) { + return login_world_servers; + } + } + + return NewEntity(); + } + + static LoginWorldServers FindOne( + int login_world_servers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_world_servers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1]; + entry.short_name = row[2]; + entry.tag_description = row[3]; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5]; + entry.last_ip_address = row[6]; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_world_servers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_world_servers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginWorldServers login_world_servers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_world_servers_entry.long_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_world_servers_entry.short_name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_world_servers_entry.tag_description) + "'"); + update_values.push_back( + columns[4] + " = " + std::to_string(login_world_servers_entry.login_server_list_type_id)); + update_values.push_back(columns[5] + " = '" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(login_world_servers_entry.login_server_admin_id)); + update_values.push_back(columns[8] + " = " + std::to_string(login_world_servers_entry.is_server_trusted)); + update_values.push_back(columns[9] + " = '" + EscapeString(login_world_servers_entry.note) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_world_servers_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginWorldServers InsertOne( + LoginWorldServers login_world_servers_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); + insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_world_servers_entry.id = results.LastInsertedID(); + return login_world_servers_entry; + } + + login_world_servers_entry = InstanceListRepository::NewEntity(); + + return login_world_servers_entry; + } + + static int InsertMany( + std::vector login_world_servers_entries + ) + { + std::vector insert_chunks; + + for (auto &login_world_servers_entry: login_world_servers_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); + insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1]; + entry.short_name = row[2]; + entry.tag_description = row[3]; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5]; + entry.last_ip_address = row[6]; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGIN_WORLD_SERVERS_REPOSITORY_H diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h new file mode 100644 index 000000000..fae65efb7 --- /dev/null +++ b/common/repositories/logsys_categories_repository.h @@ -0,0 +1,282 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOGSYS_CATEGORIES_REPOSITORY_H +#define EQEMU_LOGSYS_CATEGORIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LogsysCategoriesRepository { +public: + struct LogsysCategories { + int log_category_id; + std::string log_category_description; + int16 log_to_console; + int16 log_to_file; + int16 log_to_gmsay; + }; + + static std::string PrimaryKey() + { + return std::string("log_category_id"); + } + + static std::vector Columns() + { + return { + "log_category_id", + "log_category_description", + "log_to_console", + "log_to_file", + "log_to_gmsay", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("logsys_categories"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LogsysCategories NewEntity() + { + LogsysCategories entry{}; + + entry.log_category_id = 0; + entry.log_category_description = 0; + entry.log_to_console = 0; + entry.log_to_file = 0; + entry.log_to_gmsay = 0; + + return entry; + } + + static LogsysCategories GetLogsysCategoriesEntry( + const std::vector &logsys_categoriess, + int logsys_categories_id + ) + { + for (auto &logsys_categories : logsys_categoriess) { + if (logsys_categories.log_category_id == logsys_categories_id) { + return logsys_categories; + } + } + + return NewEntity(); + } + + static LogsysCategories FindOne( + int logsys_categories_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + logsys_categories_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1]; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int logsys_categories_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + logsys_categories_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LogsysCategories logsys_categories_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(logsys_categories_entry.log_to_console)); + update_values.push_back(columns[3] + " = " + std::to_string(logsys_categories_entry.log_to_file)); + update_values.push_back(columns[4] + " = " + std::to_string(logsys_categories_entry.log_to_gmsay)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + logsys_categories_entry.log_category_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LogsysCategories InsertOne( + LogsysCategories logsys_categories_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + logsys_categories_entry.id = results.LastInsertedID(); + return logsys_categories_entry; + } + + logsys_categories_entry = InstanceListRepository::NewEntity(); + + return logsys_categories_entry; + } + + static int InsertMany( + std::vector logsys_categories_entries + ) + { + std::vector insert_chunks; + + for (auto &logsys_categories_entry: logsys_categories_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1]; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOGSYS_CATEGORIES_REPOSITORY_H diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h new file mode 100644 index 000000000..e77777374 --- /dev/null +++ b/common/repositories/lootdrop_entries_repository.h @@ -0,0 +1,311 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOOTDROP_ENTRIES_REPOSITORY_H +#define EQEMU_LOOTDROP_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LootdropEntriesRepository { +public: + struct LootdropEntries { + int lootdrop_id; + int item_id; + int16 item_charges; + int8 equip_item; + std::string chance; + std::string disabled_chance; + int8 minlevel; + int8 maxlevel; + int8 multiplier; + }; + + static std::string PrimaryKey() + { + return std::string("item_id"); + } + + static std::vector Columns() + { + return { + "lootdrop_id", + "item_id", + "item_charges", + "equip_item", + "chance", + "disabled_chance", + "minlevel", + "maxlevel", + "multiplier", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lootdrop_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LootdropEntries NewEntity() + { + LootdropEntries entry{}; + + entry.lootdrop_id = 0; + entry.item_id = 0; + entry.item_charges = 1; + entry.equip_item = 0; + entry.chance = 1; + entry.disabled_chance = 0; + entry.minlevel = 0; + entry.maxlevel = 127; + entry.multiplier = 1; + + return entry; + } + + static LootdropEntries GetLootdropEntriesEntry( + const std::vector &lootdrop_entriess, + int lootdrop_entries_id + ) + { + for (auto &lootdrop_entries : lootdrop_entriess) { + if (lootdrop_entries.item_id == lootdrop_entries_id) { + return lootdrop_entries; + } + } + + return NewEntity(); + } + + static LootdropEntries FindOne( + int lootdrop_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lootdrop_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lootdrop_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lootdrop_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LootdropEntries lootdrop_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entries_entry.item_charges)); + update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); + update_values.push_back(columns[4] + " = '" + EscapeString(lootdrop_entries_entry.chance) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.minlevel)); + update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.maxlevel)); + update_values.push_back(columns[8] + " = " + std::to_string(lootdrop_entries_entry.multiplier)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lootdrop_entries_entry.item_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LootdropEntries InsertOne( + LootdropEntries lootdrop_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); + insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.chance) + "'"); + insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lootdrop_entries_entry.id = results.LastInsertedID(); + return lootdrop_entries_entry; + } + + lootdrop_entries_entry = InstanceListRepository::NewEntity(); + + return lootdrop_entries_entry; + } + + static int InsertMany( + std::vector lootdrop_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &lootdrop_entries_entry: lootdrop_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); + insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.chance) + "'"); + insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOOTDROP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h new file mode 100644 index 000000000..fd165c019 --- /dev/null +++ b/common/repositories/lootdrop_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOOTDROP_REPOSITORY_H +#define EQEMU_LOOTDROP_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LootdropRepository { +public: + struct Lootdrop { + int id; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lootdrop"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Lootdrop NewEntity() + { + Lootdrop entry{}; + + entry.id = 0; + entry.name = ""; + + return entry; + } + + static Lootdrop GetLootdropEntry( + const std::vector &lootdrops, + int lootdrop_id + ) + { + for (auto &lootdrop : lootdrops) { + if (lootdrop.id == lootdrop_id) { + return lootdrop; + } + } + + return NewEntity(); + } + + static Lootdrop FindOne( + int lootdrop_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lootdrop_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lootdrop_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lootdrop_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Lootdrop lootdrop_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(lootdrop_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lootdrop_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Lootdrop InsertOne( + Lootdrop lootdrop_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lootdrop_entry.id = results.LastInsertedID(); + return lootdrop_entry; + } + + lootdrop_entry = InstanceListRepository::NewEntity(); + + return lootdrop_entry; + } + + static int InsertMany( + std::vector lootdrop_entries + ) + { + std::vector insert_chunks; + + for (auto &lootdrop_entry: lootdrop_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOOTDROP_REPOSITORY_H diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h new file mode 100644 index 000000000..941bda720 --- /dev/null +++ b/common/repositories/loottable_entries_repository.h @@ -0,0 +1,287 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOOTTABLE_ENTRIES_REPOSITORY_H +#define EQEMU_LOOTTABLE_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoottableEntriesRepository { +public: + struct LoottableEntries { + int loottable_id; + int lootdrop_id; + int8 multiplier; + int8 droplimit; + int8 mindrop; + std::string probability; + }; + + static std::string PrimaryKey() + { + return std::string("lootdrop_id"); + } + + static std::vector Columns() + { + return { + "loottable_id", + "lootdrop_id", + "multiplier", + "droplimit", + "mindrop", + "probability", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("loottable_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoottableEntries NewEntity() + { + LoottableEntries entry{}; + + entry.loottable_id = 0; + entry.lootdrop_id = 0; + entry.multiplier = 1; + entry.droplimit = 0; + entry.mindrop = 0; + entry.probability = 100; + + return entry; + } + + static LoottableEntries GetLoottableEntriesEntry( + const std::vector &loottable_entriess, + int loottable_entries_id + ) + { + for (auto &loottable_entries : loottable_entriess) { + if (loottable_entries.lootdrop_id == loottable_entries_id) { + return loottable_entries; + } + } + + return NewEntity(); + } + + static LoottableEntries FindOne( + int loottable_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + loottable_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int loottable_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + loottable_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoottableEntries loottable_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(loottable_entries_entry.multiplier)); + update_values.push_back(columns[3] + " = " + std::to_string(loottable_entries_entry.droplimit)); + update_values.push_back(columns[4] + " = " + std::to_string(loottable_entries_entry.mindrop)); + update_values.push_back(columns[5] + " = '" + EscapeString(loottable_entries_entry.probability) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + loottable_entries_entry.lootdrop_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoottableEntries InsertOne( + LoottableEntries loottable_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); + insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); + insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); + insert_values.push_back("'" + EscapeString(loottable_entries_entry.probability) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + loottable_entries_entry.id = results.LastInsertedID(); + return loottable_entries_entry; + } + + loottable_entries_entry = InstanceListRepository::NewEntity(); + + return loottable_entries_entry; + } + + static int InsertMany( + std::vector loottable_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &loottable_entries_entry: loottable_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); + insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); + insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); + insert_values.push_back("'" + EscapeString(loottable_entries_entry.probability) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOOTTABLE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h new file mode 100644 index 000000000..31fc0ab99 --- /dev/null +++ b/common/repositories/loottable_repository.h @@ -0,0 +1,290 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_LOOTTABLE_REPOSITORY_H +#define EQEMU_LOOTTABLE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class LoottableRepository { +public: + struct Loottable { + int id; + std::string name; + int mincash; + int maxcash; + int avgcoin; + int8 done; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "mincash", + "maxcash", + "avgcoin", + "done", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("loottable"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Loottable NewEntity() + { + Loottable entry{}; + + entry.id = 0; + entry.name = ""; + entry.mincash = 0; + entry.maxcash = 0; + entry.avgcoin = 0; + entry.done = 0; + + return entry; + } + + static Loottable GetLoottableEntry( + const std::vector &loottables, + int loottable_id + ) + { + for (auto &loottable : loottables) { + if (loottable.id == loottable_id) { + return loottable; + } + } + + return NewEntity(); + } + + static Loottable FindOne( + int loottable_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + loottable_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int loottable_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + loottable_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Loottable loottable_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(loottable_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(loottable_entry.mincash)); + update_values.push_back(columns[3] + " = " + std::to_string(loottable_entry.maxcash)); + update_values.push_back(columns[4] + " = " + std::to_string(loottable_entry.avgcoin)); + update_values.push_back(columns[5] + " = " + std::to_string(loottable_entry.done)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + loottable_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Loottable InsertOne( + Loottable loottable_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); + insert_values.push_back(std::to_string(loottable_entry.mincash)); + insert_values.push_back(std::to_string(loottable_entry.maxcash)); + insert_values.push_back(std::to_string(loottable_entry.avgcoin)); + insert_values.push_back(std::to_string(loottable_entry.done)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + loottable_entry.id = results.LastInsertedID(); + return loottable_entry; + } + + loottable_entry = InstanceListRepository::NewEntity(); + + return loottable_entry; + } + + static int InsertMany( + std::vector loottable_entries + ) + { + std::vector insert_chunks; + + for (auto &loottable_entry: loottable_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); + insert_values.push_back(std::to_string(loottable_entry.mincash)); + insert_values.push_back(std::to_string(loottable_entry.maxcash)); + insert_values.push_back(std::to_string(loottable_entry.avgcoin)); + insert_values.push_back(std::to_string(loottable_entry.done)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_LOOTTABLE_REPOSITORY_H diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h new file mode 100644 index 000000000..c1e87ca7f --- /dev/null +++ b/common/repositories/mail_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_MAIL_REPOSITORY_H +#define EQEMU_MAIL_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class MailRepository { +public: + struct Mail { + int msgid; + int charid; + int timestamp; + std::string from; + std::string subject; + std::string body; + std::string to; + int8 status; + }; + + static std::string PrimaryKey() + { + return std::string("msgid"); + } + + static std::vector Columns() + { + return { + "msgid", + "charid", + "timestamp", + "from", + "subject", + "body", + "to", + "status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("mail"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Mail NewEntity() + { + Mail entry{}; + + entry.msgid = 0; + entry.charid = 0; + entry.timestamp = 0; + entry.from = ""; + entry.subject = ""; + entry.body = 0; + entry.to = 0; + entry.status = 0; + + return entry; + } + + static Mail GetMailEntry( + const std::vector &mails, + int mail_id + ) + { + for (auto &mail : mails) { + if (mail.msgid == mail_id) { + return mail; + } + } + + return NewEntity(); + } + + static Mail FindOne( + int mail_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + mail_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3]; + entry.subject = row[4]; + entry.body = row[5]; + entry.to = row[6]; + entry.status = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int mail_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + mail_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Mail mail_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(mail_entry.charid)); + update_values.push_back(columns[2] + " = " + std::to_string(mail_entry.timestamp)); + update_values.push_back(columns[3] + " = '" + EscapeString(mail_entry.from) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(mail_entry.subject) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(mail_entry.body) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(mail_entry.to) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(mail_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + mail_entry.msgid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Mail InsertOne( + Mail mail_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(mail_entry.charid)); + insert_values.push_back(std::to_string(mail_entry.timestamp)); + insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); + insert_values.push_back(std::to_string(mail_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + mail_entry.id = results.LastInsertedID(); + return mail_entry; + } + + mail_entry = InstanceListRepository::NewEntity(); + + return mail_entry; + } + + static int InsertMany( + std::vector mail_entries + ) + { + std::vector insert_chunks; + + for (auto &mail_entry: mail_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(mail_entry.charid)); + insert_values.push_back(std::to_string(mail_entry.timestamp)); + insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); + insert_values.push_back(std::to_string(mail_entry.status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3]; + entry.subject = row[4]; + entry.body = row[5]; + entry.to = row[6]; + entry.status = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_MAIL_REPOSITORY_H diff --git a/common/repositories/merchantlist_repository.h b/common/repositories/merchantlist_repository.h new file mode 100644 index 000000000..a0600e926 --- /dev/null +++ b/common/repositories/merchantlist_repository.h @@ -0,0 +1,303 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_MERCHANTLIST_REPOSITORY_H +#define EQEMU_MERCHANTLIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class MerchantlistRepository { +public: + struct Merchantlist { + int merchantid; + int slot; + int item; + int16 faction_required; + int8 level_required; + int16 alt_currency_cost; + int classes_required; + int probability; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "merchantid", + "slot", + "item", + "faction_required", + "level_required", + "alt_currency_cost", + "classes_required", + "probability", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("merchantlist"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Merchantlist NewEntity() + { + Merchantlist entry{}; + + entry.merchantid = 0; + entry.slot = 0; + entry.item = 0; + entry.faction_required = -100; + entry.level_required = 0; + entry.alt_currency_cost = 0; + entry.classes_required = 65535; + entry.probability = 100; + + return entry; + } + + static Merchantlist GetMerchantlistEntry( + const std::vector &merchantlists, + int merchantlist_id + ) + { + for (auto &merchantlist : merchantlists) { + if (merchantlist.slot == merchantlist_id) { + return merchantlist; + } + } + + return NewEntity(); + } + + static Merchantlist FindOne( + int merchantlist_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + merchantlist_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int merchantlist_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + merchantlist_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Merchantlist merchantlist_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_entry.item)); + update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_entry.faction_required)); + update_values.push_back(columns[4] + " = " + std::to_string(merchantlist_entry.level_required)); + update_values.push_back(columns[5] + " = " + std::to_string(merchantlist_entry.alt_currency_cost)); + update_values.push_back(columns[6] + " = " + std::to_string(merchantlist_entry.classes_required)); + update_values.push_back(columns[7] + " = " + std::to_string(merchantlist_entry.probability)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + merchantlist_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Merchantlist InsertOne( + Merchantlist merchantlist_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_entry.item)); + insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); + insert_values.push_back(std::to_string(merchantlist_entry.level_required)); + insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); + insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); + insert_values.push_back(std::to_string(merchantlist_entry.probability)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + merchantlist_entry.id = results.LastInsertedID(); + return merchantlist_entry; + } + + merchantlist_entry = InstanceListRepository::NewEntity(); + + return merchantlist_entry; + } + + static int InsertMany( + std::vector merchantlist_entries + ) + { + std::vector insert_chunks; + + for (auto &merchantlist_entry: merchantlist_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_entry.item)); + insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); + insert_values.push_back(std::to_string(merchantlist_entry.level_required)); + insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); + insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); + insert_values.push_back(std::to_string(merchantlist_entry.probability)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_MERCHANTLIST_REPOSITORY_H diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h new file mode 100644 index 000000000..fc6820318 --- /dev/null +++ b/common/repositories/merchantlist_temp_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_MERCHANTLIST_TEMP_REPOSITORY_H +#define EQEMU_MERCHANTLIST_TEMP_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class MerchantlistTempRepository { +public: + struct MerchantlistTemp { + int npcid; + int8 slot; + int itemid; + int charges; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "npcid", + "slot", + "itemid", + "charges", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("merchantlist_temp"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static MerchantlistTemp NewEntity() + { + MerchantlistTemp entry{}; + + entry.npcid = 0; + entry.slot = 0; + entry.itemid = 0; + entry.charges = 1; + + return entry; + } + + static MerchantlistTemp GetMerchantlistTempEntry( + const std::vector &merchantlist_temps, + int merchantlist_temp_id + ) + { + for (auto &merchantlist_temp : merchantlist_temps) { + if (merchantlist_temp.slot == merchantlist_temp_id) { + return merchantlist_temp; + } + } + + return NewEntity(); + } + + static MerchantlistTemp FindOne( + int merchantlist_temp_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + merchantlist_temp_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int merchantlist_temp_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + merchantlist_temp_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + MerchantlistTemp merchantlist_temp_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_temp_entry.itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_temp_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + merchantlist_temp_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static MerchantlistTemp InsertOne( + MerchantlistTemp merchantlist_temp_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + merchantlist_temp_entry.id = results.LastInsertedID(); + return merchantlist_temp_entry; + } + + merchantlist_temp_entry = InstanceListRepository::NewEntity(); + + return merchantlist_temp_entry; + } + + static int InsertMany( + std::vector merchantlist_temp_entries + ) + { + std::vector insert_chunks; + + for (auto &merchantlist_temp_entry: merchantlist_temp_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_MERCHANTLIST_TEMP_REPOSITORY_H diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h new file mode 100644 index 000000000..35bb2db62 --- /dev/null +++ b/common/repositories/name_filter_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NAME_FILTER_REPOSITORY_H +#define EQEMU_NAME_FILTER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NameFilterRepository { +public: + struct NameFilter { + int id; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("name_filter"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NameFilter NewEntity() + { + NameFilter entry{}; + + entry.id = 0; + entry.name = ""; + + return entry; + } + + static NameFilter GetNameFilterEntry( + const std::vector &name_filters, + int name_filter_id + ) + { + for (auto &name_filter : name_filters) { + if (name_filter.id == name_filter_id) { + return name_filter; + } + } + + return NewEntity(); + } + + static NameFilter FindOne( + int name_filter_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + name_filter_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int name_filter_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + name_filter_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NameFilter name_filter_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(name_filter_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + name_filter_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NameFilter InsertOne( + NameFilter name_filter_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + name_filter_entry.id = results.LastInsertedID(); + return name_filter_entry; + } + + name_filter_entry = InstanceListRepository::NewEntity(); + + return name_filter_entry; + } + + static int InsertMany( + std::vector name_filter_entries + ) + { + std::vector insert_chunks; + + for (auto &name_filter_entry: name_filter_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NAME_FILTER_REPOSITORY_H diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h new file mode 100644 index 000000000..780e7e973 --- /dev/null +++ b/common/repositories/npc_emotes_repository.h @@ -0,0 +1,282 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_EMOTES_REPOSITORY_H +#define EQEMU_NPC_EMOTES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcEmotesRepository { +public: + struct NpcEmotes { + int id; + int emoteid; + int8 event_; + int8 type; + std::string text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "emoteid", + "event_", + "type", + "text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_emotes"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcEmotes NewEntity() + { + NpcEmotes entry{}; + + entry.id = 0; + entry.emoteid = 0; + entry.event_ = 0; + entry.type = 0; + entry.text = 0; + + return entry; + } + + static NpcEmotes GetNpcEmotesEntry( + const std::vector &npc_emotess, + int npc_emotes_id + ) + { + for (auto &npc_emotes : npc_emotess) { + if (npc_emotes.id == npc_emotes_id) { + return npc_emotes; + } + } + + return NewEntity(); + } + + static NpcEmotes FindOne( + int npc_emotes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_emotes_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_emotes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_emotes_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcEmotes npc_emotes_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_emotes_entry.emoteid)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_emotes_entry.event_)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_emotes_entry.type)); + update_values.push_back(columns[4] + " = '" + EscapeString(npc_emotes_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_emotes_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcEmotes InsertOne( + NpcEmotes npc_emotes_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); + insert_values.push_back(std::to_string(npc_emotes_entry.event_)); + insert_values.push_back(std::to_string(npc_emotes_entry.type)); + insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_emotes_entry.id = results.LastInsertedID(); + return npc_emotes_entry; + } + + npc_emotes_entry = InstanceListRepository::NewEntity(); + + return npc_emotes_entry; + } + + static int InsertMany( + std::vector npc_emotes_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_emotes_entry: npc_emotes_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); + insert_values.push_back(std::to_string(npc_emotes_entry.event_)); + insert_values.push_back(std::to_string(npc_emotes_entry.type)); + insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_EMOTES_REPOSITORY_H diff --git a/common/repositories/npc_faction_entries_repository.h b/common/repositories/npc_faction_entries_repository.h new file mode 100644 index 000000000..633444b7c --- /dev/null +++ b/common/repositories/npc_faction_entries_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_FACTION_ENTRIES_REPOSITORY_H +#define EQEMU_NPC_FACTION_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcFactionEntriesRepository { +public: + struct NpcFactionEntries { + int npc_faction_id; + int faction_id; + int value; + int8 npc_value; + int8 temp; + }; + + static std::string PrimaryKey() + { + return std::string("faction_id"); + } + + static std::vector Columns() + { + return { + "npc_faction_id", + "faction_id", + "value", + "npc_value", + "temp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_faction_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcFactionEntries NewEntity() + { + NpcFactionEntries entry{}; + + entry.npc_faction_id = 0; + entry.faction_id = 0; + entry.value = 0; + entry.npc_value = 0; + entry.temp = 0; + + return entry; + } + + static NpcFactionEntries GetNpcFactionEntriesEntry( + const std::vector &npc_faction_entriess, + int npc_faction_entries_id + ) + { + for (auto &npc_faction_entries : npc_faction_entriess) { + if (npc_faction_entries.faction_id == npc_faction_entries_id) { + return npc_faction_entries; + } + } + + return NewEntity(); + } + + static NpcFactionEntries FindOne( + int npc_faction_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_faction_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_faction_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_faction_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcFactionEntries npc_faction_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entries_entry.value)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entries_entry.npc_value)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_faction_entries_entry.temp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_faction_entries_entry.faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcFactionEntries InsertOne( + NpcFactionEntries npc_faction_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_faction_entries_entry.id = results.LastInsertedID(); + return npc_faction_entries_entry; + } + + npc_faction_entries_entry = InstanceListRepository::NewEntity(); + + return npc_faction_entries_entry; + } + + static int InsertMany( + std::vector npc_faction_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_faction_entries_entry: npc_faction_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_FACTION_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h new file mode 100644 index 000000000..4f6ccf315 --- /dev/null +++ b/common/repositories/npc_faction_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_FACTION_REPOSITORY_H +#define EQEMU_NPC_FACTION_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcFactionRepository { +public: + struct NpcFaction { + int id; + std::string name; + int primaryfaction; + int8 ignore_primary_assist; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "primaryfaction", + "ignore_primary_assist", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_faction"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcFaction NewEntity() + { + NpcFaction entry{}; + + entry.id = 0; + entry.name = 0; + entry.primaryfaction = 0; + entry.ignore_primary_assist = 0; + + return entry; + } + + static NpcFaction GetNpcFactionEntry( + const std::vector &npc_factions, + int npc_faction_id + ) + { + for (auto &npc_faction : npc_factions) { + if (npc_faction.id == npc_faction_id) { + return npc_faction; + } + } + + return NewEntity(); + } + + static NpcFaction FindOne( + int npc_faction_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_faction_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_faction_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcFaction npc_faction_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_faction_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entry.primaryfaction)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entry.ignore_primary_assist)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_faction_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcFaction InsertOne( + NpcFaction npc_faction_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); + insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_faction_entry.id = results.LastInsertedID(); + return npc_faction_entry; + } + + npc_faction_entry = InstanceListRepository::NewEntity(); + + return npc_faction_entry; + } + + static int InsertMany( + std::vector npc_faction_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_faction_entry: npc_faction_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); + insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_FACTION_REPOSITORY_H diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h new file mode 100644 index 000000000..1a4595a8f --- /dev/null +++ b/common/repositories/npc_scale_global_base_repository.h @@ -0,0 +1,463 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H +#define EQEMU_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcScaleGlobalBaseRepository { +public: + struct NpcScaleGlobalBase { + int type; + int level; + int ac; + int hp; + int accuracy; + int slow_mitigation; + int attack; + int strength; + int stamina; + int dexterity; + int agility; + int intelligence; + int wisdom; + int charisma; + int magic_resist; + int cold_resist; + int fire_resist; + int poison_resist; + int disease_resist; + int corruption_resist; + int physical_resist; + int min_dmg; + int max_dmg; + int hp_regen_rate; + int attack_delay; + int spell_scale; + int heal_scale; + std::string special_abilities; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "type", + "level", + "ac", + "hp", + "accuracy", + "slow_mitigation", + "attack", + "strength", + "stamina", + "dexterity", + "agility", + "intelligence", + "wisdom", + "charisma", + "magic_resist", + "cold_resist", + "fire_resist", + "poison_resist", + "disease_resist", + "corruption_resist", + "physical_resist", + "min_dmg", + "max_dmg", + "hp_regen_rate", + "attack_delay", + "spell_scale", + "heal_scale", + "special_abilities", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_scale_global_base"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcScaleGlobalBase NewEntity() + { + NpcScaleGlobalBase entry{}; + + entry.type = 0; + entry.level = 0; + entry.ac = 0; + entry.hp = 0; + entry.accuracy = 0; + entry.slow_mitigation = 0; + entry.attack = 0; + entry.strength = 0; + entry.stamina = 0; + entry.dexterity = 0; + entry.agility = 0; + entry.intelligence = 0; + entry.wisdom = 0; + entry.charisma = 0; + entry.magic_resist = 0; + entry.cold_resist = 0; + entry.fire_resist = 0; + entry.poison_resist = 0; + entry.disease_resist = 0; + entry.corruption_resist = 0; + entry.physical_resist = 0; + entry.min_dmg = 0; + entry.max_dmg = 0; + entry.hp_regen_rate = 0; + entry.attack_delay = 0; + entry.spell_scale = 100; + entry.heal_scale = 100; + entry.special_abilities = 0; + + return entry; + } + + static NpcScaleGlobalBase GetNpcScaleGlobalBaseEntry( + const std::vector &npc_scale_global_bases, + int npc_scale_global_base_id + ) + { + for (auto &npc_scale_global_base : npc_scale_global_bases) { + if (npc_scale_global_base.level == npc_scale_global_base_id) { + return npc_scale_global_base; + } + } + + return NewEntity(); + } + + static NpcScaleGlobalBase FindOne( + int npc_scale_global_base_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_scale_global_base_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_scale_global_base_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_scale_global_base_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcScaleGlobalBase npc_scale_global_base_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(npc_scale_global_base_entry.ac)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_scale_global_base_entry.hp)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_scale_global_base_entry.accuracy)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_scale_global_base_entry.slow_mitigation)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_scale_global_base_entry.attack)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_scale_global_base_entry.strength)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_scale_global_base_entry.stamina)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_scale_global_base_entry.dexterity)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_scale_global_base_entry.agility)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_scale_global_base_entry.intelligence)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_scale_global_base_entry.wisdom)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_scale_global_base_entry.charisma)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_scale_global_base_entry.magic_resist)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_scale_global_base_entry.cold_resist)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_scale_global_base_entry.fire_resist)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_scale_global_base_entry.poison_resist)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_scale_global_base_entry.disease_resist)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_scale_global_base_entry.corruption_resist)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_scale_global_base_entry.physical_resist)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_scale_global_base_entry.min_dmg)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_scale_global_base_entry.max_dmg)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_scale_global_base_entry.attack_delay)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_scale_global_base_entry.spell_scale)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_scale_global_base_entry.heal_scale)); + update_values.push_back(columns[27] + " = '" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_scale_global_base_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcScaleGlobalBase InsertOne( + NpcScaleGlobalBase npc_scale_global_base_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); + insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_scale_global_base_entry.id = results.LastInsertedID(); + return npc_scale_global_base_entry; + } + + npc_scale_global_base_entry = InstanceListRepository::NewEntity(); + + return npc_scale_global_base_entry; + } + + static int InsertMany( + std::vector npc_scale_global_base_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_scale_global_base_entry: npc_scale_global_base_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); + insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H diff --git a/common/repositories/npc_spells_effects_entries_repository.h b/common/repositories/npc_spells_effects_entries_repository.h new file mode 100644 index 000000000..c02265f57 --- /dev/null +++ b/common/repositories/npc_spells_effects_entries_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H +#define EQEMU_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcSpellsEffectsEntriesRepository { +public: + struct NpcSpellsEffectsEntries { + int id; + int npc_spells_effects_id; + int16 spell_effect_id; + int8 minlevel; + int8 maxlevel; + int se_base; + int se_limit; + int se_max; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "npc_spells_effects_id", + "spell_effect_id", + "minlevel", + "maxlevel", + "se_base", + "se_limit", + "se_max", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_effects_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEffectsEntries NewEntity() + { + NpcSpellsEffectsEntries entry{}; + + entry.id = 0; + entry.npc_spells_effects_id = 0; + entry.spell_effect_id = 0; + entry.minlevel = 0; + entry.maxlevel = 255; + entry.se_base = 0; + entry.se_limit = 0; + entry.se_max = 0; + + return entry; + } + + static NpcSpellsEffectsEntries GetNpcSpellsEffectsEntriesEntry( + const std::vector &npc_spells_effects_entriess, + int npc_spells_effects_entries_id + ) + { + for (auto &npc_spells_effects_entries : npc_spells_effects_entriess) { + if (npc_spells_effects_entries.id == npc_spells_effects_entries_id) { + return npc_spells_effects_entries; + } + } + + return NewEntity(); + } + + static NpcSpellsEffectsEntries FindOne( + int npc_spells_effects_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_effects_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_effects_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_effects_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEffectsEntries npc_spells_effects_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_effects_entries_entry.minlevel)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_effects_entries_entry.maxlevel)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_effects_entries_entry.se_base)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_effects_entries_entry.se_limit)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_effects_entries_entry.se_max)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_effects_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEffectsEntries InsertOne( + NpcSpellsEffectsEntries npc_spells_effects_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_effects_entries_entry.id = results.LastInsertedID(); + return npc_spells_effects_entries_entry; + } + + npc_spells_effects_entries_entry = InstanceListRepository::NewEntity(); + + return npc_spells_effects_entries_entry; + } + + static int InsertMany( + std::vector npc_spells_effects_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_effects_entries_entry: npc_spells_effects_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h new file mode 100644 index 000000000..5f241b8b2 --- /dev/null +++ b/common/repositories/npc_spells_effects_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_SPELLS_EFFECTS_REPOSITORY_H +#define EQEMU_NPC_SPELLS_EFFECTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcSpellsEffectsRepository { +public: + struct NpcSpellsEffects { + int id; + std::string name; + int parent_list; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "parent_list", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_effects"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEffects NewEntity() + { + NpcSpellsEffects entry{}; + + entry.id = 0; + entry.name = 0; + entry.parent_list = 0; + + return entry; + } + + static NpcSpellsEffects GetNpcSpellsEffectsEntry( + const std::vector &npc_spells_effectss, + int npc_spells_effects_id + ) + { + for (auto &npc_spells_effects : npc_spells_effectss) { + if (npc_spells_effects.id == npc_spells_effects_id) { + return npc_spells_effects; + } + } + + return NewEntity(); + } + + static NpcSpellsEffects FindOne( + int npc_spells_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_effects_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_effects_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEffects npc_spells_effects_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_effects_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entry.parent_list)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_effects_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEffects InsertOne( + NpcSpellsEffects npc_spells_effects_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_effects_entry.id = results.LastInsertedID(); + return npc_spells_effects_entry; + } + + npc_spells_effects_entry = InstanceListRepository::NewEntity(); + + return npc_spells_effects_entry; + } + + static int InsertMany( + std::vector npc_spells_effects_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_effects_entry: npc_spells_effects_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_SPELLS_EFFECTS_REPOSITORY_H diff --git a/common/repositories/npc_spells_entries_repository.h b/common/repositories/npc_spells_entries_repository.h new file mode 100644 index 000000000..d34913075 --- /dev/null +++ b/common/repositories/npc_spells_entries_repository.h @@ -0,0 +1,338 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_SPELLS_ENTRIES_REPOSITORY_H +#define EQEMU_NPC_SPELLS_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcSpellsEntriesRepository { +public: + struct NpcSpellsEntries { + int id; + int npc_spells_id; + int16 spellid; + int type; + int8 minlevel; + int8 maxlevel; + int16 manacost; + int recast_delay; + int16 priority; + int resist_adjust; + int16 min_hp; + int16 max_hp; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "npc_spells_id", + "spellid", + "type", + "minlevel", + "maxlevel", + "manacost", + "recast_delay", + "priority", + "resist_adjust", + "min_hp", + "max_hp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEntries NewEntity() + { + NpcSpellsEntries entry{}; + + entry.id = 0; + entry.npc_spells_id = 0; + entry.spellid = 0; + entry.type = 0; + entry.minlevel = 0; + entry.maxlevel = 255; + entry.manacost = -1; + entry.recast_delay = -1; + entry.priority = 0; + entry.resist_adjust = 0; + entry.min_hp = 0; + entry.max_hp = 0; + + return entry; + } + + static NpcSpellsEntries GetNpcSpellsEntriesEntry( + const std::vector &npc_spells_entriess, + int npc_spells_entries_id + ) + { + for (auto &npc_spells_entries : npc_spells_entriess) { + if (npc_spells_entries.id == npc_spells_entries_id) { + return npc_spells_entries; + } + } + + return NewEntity(); + } + + static NpcSpellsEntries FindOne( + int npc_spells_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEntries npc_spells_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_entries_entry.npc_spells_id)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entries_entry.spellid)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entries_entry.type)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entries_entry.minlevel)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entries_entry.maxlevel)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entries_entry.manacost)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entries_entry.recast_delay)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entries_entry.priority)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entries_entry.resist_adjust)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entries_entry.min_hp)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entries_entry.max_hp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEntries InsertOne( + NpcSpellsEntries npc_spells_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_entries_entry.id = results.LastInsertedID(); + return npc_spells_entries_entry; + } + + npc_spells_entries_entry = InstanceListRepository::NewEntity(); + + return npc_spells_entries_entry; + } + + static int InsertMany( + std::vector npc_spells_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_entries_entry: npc_spells_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_SPELLS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h new file mode 100644 index 000000000..e7d01c9d8 --- /dev/null +++ b/common/repositories/npc_spells_repository.h @@ -0,0 +1,410 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_SPELLS_REPOSITORY_H +#define EQEMU_NPC_SPELLS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcSpellsRepository { +public: + struct NpcSpells { + int id; + std::string name; + int parent_list; + int16 attack_proc; + int8 proc_chance; + int16 range_proc; + int16 rproc_chance; + int16 defensive_proc; + int16 dproc_chance; + int fail_recast; + int engaged_no_sp_recast_min; + int engaged_no_sp_recast_max; + int8 engaged_b_self_chance; + int8 engaged_b_other_chance; + int8 engaged_d_chance; + int pursue_no_sp_recast_min; + int pursue_no_sp_recast_max; + int8 pursue_d_chance; + int idle_no_sp_recast_min; + int idle_no_sp_recast_max; + int8 idle_b_chance; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "parent_list", + "attack_proc", + "proc_chance", + "range_proc", + "rproc_chance", + "defensive_proc", + "dproc_chance", + "fail_recast", + "engaged_no_sp_recast_min", + "engaged_no_sp_recast_max", + "engaged_b_self_chance", + "engaged_b_other_chance", + "engaged_d_chance", + "pursue_no_sp_recast_min", + "pursue_no_sp_recast_max", + "pursue_d_chance", + "idle_no_sp_recast_min", + "idle_no_sp_recast_max", + "idle_b_chance", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpells NewEntity() + { + NpcSpells entry{}; + + entry.id = 0; + entry.name = 0; + entry.parent_list = 0; + entry.attack_proc = -1; + entry.proc_chance = 3; + entry.range_proc = -1; + entry.rproc_chance = 0; + entry.defensive_proc = -1; + entry.dproc_chance = 0; + entry.fail_recast = 0; + entry.engaged_no_sp_recast_min = 0; + entry.engaged_no_sp_recast_max = 0; + entry.engaged_b_self_chance = 0; + entry.engaged_b_other_chance = 0; + entry.engaged_d_chance = 0; + entry.pursue_no_sp_recast_min = 0; + entry.pursue_no_sp_recast_max = 0; + entry.pursue_d_chance = 0; + entry.idle_no_sp_recast_min = 0; + entry.idle_no_sp_recast_max = 0; + entry.idle_b_chance = 0; + + return entry; + } + + static NpcSpells GetNpcSpellsEntry( + const std::vector &npc_spellss, + int npc_spells_id + ) + { + for (auto &npc_spells : npc_spellss) { + if (npc_spells.id == npc_spells_id) { + return npc_spells; + } + } + + return NewEntity(); + } + + static NpcSpells FindOne( + int npc_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpells npc_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entry.parent_list)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entry.attack_proc)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entry.proc_chance)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entry.range_proc)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entry.rproc_chance)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entry.defensive_proc)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entry.dproc_chance)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entry.fail_recast)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_spells_entry.engaged_b_self_chance)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_spells_entry.engaged_b_other_chance)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_spells_entry.engaged_d_chance)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_spells_entry.pursue_d_chance)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_spells_entry.idle_b_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpells InsertOne( + NpcSpells npc_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); + insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_entry.id = results.LastInsertedID(); + return npc_spells_entry; + } + + npc_spells_entry = InstanceListRepository::NewEntity(); + + return npc_spells_entry; + } + + static int InsertMany( + std::vector npc_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_entry: npc_spells_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); + insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_SPELLS_REPOSITORY_H diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h new file mode 100644 index 000000000..a45407bcb --- /dev/null +++ b/common/repositories/npc_types_repository.h @@ -0,0 +1,1218 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_TYPES_REPOSITORY_H +#define EQEMU_NPC_TYPES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcTypesRepository { +public: + struct NpcTypes { + int id; + std::string name; + std::string lastname; + int8 level; + int16 race; + int8 class; + int bodytype; + int hp; + int mana; + int8 gender; + int8 texture; + int8 helmtexture; + int herosforgemodel; + std::string size; + int hp_regen_rate; + int mana_regen_rate; + int loottable_id; + int merchant_id; + int alt_currency_id; + int npc_spells_id; + int npc_spells_effects_id; + int npc_faction_id; + int adventure_template_id; + int trap_template; + int mindmg; + int maxdmg; + int16 attack_count; + std::string npcspecialattks; + std::string special_abilities; + int aggroradius; + int assistradius; + int face; + int luclin_hairstyle; + int luclin_haircolor; + int luclin_eyecolor; + int luclin_eyecolor2; + int luclin_beardcolor; + int luclin_beard; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int armortint_id; + int8 armortint_red; + int8 armortint_green; + int8 armortint_blue; + int d_melee_texture1; + int d_melee_texture2; + std::string ammo_idfile; + int8 prim_melee_type; + int8 sec_melee_type; + int8 ranged_type; + std::string runspeed; + int16 MR; + int16 CR; + int16 DR; + int16 FR; + int16 PR; + int16 Corrup; + int16 PhR; + int16 see_invis; + int16 see_invis_undead; + int qglobal; + int16 AC; + int8 npc_aggro; + int8 spawn_limit; + std::string attack_speed; + int8 attack_delay; + int8 findable; + int STR; + int STA; + int DEX; + int AGI; + int _INT; + int WIS; + int CHA; + int8 see_hide; + int8 see_improved_hide; + int8 trackable; + int8 isbot; + int8 exclude; + int ATK; + int Accuracy; + int Avoidance; + int16 slow_mitigation; + int16 version; + int8 maxlevel; + int scalerate; + int8 private_corpse; + int8 unique_spawn_by_name; + int8 underwater; + int8 isquest; + int emoteid; + std::string spellscale; + std::string healscale; + int8 no_target_hotkey; + int8 raid_target; + int8 armtexture; + int8 bracertexture; + int8 handtexture; + int8 legtexture; + int8 feettexture; + int8 light; + int8 walkspeed; + int peqid; + int8 unique_; + int8 fixed; + int8 ignore_despawn; + int8 show_name; + int8 untargetable; + int16 charm_ac; + int charm_min_dmg; + int charm_max_dmg; + int8 charm_attack_delay; + int charm_accuracy_rating; + int charm_avoidance_rating; + int charm_atk; + int8 skip_global_loot; + int8 rare_spawn; + int8 stuck_behavior; + int16 model; + int8 flymode; + int8 always_aggro; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "lastname", + "level", + "race", + "class", + "bodytype", + "hp", + "mana", + "gender", + "texture", + "helmtexture", + "herosforgemodel", + "size", + "hp_regen_rate", + "mana_regen_rate", + "loottable_id", + "merchant_id", + "alt_currency_id", + "npc_spells_id", + "npc_spells_effects_id", + "npc_faction_id", + "adventure_template_id", + "trap_template", + "mindmg", + "maxdmg", + "attack_count", + "npcspecialattks", + "special_abilities", + "aggroradius", + "assistradius", + "face", + "luclin_hairstyle", + "luclin_haircolor", + "luclin_eyecolor", + "luclin_eyecolor2", + "luclin_beardcolor", + "luclin_beard", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "armortint_id", + "armortint_red", + "armortint_green", + "armortint_blue", + "d_melee_texture1", + "d_melee_texture2", + "ammo_idfile", + "prim_melee_type", + "sec_melee_type", + "ranged_type", + "runspeed", + "MR", + "CR", + "DR", + "FR", + "PR", + "Corrup", + "PhR", + "see_invis", + "see_invis_undead", + "qglobal", + "AC", + "npc_aggro", + "spawn_limit", + "attack_speed", + "attack_delay", + "findable", + "STR", + "STA", + "DEX", + "AGI", + "_INT", + "WIS", + "CHA", + "see_hide", + "see_improved_hide", + "trackable", + "isbot", + "exclude", + "ATK", + "Accuracy", + "Avoidance", + "slow_mitigation", + "version", + "maxlevel", + "scalerate", + "private_corpse", + "unique_spawn_by_name", + "underwater", + "isquest", + "emoteid", + "spellscale", + "healscale", + "no_target_hotkey", + "raid_target", + "armtexture", + "bracertexture", + "handtexture", + "legtexture", + "feettexture", + "light", + "walkspeed", + "peqid", + "unique_", + "fixed", + "ignore_despawn", + "show_name", + "untargetable", + "charm_ac", + "charm_min_dmg", + "charm_max_dmg", + "charm_attack_delay", + "charm_accuracy_rating", + "charm_avoidance_rating", + "charm_atk", + "skip_global_loot", + "rare_spawn", + "stuck_behavior", + "model", + "flymode", + "always_aggro", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_types"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcTypes NewEntity() + { + NpcTypes entry{}; + + entry.id = 0; + entry.name = 0; + entry.lastname = 0; + entry.level = 0; + entry.race = 0; + entry.class = 0; + entry.bodytype = 1; + entry.hp = 0; + entry.mana = 0; + entry.gender = 0; + entry.texture = 0; + entry.helmtexture = 0; + entry.herosforgemodel = 0; + entry.size = 0; + entry.hp_regen_rate = 0; + entry.mana_regen_rate = 0; + entry.loottable_id = 0; + entry.merchant_id = 0; + entry.alt_currency_id = 0; + entry.npc_spells_id = 0; + entry.npc_spells_effects_id = 0; + entry.npc_faction_id = 0; + entry.adventure_template_id = 0; + entry.trap_template = 0; + entry.mindmg = 0; + entry.maxdmg = 0; + entry.attack_count = -1; + entry.npcspecialattks = ""; + entry.special_abilities = 0; + entry.aggroradius = 0; + entry.assistradius = 0; + entry.face = 1; + entry.luclin_hairstyle = 1; + entry.luclin_haircolor = 1; + entry.luclin_eyecolor = 1; + entry.luclin_eyecolor2 = 1; + entry.luclin_beardcolor = 1; + entry.luclin_beard = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.armortint_id = 0; + entry.armortint_red = 0; + entry.armortint_green = 0; + entry.armortint_blue = 0; + entry.d_melee_texture1 = 0; + entry.d_melee_texture2 = 0; + entry.ammo_idfile = 'IT10'; + entry.prim_melee_type = 28; + entry.sec_melee_type = 28; + entry.ranged_type = 7; + entry.runspeed = 0; + entry.MR = 0; + entry.CR = 0; + entry.DR = 0; + entry.FR = 0; + entry.PR = 0; + entry.Corrup = 0; + entry.PhR = 0; + entry.see_invis = 0; + entry.see_invis_undead = 0; + entry.qglobal = 0; + entry.AC = 0; + entry.npc_aggro = 0; + entry.spawn_limit = 0; + entry.attack_speed = 0; + entry.attack_delay = 30; + entry.findable = 0; + entry.STR = 75; + entry.STA = 75; + entry.DEX = 75; + entry.AGI = 75; + entry._INT = 80; + entry.WIS = 75; + entry.CHA = 75; + entry.see_hide = 0; + entry.see_improved_hide = 0; + entry.trackable = 1; + entry.isbot = 0; + entry.exclude = 1; + entry.ATK = 0; + entry.Accuracy = 0; + entry.Avoidance = 0; + entry.slow_mitigation = 0; + entry.version = 0; + entry.maxlevel = 0; + entry.scalerate = 100; + entry.private_corpse = 0; + entry.unique_spawn_by_name = 0; + entry.underwater = 0; + entry.isquest = 0; + entry.emoteid = 0; + entry.spellscale = 100; + entry.healscale = 100; + entry.no_target_hotkey = 0; + entry.raid_target = 0; + entry.armtexture = 0; + entry.bracertexture = 0; + entry.handtexture = 0; + entry.legtexture = 0; + entry.feettexture = 0; + entry.light = 0; + entry.walkspeed = 0; + entry.peqid = 0; + entry.unique_ = 0; + entry.fixed = 0; + entry.ignore_despawn = 0; + entry.show_name = 1; + entry.untargetable = 0; + entry.charm_ac = 0; + entry.charm_min_dmg = 0; + entry.charm_max_dmg = 0; + entry.charm_attack_delay = 0; + entry.charm_accuracy_rating = 0; + entry.charm_avoidance_rating = 0; + entry.charm_atk = 0; + entry.skip_global_loot = 0; + entry.rare_spawn = 0; + entry.stuck_behavior = 0; + entry.model = 0; + entry.flymode = -1; + entry.always_aggro = 0; + + return entry; + } + + static NpcTypes GetNpcTypesEntry( + const std::vector &npc_typess, + int npc_types_id + ) + { + for (auto &npc_types : npc_typess) { + if (npc_types.id == npc_types_id) { + return npc_types; + } + } + + return NewEntity(); + } + + static NpcTypes FindOne( + int npc_types_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_types_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.lastname = row[2]; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27]; + entry.special_abilities = row[28]; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47]; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_types_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_types_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcTypes npc_types_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(npc_types_entry.lastname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(npc_types_entry.level)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_types_entry.race)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_types_entry.class)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_types_entry.bodytype)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_types_entry.hp)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_types_entry.mana)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_types_entry.gender)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_types_entry.texture)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_types_entry.helmtexture)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_types_entry.herosforgemodel)); + update_values.push_back(columns[13] + " = '" + EscapeString(npc_types_entry.size) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(npc_types_entry.hp_regen_rate)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_types_entry.mana_regen_rate)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_types_entry.loottable_id)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_types_entry.merchant_id)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_types_entry.alt_currency_id)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_types_entry.npc_spells_id)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_types_entry.npc_spells_effects_id)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_types_entry.npc_faction_id)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_types_entry.adventure_template_id)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_types_entry.trap_template)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_types_entry.mindmg)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_types_entry.maxdmg)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_types_entry.attack_count)); + update_values.push_back(columns[27] + " = '" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + update_values.push_back(columns[28] + " = '" + EscapeString(npc_types_entry.special_abilities) + "'"); + update_values.push_back(columns[29] + " = " + std::to_string(npc_types_entry.aggroradius)); + update_values.push_back(columns[30] + " = " + std::to_string(npc_types_entry.assistradius)); + update_values.push_back(columns[31] + " = " + std::to_string(npc_types_entry.face)); + update_values.push_back(columns[32] + " = " + std::to_string(npc_types_entry.luclin_hairstyle)); + update_values.push_back(columns[33] + " = " + std::to_string(npc_types_entry.luclin_haircolor)); + update_values.push_back(columns[34] + " = " + std::to_string(npc_types_entry.luclin_eyecolor)); + update_values.push_back(columns[35] + " = " + std::to_string(npc_types_entry.luclin_eyecolor2)); + update_values.push_back(columns[36] + " = " + std::to_string(npc_types_entry.luclin_beardcolor)); + update_values.push_back(columns[37] + " = " + std::to_string(npc_types_entry.luclin_beard)); + update_values.push_back(columns[38] + " = " + std::to_string(npc_types_entry.drakkin_heritage)); + update_values.push_back(columns[39] + " = " + std::to_string(npc_types_entry.drakkin_tattoo)); + update_values.push_back(columns[40] + " = " + std::to_string(npc_types_entry.drakkin_details)); + update_values.push_back(columns[41] + " = " + std::to_string(npc_types_entry.armortint_id)); + update_values.push_back(columns[42] + " = " + std::to_string(npc_types_entry.armortint_red)); + update_values.push_back(columns[43] + " = " + std::to_string(npc_types_entry.armortint_green)); + update_values.push_back(columns[44] + " = " + std::to_string(npc_types_entry.armortint_blue)); + update_values.push_back(columns[45] + " = " + std::to_string(npc_types_entry.d_melee_texture1)); + update_values.push_back(columns[46] + " = " + std::to_string(npc_types_entry.d_melee_texture2)); + update_values.push_back(columns[47] + " = '" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + update_values.push_back(columns[48] + " = " + std::to_string(npc_types_entry.prim_melee_type)); + update_values.push_back(columns[49] + " = " + std::to_string(npc_types_entry.sec_melee_type)); + update_values.push_back(columns[50] + " = " + std::to_string(npc_types_entry.ranged_type)); + update_values.push_back(columns[51] + " = '" + EscapeString(npc_types_entry.runspeed) + "'"); + update_values.push_back(columns[52] + " = " + std::to_string(npc_types_entry.MR)); + update_values.push_back(columns[53] + " = " + std::to_string(npc_types_entry.CR)); + update_values.push_back(columns[54] + " = " + std::to_string(npc_types_entry.DR)); + update_values.push_back(columns[55] + " = " + std::to_string(npc_types_entry.FR)); + update_values.push_back(columns[56] + " = " + std::to_string(npc_types_entry.PR)); + update_values.push_back(columns[57] + " = " + std::to_string(npc_types_entry.Corrup)); + update_values.push_back(columns[58] + " = " + std::to_string(npc_types_entry.PhR)); + update_values.push_back(columns[59] + " = " + std::to_string(npc_types_entry.see_invis)); + update_values.push_back(columns[60] + " = " + std::to_string(npc_types_entry.see_invis_undead)); + update_values.push_back(columns[61] + " = " + std::to_string(npc_types_entry.qglobal)); + update_values.push_back(columns[62] + " = " + std::to_string(npc_types_entry.AC)); + update_values.push_back(columns[63] + " = " + std::to_string(npc_types_entry.npc_aggro)); + update_values.push_back(columns[64] + " = " + std::to_string(npc_types_entry.spawn_limit)); + update_values.push_back(columns[65] + " = '" + EscapeString(npc_types_entry.attack_speed) + "'"); + update_values.push_back(columns[66] + " = " + std::to_string(npc_types_entry.attack_delay)); + update_values.push_back(columns[67] + " = " + std::to_string(npc_types_entry.findable)); + update_values.push_back(columns[68] + " = " + std::to_string(npc_types_entry.STR)); + update_values.push_back(columns[69] + " = " + std::to_string(npc_types_entry.STA)); + update_values.push_back(columns[70] + " = " + std::to_string(npc_types_entry.DEX)); + update_values.push_back(columns[71] + " = " + std::to_string(npc_types_entry.AGI)); + update_values.push_back(columns[72] + " = " + std::to_string(npc_types_entry._INT)); + update_values.push_back(columns[73] + " = " + std::to_string(npc_types_entry.WIS)); + update_values.push_back(columns[74] + " = " + std::to_string(npc_types_entry.CHA)); + update_values.push_back(columns[75] + " = " + std::to_string(npc_types_entry.see_hide)); + update_values.push_back(columns[76] + " = " + std::to_string(npc_types_entry.see_improved_hide)); + update_values.push_back(columns[77] + " = " + std::to_string(npc_types_entry.trackable)); + update_values.push_back(columns[78] + " = " + std::to_string(npc_types_entry.isbot)); + update_values.push_back(columns[79] + " = " + std::to_string(npc_types_entry.exclude)); + update_values.push_back(columns[80] + " = " + std::to_string(npc_types_entry.ATK)); + update_values.push_back(columns[81] + " = " + std::to_string(npc_types_entry.Accuracy)); + update_values.push_back(columns[82] + " = " + std::to_string(npc_types_entry.Avoidance)); + update_values.push_back(columns[83] + " = " + std::to_string(npc_types_entry.slow_mitigation)); + update_values.push_back(columns[84] + " = " + std::to_string(npc_types_entry.version)); + update_values.push_back(columns[85] + " = " + std::to_string(npc_types_entry.maxlevel)); + update_values.push_back(columns[86] + " = " + std::to_string(npc_types_entry.scalerate)); + update_values.push_back(columns[87] + " = " + std::to_string(npc_types_entry.private_corpse)); + update_values.push_back(columns[88] + " = " + std::to_string(npc_types_entry.unique_spawn_by_name)); + update_values.push_back(columns[89] + " = " + std::to_string(npc_types_entry.underwater)); + update_values.push_back(columns[90] + " = " + std::to_string(npc_types_entry.isquest)); + update_values.push_back(columns[91] + " = " + std::to_string(npc_types_entry.emoteid)); + update_values.push_back(columns[92] + " = '" + EscapeString(npc_types_entry.spellscale) + "'"); + update_values.push_back(columns[93] + " = '" + EscapeString(npc_types_entry.healscale) + "'"); + update_values.push_back(columns[94] + " = " + std::to_string(npc_types_entry.no_target_hotkey)); + update_values.push_back(columns[95] + " = " + std::to_string(npc_types_entry.raid_target)); + update_values.push_back(columns[96] + " = " + std::to_string(npc_types_entry.armtexture)); + update_values.push_back(columns[97] + " = " + std::to_string(npc_types_entry.bracertexture)); + update_values.push_back(columns[98] + " = " + std::to_string(npc_types_entry.handtexture)); + update_values.push_back(columns[99] + " = " + std::to_string(npc_types_entry.legtexture)); + update_values.push_back(columns[100] + " = " + std::to_string(npc_types_entry.feettexture)); + update_values.push_back(columns[101] + " = " + std::to_string(npc_types_entry.light)); + update_values.push_back(columns[102] + " = " + std::to_string(npc_types_entry.walkspeed)); + update_values.push_back(columns[103] + " = " + std::to_string(npc_types_entry.peqid)); + update_values.push_back(columns[104] + " = " + std::to_string(npc_types_entry.unique_)); + update_values.push_back(columns[105] + " = " + std::to_string(npc_types_entry.fixed)); + update_values.push_back(columns[106] + " = " + std::to_string(npc_types_entry.ignore_despawn)); + update_values.push_back(columns[107] + " = " + std::to_string(npc_types_entry.show_name)); + update_values.push_back(columns[108] + " = " + std::to_string(npc_types_entry.untargetable)); + update_values.push_back(columns[109] + " = " + std::to_string(npc_types_entry.charm_ac)); + update_values.push_back(columns[110] + " = " + std::to_string(npc_types_entry.charm_min_dmg)); + update_values.push_back(columns[111] + " = " + std::to_string(npc_types_entry.charm_max_dmg)); + update_values.push_back(columns[112] + " = " + std::to_string(npc_types_entry.charm_attack_delay)); + update_values.push_back(columns[113] + " = " + std::to_string(npc_types_entry.charm_accuracy_rating)); + update_values.push_back(columns[114] + " = " + std::to_string(npc_types_entry.charm_avoidance_rating)); + update_values.push_back(columns[115] + " = " + std::to_string(npc_types_entry.charm_atk)); + update_values.push_back(columns[116] + " = " + std::to_string(npc_types_entry.skip_global_loot)); + update_values.push_back(columns[117] + " = " + std::to_string(npc_types_entry.rare_spawn)); + update_values.push_back(columns[118] + " = " + std::to_string(npc_types_entry.stuck_behavior)); + update_values.push_back(columns[119] + " = " + std::to_string(npc_types_entry.model)); + update_values.push_back(columns[120] + " = " + std::to_string(npc_types_entry.flymode)); + update_values.push_back(columns[121] + " = " + std::to_string(npc_types_entry.always_aggro)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_types_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcTypes InsertOne( + NpcTypes npc_types_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.level)); + insert_values.push_back(std::to_string(npc_types_entry.race)); + insert_values.push_back(std::to_string(npc_types_entry.class)); + insert_values.push_back(std::to_string(npc_types_entry.bodytype)); + insert_values.push_back(std::to_string(npc_types_entry.hp)); + insert_values.push_back(std::to_string(npc_types_entry.mana)); + insert_values.push_back(std::to_string(npc_types_entry.gender)); + insert_values.push_back(std::to_string(npc_types_entry.texture)); + insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); + insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); + insert_values.push_back("'" + EscapeString(npc_types_entry.size) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); + insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); + insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); + insert_values.push_back(std::to_string(npc_types_entry.trap_template)); + insert_values.push_back(std::to_string(npc_types_entry.mindmg)); + insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); + insert_values.push_back(std::to_string(npc_types_entry.attack_count)); + insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); + insert_values.push_back(std::to_string(npc_types_entry.assistradius)); + insert_values.push_back(std::to_string(npc_types_entry.face)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); + insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); + insert_values.push_back("'" + EscapeString(npc_types_entry.runspeed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.MR)); + insert_values.push_back(std::to_string(npc_types_entry.CR)); + insert_values.push_back(std::to_string(npc_types_entry.DR)); + insert_values.push_back(std::to_string(npc_types_entry.FR)); + insert_values.push_back(std::to_string(npc_types_entry.PR)); + insert_values.push_back(std::to_string(npc_types_entry.Corrup)); + insert_values.push_back(std::to_string(npc_types_entry.PhR)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); + insert_values.push_back(std::to_string(npc_types_entry.qglobal)); + insert_values.push_back(std::to_string(npc_types_entry.AC)); + insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); + insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); + insert_values.push_back("'" + EscapeString(npc_types_entry.attack_speed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.findable)); + insert_values.push_back(std::to_string(npc_types_entry.STR)); + insert_values.push_back(std::to_string(npc_types_entry.STA)); + insert_values.push_back(std::to_string(npc_types_entry.DEX)); + insert_values.push_back(std::to_string(npc_types_entry.AGI)); + insert_values.push_back(std::to_string(npc_types_entry._INT)); + insert_values.push_back(std::to_string(npc_types_entry.WIS)); + insert_values.push_back(std::to_string(npc_types_entry.CHA)); + insert_values.push_back(std::to_string(npc_types_entry.see_hide)); + insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); + insert_values.push_back(std::to_string(npc_types_entry.trackable)); + insert_values.push_back(std::to_string(npc_types_entry.isbot)); + insert_values.push_back(std::to_string(npc_types_entry.exclude)); + insert_values.push_back(std::to_string(npc_types_entry.ATK)); + insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); + insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); + insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_types_entry.version)); + insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_types_entry.scalerate)); + insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); + insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); + insert_values.push_back(std::to_string(npc_types_entry.underwater)); + insert_values.push_back(std::to_string(npc_types_entry.isquest)); + insert_values.push_back(std::to_string(npc_types_entry.emoteid)); + insert_values.push_back("'" + EscapeString(npc_types_entry.spellscale) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.healscale) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); + insert_values.push_back(std::to_string(npc_types_entry.raid_target)); + insert_values.push_back(std::to_string(npc_types_entry.armtexture)); + insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); + insert_values.push_back(std::to_string(npc_types_entry.handtexture)); + insert_values.push_back(std::to_string(npc_types_entry.legtexture)); + insert_values.push_back(std::to_string(npc_types_entry.feettexture)); + insert_values.push_back(std::to_string(npc_types_entry.light)); + insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); + insert_values.push_back(std::to_string(npc_types_entry.peqid)); + insert_values.push_back(std::to_string(npc_types_entry.unique_)); + insert_values.push_back(std::to_string(npc_types_entry.fixed)); + insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); + insert_values.push_back(std::to_string(npc_types_entry.show_name)); + insert_values.push_back(std::to_string(npc_types_entry.untargetable)); + insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); + insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); + insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); + insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); + insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); + insert_values.push_back(std::to_string(npc_types_entry.model)); + insert_values.push_back(std::to_string(npc_types_entry.flymode)); + insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_types_entry.id = results.LastInsertedID(); + return npc_types_entry; + } + + npc_types_entry = InstanceListRepository::NewEntity(); + + return npc_types_entry; + } + + static int InsertMany( + std::vector npc_types_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_types_entry: npc_types_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.level)); + insert_values.push_back(std::to_string(npc_types_entry.race)); + insert_values.push_back(std::to_string(npc_types_entry.class)); + insert_values.push_back(std::to_string(npc_types_entry.bodytype)); + insert_values.push_back(std::to_string(npc_types_entry.hp)); + insert_values.push_back(std::to_string(npc_types_entry.mana)); + insert_values.push_back(std::to_string(npc_types_entry.gender)); + insert_values.push_back(std::to_string(npc_types_entry.texture)); + insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); + insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); + insert_values.push_back("'" + EscapeString(npc_types_entry.size) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); + insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); + insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); + insert_values.push_back(std::to_string(npc_types_entry.trap_template)); + insert_values.push_back(std::to_string(npc_types_entry.mindmg)); + insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); + insert_values.push_back(std::to_string(npc_types_entry.attack_count)); + insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); + insert_values.push_back(std::to_string(npc_types_entry.assistradius)); + insert_values.push_back(std::to_string(npc_types_entry.face)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); + insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); + insert_values.push_back("'" + EscapeString(npc_types_entry.runspeed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.MR)); + insert_values.push_back(std::to_string(npc_types_entry.CR)); + insert_values.push_back(std::to_string(npc_types_entry.DR)); + insert_values.push_back(std::to_string(npc_types_entry.FR)); + insert_values.push_back(std::to_string(npc_types_entry.PR)); + insert_values.push_back(std::to_string(npc_types_entry.Corrup)); + insert_values.push_back(std::to_string(npc_types_entry.PhR)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); + insert_values.push_back(std::to_string(npc_types_entry.qglobal)); + insert_values.push_back(std::to_string(npc_types_entry.AC)); + insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); + insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); + insert_values.push_back("'" + EscapeString(npc_types_entry.attack_speed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.findable)); + insert_values.push_back(std::to_string(npc_types_entry.STR)); + insert_values.push_back(std::to_string(npc_types_entry.STA)); + insert_values.push_back(std::to_string(npc_types_entry.DEX)); + insert_values.push_back(std::to_string(npc_types_entry.AGI)); + insert_values.push_back(std::to_string(npc_types_entry._INT)); + insert_values.push_back(std::to_string(npc_types_entry.WIS)); + insert_values.push_back(std::to_string(npc_types_entry.CHA)); + insert_values.push_back(std::to_string(npc_types_entry.see_hide)); + insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); + insert_values.push_back(std::to_string(npc_types_entry.trackable)); + insert_values.push_back(std::to_string(npc_types_entry.isbot)); + insert_values.push_back(std::to_string(npc_types_entry.exclude)); + insert_values.push_back(std::to_string(npc_types_entry.ATK)); + insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); + insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); + insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_types_entry.version)); + insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_types_entry.scalerate)); + insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); + insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); + insert_values.push_back(std::to_string(npc_types_entry.underwater)); + insert_values.push_back(std::to_string(npc_types_entry.isquest)); + insert_values.push_back(std::to_string(npc_types_entry.emoteid)); + insert_values.push_back("'" + EscapeString(npc_types_entry.spellscale) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.healscale) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); + insert_values.push_back(std::to_string(npc_types_entry.raid_target)); + insert_values.push_back(std::to_string(npc_types_entry.armtexture)); + insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); + insert_values.push_back(std::to_string(npc_types_entry.handtexture)); + insert_values.push_back(std::to_string(npc_types_entry.legtexture)); + insert_values.push_back(std::to_string(npc_types_entry.feettexture)); + insert_values.push_back(std::to_string(npc_types_entry.light)); + insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); + insert_values.push_back(std::to_string(npc_types_entry.peqid)); + insert_values.push_back(std::to_string(npc_types_entry.unique_)); + insert_values.push_back(std::to_string(npc_types_entry.fixed)); + insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); + insert_values.push_back(std::to_string(npc_types_entry.show_name)); + insert_values.push_back(std::to_string(npc_types_entry.untargetable)); + insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); + insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); + insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); + insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); + insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); + insert_values.push_back(std::to_string(npc_types_entry.model)); + insert_values.push_back(std::to_string(npc_types_entry.flymode)); + insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.lastname = row[2]; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27]; + entry.special_abilities = row[28]; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47]; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_TYPES_REPOSITORY_H diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h new file mode 100644 index 000000000..657e3e997 --- /dev/null +++ b/common/repositories/npc_types_tint_repository.h @@ -0,0 +1,474 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_NPC_TYPES_TINT_REPOSITORY_H +#define EQEMU_NPC_TYPES_TINT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class NpcTypesTintRepository { +public: + struct NpcTypesTint { + int id; + std::string tint_set_name; + int8 red1h; + int8 grn1h; + int8 blu1h; + int8 red2c; + int8 grn2c; + int8 blu2c; + int8 red3a; + int8 grn3a; + int8 blu3a; + int8 red4b; + int8 grn4b; + int8 blu4b; + int8 red5g; + int8 grn5g; + int8 blu5g; + int8 red6l; + int8 grn6l; + int8 blu6l; + int8 red7f; + int8 grn7f; + int8 blu7f; + int8 red8x; + int8 grn8x; + int8 blu8x; + int8 red9x; + int8 grn9x; + int8 blu9x; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "tint_set_name", + "red1h", + "grn1h", + "blu1h", + "red2c", + "grn2c", + "blu2c", + "red3a", + "grn3a", + "blu3a", + "red4b", + "grn4b", + "blu4b", + "red5g", + "grn5g", + "blu5g", + "red6l", + "grn6l", + "blu6l", + "red7f", + "grn7f", + "blu7f", + "red8x", + "grn8x", + "blu8x", + "red9x", + "grn9x", + "blu9x", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_types_tint"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcTypesTint NewEntity() + { + NpcTypesTint entry{}; + + entry.id = 0; + entry.tint_set_name = 0; + entry.red1h = 0; + entry.grn1h = 0; + entry.blu1h = 0; + entry.red2c = 0; + entry.grn2c = 0; + entry.blu2c = 0; + entry.red3a = 0; + entry.grn3a = 0; + entry.blu3a = 0; + entry.red4b = 0; + entry.grn4b = 0; + entry.blu4b = 0; + entry.red5g = 0; + entry.grn5g = 0; + entry.blu5g = 0; + entry.red6l = 0; + entry.grn6l = 0; + entry.blu6l = 0; + entry.red7f = 0; + entry.grn7f = 0; + entry.blu7f = 0; + entry.red8x = 0; + entry.grn8x = 0; + entry.blu8x = 0; + entry.red9x = 0; + entry.grn9x = 0; + entry.blu9x = 0; + + return entry; + } + + static NpcTypesTint GetNpcTypesTintEntry( + const std::vector &npc_types_tints, + int npc_types_tint_id + ) + { + for (auto &npc_types_tint : npc_types_tints) { + if (npc_types_tint.id == npc_types_tint_id) { + return npc_types_tint; + } + } + + return NewEntity(); + } + + static NpcTypesTint FindOne( + int npc_types_tint_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_types_tint_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1]; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_types_tint_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_types_tint_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcTypesTint npc_types_tint_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_types_tint_entry.red1h)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_types_tint_entry.grn1h)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_types_tint_entry.blu1h)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_types_tint_entry.red2c)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_types_tint_entry.grn2c)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_types_tint_entry.blu2c)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_types_tint_entry.red3a)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_types_tint_entry.grn3a)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_types_tint_entry.blu3a)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_types_tint_entry.red4b)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_types_tint_entry.grn4b)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_types_tint_entry.blu4b)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_types_tint_entry.red5g)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_types_tint_entry.grn5g)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_types_tint_entry.blu5g)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_types_tint_entry.red6l)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_types_tint_entry.grn6l)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_types_tint_entry.blu6l)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_types_tint_entry.red7f)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_types_tint_entry.grn7f)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_types_tint_entry.blu7f)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_types_tint_entry.red8x)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_types_tint_entry.grn8x)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_types_tint_entry.blu8x)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_types_tint_entry.red9x)); + update_values.push_back(columns[27] + " = " + std::to_string(npc_types_tint_entry.grn9x)); + update_values.push_back(columns[28] + " = " + std::to_string(npc_types_tint_entry.blu9x)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_types_tint_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcTypesTint InsertOne( + NpcTypesTint npc_types_tint_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_types_tint_entry.id = results.LastInsertedID(); + return npc_types_tint_entry; + } + + npc_types_tint_entry = InstanceListRepository::NewEntity(); + + return npc_types_tint_entry; + } + + static int InsertMany( + std::vector npc_types_tint_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_types_tint_entry: npc_types_tint_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1]; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_NPC_TYPES_TINT_REPOSITORY_H diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h new file mode 100644 index 000000000..6eeeedc61 --- /dev/null +++ b/common/repositories/object_contents_repository.h @@ -0,0 +1,335 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_OBJECT_CONTENTS_REPOSITORY_H +#define EQEMU_OBJECT_CONTENTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ObjectContentsRepository { +public: + struct ObjectContents { + int zoneid; + int parentid; + int bagidx; + int itemid; + int16 charges; + std::string droptime; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + }; + + static std::string PrimaryKey() + { + return std::string("bagidx"); + } + + static std::vector Columns() + { + return { + "zoneid", + "parentid", + "bagidx", + "itemid", + "charges", + "droptime", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("object_contents"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ObjectContents NewEntity() + { + ObjectContents entry{}; + + entry.zoneid = 0; + entry.parentid = 0; + entry.bagidx = 0; + entry.itemid = 0; + entry.charges = 0; + entry.droptime = '0000-00-00 00:00:00'; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + + return entry; + } + + static ObjectContents GetObjectContentsEntry( + const std::vector &object_contentss, + int object_contents_id + ) + { + for (auto &object_contents : object_contentss) { + if (object_contents.bagidx == object_contents_id) { + return object_contents; + } + } + + return NewEntity(); + } + + static ObjectContents FindOne( + int object_contents_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + object_contents_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5]; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int object_contents_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + object_contents_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ObjectContents object_contents_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(object_contents_entry.zoneid)); + update_values.push_back(columns[3] + " = " + std::to_string(object_contents_entry.itemid)); + update_values.push_back(columns[4] + " = " + std::to_string(object_contents_entry.charges)); + update_values.push_back(columns[5] + " = '" + EscapeString(object_contents_entry.droptime) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(object_contents_entry.augslot1)); + update_values.push_back(columns[7] + " = " + std::to_string(object_contents_entry.augslot2)); + update_values.push_back(columns[8] + " = " + std::to_string(object_contents_entry.augslot3)); + update_values.push_back(columns[9] + " = " + std::to_string(object_contents_entry.augslot4)); + update_values.push_back(columns[10] + " = " + std::to_string(object_contents_entry.augslot5)); + update_values.push_back(columns[11] + " = " + std::to_string(object_contents_entry.augslot6)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + object_contents_entry.bagidx + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ObjectContents InsertOne( + ObjectContents object_contents_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.itemid)); + insert_values.push_back(std::to_string(object_contents_entry.charges)); + insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); + insert_values.push_back(std::to_string(object_contents_entry.augslot1)); + insert_values.push_back(std::to_string(object_contents_entry.augslot2)); + insert_values.push_back(std::to_string(object_contents_entry.augslot3)); + insert_values.push_back(std::to_string(object_contents_entry.augslot4)); + insert_values.push_back(std::to_string(object_contents_entry.augslot5)); + insert_values.push_back(std::to_string(object_contents_entry.augslot6)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + object_contents_entry.id = results.LastInsertedID(); + return object_contents_entry; + } + + object_contents_entry = InstanceListRepository::NewEntity(); + + return object_contents_entry; + } + + static int InsertMany( + std::vector object_contents_entries + ) + { + std::vector insert_chunks; + + for (auto &object_contents_entry: object_contents_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.itemid)); + insert_values.push_back(std::to_string(object_contents_entry.charges)); + insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); + insert_values.push_back(std::to_string(object_contents_entry.augslot1)); + insert_values.push_back(std::to_string(object_contents_entry.augslot2)); + insert_values.push_back(std::to_string(object_contents_entry.augslot3)); + insert_values.push_back(std::to_string(object_contents_entry.augslot4)); + insert_values.push_back(std::to_string(object_contents_entry.augslot5)); + insert_values.push_back(std::to_string(object_contents_entry.augslot6)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5]; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_OBJECT_CONTENTS_REPOSITORY_H diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h new file mode 100644 index 000000000..5af48fecd --- /dev/null +++ b/common/repositories/object_repository.h @@ -0,0 +1,450 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_OBJECT_REPOSITORY_H +#define EQEMU_OBJECT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ObjectRepository { +public: + struct Object { + int id; + int zoneid; + int16 version; + std::string xpos; + std::string ypos; + std::string zpos; + std::string heading; + int itemid; + int16 charges; + std::string objectname; + int type; + int icon; + int unknown08; + int unknown10; + int unknown20; + int unknown24; + int unknown60; + int unknown64; + int unknown68; + int unknown72; + int unknown76; + int unknown84; + std::string size; + std::string tilt_x; + std::string tilt_y; + std::string display_name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "version", + "xpos", + "ypos", + "zpos", + "heading", + "itemid", + "charges", + "objectname", + "type", + "icon", + "unknown08", + "unknown10", + "unknown20", + "unknown24", + "unknown60", + "unknown64", + "unknown68", + "unknown72", + "unknown76", + "unknown84", + "size", + "tilt_x", + "tilt_y", + "display_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("object"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Object NewEntity() + { + Object entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.xpos = 0; + entry.ypos = 0; + entry.zpos = 0; + entry.heading = 0; + entry.itemid = 0; + entry.charges = 0; + entry.objectname = 0; + entry.type = 0; + entry.icon = 0; + entry.unknown08 = 0; + entry.unknown10 = 0; + entry.unknown20 = 0; + entry.unknown24 = 0; + entry.unknown60 = 0; + entry.unknown64 = 0; + entry.unknown68 = 0; + entry.unknown72 = 0; + entry.unknown76 = 0; + entry.unknown84 = 0; + entry.size = 100; + entry.tilt_x = 0; + entry.tilt_y = 0; + entry.display_name = 0; + + return entry; + } + + static Object GetObjectEntry( + const std::vector &objects, + int object_id + ) + { + for (auto &object : objects) { + if (object.id == object_id) { + return object; + } + } + + return NewEntity(); + } + + static Object FindOne( + int object_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + object_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9]; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int object_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + object_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Object object_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(object_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(object_entry.version)); + update_values.push_back(columns[3] + " = '" + EscapeString(object_entry.xpos) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(object_entry.ypos) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(object_entry.zpos) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(object_entry.heading) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(object_entry.itemid)); + update_values.push_back(columns[8] + " = " + std::to_string(object_entry.charges)); + update_values.push_back(columns[9] + " = '" + EscapeString(object_entry.objectname) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(object_entry.type)); + update_values.push_back(columns[11] + " = " + std::to_string(object_entry.icon)); + update_values.push_back(columns[12] + " = " + std::to_string(object_entry.unknown08)); + update_values.push_back(columns[13] + " = " + std::to_string(object_entry.unknown10)); + update_values.push_back(columns[14] + " = " + std::to_string(object_entry.unknown20)); + update_values.push_back(columns[15] + " = " + std::to_string(object_entry.unknown24)); + update_values.push_back(columns[16] + " = " + std::to_string(object_entry.unknown60)); + update_values.push_back(columns[17] + " = " + std::to_string(object_entry.unknown64)); + update_values.push_back(columns[18] + " = " + std::to_string(object_entry.unknown68)); + update_values.push_back(columns[19] + " = " + std::to_string(object_entry.unknown72)); + update_values.push_back(columns[20] + " = " + std::to_string(object_entry.unknown76)); + update_values.push_back(columns[21] + " = " + std::to_string(object_entry.unknown84)); + update_values.push_back(columns[22] + " = '" + EscapeString(object_entry.size) + "'"); + update_values.push_back(columns[23] + " = '" + EscapeString(object_entry.tilt_x) + "'"); + update_values.push_back(columns[24] + " = '" + EscapeString(object_entry.tilt_y) + "'"); + update_values.push_back(columns[25] + " = '" + EscapeString(object_entry.display_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + object_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Object InsertOne( + Object object_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_entry.zoneid)); + insert_values.push_back(std::to_string(object_entry.version)); + insert_values.push_back("'" + EscapeString(object_entry.xpos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.ypos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.zpos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.heading) + "'"); + insert_values.push_back(std::to_string(object_entry.itemid)); + insert_values.push_back(std::to_string(object_entry.charges)); + insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); + insert_values.push_back(std::to_string(object_entry.type)); + insert_values.push_back(std::to_string(object_entry.icon)); + insert_values.push_back(std::to_string(object_entry.unknown08)); + insert_values.push_back(std::to_string(object_entry.unknown10)); + insert_values.push_back(std::to_string(object_entry.unknown20)); + insert_values.push_back(std::to_string(object_entry.unknown24)); + insert_values.push_back(std::to_string(object_entry.unknown60)); + insert_values.push_back(std::to_string(object_entry.unknown64)); + insert_values.push_back(std::to_string(object_entry.unknown68)); + insert_values.push_back(std::to_string(object_entry.unknown72)); + insert_values.push_back(std::to_string(object_entry.unknown76)); + insert_values.push_back(std::to_string(object_entry.unknown84)); + insert_values.push_back("'" + EscapeString(object_entry.size) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.tilt_x) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.tilt_y) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + object_entry.id = results.LastInsertedID(); + return object_entry; + } + + object_entry = InstanceListRepository::NewEntity(); + + return object_entry; + } + + static int InsertMany( + std::vector object_entries + ) + { + std::vector insert_chunks; + + for (auto &object_entry: object_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_entry.zoneid)); + insert_values.push_back(std::to_string(object_entry.version)); + insert_values.push_back("'" + EscapeString(object_entry.xpos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.ypos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.zpos) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.heading) + "'"); + insert_values.push_back(std::to_string(object_entry.itemid)); + insert_values.push_back(std::to_string(object_entry.charges)); + insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); + insert_values.push_back(std::to_string(object_entry.type)); + insert_values.push_back(std::to_string(object_entry.icon)); + insert_values.push_back(std::to_string(object_entry.unknown08)); + insert_values.push_back(std::to_string(object_entry.unknown10)); + insert_values.push_back(std::to_string(object_entry.unknown20)); + insert_values.push_back(std::to_string(object_entry.unknown24)); + insert_values.push_back(std::to_string(object_entry.unknown60)); + insert_values.push_back(std::to_string(object_entry.unknown64)); + insert_values.push_back(std::to_string(object_entry.unknown68)); + insert_values.push_back(std::to_string(object_entry.unknown72)); + insert_values.push_back(std::to_string(object_entry.unknown76)); + insert_values.push_back(std::to_string(object_entry.unknown84)); + insert_values.push_back("'" + EscapeString(object_entry.size) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.tilt_x) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.tilt_y) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9]; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_OBJECT_REPOSITORY_H diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h new file mode 100644 index 000000000..f914a7441 --- /dev/null +++ b/common/repositories/perl_event_export_settings_repository.h @@ -0,0 +1,298 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H +#define EQEMU_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PerlEventExportSettingsRepository { +public: + struct PerlEventExportSettings { + int event_id; + std::string event_description; + int16 export_qglobals; + int16 export_mob; + int16 export_zone; + int16 export_item; + int16 export_event; + }; + + static std::string PrimaryKey() + { + return std::string("event_id"); + } + + static std::vector Columns() + { + return { + "event_id", + "event_description", + "export_qglobals", + "export_mob", + "export_zone", + "export_item", + "export_event", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("perl_event_export_settings"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PerlEventExportSettings NewEntity() + { + PerlEventExportSettings entry{}; + + entry.event_id = 0; + entry.event_description = 0; + entry.export_qglobals = 0; + entry.export_mob = 0; + entry.export_zone = 0; + entry.export_item = 0; + entry.export_event = 0; + + return entry; + } + + static PerlEventExportSettings GetPerlEventExportSettingsEntry( + const std::vector &perl_event_export_settingss, + int perl_event_export_settings_id + ) + { + for (auto &perl_event_export_settings : perl_event_export_settingss) { + if (perl_event_export_settings.event_id == perl_event_export_settings_id) { + return perl_event_export_settings; + } + } + + return NewEntity(); + } + + static PerlEventExportSettings FindOne( + int perl_event_export_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + perl_event_export_settings_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1]; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int perl_event_export_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + perl_event_export_settings_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PerlEventExportSettings perl_event_export_settings_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(perl_event_export_settings_entry.export_qglobals)); + update_values.push_back(columns[3] + " = " + std::to_string(perl_event_export_settings_entry.export_mob)); + update_values.push_back(columns[4] + " = " + std::to_string(perl_event_export_settings_entry.export_zone)); + update_values.push_back(columns[5] + " = " + std::to_string(perl_event_export_settings_entry.export_item)); + update_values.push_back(columns[6] + " = " + std::to_string(perl_event_export_settings_entry.export_event)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + perl_event_export_settings_entry.event_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PerlEventExportSettings InsertOne( + PerlEventExportSettings perl_event_export_settings_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + perl_event_export_settings_entry.id = results.LastInsertedID(); + return perl_event_export_settings_entry; + } + + perl_event_export_settings_entry = InstanceListRepository::NewEntity(); + + return perl_event_export_settings_entry; + } + + static int InsertMany( + std::vector perl_event_export_settings_entries + ) + { + std::vector insert_chunks; + + for (auto &perl_event_export_settings_entry: perl_event_export_settings_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1]; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h new file mode 100644 index 000000000..29f5a64f9 --- /dev/null +++ b/common/repositories/petitions_repository.h @@ -0,0 +1,370 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PETITIONS_REPOSITORY_H +#define EQEMU_PETITIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PetitionsRepository { +public: + struct Petitions { + int dib; + int petid; + std::string charname; + std::string accountname; + std::string lastgm; + std::string petitiontext; + std::string gmtext; + std::string zone; + int urgency; + int charclass; + int charrace; + int charlevel; + int checkouts; + int unavailables; + int8 ischeckedout; + int senttime; + }; + + static std::string PrimaryKey() + { + return std::string("dib"); + } + + static std::vector Columns() + { + return { + "dib", + "petid", + "charname", + "accountname", + "lastgm", + "petitiontext", + "gmtext", + "zone", + "urgency", + "charclass", + "charrace", + "charlevel", + "checkouts", + "unavailables", + "ischeckedout", + "senttime", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("petitions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Petitions NewEntity() + { + Petitions entry{}; + + entry.dib = 0; + entry.petid = 0; + entry.charname = ""; + entry.accountname = ""; + entry.lastgm = ""; + entry.petitiontext = 0; + entry.gmtext = 0; + entry.zone = ""; + entry.urgency = 0; + entry.charclass = 0; + entry.charrace = 0; + entry.charlevel = 0; + entry.checkouts = 0; + entry.unavailables = 0; + entry.ischeckedout = 0; + entry.senttime = 0; + + return entry; + } + + static Petitions GetPetitionsEntry( + const std::vector &petitionss, + int petitions_id + ) + { + for (auto &petitions : petitionss) { + if (petitions.dib == petitions_id) { + return petitions; + } + } + + return NewEntity(); + } + + static Petitions FindOne( + int petitions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + petitions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2]; + entry.accountname = row[3]; + entry.lastgm = row[4]; + entry.petitiontext = row[5]; + entry.gmtext = row[6]; + entry.zone = row[7]; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int petitions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + petitions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Petitions petitions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(petitions_entry.petid)); + update_values.push_back(columns[2] + " = '" + EscapeString(petitions_entry.charname) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(petitions_entry.accountname) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(petitions_entry.lastgm) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(petitions_entry.petitiontext) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(petitions_entry.gmtext) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(petitions_entry.zone) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(petitions_entry.urgency)); + update_values.push_back(columns[9] + " = " + std::to_string(petitions_entry.charclass)); + update_values.push_back(columns[10] + " = " + std::to_string(petitions_entry.charrace)); + update_values.push_back(columns[11] + " = " + std::to_string(petitions_entry.charlevel)); + update_values.push_back(columns[12] + " = " + std::to_string(petitions_entry.checkouts)); + update_values.push_back(columns[13] + " = " + std::to_string(petitions_entry.unavailables)); + update_values.push_back(columns[14] + " = " + std::to_string(petitions_entry.ischeckedout)); + update_values.push_back(columns[15] + " = " + std::to_string(petitions_entry.senttime)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + petitions_entry.dib + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Petitions InsertOne( + Petitions petitions_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(petitions_entry.petid)); + insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); + insert_values.push_back(std::to_string(petitions_entry.urgency)); + insert_values.push_back(std::to_string(petitions_entry.charclass)); + insert_values.push_back(std::to_string(petitions_entry.charrace)); + insert_values.push_back(std::to_string(petitions_entry.charlevel)); + insert_values.push_back(std::to_string(petitions_entry.checkouts)); + insert_values.push_back(std::to_string(petitions_entry.unavailables)); + insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); + insert_values.push_back(std::to_string(petitions_entry.senttime)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + petitions_entry.id = results.LastInsertedID(); + return petitions_entry; + } + + petitions_entry = InstanceListRepository::NewEntity(); + + return petitions_entry; + } + + static int InsertMany( + std::vector petitions_entries + ) + { + std::vector insert_chunks; + + for (auto &petitions_entry: petitions_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(petitions_entry.petid)); + insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); + insert_values.push_back(std::to_string(petitions_entry.urgency)); + insert_values.push_back(std::to_string(petitions_entry.charclass)); + insert_values.push_back(std::to_string(petitions_entry.charrace)); + insert_values.push_back(std::to_string(petitions_entry.charlevel)); + insert_values.push_back(std::to_string(petitions_entry.checkouts)); + insert_values.push_back(std::to_string(petitions_entry.unavailables)); + insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); + insert_values.push_back(std::to_string(petitions_entry.senttime)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2]; + entry.accountname = row[3]; + entry.lastgm = row[4]; + entry.petitiontext = row[5]; + entry.gmtext = row[6]; + entry.zone = row[7]; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PETITIONS_REPOSITORY_H diff --git a/common/repositories/pets_equipmentset_entries_repository.h b/common/repositories/pets_equipmentset_entries_repository.h new file mode 100644 index 000000000..23b155de3 --- /dev/null +++ b/common/repositories/pets_equipmentset_entries_repository.h @@ -0,0 +1,263 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H +#define EQEMU_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PetsEquipmentsetEntriesRepository { +public: + struct PetsEquipmentsetEntries { + int set_id; + int slot; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "set_id", + "slot", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets_equipmentset_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PetsEquipmentsetEntries NewEntity() + { + PetsEquipmentsetEntries entry{}; + + entry.set_id = 0; + entry.slot = 0; + entry.item_id = 0; + + return entry; + } + + static PetsEquipmentsetEntries GetPetsEquipmentsetEntriesEntry( + const std::vector &pets_equipmentset_entriess, + int pets_equipmentset_entries_id + ) + { + for (auto &pets_equipmentset_entries : pets_equipmentset_entriess) { + if (pets_equipmentset_entries.slot == pets_equipmentset_entries_id) { + return pets_equipmentset_entries; + } + } + + return NewEntity(); + } + + static PetsEquipmentsetEntries FindOne( + int pets_equipmentset_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_equipmentset_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_equipmentset_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_equipmentset_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PetsEquipmentsetEntries pets_equipmentset_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entries_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_equipmentset_entries_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PetsEquipmentsetEntries InsertOne( + PetsEquipmentsetEntries pets_equipmentset_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_equipmentset_entries_entry.id = results.LastInsertedID(); + return pets_equipmentset_entries_entry; + } + + pets_equipmentset_entries_entry = InstanceListRepository::NewEntity(); + + return pets_equipmentset_entries_entry; + } + + static int InsertMany( + std::vector pets_equipmentset_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_equipmentset_entries_entry: pets_equipmentset_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h new file mode 100644 index 000000000..e9c4a3f10 --- /dev/null +++ b/common/repositories/pets_equipmentset_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PETS_EQUIPMENTSET_REPOSITORY_H +#define EQEMU_PETS_EQUIPMENTSET_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PetsEquipmentsetRepository { +public: + struct PetsEquipmentset { + int set_id; + std::string setname; + int nested_set; + }; + + static std::string PrimaryKey() + { + return std::string("set_id"); + } + + static std::vector Columns() + { + return { + "set_id", + "setname", + "nested_set", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets_equipmentset"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PetsEquipmentset NewEntity() + { + PetsEquipmentset entry{}; + + entry.set_id = 0; + entry.setname = ""; + entry.nested_set = -1; + + return entry; + } + + static PetsEquipmentset GetPetsEquipmentsetEntry( + const std::vector &pets_equipmentsets, + int pets_equipmentset_id + ) + { + for (auto &pets_equipmentset : pets_equipmentsets) { + if (pets_equipmentset.set_id == pets_equipmentset_id) { + return pets_equipmentset; + } + } + + return NewEntity(); + } + + static PetsEquipmentset FindOne( + int pets_equipmentset_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_equipmentset_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1]; + entry.nested_set = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_equipmentset_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_equipmentset_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PetsEquipmentset pets_equipmentset_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(pets_equipmentset_entry.setname) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entry.nested_set)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_equipmentset_entry.set_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PetsEquipmentset InsertOne( + PetsEquipmentset pets_equipmentset_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); + insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_equipmentset_entry.id = results.LastInsertedID(); + return pets_equipmentset_entry; + } + + pets_equipmentset_entry = InstanceListRepository::NewEntity(); + + return pets_equipmentset_entry; + } + + static int InsertMany( + std::vector pets_equipmentset_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_equipmentset_entry: pets_equipmentset_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); + insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1]; + entry.nested_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PETS_EQUIPMENTSET_REPOSITORY_H diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h new file mode 100644 index 000000000..3a5f7c7ad --- /dev/null +++ b/common/repositories/pets_repository.h @@ -0,0 +1,303 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PETS_REPOSITORY_H +#define EQEMU_PETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PetsRepository { +public: + struct Pets { + std::string type; + int petpower; + int npcID; + int8 temp; + int8 petcontrol; + int8 petnaming; + int8 monsterflag; + int equipmentset; + }; + + static std::string PrimaryKey() + { + return std::string("petpower"); + } + + static std::vector Columns() + { + return { + "type", + "petpower", + "npcID", + "temp", + "petcontrol", + "petnaming", + "monsterflag", + "equipmentset", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Pets NewEntity() + { + Pets entry{}; + + entry.type = ""; + entry.petpower = 0; + entry.npcID = 0; + entry.temp = 0; + entry.petcontrol = 0; + entry.petnaming = 0; + entry.monsterflag = 0; + entry.equipmentset = -1; + + return entry; + } + + static Pets GetPetsEntry( + const std::vector &petss, + int pets_id + ) + { + for (auto &pets : petss) { + if (pets.petpower == pets_id) { + return pets; + } + } + + return NewEntity(); + } + + static Pets FindOne( + int pets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Pets entry{}; + + entry.type = row[0]; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Pets pets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(pets_entry.npcID)); + update_values.push_back(columns[3] + " = " + std::to_string(pets_entry.temp)); + update_values.push_back(columns[4] + " = " + std::to_string(pets_entry.petcontrol)); + update_values.push_back(columns[5] + " = " + std::to_string(pets_entry.petnaming)); + update_values.push_back(columns[6] + " = " + std::to_string(pets_entry.monsterflag)); + update_values.push_back(columns[7] + " = " + std::to_string(pets_entry.equipmentset)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_entry.petpower + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Pets InsertOne( + Pets pets_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_entry.npcID)); + insert_values.push_back(std::to_string(pets_entry.temp)); + insert_values.push_back(std::to_string(pets_entry.petcontrol)); + insert_values.push_back(std::to_string(pets_entry.petnaming)); + insert_values.push_back(std::to_string(pets_entry.monsterflag)); + insert_values.push_back(std::to_string(pets_entry.equipmentset)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_entry.id = results.LastInsertedID(); + return pets_entry; + } + + pets_entry = InstanceListRepository::NewEntity(); + + return pets_entry; + } + + static int InsertMany( + std::vector pets_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_entry: pets_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_entry.npcID)); + insert_values.push_back(std::to_string(pets_entry.temp)); + insert_values.push_back(std::to_string(pets_entry.petcontrol)); + insert_values.push_back(std::to_string(pets_entry.petnaming)); + insert_values.push_back(std::to_string(pets_entry.monsterflag)); + insert_values.push_back(std::to_string(pets_entry.equipmentset)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Pets entry{}; + + entry.type = row[0]; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PETS_REPOSITORY_H diff --git a/common/repositories/player_titlesets_repository.h b/common/repositories/player_titlesets_repository.h new file mode 100644 index 000000000..189feec6a --- /dev/null +++ b/common/repositories/player_titlesets_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PLAYER_TITLESETS_REPOSITORY_H +#define EQEMU_PLAYER_TITLESETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class PlayerTitlesetsRepository { +public: + struct PlayerTitlesets { + int id; + int char_id; + int title_set; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "char_id", + "title_set", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("player_titlesets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PlayerTitlesets NewEntity() + { + PlayerTitlesets entry{}; + + entry.id = 0; + entry.char_id = 0; + entry.title_set = 0; + + return entry; + } + + static PlayerTitlesets GetPlayerTitlesetsEntry( + const std::vector &player_titlesetss, + int player_titlesets_id + ) + { + for (auto &player_titlesets : player_titlesetss) { + if (player_titlesets.id == player_titlesets_id) { + return player_titlesets; + } + } + + return NewEntity(); + } + + static PlayerTitlesets FindOne( + int player_titlesets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + player_titlesets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int player_titlesets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + player_titlesets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PlayerTitlesets player_titlesets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(player_titlesets_entry.char_id)); + update_values.push_back(columns[2] + " = " + std::to_string(player_titlesets_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + player_titlesets_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PlayerTitlesets InsertOne( + PlayerTitlesets player_titlesets_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); + insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + player_titlesets_entry.id = results.LastInsertedID(); + return player_titlesets_entry; + } + + player_titlesets_entry = InstanceListRepository::NewEntity(); + + return player_titlesets_entry; + } + + static int InsertMany( + std::vector player_titlesets_entries + ) + { + std::vector insert_chunks; + + for (auto &player_titlesets_entry: player_titlesets_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); + insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PLAYER_TITLESETS_REPOSITORY_H diff --git a/common/repositories/profanity_list_repository.h b/common/repositories/profanity_list_repository.h new file mode 100644 index 000000000..8d857db79 --- /dev/null +++ b/common/repositories/profanity_list_repository.h @@ -0,0 +1,253 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PROFANITY_LIST_REPOSITORY_H +#define EQEMU_PROFANITY_LIST_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ProfanityListRepository { +public: + struct ProfanityList { + std::string word; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "word", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("profanity_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ProfanityList NewEntity() + { + ProfanityList entry{}; + + entry.word = 0; + + return entry; + } + + static ProfanityList GetProfanityListEntry( + const std::vector &profanity_lists, + int profanity_list_id + ) + { + for (auto &profanity_list : profanity_lists) { + if (profanity_list.== profanity_list_id) { + return profanity_list; + } + } + + return NewEntity(); + } + + static ProfanityList FindOne( + int profanity_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + profanity_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ProfanityList entry{}; + + entry.word = row[0]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int profanity_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + profanity_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ProfanityList profanity_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(profanity_list_entry.word) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + profanity_list_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ProfanityList InsertOne( + ProfanityList profanity_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(profanity_list_entry.word) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + profanity_list_entry.id = results.LastInsertedID(); + return profanity_list_entry; + } + + profanity_list_entry = InstanceListRepository::NewEntity(); + + return profanity_list_entry; + } + + static int InsertMany( + std::vector profanity_list_entries + ) + { + std::vector insert_chunks; + + for (auto &profanity_list_entry: profanity_list_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(profanity_list_entry.word) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ProfanityList entry{}; + + entry.word = row[0]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PROFANITY_LIST_REPOSITORY_H diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h new file mode 100644 index 000000000..a0334eab3 --- /dev/null +++ b/common/repositories/proximities_repository.h @@ -0,0 +1,303 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_PROXIMITIES_REPOSITORY_H +#define EQEMU_PROXIMITIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ProximitiesRepository { +public: + struct Proximities { + int zoneid; + int exploreid; + std::string minx; + std::string maxx; + std::string miny; + std::string maxy; + std::string minz; + std::string maxz; + }; + + static std::string PrimaryKey() + { + return std::string("exploreid"); + } + + static std::vector Columns() + { + return { + "zoneid", + "exploreid", + "minx", + "maxx", + "miny", + "maxy", + "minz", + "maxz", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("proximities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Proximities NewEntity() + { + Proximities entry{}; + + entry.zoneid = 0; + entry.exploreid = 0; + entry.minx = 0.000000; + entry.maxx = 0.000000; + entry.miny = 0.000000; + entry.maxy = 0.000000; + entry.minz = 0.000000; + entry.maxz = 0.000000; + + return entry; + } + + static Proximities GetProximitiesEntry( + const std::vector &proximitiess, + int proximities_id + ) + { + for (auto &proximities : proximitiess) { + if (proximities.exploreid == proximities_id) { + return proximities; + } + } + + return NewEntity(); + } + + static Proximities FindOne( + int proximities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + proximities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int proximities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + proximities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Proximities proximities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(proximities_entry.minx) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(proximities_entry.maxx) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(proximities_entry.miny) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(proximities_entry.maxy) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(proximities_entry.minz) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(proximities_entry.maxz) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + proximities_entry.exploreid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Proximities InsertOne( + Proximities proximities_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(proximities_entry.minx) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxx) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.miny) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxy) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.minz) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxz) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + proximities_entry.id = results.LastInsertedID(); + return proximities_entry; + } + + proximities_entry = InstanceListRepository::NewEntity(); + + return proximities_entry; + } + + static int InsertMany( + std::vector proximities_entries + ) + { + std::vector insert_chunks; + + for (auto &proximities_entry: proximities_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(proximities_entry.minx) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxx) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.miny) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxy) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.minz) + "'"); + insert_values.push_back("'" + EscapeString(proximities_entry.maxz) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_PROXIMITIES_REPOSITORY_H diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h new file mode 100644 index 000000000..31218b5b1 --- /dev/null +++ b/common/repositories/quest_globals_repository.h @@ -0,0 +1,281 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_QUEST_GLOBALS_REPOSITORY_H +#define EQEMU_QUEST_GLOBALS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class QuestGlobalsRepository { +public: + struct QuestGlobals { + int charid; + int npcid; + int zoneid; + std::string name; + std::string value; + int expdate; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "charid", + "npcid", + "zoneid", + "name", + "value", + "expdate", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("quest_globals"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static QuestGlobals NewEntity() + { + QuestGlobals entry{}; + + entry.charid = 0; + entry.npcid = 0; + entry.zoneid = 0; + entry.name = ""; + entry.value = '?'; + entry.expdate = 0; + + return entry; + } + + static QuestGlobals GetQuestGlobalsEntry( + const std::vector &quest_globalss, + int quest_globals_id + ) + { + for (auto &quest_globals : quest_globalss) { + if (quest_globals.name == quest_globals_id) { + return quest_globals; + } + } + + return NewEntity(); + } + + static QuestGlobals FindOne( + int quest_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + quest_globals_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3]; + entry.value = row[4]; + entry.expdate = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int quest_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + quest_globals_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + QuestGlobals quest_globals_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[4] + " = '" + EscapeString(quest_globals_entry.value) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(quest_globals_entry.expdate)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + quest_globals_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static QuestGlobals InsertOne( + QuestGlobals quest_globals_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); + insert_values.push_back(std::to_string(quest_globals_entry.expdate)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + quest_globals_entry.id = results.LastInsertedID(); + return quest_globals_entry; + } + + quest_globals_entry = InstanceListRepository::NewEntity(); + + return quest_globals_entry; + } + + static int InsertMany( + std::vector quest_globals_entries + ) + { + std::vector insert_chunks; + + for (auto &quest_globals_entry: quest_globals_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); + insert_values.push_back(std::to_string(quest_globals_entry.expdate)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3]; + entry.value = row[4]; + entry.expdate = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_QUEST_GLOBALS_REPOSITORY_H diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h new file mode 100644 index 000000000..ac782aa48 --- /dev/null +++ b/common/repositories/raid_details_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RAID_DETAILS_REPOSITORY_H +#define EQEMU_RAID_DETAILS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RaidDetailsRepository { +public: + struct RaidDetails { + int raidid; + int loottype; + int8 locked; + std::string motd; + }; + + static std::string PrimaryKey() + { + return std::string("raidid"); + } + + static std::vector Columns() + { + return { + "raidid", + "loottype", + "locked", + "motd", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("raid_details"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RaidDetails NewEntity() + { + RaidDetails entry{}; + + entry.raidid = 0; + entry.loottype = 0; + entry.locked = 0; + entry.motd = 0; + + return entry; + } + + static RaidDetails GetRaidDetailsEntry( + const std::vector &raid_detailss, + int raid_details_id + ) + { + for (auto &raid_details : raid_detailss) { + if (raid_details.raidid == raid_details_id) { + return raid_details; + } + } + + return NewEntity(); + } + + static RaidDetails FindOne( + int raid_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + raid_details_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int raid_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + raid_details_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RaidDetails raid_details_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(raid_details_entry.loottype)); + update_values.push_back(columns[2] + " = " + std::to_string(raid_details_entry.locked)); + update_values.push_back(columns[3] + " = '" + EscapeString(raid_details_entry.motd) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + raid_details_entry.raidid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RaidDetails InsertOne( + RaidDetails raid_details_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_details_entry.loottype)); + insert_values.push_back(std::to_string(raid_details_entry.locked)); + insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + raid_details_entry.id = results.LastInsertedID(); + return raid_details_entry; + } + + raid_details_entry = InstanceListRepository::NewEntity(); + + return raid_details_entry; + } + + static int InsertMany( + std::vector raid_details_entries + ) + { + std::vector insert_chunks; + + for (auto &raid_details_entry: raid_details_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_details_entry.loottype)); + insert_values.push_back(std::to_string(raid_details_entry.locked)); + insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RAID_DETAILS_REPOSITORY_H diff --git a/common/repositories/raid_leaders_repository.h b/common/repositories/raid_leaders_repository.h new file mode 100644 index 000000000..8c804bbe0 --- /dev/null +++ b/common/repositories/raid_leaders_repository.h @@ -0,0 +1,317 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RAID_LEADERS_REPOSITORY_H +#define EQEMU_RAID_LEADERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RaidLeadersRepository { +public: + struct RaidLeaders { + int gid; + int rid; + std::string marknpc; + std::string maintank; + std::string assist; + std::string puller; + std::string leadershipaa; + std::string mentoree; + int mentor_percent; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "gid", + "rid", + "marknpc", + "maintank", + "assist", + "puller", + "leadershipaa", + "mentoree", + "mentor_percent", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("raid_leaders"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RaidLeaders NewEntity() + { + RaidLeaders entry{}; + + entry.gid = 0; + entry.rid = 0; + entry.marknpc = 0; + entry.maintank = 0; + entry.assist = 0; + entry.puller = 0; + entry.leadershipaa = 0; + entry.mentoree = 0; + entry.mentor_percent = 0; + + return entry; + } + + static RaidLeaders GetRaidLeadersEntry( + const std::vector &raid_leaderss, + int raid_leaders_id + ) + { + for (auto &raid_leaders : raid_leaderss) { + if (raid_leaders. == raid_leaders_id) { + return raid_leaders; + } + } + + return NewEntity(); + } + + static RaidLeaders FindOne( + int raid_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + raid_leaders_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RaidLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.rid = atoi(row[1]); + entry.marknpc = row[2]; + entry.maintank = row[3]; + entry.assist = row[4]; + entry.puller = row[5]; + entry.leadershipaa = row[6]; + entry.mentoree = row[7]; + entry.mentor_percent = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int raid_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + raid_leaders_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RaidLeaders raid_leaders_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(raid_leaders_entry.gid)); + update_values.push_back(columns[1] + " = " + std::to_string(raid_leaders_entry.rid)); + update_values.push_back(columns[2] + " = '" + EscapeString(raid_leaders_entry.marknpc) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(raid_leaders_entry.maintank) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(raid_leaders_entry.assist) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(raid_leaders_entry.puller) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(raid_leaders_entry.leadershipaa) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(raid_leaders_entry.mentoree) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(raid_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + raid_leaders_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RaidLeaders InsertOne( + RaidLeaders raid_leaders_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_leaders_entry.gid)); + insert_values.push_back(std::to_string(raid_leaders_entry.rid)); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(raid_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + raid_leaders_entry.id = results.LastInsertedID(); + return raid_leaders_entry; + } + + raid_leaders_entry = InstanceListRepository::NewEntity(); + + return raid_leaders_entry; + } + + static int InsertMany( + std::vector raid_leaders_entries + ) + { + std::vector insert_chunks; + + for (auto &raid_leaders_entry: raid_leaders_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_leaders_entry.gid)); + insert_values.push_back(std::to_string(raid_leaders_entry.rid)); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(raid_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(raid_leaders_entry.mentor_percent)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.rid = atoi(row[1]); + entry.marknpc = row[2]; + entry.maintank = row[3]; + entry.assist = row[4]; + entry.puller = row[5]; + entry.leadershipaa = row[6]; + entry.mentoree = row[7]; + entry.mentor_percent = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RAID_LEADERS_REPOSITORY_H diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h new file mode 100644 index 000000000..7072d52f1 --- /dev/null +++ b/common/repositories/raid_members_repository.h @@ -0,0 +1,314 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RAID_MEMBERS_REPOSITORY_H +#define EQEMU_RAID_MEMBERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RaidMembersRepository { +public: + struct RaidMembers { + int raidid; + int charid; + int groupid; + int8 _class; + int8 level; + std::string name; + int8 isgroupleader; + int8 israidleader; + int8 islooter; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "raidid", + "charid", + "groupid", + "_class", + "level", + "name", + "isgroupleader", + "israidleader", + "islooter", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("raid_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RaidMembers NewEntity() + { + RaidMembers entry{}; + + entry.raidid = 0; + entry.charid = 0; + entry.groupid = 0; + entry._class = 0; + entry.level = 0; + entry.name = ""; + entry.isgroupleader = 0; + entry.israidleader = 0; + entry.islooter = 0; + + return entry; + } + + static RaidMembers GetRaidMembersEntry( + const std::vector &raid_memberss, + int raid_members_id + ) + { + for (auto &raid_members : raid_memberss) { + if (raid_members.charid == raid_members_id) { + return raid_members; + } + } + + return NewEntity(); + } + + static RaidMembers FindOne( + int raid_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + raid_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5]; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int raid_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + raid_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RaidMembers raid_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(raid_members_entry.raidid)); + update_values.push_back(columns[2] + " = " + std::to_string(raid_members_entry.groupid)); + update_values.push_back(columns[3] + " = " + std::to_string(raid_members_entry._class)); + update_values.push_back(columns[4] + " = " + std::to_string(raid_members_entry.level)); + update_values.push_back(columns[5] + " = '" + EscapeString(raid_members_entry.name) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(raid_members_entry.isgroupleader)); + update_values.push_back(columns[7] + " = " + std::to_string(raid_members_entry.israidleader)); + update_values.push_back(columns[8] + " = " + std::to_string(raid_members_entry.islooter)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + raid_members_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RaidMembers InsertOne( + RaidMembers raid_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.groupid)); + insert_values.push_back(std::to_string(raid_members_entry._class)); + insert_values.push_back(std::to_string(raid_members_entry.level)); + insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); + insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); + insert_values.push_back(std::to_string(raid_members_entry.israidleader)); + insert_values.push_back(std::to_string(raid_members_entry.islooter)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + raid_members_entry.id = results.LastInsertedID(); + return raid_members_entry; + } + + raid_members_entry = InstanceListRepository::NewEntity(); + + return raid_members_entry; + } + + static int InsertMany( + std::vector raid_members_entries + ) + { + std::vector insert_chunks; + + for (auto &raid_members_entry: raid_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.groupid)); + insert_values.push_back(std::to_string(raid_members_entry._class)); + insert_values.push_back(std::to_string(raid_members_entry.level)); + insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); + insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); + insert_values.push_back(std::to_string(raid_members_entry.israidleader)); + insert_values.push_back(std::to_string(raid_members_entry.islooter)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5]; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RAID_MEMBERS_REPOSITORY_H diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h new file mode 100644 index 000000000..794602482 --- /dev/null +++ b/common/repositories/reports_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_REPORTS_REPOSITORY_H +#define EQEMU_REPORTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ReportsRepository { +public: + struct Reports { + int id; + std::string name; + std::string reported; + std::string reported_text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "reported", + "reported_text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("reports"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Reports NewEntity() + { + Reports entry{}; + + entry.id = 0; + entry.name = 0; + entry.reported = 0; + entry.reported_text = 0; + + return entry; + } + + static Reports GetReportsEntry( + const std::vector &reportss, + int reports_id + ) + { + for (auto &reports : reportss) { + if (reports.id == reports_id) { + return reports; + } + } + + return NewEntity(); + } + + static Reports FindOne( + int reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + reports_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.reported = row[2]; + entry.reported_text = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + reports_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Reports reports_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(reports_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(reports_entry.reported) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(reports_entry.reported_text) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + reports_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Reports InsertOne( + Reports reports_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + reports_entry.id = results.LastInsertedID(); + return reports_entry; + } + + reports_entry = InstanceListRepository::NewEntity(); + + return reports_entry; + } + + static int InsertMany( + std::vector reports_entries + ) + { + std::vector insert_chunks; + + for (auto &reports_entry: reports_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.reported = row[2]; + entry.reported_text = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_REPORTS_REPOSITORY_H diff --git a/common/repositories/respawn_times_repository.h b/common/repositories/respawn_times_repository.h new file mode 100644 index 000000000..2e6c8e250 --- /dev/null +++ b/common/repositories/respawn_times_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RESPAWN_TIMES_REPOSITORY_H +#define EQEMU_RESPAWN_TIMES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RespawnTimesRepository { +public: + struct RespawnTimes { + int id; + int start; + int duration; + int16 instance_id; + }; + + static std::string PrimaryKey() + { + return std::string("instance_id"); + } + + static std::vector Columns() + { + return { + "id", + "start", + "duration", + "instance_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("respawn_times"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RespawnTimes NewEntity() + { + RespawnTimes entry{}; + + entry.id = 0; + entry.start = 0; + entry.duration = 0; + entry.instance_id = 0; + + return entry; + } + + static RespawnTimes GetRespawnTimesEntry( + const std::vector &respawn_timess, + int respawn_times_id + ) + { + for (auto &respawn_times : respawn_timess) { + if (respawn_times.instance_id == respawn_times_id) { + return respawn_times; + } + } + + return NewEntity(); + } + + static RespawnTimes FindOne( + int respawn_times_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + respawn_times_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int respawn_times_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + respawn_times_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RespawnTimes respawn_times_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(respawn_times_entry.start)); + update_values.push_back(columns[2] + " = " + std::to_string(respawn_times_entry.duration)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + respawn_times_entry.instance_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RespawnTimes InsertOne( + RespawnTimes respawn_times_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(respawn_times_entry.start)); + insert_values.push_back(std::to_string(respawn_times_entry.duration)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + respawn_times_entry.id = results.LastInsertedID(); + return respawn_times_entry; + } + + respawn_times_entry = InstanceListRepository::NewEntity(); + + return respawn_times_entry; + } + + static int InsertMany( + std::vector respawn_times_entries + ) + { + std::vector insert_chunks; + + for (auto &respawn_times_entry: respawn_times_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(respawn_times_entry.start)); + insert_values.push_back(std::to_string(respawn_times_entry.duration)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RESPAWN_TIMES_REPOSITORY_H diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h new file mode 100644 index 000000000..59b6a3102 --- /dev/null +++ b/common/repositories/rule_sets_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RULE_SETS_REPOSITORY_H +#define EQEMU_RULE_SETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RuleSetsRepository { +public: + struct RuleSets { + int8 ruleset_id; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("ruleset_id"); + } + + static std::vector Columns() + { + return { + "ruleset_id", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("rule_sets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RuleSets NewEntity() + { + RuleSets entry{}; + + entry.ruleset_id = 0; + entry.name = ""; + + return entry; + } + + static RuleSets GetRuleSetsEntry( + const std::vector &rule_setss, + int rule_sets_id + ) + { + for (auto &rule_sets : rule_setss) { + if (rule_sets.ruleset_id == rule_sets_id) { + return rule_sets; + } + } + + return NewEntity(); + } + + static RuleSets FindOne( + int rule_sets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + rule_sets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int rule_sets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + rule_sets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RuleSets rule_sets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(rule_sets_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + rule_sets_entry.ruleset_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RuleSets InsertOne( + RuleSets rule_sets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + rule_sets_entry.id = results.LastInsertedID(); + return rule_sets_entry; + } + + rule_sets_entry = InstanceListRepository::NewEntity(); + + return rule_sets_entry; + } + + static int InsertMany( + std::vector rule_sets_entries + ) + { + std::vector insert_chunks; + + for (auto &rule_sets_entry: rule_sets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RULE_SETS_REPOSITORY_H diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h new file mode 100644 index 000000000..ac915e2f6 --- /dev/null +++ b/common/repositories/rule_values_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_RULE_VALUES_REPOSITORY_H +#define EQEMU_RULE_VALUES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class RuleValuesRepository { +public: + struct RuleValues { + int8 ruleset_id; + std::string rule_name; + std::string rule_value; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("rule_name"); + } + + static std::vector Columns() + { + return { + "ruleset_id", + "rule_name", + "rule_value", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("rule_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RuleValues NewEntity() + { + RuleValues entry{}; + + entry.ruleset_id = 0; + entry.rule_name = ""; + entry.rule_value = ""; + entry.notes = 0; + + return entry; + } + + static RuleValues GetRuleValuesEntry( + const std::vector &rule_valuess, + int rule_values_id + ) + { + for (auto &rule_values : rule_valuess) { + if (rule_values.rule_name == rule_values_id) { + return rule_values; + } + } + + return NewEntity(); + } + + static RuleValues FindOne( + int rule_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + rule_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1]; + entry.rule_value = row[2]; + entry.notes = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int rule_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + rule_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RuleValues rule_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(rule_values_entry.rule_value) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(rule_values_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + rule_values_entry.rule_name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RuleValues InsertOne( + RuleValues rule_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); + insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + rule_values_entry.id = results.LastInsertedID(); + return rule_values_entry; + } + + rule_values_entry = InstanceListRepository::NewEntity(); + + return rule_values_entry; + } + + static int InsertMany( + std::vector rule_values_entries + ) + { + std::vector insert_chunks; + + for (auto &rule_values_entry: rule_values_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); + insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1]; + entry.rule_value = row[2]; + entry.notes = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_RULE_VALUES_REPOSITORY_H diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h new file mode 100644 index 000000000..0cd185bc3 --- /dev/null +++ b/common/repositories/saylink_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SAYLINK_REPOSITORY_H +#define EQEMU_SAYLINK_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SaylinkRepository { +public: + struct Saylink { + int id; + std::string phrase; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "phrase", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("saylink"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Saylink NewEntity() + { + Saylink entry{}; + + entry.id = 0; + entry.phrase = ""; + + return entry; + } + + static Saylink GetSaylinkEntry( + const std::vector &saylinks, + int saylink_id + ) + { + for (auto &saylink : saylinks) { + if (saylink.id == saylink_id) { + return saylink; + } + } + + return NewEntity(); + } + + static Saylink FindOne( + int saylink_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + saylink_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int saylink_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + saylink_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Saylink saylink_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(saylink_entry.phrase) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + saylink_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Saylink InsertOne( + Saylink saylink_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + saylink_entry.id = results.LastInsertedID(); + return saylink_entry; + } + + saylink_entry = InstanceListRepository::NewEntity(); + + return saylink_entry; + } + + static int InsertMany( + std::vector saylink_entries + ) + { + std::vector insert_chunks; + + for (auto &saylink_entry: saylink_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SAYLINK_REPOSITORY_H diff --git a/common/repositories/sharedbank_repository.h b/common/repositories/sharedbank_repository.h new file mode 100644 index 000000000..440412ff4 --- /dev/null +++ b/common/repositories/sharedbank_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SHAREDBANK_REPOSITORY_H +#define EQEMU_SHAREDBANK_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SharedbankRepository { +public: + struct Sharedbank { + int acctid; + int slotid; + int itemid; + int16 charges; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + std::string custom_data; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "acctid", + "slotid", + "itemid", + "charges", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + "custom_data", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("sharedbank"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Sharedbank NewEntity() + { + Sharedbank entry{}; + + entry.acctid = 0; + entry.slotid = 0; + entry.itemid = 0; + entry.charges = 0; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + entry.custom_data = 0; + + return entry; + } + + static Sharedbank GetSharedbankEntry( + const std::vector &sharedbanks, + int sharedbank_id + ) + { + for (auto &sharedbank : sharedbanks) { + if (sharedbank. == sharedbank_id) { + return sharedbank; + } + } + + return NewEntity(); + } + + static Sharedbank FindOne( + int sharedbank_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + sharedbank_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Sharedbank entry{}; + + entry.acctid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.augslot1 = atoi(row[4]); + entry.augslot2 = atoi(row[5]); + entry.augslot3 = atoi(row[6]); + entry.augslot4 = atoi(row[7]); + entry.augslot5 = atoi(row[8]); + entry.augslot6 = atoi(row[9]); + entry.custom_data = row[10]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int sharedbank_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + sharedbank_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Sharedbank sharedbank_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(sharedbank_entry.acctid)); + update_values.push_back(columns[1] + " = " + std::to_string(sharedbank_entry.slotid)); + update_values.push_back(columns[2] + " = " + std::to_string(sharedbank_entry.itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(sharedbank_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(sharedbank_entry.augslot1)); + update_values.push_back(columns[5] + " = " + std::to_string(sharedbank_entry.augslot2)); + update_values.push_back(columns[6] + " = " + std::to_string(sharedbank_entry.augslot3)); + update_values.push_back(columns[7] + " = " + std::to_string(sharedbank_entry.augslot4)); + update_values.push_back(columns[8] + " = " + std::to_string(sharedbank_entry.augslot5)); + update_values.push_back(columns[9] + " = " + std::to_string(sharedbank_entry.augslot6)); + update_values.push_back(columns[10] + " = '" + EscapeString(sharedbank_entry.custom_data) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + sharedbank_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Sharedbank InsertOne( + Sharedbank sharedbank_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(sharedbank_entry.acctid)); + insert_values.push_back(std::to_string(sharedbank_entry.slotid)); + insert_values.push_back(std::to_string(sharedbank_entry.itemid)); + insert_values.push_back(std::to_string(sharedbank_entry.charges)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot1)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot2)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot3)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot4)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot5)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot6)); + insert_values.push_back("'" + EscapeString(sharedbank_entry.custom_data) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + sharedbank_entry.id = results.LastInsertedID(); + return sharedbank_entry; + } + + sharedbank_entry = InstanceListRepository::NewEntity(); + + return sharedbank_entry; + } + + static int InsertMany( + std::vector sharedbank_entries + ) + { + std::vector insert_chunks; + + for (auto &sharedbank_entry: sharedbank_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(sharedbank_entry.acctid)); + insert_values.push_back(std::to_string(sharedbank_entry.slotid)); + insert_values.push_back(std::to_string(sharedbank_entry.itemid)); + insert_values.push_back(std::to_string(sharedbank_entry.charges)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot1)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot2)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot3)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot4)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot5)); + insert_values.push_back(std::to_string(sharedbank_entry.augslot6)); + insert_values.push_back("'" + EscapeString(sharedbank_entry.custom_data) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Sharedbank entry{}; + + entry.acctid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.augslot1 = atoi(row[4]); + entry.augslot2 = atoi(row[5]); + entry.augslot3 = atoi(row[6]); + entry.augslot4 = atoi(row[7]); + entry.augslot5 = atoi(row[8]); + entry.augslot6 = atoi(row[9]); + entry.custom_data = row[10]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SHAREDBANK_REPOSITORY_H diff --git a/common/repositories/skill_caps_repository.h b/common/repositories/skill_caps_repository.h new file mode 100644 index 000000000..a4129acdb --- /dev/null +++ b/common/repositories/skill_caps_repository.h @@ -0,0 +1,273 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SKILL_CAPS_REPOSITORY_H +#define EQEMU_SKILL_CAPS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SkillCapsRepository { +public: + struct SkillCaps { + int8 skillID; + int8 class; + int8 level; + int cap; + int8 class_; + }; + + static std::string PrimaryKey() + { + return std::string("class_"); + } + + static std::vector Columns() + { + return { + "skillID", + "class", + "level", + "cap", + "class_", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("skill_caps"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SkillCaps NewEntity() + { + SkillCaps entry{}; + + entry.skillID = 0; + entry.class = 0; + entry.level = 0; + entry.cap = 0; + entry.class_ = 0; + + return entry; + } + + static SkillCaps GetSkillCapsEntry( + const std::vector &skill_capss, + int skill_caps_id + ) + { + for (auto &skill_caps : skill_capss) { + if (skill_caps.class_ == skill_caps_id) { + return skill_caps; + } + } + + return NewEntity(); + } + + static SkillCaps FindOne( + int skill_caps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + skill_caps_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int skill_caps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + skill_caps_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SkillCaps skill_caps_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(skill_caps_entry.cap)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + skill_caps_entry.class_ + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SkillCaps InsertOne( + SkillCaps skill_caps_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(skill_caps_entry.cap)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + skill_caps_entry.id = results.LastInsertedID(); + return skill_caps_entry; + } + + skill_caps_entry = InstanceListRepository::NewEntity(); + + return skill_caps_entry; + } + + static int InsertMany( + std::vector skill_caps_entries + ) + { + std::vector insert_chunks; + + for (auto &skill_caps_entry: skill_caps_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(skill_caps_entry.cap)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SKILL_CAPS_REPOSITORY_H diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h new file mode 100644 index 000000000..d6cf7423a --- /dev/null +++ b/common/repositories/spawn2_repository.h @@ -0,0 +1,362 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPAWN2_REPOSITORY_H +#define EQEMU_SPAWN2_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class Spawn2Repository { +public: + struct Spawn2 { + int id; + int spawngroupID; + std::string zone; + int16 version; + std::string x; + std::string y; + std::string z; + std::string heading; + int respawntime; + int variance; + int pathgrid; + int _condition; + int cond_value; + int8 enabled; + int8 animation; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "spawngroupID", + "zone", + "version", + "x", + "y", + "z", + "heading", + "respawntime", + "variance", + "pathgrid", + "_condition", + "cond_value", + "enabled", + "animation", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn2"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawn2 NewEntity() + { + Spawn2 entry{}; + + entry.id = 0; + entry.spawngroupID = 0; + entry.zone = 0; + entry.version = 0; + entry.x = 0.000000; + entry.y = 0.000000; + entry.z = 0.000000; + entry.heading = 0.000000; + entry.respawntime = 0; + entry.variance = 0; + entry.pathgrid = 0; + entry._condition = 0; + entry.cond_value = 1; + entry.enabled = 1; + entry.animation = 0; + + return entry; + } + + static Spawn2 GetSpawn2Entry( + const std::vector &spawn2s, + int spawn2_id + ) + { + for (auto &spawn2 : spawn2s) { + if (spawn2.id == spawn2_id) { + return spawn2; + } + } + + return NewEntity(); + } + + static Spawn2 FindOne( + int spawn2_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn2_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn2_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn2_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawn2 spawn2_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(spawn2_entry.spawngroupID)); + update_values.push_back(columns[2] + " = '" + EscapeString(spawn2_entry.zone) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(spawn2_entry.version)); + update_values.push_back(columns[4] + " = '" + EscapeString(spawn2_entry.x) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(spawn2_entry.y) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(spawn2_entry.z) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(spawn2_entry.heading) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(spawn2_entry.respawntime)); + update_values.push_back(columns[9] + " = " + std::to_string(spawn2_entry.variance)); + update_values.push_back(columns[10] + " = " + std::to_string(spawn2_entry.pathgrid)); + update_values.push_back(columns[11] + " = " + std::to_string(spawn2_entry._condition)); + update_values.push_back(columns[12] + " = " + std::to_string(spawn2_entry.cond_value)); + update_values.push_back(columns[13] + " = " + std::to_string(spawn2_entry.enabled)); + update_values.push_back(columns[14] + " = " + std::to_string(spawn2_entry.animation)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn2_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawn2 InsertOne( + Spawn2 spawn2_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); + insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.version)); + insert_values.push_back("'" + EscapeString(spawn2_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.heading) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.respawntime)); + insert_values.push_back(std::to_string(spawn2_entry.variance)); + insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); + insert_values.push_back(std::to_string(spawn2_entry._condition)); + insert_values.push_back(std::to_string(spawn2_entry.cond_value)); + insert_values.push_back(std::to_string(spawn2_entry.enabled)); + insert_values.push_back(std::to_string(spawn2_entry.animation)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn2_entry.id = results.LastInsertedID(); + return spawn2_entry; + } + + spawn2_entry = InstanceListRepository::NewEntity(); + + return spawn2_entry; + } + + static int InsertMany( + std::vector spawn2_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn2_entry: spawn2_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); + insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.version)); + insert_values.push_back("'" + EscapeString(spawn2_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.heading) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.respawntime)); + insert_values.push_back(std::to_string(spawn2_entry.variance)); + insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); + insert_values.push_back(std::to_string(spawn2_entry._condition)); + insert_values.push_back(std::to_string(spawn2_entry.cond_value)); + insert_values.push_back(std::to_string(spawn2_entry.enabled)); + insert_values.push_back(std::to_string(spawn2_entry.animation)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPAWN2_REPOSITORY_H diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h new file mode 100644 index 000000000..5af50f4cd --- /dev/null +++ b/common/repositories/spawn_condition_values_repository.h @@ -0,0 +1,268 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPAWN_CONDITION_VALUES_REPOSITORY_H +#define EQEMU_SPAWN_CONDITION_VALUES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpawnConditionValuesRepository { +public: + struct SpawnConditionValues { + int id; + int8 value; + std::string zone; + int instance_id; + }; + + static std::string PrimaryKey() + { + return std::string("instance_id"); + } + + static std::vector Columns() + { + return { + "id", + "value", + "zone", + "instance_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_condition_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnConditionValues NewEntity() + { + SpawnConditionValues entry{}; + + entry.id = 0; + entry.value = 0; + entry.zone = 0; + entry.instance_id = 0; + + return entry; + } + + static SpawnConditionValues GetSpawnConditionValuesEntry( + const std::vector &spawn_condition_valuess, + int spawn_condition_values_id + ) + { + for (auto &spawn_condition_values : spawn_condition_valuess) { + if (spawn_condition_values.instance_id == spawn_condition_values_id) { + return spawn_condition_values; + } + } + + return NewEntity(); + } + + static SpawnConditionValues FindOne( + int spawn_condition_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_condition_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2]; + entry.instance_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_condition_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_condition_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnConditionValues spawn_condition_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(spawn_condition_values_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_condition_values_entry.instance_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnConditionValues InsertOne( + SpawnConditionValues spawn_condition_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_condition_values_entry.id = results.LastInsertedID(); + return spawn_condition_values_entry; + } + + spawn_condition_values_entry = InstanceListRepository::NewEntity(); + + return spawn_condition_values_entry; + } + + static int InsertMany( + std::vector spawn_condition_values_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_condition_values_entry: spawn_condition_values_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2]; + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPAWN_CONDITION_VALUES_REPOSITORY_H diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h new file mode 100644 index 000000000..63a8ef8e4 --- /dev/null +++ b/common/repositories/spawn_conditions_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPAWN_CONDITIONS_REPOSITORY_H +#define EQEMU_SPAWN_CONDITIONS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpawnConditionsRepository { +public: + struct SpawnConditions { + std::string zone; + int id; + int value; + int8 onchange; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "zone", + "id", + "value", + "onchange", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_conditions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnConditions NewEntity() + { + SpawnConditions entry{}; + + entry.zone = ""; + entry.id = 1; + entry.value = 0; + entry.onchange = 0; + entry.name = ""; + + return entry; + } + + static SpawnConditions GetSpawnConditionsEntry( + const std::vector &spawn_conditionss, + int spawn_conditions_id + ) + { + for (auto &spawn_conditions : spawn_conditionss) { + if (spawn_conditions.id == spawn_conditions_id) { + return spawn_conditions; + } + } + + return NewEntity(); + } + + static SpawnConditions FindOne( + int spawn_conditions_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_conditions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnConditions entry{}; + + entry.zone = row[0]; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_conditions_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_conditions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnConditions spawn_conditions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(spawn_conditions_entry.value)); + update_values.push_back(columns[3] + " = " + std::to_string(spawn_conditions_entry.onchange)); + update_values.push_back(columns[4] + " = '" + EscapeString(spawn_conditions_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_conditions_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnConditions InsertOne( + SpawnConditions spawn_conditions_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_conditions_entry.value)); + insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_conditions_entry.id = results.LastInsertedID(); + return spawn_conditions_entry; + } + + spawn_conditions_entry = InstanceListRepository::NewEntity(); + + return spawn_conditions_entry; + } + + static int InsertMany( + std::vector spawn_conditions_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_conditions_entry: spawn_conditions_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_conditions_entry.value)); + insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditions entry{}; + + entry.zone = row[0]; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPAWN_CONDITIONS_REPOSITORY_H diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h new file mode 100644 index 000000000..a8b096220 --- /dev/null +++ b/common/repositories/spawn_events_repository.h @@ -0,0 +1,354 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPAWN_EVENTS_REPOSITORY_H +#define EQEMU_SPAWN_EVENTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpawnEventsRepository { +public: + struct SpawnEvents { + int id; + std::string zone; + int cond_id; + std::string name; + int period; + int8 next_minute; + int8 next_hour; + int8 next_day; + int8 next_month; + int next_year; + int8 enabled; + int8 action; + int argument; + int8 strict; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "cond_id", + "name", + "period", + "next_minute", + "next_hour", + "next_day", + "next_month", + "next_year", + "enabled", + "action", + "argument", + "strict", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_events"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnEvents NewEntity() + { + SpawnEvents entry{}; + + entry.id = 0; + entry.zone = 0; + entry.cond_id = 0; + entry.name = ""; + entry.period = 0; + entry.next_minute = 0; + entry.next_hour = 0; + entry.next_day = 0; + entry.next_month = 0; + entry.next_year = 0; + entry.enabled = 1; + entry.action = 0; + entry.argument = 0; + entry.strict = 0; + + return entry; + } + + static SpawnEvents GetSpawnEventsEntry( + const std::vector &spawn_eventss, + int spawn_events_id + ) + { + for (auto &spawn_events : spawn_eventss) { + if (spawn_events.id == spawn_events_id) { + return spawn_events; + } + } + + return NewEntity(); + } + + static SpawnEvents FindOne( + int spawn_events_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_events_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.cond_id = atoi(row[2]); + entry.name = row[3]; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_events_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_events_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnEvents spawn_events_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spawn_events_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(spawn_events_entry.cond_id)); + update_values.push_back(columns[3] + " = '" + EscapeString(spawn_events_entry.name) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(spawn_events_entry.period)); + update_values.push_back(columns[5] + " = " + std::to_string(spawn_events_entry.next_minute)); + update_values.push_back(columns[6] + " = " + std::to_string(spawn_events_entry.next_hour)); + update_values.push_back(columns[7] + " = " + std::to_string(spawn_events_entry.next_day)); + update_values.push_back(columns[8] + " = " + std::to_string(spawn_events_entry.next_month)); + update_values.push_back(columns[9] + " = " + std::to_string(spawn_events_entry.next_year)); + update_values.push_back(columns[10] + " = " + std::to_string(spawn_events_entry.enabled)); + update_values.push_back(columns[11] + " = " + std::to_string(spawn_events_entry.action)); + update_values.push_back(columns[12] + " = " + std::to_string(spawn_events_entry.argument)); + update_values.push_back(columns[13] + " = " + std::to_string(spawn_events_entry.strict)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_events_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnEvents InsertOne( + SpawnEvents spawn_events_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); + insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.period)); + insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); + insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); + insert_values.push_back(std::to_string(spawn_events_entry.next_day)); + insert_values.push_back(std::to_string(spawn_events_entry.next_month)); + insert_values.push_back(std::to_string(spawn_events_entry.next_year)); + insert_values.push_back(std::to_string(spawn_events_entry.enabled)); + insert_values.push_back(std::to_string(spawn_events_entry.action)); + insert_values.push_back(std::to_string(spawn_events_entry.argument)); + insert_values.push_back(std::to_string(spawn_events_entry.strict)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_events_entry.id = results.LastInsertedID(); + return spawn_events_entry; + } + + spawn_events_entry = InstanceListRepository::NewEntity(); + + return spawn_events_entry; + } + + static int InsertMany( + std::vector spawn_events_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_events_entry: spawn_events_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); + insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.period)); + insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); + insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); + insert_values.push_back(std::to_string(spawn_events_entry.next_day)); + insert_values.push_back(std::to_string(spawn_events_entry.next_month)); + insert_values.push_back(std::to_string(spawn_events_entry.next_year)); + insert_values.push_back(std::to_string(spawn_events_entry.enabled)); + insert_values.push_back(std::to_string(spawn_events_entry.action)); + insert_values.push_back(std::to_string(spawn_events_entry.argument)); + insert_values.push_back(std::to_string(spawn_events_entry.strict)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.cond_id = atoi(row[2]); + entry.name = row[3]; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPAWN_EVENTS_REPOSITORY_H diff --git a/common/repositories/spawnentry_repository.h b/common/repositories/spawnentry_repository.h new file mode 100644 index 000000000..eb16601d0 --- /dev/null +++ b/common/repositories/spawnentry_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPAWNENTRY_REPOSITORY_H +#define EQEMU_SPAWNENTRY_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpawnentryRepository { +public: + struct Spawnentry { + int spawngroupID; + int npcID; + int16 chance; + int condition_value_filter; + }; + + static std::string PrimaryKey() + { + return std::string("npcID"); + } + + static std::vector Columns() + { + return { + "spawngroupID", + "npcID", + "chance", + "condition_value_filter", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawnentry"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawnentry NewEntity() + { + Spawnentry entry{}; + + entry.spawngroupID = 0; + entry.npcID = 0; + entry.chance = 0; + entry.condition_value_filter = 1; + + return entry; + } + + static Spawnentry GetSpawnentryEntry( + const std::vector &spawnentrys, + int spawnentry_id + ) + { + for (auto &spawnentry : spawnentrys) { + if (spawnentry.npcID == spawnentry_id) { + return spawnentry; + } + } + + return NewEntity(); + } + + static Spawnentry FindOne( + int spawnentry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawnentry_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawnentry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawnentry_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawnentry spawnentry_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(spawnentry_entry.chance)); + update_values.push_back(columns[3] + " = " + std::to_string(spawnentry_entry.condition_value_filter)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawnentry_entry.npcID + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawnentry InsertOne( + Spawnentry spawnentry_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawnentry_entry.chance)); + insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawnentry_entry.id = results.LastInsertedID(); + return spawnentry_entry; + } + + spawnentry_entry = InstanceListRepository::NewEntity(); + + return spawnentry_entry; + } + + static int InsertMany( + std::vector spawnentry_entries + ) + { + std::vector insert_chunks; + + for (auto &spawnentry_entry: spawnentry_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawnentry_entry.chance)); + insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPAWNENTRY_REPOSITORY_H diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h new file mode 100644 index 000000000..f4b0dbec2 --- /dev/null +++ b/common/repositories/spell_buckets_repository.h @@ -0,0 +1,266 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPELL_BUCKETS_REPOSITORY_H +#define EQEMU_SPELL_BUCKETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpellBucketsRepository { +public: + struct SpellBuckets { + int spellid; + std::string key; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("spellid"); + } + + static std::vector Columns() + { + return { + "spellid", + "key", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spell_buckets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellBuckets NewEntity() + { + SpellBuckets entry{}; + + entry.spellid = 0; + entry.key = 0; + entry.value = 0; + + return entry; + } + + static SpellBuckets GetSpellBucketsEntry( + const std::vector &spell_bucketss, + int spell_buckets_id + ) + { + for (auto &spell_buckets : spell_bucketss) { + if (spell_buckets.spellid == spell_buckets_id) { + return spell_buckets; + } + } + + return NewEntity(); + } + + static SpellBuckets FindOne( + int spell_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spell_buckets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spell_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spell_buckets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellBuckets spell_buckets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spell_buckets_entry.key) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spell_buckets_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spell_buckets_entry.spellid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellBuckets InsertOne( + SpellBuckets spell_buckets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spell_buckets_entry.id = results.LastInsertedID(); + return spell_buckets_entry; + } + + spell_buckets_entry = InstanceListRepository::NewEntity(); + + return spell_buckets_entry; + } + + static int InsertMany( + std::vector spell_buckets_entries + ) + { + std::vector insert_chunks; + + for (auto &spell_buckets_entry: spell_buckets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPELL_BUCKETS_REPOSITORY_H diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h new file mode 100644 index 000000000..2091a6486 --- /dev/null +++ b/common/repositories/spell_globals_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPELL_GLOBALS_REPOSITORY_H +#define EQEMU_SPELL_GLOBALS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpellGlobalsRepository { +public: + struct SpellGlobals { + int spellid; + std::string spell_name; + std::string qglobal; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("spellid"); + } + + static std::vector Columns() + { + return { + "spellid", + "spell_name", + "qglobal", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spell_globals"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellGlobals NewEntity() + { + SpellGlobals entry{}; + + entry.spellid = 0; + entry.spell_name = ""; + entry.qglobal = ""; + entry.value = ""; + + return entry; + } + + static SpellGlobals GetSpellGlobalsEntry( + const std::vector &spell_globalss, + int spell_globals_id + ) + { + for (auto &spell_globals : spell_globalss) { + if (spell_globals.spellid == spell_globals_id) { + return spell_globals; + } + } + + return NewEntity(); + } + + static SpellGlobals FindOne( + int spell_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spell_globals_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1]; + entry.qglobal = row[2]; + entry.value = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spell_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spell_globals_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellGlobals spell_globals_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spell_globals_entry.spell_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spell_globals_entry.qglobal) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(spell_globals_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spell_globals_entry.spellid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellGlobals InsertOne( + SpellGlobals spell_globals_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spell_globals_entry.id = results.LastInsertedID(); + return spell_globals_entry; + } + + spell_globals_entry = InstanceListRepository::NewEntity(); + + return spell_globals_entry; + } + + static int InsertMany( + std::vector spell_globals_entries + ) + { + std::vector insert_chunks; + + for (auto &spell_globals_entry: spell_globals_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1]; + entry.qglobal = row[2]; + entry.value = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPELL_GLOBALS_REPOSITORY_H diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h new file mode 100644 index 000000000..c241fd03e --- /dev/null +++ b/common/repositories/spells_new_repository.h @@ -0,0 +1,2138 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_SPELLS_NEW_REPOSITORY_H +#define EQEMU_SPELLS_NEW_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class SpellsNewRepository { +public: + struct SpellsNew { + int id; + std::string name; + std::string player_1; + std::string teleport_zone; + std::string you_cast; + std::string other_casts; + std::string cast_on_you; + std::string cast_on_other; + std::string spell_fades; + int range; + int aoerange; + int pushback; + int pushup; + int cast_time; + int recovery_time; + int recast_time; + int buffdurationformula; + int buffduration; + int AEDuration; + int mana; + int effect_base_value1; + int effect_base_value2; + int effect_base_value3; + int effect_base_value4; + int effect_base_value5; + int effect_base_value6; + int effect_base_value7; + int effect_base_value8; + int effect_base_value9; + int effect_base_value10; + int effect_base_value11; + int effect_base_value12; + int effect_limit_value1; + int effect_limit_value2; + int effect_limit_value3; + int effect_limit_value4; + int effect_limit_value5; + int effect_limit_value6; + int effect_limit_value7; + int effect_limit_value8; + int effect_limit_value9; + int effect_limit_value10; + int effect_limit_value11; + int effect_limit_value12; + int max1; + int max2; + int max3; + int max4; + int max5; + int max6; + int max7; + int max8; + int max9; + int max10; + int max11; + int max12; + int icon; + int memicon; + int components1; + int components2; + int components3; + int components4; + int component_counts1; + int component_counts2; + int component_counts3; + int component_counts4; + int NoexpendReagent1; + int NoexpendReagent2; + int NoexpendReagent3; + int NoexpendReagent4; + int formula1; + int formula2; + int formula3; + int formula4; + int formula5; + int formula6; + int formula7; + int formula8; + int formula9; + int formula10; + int formula11; + int formula12; + int LightType; + int goodEffect; + int Activated; + int resisttype; + int effectid1; + int effectid2; + int effectid3; + int effectid4; + int effectid5; + int effectid6; + int effectid7; + int effectid8; + int effectid9; + int effectid10; + int effectid11; + int effectid12; + int targettype; + int basediff; + int skill; + int zonetype; + int EnvironmentType; + int TimeOfDay; + int classes1; + int classes2; + int classes3; + int classes4; + int classes5; + int classes6; + int classes7; + int classes8; + int classes9; + int classes10; + int classes11; + int classes12; + int classes13; + int classes14; + int classes15; + int classes16; + int CastingAnim; + int TargetAnim; + int TravelType; + int SpellAffectIndex; + int disallow_sit; + int deities0; + int deities1; + int deities2; + int deities3; + int deities4; + int deities5; + int deities6; + int deities7; + int deities8; + int deities9; + int deities10; + int deities11; + int deities12; + int deities13; + int deities14; + int deities15; + int deities16; + int field142; + int field143; + int new_icon; + int spellanim; + int uninterruptable; + int ResistDiff; + int dot_stacking_exempt; + int deleteable; + int RecourseLink; + int no_partial_resist; + int field152; + int field153; + int short_buff_box; + int descnum; + int typedescnum; + int effectdescnum; + int effectdescnum2; + int npc_no_los; + int field160; + int reflectable; + int bonushate; + int field163; + int field164; + int ldon_trap; + int EndurCost; + int EndurTimerIndex; + int IsDiscipline; + int field169; + int field170; + int field171; + int field172; + int HateAdded; + int EndurUpkeep; + int numhitstype; + int numhits; + int pvpresistbase; + int pvpresistcalc; + int pvpresistcap; + int spell_category; + int field181; + int field182; + int pcnpc_only_flag; + int cast_not_standing; + int can_mgb; + int nodispell; + int npc_category; + int npc_usefulness; + int MinResist; + int MaxResist; + int viral_targets; + int viral_timer; + int nimbuseffect; + int ConeStartAngle; + int ConeStopAngle; + int sneaking; + int not_extendable; + int field198; + int field199; + int suspendable; + int viral_range; + int songcap; + int field203; + int field204; + int no_block; + int field206; + int spellgroup; + int rank; + int field209; + int field210; + int CastRestriction; + int allowrest; + int InCombat; + int OutofCombat; + int field215; + int field216; + int field217; + int aemaxtargets; + int maxtargets; + int field220; + int field221; + int field222; + int field223; + int persistdeath; + int field225; + int field226; + std::string min_dist; + std::string min_dist_mod; + std::string max_dist; + std::string max_dist_mod; + int min_range; + int field232; + int field233; + int field234; + int field235; + int field236; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "player_1", + "teleport_zone", + "you_cast", + "other_casts", + "cast_on_you", + "cast_on_other", + "spell_fades", + "range", + "aoerange", + "pushback", + "pushup", + "cast_time", + "recovery_time", + "recast_time", + "buffdurationformula", + "buffduration", + "AEDuration", + "mana", + "effect_base_value1", + "effect_base_value2", + "effect_base_value3", + "effect_base_value4", + "effect_base_value5", + "effect_base_value6", + "effect_base_value7", + "effect_base_value8", + "effect_base_value9", + "effect_base_value10", + "effect_base_value11", + "effect_base_value12", + "effect_limit_value1", + "effect_limit_value2", + "effect_limit_value3", + "effect_limit_value4", + "effect_limit_value5", + "effect_limit_value6", + "effect_limit_value7", + "effect_limit_value8", + "effect_limit_value9", + "effect_limit_value10", + "effect_limit_value11", + "effect_limit_value12", + "max1", + "max2", + "max3", + "max4", + "max5", + "max6", + "max7", + "max8", + "max9", + "max10", + "max11", + "max12", + "icon", + "memicon", + "components1", + "components2", + "components3", + "components4", + "component_counts1", + "component_counts2", + "component_counts3", + "component_counts4", + "NoexpendReagent1", + "NoexpendReagent2", + "NoexpendReagent3", + "NoexpendReagent4", + "formula1", + "formula2", + "formula3", + "formula4", + "formula5", + "formula6", + "formula7", + "formula8", + "formula9", + "formula10", + "formula11", + "formula12", + "LightType", + "goodEffect", + "Activated", + "resisttype", + "effectid1", + "effectid2", + "effectid3", + "effectid4", + "effectid5", + "effectid6", + "effectid7", + "effectid8", + "effectid9", + "effectid10", + "effectid11", + "effectid12", + "targettype", + "basediff", + "skill", + "zonetype", + "EnvironmentType", + "TimeOfDay", + "classes1", + "classes2", + "classes3", + "classes4", + "classes5", + "classes6", + "classes7", + "classes8", + "classes9", + "classes10", + "classes11", + "classes12", + "classes13", + "classes14", + "classes15", + "classes16", + "CastingAnim", + "TargetAnim", + "TravelType", + "SpellAffectIndex", + "disallow_sit", + "deities0", + "deities1", + "deities2", + "deities3", + "deities4", + "deities5", + "deities6", + "deities7", + "deities8", + "deities9", + "deities10", + "deities11", + "deities12", + "deities13", + "deities14", + "deities15", + "deities16", + "field142", + "field143", + "new_icon", + "spellanim", + "uninterruptable", + "ResistDiff", + "dot_stacking_exempt", + "deleteable", + "RecourseLink", + "no_partial_resist", + "field152", + "field153", + "short_buff_box", + "descnum", + "typedescnum", + "effectdescnum", + "effectdescnum2", + "npc_no_los", + "field160", + "reflectable", + "bonushate", + "field163", + "field164", + "ldon_trap", + "EndurCost", + "EndurTimerIndex", + "IsDiscipline", + "field169", + "field170", + "field171", + "field172", + "HateAdded", + "EndurUpkeep", + "numhitstype", + "numhits", + "pvpresistbase", + "pvpresistcalc", + "pvpresistcap", + "spell_category", + "field181", + "field182", + "pcnpc_only_flag", + "cast_not_standing", + "can_mgb", + "nodispell", + "npc_category", + "npc_usefulness", + "MinResist", + "MaxResist", + "viral_targets", + "viral_timer", + "nimbuseffect", + "ConeStartAngle", + "ConeStopAngle", + "sneaking", + "not_extendable", + "field198", + "field199", + "suspendable", + "viral_range", + "songcap", + "field203", + "field204", + "no_block", + "field206", + "spellgroup", + "rank", + "field209", + "field210", + "CastRestriction", + "allowrest", + "InCombat", + "OutofCombat", + "field215", + "field216", + "field217", + "aemaxtargets", + "maxtargets", + "field220", + "field221", + "field222", + "field223", + "persistdeath", + "field225", + "field226", + "min_dist", + "min_dist_mod", + "max_dist", + "max_dist_mod", + "min_range", + "field232", + "field233", + "field234", + "field235", + "field236", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spells_new"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellsNew NewEntity() + { + SpellsNew entry{}; + + entry.id = 0; + entry.name = 0; + entry.player_1 = 'BLUE_TRAIL'; + entry.teleport_zone = 0; + entry.you_cast = 0; + entry.other_casts = 0; + entry.cast_on_you = 0; + entry.cast_on_other = 0; + entry.spell_fades = 0; + entry.range = 100; + entry.aoerange = 0; + entry.pushback = 0; + entry.pushup = 0; + entry.cast_time = 0; + entry.recovery_time = 0; + entry.recast_time = 0; + entry.buffdurationformula = 7; + entry.buffduration = 65; + entry.AEDuration = 0; + entry.mana = 0; + entry.effect_base_value1 = 100; + entry.effect_base_value2 = 0; + entry.effect_base_value3 = 0; + entry.effect_base_value4 = 0; + entry.effect_base_value5 = 0; + entry.effect_base_value6 = 0; + entry.effect_base_value7 = 0; + entry.effect_base_value8 = 0; + entry.effect_base_value9 = 0; + entry.effect_base_value10 = 0; + entry.effect_base_value11 = 0; + entry.effect_base_value12 = 0; + entry.effect_limit_value1 = 0; + entry.effect_limit_value2 = 0; + entry.effect_limit_value3 = 0; + entry.effect_limit_value4 = 0; + entry.effect_limit_value5 = 0; + entry.effect_limit_value6 = 0; + entry.effect_limit_value7 = 0; + entry.effect_limit_value8 = 0; + entry.effect_limit_value9 = 0; + entry.effect_limit_value10 = 0; + entry.effect_limit_value11 = 0; + entry.effect_limit_value12 = 0; + entry.max1 = 0; + entry.max2 = 0; + entry.max3 = 0; + entry.max4 = 0; + entry.max5 = 0; + entry.max6 = 0; + entry.max7 = 0; + entry.max8 = 0; + entry.max9 = 0; + entry.max10 = 0; + entry.max11 = 0; + entry.max12 = 0; + entry.icon = 0; + entry.memicon = 0; + entry.components1 = -1; + entry.components2 = -1; + entry.components3 = -1; + entry.components4 = -1; + entry.component_counts1 = 1; + entry.component_counts2 = 1; + entry.component_counts3 = 1; + entry.component_counts4 = 1; + entry.NoexpendReagent1 = -1; + entry.NoexpendReagent2 = -1; + entry.NoexpendReagent3 = -1; + entry.NoexpendReagent4 = -1; + entry.formula1 = 100; + entry.formula2 = 100; + entry.formula3 = 100; + entry.formula4 = 100; + entry.formula5 = 100; + entry.formula6 = 100; + entry.formula7 = 100; + entry.formula8 = 100; + entry.formula9 = 100; + entry.formula10 = 100; + entry.formula11 = 100; + entry.formula12 = 100; + entry.LightType = 0; + entry.goodEffect = 0; + entry.Activated = 0; + entry.resisttype = 0; + entry.effectid1 = 254; + entry.effectid2 = 254; + entry.effectid3 = 254; + entry.effectid4 = 254; + entry.effectid5 = 254; + entry.effectid6 = 254; + entry.effectid7 = 254; + entry.effectid8 = 254; + entry.effectid9 = 254; + entry.effectid10 = 254; + entry.effectid11 = 254; + entry.effectid12 = 254; + entry.targettype = 2; + entry.basediff = 0; + entry.skill = 98; + entry.zonetype = -1; + entry.EnvironmentType = 0; + entry.TimeOfDay = 0; + entry.classes1 = 255; + entry.classes2 = 255; + entry.classes3 = 255; + entry.classes4 = 255; + entry.classes5 = 255; + entry.classes6 = 255; + entry.classes7 = 255; + entry.classes8 = 255; + entry.classes9 = 255; + entry.classes10 = 255; + entry.classes11 = 255; + entry.classes12 = 255; + entry.classes13 = 255; + entry.classes14 = 255; + entry.classes15 = 255; + entry.classes16 = 255; + entry.CastingAnim = 44; + entry.TargetAnim = 13; + entry.TravelType = 0; + entry.SpellAffectIndex = -1; + entry.disallow_sit = 0; + entry.deities0 = 0; + entry.deities1 = 0; + entry.deities2 = 0; + entry.deities3 = 0; + entry.deities4 = 0; + entry.deities5 = 0; + entry.deities6 = 0; + entry.deities7 = 0; + entry.deities8 = 0; + entry.deities9 = 0; + entry.deities10 = 0; + entry.deities11 = 0; + entry.deities12 = 0; + entry.deities13 = 0; + entry.deities14 = 0; + entry.deities15 = 0; + entry.deities16 = 0; + entry.field142 = 100; + entry.field143 = 0; + entry.new_icon = 161; + entry.spellanim = 0; + entry.uninterruptable = 0; + entry.ResistDiff = -150; + entry.dot_stacking_exempt = 0; + entry.deleteable = 0; + entry.RecourseLink = 0; + entry.no_partial_resist = 0; + entry.field152 = 0; + entry.field153 = 0; + entry.short_buff_box = -1; + entry.descnum = 0; + entry.typedescnum = 0; + entry.effectdescnum = 0; + entry.effectdescnum2 = 0; + entry.npc_no_los = 0; + entry.field160 = 0; + entry.reflectable = 0; + entry.bonushate = 0; + entry.field163 = 100; + entry.field164 = -150; + entry.ldon_trap = 0; + entry.EndurCost = 0; + entry.EndurTimerIndex = 0; + entry.IsDiscipline = 0; + entry.field169 = 0; + entry.field170 = 0; + entry.field171 = 0; + entry.field172 = 0; + entry.HateAdded = 0; + entry.EndurUpkeep = 0; + entry.numhitstype = 0; + entry.numhits = 0; + entry.pvpresistbase = -150; + entry.pvpresistcalc = 100; + entry.pvpresistcap = -150; + entry.spell_category = -99; + entry.field181 = 7; + entry.field182 = 65; + entry.pcnpc_only_flag = 0; + entry.cast_not_standing = 0; + entry.can_mgb = 0; + entry.nodispell = -1; + entry.npc_category = 0; + entry.npc_usefulness = 0; + entry.MinResist = 0; + entry.MaxResist = 0; + entry.viral_targets = 0; + entry.viral_timer = 0; + entry.nimbuseffect = 0; + entry.ConeStartAngle = 0; + entry.ConeStopAngle = 0; + entry.sneaking = 0; + entry.not_extendable = 0; + entry.field198 = 0; + entry.field199 = 1; + entry.suspendable = 0; + entry.viral_range = 0; + entry.songcap = 0; + entry.field203 = 0; + entry.field204 = 0; + entry.no_block = 0; + entry.field206 = -1; + entry.spellgroup = 0; + entry.rank = 0; + entry.field209 = 0; + entry.field210 = 1; + entry.CastRestriction = 0; + entry.allowrest = 0; + entry.InCombat = 0; + entry.OutofCombat = 0; + entry.field215 = 0; + entry.field216 = 0; + entry.field217 = 0; + entry.aemaxtargets = 0; + entry.maxtargets = 0; + entry.field220 = 0; + entry.field221 = 0; + entry.field222 = 0; + entry.field223 = 0; + entry.persistdeath = 0; + entry.field225 = 0; + entry.field226 = 0; + entry.min_dist = 0; + entry.min_dist_mod = 0; + entry.max_dist = 0; + entry.max_dist_mod = 0; + entry.min_range = 0; + entry.field232 = 0; + entry.field233 = 0; + entry.field234 = 0; + entry.field235 = 0; + entry.field236 = 0; + + return entry; + } + + static SpellsNew GetSpellsNewEntry( + const std::vector &spells_news, + int spells_new_id + ) + { + for (auto &spells_new : spells_news) { + if (spells_new.id == spells_new_id) { + return spells_new; + } + } + + return NewEntity(); + } + + static SpellsNew FindOne( + int spells_new_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spells_new_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.player_1 = row[2]; + entry.teleport_zone = row[3]; + entry.you_cast = row[4]; + entry.other_casts = row[5]; + entry.cast_on_you = row[6]; + entry.cast_on_other = row[7]; + entry.spell_fades = row[8]; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spells_new_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spells_new_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellsNew spells_new_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spells_new_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spells_new_entry.player_1) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(spells_new_entry.teleport_zone) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(spells_new_entry.you_cast) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(spells_new_entry.other_casts) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(spells_new_entry.cast_on_you) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(spells_new_entry.cast_on_other) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(spells_new_entry.spell_fades) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(spells_new_entry.range)); + update_values.push_back(columns[10] + " = " + std::to_string(spells_new_entry.aoerange)); + update_values.push_back(columns[11] + " = " + std::to_string(spells_new_entry.pushback)); + update_values.push_back(columns[12] + " = " + std::to_string(spells_new_entry.pushup)); + update_values.push_back(columns[13] + " = " + std::to_string(spells_new_entry.cast_time)); + update_values.push_back(columns[14] + " = " + std::to_string(spells_new_entry.recovery_time)); + update_values.push_back(columns[15] + " = " + std::to_string(spells_new_entry.recast_time)); + update_values.push_back(columns[16] + " = " + std::to_string(spells_new_entry.buffdurationformula)); + update_values.push_back(columns[17] + " = " + std::to_string(spells_new_entry.buffduration)); + update_values.push_back(columns[18] + " = " + std::to_string(spells_new_entry.AEDuration)); + update_values.push_back(columns[19] + " = " + std::to_string(spells_new_entry.mana)); + update_values.push_back(columns[20] + " = " + std::to_string(spells_new_entry.effect_base_value1)); + update_values.push_back(columns[21] + " = " + std::to_string(spells_new_entry.effect_base_value2)); + update_values.push_back(columns[22] + " = " + std::to_string(spells_new_entry.effect_base_value3)); + update_values.push_back(columns[23] + " = " + std::to_string(spells_new_entry.effect_base_value4)); + update_values.push_back(columns[24] + " = " + std::to_string(spells_new_entry.effect_base_value5)); + update_values.push_back(columns[25] + " = " + std::to_string(spells_new_entry.effect_base_value6)); + update_values.push_back(columns[26] + " = " + std::to_string(spells_new_entry.effect_base_value7)); + update_values.push_back(columns[27] + " = " + std::to_string(spells_new_entry.effect_base_value8)); + update_values.push_back(columns[28] + " = " + std::to_string(spells_new_entry.effect_base_value9)); + update_values.push_back(columns[29] + " = " + std::to_string(spells_new_entry.effect_base_value10)); + update_values.push_back(columns[30] + " = " + std::to_string(spells_new_entry.effect_base_value11)); + update_values.push_back(columns[31] + " = " + std::to_string(spells_new_entry.effect_base_value12)); + update_values.push_back(columns[32] + " = " + std::to_string(spells_new_entry.effect_limit_value1)); + update_values.push_back(columns[33] + " = " + std::to_string(spells_new_entry.effect_limit_value2)); + update_values.push_back(columns[34] + " = " + std::to_string(spells_new_entry.effect_limit_value3)); + update_values.push_back(columns[35] + " = " + std::to_string(spells_new_entry.effect_limit_value4)); + update_values.push_back(columns[36] + " = " + std::to_string(spells_new_entry.effect_limit_value5)); + update_values.push_back(columns[37] + " = " + std::to_string(spells_new_entry.effect_limit_value6)); + update_values.push_back(columns[38] + " = " + std::to_string(spells_new_entry.effect_limit_value7)); + update_values.push_back(columns[39] + " = " + std::to_string(spells_new_entry.effect_limit_value8)); + update_values.push_back(columns[40] + " = " + std::to_string(spells_new_entry.effect_limit_value9)); + update_values.push_back(columns[41] + " = " + std::to_string(spells_new_entry.effect_limit_value10)); + update_values.push_back(columns[42] + " = " + std::to_string(spells_new_entry.effect_limit_value11)); + update_values.push_back(columns[43] + " = " + std::to_string(spells_new_entry.effect_limit_value12)); + update_values.push_back(columns[44] + " = " + std::to_string(spells_new_entry.max1)); + update_values.push_back(columns[45] + " = " + std::to_string(spells_new_entry.max2)); + update_values.push_back(columns[46] + " = " + std::to_string(spells_new_entry.max3)); + update_values.push_back(columns[47] + " = " + std::to_string(spells_new_entry.max4)); + update_values.push_back(columns[48] + " = " + std::to_string(spells_new_entry.max5)); + update_values.push_back(columns[49] + " = " + std::to_string(spells_new_entry.max6)); + update_values.push_back(columns[50] + " = " + std::to_string(spells_new_entry.max7)); + update_values.push_back(columns[51] + " = " + std::to_string(spells_new_entry.max8)); + update_values.push_back(columns[52] + " = " + std::to_string(spells_new_entry.max9)); + update_values.push_back(columns[53] + " = " + std::to_string(spells_new_entry.max10)); + update_values.push_back(columns[54] + " = " + std::to_string(spells_new_entry.max11)); + update_values.push_back(columns[55] + " = " + std::to_string(spells_new_entry.max12)); + update_values.push_back(columns[56] + " = " + std::to_string(spells_new_entry.icon)); + update_values.push_back(columns[57] + " = " + std::to_string(spells_new_entry.memicon)); + update_values.push_back(columns[58] + " = " + std::to_string(spells_new_entry.components1)); + update_values.push_back(columns[59] + " = " + std::to_string(spells_new_entry.components2)); + update_values.push_back(columns[60] + " = " + std::to_string(spells_new_entry.components3)); + update_values.push_back(columns[61] + " = " + std::to_string(spells_new_entry.components4)); + update_values.push_back(columns[62] + " = " + std::to_string(spells_new_entry.component_counts1)); + update_values.push_back(columns[63] + " = " + std::to_string(spells_new_entry.component_counts2)); + update_values.push_back(columns[64] + " = " + std::to_string(spells_new_entry.component_counts3)); + update_values.push_back(columns[65] + " = " + std::to_string(spells_new_entry.component_counts4)); + update_values.push_back(columns[66] + " = " + std::to_string(spells_new_entry.NoexpendReagent1)); + update_values.push_back(columns[67] + " = " + std::to_string(spells_new_entry.NoexpendReagent2)); + update_values.push_back(columns[68] + " = " + std::to_string(spells_new_entry.NoexpendReagent3)); + update_values.push_back(columns[69] + " = " + std::to_string(spells_new_entry.NoexpendReagent4)); + update_values.push_back(columns[70] + " = " + std::to_string(spells_new_entry.formula1)); + update_values.push_back(columns[71] + " = " + std::to_string(spells_new_entry.formula2)); + update_values.push_back(columns[72] + " = " + std::to_string(spells_new_entry.formula3)); + update_values.push_back(columns[73] + " = " + std::to_string(spells_new_entry.formula4)); + update_values.push_back(columns[74] + " = " + std::to_string(spells_new_entry.formula5)); + update_values.push_back(columns[75] + " = " + std::to_string(spells_new_entry.formula6)); + update_values.push_back(columns[76] + " = " + std::to_string(spells_new_entry.formula7)); + update_values.push_back(columns[77] + " = " + std::to_string(spells_new_entry.formula8)); + update_values.push_back(columns[78] + " = " + std::to_string(spells_new_entry.formula9)); + update_values.push_back(columns[79] + " = " + std::to_string(spells_new_entry.formula10)); + update_values.push_back(columns[80] + " = " + std::to_string(spells_new_entry.formula11)); + update_values.push_back(columns[81] + " = " + std::to_string(spells_new_entry.formula12)); + update_values.push_back(columns[82] + " = " + std::to_string(spells_new_entry.LightType)); + update_values.push_back(columns[83] + " = " + std::to_string(spells_new_entry.goodEffect)); + update_values.push_back(columns[84] + " = " + std::to_string(spells_new_entry.Activated)); + update_values.push_back(columns[85] + " = " + std::to_string(spells_new_entry.resisttype)); + update_values.push_back(columns[86] + " = " + std::to_string(spells_new_entry.effectid1)); + update_values.push_back(columns[87] + " = " + std::to_string(spells_new_entry.effectid2)); + update_values.push_back(columns[88] + " = " + std::to_string(spells_new_entry.effectid3)); + update_values.push_back(columns[89] + " = " + std::to_string(spells_new_entry.effectid4)); + update_values.push_back(columns[90] + " = " + std::to_string(spells_new_entry.effectid5)); + update_values.push_back(columns[91] + " = " + std::to_string(spells_new_entry.effectid6)); + update_values.push_back(columns[92] + " = " + std::to_string(spells_new_entry.effectid7)); + update_values.push_back(columns[93] + " = " + std::to_string(spells_new_entry.effectid8)); + update_values.push_back(columns[94] + " = " + std::to_string(spells_new_entry.effectid9)); + update_values.push_back(columns[95] + " = " + std::to_string(spells_new_entry.effectid10)); + update_values.push_back(columns[96] + " = " + std::to_string(spells_new_entry.effectid11)); + update_values.push_back(columns[97] + " = " + std::to_string(spells_new_entry.effectid12)); + update_values.push_back(columns[98] + " = " + std::to_string(spells_new_entry.targettype)); + update_values.push_back(columns[99] + " = " + std::to_string(spells_new_entry.basediff)); + update_values.push_back(columns[100] + " = " + std::to_string(spells_new_entry.skill)); + update_values.push_back(columns[101] + " = " + std::to_string(spells_new_entry.zonetype)); + update_values.push_back(columns[102] + " = " + std::to_string(spells_new_entry.EnvironmentType)); + update_values.push_back(columns[103] + " = " + std::to_string(spells_new_entry.TimeOfDay)); + update_values.push_back(columns[104] + " = " + std::to_string(spells_new_entry.classes1)); + update_values.push_back(columns[105] + " = " + std::to_string(spells_new_entry.classes2)); + update_values.push_back(columns[106] + " = " + std::to_string(spells_new_entry.classes3)); + update_values.push_back(columns[107] + " = " + std::to_string(spells_new_entry.classes4)); + update_values.push_back(columns[108] + " = " + std::to_string(spells_new_entry.classes5)); + update_values.push_back(columns[109] + " = " + std::to_string(spells_new_entry.classes6)); + update_values.push_back(columns[110] + " = " + std::to_string(spells_new_entry.classes7)); + update_values.push_back(columns[111] + " = " + std::to_string(spells_new_entry.classes8)); + update_values.push_back(columns[112] + " = " + std::to_string(spells_new_entry.classes9)); + update_values.push_back(columns[113] + " = " + std::to_string(spells_new_entry.classes10)); + update_values.push_back(columns[114] + " = " + std::to_string(spells_new_entry.classes11)); + update_values.push_back(columns[115] + " = " + std::to_string(spells_new_entry.classes12)); + update_values.push_back(columns[116] + " = " + std::to_string(spells_new_entry.classes13)); + update_values.push_back(columns[117] + " = " + std::to_string(spells_new_entry.classes14)); + update_values.push_back(columns[118] + " = " + std::to_string(spells_new_entry.classes15)); + update_values.push_back(columns[119] + " = " + std::to_string(spells_new_entry.classes16)); + update_values.push_back(columns[120] + " = " + std::to_string(spells_new_entry.CastingAnim)); + update_values.push_back(columns[121] + " = " + std::to_string(spells_new_entry.TargetAnim)); + update_values.push_back(columns[122] + " = " + std::to_string(spells_new_entry.TravelType)); + update_values.push_back(columns[123] + " = " + std::to_string(spells_new_entry.SpellAffectIndex)); + update_values.push_back(columns[124] + " = " + std::to_string(spells_new_entry.disallow_sit)); + update_values.push_back(columns[125] + " = " + std::to_string(spells_new_entry.deities0)); + update_values.push_back(columns[126] + " = " + std::to_string(spells_new_entry.deities1)); + update_values.push_back(columns[127] + " = " + std::to_string(spells_new_entry.deities2)); + update_values.push_back(columns[128] + " = " + std::to_string(spells_new_entry.deities3)); + update_values.push_back(columns[129] + " = " + std::to_string(spells_new_entry.deities4)); + update_values.push_back(columns[130] + " = " + std::to_string(spells_new_entry.deities5)); + update_values.push_back(columns[131] + " = " + std::to_string(spells_new_entry.deities6)); + update_values.push_back(columns[132] + " = " + std::to_string(spells_new_entry.deities7)); + update_values.push_back(columns[133] + " = " + std::to_string(spells_new_entry.deities8)); + update_values.push_back(columns[134] + " = " + std::to_string(spells_new_entry.deities9)); + update_values.push_back(columns[135] + " = " + std::to_string(spells_new_entry.deities10)); + update_values.push_back(columns[136] + " = " + std::to_string(spells_new_entry.deities11)); + update_values.push_back(columns[137] + " = " + std::to_string(spells_new_entry.deities12)); + update_values.push_back(columns[138] + " = " + std::to_string(spells_new_entry.deities13)); + update_values.push_back(columns[139] + " = " + std::to_string(spells_new_entry.deities14)); + update_values.push_back(columns[140] + " = " + std::to_string(spells_new_entry.deities15)); + update_values.push_back(columns[141] + " = " + std::to_string(spells_new_entry.deities16)); + update_values.push_back(columns[142] + " = " + std::to_string(spells_new_entry.field142)); + update_values.push_back(columns[143] + " = " + std::to_string(spells_new_entry.field143)); + update_values.push_back(columns[144] + " = " + std::to_string(spells_new_entry.new_icon)); + update_values.push_back(columns[145] + " = " + std::to_string(spells_new_entry.spellanim)); + update_values.push_back(columns[146] + " = " + std::to_string(spells_new_entry.uninterruptable)); + update_values.push_back(columns[147] + " = " + std::to_string(spells_new_entry.ResistDiff)); + update_values.push_back(columns[148] + " = " + std::to_string(spells_new_entry.dot_stacking_exempt)); + update_values.push_back(columns[149] + " = " + std::to_string(spells_new_entry.deleteable)); + update_values.push_back(columns[150] + " = " + std::to_string(spells_new_entry.RecourseLink)); + update_values.push_back(columns[151] + " = " + std::to_string(spells_new_entry.no_partial_resist)); + update_values.push_back(columns[152] + " = " + std::to_string(spells_new_entry.field152)); + update_values.push_back(columns[153] + " = " + std::to_string(spells_new_entry.field153)); + update_values.push_back(columns[154] + " = " + std::to_string(spells_new_entry.short_buff_box)); + update_values.push_back(columns[155] + " = " + std::to_string(spells_new_entry.descnum)); + update_values.push_back(columns[156] + " = " + std::to_string(spells_new_entry.typedescnum)); + update_values.push_back(columns[157] + " = " + std::to_string(spells_new_entry.effectdescnum)); + update_values.push_back(columns[158] + " = " + std::to_string(spells_new_entry.effectdescnum2)); + update_values.push_back(columns[159] + " = " + std::to_string(spells_new_entry.npc_no_los)); + update_values.push_back(columns[160] + " = " + std::to_string(spells_new_entry.field160)); + update_values.push_back(columns[161] + " = " + std::to_string(spells_new_entry.reflectable)); + update_values.push_back(columns[162] + " = " + std::to_string(spells_new_entry.bonushate)); + update_values.push_back(columns[163] + " = " + std::to_string(spells_new_entry.field163)); + update_values.push_back(columns[164] + " = " + std::to_string(spells_new_entry.field164)); + update_values.push_back(columns[165] + " = " + std::to_string(spells_new_entry.ldon_trap)); + update_values.push_back(columns[166] + " = " + std::to_string(spells_new_entry.EndurCost)); + update_values.push_back(columns[167] + " = " + std::to_string(spells_new_entry.EndurTimerIndex)); + update_values.push_back(columns[168] + " = " + std::to_string(spells_new_entry.IsDiscipline)); + update_values.push_back(columns[169] + " = " + std::to_string(spells_new_entry.field169)); + update_values.push_back(columns[170] + " = " + std::to_string(spells_new_entry.field170)); + update_values.push_back(columns[171] + " = " + std::to_string(spells_new_entry.field171)); + update_values.push_back(columns[172] + " = " + std::to_string(spells_new_entry.field172)); + update_values.push_back(columns[173] + " = " + std::to_string(spells_new_entry.HateAdded)); + update_values.push_back(columns[174] + " = " + std::to_string(spells_new_entry.EndurUpkeep)); + update_values.push_back(columns[175] + " = " + std::to_string(spells_new_entry.numhitstype)); + update_values.push_back(columns[176] + " = " + std::to_string(spells_new_entry.numhits)); + update_values.push_back(columns[177] + " = " + std::to_string(spells_new_entry.pvpresistbase)); + update_values.push_back(columns[178] + " = " + std::to_string(spells_new_entry.pvpresistcalc)); + update_values.push_back(columns[179] + " = " + std::to_string(spells_new_entry.pvpresistcap)); + update_values.push_back(columns[180] + " = " + std::to_string(spells_new_entry.spell_category)); + update_values.push_back(columns[181] + " = " + std::to_string(spells_new_entry.field181)); + update_values.push_back(columns[182] + " = " + std::to_string(spells_new_entry.field182)); + update_values.push_back(columns[183] + " = " + std::to_string(spells_new_entry.pcnpc_only_flag)); + update_values.push_back(columns[184] + " = " + std::to_string(spells_new_entry.cast_not_standing)); + update_values.push_back(columns[185] + " = " + std::to_string(spells_new_entry.can_mgb)); + update_values.push_back(columns[186] + " = " + std::to_string(spells_new_entry.nodispell)); + update_values.push_back(columns[187] + " = " + std::to_string(spells_new_entry.npc_category)); + update_values.push_back(columns[188] + " = " + std::to_string(spells_new_entry.npc_usefulness)); + update_values.push_back(columns[189] + " = " + std::to_string(spells_new_entry.MinResist)); + update_values.push_back(columns[190] + " = " + std::to_string(spells_new_entry.MaxResist)); + update_values.push_back(columns[191] + " = " + std::to_string(spells_new_entry.viral_targets)); + update_values.push_back(columns[192] + " = " + std::to_string(spells_new_entry.viral_timer)); + update_values.push_back(columns[193] + " = " + std::to_string(spells_new_entry.nimbuseffect)); + update_values.push_back(columns[194] + " = " + std::to_string(spells_new_entry.ConeStartAngle)); + update_values.push_back(columns[195] + " = " + std::to_string(spells_new_entry.ConeStopAngle)); + update_values.push_back(columns[196] + " = " + std::to_string(spells_new_entry.sneaking)); + update_values.push_back(columns[197] + " = " + std::to_string(spells_new_entry.not_extendable)); + update_values.push_back(columns[198] + " = " + std::to_string(spells_new_entry.field198)); + update_values.push_back(columns[199] + " = " + std::to_string(spells_new_entry.field199)); + update_values.push_back(columns[200] + " = " + std::to_string(spells_new_entry.suspendable)); + update_values.push_back(columns[201] + " = " + std::to_string(spells_new_entry.viral_range)); + update_values.push_back(columns[202] + " = " + std::to_string(spells_new_entry.songcap)); + update_values.push_back(columns[203] + " = " + std::to_string(spells_new_entry.field203)); + update_values.push_back(columns[204] + " = " + std::to_string(spells_new_entry.field204)); + update_values.push_back(columns[205] + " = " + std::to_string(spells_new_entry.no_block)); + update_values.push_back(columns[206] + " = " + std::to_string(spells_new_entry.field206)); + update_values.push_back(columns[207] + " = " + std::to_string(spells_new_entry.spellgroup)); + update_values.push_back(columns[208] + " = " + std::to_string(spells_new_entry.rank)); + update_values.push_back(columns[209] + " = " + std::to_string(spells_new_entry.field209)); + update_values.push_back(columns[210] + " = " + std::to_string(spells_new_entry.field210)); + update_values.push_back(columns[211] + " = " + std::to_string(spells_new_entry.CastRestriction)); + update_values.push_back(columns[212] + " = " + std::to_string(spells_new_entry.allowrest)); + update_values.push_back(columns[213] + " = " + std::to_string(spells_new_entry.InCombat)); + update_values.push_back(columns[214] + " = " + std::to_string(spells_new_entry.OutofCombat)); + update_values.push_back(columns[215] + " = " + std::to_string(spells_new_entry.field215)); + update_values.push_back(columns[216] + " = " + std::to_string(spells_new_entry.field216)); + update_values.push_back(columns[217] + " = " + std::to_string(spells_new_entry.field217)); + update_values.push_back(columns[218] + " = " + std::to_string(spells_new_entry.aemaxtargets)); + update_values.push_back(columns[219] + " = " + std::to_string(spells_new_entry.maxtargets)); + update_values.push_back(columns[220] + " = " + std::to_string(spells_new_entry.field220)); + update_values.push_back(columns[221] + " = " + std::to_string(spells_new_entry.field221)); + update_values.push_back(columns[222] + " = " + std::to_string(spells_new_entry.field222)); + update_values.push_back(columns[223] + " = " + std::to_string(spells_new_entry.field223)); + update_values.push_back(columns[224] + " = " + std::to_string(spells_new_entry.persistdeath)); + update_values.push_back(columns[225] + " = " + std::to_string(spells_new_entry.field225)); + update_values.push_back(columns[226] + " = " + std::to_string(spells_new_entry.field226)); + update_values.push_back(columns[227] + " = '" + EscapeString(spells_new_entry.min_dist) + "'"); + update_values.push_back(columns[228] + " = '" + EscapeString(spells_new_entry.min_dist_mod) + "'"); + update_values.push_back(columns[229] + " = '" + EscapeString(spells_new_entry.max_dist) + "'"); + update_values.push_back(columns[230] + " = '" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + update_values.push_back(columns[231] + " = " + std::to_string(spells_new_entry.min_range)); + update_values.push_back(columns[232] + " = " + std::to_string(spells_new_entry.field232)); + update_values.push_back(columns[233] + " = " + std::to_string(spells_new_entry.field233)); + update_values.push_back(columns[234] + " = " + std::to_string(spells_new_entry.field234)); + update_values.push_back(columns[235] + " = " + std::to_string(spells_new_entry.field235)); + update_values.push_back(columns[236] + " = " + std::to_string(spells_new_entry.field236)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spells_new_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellsNew InsertOne( + SpellsNew spells_new_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.range)); + insert_values.push_back(std::to_string(spells_new_entry.aoerange)); + insert_values.push_back(std::to_string(spells_new_entry.pushback)); + insert_values.push_back(std::to_string(spells_new_entry.pushup)); + insert_values.push_back(std::to_string(spells_new_entry.cast_time)); + insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); + insert_values.push_back(std::to_string(spells_new_entry.recast_time)); + insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); + insert_values.push_back(std::to_string(spells_new_entry.buffduration)); + insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); + insert_values.push_back(std::to_string(spells_new_entry.mana)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); + insert_values.push_back(std::to_string(spells_new_entry.max1)); + insert_values.push_back(std::to_string(spells_new_entry.max2)); + insert_values.push_back(std::to_string(spells_new_entry.max3)); + insert_values.push_back(std::to_string(spells_new_entry.max4)); + insert_values.push_back(std::to_string(spells_new_entry.max5)); + insert_values.push_back(std::to_string(spells_new_entry.max6)); + insert_values.push_back(std::to_string(spells_new_entry.max7)); + insert_values.push_back(std::to_string(spells_new_entry.max8)); + insert_values.push_back(std::to_string(spells_new_entry.max9)); + insert_values.push_back(std::to_string(spells_new_entry.max10)); + insert_values.push_back(std::to_string(spells_new_entry.max11)); + insert_values.push_back(std::to_string(spells_new_entry.max12)); + insert_values.push_back(std::to_string(spells_new_entry.icon)); + insert_values.push_back(std::to_string(spells_new_entry.memicon)); + insert_values.push_back(std::to_string(spells_new_entry.components1)); + insert_values.push_back(std::to_string(spells_new_entry.components2)); + insert_values.push_back(std::to_string(spells_new_entry.components3)); + insert_values.push_back(std::to_string(spells_new_entry.components4)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); + insert_values.push_back(std::to_string(spells_new_entry.formula1)); + insert_values.push_back(std::to_string(spells_new_entry.formula2)); + insert_values.push_back(std::to_string(spells_new_entry.formula3)); + insert_values.push_back(std::to_string(spells_new_entry.formula4)); + insert_values.push_back(std::to_string(spells_new_entry.formula5)); + insert_values.push_back(std::to_string(spells_new_entry.formula6)); + insert_values.push_back(std::to_string(spells_new_entry.formula7)); + insert_values.push_back(std::to_string(spells_new_entry.formula8)); + insert_values.push_back(std::to_string(spells_new_entry.formula9)); + insert_values.push_back(std::to_string(spells_new_entry.formula10)); + insert_values.push_back(std::to_string(spells_new_entry.formula11)); + insert_values.push_back(std::to_string(spells_new_entry.formula12)); + insert_values.push_back(std::to_string(spells_new_entry.LightType)); + insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); + insert_values.push_back(std::to_string(spells_new_entry.Activated)); + insert_values.push_back(std::to_string(spells_new_entry.resisttype)); + insert_values.push_back(std::to_string(spells_new_entry.effectid1)); + insert_values.push_back(std::to_string(spells_new_entry.effectid2)); + insert_values.push_back(std::to_string(spells_new_entry.effectid3)); + insert_values.push_back(std::to_string(spells_new_entry.effectid4)); + insert_values.push_back(std::to_string(spells_new_entry.effectid5)); + insert_values.push_back(std::to_string(spells_new_entry.effectid6)); + insert_values.push_back(std::to_string(spells_new_entry.effectid7)); + insert_values.push_back(std::to_string(spells_new_entry.effectid8)); + insert_values.push_back(std::to_string(spells_new_entry.effectid9)); + insert_values.push_back(std::to_string(spells_new_entry.effectid10)); + insert_values.push_back(std::to_string(spells_new_entry.effectid11)); + insert_values.push_back(std::to_string(spells_new_entry.effectid12)); + insert_values.push_back(std::to_string(spells_new_entry.targettype)); + insert_values.push_back(std::to_string(spells_new_entry.basediff)); + insert_values.push_back(std::to_string(spells_new_entry.skill)); + insert_values.push_back(std::to_string(spells_new_entry.zonetype)); + insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); + insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); + insert_values.push_back(std::to_string(spells_new_entry.classes1)); + insert_values.push_back(std::to_string(spells_new_entry.classes2)); + insert_values.push_back(std::to_string(spells_new_entry.classes3)); + insert_values.push_back(std::to_string(spells_new_entry.classes4)); + insert_values.push_back(std::to_string(spells_new_entry.classes5)); + insert_values.push_back(std::to_string(spells_new_entry.classes6)); + insert_values.push_back(std::to_string(spells_new_entry.classes7)); + insert_values.push_back(std::to_string(spells_new_entry.classes8)); + insert_values.push_back(std::to_string(spells_new_entry.classes9)); + insert_values.push_back(std::to_string(spells_new_entry.classes10)); + insert_values.push_back(std::to_string(spells_new_entry.classes11)); + insert_values.push_back(std::to_string(spells_new_entry.classes12)); + insert_values.push_back(std::to_string(spells_new_entry.classes13)); + insert_values.push_back(std::to_string(spells_new_entry.classes14)); + insert_values.push_back(std::to_string(spells_new_entry.classes15)); + insert_values.push_back(std::to_string(spells_new_entry.classes16)); + insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TravelType)); + insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); + insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); + insert_values.push_back(std::to_string(spells_new_entry.deities0)); + insert_values.push_back(std::to_string(spells_new_entry.deities1)); + insert_values.push_back(std::to_string(spells_new_entry.deities2)); + insert_values.push_back(std::to_string(spells_new_entry.deities3)); + insert_values.push_back(std::to_string(spells_new_entry.deities4)); + insert_values.push_back(std::to_string(spells_new_entry.deities5)); + insert_values.push_back(std::to_string(spells_new_entry.deities6)); + insert_values.push_back(std::to_string(spells_new_entry.deities7)); + insert_values.push_back(std::to_string(spells_new_entry.deities8)); + insert_values.push_back(std::to_string(spells_new_entry.deities9)); + insert_values.push_back(std::to_string(spells_new_entry.deities10)); + insert_values.push_back(std::to_string(spells_new_entry.deities11)); + insert_values.push_back(std::to_string(spells_new_entry.deities12)); + insert_values.push_back(std::to_string(spells_new_entry.deities13)); + insert_values.push_back(std::to_string(spells_new_entry.deities14)); + insert_values.push_back(std::to_string(spells_new_entry.deities15)); + insert_values.push_back(std::to_string(spells_new_entry.deities16)); + insert_values.push_back(std::to_string(spells_new_entry.field142)); + insert_values.push_back(std::to_string(spells_new_entry.field143)); + insert_values.push_back(std::to_string(spells_new_entry.new_icon)); + insert_values.push_back(std::to_string(spells_new_entry.spellanim)); + insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); + insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); + insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); + insert_values.push_back(std::to_string(spells_new_entry.deleteable)); + insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); + insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); + insert_values.push_back(std::to_string(spells_new_entry.field152)); + insert_values.push_back(std::to_string(spells_new_entry.field153)); + insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); + insert_values.push_back(std::to_string(spells_new_entry.descnum)); + insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); + insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); + insert_values.push_back(std::to_string(spells_new_entry.field160)); + insert_values.push_back(std::to_string(spells_new_entry.reflectable)); + insert_values.push_back(std::to_string(spells_new_entry.bonushate)); + insert_values.push_back(std::to_string(spells_new_entry.field163)); + insert_values.push_back(std::to_string(spells_new_entry.field164)); + insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); + insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); + insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); + insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); + insert_values.push_back(std::to_string(spells_new_entry.field169)); + insert_values.push_back(std::to_string(spells_new_entry.field170)); + insert_values.push_back(std::to_string(spells_new_entry.field171)); + insert_values.push_back(std::to_string(spells_new_entry.field172)); + insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); + insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); + insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); + insert_values.push_back(std::to_string(spells_new_entry.numhits)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); + insert_values.push_back(std::to_string(spells_new_entry.spell_category)); + insert_values.push_back(std::to_string(spells_new_entry.field181)); + insert_values.push_back(std::to_string(spells_new_entry.field182)); + insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); + insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); + insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); + insert_values.push_back(std::to_string(spells_new_entry.nodispell)); + insert_values.push_back(std::to_string(spells_new_entry.npc_category)); + insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); + insert_values.push_back(std::to_string(spells_new_entry.MinResist)); + insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); + insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); + insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); + insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); + insert_values.push_back(std::to_string(spells_new_entry.sneaking)); + insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); + insert_values.push_back(std::to_string(spells_new_entry.field198)); + insert_values.push_back(std::to_string(spells_new_entry.field199)); + insert_values.push_back(std::to_string(spells_new_entry.suspendable)); + insert_values.push_back(std::to_string(spells_new_entry.viral_range)); + insert_values.push_back(std::to_string(spells_new_entry.songcap)); + insert_values.push_back(std::to_string(spells_new_entry.field203)); + insert_values.push_back(std::to_string(spells_new_entry.field204)); + insert_values.push_back(std::to_string(spells_new_entry.no_block)); + insert_values.push_back(std::to_string(spells_new_entry.field206)); + insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); + insert_values.push_back(std::to_string(spells_new_entry.rank)); + insert_values.push_back(std::to_string(spells_new_entry.field209)); + insert_values.push_back(std::to_string(spells_new_entry.field210)); + insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); + insert_values.push_back(std::to_string(spells_new_entry.allowrest)); + insert_values.push_back(std::to_string(spells_new_entry.InCombat)); + insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); + insert_values.push_back(std::to_string(spells_new_entry.field215)); + insert_values.push_back(std::to_string(spells_new_entry.field216)); + insert_values.push_back(std::to_string(spells_new_entry.field217)); + insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.field220)); + insert_values.push_back(std::to_string(spells_new_entry.field221)); + insert_values.push_back(std::to_string(spells_new_entry.field222)); + insert_values.push_back(std::to_string(spells_new_entry.field223)); + insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); + insert_values.push_back(std::to_string(spells_new_entry.field225)); + insert_values.push_back(std::to_string(spells_new_entry.field226)); + insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist_mod) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.min_range)); + insert_values.push_back(std::to_string(spells_new_entry.field232)); + insert_values.push_back(std::to_string(spells_new_entry.field233)); + insert_values.push_back(std::to_string(spells_new_entry.field234)); + insert_values.push_back(std::to_string(spells_new_entry.field235)); + insert_values.push_back(std::to_string(spells_new_entry.field236)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spells_new_entry.id = results.LastInsertedID(); + return spells_new_entry; + } + + spells_new_entry = InstanceListRepository::NewEntity(); + + return spells_new_entry; + } + + static int InsertMany( + std::vector spells_new_entries + ) + { + std::vector insert_chunks; + + for (auto &spells_new_entry: spells_new_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.range)); + insert_values.push_back(std::to_string(spells_new_entry.aoerange)); + insert_values.push_back(std::to_string(spells_new_entry.pushback)); + insert_values.push_back(std::to_string(spells_new_entry.pushup)); + insert_values.push_back(std::to_string(spells_new_entry.cast_time)); + insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); + insert_values.push_back(std::to_string(spells_new_entry.recast_time)); + insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); + insert_values.push_back(std::to_string(spells_new_entry.buffduration)); + insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); + insert_values.push_back(std::to_string(spells_new_entry.mana)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); + insert_values.push_back(std::to_string(spells_new_entry.max1)); + insert_values.push_back(std::to_string(spells_new_entry.max2)); + insert_values.push_back(std::to_string(spells_new_entry.max3)); + insert_values.push_back(std::to_string(spells_new_entry.max4)); + insert_values.push_back(std::to_string(spells_new_entry.max5)); + insert_values.push_back(std::to_string(spells_new_entry.max6)); + insert_values.push_back(std::to_string(spells_new_entry.max7)); + insert_values.push_back(std::to_string(spells_new_entry.max8)); + insert_values.push_back(std::to_string(spells_new_entry.max9)); + insert_values.push_back(std::to_string(spells_new_entry.max10)); + insert_values.push_back(std::to_string(spells_new_entry.max11)); + insert_values.push_back(std::to_string(spells_new_entry.max12)); + insert_values.push_back(std::to_string(spells_new_entry.icon)); + insert_values.push_back(std::to_string(spells_new_entry.memicon)); + insert_values.push_back(std::to_string(spells_new_entry.components1)); + insert_values.push_back(std::to_string(spells_new_entry.components2)); + insert_values.push_back(std::to_string(spells_new_entry.components3)); + insert_values.push_back(std::to_string(spells_new_entry.components4)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); + insert_values.push_back(std::to_string(spells_new_entry.formula1)); + insert_values.push_back(std::to_string(spells_new_entry.formula2)); + insert_values.push_back(std::to_string(spells_new_entry.formula3)); + insert_values.push_back(std::to_string(spells_new_entry.formula4)); + insert_values.push_back(std::to_string(spells_new_entry.formula5)); + insert_values.push_back(std::to_string(spells_new_entry.formula6)); + insert_values.push_back(std::to_string(spells_new_entry.formula7)); + insert_values.push_back(std::to_string(spells_new_entry.formula8)); + insert_values.push_back(std::to_string(spells_new_entry.formula9)); + insert_values.push_back(std::to_string(spells_new_entry.formula10)); + insert_values.push_back(std::to_string(spells_new_entry.formula11)); + insert_values.push_back(std::to_string(spells_new_entry.formula12)); + insert_values.push_back(std::to_string(spells_new_entry.LightType)); + insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); + insert_values.push_back(std::to_string(spells_new_entry.Activated)); + insert_values.push_back(std::to_string(spells_new_entry.resisttype)); + insert_values.push_back(std::to_string(spells_new_entry.effectid1)); + insert_values.push_back(std::to_string(spells_new_entry.effectid2)); + insert_values.push_back(std::to_string(spells_new_entry.effectid3)); + insert_values.push_back(std::to_string(spells_new_entry.effectid4)); + insert_values.push_back(std::to_string(spells_new_entry.effectid5)); + insert_values.push_back(std::to_string(spells_new_entry.effectid6)); + insert_values.push_back(std::to_string(spells_new_entry.effectid7)); + insert_values.push_back(std::to_string(spells_new_entry.effectid8)); + insert_values.push_back(std::to_string(spells_new_entry.effectid9)); + insert_values.push_back(std::to_string(spells_new_entry.effectid10)); + insert_values.push_back(std::to_string(spells_new_entry.effectid11)); + insert_values.push_back(std::to_string(spells_new_entry.effectid12)); + insert_values.push_back(std::to_string(spells_new_entry.targettype)); + insert_values.push_back(std::to_string(spells_new_entry.basediff)); + insert_values.push_back(std::to_string(spells_new_entry.skill)); + insert_values.push_back(std::to_string(spells_new_entry.zonetype)); + insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); + insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); + insert_values.push_back(std::to_string(spells_new_entry.classes1)); + insert_values.push_back(std::to_string(spells_new_entry.classes2)); + insert_values.push_back(std::to_string(spells_new_entry.classes3)); + insert_values.push_back(std::to_string(spells_new_entry.classes4)); + insert_values.push_back(std::to_string(spells_new_entry.classes5)); + insert_values.push_back(std::to_string(spells_new_entry.classes6)); + insert_values.push_back(std::to_string(spells_new_entry.classes7)); + insert_values.push_back(std::to_string(spells_new_entry.classes8)); + insert_values.push_back(std::to_string(spells_new_entry.classes9)); + insert_values.push_back(std::to_string(spells_new_entry.classes10)); + insert_values.push_back(std::to_string(spells_new_entry.classes11)); + insert_values.push_back(std::to_string(spells_new_entry.classes12)); + insert_values.push_back(std::to_string(spells_new_entry.classes13)); + insert_values.push_back(std::to_string(spells_new_entry.classes14)); + insert_values.push_back(std::to_string(spells_new_entry.classes15)); + insert_values.push_back(std::to_string(spells_new_entry.classes16)); + insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TravelType)); + insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); + insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); + insert_values.push_back(std::to_string(spells_new_entry.deities0)); + insert_values.push_back(std::to_string(spells_new_entry.deities1)); + insert_values.push_back(std::to_string(spells_new_entry.deities2)); + insert_values.push_back(std::to_string(spells_new_entry.deities3)); + insert_values.push_back(std::to_string(spells_new_entry.deities4)); + insert_values.push_back(std::to_string(spells_new_entry.deities5)); + insert_values.push_back(std::to_string(spells_new_entry.deities6)); + insert_values.push_back(std::to_string(spells_new_entry.deities7)); + insert_values.push_back(std::to_string(spells_new_entry.deities8)); + insert_values.push_back(std::to_string(spells_new_entry.deities9)); + insert_values.push_back(std::to_string(spells_new_entry.deities10)); + insert_values.push_back(std::to_string(spells_new_entry.deities11)); + insert_values.push_back(std::to_string(spells_new_entry.deities12)); + insert_values.push_back(std::to_string(spells_new_entry.deities13)); + insert_values.push_back(std::to_string(spells_new_entry.deities14)); + insert_values.push_back(std::to_string(spells_new_entry.deities15)); + insert_values.push_back(std::to_string(spells_new_entry.deities16)); + insert_values.push_back(std::to_string(spells_new_entry.field142)); + insert_values.push_back(std::to_string(spells_new_entry.field143)); + insert_values.push_back(std::to_string(spells_new_entry.new_icon)); + insert_values.push_back(std::to_string(spells_new_entry.spellanim)); + insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); + insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); + insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); + insert_values.push_back(std::to_string(spells_new_entry.deleteable)); + insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); + insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); + insert_values.push_back(std::to_string(spells_new_entry.field152)); + insert_values.push_back(std::to_string(spells_new_entry.field153)); + insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); + insert_values.push_back(std::to_string(spells_new_entry.descnum)); + insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); + insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); + insert_values.push_back(std::to_string(spells_new_entry.field160)); + insert_values.push_back(std::to_string(spells_new_entry.reflectable)); + insert_values.push_back(std::to_string(spells_new_entry.bonushate)); + insert_values.push_back(std::to_string(spells_new_entry.field163)); + insert_values.push_back(std::to_string(spells_new_entry.field164)); + insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); + insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); + insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); + insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); + insert_values.push_back(std::to_string(spells_new_entry.field169)); + insert_values.push_back(std::to_string(spells_new_entry.field170)); + insert_values.push_back(std::to_string(spells_new_entry.field171)); + insert_values.push_back(std::to_string(spells_new_entry.field172)); + insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); + insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); + insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); + insert_values.push_back(std::to_string(spells_new_entry.numhits)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); + insert_values.push_back(std::to_string(spells_new_entry.spell_category)); + insert_values.push_back(std::to_string(spells_new_entry.field181)); + insert_values.push_back(std::to_string(spells_new_entry.field182)); + insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); + insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); + insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); + insert_values.push_back(std::to_string(spells_new_entry.nodispell)); + insert_values.push_back(std::to_string(spells_new_entry.npc_category)); + insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); + insert_values.push_back(std::to_string(spells_new_entry.MinResist)); + insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); + insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); + insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); + insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); + insert_values.push_back(std::to_string(spells_new_entry.sneaking)); + insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); + insert_values.push_back(std::to_string(spells_new_entry.field198)); + insert_values.push_back(std::to_string(spells_new_entry.field199)); + insert_values.push_back(std::to_string(spells_new_entry.suspendable)); + insert_values.push_back(std::to_string(spells_new_entry.viral_range)); + insert_values.push_back(std::to_string(spells_new_entry.songcap)); + insert_values.push_back(std::to_string(spells_new_entry.field203)); + insert_values.push_back(std::to_string(spells_new_entry.field204)); + insert_values.push_back(std::to_string(spells_new_entry.no_block)); + insert_values.push_back(std::to_string(spells_new_entry.field206)); + insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); + insert_values.push_back(std::to_string(spells_new_entry.rank)); + insert_values.push_back(std::to_string(spells_new_entry.field209)); + insert_values.push_back(std::to_string(spells_new_entry.field210)); + insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); + insert_values.push_back(std::to_string(spells_new_entry.allowrest)); + insert_values.push_back(std::to_string(spells_new_entry.InCombat)); + insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); + insert_values.push_back(std::to_string(spells_new_entry.field215)); + insert_values.push_back(std::to_string(spells_new_entry.field216)); + insert_values.push_back(std::to_string(spells_new_entry.field217)); + insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.field220)); + insert_values.push_back(std::to_string(spells_new_entry.field221)); + insert_values.push_back(std::to_string(spells_new_entry.field222)); + insert_values.push_back(std::to_string(spells_new_entry.field223)); + insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); + insert_values.push_back(std::to_string(spells_new_entry.field225)); + insert_values.push_back(std::to_string(spells_new_entry.field226)); + insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist_mod) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.min_range)); + insert_values.push_back(std::to_string(spells_new_entry.field232)); + insert_values.push_back(std::to_string(spells_new_entry.field233)); + insert_values.push_back(std::to_string(spells_new_entry.field234)); + insert_values.push_back(std::to_string(spells_new_entry.field235)); + insert_values.push_back(std::to_string(spells_new_entry.field236)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.player_1 = row[2]; + entry.teleport_zone = row[3]; + entry.you_cast = row[4]; + entry.other_casts = row[5]; + entry.cast_on_you = row[6]; + entry.cast_on_other = row[7]; + entry.spell_fades = row[8]; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_SPELLS_NEW_REPOSITORY_H diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h new file mode 100644 index 000000000..1ff8c1a27 --- /dev/null +++ b/common/repositories/start_zones_repository.h @@ -0,0 +1,353 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_START_ZONES_REPOSITORY_H +#define EQEMU_START_ZONES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class StartZonesRepository { +public: + struct StartZones { + std::string x; + std::string y; + std::string z; + std::string heading; + int zone_id; + int bind_id; + int player_choice; + int player_class; + int player_deity; + int player_race; + int start_zone; + std::string bind_x; + std::string bind_y; + std::string bind_z; + int8 select_rank; + }; + + static std::string PrimaryKey() + { + return std::string("player_race"); + } + + static std::vector Columns() + { + return { + "x", + "y", + "z", + "heading", + "zone_id", + "bind_id", + "player_choice", + "player_class", + "player_deity", + "player_race", + "start_zone", + "bind_x", + "bind_y", + "bind_z", + "select_rank", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("start_zones"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static StartZones NewEntity() + { + StartZones entry{}; + + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.zone_id = 0; + entry.bind_id = 0; + entry.player_choice = 0; + entry.player_class = 0; + entry.player_deity = 0; + entry.player_race = 0; + entry.start_zone = 0; + entry.bind_x = 0; + entry.bind_y = 0; + entry.bind_z = 0; + entry.select_rank = 50; + + return entry; + } + + static StartZones GetStartZonesEntry( + const std::vector &start_zoness, + int start_zones_id + ) + { + for (auto &start_zones : start_zoness) { + if (start_zones.player_race == start_zones_id) { + return start_zones; + } + } + + return NewEntity(); + } + + static StartZones FindOne( + int start_zones_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + start_zones_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int start_zones_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + start_zones_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + StartZones start_zones_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(start_zones_entry.x) + "'"); + update_values.push_back(columns[1] + " = '" + EscapeString(start_zones_entry.y) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(start_zones_entry.z) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(start_zones_entry.heading) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(start_zones_entry.zone_id)); + update_values.push_back(columns[5] + " = " + std::to_string(start_zones_entry.bind_id)); + update_values.push_back(columns[10] + " = " + std::to_string(start_zones_entry.start_zone)); + update_values.push_back(columns[11] + " = '" + EscapeString(start_zones_entry.bind_x) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(start_zones_entry.bind_y) + "'"); + update_values.push_back(columns[13] + " = '" + EscapeString(start_zones_entry.bind_z) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(start_zones_entry.select_rank)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + start_zones_entry.player_race + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static StartZones InsertOne( + StartZones start_zones_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(start_zones_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.heading) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.zone_id)); + insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.start_zone)); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_x) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_y) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_z) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.select_rank)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + start_zones_entry.id = results.LastInsertedID(); + return start_zones_entry; + } + + start_zones_entry = InstanceListRepository::NewEntity(); + + return start_zones_entry; + } + + static int InsertMany( + std::vector start_zones_entries + ) + { + std::vector insert_chunks; + + for (auto &start_zones_entry: start_zones_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(start_zones_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.heading) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.zone_id)); + insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.start_zone)); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_x) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_y) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.bind_z) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.select_rank)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_START_ZONES_REPOSITORY_H diff --git a/common/repositories/starting_items_repository.h b/common/repositories/starting_items_repository.h new file mode 100644 index 000000000..5bf069ede --- /dev/null +++ b/common/repositories/starting_items_repository.h @@ -0,0 +1,311 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_STARTING_ITEMS_REPOSITORY_H +#define EQEMU_STARTING_ITEMS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class StartingItemsRepository { +public: + struct StartingItems { + int id; + int race; + int class; + int deityid; + int zoneid; + int itemid; + int8 item_charges; + int8 gm; + int slot; + }; + + static std::string PrimaryKey() + { + return std::string("race"); + } + + static std::vector Columns() + { + return { + "id", + "race", + "class", + "deityid", + "zoneid", + "itemid", + "item_charges", + "gm", + "slot", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("starting_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static StartingItems NewEntity() + { + StartingItems entry{}; + + entry.id = 0; + entry.race = 0; + entry.class = 0; + entry.deityid = 0; + entry.zoneid = 0; + entry.itemid = 0; + entry.item_charges = 1; + entry.gm = 0; + entry.slot = -1; + + return entry; + } + + static StartingItems GetStartingItemsEntry( + const std::vector &starting_itemss, + int starting_items_id + ) + { + for (auto &starting_items : starting_itemss) { + if (starting_items.race == starting_items_id) { + return starting_items; + } + } + + return NewEntity(); + } + + static StartingItems FindOne( + int starting_items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + starting_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int starting_items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + starting_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + StartingItems starting_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(starting_items_entry.class)); + update_values.push_back(columns[3] + " = " + std::to_string(starting_items_entry.deityid)); + update_values.push_back(columns[4] + " = " + std::to_string(starting_items_entry.zoneid)); + update_values.push_back(columns[5] + " = " + std::to_string(starting_items_entry.itemid)); + update_values.push_back(columns[6] + " = " + std::to_string(starting_items_entry.item_charges)); + update_values.push_back(columns[7] + " = " + std::to_string(starting_items_entry.gm)); + update_values.push_back(columns[8] + " = " + std::to_string(starting_items_entry.slot)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + starting_items_entry.race + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static StartingItems InsertOne( + StartingItems starting_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(starting_items_entry.class)); + insert_values.push_back(std::to_string(starting_items_entry.deityid)); + insert_values.push_back(std::to_string(starting_items_entry.zoneid)); + insert_values.push_back(std::to_string(starting_items_entry.itemid)); + insert_values.push_back(std::to_string(starting_items_entry.item_charges)); + insert_values.push_back(std::to_string(starting_items_entry.gm)); + insert_values.push_back(std::to_string(starting_items_entry.slot)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + starting_items_entry.id = results.LastInsertedID(); + return starting_items_entry; + } + + starting_items_entry = InstanceListRepository::NewEntity(); + + return starting_items_entry; + } + + static int InsertMany( + std::vector starting_items_entries + ) + { + std::vector insert_chunks; + + for (auto &starting_items_entry: starting_items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(starting_items_entry.class)); + insert_values.push_back(std::to_string(starting_items_entry.deityid)); + insert_values.push_back(std::to_string(starting_items_entry.zoneid)); + insert_values.push_back(std::to_string(starting_items_entry.itemid)); + insert_values.push_back(std::to_string(starting_items_entry.item_charges)); + insert_values.push_back(std::to_string(starting_items_entry.gm)); + insert_values.push_back(std::to_string(starting_items_entry.slot)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_STARTING_ITEMS_REPOSITORY_H diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h new file mode 100644 index 000000000..85906cc4f --- /dev/null +++ b/common/repositories/task_activities_repository.h @@ -0,0 +1,359 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TASK_ACTIVITIES_REPOSITORY_H +#define EQEMU_TASK_ACTIVITIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TaskActivitiesRepository { +public: + struct TaskActivities { + int taskid; + int activityid; + int step; + int8 activitytype; + std::string target_name; + std::string item_list; + std::string skill_list; + std::string spell_list; + std::string description_override; + int goalid; + int goalmethod; + int goalcount; + int delivertonpc; + std::string zones; + int8 optional; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "taskid", + "activityid", + "step", + "activitytype", + "target_name", + "item_list", + "skill_list", + "spell_list", + "description_override", + "goalid", + "goalmethod", + "goalcount", + "delivertonpc", + "zones", + "optional", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("task_activities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TaskActivities NewEntity() + { + TaskActivities entry{}; + + entry.taskid = 0; + entry.activityid = 0; + entry.step = 0; + entry.activitytype = 0; + entry.target_name = ""; + entry.item_list = ""; + entry.skill_list = '-1'; + entry.spell_list = '0'; + entry.description_override = ""; + entry.goalid = 0; + entry.goalmethod = 0; + entry.goalcount = 1; + entry.delivertonpc = 0; + entry.zones = ""; + entry.optional = 0; + + return entry; + } + + static TaskActivities GetTaskActivitiesEntry( + const std::vector &task_activitiess, + int task_activities_id + ) + { + for (auto &task_activities : task_activitiess) { + if (task_activities.activityid == task_activities_id) { + return task_activities; + } + } + + return NewEntity(); + } + + static TaskActivities FindOne( + int task_activities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + task_activities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4]; + entry.item_list = row[5]; + entry.skill_list = row[6]; + entry.spell_list = row[7]; + entry.description_override = row[8]; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13]; + entry.optional = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int task_activities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + task_activities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TaskActivities task_activities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(task_activities_entry.step)); + update_values.push_back(columns[3] + " = " + std::to_string(task_activities_entry.activitytype)); + update_values.push_back(columns[4] + " = '" + EscapeString(task_activities_entry.target_name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(task_activities_entry.item_list) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(task_activities_entry.skill_list) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(task_activities_entry.spell_list) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(task_activities_entry.description_override) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(task_activities_entry.goalid)); + update_values.push_back(columns[10] + " = " + std::to_string(task_activities_entry.goalmethod)); + update_values.push_back(columns[11] + " = " + std::to_string(task_activities_entry.goalcount)); + update_values.push_back(columns[12] + " = " + std::to_string(task_activities_entry.delivertonpc)); + update_values.push_back(columns[13] + " = '" + EscapeString(task_activities_entry.zones) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(task_activities_entry.optional)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + task_activities_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TaskActivities InsertOne( + TaskActivities task_activities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(task_activities_entry.step)); + insert_values.push_back(std::to_string(task_activities_entry.activitytype)); + insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.goalid)); + insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); + insert_values.push_back(std::to_string(task_activities_entry.goalcount)); + insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); + insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.optional)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + task_activities_entry.id = results.LastInsertedID(); + return task_activities_entry; + } + + task_activities_entry = InstanceListRepository::NewEntity(); + + return task_activities_entry; + } + + static int InsertMany( + std::vector task_activities_entries + ) + { + std::vector insert_chunks; + + for (auto &task_activities_entry: task_activities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(task_activities_entry.step)); + insert_values.push_back(std::to_string(task_activities_entry.activitytype)); + insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.goalid)); + insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); + insert_values.push_back(std::to_string(task_activities_entry.goalcount)); + insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); + insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.optional)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4]; + entry.item_list = row[5]; + entry.skill_list = row[6]; + entry.spell_list = row[7]; + entry.description_override = row[8]; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13]; + entry.optional = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TASK_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h new file mode 100644 index 000000000..db5fbe337 --- /dev/null +++ b/common/repositories/tasks_repository.h @@ -0,0 +1,370 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TASKS_REPOSITORY_H +#define EQEMU_TASKS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TasksRepository { +public: + struct Tasks { + int id; + int8 type; + int duration; + int8 duration_code; + std::string title; + std::string description; + std::string reward; + int rewardid; + int cashreward; + int xpreward; + int8 rewardmethod; + int8 minlevel; + int8 maxlevel; + int8 repeatable; + int faction_reward; + std::string completion_emote; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "duration", + "duration_code", + "title", + "description", + "reward", + "rewardid", + "cashreward", + "xpreward", + "rewardmethod", + "minlevel", + "maxlevel", + "repeatable", + "faction_reward", + "completion_emote", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tasks NewEntity() + { + Tasks entry{}; + + entry.id = 0; + entry.type = 0; + entry.duration = 0; + entry.duration_code = 0; + entry.title = ""; + entry.description = 0; + entry.reward = ""; + entry.rewardid = 0; + entry.cashreward = 0; + entry.xpreward = 0; + entry.rewardmethod = 2; + entry.minlevel = 0; + entry.maxlevel = 0; + entry.repeatable = 1; + entry.faction_reward = 0; + entry.completion_emote = ""; + + return entry; + } + + static Tasks GetTasksEntry( + const std::vector &taskss, + int tasks_id + ) + { + for (auto &tasks : taskss) { + if (tasks.id == tasks_id) { + return tasks; + } + } + + return NewEntity(); + } + + static Tasks FindOne( + int tasks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4]; + entry.description = row[5]; + entry.reward = row[6]; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tasks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tasks tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tasks_entry.type)); + update_values.push_back(columns[2] + " = " + std::to_string(tasks_entry.duration)); + update_values.push_back(columns[3] + " = " + std::to_string(tasks_entry.duration_code)); + update_values.push_back(columns[4] + " = '" + EscapeString(tasks_entry.title) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(tasks_entry.description) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(tasks_entry.reward) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(tasks_entry.rewardid)); + update_values.push_back(columns[8] + " = " + std::to_string(tasks_entry.cashreward)); + update_values.push_back(columns[9] + " = " + std::to_string(tasks_entry.xpreward)); + update_values.push_back(columns[10] + " = " + std::to_string(tasks_entry.rewardmethod)); + update_values.push_back(columns[11] + " = " + std::to_string(tasks_entry.minlevel)); + update_values.push_back(columns[12] + " = " + std::to_string(tasks_entry.maxlevel)); + update_values.push_back(columns[13] + " = " + std::to_string(tasks_entry.repeatable)); + update_values.push_back(columns[14] + " = " + std::to_string(tasks_entry.faction_reward)); + update_values.push_back(columns[15] + " = '" + EscapeString(tasks_entry.completion_emote) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tasks_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tasks InsertOne( + Tasks tasks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tasks_entry.type)); + insert_values.push_back(std::to_string(tasks_entry.duration)); + insert_values.push_back(std::to_string(tasks_entry.duration_code)); + insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); + insert_values.push_back(std::to_string(tasks_entry.rewardid)); + insert_values.push_back(std::to_string(tasks_entry.cashreward)); + insert_values.push_back(std::to_string(tasks_entry.xpreward)); + insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); + insert_values.push_back(std::to_string(tasks_entry.minlevel)); + insert_values.push_back(std::to_string(tasks_entry.maxlevel)); + insert_values.push_back(std::to_string(tasks_entry.repeatable)); + insert_values.push_back(std::to_string(tasks_entry.faction_reward)); + insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tasks_entry.id = results.LastInsertedID(); + return tasks_entry; + } + + tasks_entry = InstanceListRepository::NewEntity(); + + return tasks_entry; + } + + static int InsertMany( + std::vector tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &tasks_entry: tasks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tasks_entry.type)); + insert_values.push_back(std::to_string(tasks_entry.duration)); + insert_values.push_back(std::to_string(tasks_entry.duration_code)); + insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); + insert_values.push_back(std::to_string(tasks_entry.rewardid)); + insert_values.push_back(std::to_string(tasks_entry.cashreward)); + insert_values.push_back(std::to_string(tasks_entry.xpreward)); + insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); + insert_values.push_back(std::to_string(tasks_entry.minlevel)); + insert_values.push_back(std::to_string(tasks_entry.maxlevel)); + insert_values.push_back(std::to_string(tasks_entry.repeatable)); + insert_values.push_back(std::to_string(tasks_entry.faction_reward)); + insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4]; + entry.description = row[5]; + entry.reward = row[6]; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TASKS_REPOSITORY_H diff --git a/common/repositories/tasksets_repository.h b/common/repositories/tasksets_repository.h new file mode 100644 index 000000000..4cf8ad54f --- /dev/null +++ b/common/repositories/tasksets_repository.h @@ -0,0 +1,258 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TASKSETS_REPOSITORY_H +#define EQEMU_TASKSETS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TasksetsRepository { +public: + struct Tasksets { + int id; + int taskid; + }; + + static std::string PrimaryKey() + { + return std::string("taskid"); + } + + static std::vector Columns() + { + return { + "id", + "taskid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tasksets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tasksets NewEntity() + { + Tasksets entry{}; + + entry.id = 0; + entry.taskid = 0; + + return entry; + } + + static Tasksets GetTasksetsEntry( + const std::vector &tasksetss, + int tasksets_id + ) + { + for (auto &tasksets : tasksetss) { + if (tasksets.taskid == tasksets_id) { + return tasksets; + } + } + + return NewEntity(); + } + + static Tasksets FindOne( + int tasksets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tasksets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tasksets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tasksets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tasksets tasksets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tasksets_entry.taskid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tasksets InsertOne( + Tasksets tasksets_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tasksets_entry.id = results.LastInsertedID(); + return tasksets_entry; + } + + tasksets_entry = InstanceListRepository::NewEntity(); + + return tasksets_entry; + } + + static int InsertMany( + std::vector tasksets_entries + ) + { + std::vector insert_chunks; + + for (auto &tasksets_entry: tasksets_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TASKSETS_REPOSITORY_H diff --git a/common/repositories/timers_repository.h b/common/repositories/timers_repository.h new file mode 100644 index 000000000..a00812fed --- /dev/null +++ b/common/repositories/timers_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TIMERS_REPOSITORY_H +#define EQEMU_TIMERS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TimersRepository { +public: + struct Timers { + int char_id; + int type; + int start; + int duration; + int8 enable; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "char_id", + "type", + "start", + "duration", + "enable", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("timers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Timers NewEntity() + { + Timers entry{}; + + entry.char_id = 0; + entry.type = 0; + entry.start = 0; + entry.duration = 0; + entry.enable = 0; + + return entry; + } + + static Timers GetTimersEntry( + const std::vector &timerss, + int timers_id + ) + { + for (auto &timers : timerss) { + if (timers.type == timers_id) { + return timers; + } + } + + return NewEntity(); + } + + static Timers FindOne( + int timers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + timers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int timers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + timers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Timers timers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(timers_entry.start)); + update_values.push_back(columns[3] + " = " + std::to_string(timers_entry.duration)); + update_values.push_back(columns[4] + " = " + std::to_string(timers_entry.enable)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + timers_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Timers InsertOne( + Timers timers_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(timers_entry.start)); + insert_values.push_back(std::to_string(timers_entry.duration)); + insert_values.push_back(std::to_string(timers_entry.enable)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + timers_entry.id = results.LastInsertedID(); + return timers_entry; + } + + timers_entry = InstanceListRepository::NewEntity(); + + return timers_entry; + } + + static int InsertMany( + std::vector timers_entries + ) + { + std::vector insert_chunks; + + for (auto &timers_entry: timers_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(timers_entry.start)); + insert_values.push_back(std::to_string(timers_entry.duration)); + insert_values.push_back(std::to_string(timers_entry.enable)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TIMERS_REPOSITORY_H diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h new file mode 100644 index 000000000..73c05fe71 --- /dev/null +++ b/common/repositories/titles_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TITLES_REPOSITORY_H +#define EQEMU_TITLES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TitlesRepository { +public: + struct Titles { + int id; + int8 skill_id; + int min_skill_value; + int max_skill_value; + int min_aa_points; + int max_aa_points; + int8 class; + int8 gender; + int char_id; + int status; + int item_id; + std::string prefix; + std::string suffix; + int title_set; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "skill_id", + "min_skill_value", + "max_skill_value", + "min_aa_points", + "max_aa_points", + "class", + "gender", + "char_id", + "status", + "item_id", + "prefix", + "suffix", + "title_set", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("titles"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Titles NewEntity() + { + Titles entry{}; + + entry.id = 0; + entry.skill_id = -1; + entry.min_skill_value = -1; + entry.max_skill_value = -1; + entry.min_aa_points = -1; + entry.max_aa_points = -1; + entry. + class = -1; + entry.gender = -1; + entry.char_id = -1; + entry.status = -1; + entry.item_id = -1; + entry.prefix = ""; + entry.suffix = ""; + entry.title_set = 0; + + return entry; + } + + static Titles GetTitlesEntry( + const std::vector &titless, + int titles_id + ) + { + for (auto &titles : titless) { + if (titles.id == titles_id) { + return titles; + } + } + + return NewEntity(); + } + + static Titles FindOne( + int titles_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + titles_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry. + class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11]; + entry.suffix = row[12]; + entry.title_set = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int titles_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + titles_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Titles titles_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(titles_entry.skill_id)); + update_values.push_back(columns[2] + " = " + std::to_string(titles_entry.min_skill_value)); + update_values.push_back(columns[3] + " = " + std::to_string(titles_entry.max_skill_value)); + update_values.push_back(columns[4] + " = " + std::to_string(titles_entry.min_aa_points)); + update_values.push_back(columns[5] + " = " + std::to_string(titles_entry.max_aa_points)); + update_values.push_back(columns[6] + " = " + std::to_string(titles_entry. + class)); + update_values.push_back(columns[7] + " = " + std::to_string(titles_entry.gender)); + update_values.push_back(columns[8] + " = " + std::to_string(titles_entry.char_id)); + update_values.push_back(columns[9] + " = " + std::to_string(titles_entry.status)); + update_values.push_back(columns[10] + " = " + std::to_string(titles_entry.item_id)); + update_values.push_back(columns[11] + " = '" + EscapeString(titles_entry.prefix) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(titles_entry.suffix) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(titles_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + titles_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Titles InsertOne( + Titles titles_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(titles_entry.skill_id)); + insert_values.push_back(std::to_string(titles_entry.min_skill_value)); + insert_values.push_back(std::to_string(titles_entry.max_skill_value)); + insert_values.push_back(std::to_string(titles_entry.min_aa_points)); + insert_values.push_back(std::to_string(titles_entry.max_aa_points)); + insert_values.push_back(std::to_string(titles_entry. + class)); + insert_values.push_back(std::to_string(titles_entry.gender)); + insert_values.push_back(std::to_string(titles_entry.char_id)); + insert_values.push_back(std::to_string(titles_entry.status)); + insert_values.push_back(std::to_string(titles_entry.item_id)); + insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); + insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); + insert_values.push_back(std::to_string(titles_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + titles_entry.id = results.LastInsertedID(); + return titles_entry; + } + + titles_entry = InstanceListRepository::NewEntity(); + + return titles_entry; + } + + static int InsertMany( + std::vector titles_entries + ) + { + std::vector insert_chunks; + + for (auto &titles_entry: titles_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(titles_entry.skill_id)); + insert_values.push_back(std::to_string(titles_entry.min_skill_value)); + insert_values.push_back(std::to_string(titles_entry.max_skill_value)); + insert_values.push_back(std::to_string(titles_entry.min_aa_points)); + insert_values.push_back(std::to_string(titles_entry.max_aa_points)); + insert_values.push_back(std::to_string(titles_entry. + class)); + insert_values.push_back(std::to_string(titles_entry.gender)); + insert_values.push_back(std::to_string(titles_entry.char_id)); + insert_values.push_back(std::to_string(titles_entry.status)); + insert_values.push_back(std::to_string(titles_entry.item_id)); + insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); + insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); + insert_values.push_back(std::to_string(titles_entry.title_set)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry. + class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11]; + entry.suffix = row[12]; + entry.title_set = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TITLES_REPOSITORY_H diff --git a/common/repositories/trader_audit_repository.h b/common/repositories/trader_audit_repository.h new file mode 100644 index 000000000..e7be6f677 --- /dev/null +++ b/common/repositories/trader_audit_repository.h @@ -0,0 +1,301 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRADER_AUDIT_REPOSITORY_H +#define EQEMU_TRADER_AUDIT_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TraderAuditRepository { +public: + struct TraderAudit { + std::string time; + std::string seller; + std::string buyer; + std::string itemname; + int quantity; + int totalcost; + int8 trantype; + }; + + static std::string PrimaryKey() + { + return std::string(""); + } + + static std::vector Columns() + { + return { + "time", + "seller", + "buyer", + "itemname", + "quantity", + "totalcost", + "trantype", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("trader_audit"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TraderAudit NewEntity() + { + TraderAudit entry{}; + + entry.time = '0000-00-00 00:00:00'; + entry.seller = ""; + entry.buyer = ""; + entry.itemname = ""; + entry.quantity = 0; + entry.totalcost = 0; + entry.trantype = 0; + + return entry; + } + + static TraderAudit GetTraderAuditEntry( + const std::vector &trader_audits, + int trader_audit_id + ) + { + for (auto &trader_audit : trader_audits) { + if (trader_audit. == trader_audit_id) { + return trader_audit; + } + } + + return NewEntity(); + } + + static TraderAudit FindOne( + int trader_audit_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + trader_audit_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TraderAudit entry{}; + + entry.time = row[0]; + entry.seller = row[1]; + entry.buyer = row[2]; + entry.itemname = row[3]; + entry.quantity = atoi(row[4]); + entry.totalcost = atoi(row[5]); + entry.trantype = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int trader_audit_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + trader_audit_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TraderAudit trader_audit_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(trader_audit_entry.time) + "'"); + update_values.push_back(columns[1] + " = '" + EscapeString(trader_audit_entry.seller) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(trader_audit_entry.buyer) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(trader_audit_entry.itemname) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(trader_audit_entry.quantity)); + update_values.push_back(columns[5] + " = " + std::to_string(trader_audit_entry.totalcost)); + update_values.push_back(columns[6] + " = " + std::to_string(trader_audit_entry.trantype)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + trader_audit_entry. + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TraderAudit InsertOne( + TraderAudit trader_audit_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(trader_audit_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.seller) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.buyer) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.itemname) + "'"); + insert_values.push_back(std::to_string(trader_audit_entry.quantity)); + insert_values.push_back(std::to_string(trader_audit_entry.totalcost)); + insert_values.push_back(std::to_string(trader_audit_entry.trantype)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + trader_audit_entry.id = results.LastInsertedID(); + return trader_audit_entry; + } + + trader_audit_entry = InstanceListRepository::NewEntity(); + + return trader_audit_entry; + } + + static int InsertMany( + std::vector trader_audit_entries + ) + { + std::vector insert_chunks; + + for (auto &trader_audit_entry: trader_audit_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(trader_audit_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.seller) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.buyer) + "'"); + insert_values.push_back("'" + EscapeString(trader_audit_entry.itemname) + "'"); + insert_values.push_back(std::to_string(trader_audit_entry.quantity)); + insert_values.push_back(std::to_string(trader_audit_entry.totalcost)); + insert_values.push_back(std::to_string(trader_audit_entry.trantype)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TraderAudit entry{}; + + entry.time = row[0]; + entry.seller = row[1]; + entry.buyer = row[2]; + entry.itemname = row[3]; + entry.quantity = atoi(row[4]); + entry.totalcost = atoi(row[5]); + entry.trantype = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRADER_AUDIT_REPOSITORY_H diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h new file mode 100644 index 000000000..ed21cee95 --- /dev/null +++ b/common/repositories/trader_repository.h @@ -0,0 +1,287 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRADER_REPOSITORY_H +#define EQEMU_TRADER_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TraderRepository { +public: + struct Trader { + int char_id; + int item_id; + int serialnumber; + int charges; + int item_cost; + int8 slot_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "item_id", + "serialnumber", + "charges", + "item_cost", + "slot_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("trader"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Trader NewEntity() + { + Trader entry{}; + + entry.char_id = 0; + entry.item_id = 0; + entry.serialnumber = 0; + entry.charges = 0; + entry.item_cost = 0; + entry.slot_id = 0; + + return entry; + } + + static Trader GetTraderEntry( + const std::vector &traders, + int trader_id + ) + { + for (auto &trader : traders) { + if (trader.slot_id == trader_id) { + return trader; + } + } + + return NewEntity(); + } + + static Trader FindOne( + int trader_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + trader_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int trader_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + trader_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Trader trader_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(trader_entry.item_id)); + update_values.push_back(columns[2] + " = " + std::to_string(trader_entry.serialnumber)); + update_values.push_back(columns[3] + " = " + std::to_string(trader_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(trader_entry.item_cost)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + trader_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Trader InsertOne( + Trader trader_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(trader_entry.item_id)); + insert_values.push_back(std::to_string(trader_entry.serialnumber)); + insert_values.push_back(std::to_string(trader_entry.charges)); + insert_values.push_back(std::to_string(trader_entry.item_cost)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + trader_entry.id = results.LastInsertedID(); + return trader_entry; + } + + trader_entry = InstanceListRepository::NewEntity(); + + return trader_entry; + } + + static int InsertMany( + std::vector trader_entries + ) + { + std::vector insert_chunks; + + for (auto &trader_entry: trader_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(trader_entry.item_id)); + insert_values.push_back(std::to_string(trader_entry.serialnumber)); + insert_values.push_back(std::to_string(trader_entry.charges)); + insert_values.push_back(std::to_string(trader_entry.item_cost)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRADER_REPOSITORY_H diff --git a/common/repositories/tradeskill_recipe_entries_repository.h b/common/repositories/tradeskill_recipe_entries_repository.h new file mode 100644 index 000000000..9545aa0fd --- /dev/null +++ b/common/repositories/tradeskill_recipe_entries_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H +#define EQEMU_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TradeskillRecipeEntriesRepository { +public: + struct TradeskillRecipeEntries { + int id; + int recipe_id; + int item_id; + int8 successcount; + int8 failcount; + int8 componentcount; + int8 salvagecount; + int8 iscontainer; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "recipe_id", + "item_id", + "successcount", + "failcount", + "componentcount", + "salvagecount", + "iscontainer", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tradeskill_recipe_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TradeskillRecipeEntries NewEntity() + { + TradeskillRecipeEntries entry{}; + + entry.id = 0; + entry.recipe_id = 0; + entry.item_id = 0; + entry.successcount = 0; + entry.failcount = 0; + entry.componentcount = 1; + entry.salvagecount = 0; + entry.iscontainer = 0; + + return entry; + } + + static TradeskillRecipeEntries GetTradeskillRecipeEntriesEntry( + const std::vector &tradeskill_recipe_entriess, + int tradeskill_recipe_entries_id + ) + { + for (auto &tradeskill_recipe_entries : tradeskill_recipe_entriess) { + if (tradeskill_recipe_entries.id == tradeskill_recipe_entries_id) { + return tradeskill_recipe_entries; + } + } + + return NewEntity(); + } + + static TradeskillRecipeEntries FindOne( + int tradeskill_recipe_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tradeskill_recipe_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tradeskill_recipe_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tradeskill_recipe_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TradeskillRecipeEntries tradeskill_recipe_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entries_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entries_entry.successcount)); + update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entries_entry.failcount)); + update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entries_entry.componentcount)); + update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + update_values.push_back(columns[7] + " = " + std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tradeskill_recipe_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TradeskillRecipeEntries InsertOne( + TradeskillRecipeEntries tradeskill_recipe_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tradeskill_recipe_entries_entry.id = results.LastInsertedID(); + return tradeskill_recipe_entries_entry; + } + + tradeskill_recipe_entries_entry = InstanceListRepository::NewEntity(); + + return tradeskill_recipe_entries_entry; + } + + static int InsertMany( + std::vector tradeskill_recipe_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &tradeskill_recipe_entries_entry: tradeskill_recipe_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h new file mode 100644 index 000000000..4d3c2ecb7 --- /dev/null +++ b/common/repositories/traps_repository.h @@ -0,0 +1,410 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRAPS_REPOSITORY_H +#define EQEMU_TRAPS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TrapsRepository { +public: + struct Traps { + int id; + std::string zone; + int16 version; + int x; + int y; + int z; + int8 chance; + std::string maxzdiff; + std::string radius; + int effect; + int effectvalue; + int effectvalue2; + std::string message; + int skill; + int level; + int respawn_time; + int respawn_var; + int8 triggered_number; + int8 group; + int8 despawn_when_triggered; + int8 undetectable; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "x", + "y", + "z", + "chance", + "maxzdiff", + "radius", + "effect", + "effectvalue", + "effectvalue2", + "message", + "skill", + "level", + "respawn_time", + "respawn_var", + "triggered_number", + "group", + "despawn_when_triggered", + "undetectable", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("traps"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Traps NewEntity() + { + Traps entry{}; + + entry.id = 0; + entry.zone = ""; + entry.version = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.chance = 0; + entry.maxzdiff = 0; + entry.radius = 0; + entry.effect = 0; + entry.effectvalue = 0; + entry.effectvalue2 = 0; + entry.message = ""; + entry.skill = 0; + entry.level = 1; + entry.respawn_time = 60; + entry.respawn_var = 0; + entry.triggered_number = 0; + entry.group = 0; + entry.despawn_when_triggered = 0; + entry.undetectable = 0; + + return entry; + } + + static Traps GetTrapsEntry( + const std::vector &trapss, + int traps_id + ) + { + for (auto &traps : trapss) { + if (traps.id == traps_id) { + return traps; + } + } + + return NewEntity(); + } + + static Traps FindOne( + int traps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + traps_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12]; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int traps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + traps_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Traps traps_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(traps_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(traps_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(traps_entry.x)); + update_values.push_back(columns[4] + " = " + std::to_string(traps_entry.y)); + update_values.push_back(columns[5] + " = " + std::to_string(traps_entry.z)); + update_values.push_back(columns[6] + " = " + std::to_string(traps_entry.chance)); + update_values.push_back(columns[7] + " = '" + EscapeString(traps_entry.maxzdiff) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(traps_entry.radius) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(traps_entry.effect)); + update_values.push_back(columns[10] + " = " + std::to_string(traps_entry.effectvalue)); + update_values.push_back(columns[11] + " = " + std::to_string(traps_entry.effectvalue2)); + update_values.push_back(columns[12] + " = '" + EscapeString(traps_entry.message) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(traps_entry.skill)); + update_values.push_back(columns[14] + " = " + std::to_string(traps_entry.level)); + update_values.push_back(columns[15] + " = " + std::to_string(traps_entry.respawn_time)); + update_values.push_back(columns[16] + " = " + std::to_string(traps_entry.respawn_var)); + update_values.push_back(columns[17] + " = " + std::to_string(traps_entry.triggered_number)); + update_values.push_back(columns[18] + " = " + std::to_string(traps_entry.group)); + update_values.push_back(columns[19] + " = " + std::to_string(traps_entry.despawn_when_triggered)); + update_values.push_back(columns[20] + " = " + std::to_string(traps_entry.undetectable)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + traps_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Traps InsertOne( + Traps traps_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); + insert_values.push_back(std::to_string(traps_entry.version)); + insert_values.push_back(std::to_string(traps_entry.x)); + insert_values.push_back(std::to_string(traps_entry.y)); + insert_values.push_back(std::to_string(traps_entry.z)); + insert_values.push_back(std::to_string(traps_entry.chance)); + insert_values.push_back("'" + EscapeString(traps_entry.maxzdiff) + "'"); + insert_values.push_back("'" + EscapeString(traps_entry.radius) + "'"); + insert_values.push_back(std::to_string(traps_entry.effect)); + insert_values.push_back(std::to_string(traps_entry.effectvalue)); + insert_values.push_back(std::to_string(traps_entry.effectvalue2)); + insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); + insert_values.push_back(std::to_string(traps_entry.skill)); + insert_values.push_back(std::to_string(traps_entry.level)); + insert_values.push_back(std::to_string(traps_entry.respawn_time)); + insert_values.push_back(std::to_string(traps_entry.respawn_var)); + insert_values.push_back(std::to_string(traps_entry.triggered_number)); + insert_values.push_back(std::to_string(traps_entry.group)); + insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); + insert_values.push_back(std::to_string(traps_entry.undetectable)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + traps_entry.id = results.LastInsertedID(); + return traps_entry; + } + + traps_entry = InstanceListRepository::NewEntity(); + + return traps_entry; + } + + static int InsertMany( + std::vector traps_entries + ) + { + std::vector insert_chunks; + + for (auto &traps_entry: traps_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); + insert_values.push_back(std::to_string(traps_entry.version)); + insert_values.push_back(std::to_string(traps_entry.x)); + insert_values.push_back(std::to_string(traps_entry.y)); + insert_values.push_back(std::to_string(traps_entry.z)); + insert_values.push_back(std::to_string(traps_entry.chance)); + insert_values.push_back("'" + EscapeString(traps_entry.maxzdiff) + "'"); + insert_values.push_back("'" + EscapeString(traps_entry.radius) + "'"); + insert_values.push_back(std::to_string(traps_entry.effect)); + insert_values.push_back(std::to_string(traps_entry.effectvalue)); + insert_values.push_back(std::to_string(traps_entry.effectvalue2)); + insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); + insert_values.push_back(std::to_string(traps_entry.skill)); + insert_values.push_back(std::to_string(traps_entry.level)); + insert_values.push_back(std::to_string(traps_entry.respawn_time)); + insert_values.push_back(std::to_string(traps_entry.respawn_var)); + insert_values.push_back(std::to_string(traps_entry.triggered_number)); + insert_values.push_back(std::to_string(traps_entry.group)); + insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); + insert_values.push_back(std::to_string(traps_entry.undetectable)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12]; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRAPS_REPOSITORY_H diff --git a/common/repositories/tribute_levels_repository.h b/common/repositories/tribute_levels_repository.h new file mode 100644 index 000000000..2021eee52 --- /dev/null +++ b/common/repositories/tribute_levels_repository.h @@ -0,0 +1,271 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRIBUTE_LEVELS_REPOSITORY_H +#define EQEMU_TRIBUTE_LEVELS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TributeLevelsRepository { +public: + struct TributeLevels { + int tribute_id; + int level; + int cost; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "tribute_id", + "level", + "cost", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tribute_levels"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TributeLevels NewEntity() + { + TributeLevels entry{}; + + entry.tribute_id = 0; + entry.level = 0; + entry.cost = 0; + entry.item_id = 0; + + return entry; + } + + static TributeLevels GetTributeLevelsEntry( + const std::vector &tribute_levelss, + int tribute_levels_id + ) + { + for (auto &tribute_levels : tribute_levelss) { + if (tribute_levels.level == tribute_levels_id) { + return tribute_levels; + } + } + + return NewEntity(); + } + + static TributeLevels FindOne( + int tribute_levels_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tribute_levels_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tribute_levels_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tribute_levels_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TributeLevels tribute_levels_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(tribute_levels_entry.cost)); + update_values.push_back(columns[3] + " = " + std::to_string(tribute_levels_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tribute_levels_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TributeLevels InsertOne( + TributeLevels tribute_levels_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tribute_levels_entry.cost)); + insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tribute_levels_entry.id = results.LastInsertedID(); + return tribute_levels_entry; + } + + tribute_levels_entry = InstanceListRepository::NewEntity(); + + return tribute_levels_entry; + } + + static int InsertMany( + std::vector tribute_levels_entries + ) + { + std::vector insert_chunks; + + for (auto &tribute_levels_entry: tribute_levels_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tribute_levels_entry.cost)); + insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRIBUTE_LEVELS_REPOSITORY_H diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h new file mode 100644 index 000000000..8a730305c --- /dev/null +++ b/common/repositories/tributes_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_TRIBUTES_REPOSITORY_H +#define EQEMU_TRIBUTES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class TributesRepository { +public: + struct Tributes { + int id; + int unknown; + std::string name; + std::string descr; + int8 isguild; + }; + + static std::string PrimaryKey() + { + return std::string("isguild"); + } + + static std::vector Columns() + { + return { + "id", + "unknown", + "name", + "descr", + "isguild", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tributes"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tributes NewEntity() + { + Tributes entry{}; + + entry.id = 0; + entry.unknown = 0; + entry.name = ""; + entry.descr = 0; + entry.isguild = 0; + + return entry; + } + + static Tributes GetTributesEntry( + const std::vector &tributess, + int tributes_id + ) + { + for (auto &tributes : tributess) { + if (tributes.isguild == tributes_id) { + return tributes; + } + } + + return NewEntity(); + } + + static Tributes FindOne( + int tributes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tributes_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2]; + entry.descr = row[3]; + entry.isguild = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tributes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tributes_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tributes tributes_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tributes_entry.unknown)); + update_values.push_back(columns[2] + " = '" + EscapeString(tributes_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(tributes_entry.descr) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tributes_entry.isguild + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tributes InsertOne( + Tributes tributes_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tributes_entry.unknown)); + insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tributes_entry.id = results.LastInsertedID(); + return tributes_entry; + } + + tributes_entry = InstanceListRepository::NewEntity(); + + return tributes_entry; + } + + static int InsertMany( + std::vector tributes_entries + ) + { + std::vector insert_chunks; + + for (auto &tributes_entry: tributes_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tributes_entry.unknown)); + insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2]; + entry.descr = row[3]; + entry.isguild = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_TRIBUTES_REPOSITORY_H diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h new file mode 100644 index 000000000..4c3584838 --- /dev/null +++ b/common/repositories/variables_repository.h @@ -0,0 +1,274 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_VARIABLES_REPOSITORY_H +#define EQEMU_VARIABLES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class VariablesRepository { +public: + struct Variables { + std::string varname; + std::string value; + std::string information; + std::string ts; + }; + + static std::string PrimaryKey() + { + return std::string("varname"); + } + + static std::vector Columns() + { + return { + "varname", + "value", + "information", + "ts", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("variables"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Variables NewEntity() + { + Variables entry{}; + + entry.varname = ""; + entry.value = 0; + entry.information = 0; + entry.ts = current_timestamp(); + + return entry; + } + + static Variables GetVariablesEntry( + const std::vector &variabless, + int variables_id + ) + { + for (auto &variables : variabless) { + if (variables.varname == variables_id) { + return variables; + } + } + + return NewEntity(); + } + + static Variables FindOne( + int variables_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + variables_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Variables entry{}; + + entry.varname = row[0]; + entry.value = row[1]; + entry.information = row[2]; + entry.ts = row[3]; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int variables_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + variables_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Variables variables_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(variables_entry.value) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(variables_entry.information) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(variables_entry.ts) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + variables_entry.varname + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Variables InsertOne( + Variables variables_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + variables_entry.id = results.LastInsertedID(); + return variables_entry; + } + + variables_entry = InstanceListRepository::NewEntity(); + + return variables_entry; + } + + static int InsertMany( + std::vector variables_entries + ) + { + std::vector insert_chunks; + + for (auto &variables_entry: variables_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Variables entry{}; + + entry.varname = row[0]; + entry.value = row[1]; + entry.information = row[2]; + entry.ts = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_VARIABLES_REPOSITORY_H diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h new file mode 100644 index 000000000..2f11a6b63 --- /dev/null +++ b/common/repositories/veteran_reward_templates_repository.h @@ -0,0 +1,279 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_VETERAN_REWARD_TEMPLATES_REPOSITORY_H +#define EQEMU_VETERAN_REWARD_TEMPLATES_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class VeteranRewardTemplatesRepository { +public: + struct VeteranRewardTemplates { + int claim_id; + std::string name; + int item_id; + int16 charges; + int8 reward_slot; + }; + + static std::string PrimaryKey() + { + return std::string("reward_slot"); + } + + static std::vector Columns() + { + return { + "claim_id", + "name", + "item_id", + "charges", + "reward_slot", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("veteran_reward_templates"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static VeteranRewardTemplates NewEntity() + { + VeteranRewardTemplates entry{}; + + entry.claim_id = 0; + entry.name = 0; + entry.item_id = 0; + entry.charges = 0; + entry.reward_slot = 0; + + return entry; + } + + static VeteranRewardTemplates GetVeteranRewardTemplatesEntry( + const std::vector &veteran_reward_templatess, + int veteran_reward_templates_id + ) + { + for (auto &veteran_reward_templates : veteran_reward_templatess) { + if (veteran_reward_templates.reward_slot == veteran_reward_templates_id) { + return veteran_reward_templates; + } + } + + return NewEntity(); + } + + static VeteranRewardTemplates FindOne( + int veteran_reward_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + veteran_reward_templates_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1]; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int veteran_reward_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + veteran_reward_templates_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + VeteranRewardTemplates veteran_reward_templates_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(veteran_reward_templates_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(veteran_reward_templates_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(veteran_reward_templates_entry.charges)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + veteran_reward_templates_entry.reward_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static VeteranRewardTemplates InsertOne( + VeteranRewardTemplates veteran_reward_templates_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + veteran_reward_templates_entry.id = results.LastInsertedID(); + return veteran_reward_templates_entry; + } + + veteran_reward_templates_entry = InstanceListRepository::NewEntity(); + + return veteran_reward_templates_entry; + } + + static int InsertMany( + std::vector veteran_reward_templates_entries + ) + { + std::vector insert_chunks; + + for (auto &veteran_reward_templates_entry: veteran_reward_templates_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1]; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_VETERAN_REWARD_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/zone_flags_repository.h b/common/repositories/zone_flags_repository.h new file mode 100644 index 000000000..63ddbdda4 --- /dev/null +++ b/common/repositories/zone_flags_repository.h @@ -0,0 +1,255 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_FLAGS_REPOSITORY_H +#define EQEMU_ZONE_FLAGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ZoneFlagsRepository { +public: + struct ZoneFlags { + int charID; + int zoneID; + }; + + static std::string PrimaryKey() + { + return std::string("zoneID"); + } + + static std::vector Columns() + { + return { + "charID", + "zoneID", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone_flags"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ZoneFlags NewEntity() + { + ZoneFlags entry{}; + + entry.charID = 0; + entry.zoneID = 0; + + return entry; + } + + static ZoneFlags GetZoneFlagsEntry( + const std::vector &zone_flagss, + int zone_flags_id + ) + { + for (auto &zone_flags : zone_flagss) { + if (zone_flags.zoneID == zone_flags_id) { + return zone_flags; + } + } + + return NewEntity(); + } + + static ZoneFlags FindOne( + int zone_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_flags_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ZoneFlags entry{}; + + entry.charID = atoi(row[0]); + entry.zoneID = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_flags_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ZoneFlags zone_flags_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_flags_entry.zoneID + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ZoneFlags InsertOne( + ZoneFlags zone_flags_entry + ) + { + std::vector insert_values; + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_flags_entry.id = results.LastInsertedID(); + return zone_flags_entry; + } + + zone_flags_entry = InstanceListRepository::NewEntity(); + + return zone_flags_entry; + } + + static int InsertMany( + std::vector zone_flags_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_flags_entry: zone_flags_entries) { + std::vector insert_values; + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ZoneFlags entry{}; + + entry.charID = atoi(row[0]); + entry.zoneID = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ZONE_FLAGS_REPOSITORY_H diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h new file mode 100644 index 000000000..f311b7c5b --- /dev/null +++ b/common/repositories/zone_points_repository.h @@ -0,0 +1,378 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_POINTS_REPOSITORY_H +#define EQEMU_ZONE_POINTS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ZonePointsRepository { +public: + struct ZonePoints { + int id; + std::string zone; + int version; + int16 number; + std::string y; + std::string x; + std::string z; + std::string heading; + std::string target_y; + std::string target_x; + std::string target_z; + std::string target_heading; + int16 zoneinst; + int target_zone_id; + int target_instance; + std::string buffer; + int client_version_mask; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "number", + "y", + "x", + "z", + "heading", + "target_y", + "target_x", + "target_z", + "target_heading", + "zoneinst", + "target_zone_id", + "target_instance", + "buffer", + "client_version_mask", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone_points"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ZonePoints NewEntity() + { + ZonePoints entry{}; + + entry.id = 0; + entry.zone = 0; + entry.version = 0; + entry.number = 1; + entry.y = 0; + entry.x = 0; + entry.z = 0; + entry.heading = 0; + entry.target_y = 0; + entry.target_x = 0; + entry.target_z = 0; + entry.target_heading = 0; + entry.zoneinst = 0; + entry.target_zone_id = 0; + entry.target_instance = 0; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + + return entry; + } + + static ZonePoints GetZonePointsEntry( + const std::vector &zone_pointss, + int zone_points_id + ) + { + for (auto &zone_points : zone_pointss) { + if (zone_points.id == zone_points_id) { + return zone_points; + } + } + + return NewEntity(); + } + + static ZonePoints FindOne( + int zone_points_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_points_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_points_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_points_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ZonePoints zone_points_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(zone_points_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(zone_points_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(zone_points_entry.number)); + update_values.push_back(columns[4] + " = '" + EscapeString(zone_points_entry.y) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(zone_points_entry.x) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(zone_points_entry.z) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(zone_points_entry.heading) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(zone_points_entry.target_y) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(zone_points_entry.target_x) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(zone_points_entry.target_z) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(zone_points_entry.target_heading) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(zone_points_entry.zoneinst)); + update_values.push_back(columns[13] + " = " + std::to_string(zone_points_entry.target_zone_id)); + update_values.push_back(columns[14] + " = " + std::to_string(zone_points_entry.target_instance)); + update_values.push_back(columns[15] + " = '" + EscapeString(zone_points_entry.buffer) + "'"); + update_values.push_back(columns[16] + " = " + std::to_string(zone_points_entry.client_version_mask)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_points_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ZonePoints InsertOne( + ZonePoints zone_points_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.version)); + insert_values.push_back(std::to_string(zone_points_entry.number)); + insert_values.push_back("'" + EscapeString(zone_points_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_y) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_x) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_z) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_heading) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); + insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); + insert_values.push_back(std::to_string(zone_points_entry.target_instance)); + insert_values.push_back("'" + EscapeString(zone_points_entry.buffer) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_points_entry.id = results.LastInsertedID(); + return zone_points_entry; + } + + zone_points_entry = InstanceListRepository::NewEntity(); + + return zone_points_entry; + } + + static int InsertMany( + std::vector zone_points_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_points_entry: zone_points_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.version)); + insert_values.push_back(std::to_string(zone_points_entry.number)); + insert_values.push_back("'" + EscapeString(zone_points_entry.y) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.x) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.z) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.heading) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_y) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_x) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_z) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.target_heading) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); + insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); + insert_values.push_back(std::to_string(zone_points_entry.target_instance)); + insert_values.push_back("'" + EscapeString(zone_points_entry.buffer) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ZONE_POINTS_REPOSITORY_H diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h new file mode 100644 index 000000000..3119ad1ee --- /dev/null +++ b/common/repositories/zone_repository.h @@ -0,0 +1,930 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_REPOSITORY_H +#define EQEMU_ZONE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ZoneRepository { +public: + struct Zone { + std::string short_name; + int id; + std::string file_name; + std::string long_name; + std::string map_file_name; + std::string safe_x; + std::string safe_y; + std::string safe_z; + std::string graveyard_id; + int8 min_level; + int8 min_status; + int zoneidnumber; + int8 version; + int timezone; + int maxclients; + int ruleset; + std::string note; + std::string underworld; + std::string minclip; + std::string maxclip; + std::string fog_minclip; + std::string fog_maxclip; + int8 fog_blue; + int8 fog_red; + int8 fog_green; + int8 sky; + int8 ztype; + std::string zone_exp_multiplier; + std::string walkspeed; + int8 time_type; + int8 fog_red1; + int8 fog_green1; + int8 fog_blue1; + std::string fog_minclip1; + std::string fog_maxclip1; + int8 fog_red2; + int8 fog_green2; + int8 fog_blue2; + std::string fog_minclip2; + std::string fog_maxclip2; + int8 fog_red3; + int8 fog_green3; + int8 fog_blue3; + std::string fog_minclip3; + std::string fog_maxclip3; + int8 fog_red4; + int8 fog_green4; + int8 fog_blue4; + std::string fog_minclip4; + std::string fog_maxclip4; + std::string fog_density; + std::string flag_needed; + int8 canbind; + int8 cancombat; + int8 canlevitate; + int8 castoutdoor; + int8 hotzone; + int8 insttype; + int shutdowndelay; + int8 peqzone; + int8 expansion; + int8 suspendbuffs; + int rain_chance1; + int rain_chance2; + int rain_chance3; + int rain_chance4; + int rain_duration1; + int rain_duration2; + int rain_duration3; + int rain_duration4; + int snow_chance1; + int snow_chance2; + int snow_chance3; + int snow_chance4; + int snow_duration1; + int snow_duration2; + int snow_duration3; + int snow_duration4; + std::string gravity; + int type; + int8 skylock; + int fast_regen_hp; + int fast_regen_mana; + int fast_regen_endurance; + int npc_max_aggro_dist; + int max_movement_update_range; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "short_name", + "id", + "file_name", + "long_name", + "map_file_name", + "safe_x", + "safe_y", + "safe_z", + "graveyard_id", + "min_level", + "min_status", + "zoneidnumber", + "version", + "timezone", + "maxclients", + "ruleset", + "note", + "underworld", + "minclip", + "maxclip", + "fog_minclip", + "fog_maxclip", + "fog_blue", + "fog_red", + "fog_green", + "sky", + "ztype", + "zone_exp_multiplier", + "walkspeed", + "time_type", + "fog_red1", + "fog_green1", + "fog_blue1", + "fog_minclip1", + "fog_maxclip1", + "fog_red2", + "fog_green2", + "fog_blue2", + "fog_minclip2", + "fog_maxclip2", + "fog_red3", + "fog_green3", + "fog_blue3", + "fog_minclip3", + "fog_maxclip3", + "fog_red4", + "fog_green4", + "fog_blue4", + "fog_minclip4", + "fog_maxclip4", + "fog_density", + "flag_needed", + "canbind", + "cancombat", + "canlevitate", + "castoutdoor", + "hotzone", + "insttype", + "shutdowndelay", + "peqzone", + "expansion", + "suspendbuffs", + "rain_chance1", + "rain_chance2", + "rain_chance3", + "rain_chance4", + "rain_duration1", + "rain_duration2", + "rain_duration3", + "rain_duration4", + "snow_chance1", + "snow_chance2", + "snow_chance3", + "snow_chance4", + "snow_duration1", + "snow_duration2", + "snow_duration3", + "snow_duration4", + "gravity", + "type", + "skylock", + "fast_regen_hp", + "fast_regen_mana", + "fast_regen_endurance", + "npc_max_aggro_dist", + "max_movement_update_range", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Zone NewEntity() + { + Zone entry{}; + + entry.short_name = 0; + entry.id = 0; + entry.file_name = 0; + entry.long_name = 0; + entry.map_file_name = 0; + entry.safe_x = 0; + entry.safe_y = 0; + entry.safe_z = 0; + entry.graveyard_id = 0; + entry.min_level = 0; + entry.min_status = 0; + entry.zoneidnumber = 0; + entry.version = 0; + entry.timezone = 0; + entry.maxclients = 0; + entry.ruleset = 0; + entry.note = 0; + entry.underworld = 0; + entry.minclip = 450; + entry.maxclip = 450; + entry.fog_minclip = 450; + entry.fog_maxclip = 450; + entry.fog_blue = 0; + entry.fog_red = 0; + entry.fog_green = 0; + entry.sky = 1; + entry.ztype = 1; + entry.zone_exp_multiplier = 0.00; + entry.walkspeed = 0.4; + entry.time_type = 2; + entry.fog_red1 = 0; + entry.fog_green1 = 0; + entry.fog_blue1 = 0; + entry.fog_minclip1 = 450; + entry.fog_maxclip1 = 450; + entry.fog_red2 = 0; + entry.fog_green2 = 0; + entry.fog_blue2 = 0; + entry.fog_minclip2 = 450; + entry.fog_maxclip2 = 450; + entry.fog_red3 = 0; + entry.fog_green3 = 0; + entry.fog_blue3 = 0; + entry.fog_minclip3 = 450; + entry.fog_maxclip3 = 450; + entry.fog_red4 = 0; + entry.fog_green4 = 0; + entry.fog_blue4 = 0; + entry.fog_minclip4 = 450; + entry.fog_maxclip4 = 450; + entry.fog_density = 0; + entry.flag_needed = ""; + entry.canbind = 1; + entry.cancombat = 1; + entry.canlevitate = 1; + entry.castoutdoor = 1; + entry.hotzone = 0; + entry.insttype = 0; + entry.shutdowndelay = 5000; + entry.peqzone = 1; + entry.expansion = 0; + entry.suspendbuffs = 0; + entry.rain_chance1 = 0; + entry.rain_chance2 = 0; + entry.rain_chance3 = 0; + entry.rain_chance4 = 0; + entry.rain_duration1 = 0; + entry.rain_duration2 = 0; + entry.rain_duration3 = 0; + entry.rain_duration4 = 0; + entry.snow_chance1 = 0; + entry.snow_chance2 = 0; + entry.snow_chance3 = 0; + entry.snow_chance4 = 0; + entry.snow_duration1 = 0; + entry.snow_duration2 = 0; + entry.snow_duration3 = 0; + entry.snow_duration4 = 0; + entry.gravity = 0.4; + entry.type = 0; + entry.skylock = 0; + entry.fast_regen_hp = 180; + entry.fast_regen_mana = 180; + entry.fast_regen_endurance = 180; + entry.npc_max_aggro_dist = 600; + entry.max_movement_update_range = 600; + + return entry; + } + + static Zone GetZoneEntry( + const std::vector &zones, + int zone_id + ) + { + for (auto &zone : zones) { + if (zone.id == zone_id) { + return zone; + } + } + + return NewEntity(); + } + + static Zone FindOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Zone entry{}; + + entry.short_name = row[0]; + entry.id = atoi(row[1]); + entry.file_name = row[2]; + entry.long_name = row[3]; + entry.map_file_name = row[4]; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16]; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51]; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Zone zone_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(zone_entry.short_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(zone_entry.file_name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(zone_entry.long_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(zone_entry.map_file_name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(zone_entry.safe_x) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(zone_entry.safe_y) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(zone_entry.safe_z) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(zone_entry.graveyard_id) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(zone_entry.min_level)); + update_values.push_back(columns[10] + " = " + std::to_string(zone_entry.min_status)); + update_values.push_back(columns[11] + " = " + std::to_string(zone_entry.zoneidnumber)); + update_values.push_back(columns[12] + " = " + std::to_string(zone_entry.version)); + update_values.push_back(columns[13] + " = " + std::to_string(zone_entry.timezone)); + update_values.push_back(columns[14] + " = " + std::to_string(zone_entry.maxclients)); + update_values.push_back(columns[15] + " = " + std::to_string(zone_entry.ruleset)); + update_values.push_back(columns[16] + " = '" + EscapeString(zone_entry.note) + "'"); + update_values.push_back(columns[17] + " = '" + EscapeString(zone_entry.underworld) + "'"); + update_values.push_back(columns[18] + " = '" + EscapeString(zone_entry.minclip) + "'"); + update_values.push_back(columns[19] + " = '" + EscapeString(zone_entry.maxclip) + "'"); + update_values.push_back(columns[20] + " = '" + EscapeString(zone_entry.fog_minclip) + "'"); + update_values.push_back(columns[21] + " = '" + EscapeString(zone_entry.fog_maxclip) + "'"); + update_values.push_back(columns[22] + " = " + std::to_string(zone_entry.fog_blue)); + update_values.push_back(columns[23] + " = " + std::to_string(zone_entry.fog_red)); + update_values.push_back(columns[24] + " = " + std::to_string(zone_entry.fog_green)); + update_values.push_back(columns[25] + " = " + std::to_string(zone_entry.sky)); + update_values.push_back(columns[26] + " = " + std::to_string(zone_entry.ztype)); + update_values.push_back(columns[27] + " = '" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); + update_values.push_back(columns[28] + " = '" + EscapeString(zone_entry.walkspeed) + "'"); + update_values.push_back(columns[29] + " = " + std::to_string(zone_entry.time_type)); + update_values.push_back(columns[30] + " = " + std::to_string(zone_entry.fog_red1)); + update_values.push_back(columns[31] + " = " + std::to_string(zone_entry.fog_green1)); + update_values.push_back(columns[32] + " = " + std::to_string(zone_entry.fog_blue1)); + update_values.push_back(columns[33] + " = '" + EscapeString(zone_entry.fog_minclip1) + "'"); + update_values.push_back(columns[34] + " = '" + EscapeString(zone_entry.fog_maxclip1) + "'"); + update_values.push_back(columns[35] + " = " + std::to_string(zone_entry.fog_red2)); + update_values.push_back(columns[36] + " = " + std::to_string(zone_entry.fog_green2)); + update_values.push_back(columns[37] + " = " + std::to_string(zone_entry.fog_blue2)); + update_values.push_back(columns[38] + " = '" + EscapeString(zone_entry.fog_minclip2) + "'"); + update_values.push_back(columns[39] + " = '" + EscapeString(zone_entry.fog_maxclip2) + "'"); + update_values.push_back(columns[40] + " = " + std::to_string(zone_entry.fog_red3)); + update_values.push_back(columns[41] + " = " + std::to_string(zone_entry.fog_green3)); + update_values.push_back(columns[42] + " = " + std::to_string(zone_entry.fog_blue3)); + update_values.push_back(columns[43] + " = '" + EscapeString(zone_entry.fog_minclip3) + "'"); + update_values.push_back(columns[44] + " = '" + EscapeString(zone_entry.fog_maxclip3) + "'"); + update_values.push_back(columns[45] + " = " + std::to_string(zone_entry.fog_red4)); + update_values.push_back(columns[46] + " = " + std::to_string(zone_entry.fog_green4)); + update_values.push_back(columns[47] + " = " + std::to_string(zone_entry.fog_blue4)); + update_values.push_back(columns[48] + " = '" + EscapeString(zone_entry.fog_minclip4) + "'"); + update_values.push_back(columns[49] + " = '" + EscapeString(zone_entry.fog_maxclip4) + "'"); + update_values.push_back(columns[50] + " = '" + EscapeString(zone_entry.fog_density) + "'"); + update_values.push_back(columns[51] + " = '" + EscapeString(zone_entry.flag_needed) + "'"); + update_values.push_back(columns[52] + " = " + std::to_string(zone_entry.canbind)); + update_values.push_back(columns[53] + " = " + std::to_string(zone_entry.cancombat)); + update_values.push_back(columns[54] + " = " + std::to_string(zone_entry.canlevitate)); + update_values.push_back(columns[55] + " = " + std::to_string(zone_entry.castoutdoor)); + update_values.push_back(columns[56] + " = " + std::to_string(zone_entry.hotzone)); + update_values.push_back(columns[57] + " = " + std::to_string(zone_entry.insttype)); + update_values.push_back(columns[58] + " = " + std::to_string(zone_entry.shutdowndelay)); + update_values.push_back(columns[59] + " = " + std::to_string(zone_entry.peqzone)); + update_values.push_back(columns[60] + " = " + std::to_string(zone_entry.expansion)); + update_values.push_back(columns[61] + " = " + std::to_string(zone_entry.suspendbuffs)); + update_values.push_back(columns[62] + " = " + std::to_string(zone_entry.rain_chance1)); + update_values.push_back(columns[63] + " = " + std::to_string(zone_entry.rain_chance2)); + update_values.push_back(columns[64] + " = " + std::to_string(zone_entry.rain_chance3)); + update_values.push_back(columns[65] + " = " + std::to_string(zone_entry.rain_chance4)); + update_values.push_back(columns[66] + " = " + std::to_string(zone_entry.rain_duration1)); + update_values.push_back(columns[67] + " = " + std::to_string(zone_entry.rain_duration2)); + update_values.push_back(columns[68] + " = " + std::to_string(zone_entry.rain_duration3)); + update_values.push_back(columns[69] + " = " + std::to_string(zone_entry.rain_duration4)); + update_values.push_back(columns[70] + " = " + std::to_string(zone_entry.snow_chance1)); + update_values.push_back(columns[71] + " = " + std::to_string(zone_entry.snow_chance2)); + update_values.push_back(columns[72] + " = " + std::to_string(zone_entry.snow_chance3)); + update_values.push_back(columns[73] + " = " + std::to_string(zone_entry.snow_chance4)); + update_values.push_back(columns[74] + " = " + std::to_string(zone_entry.snow_duration1)); + update_values.push_back(columns[75] + " = " + std::to_string(zone_entry.snow_duration2)); + update_values.push_back(columns[76] + " = " + std::to_string(zone_entry.snow_duration3)); + update_values.push_back(columns[77] + " = " + std::to_string(zone_entry.snow_duration4)); + update_values.push_back(columns[78] + " = '" + EscapeString(zone_entry.gravity) + "'"); + update_values.push_back(columns[79] + " = " + std::to_string(zone_entry.type)); + update_values.push_back(columns[80] + " = " + std::to_string(zone_entry.skylock)); + update_values.push_back(columns[81] + " = " + std::to_string(zone_entry.fast_regen_hp)); + update_values.push_back(columns[82] + " = " + std::to_string(zone_entry.fast_regen_mana)); + update_values.push_back(columns[83] + " = " + std::to_string(zone_entry.fast_regen_endurance)); + update_values.push_back(columns[84] + " = " + std::to_string(zone_entry.npc_max_aggro_dist)); + update_values.push_back(columns[85] + " = " + std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Zone InsertOne( + Zone zone_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_x) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_y) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_z) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.graveyard_id) + "'"); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.underworld) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.minclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.maxclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back("'" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.walkspeed) + "'"); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip1) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip1) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip2) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip2) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip3) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip3) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip4) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip4) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_density) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back("'" + EscapeString(zone_entry.gravity) + "'"); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_entry.id = results.LastInsertedID(); + return zone_entry; + } + + zone_entry = InstanceListRepository::NewEntity(); + + return zone_entry; + } + + static int InsertMany( + std::vector zone_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_entry: zone_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_x) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_y) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.safe_z) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.graveyard_id) + "'"); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.underworld) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.minclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.maxclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back("'" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.walkspeed) + "'"); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip1) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip1) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip2) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip2) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip3) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip3) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip4) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip4) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.fog_density) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back("'" + EscapeString(zone_entry.gravity) + "'"); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0]; + entry.id = atoi(row[1]); + entry.file_name = row[2]; + entry.long_name = row[3]; + entry.map_file_name = row[4]; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16]; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51]; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + +}; + +#endif //EQEMU_ZONE_REPOSITORY_H From d691db662111fb3870ce6fc9da3941d4e0284974 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 3 Apr 2020 03:31:38 -0500 Subject: [PATCH 060/272] Add repositories to cmakelists [skip ci] --- common/CMakeLists.txt | 176 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 172 insertions(+), 4 deletions(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 1eff58828..3dede0600 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -110,14 +110,182 @@ SET(common_sources util/uuid.cpp) SET(repositories - repositories/character_recipe_list_repository.h repositories/criteria/content_filter_criteria.h + repositories/aa_ability_repository.h + repositories/aa_ranks_repository.h + repositories/aa_rank_effects_repository.h + repositories/aa_rank_prereqs_repository.h + repositories/account_repository.h + repositories/account_flags_repository.h + repositories/account_ip_repository.h + repositories/account_rewards_repository.h + repositories/adventure_details_repository.h + repositories/adventure_members_repository.h + repositories/adventure_stats_repository.h + repositories/adventure_template_repository.h + repositories/adventure_template_entry_repository.h + repositories/adventure_template_entry_flavor_repository.h + repositories/alternate_currency_repository.h + repositories/auras_repository.h + repositories/banned_ips_repository.h + repositories/base_data_repository.h + repositories/blocked_spells_repository.h + repositories/books_repository.h + repositories/bugs_repository.h + repositories/bug_reports_repository.h + repositories/buyer_repository.h + repositories/character_activities_repository.h + repositories/character_alternate_abilities_repository.h + repositories/character_alt_currency_repository.h + repositories/character_auras_repository.h + repositories/character_bandolier_repository.h + repositories/character_bind_repository.h + repositories/character_buffs_repository.h + repositories/character_corpses_repository.h + repositories/character_corpse_items_repository.h + repositories/character_currency_repository.h + repositories/character_data_repository.h + repositories/character_disciplines_repository.h + repositories/character_enabledtasks_repository.h + repositories/character_inspect_messages_repository.h + repositories/character_item_recast_repository.h + repositories/character_languages_repository.h + repositories/character_leadership_abilities_repository.h + repositories/character_material_repository.h + repositories/character_memmed_spells_repository.h + repositories/character_pet_buffs_repository.h + repositories/character_pet_info_repository.h + repositories/character_pet_inventory_repository.h + repositories/character_potionbelt_repository.h + repositories/character_skills_repository.h + repositories/character_spells_repository.h + repositories/character_tasks_repository.h + repositories/character_tribute_repository.h + repositories/char_create_combinations_repository.h + repositories/char_create_point_allocations_repository.h + repositories/char_recipe_list_repository.h + repositories/chatchannels_repository.h + repositories/command_settings_repository.h + repositories/completed_tasks_repository.h + repositories/data_buckets_repository.h + repositories/db_str_repository.h + repositories/db_version_repository.h + repositories/discovered_items_repository.h + repositories/doors_repository.h + repositories/eqtime_repository.h + repositories/eventlog_repository.h + repositories/faction_base_data_repository.h + repositories/faction_list_repository.h + repositories/faction_list_mod_repository.h + repositories/faction_values_repository.h + repositories/fishing_repository.h + repositories/forage_repository.h + repositories/friends_repository.h + repositories/global_loot_repository.h + repositories/gm_ips_repository.h + repositories/goallists_repository.h + repositories/graveyard_repository.h repositories/grid_repository.h repositories/grid_entries_repository.h - repositories/spawngroup_repository.h - repositories/tradeskill_recipe_repository.h + repositories/ground_spawns_repository.h + repositories/group_id_repository.h + repositories/group_leaders_repository.h + repositories/guilds_repository.h + repositories/guild_bank_repository.h + repositories/guild_members_repository.h + repositories/guild_ranks_repository.h + repositories/guild_relations_repository.h + repositories/hackers_repository.h + repositories/horses_repository.h repositories/instance_list_repository.h - ) + repositories/instance_list_player_repository.h + repositories/inventory_repository.h + repositories/inventory_snapshots_repository.h + repositories/inventory_versions_repository.h + repositories/ip_exemptions_repository.h + repositories/items_repository.h + repositories/item_tick_repository.h + repositories/keyring_repository.h + repositories/launcher_repository.h + repositories/launcher_zones_repository.h + repositories/ldon_trap_entries_repository.h + repositories/ldon_trap_templates_repository.h + repositories/level_exp_mods_repository.h + repositories/lfguild_repository.h + repositories/login_accounts_repository.h + repositories/login_api_tokens_repository.h + repositories/login_server_admins_repository.h + repositories/login_server_list_types_repository.h + repositories/login_world_servers_repository.h + repositories/logsys_categories_repository.h + repositories/lootdrop_repository.h + repositories/lootdrop_entries_repository.h + repositories/loottable_repository.h + repositories/loottable_entries_repository.h + repositories/mail_repository.h + repositories/merchantlist_repository.h + repositories/merchantlist_temp_repository.h + repositories/name_filter_repository.h + repositories/npc_emotes_repository.h + repositories/npc_faction_repository.h + repositories/npc_faction_entries_repository.h + repositories/npc_scale_global_base_repository.h + repositories/npc_spells_repository.h + repositories/npc_spells_effects_repository.h + repositories/npc_spells_effects_entries_repository.h + repositories/npc_spells_entries_repository.h + repositories/npc_types_repository.h + repositories/npc_types_tint_repository.h + repositories/object_repository.h + repositories/object_contents_repository.h + repositories/perl_event_export_settings_repository.h + repositories/petitions_repository.h + repositories/pets_repository.h + repositories/pets_equipmentset_repository.h + repositories/pets_equipmentset_entries_repository.h + repositories/player_titlesets_repository.h + repositories/profanity_list_repository.h + repositories/proximities_repository.h + repositories/quest_globals_repository.h + repositories/raid_details_repository.h + repositories/raid_leaders_repository.h + repositories/raid_members_repository.h + repositories/reports_repository.h + repositories/respawn_times_repository.h + repositories/rule_sets_repository.h + repositories/rule_values_repository.h + repositories/saylink_repository.h + repositories/sharedbank_repository.h + repositories/skill_caps_repository.h + repositories/spawn2_repository.h + repositories/spawnentry_repository.h + repositories/spawngroup_repository.h + repositories/spawn_conditions_repository.h + repositories/spawn_condition_values_repository.h + repositories/spawn_events_repository.h + repositories/spells_new_repository.h + repositories/spell_buckets_repository.h + repositories/spell_globals_repository.h + repositories/starting_items_repository.h + repositories/start_zones_repository.h + repositories/tasks_repository.h + repositories/tasksets_repository.h + repositories/task_activities_repository.h + repositories/timers_repository.h + repositories/titles_repository.h + repositories/trader_repository.h + repositories/trader_audit_repository.h + repositories/tradeskill_recipe_repository.h + repositories/tradeskill_recipe_entries_repository.h + repositories/traps_repository.h + repositories/tributes_repository.h + repositories/tribute_levels_repository.h + repositories/variables_repository.h + repositories/veteran_reward_templates_repository.h + repositories/zone_repository.h + repositories/zone_flags_repository.h + repositories/zone_points_repository.h +) SET(common_headers any.h From 3aaa5020b12428bb248afc652f3e4b2613b1c380 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:04:48 -0500 Subject: [PATCH 061/272] Fix repository struct defaults for varchar | text --- common/repositories/aa_ability_repository.h | 2 +- .../repositories/account_flags_repository.h | 4 +- ...venture_template_entry_flavor_repository.h | 2 +- .../adventure_template_repository.h | 2 +- common/repositories/auras_repository.h | 2 +- common/repositories/banned_ips_repository.h | 2 +- common/repositories/base_data_repository.h | 29 +- common/repositories/books_repository.h | 2 +- common/repositories/bugs_repository.h | 10 +- .../repositories/character_buffs_repository.h | 2 +- .../character_inspect_messages_repository.h | 4 +- .../character_tribute_repository.h | 6 +- common/repositories/db_str_repository.h | 2 +- common/repositories/eventlog_repository.h | 2 +- .../faction_list_mod_repository.h | 2 +- common/repositories/friends_repository.h | 2 +- common/repositories/global_loot_repository.h | 36 +-- common/repositories/gm_ips_repository.h | 4 +- common/repositories/group_id_repository.h | 2 +- .../repositories/group_leaders_repository.h | 2 +- .../repositories/guild_members_repository.h | 2 +- common/repositories/guilds_repository.h | 2 +- common/repositories/hackers_repository.h | 6 +- .../repositories/instance_list_repository.h | 14 +- common/repositories/item_tick_repository.h | 2 +- common/repositories/lfguild_repository.h | 4 +- .../repositories/login_accounts_repository.h | 8 +- .../login_server_admins_repository.h | 12 +- .../login_server_list_types_repository.h | 2 +- .../login_world_servers_repository.h | 7 +- common/repositories/mail_repository.h | 4 +- common/repositories/npc_emotes_repository.h | 2 +- common/repositories/npc_types_repository.h | 2 +- .../repositories/npc_types_tint_repository.h | 2 +- common/repositories/petitions_repository.h | 2 +- common/repositories/raid_leaders_repository.h | 10 +- .../spawn_condition_values_repository.h | 2 +- common/repositories/tasks_repository.h | 2 +- common/repositories/titles_repository.h | 72 +++-- .../tradeskill_recipe_repository.h | 270 +++++++++++++++--- common/repositories/tributes_repository.h | 2 +- common/repositories/variables_repository.h | 4 +- .../veteran_reward_templates_repository.h | 2 +- common/repositories/zone_repository.h | 2 +- .../generators/repository-generator.pl | 13 +- 45 files changed, 375 insertions(+), 194 deletions(-) diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index 3873b7e61..b5010c627 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -116,7 +116,7 @@ public: AaAbility entry{}; entry.id = 0; - entry.name = 0; + entry.name = ""; entry.category = -1; entry.classes = 131070; entry.races = 65535; diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index 2181835f7..c23871c5f 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -94,8 +94,8 @@ public: AccountFlags entry{}; entry.p_accid = 0; - entry.p_flag = 0; - entry.p_value = 0; + entry.p_flag = ""; + entry.p_value = ""; return entry; } diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index 703ebf513..d55f9a772 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -92,7 +92,7 @@ public: AdventureTemplateEntryFlavor entry{}; entry.id = 0; - entry.text = 0; + entry.text = ""; return entry; } diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index 2087ae82a..edca7bd8d 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -154,7 +154,7 @@ public: AdventureTemplate entry{}; entry.id = 0; - entry.zone = 0; + entry.zone = ""; entry.zone_version = 0; entry.is_hard = 0; entry.is_raid = 0; diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index 5273ac0c5..cd8032ce2 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -111,7 +111,7 @@ public: entry.type = 0; entry.npc_type = 0; - entry.name = 0; + entry.name = ""; entry.spell_id = 0; entry.distance = 60; entry.aura_type = 1; diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index 3ea08b845..ebde824a2 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -91,7 +91,7 @@ public: { BannedIps entry{}; - entry.ip_address = 0; + entry.ip_address = ""; entry.notes = 0; return entry; diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index b5b2564a9..161776a25 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -27,8 +27,8 @@ class BaseDataRepository { public: struct BaseData { - int level; - int class; + int level; + int class; std::string hp; std::string mana; std::string end; @@ -107,9 +107,8 @@ public: { BaseData entry{}; - entry.level = 0; - entry. - class = 0; + entry.level = 0; + entry.class = 0; entry.hp = 0; entry.mana = 0; entry.end = 0; @@ -128,7 +127,7 @@ public: ) { for (auto &base_data : base_datas) { - if (base_data. { class }== base_data_id) { + if (base_data.class == base_data_id) { return base_data; } } @@ -152,9 +151,8 @@ public: if (results.RowCount() == 1) { BaseData entry{}; - entry.level = atoi(row[0]); - entry. - class = atoi(row[1]); + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); entry.hp = atof(row[2]); entry.mana = atof(row[3]); entry.end = atof(row[4]); @@ -203,16 +201,14 @@ public: update_values.push_back(columns[8] + " = '" + EscapeString(base_data_entry.mana_fac) + "'"); update_values.push_back(columns[9] + " = '" + EscapeString(base_data_entry.end_fac) + "'"); - auto - results = content_db.QueryDatabase( + auto results = content_db.QueryDatabase( fmt::format( "UPDATE {} SET {} WHERE {} = {}", TableName(), implode(", ", update_values), PrimaryKey(), - base_data_entry. - class - ) + base_data_entry.class + ) ); return (results.Success() ? results.RowsAffected() : 0); @@ -301,9 +297,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { BaseData entry{}; - entry.level = atoi(row[0]); - entry. - class = atoi(row[1]); + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); entry.hp = atof(row[2]); entry.mana = atof(row[3]); entry.end = atof(row[4]); diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h index f7927e41a..bd2404aff 100644 --- a/common/repositories/books_repository.h +++ b/common/repositories/books_repository.h @@ -94,7 +94,7 @@ public: Books entry{}; entry.name = ""; - entry.txtfile = 0; + entry.txtfile = ""; entry.language = 0; return entry; diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index db3a71c7e..a3fbf25fc 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -114,16 +114,16 @@ public: Bugs entry{}; entry.id = 0; - entry.zone = 0; - entry.name = 0; - entry.ui = 0; + entry.zone = ""; + entry.name = ""; + entry.ui = ""; entry.x = 0; entry.y = 0; entry.z = 0; - entry.type = 0; + entry.type = ""; entry.flag = 0; entry.target = 0; - entry.bug = 0; + entry.bug = ""; entry.date = 0; entry.status = 0; diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index 044ce79c6..d90ae8d13 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -125,7 +125,7 @@ public: entry.slot_id = 0; entry.spell_id = 0; entry.caster_level = 0; - entry.caster_name = 0; + entry.caster_name = ""; entry.ticsremaining = 0; entry.counters = 0; entry.numhits = 0; diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index df5047232..00cc7389c 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -160,9 +160,7 @@ public: auto columns = Columns(); - update_values.push_back( - columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'" - ); + update_values.push_back(columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); auto results = database.QueryDatabase( fmt::format( diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h index b0216e779..ceab9f7b7 100644 --- a/common/repositories/character_tribute_repository.h +++ b/common/repositories/character_tribute_repository.h @@ -34,7 +34,7 @@ public: static std::string PrimaryKey() { - return std::string(""); + return std::string("id"); } static std::vector Columns() @@ -106,7 +106,7 @@ public: ) { for (auto &character_tribute : character_tributes) { - if (character_tribute.== character_tribute_id) { + if (character_tribute.id == character_tribute_id) { return character_tribute; } } @@ -174,7 +174,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_tribute_entry. + character_tribute_entry.id ) ); diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index 91a5f2bf4..6860ab990 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -95,7 +95,7 @@ public: entry.id = 0; entry.type = 0; - entry.value = 0; + entry.value = ""; return entry; } diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index adc413d55..4c6cb93d1 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -115,7 +115,7 @@ public: entry.target = 'None'; entry.time = current_timestamp(); entry.descriptiontype = ""; - entry.description = 0; + entry.description = ""; entry.event_nid = 0; return entry; diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 6cd1ec727..7f98b7fcb 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -98,7 +98,7 @@ public: entry.id = 0; entry.faction_id = 0; entry.mod = 0; - entry.mod_name = 0; + entry.mod_name = ""; return entry; } diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 37d7673c8..06d0e3cc3 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -95,7 +95,7 @@ public: entry.charid = 0; entry.type = 1; - entry.name = 0; + entry.name = ""; return entry; } diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index 9c59f3468..be0b89057 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -122,11 +122,10 @@ public: entry.rare = 0; entry.raid = 0; entry.race = 0; - entry. - class = 0; - entry.bodytype = 0; - entry.zone = 0; - entry.hot_zone = 0; + entry.class = 0; + entry.bodytype = 0; + entry.zone = 0; + entry.hot_zone = 0; return entry; } @@ -170,11 +169,10 @@ public: entry.rare = atoi(row[6]); entry.raid = atoi(row[7]); entry.race = row[8]; - entry. - class = row[9]; - entry.bodytype = row[10]; - entry.zone = row[11]; - entry.hot_zone = atoi(row[12]); + entry.class = row[9]; + entry.bodytype = row[10]; + entry.zone = row[11]; + entry.hot_zone = atoi(row[12]); return entry; } @@ -214,8 +212,7 @@ public: update_values.push_back(columns[6] + " = " + std::to_string(global_loot_entry.rare)); update_values.push_back(columns[7] + " = " + std::to_string(global_loot_entry.raid)); update_values.push_back(columns[8] + " = '" + EscapeString(global_loot_entry.race) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(global_loot_entry. - class) +"'"); + update_values.push_back(columns[9] + " = '" + EscapeString(global_loot_entry.class) + "'"); update_values.push_back(columns[10] + " = '" + EscapeString(global_loot_entry.bodytype) + "'"); update_values.push_back(columns[11] + " = '" + EscapeString(global_loot_entry.zone) + "'"); update_values.push_back(columns[12] + " = " + std::to_string(global_loot_entry.hot_zone)); @@ -247,8 +244,7 @@ public: insert_values.push_back(std::to_string(global_loot_entry.rare)); insert_values.push_back(std::to_string(global_loot_entry.raid)); insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry. - class) +"'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); @@ -288,8 +284,7 @@ public: insert_values.push_back(std::to_string(global_loot_entry.rare)); insert_values.push_back(std::to_string(global_loot_entry.raid)); insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry. - class) +"'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); @@ -335,11 +330,10 @@ public: entry.rare = atoi(row[6]); entry.raid = atoi(row[7]); entry.race = row[8]; - entry. - class = row[9]; - entry.bodytype = row[10]; - entry.zone = row[11]; - entry.hot_zone = atoi(row[12]); + entry.class = row[9]; + entry.bodytype = row[10]; + entry.zone = row[11]; + entry.hot_zone = atoi(row[12]); all_entries.push_back(entry); } diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index 085b41651..017f2d289 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -93,9 +93,9 @@ public: { GmIps entry{}; - entry.name = 0; + entry.name = ""; entry.account_id = 0; - entry.ip_address = 0; + entry.ip_address = ""; return entry; } diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 387ca4deb..84a43786d 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -97,7 +97,7 @@ public: entry.groupid = 0; entry.charid = 0; - entry.name = 0; + entry.name = ""; entry.ismerc = 0; return entry; diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index 30b34db28..39ccb6db7 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -112,7 +112,7 @@ public: entry.maintank = ""; entry.assist = ""; entry.puller = ""; - entry.mentoree = 0; + entry.mentoree = ""; entry.mentor_percent = 0; return entry; diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index 6601196ee..0ea708820 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -112,7 +112,7 @@ public: entry.total_tribute = 0; entry.last_tribute = 0; entry.banker = 0; - entry.public_note = 0; + entry.public_note = ""; entry.alt = 0; return entry; diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index e785ef955..6c0fc5234 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -109,7 +109,7 @@ public: entry.name = ""; entry.leader = 0; entry.minstatus = 0; - entry.motd = 0; + entry.motd = ""; entry.tribute = 0; entry.motd_setter = ""; entry.channel = ""; diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index 23bc189ba..758548577 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -100,9 +100,9 @@ public: Hackers entry{}; entry.id = 0; - entry.account = 0; - entry.name = 0; - entry.hacked = 0; + entry.account = ""; + entry.name = ""; + entry.hacked = ""; entry.zone = 0; entry.date = current_timestamp(); diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index f368233cb..cc2c113a3 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -27,13 +27,13 @@ class InstanceListRepository { public: struct InstanceList { - int id; - int zone; - int version; - int is_global; - int start_time; - int duration; - int never_expires; + int id; + int zone; + int8 version; + int8 is_global; + int start_time; + int duration; + int8 never_expires; }; static std::string PrimaryKey() diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index cfb515c44..56c717101 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -103,7 +103,7 @@ public: entry.it_chance = 0; entry.it_level = 0; entry.it_id = 0; - entry.it_qglobal = 0; + entry.it_qglobal = ""; entry.it_bagslot = 0; return entry; diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index c95968ace..3a129cfdb 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -106,8 +106,8 @@ public: Lfguild entry{}; entry.type = 0; - entry.name = 0; - entry.comment = 0; + entry.name = ""; + entry.comment = ""; entry.fromlevel = 0; entry.tolevel = 0; entry.classes = 0; diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index 9a9d8beca..7265f562e 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -106,11 +106,11 @@ public: LoginAccounts entry{}; entry.id = 0; - entry.account_name = 0; - entry.account_password = 0; - entry.account_email = 0; + entry.account_name = ""; + entry.account_password = ""; + entry.account_email = ""; entry.source_loginserver = 0; - entry.last_ip_address = 0; + entry.last_ip_address = ""; entry.last_login_date = 0; entry.created_at = 0; entry.updated_at = current_timestamp(); diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index efb260a4a..21c4f9e66 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -104,13 +104,13 @@ public: LoginServerAdmins entry{}; entry.id = 0; - entry.account_name = 0; - entry.account_password = 0; - entry.first_name = 0; - entry.last_name = 0; - entry.email = 0; + entry.account_name = ""; + entry.account_password = ""; + entry.first_name = ""; + entry.last_name = ""; + entry.email = ""; entry.registration_date = 0; - entry.registration_ip_address = 0; + entry.registration_ip_address = ""; return entry; } diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index c99e05729..e328109ca 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -92,7 +92,7 @@ public: LoginServerListTypes entry{}; entry.id = 0; - entry.description = 0; + entry.description = ""; return entry; } diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index 519de2457..fa577837f 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -108,8 +108,8 @@ public: LoginWorldServers entry{}; entry.id = 0; - entry.long_name = 0; - entry.short_name = 0; + entry.long_name = ""; + entry.short_name = ""; entry.tag_description = ""; entry.login_server_list_type_id = 0; entry.last_login_date = 0; @@ -195,8 +195,7 @@ public: update_values.push_back(columns[1] + " = '" + EscapeString(login_world_servers_entry.long_name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(login_world_servers_entry.short_name) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(login_world_servers_entry.tag_description) + "'"); - update_values.push_back( - columns[4] + " = " + std::to_string(login_world_servers_entry.login_server_list_type_id)); + update_values.push_back(columns[4] + " = " + std::to_string(login_world_servers_entry.login_server_list_type_id)); update_values.push_back(columns[5] + " = '" + EscapeString(login_world_servers_entry.last_login_date) + "'"); update_values.push_back(columns[6] + " = '" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); update_values.push_back(columns[7] + " = " + std::to_string(login_world_servers_entry.login_server_admin_id)); diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index c1e87ca7f..13a4e83d8 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -108,8 +108,8 @@ public: entry.timestamp = 0; entry.from = ""; entry.subject = ""; - entry.body = 0; - entry.to = 0; + entry.body = ""; + entry.to = ""; entry.status = 0; return entry; diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 780e7e973..14a6df2b0 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -101,7 +101,7 @@ public: entry.emoteid = 0; entry.event_ = 0; entry.type = 0; - entry.text = 0; + entry.text = ""; return entry; } diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index a45407bcb..9d872d0fa 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -332,7 +332,7 @@ public: NpcTypes entry{}; entry.id = 0; - entry.name = 0; + entry.name = ""; entry.lastname = 0; entry.level = 0; entry.race = 0; diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 657e3e997..45471656d 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -146,7 +146,7 @@ public: NpcTypesTint entry{}; entry.id = 0; - entry.tint_set_name = 0; + entry.tint_set_name = ""; entry.red1h = 0; entry.grn1h = 0; entry.blu1h = 0; diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index 29f5a64f9..e71866c9b 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -124,7 +124,7 @@ public: entry.charname = ""; entry.accountname = ""; entry.lastgm = ""; - entry.petitiontext = 0; + entry.petitiontext = ""; entry.gmtext = 0; entry.zone = ""; entry.urgency = 0; diff --git a/common/repositories/raid_leaders_repository.h b/common/repositories/raid_leaders_repository.h index 8c804bbe0..592f0ca01 100644 --- a/common/repositories/raid_leaders_repository.h +++ b/common/repositories/raid_leaders_repository.h @@ -107,12 +107,12 @@ public: entry.gid = 0; entry.rid = 0; - entry.marknpc = 0; - entry.maintank = 0; - entry.assist = 0; - entry.puller = 0; + entry.marknpc = ""; + entry.maintank = ""; + entry.assist = ""; + entry.puller = ""; entry.leadershipaa = 0; - entry.mentoree = 0; + entry.mentoree = ""; entry.mentor_percent = 0; return entry; diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index 5af50f4cd..8a6bbbc7f 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -97,7 +97,7 @@ public: entry.id = 0; entry.value = 0; - entry.zone = 0; + entry.zone = ""; entry.instance_id = 0; return entry; diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index db5fbe337..bb68b5652 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -124,7 +124,7 @@ public: entry.duration = 0; entry.duration_code = 0; entry.title = ""; - entry.description = 0; + entry.description = ""; entry.reward = ""; entry.rewardid = 0; entry.cashreward = 0; diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index 73c05fe71..fcf4f8be6 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -27,12 +27,12 @@ class TitlesRepository { public: struct Titles { - int id; - int8 skill_id; - int min_skill_value; - int max_skill_value; - int min_aa_points; - int max_aa_points; + int id; + int8 skill_id; + int min_skill_value; + int max_skill_value; + int min_aa_points; + int max_aa_points; int8 class; int8 gender; int char_id; @@ -121,15 +121,14 @@ public: entry.max_skill_value = -1; entry.min_aa_points = -1; entry.max_aa_points = -1; - entry. - class = -1; - entry.gender = -1; - entry.char_id = -1; - entry.status = -1; - entry.item_id = -1; - entry.prefix = ""; - entry.suffix = ""; - entry.title_set = 0; + entry.class = -1; + entry.gender = -1; + entry.char_id = -1; + entry.status = -1; + entry.item_id = -1; + entry.prefix = ""; + entry.suffix = ""; + entry.title_set = 0; return entry; } @@ -170,15 +169,14 @@ public: entry.max_skill_value = atoi(row[3]); entry.min_aa_points = atoi(row[4]); entry.max_aa_points = atoi(row[5]); - entry. - class = atoi(row[6]); - entry.gender = atoi(row[7]); - entry.char_id = atoi(row[8]); - entry.status = atoi(row[9]); - entry.item_id = atoi(row[10]); - entry.prefix = row[11]; - entry.suffix = row[12]; - entry.title_set = atoi(row[13]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11]; + entry.suffix = row[12]; + entry.title_set = atoi(row[13]); return entry; } @@ -215,8 +213,7 @@ public: update_values.push_back(columns[3] + " = " + std::to_string(titles_entry.max_skill_value)); update_values.push_back(columns[4] + " = " + std::to_string(titles_entry.min_aa_points)); update_values.push_back(columns[5] + " = " + std::to_string(titles_entry.max_aa_points)); - update_values.push_back(columns[6] + " = " + std::to_string(titles_entry. - class)); + update_values.push_back(columns[6] + " = " + std::to_string(titles_entry.class)); update_values.push_back(columns[7] + " = " + std::to_string(titles_entry.gender)); update_values.push_back(columns[8] + " = " + std::to_string(titles_entry.char_id)); update_values.push_back(columns[9] + " = " + std::to_string(titles_entry.status)); @@ -249,8 +246,7 @@ public: insert_values.push_back(std::to_string(titles_entry.max_skill_value)); insert_values.push_back(std::to_string(titles_entry.min_aa_points)); insert_values.push_back(std::to_string(titles_entry.max_aa_points)); - insert_values.push_back(std::to_string(titles_entry. - class)); + insert_values.push_back(std::to_string(titles_entry.class)); insert_values.push_back(std::to_string(titles_entry.gender)); insert_values.push_back(std::to_string(titles_entry.char_id)); insert_values.push_back(std::to_string(titles_entry.status)); @@ -291,8 +287,7 @@ public: insert_values.push_back(std::to_string(titles_entry.max_skill_value)); insert_values.push_back(std::to_string(titles_entry.min_aa_points)); insert_values.push_back(std::to_string(titles_entry.max_aa_points)); - insert_values.push_back(std::to_string(titles_entry. - class)); + insert_values.push_back(std::to_string(titles_entry.class)); insert_values.push_back(std::to_string(titles_entry.gender)); insert_values.push_back(std::to_string(titles_entry.char_id)); insert_values.push_back(std::to_string(titles_entry.status)); @@ -339,15 +334,14 @@ public: entry.max_skill_value = atoi(row[3]); entry.min_aa_points = atoi(row[4]); entry.max_aa_points = atoi(row[5]); - entry. - class = atoi(row[6]); - entry.gender = atoi(row[7]); - entry.char_id = atoi(row[8]); - entry.status = atoi(row[9]); - entry.item_id = atoi(row[10]); - entry.prefix = row[11]; - entry.suffix = row[12]; - entry.title_set = atoi(row[13]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11]; + entry.suffix = row[12]; + entry.title_set = atoi(row[13]); all_entries.push_back(entry); } diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h index 15ee26ce3..428d120ac 100644 --- a/common/repositories/tradeskill_recipe_repository.h +++ b/common/repositories/tradeskill_recipe_repository.h @@ -29,17 +29,22 @@ public: struct TradeskillRecipe { int id; std::string name; - int tradeskill; - int skillneeded; - int trivial; - uint8 nofail; - int replace_container; + int16 tradeskill; + int16 skillneeded; + int16 trivial; + int8 nofail; + int8 replace_container; std::string notes; - uint8 must_learn; - uint8 quest; - uint8 enabled; + int8 must_learn; + int8 quest; + int8 enabled; }; + static std::string PrimaryKey() + { + return std::string("id"); + } + static std::vector Columns() { return { @@ -62,6 +67,21 @@ public: return std::string(implode(", ", Columns())); } + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + static std::string TableName() { return std::string("tradeskill_recipe"); @@ -69,18 +89,25 @@ public: static std::string BaseSelect() { - return std::string( - fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ) + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() ); } static TradeskillRecipe NewEntity() { - TradeskillRecipe entry; + TradeskillRecipe entry{}; entry.id = 0; entry.name = ""; @@ -89,46 +116,215 @@ public: entry.trivial = 0; entry.nofail = 0; entry.replace_container = 0; - entry.notes = ""; + entry.notes = 0; entry.must_learn = 0; entry.quest = 0; - entry.enabled = 0; + entry.enabled = 1; return entry; } - static TradeskillRecipe GetRecipe(int recipe_id) + static TradeskillRecipe GetTradeskillRecipeEntry( + const std::vector &tradeskill_recipes, + int tradeskill_recipe_id + ) + { + for (auto &tradeskill_recipe : tradeskill_recipes) { + if (tradeskill_recipe.id == tradeskill_recipe_id) { + return tradeskill_recipe; + } + } + + return NewEntity(); + } + + static TradeskillRecipe FindOne( + int tradeskill_recipe_id + ) { auto results = content_db.QueryDatabase( fmt::format( - "{} WHERE id = {}", + "{} WHERE id = {} LIMIT 1", BaseSelect(), - recipe_id + tradeskill_recipe_id ) ); - TradeskillRecipe tradeskill_recipe = NewEntity(); - auto row = results.begin(); - if (results.RowCount() == 0) { - return tradeskill_recipe; + if (results.RowCount() == 1) { + TradeskillRecipe entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7]; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + + return entry; } - tradeskill_recipe.id = atoi(row[0]); - tradeskill_recipe.name = (row[1] ? row[1] : ""); - tradeskill_recipe.tradeskill = atoi(row[2]); - tradeskill_recipe.skillneeded = atoi(row[3]); - tradeskill_recipe.trivial = atoi(row[4]); - tradeskill_recipe.nofail = atoi(row[5]); - tradeskill_recipe.replace_container = atoi(row[6]); - tradeskill_recipe.notes = (row[7] ? row[7] : ""); - tradeskill_recipe.must_learn = atoi(row[8]); - tradeskill_recipe.quest = atoi(row[9]); - tradeskill_recipe.enabled = atoi(row[10]); + return NewEntity(); + } - return tradeskill_recipe; + static int DeleteOne( + int tradeskill_recipe_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tradeskill_recipe_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TradeskillRecipe tradeskill_recipe_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(tradeskill_recipe_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entry.tradeskill)); + update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entry.skillneeded)); + update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entry.trivial)); + update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entry.nofail)); + update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entry.replace_container)); + update_values.push_back(columns[7] + " = '" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(tradeskill_recipe_entry.must_learn)); + update_values.push_back(columns[9] + " = " + std::to_string(tradeskill_recipe_entry.quest)); + update_values.push_back(columns[10] + " = " + std::to_string(tradeskill_recipe_entry.enabled)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tradeskill_recipe_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TradeskillRecipe InsertOne( + TradeskillRecipe tradeskill_recipe_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tradeskill_recipe_entry.id = results.LastInsertedID(); + return tradeskill_recipe_entry; + } + + tradeskill_recipe_entry = InstanceListRepository::NewEntity(); + + return tradeskill_recipe_entry; + } + + static int InsertMany( + std::vector tradeskill_recipe_entries + ) + { + std::vector insert_chunks; + + for (auto &tradeskill_recipe_entry: tradeskill_recipe_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipe entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7]; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; } }; -#endif +#endif //EQEMU_TRADESKILL_RECIPE_REPOSITORY_H diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index 8a730305c..fc01a77c1 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -100,7 +100,7 @@ public: entry.id = 0; entry.unknown = 0; entry.name = ""; - entry.descr = 0; + entry.descr = ""; entry.isguild = 0; return entry; diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h index 4c3584838..5d7303253 100644 --- a/common/repositories/variables_repository.h +++ b/common/repositories/variables_repository.h @@ -96,8 +96,8 @@ public: Variables entry{}; entry.varname = ""; - entry.value = 0; - entry.information = 0; + entry.value = ""; + entry.information = ""; entry.ts = current_timestamp(); return entry; diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 2f11a6b63..18313f4ef 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -98,7 +98,7 @@ public: VeteranRewardTemplates entry{}; entry.claim_id = 0; - entry.name = 0; + entry.name = ""; entry.item_id = 0; entry.charges = 0; entry.reward_slot = 0; diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index 3119ad1ee..0d5c49f35 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -262,7 +262,7 @@ public: entry.short_name = 0; entry.id = 0; entry.file_name = 0; - entry.long_name = 0; + entry.long_name = ""; entry.map_file_name = 0; entry.safe_x = 0; entry.safe_y = 0; diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 15bec02b0..206202de6 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -78,9 +78,8 @@ my $pass = $config->{"server"}{"database"}{"password"}; my $dsn = "dbi:mysql:$database_name:$host:3306"; my $connect = DBI->connect($dsn, $user, $pass); -my @tables = (); +my @tables = ($requested_table_to_generate); if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { - my $table_names_exec = $connect->prepare( " SELECT @@ -177,6 +176,9 @@ foreach my $table_to_generate (@tables) { my %table_data = (); my %table_primary_key = (); $ex->execute($database_name, $table_to_generate); + + $table_primary_key{$table_to_generate} = "id"; + while (my @row = $ex->fetchrow_array()) { my $column_name = $row[0]; my $table_name = $row[1]; @@ -197,6 +199,9 @@ foreach my $table_to_generate (@tables) { if ($column_default eq "''") { $default_value = '""'; } + if (trim($column_default) eq "" && $column_type =~ /text|varchar/i) { + $default_value = '""'; + } my $struct_data_type = translate_mysql_data_type_to_c($data_type); @@ -275,7 +280,7 @@ foreach my $table_to_generate (@tables) { exit; } - foreach my $column (keys %{ $table_data{$table_to_generate} }) { + foreach my $column (keys %{$table_data{$table_to_generate}}) { my $column_data = $table_data{$table_to_generate}{$column}; my $data_type = $column_data->[0]; my $column_type = $column_data->[1]; @@ -367,4 +372,4 @@ sub translate_mysql_data_type_to_c { } return $struct_data_type; -} \ No newline at end of file +} From 9e27ffacff3318bc90d2181c08983fb7eae0400d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:13:47 -0500 Subject: [PATCH 062/272] Add tables to ignore list that do not follow typical table conventions --- common/repositories/account_repository.h | 50 ++-- .../character_enabledtasks_repository.h | 255 ----------------- common/repositories/keyring_repository.h | 261 ------------------ .../repositories/profanity_list_repository.h | 253 ----------------- common/repositories/zone_flags_repository.h | 255 ----------------- .../generators/repository-generator.pl | 13 + 6 files changed, 38 insertions(+), 1049 deletions(-) delete mode 100644 common/repositories/character_enabledtasks_repository.h delete mode 100644 common/repositories/keyring_repository.h delete mode 100644 common/repositories/profanity_list_repository.h delete mode 100644 common/repositories/zone_flags_repository.h diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index 6d8b51a9e..74184e755 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -35,15 +35,15 @@ public: int status; std::string ls_id; int lsaccount_id; - int gmspeed; - int revoked; + int8 gmspeed; + int8 revoked; int karma; std::string minilogin_ip; - int hideme; - int rulesflag; + int8 hideme; + int8 rulesflag; std::string suspendeduntil; int time_creation; - int expansion; + int8 expansion; std::string ban_reason; std::string suspend_reason; }; @@ -56,25 +56,25 @@ public: static std::vector Columns() { return { - "id" - "name" - "charname" - "sharedplat" - "password" - "status" - "ls_id" - "lsaccount_id" - "gmspeed" - "revoked" - "karma" - "minilogin_ip" - "hideme" - "rulesflag" - "suspendeduntil" - "time_creation" - "expansion" - "ban_reason" - "suspend_reason" + "id", + "name", + "charname", + "sharedplat", + "password", + "status", + "ls_id", + "lsaccount_id", + "gmspeed", + "revoked", + "karma", + "minilogin_ip", + "hideme", + "rulesflag", + "suspendeduntil", + "time_creation", + "expansion", + "ban_reason", + "suspend_reason", }; } @@ -100,7 +100,7 @@ public: static std::string TableName() { - return std::string("{{TABLE_NAME}}"); + return std::string("account"); } static std::string BaseSelect() diff --git a/common/repositories/character_enabledtasks_repository.h b/common/repositories/character_enabledtasks_repository.h deleted file mode 100644 index 9bb4b04b6..000000000 --- a/common/repositories/character_enabledtasks_repository.h +++ /dev/null @@ -1,255 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H -#define EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class CharacterEnabledtasksRepository { -public: - struct CharacterEnabledtasks { - int charid; - int taskid; - }; - - static std::string PrimaryKey() - { - return std::string("taskid"); - } - - static std::vector Columns() - { - return { - "charid", - "taskid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_enabledtasks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterEnabledtasks NewEntity() - { - CharacterEnabledtasks entry{}; - - entry.charid = 0; - entry.taskid = 0; - - return entry; - } - - static CharacterEnabledtasks GetCharacterEnabledtasksEntry( - const std::vector &character_enabledtaskss, - int character_enabledtasks_id - ) - { - for (auto &character_enabledtasks : character_enabledtaskss) { - if (character_enabledtasks.taskid == character_enabledtasks_id) { - return character_enabledtasks; - } - } - - return NewEntity(); - } - - static CharacterEnabledtasks FindOne( - int character_enabledtasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_enabledtasks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterEnabledtasks entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_enabledtasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_enabledtasks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterEnabledtasks character_enabledtasks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_enabledtasks_entry.taskid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterEnabledtasks InsertOne( - CharacterEnabledtasks character_enabledtasks_entry - ) - { - std::vector insert_values; - - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_enabledtasks_entry.id = results.LastInsertedID(); - return character_enabledtasks_entry; - } - - character_enabledtasks_entry = InstanceListRepository::NewEntity(); - - return character_enabledtasks_entry; - } - - static int InsertMany( - std::vector character_enabledtasks_entries - ) - { - std::vector insert_chunks; - - for (auto &character_enabledtasks_entry: character_enabledtasks_entries) { - std::vector insert_values; - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterEnabledtasks entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_CHARACTER_ENABLEDTASKS_REPOSITORY_H diff --git a/common/repositories/keyring_repository.h b/common/repositories/keyring_repository.h deleted file mode 100644 index a6c874780..000000000 --- a/common/repositories/keyring_repository.h +++ /dev/null @@ -1,261 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_KEYRING_REPOSITORY_H -#define EQEMU_KEYRING_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class KeyringRepository { -public: - struct Keyring { - int char_id; - int item_id; - }; - - static std::string PrimaryKey() - { - return std::string(""); - } - - static std::vector Columns() - { - return { - "char_id", - "item_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("keyring"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Keyring NewEntity() - { - Keyring entry{}; - - entry.char_id = 0; - entry.item_id = 0; - - return entry; - } - - static Keyring GetKeyringEntry( - const std::vector &keyrings, - int keyring_id - ) - { - for (auto &keyring : keyrings) { - if (keyring.== keyring_id) { - return keyring; - } - } - - return NewEntity(); - } - - static Keyring FindOne( - int keyring_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - keyring_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Keyring entry{}; - - entry.char_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int keyring_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - keyring_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Keyring keyring_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(keyring_entry.char_id)); - update_values.push_back(columns[1] + " = " + std::to_string(keyring_entry.item_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - keyring_entry. - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Keyring InsertOne( - Keyring keyring_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(keyring_entry.char_id)); - insert_values.push_back(std::to_string(keyring_entry.item_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - keyring_entry.id = results.LastInsertedID(); - return keyring_entry; - } - - keyring_entry = InstanceListRepository::NewEntity(); - - return keyring_entry; - } - - static int InsertMany( - std::vector keyring_entries - ) - { - std::vector insert_chunks; - - for (auto &keyring_entry: keyring_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(keyring_entry.char_id)); - insert_values.push_back(std::to_string(keyring_entry.item_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Keyring entry{}; - - entry.char_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_KEYRING_REPOSITORY_H diff --git a/common/repositories/profanity_list_repository.h b/common/repositories/profanity_list_repository.h deleted file mode 100644 index 8d857db79..000000000 --- a/common/repositories/profanity_list_repository.h +++ /dev/null @@ -1,253 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_PROFANITY_LIST_REPOSITORY_H -#define EQEMU_PROFANITY_LIST_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class ProfanityListRepository { -public: - struct ProfanityList { - std::string word; - }; - - static std::string PrimaryKey() - { - return std::string(""); - } - - static std::vector Columns() - { - return { - "word", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("profanity_list"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static ProfanityList NewEntity() - { - ProfanityList entry{}; - - entry.word = 0; - - return entry; - } - - static ProfanityList GetProfanityListEntry( - const std::vector &profanity_lists, - int profanity_list_id - ) - { - for (auto &profanity_list : profanity_lists) { - if (profanity_list.== profanity_list_id) { - return profanity_list; - } - } - - return NewEntity(); - } - - static ProfanityList FindOne( - int profanity_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - profanity_list_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - ProfanityList entry{}; - - entry.word = row[0]; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int profanity_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - profanity_list_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - ProfanityList profanity_list_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = '" + EscapeString(profanity_list_entry.word) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - profanity_list_entry. - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static ProfanityList InsertOne( - ProfanityList profanity_list_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(profanity_list_entry.word) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - profanity_list_entry.id = results.LastInsertedID(); - return profanity_list_entry; - } - - profanity_list_entry = InstanceListRepository::NewEntity(); - - return profanity_list_entry; - } - - static int InsertMany( - std::vector profanity_list_entries - ) - { - std::vector insert_chunks; - - for (auto &profanity_list_entry: profanity_list_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(profanity_list_entry.word) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ProfanityList entry{}; - - entry.word = row[0]; - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_PROFANITY_LIST_REPOSITORY_H diff --git a/common/repositories/zone_flags_repository.h b/common/repositories/zone_flags_repository.h deleted file mode 100644 index 63ddbdda4..000000000 --- a/common/repositories/zone_flags_repository.h +++ /dev/null @@ -1,255 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_ZONE_FLAGS_REPOSITORY_H -#define EQEMU_ZONE_FLAGS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class ZoneFlagsRepository { -public: - struct ZoneFlags { - int charID; - int zoneID; - }; - - static std::string PrimaryKey() - { - return std::string("zoneID"); - } - - static std::vector Columns() - { - return { - "charID", - "zoneID", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("zone_flags"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static ZoneFlags NewEntity() - { - ZoneFlags entry{}; - - entry.charID = 0; - entry.zoneID = 0; - - return entry; - } - - static ZoneFlags GetZoneFlagsEntry( - const std::vector &zone_flagss, - int zone_flags_id - ) - { - for (auto &zone_flags : zone_flagss) { - if (zone_flags.zoneID == zone_flags_id) { - return zone_flags; - } - } - - return NewEntity(); - } - - static ZoneFlags FindOne( - int zone_flags_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - zone_flags_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - ZoneFlags entry{}; - - entry.charID = atoi(row[0]); - entry.zoneID = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int zone_flags_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - zone_flags_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - ZoneFlags zone_flags_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - zone_flags_entry.zoneID - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static ZoneFlags InsertOne( - ZoneFlags zone_flags_entry - ) - { - std::vector insert_values; - - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - zone_flags_entry.id = results.LastInsertedID(); - return zone_flags_entry; - } - - zone_flags_entry = InstanceListRepository::NewEntity(); - - return zone_flags_entry; - } - - static int InsertMany( - std::vector zone_flags_entries - ) - { - std::vector insert_chunks; - - for (auto &zone_flags_entry: zone_flags_entries) { - std::vector insert_values; - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ZoneFlags entry{}; - - entry.charID = atoi(row[0]); - entry.zoneID = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_ZONE_FLAGS_REPOSITORY_H diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 206202de6..ffd6144f0 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -114,12 +114,25 @@ foreach my $table_to_generate (@tables) { "login_tables", ); + # These tables don't have a typical schema + my @table_ignore_list = ( + "character_enabledtasks", + "keyring", + "profanity_list", + "zone_flags", + ); + foreach my $category (@categories) { if ($table_to_generate ~~ $database_schema->{$category}) { $table_found_in_schema = 1; } } + if ($table_to_generate ~~ @table_ignore_list) { + print "Table [$table_to_generate] is on ignore list... skipping...\n"; + $table_found_in_schema = 0; + } + if ($table_found_in_schema == 0) { print "Table [$table_to_generate] not found in schema, skipping\n"; next; From a824ddec44803e3fdc2321b0d9a4f7327f022586 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:26:30 -0500 Subject: [PATCH 063/272] Fix float types, remove some errant table repositories [skip ci] --- .../adventure_template_repository.h | 28 +- common/repositories/base_data_repository.h | 20 +- .../repositories/blocked_spells_repository.h | 12 +- common/repositories/bug_reports_repository.h | 6 +- common/repositories/bugs_repository.h | 6 +- .../repositories/character_bind_repository.h | 16 +- .../character_corpses_repository.h | 8 +- .../repositories/character_data_repository.h | 8 +- .../character_pet_info_repository.h | 2 +- common/repositories/db_version_repository.h | 253 --------------- common/repositories/doors_repository.h | 18 +- common/repositories/eqtime_repository.h | 293 ------------------ common/repositories/graveyard_repository.h | 12 +- .../repositories/ground_spawns_repository.h | 12 +- .../repositories/level_exp_mods_repository.h | 6 +- .../lootdrop_entries_repository.h | 18 +- .../loottable_entries_repository.h | 12 +- common/repositories/npc_types_repository.h | 10 +- common/repositories/object_repository.h | 14 +- common/repositories/proximities_repository.h | 16 +- common/repositories/spawn2_repository.h | 8 +- common/repositories/spells_new_repository.h | 8 +- common/repositories/start_zones_repository.h | 30 +- common/repositories/traps_repository.h | 4 +- common/repositories/zone_points_repository.h | 18 +- common/repositories/zone_repository.h | 42 +-- .../generators/repository-generator.pl | 11 +- 27 files changed, 177 insertions(+), 714 deletions(-) delete mode 100644 common/repositories/db_version_repository.h delete mode 100644 common/repositories/eqtime_repository.h diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index edca7bd8d..b8a303fba 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -37,10 +37,10 @@ public: int8 type; int type_data; int16 type_count; - std::string assa_x; - std::string assa_y; - std::string assa_z; - std::string assa_h; + float assa_x; + float assa_y; + float assa_z; + float assa_h; std::string text; int duration; int zone_in_time; @@ -48,18 +48,18 @@ public: int16 lose_points; int8 theme; int16 zone_in_zone_id; - std::string zone_in_x; - std::string zone_in_y; + float zone_in_x; + float zone_in_y; int16 zone_in_object_id; - std::string dest_x; - std::string dest_y; - std::string dest_z; - std::string dest_h; + float dest_x; + float dest_y; + float dest_z; + float dest_h; int graveyard_zone_id; - std::string graveyard_x; - std::string graveyard_y; - std::string graveyard_z; - std::string graveyard_radius; + float graveyard_x; + float graveyard_y; + float graveyard_z; + float graveyard_radius; }; static std::string PrimaryKey() diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index 161776a25..600502a71 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -27,16 +27,16 @@ class BaseDataRepository { public: struct BaseData { - int level; - int class; - std::string hp; - std::string mana; - std::string end; - std::string unk1; - std::string unk2; - std::string hp_fac; - std::string mana_fac; - std::string end_fac; + int level; + int class; + float hp; + float mana; + float end; + float unk1; + float unk2; + float hp_fac; + float mana_fac; + float end_fac; }; static std::string PrimaryKey() diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index 613fd0c40..1a9820183 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -31,12 +31,12 @@ public: int spellid; int8 type; int zoneid; - std::string x; - std::string y; - std::string z; - std::string x_diff; - std::string y_diff; - std::string z_diff; + float x; + float y; + float z; + float x_diff; + float y_diff; + float z_diff; std::string message; std::string description; }; diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index 78a0b9af1..660f9322f 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -39,9 +39,9 @@ public: std::string category_name; std::string reporter_name; std::string ui_path; - std::string pos_x; - std::string pos_y; - std::string pos_z; + float pos_x; + float pos_y; + float pos_z; int heading; int time_played; int target_id; diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index a3fbf25fc..27dbe25e4 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -31,9 +31,9 @@ public: std::string zone; std::string name; std::string ui; - std::string x; - std::string y; - std::string z; + float x; + float y; + float z; std::string type; int8 flag; std::string target; diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h index bda62faa3..10b868cea 100644 --- a/common/repositories/character_bind_repository.h +++ b/common/repositories/character_bind_repository.h @@ -27,14 +27,14 @@ class CharacterBindRepository { public: struct CharacterBind { - int id; - int slot; - int16 zone_id; - int instance_id; - std::string x; - std::string y; - std::string z; - std::string heading; + int id; + int slot; + int16 zone_id; + int instance_id; + float x; + float y; + float z; + float heading; }; static std::string PrimaryKey() diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index 54d7e778c..cace5cc41 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -32,10 +32,10 @@ public: std::string charname; int16 zone_id; int16 instance_id; - std::string x; - std::string y; - std::string z; - std::string heading; + float x; + float y; + float z; + float heading; std::string time_of_death; int guild_consent_id; int8 is_rezzed; diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index 7bef6272c..2d89c157b 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -35,10 +35,10 @@ public: std::string suffix; int zone_id; int zone_instance; - std::string y; - std::string x; - std::string z; - std::string heading; + float y; + float x; + float z; + float heading; int8 gender; int16 race; int8 class; diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index a8fced0e8..9020ea285 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -34,7 +34,7 @@ public: int spell_id; int hp; int mana; - std::string size; + float size; }; static std::string PrimaryKey() diff --git a/common/repositories/db_version_repository.h b/common/repositories/db_version_repository.h deleted file mode 100644 index 9abf0da74..000000000 --- a/common/repositories/db_version_repository.h +++ /dev/null @@ -1,253 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_DB_VERSION_REPOSITORY_H -#define EQEMU_DB_VERSION_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class DbVersionRepository { -public: - struct DbVersion { - int version; - }; - - static std::string PrimaryKey() - { - return std::string(""); - } - - static std::vector Columns() - { - return { - "version", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("db_version"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static DbVersion NewEntity() - { - DbVersion entry{}; - - entry.version = 0; - - return entry; - } - - static DbVersion GetDbVersionEntry( - const std::vector &db_versions, - int db_version_id - ) - { - for (auto &db_version : db_versions) { - if (db_version. == db_version_id) { - return db_version; - } - } - - return NewEntity(); - } - - static DbVersion FindOne( - int db_version_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - db_version_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - DbVersion entry{}; - - entry.version = atoi(row[0]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int db_version_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - db_version_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - DbVersion db_version_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(db_version_entry.version)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - db_version_entry. - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static DbVersion InsertOne( - DbVersion db_version_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(db_version_entry.version)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - db_version_entry.id = results.LastInsertedID(); - return db_version_entry; - } - - db_version_entry = InstanceListRepository::NewEntity(); - - return db_version_entry; - } - - static int InsertMany( - std::vector db_version_entries - ) - { - std::vector insert_chunks; - - for (auto &db_version_entry: db_version_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(db_version_entry.version)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DbVersion entry{}; - - entry.version = atoi(row[0]); - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_DB_VERSION_REPOSITORY_H diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index a0c4b289f..52847a485 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -32,10 +32,10 @@ public: std::string zone; int16 version; std::string name; - std::string pos_y; - std::string pos_x; - std::string pos_z; - std::string heading; + float pos_y; + float pos_x; + float pos_z; + float heading; int16 opentype; int16 guild; int16 lockpick; @@ -48,14 +48,14 @@ public: int door_param; std::string dest_zone; int dest_instance; - std::string dest_x; - std::string dest_y; - std::string dest_z; - std::string dest_heading; + float dest_x; + float dest_y; + float dest_z; + float dest_heading; int invert_state; int incline; int16 size; - std::string buffer; + float buffer; int client_version_mask; int16 is_ldon_door; }; diff --git a/common/repositories/eqtime_repository.h b/common/repositories/eqtime_repository.h deleted file mode 100644 index 13aac3c07..000000000 --- a/common/repositories/eqtime_repository.h +++ /dev/null @@ -1,293 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_EQTIME_REPOSITORY_H -#define EQEMU_EQTIME_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" - -class EqtimeRepository { -public: - struct Eqtime { - int8 minute; - int8 hour; - int8 day; - int8 month; - int year; - int realtime; - }; - - static std::string PrimaryKey() - { - return std::string(""); - } - - static std::vector Columns() - { - return { - "minute", - "hour", - "day", - "month", - "year", - "realtime", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("eqtime"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Eqtime NewEntity() - { - Eqtime entry{}; - - entry.minute = 0; - entry.hour = 0; - entry.day = 0; - entry.month = 0; - entry.year = 0; - entry.realtime = 0; - - return entry; - } - - static Eqtime GetEqtimeEntry( - const std::vector &eqtimes, - int eqtime_id - ) - { - for (auto &eqtime : eqtimes) { - if (eqtime. == eqtime_id) { - return eqtime; - } - } - - return NewEntity(); - } - - static Eqtime FindOne( - int eqtime_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - eqtime_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Eqtime entry{}; - - entry.minute = atoi(row[0]); - entry.hour = atoi(row[1]); - entry.day = atoi(row[2]); - entry.month = atoi(row[3]); - entry.year = atoi(row[4]); - entry.realtime = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int eqtime_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - eqtime_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Eqtime eqtime_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(eqtime_entry.minute)); - update_values.push_back(columns[1] + " = " + std::to_string(eqtime_entry.hour)); - update_values.push_back(columns[2] + " = " + std::to_string(eqtime_entry.day)); - update_values.push_back(columns[3] + " = " + std::to_string(eqtime_entry.month)); - update_values.push_back(columns[4] + " = " + std::to_string(eqtime_entry.year)); - update_values.push_back(columns[5] + " = " + std::to_string(eqtime_entry.realtime)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - eqtime_entry. - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Eqtime InsertOne( - Eqtime eqtime_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(eqtime_entry.minute)); - insert_values.push_back(std::to_string(eqtime_entry.hour)); - insert_values.push_back(std::to_string(eqtime_entry.day)); - insert_values.push_back(std::to_string(eqtime_entry.month)); - insert_values.push_back(std::to_string(eqtime_entry.year)); - insert_values.push_back(std::to_string(eqtime_entry.realtime)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - eqtime_entry.id = results.LastInsertedID(); - return eqtime_entry; - } - - eqtime_entry = InstanceListRepository::NewEntity(); - - return eqtime_entry; - } - - static int InsertMany( - std::vector eqtime_entries - ) - { - std::vector insert_chunks; - - for (auto &eqtime_entry: eqtime_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(eqtime_entry.minute)); - insert_values.push_back(std::to_string(eqtime_entry.hour)); - insert_values.push_back(std::to_string(eqtime_entry.day)); - insert_values.push_back(std::to_string(eqtime_entry.month)); - insert_values.push_back(std::to_string(eqtime_entry.year)); - insert_values.push_back(std::to_string(eqtime_entry.realtime)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Eqtime entry{}; - - entry.minute = atoi(row[0]); - entry.hour = atoi(row[1]); - entry.day = atoi(row[2]); - entry.month = atoi(row[3]); - entry.year = atoi(row[4]); - entry.realtime = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - -}; - -#endif //EQEMU_EQTIME_REPOSITORY_H diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h index f330d7c19..205f5bd4b 100644 --- a/common/repositories/graveyard_repository.h +++ b/common/repositories/graveyard_repository.h @@ -27,12 +27,12 @@ class GraveyardRepository { public: struct Graveyard { - int id; - int zone_id; - std::string x; - std::string y; - std::string z; - std::string heading; + int id; + int zone_id; + float x; + float y; + float z; + float heading; }; static std::string PrimaryKey() diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index 9aab0e9b3..ad73d9261 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -30,12 +30,12 @@ public: int id; int zoneid; int16 version; - std::string max_x; - std::string max_y; - std::string max_z; - std::string min_x; - std::string min_y; - std::string heading; + float max_x; + float max_y; + float max_z; + float min_x; + float min_y; + float heading; std::string name; int item; int max_allowed; diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h index 1d2909116..bce2eda13 100644 --- a/common/repositories/level_exp_mods_repository.h +++ b/common/repositories/level_exp_mods_repository.h @@ -27,9 +27,9 @@ class LevelExpModsRepository { public: struct LevelExpMods { - int level; - std::string exp_mod; - std::string aa_exp_mod; + int level; + float exp_mod; + float aa_exp_mod; }; static std::string PrimaryKey() diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h index e77777374..73e97c978 100644 --- a/common/repositories/lootdrop_entries_repository.h +++ b/common/repositories/lootdrop_entries_repository.h @@ -27,15 +27,15 @@ class LootdropEntriesRepository { public: struct LootdropEntries { - int lootdrop_id; - int item_id; - int16 item_charges; - int8 equip_item; - std::string chance; - std::string disabled_chance; - int8 minlevel; - int8 maxlevel; - int8 multiplier; + int lootdrop_id; + int item_id; + int16 item_charges; + int8 equip_item; + float chance; + float disabled_chance; + int8 minlevel; + int8 maxlevel; + int8 multiplier; }; static std::string PrimaryKey() diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h index 941bda720..f648f2142 100644 --- a/common/repositories/loottable_entries_repository.h +++ b/common/repositories/loottable_entries_repository.h @@ -27,12 +27,12 @@ class LoottableEntriesRepository { public: struct LoottableEntries { - int loottable_id; - int lootdrop_id; - int8 multiplier; - int8 droplimit; - int8 mindrop; - std::string probability; + int loottable_id; + int lootdrop_id; + int8 multiplier; + int8 droplimit; + int8 mindrop; + float probability; }; static std::string PrimaryKey() diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index 9d872d0fa..ccee4eda4 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -40,7 +40,7 @@ public: int8 texture; int8 helmtexture; int herosforgemodel; - std::string size; + float size; int hp_regen_rate; int mana_regen_rate; int loottable_id; @@ -78,7 +78,7 @@ public: int8 prim_melee_type; int8 sec_melee_type; int8 ranged_type; - std::string runspeed; + float runspeed; int16 MR; int16 CR; int16 DR; @@ -92,7 +92,7 @@ public: int16 AC; int8 npc_aggro; int8 spawn_limit; - std::string attack_speed; + float attack_speed; int8 attack_delay; int8 findable; int STR; @@ -119,8 +119,8 @@ public: int8 underwater; int8 isquest; int emoteid; - std::string spellscale; - std::string healscale; + float spellscale; + float healscale; int8 no_target_hotkey; int8 raid_target; int8 armtexture; diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index 5af48fecd..7d0a2c9d8 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -30,10 +30,10 @@ public: int id; int zoneid; int16 version; - std::string xpos; - std::string ypos; - std::string zpos; - std::string heading; + float xpos; + float ypos; + float zpos; + float heading; int itemid; int16 charges; std::string objectname; @@ -49,9 +49,9 @@ public: int unknown72; int unknown76; int unknown84; - std::string size; - std::string tilt_x; - std::string tilt_y; + float size; + float tilt_x; + float tilt_y; std::string display_name; }; diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h index a0334eab3..8b0bbd3ec 100644 --- a/common/repositories/proximities_repository.h +++ b/common/repositories/proximities_repository.h @@ -27,14 +27,14 @@ class ProximitiesRepository { public: struct Proximities { - int zoneid; - int exploreid; - std::string minx; - std::string maxx; - std::string miny; - std::string maxy; - std::string minz; - std::string maxz; + int zoneid; + int exploreid; + float minx; + float maxx; + float miny; + float maxy; + float minz; + float maxz; }; static std::string PrimaryKey() diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index d6cf7423a..fdfa0ec47 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -31,10 +31,10 @@ public: int spawngroupID; std::string zone; int16 version; - std::string x; - std::string y; - std::string z; - std::string heading; + float x; + float y; + float z; + float heading; int respawntime; int variance; int pathgrid; diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index c241fd03e..f8640a956 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -254,10 +254,10 @@ public: int persistdeath; int field225; int field226; - std::string min_dist; - std::string min_dist_mod; - std::string max_dist; - std::string max_dist_mod; + float min_dist; + float min_dist_mod; + float max_dist; + float max_dist_mod; int min_range; int field232; int field233; diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h index 1ff8c1a27..588f2b600 100644 --- a/common/repositories/start_zones_repository.h +++ b/common/repositories/start_zones_repository.h @@ -27,21 +27,21 @@ class StartZonesRepository { public: struct StartZones { - std::string x; - std::string y; - std::string z; - std::string heading; - int zone_id; - int bind_id; - int player_choice; - int player_class; - int player_deity; - int player_race; - int start_zone; - std::string bind_x; - std::string bind_y; - std::string bind_z; - int8 select_rank; + float x; + float y; + float z; + float heading; + int zone_id; + int bind_id; + int player_choice; + int player_class; + int player_deity; + int player_race; + int start_zone; + float bind_x; + float bind_y; + float bind_z; + int8 select_rank; }; static std::string PrimaryKey() diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 4d3c2ecb7..45a70ab8f 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -34,8 +34,8 @@ public: int y; int z; int8 chance; - std::string maxzdiff; - std::string radius; + float maxzdiff; + float radius; int effect; int effectvalue; int effectvalue2; diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index f311b7c5b..ece75621e 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -31,18 +31,18 @@ public: std::string zone; int version; int16 number; - std::string y; - std::string x; - std::string z; - std::string heading; - std::string target_y; - std::string target_x; - std::string target_z; - std::string target_heading; + float y; + float x; + float z; + float heading; + float target_y; + float target_x; + float target_z; + float target_heading; int16 zoneinst; int target_zone_id; int target_instance; - std::string buffer; + float buffer; int client_version_mask; }; diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index 0d5c49f35..76717a1d3 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -32,10 +32,10 @@ public: std::string file_name; std::string long_name; std::string map_file_name; - std::string safe_x; - std::string safe_y; - std::string safe_z; - std::string graveyard_id; + float safe_x; + float safe_y; + float safe_z; + float graveyard_id; int8 min_level; int8 min_status; int zoneidnumber; @@ -44,40 +44,40 @@ public: int maxclients; int ruleset; std::string note; - std::string underworld; - std::string minclip; - std::string maxclip; - std::string fog_minclip; - std::string fog_maxclip; + float underworld; + float minclip; + float maxclip; + float fog_minclip; + float fog_maxclip; int8 fog_blue; int8 fog_red; int8 fog_green; int8 sky; int8 ztype; - std::string zone_exp_multiplier; - std::string walkspeed; + float zone_exp_multiplier; + float walkspeed; int8 time_type; int8 fog_red1; int8 fog_green1; int8 fog_blue1; - std::string fog_minclip1; - std::string fog_maxclip1; + float fog_minclip1; + float fog_maxclip1; int8 fog_red2; int8 fog_green2; int8 fog_blue2; - std::string fog_minclip2; - std::string fog_maxclip2; + float fog_minclip2; + float fog_maxclip2; int8 fog_red3; int8 fog_green3; int8 fog_blue3; - std::string fog_minclip3; - std::string fog_maxclip3; + float fog_minclip3; + float fog_maxclip3; int8 fog_red4; int8 fog_green4; int8 fog_blue4; - std::string fog_minclip4; - std::string fog_maxclip4; - std::string fog_density; + float fog_minclip4; + float fog_maxclip4; + float fog_density; std::string flag_needed; int8 canbind; int8 cancombat; @@ -105,7 +105,7 @@ public: int snow_duration2; int snow_duration3; int snow_duration4; - std::string gravity; + float gravity; int type; int8 skylock; int fast_regen_hp; diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index ffd6144f0..f55c9f1f3 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -117,6 +117,8 @@ foreach my $table_to_generate (@tables) { # These tables don't have a typical schema my @table_ignore_list = ( "character_enabledtasks", + "eqtime", + "db_version", "keyring", "profanity_list", "zone_flags", @@ -201,7 +203,7 @@ foreach my $table_to_generate (@tables) { my $column_key = $row[5]; my $column_default = ($row[6] ? $row[6] : ""); - if ($column_key eq "PRI") { + if ($column_key eq "PRI" || ($ordinal_position == 0 && $column_name=~/id/i)) { $table_primary_key{$table_name} = $column_name; } @@ -380,9 +382,16 @@ sub translate_mysql_data_type_to_c { elsif ($mysql_data_type =~ /smallint/) { $struct_data_type = 'int16'; } + elsif ($mysql_data_type =~ /bigint/) { + $struct_data_type = 'int'; + # Use regular int for now until we have 64 support + } elsif ($mysql_data_type =~ /int/) { $struct_data_type = 'int'; } + elsif ($mysql_data_type =~ /float|double|decimal/) { + $struct_data_type = 'float'; + } return $struct_data_type; } From 826f0418f753972fed4db087295cd9a8c6dd89b9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:27:27 -0500 Subject: [PATCH 064/272] More float fixes [skip ci] --- common/repositories/horses_repository.h | 2 +- common/repositories/items_repository.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index a59c03136..0fc695064 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -31,7 +31,7 @@ public: int16 race; int8 gender; int8 texture; - std::string mountspeed; + float mountspeed; std::string notes; }; diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index bedde8084..034b8f591 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -134,7 +134,7 @@ public: int reclevel; int recskill; int reqlevel; - std::string sellrate; + float sellrate; int shielding; int size; int skillmodtype; From 80fb204f3963a0170ae6eb260642df02fd88e5a7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:34:34 -0500 Subject: [PATCH 065/272] More repository comb-throughs [skip ci] --- common/repositories/spawngroup_repository.h | 270 +++++++++++++++--- .../tradeskill_recipe_repository.h | 270 +++--------------- .../generators/repository-generator.pl | 4 + 3 files changed, 267 insertions(+), 277 deletions(-) diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index 7c55711b6..356ccd0ad 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -17,30 +17,36 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ + #ifndef EQEMU_SPAWNGROUP_REPOSITORY_H #define EQEMU_SPAWNGROUP_REPOSITORY_H #include "../database.h" #include "../string_util.h" -class SpawnGroupRepository { +class SpawngroupRepository { public: - struct SpawnGroup { + struct Spawngroup { int id; std::string name; int8 spawn_limit; - int dist; + float dist; float max_x; float min_x; float max_y; float min_y; int delay; int mindelay; - int despawn; + int8 despawn; int despawn_timer; - int wp_spawns; + int8 wp_spawns; }; + static std::string PrimaryKey() + { + return std::string("id"); + } + static std::vector Columns() { return { @@ -65,6 +71,21 @@ public: return std::string(implode(", ", Columns())); } + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + static std::string TableName() { return std::string("spawngroup"); @@ -72,18 +93,25 @@ public: static std::string BaseSelect() { - return std::string( - fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ) + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() ); } - static SpawnGroup NewEntity() + static std::string BaseInsert() { - SpawnGroup entry; + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawngroup NewEntity() + { + Spawngroup entry{}; entry.id = 0; entry.name = ""; @@ -93,36 +121,44 @@ public: entry.min_x = 0; entry.max_y = 0; entry.min_y = 0; - entry.delay = 0; - entry.mindelay = 0; + entry.delay = 45000; + entry.mindelay = 15000; entry.despawn = 0; - entry.despawn_timer = 0; + entry.despawn_timer = 100; entry.wp_spawns = 0; return entry; } - static std::vector GetZoneSpawnGroups( - const std::string &zone_short_name, - int zone_version + static Spawngroup GetSpawngroupEntry( + const std::vector &spawngroups, + int spawngroup_id ) { - std::vector spawn_groups; + for (auto &spawngroup : spawngroups) { + if (spawngroup.id == spawngroup_id) { + return spawngroup; + } + } + return NewEntity(); + } + + static Spawngroup FindOne( + int spawngroup_id + ) + { auto results = content_db.QueryDatabase( fmt::format( - SQL ( - {} INNER JOIN spawn2 ON spawn2.spawngroupID = spawngroup.id - WHERE spawn2.zone = '{}' and spawn2.version = {} - ), + "{} WHERE id = {} LIMIT 1", BaseSelect(), - zone_short_name, - zone_version + spawngroup_id ) ); - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnGroup entry{}; + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawngroup entry{}; entry.id = atoi(row[0]); entry.name = row[1]; @@ -138,27 +174,173 @@ public: entry.despawn_timer = atoi(row[11]); entry.wp_spawns = atoi(row[12]); - spawn_groups.push_back(entry); - } - - return spawn_groups; - } - - static SpawnGroup GetGrid( - const std::vector &spawn_groups, - int spawn_group_id - ) - { - for (auto &row : spawn_groups) { - if (row.id == spawn_group_id) { - return row; - } + return entry; } return NewEntity(); } + static int DeleteOne( + int spawngroup_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawngroup_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawngroup spawngroup_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spawngroup_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(spawngroup_entry.spawn_limit)); + update_values.push_back(columns[3] + " = '" + EscapeString(spawngroup_entry.dist) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(spawngroup_entry.max_x) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(spawngroup_entry.min_x) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(spawngroup_entry.max_y) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(spawngroup_entry.min_y) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(spawngroup_entry.delay)); + update_values.push_back(columns[9] + " = " + std::to_string(spawngroup_entry.mindelay)); + update_values.push_back(columns[10] + " = " + std::to_string(spawngroup_entry.despawn)); + update_values.push_back(columns[11] + " = " + std::to_string(spawngroup_entry.despawn_timer)); + update_values.push_back(columns[12] + " = " + std::to_string(spawngroup_entry.wp_spawns)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawngroup_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawngroup InsertOne( + Spawngroup spawngroup_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); + insert_values.push_back("'" + EscapeString(spawngroup_entry.dist) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.max_x) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.min_x) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.max_y) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.min_y) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.delay)); + insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); + insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawngroup_entry.id = results.LastInsertedID(); + return spawngroup_entry; + } + + spawngroup_entry = InstanceListRepository::NewEntity(); + + return spawngroup_entry; + } + + static int InsertMany( + std::vector spawngroup_entries + ) + { + std::vector insert_chunks; + + for (auto &spawngroup_entry: spawngroup_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); + insert_values.push_back("'" + EscapeString(spawngroup_entry.dist) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.max_x) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.min_x) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.max_y) + "'"); + insert_values.push_back("'" + EscapeString(spawngroup_entry.min_y) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.delay)); + insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); + insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawngroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + }; - #endif //EQEMU_SPAWNGROUP_REPOSITORY_H diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h index 428d120ac..15ee26ce3 100644 --- a/common/repositories/tradeskill_recipe_repository.h +++ b/common/repositories/tradeskill_recipe_repository.h @@ -29,22 +29,17 @@ public: struct TradeskillRecipe { int id; std::string name; - int16 tradeskill; - int16 skillneeded; - int16 trivial; - int8 nofail; - int8 replace_container; + int tradeskill; + int skillneeded; + int trivial; + uint8 nofail; + int replace_container; std::string notes; - int8 must_learn; - int8 quest; - int8 enabled; + uint8 must_learn; + uint8 quest; + uint8 enabled; }; - static std::string PrimaryKey() - { - return std::string("id"); - } - static std::vector Columns() { return { @@ -67,21 +62,6 @@ public: return std::string(implode(", ", Columns())); } - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - static std::string TableName() { return std::string("tradeskill_recipe"); @@ -89,25 +69,18 @@ public: static std::string BaseSelect() { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() + return std::string( + fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ) ); } static TradeskillRecipe NewEntity() { - TradeskillRecipe entry{}; + TradeskillRecipe entry; entry.id = 0; entry.name = ""; @@ -116,215 +89,46 @@ public: entry.trivial = 0; entry.nofail = 0; entry.replace_container = 0; - entry.notes = 0; + entry.notes = ""; entry.must_learn = 0; entry.quest = 0; - entry.enabled = 1; + entry.enabled = 0; return entry; } - static TradeskillRecipe GetTradeskillRecipeEntry( - const std::vector &tradeskill_recipes, - int tradeskill_recipe_id - ) - { - for (auto &tradeskill_recipe : tradeskill_recipes) { - if (tradeskill_recipe.id == tradeskill_recipe_id) { - return tradeskill_recipe; - } - } - - return NewEntity(); - } - - static TradeskillRecipe FindOne( - int tradeskill_recipe_id - ) + static TradeskillRecipe GetRecipe(int recipe_id) { auto results = content_db.QueryDatabase( fmt::format( - "{} WHERE id = {} LIMIT 1", + "{} WHERE id = {}", BaseSelect(), - tradeskill_recipe_id + recipe_id ) ); + TradeskillRecipe tradeskill_recipe = NewEntity(); + auto row = results.begin(); - if (results.RowCount() == 1) { - TradeskillRecipe entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1]; - entry.tradeskill = atoi(row[2]); - entry.skillneeded = atoi(row[3]); - entry.trivial = atoi(row[4]); - entry.nofail = atoi(row[5]); - entry.replace_container = atoi(row[6]); - entry.notes = row[7]; - entry.must_learn = atoi(row[8]); - entry.quest = atoi(row[9]); - entry.enabled = atoi(row[10]); - - return entry; + if (results.RowCount() == 0) { + return tradeskill_recipe; } - return NewEntity(); - } + tradeskill_recipe.id = atoi(row[0]); + tradeskill_recipe.name = (row[1] ? row[1] : ""); + tradeskill_recipe.tradeskill = atoi(row[2]); + tradeskill_recipe.skillneeded = atoi(row[3]); + tradeskill_recipe.trivial = atoi(row[4]); + tradeskill_recipe.nofail = atoi(row[5]); + tradeskill_recipe.replace_container = atoi(row[6]); + tradeskill_recipe.notes = (row[7] ? row[7] : ""); + tradeskill_recipe.must_learn = atoi(row[8]); + tradeskill_recipe.quest = atoi(row[9]); + tradeskill_recipe.enabled = atoi(row[10]); - static int DeleteOne( - int tradeskill_recipe_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tradeskill_recipe_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - TradeskillRecipe tradeskill_recipe_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(tradeskill_recipe_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entry.tradeskill)); - update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entry.skillneeded)); - update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entry.trivial)); - update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entry.nofail)); - update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entry.replace_container)); - update_values.push_back(columns[7] + " = '" + EscapeString(tradeskill_recipe_entry.notes) + "'"); - update_values.push_back(columns[8] + " = " + std::to_string(tradeskill_recipe_entry.must_learn)); - update_values.push_back(columns[9] + " = " + std::to_string(tradeskill_recipe_entry.quest)); - update_values.push_back(columns[10] + " = " + std::to_string(tradeskill_recipe_entry.enabled)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tradeskill_recipe_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static TradeskillRecipe InsertOne( - TradeskillRecipe tradeskill_recipe_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); - insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tradeskill_recipe_entry.id = results.LastInsertedID(); - return tradeskill_recipe_entry; - } - - tradeskill_recipe_entry = InstanceListRepository::NewEntity(); - - return tradeskill_recipe_entry; - } - - static int InsertMany( - std::vector tradeskill_recipe_entries - ) - { - std::vector insert_chunks; - - for (auto &tradeskill_recipe_entry: tradeskill_recipe_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); - insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); - insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TradeskillRecipe entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1]; - entry.tradeskill = atoi(row[2]); - entry.skillneeded = atoi(row[3]); - entry.trivial = atoi(row[4]); - entry.nofail = atoi(row[5]); - entry.replace_container = atoi(row[6]); - entry.notes = row[7]; - entry.must_learn = atoi(row[8]); - entry.quest = atoi(row[9]); - entry.enabled = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; + return tradeskill_recipe; } }; -#endif //EQEMU_TRADESKILL_RECIPE_REPOSITORY_H +#endif diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index f55c9f1f3..a902b81f2 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -117,6 +117,10 @@ foreach my $table_to_generate (@tables) { # These tables don't have a typical schema my @table_ignore_list = ( "character_enabledtasks", + "grid", # Manually created + "grid_entries", # Manually created + "tradeskill_recipe", # Manually created + "character_recipe_list", # Manually created "eqtime", "db_version", "keyring", From 376c123fa1bbda83e39b98bbb0f8f50c0b03d5fd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:39:15 -0500 Subject: [PATCH 066/272] More table exclusions [skip ci] --- utils/scripts/generators/repository-generator.pl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index a902b81f2..1140b073d 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -121,6 +121,11 @@ foreach my $table_to_generate (@tables) { "grid_entries", # Manually created "tradeskill_recipe", # Manually created "character_recipe_list", # Manually created + "guild_bank", + "inventory_versions", + "raid_leaders", + "sharedbank", + "trader_audit", "eqtime", "db_version", "keyring", From 05525822743bde298bf74762fa1bde114b9b10df Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:56:14 -0500 Subject: [PATCH 067/272] Use double quotes in strings [skip ci] --- common/repositories/account_repository.h | 8 ++++---- .../repositories/adventure_template_repository.h | 2 +- common/repositories/banned_ips_repository.h | 2 +- common/repositories/bug_reports_repository.h | 16 ++++++++-------- common/repositories/bugs_repository.h | 2 +- .../character_bandolier_repository.h | 2 +- .../repositories/character_corpses_repository.h | 2 +- common/repositories/data_buckets_repository.h | 4 ++-- common/repositories/doors_repository.h | 4 ++-- common/repositories/eventlog_repository.h | 2 +- common/repositories/global_loot_repository.h | 10 +++++----- common/repositories/hackers_repository.h | 2 +- common/repositories/horses_repository.h | 2 +- common/repositories/inventory_repository.h | 2 +- .../inventory_snapshots_repository.h | 2 +- common/repositories/ip_exemptions_repository.h | 2 +- common/repositories/items_repository.h | 6 +++--- common/repositories/login_accounts_repository.h | 2 +- .../repositories/login_api_tokens_repository.h | 2 +- .../login_world_servers_repository.h | 4 ++-- .../repositories/logsys_categories_repository.h | 2 +- common/repositories/npc_faction_repository.h | 2 +- .../npc_scale_global_base_repository.h | 2 +- .../repositories/npc_spells_effects_repository.h | 2 +- common/repositories/npc_spells_repository.h | 2 +- common/repositories/npc_types_repository.h | 6 +++--- common/repositories/object_contents_repository.h | 2 +- common/repositories/object_repository.h | 4 ++-- .../perl_event_export_settings_repository.h | 2 +- common/repositories/petitions_repository.h | 2 +- common/repositories/quest_globals_repository.h | 2 +- common/repositories/raid_details_repository.h | 2 +- common/repositories/reports_repository.h | 6 +++--- common/repositories/rule_values_repository.h | 2 +- common/repositories/spawn2_repository.h | 2 +- common/repositories/spawn_events_repository.h | 2 +- common/repositories/spell_buckets_repository.h | 4 ++-- common/repositories/spells_new_repository.h | 16 ++++++++-------- common/repositories/task_activities_repository.h | 4 ++-- common/repositories/zone_points_repository.h | 2 +- common/repositories/zone_repository.h | 8 ++++---- utils/scripts/generators/repository-generator.pl | 5 +++-- 42 files changed, 80 insertions(+), 79 deletions(-) diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index 74184e755..d78bcf866 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -131,7 +131,7 @@ public: entry.sharedplat = 0; entry.password = ""; entry.status = 0; - entry.ls_id = 'eqemu'; + entry.ls_id = "eqemu"; entry.lsaccount_id = 0; entry.gmspeed = 0; entry.revoked = 0; @@ -139,11 +139,11 @@ public: entry.minilogin_ip = ""; entry.hideme = 0; entry.rulesflag = 0; - entry.suspendeduntil = '0000-00-00 00:00:00'; + entry.suspendeduntil = "0000-00-00 00:00:00"; entry.time_creation = 0; entry.expansion = 0; - entry.ban_reason = 0; - entry.suspend_reason = 0; + entry.ban_reason = ""; + entry.suspend_reason = ""; return entry; } diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index b8a303fba..2f5f78296 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -167,7 +167,7 @@ public: entry.assa_y = 0; entry.assa_z = 0; entry.assa_h = 0; - entry.text = 0; + entry.text = ""; entry.duration = 7200; entry.zone_in_time = 1800; entry.win_points = 0; diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index ebde824a2..7993eef5b 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -92,7 +92,7 @@ public: BannedIps entry{}; entry.ip_address = ""; - entry.notes = 0; + entry.notes = ""; return entry; } diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index 660f9322f..56ab6a7f7 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -152,24 +152,24 @@ public: BugReports entry{}; entry.id = 0; - entry.zone = 'Unknown'; + entry.zone = "Unknown"; entry.client_version_id = 0; - entry.client_version_name = 'Unknown'; + entry.client_version_name = "Unknown"; entry.account_id = 0; entry.character_id = 0; - entry.character_name = 'Unknown'; + entry.character_name = "Unknown"; entry.reporter_spoof = 1; entry.category_id = 0; - entry.category_name = 'Other'; - entry.reporter_name = 'Unknown'; - entry.ui_path = 'Unknown'; + entry.category_name = "Other"; + entry.reporter_name = "Unknown"; + entry.ui_path = "Unknown"; entry.pos_x = 0; entry.pos_y = 0; entry.pos_z = 0; entry.heading = 0; entry.time_played = 0; entry.target_id = 0; - entry.target_name = 'Unknown'; + entry.target_name = "Unknown"; entry.optional_info_mask = 0; entry._can_duplicate = 0; entry._crash_bug = 0; @@ -181,7 +181,7 @@ public: entry.report_datetime = current_timestamp(); entry.bug_status = 0; entry.last_review = current_timestamp(); - entry.last_reviewer = 'None'; + entry.last_reviewer = "None"; entry.reviewer_notes = ""; return entry; diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index 27dbe25e4..1ab30e9a1 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -122,7 +122,7 @@ public: entry.z = 0; entry.type = ""; entry.flag = 0; - entry.target = 0; + entry.target = ""; entry.bug = ""; entry.date = 0; entry.status = 0; diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index cc91acbff..f9d9ba240 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -104,7 +104,7 @@ public: entry.bandolier_slot = 0; entry.item_id = 0; entry.icon = 0; - entry.bandolier_name = '0'; + entry.bandolier_name = "0"; return entry; } diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index cace5cc41..d2fcee9fc 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -190,7 +190,7 @@ public: entry.y = 0; entry.z = 0; entry.heading = 0; - entry.time_of_death = '0000-00-00 00:00:00'; + entry.time_of_death = "0000-00-00 00:00:00"; entry.guild_consent_id = 0; entry.is_rezzed = 0; entry.is_buried = 0; diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index facd547d0..226e5449a 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -96,8 +96,8 @@ public: DataBuckets entry{}; entry.id = 0; - entry.key = 0; - entry.value = 0; + entry.key = ""; + entry.value = ""; entry.expires = 0; return entry; diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index 52847a485..548ffb7af 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -151,7 +151,7 @@ public: entry.id = 0; entry.doorid = 0; - entry.zone = 0; + entry.zone = ""; entry.version = 0; entry.name = ""; entry.pos_y = 0; @@ -168,7 +168,7 @@ public: entry.disable_timer = 0; entry.doorisopen = 0; entry.door_param = 0; - entry.dest_zone = 'NONE'; + entry.dest_zone = "NONE"; entry.dest_instance = 0; entry.dest_x = 0; entry.dest_y = 0; diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index 4c6cb93d1..a923dbe2b 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -112,7 +112,7 @@ public: entry.accountid = 0; entry.status = 0; entry.charname = ""; - entry.target = 'None'; + entry.target = "None"; entry.time = current_timestamp(); entry.descriptiontype = ""; entry.description = ""; diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index be0b89057..b49e44bf9 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -114,17 +114,17 @@ public: GlobalLoot entry{}; entry.id = 0; - entry.description = 0; + entry.description = ""; entry.loottable_id = 0; entry.enabled = 1; entry.min_level = 0; entry.max_level = 0; entry.rare = 0; entry.raid = 0; - entry.race = 0; - entry.class = 0; - entry.bodytype = 0; - entry.zone = 0; + entry.race = ""; + entry.class = ""; + entry.bodytype = ""; + entry.zone = ""; entry.hot_zone = 0; return entry; diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index 758548577..6c0de2022 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -103,7 +103,7 @@ public: entry.account = ""; entry.name = ""; entry.hacked = ""; - entry.zone = 0; + entry.zone = ""; entry.date = current_timestamp(); return entry; diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index 0fc695064..7bec38213 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -104,7 +104,7 @@ public: entry.gender = 0; entry.texture = 0; entry.mountspeed = 0.75; - entry.notes = 'Notes'; + entry.notes = "Notes"; return entry; } diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index aa5d443c3..d2f8f0f00 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -131,7 +131,7 @@ public: entry.augslot5 = 0; entry.augslot6 = 0; entry.instnodrop = 0; - entry.custom_data = 0; + entry.custom_data = ""; entry.ornamenticon = 0; entry.ornamentidfile = 0; entry.ornament_hero_model = 0; diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index 36326e9de..dc9adfb63 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -134,7 +134,7 @@ public: entry.augslot5 = 0; entry.augslot6 = 0; entry.instnodrop = 0; - entry.custom_data = 0; + entry.custom_data = ""; entry.ornamenticon = 0; entry.ornamentidfile = 0; entry.ornament_hero_model = 0; diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index 094922551..75ba5b658 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -94,7 +94,7 @@ public: IpExemptions entry{}; entry.exemption_id = 0; - entry.exemption_ip = 0; + entry.exemption_ip = ""; entry.exemption_amount = 0; return entry; diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index 034b8f591..b688f0dcd 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -791,7 +791,7 @@ public: entry.UNK124 = 0; entry.attuneable = 0; entry.nopet = 0; - entry.updated = '0000-00-00 00:00:00'; + entry.updated = "0000-00-00 00:00:00"; entry.comment = ""; entry.UNK127 = 0; entry.pointtype = 0; @@ -823,7 +823,7 @@ public: entry.UNK157 = 0; entry.serialized = 0; entry.verified = 0; - entry.serialization = 0; + entry.serialization = ""; entry.source = ""; entry.UNK033 = 0; entry.lorefile = ""; @@ -840,7 +840,7 @@ public: entry.UNK120 = 0; entry.UNK121 = 0; entry.questitemflag = 0; - entry.UNK132 = 0; + entry.UNK132 = ""; entry.clickunk5 = 0; entry.clickunk6 = ""; entry.clickunk7 = 0; diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index 7265f562e..19ad77ab7 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -109,7 +109,7 @@ public: entry.account_name = ""; entry.account_password = ""; entry.account_email = ""; - entry.source_loginserver = 0; + entry.source_loginserver = ""; entry.last_ip_address = ""; entry.last_login_date = 0; entry.created_at = 0; diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index bbcf29770..8a6cd454e 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -100,7 +100,7 @@ public: LoginApiTokens entry{}; entry.id = 0; - entry.token = 0; + entry.token = ""; entry.can_write = 0; entry.can_read = 0; entry.created_at = 0; diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index fa577837f..e2d42a36e 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -113,10 +113,10 @@ public: entry.tag_description = ""; entry.login_server_list_type_id = 0; entry.last_login_date = 0; - entry.last_ip_address = 0; + entry.last_ip_address = ""; entry.login_server_admin_id = 0; entry.is_server_trusted = 0; - entry.note = 0; + entry.note = ""; return entry; } diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index fae65efb7..c785c663a 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -98,7 +98,7 @@ public: LogsysCategories entry{}; entry.log_category_id = 0; - entry.log_category_description = 0; + entry.log_category_description = ""; entry.log_to_console = 0; entry.log_to_file = 0; entry.log_to_gmsay = 0; diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index 4f6ccf315..a983c87dd 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -96,7 +96,7 @@ public: NpcFaction entry{}; entry.id = 0; - entry.name = 0; + entry.name = ""; entry.primaryfaction = 0; entry.ignore_primary_assist = 0; diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index 1a4595a8f..a9485d79e 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -170,7 +170,7 @@ public: entry.attack_delay = 0; entry.spell_scale = 100; entry.heal_scale = 100; - entry.special_abilities = 0; + entry.special_abilities = ""; return entry; } diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index 5f241b8b2..f0ce4ed0b 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -94,7 +94,7 @@ public: NpcSpellsEffects entry{}; entry.id = 0; - entry.name = 0; + entry.name = ""; entry.parent_list = 0; return entry; diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index e7d01c9d8..d0c4e7c22 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -130,7 +130,7 @@ public: NpcSpells entry{}; entry.id = 0; - entry.name = 0; + entry.name = ""; entry.parent_list = 0; entry.attack_proc = -1; entry.proc_chance = 3; diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index ccee4eda4..47734a048 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -333,7 +333,7 @@ public: entry.id = 0; entry.name = ""; - entry.lastname = 0; + entry.lastname = ""; entry.level = 0; entry.race = 0; entry.class = 0; @@ -359,7 +359,7 @@ public: entry.maxdmg = 0; entry.attack_count = -1; entry.npcspecialattks = ""; - entry.special_abilities = 0; + entry.special_abilities = ""; entry.aggroradius = 0; entry.assistradius = 0; entry.face = 1; @@ -378,7 +378,7 @@ public: entry.armortint_blue = 0; entry.d_melee_texture1 = 0; entry.d_melee_texture2 = 0; - entry.ammo_idfile = 'IT10'; + entry.ammo_idfile = "IT10"; entry.prim_melee_type = 28; entry.sec_melee_type = 28; entry.ranged_type = 7; diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index 6eeeedc61..a51b90b50 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -116,7 +116,7 @@ public: entry.bagidx = 0; entry.itemid = 0; entry.charges = 0; - entry.droptime = '0000-00-00 00:00:00'; + entry.droptime = "0000-00-00 00:00:00"; entry.augslot1 = 0; entry.augslot2 = 0; entry.augslot3 = 0; diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index 7d0a2c9d8..ec9749c9a 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -148,7 +148,7 @@ public: entry.heading = 0; entry.itemid = 0; entry.charges = 0; - entry.objectname = 0; + entry.objectname = ""; entry.type = 0; entry.icon = 0; entry.unknown08 = 0; @@ -164,7 +164,7 @@ public: entry.size = 100; entry.tilt_x = 0; entry.tilt_y = 0; - entry.display_name = 0; + entry.display_name = ""; return entry; } diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index f914a7441..de4bb5a76 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -102,7 +102,7 @@ public: PerlEventExportSettings entry{}; entry.event_id = 0; - entry.event_description = 0; + entry.event_description = ""; entry.export_qglobals = 0; entry.export_mob = 0; entry.export_zone = 0; diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index e71866c9b..150aecd31 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -125,7 +125,7 @@ public: entry.accountname = ""; entry.lastgm = ""; entry.petitiontext = ""; - entry.gmtext = 0; + entry.gmtext = ""; entry.zone = ""; entry.urgency = 0; entry.charclass = 0; diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index 31218b5b1..b5ed67ace 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -103,7 +103,7 @@ public: entry.npcid = 0; entry.zoneid = 0; entry.name = ""; - entry.value = '?'; + entry.value = "?"; entry.expdate = 0; return entry; diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index ac782aa48..53357adaf 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -98,7 +98,7 @@ public: entry.raidid = 0; entry.loottype = 0; entry.locked = 0; - entry.motd = 0; + entry.motd = ""; return entry; } diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index 794602482..b99caa8f6 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -96,9 +96,9 @@ public: Reports entry{}; entry.id = 0; - entry.name = 0; - entry.reported = 0; - entry.reported_text = 0; + entry.name = ""; + entry.reported = ""; + entry.reported_text = ""; return entry; } diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index ac915e2f6..dcf67ba46 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -98,7 +98,7 @@ public: entry.ruleset_id = 0; entry.rule_name = ""; entry.rule_value = ""; - entry.notes = 0; + entry.notes = ""; return entry; } diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index fdfa0ec47..cf96b1f68 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -119,7 +119,7 @@ public: entry.id = 0; entry.spawngroupID = 0; - entry.zone = 0; + entry.zone = ""; entry.version = 0; entry.x = 0.000000; entry.y = 0.000000; diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index a8b096220..bd03e80ec 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -116,7 +116,7 @@ public: SpawnEvents entry{}; entry.id = 0; - entry.zone = 0; + entry.zone = ""; entry.cond_id = 0; entry.name = ""; entry.period = 0; diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index f4b0dbec2..c923234c0 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -94,8 +94,8 @@ public: SpellBuckets entry{}; entry.spellid = 0; - entry.key = 0; - entry.value = 0; + entry.key = ""; + entry.value = ""; return entry; } diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index f8640a956..d9ff5b920 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -562,14 +562,14 @@ public: SpellsNew entry{}; entry.id = 0; - entry.name = 0; - entry.player_1 = 'BLUE_TRAIL'; - entry.teleport_zone = 0; - entry.you_cast = 0; - entry.other_casts = 0; - entry.cast_on_you = 0; - entry.cast_on_other = 0; - entry.spell_fades = 0; + entry.name = ""; + entry.player_1 = "BLUE_TRAIL"; + entry.teleport_zone = ""; + entry.you_cast = ""; + entry.other_casts = ""; + entry.cast_on_you = ""; + entry.cast_on_other = ""; + entry.spell_fades = ""; entry.range = 100; entry.aoerange = 0; entry.pushback = 0; diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index 85906cc4f..450175b2e 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -123,8 +123,8 @@ public: entry.activitytype = 0; entry.target_name = ""; entry.item_list = ""; - entry.skill_list = '-1'; - entry.spell_list = '0'; + entry.skill_list = "-1"; + entry.spell_list = "0"; entry.description_override = ""; entry.goalid = 0; entry.goalmethod = 0; diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index ece75621e..00536a94a 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -122,7 +122,7 @@ public: ZonePoints entry{}; entry.id = 0; - entry.zone = 0; + entry.zone = ""; entry.version = 0; entry.number = 1; entry.y = 0; diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index 76717a1d3..0fa15cbc6 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -259,11 +259,11 @@ public: { Zone entry{}; - entry.short_name = 0; + entry.short_name = ""; entry.id = 0; - entry.file_name = 0; + entry.file_name = ""; entry.long_name = ""; - entry.map_file_name = 0; + entry.map_file_name = ""; entry.safe_x = 0; entry.safe_y = 0; entry.safe_z = 0; @@ -275,7 +275,7 @@ public: entry.timezone = 0; entry.maxclients = 0; entry.ruleset = 0; - entry.note = 0; + entry.note = ""; entry.underworld = 0; entry.minclip = 450; entry.maxclip = 450; diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 1140b073d..16706f877 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -218,12 +218,13 @@ foreach my $table_to_generate (@tables) { my $default_value = 0; if ($column_default ne "NULL" && $column_default ne "") { + $column_default=~s/'/"/g; $default_value = $column_default; } - if ($column_default eq "''") { + elsif ($column_default eq "''") { $default_value = '""'; } - if (trim($column_default) eq "" && $column_type =~ /text|varchar/i) { + elsif ((trim($column_default) eq "" || $column_default eq "NULL") && $column_type =~ /text|varchar/i) { $default_value = '""'; } From 9faae00d1514875ab07ec85ad45642e49ed29442 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 02:59:48 -0500 Subject: [PATCH 068/272] Update cmake lists [skip ci] --- common/CMakeLists.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 3dede0600..2f2c174fa 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -146,7 +146,6 @@ SET(repositories repositories/character_currency_repository.h repositories/character_data_repository.h repositories/character_disciplines_repository.h - repositories/character_enabledtasks_repository.h repositories/character_inspect_messages_repository.h repositories/character_item_recast_repository.h repositories/character_languages_repository.h @@ -169,10 +168,8 @@ SET(repositories repositories/completed_tasks_repository.h repositories/data_buckets_repository.h repositories/db_str_repository.h - repositories/db_version_repository.h repositories/discovered_items_repository.h repositories/doors_repository.h - repositories/eqtime_repository.h repositories/eventlog_repository.h repositories/faction_base_data_repository.h repositories/faction_list_repository.h @@ -191,7 +188,6 @@ SET(repositories repositories/group_id_repository.h repositories/group_leaders_repository.h repositories/guilds_repository.h - repositories/guild_bank_repository.h repositories/guild_members_repository.h repositories/guild_ranks_repository.h repositories/guild_relations_repository.h @@ -201,11 +197,9 @@ SET(repositories repositories/instance_list_player_repository.h repositories/inventory_repository.h repositories/inventory_snapshots_repository.h - repositories/inventory_versions_repository.h repositories/ip_exemptions_repository.h repositories/items_repository.h repositories/item_tick_repository.h - repositories/keyring_repository.h repositories/launcher_repository.h repositories/launcher_zones_repository.h repositories/ldon_trap_entries_repository.h @@ -244,18 +238,15 @@ SET(repositories repositories/pets_equipmentset_repository.h repositories/pets_equipmentset_entries_repository.h repositories/player_titlesets_repository.h - repositories/profanity_list_repository.h repositories/proximities_repository.h repositories/quest_globals_repository.h repositories/raid_details_repository.h - repositories/raid_leaders_repository.h repositories/raid_members_repository.h repositories/reports_repository.h repositories/respawn_times_repository.h repositories/rule_sets_repository.h repositories/rule_values_repository.h repositories/saylink_repository.h - repositories/sharedbank_repository.h repositories/skill_caps_repository.h repositories/spawn2_repository.h repositories/spawnentry_repository.h @@ -274,7 +265,6 @@ SET(repositories repositories/timers_repository.h repositories/titles_repository.h repositories/trader_repository.h - repositories/trader_audit_repository.h repositories/tradeskill_recipe_repository.h repositories/tradeskill_recipe_entries_repository.h repositories/traps_repository.h @@ -283,7 +273,6 @@ SET(repositories repositories/variables_repository.h repositories/veteran_reward_templates_repository.h repositories/zone_repository.h - repositories/zone_flags_repository.h repositories/zone_points_repository.h ) From bcef171cf937eef3c654aec01ead62e9f1544076 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 03:55:53 -0500 Subject: [PATCH 069/272] Fix for tradeskill query [skip ci] --- zone/client_packet.cpp | 199 +++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 108 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 9085f1849..048a80cc3 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -599,7 +599,7 @@ void Client::CompleteConnect() if (group) group->SendHPManaEndPacketsTo(this); } - + //bulk raid send in here eventually @@ -1237,7 +1237,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) database.ClearOldRecastTimestamps(cid); /* Clear out our old recast timestamps to keep the DB clean */ // set to full support in case they're a gm with items in disabled expansion slots..but, have their gm flag off... // item loss will occur when they use the 'empty' slots, if this is not done - m_inv.SetGMInventory(true); + m_inv.SetGMInventory(true); loaditems = database.GetInventory(cid, &m_inv); /* Load Character Inventory */ database.LoadCharacterBandolier(cid, &m_pp); /* Load Character Bandolier */ database.LoadCharacterBindPoint(cid, &m_pp); /* Load Character Bind */ @@ -1341,7 +1341,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) client_max_level = GetCharMaxLevelFromBucket(); } SetClientMaxLevel(client_max_level); - + // we know our class now, so we might have to fix our consume timer! if (class_ == MONK) consume_food_timer.SetTimer(CONSUMPTION_MNK_TIMER); @@ -2840,7 +2840,7 @@ void Client::Handle_OP_ApplyPoison(const EQApplicationPacket *app) // rogue simply won't apply at all, no skill check done. uint16 poison_skill = GetSkill(EQEmu::skills::SkillApplyPoison); - + if (ChanceRoll < (.75 + poison_skill / 1000)) { ApplyPoisonSuccessResult = 1; AddProcToWeapon(poison->Proc.Effect, false, (GetDEX() / 100) + 103, POISON_PROC); @@ -3917,7 +3917,7 @@ void Client::Handle_OP_Bug(const EQApplicationPacket *app) Message(0, "Bug reporting is disabled on this server."); return; } - + if (app->size != sizeof(BugReport_Struct)) { printf("Wrong size of BugReport_Struct got %d expected %zu!\n", app->size, sizeof(BugReport_Struct)); } @@ -4362,9 +4362,9 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { sizeof(PlayerPositionUpdateClient_Struct), app->size); return; } - + PlayerPositionUpdateClient_Struct *ppu = (PlayerPositionUpdateClient_Struct *) app->pBuffer; - + /* Boat handling */ if (ppu->spawn_id != GetID()) { /* If player is controlling boat */ @@ -4374,16 +4374,16 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { controlling_boat_id = 0; return; } - + auto boat_delta = glm::vec4(ppu->delta_x, ppu->delta_y, ppu->delta_z, EQ10toFloat(ppu->delta_heading)); boat->SetDelta(boat_delta); - + auto outapp = new EQApplicationPacket(OP_ClientUpdate, sizeof(PlayerPositionUpdateServer_Struct)); PlayerPositionUpdateServer_Struct *ppus = (PlayerPositionUpdateServer_Struct *) outapp->pBuffer; boat->MakeSpawnUpdate(ppus); entity_list.QueueCloseClients(boat, outapp, true, 300, this, false); safe_delete(outapp); - + /* Update the boat's position on the server, without sending an update */ boat->GMMove(ppu->x_pos, ppu->y_pos, ppu->z_pos, EQ12toFloat(ppu->heading), false); return; @@ -4398,9 +4398,9 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { if (cmob != nullptr) { cmob->SetPosition(ppu->x_pos, ppu->y_pos, ppu->z_pos); cmob->SetHeading(EQ12toFloat(ppu->heading)); - mMovementManager->SendCommandToClients(cmob, 0.0, 0.0, 0.0, + mMovementManager->SendCommandToClients(cmob, 0.0, 0.0, 0.0, 0.0, 0, ClientRangeAny, nullptr, this); - cmob->CastToNPC()->SaveGuardSpot(glm::vec4(ppu->x_pos, + cmob->CastToNPC()->SaveGuardSpot(glm::vec4(ppu->x_pos, ppu->y_pos, ppu->z_pos, EQ12toFloat(ppu->heading))); } } @@ -4418,7 +4418,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { // From this point forward, we need to use a new set of variables for client // position. If the client is in a boat, we need to add the boat pos and // the client offset together. - + float cx = ppu->x_pos; float cy = ppu->y_pos; float cz = ppu->z_pos; @@ -4443,45 +4443,45 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { /* Check to see if PPU should trigger an update to the rewind position. */ float rewind_x_diff = 0; float rewind_y_diff = 0; - + rewind_x_diff = cx - m_RewindLocation.x; rewind_x_diff *= rewind_x_diff; rewind_y_diff = cy - m_RewindLocation.y; rewind_y_diff *= rewind_y_diff; - - /* + + /* We only need to store updated values if the player has moved. If the player has moved more than units for x or y, then we'll store his pre-PPU x and y for /rewind, in case he gets stuck. */ - + if ((rewind_x_diff > 750) || (rewind_y_diff > 750)) m_RewindLocation = glm::vec3(m_Position); - + /* If the PPU was a large jump, such as a cross zone gate or Call of Hero, just update rewind coordinates to the new ppu coordinates. This will prevent exploitation. */ - + if ((rewind_x_diff > 5000) || (rewind_y_diff > 5000)) m_RewindLocation = glm::vec3(cx, cy, cz); - + if (proximity_timer.Check()) { entity_list.ProcessMove(this, glm::vec3(cx, cy, cz)); if (RuleB(TaskSystem, EnableTaskSystem) && RuleB(TaskSystem, EnableTaskProximity)) ProcessTaskProximities(cx, cy, cz); - + m_Proximity = glm::vec3(cx, cy, cz); } - + /* Update internal state */ m_Delta = glm::vec4(ppu->delta_x, ppu->delta_y, ppu->delta_z, EQ10toFloat(ppu->delta_heading)); - + if (IsTracking() && ((m_Position.x != cx) || (m_Position.y != cy))) { if (zone->random.Real(0, 100) < 70)//should be good CheckIncreaseSkill(EQEmu::skills::SkillTracking, nullptr, -20); } - + /* Break Hide if moving without sneaking and set rewind timer if moved */ if (cy != m_Position.y || cx != m_Position.x) { if ((hidden || improved_hidden) && !sneaking) { @@ -4500,7 +4500,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { } rewind_timer.Start(30000, true); } - + /* Handle client aggro scanning timers NPCs */ is_client_moving = (cy == m_Position.y && cx == m_Position.x) ? false : true; @@ -4564,55 +4564,55 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { } int32 new_animation = ppu->animation; - + /* Update internal server position from what the client has sent */ m_Position.x = cx; m_Position.y = cy; m_Position.z = cz; - + /* Visual Debugging */ if (RuleB(Character, OPClientUpdateVisualDebug)) { LogDebug("ClientUpdate: ppu x: [{}] y: [{}] z: [{}] h: [{}]", cx, cy, cz, new_heading); this->SendAppearanceEffect(78, 0, 0, 0, 0); this->SendAppearanceEffect(41, 0, 0, 0, 0); } - + /* Only feed real time updates when client is moving */ if (is_client_moving || new_heading != m_Position.w || new_animation != animation) { - + animation = ppu->animation; m_Position.w = new_heading; - + /* Broadcast update to other clients */ auto outapp = new EQApplicationPacket(OP_ClientUpdate, sizeof(PlayerPositionUpdateServer_Struct)); PlayerPositionUpdateServer_Struct *position_update = (PlayerPositionUpdateServer_Struct *) outapp->pBuffer; - + MakeSpawnUpdate(position_update); - + if (gm_hide_me) { entity_list.QueueClientsStatus(this, outapp, true, Admin(), 255); } else { entity_list.QueueCloseClients(this, outapp, true, RuleI(Range, ClientPositionUpdates), nullptr, true); } - - + + /* Always send position updates to group - send when beyond normal ClientPositionUpdate range */ Group *group = this->GetGroup(); Raid *raid = this->GetRaid(); - + if (raid) { raid->QueueClients(this, outapp, true, true, (RuleI(Range, ClientPositionUpdates) * -1)); } else if (group) { group->QueueClients(this, outapp, true, true, (RuleI(Range, ClientPositionUpdates) * -1)); } - + safe_delete(outapp); } - + if (zone->watermap) { if (zone->watermap->InLiquid(glm::vec3(m_Position))) { CheckIncreaseSkill(EQEmu::skills::SkillSwimming, nullptr, -17); - + // Dismount horses when entering water if (GetHorseId() && RuleB(Character, DismountWater)) { SetHorseId(0); @@ -5749,23 +5749,23 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) printf("Error in FindPersonRequest_Struct. Expected size of: %zu, but got: %i\n", sizeof(FindPersonRequest_Struct), app->size); else { FindPersonRequest_Struct* t = (FindPersonRequest_Struct*)app->pBuffer; - + std::vector points; Mob* target = entity_list.GetMob(t->npc_id); - + if (target == nullptr) { //empty length packet == not found. EQApplicationPacket outapp(OP_FindPersonReply, 0); QueuePacket(&outapp); return; } - + if (!RuleB(Pathing, Find) && RuleB(Bazaar, EnableWarpToTrader) && target->IsClient() && (target->CastToClient()->Trader || target->CastToClient()->Buyer)) { Message(Chat::Yellow, "Moving you to Trader %s", target->GetName()); MovePC(zone->GetZoneID(), zone->GetInstanceID(), target->GetX(), target->GetY(), target->GetZ(), 0.0f); } - + if (!RuleB(Pathing, Find) || !zone->pathing) { //fill in the path array... @@ -5788,40 +5788,40 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) { glm::vec3 Start(GetX(), GetY(), GetZ() + (GetSize() < 6.0 ? 6 : GetSize()) * HEAD_POSITION); glm::vec3 End(target->GetX(), target->GetY(), target->GetZ() + (target->GetSize() < 6.0 ? 6 : target->GetSize()) * HEAD_POSITION); - + bool partial = false; bool stuck = false; auto pathlist = zone->pathing->FindRoute(Start, End, partial, stuck); - + if (pathlist.empty() || partial) { EQApplicationPacket outapp(OP_FindPersonReply, 0); QueuePacket(&outapp); return; } - + // Live appears to send the points in this order: // Final destination. // Current Position. // rest of the points. FindPerson_Point p; - + int PointNumber = 0; - + bool LeadsToTeleporter = false; - + auto v = pathlist.back(); - + p.x = v.pos.x; p.y = v.pos.y; p.z = v.pos.z; points.push_back(p); - + p.x = GetX(); p.y = GetY(); p.z = GetZ(); points.push_back(p); - + for (auto Iterator = pathlist.begin(); Iterator != pathlist.end(); ++Iterator) { if ((*Iterator).teleport) // Teleporter @@ -5829,7 +5829,7 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) LeadsToTeleporter = true; break; } - + glm::vec3 v = (*Iterator).pos; p.x = v.x; p.y = v.y; @@ -5837,17 +5837,17 @@ void Client::Handle_OP_FindPersonRequest(const EQApplicationPacket *app) points.push_back(p); ++PointNumber; } - + if (!LeadsToTeleporter) { p.x = target->GetX(); p.y = target->GetY(); p.z = target->GetZ(); - + points.push_back(p); } } - + SendPathPacket(points); } } @@ -11090,14 +11090,14 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) { case RaidCommandInviteIntoExisting: case RaidCommandInvite: { - + Client *player_to_invite = entity_list.GetClientByName(raid_command_packet->player_name); if (!player_to_invite) break; Group *player_to_invite_group = player_to_invite->GetGroup(); - + if (player_to_invite->HasRaid()) { Message(Chat::Red, "%s is already in a raid.", player_to_invite->GetName()); break; @@ -11112,7 +11112,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) Message(Chat::Red, "You can only invite an ungrouped player or group leader to join your raid."); break; } - + /* Send out invite to the client */ auto outapp = new EQApplicationPacket(OP_RaidUpdate, sizeof(RaidGeneral_Struct)); RaidGeneral_Struct *raid_command = (RaidGeneral_Struct*)outapp->pBuffer; @@ -11124,7 +11124,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) raid_command->action = 20; player_to_invite->QueuePacket(outapp); - + safe_delete(outapp); break; @@ -11220,7 +11220,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) } if (player_invited_group->IsLeader(player_invited_group->members[x])) { Client *c = nullptr; - + if (player_invited_group->members[x]->IsClient()) c = player_invited_group->members[x]->CastToClient(); else @@ -11230,24 +11230,24 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) raid->SendMakeLeaderPacketTo(raid->leadername, c); raid->AddMember(c, raid_free_group_id, true, true, true); raid->SendBulkRaid(c); - + if (raid->IsLocked()) { raid->SendRaidLockTo(c); } } else { Client *c = nullptr; - + if (player_invited_group->members[x]->IsClient()) c = player_invited_group->members[x]->CastToClient(); else continue; - + raid->SendRaidCreate(c); raid->SendMakeLeaderPacketTo(raid->leadername, c); raid->AddMember(c, raid_free_group_id); raid->SendBulkRaid(c); - + if (raid->IsLocked()) { raid->SendRaidLockTo(c); } @@ -11281,12 +11281,12 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) c = group->members[x]->CastToClient(); else continue; - + raid->SendRaidCreate(c); raid->SendMakeLeaderPacketTo(raid->leadername, c); raid->AddMember(c, raid_free_group_id, false, true); raid->SendBulkRaid(c); - + if (raid->IsLocked()) { raid->SendRaidLockTo(c); } @@ -11294,17 +11294,17 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) else { Client *c = nullptr; - + if (group->members[x]->IsClient()) c = group->members[x]->CastToClient(); else continue; - + raid->SendRaidCreate(c); raid->SendMakeLeaderPacketTo(raid->leadername, c); raid->AddMember(c, raid_free_group_id); raid->SendBulkRaid(c); - + if (raid->IsLocked()) { raid->SendRaidLockTo(c); } @@ -11321,7 +11321,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) if (player_invited_group) { raid = new Raid(player_accepting_invite); - + entity_list.AddRaid(raid); raid->SetRaidDetails(); Client *addClientig = nullptr; @@ -11345,7 +11345,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) raid->SendMakeLeaderPacketTo(raid->leadername, c); raid->AddMember(c, 0, true, true, true); raid->SendBulkRaid(c); - + if (raid->IsLocked()) { raid->SendRaidLockTo(c); } @@ -11470,7 +11470,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) raid->SetGroupLeader(raid_command_packet->leader_name, false); /* We were the leader of our old group */ - if (old_group < 12) { + if (old_group < 12) { /* Assign new group leader if we can */ for (int x = 0; x < MAX_RAID_MEMBERS; x++) { if (raid->members[x].GroupNumber == old_group) { @@ -11499,7 +11499,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) strn0cpy(raid_command_packet->playername, raid->members[x].membername, 64); worldserver.SendPacket(pack); - + safe_delete(pack); } break; @@ -11545,7 +11545,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) raid->SetGroupLeader(raid_command_packet->leader_name, false); for (int x = 0; x < MAX_RAID_MEMBERS; x++) { if (raid->members[x].GroupNumber == oldgrp && strlen(raid->members[x].membername) > 0 && strcmp(raid->members[x].membername, raid_command_packet->leader_name) != 0){ - + raid->SetGroupLeader(raid->members[x].membername); raid->UpdateGroupAAs(oldgrp); @@ -11568,7 +11568,7 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) strn0cpy(raid_command->playername, raid->members[x].membername, 64); raid_command->zoneid = zone->GetZoneID(); raid_command->instance_id = zone->GetInstanceID(); - + worldserver.SendPacket(pack); safe_delete(pack); } @@ -11583,14 +11583,14 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) else { auto pack = new ServerPacket(ServerOP_RaidGroupDisband, sizeof(ServerRaidGeneralAction_Struct)); ServerRaidGeneralAction_Struct* raid_command = (ServerRaidGeneralAction_Struct*)pack->pBuffer; - + raid_command->rid = raid->GetID(); raid_command->zoneid = zone->GetZoneID(); raid_command->instance_id = zone->GetInstanceID(); strn0cpy(raid_command->playername, raid_command_packet->leader_name, 64); worldserver.SendPacket(pack); - + safe_delete(pack); } @@ -11778,7 +11778,7 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) { if (app->size != sizeof(TradeskillFavorites_Struct)) { LogError("Invalid size for TradeskillFavorites_Struct: Expected: [{}], Got: [{}]", - sizeof(TradeskillFavorites_Struct), app->size); + sizeof(TradeskillFavorites_Struct), app->size); return; } @@ -11828,6 +11828,7 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) if (first) //no favorites.... return; + // TODO: Clean this up const std::string query = StringFormat( SQL ( SELECT @@ -11844,11 +11845,11 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) AND tr.id IN (%s) AND tr.must_learn & 0x20 <> 0x20 AND ( - ( - tr.must_learn & 0x3 <> 0 - ) - OR (tr.must_learn & 0x3 = 0) - ) + ( + tr.must_learn & 0x3 <> 0 + ) + OR (tr.must_learn & 0x3 = 0) + ) GROUP BY tr.id HAVING @@ -11924,6 +11925,7 @@ void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) } //arbitrary limit of 200 recipes, makes sense to me. + // TODO: Clean this up std::string query = fmt::format( SQL( SELECT @@ -11931,37 +11933,19 @@ void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) tr.name, tr.trivial, SUM(tre.componentcount), - crl.madecount, tr.tradeskill FROM - tradeskill_recipe - AS tr - LEFT - JOIN - tradeskill_recipe_entries - AS - tre - ON - tr.id = tre.recipe_id - LEFT JOIN( - SELECT - recipe_id, - madecount - FROM - char_recipe_list - WHERE - char_id = {} - ) AS crl ON tr.id = crl.recipe_id + tradeskill_recipe AS tr + LEFT JOIN tradeskill_recipe_entries AS tre ON tr.id = tre.recipe_id WHERE - {} tr.trivial >= {} + {} tr.trivial >= {} AND tr.trivial <= {} AND tr.enabled <> 0 AND tr.must_learn & 0x20 <> 0x20 AND ( - ( - tr.must_learn & 0x3 <> 0 - AND crl.madecount IS NOT NULL - ) + ( + tr.must_learn & 0x3 <> 0 + ) OR (tr.must_learn & 0x3 = 0) ) GROUP BY @@ -11979,7 +11963,6 @@ void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) LIMIT 200 ), - CharacterID(), search_clause, p_recipes_search_struct->mintrivial, p_recipes_search_struct->maxtrivial, From cc8aa354f1a88220a0eeb9c4e6006120e7c775f5 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 04:15:43 -0500 Subject: [PATCH 070/272] Add string_id define [skip ci] --- zone/string_ids.h | 1 + 1 file changed, 1 insertion(+) diff --git a/zone/string_ids.h b/zone/string_ids.h index e543007a0..b7ee5ddd4 100644 --- a/zone/string_ids.h +++ b/zone/string_ids.h @@ -310,6 +310,7 @@ #define WHOALL_NO_RESULTS 5029 //There are no players in EverQuest that match those who filters. #define TELL_QUEUED_MESSAGE 5045 //You told %1 '%T2. %3' #define TOLD_NOT_ONLINE 5046 //%1 is not online at this time. +#define ZONING_NO_EXPANSION 5052 //The zone that you are attempting to enter is part of an expansion that you do not yet own. You may need to return to the Login screen and enter an account key for that expansion. If you have received this message in error, please /petition or send an email to EQAccounts@soe.sony.com #define PETITION_NO_DELETE 5053 //You do not have a petition in the queue. #define PETITION_DELETED 5054 //Your petition was successfully deleted. #define ALREADY_IN_RAID 5060 //%1 is already in a raid. From 15c9b641201cedd6fd21207ac60dfebd81534551 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 04:44:39 -0500 Subject: [PATCH 071/272] Add GetWhere and DeleteWhere repository methods --- common/repositories/aa_ability_repository.h | 54 ++- .../repositories/aa_rank_effects_repository.h | 45 ++- .../repositories/aa_rank_prereqs_repository.h | 43 ++- common/repositories/aa_ranks_repository.h | 53 ++- .../repositories/account_flags_repository.h | 43 ++- common/repositories/account_ip_repository.h | 44 ++- common/repositories/account_repository.h | 59 +++- .../repositories/account_rewards_repository.h | 43 ++- .../adventure_details_repository.h | 49 ++- .../adventure_members_repository.h | 42 ++- .../repositories/adventure_stats_repository.h | 51 ++- ...venture_template_entry_flavor_repository.h | 42 ++- .../adventure_template_entry_repository.h | 42 ++- .../adventure_template_repository.h | 157 ++++++--- .../alternate_currency_repository.h | 42 ++- common/repositories/auras_repository.h | 51 ++- common/repositories/banned_ips_repository.h | 42 ++- common/repositories/base_data_repository.h | 98 ++++-- .../repositories/blocked_spells_repository.h | 88 ++++- common/repositories/books_repository.h | 43 ++- common/repositories/bug_reports_repository.h | 90 ++++- common/repositories/bugs_repository.h | 71 +++- common/repositories/buyer_repository.h | 46 ++- .../char_create_combinations_repository.h | 46 ++- ...char_create_point_allocations_repository.h | 55 ++- .../char_recipe_list_repository.h | 43 ++- .../character_activities_repository.h | 45 ++- .../character_alt_currency_repository.h | 43 ++- ...character_alternate_abilities_repository.h | 44 ++- .../repositories/character_auras_repository.h | 43 ++- .../character_bandolier_repository.h | 46 ++- .../repositories/character_bind_repository.h | 72 +++- .../repositories/character_buffs_repository.h | 57 ++- .../character_corpse_items_repository.h | 51 ++- .../character_corpses_repository.h | 111 +++++- .../character_currency_repository.h | 57 ++- .../repositories/character_data_repository.h | 166 ++++++++- .../character_disciplines_repository.h | 43 ++- .../character_inspect_messages_repository.h | 42 ++- .../character_item_recast_repository.h | 43 ++- .../character_languages_repository.h | 43 ++- ...haracter_leadership_abilities_repository.h | 43 ++- .../character_material_repository.h | 47 ++- .../character_memmed_spells_repository.h | 43 ++- .../character_pet_buffs_repository.h | 51 ++- .../character_pet_info_repository.h | 54 ++- .../character_pet_inventory_repository.h | 44 ++- .../character_potionbelt_repository.h | 44 ++- .../character_skills_repository.h | 43 ++- .../character_spells_repository.h | 43 ++- .../repositories/character_tasks_repository.h | 45 ++- .../character_tribute_repository.h | 43 ++- common/repositories/chatchannels_repository.h | 44 ++- .../command_settings_repository.h | 43 ++- .../repositories/completed_tasks_repository.h | 44 ++- common/repositories/data_buckets_repository.h | 44 ++- common/repositories/db_str_repository.h | 43 ++- .../discovered_items_repository.h | 44 ++- common/repositories/doors_repository.h | 125 +++++-- common/repositories/eventlog_repository.h | 50 ++- .../faction_base_data_repository.h | 46 ++- .../faction_list_mod_repository.h | 44 ++- common/repositories/faction_list_repository.h | 43 ++- .../repositories/faction_values_repository.h | 44 ++- common/repositories/fishing_repository.h | 47 ++- common/repositories/forage_repository.h | 45 ++- common/repositories/friends_repository.h | 43 ++- common/repositories/global_loot_repository.h | 53 ++- common/repositories/gm_ips_repository.h | 43 ++- common/repositories/goallists_repository.h | 42 ++- common/repositories/graveyard_repository.h | 70 +++- .../repositories/ground_spawns_repository.h | 90 ++++- common/repositories/group_id_repository.h | 44 ++- .../repositories/group_leaders_repository.h | 49 ++- .../repositories/guild_members_repository.h | 49 ++- common/repositories/guild_ranks_repository.h | 51 ++- .../repositories/guild_relations_repository.h | 43 ++- common/repositories/guilds_repository.h | 49 ++- common/repositories/hackers_repository.h | 46 ++- common/repositories/horses_repository.h | 52 ++- .../instance_list_player_repository.h | 42 ++- .../repositories/instance_list_repository.h | 45 +++ common/repositories/inventory_repository.h | 56 ++- .../inventory_snapshots_repository.h | 57 ++- .../repositories/ip_exemptions_repository.h | 43 ++- common/repositories/item_tick_repository.h | 46 ++- common/repositories/items_repository.h | 331 +++++++++++++++++- common/repositories/launcher_repository.h | 42 ++- .../repositories/launcher_zones_repository.h | 43 ++- .../ldon_trap_entries_repository.h | 42 ++- .../ldon_trap_templates_repository.h | 45 ++- .../repositories/level_exp_mods_repository.h | 55 ++- common/repositories/lfguild_repository.h | 49 ++- .../repositories/login_accounts_repository.h | 49 ++- .../login_api_tokens_repository.h | 46 ++- .../login_server_admins_repository.h | 48 ++- .../login_server_list_types_repository.h | 42 ++- .../login_world_servers_repository.h | 50 ++- .../logsys_categories_repository.h | 45 ++- .../lootdrop_entries_repository.h | 61 +++- common/repositories/lootdrop_repository.h | 42 ++- .../loottable_entries_repository.h | 52 ++- common/repositories/loottable_repository.h | 46 ++- common/repositories/mail_repository.h | 48 ++- common/repositories/merchantlist_repository.h | 48 ++- .../merchantlist_temp_repository.h | 44 ++- common/repositories/name_filter_repository.h | 42 ++- common/repositories/npc_emotes_repository.h | 45 ++- .../npc_faction_entries_repository.h | 45 ++- common/repositories/npc_faction_repository.h | 44 ++- .../npc_scale_global_base_repository.h | 68 +++- .../npc_spells_effects_entries_repository.h | 48 ++- .../npc_spells_effects_repository.h | 43 ++- .../npc_spells_entries_repository.h | 52 ++- common/repositories/npc_spells_repository.h | 61 +++- common/repositories/npc_types_repository.h | 192 +++++++++- .../repositories/npc_types_tint_repository.h | 69 +++- .../repositories/object_contents_repository.h | 52 ++- common/repositories/object_repository.h | 108 ++++-- .../perl_event_export_settings_repository.h | 47 ++- common/repositories/petitions_repository.h | 56 ++- .../pets_equipmentset_entries_repository.h | 43 ++- .../pets_equipmentset_repository.h | 43 ++- common/repositories/pets_repository.h | 48 ++- .../player_titlesets_repository.h | 43 ++- common/repositories/proximities_repository.h | 84 ++++- .../repositories/quest_globals_repository.h | 46 ++- common/repositories/raid_details_repository.h | 44 ++- common/repositories/raid_members_repository.h | 49 ++- common/repositories/reports_repository.h | 44 ++- .../repositories/respawn_times_repository.h | 44 ++- common/repositories/rule_sets_repository.h | 42 ++- common/repositories/rule_values_repository.h | 44 ++- common/repositories/saylink_repository.h | 42 ++- common/repositories/skill_caps_repository.h | 45 ++- common/repositories/spawn2_repository.h | 79 ++++- .../spawn_condition_values_repository.h | 44 ++- .../spawn_conditions_repository.h | 45 ++- common/repositories/spawn_events_repository.h | 54 ++- common/repositories/spawnentry_repository.h | 44 ++- common/repositories/spawngroup_repository.h | 83 ++++- .../repositories/spell_buckets_repository.h | 43 ++- .../repositories/spell_globals_repository.h | 44 ++- common/repositories/spells_new_repository.h | 301 +++++++++++++++- common/repositories/start_zones_repository.h | 97 +++-- .../repositories/starting_items_repository.h | 49 ++- .../repositories/task_activities_repository.h | 55 ++- common/repositories/tasks_repository.h | 56 ++- common/repositories/tasksets_repository.h | 42 ++- .../repositories/template/repository.template | 41 ++- common/repositories/timers_repository.h | 45 ++- common/repositories/titles_repository.h | 54 ++- common/repositories/trader_repository.h | 46 ++- .../tradeskill_recipe_entries_repository.h | 48 ++- common/repositories/traps_repository.h | 73 +++- .../repositories/tribute_levels_repository.h | 44 ++- common/repositories/tributes_repository.h | 45 ++- common/repositories/variables_repository.h | 44 ++- .../veteran_reward_templates_repository.h | 45 ++- common/repositories/zone_points_repository.h | 111 ++++-- common/repositories/zone_repository.h | 252 +++++++++---- .../generators/repository-generator.pl | 4 +- world/world_server_command_handler.cpp | 43 ++- world/world_server_command_handler.h | 1 + 164 files changed, 8806 insertions(+), 594 deletions(-) diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index b5010c627..62aeb7a4b 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -268,7 +268,7 @@ public: return aa_ability_entry; } - aa_ability_entry = InstanceListRepository::NewEntity(); + aa_ability_entry = AaAbilityRepository::NewEntity(); return aa_ability_entry; } @@ -349,6 +349,58 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_AA_ABILITY_REPOSITORY_H diff --git a/common/repositories/aa_rank_effects_repository.h b/common/repositories/aa_rank_effects_repository.h index 27d830db5..17436af76 100644 --- a/common/repositories/aa_rank_effects_repository.h +++ b/common/repositories/aa_rank_effects_repository.h @@ -212,7 +212,7 @@ public: return aa_rank_effects_entry; } - aa_rank_effects_entry = InstanceListRepository::NewEntity(); + aa_rank_effects_entry = AaRankEffectsRepository::NewEntity(); return aa_rank_effects_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_AA_RANK_EFFECTS_REPOSITORY_H diff --git a/common/repositories/aa_rank_prereqs_repository.h b/common/repositories/aa_rank_prereqs_repository.h index 29e102adc..bf7ccb98e 100644 --- a/common/repositories/aa_rank_prereqs_repository.h +++ b/common/repositories/aa_rank_prereqs_repository.h @@ -200,7 +200,7 @@ public: return aa_rank_prereqs_entry; } - aa_rank_prereqs_entry = InstanceListRepository::NewEntity(); + aa_rank_prereqs_entry = AaRankPrereqsRepository::NewEntity(); return aa_rank_prereqs_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_AA_RANK_PREREQS_REPOSITORY_H diff --git a/common/repositories/aa_ranks_repository.h b/common/repositories/aa_ranks_repository.h index fe0a556ad..27ff7b1d7 100644 --- a/common/repositories/aa_ranks_repository.h +++ b/common/repositories/aa_ranks_repository.h @@ -262,7 +262,7 @@ public: return aa_ranks_entry; } - aa_ranks_entry = InstanceListRepository::NewEntity(); + aa_ranks_entry = AaRanksRepository::NewEntity(); return aa_ranks_entry; } @@ -341,6 +341,57 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_AA_RANKS_REPOSITORY_H diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index c23871c5f..6943d1d3e 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -200,7 +200,7 @@ public: return account_flags_entry; } - account_flags_entry = InstanceListRepository::NewEntity(); + account_flags_entry = AccountFlagsRepository::NewEntity(); return account_flags_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1]; + entry.p_value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ACCOUNT_FLAGS_REPOSITORY_H diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h index 77c7d41d0..aea63827d 100644 --- a/common/repositories/account_ip_repository.h +++ b/common/repositories/account_ip_repository.h @@ -206,7 +206,7 @@ public: return account_ip_entry; } - account_ip_entry = InstanceListRepository::NewEntity(); + account_ip_entry = AccountIpRepository::NewEntity(); return account_ip_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1]; + entry.count = atoi(row[2]); + entry.lastused = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ACCOUNT_IP_REPOSITORY_H diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index d78bcf866..c043dc8ee 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -298,7 +298,7 @@ public: return account_entry; } - account_entry = InstanceListRepository::NewEntity(); + account_entry = AccountRepository::NewEntity(); return account_entry; } @@ -389,6 +389,63 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.charname = row[2]; + entry.sharedplat = atoi(row[3]); + entry.password = row[4]; + entry.status = atoi(row[5]); + entry.ls_id = row[6]; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11]; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14]; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17]; + entry.suspend_reason = row[18]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ACCOUNT_REPOSITORY_H diff --git a/common/repositories/account_rewards_repository.h b/common/repositories/account_rewards_repository.h index 5a0a113ba..8e2abd112 100644 --- a/common/repositories/account_rewards_repository.h +++ b/common/repositories/account_rewards_repository.h @@ -200,7 +200,7 @@ public: return account_rewards_entry; } - account_rewards_entry = InstanceListRepository::NewEntity(); + account_rewards_entry = AccountRewardsRepository::NewEntity(); return account_rewards_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ACCOUNT_REWARDS_REPOSITORY_H diff --git a/common/repositories/adventure_details_repository.h b/common/repositories/adventure_details_repository.h index 19e3dbed8..fbb2a4df2 100644 --- a/common/repositories/adventure_details_repository.h +++ b/common/repositories/adventure_details_repository.h @@ -238,7 +238,7 @@ public: return adventure_details_entry; } - adventure_details_entry = InstanceListRepository::NewEntity(); + adventure_details_entry = AdventureDetailsRepository::NewEntity(); return adventure_details_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_DETAILS_REPOSITORY_H diff --git a/common/repositories/adventure_members_repository.h b/common/repositories/adventure_members_repository.h index 10c221f4a..4bc18a18d 100644 --- a/common/repositories/adventure_members_repository.h +++ b/common/repositories/adventure_members_repository.h @@ -196,7 +196,7 @@ public: return adventure_members_entry; } - adventure_members_entry = InstanceListRepository::NewEntity(); + adventure_members_entry = AdventureMembersRepository::NewEntity(); return adventure_members_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_MEMBERS_REPOSITORY_H diff --git a/common/repositories/adventure_stats_repository.h b/common/repositories/adventure_stats_repository.h index 5b845f729..12a35c714 100644 --- a/common/repositories/adventure_stats_repository.h +++ b/common/repositories/adventure_stats_repository.h @@ -250,7 +250,7 @@ public: return adventure_stats_entry; } - adventure_stats_entry = InstanceListRepository::NewEntity(); + adventure_stats_entry = AdventureStatsRepository::NewEntity(); return adventure_stats_entry; } @@ -325,6 +325,55 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_STATS_REPOSITORY_H diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index d55f9a772..4c72735a5 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -196,7 +196,7 @@ public: return adventure_template_entry_flavor_entry; } - adventure_template_entry_flavor_entry = InstanceListRepository::NewEntity(); + adventure_template_entry_flavor_entry = AdventureTemplateEntryFlavorRepository::NewEntity(); return adventure_template_entry_flavor_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H diff --git a/common/repositories/adventure_template_entry_repository.h b/common/repositories/adventure_template_entry_repository.h index 844d3b3be..7080b87a6 100644 --- a/common/repositories/adventure_template_entry_repository.h +++ b/common/repositories/adventure_template_entry_repository.h @@ -196,7 +196,7 @@ public: return adventure_template_entry_entry; } - adventure_template_entry_entry = InstanceListRepository::NewEntity(); + adventure_template_entry_entry = AdventureTemplateEntryRepository::NewEntity(); return adventure_template_entry_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index 2f5f78296..4ef56ca80 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -293,10 +293,10 @@ public: update_values.push_back(columns[7] + " = " + std::to_string(adventure_template_entry.type)); update_values.push_back(columns[8] + " = " + std::to_string(adventure_template_entry.type_data)); update_values.push_back(columns[9] + " = " + std::to_string(adventure_template_entry.type_count)); - update_values.push_back(columns[10] + " = '" + EscapeString(adventure_template_entry.assa_x) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(adventure_template_entry.assa_y) + "'"); - update_values.push_back(columns[12] + " = '" + EscapeString(adventure_template_entry.assa_z) + "'"); - update_values.push_back(columns[13] + " = '" + EscapeString(adventure_template_entry.assa_h) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(adventure_template_entry.assa_x)); + update_values.push_back(columns[11] + " = " + std::to_string(adventure_template_entry.assa_y)); + update_values.push_back(columns[12] + " = " + std::to_string(adventure_template_entry.assa_z)); + update_values.push_back(columns[13] + " = " + std::to_string(adventure_template_entry.assa_h)); update_values.push_back(columns[14] + " = '" + EscapeString(adventure_template_entry.text) + "'"); update_values.push_back(columns[15] + " = " + std::to_string(adventure_template_entry.duration)); update_values.push_back(columns[16] + " = " + std::to_string(adventure_template_entry.zone_in_time)); @@ -304,18 +304,18 @@ public: update_values.push_back(columns[18] + " = " + std::to_string(adventure_template_entry.lose_points)); update_values.push_back(columns[19] + " = " + std::to_string(adventure_template_entry.theme)); update_values.push_back(columns[20] + " = " + std::to_string(adventure_template_entry.zone_in_zone_id)); - update_values.push_back(columns[21] + " = '" + EscapeString(adventure_template_entry.zone_in_x) + "'"); - update_values.push_back(columns[22] + " = '" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + update_values.push_back(columns[21] + " = " + std::to_string(adventure_template_entry.zone_in_x)); + update_values.push_back(columns[22] + " = " + std::to_string(adventure_template_entry.zone_in_y)); update_values.push_back(columns[23] + " = " + std::to_string(adventure_template_entry.zone_in_object_id)); - update_values.push_back(columns[24] + " = '" + EscapeString(adventure_template_entry.dest_x) + "'"); - update_values.push_back(columns[25] + " = '" + EscapeString(adventure_template_entry.dest_y) + "'"); - update_values.push_back(columns[26] + " = '" + EscapeString(adventure_template_entry.dest_z) + "'"); - update_values.push_back(columns[27] + " = '" + EscapeString(adventure_template_entry.dest_h) + "'"); + update_values.push_back(columns[24] + " = " + std::to_string(adventure_template_entry.dest_x)); + update_values.push_back(columns[25] + " = " + std::to_string(adventure_template_entry.dest_y)); + update_values.push_back(columns[26] + " = " + std::to_string(adventure_template_entry.dest_z)); + update_values.push_back(columns[27] + " = " + std::to_string(adventure_template_entry.dest_h)); update_values.push_back(columns[28] + " = " + std::to_string(adventure_template_entry.graveyard_zone_id)); - update_values.push_back(columns[29] + " = '" + EscapeString(adventure_template_entry.graveyard_x) + "'"); - update_values.push_back(columns[30] + " = '" + EscapeString(adventure_template_entry.graveyard_y) + "'"); - update_values.push_back(columns[31] + " = '" + EscapeString(adventure_template_entry.graveyard_z) + "'"); - update_values.push_back(columns[32] + " = '" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + update_values.push_back(columns[29] + " = " + std::to_string(adventure_template_entry.graveyard_x)); + update_values.push_back(columns[30] + " = " + std::to_string(adventure_template_entry.graveyard_y)); + update_values.push_back(columns[31] + " = " + std::to_string(adventure_template_entry.graveyard_z)); + update_values.push_back(columns[32] + " = " + std::to_string(adventure_template_entry.graveyard_radius)); auto results = content_db.QueryDatabase( fmt::format( @@ -345,10 +345,10 @@ public: insert_values.push_back(std::to_string(adventure_template_entry.type)); insert_values.push_back(std::to_string(adventure_template_entry.type_data)); insert_values.push_back(std::to_string(adventure_template_entry.type_count)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); insert_values.push_back(std::to_string(adventure_template_entry.duration)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); @@ -356,18 +356,18 @@ public: insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); insert_values.push_back(std::to_string(adventure_template_entry.theme)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); auto results = content_db.QueryDatabase( fmt::format( @@ -382,7 +382,7 @@ public: return adventure_template_entry; } - adventure_template_entry = InstanceListRepository::NewEntity(); + adventure_template_entry = AdventureTemplateRepository::NewEntity(); return adventure_template_entry; } @@ -405,10 +405,10 @@ public: insert_values.push_back(std::to_string(adventure_template_entry.type)); insert_values.push_back(std::to_string(adventure_template_entry.type_data)); insert_values.push_back(std::to_string(adventure_template_entry.type_count)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.assa_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); insert_values.push_back(std::to_string(adventure_template_entry.duration)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); @@ -416,18 +416,18 @@ public: insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); insert_values.push_back(std::to_string(adventure_template_entry.theme)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone_in_y) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.dest_h) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_x) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_y) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_z) + "'"); - insert_values.push_back("'" + EscapeString(adventure_template_entry.graveyard_radius) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -501,6 +501,77 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14]; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ADVENTURE_TEMPLATE_REPOSITORY_H diff --git a/common/repositories/alternate_currency_repository.h b/common/repositories/alternate_currency_repository.h index 7c68b7b6d..a47c914b9 100644 --- a/common/repositories/alternate_currency_repository.h +++ b/common/repositories/alternate_currency_repository.h @@ -196,7 +196,7 @@ public: return alternate_currency_entry; } - alternate_currency_entry = InstanceListRepository::NewEntity(); + alternate_currency_entry = AlternateCurrencyRepository::NewEntity(); return alternate_currency_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ALTERNATE_CURRENCY_REPOSITORY_H diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index cd8032ce2..f76ca9e59 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -250,7 +250,7 @@ public: return auras_entry; } - auras_entry = InstanceListRepository::NewEntity(); + auras_entry = AurasRepository::NewEntity(); return auras_entry; } @@ -325,6 +325,55 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2]; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_AURAS_REPOSITORY_H diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index 7993eef5b..26e8293f0 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -196,7 +196,7 @@ public: return banned_ips_entry; } - banned_ips_entry = InstanceListRepository::NewEntity(); + banned_ips_entry = BannedIpsRepository::NewEntity(); return banned_ips_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BannedIps entry{}; + + entry.ip_address = row[0]; + entry.notes = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BANNED_IPS_REPOSITORY_H diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index 600502a71..08a190239 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -192,14 +192,14 @@ public: auto columns = Columns(); - update_values.push_back(columns[2] + " = '" + EscapeString(base_data_entry.hp) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(base_data_entry.mana) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(base_data_entry.end) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(base_data_entry.unk1) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(base_data_entry.unk2) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(base_data_entry.hp_fac) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(base_data_entry.mana_fac) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(base_data_entry.end_fac) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(base_data_entry.hp)); + update_values.push_back(columns[3] + " = " + std::to_string(base_data_entry.mana)); + update_values.push_back(columns[4] + " = " + std::to_string(base_data_entry.end)); + update_values.push_back(columns[5] + " = " + std::to_string(base_data_entry.unk1)); + update_values.push_back(columns[6] + " = " + std::to_string(base_data_entry.unk2)); + update_values.push_back(columns[7] + " = " + std::to_string(base_data_entry.hp_fac)); + update_values.push_back(columns[8] + " = " + std::to_string(base_data_entry.mana_fac)); + update_values.push_back(columns[9] + " = " + std::to_string(base_data_entry.end_fac)); auto results = content_db.QueryDatabase( fmt::format( @@ -220,14 +220,14 @@ public: { std::vector insert_values; - insert_values.push_back("'" + EscapeString(base_data_entry.hp) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.mana) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.end) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.unk1) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.unk2) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.hp_fac) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.mana_fac) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.end_fac) + "'"); + insert_values.push_back(std::to_string(base_data_entry.hp)); + insert_values.push_back(std::to_string(base_data_entry.mana)); + insert_values.push_back(std::to_string(base_data_entry.end)); + insert_values.push_back(std::to_string(base_data_entry.unk1)); + insert_values.push_back(std::to_string(base_data_entry.unk2)); + insert_values.push_back(std::to_string(base_data_entry.hp_fac)); + insert_values.push_back(std::to_string(base_data_entry.mana_fac)); + insert_values.push_back(std::to_string(base_data_entry.end_fac)); auto results = content_db.QueryDatabase( fmt::format( @@ -242,7 +242,7 @@ public: return base_data_entry; } - base_data_entry = InstanceListRepository::NewEntity(); + base_data_entry = BaseDataRepository::NewEntity(); return base_data_entry; } @@ -256,14 +256,14 @@ public: for (auto &base_data_entry: base_data_entries) { std::vector insert_values; - insert_values.push_back("'" + EscapeString(base_data_entry.hp) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.mana) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.end) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.unk1) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.unk2) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.hp_fac) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.mana_fac) + "'"); - insert_values.push_back("'" + EscapeString(base_data_entry.end_fac) + "'"); + insert_values.push_back(std::to_string(base_data_entry.hp)); + insert_values.push_back(std::to_string(base_data_entry.mana)); + insert_values.push_back(std::to_string(base_data_entry.end)); + insert_values.push_back(std::to_string(base_data_entry.unk1)); + insert_values.push_back(std::to_string(base_data_entry.unk2)); + insert_values.push_back(std::to_string(base_data_entry.hp_fac)); + insert_values.push_back(std::to_string(base_data_entry.mana_fac)); + insert_values.push_back(std::to_string(base_data_entry.end_fac)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -314,6 +314,54 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index 1a9820183..c4eba3581 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -203,12 +203,12 @@ public: update_values.push_back(columns[1] + " = " + std::to_string(blocked_spells_entry.spellid)); update_values.push_back(columns[2] + " = " + std::to_string(blocked_spells_entry.type)); update_values.push_back(columns[3] + " = " + std::to_string(blocked_spells_entry.zoneid)); - update_values.push_back(columns[4] + " = '" + EscapeString(blocked_spells_entry.x) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(blocked_spells_entry.y) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(blocked_spells_entry.z) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(blocked_spells_entry.x_diff) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(blocked_spells_entry.y_diff) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(blocked_spells_entry.z_diff) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(blocked_spells_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(blocked_spells_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(blocked_spells_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(blocked_spells_entry.x_diff)); + update_values.push_back(columns[8] + " = " + std::to_string(blocked_spells_entry.y_diff)); + update_values.push_back(columns[9] + " = " + std::to_string(blocked_spells_entry.z_diff)); update_values.push_back(columns[10] + " = '" + EscapeString(blocked_spells_entry.message) + "'"); update_values.push_back(columns[11] + " = '" + EscapeString(blocked_spells_entry.description) + "'"); @@ -234,12 +234,12 @@ public: insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); insert_values.push_back(std::to_string(blocked_spells_entry.type)); insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.x_diff) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.y_diff) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.z_diff) + "'"); + insert_values.push_back(std::to_string(blocked_spells_entry.x)); + insert_values.push_back(std::to_string(blocked_spells_entry.y)); + insert_values.push_back(std::to_string(blocked_spells_entry.z)); + insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); @@ -256,7 +256,7 @@ public: return blocked_spells_entry; } - blocked_spells_entry = InstanceListRepository::NewEntity(); + blocked_spells_entry = BlockedSpellsRepository::NewEntity(); return blocked_spells_entry; } @@ -273,12 +273,12 @@ public: insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); insert_values.push_back(std::to_string(blocked_spells_entry.type)); insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.x_diff) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.y_diff) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.z_diff) + "'"); + insert_values.push_back(std::to_string(blocked_spells_entry.x)); + insert_values.push_back(std::to_string(blocked_spells_entry.y)); + insert_values.push_back(std::to_string(blocked_spells_entry.z)); + insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); @@ -333,6 +333,56 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10]; + entry.description = row[11]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BLOCKED_SPELLS_REPOSITORY_H diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h index bd2404aff..7baa6ef7c 100644 --- a/common/repositories/books_repository.h +++ b/common/repositories/books_repository.h @@ -202,7 +202,7 @@ public: return books_entry; } - books_entry = InstanceListRepository::NewEntity(); + books_entry = BooksRepository::NewEntity(); return books_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Books entry{}; + + entry.name = row[0]; + entry.txtfile = row[1]; + entry.language = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BOOKS_REPOSITORY_H diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index 56ab6a7f7..f58d2e121 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -291,9 +291,9 @@ public: update_values.push_back(columns[9] + " = '" + EscapeString(bug_reports_entry.category_name) + "'"); update_values.push_back(columns[10] + " = '" + EscapeString(bug_reports_entry.reporter_name) + "'"); update_values.push_back(columns[11] + " = '" + EscapeString(bug_reports_entry.ui_path) + "'"); - update_values.push_back(columns[12] + " = '" + EscapeString(bug_reports_entry.pos_x) + "'"); - update_values.push_back(columns[13] + " = '" + EscapeString(bug_reports_entry.pos_y) + "'"); - update_values.push_back(columns[14] + " = '" + EscapeString(bug_reports_entry.pos_z) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(bug_reports_entry.pos_x)); + update_values.push_back(columns[13] + " = " + std::to_string(bug_reports_entry.pos_y)); + update_values.push_back(columns[14] + " = " + std::to_string(bug_reports_entry.pos_z)); update_values.push_back(columns[15] + " = " + std::to_string(bug_reports_entry.heading)); update_values.push_back(columns[16] + " = " + std::to_string(bug_reports_entry.time_played)); update_values.push_back(columns[17] + " = " + std::to_string(bug_reports_entry.target_id)); @@ -342,9 +342,9 @@ public: insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_x) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_y) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_z) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); insert_values.push_back(std::to_string(bug_reports_entry.heading)); insert_values.push_back(std::to_string(bug_reports_entry.time_played)); insert_values.push_back(std::to_string(bug_reports_entry.target_id)); @@ -376,7 +376,7 @@ public: return bug_reports_entry; } - bug_reports_entry = InstanceListRepository::NewEntity(); + bug_reports_entry = BugReportsRepository::NewEntity(); return bug_reports_entry; } @@ -401,9 +401,9 @@ public: insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_x) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_y) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.pos_z) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); insert_values.push_back(std::to_string(bug_reports_entry.heading)); insert_values.push_back(std::to_string(bug_reports_entry.time_played)); insert_values.push_back(std::to_string(bug_reports_entry.target_id)); @@ -493,6 +493,76 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3]; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6]; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9]; + entry.reporter_name = row[10]; + entry.ui_path = row[11]; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18]; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25]; + entry.system_info = row[26]; + entry.report_datetime = row[27]; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29]; + entry.last_reviewer = row[30]; + entry.reviewer_notes = row[31]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BUG_REPORTS_REPOSITORY_H diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index 1ab30e9a1..85ebb2852 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -207,9 +207,9 @@ public: update_values.push_back(columns[1] + " = '" + EscapeString(bugs_entry.zone) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(bugs_entry.name) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(bugs_entry.ui) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(bugs_entry.x) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(bugs_entry.y) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(bugs_entry.z) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(bugs_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(bugs_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(bugs_entry.z)); update_values.push_back(columns[7] + " = '" + EscapeString(bugs_entry.type) + "'"); update_values.push_back(columns[8] + " = " + std::to_string(bugs_entry.flag)); update_values.push_back(columns[9] + " = '" + EscapeString(bugs_entry.target) + "'"); @@ -239,9 +239,9 @@ public: insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.z) + "'"); + insert_values.push_back(std::to_string(bugs_entry.x)); + insert_values.push_back(std::to_string(bugs_entry.y)); + insert_values.push_back(std::to_string(bugs_entry.z)); insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); insert_values.push_back(std::to_string(bugs_entry.flag)); insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); @@ -262,7 +262,7 @@ public: return bugs_entry; } - bugs_entry = InstanceListRepository::NewEntity(); + bugs_entry = BugsRepository::NewEntity(); return bugs_entry; } @@ -279,9 +279,9 @@ public: insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.z) + "'"); + insert_values.push_back(std::to_string(bugs_entry.x)); + insert_values.push_back(std::to_string(bugs_entry.y)); + insert_values.push_back(std::to_string(bugs_entry.z)); insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); insert_values.push_back(std::to_string(bugs_entry.flag)); insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); @@ -341,6 +341,57 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.name = row[2]; + entry.ui = row[3]; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7]; + entry.flag = atoi(row[8]); + entry.target = row[9]; + entry.bug = row[10]; + entry.date = row[11]; + entry.status = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BUGS_REPOSITORY_H diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h index 03f3a8946..3c3d85d9b 100644 --- a/common/repositories/buyer_repository.h +++ b/common/repositories/buyer_repository.h @@ -218,7 +218,7 @@ public: return buyer_entry; } - buyer_entry = InstanceListRepository::NewEntity(); + buyer_entry = BuyerRepository::NewEntity(); return buyer_entry; } @@ -282,6 +282,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3]; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BUYER_REPOSITORY_H diff --git a/common/repositories/char_create_combinations_repository.h b/common/repositories/char_create_combinations_repository.h index 3c4baf5d5..6d7a5eb24 100644 --- a/common/repositories/char_create_combinations_repository.h +++ b/common/repositories/char_create_combinations_repository.h @@ -214,7 +214,7 @@ public: return char_create_combinations_entry; } - char_create_combinations_entry = InstanceListRepository::NewEntity(); + char_create_combinations_entry = CharCreateCombinationsRepository::NewEntity(); return char_create_combinations_entry; } @@ -276,6 +276,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHAR_CREATE_COMBINATIONS_REPOSITORY_H diff --git a/common/repositories/char_create_point_allocations_repository.h b/common/repositories/char_create_point_allocations_repository.h index 22ec0a4ea..98889b6bd 100644 --- a/common/repositories/char_create_point_allocations_repository.h +++ b/common/repositories/char_create_point_allocations_repository.h @@ -274,7 +274,7 @@ public: return char_create_point_allocations_entry; } - char_create_point_allocations_entry = InstanceListRepository::NewEntity(); + char_create_point_allocations_entry = CharCreatePointAllocationsRepository::NewEntity(); return char_create_point_allocations_entry; } @@ -357,6 +357,59 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h index a4f0c2a92..217ab1052 100644 --- a/common/repositories/char_recipe_list_repository.h +++ b/common/repositories/char_recipe_list_repository.h @@ -200,7 +200,7 @@ public: return char_recipe_list_entry; } - char_recipe_list_entry = InstanceListRepository::NewEntity(); + char_recipe_list_entry = CharRecipeListRepository::NewEntity(); return char_recipe_list_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHAR_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/character_activities_repository.h b/common/repositories/character_activities_repository.h index 4682b655c..ce6ee6d82 100644 --- a/common/repositories/character_activities_repository.h +++ b/common/repositories/character_activities_repository.h @@ -210,7 +210,7 @@ public: return character_activities_entry; } - character_activities_entry = InstanceListRepository::NewEntity(); + character_activities_entry = CharacterActivitiesRepository::NewEntity(); return character_activities_entry; } @@ -271,6 +271,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/character_alt_currency_repository.h b/common/repositories/character_alt_currency_repository.h index 2f815ef98..cc7c8205d 100644 --- a/common/repositories/character_alt_currency_repository.h +++ b/common/repositories/character_alt_currency_repository.h @@ -200,7 +200,7 @@ public: return character_alt_currency_entry; } - character_alt_currency_entry = InstanceListRepository::NewEntity(); + character_alt_currency_entry = CharacterAltCurrencyRepository::NewEntity(); return character_alt_currency_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_ALT_CURRENCY_REPOSITORY_H diff --git a/common/repositories/character_alternate_abilities_repository.h b/common/repositories/character_alternate_abilities_repository.h index 7866330ac..b91a1572f 100644 --- a/common/repositories/character_alternate_abilities_repository.h +++ b/common/repositories/character_alternate_abilities_repository.h @@ -206,7 +206,7 @@ public: return character_alternate_abilities_entry; } - character_alternate_abilities_entry = InstanceListRepository::NewEntity(); + character_alternate_abilities_entry = CharacterAlternateAbilitiesRepository::NewEntity(); return character_alternate_abilities_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H diff --git a/common/repositories/character_auras_repository.h b/common/repositories/character_auras_repository.h index 47be33f4c..7a32f2ab4 100644 --- a/common/repositories/character_auras_repository.h +++ b/common/repositories/character_auras_repository.h @@ -200,7 +200,7 @@ public: return character_auras_entry; } - character_auras_entry = InstanceListRepository::NewEntity(); + character_auras_entry = CharacterAurasRepository::NewEntity(); return character_auras_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_AURAS_REPOSITORY_H diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index f9d9ba240..138882959 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -216,7 +216,7 @@ public: return character_bandolier_entry; } - character_bandolier_entry = InstanceListRepository::NewEntity(); + character_bandolier_entry = CharacterBandolierRepository::NewEntity(); return character_bandolier_entry; } @@ -279,6 +279,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_BANDOLIER_REPOSITORY_H diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h index 10b868cea..fd51b54a4 100644 --- a/common/repositories/character_bind_repository.h +++ b/common/repositories/character_bind_repository.h @@ -186,10 +186,10 @@ public: update_values.push_back(columns[2] + " = " + std::to_string(character_bind_entry.zone_id)); update_values.push_back(columns[3] + " = " + std::to_string(character_bind_entry.instance_id)); - update_values.push_back(columns[4] + " = '" + EscapeString(character_bind_entry.x) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(character_bind_entry.y) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(character_bind_entry.z) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(character_bind_entry.heading) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(character_bind_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(character_bind_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(character_bind_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(character_bind_entry.heading)); auto results = database.QueryDatabase( fmt::format( @@ -212,10 +212,10 @@ public: insert_values.push_back(std::to_string(character_bind_entry.zone_id)); insert_values.push_back(std::to_string(character_bind_entry.instance_id)); - insert_values.push_back("'" + EscapeString(character_bind_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_bind_entry.x)); + insert_values.push_back(std::to_string(character_bind_entry.y)); + insert_values.push_back(std::to_string(character_bind_entry.z)); + insert_values.push_back(std::to_string(character_bind_entry.heading)); auto results = database.QueryDatabase( fmt::format( @@ -230,7 +230,7 @@ public: return character_bind_entry; } - character_bind_entry = InstanceListRepository::NewEntity(); + character_bind_entry = CharacterBindRepository::NewEntity(); return character_bind_entry; } @@ -246,10 +246,10 @@ public: insert_values.push_back(std::to_string(character_bind_entry.zone_id)); insert_values.push_back(std::to_string(character_bind_entry.instance_id)); - insert_values.push_back("'" + EscapeString(character_bind_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_bind_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_bind_entry.x)); + insert_values.push_back(std::to_string(character_bind_entry.y)); + insert_values.push_back(std::to_string(character_bind_entry.z)); + insert_values.push_back(std::to_string(character_bind_entry.heading)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -298,6 +298,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_BIND_REPOSITORY_H diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index d90ae8d13..cebad8ad6 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -284,7 +284,7 @@ public: return character_buffs_entry; } - character_buffs_entry = InstanceListRepository::NewEntity(); + character_buffs_entry = CharacterBuffsRepository::NewEntity(); return character_buffs_entry; } @@ -370,6 +370,61 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4]; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_BUFFS_REPOSITORY_H diff --git a/common/repositories/character_corpse_items_repository.h b/common/repositories/character_corpse_items_repository.h index 862dfa1d7..6f26f1df4 100644 --- a/common/repositories/character_corpse_items_repository.h +++ b/common/repositories/character_corpse_items_repository.h @@ -248,7 +248,7 @@ public: return character_corpse_items_entry; } - character_corpse_items_entry = InstanceListRepository::NewEntity(); + character_corpse_items_entry = CharacterCorpseItemsRepository::NewEntity(); return character_corpse_items_entry; } @@ -322,6 +322,55 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_CORPSE_ITEMS_REPOSITORY_H diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index d2fcee9fc..7ba5f98e8 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -344,10 +344,10 @@ public: update_values.push_back(columns[2] + " = '" + EscapeString(character_corpses_entry.charname) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(character_corpses_entry.zone_id)); update_values.push_back(columns[4] + " = " + std::to_string(character_corpses_entry.instance_id)); - update_values.push_back(columns[5] + " = '" + EscapeString(character_corpses_entry.x) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(character_corpses_entry.y) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(character_corpses_entry.z) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(character_corpses_entry.heading) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(character_corpses_entry.x)); + update_values.push_back(columns[6] + " = " + std::to_string(character_corpses_entry.y)); + update_values.push_back(columns[7] + " = " + std::to_string(character_corpses_entry.z)); + update_values.push_back(columns[8] + " = " + std::to_string(character_corpses_entry.heading)); update_values.push_back(columns[9] + " = '" + EscapeString(character_corpses_entry.time_of_death) + "'"); update_values.push_back(columns[10] + " = " + std::to_string(character_corpses_entry.guild_consent_id)); update_values.push_back(columns[11] + " = " + std::to_string(character_corpses_entry.is_rezzed)); @@ -410,10 +410,10 @@ public: insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.x)); + insert_values.push_back(std::to_string(character_corpses_entry.y)); + insert_values.push_back(std::to_string(character_corpses_entry.z)); + insert_values.push_back(std::to_string(character_corpses_entry.heading)); insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); @@ -466,7 +466,7 @@ public: return character_corpses_entry; } - character_corpses_entry = InstanceListRepository::NewEntity(); + character_corpses_entry = CharacterCorpsesRepository::NewEntity(); return character_corpses_entry; } @@ -484,10 +484,10 @@ public: insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_corpses_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.x)); + insert_values.push_back(std::to_string(character_corpses_entry.y)); + insert_values.push_back(std::to_string(character_corpses_entry.z)); + insert_values.push_back(std::to_string(character_corpses_entry.heading)); insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); @@ -613,6 +613,91 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2]; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9]; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_CORPSES_REPOSITORY_H diff --git a/common/repositories/character_currency_repository.h b/common/repositories/character_currency_repository.h index caed4ec5b..934912a2f 100644 --- a/common/repositories/character_currency_repository.h +++ b/common/repositories/character_currency_repository.h @@ -286,7 +286,7 @@ public: return character_currency_entry; } - character_currency_entry = InstanceListRepository::NewEntity(); + character_currency_entry = CharacterCurrencyRepository::NewEntity(); return character_currency_entry; } @@ -373,6 +373,61 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_CURRENCY_REPOSITORY_H diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index 2d89c157b..605524bf5 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -567,10 +567,10 @@ public: update_values.push_back(columns[5] + " = '" + EscapeString(character_data_entry.suffix) + "'"); update_values.push_back(columns[6] + " = " + std::to_string(character_data_entry.zone_id)); update_values.push_back(columns[7] + " = " + std::to_string(character_data_entry.zone_instance)); - update_values.push_back(columns[8] + " = '" + EscapeString(character_data_entry.y) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(character_data_entry.x) + "'"); - update_values.push_back(columns[10] + " = '" + EscapeString(character_data_entry.z) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(character_data_entry.heading) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(character_data_entry.y)); + update_values.push_back(columns[9] + " = " + std::to_string(character_data_entry.x)); + update_values.push_back(columns[10] + " = " + std::to_string(character_data_entry.z)); + update_values.push_back(columns[11] + " = " + std::to_string(character_data_entry.heading)); update_values.push_back(columns[12] + " = " + std::to_string(character_data_entry.gender)); update_values.push_back(columns[13] + " = " + std::to_string(character_data_entry.race)); update_values.push_back(columns[14] + " = " + std::to_string(character_data_entry.class)); @@ -688,10 +688,10 @@ public: insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); insert_values.push_back(std::to_string(character_data_entry.zone_id)); insert_values.push_back(std::to_string(character_data_entry.zone_instance)); - insert_values.push_back("'" + EscapeString(character_data_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_data_entry.y)); + insert_values.push_back(std::to_string(character_data_entry.x)); + insert_values.push_back(std::to_string(character_data_entry.z)); + insert_values.push_back(std::to_string(character_data_entry.heading)); insert_values.push_back(std::to_string(character_data_entry.gender)); insert_values.push_back(std::to_string(character_data_entry.race)); insert_values.push_back(std::to_string(character_data_entry.class)); @@ -796,7 +796,7 @@ public: return character_data_entry; } - character_data_entry = InstanceListRepository::NewEntity(); + character_data_entry = CharacterDataRepository::NewEntity(); return character_data_entry; } @@ -817,10 +817,10 @@ public: insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); insert_values.push_back(std::to_string(character_data_entry.zone_id)); insert_values.push_back(std::to_string(character_data_entry.zone_instance)); - insert_values.push_back("'" + EscapeString(character_data_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.heading) + "'"); + insert_values.push_back(std::to_string(character_data_entry.y)); + insert_values.push_back(std::to_string(character_data_entry.x)); + insert_values.push_back(std::to_string(character_data_entry.z)); + insert_values.push_back(std::to_string(character_data_entry.heading)); insert_values.push_back(std::to_string(character_data_entry.gender)); insert_values.push_back(std::to_string(character_data_entry.race)); insert_values.push_back(std::to_string(character_data_entry.class)); @@ -1053,6 +1053,146 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2]; + entry.last_name = row[3]; + entry.title = row[4]; + entry.suffix = row[5]; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92]; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_DATA_REPOSITORY_H diff --git a/common/repositories/character_disciplines_repository.h b/common/repositories/character_disciplines_repository.h index bcca9c77b..cb6acbae1 100644 --- a/common/repositories/character_disciplines_repository.h +++ b/common/repositories/character_disciplines_repository.h @@ -200,7 +200,7 @@ public: return character_disciplines_entry; } - character_disciplines_entry = InstanceListRepository::NewEntity(); + character_disciplines_entry = CharacterDisciplinesRepository::NewEntity(); return character_disciplines_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_DISCIPLINES_REPOSITORY_H diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index 00cc7389c..4a087e994 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -196,7 +196,7 @@ public: return character_inspect_messages_entry; } - character_inspect_messages_entry = InstanceListRepository::NewEntity(); + character_inspect_messages_entry = CharacterInspectMessagesRepository::NewEntity(); return character_inspect_messages_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H diff --git a/common/repositories/character_item_recast_repository.h b/common/repositories/character_item_recast_repository.h index 8c12e46df..da53df165 100644 --- a/common/repositories/character_item_recast_repository.h +++ b/common/repositories/character_item_recast_repository.h @@ -200,7 +200,7 @@ public: return character_item_recast_entry; } - character_item_recast_entry = InstanceListRepository::NewEntity(); + character_item_recast_entry = CharacterItemRecastRepository::NewEntity(); return character_item_recast_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_ITEM_RECAST_REPOSITORY_H diff --git a/common/repositories/character_languages_repository.h b/common/repositories/character_languages_repository.h index c9598b908..46d01c183 100644 --- a/common/repositories/character_languages_repository.h +++ b/common/repositories/character_languages_repository.h @@ -200,7 +200,7 @@ public: return character_languages_entry; } - character_languages_entry = InstanceListRepository::NewEntity(); + character_languages_entry = CharacterLanguagesRepository::NewEntity(); return character_languages_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_LANGUAGES_REPOSITORY_H diff --git a/common/repositories/character_leadership_abilities_repository.h b/common/repositories/character_leadership_abilities_repository.h index 6a9047662..311ee5ab5 100644 --- a/common/repositories/character_leadership_abilities_repository.h +++ b/common/repositories/character_leadership_abilities_repository.h @@ -200,7 +200,7 @@ public: return character_leadership_abilities_entry; } - character_leadership_abilities_entry = InstanceListRepository::NewEntity(); + character_leadership_abilities_entry = CharacterLeadershipAbilitiesRepository::NewEntity(); return character_leadership_abilities_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H diff --git a/common/repositories/character_material_repository.h b/common/repositories/character_material_repository.h index 28d244128..179085e8f 100644 --- a/common/repositories/character_material_repository.h +++ b/common/repositories/character_material_repository.h @@ -224,7 +224,7 @@ public: return character_material_entry; } - character_material_entry = InstanceListRepository::NewEntity(); + character_material_entry = CharacterMaterialRepository::NewEntity(); return character_material_entry; } @@ -290,6 +290,51 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_MATERIAL_REPOSITORY_H diff --git a/common/repositories/character_memmed_spells_repository.h b/common/repositories/character_memmed_spells_repository.h index 515096fdf..f2c1d2925 100644 --- a/common/repositories/character_memmed_spells_repository.h +++ b/common/repositories/character_memmed_spells_repository.h @@ -200,7 +200,7 @@ public: return character_memmed_spells_entry; } - character_memmed_spells_entry = InstanceListRepository::NewEntity(); + character_memmed_spells_entry = CharacterMemmedSpellsRepository::NewEntity(); return character_memmed_spells_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_MEMMED_SPELLS_REPOSITORY_H diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h index cfa6fab9d..b5de59be9 100644 --- a/common/repositories/character_pet_buffs_repository.h +++ b/common/repositories/character_pet_buffs_repository.h @@ -246,7 +246,7 @@ public: return character_pet_buffs_entry; } - character_pet_buffs_entry = InstanceListRepository::NewEntity(); + character_pet_buffs_entry = CharacterPetBuffsRepository::NewEntity(); return character_pet_buffs_entry; } @@ -319,6 +319,55 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5]; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_PET_BUFFS_REPOSITORY_H diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index 9020ea285..9adb9b628 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -189,7 +189,7 @@ public: update_values.push_back(columns[4] + " = " + std::to_string(character_pet_info_entry.spell_id)); update_values.push_back(columns[5] + " = " + std::to_string(character_pet_info_entry.hp)); update_values.push_back(columns[6] + " = " + std::to_string(character_pet_info_entry.mana)); - update_values.push_back(columns[7] + " = '" + EscapeString(character_pet_info_entry.size) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(character_pet_info_entry.size)); auto results = database.QueryDatabase( fmt::format( @@ -215,7 +215,7 @@ public: insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); insert_values.push_back(std::to_string(character_pet_info_entry.hp)); insert_values.push_back(std::to_string(character_pet_info_entry.mana)); - insert_values.push_back("'" + EscapeString(character_pet_info_entry.size) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.size)); auto results = database.QueryDatabase( fmt::format( @@ -230,7 +230,7 @@ public: return character_pet_info_entry; } - character_pet_info_entry = InstanceListRepository::NewEntity(); + character_pet_info_entry = CharacterPetInfoRepository::NewEntity(); return character_pet_info_entry; } @@ -249,7 +249,7 @@ public: insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); insert_values.push_back(std::to_string(character_pet_info_entry.hp)); insert_values.push_back(std::to_string(character_pet_info_entry.mana)); - insert_values.push_back("'" + EscapeString(character_pet_info_entry.size) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.size)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -298,6 +298,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2]; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_PET_INFO_REPOSITORY_H diff --git a/common/repositories/character_pet_inventory_repository.h b/common/repositories/character_pet_inventory_repository.h index 65aab57a7..f75349f42 100644 --- a/common/repositories/character_pet_inventory_repository.h +++ b/common/repositories/character_pet_inventory_repository.h @@ -204,7 +204,7 @@ public: return character_pet_inventory_entry; } - character_pet_inventory_entry = InstanceListRepository::NewEntity(); + character_pet_inventory_entry = CharacterPetInventoryRepository::NewEntity(); return character_pet_inventory_entry; } @@ -263,6 +263,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_PET_INVENTORY_REPOSITORY_H diff --git a/common/repositories/character_potionbelt_repository.h b/common/repositories/character_potionbelt_repository.h index f90b11f09..7b1039baf 100644 --- a/common/repositories/character_potionbelt_repository.h +++ b/common/repositories/character_potionbelt_repository.h @@ -206,7 +206,7 @@ public: return character_potionbelt_entry; } - character_potionbelt_entry = InstanceListRepository::NewEntity(); + character_potionbelt_entry = CharacterPotionbeltRepository::NewEntity(); return character_potionbelt_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_POTIONBELT_REPOSITORY_H diff --git a/common/repositories/character_skills_repository.h b/common/repositories/character_skills_repository.h index fa260609e..3983e307b 100644 --- a/common/repositories/character_skills_repository.h +++ b/common/repositories/character_skills_repository.h @@ -200,7 +200,7 @@ public: return character_skills_entry; } - character_skills_entry = InstanceListRepository::NewEntity(); + character_skills_entry = CharacterSkillsRepository::NewEntity(); return character_skills_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_SKILLS_REPOSITORY_H diff --git a/common/repositories/character_spells_repository.h b/common/repositories/character_spells_repository.h index eeb745198..61cee3d92 100644 --- a/common/repositories/character_spells_repository.h +++ b/common/repositories/character_spells_repository.h @@ -200,7 +200,7 @@ public: return character_spells_entry; } - character_spells_entry = InstanceListRepository::NewEntity(); + character_spells_entry = CharacterSpellsRepository::NewEntity(); return character_spells_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_SPELLS_REPOSITORY_H diff --git a/common/repositories/character_tasks_repository.h b/common/repositories/character_tasks_repository.h index 2e3851415..e145b7712 100644 --- a/common/repositories/character_tasks_repository.h +++ b/common/repositories/character_tasks_repository.h @@ -212,7 +212,7 @@ public: return character_tasks_entry; } - character_tasks_entry = InstanceListRepository::NewEntity(); + character_tasks_entry = CharacterTasksRepository::NewEntity(); return character_tasks_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_TASKS_REPOSITORY_H diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h index ceab9f7b7..7e9ef2015 100644 --- a/common/repositories/character_tribute_repository.h +++ b/common/repositories/character_tribute_repository.h @@ -204,7 +204,7 @@ public: return character_tribute_entry; } - character_tribute_entry = InstanceListRepository::NewEntity(); + character_tribute_entry = CharacterTributeRepository::NewEntity(); return character_tribute_entry; } @@ -264,6 +264,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h index 6d6ce6f56..302526ecd 100644 --- a/common/repositories/chatchannels_repository.h +++ b/common/repositories/chatchannels_repository.h @@ -208,7 +208,7 @@ public: return chatchannels_entry; } - chatchannels_entry = InstanceListRepository::NewEntity(); + chatchannels_entry = ChatchannelsRepository::NewEntity(); return chatchannels_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Chatchannels entry{}; + + entry.name = row[0]; + entry.owner = row[1]; + entry.password = row[2]; + entry.minstatus = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_CHATCHANNELS_REPOSITORY_H diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h index 92914b990..2b9fb3d50 100644 --- a/common/repositories/command_settings_repository.h +++ b/common/repositories/command_settings_repository.h @@ -202,7 +202,7 @@ public: return command_settings_entry; } - command_settings_entry = InstanceListRepository::NewEntity(); + command_settings_entry = CommandSettingsRepository::NewEntity(); return command_settings_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CommandSettings entry{}; + + entry.command = row[0]; + entry.access = atoi(row[1]); + entry.aliases = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_COMMAND_SETTINGS_REPOSITORY_H diff --git a/common/repositories/completed_tasks_repository.h b/common/repositories/completed_tasks_repository.h index f05cd03cc..1d0e5169b 100644 --- a/common/repositories/completed_tasks_repository.h +++ b/common/repositories/completed_tasks_repository.h @@ -204,7 +204,7 @@ public: return completed_tasks_entry; } - completed_tasks_entry = InstanceListRepository::NewEntity(); + completed_tasks_entry = CompletedTasksRepository::NewEntity(); return completed_tasks_entry; } @@ -263,6 +263,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_COMPLETED_TASKS_REPOSITORY_H diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index 226e5449a..950111133 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -208,7 +208,7 @@ public: return data_buckets_entry; } - data_buckets_entry = InstanceListRepository::NewEntity(); + data_buckets_entry = DataBucketsRepository::NewEntity(); return data_buckets_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + entry.expires = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_DATA_BUCKETS_REPOSITORY_H diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index 6860ab990..fd7d3b8c1 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -200,7 +200,7 @@ public: return db_str_entry; } - db_str_entry = InstanceListRepository::NewEntity(); + db_str_entry = DbStrRepository::NewEntity(); return db_str_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_DB_STR_REPOSITORY_H diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h index 34fe05993..a424c02cd 100644 --- a/common/repositories/discovered_items_repository.h +++ b/common/repositories/discovered_items_repository.h @@ -208,7 +208,7 @@ public: return discovered_items_entry; } - discovered_items_entry = InstanceListRepository::NewEntity(); + discovered_items_entry = DiscoveredItemsRepository::NewEntity(); return discovered_items_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1]; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_DISCOVERED_ITEMS_REPOSITORY_H diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index 548ffb7af..34857f08a 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -280,10 +280,10 @@ public: update_values.push_back(columns[2] + " = '" + EscapeString(doors_entry.zone) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(doors_entry.version)); update_values.push_back(columns[4] + " = '" + EscapeString(doors_entry.name) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(doors_entry.pos_y) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(doors_entry.pos_x) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(doors_entry.pos_z) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(doors_entry.heading) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(doors_entry.pos_y)); + update_values.push_back(columns[6] + " = " + std::to_string(doors_entry.pos_x)); + update_values.push_back(columns[7] + " = " + std::to_string(doors_entry.pos_z)); + update_values.push_back(columns[8] + " = " + std::to_string(doors_entry.heading)); update_values.push_back(columns[9] + " = " + std::to_string(doors_entry.opentype)); update_values.push_back(columns[10] + " = " + std::to_string(doors_entry.guild)); update_values.push_back(columns[11] + " = " + std::to_string(doors_entry.lockpick)); @@ -296,14 +296,14 @@ public: update_values.push_back(columns[18] + " = " + std::to_string(doors_entry.door_param)); update_values.push_back(columns[19] + " = '" + EscapeString(doors_entry.dest_zone) + "'"); update_values.push_back(columns[20] + " = " + std::to_string(doors_entry.dest_instance)); - update_values.push_back(columns[21] + " = '" + EscapeString(doors_entry.dest_x) + "'"); - update_values.push_back(columns[22] + " = '" + EscapeString(doors_entry.dest_y) + "'"); - update_values.push_back(columns[23] + " = '" + EscapeString(doors_entry.dest_z) + "'"); - update_values.push_back(columns[24] + " = '" + EscapeString(doors_entry.dest_heading) + "'"); + update_values.push_back(columns[21] + " = " + std::to_string(doors_entry.dest_x)); + update_values.push_back(columns[22] + " = " + std::to_string(doors_entry.dest_y)); + update_values.push_back(columns[23] + " = " + std::to_string(doors_entry.dest_z)); + update_values.push_back(columns[24] + " = " + std::to_string(doors_entry.dest_heading)); update_values.push_back(columns[25] + " = " + std::to_string(doors_entry.invert_state)); update_values.push_back(columns[26] + " = " + std::to_string(doors_entry.incline)); update_values.push_back(columns[27] + " = " + std::to_string(doors_entry.size)); - update_values.push_back(columns[28] + " = '" + EscapeString(doors_entry.buffer) + "'"); + update_values.push_back(columns[28] + " = " + std::to_string(doors_entry.buffer)); update_values.push_back(columns[29] + " = " + std::to_string(doors_entry.client_version_mask)); update_values.push_back(columns[30] + " = " + std::to_string(doors_entry.is_ldon_door)); @@ -330,10 +330,10 @@ public: insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); insert_values.push_back(std::to_string(doors_entry.version)); insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_y) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_x) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_z) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.pos_y)); + insert_values.push_back(std::to_string(doors_entry.pos_x)); + insert_values.push_back(std::to_string(doors_entry.pos_z)); + insert_values.push_back(std::to_string(doors_entry.heading)); insert_values.push_back(std::to_string(doors_entry.opentype)); insert_values.push_back(std::to_string(doors_entry.guild)); insert_values.push_back(std::to_string(doors_entry.lockpick)); @@ -346,14 +346,14 @@ public: insert_values.push_back(std::to_string(doors_entry.door_param)); insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); insert_values.push_back(std::to_string(doors_entry.dest_instance)); - insert_values.push_back("'" + EscapeString(doors_entry.dest_x) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_y) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_z) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_x)); + insert_values.push_back(std::to_string(doors_entry.dest_y)); + insert_values.push_back(std::to_string(doors_entry.dest_z)); + insert_values.push_back(std::to_string(doors_entry.dest_heading)); insert_values.push_back(std::to_string(doors_entry.invert_state)); insert_values.push_back(std::to_string(doors_entry.incline)); insert_values.push_back(std::to_string(doors_entry.size)); - insert_values.push_back("'" + EscapeString(doors_entry.buffer) + "'"); + insert_values.push_back(std::to_string(doors_entry.buffer)); insert_values.push_back(std::to_string(doors_entry.client_version_mask)); insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); @@ -370,7 +370,7 @@ public: return doors_entry; } - doors_entry = InstanceListRepository::NewEntity(); + doors_entry = DoorsRepository::NewEntity(); return doors_entry; } @@ -388,10 +388,10 @@ public: insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); insert_values.push_back(std::to_string(doors_entry.version)); insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_y) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_x) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.pos_z) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.pos_y)); + insert_values.push_back(std::to_string(doors_entry.pos_x)); + insert_values.push_back(std::to_string(doors_entry.pos_z)); + insert_values.push_back(std::to_string(doors_entry.heading)); insert_values.push_back(std::to_string(doors_entry.opentype)); insert_values.push_back(std::to_string(doors_entry.guild)); insert_values.push_back(std::to_string(doors_entry.lockpick)); @@ -404,14 +404,14 @@ public: insert_values.push_back(std::to_string(doors_entry.door_param)); insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); insert_values.push_back(std::to_string(doors_entry.dest_instance)); - insert_values.push_back("'" + EscapeString(doors_entry.dest_x) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_y) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_z) + "'"); - insert_values.push_back("'" + EscapeString(doors_entry.dest_heading) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_x)); + insert_values.push_back(std::to_string(doors_entry.dest_y)); + insert_values.push_back(std::to_string(doors_entry.dest_z)); + insert_values.push_back(std::to_string(doors_entry.dest_heading)); insert_values.push_back(std::to_string(doors_entry.invert_state)); insert_values.push_back(std::to_string(doors_entry.incline)); insert_values.push_back(std::to_string(doors_entry.size)); - insert_values.push_back("'" + EscapeString(doors_entry.buffer) + "'"); + insert_values.push_back(std::to_string(doors_entry.buffer)); insert_values.push_back(std::to_string(doors_entry.client_version_mask)); insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); @@ -485,6 +485,75 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.name = row[4]; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19]; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_DOORS_REPOSITORY_H diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index a923dbe2b..5f95682ef 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -244,7 +244,7 @@ public: return eventlog_entry; } - eventlog_entry = InstanceListRepository::NewEntity(); + eventlog_entry = EventlogRepository::NewEntity(); return eventlog_entry; } @@ -317,6 +317,54 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1]; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4]; + entry.target = row[5]; + entry.time = row[6]; + entry.descriptiontype = row[7]; + entry.description = row[8]; + entry.event_nid = atoi(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_EVENTLOG_REPOSITORY_H diff --git a/common/repositories/faction_base_data_repository.h b/common/repositories/faction_base_data_repository.h index b727df0eb..22e6be2a3 100644 --- a/common/repositories/faction_base_data_repository.h +++ b/common/repositories/faction_base_data_repository.h @@ -220,7 +220,7 @@ public: return faction_base_data_entry; } - faction_base_data_entry = InstanceListRepository::NewEntity(); + faction_base_data_entry = FactionBaseDataRepository::NewEntity(); return faction_base_data_entry; } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FACTION_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 7f98b7fcb..8e1374ce1 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -208,7 +208,7 @@ public: return faction_list_mod_entry; } - faction_list_mod_entry = InstanceListRepository::NewEntity(); + faction_list_mod_entry = FactionListModRepository::NewEntity(); return faction_list_mod_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FACTION_LIST_MOD_REPOSITORY_H diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h index 772bd10ee..50c141456 100644 --- a/common/repositories/faction_list_repository.h +++ b/common/repositories/faction_list_repository.h @@ -202,7 +202,7 @@ public: return faction_list_entry; } - faction_list_entry = InstanceListRepository::NewEntity(); + faction_list_entry = FactionListRepository::NewEntity(); return faction_list_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.base = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FACTION_LIST_REPOSITORY_H diff --git a/common/repositories/faction_values_repository.h b/common/repositories/faction_values_repository.h index e21fd249c..4ed0d0449 100644 --- a/common/repositories/faction_values_repository.h +++ b/common/repositories/faction_values_repository.h @@ -206,7 +206,7 @@ public: return faction_values_entry; } - faction_values_entry = InstanceListRepository::NewEntity(); + faction_values_entry = FactionValuesRepository::NewEntity(); return faction_values_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FACTION_VALUES_REPOSITORY_H diff --git a/common/repositories/fishing_repository.h b/common/repositories/fishing_repository.h index 23e92dffc..7d07bc364 100644 --- a/common/repositories/fishing_repository.h +++ b/common/repositories/fishing_repository.h @@ -226,7 +226,7 @@ public: return fishing_entry; } - fishing_entry = InstanceListRepository::NewEntity(); + fishing_entry = FishingRepository::NewEntity(); return fishing_entry; } @@ -293,6 +293,51 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FISHING_REPOSITORY_H diff --git a/common/repositories/forage_repository.h b/common/repositories/forage_repository.h index 773a11a84..02f22d0a9 100644 --- a/common/repositories/forage_repository.h +++ b/common/repositories/forage_repository.h @@ -214,7 +214,7 @@ public: return forage_entry; } - forage_entry = InstanceListRepository::NewEntity(); + forage_entry = ForageRepository::NewEntity(); return forage_entry; } @@ -277,6 +277,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FORAGE_REPOSITORY_H diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 06d0e3cc3..55746a3f2 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -200,7 +200,7 @@ public: return friends_entry; } - friends_entry = InstanceListRepository::NewEntity(); + friends_entry = FriendsRepository::NewEntity(); return friends_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_FRIENDS_REPOSITORY_H diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index b49e44bf9..ad566baf7 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -262,7 +262,7 @@ public: return global_loot_entry; } - global_loot_entry = InstanceListRepository::NewEntity(); + global_loot_entry = GlobalLootRepository::NewEntity(); return global_loot_entry; } @@ -341,6 +341,57 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8]; + entry.class = row[9]; + entry.bodytype = row[10]; + entry.zone = row[11]; + entry.hot_zone = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GLOBAL_LOOT_REPOSITORY_H diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index 017f2d289..6c371f26d 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -200,7 +200,7 @@ public: return gm_ips_entry; } - gm_ips_entry = InstanceListRepository::NewEntity(); + gm_ips_entry = GmIpsRepository::NewEntity(); return gm_ips_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GmIps entry{}; + + entry.name = row[0]; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GM_IPS_REPOSITORY_H diff --git a/common/repositories/goallists_repository.h b/common/repositories/goallists_repository.h index 62aed3079..ee59d139f 100644 --- a/common/repositories/goallists_repository.h +++ b/common/repositories/goallists_repository.h @@ -196,7 +196,7 @@ public: return goallists_entry; } - goallists_entry = InstanceListRepository::NewEntity(); + goallists_entry = GoallistsRepository::NewEntity(); return goallists_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GOALLISTS_REPOSITORY_H diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h index 205f5bd4b..7efaee489 100644 --- a/common/repositories/graveyard_repository.h +++ b/common/repositories/graveyard_repository.h @@ -177,10 +177,10 @@ public: auto columns = Columns(); update_values.push_back(columns[1] + " = " + std::to_string(graveyard_entry.zone_id)); - update_values.push_back(columns[2] + " = '" + EscapeString(graveyard_entry.x) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(graveyard_entry.y) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(graveyard_entry.z) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(graveyard_entry.heading) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(graveyard_entry.x)); + update_values.push_back(columns[3] + " = " + std::to_string(graveyard_entry.y)); + update_values.push_back(columns[4] + " = " + std::to_string(graveyard_entry.z)); + update_values.push_back(columns[5] + " = " + std::to_string(graveyard_entry.heading)); auto results = content_db.QueryDatabase( fmt::format( @@ -202,10 +202,10 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(graveyard_entry.zone_id)); - insert_values.push_back("'" + EscapeString(graveyard_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.heading) + "'"); + insert_values.push_back(std::to_string(graveyard_entry.x)); + insert_values.push_back(std::to_string(graveyard_entry.y)); + insert_values.push_back(std::to_string(graveyard_entry.z)); + insert_values.push_back(std::to_string(graveyard_entry.heading)); auto results = content_db.QueryDatabase( fmt::format( @@ -220,7 +220,7 @@ public: return graveyard_entry; } - graveyard_entry = InstanceListRepository::NewEntity(); + graveyard_entry = GraveyardRepository::NewEntity(); return graveyard_entry; } @@ -235,10 +235,10 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(graveyard_entry.zone_id)); - insert_values.push_back("'" + EscapeString(graveyard_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(graveyard_entry.heading) + "'"); + insert_values.push_back(std::to_string(graveyard_entry.x)); + insert_values.push_back(std::to_string(graveyard_entry.y)); + insert_values.push_back(std::to_string(graveyard_entry.z)); + insert_values.push_back(std::to_string(graveyard_entry.heading)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GRAVEYARD_REPOSITORY_H diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index ad73d9261..3b2e57674 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -210,12 +210,12 @@ public: update_values.push_back(columns[1] + " = " + std::to_string(ground_spawns_entry.zoneid)); update_values.push_back(columns[2] + " = " + std::to_string(ground_spawns_entry.version)); - update_values.push_back(columns[3] + " = '" + EscapeString(ground_spawns_entry.max_x) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(ground_spawns_entry.max_y) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(ground_spawns_entry.max_z) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(ground_spawns_entry.min_x) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(ground_spawns_entry.min_y) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(ground_spawns_entry.heading) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(ground_spawns_entry.max_x)); + update_values.push_back(columns[4] + " = " + std::to_string(ground_spawns_entry.max_y)); + update_values.push_back(columns[5] + " = " + std::to_string(ground_spawns_entry.max_z)); + update_values.push_back(columns[6] + " = " + std::to_string(ground_spawns_entry.min_x)); + update_values.push_back(columns[7] + " = " + std::to_string(ground_spawns_entry.min_y)); + update_values.push_back(columns[8] + " = " + std::to_string(ground_spawns_entry.heading)); update_values.push_back(columns[9] + " = '" + EscapeString(ground_spawns_entry.name) + "'"); update_values.push_back(columns[10] + " = " + std::to_string(ground_spawns_entry.item)); update_values.push_back(columns[11] + " = " + std::to_string(ground_spawns_entry.max_allowed)); @@ -243,12 +243,12 @@ public: insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); insert_values.push_back(std::to_string(ground_spawns_entry.version)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_x) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_y) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_z) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_x) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_y) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.heading) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.heading)); insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); insert_values.push_back(std::to_string(ground_spawns_entry.item)); insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); @@ -268,7 +268,7 @@ public: return ground_spawns_entry; } - ground_spawns_entry = InstanceListRepository::NewEntity(); + ground_spawns_entry = GroundSpawnsRepository::NewEntity(); return ground_spawns_entry; } @@ -284,12 +284,12 @@ public: insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); insert_values.push_back(std::to_string(ground_spawns_entry.version)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_x) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_y) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.max_z) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_x) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.min_y) + "'"); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.heading) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.heading)); insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); insert_values.push_back(std::to_string(ground_spawns_entry.item)); insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); @@ -349,6 +349,58 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9]; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12]; + entry.respawn_timer = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GROUND_SPAWNS_REPOSITORY_H diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 84a43786d..93f50d837 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -204,7 +204,7 @@ public: return group_id_entry; } - group_id_entry = InstanceListRepository::NewEntity(); + group_id_entry = GroupIdRepository::NewEntity(); return group_id_entry; } @@ -263,6 +263,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2]; + entry.ismerc = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GROUP_ID_REPOSITORY_H diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index 39ccb6db7..55ba5da93 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -238,7 +238,7 @@ public: return group_leaders_entry; } - group_leaders_entry = InstanceListRepository::NewEntity(); + group_leaders_entry = GroupLeadersRepository::NewEntity(); return group_leaders_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1]; + entry.marknpc = row[2]; + entry.leadershipaa = row[3]; + entry.maintank = row[4]; + entry.assist = row[5]; + entry.puller = row[6]; + entry.mentoree = row[7]; + entry.mentor_percent = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GROUP_LEADERS_REPOSITORY_H diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index 0ea708820..8ee1f3c9f 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -238,7 +238,7 @@ public: return guild_members_entry; } - guild_members_entry = InstanceListRepository::NewEntity(); + guild_members_entry = GuildMembersRepository::NewEntity(); return guild_members_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7]; + entry.alt = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GUILD_MEMBERS_REPOSITORY_H diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h index a2e7c437b..53c1f4f55 100644 --- a/common/repositories/guild_ranks_repository.h +++ b/common/repositories/guild_ranks_repository.h @@ -248,7 +248,7 @@ public: return guild_ranks_entry; } - guild_ranks_entry = InstanceListRepository::NewEntity(); + guild_ranks_entry = GuildRanksRepository::NewEntity(); return guild_ranks_entry; } @@ -322,6 +322,55 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2]; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GUILD_RANKS_REPOSITORY_H diff --git a/common/repositories/guild_relations_repository.h b/common/repositories/guild_relations_repository.h index effe37b13..7d13cf972 100644 --- a/common/repositories/guild_relations_repository.h +++ b/common/repositories/guild_relations_repository.h @@ -200,7 +200,7 @@ public: return guild_relations_entry; } - guild_relations_entry = InstanceListRepository::NewEntity(); + guild_relations_entry = GuildRelationsRepository::NewEntity(); return guild_relations_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GUILD_RELATIONS_REPOSITORY_H diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index 6c0fc5234..e6e2c92f0 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -238,7 +238,7 @@ public: return guilds_entry; } - guilds_entry = InstanceListRepository::NewEntity(); + guilds_entry = GuildsRepository::NewEntity(); return guilds_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4]; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6]; + entry.channel = row[7]; + entry.url = row[8]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_GUILDS_REPOSITORY_H diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index 6c0de2022..a12fcb980 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -220,7 +220,7 @@ public: return hackers_entry; } - hackers_entry = InstanceListRepository::NewEntity(); + hackers_entry = HackersRepository::NewEntity(); return hackers_entry; } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1]; + entry.name = row[2]; + entry.hacked = row[3]; + entry.zone = row[4]; + entry.date = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_HACKERS_REPOSITORY_H diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index 7bec38213..93614a880 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -179,7 +179,7 @@ public: update_values.push_back(columns[1] + " = " + std::to_string(horses_entry.race)); update_values.push_back(columns[2] + " = " + std::to_string(horses_entry.gender)); update_values.push_back(columns[3] + " = " + std::to_string(horses_entry.texture)); - update_values.push_back(columns[4] + " = '" + EscapeString(horses_entry.mountspeed) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(horses_entry.mountspeed)); update_values.push_back(columns[5] + " = '" + EscapeString(horses_entry.notes) + "'"); auto results = content_db.QueryDatabase( @@ -204,7 +204,7 @@ public: insert_values.push_back(std::to_string(horses_entry.race)); insert_values.push_back(std::to_string(horses_entry.gender)); insert_values.push_back(std::to_string(horses_entry.texture)); - insert_values.push_back("'" + EscapeString(horses_entry.mountspeed) + "'"); + insert_values.push_back(std::to_string(horses_entry.mountspeed)); insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); auto results = content_db.QueryDatabase( @@ -220,7 +220,7 @@ public: return horses_entry; } - horses_entry = InstanceListRepository::NewEntity(); + horses_entry = HorsesRepository::NewEntity(); return horses_entry; } @@ -237,7 +237,7 @@ public: insert_values.push_back(std::to_string(horses_entry.race)); insert_values.push_back(std::to_string(horses_entry.gender)); insert_values.push_back(std::to_string(horses_entry.texture)); - insert_values.push_back("'" + EscapeString(horses_entry.mountspeed) + "'"); + insert_values.push_back(std::to_string(horses_entry.mountspeed)); insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Horses entry{}; + + entry.filename = row[0]; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_HORSES_REPOSITORY_H diff --git a/common/repositories/instance_list_player_repository.h b/common/repositories/instance_list_player_repository.h index 811ae3a8d..1adde4943 100644 --- a/common/repositories/instance_list_player_repository.h +++ b/common/repositories/instance_list_player_repository.h @@ -196,7 +196,7 @@ public: return instance_list_player_entry; } - instance_list_player_entry = InstanceListRepository::NewEntity(); + instance_list_player_entry = InstanceListPlayerRepository::NewEntity(); return instance_list_player_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_INSTANCE_LIST_PLAYER_REPOSITORY_H diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index cc2c113a3..763856653 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -293,6 +293,51 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_INSTANCE_LIST_REPOSITORY_H diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index d2f8f0f00..18964010a 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -278,7 +278,7 @@ public: return inventory_entry; } - inventory_entry = InstanceListRepository::NewEntity(); + inventory_entry = InventoryRepository::NewEntity(); return inventory_entry; } @@ -362,6 +362,60 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12]; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_INVENTORY_REPOSITORY_H diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index dc9adfb63..670576616 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -282,7 +282,7 @@ public: return inventory_snapshots_entry; } - inventory_snapshots_entry = InstanceListRepository::NewEntity(); + inventory_snapshots_entry = InventorySnapshotsRepository::NewEntity(); return inventory_snapshots_entry; } @@ -367,6 +367,61 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13]; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_INVENTORY_SNAPSHOTS_REPOSITORY_H diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index 75ba5b658..544cb958b 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -202,7 +202,7 @@ public: return ip_exemptions_entry; } - ip_exemptions_entry = InstanceListRepository::NewEntity(); + ip_exemptions_entry = IpExemptionsRepository::NewEntity(); return ip_exemptions_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1]; + entry.exemption_amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_IP_EXEMPTIONS_REPOSITORY_H diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index 56c717101..f16427c95 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -220,7 +220,7 @@ public: return item_tick_entry; } - item_tick_entry = InstanceListRepository::NewEntity(); + item_tick_entry = ItemTickRepository::NewEntity(); return item_tick_entry; } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4]; + entry.it_bagslot = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ITEM_TICK_REPOSITORY_H diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index b688f0dcd..395fc3a4d 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -1398,7 +1398,7 @@ public: update_values.push_back(columns[104] + " = " + std::to_string(items_entry.reclevel)); update_values.push_back(columns[105] + " = " + std::to_string(items_entry.recskill)); update_values.push_back(columns[106] + " = " + std::to_string(items_entry.reqlevel)); - update_values.push_back(columns[107] + " = '" + EscapeString(items_entry.sellrate) + "'"); + update_values.push_back(columns[107] + " = " + std::to_string(items_entry.sellrate)); update_values.push_back(columns[108] + " = " + std::to_string(items_entry.shielding)); update_values.push_back(columns[109] + " = " + std::to_string(items_entry.size)); update_values.push_back(columns[110] + " = " + std::to_string(items_entry.skillmodtype)); @@ -1702,7 +1702,7 @@ public: insert_values.push_back(std::to_string(items_entry.reclevel)); insert_values.push_back(std::to_string(items_entry.recskill)); insert_values.push_back(std::to_string(items_entry.reqlevel)); - insert_values.push_back("'" + EscapeString(items_entry.sellrate) + "'"); + insert_values.push_back(std::to_string(items_entry.sellrate)); insert_values.push_back(std::to_string(items_entry.shielding)); insert_values.push_back(std::to_string(items_entry.size)); insert_values.push_back(std::to_string(items_entry.skillmodtype)); @@ -1894,7 +1894,7 @@ public: return items_entry; } - items_entry = InstanceListRepository::NewEntity(); + items_entry = ItemsRepository::NewEntity(); return items_entry; } @@ -2014,7 +2014,7 @@ public: insert_values.push_back(std::to_string(items_entry.reclevel)); insert_values.push_back(std::to_string(items_entry.recskill)); insert_values.push_back(std::to_string(items_entry.reqlevel)); - insert_values.push_back("'" + EscapeString(items_entry.sellrate) + "'"); + insert_values.push_back(std::to_string(items_entry.sellrate)); insert_values.push_back(std::to_string(items_entry.shielding)); insert_values.push_back(std::to_string(items_entry.size)); insert_values.push_back(std::to_string(items_entry.skillmodtype)); @@ -2517,6 +2517,329 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2]; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42]; + entry.charmfileid = row[43]; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46]; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71]; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80]; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87]; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134]; + entry.comment = row[135]; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143]; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164]; + entry.verified = row[165]; + entry.serialization = row[166]; + entry.source = row[167]; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169]; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183]; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185]; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191]; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198]; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205]; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212]; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220]; + entry.procname = row[221]; + entry.wornname = row[222]; + entry.focusname = row[223]; + entry.scrollname = row[224]; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243]; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258]; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ITEMS_REPOSITORY_H diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h index aa82afbc9..2471bd061 100644 --- a/common/repositories/launcher_repository.h +++ b/common/repositories/launcher_repository.h @@ -196,7 +196,7 @@ public: return launcher_entry; } - launcher_entry = InstanceListRepository::NewEntity(); + launcher_entry = LauncherRepository::NewEntity(); return launcher_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Launcher entry{}; + + entry.name = row[0]; + entry.dynamics = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LAUNCHER_REPOSITORY_H diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h index a8af8fe50..225a12226 100644 --- a/common/repositories/launcher_zones_repository.h +++ b/common/repositories/launcher_zones_repository.h @@ -200,7 +200,7 @@ public: return launcher_zones_entry; } - launcher_zones_entry = InstanceListRepository::NewEntity(); + launcher_zones_entry = LauncherZonesRepository::NewEntity(); return launcher_zones_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LauncherZones entry{}; + + entry.launcher = row[0]; + entry.zone = row[1]; + entry.port = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LAUNCHER_ZONES_REPOSITORY_H diff --git a/common/repositories/ldon_trap_entries_repository.h b/common/repositories/ldon_trap_entries_repository.h index c4912fe17..edcca50be 100644 --- a/common/repositories/ldon_trap_entries_repository.h +++ b/common/repositories/ldon_trap_entries_repository.h @@ -196,7 +196,7 @@ public: return ldon_trap_entries_entry; } - ldon_trap_entries_entry = InstanceListRepository::NewEntity(); + ldon_trap_entries_entry = LdonTrapEntriesRepository::NewEntity(); return ldon_trap_entries_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LDON_TRAP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/ldon_trap_templates_repository.h b/common/repositories/ldon_trap_templates_repository.h index 8033fb684..a2610f5bd 100644 --- a/common/repositories/ldon_trap_templates_repository.h +++ b/common/repositories/ldon_trap_templates_repository.h @@ -214,7 +214,7 @@ public: return ldon_trap_templates_entry; } - ldon_trap_templates_entry = InstanceListRepository::NewEntity(); + ldon_trap_templates_entry = LdonTrapTemplatesRepository::NewEntity(); return ldon_trap_templates_entry; } @@ -277,6 +277,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LDON_TRAP_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h index bce2eda13..8ca1956fe 100644 --- a/common/repositories/level_exp_mods_repository.h +++ b/common/repositories/level_exp_mods_repository.h @@ -164,8 +164,8 @@ public: auto columns = Columns(); - update_values.push_back(columns[1] + " = '" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + update_values.push_back(columns[1] + " = " + std::to_string(level_exp_mods_entry.exp_mod)); + update_values.push_back(columns[2] + " = " + std::to_string(level_exp_mods_entry.aa_exp_mod)); auto results = database.QueryDatabase( fmt::format( @@ -186,8 +186,8 @@ public: { std::vector insert_values; - insert_values.push_back("'" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); - insert_values.push_back("'" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); + insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); auto results = database.QueryDatabase( fmt::format( @@ -202,7 +202,7 @@ public: return level_exp_mods_entry; } - level_exp_mods_entry = InstanceListRepository::NewEntity(); + level_exp_mods_entry = LevelExpModsRepository::NewEntity(); return level_exp_mods_entry; } @@ -216,8 +216,8 @@ public: for (auto &level_exp_mods_entry: level_exp_mods_entries) { std::vector insert_values; - insert_values.push_back("'" + EscapeString(level_exp_mods_entry.exp_mod) + "'"); - insert_values.push_back("'" + EscapeString(level_exp_mods_entry.aa_exp_mod) + "'"); + insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); + insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LEVEL_EXP_MODS_REPOSITORY_H diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index 3a129cfdb..ffc987c50 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -236,7 +236,7 @@ public: return lfguild_entry; } - lfguild_entry = InstanceListRepository::NewEntity(); + lfguild_entry = LfguildRepository::NewEntity(); return lfguild_entry; } @@ -306,6 +306,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1]; + entry.comment = row[2]; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LFGUILD_REPOSITORY_H diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index 19ad77ab7..3f35a9add 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -238,7 +238,7 @@ public: return login_accounts_entry; } - login_accounts_entry = InstanceListRepository::NewEntity(); + login_accounts_entry = LoginAccountsRepository::NewEntity(); return login_accounts_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.account_email = row[3]; + entry.source_loginserver = row[4]; + entry.last_ip_address = row[5]; + entry.last_login_date = row[6]; + entry.created_at = row[7]; + entry.updated_at = row[8]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGIN_ACCOUNTS_REPOSITORY_H diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index 8a6cd454e..8c64eb69d 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -220,7 +220,7 @@ public: return login_api_tokens_entry; } - login_api_tokens_entry = InstanceListRepository::NewEntity(); + login_api_tokens_entry = LoginApiTokensRepository::NewEntity(); return login_api_tokens_entry; } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1]; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4]; + entry.updated_at = row[5]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGIN_API_TOKENS_REPOSITORY_H diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index 21c4f9e66..92eccc7cb 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -232,7 +232,7 @@ public: return login_server_admins_entry; } - login_server_admins_entry = InstanceListRepository::NewEntity(); + login_server_admins_entry = LoginServerAdminsRepository::NewEntity(); return login_server_admins_entry; } @@ -301,6 +301,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1]; + entry.account_password = row[2]; + entry.first_name = row[3]; + entry.last_name = row[4]; + entry.email = row[5]; + entry.registration_date = row[6]; + entry.registration_ip_address = row[7]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGIN_SERVER_ADMINS_REPOSITORY_H diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index e328109ca..f844ce5ec 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -196,7 +196,7 @@ public: return login_server_list_types_entry; } - login_server_list_types_entry = InstanceListRepository::NewEntity(); + login_server_list_types_entry = LoginServerListTypesRepository::NewEntity(); return login_server_list_types_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index e2d42a36e..1aa2e40ef 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -244,7 +244,7 @@ public: return login_world_servers_entry; } - login_world_servers_entry = InstanceListRepository::NewEntity(); + login_world_servers_entry = LoginWorldServersRepository::NewEntity(); return login_world_servers_entry; } @@ -317,6 +317,54 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1]; + entry.short_name = row[2]; + entry.tag_description = row[3]; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5]; + entry.last_ip_address = row[6]; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGIN_WORLD_SERVERS_REPOSITORY_H diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index c785c663a..2f7c5d089 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -214,7 +214,7 @@ public: return logsys_categories_entry; } - logsys_categories_entry = InstanceListRepository::NewEntity(); + logsys_categories_entry = LogsysCategoriesRepository::NewEntity(); return logsys_categories_entry; } @@ -277,6 +277,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1]; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOGSYS_CATEGORIES_REPOSITORY_H diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h index 73e97c978..07bbfdbca 100644 --- a/common/repositories/lootdrop_entries_repository.h +++ b/common/repositories/lootdrop_entries_repository.h @@ -190,8 +190,8 @@ public: update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entries_entry.item_charges)); update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); - update_values.push_back(columns[4] + " = '" + EscapeString(lootdrop_entries_entry.chance) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(lootdrop_entries_entry.chance)); + update_values.push_back(columns[5] + " = " + std::to_string(lootdrop_entries_entry.disabled_chance)); update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.minlevel)); update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.maxlevel)); update_values.push_back(columns[8] + " = " + std::to_string(lootdrop_entries_entry.multiplier)); @@ -217,8 +217,8 @@ public: insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); - insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.chance) + "'"); - insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); @@ -236,7 +236,7 @@ public: return lootdrop_entries_entry; } - lootdrop_entries_entry = InstanceListRepository::NewEntity(); + lootdrop_entries_entry = LootdropEntriesRepository::NewEntity(); return lootdrop_entries_entry; } @@ -252,8 +252,8 @@ public: insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); - insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.chance) + "'"); - insert_values.push_back("'" + EscapeString(lootdrop_entries_entry.disabled_chance) + "'"); + insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); @@ -306,6 +306,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOOTDROP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h index fd165c019..45069fa56 100644 --- a/common/repositories/lootdrop_repository.h +++ b/common/repositories/lootdrop_repository.h @@ -196,7 +196,7 @@ public: return lootdrop_entry; } - lootdrop_entry = InstanceListRepository::NewEntity(); + lootdrop_entry = LootdropRepository::NewEntity(); return lootdrop_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOOTDROP_REPOSITORY_H diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h index f648f2142..68b6bfa2c 100644 --- a/common/repositories/loottable_entries_repository.h +++ b/common/repositories/loottable_entries_repository.h @@ -179,7 +179,7 @@ public: update_values.push_back(columns[2] + " = " + std::to_string(loottable_entries_entry.multiplier)); update_values.push_back(columns[3] + " = " + std::to_string(loottable_entries_entry.droplimit)); update_values.push_back(columns[4] + " = " + std::to_string(loottable_entries_entry.mindrop)); - update_values.push_back(columns[5] + " = '" + EscapeString(loottable_entries_entry.probability) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(loottable_entries_entry.probability)); auto results = content_db.QueryDatabase( fmt::format( @@ -203,7 +203,7 @@ public: insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); - insert_values.push_back("'" + EscapeString(loottable_entries_entry.probability) + "'"); + insert_values.push_back(std::to_string(loottable_entries_entry.probability)); auto results = content_db.QueryDatabase( fmt::format( @@ -218,7 +218,7 @@ public: return loottable_entries_entry; } - loottable_entries_entry = InstanceListRepository::NewEntity(); + loottable_entries_entry = LoottableEntriesRepository::NewEntity(); return loottable_entries_entry; } @@ -235,7 +235,7 @@ public: insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); - insert_values.push_back("'" + EscapeString(loottable_entries_entry.probability) + "'"); + insert_values.push_back(std::to_string(loottable_entries_entry.probability)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -282,6 +282,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOOTTABLE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h index 31fc0ab99..4f87c30b0 100644 --- a/common/repositories/loottable_repository.h +++ b/common/repositories/loottable_repository.h @@ -220,7 +220,7 @@ public: return loottable_entry; } - loottable_entry = InstanceListRepository::NewEntity(); + loottable_entry = LoottableRepository::NewEntity(); return loottable_entry; } @@ -285,6 +285,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_LOOTTABLE_REPOSITORY_H diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index 13a4e83d8..090d24900 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -232,7 +232,7 @@ public: return mail_entry; } - mail_entry = InstanceListRepository::NewEntity(); + mail_entry = MailRepository::NewEntity(); return mail_entry; } @@ -301,6 +301,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3]; + entry.subject = row[4]; + entry.body = row[5]; + entry.to = row[6]; + entry.status = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_MAIL_REPOSITORY_H diff --git a/common/repositories/merchantlist_repository.h b/common/repositories/merchantlist_repository.h index a0600e926..7ebb68664 100644 --- a/common/repositories/merchantlist_repository.h +++ b/common/repositories/merchantlist_repository.h @@ -230,7 +230,7 @@ public: return merchantlist_entry; } - merchantlist_entry = InstanceListRepository::NewEntity(); + merchantlist_entry = MerchantlistRepository::NewEntity(); return merchantlist_entry; } @@ -298,6 +298,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_MERCHANTLIST_REPOSITORY_H diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h index fc6820318..c4d560ee0 100644 --- a/common/repositories/merchantlist_temp_repository.h +++ b/common/repositories/merchantlist_temp_repository.h @@ -206,7 +206,7 @@ public: return merchantlist_temp_entry; } - merchantlist_temp_entry = InstanceListRepository::NewEntity(); + merchantlist_temp_entry = MerchantlistTempRepository::NewEntity(); return merchantlist_temp_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_MERCHANTLIST_TEMP_REPOSITORY_H diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h index 35bb2db62..f1190e398 100644 --- a/common/repositories/name_filter_repository.h +++ b/common/repositories/name_filter_repository.h @@ -196,7 +196,7 @@ public: return name_filter_entry; } - name_filter_entry = InstanceListRepository::NewEntity(); + name_filter_entry = NameFilterRepository::NewEntity(); return name_filter_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NAME_FILTER_REPOSITORY_H diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 14a6df2b0..7e0da33dc 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -214,7 +214,7 @@ public: return npc_emotes_entry; } - npc_emotes_entry = InstanceListRepository::NewEntity(); + npc_emotes_entry = NpcEmotesRepository::NewEntity(); return npc_emotes_entry; } @@ -277,6 +277,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_EMOTES_REPOSITORY_H diff --git a/common/repositories/npc_faction_entries_repository.h b/common/repositories/npc_faction_entries_repository.h index 633444b7c..24a9bc4d8 100644 --- a/common/repositories/npc_faction_entries_repository.h +++ b/common/repositories/npc_faction_entries_repository.h @@ -212,7 +212,7 @@ public: return npc_faction_entries_entry; } - npc_faction_entries_entry = InstanceListRepository::NewEntity(); + npc_faction_entries_entry = NpcFactionEntriesRepository::NewEntity(); return npc_faction_entries_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_FACTION_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index a983c87dd..fec72a00a 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -208,7 +208,7 @@ public: return npc_faction_entry; } - npc_faction_entry = InstanceListRepository::NewEntity(); + npc_faction_entry = NpcFactionRepository::NewEntity(); return npc_faction_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_FACTION_REPOSITORY_H diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index a9485d79e..1d3571589 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -350,7 +350,7 @@ public: return npc_scale_global_base_entry; } - npc_scale_global_base_entry = InstanceListRepository::NewEntity(); + npc_scale_global_base_entry = NpcScaleGlobalBaseRepository::NewEntity(); return npc_scale_global_base_entry; } @@ -458,6 +458,72 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H diff --git a/common/repositories/npc_spells_effects_entries_repository.h b/common/repositories/npc_spells_effects_entries_repository.h index c02265f57..04a1b0e79 100644 --- a/common/repositories/npc_spells_effects_entries_repository.h +++ b/common/repositories/npc_spells_effects_entries_repository.h @@ -232,7 +232,7 @@ public: return npc_spells_effects_entries_entry; } - npc_spells_effects_entries_entry = InstanceListRepository::NewEntity(); + npc_spells_effects_entries_entry = NpcSpellsEffectsEntriesRepository::NewEntity(); return npc_spells_effects_entries_entry; } @@ -301,6 +301,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index f0ce4ed0b..8f4908175 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -202,7 +202,7 @@ public: return npc_spells_effects_entry; } - npc_spells_effects_entry = InstanceListRepository::NewEntity(); + npc_spells_effects_entry = NpcSpellsEffectsRepository::NewEntity(); return npc_spells_effects_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_SPELLS_EFFECTS_REPOSITORY_H diff --git a/common/repositories/npc_spells_entries_repository.h b/common/repositories/npc_spells_entries_repository.h index d34913075..fdfd76bd1 100644 --- a/common/repositories/npc_spells_entries_repository.h +++ b/common/repositories/npc_spells_entries_repository.h @@ -256,7 +256,7 @@ public: return npc_spells_entries_entry; } - npc_spells_entries_entry = InstanceListRepository::NewEntity(); + npc_spells_entries_entry = NpcSpellsEntriesRepository::NewEntity(); return npc_spells_entries_entry; } @@ -333,6 +333,56 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_SPELLS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index d0c4e7c22..ce9e56237 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -310,7 +310,7 @@ public: return npc_spells_entry; } - npc_spells_entry = InstanceListRepository::NewEntity(); + npc_spells_entry = NpcSpellsRepository::NewEntity(); return npc_spells_entry; } @@ -405,6 +405,65 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_SPELLS_REPOSITORY_H diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index 47734a048..b7c2a58ff 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -652,7 +652,7 @@ public: update_values.push_back(columns[10] + " = " + std::to_string(npc_types_entry.texture)); update_values.push_back(columns[11] + " = " + std::to_string(npc_types_entry.helmtexture)); update_values.push_back(columns[12] + " = " + std::to_string(npc_types_entry.herosforgemodel)); - update_values.push_back(columns[13] + " = '" + EscapeString(npc_types_entry.size) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(npc_types_entry.size)); update_values.push_back(columns[14] + " = " + std::to_string(npc_types_entry.hp_regen_rate)); update_values.push_back(columns[15] + " = " + std::to_string(npc_types_entry.mana_regen_rate)); update_values.push_back(columns[16] + " = " + std::to_string(npc_types_entry.loottable_id)); @@ -690,7 +690,7 @@ public: update_values.push_back(columns[48] + " = " + std::to_string(npc_types_entry.prim_melee_type)); update_values.push_back(columns[49] + " = " + std::to_string(npc_types_entry.sec_melee_type)); update_values.push_back(columns[50] + " = " + std::to_string(npc_types_entry.ranged_type)); - update_values.push_back(columns[51] + " = '" + EscapeString(npc_types_entry.runspeed) + "'"); + update_values.push_back(columns[51] + " = " + std::to_string(npc_types_entry.runspeed)); update_values.push_back(columns[52] + " = " + std::to_string(npc_types_entry.MR)); update_values.push_back(columns[53] + " = " + std::to_string(npc_types_entry.CR)); update_values.push_back(columns[54] + " = " + std::to_string(npc_types_entry.DR)); @@ -704,7 +704,7 @@ public: update_values.push_back(columns[62] + " = " + std::to_string(npc_types_entry.AC)); update_values.push_back(columns[63] + " = " + std::to_string(npc_types_entry.npc_aggro)); update_values.push_back(columns[64] + " = " + std::to_string(npc_types_entry.spawn_limit)); - update_values.push_back(columns[65] + " = '" + EscapeString(npc_types_entry.attack_speed) + "'"); + update_values.push_back(columns[65] + " = " + std::to_string(npc_types_entry.attack_speed)); update_values.push_back(columns[66] + " = " + std::to_string(npc_types_entry.attack_delay)); update_values.push_back(columns[67] + " = " + std::to_string(npc_types_entry.findable)); update_values.push_back(columns[68] + " = " + std::to_string(npc_types_entry.STR)); @@ -731,8 +731,8 @@ public: update_values.push_back(columns[89] + " = " + std::to_string(npc_types_entry.underwater)); update_values.push_back(columns[90] + " = " + std::to_string(npc_types_entry.isquest)); update_values.push_back(columns[91] + " = " + std::to_string(npc_types_entry.emoteid)); - update_values.push_back(columns[92] + " = '" + EscapeString(npc_types_entry.spellscale) + "'"); - update_values.push_back(columns[93] + " = '" + EscapeString(npc_types_entry.healscale) + "'"); + update_values.push_back(columns[92] + " = " + std::to_string(npc_types_entry.spellscale)); + update_values.push_back(columns[93] + " = " + std::to_string(npc_types_entry.healscale)); update_values.push_back(columns[94] + " = " + std::to_string(npc_types_entry.no_target_hotkey)); update_values.push_back(columns[95] + " = " + std::to_string(npc_types_entry.raid_target)); update_values.push_back(columns[96] + " = " + std::to_string(npc_types_entry.armtexture)); @@ -793,7 +793,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.texture)); insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); - insert_values.push_back("'" + EscapeString(npc_types_entry.size) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.size)); insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); @@ -831,7 +831,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); - insert_values.push_back("'" + EscapeString(npc_types_entry.runspeed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.runspeed)); insert_values.push_back(std::to_string(npc_types_entry.MR)); insert_values.push_back(std::to_string(npc_types_entry.CR)); insert_values.push_back(std::to_string(npc_types_entry.DR)); @@ -845,7 +845,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.AC)); insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); - insert_values.push_back("'" + EscapeString(npc_types_entry.attack_speed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); insert_values.push_back(std::to_string(npc_types_entry.findable)); insert_values.push_back(std::to_string(npc_types_entry.STR)); @@ -872,8 +872,8 @@ public: insert_values.push_back(std::to_string(npc_types_entry.underwater)); insert_values.push_back(std::to_string(npc_types_entry.isquest)); insert_values.push_back(std::to_string(npc_types_entry.emoteid)); - insert_values.push_back("'" + EscapeString(npc_types_entry.spellscale) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.healscale) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.spellscale)); + insert_values.push_back(std::to_string(npc_types_entry.healscale)); insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); insert_values.push_back(std::to_string(npc_types_entry.raid_target)); insert_values.push_back(std::to_string(npc_types_entry.armtexture)); @@ -916,7 +916,7 @@ public: return npc_types_entry; } - npc_types_entry = InstanceListRepository::NewEntity(); + npc_types_entry = NpcTypesRepository::NewEntity(); return npc_types_entry; } @@ -942,7 +942,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.texture)); insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); - insert_values.push_back("'" + EscapeString(npc_types_entry.size) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.size)); insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); @@ -980,7 +980,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); - insert_values.push_back("'" + EscapeString(npc_types_entry.runspeed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.runspeed)); insert_values.push_back(std::to_string(npc_types_entry.MR)); insert_values.push_back(std::to_string(npc_types_entry.CR)); insert_values.push_back(std::to_string(npc_types_entry.DR)); @@ -994,7 +994,7 @@ public: insert_values.push_back(std::to_string(npc_types_entry.AC)); insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); - insert_values.push_back("'" + EscapeString(npc_types_entry.attack_speed) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); insert_values.push_back(std::to_string(npc_types_entry.findable)); insert_values.push_back(std::to_string(npc_types_entry.STR)); @@ -1021,8 +1021,8 @@ public: insert_values.push_back(std::to_string(npc_types_entry.underwater)); insert_values.push_back(std::to_string(npc_types_entry.isquest)); insert_values.push_back(std::to_string(npc_types_entry.emoteid)); - insert_values.push_back("'" + EscapeString(npc_types_entry.spellscale) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.healscale) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.spellscale)); + insert_values.push_back(std::to_string(npc_types_entry.healscale)); insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); insert_values.push_back(std::to_string(npc_types_entry.raid_target)); insert_values.push_back(std::to_string(npc_types_entry.armtexture)); @@ -1213,6 +1213,166 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.lastname = row[2]; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27]; + entry.special_abilities = row[28]; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47]; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_TYPES_REPOSITORY_H diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 45471656d..311586c1d 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -358,7 +358,7 @@ public: return npc_types_tint_entry; } - npc_types_tint_entry = InstanceListRepository::NewEntity(); + npc_types_tint_entry = NpcTypesTintRepository::NewEntity(); return npc_types_tint_entry; } @@ -469,6 +469,73 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1]; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_NPC_TYPES_TINT_REPOSITORY_H diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index a51b90b50..2c26f1b2f 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -254,7 +254,7 @@ public: return object_contents_entry; } - object_contents_entry = InstanceListRepository::NewEntity(); + object_contents_entry = ObjectContentsRepository::NewEntity(); return object_contents_entry; } @@ -330,6 +330,56 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5]; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_OBJECT_CONTENTS_REPOSITORY_H diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index ec9749c9a..87137dbd5 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -258,10 +258,10 @@ public: update_values.push_back(columns[1] + " = " + std::to_string(object_entry.zoneid)); update_values.push_back(columns[2] + " = " + std::to_string(object_entry.version)); - update_values.push_back(columns[3] + " = '" + EscapeString(object_entry.xpos) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(object_entry.ypos) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(object_entry.zpos) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(object_entry.heading) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(object_entry.xpos)); + update_values.push_back(columns[4] + " = " + std::to_string(object_entry.ypos)); + update_values.push_back(columns[5] + " = " + std::to_string(object_entry.zpos)); + update_values.push_back(columns[6] + " = " + std::to_string(object_entry.heading)); update_values.push_back(columns[7] + " = " + std::to_string(object_entry.itemid)); update_values.push_back(columns[8] + " = " + std::to_string(object_entry.charges)); update_values.push_back(columns[9] + " = '" + EscapeString(object_entry.objectname) + "'"); @@ -277,9 +277,9 @@ public: update_values.push_back(columns[19] + " = " + std::to_string(object_entry.unknown72)); update_values.push_back(columns[20] + " = " + std::to_string(object_entry.unknown76)); update_values.push_back(columns[21] + " = " + std::to_string(object_entry.unknown84)); - update_values.push_back(columns[22] + " = '" + EscapeString(object_entry.size) + "'"); - update_values.push_back(columns[23] + " = '" + EscapeString(object_entry.tilt_x) + "'"); - update_values.push_back(columns[24] + " = '" + EscapeString(object_entry.tilt_y) + "'"); + update_values.push_back(columns[22] + " = " + std::to_string(object_entry.size)); + update_values.push_back(columns[23] + " = " + std::to_string(object_entry.tilt_x)); + update_values.push_back(columns[24] + " = " + std::to_string(object_entry.tilt_y)); update_values.push_back(columns[25] + " = '" + EscapeString(object_entry.display_name) + "'"); auto results = content_db.QueryDatabase( @@ -303,10 +303,10 @@ public: insert_values.push_back(std::to_string(object_entry.zoneid)); insert_values.push_back(std::to_string(object_entry.version)); - insert_values.push_back("'" + EscapeString(object_entry.xpos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.ypos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.zpos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.heading) + "'"); + insert_values.push_back(std::to_string(object_entry.xpos)); + insert_values.push_back(std::to_string(object_entry.ypos)); + insert_values.push_back(std::to_string(object_entry.zpos)); + insert_values.push_back(std::to_string(object_entry.heading)); insert_values.push_back(std::to_string(object_entry.itemid)); insert_values.push_back(std::to_string(object_entry.charges)); insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); @@ -322,9 +322,9 @@ public: insert_values.push_back(std::to_string(object_entry.unknown72)); insert_values.push_back(std::to_string(object_entry.unknown76)); insert_values.push_back(std::to_string(object_entry.unknown84)); - insert_values.push_back("'" + EscapeString(object_entry.size) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.tilt_x) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.tilt_y) + "'"); + insert_values.push_back(std::to_string(object_entry.size)); + insert_values.push_back(std::to_string(object_entry.tilt_x)); + insert_values.push_back(std::to_string(object_entry.tilt_y)); insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); auto results = content_db.QueryDatabase( @@ -340,7 +340,7 @@ public: return object_entry; } - object_entry = InstanceListRepository::NewEntity(); + object_entry = ObjectRepository::NewEntity(); return object_entry; } @@ -356,10 +356,10 @@ public: insert_values.push_back(std::to_string(object_entry.zoneid)); insert_values.push_back(std::to_string(object_entry.version)); - insert_values.push_back("'" + EscapeString(object_entry.xpos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.ypos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.zpos) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.heading) + "'"); + insert_values.push_back(std::to_string(object_entry.xpos)); + insert_values.push_back(std::to_string(object_entry.ypos)); + insert_values.push_back(std::to_string(object_entry.zpos)); + insert_values.push_back(std::to_string(object_entry.heading)); insert_values.push_back(std::to_string(object_entry.itemid)); insert_values.push_back(std::to_string(object_entry.charges)); insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); @@ -375,9 +375,9 @@ public: insert_values.push_back(std::to_string(object_entry.unknown72)); insert_values.push_back(std::to_string(object_entry.unknown76)); insert_values.push_back(std::to_string(object_entry.unknown84)); - insert_values.push_back("'" + EscapeString(object_entry.size) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.tilt_x) + "'"); - insert_values.push_back("'" + EscapeString(object_entry.tilt_y) + "'"); + insert_values.push_back(std::to_string(object_entry.size)); + insert_values.push_back(std::to_string(object_entry.tilt_x)); + insert_values.push_back(std::to_string(object_entry.tilt_y)); insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); @@ -445,6 +445,70 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9]; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_OBJECT_REPOSITORY_H diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index de4bb5a76..ba13a315a 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -226,7 +226,7 @@ public: return perl_event_export_settings_entry; } - perl_event_export_settings_entry = InstanceListRepository::NewEntity(); + perl_event_export_settings_entry = PerlEventExportSettingsRepository::NewEntity(); return perl_event_export_settings_entry; } @@ -293,6 +293,51 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1]; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index 150aecd31..4bd262644 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -280,7 +280,7 @@ public: return petitions_entry; } - petitions_entry = InstanceListRepository::NewEntity(); + petitions_entry = PetitionsRepository::NewEntity(); return petitions_entry; } @@ -365,6 +365,60 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2]; + entry.accountname = row[3]; + entry.lastgm = row[4]; + entry.petitiontext = row[5]; + entry.gmtext = row[6]; + entry.zone = row[7]; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PETITIONS_REPOSITORY_H diff --git a/common/repositories/pets_equipmentset_entries_repository.h b/common/repositories/pets_equipmentset_entries_repository.h index 23b155de3..f073eadca 100644 --- a/common/repositories/pets_equipmentset_entries_repository.h +++ b/common/repositories/pets_equipmentset_entries_repository.h @@ -200,7 +200,7 @@ public: return pets_equipmentset_entries_entry; } - pets_equipmentset_entries_entry = InstanceListRepository::NewEntity(); + pets_equipmentset_entries_entry = PetsEquipmentsetEntriesRepository::NewEntity(); return pets_equipmentset_entries_entry; } @@ -258,6 +258,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h index e9c4a3f10..28db32734 100644 --- a/common/repositories/pets_equipmentset_repository.h +++ b/common/repositories/pets_equipmentset_repository.h @@ -202,7 +202,7 @@ public: return pets_equipmentset_entry; } - pets_equipmentset_entry = InstanceListRepository::NewEntity(); + pets_equipmentset_entry = PetsEquipmentsetRepository::NewEntity(); return pets_equipmentset_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1]; + entry.nested_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PETS_EQUIPMENTSET_REPOSITORY_H diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h index 3a5f7c7ad..56947b5d1 100644 --- a/common/repositories/pets_repository.h +++ b/common/repositories/pets_repository.h @@ -230,7 +230,7 @@ public: return pets_entry; } - pets_entry = InstanceListRepository::NewEntity(); + pets_entry = PetsRepository::NewEntity(); return pets_entry; } @@ -298,6 +298,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Pets entry{}; + + entry.type = row[0]; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PETS_REPOSITORY_H diff --git a/common/repositories/player_titlesets_repository.h b/common/repositories/player_titlesets_repository.h index 189feec6a..56ab065fd 100644 --- a/common/repositories/player_titlesets_repository.h +++ b/common/repositories/player_titlesets_repository.h @@ -202,7 +202,7 @@ public: return player_titlesets_entry; } - player_titlesets_entry = InstanceListRepository::NewEntity(); + player_titlesets_entry = PlayerTitlesetsRepository::NewEntity(); return player_titlesets_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PLAYER_TITLESETS_REPOSITORY_H diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h index 8b0bbd3ec..23ea49582 100644 --- a/common/repositories/proximities_repository.h +++ b/common/repositories/proximities_repository.h @@ -184,12 +184,12 @@ public: auto columns = Columns(); - update_values.push_back(columns[2] + " = '" + EscapeString(proximities_entry.minx) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(proximities_entry.maxx) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(proximities_entry.miny) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(proximities_entry.maxy) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(proximities_entry.minz) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(proximities_entry.maxz) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(proximities_entry.minx)); + update_values.push_back(columns[3] + " = " + std::to_string(proximities_entry.maxx)); + update_values.push_back(columns[4] + " = " + std::to_string(proximities_entry.miny)); + update_values.push_back(columns[5] + " = " + std::to_string(proximities_entry.maxy)); + update_values.push_back(columns[6] + " = " + std::to_string(proximities_entry.minz)); + update_values.push_back(columns[7] + " = " + std::to_string(proximities_entry.maxz)); auto results = content_db.QueryDatabase( fmt::format( @@ -210,12 +210,12 @@ public: { std::vector insert_values; - insert_values.push_back("'" + EscapeString(proximities_entry.minx) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxx) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.miny) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxy) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.minz) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxz) + "'"); + insert_values.push_back(std::to_string(proximities_entry.minx)); + insert_values.push_back(std::to_string(proximities_entry.maxx)); + insert_values.push_back(std::to_string(proximities_entry.miny)); + insert_values.push_back(std::to_string(proximities_entry.maxy)); + insert_values.push_back(std::to_string(proximities_entry.minz)); + insert_values.push_back(std::to_string(proximities_entry.maxz)); auto results = content_db.QueryDatabase( fmt::format( @@ -230,7 +230,7 @@ public: return proximities_entry; } - proximities_entry = InstanceListRepository::NewEntity(); + proximities_entry = ProximitiesRepository::NewEntity(); return proximities_entry; } @@ -244,12 +244,12 @@ public: for (auto &proximities_entry: proximities_entries) { std::vector insert_values; - insert_values.push_back("'" + EscapeString(proximities_entry.minx) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxx) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.miny) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxy) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.minz) + "'"); - insert_values.push_back("'" + EscapeString(proximities_entry.maxz) + "'"); + insert_values.push_back(std::to_string(proximities_entry.minx)); + insert_values.push_back(std::to_string(proximities_entry.maxx)); + insert_values.push_back(std::to_string(proximities_entry.miny)); + insert_values.push_back(std::to_string(proximities_entry.maxy)); + insert_values.push_back(std::to_string(proximities_entry.minz)); + insert_values.push_back(std::to_string(proximities_entry.maxz)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -298,6 +298,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_PROXIMITIES_REPOSITORY_H diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index b5ed67ace..60f968667 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -214,7 +214,7 @@ public: return quest_globals_entry; } - quest_globals_entry = InstanceListRepository::NewEntity(); + quest_globals_entry = QuestGlobalsRepository::NewEntity(); return quest_globals_entry; } @@ -276,6 +276,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3]; + entry.value = row[4]; + entry.expdate = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_QUEST_GLOBALS_REPOSITORY_H diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index 53357adaf..e1c78739d 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -208,7 +208,7 @@ public: return raid_details_entry; } - raid_details_entry = InstanceListRepository::NewEntity(); + raid_details_entry = RaidDetailsRepository::NewEntity(); return raid_details_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_RAID_DETAILS_REPOSITORY_H diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h index 7072d52f1..505f309d3 100644 --- a/common/repositories/raid_members_repository.h +++ b/common/repositories/raid_members_repository.h @@ -238,7 +238,7 @@ public: return raid_members_entry; } - raid_members_entry = InstanceListRepository::NewEntity(); + raid_members_entry = RaidMembersRepository::NewEntity(); return raid_members_entry; } @@ -309,6 +309,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5]; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_RAID_MEMBERS_REPOSITORY_H diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index b99caa8f6..c336ebda5 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -208,7 +208,7 @@ public: return reports_entry; } - reports_entry = InstanceListRepository::NewEntity(); + reports_entry = ReportsRepository::NewEntity(); return reports_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.reported = row[2]; + entry.reported_text = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_REPORTS_REPOSITORY_H diff --git a/common/repositories/respawn_times_repository.h b/common/repositories/respawn_times_repository.h index 2e6c8e250..4cf47bbd3 100644 --- a/common/repositories/respawn_times_repository.h +++ b/common/repositories/respawn_times_repository.h @@ -206,7 +206,7 @@ public: return respawn_times_entry; } - respawn_times_entry = InstanceListRepository::NewEntity(); + respawn_times_entry = RespawnTimesRepository::NewEntity(); return respawn_times_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_RESPAWN_TIMES_REPOSITORY_H diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h index 59b6a3102..9aea58335 100644 --- a/common/repositories/rule_sets_repository.h +++ b/common/repositories/rule_sets_repository.h @@ -196,7 +196,7 @@ public: return rule_sets_entry; } - rule_sets_entry = InstanceListRepository::NewEntity(); + rule_sets_entry = RuleSetsRepository::NewEntity(); return rule_sets_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_RULE_SETS_REPOSITORY_H diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index dcf67ba46..3e87fc53c 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -206,7 +206,7 @@ public: return rule_values_entry; } - rule_values_entry = InstanceListRepository::NewEntity(); + rule_values_entry = RuleValuesRepository::NewEntity(); return rule_values_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1]; + entry.rule_value = row[2]; + entry.notes = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_RULE_VALUES_REPOSITORY_H diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h index 0cd185bc3..2e8bb2924 100644 --- a/common/repositories/saylink_repository.h +++ b/common/repositories/saylink_repository.h @@ -196,7 +196,7 @@ public: return saylink_entry; } - saylink_entry = InstanceListRepository::NewEntity(); + saylink_entry = SaylinkRepository::NewEntity(); return saylink_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SAYLINK_REPOSITORY_H diff --git a/common/repositories/skill_caps_repository.h b/common/repositories/skill_caps_repository.h index a4129acdb..d059bc40b 100644 --- a/common/repositories/skill_caps_repository.h +++ b/common/repositories/skill_caps_repository.h @@ -208,7 +208,7 @@ public: return skill_caps_entry; } - skill_caps_entry = InstanceListRepository::NewEntity(); + skill_caps_entry = SkillCapsRepository::NewEntity(); return skill_caps_entry; } @@ -268,6 +268,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SKILL_CAPS_REPOSITORY_H diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index cf96b1f68..34ba80c28 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -215,10 +215,10 @@ public: update_values.push_back(columns[1] + " = " + std::to_string(spawn2_entry.spawngroupID)); update_values.push_back(columns[2] + " = '" + EscapeString(spawn2_entry.zone) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(spawn2_entry.version)); - update_values.push_back(columns[4] + " = '" + EscapeString(spawn2_entry.x) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(spawn2_entry.y) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(spawn2_entry.z) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(spawn2_entry.heading) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(spawn2_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(spawn2_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(spawn2_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(spawn2_entry.heading)); update_values.push_back(columns[8] + " = " + std::to_string(spawn2_entry.respawntime)); update_values.push_back(columns[9] + " = " + std::to_string(spawn2_entry.variance)); update_values.push_back(columns[10] + " = " + std::to_string(spawn2_entry.pathgrid)); @@ -249,10 +249,10 @@ public: insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); insert_values.push_back(std::to_string(spawn2_entry.version)); - insert_values.push_back("'" + EscapeString(spawn2_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.heading) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.x)); + insert_values.push_back(std::to_string(spawn2_entry.y)); + insert_values.push_back(std::to_string(spawn2_entry.z)); + insert_values.push_back(std::to_string(spawn2_entry.heading)); insert_values.push_back(std::to_string(spawn2_entry.respawntime)); insert_values.push_back(std::to_string(spawn2_entry.variance)); insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); @@ -274,7 +274,7 @@ public: return spawn2_entry; } - spawn2_entry = InstanceListRepository::NewEntity(); + spawn2_entry = Spawn2Repository::NewEntity(); return spawn2_entry; } @@ -291,10 +291,10 @@ public: insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); insert_values.push_back(std::to_string(spawn2_entry.version)); - insert_values.push_back("'" + EscapeString(spawn2_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(spawn2_entry.heading) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.x)); + insert_values.push_back(std::to_string(spawn2_entry.y)); + insert_values.push_back(std::to_string(spawn2_entry.z)); + insert_values.push_back(std::to_string(spawn2_entry.heading)); insert_values.push_back(std::to_string(spawn2_entry.respawntime)); insert_values.push_back(std::to_string(spawn2_entry.variance)); insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); @@ -357,6 +357,59 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2]; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWN2_REPOSITORY_H diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index 8a6bbbc7f..0fb3b20ca 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -204,7 +204,7 @@ public: return spawn_condition_values_entry; } - spawn_condition_values_entry = InstanceListRepository::NewEntity(); + spawn_condition_values_entry = SpawnConditionValuesRepository::NewEntity(); return spawn_condition_values_entry; } @@ -263,6 +263,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2]; + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWN_CONDITION_VALUES_REPOSITORY_H diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h index 63a8ef8e4..46c1e965d 100644 --- a/common/repositories/spawn_conditions_repository.h +++ b/common/repositories/spawn_conditions_repository.h @@ -212,7 +212,7 @@ public: return spawn_conditions_entry; } - spawn_conditions_entry = InstanceListRepository::NewEntity(); + spawn_conditions_entry = SpawnConditionsRepository::NewEntity(); return spawn_conditions_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditions entry{}; + + entry.zone = row[0]; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWN_CONDITIONS_REPOSITORY_H diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index bd03e80ec..760d71f9c 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -268,7 +268,7 @@ public: return spawn_events_entry; } - spawn_events_entry = InstanceListRepository::NewEntity(); + spawn_events_entry = SpawnEventsRepository::NewEntity(); return spawn_events_entry; } @@ -349,6 +349,58 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.cond_id = atoi(row[2]); + entry.name = row[3]; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWN_EVENTS_REPOSITORY_H diff --git a/common/repositories/spawnentry_repository.h b/common/repositories/spawnentry_repository.h index eb16601d0..fe3ca4b35 100644 --- a/common/repositories/spawnentry_repository.h +++ b/common/repositories/spawnentry_repository.h @@ -206,7 +206,7 @@ public: return spawnentry_entry; } - spawnentry_entry = InstanceListRepository::NewEntity(); + spawnentry_entry = SpawnentryRepository::NewEntity(); return spawnentry_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWNENTRY_REPOSITORY_H diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index 356ccd0ad..74133ccf4 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -206,11 +206,11 @@ public: update_values.push_back(columns[1] + " = '" + EscapeString(spawngroup_entry.name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(spawngroup_entry.spawn_limit)); - update_values.push_back(columns[3] + " = '" + EscapeString(spawngroup_entry.dist) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(spawngroup_entry.max_x) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(spawngroup_entry.min_x) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(spawngroup_entry.max_y) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(spawngroup_entry.min_y) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(spawngroup_entry.dist)); + update_values.push_back(columns[4] + " = " + std::to_string(spawngroup_entry.max_x)); + update_values.push_back(columns[5] + " = " + std::to_string(spawngroup_entry.min_x)); + update_values.push_back(columns[6] + " = " + std::to_string(spawngroup_entry.max_y)); + update_values.push_back(columns[7] + " = " + std::to_string(spawngroup_entry.min_y)); update_values.push_back(columns[8] + " = " + std::to_string(spawngroup_entry.delay)); update_values.push_back(columns[9] + " = " + std::to_string(spawngroup_entry.mindelay)); update_values.push_back(columns[10] + " = " + std::to_string(spawngroup_entry.despawn)); @@ -238,11 +238,11 @@ public: insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); - insert_values.push_back("'" + EscapeString(spawngroup_entry.dist) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.max_x) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.min_x) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.max_y) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.min_y) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.dist)); + insert_values.push_back(std::to_string(spawngroup_entry.max_x)); + insert_values.push_back(std::to_string(spawngroup_entry.min_x)); + insert_values.push_back(std::to_string(spawngroup_entry.max_y)); + insert_values.push_back(std::to_string(spawngroup_entry.min_y)); insert_values.push_back(std::to_string(spawngroup_entry.delay)); insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); insert_values.push_back(std::to_string(spawngroup_entry.despawn)); @@ -262,7 +262,7 @@ public: return spawngroup_entry; } - spawngroup_entry = InstanceListRepository::NewEntity(); + spawngroup_entry = SpawngroupRepository::NewEntity(); return spawngroup_entry; } @@ -278,11 +278,11 @@ public: insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); - insert_values.push_back("'" + EscapeString(spawngroup_entry.dist) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.max_x) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.min_x) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.max_y) + "'"); - insert_values.push_back("'" + EscapeString(spawngroup_entry.min_y) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.dist)); + insert_values.push_back(std::to_string(spawngroup_entry.max_x)); + insert_values.push_back(std::to_string(spawngroup_entry.min_x)); + insert_values.push_back(std::to_string(spawngroup_entry.max_y)); + insert_values.push_back(std::to_string(spawngroup_entry.min_y)); insert_values.push_back(std::to_string(spawngroup_entry.delay)); insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); insert_values.push_back(std::to_string(spawngroup_entry.despawn)); @@ -341,6 +341,57 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawngroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPAWNGROUP_REPOSITORY_H diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index c923234c0..1462f1ea5 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -202,7 +202,7 @@ public: return spell_buckets_entry; } - spell_buckets_entry = InstanceListRepository::NewEntity(); + spell_buckets_entry = SpellBucketsRepository::NewEntity(); return spell_buckets_entry; } @@ -261,6 +261,47 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1]; + entry.value = row[2]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPELL_BUCKETS_REPOSITORY_H diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h index 2091a6486..d94cfa052 100644 --- a/common/repositories/spell_globals_repository.h +++ b/common/repositories/spell_globals_repository.h @@ -208,7 +208,7 @@ public: return spell_globals_entry; } - spell_globals_entry = InstanceListRepository::NewEntity(); + spell_globals_entry = SpellGlobalsRepository::NewEntity(); return spell_globals_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1]; + entry.qglobal = row[2]; + entry.value = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPELL_GLOBALS_REPOSITORY_H diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index d9ff5b920..19f3f51d5 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -1326,10 +1326,10 @@ public: update_values.push_back(columns[224] + " = " + std::to_string(spells_new_entry.persistdeath)); update_values.push_back(columns[225] + " = " + std::to_string(spells_new_entry.field225)); update_values.push_back(columns[226] + " = " + std::to_string(spells_new_entry.field226)); - update_values.push_back(columns[227] + " = '" + EscapeString(spells_new_entry.min_dist) + "'"); - update_values.push_back(columns[228] + " = '" + EscapeString(spells_new_entry.min_dist_mod) + "'"); - update_values.push_back(columns[229] + " = '" + EscapeString(spells_new_entry.max_dist) + "'"); - update_values.push_back(columns[230] + " = '" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + update_values.push_back(columns[227] + " = " + std::to_string(spells_new_entry.min_dist)); + update_values.push_back(columns[228] + " = " + std::to_string(spells_new_entry.min_dist_mod)); + update_values.push_back(columns[229] + " = " + std::to_string(spells_new_entry.max_dist)); + update_values.push_back(columns[230] + " = " + std::to_string(spells_new_entry.max_dist_mod)); update_values.push_back(columns[231] + " = " + std::to_string(spells_new_entry.min_range)); update_values.push_back(columns[232] + " = " + std::to_string(spells_new_entry.field232)); update_values.push_back(columns[233] + " = " + std::to_string(spells_new_entry.field233)); @@ -1582,10 +1582,10 @@ public: insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); insert_values.push_back(std::to_string(spells_new_entry.field225)); insert_values.push_back(std::to_string(spells_new_entry.field226)); - insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist_mod) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.min_dist)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); insert_values.push_back(std::to_string(spells_new_entry.min_range)); insert_values.push_back(std::to_string(spells_new_entry.field232)); insert_values.push_back(std::to_string(spells_new_entry.field233)); @@ -1606,7 +1606,7 @@ public: return spells_new_entry; } - spells_new_entry = InstanceListRepository::NewEntity(); + spells_new_entry = SpellsNewRepository::NewEntity(); return spells_new_entry; } @@ -1846,10 +1846,10 @@ public: insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); insert_values.push_back(std::to_string(spells_new_entry.field225)); insert_values.push_back(std::to_string(spells_new_entry.field226)); - insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.min_dist_mod) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.max_dist_mod) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.min_dist)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); insert_values.push_back(std::to_string(spells_new_entry.min_range)); insert_values.push_back(std::to_string(spells_new_entry.field232)); insert_values.push_back(std::to_string(spells_new_entry.field233)); @@ -2133,6 +2133,281 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1]; + entry.player_1 = row[2]; + entry.teleport_zone = row[3]; + entry.you_cast = row[4]; + entry.other_casts = row[5]; + entry.cast_on_you = row[6]; + entry.cast_on_other = row[7]; + entry.spell_fades = row[8]; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_SPELLS_NEW_REPOSITORY_H diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h index 588f2b600..54cd27bd2 100644 --- a/common/repositories/start_zones_repository.h +++ b/common/repositories/start_zones_repository.h @@ -212,16 +212,16 @@ public: auto columns = Columns(); - update_values.push_back(columns[0] + " = '" + EscapeString(start_zones_entry.x) + "'"); - update_values.push_back(columns[1] + " = '" + EscapeString(start_zones_entry.y) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(start_zones_entry.z) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(start_zones_entry.heading) + "'"); + update_values.push_back(columns[0] + " = " + std::to_string(start_zones_entry.x)); + update_values.push_back(columns[1] + " = " + std::to_string(start_zones_entry.y)); + update_values.push_back(columns[2] + " = " + std::to_string(start_zones_entry.z)); + update_values.push_back(columns[3] + " = " + std::to_string(start_zones_entry.heading)); update_values.push_back(columns[4] + " = " + std::to_string(start_zones_entry.zone_id)); update_values.push_back(columns[5] + " = " + std::to_string(start_zones_entry.bind_id)); update_values.push_back(columns[10] + " = " + std::to_string(start_zones_entry.start_zone)); - update_values.push_back(columns[11] + " = '" + EscapeString(start_zones_entry.bind_x) + "'"); - update_values.push_back(columns[12] + " = '" + EscapeString(start_zones_entry.bind_y) + "'"); - update_values.push_back(columns[13] + " = '" + EscapeString(start_zones_entry.bind_z) + "'"); + update_values.push_back(columns[11] + " = " + std::to_string(start_zones_entry.bind_x)); + update_values.push_back(columns[12] + " = " + std::to_string(start_zones_entry.bind_y)); + update_values.push_back(columns[13] + " = " + std::to_string(start_zones_entry.bind_z)); update_values.push_back(columns[14] + " = " + std::to_string(start_zones_entry.select_rank)); auto results = content_db.QueryDatabase( @@ -243,16 +243,16 @@ public: { std::vector insert_values; - insert_values.push_back("'" + EscapeString(start_zones_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.heading) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.x)); + insert_values.push_back(std::to_string(start_zones_entry.y)); + insert_values.push_back(std::to_string(start_zones_entry.z)); + insert_values.push_back(std::to_string(start_zones_entry.heading)); insert_values.push_back(std::to_string(start_zones_entry.zone_id)); insert_values.push_back(std::to_string(start_zones_entry.bind_id)); insert_values.push_back(std::to_string(start_zones_entry.start_zone)); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_x) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_y) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_z) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.bind_x)); + insert_values.push_back(std::to_string(start_zones_entry.bind_y)); + insert_values.push_back(std::to_string(start_zones_entry.bind_z)); insert_values.push_back(std::to_string(start_zones_entry.select_rank)); auto results = content_db.QueryDatabase( @@ -268,7 +268,7 @@ public: return start_zones_entry; } - start_zones_entry = InstanceListRepository::NewEntity(); + start_zones_entry = StartZonesRepository::NewEntity(); return start_zones_entry; } @@ -282,16 +282,16 @@ public: for (auto &start_zones_entry: start_zones_entries) { std::vector insert_values; - insert_values.push_back("'" + EscapeString(start_zones_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.heading) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.x)); + insert_values.push_back(std::to_string(start_zones_entry.y)); + insert_values.push_back(std::to_string(start_zones_entry.z)); + insert_values.push_back(std::to_string(start_zones_entry.heading)); insert_values.push_back(std::to_string(start_zones_entry.zone_id)); insert_values.push_back(std::to_string(start_zones_entry.bind_id)); insert_values.push_back(std::to_string(start_zones_entry.start_zone)); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_x) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_y) + "'"); - insert_values.push_back("'" + EscapeString(start_zones_entry.bind_z) + "'"); + insert_values.push_back(std::to_string(start_zones_entry.bind_x)); + insert_values.push_back(std::to_string(start_zones_entry.bind_y)); + insert_values.push_back(std::to_string(start_zones_entry.bind_z)); insert_values.push_back(std::to_string(start_zones_entry.select_rank)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); @@ -348,6 +348,59 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_START_ZONES_REPOSITORY_H diff --git a/common/repositories/starting_items_repository.h b/common/repositories/starting_items_repository.h index 5bf069ede..d1a4cc48e 100644 --- a/common/repositories/starting_items_repository.h +++ b/common/repositories/starting_items_repository.h @@ -236,7 +236,7 @@ public: return starting_items_entry; } - starting_items_entry = InstanceListRepository::NewEntity(); + starting_items_entry = StartingItemsRepository::NewEntity(); return starting_items_entry; } @@ -306,6 +306,53 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_STARTING_ITEMS_REPOSITORY_H diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index 450175b2e..b6023162f 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -272,7 +272,7 @@ public: return task_activities_entry; } - task_activities_entry = InstanceListRepository::NewEntity(); + task_activities_entry = TaskActivitiesRepository::NewEntity(); return task_activities_entry; } @@ -354,6 +354,59 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4]; + entry.item_list = row[5]; + entry.skill_list = row[6]; + entry.spell_list = row[7]; + entry.description_override = row[8]; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13]; + entry.optional = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TASK_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index bb68b5652..8817973af 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -280,7 +280,7 @@ public: return tasks_entry; } - tasks_entry = InstanceListRepository::NewEntity(); + tasks_entry = TasksRepository::NewEntity(); return tasks_entry; } @@ -365,6 +365,60 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4]; + entry.description = row[5]; + entry.reward = row[6]; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TASKS_REPOSITORY_H diff --git a/common/repositories/tasksets_repository.h b/common/repositories/tasksets_repository.h index 4cf8ad54f..43f6ed782 100644 --- a/common/repositories/tasksets_repository.h +++ b/common/repositories/tasksets_repository.h @@ -196,7 +196,7 @@ public: return tasksets_entry; } - tasksets_entry = InstanceListRepository::NewEntity(); + tasksets_entry = TasksetsRepository::NewEntity(); return tasksets_entry; } @@ -253,6 +253,46 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TASKSETS_REPOSITORY_H diff --git a/common/repositories/template/repository.template b/common/repositories/template/repository.template index e13624359..dacc76705 100644 --- a/common/repositories/template/repository.template +++ b/common/repositories/template/repository.template @@ -191,7 +191,7 @@ public: return {{TABLE_NAME_VAR}}_entry; } - {{TABLE_NAME_VAR}}_entry = InstanceListRepository::NewEntity(); + {{TABLE_NAME_VAR}}_entry = {{TABLE_NAME_CLASS}}Repository::NewEntity(); return {{TABLE_NAME_VAR}}_entry; } @@ -247,6 +247,45 @@ public: return all_entries; } + static std::vector<{{TABLE_NAME_STRUCT}}> GetWhere(std::string where_filter) + { + std::vector<{{TABLE_NAME_STRUCT}}> all_entries; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{ALL_ENTRIES}} + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_{{TABLE_NAME_UPPER}}_REPOSITORY_H diff --git a/common/repositories/timers_repository.h b/common/repositories/timers_repository.h index a00812fed..f6734b140 100644 --- a/common/repositories/timers_repository.h +++ b/common/repositories/timers_repository.h @@ -212,7 +212,7 @@ public: return timers_entry; } - timers_entry = InstanceListRepository::NewEntity(); + timers_entry = TimersRepository::NewEntity(); return timers_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TIMERS_REPOSITORY_H diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index fcf4f8be6..c0000289f 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -268,7 +268,7 @@ public: return titles_entry; } - titles_entry = InstanceListRepository::NewEntity(); + titles_entry = TitlesRepository::NewEntity(); return titles_entry; } @@ -349,6 +349,58 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11]; + entry.suffix = row[12]; + entry.title_set = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TITLES_REPOSITORY_H diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h index ed21cee95..1b85cb55a 100644 --- a/common/repositories/trader_repository.h +++ b/common/repositories/trader_repository.h @@ -218,7 +218,7 @@ public: return trader_entry; } - trader_entry = InstanceListRepository::NewEntity(); + trader_entry = TraderRepository::NewEntity(); return trader_entry; } @@ -282,6 +282,50 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TRADER_REPOSITORY_H diff --git a/common/repositories/tradeskill_recipe_entries_repository.h b/common/repositories/tradeskill_recipe_entries_repository.h index 9545aa0fd..1e3131eb0 100644 --- a/common/repositories/tradeskill_recipe_entries_repository.h +++ b/common/repositories/tradeskill_recipe_entries_repository.h @@ -232,7 +232,7 @@ public: return tradeskill_recipe_entries_entry; } - tradeskill_recipe_entries_entry = InstanceListRepository::NewEntity(); + tradeskill_recipe_entries_entry = TradeskillRecipeEntriesRepository::NewEntity(); return tradeskill_recipe_entries_entry; } @@ -301,6 +301,52 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 45a70ab8f..3f75271f1 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -242,8 +242,8 @@ public: update_values.push_back(columns[4] + " = " + std::to_string(traps_entry.y)); update_values.push_back(columns[5] + " = " + std::to_string(traps_entry.z)); update_values.push_back(columns[6] + " = " + std::to_string(traps_entry.chance)); - update_values.push_back(columns[7] + " = '" + EscapeString(traps_entry.maxzdiff) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(traps_entry.radius) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(traps_entry.maxzdiff)); + update_values.push_back(columns[8] + " = " + std::to_string(traps_entry.radius)); update_values.push_back(columns[9] + " = " + std::to_string(traps_entry.effect)); update_values.push_back(columns[10] + " = " + std::to_string(traps_entry.effectvalue)); update_values.push_back(columns[11] + " = " + std::to_string(traps_entry.effectvalue2)); @@ -282,8 +282,8 @@ public: insert_values.push_back(std::to_string(traps_entry.y)); insert_values.push_back(std::to_string(traps_entry.z)); insert_values.push_back(std::to_string(traps_entry.chance)); - insert_values.push_back("'" + EscapeString(traps_entry.maxzdiff) + "'"); - insert_values.push_back("'" + EscapeString(traps_entry.radius) + "'"); + insert_values.push_back(std::to_string(traps_entry.maxzdiff)); + insert_values.push_back(std::to_string(traps_entry.radius)); insert_values.push_back(std::to_string(traps_entry.effect)); insert_values.push_back(std::to_string(traps_entry.effectvalue)); insert_values.push_back(std::to_string(traps_entry.effectvalue2)); @@ -310,7 +310,7 @@ public: return traps_entry; } - traps_entry = InstanceListRepository::NewEntity(); + traps_entry = TrapsRepository::NewEntity(); return traps_entry; } @@ -330,8 +330,8 @@ public: insert_values.push_back(std::to_string(traps_entry.y)); insert_values.push_back(std::to_string(traps_entry.z)); insert_values.push_back(std::to_string(traps_entry.chance)); - insert_values.push_back("'" + EscapeString(traps_entry.maxzdiff) + "'"); - insert_values.push_back("'" + EscapeString(traps_entry.radius) + "'"); + insert_values.push_back(std::to_string(traps_entry.maxzdiff)); + insert_values.push_back(std::to_string(traps_entry.radius)); insert_values.push_back(std::to_string(traps_entry.effect)); insert_values.push_back(std::to_string(traps_entry.effectvalue)); insert_values.push_back(std::to_string(traps_entry.effectvalue2)); @@ -405,6 +405,65 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12]; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TRAPS_REPOSITORY_H diff --git a/common/repositories/tribute_levels_repository.h b/common/repositories/tribute_levels_repository.h index 2021eee52..9b2501606 100644 --- a/common/repositories/tribute_levels_repository.h +++ b/common/repositories/tribute_levels_repository.h @@ -206,7 +206,7 @@ public: return tribute_levels_entry; } - tribute_levels_entry = InstanceListRepository::NewEntity(); + tribute_levels_entry = TributeLevelsRepository::NewEntity(); return tribute_levels_entry; } @@ -266,6 +266,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TRIBUTE_LEVELS_REPOSITORY_H diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index fc01a77c1..d0ef9f6de 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -212,7 +212,7 @@ public: return tributes_entry; } - tributes_entry = InstanceListRepository::NewEntity(); + tributes_entry = TributesRepository::NewEntity(); return tributes_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2]; + entry.descr = row[3]; + entry.isguild = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_TRIBUTES_REPOSITORY_H diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h index 5d7303253..2cc5de8a2 100644 --- a/common/repositories/variables_repository.h +++ b/common/repositories/variables_repository.h @@ -208,7 +208,7 @@ public: return variables_entry; } - variables_entry = InstanceListRepository::NewEntity(); + variables_entry = VariablesRepository::NewEntity(); return variables_entry; } @@ -269,6 +269,48 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Variables entry{}; + + entry.varname = row[0]; + entry.value = row[1]; + entry.information = row[2]; + entry.ts = row[3]; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_VARIABLES_REPOSITORY_H diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 18313f4ef..6e18d16b5 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -212,7 +212,7 @@ public: return veteran_reward_templates_entry; } - veteran_reward_templates_entry = InstanceListRepository::NewEntity(); + veteran_reward_templates_entry = VeteranRewardTemplatesRepository::NewEntity(); return veteran_reward_templates_entry; } @@ -274,6 +274,49 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1]; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_VETERAN_REWARD_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index 00536a94a..f76c3f777 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -223,18 +223,18 @@ public: update_values.push_back(columns[1] + " = '" + EscapeString(zone_points_entry.zone) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(zone_points_entry.version)); update_values.push_back(columns[3] + " = " + std::to_string(zone_points_entry.number)); - update_values.push_back(columns[4] + " = '" + EscapeString(zone_points_entry.y) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(zone_points_entry.x) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(zone_points_entry.z) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(zone_points_entry.heading) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(zone_points_entry.target_y) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(zone_points_entry.target_x) + "'"); - update_values.push_back(columns[10] + " = '" + EscapeString(zone_points_entry.target_z) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(zone_points_entry.target_heading) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(zone_points_entry.y)); + update_values.push_back(columns[5] + " = " + std::to_string(zone_points_entry.x)); + update_values.push_back(columns[6] + " = " + std::to_string(zone_points_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(zone_points_entry.heading)); + update_values.push_back(columns[8] + " = " + std::to_string(zone_points_entry.target_y)); + update_values.push_back(columns[9] + " = " + std::to_string(zone_points_entry.target_x)); + update_values.push_back(columns[10] + " = " + std::to_string(zone_points_entry.target_z)); + update_values.push_back(columns[11] + " = " + std::to_string(zone_points_entry.target_heading)); update_values.push_back(columns[12] + " = " + std::to_string(zone_points_entry.zoneinst)); update_values.push_back(columns[13] + " = " + std::to_string(zone_points_entry.target_zone_id)); update_values.push_back(columns[14] + " = " + std::to_string(zone_points_entry.target_instance)); - update_values.push_back(columns[15] + " = '" + EscapeString(zone_points_entry.buffer) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(zone_points_entry.buffer)); update_values.push_back(columns[16] + " = " + std::to_string(zone_points_entry.client_version_mask)); auto results = content_db.QueryDatabase( @@ -259,18 +259,18 @@ public: insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); insert_values.push_back(std::to_string(zone_points_entry.version)); insert_values.push_back(std::to_string(zone_points_entry.number)); - insert_values.push_back("'" + EscapeString(zone_points_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.heading) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_y) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_x) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_z) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_heading) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.y)); + insert_values.push_back(std::to_string(zone_points_entry.x)); + insert_values.push_back(std::to_string(zone_points_entry.z)); + insert_values.push_back(std::to_string(zone_points_entry.heading)); + insert_values.push_back(std::to_string(zone_points_entry.target_y)); + insert_values.push_back(std::to_string(zone_points_entry.target_x)); + insert_values.push_back(std::to_string(zone_points_entry.target_z)); + insert_values.push_back(std::to_string(zone_points_entry.target_heading)); insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); insert_values.push_back(std::to_string(zone_points_entry.target_instance)); - insert_values.push_back("'" + EscapeString(zone_points_entry.buffer) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.buffer)); insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); auto results = content_db.QueryDatabase( @@ -286,7 +286,7 @@ public: return zone_points_entry; } - zone_points_entry = InstanceListRepository::NewEntity(); + zone_points_entry = ZonePointsRepository::NewEntity(); return zone_points_entry; } @@ -303,18 +303,18 @@ public: insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); insert_values.push_back(std::to_string(zone_points_entry.version)); insert_values.push_back(std::to_string(zone_points_entry.number)); - insert_values.push_back("'" + EscapeString(zone_points_entry.y) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.x) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.z) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.heading) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_y) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_x) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_z) + "'"); - insert_values.push_back("'" + EscapeString(zone_points_entry.target_heading) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.y)); + insert_values.push_back(std::to_string(zone_points_entry.x)); + insert_values.push_back(std::to_string(zone_points_entry.z)); + insert_values.push_back(std::to_string(zone_points_entry.heading)); + insert_values.push_back(std::to_string(zone_points_entry.target_y)); + insert_values.push_back(std::to_string(zone_points_entry.target_x)); + insert_values.push_back(std::to_string(zone_points_entry.target_z)); + insert_values.push_back(std::to_string(zone_points_entry.target_heading)); insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); insert_values.push_back(std::to_string(zone_points_entry.target_instance)); - insert_values.push_back("'" + EscapeString(zone_points_entry.buffer) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.buffer)); insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); @@ -373,6 +373,61 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1]; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ZONE_POINTS_REPOSITORY_H diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index 0fa15cbc6..a22e67865 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -500,10 +500,10 @@ public: update_values.push_back(columns[2] + " = '" + EscapeString(zone_entry.file_name) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(zone_entry.long_name) + "'"); update_values.push_back(columns[4] + " = '" + EscapeString(zone_entry.map_file_name) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(zone_entry.safe_x) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(zone_entry.safe_y) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(zone_entry.safe_z) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(zone_entry.graveyard_id) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(zone_entry.safe_x)); + update_values.push_back(columns[6] + " = " + std::to_string(zone_entry.safe_y)); + update_values.push_back(columns[7] + " = " + std::to_string(zone_entry.safe_z)); + update_values.push_back(columns[8] + " = " + std::to_string(zone_entry.graveyard_id)); update_values.push_back(columns[9] + " = " + std::to_string(zone_entry.min_level)); update_values.push_back(columns[10] + " = " + std::to_string(zone_entry.min_status)); update_values.push_back(columns[11] + " = " + std::to_string(zone_entry.zoneidnumber)); @@ -512,40 +512,40 @@ public: update_values.push_back(columns[14] + " = " + std::to_string(zone_entry.maxclients)); update_values.push_back(columns[15] + " = " + std::to_string(zone_entry.ruleset)); update_values.push_back(columns[16] + " = '" + EscapeString(zone_entry.note) + "'"); - update_values.push_back(columns[17] + " = '" + EscapeString(zone_entry.underworld) + "'"); - update_values.push_back(columns[18] + " = '" + EscapeString(zone_entry.minclip) + "'"); - update_values.push_back(columns[19] + " = '" + EscapeString(zone_entry.maxclip) + "'"); - update_values.push_back(columns[20] + " = '" + EscapeString(zone_entry.fog_minclip) + "'"); - update_values.push_back(columns[21] + " = '" + EscapeString(zone_entry.fog_maxclip) + "'"); + update_values.push_back(columns[17] + " = " + std::to_string(zone_entry.underworld)); + update_values.push_back(columns[18] + " = " + std::to_string(zone_entry.minclip)); + update_values.push_back(columns[19] + " = " + std::to_string(zone_entry.maxclip)); + update_values.push_back(columns[20] + " = " + std::to_string(zone_entry.fog_minclip)); + update_values.push_back(columns[21] + " = " + std::to_string(zone_entry.fog_maxclip)); update_values.push_back(columns[22] + " = " + std::to_string(zone_entry.fog_blue)); update_values.push_back(columns[23] + " = " + std::to_string(zone_entry.fog_red)); update_values.push_back(columns[24] + " = " + std::to_string(zone_entry.fog_green)); update_values.push_back(columns[25] + " = " + std::to_string(zone_entry.sky)); update_values.push_back(columns[26] + " = " + std::to_string(zone_entry.ztype)); - update_values.push_back(columns[27] + " = '" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); - update_values.push_back(columns[28] + " = '" + EscapeString(zone_entry.walkspeed) + "'"); + update_values.push_back(columns[27] + " = " + std::to_string(zone_entry.zone_exp_multiplier)); + update_values.push_back(columns[28] + " = " + std::to_string(zone_entry.walkspeed)); update_values.push_back(columns[29] + " = " + std::to_string(zone_entry.time_type)); update_values.push_back(columns[30] + " = " + std::to_string(zone_entry.fog_red1)); update_values.push_back(columns[31] + " = " + std::to_string(zone_entry.fog_green1)); update_values.push_back(columns[32] + " = " + std::to_string(zone_entry.fog_blue1)); - update_values.push_back(columns[33] + " = '" + EscapeString(zone_entry.fog_minclip1) + "'"); - update_values.push_back(columns[34] + " = '" + EscapeString(zone_entry.fog_maxclip1) + "'"); + update_values.push_back(columns[33] + " = " + std::to_string(zone_entry.fog_minclip1)); + update_values.push_back(columns[34] + " = " + std::to_string(zone_entry.fog_maxclip1)); update_values.push_back(columns[35] + " = " + std::to_string(zone_entry.fog_red2)); update_values.push_back(columns[36] + " = " + std::to_string(zone_entry.fog_green2)); update_values.push_back(columns[37] + " = " + std::to_string(zone_entry.fog_blue2)); - update_values.push_back(columns[38] + " = '" + EscapeString(zone_entry.fog_minclip2) + "'"); - update_values.push_back(columns[39] + " = '" + EscapeString(zone_entry.fog_maxclip2) + "'"); + update_values.push_back(columns[38] + " = " + std::to_string(zone_entry.fog_minclip2)); + update_values.push_back(columns[39] + " = " + std::to_string(zone_entry.fog_maxclip2)); update_values.push_back(columns[40] + " = " + std::to_string(zone_entry.fog_red3)); update_values.push_back(columns[41] + " = " + std::to_string(zone_entry.fog_green3)); update_values.push_back(columns[42] + " = " + std::to_string(zone_entry.fog_blue3)); - update_values.push_back(columns[43] + " = '" + EscapeString(zone_entry.fog_minclip3) + "'"); - update_values.push_back(columns[44] + " = '" + EscapeString(zone_entry.fog_maxclip3) + "'"); + update_values.push_back(columns[43] + " = " + std::to_string(zone_entry.fog_minclip3)); + update_values.push_back(columns[44] + " = " + std::to_string(zone_entry.fog_maxclip3)); update_values.push_back(columns[45] + " = " + std::to_string(zone_entry.fog_red4)); update_values.push_back(columns[46] + " = " + std::to_string(zone_entry.fog_green4)); update_values.push_back(columns[47] + " = " + std::to_string(zone_entry.fog_blue4)); - update_values.push_back(columns[48] + " = '" + EscapeString(zone_entry.fog_minclip4) + "'"); - update_values.push_back(columns[49] + " = '" + EscapeString(zone_entry.fog_maxclip4) + "'"); - update_values.push_back(columns[50] + " = '" + EscapeString(zone_entry.fog_density) + "'"); + update_values.push_back(columns[48] + " = " + std::to_string(zone_entry.fog_minclip4)); + update_values.push_back(columns[49] + " = " + std::to_string(zone_entry.fog_maxclip4)); + update_values.push_back(columns[50] + " = " + std::to_string(zone_entry.fog_density)); update_values.push_back(columns[51] + " = '" + EscapeString(zone_entry.flag_needed) + "'"); update_values.push_back(columns[52] + " = " + std::to_string(zone_entry.canbind)); update_values.push_back(columns[53] + " = " + std::to_string(zone_entry.cancombat)); @@ -573,7 +573,7 @@ public: update_values.push_back(columns[75] + " = " + std::to_string(zone_entry.snow_duration2)); update_values.push_back(columns[76] + " = " + std::to_string(zone_entry.snow_duration3)); update_values.push_back(columns[77] + " = " + std::to_string(zone_entry.snow_duration4)); - update_values.push_back(columns[78] + " = '" + EscapeString(zone_entry.gravity) + "'"); + update_values.push_back(columns[78] + " = " + std::to_string(zone_entry.gravity)); update_values.push_back(columns[79] + " = " + std::to_string(zone_entry.type)); update_values.push_back(columns[80] + " = " + std::to_string(zone_entry.skylock)); update_values.push_back(columns[81] + " = " + std::to_string(zone_entry.fast_regen_hp)); @@ -605,10 +605,10 @@ public: insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_x) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_y) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_z) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.graveyard_id) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); insert_values.push_back(std::to_string(zone_entry.min_level)); insert_values.push_back(std::to_string(zone_entry.min_status)); insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); @@ -617,40 +617,40 @@ public: insert_values.push_back(std::to_string(zone_entry.maxclients)); insert_values.push_back(std::to_string(zone_entry.ruleset)); insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.underworld) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.minclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.maxclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); insert_values.push_back(std::to_string(zone_entry.fog_blue)); insert_values.push_back(std::to_string(zone_entry.fog_red)); insert_values.push_back(std::to_string(zone_entry.fog_green)); insert_values.push_back(std::to_string(zone_entry.sky)); insert_values.push_back(std::to_string(zone_entry.ztype)); - insert_values.push_back("'" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.walkspeed) + "'"); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); insert_values.push_back(std::to_string(zone_entry.time_type)); insert_values.push_back(std::to_string(zone_entry.fog_red1)); insert_values.push_back(std::to_string(zone_entry.fog_green1)); insert_values.push_back(std::to_string(zone_entry.fog_blue1)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip1) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip1) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); insert_values.push_back(std::to_string(zone_entry.fog_red2)); insert_values.push_back(std::to_string(zone_entry.fog_green2)); insert_values.push_back(std::to_string(zone_entry.fog_blue2)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip2) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip2) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); insert_values.push_back(std::to_string(zone_entry.fog_red3)); insert_values.push_back(std::to_string(zone_entry.fog_green3)); insert_values.push_back(std::to_string(zone_entry.fog_blue3)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip3) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip3) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); insert_values.push_back(std::to_string(zone_entry.fog_red4)); insert_values.push_back(std::to_string(zone_entry.fog_green4)); insert_values.push_back(std::to_string(zone_entry.fog_blue4)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip4) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip4) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_density) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); insert_values.push_back(std::to_string(zone_entry.canbind)); insert_values.push_back(std::to_string(zone_entry.cancombat)); @@ -678,7 +678,7 @@ public: insert_values.push_back(std::to_string(zone_entry.snow_duration2)); insert_values.push_back(std::to_string(zone_entry.snow_duration3)); insert_values.push_back(std::to_string(zone_entry.snow_duration4)); - insert_values.push_back("'" + EscapeString(zone_entry.gravity) + "'"); + insert_values.push_back(std::to_string(zone_entry.gravity)); insert_values.push_back(std::to_string(zone_entry.type)); insert_values.push_back(std::to_string(zone_entry.skylock)); insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); @@ -700,7 +700,7 @@ public: return zone_entry; } - zone_entry = InstanceListRepository::NewEntity(); + zone_entry = ZoneRepository::NewEntity(); return zone_entry; } @@ -718,10 +718,10 @@ public: insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_x) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_y) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.safe_z) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.graveyard_id) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); insert_values.push_back(std::to_string(zone_entry.min_level)); insert_values.push_back(std::to_string(zone_entry.min_status)); insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); @@ -730,40 +730,40 @@ public: insert_values.push_back(std::to_string(zone_entry.maxclients)); insert_values.push_back(std::to_string(zone_entry.ruleset)); insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.underworld) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.minclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.maxclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); insert_values.push_back(std::to_string(zone_entry.fog_blue)); insert_values.push_back(std::to_string(zone_entry.fog_red)); insert_values.push_back(std::to_string(zone_entry.fog_green)); insert_values.push_back(std::to_string(zone_entry.sky)); insert_values.push_back(std::to_string(zone_entry.ztype)); - insert_values.push_back("'" + EscapeString(zone_entry.zone_exp_multiplier) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.walkspeed) + "'"); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); insert_values.push_back(std::to_string(zone_entry.time_type)); insert_values.push_back(std::to_string(zone_entry.fog_red1)); insert_values.push_back(std::to_string(zone_entry.fog_green1)); insert_values.push_back(std::to_string(zone_entry.fog_blue1)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip1) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip1) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); insert_values.push_back(std::to_string(zone_entry.fog_red2)); insert_values.push_back(std::to_string(zone_entry.fog_green2)); insert_values.push_back(std::to_string(zone_entry.fog_blue2)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip2) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip2) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); insert_values.push_back(std::to_string(zone_entry.fog_red3)); insert_values.push_back(std::to_string(zone_entry.fog_green3)); insert_values.push_back(std::to_string(zone_entry.fog_blue3)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip3) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip3) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); insert_values.push_back(std::to_string(zone_entry.fog_red4)); insert_values.push_back(std::to_string(zone_entry.fog_green4)); insert_values.push_back(std::to_string(zone_entry.fog_blue4)); - insert_values.push_back("'" + EscapeString(zone_entry.fog_minclip4) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_maxclip4) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.fog_density) + "'"); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); insert_values.push_back(std::to_string(zone_entry.canbind)); insert_values.push_back(std::to_string(zone_entry.cancombat)); @@ -791,7 +791,7 @@ public: insert_values.push_back(std::to_string(zone_entry.snow_duration2)); insert_values.push_back(std::to_string(zone_entry.snow_duration3)); insert_values.push_back(std::to_string(zone_entry.snow_duration4)); - insert_values.push_back("'" + EscapeString(zone_entry.gravity) + "'"); + insert_values.push_back(std::to_string(zone_entry.gravity)); insert_values.push_back(std::to_string(zone_entry.type)); insert_values.push_back(std::to_string(zone_entry.skylock)); insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); @@ -925,6 +925,130 @@ public: return all_entries; } + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0]; + entry.id = atoi(row[1]); + entry.file_name = row[2]; + entry.long_name = row[3]; + entry.map_file_name = row[4]; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16]; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51]; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_ZONE_REPOSITORY_H diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 16706f877..77508ecb6 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -242,7 +242,7 @@ foreach my $table_to_generate (@tables) { # update one if ($column_key ne "PRI") { my $query_value = sprintf('\'" + EscapeString(%s_entry.%s) + "\'");', $table_name, $column_name); - if ($data_type =~ /int/) { + if ($data_type =~ /int|float|double|decimal/) { $query_value = sprintf('" + std::to_string(%s_entry.%s));', $table_name, $column_name); } @@ -256,7 +256,7 @@ foreach my $table_to_generate (@tables) { # insert one if ($column_key ne "PRI") { my $value = sprintf("\"'\" + EscapeString(%s_entry.%s) + \"'\"", $table_name, $column_name); - if ($data_type =~ /int/) { + if ($data_type =~ /int|float|double|decimal/) { $value = sprintf('std::to_string(%s_entry.%s)', $table_name, $column_name); } diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 0c7eb0ac1..bd7e674e5 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -29,6 +29,7 @@ #include "../common/repositories/criteria/content_filter_criteria.h" #include "../common/rulesys.h" #include "../common/repositories/instance_list_repository.h" +#include "../common/repositories/zone_repository.h" namespace WorldserverCommandHandler { @@ -59,6 +60,7 @@ namespace WorldserverCommandHandler { function_map["database:dump"] = &WorldserverCommandHandler::DatabaseDump; function_map["test:test"] = &WorldserverCommandHandler::TestCommand; function_map["test:repository"] = &WorldserverCommandHandler::TestRepository; + function_map["test:repository2"] = &WorldserverCommandHandler::TestRepository2; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); } @@ -370,7 +372,7 @@ namespace WorldserverCommandHandler { /** * Delete one */ - int deleted = InstanceListRepository::DeleteOne(found_instance_list.id) ; + int deleted = InstanceListRepository::DeleteOne(found_instance_list.id); LogInfo("Deleting one instance [{}] deleted count [{}]", found_instance_list.id, deleted); @@ -399,10 +401,45 @@ namespace WorldserverCommandHandler { LogInfo("Bulk insertion test, inserted [{}]", inserted_count); - for (auto &entry: InstanceListRepository::All()) { + for (auto &entry: InstanceListRepository::GetWhere(fmt::format("zone = {}", 999))) { LogInfo("Iterating through entry id [{}] zone [{}]", entry.id, entry.zone); } + /** + * Delete where + */ + int deleted_count = InstanceListRepository::DeleteWhere(fmt::format("zone = {}", 999)); + + LogInfo("Bulk deletion test, deleted [{}]", deleted_count); + } -} \ No newline at end of file + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void TestRepository2(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Test command"; + + if (cmd[{"-h", "--help"}]) { + return; + } + + auto zones = ZoneRepository::GetWhere("short_name = 'anguish'"); + + for (auto &zone: zones) { + LogInfo( + "Zone [{}] long_name [{}] id [{}]", + zone.short_name, + zone.long_name, + zone.id + ); + } + + + } + +} diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index 66f81a130..24d0c0dbf 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -33,6 +33,7 @@ namespace WorldserverCommandHandler { void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description); void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); void TestRepository(int argc, char **argv, argh::parser &cmd, std::string &description); + void TestRepository2(int argc, char **argv, argh::parser &cmd, std::string &description); }; From fe7e850a04b9beb1e44c26adc4faba2d244fbd0d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 04:48:46 -0500 Subject: [PATCH 072/272] Return blank string values for string entries that return back null --- common/repositories/aa_ability_repository.h | 6 +- .../repositories/account_flags_repository.h | 12 +- common/repositories/account_ip_repository.h | 12 +- common/repositories/account_repository.h | 48 ++--- ...venture_template_entry_flavor_repository.h | 6 +- .../adventure_template_repository.h | 12 +- common/repositories/auras_repository.h | 6 +- common/repositories/banned_ips_repository.h | 12 +- .../repositories/blocked_spells_repository.h | 12 +- common/repositories/books_repository.h | 12 +- common/repositories/bug_reports_repository.h | 78 ++++---- common/repositories/bugs_repository.h | 42 ++--- common/repositories/buyer_repository.h | 6 +- .../character_bandolier_repository.h | 6 +- .../repositories/character_buffs_repository.h | 6 +- .../character_corpses_repository.h | 12 +- .../repositories/character_data_repository.h | 36 ++-- .../character_inspect_messages_repository.h | 6 +- .../character_pet_buffs_repository.h | 6 +- .../character_pet_info_repository.h | 6 +- common/repositories/chatchannels_repository.h | 18 +- .../command_settings_repository.h | 12 +- common/repositories/data_buckets_repository.h | 12 +- common/repositories/db_str_repository.h | 6 +- .../discovered_items_repository.h | 6 +- common/repositories/doors_repository.h | 18 +- common/repositories/eventlog_repository.h | 36 ++-- .../faction_list_mod_repository.h | 6 +- common/repositories/faction_list_repository.h | 6 +- common/repositories/friends_repository.h | 6 +- common/repositories/global_loot_repository.h | 30 ++-- common/repositories/gm_ips_repository.h | 12 +- .../repositories/ground_spawns_repository.h | 12 +- common/repositories/group_id_repository.h | 6 +- .../repositories/group_leaders_repository.h | 42 ++--- .../repositories/guild_members_repository.h | 6 +- common/repositories/guild_ranks_repository.h | 6 +- common/repositories/guilds_repository.h | 30 ++-- common/repositories/hackers_repository.h | 30 ++-- common/repositories/horses_repository.h | 12 +- common/repositories/inventory_repository.h | 6 +- .../inventory_snapshots_repository.h | 6 +- .../repositories/ip_exemptions_repository.h | 6 +- common/repositories/item_tick_repository.h | 6 +- common/repositories/items_repository.h | 168 +++++++++--------- common/repositories/launcher_repository.h | 6 +- .../repositories/launcher_zones_repository.h | 12 +- common/repositories/lfguild_repository.h | 12 +- .../repositories/login_accounts_repository.h | 48 ++--- .../login_api_tokens_repository.h | 18 +- .../login_server_admins_repository.h | 42 ++--- .../login_server_list_types_repository.h | 6 +- .../login_world_servers_repository.h | 36 ++-- .../logsys_categories_repository.h | 6 +- common/repositories/lootdrop_repository.h | 6 +- common/repositories/loottable_repository.h | 6 +- common/repositories/mail_repository.h | 24 +-- common/repositories/name_filter_repository.h | 6 +- common/repositories/npc_emotes_repository.h | 6 +- common/repositories/npc_faction_repository.h | 6 +- .../npc_scale_global_base_repository.h | 6 +- .../npc_spells_effects_repository.h | 6 +- common/repositories/npc_spells_repository.h | 6 +- common/repositories/npc_types_repository.h | 30 ++-- .../repositories/npc_types_tint_repository.h | 6 +- .../repositories/object_contents_repository.h | 6 +- common/repositories/object_repository.h | 12 +- .../perl_event_export_settings_repository.h | 6 +- common/repositories/petitions_repository.h | 36 ++-- .../pets_equipmentset_repository.h | 6 +- common/repositories/pets_repository.h | 6 +- .../repositories/quest_globals_repository.h | 12 +- common/repositories/raid_details_repository.h | 6 +- common/repositories/raid_members_repository.h | 6 +- common/repositories/reports_repository.h | 18 +- common/repositories/rule_sets_repository.h | 6 +- common/repositories/rule_values_repository.h | 18 +- common/repositories/saylink_repository.h | 6 +- common/repositories/spawn2_repository.h | 6 +- .../spawn_condition_values_repository.h | 6 +- .../spawn_conditions_repository.h | 12 +- common/repositories/spawn_events_repository.h | 12 +- common/repositories/spawngroup_repository.h | 6 +- .../repositories/spell_buckets_repository.h | 12 +- .../repositories/spell_globals_repository.h | 18 +- common/repositories/spells_new_repository.h | 48 ++--- .../repositories/task_activities_repository.h | 36 ++-- common/repositories/tasks_repository.h | 24 +-- common/repositories/titles_repository.h | 12 +- common/repositories/traps_repository.h | 12 +- common/repositories/tributes_repository.h | 12 +- common/repositories/variables_repository.h | 24 +-- .../veteran_reward_templates_repository.h | 6 +- common/repositories/zone_points_repository.h | 6 +- common/repositories/zone_repository.h | 36 ++-- .../generators/repository-generator.pl | 4 +- world/world_server_command_handler.cpp | 2 - 97 files changed, 788 insertions(+), 790 deletions(-) diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index 62aeb7a4b..aaba219b9 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -164,7 +164,7 @@ public: AaAbility entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.category = atoi(row[2]); entry.classes = atoi(row[3]); entry.races = atoi(row[4]); @@ -329,7 +329,7 @@ public: AaAbility entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.category = atoi(row[2]); entry.classes = atoi(row[3]); entry.races = atoi(row[4]); @@ -367,7 +367,7 @@ public: AaAbility entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.category = atoi(row[2]); entry.classes = atoi(row[3]); entry.races = atoi(row[4]); diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index 6943d1d3e..e9f0382c7 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -131,8 +131,8 @@ public: AccountFlags entry{}; entry.p_accid = atoi(row[0]); - entry.p_flag = row[1]; - entry.p_value = row[2]; + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; return entry; } @@ -249,8 +249,8 @@ public: AccountFlags entry{}; entry.p_accid = atoi(row[0]); - entry.p_flag = row[1]; - entry.p_value = row[2]; + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -276,8 +276,8 @@ public: AccountFlags entry{}; entry.p_accid = atoi(row[0]); - entry.p_flag = row[1]; - entry.p_value = row[2]; + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h index aea63827d..d1f7726fb 100644 --- a/common/repositories/account_ip_repository.h +++ b/common/repositories/account_ip_repository.h @@ -134,9 +134,9 @@ public: AccountIp entry{}; entry.accid = atoi(row[0]); - entry.ip = row[1]; + entry.ip = row[1] ? row[1] : ""; entry.count = atoi(row[2]); - entry.lastused = row[3]; + entry.lastused = row[3] ? row[3] : ""; return entry; } @@ -256,9 +256,9 @@ public: AccountIp entry{}; entry.accid = atoi(row[0]); - entry.ip = row[1]; + entry.ip = row[1] ? row[1] : ""; entry.count = atoi(row[2]); - entry.lastused = row[3]; + entry.lastused = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -284,9 +284,9 @@ public: AccountIp entry{}; entry.accid = atoi(row[0]); - entry.ip = row[1]; + entry.ip = row[1] ? row[1] : ""; entry.count = atoi(row[2]); - entry.lastused = row[3]; + entry.lastused = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index c043dc8ee..3667ac864 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -179,24 +179,24 @@ public: Account entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.charname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; entry.sharedplat = atoi(row[3]); - entry.password = row[4]; + entry.password = row[4] ? row[4] : ""; entry.status = atoi(row[5]); - entry.ls_id = row[6]; + entry.ls_id = row[6] ? row[6] : ""; entry.lsaccount_id = atoi(row[7]); entry.gmspeed = atoi(row[8]); entry.revoked = atoi(row[9]); entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11]; + entry.minilogin_ip = row[11] ? row[11] : ""; entry.hideme = atoi(row[12]); entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14]; + entry.suspendeduntil = row[14] ? row[14] : ""; entry.time_creation = atoi(row[15]); entry.expansion = atoi(row[16]); - entry.ban_reason = row[17]; - entry.suspend_reason = row[18]; + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; return entry; } @@ -364,24 +364,24 @@ public: Account entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.charname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; entry.sharedplat = atoi(row[3]); - entry.password = row[4]; + entry.password = row[4] ? row[4] : ""; entry.status = atoi(row[5]); - entry.ls_id = row[6]; + entry.ls_id = row[6] ? row[6] : ""; entry.lsaccount_id = atoi(row[7]); entry.gmspeed = atoi(row[8]); entry.revoked = atoi(row[9]); entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11]; + entry.minilogin_ip = row[11] ? row[11] : ""; entry.hideme = atoi(row[12]); entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14]; + entry.suspendeduntil = row[14] ? row[14] : ""; entry.time_creation = atoi(row[15]); entry.expansion = atoi(row[16]); - entry.ban_reason = row[17]; - entry.suspend_reason = row[18]; + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; all_entries.push_back(entry); } @@ -407,24 +407,24 @@ public: Account entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.charname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; entry.sharedplat = atoi(row[3]); - entry.password = row[4]; + entry.password = row[4] ? row[4] : ""; entry.status = atoi(row[5]); - entry.ls_id = row[6]; + entry.ls_id = row[6] ? row[6] : ""; entry.lsaccount_id = atoi(row[7]); entry.gmspeed = atoi(row[8]); entry.revoked = atoi(row[9]); entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11]; + entry.minilogin_ip = row[11] ? row[11] : ""; entry.hideme = atoi(row[12]); entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14]; + entry.suspendeduntil = row[14] ? row[14] : ""; entry.time_creation = atoi(row[15]); entry.expansion = atoi(row[16]); - entry.ban_reason = row[17]; - entry.suspend_reason = row[18]; + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index 4c72735a5..6eb0c8572 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -128,7 +128,7 @@ public: AdventureTemplateEntryFlavor entry{}; entry.id = atoi(row[0]); - entry.text = row[1]; + entry.text = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: AdventureTemplateEntryFlavor entry{}; entry.id = atoi(row[0]); - entry.text = row[1]; + entry.text = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: AdventureTemplateEntryFlavor entry{}; entry.id = atoi(row[0]); - entry.text = row[1]; + entry.text = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index 4ef56ca80..8590ebfad 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -221,7 +221,7 @@ public: AdventureTemplate entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.zone_version = atoi(row[2]); entry.is_hard = atoi(row[3]); entry.is_raid = atoi(row[4]); @@ -234,7 +234,7 @@ public: entry.assa_y = atof(row[11]); entry.assa_z = atof(row[12]); entry.assa_h = atof(row[13]); - entry.text = row[14]; + entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); entry.win_points = atoi(row[17]); @@ -462,7 +462,7 @@ public: AdventureTemplate entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.zone_version = atoi(row[2]); entry.is_hard = atoi(row[3]); entry.is_raid = atoi(row[4]); @@ -475,7 +475,7 @@ public: entry.assa_y = atof(row[11]); entry.assa_z = atof(row[12]); entry.assa_h = atof(row[13]); - entry.text = row[14]; + entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); entry.win_points = atoi(row[17]); @@ -519,7 +519,7 @@ public: AdventureTemplate entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.zone_version = atoi(row[2]); entry.is_hard = atoi(row[3]); entry.is_raid = atoi(row[4]); @@ -532,7 +532,7 @@ public: entry.assa_y = atof(row[11]); entry.assa_z = atof(row[12]); entry.assa_h = atof(row[13]); - entry.text = row[14]; + entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); entry.win_points = atoi(row[17]); diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index f76ca9e59..08a70fbb5 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -156,7 +156,7 @@ public: entry.type = atoi(row[0]); entry.npc_type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.spell_id = atoi(row[3]); entry.distance = atoi(row[4]); entry.aura_type = atoi(row[5]); @@ -309,7 +309,7 @@ public: entry.type = atoi(row[0]); entry.npc_type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.spell_id = atoi(row[3]); entry.distance = atoi(row[4]); entry.aura_type = atoi(row[5]); @@ -344,7 +344,7 @@ public: entry.type = atoi(row[0]); entry.npc_type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.spell_id = atoi(row[3]); entry.distance = atoi(row[4]); entry.aura_type = atoi(row[5]); diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index 26e8293f0..f8afcf0a2 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -127,8 +127,8 @@ public: if (results.RowCount() == 1) { BannedIps entry{}; - entry.ip_address = row[0]; - entry.notes = row[1]; + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; return entry; } @@ -244,8 +244,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { BannedIps entry{}; - entry.ip_address = row[0]; - entry.notes = row[1]; + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -270,8 +270,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { BannedIps entry{}; - entry.ip_address = row[0]; - entry.notes = row[1]; + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index c4eba3581..57138a2ad 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -167,8 +167,8 @@ public: entry.x_diff = atof(row[7]); entry.y_diff = atof(row[8]); entry.z_diff = atof(row[9]); - entry.message = row[10]; - entry.description = row[11]; + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; return entry; } @@ -324,8 +324,8 @@ public: entry.x_diff = atof(row[7]); entry.y_diff = atof(row[8]); entry.z_diff = atof(row[9]); - entry.message = row[10]; - entry.description = row[11]; + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; all_entries.push_back(entry); } @@ -360,8 +360,8 @@ public: entry.x_diff = atof(row[7]); entry.y_diff = atof(row[8]); entry.z_diff = atof(row[9]); - entry.message = row[10]; - entry.description = row[11]; + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h index 7baa6ef7c..d3464f090 100644 --- a/common/repositories/books_repository.h +++ b/common/repositories/books_repository.h @@ -130,8 +130,8 @@ public: if (results.RowCount() == 1) { Books entry{}; - entry.name = row[0]; - entry.txtfile = row[1]; + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; entry.language = atoi(row[2]); return entry; @@ -251,8 +251,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Books entry{}; - entry.name = row[0]; - entry.txtfile = row[1]; + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; entry.language = atoi(row[2]); all_entries.push_back(entry); @@ -278,8 +278,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Books entry{}; - entry.name = row[0]; - entry.txtfile = row[1]; + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; entry.language = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index f58d2e121..06f16ea50 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -218,37 +218,37 @@ public: BugReports entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3]; + entry.client_version_name = row[3] ? row[3] : ""; entry.account_id = atoi(row[4]); entry.character_id = atoi(row[5]); - entry.character_name = row[6]; + entry.character_name = row[6] ? row[6] : ""; entry.reporter_spoof = atoi(row[7]); entry.category_id = atoi(row[8]); - entry.category_name = row[9]; - entry.reporter_name = row[10]; - entry.ui_path = row[11]; + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; entry.pos_x = atof(row[12]); entry.pos_y = atof(row[13]); entry.pos_z = atof(row[14]); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); - entry.target_name = row[18]; + entry.target_name = row[18] ? row[18] : ""; entry.optional_info_mask = atoi(row[19]); entry._can_duplicate = atoi(row[20]); entry._crash_bug = atoi(row[21]); entry._target_info = atoi(row[22]); entry._character_flags = atoi(row[23]); entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25]; - entry.system_info = row[26]; - entry.report_datetime = row[27]; + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; entry.bug_status = atoi(row[28]); - entry.last_review = row[29]; - entry.last_reviewer = row[30]; - entry.reviewer_notes = row[31]; + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; return entry; } @@ -455,37 +455,37 @@ public: BugReports entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3]; + entry.client_version_name = row[3] ? row[3] : ""; entry.account_id = atoi(row[4]); entry.character_id = atoi(row[5]); - entry.character_name = row[6]; + entry.character_name = row[6] ? row[6] : ""; entry.reporter_spoof = atoi(row[7]); entry.category_id = atoi(row[8]); - entry.category_name = row[9]; - entry.reporter_name = row[10]; - entry.ui_path = row[11]; + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; entry.pos_x = atof(row[12]); entry.pos_y = atof(row[13]); entry.pos_z = atof(row[14]); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); - entry.target_name = row[18]; + entry.target_name = row[18] ? row[18] : ""; entry.optional_info_mask = atoi(row[19]); entry._can_duplicate = atoi(row[20]); entry._crash_bug = atoi(row[21]); entry._target_info = atoi(row[22]); entry._character_flags = atoi(row[23]); entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25]; - entry.system_info = row[26]; - entry.report_datetime = row[27]; + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; entry.bug_status = atoi(row[28]); - entry.last_review = row[29]; - entry.last_reviewer = row[30]; - entry.reviewer_notes = row[31]; + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; all_entries.push_back(entry); } @@ -511,37 +511,37 @@ public: BugReports entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3]; + entry.client_version_name = row[3] ? row[3] : ""; entry.account_id = atoi(row[4]); entry.character_id = atoi(row[5]); - entry.character_name = row[6]; + entry.character_name = row[6] ? row[6] : ""; entry.reporter_spoof = atoi(row[7]); entry.category_id = atoi(row[8]); - entry.category_name = row[9]; - entry.reporter_name = row[10]; - entry.ui_path = row[11]; + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; entry.pos_x = atof(row[12]); entry.pos_y = atof(row[13]); entry.pos_z = atof(row[14]); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); - entry.target_name = row[18]; + entry.target_name = row[18] ? row[18] : ""; entry.optional_info_mask = atoi(row[19]); entry._can_duplicate = atoi(row[20]); entry._crash_bug = atoi(row[21]); entry._target_info = atoi(row[22]); entry._character_flags = atoi(row[23]); entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25]; - entry.system_info = row[26]; - entry.report_datetime = row[27]; + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; entry.bug_status = atoi(row[28]); - entry.last_review = row[29]; - entry.last_reviewer = row[30]; - entry.reviewer_notes = row[31]; + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index 85ebb2852..b0d8f45f4 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -161,17 +161,17 @@ public: Bugs entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; - entry.name = row[2]; - entry.ui = row[3]; + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; entry.x = atof(row[4]); entry.y = atof(row[5]); entry.z = atof(row[6]); - entry.type = row[7]; + entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); - entry.target = row[9]; - entry.bug = row[10]; - entry.date = row[11]; + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; entry.status = atoi(row[12]); return entry; @@ -322,17 +322,17 @@ public: Bugs entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; - entry.name = row[2]; - entry.ui = row[3]; + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; entry.x = atof(row[4]); entry.y = atof(row[5]); entry.z = atof(row[6]); - entry.type = row[7]; + entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); - entry.target = row[9]; - entry.bug = row[10]; - entry.date = row[11]; + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; entry.status = atoi(row[12]); all_entries.push_back(entry); @@ -359,17 +359,17 @@ public: Bugs entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; - entry.name = row[2]; - entry.ui = row[3]; + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; entry.x = atof(row[4]); entry.y = atof(row[5]); entry.z = atof(row[6]); - entry.type = row[7]; + entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); - entry.target = row[9]; - entry.bug = row[10]; - entry.date = row[11]; + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; entry.status = atoi(row[12]); all_entries.push_back(entry); diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h index 3c3d85d9b..45c138b90 100644 --- a/common/repositories/buyer_repository.h +++ b/common/repositories/buyer_repository.h @@ -142,7 +142,7 @@ public: entry.charid = atoi(row[0]); entry.buyslot = atoi(row[1]); entry.itemid = atoi(row[2]); - entry.itemname = row[3]; + entry.itemname = row[3] ? row[3] : ""; entry.quantity = atoi(row[4]); entry.price = atoi(row[5]); @@ -272,7 +272,7 @@ public: entry.charid = atoi(row[0]); entry.buyslot = atoi(row[1]); entry.itemid = atoi(row[2]); - entry.itemname = row[3]; + entry.itemname = row[3] ? row[3] : ""; entry.quantity = atoi(row[4]); entry.price = atoi(row[5]); @@ -302,7 +302,7 @@ public: entry.charid = atoi(row[0]); entry.buyslot = atoi(row[1]); entry.itemid = atoi(row[2]); - entry.itemname = row[3]; + entry.itemname = row[3] ? row[3] : ""; entry.quantity = atoi(row[4]); entry.price = atoi(row[5]); diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index 138882959..446ae5b0f 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -144,7 +144,7 @@ public: entry.bandolier_slot = atoi(row[2]); entry.item_id = atoi(row[3]); entry.icon = atoi(row[4]); - entry.bandolier_name = row[5]; + entry.bandolier_name = row[5] ? row[5] : ""; return entry; } @@ -271,7 +271,7 @@ public: entry.bandolier_slot = atoi(row[2]); entry.item_id = atoi(row[3]); entry.icon = atoi(row[4]); - entry.bandolier_name = row[5]; + entry.bandolier_name = row[5] ? row[5] : ""; all_entries.push_back(entry); } @@ -301,7 +301,7 @@ public: entry.bandolier_slot = atoi(row[2]); entry.item_id = atoi(row[3]); entry.icon = atoi(row[4]); - entry.bandolier_name = row[5]; + entry.bandolier_name = row[5] ? row[5] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index cebad8ad6..a167a6d55 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -176,7 +176,7 @@ public: entry.slot_id = atoi(row[1]); entry.spell_id = atoi(row[2]); entry.caster_level = atoi(row[3]); - entry.caster_name = row[4]; + entry.caster_name = row[4] ? row[4] : ""; entry.ticsremaining = atoi(row[5]); entry.counters = atoi(row[6]); entry.numhits = atoi(row[7]); @@ -350,7 +350,7 @@ public: entry.slot_id = atoi(row[1]); entry.spell_id = atoi(row[2]); entry.caster_level = atoi(row[3]); - entry.caster_name = row[4]; + entry.caster_name = row[4] ? row[4] : ""; entry.ticsremaining = atoi(row[5]); entry.counters = atoi(row[6]); entry.numhits = atoi(row[7]); @@ -391,7 +391,7 @@ public: entry.slot_id = atoi(row[1]); entry.spell_id = atoi(row[2]); entry.caster_level = atoi(row[3]); - entry.caster_name = row[4]; + entry.caster_name = row[4] ? row[4] : ""; entry.ticsremaining = atoi(row[5]); entry.counters = atoi(row[6]); entry.numhits = atoi(row[7]); diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index 7ba5f98e8..3299a2e10 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -264,14 +264,14 @@ public: entry.id = atoi(row[0]); entry.charid = atoi(row[1]); - entry.charname = row[2]; + entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); entry.x = atof(row[5]); entry.y = atof(row[6]); entry.z = atof(row[7]); entry.heading = atof(row[8]); - entry.time_of_death = row[9]; + entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); entry.is_buried = atoi(row[12]); @@ -561,14 +561,14 @@ public: entry.id = atoi(row[0]); entry.charid = atoi(row[1]); - entry.charname = row[2]; + entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); entry.x = atof(row[5]); entry.y = atof(row[6]); entry.z = atof(row[7]); entry.heading = atof(row[8]); - entry.time_of_death = row[9]; + entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); entry.is_buried = atoi(row[12]); @@ -632,14 +632,14 @@ public: entry.id = atoi(row[0]); entry.charid = atoi(row[1]); - entry.charname = row[2]; + entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); entry.x = atof(row[5]); entry.y = atof(row[6]); entry.z = atof(row[7]); entry.heading = atof(row[8]); - entry.time_of_death = row[9]; + entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); entry.is_buried = atoi(row[12]); diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index 605524bf5..3e5f0749d 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -429,10 +429,10 @@ public: entry.id = atoi(row[0]); entry.account_id = atoi(row[1]); - entry.name = row[2]; - entry.last_name = row[3]; - entry.title = row[4]; - entry.suffix = row[5]; + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); entry.y = atof(row[8]); @@ -519,7 +519,7 @@ public: entry.autosplit_enabled = atoi(row[89]); entry.lfp = atoi(row[90]); entry.lfg = atoi(row[91]); - entry.mailkey = row[92]; + entry.mailkey = row[92] ? row[92] : ""; entry.xtargets = atoi(row[93]); entry.firstlogon = atoi(row[94]); entry.e_aa_effects = atoi(row[95]); @@ -528,7 +528,7 @@ public: entry.aa_points_spent_old = atoi(row[98]); entry.aa_points_old = atoi(row[99]); entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101]; + entry.deleted_at = row[101] ? row[101] : ""; return entry; } @@ -946,10 +946,10 @@ public: entry.id = atoi(row[0]); entry.account_id = atoi(row[1]); - entry.name = row[2]; - entry.last_name = row[3]; - entry.title = row[4]; - entry.suffix = row[5]; + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); entry.y = atof(row[8]); @@ -1036,7 +1036,7 @@ public: entry.autosplit_enabled = atoi(row[89]); entry.lfp = atoi(row[90]); entry.lfg = atoi(row[91]); - entry.mailkey = row[92]; + entry.mailkey = row[92] ? row[92] : ""; entry.xtargets = atoi(row[93]); entry.firstlogon = atoi(row[94]); entry.e_aa_effects = atoi(row[95]); @@ -1045,7 +1045,7 @@ public: entry.aa_points_spent_old = atoi(row[98]); entry.aa_points_old = atoi(row[99]); entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101]; + entry.deleted_at = row[101] ? row[101] : ""; all_entries.push_back(entry); } @@ -1072,10 +1072,10 @@ public: entry.id = atoi(row[0]); entry.account_id = atoi(row[1]); - entry.name = row[2]; - entry.last_name = row[3]; - entry.title = row[4]; - entry.suffix = row[5]; + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); entry.y = atof(row[8]); @@ -1162,7 +1162,7 @@ public: entry.autosplit_enabled = atoi(row[89]); entry.lfp = atoi(row[90]); entry.lfg = atoi(row[91]); - entry.mailkey = row[92]; + entry.mailkey = row[92] ? row[92] : ""; entry.xtargets = atoi(row[93]); entry.firstlogon = atoi(row[94]); entry.e_aa_effects = atoi(row[95]); @@ -1171,7 +1171,7 @@ public: entry.aa_points_spent_old = atoi(row[98]); entry.aa_points_old = atoi(row[99]); entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101]; + entry.deleted_at = row[101] ? row[101] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index 4a087e994..7595a8cfe 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -128,7 +128,7 @@ public: CharacterInspectMessages entry{}; entry.id = atoi(row[0]); - entry.inspect_message = row[1]; + entry.inspect_message = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: CharacterInspectMessages entry{}; entry.id = atoi(row[0]); - entry.inspect_message = row[1]; + entry.inspect_message = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: CharacterInspectMessages entry{}; entry.id = atoi(row[0]); - entry.inspect_message = row[1]; + entry.inspect_message = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h index b5de59be9..a34c9dccf 100644 --- a/common/repositories/character_pet_buffs_repository.h +++ b/common/repositories/character_pet_buffs_repository.h @@ -159,7 +159,7 @@ public: entry.slot = atoi(row[2]); entry.spell_id = atoi(row[3]); entry.caster_level = atoi(row[4]); - entry.castername = row[5]; + entry.castername = row[5] ? row[5] : ""; entry.ticsremaining = atoi(row[6]); entry.counters = atoi(row[7]); entry.numhits = atoi(row[8]); @@ -306,7 +306,7 @@ public: entry.slot = atoi(row[2]); entry.spell_id = atoi(row[3]); entry.caster_level = atoi(row[4]); - entry.castername = row[5]; + entry.castername = row[5] ? row[5] : ""; entry.ticsremaining = atoi(row[6]); entry.counters = atoi(row[7]); entry.numhits = atoi(row[8]); @@ -341,7 +341,7 @@ public: entry.slot = atoi(row[2]); entry.spell_id = atoi(row[3]); entry.caster_level = atoi(row[4]); - entry.castername = row[5]; + entry.castername = row[5] ? row[5] : ""; entry.ticsremaining = atoi(row[6]); entry.counters = atoi(row[7]); entry.numhits = atoi(row[8]); diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index 9adb9b628..7f72eeed2 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -147,7 +147,7 @@ public: entry.char_id = atoi(row[0]); entry.pet = atoi(row[1]); - entry.petname = row[2]; + entry.petname = row[2] ? row[2] : ""; entry.petpower = atoi(row[3]); entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); @@ -285,7 +285,7 @@ public: entry.char_id = atoi(row[0]); entry.pet = atoi(row[1]); - entry.petname = row[2]; + entry.petname = row[2] ? row[2] : ""; entry.petpower = atoi(row[3]); entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); @@ -317,7 +317,7 @@ public: entry.char_id = atoi(row[0]); entry.pet = atoi(row[1]); - entry.petname = row[2]; + entry.petname = row[2] ? row[2] : ""; entry.petpower = atoi(row[3]); entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h index 302526ecd..06f8511c6 100644 --- a/common/repositories/chatchannels_repository.h +++ b/common/repositories/chatchannels_repository.h @@ -133,9 +133,9 @@ public: if (results.RowCount() == 1) { Chatchannels entry{}; - entry.name = row[0]; - entry.owner = row[1]; - entry.password = row[2]; + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; entry.minstatus = atoi(row[3]); return entry; @@ -258,9 +258,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Chatchannels entry{}; - entry.name = row[0]; - entry.owner = row[1]; - entry.password = row[2]; + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; entry.minstatus = atoi(row[3]); all_entries.push_back(entry); @@ -286,9 +286,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Chatchannels entry{}; - entry.name = row[0]; - entry.owner = row[1]; - entry.password = row[2]; + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; entry.minstatus = atoi(row[3]); all_entries.push_back(entry); diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h index 2b9fb3d50..a5622e537 100644 --- a/common/repositories/command_settings_repository.h +++ b/common/repositories/command_settings_repository.h @@ -130,9 +130,9 @@ public: if (results.RowCount() == 1) { CommandSettings entry{}; - entry.command = row[0]; + entry.command = row[0] ? row[0] : ""; entry.access = atoi(row[1]); - entry.aliases = row[2]; + entry.aliases = row[2] ? row[2] : ""; return entry; } @@ -251,9 +251,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { CommandSettings entry{}; - entry.command = row[0]; + entry.command = row[0] ? row[0] : ""; entry.access = atoi(row[1]); - entry.aliases = row[2]; + entry.aliases = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -278,9 +278,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { CommandSettings entry{}; - entry.command = row[0]; + entry.command = row[0] ? row[0] : ""; entry.access = atoi(row[1]); - entry.aliases = row[2]; + entry.aliases = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index 950111133..4c8e6ccf5 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -134,8 +134,8 @@ public: DataBuckets entry{}; entry.id = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; entry.expires = atoi(row[3]); return entry; @@ -259,8 +259,8 @@ public: DataBuckets entry{}; entry.id = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; entry.expires = atoi(row[3]); all_entries.push_back(entry); @@ -287,8 +287,8 @@ public: DataBuckets entry{}; entry.id = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; entry.expires = atoi(row[3]); all_entries.push_back(entry); diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index fd7d3b8c1..4fe546ea0 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -132,7 +132,7 @@ public: entry.id = atoi(row[0]); entry.type = atoi(row[1]); - entry.value = row[2]; + entry.value = row[2] ? row[2] : ""; return entry; } @@ -250,7 +250,7 @@ public: entry.id = atoi(row[0]); entry.type = atoi(row[1]); - entry.value = row[2]; + entry.value = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -277,7 +277,7 @@ public: entry.id = atoi(row[0]); entry.type = atoi(row[1]); - entry.value = row[2]; + entry.value = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h index a424c02cd..293b6146d 100644 --- a/common/repositories/discovered_items_repository.h +++ b/common/repositories/discovered_items_repository.h @@ -134,7 +134,7 @@ public: DiscoveredItems entry{}; entry.item_id = atoi(row[0]); - entry.char_name = row[1]; + entry.char_name = row[1] ? row[1] : ""; entry.discovered_date = atoi(row[2]); entry.account_status = atoi(row[3]); @@ -259,7 +259,7 @@ public: DiscoveredItems entry{}; entry.item_id = atoi(row[0]); - entry.char_name = row[1]; + entry.char_name = row[1] ? row[1] : ""; entry.discovered_date = atoi(row[2]); entry.account_status = atoi(row[3]); @@ -287,7 +287,7 @@ public: DiscoveredItems entry{}; entry.item_id = atoi(row[0]); - entry.char_name = row[1]; + entry.char_name = row[1] ? row[1] : ""; entry.discovered_date = atoi(row[2]); entry.account_status = atoi(row[3]); diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index 34857f08a..dda6efa9d 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -216,9 +216,9 @@ public: entry.id = atoi(row[0]); entry.doorid = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; entry.pos_y = atof(row[5]); entry.pos_x = atof(row[6]); entry.pos_z = atof(row[7]); @@ -233,7 +233,7 @@ public: entry.disable_timer = atoi(row[16]); entry.doorisopen = atoi(row[17]); entry.door_param = atoi(row[18]); - entry.dest_zone = row[19]; + entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); entry.dest_x = atof(row[21]); entry.dest_y = atof(row[22]); @@ -449,9 +449,9 @@ public: entry.id = atoi(row[0]); entry.doorid = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; entry.pos_y = atof(row[5]); entry.pos_x = atof(row[6]); entry.pos_z = atof(row[7]); @@ -466,7 +466,7 @@ public: entry.disable_timer = atoi(row[16]); entry.doorisopen = atoi(row[17]); entry.door_param = atoi(row[18]); - entry.dest_zone = row[19]; + entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); entry.dest_x = atof(row[21]); entry.dest_y = atof(row[22]); @@ -504,9 +504,9 @@ public: entry.id = atoi(row[0]); entry.doorid = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; entry.pos_y = atof(row[5]); entry.pos_x = atof(row[6]); entry.pos_z = atof(row[7]); @@ -521,7 +521,7 @@ public: entry.disable_timer = atoi(row[16]); entry.doorisopen = atoi(row[17]); entry.door_param = atoi(row[18]); - entry.dest_zone = row[19]; + entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); entry.dest_x = atof(row[21]); entry.dest_y = atof(row[22]); diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index 5f95682ef..af5eabba0 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -152,14 +152,14 @@ public: Eventlog entry{}; entry.id = atoi(row[0]); - entry.accountname = row[1]; + entry.accountname = row[1] ? row[1] : ""; entry.accountid = atoi(row[2]); entry.status = atoi(row[3]); - entry.charname = row[4]; - entry.target = row[5]; - entry.time = row[6]; - entry.descriptiontype = row[7]; - entry.description = row[8]; + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; entry.event_nid = atoi(row[9]); return entry; @@ -301,14 +301,14 @@ public: Eventlog entry{}; entry.id = atoi(row[0]); - entry.accountname = row[1]; + entry.accountname = row[1] ? row[1] : ""; entry.accountid = atoi(row[2]); entry.status = atoi(row[3]); - entry.charname = row[4]; - entry.target = row[5]; - entry.time = row[6]; - entry.descriptiontype = row[7]; - entry.description = row[8]; + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; entry.event_nid = atoi(row[9]); all_entries.push_back(entry); @@ -335,14 +335,14 @@ public: Eventlog entry{}; entry.id = atoi(row[0]); - entry.accountname = row[1]; + entry.accountname = row[1] ? row[1] : ""; entry.accountid = atoi(row[2]); entry.status = atoi(row[3]); - entry.charname = row[4]; - entry.target = row[5]; - entry.time = row[6]; - entry.descriptiontype = row[7]; - entry.description = row[8]; + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; entry.event_nid = atoi(row[9]); all_entries.push_back(entry); diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 8e1374ce1..5c5853d29 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -136,7 +136,7 @@ public: entry.id = atoi(row[0]); entry.faction_id = atoi(row[1]); entry.mod = atoi(row[2]); - entry.mod_name = row[3]; + entry.mod_name = row[3] ? row[3] : ""; return entry; } @@ -261,7 +261,7 @@ public: entry.id = atoi(row[0]); entry.faction_id = atoi(row[1]); entry.mod = atoi(row[2]); - entry.mod_name = row[3]; + entry.mod_name = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -289,7 +289,7 @@ public: entry.id = atoi(row[0]); entry.faction_id = atoi(row[1]); entry.mod = atoi(row[2]); - entry.mod_name = row[3]; + entry.mod_name = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h index 50c141456..8d3f1b085 100644 --- a/common/repositories/faction_list_repository.h +++ b/common/repositories/faction_list_repository.h @@ -131,7 +131,7 @@ public: FactionList entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.base = atoi(row[2]); return entry; @@ -252,7 +252,7 @@ public: FactionList entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.base = atoi(row[2]); all_entries.push_back(entry); @@ -279,7 +279,7 @@ public: FactionList entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.base = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 55746a3f2..51e33f5c3 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -132,7 +132,7 @@ public: entry.charid = atoi(row[0]); entry.type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; return entry; } @@ -250,7 +250,7 @@ public: entry.charid = atoi(row[0]); entry.type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -277,7 +277,7 @@ public: entry.charid = atoi(row[0]); entry.type = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index ad566baf7..1b53d432d 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -161,17 +161,17 @@ public: GlobalLoot entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; entry.loottable_id = atoi(row[2]); entry.enabled = atoi(row[3]); entry.min_level = atoi(row[4]); entry.max_level = atoi(row[5]); entry.rare = atoi(row[6]); entry.raid = atoi(row[7]); - entry.race = row[8]; - entry.class = row[9]; - entry.bodytype = row[10]; - entry.zone = row[11]; + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; entry.hot_zone = atoi(row[12]); return entry; @@ -322,17 +322,17 @@ public: GlobalLoot entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; entry.loottable_id = atoi(row[2]); entry.enabled = atoi(row[3]); entry.min_level = atoi(row[4]); entry.max_level = atoi(row[5]); entry.rare = atoi(row[6]); entry.raid = atoi(row[7]); - entry.race = row[8]; - entry.class = row[9]; - entry.bodytype = row[10]; - entry.zone = row[11]; + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; entry.hot_zone = atoi(row[12]); all_entries.push_back(entry); @@ -359,17 +359,17 @@ public: GlobalLoot entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; entry.loottable_id = atoi(row[2]); entry.enabled = atoi(row[3]); entry.min_level = atoi(row[4]); entry.max_level = atoi(row[5]); entry.rare = atoi(row[6]); entry.raid = atoi(row[7]); - entry.race = row[8]; - entry.class = row[9]; - entry.bodytype = row[10]; - entry.zone = row[11]; + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; entry.hot_zone = atoi(row[12]); all_entries.push_back(entry); diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index 6c371f26d..5ea9f1a42 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -130,9 +130,9 @@ public: if (results.RowCount() == 1) { GmIps entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.account_id = atoi(row[1]); - entry.ip_address = row[2]; + entry.ip_address = row[2] ? row[2] : ""; return entry; } @@ -248,9 +248,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GmIps entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.account_id = atoi(row[1]); - entry.ip_address = row[2]; + entry.ip_address = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -275,9 +275,9 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GmIps entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.account_id = atoi(row[1]); - entry.ip_address = row[2]; + entry.ip_address = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index 3b2e57674..652d7554b 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -172,10 +172,10 @@ public: entry.min_x = atof(row[6]); entry.min_y = atof(row[7]); entry.heading = atof(row[8]); - entry.name = row[9]; + entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); - entry.comment = row[12]; + entry.comment = row[12] ? row[12] : ""; entry.respawn_timer = atoi(row[13]); return entry; @@ -337,10 +337,10 @@ public: entry.min_x = atof(row[6]); entry.min_y = atof(row[7]); entry.heading = atof(row[8]); - entry.name = row[9]; + entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); - entry.comment = row[12]; + entry.comment = row[12] ? row[12] : ""; entry.respawn_timer = atoi(row[13]); all_entries.push_back(entry); @@ -375,10 +375,10 @@ public: entry.min_x = atof(row[6]); entry.min_y = atof(row[7]); entry.heading = atof(row[8]); - entry.name = row[9]; + entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); - entry.comment = row[12]; + entry.comment = row[12] ? row[12] : ""; entry.respawn_timer = atoi(row[13]); all_entries.push_back(entry); diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 93f50d837..71e1be81c 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -135,7 +135,7 @@ public: entry.groupid = atoi(row[0]); entry.charid = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.ismerc = atoi(row[3]); return entry; @@ -254,7 +254,7 @@ public: entry.groupid = atoi(row[0]); entry.charid = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.ismerc = atoi(row[3]); all_entries.push_back(entry); @@ -282,7 +282,7 @@ public: entry.groupid = atoi(row[0]); entry.charid = atoi(row[1]); - entry.name = row[2]; + entry.name = row[2] ? row[2] : ""; entry.ismerc = atoi(row[3]); all_entries.push_back(entry); diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index 55ba5da93..f3c0eb5d7 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -149,13 +149,13 @@ public: GroupLeaders entry{}; entry.gid = atoi(row[0]); - entry.leadername = row[1]; - entry.marknpc = row[2]; - entry.leadershipaa = row[3]; - entry.maintank = row[4]; - entry.assist = row[5]; - entry.puller = row[6]; - entry.mentoree = row[7]; + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; entry.mentor_percent = atoi(row[8]); return entry; @@ -294,13 +294,13 @@ public: GroupLeaders entry{}; entry.gid = atoi(row[0]); - entry.leadername = row[1]; - entry.marknpc = row[2]; - entry.leadershipaa = row[3]; - entry.maintank = row[4]; - entry.assist = row[5]; - entry.puller = row[6]; - entry.mentoree = row[7]; + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; entry.mentor_percent = atoi(row[8]); all_entries.push_back(entry); @@ -327,13 +327,13 @@ public: GroupLeaders entry{}; entry.gid = atoi(row[0]); - entry.leadername = row[1]; - entry.marknpc = row[2]; - entry.leadershipaa = row[3]; - entry.maintank = row[4]; - entry.assist = row[5]; - entry.puller = row[6]; - entry.mentoree = row[7]; + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; entry.mentor_percent = atoi(row[8]); all_entries.push_back(entry); diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index 8ee1f3c9f..5bfa64dbd 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -155,7 +155,7 @@ public: entry.total_tribute = atoi(row[4]); entry.last_tribute = atoi(row[5]); entry.banker = atoi(row[6]); - entry.public_note = row[7]; + entry.public_note = row[7] ? row[7] : ""; entry.alt = atoi(row[8]); return entry; @@ -300,7 +300,7 @@ public: entry.total_tribute = atoi(row[4]); entry.last_tribute = atoi(row[5]); entry.banker = atoi(row[6]); - entry.public_note = row[7]; + entry.public_note = row[7] ? row[7] : ""; entry.alt = atoi(row[8]); all_entries.push_back(entry); @@ -333,7 +333,7 @@ public: entry.total_tribute = atoi(row[4]); entry.last_tribute = atoi(row[5]); entry.banker = atoi(row[6]); - entry.public_note = row[7]; + entry.public_note = row[7] ? row[7] : ""; entry.alt = atoi(row[8]); all_entries.push_back(entry); diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h index 53c1f4f55..2ccb1b5e4 100644 --- a/common/repositories/guild_ranks_repository.h +++ b/common/repositories/guild_ranks_repository.h @@ -156,7 +156,7 @@ public: entry.guild_id = atoi(row[0]); entry.rank = atoi(row[1]); - entry.title = row[2]; + entry.title = row[2] ? row[2] : ""; entry.can_hear = atoi(row[3]); entry.can_speak = atoi(row[4]); entry.can_invite = atoi(row[5]); @@ -306,7 +306,7 @@ public: entry.guild_id = atoi(row[0]); entry.rank = atoi(row[1]); - entry.title = row[2]; + entry.title = row[2] ? row[2] : ""; entry.can_hear = atoi(row[3]); entry.can_speak = atoi(row[4]); entry.can_invite = atoi(row[5]); @@ -341,7 +341,7 @@ public: entry.guild_id = atoi(row[0]); entry.rank = atoi(row[1]); - entry.title = row[2]; + entry.title = row[2] ? row[2] : ""; entry.can_hear = atoi(row[3]); entry.can_speak = atoi(row[4]); entry.can_invite = atoi(row[5]); diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index e6e2c92f0..74eb23c94 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -149,14 +149,14 @@ public: Guilds entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.leader = atoi(row[2]); entry.minstatus = atoi(row[3]); - entry.motd = row[4]; + entry.motd = row[4] ? row[4] : ""; entry.tribute = atoi(row[5]); - entry.motd_setter = row[6]; - entry.channel = row[7]; - entry.url = row[8]; + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; return entry; } @@ -294,14 +294,14 @@ public: Guilds entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.leader = atoi(row[2]); entry.minstatus = atoi(row[3]); - entry.motd = row[4]; + entry.motd = row[4] ? row[4] : ""; entry.tribute = atoi(row[5]); - entry.motd_setter = row[6]; - entry.channel = row[7]; - entry.url = row[8]; + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; all_entries.push_back(entry); } @@ -327,14 +327,14 @@ public: Guilds entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.leader = atoi(row[2]); entry.minstatus = atoi(row[3]); - entry.motd = row[4]; + entry.motd = row[4] ? row[4] : ""; entry.tribute = atoi(row[5]); - entry.motd_setter = row[6]; - entry.channel = row[7]; - entry.url = row[8]; + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index a12fcb980..ca1d9c928 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -140,11 +140,11 @@ public: Hackers entry{}; entry.id = atoi(row[0]); - entry.account = row[1]; - entry.name = row[2]; - entry.hacked = row[3]; - entry.zone = row[4]; - entry.date = row[5]; + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; return entry; } @@ -273,11 +273,11 @@ public: Hackers entry{}; entry.id = atoi(row[0]); - entry.account = row[1]; - entry.name = row[2]; - entry.hacked = row[3]; - entry.zone = row[4]; - entry.date = row[5]; + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; all_entries.push_back(entry); } @@ -303,11 +303,11 @@ public: Hackers entry{}; entry.id = atoi(row[0]); - entry.account = row[1]; - entry.name = row[2]; - entry.hacked = row[3]; - entry.zone = row[4]; - entry.date = row[5]; + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index 93614a880..56d7814dc 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -139,12 +139,12 @@ public: if (results.RowCount() == 1) { Horses entry{}; - entry.filename = row[0]; + entry.filename = row[0] ? row[0] : ""; entry.race = atoi(row[1]); entry.gender = atoi(row[2]); entry.texture = atoi(row[3]); entry.mountspeed = atof(row[4]); - entry.notes = row[5]; + entry.notes = row[5] ? row[5] : ""; return entry; } @@ -272,12 +272,12 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Horses entry{}; - entry.filename = row[0]; + entry.filename = row[0] ? row[0] : ""; entry.race = atoi(row[1]); entry.gender = atoi(row[2]); entry.texture = atoi(row[3]); entry.mountspeed = atof(row[4]); - entry.notes = row[5]; + entry.notes = row[5] ? row[5] : ""; all_entries.push_back(entry); } @@ -302,12 +302,12 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Horses entry{}; - entry.filename = row[0]; + entry.filename = row[0] ? row[0] : ""; entry.race = atoi(row[1]); entry.gender = atoi(row[2]); entry.texture = atoi(row[3]); entry.mountspeed = atof(row[4]); - entry.notes = row[5]; + entry.notes = row[5] ? row[5] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index 18964010a..7f83adcc8 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -181,7 +181,7 @@ public: entry.augslot5 = atoi(row[9]); entry.augslot6 = atoi(row[10]); entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12]; + entry.custom_data = row[12] ? row[12] : ""; entry.ornamenticon = atoi(row[13]); entry.ornamentidfile = atoi(row[14]); entry.ornament_hero_model = atoi(row[15]); @@ -351,7 +351,7 @@ public: entry.augslot5 = atoi(row[9]); entry.augslot6 = atoi(row[10]); entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12]; + entry.custom_data = row[12] ? row[12] : ""; entry.ornamenticon = atoi(row[13]); entry.ornamentidfile = atoi(row[14]); entry.ornament_hero_model = atoi(row[15]); @@ -391,7 +391,7 @@ public: entry.augslot5 = atoi(row[9]); entry.augslot6 = atoi(row[10]); entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12]; + entry.custom_data = row[12] ? row[12] : ""; entry.ornamenticon = atoi(row[13]); entry.ornamentidfile = atoi(row[14]); entry.ornament_hero_model = atoi(row[15]); diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index 670576616..ee28dfc56 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -185,7 +185,7 @@ public: entry.augslot5 = atoi(row[10]); entry.augslot6 = atoi(row[11]); entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13]; + entry.custom_data = row[13] ? row[13] : ""; entry.ornamenticon = atoi(row[14]); entry.ornamentidfile = atoi(row[15]); entry.ornament_hero_model = atoi(row[16]); @@ -356,7 +356,7 @@ public: entry.augslot5 = atoi(row[10]); entry.augslot6 = atoi(row[11]); entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13]; + entry.custom_data = row[13] ? row[13] : ""; entry.ornamenticon = atoi(row[14]); entry.ornamentidfile = atoi(row[15]); entry.ornament_hero_model = atoi(row[16]); @@ -397,7 +397,7 @@ public: entry.augslot5 = atoi(row[10]); entry.augslot6 = atoi(row[11]); entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13]; + entry.custom_data = row[13] ? row[13] : ""; entry.ornamenticon = atoi(row[14]); entry.ornamentidfile = atoi(row[15]); entry.ornament_hero_model = atoi(row[16]); diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index 544cb958b..ad0d0030d 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -131,7 +131,7 @@ public: IpExemptions entry{}; entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1]; + entry.exemption_ip = row[1] ? row[1] : ""; entry.exemption_amount = atoi(row[2]); return entry; @@ -252,7 +252,7 @@ public: IpExemptions entry{}; entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1]; + entry.exemption_ip = row[1] ? row[1] : ""; entry.exemption_amount = atoi(row[2]); all_entries.push_back(entry); @@ -279,7 +279,7 @@ public: IpExemptions entry{}; entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1]; + entry.exemption_ip = row[1] ? row[1] : ""; entry.exemption_amount = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index f16427c95..4fb244d0d 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -143,7 +143,7 @@ public: entry.it_chance = atoi(row[1]); entry.it_level = atoi(row[2]); entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4]; + entry.it_qglobal = row[4] ? row[4] : ""; entry.it_bagslot = atoi(row[5]); return entry; @@ -276,7 +276,7 @@ public: entry.it_chance = atoi(row[1]); entry.it_level = atoi(row[2]); entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4]; + entry.it_qglobal = row[4] ? row[4] : ""; entry.it_bagslot = atoi(row[5]); all_entries.push_back(entry); @@ -306,7 +306,7 @@ public: entry.it_chance = atoi(row[1]); entry.it_level = atoi(row[2]); entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4]; + entry.it_qglobal = row[4] ? row[4] : ""; entry.it_bagslot = atoi(row[5]); all_entries.push_back(entry); diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index 395fc3a4d..1ff2c3206 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -978,7 +978,7 @@ public: entry.id = atoi(row[0]); entry.minstatus = atoi(row[1]); - entry.Name = row[2]; + entry.Name = row[2] ? row[2] : ""; entry.aagi = atoi(row[3]); entry.ac = atoi(row[4]); entry.accuracy = atoi(row[5]); @@ -1018,11 +1018,11 @@ public: entry.book = atoi(row[39]); entry.casttime = atoi(row[40]); entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42]; - entry.charmfileid = row[43]; + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; entry.classes = atoi(row[44]); entry.color = atoi(row[45]); - entry.combateffects = row[46]; + entry.combateffects = row[46] ? row[46] : ""; entry.extradmgskill = atoi(row[47]); entry.extradmgamt = atoi(row[48]); entry.price = atoi(row[49]); @@ -1047,7 +1047,7 @@ public: entry.factionmod2 = atoi(row[68]); entry.factionmod3 = atoi(row[69]); entry.factionmod4 = atoi(row[70]); - entry.filename = row[71]; + entry.filename = row[71] ? row[71] : ""; entry.focuseffect = atoi(row[72]); entry.fr = atoi(row[73]); entry.fvnodrop = atoi(row[74]); @@ -1056,14 +1056,14 @@ public: entry.hp = atoi(row[77]); entry.regen = atoi(row[78]); entry.icon = atoi(row[79]); - entry.idfile = row[80]; + entry.idfile = row[80] ? row[80] : ""; entry.itemclass = atoi(row[81]); entry.itemtype = atoi(row[82]); entry.ldonprice = atoi(row[83]); entry.ldontheme = atoi(row[84]); entry.ldonsold = atoi(row[85]); entry.light = atoi(row[86]); - entry.lore = row[87]; + entry.lore = row[87] ? row[87] : ""; entry.loregroup = atoi(row[88]); entry.magic = atoi(row[89]); entry.mana = atoi(row[90]); @@ -1110,8 +1110,8 @@ public: entry.UNK124 = atoi(row[131]); entry.attuneable = atoi(row[132]); entry.nopet = atoi(row[133]); - entry.updated = row[134]; - entry.comment = row[135]; + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; entry.UNK127 = atoi(row[136]); entry.pointtype = atoi(row[137]); entry.potionbelt = atoi(row[138]); @@ -1119,7 +1119,7 @@ public: entry.stacksize = atoi(row[140]); entry.notransfer = atoi(row[141]); entry.stackable = atoi(row[142]); - entry.UNK134 = row[143]; + entry.UNK134 = row[143] ? row[143] : ""; entry.UNK137 = atoi(row[144]); entry.proceffect = atoi(row[145]); entry.proctype = atoi(row[146]); @@ -1140,12 +1140,12 @@ public: entry.scrolllevel2 = atoi(row[161]); entry.scrolllevel = atoi(row[162]); entry.UNK157 = atoi(row[163]); - entry.serialized = row[164]; - entry.verified = row[165]; - entry.serialization = row[166]; - entry.source = row[167]; + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169]; + entry.lorefile = row[169] ? row[169] : ""; entry.UNK014 = atoi(row[170]); entry.svcorruption = atoi(row[171]); entry.skillmodmax = atoi(row[172]); @@ -1159,36 +1159,36 @@ public: entry.UNK120 = atoi(row[180]); entry.UNK121 = atoi(row[181]); entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183]; + entry.UNK132 = row[183] ? row[183] : ""; entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185]; + entry.clickunk6 = row[185] ? row[185] : ""; entry.clickunk7 = atoi(row[186]); entry.procunk1 = atoi(row[187]); entry.procunk2 = atoi(row[188]); entry.procunk3 = atoi(row[189]); entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191]; + entry.procunk6 = row[191] ? row[191] : ""; entry.procunk7 = atoi(row[192]); entry.wornunk1 = atoi(row[193]); entry.wornunk2 = atoi(row[194]); entry.wornunk3 = atoi(row[195]); entry.wornunk4 = atoi(row[196]); entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198]; + entry.wornunk6 = row[198] ? row[198] : ""; entry.wornunk7 = atoi(row[199]); entry.focusunk1 = atoi(row[200]); entry.focusunk2 = atoi(row[201]); entry.focusunk3 = atoi(row[202]); entry.focusunk4 = atoi(row[203]); entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205]; + entry.focusunk6 = row[205] ? row[205] : ""; entry.focusunk7 = atoi(row[206]); entry.scrollunk1 = atoi(row[207]); entry.scrollunk2 = atoi(row[208]); entry.scrollunk3 = atoi(row[209]); entry.scrollunk4 = atoi(row[210]); entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212]; + entry.scrollunk6 = row[212] ? row[212] : ""; entry.scrollunk7 = atoi(row[213]); entry.UNK193 = atoi(row[214]); entry.purity = atoi(row[215]); @@ -1196,11 +1196,11 @@ public: entry.evoid = atoi(row[217]); entry.evolvinglevel = atoi(row[218]); entry.evomax = atoi(row[219]); - entry.clickname = row[220]; - entry.procname = row[221]; - entry.wornname = row[222]; - entry.focusname = row[223]; - entry.scrollname = row[224]; + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; entry.dsmitigation = atoi(row[225]); entry.heroic_str = atoi(row[226]); entry.heroic_int = atoi(row[227]); @@ -1219,7 +1219,7 @@ public: entry.spelldmg = atoi(row[240]); entry.clairvoyance = atoi(row[241]); entry.backstabdmg = atoi(row[242]); - entry.created = row[243]; + entry.created = row[243] ? row[243] : ""; entry.elitematerial = atoi(row[244]); entry.ldonsellbackrate = atoi(row[245]); entry.scriptfileid = atoi(row[246]); @@ -1234,7 +1234,7 @@ public: entry.bardunk3 = atoi(row[255]); entry.bardunk4 = atoi(row[256]); entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258]; + entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); entry.UNK219 = atoi(row[261]); @@ -2227,7 +2227,7 @@ public: entry.id = atoi(row[0]); entry.minstatus = atoi(row[1]); - entry.Name = row[2]; + entry.Name = row[2] ? row[2] : ""; entry.aagi = atoi(row[3]); entry.ac = atoi(row[4]); entry.accuracy = atoi(row[5]); @@ -2267,11 +2267,11 @@ public: entry.book = atoi(row[39]); entry.casttime = atoi(row[40]); entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42]; - entry.charmfileid = row[43]; + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; entry.classes = atoi(row[44]); entry.color = atoi(row[45]); - entry.combateffects = row[46]; + entry.combateffects = row[46] ? row[46] : ""; entry.extradmgskill = atoi(row[47]); entry.extradmgamt = atoi(row[48]); entry.price = atoi(row[49]); @@ -2296,7 +2296,7 @@ public: entry.factionmod2 = atoi(row[68]); entry.factionmod3 = atoi(row[69]); entry.factionmod4 = atoi(row[70]); - entry.filename = row[71]; + entry.filename = row[71] ? row[71] : ""; entry.focuseffect = atoi(row[72]); entry.fr = atoi(row[73]); entry.fvnodrop = atoi(row[74]); @@ -2305,14 +2305,14 @@ public: entry.hp = atoi(row[77]); entry.regen = atoi(row[78]); entry.icon = atoi(row[79]); - entry.idfile = row[80]; + entry.idfile = row[80] ? row[80] : ""; entry.itemclass = atoi(row[81]); entry.itemtype = atoi(row[82]); entry.ldonprice = atoi(row[83]); entry.ldontheme = atoi(row[84]); entry.ldonsold = atoi(row[85]); entry.light = atoi(row[86]); - entry.lore = row[87]; + entry.lore = row[87] ? row[87] : ""; entry.loregroup = atoi(row[88]); entry.magic = atoi(row[89]); entry.mana = atoi(row[90]); @@ -2359,8 +2359,8 @@ public: entry.UNK124 = atoi(row[131]); entry.attuneable = atoi(row[132]); entry.nopet = atoi(row[133]); - entry.updated = row[134]; - entry.comment = row[135]; + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; entry.UNK127 = atoi(row[136]); entry.pointtype = atoi(row[137]); entry.potionbelt = atoi(row[138]); @@ -2368,7 +2368,7 @@ public: entry.stacksize = atoi(row[140]); entry.notransfer = atoi(row[141]); entry.stackable = atoi(row[142]); - entry.UNK134 = row[143]; + entry.UNK134 = row[143] ? row[143] : ""; entry.UNK137 = atoi(row[144]); entry.proceffect = atoi(row[145]); entry.proctype = atoi(row[146]); @@ -2389,12 +2389,12 @@ public: entry.scrolllevel2 = atoi(row[161]); entry.scrolllevel = atoi(row[162]); entry.UNK157 = atoi(row[163]); - entry.serialized = row[164]; - entry.verified = row[165]; - entry.serialization = row[166]; - entry.source = row[167]; + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169]; + entry.lorefile = row[169] ? row[169] : ""; entry.UNK014 = atoi(row[170]); entry.svcorruption = atoi(row[171]); entry.skillmodmax = atoi(row[172]); @@ -2408,36 +2408,36 @@ public: entry.UNK120 = atoi(row[180]); entry.UNK121 = atoi(row[181]); entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183]; + entry.UNK132 = row[183] ? row[183] : ""; entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185]; + entry.clickunk6 = row[185] ? row[185] : ""; entry.clickunk7 = atoi(row[186]); entry.procunk1 = atoi(row[187]); entry.procunk2 = atoi(row[188]); entry.procunk3 = atoi(row[189]); entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191]; + entry.procunk6 = row[191] ? row[191] : ""; entry.procunk7 = atoi(row[192]); entry.wornunk1 = atoi(row[193]); entry.wornunk2 = atoi(row[194]); entry.wornunk3 = atoi(row[195]); entry.wornunk4 = atoi(row[196]); entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198]; + entry.wornunk6 = row[198] ? row[198] : ""; entry.wornunk7 = atoi(row[199]); entry.focusunk1 = atoi(row[200]); entry.focusunk2 = atoi(row[201]); entry.focusunk3 = atoi(row[202]); entry.focusunk4 = atoi(row[203]); entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205]; + entry.focusunk6 = row[205] ? row[205] : ""; entry.focusunk7 = atoi(row[206]); entry.scrollunk1 = atoi(row[207]); entry.scrollunk2 = atoi(row[208]); entry.scrollunk3 = atoi(row[209]); entry.scrollunk4 = atoi(row[210]); entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212]; + entry.scrollunk6 = row[212] ? row[212] : ""; entry.scrollunk7 = atoi(row[213]); entry.UNK193 = atoi(row[214]); entry.purity = atoi(row[215]); @@ -2445,11 +2445,11 @@ public: entry.evoid = atoi(row[217]); entry.evolvinglevel = atoi(row[218]); entry.evomax = atoi(row[219]); - entry.clickname = row[220]; - entry.procname = row[221]; - entry.wornname = row[222]; - entry.focusname = row[223]; - entry.scrollname = row[224]; + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; entry.dsmitigation = atoi(row[225]); entry.heroic_str = atoi(row[226]); entry.heroic_int = atoi(row[227]); @@ -2468,7 +2468,7 @@ public: entry.spelldmg = atoi(row[240]); entry.clairvoyance = atoi(row[241]); entry.backstabdmg = atoi(row[242]); - entry.created = row[243]; + entry.created = row[243] ? row[243] : ""; entry.elitematerial = atoi(row[244]); entry.ldonsellbackrate = atoi(row[245]); entry.scriptfileid = atoi(row[246]); @@ -2483,7 +2483,7 @@ public: entry.bardunk3 = atoi(row[255]); entry.bardunk4 = atoi(row[256]); entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258]; + entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); entry.UNK219 = atoi(row[261]); @@ -2536,7 +2536,7 @@ public: entry.id = atoi(row[0]); entry.minstatus = atoi(row[1]); - entry.Name = row[2]; + entry.Name = row[2] ? row[2] : ""; entry.aagi = atoi(row[3]); entry.ac = atoi(row[4]); entry.accuracy = atoi(row[5]); @@ -2576,11 +2576,11 @@ public: entry.book = atoi(row[39]); entry.casttime = atoi(row[40]); entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42]; - entry.charmfileid = row[43]; + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; entry.classes = atoi(row[44]); entry.color = atoi(row[45]); - entry.combateffects = row[46]; + entry.combateffects = row[46] ? row[46] : ""; entry.extradmgskill = atoi(row[47]); entry.extradmgamt = atoi(row[48]); entry.price = atoi(row[49]); @@ -2605,7 +2605,7 @@ public: entry.factionmod2 = atoi(row[68]); entry.factionmod3 = atoi(row[69]); entry.factionmod4 = atoi(row[70]); - entry.filename = row[71]; + entry.filename = row[71] ? row[71] : ""; entry.focuseffect = atoi(row[72]); entry.fr = atoi(row[73]); entry.fvnodrop = atoi(row[74]); @@ -2614,14 +2614,14 @@ public: entry.hp = atoi(row[77]); entry.regen = atoi(row[78]); entry.icon = atoi(row[79]); - entry.idfile = row[80]; + entry.idfile = row[80] ? row[80] : ""; entry.itemclass = atoi(row[81]); entry.itemtype = atoi(row[82]); entry.ldonprice = atoi(row[83]); entry.ldontheme = atoi(row[84]); entry.ldonsold = atoi(row[85]); entry.light = atoi(row[86]); - entry.lore = row[87]; + entry.lore = row[87] ? row[87] : ""; entry.loregroup = atoi(row[88]); entry.magic = atoi(row[89]); entry.mana = atoi(row[90]); @@ -2668,8 +2668,8 @@ public: entry.UNK124 = atoi(row[131]); entry.attuneable = atoi(row[132]); entry.nopet = atoi(row[133]); - entry.updated = row[134]; - entry.comment = row[135]; + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; entry.UNK127 = atoi(row[136]); entry.pointtype = atoi(row[137]); entry.potionbelt = atoi(row[138]); @@ -2677,7 +2677,7 @@ public: entry.stacksize = atoi(row[140]); entry.notransfer = atoi(row[141]); entry.stackable = atoi(row[142]); - entry.UNK134 = row[143]; + entry.UNK134 = row[143] ? row[143] : ""; entry.UNK137 = atoi(row[144]); entry.proceffect = atoi(row[145]); entry.proctype = atoi(row[146]); @@ -2698,12 +2698,12 @@ public: entry.scrolllevel2 = atoi(row[161]); entry.scrolllevel = atoi(row[162]); entry.UNK157 = atoi(row[163]); - entry.serialized = row[164]; - entry.verified = row[165]; - entry.serialization = row[166]; - entry.source = row[167]; + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169]; + entry.lorefile = row[169] ? row[169] : ""; entry.UNK014 = atoi(row[170]); entry.svcorruption = atoi(row[171]); entry.skillmodmax = atoi(row[172]); @@ -2717,36 +2717,36 @@ public: entry.UNK120 = atoi(row[180]); entry.UNK121 = atoi(row[181]); entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183]; + entry.UNK132 = row[183] ? row[183] : ""; entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185]; + entry.clickunk6 = row[185] ? row[185] : ""; entry.clickunk7 = atoi(row[186]); entry.procunk1 = atoi(row[187]); entry.procunk2 = atoi(row[188]); entry.procunk3 = atoi(row[189]); entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191]; + entry.procunk6 = row[191] ? row[191] : ""; entry.procunk7 = atoi(row[192]); entry.wornunk1 = atoi(row[193]); entry.wornunk2 = atoi(row[194]); entry.wornunk3 = atoi(row[195]); entry.wornunk4 = atoi(row[196]); entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198]; + entry.wornunk6 = row[198] ? row[198] : ""; entry.wornunk7 = atoi(row[199]); entry.focusunk1 = atoi(row[200]); entry.focusunk2 = atoi(row[201]); entry.focusunk3 = atoi(row[202]); entry.focusunk4 = atoi(row[203]); entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205]; + entry.focusunk6 = row[205] ? row[205] : ""; entry.focusunk7 = atoi(row[206]); entry.scrollunk1 = atoi(row[207]); entry.scrollunk2 = atoi(row[208]); entry.scrollunk3 = atoi(row[209]); entry.scrollunk4 = atoi(row[210]); entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212]; + entry.scrollunk6 = row[212] ? row[212] : ""; entry.scrollunk7 = atoi(row[213]); entry.UNK193 = atoi(row[214]); entry.purity = atoi(row[215]); @@ -2754,11 +2754,11 @@ public: entry.evoid = atoi(row[217]); entry.evolvinglevel = atoi(row[218]); entry.evomax = atoi(row[219]); - entry.clickname = row[220]; - entry.procname = row[221]; - entry.wornname = row[222]; - entry.focusname = row[223]; - entry.scrollname = row[224]; + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; entry.dsmitigation = atoi(row[225]); entry.heroic_str = atoi(row[226]); entry.heroic_int = atoi(row[227]); @@ -2777,7 +2777,7 @@ public: entry.spelldmg = atoi(row[240]); entry.clairvoyance = atoi(row[241]); entry.backstabdmg = atoi(row[242]); - entry.created = row[243]; + entry.created = row[243] ? row[243] : ""; entry.elitematerial = atoi(row[244]); entry.ldonsellbackrate = atoi(row[245]); entry.scriptfileid = atoi(row[246]); @@ -2792,7 +2792,7 @@ public: entry.bardunk3 = atoi(row[255]); entry.bardunk4 = atoi(row[256]); entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258]; + entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); entry.UNK219 = atoi(row[261]); diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h index 2471bd061..3f0ad71cf 100644 --- a/common/repositories/launcher_repository.h +++ b/common/repositories/launcher_repository.h @@ -127,7 +127,7 @@ public: if (results.RowCount() == 1) { Launcher entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.dynamics = atoi(row[1]); return entry; @@ -244,7 +244,7 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Launcher entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.dynamics = atoi(row[1]); all_entries.push_back(entry); @@ -270,7 +270,7 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Launcher entry{}; - entry.name = row[0]; + entry.name = row[0] ? row[0] : ""; entry.dynamics = atoi(row[1]); all_entries.push_back(entry); diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h index 225a12226..010659f82 100644 --- a/common/repositories/launcher_zones_repository.h +++ b/common/repositories/launcher_zones_repository.h @@ -130,8 +130,8 @@ public: if (results.RowCount() == 1) { LauncherZones entry{}; - entry.launcher = row[0]; - entry.zone = row[1]; + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; entry.port = atoi(row[2]); return entry; @@ -248,8 +248,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { LauncherZones entry{}; - entry.launcher = row[0]; - entry.zone = row[1]; + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; entry.port = atoi(row[2]); all_entries.push_back(entry); @@ -275,8 +275,8 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { LauncherZones entry{}; - entry.launcher = row[0]; - entry.zone = row[1]; + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; entry.port = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index ffc987c50..7a6d5012b 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -149,8 +149,8 @@ public: Lfguild entry{}; entry.type = atoi(row[0]); - entry.name = row[1]; - entry.comment = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; entry.fromlevel = atoi(row[3]); entry.tolevel = atoi(row[4]); entry.classes = atoi(row[5]); @@ -291,8 +291,8 @@ public: Lfguild entry{}; entry.type = atoi(row[0]); - entry.name = row[1]; - entry.comment = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; entry.fromlevel = atoi(row[3]); entry.tolevel = atoi(row[4]); entry.classes = atoi(row[5]); @@ -324,8 +324,8 @@ public: Lfguild entry{}; entry.type = atoi(row[0]); - entry.name = row[1]; - entry.comment = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; entry.fromlevel = atoi(row[3]); entry.tolevel = atoi(row[4]); entry.classes = atoi(row[5]); diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index 3f35a9add..a9d360668 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -149,14 +149,14 @@ public: LoginAccounts entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.account_email = row[3]; - entry.source_loginserver = row[4]; - entry.last_ip_address = row[5]; - entry.last_login_date = row[6]; - entry.created_at = row[7]; - entry.updated_at = row[8]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; return entry; } @@ -294,14 +294,14 @@ public: LoginAccounts entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.account_email = row[3]; - entry.source_loginserver = row[4]; - entry.last_ip_address = row[5]; - entry.last_login_date = row[6]; - entry.created_at = row[7]; - entry.updated_at = row[8]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; all_entries.push_back(entry); } @@ -327,14 +327,14 @@ public: LoginAccounts entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.account_email = row[3]; - entry.source_loginserver = row[4]; - entry.last_ip_address = row[5]; - entry.last_login_date = row[6]; - entry.created_at = row[7]; - entry.updated_at = row[8]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index 8c64eb69d..766b0542d 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -140,11 +140,11 @@ public: LoginApiTokens entry{}; entry.id = atoi(row[0]); - entry.token = row[1]; + entry.token = row[1] ? row[1] : ""; entry.can_write = atoi(row[2]); entry.can_read = atoi(row[3]); - entry.created_at = row[4]; - entry.updated_at = row[5]; + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; return entry; } @@ -273,11 +273,11 @@ public: LoginApiTokens entry{}; entry.id = atoi(row[0]); - entry.token = row[1]; + entry.token = row[1] ? row[1] : ""; entry.can_write = atoi(row[2]); entry.can_read = atoi(row[3]); - entry.created_at = row[4]; - entry.updated_at = row[5]; + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; all_entries.push_back(entry); } @@ -303,11 +303,11 @@ public: LoginApiTokens entry{}; entry.id = atoi(row[0]); - entry.token = row[1]; + entry.token = row[1] ? row[1] : ""; entry.can_write = atoi(row[2]); entry.can_read = atoi(row[3]); - entry.created_at = row[4]; - entry.updated_at = row[5]; + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index 92eccc7cb..680e76d36 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -146,13 +146,13 @@ public: LoginServerAdmins entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.first_name = row[3]; - entry.last_name = row[4]; - entry.email = row[5]; - entry.registration_date = row[6]; - entry.registration_ip_address = row[7]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; return entry; } @@ -287,13 +287,13 @@ public: LoginServerAdmins entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.first_name = row[3]; - entry.last_name = row[4]; - entry.email = row[5]; - entry.registration_date = row[6]; - entry.registration_ip_address = row[7]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; all_entries.push_back(entry); } @@ -319,13 +319,13 @@ public: LoginServerAdmins entry{}; entry.id = atoi(row[0]); - entry.account_name = row[1]; - entry.account_password = row[2]; - entry.first_name = row[3]; - entry.last_name = row[4]; - entry.email = row[5]; - entry.registration_date = row[6]; - entry.registration_ip_address = row[7]; + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index f844ce5ec..8d5dd1541 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -128,7 +128,7 @@ public: LoginServerListTypes entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: LoginServerListTypes entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: LoginServerListTypes entry{}; entry.id = atoi(row[0]); - entry.description = row[1]; + entry.description = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index 1aa2e40ef..f5101503d 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -152,15 +152,15 @@ public: LoginWorldServers entry{}; entry.id = atoi(row[0]); - entry.long_name = row[1]; - entry.short_name = row[2]; - entry.tag_description = row[3]; + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5]; - entry.last_ip_address = row[6]; + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; entry.login_server_admin_id = atoi(row[7]); entry.is_server_trusted = atoi(row[8]); - entry.note = row[9]; + entry.note = row[9] ? row[9] : ""; return entry; } @@ -301,15 +301,15 @@ public: LoginWorldServers entry{}; entry.id = atoi(row[0]); - entry.long_name = row[1]; - entry.short_name = row[2]; - entry.tag_description = row[3]; + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5]; - entry.last_ip_address = row[6]; + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; entry.login_server_admin_id = atoi(row[7]); entry.is_server_trusted = atoi(row[8]); - entry.note = row[9]; + entry.note = row[9] ? row[9] : ""; all_entries.push_back(entry); } @@ -335,15 +335,15 @@ public: LoginWorldServers entry{}; entry.id = atoi(row[0]); - entry.long_name = row[1]; - entry.short_name = row[2]; - entry.tag_description = row[3]; + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5]; - entry.last_ip_address = row[6]; + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; entry.login_server_admin_id = atoi(row[7]); entry.is_server_trusted = atoi(row[8]); - entry.note = row[9]; + entry.note = row[9] ? row[9] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index 2f7c5d089..fb7bdc1ad 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -137,7 +137,7 @@ public: LogsysCategories entry{}; entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1]; + entry.log_category_description = row[1] ? row[1] : ""; entry.log_to_console = atoi(row[2]); entry.log_to_file = atoi(row[3]); entry.log_to_gmsay = atoi(row[4]); @@ -266,7 +266,7 @@ public: LogsysCategories entry{}; entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1]; + entry.log_category_description = row[1] ? row[1] : ""; entry.log_to_console = atoi(row[2]); entry.log_to_file = atoi(row[3]); entry.log_to_gmsay = atoi(row[4]); @@ -295,7 +295,7 @@ public: LogsysCategories entry{}; entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1]; + entry.log_category_description = row[1] ? row[1] : ""; entry.log_to_console = atoi(row[2]); entry.log_to_file = atoi(row[3]); entry.log_to_gmsay = atoi(row[4]); diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h index 45069fa56..45eecb753 100644 --- a/common/repositories/lootdrop_repository.h +++ b/common/repositories/lootdrop_repository.h @@ -128,7 +128,7 @@ public: Lootdrop entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: Lootdrop entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: Lootdrop entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h index 4f87c30b0..33aa27a42 100644 --- a/common/repositories/loottable_repository.h +++ b/common/repositories/loottable_repository.h @@ -140,7 +140,7 @@ public: Loottable entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.mincash = atoi(row[2]); entry.maxcash = atoi(row[3]); entry.avgcoin = atoi(row[4]); @@ -273,7 +273,7 @@ public: Loottable entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.mincash = atoi(row[2]); entry.maxcash = atoi(row[3]); entry.avgcoin = atoi(row[4]); @@ -303,7 +303,7 @@ public: Loottable entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.mincash = atoi(row[2]); entry.maxcash = atoi(row[3]); entry.avgcoin = atoi(row[4]); diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index 090d24900..498f904bb 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -148,10 +148,10 @@ public: entry.msgid = atoi(row[0]); entry.charid = atoi(row[1]); entry.timestamp = atoi(row[2]); - entry.from = row[3]; - entry.subject = row[4]; - entry.body = row[5]; - entry.to = row[6]; + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; entry.status = atoi(row[7]); return entry; @@ -289,10 +289,10 @@ public: entry.msgid = atoi(row[0]); entry.charid = atoi(row[1]); entry.timestamp = atoi(row[2]); - entry.from = row[3]; - entry.subject = row[4]; - entry.body = row[5]; - entry.to = row[6]; + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; entry.status = atoi(row[7]); all_entries.push_back(entry); @@ -321,10 +321,10 @@ public: entry.msgid = atoi(row[0]); entry.charid = atoi(row[1]); entry.timestamp = atoi(row[2]); - entry.from = row[3]; - entry.subject = row[4]; - entry.body = row[5]; - entry.to = row[6]; + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; entry.status = atoi(row[7]); all_entries.push_back(entry); diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h index f1190e398..e9046b321 100644 --- a/common/repositories/name_filter_repository.h +++ b/common/repositories/name_filter_repository.h @@ -128,7 +128,7 @@ public: NameFilter entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: NameFilter entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: NameFilter entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 7e0da33dc..55e1b34f5 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -140,7 +140,7 @@ public: entry.emoteid = atoi(row[1]); entry.event_ = atoi(row[2]); entry.type = atoi(row[3]); - entry.text = row[4]; + entry.text = row[4] ? row[4] : ""; return entry; } @@ -269,7 +269,7 @@ public: entry.emoteid = atoi(row[1]); entry.event_ = atoi(row[2]); entry.type = atoi(row[3]); - entry.text = row[4]; + entry.text = row[4] ? row[4] : ""; all_entries.push_back(entry); } @@ -298,7 +298,7 @@ public: entry.emoteid = atoi(row[1]); entry.event_ = atoi(row[2]); entry.type = atoi(row[3]); - entry.text = row[4]; + entry.text = row[4] ? row[4] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index fec72a00a..066413ff9 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -134,7 +134,7 @@ public: NpcFaction entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.primaryfaction = atoi(row[2]); entry.ignore_primary_assist = atoi(row[3]); @@ -259,7 +259,7 @@ public: NpcFaction entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.primaryfaction = atoi(row[2]); entry.ignore_primary_assist = atoi(row[3]); @@ -287,7 +287,7 @@ public: NpcFaction entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.primaryfaction = atoi(row[2]); entry.ignore_primary_assist = atoi(row[3]); diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index 1d3571589..a7f7f80a4 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -232,7 +232,7 @@ public: entry.attack_delay = atoi(row[24]); entry.spell_scale = atoi(row[25]); entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27]; + entry.special_abilities = row[27] ? row[27] : ""; return entry; } @@ -450,7 +450,7 @@ public: entry.attack_delay = atoi(row[24]); entry.spell_scale = atoi(row[25]); entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27]; + entry.special_abilities = row[27] ? row[27] : ""; all_entries.push_back(entry); } @@ -502,7 +502,7 @@ public: entry.attack_delay = atoi(row[24]); entry.spell_scale = atoi(row[25]); entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27]; + entry.special_abilities = row[27] ? row[27] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index 8f4908175..5dc32d2ec 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -131,7 +131,7 @@ public: NpcSpellsEffects entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); return entry; @@ -252,7 +252,7 @@ public: NpcSpellsEffects entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); all_entries.push_back(entry); @@ -279,7 +279,7 @@ public: NpcSpellsEffects entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index ce9e56237..f835098f2 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -185,7 +185,7 @@ public: NpcSpells entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); entry.attack_proc = atoi(row[3]); entry.proc_chance = atoi(row[4]); @@ -378,7 +378,7 @@ public: NpcSpells entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); entry.attack_proc = atoi(row[3]); entry.proc_chance = atoi(row[4]); @@ -423,7 +423,7 @@ public: NpcSpells entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.parent_list = atoi(row[2]); entry.attack_proc = atoi(row[3]); entry.proc_chance = atoi(row[4]); diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index b7c2a58ff..433bbb33d 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -488,8 +488,8 @@ public: NpcTypes entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.lastname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; entry.level = atoi(row[3]); entry.race = atoi(row[4]); entry.class = atoi(row[5]); @@ -514,8 +514,8 @@ public: entry.mindmg = atoi(row[24]); entry.maxdmg = atoi(row[25]); entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27]; - entry.special_abilities = row[28]; + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; entry.aggroradius = atoi(row[29]); entry.assistradius = atoi(row[30]); entry.face = atoi(row[31]); @@ -534,7 +534,7 @@ public: entry.armortint_blue = atoi(row[44]); entry.d_melee_texture1 = atoi(row[45]); entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47]; + entry.ammo_idfile = row[47] ? row[47] : ""; entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); @@ -1085,8 +1085,8 @@ public: NpcTypes entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.lastname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; entry.level = atoi(row[3]); entry.race = atoi(row[4]); entry.class = atoi(row[5]); @@ -1111,8 +1111,8 @@ public: entry.mindmg = atoi(row[24]); entry.maxdmg = atoi(row[25]); entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27]; - entry.special_abilities = row[28]; + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; entry.aggroradius = atoi(row[29]); entry.assistradius = atoi(row[30]); entry.face = atoi(row[31]); @@ -1131,7 +1131,7 @@ public: entry.armortint_blue = atoi(row[44]); entry.d_melee_texture1 = atoi(row[45]); entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47]; + entry.ammo_idfile = row[47] ? row[47] : ""; entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); @@ -1231,8 +1231,8 @@ public: NpcTypes entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.lastname = row[2]; + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; entry.level = atoi(row[3]); entry.race = atoi(row[4]); entry.class = atoi(row[5]); @@ -1257,8 +1257,8 @@ public: entry.mindmg = atoi(row[24]); entry.maxdmg = atoi(row[25]); entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27]; - entry.special_abilities = row[28]; + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; entry.aggroradius = atoi(row[29]); entry.assistradius = atoi(row[30]); entry.face = atoi(row[31]); @@ -1277,7 +1277,7 @@ public: entry.armortint_blue = atoi(row[44]); entry.d_melee_texture1 = atoi(row[45]); entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47]; + entry.ammo_idfile = row[47] ? row[47] : ""; entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 311586c1d..6850da4b1 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -209,7 +209,7 @@ public: NpcTypesTint entry{}; entry.id = atoi(row[0]); - entry.tint_set_name = row[1]; + entry.tint_set_name = row[1] ? row[1] : ""; entry.red1h = atoi(row[2]); entry.grn1h = atoi(row[3]); entry.blu1h = atoi(row[4]); @@ -434,7 +434,7 @@ public: NpcTypesTint entry{}; entry.id = atoi(row[0]); - entry.tint_set_name = row[1]; + entry.tint_set_name = row[1] ? row[1] : ""; entry.red1h = atoi(row[2]); entry.grn1h = atoi(row[3]); entry.blu1h = atoi(row[4]); @@ -487,7 +487,7 @@ public: NpcTypesTint entry{}; entry.id = atoi(row[0]); - entry.tint_set_name = row[1]; + entry.tint_set_name = row[1] ? row[1] : ""; entry.red1h = atoi(row[2]); entry.grn1h = atoi(row[3]); entry.blu1h = atoi(row[4]); diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index 2c26f1b2f..7baa5ec15 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -162,7 +162,7 @@ public: entry.bagidx = atoi(row[2]); entry.itemid = atoi(row[3]); entry.charges = atoi(row[4]); - entry.droptime = row[5]; + entry.droptime = row[5] ? row[5] : ""; entry.augslot1 = atoi(row[6]); entry.augslot2 = atoi(row[7]); entry.augslot3 = atoi(row[8]); @@ -316,7 +316,7 @@ public: entry.bagidx = atoi(row[2]); entry.itemid = atoi(row[3]); entry.charges = atoi(row[4]); - entry.droptime = row[5]; + entry.droptime = row[5] ? row[5] : ""; entry.augslot1 = atoi(row[6]); entry.augslot2 = atoi(row[7]); entry.augslot3 = atoi(row[8]); @@ -352,7 +352,7 @@ public: entry.bagidx = atoi(row[2]); entry.itemid = atoi(row[3]); entry.charges = atoi(row[4]); - entry.droptime = row[5]; + entry.droptime = row[5] ? row[5] : ""; entry.augslot1 = atoi(row[6]); entry.augslot2 = atoi(row[7]); entry.augslot3 = atoi(row[8]); diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index 87137dbd5..932769ed6 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -208,7 +208,7 @@ public: entry.heading = atof(row[6]); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); - entry.objectname = row[9]; + entry.objectname = row[9] ? row[9] : ""; entry.type = atoi(row[10]); entry.icon = atoi(row[11]); entry.unknown08 = atoi(row[12]); @@ -224,7 +224,7 @@ public: entry.size = atof(row[22]); entry.tilt_x = atof(row[23]); entry.tilt_y = atof(row[24]); - entry.display_name = row[25]; + entry.display_name = row[25] ? row[25] : ""; return entry; } @@ -421,7 +421,7 @@ public: entry.heading = atof(row[6]); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); - entry.objectname = row[9]; + entry.objectname = row[9] ? row[9] : ""; entry.type = atoi(row[10]); entry.icon = atoi(row[11]); entry.unknown08 = atoi(row[12]); @@ -437,7 +437,7 @@ public: entry.size = atof(row[22]); entry.tilt_x = atof(row[23]); entry.tilt_y = atof(row[24]); - entry.display_name = row[25]; + entry.display_name = row[25] ? row[25] : ""; all_entries.push_back(entry); } @@ -471,7 +471,7 @@ public: entry.heading = atof(row[6]); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); - entry.objectname = row[9]; + entry.objectname = row[9] ? row[9] : ""; entry.type = atoi(row[10]); entry.icon = atoi(row[11]); entry.unknown08 = atoi(row[12]); @@ -487,7 +487,7 @@ public: entry.size = atof(row[22]); entry.tilt_x = atof(row[23]); entry.tilt_y = atof(row[24]); - entry.display_name = row[25]; + entry.display_name = row[25] ? row[25] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index ba13a315a..542bc8716 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -143,7 +143,7 @@ public: PerlEventExportSettings entry{}; entry.event_id = atoi(row[0]); - entry.event_description = row[1]; + entry.event_description = row[1] ? row[1] : ""; entry.export_qglobals = atoi(row[2]); entry.export_mob = atoi(row[3]); entry.export_zone = atoi(row[4]); @@ -280,7 +280,7 @@ public: PerlEventExportSettings entry{}; entry.event_id = atoi(row[0]); - entry.event_description = row[1]; + entry.event_description = row[1] ? row[1] : ""; entry.export_qglobals = atoi(row[2]); entry.export_mob = atoi(row[3]); entry.export_zone = atoi(row[4]); @@ -311,7 +311,7 @@ public: PerlEventExportSettings entry{}; entry.event_id = atoi(row[0]); - entry.event_description = row[1]; + entry.event_description = row[1] ? row[1] : ""; entry.export_qglobals = atoi(row[2]); entry.export_mob = atoi(row[3]); entry.export_zone = atoi(row[4]); diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index 4bd262644..caf6908c1 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -171,12 +171,12 @@ public: entry.dib = atoi(row[0]); entry.petid = atoi(row[1]); - entry.charname = row[2]; - entry.accountname = row[3]; - entry.lastgm = row[4]; - entry.petitiontext = row[5]; - entry.gmtext = row[6]; - entry.zone = row[7]; + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; entry.urgency = atoi(row[8]); entry.charclass = atoi(row[9]); entry.charrace = atoi(row[10]); @@ -344,12 +344,12 @@ public: entry.dib = atoi(row[0]); entry.petid = atoi(row[1]); - entry.charname = row[2]; - entry.accountname = row[3]; - entry.lastgm = row[4]; - entry.petitiontext = row[5]; - entry.gmtext = row[6]; - entry.zone = row[7]; + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; entry.urgency = atoi(row[8]); entry.charclass = atoi(row[9]); entry.charrace = atoi(row[10]); @@ -384,12 +384,12 @@ public: entry.dib = atoi(row[0]); entry.petid = atoi(row[1]); - entry.charname = row[2]; - entry.accountname = row[3]; - entry.lastgm = row[4]; - entry.petitiontext = row[5]; - entry.gmtext = row[6]; - entry.zone = row[7]; + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; entry.urgency = atoi(row[8]); entry.charclass = atoi(row[9]); entry.charrace = atoi(row[10]); diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h index 28db32734..da0e18b53 100644 --- a/common/repositories/pets_equipmentset_repository.h +++ b/common/repositories/pets_equipmentset_repository.h @@ -131,7 +131,7 @@ public: PetsEquipmentset entry{}; entry.set_id = atoi(row[0]); - entry.setname = row[1]; + entry.setname = row[1] ? row[1] : ""; entry.nested_set = atoi(row[2]); return entry; @@ -252,7 +252,7 @@ public: PetsEquipmentset entry{}; entry.set_id = atoi(row[0]); - entry.setname = row[1]; + entry.setname = row[1] ? row[1] : ""; entry.nested_set = atoi(row[2]); all_entries.push_back(entry); @@ -279,7 +279,7 @@ public: PetsEquipmentset entry{}; entry.set_id = atoi(row[0]); - entry.setname = row[1]; + entry.setname = row[1] ? row[1] : ""; entry.nested_set = atoi(row[2]); all_entries.push_back(entry); diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h index 56947b5d1..343003ba5 100644 --- a/common/repositories/pets_repository.h +++ b/common/repositories/pets_repository.h @@ -145,7 +145,7 @@ public: if (results.RowCount() == 1) { Pets entry{}; - entry.type = row[0]; + entry.type = row[0] ? row[0] : ""; entry.petpower = atoi(row[1]); entry.npcID = atoi(row[2]); entry.temp = atoi(row[3]); @@ -283,7 +283,7 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Pets entry{}; - entry.type = row[0]; + entry.type = row[0] ? row[0] : ""; entry.petpower = atoi(row[1]); entry.npcID = atoi(row[2]); entry.temp = atoi(row[3]); @@ -315,7 +315,7 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Pets entry{}; - entry.type = row[0]; + entry.type = row[0] ? row[0] : ""; entry.petpower = atoi(row[1]); entry.npcID = atoi(row[2]); entry.temp = atoi(row[3]); diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index 60f968667..48fea575c 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -142,8 +142,8 @@ public: entry.charid = atoi(row[0]); entry.npcid = atoi(row[1]); entry.zoneid = atoi(row[2]); - entry.name = row[3]; - entry.value = row[4]; + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; entry.expdate = atoi(row[5]); return entry; @@ -266,8 +266,8 @@ public: entry.charid = atoi(row[0]); entry.npcid = atoi(row[1]); entry.zoneid = atoi(row[2]); - entry.name = row[3]; - entry.value = row[4]; + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; entry.expdate = atoi(row[5]); all_entries.push_back(entry); @@ -296,8 +296,8 @@ public: entry.charid = atoi(row[0]); entry.npcid = atoi(row[1]); entry.zoneid = atoi(row[2]); - entry.name = row[3]; - entry.value = row[4]; + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; entry.expdate = atoi(row[5]); all_entries.push_back(entry); diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index e1c78739d..01981dd1e 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -136,7 +136,7 @@ public: entry.raidid = atoi(row[0]); entry.loottype = atoi(row[1]); entry.locked = atoi(row[2]); - entry.motd = row[3]; + entry.motd = row[3] ? row[3] : ""; return entry; } @@ -261,7 +261,7 @@ public: entry.raidid = atoi(row[0]); entry.loottype = atoi(row[1]); entry.locked = atoi(row[2]); - entry.motd = row[3]; + entry.motd = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -289,7 +289,7 @@ public: entry.raidid = atoi(row[0]); entry.loottype = atoi(row[1]); entry.locked = atoi(row[2]); - entry.motd = row[3]; + entry.motd = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h index 505f309d3..ccc200bb8 100644 --- a/common/repositories/raid_members_repository.h +++ b/common/repositories/raid_members_repository.h @@ -153,7 +153,7 @@ public: entry.groupid = atoi(row[2]); entry._class = atoi(row[3]); entry.level = atoi(row[4]); - entry.name = row[5]; + entry.name = row[5] ? row[5] : ""; entry.isgroupleader = atoi(row[6]); entry.israidleader = atoi(row[7]); entry.islooter = atoi(row[8]); @@ -298,7 +298,7 @@ public: entry.groupid = atoi(row[2]); entry._class = atoi(row[3]); entry.level = atoi(row[4]); - entry.name = row[5]; + entry.name = row[5] ? row[5] : ""; entry.isgroupleader = atoi(row[6]); entry.israidleader = atoi(row[7]); entry.islooter = atoi(row[8]); @@ -331,7 +331,7 @@ public: entry.groupid = atoi(row[2]); entry._class = atoi(row[3]); entry.level = atoi(row[4]); - entry.name = row[5]; + entry.name = row[5] ? row[5] : ""; entry.isgroupleader = atoi(row[6]); entry.israidleader = atoi(row[7]); entry.islooter = atoi(row[8]); diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index c336ebda5..8a8419ad9 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -134,9 +134,9 @@ public: Reports entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.reported = row[2]; - entry.reported_text = row[3]; + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; return entry; } @@ -259,9 +259,9 @@ public: Reports entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.reported = row[2]; - entry.reported_text = row[3]; + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -287,9 +287,9 @@ public: Reports entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.reported = row[2]; - entry.reported_text = row[3]; + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h index 9aea58335..2d2dc1a80 100644 --- a/common/repositories/rule_sets_repository.h +++ b/common/repositories/rule_sets_repository.h @@ -128,7 +128,7 @@ public: RuleSets entry{}; entry.ruleset_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: RuleSets entry{}; entry.ruleset_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: RuleSets entry{}; entry.ruleset_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index 3e87fc53c..cc18b324c 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -134,9 +134,9 @@ public: RuleValues entry{}; entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1]; - entry.rule_value = row[2]; - entry.notes = row[3]; + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; return entry; } @@ -256,9 +256,9 @@ public: RuleValues entry{}; entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1]; - entry.rule_value = row[2]; - entry.notes = row[3]; + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -284,9 +284,9 @@ public: RuleValues entry{}; entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1]; - entry.rule_value = row[2]; - entry.notes = row[3]; + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h index 2e8bb2924..c0b004396 100644 --- a/common/repositories/saylink_repository.h +++ b/common/repositories/saylink_repository.h @@ -128,7 +128,7 @@ public: Saylink entry{}; entry.id = atoi(row[0]); - entry.phrase = row[1]; + entry.phrase = row[1] ? row[1] : ""; return entry; } @@ -245,7 +245,7 @@ public: Saylink entry{}; entry.id = atoi(row[0]); - entry.phrase = row[1]; + entry.phrase = row[1] ? row[1] : ""; all_entries.push_back(entry); } @@ -271,7 +271,7 @@ public: Saylink entry{}; entry.id = atoi(row[0]); - entry.phrase = row[1]; + entry.phrase = row[1] ? row[1] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index 34ba80c28..bea1dc559 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -168,7 +168,7 @@ public: entry.id = atoi(row[0]); entry.spawngroupID = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.x = atof(row[4]); entry.y = atof(row[5]); @@ -337,7 +337,7 @@ public: entry.id = atoi(row[0]); entry.spawngroupID = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.x = atof(row[4]); entry.y = atof(row[5]); @@ -376,7 +376,7 @@ public: entry.id = atoi(row[0]); entry.spawngroupID = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.x = atof(row[4]); entry.y = atof(row[5]); diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index 0fb3b20ca..ca5cf3ba5 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -135,7 +135,7 @@ public: entry.id = atoi(row[0]); entry.value = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.instance_id = atoi(row[3]); return entry; @@ -254,7 +254,7 @@ public: entry.id = atoi(row[0]); entry.value = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.instance_id = atoi(row[3]); all_entries.push_back(entry); @@ -282,7 +282,7 @@ public: entry.id = atoi(row[0]); entry.value = atoi(row[1]); - entry.zone = row[2]; + entry.zone = row[2] ? row[2] : ""; entry.instance_id = atoi(row[3]); all_entries.push_back(entry); diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h index 46c1e965d..22b68a6d2 100644 --- a/common/repositories/spawn_conditions_repository.h +++ b/common/repositories/spawn_conditions_repository.h @@ -136,11 +136,11 @@ public: if (results.RowCount() == 1) { SpawnConditions entry{}; - entry.zone = row[0]; + entry.zone = row[0] ? row[0] : ""; entry.id = atoi(row[1]); entry.value = atoi(row[2]); entry.onchange = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; return entry; } @@ -262,11 +262,11 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { SpawnConditions entry{}; - entry.zone = row[0]; + entry.zone = row[0] ? row[0] : ""; entry.id = atoi(row[1]); entry.value = atoi(row[2]); entry.onchange = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; all_entries.push_back(entry); } @@ -291,11 +291,11 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { SpawnConditions entry{}; - entry.zone = row[0]; + entry.zone = row[0] ? row[0] : ""; entry.id = atoi(row[1]); entry.value = atoi(row[2]); entry.onchange = atoi(row[3]); - entry.name = row[4]; + entry.name = row[4] ? row[4] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index 760d71f9c..c9fa5d03e 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -164,9 +164,9 @@ public: SpawnEvents entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.cond_id = atoi(row[2]); - entry.name = row[3]; + entry.name = row[3] ? row[3] : ""; entry.period = atoi(row[4]); entry.next_minute = atoi(row[5]); entry.next_hour = atoi(row[6]); @@ -329,9 +329,9 @@ public: SpawnEvents entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.cond_id = atoi(row[2]); - entry.name = row[3]; + entry.name = row[3] ? row[3] : ""; entry.period = atoi(row[4]); entry.next_minute = atoi(row[5]); entry.next_hour = atoi(row[6]); @@ -367,9 +367,9 @@ public: SpawnEvents entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.cond_id = atoi(row[2]); - entry.name = row[3]; + entry.name = row[3] ? row[3] : ""; entry.period = atoi(row[4]); entry.next_minute = atoi(row[5]); entry.next_hour = atoi(row[6]); diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index 74133ccf4..6ebf6122d 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -161,7 +161,7 @@ public: Spawngroup entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); entry.dist = atof(row[3]); entry.max_x = atof(row[4]); @@ -322,7 +322,7 @@ public: Spawngroup entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); entry.dist = atof(row[3]); entry.max_x = atof(row[4]); @@ -359,7 +359,7 @@ public: Spawngroup entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); entry.dist = atof(row[3]); entry.max_x = atof(row[4]); diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index 1462f1ea5..05ebdc4e4 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -131,8 +131,8 @@ public: SpellBuckets entry{}; entry.spellid = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; return entry; } @@ -252,8 +252,8 @@ public: SpellBuckets entry{}; entry.spellid = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; all_entries.push_back(entry); } @@ -279,8 +279,8 @@ public: SpellBuckets entry{}; entry.spellid = atoi(row[0]); - entry.key = row[1]; - entry.value = row[2]; + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h index d94cfa052..1f2f7e797 100644 --- a/common/repositories/spell_globals_repository.h +++ b/common/repositories/spell_globals_repository.h @@ -134,9 +134,9 @@ public: SpellGlobals entry{}; entry.spellid = atoi(row[0]); - entry.spell_name = row[1]; - entry.qglobal = row[2]; - entry.value = row[3]; + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; return entry; } @@ -259,9 +259,9 @@ public: SpellGlobals entry{}; entry.spellid = atoi(row[0]); - entry.spell_name = row[1]; - entry.qglobal = row[2]; - entry.value = row[3]; + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -287,9 +287,9 @@ public: SpellGlobals entry{}; entry.spellid = atoi(row[0]); - entry.spell_name = row[1]; - entry.qglobal = row[2]; - entry.value = row[3]; + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index 19f3f51d5..e9f48d3a3 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -833,14 +833,14 @@ public: SpellsNew entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.player_1 = row[2]; - entry.teleport_zone = row[3]; - entry.you_cast = row[4]; - entry.other_casts = row[5]; - entry.cast_on_you = row[6]; - entry.cast_on_other = row[7]; - entry.spell_fades = row[8]; + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; entry.range = atoi(row[9]); entry.aoerange = atoi(row[10]); entry.pushback = atoi(row[11]); @@ -1890,14 +1890,14 @@ public: SpellsNew entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.player_1 = row[2]; - entry.teleport_zone = row[3]; - entry.you_cast = row[4]; - entry.other_casts = row[5]; - entry.cast_on_you = row[6]; - entry.cast_on_other = row[7]; - entry.spell_fades = row[8]; + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; entry.range = atoi(row[9]); entry.aoerange = atoi(row[10]); entry.pushback = atoi(row[11]); @@ -2151,14 +2151,14 @@ public: SpellsNew entry{}; entry.id = atoi(row[0]); - entry.name = row[1]; - entry.player_1 = row[2]; - entry.teleport_zone = row[3]; - entry.you_cast = row[4]; - entry.other_casts = row[5]; - entry.cast_on_you = row[6]; - entry.cast_on_other = row[7]; - entry.spell_fades = row[8]; + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; entry.range = atoi(row[9]); entry.aoerange = atoi(row[10]); entry.pushback = atoi(row[11]); diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index b6023162f..20c0580c9 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -170,16 +170,16 @@ public: entry.activityid = atoi(row[1]); entry.step = atoi(row[2]); entry.activitytype = atoi(row[3]); - entry.target_name = row[4]; - entry.item_list = row[5]; - entry.skill_list = row[6]; - entry.spell_list = row[7]; - entry.description_override = row[8]; + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; entry.goalid = atoi(row[9]); entry.goalmethod = atoi(row[10]); entry.goalcount = atoi(row[11]); entry.delivertonpc = atoi(row[12]); - entry.zones = row[13]; + entry.zones = row[13] ? row[13] : ""; entry.optional = atoi(row[14]); return entry; @@ -336,16 +336,16 @@ public: entry.activityid = atoi(row[1]); entry.step = atoi(row[2]); entry.activitytype = atoi(row[3]); - entry.target_name = row[4]; - entry.item_list = row[5]; - entry.skill_list = row[6]; - entry.spell_list = row[7]; - entry.description_override = row[8]; + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; entry.goalid = atoi(row[9]); entry.goalmethod = atoi(row[10]); entry.goalcount = atoi(row[11]); entry.delivertonpc = atoi(row[12]); - entry.zones = row[13]; + entry.zones = row[13] ? row[13] : ""; entry.optional = atoi(row[14]); all_entries.push_back(entry); @@ -375,16 +375,16 @@ public: entry.activityid = atoi(row[1]); entry.step = atoi(row[2]); entry.activitytype = atoi(row[3]); - entry.target_name = row[4]; - entry.item_list = row[5]; - entry.skill_list = row[6]; - entry.spell_list = row[7]; - entry.description_override = row[8]; + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; entry.goalid = atoi(row[9]); entry.goalmethod = atoi(row[10]); entry.goalcount = atoi(row[11]); entry.delivertonpc = atoi(row[12]); - entry.zones = row[13]; + entry.zones = row[13] ? row[13] : ""; entry.optional = atoi(row[14]); all_entries.push_back(entry); diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index 8817973af..f08bc147e 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -173,9 +173,9 @@ public: entry.type = atoi(row[1]); entry.duration = atoi(row[2]); entry.duration_code = atoi(row[3]); - entry.title = row[4]; - entry.description = row[5]; - entry.reward = row[6]; + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; entry.rewardid = atoi(row[7]); entry.cashreward = atoi(row[8]); entry.xpreward = atoi(row[9]); @@ -184,7 +184,7 @@ public: entry.maxlevel = atoi(row[12]); entry.repeatable = atoi(row[13]); entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15]; + entry.completion_emote = row[15] ? row[15] : ""; return entry; } @@ -346,9 +346,9 @@ public: entry.type = atoi(row[1]); entry.duration = atoi(row[2]); entry.duration_code = atoi(row[3]); - entry.title = row[4]; - entry.description = row[5]; - entry.reward = row[6]; + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; entry.rewardid = atoi(row[7]); entry.cashreward = atoi(row[8]); entry.xpreward = atoi(row[9]); @@ -357,7 +357,7 @@ public: entry.maxlevel = atoi(row[12]); entry.repeatable = atoi(row[13]); entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15]; + entry.completion_emote = row[15] ? row[15] : ""; all_entries.push_back(entry); } @@ -386,9 +386,9 @@ public: entry.type = atoi(row[1]); entry.duration = atoi(row[2]); entry.duration_code = atoi(row[3]); - entry.title = row[4]; - entry.description = row[5]; - entry.reward = row[6]; + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; entry.rewardid = atoi(row[7]); entry.cashreward = atoi(row[8]); entry.xpreward = atoi(row[9]); @@ -397,7 +397,7 @@ public: entry.maxlevel = atoi(row[12]); entry.repeatable = atoi(row[13]); entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15]; + entry.completion_emote = row[15] ? row[15] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index c0000289f..96cc51ca4 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -174,8 +174,8 @@ public: entry.char_id = atoi(row[8]); entry.status = atoi(row[9]); entry.item_id = atoi(row[10]); - entry.prefix = row[11]; - entry.suffix = row[12]; + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); return entry; @@ -339,8 +339,8 @@ public: entry.char_id = atoi(row[8]); entry.status = atoi(row[9]); entry.item_id = atoi(row[10]); - entry.prefix = row[11]; - entry.suffix = row[12]; + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); all_entries.push_back(entry); @@ -377,8 +377,8 @@ public: entry.char_id = atoi(row[8]); entry.status = atoi(row[9]); entry.item_id = atoi(row[10]); - entry.prefix = row[11]; - entry.suffix = row[12]; + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); all_entries.push_back(entry); diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 3f75271f1..3dcaded6c 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -185,7 +185,7 @@ public: Traps entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.x = atoi(row[3]); entry.y = atoi(row[4]); @@ -196,7 +196,7 @@ public: entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); - entry.message = row[12]; + entry.message = row[12] ? row[12] : ""; entry.skill = atoi(row[13]); entry.level = atoi(row[14]); entry.respawn_time = atoi(row[15]); @@ -378,7 +378,7 @@ public: Traps entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.x = atoi(row[3]); entry.y = atoi(row[4]); @@ -389,7 +389,7 @@ public: entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); - entry.message = row[12]; + entry.message = row[12] ? row[12] : ""; entry.skill = atoi(row[13]); entry.level = atoi(row[14]); entry.respawn_time = atoi(row[15]); @@ -423,7 +423,7 @@ public: Traps entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.x = atoi(row[3]); entry.y = atoi(row[4]); @@ -434,7 +434,7 @@ public: entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); - entry.message = row[12]; + entry.message = row[12] ? row[12] : ""; entry.skill = atoi(row[13]); entry.level = atoi(row[14]); entry.respawn_time = atoi(row[15]); diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index d0ef9f6de..e02d1a1e9 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -138,8 +138,8 @@ public: entry.id = atoi(row[0]); entry.unknown = atoi(row[1]); - entry.name = row[2]; - entry.descr = row[3]; + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; entry.isguild = atoi(row[4]); return entry; @@ -264,8 +264,8 @@ public: entry.id = atoi(row[0]); entry.unknown = atoi(row[1]); - entry.name = row[2]; - entry.descr = row[3]; + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; entry.isguild = atoi(row[4]); all_entries.push_back(entry); @@ -293,8 +293,8 @@ public: entry.id = atoi(row[0]); entry.unknown = atoi(row[1]); - entry.name = row[2]; - entry.descr = row[3]; + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; entry.isguild = atoi(row[4]); all_entries.push_back(entry); diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h index 2cc5de8a2..2563bd1cc 100644 --- a/common/repositories/variables_repository.h +++ b/common/repositories/variables_repository.h @@ -133,10 +133,10 @@ public: if (results.RowCount() == 1) { Variables entry{}; - entry.varname = row[0]; - entry.value = row[1]; - entry.information = row[2]; - entry.ts = row[3]; + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; return entry; } @@ -258,10 +258,10 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Variables entry{}; - entry.varname = row[0]; - entry.value = row[1]; - entry.information = row[2]; - entry.ts = row[3]; + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; all_entries.push_back(entry); } @@ -286,10 +286,10 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Variables entry{}; - entry.varname = row[0]; - entry.value = row[1]; - entry.information = row[2]; - entry.ts = row[3]; + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 6e18d16b5..55dfbf592 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -137,7 +137,7 @@ public: VeteranRewardTemplates entry{}; entry.claim_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.item_id = atoi(row[2]); entry.charges = atoi(row[3]); entry.reward_slot = atoi(row[4]); @@ -263,7 +263,7 @@ public: VeteranRewardTemplates entry{}; entry.claim_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.item_id = atoi(row[2]); entry.charges = atoi(row[3]); entry.reward_slot = atoi(row[4]); @@ -292,7 +292,7 @@ public: VeteranRewardTemplates entry{}; entry.claim_id = atoi(row[0]); - entry.name = row[1]; + entry.name = row[1] ? row[1] : ""; entry.item_id = atoi(row[2]); entry.charges = atoi(row[3]); entry.reward_slot = atoi(row[4]); diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index f76c3f777..1d9f76389 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -173,7 +173,7 @@ public: ZonePoints entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); entry.y = atof(row[4]); @@ -350,7 +350,7 @@ public: ZonePoints entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); entry.y = atof(row[4]); @@ -391,7 +391,7 @@ public: ZonePoints entry{}; entry.id = atoi(row[0]); - entry.zone = row[1]; + entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); entry.y = atof(row[4]); diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index a22e67865..d4f29fa65 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -379,11 +379,11 @@ public: if (results.RowCount() == 1) { Zone entry{}; - entry.short_name = row[0]; + entry.short_name = row[0] ? row[0] : ""; entry.id = atoi(row[1]); - entry.file_name = row[2]; - entry.long_name = row[3]; - entry.map_file_name = row[4]; + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; entry.safe_x = atof(row[5]); entry.safe_y = atof(row[6]); entry.safe_z = atof(row[7]); @@ -395,7 +395,7 @@ public: entry.timezone = atoi(row[13]); entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); - entry.note = row[16]; + entry.note = row[16] ? row[16] : ""; entry.underworld = atof(row[17]); entry.minclip = atof(row[18]); entry.maxclip = atof(row[19]); @@ -430,7 +430,7 @@ public: entry.fog_minclip4 = atof(row[48]); entry.fog_maxclip4 = atof(row[49]); entry.fog_density = atof(row[50]); - entry.flag_needed = row[51]; + entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); entry.canlevitate = atoi(row[54]); @@ -832,11 +832,11 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Zone entry{}; - entry.short_name = row[0]; + entry.short_name = row[0] ? row[0] : ""; entry.id = atoi(row[1]); - entry.file_name = row[2]; - entry.long_name = row[3]; - entry.map_file_name = row[4]; + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; entry.safe_x = atof(row[5]); entry.safe_y = atof(row[6]); entry.safe_z = atof(row[7]); @@ -848,7 +848,7 @@ public: entry.timezone = atoi(row[13]); entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); - entry.note = row[16]; + entry.note = row[16] ? row[16] : ""; entry.underworld = atof(row[17]); entry.minclip = atof(row[18]); entry.maxclip = atof(row[19]); @@ -883,7 +883,7 @@ public: entry.fog_minclip4 = atof(row[48]); entry.fog_maxclip4 = atof(row[49]); entry.fog_density = atof(row[50]); - entry.flag_needed = row[51]; + entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); entry.canlevitate = atoi(row[54]); @@ -942,11 +942,11 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Zone entry{}; - entry.short_name = row[0]; + entry.short_name = row[0] ? row[0] : ""; entry.id = atoi(row[1]); - entry.file_name = row[2]; - entry.long_name = row[3]; - entry.map_file_name = row[4]; + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; entry.safe_x = atof(row[5]); entry.safe_y = atof(row[6]); entry.safe_z = atof(row[7]); @@ -958,7 +958,7 @@ public: entry.timezone = atoi(row[13]); entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); - entry.note = row[16]; + entry.note = row[16] ? row[16] : ""; entry.underworld = atof(row[17]); entry.minclip = atof(row[18]); entry.maxclip = atof(row[19]); @@ -993,7 +993,7 @@ public: entry.fog_minclip4 = atof(row[48]); entry.fog_maxclip4 = atof(row[49]); entry.fog_density = atof(row[50]); - entry.flag_needed = row[51]; + entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); entry.canlevitate = atoi(row[54]); diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 77508ecb6..cfaf46b42 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -274,8 +274,8 @@ foreach my $table_to_generate (@tables) { $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); } else { - $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s];\n", $column_name, $index); - $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s];\n", $column_name, $index); + $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index); + $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index); } # print $column_name . "\n"; diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index bd7e674e5..36fb364b3 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -438,8 +438,6 @@ namespace WorldserverCommandHandler { zone.id ); } - - } } From c1e58673b2a989215b3fd906ff1955271bc072e9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 05:36:18 -0500 Subject: [PATCH 073/272] Add expansion gating for zoning --- common/CMakeLists.txt | 2 +- common/content/world_content_service.h | 2 + common/repositories/zone_repository.h | 1054 ++++++++++++++++++++++++ world/world_server_command_handler.cpp | 19 +- world/world_server_command_handler.h | 1 + zone/main.cpp | 12 + zone/zoning.cpp | 32 +- 7 files changed, 1117 insertions(+), 5 deletions(-) create mode 100644 common/repositories/zone_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 1eff58828..cfa404825 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -117,7 +117,7 @@ SET(repositories repositories/spawngroup_repository.h repositories/tradeskill_recipe_repository.h repositories/instance_list_repository.h - ) + repositories/zone_repository.h) SET(common_headers any.h diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 850d536e2..11d1f03dc 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -62,8 +62,10 @@ namespace Expansion { static const char *ExpansionName[ExpansionNumber::MaxId] = { "Classic", "The Ruins of Kunark", + "The Shards of Velious", "The Shadows of Luclin", "The Planes of Power", + "The Legacy of Ykesha", "Lost Dungeons of Norrath", "Gates of Discord", "Omens of War", diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h new file mode 100644 index 000000000..d4f29fa65 --- /dev/null +++ b/common/repositories/zone_repository.h @@ -0,0 +1,1054 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_REPOSITORY_H +#define EQEMU_ZONE_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" + +class ZoneRepository { +public: + struct Zone { + std::string short_name; + int id; + std::string file_name; + std::string long_name; + std::string map_file_name; + float safe_x; + float safe_y; + float safe_z; + float graveyard_id; + int8 min_level; + int8 min_status; + int zoneidnumber; + int8 version; + int timezone; + int maxclients; + int ruleset; + std::string note; + float underworld; + float minclip; + float maxclip; + float fog_minclip; + float fog_maxclip; + int8 fog_blue; + int8 fog_red; + int8 fog_green; + int8 sky; + int8 ztype; + float zone_exp_multiplier; + float walkspeed; + int8 time_type; + int8 fog_red1; + int8 fog_green1; + int8 fog_blue1; + float fog_minclip1; + float fog_maxclip1; + int8 fog_red2; + int8 fog_green2; + int8 fog_blue2; + float fog_minclip2; + float fog_maxclip2; + int8 fog_red3; + int8 fog_green3; + int8 fog_blue3; + float fog_minclip3; + float fog_maxclip3; + int8 fog_red4; + int8 fog_green4; + int8 fog_blue4; + float fog_minclip4; + float fog_maxclip4; + float fog_density; + std::string flag_needed; + int8 canbind; + int8 cancombat; + int8 canlevitate; + int8 castoutdoor; + int8 hotzone; + int8 insttype; + int shutdowndelay; + int8 peqzone; + int8 expansion; + int8 suspendbuffs; + int rain_chance1; + int rain_chance2; + int rain_chance3; + int rain_chance4; + int rain_duration1; + int rain_duration2; + int rain_duration3; + int rain_duration4; + int snow_chance1; + int snow_chance2; + int snow_chance3; + int snow_chance4; + int snow_duration1; + int snow_duration2; + int snow_duration3; + int snow_duration4; + float gravity; + int type; + int8 skylock; + int fast_regen_hp; + int fast_regen_mana; + int fast_regen_endurance; + int npc_max_aggro_dist; + int max_movement_update_range; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "short_name", + "id", + "file_name", + "long_name", + "map_file_name", + "safe_x", + "safe_y", + "safe_z", + "graveyard_id", + "min_level", + "min_status", + "zoneidnumber", + "version", + "timezone", + "maxclients", + "ruleset", + "note", + "underworld", + "minclip", + "maxclip", + "fog_minclip", + "fog_maxclip", + "fog_blue", + "fog_red", + "fog_green", + "sky", + "ztype", + "zone_exp_multiplier", + "walkspeed", + "time_type", + "fog_red1", + "fog_green1", + "fog_blue1", + "fog_minclip1", + "fog_maxclip1", + "fog_red2", + "fog_green2", + "fog_blue2", + "fog_minclip2", + "fog_maxclip2", + "fog_red3", + "fog_green3", + "fog_blue3", + "fog_minclip3", + "fog_maxclip3", + "fog_red4", + "fog_green4", + "fog_blue4", + "fog_minclip4", + "fog_maxclip4", + "fog_density", + "flag_needed", + "canbind", + "cancombat", + "canlevitate", + "castoutdoor", + "hotzone", + "insttype", + "shutdowndelay", + "peqzone", + "expansion", + "suspendbuffs", + "rain_chance1", + "rain_chance2", + "rain_chance3", + "rain_chance4", + "rain_duration1", + "rain_duration2", + "rain_duration3", + "rain_duration4", + "snow_chance1", + "snow_chance2", + "snow_chance3", + "snow_chance4", + "snow_duration1", + "snow_duration2", + "snow_duration3", + "snow_duration4", + "gravity", + "type", + "skylock", + "fast_regen_hp", + "fast_regen_mana", + "fast_regen_endurance", + "npc_max_aggro_dist", + "max_movement_update_range", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Zone NewEntity() + { + Zone entry{}; + + entry.short_name = ""; + entry.id = 0; + entry.file_name = ""; + entry.long_name = ""; + entry.map_file_name = ""; + entry.safe_x = 0; + entry.safe_y = 0; + entry.safe_z = 0; + entry.graveyard_id = 0; + entry.min_level = 0; + entry.min_status = 0; + entry.zoneidnumber = 0; + entry.version = 0; + entry.timezone = 0; + entry.maxclients = 0; + entry.ruleset = 0; + entry.note = ""; + entry.underworld = 0; + entry.minclip = 450; + entry.maxclip = 450; + entry.fog_minclip = 450; + entry.fog_maxclip = 450; + entry.fog_blue = 0; + entry.fog_red = 0; + entry.fog_green = 0; + entry.sky = 1; + entry.ztype = 1; + entry.zone_exp_multiplier = 0.00; + entry.walkspeed = 0.4; + entry.time_type = 2; + entry.fog_red1 = 0; + entry.fog_green1 = 0; + entry.fog_blue1 = 0; + entry.fog_minclip1 = 450; + entry.fog_maxclip1 = 450; + entry.fog_red2 = 0; + entry.fog_green2 = 0; + entry.fog_blue2 = 0; + entry.fog_minclip2 = 450; + entry.fog_maxclip2 = 450; + entry.fog_red3 = 0; + entry.fog_green3 = 0; + entry.fog_blue3 = 0; + entry.fog_minclip3 = 450; + entry.fog_maxclip3 = 450; + entry.fog_red4 = 0; + entry.fog_green4 = 0; + entry.fog_blue4 = 0; + entry.fog_minclip4 = 450; + entry.fog_maxclip4 = 450; + entry.fog_density = 0; + entry.flag_needed = ""; + entry.canbind = 1; + entry.cancombat = 1; + entry.canlevitate = 1; + entry.castoutdoor = 1; + entry.hotzone = 0; + entry.insttype = 0; + entry.shutdowndelay = 5000; + entry.peqzone = 1; + entry.expansion = 0; + entry.suspendbuffs = 0; + entry.rain_chance1 = 0; + entry.rain_chance2 = 0; + entry.rain_chance3 = 0; + entry.rain_chance4 = 0; + entry.rain_duration1 = 0; + entry.rain_duration2 = 0; + entry.rain_duration3 = 0; + entry.rain_duration4 = 0; + entry.snow_chance1 = 0; + entry.snow_chance2 = 0; + entry.snow_chance3 = 0; + entry.snow_chance4 = 0; + entry.snow_duration1 = 0; + entry.snow_duration2 = 0; + entry.snow_duration3 = 0; + entry.snow_duration4 = 0; + entry.gravity = 0.4; + entry.type = 0; + entry.skylock = 0; + entry.fast_regen_hp = 180; + entry.fast_regen_mana = 180; + entry.fast_regen_endurance = 180; + entry.npc_max_aggro_dist = 600; + entry.max_movement_update_range = 600; + + return entry; + } + + static Zone GetZoneEntry( + const std::vector &zones, + int zone_id + ) + { + for (auto &zone : zones) { + if (zone.id == zone_id) { + return zone; + } + } + + return NewEntity(); + } + + static Zone FindOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Zone zone_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(zone_entry.short_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(zone_entry.file_name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(zone_entry.long_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(zone_entry.map_file_name) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(zone_entry.safe_x)); + update_values.push_back(columns[6] + " = " + std::to_string(zone_entry.safe_y)); + update_values.push_back(columns[7] + " = " + std::to_string(zone_entry.safe_z)); + update_values.push_back(columns[8] + " = " + std::to_string(zone_entry.graveyard_id)); + update_values.push_back(columns[9] + " = " + std::to_string(zone_entry.min_level)); + update_values.push_back(columns[10] + " = " + std::to_string(zone_entry.min_status)); + update_values.push_back(columns[11] + " = " + std::to_string(zone_entry.zoneidnumber)); + update_values.push_back(columns[12] + " = " + std::to_string(zone_entry.version)); + update_values.push_back(columns[13] + " = " + std::to_string(zone_entry.timezone)); + update_values.push_back(columns[14] + " = " + std::to_string(zone_entry.maxclients)); + update_values.push_back(columns[15] + " = " + std::to_string(zone_entry.ruleset)); + update_values.push_back(columns[16] + " = '" + EscapeString(zone_entry.note) + "'"); + update_values.push_back(columns[17] + " = " + std::to_string(zone_entry.underworld)); + update_values.push_back(columns[18] + " = " + std::to_string(zone_entry.minclip)); + update_values.push_back(columns[19] + " = " + std::to_string(zone_entry.maxclip)); + update_values.push_back(columns[20] + " = " + std::to_string(zone_entry.fog_minclip)); + update_values.push_back(columns[21] + " = " + std::to_string(zone_entry.fog_maxclip)); + update_values.push_back(columns[22] + " = " + std::to_string(zone_entry.fog_blue)); + update_values.push_back(columns[23] + " = " + std::to_string(zone_entry.fog_red)); + update_values.push_back(columns[24] + " = " + std::to_string(zone_entry.fog_green)); + update_values.push_back(columns[25] + " = " + std::to_string(zone_entry.sky)); + update_values.push_back(columns[26] + " = " + std::to_string(zone_entry.ztype)); + update_values.push_back(columns[27] + " = " + std::to_string(zone_entry.zone_exp_multiplier)); + update_values.push_back(columns[28] + " = " + std::to_string(zone_entry.walkspeed)); + update_values.push_back(columns[29] + " = " + std::to_string(zone_entry.time_type)); + update_values.push_back(columns[30] + " = " + std::to_string(zone_entry.fog_red1)); + update_values.push_back(columns[31] + " = " + std::to_string(zone_entry.fog_green1)); + update_values.push_back(columns[32] + " = " + std::to_string(zone_entry.fog_blue1)); + update_values.push_back(columns[33] + " = " + std::to_string(zone_entry.fog_minclip1)); + update_values.push_back(columns[34] + " = " + std::to_string(zone_entry.fog_maxclip1)); + update_values.push_back(columns[35] + " = " + std::to_string(zone_entry.fog_red2)); + update_values.push_back(columns[36] + " = " + std::to_string(zone_entry.fog_green2)); + update_values.push_back(columns[37] + " = " + std::to_string(zone_entry.fog_blue2)); + update_values.push_back(columns[38] + " = " + std::to_string(zone_entry.fog_minclip2)); + update_values.push_back(columns[39] + " = " + std::to_string(zone_entry.fog_maxclip2)); + update_values.push_back(columns[40] + " = " + std::to_string(zone_entry.fog_red3)); + update_values.push_back(columns[41] + " = " + std::to_string(zone_entry.fog_green3)); + update_values.push_back(columns[42] + " = " + std::to_string(zone_entry.fog_blue3)); + update_values.push_back(columns[43] + " = " + std::to_string(zone_entry.fog_minclip3)); + update_values.push_back(columns[44] + " = " + std::to_string(zone_entry.fog_maxclip3)); + update_values.push_back(columns[45] + " = " + std::to_string(zone_entry.fog_red4)); + update_values.push_back(columns[46] + " = " + std::to_string(zone_entry.fog_green4)); + update_values.push_back(columns[47] + " = " + std::to_string(zone_entry.fog_blue4)); + update_values.push_back(columns[48] + " = " + std::to_string(zone_entry.fog_minclip4)); + update_values.push_back(columns[49] + " = " + std::to_string(zone_entry.fog_maxclip4)); + update_values.push_back(columns[50] + " = " + std::to_string(zone_entry.fog_density)); + update_values.push_back(columns[51] + " = '" + EscapeString(zone_entry.flag_needed) + "'"); + update_values.push_back(columns[52] + " = " + std::to_string(zone_entry.canbind)); + update_values.push_back(columns[53] + " = " + std::to_string(zone_entry.cancombat)); + update_values.push_back(columns[54] + " = " + std::to_string(zone_entry.canlevitate)); + update_values.push_back(columns[55] + " = " + std::to_string(zone_entry.castoutdoor)); + update_values.push_back(columns[56] + " = " + std::to_string(zone_entry.hotzone)); + update_values.push_back(columns[57] + " = " + std::to_string(zone_entry.insttype)); + update_values.push_back(columns[58] + " = " + std::to_string(zone_entry.shutdowndelay)); + update_values.push_back(columns[59] + " = " + std::to_string(zone_entry.peqzone)); + update_values.push_back(columns[60] + " = " + std::to_string(zone_entry.expansion)); + update_values.push_back(columns[61] + " = " + std::to_string(zone_entry.suspendbuffs)); + update_values.push_back(columns[62] + " = " + std::to_string(zone_entry.rain_chance1)); + update_values.push_back(columns[63] + " = " + std::to_string(zone_entry.rain_chance2)); + update_values.push_back(columns[64] + " = " + std::to_string(zone_entry.rain_chance3)); + update_values.push_back(columns[65] + " = " + std::to_string(zone_entry.rain_chance4)); + update_values.push_back(columns[66] + " = " + std::to_string(zone_entry.rain_duration1)); + update_values.push_back(columns[67] + " = " + std::to_string(zone_entry.rain_duration2)); + update_values.push_back(columns[68] + " = " + std::to_string(zone_entry.rain_duration3)); + update_values.push_back(columns[69] + " = " + std::to_string(zone_entry.rain_duration4)); + update_values.push_back(columns[70] + " = " + std::to_string(zone_entry.snow_chance1)); + update_values.push_back(columns[71] + " = " + std::to_string(zone_entry.snow_chance2)); + update_values.push_back(columns[72] + " = " + std::to_string(zone_entry.snow_chance3)); + update_values.push_back(columns[73] + " = " + std::to_string(zone_entry.snow_chance4)); + update_values.push_back(columns[74] + " = " + std::to_string(zone_entry.snow_duration1)); + update_values.push_back(columns[75] + " = " + std::to_string(zone_entry.snow_duration2)); + update_values.push_back(columns[76] + " = " + std::to_string(zone_entry.snow_duration3)); + update_values.push_back(columns[77] + " = " + std::to_string(zone_entry.snow_duration4)); + update_values.push_back(columns[78] + " = " + std::to_string(zone_entry.gravity)); + update_values.push_back(columns[79] + " = " + std::to_string(zone_entry.type)); + update_values.push_back(columns[80] + " = " + std::to_string(zone_entry.skylock)); + update_values.push_back(columns[81] + " = " + std::to_string(zone_entry.fast_regen_hp)); + update_values.push_back(columns[82] + " = " + std::to_string(zone_entry.fast_regen_mana)); + update_values.push_back(columns[83] + " = " + std::to_string(zone_entry.fast_regen_endurance)); + update_values.push_back(columns[84] + " = " + std::to_string(zone_entry.npc_max_aggro_dist)); + update_values.push_back(columns[85] + " = " + std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Zone InsertOne( + Zone zone_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back(std::to_string(zone_entry.gravity)); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_entry.id = results.LastInsertedID(); + return zone_entry; + } + + zone_entry = ZoneRepository::NewEntity(); + + return zone_entry; + } + + static int InsertMany( + std::vector zone_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_entry: zone_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back(std::to_string(zone_entry.gravity)); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_ZONE_REPOSITORY_H diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 0c7eb0ac1..33fc10345 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -58,6 +58,7 @@ namespace WorldserverCommandHandler { function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema; function_map["database:dump"] = &WorldserverCommandHandler::DatabaseDump; function_map["test:test"] = &WorldserverCommandHandler::TestCommand; + function_map["test:expansion"] = &WorldserverCommandHandler::ExpansionTestCommand; function_map["test:repository"] = &WorldserverCommandHandler::TestRepository; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); @@ -291,6 +292,22 @@ namespace WorldserverCommandHandler { return; } + } + + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void ExpansionTestCommand(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Expansion test command"; + + if (cmd[{"-h", "--help"}]) { + return; + } + if (!RuleManager::Instance()->LoadRules(&database, "default", false)) { LogInfo("No rule set configured, using default rules"); } @@ -405,4 +422,4 @@ namespace WorldserverCommandHandler { } -} \ No newline at end of file +} diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index 66f81a130..85baf7f90 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -32,6 +32,7 @@ namespace WorldserverCommandHandler { void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description); void TestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); + void ExpansionTestCommand(int argc, char **argv, argh::parser &cmd, std::string &description); void TestRepository(int argc, char **argv, argh::parser &cmd, std::string &description); }; diff --git a/zone/main.cpp b/zone/main.cpp index c7c03a33a..3f8026cad 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -90,6 +90,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #else #include #include "../common/unix.h" + +#include "../common/content/world_content_service.h" + #endif volatile bool RunLoops = true; @@ -107,6 +110,7 @@ TaskManager *taskmanager = 0; NpcScaleManager *npc_scale_manager; QuestParserCollection *parse = 0; EQEmuLogSys LogSys; +WorldContentService content_service; const SPDat_Spell_Struct* spells; int32 SPDAT_RECORDS = -1; const ZoneConfig *Config; @@ -392,6 +396,14 @@ int main(int argc, char** argv) { LogInfo("Initialized dynamic dictionary entries"); } + content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion)); + + LogInfo( + "Current expansion is [{}] ({})", + content_service.GetCurrentExpansion(), + Expansion::ExpansionName[content_service.GetCurrentExpansion()] + ); + #ifdef BOTS LogInfo("Loading bot commands"); int botretval = bot_command_init(); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index eb5bc6805..36a2ee5a2 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -35,6 +35,9 @@ extern QueryServ* QServ; extern WorldServer worldserver; extern Zone* zone; +#include "../common/repositories/zone_repository.h" +#include "../common/content/world_content_service.h" + void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { #ifdef BOTS @@ -284,6 +287,29 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { //TODO: ADVENTURE ENTRANCE CHECK + /** + * Expansion check + */ + auto zones = ZoneRepository::GetWhere( + fmt::format( + "expansion <= {} AND short_name = '{}'", + (content_service.GetCurrentExpansion() + 1), + target_zone_name + ) + ); + + LogInfo( + "Checking zone request [{}] for expansion [{}] ({}) success [{}]", + target_zone_name, + (content_service.GetCurrentExpansion() + 1), + Expansion::ExpansionName[content_service.GetCurrentExpansion()], + !zones.empty() ? "true" : "false" + ); + + if (zones.empty()) { + myerror = ZONE_ERROR_NOEXPANSION; + } + if(myerror == 1) { //we have successfully zoned DoZoneSuccess(zc, target_zone_id, target_instance_id, dest_x, dest_y, dest_z, dest_h, ignorerestrictions); @@ -530,7 +556,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z heading = m_pp.binds[0].heading; zonesummon_ignorerestrictions = 1; - LogDebug("Player [{}] has died and will be zoned to bind point in zone: [{}] at LOC x=[{}], y=[{}], z=[{}], heading=[{}]", + LogDebug("Player [{}] has died and will be zoned to bind point in zone: [{}] at LOC x=[{}], y=[{}], z=[{}], heading=[{}]", GetName(), pZoneName, m_pp.binds[0].x, m_pp.binds[0].y, m_pp.binds[0].z, m_pp.binds[0].heading); break; case SummonPC: @@ -539,8 +565,8 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z SetHeading(heading); break; case Rewind: - LogDebug("[{}] has requested a /rewind from [{}], [{}], [{}], to [{}], [{}], [{}] in [{}]", GetName(), - m_Position.x, m_Position.y, m_Position.z, + LogDebug("[{}] has requested a /rewind from [{}], [{}], [{}], to [{}], [{}], [{}] in [{}]", GetName(), + m_Position.x, m_Position.y, m_Position.z, m_RewindLocation.x, m_RewindLocation.y, m_RewindLocation.z, zone->GetShortName()); m_ZoneSummonLocation = glm::vec3(x, y, z); m_Position = glm::vec4(m_ZoneSummonLocation, 0.0f); From 8a711f3c64d9cd4ed3c69fc3f7c5589aa2abb5fc Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 05:51:21 -0500 Subject: [PATCH 074/272] Expansion filtering for doors --- .../criteria/content_filter_criteria.h | 15 ++++++++++----- zone/doors.cpp | 5 ++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index c316bd87f..1173415c5 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -31,23 +31,28 @@ namespace ContentFilterCriteria { std::string criteria; criteria += fmt::format( - " AND (min_expansion >= {} OR min_expansion = 0)", + " AND (min_expansion <= {} OR min_expansion = 0)", content_service.GetCurrentExpansion() ); criteria += fmt::format( - " AND (max_expansion <= {} OR max_expansion = 0)", + " AND (max_expansion >= {} OR max_expansion = 0)", content_service.GetCurrentExpansion() ); std::vector flags = content_service.GetContentFlags(); - for (auto &flag: flags) { + for (auto &flag: flags) { flag = "'" + flag + "'"; } + std::string flags_in_filter; + if (!flags.empty()) { + flags_in_filter = fmt::format("OR content_flags IN ({})", implode(", ", flags)); + } + criteria += fmt::format( - " AND (content_flags IS NULL OR content_flags IN ({}))", - implode(", ", flags) + " AND (content_flags IS NULL {})", + flags_in_filter ); return std::string(criteria); diff --git a/zone/doors.cpp b/zone/doors.cpp index 6cb0617fd..82521aac2 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -28,6 +28,7 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include #include @@ -716,10 +717,12 @@ bool ZoneDatabase::LoadDoors(int32 door_count, Door *into, const char *zone_name " WHERE " " zone = '%s' " " AND ( version = % u OR version = - 1 ) " + " %s " " ORDER BY " " doorid ASC ", zone_name, - version + version, + ContentFilterCriteria::apply().c_str() ); auto results = QueryDatabase(query); if (!results.Success()) { From 80baf1b9ed3d2b8737695b41e2a54ac5dae0a368 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 05:59:20 -0500 Subject: [PATCH 075/272] Filter objects by expansion --- zone/zone.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 7d1266f9e..f18c1db76 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -56,6 +56,7 @@ #include "npc_scale_manager.h" #include "../common/data_verification.h" #include "zone_reload.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include #include @@ -140,7 +141,7 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { if(iInstanceID != 0) { auto pack = new ServerPacket(ServerOP_AdventureZoneData, sizeof(uint16)); - *((uint16*)pack->pBuffer) = iInstanceID; + *((uint16*)pack->pBuffer) = iInstanceID; worldserver.SendPacket(pack); delete pack; } @@ -170,11 +171,14 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { //this really loads the objects into entity_list bool Zone::LoadZoneObjects() { - std::string query = - StringFormat("SELECT id, zoneid, xpos, ypos, zpos, heading, itemid, charges, objectname, type, icon, " - "unknown08, unknown10, unknown20, unknown24, unknown76, size, tilt_x, tilt_y, display_name " - "FROM object WHERE zoneid = %i AND (version = %u OR version = -1)", - zoneid, instanceversion); + std::string query = StringFormat( + "SELECT id, zoneid, xpos, ypos, zpos, heading, itemid, charges, objectname, type, icon, " + "unknown08, unknown10, unknown20, unknown24, unknown76, size, tilt_x, tilt_y, display_name " + "FROM object WHERE zoneid = %i AND (version = %u OR version = -1) %s", + zoneid, + instanceversion, + ContentFilterCriteria::apply().c_str() + ); auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("Error Loading Objects from DB: [{}]", @@ -523,7 +527,7 @@ void Zone::LoadNewMerchantData(uint32 merchantid) { void Zone::GetMerchantDataForZoneLoad() { LogInfo("Loading Merchant Lists"); - std::string query = StringFormat( + std::string query = StringFormat( "SELECT " "DISTINCT ml.merchantid, " "ml.slot, " @@ -847,7 +851,7 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) { LogDebug("Graveyard ID is [{}]", graveyard_id()); bool GraveYardLoaded = content_db.GetZoneGraveyard(graveyard_id(), &pgraveyard_zoneid, &m_Graveyard.x, &m_Graveyard.y, &m_Graveyard.z, &m_Graveyard.w); - + if (GraveYardLoaded) { LogDebug("Loaded a graveyard for zone [{}]: graveyard zoneid is [{}] at [{}]", short_name, graveyard_zoneid(), to_string(m_Graveyard).c_str()); } From be8a6b6af410a29464c8c4c7114b42ccf3d5a43f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 06:08:56 -0500 Subject: [PATCH 076/272] Add spawn expansion filtering --- common/repositories/criteria/content_filter_criteria.h | 4 ++-- zone/spawngroup.cpp | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 1173415c5..9a86dcb99 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -47,11 +47,11 @@ namespace ContentFilterCriteria { std::string flags_in_filter; if (!flags.empty()) { - flags_in_filter = fmt::format("OR content_flags IN ({})", implode(", ", flags)); + flags_in_filter = fmt::format(" OR content_flags IN ({})", implode(", ", flags)); } criteria += fmt::format( - " AND (content_flags IS NULL {})", + " AND (content_flags IS NULL{})", flags_in_filter ); diff --git a/zone/spawngroup.cpp b/zone/spawngroup.cpp index d1a83995f..49aeea35b 100644 --- a/zone/spawngroup.cpp +++ b/zone/spawngroup.cpp @@ -24,6 +24,7 @@ #include "spawngroup.h" #include "zone.h" #include "zonedb.h" +#include "../common/repositories/criteria/content_filter_criteria.h" extern EntityList entity_list; extern Zone *zone; @@ -209,9 +210,11 @@ bool ZoneDatabase::LoadSpawnGroups(const char *zone_name, uint16 version, SpawnG spawn2.spawngroupID = spawngroup.ID AND spawn2.version = {} and zone = '{}' + {} ), version, - zone_name + zone_name, + ContentFilterCriteria::apply() ); auto results = QueryDatabase(query); From e17bd303b8992c21f406df20fc525ba2d02feb5e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 18:00:48 -0500 Subject: [PATCH 077/272] Fix typos to stop triggering Secrets [skip ci] --- common/content/world_content_service.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 11d1f03dc..9bb568207 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -28,7 +28,7 @@ namespace Expansion { enum ExpansionNumber { Classic = 0, TheRuinsOfKunark, - TheShardsOfVelious, + TheScarsOfVelious, TheShadowsOfLuclin, ThePlanesOfPower, TheLegacyOfYkesha, @@ -62,7 +62,7 @@ namespace Expansion { static const char *ExpansionName[ExpansionNumber::MaxId] = { "Classic", "The Ruins of Kunark", - "The Shards of Velious", + "The Scars of Velious", "The Shadows of Luclin", "The Planes of Power", "The Legacy of Ykesha", From 17e9198a58e48e0df5565ed53f020f84900802e2 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Apr 2020 21:38:05 -0500 Subject: [PATCH 078/272] Another typo fix [skip ci] --- common/content/world_content_service.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 9bb568207..d6d6723a9 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -98,7 +98,7 @@ public: bool IsClassicEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Classic; } bool IsTheRuinsOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheRuinsOfKunark; } - bool IsTheShardsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShardsOfVelious; } + bool IsTheScarsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheScarsOfVelious; } bool IsTheShadowsOfLuclinEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShadowsOfLuclin; } bool IsThePlanesOfPowerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ThePlanesOfPower; } bool IsTheLegacyOfYkeshaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheLegacyOfYkesha; } @@ -126,7 +126,7 @@ public: bool IsCurrentExpansionClassic() { return current_expansion == Expansion::ExpansionNumber::Classic; } bool IsCurrentExpansionTheRuinsOfKunark() { return current_expansion == Expansion::ExpansionNumber::TheRuinsOfKunark; } - bool IsCurrentExpansionTheShardsOfVelious() { return current_expansion == Expansion::ExpansionNumber::TheShardsOfVelious; } + bool IsCurrentExpansionTheScarsOfVelious() { return current_expansion == Expansion::ExpansionNumber::TheScarsOfVelious; } bool IsCurrentExpansionTheShadowsOfLuclin() { return current_expansion == Expansion::ExpansionNumber::TheShadowsOfLuclin; } bool IsCurrentExpansionThePlanesOfPower() { return current_expansion == Expansion::ExpansionNumber::ThePlanesOfPower; } bool IsCurrentExpansionTheLegacyOfYkesha() { return current_expansion == Expansion::ExpansionNumber::TheLegacyOfYkesha; } From 9a90bdf91aef474720c2e915b320600cba3078f5 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 18:40:19 -0500 Subject: [PATCH 079/272] Filter tradeskills [skip ci] --- world/world_server_command_handler.cpp | 2 +- zone/client_packet.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 33fc10345..ec832271e 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -325,7 +325,7 @@ namespace WorldserverCommandHandler { "Current expansion is [{}] ({}) is Velious Enabled [{}] Criteria [{}]", content_service.GetCurrentExpansion(), Expansion::ExpansionName[content_service.GetCurrentExpansion()], - content_service.IsTheShardsOfVeliousEnabled() ? "true" : "false", + content_service.IsTheScarsOfVeliousEnabled() ? "true" : "false", ContentFilterCriteria::apply() ); } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 048a80cc3..f4a53ad8b 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -61,6 +61,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "worldserver.h" #include "zone.h" #include "mob_movement_manager.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #ifdef BOTS #include "bot.h" @@ -11850,6 +11851,7 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) ) OR (tr.must_learn & 0x3 = 0) ) + %s GROUP BY tr.id HAVING @@ -11862,10 +11864,12 @@ void Client::Handle_OP_RecipesFavorite(const EQApplicationPacket *app) ) ) > 0 AND SUM(tre.componentcount) <= %u + LIMIT 100 ), favoriteIDs.c_str(), + ContentFilterCriteria::apply().c_str(), containers.c_str(), combineObjectSlots ); @@ -11948,6 +11952,7 @@ void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) ) OR (tr.must_learn & 0x3 = 0) ) + {} GROUP BY tr.id HAVING @@ -11960,12 +11965,14 @@ void Client::Handle_OP_RecipesSearch(const EQApplicationPacket *app) ) ) > 0 AND SUM(tre.componentcount) <= {} + LIMIT 200 ), search_clause, p_recipes_search_struct->mintrivial, p_recipes_search_struct->maxtrivial, + ContentFilterCriteria::apply(), containers_where_clause, combine_object_slots ); From 6e3922b7ccbd001e477352013b16fe9e152ea840 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 18:50:30 -0500 Subject: [PATCH 080/272] Filter merchants [skip ci] --- zone/zone.cpp | 149 +++++++++++++++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 55 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index f18c1db76..5358d9a22 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -502,73 +502,111 @@ void Zone::LoadTempMerchantData() void Zone::LoadNewMerchantData(uint32 merchantid) { std::list merlist; - std::string query = StringFormat("SELECT item, slot, faction_required, level_required, alt_currency_cost, " - "classes_required, probability FROM merchantlist WHERE merchantid=%d ORDER BY slot", merchantid); + + std::string query = fmt::format( + SQL( + SELECT + item, + slot, + faction_required, + level_required, + alt_currency_cost, + classes_required, + probability + FROM + merchantlist + WHERE + merchantid = {} + {} + ORDER BY + slot + ), + merchantid, + ContentFilterCriteria::apply() + ); + auto results = content_db.QueryDatabase(query); if (!results.Success()) { return; - } + } - for(auto row = results.begin(); row != results.end(); ++row) { - MerchantList ml; - ml.id = merchantid; - ml.item = atoul(row[0]); - ml.slot = atoul(row[1]); - ml.faction_required = atoul(row[2]); - ml.level_required = atoul(row[3]); - ml.alt_currency_cost = atoul(row[4]); - ml.classes_required = atoul(row[5]); - ml.probability = atoul(row[6]); - merlist.push_back(ml); - } + for (auto row = results.begin(); row != results.end(); ++row) { + MerchantList ml; + ml.id = merchantid; + ml.item = atoul(row[0]); + ml.slot = atoul(row[1]); + ml.faction_required = atoul(row[2]); + ml.level_required = atoul(row[3]); + ml.alt_currency_cost = atoul(row[4]); + ml.classes_required = atoul(row[5]); + ml.probability = atoul(row[6]); + merlist.push_back(ml); + } - merchanttable[merchantid] = merlist; + merchanttable[merchantid] = merlist; } void Zone::GetMerchantDataForZoneLoad() { LogInfo("Loading Merchant Lists"); - std::string query = StringFormat( - "SELECT " - "DISTINCT ml.merchantid, " - "ml.slot, " - "ml.item, " - "ml.faction_required, " - "ml.level_required, " - "ml.alt_currency_cost, " - "ml.classes_required, " - "ml.probability " - "FROM " - "merchantlist AS ml, " - "npc_types AS nt, " - "spawnentry AS se, " - "spawn2 AS s2 " - "WHERE nt.merchant_id = ml.merchantid AND nt.id = se.npcid " - "AND se.spawngroupid = s2.spawngroupid AND s2.zone = '%s' AND s2.version = %i " - "ORDER BY ml.slot ", GetShortName(), GetInstanceVersion()); + std::string query = fmt::format( + SQL ( + SELECT + DISTINCT ml.merchantid, + ml.slot, + ml.item, + ml.faction_required, + ml.level_required, + ml.alt_currency_cost, + ml.classes_required, + ml.probability + FROM + merchantlist AS ml, + npc_types AS nt, + spawnentry AS se, + spawn2 AS s2 + WHERE + nt.merchant_id = ml.merchantid + AND nt.id = se.npcid + AND se.spawngroupid = s2.spawngroupid + AND s2.zone = '{}' + AND s2.version = {} + {} + ORDER BY + ml.slot + ), + GetShortName(), + GetInstanceVersion(), + ContentFilterCriteria::apply() + ); + auto results = content_db.QueryDatabase(query); - std::map >::iterator cur; - uint32 npcid = 0; + + std::map >::iterator merchant_list; + + uint32 npc_id = 0; + if (results.RowCount() == 0) { LogDebug("No Merchant Data found for [{}]", GetShortName()); return; } for (auto row = results.begin(); row != results.end(); ++row) { - MerchantList ml; - ml.id = atoul(row[0]); - if (npcid != ml.id) { - cur = merchanttable.find(ml.id); - if (cur == merchanttable.end()) { + MerchantList merchant_list_entry{}; + merchant_list_entry.id = atoul(row[0]); + if (npc_id != merchant_list_entry.id) { + merchant_list = merchanttable.find(merchant_list_entry.id); + if (merchant_list == merchanttable.end()) { std::list empty; - merchanttable[ml.id] = empty; - cur = merchanttable.find(ml.id); + merchanttable[merchant_list_entry.id] = empty; + merchant_list = merchanttable.find(merchant_list_entry.id); } - npcid = ml.id; + + npc_id = merchant_list_entry.id; } - auto iter = cur->second.begin(); + auto iter = merchant_list->second.begin(); bool found = false; - while (iter != cur->second.end()) { - if ((*iter).item == ml.id) { + while (iter != merchant_list->second.end()) { + if ((*iter).item == merchant_list_entry.id) { found = true; break; } @@ -579,14 +617,15 @@ void Zone::GetMerchantDataForZoneLoad() { continue; } - ml.slot = atoul(row[1]); - ml.item = atoul(row[2]); - ml.faction_required = atoul(row[3]); - ml.level_required = atoul(row[4]); - ml.alt_currency_cost = atoul(row[5]); - ml.classes_required = atoul(row[6]); - ml.probability = atoul(row[7]); - cur->second.push_back(ml); + merchant_list_entry.slot = atoul(row[1]); + merchant_list_entry.item = atoul(row[2]); + merchant_list_entry.faction_required = atoul(row[3]); + merchant_list_entry.level_required = atoul(row[4]); + merchant_list_entry.alt_currency_cost = atoul(row[5]); + merchant_list_entry.classes_required = atoul(row[6]); + merchant_list_entry.probability = atoul(row[7]); + + merchant_list->second.push_back(merchant_list_entry); } } From 152d985821a2bcc3c1abc6f6767ff8967f408894 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:01:45 -0500 Subject: [PATCH 081/272] Filter loot tables and drops [skip ci] --- client_files/export/main.cpp | 2 + client_files/import/main.cpp | 8 +- common/shareddb.cpp | 140 ++++++++++++++++++++++++----------- shared_memory/main.cpp | 35 +++++++++ 4 files changed, 140 insertions(+), 45 deletions(-) diff --git a/client_files/export/main.cpp b/client_files/export/main.cpp index a6f3c3bec..fd8b19026 100644 --- a/client_files/export/main.cpp +++ b/client_files/export/main.cpp @@ -26,8 +26,10 @@ #include "../../common/crash.h" #include "../../common/rulesys.h" #include "../../common/string_util.h" +#include "../../common/content/world_content_service.h" EQEmuLogSys LogSys; +WorldContentService content_service; void ExportSpells(SharedDatabase *db); void ExportSkillCaps(SharedDatabase *db); diff --git a/client_files/import/main.cpp b/client_files/import/main.cpp index 3c25fa618..64b2aee41 100644 --- a/client_files/import/main.cpp +++ b/client_files/import/main.cpp @@ -24,8 +24,10 @@ #include "../../common/crash.h" #include "../../common/rulesys.h" #include "../../common/string_util.h" +#include "../../common/content/world_content_service.h" EQEmuLogSys LogSys; +WorldContentService content_service; void ImportSpells(SharedDatabase *db); void ImportSkillCaps(SharedDatabase *db); @@ -87,7 +89,7 @@ int main(int argc, char **argv) { ImportDBStrings(&database); LogSys.CloseFileLogs(); - + return 0; } @@ -324,10 +326,10 @@ void ImportDBStrings(SharedDatabase *db) { std::string sql; int id, type; std::string value; - + id = atoi(split[0].c_str()); type = atoi(split[1].c_str()); - + if(split.size() >= 3) { value = ::EscapeString(split[2]); } diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 48cc1309d..358a80d00 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -38,6 +38,7 @@ #include "shareddb.h" #include "string_util.h" #include "eqemu_config.h" +#include "repositories/criteria/content_filter_criteria.h" namespace ItemField { @@ -567,7 +568,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) { if (!char_id || !inv) return false; - + // Retrieve character inventory std::string query = StringFormat("SELECT slotid, itemid, charges, color, augslot1, augslot2, augslot3, augslot4, augslot5, " @@ -728,7 +729,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) char_id, item_id, slot_id); } } - + if (cv_conflict) { char char_name[64] = ""; GetCharName(char_id, char_name); @@ -1462,7 +1463,7 @@ bool SharedDatabase::GetCommandSettings(std::mapSharedMemDir + prefix + std::string("spells"); spells_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); *records = *reinterpret_cast(spells_mmf->Get()); @@ -1996,7 +1997,11 @@ void SharedDatabase::GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot loot_table_count = 0; max_loot_table = 0; loot_table_entries = 0; - const std::string query = "SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM loottable_entries) FROM loottable"; + const std::string query = + fmt::format( + "SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM loottable_entries) FROM loottable WHERE TRUE {}", + ContentFilterCriteria::apply() + ); auto results = QueryDatabase(query); if (!results.Success()) { return; @@ -2017,7 +2022,11 @@ void SharedDatabase::GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_d max_loot_drop = 0; loot_drop_entries = 0; - const std::string query = "SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM lootdrop_entries) FROM lootdrop"; + const std::string query = fmt::format( + "SELECT COUNT(*), MAX(id), (SELECT COUNT(*) FROM lootdrop_entries) FROM lootdrop WHERE TRUE {}", + ContentFilterCriteria::apply() + ); + auto results = QueryDatabase(query); if (!results.Success()) { return; @@ -2039,50 +2048,79 @@ void SharedDatabase::LoadLootTables(void *data, uint32 size) { uint8 loot_table[sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * 128)]; LootTable_Struct *lt = reinterpret_cast(loot_table); - const std::string query = "SELECT loottable.id, loottable.mincash, loottable.maxcash, loottable.avgcoin, " - "loottable_entries.lootdrop_id, loottable_entries.multiplier, loottable_entries.droplimit, " - "loottable_entries.mindrop, loottable_entries.probability FROM loottable LEFT JOIN loottable_entries " - "ON loottable.id = loottable_entries.loottable_id ORDER BY id"; + const std::string query = fmt::format( + SQL( + SELECT + loottable.id, + loottable.mincash, + loottable.maxcash, + loottable.avgcoin, + loottable_entries.lootdrop_id, + loottable_entries.multiplier, + loottable_entries.droplimit, + loottable_entries.mindrop, + loottable_entries.probability + FROM + loottable + LEFT JOIN loottable_entries ON loottable.id = loottable_entries.loottable_id + WHERE TRUE {} + ORDER BY + id + ), + ContentFilterCriteria::apply() + ); + auto results = QueryDatabase(query); if (!results.Success()) { return; } - uint32 current_id = 0; - uint32 current_entry = 0; + uint32 current_id = 0; + uint32 current_entry = 0; - for (auto row = results.begin(); row != results.end(); ++row) { - uint32 id = static_cast(atoul(row[0])); - if(id != current_id) { - if(current_id != 0) - hash.insert(current_id, loot_table, (sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * lt->NumEntries))); + for (auto row = results.begin(); row != results.end(); ++row) { + uint32 id = static_cast(atoul(row[0])); + if (id != current_id) { + if (current_id != 0) { + hash.insert( + current_id, + loot_table, + (sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * lt->NumEntries))); + } - memset(loot_table, 0, sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * 128)); - current_entry = 0; - current_id = id; - lt->mincash = static_cast(atoul(row[1])); - lt->maxcash = static_cast(atoul(row[2])); - lt->avgcoin = static_cast(atoul(row[3])); - } + memset(loot_table, 0, sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * 128)); + current_entry = 0; + current_id = id; + lt->mincash = static_cast(atoul(row[1])); + lt->maxcash = static_cast(atoul(row[2])); + lt->avgcoin = static_cast(atoul(row[3])); + } - if(current_entry > 128) - continue; + if (current_entry > 128) { + continue; + } - if(!row[4]) - continue; + if (!row[4]) { + continue; + } - lt->Entries[current_entry].lootdrop_id = static_cast(atoul(row[4])); - lt->Entries[current_entry].multiplier = static_cast(atoi(row[5])); - lt->Entries[current_entry].droplimit = static_cast(atoi(row[6])); - lt->Entries[current_entry].mindrop = static_cast(atoi(row[7])); - lt->Entries[current_entry].probability = static_cast(atof(row[8])); + lt->Entries[current_entry].lootdrop_id = static_cast(atoul(row[4])); + lt->Entries[current_entry].multiplier = static_cast(atoi(row[5])); + lt->Entries[current_entry].droplimit = static_cast(atoi(row[6])); + lt->Entries[current_entry].mindrop = static_cast(atoi(row[7])); + lt->Entries[current_entry].probability = static_cast(atof(row[8])); - ++(lt->NumEntries); - ++current_entry; - } + ++(lt->NumEntries); + ++current_entry; + } - if(current_id != 0) - hash.insert(current_id, loot_table, (sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * lt->NumEntries))); + if (current_id != 0) { + hash.insert( + current_id, + loot_table, + (sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * lt->NumEntries)) + ); + } } @@ -2091,11 +2129,29 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) { EQEmu::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); uint8 loot_drop[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)]; LootDrop_Struct *ld = reinterpret_cast(loot_drop); + + const std::string query = fmt::format( + SQL( + SELECT + lootdrop.id, + lootdrop_entries.item_id, + lootdrop_entries.item_charges, + lootdrop_entries.equip_item, + lootdrop_entries.chance, + lootdrop_entries.minlevel, + lootdrop_entries.maxlevel, + lootdrop_entries.multiplier + FROM + lootdrop + JOIN lootdrop_entries ON lootdrop.id = lootdrop_entries.lootdrop_id + WHERE + TRUE {} + ORDER BY + lootdrop_id + ), + ContentFilterCriteria::apply() + ); - const std::string query = "SELECT lootdrop.id, lootdrop_entries.item_id, lootdrop_entries.item_charges, " - "lootdrop_entries.equip_item, lootdrop_entries.chance, lootdrop_entries.minlevel, " - "lootdrop_entries.maxlevel, lootdrop_entries.multiplier FROM lootdrop JOIN lootdrop_entries " - "ON lootdrop.id = lootdrop_entries.lootdrop_id ORDER BY lootdrop_id"; auto results = QueryDatabase(query); if (!results.Success()) { return; diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index a515903e1..cd516017d 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -33,8 +33,10 @@ #include "skill_caps.h" #include "spells.h" #include "base_data.h" +#include "../common/content/world_content_service.h" EQEmuLogSys LogSys; +WorldContentService content_service; #ifdef _WINDOWS #include @@ -139,6 +141,39 @@ int main(int argc, char **argv) } } + /** + * Rules: TODO: Remove later + */ + { + std::string tmp; + if (database.GetVariable("RuleSet", tmp)) { + LogInfo("Loading rule set [{}]", tmp.c_str()); + if (!RuleManager::Instance()->LoadRules(&database, tmp.c_str(), false)) { + LogError("Failed to load ruleset [{}], falling back to defaults", tmp.c_str()); + } + } + else { + if (!RuleManager::Instance()->LoadRules(&database, "default", false)) { + LogInfo("No rule set configured, using default rules"); + } + else { + LogInfo("Loaded default rule set 'default'"); + } + } + + EQEmu::InitializeDynamicLookups(); + LogInfo("Initialized dynamic dictionary entries"); + } + + + content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion)); + + LogInfo( + "Current expansion is [{}] ({})", + content_service.GetCurrentExpansion(), + Expansion::ExpansionName[content_service.GetCurrentExpansion()] + ); + std::string hotfix_name = ""; bool load_all = true; From f7d4e51da9dc819b40e86fbd5976926531ccb2e1 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:20:50 -0500 Subject: [PATCH 082/272] Filter global_loot [skip ci] --- .../criteria/content_filter_criteria.h | 30 ++++++++--- zone/loottables.cpp | 52 +++++++++++++++---- zone/zone.cpp | 38 +++++++------- 3 files changed, 82 insertions(+), 38 deletions(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 9a86dcb99..1fd5f2267 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -26,32 +26,46 @@ #include "../../string_util.h" namespace ContentFilterCriteria { - static std::string apply() + static std::string apply(std::string table_prefix = "") { std::string criteria; + if (!table_prefix.empty()) { + table_prefix = table_prefix + "."; + } + criteria += fmt::format( - " AND (min_expansion <= {} OR min_expansion = 0)", - content_service.GetCurrentExpansion() + " AND ({}min_expansion <= {} OR {}min_expansion = 0)", + table_prefix, + content_service.GetCurrentExpansion(), + table_prefix ); criteria += fmt::format( - " AND (max_expansion >= {} OR max_expansion = 0)", - content_service.GetCurrentExpansion() + " AND ({}max_expansion >= {} OR {}max_expansion = 0)", + table_prefix, + content_service.GetCurrentExpansion(), + table_prefix ); std::vector flags = content_service.GetContentFlags(); - for (auto &flag: flags) { + + for (auto &flag: flags) { flag = "'" + flag + "'"; } std::string flags_in_filter; if (!flags.empty()) { - flags_in_filter = fmt::format(" OR content_flags IN ({})", implode(", ", flags)); + flags_in_filter = fmt::format( + " OR {}content_flags IN ({})", + table_prefix, + implode(", ", flags) + ); } criteria += fmt::format( - " AND (content_flags IS NULL{})", + " AND ({}content_flags IS NULL{})", + table_prefix, flags_in_filter ); diff --git a/zone/loottables.cpp b/zone/loottables.cpp index 0e5ba8d60..666b3d55e 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -27,6 +27,7 @@ #include "npc.h" #include "zonedb.h" #include "global_loot_manager.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include #include @@ -463,42 +464,70 @@ void NPC::CheckGlobalLootTables() void ZoneDatabase::LoadGlobalLoot() { - auto query = StringFormat("SELECT id, loottable_id, description, min_level, max_level, rare, raid, race, " - "class, bodytype, zone, hot_zone FROM global_loot WHERE enabled = 1"); + auto query = fmt::format( + SQL + ( + SELECT + id, + loottable_id, + description, + min_level, + max_level, + rare, + raid, + race, + class, + bodytype, + zone, + hot_zone + FROM + global_loot + WHERE + enabled = 1 + {} + ), + ContentFilterCriteria::apply() + ); auto results = QueryDatabase(query); - if (!results.Success() || results.RowCount() == 0) + if (!results.Success() || results.RowCount() == 0) { return; + } // we might need this, lets not keep doing it in a loop - auto zoneid = std::to_string(zone->GetZoneID()); - for (auto row = results.begin(); row != results.end(); ++row) { + auto zoneid = std::to_string(zone->GetZoneID()); + for (auto row = results.begin(); row != results.end(); ++row) { // checking zone limits if (row[10]) { auto zones = SplitString(row[10], '|'); auto it = std::find(zones.begin(), zones.end(), zoneid); - if (it == zones.end()) // not in here, skip + if (it == zones.end()) { // not in here, skip continue; + } } GlobalLootEntry e(atoi(row[0]), atoi(row[1]), row[2] ? row[2] : ""); auto min_level = atoi(row[3]); - if (min_level) + if (min_level) { e.AddRule(GlobalLoot::RuleTypes::LevelMin, min_level); + } auto max_level = atoi(row[4]); - if (max_level) + if (max_level) { e.AddRule(GlobalLoot::RuleTypes::LevelMax, max_level); + } // null is not used - if (row[5]) + if (row[5]) { e.AddRule(GlobalLoot::RuleTypes::Rare, atoi(row[5])); + } // null is not used - if (row[6]) + if (row[6]) { e.AddRule(GlobalLoot::RuleTypes::Raid, atoi(row[6])); + } if (row[7]) { auto races = SplitString(row[7], '|'); @@ -522,8 +551,9 @@ void ZoneDatabase::LoadGlobalLoot() } // null is not used - if (row[11]) + if (row[11]) { e.AddRule(GlobalLoot::RuleTypes::HotZone, atoi(row[11])); + } zone->AddGlobalLootEntry(e); } diff --git a/zone/zone.cpp b/zone/zone.cpp index 5358d9a22..3c96e2b91 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -551,32 +551,32 @@ void Zone::GetMerchantDataForZoneLoad() { std::string query = fmt::format( SQL ( SELECT - DISTINCT ml.merchantid, - ml.slot, - ml.item, - ml.faction_required, - ml.level_required, - ml.alt_currency_cost, - ml.classes_required, - ml.probability + DISTINCT merchantlist.merchantid, + merchantlist.slot, + merchantlist.item, + merchantlist.faction_required, + merchantlist.level_required, + merchantlist.alt_currency_cost, + merchantlist.classes_required, + merchantlist.probability FROM - merchantlist AS ml, - npc_types AS nt, - spawnentry AS se, - spawn2 AS s2 + merchantlist, + npc_types, + spawnentry, + spawn2 WHERE - nt.merchant_id = ml.merchantid - AND nt.id = se.npcid - AND se.spawngroupid = s2.spawngroupid - AND s2.zone = '{}' - AND s2.version = {} + npc_types.merchant_id = merchantlist.merchantid + AND npc_types.id = spawnentry.npcid + AND spawnentry.spawngroupid = spawn2.spawngroupid + AND spawn2.zone = '{}' + AND spawn2.version = {} {} ORDER BY - ml.slot + merchantlist.slot ), GetShortName(), GetInstanceVersion(), - ContentFilterCriteria::apply() + ContentFilterCriteria::apply("merchantlist") ); auto results = content_db.QueryDatabase(query); From dadd674b6343be7739ff77be444c34a940e5ba8a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:30:02 -0500 Subject: [PATCH 083/272] Filter fishing [skip ci] --- zone/forage.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index f14f1f968..56456bd36 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -30,6 +30,7 @@ #include "titles.h" #include "water_map.h" #include "zonedb.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include @@ -109,9 +110,24 @@ uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, chance[c]=0; } - std::string query = StringFormat("SELECT itemid, chance, npc_id, npc_chance " - "FROM fishing WHERE (zoneid = '%i' || zoneid = 0) AND skill_level <= '%i'", - ZoneID, skill); + std::string query = fmt::format( + SQL( + SELECT + itemid, + chance, + npc_id, + npc_chance + FROM + fishing + WHERE + (zoneid = '{}' || zoneid = 0) + AND skill_level <= '{}' + {} + ), + ZoneID, + skill, + ContentFilterCriteria::apply() + ); auto results = QueryDatabase(query); if (!results.Success()) { return 0; From 68a2af1bcedfca025b0d0d6a118cff91bbcd4531 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:37:00 -0500 Subject: [PATCH 084/272] Filter forage [skip ci] --- zone/forage.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 56456bd36..6d24f50a8 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -55,9 +55,25 @@ uint32 ZoneDatabase::GetZoneForage(uint32 ZoneID, uint8 skill) { } uint32 chancepool = 0; - std::string query = StringFormat("SELECT itemid, chance FROM " - "forage WHERE zoneid = '%i' and level <= '%i' " - "LIMIT %i", ZoneID, skill, FORAGE_ITEM_LIMIT); + std::string query = fmt::format( + SQL( + SELECT + itemid, + chance + FROM + forage + WHERE + zoneid = '{}' + and level <= '{}' + {} + LIMIT + {} + ), + ZoneID, + skill, + ContentFilterCriteria::apply(), + FORAGE_ITEM_LIMIT + ); auto results = QueryDatabase(query); if (!results.Success()) { return 0; From 9fbcd99be23c9e901291674e2716b996bfac4571 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:40:40 -0500 Subject: [PATCH 085/272] Filter ground spawns [skip ci] --- zone/object.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/zone/object.cpp b/zone/object.cpp index 3361b0e44..aa0564c9f 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -26,6 +26,7 @@ #include "quest_parser_collection.h" #include "zonedb.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include @@ -460,7 +461,7 @@ void Object::RandomSpawn(bool send_packet) { m_data.x = zone->random.Real(m_min_x, m_max_x); m_data.y = zone->random.Real(m_min_y, m_max_y); - + if(m_data.z == BEST_Z_INVALID) { glm::vec3 me; me.x = m_data.x; @@ -470,11 +471,11 @@ void Object::RandomSpawn(bool send_packet) { float best_z = zone->zonemap->FindClosestZ(me, &hit); if (best_z != BEST_Z_INVALID) { m_data.z = best_z + 0.1f; - } + } } LogInfo("Object::RandomSpawn([{}]): [{}] ([{}], [{}], [{}])", m_data.object_name, m_inst->GetID(), m_data.x, m_data.y, m_data.z); - + respawn_timer.Disable(); if(send_packet) { @@ -520,7 +521,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) co->drop_id = 0; entity_list.QueueClients(nullptr, outapp, false); safe_delete(outapp); - + // No longer using a tradeskill object sender->SetTradeskillObject(nullptr); user = nullptr; @@ -681,7 +682,7 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec "size = %f, tilt_x = %f, tilt_y = %f " "WHERE id = %i", object.zone_id, object.x, object.y, object.z, object.heading, - item_id, charges, object_name, type, icon, + item_id, charges, object_name, type, icon, object.size, object.tilt_x, object.tilt_y, id); safe_delete_array(object_name); auto results = QueryDatabase(query); @@ -698,14 +699,20 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec // Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs) { - std::string query = StringFormat("SELECT max_x, max_y, max_z, " - "min_x, min_y, heading, name, " - "item, max_allowed, respawn_timer " - "FROM ground_spawns " - "WHERE zoneid = %i AND (version = %u OR version = -1) " - "LIMIT 50", zone_id, version); - auto results = QueryDatabase(query); - if (!results.Success()) { + std::string query = StringFormat( + "SELECT max_x, max_y, max_z, " + "min_x, min_y, heading, name, " + "item, max_allowed, respawn_timer " + "FROM ground_spawns " + "WHERE zoneid = %i AND (version = %u OR version = -1) %s " + "LIMIT 50", + zone_id, + version, + ContentFilterCriteria::apply().c_str() + ); + + auto results = QueryDatabase(query); + if (!results.Success()) { return gs; } From 91c874a3105c1b8b0421666df4c4b5f3cd38c644 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:43:09 -0500 Subject: [PATCH 086/272] Filter starting_items [skip ci] --- common/shareddb.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 358a80d00..86f497d89 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -432,16 +432,25 @@ bool SharedDatabase::SetSharedPlatinum(uint32 account_id, int32 amount_to_add) { bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) { - const EQEmu::ItemData* myitem; + const EQEmu::ItemData *myitem; - std::string query = StringFormat("SELECT itemid, item_charges, slot FROM starting_items " - "WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND " - "(deityid = %i or deityid = 0) AND (zoneid = %i or zoneid = 0) AND " - "gm <= %i ORDER BY id", - si_race, si_class, si_deity, si_current_zone, admin_level); - auto results = QueryDatabase(query); - if (!results.Success()) - return false; + std::string query = StringFormat( + "SELECT itemid, item_charges, slot FROM starting_items " + "WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND " + "(deityid = %i or deityid = 0) AND (zoneid = %i or zoneid = 0) AND " + "gm <= %i %s ORDER BY id", + si_race, + si_class, + si_deity, + si_current_zone, + admin_level, + ContentFilterCriteria::apply().c_str() + ); + + auto results = QueryDatabase(query); + if (!results.Success()) { + return false; + } for (auto row = results.begin(); row != results.end(); ++row) { @@ -2129,7 +2138,7 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) { EQEmu::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); uint8 loot_drop[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)]; LootDrop_Struct *ld = reinterpret_cast(loot_drop); - + const std::string query = fmt::format( SQL( SELECT From 9aac84a4050b650539f818e1461c4d6bf7046310 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:45:45 -0500 Subject: [PATCH 087/272] filter traps [skip ci] --- zone/trap.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/zone/trap.cpp b/zone/trap.cpp index 7d205e563..b490f5c8d 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -24,6 +24,7 @@ #include "entity.h" #include "mob.h" #include "trap.h" +#include "../common/repositories/criteria/content_filter_criteria.h" /* @@ -104,7 +105,7 @@ bool Trap::Process() reset_timer.Disable(); charid = 0; } - + if (respawn_timer.Enabled() && respawn_timer.Check()) { detected = false; @@ -225,13 +226,13 @@ void Trap::Trigger(Mob* trigger) safe_delete(outapp); } } - + if (trigger && trigger->IsClient()) { trigger->CastToClient()->trapid = trap_id; charid = trigger->CastToClient()->CharacterID(); } - + bool update = false; if (despawn_when_triggered) { @@ -242,16 +243,16 @@ void Trap::Trigger(Mob* trigger) { reset_timer.Start(5000); } - + if (triggered_number > 0) ++times_triggered; - + if (triggered_number > 0 && triggered_number <= times_triggered) { Log(Logs::General, Logs::Traps, "Triggered number for trap %d reached. %d/%d", trap_id, times_triggered, triggered_number); update = true; } - + if (update) { UpdateTrap(); @@ -290,7 +291,7 @@ Trap* EntityList::FindNearbyTrap(Mob* searcher, float max_dist, float &trap_curd } else trap_curdist = INVALID_INDEX; - + return current_trap; } @@ -399,9 +400,14 @@ void EntityList::ClearTrapPointers() bool ZoneDatabase::LoadTraps(const char* zonename, int16 version) { - std::string query = StringFormat("SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, " + std::string query = StringFormat( + "SELECT id, x, y, z, effect, effectvalue, effectvalue2, skill, " "maxzdiff, radius, chance, message, respawn_time, respawn_var, level, " - "`group`, triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND version=%u", zonename, version); + "`group`, triggered_number, despawn_when_triggered, undetectable FROM traps WHERE zone='%s' AND version=%u %s", + zonename, + version, + ContentFilterCriteria::apply().c_str() + ); auto results = QueryDatabase(query); if (!results.Success()) { From 2f4a217f7ae87a2a2fa4a3513e96f091fbff158f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:49:04 -0500 Subject: [PATCH 088/272] Filter zone_points [skip ci] --- zone/zone.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 3c96e2b91..8498b865b 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1841,16 +1841,22 @@ ZonePoint* Zone::GetClosestZonePointWithoutZone(float x, float y, float z, Clien return closest_zp; } -bool ZoneDatabase::LoadStaticZonePoints(LinkedList* zone_point_list, const char* zonename, uint32 version) +bool ZoneDatabase::LoadStaticZonePoints(LinkedList *zone_point_list, const char *zonename, uint32 version) { zone_point_list->Clear(); zone->numzonepoints = 0; - std::string query = StringFormat("SELECT x, y, z, target_x, target_y, " - "target_z, target_zone_id, heading, target_heading, " - "number, target_instance, client_version_mask " - "FROM zone_points WHERE zone='%s' AND (version=%i OR version=-1) " - "ORDER BY number", - zonename, version); + + std::string query = StringFormat( + "SELECT x, y, z, target_x, target_y, " + "target_z, target_zone_id, heading, target_heading, " + "number, target_instance, client_version_mask " + "FROM zone_points WHERE zone='%s' AND (version=%i OR version=-1) %s" + "ORDER BY number", + zonename, + version, + ContentFilterCriteria::apply().c_str() + ); + auto results = QueryDatabase(query); if (!results.Success()) { return false; From c8722ea789ccd297cc22d4c924869956c5ab3325 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 19:58:04 -0500 Subject: [PATCH 089/272] Filter start_zones [skip ci] --- world/worlddb.cpp | 19 +++++++++++-------- zone/client_packet.cpp | 11 ++++++++--- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/world/worlddb.cpp b/world/worlddb.cpp index b7bec5459..cf6411cc5 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -25,6 +25,7 @@ #include #include #include "sof_char_create_data.h" +#include "../common/repositories/criteria/content_filter_criteria.h" WorldDatabase database; WorldDatabase content_db; @@ -197,10 +198,11 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o if (has_home == 0 || has_bind == 0) { character_list_query = StringFormat( - "SELECT `zone_id`, `bind_id`, `x`, `y`, `z` FROM `start_zones` WHERE `player_class` = %i AND `player_deity` = %i AND `player_race` = %i", + "SELECT `zone_id`, `bind_id`, `x`, `y`, `z` FROM `start_zones` WHERE `player_class` = %i AND `player_deity` = %i AND `player_race` = %i %s", p_character_select_entry_struct->Class, p_character_select_entry_struct->Deity, - p_character_select_entry_struct->Race + p_character_select_entry_struct->Race, + ContentFilterCriteria::apply().c_str() ); auto results_bind = content_db.QueryDatabase(character_list_query); for (auto row_d = results_bind.begin(); row_d != results_bind.end(); ++row_d) { @@ -313,7 +315,7 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o if (matslot > 6) { uint32 item_id_file = 0; - // Weapon Models + // Weapon Models if (inst->GetOrnamentationIDFile() != 0) { item_id_file = inst->GetOrnamentationIDFile(); p_character_select_entry_struct->Equip[matslot].Material = item_id_file; @@ -381,7 +383,7 @@ int WorldDatabase::MoveCharacterToBind(int CharID, uint8 bindnum) heading = atof(row[5]); } - query = StringFormat("UPDATE character_data SET zone_id = '%d', zone_instance = '%d', x = '%f', y = '%f', z = '%f', heading = '%f' WHERE id = %u", + query = StringFormat("UPDATE character_data SET zone_id = '%d', zone_instance = '%d', x = '%f', y = '%f', z = '%f', heading = '%f' WHERE id = %u", zone_id, instance_id, x, y, z, heading, CharID); results = database.QueryDatabase(query); @@ -423,11 +425,12 @@ bool WorldDatabase::GetStartZone( // see if we have an entry for start_zone. We can support both titanium & SOF+ by having two entries per class/race/deity combo with different zone_ids std::string query = StringFormat( "SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i " - "AND player_class = %i AND player_deity = %i AND player_race = %i", + "AND player_class = %i AND player_deity = %i AND player_race = %i %s", p_char_create_struct->start_zone, p_char_create_struct->class_, p_char_create_struct->deity, - p_char_create_struct->race + p_char_create_struct->race, + ContentFilterCriteria::apply().c_str() ); auto results = QueryDatabase(query); @@ -469,7 +472,7 @@ bool WorldDatabase::GetStartZone( void WorldDatabase::SetSoFDefaultStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc){ if (in_cc->start_zone == RuleI(World, TutorialZoneID)) { in_pp->zone_id = in_cc->start_zone; - } + } else { in_pp->x = in_pp->binds[0].x = -51; in_pp->y = in_pp->binds[0].y = -20; @@ -805,4 +808,4 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In } return true; -} \ No newline at end of file +} diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index f4a53ad8b..8005e5dec 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -12437,9 +12437,14 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) uint32 zoneid = 0; uint32 startCity = (uint32)strtol((const char*)app->pBuffer, nullptr, 10); - std::string query = StringFormat("SELECT zone_id, bind_id, x, y, z FROM start_zones " - "WHERE player_class=%i AND player_deity=%i AND player_race=%i", - m_pp.class_, m_pp.deity, m_pp.race); + std::string query = StringFormat( + "SELECT zone_id, bind_id, x, y, z FROM start_zones " + "WHERE player_class=%i AND player_deity=%i AND player_race=%i %s", + m_pp.class_, + m_pp.deity, + m_pp.race, + ContentFilterCriteria::apply().c_str() + ); auto results = content_db.QueryDatabase(query); if (!results.Success()) { LogError("No valid start zones found for /setstartcity"); From 0cce61e85ddd74e9e80174b5104595d67fbf1d2d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 20:11:05 -0500 Subject: [PATCH 090/272] Filter GetZoneCFG [skip ci] --- zone/zonedb.cpp | 60 ++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index b68fe2284..d290ff7fc 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -12,6 +12,7 @@ #include "zone.h" #include "zonedb.h" #include "aura.h" +#include "../common/repositories/criteria/content_filter_criteria.h" #include #include @@ -83,19 +84,19 @@ bool ZoneDatabase::SaveZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct } bool ZoneDatabase::GetZoneCFG( - uint32 zoneid, - uint16 instance_id, - NewZone_Struct *zone_data, - bool &can_bind, - bool &can_combat, - bool &can_levitate, - bool &can_castoutdoor, - bool &is_city, - bool &is_hotzone, - bool &allow_mercs, + uint32 zoneid, + uint16 instance_id, + NewZone_Struct *zone_data, + bool &can_bind, + bool &can_combat, + bool &can_levitate, + bool &can_castoutdoor, + bool &is_city, + bool &is_hotzone, + bool &allow_mercs, double &max_movement_update_range, - uint8 &zone_type, - int &ruleset, + uint8 &zone_type, + int &ruleset, char **map_filename) { *map_filename = new char[100]; @@ -165,8 +166,11 @@ bool ZoneDatabase::GetZoneCFG( "fast_regen_endurance, " // 59 "npc_max_aggro_dist, " // 60 "max_movement_update_range " // 61 - "FROM zone WHERE zoneidnumber = %i AND version = %i", - zoneid, instance_id); + "FROM zone WHERE zoneidnumber = %i AND version = %i %s", + zoneid, + instance_id, + ContentFilterCriteria::apply().c_str() + ); auto results = QueryDatabase(query); if (!results.Success()) { strcpy(*map_filename, "default"); @@ -361,7 +365,7 @@ void ZoneDatabase::RegisterBug(BugReport_Struct* bug_report) { char* type_ = nullptr; char* target_ = nullptr; char* bug_ = nullptr; - + len = strlen(bug_report->reporter_name); if (len) { if (len > 63) // check against db column size @@ -427,7 +431,7 @@ void ZoneDatabase::RegisterBug(BugReport_Struct* bug_report) { safe_delete_array(type_); safe_delete_array(target_); safe_delete_array(bug_); - + QueryDatabase(query); } @@ -585,7 +589,7 @@ void ZoneDatabase::RegisterBug(Client* client, BugReport_Struct* bug_report) { safe_delete_array(target_name_); safe_delete_array(bug_report_); safe_delete_array(system_info_); - + auto result = QueryDatabase(query); // TODO: Entity dumping [RuleB(Bugs, DumpTargetEntity)] @@ -1244,9 +1248,9 @@ bool ZoneDatabase::LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Str "`character_spells` " "WHERE `id` = %u ORDER BY `slot_id`", character_id); auto results = database.QueryDatabase(query); - + /* Initialize Spells */ - + memset(pp->spell_book, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELLBOOK_SIZE)); // We have the ability to block loaded spells by max id on a per-client basis.. @@ -1262,7 +1266,7 @@ bool ZoneDatabase::LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Str continue; if (id < 3 || id > SPDAT_RECORDS) // 3 ("Summon Corpse") is the first scribable spell in spells_us.txt continue; - + pp->spell_book[idx] = id; } @@ -1606,11 +1610,11 @@ bool ZoneDatabase::SaveCharacterLeadershipAA(uint32 character_id, PlayerProfile_ } bool ZoneDatabase::SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp){ - + /* If this is ever zero - the client hasn't fully loaded and potentially crashed during zone */ if (account_id <= 0) return false; - + std::string mail_key = database.GetMailKey(character_id); clock_t t = std::clock(); /* Function timer start */ @@ -4090,9 +4094,9 @@ bool ZoneDatabase::LoadFactionData() faction_array = new Faction *[max_faction + 1]; memset(faction_array, 0, (sizeof(Faction*) * (max_faction + 1))); - + std::vector faction_ids; - + // load factions query = "SELECT `id`, `name`, `base` FROM `faction_list`"; @@ -4120,7 +4124,7 @@ bool ZoneDatabase::LoadFactionData() faction_array[index]->base = atoi(fr_row[2]); faction_array[index]->min = MIN_PERSONAL_FACTION; faction_array[index]->max = MAX_PERSONAL_FACTION; - + faction_ids.push_back(index); } @@ -4156,7 +4160,7 @@ bool ZoneDatabase::LoadFactionData() else { LogInfo("Unable to load Faction Base data..."); } - + // load race, class and diety modifiers query = fmt::format("SELECT `faction_id`, `mod`, `mod_name` FROM `faction_list_mod` WHERE `faction_id` IN ({})", faction_id_criteria); @@ -4879,7 +4883,7 @@ uint32 ZoneDatabase::LoadSaylinkID(const char* saylink_text, bool auto_insert) { if (!saylink_text || saylink_text[0] == '\0') return 0; - + std::string query = StringFormat("SELECT `id` FROM `saylink` WHERE `phrase` = '%s' LIMIT 1", saylink_text); auto results = QueryDatabase(query); if (!results.Success()) @@ -4904,6 +4908,6 @@ uint32 ZoneDatabase::SaveSaylinkID(const char* saylink_text) auto results = QueryDatabase(query); if (!results.Success()) return 0; - + return results.LastInsertedID(); } From c978ca65a4be304d5a418202abff1ae028e56c00 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 22:19:36 -0500 Subject: [PATCH 091/272] Split repositories out between a base immutable repository (that does not change) and an extended repository of which developers can add more custom methods to --- common/CMakeLists.txt | 173 +- common/repositories/aa_ability_repository.h | 408 +-- .../repositories/aa_rank_effects_repository.h | 324 +- .../repositories/aa_rank_prereqs_repository.h | 306 +- common/repositories/aa_ranks_repository.h | 399 +-- .../repositories/account_flags_repository.h | 306 +- common/repositories/account_ip_repository.h | 315 +- common/repositories/account_repository.h | 453 +-- .../repositories/account_rewards_repository.h | 306 +- .../adventure_details_repository.h | 363 +-- .../adventure_members_repository.h | 300 +- .../repositories/adventure_stats_repository.h | 381 +-- ...venture_template_entry_flavor_repository.h | 300 +- .../adventure_template_entry_repository.h | 300 +- .../adventure_template_repository.h | 579 +--- .../alternate_currency_repository.h | 300 +- common/repositories/auras_repository.h | 381 +-- common/repositories/banned_ips_repository.h | 300 +- .../base/base_aa_ability_repository.h | 414 +++ .../base/base_aa_rank_effects_repository.h | 330 ++ .../base/base_aa_rank_prereqs_repository.h | 312 ++ .../base/base_aa_ranks_repository.h | 405 +++ .../base/base_account_flags_repository.h | 312 ++ .../base/base_account_ip_repository.h | 321 ++ .../base/base_account_repository.h | 459 +++ .../base/base_account_rewards_repository.h | 312 ++ .../base/base_adventure_details_repository.h | 369 +++ .../base/base_adventure_members_repository.h | 306 ++ .../base/base_adventure_stats_repository.h | 387 +++ ...venture_template_entry_flavor_repository.h | 306 ++ ...base_adventure_template_entry_repository.h | 306 ++ .../base/base_adventure_template_repository.h | 585 ++++ .../base/base_alternate_currency_repository.h | 306 ++ .../repositories/base/base_auras_repository.h | 387 +++ .../base/base_banned_ips_repository.h | 306 ++ .../base/base_base_data_repository.h | 375 +++ .../base/base_blocked_spells_repository.h | 396 +++ .../repositories/base/base_books_repository.h | 315 ++ .../base/base_bug_reports_repository.h | 576 ++++ .../repositories/base/base_bugs_repository.h | 405 +++ .../repositories/base/base_buyer_repository.h | 339 ++ ...base_char_create_combinations_repository.h | 360 +++ ...char_create_point_allocations_repository.h | 423 +++ .../base/base_char_recipe_list_repository.h | 312 ++ .../base_character_activities_repository.h | 327 ++ .../base_character_alt_currency_repository.h | 312 ++ ...character_alternate_abilities_repository.h | 321 ++ .../base/base_character_auras_repository.h | 312 ++ .../base_character_bandolier_repository.h | 336 ++ .../base/base_character_bind_repository.h | 357 +++ .../base/base_character_buffs_repository.h | 438 +++ .../base_character_corpse_items_repository.h | 384 +++ .../base/base_character_corpses_repository.h | 711 ++++ .../base/base_character_currency_repository.h | 441 +++ .../base/base_character_data_repository.h | 1206 +++++++ .../base_character_disciplines_repository.h | 312 ++ ...se_character_inspect_messages_repository.h | 306 ++ .../base_character_item_recast_repository.h | 312 ++ .../base_character_languages_repository.h | 312 ++ ...haracter_leadership_abilities_repository.h | 312 ++ .../base/base_character_material_repository.h | 348 ++ .../base_character_memmed_spells_repository.h | 312 ++ .../base_character_pet_buffs_repository.h | 381 +++ .../base/base_character_pet_info_repository.h | 357 +++ .../base_character_pet_inventory_repository.h | 318 ++ .../base_character_potionbelt_repository.h | 321 ++ .../base/base_character_skills_repository.h | 312 ++ .../base/base_character_spells_repository.h | 312 ++ .../base/base_character_tasks_repository.h | 330 ++ .../base/base_character_tribute_repository.h | 318 ++ .../base/base_chatchannels_repository.h | 324 ++ .../base/base_command_settings_repository.h | 315 ++ .../base/base_completed_tasks_repository.h | 318 ++ .../base/base_data_buckets_repository.h | 324 ++ .../base/base_db_str_repository.h | 312 ++ .../base/base_discovered_items_repository.h | 324 ++ .../repositories/base/base_doors_repository.h | 594 ++++ .../base/base_eventlog_repository.h | 378 +++ .../base/base_faction_base_data_repository.h | 342 ++ .../base/base_faction_list_mod_repository.h | 324 ++ .../base/base_faction_list_repository.h | 315 ++ .../base/base_faction_values_repository.h | 321 ++ .../base/base_fishing_repository.h | 378 +++ .../base/base_forage_repository.h | 360 +++ .../base/base_friends_repository.h | 312 ++ .../base/base_global_loot_repository.h | 432 +++ .../base/base_gm_ips_repository.h | 312 ++ .../base/base_goallists_repository.h | 306 ++ .../base/base_graveyard_repository.h | 342 ++ .../base/base_ground_spawns_repository.h | 441 +++ .../base/base_group_id_repository.h | 318 ++ .../base/base_group_leaders_repository.h | 369 +++ .../base/base_guild_members_repository.h | 369 +++ .../base/base_guild_ranks_repository.h | 384 +++ .../base/base_guild_relations_repository.h | 312 ++ .../base/base_guilds_repository.h | 369 +++ .../base/base_hackers_repository.h | 342 ++ .../base/base_horses_repository.h | 342 ++ .../base_instance_list_player_repository.h | 306 ++ .../base/base_instance_list_repository.h | 351 ++ .../base/base_inventory_repository.h | 429 +++ .../base_inventory_snapshots_repository.h | 435 +++ .../base/base_ip_exemptions_repository.h | 315 ++ .../base/base_item_tick_repository.h | 342 ++ .../repositories/base/base_items_repository.h | 2853 +++++++++++++++++ .../base/base_launcher_repository.h | 306 ++ .../base/base_launcher_zones_repository.h | 312 ++ .../base/base_ldon_trap_entries_repository.h | 306 ++ .../base_ldon_trap_templates_repository.h | 333 ++ .../base/base_level_exp_mods_repository.h | 315 ++ .../base/base_lfguild_repository.h | 366 +++ .../base/base_login_accounts_repository.h | 369 +++ .../base/base_login_api_tokens_repository.h | 342 ++ .../base_login_server_admins_repository.h | 360 +++ .../base_login_server_list_types_repository.h | 306 ++ .../base_login_world_servers_repository.h | 378 +++ .../base/base_logsys_categories_repository.h | 333 ++ .../base/base_lootdrop_entries_repository.h | 366 +++ .../base/base_lootdrop_repository.h | 333 ++ .../base/base_loottable_entries_repository.h | 339 ++ .../base/base_loottable_repository.h | 369 +++ .../repositories/base/base_mail_repository.h | 360 +++ .../base/base_merchantlist_repository.h | 384 +++ .../base/base_merchantlist_temp_repository.h | 321 ++ .../base/base_name_filter_repository.h | 306 ++ .../base/base_npc_emotes_repository.h | 333 ++ .../base_npc_faction_entries_repository.h | 330 ++ .../base/base_npc_faction_repository.h | 324 ++ .../base_npc_scale_global_base_repository.h | 537 ++++ ...se_npc_spells_effects_entries_repository.h | 360 +++ .../base/base_npc_spells_effects_repository.h | 315 ++ .../base/base_npc_spells_entries_repository.h | 396 +++ .../base/base_npc_spells_repository.h | 477 +++ .../base/base_npc_types_repository.h | 1386 ++++++++ .../base/base_npc_types_tint_repository.h | 549 ++++ .../base/base_object_contents_repository.h | 393 +++ .../base/base_object_repository.h | 522 +++ ...se_perl_event_export_settings_repository.h | 351 ++ .../base/base_petitions_repository.h | 432 +++ ...ase_pets_equipmentset_entries_repository.h | 312 ++ .../base/base_pets_equipmentset_repository.h | 315 ++ .../repositories/base/base_pets_repository.h | 357 +++ .../base/base_player_titlesets_repository.h | 315 ++ .../base/base_proximities_repository.h | 357 +++ .../base/base_quest_globals_repository.h | 333 ++ .../base/base_raid_details_repository.h | 324 ++ .../base/base_raid_members_repository.h | 369 +++ .../base/base_reports_repository.h | 324 ++ .../base/base_respawn_times_repository.h | 321 ++ .../base/base_rule_sets_repository.h | 306 ++ .../base/base_rule_values_repository.h | 321 ++ .../base/base_saylink_repository.h | 306 ++ .../base/base_skill_caps_repository.h | 324 ++ .../base/base_spawn2_repository.h | 423 +++ .../base_spawn_condition_values_repository.h | 318 ++ .../base/base_spawn_conditions_repository.h | 330 ++ .../base/base_spawn_events_repository.h | 414 +++ .../base/base_spawnentry_repository.h | 321 ++ .../base/base_spawngroup_repository.h | 405 +++ .../base/base_spell_buckets_repository.h | 315 ++ .../base/base_spell_globals_repository.h | 324 ++ .../base/base_spells_new_repository.h | 2421 ++++++++++++++ .../base/base_start_zones_repository.h | 441 +++ .../base/base_starting_items_repository.h | 393 +++ .../base/base_task_activities_repository.h | 420 +++ .../repositories/base/base_tasks_repository.h | 432 +++ .../base/base_tasksets_repository.h | 306 ++ .../base/base_timers_repository.h | 330 ++ .../base/base_titles_repository.h | 441 +++ .../base/base_trader_repository.h | 339 ++ ...ase_tradeskill_recipe_entries_repository.h | 360 +++ .../repositories/base/base_traps_repository.h | 504 +++ .../base/base_tribute_levels_repository.h | 321 ++ .../base/base_tributes_repository.h | 330 ++ .../base/base_variables_repository.h | 324 ++ ...base_veteran_reward_templates_repository.h | 330 ++ .../base/base_zone_points_repository.h | 468 +++ .../repositories/base/base_zone_repository.h | 1062 ++++++ common/repositories/base_data_repository.h | 369 +-- .../repositories/blocked_spells_repository.h | 390 +-- common/repositories/books_repository.h | 309 +- common/repositories/bug_reports_repository.h | 570 +--- common/repositories/bugs_repository.h | 399 +-- common/repositories/buyer_repository.h | 333 +- .../char_create_combinations_repository.h | 327 +- ...char_create_point_allocations_repository.h | 417 +-- .../char_recipe_list_repository.h | 306 +- .../character_activities_repository.h | 321 +- .../character_alt_currency_repository.h | 306 +- ...character_alternate_abilities_repository.h | 315 +- .../repositories/character_auras_repository.h | 306 +- .../character_bandolier_repository.h | 330 +- .../repositories/character_bind_repository.h | 351 +- .../repositories/character_buffs_repository.h | 432 +-- .../character_corpse_items_repository.h | 378 +-- .../character_corpses_repository.h | 705 +--- .../character_currency_repository.h | 435 +-- .../repositories/character_data_repository.h | 1200 +------ .../character_disciplines_repository.h | 306 +- .../character_inspect_messages_repository.h | 300 +- .../character_item_recast_repository.h | 306 +- .../character_languages_repository.h | 306 +- ...haracter_leadership_abilities_repository.h | 306 +- .../character_material_repository.h | 342 +- .../character_memmed_spells_repository.h | 306 +- .../character_pet_buffs_repository.h | 375 +-- .../character_pet_info_repository.h | 351 +- .../character_pet_inventory_repository.h | 312 +- .../character_potionbelt_repository.h | 315 +- .../character_skills_repository.h | 306 +- .../character_spells_repository.h | 306 +- .../repositories/character_tasks_repository.h | 324 +- .../character_tribute_repository.h | 312 +- common/repositories/chatchannels_repository.h | 318 +- .../command_settings_repository.h | 309 +- .../repositories/completed_tasks_repository.h | 312 +- common/repositories/data_buckets_repository.h | 318 +- common/repositories/db_str_repository.h | 306 +- .../discovered_items_repository.h | 318 +- common/repositories/doors_repository.h | 561 +--- common/repositories/eventlog_repository.h | 372 +-- .../faction_base_data_repository.h | 336 +- .../faction_list_mod_repository.h | 318 +- common/repositories/faction_list_repository.h | 309 +- .../repositories/faction_values_repository.h | 315 +- common/repositories/fishing_repository.h | 345 +- common/repositories/forage_repository.h | 327 +- common/repositories/friends_repository.h | 306 +- common/repositories/global_loot_repository.h | 399 +-- common/repositories/gm_ips_repository.h | 306 +- common/repositories/goallists_repository.h | 300 +- common/repositories/graveyard_repository.h | 336 +- .../repositories/ground_spawns_repository.h | 408 +-- common/repositories/group_id_repository.h | 312 +- .../repositories/group_leaders_repository.h | 363 +-- .../repositories/guild_members_repository.h | 363 +-- common/repositories/guild_ranks_repository.h | 378 +-- .../repositories/guild_relations_repository.h | 306 +- common/repositories/guilds_repository.h | 363 +-- common/repositories/hackers_repository.h | 336 +- common/repositories/horses_repository.h | 336 +- .../instance_list_player_repository.h | 300 +- .../repositories/instance_list_repository.h | 345 +- common/repositories/inventory_repository.h | 423 +-- .../inventory_snapshots_repository.h | 429 +-- .../repositories/ip_exemptions_repository.h | 309 +- common/repositories/item_tick_repository.h | 336 +- common/repositories/items_repository.h | 2847 +--------------- common/repositories/launcher_repository.h | 300 +- .../repositories/launcher_zones_repository.h | 306 +- .../ldon_trap_entries_repository.h | 300 +- .../ldon_trap_templates_repository.h | 327 +- .../repositories/level_exp_mods_repository.h | 309 +- common/repositories/lfguild_repository.h | 360 +-- .../repositories/login_accounts_repository.h | 363 +-- .../login_api_tokens_repository.h | 336 +- .../login_server_admins_repository.h | 354 +- .../login_server_list_types_repository.h | 300 +- .../login_world_servers_repository.h | 372 +-- .../logsys_categories_repository.h | 327 +- .../lootdrop_entries_repository.h | 360 +-- common/repositories/lootdrop_repository.h | 300 +- .../loottable_entries_repository.h | 333 +- common/repositories/loottable_repository.h | 336 +- common/repositories/mail_repository.h | 354 +- common/repositories/merchantlist_repository.h | 351 +- .../merchantlist_temp_repository.h | 315 +- common/repositories/name_filter_repository.h | 300 +- common/repositories/npc_emotes_repository.h | 327 +- .../npc_faction_entries_repository.h | 324 +- common/repositories/npc_faction_repository.h | 318 +- .../npc_scale_global_base_repository.h | 531 +-- .../npc_spells_effects_entries_repository.h | 354 +- .../npc_spells_effects_repository.h | 309 +- .../npc_spells_entries_repository.h | 390 +-- common/repositories/npc_spells_repository.h | 471 +-- common/repositories/npc_types_repository.h | 1380 +------- .../repositories/npc_types_tint_repository.h | 543 +--- .../repositories/object_contents_repository.h | 387 +-- common/repositories/object_repository.h | 516 +-- .../perl_event_export_settings_repository.h | 345 +- common/repositories/petitions_repository.h | 426 +-- .../pets_equipmentset_entries_repository.h | 306 +- .../pets_equipmentset_repository.h | 309 +- common/repositories/pets_repository.h | 351 +- .../player_titlesets_repository.h | 309 +- common/repositories/proximities_repository.h | 351 +- .../repositories/quest_globals_repository.h | 327 +- common/repositories/raid_details_repository.h | 318 +- common/repositories/raid_members_repository.h | 363 +-- common/repositories/reports_repository.h | 318 +- .../repositories/respawn_times_repository.h | 315 +- common/repositories/rule_sets_repository.h | 300 +- common/repositories/rule_values_repository.h | 315 +- common/repositories/saylink_repository.h | 300 +- common/repositories/skill_caps_repository.h | 318 +- common/repositories/spawn2_repository.h | 417 +-- .../spawn_condition_values_repository.h | 312 +- .../spawn_conditions_repository.h | 324 +- common/repositories/spawn_events_repository.h | 408 +-- common/repositories/spawnentry_repository.h | 315 +- common/repositories/spawngroup_repository.h | 399 +-- .../repositories/spell_buckets_repository.h | 309 +- .../repositories/spell_globals_repository.h | 318 +- common/repositories/spells_new_repository.h | 2415 +------------- common/repositories/start_zones_repository.h | 408 +-- .../repositories/starting_items_repository.h | 360 +-- .../repositories/task_activities_repository.h | 414 +-- common/repositories/tasks_repository.h | 426 +-- common/repositories/tasksets_repository.h | 300 +- .../template/base_repository.template | 299 ++ .../repositories/template/repository.template | 293 +- common/repositories/timers_repository.h | 324 +- common/repositories/titles_repository.h | 408 +-- common/repositories/trader_repository.h | 333 +- .../tradeskill_recipe_entries_repository.h | 354 +- common/repositories/traps_repository.h | 471 +-- .../repositories/tribute_levels_repository.h | 315 +- common/repositories/tributes_repository.h | 324 +- common/repositories/variables_repository.h | 318 +- .../veteran_reward_templates_repository.h | 324 +- common/repositories/zone_points_repository.h | 435 +-- common/repositories/zone_repository.h | 1056 +----- .../generators/repository-generator.pl | 94 +- 324 files changed, 70882 insertions(+), 58053 deletions(-) create mode 100644 common/repositories/base/base_aa_ability_repository.h create mode 100644 common/repositories/base/base_aa_rank_effects_repository.h create mode 100644 common/repositories/base/base_aa_rank_prereqs_repository.h create mode 100644 common/repositories/base/base_aa_ranks_repository.h create mode 100644 common/repositories/base/base_account_flags_repository.h create mode 100644 common/repositories/base/base_account_ip_repository.h create mode 100644 common/repositories/base/base_account_repository.h create mode 100644 common/repositories/base/base_account_rewards_repository.h create mode 100644 common/repositories/base/base_adventure_details_repository.h create mode 100644 common/repositories/base/base_adventure_members_repository.h create mode 100644 common/repositories/base/base_adventure_stats_repository.h create mode 100644 common/repositories/base/base_adventure_template_entry_flavor_repository.h create mode 100644 common/repositories/base/base_adventure_template_entry_repository.h create mode 100644 common/repositories/base/base_adventure_template_repository.h create mode 100644 common/repositories/base/base_alternate_currency_repository.h create mode 100644 common/repositories/base/base_auras_repository.h create mode 100644 common/repositories/base/base_banned_ips_repository.h create mode 100644 common/repositories/base/base_base_data_repository.h create mode 100644 common/repositories/base/base_blocked_spells_repository.h create mode 100644 common/repositories/base/base_books_repository.h create mode 100644 common/repositories/base/base_bug_reports_repository.h create mode 100644 common/repositories/base/base_bugs_repository.h create mode 100644 common/repositories/base/base_buyer_repository.h create mode 100644 common/repositories/base/base_char_create_combinations_repository.h create mode 100644 common/repositories/base/base_char_create_point_allocations_repository.h create mode 100644 common/repositories/base/base_char_recipe_list_repository.h create mode 100644 common/repositories/base/base_character_activities_repository.h create mode 100644 common/repositories/base/base_character_alt_currency_repository.h create mode 100644 common/repositories/base/base_character_alternate_abilities_repository.h create mode 100644 common/repositories/base/base_character_auras_repository.h create mode 100644 common/repositories/base/base_character_bandolier_repository.h create mode 100644 common/repositories/base/base_character_bind_repository.h create mode 100644 common/repositories/base/base_character_buffs_repository.h create mode 100644 common/repositories/base/base_character_corpse_items_repository.h create mode 100644 common/repositories/base/base_character_corpses_repository.h create mode 100644 common/repositories/base/base_character_currency_repository.h create mode 100644 common/repositories/base/base_character_data_repository.h create mode 100644 common/repositories/base/base_character_disciplines_repository.h create mode 100644 common/repositories/base/base_character_inspect_messages_repository.h create mode 100644 common/repositories/base/base_character_item_recast_repository.h create mode 100644 common/repositories/base/base_character_languages_repository.h create mode 100644 common/repositories/base/base_character_leadership_abilities_repository.h create mode 100644 common/repositories/base/base_character_material_repository.h create mode 100644 common/repositories/base/base_character_memmed_spells_repository.h create mode 100644 common/repositories/base/base_character_pet_buffs_repository.h create mode 100644 common/repositories/base/base_character_pet_info_repository.h create mode 100644 common/repositories/base/base_character_pet_inventory_repository.h create mode 100644 common/repositories/base/base_character_potionbelt_repository.h create mode 100644 common/repositories/base/base_character_skills_repository.h create mode 100644 common/repositories/base/base_character_spells_repository.h create mode 100644 common/repositories/base/base_character_tasks_repository.h create mode 100644 common/repositories/base/base_character_tribute_repository.h create mode 100644 common/repositories/base/base_chatchannels_repository.h create mode 100644 common/repositories/base/base_command_settings_repository.h create mode 100644 common/repositories/base/base_completed_tasks_repository.h create mode 100644 common/repositories/base/base_data_buckets_repository.h create mode 100644 common/repositories/base/base_db_str_repository.h create mode 100644 common/repositories/base/base_discovered_items_repository.h create mode 100644 common/repositories/base/base_doors_repository.h create mode 100644 common/repositories/base/base_eventlog_repository.h create mode 100644 common/repositories/base/base_faction_base_data_repository.h create mode 100644 common/repositories/base/base_faction_list_mod_repository.h create mode 100644 common/repositories/base/base_faction_list_repository.h create mode 100644 common/repositories/base/base_faction_values_repository.h create mode 100644 common/repositories/base/base_fishing_repository.h create mode 100644 common/repositories/base/base_forage_repository.h create mode 100644 common/repositories/base/base_friends_repository.h create mode 100644 common/repositories/base/base_global_loot_repository.h create mode 100644 common/repositories/base/base_gm_ips_repository.h create mode 100644 common/repositories/base/base_goallists_repository.h create mode 100644 common/repositories/base/base_graveyard_repository.h create mode 100644 common/repositories/base/base_ground_spawns_repository.h create mode 100644 common/repositories/base/base_group_id_repository.h create mode 100644 common/repositories/base/base_group_leaders_repository.h create mode 100644 common/repositories/base/base_guild_members_repository.h create mode 100644 common/repositories/base/base_guild_ranks_repository.h create mode 100644 common/repositories/base/base_guild_relations_repository.h create mode 100644 common/repositories/base/base_guilds_repository.h create mode 100644 common/repositories/base/base_hackers_repository.h create mode 100644 common/repositories/base/base_horses_repository.h create mode 100644 common/repositories/base/base_instance_list_player_repository.h create mode 100644 common/repositories/base/base_instance_list_repository.h create mode 100644 common/repositories/base/base_inventory_repository.h create mode 100644 common/repositories/base/base_inventory_snapshots_repository.h create mode 100644 common/repositories/base/base_ip_exemptions_repository.h create mode 100644 common/repositories/base/base_item_tick_repository.h create mode 100644 common/repositories/base/base_items_repository.h create mode 100644 common/repositories/base/base_launcher_repository.h create mode 100644 common/repositories/base/base_launcher_zones_repository.h create mode 100644 common/repositories/base/base_ldon_trap_entries_repository.h create mode 100644 common/repositories/base/base_ldon_trap_templates_repository.h create mode 100644 common/repositories/base/base_level_exp_mods_repository.h create mode 100644 common/repositories/base/base_lfguild_repository.h create mode 100644 common/repositories/base/base_login_accounts_repository.h create mode 100644 common/repositories/base/base_login_api_tokens_repository.h create mode 100644 common/repositories/base/base_login_server_admins_repository.h create mode 100644 common/repositories/base/base_login_server_list_types_repository.h create mode 100644 common/repositories/base/base_login_world_servers_repository.h create mode 100644 common/repositories/base/base_logsys_categories_repository.h create mode 100644 common/repositories/base/base_lootdrop_entries_repository.h create mode 100644 common/repositories/base/base_lootdrop_repository.h create mode 100644 common/repositories/base/base_loottable_entries_repository.h create mode 100644 common/repositories/base/base_loottable_repository.h create mode 100644 common/repositories/base/base_mail_repository.h create mode 100644 common/repositories/base/base_merchantlist_repository.h create mode 100644 common/repositories/base/base_merchantlist_temp_repository.h create mode 100644 common/repositories/base/base_name_filter_repository.h create mode 100644 common/repositories/base/base_npc_emotes_repository.h create mode 100644 common/repositories/base/base_npc_faction_entries_repository.h create mode 100644 common/repositories/base/base_npc_faction_repository.h create mode 100644 common/repositories/base/base_npc_scale_global_base_repository.h create mode 100644 common/repositories/base/base_npc_spells_effects_entries_repository.h create mode 100644 common/repositories/base/base_npc_spells_effects_repository.h create mode 100644 common/repositories/base/base_npc_spells_entries_repository.h create mode 100644 common/repositories/base/base_npc_spells_repository.h create mode 100644 common/repositories/base/base_npc_types_repository.h create mode 100644 common/repositories/base/base_npc_types_tint_repository.h create mode 100644 common/repositories/base/base_object_contents_repository.h create mode 100644 common/repositories/base/base_object_repository.h create mode 100644 common/repositories/base/base_perl_event_export_settings_repository.h create mode 100644 common/repositories/base/base_petitions_repository.h create mode 100644 common/repositories/base/base_pets_equipmentset_entries_repository.h create mode 100644 common/repositories/base/base_pets_equipmentset_repository.h create mode 100644 common/repositories/base/base_pets_repository.h create mode 100644 common/repositories/base/base_player_titlesets_repository.h create mode 100644 common/repositories/base/base_proximities_repository.h create mode 100644 common/repositories/base/base_quest_globals_repository.h create mode 100644 common/repositories/base/base_raid_details_repository.h create mode 100644 common/repositories/base/base_raid_members_repository.h create mode 100644 common/repositories/base/base_reports_repository.h create mode 100644 common/repositories/base/base_respawn_times_repository.h create mode 100644 common/repositories/base/base_rule_sets_repository.h create mode 100644 common/repositories/base/base_rule_values_repository.h create mode 100644 common/repositories/base/base_saylink_repository.h create mode 100644 common/repositories/base/base_skill_caps_repository.h create mode 100644 common/repositories/base/base_spawn2_repository.h create mode 100644 common/repositories/base/base_spawn_condition_values_repository.h create mode 100644 common/repositories/base/base_spawn_conditions_repository.h create mode 100644 common/repositories/base/base_spawn_events_repository.h create mode 100644 common/repositories/base/base_spawnentry_repository.h create mode 100644 common/repositories/base/base_spawngroup_repository.h create mode 100644 common/repositories/base/base_spell_buckets_repository.h create mode 100644 common/repositories/base/base_spell_globals_repository.h create mode 100644 common/repositories/base/base_spells_new_repository.h create mode 100644 common/repositories/base/base_start_zones_repository.h create mode 100644 common/repositories/base/base_starting_items_repository.h create mode 100644 common/repositories/base/base_task_activities_repository.h create mode 100644 common/repositories/base/base_tasks_repository.h create mode 100644 common/repositories/base/base_tasksets_repository.h create mode 100644 common/repositories/base/base_timers_repository.h create mode 100644 common/repositories/base/base_titles_repository.h create mode 100644 common/repositories/base/base_trader_repository.h create mode 100644 common/repositories/base/base_tradeskill_recipe_entries_repository.h create mode 100644 common/repositories/base/base_traps_repository.h create mode 100644 common/repositories/base/base_tribute_levels_repository.h create mode 100644 common/repositories/base/base_tributes_repository.h create mode 100644 common/repositories/base/base_variables_repository.h create mode 100644 common/repositories/base/base_veteran_reward_templates_repository.h create mode 100644 common/repositories/base/base_zone_points_repository.h create mode 100644 common/repositories/base/base_zone_repository.h create mode 100644 common/repositories/template/base_repository.template diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 2f2c174fa..62c494e85 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -110,7 +110,173 @@ SET(common_sources util/uuid.cpp) SET(repositories + + # Criteria repositories/criteria/content_filter_criteria.h + + # Base Repositories + repositories/base/base_aa_ability_repository.h + repositories/base/base_aa_ranks_repository.h + repositories/base/base_aa_rank_effects_repository.h + repositories/base/base_aa_rank_prereqs_repository.h + repositories/base/base_account_repository.h + repositories/base/base_account_flags_repository.h + repositories/base/base_account_ip_repository.h + repositories/base/base_account_rewards_repository.h + repositories/base/base_adventure_details_repository.h + repositories/base/base_adventure_members_repository.h + repositories/base/base_adventure_stats_repository.h + repositories/base/base_adventure_template_repository.h + repositories/base/base_adventure_template_entry_repository.h + repositories/base/base_adventure_template_entry_flavor_repository.h + repositories/base/base_alternate_currency_repository.h + repositories/base/base_auras_repository.h + repositories/base/base_banned_ips_repository.h + repositories/base/base_base_data_repository.h + repositories/base/base_blocked_spells_repository.h + repositories/base/base_books_repository.h + repositories/base/base_bugs_repository.h + repositories/base/base_bug_reports_repository.h + repositories/base/base_buyer_repository.h + repositories/base/base_character_activities_repository.h + repositories/base/base_character_alternate_abilities_repository.h + repositories/base/base_character_alt_currency_repository.h + repositories/base/base_character_auras_repository.h + repositories/base/base_character_bandolier_repository.h + repositories/base/base_character_bind_repository.h + repositories/base/base_character_buffs_repository.h + repositories/base/base_character_corpses_repository.h + repositories/base/base_character_corpse_items_repository.h + repositories/base/base_character_currency_repository.h + repositories/base/base_character_data_repository.h + repositories/base/base_character_disciplines_repository.h + repositories/base/base_character_inspect_messages_repository.h + repositories/base/base_character_item_recast_repository.h + repositories/base/base_character_languages_repository.h + repositories/base/base_character_leadership_abilities_repository.h + repositories/base/base_character_material_repository.h + repositories/base/base_character_memmed_spells_repository.h + repositories/base/base_character_pet_buffs_repository.h + repositories/base/base_character_pet_info_repository.h + repositories/base/base_character_pet_inventory_repository.h + repositories/base/base_character_potionbelt_repository.h + repositories/base/base_character_skills_repository.h + repositories/base/base_character_spells_repository.h + repositories/base/base_character_tasks_repository.h + repositories/base/base_character_tribute_repository.h + repositories/base/base_char_create_combinations_repository.h + repositories/base/base_char_create_point_allocations_repository.h + repositories/base/base_char_recipe_list_repository.h + repositories/base/base_chatchannels_repository.h + repositories/base/base_command_settings_repository.h + repositories/base/base_completed_tasks_repository.h + repositories/base/base_data_buckets_repository.h + repositories/base/base_db_str_repository.h + repositories/base/base_discovered_items_repository.h + repositories/base/base_doors_repository.h + repositories/base/base_eventlog_repository.h + repositories/base/base_faction_base_data_repository.h + repositories/base/base_faction_list_repository.h + repositories/base/base_faction_list_mod_repository.h + repositories/base/base_faction_values_repository.h + repositories/base/base_fishing_repository.h + repositories/base/base_forage_repository.h + repositories/base/base_friends_repository.h + repositories/base/base_global_loot_repository.h + repositories/base/base_gm_ips_repository.h + repositories/base/base_goallists_repository.h + repositories/base/base_graveyard_repository.h + repositories/base/base_ground_spawns_repository.h + repositories/base/base_group_id_repository.h + repositories/base/base_group_leaders_repository.h + repositories/base/base_guilds_repository.h + repositories/base/base_guild_members_repository.h + repositories/base/base_guild_ranks_repository.h + repositories/base/base_guild_relations_repository.h + repositories/base/base_hackers_repository.h + repositories/base/base_horses_repository.h + repositories/base/base_instance_list_repository.h + repositories/base/base_instance_list_player_repository.h + repositories/base/base_inventory_repository.h + repositories/base/base_inventory_snapshots_repository.h + repositories/base/base_ip_exemptions_repository.h + repositories/base/base_items_repository.h + repositories/base/base_item_tick_repository.h + repositories/base/base_launcher_repository.h + repositories/base/base_launcher_zones_repository.h + repositories/base/base_ldon_trap_entries_repository.h + repositories/base/base_ldon_trap_templates_repository.h + repositories/base/base_level_exp_mods_repository.h + repositories/base/base_lfguild_repository.h + repositories/base/base_login_accounts_repository.h + repositories/base/base_login_api_tokens_repository.h + repositories/base/base_login_server_admins_repository.h + repositories/base/base_login_server_list_types_repository.h + repositories/base/base_login_world_servers_repository.h + repositories/base/base_logsys_categories_repository.h + repositories/base/base_lootdrop_repository.h + repositories/base/base_lootdrop_entries_repository.h + repositories/base/base_loottable_repository.h + repositories/base/base_loottable_entries_repository.h + repositories/base/base_mail_repository.h + repositories/base/base_merchantlist_repository.h + repositories/base/base_merchantlist_temp_repository.h + repositories/base/base_name_filter_repository.h + repositories/base/base_npc_emotes_repository.h + repositories/base/base_npc_faction_repository.h + repositories/base/base_npc_faction_entries_repository.h + repositories/base/base_npc_scale_global_base_repository.h + repositories/base/base_npc_spells_repository.h + repositories/base/base_npc_spells_effects_repository.h + repositories/base/base_npc_spells_effects_entries_repository.h + repositories/base/base_npc_spells_entries_repository.h + repositories/base/base_npc_types_repository.h + repositories/base/base_npc_types_tint_repository.h + repositories/base/base_object_repository.h + repositories/base/base_object_contents_repository.h + repositories/base/base_perl_event_export_settings_repository.h + repositories/base/base_petitions_repository.h + repositories/base/base_pets_repository.h + repositories/base/base_pets_equipmentset_repository.h + repositories/base/base_pets_equipmentset_entries_repository.h + repositories/base/base_player_titlesets_repository.h + repositories/base/base_proximities_repository.h + repositories/base/base_quest_globals_repository.h + repositories/base/base_raid_details_repository.h + repositories/base/base_raid_members_repository.h + repositories/base/base_reports_repository.h + repositories/base/base_respawn_times_repository.h + repositories/base/base_rule_sets_repository.h + repositories/base/base_rule_values_repository.h + repositories/base/base_saylink_repository.h + repositories/base/base_skill_caps_repository.h + repositories/base/base_spawn2_repository.h + repositories/base/base_spawnentry_repository.h + repositories/base/base_spawngroup_repository.h + repositories/base/base_spawn_conditions_repository.h + repositories/base/base_spawn_condition_values_repository.h + repositories/base/base_spawn_events_repository.h + repositories/base/base_spells_new_repository.h + repositories/base/base_spell_buckets_repository.h + repositories/base/base_spell_globals_repository.h + repositories/base/base_starting_items_repository.h + repositories/base/base_start_zones_repository.h + repositories/base/base_tasks_repository.h + repositories/base/base_tasksets_repository.h + repositories/base/base_task_activities_repository.h + repositories/base/base_timers_repository.h + repositories/base/base_titles_repository.h + repositories/base/base_trader_repository.h + repositories/base/base_tradeskill_recipe_entries_repository.h + repositories/base/base_traps_repository.h + repositories/base/base_tributes_repository.h + repositories/base/base_tribute_levels_repository.h + repositories/base/base_variables_repository.h + repositories/base/base_veteran_reward_templates_repository.h + repositories/base/base_zone_repository.h + repositories/base/base_zone_points_repository.h + + # Extended Repositories repositories/aa_ability_repository.h repositories/aa_ranks_repository.h repositories/aa_rank_effects_repository.h @@ -182,8 +348,6 @@ SET(repositories repositories/gm_ips_repository.h repositories/goallists_repository.h repositories/graveyard_repository.h - repositories/grid_repository.h - repositories/grid_entries_repository.h repositories/ground_spawns_repository.h repositories/group_id_repository.h repositories/group_leaders_repository.h @@ -265,7 +429,6 @@ SET(repositories repositories/timers_repository.h repositories/titles_repository.h repositories/trader_repository.h - repositories/tradeskill_recipe_repository.h repositories/tradeskill_recipe_entries_repository.h repositories/traps_repository.h repositories/tributes_repository.h @@ -274,6 +437,10 @@ SET(repositories repositories/veteran_reward_templates_repository.h repositories/zone_repository.h repositories/zone_points_repository.h + + repositories/grid_repository.h + repositories/grid_entries_repository.h + repositories/tradeskill_recipe_repository.h ) SET(common_headers diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index aaba219b9..7d732562b 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -23,383 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_aa_ability_repository.h" -class AaAbilityRepository { +class AaAbilityRepository: public BaseAaAbilityRepository { public: - struct AaAbility { - int id; - std::string name; - int category; - int classes; - int races; - int drakkin_heritage; - int deities; - int status; - int type; - int charges; - int8 grant_only; - int first_rank_id; - int8 enabled; - int8 reset_on_death; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AaAbilityRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AaAbilityRepository::GetWhereNeverExpires() + * AaAbilityRepository::GetWhereXAndY() + * AaAbilityRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "category", - "classes", - "races", - "drakkin_heritage", - "deities", - "status", - "type", - "charges", - "grant_only", - "first_rank_id", - "enabled", - "reset_on_death", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("aa_ability"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AaAbility NewEntity() - { - AaAbility entry{}; - - entry.id = 0; - entry.name = ""; - entry.category = -1; - entry.classes = 131070; - entry.races = 65535; - entry.drakkin_heritage = 127; - entry.deities = 131071; - entry.status = 0; - entry.type = 0; - entry.charges = 0; - entry.grant_only = 0; - entry.first_rank_id = -1; - entry.enabled = 1; - entry.reset_on_death = 0; - - return entry; - } - - static AaAbility GetAaAbilityEntry( - const std::vector &aa_abilitys, - int aa_ability_id - ) - { - for (auto &aa_ability : aa_abilitys) { - if (aa_ability.id == aa_ability_id) { - return aa_ability; - } - } - - return NewEntity(); - } - - static AaAbility FindOne( - int aa_ability_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - aa_ability_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AaAbility entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.category = atoi(row[2]); - entry.classes = atoi(row[3]); - entry.races = atoi(row[4]); - entry.drakkin_heritage = atoi(row[5]); - entry.deities = atoi(row[6]); - entry.status = atoi(row[7]); - entry.type = atoi(row[8]); - entry.charges = atoi(row[9]); - entry.grant_only = atoi(row[10]); - entry.first_rank_id = atoi(row[11]); - entry.enabled = atoi(row[12]); - entry.reset_on_death = atoi(row[13]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int aa_ability_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - aa_ability_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AaAbility aa_ability_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(aa_ability_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(aa_ability_entry.category)); - update_values.push_back(columns[3] + " = " + std::to_string(aa_ability_entry.classes)); - update_values.push_back(columns[4] + " = " + std::to_string(aa_ability_entry.races)); - update_values.push_back(columns[5] + " = " + std::to_string(aa_ability_entry.drakkin_heritage)); - update_values.push_back(columns[6] + " = " + std::to_string(aa_ability_entry.deities)); - update_values.push_back(columns[7] + " = " + std::to_string(aa_ability_entry.status)); - update_values.push_back(columns[8] + " = " + std::to_string(aa_ability_entry.type)); - update_values.push_back(columns[9] + " = " + std::to_string(aa_ability_entry.charges)); - update_values.push_back(columns[10] + " = " + std::to_string(aa_ability_entry.grant_only)); - update_values.push_back(columns[11] + " = " + std::to_string(aa_ability_entry.first_rank_id)); - update_values.push_back(columns[12] + " = " + std::to_string(aa_ability_entry.enabled)); - update_values.push_back(columns[13] + " = " + std::to_string(aa_ability_entry.reset_on_death)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - aa_ability_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AaAbility InsertOne( - AaAbility aa_ability_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); - insert_values.push_back(std::to_string(aa_ability_entry.category)); - insert_values.push_back(std::to_string(aa_ability_entry.classes)); - insert_values.push_back(std::to_string(aa_ability_entry.races)); - insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(aa_ability_entry.deities)); - insert_values.push_back(std::to_string(aa_ability_entry.status)); - insert_values.push_back(std::to_string(aa_ability_entry.type)); - insert_values.push_back(std::to_string(aa_ability_entry.charges)); - insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); - insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); - insert_values.push_back(std::to_string(aa_ability_entry.enabled)); - insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - aa_ability_entry.id = results.LastInsertedID(); - return aa_ability_entry; - } - - aa_ability_entry = AaAbilityRepository::NewEntity(); - - return aa_ability_entry; - } - - static int InsertMany( - std::vector aa_ability_entries - ) - { - std::vector insert_chunks; - - for (auto &aa_ability_entry: aa_ability_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); - insert_values.push_back(std::to_string(aa_ability_entry.category)); - insert_values.push_back(std::to_string(aa_ability_entry.classes)); - insert_values.push_back(std::to_string(aa_ability_entry.races)); - insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(aa_ability_entry.deities)); - insert_values.push_back(std::to_string(aa_ability_entry.status)); - insert_values.push_back(std::to_string(aa_ability_entry.type)); - insert_values.push_back(std::to_string(aa_ability_entry.charges)); - insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); - insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); - insert_values.push_back(std::to_string(aa_ability_entry.enabled)); - insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaAbility entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.category = atoi(row[2]); - entry.classes = atoi(row[3]); - entry.races = atoi(row[4]); - entry.drakkin_heritage = atoi(row[5]); - entry.deities = atoi(row[6]); - entry.status = atoi(row[7]); - entry.type = atoi(row[8]); - entry.charges = atoi(row[9]); - entry.grant_only = atoi(row[10]); - entry.first_rank_id = atoi(row[11]); - entry.enabled = atoi(row[12]); - entry.reset_on_death = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaAbility entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.category = atoi(row[2]); - entry.classes = atoi(row[3]); - entry.races = atoi(row[4]); - entry.drakkin_heritage = atoi(row[5]); - entry.deities = atoi(row[6]); - entry.status = atoi(row[7]); - entry.type = atoi(row[8]); - entry.charges = atoi(row[9]); - entry.grant_only = atoi(row[10]); - entry.first_rank_id = atoi(row[11]); - entry.enabled = atoi(row[12]); - entry.reset_on_death = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/aa_rank_effects_repository.h b/common/repositories/aa_rank_effects_repository.h index 17436af76..0f7799ab6 100644 --- a/common/repositories/aa_rank_effects_repository.h +++ b/common/repositories/aa_rank_effects_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_aa_rank_effects_repository.h" -class AaRankEffectsRepository { +class AaRankEffectsRepository: public BaseAaRankEffectsRepository { public: - struct AaRankEffects { - int rank_id; - int slot; - int effect_id; - int base1; - int base2; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AaRankEffectsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AaRankEffectsRepository::GetWhereNeverExpires() + * AaRankEffectsRepository::GetWhereXAndY() + * AaRankEffectsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "rank_id", - "slot", - "effect_id", - "base1", - "base2", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("aa_rank_effects"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AaRankEffects NewEntity() - { - AaRankEffects entry{}; - - entry.rank_id = 0; - entry.slot = 1; - entry.effect_id = 0; - entry.base1 = 0; - entry.base2 = 0; - - return entry; - } - - static AaRankEffects GetAaRankEffectsEntry( - const std::vector &aa_rank_effectss, - int aa_rank_effects_id - ) - { - for (auto &aa_rank_effects : aa_rank_effectss) { - if (aa_rank_effects.slot == aa_rank_effects_id) { - return aa_rank_effects; - } - } - - return NewEntity(); - } - - static AaRankEffects FindOne( - int aa_rank_effects_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - aa_rank_effects_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AaRankEffects entry{}; - - entry.rank_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.effect_id = atoi(row[2]); - entry.base1 = atoi(row[3]); - entry.base2 = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int aa_rank_effects_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - aa_rank_effects_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AaRankEffects aa_rank_effects_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_effects_entry.effect_id)); - update_values.push_back(columns[3] + " = " + std::to_string(aa_rank_effects_entry.base1)); - update_values.push_back(columns[4] + " = " + std::to_string(aa_rank_effects_entry.base2)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - aa_rank_effects_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AaRankEffects InsertOne( - AaRankEffects aa_rank_effects_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); - insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); - insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - aa_rank_effects_entry.id = results.LastInsertedID(); - return aa_rank_effects_entry; - } - - aa_rank_effects_entry = AaRankEffectsRepository::NewEntity(); - - return aa_rank_effects_entry; - } - - static int InsertMany( - std::vector aa_rank_effects_entries - ) - { - std::vector insert_chunks; - - for (auto &aa_rank_effects_entry: aa_rank_effects_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); - insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); - insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRankEffects entry{}; - - entry.rank_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.effect_id = atoi(row[2]); - entry.base1 = atoi(row[3]); - entry.base2 = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRankEffects entry{}; - - entry.rank_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.effect_id = atoi(row[2]); - entry.base1 = atoi(row[3]); - entry.base2 = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/aa_rank_prereqs_repository.h b/common/repositories/aa_rank_prereqs_repository.h index bf7ccb98e..fe375ce0b 100644 --- a/common/repositories/aa_rank_prereqs_repository.h +++ b/common/repositories/aa_rank_prereqs_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_aa_rank_prereqs_repository.h" -class AaRankPrereqsRepository { +class AaRankPrereqsRepository: public BaseAaRankPrereqsRepository { public: - struct AaRankPrereqs { - int rank_id; - int aa_id; - int points; - }; - static std::string PrimaryKey() - { - return std::string("aa_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AaRankPrereqsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AaRankPrereqsRepository::GetWhereNeverExpires() + * AaRankPrereqsRepository::GetWhereXAndY() + * AaRankPrereqsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "rank_id", - "aa_id", - "points", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("aa_rank_prereqs"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AaRankPrereqs NewEntity() - { - AaRankPrereqs entry{}; - - entry.rank_id = 0; - entry.aa_id = 0; - entry.points = 0; - - return entry; - } - - static AaRankPrereqs GetAaRankPrereqsEntry( - const std::vector &aa_rank_prereqss, - int aa_rank_prereqs_id - ) - { - for (auto &aa_rank_prereqs : aa_rank_prereqss) { - if (aa_rank_prereqs.aa_id == aa_rank_prereqs_id) { - return aa_rank_prereqs; - } - } - - return NewEntity(); - } - - static AaRankPrereqs FindOne( - int aa_rank_prereqs_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - aa_rank_prereqs_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AaRankPrereqs entry{}; - - entry.rank_id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.points = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int aa_rank_prereqs_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - aa_rank_prereqs_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AaRankPrereqs aa_rank_prereqs_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_prereqs_entry.points)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - aa_rank_prereqs_entry.aa_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AaRankPrereqs InsertOne( - AaRankPrereqs aa_rank_prereqs_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - aa_rank_prereqs_entry.id = results.LastInsertedID(); - return aa_rank_prereqs_entry; - } - - aa_rank_prereqs_entry = AaRankPrereqsRepository::NewEntity(); - - return aa_rank_prereqs_entry; - } - - static int InsertMany( - std::vector aa_rank_prereqs_entries - ) - { - std::vector insert_chunks; - - for (auto &aa_rank_prereqs_entry: aa_rank_prereqs_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRankPrereqs entry{}; - - entry.rank_id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.points = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRankPrereqs entry{}; - - entry.rank_id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.points = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/aa_ranks_repository.h b/common/repositories/aa_ranks_repository.h index 27ff7b1d7..25f982d48 100644 --- a/common/repositories/aa_ranks_repository.h +++ b/common/repositories/aa_ranks_repository.h @@ -23,374 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_aa_ranks_repository.h" -class AaRanksRepository { +class AaRanksRepository: public BaseAaRanksRepository { public: - struct AaRanks { - int id; - int upper_hotkey_sid; - int lower_hotkey_sid; - int title_sid; - int desc_sid; - int cost; - int level_req; - int spell; - int spell_type; - int recast_time; - int expansion; - int prev_id; - int next_id; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AaRanksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AaRanksRepository::GetWhereNeverExpires() + * AaRanksRepository::GetWhereXAndY() + * AaRanksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "upper_hotkey_sid", - "lower_hotkey_sid", - "title_sid", - "desc_sid", - "cost", - "level_req", - "spell", - "spell_type", - "recast_time", - "expansion", - "prev_id", - "next_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("aa_ranks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AaRanks NewEntity() - { - AaRanks entry{}; - - entry.id = 0; - entry.upper_hotkey_sid = -1; - entry.lower_hotkey_sid = -1; - entry.title_sid = -1; - entry.desc_sid = -1; - entry.cost = 1; - entry.level_req = 51; - entry.spell = -1; - entry.spell_type = 0; - entry.recast_time = 0; - entry.expansion = 0; - entry.prev_id = -1; - entry.next_id = -1; - - return entry; - } - - static AaRanks GetAaRanksEntry( - const std::vector &aa_rankss, - int aa_ranks_id - ) - { - for (auto &aa_ranks : aa_rankss) { - if (aa_ranks.id == aa_ranks_id) { - return aa_ranks; - } - } - - return NewEntity(); - } - - static AaRanks FindOne( - int aa_ranks_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - aa_ranks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AaRanks entry{}; - - entry.id = atoi(row[0]); - entry.upper_hotkey_sid = atoi(row[1]); - entry.lower_hotkey_sid = atoi(row[2]); - entry.title_sid = atoi(row[3]); - entry.desc_sid = atoi(row[4]); - entry.cost = atoi(row[5]); - entry.level_req = atoi(row[6]); - entry.spell = atoi(row[7]); - entry.spell_type = atoi(row[8]); - entry.recast_time = atoi(row[9]); - entry.expansion = atoi(row[10]); - entry.prev_id = atoi(row[11]); - entry.next_id = atoi(row[12]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int aa_ranks_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - aa_ranks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AaRanks aa_ranks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(aa_ranks_entry.upper_hotkey_sid)); - update_values.push_back(columns[2] + " = " + std::to_string(aa_ranks_entry.lower_hotkey_sid)); - update_values.push_back(columns[3] + " = " + std::to_string(aa_ranks_entry.title_sid)); - update_values.push_back(columns[4] + " = " + std::to_string(aa_ranks_entry.desc_sid)); - update_values.push_back(columns[5] + " = " + std::to_string(aa_ranks_entry.cost)); - update_values.push_back(columns[6] + " = " + std::to_string(aa_ranks_entry.level_req)); - update_values.push_back(columns[7] + " = " + std::to_string(aa_ranks_entry.spell)); - update_values.push_back(columns[8] + " = " + std::to_string(aa_ranks_entry.spell_type)); - update_values.push_back(columns[9] + " = " + std::to_string(aa_ranks_entry.recast_time)); - update_values.push_back(columns[10] + " = " + std::to_string(aa_ranks_entry.expansion)); - update_values.push_back(columns[11] + " = " + std::to_string(aa_ranks_entry.prev_id)); - update_values.push_back(columns[12] + " = " + std::to_string(aa_ranks_entry.next_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - aa_ranks_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AaRanks InsertOne( - AaRanks aa_ranks_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.cost)); - insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); - insert_values.push_back(std::to_string(aa_ranks_entry.spell)); - insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); - insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); - insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); - insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); - insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - aa_ranks_entry.id = results.LastInsertedID(); - return aa_ranks_entry; - } - - aa_ranks_entry = AaRanksRepository::NewEntity(); - - return aa_ranks_entry; - } - - static int InsertMany( - std::vector aa_ranks_entries - ) - { - std::vector insert_chunks; - - for (auto &aa_ranks_entry: aa_ranks_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); - insert_values.push_back(std::to_string(aa_ranks_entry.cost)); - insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); - insert_values.push_back(std::to_string(aa_ranks_entry.spell)); - insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); - insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); - insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); - insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); - insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRanks entry{}; - - entry.id = atoi(row[0]); - entry.upper_hotkey_sid = atoi(row[1]); - entry.lower_hotkey_sid = atoi(row[2]); - entry.title_sid = atoi(row[3]); - entry.desc_sid = atoi(row[4]); - entry.cost = atoi(row[5]); - entry.level_req = atoi(row[6]); - entry.spell = atoi(row[7]); - entry.spell_type = atoi(row[8]); - entry.recast_time = atoi(row[9]); - entry.expansion = atoi(row[10]); - entry.prev_id = atoi(row[11]); - entry.next_id = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AaRanks entry{}; - - entry.id = atoi(row[0]); - entry.upper_hotkey_sid = atoi(row[1]); - entry.lower_hotkey_sid = atoi(row[2]); - entry.title_sid = atoi(row[3]); - entry.desc_sid = atoi(row[4]); - entry.cost = atoi(row[5]); - entry.level_req = atoi(row[6]); - entry.spell = atoi(row[7]); - entry.spell_type = atoi(row[8]); - entry.recast_time = atoi(row[9]); - entry.expansion = atoi(row[10]); - entry.prev_id = atoi(row[11]); - entry.next_id = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index e9f0382c7..0a57f5cc7 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_account_flags_repository.h" -class AccountFlagsRepository { +class AccountFlagsRepository: public BaseAccountFlagsRepository { public: - struct AccountFlags { - int p_accid; - std::string p_flag; - std::string p_value; - }; - static std::string PrimaryKey() - { - return std::string("p_flag"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AccountFlagsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AccountFlagsRepository::GetWhereNeverExpires() + * AccountFlagsRepository::GetWhereXAndY() + * AccountFlagsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "p_accid", - "p_flag", - "p_value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("account_flags"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AccountFlags NewEntity() - { - AccountFlags entry{}; - - entry.p_accid = 0; - entry.p_flag = ""; - entry.p_value = ""; - - return entry; - } - - static AccountFlags GetAccountFlagsEntry( - const std::vector &account_flagss, - int account_flags_id - ) - { - for (auto &account_flags : account_flagss) { - if (account_flags.p_flag == account_flags_id) { - return account_flags; - } - } - - return NewEntity(); - } - - static AccountFlags FindOne( - int account_flags_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - account_flags_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AccountFlags entry{}; - - entry.p_accid = atoi(row[0]); - entry.p_flag = row[1] ? row[1] : ""; - entry.p_value = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int account_flags_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - account_flags_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AccountFlags account_flags_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(account_flags_entry.p_value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - account_flags_entry.p_flag - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AccountFlags InsertOne( - AccountFlags account_flags_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - account_flags_entry.id = results.LastInsertedID(); - return account_flags_entry; - } - - account_flags_entry = AccountFlagsRepository::NewEntity(); - - return account_flags_entry; - } - - static int InsertMany( - std::vector account_flags_entries - ) - { - std::vector insert_chunks; - - for (auto &account_flags_entry: account_flags_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountFlags entry{}; - - entry.p_accid = atoi(row[0]); - entry.p_flag = row[1] ? row[1] : ""; - entry.p_value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountFlags entry{}; - - entry.p_accid = atoi(row[0]); - entry.p_flag = row[1] ? row[1] : ""; - entry.p_value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h index d1f7726fb..4f99311b9 100644 --- a/common/repositories/account_ip_repository.h +++ b/common/repositories/account_ip_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_account_ip_repository.h" -class AccountIpRepository { +class AccountIpRepository: public BaseAccountIpRepository { public: - struct AccountIp { - int accid; - std::string ip; - int count; - std::string lastused; - }; - static std::string PrimaryKey() - { - return std::string("ip"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AccountIpRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AccountIpRepository::GetWhereNeverExpires() + * AccountIpRepository::GetWhereXAndY() + * AccountIpRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "accid", - "ip", - "count", - "lastused", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("account_ip"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AccountIp NewEntity() - { - AccountIp entry{}; - - entry.accid = 0; - entry.ip = ""; - entry.count = 1; - entry.lastused = current_timestamp(); - - return entry; - } - - static AccountIp GetAccountIpEntry( - const std::vector &account_ips, - int account_ip_id - ) - { - for (auto &account_ip : account_ips) { - if (account_ip.ip == account_ip_id) { - return account_ip; - } - } - - return NewEntity(); - } - - static AccountIp FindOne( - int account_ip_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - account_ip_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AccountIp entry{}; - - entry.accid = atoi(row[0]); - entry.ip = row[1] ? row[1] : ""; - entry.count = atoi(row[2]); - entry.lastused = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int account_ip_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - account_ip_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AccountIp account_ip_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(account_ip_entry.count)); - update_values.push_back(columns[3] + " = '" + EscapeString(account_ip_entry.lastused) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - account_ip_entry.ip - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AccountIp InsertOne( - AccountIp account_ip_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(account_ip_entry.count)); - insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - account_ip_entry.id = results.LastInsertedID(); - return account_ip_entry; - } - - account_ip_entry = AccountIpRepository::NewEntity(); - - return account_ip_entry; - } - - static int InsertMany( - std::vector account_ip_entries - ) - { - std::vector insert_chunks; - - for (auto &account_ip_entry: account_ip_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(account_ip_entry.count)); - insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountIp entry{}; - - entry.accid = atoi(row[0]); - entry.ip = row[1] ? row[1] : ""; - entry.count = atoi(row[2]); - entry.lastused = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountIp entry{}; - - entry.accid = atoi(row[0]); - entry.ip = row[1] ? row[1] : ""; - entry.count = atoi(row[2]); - entry.lastused = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index 3667ac864..631462552 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -23,428 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_account_repository.h" -class AccountRepository { +class AccountRepository: public BaseAccountRepository { public: - struct Account { - int id; - std::string name; - std::string charname; - int sharedplat; - std::string password; - int status; - std::string ls_id; - int lsaccount_id; - int8 gmspeed; - int8 revoked; - int karma; - std::string minilogin_ip; - int8 hideme; - int8 rulesflag; - std::string suspendeduntil; - int time_creation; - int8 expansion; - std::string ban_reason; - std::string suspend_reason; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AccountRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AccountRepository::GetWhereNeverExpires() + * AccountRepository::GetWhereXAndY() + * AccountRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "charname", - "sharedplat", - "password", - "status", - "ls_id", - "lsaccount_id", - "gmspeed", - "revoked", - "karma", - "minilogin_ip", - "hideme", - "rulesflag", - "suspendeduntil", - "time_creation", - "expansion", - "ban_reason", - "suspend_reason", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("account"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Account NewEntity() - { - Account entry{}; - - entry.id = 0; - entry.name = ""; - entry.charname = ""; - entry.sharedplat = 0; - entry.password = ""; - entry.status = 0; - entry.ls_id = "eqemu"; - entry.lsaccount_id = 0; - entry.gmspeed = 0; - entry.revoked = 0; - entry.karma = 0; - entry.minilogin_ip = ""; - entry.hideme = 0; - entry.rulesflag = 0; - entry.suspendeduntil = "0000-00-00 00:00:00"; - entry.time_creation = 0; - entry.expansion = 0; - entry.ban_reason = ""; - entry.suspend_reason = ""; - - return entry; - } - - static Account GetAccountEntry( - const std::vector &accounts, - int account_id - ) - { - for (auto &account : accounts) { - if (account.id == account_id) { - return account; - } - } - - return NewEntity(); - } - - static Account FindOne( - int account_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - account_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Account entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.charname = row[2] ? row[2] : ""; - entry.sharedplat = atoi(row[3]); - entry.password = row[4] ? row[4] : ""; - entry.status = atoi(row[5]); - entry.ls_id = row[6] ? row[6] : ""; - entry.lsaccount_id = atoi(row[7]); - entry.gmspeed = atoi(row[8]); - entry.revoked = atoi(row[9]); - entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11] ? row[11] : ""; - entry.hideme = atoi(row[12]); - entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14] ? row[14] : ""; - entry.time_creation = atoi(row[15]); - entry.expansion = atoi(row[16]); - entry.ban_reason = row[17] ? row[17] : ""; - entry.suspend_reason = row[18] ? row[18] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int account_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - account_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Account account_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(account_entry.name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(account_entry.charname) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(account_entry.sharedplat)); - update_values.push_back(columns[4] + " = '" + EscapeString(account_entry.password) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(account_entry.status)); - update_values.push_back(columns[6] + " = '" + EscapeString(account_entry.ls_id) + "'"); - update_values.push_back(columns[7] + " = " + std::to_string(account_entry.lsaccount_id)); - update_values.push_back(columns[8] + " = " + std::to_string(account_entry.gmspeed)); - update_values.push_back(columns[9] + " = " + std::to_string(account_entry.revoked)); - update_values.push_back(columns[10] + " = " + std::to_string(account_entry.karma)); - update_values.push_back(columns[11] + " = '" + EscapeString(account_entry.minilogin_ip) + "'"); - update_values.push_back(columns[12] + " = " + std::to_string(account_entry.hideme)); - update_values.push_back(columns[13] + " = " + std::to_string(account_entry.rulesflag)); - update_values.push_back(columns[14] + " = '" + EscapeString(account_entry.suspendeduntil) + "'"); - update_values.push_back(columns[15] + " = " + std::to_string(account_entry.time_creation)); - update_values.push_back(columns[16] + " = " + std::to_string(account_entry.expansion)); - update_values.push_back(columns[17] + " = '" + EscapeString(account_entry.ban_reason) + "'"); - update_values.push_back(columns[18] + " = '" + EscapeString(account_entry.suspend_reason) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - account_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Account InsertOne( - Account account_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); - insert_values.push_back(std::to_string(account_entry.sharedplat)); - insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); - insert_values.push_back(std::to_string(account_entry.status)); - insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); - insert_values.push_back(std::to_string(account_entry.lsaccount_id)); - insert_values.push_back(std::to_string(account_entry.gmspeed)); - insert_values.push_back(std::to_string(account_entry.revoked)); - insert_values.push_back(std::to_string(account_entry.karma)); - insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); - insert_values.push_back(std::to_string(account_entry.hideme)); - insert_values.push_back(std::to_string(account_entry.rulesflag)); - insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); - insert_values.push_back(std::to_string(account_entry.time_creation)); - insert_values.push_back(std::to_string(account_entry.expansion)); - insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); - insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - account_entry.id = results.LastInsertedID(); - return account_entry; - } - - account_entry = AccountRepository::NewEntity(); - - return account_entry; - } - - static int InsertMany( - std::vector account_entries - ) - { - std::vector insert_chunks; - - for (auto &account_entry: account_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); - insert_values.push_back(std::to_string(account_entry.sharedplat)); - insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); - insert_values.push_back(std::to_string(account_entry.status)); - insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); - insert_values.push_back(std::to_string(account_entry.lsaccount_id)); - insert_values.push_back(std::to_string(account_entry.gmspeed)); - insert_values.push_back(std::to_string(account_entry.revoked)); - insert_values.push_back(std::to_string(account_entry.karma)); - insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); - insert_values.push_back(std::to_string(account_entry.hideme)); - insert_values.push_back(std::to_string(account_entry.rulesflag)); - insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); - insert_values.push_back(std::to_string(account_entry.time_creation)); - insert_values.push_back(std::to_string(account_entry.expansion)); - insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); - insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Account entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.charname = row[2] ? row[2] : ""; - entry.sharedplat = atoi(row[3]); - entry.password = row[4] ? row[4] : ""; - entry.status = atoi(row[5]); - entry.ls_id = row[6] ? row[6] : ""; - entry.lsaccount_id = atoi(row[7]); - entry.gmspeed = atoi(row[8]); - entry.revoked = atoi(row[9]); - entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11] ? row[11] : ""; - entry.hideme = atoi(row[12]); - entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14] ? row[14] : ""; - entry.time_creation = atoi(row[15]); - entry.expansion = atoi(row[16]); - entry.ban_reason = row[17] ? row[17] : ""; - entry.suspend_reason = row[18] ? row[18] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Account entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.charname = row[2] ? row[2] : ""; - entry.sharedplat = atoi(row[3]); - entry.password = row[4] ? row[4] : ""; - entry.status = atoi(row[5]); - entry.ls_id = row[6] ? row[6] : ""; - entry.lsaccount_id = atoi(row[7]); - entry.gmspeed = atoi(row[8]); - entry.revoked = atoi(row[9]); - entry.karma = atoi(row[10]); - entry.minilogin_ip = row[11] ? row[11] : ""; - entry.hideme = atoi(row[12]); - entry.rulesflag = atoi(row[13]); - entry.suspendeduntil = row[14] ? row[14] : ""; - entry.time_creation = atoi(row[15]); - entry.expansion = atoi(row[16]); - entry.ban_reason = row[17] ? row[17] : ""; - entry.suspend_reason = row[18] ? row[18] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/account_rewards_repository.h b/common/repositories/account_rewards_repository.h index 8e2abd112..dd3aa2dca 100644 --- a/common/repositories/account_rewards_repository.h +++ b/common/repositories/account_rewards_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_account_rewards_repository.h" -class AccountRewardsRepository { +class AccountRewardsRepository: public BaseAccountRewardsRepository { public: - struct AccountRewards { - int account_id; - int reward_id; - int amount; - }; - static std::string PrimaryKey() - { - return std::string("reward_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AccountRewardsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AccountRewardsRepository::GetWhereNeverExpires() + * AccountRewardsRepository::GetWhereXAndY() + * AccountRewardsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "account_id", - "reward_id", - "amount", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("account_rewards"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AccountRewards NewEntity() - { - AccountRewards entry{}; - - entry.account_id = 0; - entry.reward_id = 0; - entry.amount = 0; - - return entry; - } - - static AccountRewards GetAccountRewardsEntry( - const std::vector &account_rewardss, - int account_rewards_id - ) - { - for (auto &account_rewards : account_rewardss) { - if (account_rewards.reward_id == account_rewards_id) { - return account_rewards; - } - } - - return NewEntity(); - } - - static AccountRewards FindOne( - int account_rewards_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - account_rewards_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AccountRewards entry{}; - - entry.account_id = atoi(row[0]); - entry.reward_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int account_rewards_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - account_rewards_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AccountRewards account_rewards_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(account_rewards_entry.amount)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - account_rewards_entry.reward_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AccountRewards InsertOne( - AccountRewards account_rewards_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(account_rewards_entry.amount)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - account_rewards_entry.id = results.LastInsertedID(); - return account_rewards_entry; - } - - account_rewards_entry = AccountRewardsRepository::NewEntity(); - - return account_rewards_entry; - } - - static int InsertMany( - std::vector account_rewards_entries - ) - { - std::vector insert_chunks; - - for (auto &account_rewards_entry: account_rewards_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(account_rewards_entry.amount)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountRewards entry{}; - - entry.account_id = atoi(row[0]); - entry.reward_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AccountRewards entry{}; - - entry.account_id = atoi(row[0]); - entry.reward_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_details_repository.h b/common/repositories/adventure_details_repository.h index fbb2a4df2..5086b4ecb 100644 --- a/common/repositories/adventure_details_repository.h +++ b/common/repositories/adventure_details_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_details_repository.h" -class AdventureDetailsRepository { +class AdventureDetailsRepository: public BaseAdventureDetailsRepository { public: - struct AdventureDetails { - int id; - int16 adventure_id; - int instance_id; - int16 count; - int16 assassinate_count; - int8 status; - int time_created; - int time_zoned; - int time_completed; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureDetailsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureDetailsRepository::GetWhereNeverExpires() + * AdventureDetailsRepository::GetWhereXAndY() + * AdventureDetailsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "adventure_id", - "instance_id", - "count", - "assassinate_count", - "status", - "time_created", - "time_zoned", - "time_completed", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_details"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureDetails NewEntity() - { - AdventureDetails entry{}; - - entry.id = 0; - entry.adventure_id = 0; - entry.instance_id = -1; - entry.count = 0; - entry.assassinate_count = 0; - entry.status = 0; - entry.time_created = 0; - entry.time_zoned = 0; - entry.time_completed = 0; - - return entry; - } - - static AdventureDetails GetAdventureDetailsEntry( - const std::vector &adventure_detailss, - int adventure_details_id - ) - { - for (auto &adventure_details : adventure_detailss) { - if (adventure_details.id == adventure_details_id) { - return adventure_details; - } - } - - return NewEntity(); - } - - static AdventureDetails FindOne( - int adventure_details_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_details_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureDetails entry{}; - - entry.id = atoi(row[0]); - entry.adventure_id = atoi(row[1]); - entry.instance_id = atoi(row[2]); - entry.count = atoi(row[3]); - entry.assassinate_count = atoi(row[4]); - entry.status = atoi(row[5]); - entry.time_created = atoi(row[6]); - entry.time_zoned = atoi(row[7]); - entry.time_completed = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_details_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_details_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureDetails adventure_details_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(adventure_details_entry.adventure_id)); - update_values.push_back(columns[2] + " = " + std::to_string(adventure_details_entry.instance_id)); - update_values.push_back(columns[3] + " = " + std::to_string(adventure_details_entry.count)); - update_values.push_back(columns[4] + " = " + std::to_string(adventure_details_entry.assassinate_count)); - update_values.push_back(columns[5] + " = " + std::to_string(adventure_details_entry.status)); - update_values.push_back(columns[6] + " = " + std::to_string(adventure_details_entry.time_created)); - update_values.push_back(columns[7] + " = " + std::to_string(adventure_details_entry.time_zoned)); - update_values.push_back(columns[8] + " = " + std::to_string(adventure_details_entry.time_completed)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_details_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureDetails InsertOne( - AdventureDetails adventure_details_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); - insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); - insert_values.push_back(std::to_string(adventure_details_entry.count)); - insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); - insert_values.push_back(std::to_string(adventure_details_entry.status)); - insert_values.push_back(std::to_string(adventure_details_entry.time_created)); - insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); - insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_details_entry.id = results.LastInsertedID(); - return adventure_details_entry; - } - - adventure_details_entry = AdventureDetailsRepository::NewEntity(); - - return adventure_details_entry; - } - - static int InsertMany( - std::vector adventure_details_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_details_entry: adventure_details_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); - insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); - insert_values.push_back(std::to_string(adventure_details_entry.count)); - insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); - insert_values.push_back(std::to_string(adventure_details_entry.status)); - insert_values.push_back(std::to_string(adventure_details_entry.time_created)); - insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); - insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureDetails entry{}; - - entry.id = atoi(row[0]); - entry.adventure_id = atoi(row[1]); - entry.instance_id = atoi(row[2]); - entry.count = atoi(row[3]); - entry.assassinate_count = atoi(row[4]); - entry.status = atoi(row[5]); - entry.time_created = atoi(row[6]); - entry.time_zoned = atoi(row[7]); - entry.time_completed = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureDetails entry{}; - - entry.id = atoi(row[0]); - entry.adventure_id = atoi(row[1]); - entry.instance_id = atoi(row[2]); - entry.count = atoi(row[3]); - entry.assassinate_count = atoi(row[4]); - entry.status = atoi(row[5]); - entry.time_created = atoi(row[6]); - entry.time_zoned = atoi(row[7]); - entry.time_completed = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_members_repository.h b/common/repositories/adventure_members_repository.h index 4bc18a18d..d7ca05596 100644 --- a/common/repositories/adventure_members_repository.h +++ b/common/repositories/adventure_members_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_members_repository.h" -class AdventureMembersRepository { +class AdventureMembersRepository: public BaseAdventureMembersRepository { public: - struct AdventureMembers { - int id; - int charid; - }; - static std::string PrimaryKey() - { - return std::string("charid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureMembersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureMembersRepository::GetWhereNeverExpires() + * AdventureMembersRepository::GetWhereXAndY() + * AdventureMembersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "charid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_members"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureMembers NewEntity() - { - AdventureMembers entry{}; - - entry.id = 0; - entry.charid = 0; - - return entry; - } - - static AdventureMembers GetAdventureMembersEntry( - const std::vector &adventure_memberss, - int adventure_members_id - ) - { - for (auto &adventure_members : adventure_memberss) { - if (adventure_members.charid == adventure_members_id) { - return adventure_members; - } - } - - return NewEntity(); - } - - static AdventureMembers FindOne( - int adventure_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_members_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureMembers entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_members_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureMembers adventure_members_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(adventure_members_entry.id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_members_entry.charid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureMembers InsertOne( - AdventureMembers adventure_members_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_members_entry.id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_members_entry.id = results.LastInsertedID(); - return adventure_members_entry; - } - - adventure_members_entry = AdventureMembersRepository::NewEntity(); - - return adventure_members_entry; - } - - static int InsertMany( - std::vector adventure_members_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_members_entry: adventure_members_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_members_entry.id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureMembers entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureMembers entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_stats_repository.h b/common/repositories/adventure_stats_repository.h index 12a35c714..4d82bb262 100644 --- a/common/repositories/adventure_stats_repository.h +++ b/common/repositories/adventure_stats_repository.h @@ -23,356 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_stats_repository.h" -class AdventureStatsRepository { +class AdventureStatsRepository: public BaseAdventureStatsRepository { public: - struct AdventureStats { - int player_id; - int guk_wins; - int mir_wins; - int mmc_wins; - int ruj_wins; - int tak_wins; - int guk_losses; - int mir_losses; - int mmc_losses; - int ruj_losses; - int tak_losses; - }; - static std::string PrimaryKey() - { - return std::string("player_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureStatsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureStatsRepository::GetWhereNeverExpires() + * AdventureStatsRepository::GetWhereXAndY() + * AdventureStatsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "player_id", - "guk_wins", - "mir_wins", - "mmc_wins", - "ruj_wins", - "tak_wins", - "guk_losses", - "mir_losses", - "mmc_losses", - "ruj_losses", - "tak_losses", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_stats"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureStats NewEntity() - { - AdventureStats entry{}; - - entry.player_id = 0; - entry.guk_wins = 0; - entry.mir_wins = 0; - entry.mmc_wins = 0; - entry.ruj_wins = 0; - entry.tak_wins = 0; - entry.guk_losses = 0; - entry.mir_losses = 0; - entry.mmc_losses = 0; - entry.ruj_losses = 0; - entry.tak_losses = 0; - - return entry; - } - - static AdventureStats GetAdventureStatsEntry( - const std::vector &adventure_statss, - int adventure_stats_id - ) - { - for (auto &adventure_stats : adventure_statss) { - if (adventure_stats.player_id == adventure_stats_id) { - return adventure_stats; - } - } - - return NewEntity(); - } - - static AdventureStats FindOne( - int adventure_stats_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_stats_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureStats entry{}; - - entry.player_id = atoi(row[0]); - entry.guk_wins = atoi(row[1]); - entry.mir_wins = atoi(row[2]); - entry.mmc_wins = atoi(row[3]); - entry.ruj_wins = atoi(row[4]); - entry.tak_wins = atoi(row[5]); - entry.guk_losses = atoi(row[6]); - entry.mir_losses = atoi(row[7]); - entry.mmc_losses = atoi(row[8]); - entry.ruj_losses = atoi(row[9]); - entry.tak_losses = atoi(row[10]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_stats_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_stats_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureStats adventure_stats_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(adventure_stats_entry.guk_wins)); - update_values.push_back(columns[2] + " = " + std::to_string(adventure_stats_entry.mir_wins)); - update_values.push_back(columns[3] + " = " + std::to_string(adventure_stats_entry.mmc_wins)); - update_values.push_back(columns[4] + " = " + std::to_string(adventure_stats_entry.ruj_wins)); - update_values.push_back(columns[5] + " = " + std::to_string(adventure_stats_entry.tak_wins)); - update_values.push_back(columns[6] + " = " + std::to_string(adventure_stats_entry.guk_losses)); - update_values.push_back(columns[7] + " = " + std::to_string(adventure_stats_entry.mir_losses)); - update_values.push_back(columns[8] + " = " + std::to_string(adventure_stats_entry.mmc_losses)); - update_values.push_back(columns[9] + " = " + std::to_string(adventure_stats_entry.ruj_losses)); - update_values.push_back(columns[10] + " = " + std::to_string(adventure_stats_entry.tak_losses)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_stats_entry.player_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureStats InsertOne( - AdventureStats adventure_stats_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_stats_entry.id = results.LastInsertedID(); - return adventure_stats_entry; - } - - adventure_stats_entry = AdventureStatsRepository::NewEntity(); - - return adventure_stats_entry; - } - - static int InsertMany( - std::vector adventure_stats_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_stats_entry: adventure_stats_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); - insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); - insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureStats entry{}; - - entry.player_id = atoi(row[0]); - entry.guk_wins = atoi(row[1]); - entry.mir_wins = atoi(row[2]); - entry.mmc_wins = atoi(row[3]); - entry.ruj_wins = atoi(row[4]); - entry.tak_wins = atoi(row[5]); - entry.guk_losses = atoi(row[6]); - entry.mir_losses = atoi(row[7]); - entry.mmc_losses = atoi(row[8]); - entry.ruj_losses = atoi(row[9]); - entry.tak_losses = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureStats entry{}; - - entry.player_id = atoi(row[0]); - entry.guk_wins = atoi(row[1]); - entry.mir_wins = atoi(row[2]); - entry.mmc_wins = atoi(row[3]); - entry.ruj_wins = atoi(row[4]); - entry.tak_wins = atoi(row[5]); - entry.guk_losses = atoi(row[6]); - entry.mir_losses = atoi(row[7]); - entry.mmc_losses = atoi(row[8]); - entry.ruj_losses = atoi(row[9]); - entry.tak_losses = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index 6eb0c8572..b52345139 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_template_entry_flavor_repository.h" -class AdventureTemplateEntryFlavorRepository { +class AdventureTemplateEntryFlavorRepository: public BaseAdventureTemplateEntryFlavorRepository { public: - struct AdventureTemplateEntryFlavor { - int id; - std::string text; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureTemplateEntryFlavorRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureTemplateEntryFlavorRepository::GetWhereNeverExpires() + * AdventureTemplateEntryFlavorRepository::GetWhereXAndY() + * AdventureTemplateEntryFlavorRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "text", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_template_entry_flavor"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureTemplateEntryFlavor NewEntity() - { - AdventureTemplateEntryFlavor entry{}; - - entry.id = 0; - entry.text = ""; - - return entry; - } - - static AdventureTemplateEntryFlavor GetAdventureTemplateEntryFlavorEntry( - const std::vector &adventure_template_entry_flavors, - int adventure_template_entry_flavor_id - ) - { - for (auto &adventure_template_entry_flavor : adventure_template_entry_flavors) { - if (adventure_template_entry_flavor.id == adventure_template_entry_flavor_id) { - return adventure_template_entry_flavor; - } - } - - return NewEntity(); - } - - static AdventureTemplateEntryFlavor FindOne( - int adventure_template_entry_flavor_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_template_entry_flavor_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureTemplateEntryFlavor entry{}; - - entry.id = atoi(row[0]); - entry.text = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_template_entry_flavor_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_template_entry_flavor_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_template_entry_flavor_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureTemplateEntryFlavor InsertOne( - AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_template_entry_flavor_entry.id = results.LastInsertedID(); - return adventure_template_entry_flavor_entry; - } - - adventure_template_entry_flavor_entry = AdventureTemplateEntryFlavorRepository::NewEntity(); - - return adventure_template_entry_flavor_entry; - } - - static int InsertMany( - std::vector adventure_template_entry_flavor_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_template_entry_flavor_entry: adventure_template_entry_flavor_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplateEntryFlavor entry{}; - - entry.id = atoi(row[0]); - entry.text = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplateEntryFlavor entry{}; - - entry.id = atoi(row[0]); - entry.text = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_template_entry_repository.h b/common/repositories/adventure_template_entry_repository.h index 7080b87a6..c4bd36215 100644 --- a/common/repositories/adventure_template_entry_repository.h +++ b/common/repositories/adventure_template_entry_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_template_entry_repository.h" -class AdventureTemplateEntryRepository { +class AdventureTemplateEntryRepository: public BaseAdventureTemplateEntryRepository { public: - struct AdventureTemplateEntry { - int id; - int template_id; - }; - static std::string PrimaryKey() - { - return std::string("template_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureTemplateEntryRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureTemplateEntryRepository::GetWhereNeverExpires() + * AdventureTemplateEntryRepository::GetWhereXAndY() + * AdventureTemplateEntryRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "template_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_template_entry"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureTemplateEntry NewEntity() - { - AdventureTemplateEntry entry{}; - - entry.id = 0; - entry.template_id = 0; - - return entry; - } - - static AdventureTemplateEntry GetAdventureTemplateEntryEntry( - const std::vector &adventure_template_entrys, - int adventure_template_entry_id - ) - { - for (auto &adventure_template_entry : adventure_template_entrys) { - if (adventure_template_entry.template_id == adventure_template_entry_id) { - return adventure_template_entry; - } - } - - return NewEntity(); - } - - static AdventureTemplateEntry FindOne( - int adventure_template_entry_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_template_entry_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureTemplateEntry entry{}; - - entry.id = atoi(row[0]); - entry.template_id = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_template_entry_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_template_entry_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureTemplateEntry adventure_template_entry_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_template_entry_entry.template_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureTemplateEntry InsertOne( - AdventureTemplateEntry adventure_template_entry_entry - ) - { - std::vector insert_values; - - - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_template_entry_entry.id = results.LastInsertedID(); - return adventure_template_entry_entry; - } - - adventure_template_entry_entry = AdventureTemplateEntryRepository::NewEntity(); - - return adventure_template_entry_entry; - } - - static int InsertMany( - std::vector adventure_template_entry_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_template_entry_entry: adventure_template_entry_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplateEntry entry{}; - - entry.id = atoi(row[0]); - entry.template_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplateEntry entry{}; - - entry.id = atoi(row[0]); - entry.template_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index 8590ebfad..ee0e91b51 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -23,554 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_adventure_template_repository.h" -class AdventureTemplateRepository { +class AdventureTemplateRepository: public BaseAdventureTemplateRepository { public: - struct AdventureTemplate { - int id; - std::string zone; - int8 zone_version; - int8 is_hard; - int8 is_raid; - int8 min_level; - int8 max_level; - int8 type; - int type_data; - int16 type_count; - float assa_x; - float assa_y; - float assa_z; - float assa_h; - std::string text; - int duration; - int zone_in_time; - int16 win_points; - int16 lose_points; - int8 theme; - int16 zone_in_zone_id; - float zone_in_x; - float zone_in_y; - int16 zone_in_object_id; - float dest_x; - float dest_y; - float dest_z; - float dest_h; - int graveyard_zone_id; - float graveyard_x; - float graveyard_y; - float graveyard_z; - float graveyard_radius; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AdventureTemplateRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AdventureTemplateRepository::GetWhereNeverExpires() + * AdventureTemplateRepository::GetWhereXAndY() + * AdventureTemplateRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "zone_version", - "is_hard", - "is_raid", - "min_level", - "max_level", - "type", - "type_data", - "type_count", - "assa_x", - "assa_y", - "assa_z", - "assa_h", - "text", - "duration", - "zone_in_time", - "win_points", - "lose_points", - "theme", - "zone_in_zone_id", - "zone_in_x", - "zone_in_y", - "zone_in_object_id", - "dest_x", - "dest_y", - "dest_z", - "dest_h", - "graveyard_zone_id", - "graveyard_x", - "graveyard_y", - "graveyard_z", - "graveyard_radius", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("adventure_template"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AdventureTemplate NewEntity() - { - AdventureTemplate entry{}; - - entry.id = 0; - entry.zone = ""; - entry.zone_version = 0; - entry.is_hard = 0; - entry.is_raid = 0; - entry.min_level = 1; - entry.max_level = 65; - entry.type = 0; - entry.type_data = 0; - entry.type_count = 0; - entry.assa_x = 0; - entry.assa_y = 0; - entry.assa_z = 0; - entry.assa_h = 0; - entry.text = ""; - entry.duration = 7200; - entry.zone_in_time = 1800; - entry.win_points = 0; - entry.lose_points = 0; - entry.theme = 1; - entry.zone_in_zone_id = 0; - entry.zone_in_x = 0; - entry.zone_in_y = 0; - entry.zone_in_object_id = 0; - entry.dest_x = 0; - entry.dest_y = 0; - entry.dest_z = 0; - entry.dest_h = 0; - entry.graveyard_zone_id = 0; - entry.graveyard_x = 0; - entry.graveyard_y = 0; - entry.graveyard_z = 0; - entry.graveyard_radius = 0; - - return entry; - } - - static AdventureTemplate GetAdventureTemplateEntry( - const std::vector &adventure_templates, - int adventure_template_id - ) - { - for (auto &adventure_template : adventure_templates) { - if (adventure_template.id == adventure_template_id) { - return adventure_template; - } - } - - return NewEntity(); - } - - static AdventureTemplate FindOne( - int adventure_template_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - adventure_template_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AdventureTemplate entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.zone_version = atoi(row[2]); - entry.is_hard = atoi(row[3]); - entry.is_raid = atoi(row[4]); - entry.min_level = atoi(row[5]); - entry.max_level = atoi(row[6]); - entry.type = atoi(row[7]); - entry.type_data = atoi(row[8]); - entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); - entry.text = row[14] ? row[14] : ""; - entry.duration = atoi(row[15]); - entry.zone_in_time = atoi(row[16]); - entry.win_points = atoi(row[17]); - entry.lose_points = atoi(row[18]); - entry.theme = atoi(row[19]); - entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); - entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); - entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int adventure_template_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - adventure_template_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AdventureTemplate adventure_template_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry.zone) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(adventure_template_entry.zone_version)); - update_values.push_back(columns[3] + " = " + std::to_string(adventure_template_entry.is_hard)); - update_values.push_back(columns[4] + " = " + std::to_string(adventure_template_entry.is_raid)); - update_values.push_back(columns[5] + " = " + std::to_string(adventure_template_entry.min_level)); - update_values.push_back(columns[6] + " = " + std::to_string(adventure_template_entry.max_level)); - update_values.push_back(columns[7] + " = " + std::to_string(adventure_template_entry.type)); - update_values.push_back(columns[8] + " = " + std::to_string(adventure_template_entry.type_data)); - update_values.push_back(columns[9] + " = " + std::to_string(adventure_template_entry.type_count)); - update_values.push_back(columns[10] + " = " + std::to_string(adventure_template_entry.assa_x)); - update_values.push_back(columns[11] + " = " + std::to_string(adventure_template_entry.assa_y)); - update_values.push_back(columns[12] + " = " + std::to_string(adventure_template_entry.assa_z)); - update_values.push_back(columns[13] + " = " + std::to_string(adventure_template_entry.assa_h)); - update_values.push_back(columns[14] + " = '" + EscapeString(adventure_template_entry.text) + "'"); - update_values.push_back(columns[15] + " = " + std::to_string(adventure_template_entry.duration)); - update_values.push_back(columns[16] + " = " + std::to_string(adventure_template_entry.zone_in_time)); - update_values.push_back(columns[17] + " = " + std::to_string(adventure_template_entry.win_points)); - update_values.push_back(columns[18] + " = " + std::to_string(adventure_template_entry.lose_points)); - update_values.push_back(columns[19] + " = " + std::to_string(adventure_template_entry.theme)); - update_values.push_back(columns[20] + " = " + std::to_string(adventure_template_entry.zone_in_zone_id)); - update_values.push_back(columns[21] + " = " + std::to_string(adventure_template_entry.zone_in_x)); - update_values.push_back(columns[22] + " = " + std::to_string(adventure_template_entry.zone_in_y)); - update_values.push_back(columns[23] + " = " + std::to_string(adventure_template_entry.zone_in_object_id)); - update_values.push_back(columns[24] + " = " + std::to_string(adventure_template_entry.dest_x)); - update_values.push_back(columns[25] + " = " + std::to_string(adventure_template_entry.dest_y)); - update_values.push_back(columns[26] + " = " + std::to_string(adventure_template_entry.dest_z)); - update_values.push_back(columns[27] + " = " + std::to_string(adventure_template_entry.dest_h)); - update_values.push_back(columns[28] + " = " + std::to_string(adventure_template_entry.graveyard_zone_id)); - update_values.push_back(columns[29] + " = " + std::to_string(adventure_template_entry.graveyard_x)); - update_values.push_back(columns[30] + " = " + std::to_string(adventure_template_entry.graveyard_y)); - update_values.push_back(columns[31] + " = " + std::to_string(adventure_template_entry.graveyard_z)); - update_values.push_back(columns[32] + " = " + std::to_string(adventure_template_entry.graveyard_radius)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - adventure_template_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AdventureTemplate InsertOne( - AdventureTemplate adventure_template_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); - insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); - insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); - insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); - insert_values.push_back(std::to_string(adventure_template_entry.min_level)); - insert_values.push_back(std::to_string(adventure_template_entry.max_level)); - insert_values.push_back(std::to_string(adventure_template_entry.type)); - insert_values.push_back(std::to_string(adventure_template_entry.type_data)); - insert_values.push_back(std::to_string(adventure_template_entry.type_count)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); - insert_values.push_back(std::to_string(adventure_template_entry.duration)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); - insert_values.push_back(std::to_string(adventure_template_entry.win_points)); - insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); - insert_values.push_back(std::to_string(adventure_template_entry.theme)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - adventure_template_entry.id = results.LastInsertedID(); - return adventure_template_entry; - } - - adventure_template_entry = AdventureTemplateRepository::NewEntity(); - - return adventure_template_entry; - } - - static int InsertMany( - std::vector adventure_template_entries - ) - { - std::vector insert_chunks; - - for (auto &adventure_template_entry: adventure_template_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); - insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); - insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); - insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); - insert_values.push_back(std::to_string(adventure_template_entry.min_level)); - insert_values.push_back(std::to_string(adventure_template_entry.max_level)); - insert_values.push_back(std::to_string(adventure_template_entry.type)); - insert_values.push_back(std::to_string(adventure_template_entry.type_data)); - insert_values.push_back(std::to_string(adventure_template_entry.type_count)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); - insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); - insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); - insert_values.push_back(std::to_string(adventure_template_entry.duration)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); - insert_values.push_back(std::to_string(adventure_template_entry.win_points)); - insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); - insert_values.push_back(std::to_string(adventure_template_entry.theme)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); - insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); - insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); - insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplate entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.zone_version = atoi(row[2]); - entry.is_hard = atoi(row[3]); - entry.is_raid = atoi(row[4]); - entry.min_level = atoi(row[5]); - entry.max_level = atoi(row[6]); - entry.type = atoi(row[7]); - entry.type_data = atoi(row[8]); - entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); - entry.text = row[14] ? row[14] : ""; - entry.duration = atoi(row[15]); - entry.zone_in_time = atoi(row[16]); - entry.win_points = atoi(row[17]); - entry.lose_points = atoi(row[18]); - entry.theme = atoi(row[19]); - entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); - entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); - entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AdventureTemplate entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.zone_version = atoi(row[2]); - entry.is_hard = atoi(row[3]); - entry.is_raid = atoi(row[4]); - entry.min_level = atoi(row[5]); - entry.max_level = atoi(row[6]); - entry.type = atoi(row[7]); - entry.type_data = atoi(row[8]); - entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); - entry.text = row[14] ? row[14] : ""; - entry.duration = atoi(row[15]); - entry.zone_in_time = atoi(row[16]); - entry.win_points = atoi(row[17]); - entry.lose_points = atoi(row[18]); - entry.theme = atoi(row[19]); - entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); - entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); - entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/alternate_currency_repository.h b/common/repositories/alternate_currency_repository.h index a47c914b9..92f1248c4 100644 --- a/common/repositories/alternate_currency_repository.h +++ b/common/repositories/alternate_currency_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_alternate_currency_repository.h" -class AlternateCurrencyRepository { +class AlternateCurrencyRepository: public BaseAlternateCurrencyRepository { public: - struct AlternateCurrency { - int id; - int item_id; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AlternateCurrencyRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AlternateCurrencyRepository::GetWhereNeverExpires() + * AlternateCurrencyRepository::GetWhereXAndY() + * AlternateCurrencyRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "item_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("alternate_currency"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static AlternateCurrency NewEntity() - { - AlternateCurrency entry{}; - - entry.id = 0; - entry.item_id = 0; - - return entry; - } - - static AlternateCurrency GetAlternateCurrencyEntry( - const std::vector &alternate_currencys, - int alternate_currency_id - ) - { - for (auto &alternate_currency : alternate_currencys) { - if (alternate_currency.id == alternate_currency_id) { - return alternate_currency; - } - } - - return NewEntity(); - } - - static AlternateCurrency FindOne( - int alternate_currency_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - alternate_currency_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - AlternateCurrency entry{}; - - entry.id = atoi(row[0]); - entry.item_id = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int alternate_currency_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - alternate_currency_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - AlternateCurrency alternate_currency_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(alternate_currency_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - alternate_currency_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static AlternateCurrency InsertOne( - AlternateCurrency alternate_currency_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - alternate_currency_entry.id = results.LastInsertedID(); - return alternate_currency_entry; - } - - alternate_currency_entry = AlternateCurrencyRepository::NewEntity(); - - return alternate_currency_entry; - } - - static int InsertMany( - std::vector alternate_currency_entries - ) - { - std::vector insert_chunks; - - for (auto &alternate_currency_entry: alternate_currency_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AlternateCurrency entry{}; - - entry.id = atoi(row[0]); - entry.item_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - AlternateCurrency entry{}; - - entry.id = atoi(row[0]); - entry.item_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index 08a70fbb5..4c3efed2f 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -23,356 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_auras_repository.h" -class AurasRepository { +class AurasRepository: public BaseAurasRepository { public: - struct Auras { - int type; - int npc_type; - std::string name; - int spell_id; - int distance; - int aura_type; - int spawn_type; - int movement; - int duration; - int icon; - int cast_time; - }; - static std::string PrimaryKey() - { - return std::string("type"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * AurasRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * AurasRepository::GetWhereNeverExpires() + * AurasRepository::GetWhereXAndY() + * AurasRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "type", - "npc_type", - "name", - "spell_id", - "distance", - "aura_type", - "spawn_type", - "movement", - "duration", - "icon", - "cast_time", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("auras"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Auras NewEntity() - { - Auras entry{}; - - entry.type = 0; - entry.npc_type = 0; - entry.name = ""; - entry.spell_id = 0; - entry.distance = 60; - entry.aura_type = 1; - entry.spawn_type = 0; - entry.movement = 0; - entry.duration = 5400; - entry.icon = -1; - entry.cast_time = 0; - - return entry; - } - - static Auras GetAurasEntry( - const std::vector &aurass, - int auras_id - ) - { - for (auto &auras : aurass) { - if (auras.type == auras_id) { - return auras; - } - } - - return NewEntity(); - } - - static Auras FindOne( - int auras_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - auras_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Auras entry{}; - - entry.type = atoi(row[0]); - entry.npc_type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.spell_id = atoi(row[3]); - entry.distance = atoi(row[4]); - entry.aura_type = atoi(row[5]); - entry.spawn_type = atoi(row[6]); - entry.movement = atoi(row[7]); - entry.duration = atoi(row[8]); - entry.icon = atoi(row[9]); - entry.cast_time = atoi(row[10]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int auras_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - auras_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Auras auras_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(auras_entry.npc_type)); - update_values.push_back(columns[2] + " = '" + EscapeString(auras_entry.name) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(auras_entry.spell_id)); - update_values.push_back(columns[4] + " = " + std::to_string(auras_entry.distance)); - update_values.push_back(columns[5] + " = " + std::to_string(auras_entry.aura_type)); - update_values.push_back(columns[6] + " = " + std::to_string(auras_entry.spawn_type)); - update_values.push_back(columns[7] + " = " + std::to_string(auras_entry.movement)); - update_values.push_back(columns[8] + " = " + std::to_string(auras_entry.duration)); - update_values.push_back(columns[9] + " = " + std::to_string(auras_entry.icon)); - update_values.push_back(columns[10] + " = " + std::to_string(auras_entry.cast_time)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - auras_entry.type - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Auras InsertOne( - Auras auras_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(auras_entry.npc_type)); - insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); - insert_values.push_back(std::to_string(auras_entry.spell_id)); - insert_values.push_back(std::to_string(auras_entry.distance)); - insert_values.push_back(std::to_string(auras_entry.aura_type)); - insert_values.push_back(std::to_string(auras_entry.spawn_type)); - insert_values.push_back(std::to_string(auras_entry.movement)); - insert_values.push_back(std::to_string(auras_entry.duration)); - insert_values.push_back(std::to_string(auras_entry.icon)); - insert_values.push_back(std::to_string(auras_entry.cast_time)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - auras_entry.id = results.LastInsertedID(); - return auras_entry; - } - - auras_entry = AurasRepository::NewEntity(); - - return auras_entry; - } - - static int InsertMany( - std::vector auras_entries - ) - { - std::vector insert_chunks; - - for (auto &auras_entry: auras_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(auras_entry.npc_type)); - insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); - insert_values.push_back(std::to_string(auras_entry.spell_id)); - insert_values.push_back(std::to_string(auras_entry.distance)); - insert_values.push_back(std::to_string(auras_entry.aura_type)); - insert_values.push_back(std::to_string(auras_entry.spawn_type)); - insert_values.push_back(std::to_string(auras_entry.movement)); - insert_values.push_back(std::to_string(auras_entry.duration)); - insert_values.push_back(std::to_string(auras_entry.icon)); - insert_values.push_back(std::to_string(auras_entry.cast_time)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Auras entry{}; - - entry.type = atoi(row[0]); - entry.npc_type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.spell_id = atoi(row[3]); - entry.distance = atoi(row[4]); - entry.aura_type = atoi(row[5]); - entry.spawn_type = atoi(row[6]); - entry.movement = atoi(row[7]); - entry.duration = atoi(row[8]); - entry.icon = atoi(row[9]); - entry.cast_time = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Auras entry{}; - - entry.type = atoi(row[0]); - entry.npc_type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.spell_id = atoi(row[3]); - entry.distance = atoi(row[4]); - entry.aura_type = atoi(row[5]); - entry.spawn_type = atoi(row[6]); - entry.movement = atoi(row[7]); - entry.duration = atoi(row[8]); - entry.icon = atoi(row[9]); - entry.cast_time = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index f8afcf0a2..5f29b6d26 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_banned_ips_repository.h" -class BannedIpsRepository { +class BannedIpsRepository: public BaseBannedIpsRepository { public: - struct BannedIps { - std::string ip_address; - std::string notes; - }; - static std::string PrimaryKey() - { - return std::string("ip_address"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BannedIpsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BannedIpsRepository::GetWhereNeverExpires() + * BannedIpsRepository::GetWhereXAndY() + * BannedIpsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "ip_address", - "notes", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("banned_ips"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static BannedIps NewEntity() - { - BannedIps entry{}; - - entry.ip_address = ""; - entry.notes = ""; - - return entry; - } - - static BannedIps GetBannedIpsEntry( - const std::vector &banned_ipss, - int banned_ips_id - ) - { - for (auto &banned_ips : banned_ipss) { - if (banned_ips.ip_address == banned_ips_id) { - return banned_ips; - } - } - - return NewEntity(); - } - - static BannedIps FindOne( - int banned_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - banned_ips_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int banned_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - banned_ips_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - BannedIps banned_ips_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(banned_ips_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - banned_ips_entry.ip_address - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static BannedIps InsertOne( - BannedIps banned_ips_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - banned_ips_entry.id = results.LastInsertedID(); - return banned_ips_entry; - } - - banned_ips_entry = BannedIpsRepository::NewEntity(); - - return banned_ips_entry; - } - - static int InsertMany( - std::vector banned_ips_entries - ) - { - std::vector insert_chunks; - - for (auto &banned_ips_entry: banned_ips_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/base/base_aa_ability_repository.h b/common/repositories/base/base_aa_ability_repository.h new file mode 100644 index 000000000..3fbc3eeee --- /dev/null +++ b/common/repositories/base/base_aa_ability_repository.h @@ -0,0 +1,414 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_AA_ABILITY_REPOSITORY_H +#define EQEMU_BASE_AA_ABILITY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAaAbilityRepository { +public: + struct AaAbility { + int id; + std::string name; + int category; + int classes; + int races; + int drakkin_heritage; + int deities; + int status; + int type; + int charges; + int8 grant_only; + int first_rank_id; + int8 enabled; + int8 reset_on_death; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "category", + "classes", + "races", + "drakkin_heritage", + "deities", + "status", + "type", + "charges", + "grant_only", + "first_rank_id", + "enabled", + "reset_on_death", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_ability"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaAbility NewEntity() + { + AaAbility entry{}; + + entry.id = 0; + entry.name = ""; + entry.category = -1; + entry.classes = 131070; + entry.races = 65535; + entry.drakkin_heritage = 127; + entry.deities = 131071; + entry.status = 0; + entry.type = 0; + entry.charges = 0; + entry.grant_only = 0; + entry.first_rank_id = -1; + entry.enabled = 1; + entry.reset_on_death = 0; + + return entry; + } + + static AaAbility GetAaAbilityEntry( + const std::vector &aa_abilitys, + int aa_ability_id + ) + { + for (auto &aa_ability : aa_abilitys) { + if (aa_ability.id == aa_ability_id) { + return aa_ability; + } + } + + return NewEntity(); + } + + static AaAbility FindOne( + int aa_ability_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_ability_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_ability_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_ability_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaAbility aa_ability_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(aa_ability_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(aa_ability_entry.category)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_ability_entry.classes)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_ability_entry.races)); + update_values.push_back(columns[5] + " = " + std::to_string(aa_ability_entry.drakkin_heritage)); + update_values.push_back(columns[6] + " = " + std::to_string(aa_ability_entry.deities)); + update_values.push_back(columns[7] + " = " + std::to_string(aa_ability_entry.status)); + update_values.push_back(columns[8] + " = " + std::to_string(aa_ability_entry.type)); + update_values.push_back(columns[9] + " = " + std::to_string(aa_ability_entry.charges)); + update_values.push_back(columns[10] + " = " + std::to_string(aa_ability_entry.grant_only)); + update_values.push_back(columns[11] + " = " + std::to_string(aa_ability_entry.first_rank_id)); + update_values.push_back(columns[12] + " = " + std::to_string(aa_ability_entry.enabled)); + update_values.push_back(columns[13] + " = " + std::to_string(aa_ability_entry.reset_on_death)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_ability_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaAbility InsertOne( + AaAbility aa_ability_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); + insert_values.push_back(std::to_string(aa_ability_entry.category)); + insert_values.push_back(std::to_string(aa_ability_entry.classes)); + insert_values.push_back(std::to_string(aa_ability_entry.races)); + insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(aa_ability_entry.deities)); + insert_values.push_back(std::to_string(aa_ability_entry.status)); + insert_values.push_back(std::to_string(aa_ability_entry.type)); + insert_values.push_back(std::to_string(aa_ability_entry.charges)); + insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); + insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); + insert_values.push_back(std::to_string(aa_ability_entry.enabled)); + insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_ability_entry.id = results.LastInsertedID(); + return aa_ability_entry; + } + + aa_ability_entry = NewEntity(); + + return aa_ability_entry; + } + + static int InsertMany( + std::vector aa_ability_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_ability_entry: aa_ability_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); + insert_values.push_back(std::to_string(aa_ability_entry.category)); + insert_values.push_back(std::to_string(aa_ability_entry.classes)); + insert_values.push_back(std::to_string(aa_ability_entry.races)); + insert_values.push_back(std::to_string(aa_ability_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(aa_ability_entry.deities)); + insert_values.push_back(std::to_string(aa_ability_entry.status)); + insert_values.push_back(std::to_string(aa_ability_entry.type)); + insert_values.push_back(std::to_string(aa_ability_entry.charges)); + insert_values.push_back(std::to_string(aa_ability_entry.grant_only)); + insert_values.push_back(std::to_string(aa_ability_entry.first_rank_id)); + insert_values.push_back(std::to_string(aa_ability_entry.enabled)); + insert_values.push_back(std::to_string(aa_ability_entry.reset_on_death)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaAbility entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.category = atoi(row[2]); + entry.classes = atoi(row[3]); + entry.races = atoi(row[4]); + entry.drakkin_heritage = atoi(row[5]); + entry.deities = atoi(row[6]); + entry.status = atoi(row[7]); + entry.type = atoi(row[8]); + entry.charges = atoi(row[9]); + entry.grant_only = atoi(row[10]); + entry.first_rank_id = atoi(row[11]); + entry.enabled = atoi(row[12]); + entry.reset_on_death = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_AA_ABILITY_REPOSITORY_H diff --git a/common/repositories/base/base_aa_rank_effects_repository.h b/common/repositories/base/base_aa_rank_effects_repository.h new file mode 100644 index 000000000..8744febbe --- /dev/null +++ b/common/repositories/base/base_aa_rank_effects_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H +#define EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAaRankEffectsRepository { +public: + struct AaRankEffects { + int rank_id; + int slot; + int effect_id; + int base1; + int base2; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "rank_id", + "slot", + "effect_id", + "base1", + "base2", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_rank_effects"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRankEffects NewEntity() + { + AaRankEffects entry{}; + + entry.rank_id = 0; + entry.slot = 1; + entry.effect_id = 0; + entry.base1 = 0; + entry.base2 = 0; + + return entry; + } + + static AaRankEffects GetAaRankEffectsEntry( + const std::vector &aa_rank_effectss, + int aa_rank_effects_id + ) + { + for (auto &aa_rank_effects : aa_rank_effectss) { + if (aa_rank_effects.slot == aa_rank_effects_id) { + return aa_rank_effects; + } + } + + return NewEntity(); + } + + static AaRankEffects FindOne( + int aa_rank_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_rank_effects_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_rank_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_rank_effects_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRankEffects aa_rank_effects_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_effects_entry.effect_id)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_rank_effects_entry.base1)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_rank_effects_entry.base2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_rank_effects_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRankEffects InsertOne( + AaRankEffects aa_rank_effects_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_rank_effects_entry.id = results.LastInsertedID(); + return aa_rank_effects_entry; + } + + aa_rank_effects_entry = NewEntity(); + + return aa_rank_effects_entry; + } + + static int InsertMany( + std::vector aa_rank_effects_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_rank_effects_entry: aa_rank_effects_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankEffects entry{}; + + entry.rank_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.effect_id = atoi(row[2]); + entry.base1 = atoi(row[3]); + entry.base2 = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H diff --git a/common/repositories/base/base_aa_rank_prereqs_repository.h b/common/repositories/base/base_aa_rank_prereqs_repository.h new file mode 100644 index 000000000..194917b34 --- /dev/null +++ b/common/repositories/base/base_aa_rank_prereqs_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H +#define EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAaRankPrereqsRepository { +public: + struct AaRankPrereqs { + int rank_id; + int aa_id; + int points; + }; + + static std::string PrimaryKey() + { + return std::string("aa_id"); + } + + static std::vector Columns() + { + return { + "rank_id", + "aa_id", + "points", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_rank_prereqs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRankPrereqs NewEntity() + { + AaRankPrereqs entry{}; + + entry.rank_id = 0; + entry.aa_id = 0; + entry.points = 0; + + return entry; + } + + static AaRankPrereqs GetAaRankPrereqsEntry( + const std::vector &aa_rank_prereqss, + int aa_rank_prereqs_id + ) + { + for (auto &aa_rank_prereqs : aa_rank_prereqss) { + if (aa_rank_prereqs.aa_id == aa_rank_prereqs_id) { + return aa_rank_prereqs; + } + } + + return NewEntity(); + } + + static AaRankPrereqs FindOne( + int aa_rank_prereqs_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_rank_prereqs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_rank_prereqs_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_rank_prereqs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRankPrereqs aa_rank_prereqs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_prereqs_entry.points)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_rank_prereqs_entry.aa_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRankPrereqs InsertOne( + AaRankPrereqs aa_rank_prereqs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_rank_prereqs_entry.id = results.LastInsertedID(); + return aa_rank_prereqs_entry; + } + + aa_rank_prereqs_entry = NewEntity(); + + return aa_rank_prereqs_entry; + } + + static int InsertMany( + std::vector aa_rank_prereqs_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_rank_prereqs_entry: aa_rank_prereqs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRankPrereqs entry{}; + + entry.rank_id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.points = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H diff --git a/common/repositories/base/base_aa_ranks_repository.h b/common/repositories/base/base_aa_ranks_repository.h new file mode 100644 index 000000000..d8a7624d5 --- /dev/null +++ b/common/repositories/base/base_aa_ranks_repository.h @@ -0,0 +1,405 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_AA_RANKS_REPOSITORY_H +#define EQEMU_BASE_AA_RANKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAaRanksRepository { +public: + struct AaRanks { + int id; + int upper_hotkey_sid; + int lower_hotkey_sid; + int title_sid; + int desc_sid; + int cost; + int level_req; + int spell; + int spell_type; + int recast_time; + int expansion; + int prev_id; + int next_id; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "upper_hotkey_sid", + "lower_hotkey_sid", + "title_sid", + "desc_sid", + "cost", + "level_req", + "spell", + "spell_type", + "recast_time", + "expansion", + "prev_id", + "next_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("aa_ranks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AaRanks NewEntity() + { + AaRanks entry{}; + + entry.id = 0; + entry.upper_hotkey_sid = -1; + entry.lower_hotkey_sid = -1; + entry.title_sid = -1; + entry.desc_sid = -1; + entry.cost = 1; + entry.level_req = 51; + entry.spell = -1; + entry.spell_type = 0; + entry.recast_time = 0; + entry.expansion = 0; + entry.prev_id = -1; + entry.next_id = -1; + + return entry; + } + + static AaRanks GetAaRanksEntry( + const std::vector &aa_rankss, + int aa_ranks_id + ) + { + for (auto &aa_ranks : aa_rankss) { + if (aa_ranks.id == aa_ranks_id) { + return aa_ranks; + } + } + + return NewEntity(); + } + + static AaRanks FindOne( + int aa_ranks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + aa_ranks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int aa_ranks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + aa_ranks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AaRanks aa_ranks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(aa_ranks_entry.upper_hotkey_sid)); + update_values.push_back(columns[2] + " = " + std::to_string(aa_ranks_entry.lower_hotkey_sid)); + update_values.push_back(columns[3] + " = " + std::to_string(aa_ranks_entry.title_sid)); + update_values.push_back(columns[4] + " = " + std::to_string(aa_ranks_entry.desc_sid)); + update_values.push_back(columns[5] + " = " + std::to_string(aa_ranks_entry.cost)); + update_values.push_back(columns[6] + " = " + std::to_string(aa_ranks_entry.level_req)); + update_values.push_back(columns[7] + " = " + std::to_string(aa_ranks_entry.spell)); + update_values.push_back(columns[8] + " = " + std::to_string(aa_ranks_entry.spell_type)); + update_values.push_back(columns[9] + " = " + std::to_string(aa_ranks_entry.recast_time)); + update_values.push_back(columns[10] + " = " + std::to_string(aa_ranks_entry.expansion)); + update_values.push_back(columns[11] + " = " + std::to_string(aa_ranks_entry.prev_id)); + update_values.push_back(columns[12] + " = " + std::to_string(aa_ranks_entry.next_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + aa_ranks_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AaRanks InsertOne( + AaRanks aa_ranks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.cost)); + insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); + insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); + insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); + insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); + insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + aa_ranks_entry.id = results.LastInsertedID(); + return aa_ranks_entry; + } + + aa_ranks_entry = NewEntity(); + + return aa_ranks_entry; + } + + static int InsertMany( + std::vector aa_ranks_entries + ) + { + std::vector insert_chunks; + + for (auto &aa_ranks_entry: aa_ranks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.desc_sid)); + insert_values.push_back(std::to_string(aa_ranks_entry.cost)); + insert_values.push_back(std::to_string(aa_ranks_entry.level_req)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell)); + insert_values.push_back(std::to_string(aa_ranks_entry.spell_type)); + insert_values.push_back(std::to_string(aa_ranks_entry.recast_time)); + insert_values.push_back(std::to_string(aa_ranks_entry.expansion)); + insert_values.push_back(std::to_string(aa_ranks_entry.prev_id)); + insert_values.push_back(std::to_string(aa_ranks_entry.next_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AaRanks entry{}; + + entry.id = atoi(row[0]); + entry.upper_hotkey_sid = atoi(row[1]); + entry.lower_hotkey_sid = atoi(row[2]); + entry.title_sid = atoi(row[3]); + entry.desc_sid = atoi(row[4]); + entry.cost = atoi(row[5]); + entry.level_req = atoi(row[6]); + entry.spell = atoi(row[7]); + entry.spell_type = atoi(row[8]); + entry.recast_time = atoi(row[9]); + entry.expansion = atoi(row[10]); + entry.prev_id = atoi(row[11]); + entry.next_id = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_AA_RANKS_REPOSITORY_H diff --git a/common/repositories/base/base_account_flags_repository.h b/common/repositories/base/base_account_flags_repository.h new file mode 100644 index 000000000..36a4f7f7c --- /dev/null +++ b/common/repositories/base/base_account_flags_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H +#define EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAccountFlagsRepository { +public: + struct AccountFlags { + int p_accid; + std::string p_flag; + std::string p_value; + }; + + static std::string PrimaryKey() + { + return std::string("p_flag"); + } + + static std::vector Columns() + { + return { + "p_accid", + "p_flag", + "p_value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_flags"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountFlags NewEntity() + { + AccountFlags entry{}; + + entry.p_accid = 0; + entry.p_flag = ""; + entry.p_value = ""; + + return entry; + } + + static AccountFlags GetAccountFlagsEntry( + const std::vector &account_flagss, + int account_flags_id + ) + { + for (auto &account_flags : account_flagss) { + if (account_flags.p_flag == account_flags_id) { + return account_flags; + } + } + + return NewEntity(); + } + + static AccountFlags FindOne( + int account_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_flags_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_flags_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountFlags account_flags_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(account_flags_entry.p_value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_flags_entry.p_flag + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountFlags InsertOne( + AccountFlags account_flags_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_flags_entry.id = results.LastInsertedID(); + return account_flags_entry; + } + + account_flags_entry = NewEntity(); + + return account_flags_entry; + } + + static int InsertMany( + std::vector account_flags_entries + ) + { + std::vector insert_chunks; + + for (auto &account_flags_entry: account_flags_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountFlags entry{}; + + entry.p_accid = atoi(row[0]); + entry.p_flag = row[1] ? row[1] : ""; + entry.p_value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H diff --git a/common/repositories/base/base_account_ip_repository.h b/common/repositories/base/base_account_ip_repository.h new file mode 100644 index 000000000..c85b90c81 --- /dev/null +++ b/common/repositories/base/base_account_ip_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H +#define EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAccountIpRepository { +public: + struct AccountIp { + int accid; + std::string ip; + int count; + std::string lastused; + }; + + static std::string PrimaryKey() + { + return std::string("ip"); + } + + static std::vector Columns() + { + return { + "accid", + "ip", + "count", + "lastused", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_ip"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountIp NewEntity() + { + AccountIp entry{}; + + entry.accid = 0; + entry.ip = ""; + entry.count = 1; + entry.lastused = current_timestamp(); + + return entry; + } + + static AccountIp GetAccountIpEntry( + const std::vector &account_ips, + int account_ip_id + ) + { + for (auto &account_ip : account_ips) { + if (account_ip.ip == account_ip_id) { + return account_ip; + } + } + + return NewEntity(); + } + + static AccountIp FindOne( + int account_ip_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_ip_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1] ? row[1] : ""; + entry.count = atoi(row[2]); + entry.lastused = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_ip_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_ip_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountIp account_ip_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(account_ip_entry.count)); + update_values.push_back(columns[3] + " = '" + EscapeString(account_ip_entry.lastused) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_ip_entry.ip + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountIp InsertOne( + AccountIp account_ip_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_ip_entry.count)); + insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_ip_entry.id = results.LastInsertedID(); + return account_ip_entry; + } + + account_ip_entry = NewEntity(); + + return account_ip_entry; + } + + static int InsertMany( + std::vector account_ip_entries + ) + { + std::vector insert_chunks; + + for (auto &account_ip_entry: account_ip_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_ip_entry.count)); + insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1] ? row[1] : ""; + entry.count = atoi(row[2]); + entry.lastused = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountIp entry{}; + + entry.accid = atoi(row[0]); + entry.ip = row[1] ? row[1] : ""; + entry.count = atoi(row[2]); + entry.lastused = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H diff --git a/common/repositories/base/base_account_repository.h b/common/repositories/base/base_account_repository.h new file mode 100644 index 000000000..3434a9c9f --- /dev/null +++ b/common/repositories/base/base_account_repository.h @@ -0,0 +1,459 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ACCOUNT_REPOSITORY_H +#define EQEMU_BASE_ACCOUNT_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAccountRepository { +public: + struct Account { + int id; + std::string name; + std::string charname; + int sharedplat; + std::string password; + int status; + std::string ls_id; + int lsaccount_id; + int8 gmspeed; + int8 revoked; + int karma; + std::string minilogin_ip; + int8 hideme; + int8 rulesflag; + std::string suspendeduntil; + int time_creation; + int8 expansion; + std::string ban_reason; + std::string suspend_reason; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "charname", + "sharedplat", + "password", + "status", + "ls_id", + "lsaccount_id", + "gmspeed", + "revoked", + "karma", + "minilogin_ip", + "hideme", + "rulesflag", + "suspendeduntil", + "time_creation", + "expansion", + "ban_reason", + "suspend_reason", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Account NewEntity() + { + Account entry{}; + + entry.id = 0; + entry.name = ""; + entry.charname = ""; + entry.sharedplat = 0; + entry.password = ""; + entry.status = 0; + entry.ls_id = "eqemu"; + entry.lsaccount_id = 0; + entry.gmspeed = 0; + entry.revoked = 0; + entry.karma = 0; + entry.minilogin_ip = ""; + entry.hideme = 0; + entry.rulesflag = 0; + entry.suspendeduntil = "0000-00-00 00:00:00"; + entry.time_creation = 0; + entry.expansion = 0; + entry.ban_reason = ""; + entry.suspend_reason = ""; + + return entry; + } + + static Account GetAccountEntry( + const std::vector &accounts, + int account_id + ) + { + for (auto &account : accounts) { + if (account.id == account_id) { + return account; + } + } + + return NewEntity(); + } + + static Account FindOne( + int account_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; + entry.sharedplat = atoi(row[3]); + entry.password = row[4] ? row[4] : ""; + entry.status = atoi(row[5]); + entry.ls_id = row[6] ? row[6] : ""; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11] ? row[11] : ""; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14] ? row[14] : ""; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Account account_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(account_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(account_entry.charname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(account_entry.sharedplat)); + update_values.push_back(columns[4] + " = '" + EscapeString(account_entry.password) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(account_entry.status)); + update_values.push_back(columns[6] + " = '" + EscapeString(account_entry.ls_id) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(account_entry.lsaccount_id)); + update_values.push_back(columns[8] + " = " + std::to_string(account_entry.gmspeed)); + update_values.push_back(columns[9] + " = " + std::to_string(account_entry.revoked)); + update_values.push_back(columns[10] + " = " + std::to_string(account_entry.karma)); + update_values.push_back(columns[11] + " = '" + EscapeString(account_entry.minilogin_ip) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(account_entry.hideme)); + update_values.push_back(columns[13] + " = " + std::to_string(account_entry.rulesflag)); + update_values.push_back(columns[14] + " = '" + EscapeString(account_entry.suspendeduntil) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(account_entry.time_creation)); + update_values.push_back(columns[16] + " = " + std::to_string(account_entry.expansion)); + update_values.push_back(columns[17] + " = '" + EscapeString(account_entry.ban_reason) + "'"); + update_values.push_back(columns[18] + " = '" + EscapeString(account_entry.suspend_reason) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Account InsertOne( + Account account_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); + insert_values.push_back(std::to_string(account_entry.sharedplat)); + insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); + insert_values.push_back(std::to_string(account_entry.status)); + insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); + insert_values.push_back(std::to_string(account_entry.lsaccount_id)); + insert_values.push_back(std::to_string(account_entry.gmspeed)); + insert_values.push_back(std::to_string(account_entry.revoked)); + insert_values.push_back(std::to_string(account_entry.karma)); + insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); + insert_values.push_back(std::to_string(account_entry.hideme)); + insert_values.push_back(std::to_string(account_entry.rulesflag)); + insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); + insert_values.push_back(std::to_string(account_entry.time_creation)); + insert_values.push_back(std::to_string(account_entry.expansion)); + insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_entry.id = results.LastInsertedID(); + return account_entry; + } + + account_entry = NewEntity(); + + return account_entry; + } + + static int InsertMany( + std::vector account_entries + ) + { + std::vector insert_chunks; + + for (auto &account_entry: account_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(account_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.charname) + "'"); + insert_values.push_back(std::to_string(account_entry.sharedplat)); + insert_values.push_back("'" + EscapeString(account_entry.password) + "'"); + insert_values.push_back(std::to_string(account_entry.status)); + insert_values.push_back("'" + EscapeString(account_entry.ls_id) + "'"); + insert_values.push_back(std::to_string(account_entry.lsaccount_id)); + insert_values.push_back(std::to_string(account_entry.gmspeed)); + insert_values.push_back(std::to_string(account_entry.revoked)); + insert_values.push_back(std::to_string(account_entry.karma)); + insert_values.push_back("'" + EscapeString(account_entry.minilogin_ip) + "'"); + insert_values.push_back(std::to_string(account_entry.hideme)); + insert_values.push_back(std::to_string(account_entry.rulesflag)); + insert_values.push_back("'" + EscapeString(account_entry.suspendeduntil) + "'"); + insert_values.push_back(std::to_string(account_entry.time_creation)); + insert_values.push_back(std::to_string(account_entry.expansion)); + insert_values.push_back("'" + EscapeString(account_entry.ban_reason) + "'"); + insert_values.push_back("'" + EscapeString(account_entry.suspend_reason) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; + entry.sharedplat = atoi(row[3]); + entry.password = row[4] ? row[4] : ""; + entry.status = atoi(row[5]); + entry.ls_id = row[6] ? row[6] : ""; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11] ? row[11] : ""; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14] ? row[14] : ""; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Account entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.charname = row[2] ? row[2] : ""; + entry.sharedplat = atoi(row[3]); + entry.password = row[4] ? row[4] : ""; + entry.status = atoi(row[5]); + entry.ls_id = row[6] ? row[6] : ""; + entry.lsaccount_id = atoi(row[7]); + entry.gmspeed = atoi(row[8]); + entry.revoked = atoi(row[9]); + entry.karma = atoi(row[10]); + entry.minilogin_ip = row[11] ? row[11] : ""; + entry.hideme = atoi(row[12]); + entry.rulesflag = atoi(row[13]); + entry.suspendeduntil = row[14] ? row[14] : ""; + entry.time_creation = atoi(row[15]); + entry.expansion = atoi(row[16]); + entry.ban_reason = row[17] ? row[17] : ""; + entry.suspend_reason = row[18] ? row[18] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ACCOUNT_REPOSITORY_H diff --git a/common/repositories/base/base_account_rewards_repository.h b/common/repositories/base/base_account_rewards_repository.h new file mode 100644 index 000000000..06120dffb --- /dev/null +++ b/common/repositories/base/base_account_rewards_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H +#define EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAccountRewardsRepository { +public: + struct AccountRewards { + int account_id; + int reward_id; + int amount; + }; + + static std::string PrimaryKey() + { + return std::string("reward_id"); + } + + static std::vector Columns() + { + return { + "account_id", + "reward_id", + "amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("account_rewards"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AccountRewards NewEntity() + { + AccountRewards entry{}; + + entry.account_id = 0; + entry.reward_id = 0; + entry.amount = 0; + + return entry; + } + + static AccountRewards GetAccountRewardsEntry( + const std::vector &account_rewardss, + int account_rewards_id + ) + { + for (auto &account_rewards : account_rewardss) { + if (account_rewards.reward_id == account_rewards_id) { + return account_rewards; + } + } + + return NewEntity(); + } + + static AccountRewards FindOne( + int account_rewards_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + account_rewards_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int account_rewards_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + account_rewards_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AccountRewards account_rewards_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(account_rewards_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + account_rewards_entry.reward_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AccountRewards InsertOne( + AccountRewards account_rewards_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_rewards_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + account_rewards_entry.id = results.LastInsertedID(); + return account_rewards_entry; + } + + account_rewards_entry = NewEntity(); + + return account_rewards_entry; + } + + static int InsertMany( + std::vector account_rewards_entries + ) + { + std::vector insert_chunks; + + for (auto &account_rewards_entry: account_rewards_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(account_rewards_entry.amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AccountRewards entry{}; + + entry.account_id = atoi(row[0]); + entry.reward_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_details_repository.h b/common/repositories/base/base_adventure_details_repository.h new file mode 100644 index 000000000..d5ffbecc0 --- /dev/null +++ b/common/repositories/base/base_adventure_details_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureDetailsRepository { +public: + struct AdventureDetails { + int id; + int16 adventure_id; + int instance_id; + int16 count; + int16 assassinate_count; + int8 status; + int time_created; + int time_zoned; + int time_completed; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "adventure_id", + "instance_id", + "count", + "assassinate_count", + "status", + "time_created", + "time_zoned", + "time_completed", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_details"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureDetails NewEntity() + { + AdventureDetails entry{}; + + entry.id = 0; + entry.adventure_id = 0; + entry.instance_id = -1; + entry.count = 0; + entry.assassinate_count = 0; + entry.status = 0; + entry.time_created = 0; + entry.time_zoned = 0; + entry.time_completed = 0; + + return entry; + } + + static AdventureDetails GetAdventureDetailsEntry( + const std::vector &adventure_detailss, + int adventure_details_id + ) + { + for (auto &adventure_details : adventure_detailss) { + if (adventure_details.id == adventure_details_id) { + return adventure_details; + } + } + + return NewEntity(); + } + + static AdventureDetails FindOne( + int adventure_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_details_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_details_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureDetails adventure_details_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(adventure_details_entry.adventure_id)); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_details_entry.instance_id)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_details_entry.count)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_details_entry.assassinate_count)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_details_entry.status)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_details_entry.time_created)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_details_entry.time_zoned)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_details_entry.time_completed)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_details_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureDetails InsertOne( + AdventureDetails adventure_details_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); + insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); + insert_values.push_back(std::to_string(adventure_details_entry.count)); + insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); + insert_values.push_back(std::to_string(adventure_details_entry.status)); + insert_values.push_back(std::to_string(adventure_details_entry.time_created)); + insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); + insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_details_entry.id = results.LastInsertedID(); + return adventure_details_entry; + } + + adventure_details_entry = NewEntity(); + + return adventure_details_entry; + } + + static int InsertMany( + std::vector adventure_details_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_details_entry: adventure_details_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_details_entry.adventure_id)); + insert_values.push_back(std::to_string(adventure_details_entry.instance_id)); + insert_values.push_back(std::to_string(adventure_details_entry.count)); + insert_values.push_back(std::to_string(adventure_details_entry.assassinate_count)); + insert_values.push_back(std::to_string(adventure_details_entry.status)); + insert_values.push_back(std::to_string(adventure_details_entry.time_created)); + insert_values.push_back(std::to_string(adventure_details_entry.time_zoned)); + insert_values.push_back(std::to_string(adventure_details_entry.time_completed)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureDetails entry{}; + + entry.id = atoi(row[0]); + entry.adventure_id = atoi(row[1]); + entry.instance_id = atoi(row[2]); + entry.count = atoi(row[3]); + entry.assassinate_count = atoi(row[4]); + entry.status = atoi(row[5]); + entry.time_created = atoi(row[6]); + entry.time_zoned = atoi(row[7]); + entry.time_completed = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_members_repository.h b/common/repositories/base/base_adventure_members_repository.h new file mode 100644 index 000000000..0636da1ec --- /dev/null +++ b/common/repositories/base/base_adventure_members_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureMembersRepository { +public: + struct AdventureMembers { + int id; + int charid; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureMembers NewEntity() + { + AdventureMembers entry{}; + + entry.id = 0; + entry.charid = 0; + + return entry; + } + + static AdventureMembers GetAdventureMembersEntry( + const std::vector &adventure_memberss, + int adventure_members_id + ) + { + for (auto &adventure_members : adventure_memberss) { + if (adventure_members.charid == adventure_members_id) { + return adventure_members; + } + } + + return NewEntity(); + } + + static AdventureMembers FindOne( + int adventure_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureMembers adventure_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(adventure_members_entry.id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_members_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureMembers InsertOne( + AdventureMembers adventure_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_members_entry.id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_members_entry.id = results.LastInsertedID(); + return adventure_members_entry; + } + + adventure_members_entry = NewEntity(); + + return adventure_members_entry; + } + + static int InsertMany( + std::vector adventure_members_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_members_entry: adventure_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_members_entry.id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureMembers entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_stats_repository.h b/common/repositories/base/base_adventure_stats_repository.h new file mode 100644 index 000000000..fbd571bc9 --- /dev/null +++ b/common/repositories/base/base_adventure_stats_repository.h @@ -0,0 +1,387 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureStatsRepository { +public: + struct AdventureStats { + int player_id; + int guk_wins; + int mir_wins; + int mmc_wins; + int ruj_wins; + int tak_wins; + int guk_losses; + int mir_losses; + int mmc_losses; + int ruj_losses; + int tak_losses; + }; + + static std::string PrimaryKey() + { + return std::string("player_id"); + } + + static std::vector Columns() + { + return { + "player_id", + "guk_wins", + "mir_wins", + "mmc_wins", + "ruj_wins", + "tak_wins", + "guk_losses", + "mir_losses", + "mmc_losses", + "ruj_losses", + "tak_losses", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_stats"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureStats NewEntity() + { + AdventureStats entry{}; + + entry.player_id = 0; + entry.guk_wins = 0; + entry.mir_wins = 0; + entry.mmc_wins = 0; + entry.ruj_wins = 0; + entry.tak_wins = 0; + entry.guk_losses = 0; + entry.mir_losses = 0; + entry.mmc_losses = 0; + entry.ruj_losses = 0; + entry.tak_losses = 0; + + return entry; + } + + static AdventureStats GetAdventureStatsEntry( + const std::vector &adventure_statss, + int adventure_stats_id + ) + { + for (auto &adventure_stats : adventure_statss) { + if (adventure_stats.player_id == adventure_stats_id) { + return adventure_stats; + } + } + + return NewEntity(); + } + + static AdventureStats FindOne( + int adventure_stats_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_stats_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_stats_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_stats_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureStats adventure_stats_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(adventure_stats_entry.guk_wins)); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_stats_entry.mir_wins)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_stats_entry.mmc_wins)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_stats_entry.ruj_wins)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_stats_entry.tak_wins)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_stats_entry.guk_losses)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_stats_entry.mir_losses)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_stats_entry.mmc_losses)); + update_values.push_back(columns[9] + " = " + std::to_string(adventure_stats_entry.ruj_losses)); + update_values.push_back(columns[10] + " = " + std::to_string(adventure_stats_entry.tak_losses)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_stats_entry.player_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureStats InsertOne( + AdventureStats adventure_stats_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_stats_entry.id = results.LastInsertedID(); + return adventure_stats_entry; + } + + adventure_stats_entry = NewEntity(); + + return adventure_stats_entry; + } + + static int InsertMany( + std::vector adventure_stats_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_stats_entry: adventure_stats_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_wins)); + insert_values.push_back(std::to_string(adventure_stats_entry.guk_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mir_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.mmc_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.ruj_losses)); + insert_values.push_back(std::to_string(adventure_stats_entry.tak_losses)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureStats entry{}; + + entry.player_id = atoi(row[0]); + entry.guk_wins = atoi(row[1]); + entry.mir_wins = atoi(row[2]); + entry.mmc_wins = atoi(row[3]); + entry.ruj_wins = atoi(row[4]); + entry.tak_wins = atoi(row[5]); + entry.guk_losses = atoi(row[6]); + entry.mir_losses = atoi(row[7]); + entry.mmc_losses = atoi(row[8]); + entry.ruj_losses = atoi(row[9]); + entry.tak_losses = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_entry_flavor_repository.h b/common/repositories/base/base_adventure_template_entry_flavor_repository.h new file mode 100644 index 000000000..0aec523ed --- /dev/null +++ b/common/repositories/base/base_adventure_template_entry_flavor_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureTemplateEntryFlavorRepository { +public: + struct AdventureTemplateEntryFlavor { + int id; + std::string text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template_entry_flavor"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplateEntryFlavor NewEntity() + { + AdventureTemplateEntryFlavor entry{}; + + entry.id = 0; + entry.text = ""; + + return entry; + } + + static AdventureTemplateEntryFlavor GetAdventureTemplateEntryFlavorEntry( + const std::vector &adventure_template_entry_flavors, + int adventure_template_entry_flavor_id + ) + { + for (auto &adventure_template_entry_flavor : adventure_template_entry_flavors) { + if (adventure_template_entry_flavor.id == adventure_template_entry_flavor_id) { + return adventure_template_entry_flavor; + } + } + + return NewEntity(); + } + + static AdventureTemplateEntryFlavor FindOne( + int adventure_template_entry_flavor_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_entry_flavor_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_entry_flavor_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_entry_flavor_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry_flavor_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplateEntryFlavor InsertOne( + AdventureTemplateEntryFlavor adventure_template_entry_flavor_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry_flavor_entry.id = results.LastInsertedID(); + return adventure_template_entry_flavor_entry; + } + + adventure_template_entry_flavor_entry = NewEntity(); + + return adventure_template_entry_flavor_entry; + } + + static int InsertMany( + std::vector adventure_template_entry_flavor_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry_flavor_entry: adventure_template_entry_flavor_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntryFlavor entry{}; + + entry.id = atoi(row[0]); + entry.text = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_entry_repository.h b/common/repositories/base/base_adventure_template_entry_repository.h new file mode 100644 index 000000000..64799c3bf --- /dev/null +++ b/common/repositories/base/base_adventure_template_entry_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureTemplateEntryRepository { +public: + struct AdventureTemplateEntry { + int id; + int template_id; + }; + + static std::string PrimaryKey() + { + return std::string("template_id"); + } + + static std::vector Columns() + { + return { + "id", + "template_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template_entry"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplateEntry NewEntity() + { + AdventureTemplateEntry entry{}; + + entry.id = 0; + entry.template_id = 0; + + return entry; + } + + static AdventureTemplateEntry GetAdventureTemplateEntryEntry( + const std::vector &adventure_template_entrys, + int adventure_template_entry_id + ) + { + for (auto &adventure_template_entry : adventure_template_entrys) { + if (adventure_template_entry.template_id == adventure_template_entry_id) { + return adventure_template_entry; + } + } + + return NewEntity(); + } + + static AdventureTemplateEntry FindOne( + int adventure_template_entry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_entry_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_entry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_entry_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplateEntry adventure_template_entry_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry_entry.template_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplateEntry InsertOne( + AdventureTemplateEntry adventure_template_entry_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry_entry.id = results.LastInsertedID(); + return adventure_template_entry_entry; + } + + adventure_template_entry_entry = NewEntity(); + + return adventure_template_entry_entry; + } + + static int InsertMany( + std::vector adventure_template_entry_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry_entry: adventure_template_entry_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplateEntry entry{}; + + entry.id = atoi(row[0]); + entry.template_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_repository.h b/common/repositories/base/base_adventure_template_repository.h new file mode 100644 index 000000000..d93f46bf4 --- /dev/null +++ b/common/repositories/base/base_adventure_template_repository.h @@ -0,0 +1,585 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H +#define EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAdventureTemplateRepository { +public: + struct AdventureTemplate { + int id; + std::string zone; + int8 zone_version; + int8 is_hard; + int8 is_raid; + int8 min_level; + int8 max_level; + int8 type; + int type_data; + int16 type_count; + float assa_x; + float assa_y; + float assa_z; + float assa_h; + std::string text; + int duration; + int zone_in_time; + int16 win_points; + int16 lose_points; + int8 theme; + int16 zone_in_zone_id; + float zone_in_x; + float zone_in_y; + int16 zone_in_object_id; + float dest_x; + float dest_y; + float dest_z; + float dest_h; + int graveyard_zone_id; + float graveyard_x; + float graveyard_y; + float graveyard_z; + float graveyard_radius; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "zone_version", + "is_hard", + "is_raid", + "min_level", + "max_level", + "type", + "type_data", + "type_count", + "assa_x", + "assa_y", + "assa_z", + "assa_h", + "text", + "duration", + "zone_in_time", + "win_points", + "lose_points", + "theme", + "zone_in_zone_id", + "zone_in_x", + "zone_in_y", + "zone_in_object_id", + "dest_x", + "dest_y", + "dest_z", + "dest_h", + "graveyard_zone_id", + "graveyard_x", + "graveyard_y", + "graveyard_z", + "graveyard_radius", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("adventure_template"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AdventureTemplate NewEntity() + { + AdventureTemplate entry{}; + + entry.id = 0; + entry.zone = ""; + entry.zone_version = 0; + entry.is_hard = 0; + entry.is_raid = 0; + entry.min_level = 1; + entry.max_level = 65; + entry.type = 0; + entry.type_data = 0; + entry.type_count = 0; + entry.assa_x = 0; + entry.assa_y = 0; + entry.assa_z = 0; + entry.assa_h = 0; + entry.text = ""; + entry.duration = 7200; + entry.zone_in_time = 1800; + entry.win_points = 0; + entry.lose_points = 0; + entry.theme = 1; + entry.zone_in_zone_id = 0; + entry.zone_in_x = 0; + entry.zone_in_y = 0; + entry.zone_in_object_id = 0; + entry.dest_x = 0; + entry.dest_y = 0; + entry.dest_z = 0; + entry.dest_h = 0; + entry.graveyard_zone_id = 0; + entry.graveyard_x = 0; + entry.graveyard_y = 0; + entry.graveyard_z = 0; + entry.graveyard_radius = 0; + + return entry; + } + + static AdventureTemplate GetAdventureTemplateEntry( + const std::vector &adventure_templates, + int adventure_template_id + ) + { + for (auto &adventure_template : adventure_templates) { + if (adventure_template.id == adventure_template_id) { + return adventure_template; + } + } + + return NewEntity(); + } + + static AdventureTemplate FindOne( + int adventure_template_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + adventure_template_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14] ? row[14] : ""; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int adventure_template_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + adventure_template_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AdventureTemplate adventure_template_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(adventure_template_entry.zone_version)); + update_values.push_back(columns[3] + " = " + std::to_string(adventure_template_entry.is_hard)); + update_values.push_back(columns[4] + " = " + std::to_string(adventure_template_entry.is_raid)); + update_values.push_back(columns[5] + " = " + std::to_string(adventure_template_entry.min_level)); + update_values.push_back(columns[6] + " = " + std::to_string(adventure_template_entry.max_level)); + update_values.push_back(columns[7] + " = " + std::to_string(adventure_template_entry.type)); + update_values.push_back(columns[8] + " = " + std::to_string(adventure_template_entry.type_data)); + update_values.push_back(columns[9] + " = " + std::to_string(adventure_template_entry.type_count)); + update_values.push_back(columns[10] + " = " + std::to_string(adventure_template_entry.assa_x)); + update_values.push_back(columns[11] + " = " + std::to_string(adventure_template_entry.assa_y)); + update_values.push_back(columns[12] + " = " + std::to_string(adventure_template_entry.assa_z)); + update_values.push_back(columns[13] + " = " + std::to_string(adventure_template_entry.assa_h)); + update_values.push_back(columns[14] + " = '" + EscapeString(adventure_template_entry.text) + "'"); + update_values.push_back(columns[15] + " = " + std::to_string(adventure_template_entry.duration)); + update_values.push_back(columns[16] + " = " + std::to_string(adventure_template_entry.zone_in_time)); + update_values.push_back(columns[17] + " = " + std::to_string(adventure_template_entry.win_points)); + update_values.push_back(columns[18] + " = " + std::to_string(adventure_template_entry.lose_points)); + update_values.push_back(columns[19] + " = " + std::to_string(adventure_template_entry.theme)); + update_values.push_back(columns[20] + " = " + std::to_string(adventure_template_entry.zone_in_zone_id)); + update_values.push_back(columns[21] + " = " + std::to_string(adventure_template_entry.zone_in_x)); + update_values.push_back(columns[22] + " = " + std::to_string(adventure_template_entry.zone_in_y)); + update_values.push_back(columns[23] + " = " + std::to_string(adventure_template_entry.zone_in_object_id)); + update_values.push_back(columns[24] + " = " + std::to_string(adventure_template_entry.dest_x)); + update_values.push_back(columns[25] + " = " + std::to_string(adventure_template_entry.dest_y)); + update_values.push_back(columns[26] + " = " + std::to_string(adventure_template_entry.dest_z)); + update_values.push_back(columns[27] + " = " + std::to_string(adventure_template_entry.dest_h)); + update_values.push_back(columns[28] + " = " + std::to_string(adventure_template_entry.graveyard_zone_id)); + update_values.push_back(columns[29] + " = " + std::to_string(adventure_template_entry.graveyard_x)); + update_values.push_back(columns[30] + " = " + std::to_string(adventure_template_entry.graveyard_y)); + update_values.push_back(columns[31] + " = " + std::to_string(adventure_template_entry.graveyard_z)); + update_values.push_back(columns[32] + " = " + std::to_string(adventure_template_entry.graveyard_radius)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + adventure_template_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AdventureTemplate InsertOne( + AdventureTemplate adventure_template_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); + insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); + insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); + insert_values.push_back(std::to_string(adventure_template_entry.min_level)); + insert_values.push_back(std::to_string(adventure_template_entry.max_level)); + insert_values.push_back(std::to_string(adventure_template_entry.type)); + insert_values.push_back(std::to_string(adventure_template_entry.type_data)); + insert_values.push_back(std::to_string(adventure_template_entry.type_count)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.duration)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); + insert_values.push_back(std::to_string(adventure_template_entry.win_points)); + insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); + insert_values.push_back(std::to_string(adventure_template_entry.theme)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + adventure_template_entry.id = results.LastInsertedID(); + return adventure_template_entry; + } + + adventure_template_entry = NewEntity(); + + return adventure_template_entry; + } + + static int InsertMany( + std::vector adventure_template_entries + ) + { + std::vector insert_chunks; + + for (auto &adventure_template_entry: adventure_template_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); + insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); + insert_values.push_back(std::to_string(adventure_template_entry.is_raid)); + insert_values.push_back(std::to_string(adventure_template_entry.min_level)); + insert_values.push_back(std::to_string(adventure_template_entry.max_level)); + insert_values.push_back(std::to_string(adventure_template_entry.type)); + insert_values.push_back(std::to_string(adventure_template_entry.type_data)); + insert_values.push_back(std::to_string(adventure_template_entry.type_count)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_x)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_y)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_z)); + insert_values.push_back(std::to_string(adventure_template_entry.assa_h)); + insert_values.push_back("'" + EscapeString(adventure_template_entry.text) + "'"); + insert_values.push_back(std::to_string(adventure_template_entry.duration)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_time)); + insert_values.push_back(std::to_string(adventure_template_entry.win_points)); + insert_values.push_back(std::to_string(adventure_template_entry.lose_points)); + insert_values.push_back(std::to_string(adventure_template_entry.theme)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_zone_id)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_x)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_y)); + insert_values.push_back(std::to_string(adventure_template_entry.zone_in_object_id)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_x)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_y)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_z)); + insert_values.push_back(std::to_string(adventure_template_entry.dest_h)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_zone_id)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_x)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_y)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_z)); + insert_values.push_back(std::to_string(adventure_template_entry.graveyard_radius)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14] ? row[14] : ""; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AdventureTemplate entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.zone_version = atoi(row[2]); + entry.is_hard = atoi(row[3]); + entry.is_raid = atoi(row[4]); + entry.min_level = atoi(row[5]); + entry.max_level = atoi(row[6]); + entry.type = atoi(row[7]); + entry.type_data = atoi(row[8]); + entry.type_count = atoi(row[9]); + entry.assa_x = atof(row[10]); + entry.assa_y = atof(row[11]); + entry.assa_z = atof(row[12]); + entry.assa_h = atof(row[13]); + entry.text = row[14] ? row[14] : ""; + entry.duration = atoi(row[15]); + entry.zone_in_time = atoi(row[16]); + entry.win_points = atoi(row[17]); + entry.lose_points = atoi(row[18]); + entry.theme = atoi(row[19]); + entry.zone_in_zone_id = atoi(row[20]); + entry.zone_in_x = atof(row[21]); + entry.zone_in_y = atof(row[22]); + entry.zone_in_object_id = atoi(row[23]); + entry.dest_x = atof(row[24]); + entry.dest_y = atof(row[25]); + entry.dest_z = atof(row[26]); + entry.dest_h = atof(row[27]); + entry.graveyard_zone_id = atoi(row[28]); + entry.graveyard_x = atof(row[29]); + entry.graveyard_y = atof(row[30]); + entry.graveyard_z = atof(row[31]); + entry.graveyard_radius = atof(row[32]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H diff --git a/common/repositories/base/base_alternate_currency_repository.h b/common/repositories/base/base_alternate_currency_repository.h new file mode 100644 index 000000000..07fc1e489 --- /dev/null +++ b/common/repositories/base/base_alternate_currency_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H +#define EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAlternateCurrencyRepository { +public: + struct AlternateCurrency { + int id; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("alternate_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static AlternateCurrency NewEntity() + { + AlternateCurrency entry{}; + + entry.id = 0; + entry.item_id = 0; + + return entry; + } + + static AlternateCurrency GetAlternateCurrencyEntry( + const std::vector &alternate_currencys, + int alternate_currency_id + ) + { + for (auto &alternate_currency : alternate_currencys) { + if (alternate_currency.id == alternate_currency_id) { + return alternate_currency; + } + } + + return NewEntity(); + } + + static AlternateCurrency FindOne( + int alternate_currency_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + alternate_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int alternate_currency_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + alternate_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + AlternateCurrency alternate_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(alternate_currency_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + alternate_currency_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static AlternateCurrency InsertOne( + AlternateCurrency alternate_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + alternate_currency_entry.id = results.LastInsertedID(); + return alternate_currency_entry; + } + + alternate_currency_entry = NewEntity(); + + return alternate_currency_entry; + } + + static int InsertMany( + std::vector alternate_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &alternate_currency_entry: alternate_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + AlternateCurrency entry{}; + + entry.id = atoi(row[0]); + entry.item_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_auras_repository.h b/common/repositories/base/base_auras_repository.h new file mode 100644 index 000000000..a12523bbd --- /dev/null +++ b/common/repositories/base/base_auras_repository.h @@ -0,0 +1,387 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_AURAS_REPOSITORY_H +#define EQEMU_BASE_AURAS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseAurasRepository { +public: + struct Auras { + int type; + int npc_type; + std::string name; + int spell_id; + int distance; + int aura_type; + int spawn_type; + int movement; + int duration; + int icon; + int cast_time; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "type", + "npc_type", + "name", + "spell_id", + "distance", + "aura_type", + "spawn_type", + "movement", + "duration", + "icon", + "cast_time", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("auras"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Auras NewEntity() + { + Auras entry{}; + + entry.type = 0; + entry.npc_type = 0; + entry.name = ""; + entry.spell_id = 0; + entry.distance = 60; + entry.aura_type = 1; + entry.spawn_type = 0; + entry.movement = 0; + entry.duration = 5400; + entry.icon = -1; + entry.cast_time = 0; + + return entry; + } + + static Auras GetAurasEntry( + const std::vector &aurass, + int auras_id + ) + { + for (auto &auras : aurass) { + if (auras.type == auras_id) { + return auras; + } + } + + return NewEntity(); + } + + static Auras FindOne( + int auras_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + auras_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int auras_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + auras_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Auras auras_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(auras_entry.npc_type)); + update_values.push_back(columns[2] + " = '" + EscapeString(auras_entry.name) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(auras_entry.spell_id)); + update_values.push_back(columns[4] + " = " + std::to_string(auras_entry.distance)); + update_values.push_back(columns[5] + " = " + std::to_string(auras_entry.aura_type)); + update_values.push_back(columns[6] + " = " + std::to_string(auras_entry.spawn_type)); + update_values.push_back(columns[7] + " = " + std::to_string(auras_entry.movement)); + update_values.push_back(columns[8] + " = " + std::to_string(auras_entry.duration)); + update_values.push_back(columns[9] + " = " + std::to_string(auras_entry.icon)); + update_values.push_back(columns[10] + " = " + std::to_string(auras_entry.cast_time)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + auras_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Auras InsertOne( + Auras auras_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(auras_entry.npc_type)); + insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); + insert_values.push_back(std::to_string(auras_entry.spell_id)); + insert_values.push_back(std::to_string(auras_entry.distance)); + insert_values.push_back(std::to_string(auras_entry.aura_type)); + insert_values.push_back(std::to_string(auras_entry.spawn_type)); + insert_values.push_back(std::to_string(auras_entry.movement)); + insert_values.push_back(std::to_string(auras_entry.duration)); + insert_values.push_back(std::to_string(auras_entry.icon)); + insert_values.push_back(std::to_string(auras_entry.cast_time)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + auras_entry.id = results.LastInsertedID(); + return auras_entry; + } + + auras_entry = NewEntity(); + + return auras_entry; + } + + static int InsertMany( + std::vector auras_entries + ) + { + std::vector insert_chunks; + + for (auto &auras_entry: auras_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(auras_entry.npc_type)); + insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); + insert_values.push_back(std::to_string(auras_entry.spell_id)); + insert_values.push_back(std::to_string(auras_entry.distance)); + insert_values.push_back(std::to_string(auras_entry.aura_type)); + insert_values.push_back(std::to_string(auras_entry.spawn_type)); + insert_values.push_back(std::to_string(auras_entry.movement)); + insert_values.push_back(std::to_string(auras_entry.duration)); + insert_values.push_back(std::to_string(auras_entry.icon)); + insert_values.push_back(std::to_string(auras_entry.cast_time)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Auras entry{}; + + entry.type = atoi(row[0]); + entry.npc_type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.spell_id = atoi(row[3]); + entry.distance = atoi(row[4]); + entry.aura_type = atoi(row[5]); + entry.spawn_type = atoi(row[6]); + entry.movement = atoi(row[7]); + entry.duration = atoi(row[8]); + entry.icon = atoi(row[9]); + entry.cast_time = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_AURAS_REPOSITORY_H diff --git a/common/repositories/base/base_banned_ips_repository.h b/common/repositories/base/base_banned_ips_repository.h new file mode 100644 index 000000000..9c0178b09 --- /dev/null +++ b/common/repositories/base/base_banned_ips_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BANNED_IPS_REPOSITORY_H +#define EQEMU_BASE_BANNED_IPS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBannedIpsRepository { +public: + struct BannedIps { + std::string ip_address; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("ip_address"); + } + + static std::vector Columns() + { + return { + "ip_address", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("banned_ips"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BannedIps NewEntity() + { + BannedIps entry{}; + + entry.ip_address = ""; + entry.notes = ""; + + return entry; + } + + static BannedIps GetBannedIpsEntry( + const std::vector &banned_ipss, + int banned_ips_id + ) + { + for (auto &banned_ips : banned_ipss) { + if (banned_ips.ip_address == banned_ips_id) { + return banned_ips; + } + } + + return NewEntity(); + } + + static BannedIps FindOne( + int banned_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + banned_ips_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BannedIps entry{}; + + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int banned_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + banned_ips_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BannedIps banned_ips_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(banned_ips_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + banned_ips_entry.ip_address + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BannedIps InsertOne( + BannedIps banned_ips_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + banned_ips_entry.id = results.LastInsertedID(); + return banned_ips_entry; + } + + banned_ips_entry = NewEntity(); + + return banned_ips_entry; + } + + static int InsertMany( + std::vector banned_ips_entries + ) + { + std::vector insert_chunks; + + for (auto &banned_ips_entry: banned_ips_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BannedIps entry{}; + + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BannedIps entry{}; + + entry.ip_address = row[0] ? row[0] : ""; + entry.notes = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BANNED_IPS_REPOSITORY_H diff --git a/common/repositories/base/base_base_data_repository.h b/common/repositories/base/base_base_data_repository.h new file mode 100644 index 000000000..0cc222895 --- /dev/null +++ b/common/repositories/base/base_base_data_repository.h @@ -0,0 +1,375 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BASE_DATA_REPOSITORY_H +#define EQEMU_BASE_BASE_DATA_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBaseDataRepository { +public: + struct BaseData { + int level; + int class; + float hp; + float mana; + float end; + float unk1; + float unk2; + float hp_fac; + float mana_fac; + float end_fac; + }; + + static std::string PrimaryKey() + { + return std::string("class"); + } + + static std::vector Columns() + { + return { + "level", + "class", + "hp", + "mana", + "end", + "unk1", + "unk2", + "hp_fac", + "mana_fac", + "end_fac", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("base_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BaseData NewEntity() + { + BaseData entry{}; + + entry.level = 0; + entry.class = 0; + entry.hp = 0; + entry.mana = 0; + entry.end = 0; + entry.unk1 = 0; + entry.unk2 = 0; + entry.hp_fac = 0; + entry.mana_fac = 0; + entry.end_fac = 0; + + return entry; + } + + static BaseData GetBaseDataEntry( + const std::vector &base_datas, + int base_data_id + ) + { + for (auto &base_data : base_datas) { + if (base_data.class == base_data_id) { + return base_data; + } + } + + return NewEntity(); + } + + static BaseData FindOne( + int base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + base_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + base_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BaseData base_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(base_data_entry.hp)); + update_values.push_back(columns[3] + " = " + std::to_string(base_data_entry.mana)); + update_values.push_back(columns[4] + " = " + std::to_string(base_data_entry.end)); + update_values.push_back(columns[5] + " = " + std::to_string(base_data_entry.unk1)); + update_values.push_back(columns[6] + " = " + std::to_string(base_data_entry.unk2)); + update_values.push_back(columns[7] + " = " + std::to_string(base_data_entry.hp_fac)); + update_values.push_back(columns[8] + " = " + std::to_string(base_data_entry.mana_fac)); + update_values.push_back(columns[9] + " = " + std::to_string(base_data_entry.end_fac)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + base_data_entry.class + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BaseData InsertOne( + BaseData base_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(base_data_entry.hp)); + insert_values.push_back(std::to_string(base_data_entry.mana)); + insert_values.push_back(std::to_string(base_data_entry.end)); + insert_values.push_back(std::to_string(base_data_entry.unk1)); + insert_values.push_back(std::to_string(base_data_entry.unk2)); + insert_values.push_back(std::to_string(base_data_entry.hp_fac)); + insert_values.push_back(std::to_string(base_data_entry.mana_fac)); + insert_values.push_back(std::to_string(base_data_entry.end_fac)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + base_data_entry.id = results.LastInsertedID(); + return base_data_entry; + } + + base_data_entry = NewEntity(); + + return base_data_entry; + } + + static int InsertMany( + std::vector base_data_entries + ) + { + std::vector insert_chunks; + + for (auto &base_data_entry: base_data_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(base_data_entry.hp)); + insert_values.push_back(std::to_string(base_data_entry.mana)); + insert_values.push_back(std::to_string(base_data_entry.end)); + insert_values.push_back(std::to_string(base_data_entry.unk1)); + insert_values.push_back(std::to_string(base_data_entry.unk2)); + insert_values.push_back(std::to_string(base_data_entry.hp_fac)); + insert_values.push_back(std::to_string(base_data_entry.mana_fac)); + insert_values.push_back(std::to_string(base_data_entry.end_fac)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BaseData entry{}; + + entry.level = atoi(row[0]); + entry.class = atoi(row[1]); + entry.hp = atof(row[2]); + entry.mana = atof(row[3]); + entry.end = atof(row[4]); + entry.unk1 = atof(row[5]); + entry.unk2 = atof(row[6]); + entry.hp_fac = atof(row[7]); + entry.mana_fac = atof(row[8]); + entry.end_fac = atof(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_blocked_spells_repository.h b/common/repositories/base/base_blocked_spells_repository.h new file mode 100644 index 000000000..753fe131d --- /dev/null +++ b/common/repositories/base/base_blocked_spells_repository.h @@ -0,0 +1,396 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H +#define EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBlockedSpellsRepository { +public: + struct BlockedSpells { + int id; + int spellid; + int8 type; + int zoneid; + float x; + float y; + float z; + float x_diff; + float y_diff; + float z_diff; + std::string message; + std::string description; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "spellid", + "type", + "zoneid", + "x", + "y", + "z", + "x_diff", + "y_diff", + "z_diff", + "message", + "description", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("blocked_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BlockedSpells NewEntity() + { + BlockedSpells entry{}; + + entry.id = 0; + entry.spellid = 0; + entry.type = 0; + entry.zoneid = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.x_diff = 0; + entry.y_diff = 0; + entry.z_diff = 0; + entry.message = ""; + entry.description = ""; + + return entry; + } + + static BlockedSpells GetBlockedSpellsEntry( + const std::vector &blocked_spellss, + int blocked_spells_id + ) + { + for (auto &blocked_spells : blocked_spellss) { + if (blocked_spells.id == blocked_spells_id) { + return blocked_spells; + } + } + + return NewEntity(); + } + + static BlockedSpells FindOne( + int blocked_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + blocked_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int blocked_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + blocked_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BlockedSpells blocked_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(blocked_spells_entry.spellid)); + update_values.push_back(columns[2] + " = " + std::to_string(blocked_spells_entry.type)); + update_values.push_back(columns[3] + " = " + std::to_string(blocked_spells_entry.zoneid)); + update_values.push_back(columns[4] + " = " + std::to_string(blocked_spells_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(blocked_spells_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(blocked_spells_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(blocked_spells_entry.x_diff)); + update_values.push_back(columns[8] + " = " + std::to_string(blocked_spells_entry.y_diff)); + update_values.push_back(columns[9] + " = " + std::to_string(blocked_spells_entry.z_diff)); + update_values.push_back(columns[10] + " = '" + EscapeString(blocked_spells_entry.message) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(blocked_spells_entry.description) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + blocked_spells_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BlockedSpells InsertOne( + BlockedSpells blocked_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); + insert_values.push_back(std::to_string(blocked_spells_entry.type)); + insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); + insert_values.push_back(std::to_string(blocked_spells_entry.x)); + insert_values.push_back(std::to_string(blocked_spells_entry.y)); + insert_values.push_back(std::to_string(blocked_spells_entry.z)); + insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + blocked_spells_entry.id = results.LastInsertedID(); + return blocked_spells_entry; + } + + blocked_spells_entry = NewEntity(); + + return blocked_spells_entry; + } + + static int InsertMany( + std::vector blocked_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &blocked_spells_entry: blocked_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); + insert_values.push_back(std::to_string(blocked_spells_entry.type)); + insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); + insert_values.push_back(std::to_string(blocked_spells_entry.x)); + insert_values.push_back(std::to_string(blocked_spells_entry.y)); + insert_values.push_back(std::to_string(blocked_spells_entry.z)); + insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); + insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); + insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BlockedSpells entry{}; + + entry.id = atoi(row[0]); + entry.spellid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.zoneid = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.x_diff = atof(row[7]); + entry.y_diff = atof(row[8]); + entry.z_diff = atof(row[9]); + entry.message = row[10] ? row[10] : ""; + entry.description = row[11] ? row[11] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_books_repository.h b/common/repositories/base/base_books_repository.h new file mode 100644 index 000000000..c8453c680 --- /dev/null +++ b/common/repositories/base/base_books_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BOOKS_REPOSITORY_H +#define EQEMU_BASE_BOOKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBooksRepository { +public: + struct Books { + std::string name; + std::string txtfile; + int language; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "txtfile", + "language", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("books"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Books NewEntity() + { + Books entry{}; + + entry.name = ""; + entry.txtfile = ""; + entry.language = 0; + + return entry; + } + + static Books GetBooksEntry( + const std::vector &bookss, + int books_id + ) + { + for (auto &books : bookss) { + if (books.name == books_id) { + return books; + } + } + + return NewEntity(); + } + + static Books FindOne( + int books_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + books_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Books entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; + entry.language = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int books_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + books_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Books books_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(books_entry.txtfile) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(books_entry.language)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + books_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Books InsertOne( + Books books_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); + insert_values.push_back(std::to_string(books_entry.language)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + books_entry.id = results.LastInsertedID(); + return books_entry; + } + + books_entry = NewEntity(); + + return books_entry; + } + + static int InsertMany( + std::vector books_entries + ) + { + std::vector insert_chunks; + + for (auto &books_entry: books_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); + insert_values.push_back(std::to_string(books_entry.language)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Books entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; + entry.language = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Books entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.txtfile = row[1] ? row[1] : ""; + entry.language = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BOOKS_REPOSITORY_H diff --git a/common/repositories/base/base_bug_reports_repository.h b/common/repositories/base/base_bug_reports_repository.h new file mode 100644 index 000000000..5ec89a015 --- /dev/null +++ b/common/repositories/base/base_bug_reports_repository.h @@ -0,0 +1,576 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BUG_REPORTS_REPOSITORY_H +#define EQEMU_BASE_BUG_REPORTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBugReportsRepository { +public: + struct BugReports { + int id; + std::string zone; + int client_version_id; + std::string client_version_name; + int account_id; + int character_id; + std::string character_name; + int8 reporter_spoof; + int category_id; + std::string category_name; + std::string reporter_name; + std::string ui_path; + float pos_x; + float pos_y; + float pos_z; + int heading; + int time_played; + int target_id; + std::string target_name; + int optional_info_mask; + int8 _can_duplicate; + int8 _crash_bug; + int8 _target_info; + int8 _character_flags; + int8 _unknown_value; + std::string bug_report; + std::string system_info; + std::string report_datetime; + int8 bug_status; + std::string last_review; + std::string last_reviewer; + std::string reviewer_notes; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "client_version_id", + "client_version_name", + "account_id", + "character_id", + "character_name", + "reporter_spoof", + "category_id", + "category_name", + "reporter_name", + "ui_path", + "pos_x", + "pos_y", + "pos_z", + "heading", + "time_played", + "target_id", + "target_name", + "optional_info_mask", + "_can_duplicate", + "_crash_bug", + "_target_info", + "_character_flags", + "_unknown_value", + "bug_report", + "system_info", + "report_datetime", + "bug_status", + "last_review", + "last_reviewer", + "reviewer_notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("bug_reports"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static BugReports NewEntity() + { + BugReports entry{}; + + entry.id = 0; + entry.zone = "Unknown"; + entry.client_version_id = 0; + entry.client_version_name = "Unknown"; + entry.account_id = 0; + entry.character_id = 0; + entry.character_name = "Unknown"; + entry.reporter_spoof = 1; + entry.category_id = 0; + entry.category_name = "Other"; + entry.reporter_name = "Unknown"; + entry.ui_path = "Unknown"; + entry.pos_x = 0; + entry.pos_y = 0; + entry.pos_z = 0; + entry.heading = 0; + entry.time_played = 0; + entry.target_id = 0; + entry.target_name = "Unknown"; + entry.optional_info_mask = 0; + entry._can_duplicate = 0; + entry._crash_bug = 0; + entry._target_info = 0; + entry._character_flags = 0; + entry._unknown_value = 0; + entry.bug_report = ""; + entry.system_info = ""; + entry.report_datetime = current_timestamp(); + entry.bug_status = 0; + entry.last_review = current_timestamp(); + entry.last_reviewer = "None"; + entry.reviewer_notes = ""; + + return entry; + } + + static BugReports GetBugReportsEntry( + const std::vector &bug_reportss, + int bug_reports_id + ) + { + for (auto &bug_reports : bug_reportss) { + if (bug_reports.id == bug_reports_id) { + return bug_reports; + } + } + + return NewEntity(); + } + + static BugReports FindOne( + int bug_reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + bug_reports_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3] ? row[3] : ""; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6] ? row[6] : ""; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18] ? row[18] : ""; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int bug_reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + bug_reports_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + BugReports bug_reports_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(bug_reports_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(bug_reports_entry.client_version_id)); + update_values.push_back(columns[3] + " = '" + EscapeString(bug_reports_entry.client_version_name) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(bug_reports_entry.account_id)); + update_values.push_back(columns[5] + " = " + std::to_string(bug_reports_entry.character_id)); + update_values.push_back(columns[6] + " = '" + EscapeString(bug_reports_entry.character_name) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(bug_reports_entry.reporter_spoof)); + update_values.push_back(columns[8] + " = " + std::to_string(bug_reports_entry.category_id)); + update_values.push_back(columns[9] + " = '" + EscapeString(bug_reports_entry.category_name) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(bug_reports_entry.reporter_name) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(bug_reports_entry.ui_path) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(bug_reports_entry.pos_x)); + update_values.push_back(columns[13] + " = " + std::to_string(bug_reports_entry.pos_y)); + update_values.push_back(columns[14] + " = " + std::to_string(bug_reports_entry.pos_z)); + update_values.push_back(columns[15] + " = " + std::to_string(bug_reports_entry.heading)); + update_values.push_back(columns[16] + " = " + std::to_string(bug_reports_entry.time_played)); + update_values.push_back(columns[17] + " = " + std::to_string(bug_reports_entry.target_id)); + update_values.push_back(columns[18] + " = '" + EscapeString(bug_reports_entry.target_name) + "'"); + update_values.push_back(columns[19] + " = " + std::to_string(bug_reports_entry.optional_info_mask)); + update_values.push_back(columns[20] + " = " + std::to_string(bug_reports_entry._can_duplicate)); + update_values.push_back(columns[21] + " = " + std::to_string(bug_reports_entry._crash_bug)); + update_values.push_back(columns[22] + " = " + std::to_string(bug_reports_entry._target_info)); + update_values.push_back(columns[23] + " = " + std::to_string(bug_reports_entry._character_flags)); + update_values.push_back(columns[24] + " = " + std::to_string(bug_reports_entry._unknown_value)); + update_values.push_back(columns[25] + " = '" + EscapeString(bug_reports_entry.bug_report) + "'"); + update_values.push_back(columns[26] + " = '" + EscapeString(bug_reports_entry.system_info) + "'"); + update_values.push_back(columns[27] + " = '" + EscapeString(bug_reports_entry.report_datetime) + "'"); + update_values.push_back(columns[28] + " = " + std::to_string(bug_reports_entry.bug_status)); + update_values.push_back(columns[29] + " = '" + EscapeString(bug_reports_entry.last_review) + "'"); + update_values.push_back(columns[30] + " = '" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + update_values.push_back(columns[31] + " = '" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + bug_reports_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static BugReports InsertOne( + BugReports bug_reports_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.account_id)); + insert_values.push_back(std::to_string(bug_reports_entry.character_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); + insert_values.push_back(std::to_string(bug_reports_entry.category_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); + insert_values.push_back(std::to_string(bug_reports_entry.heading)); + insert_values.push_back(std::to_string(bug_reports_entry.time_played)); + insert_values.push_back(std::to_string(bug_reports_entry.target_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); + insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); + insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); + insert_values.push_back(std::to_string(bug_reports_entry._target_info)); + insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); + insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + bug_reports_entry.id = results.LastInsertedID(); + return bug_reports_entry; + } + + bug_reports_entry = NewEntity(); + + return bug_reports_entry; + } + + static int InsertMany( + std::vector bug_reports_entries + ) + { + std::vector insert_chunks; + + for (auto &bug_reports_entry: bug_reports_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.account_id)); + insert_values.push_back(std::to_string(bug_reports_entry.character_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); + insert_values.push_back(std::to_string(bug_reports_entry.category_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); + insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); + insert_values.push_back(std::to_string(bug_reports_entry.heading)); + insert_values.push_back(std::to_string(bug_reports_entry.time_played)); + insert_values.push_back(std::to_string(bug_reports_entry.target_id)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); + insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); + insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); + insert_values.push_back(std::to_string(bug_reports_entry._target_info)); + insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); + insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); + insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); + insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3] ? row[3] : ""; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6] ? row[6] : ""; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18] ? row[18] : ""; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + BugReports entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.client_version_id = atoi(row[2]); + entry.client_version_name = row[3] ? row[3] : ""; + entry.account_id = atoi(row[4]); + entry.character_id = atoi(row[5]); + entry.character_name = row[6] ? row[6] : ""; + entry.reporter_spoof = atoi(row[7]); + entry.category_id = atoi(row[8]); + entry.category_name = row[9] ? row[9] : ""; + entry.reporter_name = row[10] ? row[10] : ""; + entry.ui_path = row[11] ? row[11] : ""; + entry.pos_x = atof(row[12]); + entry.pos_y = atof(row[13]); + entry.pos_z = atof(row[14]); + entry.heading = atoi(row[15]); + entry.time_played = atoi(row[16]); + entry.target_id = atoi(row[17]); + entry.target_name = row[18] ? row[18] : ""; + entry.optional_info_mask = atoi(row[19]); + entry._can_duplicate = atoi(row[20]); + entry._crash_bug = atoi(row[21]); + entry._target_info = atoi(row[22]); + entry._character_flags = atoi(row[23]); + entry._unknown_value = atoi(row[24]); + entry.bug_report = row[25] ? row[25] : ""; + entry.system_info = row[26] ? row[26] : ""; + entry.report_datetime = row[27] ? row[27] : ""; + entry.bug_status = atoi(row[28]); + entry.last_review = row[29] ? row[29] : ""; + entry.last_reviewer = row[30] ? row[30] : ""; + entry.reviewer_notes = row[31] ? row[31] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BUG_REPORTS_REPOSITORY_H diff --git a/common/repositories/base/base_bugs_repository.h b/common/repositories/base/base_bugs_repository.h new file mode 100644 index 000000000..08d378271 --- /dev/null +++ b/common/repositories/base/base_bugs_repository.h @@ -0,0 +1,405 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BUGS_REPOSITORY_H +#define EQEMU_BASE_BUGS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBugsRepository { +public: + struct Bugs { + int id; + std::string zone; + std::string name; + std::string ui; + float x; + float y; + float z; + std::string type; + int8 flag; + std::string target; + std::string bug; + std::string date; + int8 status; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "name", + "ui", + "x", + "y", + "z", + "type", + "flag", + "target", + "bug", + "date", + "status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("bugs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Bugs NewEntity() + { + Bugs entry{}; + + entry.id = 0; + entry.zone = ""; + entry.name = ""; + entry.ui = ""; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.type = ""; + entry.flag = 0; + entry.target = ""; + entry.bug = ""; + entry.date = 0; + entry.status = 0; + + return entry; + } + + static Bugs GetBugsEntry( + const std::vector &bugss, + int bugs_id + ) + { + for (auto &bugs : bugss) { + if (bugs.id == bugs_id) { + return bugs; + } + } + + return NewEntity(); + } + + static Bugs FindOne( + int bugs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + bugs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7] ? row[7] : ""; + entry.flag = atoi(row[8]); + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; + entry.status = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int bugs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + bugs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Bugs bugs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(bugs_entry.zone) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(bugs_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(bugs_entry.ui) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(bugs_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(bugs_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(bugs_entry.z)); + update_values.push_back(columns[7] + " = '" + EscapeString(bugs_entry.type) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(bugs_entry.flag)); + update_values.push_back(columns[9] + " = '" + EscapeString(bugs_entry.target) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(bugs_entry.bug) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(bugs_entry.date) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(bugs_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + bugs_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Bugs InsertOne( + Bugs bugs_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); + insert_values.push_back(std::to_string(bugs_entry.x)); + insert_values.push_back(std::to_string(bugs_entry.y)); + insert_values.push_back(std::to_string(bugs_entry.z)); + insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); + insert_values.push_back(std::to_string(bugs_entry.flag)); + insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); + insert_values.push_back(std::to_string(bugs_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + bugs_entry.id = results.LastInsertedID(); + return bugs_entry; + } + + bugs_entry = NewEntity(); + + return bugs_entry; + } + + static int InsertMany( + std::vector bugs_entries + ) + { + std::vector insert_chunks; + + for (auto &bugs_entry: bugs_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); + insert_values.push_back(std::to_string(bugs_entry.x)); + insert_values.push_back(std::to_string(bugs_entry.y)); + insert_values.push_back(std::to_string(bugs_entry.z)); + insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); + insert_values.push_back(std::to_string(bugs_entry.flag)); + insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); + insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); + insert_values.push_back(std::to_string(bugs_entry.status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7] ? row[7] : ""; + entry.flag = atoi(row[8]); + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; + entry.status = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Bugs entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.ui = row[3] ? row[3] : ""; + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.type = row[7] ? row[7] : ""; + entry.flag = atoi(row[8]); + entry.target = row[9] ? row[9] : ""; + entry.bug = row[10] ? row[10] : ""; + entry.date = row[11] ? row[11] : ""; + entry.status = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BUGS_REPOSITORY_H diff --git a/common/repositories/base/base_buyer_repository.h b/common/repositories/base/base_buyer_repository.h new file mode 100644 index 000000000..2752abe23 --- /dev/null +++ b/common/repositories/base/base_buyer_repository.h @@ -0,0 +1,339 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_BUYER_REPOSITORY_H +#define EQEMU_BASE_BUYER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseBuyerRepository { +public: + struct Buyer { + int charid; + int buyslot; + int itemid; + std::string itemname; + int quantity; + int price; + }; + + static std::string PrimaryKey() + { + return std::string("buyslot"); + } + + static std::vector Columns() + { + return { + "charid", + "buyslot", + "itemid", + "itemname", + "quantity", + "price", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("buyer"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Buyer NewEntity() + { + Buyer entry{}; + + entry.charid = 0; + entry.buyslot = 0; + entry.itemid = 0; + entry.itemname = ""; + entry.quantity = 0; + entry.price = 0; + + return entry; + } + + static Buyer GetBuyerEntry( + const std::vector &buyers, + int buyer_id + ) + { + for (auto &buyer : buyers) { + if (buyer.buyslot == buyer_id) { + return buyer; + } + } + + return NewEntity(); + } + + static Buyer FindOne( + int buyer_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + buyer_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3] ? row[3] : ""; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int buyer_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + buyer_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Buyer buyer_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(buyer_entry.itemid)); + update_values.push_back(columns[3] + " = '" + EscapeString(buyer_entry.itemname) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(buyer_entry.quantity)); + update_values.push_back(columns[5] + " = " + std::to_string(buyer_entry.price)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + buyer_entry.buyslot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Buyer InsertOne( + Buyer buyer_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(buyer_entry.itemid)); + insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); + insert_values.push_back(std::to_string(buyer_entry.quantity)); + insert_values.push_back(std::to_string(buyer_entry.price)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + buyer_entry.id = results.LastInsertedID(); + return buyer_entry; + } + + buyer_entry = NewEntity(); + + return buyer_entry; + } + + static int InsertMany( + std::vector buyer_entries + ) + { + std::vector insert_chunks; + + for (auto &buyer_entry: buyer_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(buyer_entry.itemid)); + insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); + insert_values.push_back(std::to_string(buyer_entry.quantity)); + insert_values.push_back(std::to_string(buyer_entry.price)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3] ? row[3] : ""; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Buyer entry{}; + + entry.charid = atoi(row[0]); + entry.buyslot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.itemname = row[3] ? row[3] : ""; + entry.quantity = atoi(row[4]); + entry.price = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_BUYER_REPOSITORY_H diff --git a/common/repositories/base/base_char_create_combinations_repository.h b/common/repositories/base/base_char_create_combinations_repository.h new file mode 100644 index 000000000..d333c7d63 --- /dev/null +++ b/common/repositories/base/base_char_create_combinations_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H +#define EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharCreateCombinationsRepository { +public: + struct CharCreateCombinations { + int allocation_id; + int race; + int class; + int deity; + int start_zone; + int expansions_req; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("start_zone"); + } + + static std::vector Columns() + { + return { + "allocation_id", + "race", + "class", + "deity", + "start_zone", + "expansions_req", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_create_combinations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharCreateCombinations NewEntity() + { + CharCreateCombinations entry{}; + + entry.allocation_id = 0; + entry.race = 0; + entry.class = 0; + entry.deity = 0; + entry.start_zone = 0; + entry.expansions_req = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static CharCreateCombinations GetCharCreateCombinationsEntry( + const std::vector &char_create_combinationss, + int char_create_combinations_id + ) + { + for (auto &char_create_combinations : char_create_combinationss) { + if (char_create_combinations.start_zone == char_create_combinations_id) { + return char_create_combinations; + } + } + + return NewEntity(); + } + + static CharCreateCombinations FindOne( + int char_create_combinations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_create_combinations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_create_combinations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_create_combinations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharCreateCombinations char_create_combinations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(char_create_combinations_entry.allocation_id)); + update_values.push_back(columns[5] + " = " + std::to_string(char_create_combinations_entry.expansions_req)); + update_values.push_back(columns[6] + " = " + std::to_string(char_create_combinations_entry.min_expansion)); + update_values.push_back(columns[7] + " = " + std::to_string(char_create_combinations_entry.max_expansion)); + update_values.push_back(columns[8] + " = '" + EscapeString(char_create_combinations_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_create_combinations_entry.start_zone + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharCreateCombinations InsertOne( + CharCreateCombinations char_create_combinations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); + insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); + insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(char_create_combinations_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_create_combinations_entry.id = results.LastInsertedID(); + return char_create_combinations_entry; + } + + char_create_combinations_entry = NewEntity(); + + return char_create_combinations_entry; + } + + static int InsertMany( + std::vector char_create_combinations_entries + ) + { + std::vector insert_chunks; + + for (auto &char_create_combinations_entry: char_create_combinations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); + insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); + insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(char_create_combinations_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreateCombinations entry{}; + + entry.allocation_id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deity = atoi(row[3]); + entry.start_zone = atoi(row[4]); + entry.expansions_req = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_char_create_point_allocations_repository.h b/common/repositories/base/base_char_create_point_allocations_repository.h new file mode 100644 index 000000000..6b97292d1 --- /dev/null +++ b/common/repositories/base/base_char_create_point_allocations_repository.h @@ -0,0 +1,423 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H +#define EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharCreatePointAllocationsRepository { +public: + struct CharCreatePointAllocations { + int id; + int base_str; + int base_sta; + int base_dex; + int base_agi; + int base_int; + int base_wis; + int base_cha; + int alloc_str; + int alloc_sta; + int alloc_dex; + int alloc_agi; + int alloc_int; + int alloc_wis; + int alloc_cha; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "base_str", + "base_sta", + "base_dex", + "base_agi", + "base_int", + "base_wis", + "base_cha", + "alloc_str", + "alloc_sta", + "alloc_dex", + "alloc_agi", + "alloc_int", + "alloc_wis", + "alloc_cha", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_create_point_allocations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharCreatePointAllocations NewEntity() + { + CharCreatePointAllocations entry{}; + + entry.id = 0; + entry.base_str = 0; + entry.base_sta = 0; + entry.base_dex = 0; + entry.base_agi = 0; + entry.base_int = 0; + entry.base_wis = 0; + entry.base_cha = 0; + entry.alloc_str = 0; + entry.alloc_sta = 0; + entry.alloc_dex = 0; + entry.alloc_agi = 0; + entry.alloc_int = 0; + entry.alloc_wis = 0; + entry.alloc_cha = 0; + + return entry; + } + + static CharCreatePointAllocations GetCharCreatePointAllocationsEntry( + const std::vector &char_create_point_allocationss, + int char_create_point_allocations_id + ) + { + for (auto &char_create_point_allocations : char_create_point_allocationss) { + if (char_create_point_allocations.id == char_create_point_allocations_id) { + return char_create_point_allocations; + } + } + + return NewEntity(); + } + + static CharCreatePointAllocations FindOne( + int char_create_point_allocations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_create_point_allocations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_create_point_allocations_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_create_point_allocations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharCreatePointAllocations char_create_point_allocations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(char_create_point_allocations_entry.base_str)); + update_values.push_back(columns[2] + " = " + std::to_string(char_create_point_allocations_entry.base_sta)); + update_values.push_back(columns[3] + " = " + std::to_string(char_create_point_allocations_entry.base_dex)); + update_values.push_back(columns[4] + " = " + std::to_string(char_create_point_allocations_entry.base_agi)); + update_values.push_back(columns[5] + " = " + std::to_string(char_create_point_allocations_entry.base_int)); + update_values.push_back(columns[6] + " = " + std::to_string(char_create_point_allocations_entry.base_wis)); + update_values.push_back(columns[7] + " = " + std::to_string(char_create_point_allocations_entry.base_cha)); + update_values.push_back(columns[8] + " = " + std::to_string(char_create_point_allocations_entry.alloc_str)); + update_values.push_back(columns[9] + " = " + std::to_string(char_create_point_allocations_entry.alloc_sta)); + update_values.push_back(columns[10] + " = " + std::to_string(char_create_point_allocations_entry.alloc_dex)); + update_values.push_back(columns[11] + " = " + std::to_string(char_create_point_allocations_entry.alloc_agi)); + update_values.push_back(columns[12] + " = " + std::to_string(char_create_point_allocations_entry.alloc_int)); + update_values.push_back(columns[13] + " = " + std::to_string(char_create_point_allocations_entry.alloc_wis)); + update_values.push_back(columns[14] + " = " + std::to_string(char_create_point_allocations_entry.alloc_cha)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_create_point_allocations_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharCreatePointAllocations InsertOne( + CharCreatePointAllocations char_create_point_allocations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_create_point_allocations_entry.id = results.LastInsertedID(); + return char_create_point_allocations_entry; + } + + char_create_point_allocations_entry = NewEntity(); + + return char_create_point_allocations_entry; + } + + static int InsertMany( + std::vector char_create_point_allocations_entries + ) + { + std::vector insert_chunks; + + for (auto &char_create_point_allocations_entry: char_create_point_allocations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); + insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharCreatePointAllocations entry{}; + + entry.id = atoi(row[0]); + entry.base_str = atoi(row[1]); + entry.base_sta = atoi(row[2]); + entry.base_dex = atoi(row[3]); + entry.base_agi = atoi(row[4]); + entry.base_int = atoi(row[5]); + entry.base_wis = atoi(row[6]); + entry.base_cha = atoi(row[7]); + entry.alloc_str = atoi(row[8]); + entry.alloc_sta = atoi(row[9]); + entry.alloc_dex = atoi(row[10]); + entry.alloc_agi = atoi(row[11]); + entry.alloc_int = atoi(row[12]); + entry.alloc_wis = atoi(row[13]); + entry.alloc_cha = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_char_recipe_list_repository.h b/common/repositories/base/base_char_recipe_list_repository.h new file mode 100644 index 000000000..5ad9aa85a --- /dev/null +++ b/common/repositories/base/base_char_recipe_list_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H +#define EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharRecipeListRepository { +public: + struct CharRecipeList { + int char_id; + int recipe_id; + int madecount; + }; + + static std::string PrimaryKey() + { + return std::string("recipe_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "recipe_id", + "madecount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("char_recipe_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharRecipeList NewEntity() + { + CharRecipeList entry{}; + + entry.char_id = 0; + entry.recipe_id = 0; + entry.madecount = 0; + + return entry; + } + + static CharRecipeList GetCharRecipeListEntry( + const std::vector &char_recipe_lists, + int char_recipe_list_id + ) + { + for (auto &char_recipe_list : char_recipe_lists) { + if (char_recipe_list.recipe_id == char_recipe_list_id) { + return char_recipe_list; + } + } + + return NewEntity(); + } + + static CharRecipeList FindOne( + int char_recipe_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + char_recipe_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int char_recipe_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + char_recipe_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharRecipeList char_recipe_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(char_recipe_list_entry.madecount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + char_recipe_list_entry.recipe_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharRecipeList InsertOne( + CharRecipeList char_recipe_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + char_recipe_list_entry.id = results.LastInsertedID(); + return char_recipe_list_entry; + } + + char_recipe_list_entry = NewEntity(); + + return char_recipe_list_entry; + } + + static int InsertMany( + std::vector char_recipe_list_entries + ) + { + std::vector insert_chunks; + + for (auto &char_recipe_list_entry: char_recipe_list_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharRecipeList entry{}; + + entry.char_id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.madecount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_character_activities_repository.h b/common/repositories/base/base_character_activities_repository.h new file mode 100644 index 000000000..f535c7d41 --- /dev/null +++ b/common/repositories/base/base_character_activities_repository.h @@ -0,0 +1,327 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterActivitiesRepository { +public: + struct CharacterActivities { + int charid; + int taskid; + int activityid; + int donecount; + int8 completed; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "charid", + "taskid", + "activityid", + "donecount", + "completed", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_activities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterActivities NewEntity() + { + CharacterActivities entry{}; + + entry.charid = 0; + entry.taskid = 0; + entry.activityid = 0; + entry.donecount = 0; + entry.completed = 0; + + return entry; + } + + static CharacterActivities GetCharacterActivitiesEntry( + const std::vector &character_activitiess, + int character_activities_id + ) + { + for (auto &character_activities : character_activitiess) { + if (character_activities.activityid == character_activities_id) { + return character_activities; + } + } + + return NewEntity(); + } + + static CharacterActivities FindOne( + int character_activities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_activities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_activities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_activities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterActivities character_activities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_activities_entry.donecount)); + update_values.push_back(columns[4] + " = " + std::to_string(character_activities_entry.completed)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_activities_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterActivities InsertOne( + CharacterActivities character_activities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_activities_entry.donecount)); + insert_values.push_back(std::to_string(character_activities_entry.completed)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_activities_entry.id = results.LastInsertedID(); + return character_activities_entry; + } + + character_activities_entry = NewEntity(); + + return character_activities_entry; + } + + static int InsertMany( + std::vector character_activities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_activities_entry: character_activities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_activities_entry.donecount)); + insert_values.push_back(std::to_string(character_activities_entry.completed)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterActivities entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.activityid = atoi(row[2]); + entry.donecount = atoi(row[3]); + entry.completed = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_alt_currency_repository.h b/common/repositories/base/base_character_alt_currency_repository.h new file mode 100644 index 000000000..0542f3f87 --- /dev/null +++ b/common/repositories/base/base_character_alt_currency_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_ALT_CURRENCY_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_ALT_CURRENCY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterAltCurrencyRepository { +public: + struct CharacterAltCurrency { + int char_id; + int currency_id; + int amount; + }; + + static std::string PrimaryKey() + { + return std::string("currency_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "currency_id", + "amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_alt_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAltCurrency NewEntity() + { + CharacterAltCurrency entry{}; + + entry.char_id = 0; + entry.currency_id = 0; + entry.amount = 0; + + return entry; + } + + static CharacterAltCurrency GetCharacterAltCurrencyEntry( + const std::vector &character_alt_currencys, + int character_alt_currency_id + ) + { + for (auto &character_alt_currency : character_alt_currencys) { + if (character_alt_currency.currency_id == character_alt_currency_id) { + return character_alt_currency; + } + } + + return NewEntity(); + } + + static CharacterAltCurrency FindOne( + int character_alt_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_alt_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_alt_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_alt_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAltCurrency character_alt_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_alt_currency_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_alt_currency_entry.currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAltCurrency InsertOne( + CharacterAltCurrency character_alt_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_alt_currency_entry.id = results.LastInsertedID(); + return character_alt_currency_entry; + } + + character_alt_currency_entry = NewEntity(); + + return character_alt_currency_entry; + } + + static int InsertMany( + std::vector character_alt_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &character_alt_currency_entry: character_alt_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAltCurrency entry{}; + + entry.char_id = atoi(row[0]); + entry.currency_id = atoi(row[1]); + entry.amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_ALT_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_character_alternate_abilities_repository.h b/common/repositories/base/base_character_alternate_abilities_repository.h new file mode 100644 index 000000000..0974e5d0c --- /dev/null +++ b/common/repositories/base/base_character_alternate_abilities_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterAlternateAbilitiesRepository { +public: + struct CharacterAlternateAbilities { + int id; + int16 aa_id; + int16 aa_value; + int16 charges; + }; + + static std::string PrimaryKey() + { + return std::string("aa_id"); + } + + static std::vector Columns() + { + return { + "id", + "aa_id", + "aa_value", + "charges", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_alternate_abilities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAlternateAbilities NewEntity() + { + CharacterAlternateAbilities entry{}; + + entry.id = 0; + entry.aa_id = 0; + entry.aa_value = 0; + entry.charges = 0; + + return entry; + } + + static CharacterAlternateAbilities GetCharacterAlternateAbilitiesEntry( + const std::vector &character_alternate_abilitiess, + int character_alternate_abilities_id + ) + { + for (auto &character_alternate_abilities : character_alternate_abilitiess) { + if (character_alternate_abilities.aa_id == character_alternate_abilities_id) { + return character_alternate_abilities; + } + } + + return NewEntity(); + } + + static CharacterAlternateAbilities FindOne( + int character_alternate_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_alternate_abilities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_alternate_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_alternate_abilities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAlternateAbilities character_alternate_abilities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_alternate_abilities_entry.aa_value)); + update_values.push_back(columns[3] + " = " + std::to_string(character_alternate_abilities_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_alternate_abilities_entry.aa_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAlternateAbilities InsertOne( + CharacterAlternateAbilities character_alternate_abilities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_alternate_abilities_entry.id = results.LastInsertedID(); + return character_alternate_abilities_entry; + } + + character_alternate_abilities_entry = NewEntity(); + + return character_alternate_abilities_entry; + } + + static int InsertMany( + std::vector character_alternate_abilities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_alternate_abilities_entry: character_alternate_abilities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAlternateAbilities entry{}; + + entry.id = atoi(row[0]); + entry.aa_id = atoi(row[1]); + entry.aa_value = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_auras_repository.h b/common/repositories/base/base_character_auras_repository.h new file mode 100644 index 000000000..41514e158 --- /dev/null +++ b/common/repositories/base/base_character_auras_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_AURAS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_AURAS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterAurasRepository { +public: + struct CharacterAuras { + int id; + int8 slot; + int spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_auras"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterAuras NewEntity() + { + CharacterAuras entry{}; + + entry.id = 0; + entry.slot = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterAuras GetCharacterAurasEntry( + const std::vector &character_aurass, + int character_auras_id + ) + { + for (auto &character_auras : character_aurass) { + if (character_auras.slot == character_auras_id) { + return character_auras; + } + } + + return NewEntity(); + } + + static CharacterAuras FindOne( + int character_auras_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_auras_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_auras_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_auras_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterAuras character_auras_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_auras_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_auras_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterAuras InsertOne( + CharacterAuras character_auras_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_auras_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_auras_entry.id = results.LastInsertedID(); + return character_auras_entry; + } + + character_auras_entry = NewEntity(); + + return character_auras_entry; + } + + static int InsertMany( + std::vector character_auras_entries + ) + { + std::vector insert_chunks; + + for (auto &character_auras_entry: character_auras_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_auras_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterAuras entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_AURAS_REPOSITORY_H diff --git a/common/repositories/base/base_character_bandolier_repository.h b/common/repositories/base/base_character_bandolier_repository.h new file mode 100644 index 000000000..0b9ef5ccc --- /dev/null +++ b/common/repositories/base/base_character_bandolier_repository.h @@ -0,0 +1,336 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_BANDOLIER_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_BANDOLIER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterBandolierRepository { +public: + struct CharacterBandolier { + int id; + int8 bandolier_id; + int8 bandolier_slot; + int item_id; + int icon; + std::string bandolier_name; + }; + + static std::string PrimaryKey() + { + return std::string("bandolier_slot"); + } + + static std::vector Columns() + { + return { + "id", + "bandolier_id", + "bandolier_slot", + "item_id", + "icon", + "bandolier_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_bandolier"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBandolier NewEntity() + { + CharacterBandolier entry{}; + + entry.id = 0; + entry.bandolier_id = 0; + entry.bandolier_slot = 0; + entry.item_id = 0; + entry.icon = 0; + entry.bandolier_name = "0"; + + return entry; + } + + static CharacterBandolier GetCharacterBandolierEntry( + const std::vector &character_bandoliers, + int character_bandolier_id + ) + { + for (auto &character_bandolier : character_bandoliers) { + if (character_bandolier.bandolier_slot == character_bandolier_id) { + return character_bandolier; + } + } + + return NewEntity(); + } + + static CharacterBandolier FindOne( + int character_bandolier_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_bandolier_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5] ? row[5] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_bandolier_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_bandolier_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBandolier character_bandolier_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_bandolier_entry.item_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_bandolier_entry.icon)); + update_values.push_back(columns[5] + " = '" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_bandolier_entry.bandolier_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBandolier InsertOne( + CharacterBandolier character_bandolier_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.icon)); + insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_bandolier_entry.id = results.LastInsertedID(); + return character_bandolier_entry; + } + + character_bandolier_entry = NewEntity(); + + return character_bandolier_entry; + } + + static int InsertMany( + std::vector character_bandolier_entries + ) + { + std::vector insert_chunks; + + for (auto &character_bandolier_entry: character_bandolier_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.icon)); + insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBandolier entry{}; + + entry.id = atoi(row[0]); + entry.bandolier_id = atoi(row[1]); + entry.bandolier_slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + entry.icon = atoi(row[4]); + entry.bandolier_name = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_BANDOLIER_REPOSITORY_H diff --git a/common/repositories/base/base_character_bind_repository.h b/common/repositories/base/base_character_bind_repository.h new file mode 100644 index 000000000..a68ab33b9 --- /dev/null +++ b/common/repositories/base/base_character_bind_repository.h @@ -0,0 +1,357 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_BIND_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_BIND_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterBindRepository { +public: + struct CharacterBind { + int id; + int slot; + int16 zone_id; + int instance_id; + float x; + float y; + float z; + float heading; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "zone_id", + "instance_id", + "x", + "y", + "z", + "heading", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_bind"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBind NewEntity() + { + CharacterBind entry{}; + + entry.id = 0; + entry.slot = 0; + entry.zone_id = 0; + entry.instance_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + + return entry; + } + + static CharacterBind GetCharacterBindEntry( + const std::vector &character_binds, + int character_bind_id + ) + { + for (auto &character_bind : character_binds) { + if (character_bind.slot == character_bind_id) { + return character_bind; + } + } + + return NewEntity(); + } + + static CharacterBind FindOne( + int character_bind_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_bind_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_bind_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_bind_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBind character_bind_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_bind_entry.zone_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_bind_entry.instance_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_bind_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(character_bind_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(character_bind_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(character_bind_entry.heading)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_bind_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBind InsertOne( + CharacterBind character_bind_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bind_entry.zone_id)); + insert_values.push_back(std::to_string(character_bind_entry.instance_id)); + insert_values.push_back(std::to_string(character_bind_entry.x)); + insert_values.push_back(std::to_string(character_bind_entry.y)); + insert_values.push_back(std::to_string(character_bind_entry.z)); + insert_values.push_back(std::to_string(character_bind_entry.heading)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_bind_entry.id = results.LastInsertedID(); + return character_bind_entry; + } + + character_bind_entry = NewEntity(); + + return character_bind_entry; + } + + static int InsertMany( + std::vector character_bind_entries + ) + { + std::vector insert_chunks; + + for (auto &character_bind_entry: character_bind_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_bind_entry.zone_id)); + insert_values.push_back(std::to_string(character_bind_entry.instance_id)); + insert_values.push_back(std::to_string(character_bind_entry.x)); + insert_values.push_back(std::to_string(character_bind_entry.y)); + insert_values.push_back(std::to_string(character_bind_entry.z)); + insert_values.push_back(std::to_string(character_bind_entry.heading)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBind entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.zone_id = atoi(row[2]); + entry.instance_id = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_BIND_REPOSITORY_H diff --git a/common/repositories/base/base_character_buffs_repository.h b/common/repositories/base/base_character_buffs_repository.h new file mode 100644 index 000000000..57b35a5c4 --- /dev/null +++ b/common/repositories/base/base_character_buffs_repository.h @@ -0,0 +1,438 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_BUFFS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_BUFFS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterBuffsRepository { +public: + struct CharacterBuffs { + int character_id; + int8 slot_id; + int16 spell_id; + int8 caster_level; + std::string caster_name; + int ticsremaining; + int counters; + int numhits; + int melee_rune; + int magic_rune; + int8 persistent; + int dot_rune; + int caston_x; + int caston_y; + int caston_z; + int ExtraDIChance; + int instrument_mod; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "character_id", + "slot_id", + "spell_id", + "caster_level", + "caster_name", + "ticsremaining", + "counters", + "numhits", + "melee_rune", + "magic_rune", + "persistent", + "dot_rune", + "caston_x", + "caston_y", + "caston_z", + "ExtraDIChance", + "instrument_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_buffs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterBuffs NewEntity() + { + CharacterBuffs entry{}; + + entry.character_id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + entry.caster_level = 0; + entry.caster_name = ""; + entry.ticsremaining = 0; + entry.counters = 0; + entry.numhits = 0; + entry.melee_rune = 0; + entry.magic_rune = 0; + entry.persistent = 0; + entry.dot_rune = 0; + entry.caston_x = 0; + entry.caston_y = 0; + entry.caston_z = 0; + entry.ExtraDIChance = 0; + entry.instrument_mod = 10; + + return entry; + } + + static CharacterBuffs GetCharacterBuffsEntry( + const std::vector &character_buffss, + int character_buffs_id + ) + { + for (auto &character_buffs : character_buffss) { + if (character_buffs.slot_id == character_buffs_id) { + return character_buffs; + } + } + + return NewEntity(); + } + + static CharacterBuffs FindOne( + int character_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_buffs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4] ? row[4] : ""; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_buffs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterBuffs character_buffs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_buffs_entry.spell_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_buffs_entry.caster_level)); + update_values.push_back(columns[4] + " = '" + EscapeString(character_buffs_entry.caster_name) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(character_buffs_entry.ticsremaining)); + update_values.push_back(columns[6] + " = " + std::to_string(character_buffs_entry.counters)); + update_values.push_back(columns[7] + " = " + std::to_string(character_buffs_entry.numhits)); + update_values.push_back(columns[8] + " = " + std::to_string(character_buffs_entry.melee_rune)); + update_values.push_back(columns[9] + " = " + std::to_string(character_buffs_entry.magic_rune)); + update_values.push_back(columns[10] + " = " + std::to_string(character_buffs_entry.persistent)); + update_values.push_back(columns[11] + " = " + std::to_string(character_buffs_entry.dot_rune)); + update_values.push_back(columns[12] + " = " + std::to_string(character_buffs_entry.caston_x)); + update_values.push_back(columns[13] + " = " + std::to_string(character_buffs_entry.caston_y)); + update_values.push_back(columns[14] + " = " + std::to_string(character_buffs_entry.caston_z)); + update_values.push_back(columns[15] + " = " + std::to_string(character_buffs_entry.ExtraDIChance)); + update_values.push_back(columns[16] + " = " + std::to_string(character_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_buffs_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterBuffs InsertOne( + CharacterBuffs character_buffs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); + insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.persistent)); + insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); + insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); + insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_buffs_entry.id = results.LastInsertedID(); + return character_buffs_entry; + } + + character_buffs_entry = NewEntity(); + + return character_buffs_entry; + } + + static int InsertMany( + std::vector character_buffs_entries + ) + { + std::vector insert_chunks; + + for (auto &character_buffs_entry: character_buffs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); + insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.persistent)); + insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); + insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); + insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); + insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4] ? row[4] : ""; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterBuffs entry{}; + + entry.character_id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.caster_level = atoi(row[3]); + entry.caster_name = row[4] ? row[4] : ""; + entry.ticsremaining = atoi(row[5]); + entry.counters = atoi(row[6]); + entry.numhits = atoi(row[7]); + entry.melee_rune = atoi(row[8]); + entry.magic_rune = atoi(row[9]); + entry.persistent = atoi(row[10]); + entry.dot_rune = atoi(row[11]); + entry.caston_x = atoi(row[12]); + entry.caston_y = atoi(row[13]); + entry.caston_z = atoi(row[14]); + entry.ExtraDIChance = atoi(row[15]); + entry.instrument_mod = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_BUFFS_REPOSITORY_H diff --git a/common/repositories/base/base_character_corpse_items_repository.h b/common/repositories/base/base_character_corpse_items_repository.h new file mode 100644 index 000000000..b0b258389 --- /dev/null +++ b/common/repositories/base/base_character_corpse_items_repository.h @@ -0,0 +1,384 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterCorpseItemsRepository { +public: + struct CharacterCorpseItems { + int corpse_id; + int equip_slot; + int item_id; + int charges; + int aug_1; + int aug_2; + int aug_3; + int aug_4; + int aug_5; + int aug_6; + int16 attuned; + }; + + static std::string PrimaryKey() + { + return std::string("equip_slot"); + } + + static std::vector Columns() + { + return { + "corpse_id", + "equip_slot", + "item_id", + "charges", + "aug_1", + "aug_2", + "aug_3", + "aug_4", + "aug_5", + "aug_6", + "attuned", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_corpse_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCorpseItems NewEntity() + { + CharacterCorpseItems entry{}; + + entry.corpse_id = 0; + entry.equip_slot = 0; + entry.item_id = 0; + entry.charges = 0; + entry.aug_1 = 0; + entry.aug_2 = 0; + entry.aug_3 = 0; + entry.aug_4 = 0; + entry.aug_5 = 0; + entry.aug_6 = 0; + entry.attuned = 0; + + return entry; + } + + static CharacterCorpseItems GetCharacterCorpseItemsEntry( + const std::vector &character_corpse_itemss, + int character_corpse_items_id + ) + { + for (auto &character_corpse_items : character_corpse_itemss) { + if (character_corpse_items.equip_slot == character_corpse_items_id) { + return character_corpse_items; + } + } + + return NewEntity(); + } + + static CharacterCorpseItems FindOne( + int character_corpse_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_corpse_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_corpse_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_corpse_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCorpseItems character_corpse_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_corpse_items_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_corpse_items_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(character_corpse_items_entry.aug_1)); + update_values.push_back(columns[5] + " = " + std::to_string(character_corpse_items_entry.aug_2)); + update_values.push_back(columns[6] + " = " + std::to_string(character_corpse_items_entry.aug_3)); + update_values.push_back(columns[7] + " = " + std::to_string(character_corpse_items_entry.aug_4)); + update_values.push_back(columns[8] + " = " + std::to_string(character_corpse_items_entry.aug_5)); + update_values.push_back(columns[9] + " = " + std::to_string(character_corpse_items_entry.aug_6)); + update_values.push_back(columns[10] + " = " + std::to_string(character_corpse_items_entry.attuned)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_corpse_items_entry.equip_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCorpseItems InsertOne( + CharacterCorpseItems character_corpse_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); + insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_corpse_items_entry.id = results.LastInsertedID(); + return character_corpse_items_entry; + } + + character_corpse_items_entry = NewEntity(); + + return character_corpse_items_entry; + } + + static int InsertMany( + std::vector character_corpse_items_entries + ) + { + std::vector insert_chunks; + + for (auto &character_corpse_items_entry: character_corpse_items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); + insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); + insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpseItems entry{}; + + entry.corpse_id = atoi(row[0]); + entry.equip_slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.aug_1 = atoi(row[4]); + entry.aug_2 = atoi(row[5]); + entry.aug_3 = atoi(row[6]); + entry.aug_4 = atoi(row[7]); + entry.aug_5 = atoi(row[8]); + entry.aug_6 = atoi(row[9]); + entry.attuned = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_character_corpses_repository.h b/common/repositories/base/base_character_corpses_repository.h new file mode 100644 index 000000000..2af2feac1 --- /dev/null +++ b/common/repositories/base/base_character_corpses_repository.h @@ -0,0 +1,711 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterCorpsesRepository { +public: + struct CharacterCorpses { + int id; + int charid; + std::string charname; + int16 zone_id; + int16 instance_id; + float x; + float y; + float z; + float heading; + std::string time_of_death; + int guild_consent_id; + int8 is_rezzed; + int8 is_buried; + int8 was_at_graveyard; + int8 is_locked; + int exp; + int size; + int level; + int race; + int gender; + int class; + int deity; + int texture; + int helm_texture; + int copper; + int silver; + int gold; + int platinum; + int hair_color; + int beard_color; + int eye_color_1; + int eye_color_2; + int hair_style; + int face; + int beard; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int wc_1; + int wc_2; + int wc_3; + int wc_4; + int wc_5; + int wc_6; + int wc_7; + int wc_8; + int wc_9; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + "charname", + "zone_id", + "instance_id", + "x", + "y", + "z", + "heading", + "time_of_death", + "guild_consent_id", + "is_rezzed", + "is_buried", + "was_at_graveyard", + "is_locked", + "exp", + "size", + "level", + "race", + "gender", + "class", + "deity", + "texture", + "helm_texture", + "copper", + "silver", + "gold", + "platinum", + "hair_color", + "beard_color", + "eye_color_1", + "eye_color_2", + "hair_style", + "face", + "beard", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "wc_1", + "wc_2", + "wc_3", + "wc_4", + "wc_5", + "wc_6", + "wc_7", + "wc_8", + "wc_9", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_corpses"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCorpses NewEntity() + { + CharacterCorpses entry{}; + + entry.id = 0; + entry.charid = 0; + entry.charname = ""; + entry.zone_id = 0; + entry.instance_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.time_of_death = "0000-00-00 00:00:00"; + entry.guild_consent_id = 0; + entry.is_rezzed = 0; + entry.is_buried = 0; + entry.was_at_graveyard = 0; + entry.is_locked = 0; + entry.exp = 0; + entry.size = 0; + entry.level = 0; + entry.race = 0; + entry.gender = 0; + entry.class = 0; + entry.deity = 0; + entry.texture = 0; + entry.helm_texture = 0; + entry.copper = 0; + entry.silver = 0; + entry.gold = 0; + entry.platinum = 0; + entry.hair_color = 0; + entry.beard_color = 0; + entry.eye_color_1 = 0; + entry.eye_color_2 = 0; + entry.hair_style = 0; + entry.face = 0; + entry.beard = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.wc_1 = 0; + entry.wc_2 = 0; + entry.wc_3 = 0; + entry.wc_4 = 0; + entry.wc_5 = 0; + entry.wc_6 = 0; + entry.wc_7 = 0; + entry.wc_8 = 0; + entry.wc_9 = 0; + + return entry; + } + + static CharacterCorpses GetCharacterCorpsesEntry( + const std::vector &character_corpsess, + int character_corpses_id + ) + { + for (auto &character_corpses : character_corpsess) { + if (character_corpses.id == character_corpses_id) { + return character_corpses; + } + } + + return NewEntity(); + } + + static CharacterCorpses FindOne( + int character_corpses_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_corpses_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9] ? row[9] : ""; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_corpses_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_corpses_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCorpses character_corpses_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_corpses_entry.charid)); + update_values.push_back(columns[2] + " = '" + EscapeString(character_corpses_entry.charname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(character_corpses_entry.zone_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_corpses_entry.instance_id)); + update_values.push_back(columns[5] + " = " + std::to_string(character_corpses_entry.x)); + update_values.push_back(columns[6] + " = " + std::to_string(character_corpses_entry.y)); + update_values.push_back(columns[7] + " = " + std::to_string(character_corpses_entry.z)); + update_values.push_back(columns[8] + " = " + std::to_string(character_corpses_entry.heading)); + update_values.push_back(columns[9] + " = '" + EscapeString(character_corpses_entry.time_of_death) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(character_corpses_entry.guild_consent_id)); + update_values.push_back(columns[11] + " = " + std::to_string(character_corpses_entry.is_rezzed)); + update_values.push_back(columns[12] + " = " + std::to_string(character_corpses_entry.is_buried)); + update_values.push_back(columns[13] + " = " + std::to_string(character_corpses_entry.was_at_graveyard)); + update_values.push_back(columns[14] + " = " + std::to_string(character_corpses_entry.is_locked)); + update_values.push_back(columns[15] + " = " + std::to_string(character_corpses_entry.exp)); + update_values.push_back(columns[16] + " = " + std::to_string(character_corpses_entry.size)); + update_values.push_back(columns[17] + " = " + std::to_string(character_corpses_entry.level)); + update_values.push_back(columns[18] + " = " + std::to_string(character_corpses_entry.race)); + update_values.push_back(columns[19] + " = " + std::to_string(character_corpses_entry.gender)); + update_values.push_back(columns[20] + " = " + std::to_string(character_corpses_entry.class)); + update_values.push_back(columns[21] + " = " + std::to_string(character_corpses_entry.deity)); + update_values.push_back(columns[22] + " = " + std::to_string(character_corpses_entry.texture)); + update_values.push_back(columns[23] + " = " + std::to_string(character_corpses_entry.helm_texture)); + update_values.push_back(columns[24] + " = " + std::to_string(character_corpses_entry.copper)); + update_values.push_back(columns[25] + " = " + std::to_string(character_corpses_entry.silver)); + update_values.push_back(columns[26] + " = " + std::to_string(character_corpses_entry.gold)); + update_values.push_back(columns[27] + " = " + std::to_string(character_corpses_entry.platinum)); + update_values.push_back(columns[28] + " = " + std::to_string(character_corpses_entry.hair_color)); + update_values.push_back(columns[29] + " = " + std::to_string(character_corpses_entry.beard_color)); + update_values.push_back(columns[30] + " = " + std::to_string(character_corpses_entry.eye_color_1)); + update_values.push_back(columns[31] + " = " + std::to_string(character_corpses_entry.eye_color_2)); + update_values.push_back(columns[32] + " = " + std::to_string(character_corpses_entry.hair_style)); + update_values.push_back(columns[33] + " = " + std::to_string(character_corpses_entry.face)); + update_values.push_back(columns[34] + " = " + std::to_string(character_corpses_entry.beard)); + update_values.push_back(columns[35] + " = " + std::to_string(character_corpses_entry.drakkin_heritage)); + update_values.push_back(columns[36] + " = " + std::to_string(character_corpses_entry.drakkin_tattoo)); + update_values.push_back(columns[37] + " = " + std::to_string(character_corpses_entry.drakkin_details)); + update_values.push_back(columns[38] + " = " + std::to_string(character_corpses_entry.wc_1)); + update_values.push_back(columns[39] + " = " + std::to_string(character_corpses_entry.wc_2)); + update_values.push_back(columns[40] + " = " + std::to_string(character_corpses_entry.wc_3)); + update_values.push_back(columns[41] + " = " + std::to_string(character_corpses_entry.wc_4)); + update_values.push_back(columns[42] + " = " + std::to_string(character_corpses_entry.wc_5)); + update_values.push_back(columns[43] + " = " + std::to_string(character_corpses_entry.wc_6)); + update_values.push_back(columns[44] + " = " + std::to_string(character_corpses_entry.wc_7)); + update_values.push_back(columns[45] + " = " + std::to_string(character_corpses_entry.wc_8)); + update_values.push_back(columns[46] + " = " + std::to_string(character_corpses_entry.wc_9)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_corpses_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCorpses InsertOne( + CharacterCorpses character_corpses_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpses_entry.charid)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); + insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); + insert_values.push_back(std::to_string(character_corpses_entry.x)); + insert_values.push_back(std::to_string(character_corpses_entry.y)); + insert_values.push_back(std::to_string(character_corpses_entry.z)); + insert_values.push_back(std::to_string(character_corpses_entry.heading)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); + insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); + insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); + insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); + insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); + insert_values.push_back(std::to_string(character_corpses_entry.exp)); + insert_values.push_back(std::to_string(character_corpses_entry.size)); + insert_values.push_back(std::to_string(character_corpses_entry.level)); + insert_values.push_back(std::to_string(character_corpses_entry.race)); + insert_values.push_back(std::to_string(character_corpses_entry.gender)); + insert_values.push_back(std::to_string(character_corpses_entry.class)); + insert_values.push_back(std::to_string(character_corpses_entry.deity)); + insert_values.push_back(std::to_string(character_corpses_entry.texture)); + insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); + insert_values.push_back(std::to_string(character_corpses_entry.copper)); + insert_values.push_back(std::to_string(character_corpses_entry.silver)); + insert_values.push_back(std::to_string(character_corpses_entry.gold)); + insert_values.push_back(std::to_string(character_corpses_entry.platinum)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); + insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); + insert_values.push_back(std::to_string(character_corpses_entry.face)); + insert_values.push_back(std::to_string(character_corpses_entry.beard)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_corpses_entry.id = results.LastInsertedID(); + return character_corpses_entry; + } + + character_corpses_entry = NewEntity(); + + return character_corpses_entry; + } + + static int InsertMany( + std::vector character_corpses_entries + ) + { + std::vector insert_chunks; + + for (auto &character_corpses_entry: character_corpses_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_corpses_entry.charid)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); + insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); + insert_values.push_back(std::to_string(character_corpses_entry.x)); + insert_values.push_back(std::to_string(character_corpses_entry.y)); + insert_values.push_back(std::to_string(character_corpses_entry.z)); + insert_values.push_back(std::to_string(character_corpses_entry.heading)); + insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); + insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); + insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); + insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); + insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); + insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); + insert_values.push_back(std::to_string(character_corpses_entry.exp)); + insert_values.push_back(std::to_string(character_corpses_entry.size)); + insert_values.push_back(std::to_string(character_corpses_entry.level)); + insert_values.push_back(std::to_string(character_corpses_entry.race)); + insert_values.push_back(std::to_string(character_corpses_entry.gender)); + insert_values.push_back(std::to_string(character_corpses_entry.class)); + insert_values.push_back(std::to_string(character_corpses_entry.deity)); + insert_values.push_back(std::to_string(character_corpses_entry.texture)); + insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); + insert_values.push_back(std::to_string(character_corpses_entry.copper)); + insert_values.push_back(std::to_string(character_corpses_entry.silver)); + insert_values.push_back(std::to_string(character_corpses_entry.gold)); + insert_values.push_back(std::to_string(character_corpses_entry.platinum)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); + insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); + insert_values.push_back(std::to_string(character_corpses_entry.face)); + insert_values.push_back(std::to_string(character_corpses_entry.beard)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); + insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9] ? row[9] : ""; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCorpses entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.zone_id = atoi(row[3]); + entry.instance_id = atoi(row[4]); + entry.x = atof(row[5]); + entry.y = atof(row[6]); + entry.z = atof(row[7]); + entry.heading = atof(row[8]); + entry.time_of_death = row[9] ? row[9] : ""; + entry.guild_consent_id = atoi(row[10]); + entry.is_rezzed = atoi(row[11]); + entry.is_buried = atoi(row[12]); + entry.was_at_graveyard = atoi(row[13]); + entry.is_locked = atoi(row[14]); + entry.exp = atoi(row[15]); + entry.size = atoi(row[16]); + entry.level = atoi(row[17]); + entry.race = atoi(row[18]); + entry.gender = atoi(row[19]); + entry.class = atoi(row[20]); + entry.deity = atoi(row[21]); + entry.texture = atoi(row[22]); + entry.helm_texture = atoi(row[23]); + entry.copper = atoi(row[24]); + entry.silver = atoi(row[25]); + entry.gold = atoi(row[26]); + entry.platinum = atoi(row[27]); + entry.hair_color = atoi(row[28]); + entry.beard_color = atoi(row[29]); + entry.eye_color_1 = atoi(row[30]); + entry.eye_color_2 = atoi(row[31]); + entry.hair_style = atoi(row[32]); + entry.face = atoi(row[33]); + entry.beard = atoi(row[34]); + entry.drakkin_heritage = atoi(row[35]); + entry.drakkin_tattoo = atoi(row[36]); + entry.drakkin_details = atoi(row[37]); + entry.wc_1 = atoi(row[38]); + entry.wc_2 = atoi(row[39]); + entry.wc_3 = atoi(row[40]); + entry.wc_4 = atoi(row[41]); + entry.wc_5 = atoi(row[42]); + entry.wc_6 = atoi(row[43]); + entry.wc_7 = atoi(row[44]); + entry.wc_8 = atoi(row[45]); + entry.wc_9 = atoi(row[46]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H diff --git a/common/repositories/base/base_character_currency_repository.h b/common/repositories/base/base_character_currency_repository.h new file mode 100644 index 000000000..d38deb4db --- /dev/null +++ b/common/repositories/base/base_character_currency_repository.h @@ -0,0 +1,441 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_CURRENCY_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_CURRENCY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterCurrencyRepository { +public: + struct CharacterCurrency { + int id; + int platinum; + int gold; + int silver; + int copper; + int platinum_bank; + int gold_bank; + int silver_bank; + int copper_bank; + int platinum_cursor; + int gold_cursor; + int silver_cursor; + int copper_cursor; + int radiant_crystals; + int career_radiant_crystals; + int ebon_crystals; + int career_ebon_crystals; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "platinum", + "gold", + "silver", + "copper", + "platinum_bank", + "gold_bank", + "silver_bank", + "copper_bank", + "platinum_cursor", + "gold_cursor", + "silver_cursor", + "copper_cursor", + "radiant_crystals", + "career_radiant_crystals", + "ebon_crystals", + "career_ebon_crystals", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_currency"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterCurrency NewEntity() + { + CharacterCurrency entry{}; + + entry.id = 0; + entry.platinum = 0; + entry.gold = 0; + entry.silver = 0; + entry.copper = 0; + entry.platinum_bank = 0; + entry.gold_bank = 0; + entry.silver_bank = 0; + entry.copper_bank = 0; + entry.platinum_cursor = 0; + entry.gold_cursor = 0; + entry.silver_cursor = 0; + entry.copper_cursor = 0; + entry.radiant_crystals = 0; + entry.career_radiant_crystals = 0; + entry.ebon_crystals = 0; + entry.career_ebon_crystals = 0; + + return entry; + } + + static CharacterCurrency GetCharacterCurrencyEntry( + const std::vector &character_currencys, + int character_currency_id + ) + { + for (auto &character_currency : character_currencys) { + if (character_currency.id == character_currency_id) { + return character_currency; + } + } + + return NewEntity(); + } + + static CharacterCurrency FindOne( + int character_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_currency_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_currency_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_currency_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterCurrency character_currency_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_currency_entry.platinum)); + update_values.push_back(columns[2] + " = " + std::to_string(character_currency_entry.gold)); + update_values.push_back(columns[3] + " = " + std::to_string(character_currency_entry.silver)); + update_values.push_back(columns[4] + " = " + std::to_string(character_currency_entry.copper)); + update_values.push_back(columns[5] + " = " + std::to_string(character_currency_entry.platinum_bank)); + update_values.push_back(columns[6] + " = " + std::to_string(character_currency_entry.gold_bank)); + update_values.push_back(columns[7] + " = " + std::to_string(character_currency_entry.silver_bank)); + update_values.push_back(columns[8] + " = " + std::to_string(character_currency_entry.copper_bank)); + update_values.push_back(columns[9] + " = " + std::to_string(character_currency_entry.platinum_cursor)); + update_values.push_back(columns[10] + " = " + std::to_string(character_currency_entry.gold_cursor)); + update_values.push_back(columns[11] + " = " + std::to_string(character_currency_entry.silver_cursor)); + update_values.push_back(columns[12] + " = " + std::to_string(character_currency_entry.copper_cursor)); + update_values.push_back(columns[13] + " = " + std::to_string(character_currency_entry.radiant_crystals)); + update_values.push_back(columns[14] + " = " + std::to_string(character_currency_entry.career_radiant_crystals)); + update_values.push_back(columns[15] + " = " + std::to_string(character_currency_entry.ebon_crystals)); + update_values.push_back(columns[16] + " = " + std::to_string(character_currency_entry.career_ebon_crystals)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_currency_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterCurrency InsertOne( + CharacterCurrency character_currency_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_currency_entry.platinum)); + insert_values.push_back(std::to_string(character_currency_entry.gold)); + insert_values.push_back(std::to_string(character_currency_entry.silver)); + insert_values.push_back(std::to_string(character_currency_entry.copper)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); + insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); + insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); + insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_currency_entry.id = results.LastInsertedID(); + return character_currency_entry; + } + + character_currency_entry = NewEntity(); + + return character_currency_entry; + } + + static int InsertMany( + std::vector character_currency_entries + ) + { + std::vector insert_chunks; + + for (auto &character_currency_entry: character_currency_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_currency_entry.platinum)); + insert_values.push_back(std::to_string(character_currency_entry.gold)); + insert_values.push_back(std::to_string(character_currency_entry.silver)); + insert_values.push_back(std::to_string(character_currency_entry.copper)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); + insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); + insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); + insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); + insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); + insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); + insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterCurrency entry{}; + + entry.id = atoi(row[0]); + entry.platinum = atoi(row[1]); + entry.gold = atoi(row[2]); + entry.silver = atoi(row[3]); + entry.copper = atoi(row[4]); + entry.platinum_bank = atoi(row[5]); + entry.gold_bank = atoi(row[6]); + entry.silver_bank = atoi(row[7]); + entry.copper_bank = atoi(row[8]); + entry.platinum_cursor = atoi(row[9]); + entry.gold_cursor = atoi(row[10]); + entry.silver_cursor = atoi(row[11]); + entry.copper_cursor = atoi(row[12]); + entry.radiant_crystals = atoi(row[13]); + entry.career_radiant_crystals = atoi(row[14]); + entry.ebon_crystals = atoi(row[15]); + entry.career_ebon_crystals = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_character_data_repository.h b/common/repositories/base/base_character_data_repository.h new file mode 100644 index 000000000..24133e729 --- /dev/null +++ b/common/repositories/base/base_character_data_repository.h @@ -0,0 +1,1206 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_DATA_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_DATA_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterDataRepository { +public: + struct CharacterData { + int id; + int account_id; + std::string name; + std::string last_name; + std::string title; + std::string suffix; + int zone_id; + int zone_instance; + float y; + float x; + float z; + float heading; + int8 gender; + int16 race; + int8 class; + int level; + int deity; + int birthday; + int last_login; + int time_played; + int8 level2; + int8 anon; + int8 gm; + int face; + int8 hair_color; + int8 hair_style; + int8 beard; + int8 beard_color; + int8 eye_color_1; + int8 eye_color_2; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int8 ability_time_seconds; + int8 ability_number; + int8 ability_time_minutes; + int8 ability_time_hours; + int exp; + int aa_points_spent; + int aa_exp; + int aa_points; + int group_leadership_exp; + int raid_leadership_exp; + int group_leadership_points; + int raid_leadership_points; + int points; + int cur_hp; + int mana; + int endurance; + int intoxication; + int str; + int sta; + int cha; + int dex; + int int; + int agi; + int wis; + int zone_change_count; + int toxicity; + int hunger_level; + int thirst_level; + int ability_up; + int ldon_points_guk; + int ldon_points_mir; + int ldon_points_mmc; + int ldon_points_ruj; + int ldon_points_tak; + int ldon_points_available; + int tribute_time_remaining; + int career_tribute_points; + int tribute_points; + int tribute_active; + int8 pvp_status; + int pvp_kills; + int pvp_deaths; + int pvp_current_points; + int pvp_career_points; + int pvp_best_kill_streak; + int pvp_worst_death_streak; + int pvp_current_kill_streak; + int pvp2; + int pvp_type; + int show_helm; + int8 group_auto_consent; + int8 raid_auto_consent; + int8 guild_auto_consent; + int8 leadership_exp_on; + int RestTimer; + int air_remaining; + int autosplit_enabled; + int8 lfp; + int8 lfg; + std::string mailkey; + int8 xtargets; + int8 firstlogon; + int e_aa_effects; + int e_percent_to_aa; + int e_expended_aa_spent; + int aa_points_spent_old; + int aa_points_old; + int e_last_invsnapshot; + std::string deleted_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_id", + "name", + "last_name", + "title", + "suffix", + "zone_id", + "zone_instance", + "y", + "x", + "z", + "heading", + "gender", + "race", + "class", + "level", + "deity", + "birthday", + "last_login", + "time_played", + "level2", + "anon", + "gm", + "face", + "hair_color", + "hair_style", + "beard", + "beard_color", + "eye_color_1", + "eye_color_2", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "ability_time_seconds", + "ability_number", + "ability_time_minutes", + "ability_time_hours", + "exp", + "aa_points_spent", + "aa_exp", + "aa_points", + "group_leadership_exp", + "raid_leadership_exp", + "group_leadership_points", + "raid_leadership_points", + "points", + "cur_hp", + "mana", + "endurance", + "intoxication", + "str", + "sta", + "cha", + "dex", + "int", + "agi", + "wis", + "zone_change_count", + "toxicity", + "hunger_level", + "thirst_level", + "ability_up", + "ldon_points_guk", + "ldon_points_mir", + "ldon_points_mmc", + "ldon_points_ruj", + "ldon_points_tak", + "ldon_points_available", + "tribute_time_remaining", + "career_tribute_points", + "tribute_points", + "tribute_active", + "pvp_status", + "pvp_kills", + "pvp_deaths", + "pvp_current_points", + "pvp_career_points", + "pvp_best_kill_streak", + "pvp_worst_death_streak", + "pvp_current_kill_streak", + "pvp2", + "pvp_type", + "show_helm", + "group_auto_consent", + "raid_auto_consent", + "guild_auto_consent", + "leadership_exp_on", + "RestTimer", + "air_remaining", + "autosplit_enabled", + "lfp", + "lfg", + "mailkey", + "xtargets", + "firstlogon", + "e_aa_effects", + "e_percent_to_aa", + "e_expended_aa_spent", + "aa_points_spent_old", + "aa_points_old", + "e_last_invsnapshot", + "deleted_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterData NewEntity() + { + CharacterData entry{}; + + entry.id = 0; + entry.account_id = 0; + entry.name = ""; + entry.last_name = ""; + entry.title = ""; + entry.suffix = ""; + entry.zone_id = 0; + entry.zone_instance = 0; + entry.y = 0; + entry.x = 0; + entry.z = 0; + entry.heading = 0; + entry.gender = 0; + entry.race = 0; + entry.class = 0; + entry.level = 0; + entry.deity = 0; + entry.birthday = 0; + entry.last_login = 0; + entry.time_played = 0; + entry.level2 = 0; + entry.anon = 0; + entry.gm = 0; + entry.face = 0; + entry.hair_color = 0; + entry.hair_style = 0; + entry.beard = 0; + entry.beard_color = 0; + entry.eye_color_1 = 0; + entry.eye_color_2 = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.ability_time_seconds = 0; + entry.ability_number = 0; + entry.ability_time_minutes = 0; + entry.ability_time_hours = 0; + entry.exp = 0; + entry.aa_points_spent = 0; + entry.aa_exp = 0; + entry.aa_points = 0; + entry.group_leadership_exp = 0; + entry.raid_leadership_exp = 0; + entry.group_leadership_points = 0; + entry.raid_leadership_points = 0; + entry.points = 0; + entry.cur_hp = 0; + entry.mana = 0; + entry.endurance = 0; + entry.intoxication = 0; + entry.str = 0; + entry.sta = 0; + entry.cha = 0; + entry.dex = 0; + entry.int = 0; + entry.agi = 0; + entry.wis = 0; + entry.zone_change_count = 0; + entry.toxicity = 0; + entry.hunger_level = 0; + entry.thirst_level = 0; + entry.ability_up = 0; + entry.ldon_points_guk = 0; + entry.ldon_points_mir = 0; + entry.ldon_points_mmc = 0; + entry.ldon_points_ruj = 0; + entry.ldon_points_tak = 0; + entry.ldon_points_available = 0; + entry.tribute_time_remaining = 0; + entry.career_tribute_points = 0; + entry.tribute_points = 0; + entry.tribute_active = 0; + entry.pvp_status = 0; + entry.pvp_kills = 0; + entry.pvp_deaths = 0; + entry.pvp_current_points = 0; + entry.pvp_career_points = 0; + entry.pvp_best_kill_streak = 0; + entry.pvp_worst_death_streak = 0; + entry.pvp_current_kill_streak = 0; + entry.pvp2 = 0; + entry.pvp_type = 0; + entry.show_helm = 0; + entry.group_auto_consent = 0; + entry.raid_auto_consent = 0; + entry.guild_auto_consent = 0; + entry.leadership_exp_on = 0; + entry.RestTimer = 0; + entry.air_remaining = 0; + entry.autosplit_enabled = 0; + entry.lfp = 0; + entry.lfg = 0; + entry.mailkey = ""; + entry.xtargets = 5; + entry.firstlogon = 0; + entry.e_aa_effects = 0; + entry.e_percent_to_aa = 0; + entry.e_expended_aa_spent = 0; + entry.aa_points_spent_old = 0; + entry.aa_points_old = 0; + entry.e_last_invsnapshot = 0; + entry.deleted_at = 0; + + return entry; + } + + static CharacterData GetCharacterDataEntry( + const std::vector &character_datas, + int character_data_id + ) + { + for (auto &character_data : character_datas) { + if (character_data.id == character_data_id) { + return character_data; + } + } + + return NewEntity(); + } + + static CharacterData FindOne( + int character_data_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92] ? row[92] : ""; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101] ? row[101] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_data_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterData character_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(character_data_entry.account_id)); + update_values.push_back(columns[2] + " = '" + EscapeString(character_data_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(character_data_entry.last_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(character_data_entry.title) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(character_data_entry.suffix) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(character_data_entry.zone_id)); + update_values.push_back(columns[7] + " = " + std::to_string(character_data_entry.zone_instance)); + update_values.push_back(columns[8] + " = " + std::to_string(character_data_entry.y)); + update_values.push_back(columns[9] + " = " + std::to_string(character_data_entry.x)); + update_values.push_back(columns[10] + " = " + std::to_string(character_data_entry.z)); + update_values.push_back(columns[11] + " = " + std::to_string(character_data_entry.heading)); + update_values.push_back(columns[12] + " = " + std::to_string(character_data_entry.gender)); + update_values.push_back(columns[13] + " = " + std::to_string(character_data_entry.race)); + update_values.push_back(columns[14] + " = " + std::to_string(character_data_entry.class)); + update_values.push_back(columns[15] + " = " + std::to_string(character_data_entry.level)); + update_values.push_back(columns[16] + " = " + std::to_string(character_data_entry.deity)); + update_values.push_back(columns[17] + " = " + std::to_string(character_data_entry.birthday)); + update_values.push_back(columns[18] + " = " + std::to_string(character_data_entry.last_login)); + update_values.push_back(columns[19] + " = " + std::to_string(character_data_entry.time_played)); + update_values.push_back(columns[20] + " = " + std::to_string(character_data_entry.level2)); + update_values.push_back(columns[21] + " = " + std::to_string(character_data_entry.anon)); + update_values.push_back(columns[22] + " = " + std::to_string(character_data_entry.gm)); + update_values.push_back(columns[23] + " = " + std::to_string(character_data_entry.face)); + update_values.push_back(columns[24] + " = " + std::to_string(character_data_entry.hair_color)); + update_values.push_back(columns[25] + " = " + std::to_string(character_data_entry.hair_style)); + update_values.push_back(columns[26] + " = " + std::to_string(character_data_entry.beard)); + update_values.push_back(columns[27] + " = " + std::to_string(character_data_entry.beard_color)); + update_values.push_back(columns[28] + " = " + std::to_string(character_data_entry.eye_color_1)); + update_values.push_back(columns[29] + " = " + std::to_string(character_data_entry.eye_color_2)); + update_values.push_back(columns[30] + " = " + std::to_string(character_data_entry.drakkin_heritage)); + update_values.push_back(columns[31] + " = " + std::to_string(character_data_entry.drakkin_tattoo)); + update_values.push_back(columns[32] + " = " + std::to_string(character_data_entry.drakkin_details)); + update_values.push_back(columns[33] + " = " + std::to_string(character_data_entry.ability_time_seconds)); + update_values.push_back(columns[34] + " = " + std::to_string(character_data_entry.ability_number)); + update_values.push_back(columns[35] + " = " + std::to_string(character_data_entry.ability_time_minutes)); + update_values.push_back(columns[36] + " = " + std::to_string(character_data_entry.ability_time_hours)); + update_values.push_back(columns[37] + " = " + std::to_string(character_data_entry.exp)); + update_values.push_back(columns[38] + " = " + std::to_string(character_data_entry.aa_points_spent)); + update_values.push_back(columns[39] + " = " + std::to_string(character_data_entry.aa_exp)); + update_values.push_back(columns[40] + " = " + std::to_string(character_data_entry.aa_points)); + update_values.push_back(columns[41] + " = " + std::to_string(character_data_entry.group_leadership_exp)); + update_values.push_back(columns[42] + " = " + std::to_string(character_data_entry.raid_leadership_exp)); + update_values.push_back(columns[43] + " = " + std::to_string(character_data_entry.group_leadership_points)); + update_values.push_back(columns[44] + " = " + std::to_string(character_data_entry.raid_leadership_points)); + update_values.push_back(columns[45] + " = " + std::to_string(character_data_entry.points)); + update_values.push_back(columns[46] + " = " + std::to_string(character_data_entry.cur_hp)); + update_values.push_back(columns[47] + " = " + std::to_string(character_data_entry.mana)); + update_values.push_back(columns[48] + " = " + std::to_string(character_data_entry.endurance)); + update_values.push_back(columns[49] + " = " + std::to_string(character_data_entry.intoxication)); + update_values.push_back(columns[50] + " = " + std::to_string(character_data_entry.str)); + update_values.push_back(columns[51] + " = " + std::to_string(character_data_entry.sta)); + update_values.push_back(columns[52] + " = " + std::to_string(character_data_entry.cha)); + update_values.push_back(columns[53] + " = " + std::to_string(character_data_entry.dex)); + update_values.push_back(columns[54] + " = " + std::to_string(character_data_entry.int)); + update_values.push_back(columns[55] + " = " + std::to_string(character_data_entry.agi)); + update_values.push_back(columns[56] + " = " + std::to_string(character_data_entry.wis)); + update_values.push_back(columns[57] + " = " + std::to_string(character_data_entry.zone_change_count)); + update_values.push_back(columns[58] + " = " + std::to_string(character_data_entry.toxicity)); + update_values.push_back(columns[59] + " = " + std::to_string(character_data_entry.hunger_level)); + update_values.push_back(columns[60] + " = " + std::to_string(character_data_entry.thirst_level)); + update_values.push_back(columns[61] + " = " + std::to_string(character_data_entry.ability_up)); + update_values.push_back(columns[62] + " = " + std::to_string(character_data_entry.ldon_points_guk)); + update_values.push_back(columns[63] + " = " + std::to_string(character_data_entry.ldon_points_mir)); + update_values.push_back(columns[64] + " = " + std::to_string(character_data_entry.ldon_points_mmc)); + update_values.push_back(columns[65] + " = " + std::to_string(character_data_entry.ldon_points_ruj)); + update_values.push_back(columns[66] + " = " + std::to_string(character_data_entry.ldon_points_tak)); + update_values.push_back(columns[67] + " = " + std::to_string(character_data_entry.ldon_points_available)); + update_values.push_back(columns[68] + " = " + std::to_string(character_data_entry.tribute_time_remaining)); + update_values.push_back(columns[69] + " = " + std::to_string(character_data_entry.career_tribute_points)); + update_values.push_back(columns[70] + " = " + std::to_string(character_data_entry.tribute_points)); + update_values.push_back(columns[71] + " = " + std::to_string(character_data_entry.tribute_active)); + update_values.push_back(columns[72] + " = " + std::to_string(character_data_entry.pvp_status)); + update_values.push_back(columns[73] + " = " + std::to_string(character_data_entry.pvp_kills)); + update_values.push_back(columns[74] + " = " + std::to_string(character_data_entry.pvp_deaths)); + update_values.push_back(columns[75] + " = " + std::to_string(character_data_entry.pvp_current_points)); + update_values.push_back(columns[76] + " = " + std::to_string(character_data_entry.pvp_career_points)); + update_values.push_back(columns[77] + " = " + std::to_string(character_data_entry.pvp_best_kill_streak)); + update_values.push_back(columns[78] + " = " + std::to_string(character_data_entry.pvp_worst_death_streak)); + update_values.push_back(columns[79] + " = " + std::to_string(character_data_entry.pvp_current_kill_streak)); + update_values.push_back(columns[80] + " = " + std::to_string(character_data_entry.pvp2)); + update_values.push_back(columns[81] + " = " + std::to_string(character_data_entry.pvp_type)); + update_values.push_back(columns[82] + " = " + std::to_string(character_data_entry.show_helm)); + update_values.push_back(columns[83] + " = " + std::to_string(character_data_entry.group_auto_consent)); + update_values.push_back(columns[84] + " = " + std::to_string(character_data_entry.raid_auto_consent)); + update_values.push_back(columns[85] + " = " + std::to_string(character_data_entry.guild_auto_consent)); + update_values.push_back(columns[86] + " = " + std::to_string(character_data_entry.leadership_exp_on)); + update_values.push_back(columns[87] + " = " + std::to_string(character_data_entry.RestTimer)); + update_values.push_back(columns[88] + " = " + std::to_string(character_data_entry.air_remaining)); + update_values.push_back(columns[89] + " = " + std::to_string(character_data_entry.autosplit_enabled)); + update_values.push_back(columns[90] + " = " + std::to_string(character_data_entry.lfp)); + update_values.push_back(columns[91] + " = " + std::to_string(character_data_entry.lfg)); + update_values.push_back(columns[92] + " = '" + EscapeString(character_data_entry.mailkey) + "'"); + update_values.push_back(columns[93] + " = " + std::to_string(character_data_entry.xtargets)); + update_values.push_back(columns[94] + " = " + std::to_string(character_data_entry.firstlogon)); + update_values.push_back(columns[95] + " = " + std::to_string(character_data_entry.e_aa_effects)); + update_values.push_back(columns[96] + " = " + std::to_string(character_data_entry.e_percent_to_aa)); + update_values.push_back(columns[97] + " = " + std::to_string(character_data_entry.e_expended_aa_spent)); + update_values.push_back(columns[98] + " = " + std::to_string(character_data_entry.aa_points_spent_old)); + update_values.push_back(columns[99] + " = " + std::to_string(character_data_entry.aa_points_old)); + update_values.push_back(columns[100] + " = " + std::to_string(character_data_entry.e_last_invsnapshot)); + update_values.push_back(columns[101] + " = '" + EscapeString(character_data_entry.deleted_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_data_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterData InsertOne( + CharacterData character_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_data_entry.account_id)); + insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); + insert_values.push_back(std::to_string(character_data_entry.zone_id)); + insert_values.push_back(std::to_string(character_data_entry.zone_instance)); + insert_values.push_back(std::to_string(character_data_entry.y)); + insert_values.push_back(std::to_string(character_data_entry.x)); + insert_values.push_back(std::to_string(character_data_entry.z)); + insert_values.push_back(std::to_string(character_data_entry.heading)); + insert_values.push_back(std::to_string(character_data_entry.gender)); + insert_values.push_back(std::to_string(character_data_entry.race)); + insert_values.push_back(std::to_string(character_data_entry.class)); + insert_values.push_back(std::to_string(character_data_entry.level)); + insert_values.push_back(std::to_string(character_data_entry.deity)); + insert_values.push_back(std::to_string(character_data_entry.birthday)); + insert_values.push_back(std::to_string(character_data_entry.last_login)); + insert_values.push_back(std::to_string(character_data_entry.time_played)); + insert_values.push_back(std::to_string(character_data_entry.level2)); + insert_values.push_back(std::to_string(character_data_entry.anon)); + insert_values.push_back(std::to_string(character_data_entry.gm)); + insert_values.push_back(std::to_string(character_data_entry.face)); + insert_values.push_back(std::to_string(character_data_entry.hair_color)); + insert_values.push_back(std::to_string(character_data_entry.hair_style)); + insert_values.push_back(std::to_string(character_data_entry.beard)); + insert_values.push_back(std::to_string(character_data_entry.beard_color)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); + insert_values.push_back(std::to_string(character_data_entry.ability_number)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); + insert_values.push_back(std::to_string(character_data_entry.exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.points)); + insert_values.push_back(std::to_string(character_data_entry.cur_hp)); + insert_values.push_back(std::to_string(character_data_entry.mana)); + insert_values.push_back(std::to_string(character_data_entry.endurance)); + insert_values.push_back(std::to_string(character_data_entry.intoxication)); + insert_values.push_back(std::to_string(character_data_entry.str)); + insert_values.push_back(std::to_string(character_data_entry.sta)); + insert_values.push_back(std::to_string(character_data_entry.cha)); + insert_values.push_back(std::to_string(character_data_entry.dex)); + insert_values.push_back(std::to_string(character_data_entry.int)); + insert_values.push_back(std::to_string(character_data_entry.agi)); + insert_values.push_back(std::to_string(character_data_entry.wis)); + insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); + insert_values.push_back(std::to_string(character_data_entry.toxicity)); + insert_values.push_back(std::to_string(character_data_entry.hunger_level)); + insert_values.push_back(std::to_string(character_data_entry.thirst_level)); + insert_values.push_back(std::to_string(character_data_entry.ability_up)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); + insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); + insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_active)); + insert_values.push_back(std::to_string(character_data_entry.pvp_status)); + insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); + insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp2)); + insert_values.push_back(std::to_string(character_data_entry.pvp_type)); + insert_values.push_back(std::to_string(character_data_entry.show_helm)); + insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); + insert_values.push_back(std::to_string(character_data_entry.RestTimer)); + insert_values.push_back(std::to_string(character_data_entry.air_remaining)); + insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); + insert_values.push_back(std::to_string(character_data_entry.lfp)); + insert_values.push_back(std::to_string(character_data_entry.lfg)); + insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); + insert_values.push_back(std::to_string(character_data_entry.xtargets)); + insert_values.push_back(std::to_string(character_data_entry.firstlogon)); + insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); + insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); + insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); + insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); + insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_data_entry.id = results.LastInsertedID(); + return character_data_entry; + } + + character_data_entry = NewEntity(); + + return character_data_entry; + } + + static int InsertMany( + std::vector character_data_entries + ) + { + std::vector insert_chunks; + + for (auto &character_data_entry: character_data_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_data_entry.account_id)); + insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); + insert_values.push_back(std::to_string(character_data_entry.zone_id)); + insert_values.push_back(std::to_string(character_data_entry.zone_instance)); + insert_values.push_back(std::to_string(character_data_entry.y)); + insert_values.push_back(std::to_string(character_data_entry.x)); + insert_values.push_back(std::to_string(character_data_entry.z)); + insert_values.push_back(std::to_string(character_data_entry.heading)); + insert_values.push_back(std::to_string(character_data_entry.gender)); + insert_values.push_back(std::to_string(character_data_entry.race)); + insert_values.push_back(std::to_string(character_data_entry.class)); + insert_values.push_back(std::to_string(character_data_entry.level)); + insert_values.push_back(std::to_string(character_data_entry.deity)); + insert_values.push_back(std::to_string(character_data_entry.birthday)); + insert_values.push_back(std::to_string(character_data_entry.last_login)); + insert_values.push_back(std::to_string(character_data_entry.time_played)); + insert_values.push_back(std::to_string(character_data_entry.level2)); + insert_values.push_back(std::to_string(character_data_entry.anon)); + insert_values.push_back(std::to_string(character_data_entry.gm)); + insert_values.push_back(std::to_string(character_data_entry.face)); + insert_values.push_back(std::to_string(character_data_entry.hair_color)); + insert_values.push_back(std::to_string(character_data_entry.hair_style)); + insert_values.push_back(std::to_string(character_data_entry.beard)); + insert_values.push_back(std::to_string(character_data_entry.beard_color)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); + insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); + insert_values.push_back(std::to_string(character_data_entry.ability_number)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); + insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); + insert_values.push_back(std::to_string(character_data_entry.exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_exp)); + insert_values.push_back(std::to_string(character_data_entry.aa_points)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); + insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); + insert_values.push_back(std::to_string(character_data_entry.points)); + insert_values.push_back(std::to_string(character_data_entry.cur_hp)); + insert_values.push_back(std::to_string(character_data_entry.mana)); + insert_values.push_back(std::to_string(character_data_entry.endurance)); + insert_values.push_back(std::to_string(character_data_entry.intoxication)); + insert_values.push_back(std::to_string(character_data_entry.str)); + insert_values.push_back(std::to_string(character_data_entry.sta)); + insert_values.push_back(std::to_string(character_data_entry.cha)); + insert_values.push_back(std::to_string(character_data_entry.dex)); + insert_values.push_back(std::to_string(character_data_entry.int)); + insert_values.push_back(std::to_string(character_data_entry.agi)); + insert_values.push_back(std::to_string(character_data_entry.wis)); + insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); + insert_values.push_back(std::to_string(character_data_entry.toxicity)); + insert_values.push_back(std::to_string(character_data_entry.hunger_level)); + insert_values.push_back(std::to_string(character_data_entry.thirst_level)); + insert_values.push_back(std::to_string(character_data_entry.ability_up)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); + insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); + insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); + insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_points)); + insert_values.push_back(std::to_string(character_data_entry.tribute_active)); + insert_values.push_back(std::to_string(character_data_entry.pvp_status)); + insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); + insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); + insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); + insert_values.push_back(std::to_string(character_data_entry.pvp2)); + insert_values.push_back(std::to_string(character_data_entry.pvp_type)); + insert_values.push_back(std::to_string(character_data_entry.show_helm)); + insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); + insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); + insert_values.push_back(std::to_string(character_data_entry.RestTimer)); + insert_values.push_back(std::to_string(character_data_entry.air_remaining)); + insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); + insert_values.push_back(std::to_string(character_data_entry.lfp)); + insert_values.push_back(std::to_string(character_data_entry.lfg)); + insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); + insert_values.push_back(std::to_string(character_data_entry.xtargets)); + insert_values.push_back(std::to_string(character_data_entry.firstlogon)); + insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); + insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); + insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); + insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); + insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); + insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92] ? row[92] : ""; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101] ? row[101] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterData entry{}; + + entry.id = atoi(row[0]); + entry.account_id = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.last_name = row[3] ? row[3] : ""; + entry.title = row[4] ? row[4] : ""; + entry.suffix = row[5] ? row[5] : ""; + entry.zone_id = atoi(row[6]); + entry.zone_instance = atoi(row[7]); + entry.y = atof(row[8]); + entry.x = atof(row[9]); + entry.z = atof(row[10]); + entry.heading = atof(row[11]); + entry.gender = atoi(row[12]); + entry.race = atoi(row[13]); + entry.class = atoi(row[14]); + entry.level = atoi(row[15]); + entry.deity = atoi(row[16]); + entry.birthday = atoi(row[17]); + entry.last_login = atoi(row[18]); + entry.time_played = atoi(row[19]); + entry.level2 = atoi(row[20]); + entry.anon = atoi(row[21]); + entry.gm = atoi(row[22]); + entry.face = atoi(row[23]); + entry.hair_color = atoi(row[24]); + entry.hair_style = atoi(row[25]); + entry.beard = atoi(row[26]); + entry.beard_color = atoi(row[27]); + entry.eye_color_1 = atoi(row[28]); + entry.eye_color_2 = atoi(row[29]); + entry.drakkin_heritage = atoi(row[30]); + entry.drakkin_tattoo = atoi(row[31]); + entry.drakkin_details = atoi(row[32]); + entry.ability_time_seconds = atoi(row[33]); + entry.ability_number = atoi(row[34]); + entry.ability_time_minutes = atoi(row[35]); + entry.ability_time_hours = atoi(row[36]); + entry.exp = atoi(row[37]); + entry.aa_points_spent = atoi(row[38]); + entry.aa_exp = atoi(row[39]); + entry.aa_points = atoi(row[40]); + entry.group_leadership_exp = atoi(row[41]); + entry.raid_leadership_exp = atoi(row[42]); + entry.group_leadership_points = atoi(row[43]); + entry.raid_leadership_points = atoi(row[44]); + entry.points = atoi(row[45]); + entry.cur_hp = atoi(row[46]); + entry.mana = atoi(row[47]); + entry.endurance = atoi(row[48]); + entry.intoxication = atoi(row[49]); + entry.str = atoi(row[50]); + entry.sta = atoi(row[51]); + entry.cha = atoi(row[52]); + entry.dex = atoi(row[53]); + entry.int = atoi(row[54]); + entry.agi = atoi(row[55]); + entry.wis = atoi(row[56]); + entry.zone_change_count = atoi(row[57]); + entry.toxicity = atoi(row[58]); + entry.hunger_level = atoi(row[59]); + entry.thirst_level = atoi(row[60]); + entry.ability_up = atoi(row[61]); + entry.ldon_points_guk = atoi(row[62]); + entry.ldon_points_mir = atoi(row[63]); + entry.ldon_points_mmc = atoi(row[64]); + entry.ldon_points_ruj = atoi(row[65]); + entry.ldon_points_tak = atoi(row[66]); + entry.ldon_points_available = atoi(row[67]); + entry.tribute_time_remaining = atoi(row[68]); + entry.career_tribute_points = atoi(row[69]); + entry.tribute_points = atoi(row[70]); + entry.tribute_active = atoi(row[71]); + entry.pvp_status = atoi(row[72]); + entry.pvp_kills = atoi(row[73]); + entry.pvp_deaths = atoi(row[74]); + entry.pvp_current_points = atoi(row[75]); + entry.pvp_career_points = atoi(row[76]); + entry.pvp_best_kill_streak = atoi(row[77]); + entry.pvp_worst_death_streak = atoi(row[78]); + entry.pvp_current_kill_streak = atoi(row[79]); + entry.pvp2 = atoi(row[80]); + entry.pvp_type = atoi(row[81]); + entry.show_helm = atoi(row[82]); + entry.group_auto_consent = atoi(row[83]); + entry.raid_auto_consent = atoi(row[84]); + entry.guild_auto_consent = atoi(row[85]); + entry.leadership_exp_on = atoi(row[86]); + entry.RestTimer = atoi(row[87]); + entry.air_remaining = atoi(row[88]); + entry.autosplit_enabled = atoi(row[89]); + entry.lfp = atoi(row[90]); + entry.lfg = atoi(row[91]); + entry.mailkey = row[92] ? row[92] : ""; + entry.xtargets = atoi(row[93]); + entry.firstlogon = atoi(row[94]); + entry.e_aa_effects = atoi(row[95]); + entry.e_percent_to_aa = atoi(row[96]); + entry.e_expended_aa_spent = atoi(row[97]); + entry.aa_points_spent_old = atoi(row[98]); + entry.aa_points_old = atoi(row[99]); + entry.e_last_invsnapshot = atoi(row[100]); + entry.deleted_at = row[101] ? row[101] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_character_disciplines_repository.h b/common/repositories/base/base_character_disciplines_repository.h new file mode 100644 index 000000000..3109327d1 --- /dev/null +++ b/common/repositories/base/base_character_disciplines_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_DISCIPLINES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_DISCIPLINES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterDisciplinesRepository { +public: + struct CharacterDisciplines { + int id; + int16 slot_id; + int16 disc_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "disc_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_disciplines"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterDisciplines NewEntity() + { + CharacterDisciplines entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.disc_id = 0; + + return entry; + } + + static CharacterDisciplines GetCharacterDisciplinesEntry( + const std::vector &character_discipliness, + int character_disciplines_id + ) + { + for (auto &character_disciplines : character_discipliness) { + if (character_disciplines.slot_id == character_disciplines_id) { + return character_disciplines; + } + } + + return NewEntity(); + } + + static CharacterDisciplines FindOne( + int character_disciplines_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_disciplines_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_disciplines_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_disciplines_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterDisciplines character_disciplines_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_disciplines_entry.disc_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_disciplines_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterDisciplines InsertOne( + CharacterDisciplines character_disciplines_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_disciplines_entry.id = results.LastInsertedID(); + return character_disciplines_entry; + } + + character_disciplines_entry = NewEntity(); + + return character_disciplines_entry; + } + + static int InsertMany( + std::vector character_disciplines_entries + ) + { + std::vector insert_chunks; + + for (auto &character_disciplines_entry: character_disciplines_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterDisciplines entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.disc_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_DISCIPLINES_REPOSITORY_H diff --git a/common/repositories/base/base_character_inspect_messages_repository.h b/common/repositories/base/base_character_inspect_messages_repository.h new file mode 100644 index 000000000..bc5ef873c --- /dev/null +++ b/common/repositories/base/base_character_inspect_messages_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterInspectMessagesRepository { +public: + struct CharacterInspectMessages { + int id; + std::string inspect_message; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "inspect_message", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_inspect_messages"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterInspectMessages NewEntity() + { + CharacterInspectMessages entry{}; + + entry.id = 0; + entry.inspect_message = ""; + + return entry; + } + + static CharacterInspectMessages GetCharacterInspectMessagesEntry( + const std::vector &character_inspect_messagess, + int character_inspect_messages_id + ) + { + for (auto &character_inspect_messages : character_inspect_messagess) { + if (character_inspect_messages.id == character_inspect_messages_id) { + return character_inspect_messages; + } + } + + return NewEntity(); + } + + static CharacterInspectMessages FindOne( + int character_inspect_messages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_inspect_messages_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_inspect_messages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_inspect_messages_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterInspectMessages character_inspect_messages_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_inspect_messages_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterInspectMessages InsertOne( + CharacterInspectMessages character_inspect_messages_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_inspect_messages_entry.id = results.LastInsertedID(); + return character_inspect_messages_entry; + } + + character_inspect_messages_entry = NewEntity(); + + return character_inspect_messages_entry; + } + + static int InsertMany( + std::vector character_inspect_messages_entries + ) + { + std::vector insert_chunks; + + for (auto &character_inspect_messages_entry: character_inspect_messages_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterInspectMessages entry{}; + + entry.id = atoi(row[0]); + entry.inspect_message = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H diff --git a/common/repositories/base/base_character_item_recast_repository.h b/common/repositories/base/base_character_item_recast_repository.h new file mode 100644 index 000000000..67ac8919c --- /dev/null +++ b/common/repositories/base/base_character_item_recast_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_ITEM_RECAST_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_ITEM_RECAST_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterItemRecastRepository { +public: + struct CharacterItemRecast { + int id; + int16 recast_type; + int timestamp; + }; + + static std::string PrimaryKey() + { + return std::string("recast_type"); + } + + static std::vector Columns() + { + return { + "id", + "recast_type", + "timestamp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_item_recast"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterItemRecast NewEntity() + { + CharacterItemRecast entry{}; + + entry.id = 0; + entry.recast_type = 0; + entry.timestamp = 0; + + return entry; + } + + static CharacterItemRecast GetCharacterItemRecastEntry( + const std::vector &character_item_recasts, + int character_item_recast_id + ) + { + for (auto &character_item_recast : character_item_recasts) { + if (character_item_recast.recast_type == character_item_recast_id) { + return character_item_recast; + } + } + + return NewEntity(); + } + + static CharacterItemRecast FindOne( + int character_item_recast_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_item_recast_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_item_recast_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_item_recast_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterItemRecast character_item_recast_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_item_recast_entry.timestamp)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_item_recast_entry.recast_type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterItemRecast InsertOne( + CharacterItemRecast character_item_recast_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_item_recast_entry.id = results.LastInsertedID(); + return character_item_recast_entry; + } + + character_item_recast_entry = NewEntity(); + + return character_item_recast_entry; + } + + static int InsertMany( + std::vector character_item_recast_entries + ) + { + std::vector insert_chunks; + + for (auto &character_item_recast_entry: character_item_recast_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterItemRecast entry{}; + + entry.id = atoi(row[0]); + entry.recast_type = atoi(row[1]); + entry.timestamp = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_ITEM_RECAST_REPOSITORY_H diff --git a/common/repositories/base/base_character_languages_repository.h b/common/repositories/base/base_character_languages_repository.h new file mode 100644 index 000000000..9589fb5c9 --- /dev/null +++ b/common/repositories/base/base_character_languages_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterLanguagesRepository { +public: + struct CharacterLanguages { + int id; + int16 lang_id; + int16 value; + }; + + static std::string PrimaryKey() + { + return std::string("lang_id"); + } + + static std::vector Columns() + { + return { + "id", + "lang_id", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_languages"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterLanguages NewEntity() + { + CharacterLanguages entry{}; + + entry.id = 0; + entry.lang_id = 0; + entry.value = 0; + + return entry; + } + + static CharacterLanguages GetCharacterLanguagesEntry( + const std::vector &character_languagess, + int character_languages_id + ) + { + for (auto &character_languages : character_languagess) { + if (character_languages.lang_id == character_languages_id) { + return character_languages; + } + } + + return NewEntity(); + } + + static CharacterLanguages FindOne( + int character_languages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_languages_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_languages_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_languages_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterLanguages character_languages_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_languages_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_languages_entry.lang_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterLanguages InsertOne( + CharacterLanguages character_languages_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_languages_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_languages_entry.id = results.LastInsertedID(); + return character_languages_entry; + } + + character_languages_entry = NewEntity(); + + return character_languages_entry; + } + + static int InsertMany( + std::vector character_languages_entries + ) + { + std::vector insert_chunks; + + for (auto &character_languages_entry: character_languages_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_languages_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLanguages entry{}; + + entry.id = atoi(row[0]); + entry.lang_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H diff --git a/common/repositories/base/base_character_leadership_abilities_repository.h b/common/repositories/base/base_character_leadership_abilities_repository.h new file mode 100644 index 000000000..aa63e3a6c --- /dev/null +++ b/common/repositories/base/base_character_leadership_abilities_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterLeadershipAbilitiesRepository { +public: + struct CharacterLeadershipAbilities { + int id; + int16 slot; + int16 rank; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "rank", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_leadership_abilities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterLeadershipAbilities NewEntity() + { + CharacterLeadershipAbilities entry{}; + + entry.id = 0; + entry.slot = 0; + entry.rank = 0; + + return entry; + } + + static CharacterLeadershipAbilities GetCharacterLeadershipAbilitiesEntry( + const std::vector &character_leadership_abilitiess, + int character_leadership_abilities_id + ) + { + for (auto &character_leadership_abilities : character_leadership_abilitiess) { + if (character_leadership_abilities.slot == character_leadership_abilities_id) { + return character_leadership_abilities; + } + } + + return NewEntity(); + } + + static CharacterLeadershipAbilities FindOne( + int character_leadership_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_leadership_abilities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_leadership_abilities_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_leadership_abilities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterLeadershipAbilities character_leadership_abilities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_leadership_abilities_entry.rank)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_leadership_abilities_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterLeadershipAbilities InsertOne( + CharacterLeadershipAbilities character_leadership_abilities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_leadership_abilities_entry.id = results.LastInsertedID(); + return character_leadership_abilities_entry; + } + + character_leadership_abilities_entry = NewEntity(); + + return character_leadership_abilities_entry; + } + + static int InsertMany( + std::vector character_leadership_abilities_entries + ) + { + std::vector insert_chunks; + + for (auto &character_leadership_abilities_entry: character_leadership_abilities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterLeadershipAbilities entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.rank = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_material_repository.h b/common/repositories/base/base_character_material_repository.h new file mode 100644 index 000000000..7a94e1b16 --- /dev/null +++ b/common/repositories/base/base_character_material_repository.h @@ -0,0 +1,348 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_MATERIAL_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_MATERIAL_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterMaterialRepository { +public: + struct CharacterMaterial { + int id; + int8 slot; + int8 blue; + int8 green; + int8 red; + int8 use_tint; + int color; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "id", + "slot", + "blue", + "green", + "red", + "use_tint", + "color", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_material"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterMaterial NewEntity() + { + CharacterMaterial entry{}; + + entry.id = 0; + entry.slot = 0; + entry.blue = 0; + entry.green = 0; + entry.red = 0; + entry.use_tint = 0; + entry.color = 0; + + return entry; + } + + static CharacterMaterial GetCharacterMaterialEntry( + const std::vector &character_materials, + int character_material_id + ) + { + for (auto &character_material : character_materials) { + if (character_material.slot == character_material_id) { + return character_material; + } + } + + return NewEntity(); + } + + static CharacterMaterial FindOne( + int character_material_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_material_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_material_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_material_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterMaterial character_material_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_material_entry.blue)); + update_values.push_back(columns[3] + " = " + std::to_string(character_material_entry.green)); + update_values.push_back(columns[4] + " = " + std::to_string(character_material_entry.red)); + update_values.push_back(columns[5] + " = " + std::to_string(character_material_entry.use_tint)); + update_values.push_back(columns[6] + " = " + std::to_string(character_material_entry.color)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_material_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterMaterial InsertOne( + CharacterMaterial character_material_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_material_entry.blue)); + insert_values.push_back(std::to_string(character_material_entry.green)); + insert_values.push_back(std::to_string(character_material_entry.red)); + insert_values.push_back(std::to_string(character_material_entry.use_tint)); + insert_values.push_back(std::to_string(character_material_entry.color)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_material_entry.id = results.LastInsertedID(); + return character_material_entry; + } + + character_material_entry = NewEntity(); + + return character_material_entry; + } + + static int InsertMany( + std::vector character_material_entries + ) + { + std::vector insert_chunks; + + for (auto &character_material_entry: character_material_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_material_entry.blue)); + insert_values.push_back(std::to_string(character_material_entry.green)); + insert_values.push_back(std::to_string(character_material_entry.red)); + insert_values.push_back(std::to_string(character_material_entry.use_tint)); + insert_values.push_back(std::to_string(character_material_entry.color)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMaterial entry{}; + + entry.id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.blue = atoi(row[2]); + entry.green = atoi(row[3]); + entry.red = atoi(row[4]); + entry.use_tint = atoi(row[5]); + entry.color = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_MATERIAL_REPOSITORY_H diff --git a/common/repositories/base/base_character_memmed_spells_repository.h b/common/repositories/base/base_character_memmed_spells_repository.h new file mode 100644 index 000000000..eb224025b --- /dev/null +++ b/common/repositories/base/base_character_memmed_spells_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_MEMMED_SPELLS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_MEMMED_SPELLS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterMemmedSpellsRepository { +public: + struct CharacterMemmedSpells { + int id; + int16 slot_id; + int16 spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_memmed_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterMemmedSpells NewEntity() + { + CharacterMemmedSpells entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterMemmedSpells GetCharacterMemmedSpellsEntry( + const std::vector &character_memmed_spellss, + int character_memmed_spells_id + ) + { + for (auto &character_memmed_spells : character_memmed_spellss) { + if (character_memmed_spells.slot_id == character_memmed_spells_id) { + return character_memmed_spells; + } + } + + return NewEntity(); + } + + static CharacterMemmedSpells FindOne( + int character_memmed_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_memmed_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_memmed_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_memmed_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterMemmedSpells character_memmed_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_memmed_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_memmed_spells_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterMemmedSpells InsertOne( + CharacterMemmedSpells character_memmed_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_memmed_spells_entry.id = results.LastInsertedID(); + return character_memmed_spells_entry; + } + + character_memmed_spells_entry = NewEntity(); + + return character_memmed_spells_entry; + } + + static int InsertMany( + std::vector character_memmed_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &character_memmed_spells_entry: character_memmed_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterMemmedSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_MEMMED_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_buffs_repository.h b/common/repositories/base/base_character_pet_buffs_repository.h new file mode 100644 index 000000000..1cd7b3f8a --- /dev/null +++ b/common/repositories/base/base_character_pet_buffs_repository.h @@ -0,0 +1,381 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_PET_BUFFS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_PET_BUFFS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterPetBuffsRepository { +public: + struct CharacterPetBuffs { + int char_id; + int pet; + int slot; + int spell_id; + int8 caster_level; + std::string castername; + int ticsremaining; + int counters; + int numhits; + int rune; + int8 instrument_mod; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "slot", + "spell_id", + "caster_level", + "castername", + "ticsremaining", + "counters", + "numhits", + "rune", + "instrument_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_buffs"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetBuffs NewEntity() + { + CharacterPetBuffs entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.slot = 0; + entry.spell_id = 0; + entry.caster_level = 0; + entry.castername = ""; + entry.ticsremaining = 0; + entry.counters = 0; + entry.numhits = 0; + entry.rune = 0; + entry.instrument_mod = 10; + + return entry; + } + + static CharacterPetBuffs GetCharacterPetBuffsEntry( + const std::vector &character_pet_buffss, + int character_pet_buffs_id + ) + { + for (auto &character_pet_buffs : character_pet_buffss) { + if (character_pet_buffs.slot == character_pet_buffs_id) { + return character_pet_buffs; + } + } + + return NewEntity(); + } + + static CharacterPetBuffs FindOne( + int character_pet_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_buffs_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5] ? row[5] : ""; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_buffs_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_buffs_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetBuffs character_pet_buffs_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_buffs_entry.spell_id)); + update_values.push_back(columns[4] + " = " + std::to_string(character_pet_buffs_entry.caster_level)); + update_values.push_back(columns[5] + " = '" + EscapeString(character_pet_buffs_entry.castername) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(character_pet_buffs_entry.ticsremaining)); + update_values.push_back(columns[7] + " = " + std::to_string(character_pet_buffs_entry.counters)); + update_values.push_back(columns[8] + " = " + std::to_string(character_pet_buffs_entry.numhits)); + update_values.push_back(columns[9] + " = " + std::to_string(character_pet_buffs_entry.rune)); + update_values.push_back(columns[10] + " = " + std::to_string(character_pet_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_buffs_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetBuffs InsertOne( + CharacterPetBuffs character_pet_buffs_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); + insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_buffs_entry.id = results.LastInsertedID(); + return character_pet_buffs_entry; + } + + character_pet_buffs_entry = NewEntity(); + + return character_pet_buffs_entry; + } + + static int InsertMany( + std::vector character_pet_buffs_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_buffs_entry: character_pet_buffs_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); + insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); + insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5] ? row[5] : ""; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetBuffs entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.spell_id = atoi(row[3]); + entry.caster_level = atoi(row[4]); + entry.castername = row[5] ? row[5] : ""; + entry.ticsremaining = atoi(row[6]); + entry.counters = atoi(row[7]); + entry.numhits = atoi(row[8]); + entry.rune = atoi(row[9]); + entry.instrument_mod = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_PET_BUFFS_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_info_repository.h b/common/repositories/base/base_character_pet_info_repository.h new file mode 100644 index 000000000..fd5c64fd6 --- /dev/null +++ b/common/repositories/base/base_character_pet_info_repository.h @@ -0,0 +1,357 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_PET_INFO_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_PET_INFO_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterPetInfoRepository { +public: + struct CharacterPetInfo { + int char_id; + int pet; + std::string petname; + int petpower; + int spell_id; + int hp; + int mana; + float size; + }; + + static std::string PrimaryKey() + { + return std::string("pet"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "petname", + "petpower", + "spell_id", + "hp", + "mana", + "size", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_info"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetInfo NewEntity() + { + CharacterPetInfo entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.petname = ""; + entry.petpower = 0; + entry.spell_id = 0; + entry.hp = 0; + entry.mana = 0; + entry.size = 0; + + return entry; + } + + static CharacterPetInfo GetCharacterPetInfoEntry( + const std::vector &character_pet_infos, + int character_pet_info_id + ) + { + for (auto &character_pet_info : character_pet_infos) { + if (character_pet_info.pet == character_pet_info_id) { + return character_pet_info; + } + } + + return NewEntity(); + } + + static CharacterPetInfo FindOne( + int character_pet_info_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_info_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2] ? row[2] : ""; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_info_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_info_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetInfo character_pet_info_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(character_pet_info_entry.petname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_info_entry.petpower)); + update_values.push_back(columns[4] + " = " + std::to_string(character_pet_info_entry.spell_id)); + update_values.push_back(columns[5] + " = " + std::to_string(character_pet_info_entry.hp)); + update_values.push_back(columns[6] + " = " + std::to_string(character_pet_info_entry.mana)); + update_values.push_back(columns[7] + " = " + std::to_string(character_pet_info_entry.size)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_info_entry.pet + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetInfo InsertOne( + CharacterPetInfo character_pet_info_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); + insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.hp)); + insert_values.push_back(std::to_string(character_pet_info_entry.mana)); + insert_values.push_back(std::to_string(character_pet_info_entry.size)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_info_entry.id = results.LastInsertedID(); + return character_pet_info_entry; + } + + character_pet_info_entry = NewEntity(); + + return character_pet_info_entry; + } + + static int InsertMany( + std::vector character_pet_info_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_info_entry: character_pet_info_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); + insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); + insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.hp)); + insert_values.push_back(std::to_string(character_pet_info_entry.mana)); + insert_values.push_back(std::to_string(character_pet_info_entry.size)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2] ? row[2] : ""; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInfo entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.petname = row[2] ? row[2] : ""; + entry.petpower = atoi(row[3]); + entry.spell_id = atoi(row[4]); + entry.hp = atoi(row[5]); + entry.mana = atoi(row[6]); + entry.size = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_PET_INFO_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_inventory_repository.h b/common/repositories/base/base_character_pet_inventory_repository.h new file mode 100644 index 000000000..f2a79f898 --- /dev/null +++ b/common/repositories/base/base_character_pet_inventory_repository.h @@ -0,0 +1,318 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_PET_INVENTORY_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_PET_INVENTORY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterPetInventoryRepository { +public: + struct CharacterPetInventory { + int char_id; + int pet; + int slot; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "char_id", + "pet", + "slot", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_pet_inventory"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPetInventory NewEntity() + { + CharacterPetInventory entry{}; + + entry.char_id = 0; + entry.pet = 0; + entry.slot = 0; + entry.item_id = 0; + + return entry; + } + + static CharacterPetInventory GetCharacterPetInventoryEntry( + const std::vector &character_pet_inventorys, + int character_pet_inventory_id + ) + { + for (auto &character_pet_inventory : character_pet_inventorys) { + if (character_pet_inventory.slot == character_pet_inventory_id) { + return character_pet_inventory; + } + } + + return NewEntity(); + } + + static CharacterPetInventory FindOne( + int character_pet_inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_pet_inventory_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_pet_inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_pet_inventory_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPetInventory character_pet_inventory_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(character_pet_inventory_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_pet_inventory_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPetInventory InsertOne( + CharacterPetInventory character_pet_inventory_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_pet_inventory_entry.id = results.LastInsertedID(); + return character_pet_inventory_entry; + } + + character_pet_inventory_entry = NewEntity(); + + return character_pet_inventory_entry; + } + + static int InsertMany( + std::vector character_pet_inventory_entries + ) + { + std::vector insert_chunks; + + for (auto &character_pet_inventory_entry: character_pet_inventory_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPetInventory entry{}; + + entry.char_id = atoi(row[0]); + entry.pet = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_PET_INVENTORY_REPOSITORY_H diff --git a/common/repositories/base/base_character_potionbelt_repository.h b/common/repositories/base/base_character_potionbelt_repository.h new file mode 100644 index 000000000..9c017a009 --- /dev/null +++ b/common/repositories/base/base_character_potionbelt_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_POTIONBELT_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_POTIONBELT_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterPotionbeltRepository { +public: + struct CharacterPotionbelt { + int id; + int8 potion_id; + int item_id; + int icon; + }; + + static std::string PrimaryKey() + { + return std::string("potion_id"); + } + + static std::vector Columns() + { + return { + "id", + "potion_id", + "item_id", + "icon", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_potionbelt"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterPotionbelt NewEntity() + { + CharacterPotionbelt entry{}; + + entry.id = 0; + entry.potion_id = 0; + entry.item_id = 0; + entry.icon = 0; + + return entry; + } + + static CharacterPotionbelt GetCharacterPotionbeltEntry( + const std::vector &character_potionbelts, + int character_potionbelt_id + ) + { + for (auto &character_potionbelt : character_potionbelts) { + if (character_potionbelt.potion_id == character_potionbelt_id) { + return character_potionbelt; + } + } + + return NewEntity(); + } + + static CharacterPotionbelt FindOne( + int character_potionbelt_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_potionbelt_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_potionbelt_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_potionbelt_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterPotionbelt character_potionbelt_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_potionbelt_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(character_potionbelt_entry.icon)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_potionbelt_entry.potion_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterPotionbelt InsertOne( + CharacterPotionbelt character_potionbelt_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_potionbelt_entry.id = results.LastInsertedID(); + return character_potionbelt_entry; + } + + character_potionbelt_entry = NewEntity(); + + return character_potionbelt_entry; + } + + static int InsertMany( + std::vector character_potionbelt_entries + ) + { + std::vector insert_chunks; + + for (auto &character_potionbelt_entry: character_potionbelt_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterPotionbelt entry{}; + + entry.id = atoi(row[0]); + entry.potion_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.icon = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_POTIONBELT_REPOSITORY_H diff --git a/common/repositories/base/base_character_skills_repository.h b/common/repositories/base/base_character_skills_repository.h new file mode 100644 index 000000000..4298c7e5e --- /dev/null +++ b/common/repositories/base/base_character_skills_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_SKILLS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_SKILLS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterSkillsRepository { +public: + struct CharacterSkills { + int id; + int16 skill_id; + int16 value; + }; + + static std::string PrimaryKey() + { + return std::string("skill_id"); + } + + static std::vector Columns() + { + return { + "id", + "skill_id", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_skills"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterSkills NewEntity() + { + CharacterSkills entry{}; + + entry.id = 0; + entry.skill_id = 0; + entry.value = 0; + + return entry; + } + + static CharacterSkills GetCharacterSkillsEntry( + const std::vector &character_skillss, + int character_skills_id + ) + { + for (auto &character_skills : character_skillss) { + if (character_skills.skill_id == character_skills_id) { + return character_skills; + } + } + + return NewEntity(); + } + + static CharacterSkills FindOne( + int character_skills_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_skills_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_skills_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_skills_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterSkills character_skills_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_skills_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_skills_entry.skill_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterSkills InsertOne( + CharacterSkills character_skills_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_skills_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_skills_entry.id = results.LastInsertedID(); + return character_skills_entry; + } + + character_skills_entry = NewEntity(); + + return character_skills_entry; + } + + static int InsertMany( + std::vector character_skills_entries + ) + { + std::vector insert_chunks; + + for (auto &character_skills_entry: character_skills_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_skills_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSkills entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.value = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_SKILLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_spells_repository.h b/common/repositories/base/base_character_spells_repository.h new file mode 100644 index 000000000..0e9a8c182 --- /dev/null +++ b/common/repositories/base/base_character_spells_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_SPELLS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_SPELLS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterSpellsRepository { +public: + struct CharacterSpells { + int id; + int16 slot_id; + int16 spell_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "id", + "slot_id", + "spell_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterSpells NewEntity() + { + CharacterSpells entry{}; + + entry.id = 0; + entry.slot_id = 0; + entry.spell_id = 0; + + return entry; + } + + static CharacterSpells GetCharacterSpellsEntry( + const std::vector &character_spellss, + int character_spells_id + ) + { + for (auto &character_spells : character_spellss) { + if (character_spells.slot_id == character_spells_id) { + return character_spells; + } + } + + return NewEntity(); + } + + static CharacterSpells FindOne( + int character_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_spells_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterSpells character_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_spells_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterSpells InsertOne( + CharacterSpells character_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_spells_entry.spell_id)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_spells_entry.id = results.LastInsertedID(); + return character_spells_entry; + } + + character_spells_entry = NewEntity(); + + return character_spells_entry; + } + + static int InsertMany( + std::vector character_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &character_spells_entry: character_spells_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_spells_entry.spell_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterSpells entry{}; + + entry.id = atoi(row[0]); + entry.slot_id = atoi(row[1]); + entry.spell_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_tasks_repository.h b/common/repositories/base/base_character_tasks_repository.h new file mode 100644 index 000000000..362a81e37 --- /dev/null +++ b/common/repositories/base/base_character_tasks_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterTasksRepository { +public: + struct CharacterTasks { + int charid; + int taskid; + int slot; + int8 type; + int acceptedtime; + }; + + static std::string PrimaryKey() + { + return std::string("taskid"); + } + + static std::vector Columns() + { + return { + "charid", + "taskid", + "slot", + "type", + "acceptedtime", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterTasks NewEntity() + { + CharacterTasks entry{}; + + entry.charid = 0; + entry.taskid = 0; + entry.slot = 0; + entry.type = 0; + entry.acceptedtime = 0; + + return entry; + } + + static CharacterTasks GetCharacterTasksEntry( + const std::vector &character_taskss, + int character_tasks_id + ) + { + for (auto &character_tasks : character_taskss) { + if (character_tasks.taskid == character_tasks_id) { + return character_tasks; + } + } + + return NewEntity(); + } + + static CharacterTasks FindOne( + int character_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterTasks character_tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(character_tasks_entry.slot)); + update_values.push_back(columns[3] + " = " + std::to_string(character_tasks_entry.type)); + update_values.push_back(columns[4] + " = " + std::to_string(character_tasks_entry.acceptedtime)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_tasks_entry.taskid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterTasks InsertOne( + CharacterTasks character_tasks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tasks_entry.slot)); + insert_values.push_back(std::to_string(character_tasks_entry.type)); + insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_tasks_entry.id = results.LastInsertedID(); + return character_tasks_entry; + } + + character_tasks_entry = NewEntity(); + + return character_tasks_entry; + } + + static int InsertMany( + std::vector character_tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &character_tasks_entry: character_tasks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tasks_entry.slot)); + insert_values.push_back(std::to_string(character_tasks_entry.type)); + insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTasks entry{}; + + entry.charid = atoi(row[0]); + entry.taskid = atoi(row[1]); + entry.slot = atoi(row[2]); + entry.type = atoi(row[3]); + entry.acceptedtime = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_character_tribute_repository.h b/common/repositories/base/base_character_tribute_repository.h new file mode 100644 index 000000000..8c3d318c8 --- /dev/null +++ b/common/repositories/base/base_character_tribute_repository.h @@ -0,0 +1,318 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H +#define EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCharacterTributeRepository { +public: + struct CharacterTribute { + int id; + int8 tier; + int tribute; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "tier", + "tribute", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("character_tribute"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CharacterTribute NewEntity() + { + CharacterTribute entry{}; + + entry.id = 0; + entry.tier = 0; + entry.tribute = 0; + + return entry; + } + + static CharacterTribute GetCharacterTributeEntry( + const std::vector &character_tributes, + int character_tribute_id + ) + { + for (auto &character_tribute : character_tributes) { + if (character_tribute.id == character_tribute_id) { + return character_tribute; + } + } + + return NewEntity(); + } + + static CharacterTribute FindOne( + int character_tribute_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + character_tribute_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int character_tribute_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + character_tribute_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CharacterTribute character_tribute_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(character_tribute_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_tribute_entry.tier)); + update_values.push_back(columns[2] + " = " + std::to_string(character_tribute_entry.tribute)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + character_tribute_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CharacterTribute InsertOne( + CharacterTribute character_tribute_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tribute_entry.id)); + insert_values.push_back(std::to_string(character_tribute_entry.tier)); + insert_values.push_back(std::to_string(character_tribute_entry.tribute)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + character_tribute_entry.id = results.LastInsertedID(); + return character_tribute_entry; + } + + character_tribute_entry = NewEntity(); + + return character_tribute_entry; + } + + static int InsertMany( + std::vector character_tribute_entries + ) + { + std::vector insert_chunks; + + for (auto &character_tribute_entry: character_tribute_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(character_tribute_entry.id)); + insert_values.push_back(std::to_string(character_tribute_entry.tier)); + insert_values.push_back(std::to_string(character_tribute_entry.tribute)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CharacterTribute entry{}; + + entry.id = atoi(row[0]); + entry.tier = atoi(row[1]); + entry.tribute = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/base/base_chatchannels_repository.h b/common/repositories/base/base_chatchannels_repository.h new file mode 100644 index 000000000..680e6a4bb --- /dev/null +++ b/common/repositories/base/base_chatchannels_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CHATCHANNELS_REPOSITORY_H +#define EQEMU_BASE_CHATCHANNELS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseChatchannelsRepository { +public: + struct Chatchannels { + std::string name; + std::string owner; + std::string password; + int minstatus; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "owner", + "password", + "minstatus", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("chatchannels"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Chatchannels NewEntity() + { + Chatchannels entry{}; + + entry.name = ""; + entry.owner = ""; + entry.password = ""; + entry.minstatus = 0; + + return entry; + } + + static Chatchannels GetChatchannelsEntry( + const std::vector &chatchannelss, + int chatchannels_id + ) + { + for (auto &chatchannels : chatchannelss) { + if (chatchannels.name == chatchannels_id) { + return chatchannels; + } + } + + return NewEntity(); + } + + static Chatchannels FindOne( + int chatchannels_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + chatchannels_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Chatchannels entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; + entry.minstatus = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int chatchannels_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + chatchannels_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Chatchannels chatchannels_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(chatchannels_entry.owner) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(chatchannels_entry.password) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(chatchannels_entry.minstatus)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + chatchannels_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Chatchannels InsertOne( + Chatchannels chatchannels_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); + insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); + insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + chatchannels_entry.id = results.LastInsertedID(); + return chatchannels_entry; + } + + chatchannels_entry = NewEntity(); + + return chatchannels_entry; + } + + static int InsertMany( + std::vector chatchannels_entries + ) + { + std::vector insert_chunks; + + for (auto &chatchannels_entry: chatchannels_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); + insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); + insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Chatchannels entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; + entry.minstatus = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Chatchannels entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.owner = row[1] ? row[1] : ""; + entry.password = row[2] ? row[2] : ""; + entry.minstatus = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CHATCHANNELS_REPOSITORY_H diff --git a/common/repositories/base/base_command_settings_repository.h b/common/repositories/base/base_command_settings_repository.h new file mode 100644 index 000000000..98233bdd7 --- /dev/null +++ b/common/repositories/base/base_command_settings_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H +#define EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCommandSettingsRepository { +public: + struct CommandSettings { + std::string command; + int access; + std::string aliases; + }; + + static std::string PrimaryKey() + { + return std::string("command"); + } + + static std::vector Columns() + { + return { + "command", + "access", + "aliases", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("command_settings"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CommandSettings NewEntity() + { + CommandSettings entry{}; + + entry.command = ""; + entry.access = 0; + entry.aliases = ""; + + return entry; + } + + static CommandSettings GetCommandSettingsEntry( + const std::vector &command_settingss, + int command_settings_id + ) + { + for (auto &command_settings : command_settingss) { + if (command_settings.command == command_settings_id) { + return command_settings; + } + } + + return NewEntity(); + } + + static CommandSettings FindOne( + int command_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + command_settings_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CommandSettings entry{}; + + entry.command = row[0] ? row[0] : ""; + entry.access = atoi(row[1]); + entry.aliases = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int command_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + command_settings_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CommandSettings command_settings_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(command_settings_entry.access)); + update_values.push_back(columns[2] + " = '" + EscapeString(command_settings_entry.aliases) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + command_settings_entry.command + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CommandSettings InsertOne( + CommandSettings command_settings_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(command_settings_entry.access)); + insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + command_settings_entry.id = results.LastInsertedID(); + return command_settings_entry; + } + + command_settings_entry = NewEntity(); + + return command_settings_entry; + } + + static int InsertMany( + std::vector command_settings_entries + ) + { + std::vector insert_chunks; + + for (auto &command_settings_entry: command_settings_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(command_settings_entry.access)); + insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CommandSettings entry{}; + + entry.command = row[0] ? row[0] : ""; + entry.access = atoi(row[1]); + entry.aliases = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CommandSettings entry{}; + + entry.command = row[0] ? row[0] : ""; + entry.access = atoi(row[1]); + entry.aliases = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H diff --git a/common/repositories/base/base_completed_tasks_repository.h b/common/repositories/base/base_completed_tasks_repository.h new file mode 100644 index 000000000..5b2ddfd07 --- /dev/null +++ b/common/repositories/base/base_completed_tasks_repository.h @@ -0,0 +1,318 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H +#define EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseCompletedTasksRepository { +public: + struct CompletedTasks { + int charid; + int completedtime; + int taskid; + int activityid; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "charid", + "completedtime", + "taskid", + "activityid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("completed_tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static CompletedTasks NewEntity() + { + CompletedTasks entry{}; + + entry.charid = 0; + entry.completedtime = 0; + entry.taskid = 0; + entry.activityid = 0; + + return entry; + } + + static CompletedTasks GetCompletedTasksEntry( + const std::vector &completed_taskss, + int completed_tasks_id + ) + { + for (auto &completed_tasks : completed_taskss) { + if (completed_tasks.activityid == completed_tasks_id) { + return completed_tasks; + } + } + + return NewEntity(); + } + + static CompletedTasks FindOne( + int completed_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + completed_tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int completed_tasks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + completed_tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + CompletedTasks completed_tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + completed_tasks_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static CompletedTasks InsertOne( + CompletedTasks completed_tasks_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + completed_tasks_entry.id = results.LastInsertedID(); + return completed_tasks_entry; + } + + completed_tasks_entry = NewEntity(); + + return completed_tasks_entry; + } + + static int InsertMany( + std::vector completed_tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &completed_tasks_entry: completed_tasks_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + CompletedTasks entry{}; + + entry.charid = atoi(row[0]); + entry.completedtime = atoi(row[1]); + entry.taskid = atoi(row[2]); + entry.activityid = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_data_buckets_repository.h b/common/repositories/base/base_data_buckets_repository.h new file mode 100644 index 000000000..a3704fb90 --- /dev/null +++ b/common/repositories/base/base_data_buckets_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H +#define EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseDataBucketsRepository { +public: + struct DataBuckets { + int id; + std::string key; + std::string value; + int expires; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "key", + "value", + "expires", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("data_buckets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DataBuckets NewEntity() + { + DataBuckets entry{}; + + entry.id = 0; + entry.key = ""; + entry.value = ""; + entry.expires = 0; + + return entry; + } + + static DataBuckets GetDataBucketsEntry( + const std::vector &data_bucketss, + int data_buckets_id + ) + { + for (auto &data_buckets : data_bucketss) { + if (data_buckets.id == data_buckets_id) { + return data_buckets; + } + } + + return NewEntity(); + } + + static DataBuckets FindOne( + int data_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + data_buckets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + entry.expires = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int data_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + data_buckets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DataBuckets data_buckets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(data_buckets_entry.key) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(data_buckets_entry.value) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(data_buckets_entry.expires)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + data_buckets_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DataBuckets InsertOne( + DataBuckets data_buckets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); + insert_values.push_back(std::to_string(data_buckets_entry.expires)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + data_buckets_entry.id = results.LastInsertedID(); + return data_buckets_entry; + } + + data_buckets_entry = NewEntity(); + + return data_buckets_entry; + } + + static int InsertMany( + std::vector data_buckets_entries + ) + { + std::vector insert_chunks; + + for (auto &data_buckets_entry: data_buckets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); + insert_values.push_back(std::to_string(data_buckets_entry.expires)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + entry.expires = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DataBuckets entry{}; + + entry.id = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + entry.expires = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H diff --git a/common/repositories/base/base_db_str_repository.h b/common/repositories/base/base_db_str_repository.h new file mode 100644 index 000000000..9268f9647 --- /dev/null +++ b/common/repositories/base/base_db_str_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_DB_STR_REPOSITORY_H +#define EQEMU_BASE_DB_STR_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseDbStrRepository { +public: + struct DbStr { + int id; + int type; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("db_str"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DbStr NewEntity() + { + DbStr entry{}; + + entry.id = 0; + entry.type = 0; + entry.value = ""; + + return entry; + } + + static DbStr GetDbStrEntry( + const std::vector &db_strs, + int db_str_id + ) + { + for (auto &db_str : db_strs) { + if (db_str.type == db_str_id) { + return db_str; + } + } + + return NewEntity(); + } + + static DbStr FindOne( + int db_str_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + db_str_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int db_str_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + db_str_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DbStr db_str_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(db_str_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + db_str_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DbStr InsertOne( + DbStr db_str_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + db_str_entry.id = results.LastInsertedID(); + return db_str_entry; + } + + db_str_entry = NewEntity(); + + return db_str_entry; + } + + static int InsertMany( + std::vector db_str_entries + ) + { + std::vector insert_chunks; + + for (auto &db_str_entry: db_str_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DbStr entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_DB_STR_REPOSITORY_H diff --git a/common/repositories/base/base_discovered_items_repository.h b/common/repositories/base/base_discovered_items_repository.h new file mode 100644 index 000000000..2c7d88ddb --- /dev/null +++ b/common/repositories/base/base_discovered_items_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H +#define EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseDiscoveredItemsRepository { +public: + struct DiscoveredItems { + int item_id; + std::string char_name; + int discovered_date; + int account_status; + }; + + static std::string PrimaryKey() + { + return std::string("item_id"); + } + + static std::vector Columns() + { + return { + "item_id", + "char_name", + "discovered_date", + "account_status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("discovered_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static DiscoveredItems NewEntity() + { + DiscoveredItems entry{}; + + entry.item_id = 0; + entry.char_name = ""; + entry.discovered_date = 0; + entry.account_status = 0; + + return entry; + } + + static DiscoveredItems GetDiscoveredItemsEntry( + const std::vector &discovered_itemss, + int discovered_items_id + ) + { + for (auto &discovered_items : discovered_itemss) { + if (discovered_items.item_id == discovered_items_id) { + return discovered_items; + } + } + + return NewEntity(); + } + + static DiscoveredItems FindOne( + int discovered_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + discovered_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1] ? row[1] : ""; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int discovered_items_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + discovered_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + DiscoveredItems discovered_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(discovered_items_entry.char_name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(discovered_items_entry.discovered_date)); + update_values.push_back(columns[3] + " = " + std::to_string(discovered_items_entry.account_status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + discovered_items_entry.item_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static DiscoveredItems InsertOne( + DiscoveredItems discovered_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); + insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); + insert_values.push_back(std::to_string(discovered_items_entry.account_status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + discovered_items_entry.id = results.LastInsertedID(); + return discovered_items_entry; + } + + discovered_items_entry = NewEntity(); + + return discovered_items_entry; + } + + static int InsertMany( + std::vector discovered_items_entries + ) + { + std::vector insert_chunks; + + for (auto &discovered_items_entry: discovered_items_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); + insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); + insert_values.push_back(std::to_string(discovered_items_entry.account_status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1] ? row[1] : ""; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + DiscoveredItems entry{}; + + entry.item_id = atoi(row[0]); + entry.char_name = row[1] ? row[1] : ""; + entry.discovered_date = atoi(row[2]); + entry.account_status = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h new file mode 100644 index 000000000..885c931b9 --- /dev/null +++ b/common/repositories/base/base_doors_repository.h @@ -0,0 +1,594 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_DOORS_REPOSITORY_H +#define EQEMU_BASE_DOORS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseDoorsRepository { +public: + struct Doors { + int id; + int16 doorid; + std::string zone; + int16 version; + std::string name; + float pos_y; + float pos_x; + float pos_z; + float heading; + int16 opentype; + int16 guild; + int16 lockpick; + int keyitem; + int8 nokeyring; + int16 triggerdoor; + int16 triggertype; + int8 disable_timer; + int16 doorisopen; + int door_param; + std::string dest_zone; + int dest_instance; + float dest_x; + float dest_y; + float dest_z; + float dest_heading; + int invert_state; + int incline; + int16 size; + float buffer; + int client_version_mask; + int16 is_ldon_door; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "doorid", + "zone", + "version", + "name", + "pos_y", + "pos_x", + "pos_z", + "heading", + "opentype", + "guild", + "lockpick", + "keyitem", + "nokeyring", + "triggerdoor", + "triggertype", + "disable_timer", + "doorisopen", + "door_param", + "dest_zone", + "dest_instance", + "dest_x", + "dest_y", + "dest_z", + "dest_heading", + "invert_state", + "incline", + "size", + "buffer", + "client_version_mask", + "is_ldon_door", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("doors"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Doors NewEntity() + { + Doors entry{}; + + entry.id = 0; + entry.doorid = 0; + entry.zone = ""; + entry.version = 0; + entry.name = ""; + entry.pos_y = 0; + entry.pos_x = 0; + entry.pos_z = 0; + entry.heading = 0; + entry.opentype = 0; + entry.guild = 0; + entry.lockpick = 0; + entry.keyitem = 0; + entry.nokeyring = 0; + entry.triggerdoor = 0; + entry.triggertype = 0; + entry.disable_timer = 0; + entry.doorisopen = 0; + entry.door_param = 0; + entry.dest_zone = "NONE"; + entry.dest_instance = 0; + entry.dest_x = 0; + entry.dest_y = 0; + entry.dest_z = 0; + entry.dest_heading = 0; + entry.invert_state = 0; + entry.incline = 0; + entry.size = 100; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + entry.is_ldon_door = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Doors GetDoorsEntry( + const std::vector &doorss, + int doors_id + ) + { + for (auto &doors : doorss) { + if (doors.id == doors_id) { + return doors; + } + } + + return NewEntity(); + } + + static Doors FindOne( + int doors_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + doors_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int doors_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + doors_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Doors doors_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(doors_entry.doorid)); + update_values.push_back(columns[2] + " = '" + EscapeString(doors_entry.zone) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(doors_entry.version)); + update_values.push_back(columns[4] + " = '" + EscapeString(doors_entry.name) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(doors_entry.pos_y)); + update_values.push_back(columns[6] + " = " + std::to_string(doors_entry.pos_x)); + update_values.push_back(columns[7] + " = " + std::to_string(doors_entry.pos_z)); + update_values.push_back(columns[8] + " = " + std::to_string(doors_entry.heading)); + update_values.push_back(columns[9] + " = " + std::to_string(doors_entry.opentype)); + update_values.push_back(columns[10] + " = " + std::to_string(doors_entry.guild)); + update_values.push_back(columns[11] + " = " + std::to_string(doors_entry.lockpick)); + update_values.push_back(columns[12] + " = " + std::to_string(doors_entry.keyitem)); + update_values.push_back(columns[13] + " = " + std::to_string(doors_entry.nokeyring)); + update_values.push_back(columns[14] + " = " + std::to_string(doors_entry.triggerdoor)); + update_values.push_back(columns[15] + " = " + std::to_string(doors_entry.triggertype)); + update_values.push_back(columns[16] + " = " + std::to_string(doors_entry.disable_timer)); + update_values.push_back(columns[17] + " = " + std::to_string(doors_entry.doorisopen)); + update_values.push_back(columns[18] + " = " + std::to_string(doors_entry.door_param)); + update_values.push_back(columns[19] + " = '" + EscapeString(doors_entry.dest_zone) + "'"); + update_values.push_back(columns[20] + " = " + std::to_string(doors_entry.dest_instance)); + update_values.push_back(columns[21] + " = " + std::to_string(doors_entry.dest_x)); + update_values.push_back(columns[22] + " = " + std::to_string(doors_entry.dest_y)); + update_values.push_back(columns[23] + " = " + std::to_string(doors_entry.dest_z)); + update_values.push_back(columns[24] + " = " + std::to_string(doors_entry.dest_heading)); + update_values.push_back(columns[25] + " = " + std::to_string(doors_entry.invert_state)); + update_values.push_back(columns[26] + " = " + std::to_string(doors_entry.incline)); + update_values.push_back(columns[27] + " = " + std::to_string(doors_entry.size)); + update_values.push_back(columns[28] + " = " + std::to_string(doors_entry.buffer)); + update_values.push_back(columns[29] + " = " + std::to_string(doors_entry.client_version_mask)); + update_values.push_back(columns[30] + " = " + std::to_string(doors_entry.is_ldon_door)); + update_values.push_back(columns[31] + " = " + std::to_string(doors_entry.min_expansion)); + update_values.push_back(columns[32] + " = " + std::to_string(doors_entry.max_expansion)); + update_values.push_back(columns[33] + " = '" + EscapeString(doors_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + doors_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Doors InsertOne( + Doors doors_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(doors_entry.doorid)); + insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.version)); + insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); + insert_values.push_back(std::to_string(doors_entry.pos_y)); + insert_values.push_back(std::to_string(doors_entry.pos_x)); + insert_values.push_back(std::to_string(doors_entry.pos_z)); + insert_values.push_back(std::to_string(doors_entry.heading)); + insert_values.push_back(std::to_string(doors_entry.opentype)); + insert_values.push_back(std::to_string(doors_entry.guild)); + insert_values.push_back(std::to_string(doors_entry.lockpick)); + insert_values.push_back(std::to_string(doors_entry.keyitem)); + insert_values.push_back(std::to_string(doors_entry.nokeyring)); + insert_values.push_back(std::to_string(doors_entry.triggerdoor)); + insert_values.push_back(std::to_string(doors_entry.triggertype)); + insert_values.push_back(std::to_string(doors_entry.disable_timer)); + insert_values.push_back(std::to_string(doors_entry.doorisopen)); + insert_values.push_back(std::to_string(doors_entry.door_param)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_instance)); + insert_values.push_back(std::to_string(doors_entry.dest_x)); + insert_values.push_back(std::to_string(doors_entry.dest_y)); + insert_values.push_back(std::to_string(doors_entry.dest_z)); + insert_values.push_back(std::to_string(doors_entry.dest_heading)); + insert_values.push_back(std::to_string(doors_entry.invert_state)); + insert_values.push_back(std::to_string(doors_entry.incline)); + insert_values.push_back(std::to_string(doors_entry.size)); + insert_values.push_back(std::to_string(doors_entry.buffer)); + insert_values.push_back(std::to_string(doors_entry.client_version_mask)); + insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); + insert_values.push_back(std::to_string(doors_entry.min_expansion)); + insert_values.push_back(std::to_string(doors_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(doors_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + doors_entry.id = results.LastInsertedID(); + return doors_entry; + } + + doors_entry = NewEntity(); + + return doors_entry; + } + + static int InsertMany( + std::vector doors_entries + ) + { + std::vector insert_chunks; + + for (auto &doors_entry: doors_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(doors_entry.doorid)); + insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.version)); + insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); + insert_values.push_back(std::to_string(doors_entry.pos_y)); + insert_values.push_back(std::to_string(doors_entry.pos_x)); + insert_values.push_back(std::to_string(doors_entry.pos_z)); + insert_values.push_back(std::to_string(doors_entry.heading)); + insert_values.push_back(std::to_string(doors_entry.opentype)); + insert_values.push_back(std::to_string(doors_entry.guild)); + insert_values.push_back(std::to_string(doors_entry.lockpick)); + insert_values.push_back(std::to_string(doors_entry.keyitem)); + insert_values.push_back(std::to_string(doors_entry.nokeyring)); + insert_values.push_back(std::to_string(doors_entry.triggerdoor)); + insert_values.push_back(std::to_string(doors_entry.triggertype)); + insert_values.push_back(std::to_string(doors_entry.disable_timer)); + insert_values.push_back(std::to_string(doors_entry.doorisopen)); + insert_values.push_back(std::to_string(doors_entry.door_param)); + insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); + insert_values.push_back(std::to_string(doors_entry.dest_instance)); + insert_values.push_back(std::to_string(doors_entry.dest_x)); + insert_values.push_back(std::to_string(doors_entry.dest_y)); + insert_values.push_back(std::to_string(doors_entry.dest_z)); + insert_values.push_back(std::to_string(doors_entry.dest_heading)); + insert_values.push_back(std::to_string(doors_entry.invert_state)); + insert_values.push_back(std::to_string(doors_entry.incline)); + insert_values.push_back(std::to_string(doors_entry.size)); + insert_values.push_back(std::to_string(doors_entry.buffer)); + insert_values.push_back(std::to_string(doors_entry.client_version_mask)); + insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); + insert_values.push_back(std::to_string(doors_entry.min_expansion)); + insert_values.push_back(std::to_string(doors_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(doors_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Doors entry{}; + + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = atof(row[5]); + entry.pos_x = atof(row[6]); + entry.pos_z = atof(row[7]); + entry.heading = atof(row[8]); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = atof(row[21]); + entry.dest_y = atof(row[22]); + entry.dest_z = atof(row[23]); + entry.dest_heading = atof(row[24]); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = atof(row[28]); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_DOORS_REPOSITORY_H diff --git a/common/repositories/base/base_eventlog_repository.h b/common/repositories/base/base_eventlog_repository.h new file mode 100644 index 000000000..069a56667 --- /dev/null +++ b/common/repositories/base/base_eventlog_repository.h @@ -0,0 +1,378 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_EVENTLOG_REPOSITORY_H +#define EQEMU_BASE_EVENTLOG_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseEventlogRepository { +public: + struct Eventlog { + int id; + std::string accountname; + int accountid; + int status; + std::string charname; + std::string target; + std::string time; + std::string descriptiontype; + std::string description; + int event_nid; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "accountname", + "accountid", + "status", + "charname", + "target", + "time", + "descriptiontype", + "description", + "event_nid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("eventlog"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Eventlog NewEntity() + { + Eventlog entry{}; + + entry.id = 0; + entry.accountname = ""; + entry.accountid = 0; + entry.status = 0; + entry.charname = ""; + entry.target = "None"; + entry.time = current_timestamp(); + entry.descriptiontype = ""; + entry.description = ""; + entry.event_nid = 0; + + return entry; + } + + static Eventlog GetEventlogEntry( + const std::vector &eventlogs, + int eventlog_id + ) + { + for (auto &eventlog : eventlogs) { + if (eventlog.id == eventlog_id) { + return eventlog; + } + } + + return NewEntity(); + } + + static Eventlog FindOne( + int eventlog_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + eventlog_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1] ? row[1] : ""; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; + entry.event_nid = atoi(row[9]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int eventlog_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + eventlog_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Eventlog eventlog_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(eventlog_entry.accountname) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(eventlog_entry.accountid)); + update_values.push_back(columns[3] + " = " + std::to_string(eventlog_entry.status)); + update_values.push_back(columns[4] + " = '" + EscapeString(eventlog_entry.charname) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(eventlog_entry.target) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(eventlog_entry.time) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(eventlog_entry.descriptiontype) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(eventlog_entry.description) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(eventlog_entry.event_nid)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + eventlog_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Eventlog InsertOne( + Eventlog eventlog_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.accountid)); + insert_values.push_back(std::to_string(eventlog_entry.status)); + insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.event_nid)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + eventlog_entry.id = results.LastInsertedID(); + return eventlog_entry; + } + + eventlog_entry = NewEntity(); + + return eventlog_entry; + } + + static int InsertMany( + std::vector eventlog_entries + ) + { + std::vector insert_chunks; + + for (auto &eventlog_entry: eventlog_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.accountid)); + insert_values.push_back(std::to_string(eventlog_entry.status)); + insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); + insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); + insert_values.push_back(std::to_string(eventlog_entry.event_nid)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1] ? row[1] : ""; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; + entry.event_nid = atoi(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Eventlog entry{}; + + entry.id = atoi(row[0]); + entry.accountname = row[1] ? row[1] : ""; + entry.accountid = atoi(row[2]); + entry.status = atoi(row[3]); + entry.charname = row[4] ? row[4] : ""; + entry.target = row[5] ? row[5] : ""; + entry.time = row[6] ? row[6] : ""; + entry.descriptiontype = row[7] ? row[7] : ""; + entry.description = row[8] ? row[8] : ""; + entry.event_nid = atoi(row[9]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_EVENTLOG_REPOSITORY_H diff --git a/common/repositories/base/base_faction_base_data_repository.h b/common/repositories/base/base_faction_base_data_repository.h new file mode 100644 index 000000000..b32fdff98 --- /dev/null +++ b/common/repositories/base/base_faction_base_data_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H +#define EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFactionBaseDataRepository { +public: + struct FactionBaseData { + int16 client_faction_id; + int16 min; + int16 max; + int16 unk_hero1; + int16 unk_hero2; + int16 unk_hero3; + }; + + static std::string PrimaryKey() + { + return std::string("client_faction_id"); + } + + static std::vector Columns() + { + return { + "client_faction_id", + "min", + "max", + "unk_hero1", + "unk_hero2", + "unk_hero3", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_base_data"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionBaseData NewEntity() + { + FactionBaseData entry{}; + + entry.client_faction_id = 0; + entry.min = -2000; + entry.max = 2000; + entry.unk_hero1 = 0; + entry.unk_hero2 = 0; + entry.unk_hero3 = 0; + + return entry; + } + + static FactionBaseData GetFactionBaseDataEntry( + const std::vector &faction_base_datas, + int faction_base_data_id + ) + { + for (auto &faction_base_data : faction_base_datas) { + if (faction_base_data.client_faction_id == faction_base_data_id) { + return faction_base_data; + } + } + + return NewEntity(); + } + + static FactionBaseData FindOne( + int faction_base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_base_data_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_base_data_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_base_data_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionBaseData faction_base_data_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(faction_base_data_entry.min)); + update_values.push_back(columns[2] + " = " + std::to_string(faction_base_data_entry.max)); + update_values.push_back(columns[3] + " = " + std::to_string(faction_base_data_entry.unk_hero1)); + update_values.push_back(columns[4] + " = " + std::to_string(faction_base_data_entry.unk_hero2)); + update_values.push_back(columns[5] + " = " + std::to_string(faction_base_data_entry.unk_hero3)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_base_data_entry.client_faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionBaseData InsertOne( + FactionBaseData faction_base_data_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_base_data_entry.min)); + insert_values.push_back(std::to_string(faction_base_data_entry.max)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_base_data_entry.id = results.LastInsertedID(); + return faction_base_data_entry; + } + + faction_base_data_entry = NewEntity(); + + return faction_base_data_entry; + } + + static int InsertMany( + std::vector faction_base_data_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_base_data_entry: faction_base_data_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_base_data_entry.min)); + insert_values.push_back(std::to_string(faction_base_data_entry.max)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); + insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionBaseData entry{}; + + entry.client_faction_id = atoi(row[0]); + entry.min = atoi(row[1]); + entry.max = atoi(row[2]); + entry.unk_hero1 = atoi(row[3]); + entry.unk_hero2 = atoi(row[4]); + entry.unk_hero3 = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_faction_list_mod_repository.h b/common/repositories/base/base_faction_list_mod_repository.h new file mode 100644 index 000000000..8cff9e393 --- /dev/null +++ b/common/repositories/base/base_faction_list_mod_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H +#define EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFactionListModRepository { +public: + struct FactionListMod { + int id; + int faction_id; + int16 mod; + std::string mod_name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "faction_id", + "mod", + "mod_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_list_mod"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionListMod NewEntity() + { + FactionListMod entry{}; + + entry.id = 0; + entry.faction_id = 0; + entry.mod = 0; + entry.mod_name = ""; + + return entry; + } + + static FactionListMod GetFactionListModEntry( + const std::vector &faction_list_mods, + int faction_list_mod_id + ) + { + for (auto &faction_list_mod : faction_list_mods) { + if (faction_list_mod.id == faction_list_mod_id) { + return faction_list_mod; + } + } + + return NewEntity(); + } + + static FactionListMod FindOne( + int faction_list_mod_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_list_mod_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_list_mod_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_list_mod_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionListMod faction_list_mod_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(faction_list_mod_entry.faction_id)); + update_values.push_back(columns[2] + " = " + std::to_string(faction_list_mod_entry.mod)); + update_values.push_back(columns[3] + " = '" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_list_mod_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionListMod InsertOne( + FactionListMod faction_list_mod_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); + insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); + insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_list_mod_entry.id = results.LastInsertedID(); + return faction_list_mod_entry; + } + + faction_list_mod_entry = NewEntity(); + + return faction_list_mod_entry; + } + + static int InsertMany( + std::vector faction_list_mod_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_list_mod_entry: faction_list_mod_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); + insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); + insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionListMod entry{}; + + entry.id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.mod = atoi(row[2]); + entry.mod_name = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H diff --git a/common/repositories/base/base_faction_list_repository.h b/common/repositories/base/base_faction_list_repository.h new file mode 100644 index 000000000..c6f191421 --- /dev/null +++ b/common/repositories/base/base_faction_list_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FACTION_LIST_REPOSITORY_H +#define EQEMU_BASE_FACTION_LIST_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFactionListRepository { +public: + struct FactionList { + int id; + std::string name; + int16 base; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "base", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionList NewEntity() + { + FactionList entry{}; + + entry.id = 0; + entry.name = ""; + entry.base = 0; + + return entry; + } + + static FactionList GetFactionListEntry( + const std::vector &faction_lists, + int faction_list_id + ) + { + for (auto &faction_list : faction_lists) { + if (faction_list.id == faction_list_id) { + return faction_list; + } + } + + return NewEntity(); + } + + static FactionList FindOne( + int faction_list_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.base = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_list_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionList faction_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(faction_list_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(faction_list_entry.base)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_list_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionList InsertOne( + FactionList faction_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); + insert_values.push_back(std::to_string(faction_list_entry.base)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_list_entry.id = results.LastInsertedID(); + return faction_list_entry; + } + + faction_list_entry = NewEntity(); + + return faction_list_entry; + } + + static int InsertMany( + std::vector faction_list_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_list_entry: faction_list_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); + insert_values.push_back(std::to_string(faction_list_entry.base)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.base = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionList entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.base = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FACTION_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_faction_values_repository.h b/common/repositories/base/base_faction_values_repository.h new file mode 100644 index 000000000..3d2f3da69 --- /dev/null +++ b/common/repositories/base/base_faction_values_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FACTION_VALUES_REPOSITORY_H +#define EQEMU_BASE_FACTION_VALUES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFactionValuesRepository { +public: + struct FactionValues { + int char_id; + int faction_id; + int16 current_value; + int8 temp; + }; + + static std::string PrimaryKey() + { + return std::string("faction_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "faction_id", + "current_value", + "temp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("faction_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static FactionValues NewEntity() + { + FactionValues entry{}; + + entry.char_id = 0; + entry.faction_id = 0; + entry.current_value = 0; + entry.temp = 0; + + return entry; + } + + static FactionValues GetFactionValuesEntry( + const std::vector &faction_valuess, + int faction_values_id + ) + { + for (auto &faction_values : faction_valuess) { + if (faction_values.faction_id == faction_values_id) { + return faction_values; + } + } + + return NewEntity(); + } + + static FactionValues FindOne( + int faction_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + faction_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int faction_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + faction_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + FactionValues faction_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(faction_values_entry.current_value)); + update_values.push_back(columns[3] + " = " + std::to_string(faction_values_entry.temp)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + faction_values_entry.faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static FactionValues InsertOne( + FactionValues faction_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_values_entry.current_value)); + insert_values.push_back(std::to_string(faction_values_entry.temp)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + faction_values_entry.id = results.LastInsertedID(); + return faction_values_entry; + } + + faction_values_entry = NewEntity(); + + return faction_values_entry; + } + + static int InsertMany( + std::vector faction_values_entries + ) + { + std::vector insert_chunks; + + for (auto &faction_values_entry: faction_values_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(faction_values_entry.current_value)); + insert_values.push_back(std::to_string(faction_values_entry.temp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + FactionValues entry{}; + + entry.char_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.current_value = atoi(row[2]); + entry.temp = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FACTION_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_fishing_repository.h b/common/repositories/base/base_fishing_repository.h new file mode 100644 index 000000000..7e164bc12 --- /dev/null +++ b/common/repositories/base/base_fishing_repository.h @@ -0,0 +1,378 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FISHING_REPOSITORY_H +#define EQEMU_BASE_FISHING_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFishingRepository { +public: + struct Fishing { + int id; + int zoneid; + int Itemid; + int16 skill_level; + int16 chance; + int npc_id; + int npc_chance; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "Itemid", + "skill_level", + "chance", + "npc_id", + "npc_chance", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("fishing"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Fishing NewEntity() + { + Fishing entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.skill_level = 0; + entry.chance = 0; + entry.npc_id = 0; + entry.npc_chance = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Fishing GetFishingEntry( + const std::vector &fishings, + int fishing_id + ) + { + for (auto &fishing : fishings) { + if (fishing.id == fishing_id) { + return fishing; + } + } + + return NewEntity(); + } + + static Fishing FindOne( + int fishing_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + fishing_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int fishing_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + fishing_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Fishing fishing_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(fishing_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(fishing_entry.Itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(fishing_entry.skill_level)); + update_values.push_back(columns[4] + " = " + std::to_string(fishing_entry.chance)); + update_values.push_back(columns[5] + " = " + std::to_string(fishing_entry.npc_id)); + update_values.push_back(columns[6] + " = " + std::to_string(fishing_entry.npc_chance)); + update_values.push_back(columns[7] + " = " + std::to_string(fishing_entry.min_expansion)); + update_values.push_back(columns[8] + " = " + std::to_string(fishing_entry.max_expansion)); + update_values.push_back(columns[9] + " = '" + EscapeString(fishing_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + fishing_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Fishing InsertOne( + Fishing fishing_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(fishing_entry.zoneid)); + insert_values.push_back(std::to_string(fishing_entry.Itemid)); + insert_values.push_back(std::to_string(fishing_entry.skill_level)); + insert_values.push_back(std::to_string(fishing_entry.chance)); + insert_values.push_back(std::to_string(fishing_entry.npc_id)); + insert_values.push_back(std::to_string(fishing_entry.npc_chance)); + insert_values.push_back(std::to_string(fishing_entry.min_expansion)); + insert_values.push_back(std::to_string(fishing_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(fishing_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + fishing_entry.id = results.LastInsertedID(); + return fishing_entry; + } + + fishing_entry = NewEntity(); + + return fishing_entry; + } + + static int InsertMany( + std::vector fishing_entries + ) + { + std::vector insert_chunks; + + for (auto &fishing_entry: fishing_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(fishing_entry.zoneid)); + insert_values.push_back(std::to_string(fishing_entry.Itemid)); + insert_values.push_back(std::to_string(fishing_entry.skill_level)); + insert_values.push_back(std::to_string(fishing_entry.chance)); + insert_values.push_back(std::to_string(fishing_entry.npc_id)); + insert_values.push_back(std::to_string(fishing_entry.npc_chance)); + insert_values.push_back(std::to_string(fishing_entry.min_expansion)); + insert_values.push_back(std::to_string(fishing_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(fishing_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Fishing entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FISHING_REPOSITORY_H diff --git a/common/repositories/base/base_forage_repository.h b/common/repositories/base/base_forage_repository.h new file mode 100644 index 000000000..9b5fbd371 --- /dev/null +++ b/common/repositories/base/base_forage_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FORAGE_REPOSITORY_H +#define EQEMU_BASE_FORAGE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseForageRepository { +public: + struct Forage { + int id; + int zoneid; + int Itemid; + int16 level; + int16 chance; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "Itemid", + "level", + "chance", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("forage"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Forage NewEntity() + { + Forage entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.level = 0; + entry.chance = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Forage GetForageEntry( + const std::vector &forages, + int forage_id + ) + { + for (auto &forage : forages) { + if (forage.id == forage_id) { + return forage; + } + } + + return NewEntity(); + } + + static Forage FindOne( + int forage_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + forage_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int forage_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + forage_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Forage forage_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(forage_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(forage_entry.Itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(forage_entry.level)); + update_values.push_back(columns[4] + " = " + std::to_string(forage_entry.chance)); + update_values.push_back(columns[5] + " = " + std::to_string(forage_entry.min_expansion)); + update_values.push_back(columns[6] + " = " + std::to_string(forage_entry.max_expansion)); + update_values.push_back(columns[7] + " = '" + EscapeString(forage_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + forage_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Forage InsertOne( + Forage forage_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(forage_entry.zoneid)); + insert_values.push_back(std::to_string(forage_entry.Itemid)); + insert_values.push_back(std::to_string(forage_entry.level)); + insert_values.push_back(std::to_string(forage_entry.chance)); + insert_values.push_back(std::to_string(forage_entry.min_expansion)); + insert_values.push_back(std::to_string(forage_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(forage_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + forage_entry.id = results.LastInsertedID(); + return forage_entry; + } + + forage_entry = NewEntity(); + + return forage_entry; + } + + static int InsertMany( + std::vector forage_entries + ) + { + std::vector insert_chunks; + + for (auto &forage_entry: forage_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(forage_entry.zoneid)); + insert_values.push_back(std::to_string(forage_entry.Itemid)); + insert_values.push_back(std::to_string(forage_entry.level)); + insert_values.push_back(std::to_string(forage_entry.chance)); + insert_values.push_back(std::to_string(forage_entry.min_expansion)); + insert_values.push_back(std::to_string(forage_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(forage_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Forage entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FORAGE_REPOSITORY_H diff --git a/common/repositories/base/base_friends_repository.h b/common/repositories/base/base_friends_repository.h new file mode 100644 index 000000000..67220e475 --- /dev/null +++ b/common/repositories/base/base_friends_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_FRIENDS_REPOSITORY_H +#define EQEMU_BASE_FRIENDS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseFriendsRepository { +public: + struct Friends { + int charid; + int8 type; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "charid", + "type", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("friends"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Friends NewEntity() + { + Friends entry{}; + + entry.charid = 0; + entry.type = 1; + entry.name = ""; + + return entry; + } + + static Friends GetFriendsEntry( + const std::vector &friendss, + int friends_id + ) + { + for (auto &friends : friendss) { + if (friends.name == friends_id) { + return friends; + } + } + + return NewEntity(); + } + + static Friends FindOne( + int friends_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + friends_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int friends_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + friends_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Friends friends_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + friends_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Friends InsertOne( + Friends friends_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + friends_entry.id = results.LastInsertedID(); + return friends_entry; + } + + friends_entry = NewEntity(); + + return friends_entry; + } + + static int InsertMany( + std::vector friends_entries + ) + { + std::vector insert_chunks; + + for (auto &friends_entry: friends_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Friends entry{}; + + entry.charid = atoi(row[0]); + entry.type = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_FRIENDS_REPOSITORY_H diff --git a/common/repositories/base/base_global_loot_repository.h b/common/repositories/base/base_global_loot_repository.h new file mode 100644 index 000000000..4528434c7 --- /dev/null +++ b/common/repositories/base/base_global_loot_repository.h @@ -0,0 +1,432 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H +#define EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGlobalLootRepository { +public: + struct GlobalLoot { + int id; + std::string description; + int loottable_id; + int8 enabled; + int min_level; + int max_level; + int8 rare; + int8 raid; + std::string race; + std::string class; + std::string bodytype; + std::string zone; + int8 hot_zone; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "description", + "loottable_id", + "enabled", + "min_level", + "max_level", + "rare", + "raid", + "race", + "class", + "bodytype", + "zone", + "hot_zone", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("global_loot"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GlobalLoot NewEntity() + { + GlobalLoot entry{}; + + entry.id = 0; + entry.description = ""; + entry.loottable_id = 0; + entry.enabled = 1; + entry.min_level = 0; + entry.max_level = 0; + entry.rare = 0; + entry.raid = 0; + entry.race = ""; + entry.class = ""; + entry.bodytype = ""; + entry.zone = ""; + entry.hot_zone = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static GlobalLoot GetGlobalLootEntry( + const std::vector &global_loots, + int global_loot_id + ) + { + for (auto &global_loot : global_loots) { + if (global_loot.id == global_loot_id) { + return global_loot; + } + } + + return NewEntity(); + } + + static GlobalLoot FindOne( + int global_loot_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + global_loot_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int global_loot_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + global_loot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GlobalLoot global_loot_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(global_loot_entry.description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(global_loot_entry.loottable_id)); + update_values.push_back(columns[3] + " = " + std::to_string(global_loot_entry.enabled)); + update_values.push_back(columns[4] + " = " + std::to_string(global_loot_entry.min_level)); + update_values.push_back(columns[5] + " = " + std::to_string(global_loot_entry.max_level)); + update_values.push_back(columns[6] + " = " + std::to_string(global_loot_entry.rare)); + update_values.push_back(columns[7] + " = " + std::to_string(global_loot_entry.raid)); + update_values.push_back(columns[8] + " = '" + EscapeString(global_loot_entry.race) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(global_loot_entry.class) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(global_loot_entry.bodytype) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(global_loot_entry.zone) + "'"); + update_values.push_back(columns[12] + " = " + std::to_string(global_loot_entry.hot_zone)); + update_values.push_back(columns[13] + " = " + std::to_string(global_loot_entry.min_expansion)); + update_values.push_back(columns[14] + " = " + std::to_string(global_loot_entry.max_expansion)); + update_values.push_back(columns[15] + " = '" + EscapeString(global_loot_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + global_loot_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GlobalLoot InsertOne( + GlobalLoot global_loot_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); + insert_values.push_back(std::to_string(global_loot_entry.enabled)); + insert_values.push_back(std::to_string(global_loot_entry.min_level)); + insert_values.push_back(std::to_string(global_loot_entry.max_level)); + insert_values.push_back(std::to_string(global_loot_entry.rare)); + insert_values.push_back(std::to_string(global_loot_entry.raid)); + insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); + insert_values.push_back(std::to_string(global_loot_entry.min_expansion)); + insert_values.push_back(std::to_string(global_loot_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + global_loot_entry.id = results.LastInsertedID(); + return global_loot_entry; + } + + global_loot_entry = NewEntity(); + + return global_loot_entry; + } + + static int InsertMany( + std::vector global_loot_entries + ) + { + std::vector insert_chunks; + + for (auto &global_loot_entry: global_loot_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); + insert_values.push_back(std::to_string(global_loot_entry.enabled)); + insert_values.push_back(std::to_string(global_loot_entry.min_level)); + insert_values.push_back(std::to_string(global_loot_entry.max_level)); + insert_values.push_back(std::to_string(global_loot_entry.rare)); + insert_values.push_back(std::to_string(global_loot_entry.raid)); + insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); + insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); + insert_values.push_back(std::to_string(global_loot_entry.min_expansion)); + insert_values.push_back(std::to_string(global_loot_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GlobalLoot entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H diff --git a/common/repositories/base/base_gm_ips_repository.h b/common/repositories/base/base_gm_ips_repository.h new file mode 100644 index 000000000..6d80f5bd5 --- /dev/null +++ b/common/repositories/base/base_gm_ips_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GM_IPS_REPOSITORY_H +#define EQEMU_BASE_GM_IPS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGmIpsRepository { +public: + struct GmIps { + std::string name; + int account_id; + std::string ip_address; + }; + + static std::string PrimaryKey() + { + return std::string("ip_address"); + } + + static std::vector Columns() + { + return { + "name", + "account_id", + "ip_address", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("gm_ips"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GmIps NewEntity() + { + GmIps entry{}; + + entry.name = ""; + entry.account_id = 0; + entry.ip_address = ""; + + return entry; + } + + static GmIps GetGmIpsEntry( + const std::vector &gm_ipss, + int gm_ips_id + ) + { + for (auto &gm_ips : gm_ipss) { + if (gm_ips.ip_address == gm_ips_id) { + return gm_ips; + } + } + + return NewEntity(); + } + + static GmIps FindOne( + int gm_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + gm_ips_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GmIps entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int gm_ips_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + gm_ips_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GmIps gm_ips_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(gm_ips_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + gm_ips_entry.ip_address + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GmIps InsertOne( + GmIps gm_ips_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + gm_ips_entry.id = results.LastInsertedID(); + return gm_ips_entry; + } + + gm_ips_entry = NewEntity(); + + return gm_ips_entry; + } + + static int InsertMany( + std::vector gm_ips_entries + ) + { + std::vector insert_chunks; + + for (auto &gm_ips_entry: gm_ips_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GmIps entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GmIps entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.account_id = atoi(row[1]); + entry.ip_address = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GM_IPS_REPOSITORY_H diff --git a/common/repositories/base/base_goallists_repository.h b/common/repositories/base/base_goallists_repository.h new file mode 100644 index 000000000..3b9dfb808 --- /dev/null +++ b/common/repositories/base/base_goallists_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GOALLISTS_REPOSITORY_H +#define EQEMU_BASE_GOALLISTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGoallistsRepository { +public: + struct Goallists { + int listid; + int entry; + }; + + static std::string PrimaryKey() + { + return std::string("entry"); + } + + static std::vector Columns() + { + return { + "listid", + "entry", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("goallists"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Goallists NewEntity() + { + Goallists entry{}; + + entry.listid = 0; + entry.entry = 0; + + return entry; + } + + static Goallists GetGoallistsEntry( + const std::vector &goallistss, + int goallists_id + ) + { + for (auto &goallists : goallistss) { + if (goallists.entry == goallists_id) { + return goallists; + } + } + + return NewEntity(); + } + + static Goallists FindOne( + int goallists_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + goallists_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int goallists_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + goallists_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Goallists goallists_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + goallists_entry.entry + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Goallists InsertOne( + Goallists goallists_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + goallists_entry.id = results.LastInsertedID(); + return goallists_entry; + } + + goallists_entry = NewEntity(); + + return goallists_entry; + } + + static int InsertMany( + std::vector goallists_entries + ) + { + std::vector insert_chunks; + + for (auto &goallists_entry: goallists_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Goallists entry{}; + + entry.listid = atoi(row[0]); + entry.entry = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GOALLISTS_REPOSITORY_H diff --git a/common/repositories/base/base_graveyard_repository.h b/common/repositories/base/base_graveyard_repository.h new file mode 100644 index 000000000..7019a7d40 --- /dev/null +++ b/common/repositories/base/base_graveyard_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GRAVEYARD_REPOSITORY_H +#define EQEMU_BASE_GRAVEYARD_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGraveyardRepository { +public: + struct Graveyard { + int id; + int zone_id; + float x; + float y; + float z; + float heading; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone_id", + "x", + "y", + "z", + "heading", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("graveyard"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Graveyard NewEntity() + { + Graveyard entry{}; + + entry.id = 0; + entry.zone_id = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + + return entry; + } + + static Graveyard GetGraveyardEntry( + const std::vector &graveyards, + int graveyard_id + ) + { + for (auto &graveyard : graveyards) { + if (graveyard.id == graveyard_id) { + return graveyard; + } + } + + return NewEntity(); + } + + static Graveyard FindOne( + int graveyard_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + graveyard_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int graveyard_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + graveyard_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Graveyard graveyard_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(graveyard_entry.zone_id)); + update_values.push_back(columns[2] + " = " + std::to_string(graveyard_entry.x)); + update_values.push_back(columns[3] + " = " + std::to_string(graveyard_entry.y)); + update_values.push_back(columns[4] + " = " + std::to_string(graveyard_entry.z)); + update_values.push_back(columns[5] + " = " + std::to_string(graveyard_entry.heading)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + graveyard_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Graveyard InsertOne( + Graveyard graveyard_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(graveyard_entry.zone_id)); + insert_values.push_back(std::to_string(graveyard_entry.x)); + insert_values.push_back(std::to_string(graveyard_entry.y)); + insert_values.push_back(std::to_string(graveyard_entry.z)); + insert_values.push_back(std::to_string(graveyard_entry.heading)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + graveyard_entry.id = results.LastInsertedID(); + return graveyard_entry; + } + + graveyard_entry = NewEntity(); + + return graveyard_entry; + } + + static int InsertMany( + std::vector graveyard_entries + ) + { + std::vector insert_chunks; + + for (auto &graveyard_entry: graveyard_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(graveyard_entry.zone_id)); + insert_values.push_back(std::to_string(graveyard_entry.x)); + insert_values.push_back(std::to_string(graveyard_entry.y)); + insert_values.push_back(std::to_string(graveyard_entry.z)); + insert_values.push_back(std::to_string(graveyard_entry.heading)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Graveyard entry{}; + + entry.id = atoi(row[0]); + entry.zone_id = atoi(row[1]); + entry.x = atof(row[2]); + entry.y = atof(row[3]); + entry.z = atof(row[4]); + entry.heading = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GRAVEYARD_REPOSITORY_H diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h new file mode 100644 index 000000000..4ff76b0c8 --- /dev/null +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -0,0 +1,441 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GROUND_SPAWNS_REPOSITORY_H +#define EQEMU_BASE_GROUND_SPAWNS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGroundSpawnsRepository { +public: + struct GroundSpawns { + int id; + int zoneid; + int16 version; + float max_x; + float max_y; + float max_z; + float min_x; + float min_y; + float heading; + std::string name; + int item; + int max_allowed; + std::string comment; + int respawn_timer; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "version", + "max_x", + "max_y", + "max_z", + "min_x", + "min_y", + "heading", + "name", + "item", + "max_allowed", + "comment", + "respawn_timer", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ground_spawns"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroundSpawns NewEntity() + { + GroundSpawns entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.max_x = 2000; + entry.max_y = 2000; + entry.max_z = 10000; + entry.min_x = -2000; + entry.min_y = -2000; + entry.heading = 0; + entry.name = ""; + entry.item = 0; + entry.max_allowed = 1; + entry.comment = ""; + entry.respawn_timer = 300; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static GroundSpawns GetGroundSpawnsEntry( + const std::vector &ground_spawnss, + int ground_spawns_id + ) + { + for (auto &ground_spawns : ground_spawnss) { + if (ground_spawns.id == ground_spawns_id) { + return ground_spawns; + } + } + + return NewEntity(); + } + + static GroundSpawns FindOne( + int ground_spawns_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ground_spawns_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ground_spawns_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ground_spawns_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroundSpawns ground_spawns_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(ground_spawns_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(ground_spawns_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(ground_spawns_entry.max_x)); + update_values.push_back(columns[4] + " = " + std::to_string(ground_spawns_entry.max_y)); + update_values.push_back(columns[5] + " = " + std::to_string(ground_spawns_entry.max_z)); + update_values.push_back(columns[6] + " = " + std::to_string(ground_spawns_entry.min_x)); + update_values.push_back(columns[7] + " = " + std::to_string(ground_spawns_entry.min_y)); + update_values.push_back(columns[8] + " = " + std::to_string(ground_spawns_entry.heading)); + update_values.push_back(columns[9] + " = '" + EscapeString(ground_spawns_entry.name) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(ground_spawns_entry.item)); + update_values.push_back(columns[11] + " = " + std::to_string(ground_spawns_entry.max_allowed)); + update_values.push_back(columns[12] + " = '" + EscapeString(ground_spawns_entry.comment) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(ground_spawns_entry.respawn_timer)); + update_values.push_back(columns[14] + " = " + std::to_string(ground_spawns_entry.min_expansion)); + update_values.push_back(columns[15] + " = " + std::to_string(ground_spawns_entry.max_expansion)); + update_values.push_back(columns[16] + " = '" + EscapeString(ground_spawns_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ground_spawns_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroundSpawns InsertOne( + GroundSpawns ground_spawns_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); + insert_values.push_back(std::to_string(ground_spawns_entry.version)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.heading)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.item)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_expansion)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ground_spawns_entry.id = results.LastInsertedID(); + return ground_spawns_entry; + } + + ground_spawns_entry = NewEntity(); + + return ground_spawns_entry; + } + + static int InsertMany( + std::vector ground_spawns_entries + ) + { + std::vector insert_chunks; + + for (auto &ground_spawns_entry: ground_spawns_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); + insert_values.push_back(std::to_string(ground_spawns_entry.version)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); + insert_values.push_back(std::to_string(ground_spawns_entry.heading)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.item)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); + insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); + insert_values.push_back(std::to_string(ground_spawns_entry.min_expansion)); + insert_values.push_back(std::to_string(ground_spawns_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroundSpawns entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = atof(row[3]); + entry.max_y = atof(row[4]); + entry.max_z = atof(row[5]); + entry.min_x = atof(row[6]); + entry.min_y = atof(row[7]); + entry.heading = atof(row[8]); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GROUND_SPAWNS_REPOSITORY_H diff --git a/common/repositories/base/base_group_id_repository.h b/common/repositories/base/base_group_id_repository.h new file mode 100644 index 000000000..c9446a5d1 --- /dev/null +++ b/common/repositories/base/base_group_id_repository.h @@ -0,0 +1,318 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GROUP_ID_REPOSITORY_H +#define EQEMU_BASE_GROUP_ID_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGroupIdRepository { +public: + struct GroupId { + int groupid; + int charid; + std::string name; + int8 ismerc; + }; + + static std::string PrimaryKey() + { + return std::string("ismerc"); + } + + static std::vector Columns() + { + return { + "groupid", + "charid", + "name", + "ismerc", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("group_id"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroupId NewEntity() + { + GroupId entry{}; + + entry.groupid = 0; + entry.charid = 0; + entry.name = ""; + entry.ismerc = 0; + + return entry; + } + + static GroupId GetGroupIdEntry( + const std::vector &group_ids, + int group_id_id + ) + { + for (auto &group_id : group_ids) { + if (group_id.ismerc == group_id_id) { + return group_id; + } + } + + return NewEntity(); + } + + static GroupId FindOne( + int group_id_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + group_id_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.ismerc = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int group_id_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + group_id_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroupId group_id_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(group_id_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + group_id_entry.ismerc + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroupId InsertOne( + GroupId group_id_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + group_id_entry.id = results.LastInsertedID(); + return group_id_entry; + } + + group_id_entry = NewEntity(); + + return group_id_entry; + } + + static int InsertMany( + std::vector group_id_entries + ) + { + std::vector insert_chunks; + + for (auto &group_id_entry: group_id_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.ismerc = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupId entry{}; + + entry.groupid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.ismerc = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GROUP_ID_REPOSITORY_H diff --git a/common/repositories/base/base_group_leaders_repository.h b/common/repositories/base/base_group_leaders_repository.h new file mode 100644 index 000000000..7670f4db9 --- /dev/null +++ b/common/repositories/base/base_group_leaders_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GROUP_LEADERS_REPOSITORY_H +#define EQEMU_BASE_GROUP_LEADERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGroupLeadersRepository { +public: + struct GroupLeaders { + int gid; + std::string leadername; + std::string marknpc; + std::string leadershipaa; + std::string maintank; + std::string assist; + std::string puller; + std::string mentoree; + int mentor_percent; + }; + + static std::string PrimaryKey() + { + return std::string("gid"); + } + + static std::vector Columns() + { + return { + "gid", + "leadername", + "marknpc", + "leadershipaa", + "maintank", + "assist", + "puller", + "mentoree", + "mentor_percent", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("group_leaders"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GroupLeaders NewEntity() + { + GroupLeaders entry{}; + + entry.gid = 0; + entry.leadername = ""; + entry.marknpc = ""; + entry.leadershipaa = 0; + entry.maintank = ""; + entry.assist = ""; + entry.puller = ""; + entry.mentoree = ""; + entry.mentor_percent = 0; + + return entry; + } + + static GroupLeaders GetGroupLeadersEntry( + const std::vector &group_leaderss, + int group_leaders_id + ) + { + for (auto &group_leaders : group_leaderss) { + if (group_leaders.gid == group_leaders_id) { + return group_leaders; + } + } + + return NewEntity(); + } + + static GroupLeaders FindOne( + int group_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + group_leaders_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; + entry.mentor_percent = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int group_leaders_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + group_leaders_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GroupLeaders group_leaders_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(group_leaders_entry.leadername) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(group_leaders_entry.marknpc) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(group_leaders_entry.maintank) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(group_leaders_entry.assist) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(group_leaders_entry.puller) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(group_leaders_entry.mentoree) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(group_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + group_leaders_entry.gid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GroupLeaders InsertOne( + GroupLeaders group_leaders_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + group_leaders_entry.id = results.LastInsertedID(); + return group_leaders_entry; + } + + group_leaders_entry = NewEntity(); + + return group_leaders_entry; + } + + static int InsertMany( + std::vector group_leaders_entries + ) + { + std::vector insert_chunks; + + for (auto &group_leaders_entry: group_leaders_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); + insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); + insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; + entry.mentor_percent = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GroupLeaders entry{}; + + entry.gid = atoi(row[0]); + entry.leadername = row[1] ? row[1] : ""; + entry.marknpc = row[2] ? row[2] : ""; + entry.leadershipaa = row[3] ? row[3] : ""; + entry.maintank = row[4] ? row[4] : ""; + entry.assist = row[5] ? row[5] : ""; + entry.puller = row[6] ? row[6] : ""; + entry.mentoree = row[7] ? row[7] : ""; + entry.mentor_percent = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GROUP_LEADERS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_members_repository.h b/common/repositories/base/base_guild_members_repository.h new file mode 100644 index 000000000..56d462a93 --- /dev/null +++ b/common/repositories/base/base_guild_members_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GUILD_MEMBERS_REPOSITORY_H +#define EQEMU_BASE_GUILD_MEMBERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGuildMembersRepository { +public: + struct GuildMembers { + int char_id; + int guild_id; + int8 rank; + int8 tribute_enable; + int total_tribute; + int last_tribute; + int8 banker; + std::string public_note; + int8 alt; + }; + + static std::string PrimaryKey() + { + return std::string("char_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "guild_id", + "rank", + "tribute_enable", + "total_tribute", + "last_tribute", + "banker", + "public_note", + "alt", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildMembers NewEntity() + { + GuildMembers entry{}; + + entry.char_id = 0; + entry.guild_id = 0; + entry.rank = 0; + entry.tribute_enable = 0; + entry.total_tribute = 0; + entry.last_tribute = 0; + entry.banker = 0; + entry.public_note = ""; + entry.alt = 0; + + return entry; + } + + static GuildMembers GetGuildMembersEntry( + const std::vector &guild_memberss, + int guild_members_id + ) + { + for (auto &guild_members : guild_memberss) { + if (guild_members.char_id == guild_members_id) { + return guild_members; + } + } + + return NewEntity(); + } + + static GuildMembers FindOne( + int guild_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7] ? row[7] : ""; + entry.alt = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildMembers guild_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(guild_members_entry.guild_id)); + update_values.push_back(columns[2] + " = " + std::to_string(guild_members_entry.rank)); + update_values.push_back(columns[3] + " = " + std::to_string(guild_members_entry.tribute_enable)); + update_values.push_back(columns[4] + " = " + std::to_string(guild_members_entry.total_tribute)); + update_values.push_back(columns[5] + " = " + std::to_string(guild_members_entry.last_tribute)); + update_values.push_back(columns[6] + " = " + std::to_string(guild_members_entry.banker)); + update_values.push_back(columns[7] + " = '" + EscapeString(guild_members_entry.public_note) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(guild_members_entry.alt)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_members_entry.char_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildMembers InsertOne( + GuildMembers guild_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_members_entry.guild_id)); + insert_values.push_back(std::to_string(guild_members_entry.rank)); + insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); + insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.banker)); + insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); + insert_values.push_back(std::to_string(guild_members_entry.alt)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_members_entry.id = results.LastInsertedID(); + return guild_members_entry; + } + + guild_members_entry = NewEntity(); + + return guild_members_entry; + } + + static int InsertMany( + std::vector guild_members_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_members_entry: guild_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_members_entry.guild_id)); + insert_values.push_back(std::to_string(guild_members_entry.rank)); + insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); + insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); + insert_values.push_back(std::to_string(guild_members_entry.banker)); + insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); + insert_values.push_back(std::to_string(guild_members_entry.alt)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7] ? row[7] : ""; + entry.alt = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildMembers entry{}; + + entry.char_id = atoi(row[0]); + entry.guild_id = atoi(row[1]); + entry.rank = atoi(row[2]); + entry.tribute_enable = atoi(row[3]); + entry.total_tribute = atoi(row[4]); + entry.last_tribute = atoi(row[5]); + entry.banker = atoi(row[6]); + entry.public_note = row[7] ? row[7] : ""; + entry.alt = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GUILD_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_ranks_repository.h b/common/repositories/base/base_guild_ranks_repository.h new file mode 100644 index 000000000..b7c606f23 --- /dev/null +++ b/common/repositories/base/base_guild_ranks_repository.h @@ -0,0 +1,384 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GUILD_RANKS_REPOSITORY_H +#define EQEMU_BASE_GUILD_RANKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGuildRanksRepository { +public: + struct GuildRanks { + int guild_id; + int8 rank; + std::string title; + int8 can_hear; + int8 can_speak; + int8 can_invite; + int8 can_remove; + int8 can_promote; + int8 can_demote; + int8 can_motd; + int8 can_warpeace; + }; + + static std::string PrimaryKey() + { + return std::string("rank"); + } + + static std::vector Columns() + { + return { + "guild_id", + "rank", + "title", + "can_hear", + "can_speak", + "can_invite", + "can_remove", + "can_promote", + "can_demote", + "can_motd", + "can_warpeace", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_ranks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildRanks NewEntity() + { + GuildRanks entry{}; + + entry.guild_id = 0; + entry.rank = 0; + entry.title = ""; + entry.can_hear = 0; + entry.can_speak = 0; + entry.can_invite = 0; + entry.can_remove = 0; + entry.can_promote = 0; + entry.can_demote = 0; + entry.can_motd = 0; + entry.can_warpeace = 0; + + return entry; + } + + static GuildRanks GetGuildRanksEntry( + const std::vector &guild_rankss, + int guild_ranks_id + ) + { + for (auto &guild_ranks : guild_rankss) { + if (guild_ranks.rank == guild_ranks_id) { + return guild_ranks; + } + } + + return NewEntity(); + } + + static GuildRanks FindOne( + int guild_ranks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_ranks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2] ? row[2] : ""; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_ranks_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_ranks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildRanks guild_ranks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(guild_ranks_entry.title) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(guild_ranks_entry.can_hear)); + update_values.push_back(columns[4] + " = " + std::to_string(guild_ranks_entry.can_speak)); + update_values.push_back(columns[5] + " = " + std::to_string(guild_ranks_entry.can_invite)); + update_values.push_back(columns[6] + " = " + std::to_string(guild_ranks_entry.can_remove)); + update_values.push_back(columns[7] + " = " + std::to_string(guild_ranks_entry.can_promote)); + update_values.push_back(columns[8] + " = " + std::to_string(guild_ranks_entry.can_demote)); + update_values.push_back(columns[9] + " = " + std::to_string(guild_ranks_entry.can_motd)); + update_values.push_back(columns[10] + " = " + std::to_string(guild_ranks_entry.can_warpeace)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_ranks_entry.rank + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildRanks InsertOne( + GuildRanks guild_ranks_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); + insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_ranks_entry.id = results.LastInsertedID(); + return guild_ranks_entry; + } + + guild_ranks_entry = NewEntity(); + + return guild_ranks_entry; + } + + static int InsertMany( + std::vector guild_ranks_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_ranks_entry: guild_ranks_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); + insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); + insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2] ? row[2] : ""; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRanks entry{}; + + entry.guild_id = atoi(row[0]); + entry.rank = atoi(row[1]); + entry.title = row[2] ? row[2] : ""; + entry.can_hear = atoi(row[3]); + entry.can_speak = atoi(row[4]); + entry.can_invite = atoi(row[5]); + entry.can_remove = atoi(row[6]); + entry.can_promote = atoi(row[7]); + entry.can_demote = atoi(row[8]); + entry.can_motd = atoi(row[9]); + entry.can_warpeace = atoi(row[10]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GUILD_RANKS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_relations_repository.h b/common/repositories/base/base_guild_relations_repository.h new file mode 100644 index 000000000..b0ac5c179 --- /dev/null +++ b/common/repositories/base/base_guild_relations_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GUILD_RELATIONS_REPOSITORY_H +#define EQEMU_BASE_GUILD_RELATIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGuildRelationsRepository { +public: + struct GuildRelations { + int guild1; + int guild2; + int8 relation; + }; + + static std::string PrimaryKey() + { + return std::string("guild2"); + } + + static std::vector Columns() + { + return { + "guild1", + "guild2", + "relation", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guild_relations"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GuildRelations NewEntity() + { + GuildRelations entry{}; + + entry.guild1 = 0; + entry.guild2 = 0; + entry.relation = 0; + + return entry; + } + + static GuildRelations GetGuildRelationsEntry( + const std::vector &guild_relationss, + int guild_relations_id + ) + { + for (auto &guild_relations : guild_relationss) { + if (guild_relations.guild2 == guild_relations_id) { + return guild_relations; + } + } + + return NewEntity(); + } + + static GuildRelations FindOne( + int guild_relations_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guild_relations_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guild_relations_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guild_relations_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GuildRelations guild_relations_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(guild_relations_entry.relation)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guild_relations_entry.guild2 + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GuildRelations InsertOne( + GuildRelations guild_relations_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_relations_entry.relation)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guild_relations_entry.id = results.LastInsertedID(); + return guild_relations_entry; + } + + guild_relations_entry = NewEntity(); + + return guild_relations_entry; + } + + static int InsertMany( + std::vector guild_relations_entries + ) + { + std::vector insert_chunks; + + for (auto &guild_relations_entry: guild_relations_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(guild_relations_entry.relation)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GuildRelations entry{}; + + entry.guild1 = atoi(row[0]); + entry.guild2 = atoi(row[1]); + entry.relation = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GUILD_RELATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_guilds_repository.h b/common/repositories/base/base_guilds_repository.h new file mode 100644 index 000000000..557804686 --- /dev/null +++ b/common/repositories/base/base_guilds_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GUILDS_REPOSITORY_H +#define EQEMU_BASE_GUILDS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGuildsRepository { +public: + struct Guilds { + int id; + std::string name; + int leader; + int16 minstatus; + std::string motd; + int tribute; + std::string motd_setter; + std::string channel; + std::string url; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "leader", + "minstatus", + "motd", + "tribute", + "motd_setter", + "channel", + "url", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("guilds"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Guilds NewEntity() + { + Guilds entry{}; + + entry.id = 0; + entry.name = ""; + entry.leader = 0; + entry.minstatus = 0; + entry.motd = ""; + entry.tribute = 0; + entry.motd_setter = ""; + entry.channel = ""; + entry.url = ""; + + return entry; + } + + static Guilds GetGuildsEntry( + const std::vector &guildss, + int guilds_id + ) + { + for (auto &guilds : guildss) { + if (guilds.id == guilds_id) { + return guilds; + } + } + + return NewEntity(); + } + + static Guilds FindOne( + int guilds_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + guilds_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4] ? row[4] : ""; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int guilds_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + guilds_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Guilds guilds_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(guilds_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(guilds_entry.leader)); + update_values.push_back(columns[3] + " = " + std::to_string(guilds_entry.minstatus)); + update_values.push_back(columns[4] + " = '" + EscapeString(guilds_entry.motd) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(guilds_entry.tribute)); + update_values.push_back(columns[6] + " = '" + EscapeString(guilds_entry.motd_setter) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(guilds_entry.channel) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(guilds_entry.url) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + guilds_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Guilds InsertOne( + Guilds guilds_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); + insert_values.push_back(std::to_string(guilds_entry.leader)); + insert_values.push_back(std::to_string(guilds_entry.minstatus)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); + insert_values.push_back(std::to_string(guilds_entry.tribute)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + guilds_entry.id = results.LastInsertedID(); + return guilds_entry; + } + + guilds_entry = NewEntity(); + + return guilds_entry; + } + + static int InsertMany( + std::vector guilds_entries + ) + { + std::vector insert_chunks; + + for (auto &guilds_entry: guilds_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); + insert_values.push_back(std::to_string(guilds_entry.leader)); + insert_values.push_back(std::to_string(guilds_entry.minstatus)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); + insert_values.push_back(std::to_string(guilds_entry.tribute)); + insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); + insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4] ? row[4] : ""; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Guilds entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.leader = atoi(row[2]); + entry.minstatus = atoi(row[3]); + entry.motd = row[4] ? row[4] : ""; + entry.tribute = atoi(row[5]); + entry.motd_setter = row[6] ? row[6] : ""; + entry.channel = row[7] ? row[7] : ""; + entry.url = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GUILDS_REPOSITORY_H diff --git a/common/repositories/base/base_hackers_repository.h b/common/repositories/base/base_hackers_repository.h new file mode 100644 index 000000000..8b869cfb3 --- /dev/null +++ b/common/repositories/base/base_hackers_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_HACKERS_REPOSITORY_H +#define EQEMU_BASE_HACKERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseHackersRepository { +public: + struct Hackers { + int id; + std::string account; + std::string name; + std::string hacked; + std::string zone; + std::string date; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account", + "name", + "hacked", + "zone", + "date", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("hackers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Hackers NewEntity() + { + Hackers entry{}; + + entry.id = 0; + entry.account = ""; + entry.name = ""; + entry.hacked = ""; + entry.zone = ""; + entry.date = current_timestamp(); + + return entry; + } + + static Hackers GetHackersEntry( + const std::vector &hackerss, + int hackers_id + ) + { + for (auto &hackers : hackerss) { + if (hackers.id == hackers_id) { + return hackers; + } + } + + return NewEntity(); + } + + static Hackers FindOne( + int hackers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + hackers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int hackers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + hackers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Hackers hackers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(hackers_entry.account) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(hackers_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(hackers_entry.hacked) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(hackers_entry.zone) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(hackers_entry.date) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + hackers_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Hackers InsertOne( + Hackers hackers_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + hackers_entry.id = results.LastInsertedID(); + return hackers_entry; + } + + hackers_entry = NewEntity(); + + return hackers_entry; + } + + static int InsertMany( + std::vector hackers_entries + ) + { + std::vector insert_chunks; + + for (auto &hackers_entry: hackers_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); + insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Hackers entry{}; + + entry.id = atoi(row[0]); + entry.account = row[1] ? row[1] : ""; + entry.name = row[2] ? row[2] : ""; + entry.hacked = row[3] ? row[3] : ""; + entry.zone = row[4] ? row[4] : ""; + entry.date = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_HACKERS_REPOSITORY_H diff --git a/common/repositories/base/base_horses_repository.h b/common/repositories/base/base_horses_repository.h new file mode 100644 index 000000000..cb365018d --- /dev/null +++ b/common/repositories/base/base_horses_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_HORSES_REPOSITORY_H +#define EQEMU_BASE_HORSES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseHorsesRepository { +public: + struct Horses { + std::string filename; + int16 race; + int8 gender; + int8 texture; + float mountspeed; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("filename"); + } + + static std::vector Columns() + { + return { + "filename", + "race", + "gender", + "texture", + "mountspeed", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("horses"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Horses NewEntity() + { + Horses entry{}; + + entry.filename = ""; + entry.race = 216; + entry.gender = 0; + entry.texture = 0; + entry.mountspeed = 0.75; + entry.notes = "Notes"; + + return entry; + } + + static Horses GetHorsesEntry( + const std::vector &horsess, + int horses_id + ) + { + for (auto &horses : horsess) { + if (horses.filename == horses_id) { + return horses; + } + } + + return NewEntity(); + } + + static Horses FindOne( + int horses_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + horses_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Horses entry{}; + + entry.filename = row[0] ? row[0] : ""; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5] ? row[5] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int horses_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + horses_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Horses horses_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(horses_entry.race)); + update_values.push_back(columns[2] + " = " + std::to_string(horses_entry.gender)); + update_values.push_back(columns[3] + " = " + std::to_string(horses_entry.texture)); + update_values.push_back(columns[4] + " = " + std::to_string(horses_entry.mountspeed)); + update_values.push_back(columns[5] + " = '" + EscapeString(horses_entry.notes) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + horses_entry.filename + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Horses InsertOne( + Horses horses_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(horses_entry.race)); + insert_values.push_back(std::to_string(horses_entry.gender)); + insert_values.push_back(std::to_string(horses_entry.texture)); + insert_values.push_back(std::to_string(horses_entry.mountspeed)); + insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + horses_entry.id = results.LastInsertedID(); + return horses_entry; + } + + horses_entry = NewEntity(); + + return horses_entry; + } + + static int InsertMany( + std::vector horses_entries + ) + { + std::vector insert_chunks; + + for (auto &horses_entry: horses_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(horses_entry.race)); + insert_values.push_back(std::to_string(horses_entry.gender)); + insert_values.push_back(std::to_string(horses_entry.texture)); + insert_values.push_back(std::to_string(horses_entry.mountspeed)); + insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Horses entry{}; + + entry.filename = row[0] ? row[0] : ""; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Horses entry{}; + + entry.filename = row[0] ? row[0] : ""; + entry.race = atoi(row[1]); + entry.gender = atoi(row[2]); + entry.texture = atoi(row[3]); + entry.mountspeed = atof(row[4]); + entry.notes = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_HORSES_REPOSITORY_H diff --git a/common/repositories/base/base_instance_list_player_repository.h b/common/repositories/base/base_instance_list_player_repository.h new file mode 100644 index 000000000..bc7a255c3 --- /dev/null +++ b/common/repositories/base/base_instance_list_player_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_INSTANCE_LIST_PLAYER_REPOSITORY_H +#define EQEMU_BASE_INSTANCE_LIST_PLAYER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseInstanceListPlayerRepository { +public: + struct InstanceListPlayer { + int id; + int charid; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "id", + "charid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("instance_list_player"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InstanceListPlayer NewEntity() + { + InstanceListPlayer entry{}; + + entry.id = 0; + entry.charid = 0; + + return entry; + } + + static InstanceListPlayer GetInstanceListPlayerEntry( + const std::vector &instance_list_players, + int instance_list_player_id + ) + { + for (auto &instance_list_player : instance_list_players) { + if (instance_list_player.charid == instance_list_player_id) { + return instance_list_player; + } + } + + return NewEntity(); + } + + static InstanceListPlayer FindOne( + int instance_list_player_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + instance_list_player_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int instance_list_player_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + instance_list_player_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InstanceListPlayer instance_list_player_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + instance_list_player_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InstanceListPlayer InsertOne( + InstanceListPlayer instance_list_player_entry + ) + { + std::vector insert_values; + + + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + instance_list_player_entry.id = results.LastInsertedID(); + return instance_list_player_entry; + } + + instance_list_player_entry = NewEntity(); + + return instance_list_player_entry; + } + + static int InsertMany( + std::vector instance_list_player_entries + ) + { + std::vector insert_chunks; + + for (auto &instance_list_player_entry: instance_list_player_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceListPlayer entry{}; + + entry.id = atoi(row[0]); + entry.charid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_INSTANCE_LIST_PLAYER_REPOSITORY_H diff --git a/common/repositories/base/base_instance_list_repository.h b/common/repositories/base/base_instance_list_repository.h new file mode 100644 index 000000000..d27d6aa27 --- /dev/null +++ b/common/repositories/base/base_instance_list_repository.h @@ -0,0 +1,351 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_INSTANCE_LIST_REPOSITORY_H +#define EQEMU_BASE_INSTANCE_LIST_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseInstanceListRepository { +public: + struct InstanceList { + int id; + int zone; + int8 version; + int8 is_global; + int start_time; + int duration; + int8 never_expires; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "is_global", + "start_time", + "duration", + "never_expires", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("instance_list"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InstanceList NewEntity() + { + InstanceList entry{}; + + entry.id = 0; + entry.zone = 0; + entry.version = 0; + entry.is_global = 0; + entry.start_time = 0; + entry.duration = 0; + entry.never_expires = 0; + + return entry; + } + + static InstanceList GetInstanceListEntry( + const std::vector &instance_lists, + int instance_list_id + ) + { + for (auto &instance_list : instance_lists) { + if (instance_list.id == instance_list_id) { + return instance_list; + } + } + + return NewEntity(); + } + + static InstanceList FindOne( + int instance_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + instance_list_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int instance_list_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + instance_list_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InstanceList instance_list_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(instance_list_entry.zone)); + update_values.push_back(columns[2] + " = " + std::to_string(instance_list_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(instance_list_entry.is_global)); + update_values.push_back(columns[4] + " = " + std::to_string(instance_list_entry.start_time)); + update_values.push_back(columns[5] + " = " + std::to_string(instance_list_entry.duration)); + update_values.push_back(columns[6] + " = " + std::to_string(instance_list_entry.never_expires)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + instance_list_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InstanceList InsertOne( + InstanceList instance_list_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(instance_list_entry.zone)); + insert_values.push_back(std::to_string(instance_list_entry.version)); + insert_values.push_back(std::to_string(instance_list_entry.is_global)); + insert_values.push_back(std::to_string(instance_list_entry.start_time)); + insert_values.push_back(std::to_string(instance_list_entry.duration)); + insert_values.push_back(std::to_string(instance_list_entry.never_expires)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + instance_list_entry.id = results.LastInsertedID(); + return instance_list_entry; + } + + instance_list_entry = NewEntity(); + + return instance_list_entry; + } + + static int InsertMany( + std::vector instance_list_entries + ) + { + std::vector insert_chunks; + + for (auto &instance_list_entry: instance_list_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(instance_list_entry.zone)); + insert_values.push_back(std::to_string(instance_list_entry.version)); + insert_values.push_back(std::to_string(instance_list_entry.is_global)); + insert_values.push_back(std::to_string(instance_list_entry.start_time)); + insert_values.push_back(std::to_string(instance_list_entry.duration)); + insert_values.push_back(std::to_string(instance_list_entry.never_expires)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InstanceList entry{}; + + entry.id = atoi(row[0]); + entry.zone = atoi(row[1]); + entry.version = atoi(row[2]); + entry.is_global = atoi(row[3]); + entry.start_time = atoi(row[4]); + entry.duration = atoi(row[5]); + entry.never_expires = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_INSTANCE_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_inventory_repository.h b/common/repositories/base/base_inventory_repository.h new file mode 100644 index 000000000..c389918f7 --- /dev/null +++ b/common/repositories/base/base_inventory_repository.h @@ -0,0 +1,429 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_INVENTORY_REPOSITORY_H +#define EQEMU_BASE_INVENTORY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseInventoryRepository { +public: + struct Inventory { + int charid; + int slotid; + int itemid; + int16 charges; + int color; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + int8 instnodrop; + std::string custom_data; + int ornamenticon; + int ornamentidfile; + int ornament_hero_model; + }; + + static std::string PrimaryKey() + { + return std::string("slotid"); + } + + static std::vector Columns() + { + return { + "charid", + "slotid", + "itemid", + "charges", + "color", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + "instnodrop", + "custom_data", + "ornamenticon", + "ornamentidfile", + "ornament_hero_model", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("inventory"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Inventory NewEntity() + { + Inventory entry{}; + + entry.charid = 0; + entry.slotid = 0; + entry.itemid = 0; + entry.charges = 0; + entry.color = 0; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + entry.instnodrop = 0; + entry.custom_data = ""; + entry.ornamenticon = 0; + entry.ornamentidfile = 0; + entry.ornament_hero_model = 0; + + return entry; + } + + static Inventory GetInventoryEntry( + const std::vector &inventorys, + int inventory_id + ) + { + for (auto &inventory : inventorys) { + if (inventory.slotid == inventory_id) { + return inventory; + } + } + + return NewEntity(); + } + + static Inventory FindOne( + int inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + inventory_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12] ? row[12] : ""; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int inventory_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + inventory_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Inventory inventory_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(inventory_entry.itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(inventory_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(inventory_entry.color)); + update_values.push_back(columns[5] + " = " + std::to_string(inventory_entry.augslot1)); + update_values.push_back(columns[6] + " = " + std::to_string(inventory_entry.augslot2)); + update_values.push_back(columns[7] + " = " + std::to_string(inventory_entry.augslot3)); + update_values.push_back(columns[8] + " = " + std::to_string(inventory_entry.augslot4)); + update_values.push_back(columns[9] + " = " + std::to_string(inventory_entry.augslot5)); + update_values.push_back(columns[10] + " = " + std::to_string(inventory_entry.augslot6)); + update_values.push_back(columns[11] + " = " + std::to_string(inventory_entry.instnodrop)); + update_values.push_back(columns[12] + " = '" + EscapeString(inventory_entry.custom_data) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(inventory_entry.ornamenticon)); + update_values.push_back(columns[14] + " = " + std::to_string(inventory_entry.ornamentidfile)); + update_values.push_back(columns[15] + " = " + std::to_string(inventory_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + inventory_entry.slotid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Inventory InsertOne( + Inventory inventory_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_entry.itemid)); + insert_values.push_back(std::to_string(inventory_entry.charges)); + insert_values.push_back(std::to_string(inventory_entry.color)); + insert_values.push_back(std::to_string(inventory_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + inventory_entry.id = results.LastInsertedID(); + return inventory_entry; + } + + inventory_entry = NewEntity(); + + return inventory_entry; + } + + static int InsertMany( + std::vector inventory_entries + ) + { + std::vector insert_chunks; + + for (auto &inventory_entry: inventory_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_entry.itemid)); + insert_values.push_back(std::to_string(inventory_entry.charges)); + insert_values.push_back(std::to_string(inventory_entry.color)); + insert_values.push_back(std::to_string(inventory_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12] ? row[12] : ""; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Inventory entry{}; + + entry.charid = atoi(row[0]); + entry.slotid = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.color = atoi(row[4]); + entry.augslot1 = atoi(row[5]); + entry.augslot2 = atoi(row[6]); + entry.augslot3 = atoi(row[7]); + entry.augslot4 = atoi(row[8]); + entry.augslot5 = atoi(row[9]); + entry.augslot6 = atoi(row[10]); + entry.instnodrop = atoi(row[11]); + entry.custom_data = row[12] ? row[12] : ""; + entry.ornamenticon = atoi(row[13]); + entry.ornamentidfile = atoi(row[14]); + entry.ornament_hero_model = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_INVENTORY_REPOSITORY_H diff --git a/common/repositories/base/base_inventory_snapshots_repository.h b/common/repositories/base/base_inventory_snapshots_repository.h new file mode 100644 index 000000000..f05b88811 --- /dev/null +++ b/common/repositories/base/base_inventory_snapshots_repository.h @@ -0,0 +1,435 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_INVENTORY_SNAPSHOTS_REPOSITORY_H +#define EQEMU_BASE_INVENTORY_SNAPSHOTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseInventorySnapshotsRepository { +public: + struct InventorySnapshots { + int time_index; + int charid; + int slotid; + int itemid; + int16 charges; + int color; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + int8 instnodrop; + std::string custom_data; + int ornamenticon; + int ornamentidfile; + int ornament_hero_model; + }; + + static std::string PrimaryKey() + { + return std::string("slotid"); + } + + static std::vector Columns() + { + return { + "time_index", + "charid", + "slotid", + "itemid", + "charges", + "color", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + "instnodrop", + "custom_data", + "ornamenticon", + "ornamentidfile", + "ornament_hero_model", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("inventory_snapshots"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static InventorySnapshots NewEntity() + { + InventorySnapshots entry{}; + + entry.time_index = 0; + entry.charid = 0; + entry.slotid = 0; + entry.itemid = 0; + entry.charges = 0; + entry.color = 0; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + entry.instnodrop = 0; + entry.custom_data = ""; + entry.ornamenticon = 0; + entry.ornamentidfile = 0; + entry.ornament_hero_model = 0; + + return entry; + } + + static InventorySnapshots GetInventorySnapshotsEntry( + const std::vector &inventory_snapshotss, + int inventory_snapshots_id + ) + { + for (auto &inventory_snapshots : inventory_snapshotss) { + if (inventory_snapshots.slotid == inventory_snapshots_id) { + return inventory_snapshots; + } + } + + return NewEntity(); + } + + static InventorySnapshots FindOne( + int inventory_snapshots_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + inventory_snapshots_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13] ? row[13] : ""; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int inventory_snapshots_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + inventory_snapshots_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + InventorySnapshots inventory_snapshots_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(inventory_snapshots_entry.itemid)); + update_values.push_back(columns[4] + " = " + std::to_string(inventory_snapshots_entry.charges)); + update_values.push_back(columns[5] + " = " + std::to_string(inventory_snapshots_entry.color)); + update_values.push_back(columns[6] + " = " + std::to_string(inventory_snapshots_entry.augslot1)); + update_values.push_back(columns[7] + " = " + std::to_string(inventory_snapshots_entry.augslot2)); + update_values.push_back(columns[8] + " = " + std::to_string(inventory_snapshots_entry.augslot3)); + update_values.push_back(columns[9] + " = " + std::to_string(inventory_snapshots_entry.augslot4)); + update_values.push_back(columns[10] + " = " + std::to_string(inventory_snapshots_entry.augslot5)); + update_values.push_back(columns[11] + " = " + std::to_string(inventory_snapshots_entry.augslot6)); + update_values.push_back(columns[12] + " = " + std::to_string(inventory_snapshots_entry.instnodrop)); + update_values.push_back(columns[13] + " = '" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(inventory_snapshots_entry.ornamenticon)); + update_values.push_back(columns[15] + " = " + std::to_string(inventory_snapshots_entry.ornamentidfile)); + update_values.push_back(columns[16] + " = " + std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + inventory_snapshots_entry.slotid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static InventorySnapshots InsertOne( + InventorySnapshots inventory_snapshots_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + inventory_snapshots_entry.id = results.LastInsertedID(); + return inventory_snapshots_entry; + } + + inventory_snapshots_entry = NewEntity(); + + return inventory_snapshots_entry; + } + + static int InsertMany( + std::vector inventory_snapshots_entries + ) + { + std::vector insert_chunks; + + for (auto &inventory_snapshots_entry: inventory_snapshots_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); + insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13] ? row[13] : ""; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + InventorySnapshots entry{}; + + entry.time_index = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.slotid = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.color = atoi(row[5]); + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + entry.instnodrop = atoi(row[12]); + entry.custom_data = row[13] ? row[13] : ""; + entry.ornamenticon = atoi(row[14]); + entry.ornamentidfile = atoi(row[15]); + entry.ornament_hero_model = atoi(row[16]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_INVENTORY_SNAPSHOTS_REPOSITORY_H diff --git a/common/repositories/base/base_ip_exemptions_repository.h b/common/repositories/base/base_ip_exemptions_repository.h new file mode 100644 index 000000000..9a2bcb45c --- /dev/null +++ b/common/repositories/base/base_ip_exemptions_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_IP_EXEMPTIONS_REPOSITORY_H +#define EQEMU_BASE_IP_EXEMPTIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseIpExemptionsRepository { +public: + struct IpExemptions { + int exemption_id; + std::string exemption_ip; + int exemption_amount; + }; + + static std::string PrimaryKey() + { + return std::string("exemption_id"); + } + + static std::vector Columns() + { + return { + "exemption_id", + "exemption_ip", + "exemption_amount", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ip_exemptions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static IpExemptions NewEntity() + { + IpExemptions entry{}; + + entry.exemption_id = 0; + entry.exemption_ip = ""; + entry.exemption_amount = 0; + + return entry; + } + + static IpExemptions GetIpExemptionsEntry( + const std::vector &ip_exemptionss, + int ip_exemptions_id + ) + { + for (auto &ip_exemptions : ip_exemptionss) { + if (ip_exemptions.exemption_id == ip_exemptions_id) { + return ip_exemptions; + } + } + + return NewEntity(); + } + + static IpExemptions FindOne( + int ip_exemptions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ip_exemptions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1] ? row[1] : ""; + entry.exemption_amount = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ip_exemptions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ip_exemptions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + IpExemptions ip_exemptions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(ip_exemptions_entry.exemption_amount)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ip_exemptions_entry.exemption_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static IpExemptions InsertOne( + IpExemptions ip_exemptions_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ip_exemptions_entry.id = results.LastInsertedID(); + return ip_exemptions_entry; + } + + ip_exemptions_entry = NewEntity(); + + return ip_exemptions_entry; + } + + static int InsertMany( + std::vector ip_exemptions_entries + ) + { + std::vector insert_chunks; + + for (auto &ip_exemptions_entry: ip_exemptions_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); + insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1] ? row[1] : ""; + entry.exemption_amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + IpExemptions entry{}; + + entry.exemption_id = atoi(row[0]); + entry.exemption_ip = row[1] ? row[1] : ""; + entry.exemption_amount = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_IP_EXEMPTIONS_REPOSITORY_H diff --git a/common/repositories/base/base_item_tick_repository.h b/common/repositories/base/base_item_tick_repository.h new file mode 100644 index 000000000..b22039a37 --- /dev/null +++ b/common/repositories/base/base_item_tick_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ITEM_TICK_REPOSITORY_H +#define EQEMU_BASE_ITEM_TICK_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseItemTickRepository { +public: + struct ItemTick { + int it_itemid; + int it_chance; + int it_level; + int it_id; + std::string it_qglobal; + int8 it_bagslot; + }; + + static std::string PrimaryKey() + { + return std::string("it_id"); + } + + static std::vector Columns() + { + return { + "it_itemid", + "it_chance", + "it_level", + "it_id", + "it_qglobal", + "it_bagslot", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("item_tick"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ItemTick NewEntity() + { + ItemTick entry{}; + + entry.it_itemid = 0; + entry.it_chance = 0; + entry.it_level = 0; + entry.it_id = 0; + entry.it_qglobal = ""; + entry.it_bagslot = 0; + + return entry; + } + + static ItemTick GetItemTickEntry( + const std::vector &item_ticks, + int item_tick_id + ) + { + for (auto &item_tick : item_ticks) { + if (item_tick.it_id == item_tick_id) { + return item_tick; + } + } + + return NewEntity(); + } + + static ItemTick FindOne( + int item_tick_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + item_tick_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4] ? row[4] : ""; + entry.it_bagslot = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int item_tick_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + item_tick_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ItemTick item_tick_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(item_tick_entry.it_itemid)); + update_values.push_back(columns[1] + " = " + std::to_string(item_tick_entry.it_chance)); + update_values.push_back(columns[2] + " = " + std::to_string(item_tick_entry.it_level)); + update_values.push_back(columns[4] + " = '" + EscapeString(item_tick_entry.it_qglobal) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(item_tick_entry.it_bagslot)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + item_tick_entry.it_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ItemTick InsertOne( + ItemTick item_tick_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); + insert_values.push_back(std::to_string(item_tick_entry.it_chance)); + insert_values.push_back(std::to_string(item_tick_entry.it_level)); + insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); + insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + item_tick_entry.id = results.LastInsertedID(); + return item_tick_entry; + } + + item_tick_entry = NewEntity(); + + return item_tick_entry; + } + + static int InsertMany( + std::vector item_tick_entries + ) + { + std::vector insert_chunks; + + for (auto &item_tick_entry: item_tick_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); + insert_values.push_back(std::to_string(item_tick_entry.it_chance)); + insert_values.push_back(std::to_string(item_tick_entry.it_level)); + insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); + insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4] ? row[4] : ""; + entry.it_bagslot = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ItemTick entry{}; + + entry.it_itemid = atoi(row[0]); + entry.it_chance = atoi(row[1]); + entry.it_level = atoi(row[2]); + entry.it_id = atoi(row[3]); + entry.it_qglobal = row[4] ? row[4] : ""; + entry.it_bagslot = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ITEM_TICK_REPOSITORY_H diff --git a/common/repositories/base/base_items_repository.h b/common/repositories/base/base_items_repository.h new file mode 100644 index 000000000..69a053c2c --- /dev/null +++ b/common/repositories/base/base_items_repository.h @@ -0,0 +1,2853 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ITEMS_REPOSITORY_H +#define EQEMU_BASE_ITEMS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseItemsRepository { +public: + struct Items { + int id; + int16 minstatus; + std::string Name; + int aagi; + int ac; + int accuracy; + int acha; + int adex; + int aint; + int8 artifactflag; + int asta; + int astr; + int attack; + int augrestrict; + int8 augslot1type; + int8 augslot1visible; + int8 augslot2type; + int8 augslot2visible; + int8 augslot3type; + int8 augslot3visible; + int8 augslot4type; + int8 augslot4visible; + int8 augslot5type; + int8 augslot5visible; + int8 augslot6type; + int8 augslot6visible; + int augtype; + int avoidance; + int awis; + int bagsize; + int bagslots; + int bagtype; + int bagwr; + int banedmgamt; + int banedmgraceamt; + int banedmgbody; + int banedmgrace; + int bardtype; + int bardvalue; + int book; + int casttime; + int casttime_; + std::string charmfile; + std::string charmfileid; + int classes; + int color; + std::string combateffects; + int extradmgskill; + int extradmgamt; + int price; + int cr; + int damage; + int damageshield; + int deity; + int delay; + int augdistiller; + int dotshielding; + int dr; + int clicktype; + int clicklevel2; + int elemdmgtype; + int elemdmgamt; + int endur; + int factionamt1; + int factionamt2; + int factionamt3; + int factionamt4; + int factionmod1; + int factionmod2; + int factionmod3; + int factionmod4; + std::string filename; + int focuseffect; + int fr; + int fvnodrop; + int haste; + int clicklevel; + int hp; + int regen; + int icon; + std::string idfile; + int itemclass; + int itemtype; + int ldonprice; + int ldontheme; + int ldonsold; + int light; + std::string lore; + int loregroup; + int magic; + int mana; + int manaregen; + int enduranceregen; + int material; + int herosforgemodel; + int maxcharges; + int mr; + int nodrop; + int norent; + int8 pendingloreflag; + int pr; + int procrate; + int races; + int range; + int reclevel; + int recskill; + int reqlevel; + float sellrate; + int shielding; + int size; + int skillmodtype; + int skillmodvalue; + int slots; + int clickeffect; + int spellshield; + int strikethrough; + int stunresist; + int8 summonedflag; + int tradeskills; + int favor; + int weight; + int UNK012; + int UNK013; + int benefitflag; + int UNK054; + int UNK059; + int booktype; + int recastdelay; + int recasttype; + int guildfavor; + int UNK123; + int UNK124; + int attuneable; + int nopet; + std::string updated; + std::string comment; + int UNK127; + int pointtype; + int potionbelt; + int potionbeltslots; + int stacksize; + int notransfer; + int stackable; + std::string UNK134; + int UNK137; + int proceffect; + int proctype; + int proclevel2; + int proclevel; + int UNK142; + int worneffect; + int worntype; + int wornlevel2; + int wornlevel; + int UNK147; + int focustype; + int focuslevel2; + int focuslevel; + int UNK152; + int scrolleffect; + int scrolltype; + int scrolllevel2; + int scrolllevel; + int UNK157; + std::string serialized; + std::string verified; + std::string serialization; + std::string source; + int UNK033; + std::string lorefile; + int UNK014; + int svcorruption; + int skillmodmax; + int UNK060; + int augslot1unk2; + int augslot2unk2; + int augslot3unk2; + int augslot4unk2; + int augslot5unk2; + int augslot6unk2; + int UNK120; + int UNK121; + int questitemflag; + std::string UNK132; + int clickunk5; + std::string clickunk6; + int clickunk7; + int procunk1; + int procunk2; + int procunk3; + int procunk4; + std::string procunk6; + int procunk7; + int wornunk1; + int wornunk2; + int wornunk3; + int wornunk4; + int wornunk5; + std::string wornunk6; + int wornunk7; + int focusunk1; + int focusunk2; + int focusunk3; + int focusunk4; + int focusunk5; + std::string focusunk6; + int focusunk7; + int scrollunk1; + int scrollunk2; + int scrollunk3; + int scrollunk4; + int scrollunk5; + std::string scrollunk6; + int scrollunk7; + int UNK193; + int purity; + int evoitem; + int evoid; + int evolvinglevel; + int evomax; + std::string clickname; + std::string procname; + std::string wornname; + std::string focusname; + std::string scrollname; + int16 dsmitigation; + int16 heroic_str; + int16 heroic_int; + int16 heroic_wis; + int16 heroic_agi; + int16 heroic_dex; + int16 heroic_sta; + int16 heroic_cha; + int16 heroic_pr; + int16 heroic_dr; + int16 heroic_fr; + int16 heroic_cr; + int16 heroic_mr; + int16 heroic_svcorrup; + int16 healamt; + int16 spelldmg; + int16 clairvoyance; + int16 backstabdmg; + std::string created; + int16 elitematerial; + int16 ldonsellbackrate; + int16 scriptfileid; + int16 expendablearrow; + int16 powersourcecapacity; + int16 bardeffect; + int16 bardeffecttype; + int16 bardlevel2; + int16 bardlevel; + int16 bardunk1; + int16 bardunk2; + int16 bardunk3; + int16 bardunk4; + int16 bardunk5; + std::string bardname; + int16 bardunk7; + int16 UNK214; + int UNK219; + int UNK220; + int UNK221; + int heirloom; + int UNK223; + int UNK224; + int UNK225; + int UNK226; + int UNK227; + int UNK228; + int UNK229; + int UNK230; + int UNK231; + int UNK232; + int UNK233; + int UNK234; + int placeable; + int UNK236; + int UNK237; + int UNK238; + int UNK239; + int UNK240; + int UNK241; + int epicitem; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "minstatus", + "Name", + "aagi", + "ac", + "accuracy", + "acha", + "adex", + "aint", + "artifactflag", + "asta", + "astr", + "attack", + "augrestrict", + "augslot1type", + "augslot1visible", + "augslot2type", + "augslot2visible", + "augslot3type", + "augslot3visible", + "augslot4type", + "augslot4visible", + "augslot5type", + "augslot5visible", + "augslot6type", + "augslot6visible", + "augtype", + "avoidance", + "awis", + "bagsize", + "bagslots", + "bagtype", + "bagwr", + "banedmgamt", + "banedmgraceamt", + "banedmgbody", + "banedmgrace", + "bardtype", + "bardvalue", + "book", + "casttime", + "casttime_", + "charmfile", + "charmfileid", + "classes", + "color", + "combateffects", + "extradmgskill", + "extradmgamt", + "price", + "cr", + "damage", + "damageshield", + "deity", + "delay", + "augdistiller", + "dotshielding", + "dr", + "clicktype", + "clicklevel2", + "elemdmgtype", + "elemdmgamt", + "endur", + "factionamt1", + "factionamt2", + "factionamt3", + "factionamt4", + "factionmod1", + "factionmod2", + "factionmod3", + "factionmod4", + "filename", + "focuseffect", + "fr", + "fvnodrop", + "haste", + "clicklevel", + "hp", + "regen", + "icon", + "idfile", + "itemclass", + "itemtype", + "ldonprice", + "ldontheme", + "ldonsold", + "light", + "lore", + "loregroup", + "magic", + "mana", + "manaregen", + "enduranceregen", + "material", + "herosforgemodel", + "maxcharges", + "mr", + "nodrop", + "norent", + "pendingloreflag", + "pr", + "procrate", + "races", + "range", + "reclevel", + "recskill", + "reqlevel", + "sellrate", + "shielding", + "size", + "skillmodtype", + "skillmodvalue", + "slots", + "clickeffect", + "spellshield", + "strikethrough", + "stunresist", + "summonedflag", + "tradeskills", + "favor", + "weight", + "UNK012", + "UNK013", + "benefitflag", + "UNK054", + "UNK059", + "booktype", + "recastdelay", + "recasttype", + "guildfavor", + "UNK123", + "UNK124", + "attuneable", + "nopet", + "updated", + "comment", + "UNK127", + "pointtype", + "potionbelt", + "potionbeltslots", + "stacksize", + "notransfer", + "stackable", + "UNK134", + "UNK137", + "proceffect", + "proctype", + "proclevel2", + "proclevel", + "UNK142", + "worneffect", + "worntype", + "wornlevel2", + "wornlevel", + "UNK147", + "focustype", + "focuslevel2", + "focuslevel", + "UNK152", + "scrolleffect", + "scrolltype", + "scrolllevel2", + "scrolllevel", + "UNK157", + "serialized", + "verified", + "serialization", + "source", + "UNK033", + "lorefile", + "UNK014", + "svcorruption", + "skillmodmax", + "UNK060", + "augslot1unk2", + "augslot2unk2", + "augslot3unk2", + "augslot4unk2", + "augslot5unk2", + "augslot6unk2", + "UNK120", + "UNK121", + "questitemflag", + "UNK132", + "clickunk5", + "clickunk6", + "clickunk7", + "procunk1", + "procunk2", + "procunk3", + "procunk4", + "procunk6", + "procunk7", + "wornunk1", + "wornunk2", + "wornunk3", + "wornunk4", + "wornunk5", + "wornunk6", + "wornunk7", + "focusunk1", + "focusunk2", + "focusunk3", + "focusunk4", + "focusunk5", + "focusunk6", + "focusunk7", + "scrollunk1", + "scrollunk2", + "scrollunk3", + "scrollunk4", + "scrollunk5", + "scrollunk6", + "scrollunk7", + "UNK193", + "purity", + "evoitem", + "evoid", + "evolvinglevel", + "evomax", + "clickname", + "procname", + "wornname", + "focusname", + "scrollname", + "dsmitigation", + "heroic_str", + "heroic_int", + "heroic_wis", + "heroic_agi", + "heroic_dex", + "heroic_sta", + "heroic_cha", + "heroic_pr", + "heroic_dr", + "heroic_fr", + "heroic_cr", + "heroic_mr", + "heroic_svcorrup", + "healamt", + "spelldmg", + "clairvoyance", + "backstabdmg", + "created", + "elitematerial", + "ldonsellbackrate", + "scriptfileid", + "expendablearrow", + "powersourcecapacity", + "bardeffect", + "bardeffecttype", + "bardlevel2", + "bardlevel", + "bardunk1", + "bardunk2", + "bardunk3", + "bardunk4", + "bardunk5", + "bardname", + "bardunk7", + "UNK214", + "UNK219", + "UNK220", + "UNK221", + "heirloom", + "UNK223", + "UNK224", + "UNK225", + "UNK226", + "UNK227", + "UNK228", + "UNK229", + "UNK230", + "UNK231", + "UNK232", + "UNK233", + "UNK234", + "placeable", + "UNK236", + "UNK237", + "UNK238", + "UNK239", + "UNK240", + "UNK241", + "epicitem", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Items NewEntity() + { + Items entry{}; + + entry.id = 0; + entry.minstatus = 0; + entry.Name = ""; + entry.aagi = 0; + entry.ac = 0; + entry.accuracy = 0; + entry.acha = 0; + entry.adex = 0; + entry.aint = 0; + entry.artifactflag = 0; + entry.asta = 0; + entry.astr = 0; + entry.attack = 0; + entry.augrestrict = 0; + entry.augslot1type = 0; + entry.augslot1visible = 0; + entry.augslot2type = 0; + entry.augslot2visible = 0; + entry.augslot3type = 0; + entry.augslot3visible = 0; + entry.augslot4type = 0; + entry.augslot4visible = 0; + entry.augslot5type = 0; + entry.augslot5visible = 0; + entry.augslot6type = 0; + entry.augslot6visible = 0; + entry.augtype = 0; + entry.avoidance = 0; + entry.awis = 0; + entry.bagsize = 0; + entry.bagslots = 0; + entry.bagtype = 0; + entry.bagwr = 0; + entry.banedmgamt = 0; + entry.banedmgraceamt = 0; + entry.banedmgbody = 0; + entry.banedmgrace = 0; + entry.bardtype = 0; + entry.bardvalue = 0; + entry.book = 0; + entry.casttime = 0; + entry.casttime_ = 0; + entry.charmfile = ""; + entry.charmfileid = ""; + entry.classes = 0; + entry.color = 0; + entry.combateffects = ""; + entry.extradmgskill = 0; + entry.extradmgamt = 0; + entry.price = 0; + entry.cr = 0; + entry.damage = 0; + entry.damageshield = 0; + entry.deity = 0; + entry.delay = 0; + entry.augdistiller = 0; + entry.dotshielding = 0; + entry.dr = 0; + entry.clicktype = 0; + entry.clicklevel2 = 0; + entry.elemdmgtype = 0; + entry.elemdmgamt = 0; + entry.endur = 0; + entry.factionamt1 = 0; + entry.factionamt2 = 0; + entry.factionamt3 = 0; + entry.factionamt4 = 0; + entry.factionmod1 = 0; + entry.factionmod2 = 0; + entry.factionmod3 = 0; + entry.factionmod4 = 0; + entry.filename = ""; + entry.focuseffect = 0; + entry.fr = 0; + entry.fvnodrop = 0; + entry.haste = 0; + entry.clicklevel = 0; + entry.hp = 0; + entry.regen = 0; + entry.icon = 0; + entry.idfile = ""; + entry.itemclass = 0; + entry.itemtype = 0; + entry.ldonprice = 0; + entry.ldontheme = 0; + entry.ldonsold = 0; + entry.light = 0; + entry.lore = ""; + entry.loregroup = 0; + entry.magic = 0; + entry.mana = 0; + entry.manaregen = 0; + entry.enduranceregen = 0; + entry.material = 0; + entry.herosforgemodel = 0; + entry.maxcharges = 0; + entry.mr = 0; + entry.nodrop = 0; + entry.norent = 0; + entry.pendingloreflag = 0; + entry.pr = 0; + entry.procrate = 0; + entry.races = 0; + entry.range = 0; + entry.reclevel = 0; + entry.recskill = 0; + entry.reqlevel = 0; + entry.sellrate = 0; + entry.shielding = 0; + entry.size = 0; + entry.skillmodtype = 0; + entry.skillmodvalue = 0; + entry.slots = 0; + entry.clickeffect = 0; + entry.spellshield = 0; + entry.strikethrough = 0; + entry.stunresist = 0; + entry.summonedflag = 0; + entry.tradeskills = 0; + entry.favor = 0; + entry.weight = 0; + entry.UNK012 = 0; + entry.UNK013 = 0; + entry.benefitflag = 0; + entry.UNK054 = 0; + entry.UNK059 = 0; + entry.booktype = 0; + entry.recastdelay = 0; + entry.recasttype = 0; + entry.guildfavor = 0; + entry.UNK123 = 0; + entry.UNK124 = 0; + entry.attuneable = 0; + entry.nopet = 0; + entry.updated = "0000-00-00 00:00:00"; + entry.comment = ""; + entry.UNK127 = 0; + entry.pointtype = 0; + entry.potionbelt = 0; + entry.potionbeltslots = 0; + entry.stacksize = 0; + entry.notransfer = 0; + entry.stackable = 0; + entry.UNK134 = ""; + entry.UNK137 = 0; + entry.proceffect = 0; + entry.proctype = 0; + entry.proclevel2 = 0; + entry.proclevel = 0; + entry.UNK142 = 0; + entry.worneffect = 0; + entry.worntype = 0; + entry.wornlevel2 = 0; + entry.wornlevel = 0; + entry.UNK147 = 0; + entry.focustype = 0; + entry.focuslevel2 = 0; + entry.focuslevel = 0; + entry.UNK152 = 0; + entry.scrolleffect = 0; + entry.scrolltype = 0; + entry.scrolllevel2 = 0; + entry.scrolllevel = 0; + entry.UNK157 = 0; + entry.serialized = 0; + entry.verified = 0; + entry.serialization = ""; + entry.source = ""; + entry.UNK033 = 0; + entry.lorefile = ""; + entry.UNK014 = 0; + entry.svcorruption = 0; + entry.skillmodmax = 0; + entry.UNK060 = 0; + entry.augslot1unk2 = 0; + entry.augslot2unk2 = 0; + entry.augslot3unk2 = 0; + entry.augslot4unk2 = 0; + entry.augslot5unk2 = 0; + entry.augslot6unk2 = 0; + entry.UNK120 = 0; + entry.UNK121 = 0; + entry.questitemflag = 0; + entry.UNK132 = ""; + entry.clickunk5 = 0; + entry.clickunk6 = ""; + entry.clickunk7 = 0; + entry.procunk1 = 0; + entry.procunk2 = 0; + entry.procunk3 = 0; + entry.procunk4 = 0; + entry.procunk6 = ""; + entry.procunk7 = 0; + entry.wornunk1 = 0; + entry.wornunk2 = 0; + entry.wornunk3 = 0; + entry.wornunk4 = 0; + entry.wornunk5 = 0; + entry.wornunk6 = ""; + entry.wornunk7 = 0; + entry.focusunk1 = 0; + entry.focusunk2 = 0; + entry.focusunk3 = 0; + entry.focusunk4 = 0; + entry.focusunk5 = 0; + entry.focusunk6 = ""; + entry.focusunk7 = 0; + entry.scrollunk1 = 0; + entry.scrollunk2 = 0; + entry.scrollunk3 = 0; + entry.scrollunk4 = 0; + entry.scrollunk5 = 0; + entry.scrollunk6 = ""; + entry.scrollunk7 = 0; + entry.UNK193 = 0; + entry.purity = 0; + entry.evoitem = 0; + entry.evoid = 0; + entry.evolvinglevel = 0; + entry.evomax = 0; + entry.clickname = ""; + entry.procname = ""; + entry.wornname = ""; + entry.focusname = ""; + entry.scrollname = ""; + entry.dsmitigation = 0; + entry.heroic_str = 0; + entry.heroic_int = 0; + entry.heroic_wis = 0; + entry.heroic_agi = 0; + entry.heroic_dex = 0; + entry.heroic_sta = 0; + entry.heroic_cha = 0; + entry.heroic_pr = 0; + entry.heroic_dr = 0; + entry.heroic_fr = 0; + entry.heroic_cr = 0; + entry.heroic_mr = 0; + entry.heroic_svcorrup = 0; + entry.healamt = 0; + entry.spelldmg = 0; + entry.clairvoyance = 0; + entry.backstabdmg = 0; + entry.created = ""; + entry.elitematerial = 0; + entry.ldonsellbackrate = 0; + entry.scriptfileid = 0; + entry.expendablearrow = 0; + entry.powersourcecapacity = 0; + entry.bardeffect = 0; + entry.bardeffecttype = 0; + entry.bardlevel2 = 0; + entry.bardlevel = 0; + entry.bardunk1 = 0; + entry.bardunk2 = 0; + entry.bardunk3 = 0; + entry.bardunk4 = 0; + entry.bardunk5 = 0; + entry.bardname = ""; + entry.bardunk7 = 0; + entry.UNK214 = 0; + entry.UNK219 = 0; + entry.UNK220 = 0; + entry.UNK221 = 0; + entry.heirloom = 0; + entry.UNK223 = 0; + entry.UNK224 = 0; + entry.UNK225 = 0; + entry.UNK226 = 0; + entry.UNK227 = 0; + entry.UNK228 = 0; + entry.UNK229 = 0; + entry.UNK230 = 0; + entry.UNK231 = 0; + entry.UNK232 = 0; + entry.UNK233 = 0; + entry.UNK234 = 0; + entry.placeable = 0; + entry.UNK236 = 0; + entry.UNK237 = 0; + entry.UNK238 = 0; + entry.UNK239 = 0; + entry.UNK240 = 0; + entry.UNK241 = 0; + entry.epicitem = 0; + + return entry; + } + + static Items GetItemsEntry( + const std::vector &itemss, + int items_id + ) + { + for (auto &items : itemss) { + if (items.id == items_id) { + return items; + } + } + + return NewEntity(); + } + + static Items FindOne( + int items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2] ? row[2] : ""; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46] ? row[46] : ""; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71] ? row[71] : ""; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80] ? row[80] : ""; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87] ? row[87] : ""; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143] ? row[143] : ""; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169] ? row[169] : ""; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183] ? row[183] : ""; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185] ? row[185] : ""; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191] ? row[191] : ""; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198] ? row[198] : ""; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205] ? row[205] : ""; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212] ? row[212] : ""; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243] ? row[243] : ""; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258] ? row[258] : ""; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Items items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(items_entry.minstatus)); + update_values.push_back(columns[2] + " = '" + EscapeString(items_entry.Name) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(items_entry.aagi)); + update_values.push_back(columns[4] + " = " + std::to_string(items_entry.ac)); + update_values.push_back(columns[5] + " = " + std::to_string(items_entry.accuracy)); + update_values.push_back(columns[6] + " = " + std::to_string(items_entry.acha)); + update_values.push_back(columns[7] + " = " + std::to_string(items_entry.adex)); + update_values.push_back(columns[8] + " = " + std::to_string(items_entry.aint)); + update_values.push_back(columns[9] + " = " + std::to_string(items_entry.artifactflag)); + update_values.push_back(columns[10] + " = " + std::to_string(items_entry.asta)); + update_values.push_back(columns[11] + " = " + std::to_string(items_entry.astr)); + update_values.push_back(columns[12] + " = " + std::to_string(items_entry.attack)); + update_values.push_back(columns[13] + " = " + std::to_string(items_entry.augrestrict)); + update_values.push_back(columns[14] + " = " + std::to_string(items_entry.augslot1type)); + update_values.push_back(columns[15] + " = " + std::to_string(items_entry.augslot1visible)); + update_values.push_back(columns[16] + " = " + std::to_string(items_entry.augslot2type)); + update_values.push_back(columns[17] + " = " + std::to_string(items_entry.augslot2visible)); + update_values.push_back(columns[18] + " = " + std::to_string(items_entry.augslot3type)); + update_values.push_back(columns[19] + " = " + std::to_string(items_entry.augslot3visible)); + update_values.push_back(columns[20] + " = " + std::to_string(items_entry.augslot4type)); + update_values.push_back(columns[21] + " = " + std::to_string(items_entry.augslot4visible)); + update_values.push_back(columns[22] + " = " + std::to_string(items_entry.augslot5type)); + update_values.push_back(columns[23] + " = " + std::to_string(items_entry.augslot5visible)); + update_values.push_back(columns[24] + " = " + std::to_string(items_entry.augslot6type)); + update_values.push_back(columns[25] + " = " + std::to_string(items_entry.augslot6visible)); + update_values.push_back(columns[26] + " = " + std::to_string(items_entry.augtype)); + update_values.push_back(columns[27] + " = " + std::to_string(items_entry.avoidance)); + update_values.push_back(columns[28] + " = " + std::to_string(items_entry.awis)); + update_values.push_back(columns[29] + " = " + std::to_string(items_entry.bagsize)); + update_values.push_back(columns[30] + " = " + std::to_string(items_entry.bagslots)); + update_values.push_back(columns[31] + " = " + std::to_string(items_entry.bagtype)); + update_values.push_back(columns[32] + " = " + std::to_string(items_entry.bagwr)); + update_values.push_back(columns[33] + " = " + std::to_string(items_entry.banedmgamt)); + update_values.push_back(columns[34] + " = " + std::to_string(items_entry.banedmgraceamt)); + update_values.push_back(columns[35] + " = " + std::to_string(items_entry.banedmgbody)); + update_values.push_back(columns[36] + " = " + std::to_string(items_entry.banedmgrace)); + update_values.push_back(columns[37] + " = " + std::to_string(items_entry.bardtype)); + update_values.push_back(columns[38] + " = " + std::to_string(items_entry.bardvalue)); + update_values.push_back(columns[39] + " = " + std::to_string(items_entry.book)); + update_values.push_back(columns[40] + " = " + std::to_string(items_entry.casttime)); + update_values.push_back(columns[41] + " = " + std::to_string(items_entry.casttime_)); + update_values.push_back(columns[42] + " = '" + EscapeString(items_entry.charmfile) + "'"); + update_values.push_back(columns[43] + " = '" + EscapeString(items_entry.charmfileid) + "'"); + update_values.push_back(columns[44] + " = " + std::to_string(items_entry.classes)); + update_values.push_back(columns[45] + " = " + std::to_string(items_entry.color)); + update_values.push_back(columns[46] + " = '" + EscapeString(items_entry.combateffects) + "'"); + update_values.push_back(columns[47] + " = " + std::to_string(items_entry.extradmgskill)); + update_values.push_back(columns[48] + " = " + std::to_string(items_entry.extradmgamt)); + update_values.push_back(columns[49] + " = " + std::to_string(items_entry.price)); + update_values.push_back(columns[50] + " = " + std::to_string(items_entry.cr)); + update_values.push_back(columns[51] + " = " + std::to_string(items_entry.damage)); + update_values.push_back(columns[52] + " = " + std::to_string(items_entry.damageshield)); + update_values.push_back(columns[53] + " = " + std::to_string(items_entry.deity)); + update_values.push_back(columns[54] + " = " + std::to_string(items_entry.delay)); + update_values.push_back(columns[55] + " = " + std::to_string(items_entry.augdistiller)); + update_values.push_back(columns[56] + " = " + std::to_string(items_entry.dotshielding)); + update_values.push_back(columns[57] + " = " + std::to_string(items_entry.dr)); + update_values.push_back(columns[58] + " = " + std::to_string(items_entry.clicktype)); + update_values.push_back(columns[59] + " = " + std::to_string(items_entry.clicklevel2)); + update_values.push_back(columns[60] + " = " + std::to_string(items_entry.elemdmgtype)); + update_values.push_back(columns[61] + " = " + std::to_string(items_entry.elemdmgamt)); + update_values.push_back(columns[62] + " = " + std::to_string(items_entry.endur)); + update_values.push_back(columns[63] + " = " + std::to_string(items_entry.factionamt1)); + update_values.push_back(columns[64] + " = " + std::to_string(items_entry.factionamt2)); + update_values.push_back(columns[65] + " = " + std::to_string(items_entry.factionamt3)); + update_values.push_back(columns[66] + " = " + std::to_string(items_entry.factionamt4)); + update_values.push_back(columns[67] + " = " + std::to_string(items_entry.factionmod1)); + update_values.push_back(columns[68] + " = " + std::to_string(items_entry.factionmod2)); + update_values.push_back(columns[69] + " = " + std::to_string(items_entry.factionmod3)); + update_values.push_back(columns[70] + " = " + std::to_string(items_entry.factionmod4)); + update_values.push_back(columns[71] + " = '" + EscapeString(items_entry.filename) + "'"); + update_values.push_back(columns[72] + " = " + std::to_string(items_entry.focuseffect)); + update_values.push_back(columns[73] + " = " + std::to_string(items_entry.fr)); + update_values.push_back(columns[74] + " = " + std::to_string(items_entry.fvnodrop)); + update_values.push_back(columns[75] + " = " + std::to_string(items_entry.haste)); + update_values.push_back(columns[76] + " = " + std::to_string(items_entry.clicklevel)); + update_values.push_back(columns[77] + " = " + std::to_string(items_entry.hp)); + update_values.push_back(columns[78] + " = " + std::to_string(items_entry.regen)); + update_values.push_back(columns[79] + " = " + std::to_string(items_entry.icon)); + update_values.push_back(columns[80] + " = '" + EscapeString(items_entry.idfile) + "'"); + update_values.push_back(columns[81] + " = " + std::to_string(items_entry.itemclass)); + update_values.push_back(columns[82] + " = " + std::to_string(items_entry.itemtype)); + update_values.push_back(columns[83] + " = " + std::to_string(items_entry.ldonprice)); + update_values.push_back(columns[84] + " = " + std::to_string(items_entry.ldontheme)); + update_values.push_back(columns[85] + " = " + std::to_string(items_entry.ldonsold)); + update_values.push_back(columns[86] + " = " + std::to_string(items_entry.light)); + update_values.push_back(columns[87] + " = '" + EscapeString(items_entry.lore) + "'"); + update_values.push_back(columns[88] + " = " + std::to_string(items_entry.loregroup)); + update_values.push_back(columns[89] + " = " + std::to_string(items_entry.magic)); + update_values.push_back(columns[90] + " = " + std::to_string(items_entry.mana)); + update_values.push_back(columns[91] + " = " + std::to_string(items_entry.manaregen)); + update_values.push_back(columns[92] + " = " + std::to_string(items_entry.enduranceregen)); + update_values.push_back(columns[93] + " = " + std::to_string(items_entry.material)); + update_values.push_back(columns[94] + " = " + std::to_string(items_entry.herosforgemodel)); + update_values.push_back(columns[95] + " = " + std::to_string(items_entry.maxcharges)); + update_values.push_back(columns[96] + " = " + std::to_string(items_entry.mr)); + update_values.push_back(columns[97] + " = " + std::to_string(items_entry.nodrop)); + update_values.push_back(columns[98] + " = " + std::to_string(items_entry.norent)); + update_values.push_back(columns[99] + " = " + std::to_string(items_entry.pendingloreflag)); + update_values.push_back(columns[100] + " = " + std::to_string(items_entry.pr)); + update_values.push_back(columns[101] + " = " + std::to_string(items_entry.procrate)); + update_values.push_back(columns[102] + " = " + std::to_string(items_entry.races)); + update_values.push_back(columns[103] + " = " + std::to_string(items_entry.range)); + update_values.push_back(columns[104] + " = " + std::to_string(items_entry.reclevel)); + update_values.push_back(columns[105] + " = " + std::to_string(items_entry.recskill)); + update_values.push_back(columns[106] + " = " + std::to_string(items_entry.reqlevel)); + update_values.push_back(columns[107] + " = " + std::to_string(items_entry.sellrate)); + update_values.push_back(columns[108] + " = " + std::to_string(items_entry.shielding)); + update_values.push_back(columns[109] + " = " + std::to_string(items_entry.size)); + update_values.push_back(columns[110] + " = " + std::to_string(items_entry.skillmodtype)); + update_values.push_back(columns[111] + " = " + std::to_string(items_entry.skillmodvalue)); + update_values.push_back(columns[112] + " = " + std::to_string(items_entry.slots)); + update_values.push_back(columns[113] + " = " + std::to_string(items_entry.clickeffect)); + update_values.push_back(columns[114] + " = " + std::to_string(items_entry.spellshield)); + update_values.push_back(columns[115] + " = " + std::to_string(items_entry.strikethrough)); + update_values.push_back(columns[116] + " = " + std::to_string(items_entry.stunresist)); + update_values.push_back(columns[117] + " = " + std::to_string(items_entry.summonedflag)); + update_values.push_back(columns[118] + " = " + std::to_string(items_entry.tradeskills)); + update_values.push_back(columns[119] + " = " + std::to_string(items_entry.favor)); + update_values.push_back(columns[120] + " = " + std::to_string(items_entry.weight)); + update_values.push_back(columns[121] + " = " + std::to_string(items_entry.UNK012)); + update_values.push_back(columns[122] + " = " + std::to_string(items_entry.UNK013)); + update_values.push_back(columns[123] + " = " + std::to_string(items_entry.benefitflag)); + update_values.push_back(columns[124] + " = " + std::to_string(items_entry.UNK054)); + update_values.push_back(columns[125] + " = " + std::to_string(items_entry.UNK059)); + update_values.push_back(columns[126] + " = " + std::to_string(items_entry.booktype)); + update_values.push_back(columns[127] + " = " + std::to_string(items_entry.recastdelay)); + update_values.push_back(columns[128] + " = " + std::to_string(items_entry.recasttype)); + update_values.push_back(columns[129] + " = " + std::to_string(items_entry.guildfavor)); + update_values.push_back(columns[130] + " = " + std::to_string(items_entry.UNK123)); + update_values.push_back(columns[131] + " = " + std::to_string(items_entry.UNK124)); + update_values.push_back(columns[132] + " = " + std::to_string(items_entry.attuneable)); + update_values.push_back(columns[133] + " = " + std::to_string(items_entry.nopet)); + update_values.push_back(columns[134] + " = '" + EscapeString(items_entry.updated) + "'"); + update_values.push_back(columns[135] + " = '" + EscapeString(items_entry.comment) + "'"); + update_values.push_back(columns[136] + " = " + std::to_string(items_entry.UNK127)); + update_values.push_back(columns[137] + " = " + std::to_string(items_entry.pointtype)); + update_values.push_back(columns[138] + " = " + std::to_string(items_entry.potionbelt)); + update_values.push_back(columns[139] + " = " + std::to_string(items_entry.potionbeltslots)); + update_values.push_back(columns[140] + " = " + std::to_string(items_entry.stacksize)); + update_values.push_back(columns[141] + " = " + std::to_string(items_entry.notransfer)); + update_values.push_back(columns[142] + " = " + std::to_string(items_entry.stackable)); + update_values.push_back(columns[143] + " = '" + EscapeString(items_entry.UNK134) + "'"); + update_values.push_back(columns[144] + " = " + std::to_string(items_entry.UNK137)); + update_values.push_back(columns[145] + " = " + std::to_string(items_entry.proceffect)); + update_values.push_back(columns[146] + " = " + std::to_string(items_entry.proctype)); + update_values.push_back(columns[147] + " = " + std::to_string(items_entry.proclevel2)); + update_values.push_back(columns[148] + " = " + std::to_string(items_entry.proclevel)); + update_values.push_back(columns[149] + " = " + std::to_string(items_entry.UNK142)); + update_values.push_back(columns[150] + " = " + std::to_string(items_entry.worneffect)); + update_values.push_back(columns[151] + " = " + std::to_string(items_entry.worntype)); + update_values.push_back(columns[152] + " = " + std::to_string(items_entry.wornlevel2)); + update_values.push_back(columns[153] + " = " + std::to_string(items_entry.wornlevel)); + update_values.push_back(columns[154] + " = " + std::to_string(items_entry.UNK147)); + update_values.push_back(columns[155] + " = " + std::to_string(items_entry.focustype)); + update_values.push_back(columns[156] + " = " + std::to_string(items_entry.focuslevel2)); + update_values.push_back(columns[157] + " = " + std::to_string(items_entry.focuslevel)); + update_values.push_back(columns[158] + " = " + std::to_string(items_entry.UNK152)); + update_values.push_back(columns[159] + " = " + std::to_string(items_entry.scrolleffect)); + update_values.push_back(columns[160] + " = " + std::to_string(items_entry.scrolltype)); + update_values.push_back(columns[161] + " = " + std::to_string(items_entry.scrolllevel2)); + update_values.push_back(columns[162] + " = " + std::to_string(items_entry.scrolllevel)); + update_values.push_back(columns[163] + " = " + std::to_string(items_entry.UNK157)); + update_values.push_back(columns[164] + " = '" + EscapeString(items_entry.serialized) + "'"); + update_values.push_back(columns[165] + " = '" + EscapeString(items_entry.verified) + "'"); + update_values.push_back(columns[166] + " = '" + EscapeString(items_entry.serialization) + "'"); + update_values.push_back(columns[167] + " = '" + EscapeString(items_entry.source) + "'"); + update_values.push_back(columns[168] + " = " + std::to_string(items_entry.UNK033)); + update_values.push_back(columns[169] + " = '" + EscapeString(items_entry.lorefile) + "'"); + update_values.push_back(columns[170] + " = " + std::to_string(items_entry.UNK014)); + update_values.push_back(columns[171] + " = " + std::to_string(items_entry.svcorruption)); + update_values.push_back(columns[172] + " = " + std::to_string(items_entry.skillmodmax)); + update_values.push_back(columns[173] + " = " + std::to_string(items_entry.UNK060)); + update_values.push_back(columns[174] + " = " + std::to_string(items_entry.augslot1unk2)); + update_values.push_back(columns[175] + " = " + std::to_string(items_entry.augslot2unk2)); + update_values.push_back(columns[176] + " = " + std::to_string(items_entry.augslot3unk2)); + update_values.push_back(columns[177] + " = " + std::to_string(items_entry.augslot4unk2)); + update_values.push_back(columns[178] + " = " + std::to_string(items_entry.augslot5unk2)); + update_values.push_back(columns[179] + " = " + std::to_string(items_entry.augslot6unk2)); + update_values.push_back(columns[180] + " = " + std::to_string(items_entry.UNK120)); + update_values.push_back(columns[181] + " = " + std::to_string(items_entry.UNK121)); + update_values.push_back(columns[182] + " = " + std::to_string(items_entry.questitemflag)); + update_values.push_back(columns[183] + " = '" + EscapeString(items_entry.UNK132) + "'"); + update_values.push_back(columns[184] + " = " + std::to_string(items_entry.clickunk5)); + update_values.push_back(columns[185] + " = '" + EscapeString(items_entry.clickunk6) + "'"); + update_values.push_back(columns[186] + " = " + std::to_string(items_entry.clickunk7)); + update_values.push_back(columns[187] + " = " + std::to_string(items_entry.procunk1)); + update_values.push_back(columns[188] + " = " + std::to_string(items_entry.procunk2)); + update_values.push_back(columns[189] + " = " + std::to_string(items_entry.procunk3)); + update_values.push_back(columns[190] + " = " + std::to_string(items_entry.procunk4)); + update_values.push_back(columns[191] + " = '" + EscapeString(items_entry.procunk6) + "'"); + update_values.push_back(columns[192] + " = " + std::to_string(items_entry.procunk7)); + update_values.push_back(columns[193] + " = " + std::to_string(items_entry.wornunk1)); + update_values.push_back(columns[194] + " = " + std::to_string(items_entry.wornunk2)); + update_values.push_back(columns[195] + " = " + std::to_string(items_entry.wornunk3)); + update_values.push_back(columns[196] + " = " + std::to_string(items_entry.wornunk4)); + update_values.push_back(columns[197] + " = " + std::to_string(items_entry.wornunk5)); + update_values.push_back(columns[198] + " = '" + EscapeString(items_entry.wornunk6) + "'"); + update_values.push_back(columns[199] + " = " + std::to_string(items_entry.wornunk7)); + update_values.push_back(columns[200] + " = " + std::to_string(items_entry.focusunk1)); + update_values.push_back(columns[201] + " = " + std::to_string(items_entry.focusunk2)); + update_values.push_back(columns[202] + " = " + std::to_string(items_entry.focusunk3)); + update_values.push_back(columns[203] + " = " + std::to_string(items_entry.focusunk4)); + update_values.push_back(columns[204] + " = " + std::to_string(items_entry.focusunk5)); + update_values.push_back(columns[205] + " = '" + EscapeString(items_entry.focusunk6) + "'"); + update_values.push_back(columns[206] + " = " + std::to_string(items_entry.focusunk7)); + update_values.push_back(columns[207] + " = " + std::to_string(items_entry.scrollunk1)); + update_values.push_back(columns[208] + " = " + std::to_string(items_entry.scrollunk2)); + update_values.push_back(columns[209] + " = " + std::to_string(items_entry.scrollunk3)); + update_values.push_back(columns[210] + " = " + std::to_string(items_entry.scrollunk4)); + update_values.push_back(columns[211] + " = " + std::to_string(items_entry.scrollunk5)); + update_values.push_back(columns[212] + " = '" + EscapeString(items_entry.scrollunk6) + "'"); + update_values.push_back(columns[213] + " = " + std::to_string(items_entry.scrollunk7)); + update_values.push_back(columns[214] + " = " + std::to_string(items_entry.UNK193)); + update_values.push_back(columns[215] + " = " + std::to_string(items_entry.purity)); + update_values.push_back(columns[216] + " = " + std::to_string(items_entry.evoitem)); + update_values.push_back(columns[217] + " = " + std::to_string(items_entry.evoid)); + update_values.push_back(columns[218] + " = " + std::to_string(items_entry.evolvinglevel)); + update_values.push_back(columns[219] + " = " + std::to_string(items_entry.evomax)); + update_values.push_back(columns[220] + " = '" + EscapeString(items_entry.clickname) + "'"); + update_values.push_back(columns[221] + " = '" + EscapeString(items_entry.procname) + "'"); + update_values.push_back(columns[222] + " = '" + EscapeString(items_entry.wornname) + "'"); + update_values.push_back(columns[223] + " = '" + EscapeString(items_entry.focusname) + "'"); + update_values.push_back(columns[224] + " = '" + EscapeString(items_entry.scrollname) + "'"); + update_values.push_back(columns[225] + " = " + std::to_string(items_entry.dsmitigation)); + update_values.push_back(columns[226] + " = " + std::to_string(items_entry.heroic_str)); + update_values.push_back(columns[227] + " = " + std::to_string(items_entry.heroic_int)); + update_values.push_back(columns[228] + " = " + std::to_string(items_entry.heroic_wis)); + update_values.push_back(columns[229] + " = " + std::to_string(items_entry.heroic_agi)); + update_values.push_back(columns[230] + " = " + std::to_string(items_entry.heroic_dex)); + update_values.push_back(columns[231] + " = " + std::to_string(items_entry.heroic_sta)); + update_values.push_back(columns[232] + " = " + std::to_string(items_entry.heroic_cha)); + update_values.push_back(columns[233] + " = " + std::to_string(items_entry.heroic_pr)); + update_values.push_back(columns[234] + " = " + std::to_string(items_entry.heroic_dr)); + update_values.push_back(columns[235] + " = " + std::to_string(items_entry.heroic_fr)); + update_values.push_back(columns[236] + " = " + std::to_string(items_entry.heroic_cr)); + update_values.push_back(columns[237] + " = " + std::to_string(items_entry.heroic_mr)); + update_values.push_back(columns[238] + " = " + std::to_string(items_entry.heroic_svcorrup)); + update_values.push_back(columns[239] + " = " + std::to_string(items_entry.healamt)); + update_values.push_back(columns[240] + " = " + std::to_string(items_entry.spelldmg)); + update_values.push_back(columns[241] + " = " + std::to_string(items_entry.clairvoyance)); + update_values.push_back(columns[242] + " = " + std::to_string(items_entry.backstabdmg)); + update_values.push_back(columns[243] + " = '" + EscapeString(items_entry.created) + "'"); + update_values.push_back(columns[244] + " = " + std::to_string(items_entry.elitematerial)); + update_values.push_back(columns[245] + " = " + std::to_string(items_entry.ldonsellbackrate)); + update_values.push_back(columns[246] + " = " + std::to_string(items_entry.scriptfileid)); + update_values.push_back(columns[247] + " = " + std::to_string(items_entry.expendablearrow)); + update_values.push_back(columns[248] + " = " + std::to_string(items_entry.powersourcecapacity)); + update_values.push_back(columns[249] + " = " + std::to_string(items_entry.bardeffect)); + update_values.push_back(columns[250] + " = " + std::to_string(items_entry.bardeffecttype)); + update_values.push_back(columns[251] + " = " + std::to_string(items_entry.bardlevel2)); + update_values.push_back(columns[252] + " = " + std::to_string(items_entry.bardlevel)); + update_values.push_back(columns[253] + " = " + std::to_string(items_entry.bardunk1)); + update_values.push_back(columns[254] + " = " + std::to_string(items_entry.bardunk2)); + update_values.push_back(columns[255] + " = " + std::to_string(items_entry.bardunk3)); + update_values.push_back(columns[256] + " = " + std::to_string(items_entry.bardunk4)); + update_values.push_back(columns[257] + " = " + std::to_string(items_entry.bardunk5)); + update_values.push_back(columns[258] + " = '" + EscapeString(items_entry.bardname) + "'"); + update_values.push_back(columns[259] + " = " + std::to_string(items_entry.bardunk7)); + update_values.push_back(columns[260] + " = " + std::to_string(items_entry.UNK214)); + update_values.push_back(columns[261] + " = " + std::to_string(items_entry.UNK219)); + update_values.push_back(columns[262] + " = " + std::to_string(items_entry.UNK220)); + update_values.push_back(columns[263] + " = " + std::to_string(items_entry.UNK221)); + update_values.push_back(columns[264] + " = " + std::to_string(items_entry.heirloom)); + update_values.push_back(columns[265] + " = " + std::to_string(items_entry.UNK223)); + update_values.push_back(columns[266] + " = " + std::to_string(items_entry.UNK224)); + update_values.push_back(columns[267] + " = " + std::to_string(items_entry.UNK225)); + update_values.push_back(columns[268] + " = " + std::to_string(items_entry.UNK226)); + update_values.push_back(columns[269] + " = " + std::to_string(items_entry.UNK227)); + update_values.push_back(columns[270] + " = " + std::to_string(items_entry.UNK228)); + update_values.push_back(columns[271] + " = " + std::to_string(items_entry.UNK229)); + update_values.push_back(columns[272] + " = " + std::to_string(items_entry.UNK230)); + update_values.push_back(columns[273] + " = " + std::to_string(items_entry.UNK231)); + update_values.push_back(columns[274] + " = " + std::to_string(items_entry.UNK232)); + update_values.push_back(columns[275] + " = " + std::to_string(items_entry.UNK233)); + update_values.push_back(columns[276] + " = " + std::to_string(items_entry.UNK234)); + update_values.push_back(columns[277] + " = " + std::to_string(items_entry.placeable)); + update_values.push_back(columns[278] + " = " + std::to_string(items_entry.UNK236)); + update_values.push_back(columns[279] + " = " + std::to_string(items_entry.UNK237)); + update_values.push_back(columns[280] + " = " + std::to_string(items_entry.UNK238)); + update_values.push_back(columns[281] + " = " + std::to_string(items_entry.UNK239)); + update_values.push_back(columns[282] + " = " + std::to_string(items_entry.UNK240)); + update_values.push_back(columns[283] + " = " + std::to_string(items_entry.UNK241)); + update_values.push_back(columns[284] + " = " + std::to_string(items_entry.epicitem)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + items_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Items InsertOne( + Items items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(items_entry.minstatus)); + insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); + insert_values.push_back(std::to_string(items_entry.aagi)); + insert_values.push_back(std::to_string(items_entry.ac)); + insert_values.push_back(std::to_string(items_entry.accuracy)); + insert_values.push_back(std::to_string(items_entry.acha)); + insert_values.push_back(std::to_string(items_entry.adex)); + insert_values.push_back(std::to_string(items_entry.aint)); + insert_values.push_back(std::to_string(items_entry.artifactflag)); + insert_values.push_back(std::to_string(items_entry.asta)); + insert_values.push_back(std::to_string(items_entry.astr)); + insert_values.push_back(std::to_string(items_entry.attack)); + insert_values.push_back(std::to_string(items_entry.augrestrict)); + insert_values.push_back(std::to_string(items_entry.augslot1type)); + insert_values.push_back(std::to_string(items_entry.augslot1visible)); + insert_values.push_back(std::to_string(items_entry.augslot2type)); + insert_values.push_back(std::to_string(items_entry.augslot2visible)); + insert_values.push_back(std::to_string(items_entry.augslot3type)); + insert_values.push_back(std::to_string(items_entry.augslot3visible)); + insert_values.push_back(std::to_string(items_entry.augslot4type)); + insert_values.push_back(std::to_string(items_entry.augslot4visible)); + insert_values.push_back(std::to_string(items_entry.augslot5type)); + insert_values.push_back(std::to_string(items_entry.augslot5visible)); + insert_values.push_back(std::to_string(items_entry.augslot6type)); + insert_values.push_back(std::to_string(items_entry.augslot6visible)); + insert_values.push_back(std::to_string(items_entry.augtype)); + insert_values.push_back(std::to_string(items_entry.avoidance)); + insert_values.push_back(std::to_string(items_entry.awis)); + insert_values.push_back(std::to_string(items_entry.bagsize)); + insert_values.push_back(std::to_string(items_entry.bagslots)); + insert_values.push_back(std::to_string(items_entry.bagtype)); + insert_values.push_back(std::to_string(items_entry.bagwr)); + insert_values.push_back(std::to_string(items_entry.banedmgamt)); + insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); + insert_values.push_back(std::to_string(items_entry.banedmgbody)); + insert_values.push_back(std::to_string(items_entry.banedmgrace)); + insert_values.push_back(std::to_string(items_entry.bardtype)); + insert_values.push_back(std::to_string(items_entry.bardvalue)); + insert_values.push_back(std::to_string(items_entry.book)); + insert_values.push_back(std::to_string(items_entry.casttime)); + insert_values.push_back(std::to_string(items_entry.casttime_)); + insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); + insert_values.push_back(std::to_string(items_entry.classes)); + insert_values.push_back(std::to_string(items_entry.color)); + insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); + insert_values.push_back(std::to_string(items_entry.extradmgskill)); + insert_values.push_back(std::to_string(items_entry.extradmgamt)); + insert_values.push_back(std::to_string(items_entry.price)); + insert_values.push_back(std::to_string(items_entry.cr)); + insert_values.push_back(std::to_string(items_entry.damage)); + insert_values.push_back(std::to_string(items_entry.damageshield)); + insert_values.push_back(std::to_string(items_entry.deity)); + insert_values.push_back(std::to_string(items_entry.delay)); + insert_values.push_back(std::to_string(items_entry.augdistiller)); + insert_values.push_back(std::to_string(items_entry.dotshielding)); + insert_values.push_back(std::to_string(items_entry.dr)); + insert_values.push_back(std::to_string(items_entry.clicktype)); + insert_values.push_back(std::to_string(items_entry.clicklevel2)); + insert_values.push_back(std::to_string(items_entry.elemdmgtype)); + insert_values.push_back(std::to_string(items_entry.elemdmgamt)); + insert_values.push_back(std::to_string(items_entry.endur)); + insert_values.push_back(std::to_string(items_entry.factionamt1)); + insert_values.push_back(std::to_string(items_entry.factionamt2)); + insert_values.push_back(std::to_string(items_entry.factionamt3)); + insert_values.push_back(std::to_string(items_entry.factionamt4)); + insert_values.push_back(std::to_string(items_entry.factionmod1)); + insert_values.push_back(std::to_string(items_entry.factionmod2)); + insert_values.push_back(std::to_string(items_entry.factionmod3)); + insert_values.push_back(std::to_string(items_entry.factionmod4)); + insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); + insert_values.push_back(std::to_string(items_entry.focuseffect)); + insert_values.push_back(std::to_string(items_entry.fr)); + insert_values.push_back(std::to_string(items_entry.fvnodrop)); + insert_values.push_back(std::to_string(items_entry.haste)); + insert_values.push_back(std::to_string(items_entry.clicklevel)); + insert_values.push_back(std::to_string(items_entry.hp)); + insert_values.push_back(std::to_string(items_entry.regen)); + insert_values.push_back(std::to_string(items_entry.icon)); + insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); + insert_values.push_back(std::to_string(items_entry.itemclass)); + insert_values.push_back(std::to_string(items_entry.itemtype)); + insert_values.push_back(std::to_string(items_entry.ldonprice)); + insert_values.push_back(std::to_string(items_entry.ldontheme)); + insert_values.push_back(std::to_string(items_entry.ldonsold)); + insert_values.push_back(std::to_string(items_entry.light)); + insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); + insert_values.push_back(std::to_string(items_entry.loregroup)); + insert_values.push_back(std::to_string(items_entry.magic)); + insert_values.push_back(std::to_string(items_entry.mana)); + insert_values.push_back(std::to_string(items_entry.manaregen)); + insert_values.push_back(std::to_string(items_entry.enduranceregen)); + insert_values.push_back(std::to_string(items_entry.material)); + insert_values.push_back(std::to_string(items_entry.herosforgemodel)); + insert_values.push_back(std::to_string(items_entry.maxcharges)); + insert_values.push_back(std::to_string(items_entry.mr)); + insert_values.push_back(std::to_string(items_entry.nodrop)); + insert_values.push_back(std::to_string(items_entry.norent)); + insert_values.push_back(std::to_string(items_entry.pendingloreflag)); + insert_values.push_back(std::to_string(items_entry.pr)); + insert_values.push_back(std::to_string(items_entry.procrate)); + insert_values.push_back(std::to_string(items_entry.races)); + insert_values.push_back(std::to_string(items_entry.range)); + insert_values.push_back(std::to_string(items_entry.reclevel)); + insert_values.push_back(std::to_string(items_entry.recskill)); + insert_values.push_back(std::to_string(items_entry.reqlevel)); + insert_values.push_back(std::to_string(items_entry.sellrate)); + insert_values.push_back(std::to_string(items_entry.shielding)); + insert_values.push_back(std::to_string(items_entry.size)); + insert_values.push_back(std::to_string(items_entry.skillmodtype)); + insert_values.push_back(std::to_string(items_entry.skillmodvalue)); + insert_values.push_back(std::to_string(items_entry.slots)); + insert_values.push_back(std::to_string(items_entry.clickeffect)); + insert_values.push_back(std::to_string(items_entry.spellshield)); + insert_values.push_back(std::to_string(items_entry.strikethrough)); + insert_values.push_back(std::to_string(items_entry.stunresist)); + insert_values.push_back(std::to_string(items_entry.summonedflag)); + insert_values.push_back(std::to_string(items_entry.tradeskills)); + insert_values.push_back(std::to_string(items_entry.favor)); + insert_values.push_back(std::to_string(items_entry.weight)); + insert_values.push_back(std::to_string(items_entry.UNK012)); + insert_values.push_back(std::to_string(items_entry.UNK013)); + insert_values.push_back(std::to_string(items_entry.benefitflag)); + insert_values.push_back(std::to_string(items_entry.UNK054)); + insert_values.push_back(std::to_string(items_entry.UNK059)); + insert_values.push_back(std::to_string(items_entry.booktype)); + insert_values.push_back(std::to_string(items_entry.recastdelay)); + insert_values.push_back(std::to_string(items_entry.recasttype)); + insert_values.push_back(std::to_string(items_entry.guildfavor)); + insert_values.push_back(std::to_string(items_entry.UNK123)); + insert_values.push_back(std::to_string(items_entry.UNK124)); + insert_values.push_back(std::to_string(items_entry.attuneable)); + insert_values.push_back(std::to_string(items_entry.nopet)); + insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK127)); + insert_values.push_back(std::to_string(items_entry.pointtype)); + insert_values.push_back(std::to_string(items_entry.potionbelt)); + insert_values.push_back(std::to_string(items_entry.potionbeltslots)); + insert_values.push_back(std::to_string(items_entry.stacksize)); + insert_values.push_back(std::to_string(items_entry.notransfer)); + insert_values.push_back(std::to_string(items_entry.stackable)); + insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK137)); + insert_values.push_back(std::to_string(items_entry.proceffect)); + insert_values.push_back(std::to_string(items_entry.proctype)); + insert_values.push_back(std::to_string(items_entry.proclevel2)); + insert_values.push_back(std::to_string(items_entry.proclevel)); + insert_values.push_back(std::to_string(items_entry.UNK142)); + insert_values.push_back(std::to_string(items_entry.worneffect)); + insert_values.push_back(std::to_string(items_entry.worntype)); + insert_values.push_back(std::to_string(items_entry.wornlevel2)); + insert_values.push_back(std::to_string(items_entry.wornlevel)); + insert_values.push_back(std::to_string(items_entry.UNK147)); + insert_values.push_back(std::to_string(items_entry.focustype)); + insert_values.push_back(std::to_string(items_entry.focuslevel2)); + insert_values.push_back(std::to_string(items_entry.focuslevel)); + insert_values.push_back(std::to_string(items_entry.UNK152)); + insert_values.push_back(std::to_string(items_entry.scrolleffect)); + insert_values.push_back(std::to_string(items_entry.scrolltype)); + insert_values.push_back(std::to_string(items_entry.scrolllevel2)); + insert_values.push_back(std::to_string(items_entry.scrolllevel)); + insert_values.push_back(std::to_string(items_entry.UNK157)); + insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK033)); + insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK014)); + insert_values.push_back(std::to_string(items_entry.svcorruption)); + insert_values.push_back(std::to_string(items_entry.skillmodmax)); + insert_values.push_back(std::to_string(items_entry.UNK060)); + insert_values.push_back(std::to_string(items_entry.augslot1unk2)); + insert_values.push_back(std::to_string(items_entry.augslot2unk2)); + insert_values.push_back(std::to_string(items_entry.augslot3unk2)); + insert_values.push_back(std::to_string(items_entry.augslot4unk2)); + insert_values.push_back(std::to_string(items_entry.augslot5unk2)); + insert_values.push_back(std::to_string(items_entry.augslot6unk2)); + insert_values.push_back(std::to_string(items_entry.UNK120)); + insert_values.push_back(std::to_string(items_entry.UNK121)); + insert_values.push_back(std::to_string(items_entry.questitemflag)); + insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk5)); + insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk7)); + insert_values.push_back(std::to_string(items_entry.procunk1)); + insert_values.push_back(std::to_string(items_entry.procunk2)); + insert_values.push_back(std::to_string(items_entry.procunk3)); + insert_values.push_back(std::to_string(items_entry.procunk4)); + insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.procunk7)); + insert_values.push_back(std::to_string(items_entry.wornunk1)); + insert_values.push_back(std::to_string(items_entry.wornunk2)); + insert_values.push_back(std::to_string(items_entry.wornunk3)); + insert_values.push_back(std::to_string(items_entry.wornunk4)); + insert_values.push_back(std::to_string(items_entry.wornunk5)); + insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.wornunk7)); + insert_values.push_back(std::to_string(items_entry.focusunk1)); + insert_values.push_back(std::to_string(items_entry.focusunk2)); + insert_values.push_back(std::to_string(items_entry.focusunk3)); + insert_values.push_back(std::to_string(items_entry.focusunk4)); + insert_values.push_back(std::to_string(items_entry.focusunk5)); + insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.focusunk7)); + insert_values.push_back(std::to_string(items_entry.scrollunk1)); + insert_values.push_back(std::to_string(items_entry.scrollunk2)); + insert_values.push_back(std::to_string(items_entry.scrollunk3)); + insert_values.push_back(std::to_string(items_entry.scrollunk4)); + insert_values.push_back(std::to_string(items_entry.scrollunk5)); + insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.scrollunk7)); + insert_values.push_back(std::to_string(items_entry.UNK193)); + insert_values.push_back(std::to_string(items_entry.purity)); + insert_values.push_back(std::to_string(items_entry.evoitem)); + insert_values.push_back(std::to_string(items_entry.evoid)); + insert_values.push_back(std::to_string(items_entry.evolvinglevel)); + insert_values.push_back(std::to_string(items_entry.evomax)); + insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); + insert_values.push_back(std::to_string(items_entry.dsmitigation)); + insert_values.push_back(std::to_string(items_entry.heroic_str)); + insert_values.push_back(std::to_string(items_entry.heroic_int)); + insert_values.push_back(std::to_string(items_entry.heroic_wis)); + insert_values.push_back(std::to_string(items_entry.heroic_agi)); + insert_values.push_back(std::to_string(items_entry.heroic_dex)); + insert_values.push_back(std::to_string(items_entry.heroic_sta)); + insert_values.push_back(std::to_string(items_entry.heroic_cha)); + insert_values.push_back(std::to_string(items_entry.heroic_pr)); + insert_values.push_back(std::to_string(items_entry.heroic_dr)); + insert_values.push_back(std::to_string(items_entry.heroic_fr)); + insert_values.push_back(std::to_string(items_entry.heroic_cr)); + insert_values.push_back(std::to_string(items_entry.heroic_mr)); + insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); + insert_values.push_back(std::to_string(items_entry.healamt)); + insert_values.push_back(std::to_string(items_entry.spelldmg)); + insert_values.push_back(std::to_string(items_entry.clairvoyance)); + insert_values.push_back(std::to_string(items_entry.backstabdmg)); + insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); + insert_values.push_back(std::to_string(items_entry.elitematerial)); + insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); + insert_values.push_back(std::to_string(items_entry.scriptfileid)); + insert_values.push_back(std::to_string(items_entry.expendablearrow)); + insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); + insert_values.push_back(std::to_string(items_entry.bardeffect)); + insert_values.push_back(std::to_string(items_entry.bardeffecttype)); + insert_values.push_back(std::to_string(items_entry.bardlevel2)); + insert_values.push_back(std::to_string(items_entry.bardlevel)); + insert_values.push_back(std::to_string(items_entry.bardunk1)); + insert_values.push_back(std::to_string(items_entry.bardunk2)); + insert_values.push_back(std::to_string(items_entry.bardunk3)); + insert_values.push_back(std::to_string(items_entry.bardunk4)); + insert_values.push_back(std::to_string(items_entry.bardunk5)); + insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); + insert_values.push_back(std::to_string(items_entry.bardunk7)); + insert_values.push_back(std::to_string(items_entry.UNK214)); + insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.UNK220)); + insert_values.push_back(std::to_string(items_entry.UNK221)); + insert_values.push_back(std::to_string(items_entry.heirloom)); + insert_values.push_back(std::to_string(items_entry.UNK223)); + insert_values.push_back(std::to_string(items_entry.UNK224)); + insert_values.push_back(std::to_string(items_entry.UNK225)); + insert_values.push_back(std::to_string(items_entry.UNK226)); + insert_values.push_back(std::to_string(items_entry.UNK227)); + insert_values.push_back(std::to_string(items_entry.UNK228)); + insert_values.push_back(std::to_string(items_entry.UNK229)); + insert_values.push_back(std::to_string(items_entry.UNK230)); + insert_values.push_back(std::to_string(items_entry.UNK231)); + insert_values.push_back(std::to_string(items_entry.UNK232)); + insert_values.push_back(std::to_string(items_entry.UNK233)); + insert_values.push_back(std::to_string(items_entry.UNK234)); + insert_values.push_back(std::to_string(items_entry.placeable)); + insert_values.push_back(std::to_string(items_entry.UNK236)); + insert_values.push_back(std::to_string(items_entry.UNK237)); + insert_values.push_back(std::to_string(items_entry.UNK238)); + insert_values.push_back(std::to_string(items_entry.UNK239)); + insert_values.push_back(std::to_string(items_entry.UNK240)); + insert_values.push_back(std::to_string(items_entry.UNK241)); + insert_values.push_back(std::to_string(items_entry.epicitem)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + items_entry.id = results.LastInsertedID(); + return items_entry; + } + + items_entry = NewEntity(); + + return items_entry; + } + + static int InsertMany( + std::vector items_entries + ) + { + std::vector insert_chunks; + + for (auto &items_entry: items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(items_entry.minstatus)); + insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); + insert_values.push_back(std::to_string(items_entry.aagi)); + insert_values.push_back(std::to_string(items_entry.ac)); + insert_values.push_back(std::to_string(items_entry.accuracy)); + insert_values.push_back(std::to_string(items_entry.acha)); + insert_values.push_back(std::to_string(items_entry.adex)); + insert_values.push_back(std::to_string(items_entry.aint)); + insert_values.push_back(std::to_string(items_entry.artifactflag)); + insert_values.push_back(std::to_string(items_entry.asta)); + insert_values.push_back(std::to_string(items_entry.astr)); + insert_values.push_back(std::to_string(items_entry.attack)); + insert_values.push_back(std::to_string(items_entry.augrestrict)); + insert_values.push_back(std::to_string(items_entry.augslot1type)); + insert_values.push_back(std::to_string(items_entry.augslot1visible)); + insert_values.push_back(std::to_string(items_entry.augslot2type)); + insert_values.push_back(std::to_string(items_entry.augslot2visible)); + insert_values.push_back(std::to_string(items_entry.augslot3type)); + insert_values.push_back(std::to_string(items_entry.augslot3visible)); + insert_values.push_back(std::to_string(items_entry.augslot4type)); + insert_values.push_back(std::to_string(items_entry.augslot4visible)); + insert_values.push_back(std::to_string(items_entry.augslot5type)); + insert_values.push_back(std::to_string(items_entry.augslot5visible)); + insert_values.push_back(std::to_string(items_entry.augslot6type)); + insert_values.push_back(std::to_string(items_entry.augslot6visible)); + insert_values.push_back(std::to_string(items_entry.augtype)); + insert_values.push_back(std::to_string(items_entry.avoidance)); + insert_values.push_back(std::to_string(items_entry.awis)); + insert_values.push_back(std::to_string(items_entry.bagsize)); + insert_values.push_back(std::to_string(items_entry.bagslots)); + insert_values.push_back(std::to_string(items_entry.bagtype)); + insert_values.push_back(std::to_string(items_entry.bagwr)); + insert_values.push_back(std::to_string(items_entry.banedmgamt)); + insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); + insert_values.push_back(std::to_string(items_entry.banedmgbody)); + insert_values.push_back(std::to_string(items_entry.banedmgrace)); + insert_values.push_back(std::to_string(items_entry.bardtype)); + insert_values.push_back(std::to_string(items_entry.bardvalue)); + insert_values.push_back(std::to_string(items_entry.book)); + insert_values.push_back(std::to_string(items_entry.casttime)); + insert_values.push_back(std::to_string(items_entry.casttime_)); + insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); + insert_values.push_back(std::to_string(items_entry.classes)); + insert_values.push_back(std::to_string(items_entry.color)); + insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); + insert_values.push_back(std::to_string(items_entry.extradmgskill)); + insert_values.push_back(std::to_string(items_entry.extradmgamt)); + insert_values.push_back(std::to_string(items_entry.price)); + insert_values.push_back(std::to_string(items_entry.cr)); + insert_values.push_back(std::to_string(items_entry.damage)); + insert_values.push_back(std::to_string(items_entry.damageshield)); + insert_values.push_back(std::to_string(items_entry.deity)); + insert_values.push_back(std::to_string(items_entry.delay)); + insert_values.push_back(std::to_string(items_entry.augdistiller)); + insert_values.push_back(std::to_string(items_entry.dotshielding)); + insert_values.push_back(std::to_string(items_entry.dr)); + insert_values.push_back(std::to_string(items_entry.clicktype)); + insert_values.push_back(std::to_string(items_entry.clicklevel2)); + insert_values.push_back(std::to_string(items_entry.elemdmgtype)); + insert_values.push_back(std::to_string(items_entry.elemdmgamt)); + insert_values.push_back(std::to_string(items_entry.endur)); + insert_values.push_back(std::to_string(items_entry.factionamt1)); + insert_values.push_back(std::to_string(items_entry.factionamt2)); + insert_values.push_back(std::to_string(items_entry.factionamt3)); + insert_values.push_back(std::to_string(items_entry.factionamt4)); + insert_values.push_back(std::to_string(items_entry.factionmod1)); + insert_values.push_back(std::to_string(items_entry.factionmod2)); + insert_values.push_back(std::to_string(items_entry.factionmod3)); + insert_values.push_back(std::to_string(items_entry.factionmod4)); + insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); + insert_values.push_back(std::to_string(items_entry.focuseffect)); + insert_values.push_back(std::to_string(items_entry.fr)); + insert_values.push_back(std::to_string(items_entry.fvnodrop)); + insert_values.push_back(std::to_string(items_entry.haste)); + insert_values.push_back(std::to_string(items_entry.clicklevel)); + insert_values.push_back(std::to_string(items_entry.hp)); + insert_values.push_back(std::to_string(items_entry.regen)); + insert_values.push_back(std::to_string(items_entry.icon)); + insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); + insert_values.push_back(std::to_string(items_entry.itemclass)); + insert_values.push_back(std::to_string(items_entry.itemtype)); + insert_values.push_back(std::to_string(items_entry.ldonprice)); + insert_values.push_back(std::to_string(items_entry.ldontheme)); + insert_values.push_back(std::to_string(items_entry.ldonsold)); + insert_values.push_back(std::to_string(items_entry.light)); + insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); + insert_values.push_back(std::to_string(items_entry.loregroup)); + insert_values.push_back(std::to_string(items_entry.magic)); + insert_values.push_back(std::to_string(items_entry.mana)); + insert_values.push_back(std::to_string(items_entry.manaregen)); + insert_values.push_back(std::to_string(items_entry.enduranceregen)); + insert_values.push_back(std::to_string(items_entry.material)); + insert_values.push_back(std::to_string(items_entry.herosforgemodel)); + insert_values.push_back(std::to_string(items_entry.maxcharges)); + insert_values.push_back(std::to_string(items_entry.mr)); + insert_values.push_back(std::to_string(items_entry.nodrop)); + insert_values.push_back(std::to_string(items_entry.norent)); + insert_values.push_back(std::to_string(items_entry.pendingloreflag)); + insert_values.push_back(std::to_string(items_entry.pr)); + insert_values.push_back(std::to_string(items_entry.procrate)); + insert_values.push_back(std::to_string(items_entry.races)); + insert_values.push_back(std::to_string(items_entry.range)); + insert_values.push_back(std::to_string(items_entry.reclevel)); + insert_values.push_back(std::to_string(items_entry.recskill)); + insert_values.push_back(std::to_string(items_entry.reqlevel)); + insert_values.push_back(std::to_string(items_entry.sellrate)); + insert_values.push_back(std::to_string(items_entry.shielding)); + insert_values.push_back(std::to_string(items_entry.size)); + insert_values.push_back(std::to_string(items_entry.skillmodtype)); + insert_values.push_back(std::to_string(items_entry.skillmodvalue)); + insert_values.push_back(std::to_string(items_entry.slots)); + insert_values.push_back(std::to_string(items_entry.clickeffect)); + insert_values.push_back(std::to_string(items_entry.spellshield)); + insert_values.push_back(std::to_string(items_entry.strikethrough)); + insert_values.push_back(std::to_string(items_entry.stunresist)); + insert_values.push_back(std::to_string(items_entry.summonedflag)); + insert_values.push_back(std::to_string(items_entry.tradeskills)); + insert_values.push_back(std::to_string(items_entry.favor)); + insert_values.push_back(std::to_string(items_entry.weight)); + insert_values.push_back(std::to_string(items_entry.UNK012)); + insert_values.push_back(std::to_string(items_entry.UNK013)); + insert_values.push_back(std::to_string(items_entry.benefitflag)); + insert_values.push_back(std::to_string(items_entry.UNK054)); + insert_values.push_back(std::to_string(items_entry.UNK059)); + insert_values.push_back(std::to_string(items_entry.booktype)); + insert_values.push_back(std::to_string(items_entry.recastdelay)); + insert_values.push_back(std::to_string(items_entry.recasttype)); + insert_values.push_back(std::to_string(items_entry.guildfavor)); + insert_values.push_back(std::to_string(items_entry.UNK123)); + insert_values.push_back(std::to_string(items_entry.UNK124)); + insert_values.push_back(std::to_string(items_entry.attuneable)); + insert_values.push_back(std::to_string(items_entry.nopet)); + insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK127)); + insert_values.push_back(std::to_string(items_entry.pointtype)); + insert_values.push_back(std::to_string(items_entry.potionbelt)); + insert_values.push_back(std::to_string(items_entry.potionbeltslots)); + insert_values.push_back(std::to_string(items_entry.stacksize)); + insert_values.push_back(std::to_string(items_entry.notransfer)); + insert_values.push_back(std::to_string(items_entry.stackable)); + insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK137)); + insert_values.push_back(std::to_string(items_entry.proceffect)); + insert_values.push_back(std::to_string(items_entry.proctype)); + insert_values.push_back(std::to_string(items_entry.proclevel2)); + insert_values.push_back(std::to_string(items_entry.proclevel)); + insert_values.push_back(std::to_string(items_entry.UNK142)); + insert_values.push_back(std::to_string(items_entry.worneffect)); + insert_values.push_back(std::to_string(items_entry.worntype)); + insert_values.push_back(std::to_string(items_entry.wornlevel2)); + insert_values.push_back(std::to_string(items_entry.wornlevel)); + insert_values.push_back(std::to_string(items_entry.UNK147)); + insert_values.push_back(std::to_string(items_entry.focustype)); + insert_values.push_back(std::to_string(items_entry.focuslevel2)); + insert_values.push_back(std::to_string(items_entry.focuslevel)); + insert_values.push_back(std::to_string(items_entry.UNK152)); + insert_values.push_back(std::to_string(items_entry.scrolleffect)); + insert_values.push_back(std::to_string(items_entry.scrolltype)); + insert_values.push_back(std::to_string(items_entry.scrolllevel2)); + insert_values.push_back(std::to_string(items_entry.scrolllevel)); + insert_values.push_back(std::to_string(items_entry.UNK157)); + insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK033)); + insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); + insert_values.push_back(std::to_string(items_entry.UNK014)); + insert_values.push_back(std::to_string(items_entry.svcorruption)); + insert_values.push_back(std::to_string(items_entry.skillmodmax)); + insert_values.push_back(std::to_string(items_entry.UNK060)); + insert_values.push_back(std::to_string(items_entry.augslot1unk2)); + insert_values.push_back(std::to_string(items_entry.augslot2unk2)); + insert_values.push_back(std::to_string(items_entry.augslot3unk2)); + insert_values.push_back(std::to_string(items_entry.augslot4unk2)); + insert_values.push_back(std::to_string(items_entry.augslot5unk2)); + insert_values.push_back(std::to_string(items_entry.augslot6unk2)); + insert_values.push_back(std::to_string(items_entry.UNK120)); + insert_values.push_back(std::to_string(items_entry.UNK121)); + insert_values.push_back(std::to_string(items_entry.questitemflag)); + insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk5)); + insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.clickunk7)); + insert_values.push_back(std::to_string(items_entry.procunk1)); + insert_values.push_back(std::to_string(items_entry.procunk2)); + insert_values.push_back(std::to_string(items_entry.procunk3)); + insert_values.push_back(std::to_string(items_entry.procunk4)); + insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.procunk7)); + insert_values.push_back(std::to_string(items_entry.wornunk1)); + insert_values.push_back(std::to_string(items_entry.wornunk2)); + insert_values.push_back(std::to_string(items_entry.wornunk3)); + insert_values.push_back(std::to_string(items_entry.wornunk4)); + insert_values.push_back(std::to_string(items_entry.wornunk5)); + insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.wornunk7)); + insert_values.push_back(std::to_string(items_entry.focusunk1)); + insert_values.push_back(std::to_string(items_entry.focusunk2)); + insert_values.push_back(std::to_string(items_entry.focusunk3)); + insert_values.push_back(std::to_string(items_entry.focusunk4)); + insert_values.push_back(std::to_string(items_entry.focusunk5)); + insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.focusunk7)); + insert_values.push_back(std::to_string(items_entry.scrollunk1)); + insert_values.push_back(std::to_string(items_entry.scrollunk2)); + insert_values.push_back(std::to_string(items_entry.scrollunk3)); + insert_values.push_back(std::to_string(items_entry.scrollunk4)); + insert_values.push_back(std::to_string(items_entry.scrollunk5)); + insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); + insert_values.push_back(std::to_string(items_entry.scrollunk7)); + insert_values.push_back(std::to_string(items_entry.UNK193)); + insert_values.push_back(std::to_string(items_entry.purity)); + insert_values.push_back(std::to_string(items_entry.evoitem)); + insert_values.push_back(std::to_string(items_entry.evoid)); + insert_values.push_back(std::to_string(items_entry.evolvinglevel)); + insert_values.push_back(std::to_string(items_entry.evomax)); + insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); + insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); + insert_values.push_back(std::to_string(items_entry.dsmitigation)); + insert_values.push_back(std::to_string(items_entry.heroic_str)); + insert_values.push_back(std::to_string(items_entry.heroic_int)); + insert_values.push_back(std::to_string(items_entry.heroic_wis)); + insert_values.push_back(std::to_string(items_entry.heroic_agi)); + insert_values.push_back(std::to_string(items_entry.heroic_dex)); + insert_values.push_back(std::to_string(items_entry.heroic_sta)); + insert_values.push_back(std::to_string(items_entry.heroic_cha)); + insert_values.push_back(std::to_string(items_entry.heroic_pr)); + insert_values.push_back(std::to_string(items_entry.heroic_dr)); + insert_values.push_back(std::to_string(items_entry.heroic_fr)); + insert_values.push_back(std::to_string(items_entry.heroic_cr)); + insert_values.push_back(std::to_string(items_entry.heroic_mr)); + insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); + insert_values.push_back(std::to_string(items_entry.healamt)); + insert_values.push_back(std::to_string(items_entry.spelldmg)); + insert_values.push_back(std::to_string(items_entry.clairvoyance)); + insert_values.push_back(std::to_string(items_entry.backstabdmg)); + insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); + insert_values.push_back(std::to_string(items_entry.elitematerial)); + insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); + insert_values.push_back(std::to_string(items_entry.scriptfileid)); + insert_values.push_back(std::to_string(items_entry.expendablearrow)); + insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); + insert_values.push_back(std::to_string(items_entry.bardeffect)); + insert_values.push_back(std::to_string(items_entry.bardeffecttype)); + insert_values.push_back(std::to_string(items_entry.bardlevel2)); + insert_values.push_back(std::to_string(items_entry.bardlevel)); + insert_values.push_back(std::to_string(items_entry.bardunk1)); + insert_values.push_back(std::to_string(items_entry.bardunk2)); + insert_values.push_back(std::to_string(items_entry.bardunk3)); + insert_values.push_back(std::to_string(items_entry.bardunk4)); + insert_values.push_back(std::to_string(items_entry.bardunk5)); + insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); + insert_values.push_back(std::to_string(items_entry.bardunk7)); + insert_values.push_back(std::to_string(items_entry.UNK214)); + insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.UNK220)); + insert_values.push_back(std::to_string(items_entry.UNK221)); + insert_values.push_back(std::to_string(items_entry.heirloom)); + insert_values.push_back(std::to_string(items_entry.UNK223)); + insert_values.push_back(std::to_string(items_entry.UNK224)); + insert_values.push_back(std::to_string(items_entry.UNK225)); + insert_values.push_back(std::to_string(items_entry.UNK226)); + insert_values.push_back(std::to_string(items_entry.UNK227)); + insert_values.push_back(std::to_string(items_entry.UNK228)); + insert_values.push_back(std::to_string(items_entry.UNK229)); + insert_values.push_back(std::to_string(items_entry.UNK230)); + insert_values.push_back(std::to_string(items_entry.UNK231)); + insert_values.push_back(std::to_string(items_entry.UNK232)); + insert_values.push_back(std::to_string(items_entry.UNK233)); + insert_values.push_back(std::to_string(items_entry.UNK234)); + insert_values.push_back(std::to_string(items_entry.placeable)); + insert_values.push_back(std::to_string(items_entry.UNK236)); + insert_values.push_back(std::to_string(items_entry.UNK237)); + insert_values.push_back(std::to_string(items_entry.UNK238)); + insert_values.push_back(std::to_string(items_entry.UNK239)); + insert_values.push_back(std::to_string(items_entry.UNK240)); + insert_values.push_back(std::to_string(items_entry.UNK241)); + insert_values.push_back(std::to_string(items_entry.epicitem)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2] ? row[2] : ""; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46] ? row[46] : ""; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71] ? row[71] : ""; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80] ? row[80] : ""; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87] ? row[87] : ""; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143] ? row[143] : ""; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169] ? row[169] : ""; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183] ? row[183] : ""; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185] ? row[185] : ""; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191] ? row[191] : ""; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198] ? row[198] : ""; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205] ? row[205] : ""; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212] ? row[212] : ""; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243] ? row[243] : ""; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258] ? row[258] : ""; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Items entry{}; + + entry.id = atoi(row[0]); + entry.minstatus = atoi(row[1]); + entry.Name = row[2] ? row[2] : ""; + entry.aagi = atoi(row[3]); + entry.ac = atoi(row[4]); + entry.accuracy = atoi(row[5]); + entry.acha = atoi(row[6]); + entry.adex = atoi(row[7]); + entry.aint = atoi(row[8]); + entry.artifactflag = atoi(row[9]); + entry.asta = atoi(row[10]); + entry.astr = atoi(row[11]); + entry.attack = atoi(row[12]); + entry.augrestrict = atoi(row[13]); + entry.augslot1type = atoi(row[14]); + entry.augslot1visible = atoi(row[15]); + entry.augslot2type = atoi(row[16]); + entry.augslot2visible = atoi(row[17]); + entry.augslot3type = atoi(row[18]); + entry.augslot3visible = atoi(row[19]); + entry.augslot4type = atoi(row[20]); + entry.augslot4visible = atoi(row[21]); + entry.augslot5type = atoi(row[22]); + entry.augslot5visible = atoi(row[23]); + entry.augslot6type = atoi(row[24]); + entry.augslot6visible = atoi(row[25]); + entry.augtype = atoi(row[26]); + entry.avoidance = atoi(row[27]); + entry.awis = atoi(row[28]); + entry.bagsize = atoi(row[29]); + entry.bagslots = atoi(row[30]); + entry.bagtype = atoi(row[31]); + entry.bagwr = atoi(row[32]); + entry.banedmgamt = atoi(row[33]); + entry.banedmgraceamt = atoi(row[34]); + entry.banedmgbody = atoi(row[35]); + entry.banedmgrace = atoi(row[36]); + entry.bardtype = atoi(row[37]); + entry.bardvalue = atoi(row[38]); + entry.book = atoi(row[39]); + entry.casttime = atoi(row[40]); + entry.casttime_ = atoi(row[41]); + entry.charmfile = row[42] ? row[42] : ""; + entry.charmfileid = row[43] ? row[43] : ""; + entry.classes = atoi(row[44]); + entry.color = atoi(row[45]); + entry.combateffects = row[46] ? row[46] : ""; + entry.extradmgskill = atoi(row[47]); + entry.extradmgamt = atoi(row[48]); + entry.price = atoi(row[49]); + entry.cr = atoi(row[50]); + entry.damage = atoi(row[51]); + entry.damageshield = atoi(row[52]); + entry.deity = atoi(row[53]); + entry.delay = atoi(row[54]); + entry.augdistiller = atoi(row[55]); + entry.dotshielding = atoi(row[56]); + entry.dr = atoi(row[57]); + entry.clicktype = atoi(row[58]); + entry.clicklevel2 = atoi(row[59]); + entry.elemdmgtype = atoi(row[60]); + entry.elemdmgamt = atoi(row[61]); + entry.endur = atoi(row[62]); + entry.factionamt1 = atoi(row[63]); + entry.factionamt2 = atoi(row[64]); + entry.factionamt3 = atoi(row[65]); + entry.factionamt4 = atoi(row[66]); + entry.factionmod1 = atoi(row[67]); + entry.factionmod2 = atoi(row[68]); + entry.factionmod3 = atoi(row[69]); + entry.factionmod4 = atoi(row[70]); + entry.filename = row[71] ? row[71] : ""; + entry.focuseffect = atoi(row[72]); + entry.fr = atoi(row[73]); + entry.fvnodrop = atoi(row[74]); + entry.haste = atoi(row[75]); + entry.clicklevel = atoi(row[76]); + entry.hp = atoi(row[77]); + entry.regen = atoi(row[78]); + entry.icon = atoi(row[79]); + entry.idfile = row[80] ? row[80] : ""; + entry.itemclass = atoi(row[81]); + entry.itemtype = atoi(row[82]); + entry.ldonprice = atoi(row[83]); + entry.ldontheme = atoi(row[84]); + entry.ldonsold = atoi(row[85]); + entry.light = atoi(row[86]); + entry.lore = row[87] ? row[87] : ""; + entry.loregroup = atoi(row[88]); + entry.magic = atoi(row[89]); + entry.mana = atoi(row[90]); + entry.manaregen = atoi(row[91]); + entry.enduranceregen = atoi(row[92]); + entry.material = atoi(row[93]); + entry.herosforgemodel = atoi(row[94]); + entry.maxcharges = atoi(row[95]); + entry.mr = atoi(row[96]); + entry.nodrop = atoi(row[97]); + entry.norent = atoi(row[98]); + entry.pendingloreflag = atoi(row[99]); + entry.pr = atoi(row[100]); + entry.procrate = atoi(row[101]); + entry.races = atoi(row[102]); + entry.range = atoi(row[103]); + entry.reclevel = atoi(row[104]); + entry.recskill = atoi(row[105]); + entry.reqlevel = atoi(row[106]); + entry.sellrate = atof(row[107]); + entry.shielding = atoi(row[108]); + entry.size = atoi(row[109]); + entry.skillmodtype = atoi(row[110]); + entry.skillmodvalue = atoi(row[111]); + entry.slots = atoi(row[112]); + entry.clickeffect = atoi(row[113]); + entry.spellshield = atoi(row[114]); + entry.strikethrough = atoi(row[115]); + entry.stunresist = atoi(row[116]); + entry.summonedflag = atoi(row[117]); + entry.tradeskills = atoi(row[118]); + entry.favor = atoi(row[119]); + entry.weight = atoi(row[120]); + entry.UNK012 = atoi(row[121]); + entry.UNK013 = atoi(row[122]); + entry.benefitflag = atoi(row[123]); + entry.UNK054 = atoi(row[124]); + entry.UNK059 = atoi(row[125]); + entry.booktype = atoi(row[126]); + entry.recastdelay = atoi(row[127]); + entry.recasttype = atoi(row[128]); + entry.guildfavor = atoi(row[129]); + entry.UNK123 = atoi(row[130]); + entry.UNK124 = atoi(row[131]); + entry.attuneable = atoi(row[132]); + entry.nopet = atoi(row[133]); + entry.updated = row[134] ? row[134] : ""; + entry.comment = row[135] ? row[135] : ""; + entry.UNK127 = atoi(row[136]); + entry.pointtype = atoi(row[137]); + entry.potionbelt = atoi(row[138]); + entry.potionbeltslots = atoi(row[139]); + entry.stacksize = atoi(row[140]); + entry.notransfer = atoi(row[141]); + entry.stackable = atoi(row[142]); + entry.UNK134 = row[143] ? row[143] : ""; + entry.UNK137 = atoi(row[144]); + entry.proceffect = atoi(row[145]); + entry.proctype = atoi(row[146]); + entry.proclevel2 = atoi(row[147]); + entry.proclevel = atoi(row[148]); + entry.UNK142 = atoi(row[149]); + entry.worneffect = atoi(row[150]); + entry.worntype = atoi(row[151]); + entry.wornlevel2 = atoi(row[152]); + entry.wornlevel = atoi(row[153]); + entry.UNK147 = atoi(row[154]); + entry.focustype = atoi(row[155]); + entry.focuslevel2 = atoi(row[156]); + entry.focuslevel = atoi(row[157]); + entry.UNK152 = atoi(row[158]); + entry.scrolleffect = atoi(row[159]); + entry.scrolltype = atoi(row[160]); + entry.scrolllevel2 = atoi(row[161]); + entry.scrolllevel = atoi(row[162]); + entry.UNK157 = atoi(row[163]); + entry.serialized = row[164] ? row[164] : ""; + entry.verified = row[165] ? row[165] : ""; + entry.serialization = row[166] ? row[166] : ""; + entry.source = row[167] ? row[167] : ""; + entry.UNK033 = atoi(row[168]); + entry.lorefile = row[169] ? row[169] : ""; + entry.UNK014 = atoi(row[170]); + entry.svcorruption = atoi(row[171]); + entry.skillmodmax = atoi(row[172]); + entry.UNK060 = atoi(row[173]); + entry.augslot1unk2 = atoi(row[174]); + entry.augslot2unk2 = atoi(row[175]); + entry.augslot3unk2 = atoi(row[176]); + entry.augslot4unk2 = atoi(row[177]); + entry.augslot5unk2 = atoi(row[178]); + entry.augslot6unk2 = atoi(row[179]); + entry.UNK120 = atoi(row[180]); + entry.UNK121 = atoi(row[181]); + entry.questitemflag = atoi(row[182]); + entry.UNK132 = row[183] ? row[183] : ""; + entry.clickunk5 = atoi(row[184]); + entry.clickunk6 = row[185] ? row[185] : ""; + entry.clickunk7 = atoi(row[186]); + entry.procunk1 = atoi(row[187]); + entry.procunk2 = atoi(row[188]); + entry.procunk3 = atoi(row[189]); + entry.procunk4 = atoi(row[190]); + entry.procunk6 = row[191] ? row[191] : ""; + entry.procunk7 = atoi(row[192]); + entry.wornunk1 = atoi(row[193]); + entry.wornunk2 = atoi(row[194]); + entry.wornunk3 = atoi(row[195]); + entry.wornunk4 = atoi(row[196]); + entry.wornunk5 = atoi(row[197]); + entry.wornunk6 = row[198] ? row[198] : ""; + entry.wornunk7 = atoi(row[199]); + entry.focusunk1 = atoi(row[200]); + entry.focusunk2 = atoi(row[201]); + entry.focusunk3 = atoi(row[202]); + entry.focusunk4 = atoi(row[203]); + entry.focusunk5 = atoi(row[204]); + entry.focusunk6 = row[205] ? row[205] : ""; + entry.focusunk7 = atoi(row[206]); + entry.scrollunk1 = atoi(row[207]); + entry.scrollunk2 = atoi(row[208]); + entry.scrollunk3 = atoi(row[209]); + entry.scrollunk4 = atoi(row[210]); + entry.scrollunk5 = atoi(row[211]); + entry.scrollunk6 = row[212] ? row[212] : ""; + entry.scrollunk7 = atoi(row[213]); + entry.UNK193 = atoi(row[214]); + entry.purity = atoi(row[215]); + entry.evoitem = atoi(row[216]); + entry.evoid = atoi(row[217]); + entry.evolvinglevel = atoi(row[218]); + entry.evomax = atoi(row[219]); + entry.clickname = row[220] ? row[220] : ""; + entry.procname = row[221] ? row[221] : ""; + entry.wornname = row[222] ? row[222] : ""; + entry.focusname = row[223] ? row[223] : ""; + entry.scrollname = row[224] ? row[224] : ""; + entry.dsmitigation = atoi(row[225]); + entry.heroic_str = atoi(row[226]); + entry.heroic_int = atoi(row[227]); + entry.heroic_wis = atoi(row[228]); + entry.heroic_agi = atoi(row[229]); + entry.heroic_dex = atoi(row[230]); + entry.heroic_sta = atoi(row[231]); + entry.heroic_cha = atoi(row[232]); + entry.heroic_pr = atoi(row[233]); + entry.heroic_dr = atoi(row[234]); + entry.heroic_fr = atoi(row[235]); + entry.heroic_cr = atoi(row[236]); + entry.heroic_mr = atoi(row[237]); + entry.heroic_svcorrup = atoi(row[238]); + entry.healamt = atoi(row[239]); + entry.spelldmg = atoi(row[240]); + entry.clairvoyance = atoi(row[241]); + entry.backstabdmg = atoi(row[242]); + entry.created = row[243] ? row[243] : ""; + entry.elitematerial = atoi(row[244]); + entry.ldonsellbackrate = atoi(row[245]); + entry.scriptfileid = atoi(row[246]); + entry.expendablearrow = atoi(row[247]); + entry.powersourcecapacity = atoi(row[248]); + entry.bardeffect = atoi(row[249]); + entry.bardeffecttype = atoi(row[250]); + entry.bardlevel2 = atoi(row[251]); + entry.bardlevel = atoi(row[252]); + entry.bardunk1 = atoi(row[253]); + entry.bardunk2 = atoi(row[254]); + entry.bardunk3 = atoi(row[255]); + entry.bardunk4 = atoi(row[256]); + entry.bardunk5 = atoi(row[257]); + entry.bardname = row[258] ? row[258] : ""; + entry.bardunk7 = atoi(row[259]); + entry.UNK214 = atoi(row[260]); + entry.UNK219 = atoi(row[261]); + entry.UNK220 = atoi(row[262]); + entry.UNK221 = atoi(row[263]); + entry.heirloom = atoi(row[264]); + entry.UNK223 = atoi(row[265]); + entry.UNK224 = atoi(row[266]); + entry.UNK225 = atoi(row[267]); + entry.UNK226 = atoi(row[268]); + entry.UNK227 = atoi(row[269]); + entry.UNK228 = atoi(row[270]); + entry.UNK229 = atoi(row[271]); + entry.UNK230 = atoi(row[272]); + entry.UNK231 = atoi(row[273]); + entry.UNK232 = atoi(row[274]); + entry.UNK233 = atoi(row[275]); + entry.UNK234 = atoi(row[276]); + entry.placeable = atoi(row[277]); + entry.UNK236 = atoi(row[278]); + entry.UNK237 = atoi(row[279]); + entry.UNK238 = atoi(row[280]); + entry.UNK239 = atoi(row[281]); + entry.UNK240 = atoi(row[282]); + entry.UNK241 = atoi(row[283]); + entry.epicitem = atoi(row[284]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_launcher_repository.h b/common/repositories/base/base_launcher_repository.h new file mode 100644 index 000000000..04d148afc --- /dev/null +++ b/common/repositories/base/base_launcher_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LAUNCHER_REPOSITORY_H +#define EQEMU_BASE_LAUNCHER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLauncherRepository { +public: + struct Launcher { + std::string name; + int8 dynamics; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "name", + "dynamics", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("launcher"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Launcher NewEntity() + { + Launcher entry{}; + + entry.name = ""; + entry.dynamics = 0; + + return entry; + } + + static Launcher GetLauncherEntry( + const std::vector &launchers, + int launcher_id + ) + { + for (auto &launcher : launchers) { + if (launcher.name == launcher_id) { + return launcher; + } + } + + return NewEntity(); + } + + static Launcher FindOne( + int launcher_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + launcher_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Launcher entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.dynamics = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int launcher_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + launcher_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Launcher launcher_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(launcher_entry.dynamics)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + launcher_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Launcher InsertOne( + Launcher launcher_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_entry.dynamics)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + launcher_entry.id = results.LastInsertedID(); + return launcher_entry; + } + + launcher_entry = NewEntity(); + + return launcher_entry; + } + + static int InsertMany( + std::vector launcher_entries + ) + { + std::vector insert_chunks; + + for (auto &launcher_entry: launcher_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_entry.dynamics)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Launcher entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.dynamics = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Launcher entry{}; + + entry.name = row[0] ? row[0] : ""; + entry.dynamics = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LAUNCHER_REPOSITORY_H diff --git a/common/repositories/base/base_launcher_zones_repository.h b/common/repositories/base/base_launcher_zones_repository.h new file mode 100644 index 000000000..ba2fe82b3 --- /dev/null +++ b/common/repositories/base/base_launcher_zones_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H +#define EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLauncherZonesRepository { +public: + struct LauncherZones { + std::string launcher; + std::string zone; + int port; + }; + + static std::string PrimaryKey() + { + return std::string("zone"); + } + + static std::vector Columns() + { + return { + "launcher", + "zone", + "port", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("launcher_zones"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LauncherZones NewEntity() + { + LauncherZones entry{}; + + entry.launcher = ""; + entry.zone = ""; + entry.port = 0; + + return entry; + } + + static LauncherZones GetLauncherZonesEntry( + const std::vector &launcher_zoness, + int launcher_zones_id + ) + { + for (auto &launcher_zones : launcher_zoness) { + if (launcher_zones.zone == launcher_zones_id) { + return launcher_zones; + } + } + + return NewEntity(); + } + + static LauncherZones FindOne( + int launcher_zones_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + launcher_zones_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LauncherZones entry{}; + + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; + entry.port = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int launcher_zones_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + launcher_zones_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LauncherZones launcher_zones_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(launcher_zones_entry.port)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + launcher_zones_entry.zone + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LauncherZones InsertOne( + LauncherZones launcher_zones_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_zones_entry.port)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + launcher_zones_entry.id = results.LastInsertedID(); + return launcher_zones_entry; + } + + launcher_zones_entry = NewEntity(); + + return launcher_zones_entry; + } + + static int InsertMany( + std::vector launcher_zones_entries + ) + { + std::vector insert_chunks; + + for (auto &launcher_zones_entry: launcher_zones_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(launcher_zones_entry.port)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LauncherZones entry{}; + + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; + entry.port = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LauncherZones entry{}; + + entry.launcher = row[0] ? row[0] : ""; + entry.zone = row[1] ? row[1] : ""; + entry.port = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H diff --git a/common/repositories/base/base_ldon_trap_entries_repository.h b/common/repositories/base/base_ldon_trap_entries_repository.h new file mode 100644 index 000000000..aa6d7cc7a --- /dev/null +++ b/common/repositories/base/base_ldon_trap_entries_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LDON_TRAP_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_LDON_TRAP_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLdonTrapEntriesRepository { +public: + struct LdonTrapEntries { + int id; + int trap_id; + }; + + static std::string PrimaryKey() + { + return std::string("trap_id"); + } + + static std::vector Columns() + { + return { + "id", + "trap_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ldon_trap_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LdonTrapEntries NewEntity() + { + LdonTrapEntries entry{}; + + entry.id = 0; + entry.trap_id = 0; + + return entry; + } + + static LdonTrapEntries GetLdonTrapEntriesEntry( + const std::vector &ldon_trap_entriess, + int ldon_trap_entries_id + ) + { + for (auto &ldon_trap_entries : ldon_trap_entriess) { + if (ldon_trap_entries.trap_id == ldon_trap_entries_id) { + return ldon_trap_entries; + } + } + + return NewEntity(); + } + + static LdonTrapEntries FindOne( + int ldon_trap_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ldon_trap_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ldon_trap_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ldon_trap_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LdonTrapEntries ldon_trap_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ldon_trap_entries_entry.trap_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LdonTrapEntries InsertOne( + LdonTrapEntries ldon_trap_entries_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ldon_trap_entries_entry.id = results.LastInsertedID(); + return ldon_trap_entries_entry; + } + + ldon_trap_entries_entry = NewEntity(); + + return ldon_trap_entries_entry; + } + + static int InsertMany( + std::vector ldon_trap_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &ldon_trap_entries_entry: ldon_trap_entries_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapEntries entry{}; + + entry.id = atoi(row[0]); + entry.trap_id = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LDON_TRAP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_ldon_trap_templates_repository.h b/common/repositories/base/base_ldon_trap_templates_repository.h new file mode 100644 index 000000000..3d75990cf --- /dev/null +++ b/common/repositories/base/base_ldon_trap_templates_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LDON_TRAP_TEMPLATES_REPOSITORY_H +#define EQEMU_BASE_LDON_TRAP_TEMPLATES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLdonTrapTemplatesRepository { +public: + struct LdonTrapTemplates { + int id; + int8 type; + int16 spell_id; + int16 skill; + int8 locked; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "spell_id", + "skill", + "locked", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("ldon_trap_templates"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LdonTrapTemplates NewEntity() + { + LdonTrapTemplates entry{}; + + entry.id = 0; + entry.type = 1; + entry.spell_id = 0; + entry.skill = 0; + entry.locked = 0; + + return entry; + } + + static LdonTrapTemplates GetLdonTrapTemplatesEntry( + const std::vector &ldon_trap_templatess, + int ldon_trap_templates_id + ) + { + for (auto &ldon_trap_templates : ldon_trap_templatess) { + if (ldon_trap_templates.id == ldon_trap_templates_id) { + return ldon_trap_templates; + } + } + + return NewEntity(); + } + + static LdonTrapTemplates FindOne( + int ldon_trap_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + ldon_trap_templates_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int ldon_trap_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + ldon_trap_templates_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LdonTrapTemplates ldon_trap_templates_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(ldon_trap_templates_entry.type)); + update_values.push_back(columns[2] + " = " + std::to_string(ldon_trap_templates_entry.spell_id)); + update_values.push_back(columns[3] + " = " + std::to_string(ldon_trap_templates_entry.skill)); + update_values.push_back(columns[4] + " = " + std::to_string(ldon_trap_templates_entry.locked)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + ldon_trap_templates_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LdonTrapTemplates InsertOne( + LdonTrapTemplates ldon_trap_templates_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + ldon_trap_templates_entry.id = results.LastInsertedID(); + return ldon_trap_templates_entry; + } + + ldon_trap_templates_entry = NewEntity(); + + return ldon_trap_templates_entry; + } + + static int InsertMany( + std::vector ldon_trap_templates_entries + ) + { + std::vector insert_chunks; + + for (auto &ldon_trap_templates_entry: ldon_trap_templates_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); + insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LdonTrapTemplates entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.spell_id = atoi(row[2]); + entry.skill = atoi(row[3]); + entry.locked = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LDON_TRAP_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/base/base_level_exp_mods_repository.h b/common/repositories/base/base_level_exp_mods_repository.h new file mode 100644 index 000000000..d3c1b5249 --- /dev/null +++ b/common/repositories/base/base_level_exp_mods_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LEVEL_EXP_MODS_REPOSITORY_H +#define EQEMU_BASE_LEVEL_EXP_MODS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLevelExpModsRepository { +public: + struct LevelExpMods { + int level; + float exp_mod; + float aa_exp_mod; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "level", + "exp_mod", + "aa_exp_mod", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("level_exp_mods"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LevelExpMods NewEntity() + { + LevelExpMods entry{}; + + entry.level = 0; + entry.exp_mod = 0; + entry.aa_exp_mod = 0; + + return entry; + } + + static LevelExpMods GetLevelExpModsEntry( + const std::vector &level_exp_modss, + int level_exp_mods_id + ) + { + for (auto &level_exp_mods : level_exp_modss) { + if (level_exp_mods.level == level_exp_mods_id) { + return level_exp_mods; + } + } + + return NewEntity(); + } + + static LevelExpMods FindOne( + int level_exp_mods_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + level_exp_mods_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int level_exp_mods_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + level_exp_mods_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LevelExpMods level_exp_mods_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(level_exp_mods_entry.exp_mod)); + update_values.push_back(columns[2] + " = " + std::to_string(level_exp_mods_entry.aa_exp_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + level_exp_mods_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LevelExpMods InsertOne( + LevelExpMods level_exp_mods_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); + insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + level_exp_mods_entry.id = results.LastInsertedID(); + return level_exp_mods_entry; + } + + level_exp_mods_entry = NewEntity(); + + return level_exp_mods_entry; + } + + static int InsertMany( + std::vector level_exp_mods_entries + ) + { + std::vector insert_chunks; + + for (auto &level_exp_mods_entry: level_exp_mods_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); + insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LevelExpMods entry{}; + + entry.level = atoi(row[0]); + entry.exp_mod = atof(row[1]); + entry.aa_exp_mod = atof(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LEVEL_EXP_MODS_REPOSITORY_H diff --git a/common/repositories/base/base_lfguild_repository.h b/common/repositories/base/base_lfguild_repository.h new file mode 100644 index 000000000..9930dc35c --- /dev/null +++ b/common/repositories/base/base_lfguild_repository.h @@ -0,0 +1,366 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LFGUILD_REPOSITORY_H +#define EQEMU_BASE_LFGUILD_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLfguildRepository { +public: + struct Lfguild { + int8 type; + std::string name; + std::string comment; + int8 fromlevel; + int8 tolevel; + int classes; + int aacount; + int timezone; + int timeposted; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "type", + "name", + "comment", + "fromlevel", + "tolevel", + "classes", + "aacount", + "timezone", + "timeposted", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lfguild"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Lfguild NewEntity() + { + Lfguild entry{}; + + entry.type = 0; + entry.name = ""; + entry.comment = ""; + entry.fromlevel = 0; + entry.tolevel = 0; + entry.classes = 0; + entry.aacount = 0; + entry.timezone = 0; + entry.timeposted = 0; + + return entry; + } + + static Lfguild GetLfguildEntry( + const std::vector &lfguilds, + int lfguild_id + ) + { + for (auto &lfguild : lfguilds) { + if (lfguild.name == lfguild_id) { + return lfguild; + } + } + + return NewEntity(); + } + + static Lfguild FindOne( + int lfguild_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lfguild_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lfguild_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lfguild_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Lfguild lfguild_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(lfguild_entry.comment) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(lfguild_entry.fromlevel)); + update_values.push_back(columns[4] + " = " + std::to_string(lfguild_entry.tolevel)); + update_values.push_back(columns[5] + " = " + std::to_string(lfguild_entry.classes)); + update_values.push_back(columns[6] + " = " + std::to_string(lfguild_entry.aacount)); + update_values.push_back(columns[7] + " = " + std::to_string(lfguild_entry.timezone)); + update_values.push_back(columns[8] + " = " + std::to_string(lfguild_entry.timeposted)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lfguild_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Lfguild InsertOne( + Lfguild lfguild_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); + insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); + insert_values.push_back(std::to_string(lfguild_entry.tolevel)); + insert_values.push_back(std::to_string(lfguild_entry.classes)); + insert_values.push_back(std::to_string(lfguild_entry.aacount)); + insert_values.push_back(std::to_string(lfguild_entry.timezone)); + insert_values.push_back(std::to_string(lfguild_entry.timeposted)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lfguild_entry.id = results.LastInsertedID(); + return lfguild_entry; + } + + lfguild_entry = NewEntity(); + + return lfguild_entry; + } + + static int InsertMany( + std::vector lfguild_entries + ) + { + std::vector insert_chunks; + + for (auto &lfguild_entry: lfguild_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); + insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); + insert_values.push_back(std::to_string(lfguild_entry.tolevel)); + insert_values.push_back(std::to_string(lfguild_entry.classes)); + insert_values.push_back(std::to_string(lfguild_entry.aacount)); + insert_values.push_back(std::to_string(lfguild_entry.timezone)); + insert_values.push_back(std::to_string(lfguild_entry.timeposted)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lfguild entry{}; + + entry.type = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.comment = row[2] ? row[2] : ""; + entry.fromlevel = atoi(row[3]); + entry.tolevel = atoi(row[4]); + entry.classes = atoi(row[5]); + entry.aacount = atoi(row[6]); + entry.timezone = atoi(row[7]); + entry.timeposted = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LFGUILD_REPOSITORY_H diff --git a/common/repositories/base/base_login_accounts_repository.h b/common/repositories/base/base_login_accounts_repository.h new file mode 100644 index 000000000..8ef4d63c1 --- /dev/null +++ b/common/repositories/base/base_login_accounts_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGIN_ACCOUNTS_REPOSITORY_H +#define EQEMU_BASE_LOGIN_ACCOUNTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoginAccountsRepository { +public: + struct LoginAccounts { + int id; + std::string account_name; + std::string account_password; + std::string account_email; + std::string source_loginserver; + std::string last_ip_address; + std::string last_login_date; + std::string created_at; + std::string updated_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_name", + "account_password", + "account_email", + "source_loginserver", + "last_ip_address", + "last_login_date", + "created_at", + "updated_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_accounts"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginAccounts NewEntity() + { + LoginAccounts entry{}; + + entry.id = 0; + entry.account_name = ""; + entry.account_password = ""; + entry.account_email = ""; + entry.source_loginserver = ""; + entry.last_ip_address = ""; + entry.last_login_date = 0; + entry.created_at = 0; + entry.updated_at = current_timestamp(); + + return entry; + } + + static LoginAccounts GetLoginAccountsEntry( + const std::vector &login_accountss, + int login_accounts_id + ) + { + for (auto &login_accounts : login_accountss) { + if (login_accounts.id == login_accounts_id) { + return login_accounts; + } + } + + return NewEntity(); + } + + static LoginAccounts FindOne( + int login_accounts_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_accounts_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_accounts_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_accounts_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginAccounts login_accounts_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_accounts_entry.account_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_accounts_entry.account_password) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_accounts_entry.account_email) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_accounts_entry.last_login_date) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(login_accounts_entry.created_at) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(login_accounts_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_accounts_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginAccounts InsertOne( + LoginAccounts login_accounts_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_accounts_entry.id = results.LastInsertedID(); + return login_accounts_entry; + } + + login_accounts_entry = NewEntity(); + + return login_accounts_entry; + } + + static int InsertMany( + std::vector login_accounts_entries + ) + { + std::vector insert_chunks; + + for (auto &login_accounts_entry: login_accounts_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginAccounts entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.account_email = row[3] ? row[3] : ""; + entry.source_loginserver = row[4] ? row[4] : ""; + entry.last_ip_address = row[5] ? row[5] : ""; + entry.last_login_date = row[6] ? row[6] : ""; + entry.created_at = row[7] ? row[7] : ""; + entry.updated_at = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGIN_ACCOUNTS_REPOSITORY_H diff --git a/common/repositories/base/base_login_api_tokens_repository.h b/common/repositories/base/base_login_api_tokens_repository.h new file mode 100644 index 000000000..94b995aba --- /dev/null +++ b/common/repositories/base/base_login_api_tokens_repository.h @@ -0,0 +1,342 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGIN_API_TOKENS_REPOSITORY_H +#define EQEMU_BASE_LOGIN_API_TOKENS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoginApiTokensRepository { +public: + struct LoginApiTokens { + int id; + std::string token; + int can_write; + int can_read; + std::string created_at; + std::string updated_at; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "token", + "can_write", + "can_read", + "created_at", + "updated_at", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_api_tokens"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginApiTokens NewEntity() + { + LoginApiTokens entry{}; + + entry.id = 0; + entry.token = ""; + entry.can_write = 0; + entry.can_read = 0; + entry.created_at = 0; + entry.updated_at = current_timestamp(); + + return entry; + } + + static LoginApiTokens GetLoginApiTokensEntry( + const std::vector &login_api_tokenss, + int login_api_tokens_id + ) + { + for (auto &login_api_tokens : login_api_tokenss) { + if (login_api_tokens.id == login_api_tokens_id) { + return login_api_tokens; + } + } + + return NewEntity(); + } + + static LoginApiTokens FindOne( + int login_api_tokens_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_api_tokens_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1] ? row[1] : ""; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_api_tokens_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_api_tokens_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginApiTokens login_api_tokens_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_api_tokens_entry.token) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(login_api_tokens_entry.can_write)); + update_values.push_back(columns[3] + " = " + std::to_string(login_api_tokens_entry.can_read)); + update_values.push_back(columns[4] + " = '" + EscapeString(login_api_tokens_entry.created_at) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_api_tokens_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginApiTokens InsertOne( + LoginApiTokens login_api_tokens_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_api_tokens_entry.id = results.LastInsertedID(); + return login_api_tokens_entry; + } + + login_api_tokens_entry = NewEntity(); + + return login_api_tokens_entry; + } + + static int InsertMany( + std::vector login_api_tokens_entries + ) + { + std::vector insert_chunks; + + for (auto &login_api_tokens_entry: login_api_tokens_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); + insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); + insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1] ? row[1] : ""; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginApiTokens entry{}; + + entry.id = atoi(row[0]); + entry.token = row[1] ? row[1] : ""; + entry.can_write = atoi(row[2]); + entry.can_read = atoi(row[3]); + entry.created_at = row[4] ? row[4] : ""; + entry.updated_at = row[5] ? row[5] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGIN_API_TOKENS_REPOSITORY_H diff --git a/common/repositories/base/base_login_server_admins_repository.h b/common/repositories/base/base_login_server_admins_repository.h new file mode 100644 index 000000000..1d637ab00 --- /dev/null +++ b/common/repositories/base/base_login_server_admins_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGIN_SERVER_ADMINS_REPOSITORY_H +#define EQEMU_BASE_LOGIN_SERVER_ADMINS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoginServerAdminsRepository { +public: + struct LoginServerAdmins { + int id; + std::string account_name; + std::string account_password; + std::string first_name; + std::string last_name; + std::string email; + std::string registration_date; + std::string registration_ip_address; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "account_name", + "account_password", + "first_name", + "last_name", + "email", + "registration_date", + "registration_ip_address", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_server_admins"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginServerAdmins NewEntity() + { + LoginServerAdmins entry{}; + + entry.id = 0; + entry.account_name = ""; + entry.account_password = ""; + entry.first_name = ""; + entry.last_name = ""; + entry.email = ""; + entry.registration_date = 0; + entry.registration_ip_address = ""; + + return entry; + } + + static LoginServerAdmins GetLoginServerAdminsEntry( + const std::vector &login_server_adminss, + int login_server_admins_id + ) + { + for (auto &login_server_admins : login_server_adminss) { + if (login_server_admins.id == login_server_admins_id) { + return login_server_admins; + } + } + + return NewEntity(); + } + + static LoginServerAdmins FindOne( + int login_server_admins_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_server_admins_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_server_admins_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_server_admins_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginServerAdmins login_server_admins_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_server_admins_entry.account_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_server_admins_entry.account_password) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_server_admins_entry.first_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(login_server_admins_entry.last_name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(login_server_admins_entry.email) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_server_admins_entry.registration_date) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_server_admins_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginServerAdmins InsertOne( + LoginServerAdmins login_server_admins_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_server_admins_entry.id = results.LastInsertedID(); + return login_server_admins_entry; + } + + login_server_admins_entry = NewEntity(); + + return login_server_admins_entry; + } + + static int InsertMany( + std::vector login_server_admins_entries + ) + { + std::vector insert_chunks; + + for (auto &login_server_admins_entry: login_server_admins_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); + insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerAdmins entry{}; + + entry.id = atoi(row[0]); + entry.account_name = row[1] ? row[1] : ""; + entry.account_password = row[2] ? row[2] : ""; + entry.first_name = row[3] ? row[3] : ""; + entry.last_name = row[4] ? row[4] : ""; + entry.email = row[5] ? row[5] : ""; + entry.registration_date = row[6] ? row[6] : ""; + entry.registration_ip_address = row[7] ? row[7] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGIN_SERVER_ADMINS_REPOSITORY_H diff --git a/common/repositories/base/base_login_server_list_types_repository.h b/common/repositories/base/base_login_server_list_types_repository.h new file mode 100644 index 000000000..5becb3e65 --- /dev/null +++ b/common/repositories/base/base_login_server_list_types_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H +#define EQEMU_BASE_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoginServerListTypesRepository { +public: + struct LoginServerListTypes { + int id; + std::string description; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "description", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_server_list_types"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginServerListTypes NewEntity() + { + LoginServerListTypes entry{}; + + entry.id = 0; + entry.description = ""; + + return entry; + } + + static LoginServerListTypes GetLoginServerListTypesEntry( + const std::vector &login_server_list_typess, + int login_server_list_types_id + ) + { + for (auto &login_server_list_types : login_server_list_typess) { + if (login_server_list_types.id == login_server_list_types_id) { + return login_server_list_types; + } + } + + return NewEntity(); + } + + static LoginServerListTypes FindOne( + int login_server_list_types_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_server_list_types_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_server_list_types_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_server_list_types_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginServerListTypes login_server_list_types_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_server_list_types_entry.description) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_server_list_types_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginServerListTypes InsertOne( + LoginServerListTypes login_server_list_types_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_server_list_types_entry.id = results.LastInsertedID(); + return login_server_list_types_entry; + } + + login_server_list_types_entry = NewEntity(); + + return login_server_list_types_entry; + } + + static int InsertMany( + std::vector login_server_list_types_entries + ) + { + std::vector insert_chunks; + + for (auto &login_server_list_types_entry: login_server_list_types_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginServerListTypes entry{}; + + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H diff --git a/common/repositories/base/base_login_world_servers_repository.h b/common/repositories/base/base_login_world_servers_repository.h new file mode 100644 index 000000000..517db98f3 --- /dev/null +++ b/common/repositories/base/base_login_world_servers_repository.h @@ -0,0 +1,378 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGIN_WORLD_SERVERS_REPOSITORY_H +#define EQEMU_BASE_LOGIN_WORLD_SERVERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoginWorldServersRepository { +public: + struct LoginWorldServers { + int id; + std::string long_name; + std::string short_name; + std::string tag_description; + int login_server_list_type_id; + std::string last_login_date; + std::string last_ip_address; + int login_server_admin_id; + int is_server_trusted; + std::string note; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "long_name", + "short_name", + "tag_description", + "login_server_list_type_id", + "last_login_date", + "last_ip_address", + "login_server_admin_id", + "is_server_trusted", + "note", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("login_world_servers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoginWorldServers NewEntity() + { + LoginWorldServers entry{}; + + entry.id = 0; + entry.long_name = ""; + entry.short_name = ""; + entry.tag_description = ""; + entry.login_server_list_type_id = 0; + entry.last_login_date = 0; + entry.last_ip_address = ""; + entry.login_server_admin_id = 0; + entry.is_server_trusted = 0; + entry.note = ""; + + return entry; + } + + static LoginWorldServers GetLoginWorldServersEntry( + const std::vector &login_world_serverss, + int login_world_servers_id + ) + { + for (auto &login_world_servers : login_world_serverss) { + if (login_world_servers.id == login_world_servers_id) { + return login_world_servers; + } + } + + return NewEntity(); + } + + static LoginWorldServers FindOne( + int login_world_servers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + login_world_servers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9] ? row[9] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int login_world_servers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + login_world_servers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoginWorldServers login_world_servers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(login_world_servers_entry.long_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(login_world_servers_entry.short_name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(login_world_servers_entry.tag_description) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(login_world_servers_entry.login_server_list_type_id)); + update_values.push_back(columns[5] + " = '" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(login_world_servers_entry.login_server_admin_id)); + update_values.push_back(columns[8] + " = " + std::to_string(login_world_servers_entry.is_server_trusted)); + update_values.push_back(columns[9] + " = '" + EscapeString(login_world_servers_entry.note) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + login_world_servers_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoginWorldServers InsertOne( + LoginWorldServers login_world_servers_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); + insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + login_world_servers_entry.id = results.LastInsertedID(); + return login_world_servers_entry; + } + + login_world_servers_entry = NewEntity(); + + return login_world_servers_entry; + } + + static int InsertMany( + std::vector login_world_servers_entries + ) + { + std::vector insert_chunks; + + for (auto &login_world_servers_entry: login_world_servers_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); + insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); + insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); + insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9] ? row[9] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoginWorldServers entry{}; + + entry.id = atoi(row[0]); + entry.long_name = row[1] ? row[1] : ""; + entry.short_name = row[2] ? row[2] : ""; + entry.tag_description = row[3] ? row[3] : ""; + entry.login_server_list_type_id = atoi(row[4]); + entry.last_login_date = row[5] ? row[5] : ""; + entry.last_ip_address = row[6] ? row[6] : ""; + entry.login_server_admin_id = atoi(row[7]); + entry.is_server_trusted = atoi(row[8]); + entry.note = row[9] ? row[9] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGIN_WORLD_SERVERS_REPOSITORY_H diff --git a/common/repositories/base/base_logsys_categories_repository.h b/common/repositories/base/base_logsys_categories_repository.h new file mode 100644 index 000000000..dff017855 --- /dev/null +++ b/common/repositories/base/base_logsys_categories_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOGSYS_CATEGORIES_REPOSITORY_H +#define EQEMU_BASE_LOGSYS_CATEGORIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLogsysCategoriesRepository { +public: + struct LogsysCategories { + int log_category_id; + std::string log_category_description; + int16 log_to_console; + int16 log_to_file; + int16 log_to_gmsay; + }; + + static std::string PrimaryKey() + { + return std::string("log_category_id"); + } + + static std::vector Columns() + { + return { + "log_category_id", + "log_category_description", + "log_to_console", + "log_to_file", + "log_to_gmsay", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("logsys_categories"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LogsysCategories NewEntity() + { + LogsysCategories entry{}; + + entry.log_category_id = 0; + entry.log_category_description = ""; + entry.log_to_console = 0; + entry.log_to_file = 0; + entry.log_to_gmsay = 0; + + return entry; + } + + static LogsysCategories GetLogsysCategoriesEntry( + const std::vector &logsys_categoriess, + int logsys_categories_id + ) + { + for (auto &logsys_categories : logsys_categoriess) { + if (logsys_categories.log_category_id == logsys_categories_id) { + return logsys_categories; + } + } + + return NewEntity(); + } + + static LogsysCategories FindOne( + int logsys_categories_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + logsys_categories_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1] ? row[1] : ""; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int logsys_categories_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + logsys_categories_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LogsysCategories logsys_categories_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(logsys_categories_entry.log_to_console)); + update_values.push_back(columns[3] + " = " + std::to_string(logsys_categories_entry.log_to_file)); + update_values.push_back(columns[4] + " = " + std::to_string(logsys_categories_entry.log_to_gmsay)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + logsys_categories_entry.log_category_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LogsysCategories InsertOne( + LogsysCategories logsys_categories_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + logsys_categories_entry.id = results.LastInsertedID(); + return logsys_categories_entry; + } + + logsys_categories_entry = NewEntity(); + + return logsys_categories_entry; + } + + static int InsertMany( + std::vector logsys_categories_entries + ) + { + std::vector insert_chunks; + + for (auto &logsys_categories_entry: logsys_categories_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); + insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1] ? row[1] : ""; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LogsysCategories entry{}; + + entry.log_category_id = atoi(row[0]); + entry.log_category_description = row[1] ? row[1] : ""; + entry.log_to_console = atoi(row[2]); + entry.log_to_file = atoi(row[3]); + entry.log_to_gmsay = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOGSYS_CATEGORIES_REPOSITORY_H diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h new file mode 100644 index 000000000..67ab318d6 --- /dev/null +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -0,0 +1,366 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOOTDROP_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_LOOTDROP_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLootdropEntriesRepository { +public: + struct LootdropEntries { + int lootdrop_id; + int item_id; + int16 item_charges; + int8 equip_item; + float chance; + float disabled_chance; + int8 minlevel; + int8 maxlevel; + int8 multiplier; + }; + + static std::string PrimaryKey() + { + return std::string("item_id"); + } + + static std::vector Columns() + { + return { + "lootdrop_id", + "item_id", + "item_charges", + "equip_item", + "chance", + "disabled_chance", + "minlevel", + "maxlevel", + "multiplier", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lootdrop_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LootdropEntries NewEntity() + { + LootdropEntries entry{}; + + entry.lootdrop_id = 0; + entry.item_id = 0; + entry.item_charges = 1; + entry.equip_item = 0; + entry.chance = 1; + entry.disabled_chance = 0; + entry.minlevel = 0; + entry.maxlevel = 127; + entry.multiplier = 1; + + return entry; + } + + static LootdropEntries GetLootdropEntriesEntry( + const std::vector &lootdrop_entriess, + int lootdrop_entries_id + ) + { + for (auto &lootdrop_entries : lootdrop_entriess) { + if (lootdrop_entries.item_id == lootdrop_entries_id) { + return lootdrop_entries; + } + } + + return NewEntity(); + } + + static LootdropEntries FindOne( + int lootdrop_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lootdrop_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lootdrop_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lootdrop_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LootdropEntries lootdrop_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entries_entry.item_charges)); + update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); + update_values.push_back(columns[4] + " = " + std::to_string(lootdrop_entries_entry.chance)); + update_values.push_back(columns[5] + " = " + std::to_string(lootdrop_entries_entry.disabled_chance)); + update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.minlevel)); + update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.maxlevel)); + update_values.push_back(columns[8] + " = " + std::to_string(lootdrop_entries_entry.multiplier)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lootdrop_entries_entry.item_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LootdropEntries InsertOne( + LootdropEntries lootdrop_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lootdrop_entries_entry.id = results.LastInsertedID(); + return lootdrop_entries_entry; + } + + lootdrop_entries_entry = NewEntity(); + + return lootdrop_entries_entry; + } + + static int InsertMany( + std::vector lootdrop_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &lootdrop_entries_entry: lootdrop_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LootdropEntries entry{}; + + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = atof(row[4]); + entry.disabled_chance = atof(row[5]); + entry.minlevel = atoi(row[6]); + entry.maxlevel = atoi(row[7]); + entry.multiplier = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOOTDROP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_lootdrop_repository.h b/common/repositories/base/base_lootdrop_repository.h new file mode 100644 index 000000000..3ee90b6da --- /dev/null +++ b/common/repositories/base/base_lootdrop_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOOTDROP_REPOSITORY_H +#define EQEMU_BASE_LOOTDROP_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLootdropRepository { +public: + struct Lootdrop { + int id; + std::string name; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("lootdrop"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Lootdrop NewEntity() + { + Lootdrop entry{}; + + entry.id = 0; + entry.name = ""; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Lootdrop GetLootdropEntry( + const std::vector &lootdrops, + int lootdrop_id + ) + { + for (auto &lootdrop : lootdrops) { + if (lootdrop.id == lootdrop_id) { + return lootdrop; + } + } + + return NewEntity(); + } + + static Lootdrop FindOne( + int lootdrop_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + lootdrop_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int lootdrop_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + lootdrop_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Lootdrop lootdrop_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(lootdrop_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entry.min_expansion)); + update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entry.max_expansion)); + update_values.push_back(columns[4] + " = '" + EscapeString(lootdrop_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + lootdrop_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Lootdrop InsertOne( + Lootdrop lootdrop_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); + insert_values.push_back(std::to_string(lootdrop_entry.min_expansion)); + insert_values.push_back(std::to_string(lootdrop_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + lootdrop_entry.id = results.LastInsertedID(); + return lootdrop_entry; + } + + lootdrop_entry = NewEntity(); + + return lootdrop_entry; + } + + static int InsertMany( + std::vector lootdrop_entries + ) + { + std::vector insert_chunks; + + for (auto &lootdrop_entry: lootdrop_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); + insert_values.push_back(std::to_string(lootdrop_entry.min_expansion)); + insert_values.push_back(std::to_string(lootdrop_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Lootdrop entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOOTDROP_REPOSITORY_H diff --git a/common/repositories/base/base_loottable_entries_repository.h b/common/repositories/base/base_loottable_entries_repository.h new file mode 100644 index 000000000..fc4542934 --- /dev/null +++ b/common/repositories/base/base_loottable_entries_repository.h @@ -0,0 +1,339 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOOTTABLE_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_LOOTTABLE_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoottableEntriesRepository { +public: + struct LoottableEntries { + int loottable_id; + int lootdrop_id; + int8 multiplier; + int8 droplimit; + int8 mindrop; + float probability; + }; + + static std::string PrimaryKey() + { + return std::string("lootdrop_id"); + } + + static std::vector Columns() + { + return { + "loottable_id", + "lootdrop_id", + "multiplier", + "droplimit", + "mindrop", + "probability", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("loottable_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static LoottableEntries NewEntity() + { + LoottableEntries entry{}; + + entry.loottable_id = 0; + entry.lootdrop_id = 0; + entry.multiplier = 1; + entry.droplimit = 0; + entry.mindrop = 0; + entry.probability = 100; + + return entry; + } + + static LoottableEntries GetLoottableEntriesEntry( + const std::vector &loottable_entriess, + int loottable_entries_id + ) + { + for (auto &loottable_entries : loottable_entriess) { + if (loottable_entries.lootdrop_id == loottable_entries_id) { + return loottable_entries; + } + } + + return NewEntity(); + } + + static LoottableEntries FindOne( + int loottable_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + loottable_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int loottable_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + loottable_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + LoottableEntries loottable_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(loottable_entries_entry.multiplier)); + update_values.push_back(columns[3] + " = " + std::to_string(loottable_entries_entry.droplimit)); + update_values.push_back(columns[4] + " = " + std::to_string(loottable_entries_entry.mindrop)); + update_values.push_back(columns[5] + " = " + std::to_string(loottable_entries_entry.probability)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + loottable_entries_entry.lootdrop_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static LoottableEntries InsertOne( + LoottableEntries loottable_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); + insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); + insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); + insert_values.push_back(std::to_string(loottable_entries_entry.probability)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + loottable_entries_entry.id = results.LastInsertedID(); + return loottable_entries_entry; + } + + loottable_entries_entry = NewEntity(); + + return loottable_entries_entry; + } + + static int InsertMany( + std::vector loottable_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &loottable_entries_entry: loottable_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); + insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); + insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); + insert_values.push_back(std::to_string(loottable_entries_entry.probability)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + LoottableEntries entry{}; + + entry.loottable_id = atoi(row[0]); + entry.lootdrop_id = atoi(row[1]); + entry.multiplier = atoi(row[2]); + entry.droplimit = atoi(row[3]); + entry.mindrop = atoi(row[4]); + entry.probability = atof(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOOTTABLE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_loottable_repository.h b/common/repositories/base/base_loottable_repository.h new file mode 100644 index 000000000..f04f18f69 --- /dev/null +++ b/common/repositories/base/base_loottable_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_LOOTTABLE_REPOSITORY_H +#define EQEMU_BASE_LOOTTABLE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseLoottableRepository { +public: + struct Loottable { + int id; + std::string name; + int mincash; + int maxcash; + int avgcoin; + int8 done; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "mincash", + "maxcash", + "avgcoin", + "done", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("loottable"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Loottable NewEntity() + { + Loottable entry{}; + + entry.id = 0; + entry.name = ""; + entry.mincash = 0; + entry.maxcash = 0; + entry.avgcoin = 0; + entry.done = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Loottable GetLoottableEntry( + const std::vector &loottables, + int loottable_id + ) + { + for (auto &loottable : loottables) { + if (loottable.id == loottable_id) { + return loottable; + } + } + + return NewEntity(); + } + + static Loottable FindOne( + int loottable_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + loottable_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int loottable_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + loottable_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Loottable loottable_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(loottable_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(loottable_entry.mincash)); + update_values.push_back(columns[3] + " = " + std::to_string(loottable_entry.maxcash)); + update_values.push_back(columns[4] + " = " + std::to_string(loottable_entry.avgcoin)); + update_values.push_back(columns[5] + " = " + std::to_string(loottable_entry.done)); + update_values.push_back(columns[6] + " = " + std::to_string(loottable_entry.min_expansion)); + update_values.push_back(columns[7] + " = " + std::to_string(loottable_entry.max_expansion)); + update_values.push_back(columns[8] + " = '" + EscapeString(loottable_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + loottable_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Loottable InsertOne( + Loottable loottable_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); + insert_values.push_back(std::to_string(loottable_entry.mincash)); + insert_values.push_back(std::to_string(loottable_entry.maxcash)); + insert_values.push_back(std::to_string(loottable_entry.avgcoin)); + insert_values.push_back(std::to_string(loottable_entry.done)); + insert_values.push_back(std::to_string(loottable_entry.min_expansion)); + insert_values.push_back(std::to_string(loottable_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(loottable_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + loottable_entry.id = results.LastInsertedID(); + return loottable_entry; + } + + loottable_entry = NewEntity(); + + return loottable_entry; + } + + static int InsertMany( + std::vector loottable_entries + ) + { + std::vector insert_chunks; + + for (auto &loottable_entry: loottable_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); + insert_values.push_back(std::to_string(loottable_entry.mincash)); + insert_values.push_back(std::to_string(loottable_entry.maxcash)); + insert_values.push_back(std::to_string(loottable_entry.avgcoin)); + insert_values.push_back(std::to_string(loottable_entry.done)); + insert_values.push_back(std::to_string(loottable_entry.min_expansion)); + insert_values.push_back(std::to_string(loottable_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(loottable_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Loottable entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_LOOTTABLE_REPOSITORY_H diff --git a/common/repositories/base/base_mail_repository.h b/common/repositories/base/base_mail_repository.h new file mode 100644 index 000000000..e8f362c34 --- /dev/null +++ b/common/repositories/base/base_mail_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_MAIL_REPOSITORY_H +#define EQEMU_BASE_MAIL_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseMailRepository { +public: + struct Mail { + int msgid; + int charid; + int timestamp; + std::string from; + std::string subject; + std::string body; + std::string to; + int8 status; + }; + + static std::string PrimaryKey() + { + return std::string("msgid"); + } + + static std::vector Columns() + { + return { + "msgid", + "charid", + "timestamp", + "from", + "subject", + "body", + "to", + "status", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("mail"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Mail NewEntity() + { + Mail entry{}; + + entry.msgid = 0; + entry.charid = 0; + entry.timestamp = 0; + entry.from = ""; + entry.subject = ""; + entry.body = ""; + entry.to = ""; + entry.status = 0; + + return entry; + } + + static Mail GetMailEntry( + const std::vector &mails, + int mail_id + ) + { + for (auto &mail : mails) { + if (mail.msgid == mail_id) { + return mail; + } + } + + return NewEntity(); + } + + static Mail FindOne( + int mail_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + mail_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; + entry.status = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int mail_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + mail_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Mail mail_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(mail_entry.charid)); + update_values.push_back(columns[2] + " = " + std::to_string(mail_entry.timestamp)); + update_values.push_back(columns[3] + " = '" + EscapeString(mail_entry.from) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(mail_entry.subject) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(mail_entry.body) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(mail_entry.to) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(mail_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + mail_entry.msgid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Mail InsertOne( + Mail mail_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(mail_entry.charid)); + insert_values.push_back(std::to_string(mail_entry.timestamp)); + insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); + insert_values.push_back(std::to_string(mail_entry.status)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + mail_entry.id = results.LastInsertedID(); + return mail_entry; + } + + mail_entry = NewEntity(); + + return mail_entry; + } + + static int InsertMany( + std::vector mail_entries + ) + { + std::vector insert_chunks; + + for (auto &mail_entry: mail_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(mail_entry.charid)); + insert_values.push_back(std::to_string(mail_entry.timestamp)); + insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); + insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); + insert_values.push_back(std::to_string(mail_entry.status)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; + entry.status = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Mail entry{}; + + entry.msgid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.timestamp = atoi(row[2]); + entry.from = row[3] ? row[3] : ""; + entry.subject = row[4] ? row[4] : ""; + entry.body = row[5] ? row[5] : ""; + entry.to = row[6] ? row[6] : ""; + entry.status = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_MAIL_REPOSITORY_H diff --git a/common/repositories/base/base_merchantlist_repository.h b/common/repositories/base/base_merchantlist_repository.h new file mode 100644 index 000000000..d4dd17828 --- /dev/null +++ b/common/repositories/base/base_merchantlist_repository.h @@ -0,0 +1,384 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_MERCHANTLIST_REPOSITORY_H +#define EQEMU_BASE_MERCHANTLIST_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseMerchantlistRepository { +public: + struct Merchantlist { + int merchantid; + int slot; + int item; + int16 faction_required; + int8 level_required; + int16 alt_currency_cost; + int classes_required; + int probability; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "merchantid", + "slot", + "item", + "faction_required", + "level_required", + "alt_currency_cost", + "classes_required", + "probability", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("merchantlist"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Merchantlist NewEntity() + { + Merchantlist entry{}; + + entry.merchantid = 0; + entry.slot = 0; + entry.item = 0; + entry.faction_required = -100; + entry.level_required = 0; + entry.alt_currency_cost = 0; + entry.classes_required = 65535; + entry.probability = 100; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Merchantlist GetMerchantlistEntry( + const std::vector &merchantlists, + int merchantlist_id + ) + { + for (auto &merchantlist : merchantlists) { + if (merchantlist.slot == merchantlist_id) { + return merchantlist; + } + } + + return NewEntity(); + } + + static Merchantlist FindOne( + int merchantlist_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + merchantlist_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int merchantlist_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + merchantlist_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Merchantlist merchantlist_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_entry.item)); + update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_entry.faction_required)); + update_values.push_back(columns[4] + " = " + std::to_string(merchantlist_entry.level_required)); + update_values.push_back(columns[5] + " = " + std::to_string(merchantlist_entry.alt_currency_cost)); + update_values.push_back(columns[6] + " = " + std::to_string(merchantlist_entry.classes_required)); + update_values.push_back(columns[7] + " = " + std::to_string(merchantlist_entry.probability)); + update_values.push_back(columns[8] + " = " + std::to_string(merchantlist_entry.min_expansion)); + update_values.push_back(columns[9] + " = " + std::to_string(merchantlist_entry.max_expansion)); + update_values.push_back(columns[10] + " = '" + EscapeString(merchantlist_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + merchantlist_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Merchantlist InsertOne( + Merchantlist merchantlist_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_entry.item)); + insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); + insert_values.push_back(std::to_string(merchantlist_entry.level_required)); + insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); + insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); + insert_values.push_back(std::to_string(merchantlist_entry.probability)); + insert_values.push_back(std::to_string(merchantlist_entry.min_expansion)); + insert_values.push_back(std::to_string(merchantlist_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + merchantlist_entry.id = results.LastInsertedID(); + return merchantlist_entry; + } + + merchantlist_entry = NewEntity(); + + return merchantlist_entry; + } + + static int InsertMany( + std::vector merchantlist_entries + ) + { + std::vector insert_chunks; + + for (auto &merchantlist_entry: merchantlist_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_entry.item)); + insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); + insert_values.push_back(std::to_string(merchantlist_entry.level_required)); + insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); + insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); + insert_values.push_back(std::to_string(merchantlist_entry.probability)); + insert_values.push_back(std::to_string(merchantlist_entry.min_expansion)); + insert_values.push_back(std::to_string(merchantlist_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Merchantlist entry{}; + + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_MERCHANTLIST_REPOSITORY_H diff --git a/common/repositories/base/base_merchantlist_temp_repository.h b/common/repositories/base/base_merchantlist_temp_repository.h new file mode 100644 index 000000000..0c5d06010 --- /dev/null +++ b/common/repositories/base/base_merchantlist_temp_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_MERCHANTLIST_TEMP_REPOSITORY_H +#define EQEMU_BASE_MERCHANTLIST_TEMP_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseMerchantlistTempRepository { +public: + struct MerchantlistTemp { + int npcid; + int8 slot; + int itemid; + int charges; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "npcid", + "slot", + "itemid", + "charges", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("merchantlist_temp"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static MerchantlistTemp NewEntity() + { + MerchantlistTemp entry{}; + + entry.npcid = 0; + entry.slot = 0; + entry.itemid = 0; + entry.charges = 1; + + return entry; + } + + static MerchantlistTemp GetMerchantlistTempEntry( + const std::vector &merchantlist_temps, + int merchantlist_temp_id + ) + { + for (auto &merchantlist_temp : merchantlist_temps) { + if (merchantlist_temp.slot == merchantlist_temp_id) { + return merchantlist_temp; + } + } + + return NewEntity(); + } + + static MerchantlistTemp FindOne( + int merchantlist_temp_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + merchantlist_temp_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int merchantlist_temp_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + merchantlist_temp_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + MerchantlistTemp merchantlist_temp_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_temp_entry.itemid)); + update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_temp_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + merchantlist_temp_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static MerchantlistTemp InsertOne( + MerchantlistTemp merchantlist_temp_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + merchantlist_temp_entry.id = results.LastInsertedID(); + return merchantlist_temp_entry; + } + + merchantlist_temp_entry = NewEntity(); + + return merchantlist_temp_entry; + } + + static int InsertMany( + std::vector merchantlist_temp_entries + ) + { + std::vector insert_chunks; + + for (auto &merchantlist_temp_entry: merchantlist_temp_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + MerchantlistTemp entry{}; + + entry.npcid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.itemid = atoi(row[2]); + entry.charges = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_MERCHANTLIST_TEMP_REPOSITORY_H diff --git a/common/repositories/base/base_name_filter_repository.h b/common/repositories/base/base_name_filter_repository.h new file mode 100644 index 000000000..a79fc338c --- /dev/null +++ b/common/repositories/base/base_name_filter_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NAME_FILTER_REPOSITORY_H +#define EQEMU_BASE_NAME_FILTER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNameFilterRepository { +public: + struct NameFilter { + int id; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("name_filter"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NameFilter NewEntity() + { + NameFilter entry{}; + + entry.id = 0; + entry.name = ""; + + return entry; + } + + static NameFilter GetNameFilterEntry( + const std::vector &name_filters, + int name_filter_id + ) + { + for (auto &name_filter : name_filters) { + if (name_filter.id == name_filter_id) { + return name_filter; + } + } + + return NewEntity(); + } + + static NameFilter FindOne( + int name_filter_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + name_filter_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int name_filter_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + name_filter_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NameFilter name_filter_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(name_filter_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + name_filter_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NameFilter InsertOne( + NameFilter name_filter_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + name_filter_entry.id = results.LastInsertedID(); + return name_filter_entry; + } + + name_filter_entry = NewEntity(); + + return name_filter_entry; + } + + static int InsertMany( + std::vector name_filter_entries + ) + { + std::vector insert_chunks; + + for (auto &name_filter_entry: name_filter_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NameFilter entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NAME_FILTER_REPOSITORY_H diff --git a/common/repositories/base/base_npc_emotes_repository.h b/common/repositories/base/base_npc_emotes_repository.h new file mode 100644 index 000000000..bb6567e8c --- /dev/null +++ b/common/repositories/base/base_npc_emotes_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_EMOTES_REPOSITORY_H +#define EQEMU_BASE_NPC_EMOTES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcEmotesRepository { +public: + struct NpcEmotes { + int id; + int emoteid; + int8 event_; + int8 type; + std::string text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "emoteid", + "event_", + "type", + "text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_emotes"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcEmotes NewEntity() + { + NpcEmotes entry{}; + + entry.id = 0; + entry.emoteid = 0; + entry.event_ = 0; + entry.type = 0; + entry.text = ""; + + return entry; + } + + static NpcEmotes GetNpcEmotesEntry( + const std::vector &npc_emotess, + int npc_emotes_id + ) + { + for (auto &npc_emotes : npc_emotess) { + if (npc_emotes.id == npc_emotes_id) { + return npc_emotes; + } + } + + return NewEntity(); + } + + static NpcEmotes FindOne( + int npc_emotes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_emotes_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4] ? row[4] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_emotes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_emotes_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcEmotes npc_emotes_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_emotes_entry.emoteid)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_emotes_entry.event_)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_emotes_entry.type)); + update_values.push_back(columns[4] + " = '" + EscapeString(npc_emotes_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_emotes_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcEmotes InsertOne( + NpcEmotes npc_emotes_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); + insert_values.push_back(std::to_string(npc_emotes_entry.event_)); + insert_values.push_back(std::to_string(npc_emotes_entry.type)); + insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_emotes_entry.id = results.LastInsertedID(); + return npc_emotes_entry; + } + + npc_emotes_entry = NewEntity(); + + return npc_emotes_entry; + } + + static int InsertMany( + std::vector npc_emotes_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_emotes_entry: npc_emotes_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); + insert_values.push_back(std::to_string(npc_emotes_entry.event_)); + insert_values.push_back(std::to_string(npc_emotes_entry.type)); + insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcEmotes entry{}; + + entry.id = atoi(row[0]); + entry.emoteid = atoi(row[1]); + entry.event_ = atoi(row[2]); + entry.type = atoi(row[3]); + entry.text = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_EMOTES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_faction_entries_repository.h b/common/repositories/base/base_npc_faction_entries_repository.h new file mode 100644 index 000000000..64d07c6a9 --- /dev/null +++ b/common/repositories/base/base_npc_faction_entries_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_FACTION_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_NPC_FACTION_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcFactionEntriesRepository { +public: + struct NpcFactionEntries { + int npc_faction_id; + int faction_id; + int value; + int8 npc_value; + int8 temp; + }; + + static std::string PrimaryKey() + { + return std::string("faction_id"); + } + + static std::vector Columns() + { + return { + "npc_faction_id", + "faction_id", + "value", + "npc_value", + "temp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_faction_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcFactionEntries NewEntity() + { + NpcFactionEntries entry{}; + + entry.npc_faction_id = 0; + entry.faction_id = 0; + entry.value = 0; + entry.npc_value = 0; + entry.temp = 0; + + return entry; + } + + static NpcFactionEntries GetNpcFactionEntriesEntry( + const std::vector &npc_faction_entriess, + int npc_faction_entries_id + ) + { + for (auto &npc_faction_entries : npc_faction_entriess) { + if (npc_faction_entries.faction_id == npc_faction_entries_id) { + return npc_faction_entries; + } + } + + return NewEntity(); + } + + static NpcFactionEntries FindOne( + int npc_faction_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_faction_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_faction_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_faction_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcFactionEntries npc_faction_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entries_entry.value)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entries_entry.npc_value)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_faction_entries_entry.temp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_faction_entries_entry.faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcFactionEntries InsertOne( + NpcFactionEntries npc_faction_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_faction_entries_entry.id = results.LastInsertedID(); + return npc_faction_entries_entry; + } + + npc_faction_entries_entry = NewEntity(); + + return npc_faction_entries_entry; + } + + static int InsertMany( + std::vector npc_faction_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_faction_entries_entry: npc_faction_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFactionEntries entry{}; + + entry.npc_faction_id = atoi(row[0]); + entry.faction_id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.npc_value = atoi(row[3]); + entry.temp = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_FACTION_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_faction_repository.h b/common/repositories/base/base_npc_faction_repository.h new file mode 100644 index 000000000..dc5f89300 --- /dev/null +++ b/common/repositories/base/base_npc_faction_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_FACTION_REPOSITORY_H +#define EQEMU_BASE_NPC_FACTION_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcFactionRepository { +public: + struct NpcFaction { + int id; + std::string name; + int primaryfaction; + int8 ignore_primary_assist; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "primaryfaction", + "ignore_primary_assist", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_faction"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcFaction NewEntity() + { + NpcFaction entry{}; + + entry.id = 0; + entry.name = ""; + entry.primaryfaction = 0; + entry.ignore_primary_assist = 0; + + return entry; + } + + static NpcFaction GetNpcFactionEntry( + const std::vector &npc_factions, + int npc_faction_id + ) + { + for (auto &npc_faction : npc_factions) { + if (npc_faction.id == npc_faction_id) { + return npc_faction; + } + } + + return NewEntity(); + } + + static NpcFaction FindOne( + int npc_faction_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_faction_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_faction_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_faction_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcFaction npc_faction_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_faction_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entry.primaryfaction)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entry.ignore_primary_assist)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_faction_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcFaction InsertOne( + NpcFaction npc_faction_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); + insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_faction_entry.id = results.LastInsertedID(); + return npc_faction_entry; + } + + npc_faction_entry = NewEntity(); + + return npc_faction_entry; + } + + static int InsertMany( + std::vector npc_faction_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_faction_entry: npc_faction_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); + insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcFaction entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.primaryfaction = atoi(row[2]); + entry.ignore_primary_assist = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_FACTION_REPOSITORY_H diff --git a/common/repositories/base/base_npc_scale_global_base_repository.h b/common/repositories/base/base_npc_scale_global_base_repository.h new file mode 100644 index 000000000..543fa6261 --- /dev/null +++ b/common/repositories/base/base_npc_scale_global_base_repository.h @@ -0,0 +1,537 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H +#define EQEMU_BASE_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcScaleGlobalBaseRepository { +public: + struct NpcScaleGlobalBase { + int type; + int level; + int ac; + int hp; + int accuracy; + int slow_mitigation; + int attack; + int strength; + int stamina; + int dexterity; + int agility; + int intelligence; + int wisdom; + int charisma; + int magic_resist; + int cold_resist; + int fire_resist; + int poison_resist; + int disease_resist; + int corruption_resist; + int physical_resist; + int min_dmg; + int max_dmg; + int hp_regen_rate; + int attack_delay; + int spell_scale; + int heal_scale; + std::string special_abilities; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "type", + "level", + "ac", + "hp", + "accuracy", + "slow_mitigation", + "attack", + "strength", + "stamina", + "dexterity", + "agility", + "intelligence", + "wisdom", + "charisma", + "magic_resist", + "cold_resist", + "fire_resist", + "poison_resist", + "disease_resist", + "corruption_resist", + "physical_resist", + "min_dmg", + "max_dmg", + "hp_regen_rate", + "attack_delay", + "spell_scale", + "heal_scale", + "special_abilities", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_scale_global_base"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcScaleGlobalBase NewEntity() + { + NpcScaleGlobalBase entry{}; + + entry.type = 0; + entry.level = 0; + entry.ac = 0; + entry.hp = 0; + entry.accuracy = 0; + entry.slow_mitigation = 0; + entry.attack = 0; + entry.strength = 0; + entry.stamina = 0; + entry.dexterity = 0; + entry.agility = 0; + entry.intelligence = 0; + entry.wisdom = 0; + entry.charisma = 0; + entry.magic_resist = 0; + entry.cold_resist = 0; + entry.fire_resist = 0; + entry.poison_resist = 0; + entry.disease_resist = 0; + entry.corruption_resist = 0; + entry.physical_resist = 0; + entry.min_dmg = 0; + entry.max_dmg = 0; + entry.hp_regen_rate = 0; + entry.attack_delay = 0; + entry.spell_scale = 100; + entry.heal_scale = 100; + entry.special_abilities = ""; + + return entry; + } + + static NpcScaleGlobalBase GetNpcScaleGlobalBaseEntry( + const std::vector &npc_scale_global_bases, + int npc_scale_global_base_id + ) + { + for (auto &npc_scale_global_base : npc_scale_global_bases) { + if (npc_scale_global_base.level == npc_scale_global_base_id) { + return npc_scale_global_base; + } + } + + return NewEntity(); + } + + static NpcScaleGlobalBase FindOne( + int npc_scale_global_base_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_scale_global_base_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27] ? row[27] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_scale_global_base_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_scale_global_base_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcScaleGlobalBase npc_scale_global_base_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(npc_scale_global_base_entry.ac)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_scale_global_base_entry.hp)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_scale_global_base_entry.accuracy)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_scale_global_base_entry.slow_mitigation)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_scale_global_base_entry.attack)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_scale_global_base_entry.strength)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_scale_global_base_entry.stamina)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_scale_global_base_entry.dexterity)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_scale_global_base_entry.agility)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_scale_global_base_entry.intelligence)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_scale_global_base_entry.wisdom)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_scale_global_base_entry.charisma)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_scale_global_base_entry.magic_resist)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_scale_global_base_entry.cold_resist)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_scale_global_base_entry.fire_resist)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_scale_global_base_entry.poison_resist)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_scale_global_base_entry.disease_resist)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_scale_global_base_entry.corruption_resist)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_scale_global_base_entry.physical_resist)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_scale_global_base_entry.min_dmg)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_scale_global_base_entry.max_dmg)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_scale_global_base_entry.attack_delay)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_scale_global_base_entry.spell_scale)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_scale_global_base_entry.heal_scale)); + update_values.push_back(columns[27] + " = '" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_scale_global_base_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcScaleGlobalBase InsertOne( + NpcScaleGlobalBase npc_scale_global_base_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); + insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_scale_global_base_entry.id = results.LastInsertedID(); + return npc_scale_global_base_entry; + } + + npc_scale_global_base_entry = NewEntity(); + + return npc_scale_global_base_entry; + } + + static int InsertMany( + std::vector npc_scale_global_base_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_scale_global_base_entry: npc_scale_global_base_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); + insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27] ? row[27] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcScaleGlobalBase entry{}; + + entry.type = atoi(row[0]); + entry.level = atoi(row[1]); + entry.ac = atoi(row[2]); + entry.hp = atoi(row[3]); + entry.accuracy = atoi(row[4]); + entry.slow_mitigation = atoi(row[5]); + entry.attack = atoi(row[6]); + entry.strength = atoi(row[7]); + entry.stamina = atoi(row[8]); + entry.dexterity = atoi(row[9]); + entry.agility = atoi(row[10]); + entry.intelligence = atoi(row[11]); + entry.wisdom = atoi(row[12]); + entry.charisma = atoi(row[13]); + entry.magic_resist = atoi(row[14]); + entry.cold_resist = atoi(row[15]); + entry.fire_resist = atoi(row[16]); + entry.poison_resist = atoi(row[17]); + entry.disease_resist = atoi(row[18]); + entry.corruption_resist = atoi(row[19]); + entry.physical_resist = atoi(row[20]); + entry.min_dmg = atoi(row[21]); + entry.max_dmg = atoi(row[22]); + entry.hp_regen_rate = atoi(row[23]); + entry.attack_delay = atoi(row[24]); + entry.spell_scale = atoi(row[25]); + entry.heal_scale = atoi(row[26]); + entry.special_abilities = row[27] ? row[27] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_effects_entries_repository.h b/common/repositories/base/base_npc_spells_effects_entries_repository.h new file mode 100644 index 000000000..e4631037c --- /dev/null +++ b/common/repositories/base/base_npc_spells_effects_entries_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcSpellsEffectsEntriesRepository { +public: + struct NpcSpellsEffectsEntries { + int id; + int npc_spells_effects_id; + int16 spell_effect_id; + int8 minlevel; + int8 maxlevel; + int se_base; + int se_limit; + int se_max; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "npc_spells_effects_id", + "spell_effect_id", + "minlevel", + "maxlevel", + "se_base", + "se_limit", + "se_max", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_effects_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEffectsEntries NewEntity() + { + NpcSpellsEffectsEntries entry{}; + + entry.id = 0; + entry.npc_spells_effects_id = 0; + entry.spell_effect_id = 0; + entry.minlevel = 0; + entry.maxlevel = 255; + entry.se_base = 0; + entry.se_limit = 0; + entry.se_max = 0; + + return entry; + } + + static NpcSpellsEffectsEntries GetNpcSpellsEffectsEntriesEntry( + const std::vector &npc_spells_effects_entriess, + int npc_spells_effects_entries_id + ) + { + for (auto &npc_spells_effects_entries : npc_spells_effects_entriess) { + if (npc_spells_effects_entries.id == npc_spells_effects_entries_id) { + return npc_spells_effects_entries; + } + } + + return NewEntity(); + } + + static NpcSpellsEffectsEntries FindOne( + int npc_spells_effects_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_effects_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_effects_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_effects_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEffectsEntries npc_spells_effects_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_effects_entries_entry.minlevel)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_effects_entries_entry.maxlevel)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_effects_entries_entry.se_base)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_effects_entries_entry.se_limit)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_effects_entries_entry.se_max)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_effects_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEffectsEntries InsertOne( + NpcSpellsEffectsEntries npc_spells_effects_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_effects_entries_entry.id = results.LastInsertedID(); + return npc_spells_effects_entries_entry; + } + + npc_spells_effects_entries_entry = NewEntity(); + + return npc_spells_effects_entries_entry; + } + + static int InsertMany( + std::vector npc_spells_effects_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_effects_entries_entry: npc_spells_effects_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); + insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffectsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_effects_id = atoi(row[1]); + entry.spell_effect_id = atoi(row[2]); + entry.minlevel = atoi(row[3]); + entry.maxlevel = atoi(row[4]); + entry.se_base = atoi(row[5]); + entry.se_limit = atoi(row[6]); + entry.se_max = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_effects_repository.h b/common/repositories/base/base_npc_spells_effects_repository.h new file mode 100644 index 000000000..831d5b6c9 --- /dev/null +++ b/common/repositories/base/base_npc_spells_effects_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_SPELLS_EFFECTS_REPOSITORY_H +#define EQEMU_BASE_NPC_SPELLS_EFFECTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcSpellsEffectsRepository { +public: + struct NpcSpellsEffects { + int id; + std::string name; + int parent_list; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "parent_list", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_effects"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEffects NewEntity() + { + NpcSpellsEffects entry{}; + + entry.id = 0; + entry.name = ""; + entry.parent_list = 0; + + return entry; + } + + static NpcSpellsEffects GetNpcSpellsEffectsEntry( + const std::vector &npc_spells_effectss, + int npc_spells_effects_id + ) + { + for (auto &npc_spells_effects : npc_spells_effectss) { + if (npc_spells_effects.id == npc_spells_effects_id) { + return npc_spells_effects; + } + } + + return NewEntity(); + } + + static NpcSpellsEffects FindOne( + int npc_spells_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_effects_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_effects_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_effects_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEffects npc_spells_effects_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_effects_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entry.parent_list)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_effects_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEffects InsertOne( + NpcSpellsEffects npc_spells_effects_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_effects_entry.id = results.LastInsertedID(); + return npc_spells_effects_entry; + } + + npc_spells_effects_entry = NewEntity(); + + return npc_spells_effects_entry; + } + + static int InsertMany( + std::vector npc_spells_effects_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_effects_entry: npc_spells_effects_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEffects entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_SPELLS_EFFECTS_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_entries_repository.h b/common/repositories/base/base_npc_spells_entries_repository.h new file mode 100644 index 000000000..85bdbc383 --- /dev/null +++ b/common/repositories/base/base_npc_spells_entries_repository.h @@ -0,0 +1,396 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_SPELLS_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_NPC_SPELLS_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcSpellsEntriesRepository { +public: + struct NpcSpellsEntries { + int id; + int npc_spells_id; + int16 spellid; + int type; + int8 minlevel; + int8 maxlevel; + int16 manacost; + int recast_delay; + int16 priority; + int resist_adjust; + int16 min_hp; + int16 max_hp; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "npc_spells_id", + "spellid", + "type", + "minlevel", + "maxlevel", + "manacost", + "recast_delay", + "priority", + "resist_adjust", + "min_hp", + "max_hp", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpellsEntries NewEntity() + { + NpcSpellsEntries entry{}; + + entry.id = 0; + entry.npc_spells_id = 0; + entry.spellid = 0; + entry.type = 0; + entry.minlevel = 0; + entry.maxlevel = 255; + entry.manacost = -1; + entry.recast_delay = -1; + entry.priority = 0; + entry.resist_adjust = 0; + entry.min_hp = 0; + entry.max_hp = 0; + + return entry; + } + + static NpcSpellsEntries GetNpcSpellsEntriesEntry( + const std::vector &npc_spells_entriess, + int npc_spells_entries_id + ) + { + for (auto &npc_spells_entries : npc_spells_entriess) { + if (npc_spells_entries.id == npc_spells_entries_id) { + return npc_spells_entries; + } + } + + return NewEntity(); + } + + static NpcSpellsEntries FindOne( + int npc_spells_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpellsEntries npc_spells_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_entries_entry.npc_spells_id)); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entries_entry.spellid)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entries_entry.type)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entries_entry.minlevel)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entries_entry.maxlevel)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entries_entry.manacost)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entries_entry.recast_delay)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entries_entry.priority)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entries_entry.resist_adjust)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entries_entry.min_hp)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entries_entry.max_hp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpellsEntries InsertOne( + NpcSpellsEntries npc_spells_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_entries_entry.id = results.LastInsertedID(); + return npc_spells_entries_entry; + } + + npc_spells_entries_entry = NewEntity(); + + return npc_spells_entries_entry; + } + + static int InsertMany( + std::vector npc_spells_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_entries_entry: npc_spells_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); + insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpellsEntries entry{}; + + entry.id = atoi(row[0]); + entry.npc_spells_id = atoi(row[1]); + entry.spellid = atoi(row[2]); + entry.type = atoi(row[3]); + entry.minlevel = atoi(row[4]); + entry.maxlevel = atoi(row[5]); + entry.manacost = atoi(row[6]); + entry.recast_delay = atoi(row[7]); + entry.priority = atoi(row[8]); + entry.resist_adjust = atoi(row[9]); + entry.min_hp = atoi(row[10]); + entry.max_hp = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_SPELLS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_repository.h b/common/repositories/base/base_npc_spells_repository.h new file mode 100644 index 000000000..10bf88898 --- /dev/null +++ b/common/repositories/base/base_npc_spells_repository.h @@ -0,0 +1,477 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_SPELLS_REPOSITORY_H +#define EQEMU_BASE_NPC_SPELLS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcSpellsRepository { +public: + struct NpcSpells { + int id; + std::string name; + int parent_list; + int16 attack_proc; + int8 proc_chance; + int16 range_proc; + int16 rproc_chance; + int16 defensive_proc; + int16 dproc_chance; + int fail_recast; + int engaged_no_sp_recast_min; + int engaged_no_sp_recast_max; + int8 engaged_b_self_chance; + int8 engaged_b_other_chance; + int8 engaged_d_chance; + int pursue_no_sp_recast_min; + int pursue_no_sp_recast_max; + int8 pursue_d_chance; + int idle_no_sp_recast_min; + int idle_no_sp_recast_max; + int8 idle_b_chance; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "parent_list", + "attack_proc", + "proc_chance", + "range_proc", + "rproc_chance", + "defensive_proc", + "dproc_chance", + "fail_recast", + "engaged_no_sp_recast_min", + "engaged_no_sp_recast_max", + "engaged_b_self_chance", + "engaged_b_other_chance", + "engaged_d_chance", + "pursue_no_sp_recast_min", + "pursue_no_sp_recast_max", + "pursue_d_chance", + "idle_no_sp_recast_min", + "idle_no_sp_recast_max", + "idle_b_chance", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_spells"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcSpells NewEntity() + { + NpcSpells entry{}; + + entry.id = 0; + entry.name = ""; + entry.parent_list = 0; + entry.attack_proc = -1; + entry.proc_chance = 3; + entry.range_proc = -1; + entry.rproc_chance = 0; + entry.defensive_proc = -1; + entry.dproc_chance = 0; + entry.fail_recast = 0; + entry.engaged_no_sp_recast_min = 0; + entry.engaged_no_sp_recast_max = 0; + entry.engaged_b_self_chance = 0; + entry.engaged_b_other_chance = 0; + entry.engaged_d_chance = 0; + entry.pursue_no_sp_recast_min = 0; + entry.pursue_no_sp_recast_max = 0; + entry.pursue_d_chance = 0; + entry.idle_no_sp_recast_min = 0; + entry.idle_no_sp_recast_max = 0; + entry.idle_b_chance = 0; + + return entry; + } + + static NpcSpells GetNpcSpellsEntry( + const std::vector &npc_spellss, + int npc_spells_id + ) + { + for (auto &npc_spells : npc_spellss) { + if (npc_spells.id == npc_spells_id) { + return npc_spells; + } + } + + return NewEntity(); + } + + static NpcSpells FindOne( + int npc_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_spells_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_spells_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_spells_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcSpells npc_spells_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entry.parent_list)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entry.attack_proc)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entry.proc_chance)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entry.range_proc)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entry.rproc_chance)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entry.defensive_proc)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entry.dproc_chance)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entry.fail_recast)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_spells_entry.engaged_b_self_chance)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_spells_entry.engaged_b_other_chance)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_spells_entry.engaged_d_chance)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_spells_entry.pursue_d_chance)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_spells_entry.idle_b_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_spells_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcSpells InsertOne( + NpcSpells npc_spells_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); + insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_spells_entry.id = results.LastInsertedID(); + return npc_spells_entry; + } + + npc_spells_entry = NewEntity(); + + return npc_spells_entry; + } + + static int InsertMany( + std::vector npc_spells_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_spells_entry: npc_spells_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); + insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); + insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); + insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); + insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcSpells entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.parent_list = atoi(row[2]); + entry.attack_proc = atoi(row[3]); + entry.proc_chance = atoi(row[4]); + entry.range_proc = atoi(row[5]); + entry.rproc_chance = atoi(row[6]); + entry.defensive_proc = atoi(row[7]); + entry.dproc_chance = atoi(row[8]); + entry.fail_recast = atoi(row[9]); + entry.engaged_no_sp_recast_min = atoi(row[10]); + entry.engaged_no_sp_recast_max = atoi(row[11]); + entry.engaged_b_self_chance = atoi(row[12]); + entry.engaged_b_other_chance = atoi(row[13]); + entry.engaged_d_chance = atoi(row[14]); + entry.pursue_no_sp_recast_min = atoi(row[15]); + entry.pursue_no_sp_recast_max = atoi(row[16]); + entry.pursue_d_chance = atoi(row[17]); + entry.idle_no_sp_recast_min = atoi(row[18]); + entry.idle_no_sp_recast_max = atoi(row[19]); + entry.idle_b_chance = atoi(row[20]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_npc_types_repository.h b/common/repositories/base/base_npc_types_repository.h new file mode 100644 index 000000000..62a75c88f --- /dev/null +++ b/common/repositories/base/base_npc_types_repository.h @@ -0,0 +1,1386 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_TYPES_REPOSITORY_H +#define EQEMU_BASE_NPC_TYPES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcTypesRepository { +public: + struct NpcTypes { + int id; + std::string name; + std::string lastname; + int8 level; + int16 race; + int8 class; + int bodytype; + int hp; + int mana; + int8 gender; + int8 texture; + int8 helmtexture; + int herosforgemodel; + float size; + int hp_regen_rate; + int mana_regen_rate; + int loottable_id; + int merchant_id; + int alt_currency_id; + int npc_spells_id; + int npc_spells_effects_id; + int npc_faction_id; + int adventure_template_id; + int trap_template; + int mindmg; + int maxdmg; + int16 attack_count; + std::string npcspecialattks; + std::string special_abilities; + int aggroradius; + int assistradius; + int face; + int luclin_hairstyle; + int luclin_haircolor; + int luclin_eyecolor; + int luclin_eyecolor2; + int luclin_beardcolor; + int luclin_beard; + int drakkin_heritage; + int drakkin_tattoo; + int drakkin_details; + int armortint_id; + int8 armortint_red; + int8 armortint_green; + int8 armortint_blue; + int d_melee_texture1; + int d_melee_texture2; + std::string ammo_idfile; + int8 prim_melee_type; + int8 sec_melee_type; + int8 ranged_type; + float runspeed; + int16 MR; + int16 CR; + int16 DR; + int16 FR; + int16 PR; + int16 Corrup; + int16 PhR; + int16 see_invis; + int16 see_invis_undead; + int qglobal; + int16 AC; + int8 npc_aggro; + int8 spawn_limit; + float attack_speed; + int8 attack_delay; + int8 findable; + int STR; + int STA; + int DEX; + int AGI; + int _INT; + int WIS; + int CHA; + int8 see_hide; + int8 see_improved_hide; + int8 trackable; + int8 isbot; + int8 exclude; + int ATK; + int Accuracy; + int Avoidance; + int16 slow_mitigation; + int16 version; + int8 maxlevel; + int scalerate; + int8 private_corpse; + int8 unique_spawn_by_name; + int8 underwater; + int8 isquest; + int emoteid; + float spellscale; + float healscale; + int8 no_target_hotkey; + int8 raid_target; + int8 armtexture; + int8 bracertexture; + int8 handtexture; + int8 legtexture; + int8 feettexture; + int8 light; + int8 walkspeed; + int peqid; + int8 unique_; + int8 fixed; + int8 ignore_despawn; + int8 show_name; + int8 untargetable; + int16 charm_ac; + int charm_min_dmg; + int charm_max_dmg; + int8 charm_attack_delay; + int charm_accuracy_rating; + int charm_avoidance_rating; + int charm_atk; + int8 skip_global_loot; + int8 rare_spawn; + int8 stuck_behavior; + int16 model; + int8 flymode; + int8 always_aggro; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "lastname", + "level", + "race", + "class", + "bodytype", + "hp", + "mana", + "gender", + "texture", + "helmtexture", + "herosforgemodel", + "size", + "hp_regen_rate", + "mana_regen_rate", + "loottable_id", + "merchant_id", + "alt_currency_id", + "npc_spells_id", + "npc_spells_effects_id", + "npc_faction_id", + "adventure_template_id", + "trap_template", + "mindmg", + "maxdmg", + "attack_count", + "npcspecialattks", + "special_abilities", + "aggroradius", + "assistradius", + "face", + "luclin_hairstyle", + "luclin_haircolor", + "luclin_eyecolor", + "luclin_eyecolor2", + "luclin_beardcolor", + "luclin_beard", + "drakkin_heritage", + "drakkin_tattoo", + "drakkin_details", + "armortint_id", + "armortint_red", + "armortint_green", + "armortint_blue", + "d_melee_texture1", + "d_melee_texture2", + "ammo_idfile", + "prim_melee_type", + "sec_melee_type", + "ranged_type", + "runspeed", + "MR", + "CR", + "DR", + "FR", + "PR", + "Corrup", + "PhR", + "see_invis", + "see_invis_undead", + "qglobal", + "AC", + "npc_aggro", + "spawn_limit", + "attack_speed", + "attack_delay", + "findable", + "STR", + "STA", + "DEX", + "AGI", + "_INT", + "WIS", + "CHA", + "see_hide", + "see_improved_hide", + "trackable", + "isbot", + "exclude", + "ATK", + "Accuracy", + "Avoidance", + "slow_mitigation", + "version", + "maxlevel", + "scalerate", + "private_corpse", + "unique_spawn_by_name", + "underwater", + "isquest", + "emoteid", + "spellscale", + "healscale", + "no_target_hotkey", + "raid_target", + "armtexture", + "bracertexture", + "handtexture", + "legtexture", + "feettexture", + "light", + "walkspeed", + "peqid", + "unique_", + "fixed", + "ignore_despawn", + "show_name", + "untargetable", + "charm_ac", + "charm_min_dmg", + "charm_max_dmg", + "charm_attack_delay", + "charm_accuracy_rating", + "charm_avoidance_rating", + "charm_atk", + "skip_global_loot", + "rare_spawn", + "stuck_behavior", + "model", + "flymode", + "always_aggro", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_types"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcTypes NewEntity() + { + NpcTypes entry{}; + + entry.id = 0; + entry.name = ""; + entry.lastname = ""; + entry.level = 0; + entry.race = 0; + entry.class = 0; + entry.bodytype = 1; + entry.hp = 0; + entry.mana = 0; + entry.gender = 0; + entry.texture = 0; + entry.helmtexture = 0; + entry.herosforgemodel = 0; + entry.size = 0; + entry.hp_regen_rate = 0; + entry.mana_regen_rate = 0; + entry.loottable_id = 0; + entry.merchant_id = 0; + entry.alt_currency_id = 0; + entry.npc_spells_id = 0; + entry.npc_spells_effects_id = 0; + entry.npc_faction_id = 0; + entry.adventure_template_id = 0; + entry.trap_template = 0; + entry.mindmg = 0; + entry.maxdmg = 0; + entry.attack_count = -1; + entry.npcspecialattks = ""; + entry.special_abilities = ""; + entry.aggroradius = 0; + entry.assistradius = 0; + entry.face = 1; + entry.luclin_hairstyle = 1; + entry.luclin_haircolor = 1; + entry.luclin_eyecolor = 1; + entry.luclin_eyecolor2 = 1; + entry.luclin_beardcolor = 1; + entry.luclin_beard = 0; + entry.drakkin_heritage = 0; + entry.drakkin_tattoo = 0; + entry.drakkin_details = 0; + entry.armortint_id = 0; + entry.armortint_red = 0; + entry.armortint_green = 0; + entry.armortint_blue = 0; + entry.d_melee_texture1 = 0; + entry.d_melee_texture2 = 0; + entry.ammo_idfile = "IT10"; + entry.prim_melee_type = 28; + entry.sec_melee_type = 28; + entry.ranged_type = 7; + entry.runspeed = 0; + entry.MR = 0; + entry.CR = 0; + entry.DR = 0; + entry.FR = 0; + entry.PR = 0; + entry.Corrup = 0; + entry.PhR = 0; + entry.see_invis = 0; + entry.see_invis_undead = 0; + entry.qglobal = 0; + entry.AC = 0; + entry.npc_aggro = 0; + entry.spawn_limit = 0; + entry.attack_speed = 0; + entry.attack_delay = 30; + entry.findable = 0; + entry.STR = 75; + entry.STA = 75; + entry.DEX = 75; + entry.AGI = 75; + entry._INT = 80; + entry.WIS = 75; + entry.CHA = 75; + entry.see_hide = 0; + entry.see_improved_hide = 0; + entry.trackable = 1; + entry.isbot = 0; + entry.exclude = 1; + entry.ATK = 0; + entry.Accuracy = 0; + entry.Avoidance = 0; + entry.slow_mitigation = 0; + entry.version = 0; + entry.maxlevel = 0; + entry.scalerate = 100; + entry.private_corpse = 0; + entry.unique_spawn_by_name = 0; + entry.underwater = 0; + entry.isquest = 0; + entry.emoteid = 0; + entry.spellscale = 100; + entry.healscale = 100; + entry.no_target_hotkey = 0; + entry.raid_target = 0; + entry.armtexture = 0; + entry.bracertexture = 0; + entry.handtexture = 0; + entry.legtexture = 0; + entry.feettexture = 0; + entry.light = 0; + entry.walkspeed = 0; + entry.peqid = 0; + entry.unique_ = 0; + entry.fixed = 0; + entry.ignore_despawn = 0; + entry.show_name = 1; + entry.untargetable = 0; + entry.charm_ac = 0; + entry.charm_min_dmg = 0; + entry.charm_max_dmg = 0; + entry.charm_attack_delay = 0; + entry.charm_accuracy_rating = 0; + entry.charm_avoidance_rating = 0; + entry.charm_atk = 0; + entry.skip_global_loot = 0; + entry.rare_spawn = 0; + entry.stuck_behavior = 0; + entry.model = 0; + entry.flymode = -1; + entry.always_aggro = 0; + + return entry; + } + + static NpcTypes GetNpcTypesEntry( + const std::vector &npc_typess, + int npc_types_id + ) + { + for (auto &npc_types : npc_typess) { + if (npc_types.id == npc_types_id) { + return npc_types; + } + } + + return NewEntity(); + } + + static NpcTypes FindOne( + int npc_types_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_types_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47] ? row[47] : ""; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_types_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_types_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcTypes npc_types_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(npc_types_entry.lastname) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(npc_types_entry.level)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_types_entry.race)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_types_entry.class)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_types_entry.bodytype)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_types_entry.hp)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_types_entry.mana)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_types_entry.gender)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_types_entry.texture)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_types_entry.helmtexture)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_types_entry.herosforgemodel)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_types_entry.size)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_types_entry.hp_regen_rate)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_types_entry.mana_regen_rate)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_types_entry.loottable_id)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_types_entry.merchant_id)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_types_entry.alt_currency_id)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_types_entry.npc_spells_id)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_types_entry.npc_spells_effects_id)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_types_entry.npc_faction_id)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_types_entry.adventure_template_id)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_types_entry.trap_template)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_types_entry.mindmg)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_types_entry.maxdmg)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_types_entry.attack_count)); + update_values.push_back(columns[27] + " = '" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + update_values.push_back(columns[28] + " = '" + EscapeString(npc_types_entry.special_abilities) + "'"); + update_values.push_back(columns[29] + " = " + std::to_string(npc_types_entry.aggroradius)); + update_values.push_back(columns[30] + " = " + std::to_string(npc_types_entry.assistradius)); + update_values.push_back(columns[31] + " = " + std::to_string(npc_types_entry.face)); + update_values.push_back(columns[32] + " = " + std::to_string(npc_types_entry.luclin_hairstyle)); + update_values.push_back(columns[33] + " = " + std::to_string(npc_types_entry.luclin_haircolor)); + update_values.push_back(columns[34] + " = " + std::to_string(npc_types_entry.luclin_eyecolor)); + update_values.push_back(columns[35] + " = " + std::to_string(npc_types_entry.luclin_eyecolor2)); + update_values.push_back(columns[36] + " = " + std::to_string(npc_types_entry.luclin_beardcolor)); + update_values.push_back(columns[37] + " = " + std::to_string(npc_types_entry.luclin_beard)); + update_values.push_back(columns[38] + " = " + std::to_string(npc_types_entry.drakkin_heritage)); + update_values.push_back(columns[39] + " = " + std::to_string(npc_types_entry.drakkin_tattoo)); + update_values.push_back(columns[40] + " = " + std::to_string(npc_types_entry.drakkin_details)); + update_values.push_back(columns[41] + " = " + std::to_string(npc_types_entry.armortint_id)); + update_values.push_back(columns[42] + " = " + std::to_string(npc_types_entry.armortint_red)); + update_values.push_back(columns[43] + " = " + std::to_string(npc_types_entry.armortint_green)); + update_values.push_back(columns[44] + " = " + std::to_string(npc_types_entry.armortint_blue)); + update_values.push_back(columns[45] + " = " + std::to_string(npc_types_entry.d_melee_texture1)); + update_values.push_back(columns[46] + " = " + std::to_string(npc_types_entry.d_melee_texture2)); + update_values.push_back(columns[47] + " = '" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + update_values.push_back(columns[48] + " = " + std::to_string(npc_types_entry.prim_melee_type)); + update_values.push_back(columns[49] + " = " + std::to_string(npc_types_entry.sec_melee_type)); + update_values.push_back(columns[50] + " = " + std::to_string(npc_types_entry.ranged_type)); + update_values.push_back(columns[51] + " = " + std::to_string(npc_types_entry.runspeed)); + update_values.push_back(columns[52] + " = " + std::to_string(npc_types_entry.MR)); + update_values.push_back(columns[53] + " = " + std::to_string(npc_types_entry.CR)); + update_values.push_back(columns[54] + " = " + std::to_string(npc_types_entry.DR)); + update_values.push_back(columns[55] + " = " + std::to_string(npc_types_entry.FR)); + update_values.push_back(columns[56] + " = " + std::to_string(npc_types_entry.PR)); + update_values.push_back(columns[57] + " = " + std::to_string(npc_types_entry.Corrup)); + update_values.push_back(columns[58] + " = " + std::to_string(npc_types_entry.PhR)); + update_values.push_back(columns[59] + " = " + std::to_string(npc_types_entry.see_invis)); + update_values.push_back(columns[60] + " = " + std::to_string(npc_types_entry.see_invis_undead)); + update_values.push_back(columns[61] + " = " + std::to_string(npc_types_entry.qglobal)); + update_values.push_back(columns[62] + " = " + std::to_string(npc_types_entry.AC)); + update_values.push_back(columns[63] + " = " + std::to_string(npc_types_entry.npc_aggro)); + update_values.push_back(columns[64] + " = " + std::to_string(npc_types_entry.spawn_limit)); + update_values.push_back(columns[65] + " = " + std::to_string(npc_types_entry.attack_speed)); + update_values.push_back(columns[66] + " = " + std::to_string(npc_types_entry.attack_delay)); + update_values.push_back(columns[67] + " = " + std::to_string(npc_types_entry.findable)); + update_values.push_back(columns[68] + " = " + std::to_string(npc_types_entry.STR)); + update_values.push_back(columns[69] + " = " + std::to_string(npc_types_entry.STA)); + update_values.push_back(columns[70] + " = " + std::to_string(npc_types_entry.DEX)); + update_values.push_back(columns[71] + " = " + std::to_string(npc_types_entry.AGI)); + update_values.push_back(columns[72] + " = " + std::to_string(npc_types_entry._INT)); + update_values.push_back(columns[73] + " = " + std::to_string(npc_types_entry.WIS)); + update_values.push_back(columns[74] + " = " + std::to_string(npc_types_entry.CHA)); + update_values.push_back(columns[75] + " = " + std::to_string(npc_types_entry.see_hide)); + update_values.push_back(columns[76] + " = " + std::to_string(npc_types_entry.see_improved_hide)); + update_values.push_back(columns[77] + " = " + std::to_string(npc_types_entry.trackable)); + update_values.push_back(columns[78] + " = " + std::to_string(npc_types_entry.isbot)); + update_values.push_back(columns[79] + " = " + std::to_string(npc_types_entry.exclude)); + update_values.push_back(columns[80] + " = " + std::to_string(npc_types_entry.ATK)); + update_values.push_back(columns[81] + " = " + std::to_string(npc_types_entry.Accuracy)); + update_values.push_back(columns[82] + " = " + std::to_string(npc_types_entry.Avoidance)); + update_values.push_back(columns[83] + " = " + std::to_string(npc_types_entry.slow_mitigation)); + update_values.push_back(columns[84] + " = " + std::to_string(npc_types_entry.version)); + update_values.push_back(columns[85] + " = " + std::to_string(npc_types_entry.maxlevel)); + update_values.push_back(columns[86] + " = " + std::to_string(npc_types_entry.scalerate)); + update_values.push_back(columns[87] + " = " + std::to_string(npc_types_entry.private_corpse)); + update_values.push_back(columns[88] + " = " + std::to_string(npc_types_entry.unique_spawn_by_name)); + update_values.push_back(columns[89] + " = " + std::to_string(npc_types_entry.underwater)); + update_values.push_back(columns[90] + " = " + std::to_string(npc_types_entry.isquest)); + update_values.push_back(columns[91] + " = " + std::to_string(npc_types_entry.emoteid)); + update_values.push_back(columns[92] + " = " + std::to_string(npc_types_entry.spellscale)); + update_values.push_back(columns[93] + " = " + std::to_string(npc_types_entry.healscale)); + update_values.push_back(columns[94] + " = " + std::to_string(npc_types_entry.no_target_hotkey)); + update_values.push_back(columns[95] + " = " + std::to_string(npc_types_entry.raid_target)); + update_values.push_back(columns[96] + " = " + std::to_string(npc_types_entry.armtexture)); + update_values.push_back(columns[97] + " = " + std::to_string(npc_types_entry.bracertexture)); + update_values.push_back(columns[98] + " = " + std::to_string(npc_types_entry.handtexture)); + update_values.push_back(columns[99] + " = " + std::to_string(npc_types_entry.legtexture)); + update_values.push_back(columns[100] + " = " + std::to_string(npc_types_entry.feettexture)); + update_values.push_back(columns[101] + " = " + std::to_string(npc_types_entry.light)); + update_values.push_back(columns[102] + " = " + std::to_string(npc_types_entry.walkspeed)); + update_values.push_back(columns[103] + " = " + std::to_string(npc_types_entry.peqid)); + update_values.push_back(columns[104] + " = " + std::to_string(npc_types_entry.unique_)); + update_values.push_back(columns[105] + " = " + std::to_string(npc_types_entry.fixed)); + update_values.push_back(columns[106] + " = " + std::to_string(npc_types_entry.ignore_despawn)); + update_values.push_back(columns[107] + " = " + std::to_string(npc_types_entry.show_name)); + update_values.push_back(columns[108] + " = " + std::to_string(npc_types_entry.untargetable)); + update_values.push_back(columns[109] + " = " + std::to_string(npc_types_entry.charm_ac)); + update_values.push_back(columns[110] + " = " + std::to_string(npc_types_entry.charm_min_dmg)); + update_values.push_back(columns[111] + " = " + std::to_string(npc_types_entry.charm_max_dmg)); + update_values.push_back(columns[112] + " = " + std::to_string(npc_types_entry.charm_attack_delay)); + update_values.push_back(columns[113] + " = " + std::to_string(npc_types_entry.charm_accuracy_rating)); + update_values.push_back(columns[114] + " = " + std::to_string(npc_types_entry.charm_avoidance_rating)); + update_values.push_back(columns[115] + " = " + std::to_string(npc_types_entry.charm_atk)); + update_values.push_back(columns[116] + " = " + std::to_string(npc_types_entry.skip_global_loot)); + update_values.push_back(columns[117] + " = " + std::to_string(npc_types_entry.rare_spawn)); + update_values.push_back(columns[118] + " = " + std::to_string(npc_types_entry.stuck_behavior)); + update_values.push_back(columns[119] + " = " + std::to_string(npc_types_entry.model)); + update_values.push_back(columns[120] + " = " + std::to_string(npc_types_entry.flymode)); + update_values.push_back(columns[121] + " = " + std::to_string(npc_types_entry.always_aggro)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_types_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcTypes InsertOne( + NpcTypes npc_types_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.level)); + insert_values.push_back(std::to_string(npc_types_entry.race)); + insert_values.push_back(std::to_string(npc_types_entry.class)); + insert_values.push_back(std::to_string(npc_types_entry.bodytype)); + insert_values.push_back(std::to_string(npc_types_entry.hp)); + insert_values.push_back(std::to_string(npc_types_entry.mana)); + insert_values.push_back(std::to_string(npc_types_entry.gender)); + insert_values.push_back(std::to_string(npc_types_entry.texture)); + insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); + insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); + insert_values.push_back(std::to_string(npc_types_entry.size)); + insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); + insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); + insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); + insert_values.push_back(std::to_string(npc_types_entry.trap_template)); + insert_values.push_back(std::to_string(npc_types_entry.mindmg)); + insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); + insert_values.push_back(std::to_string(npc_types_entry.attack_count)); + insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); + insert_values.push_back(std::to_string(npc_types_entry.assistradius)); + insert_values.push_back(std::to_string(npc_types_entry.face)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); + insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); + insert_values.push_back(std::to_string(npc_types_entry.runspeed)); + insert_values.push_back(std::to_string(npc_types_entry.MR)); + insert_values.push_back(std::to_string(npc_types_entry.CR)); + insert_values.push_back(std::to_string(npc_types_entry.DR)); + insert_values.push_back(std::to_string(npc_types_entry.FR)); + insert_values.push_back(std::to_string(npc_types_entry.PR)); + insert_values.push_back(std::to_string(npc_types_entry.Corrup)); + insert_values.push_back(std::to_string(npc_types_entry.PhR)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); + insert_values.push_back(std::to_string(npc_types_entry.qglobal)); + insert_values.push_back(std::to_string(npc_types_entry.AC)); + insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); + insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); + insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); + insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.findable)); + insert_values.push_back(std::to_string(npc_types_entry.STR)); + insert_values.push_back(std::to_string(npc_types_entry.STA)); + insert_values.push_back(std::to_string(npc_types_entry.DEX)); + insert_values.push_back(std::to_string(npc_types_entry.AGI)); + insert_values.push_back(std::to_string(npc_types_entry._INT)); + insert_values.push_back(std::to_string(npc_types_entry.WIS)); + insert_values.push_back(std::to_string(npc_types_entry.CHA)); + insert_values.push_back(std::to_string(npc_types_entry.see_hide)); + insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); + insert_values.push_back(std::to_string(npc_types_entry.trackable)); + insert_values.push_back(std::to_string(npc_types_entry.isbot)); + insert_values.push_back(std::to_string(npc_types_entry.exclude)); + insert_values.push_back(std::to_string(npc_types_entry.ATK)); + insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); + insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); + insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_types_entry.version)); + insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_types_entry.scalerate)); + insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); + insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); + insert_values.push_back(std::to_string(npc_types_entry.underwater)); + insert_values.push_back(std::to_string(npc_types_entry.isquest)); + insert_values.push_back(std::to_string(npc_types_entry.emoteid)); + insert_values.push_back(std::to_string(npc_types_entry.spellscale)); + insert_values.push_back(std::to_string(npc_types_entry.healscale)); + insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); + insert_values.push_back(std::to_string(npc_types_entry.raid_target)); + insert_values.push_back(std::to_string(npc_types_entry.armtexture)); + insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); + insert_values.push_back(std::to_string(npc_types_entry.handtexture)); + insert_values.push_back(std::to_string(npc_types_entry.legtexture)); + insert_values.push_back(std::to_string(npc_types_entry.feettexture)); + insert_values.push_back(std::to_string(npc_types_entry.light)); + insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); + insert_values.push_back(std::to_string(npc_types_entry.peqid)); + insert_values.push_back(std::to_string(npc_types_entry.unique_)); + insert_values.push_back(std::to_string(npc_types_entry.fixed)); + insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); + insert_values.push_back(std::to_string(npc_types_entry.show_name)); + insert_values.push_back(std::to_string(npc_types_entry.untargetable)); + insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); + insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); + insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); + insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); + insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); + insert_values.push_back(std::to_string(npc_types_entry.model)); + insert_values.push_back(std::to_string(npc_types_entry.flymode)); + insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_types_entry.id = results.LastInsertedID(); + return npc_types_entry; + } + + npc_types_entry = NewEntity(); + + return npc_types_entry; + } + + static int InsertMany( + std::vector npc_types_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_types_entry: npc_types_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.level)); + insert_values.push_back(std::to_string(npc_types_entry.race)); + insert_values.push_back(std::to_string(npc_types_entry.class)); + insert_values.push_back(std::to_string(npc_types_entry.bodytype)); + insert_values.push_back(std::to_string(npc_types_entry.hp)); + insert_values.push_back(std::to_string(npc_types_entry.mana)); + insert_values.push_back(std::to_string(npc_types_entry.gender)); + insert_values.push_back(std::to_string(npc_types_entry.texture)); + insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); + insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); + insert_values.push_back(std::to_string(npc_types_entry.size)); + insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); + insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); + insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); + insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); + insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); + insert_values.push_back(std::to_string(npc_types_entry.trap_template)); + insert_values.push_back(std::to_string(npc_types_entry.mindmg)); + insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); + insert_values.push_back(std::to_string(npc_types_entry.attack_count)); + insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); + insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); + insert_values.push_back(std::to_string(npc_types_entry.assistradius)); + insert_values.push_back(std::to_string(npc_types_entry.face)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); + insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); + insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); + insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); + insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); + insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); + insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); + insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); + insert_values.push_back(std::to_string(npc_types_entry.runspeed)); + insert_values.push_back(std::to_string(npc_types_entry.MR)); + insert_values.push_back(std::to_string(npc_types_entry.CR)); + insert_values.push_back(std::to_string(npc_types_entry.DR)); + insert_values.push_back(std::to_string(npc_types_entry.FR)); + insert_values.push_back(std::to_string(npc_types_entry.PR)); + insert_values.push_back(std::to_string(npc_types_entry.Corrup)); + insert_values.push_back(std::to_string(npc_types_entry.PhR)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis)); + insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); + insert_values.push_back(std::to_string(npc_types_entry.qglobal)); + insert_values.push_back(std::to_string(npc_types_entry.AC)); + insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); + insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); + insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); + insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.findable)); + insert_values.push_back(std::to_string(npc_types_entry.STR)); + insert_values.push_back(std::to_string(npc_types_entry.STA)); + insert_values.push_back(std::to_string(npc_types_entry.DEX)); + insert_values.push_back(std::to_string(npc_types_entry.AGI)); + insert_values.push_back(std::to_string(npc_types_entry._INT)); + insert_values.push_back(std::to_string(npc_types_entry.WIS)); + insert_values.push_back(std::to_string(npc_types_entry.CHA)); + insert_values.push_back(std::to_string(npc_types_entry.see_hide)); + insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); + insert_values.push_back(std::to_string(npc_types_entry.trackable)); + insert_values.push_back(std::to_string(npc_types_entry.isbot)); + insert_values.push_back(std::to_string(npc_types_entry.exclude)); + insert_values.push_back(std::to_string(npc_types_entry.ATK)); + insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); + insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); + insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); + insert_values.push_back(std::to_string(npc_types_entry.version)); + insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); + insert_values.push_back(std::to_string(npc_types_entry.scalerate)); + insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); + insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); + insert_values.push_back(std::to_string(npc_types_entry.underwater)); + insert_values.push_back(std::to_string(npc_types_entry.isquest)); + insert_values.push_back(std::to_string(npc_types_entry.emoteid)); + insert_values.push_back(std::to_string(npc_types_entry.spellscale)); + insert_values.push_back(std::to_string(npc_types_entry.healscale)); + insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); + insert_values.push_back(std::to_string(npc_types_entry.raid_target)); + insert_values.push_back(std::to_string(npc_types_entry.armtexture)); + insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); + insert_values.push_back(std::to_string(npc_types_entry.handtexture)); + insert_values.push_back(std::to_string(npc_types_entry.legtexture)); + insert_values.push_back(std::to_string(npc_types_entry.feettexture)); + insert_values.push_back(std::to_string(npc_types_entry.light)); + insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); + insert_values.push_back(std::to_string(npc_types_entry.peqid)); + insert_values.push_back(std::to_string(npc_types_entry.unique_)); + insert_values.push_back(std::to_string(npc_types_entry.fixed)); + insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); + insert_values.push_back(std::to_string(npc_types_entry.show_name)); + insert_values.push_back(std::to_string(npc_types_entry.untargetable)); + insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); + insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); + insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); + insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); + insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); + insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); + insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); + insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); + insert_values.push_back(std::to_string(npc_types_entry.model)); + insert_values.push_back(std::to_string(npc_types_entry.flymode)); + insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47] ? row[47] : ""; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypes entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.lastname = row[2] ? row[2] : ""; + entry.level = atoi(row[3]); + entry.race = atoi(row[4]); + entry.class = atoi(row[5]); + entry.bodytype = atoi(row[6]); + entry.hp = atoi(row[7]); + entry.mana = atoi(row[8]); + entry.gender = atoi(row[9]); + entry.texture = atoi(row[10]); + entry.helmtexture = atoi(row[11]); + entry.herosforgemodel = atoi(row[12]); + entry.size = atof(row[13]); + entry.hp_regen_rate = atoi(row[14]); + entry.mana_regen_rate = atoi(row[15]); + entry.loottable_id = atoi(row[16]); + entry.merchant_id = atoi(row[17]); + entry.alt_currency_id = atoi(row[18]); + entry.npc_spells_id = atoi(row[19]); + entry.npc_spells_effects_id = atoi(row[20]); + entry.npc_faction_id = atoi(row[21]); + entry.adventure_template_id = atoi(row[22]); + entry.trap_template = atoi(row[23]); + entry.mindmg = atoi(row[24]); + entry.maxdmg = atoi(row[25]); + entry.attack_count = atoi(row[26]); + entry.npcspecialattks = row[27] ? row[27] : ""; + entry.special_abilities = row[28] ? row[28] : ""; + entry.aggroradius = atoi(row[29]); + entry.assistradius = atoi(row[30]); + entry.face = atoi(row[31]); + entry.luclin_hairstyle = atoi(row[32]); + entry.luclin_haircolor = atoi(row[33]); + entry.luclin_eyecolor = atoi(row[34]); + entry.luclin_eyecolor2 = atoi(row[35]); + entry.luclin_beardcolor = atoi(row[36]); + entry.luclin_beard = atoi(row[37]); + entry.drakkin_heritage = atoi(row[38]); + entry.drakkin_tattoo = atoi(row[39]); + entry.drakkin_details = atoi(row[40]); + entry.armortint_id = atoi(row[41]); + entry.armortint_red = atoi(row[42]); + entry.armortint_green = atoi(row[43]); + entry.armortint_blue = atoi(row[44]); + entry.d_melee_texture1 = atoi(row[45]); + entry.d_melee_texture2 = atoi(row[46]); + entry.ammo_idfile = row[47] ? row[47] : ""; + entry.prim_melee_type = atoi(row[48]); + entry.sec_melee_type = atoi(row[49]); + entry.ranged_type = atoi(row[50]); + entry.runspeed = atof(row[51]); + entry.MR = atoi(row[52]); + entry.CR = atoi(row[53]); + entry.DR = atoi(row[54]); + entry.FR = atoi(row[55]); + entry.PR = atoi(row[56]); + entry.Corrup = atoi(row[57]); + entry.PhR = atoi(row[58]); + entry.see_invis = atoi(row[59]); + entry.see_invis_undead = atoi(row[60]); + entry.qglobal = atoi(row[61]); + entry.AC = atoi(row[62]); + entry.npc_aggro = atoi(row[63]); + entry.spawn_limit = atoi(row[64]); + entry.attack_speed = atof(row[65]); + entry.attack_delay = atoi(row[66]); + entry.findable = atoi(row[67]); + entry.STR = atoi(row[68]); + entry.STA = atoi(row[69]); + entry.DEX = atoi(row[70]); + entry.AGI = atoi(row[71]); + entry._INT = atoi(row[72]); + entry.WIS = atoi(row[73]); + entry.CHA = atoi(row[74]); + entry.see_hide = atoi(row[75]); + entry.see_improved_hide = atoi(row[76]); + entry.trackable = atoi(row[77]); + entry.isbot = atoi(row[78]); + entry.exclude = atoi(row[79]); + entry.ATK = atoi(row[80]); + entry.Accuracy = atoi(row[81]); + entry.Avoidance = atoi(row[82]); + entry.slow_mitigation = atoi(row[83]); + entry.version = atoi(row[84]); + entry.maxlevel = atoi(row[85]); + entry.scalerate = atoi(row[86]); + entry.private_corpse = atoi(row[87]); + entry.unique_spawn_by_name = atoi(row[88]); + entry.underwater = atoi(row[89]); + entry.isquest = atoi(row[90]); + entry.emoteid = atoi(row[91]); + entry.spellscale = atof(row[92]); + entry.healscale = atof(row[93]); + entry.no_target_hotkey = atoi(row[94]); + entry.raid_target = atoi(row[95]); + entry.armtexture = atoi(row[96]); + entry.bracertexture = atoi(row[97]); + entry.handtexture = atoi(row[98]); + entry.legtexture = atoi(row[99]); + entry.feettexture = atoi(row[100]); + entry.light = atoi(row[101]); + entry.walkspeed = atoi(row[102]); + entry.peqid = atoi(row[103]); + entry.unique_ = atoi(row[104]); + entry.fixed = atoi(row[105]); + entry.ignore_despawn = atoi(row[106]); + entry.show_name = atoi(row[107]); + entry.untargetable = atoi(row[108]); + entry.charm_ac = atoi(row[109]); + entry.charm_min_dmg = atoi(row[110]); + entry.charm_max_dmg = atoi(row[111]); + entry.charm_attack_delay = atoi(row[112]); + entry.charm_accuracy_rating = atoi(row[113]); + entry.charm_avoidance_rating = atoi(row[114]); + entry.charm_atk = atoi(row[115]); + entry.skip_global_loot = atoi(row[116]); + entry.rare_spawn = atoi(row[117]); + entry.stuck_behavior = atoi(row[118]); + entry.model = atoi(row[119]); + entry.flymode = atoi(row[120]); + entry.always_aggro = atoi(row[121]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_TYPES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_types_tint_repository.h b/common/repositories/base/base_npc_types_tint_repository.h new file mode 100644 index 000000000..3c11932ed --- /dev/null +++ b/common/repositories/base/base_npc_types_tint_repository.h @@ -0,0 +1,549 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_NPC_TYPES_TINT_REPOSITORY_H +#define EQEMU_BASE_NPC_TYPES_TINT_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseNpcTypesTintRepository { +public: + struct NpcTypesTint { + int id; + std::string tint_set_name; + int8 red1h; + int8 grn1h; + int8 blu1h; + int8 red2c; + int8 grn2c; + int8 blu2c; + int8 red3a; + int8 grn3a; + int8 blu3a; + int8 red4b; + int8 grn4b; + int8 blu4b; + int8 red5g; + int8 grn5g; + int8 blu5g; + int8 red6l; + int8 grn6l; + int8 blu6l; + int8 red7f; + int8 grn7f; + int8 blu7f; + int8 red8x; + int8 grn8x; + int8 blu8x; + int8 red9x; + int8 grn9x; + int8 blu9x; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "tint_set_name", + "red1h", + "grn1h", + "blu1h", + "red2c", + "grn2c", + "blu2c", + "red3a", + "grn3a", + "blu3a", + "red4b", + "grn4b", + "blu4b", + "red5g", + "grn5g", + "blu5g", + "red6l", + "grn6l", + "blu6l", + "red7f", + "grn7f", + "blu7f", + "red8x", + "grn8x", + "blu8x", + "red9x", + "grn9x", + "blu9x", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("npc_types_tint"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static NpcTypesTint NewEntity() + { + NpcTypesTint entry{}; + + entry.id = 0; + entry.tint_set_name = ""; + entry.red1h = 0; + entry.grn1h = 0; + entry.blu1h = 0; + entry.red2c = 0; + entry.grn2c = 0; + entry.blu2c = 0; + entry.red3a = 0; + entry.grn3a = 0; + entry.blu3a = 0; + entry.red4b = 0; + entry.grn4b = 0; + entry.blu4b = 0; + entry.red5g = 0; + entry.grn5g = 0; + entry.blu5g = 0; + entry.red6l = 0; + entry.grn6l = 0; + entry.blu6l = 0; + entry.red7f = 0; + entry.grn7f = 0; + entry.blu7f = 0; + entry.red8x = 0; + entry.grn8x = 0; + entry.blu8x = 0; + entry.red9x = 0; + entry.grn9x = 0; + entry.blu9x = 0; + + return entry; + } + + static NpcTypesTint GetNpcTypesTintEntry( + const std::vector &npc_types_tints, + int npc_types_tint_id + ) + { + for (auto &npc_types_tint : npc_types_tints) { + if (npc_types_tint.id == npc_types_tint_id) { + return npc_types_tint; + } + } + + return NewEntity(); + } + + static NpcTypesTint FindOne( + int npc_types_tint_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + npc_types_tint_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1] ? row[1] : ""; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int npc_types_tint_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + npc_types_tint_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + NpcTypesTint npc_types_tint_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(npc_types_tint_entry.red1h)); + update_values.push_back(columns[3] + " = " + std::to_string(npc_types_tint_entry.grn1h)); + update_values.push_back(columns[4] + " = " + std::to_string(npc_types_tint_entry.blu1h)); + update_values.push_back(columns[5] + " = " + std::to_string(npc_types_tint_entry.red2c)); + update_values.push_back(columns[6] + " = " + std::to_string(npc_types_tint_entry.grn2c)); + update_values.push_back(columns[7] + " = " + std::to_string(npc_types_tint_entry.blu2c)); + update_values.push_back(columns[8] + " = " + std::to_string(npc_types_tint_entry.red3a)); + update_values.push_back(columns[9] + " = " + std::to_string(npc_types_tint_entry.grn3a)); + update_values.push_back(columns[10] + " = " + std::to_string(npc_types_tint_entry.blu3a)); + update_values.push_back(columns[11] + " = " + std::to_string(npc_types_tint_entry.red4b)); + update_values.push_back(columns[12] + " = " + std::to_string(npc_types_tint_entry.grn4b)); + update_values.push_back(columns[13] + " = " + std::to_string(npc_types_tint_entry.blu4b)); + update_values.push_back(columns[14] + " = " + std::to_string(npc_types_tint_entry.red5g)); + update_values.push_back(columns[15] + " = " + std::to_string(npc_types_tint_entry.grn5g)); + update_values.push_back(columns[16] + " = " + std::to_string(npc_types_tint_entry.blu5g)); + update_values.push_back(columns[17] + " = " + std::to_string(npc_types_tint_entry.red6l)); + update_values.push_back(columns[18] + " = " + std::to_string(npc_types_tint_entry.grn6l)); + update_values.push_back(columns[19] + " = " + std::to_string(npc_types_tint_entry.blu6l)); + update_values.push_back(columns[20] + " = " + std::to_string(npc_types_tint_entry.red7f)); + update_values.push_back(columns[21] + " = " + std::to_string(npc_types_tint_entry.grn7f)); + update_values.push_back(columns[22] + " = " + std::to_string(npc_types_tint_entry.blu7f)); + update_values.push_back(columns[23] + " = " + std::to_string(npc_types_tint_entry.red8x)); + update_values.push_back(columns[24] + " = " + std::to_string(npc_types_tint_entry.grn8x)); + update_values.push_back(columns[25] + " = " + std::to_string(npc_types_tint_entry.blu8x)); + update_values.push_back(columns[26] + " = " + std::to_string(npc_types_tint_entry.red9x)); + update_values.push_back(columns[27] + " = " + std::to_string(npc_types_tint_entry.grn9x)); + update_values.push_back(columns[28] + " = " + std::to_string(npc_types_tint_entry.blu9x)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + npc_types_tint_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static NpcTypesTint InsertOne( + NpcTypesTint npc_types_tint_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + npc_types_tint_entry.id = results.LastInsertedID(); + return npc_types_tint_entry; + } + + npc_types_tint_entry = NewEntity(); + + return npc_types_tint_entry; + } + + static int InsertMany( + std::vector npc_types_tint_entries + ) + { + std::vector insert_chunks; + + for (auto &npc_types_tint_entry: npc_types_tint_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); + insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); + insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1] ? row[1] : ""; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + NpcTypesTint entry{}; + + entry.id = atoi(row[0]); + entry.tint_set_name = row[1] ? row[1] : ""; + entry.red1h = atoi(row[2]); + entry.grn1h = atoi(row[3]); + entry.blu1h = atoi(row[4]); + entry.red2c = atoi(row[5]); + entry.grn2c = atoi(row[6]); + entry.blu2c = atoi(row[7]); + entry.red3a = atoi(row[8]); + entry.grn3a = atoi(row[9]); + entry.blu3a = atoi(row[10]); + entry.red4b = atoi(row[11]); + entry.grn4b = atoi(row[12]); + entry.blu4b = atoi(row[13]); + entry.red5g = atoi(row[14]); + entry.grn5g = atoi(row[15]); + entry.blu5g = atoi(row[16]); + entry.red6l = atoi(row[17]); + entry.grn6l = atoi(row[18]); + entry.blu6l = atoi(row[19]); + entry.red7f = atoi(row[20]); + entry.grn7f = atoi(row[21]); + entry.blu7f = atoi(row[22]); + entry.red8x = atoi(row[23]); + entry.grn8x = atoi(row[24]); + entry.blu8x = atoi(row[25]); + entry.red9x = atoi(row[26]); + entry.grn9x = atoi(row[27]); + entry.blu9x = atoi(row[28]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_NPC_TYPES_TINT_REPOSITORY_H diff --git a/common/repositories/base/base_object_contents_repository.h b/common/repositories/base/base_object_contents_repository.h new file mode 100644 index 000000000..04a261381 --- /dev/null +++ b/common/repositories/base/base_object_contents_repository.h @@ -0,0 +1,393 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_OBJECT_CONTENTS_REPOSITORY_H +#define EQEMU_BASE_OBJECT_CONTENTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseObjectContentsRepository { +public: + struct ObjectContents { + int zoneid; + int parentid; + int bagidx; + int itemid; + int16 charges; + std::string droptime; + int augslot1; + int augslot2; + int augslot3; + int augslot4; + int augslot5; + int augslot6; + }; + + static std::string PrimaryKey() + { + return std::string("bagidx"); + } + + static std::vector Columns() + { + return { + "zoneid", + "parentid", + "bagidx", + "itemid", + "charges", + "droptime", + "augslot1", + "augslot2", + "augslot3", + "augslot4", + "augslot5", + "augslot6", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("object_contents"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ObjectContents NewEntity() + { + ObjectContents entry{}; + + entry.zoneid = 0; + entry.parentid = 0; + entry.bagidx = 0; + entry.itemid = 0; + entry.charges = 0; + entry.droptime = "0000-00-00 00:00:00"; + entry.augslot1 = 0; + entry.augslot2 = 0; + entry.augslot3 = 0; + entry.augslot4 = 0; + entry.augslot5 = 0; + entry.augslot6 = 0; + + return entry; + } + + static ObjectContents GetObjectContentsEntry( + const std::vector &object_contentss, + int object_contents_id + ) + { + for (auto &object_contents : object_contentss) { + if (object_contents.bagidx == object_contents_id) { + return object_contents; + } + } + + return NewEntity(); + } + + static ObjectContents FindOne( + int object_contents_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + object_contents_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5] ? row[5] : ""; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int object_contents_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + object_contents_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ObjectContents object_contents_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(object_contents_entry.zoneid)); + update_values.push_back(columns[3] + " = " + std::to_string(object_contents_entry.itemid)); + update_values.push_back(columns[4] + " = " + std::to_string(object_contents_entry.charges)); + update_values.push_back(columns[5] + " = '" + EscapeString(object_contents_entry.droptime) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(object_contents_entry.augslot1)); + update_values.push_back(columns[7] + " = " + std::to_string(object_contents_entry.augslot2)); + update_values.push_back(columns[8] + " = " + std::to_string(object_contents_entry.augslot3)); + update_values.push_back(columns[9] + " = " + std::to_string(object_contents_entry.augslot4)); + update_values.push_back(columns[10] + " = " + std::to_string(object_contents_entry.augslot5)); + update_values.push_back(columns[11] + " = " + std::to_string(object_contents_entry.augslot6)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + object_contents_entry.bagidx + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ObjectContents InsertOne( + ObjectContents object_contents_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.itemid)); + insert_values.push_back(std::to_string(object_contents_entry.charges)); + insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); + insert_values.push_back(std::to_string(object_contents_entry.augslot1)); + insert_values.push_back(std::to_string(object_contents_entry.augslot2)); + insert_values.push_back(std::to_string(object_contents_entry.augslot3)); + insert_values.push_back(std::to_string(object_contents_entry.augslot4)); + insert_values.push_back(std::to_string(object_contents_entry.augslot5)); + insert_values.push_back(std::to_string(object_contents_entry.augslot6)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + object_contents_entry.id = results.LastInsertedID(); + return object_contents_entry; + } + + object_contents_entry = NewEntity(); + + return object_contents_entry; + } + + static int InsertMany( + std::vector object_contents_entries + ) + { + std::vector insert_chunks; + + for (auto &object_contents_entry: object_contents_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.itemid)); + insert_values.push_back(std::to_string(object_contents_entry.charges)); + insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); + insert_values.push_back(std::to_string(object_contents_entry.augslot1)); + insert_values.push_back(std::to_string(object_contents_entry.augslot2)); + insert_values.push_back(std::to_string(object_contents_entry.augslot3)); + insert_values.push_back(std::to_string(object_contents_entry.augslot4)); + insert_values.push_back(std::to_string(object_contents_entry.augslot5)); + insert_values.push_back(std::to_string(object_contents_entry.augslot6)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5] ? row[5] : ""; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ObjectContents entry{}; + + entry.zoneid = atoi(row[0]); + entry.parentid = atoi(row[1]); + entry.bagidx = atoi(row[2]); + entry.itemid = atoi(row[3]); + entry.charges = atoi(row[4]); + entry.droptime = row[5] ? row[5] : ""; + entry.augslot1 = atoi(row[6]); + entry.augslot2 = atoi(row[7]); + entry.augslot3 = atoi(row[8]); + entry.augslot4 = atoi(row[9]); + entry.augslot5 = atoi(row[10]); + entry.augslot6 = atoi(row[11]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_OBJECT_CONTENTS_REPOSITORY_H diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h new file mode 100644 index 000000000..c3287bf96 --- /dev/null +++ b/common/repositories/base/base_object_repository.h @@ -0,0 +1,522 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_OBJECT_REPOSITORY_H +#define EQEMU_BASE_OBJECT_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseObjectRepository { +public: + struct Object { + int id; + int zoneid; + int16 version; + float xpos; + float ypos; + float zpos; + float heading; + int itemid; + int16 charges; + std::string objectname; + int type; + int icon; + int unknown08; + int unknown10; + int unknown20; + int unknown24; + int unknown60; + int unknown64; + int unknown68; + int unknown72; + int unknown76; + int unknown84; + float size; + float tilt_x; + float tilt_y; + std::string display_name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "version", + "xpos", + "ypos", + "zpos", + "heading", + "itemid", + "charges", + "objectname", + "type", + "icon", + "unknown08", + "unknown10", + "unknown20", + "unknown24", + "unknown60", + "unknown64", + "unknown68", + "unknown72", + "unknown76", + "unknown84", + "size", + "tilt_x", + "tilt_y", + "display_name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("object"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Object NewEntity() + { + Object entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.xpos = 0; + entry.ypos = 0; + entry.zpos = 0; + entry.heading = 0; + entry.itemid = 0; + entry.charges = 0; + entry.objectname = ""; + entry.type = 0; + entry.icon = 0; + entry.unknown08 = 0; + entry.unknown10 = 0; + entry.unknown20 = 0; + entry.unknown24 = 0; + entry.unknown60 = 0; + entry.unknown64 = 0; + entry.unknown68 = 0; + entry.unknown72 = 0; + entry.unknown76 = 0; + entry.unknown84 = 0; + entry.size = 100; + entry.tilt_x = 0; + entry.tilt_y = 0; + entry.display_name = ""; + + return entry; + } + + static Object GetObjectEntry( + const std::vector &objects, + int object_id + ) + { + for (auto &object : objects) { + if (object.id == object_id) { + return object; + } + } + + return NewEntity(); + } + + static Object FindOne( + int object_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + object_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25] ? row[25] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int object_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + object_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Object object_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(object_entry.zoneid)); + update_values.push_back(columns[2] + " = " + std::to_string(object_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(object_entry.xpos)); + update_values.push_back(columns[4] + " = " + std::to_string(object_entry.ypos)); + update_values.push_back(columns[5] + " = " + std::to_string(object_entry.zpos)); + update_values.push_back(columns[6] + " = " + std::to_string(object_entry.heading)); + update_values.push_back(columns[7] + " = " + std::to_string(object_entry.itemid)); + update_values.push_back(columns[8] + " = " + std::to_string(object_entry.charges)); + update_values.push_back(columns[9] + " = '" + EscapeString(object_entry.objectname) + "'"); + update_values.push_back(columns[10] + " = " + std::to_string(object_entry.type)); + update_values.push_back(columns[11] + " = " + std::to_string(object_entry.icon)); + update_values.push_back(columns[12] + " = " + std::to_string(object_entry.unknown08)); + update_values.push_back(columns[13] + " = " + std::to_string(object_entry.unknown10)); + update_values.push_back(columns[14] + " = " + std::to_string(object_entry.unknown20)); + update_values.push_back(columns[15] + " = " + std::to_string(object_entry.unknown24)); + update_values.push_back(columns[16] + " = " + std::to_string(object_entry.unknown60)); + update_values.push_back(columns[17] + " = " + std::to_string(object_entry.unknown64)); + update_values.push_back(columns[18] + " = " + std::to_string(object_entry.unknown68)); + update_values.push_back(columns[19] + " = " + std::to_string(object_entry.unknown72)); + update_values.push_back(columns[20] + " = " + std::to_string(object_entry.unknown76)); + update_values.push_back(columns[21] + " = " + std::to_string(object_entry.unknown84)); + update_values.push_back(columns[22] + " = " + std::to_string(object_entry.size)); + update_values.push_back(columns[23] + " = " + std::to_string(object_entry.tilt_x)); + update_values.push_back(columns[24] + " = " + std::to_string(object_entry.tilt_y)); + update_values.push_back(columns[25] + " = '" + EscapeString(object_entry.display_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + object_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Object InsertOne( + Object object_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_entry.zoneid)); + insert_values.push_back(std::to_string(object_entry.version)); + insert_values.push_back(std::to_string(object_entry.xpos)); + insert_values.push_back(std::to_string(object_entry.ypos)); + insert_values.push_back(std::to_string(object_entry.zpos)); + insert_values.push_back(std::to_string(object_entry.heading)); + insert_values.push_back(std::to_string(object_entry.itemid)); + insert_values.push_back(std::to_string(object_entry.charges)); + insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); + insert_values.push_back(std::to_string(object_entry.type)); + insert_values.push_back(std::to_string(object_entry.icon)); + insert_values.push_back(std::to_string(object_entry.unknown08)); + insert_values.push_back(std::to_string(object_entry.unknown10)); + insert_values.push_back(std::to_string(object_entry.unknown20)); + insert_values.push_back(std::to_string(object_entry.unknown24)); + insert_values.push_back(std::to_string(object_entry.unknown60)); + insert_values.push_back(std::to_string(object_entry.unknown64)); + insert_values.push_back(std::to_string(object_entry.unknown68)); + insert_values.push_back(std::to_string(object_entry.unknown72)); + insert_values.push_back(std::to_string(object_entry.unknown76)); + insert_values.push_back(std::to_string(object_entry.unknown84)); + insert_values.push_back(std::to_string(object_entry.size)); + insert_values.push_back(std::to_string(object_entry.tilt_x)); + insert_values.push_back(std::to_string(object_entry.tilt_y)); + insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + object_entry.id = results.LastInsertedID(); + return object_entry; + } + + object_entry = NewEntity(); + + return object_entry; + } + + static int InsertMany( + std::vector object_entries + ) + { + std::vector insert_chunks; + + for (auto &object_entry: object_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(object_entry.zoneid)); + insert_values.push_back(std::to_string(object_entry.version)); + insert_values.push_back(std::to_string(object_entry.xpos)); + insert_values.push_back(std::to_string(object_entry.ypos)); + insert_values.push_back(std::to_string(object_entry.zpos)); + insert_values.push_back(std::to_string(object_entry.heading)); + insert_values.push_back(std::to_string(object_entry.itemid)); + insert_values.push_back(std::to_string(object_entry.charges)); + insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); + insert_values.push_back(std::to_string(object_entry.type)); + insert_values.push_back(std::to_string(object_entry.icon)); + insert_values.push_back(std::to_string(object_entry.unknown08)); + insert_values.push_back(std::to_string(object_entry.unknown10)); + insert_values.push_back(std::to_string(object_entry.unknown20)); + insert_values.push_back(std::to_string(object_entry.unknown24)); + insert_values.push_back(std::to_string(object_entry.unknown60)); + insert_values.push_back(std::to_string(object_entry.unknown64)); + insert_values.push_back(std::to_string(object_entry.unknown68)); + insert_values.push_back(std::to_string(object_entry.unknown72)); + insert_values.push_back(std::to_string(object_entry.unknown76)); + insert_values.push_back(std::to_string(object_entry.unknown84)); + insert_values.push_back(std::to_string(object_entry.size)); + insert_values.push_back(std::to_string(object_entry.tilt_x)); + insert_values.push_back(std::to_string(object_entry.tilt_y)); + insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25] ? row[25] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Object entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = atof(row[3]); + entry.ypos = atof(row[4]); + entry.zpos = atof(row[5]); + entry.heading = atof(row[6]); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = atof(row[22]); + entry.tilt_x = atof(row[23]); + entry.tilt_y = atof(row[24]); + entry.display_name = row[25] ? row[25] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_OBJECT_REPOSITORY_H diff --git a/common/repositories/base/base_perl_event_export_settings_repository.h b/common/repositories/base/base_perl_event_export_settings_repository.h new file mode 100644 index 000000000..8e72aa8eb --- /dev/null +++ b/common/repositories/base/base_perl_event_export_settings_repository.h @@ -0,0 +1,351 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H +#define EQEMU_BASE_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePerlEventExportSettingsRepository { +public: + struct PerlEventExportSettings { + int event_id; + std::string event_description; + int16 export_qglobals; + int16 export_mob; + int16 export_zone; + int16 export_item; + int16 export_event; + }; + + static std::string PrimaryKey() + { + return std::string("event_id"); + } + + static std::vector Columns() + { + return { + "event_id", + "event_description", + "export_qglobals", + "export_mob", + "export_zone", + "export_item", + "export_event", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("perl_event_export_settings"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PerlEventExportSettings NewEntity() + { + PerlEventExportSettings entry{}; + + entry.event_id = 0; + entry.event_description = ""; + entry.export_qglobals = 0; + entry.export_mob = 0; + entry.export_zone = 0; + entry.export_item = 0; + entry.export_event = 0; + + return entry; + } + + static PerlEventExportSettings GetPerlEventExportSettingsEntry( + const std::vector &perl_event_export_settingss, + int perl_event_export_settings_id + ) + { + for (auto &perl_event_export_settings : perl_event_export_settingss) { + if (perl_event_export_settings.event_id == perl_event_export_settings_id) { + return perl_event_export_settings; + } + } + + return NewEntity(); + } + + static PerlEventExportSettings FindOne( + int perl_event_export_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + perl_event_export_settings_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1] ? row[1] : ""; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int perl_event_export_settings_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + perl_event_export_settings_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PerlEventExportSettings perl_event_export_settings_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(perl_event_export_settings_entry.export_qglobals)); + update_values.push_back(columns[3] + " = " + std::to_string(perl_event_export_settings_entry.export_mob)); + update_values.push_back(columns[4] + " = " + std::to_string(perl_event_export_settings_entry.export_zone)); + update_values.push_back(columns[5] + " = " + std::to_string(perl_event_export_settings_entry.export_item)); + update_values.push_back(columns[6] + " = " + std::to_string(perl_event_export_settings_entry.export_event)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + perl_event_export_settings_entry.event_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PerlEventExportSettings InsertOne( + PerlEventExportSettings perl_event_export_settings_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + perl_event_export_settings_entry.id = results.LastInsertedID(); + return perl_event_export_settings_entry; + } + + perl_event_export_settings_entry = NewEntity(); + + return perl_event_export_settings_entry; + } + + static int InsertMany( + std::vector perl_event_export_settings_entries + ) + { + std::vector insert_chunks; + + for (auto &perl_event_export_settings_entry: perl_event_export_settings_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); + insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1] ? row[1] : ""; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PerlEventExportSettings entry{}; + + entry.event_id = atoi(row[0]); + entry.event_description = row[1] ? row[1] : ""; + entry.export_qglobals = atoi(row[2]); + entry.export_mob = atoi(row[3]); + entry.export_zone = atoi(row[4]); + entry.export_item = atoi(row[5]); + entry.export_event = atoi(row[6]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H diff --git a/common/repositories/base/base_petitions_repository.h b/common/repositories/base/base_petitions_repository.h new file mode 100644 index 000000000..97a9e5761 --- /dev/null +++ b/common/repositories/base/base_petitions_repository.h @@ -0,0 +1,432 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PETITIONS_REPOSITORY_H +#define EQEMU_BASE_PETITIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePetitionsRepository { +public: + struct Petitions { + int dib; + int petid; + std::string charname; + std::string accountname; + std::string lastgm; + std::string petitiontext; + std::string gmtext; + std::string zone; + int urgency; + int charclass; + int charrace; + int charlevel; + int checkouts; + int unavailables; + int8 ischeckedout; + int senttime; + }; + + static std::string PrimaryKey() + { + return std::string("dib"); + } + + static std::vector Columns() + { + return { + "dib", + "petid", + "charname", + "accountname", + "lastgm", + "petitiontext", + "gmtext", + "zone", + "urgency", + "charclass", + "charrace", + "charlevel", + "checkouts", + "unavailables", + "ischeckedout", + "senttime", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("petitions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Petitions NewEntity() + { + Petitions entry{}; + + entry.dib = 0; + entry.petid = 0; + entry.charname = ""; + entry.accountname = ""; + entry.lastgm = ""; + entry.petitiontext = ""; + entry.gmtext = ""; + entry.zone = ""; + entry.urgency = 0; + entry.charclass = 0; + entry.charrace = 0; + entry.charlevel = 0; + entry.checkouts = 0; + entry.unavailables = 0; + entry.ischeckedout = 0; + entry.senttime = 0; + + return entry; + } + + static Petitions GetPetitionsEntry( + const std::vector &petitionss, + int petitions_id + ) + { + for (auto &petitions : petitionss) { + if (petitions.dib == petitions_id) { + return petitions; + } + } + + return NewEntity(); + } + + static Petitions FindOne( + int petitions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + petitions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int petitions_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + petitions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Petitions petitions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(petitions_entry.petid)); + update_values.push_back(columns[2] + " = '" + EscapeString(petitions_entry.charname) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(petitions_entry.accountname) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(petitions_entry.lastgm) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(petitions_entry.petitiontext) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(petitions_entry.gmtext) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(petitions_entry.zone) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(petitions_entry.urgency)); + update_values.push_back(columns[9] + " = " + std::to_string(petitions_entry.charclass)); + update_values.push_back(columns[10] + " = " + std::to_string(petitions_entry.charrace)); + update_values.push_back(columns[11] + " = " + std::to_string(petitions_entry.charlevel)); + update_values.push_back(columns[12] + " = " + std::to_string(petitions_entry.checkouts)); + update_values.push_back(columns[13] + " = " + std::to_string(petitions_entry.unavailables)); + update_values.push_back(columns[14] + " = " + std::to_string(petitions_entry.ischeckedout)); + update_values.push_back(columns[15] + " = " + std::to_string(petitions_entry.senttime)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + petitions_entry.dib + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Petitions InsertOne( + Petitions petitions_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(petitions_entry.petid)); + insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); + insert_values.push_back(std::to_string(petitions_entry.urgency)); + insert_values.push_back(std::to_string(petitions_entry.charclass)); + insert_values.push_back(std::to_string(petitions_entry.charrace)); + insert_values.push_back(std::to_string(petitions_entry.charlevel)); + insert_values.push_back(std::to_string(petitions_entry.checkouts)); + insert_values.push_back(std::to_string(petitions_entry.unavailables)); + insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); + insert_values.push_back(std::to_string(petitions_entry.senttime)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + petitions_entry.id = results.LastInsertedID(); + return petitions_entry; + } + + petitions_entry = NewEntity(); + + return petitions_entry; + } + + static int InsertMany( + std::vector petitions_entries + ) + { + std::vector insert_chunks; + + for (auto &petitions_entry: petitions_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(petitions_entry.petid)); + insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); + insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); + insert_values.push_back(std::to_string(petitions_entry.urgency)); + insert_values.push_back(std::to_string(petitions_entry.charclass)); + insert_values.push_back(std::to_string(petitions_entry.charrace)); + insert_values.push_back(std::to_string(petitions_entry.charlevel)); + insert_values.push_back(std::to_string(petitions_entry.checkouts)); + insert_values.push_back(std::to_string(petitions_entry.unavailables)); + insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); + insert_values.push_back(std::to_string(petitions_entry.senttime)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Petitions entry{}; + + entry.dib = atoi(row[0]); + entry.petid = atoi(row[1]); + entry.charname = row[2] ? row[2] : ""; + entry.accountname = row[3] ? row[3] : ""; + entry.lastgm = row[4] ? row[4] : ""; + entry.petitiontext = row[5] ? row[5] : ""; + entry.gmtext = row[6] ? row[6] : ""; + entry.zone = row[7] ? row[7] : ""; + entry.urgency = atoi(row[8]); + entry.charclass = atoi(row[9]); + entry.charrace = atoi(row[10]); + entry.charlevel = atoi(row[11]); + entry.checkouts = atoi(row[12]); + entry.unavailables = atoi(row[13]); + entry.ischeckedout = atoi(row[14]); + entry.senttime = atoi(row[15]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PETITIONS_REPOSITORY_H diff --git a/common/repositories/base/base_pets_equipmentset_entries_repository.h b/common/repositories/base/base_pets_equipmentset_entries_repository.h new file mode 100644 index 000000000..6b27208f2 --- /dev/null +++ b/common/repositories/base/base_pets_equipmentset_entries_repository.h @@ -0,0 +1,312 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePetsEquipmentsetEntriesRepository { +public: + struct PetsEquipmentsetEntries { + int set_id; + int slot; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot"); + } + + static std::vector Columns() + { + return { + "set_id", + "slot", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets_equipmentset_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PetsEquipmentsetEntries NewEntity() + { + PetsEquipmentsetEntries entry{}; + + entry.set_id = 0; + entry.slot = 0; + entry.item_id = 0; + + return entry; + } + + static PetsEquipmentsetEntries GetPetsEquipmentsetEntriesEntry( + const std::vector &pets_equipmentset_entriess, + int pets_equipmentset_entries_id + ) + { + for (auto &pets_equipmentset_entries : pets_equipmentset_entriess) { + if (pets_equipmentset_entries.slot == pets_equipmentset_entries_id) { + return pets_equipmentset_entries; + } + } + + return NewEntity(); + } + + static PetsEquipmentsetEntries FindOne( + int pets_equipmentset_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_equipmentset_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_equipmentset_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_equipmentset_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PetsEquipmentsetEntries pets_equipmentset_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entries_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_equipmentset_entries_entry.slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PetsEquipmentsetEntries InsertOne( + PetsEquipmentsetEntries pets_equipmentset_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_equipmentset_entries_entry.id = results.LastInsertedID(); + return pets_equipmentset_entries_entry; + } + + pets_equipmentset_entries_entry = NewEntity(); + + return pets_equipmentset_entries_entry; + } + + static int InsertMany( + std::vector pets_equipmentset_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_equipmentset_entries_entry: pets_equipmentset_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentsetEntries entry{}; + + entry.set_id = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item_id = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_pets_equipmentset_repository.h b/common/repositories/base/base_pets_equipmentset_repository.h new file mode 100644 index 000000000..0a2fe7143 --- /dev/null +++ b/common/repositories/base/base_pets_equipmentset_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PETS_EQUIPMENTSET_REPOSITORY_H +#define EQEMU_BASE_PETS_EQUIPMENTSET_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePetsEquipmentsetRepository { +public: + struct PetsEquipmentset { + int set_id; + std::string setname; + int nested_set; + }; + + static std::string PrimaryKey() + { + return std::string("set_id"); + } + + static std::vector Columns() + { + return { + "set_id", + "setname", + "nested_set", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets_equipmentset"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PetsEquipmentset NewEntity() + { + PetsEquipmentset entry{}; + + entry.set_id = 0; + entry.setname = ""; + entry.nested_set = -1; + + return entry; + } + + static PetsEquipmentset GetPetsEquipmentsetEntry( + const std::vector &pets_equipmentsets, + int pets_equipmentset_id + ) + { + for (auto &pets_equipmentset : pets_equipmentsets) { + if (pets_equipmentset.set_id == pets_equipmentset_id) { + return pets_equipmentset; + } + } + + return NewEntity(); + } + + static PetsEquipmentset FindOne( + int pets_equipmentset_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_equipmentset_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1] ? row[1] : ""; + entry.nested_set = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_equipmentset_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_equipmentset_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PetsEquipmentset pets_equipmentset_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(pets_equipmentset_entry.setname) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entry.nested_set)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_equipmentset_entry.set_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PetsEquipmentset InsertOne( + PetsEquipmentset pets_equipmentset_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); + insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_equipmentset_entry.id = results.LastInsertedID(); + return pets_equipmentset_entry; + } + + pets_equipmentset_entry = NewEntity(); + + return pets_equipmentset_entry; + } + + static int InsertMany( + std::vector pets_equipmentset_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_equipmentset_entry: pets_equipmentset_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); + insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1] ? row[1] : ""; + entry.nested_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PetsEquipmentset entry{}; + + entry.set_id = atoi(row[0]); + entry.setname = row[1] ? row[1] : ""; + entry.nested_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PETS_EQUIPMENTSET_REPOSITORY_H diff --git a/common/repositories/base/base_pets_repository.h b/common/repositories/base/base_pets_repository.h new file mode 100644 index 000000000..adfccf8d5 --- /dev/null +++ b/common/repositories/base/base_pets_repository.h @@ -0,0 +1,357 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PETS_REPOSITORY_H +#define EQEMU_BASE_PETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePetsRepository { +public: + struct Pets { + std::string type; + int petpower; + int npcID; + int8 temp; + int8 petcontrol; + int8 petnaming; + int8 monsterflag; + int equipmentset; + }; + + static std::string PrimaryKey() + { + return std::string("petpower"); + } + + static std::vector Columns() + { + return { + "type", + "petpower", + "npcID", + "temp", + "petcontrol", + "petnaming", + "monsterflag", + "equipmentset", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("pets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Pets NewEntity() + { + Pets entry{}; + + entry.type = ""; + entry.petpower = 0; + entry.npcID = 0; + entry.temp = 0; + entry.petcontrol = 0; + entry.petnaming = 0; + entry.monsterflag = 0; + entry.equipmentset = -1; + + return entry; + } + + static Pets GetPetsEntry( + const std::vector &petss, + int pets_id + ) + { + for (auto &pets : petss) { + if (pets.petpower == pets_id) { + return pets; + } + } + + return NewEntity(); + } + + static Pets FindOne( + int pets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + pets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Pets entry{}; + + entry.type = row[0] ? row[0] : ""; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int pets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + pets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Pets pets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(pets_entry.npcID)); + update_values.push_back(columns[3] + " = " + std::to_string(pets_entry.temp)); + update_values.push_back(columns[4] + " = " + std::to_string(pets_entry.petcontrol)); + update_values.push_back(columns[5] + " = " + std::to_string(pets_entry.petnaming)); + update_values.push_back(columns[6] + " = " + std::to_string(pets_entry.monsterflag)); + update_values.push_back(columns[7] + " = " + std::to_string(pets_entry.equipmentset)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + pets_entry.petpower + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Pets InsertOne( + Pets pets_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_entry.npcID)); + insert_values.push_back(std::to_string(pets_entry.temp)); + insert_values.push_back(std::to_string(pets_entry.petcontrol)); + insert_values.push_back(std::to_string(pets_entry.petnaming)); + insert_values.push_back(std::to_string(pets_entry.monsterflag)); + insert_values.push_back(std::to_string(pets_entry.equipmentset)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + pets_entry.id = results.LastInsertedID(); + return pets_entry; + } + + pets_entry = NewEntity(); + + return pets_entry; + } + + static int InsertMany( + std::vector pets_entries + ) + { + std::vector insert_chunks; + + for (auto &pets_entry: pets_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(pets_entry.npcID)); + insert_values.push_back(std::to_string(pets_entry.temp)); + insert_values.push_back(std::to_string(pets_entry.petcontrol)); + insert_values.push_back(std::to_string(pets_entry.petnaming)); + insert_values.push_back(std::to_string(pets_entry.monsterflag)); + insert_values.push_back(std::to_string(pets_entry.equipmentset)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Pets entry{}; + + entry.type = row[0] ? row[0] : ""; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Pets entry{}; + + entry.type = row[0] ? row[0] : ""; + entry.petpower = atoi(row[1]); + entry.npcID = atoi(row[2]); + entry.temp = atoi(row[3]); + entry.petcontrol = atoi(row[4]); + entry.petnaming = atoi(row[5]); + entry.monsterflag = atoi(row[6]); + entry.equipmentset = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PETS_REPOSITORY_H diff --git a/common/repositories/base/base_player_titlesets_repository.h b/common/repositories/base/base_player_titlesets_repository.h new file mode 100644 index 000000000..4f036f2a5 --- /dev/null +++ b/common/repositories/base/base_player_titlesets_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PLAYER_TITLESETS_REPOSITORY_H +#define EQEMU_BASE_PLAYER_TITLESETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BasePlayerTitlesetsRepository { +public: + struct PlayerTitlesets { + int id; + int char_id; + int title_set; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "char_id", + "title_set", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("player_titlesets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static PlayerTitlesets NewEntity() + { + PlayerTitlesets entry{}; + + entry.id = 0; + entry.char_id = 0; + entry.title_set = 0; + + return entry; + } + + static PlayerTitlesets GetPlayerTitlesetsEntry( + const std::vector &player_titlesetss, + int player_titlesets_id + ) + { + for (auto &player_titlesets : player_titlesetss) { + if (player_titlesets.id == player_titlesets_id) { + return player_titlesets; + } + } + + return NewEntity(); + } + + static PlayerTitlesets FindOne( + int player_titlesets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + player_titlesets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int player_titlesets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + player_titlesets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + PlayerTitlesets player_titlesets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(player_titlesets_entry.char_id)); + update_values.push_back(columns[2] + " = " + std::to_string(player_titlesets_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + player_titlesets_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static PlayerTitlesets InsertOne( + PlayerTitlesets player_titlesets_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); + insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + player_titlesets_entry.id = results.LastInsertedID(); + return player_titlesets_entry; + } + + player_titlesets_entry = NewEntity(); + + return player_titlesets_entry; + } + + static int InsertMany( + std::vector player_titlesets_entries + ) + { + std::vector insert_chunks; + + for (auto &player_titlesets_entry: player_titlesets_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); + insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + PlayerTitlesets entry{}; + + entry.id = atoi(row[0]); + entry.char_id = atoi(row[1]); + entry.title_set = atoi(row[2]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PLAYER_TITLESETS_REPOSITORY_H diff --git a/common/repositories/base/base_proximities_repository.h b/common/repositories/base/base_proximities_repository.h new file mode 100644 index 000000000..b1257616e --- /dev/null +++ b/common/repositories/base/base_proximities_repository.h @@ -0,0 +1,357 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_PROXIMITIES_REPOSITORY_H +#define EQEMU_BASE_PROXIMITIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseProximitiesRepository { +public: + struct Proximities { + int zoneid; + int exploreid; + float minx; + float maxx; + float miny; + float maxy; + float minz; + float maxz; + }; + + static std::string PrimaryKey() + { + return std::string("exploreid"); + } + + static std::vector Columns() + { + return { + "zoneid", + "exploreid", + "minx", + "maxx", + "miny", + "maxy", + "minz", + "maxz", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("proximities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Proximities NewEntity() + { + Proximities entry{}; + + entry.zoneid = 0; + entry.exploreid = 0; + entry.minx = 0.000000; + entry.maxx = 0.000000; + entry.miny = 0.000000; + entry.maxy = 0.000000; + entry.minz = 0.000000; + entry.maxz = 0.000000; + + return entry; + } + + static Proximities GetProximitiesEntry( + const std::vector &proximitiess, + int proximities_id + ) + { + for (auto &proximities : proximitiess) { + if (proximities.exploreid == proximities_id) { + return proximities; + } + } + + return NewEntity(); + } + + static Proximities FindOne( + int proximities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + proximities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int proximities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + proximities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Proximities proximities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(proximities_entry.minx)); + update_values.push_back(columns[3] + " = " + std::to_string(proximities_entry.maxx)); + update_values.push_back(columns[4] + " = " + std::to_string(proximities_entry.miny)); + update_values.push_back(columns[5] + " = " + std::to_string(proximities_entry.maxy)); + update_values.push_back(columns[6] + " = " + std::to_string(proximities_entry.minz)); + update_values.push_back(columns[7] + " = " + std::to_string(proximities_entry.maxz)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + proximities_entry.exploreid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Proximities InsertOne( + Proximities proximities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(proximities_entry.minx)); + insert_values.push_back(std::to_string(proximities_entry.maxx)); + insert_values.push_back(std::to_string(proximities_entry.miny)); + insert_values.push_back(std::to_string(proximities_entry.maxy)); + insert_values.push_back(std::to_string(proximities_entry.minz)); + insert_values.push_back(std::to_string(proximities_entry.maxz)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + proximities_entry.id = results.LastInsertedID(); + return proximities_entry; + } + + proximities_entry = NewEntity(); + + return proximities_entry; + } + + static int InsertMany( + std::vector proximities_entries + ) + { + std::vector insert_chunks; + + for (auto &proximities_entry: proximities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(proximities_entry.minx)); + insert_values.push_back(std::to_string(proximities_entry.maxx)); + insert_values.push_back(std::to_string(proximities_entry.miny)); + insert_values.push_back(std::to_string(proximities_entry.maxy)); + insert_values.push_back(std::to_string(proximities_entry.minz)); + insert_values.push_back(std::to_string(proximities_entry.maxz)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Proximities entry{}; + + entry.zoneid = atoi(row[0]); + entry.exploreid = atoi(row[1]); + entry.minx = atof(row[2]); + entry.maxx = atof(row[3]); + entry.miny = atof(row[4]); + entry.maxy = atof(row[5]); + entry.minz = atof(row[6]); + entry.maxz = atof(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_PROXIMITIES_REPOSITORY_H diff --git a/common/repositories/base/base_quest_globals_repository.h b/common/repositories/base/base_quest_globals_repository.h new file mode 100644 index 000000000..944bc4c44 --- /dev/null +++ b/common/repositories/base/base_quest_globals_repository.h @@ -0,0 +1,333 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_QUEST_GLOBALS_REPOSITORY_H +#define EQEMU_BASE_QUEST_GLOBALS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseQuestGlobalsRepository { +public: + struct QuestGlobals { + int charid; + int npcid; + int zoneid; + std::string name; + std::string value; + int expdate; + }; + + static std::string PrimaryKey() + { + return std::string("name"); + } + + static std::vector Columns() + { + return { + "charid", + "npcid", + "zoneid", + "name", + "value", + "expdate", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("quest_globals"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static QuestGlobals NewEntity() + { + QuestGlobals entry{}; + + entry.charid = 0; + entry.npcid = 0; + entry.zoneid = 0; + entry.name = ""; + entry.value = "?"; + entry.expdate = 0; + + return entry; + } + + static QuestGlobals GetQuestGlobalsEntry( + const std::vector &quest_globalss, + int quest_globals_id + ) + { + for (auto &quest_globals : quest_globalss) { + if (quest_globals.name == quest_globals_id) { + return quest_globals; + } + } + + return NewEntity(); + } + + static QuestGlobals FindOne( + int quest_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + quest_globals_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; + entry.expdate = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int quest_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + quest_globals_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + QuestGlobals quest_globals_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[4] + " = '" + EscapeString(quest_globals_entry.value) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(quest_globals_entry.expdate)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + quest_globals_entry.name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static QuestGlobals InsertOne( + QuestGlobals quest_globals_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); + insert_values.push_back(std::to_string(quest_globals_entry.expdate)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + quest_globals_entry.id = results.LastInsertedID(); + return quest_globals_entry; + } + + quest_globals_entry = NewEntity(); + + return quest_globals_entry; + } + + static int InsertMany( + std::vector quest_globals_entries + ) + { + std::vector insert_chunks; + + for (auto &quest_globals_entry: quest_globals_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); + insert_values.push_back(std::to_string(quest_globals_entry.expdate)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; + entry.expdate = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + QuestGlobals entry{}; + + entry.charid = atoi(row[0]); + entry.npcid = atoi(row[1]); + entry.zoneid = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.value = row[4] ? row[4] : ""; + entry.expdate = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_QUEST_GLOBALS_REPOSITORY_H diff --git a/common/repositories/base/base_raid_details_repository.h b/common/repositories/base/base_raid_details_repository.h new file mode 100644 index 000000000..e5e9ca728 --- /dev/null +++ b/common/repositories/base/base_raid_details_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_RAID_DETAILS_REPOSITORY_H +#define EQEMU_BASE_RAID_DETAILS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseRaidDetailsRepository { +public: + struct RaidDetails { + int raidid; + int loottype; + int8 locked; + std::string motd; + }; + + static std::string PrimaryKey() + { + return std::string("raidid"); + } + + static std::vector Columns() + { + return { + "raidid", + "loottype", + "locked", + "motd", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("raid_details"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RaidDetails NewEntity() + { + RaidDetails entry{}; + + entry.raidid = 0; + entry.loottype = 0; + entry.locked = 0; + entry.motd = ""; + + return entry; + } + + static RaidDetails GetRaidDetailsEntry( + const std::vector &raid_detailss, + int raid_details_id + ) + { + for (auto &raid_details : raid_detailss) { + if (raid_details.raidid == raid_details_id) { + return raid_details; + } + } + + return NewEntity(); + } + + static RaidDetails FindOne( + int raid_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + raid_details_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int raid_details_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + raid_details_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RaidDetails raid_details_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(raid_details_entry.loottype)); + update_values.push_back(columns[2] + " = " + std::to_string(raid_details_entry.locked)); + update_values.push_back(columns[3] + " = '" + EscapeString(raid_details_entry.motd) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + raid_details_entry.raidid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RaidDetails InsertOne( + RaidDetails raid_details_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_details_entry.loottype)); + insert_values.push_back(std::to_string(raid_details_entry.locked)); + insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + raid_details_entry.id = results.LastInsertedID(); + return raid_details_entry; + } + + raid_details_entry = NewEntity(); + + return raid_details_entry; + } + + static int InsertMany( + std::vector raid_details_entries + ) + { + std::vector insert_chunks; + + for (auto &raid_details_entry: raid_details_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_details_entry.loottype)); + insert_values.push_back(std::to_string(raid_details_entry.locked)); + insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidDetails entry{}; + + entry.raidid = atoi(row[0]); + entry.loottype = atoi(row[1]); + entry.locked = atoi(row[2]); + entry.motd = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_RAID_DETAILS_REPOSITORY_H diff --git a/common/repositories/base/base_raid_members_repository.h b/common/repositories/base/base_raid_members_repository.h new file mode 100644 index 000000000..c69a369ac --- /dev/null +++ b/common/repositories/base/base_raid_members_repository.h @@ -0,0 +1,369 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_RAID_MEMBERS_REPOSITORY_H +#define EQEMU_BASE_RAID_MEMBERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseRaidMembersRepository { +public: + struct RaidMembers { + int raidid; + int charid; + int groupid; + int8 _class; + int8 level; + std::string name; + int8 isgroupleader; + int8 israidleader; + int8 islooter; + }; + + static std::string PrimaryKey() + { + return std::string("charid"); + } + + static std::vector Columns() + { + return { + "raidid", + "charid", + "groupid", + "_class", + "level", + "name", + "isgroupleader", + "israidleader", + "islooter", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("raid_members"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RaidMembers NewEntity() + { + RaidMembers entry{}; + + entry.raidid = 0; + entry.charid = 0; + entry.groupid = 0; + entry._class = 0; + entry.level = 0; + entry.name = ""; + entry.isgroupleader = 0; + entry.israidleader = 0; + entry.islooter = 0; + + return entry; + } + + static RaidMembers GetRaidMembersEntry( + const std::vector &raid_memberss, + int raid_members_id + ) + { + for (auto &raid_members : raid_memberss) { + if (raid_members.charid == raid_members_id) { + return raid_members; + } + } + + return NewEntity(); + } + + static RaidMembers FindOne( + int raid_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + raid_members_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5] ? row[5] : ""; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int raid_members_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + raid_members_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RaidMembers raid_members_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(raid_members_entry.raidid)); + update_values.push_back(columns[2] + " = " + std::to_string(raid_members_entry.groupid)); + update_values.push_back(columns[3] + " = " + std::to_string(raid_members_entry._class)); + update_values.push_back(columns[4] + " = " + std::to_string(raid_members_entry.level)); + update_values.push_back(columns[5] + " = '" + EscapeString(raid_members_entry.name) + "'"); + update_values.push_back(columns[6] + " = " + std::to_string(raid_members_entry.isgroupleader)); + update_values.push_back(columns[7] + " = " + std::to_string(raid_members_entry.israidleader)); + update_values.push_back(columns[8] + " = " + std::to_string(raid_members_entry.islooter)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + raid_members_entry.charid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RaidMembers InsertOne( + RaidMembers raid_members_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.groupid)); + insert_values.push_back(std::to_string(raid_members_entry._class)); + insert_values.push_back(std::to_string(raid_members_entry.level)); + insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); + insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); + insert_values.push_back(std::to_string(raid_members_entry.israidleader)); + insert_values.push_back(std::to_string(raid_members_entry.islooter)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + raid_members_entry.id = results.LastInsertedID(); + return raid_members_entry; + } + + raid_members_entry = NewEntity(); + + return raid_members_entry; + } + + static int InsertMany( + std::vector raid_members_entries + ) + { + std::vector insert_chunks; + + for (auto &raid_members_entry: raid_members_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.groupid)); + insert_values.push_back(std::to_string(raid_members_entry._class)); + insert_values.push_back(std::to_string(raid_members_entry.level)); + insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); + insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); + insert_values.push_back(std::to_string(raid_members_entry.israidleader)); + insert_values.push_back(std::to_string(raid_members_entry.islooter)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5] ? row[5] : ""; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RaidMembers entry{}; + + entry.raidid = atoi(row[0]); + entry.charid = atoi(row[1]); + entry.groupid = atoi(row[2]); + entry._class = atoi(row[3]); + entry.level = atoi(row[4]); + entry.name = row[5] ? row[5] : ""; + entry.isgroupleader = atoi(row[6]); + entry.israidleader = atoi(row[7]); + entry.islooter = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_RAID_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_reports_repository.h b/common/repositories/base/base_reports_repository.h new file mode 100644 index 000000000..5d61e1d9b --- /dev/null +++ b/common/repositories/base/base_reports_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_REPORTS_REPOSITORY_H +#define EQEMU_BASE_REPORTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseReportsRepository { +public: + struct Reports { + int id; + std::string name; + std::string reported; + std::string reported_text; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "reported", + "reported_text", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("reports"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Reports NewEntity() + { + Reports entry{}; + + entry.id = 0; + entry.name = ""; + entry.reported = ""; + entry.reported_text = ""; + + return entry; + } + + static Reports GetReportsEntry( + const std::vector &reportss, + int reports_id + ) + { + for (auto &reports : reportss) { + if (reports.id == reports_id) { + return reports; + } + } + + return NewEntity(); + } + + static Reports FindOne( + int reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + reports_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int reports_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + reports_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Reports reports_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(reports_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(reports_entry.reported) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(reports_entry.reported_text) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + reports_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Reports InsertOne( + Reports reports_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + reports_entry.id = results.LastInsertedID(); + return reports_entry; + } + + reports_entry = NewEntity(); + + return reports_entry; + } + + static int InsertMany( + std::vector reports_entries + ) + { + std::vector insert_chunks; + + for (auto &reports_entry: reports_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); + insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Reports entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.reported = row[2] ? row[2] : ""; + entry.reported_text = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_REPORTS_REPOSITORY_H diff --git a/common/repositories/base/base_respawn_times_repository.h b/common/repositories/base/base_respawn_times_repository.h new file mode 100644 index 000000000..86f6c8785 --- /dev/null +++ b/common/repositories/base/base_respawn_times_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_RESPAWN_TIMES_REPOSITORY_H +#define EQEMU_BASE_RESPAWN_TIMES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseRespawnTimesRepository { +public: + struct RespawnTimes { + int id; + int start; + int duration; + int16 instance_id; + }; + + static std::string PrimaryKey() + { + return std::string("instance_id"); + } + + static std::vector Columns() + { + return { + "id", + "start", + "duration", + "instance_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("respawn_times"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RespawnTimes NewEntity() + { + RespawnTimes entry{}; + + entry.id = 0; + entry.start = 0; + entry.duration = 0; + entry.instance_id = 0; + + return entry; + } + + static RespawnTimes GetRespawnTimesEntry( + const std::vector &respawn_timess, + int respawn_times_id + ) + { + for (auto &respawn_times : respawn_timess) { + if (respawn_times.instance_id == respawn_times_id) { + return respawn_times; + } + } + + return NewEntity(); + } + + static RespawnTimes FindOne( + int respawn_times_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + respawn_times_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int respawn_times_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + respawn_times_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RespawnTimes respawn_times_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(respawn_times_entry.start)); + update_values.push_back(columns[2] + " = " + std::to_string(respawn_times_entry.duration)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + respawn_times_entry.instance_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RespawnTimes InsertOne( + RespawnTimes respawn_times_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(respawn_times_entry.start)); + insert_values.push_back(std::to_string(respawn_times_entry.duration)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + respawn_times_entry.id = results.LastInsertedID(); + return respawn_times_entry; + } + + respawn_times_entry = NewEntity(); + + return respawn_times_entry; + } + + static int InsertMany( + std::vector respawn_times_entries + ) + { + std::vector insert_chunks; + + for (auto &respawn_times_entry: respawn_times_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(respawn_times_entry.start)); + insert_values.push_back(std::to_string(respawn_times_entry.duration)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RespawnTimes entry{}; + + entry.id = atoi(row[0]); + entry.start = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_RESPAWN_TIMES_REPOSITORY_H diff --git a/common/repositories/base/base_rule_sets_repository.h b/common/repositories/base/base_rule_sets_repository.h new file mode 100644 index 000000000..e6a6c5717 --- /dev/null +++ b/common/repositories/base/base_rule_sets_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_RULE_SETS_REPOSITORY_H +#define EQEMU_BASE_RULE_SETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseRuleSetsRepository { +public: + struct RuleSets { + int8 ruleset_id; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("ruleset_id"); + } + + static std::vector Columns() + { + return { + "ruleset_id", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("rule_sets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RuleSets NewEntity() + { + RuleSets entry{}; + + entry.ruleset_id = 0; + entry.name = ""; + + return entry; + } + + static RuleSets GetRuleSetsEntry( + const std::vector &rule_setss, + int rule_sets_id + ) + { + for (auto &rule_sets : rule_setss) { + if (rule_sets.ruleset_id == rule_sets_id) { + return rule_sets; + } + } + + return NewEntity(); + } + + static RuleSets FindOne( + int rule_sets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + rule_sets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int rule_sets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + rule_sets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RuleSets rule_sets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(rule_sets_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + rule_sets_entry.ruleset_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RuleSets InsertOne( + RuleSets rule_sets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + rule_sets_entry.id = results.LastInsertedID(); + return rule_sets_entry; + } + + rule_sets_entry = NewEntity(); + + return rule_sets_entry; + } + + static int InsertMany( + std::vector rule_sets_entries + ) + { + std::vector insert_chunks; + + for (auto &rule_sets_entry: rule_sets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleSets entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_RULE_SETS_REPOSITORY_H diff --git a/common/repositories/base/base_rule_values_repository.h b/common/repositories/base/base_rule_values_repository.h new file mode 100644 index 000000000..f6dd33980 --- /dev/null +++ b/common/repositories/base/base_rule_values_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_RULE_VALUES_REPOSITORY_H +#define EQEMU_BASE_RULE_VALUES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseRuleValuesRepository { +public: + struct RuleValues { + int8 ruleset_id; + std::string rule_name; + std::string rule_value; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("rule_name"); + } + + static std::vector Columns() + { + return { + "ruleset_id", + "rule_name", + "rule_value", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("rule_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static RuleValues NewEntity() + { + RuleValues entry{}; + + entry.ruleset_id = 0; + entry.rule_name = ""; + entry.rule_value = ""; + entry.notes = ""; + + return entry; + } + + static RuleValues GetRuleValuesEntry( + const std::vector &rule_valuess, + int rule_values_id + ) + { + for (auto &rule_values : rule_valuess) { + if (rule_values.rule_name == rule_values_id) { + return rule_values; + } + } + + return NewEntity(); + } + + static RuleValues FindOne( + int rule_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + rule_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int rule_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + rule_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + RuleValues rule_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = '" + EscapeString(rule_values_entry.rule_value) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(rule_values_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + rule_values_entry.rule_name + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static RuleValues InsertOne( + RuleValues rule_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); + insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + rule_values_entry.id = results.LastInsertedID(); + return rule_values_entry; + } + + rule_values_entry = NewEntity(); + + return rule_values_entry; + } + + static int InsertMany( + std::vector rule_values_entries + ) + { + std::vector insert_chunks; + + for (auto &rule_values_entry: rule_values_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); + insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + RuleValues entry{}; + + entry.ruleset_id = atoi(row[0]); + entry.rule_name = row[1] ? row[1] : ""; + entry.rule_value = row[2] ? row[2] : ""; + entry.notes = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_RULE_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_saylink_repository.h b/common/repositories/base/base_saylink_repository.h new file mode 100644 index 000000000..2d8da9040 --- /dev/null +++ b/common/repositories/base/base_saylink_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SAYLINK_REPOSITORY_H +#define EQEMU_BASE_SAYLINK_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSaylinkRepository { +public: + struct Saylink { + int id; + std::string phrase; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "phrase", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("saylink"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Saylink NewEntity() + { + Saylink entry{}; + + entry.id = 0; + entry.phrase = ""; + + return entry; + } + + static Saylink GetSaylinkEntry( + const std::vector &saylinks, + int saylink_id + ) + { + for (auto &saylink : saylinks) { + if (saylink.id == saylink_id) { + return saylink; + } + } + + return NewEntity(); + } + + static Saylink FindOne( + int saylink_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + saylink_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1] ? row[1] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int saylink_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + saylink_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Saylink saylink_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(saylink_entry.phrase) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + saylink_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Saylink InsertOne( + Saylink saylink_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + saylink_entry.id = results.LastInsertedID(); + return saylink_entry; + } + + saylink_entry = NewEntity(); + + return saylink_entry; + } + + static int InsertMany( + std::vector saylink_entries + ) + { + std::vector insert_chunks; + + for (auto &saylink_entry: saylink_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Saylink entry{}; + + entry.id = atoi(row[0]); + entry.phrase = row[1] ? row[1] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SAYLINK_REPOSITORY_H diff --git a/common/repositories/base/base_skill_caps_repository.h b/common/repositories/base/base_skill_caps_repository.h new file mode 100644 index 000000000..daf293f0a --- /dev/null +++ b/common/repositories/base/base_skill_caps_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SKILL_CAPS_REPOSITORY_H +#define EQEMU_BASE_SKILL_CAPS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSkillCapsRepository { +public: + struct SkillCaps { + int8 skillID; + int8 class; + int8 level; + int cap; + int8 class_; + }; + + static std::string PrimaryKey() + { + return std::string("class_"); + } + + static std::vector Columns() + { + return { + "skillID", + "class", + "level", + "cap", + "class_", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("skill_caps"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SkillCaps NewEntity() + { + SkillCaps entry{}; + + entry.skillID = 0; + entry.class = 0; + entry.level = 0; + entry.cap = 0; + entry.class_ = 0; + + return entry; + } + + static SkillCaps GetSkillCapsEntry( + const std::vector &skill_capss, + int skill_caps_id + ) + { + for (auto &skill_caps : skill_capss) { + if (skill_caps.class_ == skill_caps_id) { + return skill_caps; + } + } + + return NewEntity(); + } + + static SkillCaps FindOne( + int skill_caps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + skill_caps_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int skill_caps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + skill_caps_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SkillCaps skill_caps_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(skill_caps_entry.cap)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + skill_caps_entry.class_ + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SkillCaps InsertOne( + SkillCaps skill_caps_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(skill_caps_entry.cap)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + skill_caps_entry.id = results.LastInsertedID(); + return skill_caps_entry; + } + + skill_caps_entry = NewEntity(); + + return skill_caps_entry; + } + + static int InsertMany( + std::vector skill_caps_entries + ) + { + std::vector insert_chunks; + + for (auto &skill_caps_entry: skill_caps_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(skill_caps_entry.cap)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SkillCaps entry{}; + + entry.skillID = atoi(row[0]); + entry.class = atoi(row[1]); + entry.level = atoi(row[2]); + entry.cap = atoi(row[3]); + entry.class_ = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SKILL_CAPS_REPOSITORY_H diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h new file mode 100644 index 000000000..423e9798d --- /dev/null +++ b/common/repositories/base/base_spawn2_repository.h @@ -0,0 +1,423 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWN2_REPOSITORY_H +#define EQEMU_BASE_SPAWN2_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawn2Repository { +public: + struct Spawn2 { + int id; + int spawngroupID; + std::string zone; + int16 version; + float x; + float y; + float z; + float heading; + int respawntime; + int variance; + int pathgrid; + int _condition; + int cond_value; + int8 enabled; + int8 animation; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "spawngroupID", + "zone", + "version", + "x", + "y", + "z", + "heading", + "respawntime", + "variance", + "pathgrid", + "_condition", + "cond_value", + "enabled", + "animation", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn2"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawn2 NewEntity() + { + Spawn2 entry{}; + + entry.id = 0; + entry.spawngroupID = 0; + entry.zone = ""; + entry.version = 0; + entry.x = 0.000000; + entry.y = 0.000000; + entry.z = 0.000000; + entry.heading = 0.000000; + entry.respawntime = 0; + entry.variance = 0; + entry.pathgrid = 0; + entry._condition = 0; + entry.cond_value = 1; + entry.enabled = 1; + entry.animation = 0; + + return entry; + } + + static Spawn2 GetSpawn2Entry( + const std::vector &spawn2s, + int spawn2_id + ) + { + for (auto &spawn2 : spawn2s) { + if (spawn2.id == spawn2_id) { + return spawn2; + } + } + + return NewEntity(); + } + + static Spawn2 FindOne( + int spawn2_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn2_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn2_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn2_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawn2 spawn2_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(spawn2_entry.spawngroupID)); + update_values.push_back(columns[2] + " = '" + EscapeString(spawn2_entry.zone) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(spawn2_entry.version)); + update_values.push_back(columns[4] + " = " + std::to_string(spawn2_entry.x)); + update_values.push_back(columns[5] + " = " + std::to_string(spawn2_entry.y)); + update_values.push_back(columns[6] + " = " + std::to_string(spawn2_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(spawn2_entry.heading)); + update_values.push_back(columns[8] + " = " + std::to_string(spawn2_entry.respawntime)); + update_values.push_back(columns[9] + " = " + std::to_string(spawn2_entry.variance)); + update_values.push_back(columns[10] + " = " + std::to_string(spawn2_entry.pathgrid)); + update_values.push_back(columns[11] + " = " + std::to_string(spawn2_entry._condition)); + update_values.push_back(columns[12] + " = " + std::to_string(spawn2_entry.cond_value)); + update_values.push_back(columns[13] + " = " + std::to_string(spawn2_entry.enabled)); + update_values.push_back(columns[14] + " = " + std::to_string(spawn2_entry.animation)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn2_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawn2 InsertOne( + Spawn2 spawn2_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); + insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.version)); + insert_values.push_back(std::to_string(spawn2_entry.x)); + insert_values.push_back(std::to_string(spawn2_entry.y)); + insert_values.push_back(std::to_string(spawn2_entry.z)); + insert_values.push_back(std::to_string(spawn2_entry.heading)); + insert_values.push_back(std::to_string(spawn2_entry.respawntime)); + insert_values.push_back(std::to_string(spawn2_entry.variance)); + insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); + insert_values.push_back(std::to_string(spawn2_entry._condition)); + insert_values.push_back(std::to_string(spawn2_entry.cond_value)); + insert_values.push_back(std::to_string(spawn2_entry.enabled)); + insert_values.push_back(std::to_string(spawn2_entry.animation)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn2_entry.id = results.LastInsertedID(); + return spawn2_entry; + } + + spawn2_entry = NewEntity(); + + return spawn2_entry; + } + + static int InsertMany( + std::vector spawn2_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn2_entry: spawn2_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); + insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn2_entry.version)); + insert_values.push_back(std::to_string(spawn2_entry.x)); + insert_values.push_back(std::to_string(spawn2_entry.y)); + insert_values.push_back(std::to_string(spawn2_entry.z)); + insert_values.push_back(std::to_string(spawn2_entry.heading)); + insert_values.push_back(std::to_string(spawn2_entry.respawntime)); + insert_values.push_back(std::to_string(spawn2_entry.variance)); + insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); + insert_values.push_back(std::to_string(spawn2_entry._condition)); + insert_values.push_back(std::to_string(spawn2_entry.cond_value)); + insert_values.push_back(std::to_string(spawn2_entry.enabled)); + insert_values.push_back(std::to_string(spawn2_entry.animation)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawn2 entry{}; + + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = atof(row[4]); + entry.y = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWN2_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_condition_values_repository.h b/common/repositories/base/base_spawn_condition_values_repository.h new file mode 100644 index 000000000..de279e9f7 --- /dev/null +++ b/common/repositories/base/base_spawn_condition_values_repository.h @@ -0,0 +1,318 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWN_CONDITION_VALUES_REPOSITORY_H +#define EQEMU_BASE_SPAWN_CONDITION_VALUES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawnConditionValuesRepository { +public: + struct SpawnConditionValues { + int id; + int8 value; + std::string zone; + int instance_id; + }; + + static std::string PrimaryKey() + { + return std::string("instance_id"); + } + + static std::vector Columns() + { + return { + "id", + "value", + "zone", + "instance_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_condition_values"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnConditionValues NewEntity() + { + SpawnConditionValues entry{}; + + entry.id = 0; + entry.value = 0; + entry.zone = ""; + entry.instance_id = 0; + + return entry; + } + + static SpawnConditionValues GetSpawnConditionValuesEntry( + const std::vector &spawn_condition_valuess, + int spawn_condition_values_id + ) + { + for (auto &spawn_condition_values : spawn_condition_valuess) { + if (spawn_condition_values.instance_id == spawn_condition_values_id) { + return spawn_condition_values; + } + } + + return NewEntity(); + } + + static SpawnConditionValues FindOne( + int spawn_condition_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_condition_values_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.instance_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_condition_values_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_condition_values_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnConditionValues spawn_condition_values_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(spawn_condition_values_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_condition_values_entry.instance_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnConditionValues InsertOne( + SpawnConditionValues spawn_condition_values_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_condition_values_entry.id = results.LastInsertedID(); + return spawn_condition_values_entry; + } + + spawn_condition_values_entry = NewEntity(); + + return spawn_condition_values_entry; + } + + static int InsertMany( + std::vector spawn_condition_values_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_condition_values_entry: spawn_condition_values_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditionValues entry{}; + + entry.id = atoi(row[0]); + entry.value = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.instance_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWN_CONDITION_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_conditions_repository.h b/common/repositories/base/base_spawn_conditions_repository.h new file mode 100644 index 000000000..b6671182d --- /dev/null +++ b/common/repositories/base/base_spawn_conditions_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWN_CONDITIONS_REPOSITORY_H +#define EQEMU_BASE_SPAWN_CONDITIONS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawnConditionsRepository { +public: + struct SpawnConditions { + std::string zone; + int id; + int value; + int8 onchange; + std::string name; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "zone", + "id", + "value", + "onchange", + "name", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_conditions"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnConditions NewEntity() + { + SpawnConditions entry{}; + + entry.zone = ""; + entry.id = 1; + entry.value = 0; + entry.onchange = 0; + entry.name = ""; + + return entry; + } + + static SpawnConditions GetSpawnConditionsEntry( + const std::vector &spawn_conditionss, + int spawn_conditions_id + ) + { + for (auto &spawn_conditions : spawn_conditionss) { + if (spawn_conditions.id == spawn_conditions_id) { + return spawn_conditions; + } + } + + return NewEntity(); + } + + static SpawnConditions FindOne( + int spawn_conditions_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_conditions_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnConditions entry{}; + + entry.zone = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_conditions_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_conditions_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnConditions spawn_conditions_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(spawn_conditions_entry.value)); + update_values.push_back(columns[3] + " = " + std::to_string(spawn_conditions_entry.onchange)); + update_values.push_back(columns[4] + " = '" + EscapeString(spawn_conditions_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_conditions_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnConditions InsertOne( + SpawnConditions spawn_conditions_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_conditions_entry.value)); + insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_conditions_entry.id = results.LastInsertedID(); + return spawn_conditions_entry; + } + + spawn_conditions_entry = NewEntity(); + + return spawn_conditions_entry; + } + + static int InsertMany( + std::vector spawn_conditions_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_conditions_entry: spawn_conditions_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawn_conditions_entry.value)); + insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditions entry{}; + + entry.zone = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnConditions entry{}; + + entry.zone = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.value = atoi(row[2]); + entry.onchange = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWN_CONDITIONS_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_events_repository.h b/common/repositories/base/base_spawn_events_repository.h new file mode 100644 index 000000000..4fa81b0fc --- /dev/null +++ b/common/repositories/base/base_spawn_events_repository.h @@ -0,0 +1,414 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWN_EVENTS_REPOSITORY_H +#define EQEMU_BASE_SPAWN_EVENTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawnEventsRepository { +public: + struct SpawnEvents { + int id; + std::string zone; + int cond_id; + std::string name; + int period; + int8 next_minute; + int8 next_hour; + int8 next_day; + int8 next_month; + int next_year; + int8 enabled; + int8 action; + int argument; + int8 strict; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "cond_id", + "name", + "period", + "next_minute", + "next_hour", + "next_day", + "next_month", + "next_year", + "enabled", + "action", + "argument", + "strict", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawn_events"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpawnEvents NewEntity() + { + SpawnEvents entry{}; + + entry.id = 0; + entry.zone = ""; + entry.cond_id = 0; + entry.name = ""; + entry.period = 0; + entry.next_minute = 0; + entry.next_hour = 0; + entry.next_day = 0; + entry.next_month = 0; + entry.next_year = 0; + entry.enabled = 1; + entry.action = 0; + entry.argument = 0; + entry.strict = 0; + + return entry; + } + + static SpawnEvents GetSpawnEventsEntry( + const std::vector &spawn_eventss, + int spawn_events_id + ) + { + for (auto &spawn_events : spawn_eventss) { + if (spawn_events.id == spawn_events_id) { + return spawn_events; + } + } + + return NewEntity(); + } + + static SpawnEvents FindOne( + int spawn_events_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawn_events_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.cond_id = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawn_events_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawn_events_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpawnEvents spawn_events_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spawn_events_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(spawn_events_entry.cond_id)); + update_values.push_back(columns[3] + " = '" + EscapeString(spawn_events_entry.name) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(spawn_events_entry.period)); + update_values.push_back(columns[5] + " = " + std::to_string(spawn_events_entry.next_minute)); + update_values.push_back(columns[6] + " = " + std::to_string(spawn_events_entry.next_hour)); + update_values.push_back(columns[7] + " = " + std::to_string(spawn_events_entry.next_day)); + update_values.push_back(columns[8] + " = " + std::to_string(spawn_events_entry.next_month)); + update_values.push_back(columns[9] + " = " + std::to_string(spawn_events_entry.next_year)); + update_values.push_back(columns[10] + " = " + std::to_string(spawn_events_entry.enabled)); + update_values.push_back(columns[11] + " = " + std::to_string(spawn_events_entry.action)); + update_values.push_back(columns[12] + " = " + std::to_string(spawn_events_entry.argument)); + update_values.push_back(columns[13] + " = " + std::to_string(spawn_events_entry.strict)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawn_events_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpawnEvents InsertOne( + SpawnEvents spawn_events_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); + insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.period)); + insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); + insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); + insert_values.push_back(std::to_string(spawn_events_entry.next_day)); + insert_values.push_back(std::to_string(spawn_events_entry.next_month)); + insert_values.push_back(std::to_string(spawn_events_entry.next_year)); + insert_values.push_back(std::to_string(spawn_events_entry.enabled)); + insert_values.push_back(std::to_string(spawn_events_entry.action)); + insert_values.push_back(std::to_string(spawn_events_entry.argument)); + insert_values.push_back(std::to_string(spawn_events_entry.strict)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawn_events_entry.id = results.LastInsertedID(); + return spawn_events_entry; + } + + spawn_events_entry = NewEntity(); + + return spawn_events_entry; + } + + static int InsertMany( + std::vector spawn_events_entries + ) + { + std::vector insert_chunks; + + for (auto &spawn_events_entry: spawn_events_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); + insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); + insert_values.push_back(std::to_string(spawn_events_entry.period)); + insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); + insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); + insert_values.push_back(std::to_string(spawn_events_entry.next_day)); + insert_values.push_back(std::to_string(spawn_events_entry.next_month)); + insert_values.push_back(std::to_string(spawn_events_entry.next_year)); + insert_values.push_back(std::to_string(spawn_events_entry.enabled)); + insert_values.push_back(std::to_string(spawn_events_entry.action)); + insert_values.push_back(std::to_string(spawn_events_entry.argument)); + insert_values.push_back(std::to_string(spawn_events_entry.strict)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.cond_id = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpawnEvents entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.cond_id = atoi(row[2]); + entry.name = row[3] ? row[3] : ""; + entry.period = atoi(row[4]); + entry.next_minute = atoi(row[5]); + entry.next_hour = atoi(row[6]); + entry.next_day = atoi(row[7]); + entry.next_month = atoi(row[8]); + entry.next_year = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.action = atoi(row[11]); + entry.argument = atoi(row[12]); + entry.strict = atoi(row[13]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWN_EVENTS_REPOSITORY_H diff --git a/common/repositories/base/base_spawnentry_repository.h b/common/repositories/base/base_spawnentry_repository.h new file mode 100644 index 000000000..7733ddea0 --- /dev/null +++ b/common/repositories/base/base_spawnentry_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWNENTRY_REPOSITORY_H +#define EQEMU_BASE_SPAWNENTRY_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawnentryRepository { +public: + struct Spawnentry { + int spawngroupID; + int npcID; + int16 chance; + int condition_value_filter; + }; + + static std::string PrimaryKey() + { + return std::string("npcID"); + } + + static std::vector Columns() + { + return { + "spawngroupID", + "npcID", + "chance", + "condition_value_filter", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawnentry"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawnentry NewEntity() + { + Spawnentry entry{}; + + entry.spawngroupID = 0; + entry.npcID = 0; + entry.chance = 0; + entry.condition_value_filter = 1; + + return entry; + } + + static Spawnentry GetSpawnentryEntry( + const std::vector &spawnentrys, + int spawnentry_id + ) + { + for (auto &spawnentry : spawnentrys) { + if (spawnentry.npcID == spawnentry_id) { + return spawnentry; + } + } + + return NewEntity(); + } + + static Spawnentry FindOne( + int spawnentry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawnentry_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawnentry_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawnentry_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawnentry spawnentry_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(spawnentry_entry.chance)); + update_values.push_back(columns[3] + " = " + std::to_string(spawnentry_entry.condition_value_filter)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawnentry_entry.npcID + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawnentry InsertOne( + Spawnentry spawnentry_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawnentry_entry.chance)); + insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawnentry_entry.id = results.LastInsertedID(); + return spawnentry_entry; + } + + spawnentry_entry = NewEntity(); + + return spawnentry_entry; + } + + static int InsertMany( + std::vector spawnentry_entries + ) + { + std::vector insert_chunks; + + for (auto &spawnentry_entry: spawnentry_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(spawnentry_entry.chance)); + insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawnentry entry{}; + + entry.spawngroupID = atoi(row[0]); + entry.npcID = atoi(row[1]); + entry.chance = atoi(row[2]); + entry.condition_value_filter = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWNENTRY_REPOSITORY_H diff --git a/common/repositories/base/base_spawngroup_repository.h b/common/repositories/base/base_spawngroup_repository.h new file mode 100644 index 000000000..6f0897d1b --- /dev/null +++ b/common/repositories/base/base_spawngroup_repository.h @@ -0,0 +1,405 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPAWNGROUP_REPOSITORY_H +#define EQEMU_BASE_SPAWNGROUP_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpawngroupRepository { +public: + struct Spawngroup { + int id; + std::string name; + int8 spawn_limit; + float dist; + float max_x; + float min_x; + float max_y; + float min_y; + int delay; + int mindelay; + int8 despawn; + int despawn_timer; + int8 wp_spawns; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "spawn_limit", + "dist", + "max_x", + "min_x", + "max_y", + "min_y", + "delay", + "mindelay", + "despawn", + "despawn_timer", + "wp_spawns", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spawngroup"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Spawngroup NewEntity() + { + Spawngroup entry{}; + + entry.id = 0; + entry.name = ""; + entry.spawn_limit = 0; + entry.dist = 0; + entry.max_x = 0; + entry.min_x = 0; + entry.max_y = 0; + entry.min_y = 0; + entry.delay = 45000; + entry.mindelay = 15000; + entry.despawn = 0; + entry.despawn_timer = 100; + entry.wp_spawns = 0; + + return entry; + } + + static Spawngroup GetSpawngroupEntry( + const std::vector &spawngroups, + int spawngroup_id + ) + { + for (auto &spawngroup : spawngroups) { + if (spawngroup.id == spawngroup_id) { + return spawngroup; + } + } + + return NewEntity(); + } + + static Spawngroup FindOne( + int spawngroup_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spawngroup_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Spawngroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spawngroup_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spawngroup_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Spawngroup spawngroup_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spawngroup_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(spawngroup_entry.spawn_limit)); + update_values.push_back(columns[3] + " = " + std::to_string(spawngroup_entry.dist)); + update_values.push_back(columns[4] + " = " + std::to_string(spawngroup_entry.max_x)); + update_values.push_back(columns[5] + " = " + std::to_string(spawngroup_entry.min_x)); + update_values.push_back(columns[6] + " = " + std::to_string(spawngroup_entry.max_y)); + update_values.push_back(columns[7] + " = " + std::to_string(spawngroup_entry.min_y)); + update_values.push_back(columns[8] + " = " + std::to_string(spawngroup_entry.delay)); + update_values.push_back(columns[9] + " = " + std::to_string(spawngroup_entry.mindelay)); + update_values.push_back(columns[10] + " = " + std::to_string(spawngroup_entry.despawn)); + update_values.push_back(columns[11] + " = " + std::to_string(spawngroup_entry.despawn_timer)); + update_values.push_back(columns[12] + " = " + std::to_string(spawngroup_entry.wp_spawns)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spawngroup_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Spawngroup InsertOne( + Spawngroup spawngroup_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); + insert_values.push_back(std::to_string(spawngroup_entry.dist)); + insert_values.push_back(std::to_string(spawngroup_entry.max_x)); + insert_values.push_back(std::to_string(spawngroup_entry.min_x)); + insert_values.push_back(std::to_string(spawngroup_entry.max_y)); + insert_values.push_back(std::to_string(spawngroup_entry.min_y)); + insert_values.push_back(std::to_string(spawngroup_entry.delay)); + insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); + insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spawngroup_entry.id = results.LastInsertedID(); + return spawngroup_entry; + } + + spawngroup_entry = NewEntity(); + + return spawngroup_entry; + } + + static int InsertMany( + std::vector spawngroup_entries + ) + { + std::vector insert_chunks; + + for (auto &spawngroup_entry: spawngroup_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); + insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); + insert_values.push_back(std::to_string(spawngroup_entry.dist)); + insert_values.push_back(std::to_string(spawngroup_entry.max_x)); + insert_values.push_back(std::to_string(spawngroup_entry.min_x)); + insert_values.push_back(std::to_string(spawngroup_entry.max_y)); + insert_values.push_back(std::to_string(spawngroup_entry.min_y)); + insert_values.push_back(std::to_string(spawngroup_entry.delay)); + insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn)); + insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); + insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawngroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Spawngroup entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.spawn_limit = atoi(row[2]); + entry.dist = atof(row[3]); + entry.max_x = atof(row[4]); + entry.min_x = atof(row[5]); + entry.max_y = atof(row[6]); + entry.min_y = atof(row[7]); + entry.delay = atoi(row[8]); + entry.mindelay = atoi(row[9]); + entry.despawn = atoi(row[10]); + entry.despawn_timer = atoi(row[11]); + entry.wp_spawns = atoi(row[12]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPAWNGROUP_REPOSITORY_H diff --git a/common/repositories/base/base_spell_buckets_repository.h b/common/repositories/base/base_spell_buckets_repository.h new file mode 100644 index 000000000..1c0e9505f --- /dev/null +++ b/common/repositories/base/base_spell_buckets_repository.h @@ -0,0 +1,315 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPELL_BUCKETS_REPOSITORY_H +#define EQEMU_BASE_SPELL_BUCKETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpellBucketsRepository { +public: + struct SpellBuckets { + int spellid; + std::string key; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("spellid"); + } + + static std::vector Columns() + { + return { + "spellid", + "key", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spell_buckets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellBuckets NewEntity() + { + SpellBuckets entry{}; + + entry.spellid = 0; + entry.key = ""; + entry.value = ""; + + return entry; + } + + static SpellBuckets GetSpellBucketsEntry( + const std::vector &spell_bucketss, + int spell_buckets_id + ) + { + for (auto &spell_buckets : spell_bucketss) { + if (spell_buckets.spellid == spell_buckets_id) { + return spell_buckets; + } + } + + return NewEntity(); + } + + static SpellBuckets FindOne( + int spell_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spell_buckets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spell_buckets_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spell_buckets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellBuckets spell_buckets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spell_buckets_entry.key) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spell_buckets_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spell_buckets_entry.spellid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellBuckets InsertOne( + SpellBuckets spell_buckets_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spell_buckets_entry.id = results.LastInsertedID(); + return spell_buckets_entry; + } + + spell_buckets_entry = NewEntity(); + + return spell_buckets_entry; + } + + static int InsertMany( + std::vector spell_buckets_entries + ) + { + std::vector insert_chunks; + + for (auto &spell_buckets_entry: spell_buckets_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); + insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellBuckets entry{}; + + entry.spellid = atoi(row[0]); + entry.key = row[1] ? row[1] : ""; + entry.value = row[2] ? row[2] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPELL_BUCKETS_REPOSITORY_H diff --git a/common/repositories/base/base_spell_globals_repository.h b/common/repositories/base/base_spell_globals_repository.h new file mode 100644 index 000000000..8350ee3dc --- /dev/null +++ b/common/repositories/base/base_spell_globals_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPELL_GLOBALS_REPOSITORY_H +#define EQEMU_BASE_SPELL_GLOBALS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpellGlobalsRepository { +public: + struct SpellGlobals { + int spellid; + std::string spell_name; + std::string qglobal; + std::string value; + }; + + static std::string PrimaryKey() + { + return std::string("spellid"); + } + + static std::vector Columns() + { + return { + "spellid", + "spell_name", + "qglobal", + "value", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spell_globals"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellGlobals NewEntity() + { + SpellGlobals entry{}; + + entry.spellid = 0; + entry.spell_name = ""; + entry.qglobal = ""; + entry.value = ""; + + return entry; + } + + static SpellGlobals GetSpellGlobalsEntry( + const std::vector &spell_globalss, + int spell_globals_id + ) + { + for (auto &spell_globals : spell_globalss) { + if (spell_globals.spellid == spell_globals_id) { + return spell_globals; + } + } + + return NewEntity(); + } + + static SpellGlobals FindOne( + int spell_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spell_globals_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spell_globals_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spell_globals_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellGlobals spell_globals_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spell_globals_entry.spell_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spell_globals_entry.qglobal) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(spell_globals_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spell_globals_entry.spellid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellGlobals InsertOne( + SpellGlobals spell_globals_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spell_globals_entry.id = results.LastInsertedID(); + return spell_globals_entry; + } + + spell_globals_entry = NewEntity(); + + return spell_globals_entry; + } + + static int InsertMany( + std::vector spell_globals_entries + ) + { + std::vector insert_chunks; + + for (auto &spell_globals_entry: spell_globals_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); + insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellGlobals entry{}; + + entry.spellid = atoi(row[0]); + entry.spell_name = row[1] ? row[1] : ""; + entry.qglobal = row[2] ? row[2] : ""; + entry.value = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPELL_GLOBALS_REPOSITORY_H diff --git a/common/repositories/base/base_spells_new_repository.h b/common/repositories/base/base_spells_new_repository.h new file mode 100644 index 000000000..4fbdcea1f --- /dev/null +++ b/common/repositories/base/base_spells_new_repository.h @@ -0,0 +1,2421 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_SPELLS_NEW_REPOSITORY_H +#define EQEMU_BASE_SPELLS_NEW_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseSpellsNewRepository { +public: + struct SpellsNew { + int id; + std::string name; + std::string player_1; + std::string teleport_zone; + std::string you_cast; + std::string other_casts; + std::string cast_on_you; + std::string cast_on_other; + std::string spell_fades; + int range; + int aoerange; + int pushback; + int pushup; + int cast_time; + int recovery_time; + int recast_time; + int buffdurationformula; + int buffduration; + int AEDuration; + int mana; + int effect_base_value1; + int effect_base_value2; + int effect_base_value3; + int effect_base_value4; + int effect_base_value5; + int effect_base_value6; + int effect_base_value7; + int effect_base_value8; + int effect_base_value9; + int effect_base_value10; + int effect_base_value11; + int effect_base_value12; + int effect_limit_value1; + int effect_limit_value2; + int effect_limit_value3; + int effect_limit_value4; + int effect_limit_value5; + int effect_limit_value6; + int effect_limit_value7; + int effect_limit_value8; + int effect_limit_value9; + int effect_limit_value10; + int effect_limit_value11; + int effect_limit_value12; + int max1; + int max2; + int max3; + int max4; + int max5; + int max6; + int max7; + int max8; + int max9; + int max10; + int max11; + int max12; + int icon; + int memicon; + int components1; + int components2; + int components3; + int components4; + int component_counts1; + int component_counts2; + int component_counts3; + int component_counts4; + int NoexpendReagent1; + int NoexpendReagent2; + int NoexpendReagent3; + int NoexpendReagent4; + int formula1; + int formula2; + int formula3; + int formula4; + int formula5; + int formula6; + int formula7; + int formula8; + int formula9; + int formula10; + int formula11; + int formula12; + int LightType; + int goodEffect; + int Activated; + int resisttype; + int effectid1; + int effectid2; + int effectid3; + int effectid4; + int effectid5; + int effectid6; + int effectid7; + int effectid8; + int effectid9; + int effectid10; + int effectid11; + int effectid12; + int targettype; + int basediff; + int skill; + int zonetype; + int EnvironmentType; + int TimeOfDay; + int classes1; + int classes2; + int classes3; + int classes4; + int classes5; + int classes6; + int classes7; + int classes8; + int classes9; + int classes10; + int classes11; + int classes12; + int classes13; + int classes14; + int classes15; + int classes16; + int CastingAnim; + int TargetAnim; + int TravelType; + int SpellAffectIndex; + int disallow_sit; + int deities0; + int deities1; + int deities2; + int deities3; + int deities4; + int deities5; + int deities6; + int deities7; + int deities8; + int deities9; + int deities10; + int deities11; + int deities12; + int deities13; + int deities14; + int deities15; + int deities16; + int field142; + int field143; + int new_icon; + int spellanim; + int uninterruptable; + int ResistDiff; + int dot_stacking_exempt; + int deleteable; + int RecourseLink; + int no_partial_resist; + int field152; + int field153; + int short_buff_box; + int descnum; + int typedescnum; + int effectdescnum; + int effectdescnum2; + int npc_no_los; + int field160; + int reflectable; + int bonushate; + int field163; + int field164; + int ldon_trap; + int EndurCost; + int EndurTimerIndex; + int IsDiscipline; + int field169; + int field170; + int field171; + int field172; + int HateAdded; + int EndurUpkeep; + int numhitstype; + int numhits; + int pvpresistbase; + int pvpresistcalc; + int pvpresistcap; + int spell_category; + int field181; + int field182; + int pcnpc_only_flag; + int cast_not_standing; + int can_mgb; + int nodispell; + int npc_category; + int npc_usefulness; + int MinResist; + int MaxResist; + int viral_targets; + int viral_timer; + int nimbuseffect; + int ConeStartAngle; + int ConeStopAngle; + int sneaking; + int not_extendable; + int field198; + int field199; + int suspendable; + int viral_range; + int songcap; + int field203; + int field204; + int no_block; + int field206; + int spellgroup; + int rank; + int field209; + int field210; + int CastRestriction; + int allowrest; + int InCombat; + int OutofCombat; + int field215; + int field216; + int field217; + int aemaxtargets; + int maxtargets; + int field220; + int field221; + int field222; + int field223; + int persistdeath; + int field225; + int field226; + float min_dist; + float min_dist_mod; + float max_dist; + float max_dist_mod; + int min_range; + int field232; + int field233; + int field234; + int field235; + int field236; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "player_1", + "teleport_zone", + "you_cast", + "other_casts", + "cast_on_you", + "cast_on_other", + "spell_fades", + "range", + "aoerange", + "pushback", + "pushup", + "cast_time", + "recovery_time", + "recast_time", + "buffdurationformula", + "buffduration", + "AEDuration", + "mana", + "effect_base_value1", + "effect_base_value2", + "effect_base_value3", + "effect_base_value4", + "effect_base_value5", + "effect_base_value6", + "effect_base_value7", + "effect_base_value8", + "effect_base_value9", + "effect_base_value10", + "effect_base_value11", + "effect_base_value12", + "effect_limit_value1", + "effect_limit_value2", + "effect_limit_value3", + "effect_limit_value4", + "effect_limit_value5", + "effect_limit_value6", + "effect_limit_value7", + "effect_limit_value8", + "effect_limit_value9", + "effect_limit_value10", + "effect_limit_value11", + "effect_limit_value12", + "max1", + "max2", + "max3", + "max4", + "max5", + "max6", + "max7", + "max8", + "max9", + "max10", + "max11", + "max12", + "icon", + "memicon", + "components1", + "components2", + "components3", + "components4", + "component_counts1", + "component_counts2", + "component_counts3", + "component_counts4", + "NoexpendReagent1", + "NoexpendReagent2", + "NoexpendReagent3", + "NoexpendReagent4", + "formula1", + "formula2", + "formula3", + "formula4", + "formula5", + "formula6", + "formula7", + "formula8", + "formula9", + "formula10", + "formula11", + "formula12", + "LightType", + "goodEffect", + "Activated", + "resisttype", + "effectid1", + "effectid2", + "effectid3", + "effectid4", + "effectid5", + "effectid6", + "effectid7", + "effectid8", + "effectid9", + "effectid10", + "effectid11", + "effectid12", + "targettype", + "basediff", + "skill", + "zonetype", + "EnvironmentType", + "TimeOfDay", + "classes1", + "classes2", + "classes3", + "classes4", + "classes5", + "classes6", + "classes7", + "classes8", + "classes9", + "classes10", + "classes11", + "classes12", + "classes13", + "classes14", + "classes15", + "classes16", + "CastingAnim", + "TargetAnim", + "TravelType", + "SpellAffectIndex", + "disallow_sit", + "deities0", + "deities1", + "deities2", + "deities3", + "deities4", + "deities5", + "deities6", + "deities7", + "deities8", + "deities9", + "deities10", + "deities11", + "deities12", + "deities13", + "deities14", + "deities15", + "deities16", + "field142", + "field143", + "new_icon", + "spellanim", + "uninterruptable", + "ResistDiff", + "dot_stacking_exempt", + "deleteable", + "RecourseLink", + "no_partial_resist", + "field152", + "field153", + "short_buff_box", + "descnum", + "typedescnum", + "effectdescnum", + "effectdescnum2", + "npc_no_los", + "field160", + "reflectable", + "bonushate", + "field163", + "field164", + "ldon_trap", + "EndurCost", + "EndurTimerIndex", + "IsDiscipline", + "field169", + "field170", + "field171", + "field172", + "HateAdded", + "EndurUpkeep", + "numhitstype", + "numhits", + "pvpresistbase", + "pvpresistcalc", + "pvpresistcap", + "spell_category", + "field181", + "field182", + "pcnpc_only_flag", + "cast_not_standing", + "can_mgb", + "nodispell", + "npc_category", + "npc_usefulness", + "MinResist", + "MaxResist", + "viral_targets", + "viral_timer", + "nimbuseffect", + "ConeStartAngle", + "ConeStopAngle", + "sneaking", + "not_extendable", + "field198", + "field199", + "suspendable", + "viral_range", + "songcap", + "field203", + "field204", + "no_block", + "field206", + "spellgroup", + "rank", + "field209", + "field210", + "CastRestriction", + "allowrest", + "InCombat", + "OutofCombat", + "field215", + "field216", + "field217", + "aemaxtargets", + "maxtargets", + "field220", + "field221", + "field222", + "field223", + "persistdeath", + "field225", + "field226", + "min_dist", + "min_dist_mod", + "max_dist", + "max_dist_mod", + "min_range", + "field232", + "field233", + "field234", + "field235", + "field236", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("spells_new"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static SpellsNew NewEntity() + { + SpellsNew entry{}; + + entry.id = 0; + entry.name = ""; + entry.player_1 = "BLUE_TRAIL"; + entry.teleport_zone = ""; + entry.you_cast = ""; + entry.other_casts = ""; + entry.cast_on_you = ""; + entry.cast_on_other = ""; + entry.spell_fades = ""; + entry.range = 100; + entry.aoerange = 0; + entry.pushback = 0; + entry.pushup = 0; + entry.cast_time = 0; + entry.recovery_time = 0; + entry.recast_time = 0; + entry.buffdurationformula = 7; + entry.buffduration = 65; + entry.AEDuration = 0; + entry.mana = 0; + entry.effect_base_value1 = 100; + entry.effect_base_value2 = 0; + entry.effect_base_value3 = 0; + entry.effect_base_value4 = 0; + entry.effect_base_value5 = 0; + entry.effect_base_value6 = 0; + entry.effect_base_value7 = 0; + entry.effect_base_value8 = 0; + entry.effect_base_value9 = 0; + entry.effect_base_value10 = 0; + entry.effect_base_value11 = 0; + entry.effect_base_value12 = 0; + entry.effect_limit_value1 = 0; + entry.effect_limit_value2 = 0; + entry.effect_limit_value3 = 0; + entry.effect_limit_value4 = 0; + entry.effect_limit_value5 = 0; + entry.effect_limit_value6 = 0; + entry.effect_limit_value7 = 0; + entry.effect_limit_value8 = 0; + entry.effect_limit_value9 = 0; + entry.effect_limit_value10 = 0; + entry.effect_limit_value11 = 0; + entry.effect_limit_value12 = 0; + entry.max1 = 0; + entry.max2 = 0; + entry.max3 = 0; + entry.max4 = 0; + entry.max5 = 0; + entry.max6 = 0; + entry.max7 = 0; + entry.max8 = 0; + entry.max9 = 0; + entry.max10 = 0; + entry.max11 = 0; + entry.max12 = 0; + entry.icon = 0; + entry.memicon = 0; + entry.components1 = -1; + entry.components2 = -1; + entry.components3 = -1; + entry.components4 = -1; + entry.component_counts1 = 1; + entry.component_counts2 = 1; + entry.component_counts3 = 1; + entry.component_counts4 = 1; + entry.NoexpendReagent1 = -1; + entry.NoexpendReagent2 = -1; + entry.NoexpendReagent3 = -1; + entry.NoexpendReagent4 = -1; + entry.formula1 = 100; + entry.formula2 = 100; + entry.formula3 = 100; + entry.formula4 = 100; + entry.formula5 = 100; + entry.formula6 = 100; + entry.formula7 = 100; + entry.formula8 = 100; + entry.formula9 = 100; + entry.formula10 = 100; + entry.formula11 = 100; + entry.formula12 = 100; + entry.LightType = 0; + entry.goodEffect = 0; + entry.Activated = 0; + entry.resisttype = 0; + entry.effectid1 = 254; + entry.effectid2 = 254; + entry.effectid3 = 254; + entry.effectid4 = 254; + entry.effectid5 = 254; + entry.effectid6 = 254; + entry.effectid7 = 254; + entry.effectid8 = 254; + entry.effectid9 = 254; + entry.effectid10 = 254; + entry.effectid11 = 254; + entry.effectid12 = 254; + entry.targettype = 2; + entry.basediff = 0; + entry.skill = 98; + entry.zonetype = -1; + entry.EnvironmentType = 0; + entry.TimeOfDay = 0; + entry.classes1 = 255; + entry.classes2 = 255; + entry.classes3 = 255; + entry.classes4 = 255; + entry.classes5 = 255; + entry.classes6 = 255; + entry.classes7 = 255; + entry.classes8 = 255; + entry.classes9 = 255; + entry.classes10 = 255; + entry.classes11 = 255; + entry.classes12 = 255; + entry.classes13 = 255; + entry.classes14 = 255; + entry.classes15 = 255; + entry.classes16 = 255; + entry.CastingAnim = 44; + entry.TargetAnim = 13; + entry.TravelType = 0; + entry.SpellAffectIndex = -1; + entry.disallow_sit = 0; + entry.deities0 = 0; + entry.deities1 = 0; + entry.deities2 = 0; + entry.deities3 = 0; + entry.deities4 = 0; + entry.deities5 = 0; + entry.deities6 = 0; + entry.deities7 = 0; + entry.deities8 = 0; + entry.deities9 = 0; + entry.deities10 = 0; + entry.deities11 = 0; + entry.deities12 = 0; + entry.deities13 = 0; + entry.deities14 = 0; + entry.deities15 = 0; + entry.deities16 = 0; + entry.field142 = 100; + entry.field143 = 0; + entry.new_icon = 161; + entry.spellanim = 0; + entry.uninterruptable = 0; + entry.ResistDiff = -150; + entry.dot_stacking_exempt = 0; + entry.deleteable = 0; + entry.RecourseLink = 0; + entry.no_partial_resist = 0; + entry.field152 = 0; + entry.field153 = 0; + entry.short_buff_box = -1; + entry.descnum = 0; + entry.typedescnum = 0; + entry.effectdescnum = 0; + entry.effectdescnum2 = 0; + entry.npc_no_los = 0; + entry.field160 = 0; + entry.reflectable = 0; + entry.bonushate = 0; + entry.field163 = 100; + entry.field164 = -150; + entry.ldon_trap = 0; + entry.EndurCost = 0; + entry.EndurTimerIndex = 0; + entry.IsDiscipline = 0; + entry.field169 = 0; + entry.field170 = 0; + entry.field171 = 0; + entry.field172 = 0; + entry.HateAdded = 0; + entry.EndurUpkeep = 0; + entry.numhitstype = 0; + entry.numhits = 0; + entry.pvpresistbase = -150; + entry.pvpresistcalc = 100; + entry.pvpresistcap = -150; + entry.spell_category = -99; + entry.field181 = 7; + entry.field182 = 65; + entry.pcnpc_only_flag = 0; + entry.cast_not_standing = 0; + entry.can_mgb = 0; + entry.nodispell = -1; + entry.npc_category = 0; + entry.npc_usefulness = 0; + entry.MinResist = 0; + entry.MaxResist = 0; + entry.viral_targets = 0; + entry.viral_timer = 0; + entry.nimbuseffect = 0; + entry.ConeStartAngle = 0; + entry.ConeStopAngle = 0; + entry.sneaking = 0; + entry.not_extendable = 0; + entry.field198 = 0; + entry.field199 = 1; + entry.suspendable = 0; + entry.viral_range = 0; + entry.songcap = 0; + entry.field203 = 0; + entry.field204 = 0; + entry.no_block = 0; + entry.field206 = -1; + entry.spellgroup = 0; + entry.rank = 0; + entry.field209 = 0; + entry.field210 = 1; + entry.CastRestriction = 0; + entry.allowrest = 0; + entry.InCombat = 0; + entry.OutofCombat = 0; + entry.field215 = 0; + entry.field216 = 0; + entry.field217 = 0; + entry.aemaxtargets = 0; + entry.maxtargets = 0; + entry.field220 = 0; + entry.field221 = 0; + entry.field222 = 0; + entry.field223 = 0; + entry.persistdeath = 0; + entry.field225 = 0; + entry.field226 = 0; + entry.min_dist = 0; + entry.min_dist_mod = 0; + entry.max_dist = 0; + entry.max_dist_mod = 0; + entry.min_range = 0; + entry.field232 = 0; + entry.field233 = 0; + entry.field234 = 0; + entry.field235 = 0; + entry.field236 = 0; + + return entry; + } + + static SpellsNew GetSpellsNewEntry( + const std::vector &spells_news, + int spells_new_id + ) + { + for (auto &spells_new : spells_news) { + if (spells_new.id == spells_new_id) { + return spells_new; + } + } + + return NewEntity(); + } + + static SpellsNew FindOne( + int spells_new_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + spells_new_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int spells_new_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + spells_new_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + SpellsNew spells_new_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(spells_new_entry.name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(spells_new_entry.player_1) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(spells_new_entry.teleport_zone) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(spells_new_entry.you_cast) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(spells_new_entry.other_casts) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(spells_new_entry.cast_on_you) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(spells_new_entry.cast_on_other) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(spells_new_entry.spell_fades) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(spells_new_entry.range)); + update_values.push_back(columns[10] + " = " + std::to_string(spells_new_entry.aoerange)); + update_values.push_back(columns[11] + " = " + std::to_string(spells_new_entry.pushback)); + update_values.push_back(columns[12] + " = " + std::to_string(spells_new_entry.pushup)); + update_values.push_back(columns[13] + " = " + std::to_string(spells_new_entry.cast_time)); + update_values.push_back(columns[14] + " = " + std::to_string(spells_new_entry.recovery_time)); + update_values.push_back(columns[15] + " = " + std::to_string(spells_new_entry.recast_time)); + update_values.push_back(columns[16] + " = " + std::to_string(spells_new_entry.buffdurationformula)); + update_values.push_back(columns[17] + " = " + std::to_string(spells_new_entry.buffduration)); + update_values.push_back(columns[18] + " = " + std::to_string(spells_new_entry.AEDuration)); + update_values.push_back(columns[19] + " = " + std::to_string(spells_new_entry.mana)); + update_values.push_back(columns[20] + " = " + std::to_string(spells_new_entry.effect_base_value1)); + update_values.push_back(columns[21] + " = " + std::to_string(spells_new_entry.effect_base_value2)); + update_values.push_back(columns[22] + " = " + std::to_string(spells_new_entry.effect_base_value3)); + update_values.push_back(columns[23] + " = " + std::to_string(spells_new_entry.effect_base_value4)); + update_values.push_back(columns[24] + " = " + std::to_string(spells_new_entry.effect_base_value5)); + update_values.push_back(columns[25] + " = " + std::to_string(spells_new_entry.effect_base_value6)); + update_values.push_back(columns[26] + " = " + std::to_string(spells_new_entry.effect_base_value7)); + update_values.push_back(columns[27] + " = " + std::to_string(spells_new_entry.effect_base_value8)); + update_values.push_back(columns[28] + " = " + std::to_string(spells_new_entry.effect_base_value9)); + update_values.push_back(columns[29] + " = " + std::to_string(spells_new_entry.effect_base_value10)); + update_values.push_back(columns[30] + " = " + std::to_string(spells_new_entry.effect_base_value11)); + update_values.push_back(columns[31] + " = " + std::to_string(spells_new_entry.effect_base_value12)); + update_values.push_back(columns[32] + " = " + std::to_string(spells_new_entry.effect_limit_value1)); + update_values.push_back(columns[33] + " = " + std::to_string(spells_new_entry.effect_limit_value2)); + update_values.push_back(columns[34] + " = " + std::to_string(spells_new_entry.effect_limit_value3)); + update_values.push_back(columns[35] + " = " + std::to_string(spells_new_entry.effect_limit_value4)); + update_values.push_back(columns[36] + " = " + std::to_string(spells_new_entry.effect_limit_value5)); + update_values.push_back(columns[37] + " = " + std::to_string(spells_new_entry.effect_limit_value6)); + update_values.push_back(columns[38] + " = " + std::to_string(spells_new_entry.effect_limit_value7)); + update_values.push_back(columns[39] + " = " + std::to_string(spells_new_entry.effect_limit_value8)); + update_values.push_back(columns[40] + " = " + std::to_string(spells_new_entry.effect_limit_value9)); + update_values.push_back(columns[41] + " = " + std::to_string(spells_new_entry.effect_limit_value10)); + update_values.push_back(columns[42] + " = " + std::to_string(spells_new_entry.effect_limit_value11)); + update_values.push_back(columns[43] + " = " + std::to_string(spells_new_entry.effect_limit_value12)); + update_values.push_back(columns[44] + " = " + std::to_string(spells_new_entry.max1)); + update_values.push_back(columns[45] + " = " + std::to_string(spells_new_entry.max2)); + update_values.push_back(columns[46] + " = " + std::to_string(spells_new_entry.max3)); + update_values.push_back(columns[47] + " = " + std::to_string(spells_new_entry.max4)); + update_values.push_back(columns[48] + " = " + std::to_string(spells_new_entry.max5)); + update_values.push_back(columns[49] + " = " + std::to_string(spells_new_entry.max6)); + update_values.push_back(columns[50] + " = " + std::to_string(spells_new_entry.max7)); + update_values.push_back(columns[51] + " = " + std::to_string(spells_new_entry.max8)); + update_values.push_back(columns[52] + " = " + std::to_string(spells_new_entry.max9)); + update_values.push_back(columns[53] + " = " + std::to_string(spells_new_entry.max10)); + update_values.push_back(columns[54] + " = " + std::to_string(spells_new_entry.max11)); + update_values.push_back(columns[55] + " = " + std::to_string(spells_new_entry.max12)); + update_values.push_back(columns[56] + " = " + std::to_string(spells_new_entry.icon)); + update_values.push_back(columns[57] + " = " + std::to_string(spells_new_entry.memicon)); + update_values.push_back(columns[58] + " = " + std::to_string(spells_new_entry.components1)); + update_values.push_back(columns[59] + " = " + std::to_string(spells_new_entry.components2)); + update_values.push_back(columns[60] + " = " + std::to_string(spells_new_entry.components3)); + update_values.push_back(columns[61] + " = " + std::to_string(spells_new_entry.components4)); + update_values.push_back(columns[62] + " = " + std::to_string(spells_new_entry.component_counts1)); + update_values.push_back(columns[63] + " = " + std::to_string(spells_new_entry.component_counts2)); + update_values.push_back(columns[64] + " = " + std::to_string(spells_new_entry.component_counts3)); + update_values.push_back(columns[65] + " = " + std::to_string(spells_new_entry.component_counts4)); + update_values.push_back(columns[66] + " = " + std::to_string(spells_new_entry.NoexpendReagent1)); + update_values.push_back(columns[67] + " = " + std::to_string(spells_new_entry.NoexpendReagent2)); + update_values.push_back(columns[68] + " = " + std::to_string(spells_new_entry.NoexpendReagent3)); + update_values.push_back(columns[69] + " = " + std::to_string(spells_new_entry.NoexpendReagent4)); + update_values.push_back(columns[70] + " = " + std::to_string(spells_new_entry.formula1)); + update_values.push_back(columns[71] + " = " + std::to_string(spells_new_entry.formula2)); + update_values.push_back(columns[72] + " = " + std::to_string(spells_new_entry.formula3)); + update_values.push_back(columns[73] + " = " + std::to_string(spells_new_entry.formula4)); + update_values.push_back(columns[74] + " = " + std::to_string(spells_new_entry.formula5)); + update_values.push_back(columns[75] + " = " + std::to_string(spells_new_entry.formula6)); + update_values.push_back(columns[76] + " = " + std::to_string(spells_new_entry.formula7)); + update_values.push_back(columns[77] + " = " + std::to_string(spells_new_entry.formula8)); + update_values.push_back(columns[78] + " = " + std::to_string(spells_new_entry.formula9)); + update_values.push_back(columns[79] + " = " + std::to_string(spells_new_entry.formula10)); + update_values.push_back(columns[80] + " = " + std::to_string(spells_new_entry.formula11)); + update_values.push_back(columns[81] + " = " + std::to_string(spells_new_entry.formula12)); + update_values.push_back(columns[82] + " = " + std::to_string(spells_new_entry.LightType)); + update_values.push_back(columns[83] + " = " + std::to_string(spells_new_entry.goodEffect)); + update_values.push_back(columns[84] + " = " + std::to_string(spells_new_entry.Activated)); + update_values.push_back(columns[85] + " = " + std::to_string(spells_new_entry.resisttype)); + update_values.push_back(columns[86] + " = " + std::to_string(spells_new_entry.effectid1)); + update_values.push_back(columns[87] + " = " + std::to_string(spells_new_entry.effectid2)); + update_values.push_back(columns[88] + " = " + std::to_string(spells_new_entry.effectid3)); + update_values.push_back(columns[89] + " = " + std::to_string(spells_new_entry.effectid4)); + update_values.push_back(columns[90] + " = " + std::to_string(spells_new_entry.effectid5)); + update_values.push_back(columns[91] + " = " + std::to_string(spells_new_entry.effectid6)); + update_values.push_back(columns[92] + " = " + std::to_string(spells_new_entry.effectid7)); + update_values.push_back(columns[93] + " = " + std::to_string(spells_new_entry.effectid8)); + update_values.push_back(columns[94] + " = " + std::to_string(spells_new_entry.effectid9)); + update_values.push_back(columns[95] + " = " + std::to_string(spells_new_entry.effectid10)); + update_values.push_back(columns[96] + " = " + std::to_string(spells_new_entry.effectid11)); + update_values.push_back(columns[97] + " = " + std::to_string(spells_new_entry.effectid12)); + update_values.push_back(columns[98] + " = " + std::to_string(spells_new_entry.targettype)); + update_values.push_back(columns[99] + " = " + std::to_string(spells_new_entry.basediff)); + update_values.push_back(columns[100] + " = " + std::to_string(spells_new_entry.skill)); + update_values.push_back(columns[101] + " = " + std::to_string(spells_new_entry.zonetype)); + update_values.push_back(columns[102] + " = " + std::to_string(spells_new_entry.EnvironmentType)); + update_values.push_back(columns[103] + " = " + std::to_string(spells_new_entry.TimeOfDay)); + update_values.push_back(columns[104] + " = " + std::to_string(spells_new_entry.classes1)); + update_values.push_back(columns[105] + " = " + std::to_string(spells_new_entry.classes2)); + update_values.push_back(columns[106] + " = " + std::to_string(spells_new_entry.classes3)); + update_values.push_back(columns[107] + " = " + std::to_string(spells_new_entry.classes4)); + update_values.push_back(columns[108] + " = " + std::to_string(spells_new_entry.classes5)); + update_values.push_back(columns[109] + " = " + std::to_string(spells_new_entry.classes6)); + update_values.push_back(columns[110] + " = " + std::to_string(spells_new_entry.classes7)); + update_values.push_back(columns[111] + " = " + std::to_string(spells_new_entry.classes8)); + update_values.push_back(columns[112] + " = " + std::to_string(spells_new_entry.classes9)); + update_values.push_back(columns[113] + " = " + std::to_string(spells_new_entry.classes10)); + update_values.push_back(columns[114] + " = " + std::to_string(spells_new_entry.classes11)); + update_values.push_back(columns[115] + " = " + std::to_string(spells_new_entry.classes12)); + update_values.push_back(columns[116] + " = " + std::to_string(spells_new_entry.classes13)); + update_values.push_back(columns[117] + " = " + std::to_string(spells_new_entry.classes14)); + update_values.push_back(columns[118] + " = " + std::to_string(spells_new_entry.classes15)); + update_values.push_back(columns[119] + " = " + std::to_string(spells_new_entry.classes16)); + update_values.push_back(columns[120] + " = " + std::to_string(spells_new_entry.CastingAnim)); + update_values.push_back(columns[121] + " = " + std::to_string(spells_new_entry.TargetAnim)); + update_values.push_back(columns[122] + " = " + std::to_string(spells_new_entry.TravelType)); + update_values.push_back(columns[123] + " = " + std::to_string(spells_new_entry.SpellAffectIndex)); + update_values.push_back(columns[124] + " = " + std::to_string(spells_new_entry.disallow_sit)); + update_values.push_back(columns[125] + " = " + std::to_string(spells_new_entry.deities0)); + update_values.push_back(columns[126] + " = " + std::to_string(spells_new_entry.deities1)); + update_values.push_back(columns[127] + " = " + std::to_string(spells_new_entry.deities2)); + update_values.push_back(columns[128] + " = " + std::to_string(spells_new_entry.deities3)); + update_values.push_back(columns[129] + " = " + std::to_string(spells_new_entry.deities4)); + update_values.push_back(columns[130] + " = " + std::to_string(spells_new_entry.deities5)); + update_values.push_back(columns[131] + " = " + std::to_string(spells_new_entry.deities6)); + update_values.push_back(columns[132] + " = " + std::to_string(spells_new_entry.deities7)); + update_values.push_back(columns[133] + " = " + std::to_string(spells_new_entry.deities8)); + update_values.push_back(columns[134] + " = " + std::to_string(spells_new_entry.deities9)); + update_values.push_back(columns[135] + " = " + std::to_string(spells_new_entry.deities10)); + update_values.push_back(columns[136] + " = " + std::to_string(spells_new_entry.deities11)); + update_values.push_back(columns[137] + " = " + std::to_string(spells_new_entry.deities12)); + update_values.push_back(columns[138] + " = " + std::to_string(spells_new_entry.deities13)); + update_values.push_back(columns[139] + " = " + std::to_string(spells_new_entry.deities14)); + update_values.push_back(columns[140] + " = " + std::to_string(spells_new_entry.deities15)); + update_values.push_back(columns[141] + " = " + std::to_string(spells_new_entry.deities16)); + update_values.push_back(columns[142] + " = " + std::to_string(spells_new_entry.field142)); + update_values.push_back(columns[143] + " = " + std::to_string(spells_new_entry.field143)); + update_values.push_back(columns[144] + " = " + std::to_string(spells_new_entry.new_icon)); + update_values.push_back(columns[145] + " = " + std::to_string(spells_new_entry.spellanim)); + update_values.push_back(columns[146] + " = " + std::to_string(spells_new_entry.uninterruptable)); + update_values.push_back(columns[147] + " = " + std::to_string(spells_new_entry.ResistDiff)); + update_values.push_back(columns[148] + " = " + std::to_string(spells_new_entry.dot_stacking_exempt)); + update_values.push_back(columns[149] + " = " + std::to_string(spells_new_entry.deleteable)); + update_values.push_back(columns[150] + " = " + std::to_string(spells_new_entry.RecourseLink)); + update_values.push_back(columns[151] + " = " + std::to_string(spells_new_entry.no_partial_resist)); + update_values.push_back(columns[152] + " = " + std::to_string(spells_new_entry.field152)); + update_values.push_back(columns[153] + " = " + std::to_string(spells_new_entry.field153)); + update_values.push_back(columns[154] + " = " + std::to_string(spells_new_entry.short_buff_box)); + update_values.push_back(columns[155] + " = " + std::to_string(spells_new_entry.descnum)); + update_values.push_back(columns[156] + " = " + std::to_string(spells_new_entry.typedescnum)); + update_values.push_back(columns[157] + " = " + std::to_string(spells_new_entry.effectdescnum)); + update_values.push_back(columns[158] + " = " + std::to_string(spells_new_entry.effectdescnum2)); + update_values.push_back(columns[159] + " = " + std::to_string(spells_new_entry.npc_no_los)); + update_values.push_back(columns[160] + " = " + std::to_string(spells_new_entry.field160)); + update_values.push_back(columns[161] + " = " + std::to_string(spells_new_entry.reflectable)); + update_values.push_back(columns[162] + " = " + std::to_string(spells_new_entry.bonushate)); + update_values.push_back(columns[163] + " = " + std::to_string(spells_new_entry.field163)); + update_values.push_back(columns[164] + " = " + std::to_string(spells_new_entry.field164)); + update_values.push_back(columns[165] + " = " + std::to_string(spells_new_entry.ldon_trap)); + update_values.push_back(columns[166] + " = " + std::to_string(spells_new_entry.EndurCost)); + update_values.push_back(columns[167] + " = " + std::to_string(spells_new_entry.EndurTimerIndex)); + update_values.push_back(columns[168] + " = " + std::to_string(spells_new_entry.IsDiscipline)); + update_values.push_back(columns[169] + " = " + std::to_string(spells_new_entry.field169)); + update_values.push_back(columns[170] + " = " + std::to_string(spells_new_entry.field170)); + update_values.push_back(columns[171] + " = " + std::to_string(spells_new_entry.field171)); + update_values.push_back(columns[172] + " = " + std::to_string(spells_new_entry.field172)); + update_values.push_back(columns[173] + " = " + std::to_string(spells_new_entry.HateAdded)); + update_values.push_back(columns[174] + " = " + std::to_string(spells_new_entry.EndurUpkeep)); + update_values.push_back(columns[175] + " = " + std::to_string(spells_new_entry.numhitstype)); + update_values.push_back(columns[176] + " = " + std::to_string(spells_new_entry.numhits)); + update_values.push_back(columns[177] + " = " + std::to_string(spells_new_entry.pvpresistbase)); + update_values.push_back(columns[178] + " = " + std::to_string(spells_new_entry.pvpresistcalc)); + update_values.push_back(columns[179] + " = " + std::to_string(spells_new_entry.pvpresistcap)); + update_values.push_back(columns[180] + " = " + std::to_string(spells_new_entry.spell_category)); + update_values.push_back(columns[181] + " = " + std::to_string(spells_new_entry.field181)); + update_values.push_back(columns[182] + " = " + std::to_string(spells_new_entry.field182)); + update_values.push_back(columns[183] + " = " + std::to_string(spells_new_entry.pcnpc_only_flag)); + update_values.push_back(columns[184] + " = " + std::to_string(spells_new_entry.cast_not_standing)); + update_values.push_back(columns[185] + " = " + std::to_string(spells_new_entry.can_mgb)); + update_values.push_back(columns[186] + " = " + std::to_string(spells_new_entry.nodispell)); + update_values.push_back(columns[187] + " = " + std::to_string(spells_new_entry.npc_category)); + update_values.push_back(columns[188] + " = " + std::to_string(spells_new_entry.npc_usefulness)); + update_values.push_back(columns[189] + " = " + std::to_string(spells_new_entry.MinResist)); + update_values.push_back(columns[190] + " = " + std::to_string(spells_new_entry.MaxResist)); + update_values.push_back(columns[191] + " = " + std::to_string(spells_new_entry.viral_targets)); + update_values.push_back(columns[192] + " = " + std::to_string(spells_new_entry.viral_timer)); + update_values.push_back(columns[193] + " = " + std::to_string(spells_new_entry.nimbuseffect)); + update_values.push_back(columns[194] + " = " + std::to_string(spells_new_entry.ConeStartAngle)); + update_values.push_back(columns[195] + " = " + std::to_string(spells_new_entry.ConeStopAngle)); + update_values.push_back(columns[196] + " = " + std::to_string(spells_new_entry.sneaking)); + update_values.push_back(columns[197] + " = " + std::to_string(spells_new_entry.not_extendable)); + update_values.push_back(columns[198] + " = " + std::to_string(spells_new_entry.field198)); + update_values.push_back(columns[199] + " = " + std::to_string(spells_new_entry.field199)); + update_values.push_back(columns[200] + " = " + std::to_string(spells_new_entry.suspendable)); + update_values.push_back(columns[201] + " = " + std::to_string(spells_new_entry.viral_range)); + update_values.push_back(columns[202] + " = " + std::to_string(spells_new_entry.songcap)); + update_values.push_back(columns[203] + " = " + std::to_string(spells_new_entry.field203)); + update_values.push_back(columns[204] + " = " + std::to_string(spells_new_entry.field204)); + update_values.push_back(columns[205] + " = " + std::to_string(spells_new_entry.no_block)); + update_values.push_back(columns[206] + " = " + std::to_string(spells_new_entry.field206)); + update_values.push_back(columns[207] + " = " + std::to_string(spells_new_entry.spellgroup)); + update_values.push_back(columns[208] + " = " + std::to_string(spells_new_entry.rank)); + update_values.push_back(columns[209] + " = " + std::to_string(spells_new_entry.field209)); + update_values.push_back(columns[210] + " = " + std::to_string(spells_new_entry.field210)); + update_values.push_back(columns[211] + " = " + std::to_string(spells_new_entry.CastRestriction)); + update_values.push_back(columns[212] + " = " + std::to_string(spells_new_entry.allowrest)); + update_values.push_back(columns[213] + " = " + std::to_string(spells_new_entry.InCombat)); + update_values.push_back(columns[214] + " = " + std::to_string(spells_new_entry.OutofCombat)); + update_values.push_back(columns[215] + " = " + std::to_string(spells_new_entry.field215)); + update_values.push_back(columns[216] + " = " + std::to_string(spells_new_entry.field216)); + update_values.push_back(columns[217] + " = " + std::to_string(spells_new_entry.field217)); + update_values.push_back(columns[218] + " = " + std::to_string(spells_new_entry.aemaxtargets)); + update_values.push_back(columns[219] + " = " + std::to_string(spells_new_entry.maxtargets)); + update_values.push_back(columns[220] + " = " + std::to_string(spells_new_entry.field220)); + update_values.push_back(columns[221] + " = " + std::to_string(spells_new_entry.field221)); + update_values.push_back(columns[222] + " = " + std::to_string(spells_new_entry.field222)); + update_values.push_back(columns[223] + " = " + std::to_string(spells_new_entry.field223)); + update_values.push_back(columns[224] + " = " + std::to_string(spells_new_entry.persistdeath)); + update_values.push_back(columns[225] + " = " + std::to_string(spells_new_entry.field225)); + update_values.push_back(columns[226] + " = " + std::to_string(spells_new_entry.field226)); + update_values.push_back(columns[227] + " = " + std::to_string(spells_new_entry.min_dist)); + update_values.push_back(columns[228] + " = " + std::to_string(spells_new_entry.min_dist_mod)); + update_values.push_back(columns[229] + " = " + std::to_string(spells_new_entry.max_dist)); + update_values.push_back(columns[230] + " = " + std::to_string(spells_new_entry.max_dist_mod)); + update_values.push_back(columns[231] + " = " + std::to_string(spells_new_entry.min_range)); + update_values.push_back(columns[232] + " = " + std::to_string(spells_new_entry.field232)); + update_values.push_back(columns[233] + " = " + std::to_string(spells_new_entry.field233)); + update_values.push_back(columns[234] + " = " + std::to_string(spells_new_entry.field234)); + update_values.push_back(columns[235] + " = " + std::to_string(spells_new_entry.field235)); + update_values.push_back(columns[236] + " = " + std::to_string(spells_new_entry.field236)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + spells_new_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static SpellsNew InsertOne( + SpellsNew spells_new_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.range)); + insert_values.push_back(std::to_string(spells_new_entry.aoerange)); + insert_values.push_back(std::to_string(spells_new_entry.pushback)); + insert_values.push_back(std::to_string(spells_new_entry.pushup)); + insert_values.push_back(std::to_string(spells_new_entry.cast_time)); + insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); + insert_values.push_back(std::to_string(spells_new_entry.recast_time)); + insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); + insert_values.push_back(std::to_string(spells_new_entry.buffduration)); + insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); + insert_values.push_back(std::to_string(spells_new_entry.mana)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); + insert_values.push_back(std::to_string(spells_new_entry.max1)); + insert_values.push_back(std::to_string(spells_new_entry.max2)); + insert_values.push_back(std::to_string(spells_new_entry.max3)); + insert_values.push_back(std::to_string(spells_new_entry.max4)); + insert_values.push_back(std::to_string(spells_new_entry.max5)); + insert_values.push_back(std::to_string(spells_new_entry.max6)); + insert_values.push_back(std::to_string(spells_new_entry.max7)); + insert_values.push_back(std::to_string(spells_new_entry.max8)); + insert_values.push_back(std::to_string(spells_new_entry.max9)); + insert_values.push_back(std::to_string(spells_new_entry.max10)); + insert_values.push_back(std::to_string(spells_new_entry.max11)); + insert_values.push_back(std::to_string(spells_new_entry.max12)); + insert_values.push_back(std::to_string(spells_new_entry.icon)); + insert_values.push_back(std::to_string(spells_new_entry.memicon)); + insert_values.push_back(std::to_string(spells_new_entry.components1)); + insert_values.push_back(std::to_string(spells_new_entry.components2)); + insert_values.push_back(std::to_string(spells_new_entry.components3)); + insert_values.push_back(std::to_string(spells_new_entry.components4)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); + insert_values.push_back(std::to_string(spells_new_entry.formula1)); + insert_values.push_back(std::to_string(spells_new_entry.formula2)); + insert_values.push_back(std::to_string(spells_new_entry.formula3)); + insert_values.push_back(std::to_string(spells_new_entry.formula4)); + insert_values.push_back(std::to_string(spells_new_entry.formula5)); + insert_values.push_back(std::to_string(spells_new_entry.formula6)); + insert_values.push_back(std::to_string(spells_new_entry.formula7)); + insert_values.push_back(std::to_string(spells_new_entry.formula8)); + insert_values.push_back(std::to_string(spells_new_entry.formula9)); + insert_values.push_back(std::to_string(spells_new_entry.formula10)); + insert_values.push_back(std::to_string(spells_new_entry.formula11)); + insert_values.push_back(std::to_string(spells_new_entry.formula12)); + insert_values.push_back(std::to_string(spells_new_entry.LightType)); + insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); + insert_values.push_back(std::to_string(spells_new_entry.Activated)); + insert_values.push_back(std::to_string(spells_new_entry.resisttype)); + insert_values.push_back(std::to_string(spells_new_entry.effectid1)); + insert_values.push_back(std::to_string(spells_new_entry.effectid2)); + insert_values.push_back(std::to_string(spells_new_entry.effectid3)); + insert_values.push_back(std::to_string(spells_new_entry.effectid4)); + insert_values.push_back(std::to_string(spells_new_entry.effectid5)); + insert_values.push_back(std::to_string(spells_new_entry.effectid6)); + insert_values.push_back(std::to_string(spells_new_entry.effectid7)); + insert_values.push_back(std::to_string(spells_new_entry.effectid8)); + insert_values.push_back(std::to_string(spells_new_entry.effectid9)); + insert_values.push_back(std::to_string(spells_new_entry.effectid10)); + insert_values.push_back(std::to_string(spells_new_entry.effectid11)); + insert_values.push_back(std::to_string(spells_new_entry.effectid12)); + insert_values.push_back(std::to_string(spells_new_entry.targettype)); + insert_values.push_back(std::to_string(spells_new_entry.basediff)); + insert_values.push_back(std::to_string(spells_new_entry.skill)); + insert_values.push_back(std::to_string(spells_new_entry.zonetype)); + insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); + insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); + insert_values.push_back(std::to_string(spells_new_entry.classes1)); + insert_values.push_back(std::to_string(spells_new_entry.classes2)); + insert_values.push_back(std::to_string(spells_new_entry.classes3)); + insert_values.push_back(std::to_string(spells_new_entry.classes4)); + insert_values.push_back(std::to_string(spells_new_entry.classes5)); + insert_values.push_back(std::to_string(spells_new_entry.classes6)); + insert_values.push_back(std::to_string(spells_new_entry.classes7)); + insert_values.push_back(std::to_string(spells_new_entry.classes8)); + insert_values.push_back(std::to_string(spells_new_entry.classes9)); + insert_values.push_back(std::to_string(spells_new_entry.classes10)); + insert_values.push_back(std::to_string(spells_new_entry.classes11)); + insert_values.push_back(std::to_string(spells_new_entry.classes12)); + insert_values.push_back(std::to_string(spells_new_entry.classes13)); + insert_values.push_back(std::to_string(spells_new_entry.classes14)); + insert_values.push_back(std::to_string(spells_new_entry.classes15)); + insert_values.push_back(std::to_string(spells_new_entry.classes16)); + insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TravelType)); + insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); + insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); + insert_values.push_back(std::to_string(spells_new_entry.deities0)); + insert_values.push_back(std::to_string(spells_new_entry.deities1)); + insert_values.push_back(std::to_string(spells_new_entry.deities2)); + insert_values.push_back(std::to_string(spells_new_entry.deities3)); + insert_values.push_back(std::to_string(spells_new_entry.deities4)); + insert_values.push_back(std::to_string(spells_new_entry.deities5)); + insert_values.push_back(std::to_string(spells_new_entry.deities6)); + insert_values.push_back(std::to_string(spells_new_entry.deities7)); + insert_values.push_back(std::to_string(spells_new_entry.deities8)); + insert_values.push_back(std::to_string(spells_new_entry.deities9)); + insert_values.push_back(std::to_string(spells_new_entry.deities10)); + insert_values.push_back(std::to_string(spells_new_entry.deities11)); + insert_values.push_back(std::to_string(spells_new_entry.deities12)); + insert_values.push_back(std::to_string(spells_new_entry.deities13)); + insert_values.push_back(std::to_string(spells_new_entry.deities14)); + insert_values.push_back(std::to_string(spells_new_entry.deities15)); + insert_values.push_back(std::to_string(spells_new_entry.deities16)); + insert_values.push_back(std::to_string(spells_new_entry.field142)); + insert_values.push_back(std::to_string(spells_new_entry.field143)); + insert_values.push_back(std::to_string(spells_new_entry.new_icon)); + insert_values.push_back(std::to_string(spells_new_entry.spellanim)); + insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); + insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); + insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); + insert_values.push_back(std::to_string(spells_new_entry.deleteable)); + insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); + insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); + insert_values.push_back(std::to_string(spells_new_entry.field152)); + insert_values.push_back(std::to_string(spells_new_entry.field153)); + insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); + insert_values.push_back(std::to_string(spells_new_entry.descnum)); + insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); + insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); + insert_values.push_back(std::to_string(spells_new_entry.field160)); + insert_values.push_back(std::to_string(spells_new_entry.reflectable)); + insert_values.push_back(std::to_string(spells_new_entry.bonushate)); + insert_values.push_back(std::to_string(spells_new_entry.field163)); + insert_values.push_back(std::to_string(spells_new_entry.field164)); + insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); + insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); + insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); + insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); + insert_values.push_back(std::to_string(spells_new_entry.field169)); + insert_values.push_back(std::to_string(spells_new_entry.field170)); + insert_values.push_back(std::to_string(spells_new_entry.field171)); + insert_values.push_back(std::to_string(spells_new_entry.field172)); + insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); + insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); + insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); + insert_values.push_back(std::to_string(spells_new_entry.numhits)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); + insert_values.push_back(std::to_string(spells_new_entry.spell_category)); + insert_values.push_back(std::to_string(spells_new_entry.field181)); + insert_values.push_back(std::to_string(spells_new_entry.field182)); + insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); + insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); + insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); + insert_values.push_back(std::to_string(spells_new_entry.nodispell)); + insert_values.push_back(std::to_string(spells_new_entry.npc_category)); + insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); + insert_values.push_back(std::to_string(spells_new_entry.MinResist)); + insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); + insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); + insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); + insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); + insert_values.push_back(std::to_string(spells_new_entry.sneaking)); + insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); + insert_values.push_back(std::to_string(spells_new_entry.field198)); + insert_values.push_back(std::to_string(spells_new_entry.field199)); + insert_values.push_back(std::to_string(spells_new_entry.suspendable)); + insert_values.push_back(std::to_string(spells_new_entry.viral_range)); + insert_values.push_back(std::to_string(spells_new_entry.songcap)); + insert_values.push_back(std::to_string(spells_new_entry.field203)); + insert_values.push_back(std::to_string(spells_new_entry.field204)); + insert_values.push_back(std::to_string(spells_new_entry.no_block)); + insert_values.push_back(std::to_string(spells_new_entry.field206)); + insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); + insert_values.push_back(std::to_string(spells_new_entry.rank)); + insert_values.push_back(std::to_string(spells_new_entry.field209)); + insert_values.push_back(std::to_string(spells_new_entry.field210)); + insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); + insert_values.push_back(std::to_string(spells_new_entry.allowrest)); + insert_values.push_back(std::to_string(spells_new_entry.InCombat)); + insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); + insert_values.push_back(std::to_string(spells_new_entry.field215)); + insert_values.push_back(std::to_string(spells_new_entry.field216)); + insert_values.push_back(std::to_string(spells_new_entry.field217)); + insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.field220)); + insert_values.push_back(std::to_string(spells_new_entry.field221)); + insert_values.push_back(std::to_string(spells_new_entry.field222)); + insert_values.push_back(std::to_string(spells_new_entry.field223)); + insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); + insert_values.push_back(std::to_string(spells_new_entry.field225)); + insert_values.push_back(std::to_string(spells_new_entry.field226)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.min_range)); + insert_values.push_back(std::to_string(spells_new_entry.field232)); + insert_values.push_back(std::to_string(spells_new_entry.field233)); + insert_values.push_back(std::to_string(spells_new_entry.field234)); + insert_values.push_back(std::to_string(spells_new_entry.field235)); + insert_values.push_back(std::to_string(spells_new_entry.field236)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + spells_new_entry.id = results.LastInsertedID(); + return spells_new_entry; + } + + spells_new_entry = NewEntity(); + + return spells_new_entry; + } + + static int InsertMany( + std::vector spells_new_entries + ) + { + std::vector insert_chunks; + + for (auto &spells_new_entry: spells_new_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); + insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); + insert_values.push_back(std::to_string(spells_new_entry.range)); + insert_values.push_back(std::to_string(spells_new_entry.aoerange)); + insert_values.push_back(std::to_string(spells_new_entry.pushback)); + insert_values.push_back(std::to_string(spells_new_entry.pushup)); + insert_values.push_back(std::to_string(spells_new_entry.cast_time)); + insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); + insert_values.push_back(std::to_string(spells_new_entry.recast_time)); + insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); + insert_values.push_back(std::to_string(spells_new_entry.buffduration)); + insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); + insert_values.push_back(std::to_string(spells_new_entry.mana)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); + insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); + insert_values.push_back(std::to_string(spells_new_entry.max1)); + insert_values.push_back(std::to_string(spells_new_entry.max2)); + insert_values.push_back(std::to_string(spells_new_entry.max3)); + insert_values.push_back(std::to_string(spells_new_entry.max4)); + insert_values.push_back(std::to_string(spells_new_entry.max5)); + insert_values.push_back(std::to_string(spells_new_entry.max6)); + insert_values.push_back(std::to_string(spells_new_entry.max7)); + insert_values.push_back(std::to_string(spells_new_entry.max8)); + insert_values.push_back(std::to_string(spells_new_entry.max9)); + insert_values.push_back(std::to_string(spells_new_entry.max10)); + insert_values.push_back(std::to_string(spells_new_entry.max11)); + insert_values.push_back(std::to_string(spells_new_entry.max12)); + insert_values.push_back(std::to_string(spells_new_entry.icon)); + insert_values.push_back(std::to_string(spells_new_entry.memicon)); + insert_values.push_back(std::to_string(spells_new_entry.components1)); + insert_values.push_back(std::to_string(spells_new_entry.components2)); + insert_values.push_back(std::to_string(spells_new_entry.components3)); + insert_values.push_back(std::to_string(spells_new_entry.components4)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); + insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); + insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); + insert_values.push_back(std::to_string(spells_new_entry.formula1)); + insert_values.push_back(std::to_string(spells_new_entry.formula2)); + insert_values.push_back(std::to_string(spells_new_entry.formula3)); + insert_values.push_back(std::to_string(spells_new_entry.formula4)); + insert_values.push_back(std::to_string(spells_new_entry.formula5)); + insert_values.push_back(std::to_string(spells_new_entry.formula6)); + insert_values.push_back(std::to_string(spells_new_entry.formula7)); + insert_values.push_back(std::to_string(spells_new_entry.formula8)); + insert_values.push_back(std::to_string(spells_new_entry.formula9)); + insert_values.push_back(std::to_string(spells_new_entry.formula10)); + insert_values.push_back(std::to_string(spells_new_entry.formula11)); + insert_values.push_back(std::to_string(spells_new_entry.formula12)); + insert_values.push_back(std::to_string(spells_new_entry.LightType)); + insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); + insert_values.push_back(std::to_string(spells_new_entry.Activated)); + insert_values.push_back(std::to_string(spells_new_entry.resisttype)); + insert_values.push_back(std::to_string(spells_new_entry.effectid1)); + insert_values.push_back(std::to_string(spells_new_entry.effectid2)); + insert_values.push_back(std::to_string(spells_new_entry.effectid3)); + insert_values.push_back(std::to_string(spells_new_entry.effectid4)); + insert_values.push_back(std::to_string(spells_new_entry.effectid5)); + insert_values.push_back(std::to_string(spells_new_entry.effectid6)); + insert_values.push_back(std::to_string(spells_new_entry.effectid7)); + insert_values.push_back(std::to_string(spells_new_entry.effectid8)); + insert_values.push_back(std::to_string(spells_new_entry.effectid9)); + insert_values.push_back(std::to_string(spells_new_entry.effectid10)); + insert_values.push_back(std::to_string(spells_new_entry.effectid11)); + insert_values.push_back(std::to_string(spells_new_entry.effectid12)); + insert_values.push_back(std::to_string(spells_new_entry.targettype)); + insert_values.push_back(std::to_string(spells_new_entry.basediff)); + insert_values.push_back(std::to_string(spells_new_entry.skill)); + insert_values.push_back(std::to_string(spells_new_entry.zonetype)); + insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); + insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); + insert_values.push_back(std::to_string(spells_new_entry.classes1)); + insert_values.push_back(std::to_string(spells_new_entry.classes2)); + insert_values.push_back(std::to_string(spells_new_entry.classes3)); + insert_values.push_back(std::to_string(spells_new_entry.classes4)); + insert_values.push_back(std::to_string(spells_new_entry.classes5)); + insert_values.push_back(std::to_string(spells_new_entry.classes6)); + insert_values.push_back(std::to_string(spells_new_entry.classes7)); + insert_values.push_back(std::to_string(spells_new_entry.classes8)); + insert_values.push_back(std::to_string(spells_new_entry.classes9)); + insert_values.push_back(std::to_string(spells_new_entry.classes10)); + insert_values.push_back(std::to_string(spells_new_entry.classes11)); + insert_values.push_back(std::to_string(spells_new_entry.classes12)); + insert_values.push_back(std::to_string(spells_new_entry.classes13)); + insert_values.push_back(std::to_string(spells_new_entry.classes14)); + insert_values.push_back(std::to_string(spells_new_entry.classes15)); + insert_values.push_back(std::to_string(spells_new_entry.classes16)); + insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); + insert_values.push_back(std::to_string(spells_new_entry.TravelType)); + insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); + insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); + insert_values.push_back(std::to_string(spells_new_entry.deities0)); + insert_values.push_back(std::to_string(spells_new_entry.deities1)); + insert_values.push_back(std::to_string(spells_new_entry.deities2)); + insert_values.push_back(std::to_string(spells_new_entry.deities3)); + insert_values.push_back(std::to_string(spells_new_entry.deities4)); + insert_values.push_back(std::to_string(spells_new_entry.deities5)); + insert_values.push_back(std::to_string(spells_new_entry.deities6)); + insert_values.push_back(std::to_string(spells_new_entry.deities7)); + insert_values.push_back(std::to_string(spells_new_entry.deities8)); + insert_values.push_back(std::to_string(spells_new_entry.deities9)); + insert_values.push_back(std::to_string(spells_new_entry.deities10)); + insert_values.push_back(std::to_string(spells_new_entry.deities11)); + insert_values.push_back(std::to_string(spells_new_entry.deities12)); + insert_values.push_back(std::to_string(spells_new_entry.deities13)); + insert_values.push_back(std::to_string(spells_new_entry.deities14)); + insert_values.push_back(std::to_string(spells_new_entry.deities15)); + insert_values.push_back(std::to_string(spells_new_entry.deities16)); + insert_values.push_back(std::to_string(spells_new_entry.field142)); + insert_values.push_back(std::to_string(spells_new_entry.field143)); + insert_values.push_back(std::to_string(spells_new_entry.new_icon)); + insert_values.push_back(std::to_string(spells_new_entry.spellanim)); + insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); + insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); + insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); + insert_values.push_back(std::to_string(spells_new_entry.deleteable)); + insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); + insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); + insert_values.push_back(std::to_string(spells_new_entry.field152)); + insert_values.push_back(std::to_string(spells_new_entry.field153)); + insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); + insert_values.push_back(std::to_string(spells_new_entry.descnum)); + insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); + insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); + insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); + insert_values.push_back(std::to_string(spells_new_entry.field160)); + insert_values.push_back(std::to_string(spells_new_entry.reflectable)); + insert_values.push_back(std::to_string(spells_new_entry.bonushate)); + insert_values.push_back(std::to_string(spells_new_entry.field163)); + insert_values.push_back(std::to_string(spells_new_entry.field164)); + insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); + insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); + insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); + insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); + insert_values.push_back(std::to_string(spells_new_entry.field169)); + insert_values.push_back(std::to_string(spells_new_entry.field170)); + insert_values.push_back(std::to_string(spells_new_entry.field171)); + insert_values.push_back(std::to_string(spells_new_entry.field172)); + insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); + insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); + insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); + insert_values.push_back(std::to_string(spells_new_entry.numhits)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); + insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); + insert_values.push_back(std::to_string(spells_new_entry.spell_category)); + insert_values.push_back(std::to_string(spells_new_entry.field181)); + insert_values.push_back(std::to_string(spells_new_entry.field182)); + insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); + insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); + insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); + insert_values.push_back(std::to_string(spells_new_entry.nodispell)); + insert_values.push_back(std::to_string(spells_new_entry.npc_category)); + insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); + insert_values.push_back(std::to_string(spells_new_entry.MinResist)); + insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); + insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); + insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); + insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); + insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); + insert_values.push_back(std::to_string(spells_new_entry.sneaking)); + insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); + insert_values.push_back(std::to_string(spells_new_entry.field198)); + insert_values.push_back(std::to_string(spells_new_entry.field199)); + insert_values.push_back(std::to_string(spells_new_entry.suspendable)); + insert_values.push_back(std::to_string(spells_new_entry.viral_range)); + insert_values.push_back(std::to_string(spells_new_entry.songcap)); + insert_values.push_back(std::to_string(spells_new_entry.field203)); + insert_values.push_back(std::to_string(spells_new_entry.field204)); + insert_values.push_back(std::to_string(spells_new_entry.no_block)); + insert_values.push_back(std::to_string(spells_new_entry.field206)); + insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); + insert_values.push_back(std::to_string(spells_new_entry.rank)); + insert_values.push_back(std::to_string(spells_new_entry.field209)); + insert_values.push_back(std::to_string(spells_new_entry.field210)); + insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); + insert_values.push_back(std::to_string(spells_new_entry.allowrest)); + insert_values.push_back(std::to_string(spells_new_entry.InCombat)); + insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); + insert_values.push_back(std::to_string(spells_new_entry.field215)); + insert_values.push_back(std::to_string(spells_new_entry.field216)); + insert_values.push_back(std::to_string(spells_new_entry.field217)); + insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); + insert_values.push_back(std::to_string(spells_new_entry.field220)); + insert_values.push_back(std::to_string(spells_new_entry.field221)); + insert_values.push_back(std::to_string(spells_new_entry.field222)); + insert_values.push_back(std::to_string(spells_new_entry.field223)); + insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); + insert_values.push_back(std::to_string(spells_new_entry.field225)); + insert_values.push_back(std::to_string(spells_new_entry.field226)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist)); + insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist)); + insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); + insert_values.push_back(std::to_string(spells_new_entry.min_range)); + insert_values.push_back(std::to_string(spells_new_entry.field232)); + insert_values.push_back(std::to_string(spells_new_entry.field233)); + insert_values.push_back(std::to_string(spells_new_entry.field234)); + insert_values.push_back(std::to_string(spells_new_entry.field235)); + insert_values.push_back(std::to_string(spells_new_entry.field236)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + SpellsNew entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.player_1 = row[2] ? row[2] : ""; + entry.teleport_zone = row[3] ? row[3] : ""; + entry.you_cast = row[4] ? row[4] : ""; + entry.other_casts = row[5] ? row[5] : ""; + entry.cast_on_you = row[6] ? row[6] : ""; + entry.cast_on_other = row[7] ? row[7] : ""; + entry.spell_fades = row[8] ? row[8] : ""; + entry.range = atoi(row[9]); + entry.aoerange = atoi(row[10]); + entry.pushback = atoi(row[11]); + entry.pushup = atoi(row[12]); + entry.cast_time = atoi(row[13]); + entry.recovery_time = atoi(row[14]); + entry.recast_time = atoi(row[15]); + entry.buffdurationformula = atoi(row[16]); + entry.buffduration = atoi(row[17]); + entry.AEDuration = atoi(row[18]); + entry.mana = atoi(row[19]); + entry.effect_base_value1 = atoi(row[20]); + entry.effect_base_value2 = atoi(row[21]); + entry.effect_base_value3 = atoi(row[22]); + entry.effect_base_value4 = atoi(row[23]); + entry.effect_base_value5 = atoi(row[24]); + entry.effect_base_value6 = atoi(row[25]); + entry.effect_base_value7 = atoi(row[26]); + entry.effect_base_value8 = atoi(row[27]); + entry.effect_base_value9 = atoi(row[28]); + entry.effect_base_value10 = atoi(row[29]); + entry.effect_base_value11 = atoi(row[30]); + entry.effect_base_value12 = atoi(row[31]); + entry.effect_limit_value1 = atoi(row[32]); + entry.effect_limit_value2 = atoi(row[33]); + entry.effect_limit_value3 = atoi(row[34]); + entry.effect_limit_value4 = atoi(row[35]); + entry.effect_limit_value5 = atoi(row[36]); + entry.effect_limit_value6 = atoi(row[37]); + entry.effect_limit_value7 = atoi(row[38]); + entry.effect_limit_value8 = atoi(row[39]); + entry.effect_limit_value9 = atoi(row[40]); + entry.effect_limit_value10 = atoi(row[41]); + entry.effect_limit_value11 = atoi(row[42]); + entry.effect_limit_value12 = atoi(row[43]); + entry.max1 = atoi(row[44]); + entry.max2 = atoi(row[45]); + entry.max3 = atoi(row[46]); + entry.max4 = atoi(row[47]); + entry.max5 = atoi(row[48]); + entry.max6 = atoi(row[49]); + entry.max7 = atoi(row[50]); + entry.max8 = atoi(row[51]); + entry.max9 = atoi(row[52]); + entry.max10 = atoi(row[53]); + entry.max11 = atoi(row[54]); + entry.max12 = atoi(row[55]); + entry.icon = atoi(row[56]); + entry.memicon = atoi(row[57]); + entry.components1 = atoi(row[58]); + entry.components2 = atoi(row[59]); + entry.components3 = atoi(row[60]); + entry.components4 = atoi(row[61]); + entry.component_counts1 = atoi(row[62]); + entry.component_counts2 = atoi(row[63]); + entry.component_counts3 = atoi(row[64]); + entry.component_counts4 = atoi(row[65]); + entry.NoexpendReagent1 = atoi(row[66]); + entry.NoexpendReagent2 = atoi(row[67]); + entry.NoexpendReagent3 = atoi(row[68]); + entry.NoexpendReagent4 = atoi(row[69]); + entry.formula1 = atoi(row[70]); + entry.formula2 = atoi(row[71]); + entry.formula3 = atoi(row[72]); + entry.formula4 = atoi(row[73]); + entry.formula5 = atoi(row[74]); + entry.formula6 = atoi(row[75]); + entry.formula7 = atoi(row[76]); + entry.formula8 = atoi(row[77]); + entry.formula9 = atoi(row[78]); + entry.formula10 = atoi(row[79]); + entry.formula11 = atoi(row[80]); + entry.formula12 = atoi(row[81]); + entry.LightType = atoi(row[82]); + entry.goodEffect = atoi(row[83]); + entry.Activated = atoi(row[84]); + entry.resisttype = atoi(row[85]); + entry.effectid1 = atoi(row[86]); + entry.effectid2 = atoi(row[87]); + entry.effectid3 = atoi(row[88]); + entry.effectid4 = atoi(row[89]); + entry.effectid5 = atoi(row[90]); + entry.effectid6 = atoi(row[91]); + entry.effectid7 = atoi(row[92]); + entry.effectid8 = atoi(row[93]); + entry.effectid9 = atoi(row[94]); + entry.effectid10 = atoi(row[95]); + entry.effectid11 = atoi(row[96]); + entry.effectid12 = atoi(row[97]); + entry.targettype = atoi(row[98]); + entry.basediff = atoi(row[99]); + entry.skill = atoi(row[100]); + entry.zonetype = atoi(row[101]); + entry.EnvironmentType = atoi(row[102]); + entry.TimeOfDay = atoi(row[103]); + entry.classes1 = atoi(row[104]); + entry.classes2 = atoi(row[105]); + entry.classes3 = atoi(row[106]); + entry.classes4 = atoi(row[107]); + entry.classes5 = atoi(row[108]); + entry.classes6 = atoi(row[109]); + entry.classes7 = atoi(row[110]); + entry.classes8 = atoi(row[111]); + entry.classes9 = atoi(row[112]); + entry.classes10 = atoi(row[113]); + entry.classes11 = atoi(row[114]); + entry.classes12 = atoi(row[115]); + entry.classes13 = atoi(row[116]); + entry.classes14 = atoi(row[117]); + entry.classes15 = atoi(row[118]); + entry.classes16 = atoi(row[119]); + entry.CastingAnim = atoi(row[120]); + entry.TargetAnim = atoi(row[121]); + entry.TravelType = atoi(row[122]); + entry.SpellAffectIndex = atoi(row[123]); + entry.disallow_sit = atoi(row[124]); + entry.deities0 = atoi(row[125]); + entry.deities1 = atoi(row[126]); + entry.deities2 = atoi(row[127]); + entry.deities3 = atoi(row[128]); + entry.deities4 = atoi(row[129]); + entry.deities5 = atoi(row[130]); + entry.deities6 = atoi(row[131]); + entry.deities7 = atoi(row[132]); + entry.deities8 = atoi(row[133]); + entry.deities9 = atoi(row[134]); + entry.deities10 = atoi(row[135]); + entry.deities11 = atoi(row[136]); + entry.deities12 = atoi(row[137]); + entry.deities13 = atoi(row[138]); + entry.deities14 = atoi(row[139]); + entry.deities15 = atoi(row[140]); + entry.deities16 = atoi(row[141]); + entry.field142 = atoi(row[142]); + entry.field143 = atoi(row[143]); + entry.new_icon = atoi(row[144]); + entry.spellanim = atoi(row[145]); + entry.uninterruptable = atoi(row[146]); + entry.ResistDiff = atoi(row[147]); + entry.dot_stacking_exempt = atoi(row[148]); + entry.deleteable = atoi(row[149]); + entry.RecourseLink = atoi(row[150]); + entry.no_partial_resist = atoi(row[151]); + entry.field152 = atoi(row[152]); + entry.field153 = atoi(row[153]); + entry.short_buff_box = atoi(row[154]); + entry.descnum = atoi(row[155]); + entry.typedescnum = atoi(row[156]); + entry.effectdescnum = atoi(row[157]); + entry.effectdescnum2 = atoi(row[158]); + entry.npc_no_los = atoi(row[159]); + entry.field160 = atoi(row[160]); + entry.reflectable = atoi(row[161]); + entry.bonushate = atoi(row[162]); + entry.field163 = atoi(row[163]); + entry.field164 = atoi(row[164]); + entry.ldon_trap = atoi(row[165]); + entry.EndurCost = atoi(row[166]); + entry.EndurTimerIndex = atoi(row[167]); + entry.IsDiscipline = atoi(row[168]); + entry.field169 = atoi(row[169]); + entry.field170 = atoi(row[170]); + entry.field171 = atoi(row[171]); + entry.field172 = atoi(row[172]); + entry.HateAdded = atoi(row[173]); + entry.EndurUpkeep = atoi(row[174]); + entry.numhitstype = atoi(row[175]); + entry.numhits = atoi(row[176]); + entry.pvpresistbase = atoi(row[177]); + entry.pvpresistcalc = atoi(row[178]); + entry.pvpresistcap = atoi(row[179]); + entry.spell_category = atoi(row[180]); + entry.field181 = atoi(row[181]); + entry.field182 = atoi(row[182]); + entry.pcnpc_only_flag = atoi(row[183]); + entry.cast_not_standing = atoi(row[184]); + entry.can_mgb = atoi(row[185]); + entry.nodispell = atoi(row[186]); + entry.npc_category = atoi(row[187]); + entry.npc_usefulness = atoi(row[188]); + entry.MinResist = atoi(row[189]); + entry.MaxResist = atoi(row[190]); + entry.viral_targets = atoi(row[191]); + entry.viral_timer = atoi(row[192]); + entry.nimbuseffect = atoi(row[193]); + entry.ConeStartAngle = atoi(row[194]); + entry.ConeStopAngle = atoi(row[195]); + entry.sneaking = atoi(row[196]); + entry.not_extendable = atoi(row[197]); + entry.field198 = atoi(row[198]); + entry.field199 = atoi(row[199]); + entry.suspendable = atoi(row[200]); + entry.viral_range = atoi(row[201]); + entry.songcap = atoi(row[202]); + entry.field203 = atoi(row[203]); + entry.field204 = atoi(row[204]); + entry.no_block = atoi(row[205]); + entry.field206 = atoi(row[206]); + entry.spellgroup = atoi(row[207]); + entry.rank = atoi(row[208]); + entry.field209 = atoi(row[209]); + entry.field210 = atoi(row[210]); + entry.CastRestriction = atoi(row[211]); + entry.allowrest = atoi(row[212]); + entry.InCombat = atoi(row[213]); + entry.OutofCombat = atoi(row[214]); + entry.field215 = atoi(row[215]); + entry.field216 = atoi(row[216]); + entry.field217 = atoi(row[217]); + entry.aemaxtargets = atoi(row[218]); + entry.maxtargets = atoi(row[219]); + entry.field220 = atoi(row[220]); + entry.field221 = atoi(row[221]); + entry.field222 = atoi(row[222]); + entry.field223 = atoi(row[223]); + entry.persistdeath = atoi(row[224]); + entry.field225 = atoi(row[225]); + entry.field226 = atoi(row[226]); + entry.min_dist = atof(row[227]); + entry.min_dist_mod = atof(row[228]); + entry.max_dist = atof(row[229]); + entry.max_dist_mod = atof(row[230]); + entry.min_range = atoi(row[231]); + entry.field232 = atoi(row[232]); + entry.field233 = atoi(row[233]); + entry.field234 = atoi(row[234]); + entry.field235 = atoi(row[235]); + entry.field236 = atoi(row[236]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_SPELLS_NEW_REPOSITORY_H diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h new file mode 100644 index 000000000..c0a8b3c6a --- /dev/null +++ b/common/repositories/base/base_start_zones_repository.h @@ -0,0 +1,441 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_START_ZONES_REPOSITORY_H +#define EQEMU_BASE_START_ZONES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseStartZonesRepository { +public: + struct StartZones { + float x; + float y; + float z; + float heading; + int zone_id; + int bind_id; + int player_choice; + int player_class; + int player_deity; + int player_race; + int start_zone; + float bind_x; + float bind_y; + float bind_z; + int8 select_rank; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("player_race"); + } + + static std::vector Columns() + { + return { + "x", + "y", + "z", + "heading", + "zone_id", + "bind_id", + "player_choice", + "player_class", + "player_deity", + "player_race", + "start_zone", + "bind_x", + "bind_y", + "bind_z", + "select_rank", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("start_zones"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static StartZones NewEntity() + { + StartZones entry{}; + + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.zone_id = 0; + entry.bind_id = 0; + entry.player_choice = 0; + entry.player_class = 0; + entry.player_deity = 0; + entry.player_race = 0; + entry.start_zone = 0; + entry.bind_x = 0; + entry.bind_y = 0; + entry.bind_z = 0; + entry.select_rank = 50; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static StartZones GetStartZonesEntry( + const std::vector &start_zoness, + int start_zones_id + ) + { + for (auto &start_zones : start_zoness) { + if (start_zones.player_race == start_zones_id) { + return start_zones; + } + } + + return NewEntity(); + } + + static StartZones FindOne( + int start_zones_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + start_zones_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int start_zones_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + start_zones_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + StartZones start_zones_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(start_zones_entry.x)); + update_values.push_back(columns[1] + " = " + std::to_string(start_zones_entry.y)); + update_values.push_back(columns[2] + " = " + std::to_string(start_zones_entry.z)); + update_values.push_back(columns[3] + " = " + std::to_string(start_zones_entry.heading)); + update_values.push_back(columns[4] + " = " + std::to_string(start_zones_entry.zone_id)); + update_values.push_back(columns[5] + " = " + std::to_string(start_zones_entry.bind_id)); + update_values.push_back(columns[10] + " = " + std::to_string(start_zones_entry.start_zone)); + update_values.push_back(columns[11] + " = " + std::to_string(start_zones_entry.bind_x)); + update_values.push_back(columns[12] + " = " + std::to_string(start_zones_entry.bind_y)); + update_values.push_back(columns[13] + " = " + std::to_string(start_zones_entry.bind_z)); + update_values.push_back(columns[14] + " = " + std::to_string(start_zones_entry.select_rank)); + update_values.push_back(columns[15] + " = " + std::to_string(start_zones_entry.min_expansion)); + update_values.push_back(columns[16] + " = " + std::to_string(start_zones_entry.max_expansion)); + update_values.push_back(columns[17] + " = '" + EscapeString(start_zones_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + start_zones_entry.player_race + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static StartZones InsertOne( + StartZones start_zones_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(start_zones_entry.x)); + insert_values.push_back(std::to_string(start_zones_entry.y)); + insert_values.push_back(std::to_string(start_zones_entry.z)); + insert_values.push_back(std::to_string(start_zones_entry.heading)); + insert_values.push_back(std::to_string(start_zones_entry.zone_id)); + insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.start_zone)); + insert_values.push_back(std::to_string(start_zones_entry.bind_x)); + insert_values.push_back(std::to_string(start_zones_entry.bind_y)); + insert_values.push_back(std::to_string(start_zones_entry.bind_z)); + insert_values.push_back(std::to_string(start_zones_entry.select_rank)); + insert_values.push_back(std::to_string(start_zones_entry.min_expansion)); + insert_values.push_back(std::to_string(start_zones_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + start_zones_entry.id = results.LastInsertedID(); + return start_zones_entry; + } + + start_zones_entry = NewEntity(); + + return start_zones_entry; + } + + static int InsertMany( + std::vector start_zones_entries + ) + { + std::vector insert_chunks; + + for (auto &start_zones_entry: start_zones_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(start_zones_entry.x)); + insert_values.push_back(std::to_string(start_zones_entry.y)); + insert_values.push_back(std::to_string(start_zones_entry.z)); + insert_values.push_back(std::to_string(start_zones_entry.heading)); + insert_values.push_back(std::to_string(start_zones_entry.zone_id)); + insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.start_zone)); + insert_values.push_back(std::to_string(start_zones_entry.bind_x)); + insert_values.push_back(std::to_string(start_zones_entry.bind_y)); + insert_values.push_back(std::to_string(start_zones_entry.bind_z)); + insert_values.push_back(std::to_string(start_zones_entry.select_rank)); + insert_values.push_back(std::to_string(start_zones_entry.min_expansion)); + insert_values.push_back(std::to_string(start_zones_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartZones entry{}; + + entry.x = atof(row[0]); + entry.y = atof(row[1]); + entry.z = atof(row[2]); + entry.heading = atof(row[3]); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = atof(row[11]); + entry.bind_y = atof(row[12]); + entry.bind_z = atof(row[13]); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_START_ZONES_REPOSITORY_H diff --git a/common/repositories/base/base_starting_items_repository.h b/common/repositories/base/base_starting_items_repository.h new file mode 100644 index 000000000..64bdd124a --- /dev/null +++ b/common/repositories/base/base_starting_items_repository.h @@ -0,0 +1,393 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_STARTING_ITEMS_REPOSITORY_H +#define EQEMU_BASE_STARTING_ITEMS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseStartingItemsRepository { +public: + struct StartingItems { + int id; + int race; + int class; + int deityid; + int zoneid; + int itemid; + int8 item_charges; + int8 gm; + int slot; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("race"); + } + + static std::vector Columns() + { + return { + "id", + "race", + "class", + "deityid", + "zoneid", + "itemid", + "item_charges", + "gm", + "slot", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("starting_items"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static StartingItems NewEntity() + { + StartingItems entry{}; + + entry.id = 0; + entry.race = 0; + entry.class = 0; + entry.deityid = 0; + entry.zoneid = 0; + entry.itemid = 0; + entry.item_charges = 1; + entry.gm = 0; + entry.slot = -1; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static StartingItems GetStartingItemsEntry( + const std::vector &starting_itemss, + int starting_items_id + ) + { + for (auto &starting_items : starting_itemss) { + if (starting_items.race == starting_items_id) { + return starting_items; + } + } + + return NewEntity(); + } + + static StartingItems FindOne( + int starting_items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + starting_items_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int starting_items_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + starting_items_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + StartingItems starting_items_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(starting_items_entry.class)); + update_values.push_back(columns[3] + " = " + std::to_string(starting_items_entry.deityid)); + update_values.push_back(columns[4] + " = " + std::to_string(starting_items_entry.zoneid)); + update_values.push_back(columns[5] + " = " + std::to_string(starting_items_entry.itemid)); + update_values.push_back(columns[6] + " = " + std::to_string(starting_items_entry.item_charges)); + update_values.push_back(columns[7] + " = " + std::to_string(starting_items_entry.gm)); + update_values.push_back(columns[8] + " = " + std::to_string(starting_items_entry.slot)); + update_values.push_back(columns[9] + " = " + std::to_string(starting_items_entry.min_expansion)); + update_values.push_back(columns[10] + " = " + std::to_string(starting_items_entry.max_expansion)); + update_values.push_back(columns[11] + " = '" + EscapeString(starting_items_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + starting_items_entry.race + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static StartingItems InsertOne( + StartingItems starting_items_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(starting_items_entry.class)); + insert_values.push_back(std::to_string(starting_items_entry.deityid)); + insert_values.push_back(std::to_string(starting_items_entry.zoneid)); + insert_values.push_back(std::to_string(starting_items_entry.itemid)); + insert_values.push_back(std::to_string(starting_items_entry.item_charges)); + insert_values.push_back(std::to_string(starting_items_entry.gm)); + insert_values.push_back(std::to_string(starting_items_entry.slot)); + insert_values.push_back(std::to_string(starting_items_entry.min_expansion)); + insert_values.push_back(std::to_string(starting_items_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + starting_items_entry.id = results.LastInsertedID(); + return starting_items_entry; + } + + starting_items_entry = NewEntity(); + + return starting_items_entry; + } + + static int InsertMany( + std::vector starting_items_entries + ) + { + std::vector insert_chunks; + + for (auto &starting_items_entry: starting_items_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(starting_items_entry.class)); + insert_values.push_back(std::to_string(starting_items_entry.deityid)); + insert_values.push_back(std::to_string(starting_items_entry.zoneid)); + insert_values.push_back(std::to_string(starting_items_entry.itemid)); + insert_values.push_back(std::to_string(starting_items_entry.item_charges)); + insert_values.push_back(std::to_string(starting_items_entry.gm)); + insert_values.push_back(std::to_string(starting_items_entry.slot)); + insert_values.push_back(std::to_string(starting_items_entry.min_expansion)); + insert_values.push_back(std::to_string(starting_items_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + StartingItems entry{}; + + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_STARTING_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_task_activities_repository.h b/common/repositories/base/base_task_activities_repository.h new file mode 100644 index 000000000..2182bf508 --- /dev/null +++ b/common/repositories/base/base_task_activities_repository.h @@ -0,0 +1,420 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TASK_ACTIVITIES_REPOSITORY_H +#define EQEMU_BASE_TASK_ACTIVITIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTaskActivitiesRepository { +public: + struct TaskActivities { + int taskid; + int activityid; + int step; + int8 activitytype; + std::string target_name; + std::string item_list; + std::string skill_list; + std::string spell_list; + std::string description_override; + int goalid; + int goalmethod; + int goalcount; + int delivertonpc; + std::string zones; + int8 optional; + }; + + static std::string PrimaryKey() + { + return std::string("activityid"); + } + + static std::vector Columns() + { + return { + "taskid", + "activityid", + "step", + "activitytype", + "target_name", + "item_list", + "skill_list", + "spell_list", + "description_override", + "goalid", + "goalmethod", + "goalcount", + "delivertonpc", + "zones", + "optional", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("task_activities"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TaskActivities NewEntity() + { + TaskActivities entry{}; + + entry.taskid = 0; + entry.activityid = 0; + entry.step = 0; + entry.activitytype = 0; + entry.target_name = ""; + entry.item_list = ""; + entry.skill_list = "-1"; + entry.spell_list = "0"; + entry.description_override = ""; + entry.goalid = 0; + entry.goalmethod = 0; + entry.goalcount = 1; + entry.delivertonpc = 0; + entry.zones = ""; + entry.optional = 0; + + return entry; + } + + static TaskActivities GetTaskActivitiesEntry( + const std::vector &task_activitiess, + int task_activities_id + ) + { + for (auto &task_activities : task_activitiess) { + if (task_activities.activityid == task_activities_id) { + return task_activities; + } + } + + return NewEntity(); + } + + static TaskActivities FindOne( + int task_activities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + task_activities_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13] ? row[13] : ""; + entry.optional = atoi(row[14]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int task_activities_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + task_activities_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TaskActivities task_activities_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(task_activities_entry.step)); + update_values.push_back(columns[3] + " = " + std::to_string(task_activities_entry.activitytype)); + update_values.push_back(columns[4] + " = '" + EscapeString(task_activities_entry.target_name) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(task_activities_entry.item_list) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(task_activities_entry.skill_list) + "'"); + update_values.push_back(columns[7] + " = '" + EscapeString(task_activities_entry.spell_list) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(task_activities_entry.description_override) + "'"); + update_values.push_back(columns[9] + " = " + std::to_string(task_activities_entry.goalid)); + update_values.push_back(columns[10] + " = " + std::to_string(task_activities_entry.goalmethod)); + update_values.push_back(columns[11] + " = " + std::to_string(task_activities_entry.goalcount)); + update_values.push_back(columns[12] + " = " + std::to_string(task_activities_entry.delivertonpc)); + update_values.push_back(columns[13] + " = '" + EscapeString(task_activities_entry.zones) + "'"); + update_values.push_back(columns[14] + " = " + std::to_string(task_activities_entry.optional)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + task_activities_entry.activityid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TaskActivities InsertOne( + TaskActivities task_activities_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(task_activities_entry.step)); + insert_values.push_back(std::to_string(task_activities_entry.activitytype)); + insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.goalid)); + insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); + insert_values.push_back(std::to_string(task_activities_entry.goalcount)); + insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); + insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.optional)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + task_activities_entry.id = results.LastInsertedID(); + return task_activities_entry; + } + + task_activities_entry = NewEntity(); + + return task_activities_entry; + } + + static int InsertMany( + std::vector task_activities_entries + ) + { + std::vector insert_chunks; + + for (auto &task_activities_entry: task_activities_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(task_activities_entry.step)); + insert_values.push_back(std::to_string(task_activities_entry.activitytype)); + insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); + insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.goalid)); + insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); + insert_values.push_back(std::to_string(task_activities_entry.goalcount)); + insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); + insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); + insert_values.push_back(std::to_string(task_activities_entry.optional)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13] ? row[13] : ""; + entry.optional = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TaskActivities entry{}; + + entry.taskid = atoi(row[0]); + entry.activityid = atoi(row[1]); + entry.step = atoi(row[2]); + entry.activitytype = atoi(row[3]); + entry.target_name = row[4] ? row[4] : ""; + entry.item_list = row[5] ? row[5] : ""; + entry.skill_list = row[6] ? row[6] : ""; + entry.spell_list = row[7] ? row[7] : ""; + entry.description_override = row[8] ? row[8] : ""; + entry.goalid = atoi(row[9]); + entry.goalmethod = atoi(row[10]); + entry.goalcount = atoi(row[11]); + entry.delivertonpc = atoi(row[12]); + entry.zones = row[13] ? row[13] : ""; + entry.optional = atoi(row[14]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TASK_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/base/base_tasks_repository.h b/common/repositories/base/base_tasks_repository.h new file mode 100644 index 000000000..042141d8e --- /dev/null +++ b/common/repositories/base/base_tasks_repository.h @@ -0,0 +1,432 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TASKS_REPOSITORY_H +#define EQEMU_BASE_TASKS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTasksRepository { +public: + struct Tasks { + int id; + int8 type; + int duration; + int8 duration_code; + std::string title; + std::string description; + std::string reward; + int rewardid; + int cashreward; + int xpreward; + int8 rewardmethod; + int8 minlevel; + int8 maxlevel; + int8 repeatable; + int faction_reward; + std::string completion_emote; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "type", + "duration", + "duration_code", + "title", + "description", + "reward", + "rewardid", + "cashreward", + "xpreward", + "rewardmethod", + "minlevel", + "maxlevel", + "repeatable", + "faction_reward", + "completion_emote", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tasks"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tasks NewEntity() + { + Tasks entry{}; + + entry.id = 0; + entry.type = 0; + entry.duration = 0; + entry.duration_code = 0; + entry.title = ""; + entry.description = ""; + entry.reward = ""; + entry.rewardid = 0; + entry.cashreward = 0; + entry.xpreward = 0; + entry.rewardmethod = 2; + entry.minlevel = 0; + entry.maxlevel = 0; + entry.repeatable = 1; + entry.faction_reward = 0; + entry.completion_emote = ""; + + return entry; + } + + static Tasks GetTasksEntry( + const std::vector &taskss, + int tasks_id + ) + { + for (auto &tasks : taskss) { + if (tasks.id == tasks_id) { + return tasks; + } + } + + return NewEntity(); + } + + static Tasks FindOne( + int tasks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tasks_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15] ? row[15] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tasks_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tasks_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tasks tasks_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tasks_entry.type)); + update_values.push_back(columns[2] + " = " + std::to_string(tasks_entry.duration)); + update_values.push_back(columns[3] + " = " + std::to_string(tasks_entry.duration_code)); + update_values.push_back(columns[4] + " = '" + EscapeString(tasks_entry.title) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(tasks_entry.description) + "'"); + update_values.push_back(columns[6] + " = '" + EscapeString(tasks_entry.reward) + "'"); + update_values.push_back(columns[7] + " = " + std::to_string(tasks_entry.rewardid)); + update_values.push_back(columns[8] + " = " + std::to_string(tasks_entry.cashreward)); + update_values.push_back(columns[9] + " = " + std::to_string(tasks_entry.xpreward)); + update_values.push_back(columns[10] + " = " + std::to_string(tasks_entry.rewardmethod)); + update_values.push_back(columns[11] + " = " + std::to_string(tasks_entry.minlevel)); + update_values.push_back(columns[12] + " = " + std::to_string(tasks_entry.maxlevel)); + update_values.push_back(columns[13] + " = " + std::to_string(tasks_entry.repeatable)); + update_values.push_back(columns[14] + " = " + std::to_string(tasks_entry.faction_reward)); + update_values.push_back(columns[15] + " = '" + EscapeString(tasks_entry.completion_emote) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tasks_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tasks InsertOne( + Tasks tasks_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tasks_entry.type)); + insert_values.push_back(std::to_string(tasks_entry.duration)); + insert_values.push_back(std::to_string(tasks_entry.duration_code)); + insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); + insert_values.push_back(std::to_string(tasks_entry.rewardid)); + insert_values.push_back(std::to_string(tasks_entry.cashreward)); + insert_values.push_back(std::to_string(tasks_entry.xpreward)); + insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); + insert_values.push_back(std::to_string(tasks_entry.minlevel)); + insert_values.push_back(std::to_string(tasks_entry.maxlevel)); + insert_values.push_back(std::to_string(tasks_entry.repeatable)); + insert_values.push_back(std::to_string(tasks_entry.faction_reward)); + insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tasks_entry.id = results.LastInsertedID(); + return tasks_entry; + } + + tasks_entry = NewEntity(); + + return tasks_entry; + } + + static int InsertMany( + std::vector tasks_entries + ) + { + std::vector insert_chunks; + + for (auto &tasks_entry: tasks_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tasks_entry.type)); + insert_values.push_back(std::to_string(tasks_entry.duration)); + insert_values.push_back(std::to_string(tasks_entry.duration_code)); + insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); + insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); + insert_values.push_back(std::to_string(tasks_entry.rewardid)); + insert_values.push_back(std::to_string(tasks_entry.cashreward)); + insert_values.push_back(std::to_string(tasks_entry.xpreward)); + insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); + insert_values.push_back(std::to_string(tasks_entry.minlevel)); + insert_values.push_back(std::to_string(tasks_entry.maxlevel)); + insert_values.push_back(std::to_string(tasks_entry.repeatable)); + insert_values.push_back(std::to_string(tasks_entry.faction_reward)); + insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15] ? row[15] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasks entry{}; + + entry.id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.duration = atoi(row[2]); + entry.duration_code = atoi(row[3]); + entry.title = row[4] ? row[4] : ""; + entry.description = row[5] ? row[5] : ""; + entry.reward = row[6] ? row[6] : ""; + entry.rewardid = atoi(row[7]); + entry.cashreward = atoi(row[8]); + entry.xpreward = atoi(row[9]); + entry.rewardmethod = atoi(row[10]); + entry.minlevel = atoi(row[11]); + entry.maxlevel = atoi(row[12]); + entry.repeatable = atoi(row[13]); + entry.faction_reward = atoi(row[14]); + entry.completion_emote = row[15] ? row[15] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_tasksets_repository.h b/common/repositories/base/base_tasksets_repository.h new file mode 100644 index 000000000..84b50f78f --- /dev/null +++ b/common/repositories/base/base_tasksets_repository.h @@ -0,0 +1,306 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TASKSETS_REPOSITORY_H +#define EQEMU_BASE_TASKSETS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTasksetsRepository { +public: + struct Tasksets { + int id; + int taskid; + }; + + static std::string PrimaryKey() + { + return std::string("taskid"); + } + + static std::vector Columns() + { + return { + "id", + "taskid", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tasksets"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tasksets NewEntity() + { + Tasksets entry{}; + + entry.id = 0; + entry.taskid = 0; + + return entry; + } + + static Tasksets GetTasksetsEntry( + const std::vector &tasksetss, + int tasksets_id + ) + { + for (auto &tasksets : tasksetss) { + if (tasksets.taskid == tasksets_id) { + return tasksets; + } + } + + return NewEntity(); + } + + static Tasksets FindOne( + int tasksets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tasksets_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tasksets_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tasksets_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tasksets tasksets_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tasksets_entry.taskid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tasksets InsertOne( + Tasksets tasksets_entry + ) + { + std::vector insert_values; + + + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tasksets_entry.id = results.LastInsertedID(); + return tasksets_entry; + } + + tasksets_entry = NewEntity(); + + return tasksets_entry; + } + + static int InsertMany( + std::vector tasksets_entries + ) + { + std::vector insert_chunks; + + for (auto &tasksets_entry: tasksets_entries) { + std::vector insert_values; + + + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tasksets entry{}; + + entry.id = atoi(row[0]); + entry.taskid = atoi(row[1]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TASKSETS_REPOSITORY_H diff --git a/common/repositories/base/base_timers_repository.h b/common/repositories/base/base_timers_repository.h new file mode 100644 index 000000000..620a90d7a --- /dev/null +++ b/common/repositories/base/base_timers_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TIMERS_REPOSITORY_H +#define EQEMU_BASE_TIMERS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTimersRepository { +public: + struct Timers { + int char_id; + int type; + int start; + int duration; + int8 enable; + }; + + static std::string PrimaryKey() + { + return std::string("type"); + } + + static std::vector Columns() + { + return { + "char_id", + "type", + "start", + "duration", + "enable", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("timers"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Timers NewEntity() + { + Timers entry{}; + + entry.char_id = 0; + entry.type = 0; + entry.start = 0; + entry.duration = 0; + entry.enable = 0; + + return entry; + } + + static Timers GetTimersEntry( + const std::vector &timerss, + int timers_id + ) + { + for (auto &timers : timerss) { + if (timers.type == timers_id) { + return timers; + } + } + + return NewEntity(); + } + + static Timers FindOne( + int timers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + timers_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int timers_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + timers_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Timers timers_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(timers_entry.start)); + update_values.push_back(columns[3] + " = " + std::to_string(timers_entry.duration)); + update_values.push_back(columns[4] + " = " + std::to_string(timers_entry.enable)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + timers_entry.type + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Timers InsertOne( + Timers timers_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(timers_entry.start)); + insert_values.push_back(std::to_string(timers_entry.duration)); + insert_values.push_back(std::to_string(timers_entry.enable)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + timers_entry.id = results.LastInsertedID(); + return timers_entry; + } + + timers_entry = NewEntity(); + + return timers_entry; + } + + static int InsertMany( + std::vector timers_entries + ) + { + std::vector insert_chunks; + + for (auto &timers_entry: timers_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(timers_entry.start)); + insert_values.push_back(std::to_string(timers_entry.duration)); + insert_values.push_back(std::to_string(timers_entry.enable)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Timers entry{}; + + entry.char_id = atoi(row[0]); + entry.type = atoi(row[1]); + entry.start = atoi(row[2]); + entry.duration = atoi(row[3]); + entry.enable = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TIMERS_REPOSITORY_H diff --git a/common/repositories/base/base_titles_repository.h b/common/repositories/base/base_titles_repository.h new file mode 100644 index 000000000..f0ad144f7 --- /dev/null +++ b/common/repositories/base/base_titles_repository.h @@ -0,0 +1,441 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TITLES_REPOSITORY_H +#define EQEMU_BASE_TITLES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTitlesRepository { +public: + struct Titles { + int id; + int8 skill_id; + int min_skill_value; + int max_skill_value; + int min_aa_points; + int max_aa_points; + int8 class; + int8 gender; + int char_id; + int status; + int item_id; + std::string prefix; + std::string suffix; + int title_set; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "skill_id", + "min_skill_value", + "max_skill_value", + "min_aa_points", + "max_aa_points", + "class", + "gender", + "char_id", + "status", + "item_id", + "prefix", + "suffix", + "title_set", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("titles"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Titles NewEntity() + { + Titles entry{}; + + entry.id = 0; + entry.skill_id = -1; + entry.min_skill_value = -1; + entry.max_skill_value = -1; + entry.min_aa_points = -1; + entry.max_aa_points = -1; + entry.class = -1; + entry.gender = -1; + entry.char_id = -1; + entry.status = -1; + entry.item_id = -1; + entry.prefix = ""; + entry.suffix = ""; + entry.title_set = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Titles GetTitlesEntry( + const std::vector &titless, + int titles_id + ) + { + for (auto &titles : titless) { + if (titles.id == titles_id) { + return titles; + } + } + + return NewEntity(); + } + + static Titles FindOne( + int titles_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + titles_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; + entry.title_set = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int titles_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + titles_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Titles titles_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(titles_entry.skill_id)); + update_values.push_back(columns[2] + " = " + std::to_string(titles_entry.min_skill_value)); + update_values.push_back(columns[3] + " = " + std::to_string(titles_entry.max_skill_value)); + update_values.push_back(columns[4] + " = " + std::to_string(titles_entry.min_aa_points)); + update_values.push_back(columns[5] + " = " + std::to_string(titles_entry.max_aa_points)); + update_values.push_back(columns[6] + " = " + std::to_string(titles_entry.class)); + update_values.push_back(columns[7] + " = " + std::to_string(titles_entry.gender)); + update_values.push_back(columns[8] + " = " + std::to_string(titles_entry.char_id)); + update_values.push_back(columns[9] + " = " + std::to_string(titles_entry.status)); + update_values.push_back(columns[10] + " = " + std::to_string(titles_entry.item_id)); + update_values.push_back(columns[11] + " = '" + EscapeString(titles_entry.prefix) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(titles_entry.suffix) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(titles_entry.title_set)); + update_values.push_back(columns[14] + " = " + std::to_string(titles_entry.min_expansion)); + update_values.push_back(columns[15] + " = " + std::to_string(titles_entry.max_expansion)); + update_values.push_back(columns[16] + " = '" + EscapeString(titles_entry.content_flags) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + titles_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Titles InsertOne( + Titles titles_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(titles_entry.skill_id)); + insert_values.push_back(std::to_string(titles_entry.min_skill_value)); + insert_values.push_back(std::to_string(titles_entry.max_skill_value)); + insert_values.push_back(std::to_string(titles_entry.min_aa_points)); + insert_values.push_back(std::to_string(titles_entry.max_aa_points)); + insert_values.push_back(std::to_string(titles_entry.class)); + insert_values.push_back(std::to_string(titles_entry.gender)); + insert_values.push_back(std::to_string(titles_entry.char_id)); + insert_values.push_back(std::to_string(titles_entry.status)); + insert_values.push_back(std::to_string(titles_entry.item_id)); + insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); + insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); + insert_values.push_back(std::to_string(titles_entry.title_set)); + insert_values.push_back(std::to_string(titles_entry.min_expansion)); + insert_values.push_back(std::to_string(titles_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(titles_entry.content_flags) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + titles_entry.id = results.LastInsertedID(); + return titles_entry; + } + + titles_entry = NewEntity(); + + return titles_entry; + } + + static int InsertMany( + std::vector titles_entries + ) + { + std::vector insert_chunks; + + for (auto &titles_entry: titles_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(titles_entry.skill_id)); + insert_values.push_back(std::to_string(titles_entry.min_skill_value)); + insert_values.push_back(std::to_string(titles_entry.max_skill_value)); + insert_values.push_back(std::to_string(titles_entry.min_aa_points)); + insert_values.push_back(std::to_string(titles_entry.max_aa_points)); + insert_values.push_back(std::to_string(titles_entry.class)); + insert_values.push_back(std::to_string(titles_entry.gender)); + insert_values.push_back(std::to_string(titles_entry.char_id)); + insert_values.push_back(std::to_string(titles_entry.status)); + insert_values.push_back(std::to_string(titles_entry.item_id)); + insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); + insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); + insert_values.push_back(std::to_string(titles_entry.title_set)); + insert_values.push_back(std::to_string(titles_entry.min_expansion)); + insert_values.push_back(std::to_string(titles_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(titles_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; + entry.title_set = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Titles entry{}; + + entry.id = atoi(row[0]); + entry.skill_id = atoi(row[1]); + entry.min_skill_value = atoi(row[2]); + entry.max_skill_value = atoi(row[3]); + entry.min_aa_points = atoi(row[4]); + entry.max_aa_points = atoi(row[5]); + entry.class = atoi(row[6]); + entry.gender = atoi(row[7]); + entry.char_id = atoi(row[8]); + entry.status = atoi(row[9]); + entry.item_id = atoi(row[10]); + entry.prefix = row[11] ? row[11] : ""; + entry.suffix = row[12] ? row[12] : ""; + entry.title_set = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TITLES_REPOSITORY_H diff --git a/common/repositories/base/base_trader_repository.h b/common/repositories/base/base_trader_repository.h new file mode 100644 index 000000000..49f9da6e0 --- /dev/null +++ b/common/repositories/base/base_trader_repository.h @@ -0,0 +1,339 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRADER_REPOSITORY_H +#define EQEMU_BASE_TRADER_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTraderRepository { +public: + struct Trader { + int char_id; + int item_id; + int serialnumber; + int charges; + int item_cost; + int8 slot_id; + }; + + static std::string PrimaryKey() + { + return std::string("slot_id"); + } + + static std::vector Columns() + { + return { + "char_id", + "item_id", + "serialnumber", + "charges", + "item_cost", + "slot_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("trader"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Trader NewEntity() + { + Trader entry{}; + + entry.char_id = 0; + entry.item_id = 0; + entry.serialnumber = 0; + entry.charges = 0; + entry.item_cost = 0; + entry.slot_id = 0; + + return entry; + } + + static Trader GetTraderEntry( + const std::vector &traders, + int trader_id + ) + { + for (auto &trader : traders) { + if (trader.slot_id == trader_id) { + return trader; + } + } + + return NewEntity(); + } + + static Trader FindOne( + int trader_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + trader_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int trader_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + trader_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Trader trader_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(trader_entry.item_id)); + update_values.push_back(columns[2] + " = " + std::to_string(trader_entry.serialnumber)); + update_values.push_back(columns[3] + " = " + std::to_string(trader_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(trader_entry.item_cost)); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + trader_entry.slot_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Trader InsertOne( + Trader trader_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(trader_entry.item_id)); + insert_values.push_back(std::to_string(trader_entry.serialnumber)); + insert_values.push_back(std::to_string(trader_entry.charges)); + insert_values.push_back(std::to_string(trader_entry.item_cost)); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + trader_entry.id = results.LastInsertedID(); + return trader_entry; + } + + trader_entry = NewEntity(); + + return trader_entry; + } + + static int InsertMany( + std::vector trader_entries + ) + { + std::vector insert_chunks; + + for (auto &trader_entry: trader_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(trader_entry.item_id)); + insert_values.push_back(std::to_string(trader_entry.serialnumber)); + insert_values.push_back(std::to_string(trader_entry.charges)); + insert_values.push_back(std::to_string(trader_entry.item_cost)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Trader entry{}; + + entry.char_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.serialnumber = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.item_cost = atoi(row[4]); + entry.slot_id = atoi(row[5]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRADER_REPOSITORY_H diff --git a/common/repositories/base/base_tradeskill_recipe_entries_repository.h b/common/repositories/base/base_tradeskill_recipe_entries_repository.h new file mode 100644 index 000000000..23b2afbc2 --- /dev/null +++ b/common/repositories/base/base_tradeskill_recipe_entries_repository.h @@ -0,0 +1,360 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTradeskillRecipeEntriesRepository { +public: + struct TradeskillRecipeEntries { + int id; + int recipe_id; + int item_id; + int8 successcount; + int8 failcount; + int8 componentcount; + int8 salvagecount; + int8 iscontainer; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "recipe_id", + "item_id", + "successcount", + "failcount", + "componentcount", + "salvagecount", + "iscontainer", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tradeskill_recipe_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TradeskillRecipeEntries NewEntity() + { + TradeskillRecipeEntries entry{}; + + entry.id = 0; + entry.recipe_id = 0; + entry.item_id = 0; + entry.successcount = 0; + entry.failcount = 0; + entry.componentcount = 1; + entry.salvagecount = 0; + entry.iscontainer = 0; + + return entry; + } + + static TradeskillRecipeEntries GetTradeskillRecipeEntriesEntry( + const std::vector &tradeskill_recipe_entriess, + int tradeskill_recipe_entries_id + ) + { + for (auto &tradeskill_recipe_entries : tradeskill_recipe_entriess) { + if (tradeskill_recipe_entries.id == tradeskill_recipe_entries_id) { + return tradeskill_recipe_entries; + } + } + + return NewEntity(); + } + + static TradeskillRecipeEntries FindOne( + int tradeskill_recipe_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tradeskill_recipe_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tradeskill_recipe_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tradeskill_recipe_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TradeskillRecipeEntries tradeskill_recipe_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entries_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entries_entry.successcount)); + update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entries_entry.failcount)); + update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entries_entry.componentcount)); + update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + update_values.push_back(columns[7] + " = " + std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tradeskill_recipe_entries_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TradeskillRecipeEntries InsertOne( + TradeskillRecipeEntries tradeskill_recipe_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tradeskill_recipe_entries_entry.id = results.LastInsertedID(); + return tradeskill_recipe_entries_entry; + } + + tradeskill_recipe_entries_entry = NewEntity(); + + return tradeskill_recipe_entries_entry; + } + + static int InsertMany( + std::vector tradeskill_recipe_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &tradeskill_recipe_entries_entry: tradeskill_recipe_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); + insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipeEntries entry{}; + + entry.id = atoi(row[0]); + entry.recipe_id = atoi(row[1]); + entry.item_id = atoi(row[2]); + entry.successcount = atoi(row[3]); + entry.failcount = atoi(row[4]); + entry.componentcount = atoi(row[5]); + entry.salvagecount = atoi(row[6]); + entry.iscontainer = atoi(row[7]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h new file mode 100644 index 000000000..679083ba8 --- /dev/null +++ b/common/repositories/base/base_traps_repository.h @@ -0,0 +1,504 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRAPS_REPOSITORY_H +#define EQEMU_BASE_TRAPS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTrapsRepository { +public: + struct Traps { + int id; + std::string zone; + int16 version; + int x; + int y; + int z; + int8 chance; + float maxzdiff; + float radius; + int effect; + int effectvalue; + int effectvalue2; + std::string message; + int skill; + int level; + int respawn_time; + int respawn_var; + int8 triggered_number; + int8 group; + int8 despawn_when_triggered; + int8 undetectable; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "x", + "y", + "z", + "chance", + "maxzdiff", + "radius", + "effect", + "effectvalue", + "effectvalue2", + "message", + "skill", + "level", + "respawn_time", + "respawn_var", + "triggered_number", + "group", + "despawn_when_triggered", + "undetectable", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("traps"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Traps NewEntity() + { + Traps entry{}; + + entry.id = 0; + entry.zone = ""; + entry.version = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.chance = 0; + entry.maxzdiff = 0; + entry.radius = 0; + entry.effect = 0; + entry.effectvalue = 0; + entry.effectvalue2 = 0; + entry.message = ""; + entry.skill = 0; + entry.level = 1; + entry.respawn_time = 60; + entry.respawn_var = 0; + entry.triggered_number = 0; + entry.group = 0; + entry.despawn_when_triggered = 0; + entry.undetectable = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static Traps GetTrapsEntry( + const std::vector &trapss, + int traps_id + ) + { + for (auto &traps : trapss) { + if (traps.id == traps_id) { + return traps; + } + } + + return NewEntity(); + } + + static Traps FindOne( + int traps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + traps_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12] ? row[12] : ""; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + entry.min_expansion = atoi(row[21]); + entry.max_expansion = atoi(row[22]); + entry.content_flags = row[23] ? row[23] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int traps_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + traps_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Traps traps_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(traps_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(traps_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(traps_entry.x)); + update_values.push_back(columns[4] + " = " + std::to_string(traps_entry.y)); + update_values.push_back(columns[5] + " = " + std::to_string(traps_entry.z)); + update_values.push_back(columns[6] + " = " + std::to_string(traps_entry.chance)); + update_values.push_back(columns[7] + " = " + std::to_string(traps_entry.maxzdiff)); + update_values.push_back(columns[8] + " = " + std::to_string(traps_entry.radius)); + update_values.push_back(columns[9] + " = " + std::to_string(traps_entry.effect)); + update_values.push_back(columns[10] + " = " + std::to_string(traps_entry.effectvalue)); + update_values.push_back(columns[11] + " = " + std::to_string(traps_entry.effectvalue2)); + update_values.push_back(columns[12] + " = '" + EscapeString(traps_entry.message) + "'"); + update_values.push_back(columns[13] + " = " + std::to_string(traps_entry.skill)); + update_values.push_back(columns[14] + " = " + std::to_string(traps_entry.level)); + update_values.push_back(columns[15] + " = " + std::to_string(traps_entry.respawn_time)); + update_values.push_back(columns[16] + " = " + std::to_string(traps_entry.respawn_var)); + update_values.push_back(columns[17] + " = " + std::to_string(traps_entry.triggered_number)); + update_values.push_back(columns[18] + " = " + std::to_string(traps_entry.group)); + update_values.push_back(columns[19] + " = " + std::to_string(traps_entry.despawn_when_triggered)); + update_values.push_back(columns[20] + " = " + std::to_string(traps_entry.undetectable)); + update_values.push_back(columns[21] + " = " + std::to_string(traps_entry.min_expansion)); + update_values.push_back(columns[22] + " = " + std::to_string(traps_entry.max_expansion)); + update_values.push_back(columns[23] + " = '" + EscapeString(traps_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + traps_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Traps InsertOne( + Traps traps_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); + insert_values.push_back(std::to_string(traps_entry.version)); + insert_values.push_back(std::to_string(traps_entry.x)); + insert_values.push_back(std::to_string(traps_entry.y)); + insert_values.push_back(std::to_string(traps_entry.z)); + insert_values.push_back(std::to_string(traps_entry.chance)); + insert_values.push_back(std::to_string(traps_entry.maxzdiff)); + insert_values.push_back(std::to_string(traps_entry.radius)); + insert_values.push_back(std::to_string(traps_entry.effect)); + insert_values.push_back(std::to_string(traps_entry.effectvalue)); + insert_values.push_back(std::to_string(traps_entry.effectvalue2)); + insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); + insert_values.push_back(std::to_string(traps_entry.skill)); + insert_values.push_back(std::to_string(traps_entry.level)); + insert_values.push_back(std::to_string(traps_entry.respawn_time)); + insert_values.push_back(std::to_string(traps_entry.respawn_var)); + insert_values.push_back(std::to_string(traps_entry.triggered_number)); + insert_values.push_back(std::to_string(traps_entry.group)); + insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); + insert_values.push_back(std::to_string(traps_entry.undetectable)); + insert_values.push_back(std::to_string(traps_entry.min_expansion)); + insert_values.push_back(std::to_string(traps_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(traps_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + traps_entry.id = results.LastInsertedID(); + return traps_entry; + } + + traps_entry = NewEntity(); + + return traps_entry; + } + + static int InsertMany( + std::vector traps_entries + ) + { + std::vector insert_chunks; + + for (auto &traps_entry: traps_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); + insert_values.push_back(std::to_string(traps_entry.version)); + insert_values.push_back(std::to_string(traps_entry.x)); + insert_values.push_back(std::to_string(traps_entry.y)); + insert_values.push_back(std::to_string(traps_entry.z)); + insert_values.push_back(std::to_string(traps_entry.chance)); + insert_values.push_back(std::to_string(traps_entry.maxzdiff)); + insert_values.push_back(std::to_string(traps_entry.radius)); + insert_values.push_back(std::to_string(traps_entry.effect)); + insert_values.push_back(std::to_string(traps_entry.effectvalue)); + insert_values.push_back(std::to_string(traps_entry.effectvalue2)); + insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); + insert_values.push_back(std::to_string(traps_entry.skill)); + insert_values.push_back(std::to_string(traps_entry.level)); + insert_values.push_back(std::to_string(traps_entry.respawn_time)); + insert_values.push_back(std::to_string(traps_entry.respawn_var)); + insert_values.push_back(std::to_string(traps_entry.triggered_number)); + insert_values.push_back(std::to_string(traps_entry.group)); + insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); + insert_values.push_back(std::to_string(traps_entry.undetectable)); + insert_values.push_back(std::to_string(traps_entry.min_expansion)); + insert_values.push_back(std::to_string(traps_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(traps_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12] ? row[12] : ""; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + entry.min_expansion = atoi(row[21]); + entry.max_expansion = atoi(row[22]); + entry.content_flags = row[23] ? row[23] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Traps entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.x = atoi(row[3]); + entry.y = atoi(row[4]); + entry.z = atoi(row[5]); + entry.chance = atoi(row[6]); + entry.maxzdiff = atof(row[7]); + entry.radius = atof(row[8]); + entry.effect = atoi(row[9]); + entry.effectvalue = atoi(row[10]); + entry.effectvalue2 = atoi(row[11]); + entry.message = row[12] ? row[12] : ""; + entry.skill = atoi(row[13]); + entry.level = atoi(row[14]); + entry.respawn_time = atoi(row[15]); + entry.respawn_var = atoi(row[16]); + entry.triggered_number = atoi(row[17]); + entry.group = atoi(row[18]); + entry.despawn_when_triggered = atoi(row[19]); + entry.undetectable = atoi(row[20]); + entry.min_expansion = atoi(row[21]); + entry.max_expansion = atoi(row[22]); + entry.content_flags = row[23] ? row[23] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRAPS_REPOSITORY_H diff --git a/common/repositories/base/base_tribute_levels_repository.h b/common/repositories/base/base_tribute_levels_repository.h new file mode 100644 index 000000000..a821b9055 --- /dev/null +++ b/common/repositories/base/base_tribute_levels_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRIBUTE_LEVELS_REPOSITORY_H +#define EQEMU_BASE_TRIBUTE_LEVELS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTributeLevelsRepository { +public: + struct TributeLevels { + int tribute_id; + int level; + int cost; + int item_id; + }; + + static std::string PrimaryKey() + { + return std::string("level"); + } + + static std::vector Columns() + { + return { + "tribute_id", + "level", + "cost", + "item_id", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tribute_levels"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TributeLevels NewEntity() + { + TributeLevels entry{}; + + entry.tribute_id = 0; + entry.level = 0; + entry.cost = 0; + entry.item_id = 0; + + return entry; + } + + static TributeLevels GetTributeLevelsEntry( + const std::vector &tribute_levelss, + int tribute_levels_id + ) + { + for (auto &tribute_levels : tribute_levelss) { + if (tribute_levels.level == tribute_levels_id) { + return tribute_levels; + } + } + + return NewEntity(); + } + + static TributeLevels FindOne( + int tribute_levels_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tribute_levels_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tribute_levels_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tribute_levels_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TributeLevels tribute_levels_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(tribute_levels_entry.cost)); + update_values.push_back(columns[3] + " = " + std::to_string(tribute_levels_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tribute_levels_entry.level + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TributeLevels InsertOne( + TributeLevels tribute_levels_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tribute_levels_entry.cost)); + insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tribute_levels_entry.id = results.LastInsertedID(); + return tribute_levels_entry; + } + + tribute_levels_entry = NewEntity(); + + return tribute_levels_entry; + } + + static int InsertMany( + std::vector tribute_levels_entries + ) + { + std::vector insert_chunks; + + for (auto &tribute_levels_entry: tribute_levels_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tribute_levels_entry.cost)); + insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TributeLevels entry{}; + + entry.tribute_id = atoi(row[0]); + entry.level = atoi(row[1]); + entry.cost = atoi(row[2]); + entry.item_id = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRIBUTE_LEVELS_REPOSITORY_H diff --git a/common/repositories/base/base_tributes_repository.h b/common/repositories/base/base_tributes_repository.h new file mode 100644 index 000000000..fe8ac3ed4 --- /dev/null +++ b/common/repositories/base/base_tributes_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRIBUTES_REPOSITORY_H +#define EQEMU_BASE_TRIBUTES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTributesRepository { +public: + struct Tributes { + int id; + int unknown; + std::string name; + std::string descr; + int8 isguild; + }; + + static std::string PrimaryKey() + { + return std::string("isguild"); + } + + static std::vector Columns() + { + return { + "id", + "unknown", + "name", + "descr", + "isguild", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tributes"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Tributes NewEntity() + { + Tributes entry{}; + + entry.id = 0; + entry.unknown = 0; + entry.name = ""; + entry.descr = ""; + entry.isguild = 0; + + return entry; + } + + static Tributes GetTributesEntry( + const std::vector &tributess, + int tributes_id + ) + { + for (auto &tributes : tributess) { + if (tributes.isguild == tributes_id) { + return tributes; + } + } + + return NewEntity(); + } + + static Tributes FindOne( + int tributes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tributes_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; + entry.isguild = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tributes_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tributes_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Tributes tributes_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = " + std::to_string(tributes_entry.unknown)); + update_values.push_back(columns[2] + " = '" + EscapeString(tributes_entry.name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(tributes_entry.descr) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tributes_entry.isguild + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Tributes InsertOne( + Tributes tributes_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(tributes_entry.unknown)); + insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tributes_entry.id = results.LastInsertedID(); + return tributes_entry; + } + + tributes_entry = NewEntity(); + + return tributes_entry; + } + + static int InsertMany( + std::vector tributes_entries + ) + { + std::vector insert_chunks; + + for (auto &tributes_entry: tributes_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(tributes_entry.unknown)); + insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); + insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; + entry.isguild = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Tributes entry{}; + + entry.id = atoi(row[0]); + entry.unknown = atoi(row[1]); + entry.name = row[2] ? row[2] : ""; + entry.descr = row[3] ? row[3] : ""; + entry.isguild = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRIBUTES_REPOSITORY_H diff --git a/common/repositories/base/base_variables_repository.h b/common/repositories/base/base_variables_repository.h new file mode 100644 index 000000000..a7635a3ae --- /dev/null +++ b/common/repositories/base/base_variables_repository.h @@ -0,0 +1,324 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_VARIABLES_REPOSITORY_H +#define EQEMU_BASE_VARIABLES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseVariablesRepository { +public: + struct Variables { + std::string varname; + std::string value; + std::string information; + std::string ts; + }; + + static std::string PrimaryKey() + { + return std::string("varname"); + } + + static std::vector Columns() + { + return { + "varname", + "value", + "information", + "ts", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("variables"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Variables NewEntity() + { + Variables entry{}; + + entry.varname = ""; + entry.value = ""; + entry.information = ""; + entry.ts = current_timestamp(); + + return entry; + } + + static Variables GetVariablesEntry( + const std::vector &variabless, + int variables_id + ) + { + for (auto &variables : variabless) { + if (variables.varname == variables_id) { + return variables; + } + } + + return NewEntity(); + } + + static Variables FindOne( + int variables_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + variables_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Variables entry{}; + + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int variables_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + variables_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Variables variables_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(variables_entry.value) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(variables_entry.information) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(variables_entry.ts) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + variables_entry.varname + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Variables InsertOne( + Variables variables_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + variables_entry.id = results.LastInsertedID(); + return variables_entry; + } + + variables_entry = NewEntity(); + + return variables_entry; + } + + static int InsertMany( + std::vector variables_entries + ) + { + std::vector insert_chunks; + + for (auto &variables_entry: variables_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); + insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Variables entry{}; + + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Variables entry{}; + + entry.varname = row[0] ? row[0] : ""; + entry.value = row[1] ? row[1] : ""; + entry.information = row[2] ? row[2] : ""; + entry.ts = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_VARIABLES_REPOSITORY_H diff --git a/common/repositories/base/base_veteran_reward_templates_repository.h b/common/repositories/base/base_veteran_reward_templates_repository.h new file mode 100644 index 000000000..6ad7e1093 --- /dev/null +++ b/common/repositories/base/base_veteran_reward_templates_repository.h @@ -0,0 +1,330 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_VETERAN_REWARD_TEMPLATES_REPOSITORY_H +#define EQEMU_BASE_VETERAN_REWARD_TEMPLATES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseVeteranRewardTemplatesRepository { +public: + struct VeteranRewardTemplates { + int claim_id; + std::string name; + int item_id; + int16 charges; + int8 reward_slot; + }; + + static std::string PrimaryKey() + { + return std::string("reward_slot"); + } + + static std::vector Columns() + { + return { + "claim_id", + "name", + "item_id", + "charges", + "reward_slot", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("veteran_reward_templates"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static VeteranRewardTemplates NewEntity() + { + VeteranRewardTemplates entry{}; + + entry.claim_id = 0; + entry.name = ""; + entry.item_id = 0; + entry.charges = 0; + entry.reward_slot = 0; + + return entry; + } + + static VeteranRewardTemplates GetVeteranRewardTemplatesEntry( + const std::vector &veteran_reward_templatess, + int veteran_reward_templates_id + ) + { + for (auto &veteran_reward_templates : veteran_reward_templatess) { + if (veteran_reward_templates.reward_slot == veteran_reward_templates_id) { + return veteran_reward_templates; + } + } + + return NewEntity(); + } + + static VeteranRewardTemplates FindOne( + int veteran_reward_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + veteran_reward_templates_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int veteran_reward_templates_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + veteran_reward_templates_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + VeteranRewardTemplates veteran_reward_templates_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(veteran_reward_templates_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(veteran_reward_templates_entry.item_id)); + update_values.push_back(columns[3] + " = " + std::to_string(veteran_reward_templates_entry.charges)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + veteran_reward_templates_entry.reward_slot + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static VeteranRewardTemplates InsertOne( + VeteranRewardTemplates veteran_reward_templates_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + veteran_reward_templates_entry.id = results.LastInsertedID(); + return veteran_reward_templates_entry; + } + + veteran_reward_templates_entry = NewEntity(); + + return veteran_reward_templates_entry; + } + + static int InsertMany( + std::vector veteran_reward_templates_entries + ) + { + std::vector insert_chunks; + + for (auto &veteran_reward_templates_entry: veteran_reward_templates_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + VeteranRewardTemplates entry{}; + + entry.claim_id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.item_id = atoi(row[2]); + entry.charges = atoi(row[3]); + entry.reward_slot = atoi(row[4]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_VETERAN_REWARD_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h new file mode 100644 index 000000000..fbe7c211d --- /dev/null +++ b/common/repositories/base/base_zone_points_repository.h @@ -0,0 +1,468 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ZONE_POINTS_REPOSITORY_H +#define EQEMU_BASE_ZONE_POINTS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseZonePointsRepository { +public: + struct ZonePoints { + int id; + std::string zone; + int version; + int16 number; + float y; + float x; + float z; + float heading; + float target_y; + float target_x; + float target_z; + float target_heading; + int16 zoneinst; + int target_zone_id; + int target_instance; + float buffer; + int client_version_mask; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "zone", + "version", + "number", + "y", + "x", + "z", + "heading", + "target_y", + "target_x", + "target_z", + "target_heading", + "zoneinst", + "target_zone_id", + "target_instance", + "buffer", + "client_version_mask", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone_points"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ZonePoints NewEntity() + { + ZonePoints entry{}; + + entry.id = 0; + entry.zone = ""; + entry.version = 0; + entry.number = 1; + entry.y = 0; + entry.x = 0; + entry.z = 0; + entry.heading = 0; + entry.target_y = 0; + entry.target_x = 0; + entry.target_z = 0; + entry.target_heading = 0; + entry.zoneinst = 0; + entry.target_zone_id = 0; + entry.target_instance = 0; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static ZonePoints GetZonePointsEntry( + const std::vector &zone_pointss, + int zone_points_id + ) + { + for (auto &zone_points : zone_pointss) { + if (zone_points.id == zone_points_id) { + return zone_points; + } + } + + return NewEntity(); + } + + static ZonePoints FindOne( + int zone_points_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_points_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_points_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_points_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ZonePoints zone_points_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(zone_points_entry.zone) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(zone_points_entry.version)); + update_values.push_back(columns[3] + " = " + std::to_string(zone_points_entry.number)); + update_values.push_back(columns[4] + " = " + std::to_string(zone_points_entry.y)); + update_values.push_back(columns[5] + " = " + std::to_string(zone_points_entry.x)); + update_values.push_back(columns[6] + " = " + std::to_string(zone_points_entry.z)); + update_values.push_back(columns[7] + " = " + std::to_string(zone_points_entry.heading)); + update_values.push_back(columns[8] + " = " + std::to_string(zone_points_entry.target_y)); + update_values.push_back(columns[9] + " = " + std::to_string(zone_points_entry.target_x)); + update_values.push_back(columns[10] + " = " + std::to_string(zone_points_entry.target_z)); + update_values.push_back(columns[11] + " = " + std::to_string(zone_points_entry.target_heading)); + update_values.push_back(columns[12] + " = " + std::to_string(zone_points_entry.zoneinst)); + update_values.push_back(columns[13] + " = " + std::to_string(zone_points_entry.target_zone_id)); + update_values.push_back(columns[14] + " = " + std::to_string(zone_points_entry.target_instance)); + update_values.push_back(columns[15] + " = " + std::to_string(zone_points_entry.buffer)); + update_values.push_back(columns[16] + " = " + std::to_string(zone_points_entry.client_version_mask)); + update_values.push_back(columns[17] + " = " + std::to_string(zone_points_entry.min_expansion)); + update_values.push_back(columns[18] + " = " + std::to_string(zone_points_entry.max_expansion)); + update_values.push_back(columns[19] + " = '" + EscapeString(zone_points_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_points_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ZonePoints InsertOne( + ZonePoints zone_points_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.version)); + insert_values.push_back(std::to_string(zone_points_entry.number)); + insert_values.push_back(std::to_string(zone_points_entry.y)); + insert_values.push_back(std::to_string(zone_points_entry.x)); + insert_values.push_back(std::to_string(zone_points_entry.z)); + insert_values.push_back(std::to_string(zone_points_entry.heading)); + insert_values.push_back(std::to_string(zone_points_entry.target_y)); + insert_values.push_back(std::to_string(zone_points_entry.target_x)); + insert_values.push_back(std::to_string(zone_points_entry.target_z)); + insert_values.push_back(std::to_string(zone_points_entry.target_heading)); + insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); + insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); + insert_values.push_back(std::to_string(zone_points_entry.target_instance)); + insert_values.push_back(std::to_string(zone_points_entry.buffer)); + insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); + insert_values.push_back(std::to_string(zone_points_entry.min_expansion)); + insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_points_entry.id = results.LastInsertedID(); + return zone_points_entry; + } + + zone_points_entry = NewEntity(); + + return zone_points_entry; + } + + static int InsertMany( + std::vector zone_points_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_points_entry: zone_points_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.version)); + insert_values.push_back(std::to_string(zone_points_entry.number)); + insert_values.push_back(std::to_string(zone_points_entry.y)); + insert_values.push_back(std::to_string(zone_points_entry.x)); + insert_values.push_back(std::to_string(zone_points_entry.z)); + insert_values.push_back(std::to_string(zone_points_entry.heading)); + insert_values.push_back(std::to_string(zone_points_entry.target_y)); + insert_values.push_back(std::to_string(zone_points_entry.target_x)); + insert_values.push_back(std::to_string(zone_points_entry.target_z)); + insert_values.push_back(std::to_string(zone_points_entry.target_heading)); + insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); + insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); + insert_values.push_back(std::to_string(zone_points_entry.target_instance)); + insert_values.push_back(std::to_string(zone_points_entry.buffer)); + insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); + insert_values.push_back(std::to_string(zone_points_entry.min_expansion)); + insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ZonePoints entry{}; + + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = atof(row[4]); + entry.x = atof(row[5]); + entry.z = atof(row[6]); + entry.heading = atof(row[7]); + entry.target_y = atof(row[8]); + entry.target_x = atof(row[9]); + entry.target_z = atof(row[10]); + entry.target_heading = atof(row[11]); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = atof(row[15]); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ZONE_POINTS_REPOSITORY_H diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h new file mode 100644 index 000000000..172c172c2 --- /dev/null +++ b/common/repositories/base/base_zone_repository.h @@ -0,0 +1,1062 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_ZONE_REPOSITORY_H +#define EQEMU_BASE_ZONE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseZoneRepository { +public: + struct Zone { + std::string short_name; + int id; + std::string file_name; + std::string long_name; + std::string map_file_name; + float safe_x; + float safe_y; + float safe_z; + float graveyard_id; + int8 min_level; + int8 min_status; + int zoneidnumber; + int8 version; + int timezone; + int maxclients; + int ruleset; + std::string note; + float underworld; + float minclip; + float maxclip; + float fog_minclip; + float fog_maxclip; + int8 fog_blue; + int8 fog_red; + int8 fog_green; + int8 sky; + int8 ztype; + float zone_exp_multiplier; + float walkspeed; + int8 time_type; + int8 fog_red1; + int8 fog_green1; + int8 fog_blue1; + float fog_minclip1; + float fog_maxclip1; + int8 fog_red2; + int8 fog_green2; + int8 fog_blue2; + float fog_minclip2; + float fog_maxclip2; + int8 fog_red3; + int8 fog_green3; + int8 fog_blue3; + float fog_minclip3; + float fog_maxclip3; + int8 fog_red4; + int8 fog_green4; + int8 fog_blue4; + float fog_minclip4; + float fog_maxclip4; + float fog_density; + std::string flag_needed; + int8 canbind; + int8 cancombat; + int8 canlevitate; + int8 castoutdoor; + int8 hotzone; + int8 insttype; + int shutdowndelay; + int8 peqzone; + int8 expansion; + int8 suspendbuffs; + int rain_chance1; + int rain_chance2; + int rain_chance3; + int rain_chance4; + int rain_duration1; + int rain_duration2; + int rain_duration3; + int rain_duration4; + int snow_chance1; + int snow_chance2; + int snow_chance3; + int snow_chance4; + int snow_duration1; + int snow_duration2; + int snow_duration3; + int snow_duration4; + float gravity; + int type; + int8 skylock; + int fast_regen_hp; + int fast_regen_mana; + int fast_regen_endurance; + int npc_max_aggro_dist; + int max_movement_update_range; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "short_name", + "id", + "file_name", + "long_name", + "map_file_name", + "safe_x", + "safe_y", + "safe_z", + "graveyard_id", + "min_level", + "min_status", + "zoneidnumber", + "version", + "timezone", + "maxclients", + "ruleset", + "note", + "underworld", + "minclip", + "maxclip", + "fog_minclip", + "fog_maxclip", + "fog_blue", + "fog_red", + "fog_green", + "sky", + "ztype", + "zone_exp_multiplier", + "walkspeed", + "time_type", + "fog_red1", + "fog_green1", + "fog_blue1", + "fog_minclip1", + "fog_maxclip1", + "fog_red2", + "fog_green2", + "fog_blue2", + "fog_minclip2", + "fog_maxclip2", + "fog_red3", + "fog_green3", + "fog_blue3", + "fog_minclip3", + "fog_maxclip3", + "fog_red4", + "fog_green4", + "fog_blue4", + "fog_minclip4", + "fog_maxclip4", + "fog_density", + "flag_needed", + "canbind", + "cancombat", + "canlevitate", + "castoutdoor", + "hotzone", + "insttype", + "shutdowndelay", + "peqzone", + "expansion", + "suspendbuffs", + "rain_chance1", + "rain_chance2", + "rain_chance3", + "rain_chance4", + "rain_duration1", + "rain_duration2", + "rain_duration3", + "rain_duration4", + "snow_chance1", + "snow_chance2", + "snow_chance3", + "snow_chance4", + "snow_duration1", + "snow_duration2", + "snow_duration3", + "snow_duration4", + "gravity", + "type", + "skylock", + "fast_regen_hp", + "fast_regen_mana", + "fast_regen_endurance", + "npc_max_aggro_dist", + "max_movement_update_range", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("zone"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Zone NewEntity() + { + Zone entry{}; + + entry.short_name = ""; + entry.id = 0; + entry.file_name = ""; + entry.long_name = ""; + entry.map_file_name = ""; + entry.safe_x = 0; + entry.safe_y = 0; + entry.safe_z = 0; + entry.graveyard_id = 0; + entry.min_level = 0; + entry.min_status = 0; + entry.zoneidnumber = 0; + entry.version = 0; + entry.timezone = 0; + entry.maxclients = 0; + entry.ruleset = 0; + entry.note = ""; + entry.underworld = 0; + entry.minclip = 450; + entry.maxclip = 450; + entry.fog_minclip = 450; + entry.fog_maxclip = 450; + entry.fog_blue = 0; + entry.fog_red = 0; + entry.fog_green = 0; + entry.sky = 1; + entry.ztype = 1; + entry.zone_exp_multiplier = 0.00; + entry.walkspeed = 0.4; + entry.time_type = 2; + entry.fog_red1 = 0; + entry.fog_green1 = 0; + entry.fog_blue1 = 0; + entry.fog_minclip1 = 450; + entry.fog_maxclip1 = 450; + entry.fog_red2 = 0; + entry.fog_green2 = 0; + entry.fog_blue2 = 0; + entry.fog_minclip2 = 450; + entry.fog_maxclip2 = 450; + entry.fog_red3 = 0; + entry.fog_green3 = 0; + entry.fog_blue3 = 0; + entry.fog_minclip3 = 450; + entry.fog_maxclip3 = 450; + entry.fog_red4 = 0; + entry.fog_green4 = 0; + entry.fog_blue4 = 0; + entry.fog_minclip4 = 450; + entry.fog_maxclip4 = 450; + entry.fog_density = 0; + entry.flag_needed = ""; + entry.canbind = 1; + entry.cancombat = 1; + entry.canlevitate = 1; + entry.castoutdoor = 1; + entry.hotzone = 0; + entry.insttype = 0; + entry.shutdowndelay = 5000; + entry.peqzone = 1; + entry.expansion = 0; + entry.suspendbuffs = 0; + entry.rain_chance1 = 0; + entry.rain_chance2 = 0; + entry.rain_chance3 = 0; + entry.rain_chance4 = 0; + entry.rain_duration1 = 0; + entry.rain_duration2 = 0; + entry.rain_duration3 = 0; + entry.rain_duration4 = 0; + entry.snow_chance1 = 0; + entry.snow_chance2 = 0; + entry.snow_chance3 = 0; + entry.snow_chance4 = 0; + entry.snow_duration1 = 0; + entry.snow_duration2 = 0; + entry.snow_duration3 = 0; + entry.snow_duration4 = 0; + entry.gravity = 0.4; + entry.type = 0; + entry.skylock = 0; + entry.fast_regen_hp = 180; + entry.fast_regen_mana = 180; + entry.fast_regen_endurance = 180; + entry.npc_max_aggro_dist = 600; + entry.max_movement_update_range = 600; + + return entry; + } + + static Zone GetZoneEntry( + const std::vector &zones, + int zone_id + ) + { + for (auto &zone : zones) { + if (zone.id == zone_id) { + return zone; + } + } + + return NewEntity(); + } + + static Zone FindOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + zone_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int zone_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + zone_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Zone zone_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = '" + EscapeString(zone_entry.short_name) + "'"); + update_values.push_back(columns[2] + " = '" + EscapeString(zone_entry.file_name) + "'"); + update_values.push_back(columns[3] + " = '" + EscapeString(zone_entry.long_name) + "'"); + update_values.push_back(columns[4] + " = '" + EscapeString(zone_entry.map_file_name) + "'"); + update_values.push_back(columns[5] + " = " + std::to_string(zone_entry.safe_x)); + update_values.push_back(columns[6] + " = " + std::to_string(zone_entry.safe_y)); + update_values.push_back(columns[7] + " = " + std::to_string(zone_entry.safe_z)); + update_values.push_back(columns[8] + " = " + std::to_string(zone_entry.graveyard_id)); + update_values.push_back(columns[9] + " = " + std::to_string(zone_entry.min_level)); + update_values.push_back(columns[10] + " = " + std::to_string(zone_entry.min_status)); + update_values.push_back(columns[11] + " = " + std::to_string(zone_entry.zoneidnumber)); + update_values.push_back(columns[12] + " = " + std::to_string(zone_entry.version)); + update_values.push_back(columns[13] + " = " + std::to_string(zone_entry.timezone)); + update_values.push_back(columns[14] + " = " + std::to_string(zone_entry.maxclients)); + update_values.push_back(columns[15] + " = " + std::to_string(zone_entry.ruleset)); + update_values.push_back(columns[16] + " = '" + EscapeString(zone_entry.note) + "'"); + update_values.push_back(columns[17] + " = " + std::to_string(zone_entry.underworld)); + update_values.push_back(columns[18] + " = " + std::to_string(zone_entry.minclip)); + update_values.push_back(columns[19] + " = " + std::to_string(zone_entry.maxclip)); + update_values.push_back(columns[20] + " = " + std::to_string(zone_entry.fog_minclip)); + update_values.push_back(columns[21] + " = " + std::to_string(zone_entry.fog_maxclip)); + update_values.push_back(columns[22] + " = " + std::to_string(zone_entry.fog_blue)); + update_values.push_back(columns[23] + " = " + std::to_string(zone_entry.fog_red)); + update_values.push_back(columns[24] + " = " + std::to_string(zone_entry.fog_green)); + update_values.push_back(columns[25] + " = " + std::to_string(zone_entry.sky)); + update_values.push_back(columns[26] + " = " + std::to_string(zone_entry.ztype)); + update_values.push_back(columns[27] + " = " + std::to_string(zone_entry.zone_exp_multiplier)); + update_values.push_back(columns[28] + " = " + std::to_string(zone_entry.walkspeed)); + update_values.push_back(columns[29] + " = " + std::to_string(zone_entry.time_type)); + update_values.push_back(columns[30] + " = " + std::to_string(zone_entry.fog_red1)); + update_values.push_back(columns[31] + " = " + std::to_string(zone_entry.fog_green1)); + update_values.push_back(columns[32] + " = " + std::to_string(zone_entry.fog_blue1)); + update_values.push_back(columns[33] + " = " + std::to_string(zone_entry.fog_minclip1)); + update_values.push_back(columns[34] + " = " + std::to_string(zone_entry.fog_maxclip1)); + update_values.push_back(columns[35] + " = " + std::to_string(zone_entry.fog_red2)); + update_values.push_back(columns[36] + " = " + std::to_string(zone_entry.fog_green2)); + update_values.push_back(columns[37] + " = " + std::to_string(zone_entry.fog_blue2)); + update_values.push_back(columns[38] + " = " + std::to_string(zone_entry.fog_minclip2)); + update_values.push_back(columns[39] + " = " + std::to_string(zone_entry.fog_maxclip2)); + update_values.push_back(columns[40] + " = " + std::to_string(zone_entry.fog_red3)); + update_values.push_back(columns[41] + " = " + std::to_string(zone_entry.fog_green3)); + update_values.push_back(columns[42] + " = " + std::to_string(zone_entry.fog_blue3)); + update_values.push_back(columns[43] + " = " + std::to_string(zone_entry.fog_minclip3)); + update_values.push_back(columns[44] + " = " + std::to_string(zone_entry.fog_maxclip3)); + update_values.push_back(columns[45] + " = " + std::to_string(zone_entry.fog_red4)); + update_values.push_back(columns[46] + " = " + std::to_string(zone_entry.fog_green4)); + update_values.push_back(columns[47] + " = " + std::to_string(zone_entry.fog_blue4)); + update_values.push_back(columns[48] + " = " + std::to_string(zone_entry.fog_minclip4)); + update_values.push_back(columns[49] + " = " + std::to_string(zone_entry.fog_maxclip4)); + update_values.push_back(columns[50] + " = " + std::to_string(zone_entry.fog_density)); + update_values.push_back(columns[51] + " = '" + EscapeString(zone_entry.flag_needed) + "'"); + update_values.push_back(columns[52] + " = " + std::to_string(zone_entry.canbind)); + update_values.push_back(columns[53] + " = " + std::to_string(zone_entry.cancombat)); + update_values.push_back(columns[54] + " = " + std::to_string(zone_entry.canlevitate)); + update_values.push_back(columns[55] + " = " + std::to_string(zone_entry.castoutdoor)); + update_values.push_back(columns[56] + " = " + std::to_string(zone_entry.hotzone)); + update_values.push_back(columns[57] + " = " + std::to_string(zone_entry.insttype)); + update_values.push_back(columns[58] + " = " + std::to_string(zone_entry.shutdowndelay)); + update_values.push_back(columns[59] + " = " + std::to_string(zone_entry.peqzone)); + update_values.push_back(columns[60] + " = " + std::to_string(zone_entry.expansion)); + update_values.push_back(columns[61] + " = " + std::to_string(zone_entry.suspendbuffs)); + update_values.push_back(columns[62] + " = " + std::to_string(zone_entry.rain_chance1)); + update_values.push_back(columns[63] + " = " + std::to_string(zone_entry.rain_chance2)); + update_values.push_back(columns[64] + " = " + std::to_string(zone_entry.rain_chance3)); + update_values.push_back(columns[65] + " = " + std::to_string(zone_entry.rain_chance4)); + update_values.push_back(columns[66] + " = " + std::to_string(zone_entry.rain_duration1)); + update_values.push_back(columns[67] + " = " + std::to_string(zone_entry.rain_duration2)); + update_values.push_back(columns[68] + " = " + std::to_string(zone_entry.rain_duration3)); + update_values.push_back(columns[69] + " = " + std::to_string(zone_entry.rain_duration4)); + update_values.push_back(columns[70] + " = " + std::to_string(zone_entry.snow_chance1)); + update_values.push_back(columns[71] + " = " + std::to_string(zone_entry.snow_chance2)); + update_values.push_back(columns[72] + " = " + std::to_string(zone_entry.snow_chance3)); + update_values.push_back(columns[73] + " = " + std::to_string(zone_entry.snow_chance4)); + update_values.push_back(columns[74] + " = " + std::to_string(zone_entry.snow_duration1)); + update_values.push_back(columns[75] + " = " + std::to_string(zone_entry.snow_duration2)); + update_values.push_back(columns[76] + " = " + std::to_string(zone_entry.snow_duration3)); + update_values.push_back(columns[77] + " = " + std::to_string(zone_entry.snow_duration4)); + update_values.push_back(columns[78] + " = " + std::to_string(zone_entry.gravity)); + update_values.push_back(columns[79] + " = " + std::to_string(zone_entry.type)); + update_values.push_back(columns[80] + " = " + std::to_string(zone_entry.skylock)); + update_values.push_back(columns[81] + " = " + std::to_string(zone_entry.fast_regen_hp)); + update_values.push_back(columns[82] + " = " + std::to_string(zone_entry.fast_regen_mana)); + update_values.push_back(columns[83] + " = " + std::to_string(zone_entry.fast_regen_endurance)); + update_values.push_back(columns[84] + " = " + std::to_string(zone_entry.npc_max_aggro_dist)); + update_values.push_back(columns[85] + " = " + std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + zone_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Zone InsertOne( + Zone zone_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back(std::to_string(zone_entry.gravity)); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + zone_entry.id = results.LastInsertedID(); + return zone_entry; + } + + zone_entry = NewEntity(); + + return zone_entry; + } + + static int InsertMany( + std::vector zone_entries + ) + { + std::vector insert_chunks; + + for (auto &zone_entry: zone_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); + insert_values.push_back(std::to_string(zone_entry.safe_x)); + insert_values.push_back(std::to_string(zone_entry.safe_y)); + insert_values.push_back(std::to_string(zone_entry.safe_z)); + insert_values.push_back(std::to_string(zone_entry.graveyard_id)); + insert_values.push_back(std::to_string(zone_entry.min_level)); + insert_values.push_back(std::to_string(zone_entry.min_status)); + insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); + insert_values.push_back(std::to_string(zone_entry.version)); + insert_values.push_back(std::to_string(zone_entry.timezone)); + insert_values.push_back(std::to_string(zone_entry.maxclients)); + insert_values.push_back(std::to_string(zone_entry.ruleset)); + insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); + insert_values.push_back(std::to_string(zone_entry.underworld)); + insert_values.push_back(std::to_string(zone_entry.minclip)); + insert_values.push_back(std::to_string(zone_entry.maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); + insert_values.push_back(std::to_string(zone_entry.fog_blue)); + insert_values.push_back(std::to_string(zone_entry.fog_red)); + insert_values.push_back(std::to_string(zone_entry.fog_green)); + insert_values.push_back(std::to_string(zone_entry.sky)); + insert_values.push_back(std::to_string(zone_entry.ztype)); + insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); + insert_values.push_back(std::to_string(zone_entry.walkspeed)); + insert_values.push_back(std::to_string(zone_entry.time_type)); + insert_values.push_back(std::to_string(zone_entry.fog_red1)); + insert_values.push_back(std::to_string(zone_entry.fog_green1)); + insert_values.push_back(std::to_string(zone_entry.fog_blue1)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); + insert_values.push_back(std::to_string(zone_entry.fog_red2)); + insert_values.push_back(std::to_string(zone_entry.fog_green2)); + insert_values.push_back(std::to_string(zone_entry.fog_blue2)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); + insert_values.push_back(std::to_string(zone_entry.fog_red3)); + insert_values.push_back(std::to_string(zone_entry.fog_green3)); + insert_values.push_back(std::to_string(zone_entry.fog_blue3)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); + insert_values.push_back(std::to_string(zone_entry.fog_red4)); + insert_values.push_back(std::to_string(zone_entry.fog_green4)); + insert_values.push_back(std::to_string(zone_entry.fog_blue4)); + insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); + insert_values.push_back(std::to_string(zone_entry.fog_density)); + insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); + insert_values.push_back(std::to_string(zone_entry.canbind)); + insert_values.push_back(std::to_string(zone_entry.cancombat)); + insert_values.push_back(std::to_string(zone_entry.canlevitate)); + insert_values.push_back(std::to_string(zone_entry.castoutdoor)); + insert_values.push_back(std::to_string(zone_entry.hotzone)); + insert_values.push_back(std::to_string(zone_entry.insttype)); + insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); + insert_values.push_back(std::to_string(zone_entry.peqzone)); + insert_values.push_back(std::to_string(zone_entry.expansion)); + insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); + insert_values.push_back(std::to_string(zone_entry.rain_chance1)); + insert_values.push_back(std::to_string(zone_entry.rain_chance2)); + insert_values.push_back(std::to_string(zone_entry.rain_chance3)); + insert_values.push_back(std::to_string(zone_entry.rain_chance4)); + insert_values.push_back(std::to_string(zone_entry.rain_duration1)); + insert_values.push_back(std::to_string(zone_entry.rain_duration2)); + insert_values.push_back(std::to_string(zone_entry.rain_duration3)); + insert_values.push_back(std::to_string(zone_entry.rain_duration4)); + insert_values.push_back(std::to_string(zone_entry.snow_chance1)); + insert_values.push_back(std::to_string(zone_entry.snow_chance2)); + insert_values.push_back(std::to_string(zone_entry.snow_chance3)); + insert_values.push_back(std::to_string(zone_entry.snow_chance4)); + insert_values.push_back(std::to_string(zone_entry.snow_duration1)); + insert_values.push_back(std::to_string(zone_entry.snow_duration2)); + insert_values.push_back(std::to_string(zone_entry.snow_duration3)); + insert_values.push_back(std::to_string(zone_entry.snow_duration4)); + insert_values.push_back(std::to_string(zone_entry.gravity)); + insert_values.push_back(std::to_string(zone_entry.type)); + insert_values.push_back(std::to_string(zone_entry.skylock)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); + insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); + insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); + insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Zone entry{}; + + entry.short_name = row[0] ? row[0] : ""; + entry.id = atoi(row[1]); + entry.file_name = row[2] ? row[2] : ""; + entry.long_name = row[3] ? row[3] : ""; + entry.map_file_name = row[4] ? row[4] : ""; + entry.safe_x = atof(row[5]); + entry.safe_y = atof(row[6]); + entry.safe_z = atof(row[7]); + entry.graveyard_id = atof(row[8]); + entry.min_level = atoi(row[9]); + entry.min_status = atoi(row[10]); + entry.zoneidnumber = atoi(row[11]); + entry.version = atoi(row[12]); + entry.timezone = atoi(row[13]); + entry.maxclients = atoi(row[14]); + entry.ruleset = atoi(row[15]); + entry.note = row[16] ? row[16] : ""; + entry.underworld = atof(row[17]); + entry.minclip = atof(row[18]); + entry.maxclip = atof(row[19]); + entry.fog_minclip = atof(row[20]); + entry.fog_maxclip = atof(row[21]); + entry.fog_blue = atoi(row[22]); + entry.fog_red = atoi(row[23]); + entry.fog_green = atoi(row[24]); + entry.sky = atoi(row[25]); + entry.ztype = atoi(row[26]); + entry.zone_exp_multiplier = atof(row[27]); + entry.walkspeed = atof(row[28]); + entry.time_type = atoi(row[29]); + entry.fog_red1 = atoi(row[30]); + entry.fog_green1 = atoi(row[31]); + entry.fog_blue1 = atoi(row[32]); + entry.fog_minclip1 = atof(row[33]); + entry.fog_maxclip1 = atof(row[34]); + entry.fog_red2 = atoi(row[35]); + entry.fog_green2 = atoi(row[36]); + entry.fog_blue2 = atoi(row[37]); + entry.fog_minclip2 = atof(row[38]); + entry.fog_maxclip2 = atof(row[39]); + entry.fog_red3 = atoi(row[40]); + entry.fog_green3 = atoi(row[41]); + entry.fog_blue3 = atoi(row[42]); + entry.fog_minclip3 = atof(row[43]); + entry.fog_maxclip3 = atof(row[44]); + entry.fog_red4 = atoi(row[45]); + entry.fog_green4 = atoi(row[46]); + entry.fog_blue4 = atoi(row[47]); + entry.fog_minclip4 = atof(row[48]); + entry.fog_maxclip4 = atof(row[49]); + entry.fog_density = atof(row[50]); + entry.flag_needed = row[51] ? row[51] : ""; + entry.canbind = atoi(row[52]); + entry.cancombat = atoi(row[53]); + entry.canlevitate = atoi(row[54]); + entry.castoutdoor = atoi(row[55]); + entry.hotzone = atoi(row[56]); + entry.insttype = atoi(row[57]); + entry.shutdowndelay = atoi(row[58]); + entry.peqzone = atoi(row[59]); + entry.expansion = atoi(row[60]); + entry.suspendbuffs = atoi(row[61]); + entry.rain_chance1 = atoi(row[62]); + entry.rain_chance2 = atoi(row[63]); + entry.rain_chance3 = atoi(row[64]); + entry.rain_chance4 = atoi(row[65]); + entry.rain_duration1 = atoi(row[66]); + entry.rain_duration2 = atoi(row[67]); + entry.rain_duration3 = atoi(row[68]); + entry.rain_duration4 = atoi(row[69]); + entry.snow_chance1 = atoi(row[70]); + entry.snow_chance2 = atoi(row[71]); + entry.snow_chance3 = atoi(row[72]); + entry.snow_chance4 = atoi(row[73]); + entry.snow_duration1 = atoi(row[74]); + entry.snow_duration2 = atoi(row[75]); + entry.snow_duration3 = atoi(row[76]); + entry.snow_duration4 = atoi(row[77]); + entry.gravity = atof(row[78]); + entry.type = atoi(row[79]); + entry.skylock = atoi(row[80]); + entry.fast_regen_hp = atoi(row[81]); + entry.fast_regen_mana = atoi(row[82]); + entry.fast_regen_endurance = atoi(row[83]); + entry.npc_max_aggro_dist = atoi(row[84]); + entry.max_movement_update_range = atoi(row[85]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_ZONE_REPOSITORY_H diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index 08a190239..ee6832e1a 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -23,344 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_base_data_repository.h" -class BaseDataRepository { +class BaseDataRepository: public BaseBaseDataRepository { public: - struct BaseData { - int level; - int class; - float hp; - float mana; - float end; - float unk1; - float unk2; - float hp_fac; - float mana_fac; - float end_fac; - }; - static std::string PrimaryKey() - { - return std::string("class"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BaseDataRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BaseDataRepository::GetWhereNeverExpires() + * BaseDataRepository::GetWhereXAndY() + * BaseDataRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "level", - "class", - "hp", - "mana", - "end", - "unk1", - "unk2", - "hp_fac", - "mana_fac", - "end_fac", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("base_data"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static BaseData NewEntity() - { - BaseData entry{}; - - entry.level = 0; - entry.class = 0; - entry.hp = 0; - entry.mana = 0; - entry.end = 0; - entry.unk1 = 0; - entry.unk2 = 0; - entry.hp_fac = 0; - entry.mana_fac = 0; - entry.end_fac = 0; - - return entry; - } - - static BaseData GetBaseDataEntry( - const std::vector &base_datas, - int base_data_id - ) - { - for (auto &base_data : base_datas) { - if (base_data.class == base_data_id) { - return base_data; - } - } - - return NewEntity(); - } - - static BaseData FindOne( - int base_data_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - base_data_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - BaseData entry{}; - - entry.level = atoi(row[0]); - entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int base_data_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - base_data_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - BaseData base_data_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(base_data_entry.hp)); - update_values.push_back(columns[3] + " = " + std::to_string(base_data_entry.mana)); - update_values.push_back(columns[4] + " = " + std::to_string(base_data_entry.end)); - update_values.push_back(columns[5] + " = " + std::to_string(base_data_entry.unk1)); - update_values.push_back(columns[6] + " = " + std::to_string(base_data_entry.unk2)); - update_values.push_back(columns[7] + " = " + std::to_string(base_data_entry.hp_fac)); - update_values.push_back(columns[8] + " = " + std::to_string(base_data_entry.mana_fac)); - update_values.push_back(columns[9] + " = " + std::to_string(base_data_entry.end_fac)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - base_data_entry.class - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static BaseData InsertOne( - BaseData base_data_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(base_data_entry.hp)); - insert_values.push_back(std::to_string(base_data_entry.mana)); - insert_values.push_back(std::to_string(base_data_entry.end)); - insert_values.push_back(std::to_string(base_data_entry.unk1)); - insert_values.push_back(std::to_string(base_data_entry.unk2)); - insert_values.push_back(std::to_string(base_data_entry.hp_fac)); - insert_values.push_back(std::to_string(base_data_entry.mana_fac)); - insert_values.push_back(std::to_string(base_data_entry.end_fac)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - base_data_entry.id = results.LastInsertedID(); - return base_data_entry; - } - - base_data_entry = BaseDataRepository::NewEntity(); - - return base_data_entry; - } - - static int InsertMany( - std::vector base_data_entries - ) - { - std::vector insert_chunks; - - for (auto &base_data_entry: base_data_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(base_data_entry.hp)); - insert_values.push_back(std::to_string(base_data_entry.mana)); - insert_values.push_back(std::to_string(base_data_entry.end)); - insert_values.push_back(std::to_string(base_data_entry.unk1)); - insert_values.push_back(std::to_string(base_data_entry.unk2)); - insert_values.push_back(std::to_string(base_data_entry.hp_fac)); - insert_values.push_back(std::to_string(base_data_entry.mana_fac)); - insert_values.push_back(std::to_string(base_data_entry.end_fac)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BaseData entry{}; - - entry.level = atoi(row[0]); - entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BaseData entry{}; - - entry.level = atoi(row[0]); - entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index 57138a2ad..662430e03 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -23,365 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_blocked_spells_repository.h" -class BlockedSpellsRepository { +class BlockedSpellsRepository: public BaseBlockedSpellsRepository { public: - struct BlockedSpells { - int id; - int spellid; - int8 type; - int zoneid; - float x; - float y; - float z; - float x_diff; - float y_diff; - float z_diff; - std::string message; - std::string description; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BlockedSpellsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BlockedSpellsRepository::GetWhereNeverExpires() + * BlockedSpellsRepository::GetWhereXAndY() + * BlockedSpellsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "spellid", - "type", - "zoneid", - "x", - "y", - "z", - "x_diff", - "y_diff", - "z_diff", - "message", - "description", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("blocked_spells"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static BlockedSpells NewEntity() - { - BlockedSpells entry{}; - - entry.id = 0; - entry.spellid = 0; - entry.type = 0; - entry.zoneid = 0; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.x_diff = 0; - entry.y_diff = 0; - entry.z_diff = 0; - entry.message = ""; - entry.description = ""; - - return entry; - } - - static BlockedSpells GetBlockedSpellsEntry( - const std::vector &blocked_spellss, - int blocked_spells_id - ) - { - for (auto &blocked_spells : blocked_spellss) { - if (blocked_spells.id == blocked_spells_id) { - return blocked_spells; - } - } - - return NewEntity(); - } - - static BlockedSpells FindOne( - int blocked_spells_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - blocked_spells_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - BlockedSpells entry{}; - - entry.id = atoi(row[0]); - entry.spellid = atoi(row[1]); - entry.type = atoi(row[2]); - entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); - entry.message = row[10] ? row[10] : ""; - entry.description = row[11] ? row[11] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int blocked_spells_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - blocked_spells_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - BlockedSpells blocked_spells_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(blocked_spells_entry.spellid)); - update_values.push_back(columns[2] + " = " + std::to_string(blocked_spells_entry.type)); - update_values.push_back(columns[3] + " = " + std::to_string(blocked_spells_entry.zoneid)); - update_values.push_back(columns[4] + " = " + std::to_string(blocked_spells_entry.x)); - update_values.push_back(columns[5] + " = " + std::to_string(blocked_spells_entry.y)); - update_values.push_back(columns[6] + " = " + std::to_string(blocked_spells_entry.z)); - update_values.push_back(columns[7] + " = " + std::to_string(blocked_spells_entry.x_diff)); - update_values.push_back(columns[8] + " = " + std::to_string(blocked_spells_entry.y_diff)); - update_values.push_back(columns[9] + " = " + std::to_string(blocked_spells_entry.z_diff)); - update_values.push_back(columns[10] + " = '" + EscapeString(blocked_spells_entry.message) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(blocked_spells_entry.description) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - blocked_spells_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static BlockedSpells InsertOne( - BlockedSpells blocked_spells_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); - insert_values.push_back(std::to_string(blocked_spells_entry.type)); - insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); - insert_values.push_back(std::to_string(blocked_spells_entry.x)); - insert_values.push_back(std::to_string(blocked_spells_entry.y)); - insert_values.push_back(std::to_string(blocked_spells_entry.z)); - insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); - insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); - insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - blocked_spells_entry.id = results.LastInsertedID(); - return blocked_spells_entry; - } - - blocked_spells_entry = BlockedSpellsRepository::NewEntity(); - - return blocked_spells_entry; - } - - static int InsertMany( - std::vector blocked_spells_entries - ) - { - std::vector insert_chunks; - - for (auto &blocked_spells_entry: blocked_spells_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(blocked_spells_entry.spellid)); - insert_values.push_back(std::to_string(blocked_spells_entry.type)); - insert_values.push_back(std::to_string(blocked_spells_entry.zoneid)); - insert_values.push_back(std::to_string(blocked_spells_entry.x)); - insert_values.push_back(std::to_string(blocked_spells_entry.y)); - insert_values.push_back(std::to_string(blocked_spells_entry.z)); - insert_values.push_back(std::to_string(blocked_spells_entry.x_diff)); - insert_values.push_back(std::to_string(blocked_spells_entry.y_diff)); - insert_values.push_back(std::to_string(blocked_spells_entry.z_diff)); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.message) + "'"); - insert_values.push_back("'" + EscapeString(blocked_spells_entry.description) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BlockedSpells entry{}; - - entry.id = atoi(row[0]); - entry.spellid = atoi(row[1]); - entry.type = atoi(row[2]); - entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); - entry.message = row[10] ? row[10] : ""; - entry.description = row[11] ? row[11] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BlockedSpells entry{}; - - entry.id = atoi(row[0]); - entry.spellid = atoi(row[1]); - entry.type = atoi(row[2]); - entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); - entry.message = row[10] ? row[10] : ""; - entry.description = row[11] ? row[11] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h index d3464f090..100d7b93c 100644 --- a/common/repositories/books_repository.h +++ b/common/repositories/books_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_books_repository.h" -class BooksRepository { +class BooksRepository: public BaseBooksRepository { public: - struct Books { - std::string name; - std::string txtfile; - int language; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BooksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BooksRepository::GetWhereNeverExpires() + * BooksRepository::GetWhereXAndY() + * BooksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "name", - "txtfile", - "language", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("books"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Books NewEntity() - { - Books entry{}; - - entry.name = ""; - entry.txtfile = ""; - entry.language = 0; - - return entry; - } - - static Books GetBooksEntry( - const std::vector &bookss, - int books_id - ) - { - for (auto &books : bookss) { - if (books.name == books_id) { - return books; - } - } - - return NewEntity(); - } - - static Books FindOne( - int books_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - books_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int books_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - books_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Books books_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(books_entry.txtfile) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(books_entry.language)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - books_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Books InsertOne( - Books books_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); - insert_values.push_back(std::to_string(books_entry.language)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - books_entry.id = results.LastInsertedID(); - return books_entry; - } - - books_entry = BooksRepository::NewEntity(); - - return books_entry; - } - - static int InsertMany( - std::vector books_entries - ) - { - std::vector insert_chunks; - - for (auto &books_entry: books_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); - insert_values.push_back(std::to_string(books_entry.language)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index 06f16ea50..f10f3e192 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -23,545 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_bug_reports_repository.h" -class BugReportsRepository { +class BugReportsRepository: public BaseBugReportsRepository { public: - struct BugReports { - int id; - std::string zone; - int client_version_id; - std::string client_version_name; - int account_id; - int character_id; - std::string character_name; - int8 reporter_spoof; - int category_id; - std::string category_name; - std::string reporter_name; - std::string ui_path; - float pos_x; - float pos_y; - float pos_z; - int heading; - int time_played; - int target_id; - std::string target_name; - int optional_info_mask; - int8 _can_duplicate; - int8 _crash_bug; - int8 _target_info; - int8 _character_flags; - int8 _unknown_value; - std::string bug_report; - std::string system_info; - std::string report_datetime; - int8 bug_status; - std::string last_review; - std::string last_reviewer; - std::string reviewer_notes; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BugReportsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BugReportsRepository::GetWhereNeverExpires() + * BugReportsRepository::GetWhereXAndY() + * BugReportsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "client_version_id", - "client_version_name", - "account_id", - "character_id", - "character_name", - "reporter_spoof", - "category_id", - "category_name", - "reporter_name", - "ui_path", - "pos_x", - "pos_y", - "pos_z", - "heading", - "time_played", - "target_id", - "target_name", - "optional_info_mask", - "_can_duplicate", - "_crash_bug", - "_target_info", - "_character_flags", - "_unknown_value", - "bug_report", - "system_info", - "report_datetime", - "bug_status", - "last_review", - "last_reviewer", - "reviewer_notes", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("bug_reports"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static BugReports NewEntity() - { - BugReports entry{}; - - entry.id = 0; - entry.zone = "Unknown"; - entry.client_version_id = 0; - entry.client_version_name = "Unknown"; - entry.account_id = 0; - entry.character_id = 0; - entry.character_name = "Unknown"; - entry.reporter_spoof = 1; - entry.category_id = 0; - entry.category_name = "Other"; - entry.reporter_name = "Unknown"; - entry.ui_path = "Unknown"; - entry.pos_x = 0; - entry.pos_y = 0; - entry.pos_z = 0; - entry.heading = 0; - entry.time_played = 0; - entry.target_id = 0; - entry.target_name = "Unknown"; - entry.optional_info_mask = 0; - entry._can_duplicate = 0; - entry._crash_bug = 0; - entry._target_info = 0; - entry._character_flags = 0; - entry._unknown_value = 0; - entry.bug_report = ""; - entry.system_info = ""; - entry.report_datetime = current_timestamp(); - entry.bug_status = 0; - entry.last_review = current_timestamp(); - entry.last_reviewer = "None"; - entry.reviewer_notes = ""; - - return entry; - } - - static BugReports GetBugReportsEntry( - const std::vector &bug_reportss, - int bug_reports_id - ) - { - for (auto &bug_reports : bug_reportss) { - if (bug_reports.id == bug_reports_id) { - return bug_reports; - } - } - - return NewEntity(); - } - - static BugReports FindOne( - int bug_reports_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - bug_reports_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - BugReports entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3] ? row[3] : ""; - entry.account_id = atoi(row[4]); - entry.character_id = atoi(row[5]); - entry.character_name = row[6] ? row[6] : ""; - entry.reporter_spoof = atoi(row[7]); - entry.category_id = atoi(row[8]); - entry.category_name = row[9] ? row[9] : ""; - entry.reporter_name = row[10] ? row[10] : ""; - entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); - entry.heading = atoi(row[15]); - entry.time_played = atoi(row[16]); - entry.target_id = atoi(row[17]); - entry.target_name = row[18] ? row[18] : ""; - entry.optional_info_mask = atoi(row[19]); - entry._can_duplicate = atoi(row[20]); - entry._crash_bug = atoi(row[21]); - entry._target_info = atoi(row[22]); - entry._character_flags = atoi(row[23]); - entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25] ? row[25] : ""; - entry.system_info = row[26] ? row[26] : ""; - entry.report_datetime = row[27] ? row[27] : ""; - entry.bug_status = atoi(row[28]); - entry.last_review = row[29] ? row[29] : ""; - entry.last_reviewer = row[30] ? row[30] : ""; - entry.reviewer_notes = row[31] ? row[31] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int bug_reports_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - bug_reports_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - BugReports bug_reports_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(bug_reports_entry.zone) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(bug_reports_entry.client_version_id)); - update_values.push_back(columns[3] + " = '" + EscapeString(bug_reports_entry.client_version_name) + "'"); - update_values.push_back(columns[4] + " = " + std::to_string(bug_reports_entry.account_id)); - update_values.push_back(columns[5] + " = " + std::to_string(bug_reports_entry.character_id)); - update_values.push_back(columns[6] + " = '" + EscapeString(bug_reports_entry.character_name) + "'"); - update_values.push_back(columns[7] + " = " + std::to_string(bug_reports_entry.reporter_spoof)); - update_values.push_back(columns[8] + " = " + std::to_string(bug_reports_entry.category_id)); - update_values.push_back(columns[9] + " = '" + EscapeString(bug_reports_entry.category_name) + "'"); - update_values.push_back(columns[10] + " = '" + EscapeString(bug_reports_entry.reporter_name) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(bug_reports_entry.ui_path) + "'"); - update_values.push_back(columns[12] + " = " + std::to_string(bug_reports_entry.pos_x)); - update_values.push_back(columns[13] + " = " + std::to_string(bug_reports_entry.pos_y)); - update_values.push_back(columns[14] + " = " + std::to_string(bug_reports_entry.pos_z)); - update_values.push_back(columns[15] + " = " + std::to_string(bug_reports_entry.heading)); - update_values.push_back(columns[16] + " = " + std::to_string(bug_reports_entry.time_played)); - update_values.push_back(columns[17] + " = " + std::to_string(bug_reports_entry.target_id)); - update_values.push_back(columns[18] + " = '" + EscapeString(bug_reports_entry.target_name) + "'"); - update_values.push_back(columns[19] + " = " + std::to_string(bug_reports_entry.optional_info_mask)); - update_values.push_back(columns[20] + " = " + std::to_string(bug_reports_entry._can_duplicate)); - update_values.push_back(columns[21] + " = " + std::to_string(bug_reports_entry._crash_bug)); - update_values.push_back(columns[22] + " = " + std::to_string(bug_reports_entry._target_info)); - update_values.push_back(columns[23] + " = " + std::to_string(bug_reports_entry._character_flags)); - update_values.push_back(columns[24] + " = " + std::to_string(bug_reports_entry._unknown_value)); - update_values.push_back(columns[25] + " = '" + EscapeString(bug_reports_entry.bug_report) + "'"); - update_values.push_back(columns[26] + " = '" + EscapeString(bug_reports_entry.system_info) + "'"); - update_values.push_back(columns[27] + " = '" + EscapeString(bug_reports_entry.report_datetime) + "'"); - update_values.push_back(columns[28] + " = " + std::to_string(bug_reports_entry.bug_status)); - update_values.push_back(columns[29] + " = '" + EscapeString(bug_reports_entry.last_review) + "'"); - update_values.push_back(columns[30] + " = '" + EscapeString(bug_reports_entry.last_reviewer) + "'"); - update_values.push_back(columns[31] + " = '" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - bug_reports_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static BugReports InsertOne( - BugReports bug_reports_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.account_id)); - insert_values.push_back(std::to_string(bug_reports_entry.character_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); - insert_values.push_back(std::to_string(bug_reports_entry.category_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); - insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); - insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); - insert_values.push_back(std::to_string(bug_reports_entry.heading)); - insert_values.push_back(std::to_string(bug_reports_entry.time_played)); - insert_values.push_back(std::to_string(bug_reports_entry.target_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); - insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); - insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); - insert_values.push_back(std::to_string(bug_reports_entry._target_info)); - insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); - insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - bug_reports_entry.id = results.LastInsertedID(); - return bug_reports_entry; - } - - bug_reports_entry = BugReportsRepository::NewEntity(); - - return bug_reports_entry; - } - - static int InsertMany( - std::vector bug_reports_entries - ) - { - std::vector insert_chunks; - - for (auto &bug_reports_entry: bug_reports_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(bug_reports_entry.zone) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.client_version_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.client_version_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.account_id)); - insert_values.push_back(std::to_string(bug_reports_entry.character_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.character_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.reporter_spoof)); - insert_values.push_back(std::to_string(bug_reports_entry.category_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.category_name) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.reporter_name) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.ui_path) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.pos_x)); - insert_values.push_back(std::to_string(bug_reports_entry.pos_y)); - insert_values.push_back(std::to_string(bug_reports_entry.pos_z)); - insert_values.push_back(std::to_string(bug_reports_entry.heading)); - insert_values.push_back(std::to_string(bug_reports_entry.time_played)); - insert_values.push_back(std::to_string(bug_reports_entry.target_id)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.target_name) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.optional_info_mask)); - insert_values.push_back(std::to_string(bug_reports_entry._can_duplicate)); - insert_values.push_back(std::to_string(bug_reports_entry._crash_bug)); - insert_values.push_back(std::to_string(bug_reports_entry._target_info)); - insert_values.push_back(std::to_string(bug_reports_entry._character_flags)); - insert_values.push_back(std::to_string(bug_reports_entry._unknown_value)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.bug_report) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.system_info) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.report_datetime) + "'"); - insert_values.push_back(std::to_string(bug_reports_entry.bug_status)); - insert_values.push_back("'" + EscapeString(bug_reports_entry.last_review) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.last_reviewer) + "'"); - insert_values.push_back("'" + EscapeString(bug_reports_entry.reviewer_notes) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BugReports entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3] ? row[3] : ""; - entry.account_id = atoi(row[4]); - entry.character_id = atoi(row[5]); - entry.character_name = row[6] ? row[6] : ""; - entry.reporter_spoof = atoi(row[7]); - entry.category_id = atoi(row[8]); - entry.category_name = row[9] ? row[9] : ""; - entry.reporter_name = row[10] ? row[10] : ""; - entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); - entry.heading = atoi(row[15]); - entry.time_played = atoi(row[16]); - entry.target_id = atoi(row[17]); - entry.target_name = row[18] ? row[18] : ""; - entry.optional_info_mask = atoi(row[19]); - entry._can_duplicate = atoi(row[20]); - entry._crash_bug = atoi(row[21]); - entry._target_info = atoi(row[22]); - entry._character_flags = atoi(row[23]); - entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25] ? row[25] : ""; - entry.system_info = row[26] ? row[26] : ""; - entry.report_datetime = row[27] ? row[27] : ""; - entry.bug_status = atoi(row[28]); - entry.last_review = row[29] ? row[29] : ""; - entry.last_reviewer = row[30] ? row[30] : ""; - entry.reviewer_notes = row[31] ? row[31] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BugReports entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.client_version_id = atoi(row[2]); - entry.client_version_name = row[3] ? row[3] : ""; - entry.account_id = atoi(row[4]); - entry.character_id = atoi(row[5]); - entry.character_name = row[6] ? row[6] : ""; - entry.reporter_spoof = atoi(row[7]); - entry.category_id = atoi(row[8]); - entry.category_name = row[9] ? row[9] : ""; - entry.reporter_name = row[10] ? row[10] : ""; - entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); - entry.heading = atoi(row[15]); - entry.time_played = atoi(row[16]); - entry.target_id = atoi(row[17]); - entry.target_name = row[18] ? row[18] : ""; - entry.optional_info_mask = atoi(row[19]); - entry._can_duplicate = atoi(row[20]); - entry._crash_bug = atoi(row[21]); - entry._target_info = atoi(row[22]); - entry._character_flags = atoi(row[23]); - entry._unknown_value = atoi(row[24]); - entry.bug_report = row[25] ? row[25] : ""; - entry.system_info = row[26] ? row[26] : ""; - entry.report_datetime = row[27] ? row[27] : ""; - entry.bug_status = atoi(row[28]); - entry.last_review = row[29] ? row[29] : ""; - entry.last_reviewer = row[30] ? row[30] : ""; - entry.reviewer_notes = row[31] ? row[31] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index b0d8f45f4..888ccffdb 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -23,374 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_bugs_repository.h" -class BugsRepository { +class BugsRepository: public BaseBugsRepository { public: - struct Bugs { - int id; - std::string zone; - std::string name; - std::string ui; - float x; - float y; - float z; - std::string type; - int8 flag; - std::string target; - std::string bug; - std::string date; - int8 status; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BugsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BugsRepository::GetWhereNeverExpires() + * BugsRepository::GetWhereXAndY() + * BugsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "name", - "ui", - "x", - "y", - "z", - "type", - "flag", - "target", - "bug", - "date", - "status", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("bugs"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Bugs NewEntity() - { - Bugs entry{}; - - entry.id = 0; - entry.zone = ""; - entry.name = ""; - entry.ui = ""; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.type = ""; - entry.flag = 0; - entry.target = ""; - entry.bug = ""; - entry.date = 0; - entry.status = 0; - - return entry; - } - - static Bugs GetBugsEntry( - const std::vector &bugss, - int bugs_id - ) - { - for (auto &bugs : bugss) { - if (bugs.id == bugs_id) { - return bugs; - } - } - - return NewEntity(); - } - - static Bugs FindOne( - int bugs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - bugs_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Bugs entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.type = row[7] ? row[7] : ""; - entry.flag = atoi(row[8]); - entry.target = row[9] ? row[9] : ""; - entry.bug = row[10] ? row[10] : ""; - entry.date = row[11] ? row[11] : ""; - entry.status = atoi(row[12]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int bugs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - bugs_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Bugs bugs_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(bugs_entry.zone) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(bugs_entry.name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(bugs_entry.ui) + "'"); - update_values.push_back(columns[4] + " = " + std::to_string(bugs_entry.x)); - update_values.push_back(columns[5] + " = " + std::to_string(bugs_entry.y)); - update_values.push_back(columns[6] + " = " + std::to_string(bugs_entry.z)); - update_values.push_back(columns[7] + " = '" + EscapeString(bugs_entry.type) + "'"); - update_values.push_back(columns[8] + " = " + std::to_string(bugs_entry.flag)); - update_values.push_back(columns[9] + " = '" + EscapeString(bugs_entry.target) + "'"); - update_values.push_back(columns[10] + " = '" + EscapeString(bugs_entry.bug) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(bugs_entry.date) + "'"); - update_values.push_back(columns[12] + " = " + std::to_string(bugs_entry.status)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - bugs_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Bugs InsertOne( - Bugs bugs_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); - insert_values.push_back(std::to_string(bugs_entry.x)); - insert_values.push_back(std::to_string(bugs_entry.y)); - insert_values.push_back(std::to_string(bugs_entry.z)); - insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); - insert_values.push_back(std::to_string(bugs_entry.flag)); - insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); - insert_values.push_back(std::to_string(bugs_entry.status)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - bugs_entry.id = results.LastInsertedID(); - return bugs_entry; - } - - bugs_entry = BugsRepository::NewEntity(); - - return bugs_entry; - } - - static int InsertMany( - std::vector bugs_entries - ) - { - std::vector insert_chunks; - - for (auto &bugs_entry: bugs_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(bugs_entry.zone) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.ui) + "'"); - insert_values.push_back(std::to_string(bugs_entry.x)); - insert_values.push_back(std::to_string(bugs_entry.y)); - insert_values.push_back(std::to_string(bugs_entry.z)); - insert_values.push_back("'" + EscapeString(bugs_entry.type) + "'"); - insert_values.push_back(std::to_string(bugs_entry.flag)); - insert_values.push_back("'" + EscapeString(bugs_entry.target) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.bug) + "'"); - insert_values.push_back("'" + EscapeString(bugs_entry.date) + "'"); - insert_values.push_back(std::to_string(bugs_entry.status)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Bugs entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.type = row[7] ? row[7] : ""; - entry.flag = atoi(row[8]); - entry.target = row[9] ? row[9] : ""; - entry.bug = row[10] ? row[10] : ""; - entry.date = row[11] ? row[11] : ""; - entry.status = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Bugs entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.type = row[7] ? row[7] : ""; - entry.flag = atoi(row[8]); - entry.target = row[9] ? row[9] : ""; - entry.bug = row[10] ? row[10] : ""; - entry.date = row[11] ? row[11] : ""; - entry.status = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h index 45c138b90..42d87ed5f 100644 --- a/common/repositories/buyer_repository.h +++ b/common/repositories/buyer_repository.h @@ -23,308 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_buyer_repository.h" -class BuyerRepository { +class BuyerRepository: public BaseBuyerRepository { public: - struct Buyer { - int charid; - int buyslot; - int itemid; - std::string itemname; - int quantity; - int price; - }; - static std::string PrimaryKey() - { - return std::string("buyslot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * BuyerRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * BuyerRepository::GetWhereNeverExpires() + * BuyerRepository::GetWhereXAndY() + * BuyerRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "buyslot", - "itemid", - "itemname", - "quantity", - "price", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("buyer"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Buyer NewEntity() - { - Buyer entry{}; - - entry.charid = 0; - entry.buyslot = 0; - entry.itemid = 0; - entry.itemname = ""; - entry.quantity = 0; - entry.price = 0; - - return entry; - } - - static Buyer GetBuyerEntry( - const std::vector &buyers, - int buyer_id - ) - { - for (auto &buyer : buyers) { - if (buyer.buyslot == buyer_id) { - return buyer; - } - } - - return NewEntity(); - } - - static Buyer FindOne( - int buyer_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - buyer_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Buyer entry{}; - - entry.charid = atoi(row[0]); - entry.buyslot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.itemname = row[3] ? row[3] : ""; - entry.quantity = atoi(row[4]); - entry.price = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int buyer_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - buyer_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Buyer buyer_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(buyer_entry.itemid)); - update_values.push_back(columns[3] + " = '" + EscapeString(buyer_entry.itemname) + "'"); - update_values.push_back(columns[4] + " = " + std::to_string(buyer_entry.quantity)); - update_values.push_back(columns[5] + " = " + std::to_string(buyer_entry.price)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - buyer_entry.buyslot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Buyer InsertOne( - Buyer buyer_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(buyer_entry.itemid)); - insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); - insert_values.push_back(std::to_string(buyer_entry.quantity)); - insert_values.push_back(std::to_string(buyer_entry.price)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - buyer_entry.id = results.LastInsertedID(); - return buyer_entry; - } - - buyer_entry = BuyerRepository::NewEntity(); - - return buyer_entry; - } - - static int InsertMany( - std::vector buyer_entries - ) - { - std::vector insert_chunks; - - for (auto &buyer_entry: buyer_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(buyer_entry.itemid)); - insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); - insert_values.push_back(std::to_string(buyer_entry.quantity)); - insert_values.push_back(std::to_string(buyer_entry.price)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Buyer entry{}; - - entry.charid = atoi(row[0]); - entry.buyslot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.itemname = row[3] ? row[3] : ""; - entry.quantity = atoi(row[4]); - entry.price = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Buyer entry{}; - - entry.charid = atoi(row[0]); - entry.buyslot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.itemname = row[3] ? row[3] : ""; - entry.quantity = atoi(row[4]); - entry.price = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/char_create_combinations_repository.h b/common/repositories/char_create_combinations_repository.h index 6d7a5eb24..e8da3253e 100644 --- a/common/repositories/char_create_combinations_repository.h +++ b/common/repositories/char_create_combinations_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_char_create_combinations_repository.h" -class CharCreateCombinationsRepository { +class CharCreateCombinationsRepository: public BaseCharCreateCombinationsRepository { public: - struct CharCreateCombinations { - int allocation_id; - int race; - int class; - int deity; - int start_zone; - int expansions_req; - }; - static std::string PrimaryKey() - { - return std::string("start_zone"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharCreateCombinationsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharCreateCombinationsRepository::GetWhereNeverExpires() + * CharCreateCombinationsRepository::GetWhereXAndY() + * CharCreateCombinationsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "allocation_id", - "race", - "class", - "deity", - "start_zone", - "expansions_req", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("char_create_combinations"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharCreateCombinations NewEntity() - { - CharCreateCombinations entry{}; - - entry.allocation_id = 0; - entry.race = 0; - entry.class = 0; - entry.deity = 0; - entry.start_zone = 0; - entry.expansions_req = 0; - - return entry; - } - - static CharCreateCombinations GetCharCreateCombinationsEntry( - const std::vector &char_create_combinationss, - int char_create_combinations_id - ) - { - for (auto &char_create_combinations : char_create_combinationss) { - if (char_create_combinations.start_zone == char_create_combinations_id) { - return char_create_combinations; - } - } - - return NewEntity(); - } - - static CharCreateCombinations FindOne( - int char_create_combinations_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - char_create_combinations_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharCreateCombinations entry{}; - - entry.allocation_id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deity = atoi(row[3]); - entry.start_zone = atoi(row[4]); - entry.expansions_req = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int char_create_combinations_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - char_create_combinations_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharCreateCombinations char_create_combinations_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(char_create_combinations_entry.allocation_id)); - update_values.push_back(columns[5] + " = " + std::to_string(char_create_combinations_entry.expansions_req)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - char_create_combinations_entry.start_zone - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharCreateCombinations InsertOne( - CharCreateCombinations char_create_combinations_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); - insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - char_create_combinations_entry.id = results.LastInsertedID(); - return char_create_combinations_entry; - } - - char_create_combinations_entry = CharCreateCombinationsRepository::NewEntity(); - - return char_create_combinations_entry; - } - - static int InsertMany( - std::vector char_create_combinations_entries - ) - { - std::vector insert_chunks; - - for (auto &char_create_combinations_entry: char_create_combinations_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); - insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharCreateCombinations entry{}; - - entry.allocation_id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deity = atoi(row[3]); - entry.start_zone = atoi(row[4]); - entry.expansions_req = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharCreateCombinations entry{}; - - entry.allocation_id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deity = atoi(row[3]); - entry.start_zone = atoi(row[4]); - entry.expansions_req = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/char_create_point_allocations_repository.h b/common/repositories/char_create_point_allocations_repository.h index 98889b6bd..7be3b8da6 100644 --- a/common/repositories/char_create_point_allocations_repository.h +++ b/common/repositories/char_create_point_allocations_repository.h @@ -23,392 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_char_create_point_allocations_repository.h" -class CharCreatePointAllocationsRepository { +class CharCreatePointAllocationsRepository: public BaseCharCreatePointAllocationsRepository { public: - struct CharCreatePointAllocations { - int id; - int base_str; - int base_sta; - int base_dex; - int base_agi; - int base_int; - int base_wis; - int base_cha; - int alloc_str; - int alloc_sta; - int alloc_dex; - int alloc_agi; - int alloc_int; - int alloc_wis; - int alloc_cha; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharCreatePointAllocationsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharCreatePointAllocationsRepository::GetWhereNeverExpires() + * CharCreatePointAllocationsRepository::GetWhereXAndY() + * CharCreatePointAllocationsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "base_str", - "base_sta", - "base_dex", - "base_agi", - "base_int", - "base_wis", - "base_cha", - "alloc_str", - "alloc_sta", - "alloc_dex", - "alloc_agi", - "alloc_int", - "alloc_wis", - "alloc_cha", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("char_create_point_allocations"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharCreatePointAllocations NewEntity() - { - CharCreatePointAllocations entry{}; - - entry.id = 0; - entry.base_str = 0; - entry.base_sta = 0; - entry.base_dex = 0; - entry.base_agi = 0; - entry.base_int = 0; - entry.base_wis = 0; - entry.base_cha = 0; - entry.alloc_str = 0; - entry.alloc_sta = 0; - entry.alloc_dex = 0; - entry.alloc_agi = 0; - entry.alloc_int = 0; - entry.alloc_wis = 0; - entry.alloc_cha = 0; - - return entry; - } - - static CharCreatePointAllocations GetCharCreatePointAllocationsEntry( - const std::vector &char_create_point_allocationss, - int char_create_point_allocations_id - ) - { - for (auto &char_create_point_allocations : char_create_point_allocationss) { - if (char_create_point_allocations.id == char_create_point_allocations_id) { - return char_create_point_allocations; - } - } - - return NewEntity(); - } - - static CharCreatePointAllocations FindOne( - int char_create_point_allocations_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - char_create_point_allocations_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharCreatePointAllocations entry{}; - - entry.id = atoi(row[0]); - entry.base_str = atoi(row[1]); - entry.base_sta = atoi(row[2]); - entry.base_dex = atoi(row[3]); - entry.base_agi = atoi(row[4]); - entry.base_int = atoi(row[5]); - entry.base_wis = atoi(row[6]); - entry.base_cha = atoi(row[7]); - entry.alloc_str = atoi(row[8]); - entry.alloc_sta = atoi(row[9]); - entry.alloc_dex = atoi(row[10]); - entry.alloc_agi = atoi(row[11]); - entry.alloc_int = atoi(row[12]); - entry.alloc_wis = atoi(row[13]); - entry.alloc_cha = atoi(row[14]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int char_create_point_allocations_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - char_create_point_allocations_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharCreatePointAllocations char_create_point_allocations_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(char_create_point_allocations_entry.base_str)); - update_values.push_back(columns[2] + " = " + std::to_string(char_create_point_allocations_entry.base_sta)); - update_values.push_back(columns[3] + " = " + std::to_string(char_create_point_allocations_entry.base_dex)); - update_values.push_back(columns[4] + " = " + std::to_string(char_create_point_allocations_entry.base_agi)); - update_values.push_back(columns[5] + " = " + std::to_string(char_create_point_allocations_entry.base_int)); - update_values.push_back(columns[6] + " = " + std::to_string(char_create_point_allocations_entry.base_wis)); - update_values.push_back(columns[7] + " = " + std::to_string(char_create_point_allocations_entry.base_cha)); - update_values.push_back(columns[8] + " = " + std::to_string(char_create_point_allocations_entry.alloc_str)); - update_values.push_back(columns[9] + " = " + std::to_string(char_create_point_allocations_entry.alloc_sta)); - update_values.push_back(columns[10] + " = " + std::to_string(char_create_point_allocations_entry.alloc_dex)); - update_values.push_back(columns[11] + " = " + std::to_string(char_create_point_allocations_entry.alloc_agi)); - update_values.push_back(columns[12] + " = " + std::to_string(char_create_point_allocations_entry.alloc_int)); - update_values.push_back(columns[13] + " = " + std::to_string(char_create_point_allocations_entry.alloc_wis)); - update_values.push_back(columns[14] + " = " + std::to_string(char_create_point_allocations_entry.alloc_cha)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - char_create_point_allocations_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharCreatePointAllocations InsertOne( - CharCreatePointAllocations char_create_point_allocations_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - char_create_point_allocations_entry.id = results.LastInsertedID(); - return char_create_point_allocations_entry; - } - - char_create_point_allocations_entry = CharCreatePointAllocationsRepository::NewEntity(); - - return char_create_point_allocations_entry; - } - - static int InsertMany( - std::vector char_create_point_allocations_entries - ) - { - std::vector insert_chunks; - - for (auto &char_create_point_allocations_entry: char_create_point_allocations_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_agi)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_int)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_wis)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_cha)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_str)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_sta)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_dex)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_agi)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_int)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_wis)); - insert_values.push_back(std::to_string(char_create_point_allocations_entry.alloc_cha)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharCreatePointAllocations entry{}; - - entry.id = atoi(row[0]); - entry.base_str = atoi(row[1]); - entry.base_sta = atoi(row[2]); - entry.base_dex = atoi(row[3]); - entry.base_agi = atoi(row[4]); - entry.base_int = atoi(row[5]); - entry.base_wis = atoi(row[6]); - entry.base_cha = atoi(row[7]); - entry.alloc_str = atoi(row[8]); - entry.alloc_sta = atoi(row[9]); - entry.alloc_dex = atoi(row[10]); - entry.alloc_agi = atoi(row[11]); - entry.alloc_int = atoi(row[12]); - entry.alloc_wis = atoi(row[13]); - entry.alloc_cha = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharCreatePointAllocations entry{}; - - entry.id = atoi(row[0]); - entry.base_str = atoi(row[1]); - entry.base_sta = atoi(row[2]); - entry.base_dex = atoi(row[3]); - entry.base_agi = atoi(row[4]); - entry.base_int = atoi(row[5]); - entry.base_wis = atoi(row[6]); - entry.base_cha = atoi(row[7]); - entry.alloc_str = atoi(row[8]); - entry.alloc_sta = atoi(row[9]); - entry.alloc_dex = atoi(row[10]); - entry.alloc_agi = atoi(row[11]); - entry.alloc_int = atoi(row[12]); - entry.alloc_wis = atoi(row[13]); - entry.alloc_cha = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h index 217ab1052..9def2e951 100644 --- a/common/repositories/char_recipe_list_repository.h +++ b/common/repositories/char_recipe_list_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_char_recipe_list_repository.h" -class CharRecipeListRepository { +class CharRecipeListRepository: public BaseCharRecipeListRepository { public: - struct CharRecipeList { - int char_id; - int recipe_id; - int madecount; - }; - static std::string PrimaryKey() - { - return std::string("recipe_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharRecipeListRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharRecipeListRepository::GetWhereNeverExpires() + * CharRecipeListRepository::GetWhereXAndY() + * CharRecipeListRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "recipe_id", - "madecount", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("char_recipe_list"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharRecipeList NewEntity() - { - CharRecipeList entry{}; - - entry.char_id = 0; - entry.recipe_id = 0; - entry.madecount = 0; - - return entry; - } - - static CharRecipeList GetCharRecipeListEntry( - const std::vector &char_recipe_lists, - int char_recipe_list_id - ) - { - for (auto &char_recipe_list : char_recipe_lists) { - if (char_recipe_list.recipe_id == char_recipe_list_id) { - return char_recipe_list; - } - } - - return NewEntity(); - } - - static CharRecipeList FindOne( - int char_recipe_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - char_recipe_list_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharRecipeList entry{}; - - entry.char_id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.madecount = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int char_recipe_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - char_recipe_list_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharRecipeList char_recipe_list_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(char_recipe_list_entry.madecount)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - char_recipe_list_entry.recipe_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharRecipeList InsertOne( - CharRecipeList char_recipe_list_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - char_recipe_list_entry.id = results.LastInsertedID(); - return char_recipe_list_entry; - } - - char_recipe_list_entry = CharRecipeListRepository::NewEntity(); - - return char_recipe_list_entry; - } - - static int InsertMany( - std::vector char_recipe_list_entries - ) - { - std::vector insert_chunks; - - for (auto &char_recipe_list_entry: char_recipe_list_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharRecipeList entry{}; - - entry.char_id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.madecount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharRecipeList entry{}; - - entry.char_id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.madecount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_activities_repository.h b/common/repositories/character_activities_repository.h index ce6ee6d82..1ea06f517 100644 --- a/common/repositories/character_activities_repository.h +++ b/common/repositories/character_activities_repository.h @@ -23,296 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_activities_repository.h" -class CharacterActivitiesRepository { +class CharacterActivitiesRepository: public BaseCharacterActivitiesRepository { public: - struct CharacterActivities { - int charid; - int taskid; - int activityid; - int donecount; - int8 completed; - }; - static std::string PrimaryKey() - { - return std::string("activityid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterActivitiesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterActivitiesRepository::GetWhereNeverExpires() + * CharacterActivitiesRepository::GetWhereXAndY() + * CharacterActivitiesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "taskid", - "activityid", - "donecount", - "completed", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_activities"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterActivities NewEntity() - { - CharacterActivities entry{}; - - entry.charid = 0; - entry.taskid = 0; - entry.activityid = 0; - entry.donecount = 0; - entry.completed = 0; - - return entry; - } - - static CharacterActivities GetCharacterActivitiesEntry( - const std::vector &character_activitiess, - int character_activities_id - ) - { - for (auto &character_activities : character_activitiess) { - if (character_activities.activityid == character_activities_id) { - return character_activities; - } - } - - return NewEntity(); - } - - static CharacterActivities FindOne( - int character_activities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_activities_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterActivities entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.activityid = atoi(row[2]); - entry.donecount = atoi(row[3]); - entry.completed = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_activities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_activities_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterActivities character_activities_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(character_activities_entry.donecount)); - update_values.push_back(columns[4] + " = " + std::to_string(character_activities_entry.completed)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_activities_entry.activityid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterActivities InsertOne( - CharacterActivities character_activities_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_activities_entry.donecount)); - insert_values.push_back(std::to_string(character_activities_entry.completed)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_activities_entry.id = results.LastInsertedID(); - return character_activities_entry; - } - - character_activities_entry = CharacterActivitiesRepository::NewEntity(); - - return character_activities_entry; - } - - static int InsertMany( - std::vector character_activities_entries - ) - { - std::vector insert_chunks; - - for (auto &character_activities_entry: character_activities_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_activities_entry.donecount)); - insert_values.push_back(std::to_string(character_activities_entry.completed)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterActivities entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.activityid = atoi(row[2]); - entry.donecount = atoi(row[3]); - entry.completed = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterActivities entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.activityid = atoi(row[2]); - entry.donecount = atoi(row[3]); - entry.completed = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_alt_currency_repository.h b/common/repositories/character_alt_currency_repository.h index cc7c8205d..c3d0e288f 100644 --- a/common/repositories/character_alt_currency_repository.h +++ b/common/repositories/character_alt_currency_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_alt_currency_repository.h" -class CharacterAltCurrencyRepository { +class CharacterAltCurrencyRepository: public BaseCharacterAltCurrencyRepository { public: - struct CharacterAltCurrency { - int char_id; - int currency_id; - int amount; - }; - static std::string PrimaryKey() - { - return std::string("currency_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterAltCurrencyRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterAltCurrencyRepository::GetWhereNeverExpires() + * CharacterAltCurrencyRepository::GetWhereXAndY() + * CharacterAltCurrencyRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "currency_id", - "amount", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_alt_currency"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterAltCurrency NewEntity() - { - CharacterAltCurrency entry{}; - - entry.char_id = 0; - entry.currency_id = 0; - entry.amount = 0; - - return entry; - } - - static CharacterAltCurrency GetCharacterAltCurrencyEntry( - const std::vector &character_alt_currencys, - int character_alt_currency_id - ) - { - for (auto &character_alt_currency : character_alt_currencys) { - if (character_alt_currency.currency_id == character_alt_currency_id) { - return character_alt_currency; - } - } - - return NewEntity(); - } - - static CharacterAltCurrency FindOne( - int character_alt_currency_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_alt_currency_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterAltCurrency entry{}; - - entry.char_id = atoi(row[0]); - entry.currency_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_alt_currency_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_alt_currency_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterAltCurrency character_alt_currency_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_alt_currency_entry.amount)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_alt_currency_entry.currency_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterAltCurrency InsertOne( - CharacterAltCurrency character_alt_currency_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_alt_currency_entry.id = results.LastInsertedID(); - return character_alt_currency_entry; - } - - character_alt_currency_entry = CharacterAltCurrencyRepository::NewEntity(); - - return character_alt_currency_entry; - } - - static int InsertMany( - std::vector character_alt_currency_entries - ) - { - std::vector insert_chunks; - - for (auto &character_alt_currency_entry: character_alt_currency_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAltCurrency entry{}; - - entry.char_id = atoi(row[0]); - entry.currency_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAltCurrency entry{}; - - entry.char_id = atoi(row[0]); - entry.currency_id = atoi(row[1]); - entry.amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_alternate_abilities_repository.h b/common/repositories/character_alternate_abilities_repository.h index b91a1572f..5c8d1f779 100644 --- a/common/repositories/character_alternate_abilities_repository.h +++ b/common/repositories/character_alternate_abilities_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_alternate_abilities_repository.h" -class CharacterAlternateAbilitiesRepository { +class CharacterAlternateAbilitiesRepository: public BaseCharacterAlternateAbilitiesRepository { public: - struct CharacterAlternateAbilities { - int id; - int16 aa_id; - int16 aa_value; - int16 charges; - }; - static std::string PrimaryKey() - { - return std::string("aa_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterAlternateAbilitiesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterAlternateAbilitiesRepository::GetWhereNeverExpires() + * CharacterAlternateAbilitiesRepository::GetWhereXAndY() + * CharacterAlternateAbilitiesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "aa_id", - "aa_value", - "charges", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_alternate_abilities"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterAlternateAbilities NewEntity() - { - CharacterAlternateAbilities entry{}; - - entry.id = 0; - entry.aa_id = 0; - entry.aa_value = 0; - entry.charges = 0; - - return entry; - } - - static CharacterAlternateAbilities GetCharacterAlternateAbilitiesEntry( - const std::vector &character_alternate_abilitiess, - int character_alternate_abilities_id - ) - { - for (auto &character_alternate_abilities : character_alternate_abilitiess) { - if (character_alternate_abilities.aa_id == character_alternate_abilities_id) { - return character_alternate_abilities; - } - } - - return NewEntity(); - } - - static CharacterAlternateAbilities FindOne( - int character_alternate_abilities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_alternate_abilities_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterAlternateAbilities entry{}; - - entry.id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.aa_value = atoi(row[2]); - entry.charges = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_alternate_abilities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_alternate_abilities_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterAlternateAbilities character_alternate_abilities_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_alternate_abilities_entry.aa_value)); - update_values.push_back(columns[3] + " = " + std::to_string(character_alternate_abilities_entry.charges)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_alternate_abilities_entry.aa_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterAlternateAbilities InsertOne( - CharacterAlternateAbilities character_alternate_abilities_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); - insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_alternate_abilities_entry.id = results.LastInsertedID(); - return character_alternate_abilities_entry; - } - - character_alternate_abilities_entry = CharacterAlternateAbilitiesRepository::NewEntity(); - - return character_alternate_abilities_entry; - } - - static int InsertMany( - std::vector character_alternate_abilities_entries - ) - { - std::vector insert_chunks; - - for (auto &character_alternate_abilities_entry: character_alternate_abilities_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); - insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAlternateAbilities entry{}; - - entry.id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.aa_value = atoi(row[2]); - entry.charges = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAlternateAbilities entry{}; - - entry.id = atoi(row[0]); - entry.aa_id = atoi(row[1]); - entry.aa_value = atoi(row[2]); - entry.charges = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_auras_repository.h b/common/repositories/character_auras_repository.h index 7a32f2ab4..16afc3bb7 100644 --- a/common/repositories/character_auras_repository.h +++ b/common/repositories/character_auras_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_auras_repository.h" -class CharacterAurasRepository { +class CharacterAurasRepository: public BaseCharacterAurasRepository { public: - struct CharacterAuras { - int id; - int8 slot; - int spell_id; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterAurasRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterAurasRepository::GetWhereNeverExpires() + * CharacterAurasRepository::GetWhereXAndY() + * CharacterAurasRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot", - "spell_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_auras"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterAuras NewEntity() - { - CharacterAuras entry{}; - - entry.id = 0; - entry.slot = 0; - entry.spell_id = 0; - - return entry; - } - - static CharacterAuras GetCharacterAurasEntry( - const std::vector &character_aurass, - int character_auras_id - ) - { - for (auto &character_auras : character_aurass) { - if (character_auras.slot == character_auras_id) { - return character_auras; - } - } - - return NewEntity(); - } - - static CharacterAuras FindOne( - int character_auras_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_auras_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterAuras entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_auras_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_auras_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterAuras character_auras_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_auras_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_auras_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterAuras InsertOne( - CharacterAuras character_auras_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_auras_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_auras_entry.id = results.LastInsertedID(); - return character_auras_entry; - } - - character_auras_entry = CharacterAurasRepository::NewEntity(); - - return character_auras_entry; - } - - static int InsertMany( - std::vector character_auras_entries - ) - { - std::vector insert_chunks; - - for (auto &character_auras_entry: character_auras_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_auras_entry.spell_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAuras entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterAuras entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index 446ae5b0f..3a04159db 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -23,305 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_bandolier_repository.h" -class CharacterBandolierRepository { +class CharacterBandolierRepository: public BaseCharacterBandolierRepository { public: - struct CharacterBandolier { - int id; - int8 bandolier_id; - int8 bandolier_slot; - int item_id; - int icon; - std::string bandolier_name; - }; - static std::string PrimaryKey() - { - return std::string("bandolier_slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterBandolierRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterBandolierRepository::GetWhereNeverExpires() + * CharacterBandolierRepository::GetWhereXAndY() + * CharacterBandolierRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "bandolier_id", - "bandolier_slot", - "item_id", - "icon", - "bandolier_name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_bandolier"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterBandolier NewEntity() - { - CharacterBandolier entry{}; - - entry.id = 0; - entry.bandolier_id = 0; - entry.bandolier_slot = 0; - entry.item_id = 0; - entry.icon = 0; - entry.bandolier_name = "0"; - - return entry; - } - - static CharacterBandolier GetCharacterBandolierEntry( - const std::vector &character_bandoliers, - int character_bandolier_id - ) - { - for (auto &character_bandolier : character_bandoliers) { - if (character_bandolier.bandolier_slot == character_bandolier_id) { - return character_bandolier; - } - } - - return NewEntity(); - } - - static CharacterBandolier FindOne( - int character_bandolier_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_bandolier_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterBandolier entry{}; - - entry.id = atoi(row[0]); - entry.bandolier_id = atoi(row[1]); - entry.bandolier_slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - entry.icon = atoi(row[4]); - entry.bandolier_name = row[5] ? row[5] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_bandolier_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_bandolier_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterBandolier character_bandolier_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(character_bandolier_entry.item_id)); - update_values.push_back(columns[4] + " = " + std::to_string(character_bandolier_entry.icon)); - update_values.push_back(columns[5] + " = '" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_bandolier_entry.bandolier_slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterBandolier InsertOne( - CharacterBandolier character_bandolier_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); - insert_values.push_back(std::to_string(character_bandolier_entry.icon)); - insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_bandolier_entry.id = results.LastInsertedID(); - return character_bandolier_entry; - } - - character_bandolier_entry = CharacterBandolierRepository::NewEntity(); - - return character_bandolier_entry; - } - - static int InsertMany( - std::vector character_bandolier_entries - ) - { - std::vector insert_chunks; - - for (auto &character_bandolier_entry: character_bandolier_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); - insert_values.push_back(std::to_string(character_bandolier_entry.icon)); - insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBandolier entry{}; - - entry.id = atoi(row[0]); - entry.bandolier_id = atoi(row[1]); - entry.bandolier_slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - entry.icon = atoi(row[4]); - entry.bandolier_name = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBandolier entry{}; - - entry.id = atoi(row[0]); - entry.bandolier_id = atoi(row[1]); - entry.bandolier_slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - entry.icon = atoi(row[4]); - entry.bandolier_name = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h index fd51b54a4..eeac3c6be 100644 --- a/common/repositories/character_bind_repository.h +++ b/common/repositories/character_bind_repository.h @@ -23,326 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_bind_repository.h" -class CharacterBindRepository { +class CharacterBindRepository: public BaseCharacterBindRepository { public: - struct CharacterBind { - int id; - int slot; - int16 zone_id; - int instance_id; - float x; - float y; - float z; - float heading; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterBindRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterBindRepository::GetWhereNeverExpires() + * CharacterBindRepository::GetWhereXAndY() + * CharacterBindRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot", - "zone_id", - "instance_id", - "x", - "y", - "z", - "heading", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_bind"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterBind NewEntity() - { - CharacterBind entry{}; - - entry.id = 0; - entry.slot = 0; - entry.zone_id = 0; - entry.instance_id = 0; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.heading = 0; - - return entry; - } - - static CharacterBind GetCharacterBindEntry( - const std::vector &character_binds, - int character_bind_id - ) - { - for (auto &character_bind : character_binds) { - if (character_bind.slot == character_bind_id) { - return character_bind; - } - } - - return NewEntity(); - } - - static CharacterBind FindOne( - int character_bind_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_bind_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterBind entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.zone_id = atoi(row[2]); - entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_bind_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_bind_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterBind character_bind_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_bind_entry.zone_id)); - update_values.push_back(columns[3] + " = " + std::to_string(character_bind_entry.instance_id)); - update_values.push_back(columns[4] + " = " + std::to_string(character_bind_entry.x)); - update_values.push_back(columns[5] + " = " + std::to_string(character_bind_entry.y)); - update_values.push_back(columns[6] + " = " + std::to_string(character_bind_entry.z)); - update_values.push_back(columns[7] + " = " + std::to_string(character_bind_entry.heading)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_bind_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterBind InsertOne( - CharacterBind character_bind_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_bind_entry.zone_id)); - insert_values.push_back(std::to_string(character_bind_entry.instance_id)); - insert_values.push_back(std::to_string(character_bind_entry.x)); - insert_values.push_back(std::to_string(character_bind_entry.y)); - insert_values.push_back(std::to_string(character_bind_entry.z)); - insert_values.push_back(std::to_string(character_bind_entry.heading)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_bind_entry.id = results.LastInsertedID(); - return character_bind_entry; - } - - character_bind_entry = CharacterBindRepository::NewEntity(); - - return character_bind_entry; - } - - static int InsertMany( - std::vector character_bind_entries - ) - { - std::vector insert_chunks; - - for (auto &character_bind_entry: character_bind_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_bind_entry.zone_id)); - insert_values.push_back(std::to_string(character_bind_entry.instance_id)); - insert_values.push_back(std::to_string(character_bind_entry.x)); - insert_values.push_back(std::to_string(character_bind_entry.y)); - insert_values.push_back(std::to_string(character_bind_entry.z)); - insert_values.push_back(std::to_string(character_bind_entry.heading)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBind entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.zone_id = atoi(row[2]); - entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBind entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.zone_id = atoi(row[2]); - entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index a167a6d55..14092acaa 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -23,407 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_buffs_repository.h" -class CharacterBuffsRepository { +class CharacterBuffsRepository: public BaseCharacterBuffsRepository { public: - struct CharacterBuffs { - int character_id; - int8 slot_id; - int16 spell_id; - int8 caster_level; - std::string caster_name; - int ticsremaining; - int counters; - int numhits; - int melee_rune; - int magic_rune; - int8 persistent; - int dot_rune; - int caston_x; - int caston_y; - int caston_z; - int ExtraDIChance; - int instrument_mod; - }; - static std::string PrimaryKey() - { - return std::string("slot_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterBuffsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterBuffsRepository::GetWhereNeverExpires() + * CharacterBuffsRepository::GetWhereXAndY() + * CharacterBuffsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "character_id", - "slot_id", - "spell_id", - "caster_level", - "caster_name", - "ticsremaining", - "counters", - "numhits", - "melee_rune", - "magic_rune", - "persistent", - "dot_rune", - "caston_x", - "caston_y", - "caston_z", - "ExtraDIChance", - "instrument_mod", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_buffs"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterBuffs NewEntity() - { - CharacterBuffs entry{}; - - entry.character_id = 0; - entry.slot_id = 0; - entry.spell_id = 0; - entry.caster_level = 0; - entry.caster_name = ""; - entry.ticsremaining = 0; - entry.counters = 0; - entry.numhits = 0; - entry.melee_rune = 0; - entry.magic_rune = 0; - entry.persistent = 0; - entry.dot_rune = 0; - entry.caston_x = 0; - entry.caston_y = 0; - entry.caston_z = 0; - entry.ExtraDIChance = 0; - entry.instrument_mod = 10; - - return entry; - } - - static CharacterBuffs GetCharacterBuffsEntry( - const std::vector &character_buffss, - int character_buffs_id - ) - { - for (auto &character_buffs : character_buffss) { - if (character_buffs.slot_id == character_buffs_id) { - return character_buffs; - } - } - - return NewEntity(); - } - - static CharacterBuffs FindOne( - int character_buffs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_buffs_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterBuffs entry{}; - - entry.character_id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.caster_level = atoi(row[3]); - entry.caster_name = row[4] ? row[4] : ""; - entry.ticsremaining = atoi(row[5]); - entry.counters = atoi(row[6]); - entry.numhits = atoi(row[7]); - entry.melee_rune = atoi(row[8]); - entry.magic_rune = atoi(row[9]); - entry.persistent = atoi(row[10]); - entry.dot_rune = atoi(row[11]); - entry.caston_x = atoi(row[12]); - entry.caston_y = atoi(row[13]); - entry.caston_z = atoi(row[14]); - entry.ExtraDIChance = atoi(row[15]); - entry.instrument_mod = atoi(row[16]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_buffs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_buffs_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterBuffs character_buffs_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_buffs_entry.spell_id)); - update_values.push_back(columns[3] + " = " + std::to_string(character_buffs_entry.caster_level)); - update_values.push_back(columns[4] + " = '" + EscapeString(character_buffs_entry.caster_name) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(character_buffs_entry.ticsremaining)); - update_values.push_back(columns[6] + " = " + std::to_string(character_buffs_entry.counters)); - update_values.push_back(columns[7] + " = " + std::to_string(character_buffs_entry.numhits)); - update_values.push_back(columns[8] + " = " + std::to_string(character_buffs_entry.melee_rune)); - update_values.push_back(columns[9] + " = " + std::to_string(character_buffs_entry.magic_rune)); - update_values.push_back(columns[10] + " = " + std::to_string(character_buffs_entry.persistent)); - update_values.push_back(columns[11] + " = " + std::to_string(character_buffs_entry.dot_rune)); - update_values.push_back(columns[12] + " = " + std::to_string(character_buffs_entry.caston_x)); - update_values.push_back(columns[13] + " = " + std::to_string(character_buffs_entry.caston_y)); - update_values.push_back(columns[14] + " = " + std::to_string(character_buffs_entry.caston_z)); - update_values.push_back(columns[15] + " = " + std::to_string(character_buffs_entry.ExtraDIChance)); - update_values.push_back(columns[16] + " = " + std::to_string(character_buffs_entry.instrument_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_buffs_entry.slot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterBuffs InsertOne( - CharacterBuffs character_buffs_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); - insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); - insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); - insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); - insert_values.push_back(std::to_string(character_buffs_entry.counters)); - insert_values.push_back(std::to_string(character_buffs_entry.numhits)); - insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.persistent)); - insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); - insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); - insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_buffs_entry.id = results.LastInsertedID(); - return character_buffs_entry; - } - - character_buffs_entry = CharacterBuffsRepository::NewEntity(); - - return character_buffs_entry; - } - - static int InsertMany( - std::vector character_buffs_entries - ) - { - std::vector insert_chunks; - - for (auto &character_buffs_entry: character_buffs_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); - insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); - insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); - insert_values.push_back(std::to_string(character_buffs_entry.ticsremaining)); - insert_values.push_back(std::to_string(character_buffs_entry.counters)); - insert_values.push_back(std::to_string(character_buffs_entry.numhits)); - insert_values.push_back(std::to_string(character_buffs_entry.melee_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.magic_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.persistent)); - insert_values.push_back(std::to_string(character_buffs_entry.dot_rune)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_x)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_y)); - insert_values.push_back(std::to_string(character_buffs_entry.caston_z)); - insert_values.push_back(std::to_string(character_buffs_entry.ExtraDIChance)); - insert_values.push_back(std::to_string(character_buffs_entry.instrument_mod)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBuffs entry{}; - - entry.character_id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.caster_level = atoi(row[3]); - entry.caster_name = row[4] ? row[4] : ""; - entry.ticsremaining = atoi(row[5]); - entry.counters = atoi(row[6]); - entry.numhits = atoi(row[7]); - entry.melee_rune = atoi(row[8]); - entry.magic_rune = atoi(row[9]); - entry.persistent = atoi(row[10]); - entry.dot_rune = atoi(row[11]); - entry.caston_x = atoi(row[12]); - entry.caston_y = atoi(row[13]); - entry.caston_z = atoi(row[14]); - entry.ExtraDIChance = atoi(row[15]); - entry.instrument_mod = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterBuffs entry{}; - - entry.character_id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.caster_level = atoi(row[3]); - entry.caster_name = row[4] ? row[4] : ""; - entry.ticsremaining = atoi(row[5]); - entry.counters = atoi(row[6]); - entry.numhits = atoi(row[7]); - entry.melee_rune = atoi(row[8]); - entry.magic_rune = atoi(row[9]); - entry.persistent = atoi(row[10]); - entry.dot_rune = atoi(row[11]); - entry.caston_x = atoi(row[12]); - entry.caston_y = atoi(row[13]); - entry.caston_z = atoi(row[14]); - entry.ExtraDIChance = atoi(row[15]); - entry.instrument_mod = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_corpse_items_repository.h b/common/repositories/character_corpse_items_repository.h index 6f26f1df4..56450a4f9 100644 --- a/common/repositories/character_corpse_items_repository.h +++ b/common/repositories/character_corpse_items_repository.h @@ -23,353 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_corpse_items_repository.h" -class CharacterCorpseItemsRepository { +class CharacterCorpseItemsRepository: public BaseCharacterCorpseItemsRepository { public: - struct CharacterCorpseItems { - int corpse_id; - int equip_slot; - int item_id; - int charges; - int aug_1; - int aug_2; - int aug_3; - int aug_4; - int aug_5; - int aug_6; - int16 attuned; - }; - static std::string PrimaryKey() - { - return std::string("equip_slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterCorpseItemsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterCorpseItemsRepository::GetWhereNeverExpires() + * CharacterCorpseItemsRepository::GetWhereXAndY() + * CharacterCorpseItemsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "corpse_id", - "equip_slot", - "item_id", - "charges", - "aug_1", - "aug_2", - "aug_3", - "aug_4", - "aug_5", - "aug_6", - "attuned", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_corpse_items"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterCorpseItems NewEntity() - { - CharacterCorpseItems entry{}; - - entry.corpse_id = 0; - entry.equip_slot = 0; - entry.item_id = 0; - entry.charges = 0; - entry.aug_1 = 0; - entry.aug_2 = 0; - entry.aug_3 = 0; - entry.aug_4 = 0; - entry.aug_5 = 0; - entry.aug_6 = 0; - entry.attuned = 0; - - return entry; - } - - static CharacterCorpseItems GetCharacterCorpseItemsEntry( - const std::vector &character_corpse_itemss, - int character_corpse_items_id - ) - { - for (auto &character_corpse_items : character_corpse_itemss) { - if (character_corpse_items.equip_slot == character_corpse_items_id) { - return character_corpse_items; - } - } - - return NewEntity(); - } - - static CharacterCorpseItems FindOne( - int character_corpse_items_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_corpse_items_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterCorpseItems entry{}; - - entry.corpse_id = atoi(row[0]); - entry.equip_slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.aug_1 = atoi(row[4]); - entry.aug_2 = atoi(row[5]); - entry.aug_3 = atoi(row[6]); - entry.aug_4 = atoi(row[7]); - entry.aug_5 = atoi(row[8]); - entry.aug_6 = atoi(row[9]); - entry.attuned = atoi(row[10]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_corpse_items_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_corpse_items_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterCorpseItems character_corpse_items_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_corpse_items_entry.item_id)); - update_values.push_back(columns[3] + " = " + std::to_string(character_corpse_items_entry.charges)); - update_values.push_back(columns[4] + " = " + std::to_string(character_corpse_items_entry.aug_1)); - update_values.push_back(columns[5] + " = " + std::to_string(character_corpse_items_entry.aug_2)); - update_values.push_back(columns[6] + " = " + std::to_string(character_corpse_items_entry.aug_3)); - update_values.push_back(columns[7] + " = " + std::to_string(character_corpse_items_entry.aug_4)); - update_values.push_back(columns[8] + " = " + std::to_string(character_corpse_items_entry.aug_5)); - update_values.push_back(columns[9] + " = " + std::to_string(character_corpse_items_entry.aug_6)); - update_values.push_back(columns[10] + " = " + std::to_string(character_corpse_items_entry.attuned)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_corpse_items_entry.equip_slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterCorpseItems InsertOne( - CharacterCorpseItems character_corpse_items_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); - insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); - insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_corpse_items_entry.id = results.LastInsertedID(); - return character_corpse_items_entry; - } - - character_corpse_items_entry = CharacterCorpseItemsRepository::NewEntity(); - - return character_corpse_items_entry; - } - - static int InsertMany( - std::vector character_corpse_items_entries - ) - { - std::vector insert_chunks; - - for (auto &character_corpse_items_entry: character_corpse_items_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); - insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_2)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_3)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_4)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_5)); - insert_values.push_back(std::to_string(character_corpse_items_entry.aug_6)); - insert_values.push_back(std::to_string(character_corpse_items_entry.attuned)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCorpseItems entry{}; - - entry.corpse_id = atoi(row[0]); - entry.equip_slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.aug_1 = atoi(row[4]); - entry.aug_2 = atoi(row[5]); - entry.aug_3 = atoi(row[6]); - entry.aug_4 = atoi(row[7]); - entry.aug_5 = atoi(row[8]); - entry.aug_6 = atoi(row[9]); - entry.attuned = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCorpseItems entry{}; - - entry.corpse_id = atoi(row[0]); - entry.equip_slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.aug_1 = atoi(row[4]); - entry.aug_2 = atoi(row[5]); - entry.aug_3 = atoi(row[6]); - entry.aug_4 = atoi(row[7]); - entry.aug_5 = atoi(row[8]); - entry.aug_6 = atoi(row[9]); - entry.attuned = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index 3299a2e10..0fcea38b4 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -23,680 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_corpses_repository.h" -class CharacterCorpsesRepository { +class CharacterCorpsesRepository: public BaseCharacterCorpsesRepository { public: - struct CharacterCorpses { - int id; - int charid; - std::string charname; - int16 zone_id; - int16 instance_id; - float x; - float y; - float z; - float heading; - std::string time_of_death; - int guild_consent_id; - int8 is_rezzed; - int8 is_buried; - int8 was_at_graveyard; - int8 is_locked; - int exp; - int size; - int level; - int race; - int gender; - int class; - int deity; - int texture; - int helm_texture; - int copper; - int silver; - int gold; - int platinum; - int hair_color; - int beard_color; - int eye_color_1; - int eye_color_2; - int hair_style; - int face; - int beard; - int drakkin_heritage; - int drakkin_tattoo; - int drakkin_details; - int wc_1; - int wc_2; - int wc_3; - int wc_4; - int wc_5; - int wc_6; - int wc_7; - int wc_8; - int wc_9; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterCorpsesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterCorpsesRepository::GetWhereNeverExpires() + * CharacterCorpsesRepository::GetWhereXAndY() + * CharacterCorpsesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "charid", - "charname", - "zone_id", - "instance_id", - "x", - "y", - "z", - "heading", - "time_of_death", - "guild_consent_id", - "is_rezzed", - "is_buried", - "was_at_graveyard", - "is_locked", - "exp", - "size", - "level", - "race", - "gender", - "class", - "deity", - "texture", - "helm_texture", - "copper", - "silver", - "gold", - "platinum", - "hair_color", - "beard_color", - "eye_color_1", - "eye_color_2", - "hair_style", - "face", - "beard", - "drakkin_heritage", - "drakkin_tattoo", - "drakkin_details", - "wc_1", - "wc_2", - "wc_3", - "wc_4", - "wc_5", - "wc_6", - "wc_7", - "wc_8", - "wc_9", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_corpses"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterCorpses NewEntity() - { - CharacterCorpses entry{}; - - entry.id = 0; - entry.charid = 0; - entry.charname = ""; - entry.zone_id = 0; - entry.instance_id = 0; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.heading = 0; - entry.time_of_death = "0000-00-00 00:00:00"; - entry.guild_consent_id = 0; - entry.is_rezzed = 0; - entry.is_buried = 0; - entry.was_at_graveyard = 0; - entry.is_locked = 0; - entry.exp = 0; - entry.size = 0; - entry.level = 0; - entry.race = 0; - entry.gender = 0; - entry.class = 0; - entry.deity = 0; - entry.texture = 0; - entry.helm_texture = 0; - entry.copper = 0; - entry.silver = 0; - entry.gold = 0; - entry.platinum = 0; - entry.hair_color = 0; - entry.beard_color = 0; - entry.eye_color_1 = 0; - entry.eye_color_2 = 0; - entry.hair_style = 0; - entry.face = 0; - entry.beard = 0; - entry.drakkin_heritage = 0; - entry.drakkin_tattoo = 0; - entry.drakkin_details = 0; - entry.wc_1 = 0; - entry.wc_2 = 0; - entry.wc_3 = 0; - entry.wc_4 = 0; - entry.wc_5 = 0; - entry.wc_6 = 0; - entry.wc_7 = 0; - entry.wc_8 = 0; - entry.wc_9 = 0; - - return entry; - } - - static CharacterCorpses GetCharacterCorpsesEntry( - const std::vector &character_corpsess, - int character_corpses_id - ) - { - for (auto &character_corpses : character_corpsess) { - if (character_corpses.id == character_corpses_id) { - return character_corpses; - } - } - - return NewEntity(); - } - - static CharacterCorpses FindOne( - int character_corpses_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_corpses_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterCorpses entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.zone_id = atoi(row[3]); - entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); - entry.time_of_death = row[9] ? row[9] : ""; - entry.guild_consent_id = atoi(row[10]); - entry.is_rezzed = atoi(row[11]); - entry.is_buried = atoi(row[12]); - entry.was_at_graveyard = atoi(row[13]); - entry.is_locked = atoi(row[14]); - entry.exp = atoi(row[15]); - entry.size = atoi(row[16]); - entry.level = atoi(row[17]); - entry.race = atoi(row[18]); - entry.gender = atoi(row[19]); - entry.class = atoi(row[20]); - entry.deity = atoi(row[21]); - entry.texture = atoi(row[22]); - entry.helm_texture = atoi(row[23]); - entry.copper = atoi(row[24]); - entry.silver = atoi(row[25]); - entry.gold = atoi(row[26]); - entry.platinum = atoi(row[27]); - entry.hair_color = atoi(row[28]); - entry.beard_color = atoi(row[29]); - entry.eye_color_1 = atoi(row[30]); - entry.eye_color_2 = atoi(row[31]); - entry.hair_style = atoi(row[32]); - entry.face = atoi(row[33]); - entry.beard = atoi(row[34]); - entry.drakkin_heritage = atoi(row[35]); - entry.drakkin_tattoo = atoi(row[36]); - entry.drakkin_details = atoi(row[37]); - entry.wc_1 = atoi(row[38]); - entry.wc_2 = atoi(row[39]); - entry.wc_3 = atoi(row[40]); - entry.wc_4 = atoi(row[41]); - entry.wc_5 = atoi(row[42]); - entry.wc_6 = atoi(row[43]); - entry.wc_7 = atoi(row[44]); - entry.wc_8 = atoi(row[45]); - entry.wc_9 = atoi(row[46]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_corpses_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_corpses_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterCorpses character_corpses_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(character_corpses_entry.charid)); - update_values.push_back(columns[2] + " = '" + EscapeString(character_corpses_entry.charname) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(character_corpses_entry.zone_id)); - update_values.push_back(columns[4] + " = " + std::to_string(character_corpses_entry.instance_id)); - update_values.push_back(columns[5] + " = " + std::to_string(character_corpses_entry.x)); - update_values.push_back(columns[6] + " = " + std::to_string(character_corpses_entry.y)); - update_values.push_back(columns[7] + " = " + std::to_string(character_corpses_entry.z)); - update_values.push_back(columns[8] + " = " + std::to_string(character_corpses_entry.heading)); - update_values.push_back(columns[9] + " = '" + EscapeString(character_corpses_entry.time_of_death) + "'"); - update_values.push_back(columns[10] + " = " + std::to_string(character_corpses_entry.guild_consent_id)); - update_values.push_back(columns[11] + " = " + std::to_string(character_corpses_entry.is_rezzed)); - update_values.push_back(columns[12] + " = " + std::to_string(character_corpses_entry.is_buried)); - update_values.push_back(columns[13] + " = " + std::to_string(character_corpses_entry.was_at_graveyard)); - update_values.push_back(columns[14] + " = " + std::to_string(character_corpses_entry.is_locked)); - update_values.push_back(columns[15] + " = " + std::to_string(character_corpses_entry.exp)); - update_values.push_back(columns[16] + " = " + std::to_string(character_corpses_entry.size)); - update_values.push_back(columns[17] + " = " + std::to_string(character_corpses_entry.level)); - update_values.push_back(columns[18] + " = " + std::to_string(character_corpses_entry.race)); - update_values.push_back(columns[19] + " = " + std::to_string(character_corpses_entry.gender)); - update_values.push_back(columns[20] + " = " + std::to_string(character_corpses_entry.class)); - update_values.push_back(columns[21] + " = " + std::to_string(character_corpses_entry.deity)); - update_values.push_back(columns[22] + " = " + std::to_string(character_corpses_entry.texture)); - update_values.push_back(columns[23] + " = " + std::to_string(character_corpses_entry.helm_texture)); - update_values.push_back(columns[24] + " = " + std::to_string(character_corpses_entry.copper)); - update_values.push_back(columns[25] + " = " + std::to_string(character_corpses_entry.silver)); - update_values.push_back(columns[26] + " = " + std::to_string(character_corpses_entry.gold)); - update_values.push_back(columns[27] + " = " + std::to_string(character_corpses_entry.platinum)); - update_values.push_back(columns[28] + " = " + std::to_string(character_corpses_entry.hair_color)); - update_values.push_back(columns[29] + " = " + std::to_string(character_corpses_entry.beard_color)); - update_values.push_back(columns[30] + " = " + std::to_string(character_corpses_entry.eye_color_1)); - update_values.push_back(columns[31] + " = " + std::to_string(character_corpses_entry.eye_color_2)); - update_values.push_back(columns[32] + " = " + std::to_string(character_corpses_entry.hair_style)); - update_values.push_back(columns[33] + " = " + std::to_string(character_corpses_entry.face)); - update_values.push_back(columns[34] + " = " + std::to_string(character_corpses_entry.beard)); - update_values.push_back(columns[35] + " = " + std::to_string(character_corpses_entry.drakkin_heritage)); - update_values.push_back(columns[36] + " = " + std::to_string(character_corpses_entry.drakkin_tattoo)); - update_values.push_back(columns[37] + " = " + std::to_string(character_corpses_entry.drakkin_details)); - update_values.push_back(columns[38] + " = " + std::to_string(character_corpses_entry.wc_1)); - update_values.push_back(columns[39] + " = " + std::to_string(character_corpses_entry.wc_2)); - update_values.push_back(columns[40] + " = " + std::to_string(character_corpses_entry.wc_3)); - update_values.push_back(columns[41] + " = " + std::to_string(character_corpses_entry.wc_4)); - update_values.push_back(columns[42] + " = " + std::to_string(character_corpses_entry.wc_5)); - update_values.push_back(columns[43] + " = " + std::to_string(character_corpses_entry.wc_6)); - update_values.push_back(columns[44] + " = " + std::to_string(character_corpses_entry.wc_7)); - update_values.push_back(columns[45] + " = " + std::to_string(character_corpses_entry.wc_8)); - update_values.push_back(columns[46] + " = " + std::to_string(character_corpses_entry.wc_9)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_corpses_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterCorpses InsertOne( - CharacterCorpses character_corpses_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_corpses_entry.charid)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); - insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); - insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); - insert_values.push_back(std::to_string(character_corpses_entry.x)); - insert_values.push_back(std::to_string(character_corpses_entry.y)); - insert_values.push_back(std::to_string(character_corpses_entry.z)); - insert_values.push_back(std::to_string(character_corpses_entry.heading)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); - insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); - insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); - insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); - insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); - insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); - insert_values.push_back(std::to_string(character_corpses_entry.exp)); - insert_values.push_back(std::to_string(character_corpses_entry.size)); - insert_values.push_back(std::to_string(character_corpses_entry.level)); - insert_values.push_back(std::to_string(character_corpses_entry.race)); - insert_values.push_back(std::to_string(character_corpses_entry.gender)); - insert_values.push_back(std::to_string(character_corpses_entry.class)); - insert_values.push_back(std::to_string(character_corpses_entry.deity)); - insert_values.push_back(std::to_string(character_corpses_entry.texture)); - insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); - insert_values.push_back(std::to_string(character_corpses_entry.copper)); - insert_values.push_back(std::to_string(character_corpses_entry.silver)); - insert_values.push_back(std::to_string(character_corpses_entry.gold)); - insert_values.push_back(std::to_string(character_corpses_entry.platinum)); - insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); - insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); - insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); - insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); - insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); - insert_values.push_back(std::to_string(character_corpses_entry.face)); - insert_values.push_back(std::to_string(character_corpses_entry.beard)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_corpses_entry.id = results.LastInsertedID(); - return character_corpses_entry; - } - - character_corpses_entry = CharacterCorpsesRepository::NewEntity(); - - return character_corpses_entry; - } - - static int InsertMany( - std::vector character_corpses_entries - ) - { - std::vector insert_chunks; - - for (auto &character_corpses_entry: character_corpses_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_corpses_entry.charid)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.charname) + "'"); - insert_values.push_back(std::to_string(character_corpses_entry.zone_id)); - insert_values.push_back(std::to_string(character_corpses_entry.instance_id)); - insert_values.push_back(std::to_string(character_corpses_entry.x)); - insert_values.push_back(std::to_string(character_corpses_entry.y)); - insert_values.push_back(std::to_string(character_corpses_entry.z)); - insert_values.push_back(std::to_string(character_corpses_entry.heading)); - insert_values.push_back("'" + EscapeString(character_corpses_entry.time_of_death) + "'"); - insert_values.push_back(std::to_string(character_corpses_entry.guild_consent_id)); - insert_values.push_back(std::to_string(character_corpses_entry.is_rezzed)); - insert_values.push_back(std::to_string(character_corpses_entry.is_buried)); - insert_values.push_back(std::to_string(character_corpses_entry.was_at_graveyard)); - insert_values.push_back(std::to_string(character_corpses_entry.is_locked)); - insert_values.push_back(std::to_string(character_corpses_entry.exp)); - insert_values.push_back(std::to_string(character_corpses_entry.size)); - insert_values.push_back(std::to_string(character_corpses_entry.level)); - insert_values.push_back(std::to_string(character_corpses_entry.race)); - insert_values.push_back(std::to_string(character_corpses_entry.gender)); - insert_values.push_back(std::to_string(character_corpses_entry.class)); - insert_values.push_back(std::to_string(character_corpses_entry.deity)); - insert_values.push_back(std::to_string(character_corpses_entry.texture)); - insert_values.push_back(std::to_string(character_corpses_entry.helm_texture)); - insert_values.push_back(std::to_string(character_corpses_entry.copper)); - insert_values.push_back(std::to_string(character_corpses_entry.silver)); - insert_values.push_back(std::to_string(character_corpses_entry.gold)); - insert_values.push_back(std::to_string(character_corpses_entry.platinum)); - insert_values.push_back(std::to_string(character_corpses_entry.hair_color)); - insert_values.push_back(std::to_string(character_corpses_entry.beard_color)); - insert_values.push_back(std::to_string(character_corpses_entry.eye_color_1)); - insert_values.push_back(std::to_string(character_corpses_entry.eye_color_2)); - insert_values.push_back(std::to_string(character_corpses_entry.hair_style)); - insert_values.push_back(std::to_string(character_corpses_entry.face)); - insert_values.push_back(std::to_string(character_corpses_entry.beard)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(character_corpses_entry.drakkin_details)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_1)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_2)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_3)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_4)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_5)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_6)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_7)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_8)); - insert_values.push_back(std::to_string(character_corpses_entry.wc_9)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCorpses entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.zone_id = atoi(row[3]); - entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); - entry.time_of_death = row[9] ? row[9] : ""; - entry.guild_consent_id = atoi(row[10]); - entry.is_rezzed = atoi(row[11]); - entry.is_buried = atoi(row[12]); - entry.was_at_graveyard = atoi(row[13]); - entry.is_locked = atoi(row[14]); - entry.exp = atoi(row[15]); - entry.size = atoi(row[16]); - entry.level = atoi(row[17]); - entry.race = atoi(row[18]); - entry.gender = atoi(row[19]); - entry.class = atoi(row[20]); - entry.deity = atoi(row[21]); - entry.texture = atoi(row[22]); - entry.helm_texture = atoi(row[23]); - entry.copper = atoi(row[24]); - entry.silver = atoi(row[25]); - entry.gold = atoi(row[26]); - entry.platinum = atoi(row[27]); - entry.hair_color = atoi(row[28]); - entry.beard_color = atoi(row[29]); - entry.eye_color_1 = atoi(row[30]); - entry.eye_color_2 = atoi(row[31]); - entry.hair_style = atoi(row[32]); - entry.face = atoi(row[33]); - entry.beard = atoi(row[34]); - entry.drakkin_heritage = atoi(row[35]); - entry.drakkin_tattoo = atoi(row[36]); - entry.drakkin_details = atoi(row[37]); - entry.wc_1 = atoi(row[38]); - entry.wc_2 = atoi(row[39]); - entry.wc_3 = atoi(row[40]); - entry.wc_4 = atoi(row[41]); - entry.wc_5 = atoi(row[42]); - entry.wc_6 = atoi(row[43]); - entry.wc_7 = atoi(row[44]); - entry.wc_8 = atoi(row[45]); - entry.wc_9 = atoi(row[46]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCorpses entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.zone_id = atoi(row[3]); - entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); - entry.time_of_death = row[9] ? row[9] : ""; - entry.guild_consent_id = atoi(row[10]); - entry.is_rezzed = atoi(row[11]); - entry.is_buried = atoi(row[12]); - entry.was_at_graveyard = atoi(row[13]); - entry.is_locked = atoi(row[14]); - entry.exp = atoi(row[15]); - entry.size = atoi(row[16]); - entry.level = atoi(row[17]); - entry.race = atoi(row[18]); - entry.gender = atoi(row[19]); - entry.class = atoi(row[20]); - entry.deity = atoi(row[21]); - entry.texture = atoi(row[22]); - entry.helm_texture = atoi(row[23]); - entry.copper = atoi(row[24]); - entry.silver = atoi(row[25]); - entry.gold = atoi(row[26]); - entry.platinum = atoi(row[27]); - entry.hair_color = atoi(row[28]); - entry.beard_color = atoi(row[29]); - entry.eye_color_1 = atoi(row[30]); - entry.eye_color_2 = atoi(row[31]); - entry.hair_style = atoi(row[32]); - entry.face = atoi(row[33]); - entry.beard = atoi(row[34]); - entry.drakkin_heritage = atoi(row[35]); - entry.drakkin_tattoo = atoi(row[36]); - entry.drakkin_details = atoi(row[37]); - entry.wc_1 = atoi(row[38]); - entry.wc_2 = atoi(row[39]); - entry.wc_3 = atoi(row[40]); - entry.wc_4 = atoi(row[41]); - entry.wc_5 = atoi(row[42]); - entry.wc_6 = atoi(row[43]); - entry.wc_7 = atoi(row[44]); - entry.wc_8 = atoi(row[45]); - entry.wc_9 = atoi(row[46]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_currency_repository.h b/common/repositories/character_currency_repository.h index 934912a2f..0bd1bf1cc 100644 --- a/common/repositories/character_currency_repository.h +++ b/common/repositories/character_currency_repository.h @@ -23,410 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_currency_repository.h" -class CharacterCurrencyRepository { +class CharacterCurrencyRepository: public BaseCharacterCurrencyRepository { public: - struct CharacterCurrency { - int id; - int platinum; - int gold; - int silver; - int copper; - int platinum_bank; - int gold_bank; - int silver_bank; - int copper_bank; - int platinum_cursor; - int gold_cursor; - int silver_cursor; - int copper_cursor; - int radiant_crystals; - int career_radiant_crystals; - int ebon_crystals; - int career_ebon_crystals; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterCurrencyRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterCurrencyRepository::GetWhereNeverExpires() + * CharacterCurrencyRepository::GetWhereXAndY() + * CharacterCurrencyRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "platinum", - "gold", - "silver", - "copper", - "platinum_bank", - "gold_bank", - "silver_bank", - "copper_bank", - "platinum_cursor", - "gold_cursor", - "silver_cursor", - "copper_cursor", - "radiant_crystals", - "career_radiant_crystals", - "ebon_crystals", - "career_ebon_crystals", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_currency"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterCurrency NewEntity() - { - CharacterCurrency entry{}; - - entry.id = 0; - entry.platinum = 0; - entry.gold = 0; - entry.silver = 0; - entry.copper = 0; - entry.platinum_bank = 0; - entry.gold_bank = 0; - entry.silver_bank = 0; - entry.copper_bank = 0; - entry.platinum_cursor = 0; - entry.gold_cursor = 0; - entry.silver_cursor = 0; - entry.copper_cursor = 0; - entry.radiant_crystals = 0; - entry.career_radiant_crystals = 0; - entry.ebon_crystals = 0; - entry.career_ebon_crystals = 0; - - return entry; - } - - static CharacterCurrency GetCharacterCurrencyEntry( - const std::vector &character_currencys, - int character_currency_id - ) - { - for (auto &character_currency : character_currencys) { - if (character_currency.id == character_currency_id) { - return character_currency; - } - } - - return NewEntity(); - } - - static CharacterCurrency FindOne( - int character_currency_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_currency_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterCurrency entry{}; - - entry.id = atoi(row[0]); - entry.platinum = atoi(row[1]); - entry.gold = atoi(row[2]); - entry.silver = atoi(row[3]); - entry.copper = atoi(row[4]); - entry.platinum_bank = atoi(row[5]); - entry.gold_bank = atoi(row[6]); - entry.silver_bank = atoi(row[7]); - entry.copper_bank = atoi(row[8]); - entry.platinum_cursor = atoi(row[9]); - entry.gold_cursor = atoi(row[10]); - entry.silver_cursor = atoi(row[11]); - entry.copper_cursor = atoi(row[12]); - entry.radiant_crystals = atoi(row[13]); - entry.career_radiant_crystals = atoi(row[14]); - entry.ebon_crystals = atoi(row[15]); - entry.career_ebon_crystals = atoi(row[16]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_currency_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_currency_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterCurrency character_currency_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(character_currency_entry.platinum)); - update_values.push_back(columns[2] + " = " + std::to_string(character_currency_entry.gold)); - update_values.push_back(columns[3] + " = " + std::to_string(character_currency_entry.silver)); - update_values.push_back(columns[4] + " = " + std::to_string(character_currency_entry.copper)); - update_values.push_back(columns[5] + " = " + std::to_string(character_currency_entry.platinum_bank)); - update_values.push_back(columns[6] + " = " + std::to_string(character_currency_entry.gold_bank)); - update_values.push_back(columns[7] + " = " + std::to_string(character_currency_entry.silver_bank)); - update_values.push_back(columns[8] + " = " + std::to_string(character_currency_entry.copper_bank)); - update_values.push_back(columns[9] + " = " + std::to_string(character_currency_entry.platinum_cursor)); - update_values.push_back(columns[10] + " = " + std::to_string(character_currency_entry.gold_cursor)); - update_values.push_back(columns[11] + " = " + std::to_string(character_currency_entry.silver_cursor)); - update_values.push_back(columns[12] + " = " + std::to_string(character_currency_entry.copper_cursor)); - update_values.push_back(columns[13] + " = " + std::to_string(character_currency_entry.radiant_crystals)); - update_values.push_back(columns[14] + " = " + std::to_string(character_currency_entry.career_radiant_crystals)); - update_values.push_back(columns[15] + " = " + std::to_string(character_currency_entry.ebon_crystals)); - update_values.push_back(columns[16] + " = " + std::to_string(character_currency_entry.career_ebon_crystals)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_currency_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterCurrency InsertOne( - CharacterCurrency character_currency_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_currency_entry.platinum)); - insert_values.push_back(std::to_string(character_currency_entry.gold)); - insert_values.push_back(std::to_string(character_currency_entry.silver)); - insert_values.push_back(std::to_string(character_currency_entry.copper)); - insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); - insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); - insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); - insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); - insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_currency_entry.id = results.LastInsertedID(); - return character_currency_entry; - } - - character_currency_entry = CharacterCurrencyRepository::NewEntity(); - - return character_currency_entry; - } - - static int InsertMany( - std::vector character_currency_entries - ) - { - std::vector insert_chunks; - - for (auto &character_currency_entry: character_currency_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_currency_entry.platinum)); - insert_values.push_back(std::to_string(character_currency_entry.gold)); - insert_values.push_back(std::to_string(character_currency_entry.silver)); - insert_values.push_back(std::to_string(character_currency_entry.copper)); - insert_values.push_back(std::to_string(character_currency_entry.platinum_bank)); - insert_values.push_back(std::to_string(character_currency_entry.gold_bank)); - insert_values.push_back(std::to_string(character_currency_entry.silver_bank)); - insert_values.push_back(std::to_string(character_currency_entry.copper_bank)); - insert_values.push_back(std::to_string(character_currency_entry.platinum_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.gold_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.silver_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.copper_cursor)); - insert_values.push_back(std::to_string(character_currency_entry.radiant_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.career_radiant_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.ebon_crystals)); - insert_values.push_back(std::to_string(character_currency_entry.career_ebon_crystals)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCurrency entry{}; - - entry.id = atoi(row[0]); - entry.platinum = atoi(row[1]); - entry.gold = atoi(row[2]); - entry.silver = atoi(row[3]); - entry.copper = atoi(row[4]); - entry.platinum_bank = atoi(row[5]); - entry.gold_bank = atoi(row[6]); - entry.silver_bank = atoi(row[7]); - entry.copper_bank = atoi(row[8]); - entry.platinum_cursor = atoi(row[9]); - entry.gold_cursor = atoi(row[10]); - entry.silver_cursor = atoi(row[11]); - entry.copper_cursor = atoi(row[12]); - entry.radiant_crystals = atoi(row[13]); - entry.career_radiant_crystals = atoi(row[14]); - entry.ebon_crystals = atoi(row[15]); - entry.career_ebon_crystals = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterCurrency entry{}; - - entry.id = atoi(row[0]); - entry.platinum = atoi(row[1]); - entry.gold = atoi(row[2]); - entry.silver = atoi(row[3]); - entry.copper = atoi(row[4]); - entry.platinum_bank = atoi(row[5]); - entry.gold_bank = atoi(row[6]); - entry.silver_bank = atoi(row[7]); - entry.copper_bank = atoi(row[8]); - entry.platinum_cursor = atoi(row[9]); - entry.gold_cursor = atoi(row[10]); - entry.silver_cursor = atoi(row[11]); - entry.copper_cursor = atoi(row[12]); - entry.radiant_crystals = atoi(row[13]); - entry.career_radiant_crystals = atoi(row[14]); - entry.ebon_crystals = atoi(row[15]); - entry.career_ebon_crystals = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index 3e5f0749d..30214a1d1 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -23,1175 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_data_repository.h" -class CharacterDataRepository { +class CharacterDataRepository: public BaseCharacterDataRepository { public: - struct CharacterData { - int id; - int account_id; - std::string name; - std::string last_name; - std::string title; - std::string suffix; - int zone_id; - int zone_instance; - float y; - float x; - float z; - float heading; - int8 gender; - int16 race; - int8 class; - int level; - int deity; - int birthday; - int last_login; - int time_played; - int8 level2; - int8 anon; - int8 gm; - int face; - int8 hair_color; - int8 hair_style; - int8 beard; - int8 beard_color; - int8 eye_color_1; - int8 eye_color_2; - int drakkin_heritage; - int drakkin_tattoo; - int drakkin_details; - int8 ability_time_seconds; - int8 ability_number; - int8 ability_time_minutes; - int8 ability_time_hours; - int exp; - int aa_points_spent; - int aa_exp; - int aa_points; - int group_leadership_exp; - int raid_leadership_exp; - int group_leadership_points; - int raid_leadership_points; - int points; - int cur_hp; - int mana; - int endurance; - int intoxication; - int str; - int sta; - int cha; - int dex; - int int; - int agi; - int wis; - int zone_change_count; - int toxicity; - int hunger_level; - int thirst_level; - int ability_up; - int ldon_points_guk; - int ldon_points_mir; - int ldon_points_mmc; - int ldon_points_ruj; - int ldon_points_tak; - int ldon_points_available; - int tribute_time_remaining; - int career_tribute_points; - int tribute_points; - int tribute_active; - int8 pvp_status; - int pvp_kills; - int pvp_deaths; - int pvp_current_points; - int pvp_career_points; - int pvp_best_kill_streak; - int pvp_worst_death_streak; - int pvp_current_kill_streak; - int pvp2; - int pvp_type; - int show_helm; - int8 group_auto_consent; - int8 raid_auto_consent; - int8 guild_auto_consent; - int8 leadership_exp_on; - int RestTimer; - int air_remaining; - int autosplit_enabled; - int8 lfp; - int8 lfg; - std::string mailkey; - int8 xtargets; - int8 firstlogon; - int e_aa_effects; - int e_percent_to_aa; - int e_expended_aa_spent; - int aa_points_spent_old; - int aa_points_old; - int e_last_invsnapshot; - std::string deleted_at; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterDataRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterDataRepository::GetWhereNeverExpires() + * CharacterDataRepository::GetWhereXAndY() + * CharacterDataRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "account_id", - "name", - "last_name", - "title", - "suffix", - "zone_id", - "zone_instance", - "y", - "x", - "z", - "heading", - "gender", - "race", - "class", - "level", - "deity", - "birthday", - "last_login", - "time_played", - "level2", - "anon", - "gm", - "face", - "hair_color", - "hair_style", - "beard", - "beard_color", - "eye_color_1", - "eye_color_2", - "drakkin_heritage", - "drakkin_tattoo", - "drakkin_details", - "ability_time_seconds", - "ability_number", - "ability_time_minutes", - "ability_time_hours", - "exp", - "aa_points_spent", - "aa_exp", - "aa_points", - "group_leadership_exp", - "raid_leadership_exp", - "group_leadership_points", - "raid_leadership_points", - "points", - "cur_hp", - "mana", - "endurance", - "intoxication", - "str", - "sta", - "cha", - "dex", - "int", - "agi", - "wis", - "zone_change_count", - "toxicity", - "hunger_level", - "thirst_level", - "ability_up", - "ldon_points_guk", - "ldon_points_mir", - "ldon_points_mmc", - "ldon_points_ruj", - "ldon_points_tak", - "ldon_points_available", - "tribute_time_remaining", - "career_tribute_points", - "tribute_points", - "tribute_active", - "pvp_status", - "pvp_kills", - "pvp_deaths", - "pvp_current_points", - "pvp_career_points", - "pvp_best_kill_streak", - "pvp_worst_death_streak", - "pvp_current_kill_streak", - "pvp2", - "pvp_type", - "show_helm", - "group_auto_consent", - "raid_auto_consent", - "guild_auto_consent", - "leadership_exp_on", - "RestTimer", - "air_remaining", - "autosplit_enabled", - "lfp", - "lfg", - "mailkey", - "xtargets", - "firstlogon", - "e_aa_effects", - "e_percent_to_aa", - "e_expended_aa_spent", - "aa_points_spent_old", - "aa_points_old", - "e_last_invsnapshot", - "deleted_at", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_data"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterData NewEntity() - { - CharacterData entry{}; - - entry.id = 0; - entry.account_id = 0; - entry.name = ""; - entry.last_name = ""; - entry.title = ""; - entry.suffix = ""; - entry.zone_id = 0; - entry.zone_instance = 0; - entry.y = 0; - entry.x = 0; - entry.z = 0; - entry.heading = 0; - entry.gender = 0; - entry.race = 0; - entry.class = 0; - entry.level = 0; - entry.deity = 0; - entry.birthday = 0; - entry.last_login = 0; - entry.time_played = 0; - entry.level2 = 0; - entry.anon = 0; - entry.gm = 0; - entry.face = 0; - entry.hair_color = 0; - entry.hair_style = 0; - entry.beard = 0; - entry.beard_color = 0; - entry.eye_color_1 = 0; - entry.eye_color_2 = 0; - entry.drakkin_heritage = 0; - entry.drakkin_tattoo = 0; - entry.drakkin_details = 0; - entry.ability_time_seconds = 0; - entry.ability_number = 0; - entry.ability_time_minutes = 0; - entry.ability_time_hours = 0; - entry.exp = 0; - entry.aa_points_spent = 0; - entry.aa_exp = 0; - entry.aa_points = 0; - entry.group_leadership_exp = 0; - entry.raid_leadership_exp = 0; - entry.group_leadership_points = 0; - entry.raid_leadership_points = 0; - entry.points = 0; - entry.cur_hp = 0; - entry.mana = 0; - entry.endurance = 0; - entry.intoxication = 0; - entry.str = 0; - entry.sta = 0; - entry.cha = 0; - entry.dex = 0; - entry.int = 0; - entry.agi = 0; - entry.wis = 0; - entry.zone_change_count = 0; - entry.toxicity = 0; - entry.hunger_level = 0; - entry.thirst_level = 0; - entry.ability_up = 0; - entry.ldon_points_guk = 0; - entry.ldon_points_mir = 0; - entry.ldon_points_mmc = 0; - entry.ldon_points_ruj = 0; - entry.ldon_points_tak = 0; - entry.ldon_points_available = 0; - entry.tribute_time_remaining = 0; - entry.career_tribute_points = 0; - entry.tribute_points = 0; - entry.tribute_active = 0; - entry.pvp_status = 0; - entry.pvp_kills = 0; - entry.pvp_deaths = 0; - entry.pvp_current_points = 0; - entry.pvp_career_points = 0; - entry.pvp_best_kill_streak = 0; - entry.pvp_worst_death_streak = 0; - entry.pvp_current_kill_streak = 0; - entry.pvp2 = 0; - entry.pvp_type = 0; - entry.show_helm = 0; - entry.group_auto_consent = 0; - entry.raid_auto_consent = 0; - entry.guild_auto_consent = 0; - entry.leadership_exp_on = 0; - entry.RestTimer = 0; - entry.air_remaining = 0; - entry.autosplit_enabled = 0; - entry.lfp = 0; - entry.lfg = 0; - entry.mailkey = ""; - entry.xtargets = 5; - entry.firstlogon = 0; - entry.e_aa_effects = 0; - entry.e_percent_to_aa = 0; - entry.e_expended_aa_spent = 0; - entry.aa_points_spent_old = 0; - entry.aa_points_old = 0; - entry.e_last_invsnapshot = 0; - entry.deleted_at = 0; - - return entry; - } - - static CharacterData GetCharacterDataEntry( - const std::vector &character_datas, - int character_data_id - ) - { - for (auto &character_data : character_datas) { - if (character_data.id == character_data_id) { - return character_data; - } - } - - return NewEntity(); - } - - static CharacterData FindOne( - int character_data_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_data_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterData entry{}; - - entry.id = atoi(row[0]); - entry.account_id = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.last_name = row[3] ? row[3] : ""; - entry.title = row[4] ? row[4] : ""; - entry.suffix = row[5] ? row[5] : ""; - entry.zone_id = atoi(row[6]); - entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); - entry.gender = atoi(row[12]); - entry.race = atoi(row[13]); - entry.class = atoi(row[14]); - entry.level = atoi(row[15]); - entry.deity = atoi(row[16]); - entry.birthday = atoi(row[17]); - entry.last_login = atoi(row[18]); - entry.time_played = atoi(row[19]); - entry.level2 = atoi(row[20]); - entry.anon = atoi(row[21]); - entry.gm = atoi(row[22]); - entry.face = atoi(row[23]); - entry.hair_color = atoi(row[24]); - entry.hair_style = atoi(row[25]); - entry.beard = atoi(row[26]); - entry.beard_color = atoi(row[27]); - entry.eye_color_1 = atoi(row[28]); - entry.eye_color_2 = atoi(row[29]); - entry.drakkin_heritage = atoi(row[30]); - entry.drakkin_tattoo = atoi(row[31]); - entry.drakkin_details = atoi(row[32]); - entry.ability_time_seconds = atoi(row[33]); - entry.ability_number = atoi(row[34]); - entry.ability_time_minutes = atoi(row[35]); - entry.ability_time_hours = atoi(row[36]); - entry.exp = atoi(row[37]); - entry.aa_points_spent = atoi(row[38]); - entry.aa_exp = atoi(row[39]); - entry.aa_points = atoi(row[40]); - entry.group_leadership_exp = atoi(row[41]); - entry.raid_leadership_exp = atoi(row[42]); - entry.group_leadership_points = atoi(row[43]); - entry.raid_leadership_points = atoi(row[44]); - entry.points = atoi(row[45]); - entry.cur_hp = atoi(row[46]); - entry.mana = atoi(row[47]); - entry.endurance = atoi(row[48]); - entry.intoxication = atoi(row[49]); - entry.str = atoi(row[50]); - entry.sta = atoi(row[51]); - entry.cha = atoi(row[52]); - entry.dex = atoi(row[53]); - entry.int = atoi(row[54]); - entry.agi = atoi(row[55]); - entry.wis = atoi(row[56]); - entry.zone_change_count = atoi(row[57]); - entry.toxicity = atoi(row[58]); - entry.hunger_level = atoi(row[59]); - entry.thirst_level = atoi(row[60]); - entry.ability_up = atoi(row[61]); - entry.ldon_points_guk = atoi(row[62]); - entry.ldon_points_mir = atoi(row[63]); - entry.ldon_points_mmc = atoi(row[64]); - entry.ldon_points_ruj = atoi(row[65]); - entry.ldon_points_tak = atoi(row[66]); - entry.ldon_points_available = atoi(row[67]); - entry.tribute_time_remaining = atoi(row[68]); - entry.career_tribute_points = atoi(row[69]); - entry.tribute_points = atoi(row[70]); - entry.tribute_active = atoi(row[71]); - entry.pvp_status = atoi(row[72]); - entry.pvp_kills = atoi(row[73]); - entry.pvp_deaths = atoi(row[74]); - entry.pvp_current_points = atoi(row[75]); - entry.pvp_career_points = atoi(row[76]); - entry.pvp_best_kill_streak = atoi(row[77]); - entry.pvp_worst_death_streak = atoi(row[78]); - entry.pvp_current_kill_streak = atoi(row[79]); - entry.pvp2 = atoi(row[80]); - entry.pvp_type = atoi(row[81]); - entry.show_helm = atoi(row[82]); - entry.group_auto_consent = atoi(row[83]); - entry.raid_auto_consent = atoi(row[84]); - entry.guild_auto_consent = atoi(row[85]); - entry.leadership_exp_on = atoi(row[86]); - entry.RestTimer = atoi(row[87]); - entry.air_remaining = atoi(row[88]); - entry.autosplit_enabled = atoi(row[89]); - entry.lfp = atoi(row[90]); - entry.lfg = atoi(row[91]); - entry.mailkey = row[92] ? row[92] : ""; - entry.xtargets = atoi(row[93]); - entry.firstlogon = atoi(row[94]); - entry.e_aa_effects = atoi(row[95]); - entry.e_percent_to_aa = atoi(row[96]); - entry.e_expended_aa_spent = atoi(row[97]); - entry.aa_points_spent_old = atoi(row[98]); - entry.aa_points_old = atoi(row[99]); - entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101] ? row[101] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_data_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_data_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterData character_data_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(character_data_entry.account_id)); - update_values.push_back(columns[2] + " = '" + EscapeString(character_data_entry.name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(character_data_entry.last_name) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(character_data_entry.title) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(character_data_entry.suffix) + "'"); - update_values.push_back(columns[6] + " = " + std::to_string(character_data_entry.zone_id)); - update_values.push_back(columns[7] + " = " + std::to_string(character_data_entry.zone_instance)); - update_values.push_back(columns[8] + " = " + std::to_string(character_data_entry.y)); - update_values.push_back(columns[9] + " = " + std::to_string(character_data_entry.x)); - update_values.push_back(columns[10] + " = " + std::to_string(character_data_entry.z)); - update_values.push_back(columns[11] + " = " + std::to_string(character_data_entry.heading)); - update_values.push_back(columns[12] + " = " + std::to_string(character_data_entry.gender)); - update_values.push_back(columns[13] + " = " + std::to_string(character_data_entry.race)); - update_values.push_back(columns[14] + " = " + std::to_string(character_data_entry.class)); - update_values.push_back(columns[15] + " = " + std::to_string(character_data_entry.level)); - update_values.push_back(columns[16] + " = " + std::to_string(character_data_entry.deity)); - update_values.push_back(columns[17] + " = " + std::to_string(character_data_entry.birthday)); - update_values.push_back(columns[18] + " = " + std::to_string(character_data_entry.last_login)); - update_values.push_back(columns[19] + " = " + std::to_string(character_data_entry.time_played)); - update_values.push_back(columns[20] + " = " + std::to_string(character_data_entry.level2)); - update_values.push_back(columns[21] + " = " + std::to_string(character_data_entry.anon)); - update_values.push_back(columns[22] + " = " + std::to_string(character_data_entry.gm)); - update_values.push_back(columns[23] + " = " + std::to_string(character_data_entry.face)); - update_values.push_back(columns[24] + " = " + std::to_string(character_data_entry.hair_color)); - update_values.push_back(columns[25] + " = " + std::to_string(character_data_entry.hair_style)); - update_values.push_back(columns[26] + " = " + std::to_string(character_data_entry.beard)); - update_values.push_back(columns[27] + " = " + std::to_string(character_data_entry.beard_color)); - update_values.push_back(columns[28] + " = " + std::to_string(character_data_entry.eye_color_1)); - update_values.push_back(columns[29] + " = " + std::to_string(character_data_entry.eye_color_2)); - update_values.push_back(columns[30] + " = " + std::to_string(character_data_entry.drakkin_heritage)); - update_values.push_back(columns[31] + " = " + std::to_string(character_data_entry.drakkin_tattoo)); - update_values.push_back(columns[32] + " = " + std::to_string(character_data_entry.drakkin_details)); - update_values.push_back(columns[33] + " = " + std::to_string(character_data_entry.ability_time_seconds)); - update_values.push_back(columns[34] + " = " + std::to_string(character_data_entry.ability_number)); - update_values.push_back(columns[35] + " = " + std::to_string(character_data_entry.ability_time_minutes)); - update_values.push_back(columns[36] + " = " + std::to_string(character_data_entry.ability_time_hours)); - update_values.push_back(columns[37] + " = " + std::to_string(character_data_entry.exp)); - update_values.push_back(columns[38] + " = " + std::to_string(character_data_entry.aa_points_spent)); - update_values.push_back(columns[39] + " = " + std::to_string(character_data_entry.aa_exp)); - update_values.push_back(columns[40] + " = " + std::to_string(character_data_entry.aa_points)); - update_values.push_back(columns[41] + " = " + std::to_string(character_data_entry.group_leadership_exp)); - update_values.push_back(columns[42] + " = " + std::to_string(character_data_entry.raid_leadership_exp)); - update_values.push_back(columns[43] + " = " + std::to_string(character_data_entry.group_leadership_points)); - update_values.push_back(columns[44] + " = " + std::to_string(character_data_entry.raid_leadership_points)); - update_values.push_back(columns[45] + " = " + std::to_string(character_data_entry.points)); - update_values.push_back(columns[46] + " = " + std::to_string(character_data_entry.cur_hp)); - update_values.push_back(columns[47] + " = " + std::to_string(character_data_entry.mana)); - update_values.push_back(columns[48] + " = " + std::to_string(character_data_entry.endurance)); - update_values.push_back(columns[49] + " = " + std::to_string(character_data_entry.intoxication)); - update_values.push_back(columns[50] + " = " + std::to_string(character_data_entry.str)); - update_values.push_back(columns[51] + " = " + std::to_string(character_data_entry.sta)); - update_values.push_back(columns[52] + " = " + std::to_string(character_data_entry.cha)); - update_values.push_back(columns[53] + " = " + std::to_string(character_data_entry.dex)); - update_values.push_back(columns[54] + " = " + std::to_string(character_data_entry.int)); - update_values.push_back(columns[55] + " = " + std::to_string(character_data_entry.agi)); - update_values.push_back(columns[56] + " = " + std::to_string(character_data_entry.wis)); - update_values.push_back(columns[57] + " = " + std::to_string(character_data_entry.zone_change_count)); - update_values.push_back(columns[58] + " = " + std::to_string(character_data_entry.toxicity)); - update_values.push_back(columns[59] + " = " + std::to_string(character_data_entry.hunger_level)); - update_values.push_back(columns[60] + " = " + std::to_string(character_data_entry.thirst_level)); - update_values.push_back(columns[61] + " = " + std::to_string(character_data_entry.ability_up)); - update_values.push_back(columns[62] + " = " + std::to_string(character_data_entry.ldon_points_guk)); - update_values.push_back(columns[63] + " = " + std::to_string(character_data_entry.ldon_points_mir)); - update_values.push_back(columns[64] + " = " + std::to_string(character_data_entry.ldon_points_mmc)); - update_values.push_back(columns[65] + " = " + std::to_string(character_data_entry.ldon_points_ruj)); - update_values.push_back(columns[66] + " = " + std::to_string(character_data_entry.ldon_points_tak)); - update_values.push_back(columns[67] + " = " + std::to_string(character_data_entry.ldon_points_available)); - update_values.push_back(columns[68] + " = " + std::to_string(character_data_entry.tribute_time_remaining)); - update_values.push_back(columns[69] + " = " + std::to_string(character_data_entry.career_tribute_points)); - update_values.push_back(columns[70] + " = " + std::to_string(character_data_entry.tribute_points)); - update_values.push_back(columns[71] + " = " + std::to_string(character_data_entry.tribute_active)); - update_values.push_back(columns[72] + " = " + std::to_string(character_data_entry.pvp_status)); - update_values.push_back(columns[73] + " = " + std::to_string(character_data_entry.pvp_kills)); - update_values.push_back(columns[74] + " = " + std::to_string(character_data_entry.pvp_deaths)); - update_values.push_back(columns[75] + " = " + std::to_string(character_data_entry.pvp_current_points)); - update_values.push_back(columns[76] + " = " + std::to_string(character_data_entry.pvp_career_points)); - update_values.push_back(columns[77] + " = " + std::to_string(character_data_entry.pvp_best_kill_streak)); - update_values.push_back(columns[78] + " = " + std::to_string(character_data_entry.pvp_worst_death_streak)); - update_values.push_back(columns[79] + " = " + std::to_string(character_data_entry.pvp_current_kill_streak)); - update_values.push_back(columns[80] + " = " + std::to_string(character_data_entry.pvp2)); - update_values.push_back(columns[81] + " = " + std::to_string(character_data_entry.pvp_type)); - update_values.push_back(columns[82] + " = " + std::to_string(character_data_entry.show_helm)); - update_values.push_back(columns[83] + " = " + std::to_string(character_data_entry.group_auto_consent)); - update_values.push_back(columns[84] + " = " + std::to_string(character_data_entry.raid_auto_consent)); - update_values.push_back(columns[85] + " = " + std::to_string(character_data_entry.guild_auto_consent)); - update_values.push_back(columns[86] + " = " + std::to_string(character_data_entry.leadership_exp_on)); - update_values.push_back(columns[87] + " = " + std::to_string(character_data_entry.RestTimer)); - update_values.push_back(columns[88] + " = " + std::to_string(character_data_entry.air_remaining)); - update_values.push_back(columns[89] + " = " + std::to_string(character_data_entry.autosplit_enabled)); - update_values.push_back(columns[90] + " = " + std::to_string(character_data_entry.lfp)); - update_values.push_back(columns[91] + " = " + std::to_string(character_data_entry.lfg)); - update_values.push_back(columns[92] + " = '" + EscapeString(character_data_entry.mailkey) + "'"); - update_values.push_back(columns[93] + " = " + std::to_string(character_data_entry.xtargets)); - update_values.push_back(columns[94] + " = " + std::to_string(character_data_entry.firstlogon)); - update_values.push_back(columns[95] + " = " + std::to_string(character_data_entry.e_aa_effects)); - update_values.push_back(columns[96] + " = " + std::to_string(character_data_entry.e_percent_to_aa)); - update_values.push_back(columns[97] + " = " + std::to_string(character_data_entry.e_expended_aa_spent)); - update_values.push_back(columns[98] + " = " + std::to_string(character_data_entry.aa_points_spent_old)); - update_values.push_back(columns[99] + " = " + std::to_string(character_data_entry.aa_points_old)); - update_values.push_back(columns[100] + " = " + std::to_string(character_data_entry.e_last_invsnapshot)); - update_values.push_back(columns[101] + " = '" + EscapeString(character_data_entry.deleted_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_data_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterData InsertOne( - CharacterData character_data_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_data_entry.account_id)); - insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); - insert_values.push_back(std::to_string(character_data_entry.zone_id)); - insert_values.push_back(std::to_string(character_data_entry.zone_instance)); - insert_values.push_back(std::to_string(character_data_entry.y)); - insert_values.push_back(std::to_string(character_data_entry.x)); - insert_values.push_back(std::to_string(character_data_entry.z)); - insert_values.push_back(std::to_string(character_data_entry.heading)); - insert_values.push_back(std::to_string(character_data_entry.gender)); - insert_values.push_back(std::to_string(character_data_entry.race)); - insert_values.push_back(std::to_string(character_data_entry.class)); - insert_values.push_back(std::to_string(character_data_entry.level)); - insert_values.push_back(std::to_string(character_data_entry.deity)); - insert_values.push_back(std::to_string(character_data_entry.birthday)); - insert_values.push_back(std::to_string(character_data_entry.last_login)); - insert_values.push_back(std::to_string(character_data_entry.time_played)); - insert_values.push_back(std::to_string(character_data_entry.level2)); - insert_values.push_back(std::to_string(character_data_entry.anon)); - insert_values.push_back(std::to_string(character_data_entry.gm)); - insert_values.push_back(std::to_string(character_data_entry.face)); - insert_values.push_back(std::to_string(character_data_entry.hair_color)); - insert_values.push_back(std::to_string(character_data_entry.hair_style)); - insert_values.push_back(std::to_string(character_data_entry.beard)); - insert_values.push_back(std::to_string(character_data_entry.beard_color)); - insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); - insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); - insert_values.push_back(std::to_string(character_data_entry.ability_number)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); - insert_values.push_back(std::to_string(character_data_entry.exp)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); - insert_values.push_back(std::to_string(character_data_entry.aa_exp)); - insert_values.push_back(std::to_string(character_data_entry.aa_points)); - insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); - insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); - insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); - insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); - insert_values.push_back(std::to_string(character_data_entry.points)); - insert_values.push_back(std::to_string(character_data_entry.cur_hp)); - insert_values.push_back(std::to_string(character_data_entry.mana)); - insert_values.push_back(std::to_string(character_data_entry.endurance)); - insert_values.push_back(std::to_string(character_data_entry.intoxication)); - insert_values.push_back(std::to_string(character_data_entry.str)); - insert_values.push_back(std::to_string(character_data_entry.sta)); - insert_values.push_back(std::to_string(character_data_entry.cha)); - insert_values.push_back(std::to_string(character_data_entry.dex)); - insert_values.push_back(std::to_string(character_data_entry.int)); - insert_values.push_back(std::to_string(character_data_entry.agi)); - insert_values.push_back(std::to_string(character_data_entry.wis)); - insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); - insert_values.push_back(std::to_string(character_data_entry.toxicity)); - insert_values.push_back(std::to_string(character_data_entry.hunger_level)); - insert_values.push_back(std::to_string(character_data_entry.thirst_level)); - insert_values.push_back(std::to_string(character_data_entry.ability_up)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); - insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); - insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); - insert_values.push_back(std::to_string(character_data_entry.tribute_points)); - insert_values.push_back(std::to_string(character_data_entry.tribute_active)); - insert_values.push_back(std::to_string(character_data_entry.pvp_status)); - insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); - insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); - insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); - insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); - insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp2)); - insert_values.push_back(std::to_string(character_data_entry.pvp_type)); - insert_values.push_back(std::to_string(character_data_entry.show_helm)); - insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); - insert_values.push_back(std::to_string(character_data_entry.RestTimer)); - insert_values.push_back(std::to_string(character_data_entry.air_remaining)); - insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); - insert_values.push_back(std::to_string(character_data_entry.lfp)); - insert_values.push_back(std::to_string(character_data_entry.lfg)); - insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); - insert_values.push_back(std::to_string(character_data_entry.xtargets)); - insert_values.push_back(std::to_string(character_data_entry.firstlogon)); - insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); - insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); - insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); - insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); - insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_data_entry.id = results.LastInsertedID(); - return character_data_entry; - } - - character_data_entry = CharacterDataRepository::NewEntity(); - - return character_data_entry; - } - - static int InsertMany( - std::vector character_data_entries - ) - { - std::vector insert_chunks; - - for (auto &character_data_entry: character_data_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_data_entry.account_id)); - insert_values.push_back("'" + EscapeString(character_data_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.last_name) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.title) + "'"); - insert_values.push_back("'" + EscapeString(character_data_entry.suffix) + "'"); - insert_values.push_back(std::to_string(character_data_entry.zone_id)); - insert_values.push_back(std::to_string(character_data_entry.zone_instance)); - insert_values.push_back(std::to_string(character_data_entry.y)); - insert_values.push_back(std::to_string(character_data_entry.x)); - insert_values.push_back(std::to_string(character_data_entry.z)); - insert_values.push_back(std::to_string(character_data_entry.heading)); - insert_values.push_back(std::to_string(character_data_entry.gender)); - insert_values.push_back(std::to_string(character_data_entry.race)); - insert_values.push_back(std::to_string(character_data_entry.class)); - insert_values.push_back(std::to_string(character_data_entry.level)); - insert_values.push_back(std::to_string(character_data_entry.deity)); - insert_values.push_back(std::to_string(character_data_entry.birthday)); - insert_values.push_back(std::to_string(character_data_entry.last_login)); - insert_values.push_back(std::to_string(character_data_entry.time_played)); - insert_values.push_back(std::to_string(character_data_entry.level2)); - insert_values.push_back(std::to_string(character_data_entry.anon)); - insert_values.push_back(std::to_string(character_data_entry.gm)); - insert_values.push_back(std::to_string(character_data_entry.face)); - insert_values.push_back(std::to_string(character_data_entry.hair_color)); - insert_values.push_back(std::to_string(character_data_entry.hair_style)); - insert_values.push_back(std::to_string(character_data_entry.beard)); - insert_values.push_back(std::to_string(character_data_entry.beard_color)); - insert_values.push_back(std::to_string(character_data_entry.eye_color_1)); - insert_values.push_back(std::to_string(character_data_entry.eye_color_2)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(character_data_entry.drakkin_details)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_seconds)); - insert_values.push_back(std::to_string(character_data_entry.ability_number)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_minutes)); - insert_values.push_back(std::to_string(character_data_entry.ability_time_hours)); - insert_values.push_back(std::to_string(character_data_entry.exp)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_spent)); - insert_values.push_back(std::to_string(character_data_entry.aa_exp)); - insert_values.push_back(std::to_string(character_data_entry.aa_points)); - insert_values.push_back(std::to_string(character_data_entry.group_leadership_exp)); - insert_values.push_back(std::to_string(character_data_entry.raid_leadership_exp)); - insert_values.push_back(std::to_string(character_data_entry.group_leadership_points)); - insert_values.push_back(std::to_string(character_data_entry.raid_leadership_points)); - insert_values.push_back(std::to_string(character_data_entry.points)); - insert_values.push_back(std::to_string(character_data_entry.cur_hp)); - insert_values.push_back(std::to_string(character_data_entry.mana)); - insert_values.push_back(std::to_string(character_data_entry.endurance)); - insert_values.push_back(std::to_string(character_data_entry.intoxication)); - insert_values.push_back(std::to_string(character_data_entry.str)); - insert_values.push_back(std::to_string(character_data_entry.sta)); - insert_values.push_back(std::to_string(character_data_entry.cha)); - insert_values.push_back(std::to_string(character_data_entry.dex)); - insert_values.push_back(std::to_string(character_data_entry.int)); - insert_values.push_back(std::to_string(character_data_entry.agi)); - insert_values.push_back(std::to_string(character_data_entry.wis)); - insert_values.push_back(std::to_string(character_data_entry.zone_change_count)); - insert_values.push_back(std::to_string(character_data_entry.toxicity)); - insert_values.push_back(std::to_string(character_data_entry.hunger_level)); - insert_values.push_back(std::to_string(character_data_entry.thirst_level)); - insert_values.push_back(std::to_string(character_data_entry.ability_up)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_guk)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_mir)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_mmc)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_ruj)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_tak)); - insert_values.push_back(std::to_string(character_data_entry.ldon_points_available)); - insert_values.push_back(std::to_string(character_data_entry.tribute_time_remaining)); - insert_values.push_back(std::to_string(character_data_entry.career_tribute_points)); - insert_values.push_back(std::to_string(character_data_entry.tribute_points)); - insert_values.push_back(std::to_string(character_data_entry.tribute_active)); - insert_values.push_back(std::to_string(character_data_entry.pvp_status)); - insert_values.push_back(std::to_string(character_data_entry.pvp_kills)); - insert_values.push_back(std::to_string(character_data_entry.pvp_deaths)); - insert_values.push_back(std::to_string(character_data_entry.pvp_current_points)); - insert_values.push_back(std::to_string(character_data_entry.pvp_career_points)); - insert_values.push_back(std::to_string(character_data_entry.pvp_best_kill_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp_worst_death_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp_current_kill_streak)); - insert_values.push_back(std::to_string(character_data_entry.pvp2)); - insert_values.push_back(std::to_string(character_data_entry.pvp_type)); - insert_values.push_back(std::to_string(character_data_entry.show_helm)); - insert_values.push_back(std::to_string(character_data_entry.group_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.raid_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.guild_auto_consent)); - insert_values.push_back(std::to_string(character_data_entry.leadership_exp_on)); - insert_values.push_back(std::to_string(character_data_entry.RestTimer)); - insert_values.push_back(std::to_string(character_data_entry.air_remaining)); - insert_values.push_back(std::to_string(character_data_entry.autosplit_enabled)); - insert_values.push_back(std::to_string(character_data_entry.lfp)); - insert_values.push_back(std::to_string(character_data_entry.lfg)); - insert_values.push_back("'" + EscapeString(character_data_entry.mailkey) + "'"); - insert_values.push_back(std::to_string(character_data_entry.xtargets)); - insert_values.push_back(std::to_string(character_data_entry.firstlogon)); - insert_values.push_back(std::to_string(character_data_entry.e_aa_effects)); - insert_values.push_back(std::to_string(character_data_entry.e_percent_to_aa)); - insert_values.push_back(std::to_string(character_data_entry.e_expended_aa_spent)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_spent_old)); - insert_values.push_back(std::to_string(character_data_entry.aa_points_old)); - insert_values.push_back(std::to_string(character_data_entry.e_last_invsnapshot)); - insert_values.push_back("'" + EscapeString(character_data_entry.deleted_at) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterData entry{}; - - entry.id = atoi(row[0]); - entry.account_id = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.last_name = row[3] ? row[3] : ""; - entry.title = row[4] ? row[4] : ""; - entry.suffix = row[5] ? row[5] : ""; - entry.zone_id = atoi(row[6]); - entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); - entry.gender = atoi(row[12]); - entry.race = atoi(row[13]); - entry.class = atoi(row[14]); - entry.level = atoi(row[15]); - entry.deity = atoi(row[16]); - entry.birthday = atoi(row[17]); - entry.last_login = atoi(row[18]); - entry.time_played = atoi(row[19]); - entry.level2 = atoi(row[20]); - entry.anon = atoi(row[21]); - entry.gm = atoi(row[22]); - entry.face = atoi(row[23]); - entry.hair_color = atoi(row[24]); - entry.hair_style = atoi(row[25]); - entry.beard = atoi(row[26]); - entry.beard_color = atoi(row[27]); - entry.eye_color_1 = atoi(row[28]); - entry.eye_color_2 = atoi(row[29]); - entry.drakkin_heritage = atoi(row[30]); - entry.drakkin_tattoo = atoi(row[31]); - entry.drakkin_details = atoi(row[32]); - entry.ability_time_seconds = atoi(row[33]); - entry.ability_number = atoi(row[34]); - entry.ability_time_minutes = atoi(row[35]); - entry.ability_time_hours = atoi(row[36]); - entry.exp = atoi(row[37]); - entry.aa_points_spent = atoi(row[38]); - entry.aa_exp = atoi(row[39]); - entry.aa_points = atoi(row[40]); - entry.group_leadership_exp = atoi(row[41]); - entry.raid_leadership_exp = atoi(row[42]); - entry.group_leadership_points = atoi(row[43]); - entry.raid_leadership_points = atoi(row[44]); - entry.points = atoi(row[45]); - entry.cur_hp = atoi(row[46]); - entry.mana = atoi(row[47]); - entry.endurance = atoi(row[48]); - entry.intoxication = atoi(row[49]); - entry.str = atoi(row[50]); - entry.sta = atoi(row[51]); - entry.cha = atoi(row[52]); - entry.dex = atoi(row[53]); - entry.int = atoi(row[54]); - entry.agi = atoi(row[55]); - entry.wis = atoi(row[56]); - entry.zone_change_count = atoi(row[57]); - entry.toxicity = atoi(row[58]); - entry.hunger_level = atoi(row[59]); - entry.thirst_level = atoi(row[60]); - entry.ability_up = atoi(row[61]); - entry.ldon_points_guk = atoi(row[62]); - entry.ldon_points_mir = atoi(row[63]); - entry.ldon_points_mmc = atoi(row[64]); - entry.ldon_points_ruj = atoi(row[65]); - entry.ldon_points_tak = atoi(row[66]); - entry.ldon_points_available = atoi(row[67]); - entry.tribute_time_remaining = atoi(row[68]); - entry.career_tribute_points = atoi(row[69]); - entry.tribute_points = atoi(row[70]); - entry.tribute_active = atoi(row[71]); - entry.pvp_status = atoi(row[72]); - entry.pvp_kills = atoi(row[73]); - entry.pvp_deaths = atoi(row[74]); - entry.pvp_current_points = atoi(row[75]); - entry.pvp_career_points = atoi(row[76]); - entry.pvp_best_kill_streak = atoi(row[77]); - entry.pvp_worst_death_streak = atoi(row[78]); - entry.pvp_current_kill_streak = atoi(row[79]); - entry.pvp2 = atoi(row[80]); - entry.pvp_type = atoi(row[81]); - entry.show_helm = atoi(row[82]); - entry.group_auto_consent = atoi(row[83]); - entry.raid_auto_consent = atoi(row[84]); - entry.guild_auto_consent = atoi(row[85]); - entry.leadership_exp_on = atoi(row[86]); - entry.RestTimer = atoi(row[87]); - entry.air_remaining = atoi(row[88]); - entry.autosplit_enabled = atoi(row[89]); - entry.lfp = atoi(row[90]); - entry.lfg = atoi(row[91]); - entry.mailkey = row[92] ? row[92] : ""; - entry.xtargets = atoi(row[93]); - entry.firstlogon = atoi(row[94]); - entry.e_aa_effects = atoi(row[95]); - entry.e_percent_to_aa = atoi(row[96]); - entry.e_expended_aa_spent = atoi(row[97]); - entry.aa_points_spent_old = atoi(row[98]); - entry.aa_points_old = atoi(row[99]); - entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101] ? row[101] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterData entry{}; - - entry.id = atoi(row[0]); - entry.account_id = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.last_name = row[3] ? row[3] : ""; - entry.title = row[4] ? row[4] : ""; - entry.suffix = row[5] ? row[5] : ""; - entry.zone_id = atoi(row[6]); - entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); - entry.gender = atoi(row[12]); - entry.race = atoi(row[13]); - entry.class = atoi(row[14]); - entry.level = atoi(row[15]); - entry.deity = atoi(row[16]); - entry.birthday = atoi(row[17]); - entry.last_login = atoi(row[18]); - entry.time_played = atoi(row[19]); - entry.level2 = atoi(row[20]); - entry.anon = atoi(row[21]); - entry.gm = atoi(row[22]); - entry.face = atoi(row[23]); - entry.hair_color = atoi(row[24]); - entry.hair_style = atoi(row[25]); - entry.beard = atoi(row[26]); - entry.beard_color = atoi(row[27]); - entry.eye_color_1 = atoi(row[28]); - entry.eye_color_2 = atoi(row[29]); - entry.drakkin_heritage = atoi(row[30]); - entry.drakkin_tattoo = atoi(row[31]); - entry.drakkin_details = atoi(row[32]); - entry.ability_time_seconds = atoi(row[33]); - entry.ability_number = atoi(row[34]); - entry.ability_time_minutes = atoi(row[35]); - entry.ability_time_hours = atoi(row[36]); - entry.exp = atoi(row[37]); - entry.aa_points_spent = atoi(row[38]); - entry.aa_exp = atoi(row[39]); - entry.aa_points = atoi(row[40]); - entry.group_leadership_exp = atoi(row[41]); - entry.raid_leadership_exp = atoi(row[42]); - entry.group_leadership_points = atoi(row[43]); - entry.raid_leadership_points = atoi(row[44]); - entry.points = atoi(row[45]); - entry.cur_hp = atoi(row[46]); - entry.mana = atoi(row[47]); - entry.endurance = atoi(row[48]); - entry.intoxication = atoi(row[49]); - entry.str = atoi(row[50]); - entry.sta = atoi(row[51]); - entry.cha = atoi(row[52]); - entry.dex = atoi(row[53]); - entry.int = atoi(row[54]); - entry.agi = atoi(row[55]); - entry.wis = atoi(row[56]); - entry.zone_change_count = atoi(row[57]); - entry.toxicity = atoi(row[58]); - entry.hunger_level = atoi(row[59]); - entry.thirst_level = atoi(row[60]); - entry.ability_up = atoi(row[61]); - entry.ldon_points_guk = atoi(row[62]); - entry.ldon_points_mir = atoi(row[63]); - entry.ldon_points_mmc = atoi(row[64]); - entry.ldon_points_ruj = atoi(row[65]); - entry.ldon_points_tak = atoi(row[66]); - entry.ldon_points_available = atoi(row[67]); - entry.tribute_time_remaining = atoi(row[68]); - entry.career_tribute_points = atoi(row[69]); - entry.tribute_points = atoi(row[70]); - entry.tribute_active = atoi(row[71]); - entry.pvp_status = atoi(row[72]); - entry.pvp_kills = atoi(row[73]); - entry.pvp_deaths = atoi(row[74]); - entry.pvp_current_points = atoi(row[75]); - entry.pvp_career_points = atoi(row[76]); - entry.pvp_best_kill_streak = atoi(row[77]); - entry.pvp_worst_death_streak = atoi(row[78]); - entry.pvp_current_kill_streak = atoi(row[79]); - entry.pvp2 = atoi(row[80]); - entry.pvp_type = atoi(row[81]); - entry.show_helm = atoi(row[82]); - entry.group_auto_consent = atoi(row[83]); - entry.raid_auto_consent = atoi(row[84]); - entry.guild_auto_consent = atoi(row[85]); - entry.leadership_exp_on = atoi(row[86]); - entry.RestTimer = atoi(row[87]); - entry.air_remaining = atoi(row[88]); - entry.autosplit_enabled = atoi(row[89]); - entry.lfp = atoi(row[90]); - entry.lfg = atoi(row[91]); - entry.mailkey = row[92] ? row[92] : ""; - entry.xtargets = atoi(row[93]); - entry.firstlogon = atoi(row[94]); - entry.e_aa_effects = atoi(row[95]); - entry.e_percent_to_aa = atoi(row[96]); - entry.e_expended_aa_spent = atoi(row[97]); - entry.aa_points_spent_old = atoi(row[98]); - entry.aa_points_old = atoi(row[99]); - entry.e_last_invsnapshot = atoi(row[100]); - entry.deleted_at = row[101] ? row[101] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_disciplines_repository.h b/common/repositories/character_disciplines_repository.h index cb6acbae1..c77051e0f 100644 --- a/common/repositories/character_disciplines_repository.h +++ b/common/repositories/character_disciplines_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_disciplines_repository.h" -class CharacterDisciplinesRepository { +class CharacterDisciplinesRepository: public BaseCharacterDisciplinesRepository { public: - struct CharacterDisciplines { - int id; - int16 slot_id; - int16 disc_id; - }; - static std::string PrimaryKey() - { - return std::string("slot_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterDisciplinesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterDisciplinesRepository::GetWhereNeverExpires() + * CharacterDisciplinesRepository::GetWhereXAndY() + * CharacterDisciplinesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot_id", - "disc_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_disciplines"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterDisciplines NewEntity() - { - CharacterDisciplines entry{}; - - entry.id = 0; - entry.slot_id = 0; - entry.disc_id = 0; - - return entry; - } - - static CharacterDisciplines GetCharacterDisciplinesEntry( - const std::vector &character_discipliness, - int character_disciplines_id - ) - { - for (auto &character_disciplines : character_discipliness) { - if (character_disciplines.slot_id == character_disciplines_id) { - return character_disciplines; - } - } - - return NewEntity(); - } - - static CharacterDisciplines FindOne( - int character_disciplines_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_disciplines_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterDisciplines entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.disc_id = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_disciplines_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_disciplines_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterDisciplines character_disciplines_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_disciplines_entry.disc_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_disciplines_entry.slot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterDisciplines InsertOne( - CharacterDisciplines character_disciplines_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_disciplines_entry.id = results.LastInsertedID(); - return character_disciplines_entry; - } - - character_disciplines_entry = CharacterDisciplinesRepository::NewEntity(); - - return character_disciplines_entry; - } - - static int InsertMany( - std::vector character_disciplines_entries - ) - { - std::vector insert_chunks; - - for (auto &character_disciplines_entry: character_disciplines_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterDisciplines entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.disc_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterDisciplines entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.disc_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index 7595a8cfe..b75385ad7 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_inspect_messages_repository.h" -class CharacterInspectMessagesRepository { +class CharacterInspectMessagesRepository: public BaseCharacterInspectMessagesRepository { public: - struct CharacterInspectMessages { - int id; - std::string inspect_message; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterInspectMessagesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterInspectMessagesRepository::GetWhereNeverExpires() + * CharacterInspectMessagesRepository::GetWhereXAndY() + * CharacterInspectMessagesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "inspect_message", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_inspect_messages"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterInspectMessages NewEntity() - { - CharacterInspectMessages entry{}; - - entry.id = 0; - entry.inspect_message = ""; - - return entry; - } - - static CharacterInspectMessages GetCharacterInspectMessagesEntry( - const std::vector &character_inspect_messagess, - int character_inspect_messages_id - ) - { - for (auto &character_inspect_messages : character_inspect_messagess) { - if (character_inspect_messages.id == character_inspect_messages_id) { - return character_inspect_messages; - } - } - - return NewEntity(); - } - - static CharacterInspectMessages FindOne( - int character_inspect_messages_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_inspect_messages_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterInspectMessages entry{}; - - entry.id = atoi(row[0]); - entry.inspect_message = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_inspect_messages_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_inspect_messages_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterInspectMessages character_inspect_messages_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_inspect_messages_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterInspectMessages InsertOne( - CharacterInspectMessages character_inspect_messages_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_inspect_messages_entry.id = results.LastInsertedID(); - return character_inspect_messages_entry; - } - - character_inspect_messages_entry = CharacterInspectMessagesRepository::NewEntity(); - - return character_inspect_messages_entry; - } - - static int InsertMany( - std::vector character_inspect_messages_entries - ) - { - std::vector insert_chunks; - - for (auto &character_inspect_messages_entry: character_inspect_messages_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterInspectMessages entry{}; - - entry.id = atoi(row[0]); - entry.inspect_message = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterInspectMessages entry{}; - - entry.id = atoi(row[0]); - entry.inspect_message = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_item_recast_repository.h b/common/repositories/character_item_recast_repository.h index da53df165..223225759 100644 --- a/common/repositories/character_item_recast_repository.h +++ b/common/repositories/character_item_recast_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_item_recast_repository.h" -class CharacterItemRecastRepository { +class CharacterItemRecastRepository: public BaseCharacterItemRecastRepository { public: - struct CharacterItemRecast { - int id; - int16 recast_type; - int timestamp; - }; - static std::string PrimaryKey() - { - return std::string("recast_type"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterItemRecastRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterItemRecastRepository::GetWhereNeverExpires() + * CharacterItemRecastRepository::GetWhereXAndY() + * CharacterItemRecastRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "recast_type", - "timestamp", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_item_recast"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterItemRecast NewEntity() - { - CharacterItemRecast entry{}; - - entry.id = 0; - entry.recast_type = 0; - entry.timestamp = 0; - - return entry; - } - - static CharacterItemRecast GetCharacterItemRecastEntry( - const std::vector &character_item_recasts, - int character_item_recast_id - ) - { - for (auto &character_item_recast : character_item_recasts) { - if (character_item_recast.recast_type == character_item_recast_id) { - return character_item_recast; - } - } - - return NewEntity(); - } - - static CharacterItemRecast FindOne( - int character_item_recast_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_item_recast_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterItemRecast entry{}; - - entry.id = atoi(row[0]); - entry.recast_type = atoi(row[1]); - entry.timestamp = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_item_recast_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_item_recast_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterItemRecast character_item_recast_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_item_recast_entry.timestamp)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_item_recast_entry.recast_type - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterItemRecast InsertOne( - CharacterItemRecast character_item_recast_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_item_recast_entry.id = results.LastInsertedID(); - return character_item_recast_entry; - } - - character_item_recast_entry = CharacterItemRecastRepository::NewEntity(); - - return character_item_recast_entry; - } - - static int InsertMany( - std::vector character_item_recast_entries - ) - { - std::vector insert_chunks; - - for (auto &character_item_recast_entry: character_item_recast_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterItemRecast entry{}; - - entry.id = atoi(row[0]); - entry.recast_type = atoi(row[1]); - entry.timestamp = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterItemRecast entry{}; - - entry.id = atoi(row[0]); - entry.recast_type = atoi(row[1]); - entry.timestamp = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_languages_repository.h b/common/repositories/character_languages_repository.h index 46d01c183..bb10eac4f 100644 --- a/common/repositories/character_languages_repository.h +++ b/common/repositories/character_languages_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_languages_repository.h" -class CharacterLanguagesRepository { +class CharacterLanguagesRepository: public BaseCharacterLanguagesRepository { public: - struct CharacterLanguages { - int id; - int16 lang_id; - int16 value; - }; - static std::string PrimaryKey() - { - return std::string("lang_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterLanguagesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterLanguagesRepository::GetWhereNeverExpires() + * CharacterLanguagesRepository::GetWhereXAndY() + * CharacterLanguagesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "lang_id", - "value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_languages"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterLanguages NewEntity() - { - CharacterLanguages entry{}; - - entry.id = 0; - entry.lang_id = 0; - entry.value = 0; - - return entry; - } - - static CharacterLanguages GetCharacterLanguagesEntry( - const std::vector &character_languagess, - int character_languages_id - ) - { - for (auto &character_languages : character_languagess) { - if (character_languages.lang_id == character_languages_id) { - return character_languages; - } - } - - return NewEntity(); - } - - static CharacterLanguages FindOne( - int character_languages_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_languages_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterLanguages entry{}; - - entry.id = atoi(row[0]); - entry.lang_id = atoi(row[1]); - entry.value = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_languages_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_languages_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterLanguages character_languages_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_languages_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_languages_entry.lang_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterLanguages InsertOne( - CharacterLanguages character_languages_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_languages_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_languages_entry.id = results.LastInsertedID(); - return character_languages_entry; - } - - character_languages_entry = CharacterLanguagesRepository::NewEntity(); - - return character_languages_entry; - } - - static int InsertMany( - std::vector character_languages_entries - ) - { - std::vector insert_chunks; - - for (auto &character_languages_entry: character_languages_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_languages_entry.value)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterLanguages entry{}; - - entry.id = atoi(row[0]); - entry.lang_id = atoi(row[1]); - entry.value = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterLanguages entry{}; - - entry.id = atoi(row[0]); - entry.lang_id = atoi(row[1]); - entry.value = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_leadership_abilities_repository.h b/common/repositories/character_leadership_abilities_repository.h index 311ee5ab5..79ed63697 100644 --- a/common/repositories/character_leadership_abilities_repository.h +++ b/common/repositories/character_leadership_abilities_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_leadership_abilities_repository.h" -class CharacterLeadershipAbilitiesRepository { +class CharacterLeadershipAbilitiesRepository: public BaseCharacterLeadershipAbilitiesRepository { public: - struct CharacterLeadershipAbilities { - int id; - int16 slot; - int16 rank; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterLeadershipAbilitiesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterLeadershipAbilitiesRepository::GetWhereNeverExpires() + * CharacterLeadershipAbilitiesRepository::GetWhereXAndY() + * CharacterLeadershipAbilitiesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot", - "rank", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_leadership_abilities"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterLeadershipAbilities NewEntity() - { - CharacterLeadershipAbilities entry{}; - - entry.id = 0; - entry.slot = 0; - entry.rank = 0; - - return entry; - } - - static CharacterLeadershipAbilities GetCharacterLeadershipAbilitiesEntry( - const std::vector &character_leadership_abilitiess, - int character_leadership_abilities_id - ) - { - for (auto &character_leadership_abilities : character_leadership_abilitiess) { - if (character_leadership_abilities.slot == character_leadership_abilities_id) { - return character_leadership_abilities; - } - } - - return NewEntity(); - } - - static CharacterLeadershipAbilities FindOne( - int character_leadership_abilities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_leadership_abilities_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterLeadershipAbilities entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.rank = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_leadership_abilities_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_leadership_abilities_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterLeadershipAbilities character_leadership_abilities_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_leadership_abilities_entry.rank)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_leadership_abilities_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterLeadershipAbilities InsertOne( - CharacterLeadershipAbilities character_leadership_abilities_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_leadership_abilities_entry.id = results.LastInsertedID(); - return character_leadership_abilities_entry; - } - - character_leadership_abilities_entry = CharacterLeadershipAbilitiesRepository::NewEntity(); - - return character_leadership_abilities_entry; - } - - static int InsertMany( - std::vector character_leadership_abilities_entries - ) - { - std::vector insert_chunks; - - for (auto &character_leadership_abilities_entry: character_leadership_abilities_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterLeadershipAbilities entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.rank = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterLeadershipAbilities entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.rank = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_material_repository.h b/common/repositories/character_material_repository.h index 179085e8f..8d95f599d 100644 --- a/common/repositories/character_material_repository.h +++ b/common/repositories/character_material_repository.h @@ -23,317 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_material_repository.h" -class CharacterMaterialRepository { +class CharacterMaterialRepository: public BaseCharacterMaterialRepository { public: - struct CharacterMaterial { - int id; - int8 slot; - int8 blue; - int8 green; - int8 red; - int8 use_tint; - int color; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterMaterialRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterMaterialRepository::GetWhereNeverExpires() + * CharacterMaterialRepository::GetWhereXAndY() + * CharacterMaterialRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot", - "blue", - "green", - "red", - "use_tint", - "color", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_material"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterMaterial NewEntity() - { - CharacterMaterial entry{}; - - entry.id = 0; - entry.slot = 0; - entry.blue = 0; - entry.green = 0; - entry.red = 0; - entry.use_tint = 0; - entry.color = 0; - - return entry; - } - - static CharacterMaterial GetCharacterMaterialEntry( - const std::vector &character_materials, - int character_material_id - ) - { - for (auto &character_material : character_materials) { - if (character_material.slot == character_material_id) { - return character_material; - } - } - - return NewEntity(); - } - - static CharacterMaterial FindOne( - int character_material_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_material_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterMaterial entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.blue = atoi(row[2]); - entry.green = atoi(row[3]); - entry.red = atoi(row[4]); - entry.use_tint = atoi(row[5]); - entry.color = atoi(row[6]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_material_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_material_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterMaterial character_material_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_material_entry.blue)); - update_values.push_back(columns[3] + " = " + std::to_string(character_material_entry.green)); - update_values.push_back(columns[4] + " = " + std::to_string(character_material_entry.red)); - update_values.push_back(columns[5] + " = " + std::to_string(character_material_entry.use_tint)); - update_values.push_back(columns[6] + " = " + std::to_string(character_material_entry.color)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_material_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterMaterial InsertOne( - CharacterMaterial character_material_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_material_entry.blue)); - insert_values.push_back(std::to_string(character_material_entry.green)); - insert_values.push_back(std::to_string(character_material_entry.red)); - insert_values.push_back(std::to_string(character_material_entry.use_tint)); - insert_values.push_back(std::to_string(character_material_entry.color)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_material_entry.id = results.LastInsertedID(); - return character_material_entry; - } - - character_material_entry = CharacterMaterialRepository::NewEntity(); - - return character_material_entry; - } - - static int InsertMany( - std::vector character_material_entries - ) - { - std::vector insert_chunks; - - for (auto &character_material_entry: character_material_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_material_entry.blue)); - insert_values.push_back(std::to_string(character_material_entry.green)); - insert_values.push_back(std::to_string(character_material_entry.red)); - insert_values.push_back(std::to_string(character_material_entry.use_tint)); - insert_values.push_back(std::to_string(character_material_entry.color)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterMaterial entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.blue = atoi(row[2]); - entry.green = atoi(row[3]); - entry.red = atoi(row[4]); - entry.use_tint = atoi(row[5]); - entry.color = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterMaterial entry{}; - - entry.id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.blue = atoi(row[2]); - entry.green = atoi(row[3]); - entry.red = atoi(row[4]); - entry.use_tint = atoi(row[5]); - entry.color = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_memmed_spells_repository.h b/common/repositories/character_memmed_spells_repository.h index f2c1d2925..41520d767 100644 --- a/common/repositories/character_memmed_spells_repository.h +++ b/common/repositories/character_memmed_spells_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_memmed_spells_repository.h" -class CharacterMemmedSpellsRepository { +class CharacterMemmedSpellsRepository: public BaseCharacterMemmedSpellsRepository { public: - struct CharacterMemmedSpells { - int id; - int16 slot_id; - int16 spell_id; - }; - static std::string PrimaryKey() - { - return std::string("slot_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterMemmedSpellsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterMemmedSpellsRepository::GetWhereNeverExpires() + * CharacterMemmedSpellsRepository::GetWhereXAndY() + * CharacterMemmedSpellsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot_id", - "spell_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_memmed_spells"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterMemmedSpells NewEntity() - { - CharacterMemmedSpells entry{}; - - entry.id = 0; - entry.slot_id = 0; - entry.spell_id = 0; - - return entry; - } - - static CharacterMemmedSpells GetCharacterMemmedSpellsEntry( - const std::vector &character_memmed_spellss, - int character_memmed_spells_id - ) - { - for (auto &character_memmed_spells : character_memmed_spellss) { - if (character_memmed_spells.slot_id == character_memmed_spells_id) { - return character_memmed_spells; - } - } - - return NewEntity(); - } - - static CharacterMemmedSpells FindOne( - int character_memmed_spells_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_memmed_spells_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterMemmedSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_memmed_spells_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_memmed_spells_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterMemmedSpells character_memmed_spells_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_memmed_spells_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_memmed_spells_entry.slot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterMemmedSpells InsertOne( - CharacterMemmedSpells character_memmed_spells_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_memmed_spells_entry.id = results.LastInsertedID(); - return character_memmed_spells_entry; - } - - character_memmed_spells_entry = CharacterMemmedSpellsRepository::NewEntity(); - - return character_memmed_spells_entry; - } - - static int InsertMany( - std::vector character_memmed_spells_entries - ) - { - std::vector insert_chunks; - - for (auto &character_memmed_spells_entry: character_memmed_spells_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterMemmedSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterMemmedSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h index a34c9dccf..c2fe7e10d 100644 --- a/common/repositories/character_pet_buffs_repository.h +++ b/common/repositories/character_pet_buffs_repository.h @@ -23,350 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_pet_buffs_repository.h" -class CharacterPetBuffsRepository { +class CharacterPetBuffsRepository: public BaseCharacterPetBuffsRepository { public: - struct CharacterPetBuffs { - int char_id; - int pet; - int slot; - int spell_id; - int8 caster_level; - std::string castername; - int ticsremaining; - int counters; - int numhits; - int rune; - int8 instrument_mod; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterPetBuffsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterPetBuffsRepository::GetWhereNeverExpires() + * CharacterPetBuffsRepository::GetWhereXAndY() + * CharacterPetBuffsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "pet", - "slot", - "spell_id", - "caster_level", - "castername", - "ticsremaining", - "counters", - "numhits", - "rune", - "instrument_mod", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_pet_buffs"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterPetBuffs NewEntity() - { - CharacterPetBuffs entry{}; - - entry.char_id = 0; - entry.pet = 0; - entry.slot = 0; - entry.spell_id = 0; - entry.caster_level = 0; - entry.castername = ""; - entry.ticsremaining = 0; - entry.counters = 0; - entry.numhits = 0; - entry.rune = 0; - entry.instrument_mod = 10; - - return entry; - } - - static CharacterPetBuffs GetCharacterPetBuffsEntry( - const std::vector &character_pet_buffss, - int character_pet_buffs_id - ) - { - for (auto &character_pet_buffs : character_pet_buffss) { - if (character_pet_buffs.slot == character_pet_buffs_id) { - return character_pet_buffs; - } - } - - return NewEntity(); - } - - static CharacterPetBuffs FindOne( - int character_pet_buffs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_pet_buffs_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterPetBuffs entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.spell_id = atoi(row[3]); - entry.caster_level = atoi(row[4]); - entry.castername = row[5] ? row[5] : ""; - entry.ticsremaining = atoi(row[6]); - entry.counters = atoi(row[7]); - entry.numhits = atoi(row[8]); - entry.rune = atoi(row[9]); - entry.instrument_mod = atoi(row[10]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_pet_buffs_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_pet_buffs_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterPetBuffs character_pet_buffs_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(character_pet_buffs_entry.spell_id)); - update_values.push_back(columns[4] + " = " + std::to_string(character_pet_buffs_entry.caster_level)); - update_values.push_back(columns[5] + " = '" + EscapeString(character_pet_buffs_entry.castername) + "'"); - update_values.push_back(columns[6] + " = " + std::to_string(character_pet_buffs_entry.ticsremaining)); - update_values.push_back(columns[7] + " = " + std::to_string(character_pet_buffs_entry.counters)); - update_values.push_back(columns[8] + " = " + std::to_string(character_pet_buffs_entry.numhits)); - update_values.push_back(columns[9] + " = " + std::to_string(character_pet_buffs_entry.rune)); - update_values.push_back(columns[10] + " = " + std::to_string(character_pet_buffs_entry.instrument_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_pet_buffs_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterPetBuffs InsertOne( - CharacterPetBuffs character_pet_buffs_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); - insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); - insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_pet_buffs_entry.id = results.LastInsertedID(); - return character_pet_buffs_entry; - } - - character_pet_buffs_entry = CharacterPetBuffsRepository::NewEntity(); - - return character_pet_buffs_entry; - } - - static int InsertMany( - std::vector character_pet_buffs_entries - ) - { - std::vector insert_chunks; - - for (auto &character_pet_buffs_entry: character_pet_buffs_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); - insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); - insert_values.push_back(std::to_string(character_pet_buffs_entry.ticsremaining)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.counters)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.numhits)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.rune)); - insert_values.push_back(std::to_string(character_pet_buffs_entry.instrument_mod)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetBuffs entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.spell_id = atoi(row[3]); - entry.caster_level = atoi(row[4]); - entry.castername = row[5] ? row[5] : ""; - entry.ticsremaining = atoi(row[6]); - entry.counters = atoi(row[7]); - entry.numhits = atoi(row[8]); - entry.rune = atoi(row[9]); - entry.instrument_mod = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetBuffs entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.spell_id = atoi(row[3]); - entry.caster_level = atoi(row[4]); - entry.castername = row[5] ? row[5] : ""; - entry.ticsremaining = atoi(row[6]); - entry.counters = atoi(row[7]); - entry.numhits = atoi(row[8]); - entry.rune = atoi(row[9]); - entry.instrument_mod = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index 7f72eeed2..1c5fa56d7 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -23,326 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_pet_info_repository.h" -class CharacterPetInfoRepository { +class CharacterPetInfoRepository: public BaseCharacterPetInfoRepository { public: - struct CharacterPetInfo { - int char_id; - int pet; - std::string petname; - int petpower; - int spell_id; - int hp; - int mana; - float size; - }; - static std::string PrimaryKey() - { - return std::string("pet"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterPetInfoRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterPetInfoRepository::GetWhereNeverExpires() + * CharacterPetInfoRepository::GetWhereXAndY() + * CharacterPetInfoRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "pet", - "petname", - "petpower", - "spell_id", - "hp", - "mana", - "size", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_pet_info"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterPetInfo NewEntity() - { - CharacterPetInfo entry{}; - - entry.char_id = 0; - entry.pet = 0; - entry.petname = ""; - entry.petpower = 0; - entry.spell_id = 0; - entry.hp = 0; - entry.mana = 0; - entry.size = 0; - - return entry; - } - - static CharacterPetInfo GetCharacterPetInfoEntry( - const std::vector &character_pet_infos, - int character_pet_info_id - ) - { - for (auto &character_pet_info : character_pet_infos) { - if (character_pet_info.pet == character_pet_info_id) { - return character_pet_info; - } - } - - return NewEntity(); - } - - static CharacterPetInfo FindOne( - int character_pet_info_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_pet_info_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterPetInfo entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.petname = row[2] ? row[2] : ""; - entry.petpower = atoi(row[3]); - entry.spell_id = atoi(row[4]); - entry.hp = atoi(row[5]); - entry.mana = atoi(row[6]); - entry.size = atof(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_pet_info_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_pet_info_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterPetInfo character_pet_info_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(character_pet_info_entry.petname) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(character_pet_info_entry.petpower)); - update_values.push_back(columns[4] + " = " + std::to_string(character_pet_info_entry.spell_id)); - update_values.push_back(columns[5] + " = " + std::to_string(character_pet_info_entry.hp)); - update_values.push_back(columns[6] + " = " + std::to_string(character_pet_info_entry.mana)); - update_values.push_back(columns[7] + " = " + std::to_string(character_pet_info_entry.size)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_pet_info_entry.pet - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterPetInfo InsertOne( - CharacterPetInfo character_pet_info_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); - insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); - insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); - insert_values.push_back(std::to_string(character_pet_info_entry.hp)); - insert_values.push_back(std::to_string(character_pet_info_entry.mana)); - insert_values.push_back(std::to_string(character_pet_info_entry.size)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_pet_info_entry.id = results.LastInsertedID(); - return character_pet_info_entry; - } - - character_pet_info_entry = CharacterPetInfoRepository::NewEntity(); - - return character_pet_info_entry; - } - - static int InsertMany( - std::vector character_pet_info_entries - ) - { - std::vector insert_chunks; - - for (auto &character_pet_info_entry: character_pet_info_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); - insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); - insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); - insert_values.push_back(std::to_string(character_pet_info_entry.hp)); - insert_values.push_back(std::to_string(character_pet_info_entry.mana)); - insert_values.push_back(std::to_string(character_pet_info_entry.size)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetInfo entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.petname = row[2] ? row[2] : ""; - entry.petpower = atoi(row[3]); - entry.spell_id = atoi(row[4]); - entry.hp = atoi(row[5]); - entry.mana = atoi(row[6]); - entry.size = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetInfo entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.petname = row[2] ? row[2] : ""; - entry.petpower = atoi(row[3]); - entry.spell_id = atoi(row[4]); - entry.hp = atoi(row[5]); - entry.mana = atoi(row[6]); - entry.size = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_pet_inventory_repository.h b/common/repositories/character_pet_inventory_repository.h index f75349f42..6a3c298df 100644 --- a/common/repositories/character_pet_inventory_repository.h +++ b/common/repositories/character_pet_inventory_repository.h @@ -23,287 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_pet_inventory_repository.h" -class CharacterPetInventoryRepository { +class CharacterPetInventoryRepository: public BaseCharacterPetInventoryRepository { public: - struct CharacterPetInventory { - int char_id; - int pet; - int slot; - int item_id; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterPetInventoryRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterPetInventoryRepository::GetWhereNeverExpires() + * CharacterPetInventoryRepository::GetWhereXAndY() + * CharacterPetInventoryRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "pet", - "slot", - "item_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_pet_inventory"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterPetInventory NewEntity() - { - CharacterPetInventory entry{}; - - entry.char_id = 0; - entry.pet = 0; - entry.slot = 0; - entry.item_id = 0; - - return entry; - } - - static CharacterPetInventory GetCharacterPetInventoryEntry( - const std::vector &character_pet_inventorys, - int character_pet_inventory_id - ) - { - for (auto &character_pet_inventory : character_pet_inventorys) { - if (character_pet_inventory.slot == character_pet_inventory_id) { - return character_pet_inventory; - } - } - - return NewEntity(); - } - - static CharacterPetInventory FindOne( - int character_pet_inventory_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_pet_inventory_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterPetInventory entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_pet_inventory_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_pet_inventory_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterPetInventory character_pet_inventory_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(character_pet_inventory_entry.item_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_pet_inventory_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterPetInventory InsertOne( - CharacterPetInventory character_pet_inventory_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_pet_inventory_entry.id = results.LastInsertedID(); - return character_pet_inventory_entry; - } - - character_pet_inventory_entry = CharacterPetInventoryRepository::NewEntity(); - - return character_pet_inventory_entry; - } - - static int InsertMany( - std::vector character_pet_inventory_entries - ) - { - std::vector insert_chunks; - - for (auto &character_pet_inventory_entry: character_pet_inventory_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetInventory entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPetInventory entry{}; - - entry.char_id = atoi(row[0]); - entry.pet = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.item_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_potionbelt_repository.h b/common/repositories/character_potionbelt_repository.h index 7b1039baf..2eaa76319 100644 --- a/common/repositories/character_potionbelt_repository.h +++ b/common/repositories/character_potionbelt_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_potionbelt_repository.h" -class CharacterPotionbeltRepository { +class CharacterPotionbeltRepository: public BaseCharacterPotionbeltRepository { public: - struct CharacterPotionbelt { - int id; - int8 potion_id; - int item_id; - int icon; - }; - static std::string PrimaryKey() - { - return std::string("potion_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterPotionbeltRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterPotionbeltRepository::GetWhereNeverExpires() + * CharacterPotionbeltRepository::GetWhereXAndY() + * CharacterPotionbeltRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "potion_id", - "item_id", - "icon", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_potionbelt"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterPotionbelt NewEntity() - { - CharacterPotionbelt entry{}; - - entry.id = 0; - entry.potion_id = 0; - entry.item_id = 0; - entry.icon = 0; - - return entry; - } - - static CharacterPotionbelt GetCharacterPotionbeltEntry( - const std::vector &character_potionbelts, - int character_potionbelt_id - ) - { - for (auto &character_potionbelt : character_potionbelts) { - if (character_potionbelt.potion_id == character_potionbelt_id) { - return character_potionbelt; - } - } - - return NewEntity(); - } - - static CharacterPotionbelt FindOne( - int character_potionbelt_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_potionbelt_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterPotionbelt entry{}; - - entry.id = atoi(row[0]); - entry.potion_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.icon = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_potionbelt_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_potionbelt_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterPotionbelt character_potionbelt_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_potionbelt_entry.item_id)); - update_values.push_back(columns[3] + " = " + std::to_string(character_potionbelt_entry.icon)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_potionbelt_entry.potion_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterPotionbelt InsertOne( - CharacterPotionbelt character_potionbelt_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); - insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_potionbelt_entry.id = results.LastInsertedID(); - return character_potionbelt_entry; - } - - character_potionbelt_entry = CharacterPotionbeltRepository::NewEntity(); - - return character_potionbelt_entry; - } - - static int InsertMany( - std::vector character_potionbelt_entries - ) - { - std::vector insert_chunks; - - for (auto &character_potionbelt_entry: character_potionbelt_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); - insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPotionbelt entry{}; - - entry.id = atoi(row[0]); - entry.potion_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.icon = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterPotionbelt entry{}; - - entry.id = atoi(row[0]); - entry.potion_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.icon = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_skills_repository.h b/common/repositories/character_skills_repository.h index 3983e307b..2fd041c16 100644 --- a/common/repositories/character_skills_repository.h +++ b/common/repositories/character_skills_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_skills_repository.h" -class CharacterSkillsRepository { +class CharacterSkillsRepository: public BaseCharacterSkillsRepository { public: - struct CharacterSkills { - int id; - int16 skill_id; - int16 value; - }; - static std::string PrimaryKey() - { - return std::string("skill_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterSkillsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterSkillsRepository::GetWhereNeverExpires() + * CharacterSkillsRepository::GetWhereXAndY() + * CharacterSkillsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "skill_id", - "value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_skills"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterSkills NewEntity() - { - CharacterSkills entry{}; - - entry.id = 0; - entry.skill_id = 0; - entry.value = 0; - - return entry; - } - - static CharacterSkills GetCharacterSkillsEntry( - const std::vector &character_skillss, - int character_skills_id - ) - { - for (auto &character_skills : character_skillss) { - if (character_skills.skill_id == character_skills_id) { - return character_skills; - } - } - - return NewEntity(); - } - - static CharacterSkills FindOne( - int character_skills_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_skills_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterSkills entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.value = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_skills_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_skills_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterSkills character_skills_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_skills_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_skills_entry.skill_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterSkills InsertOne( - CharacterSkills character_skills_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_skills_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_skills_entry.id = results.LastInsertedID(); - return character_skills_entry; - } - - character_skills_entry = CharacterSkillsRepository::NewEntity(); - - return character_skills_entry; - } - - static int InsertMany( - std::vector character_skills_entries - ) - { - std::vector insert_chunks; - - for (auto &character_skills_entry: character_skills_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_skills_entry.value)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterSkills entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.value = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterSkills entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.value = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_spells_repository.h b/common/repositories/character_spells_repository.h index 61cee3d92..639f8c983 100644 --- a/common/repositories/character_spells_repository.h +++ b/common/repositories/character_spells_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_spells_repository.h" -class CharacterSpellsRepository { +class CharacterSpellsRepository: public BaseCharacterSpellsRepository { public: - struct CharacterSpells { - int id; - int16 slot_id; - int16 spell_id; - }; - static std::string PrimaryKey() - { - return std::string("slot_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterSpellsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterSpellsRepository::GetWhereNeverExpires() + * CharacterSpellsRepository::GetWhereXAndY() + * CharacterSpellsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "slot_id", - "spell_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_spells"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterSpells NewEntity() - { - CharacterSpells entry{}; - - entry.id = 0; - entry.slot_id = 0; - entry.spell_id = 0; - - return entry; - } - - static CharacterSpells GetCharacterSpellsEntry( - const std::vector &character_spellss, - int character_spells_id - ) - { - for (auto &character_spells : character_spellss) { - if (character_spells.slot_id == character_spells_id) { - return character_spells; - } - } - - return NewEntity(); - } - - static CharacterSpells FindOne( - int character_spells_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_spells_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_spells_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_spells_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterSpells character_spells_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_spells_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_spells_entry.slot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterSpells InsertOne( - CharacterSpells character_spells_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_spells_entry.spell_id)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_spells_entry.id = results.LastInsertedID(); - return character_spells_entry; - } - - character_spells_entry = CharacterSpellsRepository::NewEntity(); - - return character_spells_entry; - } - - static int InsertMany( - std::vector character_spells_entries - ) - { - std::vector insert_chunks; - - for (auto &character_spells_entry: character_spells_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_spells_entry.spell_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterSpells entry{}; - - entry.id = atoi(row[0]); - entry.slot_id = atoi(row[1]); - entry.spell_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_tasks_repository.h b/common/repositories/character_tasks_repository.h index e145b7712..316eca15b 100644 --- a/common/repositories/character_tasks_repository.h +++ b/common/repositories/character_tasks_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_tasks_repository.h" -class CharacterTasksRepository { +class CharacterTasksRepository: public BaseCharacterTasksRepository { public: - struct CharacterTasks { - int charid; - int taskid; - int slot; - int8 type; - int acceptedtime; - }; - static std::string PrimaryKey() - { - return std::string("taskid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterTasksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterTasksRepository::GetWhereNeverExpires() + * CharacterTasksRepository::GetWhereXAndY() + * CharacterTasksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "taskid", - "slot", - "type", - "acceptedtime", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_tasks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterTasks NewEntity() - { - CharacterTasks entry{}; - - entry.charid = 0; - entry.taskid = 0; - entry.slot = 0; - entry.type = 0; - entry.acceptedtime = 0; - - return entry; - } - - static CharacterTasks GetCharacterTasksEntry( - const std::vector &character_taskss, - int character_tasks_id - ) - { - for (auto &character_tasks : character_taskss) { - if (character_tasks.taskid == character_tasks_id) { - return character_tasks; - } - } - - return NewEntity(); - } - - static CharacterTasks FindOne( - int character_tasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_tasks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterTasks entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.type = atoi(row[3]); - entry.acceptedtime = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_tasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_tasks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterTasks character_tasks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(character_tasks_entry.slot)); - update_values.push_back(columns[3] + " = " + std::to_string(character_tasks_entry.type)); - update_values.push_back(columns[4] + " = " + std::to_string(character_tasks_entry.acceptedtime)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_tasks_entry.taskid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterTasks InsertOne( - CharacterTasks character_tasks_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tasks_entry.slot)); - insert_values.push_back(std::to_string(character_tasks_entry.type)); - insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_tasks_entry.id = results.LastInsertedID(); - return character_tasks_entry; - } - - character_tasks_entry = CharacterTasksRepository::NewEntity(); - - return character_tasks_entry; - } - - static int InsertMany( - std::vector character_tasks_entries - ) - { - std::vector insert_chunks; - - for (auto &character_tasks_entry: character_tasks_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tasks_entry.slot)); - insert_values.push_back(std::to_string(character_tasks_entry.type)); - insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTasks entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.type = atoi(row[3]); - entry.acceptedtime = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTasks entry{}; - - entry.charid = atoi(row[0]); - entry.taskid = atoi(row[1]); - entry.slot = atoi(row[2]); - entry.type = atoi(row[3]); - entry.acceptedtime = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h index 7e9ef2015..739062a44 100644 --- a/common/repositories/character_tribute_repository.h +++ b/common/repositories/character_tribute_repository.h @@ -23,287 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_character_tribute_repository.h" -class CharacterTributeRepository { +class CharacterTributeRepository: public BaseCharacterTributeRepository { public: - struct CharacterTribute { - int id; - int8 tier; - int tribute; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CharacterTributeRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CharacterTributeRepository::GetWhereNeverExpires() + * CharacterTributeRepository::GetWhereXAndY() + * CharacterTributeRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "tier", - "tribute", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_tribute"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterTribute NewEntity() - { - CharacterTribute entry{}; - - entry.id = 0; - entry.tier = 0; - entry.tribute = 0; - - return entry; - } - - static CharacterTribute GetCharacterTributeEntry( - const std::vector &character_tributes, - int character_tribute_id - ) - { - for (auto &character_tribute : character_tributes) { - if (character_tribute.id == character_tribute_id) { - return character_tribute; - } - } - - return NewEntity(); - } - - static CharacterTribute FindOne( - int character_tribute_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_tribute_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_tribute_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_tribute_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterTribute character_tribute_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(character_tribute_entry.id)); - update_values.push_back(columns[1] + " = " + std::to_string(character_tribute_entry.tier)); - update_values.push_back(columns[2] + " = " + std::to_string(character_tribute_entry.tribute)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_tribute_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterTribute InsertOne( - CharacterTribute character_tribute_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tribute_entry.id)); - insert_values.push_back(std::to_string(character_tribute_entry.tier)); - insert_values.push_back(std::to_string(character_tribute_entry.tribute)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_tribute_entry.id = results.LastInsertedID(); - return character_tribute_entry; - } - - character_tribute_entry = CharacterTributeRepository::NewEntity(); - - return character_tribute_entry; - } - - static int InsertMany( - std::vector character_tribute_entries - ) - { - std::vector insert_chunks; - - for (auto &character_tribute_entry: character_tribute_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tribute_entry.id)); - insert_values.push_back(std::to_string(character_tribute_entry.tier)); - insert_values.push_back(std::to_string(character_tribute_entry.tribute)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h index 06f8511c6..c13e3c4f4 100644 --- a/common/repositories/chatchannels_repository.h +++ b/common/repositories/chatchannels_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_chatchannels_repository.h" -class ChatchannelsRepository { +class ChatchannelsRepository: public BaseChatchannelsRepository { public: - struct Chatchannels { - std::string name; - std::string owner; - std::string password; - int minstatus; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ChatchannelsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ChatchannelsRepository::GetWhereNeverExpires() + * ChatchannelsRepository::GetWhereXAndY() + * ChatchannelsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "name", - "owner", - "password", - "minstatus", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("chatchannels"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Chatchannels NewEntity() - { - Chatchannels entry{}; - - entry.name = ""; - entry.owner = ""; - entry.password = ""; - entry.minstatus = 0; - - return entry; - } - - static Chatchannels GetChatchannelsEntry( - const std::vector &chatchannelss, - int chatchannels_id - ) - { - for (auto &chatchannels : chatchannelss) { - if (chatchannels.name == chatchannels_id) { - return chatchannels; - } - } - - return NewEntity(); - } - - static Chatchannels FindOne( - int chatchannels_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - chatchannels_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int chatchannels_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - chatchannels_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Chatchannels chatchannels_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(chatchannels_entry.owner) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(chatchannels_entry.password) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(chatchannels_entry.minstatus)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - chatchannels_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Chatchannels InsertOne( - Chatchannels chatchannels_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); - insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); - insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - chatchannels_entry.id = results.LastInsertedID(); - return chatchannels_entry; - } - - chatchannels_entry = ChatchannelsRepository::NewEntity(); - - return chatchannels_entry; - } - - static int InsertMany( - std::vector chatchannels_entries - ) - { - std::vector insert_chunks; - - for (auto &chatchannels_entry: chatchannels_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); - insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); - insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h index a5622e537..ee1844100 100644 --- a/common/repositories/command_settings_repository.h +++ b/common/repositories/command_settings_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_command_settings_repository.h" -class CommandSettingsRepository { +class CommandSettingsRepository: public BaseCommandSettingsRepository { public: - struct CommandSettings { - std::string command; - int access; - std::string aliases; - }; - static std::string PrimaryKey() - { - return std::string("command"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CommandSettingsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CommandSettingsRepository::GetWhereNeverExpires() + * CommandSettingsRepository::GetWhereXAndY() + * CommandSettingsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "command", - "access", - "aliases", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("command_settings"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CommandSettings NewEntity() - { - CommandSettings entry{}; - - entry.command = ""; - entry.access = 0; - entry.aliases = ""; - - return entry; - } - - static CommandSettings GetCommandSettingsEntry( - const std::vector &command_settingss, - int command_settings_id - ) - { - for (auto &command_settings : command_settingss) { - if (command_settings.command == command_settings_id) { - return command_settings; - } - } - - return NewEntity(); - } - - static CommandSettings FindOne( - int command_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - command_settings_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int command_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - command_settings_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CommandSettings command_settings_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(command_settings_entry.access)); - update_values.push_back(columns[2] + " = '" + EscapeString(command_settings_entry.aliases) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - command_settings_entry.command - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CommandSettings InsertOne( - CommandSettings command_settings_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(command_settings_entry.access)); - insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - command_settings_entry.id = results.LastInsertedID(); - return command_settings_entry; - } - - command_settings_entry = CommandSettingsRepository::NewEntity(); - - return command_settings_entry; - } - - static int InsertMany( - std::vector command_settings_entries - ) - { - std::vector insert_chunks; - - for (auto &command_settings_entry: command_settings_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(command_settings_entry.access)); - insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/completed_tasks_repository.h b/common/repositories/completed_tasks_repository.h index 1d0e5169b..f131c62ad 100644 --- a/common/repositories/completed_tasks_repository.h +++ b/common/repositories/completed_tasks_repository.h @@ -23,287 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_completed_tasks_repository.h" -class CompletedTasksRepository { +class CompletedTasksRepository: public BaseCompletedTasksRepository { public: - struct CompletedTasks { - int charid; - int completedtime; - int taskid; - int activityid; - }; - static std::string PrimaryKey() - { - return std::string("activityid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * CompletedTasksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * CompletedTasksRepository::GetWhereNeverExpires() + * CompletedTasksRepository::GetWhereXAndY() + * CompletedTasksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "completedtime", - "taskid", - "activityid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("completed_tasks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CompletedTasks NewEntity() - { - CompletedTasks entry{}; - - entry.charid = 0; - entry.completedtime = 0; - entry.taskid = 0; - entry.activityid = 0; - - return entry; - } - - static CompletedTasks GetCompletedTasksEntry( - const std::vector &completed_taskss, - int completed_tasks_id - ) - { - for (auto &completed_tasks : completed_taskss) { - if (completed_tasks.activityid == completed_tasks_id) { - return completed_tasks; - } - } - - return NewEntity(); - } - - static CompletedTasks FindOne( - int completed_tasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - completed_tasks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CompletedTasks entry{}; - - entry.charid = atoi(row[0]); - entry.completedtime = atoi(row[1]); - entry.taskid = atoi(row[2]); - entry.activityid = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int completed_tasks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - completed_tasks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CompletedTasks completed_tasks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - completed_tasks_entry.activityid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CompletedTasks InsertOne( - CompletedTasks completed_tasks_entry - ) - { - std::vector insert_values; - - - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - completed_tasks_entry.id = results.LastInsertedID(); - return completed_tasks_entry; - } - - completed_tasks_entry = CompletedTasksRepository::NewEntity(); - - return completed_tasks_entry; - } - - static int InsertMany( - std::vector completed_tasks_entries - ) - { - std::vector insert_chunks; - - for (auto &completed_tasks_entry: completed_tasks_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CompletedTasks entry{}; - - entry.charid = atoi(row[0]); - entry.completedtime = atoi(row[1]); - entry.taskid = atoi(row[2]); - entry.activityid = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CompletedTasks entry{}; - - entry.charid = atoi(row[0]); - entry.completedtime = atoi(row[1]); - entry.taskid = atoi(row[2]); - entry.activityid = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index 4c8e6ccf5..d5f1f4455 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_data_buckets_repository.h" -class DataBucketsRepository { +class DataBucketsRepository: public BaseDataBucketsRepository { public: - struct DataBuckets { - int id; - std::string key; - std::string value; - int expires; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * DataBucketsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * DataBucketsRepository::GetWhereNeverExpires() + * DataBucketsRepository::GetWhereXAndY() + * DataBucketsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "key", - "value", - "expires", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("data_buckets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static DataBuckets NewEntity() - { - DataBuckets entry{}; - - entry.id = 0; - entry.key = ""; - entry.value = ""; - entry.expires = 0; - - return entry; - } - - static DataBuckets GetDataBucketsEntry( - const std::vector &data_bucketss, - int data_buckets_id - ) - { - for (auto &data_buckets : data_bucketss) { - if (data_buckets.id == data_buckets_id) { - return data_buckets; - } - } - - return NewEntity(); - } - - static DataBuckets FindOne( - int data_buckets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - data_buckets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - DataBuckets entry{}; - - entry.id = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - entry.expires = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int data_buckets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - data_buckets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - DataBuckets data_buckets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(data_buckets_entry.key) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(data_buckets_entry.value) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(data_buckets_entry.expires)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - data_buckets_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static DataBuckets InsertOne( - DataBuckets data_buckets_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); - insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); - insert_values.push_back(std::to_string(data_buckets_entry.expires)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - data_buckets_entry.id = results.LastInsertedID(); - return data_buckets_entry; - } - - data_buckets_entry = DataBucketsRepository::NewEntity(); - - return data_buckets_entry; - } - - static int InsertMany( - std::vector data_buckets_entries - ) - { - std::vector insert_chunks; - - for (auto &data_buckets_entry: data_buckets_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(data_buckets_entry.key) + "'"); - insert_values.push_back("'" + EscapeString(data_buckets_entry.value) + "'"); - insert_values.push_back(std::to_string(data_buckets_entry.expires)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DataBuckets entry{}; - - entry.id = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - entry.expires = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DataBuckets entry{}; - - entry.id = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - entry.expires = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index 4fe546ea0..3dbde06fd 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_db_str_repository.h" -class DbStrRepository { +class DbStrRepository: public BaseDbStrRepository { public: - struct DbStr { - int id; - int type; - std::string value; - }; - static std::string PrimaryKey() - { - return std::string("type"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * DbStrRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * DbStrRepository::GetWhereNeverExpires() + * DbStrRepository::GetWhereXAndY() + * DbStrRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "type", - "value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("db_str"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static DbStr NewEntity() - { - DbStr entry{}; - - entry.id = 0; - entry.type = 0; - entry.value = ""; - - return entry; - } - - static DbStr GetDbStrEntry( - const std::vector &db_strs, - int db_str_id - ) - { - for (auto &db_str : db_strs) { - if (db_str.type == db_str_id) { - return db_str; - } - } - - return NewEntity(); - } - - static DbStr FindOne( - int db_str_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - db_str_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - DbStr entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.value = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int db_str_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - db_str_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - DbStr db_str_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(db_str_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - db_str_entry.type - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static DbStr InsertOne( - DbStr db_str_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - db_str_entry.id = results.LastInsertedID(); - return db_str_entry; - } - - db_str_entry = DbStrRepository::NewEntity(); - - return db_str_entry; - } - - static int InsertMany( - std::vector db_str_entries - ) - { - std::vector insert_chunks; - - for (auto &db_str_entry: db_str_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DbStr entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DbStr entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h index 293b6146d..103ef2f2c 100644 --- a/common/repositories/discovered_items_repository.h +++ b/common/repositories/discovered_items_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_discovered_items_repository.h" -class DiscoveredItemsRepository { +class DiscoveredItemsRepository: public BaseDiscoveredItemsRepository { public: - struct DiscoveredItems { - int item_id; - std::string char_name; - int discovered_date; - int account_status; - }; - static std::string PrimaryKey() - { - return std::string("item_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * DiscoveredItemsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * DiscoveredItemsRepository::GetWhereNeverExpires() + * DiscoveredItemsRepository::GetWhereXAndY() + * DiscoveredItemsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "item_id", - "char_name", - "discovered_date", - "account_status", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("discovered_items"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static DiscoveredItems NewEntity() - { - DiscoveredItems entry{}; - - entry.item_id = 0; - entry.char_name = ""; - entry.discovered_date = 0; - entry.account_status = 0; - - return entry; - } - - static DiscoveredItems GetDiscoveredItemsEntry( - const std::vector &discovered_itemss, - int discovered_items_id - ) - { - for (auto &discovered_items : discovered_itemss) { - if (discovered_items.item_id == discovered_items_id) { - return discovered_items; - } - } - - return NewEntity(); - } - - static DiscoveredItems FindOne( - int discovered_items_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - discovered_items_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - DiscoveredItems entry{}; - - entry.item_id = atoi(row[0]); - entry.char_name = row[1] ? row[1] : ""; - entry.discovered_date = atoi(row[2]); - entry.account_status = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int discovered_items_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - discovered_items_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - DiscoveredItems discovered_items_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(discovered_items_entry.char_name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(discovered_items_entry.discovered_date)); - update_values.push_back(columns[3] + " = " + std::to_string(discovered_items_entry.account_status)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - discovered_items_entry.item_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static DiscoveredItems InsertOne( - DiscoveredItems discovered_items_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); - insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); - insert_values.push_back(std::to_string(discovered_items_entry.account_status)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - discovered_items_entry.id = results.LastInsertedID(); - return discovered_items_entry; - } - - discovered_items_entry = DiscoveredItemsRepository::NewEntity(); - - return discovered_items_entry; - } - - static int InsertMany( - std::vector discovered_items_entries - ) - { - std::vector insert_chunks; - - for (auto &discovered_items_entry: discovered_items_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); - insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); - insert_values.push_back(std::to_string(discovered_items_entry.account_status)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DiscoveredItems entry{}; - - entry.item_id = atoi(row[0]); - entry.char_name = row[1] ? row[1] : ""; - entry.discovered_date = atoi(row[2]); - entry.account_status = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - DiscoveredItems entry{}; - - entry.item_id = atoi(row[0]); - entry.char_name = row[1] ? row[1] : ""; - entry.discovered_date = atoi(row[2]); - entry.account_status = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index dda6efa9d..04d2a72a3 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -23,536 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_doors_repository.h" -class DoorsRepository { +class DoorsRepository: public BaseDoorsRepository { public: - struct Doors { - int id; - int16 doorid; - std::string zone; - int16 version; - std::string name; - float pos_y; - float pos_x; - float pos_z; - float heading; - int16 opentype; - int16 guild; - int16 lockpick; - int keyitem; - int8 nokeyring; - int16 triggerdoor; - int16 triggertype; - int8 disable_timer; - int16 doorisopen; - int door_param; - std::string dest_zone; - int dest_instance; - float dest_x; - float dest_y; - float dest_z; - float dest_heading; - int invert_state; - int incline; - int16 size; - float buffer; - int client_version_mask; - int16 is_ldon_door; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * DoorsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * DoorsRepository::GetWhereNeverExpires() + * DoorsRepository::GetWhereXAndY() + * DoorsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "doorid", - "zone", - "version", - "name", - "pos_y", - "pos_x", - "pos_z", - "heading", - "opentype", - "guild", - "lockpick", - "keyitem", - "nokeyring", - "triggerdoor", - "triggertype", - "disable_timer", - "doorisopen", - "door_param", - "dest_zone", - "dest_instance", - "dest_x", - "dest_y", - "dest_z", - "dest_heading", - "invert_state", - "incline", - "size", - "buffer", - "client_version_mask", - "is_ldon_door", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("doors"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Doors NewEntity() - { - Doors entry{}; - - entry.id = 0; - entry.doorid = 0; - entry.zone = ""; - entry.version = 0; - entry.name = ""; - entry.pos_y = 0; - entry.pos_x = 0; - entry.pos_z = 0; - entry.heading = 0; - entry.opentype = 0; - entry.guild = 0; - entry.lockpick = 0; - entry.keyitem = 0; - entry.nokeyring = 0; - entry.triggerdoor = 0; - entry.triggertype = 0; - entry.disable_timer = 0; - entry.doorisopen = 0; - entry.door_param = 0; - entry.dest_zone = "NONE"; - entry.dest_instance = 0; - entry.dest_x = 0; - entry.dest_y = 0; - entry.dest_z = 0; - entry.dest_heading = 0; - entry.invert_state = 0; - entry.incline = 0; - entry.size = 100; - entry.buffer = 0; - entry.client_version_mask = 4294967295; - entry.is_ldon_door = 0; - - return entry; - } - - static Doors GetDoorsEntry( - const std::vector &doorss, - int doors_id - ) - { - for (auto &doors : doorss) { - if (doors.id == doors_id) { - return doors; - } - } - - return NewEntity(); - } - - static Doors FindOne( - int doors_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - doors_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Doors entry{}; - - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int doors_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - doors_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Doors doors_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(doors_entry.doorid)); - update_values.push_back(columns[2] + " = '" + EscapeString(doors_entry.zone) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(doors_entry.version)); - update_values.push_back(columns[4] + " = '" + EscapeString(doors_entry.name) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(doors_entry.pos_y)); - update_values.push_back(columns[6] + " = " + std::to_string(doors_entry.pos_x)); - update_values.push_back(columns[7] + " = " + std::to_string(doors_entry.pos_z)); - update_values.push_back(columns[8] + " = " + std::to_string(doors_entry.heading)); - update_values.push_back(columns[9] + " = " + std::to_string(doors_entry.opentype)); - update_values.push_back(columns[10] + " = " + std::to_string(doors_entry.guild)); - update_values.push_back(columns[11] + " = " + std::to_string(doors_entry.lockpick)); - update_values.push_back(columns[12] + " = " + std::to_string(doors_entry.keyitem)); - update_values.push_back(columns[13] + " = " + std::to_string(doors_entry.nokeyring)); - update_values.push_back(columns[14] + " = " + std::to_string(doors_entry.triggerdoor)); - update_values.push_back(columns[15] + " = " + std::to_string(doors_entry.triggertype)); - update_values.push_back(columns[16] + " = " + std::to_string(doors_entry.disable_timer)); - update_values.push_back(columns[17] + " = " + std::to_string(doors_entry.doorisopen)); - update_values.push_back(columns[18] + " = " + std::to_string(doors_entry.door_param)); - update_values.push_back(columns[19] + " = '" + EscapeString(doors_entry.dest_zone) + "'"); - update_values.push_back(columns[20] + " = " + std::to_string(doors_entry.dest_instance)); - update_values.push_back(columns[21] + " = " + std::to_string(doors_entry.dest_x)); - update_values.push_back(columns[22] + " = " + std::to_string(doors_entry.dest_y)); - update_values.push_back(columns[23] + " = " + std::to_string(doors_entry.dest_z)); - update_values.push_back(columns[24] + " = " + std::to_string(doors_entry.dest_heading)); - update_values.push_back(columns[25] + " = " + std::to_string(doors_entry.invert_state)); - update_values.push_back(columns[26] + " = " + std::to_string(doors_entry.incline)); - update_values.push_back(columns[27] + " = " + std::to_string(doors_entry.size)); - update_values.push_back(columns[28] + " = " + std::to_string(doors_entry.buffer)); - update_values.push_back(columns[29] + " = " + std::to_string(doors_entry.client_version_mask)); - update_values.push_back(columns[30] + " = " + std::to_string(doors_entry.is_ldon_door)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - doors_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Doors InsertOne( - Doors doors_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(doors_entry.doorid)); - insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); - insert_values.push_back(std::to_string(doors_entry.version)); - insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); - insert_values.push_back(std::to_string(doors_entry.pos_y)); - insert_values.push_back(std::to_string(doors_entry.pos_x)); - insert_values.push_back(std::to_string(doors_entry.pos_z)); - insert_values.push_back(std::to_string(doors_entry.heading)); - insert_values.push_back(std::to_string(doors_entry.opentype)); - insert_values.push_back(std::to_string(doors_entry.guild)); - insert_values.push_back(std::to_string(doors_entry.lockpick)); - insert_values.push_back(std::to_string(doors_entry.keyitem)); - insert_values.push_back(std::to_string(doors_entry.nokeyring)); - insert_values.push_back(std::to_string(doors_entry.triggerdoor)); - insert_values.push_back(std::to_string(doors_entry.triggertype)); - insert_values.push_back(std::to_string(doors_entry.disable_timer)); - insert_values.push_back(std::to_string(doors_entry.doorisopen)); - insert_values.push_back(std::to_string(doors_entry.door_param)); - insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); - insert_values.push_back(std::to_string(doors_entry.dest_instance)); - insert_values.push_back(std::to_string(doors_entry.dest_x)); - insert_values.push_back(std::to_string(doors_entry.dest_y)); - insert_values.push_back(std::to_string(doors_entry.dest_z)); - insert_values.push_back(std::to_string(doors_entry.dest_heading)); - insert_values.push_back(std::to_string(doors_entry.invert_state)); - insert_values.push_back(std::to_string(doors_entry.incline)); - insert_values.push_back(std::to_string(doors_entry.size)); - insert_values.push_back(std::to_string(doors_entry.buffer)); - insert_values.push_back(std::to_string(doors_entry.client_version_mask)); - insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - doors_entry.id = results.LastInsertedID(); - return doors_entry; - } - - doors_entry = DoorsRepository::NewEntity(); - - return doors_entry; - } - - static int InsertMany( - std::vector doors_entries - ) - { - std::vector insert_chunks; - - for (auto &doors_entry: doors_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(doors_entry.doorid)); - insert_values.push_back("'" + EscapeString(doors_entry.zone) + "'"); - insert_values.push_back(std::to_string(doors_entry.version)); - insert_values.push_back("'" + EscapeString(doors_entry.name) + "'"); - insert_values.push_back(std::to_string(doors_entry.pos_y)); - insert_values.push_back(std::to_string(doors_entry.pos_x)); - insert_values.push_back(std::to_string(doors_entry.pos_z)); - insert_values.push_back(std::to_string(doors_entry.heading)); - insert_values.push_back(std::to_string(doors_entry.opentype)); - insert_values.push_back(std::to_string(doors_entry.guild)); - insert_values.push_back(std::to_string(doors_entry.lockpick)); - insert_values.push_back(std::to_string(doors_entry.keyitem)); - insert_values.push_back(std::to_string(doors_entry.nokeyring)); - insert_values.push_back(std::to_string(doors_entry.triggerdoor)); - insert_values.push_back(std::to_string(doors_entry.triggertype)); - insert_values.push_back(std::to_string(doors_entry.disable_timer)); - insert_values.push_back(std::to_string(doors_entry.doorisopen)); - insert_values.push_back(std::to_string(doors_entry.door_param)); - insert_values.push_back("'" + EscapeString(doors_entry.dest_zone) + "'"); - insert_values.push_back(std::to_string(doors_entry.dest_instance)); - insert_values.push_back(std::to_string(doors_entry.dest_x)); - insert_values.push_back(std::to_string(doors_entry.dest_y)); - insert_values.push_back(std::to_string(doors_entry.dest_z)); - insert_values.push_back(std::to_string(doors_entry.dest_heading)); - insert_values.push_back(std::to_string(doors_entry.invert_state)); - insert_values.push_back(std::to_string(doors_entry.incline)); - insert_values.push_back(std::to_string(doors_entry.size)); - insert_values.push_back(std::to_string(doors_entry.buffer)); - insert_values.push_back(std::to_string(doors_entry.client_version_mask)); - insert_values.push_back(std::to_string(doors_entry.is_ldon_door)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Doors entry{}; - - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Doors entry{}; - - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index af5eabba0..0e6dee394 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -23,347 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_eventlog_repository.h" -class EventlogRepository { +class EventlogRepository: public BaseEventlogRepository { public: - struct Eventlog { - int id; - std::string accountname; - int accountid; - int status; - std::string charname; - std::string target; - std::string time; - std::string descriptiontype; - std::string description; - int event_nid; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * EventlogRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * EventlogRepository::GetWhereNeverExpires() + * EventlogRepository::GetWhereXAndY() + * EventlogRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "accountname", - "accountid", - "status", - "charname", - "target", - "time", - "descriptiontype", - "description", - "event_nid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("eventlog"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Eventlog NewEntity() - { - Eventlog entry{}; - - entry.id = 0; - entry.accountname = ""; - entry.accountid = 0; - entry.status = 0; - entry.charname = ""; - entry.target = "None"; - entry.time = current_timestamp(); - entry.descriptiontype = ""; - entry.description = ""; - entry.event_nid = 0; - - return entry; - } - - static Eventlog GetEventlogEntry( - const std::vector &eventlogs, - int eventlog_id - ) - { - for (auto &eventlog : eventlogs) { - if (eventlog.id == eventlog_id) { - return eventlog; - } - } - - return NewEntity(); - } - - static Eventlog FindOne( - int eventlog_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - eventlog_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Eventlog entry{}; - - entry.id = atoi(row[0]); - entry.accountname = row[1] ? row[1] : ""; - entry.accountid = atoi(row[2]); - entry.status = atoi(row[3]); - entry.charname = row[4] ? row[4] : ""; - entry.target = row[5] ? row[5] : ""; - entry.time = row[6] ? row[6] : ""; - entry.descriptiontype = row[7] ? row[7] : ""; - entry.description = row[8] ? row[8] : ""; - entry.event_nid = atoi(row[9]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int eventlog_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - eventlog_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Eventlog eventlog_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(eventlog_entry.accountname) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(eventlog_entry.accountid)); - update_values.push_back(columns[3] + " = " + std::to_string(eventlog_entry.status)); - update_values.push_back(columns[4] + " = '" + EscapeString(eventlog_entry.charname) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(eventlog_entry.target) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(eventlog_entry.time) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(eventlog_entry.descriptiontype) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(eventlog_entry.description) + "'"); - update_values.push_back(columns[9] + " = " + std::to_string(eventlog_entry.event_nid)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - eventlog_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Eventlog InsertOne( - Eventlog eventlog_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); - insert_values.push_back(std::to_string(eventlog_entry.accountid)); - insert_values.push_back(std::to_string(eventlog_entry.status)); - insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); - insert_values.push_back(std::to_string(eventlog_entry.event_nid)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - eventlog_entry.id = results.LastInsertedID(); - return eventlog_entry; - } - - eventlog_entry = EventlogRepository::NewEntity(); - - return eventlog_entry; - } - - static int InsertMany( - std::vector eventlog_entries - ) - { - std::vector insert_chunks; - - for (auto &eventlog_entry: eventlog_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(eventlog_entry.accountname) + "'"); - insert_values.push_back(std::to_string(eventlog_entry.accountid)); - insert_values.push_back(std::to_string(eventlog_entry.status)); - insert_values.push_back("'" + EscapeString(eventlog_entry.charname) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.target) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.time) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.descriptiontype) + "'"); - insert_values.push_back("'" + EscapeString(eventlog_entry.description) + "'"); - insert_values.push_back(std::to_string(eventlog_entry.event_nid)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Eventlog entry{}; - - entry.id = atoi(row[0]); - entry.accountname = row[1] ? row[1] : ""; - entry.accountid = atoi(row[2]); - entry.status = atoi(row[3]); - entry.charname = row[4] ? row[4] : ""; - entry.target = row[5] ? row[5] : ""; - entry.time = row[6] ? row[6] : ""; - entry.descriptiontype = row[7] ? row[7] : ""; - entry.description = row[8] ? row[8] : ""; - entry.event_nid = atoi(row[9]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Eventlog entry{}; - - entry.id = atoi(row[0]); - entry.accountname = row[1] ? row[1] : ""; - entry.accountid = atoi(row[2]); - entry.status = atoi(row[3]); - entry.charname = row[4] ? row[4] : ""; - entry.target = row[5] ? row[5] : ""; - entry.time = row[6] ? row[6] : ""; - entry.descriptiontype = row[7] ? row[7] : ""; - entry.description = row[8] ? row[8] : ""; - entry.event_nid = atoi(row[9]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/faction_base_data_repository.h b/common/repositories/faction_base_data_repository.h index 22e6be2a3..02ae81906 100644 --- a/common/repositories/faction_base_data_repository.h +++ b/common/repositories/faction_base_data_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_faction_base_data_repository.h" -class FactionBaseDataRepository { +class FactionBaseDataRepository: public BaseFactionBaseDataRepository { public: - struct FactionBaseData { - int16 client_faction_id; - int16 min; - int16 max; - int16 unk_hero1; - int16 unk_hero2; - int16 unk_hero3; - }; - static std::string PrimaryKey() - { - return std::string("client_faction_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FactionBaseDataRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FactionBaseDataRepository::GetWhereNeverExpires() + * FactionBaseDataRepository::GetWhereXAndY() + * FactionBaseDataRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "client_faction_id", - "min", - "max", - "unk_hero1", - "unk_hero2", - "unk_hero3", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("faction_base_data"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static FactionBaseData NewEntity() - { - FactionBaseData entry{}; - - entry.client_faction_id = 0; - entry.min = -2000; - entry.max = 2000; - entry.unk_hero1 = 0; - entry.unk_hero2 = 0; - entry.unk_hero3 = 0; - - return entry; - } - - static FactionBaseData GetFactionBaseDataEntry( - const std::vector &faction_base_datas, - int faction_base_data_id - ) - { - for (auto &faction_base_data : faction_base_datas) { - if (faction_base_data.client_faction_id == faction_base_data_id) { - return faction_base_data; - } - } - - return NewEntity(); - } - - static FactionBaseData FindOne( - int faction_base_data_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - faction_base_data_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - FactionBaseData entry{}; - - entry.client_faction_id = atoi(row[0]); - entry.min = atoi(row[1]); - entry.max = atoi(row[2]); - entry.unk_hero1 = atoi(row[3]); - entry.unk_hero2 = atoi(row[4]); - entry.unk_hero3 = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int faction_base_data_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - faction_base_data_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - FactionBaseData faction_base_data_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(faction_base_data_entry.min)); - update_values.push_back(columns[2] + " = " + std::to_string(faction_base_data_entry.max)); - update_values.push_back(columns[3] + " = " + std::to_string(faction_base_data_entry.unk_hero1)); - update_values.push_back(columns[4] + " = " + std::to_string(faction_base_data_entry.unk_hero2)); - update_values.push_back(columns[5] + " = " + std::to_string(faction_base_data_entry.unk_hero3)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - faction_base_data_entry.client_faction_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static FactionBaseData InsertOne( - FactionBaseData faction_base_data_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_base_data_entry.min)); - insert_values.push_back(std::to_string(faction_base_data_entry.max)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - faction_base_data_entry.id = results.LastInsertedID(); - return faction_base_data_entry; - } - - faction_base_data_entry = FactionBaseDataRepository::NewEntity(); - - return faction_base_data_entry; - } - - static int InsertMany( - std::vector faction_base_data_entries - ) - { - std::vector insert_chunks; - - for (auto &faction_base_data_entry: faction_base_data_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_base_data_entry.min)); - insert_values.push_back(std::to_string(faction_base_data_entry.max)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero2)); - insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero3)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionBaseData entry{}; - - entry.client_faction_id = atoi(row[0]); - entry.min = atoi(row[1]); - entry.max = atoi(row[2]); - entry.unk_hero1 = atoi(row[3]); - entry.unk_hero2 = atoi(row[4]); - entry.unk_hero3 = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionBaseData entry{}; - - entry.client_faction_id = atoi(row[0]); - entry.min = atoi(row[1]); - entry.max = atoi(row[2]); - entry.unk_hero1 = atoi(row[3]); - entry.unk_hero2 = atoi(row[4]); - entry.unk_hero3 = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 5c5853d29..3b0bc9aa3 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_faction_list_mod_repository.h" -class FactionListModRepository { +class FactionListModRepository: public BaseFactionListModRepository { public: - struct FactionListMod { - int id; - int faction_id; - int16 mod; - std::string mod_name; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FactionListModRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FactionListModRepository::GetWhereNeverExpires() + * FactionListModRepository::GetWhereXAndY() + * FactionListModRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "faction_id", - "mod", - "mod_name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("faction_list_mod"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static FactionListMod NewEntity() - { - FactionListMod entry{}; - - entry.id = 0; - entry.faction_id = 0; - entry.mod = 0; - entry.mod_name = ""; - - return entry; - } - - static FactionListMod GetFactionListModEntry( - const std::vector &faction_list_mods, - int faction_list_mod_id - ) - { - for (auto &faction_list_mod : faction_list_mods) { - if (faction_list_mod.id == faction_list_mod_id) { - return faction_list_mod; - } - } - - return NewEntity(); - } - - static FactionListMod FindOne( - int faction_list_mod_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - faction_list_mod_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - FactionListMod entry{}; - - entry.id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.mod = atoi(row[2]); - entry.mod_name = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int faction_list_mod_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - faction_list_mod_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - FactionListMod faction_list_mod_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(faction_list_mod_entry.faction_id)); - update_values.push_back(columns[2] + " = " + std::to_string(faction_list_mod_entry.mod)); - update_values.push_back(columns[3] + " = '" + EscapeString(faction_list_mod_entry.mod_name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - faction_list_mod_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static FactionListMod InsertOne( - FactionListMod faction_list_mod_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); - insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); - insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - faction_list_mod_entry.id = results.LastInsertedID(); - return faction_list_mod_entry; - } - - faction_list_mod_entry = FactionListModRepository::NewEntity(); - - return faction_list_mod_entry; - } - - static int InsertMany( - std::vector faction_list_mod_entries - ) - { - std::vector insert_chunks; - - for (auto &faction_list_mod_entry: faction_list_mod_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_list_mod_entry.faction_id)); - insert_values.push_back(std::to_string(faction_list_mod_entry.mod)); - insert_values.push_back("'" + EscapeString(faction_list_mod_entry.mod_name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionListMod entry{}; - - entry.id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.mod = atoi(row[2]); - entry.mod_name = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionListMod entry{}; - - entry.id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.mod = atoi(row[2]); - entry.mod_name = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h index 8d3f1b085..ddeb2dd10 100644 --- a/common/repositories/faction_list_repository.h +++ b/common/repositories/faction_list_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_faction_list_repository.h" -class FactionListRepository { +class FactionListRepository: public BaseFactionListRepository { public: - struct FactionList { - int id; - std::string name; - int16 base; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FactionListRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FactionListRepository::GetWhereNeverExpires() + * FactionListRepository::GetWhereXAndY() + * FactionListRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "base", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("faction_list"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static FactionList NewEntity() - { - FactionList entry{}; - - entry.id = 0; - entry.name = ""; - entry.base = 0; - - return entry; - } - - static FactionList GetFactionListEntry( - const std::vector &faction_lists, - int faction_list_id - ) - { - for (auto &faction_list : faction_lists) { - if (faction_list.id == faction_list_id) { - return faction_list; - } - } - - return NewEntity(); - } - - static FactionList FindOne( - int faction_list_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - faction_list_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - FactionList entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.base = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int faction_list_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - faction_list_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - FactionList faction_list_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(faction_list_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(faction_list_entry.base)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - faction_list_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static FactionList InsertOne( - FactionList faction_list_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); - insert_values.push_back(std::to_string(faction_list_entry.base)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - faction_list_entry.id = results.LastInsertedID(); - return faction_list_entry; - } - - faction_list_entry = FactionListRepository::NewEntity(); - - return faction_list_entry; - } - - static int InsertMany( - std::vector faction_list_entries - ) - { - std::vector insert_chunks; - - for (auto &faction_list_entry: faction_list_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); - insert_values.push_back(std::to_string(faction_list_entry.base)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionList entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.base = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionList entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.base = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/faction_values_repository.h b/common/repositories/faction_values_repository.h index 4ed0d0449..c1b6d9e16 100644 --- a/common/repositories/faction_values_repository.h +++ b/common/repositories/faction_values_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_faction_values_repository.h" -class FactionValuesRepository { +class FactionValuesRepository: public BaseFactionValuesRepository { public: - struct FactionValues { - int char_id; - int faction_id; - int16 current_value; - int8 temp; - }; - static std::string PrimaryKey() - { - return std::string("faction_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FactionValuesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FactionValuesRepository::GetWhereNeverExpires() + * FactionValuesRepository::GetWhereXAndY() + * FactionValuesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "faction_id", - "current_value", - "temp", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("faction_values"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static FactionValues NewEntity() - { - FactionValues entry{}; - - entry.char_id = 0; - entry.faction_id = 0; - entry.current_value = 0; - entry.temp = 0; - - return entry; - } - - static FactionValues GetFactionValuesEntry( - const std::vector &faction_valuess, - int faction_values_id - ) - { - for (auto &faction_values : faction_valuess) { - if (faction_values.faction_id == faction_values_id) { - return faction_values; - } - } - - return NewEntity(); - } - - static FactionValues FindOne( - int faction_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - faction_values_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - FactionValues entry{}; - - entry.char_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.current_value = atoi(row[2]); - entry.temp = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int faction_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - faction_values_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - FactionValues faction_values_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(faction_values_entry.current_value)); - update_values.push_back(columns[3] + " = " + std::to_string(faction_values_entry.temp)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - faction_values_entry.faction_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static FactionValues InsertOne( - FactionValues faction_values_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_values_entry.current_value)); - insert_values.push_back(std::to_string(faction_values_entry.temp)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - faction_values_entry.id = results.LastInsertedID(); - return faction_values_entry; - } - - faction_values_entry = FactionValuesRepository::NewEntity(); - - return faction_values_entry; - } - - static int InsertMany( - std::vector faction_values_entries - ) - { - std::vector insert_chunks; - - for (auto &faction_values_entry: faction_values_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(faction_values_entry.current_value)); - insert_values.push_back(std::to_string(faction_values_entry.temp)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionValues entry{}; - - entry.char_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.current_value = atoi(row[2]); - entry.temp = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - FactionValues entry{}; - - entry.char_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.current_value = atoi(row[2]); - entry.temp = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/fishing_repository.h b/common/repositories/fishing_repository.h index 7d07bc364..4e2707697 100644 --- a/common/repositories/fishing_repository.h +++ b/common/repositories/fishing_repository.h @@ -23,320 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_fishing_repository.h" -class FishingRepository { +class FishingRepository: public BaseFishingRepository { public: - struct Fishing { - int id; - int zoneid; - int Itemid; - int16 skill_level; - int16 chance; - int npc_id; - int npc_chance; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FishingRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FishingRepository::GetWhereNeverExpires() + * FishingRepository::GetWhereXAndY() + * FishingRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zoneid", - "Itemid", - "skill_level", - "chance", - "npc_id", - "npc_chance", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("fishing"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Fishing NewEntity() - { - Fishing entry{}; - - entry.id = 0; - entry.zoneid = 0; - entry.Itemid = 0; - entry.skill_level = 0; - entry.chance = 0; - entry.npc_id = 0; - entry.npc_chance = 0; - - return entry; - } - - static Fishing GetFishingEntry( - const std::vector &fishings, - int fishing_id - ) - { - for (auto &fishing : fishings) { - if (fishing.id == fishing_id) { - return fishing; - } - } - - return NewEntity(); - } - - static Fishing FindOne( - int fishing_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - fishing_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Fishing entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int fishing_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - fishing_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Fishing fishing_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(fishing_entry.zoneid)); - update_values.push_back(columns[2] + " = " + std::to_string(fishing_entry.Itemid)); - update_values.push_back(columns[3] + " = " + std::to_string(fishing_entry.skill_level)); - update_values.push_back(columns[4] + " = " + std::to_string(fishing_entry.chance)); - update_values.push_back(columns[5] + " = " + std::to_string(fishing_entry.npc_id)); - update_values.push_back(columns[6] + " = " + std::to_string(fishing_entry.npc_chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - fishing_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Fishing InsertOne( - Fishing fishing_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(fishing_entry.zoneid)); - insert_values.push_back(std::to_string(fishing_entry.Itemid)); - insert_values.push_back(std::to_string(fishing_entry.skill_level)); - insert_values.push_back(std::to_string(fishing_entry.chance)); - insert_values.push_back(std::to_string(fishing_entry.npc_id)); - insert_values.push_back(std::to_string(fishing_entry.npc_chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - fishing_entry.id = results.LastInsertedID(); - return fishing_entry; - } - - fishing_entry = FishingRepository::NewEntity(); - - return fishing_entry; - } - - static int InsertMany( - std::vector fishing_entries - ) - { - std::vector insert_chunks; - - for (auto &fishing_entry: fishing_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(fishing_entry.zoneid)); - insert_values.push_back(std::to_string(fishing_entry.Itemid)); - insert_values.push_back(std::to_string(fishing_entry.skill_level)); - insert_values.push_back(std::to_string(fishing_entry.chance)); - insert_values.push_back(std::to_string(fishing_entry.npc_id)); - insert_values.push_back(std::to_string(fishing_entry.npc_chance)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Fishing entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Fishing entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/forage_repository.h b/common/repositories/forage_repository.h index 02f22d0a9..bf4e0d522 100644 --- a/common/repositories/forage_repository.h +++ b/common/repositories/forage_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_forage_repository.h" -class ForageRepository { +class ForageRepository: public BaseForageRepository { public: - struct Forage { - int id; - int zoneid; - int Itemid; - int16 level; - int16 chance; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ForageRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ForageRepository::GetWhereNeverExpires() + * ForageRepository::GetWhereXAndY() + * ForageRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zoneid", - "Itemid", - "level", - "chance", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("forage"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Forage NewEntity() - { - Forage entry{}; - - entry.id = 0; - entry.zoneid = 0; - entry.Itemid = 0; - entry.level = 0; - entry.chance = 0; - - return entry; - } - - static Forage GetForageEntry( - const std::vector &forages, - int forage_id - ) - { - for (auto &forage : forages) { - if (forage.id == forage_id) { - return forage; - } - } - - return NewEntity(); - } - - static Forage FindOne( - int forage_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - forage_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Forage entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int forage_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - forage_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Forage forage_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(forage_entry.zoneid)); - update_values.push_back(columns[2] + " = " + std::to_string(forage_entry.Itemid)); - update_values.push_back(columns[3] + " = " + std::to_string(forage_entry.level)); - update_values.push_back(columns[4] + " = " + std::to_string(forage_entry.chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - forage_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Forage InsertOne( - Forage forage_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(forage_entry.zoneid)); - insert_values.push_back(std::to_string(forage_entry.Itemid)); - insert_values.push_back(std::to_string(forage_entry.level)); - insert_values.push_back(std::to_string(forage_entry.chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - forage_entry.id = results.LastInsertedID(); - return forage_entry; - } - - forage_entry = ForageRepository::NewEntity(); - - return forage_entry; - } - - static int InsertMany( - std::vector forage_entries - ) - { - std::vector insert_chunks; - - for (auto &forage_entry: forage_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(forage_entry.zoneid)); - insert_values.push_back(std::to_string(forage_entry.Itemid)); - insert_values.push_back(std::to_string(forage_entry.level)); - insert_values.push_back(std::to_string(forage_entry.chance)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Forage entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Forage entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 51e33f5c3..99481a742 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_friends_repository.h" -class FriendsRepository { +class FriendsRepository: public BaseFriendsRepository { public: - struct Friends { - int charid; - int8 type; - std::string name; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * FriendsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * FriendsRepository::GetWhereNeverExpires() + * FriendsRepository::GetWhereXAndY() + * FriendsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "type", - "name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("friends"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Friends NewEntity() - { - Friends entry{}; - - entry.charid = 0; - entry.type = 1; - entry.name = ""; - - return entry; - } - - static Friends GetFriendsEntry( - const std::vector &friendss, - int friends_id - ) - { - for (auto &friends : friendss) { - if (friends.name == friends_id) { - return friends; - } - } - - return NewEntity(); - } - - static Friends FindOne( - int friends_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - friends_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Friends entry{}; - - entry.charid = atoi(row[0]); - entry.type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int friends_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - friends_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Friends friends_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - friends_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Friends InsertOne( - Friends friends_entry - ) - { - std::vector insert_values; - - - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - friends_entry.id = results.LastInsertedID(); - return friends_entry; - } - - friends_entry = FriendsRepository::NewEntity(); - - return friends_entry; - } - - static int InsertMany( - std::vector friends_entries - ) - { - std::vector insert_chunks; - - for (auto &friends_entry: friends_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Friends entry{}; - - entry.charid = atoi(row[0]); - entry.type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Friends entry{}; - - entry.charid = atoi(row[0]); - entry.type = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index 1b53d432d..25a916c3f 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -23,374 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_global_loot_repository.h" -class GlobalLootRepository { +class GlobalLootRepository: public BaseGlobalLootRepository { public: - struct GlobalLoot { - int id; - std::string description; - int loottable_id; - int8 enabled; - int min_level; - int max_level; - int8 rare; - int8 raid; - std::string race; - std::string class; - std::string bodytype; - std::string zone; - int8 hot_zone; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GlobalLootRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GlobalLootRepository::GetWhereNeverExpires() + * GlobalLootRepository::GetWhereXAndY() + * GlobalLootRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "description", - "loottable_id", - "enabled", - "min_level", - "max_level", - "rare", - "raid", - "race", - "class", - "bodytype", - "zone", - "hot_zone", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("global_loot"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GlobalLoot NewEntity() - { - GlobalLoot entry{}; - - entry.id = 0; - entry.description = ""; - entry.loottable_id = 0; - entry.enabled = 1; - entry.min_level = 0; - entry.max_level = 0; - entry.rare = 0; - entry.raid = 0; - entry.race = ""; - entry.class = ""; - entry.bodytype = ""; - entry.zone = ""; - entry.hot_zone = 0; - - return entry; - } - - static GlobalLoot GetGlobalLootEntry( - const std::vector &global_loots, - int global_loot_id - ) - { - for (auto &global_loot : global_loots) { - if (global_loot.id == global_loot_id) { - return global_loot; - } - } - - return NewEntity(); - } - - static GlobalLoot FindOne( - int global_loot_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - global_loot_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GlobalLoot entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int global_loot_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - global_loot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GlobalLoot global_loot_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(global_loot_entry.description) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(global_loot_entry.loottable_id)); - update_values.push_back(columns[3] + " = " + std::to_string(global_loot_entry.enabled)); - update_values.push_back(columns[4] + " = " + std::to_string(global_loot_entry.min_level)); - update_values.push_back(columns[5] + " = " + std::to_string(global_loot_entry.max_level)); - update_values.push_back(columns[6] + " = " + std::to_string(global_loot_entry.rare)); - update_values.push_back(columns[7] + " = " + std::to_string(global_loot_entry.raid)); - update_values.push_back(columns[8] + " = '" + EscapeString(global_loot_entry.race) + "'"); - update_values.push_back(columns[9] + " = '" + EscapeString(global_loot_entry.class) + "'"); - update_values.push_back(columns[10] + " = '" + EscapeString(global_loot_entry.bodytype) + "'"); - update_values.push_back(columns[11] + " = '" + EscapeString(global_loot_entry.zone) + "'"); - update_values.push_back(columns[12] + " = " + std::to_string(global_loot_entry.hot_zone)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - global_loot_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GlobalLoot InsertOne( - GlobalLoot global_loot_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); - insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); - insert_values.push_back(std::to_string(global_loot_entry.enabled)); - insert_values.push_back(std::to_string(global_loot_entry.min_level)); - insert_values.push_back(std::to_string(global_loot_entry.max_level)); - insert_values.push_back(std::to_string(global_loot_entry.rare)); - insert_values.push_back(std::to_string(global_loot_entry.raid)); - insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); - insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - global_loot_entry.id = results.LastInsertedID(); - return global_loot_entry; - } - - global_loot_entry = GlobalLootRepository::NewEntity(); - - return global_loot_entry; - } - - static int InsertMany( - std::vector global_loot_entries - ) - { - std::vector insert_chunks; - - for (auto &global_loot_entry: global_loot_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(global_loot_entry.description) + "'"); - insert_values.push_back(std::to_string(global_loot_entry.loottable_id)); - insert_values.push_back(std::to_string(global_loot_entry.enabled)); - insert_values.push_back(std::to_string(global_loot_entry.min_level)); - insert_values.push_back(std::to_string(global_loot_entry.max_level)); - insert_values.push_back(std::to_string(global_loot_entry.rare)); - insert_values.push_back(std::to_string(global_loot_entry.raid)); - insert_values.push_back("'" + EscapeString(global_loot_entry.race) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.class) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.bodytype) + "'"); - insert_values.push_back("'" + EscapeString(global_loot_entry.zone) + "'"); - insert_values.push_back(std::to_string(global_loot_entry.hot_zone)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GlobalLoot entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GlobalLoot entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index 5ea9f1a42..ccb0b1359 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_gm_ips_repository.h" -class GmIpsRepository { +class GmIpsRepository: public BaseGmIpsRepository { public: - struct GmIps { - std::string name; - int account_id; - std::string ip_address; - }; - static std::string PrimaryKey() - { - return std::string("ip_address"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GmIpsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GmIpsRepository::GetWhereNeverExpires() + * GmIpsRepository::GetWhereXAndY() + * GmIpsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "name", - "account_id", - "ip_address", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("gm_ips"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GmIps NewEntity() - { - GmIps entry{}; - - entry.name = ""; - entry.account_id = 0; - entry.ip_address = ""; - - return entry; - } - - static GmIps GetGmIpsEntry( - const std::vector &gm_ipss, - int gm_ips_id - ) - { - for (auto &gm_ips : gm_ipss) { - if (gm_ips.ip_address == gm_ips_id) { - return gm_ips; - } - } - - return NewEntity(); - } - - static GmIps FindOne( - int gm_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - gm_ips_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GmIps entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.account_id = atoi(row[1]); - entry.ip_address = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int gm_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - gm_ips_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GmIps gm_ips_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = '" + EscapeString(gm_ips_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - gm_ips_entry.ip_address - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GmIps InsertOne( - GmIps gm_ips_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - gm_ips_entry.id = results.LastInsertedID(); - return gm_ips_entry; - } - - gm_ips_entry = GmIpsRepository::NewEntity(); - - return gm_ips_entry; - } - - static int InsertMany( - std::vector gm_ips_entries - ) - { - std::vector insert_chunks; - - for (auto &gm_ips_entry: gm_ips_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GmIps entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.account_id = atoi(row[1]); - entry.ip_address = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GmIps entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.account_id = atoi(row[1]); - entry.ip_address = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/goallists_repository.h b/common/repositories/goallists_repository.h index ee59d139f..8e95d9702 100644 --- a/common/repositories/goallists_repository.h +++ b/common/repositories/goallists_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_goallists_repository.h" -class GoallistsRepository { +class GoallistsRepository: public BaseGoallistsRepository { public: - struct Goallists { - int listid; - int entry; - }; - static std::string PrimaryKey() - { - return std::string("entry"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GoallistsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GoallistsRepository::GetWhereNeverExpires() + * GoallistsRepository::GetWhereXAndY() + * GoallistsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "listid", - "entry", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("goallists"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Goallists NewEntity() - { - Goallists entry{}; - - entry.listid = 0; - entry.entry = 0; - - return entry; - } - - static Goallists GetGoallistsEntry( - const std::vector &goallistss, - int goallists_id - ) - { - for (auto &goallists : goallistss) { - if (goallists.entry == goallists_id) { - return goallists; - } - } - - return NewEntity(); - } - - static Goallists FindOne( - int goallists_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - goallists_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Goallists entry{}; - - entry.listid = atoi(row[0]); - entry.entry = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int goallists_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - goallists_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Goallists goallists_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - goallists_entry.entry - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Goallists InsertOne( - Goallists goallists_entry - ) - { - std::vector insert_values; - - - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - goallists_entry.id = results.LastInsertedID(); - return goallists_entry; - } - - goallists_entry = GoallistsRepository::NewEntity(); - - return goallists_entry; - } - - static int InsertMany( - std::vector goallists_entries - ) - { - std::vector insert_chunks; - - for (auto &goallists_entry: goallists_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Goallists entry{}; - - entry.listid = atoi(row[0]); - entry.entry = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Goallists entry{}; - - entry.listid = atoi(row[0]); - entry.entry = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h index 7efaee489..5937ce317 100644 --- a/common/repositories/graveyard_repository.h +++ b/common/repositories/graveyard_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_graveyard_repository.h" -class GraveyardRepository { +class GraveyardRepository: public BaseGraveyardRepository { public: - struct Graveyard { - int id; - int zone_id; - float x; - float y; - float z; - float heading; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GraveyardRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GraveyardRepository::GetWhereNeverExpires() + * GraveyardRepository::GetWhereXAndY() + * GraveyardRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone_id", - "x", - "y", - "z", - "heading", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("graveyard"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Graveyard NewEntity() - { - Graveyard entry{}; - - entry.id = 0; - entry.zone_id = 0; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.heading = 0; - - return entry; - } - - static Graveyard GetGraveyardEntry( - const std::vector &graveyards, - int graveyard_id - ) - { - for (auto &graveyard : graveyards) { - if (graveyard.id == graveyard_id) { - return graveyard; - } - } - - return NewEntity(); - } - - static Graveyard FindOne( - int graveyard_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - graveyard_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Graveyard entry{}; - - entry.id = atoi(row[0]); - entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int graveyard_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - graveyard_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Graveyard graveyard_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(graveyard_entry.zone_id)); - update_values.push_back(columns[2] + " = " + std::to_string(graveyard_entry.x)); - update_values.push_back(columns[3] + " = " + std::to_string(graveyard_entry.y)); - update_values.push_back(columns[4] + " = " + std::to_string(graveyard_entry.z)); - update_values.push_back(columns[5] + " = " + std::to_string(graveyard_entry.heading)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - graveyard_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Graveyard InsertOne( - Graveyard graveyard_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(graveyard_entry.zone_id)); - insert_values.push_back(std::to_string(graveyard_entry.x)); - insert_values.push_back(std::to_string(graveyard_entry.y)); - insert_values.push_back(std::to_string(graveyard_entry.z)); - insert_values.push_back(std::to_string(graveyard_entry.heading)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - graveyard_entry.id = results.LastInsertedID(); - return graveyard_entry; - } - - graveyard_entry = GraveyardRepository::NewEntity(); - - return graveyard_entry; - } - - static int InsertMany( - std::vector graveyard_entries - ) - { - std::vector insert_chunks; - - for (auto &graveyard_entry: graveyard_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(graveyard_entry.zone_id)); - insert_values.push_back(std::to_string(graveyard_entry.x)); - insert_values.push_back(std::to_string(graveyard_entry.y)); - insert_values.push_back(std::to_string(graveyard_entry.z)); - insert_values.push_back(std::to_string(graveyard_entry.heading)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Graveyard entry{}; - - entry.id = atoi(row[0]); - entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Graveyard entry{}; - - entry.id = atoi(row[0]); - entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index 652d7554b..d4a7abaca 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -23,383 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_ground_spawns_repository.h" -class GroundSpawnsRepository { +class GroundSpawnsRepository: public BaseGroundSpawnsRepository { public: - struct GroundSpawns { - int id; - int zoneid; - int16 version; - float max_x; - float max_y; - float max_z; - float min_x; - float min_y; - float heading; - std::string name; - int item; - int max_allowed; - std::string comment; - int respawn_timer; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GroundSpawnsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GroundSpawnsRepository::GetWhereNeverExpires() + * GroundSpawnsRepository::GetWhereXAndY() + * GroundSpawnsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zoneid", - "version", - "max_x", - "max_y", - "max_z", - "min_x", - "min_y", - "heading", - "name", - "item", - "max_allowed", - "comment", - "respawn_timer", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("ground_spawns"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GroundSpawns NewEntity() - { - GroundSpawns entry{}; - - entry.id = 0; - entry.zoneid = 0; - entry.version = 0; - entry.max_x = 2000; - entry.max_y = 2000; - entry.max_z = 10000; - entry.min_x = -2000; - entry.min_y = -2000; - entry.heading = 0; - entry.name = ""; - entry.item = 0; - entry.max_allowed = 1; - entry.comment = ""; - entry.respawn_timer = 300; - - return entry; - } - - static GroundSpawns GetGroundSpawnsEntry( - const std::vector &ground_spawnss, - int ground_spawns_id - ) - { - for (auto &ground_spawns : ground_spawnss) { - if (ground_spawns.id == ground_spawns_id) { - return ground_spawns; - } - } - - return NewEntity(); - } - - static GroundSpawns FindOne( - int ground_spawns_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - ground_spawns_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GroundSpawns entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int ground_spawns_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - ground_spawns_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GroundSpawns ground_spawns_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(ground_spawns_entry.zoneid)); - update_values.push_back(columns[2] + " = " + std::to_string(ground_spawns_entry.version)); - update_values.push_back(columns[3] + " = " + std::to_string(ground_spawns_entry.max_x)); - update_values.push_back(columns[4] + " = " + std::to_string(ground_spawns_entry.max_y)); - update_values.push_back(columns[5] + " = " + std::to_string(ground_spawns_entry.max_z)); - update_values.push_back(columns[6] + " = " + std::to_string(ground_spawns_entry.min_x)); - update_values.push_back(columns[7] + " = " + std::to_string(ground_spawns_entry.min_y)); - update_values.push_back(columns[8] + " = " + std::to_string(ground_spawns_entry.heading)); - update_values.push_back(columns[9] + " = '" + EscapeString(ground_spawns_entry.name) + "'"); - update_values.push_back(columns[10] + " = " + std::to_string(ground_spawns_entry.item)); - update_values.push_back(columns[11] + " = " + std::to_string(ground_spawns_entry.max_allowed)); - update_values.push_back(columns[12] + " = '" + EscapeString(ground_spawns_entry.comment) + "'"); - update_values.push_back(columns[13] + " = " + std::to_string(ground_spawns_entry.respawn_timer)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - ground_spawns_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GroundSpawns InsertOne( - GroundSpawns ground_spawns_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); - insert_values.push_back(std::to_string(ground_spawns_entry.version)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); - insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); - insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); - insert_values.push_back(std::to_string(ground_spawns_entry.heading)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); - insert_values.push_back(std::to_string(ground_spawns_entry.item)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); - insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - ground_spawns_entry.id = results.LastInsertedID(); - return ground_spawns_entry; - } - - ground_spawns_entry = GroundSpawnsRepository::NewEntity(); - - return ground_spawns_entry; - } - - static int InsertMany( - std::vector ground_spawns_entries - ) - { - std::vector insert_chunks; - - for (auto &ground_spawns_entry: ground_spawns_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(ground_spawns_entry.zoneid)); - insert_values.push_back(std::to_string(ground_spawns_entry.version)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_x)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_y)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_z)); - insert_values.push_back(std::to_string(ground_spawns_entry.min_x)); - insert_values.push_back(std::to_string(ground_spawns_entry.min_y)); - insert_values.push_back(std::to_string(ground_spawns_entry.heading)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.name) + "'"); - insert_values.push_back(std::to_string(ground_spawns_entry.item)); - insert_values.push_back(std::to_string(ground_spawns_entry.max_allowed)); - insert_values.push_back("'" + EscapeString(ground_spawns_entry.comment) + "'"); - insert_values.push_back(std::to_string(ground_spawns_entry.respawn_timer)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroundSpawns entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroundSpawns entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 71e1be81c..82a2ce0c5 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -23,287 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_group_id_repository.h" -class GroupIdRepository { +class GroupIdRepository: public BaseGroupIdRepository { public: - struct GroupId { - int groupid; - int charid; - std::string name; - int8 ismerc; - }; - static std::string PrimaryKey() - { - return std::string("ismerc"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GroupIdRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GroupIdRepository::GetWhereNeverExpires() + * GroupIdRepository::GetWhereXAndY() + * GroupIdRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "groupid", - "charid", - "name", - "ismerc", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("group_id"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GroupId NewEntity() - { - GroupId entry{}; - - entry.groupid = 0; - entry.charid = 0; - entry.name = ""; - entry.ismerc = 0; - - return entry; - } - - static GroupId GetGroupIdEntry( - const std::vector &group_ids, - int group_id_id - ) - { - for (auto &group_id : group_ids) { - if (group_id.ismerc == group_id_id) { - return group_id; - } - } - - return NewEntity(); - } - - static GroupId FindOne( - int group_id_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - group_id_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GroupId entry{}; - - entry.groupid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.ismerc = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int group_id_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - group_id_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GroupId group_id_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(group_id_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - group_id_entry.ismerc - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GroupId InsertOne( - GroupId group_id_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - group_id_entry.id = results.LastInsertedID(); - return group_id_entry; - } - - group_id_entry = GroupIdRepository::NewEntity(); - - return group_id_entry; - } - - static int InsertMany( - std::vector group_id_entries - ) - { - std::vector insert_chunks; - - for (auto &group_id_entry: group_id_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroupId entry{}; - - entry.groupid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.ismerc = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroupId entry{}; - - entry.groupid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.ismerc = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index f3c0eb5d7..65163d295 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_group_leaders_repository.h" -class GroupLeadersRepository { +class GroupLeadersRepository: public BaseGroupLeadersRepository { public: - struct GroupLeaders { - int gid; - std::string leadername; - std::string marknpc; - std::string leadershipaa; - std::string maintank; - std::string assist; - std::string puller; - std::string mentoree; - int mentor_percent; - }; - static std::string PrimaryKey() - { - return std::string("gid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GroupLeadersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GroupLeadersRepository::GetWhereNeverExpires() + * GroupLeadersRepository::GetWhereXAndY() + * GroupLeadersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "gid", - "leadername", - "marknpc", - "leadershipaa", - "maintank", - "assist", - "puller", - "mentoree", - "mentor_percent", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("group_leaders"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GroupLeaders NewEntity() - { - GroupLeaders entry{}; - - entry.gid = 0; - entry.leadername = ""; - entry.marknpc = ""; - entry.leadershipaa = 0; - entry.maintank = ""; - entry.assist = ""; - entry.puller = ""; - entry.mentoree = ""; - entry.mentor_percent = 0; - - return entry; - } - - static GroupLeaders GetGroupLeadersEntry( - const std::vector &group_leaderss, - int group_leaders_id - ) - { - for (auto &group_leaders : group_leaderss) { - if (group_leaders.gid == group_leaders_id) { - return group_leaders; - } - } - - return NewEntity(); - } - - static GroupLeaders FindOne( - int group_leaders_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - group_leaders_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GroupLeaders entry{}; - - entry.gid = atoi(row[0]); - entry.leadername = row[1] ? row[1] : ""; - entry.marknpc = row[2] ? row[2] : ""; - entry.leadershipaa = row[3] ? row[3] : ""; - entry.maintank = row[4] ? row[4] : ""; - entry.assist = row[5] ? row[5] : ""; - entry.puller = row[6] ? row[6] : ""; - entry.mentoree = row[7] ? row[7] : ""; - entry.mentor_percent = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int group_leaders_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - group_leaders_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GroupLeaders group_leaders_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(group_leaders_entry.leadername) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(group_leaders_entry.marknpc) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(group_leaders_entry.leadershipaa) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(group_leaders_entry.maintank) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(group_leaders_entry.assist) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(group_leaders_entry.puller) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(group_leaders_entry.mentoree) + "'"); - update_values.push_back(columns[8] + " = " + std::to_string(group_leaders_entry.mentor_percent)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - group_leaders_entry.gid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GroupLeaders InsertOne( - GroupLeaders group_leaders_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); - insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - group_leaders_entry.id = results.LastInsertedID(); - return group_leaders_entry; - } - - group_leaders_entry = GroupLeadersRepository::NewEntity(); - - return group_leaders_entry; - } - - static int InsertMany( - std::vector group_leaders_entries - ) - { - std::vector insert_chunks; - - for (auto &group_leaders_entry: group_leaders_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.maintank) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.assist) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.puller) + "'"); - insert_values.push_back("'" + EscapeString(group_leaders_entry.mentoree) + "'"); - insert_values.push_back(std::to_string(group_leaders_entry.mentor_percent)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroupLeaders entry{}; - - entry.gid = atoi(row[0]); - entry.leadername = row[1] ? row[1] : ""; - entry.marknpc = row[2] ? row[2] : ""; - entry.leadershipaa = row[3] ? row[3] : ""; - entry.maintank = row[4] ? row[4] : ""; - entry.assist = row[5] ? row[5] : ""; - entry.puller = row[6] ? row[6] : ""; - entry.mentoree = row[7] ? row[7] : ""; - entry.mentor_percent = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GroupLeaders entry{}; - - entry.gid = atoi(row[0]); - entry.leadername = row[1] ? row[1] : ""; - entry.marknpc = row[2] ? row[2] : ""; - entry.leadershipaa = row[3] ? row[3] : ""; - entry.maintank = row[4] ? row[4] : ""; - entry.assist = row[5] ? row[5] : ""; - entry.puller = row[6] ? row[6] : ""; - entry.mentoree = row[7] ? row[7] : ""; - entry.mentor_percent = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index 5bfa64dbd..f0b07b9ee 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_guild_members_repository.h" -class GuildMembersRepository { +class GuildMembersRepository: public BaseGuildMembersRepository { public: - struct GuildMembers { - int char_id; - int guild_id; - int8 rank; - int8 tribute_enable; - int total_tribute; - int last_tribute; - int8 banker; - std::string public_note; - int8 alt; - }; - static std::string PrimaryKey() - { - return std::string("char_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GuildMembersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GuildMembersRepository::GetWhereNeverExpires() + * GuildMembersRepository::GetWhereXAndY() + * GuildMembersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "guild_id", - "rank", - "tribute_enable", - "total_tribute", - "last_tribute", - "banker", - "public_note", - "alt", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("guild_members"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GuildMembers NewEntity() - { - GuildMembers entry{}; - - entry.char_id = 0; - entry.guild_id = 0; - entry.rank = 0; - entry.tribute_enable = 0; - entry.total_tribute = 0; - entry.last_tribute = 0; - entry.banker = 0; - entry.public_note = ""; - entry.alt = 0; - - return entry; - } - - static GuildMembers GetGuildMembersEntry( - const std::vector &guild_memberss, - int guild_members_id - ) - { - for (auto &guild_members : guild_memberss) { - if (guild_members.char_id == guild_members_id) { - return guild_members; - } - } - - return NewEntity(); - } - - static GuildMembers FindOne( - int guild_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - guild_members_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GuildMembers entry{}; - - entry.char_id = atoi(row[0]); - entry.guild_id = atoi(row[1]); - entry.rank = atoi(row[2]); - entry.tribute_enable = atoi(row[3]); - entry.total_tribute = atoi(row[4]); - entry.last_tribute = atoi(row[5]); - entry.banker = atoi(row[6]); - entry.public_note = row[7] ? row[7] : ""; - entry.alt = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int guild_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - guild_members_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GuildMembers guild_members_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(guild_members_entry.guild_id)); - update_values.push_back(columns[2] + " = " + std::to_string(guild_members_entry.rank)); - update_values.push_back(columns[3] + " = " + std::to_string(guild_members_entry.tribute_enable)); - update_values.push_back(columns[4] + " = " + std::to_string(guild_members_entry.total_tribute)); - update_values.push_back(columns[5] + " = " + std::to_string(guild_members_entry.last_tribute)); - update_values.push_back(columns[6] + " = " + std::to_string(guild_members_entry.banker)); - update_values.push_back(columns[7] + " = '" + EscapeString(guild_members_entry.public_note) + "'"); - update_values.push_back(columns[8] + " = " + std::to_string(guild_members_entry.alt)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - guild_members_entry.char_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GuildMembers InsertOne( - GuildMembers guild_members_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(guild_members_entry.guild_id)); - insert_values.push_back(std::to_string(guild_members_entry.rank)); - insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); - insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); - insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); - insert_values.push_back(std::to_string(guild_members_entry.banker)); - insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); - insert_values.push_back(std::to_string(guild_members_entry.alt)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - guild_members_entry.id = results.LastInsertedID(); - return guild_members_entry; - } - - guild_members_entry = GuildMembersRepository::NewEntity(); - - return guild_members_entry; - } - - static int InsertMany( - std::vector guild_members_entries - ) - { - std::vector insert_chunks; - - for (auto &guild_members_entry: guild_members_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(guild_members_entry.guild_id)); - insert_values.push_back(std::to_string(guild_members_entry.rank)); - insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); - insert_values.push_back(std::to_string(guild_members_entry.total_tribute)); - insert_values.push_back(std::to_string(guild_members_entry.last_tribute)); - insert_values.push_back(std::to_string(guild_members_entry.banker)); - insert_values.push_back("'" + EscapeString(guild_members_entry.public_note) + "'"); - insert_values.push_back(std::to_string(guild_members_entry.alt)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildMembers entry{}; - - entry.char_id = atoi(row[0]); - entry.guild_id = atoi(row[1]); - entry.rank = atoi(row[2]); - entry.tribute_enable = atoi(row[3]); - entry.total_tribute = atoi(row[4]); - entry.last_tribute = atoi(row[5]); - entry.banker = atoi(row[6]); - entry.public_note = row[7] ? row[7] : ""; - entry.alt = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildMembers entry{}; - - entry.char_id = atoi(row[0]); - entry.guild_id = atoi(row[1]); - entry.rank = atoi(row[2]); - entry.tribute_enable = atoi(row[3]); - entry.total_tribute = atoi(row[4]); - entry.last_tribute = atoi(row[5]); - entry.banker = atoi(row[6]); - entry.public_note = row[7] ? row[7] : ""; - entry.alt = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h index 2ccb1b5e4..c2f7b804c 100644 --- a/common/repositories/guild_ranks_repository.h +++ b/common/repositories/guild_ranks_repository.h @@ -23,353 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_guild_ranks_repository.h" -class GuildRanksRepository { +class GuildRanksRepository: public BaseGuildRanksRepository { public: - struct GuildRanks { - int guild_id; - int8 rank; - std::string title; - int8 can_hear; - int8 can_speak; - int8 can_invite; - int8 can_remove; - int8 can_promote; - int8 can_demote; - int8 can_motd; - int8 can_warpeace; - }; - static std::string PrimaryKey() - { - return std::string("rank"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GuildRanksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GuildRanksRepository::GetWhereNeverExpires() + * GuildRanksRepository::GetWhereXAndY() + * GuildRanksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "guild_id", - "rank", - "title", - "can_hear", - "can_speak", - "can_invite", - "can_remove", - "can_promote", - "can_demote", - "can_motd", - "can_warpeace", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("guild_ranks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GuildRanks NewEntity() - { - GuildRanks entry{}; - - entry.guild_id = 0; - entry.rank = 0; - entry.title = ""; - entry.can_hear = 0; - entry.can_speak = 0; - entry.can_invite = 0; - entry.can_remove = 0; - entry.can_promote = 0; - entry.can_demote = 0; - entry.can_motd = 0; - entry.can_warpeace = 0; - - return entry; - } - - static GuildRanks GetGuildRanksEntry( - const std::vector &guild_rankss, - int guild_ranks_id - ) - { - for (auto &guild_ranks : guild_rankss) { - if (guild_ranks.rank == guild_ranks_id) { - return guild_ranks; - } - } - - return NewEntity(); - } - - static GuildRanks FindOne( - int guild_ranks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - guild_ranks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GuildRanks entry{}; - - entry.guild_id = atoi(row[0]); - entry.rank = atoi(row[1]); - entry.title = row[2] ? row[2] : ""; - entry.can_hear = atoi(row[3]); - entry.can_speak = atoi(row[4]); - entry.can_invite = atoi(row[5]); - entry.can_remove = atoi(row[6]); - entry.can_promote = atoi(row[7]); - entry.can_demote = atoi(row[8]); - entry.can_motd = atoi(row[9]); - entry.can_warpeace = atoi(row[10]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int guild_ranks_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - guild_ranks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GuildRanks guild_ranks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(guild_ranks_entry.title) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(guild_ranks_entry.can_hear)); - update_values.push_back(columns[4] + " = " + std::to_string(guild_ranks_entry.can_speak)); - update_values.push_back(columns[5] + " = " + std::to_string(guild_ranks_entry.can_invite)); - update_values.push_back(columns[6] + " = " + std::to_string(guild_ranks_entry.can_remove)); - update_values.push_back(columns[7] + " = " + std::to_string(guild_ranks_entry.can_promote)); - update_values.push_back(columns[8] + " = " + std::to_string(guild_ranks_entry.can_demote)); - update_values.push_back(columns[9] + " = " + std::to_string(guild_ranks_entry.can_motd)); - update_values.push_back(columns[10] + " = " + std::to_string(guild_ranks_entry.can_warpeace)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - guild_ranks_entry.rank - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GuildRanks InsertOne( - GuildRanks guild_ranks_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); - insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - guild_ranks_entry.id = results.LastInsertedID(); - return guild_ranks_entry; - } - - guild_ranks_entry = GuildRanksRepository::NewEntity(); - - return guild_ranks_entry; - } - - static int InsertMany( - std::vector guild_ranks_entries - ) - { - std::vector insert_chunks; - - for (auto &guild_ranks_entry: guild_ranks_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); - insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_invite)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_remove)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_promote)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_demote)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_motd)); - insert_values.push_back(std::to_string(guild_ranks_entry.can_warpeace)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildRanks entry{}; - - entry.guild_id = atoi(row[0]); - entry.rank = atoi(row[1]); - entry.title = row[2] ? row[2] : ""; - entry.can_hear = atoi(row[3]); - entry.can_speak = atoi(row[4]); - entry.can_invite = atoi(row[5]); - entry.can_remove = atoi(row[6]); - entry.can_promote = atoi(row[7]); - entry.can_demote = atoi(row[8]); - entry.can_motd = atoi(row[9]); - entry.can_warpeace = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildRanks entry{}; - - entry.guild_id = atoi(row[0]); - entry.rank = atoi(row[1]); - entry.title = row[2] ? row[2] : ""; - entry.can_hear = atoi(row[3]); - entry.can_speak = atoi(row[4]); - entry.can_invite = atoi(row[5]); - entry.can_remove = atoi(row[6]); - entry.can_promote = atoi(row[7]); - entry.can_demote = atoi(row[8]); - entry.can_motd = atoi(row[9]); - entry.can_warpeace = atoi(row[10]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/guild_relations_repository.h b/common/repositories/guild_relations_repository.h index 7d13cf972..e60c0f657 100644 --- a/common/repositories/guild_relations_repository.h +++ b/common/repositories/guild_relations_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_guild_relations_repository.h" -class GuildRelationsRepository { +class GuildRelationsRepository: public BaseGuildRelationsRepository { public: - struct GuildRelations { - int guild1; - int guild2; - int8 relation; - }; - static std::string PrimaryKey() - { - return std::string("guild2"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GuildRelationsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GuildRelationsRepository::GetWhereNeverExpires() + * GuildRelationsRepository::GetWhereXAndY() + * GuildRelationsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "guild1", - "guild2", - "relation", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("guild_relations"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static GuildRelations NewEntity() - { - GuildRelations entry{}; - - entry.guild1 = 0; - entry.guild2 = 0; - entry.relation = 0; - - return entry; - } - - static GuildRelations GetGuildRelationsEntry( - const std::vector &guild_relationss, - int guild_relations_id - ) - { - for (auto &guild_relations : guild_relationss) { - if (guild_relations.guild2 == guild_relations_id) { - return guild_relations; - } - } - - return NewEntity(); - } - - static GuildRelations FindOne( - int guild_relations_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - guild_relations_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - GuildRelations entry{}; - - entry.guild1 = atoi(row[0]); - entry.guild2 = atoi(row[1]); - entry.relation = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int guild_relations_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - guild_relations_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - GuildRelations guild_relations_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(guild_relations_entry.relation)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - guild_relations_entry.guild2 - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static GuildRelations InsertOne( - GuildRelations guild_relations_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(guild_relations_entry.relation)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - guild_relations_entry.id = results.LastInsertedID(); - return guild_relations_entry; - } - - guild_relations_entry = GuildRelationsRepository::NewEntity(); - - return guild_relations_entry; - } - - static int InsertMany( - std::vector guild_relations_entries - ) - { - std::vector insert_chunks; - - for (auto &guild_relations_entry: guild_relations_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(guild_relations_entry.relation)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildRelations entry{}; - - entry.guild1 = atoi(row[0]); - entry.guild2 = atoi(row[1]); - entry.relation = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - GuildRelations entry{}; - - entry.guild1 = atoi(row[0]); - entry.guild2 = atoi(row[1]); - entry.relation = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index 74eb23c94..7b63f63ff 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_guilds_repository.h" -class GuildsRepository { +class GuildsRepository: public BaseGuildsRepository { public: - struct Guilds { - int id; - std::string name; - int leader; - int16 minstatus; - std::string motd; - int tribute; - std::string motd_setter; - std::string channel; - std::string url; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GuildsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GuildsRepository::GetWhereNeverExpires() + * GuildsRepository::GetWhereXAndY() + * GuildsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "leader", - "minstatus", - "motd", - "tribute", - "motd_setter", - "channel", - "url", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("guilds"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Guilds NewEntity() - { - Guilds entry{}; - - entry.id = 0; - entry.name = ""; - entry.leader = 0; - entry.minstatus = 0; - entry.motd = ""; - entry.tribute = 0; - entry.motd_setter = ""; - entry.channel = ""; - entry.url = ""; - - return entry; - } - - static Guilds GetGuildsEntry( - const std::vector &guildss, - int guilds_id - ) - { - for (auto &guilds : guildss) { - if (guilds.id == guilds_id) { - return guilds; - } - } - - return NewEntity(); - } - - static Guilds FindOne( - int guilds_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - guilds_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Guilds entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.leader = atoi(row[2]); - entry.minstatus = atoi(row[3]); - entry.motd = row[4] ? row[4] : ""; - entry.tribute = atoi(row[5]); - entry.motd_setter = row[6] ? row[6] : ""; - entry.channel = row[7] ? row[7] : ""; - entry.url = row[8] ? row[8] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int guilds_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - guilds_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Guilds guilds_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(guilds_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(guilds_entry.leader)); - update_values.push_back(columns[3] + " = " + std::to_string(guilds_entry.minstatus)); - update_values.push_back(columns[4] + " = '" + EscapeString(guilds_entry.motd) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(guilds_entry.tribute)); - update_values.push_back(columns[6] + " = '" + EscapeString(guilds_entry.motd_setter) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(guilds_entry.channel) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(guilds_entry.url) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - guilds_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Guilds InsertOne( - Guilds guilds_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); - insert_values.push_back(std::to_string(guilds_entry.leader)); - insert_values.push_back(std::to_string(guilds_entry.minstatus)); - insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); - insert_values.push_back(std::to_string(guilds_entry.tribute)); - insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); - insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); - insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - guilds_entry.id = results.LastInsertedID(); - return guilds_entry; - } - - guilds_entry = GuildsRepository::NewEntity(); - - return guilds_entry; - } - - static int InsertMany( - std::vector guilds_entries - ) - { - std::vector insert_chunks; - - for (auto &guilds_entry: guilds_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(guilds_entry.name) + "'"); - insert_values.push_back(std::to_string(guilds_entry.leader)); - insert_values.push_back(std::to_string(guilds_entry.minstatus)); - insert_values.push_back("'" + EscapeString(guilds_entry.motd) + "'"); - insert_values.push_back(std::to_string(guilds_entry.tribute)); - insert_values.push_back("'" + EscapeString(guilds_entry.motd_setter) + "'"); - insert_values.push_back("'" + EscapeString(guilds_entry.channel) + "'"); - insert_values.push_back("'" + EscapeString(guilds_entry.url) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Guilds entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.leader = atoi(row[2]); - entry.minstatus = atoi(row[3]); - entry.motd = row[4] ? row[4] : ""; - entry.tribute = atoi(row[5]); - entry.motd_setter = row[6] ? row[6] : ""; - entry.channel = row[7] ? row[7] : ""; - entry.url = row[8] ? row[8] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Guilds entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.leader = atoi(row[2]); - entry.minstatus = atoi(row[3]); - entry.motd = row[4] ? row[4] : ""; - entry.tribute = atoi(row[5]); - entry.motd_setter = row[6] ? row[6] : ""; - entry.channel = row[7] ? row[7] : ""; - entry.url = row[8] ? row[8] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index ca1d9c928..89e08b354 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_hackers_repository.h" -class HackersRepository { +class HackersRepository: public BaseHackersRepository { public: - struct Hackers { - int id; - std::string account; - std::string name; - std::string hacked; - std::string zone; - std::string date; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * HackersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * HackersRepository::GetWhereNeverExpires() + * HackersRepository::GetWhereXAndY() + * HackersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "account", - "name", - "hacked", - "zone", - "date", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("hackers"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Hackers NewEntity() - { - Hackers entry{}; - - entry.id = 0; - entry.account = ""; - entry.name = ""; - entry.hacked = ""; - entry.zone = ""; - entry.date = current_timestamp(); - - return entry; - } - - static Hackers GetHackersEntry( - const std::vector &hackerss, - int hackers_id - ) - { - for (auto &hackers : hackerss) { - if (hackers.id == hackers_id) { - return hackers; - } - } - - return NewEntity(); - } - - static Hackers FindOne( - int hackers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - hackers_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Hackers entry{}; - - entry.id = atoi(row[0]); - entry.account = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.hacked = row[3] ? row[3] : ""; - entry.zone = row[4] ? row[4] : ""; - entry.date = row[5] ? row[5] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int hackers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - hackers_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Hackers hackers_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(hackers_entry.account) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(hackers_entry.name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(hackers_entry.hacked) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(hackers_entry.zone) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(hackers_entry.date) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - hackers_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Hackers InsertOne( - Hackers hackers_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - hackers_entry.id = results.LastInsertedID(); - return hackers_entry; - } - - hackers_entry = HackersRepository::NewEntity(); - - return hackers_entry; - } - - static int InsertMany( - std::vector hackers_entries - ) - { - std::vector insert_chunks; - - for (auto &hackers_entry: hackers_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(hackers_entry.account) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.hacked) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.zone) + "'"); - insert_values.push_back("'" + EscapeString(hackers_entry.date) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Hackers entry{}; - - entry.id = atoi(row[0]); - entry.account = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.hacked = row[3] ? row[3] : ""; - entry.zone = row[4] ? row[4] : ""; - entry.date = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Hackers entry{}; - - entry.id = atoi(row[0]); - entry.account = row[1] ? row[1] : ""; - entry.name = row[2] ? row[2] : ""; - entry.hacked = row[3] ? row[3] : ""; - entry.zone = row[4] ? row[4] : ""; - entry.date = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index 56d7814dc..398bafee5 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_horses_repository.h" -class HorsesRepository { +class HorsesRepository: public BaseHorsesRepository { public: - struct Horses { - std::string filename; - int16 race; - int8 gender; - int8 texture; - float mountspeed; - std::string notes; - }; - static std::string PrimaryKey() - { - return std::string("filename"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * HorsesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * HorsesRepository::GetWhereNeverExpires() + * HorsesRepository::GetWhereXAndY() + * HorsesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "filename", - "race", - "gender", - "texture", - "mountspeed", - "notes", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("horses"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Horses NewEntity() - { - Horses entry{}; - - entry.filename = ""; - entry.race = 216; - entry.gender = 0; - entry.texture = 0; - entry.mountspeed = 0.75; - entry.notes = "Notes"; - - return entry; - } - - static Horses GetHorsesEntry( - const std::vector &horsess, - int horses_id - ) - { - for (auto &horses : horsess) { - if (horses.filename == horses_id) { - return horses; - } - } - - return NewEntity(); - } - - static Horses FindOne( - int horses_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - horses_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Horses entry{}; - - entry.filename = row[0] ? row[0] : ""; - entry.race = atoi(row[1]); - entry.gender = atoi(row[2]); - entry.texture = atoi(row[3]); - entry.mountspeed = atof(row[4]); - entry.notes = row[5] ? row[5] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int horses_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - horses_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Horses horses_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(horses_entry.race)); - update_values.push_back(columns[2] + " = " + std::to_string(horses_entry.gender)); - update_values.push_back(columns[3] + " = " + std::to_string(horses_entry.texture)); - update_values.push_back(columns[4] + " = " + std::to_string(horses_entry.mountspeed)); - update_values.push_back(columns[5] + " = '" + EscapeString(horses_entry.notes) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - horses_entry.filename - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Horses InsertOne( - Horses horses_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(horses_entry.race)); - insert_values.push_back(std::to_string(horses_entry.gender)); - insert_values.push_back(std::to_string(horses_entry.texture)); - insert_values.push_back(std::to_string(horses_entry.mountspeed)); - insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - horses_entry.id = results.LastInsertedID(); - return horses_entry; - } - - horses_entry = HorsesRepository::NewEntity(); - - return horses_entry; - } - - static int InsertMany( - std::vector horses_entries - ) - { - std::vector insert_chunks; - - for (auto &horses_entry: horses_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(horses_entry.race)); - insert_values.push_back(std::to_string(horses_entry.gender)); - insert_values.push_back(std::to_string(horses_entry.texture)); - insert_values.push_back(std::to_string(horses_entry.mountspeed)); - insert_values.push_back("'" + EscapeString(horses_entry.notes) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Horses entry{}; - - entry.filename = row[0] ? row[0] : ""; - entry.race = atoi(row[1]); - entry.gender = atoi(row[2]); - entry.texture = atoi(row[3]); - entry.mountspeed = atof(row[4]); - entry.notes = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Horses entry{}; - - entry.filename = row[0] ? row[0] : ""; - entry.race = atoi(row[1]); - entry.gender = atoi(row[2]); - entry.texture = atoi(row[3]); - entry.mountspeed = atof(row[4]); - entry.notes = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/instance_list_player_repository.h b/common/repositories/instance_list_player_repository.h index 1adde4943..dd98dbcdd 100644 --- a/common/repositories/instance_list_player_repository.h +++ b/common/repositories/instance_list_player_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_instance_list_player_repository.h" -class InstanceListPlayerRepository { +class InstanceListPlayerRepository: public BaseInstanceListPlayerRepository { public: - struct InstanceListPlayer { - int id; - int charid; - }; - static std::string PrimaryKey() - { - return std::string("charid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * InstanceListPlayerRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * InstanceListPlayerRepository::GetWhereNeverExpires() + * InstanceListPlayerRepository::GetWhereXAndY() + * InstanceListPlayerRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "charid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("instance_list_player"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static InstanceListPlayer NewEntity() - { - InstanceListPlayer entry{}; - - entry.id = 0; - entry.charid = 0; - - return entry; - } - - static InstanceListPlayer GetInstanceListPlayerEntry( - const std::vector &instance_list_players, - int instance_list_player_id - ) - { - for (auto &instance_list_player : instance_list_players) { - if (instance_list_player.charid == instance_list_player_id) { - return instance_list_player; - } - } - - return NewEntity(); - } - - static InstanceListPlayer FindOne( - int instance_list_player_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - instance_list_player_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - InstanceListPlayer entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int instance_list_player_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - instance_list_player_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - InstanceListPlayer instance_list_player_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - instance_list_player_entry.charid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static InstanceListPlayer InsertOne( - InstanceListPlayer instance_list_player_entry - ) - { - std::vector insert_values; - - - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - instance_list_player_entry.id = results.LastInsertedID(); - return instance_list_player_entry; - } - - instance_list_player_entry = InstanceListPlayerRepository::NewEntity(); - - return instance_list_player_entry; - } - - static int InsertMany( - std::vector instance_list_player_entries - ) - { - std::vector insert_chunks; - - for (auto &instance_list_player_entry: instance_list_player_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InstanceListPlayer entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InstanceListPlayer entry{}; - - entry.id = atoi(row[0]); - entry.charid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index 763856653..afb221dbc 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -23,320 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_instance_list_repository.h" -class InstanceListRepository { +class InstanceListRepository: public BaseInstanceListRepository { public: - struct InstanceList { - int id; - int zone; - int8 version; - int8 is_global; - int start_time; - int duration; - int8 never_expires; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * InstanceListRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * InstanceListRepository::GetWhereNeverExpires() + * InstanceListRepository::GetWhereXAndY() + * InstanceListRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "version", - "is_global", - "start_time", - "duration", - "never_expires", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("instance_list"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static InstanceList NewEntity() - { - InstanceList entry{}; - - entry.id = 0; - entry.zone = 0; - entry.version = 0; - entry.is_global = 0; - entry.start_time = 0; - entry.duration = 0; - entry.never_expires = 0; - - return entry; - } - - static InstanceList GetInstanceListEntry( - const std::vector &instance_lists, - int instance_list_id - ) - { - for (auto &instance_list : instance_lists) { - if (instance_list.id == instance_list_id) { - return instance_list; - } - } - - return NewEntity(); - } - - static InstanceList FindOne( - int instance_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - instance_list_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - InstanceList entry{}; - - entry.id = atoi(row[0]); - entry.zone = atoi(row[1]); - entry.version = atoi(row[2]); - entry.is_global = atoi(row[3]); - entry.start_time = atoi(row[4]); - entry.duration = atoi(row[5]); - entry.never_expires = atoi(row[6]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int instance_list_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - instance_list_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - InstanceList instance_list_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(instance_list_entry.zone)); - update_values.push_back(columns[2] + " = " + std::to_string(instance_list_entry.version)); - update_values.push_back(columns[3] + " = " + std::to_string(instance_list_entry.is_global)); - update_values.push_back(columns[4] + " = " + std::to_string(instance_list_entry.start_time)); - update_values.push_back(columns[5] + " = " + std::to_string(instance_list_entry.duration)); - update_values.push_back(columns[6] + " = " + std::to_string(instance_list_entry.never_expires)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - instance_list_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static InstanceList InsertOne( - InstanceList instance_list_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(instance_list_entry.zone)); - insert_values.push_back(std::to_string(instance_list_entry.version)); - insert_values.push_back(std::to_string(instance_list_entry.is_global)); - insert_values.push_back(std::to_string(instance_list_entry.start_time)); - insert_values.push_back(std::to_string(instance_list_entry.duration)); - insert_values.push_back(std::to_string(instance_list_entry.never_expires)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - instance_list_entry.id = results.LastInsertedID(); - return instance_list_entry; - } - - instance_list_entry = InstanceListRepository::NewEntity(); - - return instance_list_entry; - } - - static int InsertMany( - std::vector instance_list_entries - ) - { - std::vector insert_chunks; - - for (auto &instance_list_entry: instance_list_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(instance_list_entry.zone)); - insert_values.push_back(std::to_string(instance_list_entry.version)); - insert_values.push_back(std::to_string(instance_list_entry.is_global)); - insert_values.push_back(std::to_string(instance_list_entry.start_time)); - insert_values.push_back(std::to_string(instance_list_entry.duration)); - insert_values.push_back(std::to_string(instance_list_entry.never_expires)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InstanceList entry{}; - - entry.id = atoi(row[0]); - entry.zone = atoi(row[1]); - entry.version = atoi(row[2]); - entry.is_global = atoi(row[3]); - entry.start_time = atoi(row[4]); - entry.duration = atoi(row[5]); - entry.never_expires = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InstanceList entry{}; - - entry.id = atoi(row[0]); - entry.zone = atoi(row[1]); - entry.version = atoi(row[2]); - entry.is_global = atoi(row[3]); - entry.start_time = atoi(row[4]); - entry.duration = atoi(row[5]); - entry.never_expires = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index 7f83adcc8..003c152d4 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -23,398 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_inventory_repository.h" -class InventoryRepository { +class InventoryRepository: public BaseInventoryRepository { public: - struct Inventory { - int charid; - int slotid; - int itemid; - int16 charges; - int color; - int augslot1; - int augslot2; - int augslot3; - int augslot4; - int augslot5; - int augslot6; - int8 instnodrop; - std::string custom_data; - int ornamenticon; - int ornamentidfile; - int ornament_hero_model; - }; - static std::string PrimaryKey() - { - return std::string("slotid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * InventoryRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * InventoryRepository::GetWhereNeverExpires() + * InventoryRepository::GetWhereXAndY() + * InventoryRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "slotid", - "itemid", - "charges", - "color", - "augslot1", - "augslot2", - "augslot3", - "augslot4", - "augslot5", - "augslot6", - "instnodrop", - "custom_data", - "ornamenticon", - "ornamentidfile", - "ornament_hero_model", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("inventory"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Inventory NewEntity() - { - Inventory entry{}; - - entry.charid = 0; - entry.slotid = 0; - entry.itemid = 0; - entry.charges = 0; - entry.color = 0; - entry.augslot1 = 0; - entry.augslot2 = 0; - entry.augslot3 = 0; - entry.augslot4 = 0; - entry.augslot5 = 0; - entry.augslot6 = 0; - entry.instnodrop = 0; - entry.custom_data = ""; - entry.ornamenticon = 0; - entry.ornamentidfile = 0; - entry.ornament_hero_model = 0; - - return entry; - } - - static Inventory GetInventoryEntry( - const std::vector &inventorys, - int inventory_id - ) - { - for (auto &inventory : inventorys) { - if (inventory.slotid == inventory_id) { - return inventory; - } - } - - return NewEntity(); - } - - static Inventory FindOne( - int inventory_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - inventory_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Inventory entry{}; - - entry.charid = atoi(row[0]); - entry.slotid = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.color = atoi(row[4]); - entry.augslot1 = atoi(row[5]); - entry.augslot2 = atoi(row[6]); - entry.augslot3 = atoi(row[7]); - entry.augslot4 = atoi(row[8]); - entry.augslot5 = atoi(row[9]); - entry.augslot6 = atoi(row[10]); - entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12] ? row[12] : ""; - entry.ornamenticon = atoi(row[13]); - entry.ornamentidfile = atoi(row[14]); - entry.ornament_hero_model = atoi(row[15]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int inventory_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - inventory_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Inventory inventory_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(inventory_entry.itemid)); - update_values.push_back(columns[3] + " = " + std::to_string(inventory_entry.charges)); - update_values.push_back(columns[4] + " = " + std::to_string(inventory_entry.color)); - update_values.push_back(columns[5] + " = " + std::to_string(inventory_entry.augslot1)); - update_values.push_back(columns[6] + " = " + std::to_string(inventory_entry.augslot2)); - update_values.push_back(columns[7] + " = " + std::to_string(inventory_entry.augslot3)); - update_values.push_back(columns[8] + " = " + std::to_string(inventory_entry.augslot4)); - update_values.push_back(columns[9] + " = " + std::to_string(inventory_entry.augslot5)); - update_values.push_back(columns[10] + " = " + std::to_string(inventory_entry.augslot6)); - update_values.push_back(columns[11] + " = " + std::to_string(inventory_entry.instnodrop)); - update_values.push_back(columns[12] + " = '" + EscapeString(inventory_entry.custom_data) + "'"); - update_values.push_back(columns[13] + " = " + std::to_string(inventory_entry.ornamenticon)); - update_values.push_back(columns[14] + " = " + std::to_string(inventory_entry.ornamentidfile)); - update_values.push_back(columns[15] + " = " + std::to_string(inventory_entry.ornament_hero_model)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - inventory_entry.slotid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Inventory InsertOne( - Inventory inventory_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(inventory_entry.itemid)); - insert_values.push_back(std::to_string(inventory_entry.charges)); - insert_values.push_back(std::to_string(inventory_entry.color)); - insert_values.push_back(std::to_string(inventory_entry.augslot1)); - insert_values.push_back(std::to_string(inventory_entry.augslot2)); - insert_values.push_back(std::to_string(inventory_entry.augslot3)); - insert_values.push_back(std::to_string(inventory_entry.augslot4)); - insert_values.push_back(std::to_string(inventory_entry.augslot5)); - insert_values.push_back(std::to_string(inventory_entry.augslot6)); - insert_values.push_back(std::to_string(inventory_entry.instnodrop)); - insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); - insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); - insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); - insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - inventory_entry.id = results.LastInsertedID(); - return inventory_entry; - } - - inventory_entry = InventoryRepository::NewEntity(); - - return inventory_entry; - } - - static int InsertMany( - std::vector inventory_entries - ) - { - std::vector insert_chunks; - - for (auto &inventory_entry: inventory_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(inventory_entry.itemid)); - insert_values.push_back(std::to_string(inventory_entry.charges)); - insert_values.push_back(std::to_string(inventory_entry.color)); - insert_values.push_back(std::to_string(inventory_entry.augslot1)); - insert_values.push_back(std::to_string(inventory_entry.augslot2)); - insert_values.push_back(std::to_string(inventory_entry.augslot3)); - insert_values.push_back(std::to_string(inventory_entry.augslot4)); - insert_values.push_back(std::to_string(inventory_entry.augslot5)); - insert_values.push_back(std::to_string(inventory_entry.augslot6)); - insert_values.push_back(std::to_string(inventory_entry.instnodrop)); - insert_values.push_back("'" + EscapeString(inventory_entry.custom_data) + "'"); - insert_values.push_back(std::to_string(inventory_entry.ornamenticon)); - insert_values.push_back(std::to_string(inventory_entry.ornamentidfile)); - insert_values.push_back(std::to_string(inventory_entry.ornament_hero_model)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Inventory entry{}; - - entry.charid = atoi(row[0]); - entry.slotid = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.color = atoi(row[4]); - entry.augslot1 = atoi(row[5]); - entry.augslot2 = atoi(row[6]); - entry.augslot3 = atoi(row[7]); - entry.augslot4 = atoi(row[8]); - entry.augslot5 = atoi(row[9]); - entry.augslot6 = atoi(row[10]); - entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12] ? row[12] : ""; - entry.ornamenticon = atoi(row[13]); - entry.ornamentidfile = atoi(row[14]); - entry.ornament_hero_model = atoi(row[15]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Inventory entry{}; - - entry.charid = atoi(row[0]); - entry.slotid = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.color = atoi(row[4]); - entry.augslot1 = atoi(row[5]); - entry.augslot2 = atoi(row[6]); - entry.augslot3 = atoi(row[7]); - entry.augslot4 = atoi(row[8]); - entry.augslot5 = atoi(row[9]); - entry.augslot6 = atoi(row[10]); - entry.instnodrop = atoi(row[11]); - entry.custom_data = row[12] ? row[12] : ""; - entry.ornamenticon = atoi(row[13]); - entry.ornamentidfile = atoi(row[14]); - entry.ornament_hero_model = atoi(row[15]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index ee28dfc56..52b60328e 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -23,404 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_inventory_snapshots_repository.h" -class InventorySnapshotsRepository { +class InventorySnapshotsRepository: public BaseInventorySnapshotsRepository { public: - struct InventorySnapshots { - int time_index; - int charid; - int slotid; - int itemid; - int16 charges; - int color; - int augslot1; - int augslot2; - int augslot3; - int augslot4; - int augslot5; - int augslot6; - int8 instnodrop; - std::string custom_data; - int ornamenticon; - int ornamentidfile; - int ornament_hero_model; - }; - static std::string PrimaryKey() - { - return std::string("slotid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * InventorySnapshotsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * InventorySnapshotsRepository::GetWhereNeverExpires() + * InventorySnapshotsRepository::GetWhereXAndY() + * InventorySnapshotsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "time_index", - "charid", - "slotid", - "itemid", - "charges", - "color", - "augslot1", - "augslot2", - "augslot3", - "augslot4", - "augslot5", - "augslot6", - "instnodrop", - "custom_data", - "ornamenticon", - "ornamentidfile", - "ornament_hero_model", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("inventory_snapshots"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static InventorySnapshots NewEntity() - { - InventorySnapshots entry{}; - - entry.time_index = 0; - entry.charid = 0; - entry.slotid = 0; - entry.itemid = 0; - entry.charges = 0; - entry.color = 0; - entry.augslot1 = 0; - entry.augslot2 = 0; - entry.augslot3 = 0; - entry.augslot4 = 0; - entry.augslot5 = 0; - entry.augslot6 = 0; - entry.instnodrop = 0; - entry.custom_data = ""; - entry.ornamenticon = 0; - entry.ornamentidfile = 0; - entry.ornament_hero_model = 0; - - return entry; - } - - static InventorySnapshots GetInventorySnapshotsEntry( - const std::vector &inventory_snapshotss, - int inventory_snapshots_id - ) - { - for (auto &inventory_snapshots : inventory_snapshotss) { - if (inventory_snapshots.slotid == inventory_snapshots_id) { - return inventory_snapshots; - } - } - - return NewEntity(); - } - - static InventorySnapshots FindOne( - int inventory_snapshots_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - inventory_snapshots_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - InventorySnapshots entry{}; - - entry.time_index = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.slotid = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.color = atoi(row[5]); - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13] ? row[13] : ""; - entry.ornamenticon = atoi(row[14]); - entry.ornamentidfile = atoi(row[15]); - entry.ornament_hero_model = atoi(row[16]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int inventory_snapshots_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - inventory_snapshots_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - InventorySnapshots inventory_snapshots_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(inventory_snapshots_entry.itemid)); - update_values.push_back(columns[4] + " = " + std::to_string(inventory_snapshots_entry.charges)); - update_values.push_back(columns[5] + " = " + std::to_string(inventory_snapshots_entry.color)); - update_values.push_back(columns[6] + " = " + std::to_string(inventory_snapshots_entry.augslot1)); - update_values.push_back(columns[7] + " = " + std::to_string(inventory_snapshots_entry.augslot2)); - update_values.push_back(columns[8] + " = " + std::to_string(inventory_snapshots_entry.augslot3)); - update_values.push_back(columns[9] + " = " + std::to_string(inventory_snapshots_entry.augslot4)); - update_values.push_back(columns[10] + " = " + std::to_string(inventory_snapshots_entry.augslot5)); - update_values.push_back(columns[11] + " = " + std::to_string(inventory_snapshots_entry.augslot6)); - update_values.push_back(columns[12] + " = " + std::to_string(inventory_snapshots_entry.instnodrop)); - update_values.push_back(columns[13] + " = '" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); - update_values.push_back(columns[14] + " = " + std::to_string(inventory_snapshots_entry.ornamenticon)); - update_values.push_back(columns[15] + " = " + std::to_string(inventory_snapshots_entry.ornamentidfile)); - update_values.push_back(columns[16] + " = " + std::to_string(inventory_snapshots_entry.ornament_hero_model)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - inventory_snapshots_entry.slotid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static InventorySnapshots InsertOne( - InventorySnapshots inventory_snapshots_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); - insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - inventory_snapshots_entry.id = results.LastInsertedID(); - return inventory_snapshots_entry; - } - - inventory_snapshots_entry = InventorySnapshotsRepository::NewEntity(); - - return inventory_snapshots_entry; - } - - static int InsertMany( - std::vector inventory_snapshots_entries - ) - { - std::vector insert_chunks; - - for (auto &inventory_snapshots_entry: inventory_snapshots_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot1)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot2)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot3)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot4)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot5)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.augslot6)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.instnodrop)); - insert_values.push_back("'" + EscapeString(inventory_snapshots_entry.custom_data) + "'"); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamenticon)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornamentidfile)); - insert_values.push_back(std::to_string(inventory_snapshots_entry.ornament_hero_model)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InventorySnapshots entry{}; - - entry.time_index = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.slotid = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.color = atoi(row[5]); - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13] ? row[13] : ""; - entry.ornamenticon = atoi(row[14]); - entry.ornamentidfile = atoi(row[15]); - entry.ornament_hero_model = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - InventorySnapshots entry{}; - - entry.time_index = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.slotid = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.color = atoi(row[5]); - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - entry.instnodrop = atoi(row[12]); - entry.custom_data = row[13] ? row[13] : ""; - entry.ornamenticon = atoi(row[14]); - entry.ornamentidfile = atoi(row[15]); - entry.ornament_hero_model = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index ad0d0030d..00c318394 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_ip_exemptions_repository.h" -class IpExemptionsRepository { +class IpExemptionsRepository: public BaseIpExemptionsRepository { public: - struct IpExemptions { - int exemption_id; - std::string exemption_ip; - int exemption_amount; - }; - static std::string PrimaryKey() - { - return std::string("exemption_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * IpExemptionsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * IpExemptionsRepository::GetWhereNeverExpires() + * IpExemptionsRepository::GetWhereXAndY() + * IpExemptionsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "exemption_id", - "exemption_ip", - "exemption_amount", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("ip_exemptions"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static IpExemptions NewEntity() - { - IpExemptions entry{}; - - entry.exemption_id = 0; - entry.exemption_ip = ""; - entry.exemption_amount = 0; - - return entry; - } - - static IpExemptions GetIpExemptionsEntry( - const std::vector &ip_exemptionss, - int ip_exemptions_id - ) - { - for (auto &ip_exemptions : ip_exemptionss) { - if (ip_exemptions.exemption_id == ip_exemptions_id) { - return ip_exemptions; - } - } - - return NewEntity(); - } - - static IpExemptions FindOne( - int ip_exemptions_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - ip_exemptions_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - IpExemptions entry{}; - - entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1] ? row[1] : ""; - entry.exemption_amount = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int ip_exemptions_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - ip_exemptions_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - IpExemptions ip_exemptions_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(ip_exemptions_entry.exemption_amount)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - ip_exemptions_entry.exemption_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static IpExemptions InsertOne( - IpExemptions ip_exemptions_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); - insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - ip_exemptions_entry.id = results.LastInsertedID(); - return ip_exemptions_entry; - } - - ip_exemptions_entry = IpExemptionsRepository::NewEntity(); - - return ip_exemptions_entry; - } - - static int InsertMany( - std::vector ip_exemptions_entries - ) - { - std::vector insert_chunks; - - for (auto &ip_exemptions_entry: ip_exemptions_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(ip_exemptions_entry.exemption_ip) + "'"); - insert_values.push_back(std::to_string(ip_exemptions_entry.exemption_amount)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - IpExemptions entry{}; - - entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1] ? row[1] : ""; - entry.exemption_amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - IpExemptions entry{}; - - entry.exemption_id = atoi(row[0]); - entry.exemption_ip = row[1] ? row[1] : ""; - entry.exemption_amount = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index 4fb244d0d..1418b9227 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_item_tick_repository.h" -class ItemTickRepository { +class ItemTickRepository: public BaseItemTickRepository { public: - struct ItemTick { - int it_itemid; - int it_chance; - int it_level; - int it_id; - std::string it_qglobal; - int8 it_bagslot; - }; - static std::string PrimaryKey() - { - return std::string("it_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ItemTickRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ItemTickRepository::GetWhereNeverExpires() + * ItemTickRepository::GetWhereXAndY() + * ItemTickRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "it_itemid", - "it_chance", - "it_level", - "it_id", - "it_qglobal", - "it_bagslot", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("item_tick"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static ItemTick NewEntity() - { - ItemTick entry{}; - - entry.it_itemid = 0; - entry.it_chance = 0; - entry.it_level = 0; - entry.it_id = 0; - entry.it_qglobal = ""; - entry.it_bagslot = 0; - - return entry; - } - - static ItemTick GetItemTickEntry( - const std::vector &item_ticks, - int item_tick_id - ) - { - for (auto &item_tick : item_ticks) { - if (item_tick.it_id == item_tick_id) { - return item_tick; - } - } - - return NewEntity(); - } - - static ItemTick FindOne( - int item_tick_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - item_tick_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - ItemTick entry{}; - - entry.it_itemid = atoi(row[0]); - entry.it_chance = atoi(row[1]); - entry.it_level = atoi(row[2]); - entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4] ? row[4] : ""; - entry.it_bagslot = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int item_tick_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - item_tick_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - ItemTick item_tick_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(item_tick_entry.it_itemid)); - update_values.push_back(columns[1] + " = " + std::to_string(item_tick_entry.it_chance)); - update_values.push_back(columns[2] + " = " + std::to_string(item_tick_entry.it_level)); - update_values.push_back(columns[4] + " = '" + EscapeString(item_tick_entry.it_qglobal) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(item_tick_entry.it_bagslot)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - item_tick_entry.it_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static ItemTick InsertOne( - ItemTick item_tick_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); - insert_values.push_back(std::to_string(item_tick_entry.it_chance)); - insert_values.push_back(std::to_string(item_tick_entry.it_level)); - insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); - insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - item_tick_entry.id = results.LastInsertedID(); - return item_tick_entry; - } - - item_tick_entry = ItemTickRepository::NewEntity(); - - return item_tick_entry; - } - - static int InsertMany( - std::vector item_tick_entries - ) - { - std::vector insert_chunks; - - for (auto &item_tick_entry: item_tick_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(item_tick_entry.it_itemid)); - insert_values.push_back(std::to_string(item_tick_entry.it_chance)); - insert_values.push_back(std::to_string(item_tick_entry.it_level)); - insert_values.push_back("'" + EscapeString(item_tick_entry.it_qglobal) + "'"); - insert_values.push_back(std::to_string(item_tick_entry.it_bagslot)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ItemTick entry{}; - - entry.it_itemid = atoi(row[0]); - entry.it_chance = atoi(row[1]); - entry.it_level = atoi(row[2]); - entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4] ? row[4] : ""; - entry.it_bagslot = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ItemTick entry{}; - - entry.it_itemid = atoi(row[0]); - entry.it_chance = atoi(row[1]); - entry.it_level = atoi(row[2]); - entry.it_id = atoi(row[3]); - entry.it_qglobal = row[4] ? row[4] : ""; - entry.it_bagslot = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index 1ff2c3206..83872d5f0 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -23,2822 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_items_repository.h" -class ItemsRepository { +class ItemsRepository: public BaseItemsRepository { public: - struct Items { - int id; - int16 minstatus; - std::string Name; - int aagi; - int ac; - int accuracy; - int acha; - int adex; - int aint; - int8 artifactflag; - int asta; - int astr; - int attack; - int augrestrict; - int8 augslot1type; - int8 augslot1visible; - int8 augslot2type; - int8 augslot2visible; - int8 augslot3type; - int8 augslot3visible; - int8 augslot4type; - int8 augslot4visible; - int8 augslot5type; - int8 augslot5visible; - int8 augslot6type; - int8 augslot6visible; - int augtype; - int avoidance; - int awis; - int bagsize; - int bagslots; - int bagtype; - int bagwr; - int banedmgamt; - int banedmgraceamt; - int banedmgbody; - int banedmgrace; - int bardtype; - int bardvalue; - int book; - int casttime; - int casttime_; - std::string charmfile; - std::string charmfileid; - int classes; - int color; - std::string combateffects; - int extradmgskill; - int extradmgamt; - int price; - int cr; - int damage; - int damageshield; - int deity; - int delay; - int augdistiller; - int dotshielding; - int dr; - int clicktype; - int clicklevel2; - int elemdmgtype; - int elemdmgamt; - int endur; - int factionamt1; - int factionamt2; - int factionamt3; - int factionamt4; - int factionmod1; - int factionmod2; - int factionmod3; - int factionmod4; - std::string filename; - int focuseffect; - int fr; - int fvnodrop; - int haste; - int clicklevel; - int hp; - int regen; - int icon; - std::string idfile; - int itemclass; - int itemtype; - int ldonprice; - int ldontheme; - int ldonsold; - int light; - std::string lore; - int loregroup; - int magic; - int mana; - int manaregen; - int enduranceregen; - int material; - int herosforgemodel; - int maxcharges; - int mr; - int nodrop; - int norent; - int8 pendingloreflag; - int pr; - int procrate; - int races; - int range; - int reclevel; - int recskill; - int reqlevel; - float sellrate; - int shielding; - int size; - int skillmodtype; - int skillmodvalue; - int slots; - int clickeffect; - int spellshield; - int strikethrough; - int stunresist; - int8 summonedflag; - int tradeskills; - int favor; - int weight; - int UNK012; - int UNK013; - int benefitflag; - int UNK054; - int UNK059; - int booktype; - int recastdelay; - int recasttype; - int guildfavor; - int UNK123; - int UNK124; - int attuneable; - int nopet; - std::string updated; - std::string comment; - int UNK127; - int pointtype; - int potionbelt; - int potionbeltslots; - int stacksize; - int notransfer; - int stackable; - std::string UNK134; - int UNK137; - int proceffect; - int proctype; - int proclevel2; - int proclevel; - int UNK142; - int worneffect; - int worntype; - int wornlevel2; - int wornlevel; - int UNK147; - int focustype; - int focuslevel2; - int focuslevel; - int UNK152; - int scrolleffect; - int scrolltype; - int scrolllevel2; - int scrolllevel; - int UNK157; - std::string serialized; - std::string verified; - std::string serialization; - std::string source; - int UNK033; - std::string lorefile; - int UNK014; - int svcorruption; - int skillmodmax; - int UNK060; - int augslot1unk2; - int augslot2unk2; - int augslot3unk2; - int augslot4unk2; - int augslot5unk2; - int augslot6unk2; - int UNK120; - int UNK121; - int questitemflag; - std::string UNK132; - int clickunk5; - std::string clickunk6; - int clickunk7; - int procunk1; - int procunk2; - int procunk3; - int procunk4; - std::string procunk6; - int procunk7; - int wornunk1; - int wornunk2; - int wornunk3; - int wornunk4; - int wornunk5; - std::string wornunk6; - int wornunk7; - int focusunk1; - int focusunk2; - int focusunk3; - int focusunk4; - int focusunk5; - std::string focusunk6; - int focusunk7; - int scrollunk1; - int scrollunk2; - int scrollunk3; - int scrollunk4; - int scrollunk5; - std::string scrollunk6; - int scrollunk7; - int UNK193; - int purity; - int evoitem; - int evoid; - int evolvinglevel; - int evomax; - std::string clickname; - std::string procname; - std::string wornname; - std::string focusname; - std::string scrollname; - int16 dsmitigation; - int16 heroic_str; - int16 heroic_int; - int16 heroic_wis; - int16 heroic_agi; - int16 heroic_dex; - int16 heroic_sta; - int16 heroic_cha; - int16 heroic_pr; - int16 heroic_dr; - int16 heroic_fr; - int16 heroic_cr; - int16 heroic_mr; - int16 heroic_svcorrup; - int16 healamt; - int16 spelldmg; - int16 clairvoyance; - int16 backstabdmg; - std::string created; - int16 elitematerial; - int16 ldonsellbackrate; - int16 scriptfileid; - int16 expendablearrow; - int16 powersourcecapacity; - int16 bardeffect; - int16 bardeffecttype; - int16 bardlevel2; - int16 bardlevel; - int16 bardunk1; - int16 bardunk2; - int16 bardunk3; - int16 bardunk4; - int16 bardunk5; - std::string bardname; - int16 bardunk7; - int16 UNK214; - int UNK219; - int UNK220; - int UNK221; - int heirloom; - int UNK223; - int UNK224; - int UNK225; - int UNK226; - int UNK227; - int UNK228; - int UNK229; - int UNK230; - int UNK231; - int UNK232; - int UNK233; - int UNK234; - int placeable; - int UNK236; - int UNK237; - int UNK238; - int UNK239; - int UNK240; - int UNK241; - int epicitem; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ItemsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ItemsRepository::GetWhereNeverExpires() + * ItemsRepository::GetWhereXAndY() + * ItemsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "minstatus", - "Name", - "aagi", - "ac", - "accuracy", - "acha", - "adex", - "aint", - "artifactflag", - "asta", - "astr", - "attack", - "augrestrict", - "augslot1type", - "augslot1visible", - "augslot2type", - "augslot2visible", - "augslot3type", - "augslot3visible", - "augslot4type", - "augslot4visible", - "augslot5type", - "augslot5visible", - "augslot6type", - "augslot6visible", - "augtype", - "avoidance", - "awis", - "bagsize", - "bagslots", - "bagtype", - "bagwr", - "banedmgamt", - "banedmgraceamt", - "banedmgbody", - "banedmgrace", - "bardtype", - "bardvalue", - "book", - "casttime", - "casttime_", - "charmfile", - "charmfileid", - "classes", - "color", - "combateffects", - "extradmgskill", - "extradmgamt", - "price", - "cr", - "damage", - "damageshield", - "deity", - "delay", - "augdistiller", - "dotshielding", - "dr", - "clicktype", - "clicklevel2", - "elemdmgtype", - "elemdmgamt", - "endur", - "factionamt1", - "factionamt2", - "factionamt3", - "factionamt4", - "factionmod1", - "factionmod2", - "factionmod3", - "factionmod4", - "filename", - "focuseffect", - "fr", - "fvnodrop", - "haste", - "clicklevel", - "hp", - "regen", - "icon", - "idfile", - "itemclass", - "itemtype", - "ldonprice", - "ldontheme", - "ldonsold", - "light", - "lore", - "loregroup", - "magic", - "mana", - "manaregen", - "enduranceregen", - "material", - "herosforgemodel", - "maxcharges", - "mr", - "nodrop", - "norent", - "pendingloreflag", - "pr", - "procrate", - "races", - "range", - "reclevel", - "recskill", - "reqlevel", - "sellrate", - "shielding", - "size", - "skillmodtype", - "skillmodvalue", - "slots", - "clickeffect", - "spellshield", - "strikethrough", - "stunresist", - "summonedflag", - "tradeskills", - "favor", - "weight", - "UNK012", - "UNK013", - "benefitflag", - "UNK054", - "UNK059", - "booktype", - "recastdelay", - "recasttype", - "guildfavor", - "UNK123", - "UNK124", - "attuneable", - "nopet", - "updated", - "comment", - "UNK127", - "pointtype", - "potionbelt", - "potionbeltslots", - "stacksize", - "notransfer", - "stackable", - "UNK134", - "UNK137", - "proceffect", - "proctype", - "proclevel2", - "proclevel", - "UNK142", - "worneffect", - "worntype", - "wornlevel2", - "wornlevel", - "UNK147", - "focustype", - "focuslevel2", - "focuslevel", - "UNK152", - "scrolleffect", - "scrolltype", - "scrolllevel2", - "scrolllevel", - "UNK157", - "serialized", - "verified", - "serialization", - "source", - "UNK033", - "lorefile", - "UNK014", - "svcorruption", - "skillmodmax", - "UNK060", - "augslot1unk2", - "augslot2unk2", - "augslot3unk2", - "augslot4unk2", - "augslot5unk2", - "augslot6unk2", - "UNK120", - "UNK121", - "questitemflag", - "UNK132", - "clickunk5", - "clickunk6", - "clickunk7", - "procunk1", - "procunk2", - "procunk3", - "procunk4", - "procunk6", - "procunk7", - "wornunk1", - "wornunk2", - "wornunk3", - "wornunk4", - "wornunk5", - "wornunk6", - "wornunk7", - "focusunk1", - "focusunk2", - "focusunk3", - "focusunk4", - "focusunk5", - "focusunk6", - "focusunk7", - "scrollunk1", - "scrollunk2", - "scrollunk3", - "scrollunk4", - "scrollunk5", - "scrollunk6", - "scrollunk7", - "UNK193", - "purity", - "evoitem", - "evoid", - "evolvinglevel", - "evomax", - "clickname", - "procname", - "wornname", - "focusname", - "scrollname", - "dsmitigation", - "heroic_str", - "heroic_int", - "heroic_wis", - "heroic_agi", - "heroic_dex", - "heroic_sta", - "heroic_cha", - "heroic_pr", - "heroic_dr", - "heroic_fr", - "heroic_cr", - "heroic_mr", - "heroic_svcorrup", - "healamt", - "spelldmg", - "clairvoyance", - "backstabdmg", - "created", - "elitematerial", - "ldonsellbackrate", - "scriptfileid", - "expendablearrow", - "powersourcecapacity", - "bardeffect", - "bardeffecttype", - "bardlevel2", - "bardlevel", - "bardunk1", - "bardunk2", - "bardunk3", - "bardunk4", - "bardunk5", - "bardname", - "bardunk7", - "UNK214", - "UNK219", - "UNK220", - "UNK221", - "heirloom", - "UNK223", - "UNK224", - "UNK225", - "UNK226", - "UNK227", - "UNK228", - "UNK229", - "UNK230", - "UNK231", - "UNK232", - "UNK233", - "UNK234", - "placeable", - "UNK236", - "UNK237", - "UNK238", - "UNK239", - "UNK240", - "UNK241", - "epicitem", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("items"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Items NewEntity() - { - Items entry{}; - - entry.id = 0; - entry.minstatus = 0; - entry.Name = ""; - entry.aagi = 0; - entry.ac = 0; - entry.accuracy = 0; - entry.acha = 0; - entry.adex = 0; - entry.aint = 0; - entry.artifactflag = 0; - entry.asta = 0; - entry.astr = 0; - entry.attack = 0; - entry.augrestrict = 0; - entry.augslot1type = 0; - entry.augslot1visible = 0; - entry.augslot2type = 0; - entry.augslot2visible = 0; - entry.augslot3type = 0; - entry.augslot3visible = 0; - entry.augslot4type = 0; - entry.augslot4visible = 0; - entry.augslot5type = 0; - entry.augslot5visible = 0; - entry.augslot6type = 0; - entry.augslot6visible = 0; - entry.augtype = 0; - entry.avoidance = 0; - entry.awis = 0; - entry.bagsize = 0; - entry.bagslots = 0; - entry.bagtype = 0; - entry.bagwr = 0; - entry.banedmgamt = 0; - entry.banedmgraceamt = 0; - entry.banedmgbody = 0; - entry.banedmgrace = 0; - entry.bardtype = 0; - entry.bardvalue = 0; - entry.book = 0; - entry.casttime = 0; - entry.casttime_ = 0; - entry.charmfile = ""; - entry.charmfileid = ""; - entry.classes = 0; - entry.color = 0; - entry.combateffects = ""; - entry.extradmgskill = 0; - entry.extradmgamt = 0; - entry.price = 0; - entry.cr = 0; - entry.damage = 0; - entry.damageshield = 0; - entry.deity = 0; - entry.delay = 0; - entry.augdistiller = 0; - entry.dotshielding = 0; - entry.dr = 0; - entry.clicktype = 0; - entry.clicklevel2 = 0; - entry.elemdmgtype = 0; - entry.elemdmgamt = 0; - entry.endur = 0; - entry.factionamt1 = 0; - entry.factionamt2 = 0; - entry.factionamt3 = 0; - entry.factionamt4 = 0; - entry.factionmod1 = 0; - entry.factionmod2 = 0; - entry.factionmod3 = 0; - entry.factionmod4 = 0; - entry.filename = ""; - entry.focuseffect = 0; - entry.fr = 0; - entry.fvnodrop = 0; - entry.haste = 0; - entry.clicklevel = 0; - entry.hp = 0; - entry.regen = 0; - entry.icon = 0; - entry.idfile = ""; - entry.itemclass = 0; - entry.itemtype = 0; - entry.ldonprice = 0; - entry.ldontheme = 0; - entry.ldonsold = 0; - entry.light = 0; - entry.lore = ""; - entry.loregroup = 0; - entry.magic = 0; - entry.mana = 0; - entry.manaregen = 0; - entry.enduranceregen = 0; - entry.material = 0; - entry.herosforgemodel = 0; - entry.maxcharges = 0; - entry.mr = 0; - entry.nodrop = 0; - entry.norent = 0; - entry.pendingloreflag = 0; - entry.pr = 0; - entry.procrate = 0; - entry.races = 0; - entry.range = 0; - entry.reclevel = 0; - entry.recskill = 0; - entry.reqlevel = 0; - entry.sellrate = 0; - entry.shielding = 0; - entry.size = 0; - entry.skillmodtype = 0; - entry.skillmodvalue = 0; - entry.slots = 0; - entry.clickeffect = 0; - entry.spellshield = 0; - entry.strikethrough = 0; - entry.stunresist = 0; - entry.summonedflag = 0; - entry.tradeskills = 0; - entry.favor = 0; - entry.weight = 0; - entry.UNK012 = 0; - entry.UNK013 = 0; - entry.benefitflag = 0; - entry.UNK054 = 0; - entry.UNK059 = 0; - entry.booktype = 0; - entry.recastdelay = 0; - entry.recasttype = 0; - entry.guildfavor = 0; - entry.UNK123 = 0; - entry.UNK124 = 0; - entry.attuneable = 0; - entry.nopet = 0; - entry.updated = "0000-00-00 00:00:00"; - entry.comment = ""; - entry.UNK127 = 0; - entry.pointtype = 0; - entry.potionbelt = 0; - entry.potionbeltslots = 0; - entry.stacksize = 0; - entry.notransfer = 0; - entry.stackable = 0; - entry.UNK134 = ""; - entry.UNK137 = 0; - entry.proceffect = 0; - entry.proctype = 0; - entry.proclevel2 = 0; - entry.proclevel = 0; - entry.UNK142 = 0; - entry.worneffect = 0; - entry.worntype = 0; - entry.wornlevel2 = 0; - entry.wornlevel = 0; - entry.UNK147 = 0; - entry.focustype = 0; - entry.focuslevel2 = 0; - entry.focuslevel = 0; - entry.UNK152 = 0; - entry.scrolleffect = 0; - entry.scrolltype = 0; - entry.scrolllevel2 = 0; - entry.scrolllevel = 0; - entry.UNK157 = 0; - entry.serialized = 0; - entry.verified = 0; - entry.serialization = ""; - entry.source = ""; - entry.UNK033 = 0; - entry.lorefile = ""; - entry.UNK014 = 0; - entry.svcorruption = 0; - entry.skillmodmax = 0; - entry.UNK060 = 0; - entry.augslot1unk2 = 0; - entry.augslot2unk2 = 0; - entry.augslot3unk2 = 0; - entry.augslot4unk2 = 0; - entry.augslot5unk2 = 0; - entry.augslot6unk2 = 0; - entry.UNK120 = 0; - entry.UNK121 = 0; - entry.questitemflag = 0; - entry.UNK132 = ""; - entry.clickunk5 = 0; - entry.clickunk6 = ""; - entry.clickunk7 = 0; - entry.procunk1 = 0; - entry.procunk2 = 0; - entry.procunk3 = 0; - entry.procunk4 = 0; - entry.procunk6 = ""; - entry.procunk7 = 0; - entry.wornunk1 = 0; - entry.wornunk2 = 0; - entry.wornunk3 = 0; - entry.wornunk4 = 0; - entry.wornunk5 = 0; - entry.wornunk6 = ""; - entry.wornunk7 = 0; - entry.focusunk1 = 0; - entry.focusunk2 = 0; - entry.focusunk3 = 0; - entry.focusunk4 = 0; - entry.focusunk5 = 0; - entry.focusunk6 = ""; - entry.focusunk7 = 0; - entry.scrollunk1 = 0; - entry.scrollunk2 = 0; - entry.scrollunk3 = 0; - entry.scrollunk4 = 0; - entry.scrollunk5 = 0; - entry.scrollunk6 = ""; - entry.scrollunk7 = 0; - entry.UNK193 = 0; - entry.purity = 0; - entry.evoitem = 0; - entry.evoid = 0; - entry.evolvinglevel = 0; - entry.evomax = 0; - entry.clickname = ""; - entry.procname = ""; - entry.wornname = ""; - entry.focusname = ""; - entry.scrollname = ""; - entry.dsmitigation = 0; - entry.heroic_str = 0; - entry.heroic_int = 0; - entry.heroic_wis = 0; - entry.heroic_agi = 0; - entry.heroic_dex = 0; - entry.heroic_sta = 0; - entry.heroic_cha = 0; - entry.heroic_pr = 0; - entry.heroic_dr = 0; - entry.heroic_fr = 0; - entry.heroic_cr = 0; - entry.heroic_mr = 0; - entry.heroic_svcorrup = 0; - entry.healamt = 0; - entry.spelldmg = 0; - entry.clairvoyance = 0; - entry.backstabdmg = 0; - entry.created = ""; - entry.elitematerial = 0; - entry.ldonsellbackrate = 0; - entry.scriptfileid = 0; - entry.expendablearrow = 0; - entry.powersourcecapacity = 0; - entry.bardeffect = 0; - entry.bardeffecttype = 0; - entry.bardlevel2 = 0; - entry.bardlevel = 0; - entry.bardunk1 = 0; - entry.bardunk2 = 0; - entry.bardunk3 = 0; - entry.bardunk4 = 0; - entry.bardunk5 = 0; - entry.bardname = ""; - entry.bardunk7 = 0; - entry.UNK214 = 0; - entry.UNK219 = 0; - entry.UNK220 = 0; - entry.UNK221 = 0; - entry.heirloom = 0; - entry.UNK223 = 0; - entry.UNK224 = 0; - entry.UNK225 = 0; - entry.UNK226 = 0; - entry.UNK227 = 0; - entry.UNK228 = 0; - entry.UNK229 = 0; - entry.UNK230 = 0; - entry.UNK231 = 0; - entry.UNK232 = 0; - entry.UNK233 = 0; - entry.UNK234 = 0; - entry.placeable = 0; - entry.UNK236 = 0; - entry.UNK237 = 0; - entry.UNK238 = 0; - entry.UNK239 = 0; - entry.UNK240 = 0; - entry.UNK241 = 0; - entry.epicitem = 0; - - return entry; - } - - static Items GetItemsEntry( - const std::vector &itemss, - int items_id - ) - { - for (auto &items : itemss) { - if (items.id == items_id) { - return items; - } - } - - return NewEntity(); - } - - static Items FindOne( - int items_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - items_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Items entry{}; - - entry.id = atoi(row[0]); - entry.minstatus = atoi(row[1]); - entry.Name = row[2] ? row[2] : ""; - entry.aagi = atoi(row[3]); - entry.ac = atoi(row[4]); - entry.accuracy = atoi(row[5]); - entry.acha = atoi(row[6]); - entry.adex = atoi(row[7]); - entry.aint = atoi(row[8]); - entry.artifactflag = atoi(row[9]); - entry.asta = atoi(row[10]); - entry.astr = atoi(row[11]); - entry.attack = atoi(row[12]); - entry.augrestrict = atoi(row[13]); - entry.augslot1type = atoi(row[14]); - entry.augslot1visible = atoi(row[15]); - entry.augslot2type = atoi(row[16]); - entry.augslot2visible = atoi(row[17]); - entry.augslot3type = atoi(row[18]); - entry.augslot3visible = atoi(row[19]); - entry.augslot4type = atoi(row[20]); - entry.augslot4visible = atoi(row[21]); - entry.augslot5type = atoi(row[22]); - entry.augslot5visible = atoi(row[23]); - entry.augslot6type = atoi(row[24]); - entry.augslot6visible = atoi(row[25]); - entry.augtype = atoi(row[26]); - entry.avoidance = atoi(row[27]); - entry.awis = atoi(row[28]); - entry.bagsize = atoi(row[29]); - entry.bagslots = atoi(row[30]); - entry.bagtype = atoi(row[31]); - entry.bagwr = atoi(row[32]); - entry.banedmgamt = atoi(row[33]); - entry.banedmgraceamt = atoi(row[34]); - entry.banedmgbody = atoi(row[35]); - entry.banedmgrace = atoi(row[36]); - entry.bardtype = atoi(row[37]); - entry.bardvalue = atoi(row[38]); - entry.book = atoi(row[39]); - entry.casttime = atoi(row[40]); - entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42] ? row[42] : ""; - entry.charmfileid = row[43] ? row[43] : ""; - entry.classes = atoi(row[44]); - entry.color = atoi(row[45]); - entry.combateffects = row[46] ? row[46] : ""; - entry.extradmgskill = atoi(row[47]); - entry.extradmgamt = atoi(row[48]); - entry.price = atoi(row[49]); - entry.cr = atoi(row[50]); - entry.damage = atoi(row[51]); - entry.damageshield = atoi(row[52]); - entry.deity = atoi(row[53]); - entry.delay = atoi(row[54]); - entry.augdistiller = atoi(row[55]); - entry.dotshielding = atoi(row[56]); - entry.dr = atoi(row[57]); - entry.clicktype = atoi(row[58]); - entry.clicklevel2 = atoi(row[59]); - entry.elemdmgtype = atoi(row[60]); - entry.elemdmgamt = atoi(row[61]); - entry.endur = atoi(row[62]); - entry.factionamt1 = atoi(row[63]); - entry.factionamt2 = atoi(row[64]); - entry.factionamt3 = atoi(row[65]); - entry.factionamt4 = atoi(row[66]); - entry.factionmod1 = atoi(row[67]); - entry.factionmod2 = atoi(row[68]); - entry.factionmod3 = atoi(row[69]); - entry.factionmod4 = atoi(row[70]); - entry.filename = row[71] ? row[71] : ""; - entry.focuseffect = atoi(row[72]); - entry.fr = atoi(row[73]); - entry.fvnodrop = atoi(row[74]); - entry.haste = atoi(row[75]); - entry.clicklevel = atoi(row[76]); - entry.hp = atoi(row[77]); - entry.regen = atoi(row[78]); - entry.icon = atoi(row[79]); - entry.idfile = row[80] ? row[80] : ""; - entry.itemclass = atoi(row[81]); - entry.itemtype = atoi(row[82]); - entry.ldonprice = atoi(row[83]); - entry.ldontheme = atoi(row[84]); - entry.ldonsold = atoi(row[85]); - entry.light = atoi(row[86]); - entry.lore = row[87] ? row[87] : ""; - entry.loregroup = atoi(row[88]); - entry.magic = atoi(row[89]); - entry.mana = atoi(row[90]); - entry.manaregen = atoi(row[91]); - entry.enduranceregen = atoi(row[92]); - entry.material = atoi(row[93]); - entry.herosforgemodel = atoi(row[94]); - entry.maxcharges = atoi(row[95]); - entry.mr = atoi(row[96]); - entry.nodrop = atoi(row[97]); - entry.norent = atoi(row[98]); - entry.pendingloreflag = atoi(row[99]); - entry.pr = atoi(row[100]); - entry.procrate = atoi(row[101]); - entry.races = atoi(row[102]); - entry.range = atoi(row[103]); - entry.reclevel = atoi(row[104]); - entry.recskill = atoi(row[105]); - entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); - entry.shielding = atoi(row[108]); - entry.size = atoi(row[109]); - entry.skillmodtype = atoi(row[110]); - entry.skillmodvalue = atoi(row[111]); - entry.slots = atoi(row[112]); - entry.clickeffect = atoi(row[113]); - entry.spellshield = atoi(row[114]); - entry.strikethrough = atoi(row[115]); - entry.stunresist = atoi(row[116]); - entry.summonedflag = atoi(row[117]); - entry.tradeskills = atoi(row[118]); - entry.favor = atoi(row[119]); - entry.weight = atoi(row[120]); - entry.UNK012 = atoi(row[121]); - entry.UNK013 = atoi(row[122]); - entry.benefitflag = atoi(row[123]); - entry.UNK054 = atoi(row[124]); - entry.UNK059 = atoi(row[125]); - entry.booktype = atoi(row[126]); - entry.recastdelay = atoi(row[127]); - entry.recasttype = atoi(row[128]); - entry.guildfavor = atoi(row[129]); - entry.UNK123 = atoi(row[130]); - entry.UNK124 = atoi(row[131]); - entry.attuneable = atoi(row[132]); - entry.nopet = atoi(row[133]); - entry.updated = row[134] ? row[134] : ""; - entry.comment = row[135] ? row[135] : ""; - entry.UNK127 = atoi(row[136]); - entry.pointtype = atoi(row[137]); - entry.potionbelt = atoi(row[138]); - entry.potionbeltslots = atoi(row[139]); - entry.stacksize = atoi(row[140]); - entry.notransfer = atoi(row[141]); - entry.stackable = atoi(row[142]); - entry.UNK134 = row[143] ? row[143] : ""; - entry.UNK137 = atoi(row[144]); - entry.proceffect = atoi(row[145]); - entry.proctype = atoi(row[146]); - entry.proclevel2 = atoi(row[147]); - entry.proclevel = atoi(row[148]); - entry.UNK142 = atoi(row[149]); - entry.worneffect = atoi(row[150]); - entry.worntype = atoi(row[151]); - entry.wornlevel2 = atoi(row[152]); - entry.wornlevel = atoi(row[153]); - entry.UNK147 = atoi(row[154]); - entry.focustype = atoi(row[155]); - entry.focuslevel2 = atoi(row[156]); - entry.focuslevel = atoi(row[157]); - entry.UNK152 = atoi(row[158]); - entry.scrolleffect = atoi(row[159]); - entry.scrolltype = atoi(row[160]); - entry.scrolllevel2 = atoi(row[161]); - entry.scrolllevel = atoi(row[162]); - entry.UNK157 = atoi(row[163]); - entry.serialized = row[164] ? row[164] : ""; - entry.verified = row[165] ? row[165] : ""; - entry.serialization = row[166] ? row[166] : ""; - entry.source = row[167] ? row[167] : ""; - entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169] ? row[169] : ""; - entry.UNK014 = atoi(row[170]); - entry.svcorruption = atoi(row[171]); - entry.skillmodmax = atoi(row[172]); - entry.UNK060 = atoi(row[173]); - entry.augslot1unk2 = atoi(row[174]); - entry.augslot2unk2 = atoi(row[175]); - entry.augslot3unk2 = atoi(row[176]); - entry.augslot4unk2 = atoi(row[177]); - entry.augslot5unk2 = atoi(row[178]); - entry.augslot6unk2 = atoi(row[179]); - entry.UNK120 = atoi(row[180]); - entry.UNK121 = atoi(row[181]); - entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183] ? row[183] : ""; - entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185] ? row[185] : ""; - entry.clickunk7 = atoi(row[186]); - entry.procunk1 = atoi(row[187]); - entry.procunk2 = atoi(row[188]); - entry.procunk3 = atoi(row[189]); - entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191] ? row[191] : ""; - entry.procunk7 = atoi(row[192]); - entry.wornunk1 = atoi(row[193]); - entry.wornunk2 = atoi(row[194]); - entry.wornunk3 = atoi(row[195]); - entry.wornunk4 = atoi(row[196]); - entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198] ? row[198] : ""; - entry.wornunk7 = atoi(row[199]); - entry.focusunk1 = atoi(row[200]); - entry.focusunk2 = atoi(row[201]); - entry.focusunk3 = atoi(row[202]); - entry.focusunk4 = atoi(row[203]); - entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205] ? row[205] : ""; - entry.focusunk7 = atoi(row[206]); - entry.scrollunk1 = atoi(row[207]); - entry.scrollunk2 = atoi(row[208]); - entry.scrollunk3 = atoi(row[209]); - entry.scrollunk4 = atoi(row[210]); - entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212] ? row[212] : ""; - entry.scrollunk7 = atoi(row[213]); - entry.UNK193 = atoi(row[214]); - entry.purity = atoi(row[215]); - entry.evoitem = atoi(row[216]); - entry.evoid = atoi(row[217]); - entry.evolvinglevel = atoi(row[218]); - entry.evomax = atoi(row[219]); - entry.clickname = row[220] ? row[220] : ""; - entry.procname = row[221] ? row[221] : ""; - entry.wornname = row[222] ? row[222] : ""; - entry.focusname = row[223] ? row[223] : ""; - entry.scrollname = row[224] ? row[224] : ""; - entry.dsmitigation = atoi(row[225]); - entry.heroic_str = atoi(row[226]); - entry.heroic_int = atoi(row[227]); - entry.heroic_wis = atoi(row[228]); - entry.heroic_agi = atoi(row[229]); - entry.heroic_dex = atoi(row[230]); - entry.heroic_sta = atoi(row[231]); - entry.heroic_cha = atoi(row[232]); - entry.heroic_pr = atoi(row[233]); - entry.heroic_dr = atoi(row[234]); - entry.heroic_fr = atoi(row[235]); - entry.heroic_cr = atoi(row[236]); - entry.heroic_mr = atoi(row[237]); - entry.heroic_svcorrup = atoi(row[238]); - entry.healamt = atoi(row[239]); - entry.spelldmg = atoi(row[240]); - entry.clairvoyance = atoi(row[241]); - entry.backstabdmg = atoi(row[242]); - entry.created = row[243] ? row[243] : ""; - entry.elitematerial = atoi(row[244]); - entry.ldonsellbackrate = atoi(row[245]); - entry.scriptfileid = atoi(row[246]); - entry.expendablearrow = atoi(row[247]); - entry.powersourcecapacity = atoi(row[248]); - entry.bardeffect = atoi(row[249]); - entry.bardeffecttype = atoi(row[250]); - entry.bardlevel2 = atoi(row[251]); - entry.bardlevel = atoi(row[252]); - entry.bardunk1 = atoi(row[253]); - entry.bardunk2 = atoi(row[254]); - entry.bardunk3 = atoi(row[255]); - entry.bardunk4 = atoi(row[256]); - entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258] ? row[258] : ""; - entry.bardunk7 = atoi(row[259]); - entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); - entry.UNK220 = atoi(row[262]); - entry.UNK221 = atoi(row[263]); - entry.heirloom = atoi(row[264]); - entry.UNK223 = atoi(row[265]); - entry.UNK224 = atoi(row[266]); - entry.UNK225 = atoi(row[267]); - entry.UNK226 = atoi(row[268]); - entry.UNK227 = atoi(row[269]); - entry.UNK228 = atoi(row[270]); - entry.UNK229 = atoi(row[271]); - entry.UNK230 = atoi(row[272]); - entry.UNK231 = atoi(row[273]); - entry.UNK232 = atoi(row[274]); - entry.UNK233 = atoi(row[275]); - entry.UNK234 = atoi(row[276]); - entry.placeable = atoi(row[277]); - entry.UNK236 = atoi(row[278]); - entry.UNK237 = atoi(row[279]); - entry.UNK238 = atoi(row[280]); - entry.UNK239 = atoi(row[281]); - entry.UNK240 = atoi(row[282]); - entry.UNK241 = atoi(row[283]); - entry.epicitem = atoi(row[284]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int items_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - items_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Items items_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(items_entry.minstatus)); - update_values.push_back(columns[2] + " = '" + EscapeString(items_entry.Name) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(items_entry.aagi)); - update_values.push_back(columns[4] + " = " + std::to_string(items_entry.ac)); - update_values.push_back(columns[5] + " = " + std::to_string(items_entry.accuracy)); - update_values.push_back(columns[6] + " = " + std::to_string(items_entry.acha)); - update_values.push_back(columns[7] + " = " + std::to_string(items_entry.adex)); - update_values.push_back(columns[8] + " = " + std::to_string(items_entry.aint)); - update_values.push_back(columns[9] + " = " + std::to_string(items_entry.artifactflag)); - update_values.push_back(columns[10] + " = " + std::to_string(items_entry.asta)); - update_values.push_back(columns[11] + " = " + std::to_string(items_entry.astr)); - update_values.push_back(columns[12] + " = " + std::to_string(items_entry.attack)); - update_values.push_back(columns[13] + " = " + std::to_string(items_entry.augrestrict)); - update_values.push_back(columns[14] + " = " + std::to_string(items_entry.augslot1type)); - update_values.push_back(columns[15] + " = " + std::to_string(items_entry.augslot1visible)); - update_values.push_back(columns[16] + " = " + std::to_string(items_entry.augslot2type)); - update_values.push_back(columns[17] + " = " + std::to_string(items_entry.augslot2visible)); - update_values.push_back(columns[18] + " = " + std::to_string(items_entry.augslot3type)); - update_values.push_back(columns[19] + " = " + std::to_string(items_entry.augslot3visible)); - update_values.push_back(columns[20] + " = " + std::to_string(items_entry.augslot4type)); - update_values.push_back(columns[21] + " = " + std::to_string(items_entry.augslot4visible)); - update_values.push_back(columns[22] + " = " + std::to_string(items_entry.augslot5type)); - update_values.push_back(columns[23] + " = " + std::to_string(items_entry.augslot5visible)); - update_values.push_back(columns[24] + " = " + std::to_string(items_entry.augslot6type)); - update_values.push_back(columns[25] + " = " + std::to_string(items_entry.augslot6visible)); - update_values.push_back(columns[26] + " = " + std::to_string(items_entry.augtype)); - update_values.push_back(columns[27] + " = " + std::to_string(items_entry.avoidance)); - update_values.push_back(columns[28] + " = " + std::to_string(items_entry.awis)); - update_values.push_back(columns[29] + " = " + std::to_string(items_entry.bagsize)); - update_values.push_back(columns[30] + " = " + std::to_string(items_entry.bagslots)); - update_values.push_back(columns[31] + " = " + std::to_string(items_entry.bagtype)); - update_values.push_back(columns[32] + " = " + std::to_string(items_entry.bagwr)); - update_values.push_back(columns[33] + " = " + std::to_string(items_entry.banedmgamt)); - update_values.push_back(columns[34] + " = " + std::to_string(items_entry.banedmgraceamt)); - update_values.push_back(columns[35] + " = " + std::to_string(items_entry.banedmgbody)); - update_values.push_back(columns[36] + " = " + std::to_string(items_entry.banedmgrace)); - update_values.push_back(columns[37] + " = " + std::to_string(items_entry.bardtype)); - update_values.push_back(columns[38] + " = " + std::to_string(items_entry.bardvalue)); - update_values.push_back(columns[39] + " = " + std::to_string(items_entry.book)); - update_values.push_back(columns[40] + " = " + std::to_string(items_entry.casttime)); - update_values.push_back(columns[41] + " = " + std::to_string(items_entry.casttime_)); - update_values.push_back(columns[42] + " = '" + EscapeString(items_entry.charmfile) + "'"); - update_values.push_back(columns[43] + " = '" + EscapeString(items_entry.charmfileid) + "'"); - update_values.push_back(columns[44] + " = " + std::to_string(items_entry.classes)); - update_values.push_back(columns[45] + " = " + std::to_string(items_entry.color)); - update_values.push_back(columns[46] + " = '" + EscapeString(items_entry.combateffects) + "'"); - update_values.push_back(columns[47] + " = " + std::to_string(items_entry.extradmgskill)); - update_values.push_back(columns[48] + " = " + std::to_string(items_entry.extradmgamt)); - update_values.push_back(columns[49] + " = " + std::to_string(items_entry.price)); - update_values.push_back(columns[50] + " = " + std::to_string(items_entry.cr)); - update_values.push_back(columns[51] + " = " + std::to_string(items_entry.damage)); - update_values.push_back(columns[52] + " = " + std::to_string(items_entry.damageshield)); - update_values.push_back(columns[53] + " = " + std::to_string(items_entry.deity)); - update_values.push_back(columns[54] + " = " + std::to_string(items_entry.delay)); - update_values.push_back(columns[55] + " = " + std::to_string(items_entry.augdistiller)); - update_values.push_back(columns[56] + " = " + std::to_string(items_entry.dotshielding)); - update_values.push_back(columns[57] + " = " + std::to_string(items_entry.dr)); - update_values.push_back(columns[58] + " = " + std::to_string(items_entry.clicktype)); - update_values.push_back(columns[59] + " = " + std::to_string(items_entry.clicklevel2)); - update_values.push_back(columns[60] + " = " + std::to_string(items_entry.elemdmgtype)); - update_values.push_back(columns[61] + " = " + std::to_string(items_entry.elemdmgamt)); - update_values.push_back(columns[62] + " = " + std::to_string(items_entry.endur)); - update_values.push_back(columns[63] + " = " + std::to_string(items_entry.factionamt1)); - update_values.push_back(columns[64] + " = " + std::to_string(items_entry.factionamt2)); - update_values.push_back(columns[65] + " = " + std::to_string(items_entry.factionamt3)); - update_values.push_back(columns[66] + " = " + std::to_string(items_entry.factionamt4)); - update_values.push_back(columns[67] + " = " + std::to_string(items_entry.factionmod1)); - update_values.push_back(columns[68] + " = " + std::to_string(items_entry.factionmod2)); - update_values.push_back(columns[69] + " = " + std::to_string(items_entry.factionmod3)); - update_values.push_back(columns[70] + " = " + std::to_string(items_entry.factionmod4)); - update_values.push_back(columns[71] + " = '" + EscapeString(items_entry.filename) + "'"); - update_values.push_back(columns[72] + " = " + std::to_string(items_entry.focuseffect)); - update_values.push_back(columns[73] + " = " + std::to_string(items_entry.fr)); - update_values.push_back(columns[74] + " = " + std::to_string(items_entry.fvnodrop)); - update_values.push_back(columns[75] + " = " + std::to_string(items_entry.haste)); - update_values.push_back(columns[76] + " = " + std::to_string(items_entry.clicklevel)); - update_values.push_back(columns[77] + " = " + std::to_string(items_entry.hp)); - update_values.push_back(columns[78] + " = " + std::to_string(items_entry.regen)); - update_values.push_back(columns[79] + " = " + std::to_string(items_entry.icon)); - update_values.push_back(columns[80] + " = '" + EscapeString(items_entry.idfile) + "'"); - update_values.push_back(columns[81] + " = " + std::to_string(items_entry.itemclass)); - update_values.push_back(columns[82] + " = " + std::to_string(items_entry.itemtype)); - update_values.push_back(columns[83] + " = " + std::to_string(items_entry.ldonprice)); - update_values.push_back(columns[84] + " = " + std::to_string(items_entry.ldontheme)); - update_values.push_back(columns[85] + " = " + std::to_string(items_entry.ldonsold)); - update_values.push_back(columns[86] + " = " + std::to_string(items_entry.light)); - update_values.push_back(columns[87] + " = '" + EscapeString(items_entry.lore) + "'"); - update_values.push_back(columns[88] + " = " + std::to_string(items_entry.loregroup)); - update_values.push_back(columns[89] + " = " + std::to_string(items_entry.magic)); - update_values.push_back(columns[90] + " = " + std::to_string(items_entry.mana)); - update_values.push_back(columns[91] + " = " + std::to_string(items_entry.manaregen)); - update_values.push_back(columns[92] + " = " + std::to_string(items_entry.enduranceregen)); - update_values.push_back(columns[93] + " = " + std::to_string(items_entry.material)); - update_values.push_back(columns[94] + " = " + std::to_string(items_entry.herosforgemodel)); - update_values.push_back(columns[95] + " = " + std::to_string(items_entry.maxcharges)); - update_values.push_back(columns[96] + " = " + std::to_string(items_entry.mr)); - update_values.push_back(columns[97] + " = " + std::to_string(items_entry.nodrop)); - update_values.push_back(columns[98] + " = " + std::to_string(items_entry.norent)); - update_values.push_back(columns[99] + " = " + std::to_string(items_entry.pendingloreflag)); - update_values.push_back(columns[100] + " = " + std::to_string(items_entry.pr)); - update_values.push_back(columns[101] + " = " + std::to_string(items_entry.procrate)); - update_values.push_back(columns[102] + " = " + std::to_string(items_entry.races)); - update_values.push_back(columns[103] + " = " + std::to_string(items_entry.range)); - update_values.push_back(columns[104] + " = " + std::to_string(items_entry.reclevel)); - update_values.push_back(columns[105] + " = " + std::to_string(items_entry.recskill)); - update_values.push_back(columns[106] + " = " + std::to_string(items_entry.reqlevel)); - update_values.push_back(columns[107] + " = " + std::to_string(items_entry.sellrate)); - update_values.push_back(columns[108] + " = " + std::to_string(items_entry.shielding)); - update_values.push_back(columns[109] + " = " + std::to_string(items_entry.size)); - update_values.push_back(columns[110] + " = " + std::to_string(items_entry.skillmodtype)); - update_values.push_back(columns[111] + " = " + std::to_string(items_entry.skillmodvalue)); - update_values.push_back(columns[112] + " = " + std::to_string(items_entry.slots)); - update_values.push_back(columns[113] + " = " + std::to_string(items_entry.clickeffect)); - update_values.push_back(columns[114] + " = " + std::to_string(items_entry.spellshield)); - update_values.push_back(columns[115] + " = " + std::to_string(items_entry.strikethrough)); - update_values.push_back(columns[116] + " = " + std::to_string(items_entry.stunresist)); - update_values.push_back(columns[117] + " = " + std::to_string(items_entry.summonedflag)); - update_values.push_back(columns[118] + " = " + std::to_string(items_entry.tradeskills)); - update_values.push_back(columns[119] + " = " + std::to_string(items_entry.favor)); - update_values.push_back(columns[120] + " = " + std::to_string(items_entry.weight)); - update_values.push_back(columns[121] + " = " + std::to_string(items_entry.UNK012)); - update_values.push_back(columns[122] + " = " + std::to_string(items_entry.UNK013)); - update_values.push_back(columns[123] + " = " + std::to_string(items_entry.benefitflag)); - update_values.push_back(columns[124] + " = " + std::to_string(items_entry.UNK054)); - update_values.push_back(columns[125] + " = " + std::to_string(items_entry.UNK059)); - update_values.push_back(columns[126] + " = " + std::to_string(items_entry.booktype)); - update_values.push_back(columns[127] + " = " + std::to_string(items_entry.recastdelay)); - update_values.push_back(columns[128] + " = " + std::to_string(items_entry.recasttype)); - update_values.push_back(columns[129] + " = " + std::to_string(items_entry.guildfavor)); - update_values.push_back(columns[130] + " = " + std::to_string(items_entry.UNK123)); - update_values.push_back(columns[131] + " = " + std::to_string(items_entry.UNK124)); - update_values.push_back(columns[132] + " = " + std::to_string(items_entry.attuneable)); - update_values.push_back(columns[133] + " = " + std::to_string(items_entry.nopet)); - update_values.push_back(columns[134] + " = '" + EscapeString(items_entry.updated) + "'"); - update_values.push_back(columns[135] + " = '" + EscapeString(items_entry.comment) + "'"); - update_values.push_back(columns[136] + " = " + std::to_string(items_entry.UNK127)); - update_values.push_back(columns[137] + " = " + std::to_string(items_entry.pointtype)); - update_values.push_back(columns[138] + " = " + std::to_string(items_entry.potionbelt)); - update_values.push_back(columns[139] + " = " + std::to_string(items_entry.potionbeltslots)); - update_values.push_back(columns[140] + " = " + std::to_string(items_entry.stacksize)); - update_values.push_back(columns[141] + " = " + std::to_string(items_entry.notransfer)); - update_values.push_back(columns[142] + " = " + std::to_string(items_entry.stackable)); - update_values.push_back(columns[143] + " = '" + EscapeString(items_entry.UNK134) + "'"); - update_values.push_back(columns[144] + " = " + std::to_string(items_entry.UNK137)); - update_values.push_back(columns[145] + " = " + std::to_string(items_entry.proceffect)); - update_values.push_back(columns[146] + " = " + std::to_string(items_entry.proctype)); - update_values.push_back(columns[147] + " = " + std::to_string(items_entry.proclevel2)); - update_values.push_back(columns[148] + " = " + std::to_string(items_entry.proclevel)); - update_values.push_back(columns[149] + " = " + std::to_string(items_entry.UNK142)); - update_values.push_back(columns[150] + " = " + std::to_string(items_entry.worneffect)); - update_values.push_back(columns[151] + " = " + std::to_string(items_entry.worntype)); - update_values.push_back(columns[152] + " = " + std::to_string(items_entry.wornlevel2)); - update_values.push_back(columns[153] + " = " + std::to_string(items_entry.wornlevel)); - update_values.push_back(columns[154] + " = " + std::to_string(items_entry.UNK147)); - update_values.push_back(columns[155] + " = " + std::to_string(items_entry.focustype)); - update_values.push_back(columns[156] + " = " + std::to_string(items_entry.focuslevel2)); - update_values.push_back(columns[157] + " = " + std::to_string(items_entry.focuslevel)); - update_values.push_back(columns[158] + " = " + std::to_string(items_entry.UNK152)); - update_values.push_back(columns[159] + " = " + std::to_string(items_entry.scrolleffect)); - update_values.push_back(columns[160] + " = " + std::to_string(items_entry.scrolltype)); - update_values.push_back(columns[161] + " = " + std::to_string(items_entry.scrolllevel2)); - update_values.push_back(columns[162] + " = " + std::to_string(items_entry.scrolllevel)); - update_values.push_back(columns[163] + " = " + std::to_string(items_entry.UNK157)); - update_values.push_back(columns[164] + " = '" + EscapeString(items_entry.serialized) + "'"); - update_values.push_back(columns[165] + " = '" + EscapeString(items_entry.verified) + "'"); - update_values.push_back(columns[166] + " = '" + EscapeString(items_entry.serialization) + "'"); - update_values.push_back(columns[167] + " = '" + EscapeString(items_entry.source) + "'"); - update_values.push_back(columns[168] + " = " + std::to_string(items_entry.UNK033)); - update_values.push_back(columns[169] + " = '" + EscapeString(items_entry.lorefile) + "'"); - update_values.push_back(columns[170] + " = " + std::to_string(items_entry.UNK014)); - update_values.push_back(columns[171] + " = " + std::to_string(items_entry.svcorruption)); - update_values.push_back(columns[172] + " = " + std::to_string(items_entry.skillmodmax)); - update_values.push_back(columns[173] + " = " + std::to_string(items_entry.UNK060)); - update_values.push_back(columns[174] + " = " + std::to_string(items_entry.augslot1unk2)); - update_values.push_back(columns[175] + " = " + std::to_string(items_entry.augslot2unk2)); - update_values.push_back(columns[176] + " = " + std::to_string(items_entry.augslot3unk2)); - update_values.push_back(columns[177] + " = " + std::to_string(items_entry.augslot4unk2)); - update_values.push_back(columns[178] + " = " + std::to_string(items_entry.augslot5unk2)); - update_values.push_back(columns[179] + " = " + std::to_string(items_entry.augslot6unk2)); - update_values.push_back(columns[180] + " = " + std::to_string(items_entry.UNK120)); - update_values.push_back(columns[181] + " = " + std::to_string(items_entry.UNK121)); - update_values.push_back(columns[182] + " = " + std::to_string(items_entry.questitemflag)); - update_values.push_back(columns[183] + " = '" + EscapeString(items_entry.UNK132) + "'"); - update_values.push_back(columns[184] + " = " + std::to_string(items_entry.clickunk5)); - update_values.push_back(columns[185] + " = '" + EscapeString(items_entry.clickunk6) + "'"); - update_values.push_back(columns[186] + " = " + std::to_string(items_entry.clickunk7)); - update_values.push_back(columns[187] + " = " + std::to_string(items_entry.procunk1)); - update_values.push_back(columns[188] + " = " + std::to_string(items_entry.procunk2)); - update_values.push_back(columns[189] + " = " + std::to_string(items_entry.procunk3)); - update_values.push_back(columns[190] + " = " + std::to_string(items_entry.procunk4)); - update_values.push_back(columns[191] + " = '" + EscapeString(items_entry.procunk6) + "'"); - update_values.push_back(columns[192] + " = " + std::to_string(items_entry.procunk7)); - update_values.push_back(columns[193] + " = " + std::to_string(items_entry.wornunk1)); - update_values.push_back(columns[194] + " = " + std::to_string(items_entry.wornunk2)); - update_values.push_back(columns[195] + " = " + std::to_string(items_entry.wornunk3)); - update_values.push_back(columns[196] + " = " + std::to_string(items_entry.wornunk4)); - update_values.push_back(columns[197] + " = " + std::to_string(items_entry.wornunk5)); - update_values.push_back(columns[198] + " = '" + EscapeString(items_entry.wornunk6) + "'"); - update_values.push_back(columns[199] + " = " + std::to_string(items_entry.wornunk7)); - update_values.push_back(columns[200] + " = " + std::to_string(items_entry.focusunk1)); - update_values.push_back(columns[201] + " = " + std::to_string(items_entry.focusunk2)); - update_values.push_back(columns[202] + " = " + std::to_string(items_entry.focusunk3)); - update_values.push_back(columns[203] + " = " + std::to_string(items_entry.focusunk4)); - update_values.push_back(columns[204] + " = " + std::to_string(items_entry.focusunk5)); - update_values.push_back(columns[205] + " = '" + EscapeString(items_entry.focusunk6) + "'"); - update_values.push_back(columns[206] + " = " + std::to_string(items_entry.focusunk7)); - update_values.push_back(columns[207] + " = " + std::to_string(items_entry.scrollunk1)); - update_values.push_back(columns[208] + " = " + std::to_string(items_entry.scrollunk2)); - update_values.push_back(columns[209] + " = " + std::to_string(items_entry.scrollunk3)); - update_values.push_back(columns[210] + " = " + std::to_string(items_entry.scrollunk4)); - update_values.push_back(columns[211] + " = " + std::to_string(items_entry.scrollunk5)); - update_values.push_back(columns[212] + " = '" + EscapeString(items_entry.scrollunk6) + "'"); - update_values.push_back(columns[213] + " = " + std::to_string(items_entry.scrollunk7)); - update_values.push_back(columns[214] + " = " + std::to_string(items_entry.UNK193)); - update_values.push_back(columns[215] + " = " + std::to_string(items_entry.purity)); - update_values.push_back(columns[216] + " = " + std::to_string(items_entry.evoitem)); - update_values.push_back(columns[217] + " = " + std::to_string(items_entry.evoid)); - update_values.push_back(columns[218] + " = " + std::to_string(items_entry.evolvinglevel)); - update_values.push_back(columns[219] + " = " + std::to_string(items_entry.evomax)); - update_values.push_back(columns[220] + " = '" + EscapeString(items_entry.clickname) + "'"); - update_values.push_back(columns[221] + " = '" + EscapeString(items_entry.procname) + "'"); - update_values.push_back(columns[222] + " = '" + EscapeString(items_entry.wornname) + "'"); - update_values.push_back(columns[223] + " = '" + EscapeString(items_entry.focusname) + "'"); - update_values.push_back(columns[224] + " = '" + EscapeString(items_entry.scrollname) + "'"); - update_values.push_back(columns[225] + " = " + std::to_string(items_entry.dsmitigation)); - update_values.push_back(columns[226] + " = " + std::to_string(items_entry.heroic_str)); - update_values.push_back(columns[227] + " = " + std::to_string(items_entry.heroic_int)); - update_values.push_back(columns[228] + " = " + std::to_string(items_entry.heroic_wis)); - update_values.push_back(columns[229] + " = " + std::to_string(items_entry.heroic_agi)); - update_values.push_back(columns[230] + " = " + std::to_string(items_entry.heroic_dex)); - update_values.push_back(columns[231] + " = " + std::to_string(items_entry.heroic_sta)); - update_values.push_back(columns[232] + " = " + std::to_string(items_entry.heroic_cha)); - update_values.push_back(columns[233] + " = " + std::to_string(items_entry.heroic_pr)); - update_values.push_back(columns[234] + " = " + std::to_string(items_entry.heroic_dr)); - update_values.push_back(columns[235] + " = " + std::to_string(items_entry.heroic_fr)); - update_values.push_back(columns[236] + " = " + std::to_string(items_entry.heroic_cr)); - update_values.push_back(columns[237] + " = " + std::to_string(items_entry.heroic_mr)); - update_values.push_back(columns[238] + " = " + std::to_string(items_entry.heroic_svcorrup)); - update_values.push_back(columns[239] + " = " + std::to_string(items_entry.healamt)); - update_values.push_back(columns[240] + " = " + std::to_string(items_entry.spelldmg)); - update_values.push_back(columns[241] + " = " + std::to_string(items_entry.clairvoyance)); - update_values.push_back(columns[242] + " = " + std::to_string(items_entry.backstabdmg)); - update_values.push_back(columns[243] + " = '" + EscapeString(items_entry.created) + "'"); - update_values.push_back(columns[244] + " = " + std::to_string(items_entry.elitematerial)); - update_values.push_back(columns[245] + " = " + std::to_string(items_entry.ldonsellbackrate)); - update_values.push_back(columns[246] + " = " + std::to_string(items_entry.scriptfileid)); - update_values.push_back(columns[247] + " = " + std::to_string(items_entry.expendablearrow)); - update_values.push_back(columns[248] + " = " + std::to_string(items_entry.powersourcecapacity)); - update_values.push_back(columns[249] + " = " + std::to_string(items_entry.bardeffect)); - update_values.push_back(columns[250] + " = " + std::to_string(items_entry.bardeffecttype)); - update_values.push_back(columns[251] + " = " + std::to_string(items_entry.bardlevel2)); - update_values.push_back(columns[252] + " = " + std::to_string(items_entry.bardlevel)); - update_values.push_back(columns[253] + " = " + std::to_string(items_entry.bardunk1)); - update_values.push_back(columns[254] + " = " + std::to_string(items_entry.bardunk2)); - update_values.push_back(columns[255] + " = " + std::to_string(items_entry.bardunk3)); - update_values.push_back(columns[256] + " = " + std::to_string(items_entry.bardunk4)); - update_values.push_back(columns[257] + " = " + std::to_string(items_entry.bardunk5)); - update_values.push_back(columns[258] + " = '" + EscapeString(items_entry.bardname) + "'"); - update_values.push_back(columns[259] + " = " + std::to_string(items_entry.bardunk7)); - update_values.push_back(columns[260] + " = " + std::to_string(items_entry.UNK214)); - update_values.push_back(columns[261] + " = " + std::to_string(items_entry.UNK219)); - update_values.push_back(columns[262] + " = " + std::to_string(items_entry.UNK220)); - update_values.push_back(columns[263] + " = " + std::to_string(items_entry.UNK221)); - update_values.push_back(columns[264] + " = " + std::to_string(items_entry.heirloom)); - update_values.push_back(columns[265] + " = " + std::to_string(items_entry.UNK223)); - update_values.push_back(columns[266] + " = " + std::to_string(items_entry.UNK224)); - update_values.push_back(columns[267] + " = " + std::to_string(items_entry.UNK225)); - update_values.push_back(columns[268] + " = " + std::to_string(items_entry.UNK226)); - update_values.push_back(columns[269] + " = " + std::to_string(items_entry.UNK227)); - update_values.push_back(columns[270] + " = " + std::to_string(items_entry.UNK228)); - update_values.push_back(columns[271] + " = " + std::to_string(items_entry.UNK229)); - update_values.push_back(columns[272] + " = " + std::to_string(items_entry.UNK230)); - update_values.push_back(columns[273] + " = " + std::to_string(items_entry.UNK231)); - update_values.push_back(columns[274] + " = " + std::to_string(items_entry.UNK232)); - update_values.push_back(columns[275] + " = " + std::to_string(items_entry.UNK233)); - update_values.push_back(columns[276] + " = " + std::to_string(items_entry.UNK234)); - update_values.push_back(columns[277] + " = " + std::to_string(items_entry.placeable)); - update_values.push_back(columns[278] + " = " + std::to_string(items_entry.UNK236)); - update_values.push_back(columns[279] + " = " + std::to_string(items_entry.UNK237)); - update_values.push_back(columns[280] + " = " + std::to_string(items_entry.UNK238)); - update_values.push_back(columns[281] + " = " + std::to_string(items_entry.UNK239)); - update_values.push_back(columns[282] + " = " + std::to_string(items_entry.UNK240)); - update_values.push_back(columns[283] + " = " + std::to_string(items_entry.UNK241)); - update_values.push_back(columns[284] + " = " + std::to_string(items_entry.epicitem)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - items_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Items InsertOne( - Items items_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(items_entry.minstatus)); - insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); - insert_values.push_back(std::to_string(items_entry.aagi)); - insert_values.push_back(std::to_string(items_entry.ac)); - insert_values.push_back(std::to_string(items_entry.accuracy)); - insert_values.push_back(std::to_string(items_entry.acha)); - insert_values.push_back(std::to_string(items_entry.adex)); - insert_values.push_back(std::to_string(items_entry.aint)); - insert_values.push_back(std::to_string(items_entry.artifactflag)); - insert_values.push_back(std::to_string(items_entry.asta)); - insert_values.push_back(std::to_string(items_entry.astr)); - insert_values.push_back(std::to_string(items_entry.attack)); - insert_values.push_back(std::to_string(items_entry.augrestrict)); - insert_values.push_back(std::to_string(items_entry.augslot1type)); - insert_values.push_back(std::to_string(items_entry.augslot1visible)); - insert_values.push_back(std::to_string(items_entry.augslot2type)); - insert_values.push_back(std::to_string(items_entry.augslot2visible)); - insert_values.push_back(std::to_string(items_entry.augslot3type)); - insert_values.push_back(std::to_string(items_entry.augslot3visible)); - insert_values.push_back(std::to_string(items_entry.augslot4type)); - insert_values.push_back(std::to_string(items_entry.augslot4visible)); - insert_values.push_back(std::to_string(items_entry.augslot5type)); - insert_values.push_back(std::to_string(items_entry.augslot5visible)); - insert_values.push_back(std::to_string(items_entry.augslot6type)); - insert_values.push_back(std::to_string(items_entry.augslot6visible)); - insert_values.push_back(std::to_string(items_entry.augtype)); - insert_values.push_back(std::to_string(items_entry.avoidance)); - insert_values.push_back(std::to_string(items_entry.awis)); - insert_values.push_back(std::to_string(items_entry.bagsize)); - insert_values.push_back(std::to_string(items_entry.bagslots)); - insert_values.push_back(std::to_string(items_entry.bagtype)); - insert_values.push_back(std::to_string(items_entry.bagwr)); - insert_values.push_back(std::to_string(items_entry.banedmgamt)); - insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); - insert_values.push_back(std::to_string(items_entry.banedmgbody)); - insert_values.push_back(std::to_string(items_entry.banedmgrace)); - insert_values.push_back(std::to_string(items_entry.bardtype)); - insert_values.push_back(std::to_string(items_entry.bardvalue)); - insert_values.push_back(std::to_string(items_entry.book)); - insert_values.push_back(std::to_string(items_entry.casttime)); - insert_values.push_back(std::to_string(items_entry.casttime_)); - insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); - insert_values.push_back(std::to_string(items_entry.classes)); - insert_values.push_back(std::to_string(items_entry.color)); - insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); - insert_values.push_back(std::to_string(items_entry.extradmgskill)); - insert_values.push_back(std::to_string(items_entry.extradmgamt)); - insert_values.push_back(std::to_string(items_entry.price)); - insert_values.push_back(std::to_string(items_entry.cr)); - insert_values.push_back(std::to_string(items_entry.damage)); - insert_values.push_back(std::to_string(items_entry.damageshield)); - insert_values.push_back(std::to_string(items_entry.deity)); - insert_values.push_back(std::to_string(items_entry.delay)); - insert_values.push_back(std::to_string(items_entry.augdistiller)); - insert_values.push_back(std::to_string(items_entry.dotshielding)); - insert_values.push_back(std::to_string(items_entry.dr)); - insert_values.push_back(std::to_string(items_entry.clicktype)); - insert_values.push_back(std::to_string(items_entry.clicklevel2)); - insert_values.push_back(std::to_string(items_entry.elemdmgtype)); - insert_values.push_back(std::to_string(items_entry.elemdmgamt)); - insert_values.push_back(std::to_string(items_entry.endur)); - insert_values.push_back(std::to_string(items_entry.factionamt1)); - insert_values.push_back(std::to_string(items_entry.factionamt2)); - insert_values.push_back(std::to_string(items_entry.factionamt3)); - insert_values.push_back(std::to_string(items_entry.factionamt4)); - insert_values.push_back(std::to_string(items_entry.factionmod1)); - insert_values.push_back(std::to_string(items_entry.factionmod2)); - insert_values.push_back(std::to_string(items_entry.factionmod3)); - insert_values.push_back(std::to_string(items_entry.factionmod4)); - insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); - insert_values.push_back(std::to_string(items_entry.focuseffect)); - insert_values.push_back(std::to_string(items_entry.fr)); - insert_values.push_back(std::to_string(items_entry.fvnodrop)); - insert_values.push_back(std::to_string(items_entry.haste)); - insert_values.push_back(std::to_string(items_entry.clicklevel)); - insert_values.push_back(std::to_string(items_entry.hp)); - insert_values.push_back(std::to_string(items_entry.regen)); - insert_values.push_back(std::to_string(items_entry.icon)); - insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); - insert_values.push_back(std::to_string(items_entry.itemclass)); - insert_values.push_back(std::to_string(items_entry.itemtype)); - insert_values.push_back(std::to_string(items_entry.ldonprice)); - insert_values.push_back(std::to_string(items_entry.ldontheme)); - insert_values.push_back(std::to_string(items_entry.ldonsold)); - insert_values.push_back(std::to_string(items_entry.light)); - insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); - insert_values.push_back(std::to_string(items_entry.loregroup)); - insert_values.push_back(std::to_string(items_entry.magic)); - insert_values.push_back(std::to_string(items_entry.mana)); - insert_values.push_back(std::to_string(items_entry.manaregen)); - insert_values.push_back(std::to_string(items_entry.enduranceregen)); - insert_values.push_back(std::to_string(items_entry.material)); - insert_values.push_back(std::to_string(items_entry.herosforgemodel)); - insert_values.push_back(std::to_string(items_entry.maxcharges)); - insert_values.push_back(std::to_string(items_entry.mr)); - insert_values.push_back(std::to_string(items_entry.nodrop)); - insert_values.push_back(std::to_string(items_entry.norent)); - insert_values.push_back(std::to_string(items_entry.pendingloreflag)); - insert_values.push_back(std::to_string(items_entry.pr)); - insert_values.push_back(std::to_string(items_entry.procrate)); - insert_values.push_back(std::to_string(items_entry.races)); - insert_values.push_back(std::to_string(items_entry.range)); - insert_values.push_back(std::to_string(items_entry.reclevel)); - insert_values.push_back(std::to_string(items_entry.recskill)); - insert_values.push_back(std::to_string(items_entry.reqlevel)); - insert_values.push_back(std::to_string(items_entry.sellrate)); - insert_values.push_back(std::to_string(items_entry.shielding)); - insert_values.push_back(std::to_string(items_entry.size)); - insert_values.push_back(std::to_string(items_entry.skillmodtype)); - insert_values.push_back(std::to_string(items_entry.skillmodvalue)); - insert_values.push_back(std::to_string(items_entry.slots)); - insert_values.push_back(std::to_string(items_entry.clickeffect)); - insert_values.push_back(std::to_string(items_entry.spellshield)); - insert_values.push_back(std::to_string(items_entry.strikethrough)); - insert_values.push_back(std::to_string(items_entry.stunresist)); - insert_values.push_back(std::to_string(items_entry.summonedflag)); - insert_values.push_back(std::to_string(items_entry.tradeskills)); - insert_values.push_back(std::to_string(items_entry.favor)); - insert_values.push_back(std::to_string(items_entry.weight)); - insert_values.push_back(std::to_string(items_entry.UNK012)); - insert_values.push_back(std::to_string(items_entry.UNK013)); - insert_values.push_back(std::to_string(items_entry.benefitflag)); - insert_values.push_back(std::to_string(items_entry.UNK054)); - insert_values.push_back(std::to_string(items_entry.UNK059)); - insert_values.push_back(std::to_string(items_entry.booktype)); - insert_values.push_back(std::to_string(items_entry.recastdelay)); - insert_values.push_back(std::to_string(items_entry.recasttype)); - insert_values.push_back(std::to_string(items_entry.guildfavor)); - insert_values.push_back(std::to_string(items_entry.UNK123)); - insert_values.push_back(std::to_string(items_entry.UNK124)); - insert_values.push_back(std::to_string(items_entry.attuneable)); - insert_values.push_back(std::to_string(items_entry.nopet)); - insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK127)); - insert_values.push_back(std::to_string(items_entry.pointtype)); - insert_values.push_back(std::to_string(items_entry.potionbelt)); - insert_values.push_back(std::to_string(items_entry.potionbeltslots)); - insert_values.push_back(std::to_string(items_entry.stacksize)); - insert_values.push_back(std::to_string(items_entry.notransfer)); - insert_values.push_back(std::to_string(items_entry.stackable)); - insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK137)); - insert_values.push_back(std::to_string(items_entry.proceffect)); - insert_values.push_back(std::to_string(items_entry.proctype)); - insert_values.push_back(std::to_string(items_entry.proclevel2)); - insert_values.push_back(std::to_string(items_entry.proclevel)); - insert_values.push_back(std::to_string(items_entry.UNK142)); - insert_values.push_back(std::to_string(items_entry.worneffect)); - insert_values.push_back(std::to_string(items_entry.worntype)); - insert_values.push_back(std::to_string(items_entry.wornlevel2)); - insert_values.push_back(std::to_string(items_entry.wornlevel)); - insert_values.push_back(std::to_string(items_entry.UNK147)); - insert_values.push_back(std::to_string(items_entry.focustype)); - insert_values.push_back(std::to_string(items_entry.focuslevel2)); - insert_values.push_back(std::to_string(items_entry.focuslevel)); - insert_values.push_back(std::to_string(items_entry.UNK152)); - insert_values.push_back(std::to_string(items_entry.scrolleffect)); - insert_values.push_back(std::to_string(items_entry.scrolltype)); - insert_values.push_back(std::to_string(items_entry.scrolllevel2)); - insert_values.push_back(std::to_string(items_entry.scrolllevel)); - insert_values.push_back(std::to_string(items_entry.UNK157)); - insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK033)); - insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK014)); - insert_values.push_back(std::to_string(items_entry.svcorruption)); - insert_values.push_back(std::to_string(items_entry.skillmodmax)); - insert_values.push_back(std::to_string(items_entry.UNK060)); - insert_values.push_back(std::to_string(items_entry.augslot1unk2)); - insert_values.push_back(std::to_string(items_entry.augslot2unk2)); - insert_values.push_back(std::to_string(items_entry.augslot3unk2)); - insert_values.push_back(std::to_string(items_entry.augslot4unk2)); - insert_values.push_back(std::to_string(items_entry.augslot5unk2)); - insert_values.push_back(std::to_string(items_entry.augslot6unk2)); - insert_values.push_back(std::to_string(items_entry.UNK120)); - insert_values.push_back(std::to_string(items_entry.UNK121)); - insert_values.push_back(std::to_string(items_entry.questitemflag)); - insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); - insert_values.push_back(std::to_string(items_entry.clickunk5)); - insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.clickunk7)); - insert_values.push_back(std::to_string(items_entry.procunk1)); - insert_values.push_back(std::to_string(items_entry.procunk2)); - insert_values.push_back(std::to_string(items_entry.procunk3)); - insert_values.push_back(std::to_string(items_entry.procunk4)); - insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.procunk7)); - insert_values.push_back(std::to_string(items_entry.wornunk1)); - insert_values.push_back(std::to_string(items_entry.wornunk2)); - insert_values.push_back(std::to_string(items_entry.wornunk3)); - insert_values.push_back(std::to_string(items_entry.wornunk4)); - insert_values.push_back(std::to_string(items_entry.wornunk5)); - insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.wornunk7)); - insert_values.push_back(std::to_string(items_entry.focusunk1)); - insert_values.push_back(std::to_string(items_entry.focusunk2)); - insert_values.push_back(std::to_string(items_entry.focusunk3)); - insert_values.push_back(std::to_string(items_entry.focusunk4)); - insert_values.push_back(std::to_string(items_entry.focusunk5)); - insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.focusunk7)); - insert_values.push_back(std::to_string(items_entry.scrollunk1)); - insert_values.push_back(std::to_string(items_entry.scrollunk2)); - insert_values.push_back(std::to_string(items_entry.scrollunk3)); - insert_values.push_back(std::to_string(items_entry.scrollunk4)); - insert_values.push_back(std::to_string(items_entry.scrollunk5)); - insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.scrollunk7)); - insert_values.push_back(std::to_string(items_entry.UNK193)); - insert_values.push_back(std::to_string(items_entry.purity)); - insert_values.push_back(std::to_string(items_entry.evoitem)); - insert_values.push_back(std::to_string(items_entry.evoid)); - insert_values.push_back(std::to_string(items_entry.evolvinglevel)); - insert_values.push_back(std::to_string(items_entry.evomax)); - insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); - insert_values.push_back(std::to_string(items_entry.dsmitigation)); - insert_values.push_back(std::to_string(items_entry.heroic_str)); - insert_values.push_back(std::to_string(items_entry.heroic_int)); - insert_values.push_back(std::to_string(items_entry.heroic_wis)); - insert_values.push_back(std::to_string(items_entry.heroic_agi)); - insert_values.push_back(std::to_string(items_entry.heroic_dex)); - insert_values.push_back(std::to_string(items_entry.heroic_sta)); - insert_values.push_back(std::to_string(items_entry.heroic_cha)); - insert_values.push_back(std::to_string(items_entry.heroic_pr)); - insert_values.push_back(std::to_string(items_entry.heroic_dr)); - insert_values.push_back(std::to_string(items_entry.heroic_fr)); - insert_values.push_back(std::to_string(items_entry.heroic_cr)); - insert_values.push_back(std::to_string(items_entry.heroic_mr)); - insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); - insert_values.push_back(std::to_string(items_entry.healamt)); - insert_values.push_back(std::to_string(items_entry.spelldmg)); - insert_values.push_back(std::to_string(items_entry.clairvoyance)); - insert_values.push_back(std::to_string(items_entry.backstabdmg)); - insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); - insert_values.push_back(std::to_string(items_entry.elitematerial)); - insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); - insert_values.push_back(std::to_string(items_entry.scriptfileid)); - insert_values.push_back(std::to_string(items_entry.expendablearrow)); - insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); - insert_values.push_back(std::to_string(items_entry.bardeffect)); - insert_values.push_back(std::to_string(items_entry.bardeffecttype)); - insert_values.push_back(std::to_string(items_entry.bardlevel2)); - insert_values.push_back(std::to_string(items_entry.bardlevel)); - insert_values.push_back(std::to_string(items_entry.bardunk1)); - insert_values.push_back(std::to_string(items_entry.bardunk2)); - insert_values.push_back(std::to_string(items_entry.bardunk3)); - insert_values.push_back(std::to_string(items_entry.bardunk4)); - insert_values.push_back(std::to_string(items_entry.bardunk5)); - insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); - insert_values.push_back(std::to_string(items_entry.bardunk7)); - insert_values.push_back(std::to_string(items_entry.UNK214)); - insert_values.push_back(std::to_string(items_entry.UNK219)); - insert_values.push_back(std::to_string(items_entry.UNK220)); - insert_values.push_back(std::to_string(items_entry.UNK221)); - insert_values.push_back(std::to_string(items_entry.heirloom)); - insert_values.push_back(std::to_string(items_entry.UNK223)); - insert_values.push_back(std::to_string(items_entry.UNK224)); - insert_values.push_back(std::to_string(items_entry.UNK225)); - insert_values.push_back(std::to_string(items_entry.UNK226)); - insert_values.push_back(std::to_string(items_entry.UNK227)); - insert_values.push_back(std::to_string(items_entry.UNK228)); - insert_values.push_back(std::to_string(items_entry.UNK229)); - insert_values.push_back(std::to_string(items_entry.UNK230)); - insert_values.push_back(std::to_string(items_entry.UNK231)); - insert_values.push_back(std::to_string(items_entry.UNK232)); - insert_values.push_back(std::to_string(items_entry.UNK233)); - insert_values.push_back(std::to_string(items_entry.UNK234)); - insert_values.push_back(std::to_string(items_entry.placeable)); - insert_values.push_back(std::to_string(items_entry.UNK236)); - insert_values.push_back(std::to_string(items_entry.UNK237)); - insert_values.push_back(std::to_string(items_entry.UNK238)); - insert_values.push_back(std::to_string(items_entry.UNK239)); - insert_values.push_back(std::to_string(items_entry.UNK240)); - insert_values.push_back(std::to_string(items_entry.UNK241)); - insert_values.push_back(std::to_string(items_entry.epicitem)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - items_entry.id = results.LastInsertedID(); - return items_entry; - } - - items_entry = ItemsRepository::NewEntity(); - - return items_entry; - } - - static int InsertMany( - std::vector items_entries - ) - { - std::vector insert_chunks; - - for (auto &items_entry: items_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(items_entry.minstatus)); - insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); - insert_values.push_back(std::to_string(items_entry.aagi)); - insert_values.push_back(std::to_string(items_entry.ac)); - insert_values.push_back(std::to_string(items_entry.accuracy)); - insert_values.push_back(std::to_string(items_entry.acha)); - insert_values.push_back(std::to_string(items_entry.adex)); - insert_values.push_back(std::to_string(items_entry.aint)); - insert_values.push_back(std::to_string(items_entry.artifactflag)); - insert_values.push_back(std::to_string(items_entry.asta)); - insert_values.push_back(std::to_string(items_entry.astr)); - insert_values.push_back(std::to_string(items_entry.attack)); - insert_values.push_back(std::to_string(items_entry.augrestrict)); - insert_values.push_back(std::to_string(items_entry.augslot1type)); - insert_values.push_back(std::to_string(items_entry.augslot1visible)); - insert_values.push_back(std::to_string(items_entry.augslot2type)); - insert_values.push_back(std::to_string(items_entry.augslot2visible)); - insert_values.push_back(std::to_string(items_entry.augslot3type)); - insert_values.push_back(std::to_string(items_entry.augslot3visible)); - insert_values.push_back(std::to_string(items_entry.augslot4type)); - insert_values.push_back(std::to_string(items_entry.augslot4visible)); - insert_values.push_back(std::to_string(items_entry.augslot5type)); - insert_values.push_back(std::to_string(items_entry.augslot5visible)); - insert_values.push_back(std::to_string(items_entry.augslot6type)); - insert_values.push_back(std::to_string(items_entry.augslot6visible)); - insert_values.push_back(std::to_string(items_entry.augtype)); - insert_values.push_back(std::to_string(items_entry.avoidance)); - insert_values.push_back(std::to_string(items_entry.awis)); - insert_values.push_back(std::to_string(items_entry.bagsize)); - insert_values.push_back(std::to_string(items_entry.bagslots)); - insert_values.push_back(std::to_string(items_entry.bagtype)); - insert_values.push_back(std::to_string(items_entry.bagwr)); - insert_values.push_back(std::to_string(items_entry.banedmgamt)); - insert_values.push_back(std::to_string(items_entry.banedmgraceamt)); - insert_values.push_back(std::to_string(items_entry.banedmgbody)); - insert_values.push_back(std::to_string(items_entry.banedmgrace)); - insert_values.push_back(std::to_string(items_entry.bardtype)); - insert_values.push_back(std::to_string(items_entry.bardvalue)); - insert_values.push_back(std::to_string(items_entry.book)); - insert_values.push_back(std::to_string(items_entry.casttime)); - insert_values.push_back(std::to_string(items_entry.casttime_)); - insert_values.push_back("'" + EscapeString(items_entry.charmfile) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.charmfileid) + "'"); - insert_values.push_back(std::to_string(items_entry.classes)); - insert_values.push_back(std::to_string(items_entry.color)); - insert_values.push_back("'" + EscapeString(items_entry.combateffects) + "'"); - insert_values.push_back(std::to_string(items_entry.extradmgskill)); - insert_values.push_back(std::to_string(items_entry.extradmgamt)); - insert_values.push_back(std::to_string(items_entry.price)); - insert_values.push_back(std::to_string(items_entry.cr)); - insert_values.push_back(std::to_string(items_entry.damage)); - insert_values.push_back(std::to_string(items_entry.damageshield)); - insert_values.push_back(std::to_string(items_entry.deity)); - insert_values.push_back(std::to_string(items_entry.delay)); - insert_values.push_back(std::to_string(items_entry.augdistiller)); - insert_values.push_back(std::to_string(items_entry.dotshielding)); - insert_values.push_back(std::to_string(items_entry.dr)); - insert_values.push_back(std::to_string(items_entry.clicktype)); - insert_values.push_back(std::to_string(items_entry.clicklevel2)); - insert_values.push_back(std::to_string(items_entry.elemdmgtype)); - insert_values.push_back(std::to_string(items_entry.elemdmgamt)); - insert_values.push_back(std::to_string(items_entry.endur)); - insert_values.push_back(std::to_string(items_entry.factionamt1)); - insert_values.push_back(std::to_string(items_entry.factionamt2)); - insert_values.push_back(std::to_string(items_entry.factionamt3)); - insert_values.push_back(std::to_string(items_entry.factionamt4)); - insert_values.push_back(std::to_string(items_entry.factionmod1)); - insert_values.push_back(std::to_string(items_entry.factionmod2)); - insert_values.push_back(std::to_string(items_entry.factionmod3)); - insert_values.push_back(std::to_string(items_entry.factionmod4)); - insert_values.push_back("'" + EscapeString(items_entry.filename) + "'"); - insert_values.push_back(std::to_string(items_entry.focuseffect)); - insert_values.push_back(std::to_string(items_entry.fr)); - insert_values.push_back(std::to_string(items_entry.fvnodrop)); - insert_values.push_back(std::to_string(items_entry.haste)); - insert_values.push_back(std::to_string(items_entry.clicklevel)); - insert_values.push_back(std::to_string(items_entry.hp)); - insert_values.push_back(std::to_string(items_entry.regen)); - insert_values.push_back(std::to_string(items_entry.icon)); - insert_values.push_back("'" + EscapeString(items_entry.idfile) + "'"); - insert_values.push_back(std::to_string(items_entry.itemclass)); - insert_values.push_back(std::to_string(items_entry.itemtype)); - insert_values.push_back(std::to_string(items_entry.ldonprice)); - insert_values.push_back(std::to_string(items_entry.ldontheme)); - insert_values.push_back(std::to_string(items_entry.ldonsold)); - insert_values.push_back(std::to_string(items_entry.light)); - insert_values.push_back("'" + EscapeString(items_entry.lore) + "'"); - insert_values.push_back(std::to_string(items_entry.loregroup)); - insert_values.push_back(std::to_string(items_entry.magic)); - insert_values.push_back(std::to_string(items_entry.mana)); - insert_values.push_back(std::to_string(items_entry.manaregen)); - insert_values.push_back(std::to_string(items_entry.enduranceregen)); - insert_values.push_back(std::to_string(items_entry.material)); - insert_values.push_back(std::to_string(items_entry.herosforgemodel)); - insert_values.push_back(std::to_string(items_entry.maxcharges)); - insert_values.push_back(std::to_string(items_entry.mr)); - insert_values.push_back(std::to_string(items_entry.nodrop)); - insert_values.push_back(std::to_string(items_entry.norent)); - insert_values.push_back(std::to_string(items_entry.pendingloreflag)); - insert_values.push_back(std::to_string(items_entry.pr)); - insert_values.push_back(std::to_string(items_entry.procrate)); - insert_values.push_back(std::to_string(items_entry.races)); - insert_values.push_back(std::to_string(items_entry.range)); - insert_values.push_back(std::to_string(items_entry.reclevel)); - insert_values.push_back(std::to_string(items_entry.recskill)); - insert_values.push_back(std::to_string(items_entry.reqlevel)); - insert_values.push_back(std::to_string(items_entry.sellrate)); - insert_values.push_back(std::to_string(items_entry.shielding)); - insert_values.push_back(std::to_string(items_entry.size)); - insert_values.push_back(std::to_string(items_entry.skillmodtype)); - insert_values.push_back(std::to_string(items_entry.skillmodvalue)); - insert_values.push_back(std::to_string(items_entry.slots)); - insert_values.push_back(std::to_string(items_entry.clickeffect)); - insert_values.push_back(std::to_string(items_entry.spellshield)); - insert_values.push_back(std::to_string(items_entry.strikethrough)); - insert_values.push_back(std::to_string(items_entry.stunresist)); - insert_values.push_back(std::to_string(items_entry.summonedflag)); - insert_values.push_back(std::to_string(items_entry.tradeskills)); - insert_values.push_back(std::to_string(items_entry.favor)); - insert_values.push_back(std::to_string(items_entry.weight)); - insert_values.push_back(std::to_string(items_entry.UNK012)); - insert_values.push_back(std::to_string(items_entry.UNK013)); - insert_values.push_back(std::to_string(items_entry.benefitflag)); - insert_values.push_back(std::to_string(items_entry.UNK054)); - insert_values.push_back(std::to_string(items_entry.UNK059)); - insert_values.push_back(std::to_string(items_entry.booktype)); - insert_values.push_back(std::to_string(items_entry.recastdelay)); - insert_values.push_back(std::to_string(items_entry.recasttype)); - insert_values.push_back(std::to_string(items_entry.guildfavor)); - insert_values.push_back(std::to_string(items_entry.UNK123)); - insert_values.push_back(std::to_string(items_entry.UNK124)); - insert_values.push_back(std::to_string(items_entry.attuneable)); - insert_values.push_back(std::to_string(items_entry.nopet)); - insert_values.push_back("'" + EscapeString(items_entry.updated) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.comment) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK127)); - insert_values.push_back(std::to_string(items_entry.pointtype)); - insert_values.push_back(std::to_string(items_entry.potionbelt)); - insert_values.push_back(std::to_string(items_entry.potionbeltslots)); - insert_values.push_back(std::to_string(items_entry.stacksize)); - insert_values.push_back(std::to_string(items_entry.notransfer)); - insert_values.push_back(std::to_string(items_entry.stackable)); - insert_values.push_back("'" + EscapeString(items_entry.UNK134) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK137)); - insert_values.push_back(std::to_string(items_entry.proceffect)); - insert_values.push_back(std::to_string(items_entry.proctype)); - insert_values.push_back(std::to_string(items_entry.proclevel2)); - insert_values.push_back(std::to_string(items_entry.proclevel)); - insert_values.push_back(std::to_string(items_entry.UNK142)); - insert_values.push_back(std::to_string(items_entry.worneffect)); - insert_values.push_back(std::to_string(items_entry.worntype)); - insert_values.push_back(std::to_string(items_entry.wornlevel2)); - insert_values.push_back(std::to_string(items_entry.wornlevel)); - insert_values.push_back(std::to_string(items_entry.UNK147)); - insert_values.push_back(std::to_string(items_entry.focustype)); - insert_values.push_back(std::to_string(items_entry.focuslevel2)); - insert_values.push_back(std::to_string(items_entry.focuslevel)); - insert_values.push_back(std::to_string(items_entry.UNK152)); - insert_values.push_back(std::to_string(items_entry.scrolleffect)); - insert_values.push_back(std::to_string(items_entry.scrolltype)); - insert_values.push_back(std::to_string(items_entry.scrolllevel2)); - insert_values.push_back(std::to_string(items_entry.scrolllevel)); - insert_values.push_back(std::to_string(items_entry.UNK157)); - insert_values.push_back("'" + EscapeString(items_entry.serialized) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.verified) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.serialization) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.source) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK033)); - insert_values.push_back("'" + EscapeString(items_entry.lorefile) + "'"); - insert_values.push_back(std::to_string(items_entry.UNK014)); - insert_values.push_back(std::to_string(items_entry.svcorruption)); - insert_values.push_back(std::to_string(items_entry.skillmodmax)); - insert_values.push_back(std::to_string(items_entry.UNK060)); - insert_values.push_back(std::to_string(items_entry.augslot1unk2)); - insert_values.push_back(std::to_string(items_entry.augslot2unk2)); - insert_values.push_back(std::to_string(items_entry.augslot3unk2)); - insert_values.push_back(std::to_string(items_entry.augslot4unk2)); - insert_values.push_back(std::to_string(items_entry.augslot5unk2)); - insert_values.push_back(std::to_string(items_entry.augslot6unk2)); - insert_values.push_back(std::to_string(items_entry.UNK120)); - insert_values.push_back(std::to_string(items_entry.UNK121)); - insert_values.push_back(std::to_string(items_entry.questitemflag)); - insert_values.push_back("'" + EscapeString(items_entry.UNK132) + "'"); - insert_values.push_back(std::to_string(items_entry.clickunk5)); - insert_values.push_back("'" + EscapeString(items_entry.clickunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.clickunk7)); - insert_values.push_back(std::to_string(items_entry.procunk1)); - insert_values.push_back(std::to_string(items_entry.procunk2)); - insert_values.push_back(std::to_string(items_entry.procunk3)); - insert_values.push_back(std::to_string(items_entry.procunk4)); - insert_values.push_back("'" + EscapeString(items_entry.procunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.procunk7)); - insert_values.push_back(std::to_string(items_entry.wornunk1)); - insert_values.push_back(std::to_string(items_entry.wornunk2)); - insert_values.push_back(std::to_string(items_entry.wornunk3)); - insert_values.push_back(std::to_string(items_entry.wornunk4)); - insert_values.push_back(std::to_string(items_entry.wornunk5)); - insert_values.push_back("'" + EscapeString(items_entry.wornunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.wornunk7)); - insert_values.push_back(std::to_string(items_entry.focusunk1)); - insert_values.push_back(std::to_string(items_entry.focusunk2)); - insert_values.push_back(std::to_string(items_entry.focusunk3)); - insert_values.push_back(std::to_string(items_entry.focusunk4)); - insert_values.push_back(std::to_string(items_entry.focusunk5)); - insert_values.push_back("'" + EscapeString(items_entry.focusunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.focusunk7)); - insert_values.push_back(std::to_string(items_entry.scrollunk1)); - insert_values.push_back(std::to_string(items_entry.scrollunk2)); - insert_values.push_back(std::to_string(items_entry.scrollunk3)); - insert_values.push_back(std::to_string(items_entry.scrollunk4)); - insert_values.push_back(std::to_string(items_entry.scrollunk5)); - insert_values.push_back("'" + EscapeString(items_entry.scrollunk6) + "'"); - insert_values.push_back(std::to_string(items_entry.scrollunk7)); - insert_values.push_back(std::to_string(items_entry.UNK193)); - insert_values.push_back(std::to_string(items_entry.purity)); - insert_values.push_back(std::to_string(items_entry.evoitem)); - insert_values.push_back(std::to_string(items_entry.evoid)); - insert_values.push_back(std::to_string(items_entry.evolvinglevel)); - insert_values.push_back(std::to_string(items_entry.evomax)); - insert_values.push_back("'" + EscapeString(items_entry.clickname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.procname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.wornname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.focusname) + "'"); - insert_values.push_back("'" + EscapeString(items_entry.scrollname) + "'"); - insert_values.push_back(std::to_string(items_entry.dsmitigation)); - insert_values.push_back(std::to_string(items_entry.heroic_str)); - insert_values.push_back(std::to_string(items_entry.heroic_int)); - insert_values.push_back(std::to_string(items_entry.heroic_wis)); - insert_values.push_back(std::to_string(items_entry.heroic_agi)); - insert_values.push_back(std::to_string(items_entry.heroic_dex)); - insert_values.push_back(std::to_string(items_entry.heroic_sta)); - insert_values.push_back(std::to_string(items_entry.heroic_cha)); - insert_values.push_back(std::to_string(items_entry.heroic_pr)); - insert_values.push_back(std::to_string(items_entry.heroic_dr)); - insert_values.push_back(std::to_string(items_entry.heroic_fr)); - insert_values.push_back(std::to_string(items_entry.heroic_cr)); - insert_values.push_back(std::to_string(items_entry.heroic_mr)); - insert_values.push_back(std::to_string(items_entry.heroic_svcorrup)); - insert_values.push_back(std::to_string(items_entry.healamt)); - insert_values.push_back(std::to_string(items_entry.spelldmg)); - insert_values.push_back(std::to_string(items_entry.clairvoyance)); - insert_values.push_back(std::to_string(items_entry.backstabdmg)); - insert_values.push_back("'" + EscapeString(items_entry.created) + "'"); - insert_values.push_back(std::to_string(items_entry.elitematerial)); - insert_values.push_back(std::to_string(items_entry.ldonsellbackrate)); - insert_values.push_back(std::to_string(items_entry.scriptfileid)); - insert_values.push_back(std::to_string(items_entry.expendablearrow)); - insert_values.push_back(std::to_string(items_entry.powersourcecapacity)); - insert_values.push_back(std::to_string(items_entry.bardeffect)); - insert_values.push_back(std::to_string(items_entry.bardeffecttype)); - insert_values.push_back(std::to_string(items_entry.bardlevel2)); - insert_values.push_back(std::to_string(items_entry.bardlevel)); - insert_values.push_back(std::to_string(items_entry.bardunk1)); - insert_values.push_back(std::to_string(items_entry.bardunk2)); - insert_values.push_back(std::to_string(items_entry.bardunk3)); - insert_values.push_back(std::to_string(items_entry.bardunk4)); - insert_values.push_back(std::to_string(items_entry.bardunk5)); - insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); - insert_values.push_back(std::to_string(items_entry.bardunk7)); - insert_values.push_back(std::to_string(items_entry.UNK214)); - insert_values.push_back(std::to_string(items_entry.UNK219)); - insert_values.push_back(std::to_string(items_entry.UNK220)); - insert_values.push_back(std::to_string(items_entry.UNK221)); - insert_values.push_back(std::to_string(items_entry.heirloom)); - insert_values.push_back(std::to_string(items_entry.UNK223)); - insert_values.push_back(std::to_string(items_entry.UNK224)); - insert_values.push_back(std::to_string(items_entry.UNK225)); - insert_values.push_back(std::to_string(items_entry.UNK226)); - insert_values.push_back(std::to_string(items_entry.UNK227)); - insert_values.push_back(std::to_string(items_entry.UNK228)); - insert_values.push_back(std::to_string(items_entry.UNK229)); - insert_values.push_back(std::to_string(items_entry.UNK230)); - insert_values.push_back(std::to_string(items_entry.UNK231)); - insert_values.push_back(std::to_string(items_entry.UNK232)); - insert_values.push_back(std::to_string(items_entry.UNK233)); - insert_values.push_back(std::to_string(items_entry.UNK234)); - insert_values.push_back(std::to_string(items_entry.placeable)); - insert_values.push_back(std::to_string(items_entry.UNK236)); - insert_values.push_back(std::to_string(items_entry.UNK237)); - insert_values.push_back(std::to_string(items_entry.UNK238)); - insert_values.push_back(std::to_string(items_entry.UNK239)); - insert_values.push_back(std::to_string(items_entry.UNK240)); - insert_values.push_back(std::to_string(items_entry.UNK241)); - insert_values.push_back(std::to_string(items_entry.epicitem)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Items entry{}; - - entry.id = atoi(row[0]); - entry.minstatus = atoi(row[1]); - entry.Name = row[2] ? row[2] : ""; - entry.aagi = atoi(row[3]); - entry.ac = atoi(row[4]); - entry.accuracy = atoi(row[5]); - entry.acha = atoi(row[6]); - entry.adex = atoi(row[7]); - entry.aint = atoi(row[8]); - entry.artifactflag = atoi(row[9]); - entry.asta = atoi(row[10]); - entry.astr = atoi(row[11]); - entry.attack = atoi(row[12]); - entry.augrestrict = atoi(row[13]); - entry.augslot1type = atoi(row[14]); - entry.augslot1visible = atoi(row[15]); - entry.augslot2type = atoi(row[16]); - entry.augslot2visible = atoi(row[17]); - entry.augslot3type = atoi(row[18]); - entry.augslot3visible = atoi(row[19]); - entry.augslot4type = atoi(row[20]); - entry.augslot4visible = atoi(row[21]); - entry.augslot5type = atoi(row[22]); - entry.augslot5visible = atoi(row[23]); - entry.augslot6type = atoi(row[24]); - entry.augslot6visible = atoi(row[25]); - entry.augtype = atoi(row[26]); - entry.avoidance = atoi(row[27]); - entry.awis = atoi(row[28]); - entry.bagsize = atoi(row[29]); - entry.bagslots = atoi(row[30]); - entry.bagtype = atoi(row[31]); - entry.bagwr = atoi(row[32]); - entry.banedmgamt = atoi(row[33]); - entry.banedmgraceamt = atoi(row[34]); - entry.banedmgbody = atoi(row[35]); - entry.banedmgrace = atoi(row[36]); - entry.bardtype = atoi(row[37]); - entry.bardvalue = atoi(row[38]); - entry.book = atoi(row[39]); - entry.casttime = atoi(row[40]); - entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42] ? row[42] : ""; - entry.charmfileid = row[43] ? row[43] : ""; - entry.classes = atoi(row[44]); - entry.color = atoi(row[45]); - entry.combateffects = row[46] ? row[46] : ""; - entry.extradmgskill = atoi(row[47]); - entry.extradmgamt = atoi(row[48]); - entry.price = atoi(row[49]); - entry.cr = atoi(row[50]); - entry.damage = atoi(row[51]); - entry.damageshield = atoi(row[52]); - entry.deity = atoi(row[53]); - entry.delay = atoi(row[54]); - entry.augdistiller = atoi(row[55]); - entry.dotshielding = atoi(row[56]); - entry.dr = atoi(row[57]); - entry.clicktype = atoi(row[58]); - entry.clicklevel2 = atoi(row[59]); - entry.elemdmgtype = atoi(row[60]); - entry.elemdmgamt = atoi(row[61]); - entry.endur = atoi(row[62]); - entry.factionamt1 = atoi(row[63]); - entry.factionamt2 = atoi(row[64]); - entry.factionamt3 = atoi(row[65]); - entry.factionamt4 = atoi(row[66]); - entry.factionmod1 = atoi(row[67]); - entry.factionmod2 = atoi(row[68]); - entry.factionmod3 = atoi(row[69]); - entry.factionmod4 = atoi(row[70]); - entry.filename = row[71] ? row[71] : ""; - entry.focuseffect = atoi(row[72]); - entry.fr = atoi(row[73]); - entry.fvnodrop = atoi(row[74]); - entry.haste = atoi(row[75]); - entry.clicklevel = atoi(row[76]); - entry.hp = atoi(row[77]); - entry.regen = atoi(row[78]); - entry.icon = atoi(row[79]); - entry.idfile = row[80] ? row[80] : ""; - entry.itemclass = atoi(row[81]); - entry.itemtype = atoi(row[82]); - entry.ldonprice = atoi(row[83]); - entry.ldontheme = atoi(row[84]); - entry.ldonsold = atoi(row[85]); - entry.light = atoi(row[86]); - entry.lore = row[87] ? row[87] : ""; - entry.loregroup = atoi(row[88]); - entry.magic = atoi(row[89]); - entry.mana = atoi(row[90]); - entry.manaregen = atoi(row[91]); - entry.enduranceregen = atoi(row[92]); - entry.material = atoi(row[93]); - entry.herosforgemodel = atoi(row[94]); - entry.maxcharges = atoi(row[95]); - entry.mr = atoi(row[96]); - entry.nodrop = atoi(row[97]); - entry.norent = atoi(row[98]); - entry.pendingloreflag = atoi(row[99]); - entry.pr = atoi(row[100]); - entry.procrate = atoi(row[101]); - entry.races = atoi(row[102]); - entry.range = atoi(row[103]); - entry.reclevel = atoi(row[104]); - entry.recskill = atoi(row[105]); - entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); - entry.shielding = atoi(row[108]); - entry.size = atoi(row[109]); - entry.skillmodtype = atoi(row[110]); - entry.skillmodvalue = atoi(row[111]); - entry.slots = atoi(row[112]); - entry.clickeffect = atoi(row[113]); - entry.spellshield = atoi(row[114]); - entry.strikethrough = atoi(row[115]); - entry.stunresist = atoi(row[116]); - entry.summonedflag = atoi(row[117]); - entry.tradeskills = atoi(row[118]); - entry.favor = atoi(row[119]); - entry.weight = atoi(row[120]); - entry.UNK012 = atoi(row[121]); - entry.UNK013 = atoi(row[122]); - entry.benefitflag = atoi(row[123]); - entry.UNK054 = atoi(row[124]); - entry.UNK059 = atoi(row[125]); - entry.booktype = atoi(row[126]); - entry.recastdelay = atoi(row[127]); - entry.recasttype = atoi(row[128]); - entry.guildfavor = atoi(row[129]); - entry.UNK123 = atoi(row[130]); - entry.UNK124 = atoi(row[131]); - entry.attuneable = atoi(row[132]); - entry.nopet = atoi(row[133]); - entry.updated = row[134] ? row[134] : ""; - entry.comment = row[135] ? row[135] : ""; - entry.UNK127 = atoi(row[136]); - entry.pointtype = atoi(row[137]); - entry.potionbelt = atoi(row[138]); - entry.potionbeltslots = atoi(row[139]); - entry.stacksize = atoi(row[140]); - entry.notransfer = atoi(row[141]); - entry.stackable = atoi(row[142]); - entry.UNK134 = row[143] ? row[143] : ""; - entry.UNK137 = atoi(row[144]); - entry.proceffect = atoi(row[145]); - entry.proctype = atoi(row[146]); - entry.proclevel2 = atoi(row[147]); - entry.proclevel = atoi(row[148]); - entry.UNK142 = atoi(row[149]); - entry.worneffect = atoi(row[150]); - entry.worntype = atoi(row[151]); - entry.wornlevel2 = atoi(row[152]); - entry.wornlevel = atoi(row[153]); - entry.UNK147 = atoi(row[154]); - entry.focustype = atoi(row[155]); - entry.focuslevel2 = atoi(row[156]); - entry.focuslevel = atoi(row[157]); - entry.UNK152 = atoi(row[158]); - entry.scrolleffect = atoi(row[159]); - entry.scrolltype = atoi(row[160]); - entry.scrolllevel2 = atoi(row[161]); - entry.scrolllevel = atoi(row[162]); - entry.UNK157 = atoi(row[163]); - entry.serialized = row[164] ? row[164] : ""; - entry.verified = row[165] ? row[165] : ""; - entry.serialization = row[166] ? row[166] : ""; - entry.source = row[167] ? row[167] : ""; - entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169] ? row[169] : ""; - entry.UNK014 = atoi(row[170]); - entry.svcorruption = atoi(row[171]); - entry.skillmodmax = atoi(row[172]); - entry.UNK060 = atoi(row[173]); - entry.augslot1unk2 = atoi(row[174]); - entry.augslot2unk2 = atoi(row[175]); - entry.augslot3unk2 = atoi(row[176]); - entry.augslot4unk2 = atoi(row[177]); - entry.augslot5unk2 = atoi(row[178]); - entry.augslot6unk2 = atoi(row[179]); - entry.UNK120 = atoi(row[180]); - entry.UNK121 = atoi(row[181]); - entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183] ? row[183] : ""; - entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185] ? row[185] : ""; - entry.clickunk7 = atoi(row[186]); - entry.procunk1 = atoi(row[187]); - entry.procunk2 = atoi(row[188]); - entry.procunk3 = atoi(row[189]); - entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191] ? row[191] : ""; - entry.procunk7 = atoi(row[192]); - entry.wornunk1 = atoi(row[193]); - entry.wornunk2 = atoi(row[194]); - entry.wornunk3 = atoi(row[195]); - entry.wornunk4 = atoi(row[196]); - entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198] ? row[198] : ""; - entry.wornunk7 = atoi(row[199]); - entry.focusunk1 = atoi(row[200]); - entry.focusunk2 = atoi(row[201]); - entry.focusunk3 = atoi(row[202]); - entry.focusunk4 = atoi(row[203]); - entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205] ? row[205] : ""; - entry.focusunk7 = atoi(row[206]); - entry.scrollunk1 = atoi(row[207]); - entry.scrollunk2 = atoi(row[208]); - entry.scrollunk3 = atoi(row[209]); - entry.scrollunk4 = atoi(row[210]); - entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212] ? row[212] : ""; - entry.scrollunk7 = atoi(row[213]); - entry.UNK193 = atoi(row[214]); - entry.purity = atoi(row[215]); - entry.evoitem = atoi(row[216]); - entry.evoid = atoi(row[217]); - entry.evolvinglevel = atoi(row[218]); - entry.evomax = atoi(row[219]); - entry.clickname = row[220] ? row[220] : ""; - entry.procname = row[221] ? row[221] : ""; - entry.wornname = row[222] ? row[222] : ""; - entry.focusname = row[223] ? row[223] : ""; - entry.scrollname = row[224] ? row[224] : ""; - entry.dsmitigation = atoi(row[225]); - entry.heroic_str = atoi(row[226]); - entry.heroic_int = atoi(row[227]); - entry.heroic_wis = atoi(row[228]); - entry.heroic_agi = atoi(row[229]); - entry.heroic_dex = atoi(row[230]); - entry.heroic_sta = atoi(row[231]); - entry.heroic_cha = atoi(row[232]); - entry.heroic_pr = atoi(row[233]); - entry.heroic_dr = atoi(row[234]); - entry.heroic_fr = atoi(row[235]); - entry.heroic_cr = atoi(row[236]); - entry.heroic_mr = atoi(row[237]); - entry.heroic_svcorrup = atoi(row[238]); - entry.healamt = atoi(row[239]); - entry.spelldmg = atoi(row[240]); - entry.clairvoyance = atoi(row[241]); - entry.backstabdmg = atoi(row[242]); - entry.created = row[243] ? row[243] : ""; - entry.elitematerial = atoi(row[244]); - entry.ldonsellbackrate = atoi(row[245]); - entry.scriptfileid = atoi(row[246]); - entry.expendablearrow = atoi(row[247]); - entry.powersourcecapacity = atoi(row[248]); - entry.bardeffect = atoi(row[249]); - entry.bardeffecttype = atoi(row[250]); - entry.bardlevel2 = atoi(row[251]); - entry.bardlevel = atoi(row[252]); - entry.bardunk1 = atoi(row[253]); - entry.bardunk2 = atoi(row[254]); - entry.bardunk3 = atoi(row[255]); - entry.bardunk4 = atoi(row[256]); - entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258] ? row[258] : ""; - entry.bardunk7 = atoi(row[259]); - entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); - entry.UNK220 = atoi(row[262]); - entry.UNK221 = atoi(row[263]); - entry.heirloom = atoi(row[264]); - entry.UNK223 = atoi(row[265]); - entry.UNK224 = atoi(row[266]); - entry.UNK225 = atoi(row[267]); - entry.UNK226 = atoi(row[268]); - entry.UNK227 = atoi(row[269]); - entry.UNK228 = atoi(row[270]); - entry.UNK229 = atoi(row[271]); - entry.UNK230 = atoi(row[272]); - entry.UNK231 = atoi(row[273]); - entry.UNK232 = atoi(row[274]); - entry.UNK233 = atoi(row[275]); - entry.UNK234 = atoi(row[276]); - entry.placeable = atoi(row[277]); - entry.UNK236 = atoi(row[278]); - entry.UNK237 = atoi(row[279]); - entry.UNK238 = atoi(row[280]); - entry.UNK239 = atoi(row[281]); - entry.UNK240 = atoi(row[282]); - entry.UNK241 = atoi(row[283]); - entry.epicitem = atoi(row[284]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Items entry{}; - - entry.id = atoi(row[0]); - entry.minstatus = atoi(row[1]); - entry.Name = row[2] ? row[2] : ""; - entry.aagi = atoi(row[3]); - entry.ac = atoi(row[4]); - entry.accuracy = atoi(row[5]); - entry.acha = atoi(row[6]); - entry.adex = atoi(row[7]); - entry.aint = atoi(row[8]); - entry.artifactflag = atoi(row[9]); - entry.asta = atoi(row[10]); - entry.astr = atoi(row[11]); - entry.attack = atoi(row[12]); - entry.augrestrict = atoi(row[13]); - entry.augslot1type = atoi(row[14]); - entry.augslot1visible = atoi(row[15]); - entry.augslot2type = atoi(row[16]); - entry.augslot2visible = atoi(row[17]); - entry.augslot3type = atoi(row[18]); - entry.augslot3visible = atoi(row[19]); - entry.augslot4type = atoi(row[20]); - entry.augslot4visible = atoi(row[21]); - entry.augslot5type = atoi(row[22]); - entry.augslot5visible = atoi(row[23]); - entry.augslot6type = atoi(row[24]); - entry.augslot6visible = atoi(row[25]); - entry.augtype = atoi(row[26]); - entry.avoidance = atoi(row[27]); - entry.awis = atoi(row[28]); - entry.bagsize = atoi(row[29]); - entry.bagslots = atoi(row[30]); - entry.bagtype = atoi(row[31]); - entry.bagwr = atoi(row[32]); - entry.banedmgamt = atoi(row[33]); - entry.banedmgraceamt = atoi(row[34]); - entry.banedmgbody = atoi(row[35]); - entry.banedmgrace = atoi(row[36]); - entry.bardtype = atoi(row[37]); - entry.bardvalue = atoi(row[38]); - entry.book = atoi(row[39]); - entry.casttime = atoi(row[40]); - entry.casttime_ = atoi(row[41]); - entry.charmfile = row[42] ? row[42] : ""; - entry.charmfileid = row[43] ? row[43] : ""; - entry.classes = atoi(row[44]); - entry.color = atoi(row[45]); - entry.combateffects = row[46] ? row[46] : ""; - entry.extradmgskill = atoi(row[47]); - entry.extradmgamt = atoi(row[48]); - entry.price = atoi(row[49]); - entry.cr = atoi(row[50]); - entry.damage = atoi(row[51]); - entry.damageshield = atoi(row[52]); - entry.deity = atoi(row[53]); - entry.delay = atoi(row[54]); - entry.augdistiller = atoi(row[55]); - entry.dotshielding = atoi(row[56]); - entry.dr = atoi(row[57]); - entry.clicktype = atoi(row[58]); - entry.clicklevel2 = atoi(row[59]); - entry.elemdmgtype = atoi(row[60]); - entry.elemdmgamt = atoi(row[61]); - entry.endur = atoi(row[62]); - entry.factionamt1 = atoi(row[63]); - entry.factionamt2 = atoi(row[64]); - entry.factionamt3 = atoi(row[65]); - entry.factionamt4 = atoi(row[66]); - entry.factionmod1 = atoi(row[67]); - entry.factionmod2 = atoi(row[68]); - entry.factionmod3 = atoi(row[69]); - entry.factionmod4 = atoi(row[70]); - entry.filename = row[71] ? row[71] : ""; - entry.focuseffect = atoi(row[72]); - entry.fr = atoi(row[73]); - entry.fvnodrop = atoi(row[74]); - entry.haste = atoi(row[75]); - entry.clicklevel = atoi(row[76]); - entry.hp = atoi(row[77]); - entry.regen = atoi(row[78]); - entry.icon = atoi(row[79]); - entry.idfile = row[80] ? row[80] : ""; - entry.itemclass = atoi(row[81]); - entry.itemtype = atoi(row[82]); - entry.ldonprice = atoi(row[83]); - entry.ldontheme = atoi(row[84]); - entry.ldonsold = atoi(row[85]); - entry.light = atoi(row[86]); - entry.lore = row[87] ? row[87] : ""; - entry.loregroup = atoi(row[88]); - entry.magic = atoi(row[89]); - entry.mana = atoi(row[90]); - entry.manaregen = atoi(row[91]); - entry.enduranceregen = atoi(row[92]); - entry.material = atoi(row[93]); - entry.herosforgemodel = atoi(row[94]); - entry.maxcharges = atoi(row[95]); - entry.mr = atoi(row[96]); - entry.nodrop = atoi(row[97]); - entry.norent = atoi(row[98]); - entry.pendingloreflag = atoi(row[99]); - entry.pr = atoi(row[100]); - entry.procrate = atoi(row[101]); - entry.races = atoi(row[102]); - entry.range = atoi(row[103]); - entry.reclevel = atoi(row[104]); - entry.recskill = atoi(row[105]); - entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); - entry.shielding = atoi(row[108]); - entry.size = atoi(row[109]); - entry.skillmodtype = atoi(row[110]); - entry.skillmodvalue = atoi(row[111]); - entry.slots = atoi(row[112]); - entry.clickeffect = atoi(row[113]); - entry.spellshield = atoi(row[114]); - entry.strikethrough = atoi(row[115]); - entry.stunresist = atoi(row[116]); - entry.summonedflag = atoi(row[117]); - entry.tradeskills = atoi(row[118]); - entry.favor = atoi(row[119]); - entry.weight = atoi(row[120]); - entry.UNK012 = atoi(row[121]); - entry.UNK013 = atoi(row[122]); - entry.benefitflag = atoi(row[123]); - entry.UNK054 = atoi(row[124]); - entry.UNK059 = atoi(row[125]); - entry.booktype = atoi(row[126]); - entry.recastdelay = atoi(row[127]); - entry.recasttype = atoi(row[128]); - entry.guildfavor = atoi(row[129]); - entry.UNK123 = atoi(row[130]); - entry.UNK124 = atoi(row[131]); - entry.attuneable = atoi(row[132]); - entry.nopet = atoi(row[133]); - entry.updated = row[134] ? row[134] : ""; - entry.comment = row[135] ? row[135] : ""; - entry.UNK127 = atoi(row[136]); - entry.pointtype = atoi(row[137]); - entry.potionbelt = atoi(row[138]); - entry.potionbeltslots = atoi(row[139]); - entry.stacksize = atoi(row[140]); - entry.notransfer = atoi(row[141]); - entry.stackable = atoi(row[142]); - entry.UNK134 = row[143] ? row[143] : ""; - entry.UNK137 = atoi(row[144]); - entry.proceffect = atoi(row[145]); - entry.proctype = atoi(row[146]); - entry.proclevel2 = atoi(row[147]); - entry.proclevel = atoi(row[148]); - entry.UNK142 = atoi(row[149]); - entry.worneffect = atoi(row[150]); - entry.worntype = atoi(row[151]); - entry.wornlevel2 = atoi(row[152]); - entry.wornlevel = atoi(row[153]); - entry.UNK147 = atoi(row[154]); - entry.focustype = atoi(row[155]); - entry.focuslevel2 = atoi(row[156]); - entry.focuslevel = atoi(row[157]); - entry.UNK152 = atoi(row[158]); - entry.scrolleffect = atoi(row[159]); - entry.scrolltype = atoi(row[160]); - entry.scrolllevel2 = atoi(row[161]); - entry.scrolllevel = atoi(row[162]); - entry.UNK157 = atoi(row[163]); - entry.serialized = row[164] ? row[164] : ""; - entry.verified = row[165] ? row[165] : ""; - entry.serialization = row[166] ? row[166] : ""; - entry.source = row[167] ? row[167] : ""; - entry.UNK033 = atoi(row[168]); - entry.lorefile = row[169] ? row[169] : ""; - entry.UNK014 = atoi(row[170]); - entry.svcorruption = atoi(row[171]); - entry.skillmodmax = atoi(row[172]); - entry.UNK060 = atoi(row[173]); - entry.augslot1unk2 = atoi(row[174]); - entry.augslot2unk2 = atoi(row[175]); - entry.augslot3unk2 = atoi(row[176]); - entry.augslot4unk2 = atoi(row[177]); - entry.augslot5unk2 = atoi(row[178]); - entry.augslot6unk2 = atoi(row[179]); - entry.UNK120 = atoi(row[180]); - entry.UNK121 = atoi(row[181]); - entry.questitemflag = atoi(row[182]); - entry.UNK132 = row[183] ? row[183] : ""; - entry.clickunk5 = atoi(row[184]); - entry.clickunk6 = row[185] ? row[185] : ""; - entry.clickunk7 = atoi(row[186]); - entry.procunk1 = atoi(row[187]); - entry.procunk2 = atoi(row[188]); - entry.procunk3 = atoi(row[189]); - entry.procunk4 = atoi(row[190]); - entry.procunk6 = row[191] ? row[191] : ""; - entry.procunk7 = atoi(row[192]); - entry.wornunk1 = atoi(row[193]); - entry.wornunk2 = atoi(row[194]); - entry.wornunk3 = atoi(row[195]); - entry.wornunk4 = atoi(row[196]); - entry.wornunk5 = atoi(row[197]); - entry.wornunk6 = row[198] ? row[198] : ""; - entry.wornunk7 = atoi(row[199]); - entry.focusunk1 = atoi(row[200]); - entry.focusunk2 = atoi(row[201]); - entry.focusunk3 = atoi(row[202]); - entry.focusunk4 = atoi(row[203]); - entry.focusunk5 = atoi(row[204]); - entry.focusunk6 = row[205] ? row[205] : ""; - entry.focusunk7 = atoi(row[206]); - entry.scrollunk1 = atoi(row[207]); - entry.scrollunk2 = atoi(row[208]); - entry.scrollunk3 = atoi(row[209]); - entry.scrollunk4 = atoi(row[210]); - entry.scrollunk5 = atoi(row[211]); - entry.scrollunk6 = row[212] ? row[212] : ""; - entry.scrollunk7 = atoi(row[213]); - entry.UNK193 = atoi(row[214]); - entry.purity = atoi(row[215]); - entry.evoitem = atoi(row[216]); - entry.evoid = atoi(row[217]); - entry.evolvinglevel = atoi(row[218]); - entry.evomax = atoi(row[219]); - entry.clickname = row[220] ? row[220] : ""; - entry.procname = row[221] ? row[221] : ""; - entry.wornname = row[222] ? row[222] : ""; - entry.focusname = row[223] ? row[223] : ""; - entry.scrollname = row[224] ? row[224] : ""; - entry.dsmitigation = atoi(row[225]); - entry.heroic_str = atoi(row[226]); - entry.heroic_int = atoi(row[227]); - entry.heroic_wis = atoi(row[228]); - entry.heroic_agi = atoi(row[229]); - entry.heroic_dex = atoi(row[230]); - entry.heroic_sta = atoi(row[231]); - entry.heroic_cha = atoi(row[232]); - entry.heroic_pr = atoi(row[233]); - entry.heroic_dr = atoi(row[234]); - entry.heroic_fr = atoi(row[235]); - entry.heroic_cr = atoi(row[236]); - entry.heroic_mr = atoi(row[237]); - entry.heroic_svcorrup = atoi(row[238]); - entry.healamt = atoi(row[239]); - entry.spelldmg = atoi(row[240]); - entry.clairvoyance = atoi(row[241]); - entry.backstabdmg = atoi(row[242]); - entry.created = row[243] ? row[243] : ""; - entry.elitematerial = atoi(row[244]); - entry.ldonsellbackrate = atoi(row[245]); - entry.scriptfileid = atoi(row[246]); - entry.expendablearrow = atoi(row[247]); - entry.powersourcecapacity = atoi(row[248]); - entry.bardeffect = atoi(row[249]); - entry.bardeffecttype = atoi(row[250]); - entry.bardlevel2 = atoi(row[251]); - entry.bardlevel = atoi(row[252]); - entry.bardunk1 = atoi(row[253]); - entry.bardunk2 = atoi(row[254]); - entry.bardunk3 = atoi(row[255]); - entry.bardunk4 = atoi(row[256]); - entry.bardunk5 = atoi(row[257]); - entry.bardname = row[258] ? row[258] : ""; - entry.bardunk7 = atoi(row[259]); - entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); - entry.UNK220 = atoi(row[262]); - entry.UNK221 = atoi(row[263]); - entry.heirloom = atoi(row[264]); - entry.UNK223 = atoi(row[265]); - entry.UNK224 = atoi(row[266]); - entry.UNK225 = atoi(row[267]); - entry.UNK226 = atoi(row[268]); - entry.UNK227 = atoi(row[269]); - entry.UNK228 = atoi(row[270]); - entry.UNK229 = atoi(row[271]); - entry.UNK230 = atoi(row[272]); - entry.UNK231 = atoi(row[273]); - entry.UNK232 = atoi(row[274]); - entry.UNK233 = atoi(row[275]); - entry.UNK234 = atoi(row[276]); - entry.placeable = atoi(row[277]); - entry.UNK236 = atoi(row[278]); - entry.UNK237 = atoi(row[279]); - entry.UNK238 = atoi(row[280]); - entry.UNK239 = atoi(row[281]); - entry.UNK240 = atoi(row[282]); - entry.UNK241 = atoi(row[283]); - entry.epicitem = atoi(row[284]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h index 3f0ad71cf..0b23dcd6d 100644 --- a/common/repositories/launcher_repository.h +++ b/common/repositories/launcher_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_launcher_repository.h" -class LauncherRepository { +class LauncherRepository: public BaseLauncherRepository { public: - struct Launcher { - std::string name; - int8 dynamics; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LauncherRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LauncherRepository::GetWhereNeverExpires() + * LauncherRepository::GetWhereXAndY() + * LauncherRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "name", - "dynamics", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("launcher"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Launcher NewEntity() - { - Launcher entry{}; - - entry.name = ""; - entry.dynamics = 0; - - return entry; - } - - static Launcher GetLauncherEntry( - const std::vector &launchers, - int launcher_id - ) - { - for (auto &launcher : launchers) { - if (launcher.name == launcher_id) { - return launcher; - } - } - - return NewEntity(); - } - - static Launcher FindOne( - int launcher_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - launcher_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Launcher entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.dynamics = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int launcher_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - launcher_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Launcher launcher_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(launcher_entry.dynamics)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - launcher_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Launcher InsertOne( - Launcher launcher_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_entry.dynamics)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - launcher_entry.id = results.LastInsertedID(); - return launcher_entry; - } - - launcher_entry = LauncherRepository::NewEntity(); - - return launcher_entry; - } - - static int InsertMany( - std::vector launcher_entries - ) - { - std::vector insert_chunks; - - for (auto &launcher_entry: launcher_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_entry.dynamics)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Launcher entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.dynamics = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Launcher entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.dynamics = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h index 010659f82..cbe3c04e8 100644 --- a/common/repositories/launcher_zones_repository.h +++ b/common/repositories/launcher_zones_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_launcher_zones_repository.h" -class LauncherZonesRepository { +class LauncherZonesRepository: public BaseLauncherZonesRepository { public: - struct LauncherZones { - std::string launcher; - std::string zone; - int port; - }; - static std::string PrimaryKey() - { - return std::string("zone"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LauncherZonesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LauncherZonesRepository::GetWhereNeverExpires() + * LauncherZonesRepository::GetWhereXAndY() + * LauncherZonesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "launcher", - "zone", - "port", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("launcher_zones"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LauncherZones NewEntity() - { - LauncherZones entry{}; - - entry.launcher = ""; - entry.zone = ""; - entry.port = 0; - - return entry; - } - - static LauncherZones GetLauncherZonesEntry( - const std::vector &launcher_zoness, - int launcher_zones_id - ) - { - for (auto &launcher_zones : launcher_zoness) { - if (launcher_zones.zone == launcher_zones_id) { - return launcher_zones; - } - } - - return NewEntity(); - } - - static LauncherZones FindOne( - int launcher_zones_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - launcher_zones_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int launcher_zones_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - launcher_zones_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LauncherZones launcher_zones_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(launcher_zones_entry.port)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - launcher_zones_entry.zone - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LauncherZones InsertOne( - LauncherZones launcher_zones_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_zones_entry.port)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - launcher_zones_entry.id = results.LastInsertedID(); - return launcher_zones_entry; - } - - launcher_zones_entry = LauncherZonesRepository::NewEntity(); - - return launcher_zones_entry; - } - - static int InsertMany( - std::vector launcher_zones_entries - ) - { - std::vector insert_chunks; - - for (auto &launcher_zones_entry: launcher_zones_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_zones_entry.port)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/ldon_trap_entries_repository.h b/common/repositories/ldon_trap_entries_repository.h index edcca50be..3c406149f 100644 --- a/common/repositories/ldon_trap_entries_repository.h +++ b/common/repositories/ldon_trap_entries_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_ldon_trap_entries_repository.h" -class LdonTrapEntriesRepository { +class LdonTrapEntriesRepository: public BaseLdonTrapEntriesRepository { public: - struct LdonTrapEntries { - int id; - int trap_id; - }; - static std::string PrimaryKey() - { - return std::string("trap_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LdonTrapEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LdonTrapEntriesRepository::GetWhereNeverExpires() + * LdonTrapEntriesRepository::GetWhereXAndY() + * LdonTrapEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "trap_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("ldon_trap_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LdonTrapEntries NewEntity() - { - LdonTrapEntries entry{}; - - entry.id = 0; - entry.trap_id = 0; - - return entry; - } - - static LdonTrapEntries GetLdonTrapEntriesEntry( - const std::vector &ldon_trap_entriess, - int ldon_trap_entries_id - ) - { - for (auto &ldon_trap_entries : ldon_trap_entriess) { - if (ldon_trap_entries.trap_id == ldon_trap_entries_id) { - return ldon_trap_entries; - } - } - - return NewEntity(); - } - - static LdonTrapEntries FindOne( - int ldon_trap_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - ldon_trap_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LdonTrapEntries entry{}; - - entry.id = atoi(row[0]); - entry.trap_id = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int ldon_trap_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - ldon_trap_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LdonTrapEntries ldon_trap_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - ldon_trap_entries_entry.trap_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LdonTrapEntries InsertOne( - LdonTrapEntries ldon_trap_entries_entry - ) - { - std::vector insert_values; - - - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - ldon_trap_entries_entry.id = results.LastInsertedID(); - return ldon_trap_entries_entry; - } - - ldon_trap_entries_entry = LdonTrapEntriesRepository::NewEntity(); - - return ldon_trap_entries_entry; - } - - static int InsertMany( - std::vector ldon_trap_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &ldon_trap_entries_entry: ldon_trap_entries_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LdonTrapEntries entry{}; - - entry.id = atoi(row[0]); - entry.trap_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LdonTrapEntries entry{}; - - entry.id = atoi(row[0]); - entry.trap_id = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/ldon_trap_templates_repository.h b/common/repositories/ldon_trap_templates_repository.h index a2610f5bd..91bc6c015 100644 --- a/common/repositories/ldon_trap_templates_repository.h +++ b/common/repositories/ldon_trap_templates_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_ldon_trap_templates_repository.h" -class LdonTrapTemplatesRepository { +class LdonTrapTemplatesRepository: public BaseLdonTrapTemplatesRepository { public: - struct LdonTrapTemplates { - int id; - int8 type; - int16 spell_id; - int16 skill; - int8 locked; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LdonTrapTemplatesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LdonTrapTemplatesRepository::GetWhereNeverExpires() + * LdonTrapTemplatesRepository::GetWhereXAndY() + * LdonTrapTemplatesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "type", - "spell_id", - "skill", - "locked", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("ldon_trap_templates"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LdonTrapTemplates NewEntity() - { - LdonTrapTemplates entry{}; - - entry.id = 0; - entry.type = 1; - entry.spell_id = 0; - entry.skill = 0; - entry.locked = 0; - - return entry; - } - - static LdonTrapTemplates GetLdonTrapTemplatesEntry( - const std::vector &ldon_trap_templatess, - int ldon_trap_templates_id - ) - { - for (auto &ldon_trap_templates : ldon_trap_templatess) { - if (ldon_trap_templates.id == ldon_trap_templates_id) { - return ldon_trap_templates; - } - } - - return NewEntity(); - } - - static LdonTrapTemplates FindOne( - int ldon_trap_templates_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - ldon_trap_templates_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LdonTrapTemplates entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.skill = atoi(row[3]); - entry.locked = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int ldon_trap_templates_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - ldon_trap_templates_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LdonTrapTemplates ldon_trap_templates_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(ldon_trap_templates_entry.type)); - update_values.push_back(columns[2] + " = " + std::to_string(ldon_trap_templates_entry.spell_id)); - update_values.push_back(columns[3] + " = " + std::to_string(ldon_trap_templates_entry.skill)); - update_values.push_back(columns[4] + " = " + std::to_string(ldon_trap_templates_entry.locked)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - ldon_trap_templates_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LdonTrapTemplates InsertOne( - LdonTrapTemplates ldon_trap_templates_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - ldon_trap_templates_entry.id = results.LastInsertedID(); - return ldon_trap_templates_entry; - } - - ldon_trap_templates_entry = LdonTrapTemplatesRepository::NewEntity(); - - return ldon_trap_templates_entry; - } - - static int InsertMany( - std::vector ldon_trap_templates_entries - ) - { - std::vector insert_chunks; - - for (auto &ldon_trap_templates_entry: ldon_trap_templates_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); - insert_values.push_back(std::to_string(ldon_trap_templates_entry.locked)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LdonTrapTemplates entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.skill = atoi(row[3]); - entry.locked = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LdonTrapTemplates entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.spell_id = atoi(row[2]); - entry.skill = atoi(row[3]); - entry.locked = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h index 8ca1956fe..702f50eba 100644 --- a/common/repositories/level_exp_mods_repository.h +++ b/common/repositories/level_exp_mods_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_level_exp_mods_repository.h" -class LevelExpModsRepository { +class LevelExpModsRepository: public BaseLevelExpModsRepository { public: - struct LevelExpMods { - int level; - float exp_mod; - float aa_exp_mod; - }; - static std::string PrimaryKey() - { - return std::string("level"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LevelExpModsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LevelExpModsRepository::GetWhereNeverExpires() + * LevelExpModsRepository::GetWhereXAndY() + * LevelExpModsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "level", - "exp_mod", - "aa_exp_mod", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("level_exp_mods"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LevelExpMods NewEntity() - { - LevelExpMods entry{}; - - entry.level = 0; - entry.exp_mod = 0; - entry.aa_exp_mod = 0; - - return entry; - } - - static LevelExpMods GetLevelExpModsEntry( - const std::vector &level_exp_modss, - int level_exp_mods_id - ) - { - for (auto &level_exp_mods : level_exp_modss) { - if (level_exp_mods.level == level_exp_mods_id) { - return level_exp_mods; - } - } - - return NewEntity(); - } - - static LevelExpMods FindOne( - int level_exp_mods_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - level_exp_mods_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LevelExpMods entry{}; - - entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int level_exp_mods_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - level_exp_mods_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LevelExpMods level_exp_mods_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(level_exp_mods_entry.exp_mod)); - update_values.push_back(columns[2] + " = " + std::to_string(level_exp_mods_entry.aa_exp_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - level_exp_mods_entry.level - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LevelExpMods InsertOne( - LevelExpMods level_exp_mods_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); - insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - level_exp_mods_entry.id = results.LastInsertedID(); - return level_exp_mods_entry; - } - - level_exp_mods_entry = LevelExpModsRepository::NewEntity(); - - return level_exp_mods_entry; - } - - static int InsertMany( - std::vector level_exp_mods_entries - ) - { - std::vector insert_chunks; - - for (auto &level_exp_mods_entry: level_exp_mods_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); - insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LevelExpMods entry{}; - - entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LevelExpMods entry{}; - - entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index 7a6d5012b..334de2461 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -23,335 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_lfguild_repository.h" -class LfguildRepository { +class LfguildRepository: public BaseLfguildRepository { public: - struct Lfguild { - int8 type; - std::string name; - std::string comment; - int8 fromlevel; - int8 tolevel; - int classes; - int aacount; - int timezone; - int timeposted; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LfguildRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LfguildRepository::GetWhereNeverExpires() + * LfguildRepository::GetWhereXAndY() + * LfguildRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "type", - "name", - "comment", - "fromlevel", - "tolevel", - "classes", - "aacount", - "timezone", - "timeposted", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("lfguild"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Lfguild NewEntity() - { - Lfguild entry{}; - - entry.type = 0; - entry.name = ""; - entry.comment = ""; - entry.fromlevel = 0; - entry.tolevel = 0; - entry.classes = 0; - entry.aacount = 0; - entry.timezone = 0; - entry.timeposted = 0; - - return entry; - } - - static Lfguild GetLfguildEntry( - const std::vector &lfguilds, - int lfguild_id - ) - { - for (auto &lfguild : lfguilds) { - if (lfguild.name == lfguild_id) { - return lfguild; - } - } - - return NewEntity(); - } - - static Lfguild FindOne( - int lfguild_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - lfguild_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Lfguild entry{}; - - entry.type = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.comment = row[2] ? row[2] : ""; - entry.fromlevel = atoi(row[3]); - entry.tolevel = atoi(row[4]); - entry.classes = atoi(row[5]); - entry.aacount = atoi(row[6]); - entry.timezone = atoi(row[7]); - entry.timeposted = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int lfguild_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - lfguild_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Lfguild lfguild_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(lfguild_entry.comment) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(lfguild_entry.fromlevel)); - update_values.push_back(columns[4] + " = " + std::to_string(lfguild_entry.tolevel)); - update_values.push_back(columns[5] + " = " + std::to_string(lfguild_entry.classes)); - update_values.push_back(columns[6] + " = " + std::to_string(lfguild_entry.aacount)); - update_values.push_back(columns[7] + " = " + std::to_string(lfguild_entry.timezone)); - update_values.push_back(columns[8] + " = " + std::to_string(lfguild_entry.timeposted)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - lfguild_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Lfguild InsertOne( - Lfguild lfguild_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); - insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); - insert_values.push_back(std::to_string(lfguild_entry.tolevel)); - insert_values.push_back(std::to_string(lfguild_entry.classes)); - insert_values.push_back(std::to_string(lfguild_entry.aacount)); - insert_values.push_back(std::to_string(lfguild_entry.timezone)); - insert_values.push_back(std::to_string(lfguild_entry.timeposted)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - lfguild_entry.id = results.LastInsertedID(); - return lfguild_entry; - } - - lfguild_entry = LfguildRepository::NewEntity(); - - return lfguild_entry; - } - - static int InsertMany( - std::vector lfguild_entries - ) - { - std::vector insert_chunks; - - for (auto &lfguild_entry: lfguild_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); - insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); - insert_values.push_back(std::to_string(lfguild_entry.tolevel)); - insert_values.push_back(std::to_string(lfguild_entry.classes)); - insert_values.push_back(std::to_string(lfguild_entry.aacount)); - insert_values.push_back(std::to_string(lfguild_entry.timezone)); - insert_values.push_back(std::to_string(lfguild_entry.timeposted)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Lfguild entry{}; - - entry.type = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.comment = row[2] ? row[2] : ""; - entry.fromlevel = atoi(row[3]); - entry.tolevel = atoi(row[4]); - entry.classes = atoi(row[5]); - entry.aacount = atoi(row[6]); - entry.timezone = atoi(row[7]); - entry.timeposted = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Lfguild entry{}; - - entry.type = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.comment = row[2] ? row[2] : ""; - entry.fromlevel = atoi(row[3]); - entry.tolevel = atoi(row[4]); - entry.classes = atoi(row[5]); - entry.aacount = atoi(row[6]); - entry.timezone = atoi(row[7]); - entry.timeposted = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index a9d360668..c89b263f0 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_login_accounts_repository.h" -class LoginAccountsRepository { +class LoginAccountsRepository: public BaseLoginAccountsRepository { public: - struct LoginAccounts { - int id; - std::string account_name; - std::string account_password; - std::string account_email; - std::string source_loginserver; - std::string last_ip_address; - std::string last_login_date; - std::string created_at; - std::string updated_at; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoginAccountsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoginAccountsRepository::GetWhereNeverExpires() + * LoginAccountsRepository::GetWhereXAndY() + * LoginAccountsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "account_name", - "account_password", - "account_email", - "source_loginserver", - "last_ip_address", - "last_login_date", - "created_at", - "updated_at", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("login_accounts"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoginAccounts NewEntity() - { - LoginAccounts entry{}; - - entry.id = 0; - entry.account_name = ""; - entry.account_password = ""; - entry.account_email = ""; - entry.source_loginserver = ""; - entry.last_ip_address = ""; - entry.last_login_date = 0; - entry.created_at = 0; - entry.updated_at = current_timestamp(); - - return entry; - } - - static LoginAccounts GetLoginAccountsEntry( - const std::vector &login_accountss, - int login_accounts_id - ) - { - for (auto &login_accounts : login_accountss) { - if (login_accounts.id == login_accounts_id) { - return login_accounts; - } - } - - return NewEntity(); - } - - static LoginAccounts FindOne( - int login_accounts_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - login_accounts_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoginAccounts entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.account_email = row[3] ? row[3] : ""; - entry.source_loginserver = row[4] ? row[4] : ""; - entry.last_ip_address = row[5] ? row[5] : ""; - entry.last_login_date = row[6] ? row[6] : ""; - entry.created_at = row[7] ? row[7] : ""; - entry.updated_at = row[8] ? row[8] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int login_accounts_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - login_accounts_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoginAccounts login_accounts_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(login_accounts_entry.account_name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(login_accounts_entry.account_password) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(login_accounts_entry.account_email) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(login_accounts_entry.source_loginserver) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(login_accounts_entry.last_ip_address) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(login_accounts_entry.last_login_date) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(login_accounts_entry.created_at) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(login_accounts_entry.updated_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - login_accounts_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoginAccounts InsertOne( - LoginAccounts login_accounts_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - login_accounts_entry.id = results.LastInsertedID(); - return login_accounts_entry; - } - - login_accounts_entry = LoginAccountsRepository::NewEntity(); - - return login_accounts_entry; - } - - static int InsertMany( - std::vector login_accounts_entries - ) - { - std::vector insert_chunks; - - for (auto &login_accounts_entry: login_accounts_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.source_loginserver) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.last_ip_address) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.last_login_date) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.created_at) + "'"); - insert_values.push_back("'" + EscapeString(login_accounts_entry.updated_at) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginAccounts entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.account_email = row[3] ? row[3] : ""; - entry.source_loginserver = row[4] ? row[4] : ""; - entry.last_ip_address = row[5] ? row[5] : ""; - entry.last_login_date = row[6] ? row[6] : ""; - entry.created_at = row[7] ? row[7] : ""; - entry.updated_at = row[8] ? row[8] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginAccounts entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.account_email = row[3] ? row[3] : ""; - entry.source_loginserver = row[4] ? row[4] : ""; - entry.last_ip_address = row[5] ? row[5] : ""; - entry.last_login_date = row[6] ? row[6] : ""; - entry.created_at = row[7] ? row[7] : ""; - entry.updated_at = row[8] ? row[8] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index 766b0542d..730cd89bb 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_login_api_tokens_repository.h" -class LoginApiTokensRepository { +class LoginApiTokensRepository: public BaseLoginApiTokensRepository { public: - struct LoginApiTokens { - int id; - std::string token; - int can_write; - int can_read; - std::string created_at; - std::string updated_at; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoginApiTokensRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoginApiTokensRepository::GetWhereNeverExpires() + * LoginApiTokensRepository::GetWhereXAndY() + * LoginApiTokensRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "token", - "can_write", - "can_read", - "created_at", - "updated_at", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("login_api_tokens"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoginApiTokens NewEntity() - { - LoginApiTokens entry{}; - - entry.id = 0; - entry.token = ""; - entry.can_write = 0; - entry.can_read = 0; - entry.created_at = 0; - entry.updated_at = current_timestamp(); - - return entry; - } - - static LoginApiTokens GetLoginApiTokensEntry( - const std::vector &login_api_tokenss, - int login_api_tokens_id - ) - { - for (auto &login_api_tokens : login_api_tokenss) { - if (login_api_tokens.id == login_api_tokens_id) { - return login_api_tokens; - } - } - - return NewEntity(); - } - - static LoginApiTokens FindOne( - int login_api_tokens_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - login_api_tokens_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoginApiTokens entry{}; - - entry.id = atoi(row[0]); - entry.token = row[1] ? row[1] : ""; - entry.can_write = atoi(row[2]); - entry.can_read = atoi(row[3]); - entry.created_at = row[4] ? row[4] : ""; - entry.updated_at = row[5] ? row[5] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int login_api_tokens_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - login_api_tokens_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoginApiTokens login_api_tokens_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(login_api_tokens_entry.token) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(login_api_tokens_entry.can_write)); - update_values.push_back(columns[3] + " = " + std::to_string(login_api_tokens_entry.can_read)); - update_values.push_back(columns[4] + " = '" + EscapeString(login_api_tokens_entry.created_at) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(login_api_tokens_entry.updated_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - login_api_tokens_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoginApiTokens InsertOne( - LoginApiTokens login_api_tokens_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); - insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); - insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - login_api_tokens_entry.id = results.LastInsertedID(); - return login_api_tokens_entry; - } - - login_api_tokens_entry = LoginApiTokensRepository::NewEntity(); - - return login_api_tokens_entry; - } - - static int InsertMany( - std::vector login_api_tokens_entries - ) - { - std::vector insert_chunks; - - for (auto &login_api_tokens_entry: login_api_tokens_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.token) + "'"); - insert_values.push_back(std::to_string(login_api_tokens_entry.can_write)); - insert_values.push_back(std::to_string(login_api_tokens_entry.can_read)); - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.created_at) + "'"); - insert_values.push_back("'" + EscapeString(login_api_tokens_entry.updated_at) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginApiTokens entry{}; - - entry.id = atoi(row[0]); - entry.token = row[1] ? row[1] : ""; - entry.can_write = atoi(row[2]); - entry.can_read = atoi(row[3]); - entry.created_at = row[4] ? row[4] : ""; - entry.updated_at = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginApiTokens entry{}; - - entry.id = atoi(row[0]); - entry.token = row[1] ? row[1] : ""; - entry.can_write = atoi(row[2]); - entry.can_read = atoi(row[3]); - entry.created_at = row[4] ? row[4] : ""; - entry.updated_at = row[5] ? row[5] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index 680e76d36..ec0354cd4 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -23,329 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_login_server_admins_repository.h" -class LoginServerAdminsRepository { +class LoginServerAdminsRepository: public BaseLoginServerAdminsRepository { public: - struct LoginServerAdmins { - int id; - std::string account_name; - std::string account_password; - std::string first_name; - std::string last_name; - std::string email; - std::string registration_date; - std::string registration_ip_address; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoginServerAdminsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoginServerAdminsRepository::GetWhereNeverExpires() + * LoginServerAdminsRepository::GetWhereXAndY() + * LoginServerAdminsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "account_name", - "account_password", - "first_name", - "last_name", - "email", - "registration_date", - "registration_ip_address", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("login_server_admins"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoginServerAdmins NewEntity() - { - LoginServerAdmins entry{}; - - entry.id = 0; - entry.account_name = ""; - entry.account_password = ""; - entry.first_name = ""; - entry.last_name = ""; - entry.email = ""; - entry.registration_date = 0; - entry.registration_ip_address = ""; - - return entry; - } - - static LoginServerAdmins GetLoginServerAdminsEntry( - const std::vector &login_server_adminss, - int login_server_admins_id - ) - { - for (auto &login_server_admins : login_server_adminss) { - if (login_server_admins.id == login_server_admins_id) { - return login_server_admins; - } - } - - return NewEntity(); - } - - static LoginServerAdmins FindOne( - int login_server_admins_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - login_server_admins_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoginServerAdmins entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.first_name = row[3] ? row[3] : ""; - entry.last_name = row[4] ? row[4] : ""; - entry.email = row[5] ? row[5] : ""; - entry.registration_date = row[6] ? row[6] : ""; - entry.registration_ip_address = row[7] ? row[7] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int login_server_admins_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - login_server_admins_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoginServerAdmins login_server_admins_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(login_server_admins_entry.account_name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(login_server_admins_entry.account_password) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(login_server_admins_entry.first_name) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(login_server_admins_entry.last_name) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(login_server_admins_entry.email) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(login_server_admins_entry.registration_date) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - login_server_admins_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoginServerAdmins InsertOne( - LoginServerAdmins login_server_admins_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - login_server_admins_entry.id = results.LastInsertedID(); - return login_server_admins_entry; - } - - login_server_admins_entry = LoginServerAdminsRepository::NewEntity(); - - return login_server_admins_entry; - } - - static int InsertMany( - std::vector login_server_admins_entries - ) - { - std::vector insert_chunks; - - for (auto &login_server_admins_entry: login_server_admins_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.account_password) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.first_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.last_name) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.email) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_date) + "'"); - insert_values.push_back("'" + EscapeString(login_server_admins_entry.registration_ip_address) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginServerAdmins entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.first_name = row[3] ? row[3] : ""; - entry.last_name = row[4] ? row[4] : ""; - entry.email = row[5] ? row[5] : ""; - entry.registration_date = row[6] ? row[6] : ""; - entry.registration_ip_address = row[7] ? row[7] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginServerAdmins entry{}; - - entry.id = atoi(row[0]); - entry.account_name = row[1] ? row[1] : ""; - entry.account_password = row[2] ? row[2] : ""; - entry.first_name = row[3] ? row[3] : ""; - entry.last_name = row[4] ? row[4] : ""; - entry.email = row[5] ? row[5] : ""; - entry.registration_date = row[6] ? row[6] : ""; - entry.registration_ip_address = row[7] ? row[7] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index 8d5dd1541..99d3a11db 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_login_server_list_types_repository.h" -class LoginServerListTypesRepository { +class LoginServerListTypesRepository: public BaseLoginServerListTypesRepository { public: - struct LoginServerListTypes { - int id; - std::string description; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoginServerListTypesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoginServerListTypesRepository::GetWhereNeverExpires() + * LoginServerListTypesRepository::GetWhereXAndY() + * LoginServerListTypesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "description", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("login_server_list_types"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoginServerListTypes NewEntity() - { - LoginServerListTypes entry{}; - - entry.id = 0; - entry.description = ""; - - return entry; - } - - static LoginServerListTypes GetLoginServerListTypesEntry( - const std::vector &login_server_list_typess, - int login_server_list_types_id - ) - { - for (auto &login_server_list_types : login_server_list_typess) { - if (login_server_list_types.id == login_server_list_types_id) { - return login_server_list_types; - } - } - - return NewEntity(); - } - - static LoginServerListTypes FindOne( - int login_server_list_types_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - login_server_list_types_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoginServerListTypes entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int login_server_list_types_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - login_server_list_types_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoginServerListTypes login_server_list_types_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(login_server_list_types_entry.description) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - login_server_list_types_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoginServerListTypes InsertOne( - LoginServerListTypes login_server_list_types_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - login_server_list_types_entry.id = results.LastInsertedID(); - return login_server_list_types_entry; - } - - login_server_list_types_entry = LoginServerListTypesRepository::NewEntity(); - - return login_server_list_types_entry; - } - - static int InsertMany( - std::vector login_server_list_types_entries - ) - { - std::vector insert_chunks; - - for (auto &login_server_list_types_entry: login_server_list_types_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginServerListTypes entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginServerListTypes entry{}; - - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index f5101503d..7634293b7 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -23,347 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_login_world_servers_repository.h" -class LoginWorldServersRepository { +class LoginWorldServersRepository: public BaseLoginWorldServersRepository { public: - struct LoginWorldServers { - int id; - std::string long_name; - std::string short_name; - std::string tag_description; - int login_server_list_type_id; - std::string last_login_date; - std::string last_ip_address; - int login_server_admin_id; - int is_server_trusted; - std::string note; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoginWorldServersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoginWorldServersRepository::GetWhereNeverExpires() + * LoginWorldServersRepository::GetWhereXAndY() + * LoginWorldServersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "long_name", - "short_name", - "tag_description", - "login_server_list_type_id", - "last_login_date", - "last_ip_address", - "login_server_admin_id", - "is_server_trusted", - "note", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("login_world_servers"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoginWorldServers NewEntity() - { - LoginWorldServers entry{}; - - entry.id = 0; - entry.long_name = ""; - entry.short_name = ""; - entry.tag_description = ""; - entry.login_server_list_type_id = 0; - entry.last_login_date = 0; - entry.last_ip_address = ""; - entry.login_server_admin_id = 0; - entry.is_server_trusted = 0; - entry.note = ""; - - return entry; - } - - static LoginWorldServers GetLoginWorldServersEntry( - const std::vector &login_world_serverss, - int login_world_servers_id - ) - { - for (auto &login_world_servers : login_world_serverss) { - if (login_world_servers.id == login_world_servers_id) { - return login_world_servers; - } - } - - return NewEntity(); - } - - static LoginWorldServers FindOne( - int login_world_servers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - login_world_servers_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoginWorldServers entry{}; - - entry.id = atoi(row[0]); - entry.long_name = row[1] ? row[1] : ""; - entry.short_name = row[2] ? row[2] : ""; - entry.tag_description = row[3] ? row[3] : ""; - entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5] ? row[5] : ""; - entry.last_ip_address = row[6] ? row[6] : ""; - entry.login_server_admin_id = atoi(row[7]); - entry.is_server_trusted = atoi(row[8]); - entry.note = row[9] ? row[9] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int login_world_servers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - login_world_servers_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoginWorldServers login_world_servers_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(login_world_servers_entry.long_name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(login_world_servers_entry.short_name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(login_world_servers_entry.tag_description) + "'"); - update_values.push_back(columns[4] + " = " + std::to_string(login_world_servers_entry.login_server_list_type_id)); - update_values.push_back(columns[5] + " = '" + EscapeString(login_world_servers_entry.last_login_date) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); - update_values.push_back(columns[7] + " = " + std::to_string(login_world_servers_entry.login_server_admin_id)); - update_values.push_back(columns[8] + " = " + std::to_string(login_world_servers_entry.is_server_trusted)); - update_values.push_back(columns[9] + " = '" + EscapeString(login_world_servers_entry.note) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - login_world_servers_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoginWorldServers InsertOne( - LoginWorldServers login_world_servers_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); - insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); - insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); - insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - login_world_servers_entry.id = results.LastInsertedID(); - return login_world_servers_entry; - } - - login_world_servers_entry = LoginWorldServersRepository::NewEntity(); - - return login_world_servers_entry; - } - - static int InsertMany( - std::vector login_world_servers_entries - ) - { - std::vector insert_chunks; - - for (auto &login_world_servers_entry: login_world_servers_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(login_world_servers_entry.long_name) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.short_name) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.tag_description) + "'"); - insert_values.push_back(std::to_string(login_world_servers_entry.login_server_list_type_id)); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_login_date) + "'"); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.last_ip_address) + "'"); - insert_values.push_back(std::to_string(login_world_servers_entry.login_server_admin_id)); - insert_values.push_back(std::to_string(login_world_servers_entry.is_server_trusted)); - insert_values.push_back("'" + EscapeString(login_world_servers_entry.note) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginWorldServers entry{}; - - entry.id = atoi(row[0]); - entry.long_name = row[1] ? row[1] : ""; - entry.short_name = row[2] ? row[2] : ""; - entry.tag_description = row[3] ? row[3] : ""; - entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5] ? row[5] : ""; - entry.last_ip_address = row[6] ? row[6] : ""; - entry.login_server_admin_id = atoi(row[7]); - entry.is_server_trusted = atoi(row[8]); - entry.note = row[9] ? row[9] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoginWorldServers entry{}; - - entry.id = atoi(row[0]); - entry.long_name = row[1] ? row[1] : ""; - entry.short_name = row[2] ? row[2] : ""; - entry.tag_description = row[3] ? row[3] : ""; - entry.login_server_list_type_id = atoi(row[4]); - entry.last_login_date = row[5] ? row[5] : ""; - entry.last_ip_address = row[6] ? row[6] : ""; - entry.login_server_admin_id = atoi(row[7]); - entry.is_server_trusted = atoi(row[8]); - entry.note = row[9] ? row[9] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index fb7bdc1ad..2d31a3241 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_logsys_categories_repository.h" -class LogsysCategoriesRepository { +class LogsysCategoriesRepository: public BaseLogsysCategoriesRepository { public: - struct LogsysCategories { - int log_category_id; - std::string log_category_description; - int16 log_to_console; - int16 log_to_file; - int16 log_to_gmsay; - }; - static std::string PrimaryKey() - { - return std::string("log_category_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LogsysCategoriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LogsysCategoriesRepository::GetWhereNeverExpires() + * LogsysCategoriesRepository::GetWhereXAndY() + * LogsysCategoriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "log_category_id", - "log_category_description", - "log_to_console", - "log_to_file", - "log_to_gmsay", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("logsys_categories"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LogsysCategories NewEntity() - { - LogsysCategories entry{}; - - entry.log_category_id = 0; - entry.log_category_description = ""; - entry.log_to_console = 0; - entry.log_to_file = 0; - entry.log_to_gmsay = 0; - - return entry; - } - - static LogsysCategories GetLogsysCategoriesEntry( - const std::vector &logsys_categoriess, - int logsys_categories_id - ) - { - for (auto &logsys_categories : logsys_categoriess) { - if (logsys_categories.log_category_id == logsys_categories_id) { - return logsys_categories; - } - } - - return NewEntity(); - } - - static LogsysCategories FindOne( - int logsys_categories_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - logsys_categories_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LogsysCategories entry{}; - - entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1] ? row[1] : ""; - entry.log_to_console = atoi(row[2]); - entry.log_to_file = atoi(row[3]); - entry.log_to_gmsay = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int logsys_categories_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - logsys_categories_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LogsysCategories logsys_categories_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(logsys_categories_entry.log_category_description) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(logsys_categories_entry.log_to_console)); - update_values.push_back(columns[3] + " = " + std::to_string(logsys_categories_entry.log_to_file)); - update_values.push_back(columns[4] + " = " + std::to_string(logsys_categories_entry.log_to_gmsay)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - logsys_categories_entry.log_category_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LogsysCategories InsertOne( - LogsysCategories logsys_categories_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - logsys_categories_entry.id = results.LastInsertedID(); - return logsys_categories_entry; - } - - logsys_categories_entry = LogsysCategoriesRepository::NewEntity(); - - return logsys_categories_entry; - } - - static int InsertMany( - std::vector logsys_categories_entries - ) - { - std::vector insert_chunks; - - for (auto &logsys_categories_entry: logsys_categories_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); - insert_values.push_back(std::to_string(logsys_categories_entry.log_to_gmsay)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LogsysCategories entry{}; - - entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1] ? row[1] : ""; - entry.log_to_console = atoi(row[2]); - entry.log_to_file = atoi(row[3]); - entry.log_to_gmsay = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LogsysCategories entry{}; - - entry.log_category_id = atoi(row[0]); - entry.log_category_description = row[1] ? row[1] : ""; - entry.log_to_console = atoi(row[2]); - entry.log_to_file = atoi(row[3]); - entry.log_to_gmsay = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h index 07bbfdbca..6de1e327c 100644 --- a/common/repositories/lootdrop_entries_repository.h +++ b/common/repositories/lootdrop_entries_repository.h @@ -23,335 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_lootdrop_entries_repository.h" -class LootdropEntriesRepository { +class LootdropEntriesRepository: public BaseLootdropEntriesRepository { public: - struct LootdropEntries { - int lootdrop_id; - int item_id; - int16 item_charges; - int8 equip_item; - float chance; - float disabled_chance; - int8 minlevel; - int8 maxlevel; - int8 multiplier; - }; - static std::string PrimaryKey() - { - return std::string("item_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LootdropEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LootdropEntriesRepository::GetWhereNeverExpires() + * LootdropEntriesRepository::GetWhereXAndY() + * LootdropEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "lootdrop_id", - "item_id", - "item_charges", - "equip_item", - "chance", - "disabled_chance", - "minlevel", - "maxlevel", - "multiplier", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("lootdrop_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LootdropEntries NewEntity() - { - LootdropEntries entry{}; - - entry.lootdrop_id = 0; - entry.item_id = 0; - entry.item_charges = 1; - entry.equip_item = 0; - entry.chance = 1; - entry.disabled_chance = 0; - entry.minlevel = 0; - entry.maxlevel = 127; - entry.multiplier = 1; - - return entry; - } - - static LootdropEntries GetLootdropEntriesEntry( - const std::vector &lootdrop_entriess, - int lootdrop_entries_id - ) - { - for (auto &lootdrop_entries : lootdrop_entriess) { - if (lootdrop_entries.item_id == lootdrop_entries_id) { - return lootdrop_entries; - } - } - - return NewEntity(); - } - - static LootdropEntries FindOne( - int lootdrop_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - lootdrop_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LootdropEntries entry{}; - - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int lootdrop_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - lootdrop_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LootdropEntries lootdrop_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entries_entry.item_charges)); - update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); - update_values.push_back(columns[4] + " = " + std::to_string(lootdrop_entries_entry.chance)); - update_values.push_back(columns[5] + " = " + std::to_string(lootdrop_entries_entry.disabled_chance)); - update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.minlevel)); - update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.maxlevel)); - update_values.push_back(columns[8] + " = " + std::to_string(lootdrop_entries_entry.multiplier)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - lootdrop_entries_entry.item_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LootdropEntries InsertOne( - LootdropEntries lootdrop_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - lootdrop_entries_entry.id = results.LastInsertedID(); - return lootdrop_entries_entry; - } - - lootdrop_entries_entry = LootdropEntriesRepository::NewEntity(); - - return lootdrop_entries_entry; - } - - static int InsertMany( - std::vector lootdrop_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &lootdrop_entries_entry: lootdrop_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LootdropEntries entry{}; - - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LootdropEntries entry{}; - - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h index 45eecb753..c51a86bb9 100644 --- a/common/repositories/lootdrop_repository.h +++ b/common/repositories/lootdrop_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_lootdrop_repository.h" -class LootdropRepository { +class LootdropRepository: public BaseLootdropRepository { public: - struct Lootdrop { - int id; - std::string name; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LootdropRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LootdropRepository::GetWhereNeverExpires() + * LootdropRepository::GetWhereXAndY() + * LootdropRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("lootdrop"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Lootdrop NewEntity() - { - Lootdrop entry{}; - - entry.id = 0; - entry.name = ""; - - return entry; - } - - static Lootdrop GetLootdropEntry( - const std::vector &lootdrops, - int lootdrop_id - ) - { - for (auto &lootdrop : lootdrops) { - if (lootdrop.id == lootdrop_id) { - return lootdrop; - } - } - - return NewEntity(); - } - - static Lootdrop FindOne( - int lootdrop_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - lootdrop_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Lootdrop entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int lootdrop_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - lootdrop_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Lootdrop lootdrop_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(lootdrop_entry.name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - lootdrop_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Lootdrop InsertOne( - Lootdrop lootdrop_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - lootdrop_entry.id = results.LastInsertedID(); - return lootdrop_entry; - } - - lootdrop_entry = LootdropRepository::NewEntity(); - - return lootdrop_entry; - } - - static int InsertMany( - std::vector lootdrop_entries - ) - { - std::vector insert_chunks; - - for (auto &lootdrop_entry: lootdrop_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(lootdrop_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Lootdrop entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Lootdrop entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h index 68b6bfa2c..21590f116 100644 --- a/common/repositories/loottable_entries_repository.h +++ b/common/repositories/loottable_entries_repository.h @@ -23,308 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_loottable_entries_repository.h" -class LoottableEntriesRepository { +class LoottableEntriesRepository: public BaseLoottableEntriesRepository { public: - struct LoottableEntries { - int loottable_id; - int lootdrop_id; - int8 multiplier; - int8 droplimit; - int8 mindrop; - float probability; - }; - static std::string PrimaryKey() - { - return std::string("lootdrop_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoottableEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoottableEntriesRepository::GetWhereNeverExpires() + * LoottableEntriesRepository::GetWhereXAndY() + * LoottableEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "loottable_id", - "lootdrop_id", - "multiplier", - "droplimit", - "mindrop", - "probability", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("loottable_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LoottableEntries NewEntity() - { - LoottableEntries entry{}; - - entry.loottable_id = 0; - entry.lootdrop_id = 0; - entry.multiplier = 1; - entry.droplimit = 0; - entry.mindrop = 0; - entry.probability = 100; - - return entry; - } - - static LoottableEntries GetLoottableEntriesEntry( - const std::vector &loottable_entriess, - int loottable_entries_id - ) - { - for (auto &loottable_entries : loottable_entriess) { - if (loottable_entries.lootdrop_id == loottable_entries_id) { - return loottable_entries; - } - } - - return NewEntity(); - } - - static LoottableEntries FindOne( - int loottable_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - loottable_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LoottableEntries entry{}; - - entry.loottable_id = atoi(row[0]); - entry.lootdrop_id = atoi(row[1]); - entry.multiplier = atoi(row[2]); - entry.droplimit = atoi(row[3]); - entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int loottable_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - loottable_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LoottableEntries loottable_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(loottable_entries_entry.multiplier)); - update_values.push_back(columns[3] + " = " + std::to_string(loottable_entries_entry.droplimit)); - update_values.push_back(columns[4] + " = " + std::to_string(loottable_entries_entry.mindrop)); - update_values.push_back(columns[5] + " = " + std::to_string(loottable_entries_entry.probability)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - loottable_entries_entry.lootdrop_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LoottableEntries InsertOne( - LoottableEntries loottable_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); - insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); - insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); - insert_values.push_back(std::to_string(loottable_entries_entry.probability)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - loottable_entries_entry.id = results.LastInsertedID(); - return loottable_entries_entry; - } - - loottable_entries_entry = LoottableEntriesRepository::NewEntity(); - - return loottable_entries_entry; - } - - static int InsertMany( - std::vector loottable_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &loottable_entries_entry: loottable_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); - insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); - insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); - insert_values.push_back(std::to_string(loottable_entries_entry.probability)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoottableEntries entry{}; - - entry.loottable_id = atoi(row[0]); - entry.lootdrop_id = atoi(row[1]); - entry.multiplier = atoi(row[2]); - entry.droplimit = atoi(row[3]); - entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LoottableEntries entry{}; - - entry.loottable_id = atoi(row[0]); - entry.lootdrop_id = atoi(row[1]); - entry.multiplier = atoi(row[2]); - entry.droplimit = atoi(row[3]); - entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h index 33aa27a42..dc005ebd1 100644 --- a/common/repositories/loottable_repository.h +++ b/common/repositories/loottable_repository.h @@ -23,311 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_loottable_repository.h" -class LoottableRepository { +class LoottableRepository: public BaseLoottableRepository { public: - struct Loottable { - int id; - std::string name; - int mincash; - int maxcash; - int avgcoin; - int8 done; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * LoottableRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * LoottableRepository::GetWhereNeverExpires() + * LoottableRepository::GetWhereXAndY() + * LoottableRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "mincash", - "maxcash", - "avgcoin", - "done", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("loottable"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Loottable NewEntity() - { - Loottable entry{}; - - entry.id = 0; - entry.name = ""; - entry.mincash = 0; - entry.maxcash = 0; - entry.avgcoin = 0; - entry.done = 0; - - return entry; - } - - static Loottable GetLoottableEntry( - const std::vector &loottables, - int loottable_id - ) - { - for (auto &loottable : loottables) { - if (loottable.id == loottable_id) { - return loottable; - } - } - - return NewEntity(); - } - - static Loottable FindOne( - int loottable_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - loottable_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Loottable entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int loottable_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - loottable_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Loottable loottable_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(loottable_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(loottable_entry.mincash)); - update_values.push_back(columns[3] + " = " + std::to_string(loottable_entry.maxcash)); - update_values.push_back(columns[4] + " = " + std::to_string(loottable_entry.avgcoin)); - update_values.push_back(columns[5] + " = " + std::to_string(loottable_entry.done)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - loottable_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Loottable InsertOne( - Loottable loottable_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); - insert_values.push_back(std::to_string(loottable_entry.mincash)); - insert_values.push_back(std::to_string(loottable_entry.maxcash)); - insert_values.push_back(std::to_string(loottable_entry.avgcoin)); - insert_values.push_back(std::to_string(loottable_entry.done)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - loottable_entry.id = results.LastInsertedID(); - return loottable_entry; - } - - loottable_entry = LoottableRepository::NewEntity(); - - return loottable_entry; - } - - static int InsertMany( - std::vector loottable_entries - ) - { - std::vector insert_chunks; - - for (auto &loottable_entry: loottable_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(loottable_entry.name) + "'"); - insert_values.push_back(std::to_string(loottable_entry.mincash)); - insert_values.push_back(std::to_string(loottable_entry.maxcash)); - insert_values.push_back(std::to_string(loottable_entry.avgcoin)); - insert_values.push_back(std::to_string(loottable_entry.done)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Loottable entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Loottable entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index 498f904bb..8852c019b 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -23,329 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_mail_repository.h" -class MailRepository { +class MailRepository: public BaseMailRepository { public: - struct Mail { - int msgid; - int charid; - int timestamp; - std::string from; - std::string subject; - std::string body; - std::string to; - int8 status; - }; - static std::string PrimaryKey() - { - return std::string("msgid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * MailRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * MailRepository::GetWhereNeverExpires() + * MailRepository::GetWhereXAndY() + * MailRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "msgid", - "charid", - "timestamp", - "from", - "subject", - "body", - "to", - "status", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("mail"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Mail NewEntity() - { - Mail entry{}; - - entry.msgid = 0; - entry.charid = 0; - entry.timestamp = 0; - entry.from = ""; - entry.subject = ""; - entry.body = ""; - entry.to = ""; - entry.status = 0; - - return entry; - } - - static Mail GetMailEntry( - const std::vector &mails, - int mail_id - ) - { - for (auto &mail : mails) { - if (mail.msgid == mail_id) { - return mail; - } - } - - return NewEntity(); - } - - static Mail FindOne( - int mail_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - mail_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Mail entry{}; - - entry.msgid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.timestamp = atoi(row[2]); - entry.from = row[3] ? row[3] : ""; - entry.subject = row[4] ? row[4] : ""; - entry.body = row[5] ? row[5] : ""; - entry.to = row[6] ? row[6] : ""; - entry.status = atoi(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int mail_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - mail_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Mail mail_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(mail_entry.charid)); - update_values.push_back(columns[2] + " = " + std::to_string(mail_entry.timestamp)); - update_values.push_back(columns[3] + " = '" + EscapeString(mail_entry.from) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(mail_entry.subject) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(mail_entry.body) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(mail_entry.to) + "'"); - update_values.push_back(columns[7] + " = " + std::to_string(mail_entry.status)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - mail_entry.msgid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Mail InsertOne( - Mail mail_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(mail_entry.charid)); - insert_values.push_back(std::to_string(mail_entry.timestamp)); - insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); - insert_values.push_back(std::to_string(mail_entry.status)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - mail_entry.id = results.LastInsertedID(); - return mail_entry; - } - - mail_entry = MailRepository::NewEntity(); - - return mail_entry; - } - - static int InsertMany( - std::vector mail_entries - ) - { - std::vector insert_chunks; - - for (auto &mail_entry: mail_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(mail_entry.charid)); - insert_values.push_back(std::to_string(mail_entry.timestamp)); - insert_values.push_back("'" + EscapeString(mail_entry.from) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.subject) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.body) + "'"); - insert_values.push_back("'" + EscapeString(mail_entry.to) + "'"); - insert_values.push_back(std::to_string(mail_entry.status)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Mail entry{}; - - entry.msgid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.timestamp = atoi(row[2]); - entry.from = row[3] ? row[3] : ""; - entry.subject = row[4] ? row[4] : ""; - entry.body = row[5] ? row[5] : ""; - entry.to = row[6] ? row[6] : ""; - entry.status = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Mail entry{}; - - entry.msgid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.timestamp = atoi(row[2]); - entry.from = row[3] ? row[3] : ""; - entry.subject = row[4] ? row[4] : ""; - entry.body = row[5] ? row[5] : ""; - entry.to = row[6] ? row[6] : ""; - entry.status = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/merchantlist_repository.h b/common/repositories/merchantlist_repository.h index 7ebb68664..0ce9f24a5 100644 --- a/common/repositories/merchantlist_repository.h +++ b/common/repositories/merchantlist_repository.h @@ -23,326 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_merchantlist_repository.h" -class MerchantlistRepository { +class MerchantlistRepository: public BaseMerchantlistRepository { public: - struct Merchantlist { - int merchantid; - int slot; - int item; - int16 faction_required; - int8 level_required; - int16 alt_currency_cost; - int classes_required; - int probability; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * MerchantlistRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * MerchantlistRepository::GetWhereNeverExpires() + * MerchantlistRepository::GetWhereXAndY() + * MerchantlistRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "merchantid", - "slot", - "item", - "faction_required", - "level_required", - "alt_currency_cost", - "classes_required", - "probability", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("merchantlist"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Merchantlist NewEntity() - { - Merchantlist entry{}; - - entry.merchantid = 0; - entry.slot = 0; - entry.item = 0; - entry.faction_required = -100; - entry.level_required = 0; - entry.alt_currency_cost = 0; - entry.classes_required = 65535; - entry.probability = 100; - - return entry; - } - - static Merchantlist GetMerchantlistEntry( - const std::vector &merchantlists, - int merchantlist_id - ) - { - for (auto &merchantlist : merchantlists) { - if (merchantlist.slot == merchantlist_id) { - return merchantlist; - } - } - - return NewEntity(); - } - - static Merchantlist FindOne( - int merchantlist_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - merchantlist_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Merchantlist entry{}; - - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int merchantlist_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - merchantlist_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Merchantlist merchantlist_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_entry.item)); - update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_entry.faction_required)); - update_values.push_back(columns[4] + " = " + std::to_string(merchantlist_entry.level_required)); - update_values.push_back(columns[5] + " = " + std::to_string(merchantlist_entry.alt_currency_cost)); - update_values.push_back(columns[6] + " = " + std::to_string(merchantlist_entry.classes_required)); - update_values.push_back(columns[7] + " = " + std::to_string(merchantlist_entry.probability)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - merchantlist_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Merchantlist InsertOne( - Merchantlist merchantlist_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(merchantlist_entry.item)); - insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); - insert_values.push_back(std::to_string(merchantlist_entry.level_required)); - insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); - insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); - insert_values.push_back(std::to_string(merchantlist_entry.probability)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - merchantlist_entry.id = results.LastInsertedID(); - return merchantlist_entry; - } - - merchantlist_entry = MerchantlistRepository::NewEntity(); - - return merchantlist_entry; - } - - static int InsertMany( - std::vector merchantlist_entries - ) - { - std::vector insert_chunks; - - for (auto &merchantlist_entry: merchantlist_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(merchantlist_entry.item)); - insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); - insert_values.push_back(std::to_string(merchantlist_entry.level_required)); - insert_values.push_back(std::to_string(merchantlist_entry.alt_currency_cost)); - insert_values.push_back(std::to_string(merchantlist_entry.classes_required)); - insert_values.push_back(std::to_string(merchantlist_entry.probability)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Merchantlist entry{}; - - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Merchantlist entry{}; - - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h index c4d560ee0..4ff1040dd 100644 --- a/common/repositories/merchantlist_temp_repository.h +++ b/common/repositories/merchantlist_temp_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_merchantlist_temp_repository.h" -class MerchantlistTempRepository { +class MerchantlistTempRepository: public BaseMerchantlistTempRepository { public: - struct MerchantlistTemp { - int npcid; - int8 slot; - int itemid; - int charges; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * MerchantlistTempRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * MerchantlistTempRepository::GetWhereNeverExpires() + * MerchantlistTempRepository::GetWhereXAndY() + * MerchantlistTempRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "npcid", - "slot", - "itemid", - "charges", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("merchantlist_temp"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static MerchantlistTemp NewEntity() - { - MerchantlistTemp entry{}; - - entry.npcid = 0; - entry.slot = 0; - entry.itemid = 0; - entry.charges = 1; - - return entry; - } - - static MerchantlistTemp GetMerchantlistTempEntry( - const std::vector &merchantlist_temps, - int merchantlist_temp_id - ) - { - for (auto &merchantlist_temp : merchantlist_temps) { - if (merchantlist_temp.slot == merchantlist_temp_id) { - return merchantlist_temp; - } - } - - return NewEntity(); - } - - static MerchantlistTemp FindOne( - int merchantlist_temp_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - merchantlist_temp_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - MerchantlistTemp entry{}; - - entry.npcid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int merchantlist_temp_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - merchantlist_temp_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - MerchantlistTemp merchantlist_temp_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_temp_entry.itemid)); - update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_temp_entry.charges)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - merchantlist_temp_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static MerchantlistTemp InsertOne( - MerchantlistTemp merchantlist_temp_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); - insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - merchantlist_temp_entry.id = results.LastInsertedID(); - return merchantlist_temp_entry; - } - - merchantlist_temp_entry = MerchantlistTempRepository::NewEntity(); - - return merchantlist_temp_entry; - } - - static int InsertMany( - std::vector merchantlist_temp_entries - ) - { - std::vector insert_chunks; - - for (auto &merchantlist_temp_entry: merchantlist_temp_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); - insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - MerchantlistTemp entry{}; - - entry.npcid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - MerchantlistTemp entry{}; - - entry.npcid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.itemid = atoi(row[2]); - entry.charges = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h index e9046b321..64b7aaf7b 100644 --- a/common/repositories/name_filter_repository.h +++ b/common/repositories/name_filter_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_name_filter_repository.h" -class NameFilterRepository { +class NameFilterRepository: public BaseNameFilterRepository { public: - struct NameFilter { - int id; - std::string name; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NameFilterRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NameFilterRepository::GetWhereNeverExpires() + * NameFilterRepository::GetWhereXAndY() + * NameFilterRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("name_filter"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NameFilter NewEntity() - { - NameFilter entry{}; - - entry.id = 0; - entry.name = ""; - - return entry; - } - - static NameFilter GetNameFilterEntry( - const std::vector &name_filters, - int name_filter_id - ) - { - for (auto &name_filter : name_filters) { - if (name_filter.id == name_filter_id) { - return name_filter; - } - } - - return NewEntity(); - } - - static NameFilter FindOne( - int name_filter_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - name_filter_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NameFilter entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int name_filter_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - name_filter_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NameFilter name_filter_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(name_filter_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - name_filter_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NameFilter InsertOne( - NameFilter name_filter_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - name_filter_entry.id = results.LastInsertedID(); - return name_filter_entry; - } - - name_filter_entry = NameFilterRepository::NewEntity(); - - return name_filter_entry; - } - - static int InsertMany( - std::vector name_filter_entries - ) - { - std::vector insert_chunks; - - for (auto &name_filter_entry: name_filter_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(name_filter_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NameFilter entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NameFilter entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 55e1b34f5..9e6d3ac99 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_emotes_repository.h" -class NpcEmotesRepository { +class NpcEmotesRepository: public BaseNpcEmotesRepository { public: - struct NpcEmotes { - int id; - int emoteid; - int8 event_; - int8 type; - std::string text; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcEmotesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcEmotesRepository::GetWhereNeverExpires() + * NpcEmotesRepository::GetWhereXAndY() + * NpcEmotesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "emoteid", - "event_", - "type", - "text", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_emotes"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcEmotes NewEntity() - { - NpcEmotes entry{}; - - entry.id = 0; - entry.emoteid = 0; - entry.event_ = 0; - entry.type = 0; - entry.text = ""; - - return entry; - } - - static NpcEmotes GetNpcEmotesEntry( - const std::vector &npc_emotess, - int npc_emotes_id - ) - { - for (auto &npc_emotes : npc_emotess) { - if (npc_emotes.id == npc_emotes_id) { - return npc_emotes; - } - } - - return NewEntity(); - } - - static NpcEmotes FindOne( - int npc_emotes_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_emotes_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcEmotes entry{}; - - entry.id = atoi(row[0]); - entry.emoteid = atoi(row[1]); - entry.event_ = atoi(row[2]); - entry.type = atoi(row[3]); - entry.text = row[4] ? row[4] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_emotes_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_emotes_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcEmotes npc_emotes_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(npc_emotes_entry.emoteid)); - update_values.push_back(columns[2] + " = " + std::to_string(npc_emotes_entry.event_)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_emotes_entry.type)); - update_values.push_back(columns[4] + " = '" + EscapeString(npc_emotes_entry.text) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_emotes_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcEmotes InsertOne( - NpcEmotes npc_emotes_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); - insert_values.push_back(std::to_string(npc_emotes_entry.event_)); - insert_values.push_back(std::to_string(npc_emotes_entry.type)); - insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_emotes_entry.id = results.LastInsertedID(); - return npc_emotes_entry; - } - - npc_emotes_entry = NpcEmotesRepository::NewEntity(); - - return npc_emotes_entry; - } - - static int InsertMany( - std::vector npc_emotes_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_emotes_entry: npc_emotes_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_emotes_entry.emoteid)); - insert_values.push_back(std::to_string(npc_emotes_entry.event_)); - insert_values.push_back(std::to_string(npc_emotes_entry.type)); - insert_values.push_back("'" + EscapeString(npc_emotes_entry.text) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcEmotes entry{}; - - entry.id = atoi(row[0]); - entry.emoteid = atoi(row[1]); - entry.event_ = atoi(row[2]); - entry.type = atoi(row[3]); - entry.text = row[4] ? row[4] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcEmotes entry{}; - - entry.id = atoi(row[0]); - entry.emoteid = atoi(row[1]); - entry.event_ = atoi(row[2]); - entry.type = atoi(row[3]); - entry.text = row[4] ? row[4] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_faction_entries_repository.h b/common/repositories/npc_faction_entries_repository.h index 24a9bc4d8..1b418804b 100644 --- a/common/repositories/npc_faction_entries_repository.h +++ b/common/repositories/npc_faction_entries_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_faction_entries_repository.h" -class NpcFactionEntriesRepository { +class NpcFactionEntriesRepository: public BaseNpcFactionEntriesRepository { public: - struct NpcFactionEntries { - int npc_faction_id; - int faction_id; - int value; - int8 npc_value; - int8 temp; - }; - static std::string PrimaryKey() - { - return std::string("faction_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcFactionEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcFactionEntriesRepository::GetWhereNeverExpires() + * NpcFactionEntriesRepository::GetWhereXAndY() + * NpcFactionEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "npc_faction_id", - "faction_id", - "value", - "npc_value", - "temp", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_faction_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcFactionEntries NewEntity() - { - NpcFactionEntries entry{}; - - entry.npc_faction_id = 0; - entry.faction_id = 0; - entry.value = 0; - entry.npc_value = 0; - entry.temp = 0; - - return entry; - } - - static NpcFactionEntries GetNpcFactionEntriesEntry( - const std::vector &npc_faction_entriess, - int npc_faction_entries_id - ) - { - for (auto &npc_faction_entries : npc_faction_entriess) { - if (npc_faction_entries.faction_id == npc_faction_entries_id) { - return npc_faction_entries; - } - } - - return NewEntity(); - } - - static NpcFactionEntries FindOne( - int npc_faction_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_faction_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcFactionEntries entry{}; - - entry.npc_faction_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.npc_value = atoi(row[3]); - entry.temp = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_faction_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_faction_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcFactionEntries npc_faction_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entries_entry.value)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entries_entry.npc_value)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_faction_entries_entry.temp)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_faction_entries_entry.faction_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcFactionEntries InsertOne( - NpcFactionEntries npc_faction_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); - insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); - insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_faction_entries_entry.id = results.LastInsertedID(); - return npc_faction_entries_entry; - } - - npc_faction_entries_entry = NpcFactionEntriesRepository::NewEntity(); - - return npc_faction_entries_entry; - } - - static int InsertMany( - std::vector npc_faction_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_faction_entries_entry: npc_faction_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); - insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); - insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcFactionEntries entry{}; - - entry.npc_faction_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.npc_value = atoi(row[3]); - entry.temp = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcFactionEntries entry{}; - - entry.npc_faction_id = atoi(row[0]); - entry.faction_id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.npc_value = atoi(row[3]); - entry.temp = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index 066413ff9..9074099c5 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_faction_repository.h" -class NpcFactionRepository { +class NpcFactionRepository: public BaseNpcFactionRepository { public: - struct NpcFaction { - int id; - std::string name; - int primaryfaction; - int8 ignore_primary_assist; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcFactionRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcFactionRepository::GetWhereNeverExpires() + * NpcFactionRepository::GetWhereXAndY() + * NpcFactionRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "primaryfaction", - "ignore_primary_assist", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_faction"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcFaction NewEntity() - { - NpcFaction entry{}; - - entry.id = 0; - entry.name = ""; - entry.primaryfaction = 0; - entry.ignore_primary_assist = 0; - - return entry; - } - - static NpcFaction GetNpcFactionEntry( - const std::vector &npc_factions, - int npc_faction_id - ) - { - for (auto &npc_faction : npc_factions) { - if (npc_faction.id == npc_faction_id) { - return npc_faction; - } - } - - return NewEntity(); - } - - static NpcFaction FindOne( - int npc_faction_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_faction_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcFaction entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.primaryfaction = atoi(row[2]); - entry.ignore_primary_assist = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_faction_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_faction_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcFaction npc_faction_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(npc_faction_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entry.primaryfaction)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entry.ignore_primary_assist)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_faction_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcFaction InsertOne( - NpcFaction npc_faction_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); - insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_faction_entry.id = results.LastInsertedID(); - return npc_faction_entry; - } - - npc_faction_entry = NpcFactionRepository::NewEntity(); - - return npc_faction_entry; - } - - static int InsertMany( - std::vector npc_faction_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_faction_entry: npc_faction_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_faction_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_faction_entry.primaryfaction)); - insert_values.push_back(std::to_string(npc_faction_entry.ignore_primary_assist)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcFaction entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.primaryfaction = atoi(row[2]); - entry.ignore_primary_assist = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcFaction entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.primaryfaction = atoi(row[2]); - entry.ignore_primary_assist = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index a7f7f80a4..9606ba04b 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -23,506 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_scale_global_base_repository.h" -class NpcScaleGlobalBaseRepository { +class NpcScaleGlobalBaseRepository: public BaseNpcScaleGlobalBaseRepository { public: - struct NpcScaleGlobalBase { - int type; - int level; - int ac; - int hp; - int accuracy; - int slow_mitigation; - int attack; - int strength; - int stamina; - int dexterity; - int agility; - int intelligence; - int wisdom; - int charisma; - int magic_resist; - int cold_resist; - int fire_resist; - int poison_resist; - int disease_resist; - int corruption_resist; - int physical_resist; - int min_dmg; - int max_dmg; - int hp_regen_rate; - int attack_delay; - int spell_scale; - int heal_scale; - std::string special_abilities; - }; - static std::string PrimaryKey() - { - return std::string("level"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcScaleGlobalBaseRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcScaleGlobalBaseRepository::GetWhereNeverExpires() + * NpcScaleGlobalBaseRepository::GetWhereXAndY() + * NpcScaleGlobalBaseRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "type", - "level", - "ac", - "hp", - "accuracy", - "slow_mitigation", - "attack", - "strength", - "stamina", - "dexterity", - "agility", - "intelligence", - "wisdom", - "charisma", - "magic_resist", - "cold_resist", - "fire_resist", - "poison_resist", - "disease_resist", - "corruption_resist", - "physical_resist", - "min_dmg", - "max_dmg", - "hp_regen_rate", - "attack_delay", - "spell_scale", - "heal_scale", - "special_abilities", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_scale_global_base"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcScaleGlobalBase NewEntity() - { - NpcScaleGlobalBase entry{}; - - entry.type = 0; - entry.level = 0; - entry.ac = 0; - entry.hp = 0; - entry.accuracy = 0; - entry.slow_mitigation = 0; - entry.attack = 0; - entry.strength = 0; - entry.stamina = 0; - entry.dexterity = 0; - entry.agility = 0; - entry.intelligence = 0; - entry.wisdom = 0; - entry.charisma = 0; - entry.magic_resist = 0; - entry.cold_resist = 0; - entry.fire_resist = 0; - entry.poison_resist = 0; - entry.disease_resist = 0; - entry.corruption_resist = 0; - entry.physical_resist = 0; - entry.min_dmg = 0; - entry.max_dmg = 0; - entry.hp_regen_rate = 0; - entry.attack_delay = 0; - entry.spell_scale = 100; - entry.heal_scale = 100; - entry.special_abilities = ""; - - return entry; - } - - static NpcScaleGlobalBase GetNpcScaleGlobalBaseEntry( - const std::vector &npc_scale_global_bases, - int npc_scale_global_base_id - ) - { - for (auto &npc_scale_global_base : npc_scale_global_bases) { - if (npc_scale_global_base.level == npc_scale_global_base_id) { - return npc_scale_global_base; - } - } - - return NewEntity(); - } - - static NpcScaleGlobalBase FindOne( - int npc_scale_global_base_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_scale_global_base_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcScaleGlobalBase entry{}; - - entry.type = atoi(row[0]); - entry.level = atoi(row[1]); - entry.ac = atoi(row[2]); - entry.hp = atoi(row[3]); - entry.accuracy = atoi(row[4]); - entry.slow_mitigation = atoi(row[5]); - entry.attack = atoi(row[6]); - entry.strength = atoi(row[7]); - entry.stamina = atoi(row[8]); - entry.dexterity = atoi(row[9]); - entry.agility = atoi(row[10]); - entry.intelligence = atoi(row[11]); - entry.wisdom = atoi(row[12]); - entry.charisma = atoi(row[13]); - entry.magic_resist = atoi(row[14]); - entry.cold_resist = atoi(row[15]); - entry.fire_resist = atoi(row[16]); - entry.poison_resist = atoi(row[17]); - entry.disease_resist = atoi(row[18]); - entry.corruption_resist = atoi(row[19]); - entry.physical_resist = atoi(row[20]); - entry.min_dmg = atoi(row[21]); - entry.max_dmg = atoi(row[22]); - entry.hp_regen_rate = atoi(row[23]); - entry.attack_delay = atoi(row[24]); - entry.spell_scale = atoi(row[25]); - entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27] ? row[27] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_scale_global_base_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_scale_global_base_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcScaleGlobalBase npc_scale_global_base_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(npc_scale_global_base_entry.ac)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_scale_global_base_entry.hp)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_scale_global_base_entry.accuracy)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_scale_global_base_entry.slow_mitigation)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_scale_global_base_entry.attack)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_scale_global_base_entry.strength)); - update_values.push_back(columns[8] + " = " + std::to_string(npc_scale_global_base_entry.stamina)); - update_values.push_back(columns[9] + " = " + std::to_string(npc_scale_global_base_entry.dexterity)); - update_values.push_back(columns[10] + " = " + std::to_string(npc_scale_global_base_entry.agility)); - update_values.push_back(columns[11] + " = " + std::to_string(npc_scale_global_base_entry.intelligence)); - update_values.push_back(columns[12] + " = " + std::to_string(npc_scale_global_base_entry.wisdom)); - update_values.push_back(columns[13] + " = " + std::to_string(npc_scale_global_base_entry.charisma)); - update_values.push_back(columns[14] + " = " + std::to_string(npc_scale_global_base_entry.magic_resist)); - update_values.push_back(columns[15] + " = " + std::to_string(npc_scale_global_base_entry.cold_resist)); - update_values.push_back(columns[16] + " = " + std::to_string(npc_scale_global_base_entry.fire_resist)); - update_values.push_back(columns[17] + " = " + std::to_string(npc_scale_global_base_entry.poison_resist)); - update_values.push_back(columns[18] + " = " + std::to_string(npc_scale_global_base_entry.disease_resist)); - update_values.push_back(columns[19] + " = " + std::to_string(npc_scale_global_base_entry.corruption_resist)); - update_values.push_back(columns[20] + " = " + std::to_string(npc_scale_global_base_entry.physical_resist)); - update_values.push_back(columns[21] + " = " + std::to_string(npc_scale_global_base_entry.min_dmg)); - update_values.push_back(columns[22] + " = " + std::to_string(npc_scale_global_base_entry.max_dmg)); - update_values.push_back(columns[23] + " = " + std::to_string(npc_scale_global_base_entry.hp_regen_rate)); - update_values.push_back(columns[24] + " = " + std::to_string(npc_scale_global_base_entry.attack_delay)); - update_values.push_back(columns[25] + " = " + std::to_string(npc_scale_global_base_entry.spell_scale)); - update_values.push_back(columns[26] + " = " + std::to_string(npc_scale_global_base_entry.heal_scale)); - update_values.push_back(columns[27] + " = '" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_scale_global_base_entry.level - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcScaleGlobalBase InsertOne( - NpcScaleGlobalBase npc_scale_global_base_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); - insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_scale_global_base_entry.id = results.LastInsertedID(); - return npc_scale_global_base_entry; - } - - npc_scale_global_base_entry = NpcScaleGlobalBaseRepository::NewEntity(); - - return npc_scale_global_base_entry; - } - - static int InsertMany( - std::vector npc_scale_global_base_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_scale_global_base_entry: npc_scale_global_base_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.slow_mitigation)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.strength)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.stamina)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.dexterity)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.agility)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.intelligence)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.wisdom)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.charisma)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.magic_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.cold_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.fire_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.poison_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.disease_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.corruption_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.physical_resist)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.min_dmg)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.max_dmg)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp_regen_rate)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.attack_delay)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.spell_scale)); - insert_values.push_back(std::to_string(npc_scale_global_base_entry.heal_scale)); - insert_values.push_back("'" + EscapeString(npc_scale_global_base_entry.special_abilities) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcScaleGlobalBase entry{}; - - entry.type = atoi(row[0]); - entry.level = atoi(row[1]); - entry.ac = atoi(row[2]); - entry.hp = atoi(row[3]); - entry.accuracy = atoi(row[4]); - entry.slow_mitigation = atoi(row[5]); - entry.attack = atoi(row[6]); - entry.strength = atoi(row[7]); - entry.stamina = atoi(row[8]); - entry.dexterity = atoi(row[9]); - entry.agility = atoi(row[10]); - entry.intelligence = atoi(row[11]); - entry.wisdom = atoi(row[12]); - entry.charisma = atoi(row[13]); - entry.magic_resist = atoi(row[14]); - entry.cold_resist = atoi(row[15]); - entry.fire_resist = atoi(row[16]); - entry.poison_resist = atoi(row[17]); - entry.disease_resist = atoi(row[18]); - entry.corruption_resist = atoi(row[19]); - entry.physical_resist = atoi(row[20]); - entry.min_dmg = atoi(row[21]); - entry.max_dmg = atoi(row[22]); - entry.hp_regen_rate = atoi(row[23]); - entry.attack_delay = atoi(row[24]); - entry.spell_scale = atoi(row[25]); - entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27] ? row[27] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcScaleGlobalBase entry{}; - - entry.type = atoi(row[0]); - entry.level = atoi(row[1]); - entry.ac = atoi(row[2]); - entry.hp = atoi(row[3]); - entry.accuracy = atoi(row[4]); - entry.slow_mitigation = atoi(row[5]); - entry.attack = atoi(row[6]); - entry.strength = atoi(row[7]); - entry.stamina = atoi(row[8]); - entry.dexterity = atoi(row[9]); - entry.agility = atoi(row[10]); - entry.intelligence = atoi(row[11]); - entry.wisdom = atoi(row[12]); - entry.charisma = atoi(row[13]); - entry.magic_resist = atoi(row[14]); - entry.cold_resist = atoi(row[15]); - entry.fire_resist = atoi(row[16]); - entry.poison_resist = atoi(row[17]); - entry.disease_resist = atoi(row[18]); - entry.corruption_resist = atoi(row[19]); - entry.physical_resist = atoi(row[20]); - entry.min_dmg = atoi(row[21]); - entry.max_dmg = atoi(row[22]); - entry.hp_regen_rate = atoi(row[23]); - entry.attack_delay = atoi(row[24]); - entry.spell_scale = atoi(row[25]); - entry.heal_scale = atoi(row[26]); - entry.special_abilities = row[27] ? row[27] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_spells_effects_entries_repository.h b/common/repositories/npc_spells_effects_entries_repository.h index 04a1b0e79..c63a5d506 100644 --- a/common/repositories/npc_spells_effects_entries_repository.h +++ b/common/repositories/npc_spells_effects_entries_repository.h @@ -23,329 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_spells_effects_entries_repository.h" -class NpcSpellsEffectsEntriesRepository { +class NpcSpellsEffectsEntriesRepository: public BaseNpcSpellsEffectsEntriesRepository { public: - struct NpcSpellsEffectsEntries { - int id; - int npc_spells_effects_id; - int16 spell_effect_id; - int8 minlevel; - int8 maxlevel; - int se_base; - int se_limit; - int se_max; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcSpellsEffectsEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcSpellsEffectsEntriesRepository::GetWhereNeverExpires() + * NpcSpellsEffectsEntriesRepository::GetWhereXAndY() + * NpcSpellsEffectsEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "npc_spells_effects_id", - "spell_effect_id", - "minlevel", - "maxlevel", - "se_base", - "se_limit", - "se_max", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_spells_effects_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcSpellsEffectsEntries NewEntity() - { - NpcSpellsEffectsEntries entry{}; - - entry.id = 0; - entry.npc_spells_effects_id = 0; - entry.spell_effect_id = 0; - entry.minlevel = 0; - entry.maxlevel = 255; - entry.se_base = 0; - entry.se_limit = 0; - entry.se_max = 0; - - return entry; - } - - static NpcSpellsEffectsEntries GetNpcSpellsEffectsEntriesEntry( - const std::vector &npc_spells_effects_entriess, - int npc_spells_effects_entries_id - ) - { - for (auto &npc_spells_effects_entries : npc_spells_effects_entriess) { - if (npc_spells_effects_entries.id == npc_spells_effects_entries_id) { - return npc_spells_effects_entries; - } - } - - return NewEntity(); - } - - static NpcSpellsEffectsEntries FindOne( - int npc_spells_effects_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_spells_effects_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcSpellsEffectsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_effects_id = atoi(row[1]); - entry.spell_effect_id = atoi(row[2]); - entry.minlevel = atoi(row[3]); - entry.maxlevel = atoi(row[4]); - entry.se_base = atoi(row[5]); - entry.se_limit = atoi(row[6]); - entry.se_max = atoi(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_spells_effects_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_spells_effects_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcSpellsEffectsEntries npc_spells_effects_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); - update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_effects_entries_entry.minlevel)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_effects_entries_entry.maxlevel)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_effects_entries_entry.se_base)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_effects_entries_entry.se_limit)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_effects_entries_entry.se_max)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_spells_effects_entries_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcSpellsEffectsEntries InsertOne( - NpcSpellsEffectsEntries npc_spells_effects_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_spells_effects_entries_entry.id = results.LastInsertedID(); - return npc_spells_effects_entries_entry; - } - - npc_spells_effects_entries_entry = NpcSpellsEffectsEntriesRepository::NewEntity(); - - return npc_spells_effects_entries_entry; - } - - static int InsertMany( - std::vector npc_spells_effects_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_spells_effects_entries_entry: npc_spells_effects_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.npc_spells_effects_id)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.spell_effect_id)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.minlevel)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_base)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_limit)); - insert_values.push_back(std::to_string(npc_spells_effects_entries_entry.se_max)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEffectsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_effects_id = atoi(row[1]); - entry.spell_effect_id = atoi(row[2]); - entry.minlevel = atoi(row[3]); - entry.maxlevel = atoi(row[4]); - entry.se_base = atoi(row[5]); - entry.se_limit = atoi(row[6]); - entry.se_max = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEffectsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_effects_id = atoi(row[1]); - entry.spell_effect_id = atoi(row[2]); - entry.minlevel = atoi(row[3]); - entry.maxlevel = atoi(row[4]); - entry.se_base = atoi(row[5]); - entry.se_limit = atoi(row[6]); - entry.se_max = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index 5dc32d2ec..f1a352719 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_spells_effects_repository.h" -class NpcSpellsEffectsRepository { +class NpcSpellsEffectsRepository: public BaseNpcSpellsEffectsRepository { public: - struct NpcSpellsEffects { - int id; - std::string name; - int parent_list; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcSpellsEffectsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcSpellsEffectsRepository::GetWhereNeverExpires() + * NpcSpellsEffectsRepository::GetWhereXAndY() + * NpcSpellsEffectsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "parent_list", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_spells_effects"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcSpellsEffects NewEntity() - { - NpcSpellsEffects entry{}; - - entry.id = 0; - entry.name = ""; - entry.parent_list = 0; - - return entry; - } - - static NpcSpellsEffects GetNpcSpellsEffectsEntry( - const std::vector &npc_spells_effectss, - int npc_spells_effects_id - ) - { - for (auto &npc_spells_effects : npc_spells_effectss) { - if (npc_spells_effects.id == npc_spells_effects_id) { - return npc_spells_effects; - } - } - - return NewEntity(); - } - - static NpcSpellsEffects FindOne( - int npc_spells_effects_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_spells_effects_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcSpellsEffects entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_spells_effects_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_spells_effects_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcSpellsEffects npc_spells_effects_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_effects_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_effects_entry.parent_list)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_spells_effects_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcSpellsEffects InsertOne( - NpcSpellsEffects npc_spells_effects_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_spells_effects_entry.id = results.LastInsertedID(); - return npc_spells_effects_entry; - } - - npc_spells_effects_entry = NpcSpellsEffectsRepository::NewEntity(); - - return npc_spells_effects_entry; - } - - static int InsertMany( - std::vector npc_spells_effects_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_spells_effects_entry: npc_spells_effects_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_spells_effects_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_spells_effects_entry.parent_list)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEffects entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEffects entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_spells_entries_repository.h b/common/repositories/npc_spells_entries_repository.h index fdfd76bd1..a8d92a306 100644 --- a/common/repositories/npc_spells_entries_repository.h +++ b/common/repositories/npc_spells_entries_repository.h @@ -23,365 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_spells_entries_repository.h" -class NpcSpellsEntriesRepository { +class NpcSpellsEntriesRepository: public BaseNpcSpellsEntriesRepository { public: - struct NpcSpellsEntries { - int id; - int npc_spells_id; - int16 spellid; - int type; - int8 minlevel; - int8 maxlevel; - int16 manacost; - int recast_delay; - int16 priority; - int resist_adjust; - int16 min_hp; - int16 max_hp; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcSpellsEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcSpellsEntriesRepository::GetWhereNeverExpires() + * NpcSpellsEntriesRepository::GetWhereXAndY() + * NpcSpellsEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "npc_spells_id", - "spellid", - "type", - "minlevel", - "maxlevel", - "manacost", - "recast_delay", - "priority", - "resist_adjust", - "min_hp", - "max_hp", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_spells_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcSpellsEntries NewEntity() - { - NpcSpellsEntries entry{}; - - entry.id = 0; - entry.npc_spells_id = 0; - entry.spellid = 0; - entry.type = 0; - entry.minlevel = 0; - entry.maxlevel = 255; - entry.manacost = -1; - entry.recast_delay = -1; - entry.priority = 0; - entry.resist_adjust = 0; - entry.min_hp = 0; - entry.max_hp = 0; - - return entry; - } - - static NpcSpellsEntries GetNpcSpellsEntriesEntry( - const std::vector &npc_spells_entriess, - int npc_spells_entries_id - ) - { - for (auto &npc_spells_entries : npc_spells_entriess) { - if (npc_spells_entries.id == npc_spells_entries_id) { - return npc_spells_entries; - } - } - - return NewEntity(); - } - - static NpcSpellsEntries FindOne( - int npc_spells_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_spells_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcSpellsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_id = atoi(row[1]); - entry.spellid = atoi(row[2]); - entry.type = atoi(row[3]); - entry.minlevel = atoi(row[4]); - entry.maxlevel = atoi(row[5]); - entry.manacost = atoi(row[6]); - entry.recast_delay = atoi(row[7]); - entry.priority = atoi(row[8]); - entry.resist_adjust = atoi(row[9]); - entry.min_hp = atoi(row[10]); - entry.max_hp = atoi(row[11]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_spells_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_spells_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcSpellsEntries npc_spells_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(npc_spells_entries_entry.npc_spells_id)); - update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entries_entry.spellid)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entries_entry.type)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entries_entry.minlevel)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entries_entry.maxlevel)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entries_entry.manacost)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entries_entry.recast_delay)); - update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entries_entry.priority)); - update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entries_entry.resist_adjust)); - update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entries_entry.min_hp)); - update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entries_entry.max_hp)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_spells_entries_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcSpellsEntries InsertOne( - NpcSpellsEntries npc_spells_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_spells_entries_entry.id = results.LastInsertedID(); - return npc_spells_entries_entry; - } - - npc_spells_entries_entry = NpcSpellsEntriesRepository::NewEntity(); - - return npc_spells_entries_entry; - } - - static int InsertMany( - std::vector npc_spells_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_spells_entries_entry: npc_spells_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(npc_spells_entries_entry.npc_spells_id)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.spellid)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.type)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.minlevel)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.manacost)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.recast_delay)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.priority)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.resist_adjust)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.min_hp)); - insert_values.push_back(std::to_string(npc_spells_entries_entry.max_hp)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_id = atoi(row[1]); - entry.spellid = atoi(row[2]); - entry.type = atoi(row[3]); - entry.minlevel = atoi(row[4]); - entry.maxlevel = atoi(row[5]); - entry.manacost = atoi(row[6]); - entry.recast_delay = atoi(row[7]); - entry.priority = atoi(row[8]); - entry.resist_adjust = atoi(row[9]); - entry.min_hp = atoi(row[10]); - entry.max_hp = atoi(row[11]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpellsEntries entry{}; - - entry.id = atoi(row[0]); - entry.npc_spells_id = atoi(row[1]); - entry.spellid = atoi(row[2]); - entry.type = atoi(row[3]); - entry.minlevel = atoi(row[4]); - entry.maxlevel = atoi(row[5]); - entry.manacost = atoi(row[6]); - entry.recast_delay = atoi(row[7]); - entry.priority = atoi(row[8]); - entry.resist_adjust = atoi(row[9]); - entry.min_hp = atoi(row[10]); - entry.max_hp = atoi(row[11]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index f835098f2..5c469e029 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -23,446 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_spells_repository.h" -class NpcSpellsRepository { +class NpcSpellsRepository: public BaseNpcSpellsRepository { public: - struct NpcSpells { - int id; - std::string name; - int parent_list; - int16 attack_proc; - int8 proc_chance; - int16 range_proc; - int16 rproc_chance; - int16 defensive_proc; - int16 dproc_chance; - int fail_recast; - int engaged_no_sp_recast_min; - int engaged_no_sp_recast_max; - int8 engaged_b_self_chance; - int8 engaged_b_other_chance; - int8 engaged_d_chance; - int pursue_no_sp_recast_min; - int pursue_no_sp_recast_max; - int8 pursue_d_chance; - int idle_no_sp_recast_min; - int idle_no_sp_recast_max; - int8 idle_b_chance; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcSpellsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcSpellsRepository::GetWhereNeverExpires() + * NpcSpellsRepository::GetWhereXAndY() + * NpcSpellsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "parent_list", - "attack_proc", - "proc_chance", - "range_proc", - "rproc_chance", - "defensive_proc", - "dproc_chance", - "fail_recast", - "engaged_no_sp_recast_min", - "engaged_no_sp_recast_max", - "engaged_b_self_chance", - "engaged_b_other_chance", - "engaged_d_chance", - "pursue_no_sp_recast_min", - "pursue_no_sp_recast_max", - "pursue_d_chance", - "idle_no_sp_recast_min", - "idle_no_sp_recast_max", - "idle_b_chance", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_spells"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcSpells NewEntity() - { - NpcSpells entry{}; - - entry.id = 0; - entry.name = ""; - entry.parent_list = 0; - entry.attack_proc = -1; - entry.proc_chance = 3; - entry.range_proc = -1; - entry.rproc_chance = 0; - entry.defensive_proc = -1; - entry.dproc_chance = 0; - entry.fail_recast = 0; - entry.engaged_no_sp_recast_min = 0; - entry.engaged_no_sp_recast_max = 0; - entry.engaged_b_self_chance = 0; - entry.engaged_b_other_chance = 0; - entry.engaged_d_chance = 0; - entry.pursue_no_sp_recast_min = 0; - entry.pursue_no_sp_recast_max = 0; - entry.pursue_d_chance = 0; - entry.idle_no_sp_recast_min = 0; - entry.idle_no_sp_recast_max = 0; - entry.idle_b_chance = 0; - - return entry; - } - - static NpcSpells GetNpcSpellsEntry( - const std::vector &npc_spellss, - int npc_spells_id - ) - { - for (auto &npc_spells : npc_spellss) { - if (npc_spells.id == npc_spells_id) { - return npc_spells; - } - } - - return NewEntity(); - } - - static NpcSpells FindOne( - int npc_spells_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_spells_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcSpells entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - entry.attack_proc = atoi(row[3]); - entry.proc_chance = atoi(row[4]); - entry.range_proc = atoi(row[5]); - entry.rproc_chance = atoi(row[6]); - entry.defensive_proc = atoi(row[7]); - entry.dproc_chance = atoi(row[8]); - entry.fail_recast = atoi(row[9]); - entry.engaged_no_sp_recast_min = atoi(row[10]); - entry.engaged_no_sp_recast_max = atoi(row[11]); - entry.engaged_b_self_chance = atoi(row[12]); - entry.engaged_b_other_chance = atoi(row[13]); - entry.engaged_d_chance = atoi(row[14]); - entry.pursue_no_sp_recast_min = atoi(row[15]); - entry.pursue_no_sp_recast_max = atoi(row[16]); - entry.pursue_d_chance = atoi(row[17]); - entry.idle_no_sp_recast_min = atoi(row[18]); - entry.idle_no_sp_recast_max = atoi(row[19]); - entry.idle_b_chance = atoi(row[20]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_spells_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_spells_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcSpells npc_spells_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(npc_spells_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(npc_spells_entry.parent_list)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_spells_entry.attack_proc)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_spells_entry.proc_chance)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_spells_entry.range_proc)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_spells_entry.rproc_chance)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_spells_entry.defensive_proc)); - update_values.push_back(columns[8] + " = " + std::to_string(npc_spells_entry.dproc_chance)); - update_values.push_back(columns[9] + " = " + std::to_string(npc_spells_entry.fail_recast)); - update_values.push_back(columns[10] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); - update_values.push_back(columns[11] + " = " + std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); - update_values.push_back(columns[12] + " = " + std::to_string(npc_spells_entry.engaged_b_self_chance)); - update_values.push_back(columns[13] + " = " + std::to_string(npc_spells_entry.engaged_b_other_chance)); - update_values.push_back(columns[14] + " = " + std::to_string(npc_spells_entry.engaged_d_chance)); - update_values.push_back(columns[15] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); - update_values.push_back(columns[16] + " = " + std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); - update_values.push_back(columns[17] + " = " + std::to_string(npc_spells_entry.pursue_d_chance)); - update_values.push_back(columns[18] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_min)); - update_values.push_back(columns[19] + " = " + std::to_string(npc_spells_entry.idle_no_sp_recast_max)); - update_values.push_back(columns[20] + " = " + std::to_string(npc_spells_entry.idle_b_chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_spells_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcSpells InsertOne( - NpcSpells npc_spells_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); - insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_spells_entry.id = results.LastInsertedID(); - return npc_spells_entry; - } - - npc_spells_entry = NpcSpellsRepository::NewEntity(); - - return npc_spells_entry; - } - - static int InsertMany( - std::vector npc_spells_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_spells_entry: npc_spells_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_spells_entry.name) + "'"); - insert_values.push_back(std::to_string(npc_spells_entry.parent_list)); - insert_values.push_back(std::to_string(npc_spells_entry.attack_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.proc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.range_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.rproc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.defensive_proc)); - insert_values.push_back(std::to_string(npc_spells_entry.dproc_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.fail_recast)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_self_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_b_other_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.engaged_d_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.pursue_d_chance)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_min)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_no_sp_recast_max)); - insert_values.push_back(std::to_string(npc_spells_entry.idle_b_chance)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpells entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - entry.attack_proc = atoi(row[3]); - entry.proc_chance = atoi(row[4]); - entry.range_proc = atoi(row[5]); - entry.rproc_chance = atoi(row[6]); - entry.defensive_proc = atoi(row[7]); - entry.dproc_chance = atoi(row[8]); - entry.fail_recast = atoi(row[9]); - entry.engaged_no_sp_recast_min = atoi(row[10]); - entry.engaged_no_sp_recast_max = atoi(row[11]); - entry.engaged_b_self_chance = atoi(row[12]); - entry.engaged_b_other_chance = atoi(row[13]); - entry.engaged_d_chance = atoi(row[14]); - entry.pursue_no_sp_recast_min = atoi(row[15]); - entry.pursue_no_sp_recast_max = atoi(row[16]); - entry.pursue_d_chance = atoi(row[17]); - entry.idle_no_sp_recast_min = atoi(row[18]); - entry.idle_no_sp_recast_max = atoi(row[19]); - entry.idle_b_chance = atoi(row[20]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcSpells entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.parent_list = atoi(row[2]); - entry.attack_proc = atoi(row[3]); - entry.proc_chance = atoi(row[4]); - entry.range_proc = atoi(row[5]); - entry.rproc_chance = atoi(row[6]); - entry.defensive_proc = atoi(row[7]); - entry.dproc_chance = atoi(row[8]); - entry.fail_recast = atoi(row[9]); - entry.engaged_no_sp_recast_min = atoi(row[10]); - entry.engaged_no_sp_recast_max = atoi(row[11]); - entry.engaged_b_self_chance = atoi(row[12]); - entry.engaged_b_other_chance = atoi(row[13]); - entry.engaged_d_chance = atoi(row[14]); - entry.pursue_no_sp_recast_min = atoi(row[15]); - entry.pursue_no_sp_recast_max = atoi(row[16]); - entry.pursue_d_chance = atoi(row[17]); - entry.idle_no_sp_recast_min = atoi(row[18]); - entry.idle_no_sp_recast_max = atoi(row[19]); - entry.idle_b_chance = atoi(row[20]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index 433bbb33d..4c3826e11 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -23,1355 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_types_repository.h" -class NpcTypesRepository { +class NpcTypesRepository: public BaseNpcTypesRepository { public: - struct NpcTypes { - int id; - std::string name; - std::string lastname; - int8 level; - int16 race; - int8 class; - int bodytype; - int hp; - int mana; - int8 gender; - int8 texture; - int8 helmtexture; - int herosforgemodel; - float size; - int hp_regen_rate; - int mana_regen_rate; - int loottable_id; - int merchant_id; - int alt_currency_id; - int npc_spells_id; - int npc_spells_effects_id; - int npc_faction_id; - int adventure_template_id; - int trap_template; - int mindmg; - int maxdmg; - int16 attack_count; - std::string npcspecialattks; - std::string special_abilities; - int aggroradius; - int assistradius; - int face; - int luclin_hairstyle; - int luclin_haircolor; - int luclin_eyecolor; - int luclin_eyecolor2; - int luclin_beardcolor; - int luclin_beard; - int drakkin_heritage; - int drakkin_tattoo; - int drakkin_details; - int armortint_id; - int8 armortint_red; - int8 armortint_green; - int8 armortint_blue; - int d_melee_texture1; - int d_melee_texture2; - std::string ammo_idfile; - int8 prim_melee_type; - int8 sec_melee_type; - int8 ranged_type; - float runspeed; - int16 MR; - int16 CR; - int16 DR; - int16 FR; - int16 PR; - int16 Corrup; - int16 PhR; - int16 see_invis; - int16 see_invis_undead; - int qglobal; - int16 AC; - int8 npc_aggro; - int8 spawn_limit; - float attack_speed; - int8 attack_delay; - int8 findable; - int STR; - int STA; - int DEX; - int AGI; - int _INT; - int WIS; - int CHA; - int8 see_hide; - int8 see_improved_hide; - int8 trackable; - int8 isbot; - int8 exclude; - int ATK; - int Accuracy; - int Avoidance; - int16 slow_mitigation; - int16 version; - int8 maxlevel; - int scalerate; - int8 private_corpse; - int8 unique_spawn_by_name; - int8 underwater; - int8 isquest; - int emoteid; - float spellscale; - float healscale; - int8 no_target_hotkey; - int8 raid_target; - int8 armtexture; - int8 bracertexture; - int8 handtexture; - int8 legtexture; - int8 feettexture; - int8 light; - int8 walkspeed; - int peqid; - int8 unique_; - int8 fixed; - int8 ignore_despawn; - int8 show_name; - int8 untargetable; - int16 charm_ac; - int charm_min_dmg; - int charm_max_dmg; - int8 charm_attack_delay; - int charm_accuracy_rating; - int charm_avoidance_rating; - int charm_atk; - int8 skip_global_loot; - int8 rare_spawn; - int8 stuck_behavior; - int16 model; - int8 flymode; - int8 always_aggro; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcTypesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcTypesRepository::GetWhereNeverExpires() + * NpcTypesRepository::GetWhereXAndY() + * NpcTypesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "lastname", - "level", - "race", - "class", - "bodytype", - "hp", - "mana", - "gender", - "texture", - "helmtexture", - "herosforgemodel", - "size", - "hp_regen_rate", - "mana_regen_rate", - "loottable_id", - "merchant_id", - "alt_currency_id", - "npc_spells_id", - "npc_spells_effects_id", - "npc_faction_id", - "adventure_template_id", - "trap_template", - "mindmg", - "maxdmg", - "attack_count", - "npcspecialattks", - "special_abilities", - "aggroradius", - "assistradius", - "face", - "luclin_hairstyle", - "luclin_haircolor", - "luclin_eyecolor", - "luclin_eyecolor2", - "luclin_beardcolor", - "luclin_beard", - "drakkin_heritage", - "drakkin_tattoo", - "drakkin_details", - "armortint_id", - "armortint_red", - "armortint_green", - "armortint_blue", - "d_melee_texture1", - "d_melee_texture2", - "ammo_idfile", - "prim_melee_type", - "sec_melee_type", - "ranged_type", - "runspeed", - "MR", - "CR", - "DR", - "FR", - "PR", - "Corrup", - "PhR", - "see_invis", - "see_invis_undead", - "qglobal", - "AC", - "npc_aggro", - "spawn_limit", - "attack_speed", - "attack_delay", - "findable", - "STR", - "STA", - "DEX", - "AGI", - "_INT", - "WIS", - "CHA", - "see_hide", - "see_improved_hide", - "trackable", - "isbot", - "exclude", - "ATK", - "Accuracy", - "Avoidance", - "slow_mitigation", - "version", - "maxlevel", - "scalerate", - "private_corpse", - "unique_spawn_by_name", - "underwater", - "isquest", - "emoteid", - "spellscale", - "healscale", - "no_target_hotkey", - "raid_target", - "armtexture", - "bracertexture", - "handtexture", - "legtexture", - "feettexture", - "light", - "walkspeed", - "peqid", - "unique_", - "fixed", - "ignore_despawn", - "show_name", - "untargetable", - "charm_ac", - "charm_min_dmg", - "charm_max_dmg", - "charm_attack_delay", - "charm_accuracy_rating", - "charm_avoidance_rating", - "charm_atk", - "skip_global_loot", - "rare_spawn", - "stuck_behavior", - "model", - "flymode", - "always_aggro", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_types"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcTypes NewEntity() - { - NpcTypes entry{}; - - entry.id = 0; - entry.name = ""; - entry.lastname = ""; - entry.level = 0; - entry.race = 0; - entry.class = 0; - entry.bodytype = 1; - entry.hp = 0; - entry.mana = 0; - entry.gender = 0; - entry.texture = 0; - entry.helmtexture = 0; - entry.herosforgemodel = 0; - entry.size = 0; - entry.hp_regen_rate = 0; - entry.mana_regen_rate = 0; - entry.loottable_id = 0; - entry.merchant_id = 0; - entry.alt_currency_id = 0; - entry.npc_spells_id = 0; - entry.npc_spells_effects_id = 0; - entry.npc_faction_id = 0; - entry.adventure_template_id = 0; - entry.trap_template = 0; - entry.mindmg = 0; - entry.maxdmg = 0; - entry.attack_count = -1; - entry.npcspecialattks = ""; - entry.special_abilities = ""; - entry.aggroradius = 0; - entry.assistradius = 0; - entry.face = 1; - entry.luclin_hairstyle = 1; - entry.luclin_haircolor = 1; - entry.luclin_eyecolor = 1; - entry.luclin_eyecolor2 = 1; - entry.luclin_beardcolor = 1; - entry.luclin_beard = 0; - entry.drakkin_heritage = 0; - entry.drakkin_tattoo = 0; - entry.drakkin_details = 0; - entry.armortint_id = 0; - entry.armortint_red = 0; - entry.armortint_green = 0; - entry.armortint_blue = 0; - entry.d_melee_texture1 = 0; - entry.d_melee_texture2 = 0; - entry.ammo_idfile = "IT10"; - entry.prim_melee_type = 28; - entry.sec_melee_type = 28; - entry.ranged_type = 7; - entry.runspeed = 0; - entry.MR = 0; - entry.CR = 0; - entry.DR = 0; - entry.FR = 0; - entry.PR = 0; - entry.Corrup = 0; - entry.PhR = 0; - entry.see_invis = 0; - entry.see_invis_undead = 0; - entry.qglobal = 0; - entry.AC = 0; - entry.npc_aggro = 0; - entry.spawn_limit = 0; - entry.attack_speed = 0; - entry.attack_delay = 30; - entry.findable = 0; - entry.STR = 75; - entry.STA = 75; - entry.DEX = 75; - entry.AGI = 75; - entry._INT = 80; - entry.WIS = 75; - entry.CHA = 75; - entry.see_hide = 0; - entry.see_improved_hide = 0; - entry.trackable = 1; - entry.isbot = 0; - entry.exclude = 1; - entry.ATK = 0; - entry.Accuracy = 0; - entry.Avoidance = 0; - entry.slow_mitigation = 0; - entry.version = 0; - entry.maxlevel = 0; - entry.scalerate = 100; - entry.private_corpse = 0; - entry.unique_spawn_by_name = 0; - entry.underwater = 0; - entry.isquest = 0; - entry.emoteid = 0; - entry.spellscale = 100; - entry.healscale = 100; - entry.no_target_hotkey = 0; - entry.raid_target = 0; - entry.armtexture = 0; - entry.bracertexture = 0; - entry.handtexture = 0; - entry.legtexture = 0; - entry.feettexture = 0; - entry.light = 0; - entry.walkspeed = 0; - entry.peqid = 0; - entry.unique_ = 0; - entry.fixed = 0; - entry.ignore_despawn = 0; - entry.show_name = 1; - entry.untargetable = 0; - entry.charm_ac = 0; - entry.charm_min_dmg = 0; - entry.charm_max_dmg = 0; - entry.charm_attack_delay = 0; - entry.charm_accuracy_rating = 0; - entry.charm_avoidance_rating = 0; - entry.charm_atk = 0; - entry.skip_global_loot = 0; - entry.rare_spawn = 0; - entry.stuck_behavior = 0; - entry.model = 0; - entry.flymode = -1; - entry.always_aggro = 0; - - return entry; - } - - static NpcTypes GetNpcTypesEntry( - const std::vector &npc_typess, - int npc_types_id - ) - { - for (auto &npc_types : npc_typess) { - if (npc_types.id == npc_types_id) { - return npc_types; - } - } - - return NewEntity(); - } - - static NpcTypes FindOne( - int npc_types_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_types_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcTypes entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.lastname = row[2] ? row[2] : ""; - entry.level = atoi(row[3]); - entry.race = atoi(row[4]); - entry.class = atoi(row[5]); - entry.bodytype = atoi(row[6]); - entry.hp = atoi(row[7]); - entry.mana = atoi(row[8]); - entry.gender = atoi(row[9]); - entry.texture = atoi(row[10]); - entry.helmtexture = atoi(row[11]); - entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); - entry.hp_regen_rate = atoi(row[14]); - entry.mana_regen_rate = atoi(row[15]); - entry.loottable_id = atoi(row[16]); - entry.merchant_id = atoi(row[17]); - entry.alt_currency_id = atoi(row[18]); - entry.npc_spells_id = atoi(row[19]); - entry.npc_spells_effects_id = atoi(row[20]); - entry.npc_faction_id = atoi(row[21]); - entry.adventure_template_id = atoi(row[22]); - entry.trap_template = atoi(row[23]); - entry.mindmg = atoi(row[24]); - entry.maxdmg = atoi(row[25]); - entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27] ? row[27] : ""; - entry.special_abilities = row[28] ? row[28] : ""; - entry.aggroradius = atoi(row[29]); - entry.assistradius = atoi(row[30]); - entry.face = atoi(row[31]); - entry.luclin_hairstyle = atoi(row[32]); - entry.luclin_haircolor = atoi(row[33]); - entry.luclin_eyecolor = atoi(row[34]); - entry.luclin_eyecolor2 = atoi(row[35]); - entry.luclin_beardcolor = atoi(row[36]); - entry.luclin_beard = atoi(row[37]); - entry.drakkin_heritage = atoi(row[38]); - entry.drakkin_tattoo = atoi(row[39]); - entry.drakkin_details = atoi(row[40]); - entry.armortint_id = atoi(row[41]); - entry.armortint_red = atoi(row[42]); - entry.armortint_green = atoi(row[43]); - entry.armortint_blue = atoi(row[44]); - entry.d_melee_texture1 = atoi(row[45]); - entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47] ? row[47] : ""; - entry.prim_melee_type = atoi(row[48]); - entry.sec_melee_type = atoi(row[49]); - entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); - entry.MR = atoi(row[52]); - entry.CR = atoi(row[53]); - entry.DR = atoi(row[54]); - entry.FR = atoi(row[55]); - entry.PR = atoi(row[56]); - entry.Corrup = atoi(row[57]); - entry.PhR = atoi(row[58]); - entry.see_invis = atoi(row[59]); - entry.see_invis_undead = atoi(row[60]); - entry.qglobal = atoi(row[61]); - entry.AC = atoi(row[62]); - entry.npc_aggro = atoi(row[63]); - entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); - entry.attack_delay = atoi(row[66]); - entry.findable = atoi(row[67]); - entry.STR = atoi(row[68]); - entry.STA = atoi(row[69]); - entry.DEX = atoi(row[70]); - entry.AGI = atoi(row[71]); - entry._INT = atoi(row[72]); - entry.WIS = atoi(row[73]); - entry.CHA = atoi(row[74]); - entry.see_hide = atoi(row[75]); - entry.see_improved_hide = atoi(row[76]); - entry.trackable = atoi(row[77]); - entry.isbot = atoi(row[78]); - entry.exclude = atoi(row[79]); - entry.ATK = atoi(row[80]); - entry.Accuracy = atoi(row[81]); - entry.Avoidance = atoi(row[82]); - entry.slow_mitigation = atoi(row[83]); - entry.version = atoi(row[84]); - entry.maxlevel = atoi(row[85]); - entry.scalerate = atoi(row[86]); - entry.private_corpse = atoi(row[87]); - entry.unique_spawn_by_name = atoi(row[88]); - entry.underwater = atoi(row[89]); - entry.isquest = atoi(row[90]); - entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); - entry.no_target_hotkey = atoi(row[94]); - entry.raid_target = atoi(row[95]); - entry.armtexture = atoi(row[96]); - entry.bracertexture = atoi(row[97]); - entry.handtexture = atoi(row[98]); - entry.legtexture = atoi(row[99]); - entry.feettexture = atoi(row[100]); - entry.light = atoi(row[101]); - entry.walkspeed = atoi(row[102]); - entry.peqid = atoi(row[103]); - entry.unique_ = atoi(row[104]); - entry.fixed = atoi(row[105]); - entry.ignore_despawn = atoi(row[106]); - entry.show_name = atoi(row[107]); - entry.untargetable = atoi(row[108]); - entry.charm_ac = atoi(row[109]); - entry.charm_min_dmg = atoi(row[110]); - entry.charm_max_dmg = atoi(row[111]); - entry.charm_attack_delay = atoi(row[112]); - entry.charm_accuracy_rating = atoi(row[113]); - entry.charm_avoidance_rating = atoi(row[114]); - entry.charm_atk = atoi(row[115]); - entry.skip_global_loot = atoi(row[116]); - entry.rare_spawn = atoi(row[117]); - entry.stuck_behavior = atoi(row[118]); - entry.model = atoi(row[119]); - entry.flymode = atoi(row[120]); - entry.always_aggro = atoi(row[121]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_types_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_types_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcTypes npc_types_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_entry.name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(npc_types_entry.lastname) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(npc_types_entry.level)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_types_entry.race)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_types_entry.class)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_types_entry.bodytype)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_types_entry.hp)); - update_values.push_back(columns[8] + " = " + std::to_string(npc_types_entry.mana)); - update_values.push_back(columns[9] + " = " + std::to_string(npc_types_entry.gender)); - update_values.push_back(columns[10] + " = " + std::to_string(npc_types_entry.texture)); - update_values.push_back(columns[11] + " = " + std::to_string(npc_types_entry.helmtexture)); - update_values.push_back(columns[12] + " = " + std::to_string(npc_types_entry.herosforgemodel)); - update_values.push_back(columns[13] + " = " + std::to_string(npc_types_entry.size)); - update_values.push_back(columns[14] + " = " + std::to_string(npc_types_entry.hp_regen_rate)); - update_values.push_back(columns[15] + " = " + std::to_string(npc_types_entry.mana_regen_rate)); - update_values.push_back(columns[16] + " = " + std::to_string(npc_types_entry.loottable_id)); - update_values.push_back(columns[17] + " = " + std::to_string(npc_types_entry.merchant_id)); - update_values.push_back(columns[18] + " = " + std::to_string(npc_types_entry.alt_currency_id)); - update_values.push_back(columns[19] + " = " + std::to_string(npc_types_entry.npc_spells_id)); - update_values.push_back(columns[20] + " = " + std::to_string(npc_types_entry.npc_spells_effects_id)); - update_values.push_back(columns[21] + " = " + std::to_string(npc_types_entry.npc_faction_id)); - update_values.push_back(columns[22] + " = " + std::to_string(npc_types_entry.adventure_template_id)); - update_values.push_back(columns[23] + " = " + std::to_string(npc_types_entry.trap_template)); - update_values.push_back(columns[24] + " = " + std::to_string(npc_types_entry.mindmg)); - update_values.push_back(columns[25] + " = " + std::to_string(npc_types_entry.maxdmg)); - update_values.push_back(columns[26] + " = " + std::to_string(npc_types_entry.attack_count)); - update_values.push_back(columns[27] + " = '" + EscapeString(npc_types_entry.npcspecialattks) + "'"); - update_values.push_back(columns[28] + " = '" + EscapeString(npc_types_entry.special_abilities) + "'"); - update_values.push_back(columns[29] + " = " + std::to_string(npc_types_entry.aggroradius)); - update_values.push_back(columns[30] + " = " + std::to_string(npc_types_entry.assistradius)); - update_values.push_back(columns[31] + " = " + std::to_string(npc_types_entry.face)); - update_values.push_back(columns[32] + " = " + std::to_string(npc_types_entry.luclin_hairstyle)); - update_values.push_back(columns[33] + " = " + std::to_string(npc_types_entry.luclin_haircolor)); - update_values.push_back(columns[34] + " = " + std::to_string(npc_types_entry.luclin_eyecolor)); - update_values.push_back(columns[35] + " = " + std::to_string(npc_types_entry.luclin_eyecolor2)); - update_values.push_back(columns[36] + " = " + std::to_string(npc_types_entry.luclin_beardcolor)); - update_values.push_back(columns[37] + " = " + std::to_string(npc_types_entry.luclin_beard)); - update_values.push_back(columns[38] + " = " + std::to_string(npc_types_entry.drakkin_heritage)); - update_values.push_back(columns[39] + " = " + std::to_string(npc_types_entry.drakkin_tattoo)); - update_values.push_back(columns[40] + " = " + std::to_string(npc_types_entry.drakkin_details)); - update_values.push_back(columns[41] + " = " + std::to_string(npc_types_entry.armortint_id)); - update_values.push_back(columns[42] + " = " + std::to_string(npc_types_entry.armortint_red)); - update_values.push_back(columns[43] + " = " + std::to_string(npc_types_entry.armortint_green)); - update_values.push_back(columns[44] + " = " + std::to_string(npc_types_entry.armortint_blue)); - update_values.push_back(columns[45] + " = " + std::to_string(npc_types_entry.d_melee_texture1)); - update_values.push_back(columns[46] + " = " + std::to_string(npc_types_entry.d_melee_texture2)); - update_values.push_back(columns[47] + " = '" + EscapeString(npc_types_entry.ammo_idfile) + "'"); - update_values.push_back(columns[48] + " = " + std::to_string(npc_types_entry.prim_melee_type)); - update_values.push_back(columns[49] + " = " + std::to_string(npc_types_entry.sec_melee_type)); - update_values.push_back(columns[50] + " = " + std::to_string(npc_types_entry.ranged_type)); - update_values.push_back(columns[51] + " = " + std::to_string(npc_types_entry.runspeed)); - update_values.push_back(columns[52] + " = " + std::to_string(npc_types_entry.MR)); - update_values.push_back(columns[53] + " = " + std::to_string(npc_types_entry.CR)); - update_values.push_back(columns[54] + " = " + std::to_string(npc_types_entry.DR)); - update_values.push_back(columns[55] + " = " + std::to_string(npc_types_entry.FR)); - update_values.push_back(columns[56] + " = " + std::to_string(npc_types_entry.PR)); - update_values.push_back(columns[57] + " = " + std::to_string(npc_types_entry.Corrup)); - update_values.push_back(columns[58] + " = " + std::to_string(npc_types_entry.PhR)); - update_values.push_back(columns[59] + " = " + std::to_string(npc_types_entry.see_invis)); - update_values.push_back(columns[60] + " = " + std::to_string(npc_types_entry.see_invis_undead)); - update_values.push_back(columns[61] + " = " + std::to_string(npc_types_entry.qglobal)); - update_values.push_back(columns[62] + " = " + std::to_string(npc_types_entry.AC)); - update_values.push_back(columns[63] + " = " + std::to_string(npc_types_entry.npc_aggro)); - update_values.push_back(columns[64] + " = " + std::to_string(npc_types_entry.spawn_limit)); - update_values.push_back(columns[65] + " = " + std::to_string(npc_types_entry.attack_speed)); - update_values.push_back(columns[66] + " = " + std::to_string(npc_types_entry.attack_delay)); - update_values.push_back(columns[67] + " = " + std::to_string(npc_types_entry.findable)); - update_values.push_back(columns[68] + " = " + std::to_string(npc_types_entry.STR)); - update_values.push_back(columns[69] + " = " + std::to_string(npc_types_entry.STA)); - update_values.push_back(columns[70] + " = " + std::to_string(npc_types_entry.DEX)); - update_values.push_back(columns[71] + " = " + std::to_string(npc_types_entry.AGI)); - update_values.push_back(columns[72] + " = " + std::to_string(npc_types_entry._INT)); - update_values.push_back(columns[73] + " = " + std::to_string(npc_types_entry.WIS)); - update_values.push_back(columns[74] + " = " + std::to_string(npc_types_entry.CHA)); - update_values.push_back(columns[75] + " = " + std::to_string(npc_types_entry.see_hide)); - update_values.push_back(columns[76] + " = " + std::to_string(npc_types_entry.see_improved_hide)); - update_values.push_back(columns[77] + " = " + std::to_string(npc_types_entry.trackable)); - update_values.push_back(columns[78] + " = " + std::to_string(npc_types_entry.isbot)); - update_values.push_back(columns[79] + " = " + std::to_string(npc_types_entry.exclude)); - update_values.push_back(columns[80] + " = " + std::to_string(npc_types_entry.ATK)); - update_values.push_back(columns[81] + " = " + std::to_string(npc_types_entry.Accuracy)); - update_values.push_back(columns[82] + " = " + std::to_string(npc_types_entry.Avoidance)); - update_values.push_back(columns[83] + " = " + std::to_string(npc_types_entry.slow_mitigation)); - update_values.push_back(columns[84] + " = " + std::to_string(npc_types_entry.version)); - update_values.push_back(columns[85] + " = " + std::to_string(npc_types_entry.maxlevel)); - update_values.push_back(columns[86] + " = " + std::to_string(npc_types_entry.scalerate)); - update_values.push_back(columns[87] + " = " + std::to_string(npc_types_entry.private_corpse)); - update_values.push_back(columns[88] + " = " + std::to_string(npc_types_entry.unique_spawn_by_name)); - update_values.push_back(columns[89] + " = " + std::to_string(npc_types_entry.underwater)); - update_values.push_back(columns[90] + " = " + std::to_string(npc_types_entry.isquest)); - update_values.push_back(columns[91] + " = " + std::to_string(npc_types_entry.emoteid)); - update_values.push_back(columns[92] + " = " + std::to_string(npc_types_entry.spellscale)); - update_values.push_back(columns[93] + " = " + std::to_string(npc_types_entry.healscale)); - update_values.push_back(columns[94] + " = " + std::to_string(npc_types_entry.no_target_hotkey)); - update_values.push_back(columns[95] + " = " + std::to_string(npc_types_entry.raid_target)); - update_values.push_back(columns[96] + " = " + std::to_string(npc_types_entry.armtexture)); - update_values.push_back(columns[97] + " = " + std::to_string(npc_types_entry.bracertexture)); - update_values.push_back(columns[98] + " = " + std::to_string(npc_types_entry.handtexture)); - update_values.push_back(columns[99] + " = " + std::to_string(npc_types_entry.legtexture)); - update_values.push_back(columns[100] + " = " + std::to_string(npc_types_entry.feettexture)); - update_values.push_back(columns[101] + " = " + std::to_string(npc_types_entry.light)); - update_values.push_back(columns[102] + " = " + std::to_string(npc_types_entry.walkspeed)); - update_values.push_back(columns[103] + " = " + std::to_string(npc_types_entry.peqid)); - update_values.push_back(columns[104] + " = " + std::to_string(npc_types_entry.unique_)); - update_values.push_back(columns[105] + " = " + std::to_string(npc_types_entry.fixed)); - update_values.push_back(columns[106] + " = " + std::to_string(npc_types_entry.ignore_despawn)); - update_values.push_back(columns[107] + " = " + std::to_string(npc_types_entry.show_name)); - update_values.push_back(columns[108] + " = " + std::to_string(npc_types_entry.untargetable)); - update_values.push_back(columns[109] + " = " + std::to_string(npc_types_entry.charm_ac)); - update_values.push_back(columns[110] + " = " + std::to_string(npc_types_entry.charm_min_dmg)); - update_values.push_back(columns[111] + " = " + std::to_string(npc_types_entry.charm_max_dmg)); - update_values.push_back(columns[112] + " = " + std::to_string(npc_types_entry.charm_attack_delay)); - update_values.push_back(columns[113] + " = " + std::to_string(npc_types_entry.charm_accuracy_rating)); - update_values.push_back(columns[114] + " = " + std::to_string(npc_types_entry.charm_avoidance_rating)); - update_values.push_back(columns[115] + " = " + std::to_string(npc_types_entry.charm_atk)); - update_values.push_back(columns[116] + " = " + std::to_string(npc_types_entry.skip_global_loot)); - update_values.push_back(columns[117] + " = " + std::to_string(npc_types_entry.rare_spawn)); - update_values.push_back(columns[118] + " = " + std::to_string(npc_types_entry.stuck_behavior)); - update_values.push_back(columns[119] + " = " + std::to_string(npc_types_entry.model)); - update_values.push_back(columns[120] + " = " + std::to_string(npc_types_entry.flymode)); - update_values.push_back(columns[121] + " = " + std::to_string(npc_types_entry.always_aggro)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_types_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcTypes InsertOne( - NpcTypes npc_types_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.level)); - insert_values.push_back(std::to_string(npc_types_entry.race)); - insert_values.push_back(std::to_string(npc_types_entry.class)); - insert_values.push_back(std::to_string(npc_types_entry.bodytype)); - insert_values.push_back(std::to_string(npc_types_entry.hp)); - insert_values.push_back(std::to_string(npc_types_entry.mana)); - insert_values.push_back(std::to_string(npc_types_entry.gender)); - insert_values.push_back(std::to_string(npc_types_entry.texture)); - insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); - insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); - insert_values.push_back(std::to_string(npc_types_entry.size)); - insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); - insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); - insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); - insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); - insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); - insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); - insert_values.push_back(std::to_string(npc_types_entry.trap_template)); - insert_values.push_back(std::to_string(npc_types_entry.mindmg)); - insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); - insert_values.push_back(std::to_string(npc_types_entry.attack_count)); - insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); - insert_values.push_back(std::to_string(npc_types_entry.assistradius)); - insert_values.push_back(std::to_string(npc_types_entry.face)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); - insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); - insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); - insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); - insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); - insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); - insert_values.push_back(std::to_string(npc_types_entry.runspeed)); - insert_values.push_back(std::to_string(npc_types_entry.MR)); - insert_values.push_back(std::to_string(npc_types_entry.CR)); - insert_values.push_back(std::to_string(npc_types_entry.DR)); - insert_values.push_back(std::to_string(npc_types_entry.FR)); - insert_values.push_back(std::to_string(npc_types_entry.PR)); - insert_values.push_back(std::to_string(npc_types_entry.Corrup)); - insert_values.push_back(std::to_string(npc_types_entry.PhR)); - insert_values.push_back(std::to_string(npc_types_entry.see_invis)); - insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); - insert_values.push_back(std::to_string(npc_types_entry.qglobal)); - insert_values.push_back(std::to_string(npc_types_entry.AC)); - insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); - insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); - insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); - insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); - insert_values.push_back(std::to_string(npc_types_entry.findable)); - insert_values.push_back(std::to_string(npc_types_entry.STR)); - insert_values.push_back(std::to_string(npc_types_entry.STA)); - insert_values.push_back(std::to_string(npc_types_entry.DEX)); - insert_values.push_back(std::to_string(npc_types_entry.AGI)); - insert_values.push_back(std::to_string(npc_types_entry._INT)); - insert_values.push_back(std::to_string(npc_types_entry.WIS)); - insert_values.push_back(std::to_string(npc_types_entry.CHA)); - insert_values.push_back(std::to_string(npc_types_entry.see_hide)); - insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); - insert_values.push_back(std::to_string(npc_types_entry.trackable)); - insert_values.push_back(std::to_string(npc_types_entry.isbot)); - insert_values.push_back(std::to_string(npc_types_entry.exclude)); - insert_values.push_back(std::to_string(npc_types_entry.ATK)); - insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); - insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); - insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); - insert_values.push_back(std::to_string(npc_types_entry.version)); - insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_types_entry.scalerate)); - insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); - insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); - insert_values.push_back(std::to_string(npc_types_entry.underwater)); - insert_values.push_back(std::to_string(npc_types_entry.isquest)); - insert_values.push_back(std::to_string(npc_types_entry.emoteid)); - insert_values.push_back(std::to_string(npc_types_entry.spellscale)); - insert_values.push_back(std::to_string(npc_types_entry.healscale)); - insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); - insert_values.push_back(std::to_string(npc_types_entry.raid_target)); - insert_values.push_back(std::to_string(npc_types_entry.armtexture)); - insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); - insert_values.push_back(std::to_string(npc_types_entry.handtexture)); - insert_values.push_back(std::to_string(npc_types_entry.legtexture)); - insert_values.push_back(std::to_string(npc_types_entry.feettexture)); - insert_values.push_back(std::to_string(npc_types_entry.light)); - insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); - insert_values.push_back(std::to_string(npc_types_entry.peqid)); - insert_values.push_back(std::to_string(npc_types_entry.unique_)); - insert_values.push_back(std::to_string(npc_types_entry.fixed)); - insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); - insert_values.push_back(std::to_string(npc_types_entry.show_name)); - insert_values.push_back(std::to_string(npc_types_entry.untargetable)); - insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); - insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); - insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); - insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); - insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); - insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); - insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); - insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); - insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); - insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); - insert_values.push_back(std::to_string(npc_types_entry.model)); - insert_values.push_back(std::to_string(npc_types_entry.flymode)); - insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_types_entry.id = results.LastInsertedID(); - return npc_types_entry; - } - - npc_types_entry = NpcTypesRepository::NewEntity(); - - return npc_types_entry; - } - - static int InsertMany( - std::vector npc_types_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_types_entry: npc_types_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_types_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.lastname) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.level)); - insert_values.push_back(std::to_string(npc_types_entry.race)); - insert_values.push_back(std::to_string(npc_types_entry.class)); - insert_values.push_back(std::to_string(npc_types_entry.bodytype)); - insert_values.push_back(std::to_string(npc_types_entry.hp)); - insert_values.push_back(std::to_string(npc_types_entry.mana)); - insert_values.push_back(std::to_string(npc_types_entry.gender)); - insert_values.push_back(std::to_string(npc_types_entry.texture)); - insert_values.push_back(std::to_string(npc_types_entry.helmtexture)); - insert_values.push_back(std::to_string(npc_types_entry.herosforgemodel)); - insert_values.push_back(std::to_string(npc_types_entry.size)); - insert_values.push_back(std::to_string(npc_types_entry.hp_regen_rate)); - insert_values.push_back(std::to_string(npc_types_entry.mana_regen_rate)); - insert_values.push_back(std::to_string(npc_types_entry.loottable_id)); - insert_values.push_back(std::to_string(npc_types_entry.merchant_id)); - insert_values.push_back(std::to_string(npc_types_entry.alt_currency_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_spells_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_spells_effects_id)); - insert_values.push_back(std::to_string(npc_types_entry.npc_faction_id)); - insert_values.push_back(std::to_string(npc_types_entry.adventure_template_id)); - insert_values.push_back(std::to_string(npc_types_entry.trap_template)); - insert_values.push_back(std::to_string(npc_types_entry.mindmg)); - insert_values.push_back(std::to_string(npc_types_entry.maxdmg)); - insert_values.push_back(std::to_string(npc_types_entry.attack_count)); - insert_values.push_back("'" + EscapeString(npc_types_entry.npcspecialattks) + "'"); - insert_values.push_back("'" + EscapeString(npc_types_entry.special_abilities) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.aggroradius)); - insert_values.push_back(std::to_string(npc_types_entry.assistradius)); - insert_values.push_back(std::to_string(npc_types_entry.face)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_hairstyle)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_haircolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_eyecolor2)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_beardcolor)); - insert_values.push_back(std::to_string(npc_types_entry.luclin_beard)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_heritage)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_tattoo)); - insert_values.push_back(std::to_string(npc_types_entry.drakkin_details)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_id)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_red)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_green)); - insert_values.push_back(std::to_string(npc_types_entry.armortint_blue)); - insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture1)); - insert_values.push_back(std::to_string(npc_types_entry.d_melee_texture2)); - insert_values.push_back("'" + EscapeString(npc_types_entry.ammo_idfile) + "'"); - insert_values.push_back(std::to_string(npc_types_entry.prim_melee_type)); - insert_values.push_back(std::to_string(npc_types_entry.sec_melee_type)); - insert_values.push_back(std::to_string(npc_types_entry.ranged_type)); - insert_values.push_back(std::to_string(npc_types_entry.runspeed)); - insert_values.push_back(std::to_string(npc_types_entry.MR)); - insert_values.push_back(std::to_string(npc_types_entry.CR)); - insert_values.push_back(std::to_string(npc_types_entry.DR)); - insert_values.push_back(std::to_string(npc_types_entry.FR)); - insert_values.push_back(std::to_string(npc_types_entry.PR)); - insert_values.push_back(std::to_string(npc_types_entry.Corrup)); - insert_values.push_back(std::to_string(npc_types_entry.PhR)); - insert_values.push_back(std::to_string(npc_types_entry.see_invis)); - insert_values.push_back(std::to_string(npc_types_entry.see_invis_undead)); - insert_values.push_back(std::to_string(npc_types_entry.qglobal)); - insert_values.push_back(std::to_string(npc_types_entry.AC)); - insert_values.push_back(std::to_string(npc_types_entry.npc_aggro)); - insert_values.push_back(std::to_string(npc_types_entry.spawn_limit)); - insert_values.push_back(std::to_string(npc_types_entry.attack_speed)); - insert_values.push_back(std::to_string(npc_types_entry.attack_delay)); - insert_values.push_back(std::to_string(npc_types_entry.findable)); - insert_values.push_back(std::to_string(npc_types_entry.STR)); - insert_values.push_back(std::to_string(npc_types_entry.STA)); - insert_values.push_back(std::to_string(npc_types_entry.DEX)); - insert_values.push_back(std::to_string(npc_types_entry.AGI)); - insert_values.push_back(std::to_string(npc_types_entry._INT)); - insert_values.push_back(std::to_string(npc_types_entry.WIS)); - insert_values.push_back(std::to_string(npc_types_entry.CHA)); - insert_values.push_back(std::to_string(npc_types_entry.see_hide)); - insert_values.push_back(std::to_string(npc_types_entry.see_improved_hide)); - insert_values.push_back(std::to_string(npc_types_entry.trackable)); - insert_values.push_back(std::to_string(npc_types_entry.isbot)); - insert_values.push_back(std::to_string(npc_types_entry.exclude)); - insert_values.push_back(std::to_string(npc_types_entry.ATK)); - insert_values.push_back(std::to_string(npc_types_entry.Accuracy)); - insert_values.push_back(std::to_string(npc_types_entry.Avoidance)); - insert_values.push_back(std::to_string(npc_types_entry.slow_mitigation)); - insert_values.push_back(std::to_string(npc_types_entry.version)); - insert_values.push_back(std::to_string(npc_types_entry.maxlevel)); - insert_values.push_back(std::to_string(npc_types_entry.scalerate)); - insert_values.push_back(std::to_string(npc_types_entry.private_corpse)); - insert_values.push_back(std::to_string(npc_types_entry.unique_spawn_by_name)); - insert_values.push_back(std::to_string(npc_types_entry.underwater)); - insert_values.push_back(std::to_string(npc_types_entry.isquest)); - insert_values.push_back(std::to_string(npc_types_entry.emoteid)); - insert_values.push_back(std::to_string(npc_types_entry.spellscale)); - insert_values.push_back(std::to_string(npc_types_entry.healscale)); - insert_values.push_back(std::to_string(npc_types_entry.no_target_hotkey)); - insert_values.push_back(std::to_string(npc_types_entry.raid_target)); - insert_values.push_back(std::to_string(npc_types_entry.armtexture)); - insert_values.push_back(std::to_string(npc_types_entry.bracertexture)); - insert_values.push_back(std::to_string(npc_types_entry.handtexture)); - insert_values.push_back(std::to_string(npc_types_entry.legtexture)); - insert_values.push_back(std::to_string(npc_types_entry.feettexture)); - insert_values.push_back(std::to_string(npc_types_entry.light)); - insert_values.push_back(std::to_string(npc_types_entry.walkspeed)); - insert_values.push_back(std::to_string(npc_types_entry.peqid)); - insert_values.push_back(std::to_string(npc_types_entry.unique_)); - insert_values.push_back(std::to_string(npc_types_entry.fixed)); - insert_values.push_back(std::to_string(npc_types_entry.ignore_despawn)); - insert_values.push_back(std::to_string(npc_types_entry.show_name)); - insert_values.push_back(std::to_string(npc_types_entry.untargetable)); - insert_values.push_back(std::to_string(npc_types_entry.charm_ac)); - insert_values.push_back(std::to_string(npc_types_entry.charm_min_dmg)); - insert_values.push_back(std::to_string(npc_types_entry.charm_max_dmg)); - insert_values.push_back(std::to_string(npc_types_entry.charm_attack_delay)); - insert_values.push_back(std::to_string(npc_types_entry.charm_accuracy_rating)); - insert_values.push_back(std::to_string(npc_types_entry.charm_avoidance_rating)); - insert_values.push_back(std::to_string(npc_types_entry.charm_atk)); - insert_values.push_back(std::to_string(npc_types_entry.skip_global_loot)); - insert_values.push_back(std::to_string(npc_types_entry.rare_spawn)); - insert_values.push_back(std::to_string(npc_types_entry.stuck_behavior)); - insert_values.push_back(std::to_string(npc_types_entry.model)); - insert_values.push_back(std::to_string(npc_types_entry.flymode)); - insert_values.push_back(std::to_string(npc_types_entry.always_aggro)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcTypes entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.lastname = row[2] ? row[2] : ""; - entry.level = atoi(row[3]); - entry.race = atoi(row[4]); - entry.class = atoi(row[5]); - entry.bodytype = atoi(row[6]); - entry.hp = atoi(row[7]); - entry.mana = atoi(row[8]); - entry.gender = atoi(row[9]); - entry.texture = atoi(row[10]); - entry.helmtexture = atoi(row[11]); - entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); - entry.hp_regen_rate = atoi(row[14]); - entry.mana_regen_rate = atoi(row[15]); - entry.loottable_id = atoi(row[16]); - entry.merchant_id = atoi(row[17]); - entry.alt_currency_id = atoi(row[18]); - entry.npc_spells_id = atoi(row[19]); - entry.npc_spells_effects_id = atoi(row[20]); - entry.npc_faction_id = atoi(row[21]); - entry.adventure_template_id = atoi(row[22]); - entry.trap_template = atoi(row[23]); - entry.mindmg = atoi(row[24]); - entry.maxdmg = atoi(row[25]); - entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27] ? row[27] : ""; - entry.special_abilities = row[28] ? row[28] : ""; - entry.aggroradius = atoi(row[29]); - entry.assistradius = atoi(row[30]); - entry.face = atoi(row[31]); - entry.luclin_hairstyle = atoi(row[32]); - entry.luclin_haircolor = atoi(row[33]); - entry.luclin_eyecolor = atoi(row[34]); - entry.luclin_eyecolor2 = atoi(row[35]); - entry.luclin_beardcolor = atoi(row[36]); - entry.luclin_beard = atoi(row[37]); - entry.drakkin_heritage = atoi(row[38]); - entry.drakkin_tattoo = atoi(row[39]); - entry.drakkin_details = atoi(row[40]); - entry.armortint_id = atoi(row[41]); - entry.armortint_red = atoi(row[42]); - entry.armortint_green = atoi(row[43]); - entry.armortint_blue = atoi(row[44]); - entry.d_melee_texture1 = atoi(row[45]); - entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47] ? row[47] : ""; - entry.prim_melee_type = atoi(row[48]); - entry.sec_melee_type = atoi(row[49]); - entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); - entry.MR = atoi(row[52]); - entry.CR = atoi(row[53]); - entry.DR = atoi(row[54]); - entry.FR = atoi(row[55]); - entry.PR = atoi(row[56]); - entry.Corrup = atoi(row[57]); - entry.PhR = atoi(row[58]); - entry.see_invis = atoi(row[59]); - entry.see_invis_undead = atoi(row[60]); - entry.qglobal = atoi(row[61]); - entry.AC = atoi(row[62]); - entry.npc_aggro = atoi(row[63]); - entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); - entry.attack_delay = atoi(row[66]); - entry.findable = atoi(row[67]); - entry.STR = atoi(row[68]); - entry.STA = atoi(row[69]); - entry.DEX = atoi(row[70]); - entry.AGI = atoi(row[71]); - entry._INT = atoi(row[72]); - entry.WIS = atoi(row[73]); - entry.CHA = atoi(row[74]); - entry.see_hide = atoi(row[75]); - entry.see_improved_hide = atoi(row[76]); - entry.trackable = atoi(row[77]); - entry.isbot = atoi(row[78]); - entry.exclude = atoi(row[79]); - entry.ATK = atoi(row[80]); - entry.Accuracy = atoi(row[81]); - entry.Avoidance = atoi(row[82]); - entry.slow_mitigation = atoi(row[83]); - entry.version = atoi(row[84]); - entry.maxlevel = atoi(row[85]); - entry.scalerate = atoi(row[86]); - entry.private_corpse = atoi(row[87]); - entry.unique_spawn_by_name = atoi(row[88]); - entry.underwater = atoi(row[89]); - entry.isquest = atoi(row[90]); - entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); - entry.no_target_hotkey = atoi(row[94]); - entry.raid_target = atoi(row[95]); - entry.armtexture = atoi(row[96]); - entry.bracertexture = atoi(row[97]); - entry.handtexture = atoi(row[98]); - entry.legtexture = atoi(row[99]); - entry.feettexture = atoi(row[100]); - entry.light = atoi(row[101]); - entry.walkspeed = atoi(row[102]); - entry.peqid = atoi(row[103]); - entry.unique_ = atoi(row[104]); - entry.fixed = atoi(row[105]); - entry.ignore_despawn = atoi(row[106]); - entry.show_name = atoi(row[107]); - entry.untargetable = atoi(row[108]); - entry.charm_ac = atoi(row[109]); - entry.charm_min_dmg = atoi(row[110]); - entry.charm_max_dmg = atoi(row[111]); - entry.charm_attack_delay = atoi(row[112]); - entry.charm_accuracy_rating = atoi(row[113]); - entry.charm_avoidance_rating = atoi(row[114]); - entry.charm_atk = atoi(row[115]); - entry.skip_global_loot = atoi(row[116]); - entry.rare_spawn = atoi(row[117]); - entry.stuck_behavior = atoi(row[118]); - entry.model = atoi(row[119]); - entry.flymode = atoi(row[120]); - entry.always_aggro = atoi(row[121]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcTypes entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.lastname = row[2] ? row[2] : ""; - entry.level = atoi(row[3]); - entry.race = atoi(row[4]); - entry.class = atoi(row[5]); - entry.bodytype = atoi(row[6]); - entry.hp = atoi(row[7]); - entry.mana = atoi(row[8]); - entry.gender = atoi(row[9]); - entry.texture = atoi(row[10]); - entry.helmtexture = atoi(row[11]); - entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); - entry.hp_regen_rate = atoi(row[14]); - entry.mana_regen_rate = atoi(row[15]); - entry.loottable_id = atoi(row[16]); - entry.merchant_id = atoi(row[17]); - entry.alt_currency_id = atoi(row[18]); - entry.npc_spells_id = atoi(row[19]); - entry.npc_spells_effects_id = atoi(row[20]); - entry.npc_faction_id = atoi(row[21]); - entry.adventure_template_id = atoi(row[22]); - entry.trap_template = atoi(row[23]); - entry.mindmg = atoi(row[24]); - entry.maxdmg = atoi(row[25]); - entry.attack_count = atoi(row[26]); - entry.npcspecialattks = row[27] ? row[27] : ""; - entry.special_abilities = row[28] ? row[28] : ""; - entry.aggroradius = atoi(row[29]); - entry.assistradius = atoi(row[30]); - entry.face = atoi(row[31]); - entry.luclin_hairstyle = atoi(row[32]); - entry.luclin_haircolor = atoi(row[33]); - entry.luclin_eyecolor = atoi(row[34]); - entry.luclin_eyecolor2 = atoi(row[35]); - entry.luclin_beardcolor = atoi(row[36]); - entry.luclin_beard = atoi(row[37]); - entry.drakkin_heritage = atoi(row[38]); - entry.drakkin_tattoo = atoi(row[39]); - entry.drakkin_details = atoi(row[40]); - entry.armortint_id = atoi(row[41]); - entry.armortint_red = atoi(row[42]); - entry.armortint_green = atoi(row[43]); - entry.armortint_blue = atoi(row[44]); - entry.d_melee_texture1 = atoi(row[45]); - entry.d_melee_texture2 = atoi(row[46]); - entry.ammo_idfile = row[47] ? row[47] : ""; - entry.prim_melee_type = atoi(row[48]); - entry.sec_melee_type = atoi(row[49]); - entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); - entry.MR = atoi(row[52]); - entry.CR = atoi(row[53]); - entry.DR = atoi(row[54]); - entry.FR = atoi(row[55]); - entry.PR = atoi(row[56]); - entry.Corrup = atoi(row[57]); - entry.PhR = atoi(row[58]); - entry.see_invis = atoi(row[59]); - entry.see_invis_undead = atoi(row[60]); - entry.qglobal = atoi(row[61]); - entry.AC = atoi(row[62]); - entry.npc_aggro = atoi(row[63]); - entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); - entry.attack_delay = atoi(row[66]); - entry.findable = atoi(row[67]); - entry.STR = atoi(row[68]); - entry.STA = atoi(row[69]); - entry.DEX = atoi(row[70]); - entry.AGI = atoi(row[71]); - entry._INT = atoi(row[72]); - entry.WIS = atoi(row[73]); - entry.CHA = atoi(row[74]); - entry.see_hide = atoi(row[75]); - entry.see_improved_hide = atoi(row[76]); - entry.trackable = atoi(row[77]); - entry.isbot = atoi(row[78]); - entry.exclude = atoi(row[79]); - entry.ATK = atoi(row[80]); - entry.Accuracy = atoi(row[81]); - entry.Avoidance = atoi(row[82]); - entry.slow_mitigation = atoi(row[83]); - entry.version = atoi(row[84]); - entry.maxlevel = atoi(row[85]); - entry.scalerate = atoi(row[86]); - entry.private_corpse = atoi(row[87]); - entry.unique_spawn_by_name = atoi(row[88]); - entry.underwater = atoi(row[89]); - entry.isquest = atoi(row[90]); - entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); - entry.no_target_hotkey = atoi(row[94]); - entry.raid_target = atoi(row[95]); - entry.armtexture = atoi(row[96]); - entry.bracertexture = atoi(row[97]); - entry.handtexture = atoi(row[98]); - entry.legtexture = atoi(row[99]); - entry.feettexture = atoi(row[100]); - entry.light = atoi(row[101]); - entry.walkspeed = atoi(row[102]); - entry.peqid = atoi(row[103]); - entry.unique_ = atoi(row[104]); - entry.fixed = atoi(row[105]); - entry.ignore_despawn = atoi(row[106]); - entry.show_name = atoi(row[107]); - entry.untargetable = atoi(row[108]); - entry.charm_ac = atoi(row[109]); - entry.charm_min_dmg = atoi(row[110]); - entry.charm_max_dmg = atoi(row[111]); - entry.charm_attack_delay = atoi(row[112]); - entry.charm_accuracy_rating = atoi(row[113]); - entry.charm_avoidance_rating = atoi(row[114]); - entry.charm_atk = atoi(row[115]); - entry.skip_global_loot = atoi(row[116]); - entry.rare_spawn = atoi(row[117]); - entry.stuck_behavior = atoi(row[118]); - entry.model = atoi(row[119]); - entry.flymode = atoi(row[120]); - entry.always_aggro = atoi(row[121]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 6850da4b1..0872f59b7 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -23,518 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_npc_types_tint_repository.h" -class NpcTypesTintRepository { +class NpcTypesTintRepository: public BaseNpcTypesTintRepository { public: - struct NpcTypesTint { - int id; - std::string tint_set_name; - int8 red1h; - int8 grn1h; - int8 blu1h; - int8 red2c; - int8 grn2c; - int8 blu2c; - int8 red3a; - int8 grn3a; - int8 blu3a; - int8 red4b; - int8 grn4b; - int8 blu4b; - int8 red5g; - int8 grn5g; - int8 blu5g; - int8 red6l; - int8 grn6l; - int8 blu6l; - int8 red7f; - int8 grn7f; - int8 blu7f; - int8 red8x; - int8 grn8x; - int8 blu8x; - int8 red9x; - int8 grn9x; - int8 blu9x; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * NpcTypesTintRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * NpcTypesTintRepository::GetWhereNeverExpires() + * NpcTypesTintRepository::GetWhereXAndY() + * NpcTypesTintRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "tint_set_name", - "red1h", - "grn1h", - "blu1h", - "red2c", - "grn2c", - "blu2c", - "red3a", - "grn3a", - "blu3a", - "red4b", - "grn4b", - "blu4b", - "red5g", - "grn5g", - "blu5g", - "red6l", - "grn6l", - "blu6l", - "red7f", - "grn7f", - "blu7f", - "red8x", - "grn8x", - "blu8x", - "red9x", - "grn9x", - "blu9x", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("npc_types_tint"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static NpcTypesTint NewEntity() - { - NpcTypesTint entry{}; - - entry.id = 0; - entry.tint_set_name = ""; - entry.red1h = 0; - entry.grn1h = 0; - entry.blu1h = 0; - entry.red2c = 0; - entry.grn2c = 0; - entry.blu2c = 0; - entry.red3a = 0; - entry.grn3a = 0; - entry.blu3a = 0; - entry.red4b = 0; - entry.grn4b = 0; - entry.blu4b = 0; - entry.red5g = 0; - entry.grn5g = 0; - entry.blu5g = 0; - entry.red6l = 0; - entry.grn6l = 0; - entry.blu6l = 0; - entry.red7f = 0; - entry.grn7f = 0; - entry.blu7f = 0; - entry.red8x = 0; - entry.grn8x = 0; - entry.blu8x = 0; - entry.red9x = 0; - entry.grn9x = 0; - entry.blu9x = 0; - - return entry; - } - - static NpcTypesTint GetNpcTypesTintEntry( - const std::vector &npc_types_tints, - int npc_types_tint_id - ) - { - for (auto &npc_types_tint : npc_types_tints) { - if (npc_types_tint.id == npc_types_tint_id) { - return npc_types_tint; - } - } - - return NewEntity(); - } - - static NpcTypesTint FindOne( - int npc_types_tint_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - npc_types_tint_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - NpcTypesTint entry{}; - - entry.id = atoi(row[0]); - entry.tint_set_name = row[1] ? row[1] : ""; - entry.red1h = atoi(row[2]); - entry.grn1h = atoi(row[3]); - entry.blu1h = atoi(row[4]); - entry.red2c = atoi(row[5]); - entry.grn2c = atoi(row[6]); - entry.blu2c = atoi(row[7]); - entry.red3a = atoi(row[8]); - entry.grn3a = atoi(row[9]); - entry.blu3a = atoi(row[10]); - entry.red4b = atoi(row[11]); - entry.grn4b = atoi(row[12]); - entry.blu4b = atoi(row[13]); - entry.red5g = atoi(row[14]); - entry.grn5g = atoi(row[15]); - entry.blu5g = atoi(row[16]); - entry.red6l = atoi(row[17]); - entry.grn6l = atoi(row[18]); - entry.blu6l = atoi(row[19]); - entry.red7f = atoi(row[20]); - entry.grn7f = atoi(row[21]); - entry.blu7f = atoi(row[22]); - entry.red8x = atoi(row[23]); - entry.grn8x = atoi(row[24]); - entry.blu8x = atoi(row[25]); - entry.red9x = atoi(row[26]); - entry.grn9x = atoi(row[27]); - entry.blu9x = atoi(row[28]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int npc_types_tint_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - npc_types_tint_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - NpcTypesTint npc_types_tint_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(npc_types_tint_entry.red1h)); - update_values.push_back(columns[3] + " = " + std::to_string(npc_types_tint_entry.grn1h)); - update_values.push_back(columns[4] + " = " + std::to_string(npc_types_tint_entry.blu1h)); - update_values.push_back(columns[5] + " = " + std::to_string(npc_types_tint_entry.red2c)); - update_values.push_back(columns[6] + " = " + std::to_string(npc_types_tint_entry.grn2c)); - update_values.push_back(columns[7] + " = " + std::to_string(npc_types_tint_entry.blu2c)); - update_values.push_back(columns[8] + " = " + std::to_string(npc_types_tint_entry.red3a)); - update_values.push_back(columns[9] + " = " + std::to_string(npc_types_tint_entry.grn3a)); - update_values.push_back(columns[10] + " = " + std::to_string(npc_types_tint_entry.blu3a)); - update_values.push_back(columns[11] + " = " + std::to_string(npc_types_tint_entry.red4b)); - update_values.push_back(columns[12] + " = " + std::to_string(npc_types_tint_entry.grn4b)); - update_values.push_back(columns[13] + " = " + std::to_string(npc_types_tint_entry.blu4b)); - update_values.push_back(columns[14] + " = " + std::to_string(npc_types_tint_entry.red5g)); - update_values.push_back(columns[15] + " = " + std::to_string(npc_types_tint_entry.grn5g)); - update_values.push_back(columns[16] + " = " + std::to_string(npc_types_tint_entry.blu5g)); - update_values.push_back(columns[17] + " = " + std::to_string(npc_types_tint_entry.red6l)); - update_values.push_back(columns[18] + " = " + std::to_string(npc_types_tint_entry.grn6l)); - update_values.push_back(columns[19] + " = " + std::to_string(npc_types_tint_entry.blu6l)); - update_values.push_back(columns[20] + " = " + std::to_string(npc_types_tint_entry.red7f)); - update_values.push_back(columns[21] + " = " + std::to_string(npc_types_tint_entry.grn7f)); - update_values.push_back(columns[22] + " = " + std::to_string(npc_types_tint_entry.blu7f)); - update_values.push_back(columns[23] + " = " + std::to_string(npc_types_tint_entry.red8x)); - update_values.push_back(columns[24] + " = " + std::to_string(npc_types_tint_entry.grn8x)); - update_values.push_back(columns[25] + " = " + std::to_string(npc_types_tint_entry.blu8x)); - update_values.push_back(columns[26] + " = " + std::to_string(npc_types_tint_entry.red9x)); - update_values.push_back(columns[27] + " = " + std::to_string(npc_types_tint_entry.grn9x)); - update_values.push_back(columns[28] + " = " + std::to_string(npc_types_tint_entry.blu9x)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - npc_types_tint_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static NpcTypesTint InsertOne( - NpcTypesTint npc_types_tint_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); - insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - npc_types_tint_entry.id = results.LastInsertedID(); - return npc_types_tint_entry; - } - - npc_types_tint_entry = NpcTypesTintRepository::NewEntity(); - - return npc_types_tint_entry; - } - - static int InsertMany( - std::vector npc_types_tint_entries - ) - { - std::vector insert_chunks; - - for (auto &npc_types_tint_entry: npc_types_tint_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); - insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu1h)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu2c)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu3a)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu4b)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu5g)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu6l)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu7f)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu8x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.red9x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.grn9x)); - insert_values.push_back(std::to_string(npc_types_tint_entry.blu9x)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcTypesTint entry{}; - - entry.id = atoi(row[0]); - entry.tint_set_name = row[1] ? row[1] : ""; - entry.red1h = atoi(row[2]); - entry.grn1h = atoi(row[3]); - entry.blu1h = atoi(row[4]); - entry.red2c = atoi(row[5]); - entry.grn2c = atoi(row[6]); - entry.blu2c = atoi(row[7]); - entry.red3a = atoi(row[8]); - entry.grn3a = atoi(row[9]); - entry.blu3a = atoi(row[10]); - entry.red4b = atoi(row[11]); - entry.grn4b = atoi(row[12]); - entry.blu4b = atoi(row[13]); - entry.red5g = atoi(row[14]); - entry.grn5g = atoi(row[15]); - entry.blu5g = atoi(row[16]); - entry.red6l = atoi(row[17]); - entry.grn6l = atoi(row[18]); - entry.blu6l = atoi(row[19]); - entry.red7f = atoi(row[20]); - entry.grn7f = atoi(row[21]); - entry.blu7f = atoi(row[22]); - entry.red8x = atoi(row[23]); - entry.grn8x = atoi(row[24]); - entry.blu8x = atoi(row[25]); - entry.red9x = atoi(row[26]); - entry.grn9x = atoi(row[27]); - entry.blu9x = atoi(row[28]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - NpcTypesTint entry{}; - - entry.id = atoi(row[0]); - entry.tint_set_name = row[1] ? row[1] : ""; - entry.red1h = atoi(row[2]); - entry.grn1h = atoi(row[3]); - entry.blu1h = atoi(row[4]); - entry.red2c = atoi(row[5]); - entry.grn2c = atoi(row[6]); - entry.blu2c = atoi(row[7]); - entry.red3a = atoi(row[8]); - entry.grn3a = atoi(row[9]); - entry.blu3a = atoi(row[10]); - entry.red4b = atoi(row[11]); - entry.grn4b = atoi(row[12]); - entry.blu4b = atoi(row[13]); - entry.red5g = atoi(row[14]); - entry.grn5g = atoi(row[15]); - entry.blu5g = atoi(row[16]); - entry.red6l = atoi(row[17]); - entry.grn6l = atoi(row[18]); - entry.blu6l = atoi(row[19]); - entry.red7f = atoi(row[20]); - entry.grn7f = atoi(row[21]); - entry.blu7f = atoi(row[22]); - entry.red8x = atoi(row[23]); - entry.grn8x = atoi(row[24]); - entry.blu8x = atoi(row[25]); - entry.red9x = atoi(row[26]); - entry.grn9x = atoi(row[27]); - entry.blu9x = atoi(row[28]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index 7baa5ec15..03abd5bba 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -23,362 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_object_contents_repository.h" -class ObjectContentsRepository { +class ObjectContentsRepository: public BaseObjectContentsRepository { public: - struct ObjectContents { - int zoneid; - int parentid; - int bagidx; - int itemid; - int16 charges; - std::string droptime; - int augslot1; - int augslot2; - int augslot3; - int augslot4; - int augslot5; - int augslot6; - }; - static std::string PrimaryKey() - { - return std::string("bagidx"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ObjectContentsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ObjectContentsRepository::GetWhereNeverExpires() + * ObjectContentsRepository::GetWhereXAndY() + * ObjectContentsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "zoneid", - "parentid", - "bagidx", - "itemid", - "charges", - "droptime", - "augslot1", - "augslot2", - "augslot3", - "augslot4", - "augslot5", - "augslot6", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("object_contents"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static ObjectContents NewEntity() - { - ObjectContents entry{}; - - entry.zoneid = 0; - entry.parentid = 0; - entry.bagidx = 0; - entry.itemid = 0; - entry.charges = 0; - entry.droptime = "0000-00-00 00:00:00"; - entry.augslot1 = 0; - entry.augslot2 = 0; - entry.augslot3 = 0; - entry.augslot4 = 0; - entry.augslot5 = 0; - entry.augslot6 = 0; - - return entry; - } - - static ObjectContents GetObjectContentsEntry( - const std::vector &object_contentss, - int object_contents_id - ) - { - for (auto &object_contents : object_contentss) { - if (object_contents.bagidx == object_contents_id) { - return object_contents; - } - } - - return NewEntity(); - } - - static ObjectContents FindOne( - int object_contents_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - object_contents_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - ObjectContents entry{}; - - entry.zoneid = atoi(row[0]); - entry.parentid = atoi(row[1]); - entry.bagidx = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.droptime = row[5] ? row[5] : ""; - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int object_contents_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - object_contents_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - ObjectContents object_contents_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(object_contents_entry.zoneid)); - update_values.push_back(columns[3] + " = " + std::to_string(object_contents_entry.itemid)); - update_values.push_back(columns[4] + " = " + std::to_string(object_contents_entry.charges)); - update_values.push_back(columns[5] + " = '" + EscapeString(object_contents_entry.droptime) + "'"); - update_values.push_back(columns[6] + " = " + std::to_string(object_contents_entry.augslot1)); - update_values.push_back(columns[7] + " = " + std::to_string(object_contents_entry.augslot2)); - update_values.push_back(columns[8] + " = " + std::to_string(object_contents_entry.augslot3)); - update_values.push_back(columns[9] + " = " + std::to_string(object_contents_entry.augslot4)); - update_values.push_back(columns[10] + " = " + std::to_string(object_contents_entry.augslot5)); - update_values.push_back(columns[11] + " = " + std::to_string(object_contents_entry.augslot6)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - object_contents_entry.bagidx - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static ObjectContents InsertOne( - ObjectContents object_contents_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(object_contents_entry.zoneid)); - insert_values.push_back(std::to_string(object_contents_entry.itemid)); - insert_values.push_back(std::to_string(object_contents_entry.charges)); - insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); - insert_values.push_back(std::to_string(object_contents_entry.augslot1)); - insert_values.push_back(std::to_string(object_contents_entry.augslot2)); - insert_values.push_back(std::to_string(object_contents_entry.augslot3)); - insert_values.push_back(std::to_string(object_contents_entry.augslot4)); - insert_values.push_back(std::to_string(object_contents_entry.augslot5)); - insert_values.push_back(std::to_string(object_contents_entry.augslot6)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - object_contents_entry.id = results.LastInsertedID(); - return object_contents_entry; - } - - object_contents_entry = ObjectContentsRepository::NewEntity(); - - return object_contents_entry; - } - - static int InsertMany( - std::vector object_contents_entries - ) - { - std::vector insert_chunks; - - for (auto &object_contents_entry: object_contents_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(object_contents_entry.zoneid)); - insert_values.push_back(std::to_string(object_contents_entry.itemid)); - insert_values.push_back(std::to_string(object_contents_entry.charges)); - insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); - insert_values.push_back(std::to_string(object_contents_entry.augslot1)); - insert_values.push_back(std::to_string(object_contents_entry.augslot2)); - insert_values.push_back(std::to_string(object_contents_entry.augslot3)); - insert_values.push_back(std::to_string(object_contents_entry.augslot4)); - insert_values.push_back(std::to_string(object_contents_entry.augslot5)); - insert_values.push_back(std::to_string(object_contents_entry.augslot6)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ObjectContents entry{}; - - entry.zoneid = atoi(row[0]); - entry.parentid = atoi(row[1]); - entry.bagidx = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.droptime = row[5] ? row[5] : ""; - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ObjectContents entry{}; - - entry.zoneid = atoi(row[0]); - entry.parentid = atoi(row[1]); - entry.bagidx = atoi(row[2]); - entry.itemid = atoi(row[3]); - entry.charges = atoi(row[4]); - entry.droptime = row[5] ? row[5] : ""; - entry.augslot1 = atoi(row[6]); - entry.augslot2 = atoi(row[7]); - entry.augslot3 = atoi(row[8]); - entry.augslot4 = atoi(row[9]); - entry.augslot5 = atoi(row[10]); - entry.augslot6 = atoi(row[11]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index 932769ed6..bfee7bf01 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -23,491 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_object_repository.h" -class ObjectRepository { +class ObjectRepository: public BaseObjectRepository { public: - struct Object { - int id; - int zoneid; - int16 version; - float xpos; - float ypos; - float zpos; - float heading; - int itemid; - int16 charges; - std::string objectname; - int type; - int icon; - int unknown08; - int unknown10; - int unknown20; - int unknown24; - int unknown60; - int unknown64; - int unknown68; - int unknown72; - int unknown76; - int unknown84; - float size; - float tilt_x; - float tilt_y; - std::string display_name; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ObjectRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ObjectRepository::GetWhereNeverExpires() + * ObjectRepository::GetWhereXAndY() + * ObjectRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zoneid", - "version", - "xpos", - "ypos", - "zpos", - "heading", - "itemid", - "charges", - "objectname", - "type", - "icon", - "unknown08", - "unknown10", - "unknown20", - "unknown24", - "unknown60", - "unknown64", - "unknown68", - "unknown72", - "unknown76", - "unknown84", - "size", - "tilt_x", - "tilt_y", - "display_name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("object"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Object NewEntity() - { - Object entry{}; - - entry.id = 0; - entry.zoneid = 0; - entry.version = 0; - entry.xpos = 0; - entry.ypos = 0; - entry.zpos = 0; - entry.heading = 0; - entry.itemid = 0; - entry.charges = 0; - entry.objectname = ""; - entry.type = 0; - entry.icon = 0; - entry.unknown08 = 0; - entry.unknown10 = 0; - entry.unknown20 = 0; - entry.unknown24 = 0; - entry.unknown60 = 0; - entry.unknown64 = 0; - entry.unknown68 = 0; - entry.unknown72 = 0; - entry.unknown76 = 0; - entry.unknown84 = 0; - entry.size = 100; - entry.tilt_x = 0; - entry.tilt_y = 0; - entry.display_name = ""; - - return entry; - } - - static Object GetObjectEntry( - const std::vector &objects, - int object_id - ) - { - for (auto &object : objects) { - if (object.id == object_id) { - return object; - } - } - - return NewEntity(); - } - - static Object FindOne( - int object_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - object_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Object entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); - entry.display_name = row[25] ? row[25] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int object_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - object_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Object object_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(object_entry.zoneid)); - update_values.push_back(columns[2] + " = " + std::to_string(object_entry.version)); - update_values.push_back(columns[3] + " = " + std::to_string(object_entry.xpos)); - update_values.push_back(columns[4] + " = " + std::to_string(object_entry.ypos)); - update_values.push_back(columns[5] + " = " + std::to_string(object_entry.zpos)); - update_values.push_back(columns[6] + " = " + std::to_string(object_entry.heading)); - update_values.push_back(columns[7] + " = " + std::to_string(object_entry.itemid)); - update_values.push_back(columns[8] + " = " + std::to_string(object_entry.charges)); - update_values.push_back(columns[9] + " = '" + EscapeString(object_entry.objectname) + "'"); - update_values.push_back(columns[10] + " = " + std::to_string(object_entry.type)); - update_values.push_back(columns[11] + " = " + std::to_string(object_entry.icon)); - update_values.push_back(columns[12] + " = " + std::to_string(object_entry.unknown08)); - update_values.push_back(columns[13] + " = " + std::to_string(object_entry.unknown10)); - update_values.push_back(columns[14] + " = " + std::to_string(object_entry.unknown20)); - update_values.push_back(columns[15] + " = " + std::to_string(object_entry.unknown24)); - update_values.push_back(columns[16] + " = " + std::to_string(object_entry.unknown60)); - update_values.push_back(columns[17] + " = " + std::to_string(object_entry.unknown64)); - update_values.push_back(columns[18] + " = " + std::to_string(object_entry.unknown68)); - update_values.push_back(columns[19] + " = " + std::to_string(object_entry.unknown72)); - update_values.push_back(columns[20] + " = " + std::to_string(object_entry.unknown76)); - update_values.push_back(columns[21] + " = " + std::to_string(object_entry.unknown84)); - update_values.push_back(columns[22] + " = " + std::to_string(object_entry.size)); - update_values.push_back(columns[23] + " = " + std::to_string(object_entry.tilt_x)); - update_values.push_back(columns[24] + " = " + std::to_string(object_entry.tilt_y)); - update_values.push_back(columns[25] + " = '" + EscapeString(object_entry.display_name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - object_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Object InsertOne( - Object object_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(object_entry.zoneid)); - insert_values.push_back(std::to_string(object_entry.version)); - insert_values.push_back(std::to_string(object_entry.xpos)); - insert_values.push_back(std::to_string(object_entry.ypos)); - insert_values.push_back(std::to_string(object_entry.zpos)); - insert_values.push_back(std::to_string(object_entry.heading)); - insert_values.push_back(std::to_string(object_entry.itemid)); - insert_values.push_back(std::to_string(object_entry.charges)); - insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); - insert_values.push_back(std::to_string(object_entry.type)); - insert_values.push_back(std::to_string(object_entry.icon)); - insert_values.push_back(std::to_string(object_entry.unknown08)); - insert_values.push_back(std::to_string(object_entry.unknown10)); - insert_values.push_back(std::to_string(object_entry.unknown20)); - insert_values.push_back(std::to_string(object_entry.unknown24)); - insert_values.push_back(std::to_string(object_entry.unknown60)); - insert_values.push_back(std::to_string(object_entry.unknown64)); - insert_values.push_back(std::to_string(object_entry.unknown68)); - insert_values.push_back(std::to_string(object_entry.unknown72)); - insert_values.push_back(std::to_string(object_entry.unknown76)); - insert_values.push_back(std::to_string(object_entry.unknown84)); - insert_values.push_back(std::to_string(object_entry.size)); - insert_values.push_back(std::to_string(object_entry.tilt_x)); - insert_values.push_back(std::to_string(object_entry.tilt_y)); - insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - object_entry.id = results.LastInsertedID(); - return object_entry; - } - - object_entry = ObjectRepository::NewEntity(); - - return object_entry; - } - - static int InsertMany( - std::vector object_entries - ) - { - std::vector insert_chunks; - - for (auto &object_entry: object_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(object_entry.zoneid)); - insert_values.push_back(std::to_string(object_entry.version)); - insert_values.push_back(std::to_string(object_entry.xpos)); - insert_values.push_back(std::to_string(object_entry.ypos)); - insert_values.push_back(std::to_string(object_entry.zpos)); - insert_values.push_back(std::to_string(object_entry.heading)); - insert_values.push_back(std::to_string(object_entry.itemid)); - insert_values.push_back(std::to_string(object_entry.charges)); - insert_values.push_back("'" + EscapeString(object_entry.objectname) + "'"); - insert_values.push_back(std::to_string(object_entry.type)); - insert_values.push_back(std::to_string(object_entry.icon)); - insert_values.push_back(std::to_string(object_entry.unknown08)); - insert_values.push_back(std::to_string(object_entry.unknown10)); - insert_values.push_back(std::to_string(object_entry.unknown20)); - insert_values.push_back(std::to_string(object_entry.unknown24)); - insert_values.push_back(std::to_string(object_entry.unknown60)); - insert_values.push_back(std::to_string(object_entry.unknown64)); - insert_values.push_back(std::to_string(object_entry.unknown68)); - insert_values.push_back(std::to_string(object_entry.unknown72)); - insert_values.push_back(std::to_string(object_entry.unknown76)); - insert_values.push_back(std::to_string(object_entry.unknown84)); - insert_values.push_back(std::to_string(object_entry.size)); - insert_values.push_back(std::to_string(object_entry.tilt_x)); - insert_values.push_back(std::to_string(object_entry.tilt_y)); - insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Object entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); - entry.display_name = row[25] ? row[25] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Object entry{}; - - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); - entry.display_name = row[25] ? row[25] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index 542bc8716..a221d4312 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -23,320 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_perl_event_export_settings_repository.h" -class PerlEventExportSettingsRepository { +class PerlEventExportSettingsRepository: public BasePerlEventExportSettingsRepository { public: - struct PerlEventExportSettings { - int event_id; - std::string event_description; - int16 export_qglobals; - int16 export_mob; - int16 export_zone; - int16 export_item; - int16 export_event; - }; - static std::string PrimaryKey() - { - return std::string("event_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PerlEventExportSettingsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PerlEventExportSettingsRepository::GetWhereNeverExpires() + * PerlEventExportSettingsRepository::GetWhereXAndY() + * PerlEventExportSettingsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "event_id", - "event_description", - "export_qglobals", - "export_mob", - "export_zone", - "export_item", - "export_event", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("perl_event_export_settings"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static PerlEventExportSettings NewEntity() - { - PerlEventExportSettings entry{}; - - entry.event_id = 0; - entry.event_description = ""; - entry.export_qglobals = 0; - entry.export_mob = 0; - entry.export_zone = 0; - entry.export_item = 0; - entry.export_event = 0; - - return entry; - } - - static PerlEventExportSettings GetPerlEventExportSettingsEntry( - const std::vector &perl_event_export_settingss, - int perl_event_export_settings_id - ) - { - for (auto &perl_event_export_settings : perl_event_export_settingss) { - if (perl_event_export_settings.event_id == perl_event_export_settings_id) { - return perl_event_export_settings; - } - } - - return NewEntity(); - } - - static PerlEventExportSettings FindOne( - int perl_event_export_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - perl_event_export_settings_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - PerlEventExportSettings entry{}; - - entry.event_id = atoi(row[0]); - entry.event_description = row[1] ? row[1] : ""; - entry.export_qglobals = atoi(row[2]); - entry.export_mob = atoi(row[3]); - entry.export_zone = atoi(row[4]); - entry.export_item = atoi(row[5]); - entry.export_event = atoi(row[6]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int perl_event_export_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - perl_event_export_settings_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - PerlEventExportSettings perl_event_export_settings_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(perl_event_export_settings_entry.export_qglobals)); - update_values.push_back(columns[3] + " = " + std::to_string(perl_event_export_settings_entry.export_mob)); - update_values.push_back(columns[4] + " = " + std::to_string(perl_event_export_settings_entry.export_zone)); - update_values.push_back(columns[5] + " = " + std::to_string(perl_event_export_settings_entry.export_item)); - update_values.push_back(columns[6] + " = " + std::to_string(perl_event_export_settings_entry.export_event)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - perl_event_export_settings_entry.event_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static PerlEventExportSettings InsertOne( - PerlEventExportSettings perl_event_export_settings_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - perl_event_export_settings_entry.id = results.LastInsertedID(); - return perl_event_export_settings_entry; - } - - perl_event_export_settings_entry = PerlEventExportSettingsRepository::NewEntity(); - - return perl_event_export_settings_entry; - } - - static int InsertMany( - std::vector perl_event_export_settings_entries - ) - { - std::vector insert_chunks; - - for (auto &perl_event_export_settings_entry: perl_event_export_settings_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_zone)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_item)); - insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_event)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PerlEventExportSettings entry{}; - - entry.event_id = atoi(row[0]); - entry.event_description = row[1] ? row[1] : ""; - entry.export_qglobals = atoi(row[2]); - entry.export_mob = atoi(row[3]); - entry.export_zone = atoi(row[4]); - entry.export_item = atoi(row[5]); - entry.export_event = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PerlEventExportSettings entry{}; - - entry.event_id = atoi(row[0]); - entry.event_description = row[1] ? row[1] : ""; - entry.export_qglobals = atoi(row[2]); - entry.export_mob = atoi(row[3]); - entry.export_zone = atoi(row[4]); - entry.export_item = atoi(row[5]); - entry.export_event = atoi(row[6]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index caf6908c1..3d1c4f9e2 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -23,401 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_petitions_repository.h" -class PetitionsRepository { +class PetitionsRepository: public BasePetitionsRepository { public: - struct Petitions { - int dib; - int petid; - std::string charname; - std::string accountname; - std::string lastgm; - std::string petitiontext; - std::string gmtext; - std::string zone; - int urgency; - int charclass; - int charrace; - int charlevel; - int checkouts; - int unavailables; - int8 ischeckedout; - int senttime; - }; - static std::string PrimaryKey() - { - return std::string("dib"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PetitionsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PetitionsRepository::GetWhereNeverExpires() + * PetitionsRepository::GetWhereXAndY() + * PetitionsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "dib", - "petid", - "charname", - "accountname", - "lastgm", - "petitiontext", - "gmtext", - "zone", - "urgency", - "charclass", - "charrace", - "charlevel", - "checkouts", - "unavailables", - "ischeckedout", - "senttime", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("petitions"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Petitions NewEntity() - { - Petitions entry{}; - - entry.dib = 0; - entry.petid = 0; - entry.charname = ""; - entry.accountname = ""; - entry.lastgm = ""; - entry.petitiontext = ""; - entry.gmtext = ""; - entry.zone = ""; - entry.urgency = 0; - entry.charclass = 0; - entry.charrace = 0; - entry.charlevel = 0; - entry.checkouts = 0; - entry.unavailables = 0; - entry.ischeckedout = 0; - entry.senttime = 0; - - return entry; - } - - static Petitions GetPetitionsEntry( - const std::vector &petitionss, - int petitions_id - ) - { - for (auto &petitions : petitionss) { - if (petitions.dib == petitions_id) { - return petitions; - } - } - - return NewEntity(); - } - - static Petitions FindOne( - int petitions_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - petitions_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Petitions entry{}; - - entry.dib = atoi(row[0]); - entry.petid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.accountname = row[3] ? row[3] : ""; - entry.lastgm = row[4] ? row[4] : ""; - entry.petitiontext = row[5] ? row[5] : ""; - entry.gmtext = row[6] ? row[6] : ""; - entry.zone = row[7] ? row[7] : ""; - entry.urgency = atoi(row[8]); - entry.charclass = atoi(row[9]); - entry.charrace = atoi(row[10]); - entry.charlevel = atoi(row[11]); - entry.checkouts = atoi(row[12]); - entry.unavailables = atoi(row[13]); - entry.ischeckedout = atoi(row[14]); - entry.senttime = atoi(row[15]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int petitions_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - petitions_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Petitions petitions_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(petitions_entry.petid)); - update_values.push_back(columns[2] + " = '" + EscapeString(petitions_entry.charname) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(petitions_entry.accountname) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(petitions_entry.lastgm) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(petitions_entry.petitiontext) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(petitions_entry.gmtext) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(petitions_entry.zone) + "'"); - update_values.push_back(columns[8] + " = " + std::to_string(petitions_entry.urgency)); - update_values.push_back(columns[9] + " = " + std::to_string(petitions_entry.charclass)); - update_values.push_back(columns[10] + " = " + std::to_string(petitions_entry.charrace)); - update_values.push_back(columns[11] + " = " + std::to_string(petitions_entry.charlevel)); - update_values.push_back(columns[12] + " = " + std::to_string(petitions_entry.checkouts)); - update_values.push_back(columns[13] + " = " + std::to_string(petitions_entry.unavailables)); - update_values.push_back(columns[14] + " = " + std::to_string(petitions_entry.ischeckedout)); - update_values.push_back(columns[15] + " = " + std::to_string(petitions_entry.senttime)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - petitions_entry.dib - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Petitions InsertOne( - Petitions petitions_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(petitions_entry.petid)); - insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); - insert_values.push_back(std::to_string(petitions_entry.urgency)); - insert_values.push_back(std::to_string(petitions_entry.charclass)); - insert_values.push_back(std::to_string(petitions_entry.charrace)); - insert_values.push_back(std::to_string(petitions_entry.charlevel)); - insert_values.push_back(std::to_string(petitions_entry.checkouts)); - insert_values.push_back(std::to_string(petitions_entry.unavailables)); - insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); - insert_values.push_back(std::to_string(petitions_entry.senttime)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - petitions_entry.id = results.LastInsertedID(); - return petitions_entry; - } - - petitions_entry = PetitionsRepository::NewEntity(); - - return petitions_entry; - } - - static int InsertMany( - std::vector petitions_entries - ) - { - std::vector insert_chunks; - - for (auto &petitions_entry: petitions_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(petitions_entry.petid)); - insert_values.push_back("'" + EscapeString(petitions_entry.charname) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.accountname) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.lastgm) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.petitiontext) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.gmtext) + "'"); - insert_values.push_back("'" + EscapeString(petitions_entry.zone) + "'"); - insert_values.push_back(std::to_string(petitions_entry.urgency)); - insert_values.push_back(std::to_string(petitions_entry.charclass)); - insert_values.push_back(std::to_string(petitions_entry.charrace)); - insert_values.push_back(std::to_string(petitions_entry.charlevel)); - insert_values.push_back(std::to_string(petitions_entry.checkouts)); - insert_values.push_back(std::to_string(petitions_entry.unavailables)); - insert_values.push_back(std::to_string(petitions_entry.ischeckedout)); - insert_values.push_back(std::to_string(petitions_entry.senttime)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Petitions entry{}; - - entry.dib = atoi(row[0]); - entry.petid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.accountname = row[3] ? row[3] : ""; - entry.lastgm = row[4] ? row[4] : ""; - entry.petitiontext = row[5] ? row[5] : ""; - entry.gmtext = row[6] ? row[6] : ""; - entry.zone = row[7] ? row[7] : ""; - entry.urgency = atoi(row[8]); - entry.charclass = atoi(row[9]); - entry.charrace = atoi(row[10]); - entry.charlevel = atoi(row[11]); - entry.checkouts = atoi(row[12]); - entry.unavailables = atoi(row[13]); - entry.ischeckedout = atoi(row[14]); - entry.senttime = atoi(row[15]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Petitions entry{}; - - entry.dib = atoi(row[0]); - entry.petid = atoi(row[1]); - entry.charname = row[2] ? row[2] : ""; - entry.accountname = row[3] ? row[3] : ""; - entry.lastgm = row[4] ? row[4] : ""; - entry.petitiontext = row[5] ? row[5] : ""; - entry.gmtext = row[6] ? row[6] : ""; - entry.zone = row[7] ? row[7] : ""; - entry.urgency = atoi(row[8]); - entry.charclass = atoi(row[9]); - entry.charrace = atoi(row[10]); - entry.charlevel = atoi(row[11]); - entry.checkouts = atoi(row[12]); - entry.unavailables = atoi(row[13]); - entry.ischeckedout = atoi(row[14]); - entry.senttime = atoi(row[15]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/pets_equipmentset_entries_repository.h b/common/repositories/pets_equipmentset_entries_repository.h index f073eadca..284248cba 100644 --- a/common/repositories/pets_equipmentset_entries_repository.h +++ b/common/repositories/pets_equipmentset_entries_repository.h @@ -23,281 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_pets_equipmentset_entries_repository.h" -class PetsEquipmentsetEntriesRepository { +class PetsEquipmentsetEntriesRepository: public BasePetsEquipmentsetEntriesRepository { public: - struct PetsEquipmentsetEntries { - int set_id; - int slot; - int item_id; - }; - static std::string PrimaryKey() - { - return std::string("slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PetsEquipmentsetEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PetsEquipmentsetEntriesRepository::GetWhereNeverExpires() + * PetsEquipmentsetEntriesRepository::GetWhereXAndY() + * PetsEquipmentsetEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "set_id", - "slot", - "item_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("pets_equipmentset_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static PetsEquipmentsetEntries NewEntity() - { - PetsEquipmentsetEntries entry{}; - - entry.set_id = 0; - entry.slot = 0; - entry.item_id = 0; - - return entry; - } - - static PetsEquipmentsetEntries GetPetsEquipmentsetEntriesEntry( - const std::vector &pets_equipmentset_entriess, - int pets_equipmentset_entries_id - ) - { - for (auto &pets_equipmentset_entries : pets_equipmentset_entriess) { - if (pets_equipmentset_entries.slot == pets_equipmentset_entries_id) { - return pets_equipmentset_entries; - } - } - - return NewEntity(); - } - - static PetsEquipmentsetEntries FindOne( - int pets_equipmentset_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - pets_equipmentset_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - PetsEquipmentsetEntries entry{}; - - entry.set_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int pets_equipmentset_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - pets_equipmentset_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - PetsEquipmentsetEntries pets_equipmentset_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entries_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - pets_equipmentset_entries_entry.slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static PetsEquipmentsetEntries InsertOne( - PetsEquipmentsetEntries pets_equipmentset_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - pets_equipmentset_entries_entry.id = results.LastInsertedID(); - return pets_equipmentset_entries_entry; - } - - pets_equipmentset_entries_entry = PetsEquipmentsetEntriesRepository::NewEntity(); - - return pets_equipmentset_entries_entry; - } - - static int InsertMany( - std::vector pets_equipmentset_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &pets_equipmentset_entries_entry: pets_equipmentset_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PetsEquipmentsetEntries entry{}; - - entry.set_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PetsEquipmentsetEntries entry{}; - - entry.set_id = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item_id = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h index da0e18b53..45ec40bfc 100644 --- a/common/repositories/pets_equipmentset_repository.h +++ b/common/repositories/pets_equipmentset_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_pets_equipmentset_repository.h" -class PetsEquipmentsetRepository { +class PetsEquipmentsetRepository: public BasePetsEquipmentsetRepository { public: - struct PetsEquipmentset { - int set_id; - std::string setname; - int nested_set; - }; - static std::string PrimaryKey() - { - return std::string("set_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PetsEquipmentsetRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PetsEquipmentsetRepository::GetWhereNeverExpires() + * PetsEquipmentsetRepository::GetWhereXAndY() + * PetsEquipmentsetRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "set_id", - "setname", - "nested_set", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("pets_equipmentset"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static PetsEquipmentset NewEntity() - { - PetsEquipmentset entry{}; - - entry.set_id = 0; - entry.setname = ""; - entry.nested_set = -1; - - return entry; - } - - static PetsEquipmentset GetPetsEquipmentsetEntry( - const std::vector &pets_equipmentsets, - int pets_equipmentset_id - ) - { - for (auto &pets_equipmentset : pets_equipmentsets) { - if (pets_equipmentset.set_id == pets_equipmentset_id) { - return pets_equipmentset; - } - } - - return NewEntity(); - } - - static PetsEquipmentset FindOne( - int pets_equipmentset_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - pets_equipmentset_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - PetsEquipmentset entry{}; - - entry.set_id = atoi(row[0]); - entry.setname = row[1] ? row[1] : ""; - entry.nested_set = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int pets_equipmentset_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - pets_equipmentset_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - PetsEquipmentset pets_equipmentset_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(pets_equipmentset_entry.setname) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entry.nested_set)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - pets_equipmentset_entry.set_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static PetsEquipmentset InsertOne( - PetsEquipmentset pets_equipmentset_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); - insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - pets_equipmentset_entry.id = results.LastInsertedID(); - return pets_equipmentset_entry; - } - - pets_equipmentset_entry = PetsEquipmentsetRepository::NewEntity(); - - return pets_equipmentset_entry; - } - - static int InsertMany( - std::vector pets_equipmentset_entries - ) - { - std::vector insert_chunks; - - for (auto &pets_equipmentset_entry: pets_equipmentset_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); - insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PetsEquipmentset entry{}; - - entry.set_id = atoi(row[0]); - entry.setname = row[1] ? row[1] : ""; - entry.nested_set = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PetsEquipmentset entry{}; - - entry.set_id = atoi(row[0]); - entry.setname = row[1] ? row[1] : ""; - entry.nested_set = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h index 343003ba5..4f5d1135e 100644 --- a/common/repositories/pets_repository.h +++ b/common/repositories/pets_repository.h @@ -23,326 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_pets_repository.h" -class PetsRepository { +class PetsRepository: public BasePetsRepository { public: - struct Pets { - std::string type; - int petpower; - int npcID; - int8 temp; - int8 petcontrol; - int8 petnaming; - int8 monsterflag; - int equipmentset; - }; - static std::string PrimaryKey() - { - return std::string("petpower"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PetsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PetsRepository::GetWhereNeverExpires() + * PetsRepository::GetWhereXAndY() + * PetsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "type", - "petpower", - "npcID", - "temp", - "petcontrol", - "petnaming", - "monsterflag", - "equipmentset", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("pets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Pets NewEntity() - { - Pets entry{}; - - entry.type = ""; - entry.petpower = 0; - entry.npcID = 0; - entry.temp = 0; - entry.petcontrol = 0; - entry.petnaming = 0; - entry.monsterflag = 0; - entry.equipmentset = -1; - - return entry; - } - - static Pets GetPetsEntry( - const std::vector &petss, - int pets_id - ) - { - for (auto &pets : petss) { - if (pets.petpower == pets_id) { - return pets; - } - } - - return NewEntity(); - } - - static Pets FindOne( - int pets_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - pets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Pets entry{}; - - entry.type = row[0] ? row[0] : ""; - entry.petpower = atoi(row[1]); - entry.npcID = atoi(row[2]); - entry.temp = atoi(row[3]); - entry.petcontrol = atoi(row[4]); - entry.petnaming = atoi(row[5]); - entry.monsterflag = atoi(row[6]); - entry.equipmentset = atoi(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int pets_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - pets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Pets pets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(pets_entry.npcID)); - update_values.push_back(columns[3] + " = " + std::to_string(pets_entry.temp)); - update_values.push_back(columns[4] + " = " + std::to_string(pets_entry.petcontrol)); - update_values.push_back(columns[5] + " = " + std::to_string(pets_entry.petnaming)); - update_values.push_back(columns[6] + " = " + std::to_string(pets_entry.monsterflag)); - update_values.push_back(columns[7] + " = " + std::to_string(pets_entry.equipmentset)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - pets_entry.petpower - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Pets InsertOne( - Pets pets_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(pets_entry.npcID)); - insert_values.push_back(std::to_string(pets_entry.temp)); - insert_values.push_back(std::to_string(pets_entry.petcontrol)); - insert_values.push_back(std::to_string(pets_entry.petnaming)); - insert_values.push_back(std::to_string(pets_entry.monsterflag)); - insert_values.push_back(std::to_string(pets_entry.equipmentset)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - pets_entry.id = results.LastInsertedID(); - return pets_entry; - } - - pets_entry = PetsRepository::NewEntity(); - - return pets_entry; - } - - static int InsertMany( - std::vector pets_entries - ) - { - std::vector insert_chunks; - - for (auto &pets_entry: pets_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(pets_entry.npcID)); - insert_values.push_back(std::to_string(pets_entry.temp)); - insert_values.push_back(std::to_string(pets_entry.petcontrol)); - insert_values.push_back(std::to_string(pets_entry.petnaming)); - insert_values.push_back(std::to_string(pets_entry.monsterflag)); - insert_values.push_back(std::to_string(pets_entry.equipmentset)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Pets entry{}; - - entry.type = row[0] ? row[0] : ""; - entry.petpower = atoi(row[1]); - entry.npcID = atoi(row[2]); - entry.temp = atoi(row[3]); - entry.petcontrol = atoi(row[4]); - entry.petnaming = atoi(row[5]); - entry.monsterflag = atoi(row[6]); - entry.equipmentset = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Pets entry{}; - - entry.type = row[0] ? row[0] : ""; - entry.petpower = atoi(row[1]); - entry.npcID = atoi(row[2]); - entry.temp = atoi(row[3]); - entry.petcontrol = atoi(row[4]); - entry.petnaming = atoi(row[5]); - entry.monsterflag = atoi(row[6]); - entry.equipmentset = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/player_titlesets_repository.h b/common/repositories/player_titlesets_repository.h index 56ab065fd..b77157f98 100644 --- a/common/repositories/player_titlesets_repository.h +++ b/common/repositories/player_titlesets_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_player_titlesets_repository.h" -class PlayerTitlesetsRepository { +class PlayerTitlesetsRepository: public BasePlayerTitlesetsRepository { public: - struct PlayerTitlesets { - int id; - int char_id; - int title_set; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * PlayerTitlesetsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * PlayerTitlesetsRepository::GetWhereNeverExpires() + * PlayerTitlesetsRepository::GetWhereXAndY() + * PlayerTitlesetsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "char_id", - "title_set", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("player_titlesets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static PlayerTitlesets NewEntity() - { - PlayerTitlesets entry{}; - - entry.id = 0; - entry.char_id = 0; - entry.title_set = 0; - - return entry; - } - - static PlayerTitlesets GetPlayerTitlesetsEntry( - const std::vector &player_titlesetss, - int player_titlesets_id - ) - { - for (auto &player_titlesets : player_titlesetss) { - if (player_titlesets.id == player_titlesets_id) { - return player_titlesets; - } - } - - return NewEntity(); - } - - static PlayerTitlesets FindOne( - int player_titlesets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - player_titlesets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - PlayerTitlesets entry{}; - - entry.id = atoi(row[0]); - entry.char_id = atoi(row[1]); - entry.title_set = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int player_titlesets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - player_titlesets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - PlayerTitlesets player_titlesets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(player_titlesets_entry.char_id)); - update_values.push_back(columns[2] + " = " + std::to_string(player_titlesets_entry.title_set)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - player_titlesets_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static PlayerTitlesets InsertOne( - PlayerTitlesets player_titlesets_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); - insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - player_titlesets_entry.id = results.LastInsertedID(); - return player_titlesets_entry; - } - - player_titlesets_entry = PlayerTitlesetsRepository::NewEntity(); - - return player_titlesets_entry; - } - - static int InsertMany( - std::vector player_titlesets_entries - ) - { - std::vector insert_chunks; - - for (auto &player_titlesets_entry: player_titlesets_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(player_titlesets_entry.char_id)); - insert_values.push_back(std::to_string(player_titlesets_entry.title_set)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PlayerTitlesets entry{}; - - entry.id = atoi(row[0]); - entry.char_id = atoi(row[1]); - entry.title_set = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - PlayerTitlesets entry{}; - - entry.id = atoi(row[0]); - entry.char_id = atoi(row[1]); - entry.title_set = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h index 23ea49582..8940c25c1 100644 --- a/common/repositories/proximities_repository.h +++ b/common/repositories/proximities_repository.h @@ -23,326 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_proximities_repository.h" -class ProximitiesRepository { +class ProximitiesRepository: public BaseProximitiesRepository { public: - struct Proximities { - int zoneid; - int exploreid; - float minx; - float maxx; - float miny; - float maxy; - float minz; - float maxz; - }; - static std::string PrimaryKey() - { - return std::string("exploreid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ProximitiesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ProximitiesRepository::GetWhereNeverExpires() + * ProximitiesRepository::GetWhereXAndY() + * ProximitiesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "zoneid", - "exploreid", - "minx", - "maxx", - "miny", - "maxy", - "minz", - "maxz", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("proximities"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Proximities NewEntity() - { - Proximities entry{}; - - entry.zoneid = 0; - entry.exploreid = 0; - entry.minx = 0.000000; - entry.maxx = 0.000000; - entry.miny = 0.000000; - entry.maxy = 0.000000; - entry.minz = 0.000000; - entry.maxz = 0.000000; - - return entry; - } - - static Proximities GetProximitiesEntry( - const std::vector &proximitiess, - int proximities_id - ) - { - for (auto &proximities : proximitiess) { - if (proximities.exploreid == proximities_id) { - return proximities; - } - } - - return NewEntity(); - } - - static Proximities FindOne( - int proximities_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - proximities_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Proximities entry{}; - - entry.zoneid = atoi(row[0]); - entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int proximities_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - proximities_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Proximities proximities_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(proximities_entry.minx)); - update_values.push_back(columns[3] + " = " + std::to_string(proximities_entry.maxx)); - update_values.push_back(columns[4] + " = " + std::to_string(proximities_entry.miny)); - update_values.push_back(columns[5] + " = " + std::to_string(proximities_entry.maxy)); - update_values.push_back(columns[6] + " = " + std::to_string(proximities_entry.minz)); - update_values.push_back(columns[7] + " = " + std::to_string(proximities_entry.maxz)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - proximities_entry.exploreid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Proximities InsertOne( - Proximities proximities_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(proximities_entry.minx)); - insert_values.push_back(std::to_string(proximities_entry.maxx)); - insert_values.push_back(std::to_string(proximities_entry.miny)); - insert_values.push_back(std::to_string(proximities_entry.maxy)); - insert_values.push_back(std::to_string(proximities_entry.minz)); - insert_values.push_back(std::to_string(proximities_entry.maxz)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - proximities_entry.id = results.LastInsertedID(); - return proximities_entry; - } - - proximities_entry = ProximitiesRepository::NewEntity(); - - return proximities_entry; - } - - static int InsertMany( - std::vector proximities_entries - ) - { - std::vector insert_chunks; - - for (auto &proximities_entry: proximities_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(proximities_entry.minx)); - insert_values.push_back(std::to_string(proximities_entry.maxx)); - insert_values.push_back(std::to_string(proximities_entry.miny)); - insert_values.push_back(std::to_string(proximities_entry.maxy)); - insert_values.push_back(std::to_string(proximities_entry.minz)); - insert_values.push_back(std::to_string(proximities_entry.maxz)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Proximities entry{}; - - entry.zoneid = atoi(row[0]); - entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Proximities entry{}; - - entry.zoneid = atoi(row[0]); - entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index 48fea575c..b78db3fa3 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -23,302 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_quest_globals_repository.h" -class QuestGlobalsRepository { +class QuestGlobalsRepository: public BaseQuestGlobalsRepository { public: - struct QuestGlobals { - int charid; - int npcid; - int zoneid; - std::string name; - std::string value; - int expdate; - }; - static std::string PrimaryKey() - { - return std::string("name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * QuestGlobalsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * QuestGlobalsRepository::GetWhereNeverExpires() + * QuestGlobalsRepository::GetWhereXAndY() + * QuestGlobalsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "charid", - "npcid", - "zoneid", - "name", - "value", - "expdate", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("quest_globals"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static QuestGlobals NewEntity() - { - QuestGlobals entry{}; - - entry.charid = 0; - entry.npcid = 0; - entry.zoneid = 0; - entry.name = ""; - entry.value = "?"; - entry.expdate = 0; - - return entry; - } - - static QuestGlobals GetQuestGlobalsEntry( - const std::vector &quest_globalss, - int quest_globals_id - ) - { - for (auto &quest_globals : quest_globalss) { - if (quest_globals.name == quest_globals_id) { - return quest_globals; - } - } - - return NewEntity(); - } - - static QuestGlobals FindOne( - int quest_globals_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - quest_globals_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - QuestGlobals entry{}; - - entry.charid = atoi(row[0]); - entry.npcid = atoi(row[1]); - entry.zoneid = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.value = row[4] ? row[4] : ""; - entry.expdate = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int quest_globals_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - quest_globals_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - QuestGlobals quest_globals_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[4] + " = '" + EscapeString(quest_globals_entry.value) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(quest_globals_entry.expdate)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - quest_globals_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static QuestGlobals InsertOne( - QuestGlobals quest_globals_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); - insert_values.push_back(std::to_string(quest_globals_entry.expdate)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - quest_globals_entry.id = results.LastInsertedID(); - return quest_globals_entry; - } - - quest_globals_entry = QuestGlobalsRepository::NewEntity(); - - return quest_globals_entry; - } - - static int InsertMany( - std::vector quest_globals_entries - ) - { - std::vector insert_chunks; - - for (auto &quest_globals_entry: quest_globals_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); - insert_values.push_back(std::to_string(quest_globals_entry.expdate)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - QuestGlobals entry{}; - - entry.charid = atoi(row[0]); - entry.npcid = atoi(row[1]); - entry.zoneid = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.value = row[4] ? row[4] : ""; - entry.expdate = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - QuestGlobals entry{}; - - entry.charid = atoi(row[0]); - entry.npcid = atoi(row[1]); - entry.zoneid = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.value = row[4] ? row[4] : ""; - entry.expdate = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index 01981dd1e..1c1557017 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_raid_details_repository.h" -class RaidDetailsRepository { +class RaidDetailsRepository: public BaseRaidDetailsRepository { public: - struct RaidDetails { - int raidid; - int loottype; - int8 locked; - std::string motd; - }; - static std::string PrimaryKey() - { - return std::string("raidid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * RaidDetailsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * RaidDetailsRepository::GetWhereNeverExpires() + * RaidDetailsRepository::GetWhereXAndY() + * RaidDetailsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "raidid", - "loottype", - "locked", - "motd", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("raid_details"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static RaidDetails NewEntity() - { - RaidDetails entry{}; - - entry.raidid = 0; - entry.loottype = 0; - entry.locked = 0; - entry.motd = ""; - - return entry; - } - - static RaidDetails GetRaidDetailsEntry( - const std::vector &raid_detailss, - int raid_details_id - ) - { - for (auto &raid_details : raid_detailss) { - if (raid_details.raidid == raid_details_id) { - return raid_details; - } - } - - return NewEntity(); - } - - static RaidDetails FindOne( - int raid_details_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - raid_details_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - RaidDetails entry{}; - - entry.raidid = atoi(row[0]); - entry.loottype = atoi(row[1]); - entry.locked = atoi(row[2]); - entry.motd = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int raid_details_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - raid_details_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - RaidDetails raid_details_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(raid_details_entry.loottype)); - update_values.push_back(columns[2] + " = " + std::to_string(raid_details_entry.locked)); - update_values.push_back(columns[3] + " = '" + EscapeString(raid_details_entry.motd) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - raid_details_entry.raidid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static RaidDetails InsertOne( - RaidDetails raid_details_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(raid_details_entry.loottype)); - insert_values.push_back(std::to_string(raid_details_entry.locked)); - insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - raid_details_entry.id = results.LastInsertedID(); - return raid_details_entry; - } - - raid_details_entry = RaidDetailsRepository::NewEntity(); - - return raid_details_entry; - } - - static int InsertMany( - std::vector raid_details_entries - ) - { - std::vector insert_chunks; - - for (auto &raid_details_entry: raid_details_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(raid_details_entry.loottype)); - insert_values.push_back(std::to_string(raid_details_entry.locked)); - insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RaidDetails entry{}; - - entry.raidid = atoi(row[0]); - entry.loottype = atoi(row[1]); - entry.locked = atoi(row[2]); - entry.motd = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RaidDetails entry{}; - - entry.raidid = atoi(row[0]); - entry.loottype = atoi(row[1]); - entry.locked = atoi(row[2]); - entry.motd = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h index ccc200bb8..89c3784d5 100644 --- a/common/repositories/raid_members_repository.h +++ b/common/repositories/raid_members_repository.h @@ -23,338 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_raid_members_repository.h" -class RaidMembersRepository { +class RaidMembersRepository: public BaseRaidMembersRepository { public: - struct RaidMembers { - int raidid; - int charid; - int groupid; - int8 _class; - int8 level; - std::string name; - int8 isgroupleader; - int8 israidleader; - int8 islooter; - }; - static std::string PrimaryKey() - { - return std::string("charid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * RaidMembersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * RaidMembersRepository::GetWhereNeverExpires() + * RaidMembersRepository::GetWhereXAndY() + * RaidMembersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "raidid", - "charid", - "groupid", - "_class", - "level", - "name", - "isgroupleader", - "israidleader", - "islooter", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("raid_members"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static RaidMembers NewEntity() - { - RaidMembers entry{}; - - entry.raidid = 0; - entry.charid = 0; - entry.groupid = 0; - entry._class = 0; - entry.level = 0; - entry.name = ""; - entry.isgroupleader = 0; - entry.israidleader = 0; - entry.islooter = 0; - - return entry; - } - - static RaidMembers GetRaidMembersEntry( - const std::vector &raid_memberss, - int raid_members_id - ) - { - for (auto &raid_members : raid_memberss) { - if (raid_members.charid == raid_members_id) { - return raid_members; - } - } - - return NewEntity(); - } - - static RaidMembers FindOne( - int raid_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - raid_members_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - RaidMembers entry{}; - - entry.raidid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.groupid = atoi(row[2]); - entry._class = atoi(row[3]); - entry.level = atoi(row[4]); - entry.name = row[5] ? row[5] : ""; - entry.isgroupleader = atoi(row[6]); - entry.israidleader = atoi(row[7]); - entry.islooter = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int raid_members_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - raid_members_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - RaidMembers raid_members_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(raid_members_entry.raidid)); - update_values.push_back(columns[2] + " = " + std::to_string(raid_members_entry.groupid)); - update_values.push_back(columns[3] + " = " + std::to_string(raid_members_entry._class)); - update_values.push_back(columns[4] + " = " + std::to_string(raid_members_entry.level)); - update_values.push_back(columns[5] + " = '" + EscapeString(raid_members_entry.name) + "'"); - update_values.push_back(columns[6] + " = " + std::to_string(raid_members_entry.isgroupleader)); - update_values.push_back(columns[7] + " = " + std::to_string(raid_members_entry.israidleader)); - update_values.push_back(columns[8] + " = " + std::to_string(raid_members_entry.islooter)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - raid_members_entry.charid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static RaidMembers InsertOne( - RaidMembers raid_members_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(raid_members_entry.raidid)); - insert_values.push_back(std::to_string(raid_members_entry.groupid)); - insert_values.push_back(std::to_string(raid_members_entry._class)); - insert_values.push_back(std::to_string(raid_members_entry.level)); - insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); - insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); - insert_values.push_back(std::to_string(raid_members_entry.israidleader)); - insert_values.push_back(std::to_string(raid_members_entry.islooter)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - raid_members_entry.id = results.LastInsertedID(); - return raid_members_entry; - } - - raid_members_entry = RaidMembersRepository::NewEntity(); - - return raid_members_entry; - } - - static int InsertMany( - std::vector raid_members_entries - ) - { - std::vector insert_chunks; - - for (auto &raid_members_entry: raid_members_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(raid_members_entry.raidid)); - insert_values.push_back(std::to_string(raid_members_entry.groupid)); - insert_values.push_back(std::to_string(raid_members_entry._class)); - insert_values.push_back(std::to_string(raid_members_entry.level)); - insert_values.push_back("'" + EscapeString(raid_members_entry.name) + "'"); - insert_values.push_back(std::to_string(raid_members_entry.isgroupleader)); - insert_values.push_back(std::to_string(raid_members_entry.israidleader)); - insert_values.push_back(std::to_string(raid_members_entry.islooter)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RaidMembers entry{}; - - entry.raidid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.groupid = atoi(row[2]); - entry._class = atoi(row[3]); - entry.level = atoi(row[4]); - entry.name = row[5] ? row[5] : ""; - entry.isgroupleader = atoi(row[6]); - entry.israidleader = atoi(row[7]); - entry.islooter = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RaidMembers entry{}; - - entry.raidid = atoi(row[0]); - entry.charid = atoi(row[1]); - entry.groupid = atoi(row[2]); - entry._class = atoi(row[3]); - entry.level = atoi(row[4]); - entry.name = row[5] ? row[5] : ""; - entry.isgroupleader = atoi(row[6]); - entry.israidleader = atoi(row[7]); - entry.islooter = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index 8a8419ad9..4bc84a176 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_reports_repository.h" -class ReportsRepository { +class ReportsRepository: public BaseReportsRepository { public: - struct Reports { - int id; - std::string name; - std::string reported; - std::string reported_text; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ReportsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ReportsRepository::GetWhereNeverExpires() + * ReportsRepository::GetWhereXAndY() + * ReportsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "reported", - "reported_text", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("reports"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Reports NewEntity() - { - Reports entry{}; - - entry.id = 0; - entry.name = ""; - entry.reported = ""; - entry.reported_text = ""; - - return entry; - } - - static Reports GetReportsEntry( - const std::vector &reportss, - int reports_id - ) - { - for (auto &reports : reportss) { - if (reports.id == reports_id) { - return reports; - } - } - - return NewEntity(); - } - - static Reports FindOne( - int reports_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - reports_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Reports entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.reported = row[2] ? row[2] : ""; - entry.reported_text = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int reports_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - reports_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Reports reports_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(reports_entry.name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(reports_entry.reported) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(reports_entry.reported_text) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - reports_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Reports InsertOne( - Reports reports_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); - insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - reports_entry.id = results.LastInsertedID(); - return reports_entry; - } - - reports_entry = ReportsRepository::NewEntity(); - - return reports_entry; - } - - static int InsertMany( - std::vector reports_entries - ) - { - std::vector insert_chunks; - - for (auto &reports_entry: reports_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(reports_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(reports_entry.reported) + "'"); - insert_values.push_back("'" + EscapeString(reports_entry.reported_text) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Reports entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.reported = row[2] ? row[2] : ""; - entry.reported_text = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Reports entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.reported = row[2] ? row[2] : ""; - entry.reported_text = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/respawn_times_repository.h b/common/repositories/respawn_times_repository.h index 4cf47bbd3..1706772d2 100644 --- a/common/repositories/respawn_times_repository.h +++ b/common/repositories/respawn_times_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_respawn_times_repository.h" -class RespawnTimesRepository { +class RespawnTimesRepository: public BaseRespawnTimesRepository { public: - struct RespawnTimes { - int id; - int start; - int duration; - int16 instance_id; - }; - static std::string PrimaryKey() - { - return std::string("instance_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * RespawnTimesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * RespawnTimesRepository::GetWhereNeverExpires() + * RespawnTimesRepository::GetWhereXAndY() + * RespawnTimesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "start", - "duration", - "instance_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("respawn_times"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static RespawnTimes NewEntity() - { - RespawnTimes entry{}; - - entry.id = 0; - entry.start = 0; - entry.duration = 0; - entry.instance_id = 0; - - return entry; - } - - static RespawnTimes GetRespawnTimesEntry( - const std::vector &respawn_timess, - int respawn_times_id - ) - { - for (auto &respawn_times : respawn_timess) { - if (respawn_times.instance_id == respawn_times_id) { - return respawn_times; - } - } - - return NewEntity(); - } - - static RespawnTimes FindOne( - int respawn_times_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - respawn_times_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - RespawnTimes entry{}; - - entry.id = atoi(row[0]); - entry.start = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.instance_id = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int respawn_times_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - respawn_times_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - RespawnTimes respawn_times_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(respawn_times_entry.start)); - update_values.push_back(columns[2] + " = " + std::to_string(respawn_times_entry.duration)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - respawn_times_entry.instance_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static RespawnTimes InsertOne( - RespawnTimes respawn_times_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(respawn_times_entry.start)); - insert_values.push_back(std::to_string(respawn_times_entry.duration)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - respawn_times_entry.id = results.LastInsertedID(); - return respawn_times_entry; - } - - respawn_times_entry = RespawnTimesRepository::NewEntity(); - - return respawn_times_entry; - } - - static int InsertMany( - std::vector respawn_times_entries - ) - { - std::vector insert_chunks; - - for (auto &respawn_times_entry: respawn_times_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(respawn_times_entry.start)); - insert_values.push_back(std::to_string(respawn_times_entry.duration)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RespawnTimes entry{}; - - entry.id = atoi(row[0]); - entry.start = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.instance_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RespawnTimes entry{}; - - entry.id = atoi(row[0]); - entry.start = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.instance_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h index 2d2dc1a80..3c86f2b81 100644 --- a/common/repositories/rule_sets_repository.h +++ b/common/repositories/rule_sets_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_rule_sets_repository.h" -class RuleSetsRepository { +class RuleSetsRepository: public BaseRuleSetsRepository { public: - struct RuleSets { - int8 ruleset_id; - std::string name; - }; - static std::string PrimaryKey() - { - return std::string("ruleset_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * RuleSetsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * RuleSetsRepository::GetWhereNeverExpires() + * RuleSetsRepository::GetWhereXAndY() + * RuleSetsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "ruleset_id", - "name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("rule_sets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static RuleSets NewEntity() - { - RuleSets entry{}; - - entry.ruleset_id = 0; - entry.name = ""; - - return entry; - } - - static RuleSets GetRuleSetsEntry( - const std::vector &rule_setss, - int rule_sets_id - ) - { - for (auto &rule_sets : rule_setss) { - if (rule_sets.ruleset_id == rule_sets_id) { - return rule_sets; - } - } - - return NewEntity(); - } - - static RuleSets FindOne( - int rule_sets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - rule_sets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - RuleSets entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int rule_sets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - rule_sets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - RuleSets rule_sets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(rule_sets_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - rule_sets_entry.ruleset_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static RuleSets InsertOne( - RuleSets rule_sets_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - rule_sets_entry.id = results.LastInsertedID(); - return rule_sets_entry; - } - - rule_sets_entry = RuleSetsRepository::NewEntity(); - - return rule_sets_entry; - } - - static int InsertMany( - std::vector rule_sets_entries - ) - { - std::vector insert_chunks; - - for (auto &rule_sets_entry: rule_sets_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(rule_sets_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RuleSets entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RuleSets entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index cc18b324c..532dafd44 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_rule_values_repository.h" -class RuleValuesRepository { +class RuleValuesRepository: public BaseRuleValuesRepository { public: - struct RuleValues { - int8 ruleset_id; - std::string rule_name; - std::string rule_value; - std::string notes; - }; - static std::string PrimaryKey() - { - return std::string("rule_name"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * RuleValuesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * RuleValuesRepository::GetWhereNeverExpires() + * RuleValuesRepository::GetWhereXAndY() + * RuleValuesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "ruleset_id", - "rule_name", - "rule_value", - "notes", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("rule_values"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static RuleValues NewEntity() - { - RuleValues entry{}; - - entry.ruleset_id = 0; - entry.rule_name = ""; - entry.rule_value = ""; - entry.notes = ""; - - return entry; - } - - static RuleValues GetRuleValuesEntry( - const std::vector &rule_valuess, - int rule_values_id - ) - { - for (auto &rule_values : rule_valuess) { - if (rule_values.rule_name == rule_values_id) { - return rule_values; - } - } - - return NewEntity(); - } - - static RuleValues FindOne( - int rule_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - rule_values_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - RuleValues entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1] ? row[1] : ""; - entry.rule_value = row[2] ? row[2] : ""; - entry.notes = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int rule_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - rule_values_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - RuleValues rule_values_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = '" + EscapeString(rule_values_entry.rule_value) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(rule_values_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - rule_values_entry.rule_name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static RuleValues InsertOne( - RuleValues rule_values_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); - insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - rule_values_entry.id = results.LastInsertedID(); - return rule_values_entry; - } - - rule_values_entry = RuleValuesRepository::NewEntity(); - - return rule_values_entry; - } - - static int InsertMany( - std::vector rule_values_entries - ) - { - std::vector insert_chunks; - - for (auto &rule_values_entry: rule_values_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); - insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RuleValues entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1] ? row[1] : ""; - entry.rule_value = row[2] ? row[2] : ""; - entry.notes = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - RuleValues entry{}; - - entry.ruleset_id = atoi(row[0]); - entry.rule_name = row[1] ? row[1] : ""; - entry.rule_value = row[2] ? row[2] : ""; - entry.notes = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h index c0b004396..27b0993f1 100644 --- a/common/repositories/saylink_repository.h +++ b/common/repositories/saylink_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_saylink_repository.h" -class SaylinkRepository { +class SaylinkRepository: public BaseSaylinkRepository { public: - struct Saylink { - int id; - std::string phrase; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SaylinkRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SaylinkRepository::GetWhereNeverExpires() + * SaylinkRepository::GetWhereXAndY() + * SaylinkRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "phrase", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("saylink"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Saylink NewEntity() - { - Saylink entry{}; - - entry.id = 0; - entry.phrase = ""; - - return entry; - } - - static Saylink GetSaylinkEntry( - const std::vector &saylinks, - int saylink_id - ) - { - for (auto &saylink : saylinks) { - if (saylink.id == saylink_id) { - return saylink; - } - } - - return NewEntity(); - } - - static Saylink FindOne( - int saylink_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - saylink_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Saylink entry{}; - - entry.id = atoi(row[0]); - entry.phrase = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int saylink_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - saylink_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Saylink saylink_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(saylink_entry.phrase) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - saylink_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Saylink InsertOne( - Saylink saylink_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - saylink_entry.id = results.LastInsertedID(); - return saylink_entry; - } - - saylink_entry = SaylinkRepository::NewEntity(); - - return saylink_entry; - } - - static int InsertMany( - std::vector saylink_entries - ) - { - std::vector insert_chunks; - - for (auto &saylink_entry: saylink_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(saylink_entry.phrase) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Saylink entry{}; - - entry.id = atoi(row[0]); - entry.phrase = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Saylink entry{}; - - entry.id = atoi(row[0]); - entry.phrase = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/skill_caps_repository.h b/common/repositories/skill_caps_repository.h index d059bc40b..da2387e9c 100644 --- a/common/repositories/skill_caps_repository.h +++ b/common/repositories/skill_caps_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_skill_caps_repository.h" -class SkillCapsRepository { +class SkillCapsRepository: public BaseSkillCapsRepository { public: - struct SkillCaps { - int8 skillID; - int8 class; - int8 level; - int cap; - int8 class_; - }; - static std::string PrimaryKey() - { - return std::string("class_"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SkillCapsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SkillCapsRepository::GetWhereNeverExpires() + * SkillCapsRepository::GetWhereXAndY() + * SkillCapsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "skillID", - "class", - "level", - "cap", - "class_", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("skill_caps"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SkillCaps NewEntity() - { - SkillCaps entry{}; - - entry.skillID = 0; - entry.class = 0; - entry.level = 0; - entry.cap = 0; - entry.class_ = 0; - - return entry; - } - - static SkillCaps GetSkillCapsEntry( - const std::vector &skill_capss, - int skill_caps_id - ) - { - for (auto &skill_caps : skill_capss) { - if (skill_caps.class_ == skill_caps_id) { - return skill_caps; - } - } - - return NewEntity(); - } - - static SkillCaps FindOne( - int skill_caps_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - skill_caps_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SkillCaps entry{}; - - entry.skillID = atoi(row[0]); - entry.class = atoi(row[1]); - entry.level = atoi(row[2]); - entry.cap = atoi(row[3]); - entry.class_ = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int skill_caps_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - skill_caps_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SkillCaps skill_caps_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[3] + " = " + std::to_string(skill_caps_entry.cap)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - skill_caps_entry.class_ - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SkillCaps InsertOne( - SkillCaps skill_caps_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(skill_caps_entry.cap)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - skill_caps_entry.id = results.LastInsertedID(); - return skill_caps_entry; - } - - skill_caps_entry = SkillCapsRepository::NewEntity(); - - return skill_caps_entry; - } - - static int InsertMany( - std::vector skill_caps_entries - ) - { - std::vector insert_chunks; - - for (auto &skill_caps_entry: skill_caps_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(skill_caps_entry.cap)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SkillCaps entry{}; - - entry.skillID = atoi(row[0]); - entry.class = atoi(row[1]); - entry.level = atoi(row[2]); - entry.cap = atoi(row[3]); - entry.class_ = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SkillCaps entry{}; - - entry.skillID = atoi(row[0]); - entry.class = atoi(row[1]); - entry.level = atoi(row[2]); - entry.cap = atoi(row[3]); - entry.class_ = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index bea1dc559..5771e80d5 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -23,392 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawn2_repository.h" -class Spawn2Repository { +class Spawn2Repository: public BaseSpawn2Repository { public: - struct Spawn2 { - int id; - int spawngroupID; - std::string zone; - int16 version; - float x; - float y; - float z; - float heading; - int respawntime; - int variance; - int pathgrid; - int _condition; - int cond_value; - int8 enabled; - int8 animation; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * Spawn2Repository::GetByZoneAndVersion(int zone_id, int zone_version) + * Spawn2Repository::GetWhereNeverExpires() + * Spawn2Repository::GetWhereXAndY() + * Spawn2Repository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "spawngroupID", - "zone", - "version", - "x", - "y", - "z", - "heading", - "respawntime", - "variance", - "pathgrid", - "_condition", - "cond_value", - "enabled", - "animation", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawn2"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Spawn2 NewEntity() - { - Spawn2 entry{}; - - entry.id = 0; - entry.spawngroupID = 0; - entry.zone = ""; - entry.version = 0; - entry.x = 0.000000; - entry.y = 0.000000; - entry.z = 0.000000; - entry.heading = 0.000000; - entry.respawntime = 0; - entry.variance = 0; - entry.pathgrid = 0; - entry._condition = 0; - entry.cond_value = 1; - entry.enabled = 1; - entry.animation = 0; - - return entry; - } - - static Spawn2 GetSpawn2Entry( - const std::vector &spawn2s, - int spawn2_id - ) - { - for (auto &spawn2 : spawn2s) { - if (spawn2.id == spawn2_id) { - return spawn2; - } - } - - return NewEntity(); - } - - static Spawn2 FindOne( - int spawn2_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawn2_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Spawn2 entry{}; - - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawn2_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawn2_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Spawn2 spawn2_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(spawn2_entry.spawngroupID)); - update_values.push_back(columns[2] + " = '" + EscapeString(spawn2_entry.zone) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(spawn2_entry.version)); - update_values.push_back(columns[4] + " = " + std::to_string(spawn2_entry.x)); - update_values.push_back(columns[5] + " = " + std::to_string(spawn2_entry.y)); - update_values.push_back(columns[6] + " = " + std::to_string(spawn2_entry.z)); - update_values.push_back(columns[7] + " = " + std::to_string(spawn2_entry.heading)); - update_values.push_back(columns[8] + " = " + std::to_string(spawn2_entry.respawntime)); - update_values.push_back(columns[9] + " = " + std::to_string(spawn2_entry.variance)); - update_values.push_back(columns[10] + " = " + std::to_string(spawn2_entry.pathgrid)); - update_values.push_back(columns[11] + " = " + std::to_string(spawn2_entry._condition)); - update_values.push_back(columns[12] + " = " + std::to_string(spawn2_entry.cond_value)); - update_values.push_back(columns[13] + " = " + std::to_string(spawn2_entry.enabled)); - update_values.push_back(columns[14] + " = " + std::to_string(spawn2_entry.animation)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawn2_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Spawn2 InsertOne( - Spawn2 spawn2_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); - insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); - insert_values.push_back(std::to_string(spawn2_entry.version)); - insert_values.push_back(std::to_string(spawn2_entry.x)); - insert_values.push_back(std::to_string(spawn2_entry.y)); - insert_values.push_back(std::to_string(spawn2_entry.z)); - insert_values.push_back(std::to_string(spawn2_entry.heading)); - insert_values.push_back(std::to_string(spawn2_entry.respawntime)); - insert_values.push_back(std::to_string(spawn2_entry.variance)); - insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); - insert_values.push_back(std::to_string(spawn2_entry._condition)); - insert_values.push_back(std::to_string(spawn2_entry.cond_value)); - insert_values.push_back(std::to_string(spawn2_entry.enabled)); - insert_values.push_back(std::to_string(spawn2_entry.animation)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawn2_entry.id = results.LastInsertedID(); - return spawn2_entry; - } - - spawn2_entry = Spawn2Repository::NewEntity(); - - return spawn2_entry; - } - - static int InsertMany( - std::vector spawn2_entries - ) - { - std::vector insert_chunks; - - for (auto &spawn2_entry: spawn2_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn2_entry.spawngroupID)); - insert_values.push_back("'" + EscapeString(spawn2_entry.zone) + "'"); - insert_values.push_back(std::to_string(spawn2_entry.version)); - insert_values.push_back(std::to_string(spawn2_entry.x)); - insert_values.push_back(std::to_string(spawn2_entry.y)); - insert_values.push_back(std::to_string(spawn2_entry.z)); - insert_values.push_back(std::to_string(spawn2_entry.heading)); - insert_values.push_back(std::to_string(spawn2_entry.respawntime)); - insert_values.push_back(std::to_string(spawn2_entry.variance)); - insert_values.push_back(std::to_string(spawn2_entry.pathgrid)); - insert_values.push_back(std::to_string(spawn2_entry._condition)); - insert_values.push_back(std::to_string(spawn2_entry.cond_value)); - insert_values.push_back(std::to_string(spawn2_entry.enabled)); - insert_values.push_back(std::to_string(spawn2_entry.animation)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawn2 entry{}; - - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawn2 entry{}; - - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index ca5cf3ba5..1ed0428a4 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -23,287 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawn_condition_values_repository.h" -class SpawnConditionValuesRepository { +class SpawnConditionValuesRepository: public BaseSpawnConditionValuesRepository { public: - struct SpawnConditionValues { - int id; - int8 value; - std::string zone; - int instance_id; - }; - static std::string PrimaryKey() - { - return std::string("instance_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpawnConditionValuesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpawnConditionValuesRepository::GetWhereNeverExpires() + * SpawnConditionValuesRepository::GetWhereXAndY() + * SpawnConditionValuesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "value", - "zone", - "instance_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawn_condition_values"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpawnConditionValues NewEntity() - { - SpawnConditionValues entry{}; - - entry.id = 0; - entry.value = 0; - entry.zone = ""; - entry.instance_id = 0; - - return entry; - } - - static SpawnConditionValues GetSpawnConditionValuesEntry( - const std::vector &spawn_condition_valuess, - int spawn_condition_values_id - ) - { - for (auto &spawn_condition_values : spawn_condition_valuess) { - if (spawn_condition_values.instance_id == spawn_condition_values_id) { - return spawn_condition_values; - } - } - - return NewEntity(); - } - - static SpawnConditionValues FindOne( - int spawn_condition_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawn_condition_values_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpawnConditionValues entry{}; - - entry.id = atoi(row[0]); - entry.value = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.instance_id = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawn_condition_values_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawn_condition_values_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpawnConditionValues spawn_condition_values_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(spawn_condition_values_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawn_condition_values_entry.instance_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpawnConditionValues InsertOne( - SpawnConditionValues spawn_condition_values_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawn_condition_values_entry.id = results.LastInsertedID(); - return spawn_condition_values_entry; - } - - spawn_condition_values_entry = SpawnConditionValuesRepository::NewEntity(); - - return spawn_condition_values_entry; - } - - static int InsertMany( - std::vector spawn_condition_values_entries - ) - { - std::vector insert_chunks; - - for (auto &spawn_condition_values_entry: spawn_condition_values_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnConditionValues entry{}; - - entry.id = atoi(row[0]); - entry.value = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.instance_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnConditionValues entry{}; - - entry.id = atoi(row[0]); - entry.value = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.instance_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h index 22b68a6d2..cc703099f 100644 --- a/common/repositories/spawn_conditions_repository.h +++ b/common/repositories/spawn_conditions_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawn_conditions_repository.h" -class SpawnConditionsRepository { +class SpawnConditionsRepository: public BaseSpawnConditionsRepository { public: - struct SpawnConditions { - std::string zone; - int id; - int value; - int8 onchange; - std::string name; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpawnConditionsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpawnConditionsRepository::GetWhereNeverExpires() + * SpawnConditionsRepository::GetWhereXAndY() + * SpawnConditionsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "zone", - "id", - "value", - "onchange", - "name", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawn_conditions"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpawnConditions NewEntity() - { - SpawnConditions entry{}; - - entry.zone = ""; - entry.id = 1; - entry.value = 0; - entry.onchange = 0; - entry.name = ""; - - return entry; - } - - static SpawnConditions GetSpawnConditionsEntry( - const std::vector &spawn_conditionss, - int spawn_conditions_id - ) - { - for (auto &spawn_conditions : spawn_conditionss) { - if (spawn_conditions.id == spawn_conditions_id) { - return spawn_conditions; - } - } - - return NewEntity(); - } - - static SpawnConditions FindOne( - int spawn_conditions_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawn_conditions_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpawnConditions entry{}; - - entry.zone = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.onchange = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawn_conditions_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawn_conditions_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpawnConditions spawn_conditions_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(spawn_conditions_entry.value)); - update_values.push_back(columns[3] + " = " + std::to_string(spawn_conditions_entry.onchange)); - update_values.push_back(columns[4] + " = '" + EscapeString(spawn_conditions_entry.name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawn_conditions_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpawnConditions InsertOne( - SpawnConditions spawn_conditions_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn_conditions_entry.value)); - insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); - insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawn_conditions_entry.id = results.LastInsertedID(); - return spawn_conditions_entry; - } - - spawn_conditions_entry = SpawnConditionsRepository::NewEntity(); - - return spawn_conditions_entry; - } - - static int InsertMany( - std::vector spawn_conditions_entries - ) - { - std::vector insert_chunks; - - for (auto &spawn_conditions_entry: spawn_conditions_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawn_conditions_entry.value)); - insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); - insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnConditions entry{}; - - entry.zone = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.onchange = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnConditions entry{}; - - entry.zone = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.value = atoi(row[2]); - entry.onchange = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index c9fa5d03e..85758b102 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -23,383 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawn_events_repository.h" -class SpawnEventsRepository { +class SpawnEventsRepository: public BaseSpawnEventsRepository { public: - struct SpawnEvents { - int id; - std::string zone; - int cond_id; - std::string name; - int period; - int8 next_minute; - int8 next_hour; - int8 next_day; - int8 next_month; - int next_year; - int8 enabled; - int8 action; - int argument; - int8 strict; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpawnEventsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpawnEventsRepository::GetWhereNeverExpires() + * SpawnEventsRepository::GetWhereXAndY() + * SpawnEventsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "cond_id", - "name", - "period", - "next_minute", - "next_hour", - "next_day", - "next_month", - "next_year", - "enabled", - "action", - "argument", - "strict", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawn_events"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpawnEvents NewEntity() - { - SpawnEvents entry{}; - - entry.id = 0; - entry.zone = ""; - entry.cond_id = 0; - entry.name = ""; - entry.period = 0; - entry.next_minute = 0; - entry.next_hour = 0; - entry.next_day = 0; - entry.next_month = 0; - entry.next_year = 0; - entry.enabled = 1; - entry.action = 0; - entry.argument = 0; - entry.strict = 0; - - return entry; - } - - static SpawnEvents GetSpawnEventsEntry( - const std::vector &spawn_eventss, - int spawn_events_id - ) - { - for (auto &spawn_events : spawn_eventss) { - if (spawn_events.id == spawn_events_id) { - return spawn_events; - } - } - - return NewEntity(); - } - - static SpawnEvents FindOne( - int spawn_events_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawn_events_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpawnEvents entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.cond_id = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.period = atoi(row[4]); - entry.next_minute = atoi(row[5]); - entry.next_hour = atoi(row[6]); - entry.next_day = atoi(row[7]); - entry.next_month = atoi(row[8]); - entry.next_year = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.action = atoi(row[11]); - entry.argument = atoi(row[12]); - entry.strict = atoi(row[13]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawn_events_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawn_events_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpawnEvents spawn_events_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(spawn_events_entry.zone) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(spawn_events_entry.cond_id)); - update_values.push_back(columns[3] + " = '" + EscapeString(spawn_events_entry.name) + "'"); - update_values.push_back(columns[4] + " = " + std::to_string(spawn_events_entry.period)); - update_values.push_back(columns[5] + " = " + std::to_string(spawn_events_entry.next_minute)); - update_values.push_back(columns[6] + " = " + std::to_string(spawn_events_entry.next_hour)); - update_values.push_back(columns[7] + " = " + std::to_string(spawn_events_entry.next_day)); - update_values.push_back(columns[8] + " = " + std::to_string(spawn_events_entry.next_month)); - update_values.push_back(columns[9] + " = " + std::to_string(spawn_events_entry.next_year)); - update_values.push_back(columns[10] + " = " + std::to_string(spawn_events_entry.enabled)); - update_values.push_back(columns[11] + " = " + std::to_string(spawn_events_entry.action)); - update_values.push_back(columns[12] + " = " + std::to_string(spawn_events_entry.argument)); - update_values.push_back(columns[13] + " = " + std::to_string(spawn_events_entry.strict)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawn_events_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpawnEvents InsertOne( - SpawnEvents spawn_events_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); - insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); - insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); - insert_values.push_back(std::to_string(spawn_events_entry.period)); - insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); - insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); - insert_values.push_back(std::to_string(spawn_events_entry.next_day)); - insert_values.push_back(std::to_string(spawn_events_entry.next_month)); - insert_values.push_back(std::to_string(spawn_events_entry.next_year)); - insert_values.push_back(std::to_string(spawn_events_entry.enabled)); - insert_values.push_back(std::to_string(spawn_events_entry.action)); - insert_values.push_back(std::to_string(spawn_events_entry.argument)); - insert_values.push_back(std::to_string(spawn_events_entry.strict)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawn_events_entry.id = results.LastInsertedID(); - return spawn_events_entry; - } - - spawn_events_entry = SpawnEventsRepository::NewEntity(); - - return spawn_events_entry; - } - - static int InsertMany( - std::vector spawn_events_entries - ) - { - std::vector insert_chunks; - - for (auto &spawn_events_entry: spawn_events_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spawn_events_entry.zone) + "'"); - insert_values.push_back(std::to_string(spawn_events_entry.cond_id)); - insert_values.push_back("'" + EscapeString(spawn_events_entry.name) + "'"); - insert_values.push_back(std::to_string(spawn_events_entry.period)); - insert_values.push_back(std::to_string(spawn_events_entry.next_minute)); - insert_values.push_back(std::to_string(spawn_events_entry.next_hour)); - insert_values.push_back(std::to_string(spawn_events_entry.next_day)); - insert_values.push_back(std::to_string(spawn_events_entry.next_month)); - insert_values.push_back(std::to_string(spawn_events_entry.next_year)); - insert_values.push_back(std::to_string(spawn_events_entry.enabled)); - insert_values.push_back(std::to_string(spawn_events_entry.action)); - insert_values.push_back(std::to_string(spawn_events_entry.argument)); - insert_values.push_back(std::to_string(spawn_events_entry.strict)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnEvents entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.cond_id = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.period = atoi(row[4]); - entry.next_minute = atoi(row[5]); - entry.next_hour = atoi(row[6]); - entry.next_day = atoi(row[7]); - entry.next_month = atoi(row[8]); - entry.next_year = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.action = atoi(row[11]); - entry.argument = atoi(row[12]); - entry.strict = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpawnEvents entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.cond_id = atoi(row[2]); - entry.name = row[3] ? row[3] : ""; - entry.period = atoi(row[4]); - entry.next_minute = atoi(row[5]); - entry.next_hour = atoi(row[6]); - entry.next_day = atoi(row[7]); - entry.next_month = atoi(row[8]); - entry.next_year = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.action = atoi(row[11]); - entry.argument = atoi(row[12]); - entry.strict = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawnentry_repository.h b/common/repositories/spawnentry_repository.h index fe3ca4b35..dc4d6cec4 100644 --- a/common/repositories/spawnentry_repository.h +++ b/common/repositories/spawnentry_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawnentry_repository.h" -class SpawnentryRepository { +class SpawnentryRepository: public BaseSpawnentryRepository { public: - struct Spawnentry { - int spawngroupID; - int npcID; - int16 chance; - int condition_value_filter; - }; - static std::string PrimaryKey() - { - return std::string("npcID"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpawnentryRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpawnentryRepository::GetWhereNeverExpires() + * SpawnentryRepository::GetWhereXAndY() + * SpawnentryRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "spawngroupID", - "npcID", - "chance", - "condition_value_filter", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawnentry"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Spawnentry NewEntity() - { - Spawnentry entry{}; - - entry.spawngroupID = 0; - entry.npcID = 0; - entry.chance = 0; - entry.condition_value_filter = 1; - - return entry; - } - - static Spawnentry GetSpawnentryEntry( - const std::vector &spawnentrys, - int spawnentry_id - ) - { - for (auto &spawnentry : spawnentrys) { - if (spawnentry.npcID == spawnentry_id) { - return spawnentry; - } - } - - return NewEntity(); - } - - static Spawnentry FindOne( - int spawnentry_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawnentry_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Spawnentry entry{}; - - entry.spawngroupID = atoi(row[0]); - entry.npcID = atoi(row[1]); - entry.chance = atoi(row[2]); - entry.condition_value_filter = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawnentry_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawnentry_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Spawnentry spawnentry_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(spawnentry_entry.chance)); - update_values.push_back(columns[3] + " = " + std::to_string(spawnentry_entry.condition_value_filter)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawnentry_entry.npcID - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Spawnentry InsertOne( - Spawnentry spawnentry_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawnentry_entry.chance)); - insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawnentry_entry.id = results.LastInsertedID(); - return spawnentry_entry; - } - - spawnentry_entry = SpawnentryRepository::NewEntity(); - - return spawnentry_entry; - } - - static int InsertMany( - std::vector spawnentry_entries - ) - { - std::vector insert_chunks; - - for (auto &spawnentry_entry: spawnentry_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(spawnentry_entry.chance)); - insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawnentry entry{}; - - entry.spawngroupID = atoi(row[0]); - entry.npcID = atoi(row[1]); - entry.chance = atoi(row[2]); - entry.condition_value_filter = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawnentry entry{}; - - entry.spawngroupID = atoi(row[0]); - entry.npcID = atoi(row[1]); - entry.chance = atoi(row[2]); - entry.condition_value_filter = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index 6ebf6122d..a205e8fe1 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -23,374 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spawngroup_repository.h" -class SpawngroupRepository { +class SpawngroupRepository: public BaseSpawngroupRepository { public: - struct Spawngroup { - int id; - std::string name; - int8 spawn_limit; - float dist; - float max_x; - float min_x; - float max_y; - float min_y; - int delay; - int mindelay; - int8 despawn; - int despawn_timer; - int8 wp_spawns; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpawngroupRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpawngroupRepository::GetWhereNeverExpires() + * SpawngroupRepository::GetWhereXAndY() + * SpawngroupRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "spawn_limit", - "dist", - "max_x", - "min_x", - "max_y", - "min_y", - "delay", - "mindelay", - "despawn", - "despawn_timer", - "wp_spawns", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spawngroup"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Spawngroup NewEntity() - { - Spawngroup entry{}; - - entry.id = 0; - entry.name = ""; - entry.spawn_limit = 0; - entry.dist = 0; - entry.max_x = 0; - entry.min_x = 0; - entry.max_y = 0; - entry.min_y = 0; - entry.delay = 45000; - entry.mindelay = 15000; - entry.despawn = 0; - entry.despawn_timer = 100; - entry.wp_spawns = 0; - - return entry; - } - - static Spawngroup GetSpawngroupEntry( - const std::vector &spawngroups, - int spawngroup_id - ) - { - for (auto &spawngroup : spawngroups) { - if (spawngroup.id == spawngroup_id) { - return spawngroup; - } - } - - return NewEntity(); - } - - static Spawngroup FindOne( - int spawngroup_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spawngroup_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Spawngroup entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); - entry.delay = atoi(row[8]); - entry.mindelay = atoi(row[9]); - entry.despawn = atoi(row[10]); - entry.despawn_timer = atoi(row[11]); - entry.wp_spawns = atoi(row[12]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spawngroup_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spawngroup_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Spawngroup spawngroup_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(spawngroup_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(spawngroup_entry.spawn_limit)); - update_values.push_back(columns[3] + " = " + std::to_string(spawngroup_entry.dist)); - update_values.push_back(columns[4] + " = " + std::to_string(spawngroup_entry.max_x)); - update_values.push_back(columns[5] + " = " + std::to_string(spawngroup_entry.min_x)); - update_values.push_back(columns[6] + " = " + std::to_string(spawngroup_entry.max_y)); - update_values.push_back(columns[7] + " = " + std::to_string(spawngroup_entry.min_y)); - update_values.push_back(columns[8] + " = " + std::to_string(spawngroup_entry.delay)); - update_values.push_back(columns[9] + " = " + std::to_string(spawngroup_entry.mindelay)); - update_values.push_back(columns[10] + " = " + std::to_string(spawngroup_entry.despawn)); - update_values.push_back(columns[11] + " = " + std::to_string(spawngroup_entry.despawn_timer)); - update_values.push_back(columns[12] + " = " + std::to_string(spawngroup_entry.wp_spawns)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spawngroup_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Spawngroup InsertOne( - Spawngroup spawngroup_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); - insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); - insert_values.push_back(std::to_string(spawngroup_entry.dist)); - insert_values.push_back(std::to_string(spawngroup_entry.max_x)); - insert_values.push_back(std::to_string(spawngroup_entry.min_x)); - insert_values.push_back(std::to_string(spawngroup_entry.max_y)); - insert_values.push_back(std::to_string(spawngroup_entry.min_y)); - insert_values.push_back(std::to_string(spawngroup_entry.delay)); - insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); - insert_values.push_back(std::to_string(spawngroup_entry.despawn)); - insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); - insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spawngroup_entry.id = results.LastInsertedID(); - return spawngroup_entry; - } - - spawngroup_entry = SpawngroupRepository::NewEntity(); - - return spawngroup_entry; - } - - static int InsertMany( - std::vector spawngroup_entries - ) - { - std::vector insert_chunks; - - for (auto &spawngroup_entry: spawngroup_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spawngroup_entry.name) + "'"); - insert_values.push_back(std::to_string(spawngroup_entry.spawn_limit)); - insert_values.push_back(std::to_string(spawngroup_entry.dist)); - insert_values.push_back(std::to_string(spawngroup_entry.max_x)); - insert_values.push_back(std::to_string(spawngroup_entry.min_x)); - insert_values.push_back(std::to_string(spawngroup_entry.max_y)); - insert_values.push_back(std::to_string(spawngroup_entry.min_y)); - insert_values.push_back(std::to_string(spawngroup_entry.delay)); - insert_values.push_back(std::to_string(spawngroup_entry.mindelay)); - insert_values.push_back(std::to_string(spawngroup_entry.despawn)); - insert_values.push_back(std::to_string(spawngroup_entry.despawn_timer)); - insert_values.push_back(std::to_string(spawngroup_entry.wp_spawns)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawngroup entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); - entry.delay = atoi(row[8]); - entry.mindelay = atoi(row[9]); - entry.despawn = atoi(row[10]); - entry.despawn_timer = atoi(row[11]); - entry.wp_spawns = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Spawngroup entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); - entry.delay = atoi(row[8]); - entry.mindelay = atoi(row[9]); - entry.despawn = atoi(row[10]); - entry.despawn_timer = atoi(row[11]); - entry.wp_spawns = atoi(row[12]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index 05ebdc4e4..630df19d1 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -23,284 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spell_buckets_repository.h" -class SpellBucketsRepository { +class SpellBucketsRepository: public BaseSpellBucketsRepository { public: - struct SpellBuckets { - int spellid; - std::string key; - std::string value; - }; - static std::string PrimaryKey() - { - return std::string("spellid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpellBucketsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpellBucketsRepository::GetWhereNeverExpires() + * SpellBucketsRepository::GetWhereXAndY() + * SpellBucketsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "spellid", - "key", - "value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spell_buckets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpellBuckets NewEntity() - { - SpellBuckets entry{}; - - entry.spellid = 0; - entry.key = ""; - entry.value = ""; - - return entry; - } - - static SpellBuckets GetSpellBucketsEntry( - const std::vector &spell_bucketss, - int spell_buckets_id - ) - { - for (auto &spell_buckets : spell_bucketss) { - if (spell_buckets.spellid == spell_buckets_id) { - return spell_buckets; - } - } - - return NewEntity(); - } - - static SpellBuckets FindOne( - int spell_buckets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spell_buckets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpellBuckets entry{}; - - entry.spellid = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spell_buckets_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spell_buckets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpellBuckets spell_buckets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(spell_buckets_entry.key) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(spell_buckets_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spell_buckets_entry.spellid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpellBuckets InsertOne( - SpellBuckets spell_buckets_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); - insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spell_buckets_entry.id = results.LastInsertedID(); - return spell_buckets_entry; - } - - spell_buckets_entry = SpellBucketsRepository::NewEntity(); - - return spell_buckets_entry; - } - - static int InsertMany( - std::vector spell_buckets_entries - ) - { - std::vector insert_chunks; - - for (auto &spell_buckets_entry: spell_buckets_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); - insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellBuckets entry{}; - - entry.spellid = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellBuckets entry{}; - - entry.spellid = atoi(row[0]); - entry.key = row[1] ? row[1] : ""; - entry.value = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h index 1f2f7e797..286b1ee5c 100644 --- a/common/repositories/spell_globals_repository.h +++ b/common/repositories/spell_globals_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spell_globals_repository.h" -class SpellGlobalsRepository { +class SpellGlobalsRepository: public BaseSpellGlobalsRepository { public: - struct SpellGlobals { - int spellid; - std::string spell_name; - std::string qglobal; - std::string value; - }; - static std::string PrimaryKey() - { - return std::string("spellid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpellGlobalsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpellGlobalsRepository::GetWhereNeverExpires() + * SpellGlobalsRepository::GetWhereXAndY() + * SpellGlobalsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "spellid", - "spell_name", - "qglobal", - "value", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spell_globals"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpellGlobals NewEntity() - { - SpellGlobals entry{}; - - entry.spellid = 0; - entry.spell_name = ""; - entry.qglobal = ""; - entry.value = ""; - - return entry; - } - - static SpellGlobals GetSpellGlobalsEntry( - const std::vector &spell_globalss, - int spell_globals_id - ) - { - for (auto &spell_globals : spell_globalss) { - if (spell_globals.spellid == spell_globals_id) { - return spell_globals; - } - } - - return NewEntity(); - } - - static SpellGlobals FindOne( - int spell_globals_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spell_globals_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpellGlobals entry{}; - - entry.spellid = atoi(row[0]); - entry.spell_name = row[1] ? row[1] : ""; - entry.qglobal = row[2] ? row[2] : ""; - entry.value = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spell_globals_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spell_globals_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpellGlobals spell_globals_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(spell_globals_entry.spell_name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(spell_globals_entry.qglobal) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(spell_globals_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spell_globals_entry.spellid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpellGlobals InsertOne( - SpellGlobals spell_globals_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); - insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); - insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spell_globals_entry.id = results.LastInsertedID(); - return spell_globals_entry; - } - - spell_globals_entry = SpellGlobalsRepository::NewEntity(); - - return spell_globals_entry; - } - - static int InsertMany( - std::vector spell_globals_entries - ) - { - std::vector insert_chunks; - - for (auto &spell_globals_entry: spell_globals_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); - insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); - insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellGlobals entry{}; - - entry.spellid = atoi(row[0]); - entry.spell_name = row[1] ? row[1] : ""; - entry.qglobal = row[2] ? row[2] : ""; - entry.value = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellGlobals entry{}; - - entry.spellid = atoi(row[0]); - entry.spell_name = row[1] ? row[1] : ""; - entry.qglobal = row[2] ? row[2] : ""; - entry.value = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index e9f48d3a3..cb3cd7d8b 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -23,2390 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_spells_new_repository.h" -class SpellsNewRepository { +class SpellsNewRepository: public BaseSpellsNewRepository { public: - struct SpellsNew { - int id; - std::string name; - std::string player_1; - std::string teleport_zone; - std::string you_cast; - std::string other_casts; - std::string cast_on_you; - std::string cast_on_other; - std::string spell_fades; - int range; - int aoerange; - int pushback; - int pushup; - int cast_time; - int recovery_time; - int recast_time; - int buffdurationformula; - int buffduration; - int AEDuration; - int mana; - int effect_base_value1; - int effect_base_value2; - int effect_base_value3; - int effect_base_value4; - int effect_base_value5; - int effect_base_value6; - int effect_base_value7; - int effect_base_value8; - int effect_base_value9; - int effect_base_value10; - int effect_base_value11; - int effect_base_value12; - int effect_limit_value1; - int effect_limit_value2; - int effect_limit_value3; - int effect_limit_value4; - int effect_limit_value5; - int effect_limit_value6; - int effect_limit_value7; - int effect_limit_value8; - int effect_limit_value9; - int effect_limit_value10; - int effect_limit_value11; - int effect_limit_value12; - int max1; - int max2; - int max3; - int max4; - int max5; - int max6; - int max7; - int max8; - int max9; - int max10; - int max11; - int max12; - int icon; - int memicon; - int components1; - int components2; - int components3; - int components4; - int component_counts1; - int component_counts2; - int component_counts3; - int component_counts4; - int NoexpendReagent1; - int NoexpendReagent2; - int NoexpendReagent3; - int NoexpendReagent4; - int formula1; - int formula2; - int formula3; - int formula4; - int formula5; - int formula6; - int formula7; - int formula8; - int formula9; - int formula10; - int formula11; - int formula12; - int LightType; - int goodEffect; - int Activated; - int resisttype; - int effectid1; - int effectid2; - int effectid3; - int effectid4; - int effectid5; - int effectid6; - int effectid7; - int effectid8; - int effectid9; - int effectid10; - int effectid11; - int effectid12; - int targettype; - int basediff; - int skill; - int zonetype; - int EnvironmentType; - int TimeOfDay; - int classes1; - int classes2; - int classes3; - int classes4; - int classes5; - int classes6; - int classes7; - int classes8; - int classes9; - int classes10; - int classes11; - int classes12; - int classes13; - int classes14; - int classes15; - int classes16; - int CastingAnim; - int TargetAnim; - int TravelType; - int SpellAffectIndex; - int disallow_sit; - int deities0; - int deities1; - int deities2; - int deities3; - int deities4; - int deities5; - int deities6; - int deities7; - int deities8; - int deities9; - int deities10; - int deities11; - int deities12; - int deities13; - int deities14; - int deities15; - int deities16; - int field142; - int field143; - int new_icon; - int spellanim; - int uninterruptable; - int ResistDiff; - int dot_stacking_exempt; - int deleteable; - int RecourseLink; - int no_partial_resist; - int field152; - int field153; - int short_buff_box; - int descnum; - int typedescnum; - int effectdescnum; - int effectdescnum2; - int npc_no_los; - int field160; - int reflectable; - int bonushate; - int field163; - int field164; - int ldon_trap; - int EndurCost; - int EndurTimerIndex; - int IsDiscipline; - int field169; - int field170; - int field171; - int field172; - int HateAdded; - int EndurUpkeep; - int numhitstype; - int numhits; - int pvpresistbase; - int pvpresistcalc; - int pvpresistcap; - int spell_category; - int field181; - int field182; - int pcnpc_only_flag; - int cast_not_standing; - int can_mgb; - int nodispell; - int npc_category; - int npc_usefulness; - int MinResist; - int MaxResist; - int viral_targets; - int viral_timer; - int nimbuseffect; - int ConeStartAngle; - int ConeStopAngle; - int sneaking; - int not_extendable; - int field198; - int field199; - int suspendable; - int viral_range; - int songcap; - int field203; - int field204; - int no_block; - int field206; - int spellgroup; - int rank; - int field209; - int field210; - int CastRestriction; - int allowrest; - int InCombat; - int OutofCombat; - int field215; - int field216; - int field217; - int aemaxtargets; - int maxtargets; - int field220; - int field221; - int field222; - int field223; - int persistdeath; - int field225; - int field226; - float min_dist; - float min_dist_mod; - float max_dist; - float max_dist_mod; - int min_range; - int field232; - int field233; - int field234; - int field235; - int field236; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * SpellsNewRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * SpellsNewRepository::GetWhereNeverExpires() + * SpellsNewRepository::GetWhereXAndY() + * SpellsNewRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "name", - "player_1", - "teleport_zone", - "you_cast", - "other_casts", - "cast_on_you", - "cast_on_other", - "spell_fades", - "range", - "aoerange", - "pushback", - "pushup", - "cast_time", - "recovery_time", - "recast_time", - "buffdurationformula", - "buffduration", - "AEDuration", - "mana", - "effect_base_value1", - "effect_base_value2", - "effect_base_value3", - "effect_base_value4", - "effect_base_value5", - "effect_base_value6", - "effect_base_value7", - "effect_base_value8", - "effect_base_value9", - "effect_base_value10", - "effect_base_value11", - "effect_base_value12", - "effect_limit_value1", - "effect_limit_value2", - "effect_limit_value3", - "effect_limit_value4", - "effect_limit_value5", - "effect_limit_value6", - "effect_limit_value7", - "effect_limit_value8", - "effect_limit_value9", - "effect_limit_value10", - "effect_limit_value11", - "effect_limit_value12", - "max1", - "max2", - "max3", - "max4", - "max5", - "max6", - "max7", - "max8", - "max9", - "max10", - "max11", - "max12", - "icon", - "memicon", - "components1", - "components2", - "components3", - "components4", - "component_counts1", - "component_counts2", - "component_counts3", - "component_counts4", - "NoexpendReagent1", - "NoexpendReagent2", - "NoexpendReagent3", - "NoexpendReagent4", - "formula1", - "formula2", - "formula3", - "formula4", - "formula5", - "formula6", - "formula7", - "formula8", - "formula9", - "formula10", - "formula11", - "formula12", - "LightType", - "goodEffect", - "Activated", - "resisttype", - "effectid1", - "effectid2", - "effectid3", - "effectid4", - "effectid5", - "effectid6", - "effectid7", - "effectid8", - "effectid9", - "effectid10", - "effectid11", - "effectid12", - "targettype", - "basediff", - "skill", - "zonetype", - "EnvironmentType", - "TimeOfDay", - "classes1", - "classes2", - "classes3", - "classes4", - "classes5", - "classes6", - "classes7", - "classes8", - "classes9", - "classes10", - "classes11", - "classes12", - "classes13", - "classes14", - "classes15", - "classes16", - "CastingAnim", - "TargetAnim", - "TravelType", - "SpellAffectIndex", - "disallow_sit", - "deities0", - "deities1", - "deities2", - "deities3", - "deities4", - "deities5", - "deities6", - "deities7", - "deities8", - "deities9", - "deities10", - "deities11", - "deities12", - "deities13", - "deities14", - "deities15", - "deities16", - "field142", - "field143", - "new_icon", - "spellanim", - "uninterruptable", - "ResistDiff", - "dot_stacking_exempt", - "deleteable", - "RecourseLink", - "no_partial_resist", - "field152", - "field153", - "short_buff_box", - "descnum", - "typedescnum", - "effectdescnum", - "effectdescnum2", - "npc_no_los", - "field160", - "reflectable", - "bonushate", - "field163", - "field164", - "ldon_trap", - "EndurCost", - "EndurTimerIndex", - "IsDiscipline", - "field169", - "field170", - "field171", - "field172", - "HateAdded", - "EndurUpkeep", - "numhitstype", - "numhits", - "pvpresistbase", - "pvpresistcalc", - "pvpresistcap", - "spell_category", - "field181", - "field182", - "pcnpc_only_flag", - "cast_not_standing", - "can_mgb", - "nodispell", - "npc_category", - "npc_usefulness", - "MinResist", - "MaxResist", - "viral_targets", - "viral_timer", - "nimbuseffect", - "ConeStartAngle", - "ConeStopAngle", - "sneaking", - "not_extendable", - "field198", - "field199", - "suspendable", - "viral_range", - "songcap", - "field203", - "field204", - "no_block", - "field206", - "spellgroup", - "rank", - "field209", - "field210", - "CastRestriction", - "allowrest", - "InCombat", - "OutofCombat", - "field215", - "field216", - "field217", - "aemaxtargets", - "maxtargets", - "field220", - "field221", - "field222", - "field223", - "persistdeath", - "field225", - "field226", - "min_dist", - "min_dist_mod", - "max_dist", - "max_dist_mod", - "min_range", - "field232", - "field233", - "field234", - "field235", - "field236", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("spells_new"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static SpellsNew NewEntity() - { - SpellsNew entry{}; - - entry.id = 0; - entry.name = ""; - entry.player_1 = "BLUE_TRAIL"; - entry.teleport_zone = ""; - entry.you_cast = ""; - entry.other_casts = ""; - entry.cast_on_you = ""; - entry.cast_on_other = ""; - entry.spell_fades = ""; - entry.range = 100; - entry.aoerange = 0; - entry.pushback = 0; - entry.pushup = 0; - entry.cast_time = 0; - entry.recovery_time = 0; - entry.recast_time = 0; - entry.buffdurationformula = 7; - entry.buffduration = 65; - entry.AEDuration = 0; - entry.mana = 0; - entry.effect_base_value1 = 100; - entry.effect_base_value2 = 0; - entry.effect_base_value3 = 0; - entry.effect_base_value4 = 0; - entry.effect_base_value5 = 0; - entry.effect_base_value6 = 0; - entry.effect_base_value7 = 0; - entry.effect_base_value8 = 0; - entry.effect_base_value9 = 0; - entry.effect_base_value10 = 0; - entry.effect_base_value11 = 0; - entry.effect_base_value12 = 0; - entry.effect_limit_value1 = 0; - entry.effect_limit_value2 = 0; - entry.effect_limit_value3 = 0; - entry.effect_limit_value4 = 0; - entry.effect_limit_value5 = 0; - entry.effect_limit_value6 = 0; - entry.effect_limit_value7 = 0; - entry.effect_limit_value8 = 0; - entry.effect_limit_value9 = 0; - entry.effect_limit_value10 = 0; - entry.effect_limit_value11 = 0; - entry.effect_limit_value12 = 0; - entry.max1 = 0; - entry.max2 = 0; - entry.max3 = 0; - entry.max4 = 0; - entry.max5 = 0; - entry.max6 = 0; - entry.max7 = 0; - entry.max8 = 0; - entry.max9 = 0; - entry.max10 = 0; - entry.max11 = 0; - entry.max12 = 0; - entry.icon = 0; - entry.memicon = 0; - entry.components1 = -1; - entry.components2 = -1; - entry.components3 = -1; - entry.components4 = -1; - entry.component_counts1 = 1; - entry.component_counts2 = 1; - entry.component_counts3 = 1; - entry.component_counts4 = 1; - entry.NoexpendReagent1 = -1; - entry.NoexpendReagent2 = -1; - entry.NoexpendReagent3 = -1; - entry.NoexpendReagent4 = -1; - entry.formula1 = 100; - entry.formula2 = 100; - entry.formula3 = 100; - entry.formula4 = 100; - entry.formula5 = 100; - entry.formula6 = 100; - entry.formula7 = 100; - entry.formula8 = 100; - entry.formula9 = 100; - entry.formula10 = 100; - entry.formula11 = 100; - entry.formula12 = 100; - entry.LightType = 0; - entry.goodEffect = 0; - entry.Activated = 0; - entry.resisttype = 0; - entry.effectid1 = 254; - entry.effectid2 = 254; - entry.effectid3 = 254; - entry.effectid4 = 254; - entry.effectid5 = 254; - entry.effectid6 = 254; - entry.effectid7 = 254; - entry.effectid8 = 254; - entry.effectid9 = 254; - entry.effectid10 = 254; - entry.effectid11 = 254; - entry.effectid12 = 254; - entry.targettype = 2; - entry.basediff = 0; - entry.skill = 98; - entry.zonetype = -1; - entry.EnvironmentType = 0; - entry.TimeOfDay = 0; - entry.classes1 = 255; - entry.classes2 = 255; - entry.classes3 = 255; - entry.classes4 = 255; - entry.classes5 = 255; - entry.classes6 = 255; - entry.classes7 = 255; - entry.classes8 = 255; - entry.classes9 = 255; - entry.classes10 = 255; - entry.classes11 = 255; - entry.classes12 = 255; - entry.classes13 = 255; - entry.classes14 = 255; - entry.classes15 = 255; - entry.classes16 = 255; - entry.CastingAnim = 44; - entry.TargetAnim = 13; - entry.TravelType = 0; - entry.SpellAffectIndex = -1; - entry.disallow_sit = 0; - entry.deities0 = 0; - entry.deities1 = 0; - entry.deities2 = 0; - entry.deities3 = 0; - entry.deities4 = 0; - entry.deities5 = 0; - entry.deities6 = 0; - entry.deities7 = 0; - entry.deities8 = 0; - entry.deities9 = 0; - entry.deities10 = 0; - entry.deities11 = 0; - entry.deities12 = 0; - entry.deities13 = 0; - entry.deities14 = 0; - entry.deities15 = 0; - entry.deities16 = 0; - entry.field142 = 100; - entry.field143 = 0; - entry.new_icon = 161; - entry.spellanim = 0; - entry.uninterruptable = 0; - entry.ResistDiff = -150; - entry.dot_stacking_exempt = 0; - entry.deleteable = 0; - entry.RecourseLink = 0; - entry.no_partial_resist = 0; - entry.field152 = 0; - entry.field153 = 0; - entry.short_buff_box = -1; - entry.descnum = 0; - entry.typedescnum = 0; - entry.effectdescnum = 0; - entry.effectdescnum2 = 0; - entry.npc_no_los = 0; - entry.field160 = 0; - entry.reflectable = 0; - entry.bonushate = 0; - entry.field163 = 100; - entry.field164 = -150; - entry.ldon_trap = 0; - entry.EndurCost = 0; - entry.EndurTimerIndex = 0; - entry.IsDiscipline = 0; - entry.field169 = 0; - entry.field170 = 0; - entry.field171 = 0; - entry.field172 = 0; - entry.HateAdded = 0; - entry.EndurUpkeep = 0; - entry.numhitstype = 0; - entry.numhits = 0; - entry.pvpresistbase = -150; - entry.pvpresistcalc = 100; - entry.pvpresistcap = -150; - entry.spell_category = -99; - entry.field181 = 7; - entry.field182 = 65; - entry.pcnpc_only_flag = 0; - entry.cast_not_standing = 0; - entry.can_mgb = 0; - entry.nodispell = -1; - entry.npc_category = 0; - entry.npc_usefulness = 0; - entry.MinResist = 0; - entry.MaxResist = 0; - entry.viral_targets = 0; - entry.viral_timer = 0; - entry.nimbuseffect = 0; - entry.ConeStartAngle = 0; - entry.ConeStopAngle = 0; - entry.sneaking = 0; - entry.not_extendable = 0; - entry.field198 = 0; - entry.field199 = 1; - entry.suspendable = 0; - entry.viral_range = 0; - entry.songcap = 0; - entry.field203 = 0; - entry.field204 = 0; - entry.no_block = 0; - entry.field206 = -1; - entry.spellgroup = 0; - entry.rank = 0; - entry.field209 = 0; - entry.field210 = 1; - entry.CastRestriction = 0; - entry.allowrest = 0; - entry.InCombat = 0; - entry.OutofCombat = 0; - entry.field215 = 0; - entry.field216 = 0; - entry.field217 = 0; - entry.aemaxtargets = 0; - entry.maxtargets = 0; - entry.field220 = 0; - entry.field221 = 0; - entry.field222 = 0; - entry.field223 = 0; - entry.persistdeath = 0; - entry.field225 = 0; - entry.field226 = 0; - entry.min_dist = 0; - entry.min_dist_mod = 0; - entry.max_dist = 0; - entry.max_dist_mod = 0; - entry.min_range = 0; - entry.field232 = 0; - entry.field233 = 0; - entry.field234 = 0; - entry.field235 = 0; - entry.field236 = 0; - - return entry; - } - - static SpellsNew GetSpellsNewEntry( - const std::vector &spells_news, - int spells_new_id - ) - { - for (auto &spells_new : spells_news) { - if (spells_new.id == spells_new_id) { - return spells_new; - } - } - - return NewEntity(); - } - - static SpellsNew FindOne( - int spells_new_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - spells_new_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - SpellsNew entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.player_1 = row[2] ? row[2] : ""; - entry.teleport_zone = row[3] ? row[3] : ""; - entry.you_cast = row[4] ? row[4] : ""; - entry.other_casts = row[5] ? row[5] : ""; - entry.cast_on_you = row[6] ? row[6] : ""; - entry.cast_on_other = row[7] ? row[7] : ""; - entry.spell_fades = row[8] ? row[8] : ""; - entry.range = atoi(row[9]); - entry.aoerange = atoi(row[10]); - entry.pushback = atoi(row[11]); - entry.pushup = atoi(row[12]); - entry.cast_time = atoi(row[13]); - entry.recovery_time = atoi(row[14]); - entry.recast_time = atoi(row[15]); - entry.buffdurationformula = atoi(row[16]); - entry.buffduration = atoi(row[17]); - entry.AEDuration = atoi(row[18]); - entry.mana = atoi(row[19]); - entry.effect_base_value1 = atoi(row[20]); - entry.effect_base_value2 = atoi(row[21]); - entry.effect_base_value3 = atoi(row[22]); - entry.effect_base_value4 = atoi(row[23]); - entry.effect_base_value5 = atoi(row[24]); - entry.effect_base_value6 = atoi(row[25]); - entry.effect_base_value7 = atoi(row[26]); - entry.effect_base_value8 = atoi(row[27]); - entry.effect_base_value9 = atoi(row[28]); - entry.effect_base_value10 = atoi(row[29]); - entry.effect_base_value11 = atoi(row[30]); - entry.effect_base_value12 = atoi(row[31]); - entry.effect_limit_value1 = atoi(row[32]); - entry.effect_limit_value2 = atoi(row[33]); - entry.effect_limit_value3 = atoi(row[34]); - entry.effect_limit_value4 = atoi(row[35]); - entry.effect_limit_value5 = atoi(row[36]); - entry.effect_limit_value6 = atoi(row[37]); - entry.effect_limit_value7 = atoi(row[38]); - entry.effect_limit_value8 = atoi(row[39]); - entry.effect_limit_value9 = atoi(row[40]); - entry.effect_limit_value10 = atoi(row[41]); - entry.effect_limit_value11 = atoi(row[42]); - entry.effect_limit_value12 = atoi(row[43]); - entry.max1 = atoi(row[44]); - entry.max2 = atoi(row[45]); - entry.max3 = atoi(row[46]); - entry.max4 = atoi(row[47]); - entry.max5 = atoi(row[48]); - entry.max6 = atoi(row[49]); - entry.max7 = atoi(row[50]); - entry.max8 = atoi(row[51]); - entry.max9 = atoi(row[52]); - entry.max10 = atoi(row[53]); - entry.max11 = atoi(row[54]); - entry.max12 = atoi(row[55]); - entry.icon = atoi(row[56]); - entry.memicon = atoi(row[57]); - entry.components1 = atoi(row[58]); - entry.components2 = atoi(row[59]); - entry.components3 = atoi(row[60]); - entry.components4 = atoi(row[61]); - entry.component_counts1 = atoi(row[62]); - entry.component_counts2 = atoi(row[63]); - entry.component_counts3 = atoi(row[64]); - entry.component_counts4 = atoi(row[65]); - entry.NoexpendReagent1 = atoi(row[66]); - entry.NoexpendReagent2 = atoi(row[67]); - entry.NoexpendReagent3 = atoi(row[68]); - entry.NoexpendReagent4 = atoi(row[69]); - entry.formula1 = atoi(row[70]); - entry.formula2 = atoi(row[71]); - entry.formula3 = atoi(row[72]); - entry.formula4 = atoi(row[73]); - entry.formula5 = atoi(row[74]); - entry.formula6 = atoi(row[75]); - entry.formula7 = atoi(row[76]); - entry.formula8 = atoi(row[77]); - entry.formula9 = atoi(row[78]); - entry.formula10 = atoi(row[79]); - entry.formula11 = atoi(row[80]); - entry.formula12 = atoi(row[81]); - entry.LightType = atoi(row[82]); - entry.goodEffect = atoi(row[83]); - entry.Activated = atoi(row[84]); - entry.resisttype = atoi(row[85]); - entry.effectid1 = atoi(row[86]); - entry.effectid2 = atoi(row[87]); - entry.effectid3 = atoi(row[88]); - entry.effectid4 = atoi(row[89]); - entry.effectid5 = atoi(row[90]); - entry.effectid6 = atoi(row[91]); - entry.effectid7 = atoi(row[92]); - entry.effectid8 = atoi(row[93]); - entry.effectid9 = atoi(row[94]); - entry.effectid10 = atoi(row[95]); - entry.effectid11 = atoi(row[96]); - entry.effectid12 = atoi(row[97]); - entry.targettype = atoi(row[98]); - entry.basediff = atoi(row[99]); - entry.skill = atoi(row[100]); - entry.zonetype = atoi(row[101]); - entry.EnvironmentType = atoi(row[102]); - entry.TimeOfDay = atoi(row[103]); - entry.classes1 = atoi(row[104]); - entry.classes2 = atoi(row[105]); - entry.classes3 = atoi(row[106]); - entry.classes4 = atoi(row[107]); - entry.classes5 = atoi(row[108]); - entry.classes6 = atoi(row[109]); - entry.classes7 = atoi(row[110]); - entry.classes8 = atoi(row[111]); - entry.classes9 = atoi(row[112]); - entry.classes10 = atoi(row[113]); - entry.classes11 = atoi(row[114]); - entry.classes12 = atoi(row[115]); - entry.classes13 = atoi(row[116]); - entry.classes14 = atoi(row[117]); - entry.classes15 = atoi(row[118]); - entry.classes16 = atoi(row[119]); - entry.CastingAnim = atoi(row[120]); - entry.TargetAnim = atoi(row[121]); - entry.TravelType = atoi(row[122]); - entry.SpellAffectIndex = atoi(row[123]); - entry.disallow_sit = atoi(row[124]); - entry.deities0 = atoi(row[125]); - entry.deities1 = atoi(row[126]); - entry.deities2 = atoi(row[127]); - entry.deities3 = atoi(row[128]); - entry.deities4 = atoi(row[129]); - entry.deities5 = atoi(row[130]); - entry.deities6 = atoi(row[131]); - entry.deities7 = atoi(row[132]); - entry.deities8 = atoi(row[133]); - entry.deities9 = atoi(row[134]); - entry.deities10 = atoi(row[135]); - entry.deities11 = atoi(row[136]); - entry.deities12 = atoi(row[137]); - entry.deities13 = atoi(row[138]); - entry.deities14 = atoi(row[139]); - entry.deities15 = atoi(row[140]); - entry.deities16 = atoi(row[141]); - entry.field142 = atoi(row[142]); - entry.field143 = atoi(row[143]); - entry.new_icon = atoi(row[144]); - entry.spellanim = atoi(row[145]); - entry.uninterruptable = atoi(row[146]); - entry.ResistDiff = atoi(row[147]); - entry.dot_stacking_exempt = atoi(row[148]); - entry.deleteable = atoi(row[149]); - entry.RecourseLink = atoi(row[150]); - entry.no_partial_resist = atoi(row[151]); - entry.field152 = atoi(row[152]); - entry.field153 = atoi(row[153]); - entry.short_buff_box = atoi(row[154]); - entry.descnum = atoi(row[155]); - entry.typedescnum = atoi(row[156]); - entry.effectdescnum = atoi(row[157]); - entry.effectdescnum2 = atoi(row[158]); - entry.npc_no_los = atoi(row[159]); - entry.field160 = atoi(row[160]); - entry.reflectable = atoi(row[161]); - entry.bonushate = atoi(row[162]); - entry.field163 = atoi(row[163]); - entry.field164 = atoi(row[164]); - entry.ldon_trap = atoi(row[165]); - entry.EndurCost = atoi(row[166]); - entry.EndurTimerIndex = atoi(row[167]); - entry.IsDiscipline = atoi(row[168]); - entry.field169 = atoi(row[169]); - entry.field170 = atoi(row[170]); - entry.field171 = atoi(row[171]); - entry.field172 = atoi(row[172]); - entry.HateAdded = atoi(row[173]); - entry.EndurUpkeep = atoi(row[174]); - entry.numhitstype = atoi(row[175]); - entry.numhits = atoi(row[176]); - entry.pvpresistbase = atoi(row[177]); - entry.pvpresistcalc = atoi(row[178]); - entry.pvpresistcap = atoi(row[179]); - entry.spell_category = atoi(row[180]); - entry.field181 = atoi(row[181]); - entry.field182 = atoi(row[182]); - entry.pcnpc_only_flag = atoi(row[183]); - entry.cast_not_standing = atoi(row[184]); - entry.can_mgb = atoi(row[185]); - entry.nodispell = atoi(row[186]); - entry.npc_category = atoi(row[187]); - entry.npc_usefulness = atoi(row[188]); - entry.MinResist = atoi(row[189]); - entry.MaxResist = atoi(row[190]); - entry.viral_targets = atoi(row[191]); - entry.viral_timer = atoi(row[192]); - entry.nimbuseffect = atoi(row[193]); - entry.ConeStartAngle = atoi(row[194]); - entry.ConeStopAngle = atoi(row[195]); - entry.sneaking = atoi(row[196]); - entry.not_extendable = atoi(row[197]); - entry.field198 = atoi(row[198]); - entry.field199 = atoi(row[199]); - entry.suspendable = atoi(row[200]); - entry.viral_range = atoi(row[201]); - entry.songcap = atoi(row[202]); - entry.field203 = atoi(row[203]); - entry.field204 = atoi(row[204]); - entry.no_block = atoi(row[205]); - entry.field206 = atoi(row[206]); - entry.spellgroup = atoi(row[207]); - entry.rank = atoi(row[208]); - entry.field209 = atoi(row[209]); - entry.field210 = atoi(row[210]); - entry.CastRestriction = atoi(row[211]); - entry.allowrest = atoi(row[212]); - entry.InCombat = atoi(row[213]); - entry.OutofCombat = atoi(row[214]); - entry.field215 = atoi(row[215]); - entry.field216 = atoi(row[216]); - entry.field217 = atoi(row[217]); - entry.aemaxtargets = atoi(row[218]); - entry.maxtargets = atoi(row[219]); - entry.field220 = atoi(row[220]); - entry.field221 = atoi(row[221]); - entry.field222 = atoi(row[222]); - entry.field223 = atoi(row[223]); - entry.persistdeath = atoi(row[224]); - entry.field225 = atoi(row[225]); - entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); - entry.min_range = atoi(row[231]); - entry.field232 = atoi(row[232]); - entry.field233 = atoi(row[233]); - entry.field234 = atoi(row[234]); - entry.field235 = atoi(row[235]); - entry.field236 = atoi(row[236]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int spells_new_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - spells_new_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - SpellsNew spells_new_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(spells_new_entry.name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(spells_new_entry.player_1) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(spells_new_entry.teleport_zone) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(spells_new_entry.you_cast) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(spells_new_entry.other_casts) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(spells_new_entry.cast_on_you) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(spells_new_entry.cast_on_other) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(spells_new_entry.spell_fades) + "'"); - update_values.push_back(columns[9] + " = " + std::to_string(spells_new_entry.range)); - update_values.push_back(columns[10] + " = " + std::to_string(spells_new_entry.aoerange)); - update_values.push_back(columns[11] + " = " + std::to_string(spells_new_entry.pushback)); - update_values.push_back(columns[12] + " = " + std::to_string(spells_new_entry.pushup)); - update_values.push_back(columns[13] + " = " + std::to_string(spells_new_entry.cast_time)); - update_values.push_back(columns[14] + " = " + std::to_string(spells_new_entry.recovery_time)); - update_values.push_back(columns[15] + " = " + std::to_string(spells_new_entry.recast_time)); - update_values.push_back(columns[16] + " = " + std::to_string(spells_new_entry.buffdurationformula)); - update_values.push_back(columns[17] + " = " + std::to_string(spells_new_entry.buffduration)); - update_values.push_back(columns[18] + " = " + std::to_string(spells_new_entry.AEDuration)); - update_values.push_back(columns[19] + " = " + std::to_string(spells_new_entry.mana)); - update_values.push_back(columns[20] + " = " + std::to_string(spells_new_entry.effect_base_value1)); - update_values.push_back(columns[21] + " = " + std::to_string(spells_new_entry.effect_base_value2)); - update_values.push_back(columns[22] + " = " + std::to_string(spells_new_entry.effect_base_value3)); - update_values.push_back(columns[23] + " = " + std::to_string(spells_new_entry.effect_base_value4)); - update_values.push_back(columns[24] + " = " + std::to_string(spells_new_entry.effect_base_value5)); - update_values.push_back(columns[25] + " = " + std::to_string(spells_new_entry.effect_base_value6)); - update_values.push_back(columns[26] + " = " + std::to_string(spells_new_entry.effect_base_value7)); - update_values.push_back(columns[27] + " = " + std::to_string(spells_new_entry.effect_base_value8)); - update_values.push_back(columns[28] + " = " + std::to_string(spells_new_entry.effect_base_value9)); - update_values.push_back(columns[29] + " = " + std::to_string(spells_new_entry.effect_base_value10)); - update_values.push_back(columns[30] + " = " + std::to_string(spells_new_entry.effect_base_value11)); - update_values.push_back(columns[31] + " = " + std::to_string(spells_new_entry.effect_base_value12)); - update_values.push_back(columns[32] + " = " + std::to_string(spells_new_entry.effect_limit_value1)); - update_values.push_back(columns[33] + " = " + std::to_string(spells_new_entry.effect_limit_value2)); - update_values.push_back(columns[34] + " = " + std::to_string(spells_new_entry.effect_limit_value3)); - update_values.push_back(columns[35] + " = " + std::to_string(spells_new_entry.effect_limit_value4)); - update_values.push_back(columns[36] + " = " + std::to_string(spells_new_entry.effect_limit_value5)); - update_values.push_back(columns[37] + " = " + std::to_string(spells_new_entry.effect_limit_value6)); - update_values.push_back(columns[38] + " = " + std::to_string(spells_new_entry.effect_limit_value7)); - update_values.push_back(columns[39] + " = " + std::to_string(spells_new_entry.effect_limit_value8)); - update_values.push_back(columns[40] + " = " + std::to_string(spells_new_entry.effect_limit_value9)); - update_values.push_back(columns[41] + " = " + std::to_string(spells_new_entry.effect_limit_value10)); - update_values.push_back(columns[42] + " = " + std::to_string(spells_new_entry.effect_limit_value11)); - update_values.push_back(columns[43] + " = " + std::to_string(spells_new_entry.effect_limit_value12)); - update_values.push_back(columns[44] + " = " + std::to_string(spells_new_entry.max1)); - update_values.push_back(columns[45] + " = " + std::to_string(spells_new_entry.max2)); - update_values.push_back(columns[46] + " = " + std::to_string(spells_new_entry.max3)); - update_values.push_back(columns[47] + " = " + std::to_string(spells_new_entry.max4)); - update_values.push_back(columns[48] + " = " + std::to_string(spells_new_entry.max5)); - update_values.push_back(columns[49] + " = " + std::to_string(spells_new_entry.max6)); - update_values.push_back(columns[50] + " = " + std::to_string(spells_new_entry.max7)); - update_values.push_back(columns[51] + " = " + std::to_string(spells_new_entry.max8)); - update_values.push_back(columns[52] + " = " + std::to_string(spells_new_entry.max9)); - update_values.push_back(columns[53] + " = " + std::to_string(spells_new_entry.max10)); - update_values.push_back(columns[54] + " = " + std::to_string(spells_new_entry.max11)); - update_values.push_back(columns[55] + " = " + std::to_string(spells_new_entry.max12)); - update_values.push_back(columns[56] + " = " + std::to_string(spells_new_entry.icon)); - update_values.push_back(columns[57] + " = " + std::to_string(spells_new_entry.memicon)); - update_values.push_back(columns[58] + " = " + std::to_string(spells_new_entry.components1)); - update_values.push_back(columns[59] + " = " + std::to_string(spells_new_entry.components2)); - update_values.push_back(columns[60] + " = " + std::to_string(spells_new_entry.components3)); - update_values.push_back(columns[61] + " = " + std::to_string(spells_new_entry.components4)); - update_values.push_back(columns[62] + " = " + std::to_string(spells_new_entry.component_counts1)); - update_values.push_back(columns[63] + " = " + std::to_string(spells_new_entry.component_counts2)); - update_values.push_back(columns[64] + " = " + std::to_string(spells_new_entry.component_counts3)); - update_values.push_back(columns[65] + " = " + std::to_string(spells_new_entry.component_counts4)); - update_values.push_back(columns[66] + " = " + std::to_string(spells_new_entry.NoexpendReagent1)); - update_values.push_back(columns[67] + " = " + std::to_string(spells_new_entry.NoexpendReagent2)); - update_values.push_back(columns[68] + " = " + std::to_string(spells_new_entry.NoexpendReagent3)); - update_values.push_back(columns[69] + " = " + std::to_string(spells_new_entry.NoexpendReagent4)); - update_values.push_back(columns[70] + " = " + std::to_string(spells_new_entry.formula1)); - update_values.push_back(columns[71] + " = " + std::to_string(spells_new_entry.formula2)); - update_values.push_back(columns[72] + " = " + std::to_string(spells_new_entry.formula3)); - update_values.push_back(columns[73] + " = " + std::to_string(spells_new_entry.formula4)); - update_values.push_back(columns[74] + " = " + std::to_string(spells_new_entry.formula5)); - update_values.push_back(columns[75] + " = " + std::to_string(spells_new_entry.formula6)); - update_values.push_back(columns[76] + " = " + std::to_string(spells_new_entry.formula7)); - update_values.push_back(columns[77] + " = " + std::to_string(spells_new_entry.formula8)); - update_values.push_back(columns[78] + " = " + std::to_string(spells_new_entry.formula9)); - update_values.push_back(columns[79] + " = " + std::to_string(spells_new_entry.formula10)); - update_values.push_back(columns[80] + " = " + std::to_string(spells_new_entry.formula11)); - update_values.push_back(columns[81] + " = " + std::to_string(spells_new_entry.formula12)); - update_values.push_back(columns[82] + " = " + std::to_string(spells_new_entry.LightType)); - update_values.push_back(columns[83] + " = " + std::to_string(spells_new_entry.goodEffect)); - update_values.push_back(columns[84] + " = " + std::to_string(spells_new_entry.Activated)); - update_values.push_back(columns[85] + " = " + std::to_string(spells_new_entry.resisttype)); - update_values.push_back(columns[86] + " = " + std::to_string(spells_new_entry.effectid1)); - update_values.push_back(columns[87] + " = " + std::to_string(spells_new_entry.effectid2)); - update_values.push_back(columns[88] + " = " + std::to_string(spells_new_entry.effectid3)); - update_values.push_back(columns[89] + " = " + std::to_string(spells_new_entry.effectid4)); - update_values.push_back(columns[90] + " = " + std::to_string(spells_new_entry.effectid5)); - update_values.push_back(columns[91] + " = " + std::to_string(spells_new_entry.effectid6)); - update_values.push_back(columns[92] + " = " + std::to_string(spells_new_entry.effectid7)); - update_values.push_back(columns[93] + " = " + std::to_string(spells_new_entry.effectid8)); - update_values.push_back(columns[94] + " = " + std::to_string(spells_new_entry.effectid9)); - update_values.push_back(columns[95] + " = " + std::to_string(spells_new_entry.effectid10)); - update_values.push_back(columns[96] + " = " + std::to_string(spells_new_entry.effectid11)); - update_values.push_back(columns[97] + " = " + std::to_string(spells_new_entry.effectid12)); - update_values.push_back(columns[98] + " = " + std::to_string(spells_new_entry.targettype)); - update_values.push_back(columns[99] + " = " + std::to_string(spells_new_entry.basediff)); - update_values.push_back(columns[100] + " = " + std::to_string(spells_new_entry.skill)); - update_values.push_back(columns[101] + " = " + std::to_string(spells_new_entry.zonetype)); - update_values.push_back(columns[102] + " = " + std::to_string(spells_new_entry.EnvironmentType)); - update_values.push_back(columns[103] + " = " + std::to_string(spells_new_entry.TimeOfDay)); - update_values.push_back(columns[104] + " = " + std::to_string(spells_new_entry.classes1)); - update_values.push_back(columns[105] + " = " + std::to_string(spells_new_entry.classes2)); - update_values.push_back(columns[106] + " = " + std::to_string(spells_new_entry.classes3)); - update_values.push_back(columns[107] + " = " + std::to_string(spells_new_entry.classes4)); - update_values.push_back(columns[108] + " = " + std::to_string(spells_new_entry.classes5)); - update_values.push_back(columns[109] + " = " + std::to_string(spells_new_entry.classes6)); - update_values.push_back(columns[110] + " = " + std::to_string(spells_new_entry.classes7)); - update_values.push_back(columns[111] + " = " + std::to_string(spells_new_entry.classes8)); - update_values.push_back(columns[112] + " = " + std::to_string(spells_new_entry.classes9)); - update_values.push_back(columns[113] + " = " + std::to_string(spells_new_entry.classes10)); - update_values.push_back(columns[114] + " = " + std::to_string(spells_new_entry.classes11)); - update_values.push_back(columns[115] + " = " + std::to_string(spells_new_entry.classes12)); - update_values.push_back(columns[116] + " = " + std::to_string(spells_new_entry.classes13)); - update_values.push_back(columns[117] + " = " + std::to_string(spells_new_entry.classes14)); - update_values.push_back(columns[118] + " = " + std::to_string(spells_new_entry.classes15)); - update_values.push_back(columns[119] + " = " + std::to_string(spells_new_entry.classes16)); - update_values.push_back(columns[120] + " = " + std::to_string(spells_new_entry.CastingAnim)); - update_values.push_back(columns[121] + " = " + std::to_string(spells_new_entry.TargetAnim)); - update_values.push_back(columns[122] + " = " + std::to_string(spells_new_entry.TravelType)); - update_values.push_back(columns[123] + " = " + std::to_string(spells_new_entry.SpellAffectIndex)); - update_values.push_back(columns[124] + " = " + std::to_string(spells_new_entry.disallow_sit)); - update_values.push_back(columns[125] + " = " + std::to_string(spells_new_entry.deities0)); - update_values.push_back(columns[126] + " = " + std::to_string(spells_new_entry.deities1)); - update_values.push_back(columns[127] + " = " + std::to_string(spells_new_entry.deities2)); - update_values.push_back(columns[128] + " = " + std::to_string(spells_new_entry.deities3)); - update_values.push_back(columns[129] + " = " + std::to_string(spells_new_entry.deities4)); - update_values.push_back(columns[130] + " = " + std::to_string(spells_new_entry.deities5)); - update_values.push_back(columns[131] + " = " + std::to_string(spells_new_entry.deities6)); - update_values.push_back(columns[132] + " = " + std::to_string(spells_new_entry.deities7)); - update_values.push_back(columns[133] + " = " + std::to_string(spells_new_entry.deities8)); - update_values.push_back(columns[134] + " = " + std::to_string(spells_new_entry.deities9)); - update_values.push_back(columns[135] + " = " + std::to_string(spells_new_entry.deities10)); - update_values.push_back(columns[136] + " = " + std::to_string(spells_new_entry.deities11)); - update_values.push_back(columns[137] + " = " + std::to_string(spells_new_entry.deities12)); - update_values.push_back(columns[138] + " = " + std::to_string(spells_new_entry.deities13)); - update_values.push_back(columns[139] + " = " + std::to_string(spells_new_entry.deities14)); - update_values.push_back(columns[140] + " = " + std::to_string(spells_new_entry.deities15)); - update_values.push_back(columns[141] + " = " + std::to_string(spells_new_entry.deities16)); - update_values.push_back(columns[142] + " = " + std::to_string(spells_new_entry.field142)); - update_values.push_back(columns[143] + " = " + std::to_string(spells_new_entry.field143)); - update_values.push_back(columns[144] + " = " + std::to_string(spells_new_entry.new_icon)); - update_values.push_back(columns[145] + " = " + std::to_string(spells_new_entry.spellanim)); - update_values.push_back(columns[146] + " = " + std::to_string(spells_new_entry.uninterruptable)); - update_values.push_back(columns[147] + " = " + std::to_string(spells_new_entry.ResistDiff)); - update_values.push_back(columns[148] + " = " + std::to_string(spells_new_entry.dot_stacking_exempt)); - update_values.push_back(columns[149] + " = " + std::to_string(spells_new_entry.deleteable)); - update_values.push_back(columns[150] + " = " + std::to_string(spells_new_entry.RecourseLink)); - update_values.push_back(columns[151] + " = " + std::to_string(spells_new_entry.no_partial_resist)); - update_values.push_back(columns[152] + " = " + std::to_string(spells_new_entry.field152)); - update_values.push_back(columns[153] + " = " + std::to_string(spells_new_entry.field153)); - update_values.push_back(columns[154] + " = " + std::to_string(spells_new_entry.short_buff_box)); - update_values.push_back(columns[155] + " = " + std::to_string(spells_new_entry.descnum)); - update_values.push_back(columns[156] + " = " + std::to_string(spells_new_entry.typedescnum)); - update_values.push_back(columns[157] + " = " + std::to_string(spells_new_entry.effectdescnum)); - update_values.push_back(columns[158] + " = " + std::to_string(spells_new_entry.effectdescnum2)); - update_values.push_back(columns[159] + " = " + std::to_string(spells_new_entry.npc_no_los)); - update_values.push_back(columns[160] + " = " + std::to_string(spells_new_entry.field160)); - update_values.push_back(columns[161] + " = " + std::to_string(spells_new_entry.reflectable)); - update_values.push_back(columns[162] + " = " + std::to_string(spells_new_entry.bonushate)); - update_values.push_back(columns[163] + " = " + std::to_string(spells_new_entry.field163)); - update_values.push_back(columns[164] + " = " + std::to_string(spells_new_entry.field164)); - update_values.push_back(columns[165] + " = " + std::to_string(spells_new_entry.ldon_trap)); - update_values.push_back(columns[166] + " = " + std::to_string(spells_new_entry.EndurCost)); - update_values.push_back(columns[167] + " = " + std::to_string(spells_new_entry.EndurTimerIndex)); - update_values.push_back(columns[168] + " = " + std::to_string(spells_new_entry.IsDiscipline)); - update_values.push_back(columns[169] + " = " + std::to_string(spells_new_entry.field169)); - update_values.push_back(columns[170] + " = " + std::to_string(spells_new_entry.field170)); - update_values.push_back(columns[171] + " = " + std::to_string(spells_new_entry.field171)); - update_values.push_back(columns[172] + " = " + std::to_string(spells_new_entry.field172)); - update_values.push_back(columns[173] + " = " + std::to_string(spells_new_entry.HateAdded)); - update_values.push_back(columns[174] + " = " + std::to_string(spells_new_entry.EndurUpkeep)); - update_values.push_back(columns[175] + " = " + std::to_string(spells_new_entry.numhitstype)); - update_values.push_back(columns[176] + " = " + std::to_string(spells_new_entry.numhits)); - update_values.push_back(columns[177] + " = " + std::to_string(spells_new_entry.pvpresistbase)); - update_values.push_back(columns[178] + " = " + std::to_string(spells_new_entry.pvpresistcalc)); - update_values.push_back(columns[179] + " = " + std::to_string(spells_new_entry.pvpresistcap)); - update_values.push_back(columns[180] + " = " + std::to_string(spells_new_entry.spell_category)); - update_values.push_back(columns[181] + " = " + std::to_string(spells_new_entry.field181)); - update_values.push_back(columns[182] + " = " + std::to_string(spells_new_entry.field182)); - update_values.push_back(columns[183] + " = " + std::to_string(spells_new_entry.pcnpc_only_flag)); - update_values.push_back(columns[184] + " = " + std::to_string(spells_new_entry.cast_not_standing)); - update_values.push_back(columns[185] + " = " + std::to_string(spells_new_entry.can_mgb)); - update_values.push_back(columns[186] + " = " + std::to_string(spells_new_entry.nodispell)); - update_values.push_back(columns[187] + " = " + std::to_string(spells_new_entry.npc_category)); - update_values.push_back(columns[188] + " = " + std::to_string(spells_new_entry.npc_usefulness)); - update_values.push_back(columns[189] + " = " + std::to_string(spells_new_entry.MinResist)); - update_values.push_back(columns[190] + " = " + std::to_string(spells_new_entry.MaxResist)); - update_values.push_back(columns[191] + " = " + std::to_string(spells_new_entry.viral_targets)); - update_values.push_back(columns[192] + " = " + std::to_string(spells_new_entry.viral_timer)); - update_values.push_back(columns[193] + " = " + std::to_string(spells_new_entry.nimbuseffect)); - update_values.push_back(columns[194] + " = " + std::to_string(spells_new_entry.ConeStartAngle)); - update_values.push_back(columns[195] + " = " + std::to_string(spells_new_entry.ConeStopAngle)); - update_values.push_back(columns[196] + " = " + std::to_string(spells_new_entry.sneaking)); - update_values.push_back(columns[197] + " = " + std::to_string(spells_new_entry.not_extendable)); - update_values.push_back(columns[198] + " = " + std::to_string(spells_new_entry.field198)); - update_values.push_back(columns[199] + " = " + std::to_string(spells_new_entry.field199)); - update_values.push_back(columns[200] + " = " + std::to_string(spells_new_entry.suspendable)); - update_values.push_back(columns[201] + " = " + std::to_string(spells_new_entry.viral_range)); - update_values.push_back(columns[202] + " = " + std::to_string(spells_new_entry.songcap)); - update_values.push_back(columns[203] + " = " + std::to_string(spells_new_entry.field203)); - update_values.push_back(columns[204] + " = " + std::to_string(spells_new_entry.field204)); - update_values.push_back(columns[205] + " = " + std::to_string(spells_new_entry.no_block)); - update_values.push_back(columns[206] + " = " + std::to_string(spells_new_entry.field206)); - update_values.push_back(columns[207] + " = " + std::to_string(spells_new_entry.spellgroup)); - update_values.push_back(columns[208] + " = " + std::to_string(spells_new_entry.rank)); - update_values.push_back(columns[209] + " = " + std::to_string(spells_new_entry.field209)); - update_values.push_back(columns[210] + " = " + std::to_string(spells_new_entry.field210)); - update_values.push_back(columns[211] + " = " + std::to_string(spells_new_entry.CastRestriction)); - update_values.push_back(columns[212] + " = " + std::to_string(spells_new_entry.allowrest)); - update_values.push_back(columns[213] + " = " + std::to_string(spells_new_entry.InCombat)); - update_values.push_back(columns[214] + " = " + std::to_string(spells_new_entry.OutofCombat)); - update_values.push_back(columns[215] + " = " + std::to_string(spells_new_entry.field215)); - update_values.push_back(columns[216] + " = " + std::to_string(spells_new_entry.field216)); - update_values.push_back(columns[217] + " = " + std::to_string(spells_new_entry.field217)); - update_values.push_back(columns[218] + " = " + std::to_string(spells_new_entry.aemaxtargets)); - update_values.push_back(columns[219] + " = " + std::to_string(spells_new_entry.maxtargets)); - update_values.push_back(columns[220] + " = " + std::to_string(spells_new_entry.field220)); - update_values.push_back(columns[221] + " = " + std::to_string(spells_new_entry.field221)); - update_values.push_back(columns[222] + " = " + std::to_string(spells_new_entry.field222)); - update_values.push_back(columns[223] + " = " + std::to_string(spells_new_entry.field223)); - update_values.push_back(columns[224] + " = " + std::to_string(spells_new_entry.persistdeath)); - update_values.push_back(columns[225] + " = " + std::to_string(spells_new_entry.field225)); - update_values.push_back(columns[226] + " = " + std::to_string(spells_new_entry.field226)); - update_values.push_back(columns[227] + " = " + std::to_string(spells_new_entry.min_dist)); - update_values.push_back(columns[228] + " = " + std::to_string(spells_new_entry.min_dist_mod)); - update_values.push_back(columns[229] + " = " + std::to_string(spells_new_entry.max_dist)); - update_values.push_back(columns[230] + " = " + std::to_string(spells_new_entry.max_dist_mod)); - update_values.push_back(columns[231] + " = " + std::to_string(spells_new_entry.min_range)); - update_values.push_back(columns[232] + " = " + std::to_string(spells_new_entry.field232)); - update_values.push_back(columns[233] + " = " + std::to_string(spells_new_entry.field233)); - update_values.push_back(columns[234] + " = " + std::to_string(spells_new_entry.field234)); - update_values.push_back(columns[235] + " = " + std::to_string(spells_new_entry.field235)); - update_values.push_back(columns[236] + " = " + std::to_string(spells_new_entry.field236)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - spells_new_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static SpellsNew InsertOne( - SpellsNew spells_new_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); - insert_values.push_back(std::to_string(spells_new_entry.range)); - insert_values.push_back(std::to_string(spells_new_entry.aoerange)); - insert_values.push_back(std::to_string(spells_new_entry.pushback)); - insert_values.push_back(std::to_string(spells_new_entry.pushup)); - insert_values.push_back(std::to_string(spells_new_entry.cast_time)); - insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); - insert_values.push_back(std::to_string(spells_new_entry.recast_time)); - insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); - insert_values.push_back(std::to_string(spells_new_entry.buffduration)); - insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); - insert_values.push_back(std::to_string(spells_new_entry.mana)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); - insert_values.push_back(std::to_string(spells_new_entry.max1)); - insert_values.push_back(std::to_string(spells_new_entry.max2)); - insert_values.push_back(std::to_string(spells_new_entry.max3)); - insert_values.push_back(std::to_string(spells_new_entry.max4)); - insert_values.push_back(std::to_string(spells_new_entry.max5)); - insert_values.push_back(std::to_string(spells_new_entry.max6)); - insert_values.push_back(std::to_string(spells_new_entry.max7)); - insert_values.push_back(std::to_string(spells_new_entry.max8)); - insert_values.push_back(std::to_string(spells_new_entry.max9)); - insert_values.push_back(std::to_string(spells_new_entry.max10)); - insert_values.push_back(std::to_string(spells_new_entry.max11)); - insert_values.push_back(std::to_string(spells_new_entry.max12)); - insert_values.push_back(std::to_string(spells_new_entry.icon)); - insert_values.push_back(std::to_string(spells_new_entry.memicon)); - insert_values.push_back(std::to_string(spells_new_entry.components1)); - insert_values.push_back(std::to_string(spells_new_entry.components2)); - insert_values.push_back(std::to_string(spells_new_entry.components3)); - insert_values.push_back(std::to_string(spells_new_entry.components4)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); - insert_values.push_back(std::to_string(spells_new_entry.formula1)); - insert_values.push_back(std::to_string(spells_new_entry.formula2)); - insert_values.push_back(std::to_string(spells_new_entry.formula3)); - insert_values.push_back(std::to_string(spells_new_entry.formula4)); - insert_values.push_back(std::to_string(spells_new_entry.formula5)); - insert_values.push_back(std::to_string(spells_new_entry.formula6)); - insert_values.push_back(std::to_string(spells_new_entry.formula7)); - insert_values.push_back(std::to_string(spells_new_entry.formula8)); - insert_values.push_back(std::to_string(spells_new_entry.formula9)); - insert_values.push_back(std::to_string(spells_new_entry.formula10)); - insert_values.push_back(std::to_string(spells_new_entry.formula11)); - insert_values.push_back(std::to_string(spells_new_entry.formula12)); - insert_values.push_back(std::to_string(spells_new_entry.LightType)); - insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); - insert_values.push_back(std::to_string(spells_new_entry.Activated)); - insert_values.push_back(std::to_string(spells_new_entry.resisttype)); - insert_values.push_back(std::to_string(spells_new_entry.effectid1)); - insert_values.push_back(std::to_string(spells_new_entry.effectid2)); - insert_values.push_back(std::to_string(spells_new_entry.effectid3)); - insert_values.push_back(std::to_string(spells_new_entry.effectid4)); - insert_values.push_back(std::to_string(spells_new_entry.effectid5)); - insert_values.push_back(std::to_string(spells_new_entry.effectid6)); - insert_values.push_back(std::to_string(spells_new_entry.effectid7)); - insert_values.push_back(std::to_string(spells_new_entry.effectid8)); - insert_values.push_back(std::to_string(spells_new_entry.effectid9)); - insert_values.push_back(std::to_string(spells_new_entry.effectid10)); - insert_values.push_back(std::to_string(spells_new_entry.effectid11)); - insert_values.push_back(std::to_string(spells_new_entry.effectid12)); - insert_values.push_back(std::to_string(spells_new_entry.targettype)); - insert_values.push_back(std::to_string(spells_new_entry.basediff)); - insert_values.push_back(std::to_string(spells_new_entry.skill)); - insert_values.push_back(std::to_string(spells_new_entry.zonetype)); - insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); - insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); - insert_values.push_back(std::to_string(spells_new_entry.classes1)); - insert_values.push_back(std::to_string(spells_new_entry.classes2)); - insert_values.push_back(std::to_string(spells_new_entry.classes3)); - insert_values.push_back(std::to_string(spells_new_entry.classes4)); - insert_values.push_back(std::to_string(spells_new_entry.classes5)); - insert_values.push_back(std::to_string(spells_new_entry.classes6)); - insert_values.push_back(std::to_string(spells_new_entry.classes7)); - insert_values.push_back(std::to_string(spells_new_entry.classes8)); - insert_values.push_back(std::to_string(spells_new_entry.classes9)); - insert_values.push_back(std::to_string(spells_new_entry.classes10)); - insert_values.push_back(std::to_string(spells_new_entry.classes11)); - insert_values.push_back(std::to_string(spells_new_entry.classes12)); - insert_values.push_back(std::to_string(spells_new_entry.classes13)); - insert_values.push_back(std::to_string(spells_new_entry.classes14)); - insert_values.push_back(std::to_string(spells_new_entry.classes15)); - insert_values.push_back(std::to_string(spells_new_entry.classes16)); - insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); - insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); - insert_values.push_back(std::to_string(spells_new_entry.TravelType)); - insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); - insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); - insert_values.push_back(std::to_string(spells_new_entry.deities0)); - insert_values.push_back(std::to_string(spells_new_entry.deities1)); - insert_values.push_back(std::to_string(spells_new_entry.deities2)); - insert_values.push_back(std::to_string(spells_new_entry.deities3)); - insert_values.push_back(std::to_string(spells_new_entry.deities4)); - insert_values.push_back(std::to_string(spells_new_entry.deities5)); - insert_values.push_back(std::to_string(spells_new_entry.deities6)); - insert_values.push_back(std::to_string(spells_new_entry.deities7)); - insert_values.push_back(std::to_string(spells_new_entry.deities8)); - insert_values.push_back(std::to_string(spells_new_entry.deities9)); - insert_values.push_back(std::to_string(spells_new_entry.deities10)); - insert_values.push_back(std::to_string(spells_new_entry.deities11)); - insert_values.push_back(std::to_string(spells_new_entry.deities12)); - insert_values.push_back(std::to_string(spells_new_entry.deities13)); - insert_values.push_back(std::to_string(spells_new_entry.deities14)); - insert_values.push_back(std::to_string(spells_new_entry.deities15)); - insert_values.push_back(std::to_string(spells_new_entry.deities16)); - insert_values.push_back(std::to_string(spells_new_entry.field142)); - insert_values.push_back(std::to_string(spells_new_entry.field143)); - insert_values.push_back(std::to_string(spells_new_entry.new_icon)); - insert_values.push_back(std::to_string(spells_new_entry.spellanim)); - insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); - insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); - insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); - insert_values.push_back(std::to_string(spells_new_entry.deleteable)); - insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); - insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); - insert_values.push_back(std::to_string(spells_new_entry.field152)); - insert_values.push_back(std::to_string(spells_new_entry.field153)); - insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); - insert_values.push_back(std::to_string(spells_new_entry.descnum)); - insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); - insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); - insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); - insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); - insert_values.push_back(std::to_string(spells_new_entry.field160)); - insert_values.push_back(std::to_string(spells_new_entry.reflectable)); - insert_values.push_back(std::to_string(spells_new_entry.bonushate)); - insert_values.push_back(std::to_string(spells_new_entry.field163)); - insert_values.push_back(std::to_string(spells_new_entry.field164)); - insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); - insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); - insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); - insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); - insert_values.push_back(std::to_string(spells_new_entry.field169)); - insert_values.push_back(std::to_string(spells_new_entry.field170)); - insert_values.push_back(std::to_string(spells_new_entry.field171)); - insert_values.push_back(std::to_string(spells_new_entry.field172)); - insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); - insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); - insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); - insert_values.push_back(std::to_string(spells_new_entry.numhits)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); - insert_values.push_back(std::to_string(spells_new_entry.spell_category)); - insert_values.push_back(std::to_string(spells_new_entry.field181)); - insert_values.push_back(std::to_string(spells_new_entry.field182)); - insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); - insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); - insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); - insert_values.push_back(std::to_string(spells_new_entry.nodispell)); - insert_values.push_back(std::to_string(spells_new_entry.npc_category)); - insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); - insert_values.push_back(std::to_string(spells_new_entry.MinResist)); - insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); - insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); - insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); - insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); - insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); - insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); - insert_values.push_back(std::to_string(spells_new_entry.sneaking)); - insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); - insert_values.push_back(std::to_string(spells_new_entry.field198)); - insert_values.push_back(std::to_string(spells_new_entry.field199)); - insert_values.push_back(std::to_string(spells_new_entry.suspendable)); - insert_values.push_back(std::to_string(spells_new_entry.viral_range)); - insert_values.push_back(std::to_string(spells_new_entry.songcap)); - insert_values.push_back(std::to_string(spells_new_entry.field203)); - insert_values.push_back(std::to_string(spells_new_entry.field204)); - insert_values.push_back(std::to_string(spells_new_entry.no_block)); - insert_values.push_back(std::to_string(spells_new_entry.field206)); - insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); - insert_values.push_back(std::to_string(spells_new_entry.rank)); - insert_values.push_back(std::to_string(spells_new_entry.field209)); - insert_values.push_back(std::to_string(spells_new_entry.field210)); - insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); - insert_values.push_back(std::to_string(spells_new_entry.allowrest)); - insert_values.push_back(std::to_string(spells_new_entry.InCombat)); - insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); - insert_values.push_back(std::to_string(spells_new_entry.field215)); - insert_values.push_back(std::to_string(spells_new_entry.field216)); - insert_values.push_back(std::to_string(spells_new_entry.field217)); - insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); - insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); - insert_values.push_back(std::to_string(spells_new_entry.field220)); - insert_values.push_back(std::to_string(spells_new_entry.field221)); - insert_values.push_back(std::to_string(spells_new_entry.field222)); - insert_values.push_back(std::to_string(spells_new_entry.field223)); - insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); - insert_values.push_back(std::to_string(spells_new_entry.field225)); - insert_values.push_back(std::to_string(spells_new_entry.field226)); - insert_values.push_back(std::to_string(spells_new_entry.min_dist)); - insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); - insert_values.push_back(std::to_string(spells_new_entry.max_dist)); - insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); - insert_values.push_back(std::to_string(spells_new_entry.min_range)); - insert_values.push_back(std::to_string(spells_new_entry.field232)); - insert_values.push_back(std::to_string(spells_new_entry.field233)); - insert_values.push_back(std::to_string(spells_new_entry.field234)); - insert_values.push_back(std::to_string(spells_new_entry.field235)); - insert_values.push_back(std::to_string(spells_new_entry.field236)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - spells_new_entry.id = results.LastInsertedID(); - return spells_new_entry; - } - - spells_new_entry = SpellsNewRepository::NewEntity(); - - return spells_new_entry; - } - - static int InsertMany( - std::vector spells_new_entries - ) - { - std::vector insert_chunks; - - for (auto &spells_new_entry: spells_new_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.you_cast) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.other_casts) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_you) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.cast_on_other) + "'"); - insert_values.push_back("'" + EscapeString(spells_new_entry.spell_fades) + "'"); - insert_values.push_back(std::to_string(spells_new_entry.range)); - insert_values.push_back(std::to_string(spells_new_entry.aoerange)); - insert_values.push_back(std::to_string(spells_new_entry.pushback)); - insert_values.push_back(std::to_string(spells_new_entry.pushup)); - insert_values.push_back(std::to_string(spells_new_entry.cast_time)); - insert_values.push_back(std::to_string(spells_new_entry.recovery_time)); - insert_values.push_back(std::to_string(spells_new_entry.recast_time)); - insert_values.push_back(std::to_string(spells_new_entry.buffdurationformula)); - insert_values.push_back(std::to_string(spells_new_entry.buffduration)); - insert_values.push_back(std::to_string(spells_new_entry.AEDuration)); - insert_values.push_back(std::to_string(spells_new_entry.mana)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value1)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value2)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value3)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value4)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value5)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value6)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value7)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value8)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value9)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value10)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value11)); - insert_values.push_back(std::to_string(spells_new_entry.effect_base_value12)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value1)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value2)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value3)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value4)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value5)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value6)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value7)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value8)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value9)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value10)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value11)); - insert_values.push_back(std::to_string(spells_new_entry.effect_limit_value12)); - insert_values.push_back(std::to_string(spells_new_entry.max1)); - insert_values.push_back(std::to_string(spells_new_entry.max2)); - insert_values.push_back(std::to_string(spells_new_entry.max3)); - insert_values.push_back(std::to_string(spells_new_entry.max4)); - insert_values.push_back(std::to_string(spells_new_entry.max5)); - insert_values.push_back(std::to_string(spells_new_entry.max6)); - insert_values.push_back(std::to_string(spells_new_entry.max7)); - insert_values.push_back(std::to_string(spells_new_entry.max8)); - insert_values.push_back(std::to_string(spells_new_entry.max9)); - insert_values.push_back(std::to_string(spells_new_entry.max10)); - insert_values.push_back(std::to_string(spells_new_entry.max11)); - insert_values.push_back(std::to_string(spells_new_entry.max12)); - insert_values.push_back(std::to_string(spells_new_entry.icon)); - insert_values.push_back(std::to_string(spells_new_entry.memicon)); - insert_values.push_back(std::to_string(spells_new_entry.components1)); - insert_values.push_back(std::to_string(spells_new_entry.components2)); - insert_values.push_back(std::to_string(spells_new_entry.components3)); - insert_values.push_back(std::to_string(spells_new_entry.components4)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts1)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts2)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts3)); - insert_values.push_back(std::to_string(spells_new_entry.component_counts4)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent1)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent2)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent3)); - insert_values.push_back(std::to_string(spells_new_entry.NoexpendReagent4)); - insert_values.push_back(std::to_string(spells_new_entry.formula1)); - insert_values.push_back(std::to_string(spells_new_entry.formula2)); - insert_values.push_back(std::to_string(spells_new_entry.formula3)); - insert_values.push_back(std::to_string(spells_new_entry.formula4)); - insert_values.push_back(std::to_string(spells_new_entry.formula5)); - insert_values.push_back(std::to_string(spells_new_entry.formula6)); - insert_values.push_back(std::to_string(spells_new_entry.formula7)); - insert_values.push_back(std::to_string(spells_new_entry.formula8)); - insert_values.push_back(std::to_string(spells_new_entry.formula9)); - insert_values.push_back(std::to_string(spells_new_entry.formula10)); - insert_values.push_back(std::to_string(spells_new_entry.formula11)); - insert_values.push_back(std::to_string(spells_new_entry.formula12)); - insert_values.push_back(std::to_string(spells_new_entry.LightType)); - insert_values.push_back(std::to_string(spells_new_entry.goodEffect)); - insert_values.push_back(std::to_string(spells_new_entry.Activated)); - insert_values.push_back(std::to_string(spells_new_entry.resisttype)); - insert_values.push_back(std::to_string(spells_new_entry.effectid1)); - insert_values.push_back(std::to_string(spells_new_entry.effectid2)); - insert_values.push_back(std::to_string(spells_new_entry.effectid3)); - insert_values.push_back(std::to_string(spells_new_entry.effectid4)); - insert_values.push_back(std::to_string(spells_new_entry.effectid5)); - insert_values.push_back(std::to_string(spells_new_entry.effectid6)); - insert_values.push_back(std::to_string(spells_new_entry.effectid7)); - insert_values.push_back(std::to_string(spells_new_entry.effectid8)); - insert_values.push_back(std::to_string(spells_new_entry.effectid9)); - insert_values.push_back(std::to_string(spells_new_entry.effectid10)); - insert_values.push_back(std::to_string(spells_new_entry.effectid11)); - insert_values.push_back(std::to_string(spells_new_entry.effectid12)); - insert_values.push_back(std::to_string(spells_new_entry.targettype)); - insert_values.push_back(std::to_string(spells_new_entry.basediff)); - insert_values.push_back(std::to_string(spells_new_entry.skill)); - insert_values.push_back(std::to_string(spells_new_entry.zonetype)); - insert_values.push_back(std::to_string(spells_new_entry.EnvironmentType)); - insert_values.push_back(std::to_string(spells_new_entry.TimeOfDay)); - insert_values.push_back(std::to_string(spells_new_entry.classes1)); - insert_values.push_back(std::to_string(spells_new_entry.classes2)); - insert_values.push_back(std::to_string(spells_new_entry.classes3)); - insert_values.push_back(std::to_string(spells_new_entry.classes4)); - insert_values.push_back(std::to_string(spells_new_entry.classes5)); - insert_values.push_back(std::to_string(spells_new_entry.classes6)); - insert_values.push_back(std::to_string(spells_new_entry.classes7)); - insert_values.push_back(std::to_string(spells_new_entry.classes8)); - insert_values.push_back(std::to_string(spells_new_entry.classes9)); - insert_values.push_back(std::to_string(spells_new_entry.classes10)); - insert_values.push_back(std::to_string(spells_new_entry.classes11)); - insert_values.push_back(std::to_string(spells_new_entry.classes12)); - insert_values.push_back(std::to_string(spells_new_entry.classes13)); - insert_values.push_back(std::to_string(spells_new_entry.classes14)); - insert_values.push_back(std::to_string(spells_new_entry.classes15)); - insert_values.push_back(std::to_string(spells_new_entry.classes16)); - insert_values.push_back(std::to_string(spells_new_entry.CastingAnim)); - insert_values.push_back(std::to_string(spells_new_entry.TargetAnim)); - insert_values.push_back(std::to_string(spells_new_entry.TravelType)); - insert_values.push_back(std::to_string(spells_new_entry.SpellAffectIndex)); - insert_values.push_back(std::to_string(spells_new_entry.disallow_sit)); - insert_values.push_back(std::to_string(spells_new_entry.deities0)); - insert_values.push_back(std::to_string(spells_new_entry.deities1)); - insert_values.push_back(std::to_string(spells_new_entry.deities2)); - insert_values.push_back(std::to_string(spells_new_entry.deities3)); - insert_values.push_back(std::to_string(spells_new_entry.deities4)); - insert_values.push_back(std::to_string(spells_new_entry.deities5)); - insert_values.push_back(std::to_string(spells_new_entry.deities6)); - insert_values.push_back(std::to_string(spells_new_entry.deities7)); - insert_values.push_back(std::to_string(spells_new_entry.deities8)); - insert_values.push_back(std::to_string(spells_new_entry.deities9)); - insert_values.push_back(std::to_string(spells_new_entry.deities10)); - insert_values.push_back(std::to_string(spells_new_entry.deities11)); - insert_values.push_back(std::to_string(spells_new_entry.deities12)); - insert_values.push_back(std::to_string(spells_new_entry.deities13)); - insert_values.push_back(std::to_string(spells_new_entry.deities14)); - insert_values.push_back(std::to_string(spells_new_entry.deities15)); - insert_values.push_back(std::to_string(spells_new_entry.deities16)); - insert_values.push_back(std::to_string(spells_new_entry.field142)); - insert_values.push_back(std::to_string(spells_new_entry.field143)); - insert_values.push_back(std::to_string(spells_new_entry.new_icon)); - insert_values.push_back(std::to_string(spells_new_entry.spellanim)); - insert_values.push_back(std::to_string(spells_new_entry.uninterruptable)); - insert_values.push_back(std::to_string(spells_new_entry.ResistDiff)); - insert_values.push_back(std::to_string(spells_new_entry.dot_stacking_exempt)); - insert_values.push_back(std::to_string(spells_new_entry.deleteable)); - insert_values.push_back(std::to_string(spells_new_entry.RecourseLink)); - insert_values.push_back(std::to_string(spells_new_entry.no_partial_resist)); - insert_values.push_back(std::to_string(spells_new_entry.field152)); - insert_values.push_back(std::to_string(spells_new_entry.field153)); - insert_values.push_back(std::to_string(spells_new_entry.short_buff_box)); - insert_values.push_back(std::to_string(spells_new_entry.descnum)); - insert_values.push_back(std::to_string(spells_new_entry.typedescnum)); - insert_values.push_back(std::to_string(spells_new_entry.effectdescnum)); - insert_values.push_back(std::to_string(spells_new_entry.effectdescnum2)); - insert_values.push_back(std::to_string(spells_new_entry.npc_no_los)); - insert_values.push_back(std::to_string(spells_new_entry.field160)); - insert_values.push_back(std::to_string(spells_new_entry.reflectable)); - insert_values.push_back(std::to_string(spells_new_entry.bonushate)); - insert_values.push_back(std::to_string(spells_new_entry.field163)); - insert_values.push_back(std::to_string(spells_new_entry.field164)); - insert_values.push_back(std::to_string(spells_new_entry.ldon_trap)); - insert_values.push_back(std::to_string(spells_new_entry.EndurCost)); - insert_values.push_back(std::to_string(spells_new_entry.EndurTimerIndex)); - insert_values.push_back(std::to_string(spells_new_entry.IsDiscipline)); - insert_values.push_back(std::to_string(spells_new_entry.field169)); - insert_values.push_back(std::to_string(spells_new_entry.field170)); - insert_values.push_back(std::to_string(spells_new_entry.field171)); - insert_values.push_back(std::to_string(spells_new_entry.field172)); - insert_values.push_back(std::to_string(spells_new_entry.HateAdded)); - insert_values.push_back(std::to_string(spells_new_entry.EndurUpkeep)); - insert_values.push_back(std::to_string(spells_new_entry.numhitstype)); - insert_values.push_back(std::to_string(spells_new_entry.numhits)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistbase)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistcalc)); - insert_values.push_back(std::to_string(spells_new_entry.pvpresistcap)); - insert_values.push_back(std::to_string(spells_new_entry.spell_category)); - insert_values.push_back(std::to_string(spells_new_entry.field181)); - insert_values.push_back(std::to_string(spells_new_entry.field182)); - insert_values.push_back(std::to_string(spells_new_entry.pcnpc_only_flag)); - insert_values.push_back(std::to_string(spells_new_entry.cast_not_standing)); - insert_values.push_back(std::to_string(spells_new_entry.can_mgb)); - insert_values.push_back(std::to_string(spells_new_entry.nodispell)); - insert_values.push_back(std::to_string(spells_new_entry.npc_category)); - insert_values.push_back(std::to_string(spells_new_entry.npc_usefulness)); - insert_values.push_back(std::to_string(spells_new_entry.MinResist)); - insert_values.push_back(std::to_string(spells_new_entry.MaxResist)); - insert_values.push_back(std::to_string(spells_new_entry.viral_targets)); - insert_values.push_back(std::to_string(spells_new_entry.viral_timer)); - insert_values.push_back(std::to_string(spells_new_entry.nimbuseffect)); - insert_values.push_back(std::to_string(spells_new_entry.ConeStartAngle)); - insert_values.push_back(std::to_string(spells_new_entry.ConeStopAngle)); - insert_values.push_back(std::to_string(spells_new_entry.sneaking)); - insert_values.push_back(std::to_string(spells_new_entry.not_extendable)); - insert_values.push_back(std::to_string(spells_new_entry.field198)); - insert_values.push_back(std::to_string(spells_new_entry.field199)); - insert_values.push_back(std::to_string(spells_new_entry.suspendable)); - insert_values.push_back(std::to_string(spells_new_entry.viral_range)); - insert_values.push_back(std::to_string(spells_new_entry.songcap)); - insert_values.push_back(std::to_string(spells_new_entry.field203)); - insert_values.push_back(std::to_string(spells_new_entry.field204)); - insert_values.push_back(std::to_string(spells_new_entry.no_block)); - insert_values.push_back(std::to_string(spells_new_entry.field206)); - insert_values.push_back(std::to_string(spells_new_entry.spellgroup)); - insert_values.push_back(std::to_string(spells_new_entry.rank)); - insert_values.push_back(std::to_string(spells_new_entry.field209)); - insert_values.push_back(std::to_string(spells_new_entry.field210)); - insert_values.push_back(std::to_string(spells_new_entry.CastRestriction)); - insert_values.push_back(std::to_string(spells_new_entry.allowrest)); - insert_values.push_back(std::to_string(spells_new_entry.InCombat)); - insert_values.push_back(std::to_string(spells_new_entry.OutofCombat)); - insert_values.push_back(std::to_string(spells_new_entry.field215)); - insert_values.push_back(std::to_string(spells_new_entry.field216)); - insert_values.push_back(std::to_string(spells_new_entry.field217)); - insert_values.push_back(std::to_string(spells_new_entry.aemaxtargets)); - insert_values.push_back(std::to_string(spells_new_entry.maxtargets)); - insert_values.push_back(std::to_string(spells_new_entry.field220)); - insert_values.push_back(std::to_string(spells_new_entry.field221)); - insert_values.push_back(std::to_string(spells_new_entry.field222)); - insert_values.push_back(std::to_string(spells_new_entry.field223)); - insert_values.push_back(std::to_string(spells_new_entry.persistdeath)); - insert_values.push_back(std::to_string(spells_new_entry.field225)); - insert_values.push_back(std::to_string(spells_new_entry.field226)); - insert_values.push_back(std::to_string(spells_new_entry.min_dist)); - insert_values.push_back(std::to_string(spells_new_entry.min_dist_mod)); - insert_values.push_back(std::to_string(spells_new_entry.max_dist)); - insert_values.push_back(std::to_string(spells_new_entry.max_dist_mod)); - insert_values.push_back(std::to_string(spells_new_entry.min_range)); - insert_values.push_back(std::to_string(spells_new_entry.field232)); - insert_values.push_back(std::to_string(spells_new_entry.field233)); - insert_values.push_back(std::to_string(spells_new_entry.field234)); - insert_values.push_back(std::to_string(spells_new_entry.field235)); - insert_values.push_back(std::to_string(spells_new_entry.field236)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellsNew entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.player_1 = row[2] ? row[2] : ""; - entry.teleport_zone = row[3] ? row[3] : ""; - entry.you_cast = row[4] ? row[4] : ""; - entry.other_casts = row[5] ? row[5] : ""; - entry.cast_on_you = row[6] ? row[6] : ""; - entry.cast_on_other = row[7] ? row[7] : ""; - entry.spell_fades = row[8] ? row[8] : ""; - entry.range = atoi(row[9]); - entry.aoerange = atoi(row[10]); - entry.pushback = atoi(row[11]); - entry.pushup = atoi(row[12]); - entry.cast_time = atoi(row[13]); - entry.recovery_time = atoi(row[14]); - entry.recast_time = atoi(row[15]); - entry.buffdurationformula = atoi(row[16]); - entry.buffduration = atoi(row[17]); - entry.AEDuration = atoi(row[18]); - entry.mana = atoi(row[19]); - entry.effect_base_value1 = atoi(row[20]); - entry.effect_base_value2 = atoi(row[21]); - entry.effect_base_value3 = atoi(row[22]); - entry.effect_base_value4 = atoi(row[23]); - entry.effect_base_value5 = atoi(row[24]); - entry.effect_base_value6 = atoi(row[25]); - entry.effect_base_value7 = atoi(row[26]); - entry.effect_base_value8 = atoi(row[27]); - entry.effect_base_value9 = atoi(row[28]); - entry.effect_base_value10 = atoi(row[29]); - entry.effect_base_value11 = atoi(row[30]); - entry.effect_base_value12 = atoi(row[31]); - entry.effect_limit_value1 = atoi(row[32]); - entry.effect_limit_value2 = atoi(row[33]); - entry.effect_limit_value3 = atoi(row[34]); - entry.effect_limit_value4 = atoi(row[35]); - entry.effect_limit_value5 = atoi(row[36]); - entry.effect_limit_value6 = atoi(row[37]); - entry.effect_limit_value7 = atoi(row[38]); - entry.effect_limit_value8 = atoi(row[39]); - entry.effect_limit_value9 = atoi(row[40]); - entry.effect_limit_value10 = atoi(row[41]); - entry.effect_limit_value11 = atoi(row[42]); - entry.effect_limit_value12 = atoi(row[43]); - entry.max1 = atoi(row[44]); - entry.max2 = atoi(row[45]); - entry.max3 = atoi(row[46]); - entry.max4 = atoi(row[47]); - entry.max5 = atoi(row[48]); - entry.max6 = atoi(row[49]); - entry.max7 = atoi(row[50]); - entry.max8 = atoi(row[51]); - entry.max9 = atoi(row[52]); - entry.max10 = atoi(row[53]); - entry.max11 = atoi(row[54]); - entry.max12 = atoi(row[55]); - entry.icon = atoi(row[56]); - entry.memicon = atoi(row[57]); - entry.components1 = atoi(row[58]); - entry.components2 = atoi(row[59]); - entry.components3 = atoi(row[60]); - entry.components4 = atoi(row[61]); - entry.component_counts1 = atoi(row[62]); - entry.component_counts2 = atoi(row[63]); - entry.component_counts3 = atoi(row[64]); - entry.component_counts4 = atoi(row[65]); - entry.NoexpendReagent1 = atoi(row[66]); - entry.NoexpendReagent2 = atoi(row[67]); - entry.NoexpendReagent3 = atoi(row[68]); - entry.NoexpendReagent4 = atoi(row[69]); - entry.formula1 = atoi(row[70]); - entry.formula2 = atoi(row[71]); - entry.formula3 = atoi(row[72]); - entry.formula4 = atoi(row[73]); - entry.formula5 = atoi(row[74]); - entry.formula6 = atoi(row[75]); - entry.formula7 = atoi(row[76]); - entry.formula8 = atoi(row[77]); - entry.formula9 = atoi(row[78]); - entry.formula10 = atoi(row[79]); - entry.formula11 = atoi(row[80]); - entry.formula12 = atoi(row[81]); - entry.LightType = atoi(row[82]); - entry.goodEffect = atoi(row[83]); - entry.Activated = atoi(row[84]); - entry.resisttype = atoi(row[85]); - entry.effectid1 = atoi(row[86]); - entry.effectid2 = atoi(row[87]); - entry.effectid3 = atoi(row[88]); - entry.effectid4 = atoi(row[89]); - entry.effectid5 = atoi(row[90]); - entry.effectid6 = atoi(row[91]); - entry.effectid7 = atoi(row[92]); - entry.effectid8 = atoi(row[93]); - entry.effectid9 = atoi(row[94]); - entry.effectid10 = atoi(row[95]); - entry.effectid11 = atoi(row[96]); - entry.effectid12 = atoi(row[97]); - entry.targettype = atoi(row[98]); - entry.basediff = atoi(row[99]); - entry.skill = atoi(row[100]); - entry.zonetype = atoi(row[101]); - entry.EnvironmentType = atoi(row[102]); - entry.TimeOfDay = atoi(row[103]); - entry.classes1 = atoi(row[104]); - entry.classes2 = atoi(row[105]); - entry.classes3 = atoi(row[106]); - entry.classes4 = atoi(row[107]); - entry.classes5 = atoi(row[108]); - entry.classes6 = atoi(row[109]); - entry.classes7 = atoi(row[110]); - entry.classes8 = atoi(row[111]); - entry.classes9 = atoi(row[112]); - entry.classes10 = atoi(row[113]); - entry.classes11 = atoi(row[114]); - entry.classes12 = atoi(row[115]); - entry.classes13 = atoi(row[116]); - entry.classes14 = atoi(row[117]); - entry.classes15 = atoi(row[118]); - entry.classes16 = atoi(row[119]); - entry.CastingAnim = atoi(row[120]); - entry.TargetAnim = atoi(row[121]); - entry.TravelType = atoi(row[122]); - entry.SpellAffectIndex = atoi(row[123]); - entry.disallow_sit = atoi(row[124]); - entry.deities0 = atoi(row[125]); - entry.deities1 = atoi(row[126]); - entry.deities2 = atoi(row[127]); - entry.deities3 = atoi(row[128]); - entry.deities4 = atoi(row[129]); - entry.deities5 = atoi(row[130]); - entry.deities6 = atoi(row[131]); - entry.deities7 = atoi(row[132]); - entry.deities8 = atoi(row[133]); - entry.deities9 = atoi(row[134]); - entry.deities10 = atoi(row[135]); - entry.deities11 = atoi(row[136]); - entry.deities12 = atoi(row[137]); - entry.deities13 = atoi(row[138]); - entry.deities14 = atoi(row[139]); - entry.deities15 = atoi(row[140]); - entry.deities16 = atoi(row[141]); - entry.field142 = atoi(row[142]); - entry.field143 = atoi(row[143]); - entry.new_icon = atoi(row[144]); - entry.spellanim = atoi(row[145]); - entry.uninterruptable = atoi(row[146]); - entry.ResistDiff = atoi(row[147]); - entry.dot_stacking_exempt = atoi(row[148]); - entry.deleteable = atoi(row[149]); - entry.RecourseLink = atoi(row[150]); - entry.no_partial_resist = atoi(row[151]); - entry.field152 = atoi(row[152]); - entry.field153 = atoi(row[153]); - entry.short_buff_box = atoi(row[154]); - entry.descnum = atoi(row[155]); - entry.typedescnum = atoi(row[156]); - entry.effectdescnum = atoi(row[157]); - entry.effectdescnum2 = atoi(row[158]); - entry.npc_no_los = atoi(row[159]); - entry.field160 = atoi(row[160]); - entry.reflectable = atoi(row[161]); - entry.bonushate = atoi(row[162]); - entry.field163 = atoi(row[163]); - entry.field164 = atoi(row[164]); - entry.ldon_trap = atoi(row[165]); - entry.EndurCost = atoi(row[166]); - entry.EndurTimerIndex = atoi(row[167]); - entry.IsDiscipline = atoi(row[168]); - entry.field169 = atoi(row[169]); - entry.field170 = atoi(row[170]); - entry.field171 = atoi(row[171]); - entry.field172 = atoi(row[172]); - entry.HateAdded = atoi(row[173]); - entry.EndurUpkeep = atoi(row[174]); - entry.numhitstype = atoi(row[175]); - entry.numhits = atoi(row[176]); - entry.pvpresistbase = atoi(row[177]); - entry.pvpresistcalc = atoi(row[178]); - entry.pvpresistcap = atoi(row[179]); - entry.spell_category = atoi(row[180]); - entry.field181 = atoi(row[181]); - entry.field182 = atoi(row[182]); - entry.pcnpc_only_flag = atoi(row[183]); - entry.cast_not_standing = atoi(row[184]); - entry.can_mgb = atoi(row[185]); - entry.nodispell = atoi(row[186]); - entry.npc_category = atoi(row[187]); - entry.npc_usefulness = atoi(row[188]); - entry.MinResist = atoi(row[189]); - entry.MaxResist = atoi(row[190]); - entry.viral_targets = atoi(row[191]); - entry.viral_timer = atoi(row[192]); - entry.nimbuseffect = atoi(row[193]); - entry.ConeStartAngle = atoi(row[194]); - entry.ConeStopAngle = atoi(row[195]); - entry.sneaking = atoi(row[196]); - entry.not_extendable = atoi(row[197]); - entry.field198 = atoi(row[198]); - entry.field199 = atoi(row[199]); - entry.suspendable = atoi(row[200]); - entry.viral_range = atoi(row[201]); - entry.songcap = atoi(row[202]); - entry.field203 = atoi(row[203]); - entry.field204 = atoi(row[204]); - entry.no_block = atoi(row[205]); - entry.field206 = atoi(row[206]); - entry.spellgroup = atoi(row[207]); - entry.rank = atoi(row[208]); - entry.field209 = atoi(row[209]); - entry.field210 = atoi(row[210]); - entry.CastRestriction = atoi(row[211]); - entry.allowrest = atoi(row[212]); - entry.InCombat = atoi(row[213]); - entry.OutofCombat = atoi(row[214]); - entry.field215 = atoi(row[215]); - entry.field216 = atoi(row[216]); - entry.field217 = atoi(row[217]); - entry.aemaxtargets = atoi(row[218]); - entry.maxtargets = atoi(row[219]); - entry.field220 = atoi(row[220]); - entry.field221 = atoi(row[221]); - entry.field222 = atoi(row[222]); - entry.field223 = atoi(row[223]); - entry.persistdeath = atoi(row[224]); - entry.field225 = atoi(row[225]); - entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); - entry.min_range = atoi(row[231]); - entry.field232 = atoi(row[232]); - entry.field233 = atoi(row[233]); - entry.field234 = atoi(row[234]); - entry.field235 = atoi(row[235]); - entry.field236 = atoi(row[236]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - SpellsNew entry{}; - - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.player_1 = row[2] ? row[2] : ""; - entry.teleport_zone = row[3] ? row[3] : ""; - entry.you_cast = row[4] ? row[4] : ""; - entry.other_casts = row[5] ? row[5] : ""; - entry.cast_on_you = row[6] ? row[6] : ""; - entry.cast_on_other = row[7] ? row[7] : ""; - entry.spell_fades = row[8] ? row[8] : ""; - entry.range = atoi(row[9]); - entry.aoerange = atoi(row[10]); - entry.pushback = atoi(row[11]); - entry.pushup = atoi(row[12]); - entry.cast_time = atoi(row[13]); - entry.recovery_time = atoi(row[14]); - entry.recast_time = atoi(row[15]); - entry.buffdurationformula = atoi(row[16]); - entry.buffduration = atoi(row[17]); - entry.AEDuration = atoi(row[18]); - entry.mana = atoi(row[19]); - entry.effect_base_value1 = atoi(row[20]); - entry.effect_base_value2 = atoi(row[21]); - entry.effect_base_value3 = atoi(row[22]); - entry.effect_base_value4 = atoi(row[23]); - entry.effect_base_value5 = atoi(row[24]); - entry.effect_base_value6 = atoi(row[25]); - entry.effect_base_value7 = atoi(row[26]); - entry.effect_base_value8 = atoi(row[27]); - entry.effect_base_value9 = atoi(row[28]); - entry.effect_base_value10 = atoi(row[29]); - entry.effect_base_value11 = atoi(row[30]); - entry.effect_base_value12 = atoi(row[31]); - entry.effect_limit_value1 = atoi(row[32]); - entry.effect_limit_value2 = atoi(row[33]); - entry.effect_limit_value3 = atoi(row[34]); - entry.effect_limit_value4 = atoi(row[35]); - entry.effect_limit_value5 = atoi(row[36]); - entry.effect_limit_value6 = atoi(row[37]); - entry.effect_limit_value7 = atoi(row[38]); - entry.effect_limit_value8 = atoi(row[39]); - entry.effect_limit_value9 = atoi(row[40]); - entry.effect_limit_value10 = atoi(row[41]); - entry.effect_limit_value11 = atoi(row[42]); - entry.effect_limit_value12 = atoi(row[43]); - entry.max1 = atoi(row[44]); - entry.max2 = atoi(row[45]); - entry.max3 = atoi(row[46]); - entry.max4 = atoi(row[47]); - entry.max5 = atoi(row[48]); - entry.max6 = atoi(row[49]); - entry.max7 = atoi(row[50]); - entry.max8 = atoi(row[51]); - entry.max9 = atoi(row[52]); - entry.max10 = atoi(row[53]); - entry.max11 = atoi(row[54]); - entry.max12 = atoi(row[55]); - entry.icon = atoi(row[56]); - entry.memicon = atoi(row[57]); - entry.components1 = atoi(row[58]); - entry.components2 = atoi(row[59]); - entry.components3 = atoi(row[60]); - entry.components4 = atoi(row[61]); - entry.component_counts1 = atoi(row[62]); - entry.component_counts2 = atoi(row[63]); - entry.component_counts3 = atoi(row[64]); - entry.component_counts4 = atoi(row[65]); - entry.NoexpendReagent1 = atoi(row[66]); - entry.NoexpendReagent2 = atoi(row[67]); - entry.NoexpendReagent3 = atoi(row[68]); - entry.NoexpendReagent4 = atoi(row[69]); - entry.formula1 = atoi(row[70]); - entry.formula2 = atoi(row[71]); - entry.formula3 = atoi(row[72]); - entry.formula4 = atoi(row[73]); - entry.formula5 = atoi(row[74]); - entry.formula6 = atoi(row[75]); - entry.formula7 = atoi(row[76]); - entry.formula8 = atoi(row[77]); - entry.formula9 = atoi(row[78]); - entry.formula10 = atoi(row[79]); - entry.formula11 = atoi(row[80]); - entry.formula12 = atoi(row[81]); - entry.LightType = atoi(row[82]); - entry.goodEffect = atoi(row[83]); - entry.Activated = atoi(row[84]); - entry.resisttype = atoi(row[85]); - entry.effectid1 = atoi(row[86]); - entry.effectid2 = atoi(row[87]); - entry.effectid3 = atoi(row[88]); - entry.effectid4 = atoi(row[89]); - entry.effectid5 = atoi(row[90]); - entry.effectid6 = atoi(row[91]); - entry.effectid7 = atoi(row[92]); - entry.effectid8 = atoi(row[93]); - entry.effectid9 = atoi(row[94]); - entry.effectid10 = atoi(row[95]); - entry.effectid11 = atoi(row[96]); - entry.effectid12 = atoi(row[97]); - entry.targettype = atoi(row[98]); - entry.basediff = atoi(row[99]); - entry.skill = atoi(row[100]); - entry.zonetype = atoi(row[101]); - entry.EnvironmentType = atoi(row[102]); - entry.TimeOfDay = atoi(row[103]); - entry.classes1 = atoi(row[104]); - entry.classes2 = atoi(row[105]); - entry.classes3 = atoi(row[106]); - entry.classes4 = atoi(row[107]); - entry.classes5 = atoi(row[108]); - entry.classes6 = atoi(row[109]); - entry.classes7 = atoi(row[110]); - entry.classes8 = atoi(row[111]); - entry.classes9 = atoi(row[112]); - entry.classes10 = atoi(row[113]); - entry.classes11 = atoi(row[114]); - entry.classes12 = atoi(row[115]); - entry.classes13 = atoi(row[116]); - entry.classes14 = atoi(row[117]); - entry.classes15 = atoi(row[118]); - entry.classes16 = atoi(row[119]); - entry.CastingAnim = atoi(row[120]); - entry.TargetAnim = atoi(row[121]); - entry.TravelType = atoi(row[122]); - entry.SpellAffectIndex = atoi(row[123]); - entry.disallow_sit = atoi(row[124]); - entry.deities0 = atoi(row[125]); - entry.deities1 = atoi(row[126]); - entry.deities2 = atoi(row[127]); - entry.deities3 = atoi(row[128]); - entry.deities4 = atoi(row[129]); - entry.deities5 = atoi(row[130]); - entry.deities6 = atoi(row[131]); - entry.deities7 = atoi(row[132]); - entry.deities8 = atoi(row[133]); - entry.deities9 = atoi(row[134]); - entry.deities10 = atoi(row[135]); - entry.deities11 = atoi(row[136]); - entry.deities12 = atoi(row[137]); - entry.deities13 = atoi(row[138]); - entry.deities14 = atoi(row[139]); - entry.deities15 = atoi(row[140]); - entry.deities16 = atoi(row[141]); - entry.field142 = atoi(row[142]); - entry.field143 = atoi(row[143]); - entry.new_icon = atoi(row[144]); - entry.spellanim = atoi(row[145]); - entry.uninterruptable = atoi(row[146]); - entry.ResistDiff = atoi(row[147]); - entry.dot_stacking_exempt = atoi(row[148]); - entry.deleteable = atoi(row[149]); - entry.RecourseLink = atoi(row[150]); - entry.no_partial_resist = atoi(row[151]); - entry.field152 = atoi(row[152]); - entry.field153 = atoi(row[153]); - entry.short_buff_box = atoi(row[154]); - entry.descnum = atoi(row[155]); - entry.typedescnum = atoi(row[156]); - entry.effectdescnum = atoi(row[157]); - entry.effectdescnum2 = atoi(row[158]); - entry.npc_no_los = atoi(row[159]); - entry.field160 = atoi(row[160]); - entry.reflectable = atoi(row[161]); - entry.bonushate = atoi(row[162]); - entry.field163 = atoi(row[163]); - entry.field164 = atoi(row[164]); - entry.ldon_trap = atoi(row[165]); - entry.EndurCost = atoi(row[166]); - entry.EndurTimerIndex = atoi(row[167]); - entry.IsDiscipline = atoi(row[168]); - entry.field169 = atoi(row[169]); - entry.field170 = atoi(row[170]); - entry.field171 = atoi(row[171]); - entry.field172 = atoi(row[172]); - entry.HateAdded = atoi(row[173]); - entry.EndurUpkeep = atoi(row[174]); - entry.numhitstype = atoi(row[175]); - entry.numhits = atoi(row[176]); - entry.pvpresistbase = atoi(row[177]); - entry.pvpresistcalc = atoi(row[178]); - entry.pvpresistcap = atoi(row[179]); - entry.spell_category = atoi(row[180]); - entry.field181 = atoi(row[181]); - entry.field182 = atoi(row[182]); - entry.pcnpc_only_flag = atoi(row[183]); - entry.cast_not_standing = atoi(row[184]); - entry.can_mgb = atoi(row[185]); - entry.nodispell = atoi(row[186]); - entry.npc_category = atoi(row[187]); - entry.npc_usefulness = atoi(row[188]); - entry.MinResist = atoi(row[189]); - entry.MaxResist = atoi(row[190]); - entry.viral_targets = atoi(row[191]); - entry.viral_timer = atoi(row[192]); - entry.nimbuseffect = atoi(row[193]); - entry.ConeStartAngle = atoi(row[194]); - entry.ConeStopAngle = atoi(row[195]); - entry.sneaking = atoi(row[196]); - entry.not_extendable = atoi(row[197]); - entry.field198 = atoi(row[198]); - entry.field199 = atoi(row[199]); - entry.suspendable = atoi(row[200]); - entry.viral_range = atoi(row[201]); - entry.songcap = atoi(row[202]); - entry.field203 = atoi(row[203]); - entry.field204 = atoi(row[204]); - entry.no_block = atoi(row[205]); - entry.field206 = atoi(row[206]); - entry.spellgroup = atoi(row[207]); - entry.rank = atoi(row[208]); - entry.field209 = atoi(row[209]); - entry.field210 = atoi(row[210]); - entry.CastRestriction = atoi(row[211]); - entry.allowrest = atoi(row[212]); - entry.InCombat = atoi(row[213]); - entry.OutofCombat = atoi(row[214]); - entry.field215 = atoi(row[215]); - entry.field216 = atoi(row[216]); - entry.field217 = atoi(row[217]); - entry.aemaxtargets = atoi(row[218]); - entry.maxtargets = atoi(row[219]); - entry.field220 = atoi(row[220]); - entry.field221 = atoi(row[221]); - entry.field222 = atoi(row[222]); - entry.field223 = atoi(row[223]); - entry.persistdeath = atoi(row[224]); - entry.field225 = atoi(row[225]); - entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); - entry.min_range = atoi(row[231]); - entry.field232 = atoi(row[232]); - entry.field233 = atoi(row[233]); - entry.field234 = atoi(row[234]); - entry.field235 = atoi(row[235]); - entry.field236 = atoi(row[236]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h index 54cd27bd2..df4d9d36f 100644 --- a/common/repositories/start_zones_repository.h +++ b/common/repositories/start_zones_repository.h @@ -23,383 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_start_zones_repository.h" -class StartZonesRepository { +class StartZonesRepository: public BaseStartZonesRepository { public: - struct StartZones { - float x; - float y; - float z; - float heading; - int zone_id; - int bind_id; - int player_choice; - int player_class; - int player_deity; - int player_race; - int start_zone; - float bind_x; - float bind_y; - float bind_z; - int8 select_rank; - }; - static std::string PrimaryKey() - { - return std::string("player_race"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * StartZonesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * StartZonesRepository::GetWhereNeverExpires() + * StartZonesRepository::GetWhereXAndY() + * StartZonesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "x", - "y", - "z", - "heading", - "zone_id", - "bind_id", - "player_choice", - "player_class", - "player_deity", - "player_race", - "start_zone", - "bind_x", - "bind_y", - "bind_z", - "select_rank", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("start_zones"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static StartZones NewEntity() - { - StartZones entry{}; - - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.heading = 0; - entry.zone_id = 0; - entry.bind_id = 0; - entry.player_choice = 0; - entry.player_class = 0; - entry.player_deity = 0; - entry.player_race = 0; - entry.start_zone = 0; - entry.bind_x = 0; - entry.bind_y = 0; - entry.bind_z = 0; - entry.select_rank = 50; - - return entry; - } - - static StartZones GetStartZonesEntry( - const std::vector &start_zoness, - int start_zones_id - ) - { - for (auto &start_zones : start_zoness) { - if (start_zones.player_race == start_zones_id) { - return start_zones; - } - } - - return NewEntity(); - } - - static StartZones FindOne( - int start_zones_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - start_zones_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - StartZones entry{}; - - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); - entry.select_rank = atoi(row[14]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int start_zones_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - start_zones_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - StartZones start_zones_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(start_zones_entry.x)); - update_values.push_back(columns[1] + " = " + std::to_string(start_zones_entry.y)); - update_values.push_back(columns[2] + " = " + std::to_string(start_zones_entry.z)); - update_values.push_back(columns[3] + " = " + std::to_string(start_zones_entry.heading)); - update_values.push_back(columns[4] + " = " + std::to_string(start_zones_entry.zone_id)); - update_values.push_back(columns[5] + " = " + std::to_string(start_zones_entry.bind_id)); - update_values.push_back(columns[10] + " = " + std::to_string(start_zones_entry.start_zone)); - update_values.push_back(columns[11] + " = " + std::to_string(start_zones_entry.bind_x)); - update_values.push_back(columns[12] + " = " + std::to_string(start_zones_entry.bind_y)); - update_values.push_back(columns[13] + " = " + std::to_string(start_zones_entry.bind_z)); - update_values.push_back(columns[14] + " = " + std::to_string(start_zones_entry.select_rank)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - start_zones_entry.player_race - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static StartZones InsertOne( - StartZones start_zones_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(start_zones_entry.x)); - insert_values.push_back(std::to_string(start_zones_entry.y)); - insert_values.push_back(std::to_string(start_zones_entry.z)); - insert_values.push_back(std::to_string(start_zones_entry.heading)); - insert_values.push_back(std::to_string(start_zones_entry.zone_id)); - insert_values.push_back(std::to_string(start_zones_entry.bind_id)); - insert_values.push_back(std::to_string(start_zones_entry.start_zone)); - insert_values.push_back(std::to_string(start_zones_entry.bind_x)); - insert_values.push_back(std::to_string(start_zones_entry.bind_y)); - insert_values.push_back(std::to_string(start_zones_entry.bind_z)); - insert_values.push_back(std::to_string(start_zones_entry.select_rank)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - start_zones_entry.id = results.LastInsertedID(); - return start_zones_entry; - } - - start_zones_entry = StartZonesRepository::NewEntity(); - - return start_zones_entry; - } - - static int InsertMany( - std::vector start_zones_entries - ) - { - std::vector insert_chunks; - - for (auto &start_zones_entry: start_zones_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(start_zones_entry.x)); - insert_values.push_back(std::to_string(start_zones_entry.y)); - insert_values.push_back(std::to_string(start_zones_entry.z)); - insert_values.push_back(std::to_string(start_zones_entry.heading)); - insert_values.push_back(std::to_string(start_zones_entry.zone_id)); - insert_values.push_back(std::to_string(start_zones_entry.bind_id)); - insert_values.push_back(std::to_string(start_zones_entry.start_zone)); - insert_values.push_back(std::to_string(start_zones_entry.bind_x)); - insert_values.push_back(std::to_string(start_zones_entry.bind_y)); - insert_values.push_back(std::to_string(start_zones_entry.bind_z)); - insert_values.push_back(std::to_string(start_zones_entry.select_rank)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - StartZones entry{}; - - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); - entry.select_rank = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - StartZones entry{}; - - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); - entry.select_rank = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/starting_items_repository.h b/common/repositories/starting_items_repository.h index d1a4cc48e..7642fd0d1 100644 --- a/common/repositories/starting_items_repository.h +++ b/common/repositories/starting_items_repository.h @@ -23,335 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_starting_items_repository.h" -class StartingItemsRepository { +class StartingItemsRepository: public BaseStartingItemsRepository { public: - struct StartingItems { - int id; - int race; - int class; - int deityid; - int zoneid; - int itemid; - int8 item_charges; - int8 gm; - int slot; - }; - static std::string PrimaryKey() - { - return std::string("race"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * StartingItemsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * StartingItemsRepository::GetWhereNeverExpires() + * StartingItemsRepository::GetWhereXAndY() + * StartingItemsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "race", - "class", - "deityid", - "zoneid", - "itemid", - "item_charges", - "gm", - "slot", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("starting_items"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static StartingItems NewEntity() - { - StartingItems entry{}; - - entry.id = 0; - entry.race = 0; - entry.class = 0; - entry.deityid = 0; - entry.zoneid = 0; - entry.itemid = 0; - entry.item_charges = 1; - entry.gm = 0; - entry.slot = -1; - - return entry; - } - - static StartingItems GetStartingItemsEntry( - const std::vector &starting_itemss, - int starting_items_id - ) - { - for (auto &starting_items : starting_itemss) { - if (starting_items.race == starting_items_id) { - return starting_items; - } - } - - return NewEntity(); - } - - static StartingItems FindOne( - int starting_items_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - starting_items_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - StartingItems entry{}; - - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int starting_items_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - starting_items_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - StartingItems starting_items_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(starting_items_entry.class)); - update_values.push_back(columns[3] + " = " + std::to_string(starting_items_entry.deityid)); - update_values.push_back(columns[4] + " = " + std::to_string(starting_items_entry.zoneid)); - update_values.push_back(columns[5] + " = " + std::to_string(starting_items_entry.itemid)); - update_values.push_back(columns[6] + " = " + std::to_string(starting_items_entry.item_charges)); - update_values.push_back(columns[7] + " = " + std::to_string(starting_items_entry.gm)); - update_values.push_back(columns[8] + " = " + std::to_string(starting_items_entry.slot)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - starting_items_entry.race - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static StartingItems InsertOne( - StartingItems starting_items_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(starting_items_entry.class)); - insert_values.push_back(std::to_string(starting_items_entry.deityid)); - insert_values.push_back(std::to_string(starting_items_entry.zoneid)); - insert_values.push_back(std::to_string(starting_items_entry.itemid)); - insert_values.push_back(std::to_string(starting_items_entry.item_charges)); - insert_values.push_back(std::to_string(starting_items_entry.gm)); - insert_values.push_back(std::to_string(starting_items_entry.slot)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - starting_items_entry.id = results.LastInsertedID(); - return starting_items_entry; - } - - starting_items_entry = StartingItemsRepository::NewEntity(); - - return starting_items_entry; - } - - static int InsertMany( - std::vector starting_items_entries - ) - { - std::vector insert_chunks; - - for (auto &starting_items_entry: starting_items_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(starting_items_entry.class)); - insert_values.push_back(std::to_string(starting_items_entry.deityid)); - insert_values.push_back(std::to_string(starting_items_entry.zoneid)); - insert_values.push_back(std::to_string(starting_items_entry.itemid)); - insert_values.push_back(std::to_string(starting_items_entry.item_charges)); - insert_values.push_back(std::to_string(starting_items_entry.gm)); - insert_values.push_back(std::to_string(starting_items_entry.slot)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - StartingItems entry{}; - - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - StartingItems entry{}; - - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index 20c0580c9..302c1f90f 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -23,389 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_task_activities_repository.h" -class TaskActivitiesRepository { +class TaskActivitiesRepository: public BaseTaskActivitiesRepository { public: - struct TaskActivities { - int taskid; - int activityid; - int step; - int8 activitytype; - std::string target_name; - std::string item_list; - std::string skill_list; - std::string spell_list; - std::string description_override; - int goalid; - int goalmethod; - int goalcount; - int delivertonpc; - std::string zones; - int8 optional; - }; - static std::string PrimaryKey() - { - return std::string("activityid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TaskActivitiesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TaskActivitiesRepository::GetWhereNeverExpires() + * TaskActivitiesRepository::GetWhereXAndY() + * TaskActivitiesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "taskid", - "activityid", - "step", - "activitytype", - "target_name", - "item_list", - "skill_list", - "spell_list", - "description_override", - "goalid", - "goalmethod", - "goalcount", - "delivertonpc", - "zones", - "optional", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("task_activities"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static TaskActivities NewEntity() - { - TaskActivities entry{}; - - entry.taskid = 0; - entry.activityid = 0; - entry.step = 0; - entry.activitytype = 0; - entry.target_name = ""; - entry.item_list = ""; - entry.skill_list = "-1"; - entry.spell_list = "0"; - entry.description_override = ""; - entry.goalid = 0; - entry.goalmethod = 0; - entry.goalcount = 1; - entry.delivertonpc = 0; - entry.zones = ""; - entry.optional = 0; - - return entry; - } - - static TaskActivities GetTaskActivitiesEntry( - const std::vector &task_activitiess, - int task_activities_id - ) - { - for (auto &task_activities : task_activitiess) { - if (task_activities.activityid == task_activities_id) { - return task_activities; - } - } - - return NewEntity(); - } - - static TaskActivities FindOne( - int task_activities_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - task_activities_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - TaskActivities entry{}; - - entry.taskid = atoi(row[0]); - entry.activityid = atoi(row[1]); - entry.step = atoi(row[2]); - entry.activitytype = atoi(row[3]); - entry.target_name = row[4] ? row[4] : ""; - entry.item_list = row[5] ? row[5] : ""; - entry.skill_list = row[6] ? row[6] : ""; - entry.spell_list = row[7] ? row[7] : ""; - entry.description_override = row[8] ? row[8] : ""; - entry.goalid = atoi(row[9]); - entry.goalmethod = atoi(row[10]); - entry.goalcount = atoi(row[11]); - entry.delivertonpc = atoi(row[12]); - entry.zones = row[13] ? row[13] : ""; - entry.optional = atoi(row[14]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int task_activities_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - task_activities_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - TaskActivities task_activities_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(task_activities_entry.step)); - update_values.push_back(columns[3] + " = " + std::to_string(task_activities_entry.activitytype)); - update_values.push_back(columns[4] + " = '" + EscapeString(task_activities_entry.target_name) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(task_activities_entry.item_list) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(task_activities_entry.skill_list) + "'"); - update_values.push_back(columns[7] + " = '" + EscapeString(task_activities_entry.spell_list) + "'"); - update_values.push_back(columns[8] + " = '" + EscapeString(task_activities_entry.description_override) + "'"); - update_values.push_back(columns[9] + " = " + std::to_string(task_activities_entry.goalid)); - update_values.push_back(columns[10] + " = " + std::to_string(task_activities_entry.goalmethod)); - update_values.push_back(columns[11] + " = " + std::to_string(task_activities_entry.goalcount)); - update_values.push_back(columns[12] + " = " + std::to_string(task_activities_entry.delivertonpc)); - update_values.push_back(columns[13] + " = '" + EscapeString(task_activities_entry.zones) + "'"); - update_values.push_back(columns[14] + " = " + std::to_string(task_activities_entry.optional)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - task_activities_entry.activityid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static TaskActivities InsertOne( - TaskActivities task_activities_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(task_activities_entry.step)); - insert_values.push_back(std::to_string(task_activities_entry.activitytype)); - insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); - insert_values.push_back(std::to_string(task_activities_entry.goalid)); - insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); - insert_values.push_back(std::to_string(task_activities_entry.goalcount)); - insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); - insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); - insert_values.push_back(std::to_string(task_activities_entry.optional)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - task_activities_entry.id = results.LastInsertedID(); - return task_activities_entry; - } - - task_activities_entry = TaskActivitiesRepository::NewEntity(); - - return task_activities_entry; - } - - static int InsertMany( - std::vector task_activities_entries - ) - { - std::vector insert_chunks; - - for (auto &task_activities_entry: task_activities_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(task_activities_entry.step)); - insert_values.push_back(std::to_string(task_activities_entry.activitytype)); - insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.item_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.skill_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.spell_list) + "'"); - insert_values.push_back("'" + EscapeString(task_activities_entry.description_override) + "'"); - insert_values.push_back(std::to_string(task_activities_entry.goalid)); - insert_values.push_back(std::to_string(task_activities_entry.goalmethod)); - insert_values.push_back(std::to_string(task_activities_entry.goalcount)); - insert_values.push_back(std::to_string(task_activities_entry.delivertonpc)); - insert_values.push_back("'" + EscapeString(task_activities_entry.zones) + "'"); - insert_values.push_back(std::to_string(task_activities_entry.optional)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TaskActivities entry{}; - - entry.taskid = atoi(row[0]); - entry.activityid = atoi(row[1]); - entry.step = atoi(row[2]); - entry.activitytype = atoi(row[3]); - entry.target_name = row[4] ? row[4] : ""; - entry.item_list = row[5] ? row[5] : ""; - entry.skill_list = row[6] ? row[6] : ""; - entry.spell_list = row[7] ? row[7] : ""; - entry.description_override = row[8] ? row[8] : ""; - entry.goalid = atoi(row[9]); - entry.goalmethod = atoi(row[10]); - entry.goalcount = atoi(row[11]); - entry.delivertonpc = atoi(row[12]); - entry.zones = row[13] ? row[13] : ""; - entry.optional = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TaskActivities entry{}; - - entry.taskid = atoi(row[0]); - entry.activityid = atoi(row[1]); - entry.step = atoi(row[2]); - entry.activitytype = atoi(row[3]); - entry.target_name = row[4] ? row[4] : ""; - entry.item_list = row[5] ? row[5] : ""; - entry.skill_list = row[6] ? row[6] : ""; - entry.spell_list = row[7] ? row[7] : ""; - entry.description_override = row[8] ? row[8] : ""; - entry.goalid = atoi(row[9]); - entry.goalmethod = atoi(row[10]); - entry.goalcount = atoi(row[11]); - entry.delivertonpc = atoi(row[12]); - entry.zones = row[13] ? row[13] : ""; - entry.optional = atoi(row[14]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index f08bc147e..df5ae2482 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -23,401 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tasks_repository.h" -class TasksRepository { +class TasksRepository: public BaseTasksRepository { public: - struct Tasks { - int id; - int8 type; - int duration; - int8 duration_code; - std::string title; - std::string description; - std::string reward; - int rewardid; - int cashreward; - int xpreward; - int8 rewardmethod; - int8 minlevel; - int8 maxlevel; - int8 repeatable; - int faction_reward; - std::string completion_emote; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TasksRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TasksRepository::GetWhereNeverExpires() + * TasksRepository::GetWhereXAndY() + * TasksRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "type", - "duration", - "duration_code", - "title", - "description", - "reward", - "rewardid", - "cashreward", - "xpreward", - "rewardmethod", - "minlevel", - "maxlevel", - "repeatable", - "faction_reward", - "completion_emote", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("tasks"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Tasks NewEntity() - { - Tasks entry{}; - - entry.id = 0; - entry.type = 0; - entry.duration = 0; - entry.duration_code = 0; - entry.title = ""; - entry.description = ""; - entry.reward = ""; - entry.rewardid = 0; - entry.cashreward = 0; - entry.xpreward = 0; - entry.rewardmethod = 2; - entry.minlevel = 0; - entry.maxlevel = 0; - entry.repeatable = 1; - entry.faction_reward = 0; - entry.completion_emote = ""; - - return entry; - } - - static Tasks GetTasksEntry( - const std::vector &taskss, - int tasks_id - ) - { - for (auto &tasks : taskss) { - if (tasks.id == tasks_id) { - return tasks; - } - } - - return NewEntity(); - } - - static Tasks FindOne( - int tasks_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - tasks_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Tasks entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.duration_code = atoi(row[3]); - entry.title = row[4] ? row[4] : ""; - entry.description = row[5] ? row[5] : ""; - entry.reward = row[6] ? row[6] : ""; - entry.rewardid = atoi(row[7]); - entry.cashreward = atoi(row[8]); - entry.xpreward = atoi(row[9]); - entry.rewardmethod = atoi(row[10]); - entry.minlevel = atoi(row[11]); - entry.maxlevel = atoi(row[12]); - entry.repeatable = atoi(row[13]); - entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15] ? row[15] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int tasks_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tasks_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Tasks tasks_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(tasks_entry.type)); - update_values.push_back(columns[2] + " = " + std::to_string(tasks_entry.duration)); - update_values.push_back(columns[3] + " = " + std::to_string(tasks_entry.duration_code)); - update_values.push_back(columns[4] + " = '" + EscapeString(tasks_entry.title) + "'"); - update_values.push_back(columns[5] + " = '" + EscapeString(tasks_entry.description) + "'"); - update_values.push_back(columns[6] + " = '" + EscapeString(tasks_entry.reward) + "'"); - update_values.push_back(columns[7] + " = " + std::to_string(tasks_entry.rewardid)); - update_values.push_back(columns[8] + " = " + std::to_string(tasks_entry.cashreward)); - update_values.push_back(columns[9] + " = " + std::to_string(tasks_entry.xpreward)); - update_values.push_back(columns[10] + " = " + std::to_string(tasks_entry.rewardmethod)); - update_values.push_back(columns[11] + " = " + std::to_string(tasks_entry.minlevel)); - update_values.push_back(columns[12] + " = " + std::to_string(tasks_entry.maxlevel)); - update_values.push_back(columns[13] + " = " + std::to_string(tasks_entry.repeatable)); - update_values.push_back(columns[14] + " = " + std::to_string(tasks_entry.faction_reward)); - update_values.push_back(columns[15] + " = '" + EscapeString(tasks_entry.completion_emote) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tasks_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Tasks InsertOne( - Tasks tasks_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(tasks_entry.type)); - insert_values.push_back(std::to_string(tasks_entry.duration)); - insert_values.push_back(std::to_string(tasks_entry.duration_code)); - insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); - insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); - insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); - insert_values.push_back(std::to_string(tasks_entry.rewardid)); - insert_values.push_back(std::to_string(tasks_entry.cashreward)); - insert_values.push_back(std::to_string(tasks_entry.xpreward)); - insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); - insert_values.push_back(std::to_string(tasks_entry.minlevel)); - insert_values.push_back(std::to_string(tasks_entry.maxlevel)); - insert_values.push_back(std::to_string(tasks_entry.repeatable)); - insert_values.push_back(std::to_string(tasks_entry.faction_reward)); - insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tasks_entry.id = results.LastInsertedID(); - return tasks_entry; - } - - tasks_entry = TasksRepository::NewEntity(); - - return tasks_entry; - } - - static int InsertMany( - std::vector tasks_entries - ) - { - std::vector insert_chunks; - - for (auto &tasks_entry: tasks_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(tasks_entry.type)); - insert_values.push_back(std::to_string(tasks_entry.duration)); - insert_values.push_back(std::to_string(tasks_entry.duration_code)); - insert_values.push_back("'" + EscapeString(tasks_entry.title) + "'"); - insert_values.push_back("'" + EscapeString(tasks_entry.description) + "'"); - insert_values.push_back("'" + EscapeString(tasks_entry.reward) + "'"); - insert_values.push_back(std::to_string(tasks_entry.rewardid)); - insert_values.push_back(std::to_string(tasks_entry.cashreward)); - insert_values.push_back(std::to_string(tasks_entry.xpreward)); - insert_values.push_back(std::to_string(tasks_entry.rewardmethod)); - insert_values.push_back(std::to_string(tasks_entry.minlevel)); - insert_values.push_back(std::to_string(tasks_entry.maxlevel)); - insert_values.push_back(std::to_string(tasks_entry.repeatable)); - insert_values.push_back(std::to_string(tasks_entry.faction_reward)); - insert_values.push_back("'" + EscapeString(tasks_entry.completion_emote) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tasks entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.duration_code = atoi(row[3]); - entry.title = row[4] ? row[4] : ""; - entry.description = row[5] ? row[5] : ""; - entry.reward = row[6] ? row[6] : ""; - entry.rewardid = atoi(row[7]); - entry.cashreward = atoi(row[8]); - entry.xpreward = atoi(row[9]); - entry.rewardmethod = atoi(row[10]); - entry.minlevel = atoi(row[11]); - entry.maxlevel = atoi(row[12]); - entry.repeatable = atoi(row[13]); - entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15] ? row[15] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tasks entry{}; - - entry.id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.duration = atoi(row[2]); - entry.duration_code = atoi(row[3]); - entry.title = row[4] ? row[4] : ""; - entry.description = row[5] ? row[5] : ""; - entry.reward = row[6] ? row[6] : ""; - entry.rewardid = atoi(row[7]); - entry.cashreward = atoi(row[8]); - entry.xpreward = atoi(row[9]); - entry.rewardmethod = atoi(row[10]); - entry.minlevel = atoi(row[11]); - entry.maxlevel = atoi(row[12]); - entry.repeatable = atoi(row[13]); - entry.faction_reward = atoi(row[14]); - entry.completion_emote = row[15] ? row[15] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/tasksets_repository.h b/common/repositories/tasksets_repository.h index 43f6ed782..ae0eb9d56 100644 --- a/common/repositories/tasksets_repository.h +++ b/common/repositories/tasksets_repository.h @@ -23,275 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tasksets_repository.h" -class TasksetsRepository { +class TasksetsRepository: public BaseTasksetsRepository { public: - struct Tasksets { - int id; - int taskid; - }; - static std::string PrimaryKey() - { - return std::string("taskid"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TasksetsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TasksetsRepository::GetWhereNeverExpires() + * TasksetsRepository::GetWhereXAndY() + * TasksetsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "taskid", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("tasksets"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Tasksets NewEntity() - { - Tasksets entry{}; - - entry.id = 0; - entry.taskid = 0; - - return entry; - } - - static Tasksets GetTasksetsEntry( - const std::vector &tasksetss, - int tasksets_id - ) - { - for (auto &tasksets : tasksetss) { - if (tasksets.taskid == tasksets_id) { - return tasksets; - } - } - - return NewEntity(); - } - - static Tasksets FindOne( - int tasksets_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - tasksets_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Tasksets entry{}; - - entry.id = atoi(row[0]); - entry.taskid = atoi(row[1]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int tasksets_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tasksets_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Tasksets tasksets_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tasksets_entry.taskid - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Tasksets InsertOne( - Tasksets tasksets_entry - ) - { - std::vector insert_values; - - - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tasksets_entry.id = results.LastInsertedID(); - return tasksets_entry; - } - - tasksets_entry = TasksetsRepository::NewEntity(); - - return tasksets_entry; - } - - static int InsertMany( - std::vector tasksets_entries - ) - { - std::vector insert_chunks; - - for (auto &tasksets_entry: tasksets_entries) { - std::vector insert_values; - - - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tasksets entry{}; - - entry.id = atoi(row[0]); - entry.taskid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tasksets entry{}; - - entry.id = atoi(row[0]); - entry.taskid = atoi(row[1]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/template/base_repository.template b/common/repositories/template/base_repository.template new file mode 100644 index 000000000..67b0322a0 --- /dev/null +++ b/common/repositories/template/base_repository.template @@ -0,0 +1,299 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on {{GENERATED_DATE}} and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H +#define EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class Base{{TABLE_NAME_CLASS}}Repository { +public: + struct {{TABLE_NAME_STRUCT}} { +{{TABLE_STRUCT_COLUMNS}} + }; + + static std::string PrimaryKey() + { + return std::string("{{PRIMARY_KEY_STRING}}"); + } + + static std::vector Columns() + { + return { +{{COLUMNS_LIST_QUOTED}} + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("{{TABLE_NAME_VAR}}"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static {{TABLE_NAME_STRUCT}} NewEntity() + { + {{TABLE_NAME_STRUCT}} entry{}; + +{{DEFAULT_ENTRIES}} + + return entry; + } + + static {{TABLE_NAME_STRUCT}} Get{{TABLE_NAME_STRUCT}}Entry( + const std::vector<{{TABLE_NAME_STRUCT}}> &{{TABLE_NAME_VAR}}s, + int {{TABLE_NAME_VAR}}_id + ) + { + for (auto &{{TABLE_NAME_VAR}} : {{TABLE_NAME_VAR}}s) { + if ({{TABLE_NAME_VAR}}.{{PRIMARY_KEY_STRING}} == {{TABLE_NAME_VAR}}_id) { + return {{TABLE_NAME_VAR}}; + } + } + + return NewEntity(); + } + + static {{TABLE_NAME_STRUCT}} FindOne( + int {{TABLE_NAME_VAR}}_id + ) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + {{TABLE_NAME_VAR}}_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{FIND_ONE_ENTRIES}} + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int {{TABLE_NAME_VAR}}_id + ) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + {{TABLE_NAME_VAR}}_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + +{{UPDATE_ONE_ENTRIES}} + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + {{TABLE_NAME_VAR}}_entry.{{PRIMARY_KEY_STRING}} + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static {{TABLE_NAME_STRUCT}} InsertOne( + {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry + ) + { + std::vector insert_values; + +{{INSERT_ONE_ENTRIES}} + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + {{TABLE_NAME_VAR}}_entry.id = results.LastInsertedID(); + return {{TABLE_NAME_VAR}}_entry; + } + + {{TABLE_NAME_VAR}}_entry = NewEntity(); + + return {{TABLE_NAME_VAR}}_entry; + } + + static int InsertMany( + std::vector<{{TABLE_NAME_STRUCT}}> {{TABLE_NAME_VAR}}_entries + ) + { + std::vector insert_chunks; + + for (auto &{{TABLE_NAME_VAR}}_entry: {{TABLE_NAME_VAR}}_entries) { + std::vector insert_values; + +{{INSERT_MANY_ENTRIES}} + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector<{{TABLE_NAME_STRUCT}}> All() + { + std::vector<{{TABLE_NAME_STRUCT}}> all_entries; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{ALL_ENTRIES}} + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector<{{TABLE_NAME_STRUCT}}> GetWhere(std::string where_filter) + { + std::vector<{{TABLE_NAME_STRUCT}}> all_entries; + + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + {{TABLE_NAME_STRUCT}} entry{}; + +{{ALL_ENTRIES}} + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H diff --git a/common/repositories/template/repository.template b/common/repositories/template/repository.template index dacc76705..f62f524d8 100644 --- a/common/repositories/template/repository.template +++ b/common/repositories/template/repository.template @@ -23,268 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_{{TABLE_NAME_VAR}}_repository.h" -class {{TABLE_NAME_CLASS}}Repository { +class {{TABLE_NAME_CLASS}}Repository: public Base{{TABLE_NAME_CLASS}}Repository { public: - struct {{TABLE_NAME_STRUCT}} { -{{TABLE_STRUCT_COLUMNS}} - }; - static std::string PrimaryKey() - { - return std::string("{{PRIMARY_KEY_STRING}}"); - } + /** + * This file was auto generated on {{GENERATED_DATE}} and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * {{TABLE_NAME_CLASS}}Repository::GetByZoneAndVersion(int zone_id, int zone_version) + * {{TABLE_NAME_CLASS}}Repository::GetWhereNeverExpires() + * {{TABLE_NAME_CLASS}}Repository::GetWhereXAndY() + * {{TABLE_NAME_CLASS}}Repository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { -{{COLUMNS_LIST_QUOTED}} - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("{{TABLE_NAME_VAR}}"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static {{TABLE_NAME_STRUCT}} NewEntity() - { - {{TABLE_NAME_STRUCT}} entry{}; - -{{DEFAULT_ENTRIES}} - - return entry; - } - - static {{TABLE_NAME_STRUCT}} Get{{TABLE_NAME_STRUCT}}Entry( - const std::vector<{{TABLE_NAME_STRUCT}}> &{{TABLE_NAME_VAR}}s, - int {{TABLE_NAME_VAR}}_id - ) - { - for (auto &{{TABLE_NAME_VAR}} : {{TABLE_NAME_VAR}}s) { - if ({{TABLE_NAME_VAR}}.{{PRIMARY_KEY_STRING}} == {{TABLE_NAME_VAR}}_id) { - return {{TABLE_NAME_VAR}}; - } - } - - return NewEntity(); - } - - static {{TABLE_NAME_STRUCT}} FindOne( - int {{TABLE_NAME_VAR}}_id - ) - { - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - {{TABLE_NAME_VAR}}_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - {{TABLE_NAME_STRUCT}} entry{}; - -{{FIND_ONE_ENTRIES}} - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int {{TABLE_NAME_VAR}}_id - ) - { - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - {{TABLE_NAME_VAR}}_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - -{{UPDATE_ONE_ENTRIES}} - - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - {{TABLE_NAME_VAR}}_entry.{{PRIMARY_KEY_STRING}} - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static {{TABLE_NAME_STRUCT}} InsertOne( - {{TABLE_NAME_STRUCT}} {{TABLE_NAME_VAR}}_entry - ) - { - std::vector insert_values; - -{{INSERT_ONE_ENTRIES}} - - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - {{TABLE_NAME_VAR}}_entry.id = results.LastInsertedID(); - return {{TABLE_NAME_VAR}}_entry; - } - - {{TABLE_NAME_VAR}}_entry = {{TABLE_NAME_CLASS}}Repository::NewEntity(); - - return {{TABLE_NAME_VAR}}_entry; - } - - static int InsertMany( - std::vector<{{TABLE_NAME_STRUCT}}> {{TABLE_NAME_VAR}}_entries - ) - { - std::vector insert_chunks; - - for (auto &{{TABLE_NAME_VAR}}_entry: {{TABLE_NAME_VAR}}_entries) { - std::vector insert_values; - -{{INSERT_MANY_ENTRIES}} - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector<{{TABLE_NAME_STRUCT}}> All() - { - std::vector<{{TABLE_NAME_STRUCT}}> all_entries; - - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - {{TABLE_NAME_STRUCT}} entry{}; - -{{ALL_ENTRIES}} - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector<{{TABLE_NAME_STRUCT}}> GetWhere(std::string where_filter) - { - std::vector<{{TABLE_NAME_STRUCT}}> all_entries; - - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - {{TABLE_NAME_STRUCT}} entry{}; - -{{ALL_ENTRIES}} - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = {{DATABASE_CONNECTION}}.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/timers_repository.h b/common/repositories/timers_repository.h index f6734b140..677bba968 100644 --- a/common/repositories/timers_repository.h +++ b/common/repositories/timers_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_timers_repository.h" -class TimersRepository { +class TimersRepository: public BaseTimersRepository { public: - struct Timers { - int char_id; - int type; - int start; - int duration; - int8 enable; - }; - static std::string PrimaryKey() - { - return std::string("type"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TimersRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TimersRepository::GetWhereNeverExpires() + * TimersRepository::GetWhereXAndY() + * TimersRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "type", - "start", - "duration", - "enable", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("timers"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Timers NewEntity() - { - Timers entry{}; - - entry.char_id = 0; - entry.type = 0; - entry.start = 0; - entry.duration = 0; - entry.enable = 0; - - return entry; - } - - static Timers GetTimersEntry( - const std::vector &timerss, - int timers_id - ) - { - for (auto &timers : timerss) { - if (timers.type == timers_id) { - return timers; - } - } - - return NewEntity(); - } - - static Timers FindOne( - int timers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - timers_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Timers entry{}; - - entry.char_id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.start = atoi(row[2]); - entry.duration = atoi(row[3]); - entry.enable = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int timers_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - timers_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Timers timers_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(timers_entry.start)); - update_values.push_back(columns[3] + " = " + std::to_string(timers_entry.duration)); - update_values.push_back(columns[4] + " = " + std::to_string(timers_entry.enable)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - timers_entry.type - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Timers InsertOne( - Timers timers_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(timers_entry.start)); - insert_values.push_back(std::to_string(timers_entry.duration)); - insert_values.push_back(std::to_string(timers_entry.enable)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - timers_entry.id = results.LastInsertedID(); - return timers_entry; - } - - timers_entry = TimersRepository::NewEntity(); - - return timers_entry; - } - - static int InsertMany( - std::vector timers_entries - ) - { - std::vector insert_chunks; - - for (auto &timers_entry: timers_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(timers_entry.start)); - insert_values.push_back(std::to_string(timers_entry.duration)); - insert_values.push_back(std::to_string(timers_entry.enable)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Timers entry{}; - - entry.char_id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.start = atoi(row[2]); - entry.duration = atoi(row[3]); - entry.enable = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Timers entry{}; - - entry.char_id = atoi(row[0]); - entry.type = atoi(row[1]); - entry.start = atoi(row[2]); - entry.duration = atoi(row[3]); - entry.enable = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index 96cc51ca4..b60797355 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -23,383 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_titles_repository.h" -class TitlesRepository { +class TitlesRepository: public BaseTitlesRepository { public: - struct Titles { - int id; - int8 skill_id; - int min_skill_value; - int max_skill_value; - int min_aa_points; - int max_aa_points; - int8 class; - int8 gender; - int char_id; - int status; - int item_id; - std::string prefix; - std::string suffix; - int title_set; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TitlesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TitlesRepository::GetWhereNeverExpires() + * TitlesRepository::GetWhereXAndY() + * TitlesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "skill_id", - "min_skill_value", - "max_skill_value", - "min_aa_points", - "max_aa_points", - "class", - "gender", - "char_id", - "status", - "item_id", - "prefix", - "suffix", - "title_set", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("titles"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Titles NewEntity() - { - Titles entry{}; - - entry.id = 0; - entry.skill_id = -1; - entry.min_skill_value = -1; - entry.max_skill_value = -1; - entry.min_aa_points = -1; - entry.max_aa_points = -1; - entry.class = -1; - entry.gender = -1; - entry.char_id = -1; - entry.status = -1; - entry.item_id = -1; - entry.prefix = ""; - entry.suffix = ""; - entry.title_set = 0; - - return entry; - } - - static Titles GetTitlesEntry( - const std::vector &titless, - int titles_id - ) - { - for (auto &titles : titless) { - if (titles.id == titles_id) { - return titles; - } - } - - return NewEntity(); - } - - static Titles FindOne( - int titles_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - titles_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Titles entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.min_skill_value = atoi(row[2]); - entry.max_skill_value = atoi(row[3]); - entry.min_aa_points = atoi(row[4]); - entry.max_aa_points = atoi(row[5]); - entry.class = atoi(row[6]); - entry.gender = atoi(row[7]); - entry.char_id = atoi(row[8]); - entry.status = atoi(row[9]); - entry.item_id = atoi(row[10]); - entry.prefix = row[11] ? row[11] : ""; - entry.suffix = row[12] ? row[12] : ""; - entry.title_set = atoi(row[13]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int titles_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - titles_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Titles titles_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(titles_entry.skill_id)); - update_values.push_back(columns[2] + " = " + std::to_string(titles_entry.min_skill_value)); - update_values.push_back(columns[3] + " = " + std::to_string(titles_entry.max_skill_value)); - update_values.push_back(columns[4] + " = " + std::to_string(titles_entry.min_aa_points)); - update_values.push_back(columns[5] + " = " + std::to_string(titles_entry.max_aa_points)); - update_values.push_back(columns[6] + " = " + std::to_string(titles_entry.class)); - update_values.push_back(columns[7] + " = " + std::to_string(titles_entry.gender)); - update_values.push_back(columns[8] + " = " + std::to_string(titles_entry.char_id)); - update_values.push_back(columns[9] + " = " + std::to_string(titles_entry.status)); - update_values.push_back(columns[10] + " = " + std::to_string(titles_entry.item_id)); - update_values.push_back(columns[11] + " = '" + EscapeString(titles_entry.prefix) + "'"); - update_values.push_back(columns[12] + " = '" + EscapeString(titles_entry.suffix) + "'"); - update_values.push_back(columns[13] + " = " + std::to_string(titles_entry.title_set)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - titles_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Titles InsertOne( - Titles titles_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(titles_entry.skill_id)); - insert_values.push_back(std::to_string(titles_entry.min_skill_value)); - insert_values.push_back(std::to_string(titles_entry.max_skill_value)); - insert_values.push_back(std::to_string(titles_entry.min_aa_points)); - insert_values.push_back(std::to_string(titles_entry.max_aa_points)); - insert_values.push_back(std::to_string(titles_entry.class)); - insert_values.push_back(std::to_string(titles_entry.gender)); - insert_values.push_back(std::to_string(titles_entry.char_id)); - insert_values.push_back(std::to_string(titles_entry.status)); - insert_values.push_back(std::to_string(titles_entry.item_id)); - insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); - insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); - insert_values.push_back(std::to_string(titles_entry.title_set)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - titles_entry.id = results.LastInsertedID(); - return titles_entry; - } - - titles_entry = TitlesRepository::NewEntity(); - - return titles_entry; - } - - static int InsertMany( - std::vector titles_entries - ) - { - std::vector insert_chunks; - - for (auto &titles_entry: titles_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(titles_entry.skill_id)); - insert_values.push_back(std::to_string(titles_entry.min_skill_value)); - insert_values.push_back(std::to_string(titles_entry.max_skill_value)); - insert_values.push_back(std::to_string(titles_entry.min_aa_points)); - insert_values.push_back(std::to_string(titles_entry.max_aa_points)); - insert_values.push_back(std::to_string(titles_entry.class)); - insert_values.push_back(std::to_string(titles_entry.gender)); - insert_values.push_back(std::to_string(titles_entry.char_id)); - insert_values.push_back(std::to_string(titles_entry.status)); - insert_values.push_back(std::to_string(titles_entry.item_id)); - insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); - insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); - insert_values.push_back(std::to_string(titles_entry.title_set)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Titles entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.min_skill_value = atoi(row[2]); - entry.max_skill_value = atoi(row[3]); - entry.min_aa_points = atoi(row[4]); - entry.max_aa_points = atoi(row[5]); - entry.class = atoi(row[6]); - entry.gender = atoi(row[7]); - entry.char_id = atoi(row[8]); - entry.status = atoi(row[9]); - entry.item_id = atoi(row[10]); - entry.prefix = row[11] ? row[11] : ""; - entry.suffix = row[12] ? row[12] : ""; - entry.title_set = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Titles entry{}; - - entry.id = atoi(row[0]); - entry.skill_id = atoi(row[1]); - entry.min_skill_value = atoi(row[2]); - entry.max_skill_value = atoi(row[3]); - entry.min_aa_points = atoi(row[4]); - entry.max_aa_points = atoi(row[5]); - entry.class = atoi(row[6]); - entry.gender = atoi(row[7]); - entry.char_id = atoi(row[8]); - entry.status = atoi(row[9]); - entry.item_id = atoi(row[10]); - entry.prefix = row[11] ? row[11] : ""; - entry.suffix = row[12] ? row[12] : ""; - entry.title_set = atoi(row[13]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h index 1b85cb55a..6dec07c82 100644 --- a/common/repositories/trader_repository.h +++ b/common/repositories/trader_repository.h @@ -23,308 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_trader_repository.h" -class TraderRepository { +class TraderRepository: public BaseTraderRepository { public: - struct Trader { - int char_id; - int item_id; - int serialnumber; - int charges; - int item_cost; - int8 slot_id; - }; - static std::string PrimaryKey() - { - return std::string("slot_id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TraderRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TraderRepository::GetWhereNeverExpires() + * TraderRepository::GetWhereXAndY() + * TraderRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "char_id", - "item_id", - "serialnumber", - "charges", - "item_cost", - "slot_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("trader"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Trader NewEntity() - { - Trader entry{}; - - entry.char_id = 0; - entry.item_id = 0; - entry.serialnumber = 0; - entry.charges = 0; - entry.item_cost = 0; - entry.slot_id = 0; - - return entry; - } - - static Trader GetTraderEntry( - const std::vector &traders, - int trader_id - ) - { - for (auto &trader : traders) { - if (trader.slot_id == trader_id) { - return trader; - } - } - - return NewEntity(); - } - - static Trader FindOne( - int trader_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - trader_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Trader entry{}; - - entry.char_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.serialnumber = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.item_cost = atoi(row[4]); - entry.slot_id = atoi(row[5]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int trader_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - trader_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Trader trader_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(trader_entry.item_id)); - update_values.push_back(columns[2] + " = " + std::to_string(trader_entry.serialnumber)); - update_values.push_back(columns[3] + " = " + std::to_string(trader_entry.charges)); - update_values.push_back(columns[4] + " = " + std::to_string(trader_entry.item_cost)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - trader_entry.slot_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Trader InsertOne( - Trader trader_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(trader_entry.item_id)); - insert_values.push_back(std::to_string(trader_entry.serialnumber)); - insert_values.push_back(std::to_string(trader_entry.charges)); - insert_values.push_back(std::to_string(trader_entry.item_cost)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - trader_entry.id = results.LastInsertedID(); - return trader_entry; - } - - trader_entry = TraderRepository::NewEntity(); - - return trader_entry; - } - - static int InsertMany( - std::vector trader_entries - ) - { - std::vector insert_chunks; - - for (auto &trader_entry: trader_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(trader_entry.item_id)); - insert_values.push_back(std::to_string(trader_entry.serialnumber)); - insert_values.push_back(std::to_string(trader_entry.charges)); - insert_values.push_back(std::to_string(trader_entry.item_cost)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Trader entry{}; - - entry.char_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.serialnumber = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.item_cost = atoi(row[4]); - entry.slot_id = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Trader entry{}; - - entry.char_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.serialnumber = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.item_cost = atoi(row[4]); - entry.slot_id = atoi(row[5]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/tradeskill_recipe_entries_repository.h b/common/repositories/tradeskill_recipe_entries_repository.h index 1e3131eb0..f09daa4ee 100644 --- a/common/repositories/tradeskill_recipe_entries_repository.h +++ b/common/repositories/tradeskill_recipe_entries_repository.h @@ -23,329 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tradeskill_recipe_entries_repository.h" -class TradeskillRecipeEntriesRepository { +class TradeskillRecipeEntriesRepository: public BaseTradeskillRecipeEntriesRepository { public: - struct TradeskillRecipeEntries { - int id; - int recipe_id; - int item_id; - int8 successcount; - int8 failcount; - int8 componentcount; - int8 salvagecount; - int8 iscontainer; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TradeskillRecipeEntriesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TradeskillRecipeEntriesRepository::GetWhereNeverExpires() + * TradeskillRecipeEntriesRepository::GetWhereXAndY() + * TradeskillRecipeEntriesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "recipe_id", - "item_id", - "successcount", - "failcount", - "componentcount", - "salvagecount", - "iscontainer", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("tradeskill_recipe_entries"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static TradeskillRecipeEntries NewEntity() - { - TradeskillRecipeEntries entry{}; - - entry.id = 0; - entry.recipe_id = 0; - entry.item_id = 0; - entry.successcount = 0; - entry.failcount = 0; - entry.componentcount = 1; - entry.salvagecount = 0; - entry.iscontainer = 0; - - return entry; - } - - static TradeskillRecipeEntries GetTradeskillRecipeEntriesEntry( - const std::vector &tradeskill_recipe_entriess, - int tradeskill_recipe_entries_id - ) - { - for (auto &tradeskill_recipe_entries : tradeskill_recipe_entriess) { - if (tradeskill_recipe_entries.id == tradeskill_recipe_entries_id) { - return tradeskill_recipe_entries; - } - } - - return NewEntity(); - } - - static TradeskillRecipeEntries FindOne( - int tradeskill_recipe_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - tradeskill_recipe_entries_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - TradeskillRecipeEntries entry{}; - - entry.id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.successcount = atoi(row[3]); - entry.failcount = atoi(row[4]); - entry.componentcount = atoi(row[5]); - entry.salvagecount = atoi(row[6]); - entry.iscontainer = atoi(row[7]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int tradeskill_recipe_entries_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tradeskill_recipe_entries_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - TradeskillRecipeEntries tradeskill_recipe_entries_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(tradeskill_recipe_entries_entry.recipe_id)); - update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entries_entry.item_id)); - update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entries_entry.successcount)); - update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entries_entry.failcount)); - update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entries_entry.componentcount)); - update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entries_entry.salvagecount)); - update_values.push_back(columns[7] + " = " + std::to_string(tradeskill_recipe_entries_entry.iscontainer)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tradeskill_recipe_entries_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static TradeskillRecipeEntries InsertOne( - TradeskillRecipeEntries tradeskill_recipe_entries_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tradeskill_recipe_entries_entry.id = results.LastInsertedID(); - return tradeskill_recipe_entries_entry; - } - - tradeskill_recipe_entries_entry = TradeskillRecipeEntriesRepository::NewEntity(); - - return tradeskill_recipe_entries_entry; - } - - static int InsertMany( - std::vector tradeskill_recipe_entries_entries - ) - { - std::vector insert_chunks; - - for (auto &tradeskill_recipe_entries_entry: tradeskill_recipe_entries_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.recipe_id)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.item_id)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.successcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.failcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.componentcount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.salvagecount)); - insert_values.push_back(std::to_string(tradeskill_recipe_entries_entry.iscontainer)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TradeskillRecipeEntries entry{}; - - entry.id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.successcount = atoi(row[3]); - entry.failcount = atoi(row[4]); - entry.componentcount = atoi(row[5]); - entry.salvagecount = atoi(row[6]); - entry.iscontainer = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TradeskillRecipeEntries entry{}; - - entry.id = atoi(row[0]); - entry.recipe_id = atoi(row[1]); - entry.item_id = atoi(row[2]); - entry.successcount = atoi(row[3]); - entry.failcount = atoi(row[4]); - entry.componentcount = atoi(row[5]); - entry.salvagecount = atoi(row[6]); - entry.iscontainer = atoi(row[7]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 3dcaded6c..92756baa5 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -23,446 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_traps_repository.h" -class TrapsRepository { +class TrapsRepository: public BaseTrapsRepository { public: - struct Traps { - int id; - std::string zone; - int16 version; - int x; - int y; - int z; - int8 chance; - float maxzdiff; - float radius; - int effect; - int effectvalue; - int effectvalue2; - std::string message; - int skill; - int level; - int respawn_time; - int respawn_var; - int8 triggered_number; - int8 group; - int8 despawn_when_triggered; - int8 undetectable; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TrapsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TrapsRepository::GetWhereNeverExpires() + * TrapsRepository::GetWhereXAndY() + * TrapsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "version", - "x", - "y", - "z", - "chance", - "maxzdiff", - "radius", - "effect", - "effectvalue", - "effectvalue2", - "message", - "skill", - "level", - "respawn_time", - "respawn_var", - "triggered_number", - "group", - "despawn_when_triggered", - "undetectable", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("traps"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Traps NewEntity() - { - Traps entry{}; - - entry.id = 0; - entry.zone = ""; - entry.version = 0; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.chance = 0; - entry.maxzdiff = 0; - entry.radius = 0; - entry.effect = 0; - entry.effectvalue = 0; - entry.effectvalue2 = 0; - entry.message = ""; - entry.skill = 0; - entry.level = 1; - entry.respawn_time = 60; - entry.respawn_var = 0; - entry.triggered_number = 0; - entry.group = 0; - entry.despawn_when_triggered = 0; - entry.undetectable = 0; - - return entry; - } - - static Traps GetTrapsEntry( - const std::vector &trapss, - int traps_id - ) - { - for (auto &traps : trapss) { - if (traps.id == traps_id) { - return traps; - } - } - - return NewEntity(); - } - - static Traps FindOne( - int traps_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - traps_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Traps entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.x = atoi(row[3]); - entry.y = atoi(row[4]); - entry.z = atoi(row[5]); - entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); - entry.effect = atoi(row[9]); - entry.effectvalue = atoi(row[10]); - entry.effectvalue2 = atoi(row[11]); - entry.message = row[12] ? row[12] : ""; - entry.skill = atoi(row[13]); - entry.level = atoi(row[14]); - entry.respawn_time = atoi(row[15]); - entry.respawn_var = atoi(row[16]); - entry.triggered_number = atoi(row[17]); - entry.group = atoi(row[18]); - entry.despawn_when_triggered = atoi(row[19]); - entry.undetectable = atoi(row[20]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int traps_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - traps_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Traps traps_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(traps_entry.zone) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(traps_entry.version)); - update_values.push_back(columns[3] + " = " + std::to_string(traps_entry.x)); - update_values.push_back(columns[4] + " = " + std::to_string(traps_entry.y)); - update_values.push_back(columns[5] + " = " + std::to_string(traps_entry.z)); - update_values.push_back(columns[6] + " = " + std::to_string(traps_entry.chance)); - update_values.push_back(columns[7] + " = " + std::to_string(traps_entry.maxzdiff)); - update_values.push_back(columns[8] + " = " + std::to_string(traps_entry.radius)); - update_values.push_back(columns[9] + " = " + std::to_string(traps_entry.effect)); - update_values.push_back(columns[10] + " = " + std::to_string(traps_entry.effectvalue)); - update_values.push_back(columns[11] + " = " + std::to_string(traps_entry.effectvalue2)); - update_values.push_back(columns[12] + " = '" + EscapeString(traps_entry.message) + "'"); - update_values.push_back(columns[13] + " = " + std::to_string(traps_entry.skill)); - update_values.push_back(columns[14] + " = " + std::to_string(traps_entry.level)); - update_values.push_back(columns[15] + " = " + std::to_string(traps_entry.respawn_time)); - update_values.push_back(columns[16] + " = " + std::to_string(traps_entry.respawn_var)); - update_values.push_back(columns[17] + " = " + std::to_string(traps_entry.triggered_number)); - update_values.push_back(columns[18] + " = " + std::to_string(traps_entry.group)); - update_values.push_back(columns[19] + " = " + std::to_string(traps_entry.despawn_when_triggered)); - update_values.push_back(columns[20] + " = " + std::to_string(traps_entry.undetectable)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - traps_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Traps InsertOne( - Traps traps_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); - insert_values.push_back(std::to_string(traps_entry.version)); - insert_values.push_back(std::to_string(traps_entry.x)); - insert_values.push_back(std::to_string(traps_entry.y)); - insert_values.push_back(std::to_string(traps_entry.z)); - insert_values.push_back(std::to_string(traps_entry.chance)); - insert_values.push_back(std::to_string(traps_entry.maxzdiff)); - insert_values.push_back(std::to_string(traps_entry.radius)); - insert_values.push_back(std::to_string(traps_entry.effect)); - insert_values.push_back(std::to_string(traps_entry.effectvalue)); - insert_values.push_back(std::to_string(traps_entry.effectvalue2)); - insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); - insert_values.push_back(std::to_string(traps_entry.skill)); - insert_values.push_back(std::to_string(traps_entry.level)); - insert_values.push_back(std::to_string(traps_entry.respawn_time)); - insert_values.push_back(std::to_string(traps_entry.respawn_var)); - insert_values.push_back(std::to_string(traps_entry.triggered_number)); - insert_values.push_back(std::to_string(traps_entry.group)); - insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); - insert_values.push_back(std::to_string(traps_entry.undetectable)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - traps_entry.id = results.LastInsertedID(); - return traps_entry; - } - - traps_entry = TrapsRepository::NewEntity(); - - return traps_entry; - } - - static int InsertMany( - std::vector traps_entries - ) - { - std::vector insert_chunks; - - for (auto &traps_entry: traps_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(traps_entry.zone) + "'"); - insert_values.push_back(std::to_string(traps_entry.version)); - insert_values.push_back(std::to_string(traps_entry.x)); - insert_values.push_back(std::to_string(traps_entry.y)); - insert_values.push_back(std::to_string(traps_entry.z)); - insert_values.push_back(std::to_string(traps_entry.chance)); - insert_values.push_back(std::to_string(traps_entry.maxzdiff)); - insert_values.push_back(std::to_string(traps_entry.radius)); - insert_values.push_back(std::to_string(traps_entry.effect)); - insert_values.push_back(std::to_string(traps_entry.effectvalue)); - insert_values.push_back(std::to_string(traps_entry.effectvalue2)); - insert_values.push_back("'" + EscapeString(traps_entry.message) + "'"); - insert_values.push_back(std::to_string(traps_entry.skill)); - insert_values.push_back(std::to_string(traps_entry.level)); - insert_values.push_back(std::to_string(traps_entry.respawn_time)); - insert_values.push_back(std::to_string(traps_entry.respawn_var)); - insert_values.push_back(std::to_string(traps_entry.triggered_number)); - insert_values.push_back(std::to_string(traps_entry.group)); - insert_values.push_back(std::to_string(traps_entry.despawn_when_triggered)); - insert_values.push_back(std::to_string(traps_entry.undetectable)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Traps entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.x = atoi(row[3]); - entry.y = atoi(row[4]); - entry.z = atoi(row[5]); - entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); - entry.effect = atoi(row[9]); - entry.effectvalue = atoi(row[10]); - entry.effectvalue2 = atoi(row[11]); - entry.message = row[12] ? row[12] : ""; - entry.skill = atoi(row[13]); - entry.level = atoi(row[14]); - entry.respawn_time = atoi(row[15]); - entry.respawn_var = atoi(row[16]); - entry.triggered_number = atoi(row[17]); - entry.group = atoi(row[18]); - entry.despawn_when_triggered = atoi(row[19]); - entry.undetectable = atoi(row[20]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Traps entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.x = atoi(row[3]); - entry.y = atoi(row[4]); - entry.z = atoi(row[5]); - entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); - entry.effect = atoi(row[9]); - entry.effectvalue = atoi(row[10]); - entry.effectvalue2 = atoi(row[11]); - entry.message = row[12] ? row[12] : ""; - entry.skill = atoi(row[13]); - entry.level = atoi(row[14]); - entry.respawn_time = atoi(row[15]); - entry.respawn_var = atoi(row[16]); - entry.triggered_number = atoi(row[17]); - entry.group = atoi(row[18]); - entry.despawn_when_triggered = atoi(row[19]); - entry.undetectable = atoi(row[20]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/tribute_levels_repository.h b/common/repositories/tribute_levels_repository.h index 9b2501606..ab6478fc3 100644 --- a/common/repositories/tribute_levels_repository.h +++ b/common/repositories/tribute_levels_repository.h @@ -23,290 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tribute_levels_repository.h" -class TributeLevelsRepository { +class TributeLevelsRepository: public BaseTributeLevelsRepository { public: - struct TributeLevels { - int tribute_id; - int level; - int cost; - int item_id; - }; - static std::string PrimaryKey() - { - return std::string("level"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TributeLevelsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TributeLevelsRepository::GetWhereNeverExpires() + * TributeLevelsRepository::GetWhereXAndY() + * TributeLevelsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "tribute_id", - "level", - "cost", - "item_id", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("tribute_levels"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static TributeLevels NewEntity() - { - TributeLevels entry{}; - - entry.tribute_id = 0; - entry.level = 0; - entry.cost = 0; - entry.item_id = 0; - - return entry; - } - - static TributeLevels GetTributeLevelsEntry( - const std::vector &tribute_levelss, - int tribute_levels_id - ) - { - for (auto &tribute_levels : tribute_levelss) { - if (tribute_levels.level == tribute_levels_id) { - return tribute_levels; - } - } - - return NewEntity(); - } - - static TributeLevels FindOne( - int tribute_levels_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - tribute_levels_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - TributeLevels entry{}; - - entry.tribute_id = atoi(row[0]); - entry.level = atoi(row[1]); - entry.cost = atoi(row[2]); - entry.item_id = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int tribute_levels_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tribute_levels_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - TributeLevels tribute_levels_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(tribute_levels_entry.cost)); - update_values.push_back(columns[3] + " = " + std::to_string(tribute_levels_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tribute_levels_entry.level - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static TributeLevels InsertOne( - TributeLevels tribute_levels_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(tribute_levels_entry.cost)); - insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tribute_levels_entry.id = results.LastInsertedID(); - return tribute_levels_entry; - } - - tribute_levels_entry = TributeLevelsRepository::NewEntity(); - - return tribute_levels_entry; - } - - static int InsertMany( - std::vector tribute_levels_entries - ) - { - std::vector insert_chunks; - - for (auto &tribute_levels_entry: tribute_levels_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(tribute_levels_entry.cost)); - insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TributeLevels entry{}; - - entry.tribute_id = atoi(row[0]); - entry.level = atoi(row[1]); - entry.cost = atoi(row[2]); - entry.item_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - TributeLevels entry{}; - - entry.tribute_id = atoi(row[0]); - entry.level = atoi(row[1]); - entry.cost = atoi(row[2]); - entry.item_id = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index e02d1a1e9..04a5a4239 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tributes_repository.h" -class TributesRepository { +class TributesRepository: public BaseTributesRepository { public: - struct Tributes { - int id; - int unknown; - std::string name; - std::string descr; - int8 isguild; - }; - static std::string PrimaryKey() - { - return std::string("isguild"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TributesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TributesRepository::GetWhereNeverExpires() + * TributesRepository::GetWhereXAndY() + * TributesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "unknown", - "name", - "descr", - "isguild", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("tributes"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Tributes NewEntity() - { - Tributes entry{}; - - entry.id = 0; - entry.unknown = 0; - entry.name = ""; - entry.descr = ""; - entry.isguild = 0; - - return entry; - } - - static Tributes GetTributesEntry( - const std::vector &tributess, - int tributes_id - ) - { - for (auto &tributes : tributess) { - if (tributes.isguild == tributes_id) { - return tributes; - } - } - - return NewEntity(); - } - - static Tributes FindOne( - int tributes_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - tributes_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Tributes entry{}; - - entry.id = atoi(row[0]); - entry.unknown = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.descr = row[3] ? row[3] : ""; - entry.isguild = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int tributes_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - tributes_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Tributes tributes_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(tributes_entry.unknown)); - update_values.push_back(columns[2] + " = '" + EscapeString(tributes_entry.name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(tributes_entry.descr) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - tributes_entry.isguild - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Tributes InsertOne( - Tributes tributes_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(tributes_entry.unknown)); - insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - tributes_entry.id = results.LastInsertedID(); - return tributes_entry; - } - - tributes_entry = TributesRepository::NewEntity(); - - return tributes_entry; - } - - static int InsertMany( - std::vector tributes_entries - ) - { - std::vector insert_chunks; - - for (auto &tributes_entry: tributes_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(tributes_entry.unknown)); - insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); - insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tributes entry{}; - - entry.id = atoi(row[0]); - entry.unknown = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.descr = row[3] ? row[3] : ""; - entry.isguild = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Tributes entry{}; - - entry.id = atoi(row[0]); - entry.unknown = atoi(row[1]); - entry.name = row[2] ? row[2] : ""; - entry.descr = row[3] ? row[3] : ""; - entry.isguild = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h index 2563bd1cc..1ed66d94b 100644 --- a/common/repositories/variables_repository.h +++ b/common/repositories/variables_repository.h @@ -23,293 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_variables_repository.h" -class VariablesRepository { +class VariablesRepository: public BaseVariablesRepository { public: - struct Variables { - std::string varname; - std::string value; - std::string information; - std::string ts; - }; - static std::string PrimaryKey() - { - return std::string("varname"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * VariablesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * VariablesRepository::GetWhereNeverExpires() + * VariablesRepository::GetWhereXAndY() + * VariablesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "varname", - "value", - "information", - "ts", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("variables"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Variables NewEntity() - { - Variables entry{}; - - entry.varname = ""; - entry.value = ""; - entry.information = ""; - entry.ts = current_timestamp(); - - return entry; - } - - static Variables GetVariablesEntry( - const std::vector &variabless, - int variables_id - ) - { - for (auto &variables : variabless) { - if (variables.varname == variables_id) { - return variables; - } - } - - return NewEntity(); - } - - static Variables FindOne( - int variables_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - variables_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Variables entry{}; - - entry.varname = row[0] ? row[0] : ""; - entry.value = row[1] ? row[1] : ""; - entry.information = row[2] ? row[2] : ""; - entry.ts = row[3] ? row[3] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int variables_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - variables_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Variables variables_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(variables_entry.value) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(variables_entry.information) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(variables_entry.ts) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - variables_entry.varname - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Variables InsertOne( - Variables variables_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); - insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); - insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - variables_entry.id = results.LastInsertedID(); - return variables_entry; - } - - variables_entry = VariablesRepository::NewEntity(); - - return variables_entry; - } - - static int InsertMany( - std::vector variables_entries - ) - { - std::vector insert_chunks; - - for (auto &variables_entry: variables_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); - insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); - insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Variables entry{}; - - entry.varname = row[0] ? row[0] : ""; - entry.value = row[1] ? row[1] : ""; - entry.information = row[2] ? row[2] : ""; - entry.ts = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Variables entry{}; - - entry.varname = row[0] ? row[0] : ""; - entry.value = row[1] ? row[1] : ""; - entry.information = row[2] ? row[2] : ""; - entry.ts = row[3] ? row[3] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 55dfbf592..38f53313c 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -23,299 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_veteran_reward_templates_repository.h" -class VeteranRewardTemplatesRepository { +class VeteranRewardTemplatesRepository: public BaseVeteranRewardTemplatesRepository { public: - struct VeteranRewardTemplates { - int claim_id; - std::string name; - int item_id; - int16 charges; - int8 reward_slot; - }; - static std::string PrimaryKey() - { - return std::string("reward_slot"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * VeteranRewardTemplatesRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * VeteranRewardTemplatesRepository::GetWhereNeverExpires() + * VeteranRewardTemplatesRepository::GetWhereXAndY() + * VeteranRewardTemplatesRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "claim_id", - "name", - "item_id", - "charges", - "reward_slot", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("veteran_reward_templates"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static VeteranRewardTemplates NewEntity() - { - VeteranRewardTemplates entry{}; - - entry.claim_id = 0; - entry.name = ""; - entry.item_id = 0; - entry.charges = 0; - entry.reward_slot = 0; - - return entry; - } - - static VeteranRewardTemplates GetVeteranRewardTemplatesEntry( - const std::vector &veteran_reward_templatess, - int veteran_reward_templates_id - ) - { - for (auto &veteran_reward_templates : veteran_reward_templatess) { - if (veteran_reward_templates.reward_slot == veteran_reward_templates_id) { - return veteran_reward_templates; - } - } - - return NewEntity(); - } - - static VeteranRewardTemplates FindOne( - int veteran_reward_templates_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - veteran_reward_templates_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - VeteranRewardTemplates entry{}; - - entry.claim_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.reward_slot = atoi(row[4]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int veteran_reward_templates_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - veteran_reward_templates_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - VeteranRewardTemplates veteran_reward_templates_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(veteran_reward_templates_entry.name) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(veteran_reward_templates_entry.item_id)); - update_values.push_back(columns[3] + " = " + std::to_string(veteran_reward_templates_entry.charges)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - veteran_reward_templates_entry.reward_slot - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static VeteranRewardTemplates InsertOne( - VeteranRewardTemplates veteran_reward_templates_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); - insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); - insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - veteran_reward_templates_entry.id = results.LastInsertedID(); - return veteran_reward_templates_entry; - } - - veteran_reward_templates_entry = VeteranRewardTemplatesRepository::NewEntity(); - - return veteran_reward_templates_entry; - } - - static int InsertMany( - std::vector veteran_reward_templates_entries - ) - { - std::vector insert_chunks; - - for (auto &veteran_reward_templates_entry: veteran_reward_templates_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); - insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); - insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - VeteranRewardTemplates entry{}; - - entry.claim_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.reward_slot = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - VeteranRewardTemplates entry{}; - - entry.claim_id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.item_id = atoi(row[2]); - entry.charges = atoi(row[3]); - entry.reward_slot = atoi(row[4]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index 1d9f76389..72ea29688 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -23,410 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_zone_points_repository.h" -class ZonePointsRepository { +class ZonePointsRepository: public BaseZonePointsRepository { public: - struct ZonePoints { - int id; - std::string zone; - int version; - int16 number; - float y; - float x; - float z; - float heading; - float target_y; - float target_x; - float target_z; - float target_heading; - int16 zoneinst; - int target_zone_id; - int target_instance; - float buffer; - int client_version_mask; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ZonePointsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ZonePointsRepository::GetWhereNeverExpires() + * ZonePointsRepository::GetWhereXAndY() + * ZonePointsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "id", - "zone", - "version", - "number", - "y", - "x", - "z", - "heading", - "target_y", - "target_x", - "target_z", - "target_heading", - "zoneinst", - "target_zone_id", - "target_instance", - "buffer", - "client_version_mask", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("zone_points"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static ZonePoints NewEntity() - { - ZonePoints entry{}; - - entry.id = 0; - entry.zone = ""; - entry.version = 0; - entry.number = 1; - entry.y = 0; - entry.x = 0; - entry.z = 0; - entry.heading = 0; - entry.target_y = 0; - entry.target_x = 0; - entry.target_z = 0; - entry.target_heading = 0; - entry.zoneinst = 0; - entry.target_zone_id = 0; - entry.target_instance = 0; - entry.buffer = 0; - entry.client_version_mask = 4294967295; - - return entry; - } - - static ZonePoints GetZonePointsEntry( - const std::vector &zone_pointss, - int zone_points_id - ) - { - for (auto &zone_points : zone_pointss) { - if (zone_points.id == zone_points_id) { - return zone_points; - } - } - - return NewEntity(); - } - - static ZonePoints FindOne( - int zone_points_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - zone_points_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - ZonePoints entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); - entry.client_version_mask = atoi(row[16]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int zone_points_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - zone_points_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - ZonePoints zone_points_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(zone_points_entry.zone) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(zone_points_entry.version)); - update_values.push_back(columns[3] + " = " + std::to_string(zone_points_entry.number)); - update_values.push_back(columns[4] + " = " + std::to_string(zone_points_entry.y)); - update_values.push_back(columns[5] + " = " + std::to_string(zone_points_entry.x)); - update_values.push_back(columns[6] + " = " + std::to_string(zone_points_entry.z)); - update_values.push_back(columns[7] + " = " + std::to_string(zone_points_entry.heading)); - update_values.push_back(columns[8] + " = " + std::to_string(zone_points_entry.target_y)); - update_values.push_back(columns[9] + " = " + std::to_string(zone_points_entry.target_x)); - update_values.push_back(columns[10] + " = " + std::to_string(zone_points_entry.target_z)); - update_values.push_back(columns[11] + " = " + std::to_string(zone_points_entry.target_heading)); - update_values.push_back(columns[12] + " = " + std::to_string(zone_points_entry.zoneinst)); - update_values.push_back(columns[13] + " = " + std::to_string(zone_points_entry.target_zone_id)); - update_values.push_back(columns[14] + " = " + std::to_string(zone_points_entry.target_instance)); - update_values.push_back(columns[15] + " = " + std::to_string(zone_points_entry.buffer)); - update_values.push_back(columns[16] + " = " + std::to_string(zone_points_entry.client_version_mask)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - zone_points_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static ZonePoints InsertOne( - ZonePoints zone_points_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); - insert_values.push_back(std::to_string(zone_points_entry.version)); - insert_values.push_back(std::to_string(zone_points_entry.number)); - insert_values.push_back(std::to_string(zone_points_entry.y)); - insert_values.push_back(std::to_string(zone_points_entry.x)); - insert_values.push_back(std::to_string(zone_points_entry.z)); - insert_values.push_back(std::to_string(zone_points_entry.heading)); - insert_values.push_back(std::to_string(zone_points_entry.target_y)); - insert_values.push_back(std::to_string(zone_points_entry.target_x)); - insert_values.push_back(std::to_string(zone_points_entry.target_z)); - insert_values.push_back(std::to_string(zone_points_entry.target_heading)); - insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); - insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); - insert_values.push_back(std::to_string(zone_points_entry.target_instance)); - insert_values.push_back(std::to_string(zone_points_entry.buffer)); - insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - zone_points_entry.id = results.LastInsertedID(); - return zone_points_entry; - } - - zone_points_entry = ZonePointsRepository::NewEntity(); - - return zone_points_entry; - } - - static int InsertMany( - std::vector zone_points_entries - ) - { - std::vector insert_chunks; - - for (auto &zone_points_entry: zone_points_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(zone_points_entry.zone) + "'"); - insert_values.push_back(std::to_string(zone_points_entry.version)); - insert_values.push_back(std::to_string(zone_points_entry.number)); - insert_values.push_back(std::to_string(zone_points_entry.y)); - insert_values.push_back(std::to_string(zone_points_entry.x)); - insert_values.push_back(std::to_string(zone_points_entry.z)); - insert_values.push_back(std::to_string(zone_points_entry.heading)); - insert_values.push_back(std::to_string(zone_points_entry.target_y)); - insert_values.push_back(std::to_string(zone_points_entry.target_x)); - insert_values.push_back(std::to_string(zone_points_entry.target_z)); - insert_values.push_back(std::to_string(zone_points_entry.target_heading)); - insert_values.push_back(std::to_string(zone_points_entry.zoneinst)); - insert_values.push_back(std::to_string(zone_points_entry.target_zone_id)); - insert_values.push_back(std::to_string(zone_points_entry.target_instance)); - insert_values.push_back(std::to_string(zone_points_entry.buffer)); - insert_values.push_back(std::to_string(zone_points_entry.client_version_mask)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ZonePoints entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); - entry.client_version_mask = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - ZonePoints entry{}; - - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); - entry.client_version_mask = atoi(row[16]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index d4f29fa65..4cdbf610c 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -23,1031 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_zone_repository.h" -class ZoneRepository { +class ZoneRepository: public BaseZoneRepository { public: - struct Zone { - std::string short_name; - int id; - std::string file_name; - std::string long_name; - std::string map_file_name; - float safe_x; - float safe_y; - float safe_z; - float graveyard_id; - int8 min_level; - int8 min_status; - int zoneidnumber; - int8 version; - int timezone; - int maxclients; - int ruleset; - std::string note; - float underworld; - float minclip; - float maxclip; - float fog_minclip; - float fog_maxclip; - int8 fog_blue; - int8 fog_red; - int8 fog_green; - int8 sky; - int8 ztype; - float zone_exp_multiplier; - float walkspeed; - int8 time_type; - int8 fog_red1; - int8 fog_green1; - int8 fog_blue1; - float fog_minclip1; - float fog_maxclip1; - int8 fog_red2; - int8 fog_green2; - int8 fog_blue2; - float fog_minclip2; - float fog_maxclip2; - int8 fog_red3; - int8 fog_green3; - int8 fog_blue3; - float fog_minclip3; - float fog_maxclip3; - int8 fog_red4; - int8 fog_green4; - int8 fog_blue4; - float fog_minclip4; - float fog_maxclip4; - float fog_density; - std::string flag_needed; - int8 canbind; - int8 cancombat; - int8 canlevitate; - int8 castoutdoor; - int8 hotzone; - int8 insttype; - int shutdowndelay; - int8 peqzone; - int8 expansion; - int8 suspendbuffs; - int rain_chance1; - int rain_chance2; - int rain_chance3; - int rain_chance4; - int rain_duration1; - int rain_duration2; - int rain_duration3; - int rain_duration4; - int snow_chance1; - int snow_chance2; - int snow_chance3; - int snow_chance4; - int snow_duration1; - int snow_duration2; - int snow_duration3; - int snow_duration4; - float gravity; - int type; - int8 skylock; - int fast_regen_hp; - int fast_regen_mana; - int fast_regen_endurance; - int npc_max_aggro_dist; - int max_movement_update_range; - }; - static std::string PrimaryKey() - { - return std::string("id"); - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ZoneRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ZoneRepository::GetWhereNeverExpires() + * ZoneRepository::GetWhereXAndY() + * ZoneRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::vector Columns() - { - return { - "short_name", - "id", - "file_name", - "long_name", - "map_file_name", - "safe_x", - "safe_y", - "safe_z", - "graveyard_id", - "min_level", - "min_status", - "zoneidnumber", - "version", - "timezone", - "maxclients", - "ruleset", - "note", - "underworld", - "minclip", - "maxclip", - "fog_minclip", - "fog_maxclip", - "fog_blue", - "fog_red", - "fog_green", - "sky", - "ztype", - "zone_exp_multiplier", - "walkspeed", - "time_type", - "fog_red1", - "fog_green1", - "fog_blue1", - "fog_minclip1", - "fog_maxclip1", - "fog_red2", - "fog_green2", - "fog_blue2", - "fog_minclip2", - "fog_maxclip2", - "fog_red3", - "fog_green3", - "fog_blue3", - "fog_minclip3", - "fog_maxclip3", - "fog_red4", - "fog_green4", - "fog_blue4", - "fog_minclip4", - "fog_maxclip4", - "fog_density", - "flag_needed", - "canbind", - "cancombat", - "canlevitate", - "castoutdoor", - "hotzone", - "insttype", - "shutdowndelay", - "peqzone", - "expansion", - "suspendbuffs", - "rain_chance1", - "rain_chance2", - "rain_chance3", - "rain_chance4", - "rain_duration1", - "rain_duration2", - "rain_duration3", - "rain_duration4", - "snow_chance1", - "snow_chance2", - "snow_chance3", - "snow_chance4", - "snow_duration1", - "snow_duration2", - "snow_duration3", - "snow_duration4", - "gravity", - "type", - "skylock", - "fast_regen_hp", - "fast_regen_mana", - "fast_regen_endurance", - "npc_max_aggro_dist", - "max_movement_update_range", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("zone"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Zone NewEntity() - { - Zone entry{}; - - entry.short_name = ""; - entry.id = 0; - entry.file_name = ""; - entry.long_name = ""; - entry.map_file_name = ""; - entry.safe_x = 0; - entry.safe_y = 0; - entry.safe_z = 0; - entry.graveyard_id = 0; - entry.min_level = 0; - entry.min_status = 0; - entry.zoneidnumber = 0; - entry.version = 0; - entry.timezone = 0; - entry.maxclients = 0; - entry.ruleset = 0; - entry.note = ""; - entry.underworld = 0; - entry.minclip = 450; - entry.maxclip = 450; - entry.fog_minclip = 450; - entry.fog_maxclip = 450; - entry.fog_blue = 0; - entry.fog_red = 0; - entry.fog_green = 0; - entry.sky = 1; - entry.ztype = 1; - entry.zone_exp_multiplier = 0.00; - entry.walkspeed = 0.4; - entry.time_type = 2; - entry.fog_red1 = 0; - entry.fog_green1 = 0; - entry.fog_blue1 = 0; - entry.fog_minclip1 = 450; - entry.fog_maxclip1 = 450; - entry.fog_red2 = 0; - entry.fog_green2 = 0; - entry.fog_blue2 = 0; - entry.fog_minclip2 = 450; - entry.fog_maxclip2 = 450; - entry.fog_red3 = 0; - entry.fog_green3 = 0; - entry.fog_blue3 = 0; - entry.fog_minclip3 = 450; - entry.fog_maxclip3 = 450; - entry.fog_red4 = 0; - entry.fog_green4 = 0; - entry.fog_blue4 = 0; - entry.fog_minclip4 = 450; - entry.fog_maxclip4 = 450; - entry.fog_density = 0; - entry.flag_needed = ""; - entry.canbind = 1; - entry.cancombat = 1; - entry.canlevitate = 1; - entry.castoutdoor = 1; - entry.hotzone = 0; - entry.insttype = 0; - entry.shutdowndelay = 5000; - entry.peqzone = 1; - entry.expansion = 0; - entry.suspendbuffs = 0; - entry.rain_chance1 = 0; - entry.rain_chance2 = 0; - entry.rain_chance3 = 0; - entry.rain_chance4 = 0; - entry.rain_duration1 = 0; - entry.rain_duration2 = 0; - entry.rain_duration3 = 0; - entry.rain_duration4 = 0; - entry.snow_chance1 = 0; - entry.snow_chance2 = 0; - entry.snow_chance3 = 0; - entry.snow_chance4 = 0; - entry.snow_duration1 = 0; - entry.snow_duration2 = 0; - entry.snow_duration3 = 0; - entry.snow_duration4 = 0; - entry.gravity = 0.4; - entry.type = 0; - entry.skylock = 0; - entry.fast_regen_hp = 180; - entry.fast_regen_mana = 180; - entry.fast_regen_endurance = 180; - entry.npc_max_aggro_dist = 600; - entry.max_movement_update_range = 600; - - return entry; - } - - static Zone GetZoneEntry( - const std::vector &zones, - int zone_id - ) - { - for (auto &zone : zones) { - if (zone.id == zone_id) { - return zone; - } - } - - return NewEntity(); - } - - static Zone FindOne( - int zone_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - zone_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Zone entry{}; - - entry.short_name = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.file_name = row[2] ? row[2] : ""; - entry.long_name = row[3] ? row[3] : ""; - entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); - entry.min_level = atoi(row[9]); - entry.min_status = atoi(row[10]); - entry.zoneidnumber = atoi(row[11]); - entry.version = atoi(row[12]); - entry.timezone = atoi(row[13]); - entry.maxclients = atoi(row[14]); - entry.ruleset = atoi(row[15]); - entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); - entry.fog_blue = atoi(row[22]); - entry.fog_red = atoi(row[23]); - entry.fog_green = atoi(row[24]); - entry.sky = atoi(row[25]); - entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); - entry.time_type = atoi(row[29]); - entry.fog_red1 = atoi(row[30]); - entry.fog_green1 = atoi(row[31]); - entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); - entry.fog_red2 = atoi(row[35]); - entry.fog_green2 = atoi(row[36]); - entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); - entry.fog_red3 = atoi(row[40]); - entry.fog_green3 = atoi(row[41]); - entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); - entry.fog_red4 = atoi(row[45]); - entry.fog_green4 = atoi(row[46]); - entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); - entry.flag_needed = row[51] ? row[51] : ""; - entry.canbind = atoi(row[52]); - entry.cancombat = atoi(row[53]); - entry.canlevitate = atoi(row[54]); - entry.castoutdoor = atoi(row[55]); - entry.hotzone = atoi(row[56]); - entry.insttype = atoi(row[57]); - entry.shutdowndelay = atoi(row[58]); - entry.peqzone = atoi(row[59]); - entry.expansion = atoi(row[60]); - entry.suspendbuffs = atoi(row[61]); - entry.rain_chance1 = atoi(row[62]); - entry.rain_chance2 = atoi(row[63]); - entry.rain_chance3 = atoi(row[64]); - entry.rain_chance4 = atoi(row[65]); - entry.rain_duration1 = atoi(row[66]); - entry.rain_duration2 = atoi(row[67]); - entry.rain_duration3 = atoi(row[68]); - entry.rain_duration4 = atoi(row[69]); - entry.snow_chance1 = atoi(row[70]); - entry.snow_chance2 = atoi(row[71]); - entry.snow_chance3 = atoi(row[72]); - entry.snow_chance4 = atoi(row[73]); - entry.snow_duration1 = atoi(row[74]); - entry.snow_duration2 = atoi(row[75]); - entry.snow_duration3 = atoi(row[76]); - entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); - entry.type = atoi(row[79]); - entry.skylock = atoi(row[80]); - entry.fast_regen_hp = atoi(row[81]); - entry.fast_regen_mana = atoi(row[82]); - entry.fast_regen_endurance = atoi(row[83]); - entry.npc_max_aggro_dist = atoi(row[84]); - entry.max_movement_update_range = atoi(row[85]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int zone_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - zone_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Zone zone_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = '" + EscapeString(zone_entry.short_name) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(zone_entry.file_name) + "'"); - update_values.push_back(columns[3] + " = '" + EscapeString(zone_entry.long_name) + "'"); - update_values.push_back(columns[4] + " = '" + EscapeString(zone_entry.map_file_name) + "'"); - update_values.push_back(columns[5] + " = " + std::to_string(zone_entry.safe_x)); - update_values.push_back(columns[6] + " = " + std::to_string(zone_entry.safe_y)); - update_values.push_back(columns[7] + " = " + std::to_string(zone_entry.safe_z)); - update_values.push_back(columns[8] + " = " + std::to_string(zone_entry.graveyard_id)); - update_values.push_back(columns[9] + " = " + std::to_string(zone_entry.min_level)); - update_values.push_back(columns[10] + " = " + std::to_string(zone_entry.min_status)); - update_values.push_back(columns[11] + " = " + std::to_string(zone_entry.zoneidnumber)); - update_values.push_back(columns[12] + " = " + std::to_string(zone_entry.version)); - update_values.push_back(columns[13] + " = " + std::to_string(zone_entry.timezone)); - update_values.push_back(columns[14] + " = " + std::to_string(zone_entry.maxclients)); - update_values.push_back(columns[15] + " = " + std::to_string(zone_entry.ruleset)); - update_values.push_back(columns[16] + " = '" + EscapeString(zone_entry.note) + "'"); - update_values.push_back(columns[17] + " = " + std::to_string(zone_entry.underworld)); - update_values.push_back(columns[18] + " = " + std::to_string(zone_entry.minclip)); - update_values.push_back(columns[19] + " = " + std::to_string(zone_entry.maxclip)); - update_values.push_back(columns[20] + " = " + std::to_string(zone_entry.fog_minclip)); - update_values.push_back(columns[21] + " = " + std::to_string(zone_entry.fog_maxclip)); - update_values.push_back(columns[22] + " = " + std::to_string(zone_entry.fog_blue)); - update_values.push_back(columns[23] + " = " + std::to_string(zone_entry.fog_red)); - update_values.push_back(columns[24] + " = " + std::to_string(zone_entry.fog_green)); - update_values.push_back(columns[25] + " = " + std::to_string(zone_entry.sky)); - update_values.push_back(columns[26] + " = " + std::to_string(zone_entry.ztype)); - update_values.push_back(columns[27] + " = " + std::to_string(zone_entry.zone_exp_multiplier)); - update_values.push_back(columns[28] + " = " + std::to_string(zone_entry.walkspeed)); - update_values.push_back(columns[29] + " = " + std::to_string(zone_entry.time_type)); - update_values.push_back(columns[30] + " = " + std::to_string(zone_entry.fog_red1)); - update_values.push_back(columns[31] + " = " + std::to_string(zone_entry.fog_green1)); - update_values.push_back(columns[32] + " = " + std::to_string(zone_entry.fog_blue1)); - update_values.push_back(columns[33] + " = " + std::to_string(zone_entry.fog_minclip1)); - update_values.push_back(columns[34] + " = " + std::to_string(zone_entry.fog_maxclip1)); - update_values.push_back(columns[35] + " = " + std::to_string(zone_entry.fog_red2)); - update_values.push_back(columns[36] + " = " + std::to_string(zone_entry.fog_green2)); - update_values.push_back(columns[37] + " = " + std::to_string(zone_entry.fog_blue2)); - update_values.push_back(columns[38] + " = " + std::to_string(zone_entry.fog_minclip2)); - update_values.push_back(columns[39] + " = " + std::to_string(zone_entry.fog_maxclip2)); - update_values.push_back(columns[40] + " = " + std::to_string(zone_entry.fog_red3)); - update_values.push_back(columns[41] + " = " + std::to_string(zone_entry.fog_green3)); - update_values.push_back(columns[42] + " = " + std::to_string(zone_entry.fog_blue3)); - update_values.push_back(columns[43] + " = " + std::to_string(zone_entry.fog_minclip3)); - update_values.push_back(columns[44] + " = " + std::to_string(zone_entry.fog_maxclip3)); - update_values.push_back(columns[45] + " = " + std::to_string(zone_entry.fog_red4)); - update_values.push_back(columns[46] + " = " + std::to_string(zone_entry.fog_green4)); - update_values.push_back(columns[47] + " = " + std::to_string(zone_entry.fog_blue4)); - update_values.push_back(columns[48] + " = " + std::to_string(zone_entry.fog_minclip4)); - update_values.push_back(columns[49] + " = " + std::to_string(zone_entry.fog_maxclip4)); - update_values.push_back(columns[50] + " = " + std::to_string(zone_entry.fog_density)); - update_values.push_back(columns[51] + " = '" + EscapeString(zone_entry.flag_needed) + "'"); - update_values.push_back(columns[52] + " = " + std::to_string(zone_entry.canbind)); - update_values.push_back(columns[53] + " = " + std::to_string(zone_entry.cancombat)); - update_values.push_back(columns[54] + " = " + std::to_string(zone_entry.canlevitate)); - update_values.push_back(columns[55] + " = " + std::to_string(zone_entry.castoutdoor)); - update_values.push_back(columns[56] + " = " + std::to_string(zone_entry.hotzone)); - update_values.push_back(columns[57] + " = " + std::to_string(zone_entry.insttype)); - update_values.push_back(columns[58] + " = " + std::to_string(zone_entry.shutdowndelay)); - update_values.push_back(columns[59] + " = " + std::to_string(zone_entry.peqzone)); - update_values.push_back(columns[60] + " = " + std::to_string(zone_entry.expansion)); - update_values.push_back(columns[61] + " = " + std::to_string(zone_entry.suspendbuffs)); - update_values.push_back(columns[62] + " = " + std::to_string(zone_entry.rain_chance1)); - update_values.push_back(columns[63] + " = " + std::to_string(zone_entry.rain_chance2)); - update_values.push_back(columns[64] + " = " + std::to_string(zone_entry.rain_chance3)); - update_values.push_back(columns[65] + " = " + std::to_string(zone_entry.rain_chance4)); - update_values.push_back(columns[66] + " = " + std::to_string(zone_entry.rain_duration1)); - update_values.push_back(columns[67] + " = " + std::to_string(zone_entry.rain_duration2)); - update_values.push_back(columns[68] + " = " + std::to_string(zone_entry.rain_duration3)); - update_values.push_back(columns[69] + " = " + std::to_string(zone_entry.rain_duration4)); - update_values.push_back(columns[70] + " = " + std::to_string(zone_entry.snow_chance1)); - update_values.push_back(columns[71] + " = " + std::to_string(zone_entry.snow_chance2)); - update_values.push_back(columns[72] + " = " + std::to_string(zone_entry.snow_chance3)); - update_values.push_back(columns[73] + " = " + std::to_string(zone_entry.snow_chance4)); - update_values.push_back(columns[74] + " = " + std::to_string(zone_entry.snow_duration1)); - update_values.push_back(columns[75] + " = " + std::to_string(zone_entry.snow_duration2)); - update_values.push_back(columns[76] + " = " + std::to_string(zone_entry.snow_duration3)); - update_values.push_back(columns[77] + " = " + std::to_string(zone_entry.snow_duration4)); - update_values.push_back(columns[78] + " = " + std::to_string(zone_entry.gravity)); - update_values.push_back(columns[79] + " = " + std::to_string(zone_entry.type)); - update_values.push_back(columns[80] + " = " + std::to_string(zone_entry.skylock)); - update_values.push_back(columns[81] + " = " + std::to_string(zone_entry.fast_regen_hp)); - update_values.push_back(columns[82] + " = " + std::to_string(zone_entry.fast_regen_mana)); - update_values.push_back(columns[83] + " = " + std::to_string(zone_entry.fast_regen_endurance)); - update_values.push_back(columns[84] + " = " + std::to_string(zone_entry.npc_max_aggro_dist)); - update_values.push_back(columns[85] + " = " + std::to_string(zone_entry.max_movement_update_range)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - zone_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Zone InsertOne( - Zone zone_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); - insert_values.push_back(std::to_string(zone_entry.safe_x)); - insert_values.push_back(std::to_string(zone_entry.safe_y)); - insert_values.push_back(std::to_string(zone_entry.safe_z)); - insert_values.push_back(std::to_string(zone_entry.graveyard_id)); - insert_values.push_back(std::to_string(zone_entry.min_level)); - insert_values.push_back(std::to_string(zone_entry.min_status)); - insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); - insert_values.push_back(std::to_string(zone_entry.version)); - insert_values.push_back(std::to_string(zone_entry.timezone)); - insert_values.push_back(std::to_string(zone_entry.maxclients)); - insert_values.push_back(std::to_string(zone_entry.ruleset)); - insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); - insert_values.push_back(std::to_string(zone_entry.underworld)); - insert_values.push_back(std::to_string(zone_entry.minclip)); - insert_values.push_back(std::to_string(zone_entry.maxclip)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); - insert_values.push_back(std::to_string(zone_entry.fog_blue)); - insert_values.push_back(std::to_string(zone_entry.fog_red)); - insert_values.push_back(std::to_string(zone_entry.fog_green)); - insert_values.push_back(std::to_string(zone_entry.sky)); - insert_values.push_back(std::to_string(zone_entry.ztype)); - insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); - insert_values.push_back(std::to_string(zone_entry.walkspeed)); - insert_values.push_back(std::to_string(zone_entry.time_type)); - insert_values.push_back(std::to_string(zone_entry.fog_red1)); - insert_values.push_back(std::to_string(zone_entry.fog_green1)); - insert_values.push_back(std::to_string(zone_entry.fog_blue1)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); - insert_values.push_back(std::to_string(zone_entry.fog_red2)); - insert_values.push_back(std::to_string(zone_entry.fog_green2)); - insert_values.push_back(std::to_string(zone_entry.fog_blue2)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); - insert_values.push_back(std::to_string(zone_entry.fog_red3)); - insert_values.push_back(std::to_string(zone_entry.fog_green3)); - insert_values.push_back(std::to_string(zone_entry.fog_blue3)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); - insert_values.push_back(std::to_string(zone_entry.fog_red4)); - insert_values.push_back(std::to_string(zone_entry.fog_green4)); - insert_values.push_back(std::to_string(zone_entry.fog_blue4)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); - insert_values.push_back(std::to_string(zone_entry.fog_density)); - insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); - insert_values.push_back(std::to_string(zone_entry.canbind)); - insert_values.push_back(std::to_string(zone_entry.cancombat)); - insert_values.push_back(std::to_string(zone_entry.canlevitate)); - insert_values.push_back(std::to_string(zone_entry.castoutdoor)); - insert_values.push_back(std::to_string(zone_entry.hotzone)); - insert_values.push_back(std::to_string(zone_entry.insttype)); - insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); - insert_values.push_back(std::to_string(zone_entry.peqzone)); - insert_values.push_back(std::to_string(zone_entry.expansion)); - insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); - insert_values.push_back(std::to_string(zone_entry.rain_chance1)); - insert_values.push_back(std::to_string(zone_entry.rain_chance2)); - insert_values.push_back(std::to_string(zone_entry.rain_chance3)); - insert_values.push_back(std::to_string(zone_entry.rain_chance4)); - insert_values.push_back(std::to_string(zone_entry.rain_duration1)); - insert_values.push_back(std::to_string(zone_entry.rain_duration2)); - insert_values.push_back(std::to_string(zone_entry.rain_duration3)); - insert_values.push_back(std::to_string(zone_entry.rain_duration4)); - insert_values.push_back(std::to_string(zone_entry.snow_chance1)); - insert_values.push_back(std::to_string(zone_entry.snow_chance2)); - insert_values.push_back(std::to_string(zone_entry.snow_chance3)); - insert_values.push_back(std::to_string(zone_entry.snow_chance4)); - insert_values.push_back(std::to_string(zone_entry.snow_duration1)); - insert_values.push_back(std::to_string(zone_entry.snow_duration2)); - insert_values.push_back(std::to_string(zone_entry.snow_duration3)); - insert_values.push_back(std::to_string(zone_entry.snow_duration4)); - insert_values.push_back(std::to_string(zone_entry.gravity)); - insert_values.push_back(std::to_string(zone_entry.type)); - insert_values.push_back(std::to_string(zone_entry.skylock)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); - insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); - insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - zone_entry.id = results.LastInsertedID(); - return zone_entry; - } - - zone_entry = ZoneRepository::NewEntity(); - - return zone_entry; - } - - static int InsertMany( - std::vector zone_entries - ) - { - std::vector insert_chunks; - - for (auto &zone_entry: zone_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(zone_entry.short_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.file_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.long_name) + "'"); - insert_values.push_back("'" + EscapeString(zone_entry.map_file_name) + "'"); - insert_values.push_back(std::to_string(zone_entry.safe_x)); - insert_values.push_back(std::to_string(zone_entry.safe_y)); - insert_values.push_back(std::to_string(zone_entry.safe_z)); - insert_values.push_back(std::to_string(zone_entry.graveyard_id)); - insert_values.push_back(std::to_string(zone_entry.min_level)); - insert_values.push_back(std::to_string(zone_entry.min_status)); - insert_values.push_back(std::to_string(zone_entry.zoneidnumber)); - insert_values.push_back(std::to_string(zone_entry.version)); - insert_values.push_back(std::to_string(zone_entry.timezone)); - insert_values.push_back(std::to_string(zone_entry.maxclients)); - insert_values.push_back(std::to_string(zone_entry.ruleset)); - insert_values.push_back("'" + EscapeString(zone_entry.note) + "'"); - insert_values.push_back(std::to_string(zone_entry.underworld)); - insert_values.push_back(std::to_string(zone_entry.minclip)); - insert_values.push_back(std::to_string(zone_entry.maxclip)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip)); - insert_values.push_back(std::to_string(zone_entry.fog_blue)); - insert_values.push_back(std::to_string(zone_entry.fog_red)); - insert_values.push_back(std::to_string(zone_entry.fog_green)); - insert_values.push_back(std::to_string(zone_entry.sky)); - insert_values.push_back(std::to_string(zone_entry.ztype)); - insert_values.push_back(std::to_string(zone_entry.zone_exp_multiplier)); - insert_values.push_back(std::to_string(zone_entry.walkspeed)); - insert_values.push_back(std::to_string(zone_entry.time_type)); - insert_values.push_back(std::to_string(zone_entry.fog_red1)); - insert_values.push_back(std::to_string(zone_entry.fog_green1)); - insert_values.push_back(std::to_string(zone_entry.fog_blue1)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip1)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip1)); - insert_values.push_back(std::to_string(zone_entry.fog_red2)); - insert_values.push_back(std::to_string(zone_entry.fog_green2)); - insert_values.push_back(std::to_string(zone_entry.fog_blue2)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip2)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip2)); - insert_values.push_back(std::to_string(zone_entry.fog_red3)); - insert_values.push_back(std::to_string(zone_entry.fog_green3)); - insert_values.push_back(std::to_string(zone_entry.fog_blue3)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip3)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip3)); - insert_values.push_back(std::to_string(zone_entry.fog_red4)); - insert_values.push_back(std::to_string(zone_entry.fog_green4)); - insert_values.push_back(std::to_string(zone_entry.fog_blue4)); - insert_values.push_back(std::to_string(zone_entry.fog_minclip4)); - insert_values.push_back(std::to_string(zone_entry.fog_maxclip4)); - insert_values.push_back(std::to_string(zone_entry.fog_density)); - insert_values.push_back("'" + EscapeString(zone_entry.flag_needed) + "'"); - insert_values.push_back(std::to_string(zone_entry.canbind)); - insert_values.push_back(std::to_string(zone_entry.cancombat)); - insert_values.push_back(std::to_string(zone_entry.canlevitate)); - insert_values.push_back(std::to_string(zone_entry.castoutdoor)); - insert_values.push_back(std::to_string(zone_entry.hotzone)); - insert_values.push_back(std::to_string(zone_entry.insttype)); - insert_values.push_back(std::to_string(zone_entry.shutdowndelay)); - insert_values.push_back(std::to_string(zone_entry.peqzone)); - insert_values.push_back(std::to_string(zone_entry.expansion)); - insert_values.push_back(std::to_string(zone_entry.suspendbuffs)); - insert_values.push_back(std::to_string(zone_entry.rain_chance1)); - insert_values.push_back(std::to_string(zone_entry.rain_chance2)); - insert_values.push_back(std::to_string(zone_entry.rain_chance3)); - insert_values.push_back(std::to_string(zone_entry.rain_chance4)); - insert_values.push_back(std::to_string(zone_entry.rain_duration1)); - insert_values.push_back(std::to_string(zone_entry.rain_duration2)); - insert_values.push_back(std::to_string(zone_entry.rain_duration3)); - insert_values.push_back(std::to_string(zone_entry.rain_duration4)); - insert_values.push_back(std::to_string(zone_entry.snow_chance1)); - insert_values.push_back(std::to_string(zone_entry.snow_chance2)); - insert_values.push_back(std::to_string(zone_entry.snow_chance3)); - insert_values.push_back(std::to_string(zone_entry.snow_chance4)); - insert_values.push_back(std::to_string(zone_entry.snow_duration1)); - insert_values.push_back(std::to_string(zone_entry.snow_duration2)); - insert_values.push_back(std::to_string(zone_entry.snow_duration3)); - insert_values.push_back(std::to_string(zone_entry.snow_duration4)); - insert_values.push_back(std::to_string(zone_entry.gravity)); - insert_values.push_back(std::to_string(zone_entry.type)); - insert_values.push_back(std::to_string(zone_entry.skylock)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_hp)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_mana)); - insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); - insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); - insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Zone entry{}; - - entry.short_name = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.file_name = row[2] ? row[2] : ""; - entry.long_name = row[3] ? row[3] : ""; - entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); - entry.min_level = atoi(row[9]); - entry.min_status = atoi(row[10]); - entry.zoneidnumber = atoi(row[11]); - entry.version = atoi(row[12]); - entry.timezone = atoi(row[13]); - entry.maxclients = atoi(row[14]); - entry.ruleset = atoi(row[15]); - entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); - entry.fog_blue = atoi(row[22]); - entry.fog_red = atoi(row[23]); - entry.fog_green = atoi(row[24]); - entry.sky = atoi(row[25]); - entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); - entry.time_type = atoi(row[29]); - entry.fog_red1 = atoi(row[30]); - entry.fog_green1 = atoi(row[31]); - entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); - entry.fog_red2 = atoi(row[35]); - entry.fog_green2 = atoi(row[36]); - entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); - entry.fog_red3 = atoi(row[40]); - entry.fog_green3 = atoi(row[41]); - entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); - entry.fog_red4 = atoi(row[45]); - entry.fog_green4 = atoi(row[46]); - entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); - entry.flag_needed = row[51] ? row[51] : ""; - entry.canbind = atoi(row[52]); - entry.cancombat = atoi(row[53]); - entry.canlevitate = atoi(row[54]); - entry.castoutdoor = atoi(row[55]); - entry.hotzone = atoi(row[56]); - entry.insttype = atoi(row[57]); - entry.shutdowndelay = atoi(row[58]); - entry.peqzone = atoi(row[59]); - entry.expansion = atoi(row[60]); - entry.suspendbuffs = atoi(row[61]); - entry.rain_chance1 = atoi(row[62]); - entry.rain_chance2 = atoi(row[63]); - entry.rain_chance3 = atoi(row[64]); - entry.rain_chance4 = atoi(row[65]); - entry.rain_duration1 = atoi(row[66]); - entry.rain_duration2 = atoi(row[67]); - entry.rain_duration3 = atoi(row[68]); - entry.rain_duration4 = atoi(row[69]); - entry.snow_chance1 = atoi(row[70]); - entry.snow_chance2 = atoi(row[71]); - entry.snow_chance3 = atoi(row[72]); - entry.snow_chance4 = atoi(row[73]); - entry.snow_duration1 = atoi(row[74]); - entry.snow_duration2 = atoi(row[75]); - entry.snow_duration3 = atoi(row[76]); - entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); - entry.type = atoi(row[79]); - entry.skylock = atoi(row[80]); - entry.fast_regen_hp = atoi(row[81]); - entry.fast_regen_mana = atoi(row[82]); - entry.fast_regen_endurance = atoi(row[83]); - entry.npc_max_aggro_dist = atoi(row[84]); - entry.max_movement_update_range = atoi(row[85]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Zone entry{}; - - entry.short_name = row[0] ? row[0] : ""; - entry.id = atoi(row[1]); - entry.file_name = row[2] ? row[2] : ""; - entry.long_name = row[3] ? row[3] : ""; - entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); - entry.min_level = atoi(row[9]); - entry.min_status = atoi(row[10]); - entry.zoneidnumber = atoi(row[11]); - entry.version = atoi(row[12]); - entry.timezone = atoi(row[13]); - entry.maxclients = atoi(row[14]); - entry.ruleset = atoi(row[15]); - entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); - entry.fog_blue = atoi(row[22]); - entry.fog_red = atoi(row[23]); - entry.fog_green = atoi(row[24]); - entry.sky = atoi(row[25]); - entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); - entry.time_type = atoi(row[29]); - entry.fog_red1 = atoi(row[30]); - entry.fog_green1 = atoi(row[31]); - entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); - entry.fog_red2 = atoi(row[35]); - entry.fog_green2 = atoi(row[36]); - entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); - entry.fog_red3 = atoi(row[40]); - entry.fog_green3 = atoi(row[41]); - entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); - entry.fog_red4 = atoi(row[45]); - entry.fog_green4 = atoi(row[46]); - entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); - entry.flag_needed = row[51] ? row[51] : ""; - entry.canbind = atoi(row[52]); - entry.cancombat = atoi(row[53]); - entry.canlevitate = atoi(row[54]); - entry.castoutdoor = atoi(row[55]); - entry.hotzone = atoi(row[56]); - entry.insttype = atoi(row[57]); - entry.shutdowndelay = atoi(row[58]); - entry.peqzone = atoi(row[59]); - entry.expansion = atoi(row[60]); - entry.suspendbuffs = atoi(row[61]); - entry.rain_chance1 = atoi(row[62]); - entry.rain_chance2 = atoi(row[63]); - entry.rain_chance3 = atoi(row[64]); - entry.rain_chance4 = atoi(row[65]); - entry.rain_duration1 = atoi(row[66]); - entry.rain_duration2 = atoi(row[67]); - entry.rain_duration3 = atoi(row[68]); - entry.rain_duration4 = atoi(row[69]); - entry.snow_chance1 = atoi(row[70]); - entry.snow_chance2 = atoi(row[71]); - entry.snow_chance3 = atoi(row[72]); - entry.snow_chance4 = atoi(row[73]); - entry.snow_duration1 = atoi(row[74]); - entry.snow_duration2 = atoi(row[75]); - entry.snow_duration3 = atoi(row[76]); - entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); - entry.type = atoi(row[79]); - entry.skylock = atoi(row[80]); - entry.fast_regen_hp = atoi(row[81]); - entry.fast_regen_mana = atoi(row[82]); - entry.fast_regen_endurance = atoi(row[83]); - entry.npc_max_aggro_dist = atoi(row[84]); - entry.max_movement_update_range = atoi(row[85]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } + // Custom extended repository methods here }; diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index cfaf46b42..fca540a3b 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -99,7 +99,8 @@ if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { } } -my $generated_repository_files = ""; +my $generated_base_repository_files = ""; +my $generated_repository_files = ""; foreach my $table_to_generate (@tables) { @@ -117,9 +118,9 @@ foreach my $table_to_generate (@tables) { # These tables don't have a typical schema my @table_ignore_list = ( "character_enabledtasks", - "grid", # Manually created - "grid_entries", # Manually created - "tradeskill_recipe", # Manually created + "grid", # Manually created + "grid_entries", # Manually created + "tradeskill_recipe", # Manually created "character_recipe_list", # Manually created "guild_bank", "inventory_versions", @@ -212,13 +213,13 @@ foreach my $table_to_generate (@tables) { my $column_key = $row[5]; my $column_default = ($row[6] ? $row[6] : ""); - if ($column_key eq "PRI" || ($ordinal_position == 0 && $column_name=~/id/i)) { + if ($column_key eq "PRI" || ($ordinal_position == 0 && $column_name =~ /id/i)) { $table_primary_key{$table_name} = $column_name; } my $default_value = 0; if ($column_default ne "NULL" && $column_default ne "") { - $column_default=~s/'/"/g; + $column_default =~ s/'/"/g; $default_value = $column_default; } elsif ($column_default eq "''") { @@ -285,6 +286,26 @@ foreach my $table_to_generate (@tables) { $index++; } + ############################################# + # base repository template + ############################################# + my $base_repository_template_file = './common/repositories/template/base_repository.template'; + my $base_repository_template = ""; + if (-e $base_repository_template_file) { + open(my $fh, '<:encoding(UTF-8)', $base_repository_template_file) or die "Could not open file '$base_repository_template_file' $!"; + + while (my $line = <$fh>) { + $base_repository_template .= $line; + } + + close $fh; + } + + if (trim($base_repository_template) eq "") { + print "Base repository template not found! [$repository_template_file]\n"; + exit; + } + ############################################# # repository template ############################################# @@ -300,21 +321,11 @@ foreach my $table_to_generate (@tables) { close $fh; } - if (trim($repository_template) eq "") { + if (trim($repository_template_file) eq "") { print "Repository template not found! [$repository_template_file]\n"; exit; } - foreach my $column (keys %{$table_data{$table_to_generate}}) { - my $column_data = $table_data{$table_to_generate}{$column}; - my $data_type = $column_data->[0]; - my $column_type = $column_data->[1]; - my $ordinal_position = $column_data->[2]; - my $column_default = $column_data->[3]; - - # print "Column [$column] data_type [$data_type] column_type [$column_type] ordinal [$ordinal_position]\n"; - } - my $table_name_camel_case = $table_to_generate; my $table_name_upper_case = uc($table_to_generate); $table_name_camel_case =~ s#(_|^)(.)#\u$2#g; @@ -333,13 +344,34 @@ foreach my $table_to_generate (@tables) { chomp($insert_many_entries); chomp($all_entries); + use POSIX qw(strftime); + my $generated_date = strftime "%b%e, %Y", localtime; + print "Table name CamelCase [$table_name_camel_case]\n"; print "Table name UPPER_CASE [$table_name_upper_case]\n"; print "Table PRIMARY KEY [$primary_key]\n"; print "Database connection [$database_connection]\n"; - my $new_repository = $repository_template; + # Base repository + my $new_base_repository = $base_repository_template; + $new_base_repository =~ s/\{\{TABLE_NAME_CLASS}}/$table_name_camel_case/g; + $new_base_repository =~ s/\{\{TABLE_NAME_UPPER}}/$table_name_upper_case/g; + $new_base_repository =~ s/\{\{PRIMARY_KEY_STRING}}/$primary_key/g; + $new_base_repository =~ s/\{\{TABLE_NAME_STRUCT}}/$table_name_camel_case/g; + $new_base_repository =~ s/\{\{TABLE_NAME_VAR}}/$table_to_generate/g; + $new_base_repository =~ s/\{\{DATABASE_CONNECTION}}/$database_connection/g; + $new_base_repository =~ s/\{\{DEFAULT_ENTRIES}}/$default_entries/g; + $new_base_repository =~ s/\{\{COLUMNS_LIST_QUOTED}}/$column_names_quoted/g; + $new_base_repository =~ s/\{\{TABLE_STRUCT_COLUMNS}}/$table_struct_columns/g; + $new_base_repository =~ s/\{\{FIND_ONE_ENTRIES}}/$find_one_entries/g; + $new_base_repository =~ s/\{\{UPDATE_ONE_ENTRIES}}/$update_one_entries/g; + $new_base_repository =~ s/\{\{INSERT_ONE_ENTRIES}}/$insert_one_entries/g; + $new_base_repository =~ s/\{\{INSERT_MANY_ENTRIES}}/$insert_many_entries/g; + $new_base_repository =~ s/\{\{ALL_ENTRIES}}/$all_entries/g; + $new_base_repository =~ s/\{\{GENERATED_DATE}}/$generated_date/g; + # Extended repository + my $new_repository = $repository_template; $new_repository =~ s/\{\{TABLE_NAME_CLASS}}/$table_name_camel_case/g; $new_repository =~ s/\{\{TABLE_NAME_UPPER}}/$table_name_upper_case/g; $new_repository =~ s/\{\{PRIMARY_KEY_STRING}}/$primary_key/g; @@ -354,25 +386,41 @@ foreach my $table_to_generate (@tables) { $new_repository =~ s/\{\{INSERT_ONE_ENTRIES}}/$insert_one_entries/g; $new_repository =~ s/\{\{INSERT_MANY_ENTRIES}}/$insert_many_entries/g; $new_repository =~ s/\{\{ALL_ENTRIES}}/$all_entries/g; + $new_repository =~ s/\{\{GENERATED_DATE}}/$generated_date/g; + print $new_base_repository; print $new_repository; + ############################################# + # write base repository + ############################################# + my $generated_base_repository = './common/repositories/base/base_' . $table_to_generate . '_repository.h'; + my $cmake_generated_base_reference = $generated_base_repository; + $cmake_generated_base_reference =~ s/.\/common\///g; + $generated_base_repository_files .= $cmake_generated_base_reference . "\n"; + open(FH, '>', $generated_base_repository) or die $!; + print FH $new_base_repository; + close(FH); + + ############################################# + # write repository + ############################################# my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; my $cmake_generated_reference = $generated_repository; - $cmake_generated_reference =~ s/.\/common\///g; - $generated_repository_files .= $cmake_generated_reference . "\n"; - open(FH, '>', $generated_repository) or die $!; - print FH $new_repository; - close(FH); + } print "\n# Make sure to add generated repositories to common/CMakeLists.txt under the repositories section\n\n"; +print "\n#Base repository files\n"; +print $generated_base_repository_files . "\n"; + +print "\n#repository files\n"; print $generated_repository_files . "\n"; sub trim { From 725ad9ddf53775ee2f4c210c8a5e4b79e6936d53 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 22:23:29 -0500 Subject: [PATCH 092/272] Fix comment formatting [skip ci] --- common/repositories/aa_ability_repository.h | 24 +++++++++---------- .../repositories/aa_rank_effects_repository.h | 24 +++++++++---------- .../repositories/aa_rank_prereqs_repository.h | 24 +++++++++---------- common/repositories/aa_ranks_repository.h | 24 +++++++++---------- .../repositories/account_flags_repository.h | 24 +++++++++---------- common/repositories/account_ip_repository.h | 24 +++++++++---------- common/repositories/account_repository.h | 24 +++++++++---------- .../repositories/account_rewards_repository.h | 24 +++++++++---------- .../adventure_details_repository.h | 24 +++++++++---------- .../adventure_members_repository.h | 24 +++++++++---------- .../repositories/adventure_stats_repository.h | 24 +++++++++---------- ...venture_template_entry_flavor_repository.h | 24 +++++++++---------- .../adventure_template_entry_repository.h | 24 +++++++++---------- .../adventure_template_repository.h | 24 +++++++++---------- .../alternate_currency_repository.h | 24 +++++++++---------- common/repositories/auras_repository.h | 24 +++++++++---------- common/repositories/banned_ips_repository.h | 24 +++++++++---------- common/repositories/base_data_repository.h | 24 +++++++++---------- .../repositories/blocked_spells_repository.h | 24 +++++++++---------- common/repositories/books_repository.h | 24 +++++++++---------- common/repositories/bug_reports_repository.h | 24 +++++++++---------- common/repositories/bugs_repository.h | 24 +++++++++---------- common/repositories/buyer_repository.h | 24 +++++++++---------- .../char_create_combinations_repository.h | 24 +++++++++---------- ...char_create_point_allocations_repository.h | 24 +++++++++---------- .../char_recipe_list_repository.h | 24 +++++++++---------- .../character_activities_repository.h | 24 +++++++++---------- .../character_alt_currency_repository.h | 24 +++++++++---------- ...character_alternate_abilities_repository.h | 24 +++++++++---------- .../repositories/character_auras_repository.h | 24 +++++++++---------- .../character_bandolier_repository.h | 24 +++++++++---------- .../repositories/character_bind_repository.h | 24 +++++++++---------- .../repositories/character_buffs_repository.h | 24 +++++++++---------- .../character_corpse_items_repository.h | 24 +++++++++---------- .../character_corpses_repository.h | 24 +++++++++---------- .../character_currency_repository.h | 24 +++++++++---------- .../repositories/character_data_repository.h | 24 +++++++++---------- .../character_disciplines_repository.h | 24 +++++++++---------- .../character_inspect_messages_repository.h | 24 +++++++++---------- .../character_item_recast_repository.h | 24 +++++++++---------- .../character_languages_repository.h | 24 +++++++++---------- ...haracter_leadership_abilities_repository.h | 24 +++++++++---------- .../character_material_repository.h | 24 +++++++++---------- .../character_memmed_spells_repository.h | 24 +++++++++---------- .../character_pet_buffs_repository.h | 24 +++++++++---------- .../character_pet_info_repository.h | 24 +++++++++---------- .../character_pet_inventory_repository.h | 24 +++++++++---------- .../character_potionbelt_repository.h | 24 +++++++++---------- .../character_skills_repository.h | 24 +++++++++---------- .../character_spells_repository.h | 24 +++++++++---------- .../repositories/character_tasks_repository.h | 24 +++++++++---------- .../character_tribute_repository.h | 24 +++++++++---------- common/repositories/chatchannels_repository.h | 24 +++++++++---------- .../command_settings_repository.h | 24 +++++++++---------- .../repositories/completed_tasks_repository.h | 24 +++++++++---------- common/repositories/data_buckets_repository.h | 24 +++++++++---------- common/repositories/db_str_repository.h | 24 +++++++++---------- .../discovered_items_repository.h | 24 +++++++++---------- common/repositories/doors_repository.h | 24 +++++++++---------- common/repositories/eventlog_repository.h | 24 +++++++++---------- .../faction_base_data_repository.h | 24 +++++++++---------- .../faction_list_mod_repository.h | 24 +++++++++---------- common/repositories/faction_list_repository.h | 24 +++++++++---------- .../repositories/faction_values_repository.h | 24 +++++++++---------- common/repositories/fishing_repository.h | 24 +++++++++---------- common/repositories/forage_repository.h | 24 +++++++++---------- common/repositories/friends_repository.h | 24 +++++++++---------- common/repositories/global_loot_repository.h | 24 +++++++++---------- common/repositories/gm_ips_repository.h | 24 +++++++++---------- common/repositories/goallists_repository.h | 24 +++++++++---------- common/repositories/graveyard_repository.h | 24 +++++++++---------- .../repositories/ground_spawns_repository.h | 24 +++++++++---------- common/repositories/group_id_repository.h | 24 +++++++++---------- .../repositories/group_leaders_repository.h | 24 +++++++++---------- .../repositories/guild_members_repository.h | 24 +++++++++---------- common/repositories/guild_ranks_repository.h | 24 +++++++++---------- .../repositories/guild_relations_repository.h | 24 +++++++++---------- common/repositories/guilds_repository.h | 24 +++++++++---------- common/repositories/hackers_repository.h | 24 +++++++++---------- common/repositories/horses_repository.h | 24 +++++++++---------- .../instance_list_player_repository.h | 24 +++++++++---------- .../repositories/instance_list_repository.h | 24 +++++++++---------- common/repositories/inventory_repository.h | 24 +++++++++---------- .../inventory_snapshots_repository.h | 24 +++++++++---------- .../repositories/ip_exemptions_repository.h | 24 +++++++++---------- common/repositories/item_tick_repository.h | 24 +++++++++---------- common/repositories/items_repository.h | 24 +++++++++---------- common/repositories/launcher_repository.h | 24 +++++++++---------- .../repositories/launcher_zones_repository.h | 24 +++++++++---------- .../ldon_trap_entries_repository.h | 24 +++++++++---------- .../ldon_trap_templates_repository.h | 24 +++++++++---------- .../repositories/level_exp_mods_repository.h | 24 +++++++++---------- common/repositories/lfguild_repository.h | 24 +++++++++---------- .../repositories/login_accounts_repository.h | 24 +++++++++---------- .../login_api_tokens_repository.h | 24 +++++++++---------- .../login_server_admins_repository.h | 24 +++++++++---------- .../login_server_list_types_repository.h | 24 +++++++++---------- .../login_world_servers_repository.h | 24 +++++++++---------- .../logsys_categories_repository.h | 24 +++++++++---------- .../lootdrop_entries_repository.h | 24 +++++++++---------- common/repositories/lootdrop_repository.h | 24 +++++++++---------- .../loottable_entries_repository.h | 24 +++++++++---------- common/repositories/loottable_repository.h | 24 +++++++++---------- common/repositories/mail_repository.h | 24 +++++++++---------- common/repositories/merchantlist_repository.h | 24 +++++++++---------- .../merchantlist_temp_repository.h | 24 +++++++++---------- common/repositories/name_filter_repository.h | 24 +++++++++---------- common/repositories/npc_emotes_repository.h | 24 +++++++++---------- .../npc_faction_entries_repository.h | 24 +++++++++---------- common/repositories/npc_faction_repository.h | 24 +++++++++---------- .../npc_scale_global_base_repository.h | 24 +++++++++---------- .../npc_spells_effects_entries_repository.h | 24 +++++++++---------- .../npc_spells_effects_repository.h | 24 +++++++++---------- .../npc_spells_entries_repository.h | 24 +++++++++---------- common/repositories/npc_spells_repository.h | 24 +++++++++---------- common/repositories/npc_types_repository.h | 24 +++++++++---------- .../repositories/npc_types_tint_repository.h | 24 +++++++++---------- .../repositories/object_contents_repository.h | 24 +++++++++---------- common/repositories/object_repository.h | 24 +++++++++---------- .../perl_event_export_settings_repository.h | 24 +++++++++---------- common/repositories/petitions_repository.h | 24 +++++++++---------- .../pets_equipmentset_entries_repository.h | 24 +++++++++---------- .../pets_equipmentset_repository.h | 24 +++++++++---------- common/repositories/pets_repository.h | 24 +++++++++---------- .../player_titlesets_repository.h | 24 +++++++++---------- common/repositories/proximities_repository.h | 24 +++++++++---------- .../repositories/quest_globals_repository.h | 24 +++++++++---------- common/repositories/raid_details_repository.h | 24 +++++++++---------- common/repositories/raid_members_repository.h | 24 +++++++++---------- common/repositories/reports_repository.h | 24 +++++++++---------- .../repositories/respawn_times_repository.h | 24 +++++++++---------- common/repositories/rule_sets_repository.h | 24 +++++++++---------- common/repositories/rule_values_repository.h | 24 +++++++++---------- common/repositories/saylink_repository.h | 24 +++++++++---------- common/repositories/skill_caps_repository.h | 24 +++++++++---------- common/repositories/spawn2_repository.h | 24 +++++++++---------- .../spawn_condition_values_repository.h | 24 +++++++++---------- .../spawn_conditions_repository.h | 24 +++++++++---------- common/repositories/spawn_events_repository.h | 24 +++++++++---------- common/repositories/spawnentry_repository.h | 24 +++++++++---------- common/repositories/spawngroup_repository.h | 24 +++++++++---------- .../repositories/spell_buckets_repository.h | 24 +++++++++---------- .../repositories/spell_globals_repository.h | 24 +++++++++---------- common/repositories/spells_new_repository.h | 24 +++++++++---------- common/repositories/start_zones_repository.h | 24 +++++++++---------- .../repositories/starting_items_repository.h | 24 +++++++++---------- .../repositories/task_activities_repository.h | 24 +++++++++---------- common/repositories/tasks_repository.h | 24 +++++++++---------- common/repositories/tasksets_repository.h | 24 +++++++++---------- .../repositories/template/repository.template | 24 +++++++++---------- common/repositories/timers_repository.h | 24 +++++++++---------- common/repositories/titles_repository.h | 24 +++++++++---------- common/repositories/trader_repository.h | 24 +++++++++---------- .../tradeskill_recipe_entries_repository.h | 24 +++++++++---------- common/repositories/traps_repository.h | 24 +++++++++---------- .../repositories/tribute_levels_repository.h | 24 +++++++++---------- common/repositories/tributes_repository.h | 24 +++++++++---------- common/repositories/variables_repository.h | 24 +++++++++---------- .../veteran_reward_templates_repository.h | 24 +++++++++---------- common/repositories/zone_points_repository.h | 24 +++++++++---------- common/repositories/zone_repository.h | 24 +++++++++---------- 161 files changed, 1932 insertions(+), 1932 deletions(-) diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index 7d732562b..c8d096e8e 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -28,18 +28,18 @@ class AaAbilityRepository: public BaseAaAbilityRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/aa_rank_effects_repository.h b/common/repositories/aa_rank_effects_repository.h index 0f7799ab6..df283fb1f 100644 --- a/common/repositories/aa_rank_effects_repository.h +++ b/common/repositories/aa_rank_effects_repository.h @@ -28,18 +28,18 @@ class AaRankEffectsRepository: public BaseAaRankEffectsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/aa_rank_prereqs_repository.h b/common/repositories/aa_rank_prereqs_repository.h index fe375ce0b..dafb1c4d8 100644 --- a/common/repositories/aa_rank_prereqs_repository.h +++ b/common/repositories/aa_rank_prereqs_repository.h @@ -28,18 +28,18 @@ class AaRankPrereqsRepository: public BaseAaRankPrereqsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/aa_ranks_repository.h b/common/repositories/aa_ranks_repository.h index 25f982d48..b62e4e840 100644 --- a/common/repositories/aa_ranks_repository.h +++ b/common/repositories/aa_ranks_repository.h @@ -28,18 +28,18 @@ class AaRanksRepository: public BaseAaRanksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index 0a57f5cc7..9ebe84abb 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -28,18 +28,18 @@ class AccountFlagsRepository: public BaseAccountFlagsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h index 4f99311b9..d33cb609d 100644 --- a/common/repositories/account_ip_repository.h +++ b/common/repositories/account_ip_repository.h @@ -28,18 +28,18 @@ class AccountIpRepository: public BaseAccountIpRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index 631462552..32d49c92d 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -28,18 +28,18 @@ class AccountRepository: public BaseAccountRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/account_rewards_repository.h b/common/repositories/account_rewards_repository.h index dd3aa2dca..77cad4076 100644 --- a/common/repositories/account_rewards_repository.h +++ b/common/repositories/account_rewards_repository.h @@ -28,18 +28,18 @@ class AccountRewardsRepository: public BaseAccountRewardsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_details_repository.h b/common/repositories/adventure_details_repository.h index 5086b4ecb..909a3e7ae 100644 --- a/common/repositories/adventure_details_repository.h +++ b/common/repositories/adventure_details_repository.h @@ -28,18 +28,18 @@ class AdventureDetailsRepository: public BaseAdventureDetailsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_members_repository.h b/common/repositories/adventure_members_repository.h index d7ca05596..3cdedac90 100644 --- a/common/repositories/adventure_members_repository.h +++ b/common/repositories/adventure_members_repository.h @@ -28,18 +28,18 @@ class AdventureMembersRepository: public BaseAdventureMembersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_stats_repository.h b/common/repositories/adventure_stats_repository.h index 4d82bb262..8ff138849 100644 --- a/common/repositories/adventure_stats_repository.h +++ b/common/repositories/adventure_stats_repository.h @@ -28,18 +28,18 @@ class AdventureStatsRepository: public BaseAdventureStatsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index b52345139..183d50780 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -28,18 +28,18 @@ class AdventureTemplateEntryFlavorRepository: public BaseAdventureTemplateEntryFlavorRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_template_entry_repository.h b/common/repositories/adventure_template_entry_repository.h index c4bd36215..68e6008fc 100644 --- a/common/repositories/adventure_template_entry_repository.h +++ b/common/repositories/adventure_template_entry_repository.h @@ -28,18 +28,18 @@ class AdventureTemplateEntryRepository: public BaseAdventureTemplateEntryRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index ee0e91b51..a3e9c9a99 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -28,18 +28,18 @@ class AdventureTemplateRepository: public BaseAdventureTemplateRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/alternate_currency_repository.h b/common/repositories/alternate_currency_repository.h index 92f1248c4..732f1e6f8 100644 --- a/common/repositories/alternate_currency_repository.h +++ b/common/repositories/alternate_currency_repository.h @@ -28,18 +28,18 @@ class AlternateCurrencyRepository: public BaseAlternateCurrencyRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index 4c3efed2f..5948195db 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -28,18 +28,18 @@ class AurasRepository: public BaseAurasRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h index 5f29b6d26..4610a6575 100644 --- a/common/repositories/banned_ips_repository.h +++ b/common/repositories/banned_ips_repository.h @@ -28,18 +28,18 @@ class BannedIpsRepository: public BaseBannedIpsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index ee6832e1a..27b453bcc 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -28,18 +28,18 @@ class BaseDataRepository: public BaseBaseDataRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index 662430e03..0f5add1df 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -28,18 +28,18 @@ class BlockedSpellsRepository: public BaseBlockedSpellsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h index 100d7b93c..a1e6aab98 100644 --- a/common/repositories/books_repository.h +++ b/common/repositories/books_repository.h @@ -28,18 +28,18 @@ class BooksRepository: public BaseBooksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index f10f3e192..39f19275b 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -28,18 +28,18 @@ class BugReportsRepository: public BaseBugReportsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index 888ccffdb..b78b7f9cd 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -28,18 +28,18 @@ class BugsRepository: public BaseBugsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h index 42d87ed5f..147d8266e 100644 --- a/common/repositories/buyer_repository.h +++ b/common/repositories/buyer_repository.h @@ -28,18 +28,18 @@ class BuyerRepository: public BaseBuyerRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/char_create_combinations_repository.h b/common/repositories/char_create_combinations_repository.h index e8da3253e..22164139a 100644 --- a/common/repositories/char_create_combinations_repository.h +++ b/common/repositories/char_create_combinations_repository.h @@ -28,18 +28,18 @@ class CharCreateCombinationsRepository: public BaseCharCreateCombinationsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/char_create_point_allocations_repository.h b/common/repositories/char_create_point_allocations_repository.h index 7be3b8da6..62b47e82c 100644 --- a/common/repositories/char_create_point_allocations_repository.h +++ b/common/repositories/char_create_point_allocations_repository.h @@ -28,18 +28,18 @@ class CharCreatePointAllocationsRepository: public BaseCharCreatePointAllocationsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h index 9def2e951..aa991958e 100644 --- a/common/repositories/char_recipe_list_repository.h +++ b/common/repositories/char_recipe_list_repository.h @@ -28,18 +28,18 @@ class CharRecipeListRepository: public BaseCharRecipeListRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_activities_repository.h b/common/repositories/character_activities_repository.h index 1ea06f517..256ef50e8 100644 --- a/common/repositories/character_activities_repository.h +++ b/common/repositories/character_activities_repository.h @@ -28,18 +28,18 @@ class CharacterActivitiesRepository: public BaseCharacterActivitiesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_alt_currency_repository.h b/common/repositories/character_alt_currency_repository.h index c3d0e288f..9624a39c8 100644 --- a/common/repositories/character_alt_currency_repository.h +++ b/common/repositories/character_alt_currency_repository.h @@ -28,18 +28,18 @@ class CharacterAltCurrencyRepository: public BaseCharacterAltCurrencyRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_alternate_abilities_repository.h b/common/repositories/character_alternate_abilities_repository.h index 5c8d1f779..3818c60ec 100644 --- a/common/repositories/character_alternate_abilities_repository.h +++ b/common/repositories/character_alternate_abilities_repository.h @@ -28,18 +28,18 @@ class CharacterAlternateAbilitiesRepository: public BaseCharacterAlternateAbilitiesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_auras_repository.h b/common/repositories/character_auras_repository.h index 16afc3bb7..a7a8047ec 100644 --- a/common/repositories/character_auras_repository.h +++ b/common/repositories/character_auras_repository.h @@ -28,18 +28,18 @@ class CharacterAurasRepository: public BaseCharacterAurasRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index 3a04159db..37400929d 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -28,18 +28,18 @@ class CharacterBandolierRepository: public BaseCharacterBandolierRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h index eeac3c6be..ba61113e4 100644 --- a/common/repositories/character_bind_repository.h +++ b/common/repositories/character_bind_repository.h @@ -28,18 +28,18 @@ class CharacterBindRepository: public BaseCharacterBindRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index 14092acaa..45c59eb8b 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -28,18 +28,18 @@ class CharacterBuffsRepository: public BaseCharacterBuffsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_corpse_items_repository.h b/common/repositories/character_corpse_items_repository.h index 56450a4f9..f564799ad 100644 --- a/common/repositories/character_corpse_items_repository.h +++ b/common/repositories/character_corpse_items_repository.h @@ -28,18 +28,18 @@ class CharacterCorpseItemsRepository: public BaseCharacterCorpseItemsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index 0fcea38b4..cc91ea17f 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -28,18 +28,18 @@ class CharacterCorpsesRepository: public BaseCharacterCorpsesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_currency_repository.h b/common/repositories/character_currency_repository.h index 0bd1bf1cc..6b9254c82 100644 --- a/common/repositories/character_currency_repository.h +++ b/common/repositories/character_currency_repository.h @@ -28,18 +28,18 @@ class CharacterCurrencyRepository: public BaseCharacterCurrencyRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index 30214a1d1..c9b86fc27 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -28,18 +28,18 @@ class CharacterDataRepository: public BaseCharacterDataRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_disciplines_repository.h b/common/repositories/character_disciplines_repository.h index c77051e0f..51ea09d17 100644 --- a/common/repositories/character_disciplines_repository.h +++ b/common/repositories/character_disciplines_repository.h @@ -28,18 +28,18 @@ class CharacterDisciplinesRepository: public BaseCharacterDisciplinesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index b75385ad7..998335d53 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -28,18 +28,18 @@ class CharacterInspectMessagesRepository: public BaseCharacterInspectMessagesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_item_recast_repository.h b/common/repositories/character_item_recast_repository.h index 223225759..8fe170901 100644 --- a/common/repositories/character_item_recast_repository.h +++ b/common/repositories/character_item_recast_repository.h @@ -28,18 +28,18 @@ class CharacterItemRecastRepository: public BaseCharacterItemRecastRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_languages_repository.h b/common/repositories/character_languages_repository.h index bb10eac4f..5be597adf 100644 --- a/common/repositories/character_languages_repository.h +++ b/common/repositories/character_languages_repository.h @@ -28,18 +28,18 @@ class CharacterLanguagesRepository: public BaseCharacterLanguagesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_leadership_abilities_repository.h b/common/repositories/character_leadership_abilities_repository.h index 79ed63697..770c3c456 100644 --- a/common/repositories/character_leadership_abilities_repository.h +++ b/common/repositories/character_leadership_abilities_repository.h @@ -28,18 +28,18 @@ class CharacterLeadershipAbilitiesRepository: public BaseCharacterLeadershipAbilitiesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_material_repository.h b/common/repositories/character_material_repository.h index 8d95f599d..644baa081 100644 --- a/common/repositories/character_material_repository.h +++ b/common/repositories/character_material_repository.h @@ -28,18 +28,18 @@ class CharacterMaterialRepository: public BaseCharacterMaterialRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_memmed_spells_repository.h b/common/repositories/character_memmed_spells_repository.h index 41520d767..59933ac23 100644 --- a/common/repositories/character_memmed_spells_repository.h +++ b/common/repositories/character_memmed_spells_repository.h @@ -28,18 +28,18 @@ class CharacterMemmedSpellsRepository: public BaseCharacterMemmedSpellsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h index c2fe7e10d..a7e780aed 100644 --- a/common/repositories/character_pet_buffs_repository.h +++ b/common/repositories/character_pet_buffs_repository.h @@ -28,18 +28,18 @@ class CharacterPetBuffsRepository: public BaseCharacterPetBuffsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index 1c5fa56d7..06e400abb 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -28,18 +28,18 @@ class CharacterPetInfoRepository: public BaseCharacterPetInfoRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_pet_inventory_repository.h b/common/repositories/character_pet_inventory_repository.h index 6a3c298df..972b0b7c6 100644 --- a/common/repositories/character_pet_inventory_repository.h +++ b/common/repositories/character_pet_inventory_repository.h @@ -28,18 +28,18 @@ class CharacterPetInventoryRepository: public BaseCharacterPetInventoryRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_potionbelt_repository.h b/common/repositories/character_potionbelt_repository.h index 2eaa76319..7d02c1f39 100644 --- a/common/repositories/character_potionbelt_repository.h +++ b/common/repositories/character_potionbelt_repository.h @@ -28,18 +28,18 @@ class CharacterPotionbeltRepository: public BaseCharacterPotionbeltRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_skills_repository.h b/common/repositories/character_skills_repository.h index 2fd041c16..044f5987a 100644 --- a/common/repositories/character_skills_repository.h +++ b/common/repositories/character_skills_repository.h @@ -28,18 +28,18 @@ class CharacterSkillsRepository: public BaseCharacterSkillsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_spells_repository.h b/common/repositories/character_spells_repository.h index 639f8c983..f2af87b01 100644 --- a/common/repositories/character_spells_repository.h +++ b/common/repositories/character_spells_repository.h @@ -28,18 +28,18 @@ class CharacterSpellsRepository: public BaseCharacterSpellsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_tasks_repository.h b/common/repositories/character_tasks_repository.h index 316eca15b..33a452327 100644 --- a/common/repositories/character_tasks_repository.h +++ b/common/repositories/character_tasks_repository.h @@ -28,18 +28,18 @@ class CharacterTasksRepository: public BaseCharacterTasksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h index 739062a44..30edd2bfb 100644 --- a/common/repositories/character_tribute_repository.h +++ b/common/repositories/character_tribute_repository.h @@ -28,18 +28,18 @@ class CharacterTributeRepository: public BaseCharacterTributeRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h index c13e3c4f4..3fef234f6 100644 --- a/common/repositories/chatchannels_repository.h +++ b/common/repositories/chatchannels_repository.h @@ -28,18 +28,18 @@ class ChatchannelsRepository: public BaseChatchannelsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h index ee1844100..34021b399 100644 --- a/common/repositories/command_settings_repository.h +++ b/common/repositories/command_settings_repository.h @@ -28,18 +28,18 @@ class CommandSettingsRepository: public BaseCommandSettingsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/completed_tasks_repository.h b/common/repositories/completed_tasks_repository.h index f131c62ad..ae2a50b3f 100644 --- a/common/repositories/completed_tasks_repository.h +++ b/common/repositories/completed_tasks_repository.h @@ -28,18 +28,18 @@ class CompletedTasksRepository: public BaseCompletedTasksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index d5f1f4455..19a24c68e 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -28,18 +28,18 @@ class DataBucketsRepository: public BaseDataBucketsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index 3dbde06fd..70287a843 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -28,18 +28,18 @@ class DbStrRepository: public BaseDbStrRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h index 103ef2f2c..b77872a9a 100644 --- a/common/repositories/discovered_items_repository.h +++ b/common/repositories/discovered_items_repository.h @@ -28,18 +28,18 @@ class DiscoveredItemsRepository: public BaseDiscoveredItemsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index 04d2a72a3..1e66478d6 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -28,18 +28,18 @@ class DoorsRepository: public BaseDoorsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index 0e6dee394..e316a5d54 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -28,18 +28,18 @@ class EventlogRepository: public BaseEventlogRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/faction_base_data_repository.h b/common/repositories/faction_base_data_repository.h index 02ae81906..0cc968803 100644 --- a/common/repositories/faction_base_data_repository.h +++ b/common/repositories/faction_base_data_repository.h @@ -28,18 +28,18 @@ class FactionBaseDataRepository: public BaseFactionBaseDataRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 3b0bc9aa3..99834150f 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -28,18 +28,18 @@ class FactionListModRepository: public BaseFactionListModRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h index ddeb2dd10..8a83996e7 100644 --- a/common/repositories/faction_list_repository.h +++ b/common/repositories/faction_list_repository.h @@ -28,18 +28,18 @@ class FactionListRepository: public BaseFactionListRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/faction_values_repository.h b/common/repositories/faction_values_repository.h index c1b6d9e16..721a535dd 100644 --- a/common/repositories/faction_values_repository.h +++ b/common/repositories/faction_values_repository.h @@ -28,18 +28,18 @@ class FactionValuesRepository: public BaseFactionValuesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/fishing_repository.h b/common/repositories/fishing_repository.h index 4e2707697..3ca1da433 100644 --- a/common/repositories/fishing_repository.h +++ b/common/repositories/fishing_repository.h @@ -28,18 +28,18 @@ class FishingRepository: public BaseFishingRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/forage_repository.h b/common/repositories/forage_repository.h index bf4e0d522..8f291ce09 100644 --- a/common/repositories/forage_repository.h +++ b/common/repositories/forage_repository.h @@ -28,18 +28,18 @@ class ForageRepository: public BaseForageRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 99481a742..273280511 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -28,18 +28,18 @@ class FriendsRepository: public BaseFriendsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index 25a916c3f..16614452c 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -28,18 +28,18 @@ class GlobalLootRepository: public BaseGlobalLootRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index ccb0b1359..656285424 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -28,18 +28,18 @@ class GmIpsRepository: public BaseGmIpsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/goallists_repository.h b/common/repositories/goallists_repository.h index 8e95d9702..d1fd6e48a 100644 --- a/common/repositories/goallists_repository.h +++ b/common/repositories/goallists_repository.h @@ -28,18 +28,18 @@ class GoallistsRepository: public BaseGoallistsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h index 5937ce317..d18725c32 100644 --- a/common/repositories/graveyard_repository.h +++ b/common/repositories/graveyard_repository.h @@ -28,18 +28,18 @@ class GraveyardRepository: public BaseGraveyardRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index d4a7abaca..e56d25d97 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -28,18 +28,18 @@ class GroundSpawnsRepository: public BaseGroundSpawnsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 82a2ce0c5..8b78b6eeb 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -28,18 +28,18 @@ class GroupIdRepository: public BaseGroupIdRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index 65163d295..5a44bb751 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -28,18 +28,18 @@ class GroupLeadersRepository: public BaseGroupLeadersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index f0b07b9ee..16cbdbc10 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -28,18 +28,18 @@ class GuildMembersRepository: public BaseGuildMembersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h index c2f7b804c..24e012eb3 100644 --- a/common/repositories/guild_ranks_repository.h +++ b/common/repositories/guild_ranks_repository.h @@ -28,18 +28,18 @@ class GuildRanksRepository: public BaseGuildRanksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/guild_relations_repository.h b/common/repositories/guild_relations_repository.h index e60c0f657..ce2e6f638 100644 --- a/common/repositories/guild_relations_repository.h +++ b/common/repositories/guild_relations_repository.h @@ -28,18 +28,18 @@ class GuildRelationsRepository: public BaseGuildRelationsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index 7b63f63ff..dbb2984e9 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -28,18 +28,18 @@ class GuildsRepository: public BaseGuildsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index 89e08b354..8bacd5b7a 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -28,18 +28,18 @@ class HackersRepository: public BaseHackersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/horses_repository.h b/common/repositories/horses_repository.h index 398bafee5..108d7c1da 100644 --- a/common/repositories/horses_repository.h +++ b/common/repositories/horses_repository.h @@ -28,18 +28,18 @@ class HorsesRepository: public BaseHorsesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/instance_list_player_repository.h b/common/repositories/instance_list_player_repository.h index dd98dbcdd..474b34917 100644 --- a/common/repositories/instance_list_player_repository.h +++ b/common/repositories/instance_list_player_repository.h @@ -28,18 +28,18 @@ class InstanceListPlayerRepository: public BaseInstanceListPlayerRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index afb221dbc..39cbd9b47 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -28,18 +28,18 @@ class InstanceListRepository: public BaseInstanceListRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index 003c152d4..8ae1d1c46 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -28,18 +28,18 @@ class InventoryRepository: public BaseInventoryRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index 52b60328e..b8d60eeaf 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -28,18 +28,18 @@ class InventorySnapshotsRepository: public BaseInventorySnapshotsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index 00c318394..71ad7dfb3 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -28,18 +28,18 @@ class IpExemptionsRepository: public BaseIpExemptionsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index 1418b9227..b120aa794 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -28,18 +28,18 @@ class ItemTickRepository: public BaseItemTickRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index 83872d5f0..1e12a4720 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -28,18 +28,18 @@ class ItemsRepository: public BaseItemsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h index 0b23dcd6d..413167faf 100644 --- a/common/repositories/launcher_repository.h +++ b/common/repositories/launcher_repository.h @@ -28,18 +28,18 @@ class LauncherRepository: public BaseLauncherRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h index cbe3c04e8..ed0facae4 100644 --- a/common/repositories/launcher_zones_repository.h +++ b/common/repositories/launcher_zones_repository.h @@ -28,18 +28,18 @@ class LauncherZonesRepository: public BaseLauncherZonesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/ldon_trap_entries_repository.h b/common/repositories/ldon_trap_entries_repository.h index 3c406149f..9bd96ed2f 100644 --- a/common/repositories/ldon_trap_entries_repository.h +++ b/common/repositories/ldon_trap_entries_repository.h @@ -28,18 +28,18 @@ class LdonTrapEntriesRepository: public BaseLdonTrapEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/ldon_trap_templates_repository.h b/common/repositories/ldon_trap_templates_repository.h index 91bc6c015..636c6592f 100644 --- a/common/repositories/ldon_trap_templates_repository.h +++ b/common/repositories/ldon_trap_templates_repository.h @@ -28,18 +28,18 @@ class LdonTrapTemplatesRepository: public BaseLdonTrapTemplatesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h index 702f50eba..5e1485814 100644 --- a/common/repositories/level_exp_mods_repository.h +++ b/common/repositories/level_exp_mods_repository.h @@ -28,18 +28,18 @@ class LevelExpModsRepository: public BaseLevelExpModsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index 334de2461..4552fb776 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -28,18 +28,18 @@ class LfguildRepository: public BaseLfguildRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index c89b263f0..72eda1280 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -28,18 +28,18 @@ class LoginAccountsRepository: public BaseLoginAccountsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index 730cd89bb..64aa1022d 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -28,18 +28,18 @@ class LoginApiTokensRepository: public BaseLoginApiTokensRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index ec0354cd4..e11868d53 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -28,18 +28,18 @@ class LoginServerAdminsRepository: public BaseLoginServerAdminsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index 99d3a11db..4a2593326 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -28,18 +28,18 @@ class LoginServerListTypesRepository: public BaseLoginServerListTypesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index 7634293b7..4a90a696e 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -28,18 +28,18 @@ class LoginWorldServersRepository: public BaseLoginWorldServersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index 2d31a3241..1ce6fe15c 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -28,18 +28,18 @@ class LogsysCategoriesRepository: public BaseLogsysCategoriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h index 6de1e327c..801f9cfb5 100644 --- a/common/repositories/lootdrop_entries_repository.h +++ b/common/repositories/lootdrop_entries_repository.h @@ -28,18 +28,18 @@ class LootdropEntriesRepository: public BaseLootdropEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h index c51a86bb9..54ef936c0 100644 --- a/common/repositories/lootdrop_repository.h +++ b/common/repositories/lootdrop_repository.h @@ -28,18 +28,18 @@ class LootdropRepository: public BaseLootdropRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h index 21590f116..99c05fa0c 100644 --- a/common/repositories/loottable_entries_repository.h +++ b/common/repositories/loottable_entries_repository.h @@ -28,18 +28,18 @@ class LoottableEntriesRepository: public BaseLoottableEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h index dc005ebd1..489156be1 100644 --- a/common/repositories/loottable_repository.h +++ b/common/repositories/loottable_repository.h @@ -28,18 +28,18 @@ class LoottableRepository: public BaseLoottableRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index 8852c019b..29c783625 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -28,18 +28,18 @@ class MailRepository: public BaseMailRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/merchantlist_repository.h b/common/repositories/merchantlist_repository.h index 0ce9f24a5..9e96290ec 100644 --- a/common/repositories/merchantlist_repository.h +++ b/common/repositories/merchantlist_repository.h @@ -28,18 +28,18 @@ class MerchantlistRepository: public BaseMerchantlistRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h index 4ff1040dd..4b4879fb4 100644 --- a/common/repositories/merchantlist_temp_repository.h +++ b/common/repositories/merchantlist_temp_repository.h @@ -28,18 +28,18 @@ class MerchantlistTempRepository: public BaseMerchantlistTempRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h index 64b7aaf7b..f476d53a8 100644 --- a/common/repositories/name_filter_repository.h +++ b/common/repositories/name_filter_repository.h @@ -28,18 +28,18 @@ class NameFilterRepository: public BaseNameFilterRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 9e6d3ac99..65957cc57 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -28,18 +28,18 @@ class NpcEmotesRepository: public BaseNpcEmotesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_faction_entries_repository.h b/common/repositories/npc_faction_entries_repository.h index 1b418804b..5a755792e 100644 --- a/common/repositories/npc_faction_entries_repository.h +++ b/common/repositories/npc_faction_entries_repository.h @@ -28,18 +28,18 @@ class NpcFactionEntriesRepository: public BaseNpcFactionEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index 9074099c5..425063ca5 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -28,18 +28,18 @@ class NpcFactionRepository: public BaseNpcFactionRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index 9606ba04b..92ee8cf84 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -28,18 +28,18 @@ class NpcScaleGlobalBaseRepository: public BaseNpcScaleGlobalBaseRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_spells_effects_entries_repository.h b/common/repositories/npc_spells_effects_entries_repository.h index c63a5d506..c93e7ebfb 100644 --- a/common/repositories/npc_spells_effects_entries_repository.h +++ b/common/repositories/npc_spells_effects_entries_repository.h @@ -28,18 +28,18 @@ class NpcSpellsEffectsEntriesRepository: public BaseNpcSpellsEffectsEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index f1a352719..8f059976c 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -28,18 +28,18 @@ class NpcSpellsEffectsRepository: public BaseNpcSpellsEffectsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_spells_entries_repository.h b/common/repositories/npc_spells_entries_repository.h index a8d92a306..a9597fd55 100644 --- a/common/repositories/npc_spells_entries_repository.h +++ b/common/repositories/npc_spells_entries_repository.h @@ -28,18 +28,18 @@ class NpcSpellsEntriesRepository: public BaseNpcSpellsEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index 5c469e029..9df6e7214 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -28,18 +28,18 @@ class NpcSpellsRepository: public BaseNpcSpellsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index 4c3826e11..cbcc9e735 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -28,18 +28,18 @@ class NpcTypesRepository: public BaseNpcTypesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 0872f59b7..37fdb7714 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -28,18 +28,18 @@ class NpcTypesTintRepository: public BaseNpcTypesTintRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index 03abd5bba..ed64e8162 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -28,18 +28,18 @@ class ObjectContentsRepository: public BaseObjectContentsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index bfee7bf01..7f4ab5e17 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -28,18 +28,18 @@ class ObjectRepository: public BaseObjectRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index a221d4312..3b838c410 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -28,18 +28,18 @@ class PerlEventExportSettingsRepository: public BasePerlEventExportSettingsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index 3d1c4f9e2..6617527c0 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -28,18 +28,18 @@ class PetitionsRepository: public BasePetitionsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/pets_equipmentset_entries_repository.h b/common/repositories/pets_equipmentset_entries_repository.h index 284248cba..a9d225d9a 100644 --- a/common/repositories/pets_equipmentset_entries_repository.h +++ b/common/repositories/pets_equipmentset_entries_repository.h @@ -28,18 +28,18 @@ class PetsEquipmentsetEntriesRepository: public BasePetsEquipmentsetEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h index 45ec40bfc..5860df600 100644 --- a/common/repositories/pets_equipmentset_repository.h +++ b/common/repositories/pets_equipmentset_repository.h @@ -28,18 +28,18 @@ class PetsEquipmentsetRepository: public BasePetsEquipmentsetRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h index 4f5d1135e..88aadd1ec 100644 --- a/common/repositories/pets_repository.h +++ b/common/repositories/pets_repository.h @@ -28,18 +28,18 @@ class PetsRepository: public BasePetsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/player_titlesets_repository.h b/common/repositories/player_titlesets_repository.h index b77157f98..9aa21efa3 100644 --- a/common/repositories/player_titlesets_repository.h +++ b/common/repositories/player_titlesets_repository.h @@ -28,18 +28,18 @@ class PlayerTitlesetsRepository: public BasePlayerTitlesetsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h index 8940c25c1..752b1d11a 100644 --- a/common/repositories/proximities_repository.h +++ b/common/repositories/proximities_repository.h @@ -28,18 +28,18 @@ class ProximitiesRepository: public BaseProximitiesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index b78db3fa3..a82d6adec 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -28,18 +28,18 @@ class QuestGlobalsRepository: public BaseQuestGlobalsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index 1c1557017..325077a54 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -28,18 +28,18 @@ class RaidDetailsRepository: public BaseRaidDetailsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h index 89c3784d5..9b6fba9f9 100644 --- a/common/repositories/raid_members_repository.h +++ b/common/repositories/raid_members_repository.h @@ -28,18 +28,18 @@ class RaidMembersRepository: public BaseRaidMembersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index 4bc84a176..2d389028b 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -28,18 +28,18 @@ class ReportsRepository: public BaseReportsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/respawn_times_repository.h b/common/repositories/respawn_times_repository.h index 1706772d2..3aca3852a 100644 --- a/common/repositories/respawn_times_repository.h +++ b/common/repositories/respawn_times_repository.h @@ -28,18 +28,18 @@ class RespawnTimesRepository: public BaseRespawnTimesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h index 3c86f2b81..5d275e28f 100644 --- a/common/repositories/rule_sets_repository.h +++ b/common/repositories/rule_sets_repository.h @@ -28,18 +28,18 @@ class RuleSetsRepository: public BaseRuleSetsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index 532dafd44..49fda8ef6 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -28,18 +28,18 @@ class RuleValuesRepository: public BaseRuleValuesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h index 27b0993f1..6618720b1 100644 --- a/common/repositories/saylink_repository.h +++ b/common/repositories/saylink_repository.h @@ -28,18 +28,18 @@ class SaylinkRepository: public BaseSaylinkRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/skill_caps_repository.h b/common/repositories/skill_caps_repository.h index da2387e9c..f55f7e164 100644 --- a/common/repositories/skill_caps_repository.h +++ b/common/repositories/skill_caps_repository.h @@ -28,18 +28,18 @@ class SkillCapsRepository: public BaseSkillCapsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index 5771e80d5..f83ba3bd1 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -28,18 +28,18 @@ class Spawn2Repository: public BaseSpawn2Repository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index 1ed0428a4..5c641cce0 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -28,18 +28,18 @@ class SpawnConditionValuesRepository: public BaseSpawnConditionValuesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h index cc703099f..30f9850ef 100644 --- a/common/repositories/spawn_conditions_repository.h +++ b/common/repositories/spawn_conditions_repository.h @@ -28,18 +28,18 @@ class SpawnConditionsRepository: public BaseSpawnConditionsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index 85758b102..aa36b895b 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -28,18 +28,18 @@ class SpawnEventsRepository: public BaseSpawnEventsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawnentry_repository.h b/common/repositories/spawnentry_repository.h index dc4d6cec4..a6ad875d7 100644 --- a/common/repositories/spawnentry_repository.h +++ b/common/repositories/spawnentry_repository.h @@ -28,18 +28,18 @@ class SpawnentryRepository: public BaseSpawnentryRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index a205e8fe1..b9f5e21ad 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -28,18 +28,18 @@ class SpawngroupRepository: public BaseSpawngroupRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index 630df19d1..90d2a6d1f 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -28,18 +28,18 @@ class SpellBucketsRepository: public BaseSpellBucketsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h index 286b1ee5c..2d5132109 100644 --- a/common/repositories/spell_globals_repository.h +++ b/common/repositories/spell_globals_repository.h @@ -28,18 +28,18 @@ class SpellGlobalsRepository: public BaseSpellGlobalsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index cb3cd7d8b..49a5497d8 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -28,18 +28,18 @@ class SpellsNewRepository: public BaseSpellsNewRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h index df4d9d36f..c185825f1 100644 --- a/common/repositories/start_zones_repository.h +++ b/common/repositories/start_zones_repository.h @@ -28,18 +28,18 @@ class StartZonesRepository: public BaseStartZonesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/starting_items_repository.h b/common/repositories/starting_items_repository.h index 7642fd0d1..fa18d7d16 100644 --- a/common/repositories/starting_items_repository.h +++ b/common/repositories/starting_items_repository.h @@ -28,18 +28,18 @@ class StartingItemsRepository: public BaseStartingItemsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index 302c1f90f..864dff5bf 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -28,18 +28,18 @@ class TaskActivitiesRepository: public BaseTaskActivitiesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index df5ae2482..a7e03c3a0 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -28,18 +28,18 @@ class TasksRepository: public BaseTasksRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/tasksets_repository.h b/common/repositories/tasksets_repository.h index ae0eb9d56..acea03204 100644 --- a/common/repositories/tasksets_repository.h +++ b/common/repositories/tasksets_repository.h @@ -28,18 +28,18 @@ class TasksetsRepository: public BaseTasksetsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/template/repository.template b/common/repositories/template/repository.template index f62f524d8..3d49157bd 100644 --- a/common/repositories/template/repository.template +++ b/common/repositories/template/repository.template @@ -28,18 +28,18 @@ class {{TABLE_NAME_CLASS}}Repository: public Base{{TABLE_NAME_CLASS}}Repository { public: - /** - * This file was auto generated on {{GENERATED_DATE}} and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on {{GENERATED_DATE}} and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/timers_repository.h b/common/repositories/timers_repository.h index 677bba968..b942a6e23 100644 --- a/common/repositories/timers_repository.h +++ b/common/repositories/timers_repository.h @@ -28,18 +28,18 @@ class TimersRepository: public BaseTimersRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index b60797355..387b670ee 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -28,18 +28,18 @@ class TitlesRepository: public BaseTitlesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h index 6dec07c82..1e346e783 100644 --- a/common/repositories/trader_repository.h +++ b/common/repositories/trader_repository.h @@ -28,18 +28,18 @@ class TraderRepository: public BaseTraderRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/tradeskill_recipe_entries_repository.h b/common/repositories/tradeskill_recipe_entries_repository.h index f09daa4ee..6e3fe4bbf 100644 --- a/common/repositories/tradeskill_recipe_entries_repository.h +++ b/common/repositories/tradeskill_recipe_entries_repository.h @@ -28,18 +28,18 @@ class TradeskillRecipeEntriesRepository: public BaseTradeskillRecipeEntriesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 92756baa5..6b5226aa3 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -28,18 +28,18 @@ class TrapsRepository: public BaseTrapsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/tribute_levels_repository.h b/common/repositories/tribute_levels_repository.h index ab6478fc3..162d6cdb2 100644 --- a/common/repositories/tribute_levels_repository.h +++ b/common/repositories/tribute_levels_repository.h @@ -28,18 +28,18 @@ class TributeLevelsRepository: public BaseTributeLevelsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index 04a5a4239..480d42c6c 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -28,18 +28,18 @@ class TributesRepository: public BaseTributesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/variables_repository.h b/common/repositories/variables_repository.h index 1ed66d94b..6e07e1bb2 100644 --- a/common/repositories/variables_repository.h +++ b/common/repositories/variables_repository.h @@ -28,18 +28,18 @@ class VariablesRepository: public BaseVariablesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 38f53313c..71a4592ae 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -28,18 +28,18 @@ class VeteranRewardTemplatesRepository: public BaseVeteranRewardTemplatesRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index 72ea29688..424a54421 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -28,18 +28,18 @@ class ZonePointsRepository: public BaseZonePointsRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index 4cdbf610c..d61534938 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -28,18 +28,18 @@ class ZoneRepository: public BaseZoneRepository { public: - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne * UpdateOne * DeleteOne * FindOne @@ -59,7 +59,7 @@ public: * find yourself re-using logic for other parts of the code, its best to just make a * method that can be re-used easily elsewhere especially if it can use a base repository * method and encapsulate filters there - */ + */ // Custom extended repository methods here From be57c570295dc54b15e5921b794f4db064dcd3d7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 23:11:25 -0500 Subject: [PATCH 093/272] More adjustments [skip ci[ --- common/CMakeLists.txt | 10 +- .../base/base_grid_entries_repository.h | 363 +++++++++++++++ .../repositories/base/base_grid_repository.h | 321 ++++++++++++++ .../base/base_tradeskill_recipe_repository.h | 414 ++++++++++++++++++ common/repositories/grid_repository.h | 85 ++-- .../tradeskill_recipe_repository.h | 136 ++---- .../generators/repository-generator.pl | 62 +-- zone/tradeskills.cpp | 8 +- 8 files changed, 1216 insertions(+), 183 deletions(-) create mode 100644 common/repositories/base/base_grid_entries_repository.h create mode 100644 common/repositories/base/base_grid_repository.h create mode 100644 common/repositories/base/base_tradeskill_recipe_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 62c494e85..5b095e098 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -186,6 +186,8 @@ SET(repositories repositories/base/base_gm_ips_repository.h repositories/base/base_goallists_repository.h repositories/base/base_graveyard_repository.h + repositories/base/base_grid_repository.h + repositories/base/base_grid_entries_repository.h repositories/base/base_ground_spawns_repository.h repositories/base/base_group_id_repository.h repositories/base/base_group_leaders_repository.h @@ -267,6 +269,7 @@ SET(repositories repositories/base/base_timers_repository.h repositories/base/base_titles_repository.h repositories/base/base_trader_repository.h + repositories/base/base_tradeskill_recipe_repository.h repositories/base/base_tradeskill_recipe_entries_repository.h repositories/base/base_traps_repository.h repositories/base/base_tributes_repository.h @@ -348,6 +351,8 @@ SET(repositories repositories/gm_ips_repository.h repositories/goallists_repository.h repositories/graveyard_repository.h + repositories/grid_repository.h + repositories/grid_entries_repository.h repositories/ground_spawns_repository.h repositories/group_id_repository.h repositories/group_leaders_repository.h @@ -429,6 +434,7 @@ SET(repositories repositories/timers_repository.h repositories/titles_repository.h repositories/trader_repository.h + repositories/tradeskill_recipe_repository.h repositories/tradeskill_recipe_entries_repository.h repositories/traps_repository.h repositories/tributes_repository.h @@ -437,10 +443,6 @@ SET(repositories repositories/veteran_reward_templates_repository.h repositories/zone_repository.h repositories/zone_points_repository.h - - repositories/grid_repository.h - repositories/grid_entries_repository.h - repositories/tradeskill_recipe_repository.h ) SET(common_headers diff --git a/common/repositories/base/base_grid_entries_repository.h b/common/repositories/base/base_grid_entries_repository.h new file mode 100644 index 000000000..6b0f3fcd2 --- /dev/null +++ b/common/repositories/base/base_grid_entries_repository.h @@ -0,0 +1,363 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GRID_ENTRIES_REPOSITORY_H +#define EQEMU_BASE_GRID_ENTRIES_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGridEntriesRepository { +public: + struct GridEntries { + int gridid; + int zoneid; + int number; + float x; + float y; + float z; + float heading; + int pause; + int8 centerpoint; + }; + + static std::string PrimaryKey() + { + return std::string("number"); + } + + static std::vector Columns() + { + return { + "gridid", + "zoneid", + "number", + "x", + "y", + "z", + "heading", + "pause", + "centerpoint", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("grid_entries"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static GridEntries NewEntity() + { + GridEntries entry{}; + + entry.gridid = 0; + entry.zoneid = 0; + entry.number = 0; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.pause = 0; + entry.centerpoint = 0; + + return entry; + } + + static GridEntries GetGridEntriesEntry( + const std::vector &grid_entriess, + int grid_entries_id + ) + { + for (auto &grid_entries : grid_entriess) { + if (grid_entries.number == grid_entries_id) { + return grid_entries; + } + } + + return NewEntity(); + } + + static GridEntries FindOne( + int grid_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + grid_entries_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + GridEntries entry{}; + + entry.gridid = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.number = atoi(row[2]); + entry.x = atof(row[3]); + entry.y = atof(row[4]); + entry.z = atof(row[5]); + entry.heading = atof(row[6]); + entry.pause = atoi(row[7]); + entry.centerpoint = atoi(row[8]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int grid_entries_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + grid_entries_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + GridEntries grid_entries_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[3] + " = " + std::to_string(grid_entries_entry.x)); + update_values.push_back(columns[4] + " = " + std::to_string(grid_entries_entry.y)); + update_values.push_back(columns[5] + " = " + std::to_string(grid_entries_entry.z)); + update_values.push_back(columns[6] + " = " + std::to_string(grid_entries_entry.heading)); + update_values.push_back(columns[7] + " = " + std::to_string(grid_entries_entry.pause)); + update_values.push_back(columns[8] + " = " + std::to_string(grid_entries_entry.centerpoint)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + grid_entries_entry.number + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static GridEntries InsertOne( + GridEntries grid_entries_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(grid_entries_entry.x)); + insert_values.push_back(std::to_string(grid_entries_entry.y)); + insert_values.push_back(std::to_string(grid_entries_entry.z)); + insert_values.push_back(std::to_string(grid_entries_entry.heading)); + insert_values.push_back(std::to_string(grid_entries_entry.pause)); + insert_values.push_back(std::to_string(grid_entries_entry.centerpoint)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + grid_entries_entry.id = results.LastInsertedID(); + return grid_entries_entry; + } + + grid_entries_entry = NewEntity(); + + return grid_entries_entry; + } + + static int InsertMany( + std::vector grid_entries_entries + ) + { + std::vector insert_chunks; + + for (auto &grid_entries_entry: grid_entries_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(grid_entries_entry.x)); + insert_values.push_back(std::to_string(grid_entries_entry.y)); + insert_values.push_back(std::to_string(grid_entries_entry.z)); + insert_values.push_back(std::to_string(grid_entries_entry.heading)); + insert_values.push_back(std::to_string(grid_entries_entry.pause)); + insert_values.push_back(std::to_string(grid_entries_entry.centerpoint)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GridEntries entry{}; + + entry.gridid = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.number = atoi(row[2]); + entry.x = atof(row[3]); + entry.y = atof(row[4]); + entry.z = atof(row[5]); + entry.heading = atof(row[6]); + entry.pause = atoi(row[7]); + entry.centerpoint = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + GridEntries entry{}; + + entry.gridid = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.number = atoi(row[2]); + entry.x = atof(row[3]); + entry.y = atof(row[4]); + entry.z = atof(row[5]); + entry.heading = atof(row[6]); + entry.pause = atoi(row[7]); + entry.centerpoint = atoi(row[8]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GRID_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_grid_repository.h b/common/repositories/base/base_grid_repository.h new file mode 100644 index 000000000..0fedf47a5 --- /dev/null +++ b/common/repositories/base/base_grid_repository.h @@ -0,0 +1,321 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_GRID_REPOSITORY_H +#define EQEMU_BASE_GRID_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseGridRepository { +public: + struct Grid { + int id; + int zoneid; + int type; + int type2; + }; + + static std::string PrimaryKey() + { + return std::string("zoneid"); + } + + static std::vector Columns() + { + return { + "id", + "zoneid", + "type", + "type2", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("grid"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static Grid NewEntity() + { + Grid entry{}; + + entry.id = 0; + entry.zoneid = 0; + entry.type = 0; + entry.type2 = 0; + + return entry; + } + + static Grid GetGridEntry( + const std::vector &grids, + int grid_id + ) + { + for (auto &grid : grids) { + if (grid.zoneid == grid_id) { + return grid; + } + } + + return NewEntity(); + } + + static Grid FindOne( + int grid_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + grid_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + Grid entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.type2 = atoi(row[3]); + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int grid_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + grid_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + Grid grid_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[2] + " = " + std::to_string(grid_entry.type)); + update_values.push_back(columns[3] + " = " + std::to_string(grid_entry.type2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + grid_entry.zoneid + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static Grid InsertOne( + Grid grid_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(grid_entry.type)); + insert_values.push_back(std::to_string(grid_entry.type2)); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + grid_entry.id = results.LastInsertedID(); + return grid_entry; + } + + grid_entry = NewEntity(); + + return grid_entry; + } + + static int InsertMany( + std::vector grid_entries + ) + { + std::vector insert_chunks; + + for (auto &grid_entry: grid_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(grid_entry.type)); + insert_values.push_back(std::to_string(grid_entry.type2)); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Grid entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.type2 = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + Grid entry{}; + + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.type = atoi(row[2]); + entry.type2 = atoi(row[3]); + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_GRID_REPOSITORY_H diff --git a/common/repositories/base/base_tradeskill_recipe_repository.h b/common/repositories/base/base_tradeskill_recipe_repository.h new file mode 100644 index 000000000..58ca82916 --- /dev/null +++ b/common/repositories/base/base_tradeskill_recipe_repository.h @@ -0,0 +1,414 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated on Apr 5, 2020 and is NOT + * to be modified directly. Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_TRADESKILL_RECIPE_REPOSITORY_H +#define EQEMU_BASE_TRADESKILL_RECIPE_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseTradeskillRecipeRepository { +public: + struct TradeskillRecipe { + int id; + std::string name; + int16 tradeskill; + int16 skillneeded; + int16 trivial; + int8 nofail; + int8 replace_container; + std::string notes; + int8 must_learn; + int8 quest; + int8 enabled; + int8 min_expansion; + int8 max_expansion; + std::string content_flags; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "name", + "tradeskill", + "skillneeded", + "trivial", + "nofail", + "replace_container", + "notes", + "must_learn", + "quest", + "enabled", + "min_expansion", + "max_expansion", + "content_flags", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("tradeskill_recipe"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static TradeskillRecipe NewEntity() + { + TradeskillRecipe entry{}; + + entry.id = 0; + entry.name = ""; + entry.tradeskill = 0; + entry.skillneeded = 0; + entry.trivial = 0; + entry.nofail = 0; + entry.replace_container = 0; + entry.notes = ""; + entry.must_learn = 0; + entry.quest = 0; + entry.enabled = 1; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + + return entry; + } + + static TradeskillRecipe GetTradeskillRecipeEntry( + const std::vector &tradeskill_recipes, + int tradeskill_recipe_id + ) + { + for (auto &tradeskill_recipe : tradeskill_recipes) { + if (tradeskill_recipe.id == tradeskill_recipe_id) { + return tradeskill_recipe; + } + } + + return NewEntity(); + } + + static TradeskillRecipe FindOne( + int tradeskill_recipe_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + tradeskill_recipe_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + TradeskillRecipe entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int tradeskill_recipe_id + ) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + tradeskill_recipe_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + TradeskillRecipe tradeskill_recipe_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[1] + " = '" + EscapeString(tradeskill_recipe_entry.name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(tradeskill_recipe_entry.tradeskill)); + update_values.push_back(columns[3] + " = " + std::to_string(tradeskill_recipe_entry.skillneeded)); + update_values.push_back(columns[4] + " = " + std::to_string(tradeskill_recipe_entry.trivial)); + update_values.push_back(columns[5] + " = " + std::to_string(tradeskill_recipe_entry.nofail)); + update_values.push_back(columns[6] + " = " + std::to_string(tradeskill_recipe_entry.replace_container)); + update_values.push_back(columns[7] + " = '" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + update_values.push_back(columns[8] + " = " + std::to_string(tradeskill_recipe_entry.must_learn)); + update_values.push_back(columns[9] + " = " + std::to_string(tradeskill_recipe_entry.quest)); + update_values.push_back(columns[10] + " = " + std::to_string(tradeskill_recipe_entry.enabled)); + update_values.push_back(columns[11] + " = " + std::to_string(tradeskill_recipe_entry.min_expansion)); + update_values.push_back(columns[12] + " = " + std::to_string(tradeskill_recipe_entry.max_expansion)); + update_values.push_back(columns[13] + " = '" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + tradeskill_recipe_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static TradeskillRecipe InsertOne( + TradeskillRecipe tradeskill_recipe_entry + ) + { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.min_expansion)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + tradeskill_recipe_entry.id = results.LastInsertedID(); + return tradeskill_recipe_entry; + } + + tradeskill_recipe_entry = NewEntity(); + + return tradeskill_recipe_entry; + } + + static int InsertMany( + std::vector tradeskill_recipe_entries + ) + { + std::vector insert_chunks; + + for (auto &tradeskill_recipe_entry: tradeskill_recipe_entries) { + std::vector insert_values; + + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.name) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.tradeskill)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.skillneeded)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.trivial)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.nofail)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.replace_container)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.notes) + "'"); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.must_learn)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.quest)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.enabled)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.min_expansion)); + insert_values.push_back(std::to_string(tradeskill_recipe_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipe entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = content_db.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + TradeskillRecipe entry{}; + + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = content_db.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_TRADESKILL_RECIPE_REPOSITORY_H diff --git a/common/repositories/grid_repository.h b/common/repositories/grid_repository.h index cddeed021..ea965546e 100644 --- a/common/repositories/grid_repository.h +++ b/common/repositories/grid_repository.h @@ -23,58 +23,45 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_grid_repository.h" -class GridRepository { +class GridRepository : public BaseGridRepository { public: - struct Grid { - int id; - int zoneid; - int type; - int type2; - }; - static std::vector Columns() - { - return { - "id", - "zoneid", - "type", - "type2", - }; - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * GridRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * GridRepository::GetWhereNeverExpires() + * GridRepository::GetWhereXAndY() + * GridRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string TableName() - { - return std::string("grid"); - } - - static std::string BaseSelect() - { - return std::string( - fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ) - ); - } - - static Grid NewEntity() - { - Grid entry{}; - - entry.id = 0; - entry.zoneid = 0; - entry.type = 0; - entry.type2 = 0; - - return entry; - } + // Custom extended repository methods here static std::vector GetZoneGrids(int zone_id) { @@ -118,4 +105,4 @@ public: }; -#endif +#endif //EQEMU_GRID_REPOSITORY_H diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h index 15ee26ce3..f0445aa11 100644 --- a/common/repositories/tradeskill_recipe_repository.h +++ b/common/repositories/tradeskill_recipe_repository.h @@ -23,112 +23,48 @@ #include "../database.h" #include "../string_util.h" +#include "base/base_tradeskill_recipe_repository.h" -class TradeskillRecipeRepository { +class TradeskillRecipeRepository: public BaseTradeskillRecipeRepository { public: - struct TradeskillRecipe { - int id; - std::string name; - int tradeskill; - int skillneeded; - int trivial; - uint8 nofail; - int replace_container; - std::string notes; - uint8 must_learn; - uint8 quest; - uint8 enabled; - }; - static std::vector Columns() - { - return { - "id", - "name", - "tradeskill", - "skillneeded", - "trivial", - "nofail", - "replace_container", - "notes", - "must_learn", - "quest", - "enabled", - }; - } + /** + * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators + * + * Base Methods (Subject to be expanded upon in time) + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * TradeskillRecipeRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * TradeskillRecipeRepository::GetWhereNeverExpires() + * TradeskillRecipeRepository::GetWhereXAndY() + * TradeskillRecipeRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } + // Custom extended repository methods here - static std::string TableName() - { - return std::string("tradeskill_recipe"); - } - static std::string BaseSelect() - { - return std::string( - fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ) - ); - } - - static TradeskillRecipe NewEntity() - { - TradeskillRecipe entry; - - entry.id = 0; - entry.name = ""; - entry.tradeskill = 0; - entry.skillneeded = 0; - entry.trivial = 0; - entry.nofail = 0; - entry.replace_container = 0; - entry.notes = ""; - entry.must_learn = 0; - entry.quest = 0; - entry.enabled = 0; - - return entry; - } - - static TradeskillRecipe GetRecipe(int recipe_id) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {}", - BaseSelect(), - recipe_id - ) - ); - - TradeskillRecipe tradeskill_recipe = NewEntity(); - - auto row = results.begin(); - if (results.RowCount() == 0) { - return tradeskill_recipe; - } - - tradeskill_recipe.id = atoi(row[0]); - tradeskill_recipe.name = (row[1] ? row[1] : ""); - tradeskill_recipe.tradeskill = atoi(row[2]); - tradeskill_recipe.skillneeded = atoi(row[3]); - tradeskill_recipe.trivial = atoi(row[4]); - tradeskill_recipe.nofail = atoi(row[5]); - tradeskill_recipe.replace_container = atoi(row[6]); - tradeskill_recipe.notes = (row[7] ? row[7] : ""); - tradeskill_recipe.must_learn = atoi(row[8]); - tradeskill_recipe.quest = atoi(row[9]); - tradeskill_recipe.enabled = atoi(row[10]); - - return tradeskill_recipe; - } }; -#endif +#endif //EQEMU_TRADESKILL_RECIPE_REPOSITORY_H diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index fca540a3b..060b6b010 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -2,7 +2,7 @@ # Author: Akkadius # @file: repository-generator.pl # @description: Script used to generate database repositories -# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/ +# @example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/ [table|all] [base|extended|all] ############################################# # modules @@ -20,9 +20,10 @@ my $json = new JSON(); ############################################# # args ############################################# -my $server_path = $ARGV[0]; -my $config_path = $server_path . "/eqemu_config.json"; -my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : ""; +my $server_path = $ARGV[0]; +my $config_path = $server_path . "/eqemu_config.json"; +my $requested_table_to_generate = $ARGV[1] ? $ARGV[1] : "all"; +my $repository_generation_option = $ARGV[2] ? $ARGV[2] : "all"; ############################################# # world path @@ -118,10 +119,10 @@ foreach my $table_to_generate (@tables) { # These tables don't have a typical schema my @table_ignore_list = ( "character_enabledtasks", - "grid", # Manually created + # "grid", # Manually created "grid_entries", # Manually created - "tradeskill_recipe", # Manually created - "character_recipe_list", # Manually created + # "tradeskill_recipe", # Manually created + # "character_recipe_list", # Manually created "guild_bank", "inventory_versions", "raid_leaders", @@ -388,39 +389,48 @@ foreach my $table_to_generate (@tables) { $new_repository =~ s/\{\{ALL_ENTRIES}}/$all_entries/g; $new_repository =~ s/\{\{GENERATED_DATE}}/$generated_date/g; - print $new_base_repository; - print $new_repository; + if ($repository_generation_option eq "all" || $repository_generation_option eq "base") { + print $new_base_repository; + } + + if ($repository_generation_option eq "all" || $repository_generation_option eq "extended") { + print $new_repository; + } ############################################# # write base repository ############################################# - my $generated_base_repository = './common/repositories/base/base_' . $table_to_generate . '_repository.h'; - my $cmake_generated_base_reference = $generated_base_repository; - $cmake_generated_base_reference =~ s/.\/common\///g; - $generated_base_repository_files .= $cmake_generated_base_reference . "\n"; - open(FH, '>', $generated_base_repository) or die $!; - print FH $new_base_repository; - close(FH); + if ($repository_generation_option eq "all" || $repository_generation_option eq "base") { + my $generated_base_repository = './common/repositories/base/base_' . $table_to_generate . '_repository.h'; + my $cmake_generated_base_reference = $generated_base_repository; + $cmake_generated_base_reference =~ s/.\/common\///g; + $generated_base_repository_files .= $cmake_generated_base_reference . "\n"; + open(FH, '>', $generated_base_repository) or die $!; + print FH $new_base_repository; + close(FH); + } ############################################# - # write repository + # write extended repository ############################################# - my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; - my $cmake_generated_reference = $generated_repository; - $cmake_generated_reference =~ s/.\/common\///g; - $generated_repository_files .= $cmake_generated_reference . "\n"; - open(FH, '>', $generated_repository) or die $!; - print FH $new_repository; - close(FH); + if ($repository_generation_option eq "all" || $repository_generation_option eq "extended") { + my $generated_repository = './common/repositories/' . $table_to_generate . '_repository.h'; + my $cmake_generated_reference = $generated_repository; + $cmake_generated_reference =~ s/.\/common\///g; + $generated_repository_files .= $cmake_generated_reference . "\n"; + open(FH, '>', $generated_repository) or die $!; + print FH $new_repository; + close(FH); + } } print "\n# Make sure to add generated repositories to common/CMakeLists.txt under the repositories section\n\n"; -print "\n#Base repository files\n"; +print "\n#Base Repositories\n"; print $generated_base_repository_files . "\n"; -print "\n#repository files\n"; +print "\n#Extended Repositories\n"; print $generated_repository_files . "\n"; sub trim { diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index aba4a8a5d..6c5cea48d 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -993,7 +993,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) { aa_chance = spellbonuses.ReduceTradeskillFail[spec->tradeskill] + itembonuses.ReduceTradeskillFail[spec->tradeskill] + aabonuses.ReduceTradeskillFail[spec->tradeskill]; const EQEmu::ItemData* item = nullptr; - + chance = mod_tradeskill_chance(chance, spec); if (((spec->tradeskill==75) || GetGM() || (chance > res)) || zone->random.Roll(aa_chance)) { @@ -1497,7 +1497,7 @@ void Client::LearnRecipe(uint32 recipe_id) return; } - auto tradeskill_recipe = TradeskillRecipeRepository::GetRecipe(recipe_id); + auto tradeskill_recipe = TradeskillRecipeRepository::FindOne(recipe_id); if (tradeskill_recipe.id == 0) { LogError("Invalid recipe [{}]", recipe_id); return; @@ -1542,8 +1542,8 @@ bool Client::CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill) { uint8 Tailoring = (GetRawSkill(EQEmu::skills::SkillTailoring) > 200) ? 1 : 0; uint8 SkillTotal = Baking + Smithing + Brewing + Fletching + Jewelry + Pottery + Tailoring; //Tradeskills above 200 //New Tanaan AA: Each level allows an additional tradeskill above 200 (first one is free) - uint8 aaLevel = spellbonuses.TradeSkillMastery + itembonuses.TradeSkillMastery + aabonuses.TradeSkillMastery; - + uint8 aaLevel = spellbonuses.TradeSkillMastery + itembonuses.TradeSkillMastery + aabonuses.TradeSkillMastery; + switch (tradeskill) { case EQEmu::skills::SkillBaking: case EQEmu::skills::SkillBlacksmithing: From 723a3aa18ef11a669910a1d9eafcba4b9e3997b8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 5 Apr 2020 23:18:32 -0500 Subject: [PATCH 094/272] Update cmake lists [skip ci] --- common/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 5b095e098..4cd537c79 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -443,6 +443,9 @@ SET(repositories repositories/veteran_reward_templates_repository.h repositories/zone_repository.h repositories/zone_points_repository.h + + # Non-Comformative + repositories/character_recipe_list_repository.h ) SET(common_headers From 867ff3dcfab1e4ebf1b7b094df7dd9c8039aa73b Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 6 Apr 2020 00:22:52 -0500 Subject: [PATCH 095/272] Add constructor to world content service --- common/content/world_content_service.cpp | 5 +++++ common/content/world_content_service.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp index 350208774..e636d8854 100644 --- a/common/content/world_content_service.cpp +++ b/common/content/world_content_service.cpp @@ -20,6 +20,11 @@ #include "world_content_service.h" +WorldContentService::WorldContentService() +{ + SetCurrentExpansion(0); +} + int WorldContentService::GetCurrentExpansion() const { return current_expansion; diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index d6d6723a9..9faa6847e 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -93,6 +93,8 @@ namespace Expansion { class WorldContentService { public: + WorldContentService(); + int GetCurrentExpansion() const; void SetCurrentExpansion(int current_expansion); From 700d062606c9f9ff9cf0a388ea0dcee7857ad26a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 6 Apr 2020 01:51:58 -0500 Subject: [PATCH 096/272] Fix windows compile --- zone/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/main.cpp b/zone/main.cpp index 3f8026cad..b82f37484 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -91,9 +91,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include "../common/unix.h" +#endif + #include "../common/content/world_content_service.h" -#endif volatile bool RunLoops = true; extern volatile bool is_zone_loaded; From 423bb7f0b3ae6e053de7c49b8370bd196849bc71 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 01:58:35 -0500 Subject: [PATCH 097/272] Adjust content bootstrapping in zone [skip ci] --- common/ruletypes.h | 2 +- zone/main.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index af70bf3c1..281fc35fb 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -776,7 +776,7 @@ RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is tr RULE_CATEGORY_END() RULE_CATEGORY(Expansion) -RULE_INT(Expansion, CurrentExpansion, -1, "The current expansion enabled for the server [0 = Classic, 1 = Kunark etc.]") +RULE_INT(Expansion, CurrentExpansion, 0, "The current expansion enabled for the server [0 = Classic, 1 = Kunark etc.]") RULE_CATEGORY_END() #undef RULE_CATEGORY diff --git a/zone/main.cpp b/zone/main.cpp index a04884286..53c3b52d1 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -395,7 +395,10 @@ int main(int argc, char** argv) { LogInfo("Initialized dynamic dictionary entries"); } - content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion)); + int current_expansion = RuleI(Expansion, CurrentExpansion); + if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) { + content_service.SetCurrentExpansion(current_expansion); + } LogInfo( "Current expansion is [{}] ({})", From 5c7eb0707f38c870a3047e2ba60bd0265a13944e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 02:19:58 -0500 Subject: [PATCH 098/272] Bulk load goallists --- .../base/base_goallists_repository.h | 19 ++++--- zone/tasks.cpp | 51 ++++++++++--------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/common/repositories/base/base_goallists_repository.h b/common/repositories/base/base_goallists_repository.h index 3b9dfb808..e1f1f0aa9 100644 --- a/common/repositories/base/base_goallists_repository.h +++ b/common/repositories/base/base_goallists_repository.h @@ -20,7 +20,7 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT + * This repository was automatically generated on Apr11, 2020 and is NOT * to be modified directly. Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only @@ -41,7 +41,7 @@ public: static std::string PrimaryKey() { - return std::string("entry"); + return std::string("listid"); } static std::vector Columns() @@ -111,7 +111,7 @@ public: ) { for (auto &goallists : goallistss) { - if (goallists.entry == goallists_id) { + if (goallists.listid == goallists_id) { return goallists; } } @@ -168,7 +168,8 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(goallists_entry.listid)); + update_values.push_back(columns[1] + " = " + std::to_string(goallists_entry.entry)); auto results = content_db.QueryDatabase( fmt::format( @@ -176,7 +177,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - goallists_entry.entry + goallists_entry.listid ) ); @@ -189,7 +190,8 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(goallists_entry.listid)); + insert_values.push_back(std::to_string(goallists_entry.entry)); auto results = content_db.QueryDatabase( fmt::format( @@ -200,7 +202,7 @@ public: ); if (results.Success()) { - goallists_entry.id = results.LastInsertedID(); + goallists_entry.listid = results.LastInsertedID(); return goallists_entry; } @@ -218,7 +220,8 @@ public: for (auto &goallists_entry: goallists_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(goallists_entry.listid)); + insert_values.push_back(std::to_string(goallists_entry.entry)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 882b9ea3e..4e4488b39 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -30,7 +30,8 @@ Copyright (C) 2001-2008 EQEMu Development Team (http://eqemulator.net) #include "../common/rulesys.h" #include "../common/string_util.h" #include "../common/say_link.h" - +#include "zonedb.h" +#include "../common/repositories/goallists_repository.h" #include "client.h" #include "entity.h" #include "mob.h" @@ -972,7 +973,7 @@ int TaskManager::GetTaskMinLevel(int TaskID) { return Tasks[TaskID]->MinLevel; } - + return -1; } @@ -3370,42 +3371,44 @@ bool TaskGoalListManager::LoadLists() TaskGoalLists.reserve(NumberOfLists); - int listIndex = 0; + int list_index = 0; for (auto row = results.begin(); row != results.end(); ++row) { - int listID = atoi(row[0]); + int listID = atoi(row[0]); int listSize = atoi(row[1]); + TaskGoalLists.push_back({listID, 0, 0}); - TaskGoalLists[listIndex].GoalItemEntries.reserve(listSize); + TaskGoalLists[list_index].GoalItemEntries.reserve(listSize); - listIndex++; + list_index++; } - for (int listIndex = 0; listIndex < NumberOfLists; listIndex++) { + auto goal_lists = GoallistsRepository::GetWhere("TRUE ORDER BY listid, entry ASC"); - int listID = TaskGoalLists[listIndex].ListID; - auto size = TaskGoalLists[listIndex].GoalItemEntries.capacity(); // this was only done for manual memory management, shouldn't need to do this - query = StringFormat("SELECT `entry` from `goallists` " - "WHERE `listid` = %i " - "ORDER BY `entry` ASC LIMIT %i", - listID, size); - results = content_db.QueryDatabase(query); - if (!results.Success()) { - continue; - } + for (list_index = 0; list_index < NumberOfLists; list_index++) { - for (auto row = results.begin(); row != results.end(); ++row) { + int list_id = TaskGoalLists[list_index].ListID; - int entry = atoi(row[0]); + for (auto &entry: goal_lists) { + if (entry.listid == list_id) { + if (entry.entry < TaskGoalLists[list_index].Min) { + TaskGoalLists[list_index].Min = entry.entry; + } - if (entry < TaskGoalLists[listIndex].Min) - TaskGoalLists[listIndex].Min = entry; + if (entry.entry > TaskGoalLists[list_index].Max) { + TaskGoalLists[list_index].Max = entry.entry; + } - if (entry > TaskGoalLists[listIndex].Max) - TaskGoalLists[listIndex].Max = entry; + TaskGoalLists[list_index].GoalItemEntries.push_back(entry.entry); - TaskGoalLists[listIndex].GoalItemEntries.push_back(entry); + LogTasksDetail( + "Goal list index [{}] loading list [{}] entry [{}]", + list_index, + list_id, + entry.entry + ); + } } } From e0363a8fe1c899d306adc35c243642e95d6d9aaa Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 02:47:54 -0500 Subject: [PATCH 099/272] Repository tweaks [skip ci] --- common/CMakeLists.txt | 16 - common/repositories/banned_ips_repository.h | 68 ---- .../base/base_aa_ability_repository.h | 7 +- .../base/base_aa_rank_effects_repository.h | 18 +- .../base/base_aa_rank_prereqs_repository.h | 18 +- .../base/base_aa_ranks_repository.h | 7 +- .../base/base_account_flags_repository.h | 18 +- .../base/base_account_ip_repository.h | 18 +- .../base/base_account_repository.h | 4 +- .../base/base_account_rewards_repository.h | 18 +- .../base/base_adventure_details_repository.h | 4 +- .../base/base_adventure_members_repository.h | 9 +- .../base/base_adventure_stats_repository.h | 9 +- ...venture_template_entry_flavor_repository.h | 7 +- ...base_adventure_template_entry_repository.h | 19 +- .../base/base_adventure_template_repository.h | 7 +- .../base/base_alternate_currency_repository.h | 7 +- .../repositories/base/base_auras_repository.h | 9 +- .../base/base_banned_ips_repository.h | 306 ----------------- .../base/base_base_data_repository.h | 18 +- .../base/base_blocked_spells_repository.h | 4 +- .../repositories/base/base_books_repository.h | 315 ----------------- .../base/base_bug_reports_repository.h | 4 +- .../repositories/base/base_bugs_repository.h | 4 +- .../repositories/base/base_buyer_repository.h | 18 +- ...base_char_create_combinations_repository.h | 24 +- ...char_create_point_allocations_repository.h | 7 +- .../base/base_char_recipe_list_repository.h | 18 +- .../base_character_activities_repository.h | 21 +- .../base_character_alt_currency_repository.h | 18 +- ...character_alternate_abilities_repository.h | 16 +- .../base/base_character_auras_repository.h | 16 +- .../base_character_bandolier_repository.h | 19 +- .../base/base_character_bind_repository.h | 13 +- .../base/base_character_buffs_repository.h | 18 +- .../base_character_corpse_items_repository.h | 18 +- .../base/base_character_corpses_repository.h | 4 +- .../base/base_character_currency_repository.h | 7 +- .../base/base_character_data_repository.h | 4 +- .../base_character_disciplines_repository.h | 16 +- ...se_character_inspect_messages_repository.h | 7 +- .../base_character_item_recast_repository.h | 16 +- .../base_character_languages_repository.h | 13 +- ...haracter_leadership_abilities_repository.h | 16 +- .../base/base_character_material_repository.h | 13 +- .../base_character_memmed_spells_repository.h | 16 +- .../base_character_pet_buffs_repository.h | 21 +- .../base/base_character_pet_info_repository.h | 18 +- .../base_character_pet_inventory_repository.h | 21 +- .../base_character_potionbelt_repository.h | 16 +- .../base/base_character_skills_repository.h | 13 +- .../base/base_character_spells_repository.h | 13 +- .../base/base_character_tasks_repository.h | 18 +- .../base/base_character_tribute_repository.h | 318 ----------------- .../base/base_chatchannels_repository.h | 324 ------------------ .../base/base_command_settings_repository.h | 315 ----------------- .../base/base_completed_tasks_repository.h | 27 +- .../base/base_data_buckets_repository.h | 4 +- .../base/base_db_str_repository.h | 16 +- .../base/base_discovered_items_repository.h | 9 +- .../repositories/base/base_doors_repository.h | 4 +- .../base/base_eventlog_repository.h | 4 +- .../base/base_faction_base_data_repository.h | 9 +- .../base/base_faction_list_mod_repository.h | 4 +- .../base/base_faction_list_repository.h | 7 +- .../base/base_faction_values_repository.h | 18 +- .../base/base_fishing_repository.h | 4 +- .../base/base_forage_repository.h | 4 +- .../base/base_friends_repository.h | 24 +- .../base/base_global_loot_repository.h | 4 +- .../base/base_gm_ips_repository.h | 18 +- .../base/base_goallists_repository.h | 4 +- .../base/base_graveyard_repository.h | 4 +- .../repositories/base/base_grid_repository.h | 16 +- .../base/base_ground_spawns_repository.h | 4 +- .../base/base_group_id_repository.h | 21 +- .../base/base_group_leaders_repository.h | 9 +- .../base/base_guild_members_repository.h | 9 +- .../base/base_guild_ranks_repository.h | 18 +- .../base/base_guild_relations_repository.h | 18 +- .../base/base_guilds_repository.h | 4 +- .../base/base_hackers_repository.h | 4 +- .../base/base_horses_repository.h | 9 +- .../base_instance_list_player_repository.h | 19 +- .../base/base_instance_list_repository.h | 4 +- .../base/base_inventory_repository.h | 18 +- .../base_inventory_snapshots_repository.h | 21 +- .../base/base_ip_exemptions_repository.h | 6 +- .../base/base_item_tick_repository.h | 6 +- .../repositories/base/base_items_repository.h | 7 +- .../base/base_launcher_repository.h | 9 +- .../base/base_launcher_zones_repository.h | 312 ----------------- .../base/base_ldon_trap_entries_repository.h | 19 +- .../base_ldon_trap_templates_repository.h | 7 +- .../base/base_level_exp_mods_repository.h | 9 +- .../base/base_lfguild_repository.h | 18 +- .../base/base_login_accounts_repository.h | 7 +- .../base/base_login_api_tokens_repository.h | 4 +- .../base_login_server_admins_repository.h | 4 +- .../base_login_server_list_types_repository.h | 7 +- .../base_login_world_servers_repository.h | 4 +- .../base/base_logsys_categories_repository.h | 9 +- .../base/base_lootdrop_entries_repository.h | 18 +- .../base/base_lootdrop_repository.h | 4 +- .../base/base_loottable_entries_repository.h | 18 +- .../base/base_loottable_repository.h | 4 +- .../repositories/base/base_mail_repository.h | 6 +- .../base/base_merchantlist_repository.h | 18 +- .../base/base_merchantlist_temp_repository.h | 18 +- .../base/base_name_filter_repository.h | 4 +- .../base/base_npc_emotes_repository.h | 4 +- .../base_npc_faction_entries_repository.h | 18 +- .../base/base_npc_faction_repository.h | 4 +- .../base_npc_scale_global_base_repository.h | 18 +- ...se_npc_spells_effects_entries_repository.h | 4 +- .../base/base_npc_spells_effects_repository.h | 4 +- .../base/base_npc_spells_entries_repository.h | 4 +- .../base/base_npc_spells_repository.h | 4 +- .../base/base_npc_types_repository.h | 4 +- .../base/base_npc_types_tint_repository.h | 7 +- .../base/base_object_contents_repository.h | 18 +- .../base/base_object_repository.h | 4 +- ...se_perl_event_export_settings_repository.h | 9 +- .../base/base_petitions_repository.h | 6 +- ...ase_pets_equipmentset_entries_repository.h | 18 +- .../base/base_pets_equipmentset_repository.h | 9 +- .../repositories/base/base_pets_repository.h | 18 +- .../base/base_player_titlesets_repository.h | 4 +- .../base/base_proximities_repository.h | 18 +- .../base/base_quest_globals_repository.h | 24 +- .../base/base_raid_details_repository.h | 9 +- .../base/base_raid_members_repository.h | 9 +- .../base/base_reports_repository.h | 4 +- .../base/base_respawn_times_repository.h | 16 +- .../base/base_rule_sets_repository.h | 6 +- .../base/base_rule_values_repository.h | 18 +- .../base/base_saylink_repository.h | 4 +- .../base/base_skill_caps_repository.h | 24 +- .../base/base_spawn2_repository.h | 4 +- .../base_spawn_condition_values_repository.h | 19 +- .../base/base_spawn_conditions_repository.h | 18 +- .../base/base_spawn_events_repository.h | 4 +- .../base/base_spawnentry_repository.h | 18 +- .../base/base_spawngroup_repository.h | 4 +- .../base/base_spell_buckets_repository.h | 9 +- .../base/base_spell_globals_repository.h | 9 +- .../base/base_spells_new_repository.h | 7 +- .../base/base_start_zones_repository.h | 24 +- .../base/base_starting_items_repository.h | 13 +- .../base/base_task_activities_repository.h | 18 +- .../repositories/base/base_tasks_repository.h | 7 +- .../base/base_tasksets_repository.h | 19 +- .../base/base_timers_repository.h | 18 +- .../base/base_titles_repository.h | 4 +- .../base/base_trader_repository.h | 18 +- ...ase_tradeskill_recipe_entries_repository.h | 4 +- .../base/base_tradeskill_recipe_repository.h | 4 +- .../repositories/base/base_traps_repository.h | 4 +- .../base/base_tribute_levels_repository.h | 18 +- .../base/base_tributes_repository.h | 16 +- .../base/base_variables_repository.h | 9 +- ...base_veteran_reward_templates_repository.h | 18 +- .../base/base_zone_points_repository.h | 4 +- .../repositories/base/base_zone_repository.h | 4 +- common/repositories/books_repository.h | 68 ---- .../character_tribute_repository.h | 68 ---- common/repositories/chatchannels_repository.h | 68 ---- .../command_settings_repository.h | 68 ---- common/repositories/launcher_repository.h | 68 ---- .../repositories/launcher_zones_repository.h | 68 ---- .../template/base_repository.template | 6 +- .../repositories/template/repository.template | 6 +- .../generators/repository-generator.pl | 28 +- 173 files changed, 1185 insertions(+), 3011 deletions(-) delete mode 100644 common/repositories/banned_ips_repository.h delete mode 100644 common/repositories/base/base_banned_ips_repository.h delete mode 100644 common/repositories/base/base_books_repository.h delete mode 100644 common/repositories/base/base_character_tribute_repository.h delete mode 100644 common/repositories/base/base_chatchannels_repository.h delete mode 100644 common/repositories/base/base_command_settings_repository.h delete mode 100644 common/repositories/base/base_launcher_zones_repository.h delete mode 100644 common/repositories/books_repository.h delete mode 100644 common/repositories/character_tribute_repository.h delete mode 100644 common/repositories/chatchannels_repository.h delete mode 100644 common/repositories/command_settings_repository.h delete mode 100644 common/repositories/launcher_repository.h delete mode 100644 common/repositories/launcher_zones_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 34be1121a..e77ed1a08 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -132,10 +132,8 @@ SET(repositories repositories/base/base_adventure_template_entry_flavor_repository.h repositories/base/base_alternate_currency_repository.h repositories/base/base_auras_repository.h - repositories/base/base_banned_ips_repository.h repositories/base/base_base_data_repository.h repositories/base/base_blocked_spells_repository.h - repositories/base/base_books_repository.h repositories/base/base_bugs_repository.h repositories/base/base_bug_reports_repository.h repositories/base/base_buyer_repository.h @@ -164,12 +162,9 @@ SET(repositories repositories/base/base_character_skills_repository.h repositories/base/base_character_spells_repository.h repositories/base/base_character_tasks_repository.h - repositories/base/base_character_tribute_repository.h repositories/base/base_char_create_combinations_repository.h repositories/base/base_char_create_point_allocations_repository.h repositories/base/base_char_recipe_list_repository.h - repositories/base/base_chatchannels_repository.h - repositories/base/base_command_settings_repository.h repositories/base/base_completed_tasks_repository.h repositories/base/base_data_buckets_repository.h repositories/base/base_db_str_repository.h @@ -197,7 +192,6 @@ SET(repositories repositories/base/base_guild_ranks_repository.h repositories/base/base_guild_relations_repository.h repositories/base/base_hackers_repository.h - repositories/base/base_horses_repository.h repositories/base/base_instance_list_repository.h repositories/base/base_instance_list_player_repository.h repositories/base/base_inventory_repository.h @@ -205,8 +199,6 @@ SET(repositories repositories/base/base_ip_exemptions_repository.h repositories/base/base_items_repository.h repositories/base/base_item_tick_repository.h - repositories/base/base_launcher_repository.h - repositories/base/base_launcher_zones_repository.h repositories/base/base_ldon_trap_entries_repository.h repositories/base/base_ldon_trap_templates_repository.h repositories/base/base_level_exp_mods_repository.h @@ -297,10 +289,8 @@ SET(repositories repositories/adventure_template_entry_flavor_repository.h repositories/alternate_currency_repository.h repositories/auras_repository.h - repositories/banned_ips_repository.h repositories/base_data_repository.h repositories/blocked_spells_repository.h - repositories/books_repository.h repositories/bugs_repository.h repositories/bug_reports_repository.h repositories/buyer_repository.h @@ -329,12 +319,9 @@ SET(repositories repositories/character_skills_repository.h repositories/character_spells_repository.h repositories/character_tasks_repository.h - repositories/character_tribute_repository.h repositories/char_create_combinations_repository.h repositories/char_create_point_allocations_repository.h repositories/char_recipe_list_repository.h - repositories/chatchannels_repository.h - repositories/command_settings_repository.h repositories/completed_tasks_repository.h repositories/data_buckets_repository.h repositories/db_str_repository.h @@ -362,7 +349,6 @@ SET(repositories repositories/guild_ranks_repository.h repositories/guild_relations_repository.h repositories/hackers_repository.h - repositories/horses_repository.h repositories/instance_list_repository.h repositories/instance_list_player_repository.h repositories/inventory_repository.h @@ -370,8 +356,6 @@ SET(repositories repositories/ip_exemptions_repository.h repositories/items_repository.h repositories/item_tick_repository.h - repositories/launcher_repository.h - repositories/launcher_zones_repository.h repositories/ldon_trap_entries_repository.h repositories/ldon_trap_templates_repository.h repositories/level_exp_mods_repository.h diff --git a/common/repositories/banned_ips_repository.h b/common/repositories/banned_ips_repository.h deleted file mode 100644 index 4610a6575..000000000 --- a/common/repositories/banned_ips_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_BANNED_IPS_REPOSITORY_H -#define EQEMU_BANNED_IPS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_banned_ips_repository.h" - -class BannedIpsRepository: public BaseBannedIpsRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * BannedIpsRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * BannedIpsRepository::GetWhereNeverExpires() - * BannedIpsRepository::GetWhereXAndY() - * BannedIpsRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_BANNED_IPS_REPOSITORY_H diff --git a/common/repositories/base/base_aa_ability_repository.h b/common/repositories/base/base_aa_ability_repository.h index 3fbc3eeee..bd013a0c2 100644 --- a/common/repositories/base/base_aa_ability_repository.h +++ b/common/repositories/base/base_aa_ability_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -216,6 +216,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(aa_ability_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(aa_ability_entry.name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(aa_ability_entry.category)); update_values.push_back(columns[3] + " = " + std::to_string(aa_ability_entry.classes)); @@ -249,6 +250,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(aa_ability_entry.id)); insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); insert_values.push_back(std::to_string(aa_ability_entry.category)); insert_values.push_back(std::to_string(aa_ability_entry.classes)); @@ -290,6 +292,7 @@ public: for (auto &aa_ability_entry: aa_ability_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(aa_ability_entry.id)); insert_values.push_back("'" + EscapeString(aa_ability_entry.name) + "'"); insert_values.push_back(std::to_string(aa_ability_entry.category)); insert_values.push_back(std::to_string(aa_ability_entry.classes)); diff --git a/common/repositories/base/base_aa_rank_effects_repository.h b/common/repositories/base/base_aa_rank_effects_repository.h index 8744febbe..75b8063b2 100644 --- a/common/repositories/base/base_aa_rank_effects_repository.h +++ b/common/repositories/base/base_aa_rank_effects_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("rank_id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &aa_rank_effects : aa_rank_effectss) { - if (aa_rank_effects.slot == aa_rank_effects_id) { + if (aa_rank_effects.rank_id == aa_rank_effects_id) { return aa_rank_effects; } } @@ -180,6 +180,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(aa_rank_effects_entry.rank_id)); + update_values.push_back(columns[1] + " = " + std::to_string(aa_rank_effects_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_effects_entry.effect_id)); update_values.push_back(columns[3] + " = " + std::to_string(aa_rank_effects_entry.base1)); update_values.push_back(columns[4] + " = " + std::to_string(aa_rank_effects_entry.base2)); @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - aa_rank_effects_entry.slot + aa_rank_effects_entry.rank_id ) ); @@ -203,6 +205,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(aa_rank_effects_entry.rank_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.slot)); insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - aa_rank_effects_entry.id = results.LastInsertedID(); + aa_rank_effects_entry.rank_id = results.LastInsertedID(); return aa_rank_effects_entry; } @@ -234,6 +238,8 @@ public: for (auto &aa_rank_effects_entry: aa_rank_effects_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(aa_rank_effects_entry.rank_id)); + insert_values.push_back(std::to_string(aa_rank_effects_entry.slot)); insert_values.push_back(std::to_string(aa_rank_effects_entry.effect_id)); insert_values.push_back(std::to_string(aa_rank_effects_entry.base1)); insert_values.push_back(std::to_string(aa_rank_effects_entry.base2)); diff --git a/common/repositories/base/base_aa_rank_prereqs_repository.h b/common/repositories/base/base_aa_rank_prereqs_repository.h index 194917b34..c3cc5f6c3 100644 --- a/common/repositories/base/base_aa_rank_prereqs_repository.h +++ b/common/repositories/base/base_aa_rank_prereqs_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("aa_id"); + return std::string("rank_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &aa_rank_prereqs : aa_rank_prereqss) { - if (aa_rank_prereqs.aa_id == aa_rank_prereqs_id) { + if (aa_rank_prereqs.rank_id == aa_rank_prereqs_id) { return aa_rank_prereqs; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(aa_rank_prereqs_entry.rank_id)); + update_values.push_back(columns[1] + " = " + std::to_string(aa_rank_prereqs_entry.aa_id)); update_values.push_back(columns[2] + " = " + std::to_string(aa_rank_prereqs_entry.points)); auto results = content_db.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - aa_rank_prereqs_entry.aa_id + aa_rank_prereqs_entry.rank_id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.rank_id)); + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.aa_id)); insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); auto results = content_db.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - aa_rank_prereqs_entry.id = results.LastInsertedID(); + aa_rank_prereqs_entry.rank_id = results.LastInsertedID(); return aa_rank_prereqs_entry; } @@ -222,6 +226,8 @@ public: for (auto &aa_rank_prereqs_entry: aa_rank_prereqs_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.rank_id)); + insert_values.push_back(std::to_string(aa_rank_prereqs_entry.aa_id)); insert_values.push_back(std::to_string(aa_rank_prereqs_entry.points)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_aa_ranks_repository.h b/common/repositories/base/base_aa_ranks_repository.h index d8a7624d5..1561f7b8a 100644 --- a/common/repositories/base/base_aa_ranks_repository.h +++ b/common/repositories/base/base_aa_ranks_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -212,6 +212,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(aa_ranks_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(aa_ranks_entry.upper_hotkey_sid)); update_values.push_back(columns[2] + " = " + std::to_string(aa_ranks_entry.lower_hotkey_sid)); update_values.push_back(columns[3] + " = " + std::to_string(aa_ranks_entry.title_sid)); @@ -244,6 +245,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(aa_ranks_entry.id)); insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); @@ -284,6 +286,7 @@ public: for (auto &aa_ranks_entry: aa_ranks_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(aa_ranks_entry.id)); insert_values.push_back(std::to_string(aa_ranks_entry.upper_hotkey_sid)); insert_values.push_back(std::to_string(aa_ranks_entry.lower_hotkey_sid)); insert_values.push_back(std::to_string(aa_ranks_entry.title_sid)); diff --git a/common/repositories/base/base_account_flags_repository.h b/common/repositories/base/base_account_flags_repository.h index 36a4f7f7c..bd60b5856 100644 --- a/common/repositories/base/base_account_flags_repository.h +++ b/common/repositories/base/base_account_flags_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("p_flag"); + return std::string("p_accid"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &account_flags : account_flagss) { - if (account_flags.p_flag == account_flags_id) { + if (account_flags.p_accid == account_flags_id) { return account_flags; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(account_flags_entry.p_accid)); + update_values.push_back(columns[1] + " = '" + EscapeString(account_flags_entry.p_flag) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(account_flags_entry.p_value) + "'"); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - account_flags_entry.p_flag + account_flags_entry.p_accid ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(account_flags_entry.p_accid)); + insert_values.push_back("'" + EscapeString(account_flags_entry.p_flag) + "'"); insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); auto results = database.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - account_flags_entry.id = results.LastInsertedID(); + account_flags_entry.p_accid = results.LastInsertedID(); return account_flags_entry; } @@ -222,6 +226,8 @@ public: for (auto &account_flags_entry: account_flags_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(account_flags_entry.p_accid)); + insert_values.push_back("'" + EscapeString(account_flags_entry.p_flag) + "'"); insert_values.push_back("'" + EscapeString(account_flags_entry.p_value) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_account_ip_repository.h b/common/repositories/base/base_account_ip_repository.h index c85b90c81..a179590fe 100644 --- a/common/repositories/base/base_account_ip_repository.h +++ b/common/repositories/base/base_account_ip_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("ip"); + return std::string("accid"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &account_ip : account_ips) { - if (account_ip.ip == account_ip_id) { + if (account_ip.accid == account_ip_id) { return account_ip; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(account_ip_entry.accid)); + update_values.push_back(columns[1] + " = '" + EscapeString(account_ip_entry.ip) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(account_ip_entry.count)); update_values.push_back(columns[3] + " = '" + EscapeString(account_ip_entry.lastused) + "'"); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - account_ip_entry.ip + account_ip_entry.accid ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(account_ip_entry.accid)); + insert_values.push_back("'" + EscapeString(account_ip_entry.ip) + "'"); insert_values.push_back(std::to_string(account_ip_entry.count)); insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - account_ip_entry.id = results.LastInsertedID(); + account_ip_entry.accid = results.LastInsertedID(); return account_ip_entry; } @@ -228,6 +232,8 @@ public: for (auto &account_ip_entry: account_ip_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(account_ip_entry.accid)); + insert_values.push_back("'" + EscapeString(account_ip_entry.ip) + "'"); insert_values.push_back(std::to_string(account_ip_entry.count)); insert_values.push_back("'" + EscapeString(account_ip_entry.lastused) + "'"); diff --git a/common/repositories/base/base_account_repository.h b/common/repositories/base/base_account_repository.h index 3434a9c9f..772ddc45e 100644 --- a/common/repositories/base/base_account_repository.h +++ b/common/repositories/base/base_account_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_account_rewards_repository.h b/common/repositories/base/base_account_rewards_repository.h index 06120dffb..a2ef9ba9d 100644 --- a/common/repositories/base/base_account_rewards_repository.h +++ b/common/repositories/base/base_account_rewards_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("reward_id"); + return std::string("account_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &account_rewards : account_rewardss) { - if (account_rewards.reward_id == account_rewards_id) { + if (account_rewards.account_id == account_rewards_id) { return account_rewards; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(account_rewards_entry.account_id)); + update_values.push_back(columns[1] + " = " + std::to_string(account_rewards_entry.reward_id)); update_values.push_back(columns[2] + " = " + std::to_string(account_rewards_entry.amount)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - account_rewards_entry.reward_id + account_rewards_entry.account_id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(account_rewards_entry.account_id)); + insert_values.push_back(std::to_string(account_rewards_entry.reward_id)); insert_values.push_back(std::to_string(account_rewards_entry.amount)); auto results = database.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - account_rewards_entry.id = results.LastInsertedID(); + account_rewards_entry.account_id = results.LastInsertedID(); return account_rewards_entry; } @@ -222,6 +226,8 @@ public: for (auto &account_rewards_entry: account_rewards_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(account_rewards_entry.account_id)); + insert_values.push_back(std::to_string(account_rewards_entry.reward_id)); insert_values.push_back(std::to_string(account_rewards_entry.amount)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_adventure_details_repository.h b/common/repositories/base/base_adventure_details_repository.h index d5ffbecc0..c5b1595fd 100644 --- a/common/repositories/base/base_adventure_details_repository.h +++ b/common/repositories/base/base_adventure_details_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_adventure_members_repository.h b/common/repositories/base/base_adventure_members_repository.h index 0636da1ec..c99f51bd3 100644 --- a/common/repositories/base/base_adventure_members_repository.h +++ b/common/repositories/base/base_adventure_members_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -169,6 +169,7 @@ public: auto columns = Columns(); update_values.push_back(columns[0] + " = " + std::to_string(adventure_members_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(adventure_members_entry.charid)); auto results = database.QueryDatabase( fmt::format( @@ -190,6 +191,7 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(adventure_members_entry.id)); + insert_values.push_back(std::to_string(adventure_members_entry.charid)); auto results = database.QueryDatabase( fmt::format( @@ -200,7 +202,7 @@ public: ); if (results.Success()) { - adventure_members_entry.id = results.LastInsertedID(); + adventure_members_entry.charid = results.LastInsertedID(); return adventure_members_entry; } @@ -219,6 +221,7 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(adventure_members_entry.id)); + insert_values.push_back(std::to_string(adventure_members_entry.charid)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_adventure_stats_repository.h b/common/repositories/base/base_adventure_stats_repository.h index fbd571bc9..03a3b6255 100644 --- a/common/repositories/base/base_adventure_stats_repository.h +++ b/common/repositories/base/base_adventure_stats_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -204,6 +204,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(adventure_stats_entry.player_id)); update_values.push_back(columns[1] + " = " + std::to_string(adventure_stats_entry.guk_wins)); update_values.push_back(columns[2] + " = " + std::to_string(adventure_stats_entry.mir_wins)); update_values.push_back(columns[3] + " = " + std::to_string(adventure_stats_entry.mmc_wins)); @@ -234,6 +235,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_stats_entry.player_id)); insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); @@ -254,7 +256,7 @@ public: ); if (results.Success()) { - adventure_stats_entry.id = results.LastInsertedID(); + adventure_stats_entry.player_id = results.LastInsertedID(); return adventure_stats_entry; } @@ -272,6 +274,7 @@ public: for (auto &adventure_stats_entry: adventure_stats_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_stats_entry.player_id)); insert_values.push_back(std::to_string(adventure_stats_entry.guk_wins)); insert_values.push_back(std::to_string(adventure_stats_entry.mir_wins)); insert_values.push_back(std::to_string(adventure_stats_entry.mmc_wins)); diff --git a/common/repositories/base/base_adventure_template_entry_flavor_repository.h b/common/repositories/base/base_adventure_template_entry_flavor_repository.h index 0aec523ed..b1099d0c4 100644 --- a/common/repositories/base/base_adventure_template_entry_flavor_repository.h +++ b/common/repositories/base/base_adventure_template_entry_flavor_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -168,6 +168,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(adventure_template_entry_flavor_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); auto results = content_db.QueryDatabase( @@ -189,6 +190,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_template_entry_flavor_entry.id)); insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); auto results = content_db.QueryDatabase( @@ -218,6 +220,7 @@ public: for (auto &adventure_template_entry_flavor_entry: adventure_template_entry_flavor_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_template_entry_flavor_entry.id)); insert_values.push_back("'" + EscapeString(adventure_template_entry_flavor_entry.text) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_adventure_template_entry_repository.h b/common/repositories/base/base_adventure_template_entry_repository.h index 64799c3bf..e44adb4e4 100644 --- a/common/repositories/base/base_adventure_template_entry_repository.h +++ b/common/repositories/base/base_adventure_template_entry_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -41,7 +41,7 @@ public: static std::string PrimaryKey() { - return std::string("template_id"); + return std::string("id"); } static std::vector Columns() @@ -111,7 +111,7 @@ public: ) { for (auto &adventure_template_entry : adventure_template_entrys) { - if (adventure_template_entry.template_id == adventure_template_entry_id) { + if (adventure_template_entry.id == adventure_template_entry_id) { return adventure_template_entry; } } @@ -168,7 +168,8 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(adventure_template_entry_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(adventure_template_entry_entry.template_id)); auto results = content_db.QueryDatabase( fmt::format( @@ -176,7 +177,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - adventure_template_entry_entry.template_id + adventure_template_entry_entry.id ) ); @@ -189,7 +190,8 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(adventure_template_entry_entry.id)); + insert_values.push_back(std::to_string(adventure_template_entry_entry.template_id)); auto results = content_db.QueryDatabase( fmt::format( @@ -218,7 +220,8 @@ public: for (auto &adventure_template_entry_entry: adventure_template_entry_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(adventure_template_entry_entry.id)); + insert_values.push_back(std::to_string(adventure_template_entry_entry.template_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_adventure_template_repository.h b/common/repositories/base/base_adventure_template_repository.h index d93f46bf4..d95baa339 100644 --- a/common/repositories/base/base_adventure_template_repository.h +++ b/common/repositories/base/base_adventure_template_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -292,6 +292,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(adventure_template_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(adventure_template_entry.zone) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(adventure_template_entry.zone_version)); update_values.push_back(columns[3] + " = " + std::to_string(adventure_template_entry.is_hard)); @@ -344,6 +345,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_template_entry.id)); insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); @@ -404,6 +406,7 @@ public: for (auto &adventure_template_entry: adventure_template_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(adventure_template_entry.id)); insert_values.push_back("'" + EscapeString(adventure_template_entry.zone) + "'"); insert_values.push_back(std::to_string(adventure_template_entry.zone_version)); insert_values.push_back(std::to_string(adventure_template_entry.is_hard)); diff --git a/common/repositories/base/base_alternate_currency_repository.h b/common/repositories/base/base_alternate_currency_repository.h index 07fc1e489..ff6b98a09 100644 --- a/common/repositories/base/base_alternate_currency_repository.h +++ b/common/repositories/base/base_alternate_currency_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -168,6 +168,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(alternate_currency_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(alternate_currency_entry.item_id)); auto results = content_db.QueryDatabase( @@ -189,6 +190,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(alternate_currency_entry.id)); insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); auto results = content_db.QueryDatabase( @@ -218,6 +220,7 @@ public: for (auto &alternate_currency_entry: alternate_currency_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(alternate_currency_entry.id)); insert_values.push_back(std::to_string(alternate_currency_entry.item_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_auras_repository.h b/common/repositories/base/base_auras_repository.h index a12523bbd..c2845bc49 100644 --- a/common/repositories/base/base_auras_repository.h +++ b/common/repositories/base/base_auras_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -204,6 +204,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(auras_entry.type)); update_values.push_back(columns[1] + " = " + std::to_string(auras_entry.npc_type)); update_values.push_back(columns[2] + " = '" + EscapeString(auras_entry.name) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(auras_entry.spell_id)); @@ -234,6 +235,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(auras_entry.type)); insert_values.push_back(std::to_string(auras_entry.npc_type)); insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); insert_values.push_back(std::to_string(auras_entry.spell_id)); @@ -254,7 +256,7 @@ public: ); if (results.Success()) { - auras_entry.id = results.LastInsertedID(); + auras_entry.type = results.LastInsertedID(); return auras_entry; } @@ -272,6 +274,7 @@ public: for (auto &auras_entry: auras_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(auras_entry.type)); insert_values.push_back(std::to_string(auras_entry.npc_type)); insert_values.push_back("'" + EscapeString(auras_entry.name) + "'"); insert_values.push_back(std::to_string(auras_entry.spell_id)); diff --git a/common/repositories/base/base_banned_ips_repository.h b/common/repositories/base/base_banned_ips_repository.h deleted file mode 100644 index 9c0178b09..000000000 --- a/common/repositories/base/base_banned_ips_repository.h +++ /dev/null @@ -1,306 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_BANNED_IPS_REPOSITORY_H -#define EQEMU_BASE_BANNED_IPS_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseBannedIpsRepository { -public: - struct BannedIps { - std::string ip_address; - std::string notes; - }; - - static std::string PrimaryKey() - { - return std::string("ip_address"); - } - - static std::vector Columns() - { - return { - "ip_address", - "notes", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("banned_ips"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static BannedIps NewEntity() - { - BannedIps entry{}; - - entry.ip_address = ""; - entry.notes = ""; - - return entry; - } - - static BannedIps GetBannedIpsEntry( - const std::vector &banned_ipss, - int banned_ips_id - ) - { - for (auto &banned_ips : banned_ipss) { - if (banned_ips.ip_address == banned_ips_id) { - return banned_ips; - } - } - - return NewEntity(); - } - - static BannedIps FindOne( - int banned_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - banned_ips_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int banned_ips_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - banned_ips_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - BannedIps banned_ips_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(banned_ips_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - banned_ips_entry.ip_address - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static BannedIps InsertOne( - BannedIps banned_ips_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - banned_ips_entry.id = results.LastInsertedID(); - return banned_ips_entry; - } - - banned_ips_entry = NewEntity(); - - return banned_ips_entry; - } - - static int InsertMany( - std::vector banned_ips_entries - ) - { - std::vector insert_chunks; - - for (auto &banned_ips_entry: banned_ips_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(banned_ips_entry.notes) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - BannedIps entry{}; - - entry.ip_address = row[0] ? row[0] : ""; - entry.notes = row[1] ? row[1] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_BANNED_IPS_REPOSITORY_H diff --git a/common/repositories/base/base_base_data_repository.h b/common/repositories/base/base_base_data_repository.h index 0cc222895..029023277 100644 --- a/common/repositories/base/base_base_data_repository.h +++ b/common/repositories/base/base_base_data_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -49,7 +49,7 @@ public: static std::string PrimaryKey() { - return std::string("class"); + return std::string("level"); } static std::vector Columns() @@ -135,7 +135,7 @@ public: ) { for (auto &base_data : base_datas) { - if (base_data.class == base_data_id) { + if (base_data.level == base_data_id) { return base_data; } } @@ -200,6 +200,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(base_data_entry.level)); + update_values.push_back(columns[1] + " = " + std::to_string(base_data_entry.class)); update_values.push_back(columns[2] + " = " + std::to_string(base_data_entry.hp)); update_values.push_back(columns[3] + " = " + std::to_string(base_data_entry.mana)); update_values.push_back(columns[4] + " = " + std::to_string(base_data_entry.end)); @@ -215,7 +217,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - base_data_entry.class + base_data_entry.level ) ); @@ -228,6 +230,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(base_data_entry.level)); + insert_values.push_back(std::to_string(base_data_entry.class)); insert_values.push_back(std::to_string(base_data_entry.hp)); insert_values.push_back(std::to_string(base_data_entry.mana)); insert_values.push_back(std::to_string(base_data_entry.end)); @@ -246,7 +250,7 @@ public: ); if (results.Success()) { - base_data_entry.id = results.LastInsertedID(); + base_data_entry.level = results.LastInsertedID(); return base_data_entry; } @@ -264,6 +268,8 @@ public: for (auto &base_data_entry: base_data_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(base_data_entry.level)); + insert_values.push_back(std::to_string(base_data_entry.class)); insert_values.push_back(std::to_string(base_data_entry.hp)); insert_values.push_back(std::to_string(base_data_entry.mana)); insert_values.push_back(std::to_string(base_data_entry.end)); diff --git a/common/repositories/base/base_blocked_spells_repository.h b/common/repositories/base/base_blocked_spells_repository.h index 753fe131d..6a0066ea6 100644 --- a/common/repositories/base/base_blocked_spells_repository.h +++ b/common/repositories/base/base_blocked_spells_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_books_repository.h b/common/repositories/base/base_books_repository.h deleted file mode 100644 index c8453c680..000000000 --- a/common/repositories/base/base_books_repository.h +++ /dev/null @@ -1,315 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_BOOKS_REPOSITORY_H -#define EQEMU_BASE_BOOKS_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseBooksRepository { -public: - struct Books { - std::string name; - std::string txtfile; - int language; - }; - - static std::string PrimaryKey() - { - return std::string("name"); - } - - static std::vector Columns() - { - return { - "name", - "txtfile", - "language", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("books"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Books NewEntity() - { - Books entry{}; - - entry.name = ""; - entry.txtfile = ""; - entry.language = 0; - - return entry; - } - - static Books GetBooksEntry( - const std::vector &bookss, - int books_id - ) - { - for (auto &books : bookss) { - if (books.name == books_id) { - return books; - } - } - - return NewEntity(); - } - - static Books FindOne( - int books_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - books_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int books_id - ) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - books_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Books books_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(books_entry.txtfile) + "'"); - update_values.push_back(columns[2] + " = " + std::to_string(books_entry.language)); - - auto results = content_db.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - books_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Books InsertOne( - Books books_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); - insert_values.push_back(std::to_string(books_entry.language)); - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - books_entry.id = results.LastInsertedID(); - return books_entry; - } - - books_entry = NewEntity(); - - return books_entry; - } - - static int InsertMany( - std::vector books_entries - ) - { - std::vector insert_chunks; - - for (auto &books_entry: books_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(books_entry.txtfile) + "'"); - insert_values.push_back(std::to_string(books_entry.language)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = content_db.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Books entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.txtfile = row[1] ? row[1] : ""; - entry.language = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = content_db.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_BOOKS_REPOSITORY_H diff --git a/common/repositories/base/base_bug_reports_repository.h b/common/repositories/base/base_bug_reports_repository.h index 5ec89a015..90fa46870 100644 --- a/common/repositories/base/base_bug_reports_repository.h +++ b/common/repositories/base/base_bug_reports_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_bugs_repository.h b/common/repositories/base/base_bugs_repository.h index 08d378271..29c0c6cd0 100644 --- a/common/repositories/base/base_bugs_repository.h +++ b/common/repositories/base/base_bugs_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_buyer_repository.h b/common/repositories/base/base_buyer_repository.h index 2752abe23..ea0f50b10 100644 --- a/common/repositories/base/base_buyer_repository.h +++ b/common/repositories/base/base_buyer_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -45,7 +45,7 @@ public: static std::string PrimaryKey() { - return std::string("buyslot"); + return std::string("charid"); } static std::vector Columns() @@ -123,7 +123,7 @@ public: ) { for (auto &buyer : buyers) { - if (buyer.buyslot == buyer_id) { + if (buyer.charid == buyer_id) { return buyer; } } @@ -184,6 +184,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(buyer_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(buyer_entry.buyslot)); update_values.push_back(columns[2] + " = " + std::to_string(buyer_entry.itemid)); update_values.push_back(columns[3] + " = '" + EscapeString(buyer_entry.itemname) + "'"); update_values.push_back(columns[4] + " = " + std::to_string(buyer_entry.quantity)); @@ -195,7 +197,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - buyer_entry.buyslot + buyer_entry.charid ) ); @@ -208,6 +210,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(buyer_entry.charid)); + insert_values.push_back(std::to_string(buyer_entry.buyslot)); insert_values.push_back(std::to_string(buyer_entry.itemid)); insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); insert_values.push_back(std::to_string(buyer_entry.quantity)); @@ -222,7 +226,7 @@ public: ); if (results.Success()) { - buyer_entry.id = results.LastInsertedID(); + buyer_entry.charid = results.LastInsertedID(); return buyer_entry; } @@ -240,6 +244,8 @@ public: for (auto &buyer_entry: buyer_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(buyer_entry.charid)); + insert_values.push_back(std::to_string(buyer_entry.buyslot)); insert_values.push_back(std::to_string(buyer_entry.itemid)); insert_values.push_back("'" + EscapeString(buyer_entry.itemname) + "'"); insert_values.push_back(std::to_string(buyer_entry.quantity)); diff --git a/common/repositories/base/base_char_create_combinations_repository.h b/common/repositories/base/base_char_create_combinations_repository.h index d333c7d63..f937fc518 100644 --- a/common/repositories/base/base_char_create_combinations_repository.h +++ b/common/repositories/base/base_char_create_combinations_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -48,7 +48,7 @@ public: static std::string PrimaryKey() { - return std::string("start_zone"); + return std::string("race"); } static std::vector Columns() @@ -132,7 +132,7 @@ public: ) { for (auto &char_create_combinations : char_create_combinationss) { - if (char_create_combinations.start_zone == char_create_combinations_id) { + if (char_create_combinations.race == char_create_combinations_id) { return char_create_combinations; } } @@ -197,6 +197,10 @@ public: auto columns = Columns(); update_values.push_back(columns[0] + " = " + std::to_string(char_create_combinations_entry.allocation_id)); + update_values.push_back(columns[1] + " = " + std::to_string(char_create_combinations_entry.race)); + update_values.push_back(columns[2] + " = " + std::to_string(char_create_combinations_entry.class)); + update_values.push_back(columns[3] + " = " + std::to_string(char_create_combinations_entry.deity)); + update_values.push_back(columns[4] + " = " + std::to_string(char_create_combinations_entry.start_zone)); update_values.push_back(columns[5] + " = " + std::to_string(char_create_combinations_entry.expansions_req)); update_values.push_back(columns[6] + " = " + std::to_string(char_create_combinations_entry.min_expansion)); update_values.push_back(columns[7] + " = " + std::to_string(char_create_combinations_entry.max_expansion)); @@ -208,7 +212,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - char_create_combinations_entry.start_zone + char_create_combinations_entry.race ) ); @@ -222,6 +226,10 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.race)); + insert_values.push_back(std::to_string(char_create_combinations_entry.class)); + insert_values.push_back(std::to_string(char_create_combinations_entry.deity)); + insert_values.push_back(std::to_string(char_create_combinations_entry.start_zone)); insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); @@ -236,7 +244,7 @@ public: ); if (results.Success()) { - char_create_combinations_entry.id = results.LastInsertedID(); + char_create_combinations_entry.race = results.LastInsertedID(); return char_create_combinations_entry; } @@ -255,6 +263,10 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(char_create_combinations_entry.allocation_id)); + insert_values.push_back(std::to_string(char_create_combinations_entry.race)); + insert_values.push_back(std::to_string(char_create_combinations_entry.class)); + insert_values.push_back(std::to_string(char_create_combinations_entry.deity)); + insert_values.push_back(std::to_string(char_create_combinations_entry.start_zone)); insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); diff --git a/common/repositories/base/base_char_create_point_allocations_repository.h b/common/repositories/base/base_char_create_point_allocations_repository.h index 6b97292d1..05dcedd49 100644 --- a/common/repositories/base/base_char_create_point_allocations_repository.h +++ b/common/repositories/base/base_char_create_point_allocations_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -220,6 +220,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(char_create_point_allocations_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(char_create_point_allocations_entry.base_str)); update_values.push_back(columns[2] + " = " + std::to_string(char_create_point_allocations_entry.base_sta)); update_values.push_back(columns[3] + " = " + std::to_string(char_create_point_allocations_entry.base_dex)); @@ -254,6 +255,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(char_create_point_allocations_entry.id)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); @@ -296,6 +298,7 @@ public: for (auto &char_create_point_allocations_entry: char_create_point_allocations_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(char_create_point_allocations_entry.id)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_str)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_sta)); insert_values.push_back(std::to_string(char_create_point_allocations_entry.base_dex)); diff --git a/common/repositories/base/base_char_recipe_list_repository.h b/common/repositories/base/base_char_recipe_list_repository.h index 5ad9aa85a..dc4308aeb 100644 --- a/common/repositories/base/base_char_recipe_list_repository.h +++ b/common/repositories/base/base_char_recipe_list_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("recipe_id"); + return std::string("char_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &char_recipe_list : char_recipe_lists) { - if (char_recipe_list.recipe_id == char_recipe_list_id) { + if (char_recipe_list.char_id == char_recipe_list_id) { return char_recipe_list; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(char_recipe_list_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(char_recipe_list_entry.recipe_id)); update_values.push_back(columns[2] + " = " + std::to_string(char_recipe_list_entry.madecount)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - char_recipe_list_entry.recipe_id + char_recipe_list_entry.char_id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(char_recipe_list_entry.char_id)); + insert_values.push_back(std::to_string(char_recipe_list_entry.recipe_id)); insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); auto results = database.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - char_recipe_list_entry.id = results.LastInsertedID(); + char_recipe_list_entry.char_id = results.LastInsertedID(); return char_recipe_list_entry; } @@ -222,6 +226,8 @@ public: for (auto &char_recipe_list_entry: char_recipe_list_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(char_recipe_list_entry.char_id)); + insert_values.push_back(std::to_string(char_recipe_list_entry.recipe_id)); insert_values.push_back(std::to_string(char_recipe_list_entry.madecount)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_activities_repository.h b/common/repositories/base/base_character_activities_repository.h index f535c7d41..efdddabca 100644 --- a/common/repositories/base/base_character_activities_repository.h +++ b/common/repositories/base/base_character_activities_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("activityid"); + return std::string("charid"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &character_activities : character_activitiess) { - if (character_activities.activityid == character_activities_id) { + if (character_activities.charid == character_activities_id) { return character_activities; } } @@ -180,6 +180,9 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_activities_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(character_activities_entry.taskid)); + update_values.push_back(columns[2] + " = " + std::to_string(character_activities_entry.activityid)); update_values.push_back(columns[3] + " = " + std::to_string(character_activities_entry.donecount)); update_values.push_back(columns[4] + " = " + std::to_string(character_activities_entry.completed)); @@ -189,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_activities_entry.activityid + character_activities_entry.charid ) ); @@ -202,6 +205,9 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_activities_entry.charid)); + insert_values.push_back(std::to_string(character_activities_entry.taskid)); + insert_values.push_back(std::to_string(character_activities_entry.activityid)); insert_values.push_back(std::to_string(character_activities_entry.donecount)); insert_values.push_back(std::to_string(character_activities_entry.completed)); @@ -214,7 +220,7 @@ public: ); if (results.Success()) { - character_activities_entry.id = results.LastInsertedID(); + character_activities_entry.charid = results.LastInsertedID(); return character_activities_entry; } @@ -232,6 +238,9 @@ public: for (auto &character_activities_entry: character_activities_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_activities_entry.charid)); + insert_values.push_back(std::to_string(character_activities_entry.taskid)); + insert_values.push_back(std::to_string(character_activities_entry.activityid)); insert_values.push_back(std::to_string(character_activities_entry.donecount)); insert_values.push_back(std::to_string(character_activities_entry.completed)); diff --git a/common/repositories/base/base_character_alt_currency_repository.h b/common/repositories/base/base_character_alt_currency_repository.h index 0542f3f87..275c81f9c 100644 --- a/common/repositories/base/base_character_alt_currency_repository.h +++ b/common/repositories/base/base_character_alt_currency_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("currency_id"); + return std::string("char_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_alt_currency : character_alt_currencys) { - if (character_alt_currency.currency_id == character_alt_currency_id) { + if (character_alt_currency.char_id == character_alt_currency_id) { return character_alt_currency; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_alt_currency_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_alt_currency_entry.currency_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_alt_currency_entry.amount)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_alt_currency_entry.currency_id + character_alt_currency_entry.char_id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_alt_currency_entry.char_id)); + insert_values.push_back(std::to_string(character_alt_currency_entry.currency_id)); insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); auto results = database.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - character_alt_currency_entry.id = results.LastInsertedID(); + character_alt_currency_entry.char_id = results.LastInsertedID(); return character_alt_currency_entry; } @@ -222,6 +226,8 @@ public: for (auto &character_alt_currency_entry: character_alt_currency_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_alt_currency_entry.char_id)); + insert_values.push_back(std::to_string(character_alt_currency_entry.currency_id)); insert_values.push_back(std::to_string(character_alt_currency_entry.amount)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_alternate_abilities_repository.h b/common/repositories/base/base_character_alternate_abilities_repository.h index 0974e5d0c..43b8691ec 100644 --- a/common/repositories/base/base_character_alternate_abilities_repository.h +++ b/common/repositories/base/base_character_alternate_abilities_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("aa_id"); + return std::string("id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &character_alternate_abilities : character_alternate_abilitiess) { - if (character_alternate_abilities.aa_id == character_alternate_abilities_id) { + if (character_alternate_abilities.id == character_alternate_abilities_id) { return character_alternate_abilities; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_alternate_abilities_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_alternate_abilities_entry.aa_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_alternate_abilities_entry.aa_value)); update_values.push_back(columns[3] + " = " + std::to_string(character_alternate_abilities_entry.charges)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_alternate_abilities_entry.aa_id + character_alternate_abilities_entry.id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_alternate_abilities_entry.id)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_id)); insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); @@ -228,6 +232,8 @@ public: for (auto &character_alternate_abilities_entry: character_alternate_abilities_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_alternate_abilities_entry.id)); + insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_id)); insert_values.push_back(std::to_string(character_alternate_abilities_entry.aa_value)); insert_values.push_back(std::to_string(character_alternate_abilities_entry.charges)); diff --git a/common/repositories/base/base_character_auras_repository.h b/common/repositories/base/base_character_auras_repository.h index 41514e158..d296d5c49 100644 --- a/common/repositories/base/base_character_auras_repository.h +++ b/common/repositories/base/base_character_auras_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_auras : character_aurass) { - if (character_auras.slot == character_auras_id) { + if (character_auras.id == character_auras_id) { return character_auras; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_auras_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_auras_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(character_auras_entry.spell_id)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_auras_entry.slot + character_auras_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_auras_entry.id)); + insert_values.push_back(std::to_string(character_auras_entry.slot)); insert_values.push_back(std::to_string(character_auras_entry.spell_id)); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &character_auras_entry: character_auras_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_auras_entry.id)); + insert_values.push_back(std::to_string(character_auras_entry.slot)); insert_values.push_back(std::to_string(character_auras_entry.spell_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_bandolier_repository.h b/common/repositories/base/base_character_bandolier_repository.h index 0b9ef5ccc..9fc1ba6ee 100644 --- a/common/repositories/base/base_character_bandolier_repository.h +++ b/common/repositories/base/base_character_bandolier_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -45,7 +45,7 @@ public: static std::string PrimaryKey() { - return std::string("bandolier_slot"); + return std::string("id"); } static std::vector Columns() @@ -123,7 +123,7 @@ public: ) { for (auto &character_bandolier : character_bandoliers) { - if (character_bandolier.bandolier_slot == character_bandolier_id) { + if (character_bandolier.id == character_bandolier_id) { return character_bandolier; } } @@ -184,6 +184,9 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_bandolier_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_bandolier_entry.bandolier_id)); + update_values.push_back(columns[2] + " = " + std::to_string(character_bandolier_entry.bandolier_slot)); update_values.push_back(columns[3] + " = " + std::to_string(character_bandolier_entry.item_id)); update_values.push_back(columns[4] + " = " + std::to_string(character_bandolier_entry.icon)); update_values.push_back(columns[5] + " = '" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); @@ -194,7 +197,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_bandolier_entry.bandolier_slot + character_bandolier_entry.id ) ); @@ -207,6 +210,9 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_bandolier_entry.id)); + insert_values.push_back(std::to_string(character_bandolier_entry.bandolier_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.bandolier_slot)); insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); insert_values.push_back(std::to_string(character_bandolier_entry.icon)); insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); @@ -238,6 +244,9 @@ public: for (auto &character_bandolier_entry: character_bandolier_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_bandolier_entry.id)); + insert_values.push_back(std::to_string(character_bandolier_entry.bandolier_id)); + insert_values.push_back(std::to_string(character_bandolier_entry.bandolier_slot)); insert_values.push_back(std::to_string(character_bandolier_entry.item_id)); insert_values.push_back(std::to_string(character_bandolier_entry.icon)); insert_values.push_back("'" + EscapeString(character_bandolier_entry.bandolier_name) + "'"); diff --git a/common/repositories/base/base_character_bind_repository.h b/common/repositories/base/base_character_bind_repository.h index a68ab33b9..ea7847c1f 100644 --- a/common/repositories/base/base_character_bind_repository.h +++ b/common/repositories/base/base_character_bind_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -47,7 +47,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("id"); } static std::vector Columns() @@ -129,7 +129,7 @@ public: ) { for (auto &character_bind : character_binds) { - if (character_bind.slot == character_bind_id) { + if (character_bind.id == character_bind_id) { return character_bind; } } @@ -192,6 +192,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(character_bind_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(character_bind_entry.zone_id)); update_values.push_back(columns[3] + " = " + std::to_string(character_bind_entry.instance_id)); update_values.push_back(columns[4] + " = " + std::to_string(character_bind_entry.x)); @@ -205,7 +206,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_bind_entry.slot + character_bind_entry.id ) ); @@ -218,6 +219,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_bind_entry.slot)); insert_values.push_back(std::to_string(character_bind_entry.zone_id)); insert_values.push_back(std::to_string(character_bind_entry.instance_id)); insert_values.push_back(std::to_string(character_bind_entry.x)); @@ -252,6 +254,7 @@ public: for (auto &character_bind_entry: character_bind_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_bind_entry.slot)); insert_values.push_back(std::to_string(character_bind_entry.zone_id)); insert_values.push_back(std::to_string(character_bind_entry.instance_id)); insert_values.push_back(std::to_string(character_bind_entry.x)); diff --git a/common/repositories/base/base_character_buffs_repository.h b/common/repositories/base/base_character_buffs_repository.h index 57b35a5c4..a4165cdbf 100644 --- a/common/repositories/base/base_character_buffs_repository.h +++ b/common/repositories/base/base_character_buffs_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -56,7 +56,7 @@ public: static std::string PrimaryKey() { - return std::string("slot_id"); + return std::string("character_id"); } static std::vector Columns() @@ -156,7 +156,7 @@ public: ) { for (auto &character_buffs : character_buffss) { - if (character_buffs.slot_id == character_buffs_id) { + if (character_buffs.character_id == character_buffs_id) { return character_buffs; } } @@ -228,6 +228,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_buffs_entry.character_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_buffs_entry.slot_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_buffs_entry.spell_id)); update_values.push_back(columns[3] + " = " + std::to_string(character_buffs_entry.caster_level)); update_values.push_back(columns[4] + " = '" + EscapeString(character_buffs_entry.caster_name) + "'"); @@ -250,7 +252,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_buffs_entry.slot_id + character_buffs_entry.character_id ) ); @@ -263,6 +265,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_buffs_entry.character_id)); + insert_values.push_back(std::to_string(character_buffs_entry.slot_id)); insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); @@ -288,7 +292,7 @@ public: ); if (results.Success()) { - character_buffs_entry.id = results.LastInsertedID(); + character_buffs_entry.character_id = results.LastInsertedID(); return character_buffs_entry; } @@ -306,6 +310,8 @@ public: for (auto &character_buffs_entry: character_buffs_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_buffs_entry.character_id)); + insert_values.push_back(std::to_string(character_buffs_entry.slot_id)); insert_values.push_back(std::to_string(character_buffs_entry.spell_id)); insert_values.push_back(std::to_string(character_buffs_entry.caster_level)); insert_values.push_back("'" + EscapeString(character_buffs_entry.caster_name) + "'"); diff --git a/common/repositories/base/base_character_corpse_items_repository.h b/common/repositories/base/base_character_corpse_items_repository.h index b0b258389..3dc8e0681 100644 --- a/common/repositories/base/base_character_corpse_items_repository.h +++ b/common/repositories/base/base_character_corpse_items_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -50,7 +50,7 @@ public: static std::string PrimaryKey() { - return std::string("equip_slot"); + return std::string("corpse_id"); } static std::vector Columns() @@ -138,7 +138,7 @@ public: ) { for (auto &character_corpse_items : character_corpse_itemss) { - if (character_corpse_items.equip_slot == character_corpse_items_id) { + if (character_corpse_items.corpse_id == character_corpse_items_id) { return character_corpse_items; } } @@ -204,6 +204,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_corpse_items_entry.corpse_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_corpse_items_entry.equip_slot)); update_values.push_back(columns[2] + " = " + std::to_string(character_corpse_items_entry.item_id)); update_values.push_back(columns[3] + " = " + std::to_string(character_corpse_items_entry.charges)); update_values.push_back(columns[4] + " = " + std::to_string(character_corpse_items_entry.aug_1)); @@ -220,7 +222,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_corpse_items_entry.equip_slot + character_corpse_items_entry.corpse_id ) ); @@ -233,6 +235,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_corpse_items_entry.corpse_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.equip_slot)); insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); @@ -252,7 +256,7 @@ public: ); if (results.Success()) { - character_corpse_items_entry.id = results.LastInsertedID(); + character_corpse_items_entry.corpse_id = results.LastInsertedID(); return character_corpse_items_entry; } @@ -270,6 +274,8 @@ public: for (auto &character_corpse_items_entry: character_corpse_items_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_corpse_items_entry.corpse_id)); + insert_values.push_back(std::to_string(character_corpse_items_entry.equip_slot)); insert_values.push_back(std::to_string(character_corpse_items_entry.item_id)); insert_values.push_back(std::to_string(character_corpse_items_entry.charges)); insert_values.push_back(std::to_string(character_corpse_items_entry.aug_1)); diff --git a/common/repositories/base/base_character_corpses_repository.h b/common/repositories/base/base_character_corpses_repository.h index 2af2feac1..7027bbc53 100644 --- a/common/repositories/base/base_character_corpses_repository.h +++ b/common/repositories/base/base_character_corpses_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_character_currency_repository.h b/common/repositories/base/base_character_currency_repository.h index d38deb4db..b20163e33 100644 --- a/common/repositories/base/base_character_currency_repository.h +++ b/common/repositories/base/base_character_currency_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -228,6 +228,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_currency_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(character_currency_entry.platinum)); update_values.push_back(columns[2] + " = " + std::to_string(character_currency_entry.gold)); update_values.push_back(columns[3] + " = " + std::to_string(character_currency_entry.silver)); @@ -264,6 +265,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_currency_entry.id)); insert_values.push_back(std::to_string(character_currency_entry.platinum)); insert_values.push_back(std::to_string(character_currency_entry.gold)); insert_values.push_back(std::to_string(character_currency_entry.silver)); @@ -308,6 +310,7 @@ public: for (auto &character_currency_entry: character_currency_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_currency_entry.id)); insert_values.push_back(std::to_string(character_currency_entry.platinum)); insert_values.push_back(std::to_string(character_currency_entry.gold)); insert_values.push_back(std::to_string(character_currency_entry.silver)); diff --git a/common/repositories/base/base_character_data_repository.h b/common/repositories/base/base_character_data_repository.h index 24133e729..4ac3a12e5 100644 --- a/common/repositories/base/base_character_data_repository.h +++ b/common/repositories/base/base_character_data_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_character_disciplines_repository.h b/common/repositories/base/base_character_disciplines_repository.h index 3109327d1..13d98cfed 100644 --- a/common/repositories/base/base_character_disciplines_repository.h +++ b/common/repositories/base/base_character_disciplines_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot_id"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_disciplines : character_discipliness) { - if (character_disciplines.slot_id == character_disciplines_id) { + if (character_disciplines.id == character_disciplines_id) { return character_disciplines; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_disciplines_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_disciplines_entry.slot_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_disciplines_entry.disc_id)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_disciplines_entry.slot_id + character_disciplines_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_disciplines_entry.id)); + insert_values.push_back(std::to_string(character_disciplines_entry.slot_id)); insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &character_disciplines_entry: character_disciplines_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_disciplines_entry.id)); + insert_values.push_back(std::to_string(character_disciplines_entry.slot_id)); insert_values.push_back(std::to_string(character_disciplines_entry.disc_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_inspect_messages_repository.h b/common/repositories/base/base_character_inspect_messages_repository.h index bc5ef873c..76aaea0d6 100644 --- a/common/repositories/base/base_character_inspect_messages_repository.h +++ b/common/repositories/base/base_character_inspect_messages_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -168,6 +168,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_inspect_messages_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); auto results = database.QueryDatabase( @@ -189,6 +190,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_inspect_messages_entry.id)); insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); auto results = database.QueryDatabase( @@ -218,6 +220,7 @@ public: for (auto &character_inspect_messages_entry: character_inspect_messages_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_inspect_messages_entry.id)); insert_values.push_back("'" + EscapeString(character_inspect_messages_entry.inspect_message) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_item_recast_repository.h b/common/repositories/base/base_character_item_recast_repository.h index 67ac8919c..2c5a61bb7 100644 --- a/common/repositories/base/base_character_item_recast_repository.h +++ b/common/repositories/base/base_character_item_recast_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("recast_type"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_item_recast : character_item_recasts) { - if (character_item_recast.recast_type == character_item_recast_id) { + if (character_item_recast.id == character_item_recast_id) { return character_item_recast; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_item_recast_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_item_recast_entry.recast_type)); update_values.push_back(columns[2] + " = " + std::to_string(character_item_recast_entry.timestamp)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_item_recast_entry.recast_type + character_item_recast_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_item_recast_entry.id)); + insert_values.push_back(std::to_string(character_item_recast_entry.recast_type)); insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &character_item_recast_entry: character_item_recast_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_item_recast_entry.id)); + insert_values.push_back(std::to_string(character_item_recast_entry.recast_type)); insert_values.push_back(std::to_string(character_item_recast_entry.timestamp)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_languages_repository.h b/common/repositories/base/base_character_languages_repository.h index 9589fb5c9..2731f40d0 100644 --- a/common/repositories/base/base_character_languages_repository.h +++ b/common/repositories/base/base_character_languages_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("lang_id"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_languages : character_languagess) { - if (character_languages.lang_id == character_languages_id) { + if (character_languages.id == character_languages_id) { return character_languages; } } @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(character_languages_entry.lang_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_languages_entry.value)); auto results = database.QueryDatabase( @@ -180,7 +181,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_languages_entry.lang_id + character_languages_entry.id ) ); @@ -193,6 +194,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_languages_entry.lang_id)); insert_values.push_back(std::to_string(character_languages_entry.value)); auto results = database.QueryDatabase( @@ -222,6 +224,7 @@ public: for (auto &character_languages_entry: character_languages_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_languages_entry.lang_id)); insert_values.push_back(std::to_string(character_languages_entry.value)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_leadership_abilities_repository.h b/common/repositories/base/base_character_leadership_abilities_repository.h index aa63e3a6c..d138a6b29 100644 --- a/common/repositories/base/base_character_leadership_abilities_repository.h +++ b/common/repositories/base/base_character_leadership_abilities_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_leadership_abilities : character_leadership_abilitiess) { - if (character_leadership_abilities.slot == character_leadership_abilities_id) { + if (character_leadership_abilities.id == character_leadership_abilities_id) { return character_leadership_abilities; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_leadership_abilities_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_leadership_abilities_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(character_leadership_abilities_entry.rank)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_leadership_abilities_entry.slot + character_leadership_abilities_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_leadership_abilities_entry.id)); + insert_values.push_back(std::to_string(character_leadership_abilities_entry.slot)); insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &character_leadership_abilities_entry: character_leadership_abilities_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_leadership_abilities_entry.id)); + insert_values.push_back(std::to_string(character_leadership_abilities_entry.slot)); insert_values.push_back(std::to_string(character_leadership_abilities_entry.rank)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_material_repository.h b/common/repositories/base/base_character_material_repository.h index 7a94e1b16..547c635bc 100644 --- a/common/repositories/base/base_character_material_repository.h +++ b/common/repositories/base/base_character_material_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -46,7 +46,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("id"); } static std::vector Columns() @@ -126,7 +126,7 @@ public: ) { for (auto &character_material : character_materials) { - if (character_material.slot == character_material_id) { + if (character_material.id == character_material_id) { return character_material; } } @@ -188,6 +188,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(character_material_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(character_material_entry.blue)); update_values.push_back(columns[3] + " = " + std::to_string(character_material_entry.green)); update_values.push_back(columns[4] + " = " + std::to_string(character_material_entry.red)); @@ -200,7 +201,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_material_entry.slot + character_material_entry.id ) ); @@ -213,6 +214,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_material_entry.slot)); insert_values.push_back(std::to_string(character_material_entry.blue)); insert_values.push_back(std::to_string(character_material_entry.green)); insert_values.push_back(std::to_string(character_material_entry.red)); @@ -246,6 +248,7 @@ public: for (auto &character_material_entry: character_material_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_material_entry.slot)); insert_values.push_back(std::to_string(character_material_entry.blue)); insert_values.push_back(std::to_string(character_material_entry.green)); insert_values.push_back(std::to_string(character_material_entry.red)); diff --git a/common/repositories/base/base_character_memmed_spells_repository.h b/common/repositories/base/base_character_memmed_spells_repository.h index eb224025b..cb553ff4f 100644 --- a/common/repositories/base/base_character_memmed_spells_repository.h +++ b/common/repositories/base/base_character_memmed_spells_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot_id"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_memmed_spells : character_memmed_spellss) { - if (character_memmed_spells.slot_id == character_memmed_spells_id) { + if (character_memmed_spells.id == character_memmed_spells_id) { return character_memmed_spells; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_memmed_spells_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_memmed_spells_entry.slot_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_memmed_spells_entry.spell_id)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_memmed_spells_entry.slot_id + character_memmed_spells_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_memmed_spells_entry.id)); + insert_values.push_back(std::to_string(character_memmed_spells_entry.slot_id)); insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &character_memmed_spells_entry: character_memmed_spells_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_memmed_spells_entry.id)); + insert_values.push_back(std::to_string(character_memmed_spells_entry.slot_id)); insert_values.push_back(std::to_string(character_memmed_spells_entry.spell_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_pet_buffs_repository.h b/common/repositories/base/base_character_pet_buffs_repository.h index 1cd7b3f8a..10b6fb5b0 100644 --- a/common/repositories/base/base_character_pet_buffs_repository.h +++ b/common/repositories/base/base_character_pet_buffs_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -50,7 +50,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("char_id"); } static std::vector Columns() @@ -138,7 +138,7 @@ public: ) { for (auto &character_pet_buffs : character_pet_buffss) { - if (character_pet_buffs.slot == character_pet_buffs_id) { + if (character_pet_buffs.char_id == character_pet_buffs_id) { return character_pet_buffs; } } @@ -204,6 +204,9 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_pet_buffs_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_pet_buffs_entry.pet)); + update_values.push_back(columns[2] + " = " + std::to_string(character_pet_buffs_entry.slot)); update_values.push_back(columns[3] + " = " + std::to_string(character_pet_buffs_entry.spell_id)); update_values.push_back(columns[4] + " = " + std::to_string(character_pet_buffs_entry.caster_level)); update_values.push_back(columns[5] + " = '" + EscapeString(character_pet_buffs_entry.castername) + "'"); @@ -219,7 +222,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_pet_buffs_entry.slot + character_pet_buffs_entry.char_id ) ); @@ -232,6 +235,9 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_buffs_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.pet)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.slot)); insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); @@ -250,7 +256,7 @@ public: ); if (results.Success()) { - character_pet_buffs_entry.id = results.LastInsertedID(); + character_pet_buffs_entry.char_id = results.LastInsertedID(); return character_pet_buffs_entry; } @@ -268,6 +274,9 @@ public: for (auto &character_pet_buffs_entry: character_pet_buffs_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_buffs_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.pet)); + insert_values.push_back(std::to_string(character_pet_buffs_entry.slot)); insert_values.push_back(std::to_string(character_pet_buffs_entry.spell_id)); insert_values.push_back(std::to_string(character_pet_buffs_entry.caster_level)); insert_values.push_back("'" + EscapeString(character_pet_buffs_entry.castername) + "'"); diff --git a/common/repositories/base/base_character_pet_info_repository.h b/common/repositories/base/base_character_pet_info_repository.h index fd5c64fd6..d12865504 100644 --- a/common/repositories/base/base_character_pet_info_repository.h +++ b/common/repositories/base/base_character_pet_info_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -47,7 +47,7 @@ public: static std::string PrimaryKey() { - return std::string("pet"); + return std::string("char_id"); } static std::vector Columns() @@ -129,7 +129,7 @@ public: ) { for (auto &character_pet_info : character_pet_infos) { - if (character_pet_info.pet == character_pet_info_id) { + if (character_pet_info.char_id == character_pet_info_id) { return character_pet_info; } } @@ -192,6 +192,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_pet_info_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_pet_info_entry.pet)); update_values.push_back(columns[2] + " = '" + EscapeString(character_pet_info_entry.petname) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(character_pet_info_entry.petpower)); update_values.push_back(columns[4] + " = " + std::to_string(character_pet_info_entry.spell_id)); @@ -205,7 +207,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_pet_info_entry.pet + character_pet_info_entry.char_id ) ); @@ -218,6 +220,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_info_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.pet)); insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); @@ -234,7 +238,7 @@ public: ); if (results.Success()) { - character_pet_info_entry.id = results.LastInsertedID(); + character_pet_info_entry.char_id = results.LastInsertedID(); return character_pet_info_entry; } @@ -252,6 +256,8 @@ public: for (auto &character_pet_info_entry: character_pet_info_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_info_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_info_entry.pet)); insert_values.push_back("'" + EscapeString(character_pet_info_entry.petname) + "'"); insert_values.push_back(std::to_string(character_pet_info_entry.petpower)); insert_values.push_back(std::to_string(character_pet_info_entry.spell_id)); diff --git a/common/repositories/base/base_character_pet_inventory_repository.h b/common/repositories/base/base_character_pet_inventory_repository.h index f2a79f898..8d3d94d1d 100644 --- a/common/repositories/base/base_character_pet_inventory_repository.h +++ b/common/repositories/base/base_character_pet_inventory_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("char_id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &character_pet_inventory : character_pet_inventorys) { - if (character_pet_inventory.slot == character_pet_inventory_id) { + if (character_pet_inventory.char_id == character_pet_inventory_id) { return character_pet_inventory; } } @@ -176,6 +176,9 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_pet_inventory_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_pet_inventory_entry.pet)); + update_values.push_back(columns[2] + " = " + std::to_string(character_pet_inventory_entry.slot)); update_values.push_back(columns[3] + " = " + std::to_string(character_pet_inventory_entry.item_id)); auto results = database.QueryDatabase( @@ -184,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_pet_inventory_entry.slot + character_pet_inventory_entry.char_id ) ); @@ -197,6 +200,9 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_inventory_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_inventory_entry.pet)); + insert_values.push_back(std::to_string(character_pet_inventory_entry.slot)); insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); auto results = database.QueryDatabase( @@ -208,7 +214,7 @@ public: ); if (results.Success()) { - character_pet_inventory_entry.id = results.LastInsertedID(); + character_pet_inventory_entry.char_id = results.LastInsertedID(); return character_pet_inventory_entry; } @@ -226,6 +232,9 @@ public: for (auto &character_pet_inventory_entry: character_pet_inventory_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_pet_inventory_entry.char_id)); + insert_values.push_back(std::to_string(character_pet_inventory_entry.pet)); + insert_values.push_back(std::to_string(character_pet_inventory_entry.slot)); insert_values.push_back(std::to_string(character_pet_inventory_entry.item_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_potionbelt_repository.h b/common/repositories/base/base_character_potionbelt_repository.h index 9c017a009..6c570fa1b 100644 --- a/common/repositories/base/base_character_potionbelt_repository.h +++ b/common/repositories/base/base_character_potionbelt_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("potion_id"); + return std::string("id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &character_potionbelt : character_potionbelts) { - if (character_potionbelt.potion_id == character_potionbelt_id) { + if (character_potionbelt.id == character_potionbelt_id) { return character_potionbelt; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_potionbelt_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(character_potionbelt_entry.potion_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_potionbelt_entry.item_id)); update_values.push_back(columns[3] + " = " + std::to_string(character_potionbelt_entry.icon)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_potionbelt_entry.potion_id + character_potionbelt_entry.id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_potionbelt_entry.id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.potion_id)); insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); @@ -228,6 +232,8 @@ public: for (auto &character_potionbelt_entry: character_potionbelt_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_potionbelt_entry.id)); + insert_values.push_back(std::to_string(character_potionbelt_entry.potion_id)); insert_values.push_back(std::to_string(character_potionbelt_entry.item_id)); insert_values.push_back(std::to_string(character_potionbelt_entry.icon)); diff --git a/common/repositories/base/base_character_skills_repository.h b/common/repositories/base/base_character_skills_repository.h index 4298c7e5e..65fa1dd60 100644 --- a/common/repositories/base/base_character_skills_repository.h +++ b/common/repositories/base/base_character_skills_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("skill_id"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_skills : character_skillss) { - if (character_skills.skill_id == character_skills_id) { + if (character_skills.id == character_skills_id) { return character_skills; } } @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(character_skills_entry.skill_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_skills_entry.value)); auto results = database.QueryDatabase( @@ -180,7 +181,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_skills_entry.skill_id + character_skills_entry.id ) ); @@ -193,6 +194,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_skills_entry.skill_id)); insert_values.push_back(std::to_string(character_skills_entry.value)); auto results = database.QueryDatabase( @@ -222,6 +224,7 @@ public: for (auto &character_skills_entry: character_skills_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_skills_entry.skill_id)); insert_values.push_back(std::to_string(character_skills_entry.value)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_spells_repository.h b/common/repositories/base/base_character_spells_repository.h index 0e9a8c182..aeab5a7ab 100644 --- a/common/repositories/base/base_character_spells_repository.h +++ b/common/repositories/base/base_character_spells_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot_id"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &character_spells : character_spellss) { - if (character_spells.slot_id == character_spells_id) { + if (character_spells.id == character_spells_id) { return character_spells; } } @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(character_spells_entry.slot_id)); update_values.push_back(columns[2] + " = " + std::to_string(character_spells_entry.spell_id)); auto results = database.QueryDatabase( @@ -180,7 +181,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_spells_entry.slot_id + character_spells_entry.id ) ); @@ -193,6 +194,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_spells_entry.slot_id)); insert_values.push_back(std::to_string(character_spells_entry.spell_id)); auto results = database.QueryDatabase( @@ -222,6 +224,7 @@ public: for (auto &character_spells_entry: character_spells_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_spells_entry.slot_id)); insert_values.push_back(std::to_string(character_spells_entry.spell_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_character_tasks_repository.h b/common/repositories/base/base_character_tasks_repository.h index 362a81e37..ce67e80ff 100644 --- a/common/repositories/base/base_character_tasks_repository.h +++ b/common/repositories/base/base_character_tasks_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("taskid"); + return std::string("charid"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &character_tasks : character_taskss) { - if (character_tasks.taskid == character_tasks_id) { + if (character_tasks.charid == character_tasks_id) { return character_tasks; } } @@ -180,6 +180,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(character_tasks_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(character_tasks_entry.taskid)); update_values.push_back(columns[2] + " = " + std::to_string(character_tasks_entry.slot)); update_values.push_back(columns[3] + " = " + std::to_string(character_tasks_entry.type)); update_values.push_back(columns[4] + " = " + std::to_string(character_tasks_entry.acceptedtime)); @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - character_tasks_entry.taskid + character_tasks_entry.charid ) ); @@ -203,6 +205,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(character_tasks_entry.charid)); + insert_values.push_back(std::to_string(character_tasks_entry.taskid)); insert_values.push_back(std::to_string(character_tasks_entry.slot)); insert_values.push_back(std::to_string(character_tasks_entry.type)); insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - character_tasks_entry.id = results.LastInsertedID(); + character_tasks_entry.charid = results.LastInsertedID(); return character_tasks_entry; } @@ -234,6 +238,8 @@ public: for (auto &character_tasks_entry: character_tasks_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(character_tasks_entry.charid)); + insert_values.push_back(std::to_string(character_tasks_entry.taskid)); insert_values.push_back(std::to_string(character_tasks_entry.slot)); insert_values.push_back(std::to_string(character_tasks_entry.type)); insert_values.push_back(std::to_string(character_tasks_entry.acceptedtime)); diff --git a/common/repositories/base/base_character_tribute_repository.h b/common/repositories/base/base_character_tribute_repository.h deleted file mode 100644 index 8c3d318c8..000000000 --- a/common/repositories/base/base_character_tribute_repository.h +++ /dev/null @@ -1,318 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H -#define EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseCharacterTributeRepository { -public: - struct CharacterTribute { - int id; - int8 tier; - int tribute; - }; - - static std::string PrimaryKey() - { - return std::string("id"); - } - - static std::vector Columns() - { - return { - "id", - "tier", - "tribute", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("character_tribute"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CharacterTribute NewEntity() - { - CharacterTribute entry{}; - - entry.id = 0; - entry.tier = 0; - entry.tribute = 0; - - return entry; - } - - static CharacterTribute GetCharacterTributeEntry( - const std::vector &character_tributes, - int character_tribute_id - ) - { - for (auto &character_tribute : character_tributes) { - if (character_tribute.id == character_tribute_id) { - return character_tribute; - } - } - - return NewEntity(); - } - - static CharacterTribute FindOne( - int character_tribute_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - character_tribute_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int character_tribute_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - character_tribute_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CharacterTribute character_tribute_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[0] + " = " + std::to_string(character_tribute_entry.id)); - update_values.push_back(columns[1] + " = " + std::to_string(character_tribute_entry.tier)); - update_values.push_back(columns[2] + " = " + std::to_string(character_tribute_entry.tribute)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - character_tribute_entry.id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CharacterTribute InsertOne( - CharacterTribute character_tribute_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tribute_entry.id)); - insert_values.push_back(std::to_string(character_tribute_entry.tier)); - insert_values.push_back(std::to_string(character_tribute_entry.tribute)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - character_tribute_entry.id = results.LastInsertedID(); - return character_tribute_entry; - } - - character_tribute_entry = NewEntity(); - - return character_tribute_entry; - } - - static int InsertMany( - std::vector character_tribute_entries - ) - { - std::vector insert_chunks; - - for (auto &character_tribute_entry: character_tribute_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(character_tribute_entry.id)); - insert_values.push_back(std::to_string(character_tribute_entry.tier)); - insert_values.push_back(std::to_string(character_tribute_entry.tribute)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CharacterTribute entry{}; - - entry.id = atoi(row[0]); - entry.tier = atoi(row[1]); - entry.tribute = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/base/base_chatchannels_repository.h b/common/repositories/base/base_chatchannels_repository.h deleted file mode 100644 index 680e6a4bb..000000000 --- a/common/repositories/base/base_chatchannels_repository.h +++ /dev/null @@ -1,324 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_CHATCHANNELS_REPOSITORY_H -#define EQEMU_BASE_CHATCHANNELS_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseChatchannelsRepository { -public: - struct Chatchannels { - std::string name; - std::string owner; - std::string password; - int minstatus; - }; - - static std::string PrimaryKey() - { - return std::string("name"); - } - - static std::vector Columns() - { - return { - "name", - "owner", - "password", - "minstatus", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("chatchannels"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static Chatchannels NewEntity() - { - Chatchannels entry{}; - - entry.name = ""; - entry.owner = ""; - entry.password = ""; - entry.minstatus = 0; - - return entry; - } - - static Chatchannels GetChatchannelsEntry( - const std::vector &chatchannelss, - int chatchannels_id - ) - { - for (auto &chatchannels : chatchannelss) { - if (chatchannels.name == chatchannels_id) { - return chatchannels; - } - } - - return NewEntity(); - } - - static Chatchannels FindOne( - int chatchannels_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - chatchannels_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int chatchannels_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - chatchannels_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - Chatchannels chatchannels_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = '" + EscapeString(chatchannels_entry.owner) + "'"); - update_values.push_back(columns[2] + " = '" + EscapeString(chatchannels_entry.password) + "'"); - update_values.push_back(columns[3] + " = " + std::to_string(chatchannels_entry.minstatus)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - chatchannels_entry.name - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static Chatchannels InsertOne( - Chatchannels chatchannels_entry - ) - { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); - insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); - insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - chatchannels_entry.id = results.LastInsertedID(); - return chatchannels_entry; - } - - chatchannels_entry = NewEntity(); - - return chatchannels_entry; - } - - static int InsertMany( - std::vector chatchannels_entries - ) - { - std::vector insert_chunks; - - for (auto &chatchannels_entry: chatchannels_entries) { - std::vector insert_values; - - insert_values.push_back("'" + EscapeString(chatchannels_entry.owner) + "'"); - insert_values.push_back("'" + EscapeString(chatchannels_entry.password) + "'"); - insert_values.push_back(std::to_string(chatchannels_entry.minstatus)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - Chatchannels entry{}; - - entry.name = row[0] ? row[0] : ""; - entry.owner = row[1] ? row[1] : ""; - entry.password = row[2] ? row[2] : ""; - entry.minstatus = atoi(row[3]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_CHATCHANNELS_REPOSITORY_H diff --git a/common/repositories/base/base_command_settings_repository.h b/common/repositories/base/base_command_settings_repository.h deleted file mode 100644 index 98233bdd7..000000000 --- a/common/repositories/base/base_command_settings_repository.h +++ /dev/null @@ -1,315 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H -#define EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseCommandSettingsRepository { -public: - struct CommandSettings { - std::string command; - int access; - std::string aliases; - }; - - static std::string PrimaryKey() - { - return std::string("command"); - } - - static std::vector Columns() - { - return { - "command", - "access", - "aliases", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("command_settings"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static CommandSettings NewEntity() - { - CommandSettings entry{}; - - entry.command = ""; - entry.access = 0; - entry.aliases = ""; - - return entry; - } - - static CommandSettings GetCommandSettingsEntry( - const std::vector &command_settingss, - int command_settings_id - ) - { - for (auto &command_settings : command_settingss) { - if (command_settings.command == command_settings_id) { - return command_settings; - } - } - - return NewEntity(); - } - - static CommandSettings FindOne( - int command_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - command_settings_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int command_settings_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - command_settings_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - CommandSettings command_settings_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[1] + " = " + std::to_string(command_settings_entry.access)); - update_values.push_back(columns[2] + " = '" + EscapeString(command_settings_entry.aliases) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - command_settings_entry.command - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static CommandSettings InsertOne( - CommandSettings command_settings_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(command_settings_entry.access)); - insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - command_settings_entry.id = results.LastInsertedID(); - return command_settings_entry; - } - - command_settings_entry = NewEntity(); - - return command_settings_entry; - } - - static int InsertMany( - std::vector command_settings_entries - ) - { - std::vector insert_chunks; - - for (auto &command_settings_entry: command_settings_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(command_settings_entry.access)); - insert_values.push_back("'" + EscapeString(command_settings_entry.aliases) + "'"); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - CommandSettings entry{}; - - entry.command = row[0] ? row[0] : ""; - entry.access = atoi(row[1]); - entry.aliases = row[2] ? row[2] : ""; - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_COMMAND_SETTINGS_REPOSITORY_H diff --git a/common/repositories/base/base_completed_tasks_repository.h b/common/repositories/base/base_completed_tasks_repository.h index 5b2ddfd07..b4a82a14b 100644 --- a/common/repositories/base/base_completed_tasks_repository.h +++ b/common/repositories/base/base_completed_tasks_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("activityid"); + return std::string("charid"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &completed_tasks : completed_taskss) { - if (completed_tasks.activityid == completed_tasks_id) { + if (completed_tasks.charid == completed_tasks_id) { return completed_tasks; } } @@ -176,7 +176,10 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(completed_tasks_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(completed_tasks_entry.completedtime)); + update_values.push_back(columns[2] + " = " + std::to_string(completed_tasks_entry.taskid)); + update_values.push_back(columns[3] + " = " + std::to_string(completed_tasks_entry.activityid)); auto results = database.QueryDatabase( fmt::format( @@ -184,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - completed_tasks_entry.activityid + completed_tasks_entry.charid ) ); @@ -197,7 +200,10 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(completed_tasks_entry.charid)); + insert_values.push_back(std::to_string(completed_tasks_entry.completedtime)); + insert_values.push_back(std::to_string(completed_tasks_entry.taskid)); + insert_values.push_back(std::to_string(completed_tasks_entry.activityid)); auto results = database.QueryDatabase( fmt::format( @@ -208,7 +214,7 @@ public: ); if (results.Success()) { - completed_tasks_entry.id = results.LastInsertedID(); + completed_tasks_entry.charid = results.LastInsertedID(); return completed_tasks_entry; } @@ -226,7 +232,10 @@ public: for (auto &completed_tasks_entry: completed_tasks_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(completed_tasks_entry.charid)); + insert_values.push_back(std::to_string(completed_tasks_entry.completedtime)); + insert_values.push_back(std::to_string(completed_tasks_entry.taskid)); + insert_values.push_back(std::to_string(completed_tasks_entry.activityid)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_data_buckets_repository.h b/common/repositories/base/base_data_buckets_repository.h index a3704fb90..428b0c55c 100644 --- a/common/repositories/base/base_data_buckets_repository.h +++ b/common/repositories/base/base_data_buckets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_db_str_repository.h b/common/repositories/base/base_db_str_repository.h index 9268f9647..006dc1aa0 100644 --- a/common/repositories/base/base_db_str_repository.h +++ b/common/repositories/base/base_db_str_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("type"); + return std::string("id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &db_str : db_strs) { - if (db_str.type == db_str_id) { + if (db_str.id == db_str_id) { return db_str; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(db_str_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(db_str_entry.type)); update_values.push_back(columns[2] + " = '" + EscapeString(db_str_entry.value) + "'"); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - db_str_entry.type + db_str_entry.id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(db_str_entry.id)); + insert_values.push_back(std::to_string(db_str_entry.type)); insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); auto results = database.QueryDatabase( @@ -222,6 +226,8 @@ public: for (auto &db_str_entry: db_str_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(db_str_entry.id)); + insert_values.push_back(std::to_string(db_str_entry.type)); insert_values.push_back("'" + EscapeString(db_str_entry.value) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_discovered_items_repository.h b/common/repositories/base/base_discovered_items_repository.h index 2c7d88ddb..9f31dc3bb 100644 --- a/common/repositories/base/base_discovered_items_repository.h +++ b/common/repositories/base/base_discovered_items_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -176,6 +176,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(discovered_items_entry.item_id)); update_values.push_back(columns[1] + " = '" + EscapeString(discovered_items_entry.char_name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(discovered_items_entry.discovered_date)); update_values.push_back(columns[3] + " = " + std::to_string(discovered_items_entry.account_status)); @@ -199,6 +200,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(discovered_items_entry.item_id)); insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); insert_values.push_back(std::to_string(discovered_items_entry.account_status)); @@ -212,7 +214,7 @@ public: ); if (results.Success()) { - discovered_items_entry.id = results.LastInsertedID(); + discovered_items_entry.item_id = results.LastInsertedID(); return discovered_items_entry; } @@ -230,6 +232,7 @@ public: for (auto &discovered_items_entry: discovered_items_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(discovered_items_entry.item_id)); insert_values.push_back("'" + EscapeString(discovered_items_entry.char_name) + "'"); insert_values.push_back(std::to_string(discovered_items_entry.discovered_date)); insert_values.push_back(std::to_string(discovered_items_entry.account_status)); diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h index 885c931b9..67734c00b 100644 --- a/common/repositories/base/base_doors_repository.h +++ b/common/repositories/base/base_doors_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_eventlog_repository.h b/common/repositories/base/base_eventlog_repository.h index 069a56667..76ce850aa 100644 --- a/common/repositories/base/base_eventlog_repository.h +++ b/common/repositories/base/base_eventlog_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_faction_base_data_repository.h b/common/repositories/base/base_faction_base_data_repository.h index b32fdff98..a7e0f5170 100644 --- a/common/repositories/base/base_faction_base_data_repository.h +++ b/common/repositories/base/base_faction_base_data_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -184,6 +184,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(faction_base_data_entry.client_faction_id)); update_values.push_back(columns[1] + " = " + std::to_string(faction_base_data_entry.min)); update_values.push_back(columns[2] + " = " + std::to_string(faction_base_data_entry.max)); update_values.push_back(columns[3] + " = " + std::to_string(faction_base_data_entry.unk_hero1)); @@ -209,6 +210,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(faction_base_data_entry.client_faction_id)); insert_values.push_back(std::to_string(faction_base_data_entry.min)); insert_values.push_back(std::to_string(faction_base_data_entry.max)); insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); @@ -224,7 +226,7 @@ public: ); if (results.Success()) { - faction_base_data_entry.id = results.LastInsertedID(); + faction_base_data_entry.client_faction_id = results.LastInsertedID(); return faction_base_data_entry; } @@ -242,6 +244,7 @@ public: for (auto &faction_base_data_entry: faction_base_data_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(faction_base_data_entry.client_faction_id)); insert_values.push_back(std::to_string(faction_base_data_entry.min)); insert_values.push_back(std::to_string(faction_base_data_entry.max)); insert_values.push_back(std::to_string(faction_base_data_entry.unk_hero1)); diff --git a/common/repositories/base/base_faction_list_mod_repository.h b/common/repositories/base/base_faction_list_mod_repository.h index 8cff9e393..76ab20eca 100644 --- a/common/repositories/base/base_faction_list_mod_repository.h +++ b/common/repositories/base/base_faction_list_mod_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_faction_list_repository.h b/common/repositories/base/base_faction_list_repository.h index c6f191421..56472a500 100644 --- a/common/repositories/base/base_faction_list_repository.h +++ b/common/repositories/base/base_faction_list_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(faction_list_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(faction_list_entry.name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(faction_list_entry.base)); @@ -194,6 +195,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(faction_list_entry.id)); insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); insert_values.push_back(std::to_string(faction_list_entry.base)); @@ -224,6 +226,7 @@ public: for (auto &faction_list_entry: faction_list_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(faction_list_entry.id)); insert_values.push_back("'" + EscapeString(faction_list_entry.name) + "'"); insert_values.push_back(std::to_string(faction_list_entry.base)); diff --git a/common/repositories/base/base_faction_values_repository.h b/common/repositories/base/base_faction_values_repository.h index 3d2f3da69..287a1f578 100644 --- a/common/repositories/base/base_faction_values_repository.h +++ b/common/repositories/base/base_faction_values_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("faction_id"); + return std::string("char_id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &faction_values : faction_valuess) { - if (faction_values.faction_id == faction_values_id) { + if (faction_values.char_id == faction_values_id) { return faction_values; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(faction_values_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(faction_values_entry.faction_id)); update_values.push_back(columns[2] + " = " + std::to_string(faction_values_entry.current_value)); update_values.push_back(columns[3] + " = " + std::to_string(faction_values_entry.temp)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - faction_values_entry.faction_id + faction_values_entry.char_id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(faction_values_entry.char_id)); + insert_values.push_back(std::to_string(faction_values_entry.faction_id)); insert_values.push_back(std::to_string(faction_values_entry.current_value)); insert_values.push_back(std::to_string(faction_values_entry.temp)); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - faction_values_entry.id = results.LastInsertedID(); + faction_values_entry.char_id = results.LastInsertedID(); return faction_values_entry; } @@ -228,6 +232,8 @@ public: for (auto &faction_values_entry: faction_values_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(faction_values_entry.char_id)); + insert_values.push_back(std::to_string(faction_values_entry.faction_id)); insert_values.push_back(std::to_string(faction_values_entry.current_value)); insert_values.push_back(std::to_string(faction_values_entry.temp)); diff --git a/common/repositories/base/base_fishing_repository.h b/common/repositories/base/base_fishing_repository.h index 7e164bc12..f707477f1 100644 --- a/common/repositories/base/base_fishing_repository.h +++ b/common/repositories/base/base_fishing_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_forage_repository.h b/common/repositories/base/base_forage_repository.h index 9b5fbd371..981796e3c 100644 --- a/common/repositories/base/base_forage_repository.h +++ b/common/repositories/base/base_forage_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_friends_repository.h b/common/repositories/base/base_friends_repository.h index 67220e475..fb59c824f 100644 --- a/common/repositories/base/base_friends_repository.h +++ b/common/repositories/base/base_friends_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("name"); + return std::string("charid"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &friends : friendss) { - if (friends.name == friends_id) { + if (friends.charid == friends_id) { return friends; } } @@ -172,7 +172,9 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(friends_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(friends_entry.type)); + update_values.push_back(columns[2] + " = '" + EscapeString(friends_entry.name) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - friends_entry.name + friends_entry.charid ) ); @@ -193,7 +195,9 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(friends_entry.charid)); + insert_values.push_back(std::to_string(friends_entry.type)); + insert_values.push_back("'" + EscapeString(friends_entry.name) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - friends_entry.id = results.LastInsertedID(); + friends_entry.charid = results.LastInsertedID(); return friends_entry; } @@ -222,7 +226,9 @@ public: for (auto &friends_entry: friends_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(friends_entry.charid)); + insert_values.push_back(std::to_string(friends_entry.type)); + insert_values.push_back("'" + EscapeString(friends_entry.name) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_global_loot_repository.h b/common/repositories/base/base_global_loot_repository.h index 4528434c7..ec93f3c36 100644 --- a/common/repositories/base/base_global_loot_repository.h +++ b/common/repositories/base/base_global_loot_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_gm_ips_repository.h b/common/repositories/base/base_gm_ips_repository.h index 6d80f5bd5..933bb047e 100644 --- a/common/repositories/base/base_gm_ips_repository.h +++ b/common/repositories/base/base_gm_ips_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("ip_address"); + return std::string("account_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &gm_ips : gm_ipss) { - if (gm_ips.ip_address == gm_ips_id) { + if (gm_ips.account_id == gm_ips_id) { return gm_ips; } } @@ -173,6 +173,8 @@ public: auto columns = Columns(); update_values.push_back(columns[0] + " = '" + EscapeString(gm_ips_entry.name) + "'"); + update_values.push_back(columns[1] + " = " + std::to_string(gm_ips_entry.account_id)); + update_values.push_back(columns[2] + " = '" + EscapeString(gm_ips_entry.ip_address) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - gm_ips_entry.ip_address + gm_ips_entry.account_id ) ); @@ -194,6 +196,8 @@ public: std::vector insert_values; insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + insert_values.push_back(std::to_string(gm_ips_entry.account_id)); + insert_values.push_back("'" + EscapeString(gm_ips_entry.ip_address) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - gm_ips_entry.id = results.LastInsertedID(); + gm_ips_entry.account_id = results.LastInsertedID(); return gm_ips_entry; } @@ -223,6 +227,8 @@ public: std::vector insert_values; insert_values.push_back("'" + EscapeString(gm_ips_entry.name) + "'"); + insert_values.push_back(std::to_string(gm_ips_entry.account_id)); + insert_values.push_back("'" + EscapeString(gm_ips_entry.ip_address) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_goallists_repository.h b/common/repositories/base/base_goallists_repository.h index e1f1f0aa9..e3761f8b2 100644 --- a/common/repositories/base/base_goallists_repository.h +++ b/common/repositories/base/base_goallists_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr11, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_graveyard_repository.h b/common/repositories/base/base_graveyard_repository.h index 7019a7d40..b86b045bb 100644 --- a/common/repositories/base/base_graveyard_repository.h +++ b/common/repositories/base/base_graveyard_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_grid_repository.h b/common/repositories/base/base_grid_repository.h index 0fedf47a5..a60580472 100644 --- a/common/repositories/base/base_grid_repository.h +++ b/common/repositories/base/base_grid_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("zoneid"); + return std::string("id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &grid : grids) { - if (grid.zoneid == grid_id) { + if (grid.id == grid_id) { return grid; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(grid_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(grid_entry.zoneid)); update_values.push_back(columns[2] + " = " + std::to_string(grid_entry.type)); update_values.push_back(columns[3] + " = " + std::to_string(grid_entry.type2)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - grid_entry.zoneid + grid_entry.id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(grid_entry.id)); + insert_values.push_back(std::to_string(grid_entry.zoneid)); insert_values.push_back(std::to_string(grid_entry.type)); insert_values.push_back(std::to_string(grid_entry.type2)); @@ -228,6 +232,8 @@ public: for (auto &grid_entry: grid_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(grid_entry.id)); + insert_values.push_back(std::to_string(grid_entry.zoneid)); insert_values.push_back(std::to_string(grid_entry.type)); insert_values.push_back(std::to_string(grid_entry.type2)); diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h index 4ff76b0c8..8b06cd5d9 100644 --- a/common/repositories/base/base_ground_spawns_repository.h +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_group_id_repository.h b/common/repositories/base/base_group_id_repository.h index c9446a5d1..ac166ee94 100644 --- a/common/repositories/base/base_group_id_repository.h +++ b/common/repositories/base/base_group_id_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("ismerc"); + return std::string("groupid"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &group_id : group_ids) { - if (group_id.ismerc == group_id_id) { + if (group_id.groupid == group_id_id) { return group_id; } } @@ -176,7 +176,10 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(group_id_entry.groupid)); + update_values.push_back(columns[1] + " = " + std::to_string(group_id_entry.charid)); update_values.push_back(columns[2] + " = '" + EscapeString(group_id_entry.name) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(group_id_entry.ismerc)); auto results = database.QueryDatabase( fmt::format( @@ -184,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - group_id_entry.ismerc + group_id_entry.groupid ) ); @@ -197,7 +200,10 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(group_id_entry.groupid)); + insert_values.push_back(std::to_string(group_id_entry.charid)); insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + insert_values.push_back(std::to_string(group_id_entry.ismerc)); auto results = database.QueryDatabase( fmt::format( @@ -208,7 +214,7 @@ public: ); if (results.Success()) { - group_id_entry.id = results.LastInsertedID(); + group_id_entry.groupid = results.LastInsertedID(); return group_id_entry; } @@ -226,7 +232,10 @@ public: for (auto &group_id_entry: group_id_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(group_id_entry.groupid)); + insert_values.push_back(std::to_string(group_id_entry.charid)); insert_values.push_back("'" + EscapeString(group_id_entry.name) + "'"); + insert_values.push_back(std::to_string(group_id_entry.ismerc)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_group_leaders_repository.h b/common/repositories/base/base_group_leaders_repository.h index 7670f4db9..bfb73c50e 100644 --- a/common/repositories/base/base_group_leaders_repository.h +++ b/common/repositories/base/base_group_leaders_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -196,6 +196,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(group_leaders_entry.gid)); update_values.push_back(columns[1] + " = '" + EscapeString(group_leaders_entry.leadername) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(group_leaders_entry.marknpc) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(group_leaders_entry.leadershipaa) + "'"); @@ -224,6 +225,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(group_leaders_entry.gid)); insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); @@ -242,7 +244,7 @@ public: ); if (results.Success()) { - group_leaders_entry.id = results.LastInsertedID(); + group_leaders_entry.gid = results.LastInsertedID(); return group_leaders_entry; } @@ -260,6 +262,7 @@ public: for (auto &group_leaders_entry: group_leaders_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(group_leaders_entry.gid)); insert_values.push_back("'" + EscapeString(group_leaders_entry.leadername) + "'"); insert_values.push_back("'" + EscapeString(group_leaders_entry.marknpc) + "'"); insert_values.push_back("'" + EscapeString(group_leaders_entry.leadershipaa) + "'"); diff --git a/common/repositories/base/base_guild_members_repository.h b/common/repositories/base/base_guild_members_repository.h index 56d462a93..f5835d582 100644 --- a/common/repositories/base/base_guild_members_repository.h +++ b/common/repositories/base/base_guild_members_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -196,6 +196,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(guild_members_entry.char_id)); update_values.push_back(columns[1] + " = " + std::to_string(guild_members_entry.guild_id)); update_values.push_back(columns[2] + " = " + std::to_string(guild_members_entry.rank)); update_values.push_back(columns[3] + " = " + std::to_string(guild_members_entry.tribute_enable)); @@ -224,6 +225,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(guild_members_entry.char_id)); insert_values.push_back(std::to_string(guild_members_entry.guild_id)); insert_values.push_back(std::to_string(guild_members_entry.rank)); insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); @@ -242,7 +244,7 @@ public: ); if (results.Success()) { - guild_members_entry.id = results.LastInsertedID(); + guild_members_entry.char_id = results.LastInsertedID(); return guild_members_entry; } @@ -260,6 +262,7 @@ public: for (auto &guild_members_entry: guild_members_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(guild_members_entry.char_id)); insert_values.push_back(std::to_string(guild_members_entry.guild_id)); insert_values.push_back(std::to_string(guild_members_entry.rank)); insert_values.push_back(std::to_string(guild_members_entry.tribute_enable)); diff --git a/common/repositories/base/base_guild_ranks_repository.h b/common/repositories/base/base_guild_ranks_repository.h index b7c606f23..2b3a9aca8 100644 --- a/common/repositories/base/base_guild_ranks_repository.h +++ b/common/repositories/base/base_guild_ranks_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -50,7 +50,7 @@ public: static std::string PrimaryKey() { - return std::string("rank"); + return std::string("guild_id"); } static std::vector Columns() @@ -138,7 +138,7 @@ public: ) { for (auto &guild_ranks : guild_rankss) { - if (guild_ranks.rank == guild_ranks_id) { + if (guild_ranks.guild_id == guild_ranks_id) { return guild_ranks; } } @@ -204,6 +204,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(guild_ranks_entry.guild_id)); + update_values.push_back(columns[1] + " = " + std::to_string(guild_ranks_entry.rank)); update_values.push_back(columns[2] + " = '" + EscapeString(guild_ranks_entry.title) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(guild_ranks_entry.can_hear)); update_values.push_back(columns[4] + " = " + std::to_string(guild_ranks_entry.can_speak)); @@ -220,7 +222,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - guild_ranks_entry.rank + guild_ranks_entry.guild_id ) ); @@ -233,6 +235,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(guild_ranks_entry.guild_id)); + insert_values.push_back(std::to_string(guild_ranks_entry.rank)); insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); @@ -252,7 +256,7 @@ public: ); if (results.Success()) { - guild_ranks_entry.id = results.LastInsertedID(); + guild_ranks_entry.guild_id = results.LastInsertedID(); return guild_ranks_entry; } @@ -270,6 +274,8 @@ public: for (auto &guild_ranks_entry: guild_ranks_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(guild_ranks_entry.guild_id)); + insert_values.push_back(std::to_string(guild_ranks_entry.rank)); insert_values.push_back("'" + EscapeString(guild_ranks_entry.title) + "'"); insert_values.push_back(std::to_string(guild_ranks_entry.can_hear)); insert_values.push_back(std::to_string(guild_ranks_entry.can_speak)); diff --git a/common/repositories/base/base_guild_relations_repository.h b/common/repositories/base/base_guild_relations_repository.h index b0ac5c179..c0185cf8c 100644 --- a/common/repositories/base/base_guild_relations_repository.h +++ b/common/repositories/base/base_guild_relations_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("guild2"); + return std::string("guild1"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &guild_relations : guild_relationss) { - if (guild_relations.guild2 == guild_relations_id) { + if (guild_relations.guild1 == guild_relations_id) { return guild_relations; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(guild_relations_entry.guild1)); + update_values.push_back(columns[1] + " = " + std::to_string(guild_relations_entry.guild2)); update_values.push_back(columns[2] + " = " + std::to_string(guild_relations_entry.relation)); auto results = database.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - guild_relations_entry.guild2 + guild_relations_entry.guild1 ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(guild_relations_entry.guild1)); + insert_values.push_back(std::to_string(guild_relations_entry.guild2)); insert_values.push_back(std::to_string(guild_relations_entry.relation)); auto results = database.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - guild_relations_entry.id = results.LastInsertedID(); + guild_relations_entry.guild1 = results.LastInsertedID(); return guild_relations_entry; } @@ -222,6 +226,8 @@ public: for (auto &guild_relations_entry: guild_relations_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(guild_relations_entry.guild1)); + insert_values.push_back(std::to_string(guild_relations_entry.guild2)); insert_values.push_back(std::to_string(guild_relations_entry.relation)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_guilds_repository.h b/common/repositories/base/base_guilds_repository.h index 557804686..85e43ff03 100644 --- a/common/repositories/base/base_guilds_repository.h +++ b/common/repositories/base/base_guilds_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_hackers_repository.h b/common/repositories/base/base_hackers_repository.h index 8b869cfb3..9affdf6ef 100644 --- a/common/repositories/base/base_hackers_repository.h +++ b/common/repositories/base/base_hackers_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_horses_repository.h b/common/repositories/base/base_horses_repository.h index cb365018d..2282e3da0 100644 --- a/common/repositories/base/base_horses_repository.h +++ b/common/repositories/base/base_horses_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -184,6 +184,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = '" + EscapeString(horses_entry.filename) + "'"); update_values.push_back(columns[1] + " = " + std::to_string(horses_entry.race)); update_values.push_back(columns[2] + " = " + std::to_string(horses_entry.gender)); update_values.push_back(columns[3] + " = " + std::to_string(horses_entry.texture)); @@ -209,6 +210,7 @@ public: { std::vector insert_values; + insert_values.push_back("'" + EscapeString(horses_entry.filename) + "'"); insert_values.push_back(std::to_string(horses_entry.race)); insert_values.push_back(std::to_string(horses_entry.gender)); insert_values.push_back(std::to_string(horses_entry.texture)); @@ -224,7 +226,7 @@ public: ); if (results.Success()) { - horses_entry.id = results.LastInsertedID(); + horses_entry.filename = results.LastInsertedID(); return horses_entry; } @@ -242,6 +244,7 @@ public: for (auto &horses_entry: horses_entries) { std::vector insert_values; + insert_values.push_back("'" + EscapeString(horses_entry.filename) + "'"); insert_values.push_back(std::to_string(horses_entry.race)); insert_values.push_back(std::to_string(horses_entry.gender)); insert_values.push_back(std::to_string(horses_entry.texture)); diff --git a/common/repositories/base/base_instance_list_player_repository.h b/common/repositories/base/base_instance_list_player_repository.h index bc7a255c3..dbe253236 100644 --- a/common/repositories/base/base_instance_list_player_repository.h +++ b/common/repositories/base/base_instance_list_player_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -41,7 +41,7 @@ public: static std::string PrimaryKey() { - return std::string("charid"); + return std::string("id"); } static std::vector Columns() @@ -111,7 +111,7 @@ public: ) { for (auto &instance_list_player : instance_list_players) { - if (instance_list_player.charid == instance_list_player_id) { + if (instance_list_player.id == instance_list_player_id) { return instance_list_player; } } @@ -168,7 +168,8 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(instance_list_player_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(instance_list_player_entry.charid)); auto results = database.QueryDatabase( fmt::format( @@ -176,7 +177,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - instance_list_player_entry.charid + instance_list_player_entry.id ) ); @@ -189,7 +190,8 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(instance_list_player_entry.id)); + insert_values.push_back(std::to_string(instance_list_player_entry.charid)); auto results = database.QueryDatabase( fmt::format( @@ -218,7 +220,8 @@ public: for (auto &instance_list_player_entry: instance_list_player_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(instance_list_player_entry.id)); + insert_values.push_back(std::to_string(instance_list_player_entry.charid)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_instance_list_repository.h b/common/repositories/base/base_instance_list_repository.h index d27d6aa27..1366fa6da 100644 --- a/common/repositories/base/base_instance_list_repository.h +++ b/common/repositories/base/base_instance_list_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_inventory_repository.h b/common/repositories/base/base_inventory_repository.h index c389918f7..e07cc892d 100644 --- a/common/repositories/base/base_inventory_repository.h +++ b/common/repositories/base/base_inventory_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -55,7 +55,7 @@ public: static std::string PrimaryKey() { - return std::string("slotid"); + return std::string("charid"); } static std::vector Columns() @@ -153,7 +153,7 @@ public: ) { for (auto &inventory : inventorys) { - if (inventory.slotid == inventory_id) { + if (inventory.charid == inventory_id) { return inventory; } } @@ -224,6 +224,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(inventory_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(inventory_entry.slotid)); update_values.push_back(columns[2] + " = " + std::to_string(inventory_entry.itemid)); update_values.push_back(columns[3] + " = " + std::to_string(inventory_entry.charges)); update_values.push_back(columns[4] + " = " + std::to_string(inventory_entry.color)); @@ -245,7 +247,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - inventory_entry.slotid + inventory_entry.charid ) ); @@ -258,6 +260,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(inventory_entry.charid)); + insert_values.push_back(std::to_string(inventory_entry.slotid)); insert_values.push_back(std::to_string(inventory_entry.itemid)); insert_values.push_back(std::to_string(inventory_entry.charges)); insert_values.push_back(std::to_string(inventory_entry.color)); @@ -282,7 +286,7 @@ public: ); if (results.Success()) { - inventory_entry.id = results.LastInsertedID(); + inventory_entry.charid = results.LastInsertedID(); return inventory_entry; } @@ -300,6 +304,8 @@ public: for (auto &inventory_entry: inventory_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(inventory_entry.charid)); + insert_values.push_back(std::to_string(inventory_entry.slotid)); insert_values.push_back(std::to_string(inventory_entry.itemid)); insert_values.push_back(std::to_string(inventory_entry.charges)); insert_values.push_back(std::to_string(inventory_entry.color)); diff --git a/common/repositories/base/base_inventory_snapshots_repository.h b/common/repositories/base/base_inventory_snapshots_repository.h index f05b88811..d18700645 100644 --- a/common/repositories/base/base_inventory_snapshots_repository.h +++ b/common/repositories/base/base_inventory_snapshots_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -56,7 +56,7 @@ public: static std::string PrimaryKey() { - return std::string("slotid"); + return std::string("time_index"); } static std::vector Columns() @@ -156,7 +156,7 @@ public: ) { for (auto &inventory_snapshots : inventory_snapshotss) { - if (inventory_snapshots.slotid == inventory_snapshots_id) { + if (inventory_snapshots.time_index == inventory_snapshots_id) { return inventory_snapshots; } } @@ -228,6 +228,9 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(inventory_snapshots_entry.time_index)); + update_values.push_back(columns[1] + " = " + std::to_string(inventory_snapshots_entry.charid)); + update_values.push_back(columns[2] + " = " + std::to_string(inventory_snapshots_entry.slotid)); update_values.push_back(columns[3] + " = " + std::to_string(inventory_snapshots_entry.itemid)); update_values.push_back(columns[4] + " = " + std::to_string(inventory_snapshots_entry.charges)); update_values.push_back(columns[5] + " = " + std::to_string(inventory_snapshots_entry.color)); @@ -249,7 +252,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - inventory_snapshots_entry.slotid + inventory_snapshots_entry.time_index ) ); @@ -262,6 +265,9 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(inventory_snapshots_entry.time_index)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.slotid)); insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); @@ -286,7 +292,7 @@ public: ); if (results.Success()) { - inventory_snapshots_entry.id = results.LastInsertedID(); + inventory_snapshots_entry.time_index = results.LastInsertedID(); return inventory_snapshots_entry; } @@ -304,6 +310,9 @@ public: for (auto &inventory_snapshots_entry: inventory_snapshots_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(inventory_snapshots_entry.time_index)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.charid)); + insert_values.push_back(std::to_string(inventory_snapshots_entry.slotid)); insert_values.push_back(std::to_string(inventory_snapshots_entry.itemid)); insert_values.push_back(std::to_string(inventory_snapshots_entry.charges)); insert_values.push_back(std::to_string(inventory_snapshots_entry.color)); diff --git a/common/repositories/base/base_ip_exemptions_repository.h b/common/repositories/base/base_ip_exemptions_repository.h index 9a2bcb45c..380c795f9 100644 --- a/common/repositories/base/base_ip_exemptions_repository.h +++ b/common/repositories/base/base_ip_exemptions_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -206,7 +206,7 @@ public: ); if (results.Success()) { - ip_exemptions_entry.id = results.LastInsertedID(); + ip_exemptions_entry.exemption_id = results.LastInsertedID(); return ip_exemptions_entry; } diff --git a/common/repositories/base/base_item_tick_repository.h b/common/repositories/base/base_item_tick_repository.h index b22039a37..95ea59c9e 100644 --- a/common/repositories/base/base_item_tick_repository.h +++ b/common/repositories/base/base_item_tick_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -224,7 +224,7 @@ public: ); if (results.Success()) { - item_tick_entry.id = results.LastInsertedID(); + item_tick_entry.it_id = results.LastInsertedID(); return item_tick_entry; } diff --git a/common/repositories/base/base_items_repository.h b/common/repositories/base/base_items_repository.h index 69a053c2c..1920c569a 100644 --- a/common/repositories/base/base_items_repository.h +++ b/common/repositories/base/base_items_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -1300,6 +1300,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(items_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(items_entry.minstatus)); update_values.push_back(columns[2] + " = '" + EscapeString(items_entry.Name) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(items_entry.aagi)); @@ -1604,6 +1605,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(items_entry.id)); insert_values.push_back(std::to_string(items_entry.minstatus)); insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); insert_values.push_back(std::to_string(items_entry.aagi)); @@ -1916,6 +1918,7 @@ public: for (auto &items_entry: items_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(items_entry.id)); insert_values.push_back(std::to_string(items_entry.minstatus)); insert_values.push_back("'" + EscapeString(items_entry.Name) + "'"); insert_values.push_back(std::to_string(items_entry.aagi)); diff --git a/common/repositories/base/base_launcher_repository.h b/common/repositories/base/base_launcher_repository.h index 04d148afc..047f027ce 100644 --- a/common/repositories/base/base_launcher_repository.h +++ b/common/repositories/base/base_launcher_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -168,6 +168,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = '" + EscapeString(launcher_entry.name) + "'"); update_values.push_back(columns[1] + " = " + std::to_string(launcher_entry.dynamics)); auto results = database.QueryDatabase( @@ -189,6 +190,7 @@ public: { std::vector insert_values; + insert_values.push_back("'" + EscapeString(launcher_entry.name) + "'"); insert_values.push_back(std::to_string(launcher_entry.dynamics)); auto results = database.QueryDatabase( @@ -200,7 +202,7 @@ public: ); if (results.Success()) { - launcher_entry.id = results.LastInsertedID(); + launcher_entry.name = results.LastInsertedID(); return launcher_entry; } @@ -218,6 +220,7 @@ public: for (auto &launcher_entry: launcher_entries) { std::vector insert_values; + insert_values.push_back("'" + EscapeString(launcher_entry.name) + "'"); insert_values.push_back(std::to_string(launcher_entry.dynamics)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_launcher_zones_repository.h b/common/repositories/base/base_launcher_zones_repository.h deleted file mode 100644 index ba2fe82b3..000000000 --- a/common/repositories/base/base_launcher_zones_repository.h +++ /dev/null @@ -1,312 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - */ - -/** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to - * the repository extending the base. Any modifications to base repositories are to - * be made by the generator only - */ - -#ifndef EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H -#define EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H - -#include "../../database.h" -#include "../../string_util.h" - -class BaseLauncherZonesRepository { -public: - struct LauncherZones { - std::string launcher; - std::string zone; - int port; - }; - - static std::string PrimaryKey() - { - return std::string("zone"); - } - - static std::vector Columns() - { - return { - "launcher", - "zone", - "port", - }; - } - - static std::string ColumnsRaw() - { - return std::string(implode(", ", Columns())); - } - - static std::string InsertColumnsRaw() - { - std::vector insert_columns; - - for (auto &column : Columns()) { - if (column == PrimaryKey()) { - continue; - } - - insert_columns.push_back(column); - } - - return std::string(implode(", ", insert_columns)); - } - - static std::string TableName() - { - return std::string("launcher_zones"); - } - - static std::string BaseSelect() - { - return fmt::format( - "SELECT {} FROM {}", - ColumnsRaw(), - TableName() - ); - } - - static std::string BaseInsert() - { - return fmt::format( - "INSERT INTO {} ({}) ", - TableName(), - InsertColumnsRaw() - ); - } - - static LauncherZones NewEntity() - { - LauncherZones entry{}; - - entry.launcher = ""; - entry.zone = ""; - entry.port = 0; - - return entry; - } - - static LauncherZones GetLauncherZonesEntry( - const std::vector &launcher_zoness, - int launcher_zones_id - ) - { - for (auto &launcher_zones : launcher_zoness) { - if (launcher_zones.zone == launcher_zones_id) { - return launcher_zones; - } - } - - return NewEntity(); - } - - static LauncherZones FindOne( - int launcher_zones_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE id = {} LIMIT 1", - BaseSelect(), - launcher_zones_id - ) - ); - - auto row = results.begin(); - if (results.RowCount() == 1) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - return entry; - } - - return NewEntity(); - } - - static int DeleteOne( - int launcher_zones_id - ) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {} = {}", - TableName(), - PrimaryKey(), - launcher_zones_id - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static int UpdateOne( - LauncherZones launcher_zones_entry - ) - { - std::vector update_values; - - auto columns = Columns(); - - update_values.push_back(columns[2] + " = " + std::to_string(launcher_zones_entry.port)); - - auto results = database.QueryDatabase( - fmt::format( - "UPDATE {} SET {} WHERE {} = {}", - TableName(), - implode(", ", update_values), - PrimaryKey(), - launcher_zones_entry.zone - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static LauncherZones InsertOne( - LauncherZones launcher_zones_entry - ) - { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_zones_entry.port)); - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES ({})", - BaseInsert(), - implode(",", insert_values) - ) - ); - - if (results.Success()) { - launcher_zones_entry.id = results.LastInsertedID(); - return launcher_zones_entry; - } - - launcher_zones_entry = NewEntity(); - - return launcher_zones_entry; - } - - static int InsertMany( - std::vector launcher_zones_entries - ) - { - std::vector insert_chunks; - - for (auto &launcher_zones_entry: launcher_zones_entries) { - std::vector insert_values; - - insert_values.push_back(std::to_string(launcher_zones_entry.port)); - - insert_chunks.push_back("(" + implode(",", insert_values) + ")"); - } - - std::vector insert_values; - - auto results = database.QueryDatabase( - fmt::format( - "{} VALUES {}", - BaseInsert(), - implode(",", insert_chunks) - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - - static std::vector All() - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{}", - BaseSelect() - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static std::vector GetWhere(std::string where_filter) - { - std::vector all_entries; - - auto results = database.QueryDatabase( - fmt::format( - "{} WHERE {}", - BaseSelect(), - where_filter - ) - ); - - all_entries.reserve(results.RowCount()); - - for (auto row = results.begin(); row != results.end(); ++row) { - LauncherZones entry{}; - - entry.launcher = row[0] ? row[0] : ""; - entry.zone = row[1] ? row[1] : ""; - entry.port = atoi(row[2]); - - all_entries.push_back(entry); - } - - return all_entries; - } - - static int DeleteWhere(std::string where_filter) - { - auto results = database.QueryDatabase( - fmt::format( - "DELETE FROM {} WHERE {}", - TableName(), - PrimaryKey(), - where_filter - ) - ); - - return (results.Success() ? results.RowsAffected() : 0); - } - -}; - -#endif //EQEMU_BASE_LAUNCHER_ZONES_REPOSITORY_H diff --git a/common/repositories/base/base_ldon_trap_entries_repository.h b/common/repositories/base/base_ldon_trap_entries_repository.h index aa6d7cc7a..f69ace2f7 100644 --- a/common/repositories/base/base_ldon_trap_entries_repository.h +++ b/common/repositories/base/base_ldon_trap_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -41,7 +41,7 @@ public: static std::string PrimaryKey() { - return std::string("trap_id"); + return std::string("id"); } static std::vector Columns() @@ -111,7 +111,7 @@ public: ) { for (auto &ldon_trap_entries : ldon_trap_entriess) { - if (ldon_trap_entries.trap_id == ldon_trap_entries_id) { + if (ldon_trap_entries.id == ldon_trap_entries_id) { return ldon_trap_entries; } } @@ -168,7 +168,8 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(ldon_trap_entries_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(ldon_trap_entries_entry.trap_id)); auto results = content_db.QueryDatabase( fmt::format( @@ -176,7 +177,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - ldon_trap_entries_entry.trap_id + ldon_trap_entries_entry.id ) ); @@ -189,7 +190,8 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(ldon_trap_entries_entry.id)); + insert_values.push_back(std::to_string(ldon_trap_entries_entry.trap_id)); auto results = content_db.QueryDatabase( fmt::format( @@ -218,7 +220,8 @@ public: for (auto &ldon_trap_entries_entry: ldon_trap_entries_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(ldon_trap_entries_entry.id)); + insert_values.push_back(std::to_string(ldon_trap_entries_entry.trap_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_ldon_trap_templates_repository.h b/common/repositories/base/base_ldon_trap_templates_repository.h index 3d75990cf..33cb42358 100644 --- a/common/repositories/base/base_ldon_trap_templates_repository.h +++ b/common/repositories/base/base_ldon_trap_templates_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -180,6 +180,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(ldon_trap_templates_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(ldon_trap_templates_entry.type)); update_values.push_back(columns[2] + " = " + std::to_string(ldon_trap_templates_entry.spell_id)); update_values.push_back(columns[3] + " = " + std::to_string(ldon_trap_templates_entry.skill)); @@ -204,6 +205,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(ldon_trap_templates_entry.id)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); @@ -236,6 +238,7 @@ public: for (auto &ldon_trap_templates_entry: ldon_trap_templates_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(ldon_trap_templates_entry.id)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.type)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.spell_id)); insert_values.push_back(std::to_string(ldon_trap_templates_entry.skill)); diff --git a/common/repositories/base/base_level_exp_mods_repository.h b/common/repositories/base/base_level_exp_mods_repository.h index d3c1b5249..15aedfb14 100644 --- a/common/repositories/base/base_level_exp_mods_repository.h +++ b/common/repositories/base/base_level_exp_mods_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(level_exp_mods_entry.level)); update_values.push_back(columns[1] + " = " + std::to_string(level_exp_mods_entry.exp_mod)); update_values.push_back(columns[2] + " = " + std::to_string(level_exp_mods_entry.aa_exp_mod)); @@ -194,6 +195,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(level_exp_mods_entry.level)); insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); @@ -206,7 +208,7 @@ public: ); if (results.Success()) { - level_exp_mods_entry.id = results.LastInsertedID(); + level_exp_mods_entry.level = results.LastInsertedID(); return level_exp_mods_entry; } @@ -224,6 +226,7 @@ public: for (auto &level_exp_mods_entry: level_exp_mods_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(level_exp_mods_entry.level)); insert_values.push_back(std::to_string(level_exp_mods_entry.exp_mod)); insert_values.push_back(std::to_string(level_exp_mods_entry.aa_exp_mod)); diff --git a/common/repositories/base/base_lfguild_repository.h b/common/repositories/base/base_lfguild_repository.h index 9930dc35c..acf7f1f9c 100644 --- a/common/repositories/base/base_lfguild_repository.h +++ b/common/repositories/base/base_lfguild_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -48,7 +48,7 @@ public: static std::string PrimaryKey() { - return std::string("name"); + return std::string("type"); } static std::vector Columns() @@ -132,7 +132,7 @@ public: ) { for (auto &lfguild : lfguilds) { - if (lfguild.name == lfguild_id) { + if (lfguild.type == lfguild_id) { return lfguild; } } @@ -196,6 +196,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(lfguild_entry.type)); + update_values.push_back(columns[1] + " = '" + EscapeString(lfguild_entry.name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(lfguild_entry.comment) + "'"); update_values.push_back(columns[3] + " = " + std::to_string(lfguild_entry.fromlevel)); update_values.push_back(columns[4] + " = " + std::to_string(lfguild_entry.tolevel)); @@ -210,7 +212,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - lfguild_entry.name + lfguild_entry.type ) ); @@ -223,6 +225,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(lfguild_entry.type)); + insert_values.push_back("'" + EscapeString(lfguild_entry.name) + "'"); insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); insert_values.push_back(std::to_string(lfguild_entry.tolevel)); @@ -240,7 +244,7 @@ public: ); if (results.Success()) { - lfguild_entry.id = results.LastInsertedID(); + lfguild_entry.type = results.LastInsertedID(); return lfguild_entry; } @@ -258,6 +262,8 @@ public: for (auto &lfguild_entry: lfguild_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(lfguild_entry.type)); + insert_values.push_back("'" + EscapeString(lfguild_entry.name) + "'"); insert_values.push_back("'" + EscapeString(lfguild_entry.comment) + "'"); insert_values.push_back(std::to_string(lfguild_entry.fromlevel)); insert_values.push_back(std::to_string(lfguild_entry.tolevel)); diff --git a/common/repositories/base/base_login_accounts_repository.h b/common/repositories/base/base_login_accounts_repository.h index 8ef4d63c1..91b493ca0 100644 --- a/common/repositories/base/base_login_accounts_repository.h +++ b/common/repositories/base/base_login_accounts_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -196,6 +196,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(login_accounts_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(login_accounts_entry.account_name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(login_accounts_entry.account_password) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(login_accounts_entry.account_email) + "'"); @@ -224,6 +225,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(login_accounts_entry.id)); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); @@ -260,6 +262,7 @@ public: for (auto &login_accounts_entry: login_accounts_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(login_accounts_entry.id)); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_name) + "'"); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_password) + "'"); insert_values.push_back("'" + EscapeString(login_accounts_entry.account_email) + "'"); diff --git a/common/repositories/base/base_login_api_tokens_repository.h b/common/repositories/base/base_login_api_tokens_repository.h index 94b995aba..359b1b723 100644 --- a/common/repositories/base/base_login_api_tokens_repository.h +++ b/common/repositories/base/base_login_api_tokens_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_login_server_admins_repository.h b/common/repositories/base/base_login_server_admins_repository.h index 1d637ab00..540b58c4b 100644 --- a/common/repositories/base/base_login_server_admins_repository.h +++ b/common/repositories/base/base_login_server_admins_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_login_server_list_types_repository.h b/common/repositories/base/base_login_server_list_types_repository.h index 5becb3e65..140115123 100644 --- a/common/repositories/base/base_login_server_list_types_repository.h +++ b/common/repositories/base/base_login_server_list_types_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -168,6 +168,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(login_server_list_types_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(login_server_list_types_entry.description) + "'"); auto results = database.QueryDatabase( @@ -189,6 +190,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(login_server_list_types_entry.id)); insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); auto results = database.QueryDatabase( @@ -218,6 +220,7 @@ public: for (auto &login_server_list_types_entry: login_server_list_types_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(login_server_list_types_entry.id)); insert_values.push_back("'" + EscapeString(login_server_list_types_entry.description) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_login_world_servers_repository.h b/common/repositories/base/base_login_world_servers_repository.h index 517db98f3..26849902d 100644 --- a/common/repositories/base/base_login_world_servers_repository.h +++ b/common/repositories/base/base_login_world_servers_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_logsys_categories_repository.h b/common/repositories/base/base_logsys_categories_repository.h index dff017855..c0def37ac 100644 --- a/common/repositories/base/base_logsys_categories_repository.h +++ b/common/repositories/base/base_logsys_categories_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -180,6 +180,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(logsys_categories_entry.log_category_id)); update_values.push_back(columns[1] + " = '" + EscapeString(logsys_categories_entry.log_category_description) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(logsys_categories_entry.log_to_console)); update_values.push_back(columns[3] + " = " + std::to_string(logsys_categories_entry.log_to_file)); @@ -204,6 +205,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(logsys_categories_entry.log_category_id)); insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); @@ -218,7 +220,7 @@ public: ); if (results.Success()) { - logsys_categories_entry.id = results.LastInsertedID(); + logsys_categories_entry.log_category_id = results.LastInsertedID(); return logsys_categories_entry; } @@ -236,6 +238,7 @@ public: for (auto &logsys_categories_entry: logsys_categories_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(logsys_categories_entry.log_category_id)); insert_values.push_back("'" + EscapeString(logsys_categories_entry.log_category_description) + "'"); insert_values.push_back(std::to_string(logsys_categories_entry.log_to_console)); insert_values.push_back(std::to_string(logsys_categories_entry.log_to_file)); diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h index 67ab318d6..02a7d10d4 100644 --- a/common/repositories/base/base_lootdrop_entries_repository.h +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -48,7 +48,7 @@ public: static std::string PrimaryKey() { - return std::string("item_id"); + return std::string("lootdrop_id"); } static std::vector Columns() @@ -132,7 +132,7 @@ public: ) { for (auto &lootdrop_entries : lootdrop_entriess) { - if (lootdrop_entries.item_id == lootdrop_entries_id) { + if (lootdrop_entries.lootdrop_id == lootdrop_entries_id) { return lootdrop_entries; } } @@ -196,6 +196,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(lootdrop_entries_entry.lootdrop_id)); + update_values.push_back(columns[1] + " = " + std::to_string(lootdrop_entries_entry.item_id)); update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entries_entry.item_charges)); update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); update_values.push_back(columns[4] + " = " + std::to_string(lootdrop_entries_entry.chance)); @@ -210,7 +212,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - lootdrop_entries_entry.item_id + lootdrop_entries_entry.lootdrop_id ) ); @@ -223,6 +225,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(lootdrop_entries_entry.lootdrop_id)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_id)); insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); @@ -240,7 +244,7 @@ public: ); if (results.Success()) { - lootdrop_entries_entry.id = results.LastInsertedID(); + lootdrop_entries_entry.lootdrop_id = results.LastInsertedID(); return lootdrop_entries_entry; } @@ -258,6 +262,8 @@ public: for (auto &lootdrop_entries_entry: lootdrop_entries_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(lootdrop_entries_entry.lootdrop_id)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.item_id)); insert_values.push_back(std::to_string(lootdrop_entries_entry.item_charges)); insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); diff --git a/common/repositories/base/base_lootdrop_repository.h b/common/repositories/base/base_lootdrop_repository.h index 3ee90b6da..c49a0bd15 100644 --- a/common/repositories/base/base_lootdrop_repository.h +++ b/common/repositories/base/base_lootdrop_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_loottable_entries_repository.h b/common/repositories/base/base_loottable_entries_repository.h index fc4542934..4c9dca46d 100644 --- a/common/repositories/base/base_loottable_entries_repository.h +++ b/common/repositories/base/base_loottable_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -45,7 +45,7 @@ public: static std::string PrimaryKey() { - return std::string("lootdrop_id"); + return std::string("loottable_id"); } static std::vector Columns() @@ -123,7 +123,7 @@ public: ) { for (auto &loottable_entries : loottable_entriess) { - if (loottable_entries.lootdrop_id == loottable_entries_id) { + if (loottable_entries.loottable_id == loottable_entries_id) { return loottable_entries; } } @@ -184,6 +184,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(loottable_entries_entry.loottable_id)); + update_values.push_back(columns[1] + " = " + std::to_string(loottable_entries_entry.lootdrop_id)); update_values.push_back(columns[2] + " = " + std::to_string(loottable_entries_entry.multiplier)); update_values.push_back(columns[3] + " = " + std::to_string(loottable_entries_entry.droplimit)); update_values.push_back(columns[4] + " = " + std::to_string(loottable_entries_entry.mindrop)); @@ -195,7 +197,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - loottable_entries_entry.lootdrop_id + loottable_entries_entry.loottable_id ) ); @@ -208,6 +210,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(loottable_entries_entry.loottable_id)); + insert_values.push_back(std::to_string(loottable_entries_entry.lootdrop_id)); insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); @@ -222,7 +226,7 @@ public: ); if (results.Success()) { - loottable_entries_entry.id = results.LastInsertedID(); + loottable_entries_entry.loottable_id = results.LastInsertedID(); return loottable_entries_entry; } @@ -240,6 +244,8 @@ public: for (auto &loottable_entries_entry: loottable_entries_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(loottable_entries_entry.loottable_id)); + insert_values.push_back(std::to_string(loottable_entries_entry.lootdrop_id)); insert_values.push_back(std::to_string(loottable_entries_entry.multiplier)); insert_values.push_back(std::to_string(loottable_entries_entry.droplimit)); insert_values.push_back(std::to_string(loottable_entries_entry.mindrop)); diff --git a/common/repositories/base/base_loottable_repository.h b/common/repositories/base/base_loottable_repository.h index f04f18f69..c6388b3ed 100644 --- a/common/repositories/base/base_loottable_repository.h +++ b/common/repositories/base/base_loottable_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_mail_repository.h b/common/repositories/base/base_mail_repository.h index e8f362c34..b8d610af5 100644 --- a/common/repositories/base/base_mail_repository.h +++ b/common/repositories/base/base_mail_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -236,7 +236,7 @@ public: ); if (results.Success()) { - mail_entry.id = results.LastInsertedID(); + mail_entry.msgid = results.LastInsertedID(); return mail_entry; } diff --git a/common/repositories/base/base_merchantlist_repository.h b/common/repositories/base/base_merchantlist_repository.h index d4dd17828..970f0e56e 100644 --- a/common/repositories/base/base_merchantlist_repository.h +++ b/common/repositories/base/base_merchantlist_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -50,7 +50,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("merchantid"); } static std::vector Columns() @@ -138,7 +138,7 @@ public: ) { for (auto &merchantlist : merchantlists) { - if (merchantlist.slot == merchantlist_id) { + if (merchantlist.merchantid == merchantlist_id) { return merchantlist; } } @@ -204,6 +204,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(merchantlist_entry.merchantid)); + update_values.push_back(columns[1] + " = " + std::to_string(merchantlist_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_entry.item)); update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_entry.faction_required)); update_values.push_back(columns[4] + " = " + std::to_string(merchantlist_entry.level_required)); @@ -220,7 +222,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - merchantlist_entry.slot + merchantlist_entry.merchantid ) ); @@ -233,6 +235,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(merchantlist_entry.merchantid)); + insert_values.push_back(std::to_string(merchantlist_entry.slot)); insert_values.push_back(std::to_string(merchantlist_entry.item)); insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); insert_values.push_back(std::to_string(merchantlist_entry.level_required)); @@ -252,7 +256,7 @@ public: ); if (results.Success()) { - merchantlist_entry.id = results.LastInsertedID(); + merchantlist_entry.merchantid = results.LastInsertedID(); return merchantlist_entry; } @@ -270,6 +274,8 @@ public: for (auto &merchantlist_entry: merchantlist_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(merchantlist_entry.merchantid)); + insert_values.push_back(std::to_string(merchantlist_entry.slot)); insert_values.push_back(std::to_string(merchantlist_entry.item)); insert_values.push_back(std::to_string(merchantlist_entry.faction_required)); insert_values.push_back(std::to_string(merchantlist_entry.level_required)); diff --git a/common/repositories/base/base_merchantlist_temp_repository.h b/common/repositories/base/base_merchantlist_temp_repository.h index 0c5d06010..618229a2d 100644 --- a/common/repositories/base/base_merchantlist_temp_repository.h +++ b/common/repositories/base/base_merchantlist_temp_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("npcid"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &merchantlist_temp : merchantlist_temps) { - if (merchantlist_temp.slot == merchantlist_temp_id) { + if (merchantlist_temp.npcid == merchantlist_temp_id) { return merchantlist_temp; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(merchantlist_temp_entry.npcid)); + update_values.push_back(columns[1] + " = " + std::to_string(merchantlist_temp_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(merchantlist_temp_entry.itemid)); update_values.push_back(columns[3] + " = " + std::to_string(merchantlist_temp_entry.charges)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - merchantlist_temp_entry.slot + merchantlist_temp_entry.npcid ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(merchantlist_temp_entry.npcid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.slot)); insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - merchantlist_temp_entry.id = results.LastInsertedID(); + merchantlist_temp_entry.npcid = results.LastInsertedID(); return merchantlist_temp_entry; } @@ -228,6 +232,8 @@ public: for (auto &merchantlist_temp_entry: merchantlist_temp_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(merchantlist_temp_entry.npcid)); + insert_values.push_back(std::to_string(merchantlist_temp_entry.slot)); insert_values.push_back(std::to_string(merchantlist_temp_entry.itemid)); insert_values.push_back(std::to_string(merchantlist_temp_entry.charges)); diff --git a/common/repositories/base/base_name_filter_repository.h b/common/repositories/base/base_name_filter_repository.h index a79fc338c..1077e08a8 100644 --- a/common/repositories/base/base_name_filter_repository.h +++ b/common/repositories/base/base_name_filter_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_emotes_repository.h b/common/repositories/base/base_npc_emotes_repository.h index bb6567e8c..ce0271f8a 100644 --- a/common/repositories/base/base_npc_emotes_repository.h +++ b/common/repositories/base/base_npc_emotes_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_faction_entries_repository.h b/common/repositories/base/base_npc_faction_entries_repository.h index 64d07c6a9..177609556 100644 --- a/common/repositories/base/base_npc_faction_entries_repository.h +++ b/common/repositories/base/base_npc_faction_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("faction_id"); + return std::string("npc_faction_id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &npc_faction_entries : npc_faction_entriess) { - if (npc_faction_entries.faction_id == npc_faction_entries_id) { + if (npc_faction_entries.npc_faction_id == npc_faction_entries_id) { return npc_faction_entries; } } @@ -180,6 +180,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(npc_faction_entries_entry.npc_faction_id)); + update_values.push_back(columns[1] + " = " + std::to_string(npc_faction_entries_entry.faction_id)); update_values.push_back(columns[2] + " = " + std::to_string(npc_faction_entries_entry.value)); update_values.push_back(columns[3] + " = " + std::to_string(npc_faction_entries_entry.npc_value)); update_values.push_back(columns[4] + " = " + std::to_string(npc_faction_entries_entry.temp)); @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - npc_faction_entries_entry.faction_id + npc_faction_entries_entry.npc_faction_id ) ); @@ -203,6 +205,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.faction_id)); insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - npc_faction_entries_entry.id = results.LastInsertedID(); + npc_faction_entries_entry.npc_faction_id = results.LastInsertedID(); return npc_faction_entries_entry; } @@ -234,6 +238,8 @@ public: for (auto &npc_faction_entries_entry: npc_faction_entries_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_faction_id)); + insert_values.push_back(std::to_string(npc_faction_entries_entry.faction_id)); insert_values.push_back(std::to_string(npc_faction_entries_entry.value)); insert_values.push_back(std::to_string(npc_faction_entries_entry.npc_value)); insert_values.push_back(std::to_string(npc_faction_entries_entry.temp)); diff --git a/common/repositories/base/base_npc_faction_repository.h b/common/repositories/base/base_npc_faction_repository.h index dc5f89300..7e9547770 100644 --- a/common/repositories/base/base_npc_faction_repository.h +++ b/common/repositories/base/base_npc_faction_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_scale_global_base_repository.h b/common/repositories/base/base_npc_scale_global_base_repository.h index 543fa6261..ad39a47f3 100644 --- a/common/repositories/base/base_npc_scale_global_base_repository.h +++ b/common/repositories/base/base_npc_scale_global_base_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -67,7 +67,7 @@ public: static std::string PrimaryKey() { - return std::string("level"); + return std::string("type"); } static std::vector Columns() @@ -189,7 +189,7 @@ public: ) { for (auto &npc_scale_global_base : npc_scale_global_bases) { - if (npc_scale_global_base.level == npc_scale_global_base_id) { + if (npc_scale_global_base.type == npc_scale_global_base_id) { return npc_scale_global_base; } } @@ -272,6 +272,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(npc_scale_global_base_entry.type)); + update_values.push_back(columns[1] + " = " + std::to_string(npc_scale_global_base_entry.level)); update_values.push_back(columns[2] + " = " + std::to_string(npc_scale_global_base_entry.ac)); update_values.push_back(columns[3] + " = " + std::to_string(npc_scale_global_base_entry.hp)); update_values.push_back(columns[4] + " = " + std::to_string(npc_scale_global_base_entry.accuracy)); @@ -305,7 +307,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - npc_scale_global_base_entry.level + npc_scale_global_base_entry.type ) ); @@ -318,6 +320,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(npc_scale_global_base_entry.type)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.level)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); @@ -354,7 +358,7 @@ public: ); if (results.Success()) { - npc_scale_global_base_entry.id = results.LastInsertedID(); + npc_scale_global_base_entry.type = results.LastInsertedID(); return npc_scale_global_base_entry; } @@ -372,6 +376,8 @@ public: for (auto &npc_scale_global_base_entry: npc_scale_global_base_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(npc_scale_global_base_entry.type)); + insert_values.push_back(std::to_string(npc_scale_global_base_entry.level)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.ac)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.hp)); insert_values.push_back(std::to_string(npc_scale_global_base_entry.accuracy)); diff --git a/common/repositories/base/base_npc_spells_effects_entries_repository.h b/common/repositories/base/base_npc_spells_effects_entries_repository.h index e4631037c..30206e5a8 100644 --- a/common/repositories/base/base_npc_spells_effects_entries_repository.h +++ b/common/repositories/base/base_npc_spells_effects_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_spells_effects_repository.h b/common/repositories/base/base_npc_spells_effects_repository.h index 831d5b6c9..ef6755e9b 100644 --- a/common/repositories/base/base_npc_spells_effects_repository.h +++ b/common/repositories/base/base_npc_spells_effects_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_spells_entries_repository.h b/common/repositories/base/base_npc_spells_entries_repository.h index 85bdbc383..52f34c15b 100644 --- a/common/repositories/base/base_npc_spells_entries_repository.h +++ b/common/repositories/base/base_npc_spells_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_spells_repository.h b/common/repositories/base/base_npc_spells_repository.h index 10bf88898..563da0517 100644 --- a/common/repositories/base/base_npc_spells_repository.h +++ b/common/repositories/base/base_npc_spells_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_types_repository.h b/common/repositories/base/base_npc_types_repository.h index 62a75c88f..d0e0d340b 100644 --- a/common/repositories/base/base_npc_types_repository.h +++ b/common/repositories/base/base_npc_types_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_npc_types_tint_repository.h b/common/repositories/base/base_npc_types_tint_repository.h index 3c11932ed..c645859ab 100644 --- a/common/repositories/base/base_npc_types_tint_repository.h +++ b/common/repositories/base/base_npc_types_tint_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -276,6 +276,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(npc_types_tint_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(npc_types_tint_entry.red1h)); update_values.push_back(columns[3] + " = " + std::to_string(npc_types_tint_entry.grn1h)); @@ -324,6 +325,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(npc_types_tint_entry.id)); insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); @@ -380,6 +382,7 @@ public: for (auto &npc_types_tint_entry: npc_types_tint_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(npc_types_tint_entry.id)); insert_values.push_back("'" + EscapeString(npc_types_tint_entry.tint_set_name) + "'"); insert_values.push_back(std::to_string(npc_types_tint_entry.red1h)); insert_values.push_back(std::to_string(npc_types_tint_entry.grn1h)); diff --git a/common/repositories/base/base_object_contents_repository.h b/common/repositories/base/base_object_contents_repository.h index 04a261381..632612862 100644 --- a/common/repositories/base/base_object_contents_repository.h +++ b/common/repositories/base/base_object_contents_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -51,7 +51,7 @@ public: static std::string PrimaryKey() { - return std::string("bagidx"); + return std::string("parentid"); } static std::vector Columns() @@ -141,7 +141,7 @@ public: ) { for (auto &object_contents : object_contentss) { - if (object_contents.bagidx == object_contents_id) { + if (object_contents.parentid == object_contents_id) { return object_contents; } } @@ -209,6 +209,8 @@ public: auto columns = Columns(); update_values.push_back(columns[0] + " = " + std::to_string(object_contents_entry.zoneid)); + update_values.push_back(columns[1] + " = " + std::to_string(object_contents_entry.parentid)); + update_values.push_back(columns[2] + " = " + std::to_string(object_contents_entry.bagidx)); update_values.push_back(columns[3] + " = " + std::to_string(object_contents_entry.itemid)); update_values.push_back(columns[4] + " = " + std::to_string(object_contents_entry.charges)); update_values.push_back(columns[5] + " = '" + EscapeString(object_contents_entry.droptime) + "'"); @@ -225,7 +227,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - object_contents_entry.bagidx + object_contents_entry.parentid ) ); @@ -239,6 +241,8 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.parentid)); + insert_values.push_back(std::to_string(object_contents_entry.bagidx)); insert_values.push_back(std::to_string(object_contents_entry.itemid)); insert_values.push_back(std::to_string(object_contents_entry.charges)); insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); @@ -258,7 +262,7 @@ public: ); if (results.Success()) { - object_contents_entry.id = results.LastInsertedID(); + object_contents_entry.parentid = results.LastInsertedID(); return object_contents_entry; } @@ -277,6 +281,8 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(object_contents_entry.zoneid)); + insert_values.push_back(std::to_string(object_contents_entry.parentid)); + insert_values.push_back(std::to_string(object_contents_entry.bagidx)); insert_values.push_back(std::to_string(object_contents_entry.itemid)); insert_values.push_back(std::to_string(object_contents_entry.charges)); insert_values.push_back("'" + EscapeString(object_contents_entry.droptime) + "'"); diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h index c3287bf96..9896520f1 100644 --- a/common/repositories/base/base_object_repository.h +++ b/common/repositories/base/base_object_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_perl_event_export_settings_repository.h b/common/repositories/base/base_perl_event_export_settings_repository.h index 8e72aa8eb..0db0459d8 100644 --- a/common/repositories/base/base_perl_event_export_settings_repository.h +++ b/common/repositories/base/base_perl_event_export_settings_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -188,6 +188,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(perl_event_export_settings_entry.event_id)); update_values.push_back(columns[1] + " = '" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(perl_event_export_settings_entry.export_qglobals)); update_values.push_back(columns[3] + " = " + std::to_string(perl_event_export_settings_entry.export_mob)); @@ -214,6 +215,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(perl_event_export_settings_entry.event_id)); insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); @@ -230,7 +232,7 @@ public: ); if (results.Success()) { - perl_event_export_settings_entry.id = results.LastInsertedID(); + perl_event_export_settings_entry.event_id = results.LastInsertedID(); return perl_event_export_settings_entry; } @@ -248,6 +250,7 @@ public: for (auto &perl_event_export_settings_entry: perl_event_export_settings_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(perl_event_export_settings_entry.event_id)); insert_values.push_back("'" + EscapeString(perl_event_export_settings_entry.event_description) + "'"); insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_qglobals)); insert_values.push_back(std::to_string(perl_event_export_settings_entry.export_mob)); diff --git a/common/repositories/base/base_petitions_repository.h b/common/repositories/base/base_petitions_repository.h index 97a9e5761..b450c02fc 100644 --- a/common/repositories/base/base_petitions_repository.h +++ b/common/repositories/base/base_petitions_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -284,7 +284,7 @@ public: ); if (results.Success()) { - petitions_entry.id = results.LastInsertedID(); + petitions_entry.dib = results.LastInsertedID(); return petitions_entry; } diff --git a/common/repositories/base/base_pets_equipmentset_entries_repository.h b/common/repositories/base/base_pets_equipmentset_entries_repository.h index 6b27208f2..ef2238b9d 100644 --- a/common/repositories/base/base_pets_equipmentset_entries_repository.h +++ b/common/repositories/base/base_pets_equipmentset_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -42,7 +42,7 @@ public: static std::string PrimaryKey() { - return std::string("slot"); + return std::string("set_id"); } static std::vector Columns() @@ -114,7 +114,7 @@ public: ) { for (auto &pets_equipmentset_entries : pets_equipmentset_entriess) { - if (pets_equipmentset_entries.slot == pets_equipmentset_entries_id) { + if (pets_equipmentset_entries.set_id == pets_equipmentset_entries_id) { return pets_equipmentset_entries; } } @@ -172,6 +172,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(pets_equipmentset_entries_entry.set_id)); + update_values.push_back(columns[1] + " = " + std::to_string(pets_equipmentset_entries_entry.slot)); update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entries_entry.item_id)); auto results = content_db.QueryDatabase( @@ -180,7 +182,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - pets_equipmentset_entries_entry.slot + pets_equipmentset_entries_entry.set_id ) ); @@ -193,6 +195,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.set_id)); + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.slot)); insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); auto results = content_db.QueryDatabase( @@ -204,7 +208,7 @@ public: ); if (results.Success()) { - pets_equipmentset_entries_entry.id = results.LastInsertedID(); + pets_equipmentset_entries_entry.set_id = results.LastInsertedID(); return pets_equipmentset_entries_entry; } @@ -222,6 +226,8 @@ public: for (auto &pets_equipmentset_entries_entry: pets_equipmentset_entries_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.set_id)); + insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.slot)); insert_values.push_back(std::to_string(pets_equipmentset_entries_entry.item_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); diff --git a/common/repositories/base/base_pets_equipmentset_repository.h b/common/repositories/base/base_pets_equipmentset_repository.h index 0a2fe7143..1d8d33ee3 100644 --- a/common/repositories/base/base_pets_equipmentset_repository.h +++ b/common/repositories/base/base_pets_equipmentset_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(pets_equipmentset_entry.set_id)); update_values.push_back(columns[1] + " = '" + EscapeString(pets_equipmentset_entry.setname) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(pets_equipmentset_entry.nested_set)); @@ -194,6 +195,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(pets_equipmentset_entry.set_id)); insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); @@ -206,7 +208,7 @@ public: ); if (results.Success()) { - pets_equipmentset_entry.id = results.LastInsertedID(); + pets_equipmentset_entry.set_id = results.LastInsertedID(); return pets_equipmentset_entry; } @@ -224,6 +226,7 @@ public: for (auto &pets_equipmentset_entry: pets_equipmentset_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(pets_equipmentset_entry.set_id)); insert_values.push_back("'" + EscapeString(pets_equipmentset_entry.setname) + "'"); insert_values.push_back(std::to_string(pets_equipmentset_entry.nested_set)); diff --git a/common/repositories/base/base_pets_repository.h b/common/repositories/base/base_pets_repository.h index adfccf8d5..940c6261a 100644 --- a/common/repositories/base/base_pets_repository.h +++ b/common/repositories/base/base_pets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -47,7 +47,7 @@ public: static std::string PrimaryKey() { - return std::string("petpower"); + return std::string("type"); } static std::vector Columns() @@ -129,7 +129,7 @@ public: ) { for (auto &pets : petss) { - if (pets.petpower == pets_id) { + if (pets.type == pets_id) { return pets; } } @@ -192,6 +192,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = '" + EscapeString(pets_entry.type) + "'"); + update_values.push_back(columns[1] + " = " + std::to_string(pets_entry.petpower)); update_values.push_back(columns[2] + " = " + std::to_string(pets_entry.npcID)); update_values.push_back(columns[3] + " = " + std::to_string(pets_entry.temp)); update_values.push_back(columns[4] + " = " + std::to_string(pets_entry.petcontrol)); @@ -205,7 +207,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - pets_entry.petpower + pets_entry.type ) ); @@ -218,6 +220,8 @@ public: { std::vector insert_values; + insert_values.push_back("'" + EscapeString(pets_entry.type) + "'"); + insert_values.push_back(std::to_string(pets_entry.petpower)); insert_values.push_back(std::to_string(pets_entry.npcID)); insert_values.push_back(std::to_string(pets_entry.temp)); insert_values.push_back(std::to_string(pets_entry.petcontrol)); @@ -234,7 +238,7 @@ public: ); if (results.Success()) { - pets_entry.id = results.LastInsertedID(); + pets_entry.type = results.LastInsertedID(); return pets_entry; } @@ -252,6 +256,8 @@ public: for (auto &pets_entry: pets_entries) { std::vector insert_values; + insert_values.push_back("'" + EscapeString(pets_entry.type) + "'"); + insert_values.push_back(std::to_string(pets_entry.petpower)); insert_values.push_back(std::to_string(pets_entry.npcID)); insert_values.push_back(std::to_string(pets_entry.temp)); insert_values.push_back(std::to_string(pets_entry.petcontrol)); diff --git a/common/repositories/base/base_player_titlesets_repository.h b/common/repositories/base/base_player_titlesets_repository.h index 4f036f2a5..648da53c3 100644 --- a/common/repositories/base/base_player_titlesets_repository.h +++ b/common/repositories/base/base_player_titlesets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_proximities_repository.h b/common/repositories/base/base_proximities_repository.h index b1257616e..de9026645 100644 --- a/common/repositories/base/base_proximities_repository.h +++ b/common/repositories/base/base_proximities_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -47,7 +47,7 @@ public: static std::string PrimaryKey() { - return std::string("exploreid"); + return std::string("zoneid"); } static std::vector Columns() @@ -129,7 +129,7 @@ public: ) { for (auto &proximities : proximitiess) { - if (proximities.exploreid == proximities_id) { + if (proximities.zoneid == proximities_id) { return proximities; } } @@ -192,6 +192,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(proximities_entry.zoneid)); + update_values.push_back(columns[1] + " = " + std::to_string(proximities_entry.exploreid)); update_values.push_back(columns[2] + " = " + std::to_string(proximities_entry.minx)); update_values.push_back(columns[3] + " = " + std::to_string(proximities_entry.maxx)); update_values.push_back(columns[4] + " = " + std::to_string(proximities_entry.miny)); @@ -205,7 +207,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - proximities_entry.exploreid + proximities_entry.zoneid ) ); @@ -218,6 +220,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(proximities_entry.zoneid)); + insert_values.push_back(std::to_string(proximities_entry.exploreid)); insert_values.push_back(std::to_string(proximities_entry.minx)); insert_values.push_back(std::to_string(proximities_entry.maxx)); insert_values.push_back(std::to_string(proximities_entry.miny)); @@ -234,7 +238,7 @@ public: ); if (results.Success()) { - proximities_entry.id = results.LastInsertedID(); + proximities_entry.zoneid = results.LastInsertedID(); return proximities_entry; } @@ -252,6 +256,8 @@ public: for (auto &proximities_entry: proximities_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(proximities_entry.zoneid)); + insert_values.push_back(std::to_string(proximities_entry.exploreid)); insert_values.push_back(std::to_string(proximities_entry.minx)); insert_values.push_back(std::to_string(proximities_entry.maxx)); insert_values.push_back(std::to_string(proximities_entry.miny)); diff --git a/common/repositories/base/base_quest_globals_repository.h b/common/repositories/base/base_quest_globals_repository.h index 944bc4c44..6db28c9a2 100644 --- a/common/repositories/base/base_quest_globals_repository.h +++ b/common/repositories/base/base_quest_globals_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -45,7 +45,7 @@ public: static std::string PrimaryKey() { - return std::string("name"); + return std::string("charid"); } static std::vector Columns() @@ -123,7 +123,7 @@ public: ) { for (auto &quest_globals : quest_globalss) { - if (quest_globals.name == quest_globals_id) { + if (quest_globals.charid == quest_globals_id) { return quest_globals; } } @@ -184,6 +184,10 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(quest_globals_entry.charid)); + update_values.push_back(columns[1] + " = " + std::to_string(quest_globals_entry.npcid)); + update_values.push_back(columns[2] + " = " + std::to_string(quest_globals_entry.zoneid)); + update_values.push_back(columns[3] + " = '" + EscapeString(quest_globals_entry.name) + "'"); update_values.push_back(columns[4] + " = '" + EscapeString(quest_globals_entry.value) + "'"); update_values.push_back(columns[5] + " = " + std::to_string(quest_globals_entry.expdate)); @@ -193,7 +197,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - quest_globals_entry.name + quest_globals_entry.charid ) ); @@ -206,6 +210,10 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(quest_globals_entry.charid)); + insert_values.push_back(std::to_string(quest_globals_entry.npcid)); + insert_values.push_back(std::to_string(quest_globals_entry.zoneid)); + insert_values.push_back("'" + EscapeString(quest_globals_entry.name) + "'"); insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); insert_values.push_back(std::to_string(quest_globals_entry.expdate)); @@ -218,7 +226,7 @@ public: ); if (results.Success()) { - quest_globals_entry.id = results.LastInsertedID(); + quest_globals_entry.charid = results.LastInsertedID(); return quest_globals_entry; } @@ -236,6 +244,10 @@ public: for (auto &quest_globals_entry: quest_globals_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(quest_globals_entry.charid)); + insert_values.push_back(std::to_string(quest_globals_entry.npcid)); + insert_values.push_back(std::to_string(quest_globals_entry.zoneid)); + insert_values.push_back("'" + EscapeString(quest_globals_entry.name) + "'"); insert_values.push_back("'" + EscapeString(quest_globals_entry.value) + "'"); insert_values.push_back(std::to_string(quest_globals_entry.expdate)); diff --git a/common/repositories/base/base_raid_details_repository.h b/common/repositories/base/base_raid_details_repository.h index e5e9ca728..80181d8bc 100644 --- a/common/repositories/base/base_raid_details_repository.h +++ b/common/repositories/base/base_raid_details_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -176,6 +176,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(raid_details_entry.raidid)); update_values.push_back(columns[1] + " = " + std::to_string(raid_details_entry.loottype)); update_values.push_back(columns[2] + " = " + std::to_string(raid_details_entry.locked)); update_values.push_back(columns[3] + " = '" + EscapeString(raid_details_entry.motd) + "'"); @@ -199,6 +200,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(raid_details_entry.raidid)); insert_values.push_back(std::to_string(raid_details_entry.loottype)); insert_values.push_back(std::to_string(raid_details_entry.locked)); insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); @@ -212,7 +214,7 @@ public: ); if (results.Success()) { - raid_details_entry.id = results.LastInsertedID(); + raid_details_entry.raidid = results.LastInsertedID(); return raid_details_entry; } @@ -230,6 +232,7 @@ public: for (auto &raid_details_entry: raid_details_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(raid_details_entry.raidid)); insert_values.push_back(std::to_string(raid_details_entry.loottype)); insert_values.push_back(std::to_string(raid_details_entry.locked)); insert_values.push_back("'" + EscapeString(raid_details_entry.motd) + "'"); diff --git a/common/repositories/base/base_raid_members_repository.h b/common/repositories/base/base_raid_members_repository.h index c69a369ac..b567edf70 100644 --- a/common/repositories/base/base_raid_members_repository.h +++ b/common/repositories/base/base_raid_members_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -197,6 +197,7 @@ public: auto columns = Columns(); update_values.push_back(columns[0] + " = " + std::to_string(raid_members_entry.raidid)); + update_values.push_back(columns[1] + " = " + std::to_string(raid_members_entry.charid)); update_values.push_back(columns[2] + " = " + std::to_string(raid_members_entry.groupid)); update_values.push_back(columns[3] + " = " + std::to_string(raid_members_entry._class)); update_values.push_back(columns[4] + " = " + std::to_string(raid_members_entry.level)); @@ -225,6 +226,7 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.charid)); insert_values.push_back(std::to_string(raid_members_entry.groupid)); insert_values.push_back(std::to_string(raid_members_entry._class)); insert_values.push_back(std::to_string(raid_members_entry.level)); @@ -242,7 +244,7 @@ public: ); if (results.Success()) { - raid_members_entry.id = results.LastInsertedID(); + raid_members_entry.charid = results.LastInsertedID(); return raid_members_entry; } @@ -261,6 +263,7 @@ public: std::vector insert_values; insert_values.push_back(std::to_string(raid_members_entry.raidid)); + insert_values.push_back(std::to_string(raid_members_entry.charid)); insert_values.push_back(std::to_string(raid_members_entry.groupid)); insert_values.push_back(std::to_string(raid_members_entry._class)); insert_values.push_back(std::to_string(raid_members_entry.level)); diff --git a/common/repositories/base/base_reports_repository.h b/common/repositories/base/base_reports_repository.h index 5d61e1d9b..e24c18c8f 100644 --- a/common/repositories/base/base_reports_repository.h +++ b/common/repositories/base/base_reports_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_respawn_times_repository.h b/common/repositories/base/base_respawn_times_repository.h index 86f6c8785..f94896c07 100644 --- a/common/repositories/base/base_respawn_times_repository.h +++ b/common/repositories/base/base_respawn_times_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("instance_id"); + return std::string("id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &respawn_times : respawn_timess) { - if (respawn_times.instance_id == respawn_times_id) { + if (respawn_times.id == respawn_times_id) { return respawn_times; } } @@ -176,8 +176,10 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(respawn_times_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(respawn_times_entry.start)); update_values.push_back(columns[2] + " = " + std::to_string(respawn_times_entry.duration)); + update_values.push_back(columns[3] + " = " + std::to_string(respawn_times_entry.instance_id)); auto results = database.QueryDatabase( fmt::format( @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - respawn_times_entry.instance_id + respawn_times_entry.id ) ); @@ -198,8 +200,10 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(respawn_times_entry.id)); insert_values.push_back(std::to_string(respawn_times_entry.start)); insert_values.push_back(std::to_string(respawn_times_entry.duration)); + insert_values.push_back(std::to_string(respawn_times_entry.instance_id)); auto results = database.QueryDatabase( fmt::format( @@ -228,8 +232,10 @@ public: for (auto &respawn_times_entry: respawn_times_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(respawn_times_entry.id)); insert_values.push_back(std::to_string(respawn_times_entry.start)); insert_values.push_back(std::to_string(respawn_times_entry.duration)); + insert_values.push_back(std::to_string(respawn_times_entry.instance_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_rule_sets_repository.h b/common/repositories/base/base_rule_sets_repository.h index e6a6c5717..76ea63faf 100644 --- a/common/repositories/base/base_rule_sets_repository.h +++ b/common/repositories/base/base_rule_sets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -200,7 +200,7 @@ public: ); if (results.Success()) { - rule_sets_entry.id = results.LastInsertedID(); + rule_sets_entry.ruleset_id = results.LastInsertedID(); return rule_sets_entry; } diff --git a/common/repositories/base/base_rule_values_repository.h b/common/repositories/base/base_rule_values_repository.h index f6dd33980..5e3038cea 100644 --- a/common/repositories/base/base_rule_values_repository.h +++ b/common/repositories/base/base_rule_values_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("rule_name"); + return std::string("ruleset_id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &rule_values : rule_valuess) { - if (rule_values.rule_name == rule_values_id) { + if (rule_values.ruleset_id == rule_values_id) { return rule_values; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(rule_values_entry.ruleset_id)); + update_values.push_back(columns[1] + " = '" + EscapeString(rule_values_entry.rule_name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(rule_values_entry.rule_value) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(rule_values_entry.notes) + "'"); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - rule_values_entry.rule_name + rule_values_entry.ruleset_id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(rule_values_entry.ruleset_id)); + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_name) + "'"); insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - rule_values_entry.id = results.LastInsertedID(); + rule_values_entry.ruleset_id = results.LastInsertedID(); return rule_values_entry; } @@ -228,6 +232,8 @@ public: for (auto &rule_values_entry: rule_values_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(rule_values_entry.ruleset_id)); + insert_values.push_back("'" + EscapeString(rule_values_entry.rule_name) + "'"); insert_values.push_back("'" + EscapeString(rule_values_entry.rule_value) + "'"); insert_values.push_back("'" + EscapeString(rule_values_entry.notes) + "'"); diff --git a/common/repositories/base/base_saylink_repository.h b/common/repositories/base/base_saylink_repository.h index 2d8da9040..249d93417 100644 --- a/common/repositories/base/base_saylink_repository.h +++ b/common/repositories/base/base_saylink_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_skill_caps_repository.h b/common/repositories/base/base_skill_caps_repository.h index daf293f0a..15d33b3f3 100644 --- a/common/repositories/base/base_skill_caps_repository.h +++ b/common/repositories/base/base_skill_caps_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("class_"); + return std::string("skillID"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &skill_caps : skill_capss) { - if (skill_caps.class_ == skill_caps_id) { + if (skill_caps.skillID == skill_caps_id) { return skill_caps; } } @@ -180,7 +180,11 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(skill_caps_entry.skillID)); + update_values.push_back(columns[1] + " = " + std::to_string(skill_caps_entry.class)); + update_values.push_back(columns[2] + " = " + std::to_string(skill_caps_entry.level)); update_values.push_back(columns[3] + " = " + std::to_string(skill_caps_entry.cap)); + update_values.push_back(columns[4] + " = " + std::to_string(skill_caps_entry.class_)); auto results = content_db.QueryDatabase( fmt::format( @@ -188,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - skill_caps_entry.class_ + skill_caps_entry.skillID ) ); @@ -201,7 +205,11 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(skill_caps_entry.skillID)); + insert_values.push_back(std::to_string(skill_caps_entry.class)); + insert_values.push_back(std::to_string(skill_caps_entry.level)); insert_values.push_back(std::to_string(skill_caps_entry.cap)); + insert_values.push_back(std::to_string(skill_caps_entry.class_)); auto results = content_db.QueryDatabase( fmt::format( @@ -212,7 +220,7 @@ public: ); if (results.Success()) { - skill_caps_entry.id = results.LastInsertedID(); + skill_caps_entry.skillID = results.LastInsertedID(); return skill_caps_entry; } @@ -230,7 +238,11 @@ public: for (auto &skill_caps_entry: skill_caps_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(skill_caps_entry.skillID)); + insert_values.push_back(std::to_string(skill_caps_entry.class)); + insert_values.push_back(std::to_string(skill_caps_entry.level)); insert_values.push_back(std::to_string(skill_caps_entry.cap)); + insert_values.push_back(std::to_string(skill_caps_entry.class_)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h index 423e9798d..35b729a21 100644 --- a/common/repositories/base/base_spawn2_repository.h +++ b/common/repositories/base/base_spawn2_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_spawn_condition_values_repository.h b/common/repositories/base/base_spawn_condition_values_repository.h index de279e9f7..3b00801bf 100644 --- a/common/repositories/base/base_spawn_condition_values_repository.h +++ b/common/repositories/base/base_spawn_condition_values_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("instance_id"); + return std::string("id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &spawn_condition_values : spawn_condition_valuess) { - if (spawn_condition_values.instance_id == spawn_condition_values_id) { + if (spawn_condition_values.id == spawn_condition_values_id) { return spawn_condition_values; } } @@ -176,7 +176,10 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(spawn_condition_values_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(spawn_condition_values_entry.value)); + update_values.push_back(columns[2] + " = '" + EscapeString(spawn_condition_values_entry.zone) + "'"); + update_values.push_back(columns[3] + " = " + std::to_string(spawn_condition_values_entry.instance_id)); auto results = database.QueryDatabase( fmt::format( @@ -184,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - spawn_condition_values_entry.instance_id + spawn_condition_values_entry.id ) ); @@ -197,7 +200,10 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(spawn_condition_values_entry.id)); insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + insert_values.push_back("'" + EscapeString(spawn_condition_values_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_condition_values_entry.instance_id)); auto results = database.QueryDatabase( fmt::format( @@ -226,7 +232,10 @@ public: for (auto &spawn_condition_values_entry: spawn_condition_values_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(spawn_condition_values_entry.id)); insert_values.push_back(std::to_string(spawn_condition_values_entry.value)); + insert_values.push_back("'" + EscapeString(spawn_condition_values_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_condition_values_entry.instance_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_spawn_conditions_repository.h b/common/repositories/base/base_spawn_conditions_repository.h index b6671182d..dabb1ff70 100644 --- a/common/repositories/base/base_spawn_conditions_repository.h +++ b/common/repositories/base/base_spawn_conditions_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("id"); + return std::string("zone"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &spawn_conditions : spawn_conditionss) { - if (spawn_conditions.id == spawn_conditions_id) { + if (spawn_conditions.zone == spawn_conditions_id) { return spawn_conditions; } } @@ -180,6 +180,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = '" + EscapeString(spawn_conditions_entry.zone) + "'"); + update_values.push_back(columns[1] + " = " + std::to_string(spawn_conditions_entry.id)); update_values.push_back(columns[2] + " = " + std::to_string(spawn_conditions_entry.value)); update_values.push_back(columns[3] + " = " + std::to_string(spawn_conditions_entry.onchange)); update_values.push_back(columns[4] + " = '" + EscapeString(spawn_conditions_entry.name) + "'"); @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - spawn_conditions_entry.id + spawn_conditions_entry.zone ) ); @@ -203,6 +205,8 @@ public: { std::vector insert_values; + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_conditions_entry.id)); insert_values.push_back(std::to_string(spawn_conditions_entry.value)); insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - spawn_conditions_entry.id = results.LastInsertedID(); + spawn_conditions_entry.zone = results.LastInsertedID(); return spawn_conditions_entry; } @@ -234,6 +238,8 @@ public: for (auto &spawn_conditions_entry: spawn_conditions_entries) { std::vector insert_values; + insert_values.push_back("'" + EscapeString(spawn_conditions_entry.zone) + "'"); + insert_values.push_back(std::to_string(spawn_conditions_entry.id)); insert_values.push_back(std::to_string(spawn_conditions_entry.value)); insert_values.push_back(std::to_string(spawn_conditions_entry.onchange)); insert_values.push_back("'" + EscapeString(spawn_conditions_entry.name) + "'"); diff --git a/common/repositories/base/base_spawn_events_repository.h b/common/repositories/base/base_spawn_events_repository.h index 4fa81b0fc..723a670d8 100644 --- a/common/repositories/base/base_spawn_events_repository.h +++ b/common/repositories/base/base_spawn_events_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_spawnentry_repository.h b/common/repositories/base/base_spawnentry_repository.h index 7733ddea0..9392dc45c 100644 --- a/common/repositories/base/base_spawnentry_repository.h +++ b/common/repositories/base/base_spawnentry_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("npcID"); + return std::string("spawngroupID"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &spawnentry : spawnentrys) { - if (spawnentry.npcID == spawnentry_id) { + if (spawnentry.spawngroupID == spawnentry_id) { return spawnentry; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(spawnentry_entry.spawngroupID)); + update_values.push_back(columns[1] + " = " + std::to_string(spawnentry_entry.npcID)); update_values.push_back(columns[2] + " = " + std::to_string(spawnentry_entry.chance)); update_values.push_back(columns[3] + " = " + std::to_string(spawnentry_entry.condition_value_filter)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - spawnentry_entry.npcID + spawnentry_entry.spawngroupID ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(spawnentry_entry.spawngroupID)); + insert_values.push_back(std::to_string(spawnentry_entry.npcID)); insert_values.push_back(std::to_string(spawnentry_entry.chance)); insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - spawnentry_entry.id = results.LastInsertedID(); + spawnentry_entry.spawngroupID = results.LastInsertedID(); return spawnentry_entry; } @@ -228,6 +232,8 @@ public: for (auto &spawnentry_entry: spawnentry_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(spawnentry_entry.spawngroupID)); + insert_values.push_back(std::to_string(spawnentry_entry.npcID)); insert_values.push_back(std::to_string(spawnentry_entry.chance)); insert_values.push_back(std::to_string(spawnentry_entry.condition_value_filter)); diff --git a/common/repositories/base/base_spawngroup_repository.h b/common/repositories/base/base_spawngroup_repository.h index 6f0897d1b..bc55f8dca 100644 --- a/common/repositories/base/base_spawngroup_repository.h +++ b/common/repositories/base/base_spawngroup_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_spell_buckets_repository.h b/common/repositories/base/base_spell_buckets_repository.h index 1c0e9505f..4481e5d74 100644 --- a/common/repositories/base/base_spell_buckets_repository.h +++ b/common/repositories/base/base_spell_buckets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -172,6 +172,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(spell_buckets_entry.spellid)); update_values.push_back(columns[1] + " = '" + EscapeString(spell_buckets_entry.key) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(spell_buckets_entry.value) + "'"); @@ -194,6 +195,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(spell_buckets_entry.spellid)); insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); @@ -206,7 +208,7 @@ public: ); if (results.Success()) { - spell_buckets_entry.id = results.LastInsertedID(); + spell_buckets_entry.spellid = results.LastInsertedID(); return spell_buckets_entry; } @@ -224,6 +226,7 @@ public: for (auto &spell_buckets_entry: spell_buckets_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(spell_buckets_entry.spellid)); insert_values.push_back("'" + EscapeString(spell_buckets_entry.key) + "'"); insert_values.push_back("'" + EscapeString(spell_buckets_entry.value) + "'"); diff --git a/common/repositories/base/base_spell_globals_repository.h b/common/repositories/base/base_spell_globals_repository.h index 8350ee3dc..e878cc5c4 100644 --- a/common/repositories/base/base_spell_globals_repository.h +++ b/common/repositories/base/base_spell_globals_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -176,6 +176,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(spell_globals_entry.spellid)); update_values.push_back(columns[1] + " = '" + EscapeString(spell_globals_entry.spell_name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(spell_globals_entry.qglobal) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(spell_globals_entry.value) + "'"); @@ -199,6 +200,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(spell_globals_entry.spellid)); insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); @@ -212,7 +214,7 @@ public: ); if (results.Success()) { - spell_globals_entry.id = results.LastInsertedID(); + spell_globals_entry.spellid = results.LastInsertedID(); return spell_globals_entry; } @@ -230,6 +232,7 @@ public: for (auto &spell_globals_entry: spell_globals_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(spell_globals_entry.spellid)); insert_values.push_back("'" + EscapeString(spell_globals_entry.spell_name) + "'"); insert_values.push_back("'" + EscapeString(spell_globals_entry.qglobal) + "'"); insert_values.push_back("'" + EscapeString(spell_globals_entry.value) + "'"); diff --git a/common/repositories/base/base_spells_new_repository.h b/common/repositories/base/base_spells_new_repository.h index 4fbdcea1f..2c48a3dbb 100644 --- a/common/repositories/base/base_spells_new_repository.h +++ b/common/repositories/base/base_spells_new_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -1108,6 +1108,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(spells_new_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(spells_new_entry.name) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(spells_new_entry.player_1) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(spells_new_entry.teleport_zone) + "'"); @@ -1364,6 +1365,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(spells_new_entry.id)); insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); @@ -1628,6 +1630,7 @@ public: for (auto &spells_new_entry: spells_new_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(spells_new_entry.id)); insert_values.push_back("'" + EscapeString(spells_new_entry.name) + "'"); insert_values.push_back("'" + EscapeString(spells_new_entry.player_1) + "'"); insert_values.push_back("'" + EscapeString(spells_new_entry.teleport_zone) + "'"); diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h index c0a8b3c6a..4643b458a 100644 --- a/common/repositories/base/base_start_zones_repository.h +++ b/common/repositories/base/base_start_zones_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -57,7 +57,7 @@ public: static std::string PrimaryKey() { - return std::string("player_race"); + return std::string("player_choice"); } static std::vector Columns() @@ -159,7 +159,7 @@ public: ) { for (auto &start_zones : start_zoness) { - if (start_zones.player_race == start_zones_id) { + if (start_zones.player_choice == start_zones_id) { return start_zones; } } @@ -238,6 +238,10 @@ public: update_values.push_back(columns[3] + " = " + std::to_string(start_zones_entry.heading)); update_values.push_back(columns[4] + " = " + std::to_string(start_zones_entry.zone_id)); update_values.push_back(columns[5] + " = " + std::to_string(start_zones_entry.bind_id)); + update_values.push_back(columns[6] + " = " + std::to_string(start_zones_entry.player_choice)); + update_values.push_back(columns[7] + " = " + std::to_string(start_zones_entry.player_class)); + update_values.push_back(columns[8] + " = " + std::to_string(start_zones_entry.player_deity)); + update_values.push_back(columns[9] + " = " + std::to_string(start_zones_entry.player_race)); update_values.push_back(columns[10] + " = " + std::to_string(start_zones_entry.start_zone)); update_values.push_back(columns[11] + " = " + std::to_string(start_zones_entry.bind_x)); update_values.push_back(columns[12] + " = " + std::to_string(start_zones_entry.bind_y)); @@ -253,7 +257,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - start_zones_entry.player_race + start_zones_entry.player_choice ) ); @@ -272,6 +276,10 @@ public: insert_values.push_back(std::to_string(start_zones_entry.heading)); insert_values.push_back(std::to_string(start_zones_entry.zone_id)); insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.player_choice)); + insert_values.push_back(std::to_string(start_zones_entry.player_class)); + insert_values.push_back(std::to_string(start_zones_entry.player_deity)); + insert_values.push_back(std::to_string(start_zones_entry.player_race)); insert_values.push_back(std::to_string(start_zones_entry.start_zone)); insert_values.push_back(std::to_string(start_zones_entry.bind_x)); insert_values.push_back(std::to_string(start_zones_entry.bind_y)); @@ -290,7 +298,7 @@ public: ); if (results.Success()) { - start_zones_entry.id = results.LastInsertedID(); + start_zones_entry.player_choice = results.LastInsertedID(); return start_zones_entry; } @@ -314,6 +322,10 @@ public: insert_values.push_back(std::to_string(start_zones_entry.heading)); insert_values.push_back(std::to_string(start_zones_entry.zone_id)); insert_values.push_back(std::to_string(start_zones_entry.bind_id)); + insert_values.push_back(std::to_string(start_zones_entry.player_choice)); + insert_values.push_back(std::to_string(start_zones_entry.player_class)); + insert_values.push_back(std::to_string(start_zones_entry.player_deity)); + insert_values.push_back(std::to_string(start_zones_entry.player_race)); insert_values.push_back(std::to_string(start_zones_entry.start_zone)); insert_values.push_back(std::to_string(start_zones_entry.bind_x)); insert_values.push_back(std::to_string(start_zones_entry.bind_y)); diff --git a/common/repositories/base/base_starting_items_repository.h b/common/repositories/base/base_starting_items_repository.h index 64bdd124a..e8c45158e 100644 --- a/common/repositories/base/base_starting_items_repository.h +++ b/common/repositories/base/base_starting_items_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -51,7 +51,7 @@ public: static std::string PrimaryKey() { - return std::string("race"); + return std::string("id"); } static std::vector Columns() @@ -141,7 +141,7 @@ public: ) { for (auto &starting_items : starting_itemss) { - if (starting_items.race == starting_items_id) { + if (starting_items.id == starting_items_id) { return starting_items; } } @@ -208,6 +208,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[1] + " = " + std::to_string(starting_items_entry.race)); update_values.push_back(columns[2] + " = " + std::to_string(starting_items_entry.class)); update_values.push_back(columns[3] + " = " + std::to_string(starting_items_entry.deityid)); update_values.push_back(columns[4] + " = " + std::to_string(starting_items_entry.zoneid)); @@ -225,7 +226,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - starting_items_entry.race + starting_items_entry.id ) ); @@ -238,6 +239,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(starting_items_entry.race)); insert_values.push_back(std::to_string(starting_items_entry.class)); insert_values.push_back(std::to_string(starting_items_entry.deityid)); insert_values.push_back(std::to_string(starting_items_entry.zoneid)); @@ -276,6 +278,7 @@ public: for (auto &starting_items_entry: starting_items_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(starting_items_entry.race)); insert_values.push_back(std::to_string(starting_items_entry.class)); insert_values.push_back(std::to_string(starting_items_entry.deityid)); insert_values.push_back(std::to_string(starting_items_entry.zoneid)); diff --git a/common/repositories/base/base_task_activities_repository.h b/common/repositories/base/base_task_activities_repository.h index 2182bf508..86668b17a 100644 --- a/common/repositories/base/base_task_activities_repository.h +++ b/common/repositories/base/base_task_activities_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -54,7 +54,7 @@ public: static std::string PrimaryKey() { - return std::string("activityid"); + return std::string("taskid"); } static std::vector Columns() @@ -150,7 +150,7 @@ public: ) { for (auto &task_activities : task_activitiess) { - if (task_activities.activityid == task_activities_id) { + if (task_activities.taskid == task_activities_id) { return task_activities; } } @@ -220,6 +220,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(task_activities_entry.taskid)); + update_values.push_back(columns[1] + " = " + std::to_string(task_activities_entry.activityid)); update_values.push_back(columns[2] + " = " + std::to_string(task_activities_entry.step)); update_values.push_back(columns[3] + " = " + std::to_string(task_activities_entry.activitytype)); update_values.push_back(columns[4] + " = '" + EscapeString(task_activities_entry.target_name) + "'"); @@ -240,7 +242,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - task_activities_entry.activityid + task_activities_entry.taskid ) ); @@ -253,6 +255,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(task_activities_entry.taskid)); + insert_values.push_back(std::to_string(task_activities_entry.activityid)); insert_values.push_back(std::to_string(task_activities_entry.step)); insert_values.push_back(std::to_string(task_activities_entry.activitytype)); insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); @@ -276,7 +280,7 @@ public: ); if (results.Success()) { - task_activities_entry.id = results.LastInsertedID(); + task_activities_entry.taskid = results.LastInsertedID(); return task_activities_entry; } @@ -294,6 +298,8 @@ public: for (auto &task_activities_entry: task_activities_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(task_activities_entry.taskid)); + insert_values.push_back(std::to_string(task_activities_entry.activityid)); insert_values.push_back(std::to_string(task_activities_entry.step)); insert_values.push_back(std::to_string(task_activities_entry.activitytype)); insert_values.push_back("'" + EscapeString(task_activities_entry.target_name) + "'"); diff --git a/common/repositories/base/base_tasks_repository.h b/common/repositories/base/base_tasks_repository.h index 042141d8e..08d887073 100644 --- a/common/repositories/base/base_tasks_repository.h +++ b/common/repositories/base/base_tasks_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -224,6 +224,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(tasks_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(tasks_entry.type)); update_values.push_back(columns[2] + " = " + std::to_string(tasks_entry.duration)); update_values.push_back(columns[3] + " = " + std::to_string(tasks_entry.duration_code)); @@ -259,6 +260,7 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(tasks_entry.id)); insert_values.push_back(std::to_string(tasks_entry.type)); insert_values.push_back(std::to_string(tasks_entry.duration)); insert_values.push_back(std::to_string(tasks_entry.duration_code)); @@ -302,6 +304,7 @@ public: for (auto &tasks_entry: tasks_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(tasks_entry.id)); insert_values.push_back(std::to_string(tasks_entry.type)); insert_values.push_back(std::to_string(tasks_entry.duration)); insert_values.push_back(std::to_string(tasks_entry.duration_code)); diff --git a/common/repositories/base/base_tasksets_repository.h b/common/repositories/base/base_tasksets_repository.h index 84b50f78f..cf4444e31 100644 --- a/common/repositories/base/base_tasksets_repository.h +++ b/common/repositories/base/base_tasksets_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -41,7 +41,7 @@ public: static std::string PrimaryKey() { - return std::string("taskid"); + return std::string("id"); } static std::vector Columns() @@ -111,7 +111,7 @@ public: ) { for (auto &tasksets : tasksetss) { - if (tasksets.taskid == tasksets_id) { + if (tasksets.id == tasksets_id) { return tasksets; } } @@ -168,7 +168,8 @@ public: auto columns = Columns(); - + update_values.push_back(columns[0] + " = " + std::to_string(tasksets_entry.id)); + update_values.push_back(columns[1] + " = " + std::to_string(tasksets_entry.taskid)); auto results = content_db.QueryDatabase( fmt::format( @@ -176,7 +177,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - tasksets_entry.taskid + tasksets_entry.id ) ); @@ -189,7 +190,8 @@ public: { std::vector insert_values; - + insert_values.push_back(std::to_string(tasksets_entry.id)); + insert_values.push_back(std::to_string(tasksets_entry.taskid)); auto results = content_db.QueryDatabase( fmt::format( @@ -218,7 +220,8 @@ public: for (auto &tasksets_entry: tasksets_entries) { std::vector insert_values; - + insert_values.push_back(std::to_string(tasksets_entry.id)); + insert_values.push_back(std::to_string(tasksets_entry.taskid)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_timers_repository.h b/common/repositories/base/base_timers_repository.h index 620a90d7a..e1e60cadb 100644 --- a/common/repositories/base/base_timers_repository.h +++ b/common/repositories/base/base_timers_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("type"); + return std::string("char_id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &timers : timerss) { - if (timers.type == timers_id) { + if (timers.char_id == timers_id) { return timers; } } @@ -180,6 +180,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(timers_entry.char_id)); + update_values.push_back(columns[1] + " = " + std::to_string(timers_entry.type)); update_values.push_back(columns[2] + " = " + std::to_string(timers_entry.start)); update_values.push_back(columns[3] + " = " + std::to_string(timers_entry.duration)); update_values.push_back(columns[4] + " = " + std::to_string(timers_entry.enable)); @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - timers_entry.type + timers_entry.char_id ) ); @@ -203,6 +205,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(timers_entry.char_id)); + insert_values.push_back(std::to_string(timers_entry.type)); insert_values.push_back(std::to_string(timers_entry.start)); insert_values.push_back(std::to_string(timers_entry.duration)); insert_values.push_back(std::to_string(timers_entry.enable)); @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - timers_entry.id = results.LastInsertedID(); + timers_entry.char_id = results.LastInsertedID(); return timers_entry; } @@ -234,6 +238,8 @@ public: for (auto &timers_entry: timers_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(timers_entry.char_id)); + insert_values.push_back(std::to_string(timers_entry.type)); insert_values.push_back(std::to_string(timers_entry.start)); insert_values.push_back(std::to_string(timers_entry.duration)); insert_values.push_back(std::to_string(timers_entry.enable)); diff --git a/common/repositories/base/base_titles_repository.h b/common/repositories/base/base_titles_repository.h index f0ad144f7..dbe3e282f 100644 --- a/common/repositories/base/base_titles_repository.h +++ b/common/repositories/base/base_titles_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_trader_repository.h b/common/repositories/base/base_trader_repository.h index 49f9da6e0..acfc75194 100644 --- a/common/repositories/base/base_trader_repository.h +++ b/common/repositories/base/base_trader_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -45,7 +45,7 @@ public: static std::string PrimaryKey() { - return std::string("slot_id"); + return std::string("char_id"); } static std::vector Columns() @@ -123,7 +123,7 @@ public: ) { for (auto &trader : traders) { - if (trader.slot_id == trader_id) { + if (trader.char_id == trader_id) { return trader; } } @@ -184,10 +184,12 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(trader_entry.char_id)); update_values.push_back(columns[1] + " = " + std::to_string(trader_entry.item_id)); update_values.push_back(columns[2] + " = " + std::to_string(trader_entry.serialnumber)); update_values.push_back(columns[3] + " = " + std::to_string(trader_entry.charges)); update_values.push_back(columns[4] + " = " + std::to_string(trader_entry.item_cost)); + update_values.push_back(columns[5] + " = " + std::to_string(trader_entry.slot_id)); auto results = database.QueryDatabase( fmt::format( @@ -195,7 +197,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - trader_entry.slot_id + trader_entry.char_id ) ); @@ -208,10 +210,12 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(trader_entry.char_id)); insert_values.push_back(std::to_string(trader_entry.item_id)); insert_values.push_back(std::to_string(trader_entry.serialnumber)); insert_values.push_back(std::to_string(trader_entry.charges)); insert_values.push_back(std::to_string(trader_entry.item_cost)); + insert_values.push_back(std::to_string(trader_entry.slot_id)); auto results = database.QueryDatabase( fmt::format( @@ -222,7 +226,7 @@ public: ); if (results.Success()) { - trader_entry.id = results.LastInsertedID(); + trader_entry.char_id = results.LastInsertedID(); return trader_entry; } @@ -240,10 +244,12 @@ public: for (auto &trader_entry: trader_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(trader_entry.char_id)); insert_values.push_back(std::to_string(trader_entry.item_id)); insert_values.push_back(std::to_string(trader_entry.serialnumber)); insert_values.push_back(std::to_string(trader_entry.charges)); insert_values.push_back(std::to_string(trader_entry.item_cost)); + insert_values.push_back(std::to_string(trader_entry.slot_id)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_tradeskill_recipe_entries_repository.h b/common/repositories/base/base_tradeskill_recipe_entries_repository.h index 23b2afbc2..c089e7e28 100644 --- a/common/repositories/base/base_tradeskill_recipe_entries_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_entries_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_tradeskill_recipe_repository.h b/common/repositories/base/base_tradeskill_recipe_repository.h index 58ca82916..7b768ad6a 100644 --- a/common/repositories/base/base_tradeskill_recipe_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h index 679083ba8..97817b671 100644 --- a/common/repositories/base/base_traps_repository.h +++ b/common/repositories/base/base_traps_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_tribute_levels_repository.h b/common/repositories/base/base_tribute_levels_repository.h index a821b9055..e430c8798 100644 --- a/common/repositories/base/base_tribute_levels_repository.h +++ b/common/repositories/base/base_tribute_levels_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -43,7 +43,7 @@ public: static std::string PrimaryKey() { - return std::string("level"); + return std::string("tribute_id"); } static std::vector Columns() @@ -117,7 +117,7 @@ public: ) { for (auto &tribute_levels : tribute_levelss) { - if (tribute_levels.level == tribute_levels_id) { + if (tribute_levels.tribute_id == tribute_levels_id) { return tribute_levels; } } @@ -176,6 +176,8 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(tribute_levels_entry.tribute_id)); + update_values.push_back(columns[1] + " = " + std::to_string(tribute_levels_entry.level)); update_values.push_back(columns[2] + " = " + std::to_string(tribute_levels_entry.cost)); update_values.push_back(columns[3] + " = " + std::to_string(tribute_levels_entry.item_id)); @@ -185,7 +187,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - tribute_levels_entry.level + tribute_levels_entry.tribute_id ) ); @@ -198,6 +200,8 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(tribute_levels_entry.tribute_id)); + insert_values.push_back(std::to_string(tribute_levels_entry.level)); insert_values.push_back(std::to_string(tribute_levels_entry.cost)); insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); @@ -210,7 +214,7 @@ public: ); if (results.Success()) { - tribute_levels_entry.id = results.LastInsertedID(); + tribute_levels_entry.tribute_id = results.LastInsertedID(); return tribute_levels_entry; } @@ -228,6 +232,8 @@ public: for (auto &tribute_levels_entry: tribute_levels_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(tribute_levels_entry.tribute_id)); + insert_values.push_back(std::to_string(tribute_levels_entry.level)); insert_values.push_back(std::to_string(tribute_levels_entry.cost)); insert_values.push_back(std::to_string(tribute_levels_entry.item_id)); diff --git a/common/repositories/base/base_tributes_repository.h b/common/repositories/base/base_tributes_repository.h index fe8ac3ed4..69e2c6c9c 100644 --- a/common/repositories/base/base_tributes_repository.h +++ b/common/repositories/base/base_tributes_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("isguild"); + return std::string("id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &tributes : tributess) { - if (tributes.isguild == tributes_id) { + if (tributes.id == tributes_id) { return tributes; } } @@ -180,9 +180,11 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(tributes_entry.id)); update_values.push_back(columns[1] + " = " + std::to_string(tributes_entry.unknown)); update_values.push_back(columns[2] + " = '" + EscapeString(tributes_entry.name) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(tributes_entry.descr) + "'"); + update_values.push_back(columns[4] + " = " + std::to_string(tributes_entry.isguild)); auto results = content_db.QueryDatabase( fmt::format( @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - tributes_entry.isguild + tributes_entry.id ) ); @@ -203,9 +205,11 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(tributes_entry.id)); insert_values.push_back(std::to_string(tributes_entry.unknown)); insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + insert_values.push_back(std::to_string(tributes_entry.isguild)); auto results = content_db.QueryDatabase( fmt::format( @@ -234,9 +238,11 @@ public: for (auto &tributes_entry: tributes_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(tributes_entry.id)); insert_values.push_back(std::to_string(tributes_entry.unknown)); insert_values.push_back("'" + EscapeString(tributes_entry.name) + "'"); insert_values.push_back("'" + EscapeString(tributes_entry.descr) + "'"); + insert_values.push_back(std::to_string(tributes_entry.isguild)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_variables_repository.h b/common/repositories/base/base_variables_repository.h index a7635a3ae..8c18ded15 100644 --- a/common/repositories/base/base_variables_repository.h +++ b/common/repositories/base/base_variables_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -176,6 +176,7 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = '" + EscapeString(variables_entry.varname) + "'"); update_values.push_back(columns[1] + " = '" + EscapeString(variables_entry.value) + "'"); update_values.push_back(columns[2] + " = '" + EscapeString(variables_entry.information) + "'"); update_values.push_back(columns[3] + " = '" + EscapeString(variables_entry.ts) + "'"); @@ -199,6 +200,7 @@ public: { std::vector insert_values; + insert_values.push_back("'" + EscapeString(variables_entry.varname) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); @@ -212,7 +214,7 @@ public: ); if (results.Success()) { - variables_entry.id = results.LastInsertedID(); + variables_entry.varname = results.LastInsertedID(); return variables_entry; } @@ -230,6 +232,7 @@ public: for (auto &variables_entry: variables_entries) { std::vector insert_values; + insert_values.push_back("'" + EscapeString(variables_entry.varname) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.value) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.information) + "'"); insert_values.push_back("'" + EscapeString(variables_entry.ts) + "'"); diff --git a/common/repositories/base/base_veteran_reward_templates_repository.h b/common/repositories/base/base_veteran_reward_templates_repository.h index 6ad7e1093..1c81f7e06 100644 --- a/common/repositories/base/base_veteran_reward_templates_repository.h +++ b/common/repositories/base/base_veteran_reward_templates_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("reward_slot"); + return std::string("claim_id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &veteran_reward_templates : veteran_reward_templatess) { - if (veteran_reward_templates.reward_slot == veteran_reward_templates_id) { + if (veteran_reward_templates.claim_id == veteran_reward_templates_id) { return veteran_reward_templates; } } @@ -180,9 +180,11 @@ public: auto columns = Columns(); + update_values.push_back(columns[0] + " = " + std::to_string(veteran_reward_templates_entry.claim_id)); update_values.push_back(columns[1] + " = '" + EscapeString(veteran_reward_templates_entry.name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(veteran_reward_templates_entry.item_id)); update_values.push_back(columns[3] + " = " + std::to_string(veteran_reward_templates_entry.charges)); + update_values.push_back(columns[4] + " = " + std::to_string(veteran_reward_templates_entry.reward_slot)); auto results = content_db.QueryDatabase( fmt::format( @@ -190,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - veteran_reward_templates_entry.reward_slot + veteran_reward_templates_entry.claim_id ) ); @@ -203,9 +205,11 @@ public: { std::vector insert_values; + insert_values.push_back(std::to_string(veteran_reward_templates_entry.claim_id)); insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.reward_slot)); auto results = content_db.QueryDatabase( fmt::format( @@ -216,7 +220,7 @@ public: ); if (results.Success()) { - veteran_reward_templates_entry.id = results.LastInsertedID(); + veteran_reward_templates_entry.claim_id = results.LastInsertedID(); return veteran_reward_templates_entry; } @@ -234,9 +238,11 @@ public: for (auto &veteran_reward_templates_entry: veteran_reward_templates_entries) { std::vector insert_values; + insert_values.push_back(std::to_string(veteran_reward_templates_entry.claim_id)); insert_values.push_back("'" + EscapeString(veteran_reward_templates_entry.name) + "'"); insert_values.push_back(std::to_string(veteran_reward_templates_entry.item_id)); insert_values.push_back(std::to_string(veteran_reward_templates_entry.charges)); + insert_values.push_back(std::to_string(veteran_reward_templates_entry.reward_slot)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index fbe7c211d..fb2f06b51 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 172c172c2..71ffeaade 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on Apr 5, 2020 and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ diff --git a/common/repositories/books_repository.h b/common/repositories/books_repository.h deleted file mode 100644 index a1e6aab98..000000000 --- a/common/repositories/books_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_BOOKS_REPOSITORY_H -#define EQEMU_BOOKS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_books_repository.h" - -class BooksRepository: public BaseBooksRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * BooksRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * BooksRepository::GetWhereNeverExpires() - * BooksRepository::GetWhereXAndY() - * BooksRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_BOOKS_REPOSITORY_H diff --git a/common/repositories/character_tribute_repository.h b/common/repositories/character_tribute_repository.h deleted file mode 100644 index 30edd2bfb..000000000 --- a/common/repositories/character_tribute_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H -#define EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_character_tribute_repository.h" - -class CharacterTributeRepository: public BaseCharacterTributeRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * CharacterTributeRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * CharacterTributeRepository::GetWhereNeverExpires() - * CharacterTributeRepository::GetWhereXAndY() - * CharacterTributeRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_CHARACTER_TRIBUTE_REPOSITORY_H diff --git a/common/repositories/chatchannels_repository.h b/common/repositories/chatchannels_repository.h deleted file mode 100644 index 3fef234f6..000000000 --- a/common/repositories/chatchannels_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_CHATCHANNELS_REPOSITORY_H -#define EQEMU_CHATCHANNELS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_chatchannels_repository.h" - -class ChatchannelsRepository: public BaseChatchannelsRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * ChatchannelsRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * ChatchannelsRepository::GetWhereNeverExpires() - * ChatchannelsRepository::GetWhereXAndY() - * ChatchannelsRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_CHATCHANNELS_REPOSITORY_H diff --git a/common/repositories/command_settings_repository.h b/common/repositories/command_settings_repository.h deleted file mode 100644 index 34021b399..000000000 --- a/common/repositories/command_settings_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_COMMAND_SETTINGS_REPOSITORY_H -#define EQEMU_COMMAND_SETTINGS_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_command_settings_repository.h" - -class CommandSettingsRepository: public BaseCommandSettingsRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * CommandSettingsRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * CommandSettingsRepository::GetWhereNeverExpires() - * CommandSettingsRepository::GetWhereXAndY() - * CommandSettingsRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_COMMAND_SETTINGS_REPOSITORY_H diff --git a/common/repositories/launcher_repository.h b/common/repositories/launcher_repository.h deleted file mode 100644 index 413167faf..000000000 --- a/common/repositories/launcher_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_LAUNCHER_REPOSITORY_H -#define EQEMU_LAUNCHER_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_launcher_repository.h" - -class LauncherRepository: public BaseLauncherRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * LauncherRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * LauncherRepository::GetWhereNeverExpires() - * LauncherRepository::GetWhereXAndY() - * LauncherRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_LAUNCHER_REPOSITORY_H diff --git a/common/repositories/launcher_zones_repository.h b/common/repositories/launcher_zones_repository.h deleted file mode 100644 index ed0facae4..000000000 --- a/common/repositories/launcher_zones_repository.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * EQEmulator: Everquest Server Emulator - * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY except by those people which sell it, which - * are required to give you total support for your newly bought product; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR - * A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef EQEMU_LAUNCHER_ZONES_REPOSITORY_H -#define EQEMU_LAUNCHER_ZONES_REPOSITORY_H - -#include "../database.h" -#include "../string_util.h" -#include "base/base_launcher_zones_repository.h" - -class LauncherZonesRepository: public BaseLauncherZonesRepository { -public: - - /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon - * - * Base repository methods are automatically - * generated in the "base" version of this repository. The base repository - * is immutable and to be left untouched, while methods in this class - * are used as extension methods for more specific persistence-layer - * accessors or mutators - * - * Base Methods (Subject to be expanded upon in time) - * - * InsertOne - * UpdateOne - * DeleteOne - * FindOne - * GetWhere(std::string where_filter) - * DeleteWhere(std::string where_filter) - * InsertMany - * All - * - * Example custom methods in a repository - * - * LauncherZonesRepository::GetByZoneAndVersion(int zone_id, int zone_version) - * LauncherZonesRepository::GetWhereNeverExpires() - * LauncherZonesRepository::GetWhereXAndY() - * LauncherZonesRepository::DeleteWhereXAndY() - * - * Most of the above could be covered by base methods, but if you as a developer - * find yourself re-using logic for other parts of the code, its best to just make a - * method that can be re-used easily elsewhere especially if it can use a base repository - * method and encapsulate filters there - */ - - // Custom extended repository methods here - -}; - -#endif //EQEMU_LAUNCHER_ZONES_REPOSITORY_H diff --git a/common/repositories/template/base_repository.template b/common/repositories/template/base_repository.template index 67b0322a0..8226d55e5 100644 --- a/common/repositories/template/base_repository.template +++ b/common/repositories/template/base_repository.template @@ -20,8 +20,8 @@ */ /** - * This repository was automatically generated on {{GENERATED_DATE}} and is NOT - * to be modified directly. Any repository modifications are meant to be made to + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to * the repository extending the base. Any modifications to base repositories are to * be made by the generator only */ @@ -195,7 +195,7 @@ public: ); if (results.Success()) { - {{TABLE_NAME_VAR}}_entry.id = results.LastInsertedID(); + {{TABLE_NAME_VAR}}_entry.{{PRIMARY_KEY_STRING}} = results.LastInsertedID(); return {{TABLE_NAME_VAR}}_entry; } diff --git a/common/repositories/template/repository.template b/common/repositories/template/repository.template index 3d49157bd..00d5b6db3 100644 --- a/common/repositories/template/repository.template +++ b/common/repositories/template/repository.template @@ -29,16 +29,18 @@ class {{TABLE_NAME_CLASS}}Repository: public Base{{TABLE_NAME_CLASS}}Repository public: /** - * This file was auto generated on {{GENERATED_DATE}} and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 060b6b010..710e91ae4 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -79,7 +79,7 @@ my $pass = $config->{"server"}{"database"}{"password"}; my $dsn = "dbi:mysql:$database_name:$host:3306"; my $connect = DBI->connect($dsn, $user, $pass); -my @tables = ($requested_table_to_generate); +my @tables = (); if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { my $table_names_exec = $connect->prepare( " @@ -120,7 +120,7 @@ foreach my $table_to_generate (@tables) { my @table_ignore_list = ( "character_enabledtasks", # "grid", # Manually created - "grid_entries", # Manually created + "grid_entries", # Manually created # "tradeskill_recipe", # Manually created # "character_recipe_list", # Manually created "guild_bank", @@ -160,7 +160,8 @@ foreach my $table_to_generate (@tables) { COLUMN_TYPE, ORDINAL_POSITION, COLUMN_KEY, - COLUMN_DEFAULT + COLUMN_DEFAULT, + EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE @@ -203,8 +204,6 @@ foreach my $table_to_generate (@tables) { my %table_primary_key = (); $ex->execute($database_name, $table_to_generate); - $table_primary_key{$table_to_generate} = "id"; - while (my @row = $ex->fetchrow_array()) { my $column_name = $row[0]; my $table_name = $row[1]; @@ -213,9 +212,12 @@ foreach my $table_to_generate (@tables) { my $ordinal_position = $row[4]; my $column_key = $row[5]; my $column_default = ($row[6] ? $row[6] : ""); + my $extra = ($row[7] ? $row[7] : ""); - if ($column_key eq "PRI" || ($ordinal_position == 0 && $column_name =~ /id/i)) { - $table_primary_key{$table_name} = $column_name; + if (!$table_primary_key{$table_name}) { + if (($column_key eq "PRI" && $data_type =~/int/) || ($ordinal_position == 0 && $column_name =~ /id/i)) { + $table_primary_key{$table_name} = $column_name; + } } my $default_value = 0; @@ -242,7 +244,7 @@ foreach my $table_to_generate (@tables) { $column_names_quoted .= sprintf("\t\t\t\"%s\",\n", $column_name); # update one - if ($column_key ne "PRI") { + if ($extra ne "auto_increment") { my $query_value = sprintf('\'" + EscapeString(%s_entry.%s) + "\'");', $table_name, $column_name); if ($data_type =~ /int|float|double|decimal/) { $query_value = sprintf('" + std::to_string(%s_entry.%s));', $table_name, $column_name); @@ -256,7 +258,7 @@ foreach my $table_to_generate (@tables) { } # insert one - if ($column_key ne "PRI") { + if ($extra ne "auto_increment") { my $value = sprintf("\"'\" + EscapeString(%s_entry.%s) + \"'\"", $table_name, $column_name); if ($data_type =~ /int|float|double|decimal/) { $value = sprintf('std::to_string(%s_entry.%s)', $table_name, $column_name); @@ -285,6 +287,12 @@ foreach my $table_to_generate (@tables) { # print "table_name [$table_name] column_name [$column_name] data_type [$data_type] column_type [$column_type]\n"; $index++; + + } + + if (!$table_primary_key{$table_to_generate}) { + print "Table primary key [$table_to_generate] has no primary key! Skipping... \n"; + next; } ############################################# @@ -303,7 +311,7 @@ foreach my $table_to_generate (@tables) { } if (trim($base_repository_template) eq "") { - print "Base repository template not found! [$repository_template_file]\n"; + print "Base repository template not found! [$base_repository_template_file]\n"; exit; } From 77cacf5cd14d373d5750692f6f3eb37e9c4a32bd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 03:11:09 -0500 Subject: [PATCH 100/272] Add std::string WorldContentService::GetCurrentExpansionName() [skip ci] --- common/content/world_content_service.cpp | 15 ++++++++++- common/content/world_content_service.h | 3 +++ common/ruletypes.h | 2 +- zone/main.cpp | 2 +- zone/zoning.cpp | 34 +++++++++++++----------- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp index e636d8854..6ff504ebd 100644 --- a/common/content/world_content_service.cpp +++ b/common/content/world_content_service.cpp @@ -22,7 +22,7 @@ WorldContentService::WorldContentService() { - SetCurrentExpansion(0); + SetCurrentExpansion(Expansion::EXPANSION_ALL); } int WorldContentService::GetCurrentExpansion() const @@ -44,3 +44,16 @@ void WorldContentService::SetContentFlags(std::vector content_flags { WorldContentService::content_flags = content_flags; } + +std::string WorldContentService::GetCurrentExpansionName() +{ + if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) { + return "All Expansions"; + } + + if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) { + return Expansion::ExpansionName[content_service.GetCurrentExpansion()]; + } + + return "Unknown Expansion"; +} diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 9faa6847e..a1b6438cd 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -25,6 +25,8 @@ #include namespace Expansion { + static const int EXPANSION_ALL = -1; + enum ExpansionNumber { Classic = 0, TheRuinsOfKunark, @@ -95,6 +97,7 @@ public: WorldContentService(); + std::string GetCurrentExpansionName(); int GetCurrentExpansion() const; void SetCurrentExpansion(int current_expansion); diff --git a/common/ruletypes.h b/common/ruletypes.h index 281fc35fb..f3650d156 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -776,7 +776,7 @@ RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is tr RULE_CATEGORY_END() RULE_CATEGORY(Expansion) -RULE_INT(Expansion, CurrentExpansion, 0, "The current expansion enabled for the server [0 = Classic, 1 = Kunark etc.]") +RULE_INT(Expansion, CurrentExpansion, -1, "The current expansion enabled for the server [-1 = ALL, 0 = Classic, 1 = Kunark etc.]") RULE_CATEGORY_END() #undef RULE_CATEGORY diff --git a/zone/main.cpp b/zone/main.cpp index 53c3b52d1..ad520bf35 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -403,7 +403,7 @@ int main(int argc, char** argv) { LogInfo( "Current expansion is [{}] ({})", content_service.GetCurrentExpansion(), - Expansion::ExpansionName[content_service.GetCurrentExpansion()] + content_service.GetCurrentExpansionName() ); #ifdef BOTS diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 36a2ee5a2..ac453fefc 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -290,24 +290,26 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { /** * Expansion check */ - auto zones = ZoneRepository::GetWhere( - fmt::format( - "expansion <= {} AND short_name = '{}'", + if (content_service.GetCurrentExpansion() >= Expansion::Classic && !GetGM()) { + auto zones = ZoneRepository::GetWhere( + fmt::format( + "expansion <= {} AND short_name = '{}'", + (content_service.GetCurrentExpansion() + 1), + target_zone_name + ) + ); + + LogInfo( + "Checking zone request [{}] for expansion [{}] ({}) success [{}]", + target_zone_name, (content_service.GetCurrentExpansion() + 1), - target_zone_name - ) - ); + content_service.GetCurrentExpansionName(), + !zones.empty() ? "true" : "false" + ); - LogInfo( - "Checking zone request [{}] for expansion [{}] ({}) success [{}]", - target_zone_name, - (content_service.GetCurrentExpansion() + 1), - Expansion::ExpansionName[content_service.GetCurrentExpansion()], - !zones.empty() ? "true" : "false" - ); - - if (zones.empty()) { - myerror = ZONE_ERROR_NOEXPANSION; + if (zones.empty()) { + myerror = ZONE_ERROR_NOEXPANSION; + } } if(myerror == 1) { From 287fc5d31382714b2d27a1555730e7348d4d6515 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 03:13:03 -0500 Subject: [PATCH 101/272] Create 2020_04_11_expansions_content_filters.sql --- .../2020_04_11_expansions_content_filters.sql | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 utils/sql/git/required/2020_04_11_expansions_content_filters.sql diff --git a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql new file mode 100644 index 000000000..d26dbe793 --- /dev/null +++ b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql @@ -0,0 +1,82 @@ +-- zone +ALTER TABLE `zone` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone` ADD `content_flags` varchar(100) NULL; + +-- doors +ALTER TABLE `doors` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `doors` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `doors` ADD `content_flags` varchar(100) NULL; + +-- object +ALTER TABLE `object` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `object` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `object` ADD `content_flags` varchar(100) NULL; + +-- spawn2 +ALTER TABLE `spawn2` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `spawn2` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `spawn2` ADD `content_flags` varchar(100) NULL; + +-- tradeskill_recipe +ALTER TABLE `tradeskill_recipe` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `tradeskill_recipe` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `tradeskill_recipe` ADD `content_flags` varchar(100) NULL; + +-- merchantlist +ALTER TABLE `merchantlist` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `merchantlist` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `merchantlist` ADD `content_flags` varchar(100) NULL; + +-- global_loot +ALTER TABLE `global_loot` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `global_loot` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `global_loot` ADD `content_flags` varchar(100) NULL; + +-- fishing +ALTER TABLE `fishing` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `fishing` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `fishing` ADD `content_flags` varchar(100) NULL; + +-- forage +ALTER TABLE `forage` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `forage` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `forage` ADD `content_flags` varchar(100) NULL; + +-- ground_spawns +ALTER TABLE `ground_spawns` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `ground_spawns` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `ground_spawns` ADD `content_flags` varchar(100) NULL; + +-- loottable +ALTER TABLE `loottable` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `loottable` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `loottable` ADD `content_flags` varchar(100) NULL; + +-- lootdrop +ALTER TABLE `lootdrop` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `lootdrop` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `lootdrop` ADD `content_flags` varchar(100) NULL; + +-- starting_items +ALTER TABLE `starting_items` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `starting_items` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `starting_items` ADD `content_flags` varchar(100) NULL; + +-- start_zones +ALTER TABLE `start_zones` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `start_zones` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `start_zones` ADD `content_flags` varchar(100) NULL; + +-- traps +ALTER TABLE `traps` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `traps` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `traps` ADD `content_flags` varchar(100) NULL; + +-- zone_points +ALTER TABLE `zone_points` ADD `min_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone_points` ADD `max_expansion` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `zone_points` ADD `content_flags` varchar(100) NULL; + +-- pok books +update doors set min_expansion = 4 where name like '%POKTELE%'; From 47b8aa3f18d42782c315055517ecfc6918aaa825 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 04:38:42 -0500 Subject: [PATCH 102/272] Export quest calls --- zone/embparser_api.cpp | 717 ++++++++++++++++++++++++++++++++++++++++- zone/lua_general.cpp | 281 +++++++++++++++- 2 files changed, 992 insertions(+), 6 deletions(-) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index b95e80ae7..6d6f2e0cf 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -17,6 +17,7 @@ */ #include "../common/features.h" +#include "../common/content/world_content_service.h" #ifdef EMBPERL #ifdef EMBPERL_XS @@ -2875,7 +2876,7 @@ XS(XS__countitem) { } XS(XS__getitemname); -XS(XS__getitemname) { +XS(XS__getitemname) { dXSARGS; if (items != 1) Perl_croak(aTHX_ "Usage: quest::getitemname(uint32 item_id)"); @@ -3178,7 +3179,7 @@ XS(XS__CheckInstanceByCharID) { if (items != 2) { Perl_croak(aTHX_ "Usage: quest::CheckInstanceByCharID(uint16 instance_id, uint32 char_id)"); } - + bool RETVAL; dXSTARG; @@ -3884,7 +3885,7 @@ XS(XS__log) { else { uint8 log_category = (uint8)SvIV(ST(0)); std::string log_message = (std::string) SvPV_nolen(ST(1)); - + if (log_category >= Logs::MaxCategoryID) { return; } @@ -3953,11 +3954,11 @@ XS(XS__set_rule) { dXSARGS; if (items != 2) Perl_croak(aTHX_ "Usage: quest::set_rule(string rule_name, string rule_value)"); - + std::string rule_name = (std::string) SvPV_nolen(ST(0)); std::string rule_value = (std::string) SvPV_nolen(ST(1)); RuleManager::Instance()->SetRule(rule_name.c_str(), rule_value.c_str()); - + XSRETURN_EMPTY; } @@ -4042,6 +4043,654 @@ XS(XS__delete_data) { } +XS(XS__IsClassicEnabled); +XS(XS__IsClassicEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_classic_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsClassicEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheRuinsOfKunarkEnabled); +XS(XS__IsTheRuinsOfKunarkEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_ruins_of_kunark_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheRuinsOfKunarkEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheScarsOfVeliousEnabled); +XS(XS__IsTheScarsOfVeliousEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_scars_of_velious_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheScarsOfVeliousEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheShadowsOfLuclinEnabled); +XS(XS__IsTheShadowsOfLuclinEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_shadows_of_luclin_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheShadowsOfLuclinEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsThePlanesOfPowerEnabled); +XS(XS__IsThePlanesOfPowerEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_planes_of_power_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsThePlanesOfPowerEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheLegacyOfYkeshaEnabled); +XS(XS__IsTheLegacyOfYkeshaEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_legacy_of_ykesha_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheLegacyOfYkeshaEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsLostDungeonsOfNorrathEnabled); +XS(XS__IsLostDungeonsOfNorrathEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_lost_dungeons_of_norrath_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsLostDungeonsOfNorrathEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsGatesOfDiscordEnabled); +XS(XS__IsGatesOfDiscordEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_gates_of_discord_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsGatesOfDiscordEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsOmensOfWarEnabled); +XS(XS__IsOmensOfWarEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_omens_of_war_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsOmensOfWarEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsDragonsOfNorrathEnabled); +XS(XS__IsDragonsOfNorrathEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_dragons_of_norrath_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsDragonsOfNorrathEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsDepthsOfDarkhollowEnabled); +XS(XS__IsDepthsOfDarkhollowEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_depths_of_darkhollow_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsDepthsOfDarkhollowEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsProphecyOfRoEnabled); +XS(XS__IsProphecyOfRoEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_prophecy_of_ro_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsProphecyOfRoEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheSerpentsSpineEnabled); +XS(XS__IsTheSerpentsSpineEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_serpents_spine_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheSerpentsSpineEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheBuriedSeaEnabled); +XS(XS__IsTheBuriedSeaEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_buried_sea_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheBuriedSeaEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsSecretsOfFaydwerEnabled); +XS(XS__IsSecretsOfFaydwerEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_secrets_of_faydwer_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsSecretsOfFaydwerEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsSeedsOfDestructionEnabled); +XS(XS__IsSeedsOfDestructionEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_seeds_of_destruction_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsSeedsOfDestructionEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsUnderfootEnabled); +XS(XS__IsUnderfootEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_underfoot_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsUnderfootEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsHouseOfThuleEnabled); +XS(XS__IsHouseOfThuleEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_house_of_thule_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsHouseOfThuleEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsVeilOfAlarisEnabled); +XS(XS__IsVeilOfAlarisEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_veil_of_alaris_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsVeilOfAlarisEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsRainOfFearEnabled); +XS(XS__IsRainOfFearEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_rain_of_fear_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsRainOfFearEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCallOfTheForsakenEnabled); +XS(XS__IsCallOfTheForsakenEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_call_of_the_forsaken_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCallOfTheForsakenEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheDarkendSeaEnabled); +XS(XS__IsTheDarkendSeaEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_darkend_sea_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheDarkendSeaEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheBrokenMirrorEnabled); +XS(XS__IsTheBrokenMirrorEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_broken_mirror_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheBrokenMirrorEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsEmpiresOfKunarkEnabled); +XS(XS__IsEmpiresOfKunarkEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_empires_of_kunark_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsEmpiresOfKunarkEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsRingOfScaleEnabled); +XS(XS__IsRingOfScaleEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_ring_of_scale_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsRingOfScaleEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTheBurningLandsEnabled); +XS(XS__IsTheBurningLandsEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_the_burning_lands_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTheBurningLandsEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsTormentOfVeliousEnabled); +XS(XS__IsTormentOfVeliousEnabled) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_torment_of_velious_enabled()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsTormentOfVeliousEnabled(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionClassic); +XS(XS__IsCurrentExpansionClassic) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_classic()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionClassic(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheRuinsOfKunark); +XS(XS__IsCurrentExpansionTheRuinsOfKunark) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_ruins_of_kunark()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheRuinsOfKunark(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheScarsOfVelious); +XS(XS__IsCurrentExpansionTheScarsOfVelious) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_scars_of_velious()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheScarsOfVelious(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheShadowsOfLuclin); +XS(XS__IsCurrentExpansionTheShadowsOfLuclin) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_shadows_of_luclin()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheShadowsOfLuclin(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionThePlanesOfPower); +XS(XS__IsCurrentExpansionThePlanesOfPower) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_planes_of_power()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionThePlanesOfPower(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheLegacyOfYkesha); +XS(XS__IsCurrentExpansionTheLegacyOfYkesha) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_legacy_of_ykesha()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheLegacyOfYkesha(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionLostDungeonsOfNorrath); +XS(XS__IsCurrentExpansionLostDungeonsOfNorrath) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_lost_dungeons_of_norrath()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionLostDungeonsOfNorrath(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionGatesOfDiscord); +XS(XS__IsCurrentExpansionGatesOfDiscord) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_gates_of_discord()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionGatesOfDiscord(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionOmensOfWar); +XS(XS__IsCurrentExpansionOmensOfWar) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_omens_of_war()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionOmensOfWar(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionDragonsOfNorrath); +XS(XS__IsCurrentExpansionDragonsOfNorrath) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_dragons_of_norrath()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionDragonsOfNorrath(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionDepthsOfDarkhollow); +XS(XS__IsCurrentExpansionDepthsOfDarkhollow) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_depths_of_darkhollow()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionDepthsOfDarkhollow(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionProphecyOfRo); +XS(XS__IsCurrentExpansionProphecyOfRo) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_prophecy_of_ro()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionProphecyOfRo(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheSerpentsSpine); +XS(XS__IsCurrentExpansionTheSerpentsSpine) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_serpents_spine()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheSerpentsSpine(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheBuriedSea); +XS(XS__IsCurrentExpansionTheBuriedSea) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_buried_sea()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheBuriedSea(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionSecretsOfFaydwer); +XS(XS__IsCurrentExpansionSecretsOfFaydwer) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_secrets_of_faydwer()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionSecretsOfFaydwer(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionSeedsOfDestruction); +XS(XS__IsCurrentExpansionSeedsOfDestruction) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_seeds_of_destruction()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionSeedsOfDestruction(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionUnderfoot); +XS(XS__IsCurrentExpansionUnderfoot) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_underfoot()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionUnderfoot(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionHouseOfThule); +XS(XS__IsCurrentExpansionHouseOfThule) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_house_of_thule()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionHouseOfThule(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionVeilOfAlaris); +XS(XS__IsCurrentExpansionVeilOfAlaris) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_veil_of_alaris()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionVeilOfAlaris(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionRainOfFear); +XS(XS__IsCurrentExpansionRainOfFear) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_rain_of_fear()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionRainOfFear(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionCallOfTheForsaken); +XS(XS__IsCurrentExpansionCallOfTheForsaken) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_call_of_the_forsaken()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionCallOfTheForsaken(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheDarkendSea); +XS(XS__IsCurrentExpansionTheDarkendSea) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_darkend_sea()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheDarkendSea(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheBrokenMirror); +XS(XS__IsCurrentExpansionTheBrokenMirror) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_broken_mirror()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheBrokenMirror(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionEmpiresOfKunark); +XS(XS__IsCurrentExpansionEmpiresOfKunark) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_empires_of_kunark()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionEmpiresOfKunark(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionRingOfScale); +XS(XS__IsCurrentExpansionRingOfScale) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_ring_of_scale()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionRingOfScale(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTheBurningLands); +XS(XS__IsCurrentExpansionTheBurningLands) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_the_burning_lands()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTheBurningLands(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__IsCurrentExpansionTormentOfVelious); +XS(XS__IsCurrentExpansionTormentOfVelious) { + dXSARGS; + if (items >= 1) { + Perl_croak(aTHX_ "Usage: quest::is_current_expansion_torment_of_velious()"); + } + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsCurrentExpansionTormentOfVelious(); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + /* This is the callback perl will look for to setup the quest package's XSUBs @@ -4306,6 +4955,64 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "ze"), XS__ze, file); newXS(strcpy(buf, "zone"), XS__zone, file); + /** + * Expansions + */ + newXS(strcpy(buf, "is_classic_enabled"), XS__IsClassicEnabled, file); + newXS(strcpy(buf, "is_the_ruins_of_kunark_enabled"), XS__IsTheRuinsOfKunarkEnabled, file); + newXS(strcpy(buf, "is_the_scars_of_velious_enabled"), XS__IsTheScarsOfVeliousEnabled, file); + newXS(strcpy(buf, "is_the_shadows_of_luclin_enabled"), XS__IsTheShadowsOfLuclinEnabled, file); + newXS(strcpy(buf, "is_the_planes_of_power_enabled"), XS__IsThePlanesOfPowerEnabled, file); + newXS(strcpy(buf, "is_the_legacy_of_ykesha_enabled"), XS__IsTheLegacyOfYkeshaEnabled, file); + newXS(strcpy(buf, "is_lost_dungeons_of_norrath_enabled"), XS__IsLostDungeonsOfNorrathEnabled, file); + newXS(strcpy(buf, "is_gates_of_discord_enabled"), XS__IsGatesOfDiscordEnabled, file); + newXS(strcpy(buf, "is_omens_of_war_enabled"), XS__IsOmensOfWarEnabled, file); + newXS(strcpy(buf, "is_dragons_of_norrath_enabled"), XS__IsDragonsOfNorrathEnabled, file); + newXS(strcpy(buf, "is_depths_of_darkhollow_enabled"), XS__IsDepthsOfDarkhollowEnabled, file); + newXS(strcpy(buf, "is_prophecy_of_ro_enabled"), XS__IsProphecyOfRoEnabled, file); + newXS(strcpy(buf, "is_the_serpents_spine_enabled"), XS__IsTheSerpentsSpineEnabled, file); + newXS(strcpy(buf, "is_the_buried_sea_enabled"), XS__IsTheBuriedSeaEnabled, file); + newXS(strcpy(buf, "is_secrets_of_faydwer_enabled"), XS__IsSecretsOfFaydwerEnabled, file); + newXS(strcpy(buf, "is_seeds_of_destruction_enabled"), XS__IsSeedsOfDestructionEnabled, file); + newXS(strcpy(buf, "is_underfoot_enabled"), XS__IsUnderfootEnabled, file); + newXS(strcpy(buf, "is_house_of_thule_enabled"), XS__IsHouseOfThuleEnabled, file); + newXS(strcpy(buf, "is_veil_of_alaris_enabled"), XS__IsVeilOfAlarisEnabled, file); + newXS(strcpy(buf, "is_rain_of_fear_enabled"), XS__IsRainOfFearEnabled, file); + newXS(strcpy(buf, "is_call_of_the_forsaken_enabled"), XS__IsCallOfTheForsakenEnabled, file); + newXS(strcpy(buf, "is_the_darkend_sea_enabled"), XS__IsTheDarkendSeaEnabled, file); + newXS(strcpy(buf, "is_the_broken_mirror_enabled"), XS__IsTheBrokenMirrorEnabled, file); + newXS(strcpy(buf, "is_empires_of_kunark_enabled"), XS__IsEmpiresOfKunarkEnabled, file); + newXS(strcpy(buf, "is_ring_of_scale_enabled"), XS__IsRingOfScaleEnabled, file); + newXS(strcpy(buf, "is_the_burning_lands_enabled"), XS__IsTheBurningLandsEnabled, file); + newXS(strcpy(buf, "is_torment_of_velious_enabled"), XS__IsTormentOfVeliousEnabled, file); + newXS(strcpy(buf, "is_current_expansion_classic"), XS__IsCurrentExpansionClassic, file); + newXS(strcpy(buf, "is_current_expansion_the_ruins_of_kunark"), XS__IsCurrentExpansionTheRuinsOfKunark, file); + newXS(strcpy(buf, "is_current_expansion_the_scars_of_velious"), XS__IsCurrentExpansionTheScarsOfVelious, file); + newXS(strcpy(buf, "is_current_expansion_the_shadows_of_luclin"), XS__IsCurrentExpansionTheShadowsOfLuclin, file); + newXS(strcpy(buf, "is_current_expansion_the_planes_of_power"), XS__IsCurrentExpansionThePlanesOfPower, file); + newXS(strcpy(buf, "is_current_expansion_the_legacy_of_ykesha"), XS__IsCurrentExpansionTheLegacyOfYkesha, file); + newXS(strcpy(buf, "is_current_expansion_lost_dungeons_of_norrath"), XS__IsCurrentExpansionLostDungeonsOfNorrath, file); + newXS(strcpy(buf, "is_current_expansion_gates_of_discord"), XS__IsCurrentExpansionGatesOfDiscord, file); + newXS(strcpy(buf, "is_current_expansion_omens_of_war"), XS__IsCurrentExpansionOmensOfWar, file); + newXS(strcpy(buf, "is_current_expansion_dragons_of_norrath"), XS__IsCurrentExpansionDragonsOfNorrath, file); + newXS(strcpy(buf, "is_current_expansion_depths_of_darkhollow"), XS__IsCurrentExpansionDepthsOfDarkhollow, file); + newXS(strcpy(buf, "is_current_expansion_prophecy_of_ro"), XS__IsCurrentExpansionProphecyOfRo, file); + newXS(strcpy(buf, "is_current_expansion_the_serpents_spine"), XS__IsCurrentExpansionTheSerpentsSpine, file); + newXS(strcpy(buf, "is_current_expansion_the_buried_sea"), XS__IsCurrentExpansionTheBuriedSea, file); + newXS(strcpy(buf, "is_current_expansion_secrets_of_faydwer"), XS__IsCurrentExpansionSecretsOfFaydwer, file); + newXS(strcpy(buf, "is_current_expansion_seeds_of_destruction"), XS__IsCurrentExpansionSeedsOfDestruction, file); + newXS(strcpy(buf, "is_current_expansion_underfoot"), XS__IsCurrentExpansionUnderfoot, file); + newXS(strcpy(buf, "is_current_expansion_house_of_thule"), XS__IsCurrentExpansionHouseOfThule, file); + newXS(strcpy(buf, "is_current_expansion_veil_of_alaris"), XS__IsCurrentExpansionVeilOfAlaris, file); + newXS(strcpy(buf, "is_current_expansion_rain_of_fear"), XS__IsCurrentExpansionRainOfFear, file); + newXS(strcpy(buf, "is_current_expansion_call_of_the_forsaken"), XS__IsCurrentExpansionCallOfTheForsaken, file); + newXS(strcpy(buf, "is_current_expansion_the_darkend_sea"), XS__IsCurrentExpansionTheDarkendSea, file); + newXS(strcpy(buf, "is_current_expansion_the_broken_mirror"), XS__IsCurrentExpansionTheBrokenMirror, file); + newXS(strcpy(buf, "is_current_expansion_empires_of_kunark"), XS__IsCurrentExpansionEmpiresOfKunark, file); + newXS(strcpy(buf, "is_current_expansion_ring_of_scale"), XS__IsCurrentExpansionRingOfScale, file); + newXS(strcpy(buf, "is_current_expansion_the_burning_lands"), XS__IsCurrentExpansionTheBurningLands, file); + newXS(strcpy(buf, "is_current_expansion_torment_of_velious"), XS__IsCurrentExpansionTormentOfVelious, file); + XSRETURN_YES; } diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index d680460c7..7bf5045af 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -7,6 +7,7 @@ #include #include +#include "../common/content/world_content_service.h" #include "../common/timer.h" #include "../common/eqemu_logsys.h" #include "../common/classes.h" @@ -1457,6 +1458,226 @@ void lua_update_zone_header(std::string type, std::string value) { quest_manager.UpdateZoneHeader(type, value); } +/** + * Expansions + */ + +bool lua_is_classic_enabled() { + return content_service.IsClassicEnabled(); +} + +bool lua_is_the_ruins_of_kunark_enabled() { + return content_service.IsTheRuinsOfKunarkEnabled(); +} + +bool lua_is_the_scars_of_velious_enabled() { + return content_service.IsTheScarsOfVeliousEnabled(); +} + +bool lua_is_the_shadows_of_luclin_enabled() { + return content_service.IsTheShadowsOfLuclinEnabled(); +} + +bool lua_is_the_planes_of_power_enabled() { + return content_service.IsThePlanesOfPowerEnabled(); +} + +bool lua_is_the_legacy_of_ykesha_enabled() { + return content_service.IsTheLegacyOfYkeshaEnabled(); +} + +bool lua_is_lost_dungeons_of_norrath_enabled() { + return content_service.IsLostDungeonsOfNorrathEnabled(); +} + +bool lua_is_gates_of_discord_enabled() { + return content_service.IsGatesOfDiscordEnabled(); +} + +bool lua_is_omens_of_war_enabled() { + return content_service.IsOmensOfWarEnabled(); +} + +bool lua_is_dragons_of_norrath_enabled() { + return content_service.IsDragonsOfNorrathEnabled(); +} + +bool lua_is_depths_of_darkhollow_enabled() { + return content_service.IsDepthsOfDarkhollowEnabled(); +} + +bool lua_is_prophecy_of_ro_enabled() { + return content_service.IsProphecyOfRoEnabled(); +} + +bool lua_is_the_serpents_spine_enabled() { + return content_service.IsTheSerpentsSpineEnabled(); +} + +bool lua_is_the_buried_sea_enabled() { + return content_service.IsTheBuriedSeaEnabled(); +} + +bool lua_is_secrets_of_faydwer_enabled() { + return content_service.IsSecretsOfFaydwerEnabled(); +} + +bool lua_is_seeds_of_destruction_enabled() { + return content_service.IsSeedsOfDestructionEnabled(); +} + +bool lua_is_underfoot_enabled() { + return content_service.IsUnderfootEnabled(); +} + +bool lua_is_house_of_thule_enabled() { + return content_service.IsHouseOfThuleEnabled(); +} + +bool lua_is_veil_of_alaris_enabled() { + return content_service.IsVeilOfAlarisEnabled(); +} + +bool lua_is_rain_of_fear_enabled() { + return content_service.IsRainOfFearEnabled(); +} + +bool lua_is_call_of_the_forsaken_enabled() { + return content_service.IsCallOfTheForsakenEnabled(); +} + +bool lua_is_the_darkend_sea_enabled() { + return content_service.IsTheDarkendSeaEnabled(); +} + +bool lua_is_the_broken_mirror_enabled() { + return content_service.IsTheBrokenMirrorEnabled(); +} + +bool lua_is_empires_of_kunark_enabled() { + return content_service.IsEmpiresOfKunarkEnabled(); +} + +bool lua_is_ring_of_scale_enabled() { + return content_service.IsRingOfScaleEnabled(); +} + +bool lua_is_the_burning_lands_enabled() { + return content_service.IsTheBurningLandsEnabled(); +} + +bool lua_is_torment_of_velious_enabled() { + return content_service.IsTormentOfVeliousEnabled(); +} + +bool lua_is_current_expansion_classic() { + return content_service.IsCurrentExpansionClassic(); +} + +bool lua_is_current_expansion_the_ruins_of_kunark() { + return content_service.IsCurrentExpansionTheRuinsOfKunark(); +} + +bool lua_is_current_expansion_the_scars_of_velious() { + return content_service.IsCurrentExpansionTheScarsOfVelious(); +} + +bool lua_is_current_expansion_the_shadows_of_luclin() { + return content_service.IsCurrentExpansionTheShadowsOfLuclin(); +} + +bool lua_is_current_expansion_the_planes_of_power() { + return content_service.IsCurrentExpansionThePlanesOfPower(); +} + +bool lua_is_current_expansion_the_legacy_of_ykesha() { + return content_service.IsCurrentExpansionTheLegacyOfYkesha(); +} + +bool lua_is_current_expansion_lost_dungeons_of_norrath() { + return content_service.IsCurrentExpansionLostDungeonsOfNorrath(); +} + +bool lua_is_current_expansion_gates_of_discord() { + return content_service.IsCurrentExpansionGatesOfDiscord(); +} + +bool lua_is_current_expansion_omens_of_war() { + return content_service.IsCurrentExpansionOmensOfWar(); +} + +bool lua_is_current_expansion_dragons_of_norrath() { + return content_service.IsCurrentExpansionDragonsOfNorrath(); +} + +bool lua_is_current_expansion_depths_of_darkhollow() { + return content_service.IsCurrentExpansionDepthsOfDarkhollow(); +} + +bool lua_is_current_expansion_prophecy_of_ro() { + return content_service.IsCurrentExpansionProphecyOfRo(); +} + +bool lua_is_current_expansion_the_serpents_spine() { + return content_service.IsCurrentExpansionTheSerpentsSpine(); +} + +bool lua_is_current_expansion_the_buried_sea() { + return content_service.IsCurrentExpansionTheBuriedSea(); +} + +bool lua_is_current_expansion_secrets_of_faydwer() { + return content_service.IsCurrentExpansionSecretsOfFaydwer(); +} + +bool lua_is_current_expansion_seeds_of_destruction() { + return content_service.IsCurrentExpansionSeedsOfDestruction(); +} + +bool lua_is_current_expansion_underfoot() { + return content_service.IsCurrentExpansionUnderfoot(); +} + +bool lua_is_current_expansion_house_of_thule() { + return content_service.IsCurrentExpansionHouseOfThule(); +} + +bool lua_is_current_expansion_veil_of_alaris() { + return content_service.IsCurrentExpansionVeilOfAlaris(); +} + +bool lua_is_current_expansion_rain_of_fear() { + return content_service.IsCurrentExpansionRainOfFear(); +} + +bool lua_is_current_expansion_call_of_the_forsaken() { + return content_service.IsCurrentExpansionCallOfTheForsaken(); +} + +bool lua_is_current_expansion_the_darkend_sea() { + return content_service.IsCurrentExpansionTheDarkendSea(); +} + +bool lua_is_current_expansion_the_broken_mirror() { + return content_service.IsCurrentExpansionTheBrokenMirror(); +} + +bool lua_is_current_expansion_empires_of_kunark() { + return content_service.IsCurrentExpansionEmpiresOfKunark(); +} + +bool lua_is_current_expansion_ring_of_scale() { + return content_service.IsCurrentExpansionRingOfScale(); +} + +bool lua_is_current_expansion_the_burning_lands() { + return content_service.IsCurrentExpansionTheBurningLands(); +} + +bool lua_is_current_expansion_torment_of_velious() { + return content_service.IsCurrentExpansionTormentOfVelious(); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -1866,7 +2087,65 @@ luabind::scope lua_register_general() { luabind::def("log", (void(*)(int, std::string))&lua_log), luabind::def("debug", (void(*)(std::string))&lua_debug), luabind::def("debug", (void(*)(std::string, int))&lua_debug), - luabind::def("log_combat", (void(*)(std::string))&lua_log_combat) + luabind::def("log_combat", (void(*)(std::string))&lua_log_combat), + + /** + * Expansions + */ + luabind::def("is_classic_enabled", &lua_is_classic_enabled), + luabind::def("is_the_ruins_of_kunark_enabled", &lua_is_the_ruins_of_kunark_enabled), + luabind::def("is_the_scars_of_velious_enabled", &lua_is_the_scars_of_velious_enabled), + luabind::def("is_the_shadows_of_luclin_enabled", &lua_is_the_shadows_of_luclin_enabled), + luabind::def("is_the_planes_of_power_enabled", &lua_is_the_planes_of_power_enabled), + luabind::def("is_the_legacy_of_ykesha_enabled", &lua_is_the_legacy_of_ykesha_enabled), + luabind::def("is_lost_dungeons_of_norrath_enabled", &lua_is_lost_dungeons_of_norrath_enabled), + luabind::def("is_gates_of_discord_enabled", &lua_is_gates_of_discord_enabled), + luabind::def("is_omens_of_war_enabled", &lua_is_omens_of_war_enabled), + luabind::def("is_dragons_of_norrath_enabled", &lua_is_dragons_of_norrath_enabled), + luabind::def("is_depths_of_darkhollow_enabled", &lua_is_depths_of_darkhollow_enabled), + luabind::def("is_prophecy_of_ro_enabled", &lua_is_prophecy_of_ro_enabled), + luabind::def("is_the_serpents_spine_enabled", &lua_is_the_serpents_spine_enabled), + luabind::def("is_the_buried_sea_enabled", &lua_is_the_buried_sea_enabled), + luabind::def("is_secrets_of_faydwer_enabled", &lua_is_secrets_of_faydwer_enabled), + luabind::def("is_seeds_of_destruction_enabled", &lua_is_seeds_of_destruction_enabled), + luabind::def("is_underfoot_enabled", &lua_is_underfoot_enabled), + luabind::def("is_house_of_thule_enabled", &lua_is_house_of_thule_enabled), + luabind::def("is_veil_of_alaris_enabled", &lua_is_veil_of_alaris_enabled), + luabind::def("is_rain_of_fear_enabled", &lua_is_rain_of_fear_enabled), + luabind::def("is_call_of_the_forsaken_enabled", &lua_is_call_of_the_forsaken_enabled), + luabind::def("is_the_darkend_sea_enabled", &lua_is_the_darkend_sea_enabled), + luabind::def("is_the_broken_mirror_enabled", &lua_is_the_broken_mirror_enabled), + luabind::def("is_empires_of_kunark_enabled", &lua_is_empires_of_kunark_enabled), + luabind::def("is_ring_of_scale_enabled", &lua_is_ring_of_scale_enabled), + luabind::def("is_the_burning_lands_enabled", &lua_is_the_burning_lands_enabled), + luabind::def("is_torment_of_velious_enabled", &lua_is_torment_of_velious_enabled), + luabind::def("is_current_expansion_classic", &lua_is_current_expansion_classic), + luabind::def("is_current_expansion_the_ruins_of_kunark", &lua_is_current_expansion_the_ruins_of_kunark), + luabind::def("is_current_expansion_the_scars_of_velious", &lua_is_current_expansion_the_scars_of_velious), + luabind::def("is_current_expansion_the_shadows_of_luclin", &lua_is_current_expansion_the_shadows_of_luclin), + luabind::def("is_current_expansion_the_planes_of_power", &lua_is_current_expansion_the_planes_of_power), + luabind::def("is_current_expansion_the_legacy_of_ykesha", &lua_is_current_expansion_the_legacy_of_ykesha), + luabind::def("is_current_expansion_lost_dungeons_of_norrath", &lua_is_current_expansion_lost_dungeons_of_norrath), + luabind::def("is_current_expansion_gates_of_discord", &lua_is_current_expansion_gates_of_discord), + luabind::def("is_current_expansion_omens_of_war", &lua_is_current_expansion_omens_of_war), + luabind::def("is_current_expansion_dragons_of_norrath", &lua_is_current_expansion_dragons_of_norrath), + luabind::def("is_current_expansion_depths_of_darkhollow", &lua_is_current_expansion_depths_of_darkhollow), + luabind::def("is_current_expansion_prophecy_of_ro", &lua_is_current_expansion_prophecy_of_ro), + luabind::def("is_current_expansion_the_serpents_spine", &lua_is_current_expansion_the_serpents_spine), + luabind::def("is_current_expansion_the_buried_sea", &lua_is_current_expansion_the_buried_sea), + luabind::def("is_current_expansion_secrets_of_faydwer", &lua_is_current_expansion_secrets_of_faydwer), + luabind::def("is_current_expansion_seeds_of_destruction", &lua_is_current_expansion_seeds_of_destruction), + luabind::def("is_current_expansion_underfoot", &lua_is_current_expansion_underfoot), + luabind::def("is_current_expansion_house_of_thule", &lua_is_current_expansion_house_of_thule), + luabind::def("is_current_expansion_veil_of_alaris", &lua_is_current_expansion_veil_of_alaris), + luabind::def("is_current_expansion_rain_of_fear", &lua_is_current_expansion_rain_of_fear), + luabind::def("is_current_expansion_call_of_the_forsaken", &lua_is_current_expansion_call_of_the_forsaken), + luabind::def("is_current_expansion_the_darkend_sea", &lua_is_current_expansion_the_darkend_sea), + luabind::def("is_current_expansion_the_broken_mirror", &lua_is_current_expansion_the_broken_mirror), + luabind::def("is_current_expansion_empires_of_kunark", &lua_is_current_expansion_empires_of_kunark), + luabind::def("is_current_expansion_ring_of_scale", &lua_is_current_expansion_ring_of_scale), + luabind::def("is_current_expansion_the_burning_lands", &lua_is_current_expansion_the_burning_lands), + luabind::def("is_current_expansion_torment_of_velious", &lua_is_current_expansion_torment_of_velious) ]; } From 5b4c4bfd6666d5c4be8c0a0b8cf962302f095d4d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 05:48:41 -0500 Subject: [PATCH 103/272] Implement content flags --- common/CMakeLists.txt | 2 + common/content/world_content_service.cpp | 18 + common/content/world_content_service.h | 1 + common/database.cpp | 177 +++++----- common/database_schema.h | 1 + .../base/base_content_flags_repository.h | 327 ++++++++++++++++++ .../repositories/content_flags_repository.h | 70 ++++ .../generators/repository-generator.pl | 4 + .../2020_04_11_expansions_content_filters.sql | 3 + world/main.cpp | 4 +- zone/main.cpp | 24 +- 11 files changed, 535 insertions(+), 96 deletions(-) create mode 100644 common/repositories/base/base_content_flags_repository.h create mode 100644 common/repositories/content_flags_repository.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index e77ed1a08..d1f242c7f 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -166,6 +166,7 @@ SET(repositories repositories/base/base_char_create_point_allocations_repository.h repositories/base/base_char_recipe_list_repository.h repositories/base/base_completed_tasks_repository.h + repositories/base/base_content_flags_repository.h repositories/base/base_data_buckets_repository.h repositories/base/base_db_str_repository.h repositories/base/base_discovered_items_repository.h @@ -323,6 +324,7 @@ SET(repositories repositories/char_create_point_allocations_repository.h repositories/char_recipe_list_repository.h repositories/completed_tasks_repository.h + repositories/content_flags_repository.h repositories/data_buckets_repository.h repositories/db_str_repository.h repositories/discovered_items_repository.h diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp index 6ff504ebd..64f6a1230 100644 --- a/common/content/world_content_service.cpp +++ b/common/content/world_content_service.cpp @@ -19,6 +19,10 @@ */ #include "world_content_service.h" +#include "../database.h" +#include "../rulesys.h" +#include "../eqemu_logsys.h" + WorldContentService::WorldContentService() { @@ -30,6 +34,20 @@ int WorldContentService::GetCurrentExpansion() const return current_expansion; } +void WorldContentService::SetExpansionContext() +{ + int expansion = RuleI(Expansion, CurrentExpansion); + if (expansion >= Expansion::Classic && expansion <= Expansion::MaxId) { + content_service.SetCurrentExpansion(expansion); + } + + LogInfo( + "Current expansion is [{}] ({})", + GetCurrentExpansion(), + GetCurrentExpansionName() + ); +} + void WorldContentService::SetCurrentExpansion(int current_expansion) { WorldContentService::current_expansion = current_expansion; diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index a1b6438cd..bfed118c9 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -163,6 +163,7 @@ private: public: const std::vector &GetContentFlags() const; void SetContentFlags(std::vector content_flags); + void SetExpansionContext(); }; extern WorldContentService content_service; diff --git a/common/database.cpp b/common/database.cpp index 4a554c2ac..caec5c3ce 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -339,7 +339,7 @@ bool Database::ReserveName(uint32 account_id, char* name) { query = StringFormat("INSERT INTO `character_data` SET `account_id` = %i, `name` = '%s'", account_id, name); results = QueryDatabase(query); if (!results.Success() || results.ErrorMessage() != ""){ return false; } - + // Put character into the default guild if rule is being used. int guild_id = RuleI(Character, DefaultGuild); @@ -353,7 +353,7 @@ bool Database::ReserveName(uint32 account_id, char* name) { } } } - + return true; } @@ -512,96 +512,96 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe "guild_auto_consent," "RestTimer) " "VALUES (" - "%u," // id - "%u," // account_id - "'%s'," // `name` - "'%s'," // last_name - "%u," // gender - "%u," // race - "%u," // class - "%u," // `level` - "%u," // deity - "%u," // birthday - "%u," // last_login - "%u," // time_played - "%u," // pvp_status - "%u," // level2 - "%u," // anon - "%u," // gm - "%u," // intoxication - "%u," // hair_color - "%u," // beard_color - "%u," // eye_color_1 - "%u," // eye_color_2 - "%u," // hair_style - "%u," // beard - "%u," // ability_time_seconds - "%u," // ability_number - "%u," // ability_time_minutes - "%u," // ability_time_hours - "'%s'," // title - "'%s'," // suffix - "%u," // exp - "%u," // points - "%u," // mana - "%u," // cur_hp - "%u," // str - "%u," // sta - "%u," // cha - "%u," // dex - "%u," // `int` - "%u," // agi - "%u," // wis - "%u," // face - "%f," // y - "%f," // x - "%f," // z - "%f," // heading - "%u," // pvp2 - "%u," // pvp_type - "%u," // autosplit_enabled - "%u," // zone_change_count - "%u," // drakkin_heritage - "%u," // drakkin_tattoo - "%u," // drakkin_details - "%i," // toxicity - "%i," // hunger_level - "%i," // thirst_level - "%u," // ability_up - "%u," // zone_id - "%u," // zone_instance - "%u," // leadership_exp_on - "%u," // ldon_points_guk - "%u," // ldon_points_mir - "%u," // ldon_points_mmc - "%u," // ldon_points_ruj - "%u," // ldon_points_tak - "%u," // ldon_points_available + "%u," // id + "%u," // account_id + "'%s'," // `name` + "'%s'," // last_name + "%u," // gender + "%u," // race + "%u," // class + "%u," // `level` + "%u," // deity + "%u," // birthday + "%u," // last_login + "%u," // time_played + "%u," // pvp_status + "%u," // level2 + "%u," // anon + "%u," // gm + "%u," // intoxication + "%u," // hair_color + "%u," // beard_color + "%u," // eye_color_1 + "%u," // eye_color_2 + "%u," // hair_style + "%u," // beard + "%u," // ability_time_seconds + "%u," // ability_number + "%u," // ability_time_minutes + "%u," // ability_time_hours + "'%s'," // title + "'%s'," // suffix + "%u," // exp + "%u," // points + "%u," // mana + "%u," // cur_hp + "%u," // str + "%u," // sta + "%u," // cha + "%u," // dex + "%u," // `int` + "%u," // agi + "%u," // wis + "%u," // face + "%f," // y + "%f," // x + "%f," // z + "%f," // heading + "%u," // pvp2 + "%u," // pvp_type + "%u," // autosplit_enabled + "%u," // zone_change_count + "%u," // drakkin_heritage + "%u," // drakkin_tattoo + "%u," // drakkin_details + "%i," // toxicity + "%i," // hunger_level + "%i," // thirst_level + "%u," // ability_up + "%u," // zone_id + "%u," // zone_instance + "%u," // leadership_exp_on + "%u," // ldon_points_guk + "%u," // ldon_points_mir + "%u," // ldon_points_mmc + "%u," // ldon_points_ruj + "%u," // ldon_points_tak + "%u," // ldon_points_available "%u," // tribute_time_remaining - "%u," // show_helm - "%u," // career_tribute_points - "%u," // tribute_points - "%u," // tribute_active - "%u," // endurance - "%u," // group_leadership_exp - "%u," // raid_leadership_exp + "%u," // show_helm + "%u," // career_tribute_points + "%u," // tribute_points + "%u," // tribute_active + "%u," // endurance + "%u," // group_leadership_exp + "%u," // raid_leadership_exp "%u," // group_leadership_point "%u," // raid_leadership_points - "%u," // air_remaining - "%u," // pvp_kills - "%u," // pvp_deaths - "%u," // pvp_current_points - "%u," // pvp_career_points - "%u," // pvp_best_kill_streak + "%u," // air_remaining + "%u," // pvp_kills + "%u," // pvp_deaths + "%u," // pvp_current_points + "%u," // pvp_career_points + "%u," // pvp_best_kill_streak "%u," // pvp_worst_death_streak "%u," // pvp_current_kill_strea - "%u," // aa_points_spent - "%u," // aa_exp - "%u," // aa_points - "%u," // group_auto_consent - "%u," // raid_auto_consent - "%u," // guild_auto_consent - "%u" // RestTimer + "%u," // aa_points_spent + "%u," // aa_exp + "%u," // aa_points + "%u," // group_auto_consent + "%u," // raid_auto_consent + "%u," // guild_auto_consent + "%u" // RestTimer ")", character_id, // " id, " account_id, // " account_id, " @@ -2178,6 +2178,9 @@ uint32 Database::GetRaidIDByCharID(uint32 character_id) { */ void Database::LoadLogSettings(EQEmuLogSys::LogSettings *log_settings) { + + std::cout << "We're hitting this eh " << std::endl; + std::string query = "SELECT " "log_category_id, " diff --git a/common/database_schema.h b/common/database_schema.h index 6a7ccf612..bd8e89b6c 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -248,6 +248,7 @@ namespace DatabaseSchema { return { "chatchannels", "command_settings", + "content_flags", "db_str", "eqtime", "launcher", diff --git a/common/repositories/base/base_content_flags_repository.h b/common/repositories/base/base_content_flags_repository.h new file mode 100644 index 000000000..d86b2e572 --- /dev/null +++ b/common/repositories/base/base_content_flags_repository.h @@ -0,0 +1,327 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + */ + +/** + * This repository was automatically generated and is NOT to be modified directly. + * Any repository modifications are meant to be made to + * the repository extending the base. Any modifications to base repositories are to + * be made by the generator only + */ + +#ifndef EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H +#define EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H + +#include "../../database.h" +#include "../../string_util.h" + +class BaseContentFlagsRepository { +public: + struct ContentFlags { + int id; + std::string flag_name; + int8 enabled; + std::string notes; + }; + + static std::string PrimaryKey() + { + return std::string("id"); + } + + static std::vector Columns() + { + return { + "id", + "flag_name", + "enabled", + "notes", + }; + } + + static std::string ColumnsRaw() + { + return std::string(implode(", ", Columns())); + } + + static std::string InsertColumnsRaw() + { + std::vector insert_columns; + + for (auto &column : Columns()) { + if (column == PrimaryKey()) { + continue; + } + + insert_columns.push_back(column); + } + + return std::string(implode(", ", insert_columns)); + } + + static std::string TableName() + { + return std::string("content_flags"); + } + + static std::string BaseSelect() + { + return fmt::format( + "SELECT {} FROM {}", + ColumnsRaw(), + TableName() + ); + } + + static std::string BaseInsert() + { + return fmt::format( + "INSERT INTO {} ({}) ", + TableName(), + InsertColumnsRaw() + ); + } + + static ContentFlags NewEntity() + { + ContentFlags entry{}; + + entry.id = 0; + entry.flag_name = ""; + entry.enabled = 0; + entry.notes = ""; + + return entry; + } + + static ContentFlags GetContentFlagsEntry( + const std::vector &content_flagss, + int content_flags_id + ) + { + for (auto &content_flags : content_flagss) { + if (content_flags.id == content_flags_id) { + return content_flags; + } + } + + return NewEntity(); + } + + static ContentFlags FindOne( + int content_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE id = {} LIMIT 1", + BaseSelect(), + content_flags_id + ) + ); + + auto row = results.begin(); + if (results.RowCount() == 1) { + ContentFlags entry{}; + + entry.id = atoi(row[0]); + entry.flag_name = row[1] ? row[1] : ""; + entry.enabled = atoi(row[2]); + entry.notes = row[3] ? row[3] : ""; + + return entry; + } + + return NewEntity(); + } + + static int DeleteOne( + int content_flags_id + ) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + TableName(), + PrimaryKey(), + content_flags_id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int UpdateOne( + ContentFlags content_flags_entry + ) + { + std::vector update_values; + + auto columns = Columns(); + + update_values.push_back(columns[0] + " = " + std::to_string(content_flags_entry.id)); + update_values.push_back(columns[1] + " = '" + EscapeString(content_flags_entry.flag_name) + "'"); + update_values.push_back(columns[2] + " = " + std::to_string(content_flags_entry.enabled)); + update_values.push_back(columns[3] + " = '" + EscapeString(content_flags_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "UPDATE {} SET {} WHERE {} = {}", + TableName(), + implode(", ", update_values), + PrimaryKey(), + content_flags_entry.id + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static ContentFlags InsertOne( + ContentFlags content_flags_entry + ) + { + std::vector insert_values; + + insert_values.push_back(std::to_string(content_flags_entry.id)); + insert_values.push_back("'" + EscapeString(content_flags_entry.flag_name) + "'"); + insert_values.push_back(std::to_string(content_flags_entry.enabled)); + insert_values.push_back("'" + EscapeString(content_flags_entry.notes) + "'"); + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseInsert(), + implode(",", insert_values) + ) + ); + + if (results.Success()) { + content_flags_entry.id = results.LastInsertedID(); + return content_flags_entry; + } + + content_flags_entry = NewEntity(); + + return content_flags_entry; + } + + static int InsertMany( + std::vector content_flags_entries + ) + { + std::vector insert_chunks; + + for (auto &content_flags_entry: content_flags_entries) { + std::vector insert_values; + + insert_values.push_back(std::to_string(content_flags_entry.id)); + insert_values.push_back("'" + EscapeString(content_flags_entry.flag_name) + "'"); + insert_values.push_back(std::to_string(content_flags_entry.enabled)); + insert_values.push_back("'" + EscapeString(content_flags_entry.notes) + "'"); + + insert_chunks.push_back("(" + implode(",", insert_values) + ")"); + } + + std::vector insert_values; + + auto results = database.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseInsert(), + implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static std::vector All() + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{}", + BaseSelect() + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ContentFlags entry{}; + + entry.id = atoi(row[0]); + entry.flag_name = row[1] ? row[1] : ""; + entry.enabled = atoi(row[2]); + entry.notes = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static std::vector GetWhere(std::string where_filter) + { + std::vector all_entries; + + auto results = database.QueryDatabase( + fmt::format( + "{} WHERE {}", + BaseSelect(), + where_filter + ) + ); + + all_entries.reserve(results.RowCount()); + + for (auto row = results.begin(); row != results.end(); ++row) { + ContentFlags entry{}; + + entry.id = atoi(row[0]); + entry.flag_name = row[1] ? row[1] : ""; + entry.enabled = atoi(row[2]); + entry.notes = row[3] ? row[3] : ""; + + all_entries.push_back(entry); + } + + return all_entries; + } + + static int DeleteWhere(std::string where_filter) + { + auto results = database.QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {}", + TableName(), + PrimaryKey(), + where_filter + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + +}; + +#endif //EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H diff --git a/common/repositories/content_flags_repository.h b/common/repositories/content_flags_repository.h new file mode 100644 index 000000000..d9bf0098c --- /dev/null +++ b/common/repositories/content_flags_repository.h @@ -0,0 +1,70 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_CONTENT_FLAGS_REPOSITORY_H +#define EQEMU_CONTENT_FLAGS_REPOSITORY_H + +#include "../database.h" +#include "../string_util.h" +#include "base/base_content_flags_repository.h" + +class ContentFlagsRepository: public BaseContentFlagsRepository { +public: + + /** + * This file was auto generated and can be modified and extended upon + * + * Base repository methods are automatically + * generated in the "base" version of this repository. The base repository + * is immutable and to be left untouched, while methods in this class + * are used as extension methods for more specific persistence-layer + * accessors or mutators. + * + * Base Methods (Subject to be expanded upon in time) + * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * + * InsertOne + * UpdateOne + * DeleteOne + * FindOne + * GetWhere(std::string where_filter) + * DeleteWhere(std::string where_filter) + * InsertMany + * All + * + * Example custom methods in a repository + * + * ContentFlagsRepository::GetByZoneAndVersion(int zone_id, int zone_version) + * ContentFlagsRepository::GetWhereNeverExpires() + * ContentFlagsRepository::GetWhereXAndY() + * ContentFlagsRepository::DeleteWhereXAndY() + * + * Most of the above could be covered by base methods, but if you as a developer + * find yourself re-using logic for other parts of the code, its best to just make a + * method that can be re-used easily elsewhere especially if it can use a base repository + * method and encapsulate filters there + */ + + // Custom extended repository methods here + +}; + +#endif //EQEMU_CONTENT_FLAGS_REPOSITORY_H diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 710e91ae4..c57edddf6 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -100,6 +100,10 @@ if ($requested_table_to_generate eq "all" || !$requested_table_to_generate) { } } +if ($requested_table_to_generate ne "all") { + @tables = ($requested_table_to_generate); +} + my $generated_base_repository_files = ""; my $generated_repository_files = ""; diff --git a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql index d26dbe793..0456d157b 100644 --- a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql +++ b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql @@ -80,3 +80,6 @@ ALTER TABLE `zone_points` ADD `content_flags` varchar(100) NULL; -- pok books update doors set min_expansion = 4 where name like '%POKTELE%'; + +-- content flags +CREATE TABLE `content_flags` (`id` int AUTO_INCREMENT,`flag_name` varchar(75),`enabled` tinyint,`notes` text, PRIMARY KEY (id)); diff --git a/world/main.cpp b/world/main.cpp index c8800187c..f4707e43f 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -18,6 +18,8 @@ * */ +#define PLATFORM_WORLD 1 + #include "../common/global_define.h" #include @@ -221,7 +223,7 @@ void RegisterLoginservers() /** * World process entrypoint - * + * * @param argc * @param argv * @return diff --git a/zone/main.cpp b/zone/main.cpp index ad520bf35..166332a69 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #ifdef BOTS #include "bot_command.h" #endif +#include "zonedb.h" #include "zone_config.h" #include "titles.h" #include "guild_mgr.h" @@ -68,6 +69,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/net/eqstream.h" #include "../common/net/servertalk_server.h" #include "../common/content/world_content_service.h" +#include "../common/repositories/content_flags_repository.h" #include #include @@ -395,16 +397,22 @@ int main(int argc, char** argv) { LogInfo("Initialized dynamic dictionary entries"); } - int current_expansion = RuleI(Expansion, CurrentExpansion); - if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) { - content_service.SetCurrentExpansion(current_expansion); + content_service.SetExpansionContext(); + + std::vector set_content_flags; + auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); + set_content_flags.reserve(content_flags.size()); + + for (auto &flags: content_flags) { + set_content_flags.push_back(flags.flag_name); + + LogInfo( + "Enabling content-flag [{}]", + flags.flag_name + ); } - LogInfo( - "Current expansion is [{}] ({})", - content_service.GetCurrentExpansion(), - content_service.GetCurrentExpansionName() - ); + content_service.SetContentFlags(set_content_flags); #ifdef BOTS LogInfo("Loading bot commands"); From 3daf03c796eaa4a5be56990fd1748d1fde637991 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 11 Apr 2020 05:57:31 -0500 Subject: [PATCH 104/272] Remove errant cout [skip ci] --- common/database.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index caec5c3ce..a40dcfb72 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -2178,9 +2178,6 @@ uint32 Database::GetRaidIDByCharID(uint32 character_id) { */ void Database::LoadLogSettings(EQEmuLogSys::LogSettings *log_settings) { - - std::cout << "We're hitting this eh " << std::endl; - std::string query = "SELECT " "log_category_id, " From 6c3ae4580f13d0801389ac80816b557e2c4e26d9 Mon Sep 17 00:00:00 2001 From: Ali Date: Sat, 11 Apr 2020 21:57:13 +0300 Subject: [PATCH 105/272] [skip ci] Win64 eqemu_server.pl Changed binaries to x64 and got rid of wget.exe for windows, switched to native WebClient --- utils/scripts/eqemu_server.pl | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 6618b021e..18d5462a0 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -59,7 +59,6 @@ if (-e "eqemu_server_skip_maps_update.txt") { #::: Check for script self update check_xml_to_json_conversion() if $ARGV[0] eq "convert_xml"; do_self_update_check_routine() if !$skip_self_update_check; -get_windows_wget(); get_perl_version(); if (-e "eqemu_config.json") { read_eqemu_config_json(); @@ -456,11 +455,11 @@ sub do_installer_routines { #::: Download assets if ($OS eq "Windows") { - # fetch_latest_windows_binaries(); - fetch_latest_windows_appveyor(); + fetch_latest_windows_binaries(); + # fetch_latest_windows_appveyor(); get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); - get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); - get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); + #get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); # No longer required + #get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); } @@ -638,13 +637,6 @@ sub get_perl_version { no warnings; } -sub get_windows_wget { - if (!-e "wget.exe" && $OS eq "Windows") { - eval "use LWP::Simple qw(getstore);"; - getstore("https://raw.githubusercontent.com/Akkadius/EQEmuInstall/master/wget.exe", "wget.exe"); - } -} - sub do_self_update_check_routine { #::: Check for internet connection before updating @@ -1258,9 +1250,14 @@ sub get_remote_file { } #::: wget -O db_update/db_update_manifest.txt https://raw.githubusercontent.com/EQEmu/Server/master/utils/sql/db_update_manifest.txt - $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; + if ($OS eq "Linux") { + $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; + } + elsif ($OS eq "Windows") { + $wget = `powershell -Command "Invoke-WebRequest $request_url -OutFile $destination_file"` + } print "[Download] Saved: (" . $destination_file . ") from " . $request_url . "\n" if !$silent_download; - if ($wget =~ /unable to resolve/i) { + if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i) ) { print "Error, no connection or failed request...\n\n"; #die; } @@ -1442,11 +1439,11 @@ sub copy_file { sub fetch_latest_windows_appveyor { print "[Update] Fetching Latest Windows Binaries (unstable) from Appveyor... \n"; - get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server/artifacts/eqemu-x86-no-bots.zip", "updates_staged/eqemu-x86-no-bots.zip", 1); + get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server-87crp/artifacts/build_x64.zip", "updates_staged/build_x64.zip", 1); print "[Update] Fetched Latest Windows Binaries (unstable) from Appveyor... \n"; print "[Update] Extracting... --- \n"; - unzip('updates_staged/eqemu-x86-no-bots.zip', 'updates_staged/binaries/'); + unzip('updates_staged/build_x64.zip', 'updates_staged/binaries/'); my @files; my $start_dir = "updates_staged/binaries"; find( @@ -1705,8 +1702,8 @@ sub check_windows_firewall_rules { sub fetch_server_dlls { print "[Download] Fetching lua51.dll, zlib1.dll, zlib1.pdb, libmysql.dll...\n"; get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); - get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); - get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); + #get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); + #get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); } From 4db646db94d86e09648e9535a9324499ab6b9e76 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Wed, 8 Apr 2020 16:00:27 -0500 Subject: [PATCH 106/272] Revert "Merge pull request #1007 from EQEmu/feature/improved-name-generator" This reverts commit 3c71e2c91df68421ab32d7f14094f067014cb70b, reversing changes made to 80d160175450a7e74500f5c773f9e1d72ecb907d. --- common/CMakeLists.txt | 2 - common/namegenerator/namegen.cpp | 522 ------------------------------- common/namegenerator/namegen.h | 269 ---------------- world/client.cpp | 81 ++++- 4 files changed, 73 insertions(+), 801 deletions(-) delete mode 100644 common/namegenerator/namegen.cpp delete mode 100644 common/namegenerator/namegen.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index d1f242c7f..702f2c867 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -78,7 +78,6 @@ SET(common_sources unix.cpp platform.cpp json/jsoncpp.cpp - namegenerator/namegen.cpp net/console_server.cpp net/console_server_connection.cpp net/crc32.cpp @@ -549,7 +548,6 @@ SET(common_headers event/timer.h json/json.h json/json-forwards.h - namegenerator/namegen.h net/console_server.h net/console_server_connection.h net/crc32.h diff --git a/common/namegenerator/namegen.cpp b/common/namegenerator/namegen.cpp deleted file mode 100644 index 3ef880ea4..000000000 --- a/common/namegenerator/namegen.cpp +++ /dev/null @@ -1,522 +0,0 @@ -/** - * - * @file A fantasy name generator library. - * @version 1.0.1 - * @license Public Domain - * @author German M. Bravo (Kronuz) - * - */ - -#include "namegen.h" - -#include // for move, reverse -#include // for rng seed -#include // for size_t, mbsrtowcs, wcsrtombs -#include // for towupper -#include // for make_unique -#include // for mt19937, uniform_real_distribution -#include // for invalid_argument, out_of_range - - -using namespace NameGen; - - -static std::mt19937 rng(std::chrono::high_resolution_clock::now().time_since_epoch().count()); - - -// https://isocpp.org/wiki/faq/ctors#static-init-order -// Avoid the "static initialization order fiasco" -const std::unordered_map>& Generator::SymbolMap() -{ - static auto* const symbols = new std::unordered_map>({ - { - "s", { - "ach", "ack", "ad", "age", "ald", "ale", "an", "ang", "ar", "ard", - "as", "ash", "at", "ath", "augh", "aw", "ban", "bel", "bur", "cer", - "cha", "che", "dan", "dar", "del", "den", "dra", "dyn", "ech", "eld", - "elm", "em", "en", "end", "eng", "enth", "er", "ess", "est", "et", - "gar", "gha", "hat", "hin", "hon", "ia", "ight", "ild", "im", "ina", - "ine", "ing", "ir", "is", "iss", "it", "kal", "kel", "kim", "kin", - "ler", "lor", "lye", "mor", "mos", "nal", "ny", "nys", "old", "om", - "on", "or", "orm", "os", "ough", "per", "pol", "qua", "que", "rad", - "rak", "ran", "ray", "ril", "ris", "rod", "roth", "ryn", "sam", - "say", "ser", "shy", "skel", "sul", "tai", "tan", "tas", "ther", - "tia", "tin", "ton", "tor", "tur", "um", "und", "unt", "urn", "usk", - "ust", "ver", "ves", "vor", "war", "wor", "yer" - } - }, - { - "v", { - "a", "e", "i", "o", "u", "y" - } - }, - { - "V", { - "a", "e", "i", "o", "u", "y", "ae", "ai", "au", "ay", "ea", "ee", - "ei", "eu", "ey", "ia", "ie", "oe", "oi", "oo", "ou", "ui" - } - }, - { - "c", { - "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", - "s", "t", "v", "w", "x", "y", "z" - } - }, - { - "B", { - "b", "bl", "br", "c", "ch", "chr", "cl", "cr", "d", "dr", "f", "g", - "h", "j", "k", "l", "ll", "m", "n", "p", "ph", "qu", "r", "rh", "s", - "sch", "sh", "sl", "sm", "sn", "st", "str", "sw", "t", "th", "thr", - "tr", "v", "w", "wh", "y", "z", "zh" - } - }, - { - "C", { - "b", "c", "ch", "ck", "d", "f", "g", "gh", "h", "k", "l", "ld", "ll", - "lt", "m", "n", "nd", "nn", "nt", "p", "ph", "q", "r", "rd", "rr", - "rt", "s", "sh", "ss", "st", "t", "th", "v", "w", "y", "z" - } - }, - { - "i", { - "air", "ankle", "ball", "beef", "bone", "bum", "bumble", "bump", - "cheese", "clod", "clot", "clown", "corn", "dip", "dolt", "doof", - "dork", "dumb", "face", "finger", "foot", "fumble", "goof", - "grumble", "head", "knock", "knocker", "knuckle", "loaf", "lump", - "lunk", "meat", "muck", "munch", "nit", "numb", "pin", "puff", - "skull", "snark", "sneeze", "thimble", "twerp", "twit", "wad", - "wimp", "wipe" - } - }, - { - "m", { - "baby", "booble", "bunker", "cuddle", "cuddly", "cutie", "doodle", - "foofie", "gooble", "honey", "kissie", "lover", "lovey", "moofie", - "mooglie", "moopie", "moopsie", "nookum", "poochie", "poof", - "poofie", "pookie", "schmoopie", "schnoogle", "schnookie", - "schnookum", "smooch", "smoochie", "smoosh", "snoogle", "snoogy", - "snookie", "snookum", "snuggy", "sweetie", "woogle", "woogy", - "wookie", "wookum", "wuddle", "wuddly", "wuggy", "wunny" - } - }, - { - "M", { - "boo", "bunch", "bunny", "cake", "cakes", "cute", "darling", - "dumpling", "dumplings", "face", "foof", "goo", "head", "kin", - "kins", "lips", "love", "mush", "pie", "poo", "pooh", "pook", "pums" - } - }, - { - "D", { - "b", "bl", "br", "cl", "d", "f", "fl", "fr", "g", "gh", "gl", "gr", - "h", "j", "k", "kl", "m", "n", "p", "th", "w" - } - }, - { - "d", { - "elch", "idiot", "ob", "og", "ok", "olph", "olt", "omph", "ong", - "onk", "oo", "oob", "oof", "oog", "ook", "ooz", "org", "ork", "orm", - "oron", "ub", "uck", "ug", "ulf", "ult", "um", "umb", "ump", "umph", - "un", "unb", "ung", "unk", "unph", "unt", "uzz" - } - } - }); - - return *symbols; -} - -Generator::Generator() -{ -} - - -Generator::Generator(std::vector>&& generators_) : - generators(std::move(generators_)) -{ -} - - -size_t Generator::combinations() -{ - size_t total = 1; - for (auto& g : generators) { - total *= g->combinations(); - } - return total; -} - - -size_t Generator::min() -{ - size_t final = 0; - for (auto& g : generators) { - final += g->min(); - } - return final; -} - - -size_t Generator::max() -{ - size_t final = 0; - for (auto& g : generators) { - final += g->max(); - } - return final; -} - - -std::string Generator::toString() { - std::string str; - for (auto& g : generators) { - str.append(g->toString()); - } - return str; -} - - -void Generator::add(std::unique_ptr&& g) -{ - generators.push_back(std::move(g)); -} - - -Random::Random() -{ -} - -Random::Random(std::vector>&& generators_) : - Generator(std::move(generators_)) -{ -} - -size_t Random::combinations() -{ - size_t total = 0; - for (auto& g : generators) { - total += g->combinations(); - } - return total ? total : 1; -} - -size_t Random::min() -{ - size_t final = -1; - for (auto& g : generators) { - size_t current = g->min(); - if (current < final) { - final = current; - } - } - return final; -} - -size_t Random::max() -{ - size_t final = 0; - for (auto& g : generators) { - size_t current = g->max(); - if (current > final) { - final = current; - } - } - return final; -} - - -std::string Random::toString() -{ - if (!generators.size()) { - return ""; - } - std::uniform_real_distribution distribution(0, generators.size() - 1); - int rnd = distribution(rng) + 0.5; - return generators[rnd]->toString(); -} - - -Sequence::Sequence() -{ -} - -Sequence::Sequence(std::vector>&& generators_) : - Generator(std::move(generators_)) -{ -} - -Literal::Literal(const std::string &value_) : - value(value_) -{ -} - -size_t Literal::combinations() -{ - return 1; -} - -size_t Literal::min() -{ - return value.size(); -} - -size_t Literal::max() -{ - return value.size(); -} - -std::string Literal::toString() -{ - return value; -} - -Reverser::Reverser(std::unique_ptr&& g) -{ - add(std::move(g)); -} - - -std::string Reverser::toString() -{ - std::wstring str = towstring(Generator::toString()); - std::reverse(str.begin(), str.end()); - return tostring(str); -} - -Capitalizer::Capitalizer(std::unique_ptr&& g) -{ - add(std::move(g)); -} - -std::string Capitalizer::toString() -{ - std::wstring str = towstring(Generator::toString()); - str[0] = std::towupper(str[0]); - return tostring(str); -} - - -Collapser::Collapser(std::unique_ptr&& g) -{ - add(std::move(g)); -} - -std::string Collapser::toString() -{ - std::wstring str = towstring(Generator::toString()); - std::wstring out; - int cnt = 0; - wchar_t pch = L'\0'; - for (auto ch : str) { - if (ch == pch) { - cnt++; - } else { - cnt = 0; - } - int mch = 2; - switch(ch) { - case 'a': - case 'h': - case 'i': - case 'j': - case 'q': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - mch = 1; - } - if (cnt < mch) { - out.push_back(ch); - } - pch = ch; - } - return tostring(out); -} - - -Generator::Generator(const std::string &pattern, bool collapse_triples) { - std::unique_ptr last; - - std::stack> stack; - std::unique_ptr top = std::unique_ptr(); - - for (auto c : pattern) { - switch (c) { - case '<': - stack.push(std::move(top)); - top = std::unique_ptr(); - break; - case '(': - stack.push(std::move(top)); - top = std::unique_ptr(); - break; - case '>': - case ')': - if (stack.size() == 0) { - throw std::invalid_argument("Unbalanced brackets"); - } else if (c == '>' && top->type != group_types::symbol) { - throw std::invalid_argument("Unexpected '>' in pattern"); - } else if (c == ')' && top->type != group_types::literal) { - throw std::invalid_argument("Unexpected ')' in pattern"); - } - last = top->produce(); - top = std::move(stack.top()); - stack.pop(); - top->add(std::move(last)); - break; - case '|': - top->split(); - break; - case '!': - if (top->type == group_types::symbol) { - top->wrap(wrappers::capitalizer); - } else { - top->add(c); - } - break; - case '~': - if (top->type == group_types::symbol) { - top->wrap(wrappers::reverser); - } else { - top->add(c); - } - break; - default: - top->add(c); - break; - } - } - - if (stack.size() != 0) { - throw std::invalid_argument("Missing closing bracket"); - } - - std::unique_ptr g = top->produce(); - if (collapse_triples) { - g = std::unique_ptr(new Collapser(std::move(g))); - } - add(std::move(g)); -} - - -Generator::Group::Group(group_types_t type_) : - type(type_) -{ -} - -void Generator::Group::add(std::unique_ptr&& g) -{ - while (!wrappers.empty()) { - switch (wrappers.top()) { - case reverser: - g = std::unique_ptr(new Reverser(std::move(g))); - break; - case capitalizer: - g = std::unique_ptr(new Capitalizer(std::move(g))); - break; - } - wrappers.pop(); - } - if (set.size() == 0) { - set.push_back(std::unique_ptr()); - } - set.back()->add(std::move(g)); -} - -void Generator::Group::add(char c) -{ - std::string value(1, c); - std::unique_ptr g = std::unique_ptr(); - g->add(std::unique_ptr(new Literal(value))); - Group::add(std::move(g)); -} - -std::unique_ptr Generator::Group::produce() -{ - switch (set.size()) { - case 0: - return std::unique_ptr(new Literal("")); - case 1: - return std::move(*set.begin()); - default: - return std::unique_ptr(new Random(std::move(set))); - } -} - -void Generator::Group::split() -{ - if (set.size() == 0) { - set.push_back(std::unique_ptr()); - } - set.push_back(std::unique_ptr()); -} - -void Generator::Group::wrap(wrappers_t type) -{ - wrappers.push(type); -} - -Generator::GroupSymbol::GroupSymbol() : - Group(group_types::symbol) -{ -} - -void Generator::GroupSymbol::add(char c) -{ - std::string value(1, c); - std::unique_ptr g = std::unique_ptr(); - try { - static const auto& symbols = SymbolMap(); - for (const auto& s : symbols.at(value)) { - g->add(std::unique_ptr(new Literal(s))); - } - } catch (const std::out_of_range&) { - g->add(std::unique_ptr(new Literal(value))); - } - Group::add(std::move(g)); -} - -Generator::GroupLiteral::GroupLiteral() : - Group(group_types::literal) -{ -} - -std::wstring towstring(const std::string & s) -{ - const char *cs = s.c_str(); - const size_t wn = std::mbsrtowcs(nullptr, &cs, 0, nullptr); - - if (wn == static_cast(-1)) { - return L""; - } - - std::vector buf(wn); - cs = s.c_str(); - const size_t wn_again = std::mbsrtowcs(buf.data(), &cs, wn, nullptr); - - if (wn_again == static_cast(-1)) { - return L""; - } - - return std::wstring(buf.data(), wn); -} - -std::string tostring(const std::wstring & s) -{ - const wchar_t *cs = s.c_str(); - const size_t wn = std::wcsrtombs(nullptr, &cs, 0, nullptr); - - if (wn == static_cast(-1)) { - return ""; - } - - std::vector buf(wn); - const size_t wn_again = std::wcsrtombs(buf.data(), &cs, wn, nullptr); - - if (wn_again == static_cast(-1)) { - return ""; - } - - return std::string(buf.data(), wn); -} diff --git a/common/namegenerator/namegen.h b/common/namegenerator/namegen.h deleted file mode 100644 index 4ddcf1bf5..000000000 --- a/common/namegenerator/namegen.h +++ /dev/null @@ -1,269 +0,0 @@ -/** - * - * @file A fantasy name generator library. - * @version 1.0.1 - * @license Public Domain - * @author German M. Bravo (Kronuz) - * - * This library is designed after the RinkWorks Fantasy Name Generator. - * @see http://www.rinkworks.com/namegen/ - * - * @example - * NameGen::Generator generator("sV'i"); - * generator.toString(); // Returns a new name each call with produce() - * // => "entheu'loaf" - * - * ## Pattern Syntax - * - * The compile() function creates a name generator based on an input - * pattern. The letters s, v, V, c, B, C, i, m, M, D, and d represent - * different types of random replacements. Everything else is produced - * literally. - * - * s - generic syllable - * v - vowel - * V - vowel or vowel combination - * c - consonant - * B - consonant or consonant combination suitable for beginning a word - * C - consonant or consonant combination suitable anywhere in a word - * i - insult - * m - mushy name - * M - mushy name ending - * D - consonant suited for a stupid person's name - * d - syllable suited for a stupid person's name (begins with a vowel) - * - * All characters between parenthesis () are produced literally. For - * example, the pattern "s(dim)", produces a random generic syllable - * followed by "dim". - * - * Characters between angle brackets <> produce patterns from the table - * above. Imagine the entire pattern is wrapped in one of these. - * - * In both types of groupings, a vertical bar | denotes a random - * choice. Empty groups are allowed. For example, "(foo|bar)" produces - * either "foo" or "bar". The pattern "" produces a constant, - * vowel, or nothing at all. - * - * An exclamation point ! means to capitalize the component that - * follows it. For example, "!(foo)" will produce "Foo" and "v!s" will - * produce a lowercase vowel followed by a capitalized syllable, like - * "eRod". - * - * A tilde ~ means to reverse the letters of the component that - * follows it. For example, "~(foo)" will produce "oof". To reverse an - * entire template, wrap it in brackets. For example, to reverse - * "sV'i" as a whole use "~". The template "~sV'i" will only - * reverse the initial syllable. - * - * ## Internals - * - * A name generator is anything with a toString() method, including, - * importantly, strings themselves. The generator constructors - * (Random, Sequence) perform additional optimizations when *not* used - * with the `new` keyword: they may pass through a provided generator, - * combine provided generators, or even return a simple string. - * - * New pattern symbols added to Generator.symbols will automatically - * be used by the compiler. - */ - -#pragma once - -#include // for size_t -#include // for wstring -#include // for unique_ptr -#include // for stack -#include // for string -#include // for unordered_map -#include // for vector - - -namespace NameGen { - -// Middle Earth -#define MIDDLE_EARTH "(bil|bal|ban|hil|ham|hal|hol|hob|wil|me|or|ol|od|gor|for|fos|tol|ar|fin|ere|leo|vi|bi|bren|thor)(|go|orbis|apol|adur|mos|ri|i|na|ole|n)(|tur|axia|and|bo|gil|bin|bras|las|mac|grim|wise|l|lo|fo|co|ra|via|da|ne|ta|y|wen|thiel|phin|dir|dor|tor|rod|on|rdo|dis)" - -// Japanese Names (Constrained) -#define JAPANESE_NAMES_CONSTRAINED "(aka|aki|bashi|gawa|kawa|furu|fuku|fuji|hana|hara|haru|hashi|hira|hon|hoshi|ichi|iwa|kami|kawa|ki|kita|kuchi|kuro|marui|matsu|miya|mori|moto|mura|nabe|naka|nishi|no|da|ta|o|oo|oka|saka|saki|sawa|shita|shima|i|suzu|taka|take|to|toku|toyo|ue|wa|wara|wata|yama|yoshi|kei|ko|zawa|zen|sen|ao|gin|kin|ken|shiro|zaki|yuki|asa)(||||||||||bashi|gawa|kawa|furu|fuku|fuji|hana|hara|haru|hashi|hira|hon|hoshi|chi|wa|ka|kami|kawa|ki|kita|kuchi|kuro|marui|matsu|miya|mori|moto|mura|nabe|naka|nishi|no|da|ta|o|oo|oka|saka|saki|sawa|shita|shima|suzu|taka|take|to|toku|toyo|ue|wa|wara|wata|yama|yoshi|kei|ko|zawa|zen|sen|ao|gin|kin|ken|shiro|zaki|yuki|sa)" - -// Japanese Names (Diverse) -#define JAPANESE_NAMES_DIVERSE "(a|i|u|e|o|||||)(ka|ki|ki|ku|ku|ke|ke|ko|ko|sa|sa|sa|shi|shi|shi|su|su|se|so|ta|ta|chi|chi|tsu|te|to|na|ni|ni|nu|nu|ne|no|no|ha|hi|fu|fu|he|ho|ma|ma|ma|mi|mi|mi|mu|mu|mu|mu|me|mo|mo|mo|ya|yu|yu|yu|yo|ra|ra|ra|ri|ru|ru|ru|re|ro|ro|ro|wa|wa|wa|wa|wo|wo)(ka|ki|ki|ku|ku|ke|ke|ko|ko|sa|sa|sa|shi|shi|shi|su|su|se|so|ta|ta|chi|chi|tsu|te|to|na|ni|ni|nu|nu|ne|no|no|ha|hi|fu|fu|he|ho|ma|ma|ma|mi|mi|mi|mu|mu|mu|mu|me|mo|mo|mo|ya|yu|yu|yu|yo|ra|ra|ra|ri|ru|ru|ru|re|ro|ro|ro|wa|wa|wa|wa|wo|wo)(|(ka|ki|ki|ku|ku|ke|ke|ko|ko|sa|sa|sa|shi|shi|shi|su|su|se|so|ta|ta|chi|chi|tsu|te|to|na|ni|ni|nu|nu|ne|no|no|ha|hi|fu|fu|he|ho|ma|ma|ma|mi|mi|mi|mu|mu|mu|mu|me|mo|mo|mo|ya|yu|yu|yu|yo|ra|ra|ra|ri|ru|ru|ru|re|ro|ro|ro|wa|wa|wa|wa|wo|wo)|(ka|ki|ki|ku|ku|ke|ke|ko|ko|sa|sa|sa|shi|shi|shi|su|su|se|so|ta|ta|chi|chi|tsu|te|to|na|ni|ni|nu|nu|ne|no|no|ha|hi|fu|fu|he|ho|ma|ma|ma|mi|mi|mi|mu|mu|mu|mu|me|mo|mo|mo|ya|yu|yu|yu|yo|ra|ra|ra|ri|ru|ru|ru|re|ro|ro|ro|wa|wa|wa|wa|wo|wo)(|(ka|ki|ki|ku|ku|ke|ke|ko|ko|sa|sa|sa|shi|shi|shi|su|su|se|so|ta|ta|chi|chi|tsu|te|to|na|ni|ni|nu|nu|ne|no|no|ha|hi|fu|fu|he|ho|ma|ma|ma|mi|mi|mi|mu|mu|mu|mu|me|mo|mo|mo|ya|yu|yu|yu|yo|ra|ra|ra|ri|ru|ru|ru|re|ro|ro|ro|wa|wa|wa|wa|wo|wo)))(|||n)" - -// Chinese Names -#define CHINESE_NAMES "(zh|x|q|sh|h)(ao|ian|uo|ou|ia)(|(l|w|c|p|b|m)(ao|ian|uo|ou|ia)(|n)|-(l|w|c|p|b|m)(ao|ian|uo|ou|ia)(|(d|j|q|l)(a|ai|iu|ao|i)))" - -// Greek Names -#define GREEK_NAMES "(tia)|s(os)|Bc(ios)|Bv(ios|os)>" - -// Hawaiian Names (1) -#define HAWAIIAN_NAMES_1 "((h|k|l|m|n|p|w|')|)(a|e|i|o|u)((h|k|l|m|n|p|w|')|)(a|e|i|o|u)(((h|k|l|m|n|p|w|')|)(a|e|i|o|u)|)(((h|k|l|m|n|p|w|')|)(a|e|i|o|u)|)(((h|k|l|m|n|p|w|')|)(a|e|i|o|u)|)(((h|k|l|m|n|p|w|')|)(a|e|i|o|u)|)" - -// Hawaiian Names (2) -#define HAWAIIAN_NAMES_2 "((h|k|l|m|n|p|w|)(a|e|i|o|u|a'|e'|i'|o'|u'|ae|ai|ao|au|oi|ou|eu|ei)(k|l|m|n|p|)|)(h|k|l|m|n|p|w|)(a|e|i|o|u|a'|e'|i'|o'|u'|ae|ai|ao|au|oi|ou|eu|ei)(k|l|m|n|p|)" - -// Old Latin Place Names -#define OLD_LATIN_PLACE_NAMES "sv(nia|lia|cia|sia)" - -// Dragons (Pern) -#define DRAGONS_PERN "<|>>(th)" - -// Dragon Riders -#define DRAGON_RIDERS "c'" - -// Pokemon -#define POKEMON "v(mon|chu|zard|rtle)" - -// Fantasy (Vowels, R, etc.) -#define FANTASY_VOWELS_R "(|(|s|h|ty|ph|r))(i|ae|ya|ae|eu|ia|i|eo|ai|a)(lo|la|sri|da|dai|the|sty|lae|due|li|lly|ri|na|ral|sur|rith)(|(su|nu|sti|llo|ria|))(|(n|ra|p|m|lis|cal|deu|dil|suir|phos|ru|dru|rin|raap|rgue))" - -// Fantasy (S, A, etc.) -#define FANTASY_S_A "(cham|chan|jisk|lis|frich|isk|lass|mind|sond|sund|ass|chad|lirt|und|mar|lis|il|)(jask|ast|ista|adar|irra|im|ossa|assa|osia|ilsa|)(|(an|ya|la|sta|sda|sya|st|nya))" - -// Fantasy (H, L, etc.) -#define FANTASY_H_L "(ch|ch't|sh|cal|val|ell|har|shar|shal|rel|laen|ral|jh't|alr|ch|ch't|av)(|(is|al|ow|ish|ul|el|ar|iel))(aren|aeish|aith|even|adur|ulash|alith|atar|aia|erin|aera|ael|ira|iel|ahur|ishul)" - -// Fantasy (N, L, etc.) -#define FANTASY_N_L "(ethr|qil|mal|er|eal|far|fil|fir|ing|ind|il|lam|quel|quar|quan|qar|pal|mal|yar|um|ard|enn|ey)(|(|on|us|un|ar|as|en|ir|ur|at|ol|al|an))(uard|wen|arn|on|il|ie|on|iel|rion|rian|an|ista|rion|rian|cil|mol|yon)" - -// Fantasy (K, N, etc.) -#define FANTASY_K_N "(taith|kach|chak|kank|kjar|rak|kan|kaj|tach|rskal|kjol|jok|jor|jad|kot|kon|knir|kror|kol|tul|rhaok|rhak|krol|jan|kag|ryr)(|in|or|an|ar|och|un|mar|yk|ja|arn|ir|ros|ror)(|(mund|ard|arn|karr|chim|kos|rir|arl|kni|var|an|in|ir|a|i|as))" - -// Fantasy (J, G, Z, etc.) -#define FANTASY_J_G_Z "(aj|ch|etz|etzl|tz|kal|gahn|kab|aj|izl|ts|jaj|lan|kach|chaj|qaq|jol|ix|az|biq|nam)(|(|aw|al|yes|il|ay|en|tom||oj|im|ol|aj|an|as))(aj|am|al|aqa|ende|elja|ich|ak|ix|in|ak|al|il|ek|ij|os|al|im)" - -// Fantasy (K, J, Y, etc.) -#define FANTASY_K_J_Y "(yi|shu|a|be|na|chi|cha|cho|ksa|yi|shu)(th|dd|jj|sh|rr|mk|n|rk|y|jj|th)(us|ash|eni|akra|nai|ral|ect|are|el|urru|aja|al|uz|ict|arja|ichi|ural|iru|aki|esh)" - -// Fantasy (S, E, etc.) -#define FANTASY_S_E "(syth|sith|srr|sen|yth|ssen|then|fen|ssth|kel|syn|est|bess|inth|nen|tin|cor|sv|iss|ith|sen|slar|ssil|sthen|svis|s|ss|s|ss)(|(tys|eus|yn|of|es|en|ath|elth|al|ell|ka|ith|yrrl|is|isl|yr|ast|iy))(us|yn|en|ens|ra|rg|le|en|ith|ast|zon|in|yn|ys)" - - - class Generator - { - typedef enum wrappers { - capitalizer, - reverser - } wrappers_t; - - typedef enum group_types { - symbol, - literal - } group_types_t; - - - class Group { - std::stack wrappers; - std::vector> set; - - public: - group_types_t type; - - Group(group_types_t type_); - virtual ~Group() { } - - std::unique_ptr produce(); - void split(); - void wrap(wrappers_t type); - void add(std::unique_ptr&& g); - - virtual void add(char c); - }; - - - class GroupSymbol : public Group { - public: - GroupSymbol(); - void add(char c); - }; - - - class GroupLiteral : public Group { - public: - GroupLiteral(); - }; - - protected: - std::vector> generators; - - public: - static const std::unordered_map>& SymbolMap(); - - Generator(); - Generator(const std::string& pattern, bool collapse_triples=true); - Generator(std::vector>&& generators_); - - virtual ~Generator() = default; - - virtual size_t combinations(); - virtual size_t min(); - virtual size_t max(); - virtual std::string toString(); - - void add(std::unique_ptr&& g); - }; - - - class Random : public Generator - { - public: - Random(); - Random(std::vector>&& generators_); - - size_t combinations(); - size_t min(); - size_t max(); - std::string toString(); - }; - - - class Sequence : public Generator - { - public: - Sequence(); - Sequence(std::vector>&& generators_); - }; - - - class Literal : public Generator - { - std::string value; - - public: - Literal(const std::string& value_); - - size_t combinations(); - size_t min(); - size_t max(); - std::string toString(); - }; - - - class Reverser : public Generator { - public: - Reverser(std::unique_ptr&& g); - - std::string toString(); - }; - - - class Capitalizer : public Generator - { - public: - Capitalizer(std::unique_ptr&& g); - - std::string toString(); - }; - - - class Collapser : public Generator - { - public: - Collapser(std::unique_ptr&& g); - - std::string toString(); - }; - -} - -std::wstring towstring(const std::string& s); -std::string tostring(const std::wstring& s); \ No newline at end of file diff --git a/world/client.cpp b/world/client.cpp index 424265935..ebc01e03e 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -46,7 +46,6 @@ #include "clientlist.h" #include "wguild_mgr.h" #include "sof_char_create_data.h" -#include "../common/namegenerator/namegen.h" #include #include @@ -534,14 +533,80 @@ bool Client::HandleNameApprovalPacket(const EQApplicationPacket *app) return true; } -bool Client::HandleGenerateRandomNamePacket(const EQApplicationPacket *app) -{ - NameGen::Generator generator("!Bvss"); - std::string random_name = generator.toString(); +bool Client::HandleGenerateRandomNamePacket(const EQApplicationPacket *app) { + // creates up to a 10 char name + char vowels[18]="aeiouyaeiouaeioe"; + char cons[48]="bcdfghjklmnpqrstvwxzybcdgklmnprstvwbcdgkpstrkd"; + char rndname[17]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + char paircons[33]="ngrkndstshthphsktrdrbrgrfrclcr"; + int rndnum=emu_random.Int(0, 75),n=1; + bool dlc=false; + bool vwl=false; + bool dbl=false; + if (rndnum>63) + { // rndnum is 0 - 75 where 64-75 is cons pair, 17-63 is cons, 0-16 is vowel + rndnum=(rndnum-61)*2; // name can't start with "ng" "nd" or "rk" + rndname[0]=paircons[rndnum]; + rndname[1]=paircons[rndnum+1]; + n=2; + } + else if (rndnum>16) + { + rndnum-=17; + rndname[0]=cons[rndnum]; + } + else + { + rndname[0]=vowels[rndnum]; + vwl=true; + } + int namlen=emu_random.Int(5, 10); + for (int i=n;i46) + { // pick a cons pair + if (i>namlen-3) // last 2 chars in name? + { // name can only end in cons pair "rk" "st" "sh" "th" "ph" "sk" "nd" or "ng" + rndnum=emu_random.Int(0, 7)*2; + } + else + { // pick any from the set + rndnum=(rndnum-47)*2; + } + rndname[i]=paircons[rndnum]; + rndname[i+1]=paircons[rndnum+1]; + dlc=true; // flag keeps second letter from being doubled below + i+=1; + } + else + { // select a single cons + rndname[i]=cons[rndnum]; + } + } + else + { // select a vowel + rndname[i]=vowels[emu_random.Int(0, 16)]; + } + vwl=!vwl; + if (!dbl && !dlc) + { // one chance at double letters in name + if (!emu_random.Int(0, i+9)) // chances decrease towards end of name + { + rndname[i+1]=rndname[i]; + dbl=true; + i+=1; + } + } + } - auto *ngs = (NameGeneration_Struct *) app->pBuffer; - memset(ngs->name, 0, 64); - strcpy(ngs->name, random_name.c_str()); + rndname[0]=toupper(rndname[0]); + NameGeneration_Struct* ngs = (NameGeneration_Struct*)app->pBuffer; + memset(ngs->name,0,64); + strcpy(ngs->name,rndname); QueuePacket(app); return true; From bcd62b76c4a97b8b0e27bd4c974147dfe999a60e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 18:12:25 -0500 Subject: [PATCH 107/272] Fix all expansion enabled filtering [skip ci] --- common/content/world_content_service.h | 3 ++- common/repositories/criteria/content_filter_criteria.h | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index bfed118c9..89abba257 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -25,7 +25,8 @@ #include namespace Expansion { - static const int EXPANSION_ALL = -1; + static const int EXPANSION_ALL = -1; + static const int EXPANSION_FILTER_MAX = 99; enum ExpansionNumber { Classic = 0, diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 1fd5f2267..5a0770fe5 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -34,17 +34,22 @@ namespace ContentFilterCriteria { table_prefix = table_prefix + "."; } + int current_expansion_filter_criteria = content_service.GetCurrentExpansion(); + if (current_expansion_filter_criteria == Expansion::EXPANSION_ALL) { + current_expansion_filter_criteria = Expansion::EXPANSION_FILTER_MAX; + } + criteria += fmt::format( " AND ({}min_expansion <= {} OR {}min_expansion = 0)", table_prefix, - content_service.GetCurrentExpansion(), + current_expansion_filter_criteria, table_prefix ); criteria += fmt::format( " AND ({}max_expansion >= {} OR {}max_expansion = 0)", table_prefix, - content_service.GetCurrentExpansion(), + current_expansion_filter_criteria, table_prefix ); From b8c44ee41ba9e6c1c7cf2c345f49d2843c9a4c75 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 18:19:59 -0500 Subject: [PATCH 108/272] Fix container interaction [skip ci] --- zone/object.cpp | 7 ++++--- zone/zonedb.cpp | 36 +++++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/zone/object.cpp b/zone/object.cpp index aa0564c9f..21ce0721a 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -652,9 +652,10 @@ uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& ob return 0; } - // Save container contents, if container - if (inst && inst->IsType(EQEmu::item::ItemClassBag)) - SaveWorldContainer(object.zone_id, database_id, inst); + // Save container contents, if container + if (inst && inst->IsType(EQEmu::item::ItemClassBag)) { + SaveWorldContainer(object.zone_id, database_id, inst); + } return database_id; } diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index e27ff5636..a1313eacd 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -755,27 +755,37 @@ void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQ } } - std::string query = StringFormat("REPLACE INTO object_contents " - "(zoneid, parentid, bagidx, itemid, charges, " - "augslot1, augslot2, augslot3, augslot4, augslot5, augslot6, droptime) " - "VALUES (%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, now())", - zone_id, parent_id, index, item_id, inst->GetCharges(), - augslot[0], augslot[1], augslot[2], augslot[3], augslot[4], augslot[5]); - auto results = QueryDatabase(query); - if (!results.Success()) - LogError("Error in ZoneDatabase::SaveWorldContainer: [{}]", results.ErrorMessage().c_str()); + std::string query = StringFormat( + "REPLACE INTO object_contents " + "(zoneid, parentid, bagidx, itemid, charges, " + "augslot1, augslot2, augslot3, augslot4, augslot5, augslot6, droptime) " + "VALUES (%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, now())", + zone_id, parent_id, index, item_id, inst->GetCharges(), + augslot[0], augslot[1], augslot[2], augslot[3], augslot[4], augslot[5] + ); - } + auto results = database.QueryDatabase(query); + if (!results.Success()) { + LogError("Error in ZoneDatabase::SaveWorldContainer: [{}]", results.ErrorMessage().c_str()); + } + + } } // Remove all child objects inside a world container (i.e., forge, bag dropped to ground, etc) void ZoneDatabase::DeleteWorldContainer(uint32 parent_id, uint32 zone_id) { - std::string query = StringFormat("DELETE FROM object_contents WHERE parentid = %i AND zoneid = %i", parent_id, zone_id); - auto results = QueryDatabase(query); - if (!results.Success()) + std::string query = StringFormat( + "DELETE FROM object_contents WHERE parentid = %i AND zoneid = %i", + parent_id, + zone_id + ); + + auto results = database.QueryDatabase(query); + if (!results.Success()) { LogError("Error in ZoneDatabase::DeleteWorldContainer: [{}]", results.ErrorMessage().c_str()); + } } From 093509baa9835ac769f5e3ab0185d70e2efa1e70 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 19:46:19 -0500 Subject: [PATCH 109/272] Few adjustments [skip ci[ --- common/database_instances.cpp | 5 +++-- world/main.cpp | 2 ++ zone/client.cpp | 2 +- zone/client_process.cpp | 8 ++++---- zone/command.cpp | 22 +++++++++++----------- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 064cf6db4..02fa2e82b 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -34,6 +34,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define strcasecmp _stricmp #else #include "unix.h" +#include "../zone/zonedb.h" #include #include #endif @@ -319,10 +320,10 @@ uint16 Database::GetInstanceID(const char* zone, uint32 character_id, int16 vers "AND instance_list.id = instance_list_player.id " "AND instance_list_player.charid = %u " "LIMIT 1 ", - GetZoneID(zone), + content_db.GetZoneID(zone), version, character_id - ); + ); auto results = QueryDatabase(query); if (!results.Success()) diff --git a/world/main.cpp b/world/main.cpp index f4707e43f..3fd3ef555 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -327,6 +327,8 @@ int main(int argc, char** argv) { database.PurgeAllDeletedDataBuckets(); LogInfo("Loading zones"); + // Load to both context for now... this needs to be cleaned up + database.LoadZoneNames(); content_db.LoadZoneNames(); LogInfo("Clearing groups"); database.ClearGroup(); diff --git a/zone/client.cpp b/zone/client.cpp index 822ea7e4f..ee48252f1 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -9298,7 +9298,7 @@ void Client::SetBotOption(BotOwnerOption boo, bool flag) { void Client::SendToGuildHall() { std::string zone_short_name = "guildhall"; - uint32 zone_id = database.GetZoneID(zone_short_name.c_str()); + uint32 zone_id = content_db.GetZoneID(zone_short_name.c_str()); if (zone_id == 0) { return; } diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 9b7a0ecce..b380ae497 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -258,7 +258,7 @@ bool Client::Process() { if (mob_close_scan_timer.Check()) { entity_list.ScanCloseMobs(close_mobs, this); } - + bool may_use_attacks = false; /* Things which prevent us from attacking: @@ -757,7 +757,7 @@ void Client::BulkSendInventoryItems() if (ob.tellp() == last_pos) LogInventory("Serialization failed on item slot [{}] during BulkSendInventoryItems. Item skipped", slot_id); - + last_pos = ob.tellp(); } @@ -836,7 +836,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { else { cur_fac_level = GetModCharacterFactionLevel(fac); } - + if (cur_fac_level < ml.faction_required) continue; @@ -1170,7 +1170,7 @@ void Client::OPMoveCoin(const EQApplicationPacket* app) { return; } - + // could just do a range, but this is clearer and explicit if ( diff --git a/zone/command.cpp b/zone/command.cpp index dcf60de0d..317667168 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -24,7 +24,7 @@ 2. Add the function in this file. 3. In the command_init function you must add a call to command_add for your function. - + Notes: If you want an alias for your command, add an entry to the `command_settings` table in your database. The access level you set with command_add is the default setting if the command isn't @@ -497,7 +497,7 @@ int command_init(void) working_cl_iter.first.c_str() ); } - + continue; } @@ -507,7 +507,7 @@ int command_init(void) working_cl_iter.first.c_str(), cs_iter->second.first ); - + if (cs_iter->second.second.empty()) { continue; } @@ -522,7 +522,7 @@ int command_init(void) "command_init(): Warning: Alias [{}] already exists as a command - skipping!", alias_iter.c_str() ); - + continue; } @@ -1289,7 +1289,7 @@ void command_peqzone(Client *c, const Seperator *sep) if (sep->IsNumber(1)) { zoneid = atoi(sep->arg[1]); - destzone = database.GetPEQZone(zoneid, 0); + destzone = content_db.GetPEQZone(zoneid, 0); if(destzone == 0){ c->Message(Chat::Red, "You cannot use this command to enter that zone!"); return; @@ -1307,7 +1307,7 @@ void command_peqzone(Client *c, const Seperator *sep) } else { zoneid = content_db.GetZoneID(sep->arg[1]); - destzone = database.GetPEQZone(zoneid, 0); + destzone = content_db.GetPEQZone(zoneid, 0); if(zoneid == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); return; @@ -4245,7 +4245,7 @@ void command_reloadworld(Client *c, const Seperator *sep) c->Message(Chat::White, "Reloading quest cache worldwide."); else c->Message(Chat::White, "Reloading quest cache and repopping zones worldwide."); - + auto pack = new ServerPacket(ServerOP_ReloadWorld, sizeof(ReloadWorld_Struct)); ReloadWorld_Struct* RW = (ReloadWorld_Struct*) pack->pBuffer; RW->Option = world_repop; @@ -6578,7 +6578,7 @@ void command_editmassrespawn(Client* c, const Seperator* sep) if (change_respawn_seconds > 0) { if (change_apply) { - + results = database.QueryDatabase( fmt::format( SQL( @@ -7949,7 +7949,7 @@ void command_npceditmass(Client *c, const Seperator *sep) c->Message(Chat::White, "#npceditmass search_column [exact_match: =]search_value change_column change_value (apply)"); return; } - + std::string query = SQL( SELECT COLUMN_NAME @@ -8070,7 +8070,7 @@ void command_npceditmass(Client *c, const Seperator *sep) continue; } } - + c->Message( Chat::Yellow, fmt::format( @@ -13413,7 +13413,7 @@ void command_bot(Client *c, const Seperator *sep) bot_message = bot_message.substr(bot_message.find_first_not_of("#bot")); bot_message[0] = BOT_COMMAND_CHAR; } - + if (bot_command_dispatch(c, bot_message.c_str()) == -2) { if (parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) { int i = parse->EventPlayer(EVENT_BOT_COMMAND, c, bot_message, 0); From 74c878a4810d573e14fd00b19b459311bf7d9449 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 19:49:20 -0500 Subject: [PATCH 110/272] Fix [skip ci] --- world/main.cpp | 2 +- zone/main.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/world/main.cpp b/world/main.cpp index 3fd3ef555..0a472551c 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -327,7 +327,7 @@ int main(int argc, char** argv) { database.PurgeAllDeletedDataBuckets(); LogInfo("Loading zones"); - // Load to both context for now... this needs to be cleaned up + // Load to both context for now... this needs to be cleaned up and is not the right way to do this database.LoadZoneNames(); content_db.LoadZoneNames(); LogInfo("Clearing groups"); diff --git a/zone/main.cpp b/zone/main.cpp index 166332a69..fad879ad8 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -313,6 +313,8 @@ int main(int argc, char** argv) { } LogInfo("Loading zone names"); + // Load to both context for now... this needs to be cleaned up and is not the right way to do this + database.LoadZoneNames(); content_db.LoadZoneNames(); LogInfo("Loading items"); From df43a23d983e2b387354e9e409fe693bc7c1ef68 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 19:52:56 -0500 Subject: [PATCH 111/272] Another adjustment [skip ci] --- common/database.h | 3 ++- world/main.cpp | 6 ++++-- zone/main.cpp | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/common/database.h b/common/database.h index 99775180d..068b0414e 100644 --- a/common/database.h +++ b/common/database.h @@ -275,9 +275,10 @@ public: /* EQEmuLogSys */ void LoadLogSettings(EQEmuLogSys::LogSettings* log_settings); -private: std::map zonename_array; +private: + Mutex Mvarcache; VarCache_Struct varcache; diff --git a/world/main.cpp b/world/main.cpp index 0a472551c..27ce48797 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -327,9 +327,11 @@ int main(int argc, char** argv) { database.PurgeAllDeletedDataBuckets(); LogInfo("Loading zones"); - // Load to both context for now... this needs to be cleaned up and is not the right way to do this - database.LoadZoneNames(); + + // Load to both context for now... this needs to be cleaned up as this has always been cludgy content_db.LoadZoneNames(); + database.zonename_array = content_db.zonename_array; + LogInfo("Clearing groups"); database.ClearGroup(); LogInfo("Clearing raids"); diff --git a/zone/main.cpp b/zone/main.cpp index fad879ad8..7904983fb 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -313,9 +313,10 @@ int main(int argc, char** argv) { } LogInfo("Loading zone names"); - // Load to both context for now... this needs to be cleaned up and is not the right way to do this - database.LoadZoneNames(); + + // Load to both context for now... this needs to be cleaned up as this has always been cludgy content_db.LoadZoneNames(); + database.zonename_array = content_db.zonename_array; LogInfo("Loading items"); if (!database.LoadItems(hotfix_name)) { From 472c0cd19683ad8b0f1f0a212773c6053d2350a7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 20:03:34 -0500 Subject: [PATCH 112/272] More tweaks [skip ci] --- shared_memory/main.cpp | 2 +- world/world_server_command_handler.cpp | 2 +- zone/main.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index cd516017d..d9d19205b 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -171,7 +171,7 @@ int main(int argc, char **argv) LogInfo( "Current expansion is [{}] ({})", content_service.GetCurrentExpansion(), - Expansion::ExpansionName[content_service.GetCurrentExpansion()] + content_service.GetCurrentExpansionName() ); std::string hotfix_name = ""; diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 258221c9c..169c2c0bc 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -326,7 +326,7 @@ namespace WorldserverCommandHandler { LogInfo( "Current expansion is [{}] ({}) is Velious Enabled [{}] Criteria [{}]", content_service.GetCurrentExpansion(), - Expansion::ExpansionName[content_service.GetCurrentExpansion()], + content_service.GetCurrentExpansionName(), content_service.IsTheScarsOfVeliousEnabled() ? "true" : "false", ContentFilterCriteria::apply() ); diff --git a/zone/main.cpp b/zone/main.cpp index 7904983fb..aacf01430 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -313,7 +313,7 @@ int main(int argc, char** argv) { } LogInfo("Loading zone names"); - + // Load to both context for now... this needs to be cleaned up as this has always been cludgy content_db.LoadZoneNames(); database.zonename_array = content_db.zonename_array; From e4748a01e091109dc15a238aefc8950a410ddd77 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 21:50:00 -0500 Subject: [PATCH 113/272] Fix tradeskill combine logic [skip ci] --- zone/tradeskills.cpp | 206 +++++++++++++++++++++++++++++-------------- 1 file changed, 142 insertions(+), 64 deletions(-) diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 6c5cea48d..71374bc75 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -258,27 +258,38 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob return; } - EQEmu::InventoryProfile& user_inv = user->GetInv(); - PlayerProfile_Struct& user_pp = user->GetPP(); - EQEmu::ItemInstance* container = nullptr; - EQEmu::ItemInstance* inst = nullptr; - uint8 c_type = 0xE8; - uint32 some_id = 0; - bool worldcontainer=false; + LogTradeskills( + "[HandleCombine] container_slot [{}] guildtribute_slot [{}]", + in_combine->container_slot, + in_combine->guildtribute_slot + ); + + EQEmu::InventoryProfile &user_inv = user->GetInv(); + PlayerProfile_Struct &user_pp = user->GetPP(); + EQEmu::ItemInstance *container = nullptr; + EQEmu::ItemInstance *inst = nullptr; + + uint8 c_type = 0xE8; + uint32 some_id = 0; + bool worldcontainer = false; if (in_combine->container_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { if(!worldo) { - user->Message(Chat::Red, "Error: Server is not aware of the tradeskill container you are attempting to use"); + user->Message( + Chat::Red, + "Error: Server is not aware of the tradeskill container you are attempting to use" + ); return; } - c_type = worldo->m_type; - inst = worldo->m_inst; - worldcontainer=true; + c_type = worldo->m_type; + inst = worldo->m_inst; + worldcontainer = true; // if we're a world container with an item, use that too if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); - if (item) + const EQEmu::ItemData *item = inst->GetItem(); + if (item) { some_id = item->ID; + } } } else { @@ -299,16 +310,30 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob container = inst; if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeTransformationmold) { - const EQEmu::ItemInstance* inst = container->GetItem(0); - bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation); + const EQEmu::ItemInstance *inst = container->GetItem(0); + bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation); if (inst && EQEmu::ItemInstance::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) { - const EQEmu::ItemData* new_weapon = inst->GetItem(); + const EQEmu::ItemData *new_weapon = inst->GetItem(); user->DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(in_combine->container_slot, 0), 0, true); container->Clear(); - user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::invslot::slotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2)); + user->SummonItem( + new_weapon->ID, + inst->GetCharges(), + inst->GetAugmentItemID(0), + inst->GetAugmentItemID(1), + inst->GetAugmentItemID(2), + inst->GetAugmentItemID(3), + inst->GetAugmentItemID(4), + inst->GetAugmentItemID(5), + inst->IsAttuned(), + EQEmu::invslot::slotCursor, + container->GetItem()->Icon, + atoi(container->GetItem()->IDFile + 2) + ); user->MessageString(Chat::LightBlue, TRANSFORM_COMPLETE, inst->GetItem()->Name); - if (RuleB(Inventory, DeleteTransformationMold)) + if (RuleB(Inventory, DeleteTransformationMold)) { user->DeleteItemInInventory(in_combine->container_slot, 0, true); + } } else if (inst) { user->MessageString(Chat::LightBlue, TRANSFORM_FAILED, inst->GetItem()->Name); @@ -316,10 +341,20 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); user->QueuePacket(outapp); safe_delete(outapp); + + LogTradeskills( + "[HandleCombine] inst_item [{}] container_item [{}]", + inst->GetItem()->ID, + container->GetItem()->ID + ); + return; } if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeDetransformationmold) { + + LogTradeskillsDetail("[HandleCombine] Check 1"); + const EQEmu::ItemInstance* inst = container->GetItem(0); if (inst && inst->GetOrnamentationIcon() && inst->GetOrnamentationIcon()) { const EQEmu::ItemData* new_weapon = inst->GetItem(); @@ -339,6 +374,9 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob DBTradeskillRecipe_Struct spec; if (!content_db.GetTradeRecipe(container, c_type, some_id, user->CharacterID(), &spec)) { + + LogTradeskillsDetail("[HandleCombine] Check 2"); + user->MessageString(Chat::Emote,TRADESKILL_NOCOMBINE); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); user->QueuePacket(outapp); @@ -352,7 +390,10 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob // bit 2 (0x02): can try to experiment but not useable for auto-combine until learnt // bit 5 (0x10): no learn message, use unlisted flag to prevent it showing up on search // bit 6 (0x20): unlisted recipe flag - if ((spec.must_learn&0xF) == 1 && !spec.has_learnt) { + if ((spec.must_learn & 0xF) == 1 && !spec.has_learnt) { + + LogTradeskillsDetail("[HandleCombine] Check 3"); + // Made up message for the client. Just giving a DNC is the other option. user->Message(Chat::LightBlue, "You need to learn how to combine these first."); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); @@ -362,6 +403,9 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob } // Character does not have the required skill. if(spec.skill_needed > 0 && user->GetSkill(spec.tradeskill) < spec.skill_needed ) { + + LogTradeskillsDetail("Check 4"); + // Notify client. user->Message(Chat::LightBlue, "You are not skilled enough."); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); @@ -441,18 +485,21 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob // Replace the container on success if required. // - if(success && spec.replace_container) { - if(worldcontainer){ + if (success && spec.replace_container) { + if (worldcontainer) { //should report this error, but we dont have the recipe ID, so its not very useful LogError("Replace container combine executed in a world container"); } - else + else { user->DeleteItemInInventory(in_combine->container_slot, 0, true); + } } - if (success) + if (success) { parse->EventPlayer(EVENT_COMBINE_SUCCESS, user, spec.name.c_str(), spec.recipe_id); - else + } + else { parse->EventPlayer(EVENT_COMBINE_FAILURE, user, spec.name.c_str(), spec.recipe_id); + } } void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac) { @@ -1144,45 +1191,71 @@ void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float LogTradeskills("[CheckIncreaseTradeskill] Stage2 chance was: [{}] percent. 0 percent means stage1 failed", chance_stage2); } -bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id, - uint32 char_id, DBTradeskillRecipe_Struct *spec) +bool ZoneDatabase::GetTradeRecipe( + const EQEmu::ItemInstance *container, + uint8 c_type, + uint32 some_id, + uint32 char_id, + DBTradeskillRecipe_Struct *spec +) { - if (container == nullptr) + if (container == nullptr) { + LogTradeskills("[GetTradeRecipe] Container null"); return false; + } std::string containers;// make where clause segment for container(s) - if (some_id == 0) + if (some_id == 0) { containers = StringFormat("= %u", c_type); // world combiner so no item number - else - containers = StringFormat("IN (%u,%u)", c_type, some_id); // container in inventory + } + else { + containers = StringFormat("IN (%u,%u)", c_type, some_id); + } // container in inventory //Could prolly watch for stacks in this loop and handle them properly... //just increment sum and count accordingly - bool first = true; + bool first = true; std::string buf2; - uint32 count = 0; - uint32 sum = 0; - for (uint8 i = 0; i < 10; i++) { // TODO: need to determine if this is bound to world/item container size - const EQEmu::ItemInstance* inst = container->GetItem(i); - if (!inst) - continue; + uint32 count = 0; + uint32 sum = 0; + for (uint8 i = 0; i < 10; i++) { // TODO: need to determine if this is bound to world/item container size - const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID); - if (!item) - continue; + LogTradeskills("[GetTradeRecipe] Fetching item [{}]", i); - if(first) { - buf2 += StringFormat("%d", item->ID); - first = false; - } else - buf2 += StringFormat(",%d", item->ID); + const EQEmu::ItemInstance *inst = container->GetItem(i); + if (!inst) { + continue; + } - sum += item->ID; - count++; + const EQEmu::ItemData *item = database.GetItem(inst->GetItem()->ID); + if (!item) { + LogTradeskills("[GetTradeRecipe] item [{}] not found!", inst->GetItem()->ID); + continue; + } + + if (first) { + buf2 += StringFormat("%d", item->ID); + first = false; + } + else { + buf2 += StringFormat(",%d", item->ID); + } + + sum += item->ID; + count++; + + LogTradeskills( + "[GetTradeRecipe] Item in container index [{}] item [{}] found [{}]", + i, + item->ID, + count + ); } - if(count == 0) - return false; //no items == no recipe + //no items == no recipe + if (count == 0) { + return false; + } std::string query = StringFormat("SELECT tre.recipe_id " "FROM tradeskill_recipe_entries AS tre " @@ -1294,28 +1367,33 @@ bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_ return GetTradeRecipe(recipe_id, c_type, some_id, char_id, spec); } - if (results.RowCount() == 0) - return GetTradeRecipe(recipe_id, c_type, some_id, char_id, spec); + if (results.RowCount() == 0) { + return GetTradeRecipe(recipe_id, c_type, some_id, char_id, spec); + } for (auto row = results.begin(); row != results.end(); ++row) { - int ccnt = 0; + int ccnt = 0; for (int x = EQEmu::invbag::SLOT_BEGIN; x < EQEmu::invtype::WORLD_SIZE; x++) { - const EQEmu::ItemInstance* inst = container->GetItem(x); - if(!inst) - continue; + const EQEmu::ItemInstance *inst = container->GetItem(x); + if (!inst) { + continue; + } - const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID); - if (!item) - continue; + const EQEmu::ItemData *item = database.GetItem(inst->GetItem()->ID); + if (!item) { + continue; + } - if(item->ID == atoi(row[0])) - ccnt++; - } + if (item->ID == atoi(row[0])) { + ccnt++; + } + } - if(ccnt != atoi(row[1])) - return false; - } + if (ccnt != atoi(row[1])) { + return false; + } + } return GetTradeRecipe(recipe_id, c_type, some_id, char_id, spec); } From 85daee85b8436ded41632d46c28202657bf2f508 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 23:26:53 -0500 Subject: [PATCH 114/272] Move spawn events from content table to server --- common/database_schema.h | 2 +- .../base/base_spawn_events_repository.h | 16 ++++++++-------- zone/spawn2.cpp | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/common/database_schema.h b/common/database_schema.h index bd8e89b6c..e86230f9d 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -218,7 +218,6 @@ namespace DatabaseSchema { "skill_caps", "spawn2", "spawn_conditions", - "spawn_events", "spawnentry", "spawngroup", "spells_new", @@ -254,6 +253,7 @@ namespace DatabaseSchema { "launcher", "launcher_zones", "spawn_condition_values", + "spawn_events", "level_exp_mods", "logsys_categories", "name_filter", diff --git a/common/repositories/base/base_spawn_events_repository.h b/common/repositories/base/base_spawn_events_repository.h index 723a670d8..c0e92ee26 100644 --- a/common/repositories/base/base_spawn_events_repository.h +++ b/common/repositories/base/base_spawn_events_repository.h @@ -159,7 +159,7 @@ public: int spawn_events_id ) { - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "{} WHERE id = {} LIMIT 1", BaseSelect(), @@ -196,7 +196,7 @@ public: int spawn_events_id ) { - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "DELETE FROM {} WHERE {} = {}", TableName(), @@ -230,7 +230,7 @@ public: update_values.push_back(columns[12] + " = " + std::to_string(spawn_events_entry.argument)); update_values.push_back(columns[13] + " = " + std::to_string(spawn_events_entry.strict)); - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "UPDATE {} SET {} WHERE {} = {}", TableName(), @@ -263,7 +263,7 @@ public: insert_values.push_back(std::to_string(spawn_events_entry.argument)); insert_values.push_back(std::to_string(spawn_events_entry.strict)); - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "{} VALUES ({})", BaseInsert(), @@ -309,7 +309,7 @@ public: std::vector insert_values; - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "{} VALUES {}", BaseInsert(), @@ -324,7 +324,7 @@ public: { std::vector all_entries; - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "{}", BaseSelect() @@ -361,7 +361,7 @@ public: { std::vector all_entries; - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "{} WHERE {}", BaseSelect(), @@ -397,7 +397,7 @@ public: static int DeleteWhere(std::string where_filter) { - auto results = content_db.QueryDatabase( + auto results = database.QueryDatabase( fmt::format( "DELETE FROM {} WHERE {}", TableName(), diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 3571effe9..1272e1487 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -507,7 +507,7 @@ bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList if (mob_distance > repop_distance) continue; - new_spawn = new Spawn2( // + new_spawn = new Spawn2( // atoi(row[0]), // uint32 in_spawn2_id atoi(row[1]), // uint32 spawngroup_id atof(row[2]), // float in_x @@ -595,14 +595,14 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa for (auto row = results.begin(); row != results.end(); ++row) { - uint32 spawn_time_left = 0; - Spawn2* new_spawn = 0; + uint32 spawn_time_left = 0; + Spawn2* new_spawn = 0; bool perl_enabled = atoi(row[11]) == 1 ? true : false; if (spawn_times.count(atoi(row[0])) != 0) spawn_time_left = spawn_times[atoi(row[0])]; - new_spawn = new Spawn2( // + new_spawn = new Spawn2( // atoi(row[0]), // uint32 in_spawn2_id atoi(row[1]), // uint32 spawngroup_id atof(row[2]), // float in_x @@ -910,7 +910,7 @@ void SpawnConditionManager::UpdateDBEvent(SpawnEvent &event) { event.next.day, event.next.month, event.next.year, event.enabled? 1: 0, event.strict? 1: 0, event.id); - content_db.QueryDatabase(query); + database.QueryDatabase(query); } void SpawnConditionManager::UpdateDBCondition(const char* zone_name, uint32 instance_id, uint16 cond_id, int16 value) { @@ -929,7 +929,7 @@ bool SpawnConditionManager::LoadDBEvent(uint32 event_id, SpawnEvent &event, std: "next_month, next_year, enabled, " "action, argument, strict, zone " "FROM spawn_events WHERE id = %d", event_id); - auto results = content_db.QueryDatabase(query); + auto results = database.QueryDatabase(query); if (!results.Success()) { return false; } @@ -1009,7 +1009,7 @@ bool SpawnConditionManager::LoadSpawnConditions(const char* zone_name, uint32 in query = StringFormat("SELECT id, cond_id, period, next_minute, next_hour, " "next_day, next_month, next_year, enabled, action, argument, strict " "FROM spawn_events WHERE zone = '%s'", zone_name); - results = content_db.QueryDatabase(query); + results = database.QueryDatabase(query); if (!results.Success()) { return false; } From caa0ffda003f5ff3bebeeadee347d463459e6728 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Apr 2020 23:53:52 -0500 Subject: [PATCH 115/272] Add `Truncate` repository method and purge player sold items on world bootup --- common/database_instances.cpp | 2 +- common/repositories/aa_ability_repository.h | 6 ++++-- .../repositories/aa_rank_effects_repository.h | 6 ++++-- .../repositories/aa_rank_prereqs_repository.h | 6 ++++-- common/repositories/aa_ranks_repository.h | 6 ++++-- .../repositories/account_flags_repository.h | 6 ++++-- common/repositories/account_ip_repository.h | 6 ++++-- common/repositories/account_repository.h | 6 ++++-- .../repositories/account_rewards_repository.h | 6 ++++-- .../adventure_details_repository.h | 6 ++++-- .../adventure_members_repository.h | 6 ++++-- .../repositories/adventure_stats_repository.h | 6 ++++-- ...venture_template_entry_flavor_repository.h | 6 ++++-- .../adventure_template_entry_repository.h | 6 ++++-- .../adventure_template_repository.h | 6 ++++-- .../alternate_currency_repository.h | 6 ++++-- common/repositories/auras_repository.h | 6 ++++-- .../base/base_aa_ability_repository.h | 13 +++++++++++- .../base/base_aa_rank_effects_repository.h | 13 +++++++++++- .../base/base_aa_rank_prereqs_repository.h | 13 +++++++++++- .../base/base_aa_ranks_repository.h | 13 +++++++++++- .../base/base_account_flags_repository.h | 13 +++++++++++- .../base/base_account_ip_repository.h | 13 +++++++++++- .../base/base_account_repository.h | 13 +++++++++++- .../base/base_account_rewards_repository.h | 13 +++++++++++- .../base/base_adventure_details_repository.h | 13 +++++++++++- .../base/base_adventure_members_repository.h | 13 +++++++++++- .../base/base_adventure_stats_repository.h | 13 +++++++++++- ...venture_template_entry_flavor_repository.h | 13 +++++++++++- ...base_adventure_template_entry_repository.h | 13 +++++++++++- .../base/base_adventure_template_repository.h | 13 +++++++++++- .../base/base_alternate_currency_repository.h | 13 +++++++++++- .../repositories/base/base_auras_repository.h | 13 +++++++++++- .../base/base_base_data_repository.h | 13 +++++++++++- .../base/base_blocked_spells_repository.h | 13 +++++++++++- .../base/base_bug_reports_repository.h | 13 +++++++++++- .../repositories/base/base_bugs_repository.h | 13 +++++++++++- .../repositories/base/base_buyer_repository.h | 13 +++++++++++- ...base_char_create_combinations_repository.h | 13 +++++++++++- ...char_create_point_allocations_repository.h | 13 +++++++++++- .../base/base_char_recipe_list_repository.h | 13 +++++++++++- .../base_character_activities_repository.h | 13 +++++++++++- .../base_character_alt_currency_repository.h | 13 +++++++++++- ...character_alternate_abilities_repository.h | 13 +++++++++++- .../base/base_character_auras_repository.h | 13 +++++++++++- .../base_character_bandolier_repository.h | 13 +++++++++++- .../base/base_character_bind_repository.h | 13 +++++++++++- .../base/base_character_buffs_repository.h | 13 +++++++++++- .../base_character_corpse_items_repository.h | 13 +++++++++++- .../base/base_character_corpses_repository.h | 13 +++++++++++- .../base/base_character_currency_repository.h | 13 +++++++++++- .../base/base_character_data_repository.h | 13 +++++++++++- .../base_character_disciplines_repository.h | 13 +++++++++++- ...se_character_inspect_messages_repository.h | 13 +++++++++++- .../base_character_item_recast_repository.h | 13 +++++++++++- .../base_character_languages_repository.h | 13 +++++++++++- ...haracter_leadership_abilities_repository.h | 13 +++++++++++- .../base/base_character_material_repository.h | 13 +++++++++++- .../base_character_memmed_spells_repository.h | 13 +++++++++++- .../base_character_pet_buffs_repository.h | 13 +++++++++++- .../base/base_character_pet_info_repository.h | 13 +++++++++++- .../base_character_pet_inventory_repository.h | 13 +++++++++++- .../base_character_potionbelt_repository.h | 13 +++++++++++- .../base/base_character_skills_repository.h | 13 +++++++++++- .../base/base_character_spells_repository.h | 13 +++++++++++- .../base/base_character_tasks_repository.h | 13 +++++++++++- .../base/base_completed_tasks_repository.h | 13 +++++++++++- .../base/base_content_flags_repository.h | 16 ++++++++++---- .../base/base_data_buckets_repository.h | 13 +++++++++++- .../base/base_db_str_repository.h | 13 +++++++++++- .../base/base_discovered_items_repository.h | 13 +++++++++++- .../repositories/base/base_doors_repository.h | 13 +++++++++++- .../base/base_eventlog_repository.h | 13 +++++++++++- .../base/base_faction_base_data_repository.h | 13 +++++++++++- .../base/base_faction_list_mod_repository.h | 13 +++++++++++- .../base/base_faction_list_repository.h | 13 +++++++++++- .../base/base_faction_values_repository.h | 13 +++++++++++- .../base/base_fishing_repository.h | 13 +++++++++++- .../base/base_forage_repository.h | 13 +++++++++++- .../base/base_friends_repository.h | 13 +++++++++++- .../base/base_global_loot_repository.h | 13 +++++++++++- .../base/base_gm_ips_repository.h | 13 +++++++++++- .../base/base_goallists_repository.h | 13 +++++++++++- .../base/base_graveyard_repository.h | 13 +++++++++++- .../repositories/base/base_grid_repository.h | 1 - .../base/base_ground_spawns_repository.h | 13 +++++++++++- .../base/base_group_id_repository.h | 13 +++++++++++- .../base/base_group_leaders_repository.h | 13 +++++++++++- .../base/base_guild_members_repository.h | 13 +++++++++++- .../base/base_guild_ranks_repository.h | 13 +++++++++++- .../base/base_guild_relations_repository.h | 13 +++++++++++- .../base/base_guilds_repository.h | 13 +++++++++++- .../base/base_hackers_repository.h | 13 +++++++++++- .../base_instance_list_player_repository.h | 13 +++++++++++- .../base/base_instance_list_repository.h | 13 +++++++++++- .../base/base_inventory_repository.h | 13 +++++++++++- .../base_inventory_snapshots_repository.h | 13 +++++++++++- .../base/base_ip_exemptions_repository.h | 13 +++++++++++- .../base/base_item_tick_repository.h | 13 +++++++++++- .../repositories/base/base_items_repository.h | 13 +++++++++++- .../base/base_ldon_trap_entries_repository.h | 13 +++++++++++- .../base_ldon_trap_templates_repository.h | 13 +++++++++++- .../base/base_level_exp_mods_repository.h | 13 +++++++++++- .../base/base_lfguild_repository.h | 13 +++++++++++- .../base/base_login_accounts_repository.h | 13 +++++++++++- .../base/base_login_api_tokens_repository.h | 13 +++++++++++- .../base_login_server_admins_repository.h | 13 +++++++++++- .../base_login_server_list_types_repository.h | 13 +++++++++++- .../base_login_world_servers_repository.h | 13 +++++++++++- .../base/base_logsys_categories_repository.h | 13 +++++++++++- .../base/base_lootdrop_entries_repository.h | 13 +++++++++++- .../base/base_lootdrop_repository.h | 13 +++++++++++- .../base/base_loottable_entries_repository.h | 13 +++++++++++- .../base/base_loottable_repository.h | 13 +++++++++++- .../repositories/base/base_mail_repository.h | 13 +++++++++++- .../base/base_merchantlist_repository.h | 13 +++++++++++- .../base/base_merchantlist_temp_repository.h | 13 +++++++++++- .../base/base_name_filter_repository.h | 13 +++++++++++- .../base/base_npc_emotes_repository.h | 13 +++++++++++- .../base_npc_faction_entries_repository.h | 13 +++++++++++- .../base/base_npc_faction_repository.h | 13 +++++++++++- .../base_npc_scale_global_base_repository.h | 13 +++++++++++- ...se_npc_spells_effects_entries_repository.h | 13 +++++++++++- .../base/base_npc_spells_effects_repository.h | 13 +++++++++++- .../base/base_npc_spells_entries_repository.h | 13 +++++++++++- .../base/base_npc_spells_repository.h | 13 +++++++++++- .../base/base_npc_types_repository.h | 13 +++++++++++- .../base/base_npc_types_tint_repository.h | 13 +++++++++++- .../base/base_object_contents_repository.h | 13 +++++++++++- .../base/base_object_repository.h | 13 +++++++++++- ...se_perl_event_export_settings_repository.h | 13 +++++++++++- .../base/base_petitions_repository.h | 13 +++++++++++- ...ase_pets_equipmentset_entries_repository.h | 13 +++++++++++- .../base/base_pets_equipmentset_repository.h | 13 +++++++++++- .../repositories/base/base_pets_repository.h | 21 ++++++++++++++----- .../base/base_player_titlesets_repository.h | 13 +++++++++++- .../base/base_proximities_repository.h | 13 +++++++++++- .../base/base_quest_globals_repository.h | 13 +++++++++++- .../base/base_raid_details_repository.h | 13 +++++++++++- .../base/base_raid_members_repository.h | 13 +++++++++++- .../base/base_reports_repository.h | 13 +++++++++++- .../base/base_respawn_times_repository.h | 13 +++++++++++- .../base/base_rule_sets_repository.h | 13 +++++++++++- .../base/base_rule_values_repository.h | 13 +++++++++++- .../base/base_saylink_repository.h | 13 +++++++++++- .../base/base_skill_caps_repository.h | 13 +++++++++++- .../base/base_spawn2_repository.h | 13 +++++++++++- .../base_spawn_condition_values_repository.h | 13 +++++++++++- .../base/base_spawn_conditions_repository.h | 21 ++++++++++++++----- .../base/base_spawn_events_repository.h | 13 +++++++++++- .../base/base_spawnentry_repository.h | 13 +++++++++++- .../base/base_spawngroup_repository.h | 13 +++++++++++- .../base/base_spell_buckets_repository.h | 13 +++++++++++- .../base/base_spell_globals_repository.h | 13 +++++++++++- .../base/base_spells_new_repository.h | 13 +++++++++++- .../base/base_start_zones_repository.h | 13 +++++++++++- .../base/base_starting_items_repository.h | 13 +++++++++++- .../base/base_task_activities_repository.h | 13 +++++++++++- .../repositories/base/base_tasks_repository.h | 13 +++++++++++- .../base/base_tasksets_repository.h | 13 +++++++++++- .../base/base_timers_repository.h | 13 +++++++++++- .../base/base_titles_repository.h | 13 +++++++++++- .../base/base_trader_repository.h | 13 +++++++++++- ...ase_tradeskill_recipe_entries_repository.h | 13 +++++++++++- .../base/base_tradeskill_recipe_repository.h | 13 +++++++++++- .../repositories/base/base_traps_repository.h | 13 +++++++++++- .../base/base_tribute_levels_repository.h | 13 +++++++++++- .../base/base_tributes_repository.h | 13 +++++++++++- ...base_veteran_reward_templates_repository.h | 13 +++++++++++- .../base/base_zone_points_repository.h | 13 +++++++++++- .../repositories/base/base_zone_repository.h | 13 +++++++++++- common/repositories/base_data_repository.h | 6 ++++-- .../repositories/blocked_spells_repository.h | 6 ++++-- common/repositories/bug_reports_repository.h | 6 ++++-- common/repositories/bugs_repository.h | 6 ++++-- common/repositories/buyer_repository.h | 6 ++++-- .../char_create_combinations_repository.h | 6 ++++-- ...char_create_point_allocations_repository.h | 6 ++++-- .../char_recipe_list_repository.h | 6 ++++-- .../character_activities_repository.h | 6 ++++-- .../character_alt_currency_repository.h | 6 ++++-- ...character_alternate_abilities_repository.h | 6 ++++-- .../repositories/character_auras_repository.h | 6 ++++-- .../character_bandolier_repository.h | 6 ++++-- .../repositories/character_bind_repository.h | 6 ++++-- .../repositories/character_buffs_repository.h | 6 ++++-- .../character_corpse_items_repository.h | 6 ++++-- .../character_corpses_repository.h | 6 ++++-- .../character_currency_repository.h | 6 ++++-- .../repositories/character_data_repository.h | 6 ++++-- .../character_disciplines_repository.h | 6 ++++-- .../character_inspect_messages_repository.h | 6 ++++-- .../character_item_recast_repository.h | 6 ++++-- .../character_languages_repository.h | 6 ++++-- ...haracter_leadership_abilities_repository.h | 6 ++++-- .../character_material_repository.h | 6 ++++-- .../character_memmed_spells_repository.h | 6 ++++-- .../character_pet_buffs_repository.h | 6 ++++-- .../character_pet_info_repository.h | 6 ++++-- .../character_pet_inventory_repository.h | 6 ++++-- .../character_potionbelt_repository.h | 6 ++++-- .../character_skills_repository.h | 6 ++++-- .../character_spells_repository.h | 6 ++++-- .../repositories/character_tasks_repository.h | 6 ++++-- .../repositories/completed_tasks_repository.h | 6 ++++-- common/repositories/data_buckets_repository.h | 6 ++++-- common/repositories/db_str_repository.h | 6 ++++-- .../discovered_items_repository.h | 6 ++++-- common/repositories/doors_repository.h | 6 ++++-- common/repositories/eventlog_repository.h | 6 ++++-- .../faction_base_data_repository.h | 6 ++++-- .../faction_list_mod_repository.h | 6 ++++-- common/repositories/faction_list_repository.h | 6 ++++-- .../repositories/faction_values_repository.h | 6 ++++-- common/repositories/fishing_repository.h | 6 ++++-- common/repositories/forage_repository.h | 6 ++++-- common/repositories/friends_repository.h | 6 ++++-- common/repositories/global_loot_repository.h | 6 ++++-- common/repositories/gm_ips_repository.h | 6 ++++-- common/repositories/goallists_repository.h | 6 ++++-- common/repositories/graveyard_repository.h | 6 ++++-- .../repositories/ground_spawns_repository.h | 6 ++++-- common/repositories/group_id_repository.h | 6 ++++-- .../repositories/group_leaders_repository.h | 6 ++++-- .../repositories/guild_members_repository.h | 6 ++++-- common/repositories/guild_ranks_repository.h | 6 ++++-- .../repositories/guild_relations_repository.h | 6 ++++-- common/repositories/guilds_repository.h | 6 ++++-- common/repositories/hackers_repository.h | 6 ++++-- .../instance_list_player_repository.h | 6 ++++-- .../repositories/instance_list_repository.h | 6 ++++-- common/repositories/inventory_repository.h | 6 ++++-- .../inventory_snapshots_repository.h | 6 ++++-- .../repositories/ip_exemptions_repository.h | 6 ++++-- common/repositories/item_tick_repository.h | 6 ++++-- common/repositories/items_repository.h | 6 ++++-- .../ldon_trap_entries_repository.h | 6 ++++-- .../ldon_trap_templates_repository.h | 6 ++++-- .../repositories/level_exp_mods_repository.h | 6 ++++-- common/repositories/lfguild_repository.h | 6 ++++-- .../repositories/login_accounts_repository.h | 6 ++++-- .../login_api_tokens_repository.h | 6 ++++-- .../login_server_admins_repository.h | 6 ++++-- .../login_server_list_types_repository.h | 6 ++++-- .../login_world_servers_repository.h | 6 ++++-- .../logsys_categories_repository.h | 6 ++++-- .../lootdrop_entries_repository.h | 6 ++++-- common/repositories/lootdrop_repository.h | 6 ++++-- .../loottable_entries_repository.h | 6 ++++-- common/repositories/loottable_repository.h | 6 ++++-- common/repositories/mail_repository.h | 6 ++++-- common/repositories/merchantlist_repository.h | 6 ++++-- .../merchantlist_temp_repository.h | 6 ++++-- common/repositories/name_filter_repository.h | 6 ++++-- common/repositories/npc_emotes_repository.h | 6 ++++-- .../npc_faction_entries_repository.h | 6 ++++-- common/repositories/npc_faction_repository.h | 6 ++++-- .../npc_scale_global_base_repository.h | 6 ++++-- .../npc_spells_effects_entries_repository.h | 6 ++++-- .../npc_spells_effects_repository.h | 6 ++++-- .../npc_spells_entries_repository.h | 6 ++++-- common/repositories/npc_spells_repository.h | 6 ++++-- common/repositories/npc_types_repository.h | 6 ++++-- .../repositories/npc_types_tint_repository.h | 6 ++++-- .../repositories/object_contents_repository.h | 6 ++++-- common/repositories/object_repository.h | 6 ++++-- .../perl_event_export_settings_repository.h | 6 ++++-- common/repositories/petitions_repository.h | 6 ++++-- .../pets_equipmentset_entries_repository.h | 6 ++++-- .../pets_equipmentset_repository.h | 6 ++++-- common/repositories/pets_repository.h | 6 ++++-- .../player_titlesets_repository.h | 6 ++++-- common/repositories/proximities_repository.h | 6 ++++-- .../repositories/quest_globals_repository.h | 6 ++++-- common/repositories/raid_details_repository.h | 6 ++++-- common/repositories/raid_members_repository.h | 6 ++++-- common/repositories/reports_repository.h | 6 ++++-- .../repositories/respawn_times_repository.h | 6 ++++-- common/repositories/rule_sets_repository.h | 6 ++++-- common/repositories/rule_values_repository.h | 6 ++++-- common/repositories/saylink_repository.h | 6 ++++-- common/repositories/skill_caps_repository.h | 6 ++++-- common/repositories/spawn2_repository.h | 6 ++++-- .../spawn_condition_values_repository.h | 6 ++++-- .../spawn_conditions_repository.h | 6 ++++-- common/repositories/spawn_events_repository.h | 6 ++++-- common/repositories/spawnentry_repository.h | 6 ++++-- common/repositories/spawngroup_repository.h | 6 ++++-- .../repositories/spell_buckets_repository.h | 6 ++++-- .../repositories/spell_globals_repository.h | 6 ++++-- common/repositories/spells_new_repository.h | 6 ++++-- common/repositories/start_zones_repository.h | 6 ++++-- .../repositories/starting_items_repository.h | 6 ++++-- .../repositories/task_activities_repository.h | 6 ++++-- common/repositories/tasks_repository.h | 6 ++++-- common/repositories/tasksets_repository.h | 6 ++++-- .../template/base_repository.template | 13 +++++++++++- common/repositories/timers_repository.h | 6 ++++-- common/repositories/titles_repository.h | 6 ++++-- common/repositories/trader_repository.h | 6 ++++-- .../tradeskill_recipe_entries_repository.h | 6 ++++-- .../tradeskill_recipe_repository.h | 8 +++---- common/repositories/traps_repository.h | 6 ++++-- .../repositories/tribute_levels_repository.h | 6 ++++-- common/repositories/tributes_repository.h | 6 ++++-- .../veteran_reward_templates_repository.h | 6 ++++-- common/repositories/zone_points_repository.h | 6 ++++-- common/repositories/zone_repository.h | 6 ++++-- .../generators/repository-generator.pl | 2 +- world/main.cpp | 4 ++++ 310 files changed, 2470 insertions(+), 474 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 02fa2e82b..4e562cecb 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -320,7 +320,7 @@ uint16 Database::GetInstanceID(const char* zone, uint32 character_id, int16 vers "AND instance_list.id = instance_list_player.id " "AND instance_list_player.charid = %u " "LIMIT 1 ", - content_db.GetZoneID(zone), + GetZoneID(zone), version, character_id ); diff --git a/common/repositories/aa_ability_repository.h b/common/repositories/aa_ability_repository.h index c8d096e8e..cf452a7d0 100644 --- a/common/repositories/aa_ability_repository.h +++ b/common/repositories/aa_ability_repository.h @@ -29,16 +29,18 @@ class AaAbilityRepository: public BaseAaAbilityRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/aa_rank_effects_repository.h b/common/repositories/aa_rank_effects_repository.h index df283fb1f..7242e8f4a 100644 --- a/common/repositories/aa_rank_effects_repository.h +++ b/common/repositories/aa_rank_effects_repository.h @@ -29,16 +29,18 @@ class AaRankEffectsRepository: public BaseAaRankEffectsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/aa_rank_prereqs_repository.h b/common/repositories/aa_rank_prereqs_repository.h index dafb1c4d8..cf0055870 100644 --- a/common/repositories/aa_rank_prereqs_repository.h +++ b/common/repositories/aa_rank_prereqs_repository.h @@ -29,16 +29,18 @@ class AaRankPrereqsRepository: public BaseAaRankPrereqsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/aa_ranks_repository.h b/common/repositories/aa_ranks_repository.h index b62e4e840..64ac64c84 100644 --- a/common/repositories/aa_ranks_repository.h +++ b/common/repositories/aa_ranks_repository.h @@ -29,16 +29,18 @@ class AaRanksRepository: public BaseAaRanksRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/account_flags_repository.h b/common/repositories/account_flags_repository.h index 9ebe84abb..12614e860 100644 --- a/common/repositories/account_flags_repository.h +++ b/common/repositories/account_flags_repository.h @@ -29,16 +29,18 @@ class AccountFlagsRepository: public BaseAccountFlagsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/account_ip_repository.h b/common/repositories/account_ip_repository.h index d33cb609d..50f10f168 100644 --- a/common/repositories/account_ip_repository.h +++ b/common/repositories/account_ip_repository.h @@ -29,16 +29,18 @@ class AccountIpRepository: public BaseAccountIpRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/account_repository.h b/common/repositories/account_repository.h index 32d49c92d..433be1b44 100644 --- a/common/repositories/account_repository.h +++ b/common/repositories/account_repository.h @@ -29,16 +29,18 @@ class AccountRepository: public BaseAccountRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/account_rewards_repository.h b/common/repositories/account_rewards_repository.h index 77cad4076..16e1a1a19 100644 --- a/common/repositories/account_rewards_repository.h +++ b/common/repositories/account_rewards_repository.h @@ -29,16 +29,18 @@ class AccountRewardsRepository: public BaseAccountRewardsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_details_repository.h b/common/repositories/adventure_details_repository.h index 909a3e7ae..c616ccf0d 100644 --- a/common/repositories/adventure_details_repository.h +++ b/common/repositories/adventure_details_repository.h @@ -29,16 +29,18 @@ class AdventureDetailsRepository: public BaseAdventureDetailsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_members_repository.h b/common/repositories/adventure_members_repository.h index 3cdedac90..84a18c14a 100644 --- a/common/repositories/adventure_members_repository.h +++ b/common/repositories/adventure_members_repository.h @@ -29,16 +29,18 @@ class AdventureMembersRepository: public BaseAdventureMembersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_stats_repository.h b/common/repositories/adventure_stats_repository.h index 8ff138849..6ad1c3fe6 100644 --- a/common/repositories/adventure_stats_repository.h +++ b/common/repositories/adventure_stats_repository.h @@ -29,16 +29,18 @@ class AdventureStatsRepository: public BaseAdventureStatsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_template_entry_flavor_repository.h b/common/repositories/adventure_template_entry_flavor_repository.h index 183d50780..8d9ae5406 100644 --- a/common/repositories/adventure_template_entry_flavor_repository.h +++ b/common/repositories/adventure_template_entry_flavor_repository.h @@ -29,16 +29,18 @@ class AdventureTemplateEntryFlavorRepository: public BaseAdventureTemplateEntryF public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_template_entry_repository.h b/common/repositories/adventure_template_entry_repository.h index 68e6008fc..756ddf417 100644 --- a/common/repositories/adventure_template_entry_repository.h +++ b/common/repositories/adventure_template_entry_repository.h @@ -29,16 +29,18 @@ class AdventureTemplateEntryRepository: public BaseAdventureTemplateEntryReposit public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/adventure_template_repository.h b/common/repositories/adventure_template_repository.h index a3e9c9a99..b284670ee 100644 --- a/common/repositories/adventure_template_repository.h +++ b/common/repositories/adventure_template_repository.h @@ -29,16 +29,18 @@ class AdventureTemplateRepository: public BaseAdventureTemplateRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/alternate_currency_repository.h b/common/repositories/alternate_currency_repository.h index 732f1e6f8..05b21a755 100644 --- a/common/repositories/alternate_currency_repository.h +++ b/common/repositories/alternate_currency_repository.h @@ -29,16 +29,18 @@ class AlternateCurrencyRepository: public BaseAlternateCurrencyRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/auras_repository.h b/common/repositories/auras_repository.h index 5948195db..bacfd0be9 100644 --- a/common/repositories/auras_repository.h +++ b/common/repositories/auras_repository.h @@ -29,16 +29,18 @@ class AurasRepository: public BaseAurasRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/base/base_aa_ability_repository.h b/common/repositories/base/base_aa_ability_repository.h index bd013a0c2..e91813169 100644 --- a/common/repositories/base/base_aa_ability_repository.h +++ b/common/repositories/base/base_aa_ability_repository.h @@ -404,7 +404,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -412,6 +411,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_AA_ABILITY_REPOSITORY_H diff --git a/common/repositories/base/base_aa_rank_effects_repository.h b/common/repositories/base/base_aa_rank_effects_repository.h index 75b8063b2..0d31f8688 100644 --- a/common/repositories/base/base_aa_rank_effects_repository.h +++ b/common/repositories/base/base_aa_rank_effects_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_AA_RANK_EFFECTS_REPOSITORY_H diff --git a/common/repositories/base/base_aa_rank_prereqs_repository.h b/common/repositories/base/base_aa_rank_prereqs_repository.h index c3cc5f6c3..5432b5a19 100644 --- a/common/repositories/base/base_aa_rank_prereqs_repository.h +++ b/common/repositories/base/base_aa_rank_prereqs_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_AA_RANK_PREREQS_REPOSITORY_H diff --git a/common/repositories/base/base_aa_ranks_repository.h b/common/repositories/base/base_aa_ranks_repository.h index 1561f7b8a..dca90f694 100644 --- a/common/repositories/base/base_aa_ranks_repository.h +++ b/common/repositories/base/base_aa_ranks_repository.h @@ -395,7 +395,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -403,6 +402,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_AA_RANKS_REPOSITORY_H diff --git a/common/repositories/base/base_account_flags_repository.h b/common/repositories/base/base_account_flags_repository.h index bd60b5856..5d67e14ec 100644 --- a/common/repositories/base/base_account_flags_repository.h +++ b/common/repositories/base/base_account_flags_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ACCOUNT_FLAGS_REPOSITORY_H diff --git a/common/repositories/base/base_account_ip_repository.h b/common/repositories/base/base_account_ip_repository.h index a179590fe..127c8c80e 100644 --- a/common/repositories/base/base_account_ip_repository.h +++ b/common/repositories/base/base_account_ip_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ACCOUNT_IP_REPOSITORY_H diff --git a/common/repositories/base/base_account_repository.h b/common/repositories/base/base_account_repository.h index 772ddc45e..75e358a1b 100644 --- a/common/repositories/base/base_account_repository.h +++ b/common/repositories/base/base_account_repository.h @@ -446,7 +446,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -454,6 +453,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ACCOUNT_REPOSITORY_H diff --git a/common/repositories/base/base_account_rewards_repository.h b/common/repositories/base/base_account_rewards_repository.h index a2ef9ba9d..c7faa48e6 100644 --- a/common/repositories/base/base_account_rewards_repository.h +++ b/common/repositories/base/base_account_rewards_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ACCOUNT_REWARDS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_details_repository.h b/common/repositories/base/base_adventure_details_repository.h index c5b1595fd..94c0d5a9f 100644 --- a/common/repositories/base/base_adventure_details_repository.h +++ b/common/repositories/base/base_adventure_details_repository.h @@ -356,7 +356,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -364,6 +363,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_DETAILS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_members_repository.h b/common/repositories/base/base_adventure_members_repository.h index c99f51bd3..6994df694 100644 --- a/common/repositories/base/base_adventure_members_repository.h +++ b/common/repositories/base/base_adventure_members_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_stats_repository.h b/common/repositories/base/base_adventure_stats_repository.h index 03a3b6255..b1f622c7e 100644 --- a/common/repositories/base/base_adventure_stats_repository.h +++ b/common/repositories/base/base_adventure_stats_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_STATS_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_entry_flavor_repository.h b/common/repositories/base/base_adventure_template_entry_flavor_repository.h index b1099d0c4..684a5a91b 100644 --- a/common/repositories/base/base_adventure_template_entry_flavor_repository.h +++ b/common/repositories/base/base_adventure_template_entry_flavor_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_FLAVOR_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_entry_repository.h b/common/repositories/base/base_adventure_template_entry_repository.h index e44adb4e4..3f97c85e6 100644 --- a/common/repositories/base/base_adventure_template_entry_repository.h +++ b/common/repositories/base/base_adventure_template_entry_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_ENTRY_REPOSITORY_H diff --git a/common/repositories/base/base_adventure_template_repository.h b/common/repositories/base/base_adventure_template_repository.h index d95baa339..8a5d681a4 100644 --- a/common/repositories/base/base_adventure_template_repository.h +++ b/common/repositories/base/base_adventure_template_repository.h @@ -575,7 +575,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -583,6 +582,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ADVENTURE_TEMPLATE_REPOSITORY_H diff --git a/common/repositories/base/base_alternate_currency_repository.h b/common/repositories/base/base_alternate_currency_repository.h index ff6b98a09..a6ad62517 100644 --- a/common/repositories/base/base_alternate_currency_repository.h +++ b/common/repositories/base/base_alternate_currency_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ALTERNATE_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_auras_repository.h b/common/repositories/base/base_auras_repository.h index c2845bc49..8849528b4 100644 --- a/common/repositories/base/base_auras_repository.h +++ b/common/repositories/base/base_auras_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_AURAS_REPOSITORY_H diff --git a/common/repositories/base/base_base_data_repository.h b/common/repositories/base/base_base_data_repository.h index 029023277..8d1075cc5 100644 --- a/common/repositories/base/base_base_data_repository.h +++ b/common/repositories/base/base_base_data_repository.h @@ -368,7 +368,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -376,6 +375,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_blocked_spells_repository.h b/common/repositories/base/base_blocked_spells_repository.h index 6a0066ea6..f29bb9ce4 100644 --- a/common/repositories/base/base_blocked_spells_repository.h +++ b/common/repositories/base/base_blocked_spells_repository.h @@ -383,7 +383,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -391,6 +390,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_BLOCKED_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_bug_reports_repository.h b/common/repositories/base/base_bug_reports_repository.h index 90fa46870..822b4f0a4 100644 --- a/common/repositories/base/base_bug_reports_repository.h +++ b/common/repositories/base/base_bug_reports_repository.h @@ -563,7 +563,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -571,6 +570,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_BUG_REPORTS_REPOSITORY_H diff --git a/common/repositories/base/base_bugs_repository.h b/common/repositories/base/base_bugs_repository.h index 29c0c6cd0..e34554e2e 100644 --- a/common/repositories/base/base_bugs_repository.h +++ b/common/repositories/base/base_bugs_repository.h @@ -392,7 +392,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -400,6 +399,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_BUGS_REPOSITORY_H diff --git a/common/repositories/base/base_buyer_repository.h b/common/repositories/base/base_buyer_repository.h index ea0f50b10..e4b41575d 100644 --- a/common/repositories/base/base_buyer_repository.h +++ b/common/repositories/base/base_buyer_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_BUYER_REPOSITORY_H diff --git a/common/repositories/base/base_char_create_combinations_repository.h b/common/repositories/base/base_char_create_combinations_repository.h index f937fc518..8bdb95d21 100644 --- a/common/repositories/base/base_char_create_combinations_repository.h +++ b/common/repositories/base/base_char_create_combinations_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHAR_CREATE_COMBINATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_char_create_point_allocations_repository.h b/common/repositories/base/base_char_create_point_allocations_repository.h index 05dcedd49..34b4efefa 100644 --- a/common/repositories/base/base_char_create_point_allocations_repository.h +++ b/common/repositories/base/base_char_create_point_allocations_repository.h @@ -413,7 +413,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -421,6 +420,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHAR_CREATE_POINT_ALLOCATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_char_recipe_list_repository.h b/common/repositories/base/base_char_recipe_list_repository.h index dc4308aeb..ab737e6a1 100644 --- a/common/repositories/base/base_char_recipe_list_repository.h +++ b/common/repositories/base/base_char_recipe_list_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHAR_RECIPE_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_character_activities_repository.h b/common/repositories/base/base_character_activities_repository.h index efdddabca..be5d6802a 100644 --- a/common/repositories/base/base_character_activities_repository.h +++ b/common/repositories/base/base_character_activities_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_alt_currency_repository.h b/common/repositories/base/base_character_alt_currency_repository.h index 275c81f9c..645143ee2 100644 --- a/common/repositories/base/base_character_alt_currency_repository.h +++ b/common/repositories/base/base_character_alt_currency_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_ALT_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_character_alternate_abilities_repository.h b/common/repositories/base/base_character_alternate_abilities_repository.h index 43b8691ec..fd7bb56ad 100644 --- a/common/repositories/base/base_character_alternate_abilities_repository.h +++ b/common/repositories/base/base_character_alternate_abilities_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_ALTERNATE_ABILITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_auras_repository.h b/common/repositories/base/base_character_auras_repository.h index d296d5c49..7c3a84b6f 100644 --- a/common/repositories/base/base_character_auras_repository.h +++ b/common/repositories/base/base_character_auras_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_AURAS_REPOSITORY_H diff --git a/common/repositories/base/base_character_bandolier_repository.h b/common/repositories/base/base_character_bandolier_repository.h index 9fc1ba6ee..5b77dabfb 100644 --- a/common/repositories/base/base_character_bandolier_repository.h +++ b/common/repositories/base/base_character_bandolier_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_BANDOLIER_REPOSITORY_H diff --git a/common/repositories/base/base_character_bind_repository.h b/common/repositories/base/base_character_bind_repository.h index ea7847c1f..a54b2ff86 100644 --- a/common/repositories/base/base_character_bind_repository.h +++ b/common/repositories/base/base_character_bind_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_BIND_REPOSITORY_H diff --git a/common/repositories/base/base_character_buffs_repository.h b/common/repositories/base/base_character_buffs_repository.h index a4165cdbf..7b6590c56 100644 --- a/common/repositories/base/base_character_buffs_repository.h +++ b/common/repositories/base/base_character_buffs_repository.h @@ -431,7 +431,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -439,6 +438,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_BUFFS_REPOSITORY_H diff --git a/common/repositories/base/base_character_corpse_items_repository.h b/common/repositories/base/base_character_corpse_items_repository.h index 3dc8e0681..31ba7b8e5 100644 --- a/common/repositories/base/base_character_corpse_items_repository.h +++ b/common/repositories/base/base_character_corpse_items_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_CORPSE_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_character_corpses_repository.h b/common/repositories/base/base_character_corpses_repository.h index 7027bbc53..5a9932252 100644 --- a/common/repositories/base/base_character_corpses_repository.h +++ b/common/repositories/base/base_character_corpses_repository.h @@ -698,7 +698,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -706,6 +705,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_CORPSES_REPOSITORY_H diff --git a/common/repositories/base/base_character_currency_repository.h b/common/repositories/base/base_character_currency_repository.h index b20163e33..93c78c0f5 100644 --- a/common/repositories/base/base_character_currency_repository.h +++ b/common/repositories/base/base_character_currency_repository.h @@ -431,7 +431,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -439,6 +438,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_CURRENCY_REPOSITORY_H diff --git a/common/repositories/base/base_character_data_repository.h b/common/repositories/base/base_character_data_repository.h index 4ac3a12e5..10f812a65 100644 --- a/common/repositories/base/base_character_data_repository.h +++ b/common/repositories/base/base_character_data_repository.h @@ -1193,7 +1193,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -1201,6 +1200,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_character_disciplines_repository.h b/common/repositories/base/base_character_disciplines_repository.h index 13d98cfed..2838c8a0b 100644 --- a/common/repositories/base/base_character_disciplines_repository.h +++ b/common/repositories/base/base_character_disciplines_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_DISCIPLINES_REPOSITORY_H diff --git a/common/repositories/base/base_character_inspect_messages_repository.h b/common/repositories/base/base_character_inspect_messages_repository.h index 76aaea0d6..d85cde5d4 100644 --- a/common/repositories/base/base_character_inspect_messages_repository.h +++ b/common/repositories/base/base_character_inspect_messages_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_INSPECT_MESSAGES_REPOSITORY_H diff --git a/common/repositories/base/base_character_item_recast_repository.h b/common/repositories/base/base_character_item_recast_repository.h index 2c5a61bb7..4adaa8547 100644 --- a/common/repositories/base/base_character_item_recast_repository.h +++ b/common/repositories/base/base_character_item_recast_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_ITEM_RECAST_REPOSITORY_H diff --git a/common/repositories/base/base_character_languages_repository.h b/common/repositories/base/base_character_languages_repository.h index 2731f40d0..ca6720898 100644 --- a/common/repositories/base/base_character_languages_repository.h +++ b/common/repositories/base/base_character_languages_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_LANGUAGES_REPOSITORY_H diff --git a/common/repositories/base/base_character_leadership_abilities_repository.h b/common/repositories/base/base_character_leadership_abilities_repository.h index d138a6b29..9c47de211 100644 --- a/common/repositories/base/base_character_leadership_abilities_repository.h +++ b/common/repositories/base/base_character_leadership_abilities_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_LEADERSHIP_ABILITIES_REPOSITORY_H diff --git a/common/repositories/base/base_character_material_repository.h b/common/repositories/base/base_character_material_repository.h index 547c635bc..9b4b9671a 100644 --- a/common/repositories/base/base_character_material_repository.h +++ b/common/repositories/base/base_character_material_repository.h @@ -338,7 +338,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -346,6 +345,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_MATERIAL_REPOSITORY_H diff --git a/common/repositories/base/base_character_memmed_spells_repository.h b/common/repositories/base/base_character_memmed_spells_repository.h index cb553ff4f..2f46264d8 100644 --- a/common/repositories/base/base_character_memmed_spells_repository.h +++ b/common/repositories/base/base_character_memmed_spells_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_MEMMED_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_buffs_repository.h b/common/repositories/base/base_character_pet_buffs_repository.h index 10b6fb5b0..ce4847244 100644 --- a/common/repositories/base/base_character_pet_buffs_repository.h +++ b/common/repositories/base/base_character_pet_buffs_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_PET_BUFFS_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_info_repository.h b/common/repositories/base/base_character_pet_info_repository.h index d12865504..3b7f5baea 100644 --- a/common/repositories/base/base_character_pet_info_repository.h +++ b/common/repositories/base/base_character_pet_info_repository.h @@ -350,7 +350,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -358,6 +357,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_PET_INFO_REPOSITORY_H diff --git a/common/repositories/base/base_character_pet_inventory_repository.h b/common/repositories/base/base_character_pet_inventory_repository.h index 8d3d94d1d..f55afb693 100644 --- a/common/repositories/base/base_character_pet_inventory_repository.h +++ b/common/repositories/base/base_character_pet_inventory_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_PET_INVENTORY_REPOSITORY_H diff --git a/common/repositories/base/base_character_potionbelt_repository.h b/common/repositories/base/base_character_potionbelt_repository.h index 6c570fa1b..5de16d8df 100644 --- a/common/repositories/base/base_character_potionbelt_repository.h +++ b/common/repositories/base/base_character_potionbelt_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_POTIONBELT_REPOSITORY_H diff --git a/common/repositories/base/base_character_skills_repository.h b/common/repositories/base/base_character_skills_repository.h index 65fa1dd60..277ac65e8 100644 --- a/common/repositories/base/base_character_skills_repository.h +++ b/common/repositories/base/base_character_skills_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_SKILLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_spells_repository.h b/common/repositories/base/base_character_spells_repository.h index aeab5a7ab..3fd9887cd 100644 --- a/common/repositories/base/base_character_spells_repository.h +++ b/common/repositories/base/base_character_spells_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_character_tasks_repository.h b/common/repositories/base/base_character_tasks_repository.h index ce67e80ff..e0ec7236f 100644 --- a/common/repositories/base/base_character_tasks_repository.h +++ b/common/repositories/base/base_character_tasks_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CHARACTER_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_completed_tasks_repository.h b/common/repositories/base/base_completed_tasks_repository.h index b4a82a14b..7aa4bb65a 100644 --- a/common/repositories/base/base_completed_tasks_repository.h +++ b/common/repositories/base/base_completed_tasks_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_COMPLETED_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_content_flags_repository.h b/common/repositories/base/base_content_flags_repository.h index d86b2e572..7c7ff3ebf 100644 --- a/common/repositories/base/base_content_flags_repository.h +++ b/common/repositories/base/base_content_flags_repository.h @@ -176,7 +176,6 @@ public: auto columns = Columns(); - update_values.push_back(columns[0] + " = " + std::to_string(content_flags_entry.id)); update_values.push_back(columns[1] + " = '" + EscapeString(content_flags_entry.flag_name) + "'"); update_values.push_back(columns[2] + " = " + std::to_string(content_flags_entry.enabled)); update_values.push_back(columns[3] + " = '" + EscapeString(content_flags_entry.notes) + "'"); @@ -200,7 +199,6 @@ public: { std::vector insert_values; - insert_values.push_back(std::to_string(content_flags_entry.id)); insert_values.push_back("'" + EscapeString(content_flags_entry.flag_name) + "'"); insert_values.push_back(std::to_string(content_flags_entry.enabled)); insert_values.push_back("'" + EscapeString(content_flags_entry.notes) + "'"); @@ -232,7 +230,6 @@ public: for (auto &content_flags_entry: content_flags_entries) { std::vector insert_values; - insert_values.push_back(std::to_string(content_flags_entry.id)); insert_values.push_back("'" + EscapeString(content_flags_entry.flag_name) + "'"); insert_values.push_back(std::to_string(content_flags_entry.enabled)); insert_values.push_back("'" + EscapeString(content_flags_entry.notes) + "'"); @@ -314,7 +311,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +318,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_CONTENT_FLAGS_REPOSITORY_H diff --git a/common/repositories/base/base_data_buckets_repository.h b/common/repositories/base/base_data_buckets_repository.h index 428b0c55c..60608174c 100644 --- a/common/repositories/base/base_data_buckets_repository.h +++ b/common/repositories/base/base_data_buckets_repository.h @@ -311,7 +311,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -319,6 +318,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_DATA_BUCKETS_REPOSITORY_H diff --git a/common/repositories/base/base_db_str_repository.h b/common/repositories/base/base_db_str_repository.h index 006dc1aa0..c5dc031ac 100644 --- a/common/repositories/base/base_db_str_repository.h +++ b/common/repositories/base/base_db_str_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_DB_STR_REPOSITORY_H diff --git a/common/repositories/base/base_discovered_items_repository.h b/common/repositories/base/base_discovered_items_repository.h index 9f31dc3bb..55ee1cc2e 100644 --- a/common/repositories/base/base_discovered_items_repository.h +++ b/common/repositories/base/base_discovered_items_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_DISCOVERED_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h index 67734c00b..d8da79ed1 100644 --- a/common/repositories/base/base_doors_repository.h +++ b/common/repositories/base/base_doors_repository.h @@ -581,7 +581,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -589,6 +588,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_DOORS_REPOSITORY_H diff --git a/common/repositories/base/base_eventlog_repository.h b/common/repositories/base/base_eventlog_repository.h index 76ce850aa..ce166886e 100644 --- a/common/repositories/base/base_eventlog_repository.h +++ b/common/repositories/base/base_eventlog_repository.h @@ -365,7 +365,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -373,6 +372,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_EVENTLOG_REPOSITORY_H diff --git a/common/repositories/base/base_faction_base_data_repository.h b/common/repositories/base/base_faction_base_data_repository.h index a7e0f5170..808bbef1f 100644 --- a/common/repositories/base/base_faction_base_data_repository.h +++ b/common/repositories/base/base_faction_base_data_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FACTION_BASE_DATA_REPOSITORY_H diff --git a/common/repositories/base/base_faction_list_mod_repository.h b/common/repositories/base/base_faction_list_mod_repository.h index 76ab20eca..264e1dc51 100644 --- a/common/repositories/base/base_faction_list_mod_repository.h +++ b/common/repositories/base/base_faction_list_mod_repository.h @@ -311,7 +311,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -319,6 +318,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FACTION_LIST_MOD_REPOSITORY_H diff --git a/common/repositories/base/base_faction_list_repository.h b/common/repositories/base/base_faction_list_repository.h index 56472a500..cbb47991d 100644 --- a/common/repositories/base/base_faction_list_repository.h +++ b/common/repositories/base/base_faction_list_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FACTION_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_faction_values_repository.h b/common/repositories/base/base_faction_values_repository.h index 287a1f578..2159bfec7 100644 --- a/common/repositories/base/base_faction_values_repository.h +++ b/common/repositories/base/base_faction_values_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FACTION_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_fishing_repository.h b/common/repositories/base/base_fishing_repository.h index f707477f1..acd419755 100644 --- a/common/repositories/base/base_fishing_repository.h +++ b/common/repositories/base/base_fishing_repository.h @@ -365,7 +365,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -373,6 +372,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FISHING_REPOSITORY_H diff --git a/common/repositories/base/base_forage_repository.h b/common/repositories/base/base_forage_repository.h index 981796e3c..bd6411187 100644 --- a/common/repositories/base/base_forage_repository.h +++ b/common/repositories/base/base_forage_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FORAGE_REPOSITORY_H diff --git a/common/repositories/base/base_friends_repository.h b/common/repositories/base/base_friends_repository.h index fb59c824f..2028c474a 100644 --- a/common/repositories/base/base_friends_repository.h +++ b/common/repositories/base/base_friends_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_FRIENDS_REPOSITORY_H diff --git a/common/repositories/base/base_global_loot_repository.h b/common/repositories/base/base_global_loot_repository.h index ec93f3c36..69bf951c7 100644 --- a/common/repositories/base/base_global_loot_repository.h +++ b/common/repositories/base/base_global_loot_repository.h @@ -419,7 +419,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -427,6 +426,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GLOBAL_LOOT_REPOSITORY_H diff --git a/common/repositories/base/base_gm_ips_repository.h b/common/repositories/base/base_gm_ips_repository.h index 933bb047e..c486fada1 100644 --- a/common/repositories/base/base_gm_ips_repository.h +++ b/common/repositories/base/base_gm_ips_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GM_IPS_REPOSITORY_H diff --git a/common/repositories/base/base_goallists_repository.h b/common/repositories/base/base_goallists_repository.h index e3761f8b2..b483c940e 100644 --- a/common/repositories/base/base_goallists_repository.h +++ b/common/repositories/base/base_goallists_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GOALLISTS_REPOSITORY_H diff --git a/common/repositories/base/base_graveyard_repository.h b/common/repositories/base/base_graveyard_repository.h index b86b045bb..0ed2eca7a 100644 --- a/common/repositories/base/base_graveyard_repository.h +++ b/common/repositories/base/base_graveyard_repository.h @@ -329,7 +329,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -337,6 +336,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GRAVEYARD_REPOSITORY_H diff --git a/common/repositories/base/base_grid_repository.h b/common/repositories/base/base_grid_repository.h index a60580472..be0574fc0 100644 --- a/common/repositories/base/base_grid_repository.h +++ b/common/repositories/base/base_grid_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h index 8b06cd5d9..b2b46dbb8 100644 --- a/common/repositories/base/base_ground_spawns_repository.h +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -428,7 +428,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -436,6 +435,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GROUND_SPAWNS_REPOSITORY_H diff --git a/common/repositories/base/base_group_id_repository.h b/common/repositories/base/base_group_id_repository.h index ac166ee94..64a07429d 100644 --- a/common/repositories/base/base_group_id_repository.h +++ b/common/repositories/base/base_group_id_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GROUP_ID_REPOSITORY_H diff --git a/common/repositories/base/base_group_leaders_repository.h b/common/repositories/base/base_group_leaders_repository.h index bfb73c50e..e2551ade9 100644 --- a/common/repositories/base/base_group_leaders_repository.h +++ b/common/repositories/base/base_group_leaders_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GROUP_LEADERS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_members_repository.h b/common/repositories/base/base_guild_members_repository.h index f5835d582..02b26e7c8 100644 --- a/common/repositories/base/base_guild_members_repository.h +++ b/common/repositories/base/base_guild_members_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GUILD_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_ranks_repository.h b/common/repositories/base/base_guild_ranks_repository.h index 2b3a9aca8..2d23b41c9 100644 --- a/common/repositories/base/base_guild_ranks_repository.h +++ b/common/repositories/base/base_guild_ranks_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GUILD_RANKS_REPOSITORY_H diff --git a/common/repositories/base/base_guild_relations_repository.h b/common/repositories/base/base_guild_relations_repository.h index c0185cf8c..0ebead9e1 100644 --- a/common/repositories/base/base_guild_relations_repository.h +++ b/common/repositories/base/base_guild_relations_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GUILD_RELATIONS_REPOSITORY_H diff --git a/common/repositories/base/base_guilds_repository.h b/common/repositories/base/base_guilds_repository.h index 85e43ff03..19c4573a4 100644 --- a/common/repositories/base/base_guilds_repository.h +++ b/common/repositories/base/base_guilds_repository.h @@ -356,7 +356,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -364,6 +363,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_GUILDS_REPOSITORY_H diff --git a/common/repositories/base/base_hackers_repository.h b/common/repositories/base/base_hackers_repository.h index 9affdf6ef..c580fdf10 100644 --- a/common/repositories/base/base_hackers_repository.h +++ b/common/repositories/base/base_hackers_repository.h @@ -329,7 +329,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -337,6 +336,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_HACKERS_REPOSITORY_H diff --git a/common/repositories/base/base_instance_list_player_repository.h b/common/repositories/base/base_instance_list_player_repository.h index dbe253236..242655b58 100644 --- a/common/repositories/base/base_instance_list_player_repository.h +++ b/common/repositories/base/base_instance_list_player_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_INSTANCE_LIST_PLAYER_REPOSITORY_H diff --git a/common/repositories/base/base_instance_list_repository.h b/common/repositories/base/base_instance_list_repository.h index 1366fa6da..ac26a94f5 100644 --- a/common/repositories/base/base_instance_list_repository.h +++ b/common/repositories/base/base_instance_list_repository.h @@ -338,7 +338,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -346,6 +345,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_INSTANCE_LIST_REPOSITORY_H diff --git a/common/repositories/base/base_inventory_repository.h b/common/repositories/base/base_inventory_repository.h index e07cc892d..b78a911e4 100644 --- a/common/repositories/base/base_inventory_repository.h +++ b/common/repositories/base/base_inventory_repository.h @@ -422,7 +422,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -430,6 +429,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_INVENTORY_REPOSITORY_H diff --git a/common/repositories/base/base_inventory_snapshots_repository.h b/common/repositories/base/base_inventory_snapshots_repository.h index d18700645..907d32244 100644 --- a/common/repositories/base/base_inventory_snapshots_repository.h +++ b/common/repositories/base/base_inventory_snapshots_repository.h @@ -431,7 +431,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -439,6 +438,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_INVENTORY_SNAPSHOTS_REPOSITORY_H diff --git a/common/repositories/base/base_ip_exemptions_repository.h b/common/repositories/base/base_ip_exemptions_repository.h index 380c795f9..b4596e381 100644 --- a/common/repositories/base/base_ip_exemptions_repository.h +++ b/common/repositories/base/base_ip_exemptions_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_IP_EXEMPTIONS_REPOSITORY_H diff --git a/common/repositories/base/base_item_tick_repository.h b/common/repositories/base/base_item_tick_repository.h index 95ea59c9e..0c4ddc5b0 100644 --- a/common/repositories/base/base_item_tick_repository.h +++ b/common/repositories/base/base_item_tick_repository.h @@ -329,7 +329,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -337,6 +336,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ITEM_TICK_REPOSITORY_H diff --git a/common/repositories/base/base_items_repository.h b/common/repositories/base/base_items_repository.h index 1920c569a..81a5f261e 100644 --- a/common/repositories/base/base_items_repository.h +++ b/common/repositories/base/base_items_repository.h @@ -2843,7 +2843,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -2851,6 +2850,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_ldon_trap_entries_repository.h b/common/repositories/base/base_ldon_trap_entries_repository.h index f69ace2f7..103ecda10 100644 --- a/common/repositories/base/base_ldon_trap_entries_repository.h +++ b/common/repositories/base/base_ldon_trap_entries_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LDON_TRAP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_ldon_trap_templates_repository.h b/common/repositories/base/base_ldon_trap_templates_repository.h index 33cb42358..7b437c6d5 100644 --- a/common/repositories/base/base_ldon_trap_templates_repository.h +++ b/common/repositories/base/base_ldon_trap_templates_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LDON_TRAP_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/base/base_level_exp_mods_repository.h b/common/repositories/base/base_level_exp_mods_repository.h index 15aedfb14..a25bd1fb0 100644 --- a/common/repositories/base/base_level_exp_mods_repository.h +++ b/common/repositories/base/base_level_exp_mods_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LEVEL_EXP_MODS_REPOSITORY_H diff --git a/common/repositories/base/base_lfguild_repository.h b/common/repositories/base/base_lfguild_repository.h index acf7f1f9c..4f5f7fff8 100644 --- a/common/repositories/base/base_lfguild_repository.h +++ b/common/repositories/base/base_lfguild_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LFGUILD_REPOSITORY_H diff --git a/common/repositories/base/base_login_accounts_repository.h b/common/repositories/base/base_login_accounts_repository.h index 91b493ca0..d6f75cd74 100644 --- a/common/repositories/base/base_login_accounts_repository.h +++ b/common/repositories/base/base_login_accounts_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGIN_ACCOUNTS_REPOSITORY_H diff --git a/common/repositories/base/base_login_api_tokens_repository.h b/common/repositories/base/base_login_api_tokens_repository.h index 359b1b723..fa2a1b96c 100644 --- a/common/repositories/base/base_login_api_tokens_repository.h +++ b/common/repositories/base/base_login_api_tokens_repository.h @@ -329,7 +329,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -337,6 +336,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGIN_API_TOKENS_REPOSITORY_H diff --git a/common/repositories/base/base_login_server_admins_repository.h b/common/repositories/base/base_login_server_admins_repository.h index 540b58c4b..c0eeebee2 100644 --- a/common/repositories/base/base_login_server_admins_repository.h +++ b/common/repositories/base/base_login_server_admins_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGIN_SERVER_ADMINS_REPOSITORY_H diff --git a/common/repositories/base/base_login_server_list_types_repository.h b/common/repositories/base/base_login_server_list_types_repository.h index 140115123..c82355f5a 100644 --- a/common/repositories/base/base_login_server_list_types_repository.h +++ b/common/repositories/base/base_login_server_list_types_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGIN_SERVER_LIST_TYPES_REPOSITORY_H diff --git a/common/repositories/base/base_login_world_servers_repository.h b/common/repositories/base/base_login_world_servers_repository.h index 26849902d..8c05bdf06 100644 --- a/common/repositories/base/base_login_world_servers_repository.h +++ b/common/repositories/base/base_login_world_servers_repository.h @@ -365,7 +365,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -373,6 +372,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGIN_WORLD_SERVERS_REPOSITORY_H diff --git a/common/repositories/base/base_logsys_categories_repository.h b/common/repositories/base/base_logsys_categories_repository.h index c0def37ac..2d21ec28f 100644 --- a/common/repositories/base/base_logsys_categories_repository.h +++ b/common/repositories/base/base_logsys_categories_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOGSYS_CATEGORIES_REPOSITORY_H diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h index 02a7d10d4..7e2a99929 100644 --- a/common/repositories/base/base_lootdrop_entries_repository.h +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOOTDROP_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_lootdrop_repository.h b/common/repositories/base/base_lootdrop_repository.h index c49a0bd15..e1b41634a 100644 --- a/common/repositories/base/base_lootdrop_repository.h +++ b/common/repositories/base/base_lootdrop_repository.h @@ -320,7 +320,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -328,6 +327,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOOTDROP_REPOSITORY_H diff --git a/common/repositories/base/base_loottable_entries_repository.h b/common/repositories/base/base_loottable_entries_repository.h index 4c9dca46d..712e8ffa9 100644 --- a/common/repositories/base/base_loottable_entries_repository.h +++ b/common/repositories/base/base_loottable_entries_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOOTTABLE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_loottable_repository.h b/common/repositories/base/base_loottable_repository.h index c6388b3ed..f301c8a4b 100644 --- a/common/repositories/base/base_loottable_repository.h +++ b/common/repositories/base/base_loottable_repository.h @@ -356,7 +356,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -364,6 +363,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_LOOTTABLE_REPOSITORY_H diff --git a/common/repositories/base/base_mail_repository.h b/common/repositories/base/base_mail_repository.h index b8d610af5..5b92400a9 100644 --- a/common/repositories/base/base_mail_repository.h +++ b/common/repositories/base/base_mail_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_MAIL_REPOSITORY_H diff --git a/common/repositories/base/base_merchantlist_repository.h b/common/repositories/base/base_merchantlist_repository.h index 970f0e56e..ea32bddba 100644 --- a/common/repositories/base/base_merchantlist_repository.h +++ b/common/repositories/base/base_merchantlist_repository.h @@ -377,7 +377,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -385,6 +384,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_MERCHANTLIST_REPOSITORY_H diff --git a/common/repositories/base/base_merchantlist_temp_repository.h b/common/repositories/base/base_merchantlist_temp_repository.h index 618229a2d..a2f22121c 100644 --- a/common/repositories/base/base_merchantlist_temp_repository.h +++ b/common/repositories/base/base_merchantlist_temp_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_MERCHANTLIST_TEMP_REPOSITORY_H diff --git a/common/repositories/base/base_name_filter_repository.h b/common/repositories/base/base_name_filter_repository.h index 1077e08a8..c94ff718c 100644 --- a/common/repositories/base/base_name_filter_repository.h +++ b/common/repositories/base/base_name_filter_repository.h @@ -293,7 +293,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -301,6 +300,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NAME_FILTER_REPOSITORY_H diff --git a/common/repositories/base/base_npc_emotes_repository.h b/common/repositories/base/base_npc_emotes_repository.h index ce0271f8a..55bcba51e 100644 --- a/common/repositories/base/base_npc_emotes_repository.h +++ b/common/repositories/base/base_npc_emotes_repository.h @@ -320,7 +320,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -328,6 +327,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_EMOTES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_faction_entries_repository.h b/common/repositories/base/base_npc_faction_entries_repository.h index 177609556..c24952184 100644 --- a/common/repositories/base/base_npc_faction_entries_repository.h +++ b/common/repositories/base/base_npc_faction_entries_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_FACTION_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_faction_repository.h b/common/repositories/base/base_npc_faction_repository.h index 7e9547770..91a6a2502 100644 --- a/common/repositories/base/base_npc_faction_repository.h +++ b/common/repositories/base/base_npc_faction_repository.h @@ -311,7 +311,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -319,6 +318,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_FACTION_REPOSITORY_H diff --git a/common/repositories/base/base_npc_scale_global_base_repository.h b/common/repositories/base/base_npc_scale_global_base_repository.h index ad39a47f3..4e36eb9e0 100644 --- a/common/repositories/base/base_npc_scale_global_base_repository.h +++ b/common/repositories/base/base_npc_scale_global_base_repository.h @@ -530,7 +530,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -538,6 +537,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_SCALE_GLOBAL_BASE_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_effects_entries_repository.h b/common/repositories/base/base_npc_spells_effects_entries_repository.h index 30206e5a8..42bee911c 100644 --- a/common/repositories/base/base_npc_spells_effects_entries_repository.h +++ b/common/repositories/base/base_npc_spells_effects_entries_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_SPELLS_EFFECTS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_effects_repository.h b/common/repositories/base/base_npc_spells_effects_repository.h index ef6755e9b..c5d098ec0 100644 --- a/common/repositories/base/base_npc_spells_effects_repository.h +++ b/common/repositories/base/base_npc_spells_effects_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_SPELLS_EFFECTS_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_entries_repository.h b/common/repositories/base/base_npc_spells_entries_repository.h index 52f34c15b..828df44ea 100644 --- a/common/repositories/base/base_npc_spells_entries_repository.h +++ b/common/repositories/base/base_npc_spells_entries_repository.h @@ -383,7 +383,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -391,6 +390,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_SPELLS_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_spells_repository.h b/common/repositories/base/base_npc_spells_repository.h index 563da0517..a6b8fda6b 100644 --- a/common/repositories/base/base_npc_spells_repository.h +++ b/common/repositories/base/base_npc_spells_repository.h @@ -464,7 +464,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -472,6 +471,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_SPELLS_REPOSITORY_H diff --git a/common/repositories/base/base_npc_types_repository.h b/common/repositories/base/base_npc_types_repository.h index d0e0d340b..551372bfd 100644 --- a/common/repositories/base/base_npc_types_repository.h +++ b/common/repositories/base/base_npc_types_repository.h @@ -1373,7 +1373,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -1381,6 +1380,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_TYPES_REPOSITORY_H diff --git a/common/repositories/base/base_npc_types_tint_repository.h b/common/repositories/base/base_npc_types_tint_repository.h index c645859ab..c704426ad 100644 --- a/common/repositories/base/base_npc_types_tint_repository.h +++ b/common/repositories/base/base_npc_types_tint_repository.h @@ -539,7 +539,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -547,6 +546,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_NPC_TYPES_TINT_REPOSITORY_H diff --git a/common/repositories/base/base_object_contents_repository.h b/common/repositories/base/base_object_contents_repository.h index 632612862..3b4b21859 100644 --- a/common/repositories/base/base_object_contents_repository.h +++ b/common/repositories/base/base_object_contents_repository.h @@ -386,7 +386,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -394,6 +393,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_OBJECT_CONTENTS_REPOSITORY_H diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h index 9896520f1..92db58261 100644 --- a/common/repositories/base/base_object_repository.h +++ b/common/repositories/base/base_object_repository.h @@ -509,7 +509,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -517,6 +516,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_OBJECT_REPOSITORY_H diff --git a/common/repositories/base/base_perl_event_export_settings_repository.h b/common/repositories/base/base_perl_event_export_settings_repository.h index 0db0459d8..95029bdb3 100644 --- a/common/repositories/base/base_perl_event_export_settings_repository.h +++ b/common/repositories/base/base_perl_event_export_settings_repository.h @@ -341,7 +341,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -349,6 +348,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PERL_EVENT_EXPORT_SETTINGS_REPOSITORY_H diff --git a/common/repositories/base/base_petitions_repository.h b/common/repositories/base/base_petitions_repository.h index b450c02fc..61f642f9a 100644 --- a/common/repositories/base/base_petitions_repository.h +++ b/common/repositories/base/base_petitions_repository.h @@ -419,7 +419,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -427,6 +426,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PETITIONS_REPOSITORY_H diff --git a/common/repositories/base/base_pets_equipmentset_entries_repository.h b/common/repositories/base/base_pets_equipmentset_entries_repository.h index ef2238b9d..aa97e6eab 100644 --- a/common/repositories/base/base_pets_equipmentset_entries_repository.h +++ b/common/repositories/base/base_pets_equipmentset_entries_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PETS_EQUIPMENTSET_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_pets_equipmentset_repository.h b/common/repositories/base/base_pets_equipmentset_repository.h index 1d8d33ee3..53c0e8740 100644 --- a/common/repositories/base/base_pets_equipmentset_repository.h +++ b/common/repositories/base/base_pets_equipmentset_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PETS_EQUIPMENTSET_REPOSITORY_H diff --git a/common/repositories/base/base_pets_repository.h b/common/repositories/base/base_pets_repository.h index 940c6261a..ebc99527f 100644 --- a/common/repositories/base/base_pets_repository.h +++ b/common/repositories/base/base_pets_repository.h @@ -47,7 +47,7 @@ public: static std::string PrimaryKey() { - return std::string("type"); + return std::string("petpower"); } static std::vector Columns() @@ -129,7 +129,7 @@ public: ) { for (auto &pets : petss) { - if (pets.type == pets_id) { + if (pets.petpower == pets_id) { return pets; } } @@ -207,7 +207,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - pets_entry.type + pets_entry.petpower ) ); @@ -238,7 +238,7 @@ public: ); if (results.Success()) { - pets_entry.type = results.LastInsertedID(); + pets_entry.petpower = results.LastInsertedID(); return pets_entry; } @@ -350,7 +350,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -358,6 +357,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PETS_REPOSITORY_H diff --git a/common/repositories/base/base_player_titlesets_repository.h b/common/repositories/base/base_player_titlesets_repository.h index 648da53c3..b5e51b70d 100644 --- a/common/repositories/base/base_player_titlesets_repository.h +++ b/common/repositories/base/base_player_titlesets_repository.h @@ -302,7 +302,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -310,6 +309,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PLAYER_TITLESETS_REPOSITORY_H diff --git a/common/repositories/base/base_proximities_repository.h b/common/repositories/base/base_proximities_repository.h index de9026645..bcb5522a5 100644 --- a/common/repositories/base/base_proximities_repository.h +++ b/common/repositories/base/base_proximities_repository.h @@ -350,7 +350,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -358,6 +357,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_PROXIMITIES_REPOSITORY_H diff --git a/common/repositories/base/base_quest_globals_repository.h b/common/repositories/base/base_quest_globals_repository.h index 6db28c9a2..9c16ea35f 100644 --- a/common/repositories/base/base_quest_globals_repository.h +++ b/common/repositories/base/base_quest_globals_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_QUEST_GLOBALS_REPOSITORY_H diff --git a/common/repositories/base/base_raid_details_repository.h b/common/repositories/base/base_raid_details_repository.h index 80181d8bc..2776eaaad 100644 --- a/common/repositories/base/base_raid_details_repository.h +++ b/common/repositories/base/base_raid_details_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_RAID_DETAILS_REPOSITORY_H diff --git a/common/repositories/base/base_raid_members_repository.h b/common/repositories/base/base_raid_members_repository.h index b567edf70..6f33506d9 100644 --- a/common/repositories/base/base_raid_members_repository.h +++ b/common/repositories/base/base_raid_members_repository.h @@ -359,7 +359,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -367,6 +366,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_RAID_MEMBERS_REPOSITORY_H diff --git a/common/repositories/base/base_reports_repository.h b/common/repositories/base/base_reports_repository.h index e24c18c8f..10471d7a7 100644 --- a/common/repositories/base/base_reports_repository.h +++ b/common/repositories/base/base_reports_repository.h @@ -311,7 +311,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -319,6 +318,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_REPORTS_REPOSITORY_H diff --git a/common/repositories/base/base_respawn_times_repository.h b/common/repositories/base/base_respawn_times_repository.h index f94896c07..9eaac14d9 100644 --- a/common/repositories/base/base_respawn_times_repository.h +++ b/common/repositories/base/base_respawn_times_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_RESPAWN_TIMES_REPOSITORY_H diff --git a/common/repositories/base/base_rule_sets_repository.h b/common/repositories/base/base_rule_sets_repository.h index 76ea63faf..b4b024525 100644 --- a/common/repositories/base/base_rule_sets_repository.h +++ b/common/repositories/base/base_rule_sets_repository.h @@ -293,7 +293,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -301,6 +300,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_RULE_SETS_REPOSITORY_H diff --git a/common/repositories/base/base_rule_values_repository.h b/common/repositories/base/base_rule_values_repository.h index 5e3038cea..a92a89c68 100644 --- a/common/repositories/base/base_rule_values_repository.h +++ b/common/repositories/base/base_rule_values_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_RULE_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_saylink_repository.h b/common/repositories/base/base_saylink_repository.h index 249d93417..d58a02a9b 100644 --- a/common/repositories/base/base_saylink_repository.h +++ b/common/repositories/base/base_saylink_repository.h @@ -293,7 +293,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -301,6 +300,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SAYLINK_REPOSITORY_H diff --git a/common/repositories/base/base_skill_caps_repository.h b/common/repositories/base/base_skill_caps_repository.h index 15d33b3f3..06ad2ba34 100644 --- a/common/repositories/base/base_skill_caps_repository.h +++ b/common/repositories/base/base_skill_caps_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SKILL_CAPS_REPOSITORY_H diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h index 35b729a21..003b135b2 100644 --- a/common/repositories/base/base_spawn2_repository.h +++ b/common/repositories/base/base_spawn2_repository.h @@ -410,7 +410,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -418,6 +417,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWN2_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_condition_values_repository.h b/common/repositories/base/base_spawn_condition_values_repository.h index 3b00801bf..5e27e3a66 100644 --- a/common/repositories/base/base_spawn_condition_values_repository.h +++ b/common/repositories/base/base_spawn_condition_values_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWN_CONDITION_VALUES_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_conditions_repository.h b/common/repositories/base/base_spawn_conditions_repository.h index dabb1ff70..5d81e44b6 100644 --- a/common/repositories/base/base_spawn_conditions_repository.h +++ b/common/repositories/base/base_spawn_conditions_repository.h @@ -44,7 +44,7 @@ public: static std::string PrimaryKey() { - return std::string("zone"); + return std::string("id"); } static std::vector Columns() @@ -120,7 +120,7 @@ public: ) { for (auto &spawn_conditions : spawn_conditionss) { - if (spawn_conditions.zone == spawn_conditions_id) { + if (spawn_conditions.id == spawn_conditions_id) { return spawn_conditions; } } @@ -192,7 +192,7 @@ public: TableName(), implode(", ", update_values), PrimaryKey(), - spawn_conditions_entry.zone + spawn_conditions_entry.id ) ); @@ -220,7 +220,7 @@ public: ); if (results.Success()) { - spawn_conditions_entry.zone = results.LastInsertedID(); + spawn_conditions_entry.id = results.LastInsertedID(); return spawn_conditions_entry; } @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWN_CONDITIONS_REPOSITORY_H diff --git a/common/repositories/base/base_spawn_events_repository.h b/common/repositories/base/base_spawn_events_repository.h index c0e92ee26..0a89251a5 100644 --- a/common/repositories/base/base_spawn_events_repository.h +++ b/common/repositories/base/base_spawn_events_repository.h @@ -401,7 +401,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -409,6 +408,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWN_EVENTS_REPOSITORY_H diff --git a/common/repositories/base/base_spawnentry_repository.h b/common/repositories/base/base_spawnentry_repository.h index 9392dc45c..48d24415e 100644 --- a/common/repositories/base/base_spawnentry_repository.h +++ b/common/repositories/base/base_spawnentry_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWNENTRY_REPOSITORY_H diff --git a/common/repositories/base/base_spawngroup_repository.h b/common/repositories/base/base_spawngroup_repository.h index bc55f8dca..a67965be0 100644 --- a/common/repositories/base/base_spawngroup_repository.h +++ b/common/repositories/base/base_spawngroup_repository.h @@ -392,7 +392,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -400,6 +399,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPAWNGROUP_REPOSITORY_H diff --git a/common/repositories/base/base_spell_buckets_repository.h b/common/repositories/base/base_spell_buckets_repository.h index 4481e5d74..db038f510 100644 --- a/common/repositories/base/base_spell_buckets_repository.h +++ b/common/repositories/base/base_spell_buckets_repository.h @@ -305,7 +305,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -313,6 +312,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPELL_BUCKETS_REPOSITORY_H diff --git a/common/repositories/base/base_spell_globals_repository.h b/common/repositories/base/base_spell_globals_repository.h index e878cc5c4..9a8c6dc81 100644 --- a/common/repositories/base/base_spell_globals_repository.h +++ b/common/repositories/base/base_spell_globals_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPELL_GLOBALS_REPOSITORY_H diff --git a/common/repositories/base/base_spells_new_repository.h b/common/repositories/base/base_spells_new_repository.h index 2c48a3dbb..a38bdff4b 100644 --- a/common/repositories/base/base_spells_new_repository.h +++ b/common/repositories/base/base_spells_new_repository.h @@ -2411,7 +2411,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -2419,6 +2418,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_SPELLS_NEW_REPOSITORY_H diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h index 4643b458a..eb5c882fe 100644 --- a/common/repositories/base/base_start_zones_repository.h +++ b/common/repositories/base/base_start_zones_repository.h @@ -440,7 +440,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -448,6 +447,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_START_ZONES_REPOSITORY_H diff --git a/common/repositories/base/base_starting_items_repository.h b/common/repositories/base/base_starting_items_repository.h index e8c45158e..4c932d200 100644 --- a/common/repositories/base/base_starting_items_repository.h +++ b/common/repositories/base/base_starting_items_repository.h @@ -383,7 +383,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -391,6 +390,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_STARTING_ITEMS_REPOSITORY_H diff --git a/common/repositories/base/base_task_activities_repository.h b/common/repositories/base/base_task_activities_repository.h index 86668b17a..2b09b0417 100644 --- a/common/repositories/base/base_task_activities_repository.h +++ b/common/repositories/base/base_task_activities_repository.h @@ -413,7 +413,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -421,6 +420,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TASK_ACTIVITIES_REPOSITORY_H diff --git a/common/repositories/base/base_tasks_repository.h b/common/repositories/base/base_tasks_repository.h index 08d887073..34a5bae10 100644 --- a/common/repositories/base/base_tasks_repository.h +++ b/common/repositories/base/base_tasks_repository.h @@ -422,7 +422,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -430,6 +429,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TASKS_REPOSITORY_H diff --git a/common/repositories/base/base_tasksets_repository.h b/common/repositories/base/base_tasksets_repository.h index cf4444e31..1cb822eba 100644 --- a/common/repositories/base/base_tasksets_repository.h +++ b/common/repositories/base/base_tasksets_repository.h @@ -296,7 +296,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -304,6 +303,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TASKSETS_REPOSITORY_H diff --git a/common/repositories/base/base_timers_repository.h b/common/repositories/base/base_timers_repository.h index e1e60cadb..8a87ff3fd 100644 --- a/common/repositories/base/base_timers_repository.h +++ b/common/repositories/base/base_timers_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TIMERS_REPOSITORY_H diff --git a/common/repositories/base/base_titles_repository.h b/common/repositories/base/base_titles_repository.h index dbe3e282f..0ed79fcc9 100644 --- a/common/repositories/base/base_titles_repository.h +++ b/common/repositories/base/base_titles_repository.h @@ -428,7 +428,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -436,6 +435,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TITLES_REPOSITORY_H diff --git a/common/repositories/base/base_trader_repository.h b/common/repositories/base/base_trader_repository.h index acfc75194..bfdf1e54b 100644 --- a/common/repositories/base/base_trader_repository.h +++ b/common/repositories/base/base_trader_repository.h @@ -332,7 +332,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -340,6 +339,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = database.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRADER_REPOSITORY_H diff --git a/common/repositories/base/base_tradeskill_recipe_entries_repository.h b/common/repositories/base/base_tradeskill_recipe_entries_repository.h index c089e7e28..3efa08866 100644 --- a/common/repositories/base/base_tradeskill_recipe_entries_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_entries_repository.h @@ -347,7 +347,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -355,6 +354,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRADESKILL_RECIPE_ENTRIES_REPOSITORY_H diff --git a/common/repositories/base/base_tradeskill_recipe_repository.h b/common/repositories/base/base_tradeskill_recipe_repository.h index 7b768ad6a..9a850174f 100644 --- a/common/repositories/base/base_tradeskill_recipe_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_repository.h @@ -401,7 +401,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -409,6 +408,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRADESKILL_RECIPE_REPOSITORY_H diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h index 97817b671..cb1643048 100644 --- a/common/repositories/base/base_traps_repository.h +++ b/common/repositories/base/base_traps_repository.h @@ -491,7 +491,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -499,6 +498,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRAPS_REPOSITORY_H diff --git a/common/repositories/base/base_tribute_levels_repository.h b/common/repositories/base/base_tribute_levels_repository.h index e430c8798..8027b89e0 100644 --- a/common/repositories/base/base_tribute_levels_repository.h +++ b/common/repositories/base/base_tribute_levels_repository.h @@ -314,7 +314,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -322,6 +321,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRIBUTE_LEVELS_REPOSITORY_H diff --git a/common/repositories/base/base_tributes_repository.h b/common/repositories/base/base_tributes_repository.h index 69e2c6c9c..b6b8d4745 100644 --- a/common/repositories/base/base_tributes_repository.h +++ b/common/repositories/base/base_tributes_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_TRIBUTES_REPOSITORY_H diff --git a/common/repositories/base/base_veteran_reward_templates_repository.h b/common/repositories/base/base_veteran_reward_templates_repository.h index 1c81f7e06..4f8366470 100644 --- a/common/repositories/base/base_veteran_reward_templates_repository.h +++ b/common/repositories/base/base_veteran_reward_templates_repository.h @@ -323,7 +323,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -331,6 +330,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_VETERAN_REWARD_TEMPLATES_REPOSITORY_H diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index fb2f06b51..708e5fe31 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -455,7 +455,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -463,6 +462,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ZONE_POINTS_REPOSITORY_H diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 71ffeaade..41f44f22b 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -1049,7 +1049,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -1057,6 +1056,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = content_db.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_ZONE_REPOSITORY_H diff --git a/common/repositories/base_data_repository.h b/common/repositories/base_data_repository.h index 27b453bcc..55bbb781b 100644 --- a/common/repositories/base_data_repository.h +++ b/common/repositories/base_data_repository.h @@ -29,16 +29,18 @@ class BaseDataRepository: public BaseBaseDataRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/blocked_spells_repository.h b/common/repositories/blocked_spells_repository.h index 0f5add1df..54d66e493 100644 --- a/common/repositories/blocked_spells_repository.h +++ b/common/repositories/blocked_spells_repository.h @@ -29,16 +29,18 @@ class BlockedSpellsRepository: public BaseBlockedSpellsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/bug_reports_repository.h b/common/repositories/bug_reports_repository.h index 39f19275b..36b2258d2 100644 --- a/common/repositories/bug_reports_repository.h +++ b/common/repositories/bug_reports_repository.h @@ -29,16 +29,18 @@ class BugReportsRepository: public BaseBugReportsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/bugs_repository.h b/common/repositories/bugs_repository.h index b78b7f9cd..8ca1ac25c 100644 --- a/common/repositories/bugs_repository.h +++ b/common/repositories/bugs_repository.h @@ -29,16 +29,18 @@ class BugsRepository: public BaseBugsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/buyer_repository.h b/common/repositories/buyer_repository.h index 147d8266e..d3ecb7585 100644 --- a/common/repositories/buyer_repository.h +++ b/common/repositories/buyer_repository.h @@ -29,16 +29,18 @@ class BuyerRepository: public BaseBuyerRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/char_create_combinations_repository.h b/common/repositories/char_create_combinations_repository.h index 22164139a..1d0260958 100644 --- a/common/repositories/char_create_combinations_repository.h +++ b/common/repositories/char_create_combinations_repository.h @@ -29,16 +29,18 @@ class CharCreateCombinationsRepository: public BaseCharCreateCombinationsReposit public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/char_create_point_allocations_repository.h b/common/repositories/char_create_point_allocations_repository.h index 62b47e82c..1fd6cdcb9 100644 --- a/common/repositories/char_create_point_allocations_repository.h +++ b/common/repositories/char_create_point_allocations_repository.h @@ -29,16 +29,18 @@ class CharCreatePointAllocationsRepository: public BaseCharCreatePointAllocation public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/char_recipe_list_repository.h b/common/repositories/char_recipe_list_repository.h index aa991958e..f8ff81f01 100644 --- a/common/repositories/char_recipe_list_repository.h +++ b/common/repositories/char_recipe_list_repository.h @@ -29,16 +29,18 @@ class CharRecipeListRepository: public BaseCharRecipeListRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_activities_repository.h b/common/repositories/character_activities_repository.h index 256ef50e8..9b442958c 100644 --- a/common/repositories/character_activities_repository.h +++ b/common/repositories/character_activities_repository.h @@ -29,16 +29,18 @@ class CharacterActivitiesRepository: public BaseCharacterActivitiesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_alt_currency_repository.h b/common/repositories/character_alt_currency_repository.h index 9624a39c8..3f657b817 100644 --- a/common/repositories/character_alt_currency_repository.h +++ b/common/repositories/character_alt_currency_repository.h @@ -29,16 +29,18 @@ class CharacterAltCurrencyRepository: public BaseCharacterAltCurrencyRepository public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_alternate_abilities_repository.h b/common/repositories/character_alternate_abilities_repository.h index 3818c60ec..6c4bb6f16 100644 --- a/common/repositories/character_alternate_abilities_repository.h +++ b/common/repositories/character_alternate_abilities_repository.h @@ -29,16 +29,18 @@ class CharacterAlternateAbilitiesRepository: public BaseCharacterAlternateAbilit public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_auras_repository.h b/common/repositories/character_auras_repository.h index a7a8047ec..5f2669c2a 100644 --- a/common/repositories/character_auras_repository.h +++ b/common/repositories/character_auras_repository.h @@ -29,16 +29,18 @@ class CharacterAurasRepository: public BaseCharacterAurasRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_bandolier_repository.h b/common/repositories/character_bandolier_repository.h index 37400929d..aacaf042d 100644 --- a/common/repositories/character_bandolier_repository.h +++ b/common/repositories/character_bandolier_repository.h @@ -29,16 +29,18 @@ class CharacterBandolierRepository: public BaseCharacterBandolierRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_bind_repository.h b/common/repositories/character_bind_repository.h index ba61113e4..28556c296 100644 --- a/common/repositories/character_bind_repository.h +++ b/common/repositories/character_bind_repository.h @@ -29,16 +29,18 @@ class CharacterBindRepository: public BaseCharacterBindRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_buffs_repository.h b/common/repositories/character_buffs_repository.h index 45c59eb8b..d5a05dc3e 100644 --- a/common/repositories/character_buffs_repository.h +++ b/common/repositories/character_buffs_repository.h @@ -29,16 +29,18 @@ class CharacterBuffsRepository: public BaseCharacterBuffsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_corpse_items_repository.h b/common/repositories/character_corpse_items_repository.h index f564799ad..44ff0c7e2 100644 --- a/common/repositories/character_corpse_items_repository.h +++ b/common/repositories/character_corpse_items_repository.h @@ -29,16 +29,18 @@ class CharacterCorpseItemsRepository: public BaseCharacterCorpseItemsRepository public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_corpses_repository.h b/common/repositories/character_corpses_repository.h index cc91ea17f..7a0d5af55 100644 --- a/common/repositories/character_corpses_repository.h +++ b/common/repositories/character_corpses_repository.h @@ -29,16 +29,18 @@ class CharacterCorpsesRepository: public BaseCharacterCorpsesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_currency_repository.h b/common/repositories/character_currency_repository.h index 6b9254c82..661e4e7fa 100644 --- a/common/repositories/character_currency_repository.h +++ b/common/repositories/character_currency_repository.h @@ -29,16 +29,18 @@ class CharacterCurrencyRepository: public BaseCharacterCurrencyRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_data_repository.h b/common/repositories/character_data_repository.h index c9b86fc27..e8ec2d21d 100644 --- a/common/repositories/character_data_repository.h +++ b/common/repositories/character_data_repository.h @@ -29,16 +29,18 @@ class CharacterDataRepository: public BaseCharacterDataRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_disciplines_repository.h b/common/repositories/character_disciplines_repository.h index 51ea09d17..dd8dd029b 100644 --- a/common/repositories/character_disciplines_repository.h +++ b/common/repositories/character_disciplines_repository.h @@ -29,16 +29,18 @@ class CharacterDisciplinesRepository: public BaseCharacterDisciplinesRepository public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_inspect_messages_repository.h b/common/repositories/character_inspect_messages_repository.h index 998335d53..e916fd6e3 100644 --- a/common/repositories/character_inspect_messages_repository.h +++ b/common/repositories/character_inspect_messages_repository.h @@ -29,16 +29,18 @@ class CharacterInspectMessagesRepository: public BaseCharacterInspectMessagesRep public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_item_recast_repository.h b/common/repositories/character_item_recast_repository.h index 8fe170901..00814ad63 100644 --- a/common/repositories/character_item_recast_repository.h +++ b/common/repositories/character_item_recast_repository.h @@ -29,16 +29,18 @@ class CharacterItemRecastRepository: public BaseCharacterItemRecastRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_languages_repository.h b/common/repositories/character_languages_repository.h index 5be597adf..de53ea979 100644 --- a/common/repositories/character_languages_repository.h +++ b/common/repositories/character_languages_repository.h @@ -29,16 +29,18 @@ class CharacterLanguagesRepository: public BaseCharacterLanguagesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_leadership_abilities_repository.h b/common/repositories/character_leadership_abilities_repository.h index 770c3c456..a2d496001 100644 --- a/common/repositories/character_leadership_abilities_repository.h +++ b/common/repositories/character_leadership_abilities_repository.h @@ -29,16 +29,18 @@ class CharacterLeadershipAbilitiesRepository: public BaseCharacterLeadershipAbil public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_material_repository.h b/common/repositories/character_material_repository.h index 644baa081..c80f5b050 100644 --- a/common/repositories/character_material_repository.h +++ b/common/repositories/character_material_repository.h @@ -29,16 +29,18 @@ class CharacterMaterialRepository: public BaseCharacterMaterialRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_memmed_spells_repository.h b/common/repositories/character_memmed_spells_repository.h index 59933ac23..8e4ac4be7 100644 --- a/common/repositories/character_memmed_spells_repository.h +++ b/common/repositories/character_memmed_spells_repository.h @@ -29,16 +29,18 @@ class CharacterMemmedSpellsRepository: public BaseCharacterMemmedSpellsRepositor public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_pet_buffs_repository.h b/common/repositories/character_pet_buffs_repository.h index a7e780aed..1667e86df 100644 --- a/common/repositories/character_pet_buffs_repository.h +++ b/common/repositories/character_pet_buffs_repository.h @@ -29,16 +29,18 @@ class CharacterPetBuffsRepository: public BaseCharacterPetBuffsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_pet_info_repository.h b/common/repositories/character_pet_info_repository.h index 06e400abb..fcbf2a8d3 100644 --- a/common/repositories/character_pet_info_repository.h +++ b/common/repositories/character_pet_info_repository.h @@ -29,16 +29,18 @@ class CharacterPetInfoRepository: public BaseCharacterPetInfoRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_pet_inventory_repository.h b/common/repositories/character_pet_inventory_repository.h index 972b0b7c6..ab0570ab2 100644 --- a/common/repositories/character_pet_inventory_repository.h +++ b/common/repositories/character_pet_inventory_repository.h @@ -29,16 +29,18 @@ class CharacterPetInventoryRepository: public BaseCharacterPetInventoryRepositor public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_potionbelt_repository.h b/common/repositories/character_potionbelt_repository.h index 7d02c1f39..8ce1bb71b 100644 --- a/common/repositories/character_potionbelt_repository.h +++ b/common/repositories/character_potionbelt_repository.h @@ -29,16 +29,18 @@ class CharacterPotionbeltRepository: public BaseCharacterPotionbeltRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_skills_repository.h b/common/repositories/character_skills_repository.h index 044f5987a..de2f40f90 100644 --- a/common/repositories/character_skills_repository.h +++ b/common/repositories/character_skills_repository.h @@ -29,16 +29,18 @@ class CharacterSkillsRepository: public BaseCharacterSkillsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_spells_repository.h b/common/repositories/character_spells_repository.h index f2af87b01..982956ce3 100644 --- a/common/repositories/character_spells_repository.h +++ b/common/repositories/character_spells_repository.h @@ -29,16 +29,18 @@ class CharacterSpellsRepository: public BaseCharacterSpellsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/character_tasks_repository.h b/common/repositories/character_tasks_repository.h index 33a452327..71ead2aeb 100644 --- a/common/repositories/character_tasks_repository.h +++ b/common/repositories/character_tasks_repository.h @@ -29,16 +29,18 @@ class CharacterTasksRepository: public BaseCharacterTasksRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/completed_tasks_repository.h b/common/repositories/completed_tasks_repository.h index ae2a50b3f..65a9a2c5c 100644 --- a/common/repositories/completed_tasks_repository.h +++ b/common/repositories/completed_tasks_repository.h @@ -29,16 +29,18 @@ class CompletedTasksRepository: public BaseCompletedTasksRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/data_buckets_repository.h b/common/repositories/data_buckets_repository.h index 19a24c68e..d33a56304 100644 --- a/common/repositories/data_buckets_repository.h +++ b/common/repositories/data_buckets_repository.h @@ -29,16 +29,18 @@ class DataBucketsRepository: public BaseDataBucketsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/db_str_repository.h b/common/repositories/db_str_repository.h index 70287a843..95662cdfa 100644 --- a/common/repositories/db_str_repository.h +++ b/common/repositories/db_str_repository.h @@ -29,16 +29,18 @@ class DbStrRepository: public BaseDbStrRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/discovered_items_repository.h b/common/repositories/discovered_items_repository.h index b77872a9a..512ebbbd7 100644 --- a/common/repositories/discovered_items_repository.h +++ b/common/repositories/discovered_items_repository.h @@ -29,16 +29,18 @@ class DiscoveredItemsRepository: public BaseDiscoveredItemsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/doors_repository.h b/common/repositories/doors_repository.h index 1e66478d6..aa67d8e20 100644 --- a/common/repositories/doors_repository.h +++ b/common/repositories/doors_repository.h @@ -29,16 +29,18 @@ class DoorsRepository: public BaseDoorsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/eventlog_repository.h b/common/repositories/eventlog_repository.h index e316a5d54..f2d7ba369 100644 --- a/common/repositories/eventlog_repository.h +++ b/common/repositories/eventlog_repository.h @@ -29,16 +29,18 @@ class EventlogRepository: public BaseEventlogRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/faction_base_data_repository.h b/common/repositories/faction_base_data_repository.h index 0cc968803..f62890768 100644 --- a/common/repositories/faction_base_data_repository.h +++ b/common/repositories/faction_base_data_repository.h @@ -29,16 +29,18 @@ class FactionBaseDataRepository: public BaseFactionBaseDataRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/faction_list_mod_repository.h b/common/repositories/faction_list_mod_repository.h index 99834150f..2999a273b 100644 --- a/common/repositories/faction_list_mod_repository.h +++ b/common/repositories/faction_list_mod_repository.h @@ -29,16 +29,18 @@ class FactionListModRepository: public BaseFactionListModRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/faction_list_repository.h b/common/repositories/faction_list_repository.h index 8a83996e7..ef14bac7f 100644 --- a/common/repositories/faction_list_repository.h +++ b/common/repositories/faction_list_repository.h @@ -29,16 +29,18 @@ class FactionListRepository: public BaseFactionListRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/faction_values_repository.h b/common/repositories/faction_values_repository.h index 721a535dd..5c8ca4fe6 100644 --- a/common/repositories/faction_values_repository.h +++ b/common/repositories/faction_values_repository.h @@ -29,16 +29,18 @@ class FactionValuesRepository: public BaseFactionValuesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/fishing_repository.h b/common/repositories/fishing_repository.h index 3ca1da433..d5cd78cb7 100644 --- a/common/repositories/fishing_repository.h +++ b/common/repositories/fishing_repository.h @@ -29,16 +29,18 @@ class FishingRepository: public BaseFishingRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/forage_repository.h b/common/repositories/forage_repository.h index 8f291ce09..7f8e67c19 100644 --- a/common/repositories/forage_repository.h +++ b/common/repositories/forage_repository.h @@ -29,16 +29,18 @@ class ForageRepository: public BaseForageRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/friends_repository.h b/common/repositories/friends_repository.h index 273280511..0e0d0469a 100644 --- a/common/repositories/friends_repository.h +++ b/common/repositories/friends_repository.h @@ -29,16 +29,18 @@ class FriendsRepository: public BaseFriendsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/global_loot_repository.h b/common/repositories/global_loot_repository.h index 16614452c..519fee2d4 100644 --- a/common/repositories/global_loot_repository.h +++ b/common/repositories/global_loot_repository.h @@ -29,16 +29,18 @@ class GlobalLootRepository: public BaseGlobalLootRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/gm_ips_repository.h b/common/repositories/gm_ips_repository.h index 656285424..94289a519 100644 --- a/common/repositories/gm_ips_repository.h +++ b/common/repositories/gm_ips_repository.h @@ -29,16 +29,18 @@ class GmIpsRepository: public BaseGmIpsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/goallists_repository.h b/common/repositories/goallists_repository.h index d1fd6e48a..781fd6200 100644 --- a/common/repositories/goallists_repository.h +++ b/common/repositories/goallists_repository.h @@ -29,16 +29,18 @@ class GoallistsRepository: public BaseGoallistsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/graveyard_repository.h b/common/repositories/graveyard_repository.h index d18725c32..b427587a4 100644 --- a/common/repositories/graveyard_repository.h +++ b/common/repositories/graveyard_repository.h @@ -29,16 +29,18 @@ class GraveyardRepository: public BaseGraveyardRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/ground_spawns_repository.h b/common/repositories/ground_spawns_repository.h index e56d25d97..79d0e9454 100644 --- a/common/repositories/ground_spawns_repository.h +++ b/common/repositories/ground_spawns_repository.h @@ -29,16 +29,18 @@ class GroundSpawnsRepository: public BaseGroundSpawnsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/group_id_repository.h b/common/repositories/group_id_repository.h index 8b78b6eeb..403dec551 100644 --- a/common/repositories/group_id_repository.h +++ b/common/repositories/group_id_repository.h @@ -29,16 +29,18 @@ class GroupIdRepository: public BaseGroupIdRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/group_leaders_repository.h b/common/repositories/group_leaders_repository.h index 5a44bb751..811a6757e 100644 --- a/common/repositories/group_leaders_repository.h +++ b/common/repositories/group_leaders_repository.h @@ -29,16 +29,18 @@ class GroupLeadersRepository: public BaseGroupLeadersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/guild_members_repository.h b/common/repositories/guild_members_repository.h index 16cbdbc10..3afa2f198 100644 --- a/common/repositories/guild_members_repository.h +++ b/common/repositories/guild_members_repository.h @@ -29,16 +29,18 @@ class GuildMembersRepository: public BaseGuildMembersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/guild_ranks_repository.h b/common/repositories/guild_ranks_repository.h index 24e012eb3..949227b49 100644 --- a/common/repositories/guild_ranks_repository.h +++ b/common/repositories/guild_ranks_repository.h @@ -29,16 +29,18 @@ class GuildRanksRepository: public BaseGuildRanksRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/guild_relations_repository.h b/common/repositories/guild_relations_repository.h index ce2e6f638..59b5cca5e 100644 --- a/common/repositories/guild_relations_repository.h +++ b/common/repositories/guild_relations_repository.h @@ -29,16 +29,18 @@ class GuildRelationsRepository: public BaseGuildRelationsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/guilds_repository.h b/common/repositories/guilds_repository.h index dbb2984e9..c563f5cad 100644 --- a/common/repositories/guilds_repository.h +++ b/common/repositories/guilds_repository.h @@ -29,16 +29,18 @@ class GuildsRepository: public BaseGuildsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/hackers_repository.h b/common/repositories/hackers_repository.h index 8bacd5b7a..89c5de5b1 100644 --- a/common/repositories/hackers_repository.h +++ b/common/repositories/hackers_repository.h @@ -29,16 +29,18 @@ class HackersRepository: public BaseHackersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/instance_list_player_repository.h b/common/repositories/instance_list_player_repository.h index 474b34917..f865e5fd8 100644 --- a/common/repositories/instance_list_player_repository.h +++ b/common/repositories/instance_list_player_repository.h @@ -29,16 +29,18 @@ class InstanceListPlayerRepository: public BaseInstanceListPlayerRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/instance_list_repository.h b/common/repositories/instance_list_repository.h index 39cbd9b47..312211295 100644 --- a/common/repositories/instance_list_repository.h +++ b/common/repositories/instance_list_repository.h @@ -29,16 +29,18 @@ class InstanceListRepository: public BaseInstanceListRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/inventory_repository.h b/common/repositories/inventory_repository.h index 8ae1d1c46..176cd2989 100644 --- a/common/repositories/inventory_repository.h +++ b/common/repositories/inventory_repository.h @@ -29,16 +29,18 @@ class InventoryRepository: public BaseInventoryRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/inventory_snapshots_repository.h b/common/repositories/inventory_snapshots_repository.h index b8d60eeaf..2ad48abe4 100644 --- a/common/repositories/inventory_snapshots_repository.h +++ b/common/repositories/inventory_snapshots_repository.h @@ -29,16 +29,18 @@ class InventorySnapshotsRepository: public BaseInventorySnapshotsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/ip_exemptions_repository.h b/common/repositories/ip_exemptions_repository.h index 71ad7dfb3..e21ea22a0 100644 --- a/common/repositories/ip_exemptions_repository.h +++ b/common/repositories/ip_exemptions_repository.h @@ -29,16 +29,18 @@ class IpExemptionsRepository: public BaseIpExemptionsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/item_tick_repository.h b/common/repositories/item_tick_repository.h index b120aa794..0cd798479 100644 --- a/common/repositories/item_tick_repository.h +++ b/common/repositories/item_tick_repository.h @@ -29,16 +29,18 @@ class ItemTickRepository: public BaseItemTickRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/items_repository.h b/common/repositories/items_repository.h index 1e12a4720..20be4f024 100644 --- a/common/repositories/items_repository.h +++ b/common/repositories/items_repository.h @@ -29,16 +29,18 @@ class ItemsRepository: public BaseItemsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/ldon_trap_entries_repository.h b/common/repositories/ldon_trap_entries_repository.h index 9bd96ed2f..38847056b 100644 --- a/common/repositories/ldon_trap_entries_repository.h +++ b/common/repositories/ldon_trap_entries_repository.h @@ -29,16 +29,18 @@ class LdonTrapEntriesRepository: public BaseLdonTrapEntriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/ldon_trap_templates_repository.h b/common/repositories/ldon_trap_templates_repository.h index 636c6592f..1f0aaffc1 100644 --- a/common/repositories/ldon_trap_templates_repository.h +++ b/common/repositories/ldon_trap_templates_repository.h @@ -29,16 +29,18 @@ class LdonTrapTemplatesRepository: public BaseLdonTrapTemplatesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/level_exp_mods_repository.h b/common/repositories/level_exp_mods_repository.h index 5e1485814..cd52eb4fb 100644 --- a/common/repositories/level_exp_mods_repository.h +++ b/common/repositories/level_exp_mods_repository.h @@ -29,16 +29,18 @@ class LevelExpModsRepository: public BaseLevelExpModsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/lfguild_repository.h b/common/repositories/lfguild_repository.h index 4552fb776..202e0c0dd 100644 --- a/common/repositories/lfguild_repository.h +++ b/common/repositories/lfguild_repository.h @@ -29,16 +29,18 @@ class LfguildRepository: public BaseLfguildRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/login_accounts_repository.h b/common/repositories/login_accounts_repository.h index 72eda1280..0bc1a1340 100644 --- a/common/repositories/login_accounts_repository.h +++ b/common/repositories/login_accounts_repository.h @@ -29,16 +29,18 @@ class LoginAccountsRepository: public BaseLoginAccountsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/login_api_tokens_repository.h b/common/repositories/login_api_tokens_repository.h index 64aa1022d..a0b941c9e 100644 --- a/common/repositories/login_api_tokens_repository.h +++ b/common/repositories/login_api_tokens_repository.h @@ -29,16 +29,18 @@ class LoginApiTokensRepository: public BaseLoginApiTokensRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/login_server_admins_repository.h b/common/repositories/login_server_admins_repository.h index e11868d53..cb75cf60e 100644 --- a/common/repositories/login_server_admins_repository.h +++ b/common/repositories/login_server_admins_repository.h @@ -29,16 +29,18 @@ class LoginServerAdminsRepository: public BaseLoginServerAdminsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/login_server_list_types_repository.h b/common/repositories/login_server_list_types_repository.h index 4a2593326..84554c769 100644 --- a/common/repositories/login_server_list_types_repository.h +++ b/common/repositories/login_server_list_types_repository.h @@ -29,16 +29,18 @@ class LoginServerListTypesRepository: public BaseLoginServerListTypesRepository public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/login_world_servers_repository.h b/common/repositories/login_world_servers_repository.h index 4a90a696e..c0af6aaa1 100644 --- a/common/repositories/login_world_servers_repository.h +++ b/common/repositories/login_world_servers_repository.h @@ -29,16 +29,18 @@ class LoginWorldServersRepository: public BaseLoginWorldServersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/logsys_categories_repository.h b/common/repositories/logsys_categories_repository.h index 1ce6fe15c..ab494f1e8 100644 --- a/common/repositories/logsys_categories_repository.h +++ b/common/repositories/logsys_categories_repository.h @@ -29,16 +29,18 @@ class LogsysCategoriesRepository: public BaseLogsysCategoriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/lootdrop_entries_repository.h b/common/repositories/lootdrop_entries_repository.h index 801f9cfb5..39d4abf3a 100644 --- a/common/repositories/lootdrop_entries_repository.h +++ b/common/repositories/lootdrop_entries_repository.h @@ -29,16 +29,18 @@ class LootdropEntriesRepository: public BaseLootdropEntriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/lootdrop_repository.h b/common/repositories/lootdrop_repository.h index 54ef936c0..732e23a0b 100644 --- a/common/repositories/lootdrop_repository.h +++ b/common/repositories/lootdrop_repository.h @@ -29,16 +29,18 @@ class LootdropRepository: public BaseLootdropRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/loottable_entries_repository.h b/common/repositories/loottable_entries_repository.h index 99c05fa0c..52720c10a 100644 --- a/common/repositories/loottable_entries_repository.h +++ b/common/repositories/loottable_entries_repository.h @@ -29,16 +29,18 @@ class LoottableEntriesRepository: public BaseLoottableEntriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/loottable_repository.h b/common/repositories/loottable_repository.h index 489156be1..c16d6cea7 100644 --- a/common/repositories/loottable_repository.h +++ b/common/repositories/loottable_repository.h @@ -29,16 +29,18 @@ class LoottableRepository: public BaseLoottableRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/mail_repository.h b/common/repositories/mail_repository.h index 29c783625..04aec17f2 100644 --- a/common/repositories/mail_repository.h +++ b/common/repositories/mail_repository.h @@ -29,16 +29,18 @@ class MailRepository: public BaseMailRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/merchantlist_repository.h b/common/repositories/merchantlist_repository.h index 9e96290ec..ab0229315 100644 --- a/common/repositories/merchantlist_repository.h +++ b/common/repositories/merchantlist_repository.h @@ -29,16 +29,18 @@ class MerchantlistRepository: public BaseMerchantlistRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h index 4b4879fb4..ceaae788f 100644 --- a/common/repositories/merchantlist_temp_repository.h +++ b/common/repositories/merchantlist_temp_repository.h @@ -29,16 +29,18 @@ class MerchantlistTempRepository: public BaseMerchantlistTempRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/name_filter_repository.h b/common/repositories/name_filter_repository.h index f476d53a8..3cf63f55b 100644 --- a/common/repositories/name_filter_repository.h +++ b/common/repositories/name_filter_repository.h @@ -29,16 +29,18 @@ class NameFilterRepository: public BaseNameFilterRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_emotes_repository.h b/common/repositories/npc_emotes_repository.h index 65957cc57..ef855b1f0 100644 --- a/common/repositories/npc_emotes_repository.h +++ b/common/repositories/npc_emotes_repository.h @@ -29,16 +29,18 @@ class NpcEmotesRepository: public BaseNpcEmotesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_faction_entries_repository.h b/common/repositories/npc_faction_entries_repository.h index 5a755792e..48182fd24 100644 --- a/common/repositories/npc_faction_entries_repository.h +++ b/common/repositories/npc_faction_entries_repository.h @@ -29,16 +29,18 @@ class NpcFactionEntriesRepository: public BaseNpcFactionEntriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_faction_repository.h b/common/repositories/npc_faction_repository.h index 425063ca5..73bf0a94a 100644 --- a/common/repositories/npc_faction_repository.h +++ b/common/repositories/npc_faction_repository.h @@ -29,16 +29,18 @@ class NpcFactionRepository: public BaseNpcFactionRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_scale_global_base_repository.h b/common/repositories/npc_scale_global_base_repository.h index 92ee8cf84..b0748e18a 100644 --- a/common/repositories/npc_scale_global_base_repository.h +++ b/common/repositories/npc_scale_global_base_repository.h @@ -29,16 +29,18 @@ class NpcScaleGlobalBaseRepository: public BaseNpcScaleGlobalBaseRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_spells_effects_entries_repository.h b/common/repositories/npc_spells_effects_entries_repository.h index c93e7ebfb..101edc188 100644 --- a/common/repositories/npc_spells_effects_entries_repository.h +++ b/common/repositories/npc_spells_effects_entries_repository.h @@ -29,16 +29,18 @@ class NpcSpellsEffectsEntriesRepository: public BaseNpcSpellsEffectsEntriesRepos public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_spells_effects_repository.h b/common/repositories/npc_spells_effects_repository.h index 8f059976c..eeeb500b9 100644 --- a/common/repositories/npc_spells_effects_repository.h +++ b/common/repositories/npc_spells_effects_repository.h @@ -29,16 +29,18 @@ class NpcSpellsEffectsRepository: public BaseNpcSpellsEffectsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_spells_entries_repository.h b/common/repositories/npc_spells_entries_repository.h index a9597fd55..15a971843 100644 --- a/common/repositories/npc_spells_entries_repository.h +++ b/common/repositories/npc_spells_entries_repository.h @@ -29,16 +29,18 @@ class NpcSpellsEntriesRepository: public BaseNpcSpellsEntriesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_spells_repository.h b/common/repositories/npc_spells_repository.h index 9df6e7214..3ecd8d4f9 100644 --- a/common/repositories/npc_spells_repository.h +++ b/common/repositories/npc_spells_repository.h @@ -29,16 +29,18 @@ class NpcSpellsRepository: public BaseNpcSpellsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_types_repository.h b/common/repositories/npc_types_repository.h index cbcc9e735..d89a306a0 100644 --- a/common/repositories/npc_types_repository.h +++ b/common/repositories/npc_types_repository.h @@ -29,16 +29,18 @@ class NpcTypesRepository: public BaseNpcTypesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/npc_types_tint_repository.h b/common/repositories/npc_types_tint_repository.h index 37fdb7714..21bf02322 100644 --- a/common/repositories/npc_types_tint_repository.h +++ b/common/repositories/npc_types_tint_repository.h @@ -29,16 +29,18 @@ class NpcTypesTintRepository: public BaseNpcTypesTintRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/object_contents_repository.h b/common/repositories/object_contents_repository.h index ed64e8162..c7a308241 100644 --- a/common/repositories/object_contents_repository.h +++ b/common/repositories/object_contents_repository.h @@ -29,16 +29,18 @@ class ObjectContentsRepository: public BaseObjectContentsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/object_repository.h b/common/repositories/object_repository.h index 7f4ab5e17..30df82443 100644 --- a/common/repositories/object_repository.h +++ b/common/repositories/object_repository.h @@ -29,16 +29,18 @@ class ObjectRepository: public BaseObjectRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/perl_event_export_settings_repository.h b/common/repositories/perl_event_export_settings_repository.h index 3b838c410..1c441bb76 100644 --- a/common/repositories/perl_event_export_settings_repository.h +++ b/common/repositories/perl_event_export_settings_repository.h @@ -29,16 +29,18 @@ class PerlEventExportSettingsRepository: public BasePerlEventExportSettingsRepos public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/petitions_repository.h b/common/repositories/petitions_repository.h index 6617527c0..505f97986 100644 --- a/common/repositories/petitions_repository.h +++ b/common/repositories/petitions_repository.h @@ -29,16 +29,18 @@ class PetitionsRepository: public BasePetitionsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/pets_equipmentset_entries_repository.h b/common/repositories/pets_equipmentset_entries_repository.h index a9d225d9a..866b65e31 100644 --- a/common/repositories/pets_equipmentset_entries_repository.h +++ b/common/repositories/pets_equipmentset_entries_repository.h @@ -29,16 +29,18 @@ class PetsEquipmentsetEntriesRepository: public BasePetsEquipmentsetEntriesRepos public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/pets_equipmentset_repository.h b/common/repositories/pets_equipmentset_repository.h index 5860df600..1042972ab 100644 --- a/common/repositories/pets_equipmentset_repository.h +++ b/common/repositories/pets_equipmentset_repository.h @@ -29,16 +29,18 @@ class PetsEquipmentsetRepository: public BasePetsEquipmentsetRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/pets_repository.h b/common/repositories/pets_repository.h index 88aadd1ec..8aa99fde5 100644 --- a/common/repositories/pets_repository.h +++ b/common/repositories/pets_repository.h @@ -29,16 +29,18 @@ class PetsRepository: public BasePetsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/player_titlesets_repository.h b/common/repositories/player_titlesets_repository.h index 9aa21efa3..330b9ba48 100644 --- a/common/repositories/player_titlesets_repository.h +++ b/common/repositories/player_titlesets_repository.h @@ -29,16 +29,18 @@ class PlayerTitlesetsRepository: public BasePlayerTitlesetsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/proximities_repository.h b/common/repositories/proximities_repository.h index 752b1d11a..3044c2348 100644 --- a/common/repositories/proximities_repository.h +++ b/common/repositories/proximities_repository.h @@ -29,16 +29,18 @@ class ProximitiesRepository: public BaseProximitiesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/quest_globals_repository.h b/common/repositories/quest_globals_repository.h index a82d6adec..6be19d286 100644 --- a/common/repositories/quest_globals_repository.h +++ b/common/repositories/quest_globals_repository.h @@ -29,16 +29,18 @@ class QuestGlobalsRepository: public BaseQuestGlobalsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/raid_details_repository.h b/common/repositories/raid_details_repository.h index 325077a54..a9763096c 100644 --- a/common/repositories/raid_details_repository.h +++ b/common/repositories/raid_details_repository.h @@ -29,16 +29,18 @@ class RaidDetailsRepository: public BaseRaidDetailsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/raid_members_repository.h b/common/repositories/raid_members_repository.h index 9b6fba9f9..1d904dfa6 100644 --- a/common/repositories/raid_members_repository.h +++ b/common/repositories/raid_members_repository.h @@ -29,16 +29,18 @@ class RaidMembersRepository: public BaseRaidMembersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/reports_repository.h b/common/repositories/reports_repository.h index 2d389028b..4b94ce7c8 100644 --- a/common/repositories/reports_repository.h +++ b/common/repositories/reports_repository.h @@ -29,16 +29,18 @@ class ReportsRepository: public BaseReportsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/respawn_times_repository.h b/common/repositories/respawn_times_repository.h index 3aca3852a..09561f056 100644 --- a/common/repositories/respawn_times_repository.h +++ b/common/repositories/respawn_times_repository.h @@ -29,16 +29,18 @@ class RespawnTimesRepository: public BaseRespawnTimesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/rule_sets_repository.h b/common/repositories/rule_sets_repository.h index 5d275e28f..20fae60d6 100644 --- a/common/repositories/rule_sets_repository.h +++ b/common/repositories/rule_sets_repository.h @@ -29,16 +29,18 @@ class RuleSetsRepository: public BaseRuleSetsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/rule_values_repository.h b/common/repositories/rule_values_repository.h index 49fda8ef6..703fd07a1 100644 --- a/common/repositories/rule_values_repository.h +++ b/common/repositories/rule_values_repository.h @@ -29,16 +29,18 @@ class RuleValuesRepository: public BaseRuleValuesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/saylink_repository.h b/common/repositories/saylink_repository.h index 6618720b1..a2abaceae 100644 --- a/common/repositories/saylink_repository.h +++ b/common/repositories/saylink_repository.h @@ -29,16 +29,18 @@ class SaylinkRepository: public BaseSaylinkRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/skill_caps_repository.h b/common/repositories/skill_caps_repository.h index f55f7e164..9ecbe24f2 100644 --- a/common/repositories/skill_caps_repository.h +++ b/common/repositories/skill_caps_repository.h @@ -29,16 +29,18 @@ class SkillCapsRepository: public BaseSkillCapsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawn2_repository.h b/common/repositories/spawn2_repository.h index f83ba3bd1..fd633c738 100644 --- a/common/repositories/spawn2_repository.h +++ b/common/repositories/spawn2_repository.h @@ -29,16 +29,18 @@ class Spawn2Repository: public BaseSpawn2Repository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawn_condition_values_repository.h b/common/repositories/spawn_condition_values_repository.h index 5c641cce0..96a5a7ee7 100644 --- a/common/repositories/spawn_condition_values_repository.h +++ b/common/repositories/spawn_condition_values_repository.h @@ -29,16 +29,18 @@ class SpawnConditionValuesRepository: public BaseSpawnConditionValuesRepository public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawn_conditions_repository.h b/common/repositories/spawn_conditions_repository.h index 30f9850ef..3e0197eb0 100644 --- a/common/repositories/spawn_conditions_repository.h +++ b/common/repositories/spawn_conditions_repository.h @@ -29,16 +29,18 @@ class SpawnConditionsRepository: public BaseSpawnConditionsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawn_events_repository.h b/common/repositories/spawn_events_repository.h index aa36b895b..2df6b981e 100644 --- a/common/repositories/spawn_events_repository.h +++ b/common/repositories/spawn_events_repository.h @@ -29,16 +29,18 @@ class SpawnEventsRepository: public BaseSpawnEventsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawnentry_repository.h b/common/repositories/spawnentry_repository.h index a6ad875d7..67416e61c 100644 --- a/common/repositories/spawnentry_repository.h +++ b/common/repositories/spawnentry_repository.h @@ -29,16 +29,18 @@ class SpawnentryRepository: public BaseSpawnentryRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spawngroup_repository.h b/common/repositories/spawngroup_repository.h index b9f5e21ad..b9390b958 100644 --- a/common/repositories/spawngroup_repository.h +++ b/common/repositories/spawngroup_repository.h @@ -29,16 +29,18 @@ class SpawngroupRepository: public BaseSpawngroupRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spell_buckets_repository.h b/common/repositories/spell_buckets_repository.h index 90d2a6d1f..547ac3a3b 100644 --- a/common/repositories/spell_buckets_repository.h +++ b/common/repositories/spell_buckets_repository.h @@ -29,16 +29,18 @@ class SpellBucketsRepository: public BaseSpellBucketsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spell_globals_repository.h b/common/repositories/spell_globals_repository.h index 2d5132109..eb6f19587 100644 --- a/common/repositories/spell_globals_repository.h +++ b/common/repositories/spell_globals_repository.h @@ -29,16 +29,18 @@ class SpellGlobalsRepository: public BaseSpellGlobalsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/spells_new_repository.h b/common/repositories/spells_new_repository.h index 49a5497d8..3da162558 100644 --- a/common/repositories/spells_new_repository.h +++ b/common/repositories/spells_new_repository.h @@ -29,16 +29,18 @@ class SpellsNewRepository: public BaseSpellsNewRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/start_zones_repository.h b/common/repositories/start_zones_repository.h index c185825f1..fedafb7d9 100644 --- a/common/repositories/start_zones_repository.h +++ b/common/repositories/start_zones_repository.h @@ -29,16 +29,18 @@ class StartZonesRepository: public BaseStartZonesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/starting_items_repository.h b/common/repositories/starting_items_repository.h index fa18d7d16..2a8d25f45 100644 --- a/common/repositories/starting_items_repository.h +++ b/common/repositories/starting_items_repository.h @@ -29,16 +29,18 @@ class StartingItemsRepository: public BaseStartingItemsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/task_activities_repository.h b/common/repositories/task_activities_repository.h index 864dff5bf..b66bb8eee 100644 --- a/common/repositories/task_activities_repository.h +++ b/common/repositories/task_activities_repository.h @@ -29,16 +29,18 @@ class TaskActivitiesRepository: public BaseTaskActivitiesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tasks_repository.h b/common/repositories/tasks_repository.h index a7e03c3a0..1e91ca9f6 100644 --- a/common/repositories/tasks_repository.h +++ b/common/repositories/tasks_repository.h @@ -29,16 +29,18 @@ class TasksRepository: public BaseTasksRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tasksets_repository.h b/common/repositories/tasksets_repository.h index acea03204..a98364993 100644 --- a/common/repositories/tasksets_repository.h +++ b/common/repositories/tasksets_repository.h @@ -29,16 +29,18 @@ class TasksetsRepository: public BaseTasksetsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/template/base_repository.template b/common/repositories/template/base_repository.template index 8226d55e5..e8d3cec63 100644 --- a/common/repositories/template/base_repository.template +++ b/common/repositories/template/base_repository.template @@ -286,7 +286,6 @@ public: fmt::format( "DELETE FROM {} WHERE {}", TableName(), - PrimaryKey(), where_filter ) ); @@ -294,6 +293,18 @@ public: return (results.Success() ? results.RowsAffected() : 0); } + static int Truncate() + { + auto results = {{DATABASE_CONNECTION}}.QueryDatabase( + fmt::format( + "TRUNCATE TABLE {}", + TableName() + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + }; #endif //EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H diff --git a/common/repositories/timers_repository.h b/common/repositories/timers_repository.h index b942a6e23..dcd867210 100644 --- a/common/repositories/timers_repository.h +++ b/common/repositories/timers_repository.h @@ -29,16 +29,18 @@ class TimersRepository: public BaseTimersRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/titles_repository.h b/common/repositories/titles_repository.h index 387b670ee..32b9fd5e3 100644 --- a/common/repositories/titles_repository.h +++ b/common/repositories/titles_repository.h @@ -29,16 +29,18 @@ class TitlesRepository: public BaseTitlesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/trader_repository.h b/common/repositories/trader_repository.h index 1e346e783..50cf496f5 100644 --- a/common/repositories/trader_repository.h +++ b/common/repositories/trader_repository.h @@ -29,16 +29,18 @@ class TraderRepository: public BaseTraderRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tradeskill_recipe_entries_repository.h b/common/repositories/tradeskill_recipe_entries_repository.h index 6e3fe4bbf..5a2f3b1ea 100644 --- a/common/repositories/tradeskill_recipe_entries_repository.h +++ b/common/repositories/tradeskill_recipe_entries_repository.h @@ -29,16 +29,18 @@ class TradeskillRecipeEntriesRepository: public BaseTradeskillRecipeEntriesRepos public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tradeskill_recipe_repository.h b/common/repositories/tradeskill_recipe_repository.h index f0445aa11..2f94d586f 100644 --- a/common/repositories/tradeskill_recipe_repository.h +++ b/common/repositories/tradeskill_recipe_repository.h @@ -29,16 +29,18 @@ class TradeskillRecipeRepository: public BaseTradeskillRecipeRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne @@ -63,8 +65,6 @@ public: // Custom extended repository methods here - - }; #endif //EQEMU_TRADESKILL_RECIPE_REPOSITORY_H diff --git a/common/repositories/traps_repository.h b/common/repositories/traps_repository.h index 6b5226aa3..76d1e217b 100644 --- a/common/repositories/traps_repository.h +++ b/common/repositories/traps_repository.h @@ -29,16 +29,18 @@ class TrapsRepository: public BaseTrapsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tribute_levels_repository.h b/common/repositories/tribute_levels_repository.h index 162d6cdb2..04391798d 100644 --- a/common/repositories/tribute_levels_repository.h +++ b/common/repositories/tribute_levels_repository.h @@ -29,16 +29,18 @@ class TributeLevelsRepository: public BaseTributeLevelsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/tributes_repository.h b/common/repositories/tributes_repository.h index 480d42c6c..860588524 100644 --- a/common/repositories/tributes_repository.h +++ b/common/repositories/tributes_repository.h @@ -29,16 +29,18 @@ class TributesRepository: public BaseTributesRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/veteran_reward_templates_repository.h b/common/repositories/veteran_reward_templates_repository.h index 71a4592ae..3e9ad2745 100644 --- a/common/repositories/veteran_reward_templates_repository.h +++ b/common/repositories/veteran_reward_templates_repository.h @@ -29,16 +29,18 @@ class VeteranRewardTemplatesRepository: public BaseVeteranRewardTemplatesReposit public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/zone_points_repository.h b/common/repositories/zone_points_repository.h index 424a54421..a4f885fc6 100644 --- a/common/repositories/zone_points_repository.h +++ b/common/repositories/zone_points_repository.h @@ -29,16 +29,18 @@ class ZonePointsRepository: public BaseZonePointsRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/common/repositories/zone_repository.h b/common/repositories/zone_repository.h index d61534938..41115ef44 100644 --- a/common/repositories/zone_repository.h +++ b/common/repositories/zone_repository.h @@ -29,16 +29,18 @@ class ZoneRepository: public BaseZoneRepository { public: /** - * This file was auto generated on Apr 5, 2020 and can be modified and extended upon + * This file was auto generated and can be modified and extended upon * * Base repository methods are automatically * generated in the "base" version of this repository. The base repository * is immutable and to be left untouched, while methods in this class * are used as extension methods for more specific persistence-layer - * accessors or mutators + * accessors or mutators. * * Base Methods (Subject to be expanded upon in time) * + * Note: Not all tables are designed appropriately to fit functionality with all base methods + * * InsertOne * UpdateOne * DeleteOne diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index c57edddf6..55af7ee9e 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -123,7 +123,7 @@ foreach my $table_to_generate (@tables) { # These tables don't have a typical schema my @table_ignore_list = ( "character_enabledtasks", - # "grid", # Manually created + "grid", # Manually created "grid_entries", # Manually created # "tradeskill_recipe", # Manually created # "character_recipe_list", # Manually created diff --git a/world/main.cpp b/world/main.cpp index 27ce48797..c0ca4f9e3 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -93,6 +93,7 @@ union semun { #include "../zone/data_bucket.h" #include "world_server_command_handler.h" #include "../common/content/world_content_service.h" +#include "../common/repositories/merchantlist_temp_repository.h" ClientList client_list; GroupLFPList LFPGroupList; @@ -342,6 +343,9 @@ int main(int argc, char** argv) { database.ClearInvSnapshots(); LogInfo("Loading items"); + LogInfo("Purging player sold merchant items"); + MerchantlistTempRepository::Truncate(); + if (!content_db.LoadItems(hotfix_name)) { LogError("Error: Could not load item data. But ignoring"); } From 6a51bcf8fd101a798d0e96f120c7572d389f07a6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Apr 2020 01:02:35 -0500 Subject: [PATCH 116/272] Fix null reference issue [skip ci] --- common/dbcore.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/dbcore.cpp b/common/dbcore.cpp index bc3ce0a72..d85c4b2ae 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -51,7 +51,11 @@ DBcore::~DBcore() * are re-using the default database connection pointer when we dont have an * external configuration setup ex: (content_database) */ - std::string mysql_connection_host = mysql.host; + std::string mysql_connection_host; + if (mysql.host) { + mysql_connection_host = mysql.host; + } + if (GetOriginHost() != mysql_connection_host) { return; } From ebda1cf601519568b65f0c6f676eaaa3b9fdca3f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Apr 2020 03:05:15 -0500 Subject: [PATCH 117/272] Add zone store --- common/database.h | 2 +- .../repositories/base/base_zone_repository.h | 62 ++-- common/shareddb.h | 270 ++++++++++-------- .../generators/repository-generator.pl | 4 +- zone/CMakeLists.txt | 5 +- zone/main.cpp | 44 +-- zone/zone.h | 1 - zone/zone_store.cpp | 77 +++++ zone/zone_store.h | 59 ++++ 9 files changed, 352 insertions(+), 172 deletions(-) create mode 100644 zone/zone_store.cpp create mode 100644 zone/zone_store.h diff --git a/common/database.h b/common/database.h index 068b0414e..8a5a9abf1 100644 --- a/common/database.h +++ b/common/database.h @@ -249,7 +249,7 @@ public: bool LoadPTimers(uint32 charid, PTimerList &into); bool LoadZoneNames(); - const char* GetZoneName(uint32 zoneID, bool ErrorUnknown = false); + const char* GetZoneName(uint32 zone_id, bool ErrorUnknown = false); uint32 GetZoneGraveyardID(uint32 zone_id, uint32 version); uint32 GetZoneID(const char* zonename); diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 41f44f22b..3729021f3 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -44,10 +44,10 @@ public: float safe_y; float safe_z; float graveyard_id; - int8 min_level; - int8 min_status; + int min_level; + int min_status; int zoneidnumber; - int8 version; + int version; int timezone; int maxclients; int ruleset; @@ -57,46 +57,46 @@ public: float maxclip; float fog_minclip; float fog_maxclip; - int8 fog_blue; - int8 fog_red; - int8 fog_green; - int8 sky; - int8 ztype; + int fog_blue; + int fog_red; + int fog_green; + int sky; + int ztype; float zone_exp_multiplier; float walkspeed; - int8 time_type; - int8 fog_red1; - int8 fog_green1; - int8 fog_blue1; + int time_type; + int fog_red1; + int fog_green1; + int fog_blue1; float fog_minclip1; float fog_maxclip1; - int8 fog_red2; - int8 fog_green2; - int8 fog_blue2; + int fog_red2; + int fog_green2; + int fog_blue2; float fog_minclip2; float fog_maxclip2; - int8 fog_red3; - int8 fog_green3; - int8 fog_blue3; + int fog_red3; + int fog_green3; + int fog_blue3; float fog_minclip3; float fog_maxclip3; - int8 fog_red4; - int8 fog_green4; - int8 fog_blue4; + int fog_red4; + int fog_green4; + int fog_blue4; float fog_minclip4; float fog_maxclip4; float fog_density; std::string flag_needed; - int8 canbind; - int8 cancombat; - int8 canlevitate; - int8 castoutdoor; - int8 hotzone; - int8 insttype; + int canbind; + int cancombat; + int canlevitate; + int castoutdoor; + int hotzone; + int insttype; int shutdowndelay; - int8 peqzone; - int8 expansion; - int8 suspendbuffs; + int peqzone; + int expansion; + int suspendbuffs; int rain_chance1; int rain_chance2; int rain_chance3; @@ -115,7 +115,7 @@ public: int snow_duration4; float gravity; int type; - int8 skylock; + int skylock; int fast_regen_hp; int fast_regen_mana; int fast_regen_endurance; diff --git a/common/shareddb.h b/common/shareddb.h index 8deb65126..500da7284 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -1,25 +1,27 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.org) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY except by those people which sell it, which - are required to give you total support for your newly bought product; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ #ifndef SHAREDDB_H_ #define SHAREDDB_H_ -#define MAX_ITEM_ID 200000 +#define MAX_ITEM_ID 200000 #include "database.h" #include "skills.h" @@ -41,8 +43,7 @@ struct NPCFactionList; struct LootTable_Struct; struct LootDrop_Struct; -namespace EQEmu -{ +namespace EQEmu { struct ItemData; class ItemInstance; class InventoryProfile; @@ -54,114 +55,149 @@ namespace EQEmu and is mainly here to facilitate shared memory, and other things which only world and zone need. */ -class SharedDatabase : public Database -{ - public: - SharedDatabase(); - SharedDatabase(const char* host, const char* user, const char* passwd, const char* database, uint32 port); - virtual ~SharedDatabase(); +class SharedDatabase : public Database { +public: + SharedDatabase(); + SharedDatabase(const char *host, const char *user, const char *passwd, const char *database, uint32 port); + virtual ~SharedDatabase(); - /* - General Character Related Stuff - */ - bool SetGMSpeed(uint32 account_id, uint8 gmspeed); - uint8 GetGMSpeed(uint32 account_id); - bool SetHideMe(uint32 account_id, uint8 hideme); - int32 DeleteStalePlayerCorpses(); - void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message); - void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message); - bool GetCommandSettings(std::map>> &command_settings); - bool UpdateInjectedCommandSettings(const std::vector> &injected); - bool UpdateOrphanedCommandSettings(const std::vector &orphaned); - uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID); - void SetMailKey(int CharID, int IPAddress, int MailKey); - std::string GetMailKey(int CharID, bool key_only = false); + /** + * Character + */ + bool SetGMSpeed(uint32 account_id, uint8 gmspeed); + uint8 GetGMSpeed(uint32 account_id); + bool SetHideMe(uint32 account_id, uint8 hideme); + int32 DeleteStalePlayerCorpses(); + void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct *message); + void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct *message); + bool GetCommandSettings(std::map>> &command_settings); + bool UpdateInjectedCommandSettings(const std::vector> &injected); + bool UpdateOrphanedCommandSettings(const std::vector &orphaned); + uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID); + void SetMailKey(int CharID, int IPAddress, int MailKey); + std::string GetMailKey(int CharID, bool key_only = false); + bool SaveCursor( + uint32 char_id, + std::list::const_iterator &start, + std::list::const_iterator &end + ); + bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id); + bool DeleteInventorySlot(uint32 char_id, int16 slot_id); + bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance *inst); + bool GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool is_charid); + int32 GetSharedPlatinum(uint32 account_id); + bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add); + bool GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv); + bool GetInventory(uint32 account_id, char *name, EQEmu::InventoryProfile *inv); // deprecated + std::map GetItemRecastTimestamps(uint32 char_id); + uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type); + void ClearOldRecastTimestamps(uint32 char_id); + bool SetStartingItems( + PlayerProfile_Struct *pp, + EQEmu::InventoryProfile *inv, + uint32 si_race, + uint32 si_class, + uint32 si_deity, + uint32 si_current_zone, + char *si_name, + int admin + ); - /* - Character InventoryProfile - */ - bool SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end); - bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id); - bool DeleteInventorySlot(uint32 char_id, int16 slot_id); - bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst); - bool GetSharedBank(uint32 id, EQEmu::InventoryProfile* inv, bool is_charid); - int32 GetSharedPlatinum(uint32 account_id); - bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add); - bool GetInventory(uint32 char_id, EQEmu::InventoryProfile* inv); - bool GetInventory(uint32 account_id, char* name, EQEmu::InventoryProfile* inv); // deprecated - std::map GetItemRecastTimestamps(uint32 char_id); - uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type); - void ClearOldRecastTimestamps(uint32 char_id); - bool SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin); + std::string GetBook(const char *txtfile, int16 *language); + /** + * items + */ + EQEmu::ItemInstance *CreateItem( + uint32 item_id, + int16 charges = 0, + uint32 aug1 = 0, + uint32 aug2 = 0, + uint32 aug3 = 0, + uint32 aug4 = 0, + uint32 aug5 = 0, + uint32 aug6 = 0, + uint8 attuned = 0 + ); + EQEmu::ItemInstance *CreateItem( + const EQEmu::ItemData *item, + int16 charges = 0, + uint32 aug1 = 0, + uint32 aug2 = 0, + uint32 aug3 = 0, + uint32 aug4 = 0, + uint32 aug5 = 0, + uint32 aug6 = 0, + uint8 attuned = 0 + ); + EQEmu::ItemInstance *CreateBaseItem(const EQEmu::ItemData *item, int16 charges = 0); - std::string GetBook(const char *txtfile, int16 *language); + void GetItemsCount(int32 &item_count, uint32 &max_id); + void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); + bool LoadItems(const std::string &prefix); + const EQEmu::ItemData *IterateItems(uint32 *id); + const EQEmu::ItemData *GetItem(uint32 id); + const EvolveInfo *GetEvolveInfo(uint32 loregroup); - /* - Item Methods - */ - EQEmu::ItemInstance* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateItem(const EQEmu::ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateBaseItem(const EQEmu::ItemData* item, int16 charges = 0); + /** + * faction + */ + void GetFactionListInfo(uint32 &list_count, uint32 &max_lists); + const NPCFactionList *GetNPCFactionEntry(uint32 id); + void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists); + bool LoadNPCFactionLists(const std::string &prefix); - /* - Shared Memory crap - */ + /** + * loot + */ + void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries); + void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries); + void LoadLootTables(void *data, uint32 size); + void LoadLootDrops(void *data, uint32 size); + bool LoadLoot(const std::string &prefix); + const LootTable_Struct *GetLootTable(uint32 loottable_id); + const LootDrop_Struct *GetLootDrop(uint32 lootdrop_id); - //items - void GetItemsCount(int32 &item_count, uint32 &max_id); - void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); - bool LoadItems(const std::string &prefix); - const EQEmu::ItemData* IterateItems(uint32* id); - const EQEmu::ItemData* GetItem(uint32 id); - const EvolveInfo* GetEvolveInfo(uint32 loregroup); + /** + * skills + */ + void LoadSkillCaps(void *data); + bool LoadSkillCaps(const std::string &prefix); + uint16 GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); + uint8 GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); - //faction lists - void GetFactionListInfo(uint32 &list_count, uint32 &max_lists); - const NPCFactionList* GetNPCFactionEntry(uint32 id); - void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists); - bool LoadNPCFactionLists(const std::string &prefix); + /** + * spells + */ + int GetMaxSpellID(); + bool LoadSpells(const std::string &prefix, int32 *records, const SPDat_Spell_Struct **sp); + void LoadSpells(void *data, int max_spells); + void LoadDamageShieldTypes(SPDat_Spell_Struct *sp, int32 iMaxSpellID); - //loot - void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries); - void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries); - void LoadLootTables(void *data, uint32 size); - void LoadLootDrops(void *data, uint32 size); - bool LoadLoot(const std::string &prefix); - const LootTable_Struct* GetLootTable(uint32 loottable_id); - const LootDrop_Struct* GetLootDrop(uint32 lootdrop_id); + /** + * basedata + */ + int GetMaxBaseDataLevel(); + bool LoadBaseData(const std::string &prefix); + void LoadBaseData(void *data, int max_level); + const BaseDataStruct *GetBaseData(int lvl, int cl); - void LoadSkillCaps(void *data); - bool LoadSkillCaps(const std::string &prefix); - uint16 GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); - uint8 GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); +protected: - int GetMaxSpellID(); - bool LoadSpells(const std::string &prefix, int32 *records, const SPDat_Spell_Struct **sp); - void LoadSpells(void *data, int max_spells); - void LoadDamageShieldTypes(SPDat_Spell_Struct* sp, int32 iMaxSpellID); - - int GetMaxBaseDataLevel(); - bool LoadBaseData(const std::string &prefix); - void LoadBaseData(void *data, int max_level); - const BaseDataStruct* GetBaseData(int lvl, int cl); - - protected: - - std::unique_ptr skill_caps_mmf; - std::unique_ptr items_mmf; - std::unique_ptr> items_hash; - std::unique_ptr faction_mmf; - std::unique_ptr> faction_hash; - std::unique_ptr loot_table_mmf; - std::unique_ptr> loot_table_hash; - std::unique_ptr loot_drop_mmf; - std::unique_ptr> loot_drop_hash; - std::unique_ptr base_data_mmf; - std::unique_ptr spells_mmf; + std::unique_ptr skill_caps_mmf; + std::unique_ptr items_mmf; + std::unique_ptr> items_hash; + std::unique_ptr faction_mmf; + std::unique_ptr> faction_hash; + std::unique_ptr loot_table_mmf; + std::unique_ptr> loot_table_hash; + std::unique_ptr loot_drop_mmf; + std::unique_ptr> loot_drop_hash; + std::unique_ptr base_data_mmf; + std::unique_ptr spells_mmf; }; #endif /*SHAREDDB_H_*/ diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 55af7ee9e..93084d7a0 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -457,10 +457,10 @@ sub translate_mysql_data_type_to_c { my $struct_data_type = "std::string"; if ($mysql_data_type =~ /tinyint/) { - $struct_data_type = 'int8'; + $struct_data_type = 'int'; } elsif ($mysql_data_type =~ /smallint/) { - $struct_data_type = 'int16'; + $struct_data_type = 'int'; } elsif ($mysql_data_type =~ /bigint/) { $struct_data_type = 'int'; diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index 80415f6ff..beacca565 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -142,6 +142,7 @@ SET(zone_sources zone_config.cpp zonedb.cpp zone_reload.cpp + zone_store.cpp zoning.cpp ) @@ -249,7 +250,9 @@ SET(zone_headers zone_config.h zonedb.h zonedump.h - zone_reload.h ) + zone_reload.h + zone_store.h +) ADD_EXECUTABLE(zone ${zone_sources} ${zone_headers}) diff --git a/zone/main.cpp b/zone/main.cpp index aacf01430..b44ee3421 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -1,20 +1,22 @@ -/* EQEMu: Everquest Server Emulator -Copyright (C) 2001-2016 EQEMu Development Team (http://eqemu.org) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY except by those people which sell it, which -are required to give you total support for your newly bought product; -without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ #define DONT_SHARED_OPCODES #define PLATFORM_ZONE 1 @@ -93,6 +95,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #else #include #include "../common/unix.h" +#include "zone_store.h" #endif @@ -101,6 +104,7 @@ extern volatile bool is_zone_loaded; EntityList entity_list; WorldServer worldserver; +ZoneStore zone_store; uint32 numclients = 0; char errorname[32]; extern Zone* zone; @@ -318,6 +322,8 @@ int main(int argc, char** argv) { content_db.LoadZoneNames(); database.zonename_array = content_db.zonename_array; + zone_store.LoadZonesStore(); + LogInfo("Loading items"); if (!database.LoadItems(hotfix_name)) { LogError("Loading items failed!"); @@ -373,7 +379,7 @@ int main(int argc, char** argv) { LogInfo("Loading commands"); int retval = command_init(); - if (retval<0) + if (retval < 0) LogError("Command loading failed"); else LogInfo("{} commands loaded", retval); @@ -466,7 +472,7 @@ int main(int argc, char** argv) { if (!strlen(zone_name) || !strcmp(zone_name, ".")) { LogInfo("Entering sleep mode"); } - else if (!Zone::Bootup(content_db.GetZoneID(zone_name), instance_id, true)) { + else if (!Zone::Bootup(ZoneID(zone_name), instance_id, true)) { LogError("Zone Bootup failed :: Zone::Bootup"); zone = 0; } diff --git a/zone/zone.h b/zone/zone.h index 728b19e3e..5249ff994 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -335,7 +335,6 @@ public: double GetMaxMovementUpdateRange() const { return max_movement_update_range; } - /** * Modding hooks */ diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp new file mode 100644 index 000000000..37f50181b --- /dev/null +++ b/zone/zone_store.cpp @@ -0,0 +1,77 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "zone_store.h" + +ZoneStore::ZoneStore() = default; +ZoneStore::~ZoneStore() = default; + +void ZoneStore::LoadZonesStore() +{ + zones = ZoneRepository::All(); +} + +uint32 ZoneStore::GetZoneID(const char *in_zone_name) +{ + if (in_zone_name == nullptr) { + return 0; + } + + std::string zone_name = in_zone_name; + + return GetZoneID(zone_name); +} + +uint32 ZoneStore::GetZoneID(std::string zone_name) +{ + for (auto &z: zones) { + if (z.short_name == zone_name) { + return z.zoneidnumber; + } + } + + return 0; +} + +const char *ZoneStore::GetZoneName(uint32 zone_id, bool error_unknown) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name.c_str(); + } + } + + if (error_unknown) { + return "UNKNOWN"; + } + + return nullptr; +} + +std::string ZoneStore::GetZoneName(uint32 zone_id) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name; + } + } + + return std::string(); +} diff --git a/zone/zone_store.h b/zone/zone_store.h new file mode 100644 index 000000000..6721a3d0c --- /dev/null +++ b/zone/zone_store.h @@ -0,0 +1,59 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_STORE_H +#define EQEMU_ZONE_STORE_H + +#include "zonedb.h" +#include "../common/repositories/zone_repository.h" + +class ZoneStore { +public: + ZoneStore(); + virtual ~ZoneStore(); + + std::vector zones; + + void LoadZonesStore(); + + uint32 GetZoneID(const char *in_zone_name); + uint32 GetZoneID(std::string zone_name); + std::string GetZoneName(uint32 zone_id); + const char *GetZoneName(uint32 zone_id, bool error_unknown); +}; + +extern ZoneStore zone_store; + +/** + * Global helpers + */ +inline uint32 ZoneID(const char *in_zone_name) { return zone_store.GetZoneID(in_zone_name); } +inline uint32 ZoneID(std::string zone_name) { return zone_store.GetZoneID(zone_name); } +inline std::string ZoneName(uint32 zone_id) { return zone_store.GetZoneName(zone_id); } +inline const char *ZoneName(uint32 zone_id, bool error_unknown) +{ + return zone_store.GetZoneName( + zone_id, + error_unknown + ); +} + + +#endif //EQEMU_ZONE_STORE_H From 373fb3f0e7588dcb72810e9577595ae56659f20d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Apr 2020 04:36:39 -0500 Subject: [PATCH 118/272] Decouple zone calls, cleanup logic --- common/database.cpp | 72 +++--------- common/database.h | 13 +- common/database_instances.cpp | 30 ----- world/CMakeLists.txt | 2 + world/adventure.cpp | 5 +- world/adventure_manager.cpp | 3 +- world/client.cpp | 79 +++++++------ world/clientlist.cpp | 25 ++-- world/console.cpp | 15 +-- world/console.old.cpp | 22 ++-- world/eql_config.cpp | 5 +- world/eqw.cpp | 2 +- world/main.cpp | 6 +- world/world_store.cpp | 132 +++++++++++++++++++++ world/world_store.h | 64 ++++++++++ world/worlddb.cpp | 38 +++++- world/zonelist.cpp | 5 +- world/zoneserver.cpp | 13 +- zone/aa.cpp | 1 + zone/api_service.cpp | 1 + zone/attack.cpp | 26 ++-- zone/bot.h | 13 +- zone/bot_command.cpp | 215 +++++++++++++++++----------------- zone/bot_database.cpp | 69 +++++------ zone/client.cpp | 9 +- zone/client.h | 1 + zone/client_packet.cpp | 8 +- zone/client_process.cpp | 5 +- zone/command.cpp | 40 +++---- zone/corpse.cpp | 28 ++--- zone/data_bucket.cpp | 3 +- zone/doors.cpp | 9 +- zone/effects.cpp | 3 +- zone/forage.cpp | 1 + zone/guild_mgr.cpp | 1 + zone/inventory.cpp | 39 +++--- zone/loottables.cpp | 1 + zone/main.cpp | 9 +- zone/mob_appearance.cpp | 3 +- zone/mod_functions_base.cpp | 1 + zone/npc.h | 3 +- zone/object.cpp | 1 + zone/petitions.h | 1 + zone/pets.cpp | 5 +- zone/quest.h | 1 + zone/questmgr.cpp | 25 ++-- zone/spawn2.cpp | 9 +- zone/spawngroup.cpp | 1 + zone/tasks.cpp | 1 + zone/tradeskills.cpp | 1 + zone/worldserver.cpp | 12 +- zone/zone.cpp | 10 +- zone/zone.h | 1 + zone/zone_store.cpp | 57 ++++++++- zone/zone_store.h | 14 ++- zone/zonedb.cpp | 3 +- zone/zoning.cpp | 10 +- 57 files changed, 705 insertions(+), 467 deletions(-) create mode 100644 world/world_store.cpp create mode 100644 world/world_store.h diff --git a/common/database.cpp b/common/database.cpp index a40dcfb72..ff52a196e 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -1082,50 +1082,6 @@ bool Database::GetZoneGraveyard(const uint32 graveyard_id, uint32* graveyard_zon return true; } -bool Database::LoadZoneNames() { - std::string query("SELECT zoneidnumber, short_name FROM zone"); - - auto results = QueryDatabase(query); - - if (!results.Success()) - { - return false; - } - - for (auto row= results.begin();row != results.end();++row) - { - uint32 zoneid = atoi(row[0]); - std::string zonename = row[1]; - zonename_array.insert(std::pair(zoneid,zonename)); - } - - return true; -} - -uint32 Database::GetZoneID(const char* zonename) { - - if (zonename == nullptr) - return 0; - - for (auto & iter : zonename_array) - if (strcasecmp(iter.second.c_str(), zonename) == 0) - return iter.first; - - return 0; -} - -const char* Database::GetZoneName(uint32 zoneID, bool ErrorUnknown) { - auto iter = zonename_array.find(zoneID); - - if (iter != zonename_array.end()) - return iter->second.c_str(); - - if (ErrorUnknown) - return "UNKNOWN"; - - return 0; -} - uint8 Database::GetPEQZone(uint32 zoneID, uint32 version){ std::string query = StringFormat("SELECT peqzone from zone where zoneidnumber='%i' AND (version=%i OR version=0) ORDER BY version DESC", zoneID, version); @@ -1342,29 +1298,31 @@ uint8 Database::GetServerType() { return atoi(row[0]); } -bool Database::MoveCharacterToZone(const char* charname, const char* zonename, uint32 zoneid) { - if(zonename == nullptr || strlen(zonename) == 0) - return false; +bool Database::MoveCharacterToZone(uint32 character_id, uint32 zone_id) +{ + std::string query = StringFormat( + "UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i", + zone_id, + character_id + ); - std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `name` = '%s'", zoneid, charname); auto results = QueryDatabase(query); if (!results.Success()) { return false; } - if (results.RowsAffected() == 0) - return false; - - return true; + return results.RowsAffected() != 0; } -bool Database::MoveCharacterToZone(const char* charname, const char* zonename) { - return MoveCharacterToZone(charname, zonename, GetZoneID(zonename)); -} +bool Database::MoveCharacterToZone(const char *charname, uint32 zone_id) +{ + std::string query = StringFormat( + "UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `name` = '%s'", + zone_id, + charname + ); -bool Database::MoveCharacterToZone(uint32 iCharID, const char* iZonename) { - std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i", GetZoneID(iZonename), iCharID); auto results = QueryDatabase(query); if (!results.Success()) { diff --git a/common/database.h b/common/database.h index 8a5a9abf1..579f9915f 100644 --- a/common/database.h +++ b/common/database.h @@ -108,9 +108,8 @@ public: bool AddToNameFilter(const char* name); bool CreateCharacter(uint32 account_id, char* name, uint16 gender, uint16 race, uint16 class_, uint8 str, uint8 sta, uint8 cha, uint8 dex, uint8 int_, uint8 agi, uint8 wis, uint8 face); bool DeleteCharacter(char* character_name); - bool MoveCharacterToZone(const char* charname, const char* zonename); - bool MoveCharacterToZone(const char* charname, const char* zonename,uint32 zoneid); - bool MoveCharacterToZone(uint32 iCharID, const char* iZonename); + bool MoveCharacterToZone(const char* charname, uint32 zone_id); + bool MoveCharacterToZone(uint32 character_id, uint32 zone_id); bool ReserveName(uint32 account_id, char* name); bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp); bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked); @@ -155,7 +154,6 @@ public: bool VerifyInstanceAlive(uint16 instance_id, uint32 char_id); bool VerifyZoneInstance(uint32 zone_id, uint16 instance_id); - uint16 GetInstanceID(const char* zone, uint32 charid, int16 version); uint16 GetInstanceID(uint32 zone, uint32 charid, int16 version); uint16 GetInstanceVersion(uint16 instance_id); uint32 GetTimeRemainingInstance(uint16 instance_id, bool &is_perma); @@ -243,16 +241,11 @@ public: /* General Queries */ bool GetSafePoints(const char* short_name, uint32 version, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, int16* minstatus = 0, uint8* minlevel = 0, char *flag_needed = nullptr); - bool GetSafePoints(uint32 zoneID, uint32 version, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, int16* minstatus = 0, uint8* minlevel = 0, char *flag_needed = nullptr) { return GetSafePoints(GetZoneName(zoneID), version, safe_x, safe_y, safe_z, minstatus, minlevel, flag_needed); } bool GetZoneGraveyard(const uint32 graveyard_id, uint32* graveyard_zoneid = 0, float* graveyard_x = 0, float* graveyard_y = 0, float* graveyard_z = 0, float* graveyard_heading = 0); bool GetZoneLongName(const char* short_name, char** long_name, char* file_name = 0, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, uint32* graveyard_id = 0, uint32* maxclients = 0); bool LoadPTimers(uint32 charid, PTimerList &into); - bool LoadZoneNames(); - - const char* GetZoneName(uint32 zone_id, bool ErrorUnknown = false); uint32 GetZoneGraveyardID(uint32 zone_id, uint32 version); - uint32 GetZoneID(const char* zonename); uint8 GetPEQZone(uint32 zoneID, uint32 version); uint8 GetRaceSkill(uint8 skillid, uint8 in_race); @@ -275,8 +268,6 @@ public: /* EQEmuLogSys */ void LoadLogSettings(EQEmuLogSys::LogSettings* log_settings); - std::map zonename_array; - private: Mutex Mvarcache; diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 4e562cecb..3ded72f17 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -306,36 +306,6 @@ bool Database::VerifyZoneInstance(uint32 zone_id, uint16 instance_id) return true; } -uint16 Database::GetInstanceID(const char* zone, uint32 character_id, int16 version) { - - std::string query = StringFormat( - "SELECT " - "instance_list.id " - "FROM " - "instance_list, " - "instance_list_player " - "WHERE " - "instance_list.zone = %u " - "AND instance_list.version = %u " - "AND instance_list.id = instance_list_player.id " - "AND instance_list_player.charid = %u " - "LIMIT 1 ", - GetZoneID(zone), - version, - character_id - ); - auto results = QueryDatabase(query); - - if (!results.Success()) - return 0; - - if (results.RowCount() == 0) - return 0; - - auto row = results.begin(); - return atoi(row[0]); -} - uint16 Database::GetInstanceID(uint32 zone, uint32 character_id, int16 version) { if (!zone) diff --git a/world/CMakeLists.txt b/world/CMakeLists.txt index 9906b0cfc..ab14ed603 100644 --- a/world/CMakeLists.txt +++ b/world/CMakeLists.txt @@ -24,6 +24,7 @@ SET(world_sources world_console_connection.cpp world_server_command_handler.cpp worlddb.cpp + world_store.cpp zonelist.cpp zoneserver.cpp ) @@ -54,6 +55,7 @@ SET(world_headers world_tcp_connection.h world_server_command_handler.h worlddb.h + world_store.h zonelist.h zoneserver.h ) diff --git a/world/adventure.cpp b/world/adventure.cpp index 2a61baf65..153e20b18 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -11,6 +11,7 @@ #include "zonelist.h" #include "clientlist.h" #include "cliententry.h" +#include "world_store.h" extern ZSList zoneserver_list; extern ClientList client_list; @@ -143,7 +144,7 @@ bool Adventure::Process() bool Adventure::CreateInstance() { - uint32 zone_id = content_db.GetZoneID(adventure_template->zone); + uint32 zone_id = ZoneID(adventure_template->zone); if(!zone_id) { return false; @@ -362,7 +363,7 @@ void Adventure::Finished(AdventureWinStatus ws) afe.points = 0; } adventure_manager.AddFinishedEvent(afe); - + database.UpdateAdventureStatsEntry(database.GetCharacterID((*iter).c_str()), GetTemplate()->theme, (ws != AWS_Lose) ? true : false); } ++iter; diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index 21ad8a8e4..c379a06aa 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -10,6 +10,7 @@ #include "zonelist.h" #include "clientlist.h" #include "cliententry.h" +#include "world_store.h" #include #include @@ -771,7 +772,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do sizeof(ServerPlayerClickedAdventureDoorReply_Struct)); ServerPlayerClickedAdventureDoorReply_Struct *sr = (ServerPlayerClickedAdventureDoorReply_Struct*)pack->pBuffer; strcpy(sr->player, player); - sr->zone_id = content_db.GetZoneID(t->zone); + sr->zone_id = ZoneID(t->zone); sr->instance_id = (*iter)->GetInstanceID(); sr->x = t->dest_x; sr->y = t->dest_y; diff --git a/world/client.cpp b/world/client.cpp index ebc01e03e..840d9f89a 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -46,6 +46,7 @@ #include "clientlist.h" #include "wguild_mgr.h" #include "sof_char_create_data.h" +#include "world_store.h" #include #include @@ -64,7 +65,7 @@ #include #include #else - + #ifdef FREEBSD //Timothy Whitman - January 7, 2003 #include #endif @@ -109,7 +110,7 @@ Client::Client(EQStreamInterface* ieqs) m_ClientVersion = eqs->ClientVersion(); m_ClientVersionBit = EQEmu::versions::ConvertClientVersionToClientVersionBit(m_ClientVersion); - + numclients++; } @@ -171,7 +172,7 @@ void Client::SendEnterWorld(std::string name) void Client::SendExpansionInfo() { auto outapp = new EQApplicationPacket(OP_ExpansionInfo, sizeof(ExpansionInfo_Struct)); ExpansionInfo_Struct *eis = (ExpansionInfo_Struct*)outapp->pBuffer; - + if (RuleB(World, UseClientBasedExpansionSettings)) { eis->Expansions = EQEmu::expansions::ConvertClientVersionToExpansionsMask(eqs->ClientVersion()); } @@ -430,7 +431,7 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app) if (!is_player_zoning) { // Track who is in and who is out of the game char *inout= (char *) ""; - + if (cle->GetOnline() == CLE_Status::Never){ // Desktop -> Char Select inout = (char *) "In"; @@ -439,21 +440,21 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app) // Game -> Char Select inout=(char *) "Out"; } - + // Always at Char select at this point. // Either from a fresh client launch or coming back from the game. // Exiting the game entirely does not come through here. // Could use a Logging Out Completely message somewhere. cle->SetOnline(CLE_Status::CharSelect); - + LogInfo("Account ({}) Logging({}) to character select :: LSID [{}] ", cle->AccountName(), inout, cle->LSID()); } else { cle->SetOnline(); } - + const WorldConfig *Config=WorldConfig::get(); - + if(Config->UpdateStats) { auto pack = new ServerPacket; pack->opcode = ServerOP_LSPlayerJoinWorld; @@ -466,10 +467,10 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app) loginserverlist.SendPacket(pack); safe_delete(pack); } - + if (!is_player_zoning) SendGuildList(); - + SendLogServer(); SendApproveWorld(); SendEnterWorld(cle->name()); @@ -509,18 +510,18 @@ bool Client::HandleNameApprovalPacket(const EQApplicationPacket *app) outapp->size = 1; bool valid = false; - if(!database.CheckNameFilter(char_name)) { - valid = false; + if(!database.CheckNameFilter(char_name)) { + valid = false; } /* Name must begin with an upper-case letter. */ - else if (islower(char_name[0])) { - valid = false; - } - else if (database.ReserveName(GetAccountID(), char_name)) { - valid = true; + else if (islower(char_name[0])) { + valid = false; } - else { - valid = false; + else if (database.ReserveName(GetAccountID(), char_name)) { + valid = true; + } + else { + valid = false; } outapp->pBuffer[0] = valid? 1 : 0; @@ -690,7 +691,7 @@ bool Client::HandleCharacterCreatePacket(const EQApplicationPacket *app) { return true; } -bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { +bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { if (GetAccountID() == 0) { LogInfo("Enter world with no logged in account"); eqs->Close(); @@ -785,7 +786,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { if (tutorial_enabled) { zone_id = RuleI(World, TutorialZoneID); - database.MoveCharacterToZone(charid, content_db.GetZoneName(zone_id)); + database.MoveCharacterToZone(charid, zone_id); } else { LogInfo("[{}] is trying to go to tutorial but are not allowed", char_name); @@ -796,9 +797,9 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { } } - if (zone_id == 0 || !content_db.GetZoneName(zone_id)) { + if (zone_id == 0 || !ZoneName(zone_id)) { // This is to save people in an invalid zone, once it's removed from the DB - database.MoveCharacterToZone(charid, "arena"); + database.MoveCharacterToZone(charid, ZoneID("arena")); LogInfo("Zone not found in database zone_id=[{}], moveing char to arena character:[{}]", zone_id, char_name); } @@ -856,7 +857,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { } QueuePacket(outapp); safe_delete(outapp); - + // set mailkey - used for duration of character session int MailKey = emu_random.Int(1, INT_MAX); @@ -1154,7 +1155,7 @@ void Client::EnterWorld(bool TryBootup) { else zone_server = zoneserver_list.FindByZoneID(zone_id); - const char *zone_name = content_db.GetZoneName(zone_id, true); + const char *zone_name = ZoneName(zone_id, true); if (zone_server) { if (false == enter_world_triggered) { //Drop any clients we own in other zones. @@ -1204,9 +1205,9 @@ void Client::EnterWorld(bool TryBootup) { LogInfo( "({}) [{}] [{}] (Zone ID [{}]: Instance ID: [{}]) ", char_name, - (seen_character_select ? "Zoning from character select" : "Zoning to"), - zone_name, - zone_id, + (seen_character_select ? "Zoning from character select" : "Zoning to"), + zone_name, + zone_id, instance_id ); @@ -1267,7 +1268,7 @@ void Client::Clearance(int8 response) return; } - const char* zonename = content_db.GetZoneName(zone_id); + const char* zonename = ZoneName(zone_id); if (zonename == 0) { LogInfo("zonename is nullptr in Client::Clearance!!"); TellClientZoneUnavailable(); @@ -1322,7 +1323,7 @@ void Client::Clearance(int8 response) void Client::TellClientZoneUnavailable() { auto outapp = new EQApplicationPacket(OP_ZoneUnavail, sizeof(ZoneUnavail_Struct)); ZoneUnavail_Struct* ua = (ZoneUnavail_Struct*)outapp->pBuffer; - const char* zonename = content_db.GetZoneName(zone_id); + const char* zonename = ZoneName(zone_id); if (zonename) strcpy(ua->zonename, zonename); QueuePacket(outapp); @@ -1502,7 +1503,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) // strcpy(pp.servername, WorldConfig::get()->ShortName.c_str()); memset(pp.spell_book, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELLBOOK_SIZE)); - + memset(pp.mem_spells, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELL_GEM_COUNT)); for(i = 0; i < BUFF_COUNT; i++) @@ -1522,11 +1523,11 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) else { LogInfo("Found 'TitaniumStartZoneID' rule setting: [{}]", RuleI(World, TitaniumStartZoneID)); if (RuleI(World, TitaniumStartZoneID) > 0) { /* if there's a startzone variable put them in there */ - + pp.zone_id = RuleI(World, TitaniumStartZoneID); cc->start_zone = pp.zone_id; } - } + } /* use normal starting zone logic to either get defaults, or if startzone was set, load that from the db table.*/ bool ValidStartZone = content_db.GetStartZone(&pp, cc, m_ClientVersionBit & EQEmu::versions::maskTitaniumAndEarlier); @@ -1568,7 +1569,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) /* Overrides if we have the tutorial flag set! */ if (cc->tutorial && RuleB(World, EnableTutorialButton)) { pp.zone_id = RuleI(World, TutorialZoneID); - content_db.GetSafePoints(pp.zone_id, 0, &pp.x, &pp.y, &pp.z); + content_db.GetSafePoints(ZoneName(pp.zone_id), 0, &pp.x, &pp.y, &pp.z); } /* Will either be the same as home or tutorial if enabled. */ @@ -1581,11 +1582,11 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) } Log(Logs::Detail, Logs::WorldServer, "Current location: %s (%d) %0.2f, %0.2f, %0.2f, %0.2f", - content_db.GetZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading); + ZoneName(pp.zone_id), pp.zone_id, pp.x, pp.y, pp.z, pp.heading); Log(Logs::Detail, Logs::WorldServer, "Bind location: %s (%d) %0.2f, %0.2f, %0.2f", - content_db.GetZoneName(pp.binds[0].zoneId), pp.binds[0].zoneId, pp.binds[0].x, pp.binds[0].y, pp.binds[0].z); + ZoneName(pp.binds[0].zoneId), pp.binds[0].zoneId, pp.binds[0].x, pp.binds[0].y, pp.binds[0].z); Log(Logs::Detail, Logs::WorldServer, "Home location: %s (%d) %0.2f, %0.2f, %0.2f", - content_db.GetZoneName(pp.binds[4].zoneId), pp.binds[4].zoneId, pp.binds[4].x, pp.binds[4].y, pp.binds[4].z); + ZoneName(pp.binds[4].zoneId), pp.binds[4].zoneId, pp.binds[4].x, pp.binds[4].y, pp.binds[4].z); /* Starting Items inventory */ content_db.SetStartingItems(&pp, &inv, pp.race, pp.class_, pp.deity, pp.zone_id, pp.name, GetAdmin()); @@ -2090,7 +2091,7 @@ bool Client::StoreCharacter( return false; } - const char *zone_name = content_db.GetZoneName(p_player_profile_struct->zone_id); + const char *zone_name = ZoneName(p_player_profile_struct->zone_id); if (zone_name == nullptr) { /* Zone not in the DB, something to prevent crash... */ strn0cpy(zone, "qeynos", 49); @@ -2134,4 +2135,4 @@ bool Client::StoreCharacter( } return true; -} \ No newline at end of file +} diff --git a/world/clientlist.cpp b/world/clientlist.cpp index b29af5a6b..0149b3b9f 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -33,6 +33,7 @@ #include "../common/event_sub.h" #include "web_interface.h" #include "wguild_mgr.h" +#include "world_store.h" #include extern WebInterfaceList web_interface; @@ -107,7 +108,7 @@ void ClientList::GetCLEIP(uint32 iIP) { iterator.Reset(); while(iterator.MoreElements()) { - countCLEIPs = iterator.GetData(); + countCLEIPs = iterator.GetData(); if ((countCLEIPs->GetIP() == iIP) && ((countCLEIPs->Admin() < (RuleI(World, ExemptMaxClientsStatus))) || (RuleI(World, ExemptMaxClientsStatus) < 0))) { // If the IP matches, and the connection admin status is below the exempt status, or exempt status is less than 0 (no-one is exempt) IPInstances++; // Increment the occurences of this IP address LogClientLogin("Account ID: [{}] Account Name: [{}] IP: [{}]", countCLEIPs->LSID(), countCLEIPs->LSName(), long2ip(countCLEIPs->GetIP()).c_str()); @@ -129,7 +130,7 @@ void ClientList::GetCLEIP(uint32 iIP) { if (IPInstances > (RuleI(World, MaxClientsPerIP))) { // If the number of connections exceeds the lower limit if (RuleB(World, MaxClientsSetByStatus)) { // If MaxClientsSetByStatus is set to True, override other IP Limit Rules LogClientLogin("Account ID: [{}] Account Name: [{}] IP: [{}] IP Instances: [{}] Max IP Instances: [{}]", countCLEIPs->LSID(), countCLEIPs->LSName(), long2ip(countCLEIPs->GetIP()).c_str(), IPInstances, countCLEIPs->Admin()); - if (IPInstances > countCLEIPs->Admin()) { // The IP Limit is set by the status of the account if status > MaxClientsPerIP + if (IPInstances > countCLEIPs->Admin()) { // The IP Limit is set by the status of the account if status > MaxClientsPerIP if(RuleB(World, IPLimitDisconnectAll)) { LogClientLogin("Disconnect: All accounts on IP [{}]", long2ip(countCLEIPs->GetIP()).c_str()); DisconnectByIP(iIP); @@ -142,7 +143,7 @@ void ClientList::GetCLEIP(uint32 iIP) { } } } else if ((countCLEIPs->Admin() < RuleI(World, AddMaxClientsStatus)) || (RuleI(World, AddMaxClientsStatus) < 0)) { // Else if the Admin status of the connection is not eligible for the higher limit, or there is no higher limit (AddMaxClientStatus < 0) - if(RuleB(World, IPLimitDisconnectAll)) { + if(RuleB(World, IPLimitDisconnectAll)) { LogClientLogin("Disconnect: All accounts on IP [{}]", long2ip(countCLEIPs->GetIP()).c_str()); DisconnectByIP(iIP); return; @@ -152,7 +153,7 @@ void ClientList::GetCLEIP(uint32 iIP) { iterator.RemoveCurrent(); continue; } - } else if (IPInstances > RuleI(World, AddMaxClientsPerIP)) { // else they are eligible for the higher limit, but if they exceed that + } else if (IPInstances > RuleI(World, AddMaxClientsPerIP)) { // else they are eligible for the higher limit, but if they exceed that if(RuleB(World, IPLimitDisconnectAll)) { LogClientLogin("Disconnect: All accounts on IP [{}]", long2ip(countCLEIPs->GetIP()).c_str()); DisconnectByIP(iIP); @@ -293,7 +294,7 @@ void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnect if (cle->LSID()) AppendAnyLenString(&output, &outsize, &outlen, "%s LSID: %i LSName: %s WorldAdmin: %i", newline, cle->LSID(), cle->LSName(), cle->WorldAdmin()); if (cle->CharID()) - AppendAnyLenString(&output, &outsize, &outlen, "%s CharID: %i CharName: %s Zone: %s (%i)", newline, cle->CharID(), cle->name(), content_db.GetZoneName(cle->zone()), cle->zone()); + AppendAnyLenString(&output, &outsize, &outlen, "%s CharID: %i CharName: %s Zone: %s (%i)", newline, cle->CharID(), cle->name(), ZoneName(cle->zone()), cle->zone()); if (outlen >= 3072) { connection->SendEmoteMessageRaw(to, 0, 0, 10, output); safe_delete(output); @@ -500,7 +501,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S countclients.Reset(); while(countclients.MoreElements()){ countcle = countclients.GetData(); - const char* tmpZone = content_db.GetZoneName(countcle->zone()); + const char* tmpZone = ZoneName(countcle->zone()); if ( (countcle->Online() >= CLE_Status::Zoning) && (!countcle->GetGM() || countcle->Anon() != 1 || admin >= countcle->Admin()) && @@ -580,7 +581,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S while(iterator.MoreElements()) { cle = iterator.GetData(); - const char* tmpZone = content_db.GetZoneName(cle->zone()); + const char* tmpZone = ZoneName(cle->zone()); if ( (cle->Online() >= CLE_Status::Zoning) && (!cle->GetGM() || cle->Anon() != 1 || admin >= cle->Admin()) && @@ -965,7 +966,7 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct* iterator.Reset(); while (iterator.MoreElements()) { cle = iterator.GetData(); - const char* tmpZone = content_db.GetZoneName(cle->zone()); + const char* tmpZone = ZoneName(cle->zone()); if ( (cle->Online() >= CLE_Status::Zoning) && (whom == 0 || ( @@ -1086,7 +1087,7 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct* AppendAnyLenString(&output, &outsize, &outlen, "\r\n"); else AppendAnyLenString(&output, &outsize, &outlen, "\n"); - + //console_list.SendConsoleWho(connection, to, admin, &output, &outsize, &outlen); } if (output) @@ -1282,7 +1283,7 @@ void ClientList::GetClients(const char *zone_name, std::vectorzone() == zoneid) @@ -1358,7 +1359,7 @@ void ClientList::SendClientVersionSummary(const char *Name) } zoneserver_list.SendEmoteMessage(Name, 0, 0, 13, "There are %i Titanium, %i SoF, %i SoD, %i UF, %i RoF, %i RoF2 clients currently connected.", - ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount, ClientRoF2Count); + ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount, ClientRoF2Count); } void ClientList::OnTick(EQ::Timer *t) @@ -1378,7 +1379,7 @@ void ClientList::OnTick(EQ::Timer *t) while (Iterator.MoreElements()) { ClientListEntry* cle = Iterator.GetData(); - + Json::Value outclient; outclient["Online"] = cle->Online(); diff --git a/world/console.cpp b/world/console.cpp index aa67751e7..8840b3070 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -30,6 +30,7 @@ #include "../common/string_util.h" #include "../common/md5.h" #include "eqemu_api_world_data_service.h" +#include "world_store.h" #include extern ClientList client_list; @@ -541,7 +542,7 @@ void ConsoleZoneShutdown( s->ZoneServerID = atoi(args[0].c_str()); } else { - s->zoneid = content_db.GetZoneID(args[0].c_str()); + s->zoneid = ZoneID(args[0].c_str()); } ZoneServer *zs = 0; @@ -549,7 +550,7 @@ void ConsoleZoneShutdown( zs = zoneserver_list.FindByID(s->ZoneServerID); } else if (s->zoneid != 0) { - zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(ZoneName(s->zoneid)); } else { connection->SendLine("Error: ZoneShutdown: neither ID nor name specified"); @@ -633,10 +634,10 @@ void ConsoleZoneLock( return; } - uint16 tmp = content_db.GetZoneID(args[1].c_str()); + uint16 tmp = ZoneID(args[1].c_str()); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, true)) { - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", ZoneName(tmp)); } else { connection->SendLine("Failed to change lock"); @@ -651,10 +652,10 @@ void ConsoleZoneLock( return; } - uint16 tmp = content_db.GetZoneID(args[1].c_str()); + uint16 tmp = ZoneID(args[1].c_str()); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, false)) { - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", ZoneName(tmp)); } else { connection->SendLine("Failed to change lock"); @@ -936,4 +937,4 @@ void RegisterConsoleFunctions(std::unique_ptr& console) console->RegisterCall("zonestatus", 50, "zonestatus", std::bind(ConsoleZoneStatus, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));console->RegisterCall("ping", 50, "ping", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("quit", 50, "quit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("exit", 50, "exit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); -} \ No newline at end of file +} diff --git a/world/console.old.cpp b/world/console.old.cpp index e3b530dd3..d7589d6eb 100644 --- a/world/console.old.cpp +++ b/world/console.old.cpp @@ -230,7 +230,7 @@ bool Console::Process() { std::string connecting_ip = inet_ntoa(in); SendMessage(2, StringFormat("Establishing connection from IP: %s Port: %d", inet_ntoa(in), GetPort()).c_str()); - + if (connecting_ip.find("127.0.0.1") != std::string::npos) { SendMessage(2, StringFormat("Connecting established from local host, auto assuming admin").c_str()); state = CONSOLE_STATE_CONNECTED; @@ -244,7 +244,7 @@ bool Console::Process() { } prompt_timer.Disable(); - + } if (timeout_timer.Check()) { @@ -269,7 +269,7 @@ bool Console::Process() { LogInfo("New launcher from [{}]:[{}]", inet_ntoa(in), GetPort()); launcher_list.Add(tcpc); tcpc = 0; - } + } else if(tcpc->GetPacketMode() == EmuTCPConnection::packetModeUCS) { LogInfo("New UCS Connection from [{}]:[{}]", inet_ntoa(in), GetPort()); @@ -281,7 +281,7 @@ bool Console::Process() { LogInfo("New QS Connection from [{}]:[{}]", inet_ntoa(in), GetPort()); QSLink.SetConnection(tcpc); tcpc = 0; - } + } else { LogInfo("Unsupported packet mode from [{}]:[{}]", inet_ntoa(in), GetPort()); } @@ -616,7 +616,7 @@ void Console::ProcessCommand(const char* command) { if(sep.arg[1][0]==0 || sep.arg[2][0] == 0) SendMessage(1, "Usage: movechar [charactername] [zonename]"); else { - if (!content_db.GetZoneID(sep.arg[2])) + if (!ZoneID(sep.arg[2])) SendMessage(1, "Error: Zone '%s' not found", sep.arg[2]); else if (!database.CheckUsedName((char*) sep.arg[1])) { if (!database.MoveCharacterToZone((char*) sep.arg[1], (char*) sep.arg[2])) @@ -711,13 +711,13 @@ void Console::ProcessCommand(const char* command) { if (sep.arg[1][0] >= '0' && sep.arg[1][0] <= '9') s->ZoneServerID = atoi(sep.arg[1]); else - s->zoneid = content_db.GetZoneID(sep.arg[1]); + s->zoneid = ZoneID(sep.arg[1]); ZoneServer* zs = 0; if (s->ZoneServerID != 0) zs = zoneserver_list.FindByID(s->ZoneServerID); else if (s->zoneid != 0) - zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(ZoneName(s->zoneid)); else SendMessage(1, "Error: ZoneShutdown: neither ID nor name specified"); @@ -828,10 +828,10 @@ void Console::ProcessCommand(const char* command) { zoneserver_list.ListLockedZones(0, this); } else if (strcasecmp(sep.arg[1], "lock") == 0 && admin >= 101) { - uint16 tmp = content_db.GetZoneID(sep.arg[2]); + uint16 tmp = ZoneID(sep.arg[2]); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, true)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", ZoneName(tmp)); else SendMessage(1, "Failed to change lock"); } @@ -839,10 +839,10 @@ void Console::ProcessCommand(const char* command) { SendMessage(1, "Usage: #zonelock lock [zonename]"); } else if (strcasecmp(sep.arg[1], "unlock") == 0 && admin >= 101) { - uint16 tmp = content_db.GetZoneID(sep.arg[2]); + uint16 tmp = ZoneID(sep.arg[2]); if (tmp) { if (zoneserver_list.SetLockedZone(tmp, false)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(tmp)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", ZoneName(tmp)); else SendMessage(1, "Failed to change lock"); } diff --git a/world/eql_config.cpp b/world/eql_config.cpp index 578e0d3a7..2b536c666 100644 --- a/world/eql_config.cpp +++ b/world/eql_config.cpp @@ -21,6 +21,7 @@ #include "launcher_link.h" #include "launcher_list.h" #include "../common/string_util.h" +#include "world_store.h" #include #include @@ -156,7 +157,7 @@ void EQLConfig::StartZone(Const_char *zone_ref) { bool EQLConfig::BootStaticZone(Const_char *short_name, uint16 port) { //make sure the short name is valid. - if(content_db.GetZoneID(short_name) == 0) + if(ZoneID(short_name) == 0) return false; //database update @@ -191,7 +192,7 @@ bool EQLConfig::BootStaticZone(Const_char *short_name, uint16 port) { bool EQLConfig::ChangeStaticZone(Const_char *short_name, uint16 port) { //make sure the short name is valid. - if(content_db.GetZoneID(short_name) == 0) + if(ZoneID(short_name) == 0) return false; //check internal state diff --git a/world/eqw.cpp b/world/eqw.cpp index a0c10fead..8d997edca 100644 --- a/world/eqw.cpp +++ b/world/eqw.cpp @@ -188,7 +188,7 @@ std::map EQW::GetPlayerDetails(Const_char *char_name) { res["character"] = cle->name(); res["account"] = cle->AccountName(); res["account_id"] = itoa(cle->AccountID()); - res["location_short"] = cle->zone()?content_db.GetZoneName(cle->zone()):"No Zone"; + res["location_short"] = cle->zone()?ZoneName(cle->zone()):"No Zone"; res["location_long"] = res["location_short"]; res["location_id"] = itoa(cle->zone()); res["ip"] = long2ip(cle->GetIP()); diff --git a/world/main.cpp b/world/main.cpp index c0ca4f9e3..a4c2f230f 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -94,7 +94,9 @@ union semun { #include "world_server_command_handler.h" #include "../common/content/world_content_service.h" #include "../common/repositories/merchantlist_temp_repository.h" +#include "world_store.h" +WorldStore world_store; ClientList client_list; GroupLFPList LFPGroupList; ZSList zoneserver_list; @@ -329,9 +331,7 @@ int main(int argc, char** argv) { LogInfo("Loading zones"); - // Load to both context for now... this needs to be cleaned up as this has always been cludgy - content_db.LoadZoneNames(); - database.zonename_array = content_db.zonename_array; + world_store.LoadZones(); LogInfo("Clearing groups"); database.ClearGroup(); diff --git a/world/world_store.cpp b/world/world_store.cpp new file mode 100644 index 000000000..36a88f998 --- /dev/null +++ b/world/world_store.cpp @@ -0,0 +1,132 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "world_store.h" + +WorldStore::WorldStore() = default; +WorldStore::~WorldStore()= default; + +void WorldStore::LoadZones() +{ + zones = ZoneRepository::All(); +} + +uint32 WorldStore::GetZoneID(const char *in_zone_name) +{ + if (in_zone_name == nullptr) { + return 0; + } + + std::string zone_name = in_zone_name; + + return GetZoneID(zone_name); +} + +uint32 WorldStore::GetZoneID(std::string zone_name) +{ + for (auto &z: zones) { + if (z.short_name == zone_name) { + return z.zoneidnumber; + } + } + + return 0; +} + +/** + * @param zone_id + * @param error_unknown + * @return + */ +const char *WorldStore::GetZoneName(uint32 zone_id, bool error_unknown) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name.c_str(); + } + } + + if (error_unknown) { + return "UNKNOWN"; + } + + return nullptr; +} + +/** + * @param zone_id + * @return + */ +std::string WorldStore::GetZoneName(uint32 zone_id) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name; + } + } + + return std::string(); +} + +/** + * @param zone_id + * @return + */ +std::string WorldStore::GetZoneLongName(uint32 zone_id) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.long_name; + } + } + + return std::string(); +} + +/** + * @param zone_id + * @param version + * @return + */ +ZoneRepository::Zone WorldStore::GetZone(uint32 zone_id, int version) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z; + } + } + + return ZoneRepository::Zone(); +} + +/** + * @param in_zone_name + * @return + */ +ZoneRepository::Zone WorldStore::GetZone(const char *in_zone_name) +{ + for (auto &z: zones) { + if (z.short_name == in_zone_name) { + return z; + } + } + + return ZoneRepository::Zone(); +} diff --git a/world/world_store.h b/world/world_store.h new file mode 100644 index 000000000..985419ff0 --- /dev/null +++ b/world/world_store.h @@ -0,0 +1,64 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_WORLD_STORE_H +#define EQEMU_WORLD_STORE_H + +#include "worlddb.h" +#include "../common/repositories/zone_repository.h" + +class WorldStore { +public: + WorldStore(); + virtual ~WorldStore(); + + std::vector zones{}; + + void LoadZones(); + + ZoneRepository::Zone GetZone(uint32 zone_id, int version = 0); + ZoneRepository::Zone GetZone(const char *in_zone_name); + uint32 GetZoneID(const char *in_zone_name); + uint32 GetZoneID(std::string zone_name); + std::string GetZoneName(uint32 zone_id); + std::string GetZoneLongName(uint32 zone_id); + const char *GetZoneName(uint32 zone_id, bool error_unknown = false); + +}; + +extern WorldStore world_store; + +/** + * Global helpers + */ +inline uint32 ZoneID(const char *in_zone_name) { return world_store.GetZoneID(in_zone_name); } +inline uint32 ZoneID(std::string zone_name) { return world_store.GetZoneID(zone_name); } +inline const char *ZoneName(uint32 zone_id, bool error_unknown = false) +{ + return world_store.GetZoneName( + zone_id, + error_unknown + ); +} +inline const char *ZoneLongName(uint32 zone_id) { return world_store.GetZoneLongName(zone_id).c_str(); } +inline ZoneRepository::Zone GetZone(uint32 zone_id, int version = 0) { return world_store.GetZone(zone_id, version); }; +inline ZoneRepository::Zone GetZone(const char *in_zone_name) { return world_store.GetZone(in_zone_name); }; + +#endif //EQEMU_WORLD_STORE_H diff --git a/world/worlddb.cpp b/world/worlddb.cpp index cf6411cc5..2adfd9fa4 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -26,6 +26,7 @@ #include #include "sof_char_create_data.h" #include "../common/repositories/criteria/content_filter_criteria.h" +#include "world_store.h" WorldDatabase database; WorldDatabase content_db; @@ -209,7 +210,13 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o /* If a bind_id is specified, make them start there */ if (atoi(row_d[1]) != 0) { player_profile_struct.binds[4].zoneId = (uint32) atoi(row_d[1]); - GetSafePoints(player_profile_struct.binds[4].zoneId, 0, &player_profile_struct.binds[4].x, &player_profile_struct.binds[4].y, &player_profile_struct.binds[4].z); + content_db.GetSafePoints( + ZoneName(player_profile_struct.binds[4].zoneId), + 0, + &player_profile_struct.binds[4].x, + &player_profile_struct.binds[4].y, + &player_profile_struct.binds[4].z + ); } /* Otherwise, use the zone and coordinates given */ else { @@ -217,7 +224,15 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o float x = atof(row_d[2]); float y = atof(row_d[3]); float z = atof(row_d[4]); - if (x == 0 && y == 0 && z == 0) { content_db.GetSafePoints(player_profile_struct.binds[4].zoneId, 0, &x, &y, &z); } + if (x == 0 && y == 0 && z == 0) { + content_db.GetSafePoints( + ZoneName(player_profile_struct.binds[4].zoneId), + 0, + &x, + &y, + &z + ); + } player_profile_struct.binds[4].x = x; player_profile_struct.binds[4].y = y; player_profile_struct.binds[4].z = z; @@ -459,11 +474,24 @@ bool WorldDatabase::GetStartZone( } if (p_player_profile_struct->x == 0 && p_player_profile_struct->y == 0 && p_player_profile_struct->z == 0) { - content_db.GetSafePoints(p_player_profile_struct->zone_id, 0, &p_player_profile_struct->x, &p_player_profile_struct->y, &p_player_profile_struct->z); + content_db.GetSafePoints( + ZoneName(p_player_profile_struct->zone_id), + 0, + &p_player_profile_struct->x, + &p_player_profile_struct->y, + &p_player_profile_struct->z + ); } - if (p_player_profile_struct->binds[0].x == 0 && p_player_profile_struct->binds[0].y == 0 && p_player_profile_struct->binds[0].z == 0) { - content_db.GetSafePoints(p_player_profile_struct->binds[0].zoneId, 0, &p_player_profile_struct->binds[0].x, &p_player_profile_struct->binds[0].y, &p_player_profile_struct->binds[0].z); + if (p_player_profile_struct->binds[0].x == 0 && p_player_profile_struct->binds[0].y == 0 && + p_player_profile_struct->binds[0].z == 0) { + content_db.GetSafePoints( + ZoneName(p_player_profile_struct->binds[0].zoneId), + 0, + &p_player_profile_struct->binds[0].x, + &p_player_profile_struct->binds[0].y, + &p_player_profile_struct->binds[0].z + ); } return true; diff --git a/world/zonelist.cpp b/world/zonelist.cpp index a046c6a90..cd01d8ae1 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -27,6 +27,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/json/json.h" #include "../common/event_sub.h" #include "web_interface.h" +#include "world_store.h" extern uint32 numzones; extern bool holdzones; @@ -263,7 +264,7 @@ void ZSList::ListLockedZones(const char* to, WorldTCPConnection* connection) { int x = 0; for (auto &zone : pLockedZones) { if (zone) { - connection->SendEmoteMessageRaw(to, 0, 0, 0, content_db.GetZoneName(zone, true)); + connection->SendEmoteMessageRaw(to, 0, 0, 0, ZoneName(zone, true)); x++; } } @@ -529,7 +530,7 @@ void ZSList::SOPZoneBootup(const char* adminname, uint32 ZoneServerID, const cha ZoneServer* zs = 0; ZoneServer* zs2 = 0; uint32 zoneid; - if (!(zoneid = content_db.GetZoneID(zonename))) + if (!(zoneid = ZoneID(zonename))) SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: zone '%s' not found in 'zone' table. Typo protection=ON.", zonename); else { if (ZoneServerID != 0) diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 45b7f93c7..7cd6793fb 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "adventure_manager.h" #include "ucs.h" #include "queryserv.h" +#include "world_store.h" extern ClientList client_list; extern GroupLFPList LFPGroupList; @@ -86,7 +87,7 @@ ZoneServer::~ZoneServer() { bool ZoneServer::SetZone(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { is_booting_up = false; - const char* zn = MakeLowerString(content_db.GetZoneName(iZoneID)); + const char* zn = MakeLowerString(ZoneName(iZoneID)); char* longname; if (iZoneID) @@ -566,7 +567,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { SetZone_Struct* szs = (SetZone_Struct*)pack->pBuffer; if (szs->zoneid != 0) { - if (content_db.GetZoneName(szs->zoneid)) + if (ZoneName(szs->zoneid)) SetZone(szs->zoneid, szs->instanceid, szs->staticzone); else SetZone(0); @@ -648,7 +649,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { if (s->ZoneServerID != 0) zs = zoneserver_list.FindByID(s->ZoneServerID); else if (s->zoneid != 0) - zs = zoneserver_list.FindByName(content_db.GetZoneName(s->zoneid)); + zs = zoneserver_list.FindByName(ZoneName(s->zoneid)); else zoneserver_list.SendEmoteMessage(s->adminname, 0, 0, 0, "Error: SOP_ZoneShutdown: neither ID nor name specified"); @@ -660,7 +661,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_ZoneBootup: { ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *)pack->pBuffer; - zoneserver_list.SOPZoneBootup(s->adminname, s->ZoneServerID, content_db.GetZoneName(s->zoneid), s->makestatic); + zoneserver_list.SOPZoneBootup(s->adminname, s->ZoneServerID, ZoneName(s->zoneid), s->makestatic); break; } case ServerOP_ZoneStatus: { @@ -1018,13 +1019,13 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { break; case 1: if (zoneserver_list.SetLockedZone(s->zoneID, true)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", content_db.GetZoneName(s->zoneID)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", ZoneName(s->zoneID)); else this->SendEmoteMessageRaw(s->adminname, 0, 0, 0, "Failed to change lock"); break; case 2: if (zoneserver_list.SetLockedZone(s->zoneID, false)) - zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", content_db.GetZoneName(s->zoneID)); + zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", ZoneName(s->zoneID)); else this->SendEmoteMessageRaw(s->adminname, 0, 0, 0, "Failed to change lock"); break; diff --git a/zone/aa.cpp b/zone/aa.cpp index 45ad357a2..e11b4a2ae 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -33,6 +33,7 @@ Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net) #include "string_ids.h" #include "titles.h" #include "zonedb.h" +#include "zone_store.h" extern QueryServ* QServ; diff --git a/zone/api_service.cpp b/zone/api_service.cpp index b038da1a6..f97c451b1 100644 --- a/zone/api_service.cpp +++ b/zone/api_service.cpp @@ -22,6 +22,7 @@ #include "../common/net/websocket_server.h" #include "../common/eqemu_logsys.h" #include "zonedb.h" +#include "zone_store.h" #include "client.h" #include "entity.h" #include "corpse.h" diff --git a/zone/attack.cpp b/zone/attack.cpp index 6c72fbe6a..90b43c4e0 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -283,7 +283,7 @@ bool Mob::CheckHitChance(Mob* other, DamageHitInfo &hit) bool lua_ret = false; bool ignoreDefault = false; lua_ret = LuaParser::Instance()->CheckHitChance(this, other, hit, ignoreDefault); - + if(ignoreDefault) { return lua_ret; } @@ -323,7 +323,7 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) bool lua_ret = false; bool ignoreDefault = false; lua_ret = LuaParser::Instance()->AvoidDamage(this, other, hit, ignoreDefault); - + if (ignoreDefault) { return lua_ret; } @@ -866,7 +866,7 @@ int Mob::GetBestMeleeSkill() { EQEmu::skills::Skill1HBlunt, EQEmu::skills::Skill1HSlashing, EQEmu::skills::Skill2HBlunt, - EQEmu::skills::Skill2HSlashing, + EQEmu::skills::Skill2HSlashing, EQEmu::skills::SkillHandtoHand, EQEmu::skills::Skill1HPiercing, EQEmu::skills::Skill2HPiercing, @@ -879,7 +879,7 @@ int Mob::GetBestMeleeSkill() value = GetSkill(meleeSkills[i]); bestSkill = std::max(value, bestSkill); } - + return bestSkill; } @@ -892,7 +892,7 @@ int Mob::offense(EQEmu::skills::SkillType skill) case EQEmu::skills::SkillArchery: case EQEmu::skills::SkillThrowing: stat_bonus = GetDEX(); - break; + break; // Mobs with no weapons default to H2H. // Since H2H is capped at 100 for many many classes, @@ -943,7 +943,7 @@ void Mob::MeleeMitigation(Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions #ifdef LUA_EQEMU bool ignoreDefault = false; LuaParser::Instance()->MeleeMitigation(this, attacker, hit, opts, ignoreDefault); - + if (ignoreDefault) { return; } @@ -1735,7 +1735,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk if (!RuleB(Character, UseDeathExpLossMult)) { exploss = (int)(GetLevel() * (GetLevel() / 18.0) * 12000); } - + if (RuleB(Zone, LevelBasedEXPMods)) { // Death in levels with xp_mod (such as hell levels) was resulting // in losing more that appropriate since the loss was the same but @@ -1893,7 +1893,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk dead_timer.Start(5000, true); m_pp.zone_id = m_pp.binds[0].zoneId; m_pp.zoneInstance = m_pp.binds[0].instance_id; - database.MoveCharacterToZone(this->CharacterID(), content_db.GetZoneName(m_pp.zone_id)); + database.MoveCharacterToZone(this->CharacterID(), m_pp.zone_id); Save(); GoToDeath(); } @@ -2452,7 +2452,7 @@ bool NPC::Death(Mob* killer_mob, int32 damage, uint16 spell, EQEmu::skills::Skil bool allow_merchant_corpse = RuleB(Merchant, AllowCorpse); bool is_merchant = (class_ == MERCHANT || class_ == ADVENTUREMERCHANT || MerchantType != 0); - + if (!HasOwner() && !IsMerc() && !GetSwarmInfo() && (!is_merchant || allow_merchant_corpse) && ((killer && (killer->IsClient() || (killer->HasOwner() && killer->GetUltimateOwner()->IsClient()) || (killer->IsNPC() && killer->CastToNPC()->GetSwarmInfo() && killer->CastToNPC()->GetSwarmInfo()->GetOwner() && killer->CastToNPC()->GetSwarmInfo()->GetOwner()->IsClient()))) @@ -4093,7 +4093,7 @@ void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *w if (IsPet() && hand != EQEmu::invslot::slotPrimary) //Pets can only proc spell procs from their primay hand (ie; beastlord pets) continue; // If pets ever can proc from off hand, this will need to change - if (SpellProcs[i].base_spellID == POISON_PROC && + if (SpellProcs[i].base_spellID == POISON_PROC && (!weapon || weapon->ItemType != EQEmu::item::ItemType1HPiercing)) continue; // Old school poison will only proc with 1HP equipped. @@ -4113,7 +4113,7 @@ void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *w // Spell procs (buffs) if (SpellProcs[i].spellID != SPELL_UNKNOWN) { if (SpellProcs[i].base_spellID == POISON_PROC) { - poison_slot=i; + poison_slot=i; continue; // Process the poison proc last per @mackal } @@ -4160,7 +4160,7 @@ void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *w RemoveProcFromWeapon(spell_id); } } - } + } if (HasSkillProcs() && hand != EQEmu::invslot::slotRange) { //We check ranged skill procs within the attack functions. uint16 skillinuse = 28; @@ -4696,7 +4696,7 @@ void Mob::ApplyDamageTable(DamageHitInfo &hit) #ifdef LUA_EQEMU bool ignoreDefault = false; LuaParser::Instance()->ApplyDamageTable(this, hit, ignoreDefault); - + if (ignoreDefault) { return; } diff --git a/zone/bot.h b/zone/bot.h index b456fd77f..ab2499f2e 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -29,6 +29,7 @@ #include "groups.h" #include "corpse.h" #include "zonedb.h" +#include "zone_store.h" #include "string_ids.h" #include "../common/misc_functions.h" #include "../common/global_define.h" @@ -320,7 +321,7 @@ public: void SetStopMeleeLevel(uint8 level); void SetGuardMode(); void SetHoldMode(); - + // Mob AI Virtual Override Methods virtual void AI_Process(); virtual void AI_Stop(); @@ -351,7 +352,7 @@ public: virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); } const EQEmu::InventoryProfile& GetBotInv() const { return m_inv; } - // Static Class Methods + // Static Class Methods //static void DestroyBotRaidObjects(Client* client); // Can be removed after bot raids are dumped static Bot* LoadBot(uint32 botID); static uint32 SpawnedBotCount(uint32 botOwnerCharacterID); @@ -405,7 +406,7 @@ public: static BotSpell GetDebuffBotSpell(Bot* botCaster, Mob* target); static BotSpell GetBestBotSpellForCure(Bot* botCaster, Mob* target); static BotSpell GetBestBotSpellForResistDebuff(Bot* botCaster, Mob* target); - + static NPCType *CreateDefaultNPCTypeStructForBot(std::string botName, std::string botLastName, uint8 botLevel, uint16 botRace, uint8 botClass, uint8 gender); // Static Bot Group Methods @@ -451,7 +452,7 @@ public: bool IsBotNonSpellFighter() { return IsNonSpellFighterClass(GetClass()); } bool CanHeal(); int GetRawACNoShield(int &shield_ac); - + // new heal rotation code bool CreateHealRotation(uint32 cycle_duration_ms = 5000, bool fast_heals = false, bool adaptive_targeting = false, bool casting_override = false); bool DestroyHealRotation(); @@ -597,7 +598,7 @@ public: int32 GetBasePR() { return _basePR; } int32 GetBaseDR() { return _baseDR; } int32 GetBaseCorrup() { return _baseCorrup; } - + protected: virtual void PetAIProcess(); virtual void BotMeditate(bool isSitting); @@ -656,7 +657,7 @@ private: int32 max_end; int32 end_regen; uint32 timers[MaxTimer]; - + Timer m_evade_timer; // can be moved to pTimers at some point Timer m_alt_combat_hate_timer; Timer m_auto_defend_timer; diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index 3b539d052..1da51cf06 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -24,7 +24,7 @@ 2. Add the function in this file. 3. In the bot_command_init function you must add a call to bot_command_add for your function. - + Notes: If you want an alias for your bot command, add an entry to the `bot_command_settings` table in your database. The access level you set with bot_command_add is the default setting if the bot command isn't @@ -60,6 +60,7 @@ #include "bot_command.h" #include "zonedb.h" +#include "zone_store.h" #include "guild_mgr.h" #include "map.h" #include "doors.h" @@ -120,18 +121,18 @@ public: static void Load() { bot_command_spells.clear(); bcst_levels_map bot_levels_map; - + for (int i = BCEnum::SpellTypeFirst; i <= BCEnum::SpellTypeLast; ++i) { bot_command_spells[static_cast(i)]; bot_levels_map[static_cast(i)]; } - + for (int spell_id = 2; spell_id < SPDAT_RECORDS; ++spell_id) { if (spells[spell_id].player_1[0] == '\0') continue; if (spells[spell_id].targettype != ST_Target && spells[spell_id].CastRestriction != 0) // watch continue; - + auto target_type = BCEnum::TT_None; switch (spells[spell_id].targettype) { case ST_GroupTeleport: @@ -196,7 +197,7 @@ public: } if (target_type == BCEnum::TT_None) continue; - + uint8 class_levels[16] = { 0 }; bool player_spell = false; for (int class_type = WARRIOR; class_type <= BERSERKER; ++class_type) { @@ -209,7 +210,7 @@ public: } if (!player_spell) continue; - + STBaseEntry* entry_prototype = nullptr; while (true) { switch (spells[spell_id].effectid[EFFECTIDTOINDEX(1)]) { @@ -310,7 +311,7 @@ public: } if (entry_prototype) break; - + switch (spells[spell_id].effectid[EFFECTIDTOINDEX(2)]) { case SE_Succor: entry_prototype = new STEscapeEntry; @@ -334,7 +335,7 @@ public: } if (entry_prototype) break; - + while (spells[spell_id].typedescnum == 27) { if (!spells[spell_id].goodEffect) break; @@ -351,7 +352,7 @@ public: } if (entry_prototype) break; - + switch (spells[spell_id].SpellAffectIndex) { case 1: { bool valid_spell = false; @@ -453,7 +454,7 @@ public: } if (!entry_prototype) continue; - + if (target_type == BCEnum::TT_Self && (entry_prototype->BCST() != BCEnum::SpT_Stance && entry_prototype->BCST() != BCEnum::SpT_SummonCorpse)) { #ifdef BCSTSPELLDUMP LogError("DELETING entry_prototype (primary clause) - name: [{}], target_type: [{}], BCST: [{}]", @@ -532,12 +533,12 @@ public: spell_entry = new STBaseEntry(entry_prototype); break; } - + assert(spell_entry); spell_entry->caster_class = class_type; spell_entry->spell_level = class_levels[class_index]; - + bot_command_spells[spell_entry->BCST()].push_back(spell_entry); if (bot_levels.find(class_type) == bot_levels.end() || bot_levels[class_type] > class_levels[class_index]) @@ -546,7 +547,7 @@ public: delete(entry_prototype); } - + remove_inactive(); order_all(); load_teleport_zone_names(); @@ -1152,7 +1153,7 @@ private: auto bcst_id = static_cast(i); spell_dump << StringFormat("BCSpells::spell_dump(): - '%s' returned %u spells:\n", BCEnum::SpellTypeEnumToString(bcst_id).c_str(), bot_command_spells[bcst_id].size()); - + bcst_list& map_entry = bot_command_spells[bcst_id]; for (auto list_iter = map_entry.begin(); list_iter != map_entry.end(); ++list_iter) { STBaseEntry* list_entry = *list_iter; @@ -1229,7 +1230,7 @@ private: spell_dump << "\n"; ++entry_count; } - + spell_dump << StringFormat("required_bots_map[%s] = \"%s\"\n", BCEnum::SpellTypeEnumToString(static_cast(i)).c_str(), required_bots_map[static_cast(i)].c_str()); @@ -1477,7 +1478,7 @@ int bot_command_init(void) working_bcl_iter.first.c_str() ); } - + continue; } @@ -1487,7 +1488,7 @@ int bot_command_init(void) working_bcl_iter.first.c_str(), bcs_iter->second.first ); - + if (bcs_iter->second.second.empty()) { continue; } @@ -1522,11 +1523,11 @@ int bot_command_init(void) LogInfo("Failed to process 'Injected Bot Commands' update operation."); } } - + bot_command_dispatch = bot_command_real_dispatch; BCSpells::Load(); - + return bot_command_count; } @@ -1710,10 +1711,10 @@ namespace MyBots auto test_bot = my_bot->CastToBot(); if (!test_bot->GetOwner() || !test_bot->GetOwner()->IsClient() || test_bot->GetOwner()->CastToClient() != bot_owner) return false; - + return true; } - + static bool IsMyBotInTargetsGroup(Client *bot_owner, Mob *grouped_bot) { if (!bot_owner || !grouped_bot || !grouped_bot->GetGroup() || !IsMyBot(bot_owner, grouped_bot)) return false; @@ -1724,7 +1725,7 @@ namespace MyBots if (!target_mob->GetGroup() || (!target_mob->IsClient() && !target_mob->IsBot())) return false; - + return (grouped_bot->GetGroup() == target_mob->GetGroup()); } @@ -1757,7 +1758,7 @@ namespace MyBots sbl.clear(); if (!bot_owner || !name) return; - + auto selectable_bot_list = entity_list.GetBotsByBotOwnerCharacterID(bot_owner->CharacterID()); for (auto bot_iter : selectable_bot_list) { if (!strcasecmp(bot_iter->GetCleanName(), name)) { @@ -1765,7 +1766,7 @@ namespace MyBots return; } } - + if (!clear_list) UniquifySBL(sbl); } @@ -1785,7 +1786,7 @@ namespace MyBots if (IsMyBot(bot_owner, member_iter)) sbl.push_back(member_iter); } - + if (!clear_list) UniquifySBL(sbl); } @@ -1806,7 +1807,7 @@ namespace MyBots if (IsMyBot(bot_owner, member_iter)) sbl.push_back(member_iter); } - + if (!clear_list) UniquifySBL(sbl); } @@ -1835,11 +1836,11 @@ namespace MyBots if (IsMyBot(bot_owner, member_iter)) sbl.push_back(member_iter); } - + if (!clear_list) UniquifySBL(sbl); } - + static void PopulateSBL_ByHealRotation(Client *bot_owner, std::list &sbl, const char* name, bool clear_list = true) { if (clear_list) sbl.clear(); @@ -1890,11 +1891,11 @@ namespace MyBots if (IsMyBot(bot_owner, hrm_iter)) sbl.push_back(hrm_iter); } - + if (!clear_list) UniquifySBL(sbl); } - + static void PopulateSBL_ByHealRotationTargets(Client *bot_owner, std::list &sbl, const char* name, bool clear_list = true) { if (clear_list) sbl.clear(); @@ -1915,7 +1916,7 @@ namespace MyBots if (IsMyBot(bot_owner, hrm_iter)) sbl.push_back(static_cast(hrm_iter)); } - + if (!clear_list) UniquifySBL(sbl); } @@ -2461,7 +2462,7 @@ namespace ActionableBots sbl.remove_if([bot_owner](Bot* l) { return (!MyBots::IsMyBot(bot_owner, l)); }); sbl.remove_if([bot_owner](Bot* l) { return (!l->IsBotArcher()); }); } - + static void Filter_ByHighestSkill(Client* bot_owner, std::list& sbl, EQEmu::skills::SkillType skill_type, float& skill_value) { sbl.remove_if([bot_owner](Bot* l) { return (!MyBots::IsMyBot(bot_owner, l)); }); skill_value = 0.0f; @@ -2610,7 +2611,7 @@ void bot_command_apply_poison(Client *c, const Seperator *sep) c->Message(m_fail, "Your rogue bot must be level 18 before %s can apply poison!", (my_rogue_bot->GetGender() == 1 ? "she" : "he")); return; } - + const auto poison_instance = c->GetInv().GetItem(EQEmu::invslot::slotCursor); if (!poison_instance) { @@ -2748,7 +2749,7 @@ void bot_command_attack(Client *c, const Seperator *sep) return; } if (helper_is_help_or_usage(sep->arg[1])) { - + c->Message(m_usage, "usage: %s [actionable: byname | ownergroup | botgroup | namesgroup | healrotation | default: spawned] ([actionable_name])", sep->arg[0]); return; } @@ -2756,7 +2757,7 @@ void bot_command_attack(Client *c, const Seperator *sep) Mob* target_mob = ActionableTarget::AsSingle_ByAttackable(c); if (!target_mob) { - + c->Message(m_fail, "You must an enemy to use this command"); return; } @@ -2765,7 +2766,7 @@ void bot_command_attack(Client *c, const Seperator *sep) if (ab_arg.empty()) { ab_arg = "spawned"; } - + std::list sbl; if (ActionableBots::PopulateSBL(c, ab_arg.c_str(), sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) { return; @@ -2831,7 +2832,7 @@ void bot_command_bind_affinity(Client *c, const Seperator *sep) c->Message(m_fail, "Failed to bind %s to this location", target_mob->GetCleanName()); break; } - + helper_no_available_bots(c, my_bot); } @@ -2866,7 +2867,7 @@ void bot_command_bot(Client *c, const Seperator *sep) "botlist", "botoutofcombat", "botreport", "botspawn", "botstance", "botsummon", "bottogglearcher", "bottogglehelm", "botupdate" }; */ - + if (helper_command_alias_fail(c, "bot_command_bot", sep->arg[0], "bot")) return; @@ -2890,7 +2891,7 @@ void bot_command_botgroup(Client *c, const Seperator *sep) "botgroupaddmember", "botgroupcreate", "botgroupdelete", "botgrouplist", "botgroupload", "botgroupremovemember" }; */ - + if (helper_command_alias_fail(c, "bot_command_botgroup", sep->arg[0], "botgroup")) return; @@ -2946,7 +2947,7 @@ void bot_command_charm(Client *c, const Seperator *sep) break; } - + helper_no_available_bots(c, my_bot); } @@ -3016,7 +3017,7 @@ void bot_command_cure(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3031,7 +3032,7 @@ void bot_command_defensive(Client *c, const Seperator *sep) return; } const int ab_mask = ActionableBots::ABM_Type1; - + std::list sbl; if (ActionableBots::PopulateSBL(c, sep->arg[1], sbl, ab_mask, sep->arg[2]) == ActionableBots::ABT_None) return; @@ -3127,7 +3128,7 @@ void bot_command_depart(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3170,7 +3171,7 @@ void bot_command_escape(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3182,7 +3183,7 @@ void bot_command_find_aliases(Client *c, const Seperator *sep) c->Message(m_usage, "usage: %s [alias | command]", sep->arg[0]); return; } - + auto find_iter = bot_command_aliases.find(sep->arg[1]); if (find_iter == bot_command_aliases.end()) { c->Message(m_fail, "No bot commands or aliases match '%s'", sep->arg[1]); @@ -3248,7 +3249,7 @@ void bot_command_follow(Client *c, const Seperator *sep) std::list sbl; if (ActionableBots::PopulateSBL(c, sep->arg[ab_arg], sbl, ab_mask, sep->arg[name_arg]) == ActionableBots::ABT_None) return; - + sbl.remove(nullptr); for (auto bot_iter : sbl) { bot_iter->WipeHateList(); @@ -3366,7 +3367,7 @@ void bot_command_heal_rotation(Client *c, const Seperator *sep) subcommand_list.push_back("healrotationstart"); subcommand_list.push_back("healrotationstop"); /* VS2012 code - end */ - + /* VS2013 code const std::list subcommand_list = { "healrotationadaptivetargeting", "healrotationaddmember", "healrotationaddtarget", "healrotationadjustcritical", "healrotationadjustsafe", @@ -3375,7 +3376,7 @@ void bot_command_heal_rotation(Client *c, const Seperator *sep) "healrotationresetlimits", "healrotationsethot", "healrotationstart", "healrotationstop" }; */ - + if (helper_command_alias_fail(c, "bot_command_heal_rotation", sep->arg[0], "healrotation")) return; @@ -3401,7 +3402,7 @@ void bot_command_help(Client *c, const Seperator *sep) { if (helper_command_alias_fail(c, "bot_command_help", sep->arg[0], "help")) return; - + c->Message(m_message, "Available EQEMu bot commands:"); int bot_commands_shown = 0; @@ -3505,7 +3506,7 @@ void bot_command_identify(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3581,7 +3582,7 @@ void bot_command_invisibility(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3647,7 +3648,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) msg = StringFormat("%cinventorygive byname %s", BOT_COMMAND_CHAR, bot_iter->GetCleanName()); text_link = bot_iter->CreateSayLink(c, msg.c_str(), bot_iter->GetCleanName()); - + for (auto slot_iter : equipable_slot_list) { // needs more failure criteria - this should cover the bulk for now @@ -3717,7 +3718,7 @@ void bot_command_levitation(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3787,7 +3788,7 @@ void bot_command_mesmerize(Client *c, const Seperator *sep) auto target_mob = actionable_targets.Select(c, local_entry->target_type, ENEMY); if (!target_mob) continue; - + if (spells[local_entry->spell_id].max[EFFECTIDTOINDEX(1)] < target_mob->GetLevel()) continue; @@ -3850,7 +3851,7 @@ void bot_command_movement_speed(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -3859,7 +3860,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) if (helper_is_help_or_usage(sep->arg[1])) { c->Message(m_usage, "usage: %s [option] [argument]", sep->arg[0]); - + std::string window_title = "Bot Owner Options"; std::string window_text = "" @@ -3944,7 +3945,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) "" "" "
show current settings
"; - + c->SendPopupToClient(window_title.c_str(), window_text.c_str()); return; @@ -3964,7 +3965,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) else { c->SetBotOption(Client::booDeathMarquee, !c->GetBotOption(Client::booDeathMarquee)); } - + database.botdb.SaveOwnerOption(c->CharacterID(), Client::booDeathMarquee, c->GetBotOption(Client::booDeathMarquee)); c->Message(m_action, "Bot 'death marquee' is now %s.", (c->GetBotOption(Client::booDeathMarquee) == true ? "enabled" : "disabled")); @@ -4054,7 +4055,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) c->Message(m_action, "Bot 'spawn message' is now %s.", argument.c_str()); } else if (!owner_option.compare("altcombat")) { - + if (RuleB(Bots, AllowOwnerOptionAltCombat)) { if (!argument.compare("enable")) { @@ -4130,7 +4131,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) c->Message(m_action, "Bot 'monk wu message' is now %s.", (c->GetBotOption(Client::booMonkWuMessage) == true ? "enabled" : "disabled")); } else if (!owner_option.compare("current")) { - + std::string window_title = "Current Bot Owner Options Settings"; std::string window_text = fmt::format( "" @@ -4156,7 +4157,7 @@ void bot_command_owner_option(Client *c, const Seperator *sep) (c->GetBotOption(Client::booBuffCounter) ? "enabled" : "disabled"), (c->GetBotOption(Client::booMonkWuMessage) ? "enabled" : "disabled") ); - + c->SendPopupToClient(window_title.c_str(), window_text.c_str()); } else { @@ -4172,7 +4173,7 @@ void bot_command_pet(Client *c, const Seperator *sep) subcommand_list.push_back("petremove"); subcommand_list.push_back("petsettype"); /* VS2012 code - end */ - + /* VS2013 code const std::list subcommand_list = { "petgetlost", "petremove", "petsettype" }; */ @@ -4205,7 +4206,7 @@ void bot_command_pick_lock(Client *c, const Seperator *sep) } Bot* my_bot = sbl.front(); - + my_bot->InterruptSpell(); Bot::BotGroupSay(my_bot, "Attempting to pick the lock.."); @@ -4310,7 +4311,7 @@ void bot_command_pull(Client *c, const Seperator *sep) if (bot_iter->GetAppearance() == eaDead || bot_iter->GetBotStance() == EQEmu::constants::stancePassive) { continue; } - + switch (bot_iter->GetClass()) { case ROGUE: case MONK: @@ -4385,7 +4386,7 @@ void bot_command_pull(Client *c, const Seperator *sep) if (bot_puller) { bot_puller->SetPullFlag(); } - + helper_no_available_bots(c, bot_puller); } @@ -4452,7 +4453,7 @@ void bot_command_resistance(Client *c, const Seperator *sep) return true; if (_l->resist_value[RESISTANCEIDTOINDEX(resistance_type)] == _r->resist_value[RESISTANCEIDTOINDEX(resistance_type)] && spells[_l->spell_id].mana == spells[_r->spell_id].mana && _l->resist_total > _r->resist_total) return true; - + return false; }); @@ -4480,14 +4481,14 @@ void bot_command_resistance(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } void bot_command_resurrect(Client *c, const Seperator *sep) { // Obscure bot spell code prohibits the aoe portion from working correctly... - + bcst_list* local_list = &bot_command_spells[BCEnum::SpT_Resurrect]; if (helper_spell_list_fail(c, local_list, BCEnum::SpT_Resurrect) || helper_command_alias_fail(c, "bot_command_resurrect", sep->arg[0], "resurrect")) return; @@ -4516,7 +4517,7 @@ void bot_command_resurrect(Client *c, const Seperator *sep) // continue; if (local_entry->aoe) continue; - + auto target_mob = actionable_targets.Select(c, local_entry->target_type, FRIENDLY); //if (!target_mob && !local_entry->aoe) // continue; @@ -4573,14 +4574,14 @@ void bot_command_rune(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } void bot_command_send_home(Client *c, const Seperator *sep) { // Obscure bot spell code prohibits the aoe portion from working correctly... - + bcst_list* local_list = &bot_command_spells[BCEnum::SpT_SendHome]; if (helper_spell_list_fail(c, local_list, BCEnum::SpT_SendHome) || helper_command_alias_fail(c, "bot_command_send_home", sep->arg[0], "sendhome")) return; @@ -4607,7 +4608,7 @@ void bot_command_send_home(Client *c, const Seperator *sep) continue; if (local_entry->group != group) continue; - + auto target_mob = actionable_targets.Select(c, local_entry->target_type, FRIENDLY); if (!target_mob) continue; @@ -4668,7 +4669,7 @@ void bot_command_size(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -4679,7 +4680,7 @@ void bot_command_summon_corpse(Client *c, const Seperator *sep) // temp c->Message(m_fail, "This command is currently unavailable..."); return; - + bcst_list* local_list = &bot_command_spells[BCEnum::SpT_SummonCorpse]; if (helper_spell_list_fail(c, local_list, BCEnum::SpT_SummonCorpse) || helper_command_alias_fail(c, "bot_command_summon_corpse", sep->arg[0], "summoncorpse")) return; @@ -4698,7 +4699,7 @@ void bot_command_summon_corpse(Client *c, const Seperator *sep) auto local_entry = list_iter; if (helper_spell_check_fail(local_entry)) continue; - + auto target_mob = ActionableTarget::AsSingle_ByPlayer(c); if (!target_mob) continue; @@ -4711,7 +4712,7 @@ void bot_command_summon_corpse(Client *c, const Seperator *sep) continue; cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); - + break; } @@ -4771,12 +4772,12 @@ void bot_command_taunt(Client *c, const Seperator *sep) if (ActionableBots::PopulateSBL(c, sep->arg[ab_arg], sbl, ab_mask, sep->arg[(ab_arg + 1)]) == ActionableBots::ABT_None) return; sbl.remove(nullptr); - + int taunting_count = 0; for (auto bot_iter : sbl) { if (!bot_iter->GetSkill(EQEmu::skills::SkillTaunt)) continue; - + if (toggle_taunt) bot_iter->SetTaunting(!bot_iter->IsTaunting()); else @@ -4814,10 +4815,10 @@ void bot_command_track(Client *c, const Seperator *sep) std::list sbl; MyBots::PopulateSBL_BySpawnedBots(c, sbl); - + uint16 class_mask = (PLAYER_CLASS_RANGER_BIT | PLAYER_CLASS_DRUID_BIT | PLAYER_CLASS_BARD_BIT); ActionableBots::Filter_ByClasses(c, sbl, class_mask); - + Bot* my_bot = ActionableBots::AsSpawned_ByMinLevelAndClass(c, sbl, 1, RANGER); if (tracking_scope.empty()) { if (!my_bot) @@ -4903,7 +4904,7 @@ void bot_command_water_breathing(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -4926,14 +4927,14 @@ void bot_subcommand_bot_appearance(Client *c, const Seperator *sep) subcommand_list.push_back("bottattoo"); subcommand_list.push_back("botwoad"); /* VS2012 code - end */ - + /* VS2013 code const std::list subcommand_list = { "botbeardcolor", "botbeardstyle", "botdetails", "boteyes", "botface", "bothaircolor", "bothairstyle", "botheritage", "bottattoo", "botwoad" }; */ - + if (helper_command_alias_fail(c, "bot_subcommand_bot_appearance", sep->arg[0], "botappearance")) return; @@ -5102,7 +5103,7 @@ void bot_subcommand_bot_clone(Client *c, const Seperator *sep) if (!database.botdb.CreateCloneBotInventory(c->CharacterID(), my_bot->GetBotID(), clone_id)) c->Message(m_fail, "%s for clone '%s'", BotDatabase::fail::CreateCloneBotInventory(), bot_name.c_str()); - + c->Message(m_action, "Bot '%s' was successfully cloned to bot '%s'", my_bot->GetCleanName(), bot_name.c_str()); } @@ -5257,7 +5258,7 @@ void bot_subcommand_bot_delete(Client *c, const Seperator *sep) void bot_subcommand_bot_details(Client *c, const Seperator *sep) { // TODO: Trouble-shoot model update issue - + if (helper_command_alias_fail(c, "bot_subcommand_bot_details", sep->arg[0], "botdetails")) return; if (helper_is_help_or_usage(sep->arg[1])) { @@ -5296,10 +5297,10 @@ void bot_subcommand_bot_details(Client *c, const Seperator *sep) void bot_subcommand_bot_dye_armor(Client *c, const Seperator *sep) { // TODO: Trouble-shoot model update issue - + const std::string msg_matslot = StringFormat("mat_slot: %c(All), %i(Head), %i(Chest), %i(Arms), %i(Wrists), %i(Hands), %i(Legs), %i(Feet)", '*', EQEmu::textures::armorHead, EQEmu::textures::armorChest, EQEmu::textures::armorArms, EQEmu::textures::armorWrist, EQEmu::textures::armorHands, EQEmu::textures::armorLegs, EQEmu::textures::armorFeet); - + if (helper_command_alias_fail(c, "bot_subcommand_bot_dye_armor", sep->arg[0], "botdyearmor")) return; if (helper_is_help_or_usage(sep->arg[1])) { @@ -5377,7 +5378,7 @@ void bot_subcommand_bot_dye_armor(Client *c, const Seperator *sep) void bot_subcommand_bot_eyes(Client *c, const Seperator *sep) { // TODO: Trouble-shoot model update issue - + // not sure if left/right bias is allowed in pc-type entities (something is keeping them from being different) if (helper_command_alias_fail(c, "bot_subcommand_bot_eyes", sep->arg[0], "boteyes")) return; @@ -5611,7 +5612,7 @@ void bot_subcommand_bot_hairstyle(Client *c, const Seperator *sep) void bot_subcommand_bot_heritage(Client *c, const Seperator *sep) { // TODO: Trouble-shoot model update issue - + if (helper_command_alias_fail(c, "bot_subcommand_bot_heritage", sep->arg[0], "botheritage")) return; if (helper_is_help_or_usage(sep->arg[1])) { @@ -5640,7 +5641,7 @@ void bot_subcommand_bot_heritage(Client *c, const Seperator *sep) fail_type = BCEnum::AFT_Value; else my_bot->SetDrakkinHeritage(uvalue); - + if (helper_bot_appearance_fail(c, my_bot, fail_type, "heritage")) return; @@ -5856,7 +5857,7 @@ void bot_subcommand_bot_out_of_combat(Client *c, const Seperator *sep) bot_iter->SetAltOutOfCombatBehavior(!bot_iter->GetAltOutOfCombatBehavior()); else bot_iter->SetAltOutOfCombatBehavior(behavior_state); - + helper_bot_out_of_combat(c, bot_iter); } } @@ -6069,7 +6070,7 @@ void bot_subcommand_bot_spawn(Client *c, const Seperator *sep) c->Message(m_fail, "You can't spawn bots while you are engaged."); return; } - + //if (c->IsEngaged()) { // c->Message(m_fail, "You can't spawn bots while you are engaged."); // return; @@ -6143,7 +6144,7 @@ void bot_subcommand_bot_stance(Client *c, const Seperator *sep) bool current_flag = false; auto bst = EQEmu::constants::stanceUnknown; - + if (!strcasecmp(sep->arg[1], "current")) current_flag = true; else if (sep->IsNumber(1)) { @@ -6268,7 +6269,7 @@ void bot_subcommand_bot_summon(Client *c, const Seperator *sep) void bot_subcommand_bot_tattoo(Client *c, const Seperator *sep) { // TODO: Trouble-shoot model update issue - + if (helper_command_alias_fail(c, "bot_subcommand_bot_tattoo", sep->arg[0], "bottattoo")) return; if (helper_is_help_or_usage(sep->arg[1])) { @@ -6336,7 +6337,7 @@ void bot_subcommand_bot_toggle_archer(Client *c, const Seperator *sep) for (auto bot_iter : sbl) { if (!bot_iter) continue; - + if (toggle_archer) bot_iter->SetBotArcher(!bot_iter->IsBotArcher()); else @@ -6925,7 +6926,7 @@ void bot_subcommand_botgroup_load(Client *c, const Seperator *sep) safe_delete(botgroup_leader); return; } - + Group* group_inst = new Group(botgroup_leader); entity_list.AddGroup(group_inst); @@ -7052,7 +7053,7 @@ void bot_subcommand_circle(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } @@ -7536,7 +7537,7 @@ void bot_subcommand_heal_rotation_create(Client *c, const Seperator *sep) sep->arg[0], CASTING_CYCLE_DEFAULT_INTERVAL_S, CASTING_CYCLE_MINIMUM_INTERVAL_S, CASTING_CYCLE_MAXIMUM_INTERVAL_S); return; } - + std::string interval_arg; std::string fast_heals_arg; std::string adaptive_targeting_arg; @@ -7594,10 +7595,10 @@ void bot_subcommand_heal_rotation_create(Client *c, const Seperator *sep) hr_fast_heals = true; hr_interval_s = atoi(interval_arg.c_str()); } - + if (hr_interval_s < CASTING_CYCLE_MINIMUM_INTERVAL_S || hr_interval_s > CASTING_CYCLE_MAXIMUM_INTERVAL_S) hr_interval_s = CASTING_CYCLE_DEFAULT_INTERVAL_S; - + hr_interval_s *= 1000; // convert to milliseconds for Bot/HealRotation constructor if (!creator_member->CreateHealRotation(hr_interval_s, hr_fast_heals, hr_adaptive_targeting, hr_casting_override)) { @@ -7613,12 +7614,12 @@ void bot_subcommand_heal_rotation_create(Client *c, const Seperator *sep) if (!database.botdb.LoadHealRotation(creator_member, member_list, target_list, load_flag, member_fail, target_fail)) c->Message(m_fail, "%s", BotDatabase::fail::LoadHealRotation()); - + if (!load_flag) { c->Message(m_action, "Successfully added %s as a current member to a new Heal Rotation", creator_member->GetCleanName()); return; } - + if (!member_fail) { MyBots::PopulateSBL_BySpawnedBots(c, sbl); for (auto member_iter : member_list) { @@ -7663,7 +7664,7 @@ void bot_subcommand_heal_rotation_create(Client *c, const Seperator *sep) else { c->Message(m_fail, "%s", BotDatabase::fail::LoadHealRotationTargets()); } - + c->Message(m_action, "Successfully loaded %s's Heal Rotation", creator_member->GetCleanName()); } @@ -8198,7 +8199,7 @@ void bot_subcommand_inventory_list(Client *c, const Seperator *sep) c->Message(m_message, "I need something for my %s (slot %i)", EQEmu::invslot::GetInvPossessionsSlotName(i), i); continue; } - + item = inst->GetItem(); if ((i == EQEmu::invslot::slotPrimary) && item->IsType2HWeapon()) { is2Hweapon = true; @@ -8272,7 +8273,7 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep) c->MessageString(Chat::White, PICK_LORE); return; } - + std::string error_message; if (itm) { c->PushItemOnCursor(*itminst, true); @@ -8517,7 +8518,7 @@ void bot_subcommand_pet_set_type(Client *c, const Seperator *sep) c->Message(m_fail, "You have no spawned Magician bots capable of using this pet type: '%s'", pet_arg.c_str()); return; } - + uint16 reclaim_energy_id = 331; for (auto bot_iter : sbl) { if (!bot_iter) @@ -8588,7 +8589,7 @@ void bot_subcommand_portal(Client *c, const Seperator *sep) cast_success = helper_cast_standard_spell(my_bot, target_mob, local_entry->spell_id); break; } - + helper_no_available_bots(c, my_bot); } diff --git a/zone/bot_database.cpp b/zone/bot_database.cpp index 28b5288e0..67aa709fa 100644 --- a/zone/bot_database.cpp +++ b/zone/bot_database.cpp @@ -24,6 +24,7 @@ #include "../common/eqemu_logsys.h" #include "zonedb.h" +#include "zone_store.h" #include "bot.h" #include "client.h" @@ -192,7 +193,7 @@ bool BotDatabase::QueryBotCount(const uint32 owner_id, uint32& bot_count) return false; if (!results.RowCount()) return true; - + auto row = results.begin(); bot_count = atoi(row[0]); @@ -314,7 +315,7 @@ bool BotDatabase::LoadBotID(const uint32 owner_id, const std::string& bot_name, return false; if (!results.RowCount()) return true; - + auto row = results.begin(); bot_id = atoi(row[0]); @@ -451,7 +452,7 @@ bool BotDatabase::SaveNewBot(Bot* bot_inst, uint32& bot_id) { if (!bot_inst) return false; - + query = StringFormat( "INSERT INTO `bot_data` (" " `owner_id`," @@ -596,7 +597,7 @@ bool BotDatabase::SaveBot(Bot* bot_inst) { if (!bot_inst) return false; - + query = StringFormat( "UPDATE `bot_data`" " SET" @@ -1014,7 +1015,7 @@ bool BotDatabase::LoadTimers(Bot* bot_inst) if (timer_id >= 0 && timer_id < MaxTimer && timer_value < (Timer::GetCurrentTime() + max_value)) bot_timers[timer_id] = timer_value; } - + return true; } @@ -1127,7 +1128,7 @@ bool BotDatabase::QueryInventoryCount(const uint32 bot_id, uint32& item_count) { if (!bot_id) return false; - + query = StringFormat("SELECT COUNT(`inventories_index`) FROM `bot_inventories` WHERE `bot_id` = '%u'", bot_id); auto results = database.QueryDatabase(query); if (!results.Success()) @@ -1173,7 +1174,7 @@ bool BotDatabase::LoadItems(const uint32 bot_id, EQEmu::InventoryProfile& invent return false; if (!results.RowCount()) return true; - + for (auto row = results.begin(); row != results.end(); ++row) { int16 slot_id = atoi(row[0]); if (slot_id < EQEmu::invslot::EQUIPMENT_BEGIN || slot_id > EQEmu::invslot::EQUIPMENT_END) @@ -1281,7 +1282,7 @@ bool BotDatabase::LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint { if (!bot_id || slot_id > EQEmu::invslot::EQUIPMENT_END) return false; - + query = StringFormat("SELECT `item_id` FROM `bot_inventories` WHERE `bot_id` = '%i' AND `slot_id` = '%i' LIMIT 1", bot_id, slot_id); auto results = database.QueryDatabase(query); if (!results.Success()) @@ -1305,11 +1306,11 @@ bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEm if (!item_inst || !item_inst->GetID()) return true; - + uint32 augment_id[EQEmu::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; for (int augment_iter = EQEmu::invaug::SOCKET_BEGIN; augment_iter <= EQEmu::invaug::SOCKET_END; ++augment_iter) augment_id[augment_iter] = item_inst->GetAugmentItemID(augment_iter); - + uint16 item_charges = 0; if (item_inst->GetCharges() >= 0) item_charges = item_inst->GetCharges(); @@ -1400,7 +1401,7 @@ bool BotDatabase::LoadEquipmentColor(const uint32 bot_id, const uint8 material_s int16 slot_id = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot_id); if (slot_id == INVALID_INDEX) return false; - + query = StringFormat("SELECT `inst_color` FROM `bot_inventories` WHERE `bot_id` = '%u' AND `slot_id` = '%u' LIMIT 1", bot_id, slot_id); auto results = database.QueryDatabase(query); if (!results.Success()) @@ -1451,7 +1452,7 @@ bool BotDatabase::LoadPetIndex(const uint32 bot_id, uint32& pet_index) { if (!bot_id) return false; - + query = StringFormat("SELECT `pets_index` FROM `bot_pets` WHERE `bot_id` = '%u' LIMIT 1", bot_id); auto results = database.QueryDatabase(query); if (!results.Success()) @@ -1461,7 +1462,7 @@ bool BotDatabase::LoadPetIndex(const uint32 bot_id, uint32& pet_index) auto row = results.begin(); pet_index = atoi(row[0]); - + return true; } @@ -1479,7 +1480,7 @@ bool BotDatabase::LoadPetSpellID(const uint32 bot_id, uint32& pet_spell_id) auto row = results.begin(); pet_spell_id = atoi(row[0]); - + return true; } @@ -1506,7 +1507,7 @@ bool BotDatabase::LoadPetStats(const uint32 bot_id, std::string& pet_name, uint3 pet_name = row[1]; pet_mana = atoi(row[2]); pet_hp = atoi(row[3]); - + return true; } @@ -1514,7 +1515,7 @@ bool BotDatabase::SavePetStats(const uint32 bot_id, const std::string& pet_name, { if (!bot_id || pet_name.empty() || !pet_spell_id || pet_spell_id > SPDAT_RECORDS) return false; - + if (!DeletePetItems(bot_id)) return false; if (!DeletePetBuffs(bot_id)) @@ -1607,14 +1608,14 @@ bool BotDatabase::LoadPetBuffs(const uint32 bot_id, SpellBuff_Struct* pet_buffs) ++buff_index; } - + return true; } bool BotDatabase::SavePetBuffs(const uint32 bot_id, const SpellBuff_Struct* pet_buffs, bool delete_flag) { // Only use 'delete_flag' if not invoked after a botdb.SavePetStats() call - + if (!bot_id || !pet_buffs) return false; @@ -1701,14 +1702,14 @@ bool BotDatabase::LoadPetItems(const uint32 bot_id, uint32* pet_items) pet_items[item_index] = atoi(row[0]); ++item_index; } - + return true; } bool BotDatabase::SavePetItems(const uint32 bot_id, const uint32* pet_items, bool delete_flag) { // Only use 'delete_flag' if not invoked after a botdb.SavePetStats() call - + if (!bot_id || !pet_items) return false; @@ -1777,7 +1778,7 @@ bool BotDatabase::LoadInspectMessage(const uint32 bot_id, InspectMessage_Struct& return true; memcpy(inspect_message.text, bot_message.c_str(), bot_message.size()); - + return true; } @@ -1785,7 +1786,7 @@ bool BotDatabase::SaveInspectMessage(const uint32 bot_id, const InspectMessage_S { if (!bot_id) return false; - + if (!DeleteInspectMessage(bot_id)) return false; @@ -1825,7 +1826,7 @@ bool BotDatabase::SaveAllInspectMessages(const uint32 owner_id, const InspectMes if (!DeleteAllInspectMessages(owner_id)) return false; - + std::string bot_message = inspect_message.text; if (bot_message.size() > 255) bot_message = bot_message.substr(0, 255); @@ -1907,7 +1908,7 @@ bool BotDatabase::SaveHelmAppearance(const uint32 owner_id, const uint32 bot_id, { if (!owner_id || !bot_id) return false; - + query = StringFormat( "UPDATE `bot_data`" " SET `show_helm` = '%u'" @@ -2025,7 +2026,7 @@ bool BotDatabase::CreateCloneBot(const uint32 owner_id, const uint32 bot_id, con { if (!owner_id || !bot_id || clone_name.empty()) return false; - + query = StringFormat( "INSERT INTO `bot_data`" " (" @@ -2198,7 +2199,7 @@ bool BotDatabase::CreateCloneBotInventory(const uint32 owner_id, const uint32 bo DeleteItems(clone_id); return false; } - + return true; } @@ -2237,7 +2238,7 @@ bool BotDatabase::LoadOwnerOptions(Client *owner) } for (auto row : results) { - + owner->SetBotOption(static_cast(atoul(row[0])), (atoul(row[1]) != 0)); } @@ -2369,7 +2370,7 @@ bool BotDatabase::LoadBotGroupIDByLeaderID(const uint32 leader_id, uint32& botgr auto row = results.begin(); botgroup_id = atoi(row[0]); - + return true; } @@ -2387,7 +2388,7 @@ bool BotDatabase::LoadBotGroupIDByMemberID(const uint32 member_id, uint32& botgr auto row = results.begin(); botgroup_id = atoi(row[0]); - + return true; } @@ -2405,7 +2406,7 @@ bool BotDatabase::LoadLeaderIDByBotGroupName(const std::string& group_name, uint auto row = results.begin(); leader_id = atoi(row[0]); - + return true; } @@ -2423,7 +2424,7 @@ bool BotDatabase::LoadLeaderIDByBotGroupID(const uint32 group_id, uint32& leader auto row = results.begin(); leader_id = atoi(row[0]); - + return true; } @@ -2441,7 +2442,7 @@ bool BotDatabase::LoadBotGroupNameByBotGroupID(const uint32 group_id, std::strin auto row = results.begin(); botgroup_name = row[0]; - + return true; } @@ -2459,7 +2460,7 @@ bool BotDatabase::LoadBotGroupNameByLeaderID(const uint32 leader_id, std::string auto row = results.begin(); botgroup_name = row[0]; - + return true; } @@ -2603,7 +2604,7 @@ bool BotDatabase::LoadBotGroup(const std::string& group_name, std::mapZoneID = content_db.GetZoneID(Spell.teleport_zone); + PendingTranslocateData.zone_id = ts->ZoneID = ZoneID(Spell.teleport_zone); PendingTranslocateData.instance_id = 0; PendingTranslocateData.y = ts->y = Spell.base[0]; PendingTranslocateData.x = ts->x = Spell.base[1]; @@ -5287,7 +5288,7 @@ void Client::SetStartZone(uint32 zoneid, float x, float y, float z) } // check to make sure the zone is valid - const char *target_zone_name = content_db.GetZoneName(zoneid); + const char *target_zone_name = ZoneName(zoneid); if(target_zone_name == nullptr) return; @@ -5297,7 +5298,7 @@ void Client::SetStartZone(uint32 zoneid, float x, float y, float z) } if (x == 0 && y == 0 && z == 0) { - content_db.GetSafePoints(m_pp.binds[4].zoneId, 0, &m_pp.binds[4].x, &m_pp.binds[4].y, &m_pp.binds[4].z); + content_db.GetSafePoints(ZoneName(m_pp.binds[4].zoneId), 0, &m_pp.binds[4].x, &m_pp.binds[4].y, &m_pp.binds[4].z); } else { m_pp.binds[4].x = x; @@ -9298,7 +9299,7 @@ void Client::SetBotOption(BotOwnerOption boo, bool flag) { void Client::SendToGuildHall() { std::string zone_short_name = "guildhall"; - uint32 zone_id = content_db.GetZoneID(zone_short_name.c_str()); + uint32 zone_id = ZoneID(zone_short_name.c_str()); if (zone_id == 0) { return; } diff --git a/zone/client.h b/zone/client.h index 960656175..6a7a68b51 100644 --- a/zone/client.h +++ b/zone/client.h @@ -58,6 +58,7 @@ namespace EQEmu #include "questmgr.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" #ifdef _WINDOWS // since windows defines these within windef.h (which windows.h include) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 05a51f8a5..f152bf61c 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -790,7 +790,7 @@ void Client::CompleteConnect() //enforce some rules.. if (!CanBeInZone()) { LogDebug("[CLIENT] Kicking char from zone, not allowed here"); - GoToSafeCoords(content_db.GetZoneID("arena"), 0); + GoToSafeCoords(ZoneID("arena"), 0); return; } @@ -6419,7 +6419,7 @@ void Client::Handle_OP_GMZoneRequest(const EQApplicationPacket *app) uint16 zid = gmzr->zone_id; if (gmzr->zone_id == 0) zid = zonesummon_id; - const char * zname = content_db.GetZoneName(zid); + const char * zname = ZoneName(zid); if (zname == nullptr) tarzone[0] = 0; else @@ -12441,7 +12441,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) { // if the character has a start city, don't let them use the command if (m_pp.binds[4].zoneId != 0 && m_pp.binds[4].zoneId != 189) { - Message(Chat::Yellow, "Your home city has already been set.", m_pp.binds[4].zoneId, content_db.GetZoneName(m_pp.binds[4].zoneId)); + Message(Chat::Yellow, "Your home city has already been set.", m_pp.binds[4].zoneId, ZoneName(m_pp.binds[4].zoneId)); return; } @@ -12507,7 +12507,7 @@ void Client::Handle_OP_SetStartCity(const EQApplicationPacket *app) zoneid = atoi(row[0]); char* name = nullptr; - content_db.GetZoneLongName(content_db.GetZoneName(zoneid), &name); + content_db.GetZoneLongName(ZoneName(zoneid), &name); Message(Chat::Yellow, "%d - %s", zoneid, name); } diff --git a/zone/client_process.cpp b/zone/client_process.cpp index b380ae497..a63174705 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -53,6 +53,7 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" extern QueryServ* QServ; extern Zone* zone; @@ -129,7 +130,7 @@ bool Client::Process() { CheckManaEndUpdate(); if (dead && dead_timer.Check()) { - database.MoveCharacterToZone(GetName(), content_db.GetZoneName(m_pp.binds[0].zoneId)); + database.MoveCharacterToZone(GetName(), m_pp.binds[0].zoneId); m_pp.zone_id = m_pp.binds[0].zoneId; m_pp.zoneInstance = m_pp.binds[0].instance_id; @@ -2087,7 +2088,7 @@ void Client::HandleRespawnFromHover(uint32 Option) m_pp.zone_id = chosen->zone_id; m_pp.zoneInstance = chosen->instance_id; - database.MoveCharacterToZone(CharacterID(), content_db.GetZoneName(chosen->zone_id)); + database.MoveCharacterToZone(CharacterID(), chosen->zone_id); Save(); diff --git a/zone/command.cpp b/zone/command.cpp index 317667168..634f01206 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -1171,7 +1171,7 @@ void command_zone(Client *c, const Seperator *sep) return; } - zoneid = content_db.GetZoneID(sep->arg[1]); + zoneid = ZoneID(sep->arg[1]); if(zoneid == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); return; @@ -1306,7 +1306,7 @@ void command_peqzone(Client *c, const Seperator *sep) return; } else { - zoneid = content_db.GetZoneID(sep->arg[1]); + zoneid = ZoneID(sep->arg[1]); destzone = content_db.GetPEQZone(zoneid, 0); if(zoneid == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); @@ -1344,7 +1344,7 @@ void command_movechar(Client *c, const Seperator *sep) if (tmp) { if (c->Admin() >= commandMovecharSelfOnly || tmp == c->AccountID()) - if (!database.MoveCharacterToZone((char*) sep->arg[1], (char*) sep->arg[2])) + if (!database.MoveCharacterToZone((char*) sep->arg[1], ZoneID(sep->arg[2]))) c->Message(Chat::White, "Character Move Failed!"); else c->Message(Chat::White, "Character has been moved."); @@ -2105,7 +2105,7 @@ void command_zheader(Client *c, const Seperator *sep) if(sep->arg[1][0]==0) { c->Message(Chat::White, "Usage: #zheader "); } - else if(content_db.GetZoneID(sep->argplus[1])==0) + else if(ZoneID(sep->argplus[1])==0) c->Message(Chat::White, "Invalid Zone Name: %s", sep->argplus[1]); else { @@ -4290,7 +4290,7 @@ void command_zoneshutdown(Client *c, const Seperator *sep) if (sep->arg[1][0] >= '0' && sep->arg[1][0] <= '9') s->ZoneServerID = atoi(sep->arg[1]); else - s->zoneid = content_db.GetZoneID(sep->arg[1]); + s->zoneid = ZoneID(sep->arg[1]); worldserver.SendPacket(pack); safe_delete(pack); } @@ -4308,7 +4308,7 @@ void command_zonebootup(Client *c, const Seperator *sep) ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *) pack->pBuffer; s->ZoneServerID = atoi(sep->arg[1]); strcpy(s->adminname, c->GetName()); - s->zoneid = content_db.GetZoneID(sep->arg[2]); + s->zoneid = ZoneID(sep->arg[2]); s->makestatic = (bool) (strcasecmp(sep->arg[3], "static") == 0); worldserver.SendPacket(pack); safe_delete(pack); @@ -4491,7 +4491,7 @@ void command_zonelock(Client *c, const Seperator *sep) worldserver.SendPacket(pack); } else if (strcasecmp(sep->arg[1], "lock") == 0 && c->Admin() >= commandLockZones) { - uint16 tmp = content_db.GetZoneID(sep->arg[2]); + uint16 tmp = ZoneID(sep->arg[2]); if (tmp) { s->op = 1; s->zoneID = tmp; @@ -4501,7 +4501,7 @@ void command_zonelock(Client *c, const Seperator *sep) c->Message(Chat::White, "Usage: #zonelock lock [zonename]"); } else if (strcasecmp(sep->arg[1], "unlock") == 0 && c->Admin() >= commandLockZones) { - uint16 tmp = content_db.GetZoneID(sep->arg[2]); + uint16 tmp = ZoneID(sep->arg[2]); if (tmp) { s->op = 2; s->zoneID = tmp; @@ -4908,7 +4908,7 @@ void command_gmzone(Client *c, const Seperator *sep) const char *zone_short_name = sep->arg[1]; auto zone_version = static_cast(sep->arg[2] ? atoi(sep->arg[2]) : 0); std::string identifier = "gmzone"; - uint32 zone_id = content_db.GetZoneID(zone_short_name); + uint32 zone_id = ZoneID(zone_short_name); uint32 duration = 100000000; uint16 instance_id = 0; @@ -9206,7 +9206,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = content_db.GetZoneID(sep->arg[2]); + zoneid = ZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9231,7 +9231,7 @@ void command_flagedit(Client *c, const Seperator *sep) { return; } - c->Message(Chat::Yellow, "Success! Zone %s now requires a flag, named %s", content_db.GetZoneName(zoneid), flag_name); + c->Message(Chat::Yellow, "Success! Zone %s now requires a flag, named %s", ZoneName(zoneid), flag_name); return; } @@ -9240,7 +9240,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = content_db.GetZoneID(sep->arg[2]); + zoneid = ZoneID(sep->arg[2]); } } @@ -9258,7 +9258,7 @@ void command_flagedit(Client *c, const Seperator *sep) { return; } - c->Message(Chat::Yellow, "Success! Zone %s no longer requires a flag.", content_db.GetZoneName(zoneid)); + c->Message(Chat::Yellow, "Success! Zone %s no longer requires a flag.", ZoneName(zoneid)); return; } @@ -9282,7 +9282,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = content_db.GetZoneID(sep->arg[2]); + zoneid = ZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9305,7 +9305,7 @@ void command_flagedit(Client *c, const Seperator *sep) { if(sep->arg[2][0] != '\0') { zoneid = atoi(sep->arg[2]); if(zoneid < 1) { - zoneid = content_db.GetZoneID(sep->arg[2]); + zoneid = ZoneID(sep->arg[2]); } } if(zoneid < 1) { @@ -9770,7 +9770,7 @@ void command_setgraveyard(Client *c, const Seperator *sep) return; } - zoneid = content_db.GetZoneID(sep->arg[1]); + zoneid = ZoneID(sep->arg[1]); if(zoneid > 0) { graveyard_id = content_db.CreateGraveyardRecord(zoneid, t->GetPosition()); @@ -9806,7 +9806,7 @@ void command_deletegraveyard(Client *c, const Seperator *sep) return; } - zoneid = content_db.GetZoneID(sep->arg[1]); + zoneid = ZoneID(sep->arg[1]); graveyard_id = content_db.GetZoneGraveyardID(zoneid, 0); if(zoneid > 0 && graveyard_id > 0) { @@ -10211,12 +10211,12 @@ void command_instance(Client *c, const Seperator *sep) } else { - zone_id = content_db.GetZoneID(sep->arg[2]); + zone_id = ZoneID(sep->arg[2]); } uint32 version = atoi(sep->arg[3]); uint32 duration = atoi(sep->arg[4]); - zn = content_db.GetZoneName(zone_id); + zn = ZoneName(zone_id); if(!zn) { @@ -10371,7 +10371,7 @@ void command_setstartzone(Client *c, const Seperator *sep) startzone = 0; } else { - startzone = content_db.GetZoneID(sep->arg[1]); + startzone = ZoneID(sep->arg[1]); if(startzone == 0) { c->Message(Chat::White, "Unable to locate zone '%s'", sep->arg[1]); return; diff --git a/zone/corpse.cpp b/zone/corpse.cpp index 9ab4fed0b..d6d48a724 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -141,7 +141,7 @@ Corpse* Corpse::LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std: pc->consented_guild_id = guild_consent_id; pc->UpdateEquipmentLight(); // itemlist populated above..need to determine actual values - + safe_delete_array(pcs); return pc; @@ -339,7 +339,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( // TODO soulbound items need not be added to corpse, but they need // to go into the regular slots on the player, out of bags std::list removed_list; - + // ideally, we would start at invslot::slotGeneral1 and progress to invslot::slotCursor.. // ..then regress and process invslot::EQUIPMENT_BEGIN through invslot::EQUIPMENT_END... // without additional work to database loading of player corpses, this order is not @@ -837,7 +837,7 @@ bool Corpse::Process() { spc->zone_id = zone->graveyard_zoneid(); worldserver.SendPacket(pack); safe_delete(pack); - LogDebug("Moved [{}] player corpse to the designated graveyard in zone [{}]", this->GetName(), content_db.GetZoneName(zone->graveyard_zoneid())); + LogDebug("Moved [{}] player corpse to the designated graveyard in zone [{}]", this->GetName(), ZoneName(zone->graveyard_zoneid())); corpse_db_id = 0; } @@ -941,7 +941,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a SendLootReqErrorPacket(client, LootResponse::TooFar); return; } - + if (being_looted_by != 0xFFFFFFFF && being_looted_by != client->GetID()) { SendLootReqErrorPacket(client, LootResponse::SomeoneElse); return; @@ -1078,16 +1078,16 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a auto loot_slot = EQEmu::invslot::CORPSE_BEGIN; auto corpse_mask = client->GetInv().GetLookup()->CorpseBitmask; - + for (auto item_data : itemlist) { // every loot session must either set all items' lootslots to 'invslot::SLOT_INVALID' // or to a valid enumerated client-versioned corpse slot (lootslot is not equip_slot) item_data->lootslot = 0xFFFF; - + // align server and client corpse slot mappings so translators can function properly while (loot_slot <= EQEmu::invslot::CORPSE_END && (((uint64)1 << loot_slot) & corpse_mask) == 0) ++loot_slot; - + if (loot_slot > EQEmu::invslot::CORPSE_END) continue; @@ -1098,7 +1098,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a if (item_data->equip_slot < EQEmu::invslot::POSSESSIONS_BEGIN || item_data->equip_slot > EQEmu::invslot::POSSESSIONS_END) continue; } - + const auto *item = database.GetItem(item_data->item_id); auto inst = database.CreateItem( item, @@ -1121,7 +1121,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a client->SendItemPacket(loot_slot, inst, ItemPacketLoot); safe_delete(inst); - + item_data->lootslot = loot_slot++; } @@ -1574,21 +1574,21 @@ void Corpse::UpdateEquipmentLight() for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { if ((*iter)->equip_slot < EQEmu::invslot::EQUIPMENT_BEGIN || (*iter)->equip_slot > EQEmu::invslot::EQUIPMENT_END) { continue; } if ((*iter)->equip_slot == EQEmu::invslot::slotAmmo) { continue; } - + auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } - + if (EQEmu::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQEmu::lightsource::LightEquipment])) m_Light.Type[EQEmu::lightsource::LightEquipment] = item->Light; } - + uint8 general_light_type = 0; for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { if ((*iter)->equip_slot < EQEmu::invslot::GENERAL_BEGIN || (*iter)->equip_slot > EQEmu::invslot::GENERAL_END) { continue; } - + auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } - + if (!item->IsClassCommon()) { continue; } if (item->Light < 9 || item->Light > 13) { continue; } diff --git a/zone/data_bucket.cpp b/zone/data_bucket.cpp index 1ccb21953..b0d45080b 100644 --- a/zone/data_bucket.cpp +++ b/zone/data_bucket.cpp @@ -2,6 +2,7 @@ #include #include "../common/string_util.h" #include "zonedb.h" +#include "zone_store.h" #include #include #include @@ -172,4 +173,4 @@ uint32 DataBucket::ParseStringTimeToInt(std::string time_string) duration = unit * 31556926; return duration; -} \ No newline at end of file +} diff --git a/zone/doors.cpp b/zone/doors.cpp index 82521aac2..9fb5ea456 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -28,6 +28,7 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include @@ -452,7 +453,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { if (!disable_add_to_key_ring) { sender->KeyRingAdd(player_key); } - if (content_db.GetZoneID(destination_zone_name) == zone->GetZoneID()) { + if (ZoneID(destination_zone_name) == zone->GetZoneID()) { sender->MovePC( zone->GetZoneID(), zone->GetInstanceID(), @@ -463,7 +464,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { ); } else { sender->MovePC( - content_db.GetZoneID(destination_zone_name), + ZoneID(destination_zone_name), static_cast(destination_instance_id), m_Destination.x, m_Destination.y, @@ -474,7 +475,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { } if ((!IsDoorOpen() || open_type == 58) && (!required_key_item)) { - if (content_db.GetZoneID(destination_zone_name) == zone->GetZoneID()) { + if (ZoneID(destination_zone_name) == zone->GetZoneID()) { sender->MovePC( zone->GetZoneID(), zone->GetInstanceID(), @@ -485,7 +486,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { ); } else { sender->MovePC( - content_db.GetZoneID(destination_zone_name), + ZoneID(destination_zone_name), static_cast(this->destination_instance_id), m_Destination.x, m_Destination.y, diff --git a/zone/effects.cpp b/zone/effects.cpp index 7e2ecdbc7..1cc708463 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -28,6 +28,7 @@ #include "string_ids.h" #include "worldserver.h" #include "zonedb.h" +#include "zone_store.h" #include "position.h" float Mob::GetActSpellRange(uint16 spell_id, float range, bool IsBard) @@ -554,7 +555,7 @@ int Client::GetDiscSlotBySpellID(int32 spellid) if(m_pp.disciplines.values[i] == spellid) return i; } - + return -1; } diff --git a/zone/forage.cpp b/zone/forage.cpp index 6d24f50a8..eb198afba 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -30,6 +30,7 @@ #include "titles.h" #include "water_map.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include diff --git a/zone/guild_mgr.cpp b/zone/guild_mgr.cpp index 200f67d90..4fbb9f10d 100644 --- a/zone/guild_mgr.cpp +++ b/zone/guild_mgr.cpp @@ -24,6 +24,7 @@ #include "guild_mgr.h" #include "worldserver.h" #include "zonedb.h" +#include "zone_store.h" ZoneGuildManager guild_mgr; GuildBankManager *GuildBanks; diff --git a/zone/inventory.cpp b/zone/inventory.cpp index 3ee86df47..3d1b2b331 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -23,6 +23,7 @@ #include "quest_parser_collection.h" #include "worldserver.h" #include "zonedb.h" +#include "zone_store.h" extern WorldServer worldserver; @@ -231,7 +232,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, bool enforcewear = RuleB(Inventory, EnforceAugmentWear); bool enforcerestr = RuleB(Inventory, EnforceAugmentRestriction); bool enforceusable = RuleB(Inventory, EnforceAugmentUsability); - + for (int iter = EQEmu::invaug::SOCKET_BEGIN; iter <= EQEmu::invaug::SOCKET_END; ++iter) { const EQEmu::ItemData* augtest = database.GetItem(augments[iter]); @@ -249,7 +250,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, if(CheckLoreConflict(augtest)) { // DuplicateLoreMessage(augtest->ID); Message(Chat::Red, "You already have a lore %s (%u) in your inventory.", augtest->Name, augtest->ID); - + return false; } // check that augment is an actual augment @@ -257,7 +258,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, Message(Chat::Red, "%s (%u) (Aug%i) is not an actual augment.", augtest->Name, augtest->ID, iter + 1); LogInventory("Player [{}] on account [{}] attempted to use a non-augment item (Aug[{}]) as an augment.\n(Item: [{}], Aug1: [{}], Aug2: [{}], Aug3: [{}], Aug4: [{}], Aug5: [{}], Aug6: [{}])\n", GetName(), account_name, item->ID, (iter + 1), aug1, aug2, aug3, aug4, aug5, aug6); - + return false; } @@ -504,7 +505,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, // validation passed..so, set the charges and create the actual item // if the item is stackable and the charge amount is -1 or 0 then set to 1 charge. - // removed && item->MaxCharges == 0 if -1 or 0 was passed max charges is irrelevant + // removed && item->MaxCharges == 0 if -1 or 0 was passed max charges is irrelevant if(charges <= 0 && item->Stackable) charges = 1; @@ -534,7 +535,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, // attune item if(attuned && inst->GetItem()->Attuneable) inst->SetAttuned(true); - + inst->SetOrnamentIcon(ornament_icon); inst->SetOrnamentationIDFile(ornament_idfile); inst->SetOrnamentHeroModel(ornament_hero_model); @@ -584,7 +585,7 @@ void Client::DropItem(int16 slot_id, bool recurse) { LogInventory("[{}] (char_id: [{}]) Attempting to drop item from slot [{}] on the ground", GetCleanName(), CharacterID(), slot_id); - + if(GetInv().CheckNoDrop(slot_id, recurse) && RuleI(World, FVNoDropFlag) == 0 || RuleI(Character, MinStatusForNoDropExemptions) < Admin() && RuleI(World, FVNoDropFlag) == 2) { @@ -1016,7 +1017,7 @@ bool Client::PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, SendItemPacket(slot_id, &inst, ((slot_id == EQEmu::invslot::slotCursor) ? ItemPacketLimbo : ItemPacketTrade)); //SendWearChange(EQEmu::InventoryProfile::CalcMaterialFromSlot(slot_id)); } - + if (slot_id == EQEmu::invslot::slotCursor) { auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); return database.SaveCursor(this->CharacterID(), s, e); @@ -1054,7 +1055,7 @@ void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, else { SendLootItemInPacket(&inst, slot_id); } - + if (bag_item_data) { for (int index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { if (bag_item_data[index] == nullptr) @@ -1168,7 +1169,7 @@ bool Client::AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn, bo if (worn_slot_material != EQEmu::textures::materialInvalid) { SendWearChange(worn_slot_material); } - + parse->EventItem(EVENT_EQUIP_ITEM, this, &inst, nullptr, "", i); return true; } @@ -1245,7 +1246,7 @@ bool MakeItemLink(char* &ret_link, const ItemData *item, uint32 aug0, uint32 aug //int hash = GetItemLinkHash(inst); //eventually this will work (currently crashes zone), but for now we'll skip the extra overhead int hash = NOT_USED; - + // Tested with UF and RoF..there appears to be a problem with using non-augment arguments below... // Currently, enabling them causes misalignments in what the client expects. I haven't looked // into it further to determine the cause..but, the function is setup to accept the parameters. @@ -1935,7 +1936,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { fail_message = "Your class, deity and/or race may not equip that item."; else if (fail_state == EQEmu::InventoryProfile::swapLevel) fail_message = "You are not sufficient level to use this item."; - + if (fail_message) Message(Chat::Red, "%s", fail_message); @@ -2203,7 +2204,7 @@ void Client::DyeArmor(EQEmu::TintProfile* dye){ EQEmu::ItemInstance* inst = this->m_inv.GetItem(slot2); if(inst){ uint32 armor_color = ((uint32)dye->Slot[i].Red << 16) | ((uint32)dye->Slot[i].Green << 8) | ((uint32)dye->Slot[i].Blue); - inst->SetColor(armor_color); + inst->SetColor(armor_color); database.SaveCharacterMaterialColor(this->CharacterID(), i, armor_color); database.SaveInventory(CharacterID(),inst,slot2); if(dye->Slot[i].UseTint) @@ -2225,7 +2226,7 @@ void Client::DyeArmor(EQEmu::TintProfile* dye){ auto outapp = new EQApplicationPacket(OP_Dye, 0); QueuePacket(outapp); safe_delete(outapp); - + } #if 0 @@ -2318,7 +2319,7 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { for (x = EQEmu::invbag::CURSOR_BAG_BEGIN; x <= EQEmu::invbag::CURSOR_BAG_END; ++x) { if (num >= amt) break; - + TempItem = nullptr; ins = GetInv().GetItem(x); if (ins) @@ -2343,7 +2344,7 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { TempItem = ins->GetItem(); if (TempItem && TempItem->ID != type) continue; - + if (ins->GetCharges() < amt) { amt -= ins->GetCharges(); DeleteItemInInventory(x, amt, true); @@ -2534,7 +2535,7 @@ void Client::DisenchantSummonedBags(bool client_update) if (!new_item) { continue; } auto new_inst = database.CreateBaseItem(new_item); if (!new_inst) { continue; } - + if (CopyBagContents(new_inst, inst)) { LogInventory("Disenchant Summoned Bags: Replacing [{}] with [{}] in slot [{}]", inst->GetItem()->Name, new_inst->GetItem()->Name, slot_id); PutItemInInventory(slot_id, *new_inst, client_update); @@ -2708,7 +2709,7 @@ void Client::RemoveDuplicateLore(bool client_update) } safe_delete(inst); } - + for (auto slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; @@ -3002,7 +3003,7 @@ void Client::CreateBandolier(const EQApplicationPacket *app) LogInventory("Char: [{}] Creating Bandolier Set [{}], Set Name: [{}]", GetName(), bs->Number, bs->Name); strcpy(m_pp.bandoliers[bs->Number].Name, bs->Name); - const EQEmu::ItemInstance* InvItem = nullptr; + const EQEmu::ItemInstance* InvItem = nullptr; const EQEmu::ItemData *BaseItem = nullptr; int16 WeaponSlot = 0; @@ -3033,7 +3034,7 @@ void Client::RemoveBandolier(const EQApplicationPacket *app) memset(m_pp.bandoliers[bds->Number].Name, 0, 32); for(int i = bandolierPrimary; i <= bandolierAmmo; i++) { m_pp.bandoliers[bds->Number].Items[i].ID = 0; - m_pp.bandoliers[bds->Number].Items[i].Icon = 0; + m_pp.bandoliers[bds->Number].Items[i].Icon = 0; } database.DeleteCharacterBandolier(this->CharacterID(), bds->Number); } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index 666b3d55e..c2a7b868f 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -26,6 +26,7 @@ #include "mob.h" #include "npc.h" #include "zonedb.h" +#include "zone_store.h" #include "global_loot_manager.h" #include "../common/repositories/criteria/content_filter_criteria.h" diff --git a/zone/main.cpp b/zone/main.cpp index b44ee3421..a0ab30ff2 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -56,6 +56,7 @@ #include "bot_command.h" #endif #include "zonedb.h" +#include "zone_store.h" #include "zone_config.h" #include "titles.h" #include "guild_mgr.h" @@ -318,11 +319,7 @@ int main(int argc, char** argv) { LogInfo("Loading zone names"); - // Load to both context for now... this needs to be cleaned up as this has always been cludgy - content_db.LoadZoneNames(); - database.zonename_array = content_db.zonename_array; - - zone_store.LoadZonesStore(); + zone_store.LoadZones(); LogInfo("Loading items"); if (!database.LoadItems(hotfix_name)) { @@ -474,7 +471,7 @@ int main(int argc, char** argv) { } else if (!Zone::Bootup(ZoneID(zone_name), instance_id, true)) { LogError("Zone Bootup failed :: Zone::Bootup"); - zone = 0; + zone = nullptr; } //register all the patches we have avaliable with the stream identifier. diff --git a/zone/mob_appearance.cpp b/zone/mob_appearance.cpp index fe4e07eee..bf049fed6 100644 --- a/zone/mob_appearance.cpp +++ b/zone/mob_appearance.cpp @@ -27,6 +27,7 @@ #include "mob.h" #include "quest_parser_collection.h" #include "zonedb.h" +#include "zone_store.h" #ifdef BOTS #include "bot.h" @@ -545,4 +546,4 @@ void Mob::WearChange(uint8 material_slot, uint16 texture, uint32 color, uint32 h entity_list.QueueClients(this, outapp); safe_delete(outapp); -} \ No newline at end of file +} diff --git a/zone/mod_functions_base.cpp b/zone/mod_functions_base.cpp index e9e172997..477050534 100644 --- a/zone/mod_functions_base.cpp +++ b/zone/mod_functions_base.cpp @@ -8,6 +8,7 @@ #include "zone.h" #include "spawngroup.h" #include "zonedb.h" +#include "zone_store.h" #include "npc.h" #include "mob.h" #include "client.h" diff --git a/zone/npc.h b/zone/npc.h index 7c108b4b7..762a37d21 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -23,6 +23,7 @@ #include "mob.h" #include "qglobals.h" #include "zonedb.h" +#include "zone_store.h" #include "zonedump.h" #include @@ -512,7 +513,7 @@ protected: uint32 npc_spells_id; uint8 casting_spell_AIindex; - + uint32* pDontCastBefore_casting_spell; std::vector AIspells; bool HasAISpell; diff --git a/zone/object.cpp b/zone/object.cpp index 21ce0721a..2a76d9894 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -26,6 +26,7 @@ #include "quest_parser_collection.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include diff --git a/zone/petitions.h b/zone/petitions.h index 057169d45..4a6e9d2ff 100644 --- a/zone/petitions.h +++ b/zone/petitions.h @@ -25,6 +25,7 @@ #include "client.h" #include "zonedb.h" +#include "zone_store.h" class Client; diff --git a/zone/pets.cpp b/zone/pets.cpp index 6a5ae12ca..707bf8464 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -27,6 +27,7 @@ #include "pets.h" #include "zonedb.h" +#include "zone_store.h" #include @@ -230,7 +231,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, memcpy(npc_type, base, sizeof(NPCType)); // If pet power is set to -1 in the DB, use stat scaling - if ((this->IsClient() + if ((this->IsClient() #ifdef BOTS || this->IsBot() #endif @@ -620,7 +621,7 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { if (item2) { bool noDrop=(item2->NoDrop == 0); // Field is reverse logic - bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && + bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(this) && GetPetType() <= petOther); if (!noDrop || petCanHaveNoDrop) { diff --git a/zone/quest.h b/zone/quest.h index 65a4b2e1e..9bfad6991 100644 --- a/zone/quest.h +++ b/zone/quest.h @@ -19,6 +19,7 @@ #define __QUEST_H__ #include "zonedb.h" +#include "zone_store.h" typedef struct _tag_quest_entry{ char *m_pQuestName; diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 6929e695d..3dcd70e47 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -35,6 +35,7 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" #include #include @@ -397,7 +398,7 @@ void QuestManager::Zone(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = content_db.GetZoneID(zone_name); + ztz->requested_zone_id = ZoneID(zone_name); ztz->admin = initiator->Admin(); strcpy(ztz->name, initiator->GetName()); ztz->guild_id = initiator->GuildID(); @@ -639,9 +640,9 @@ void QuestManager::resumetimer(const char *timer_name) { bool QuestManager::ispausedtimer(const char *timer_name) { QuestManagerCurrentQuestVars(); - + std::list::iterator pcur = PTimerList.begin(), pend; - + pend = PTimerList.end(); while (pcur != pend) { @@ -1017,7 +1018,7 @@ uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) { ((spell_id >= 0 && spell_id < SPDAT_RECORDS) ? spells[spell_id].name : "Out-of-range"), spell_id ); - + break; } if (spell_id < 0 || spell_id >= SPDAT_RECORDS) { @@ -1940,7 +1941,7 @@ int QuestManager::getplayercorpsecount(uint32 char_id) { return database.CountCharacterCorpses(char_id); } return 0; - + } int QuestManager::getplayercorpsecountbyzoneid(uint32 char_id, uint32 zone_id) { @@ -2628,7 +2629,7 @@ int QuestManager::countitem(uint32 item_id) { { EQEmu::invslot::SHARED_BANK_BEGIN, EQEmu::invslot::SHARED_BANK_END }, { EQEmu::invbag::SHARED_BANK_BAGS_BEGIN, EQEmu::invbag::SHARED_BANK_BAGS_END }, }; - const size_t size = sizeof(slots) / sizeof(slots[0]); + const size_t size = sizeof(slots) / sizeof(slots[0]); for (int slot_index = 0; slot_index < size; ++slot_index) { for (int slot_id = slots[slot_index][0]; slot_id <= slots[slot_index][1]; ++slot_id) { item = initiator->GetInv().GetItem(slot_id); @@ -2753,7 +2754,7 @@ uint16 QuestManager::CreateInstance(const char *zone, int16 version, uint32 dura QuestManagerCurrentQuestVars(); if(initiator) { - uint32 zone_id = content_db.GetZoneID(zone); + uint32 zone_id = ZoneID(zone); if(zone_id == 0) return 0; @@ -2806,10 +2807,10 @@ uint32 QuestManager::GetInstanceTimer() { uint32 QuestManager::GetInstanceTimerByID(uint16 instance_id) { if (instance_id == 0) return 0; - + std::string query = StringFormat("SELECT ((start_time + duration) - UNIX_TIMESTAMP()) AS `remaining` FROM `instance_list` WHERE `id` = %lu", (unsigned long)instance_id); auto results = database.QueryDatabase(query); - + if (results.Success()) { auto row = results.begin(); uint32 timer = atoi(row[0]); @@ -2823,13 +2824,13 @@ uint16 QuestManager::GetInstanceID(const char *zone, int16 version) QuestManagerCurrentQuestVars(); if (initiator) { - return database.GetInstanceID(zone, initiator->CharacterID(), version); + return database.GetInstanceID(ZoneID(zone), initiator->CharacterID(), version); } return 0; } uint16 QuestManager::GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id) { - return database.GetInstanceID(zone, char_id, version); + return database.GetInstanceID(ZoneID(zone), char_id, version); } void QuestManager::AssignToInstance(uint16 instance_id) @@ -3181,7 +3182,7 @@ uint16 QuestManager::CreateDoor(const char* model, float x, float y, float z, fl } int32 QuestManager::GetZoneID(const char *zone) { - return static_cast(content_db.GetZoneID(zone)); + return static_cast(ZoneID(zone)); } const char* QuestManager::GetZoneLongName(const char *zone) { diff --git a/zone/spawn2.cpp b/zone/spawn2.cpp index 1272e1487..37b8cc943 100644 --- a/zone/spawn2.cpp +++ b/zone/spawn2.cpp @@ -26,6 +26,7 @@ #include "worldserver.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" extern EntityList entity_list; extern Zone* zone; @@ -461,7 +462,7 @@ bool ZoneDatabase::PopulateZoneSpawnListClose(uint32 zoneid, LinkedList } } - const char *zone_name = content_db.GetZoneName(zoneid); + const char *zone_name = ZoneName(zoneid); std::string query = StringFormat( "SELECT " "id, " @@ -565,7 +566,7 @@ bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList &spa } } - const char *zone_name = content_db.GetZoneName(zoneid); + const char *zone_name = ZoneName(zoneid); std::string query = StringFormat( "SELECT " "id, " @@ -1217,7 +1218,7 @@ void SpawnConditionManager::SetCondition(const char *zone_short, uint32 instance auto pack = new ServerPacket(ServerOP_SpawnCondition, sizeof(ServerSpawnCondition_Struct)); ServerSpawnCondition_Struct* ssc = (ServerSpawnCondition_Struct*)pack->pBuffer; - ssc->zoneID = content_db.GetZoneID(zone_short); + ssc->zoneID = ZoneID(zone_short); ssc->instanceID = instance_id; ssc->condition_id = condition_id; ssc->value = new_value; @@ -1349,7 +1350,7 @@ void SpawnConditionManager::ToggleEvent(uint32 event_id, bool enabled, bool stri auto pack = new ServerPacket(ServerOP_SpawnEvent, sizeof(ServerSpawnEvent_Struct)); ServerSpawnEvent_Struct* sse = (ServerSpawnEvent_Struct*)pack->pBuffer; - sse->zoneID = content_db.GetZoneID(zone_short_name.c_str()); + sse->zoneID = ZoneID(zone_short_name.c_str()); sse->event_id = event_id; worldserver.SendPacket(pack); diff --git a/zone/spawngroup.cpp b/zone/spawngroup.cpp index 49aeea35b..97f3dab9a 100644 --- a/zone/spawngroup.cpp +++ b/zone/spawngroup.cpp @@ -24,6 +24,7 @@ #include "spawngroup.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/criteria/content_filter_criteria.h" extern EntityList entity_list; diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 4e4488b39..88f1fa6f8 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -31,6 +31,7 @@ Copyright (C) 2001-2008 EQEMu Development Team (http://eqemulator.net) #include "../common/string_util.h" #include "../common/say_link.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/goallists_repository.h" #include "client.h" #include "entity.h" diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 71374bc75..a5798236c 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -33,6 +33,7 @@ #include "string_ids.h" #include "titles.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/character_recipe_list_repository.h" #include "../common/repositories/tradeskill_recipe_repository.h" diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index e7c5ac85f..0f4cddcfc 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -583,7 +583,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_ZonePlayer: { ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(szp->name); - printf("Zoning %s to %s(%u) - %u\n", client != nullptr ? client->GetCleanName() : "Unknown", szp->zone, content_db.GetZoneID(szp->zone), szp->instance_id); + printf("Zoning %s to %s(%u) - %u\n", client != nullptr ? client->GetCleanName() : "Unknown", szp->zone, ZoneID(szp->zone), szp->instance_id); if (client != 0) { if (strcasecmp(szp->adminname, szp->name) == 0) client->Message(Chat::White, "Zoning to: %s", szp->zone); @@ -593,17 +593,17 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) SendEmoteMessage(szp->adminname, 0, 0, "Summoning %s to %s %1.1f, %1.1f, %1.1f", szp->name, szp->zone, szp->x_pos, szp->y_pos, szp->z_pos); } if (!szp->instance_id) { - client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(ZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } else { - if (database.GetInstanceID(client->CharacterID(), content_db.GetZoneID(szp->zone)) == 0) { + if (database.GetInstanceID(client->CharacterID(), ZoneID(szp->zone)) == 0) { client->AssignToInstance(szp->instance_id); - client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(ZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } else { - client->RemoveFromInstance(database.GetInstanceID(client->CharacterID(), content_db.GetZoneID(szp->zone))); + client->RemoveFromInstance(database.GetInstanceID(client->CharacterID(), ZoneID(szp->zone))); client->AssignToInstance(szp->instance_id); - client->MovePC(content_db.GetZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); + client->MovePC(ZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); } } } diff --git a/zone/zone.cpp b/zone/zone.cpp index 6c3b57950..025ea7e5d 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -84,7 +84,7 @@ Zone* zone = 0; void UpdateWindowTitle(char* iNewTitle); bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { - const char* zonename = content_db.GetZoneName(iZoneID); + const char* zonename = ZoneName(iZoneID); if (iZoneID == 0 || zonename == 0) return false; @@ -190,7 +190,7 @@ bool Zone::LoadZoneObjects() for (auto row = results.begin(); row != results.end(); ++row) { if (atoi(row[9]) == 0) { // Type == 0 - Static Object - const char *shortname = content_db.GetZoneName(atoi(row[1]), false); // zoneid -> zone_shortname + const char *shortname = ZoneName(atoi(row[1]), false); // zoneid -> zone_shortname if (!shortname) continue; @@ -1158,7 +1158,7 @@ bool Zone::LoadZoneCFG(const char* filename, uint16 instance_id) map_name = nullptr; if (!content_db.GetZoneCFG( - content_db.GetZoneID(filename), + ZoneID(filename), instance_id, &newzone_data, can_bind, @@ -1177,7 +1177,7 @@ bool Zone::LoadZoneCFG(const char* filename, uint16 instance_id) if (instance_id != 0) { safe_delete_array(map_name); if (!content_db.GetZoneCFG( - content_db.GetZoneID(filename), + ZoneID(filename), 0, &newzone_data, can_bind, @@ -1799,7 +1799,7 @@ ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Clien ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, const char* to_name, Client* client, float max_distance) { if(to_name == nullptr) return GetClosestZonePointWithoutZone(location.x, location.y, location.z, client, max_distance); - return GetClosestZonePoint(location, content_db.GetZoneID(to_name), client, max_distance); + return GetClosestZonePoint(location, ZoneID(to_name), client, max_distance); } ZonePoint* Zone::GetClosestZonePointWithoutZone(float x, float y, float z, Client* client, float max_distance) { diff --git a/zone/zone.h b/zone/zone.h index 5249ff994..16d44226e 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -25,6 +25,7 @@ #include "../common/random.h" #include "../common/string_util.h" #include "zonedb.h" +#include "zone_store.h" #include "../common/repositories/grid_repository.h" #include "../common/repositories/grid_entries_repository.h" #include "qglobals.h" diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp index 37f50181b..4088e4980 100644 --- a/zone/zone_store.cpp +++ b/zone/zone_store.cpp @@ -23,7 +23,7 @@ ZoneStore::ZoneStore() = default; ZoneStore::~ZoneStore() = default; -void ZoneStore::LoadZonesStore() +void ZoneStore::LoadZones() { zones = ZoneRepository::All(); } @@ -50,6 +50,11 @@ uint32 ZoneStore::GetZoneID(std::string zone_name) return 0; } +/** + * @param zone_id + * @param error_unknown + * @return + */ const char *ZoneStore::GetZoneName(uint32 zone_id, bool error_unknown) { for (auto &z: zones) { @@ -65,6 +70,10 @@ const char *ZoneStore::GetZoneName(uint32 zone_id, bool error_unknown) return nullptr; } +/** + * @param zone_id + * @return + */ std::string ZoneStore::GetZoneName(uint32 zone_id) { for (auto &z: zones) { @@ -75,3 +84,49 @@ std::string ZoneStore::GetZoneName(uint32 zone_id) return std::string(); } + +/** + * @param zone_id + * @return + */ +std::string ZoneStore::GetZoneLongName(uint32 zone_id) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.long_name; + } + } + + return std::string(); +} + +/** + * @param zone_id + * @param version + * @return + */ +ZoneRepository::Zone ZoneStore::GetZone(uint32 zone_id, int version) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id && z.version == version) { + return z; + } + } + + return ZoneRepository::Zone(); +} + +/** + * @param in_zone_name + * @return + */ +ZoneRepository::Zone ZoneStore::GetZone(const char *in_zone_name) +{ + for (auto &z: zones) { + if (z.short_name == in_zone_name) { + return z; + } + } + + return ZoneRepository::Zone(); +} diff --git a/zone/zone_store.h b/zone/zone_store.h index 6721a3d0c..4057336d5 100644 --- a/zone/zone_store.h +++ b/zone/zone_store.h @@ -31,12 +31,15 @@ public: std::vector zones; - void LoadZonesStore(); + void LoadZones(); + ZoneRepository::Zone GetZone(uint32 zone_id, int version = 0); + ZoneRepository::Zone GetZone(const char *in_zone_name); uint32 GetZoneID(const char *in_zone_name); uint32 GetZoneID(std::string zone_name); std::string GetZoneName(uint32 zone_id); - const char *GetZoneName(uint32 zone_id, bool error_unknown); + std::string GetZoneLongName(uint32 zone_id); + const char *GetZoneName(uint32 zone_id, bool error_unknown = false); }; extern ZoneStore zone_store; @@ -46,14 +49,15 @@ extern ZoneStore zone_store; */ inline uint32 ZoneID(const char *in_zone_name) { return zone_store.GetZoneID(in_zone_name); } inline uint32 ZoneID(std::string zone_name) { return zone_store.GetZoneID(zone_name); } -inline std::string ZoneName(uint32 zone_id) { return zone_store.GetZoneName(zone_id); } -inline const char *ZoneName(uint32 zone_id, bool error_unknown) +inline const char *ZoneName(uint32 zone_id, bool error_unknown = false) { return zone_store.GetZoneName( zone_id, error_unknown ); } - +inline const char *ZoneLongName(uint32 zone_id) { return zone_store.GetZoneLongName(zone_id).c_str(); } +inline ZoneRepository::Zone GetZone(uint32 zone_id, int version = 0) { return zone_store.GetZone(zone_id, version); }; +inline ZoneRepository::Zone GetZone(const char *in_zone_name) { return zone_store.GetZone(in_zone_name); }; #endif //EQEMU_ZONE_STORE_H diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index a1313eacd..759602d5a 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -11,6 +11,7 @@ #include "merc.h" #include "zone.h" #include "zonedb.h" +#include "zone_store.h" #include "aura.h" #include "../common/repositories/criteria/content_filter_criteria.h" @@ -3566,7 +3567,7 @@ void ZoneDatabase::ListAllInstances(Client* client, uint32 charid) client->Message(Chat::White, "%s is part of the following instances:", name); for (auto row = results.begin(); row != results.end(); ++row) { - client->Message(Chat::White, "%s - id: %lu, version: %lu", content_db.GetZoneName(atoi(row[1])), + client->Message(Chat::White, "%s - id: %lu, version: %lu", ZoneName(atoi(row[1])), (unsigned long)atoi(row[0]), (unsigned long)atoi(row[2])); } } diff --git a/zone/zoning.cpp b/zone/zoning.cpp index ac453fefc..08235579a 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -159,7 +159,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { } /* Check for Valid Zone */ - const char *target_zone_name = content_db.GetZoneName(target_zone_id); + const char *target_zone_name = ZoneName(target_zone_id); if(target_zone_name == nullptr) { //invalid zone... Message(Chat::Red, "Invalid target zone ID."); @@ -376,7 +376,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc if(this->GetPet()) entity_list.RemoveFromHateLists(this->GetPet()); - LogInfo("Zoning [{}] to: [{}] ([{}]) - ([{}]) x [{}] y [{}] z [{}]", m_pp.name, content_db.GetZoneName(zone_id), zone_id, instance_id, dest_x, dest_y, dest_z); + LogInfo("Zoning [{}] to: [{}] ([{}]) - ([{}]) x [{}] y [{}] z [{}]", m_pp.name, ZoneName(zone_id), zone_id, instance_id, dest_x, dest_y, dest_z); //set the player's coordinates in the new zone so they have them //when they zone into it @@ -430,7 +430,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc } void Client::MovePC(const char* zonename, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { - ProcessMovePC(content_db.GetZoneID(zonename), 0, x, y, z, heading, ignorerestrictions, zm); + ProcessMovePC(ZoneID(zonename), 0, x, y, z, heading, ignorerestrictions, zm); } //designed for in zone moving @@ -510,7 +510,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z const char* pShortZoneName = nullptr; char* pZoneName = nullptr; - pShortZoneName = content_db.GetZoneName(zoneID); + pShortZoneName = ZoneName(zoneID); content_db.GetZoneLongName(pShortZoneName, &pZoneName); if(!pZoneName) { @@ -856,7 +856,7 @@ void Client::SendZoneFlagInfo(Client *to) const { for(; cur != end; ++cur) { uint32 zoneid = *cur; - const char *short_name = content_db.GetZoneName(zoneid); + const char *short_name = ZoneName(zoneid); char *long_name = nullptr; content_db.GetZoneLongName(short_name, &long_name); From 6409e02aede0a691186b613d75bf5688821f20df Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Apr 2020 04:49:28 -0500 Subject: [PATCH 119/272] Update base repositories to use int as a base to avoid atoi overflow --- .../base/base_aa_ability_repository.h | 6 +- .../base/base_account_repository.h | 10 +- .../base/base_adventure_details_repository.h | 18 +-- .../base/base_adventure_template_repository.h | 24 ++-- .../base/base_blocked_spells_repository.h | 2 +- .../base/base_bug_reports_repository.h | 14 +- .../repositories/base/base_bugs_repository.h | 4 +- ...base_char_create_combinations_repository.h | 4 +- .../base_character_activities_repository.h | 10 +- ...character_alternate_abilities_repository.h | 8 +- .../base/base_character_auras_repository.h | 6 +- .../base_character_bandolier_repository.h | 4 +- .../base/base_character_bind_repository.h | 2 +- .../base/base_character_buffs_repository.h | 8 +- .../base_character_corpse_items_repository.h | 22 ++-- .../base/base_character_corpses_repository.h | 12 +- .../base/base_character_data_repository.h | 50 +++---- .../base_character_disciplines_repository.h | 6 +- .../base_character_item_recast_repository.h | 6 +- .../base_character_languages_repository.h | 6 +- ...haracter_leadership_abilities_repository.h | 6 +- .../base/base_character_material_repository.h | 14 +- .../base_character_memmed_spells_repository.h | 6 +- .../base_character_pet_buffs_repository.h | 4 +- .../base_character_potionbelt_repository.h | 8 +- .../base/base_character_skills_repository.h | 6 +- .../base/base_character_spells_repository.h | 6 +- .../base/base_character_tasks_repository.h | 10 +- .../base/base_content_flags_repository.h | 2 +- .../repositories/base/base_doors_repository.h | 28 ++-- .../base/base_faction_base_data_repository.h | 12 +- .../base/base_faction_list_mod_repository.h | 2 +- .../base/base_faction_list_repository.h | 2 +- .../base/base_faction_values_repository.h | 8 +- .../base/base_fishing_repository.h | 8 +- .../base/base_forage_repository.h | 8 +- .../base/base_friends_repository.h | 2 +- .../base/base_global_loot_repository.h | 12 +- .../base/base_ground_spawns_repository.h | 6 +- .../base/base_group_id_repository.h | 2 +- .../base/base_guild_members_repository.h | 8 +- .../base/base_guild_ranks_repository.h | 18 +-- .../base/base_guild_relations_repository.h | 6 +- .../base/base_guilds_repository.h | 2 +- .../base/base_instance_list_repository.h | 14 +- .../base/base_inventory_repository.h | 4 +- .../base_inventory_snapshots_repository.h | 4 +- .../base/base_item_tick_repository.h | 2 +- .../repositories/base/base_items_repository.h | 100 +++++++------- .../base_ldon_trap_templates_repository.h | 10 +- .../base/base_lfguild_repository.h | 6 +- .../base/base_logsys_categories_repository.h | 6 +- .../base/base_lootdrop_entries_repository.h | 10 +- .../base/base_lootdrop_repository.h | 4 +- .../base/base_loottable_entries_repository.h | 6 +- .../base/base_loottable_repository.h | 6 +- .../repositories/base/base_mail_repository.h | 2 +- .../base/base_merchantlist_repository.h | 10 +- .../base/base_merchantlist_temp_repository.h | 8 +- .../base/base_npc_emotes_repository.h | 4 +- .../base_npc_faction_entries_repository.h | 10 +- .../base/base_npc_faction_repository.h | 2 +- ...se_npc_spells_effects_entries_repository.h | 16 +-- .../base/base_npc_spells_entries_repository.h | 24 ++-- .../base/base_npc_spells_repository.h | 22 ++-- .../base/base_npc_types_repository.h | 122 +++++++++--------- .../base/base_npc_types_tint_repository.h | 54 ++++---- .../base/base_object_contents_repository.h | 2 +- .../base/base_object_repository.h | 4 +- ...se_perl_event_export_settings_repository.h | 10 +- .../base/base_petitions_repository.h | 2 +- .../repositories/base/base_pets_repository.h | 8 +- .../base/base_raid_details_repository.h | 2 +- .../base/base_raid_members_repository.h | 10 +- .../base/base_respawn_times_repository.h | 8 +- .../base/base_rule_sets_repository.h | 2 +- .../base/base_rule_values_repository.h | 2 +- .../base/base_skill_caps_repository.h | 10 +- .../base/base_spawn2_repository.h | 6 +- .../base_spawn_condition_values_repository.h | 2 +- .../base/base_spawn_conditions_repository.h | 2 +- .../base/base_spawn_events_repository.h | 14 +- .../base/base_spawnentry_repository.h | 8 +- .../base/base_spawngroup_repository.h | 6 +- .../base/base_start_zones_repository.h | 6 +- .../base/base_starting_items_repository.h | 8 +- .../base/base_task_activities_repository.h | 4 +- .../repositories/base/base_tasks_repository.h | 12 +- .../base/base_timers_repository.h | 10 +- .../base/base_titles_repository.h | 10 +- .../base/base_trader_repository.h | 12 +- ...ase_tradeskill_recipe_entries_repository.h | 16 +-- .../base/base_tradeskill_recipe_repository.h | 20 +-- .../repositories/base/base_traps_repository.h | 16 +-- .../base/base_tributes_repository.h | 2 +- ...base_veteran_reward_templates_repository.h | 4 +- .../base/base_zone_points_repository.h | 8 +- 97 files changed, 540 insertions(+), 540 deletions(-) diff --git a/common/repositories/base/base_aa_ability_repository.h b/common/repositories/base/base_aa_ability_repository.h index e91813169..49f83e61d 100644 --- a/common/repositories/base/base_aa_ability_repository.h +++ b/common/repositories/base/base_aa_ability_repository.h @@ -45,10 +45,10 @@ public: int status; int type; int charges; - int8 grant_only; + int grant_only; int first_rank_id; - int8 enabled; - int8 reset_on_death; + int enabled; + int reset_on_death; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_account_repository.h b/common/repositories/base/base_account_repository.h index 75e358a1b..e2f0b5ec2 100644 --- a/common/repositories/base/base_account_repository.h +++ b/common/repositories/base/base_account_repository.h @@ -43,15 +43,15 @@ public: int status; std::string ls_id; int lsaccount_id; - int8 gmspeed; - int8 revoked; + int gmspeed; + int revoked; int karma; std::string minilogin_ip; - int8 hideme; - int8 rulesflag; + int hideme; + int rulesflag; std::string suspendeduntil; int time_creation; - int8 expansion; + int expansion; std::string ban_reason; std::string suspend_reason; }; diff --git a/common/repositories/base/base_adventure_details_repository.h b/common/repositories/base/base_adventure_details_repository.h index 94c0d5a9f..5ce8b68ef 100644 --- a/common/repositories/base/base_adventure_details_repository.h +++ b/common/repositories/base/base_adventure_details_repository.h @@ -35,15 +35,15 @@ class BaseAdventureDetailsRepository { public: struct AdventureDetails { - int id; - int16 adventure_id; - int instance_id; - int16 count; - int16 assassinate_count; - int8 status; - int time_created; - int time_zoned; - int time_completed; + int id; + int adventure_id; + int instance_id; + int count; + int assassinate_count; + int status; + int time_created; + int time_zoned; + int time_completed; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_adventure_template_repository.h b/common/repositories/base/base_adventure_template_repository.h index 8a5d681a4..41c5df27b 100644 --- a/common/repositories/base/base_adventure_template_repository.h +++ b/common/repositories/base/base_adventure_template_repository.h @@ -37,14 +37,14 @@ public: struct AdventureTemplate { int id; std::string zone; - int8 zone_version; - int8 is_hard; - int8 is_raid; - int8 min_level; - int8 max_level; - int8 type; + int zone_version; + int is_hard; + int is_raid; + int min_level; + int max_level; + int type; int type_data; - int16 type_count; + int type_count; float assa_x; float assa_y; float assa_z; @@ -52,13 +52,13 @@ public: std::string text; int duration; int zone_in_time; - int16 win_points; - int16 lose_points; - int8 theme; - int16 zone_in_zone_id; + int win_points; + int lose_points; + int theme; + int zone_in_zone_id; float zone_in_x; float zone_in_y; - int16 zone_in_object_id; + int zone_in_object_id; float dest_x; float dest_y; float dest_z; diff --git a/common/repositories/base/base_blocked_spells_repository.h b/common/repositories/base/base_blocked_spells_repository.h index f29bb9ce4..8f24ed9f0 100644 --- a/common/repositories/base/base_blocked_spells_repository.h +++ b/common/repositories/base/base_blocked_spells_repository.h @@ -37,7 +37,7 @@ public: struct BlockedSpells { int id; int spellid; - int8 type; + int type; int zoneid; float x; float y; diff --git a/common/repositories/base/base_bug_reports_repository.h b/common/repositories/base/base_bug_reports_repository.h index 822b4f0a4..779327ef9 100644 --- a/common/repositories/base/base_bug_reports_repository.h +++ b/common/repositories/base/base_bug_reports_repository.h @@ -42,7 +42,7 @@ public: int account_id; int character_id; std::string character_name; - int8 reporter_spoof; + int reporter_spoof; int category_id; std::string category_name; std::string reporter_name; @@ -55,15 +55,15 @@ public: int target_id; std::string target_name; int optional_info_mask; - int8 _can_duplicate; - int8 _crash_bug; - int8 _target_info; - int8 _character_flags; - int8 _unknown_value; + int _can_duplicate; + int _crash_bug; + int _target_info; + int _character_flags; + int _unknown_value; std::string bug_report; std::string system_info; std::string report_datetime; - int8 bug_status; + int bug_status; std::string last_review; std::string last_reviewer; std::string reviewer_notes; diff --git a/common/repositories/base/base_bugs_repository.h b/common/repositories/base/base_bugs_repository.h index e34554e2e..664097890 100644 --- a/common/repositories/base/base_bugs_repository.h +++ b/common/repositories/base/base_bugs_repository.h @@ -43,11 +43,11 @@ public: float y; float z; std::string type; - int8 flag; + int flag; std::string target; std::string bug; std::string date; - int8 status; + int status; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_char_create_combinations_repository.h b/common/repositories/base/base_char_create_combinations_repository.h index 8bdb95d21..cf103ec8a 100644 --- a/common/repositories/base/base_char_create_combinations_repository.h +++ b/common/repositories/base/base_char_create_combinations_repository.h @@ -41,8 +41,8 @@ public: int deity; int start_zone; int expansions_req; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_character_activities_repository.h b/common/repositories/base/base_character_activities_repository.h index be5d6802a..4abc5e7dd 100644 --- a/common/repositories/base/base_character_activities_repository.h +++ b/common/repositories/base/base_character_activities_repository.h @@ -35,11 +35,11 @@ class BaseCharacterActivitiesRepository { public: struct CharacterActivities { - int charid; - int taskid; - int activityid; - int donecount; - int8 completed; + int charid; + int taskid; + int activityid; + int donecount; + int completed; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_alternate_abilities_repository.h b/common/repositories/base/base_character_alternate_abilities_repository.h index fd7bb56ad..c578b99a4 100644 --- a/common/repositories/base/base_character_alternate_abilities_repository.h +++ b/common/repositories/base/base_character_alternate_abilities_repository.h @@ -35,10 +35,10 @@ class BaseCharacterAlternateAbilitiesRepository { public: struct CharacterAlternateAbilities { - int id; - int16 aa_id; - int16 aa_value; - int16 charges; + int id; + int aa_id; + int aa_value; + int charges; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_auras_repository.h b/common/repositories/base/base_character_auras_repository.h index 7c3a84b6f..9959fa2a4 100644 --- a/common/repositories/base/base_character_auras_repository.h +++ b/common/repositories/base/base_character_auras_repository.h @@ -35,9 +35,9 @@ class BaseCharacterAurasRepository { public: struct CharacterAuras { - int id; - int8 slot; - int spell_id; + int id; + int slot; + int spell_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_bandolier_repository.h b/common/repositories/base/base_character_bandolier_repository.h index 5b77dabfb..62f0924b4 100644 --- a/common/repositories/base/base_character_bandolier_repository.h +++ b/common/repositories/base/base_character_bandolier_repository.h @@ -36,8 +36,8 @@ class BaseCharacterBandolierRepository { public: struct CharacterBandolier { int id; - int8 bandolier_id; - int8 bandolier_slot; + int bandolier_id; + int bandolier_slot; int item_id; int icon; std::string bandolier_name; diff --git a/common/repositories/base/base_character_bind_repository.h b/common/repositories/base/base_character_bind_repository.h index a54b2ff86..9994cb2b2 100644 --- a/common/repositories/base/base_character_bind_repository.h +++ b/common/repositories/base/base_character_bind_repository.h @@ -37,7 +37,7 @@ public: struct CharacterBind { int id; int slot; - int16 zone_id; + int zone_id; int instance_id; float x; float y; diff --git a/common/repositories/base/base_character_buffs_repository.h b/common/repositories/base/base_character_buffs_repository.h index 7b6590c56..ac54813ae 100644 --- a/common/repositories/base/base_character_buffs_repository.h +++ b/common/repositories/base/base_character_buffs_repository.h @@ -36,16 +36,16 @@ class BaseCharacterBuffsRepository { public: struct CharacterBuffs { int character_id; - int8 slot_id; - int16 spell_id; - int8 caster_level; + int slot_id; + int spell_id; + int caster_level; std::string caster_name; int ticsremaining; int counters; int numhits; int melee_rune; int magic_rune; - int8 persistent; + int persistent; int dot_rune; int caston_x; int caston_y; diff --git a/common/repositories/base/base_character_corpse_items_repository.h b/common/repositories/base/base_character_corpse_items_repository.h index 31ba7b8e5..a41cac39d 100644 --- a/common/repositories/base/base_character_corpse_items_repository.h +++ b/common/repositories/base/base_character_corpse_items_repository.h @@ -35,17 +35,17 @@ class BaseCharacterCorpseItemsRepository { public: struct CharacterCorpseItems { - int corpse_id; - int equip_slot; - int item_id; - int charges; - int aug_1; - int aug_2; - int aug_3; - int aug_4; - int aug_5; - int aug_6; - int16 attuned; + int corpse_id; + int equip_slot; + int item_id; + int charges; + int aug_1; + int aug_2; + int aug_3; + int aug_4; + int aug_5; + int aug_6; + int attuned; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_corpses_repository.h b/common/repositories/base/base_character_corpses_repository.h index 5a9932252..c9d46ff52 100644 --- a/common/repositories/base/base_character_corpses_repository.h +++ b/common/repositories/base/base_character_corpses_repository.h @@ -38,18 +38,18 @@ public: int id; int charid; std::string charname; - int16 zone_id; - int16 instance_id; + int zone_id; + int instance_id; float x; float y; float z; float heading; std::string time_of_death; int guild_consent_id; - int8 is_rezzed; - int8 is_buried; - int8 was_at_graveyard; - int8 is_locked; + int is_rezzed; + int is_buried; + int was_at_graveyard; + int is_locked; int exp; int size; int level; diff --git a/common/repositories/base/base_character_data_repository.h b/common/repositories/base/base_character_data_repository.h index 10f812a65..489af6ca3 100644 --- a/common/repositories/base/base_character_data_repository.h +++ b/common/repositories/base/base_character_data_repository.h @@ -47,31 +47,31 @@ public: float x; float z; float heading; - int8 gender; - int16 race; - int8 class; + int gender; + int race; + int class; int level; int deity; int birthday; int last_login; int time_played; - int8 level2; - int8 anon; - int8 gm; + int level2; + int anon; + int gm; int face; - int8 hair_color; - int8 hair_style; - int8 beard; - int8 beard_color; - int8 eye_color_1; - int8 eye_color_2; + int hair_color; + int hair_style; + int beard; + int beard_color; + int eye_color_1; + int eye_color_2; int drakkin_heritage; int drakkin_tattoo; int drakkin_details; - int8 ability_time_seconds; - int8 ability_number; - int8 ability_time_minutes; - int8 ability_time_hours; + int ability_time_seconds; + int ability_number; + int ability_time_minutes; + int ability_time_hours; int exp; int aa_points_spent; int aa_exp; @@ -107,7 +107,7 @@ public: int career_tribute_points; int tribute_points; int tribute_active; - int8 pvp_status; + int pvp_status; int pvp_kills; int pvp_deaths; int pvp_current_points; @@ -118,18 +118,18 @@ public: int pvp2; int pvp_type; int show_helm; - int8 group_auto_consent; - int8 raid_auto_consent; - int8 guild_auto_consent; - int8 leadership_exp_on; + int group_auto_consent; + int raid_auto_consent; + int guild_auto_consent; + int leadership_exp_on; int RestTimer; int air_remaining; int autosplit_enabled; - int8 lfp; - int8 lfg; + int lfp; + int lfg; std::string mailkey; - int8 xtargets; - int8 firstlogon; + int xtargets; + int firstlogon; int e_aa_effects; int e_percent_to_aa; int e_expended_aa_spent; diff --git a/common/repositories/base/base_character_disciplines_repository.h b/common/repositories/base/base_character_disciplines_repository.h index 2838c8a0b..4401667d8 100644 --- a/common/repositories/base/base_character_disciplines_repository.h +++ b/common/repositories/base/base_character_disciplines_repository.h @@ -35,9 +35,9 @@ class BaseCharacterDisciplinesRepository { public: struct CharacterDisciplines { - int id; - int16 slot_id; - int16 disc_id; + int id; + int slot_id; + int disc_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_item_recast_repository.h b/common/repositories/base/base_character_item_recast_repository.h index 4adaa8547..1f4438ed1 100644 --- a/common/repositories/base/base_character_item_recast_repository.h +++ b/common/repositories/base/base_character_item_recast_repository.h @@ -35,9 +35,9 @@ class BaseCharacterItemRecastRepository { public: struct CharacterItemRecast { - int id; - int16 recast_type; - int timestamp; + int id; + int recast_type; + int timestamp; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_languages_repository.h b/common/repositories/base/base_character_languages_repository.h index ca6720898..bbbd4011a 100644 --- a/common/repositories/base/base_character_languages_repository.h +++ b/common/repositories/base/base_character_languages_repository.h @@ -35,9 +35,9 @@ class BaseCharacterLanguagesRepository { public: struct CharacterLanguages { - int id; - int16 lang_id; - int16 value; + int id; + int lang_id; + int value; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_leadership_abilities_repository.h b/common/repositories/base/base_character_leadership_abilities_repository.h index 9c47de211..17f57bf85 100644 --- a/common/repositories/base/base_character_leadership_abilities_repository.h +++ b/common/repositories/base/base_character_leadership_abilities_repository.h @@ -35,9 +35,9 @@ class BaseCharacterLeadershipAbilitiesRepository { public: struct CharacterLeadershipAbilities { - int id; - int16 slot; - int16 rank; + int id; + int slot; + int rank; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_material_repository.h b/common/repositories/base/base_character_material_repository.h index 9b4b9671a..a7215027f 100644 --- a/common/repositories/base/base_character_material_repository.h +++ b/common/repositories/base/base_character_material_repository.h @@ -35,13 +35,13 @@ class BaseCharacterMaterialRepository { public: struct CharacterMaterial { - int id; - int8 slot; - int8 blue; - int8 green; - int8 red; - int8 use_tint; - int color; + int id; + int slot; + int blue; + int green; + int red; + int use_tint; + int color; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_memmed_spells_repository.h b/common/repositories/base/base_character_memmed_spells_repository.h index 2f46264d8..e4672c756 100644 --- a/common/repositories/base/base_character_memmed_spells_repository.h +++ b/common/repositories/base/base_character_memmed_spells_repository.h @@ -35,9 +35,9 @@ class BaseCharacterMemmedSpellsRepository { public: struct CharacterMemmedSpells { - int id; - int16 slot_id; - int16 spell_id; + int id; + int slot_id; + int spell_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_pet_buffs_repository.h b/common/repositories/base/base_character_pet_buffs_repository.h index ce4847244..5cc56ddeb 100644 --- a/common/repositories/base/base_character_pet_buffs_repository.h +++ b/common/repositories/base/base_character_pet_buffs_repository.h @@ -39,13 +39,13 @@ public: int pet; int slot; int spell_id; - int8 caster_level; + int caster_level; std::string castername; int ticsremaining; int counters; int numhits; int rune; - int8 instrument_mod; + int instrument_mod; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_potionbelt_repository.h b/common/repositories/base/base_character_potionbelt_repository.h index 5de16d8df..7fb753d55 100644 --- a/common/repositories/base/base_character_potionbelt_repository.h +++ b/common/repositories/base/base_character_potionbelt_repository.h @@ -35,10 +35,10 @@ class BaseCharacterPotionbeltRepository { public: struct CharacterPotionbelt { - int id; - int8 potion_id; - int item_id; - int icon; + int id; + int potion_id; + int item_id; + int icon; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_skills_repository.h b/common/repositories/base/base_character_skills_repository.h index 277ac65e8..c43622287 100644 --- a/common/repositories/base/base_character_skills_repository.h +++ b/common/repositories/base/base_character_skills_repository.h @@ -35,9 +35,9 @@ class BaseCharacterSkillsRepository { public: struct CharacterSkills { - int id; - int16 skill_id; - int16 value; + int id; + int skill_id; + int value; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_spells_repository.h b/common/repositories/base/base_character_spells_repository.h index 3fd9887cd..e5a6ab1d9 100644 --- a/common/repositories/base/base_character_spells_repository.h +++ b/common/repositories/base/base_character_spells_repository.h @@ -35,9 +35,9 @@ class BaseCharacterSpellsRepository { public: struct CharacterSpells { - int id; - int16 slot_id; - int16 spell_id; + int id; + int slot_id; + int spell_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_character_tasks_repository.h b/common/repositories/base/base_character_tasks_repository.h index e0ec7236f..00dea5af6 100644 --- a/common/repositories/base/base_character_tasks_repository.h +++ b/common/repositories/base/base_character_tasks_repository.h @@ -35,11 +35,11 @@ class BaseCharacterTasksRepository { public: struct CharacterTasks { - int charid; - int taskid; - int slot; - int8 type; - int acceptedtime; + int charid; + int taskid; + int slot; + int type; + int acceptedtime; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_content_flags_repository.h b/common/repositories/base/base_content_flags_repository.h index 7c7ff3ebf..34127d0e5 100644 --- a/common/repositories/base/base_content_flags_repository.h +++ b/common/repositories/base/base_content_flags_repository.h @@ -37,7 +37,7 @@ public: struct ContentFlags { int id; std::string flag_name; - int8 enabled; + int enabled; std::string notes; }; diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h index d8da79ed1..ea08eba8d 100644 --- a/common/repositories/base/base_doors_repository.h +++ b/common/repositories/base/base_doors_repository.h @@ -36,23 +36,23 @@ class BaseDoorsRepository { public: struct Doors { int id; - int16 doorid; + int doorid; std::string zone; - int16 version; + int version; std::string name; float pos_y; float pos_x; float pos_z; float heading; - int16 opentype; - int16 guild; - int16 lockpick; + int opentype; + int guild; + int lockpick; int keyitem; - int8 nokeyring; - int16 triggerdoor; - int16 triggertype; - int8 disable_timer; - int16 doorisopen; + int nokeyring; + int triggerdoor; + int triggertype; + int disable_timer; + int doorisopen; int door_param; std::string dest_zone; int dest_instance; @@ -62,12 +62,12 @@ public: float dest_heading; int invert_state; int incline; - int16 size; + int size; float buffer; int client_version_mask; - int16 is_ldon_door; - int8 min_expansion; - int8 max_expansion; + int is_ldon_door; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_faction_base_data_repository.h b/common/repositories/base/base_faction_base_data_repository.h index 808bbef1f..4860af5e5 100644 --- a/common/repositories/base/base_faction_base_data_repository.h +++ b/common/repositories/base/base_faction_base_data_repository.h @@ -35,12 +35,12 @@ class BaseFactionBaseDataRepository { public: struct FactionBaseData { - int16 client_faction_id; - int16 min; - int16 max; - int16 unk_hero1; - int16 unk_hero2; - int16 unk_hero3; + int client_faction_id; + int min; + int max; + int unk_hero1; + int unk_hero2; + int unk_hero3; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_faction_list_mod_repository.h b/common/repositories/base/base_faction_list_mod_repository.h index 264e1dc51..903cdf1e2 100644 --- a/common/repositories/base/base_faction_list_mod_repository.h +++ b/common/repositories/base/base_faction_list_mod_repository.h @@ -37,7 +37,7 @@ public: struct FactionListMod { int id; int faction_id; - int16 mod; + int mod; std::string mod_name; }; diff --git a/common/repositories/base/base_faction_list_repository.h b/common/repositories/base/base_faction_list_repository.h index cbb47991d..d1fa6eabb 100644 --- a/common/repositories/base/base_faction_list_repository.h +++ b/common/repositories/base/base_faction_list_repository.h @@ -37,7 +37,7 @@ public: struct FactionList { int id; std::string name; - int16 base; + int base; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_faction_values_repository.h b/common/repositories/base/base_faction_values_repository.h index 2159bfec7..1f32a8272 100644 --- a/common/repositories/base/base_faction_values_repository.h +++ b/common/repositories/base/base_faction_values_repository.h @@ -35,10 +35,10 @@ class BaseFactionValuesRepository { public: struct FactionValues { - int char_id; - int faction_id; - int16 current_value; - int8 temp; + int char_id; + int faction_id; + int current_value; + int temp; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_fishing_repository.h b/common/repositories/base/base_fishing_repository.h index acd419755..43f5a90c0 100644 --- a/common/repositories/base/base_fishing_repository.h +++ b/common/repositories/base/base_fishing_repository.h @@ -38,12 +38,12 @@ public: int id; int zoneid; int Itemid; - int16 skill_level; - int16 chance; + int skill_level; + int chance; int npc_id; int npc_chance; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_forage_repository.h b/common/repositories/base/base_forage_repository.h index bd6411187..2f3690be4 100644 --- a/common/repositories/base/base_forage_repository.h +++ b/common/repositories/base/base_forage_repository.h @@ -38,10 +38,10 @@ public: int id; int zoneid; int Itemid; - int16 level; - int16 chance; - int8 min_expansion; - int8 max_expansion; + int level; + int chance; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_friends_repository.h b/common/repositories/base/base_friends_repository.h index 2028c474a..9fb341b27 100644 --- a/common/repositories/base/base_friends_repository.h +++ b/common/repositories/base/base_friends_repository.h @@ -36,7 +36,7 @@ class BaseFriendsRepository { public: struct Friends { int charid; - int8 type; + int type; std::string name; }; diff --git a/common/repositories/base/base_global_loot_repository.h b/common/repositories/base/base_global_loot_repository.h index 69bf951c7..0d86b6cdf 100644 --- a/common/repositories/base/base_global_loot_repository.h +++ b/common/repositories/base/base_global_loot_repository.h @@ -38,18 +38,18 @@ public: int id; std::string description; int loottable_id; - int8 enabled; + int enabled; int min_level; int max_level; - int8 rare; - int8 raid; + int rare; + int raid; std::string race; std::string class; std::string bodytype; std::string zone; - int8 hot_zone; - int8 min_expansion; - int8 max_expansion; + int hot_zone; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h index b2b46dbb8..3d9ee9977 100644 --- a/common/repositories/base/base_ground_spawns_repository.h +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -37,7 +37,7 @@ public: struct GroundSpawns { int id; int zoneid; - int16 version; + int version; float max_x; float max_y; float max_z; @@ -49,8 +49,8 @@ public: int max_allowed; std::string comment; int respawn_timer; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_group_id_repository.h b/common/repositories/base/base_group_id_repository.h index 64a07429d..c7d8303ef 100644 --- a/common/repositories/base/base_group_id_repository.h +++ b/common/repositories/base/base_group_id_repository.h @@ -38,7 +38,7 @@ public: int groupid; int charid; std::string name; - int8 ismerc; + int ismerc; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_guild_members_repository.h b/common/repositories/base/base_guild_members_repository.h index 02b26e7c8..52eb6f51f 100644 --- a/common/repositories/base/base_guild_members_repository.h +++ b/common/repositories/base/base_guild_members_repository.h @@ -37,13 +37,13 @@ public: struct GuildMembers { int char_id; int guild_id; - int8 rank; - int8 tribute_enable; + int rank; + int tribute_enable; int total_tribute; int last_tribute; - int8 banker; + int banker; std::string public_note; - int8 alt; + int alt; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_guild_ranks_repository.h b/common/repositories/base/base_guild_ranks_repository.h index 2d23b41c9..2235068ef 100644 --- a/common/repositories/base/base_guild_ranks_repository.h +++ b/common/repositories/base/base_guild_ranks_repository.h @@ -36,16 +36,16 @@ class BaseGuildRanksRepository { public: struct GuildRanks { int guild_id; - int8 rank; + int rank; std::string title; - int8 can_hear; - int8 can_speak; - int8 can_invite; - int8 can_remove; - int8 can_promote; - int8 can_demote; - int8 can_motd; - int8 can_warpeace; + int can_hear; + int can_speak; + int can_invite; + int can_remove; + int can_promote; + int can_demote; + int can_motd; + int can_warpeace; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_guild_relations_repository.h b/common/repositories/base/base_guild_relations_repository.h index 0ebead9e1..2293bf578 100644 --- a/common/repositories/base/base_guild_relations_repository.h +++ b/common/repositories/base/base_guild_relations_repository.h @@ -35,9 +35,9 @@ class BaseGuildRelationsRepository { public: struct GuildRelations { - int guild1; - int guild2; - int8 relation; + int guild1; + int guild2; + int relation; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_guilds_repository.h b/common/repositories/base/base_guilds_repository.h index 19c4573a4..9613aa9ef 100644 --- a/common/repositories/base/base_guilds_repository.h +++ b/common/repositories/base/base_guilds_repository.h @@ -38,7 +38,7 @@ public: int id; std::string name; int leader; - int16 minstatus; + int minstatus; std::string motd; int tribute; std::string motd_setter; diff --git a/common/repositories/base/base_instance_list_repository.h b/common/repositories/base/base_instance_list_repository.h index ac26a94f5..856ea85c7 100644 --- a/common/repositories/base/base_instance_list_repository.h +++ b/common/repositories/base/base_instance_list_repository.h @@ -35,13 +35,13 @@ class BaseInstanceListRepository { public: struct InstanceList { - int id; - int zone; - int8 version; - int8 is_global; - int start_time; - int duration; - int8 never_expires; + int id; + int zone; + int version; + int is_global; + int start_time; + int duration; + int never_expires; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_inventory_repository.h b/common/repositories/base/base_inventory_repository.h index b78a911e4..3ae9e72fb 100644 --- a/common/repositories/base/base_inventory_repository.h +++ b/common/repositories/base/base_inventory_repository.h @@ -38,7 +38,7 @@ public: int charid; int slotid; int itemid; - int16 charges; + int charges; int color; int augslot1; int augslot2; @@ -46,7 +46,7 @@ public: int augslot4; int augslot5; int augslot6; - int8 instnodrop; + int instnodrop; std::string custom_data; int ornamenticon; int ornamentidfile; diff --git a/common/repositories/base/base_inventory_snapshots_repository.h b/common/repositories/base/base_inventory_snapshots_repository.h index 907d32244..d00caa2c9 100644 --- a/common/repositories/base/base_inventory_snapshots_repository.h +++ b/common/repositories/base/base_inventory_snapshots_repository.h @@ -39,7 +39,7 @@ public: int charid; int slotid; int itemid; - int16 charges; + int charges; int color; int augslot1; int augslot2; @@ -47,7 +47,7 @@ public: int augslot4; int augslot5; int augslot6; - int8 instnodrop; + int instnodrop; std::string custom_data; int ornamenticon; int ornamentidfile; diff --git a/common/repositories/base/base_item_tick_repository.h b/common/repositories/base/base_item_tick_repository.h index 0c4ddc5b0..deabd41b9 100644 --- a/common/repositories/base/base_item_tick_repository.h +++ b/common/repositories/base/base_item_tick_repository.h @@ -40,7 +40,7 @@ public: int it_level; int it_id; std::string it_qglobal; - int8 it_bagslot; + int it_bagslot; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_items_repository.h b/common/repositories/base/base_items_repository.h index 81a5f261e..fe36db64a 100644 --- a/common/repositories/base/base_items_repository.h +++ b/common/repositories/base/base_items_repository.h @@ -36,7 +36,7 @@ class BaseItemsRepository { public: struct Items { int id; - int16 minstatus; + int minstatus; std::string Name; int aagi; int ac; @@ -44,23 +44,23 @@ public: int acha; int adex; int aint; - int8 artifactflag; + int artifactflag; int asta; int astr; int attack; int augrestrict; - int8 augslot1type; - int8 augslot1visible; - int8 augslot2type; - int8 augslot2visible; - int8 augslot3type; - int8 augslot3visible; - int8 augslot4type; - int8 augslot4visible; - int8 augslot5type; - int8 augslot5visible; - int8 augslot6type; - int8 augslot6visible; + int augslot1type; + int augslot1visible; + int augslot2type; + int augslot2visible; + int augslot3type; + int augslot3visible; + int augslot4type; + int augslot4visible; + int augslot5type; + int augslot5visible; + int augslot6type; + int augslot6visible; int augtype; int avoidance; int awis; @@ -134,7 +134,7 @@ public: int mr; int nodrop; int norent; - int8 pendingloreflag; + int pendingloreflag; int pr; int procrate; int races; @@ -152,7 +152,7 @@ public: int spellshield; int strikethrough; int stunresist; - int8 summonedflag; + int summonedflag; int tradeskills; int favor; int weight; @@ -260,42 +260,42 @@ public: std::string wornname; std::string focusname; std::string scrollname; - int16 dsmitigation; - int16 heroic_str; - int16 heroic_int; - int16 heroic_wis; - int16 heroic_agi; - int16 heroic_dex; - int16 heroic_sta; - int16 heroic_cha; - int16 heroic_pr; - int16 heroic_dr; - int16 heroic_fr; - int16 heroic_cr; - int16 heroic_mr; - int16 heroic_svcorrup; - int16 healamt; - int16 spelldmg; - int16 clairvoyance; - int16 backstabdmg; + int dsmitigation; + int heroic_str; + int heroic_int; + int heroic_wis; + int heroic_agi; + int heroic_dex; + int heroic_sta; + int heroic_cha; + int heroic_pr; + int heroic_dr; + int heroic_fr; + int heroic_cr; + int heroic_mr; + int heroic_svcorrup; + int healamt; + int spelldmg; + int clairvoyance; + int backstabdmg; std::string created; - int16 elitematerial; - int16 ldonsellbackrate; - int16 scriptfileid; - int16 expendablearrow; - int16 powersourcecapacity; - int16 bardeffect; - int16 bardeffecttype; - int16 bardlevel2; - int16 bardlevel; - int16 bardunk1; - int16 bardunk2; - int16 bardunk3; - int16 bardunk4; - int16 bardunk5; + int elitematerial; + int ldonsellbackrate; + int scriptfileid; + int expendablearrow; + int powersourcecapacity; + int bardeffect; + int bardeffecttype; + int bardlevel2; + int bardlevel; + int bardunk1; + int bardunk2; + int bardunk3; + int bardunk4; + int bardunk5; std::string bardname; - int16 bardunk7; - int16 UNK214; + int bardunk7; + int UNK214; int UNK219; int UNK220; int UNK221; diff --git a/common/repositories/base/base_ldon_trap_templates_repository.h b/common/repositories/base/base_ldon_trap_templates_repository.h index 7b437c6d5..2864117b2 100644 --- a/common/repositories/base/base_ldon_trap_templates_repository.h +++ b/common/repositories/base/base_ldon_trap_templates_repository.h @@ -35,11 +35,11 @@ class BaseLdonTrapTemplatesRepository { public: struct LdonTrapTemplates { - int id; - int8 type; - int16 spell_id; - int16 skill; - int8 locked; + int id; + int type; + int spell_id; + int skill; + int locked; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_lfguild_repository.h b/common/repositories/base/base_lfguild_repository.h index 4f5f7fff8..32dcd5fdf 100644 --- a/common/repositories/base/base_lfguild_repository.h +++ b/common/repositories/base/base_lfguild_repository.h @@ -35,11 +35,11 @@ class BaseLfguildRepository { public: struct Lfguild { - int8 type; + int type; std::string name; std::string comment; - int8 fromlevel; - int8 tolevel; + int fromlevel; + int tolevel; int classes; int aacount; int timezone; diff --git a/common/repositories/base/base_logsys_categories_repository.h b/common/repositories/base/base_logsys_categories_repository.h index 2d21ec28f..a10744651 100644 --- a/common/repositories/base/base_logsys_categories_repository.h +++ b/common/repositories/base/base_logsys_categories_repository.h @@ -37,9 +37,9 @@ public: struct LogsysCategories { int log_category_id; std::string log_category_description; - int16 log_to_console; - int16 log_to_file; - int16 log_to_gmsay; + int log_to_console; + int log_to_file; + int log_to_gmsay; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h index 7e2a99929..830a9ea49 100644 --- a/common/repositories/base/base_lootdrop_entries_repository.h +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -37,13 +37,13 @@ public: struct LootdropEntries { int lootdrop_id; int item_id; - int16 item_charges; - int8 equip_item; + int item_charges; + int equip_item; float chance; float disabled_chance; - int8 minlevel; - int8 maxlevel; - int8 multiplier; + int minlevel; + int maxlevel; + int multiplier; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_lootdrop_repository.h b/common/repositories/base/base_lootdrop_repository.h index e1b41634a..081adb9bf 100644 --- a/common/repositories/base/base_lootdrop_repository.h +++ b/common/repositories/base/base_lootdrop_repository.h @@ -37,8 +37,8 @@ public: struct Lootdrop { int id; std::string name; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_loottable_entries_repository.h b/common/repositories/base/base_loottable_entries_repository.h index 712e8ffa9..d405b0894 100644 --- a/common/repositories/base/base_loottable_entries_repository.h +++ b/common/repositories/base/base_loottable_entries_repository.h @@ -37,9 +37,9 @@ public: struct LoottableEntries { int loottable_id; int lootdrop_id; - int8 multiplier; - int8 droplimit; - int8 mindrop; + int multiplier; + int droplimit; + int mindrop; float probability; }; diff --git a/common/repositories/base/base_loottable_repository.h b/common/repositories/base/base_loottable_repository.h index f301c8a4b..2fee78710 100644 --- a/common/repositories/base/base_loottable_repository.h +++ b/common/repositories/base/base_loottable_repository.h @@ -40,9 +40,9 @@ public: int mincash; int maxcash; int avgcoin; - int8 done; - int8 min_expansion; - int8 max_expansion; + int done; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_mail_repository.h b/common/repositories/base/base_mail_repository.h index 5b92400a9..efc14bab4 100644 --- a/common/repositories/base/base_mail_repository.h +++ b/common/repositories/base/base_mail_repository.h @@ -42,7 +42,7 @@ public: std::string subject; std::string body; std::string to; - int8 status; + int status; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_merchantlist_repository.h b/common/repositories/base/base_merchantlist_repository.h index ea32bddba..0d72eaa5b 100644 --- a/common/repositories/base/base_merchantlist_repository.h +++ b/common/repositories/base/base_merchantlist_repository.h @@ -38,13 +38,13 @@ public: int merchantid; int slot; int item; - int16 faction_required; - int8 level_required; - int16 alt_currency_cost; + int faction_required; + int level_required; + int alt_currency_cost; int classes_required; int probability; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_merchantlist_temp_repository.h b/common/repositories/base/base_merchantlist_temp_repository.h index a2f22121c..23ce44ac5 100644 --- a/common/repositories/base/base_merchantlist_temp_repository.h +++ b/common/repositories/base/base_merchantlist_temp_repository.h @@ -35,10 +35,10 @@ class BaseMerchantlistTempRepository { public: struct MerchantlistTemp { - int npcid; - int8 slot; - int itemid; - int charges; + int npcid; + int slot; + int itemid; + int charges; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_emotes_repository.h b/common/repositories/base/base_npc_emotes_repository.h index 55bcba51e..286c89783 100644 --- a/common/repositories/base/base_npc_emotes_repository.h +++ b/common/repositories/base/base_npc_emotes_repository.h @@ -37,8 +37,8 @@ public: struct NpcEmotes { int id; int emoteid; - int8 event_; - int8 type; + int event_; + int type; std::string text; }; diff --git a/common/repositories/base/base_npc_faction_entries_repository.h b/common/repositories/base/base_npc_faction_entries_repository.h index c24952184..396021a62 100644 --- a/common/repositories/base/base_npc_faction_entries_repository.h +++ b/common/repositories/base/base_npc_faction_entries_repository.h @@ -35,11 +35,11 @@ class BaseNpcFactionEntriesRepository { public: struct NpcFactionEntries { - int npc_faction_id; - int faction_id; - int value; - int8 npc_value; - int8 temp; + int npc_faction_id; + int faction_id; + int value; + int npc_value; + int temp; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_faction_repository.h b/common/repositories/base/base_npc_faction_repository.h index 91a6a2502..f20d4632f 100644 --- a/common/repositories/base/base_npc_faction_repository.h +++ b/common/repositories/base/base_npc_faction_repository.h @@ -38,7 +38,7 @@ public: int id; std::string name; int primaryfaction; - int8 ignore_primary_assist; + int ignore_primary_assist; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_spells_effects_entries_repository.h b/common/repositories/base/base_npc_spells_effects_entries_repository.h index 42bee911c..5117c4f36 100644 --- a/common/repositories/base/base_npc_spells_effects_entries_repository.h +++ b/common/repositories/base/base_npc_spells_effects_entries_repository.h @@ -35,14 +35,14 @@ class BaseNpcSpellsEffectsEntriesRepository { public: struct NpcSpellsEffectsEntries { - int id; - int npc_spells_effects_id; - int16 spell_effect_id; - int8 minlevel; - int8 maxlevel; - int se_base; - int se_limit; - int se_max; + int id; + int npc_spells_effects_id; + int spell_effect_id; + int minlevel; + int maxlevel; + int se_base; + int se_limit; + int se_max; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_spells_entries_repository.h b/common/repositories/base/base_npc_spells_entries_repository.h index 828df44ea..1ae15be21 100644 --- a/common/repositories/base/base_npc_spells_entries_repository.h +++ b/common/repositories/base/base_npc_spells_entries_repository.h @@ -35,18 +35,18 @@ class BaseNpcSpellsEntriesRepository { public: struct NpcSpellsEntries { - int id; - int npc_spells_id; - int16 spellid; - int type; - int8 minlevel; - int8 maxlevel; - int16 manacost; - int recast_delay; - int16 priority; - int resist_adjust; - int16 min_hp; - int16 max_hp; + int id; + int npc_spells_id; + int spellid; + int type; + int minlevel; + int maxlevel; + int manacost; + int recast_delay; + int priority; + int resist_adjust; + int min_hp; + int max_hp; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_spells_repository.h b/common/repositories/base/base_npc_spells_repository.h index a6b8fda6b..444a3a3da 100644 --- a/common/repositories/base/base_npc_spells_repository.h +++ b/common/repositories/base/base_npc_spells_repository.h @@ -38,24 +38,24 @@ public: int id; std::string name; int parent_list; - int16 attack_proc; - int8 proc_chance; - int16 range_proc; - int16 rproc_chance; - int16 defensive_proc; - int16 dproc_chance; + int attack_proc; + int proc_chance; + int range_proc; + int rproc_chance; + int defensive_proc; + int dproc_chance; int fail_recast; int engaged_no_sp_recast_min; int engaged_no_sp_recast_max; - int8 engaged_b_self_chance; - int8 engaged_b_other_chance; - int8 engaged_d_chance; + int engaged_b_self_chance; + int engaged_b_other_chance; + int engaged_d_chance; int pursue_no_sp_recast_min; int pursue_no_sp_recast_max; - int8 pursue_d_chance; + int pursue_d_chance; int idle_no_sp_recast_min; int idle_no_sp_recast_max; - int8 idle_b_chance; + int idle_b_chance; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_types_repository.h b/common/repositories/base/base_npc_types_repository.h index 551372bfd..c85eba178 100644 --- a/common/repositories/base/base_npc_types_repository.h +++ b/common/repositories/base/base_npc_types_repository.h @@ -38,15 +38,15 @@ public: int id; std::string name; std::string lastname; - int8 level; - int16 race; - int8 class; + int level; + int race; + int class; int bodytype; int hp; int mana; - int8 gender; - int8 texture; - int8 helmtexture; + int gender; + int texture; + int helmtexture; int herosforgemodel; float size; int hp_regen_rate; @@ -61,7 +61,7 @@ public: int trap_template; int mindmg; int maxdmg; - int16 attack_count; + int attack_count; std::string npcspecialattks; std::string special_abilities; int aggroradius; @@ -77,32 +77,32 @@ public: int drakkin_tattoo; int drakkin_details; int armortint_id; - int8 armortint_red; - int8 armortint_green; - int8 armortint_blue; + int armortint_red; + int armortint_green; + int armortint_blue; int d_melee_texture1; int d_melee_texture2; std::string ammo_idfile; - int8 prim_melee_type; - int8 sec_melee_type; - int8 ranged_type; + int prim_melee_type; + int sec_melee_type; + int ranged_type; float runspeed; - int16 MR; - int16 CR; - int16 DR; - int16 FR; - int16 PR; - int16 Corrup; - int16 PhR; - int16 see_invis; - int16 see_invis_undead; + int MR; + int CR; + int DR; + int FR; + int PR; + int Corrup; + int PhR; + int see_invis; + int see_invis_undead; int qglobal; - int16 AC; - int8 npc_aggro; - int8 spawn_limit; + int AC; + int npc_aggro; + int spawn_limit; float attack_speed; - int8 attack_delay; - int8 findable; + int attack_delay; + int findable; int STR; int STA; int DEX; @@ -110,53 +110,53 @@ public: int _INT; int WIS; int CHA; - int8 see_hide; - int8 see_improved_hide; - int8 trackable; - int8 isbot; - int8 exclude; + int see_hide; + int see_improved_hide; + int trackable; + int isbot; + int exclude; int ATK; int Accuracy; int Avoidance; - int16 slow_mitigation; - int16 version; - int8 maxlevel; + int slow_mitigation; + int version; + int maxlevel; int scalerate; - int8 private_corpse; - int8 unique_spawn_by_name; - int8 underwater; - int8 isquest; + int private_corpse; + int unique_spawn_by_name; + int underwater; + int isquest; int emoteid; float spellscale; float healscale; - int8 no_target_hotkey; - int8 raid_target; - int8 armtexture; - int8 bracertexture; - int8 handtexture; - int8 legtexture; - int8 feettexture; - int8 light; - int8 walkspeed; + int no_target_hotkey; + int raid_target; + int armtexture; + int bracertexture; + int handtexture; + int legtexture; + int feettexture; + int light; + int walkspeed; int peqid; - int8 unique_; - int8 fixed; - int8 ignore_despawn; - int8 show_name; - int8 untargetable; - int16 charm_ac; + int unique_; + int fixed; + int ignore_despawn; + int show_name; + int untargetable; + int charm_ac; int charm_min_dmg; int charm_max_dmg; - int8 charm_attack_delay; + int charm_attack_delay; int charm_accuracy_rating; int charm_avoidance_rating; int charm_atk; - int8 skip_global_loot; - int8 rare_spawn; - int8 stuck_behavior; - int16 model; - int8 flymode; - int8 always_aggro; + int skip_global_loot; + int rare_spawn; + int stuck_behavior; + int model; + int flymode; + int always_aggro; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_npc_types_tint_repository.h b/common/repositories/base/base_npc_types_tint_repository.h index c704426ad..f451ee292 100644 --- a/common/repositories/base/base_npc_types_tint_repository.h +++ b/common/repositories/base/base_npc_types_tint_repository.h @@ -37,33 +37,33 @@ public: struct NpcTypesTint { int id; std::string tint_set_name; - int8 red1h; - int8 grn1h; - int8 blu1h; - int8 red2c; - int8 grn2c; - int8 blu2c; - int8 red3a; - int8 grn3a; - int8 blu3a; - int8 red4b; - int8 grn4b; - int8 blu4b; - int8 red5g; - int8 grn5g; - int8 blu5g; - int8 red6l; - int8 grn6l; - int8 blu6l; - int8 red7f; - int8 grn7f; - int8 blu7f; - int8 red8x; - int8 grn8x; - int8 blu8x; - int8 red9x; - int8 grn9x; - int8 blu9x; + int red1h; + int grn1h; + int blu1h; + int red2c; + int grn2c; + int blu2c; + int red3a; + int grn3a; + int blu3a; + int red4b; + int grn4b; + int blu4b; + int red5g; + int grn5g; + int blu5g; + int red6l; + int grn6l; + int blu6l; + int red7f; + int grn7f; + int blu7f; + int red8x; + int grn8x; + int blu8x; + int red9x; + int grn9x; + int blu9x; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_object_contents_repository.h b/common/repositories/base/base_object_contents_repository.h index 3b4b21859..c1b183cce 100644 --- a/common/repositories/base/base_object_contents_repository.h +++ b/common/repositories/base/base_object_contents_repository.h @@ -39,7 +39,7 @@ public: int parentid; int bagidx; int itemid; - int16 charges; + int charges; std::string droptime; int augslot1; int augslot2; diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h index 92db58261..e8f340f22 100644 --- a/common/repositories/base/base_object_repository.h +++ b/common/repositories/base/base_object_repository.h @@ -37,13 +37,13 @@ public: struct Object { int id; int zoneid; - int16 version; + int version; float xpos; float ypos; float zpos; float heading; int itemid; - int16 charges; + int charges; std::string objectname; int type; int icon; diff --git a/common/repositories/base/base_perl_event_export_settings_repository.h b/common/repositories/base/base_perl_event_export_settings_repository.h index 95029bdb3..f2a73afc7 100644 --- a/common/repositories/base/base_perl_event_export_settings_repository.h +++ b/common/repositories/base/base_perl_event_export_settings_repository.h @@ -37,11 +37,11 @@ public: struct PerlEventExportSettings { int event_id; std::string event_description; - int16 export_qglobals; - int16 export_mob; - int16 export_zone; - int16 export_item; - int16 export_event; + int export_qglobals; + int export_mob; + int export_zone; + int export_item; + int export_event; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_petitions_repository.h b/common/repositories/base/base_petitions_repository.h index 61f642f9a..033f7120e 100644 --- a/common/repositories/base/base_petitions_repository.h +++ b/common/repositories/base/base_petitions_repository.h @@ -49,7 +49,7 @@ public: int charlevel; int checkouts; int unavailables; - int8 ischeckedout; + int ischeckedout; int senttime; }; diff --git a/common/repositories/base/base_pets_repository.h b/common/repositories/base/base_pets_repository.h index ebc99527f..ef91281ce 100644 --- a/common/repositories/base/base_pets_repository.h +++ b/common/repositories/base/base_pets_repository.h @@ -38,10 +38,10 @@ public: std::string type; int petpower; int npcID; - int8 temp; - int8 petcontrol; - int8 petnaming; - int8 monsterflag; + int temp; + int petcontrol; + int petnaming; + int monsterflag; int equipmentset; }; diff --git a/common/repositories/base/base_raid_details_repository.h b/common/repositories/base/base_raid_details_repository.h index 2776eaaad..51b293ea4 100644 --- a/common/repositories/base/base_raid_details_repository.h +++ b/common/repositories/base/base_raid_details_repository.h @@ -37,7 +37,7 @@ public: struct RaidDetails { int raidid; int loottype; - int8 locked; + int locked; std::string motd; }; diff --git a/common/repositories/base/base_raid_members_repository.h b/common/repositories/base/base_raid_members_repository.h index 6f33506d9..2878ea884 100644 --- a/common/repositories/base/base_raid_members_repository.h +++ b/common/repositories/base/base_raid_members_repository.h @@ -38,12 +38,12 @@ public: int raidid; int charid; int groupid; - int8 _class; - int8 level; + int _class; + int level; std::string name; - int8 isgroupleader; - int8 israidleader; - int8 islooter; + int isgroupleader; + int israidleader; + int islooter; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_respawn_times_repository.h b/common/repositories/base/base_respawn_times_repository.h index 9eaac14d9..e95598529 100644 --- a/common/repositories/base/base_respawn_times_repository.h +++ b/common/repositories/base/base_respawn_times_repository.h @@ -35,10 +35,10 @@ class BaseRespawnTimesRepository { public: struct RespawnTimes { - int id; - int start; - int duration; - int16 instance_id; + int id; + int start; + int duration; + int instance_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_rule_sets_repository.h b/common/repositories/base/base_rule_sets_repository.h index b4b024525..0d0f48d43 100644 --- a/common/repositories/base/base_rule_sets_repository.h +++ b/common/repositories/base/base_rule_sets_repository.h @@ -35,7 +35,7 @@ class BaseRuleSetsRepository { public: struct RuleSets { - int8 ruleset_id; + int ruleset_id; std::string name; }; diff --git a/common/repositories/base/base_rule_values_repository.h b/common/repositories/base/base_rule_values_repository.h index a92a89c68..749b18a87 100644 --- a/common/repositories/base/base_rule_values_repository.h +++ b/common/repositories/base/base_rule_values_repository.h @@ -35,7 +35,7 @@ class BaseRuleValuesRepository { public: struct RuleValues { - int8 ruleset_id; + int ruleset_id; std::string rule_name; std::string rule_value; std::string notes; diff --git a/common/repositories/base/base_skill_caps_repository.h b/common/repositories/base/base_skill_caps_repository.h index 06ad2ba34..561aaeef7 100644 --- a/common/repositories/base/base_skill_caps_repository.h +++ b/common/repositories/base/base_skill_caps_repository.h @@ -35,11 +35,11 @@ class BaseSkillCapsRepository { public: struct SkillCaps { - int8 skillID; - int8 class; - int8 level; - int cap; - int8 class_; + int skillID; + int class; + int level; + int cap; + int class_; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h index 003b135b2..ffff6b294 100644 --- a/common/repositories/base/base_spawn2_repository.h +++ b/common/repositories/base/base_spawn2_repository.h @@ -38,7 +38,7 @@ public: int id; int spawngroupID; std::string zone; - int16 version; + int version; float x; float y; float z; @@ -48,8 +48,8 @@ public: int pathgrid; int _condition; int cond_value; - int8 enabled; - int8 animation; + int enabled; + int animation; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_spawn_condition_values_repository.h b/common/repositories/base/base_spawn_condition_values_repository.h index 5e27e3a66..fbcac8e70 100644 --- a/common/repositories/base/base_spawn_condition_values_repository.h +++ b/common/repositories/base/base_spawn_condition_values_repository.h @@ -36,7 +36,7 @@ class BaseSpawnConditionValuesRepository { public: struct SpawnConditionValues { int id; - int8 value; + int value; std::string zone; int instance_id; }; diff --git a/common/repositories/base/base_spawn_conditions_repository.h b/common/repositories/base/base_spawn_conditions_repository.h index 5d81e44b6..967e038fa 100644 --- a/common/repositories/base/base_spawn_conditions_repository.h +++ b/common/repositories/base/base_spawn_conditions_repository.h @@ -38,7 +38,7 @@ public: std::string zone; int id; int value; - int8 onchange; + int onchange; std::string name; }; diff --git a/common/repositories/base/base_spawn_events_repository.h b/common/repositories/base/base_spawn_events_repository.h index 0a89251a5..aa871a7b9 100644 --- a/common/repositories/base/base_spawn_events_repository.h +++ b/common/repositories/base/base_spawn_events_repository.h @@ -40,15 +40,15 @@ public: int cond_id; std::string name; int period; - int8 next_minute; - int8 next_hour; - int8 next_day; - int8 next_month; + int next_minute; + int next_hour; + int next_day; + int next_month; int next_year; - int8 enabled; - int8 action; + int enabled; + int action; int argument; - int8 strict; + int strict; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_spawnentry_repository.h b/common/repositories/base/base_spawnentry_repository.h index 48d24415e..66bdb4060 100644 --- a/common/repositories/base/base_spawnentry_repository.h +++ b/common/repositories/base/base_spawnentry_repository.h @@ -35,10 +35,10 @@ class BaseSpawnentryRepository { public: struct Spawnentry { - int spawngroupID; - int npcID; - int16 chance; - int condition_value_filter; + int spawngroupID; + int npcID; + int chance; + int condition_value_filter; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_spawngroup_repository.h b/common/repositories/base/base_spawngroup_repository.h index a67965be0..fceacd2b0 100644 --- a/common/repositories/base/base_spawngroup_repository.h +++ b/common/repositories/base/base_spawngroup_repository.h @@ -37,7 +37,7 @@ public: struct Spawngroup { int id; std::string name; - int8 spawn_limit; + int spawn_limit; float dist; float max_x; float min_x; @@ -45,9 +45,9 @@ public: float min_y; int delay; int mindelay; - int8 despawn; + int despawn; int despawn_timer; - int8 wp_spawns; + int wp_spawns; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h index eb5c882fe..770c9f9fd 100644 --- a/common/repositories/base/base_start_zones_repository.h +++ b/common/repositories/base/base_start_zones_repository.h @@ -49,9 +49,9 @@ public: float bind_x; float bind_y; float bind_z; - int8 select_rank; - int8 min_expansion; - int8 max_expansion; + int select_rank; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_starting_items_repository.h b/common/repositories/base/base_starting_items_repository.h index 4c932d200..5efab9ab4 100644 --- a/common/repositories/base/base_starting_items_repository.h +++ b/common/repositories/base/base_starting_items_repository.h @@ -41,11 +41,11 @@ public: int deityid; int zoneid; int itemid; - int8 item_charges; - int8 gm; + int item_charges; + int gm; int slot; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_task_activities_repository.h b/common/repositories/base/base_task_activities_repository.h index 2b09b0417..6847c12a0 100644 --- a/common/repositories/base/base_task_activities_repository.h +++ b/common/repositories/base/base_task_activities_repository.h @@ -38,7 +38,7 @@ public: int taskid; int activityid; int step; - int8 activitytype; + int activitytype; std::string target_name; std::string item_list; std::string skill_list; @@ -49,7 +49,7 @@ public: int goalcount; int delivertonpc; std::string zones; - int8 optional; + int optional; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_tasks_repository.h b/common/repositories/base/base_tasks_repository.h index 34a5bae10..641d1733c 100644 --- a/common/repositories/base/base_tasks_repository.h +++ b/common/repositories/base/base_tasks_repository.h @@ -36,19 +36,19 @@ class BaseTasksRepository { public: struct Tasks { int id; - int8 type; + int type; int duration; - int8 duration_code; + int duration_code; std::string title; std::string description; std::string reward; int rewardid; int cashreward; int xpreward; - int8 rewardmethod; - int8 minlevel; - int8 maxlevel; - int8 repeatable; + int rewardmethod; + int minlevel; + int maxlevel; + int repeatable; int faction_reward; std::string completion_emote; }; diff --git a/common/repositories/base/base_timers_repository.h b/common/repositories/base/base_timers_repository.h index 8a87ff3fd..459c85c28 100644 --- a/common/repositories/base/base_timers_repository.h +++ b/common/repositories/base/base_timers_repository.h @@ -35,11 +35,11 @@ class BaseTimersRepository { public: struct Timers { - int char_id; - int type; - int start; - int duration; - int8 enable; + int char_id; + int type; + int start; + int duration; + int enable; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_titles_repository.h b/common/repositories/base/base_titles_repository.h index 0ed79fcc9..5bb5cd9f5 100644 --- a/common/repositories/base/base_titles_repository.h +++ b/common/repositories/base/base_titles_repository.h @@ -36,21 +36,21 @@ class BaseTitlesRepository { public: struct Titles { int id; - int8 skill_id; + int skill_id; int min_skill_value; int max_skill_value; int min_aa_points; int max_aa_points; - int8 class; - int8 gender; + int class; + int gender; int char_id; int status; int item_id; std::string prefix; std::string suffix; int title_set; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_trader_repository.h b/common/repositories/base/base_trader_repository.h index bfdf1e54b..71bd9a83f 100644 --- a/common/repositories/base/base_trader_repository.h +++ b/common/repositories/base/base_trader_repository.h @@ -35,12 +35,12 @@ class BaseTraderRepository { public: struct Trader { - int char_id; - int item_id; - int serialnumber; - int charges; - int item_cost; - int8 slot_id; + int char_id; + int item_id; + int serialnumber; + int charges; + int item_cost; + int slot_id; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_tradeskill_recipe_entries_repository.h b/common/repositories/base/base_tradeskill_recipe_entries_repository.h index 3efa08866..dbab250a0 100644 --- a/common/repositories/base/base_tradeskill_recipe_entries_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_entries_repository.h @@ -35,14 +35,14 @@ class BaseTradeskillRecipeEntriesRepository { public: struct TradeskillRecipeEntries { - int id; - int recipe_id; - int item_id; - int8 successcount; - int8 failcount; - int8 componentcount; - int8 salvagecount; - int8 iscontainer; + int id; + int recipe_id; + int item_id; + int successcount; + int failcount; + int componentcount; + int salvagecount; + int iscontainer; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_tradeskill_recipe_repository.h b/common/repositories/base/base_tradeskill_recipe_repository.h index 9a850174f..2716abbb7 100644 --- a/common/repositories/base/base_tradeskill_recipe_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_repository.h @@ -37,17 +37,17 @@ public: struct TradeskillRecipe { int id; std::string name; - int16 tradeskill; - int16 skillneeded; - int16 trivial; - int8 nofail; - int8 replace_container; + int tradeskill; + int skillneeded; + int trivial; + int nofail; + int replace_container; std::string notes; - int8 must_learn; - int8 quest; - int8 enabled; - int8 min_expansion; - int8 max_expansion; + int must_learn; + int quest; + int enabled; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h index cb1643048..ff1bc8474 100644 --- a/common/repositories/base/base_traps_repository.h +++ b/common/repositories/base/base_traps_repository.h @@ -37,11 +37,11 @@ public: struct Traps { int id; std::string zone; - int16 version; + int version; int x; int y; int z; - int8 chance; + int chance; float maxzdiff; float radius; int effect; @@ -52,12 +52,12 @@ public: int level; int respawn_time; int respawn_var; - int8 triggered_number; - int8 group; - int8 despawn_when_triggered; - int8 undetectable; - int8 min_expansion; - int8 max_expansion; + int triggered_number; + int group; + int despawn_when_triggered; + int undetectable; + int min_expansion; + int max_expansion; std::string content_flags; }; diff --git a/common/repositories/base/base_tributes_repository.h b/common/repositories/base/base_tributes_repository.h index b6b8d4745..d3120d9ae 100644 --- a/common/repositories/base/base_tributes_repository.h +++ b/common/repositories/base/base_tributes_repository.h @@ -39,7 +39,7 @@ public: int unknown; std::string name; std::string descr; - int8 isguild; + int isguild; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_veteran_reward_templates_repository.h b/common/repositories/base/base_veteran_reward_templates_repository.h index 4f8366470..eeade8c23 100644 --- a/common/repositories/base/base_veteran_reward_templates_repository.h +++ b/common/repositories/base/base_veteran_reward_templates_repository.h @@ -38,8 +38,8 @@ public: int claim_id; std::string name; int item_id; - int16 charges; - int8 reward_slot; + int charges; + int reward_slot; }; static std::string PrimaryKey() diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index 708e5fe31..1b84254ab 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -38,7 +38,7 @@ public: int id; std::string zone; int version; - int16 number; + int number; float y; float x; float z; @@ -47,13 +47,13 @@ public: float target_x; float target_z; float target_heading; - int16 zoneinst; + int zoneinst; int target_zone_id; int target_instance; float buffer; int client_version_mask; - int8 min_expansion; - int8 max_expansion; + int min_expansion; + int max_expansion; std::string content_flags; }; From b6b008e74a90c7bf41db13716202bad58ba39735 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Apr 2020 19:52:19 -0500 Subject: [PATCH 120/272] Add tenancy support to the dump service --- common/database/database_dump_service.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/common/database/database_dump_service.cpp b/common/database/database_dump_service.cpp index d505a1a24..df083901d 100644 --- a/common/database/database_dump_service.cpp +++ b/common/database/database_dump_service.cpp @@ -128,12 +128,23 @@ std::string DatabaseDumpService::GetMySQLVersion() std::string DatabaseDumpService::GetBaseMySQLDumpCommand() { auto config = EQEmuConfig::get(); + if (IsDumpContentTables() && !config->ContentDbHost.empty()) { + return fmt::format( + "mysqldump -u {} -p{} -h {} --port={} {}", + config->ContentDbUsername, + config->ContentDbPassword, + config->ContentDbHost, + config->ContentDbPort, + config->ContentDbName + ); + }; return fmt::format( - "mysqldump -u {} -p{} -h {} {}", + "mysqldump -u {} -p{} -h {} --port={} {}", config->DatabaseUsername, config->DatabasePassword, config->DatabaseHost, + config->DatabasePort, config->DatabaseDB ); } From 2159b5db2dabee4d644a33662cf6db3a7e2a9e23 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 21 Apr 2020 02:10:52 -0500 Subject: [PATCH 121/272] Add damageshieldtypes to content tables --- common/database_schema.h | 1 + 1 file changed, 1 insertion(+) diff --git a/common/database_schema.h b/common/database_schema.h index e86230f9d..0b6536d96 100644 --- a/common/database_schema.h +++ b/common/database_schema.h @@ -179,6 +179,7 @@ namespace DatabaseSchema { "books", "char_create_combinations", "char_create_point_allocations", + "damageshieldtypes", "doors", "faction_base_data", "faction_list", From 5989edb6ecb01c83edddbc2dc0a4d9546930163d Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 21 Apr 2020 09:09:30 -0400 Subject: [PATCH 122/272] Fix for static zone issue with mobs congregating after last player zones --- common/ruletypes.h | 1 + zone/entity.cpp | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 2f5b9f246..f4ca7c2d9 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -280,6 +280,7 @@ RULE_BOOL(Zone, UseZoneController, true, "Enables the ability to use persistent RULE_BOOL(Zone, EnableZoneControllerGlobals, false, "Enables the ability to use quest globals with the zone controller NPC") RULE_INT(Zone, GlobalLootMultiplier, 1, "Sets Global Loot drop multiplier for database based drops, useful for double, triple loot etc") RULE_BOOL(Zone, KillProcessOnDynamicShutdown, true, "When process has booted a zone and has hit its zone shut down timer, it will hard kill the process to free memory back to the OS") +RULE_INT(Zone, SecondsBeforeIdle, 60, "Seconds before IDLE_WHEN_EMPTY define kicks in") RULE_CATEGORY_END() RULE_CATEGORY(Map) diff --git a/zone/entity.cpp b/zone/entity.cpp index 23ff268fc..0441aac48 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -498,11 +498,30 @@ void EntityList::MobProcess() size_t sz = mob_list.size(); #ifdef IDLE_WHEN_EMPTY + static int old_client_count=0; + static Timer *mob_settle_timer = new Timer(); + + if (numclients == 0 && old_client_count > 0 && + RuleI(Zone, SecondsBeforeIdle) > 0) { + // Start Timer to allow any mobs that chased chars from zone + // to return home. + mob_settle_timer->Start(RuleI(Zone, SecondsBeforeIdle) * 1000); + } + + old_client_count = numclients; + + // Disable settle timer if someone zones into empty zone + if (numclients > 0 || mob_settle_timer->Check()) { + mob_settle_timer->Disable(); + } + if (numclients > 0 || - mob->GetWanderType() == 4 || mob->GetWanderType() == 6) { + mob->GetWanderType() == 4 || mob->GetWanderType() == 6 || + mob_settle_timer->Enabled()) { // Normal processing, or assuring that spawns that should // path and depop do that. Otherwise all of these type mobs - // will be up and at starting positions when idle zone wakes up. + // will be up and at starting positions, or waiting at the zoneline + // if they chased the PCs when idle zone wakes up. mob_dead = !mob->Process(); } else { From 5dc351e5d56b1141756e15a673c5aed7fc6eb40f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 24 Apr 2020 02:22:33 -0500 Subject: [PATCH 123/272] Remove cross boundary dependency in command_who [skip ci] --- zone/command.cpp | 120 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 89 insertions(+), 31 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 634f01206..198933f7d 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -13106,24 +13106,83 @@ void command_databuckets(Client *c, const Seperator *sep) void command_who(Client *c, const Seperator *sep) { std::string query = - "SELECT\n" - " character_data.account_id,\n" - " character_data.name,\n" - " character_data.zone_id,\n" - " COALESCE((select zone.short_name from zone where zoneidnumber = character_data.zone_id LIMIT 1), \"Not Found\") as zone_name,\n" - " character_data.zone_instance,\n" - " COALESCE((select guilds.name from guilds where id = ((select guild_id from guild_members where char_id = character_data.id))), \"\") as guild_name,\n" - " character_data.level,\n" - " character_data.race,\n" - " character_data.class,\n" - " COALESCE((select account.status from account where account.id = character_data.account_id LIMIT 1), 0) as account_status,\n" - " COALESCE((select account.name from account where account.id = character_data.account_id LIMIT 1), \"\") as account_name,\n" - " COALESCE((select account_ip.ip from account_ip where account_ip.accid = character_data.account_id ORDER BY account_ip.lastused DESC LIMIT 1), \"\") as account_ip\n" - "FROM\n" - " character_data\n" - "WHERE\n" - " last_login > (UNIX_TIMESTAMP() - 600)\n" - "ORDER BY character_data.name;"; + SQL ( + SELECT + character_data.account_id, + character_data.name, + character_data.zone_id, + character_data.zone_instance, + COALESCE( + ( + select + guilds.name + from + guilds + where + id = ( + ( + select + guild_id + from + guild_members + where + char_id = character_data.id + ) + ) + ), + "" + ) as guild_name, + character_data.level, + character_data.race, + character_data.class, + COALESCE( + ( + select + account.status + from + account + where + account.id = character_data.account_id + LIMIT + 1 + ), 0 + ) as account_status, + COALESCE( + ( + select + account.name + from + account + where + account.id = character_data.account_id + LIMIT + 1 + ), + 0 + ) as account_name, + COALESCE( + ( + select + account_ip.ip + from + account_ip + where + account_ip.accid = character_data.account_id + ORDER BY + account_ip.lastused DESC + LIMIT + 1 + ), + "" + ) as account_ip + FROM + character_data + WHERE + last_login > (UNIX_TIMESTAMP() - 600) + ORDER BY + character_data.name; + ) + ; auto results = database.QueryDatabase(query); if (!results.Success()) @@ -13146,19 +13205,18 @@ void command_who(Client *c, const Seperator *sep) c->Message(Chat::Magenta, "--------------------"); for (auto row = results.begin(); row != results.end(); ++row) { - auto account_id = static_cast(atoi(row[0])); - std::string player_name = row[1]; - auto zone_id = static_cast(atoi(row[2])); - std::string zone_short_name = row[3]; - auto zone_instance = static_cast(atoi(row[4])); - std::string guild_name = row[5]; - auto player_level = static_cast(atoi(row[6])); - auto player_race = static_cast(atoi(row[7])); - auto player_class = static_cast(atoi(row[8])); - auto account_status = static_cast(atoi(row[9])); - std::string account_name = row[10]; - std::string account_ip = row[11]; - + auto account_id = static_cast(atoi(row[0])); + std::string player_name = row[1]; + auto zone_id = static_cast(atoi(row[2])); + std::string zone_short_name = ZoneName(zone_id); + auto zone_instance = static_cast(atoi(row[3])); + std::string guild_name = row[4]; + auto player_level = static_cast(atoi(row[5])); + auto player_race = static_cast(atoi(row[6])); + auto player_class = static_cast(atoi(row[7])); + auto account_status = static_cast(atoi(row[8])); + std::string account_name = row[9]; + std::string account_ip = row[10]; std::string base_class_name = GetClassIDName(static_cast(player_class), 1); std::string displayed_race_name = GetRaceIDName(static_cast(player_race)); From bf0322f8f677514c6e778cdc7c62bb7803259f9a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 24 Apr 2020 18:15:07 -0500 Subject: [PATCH 124/272] Not sure why we are trying to detete id 0 objects [skip ci] --- zone/object.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zone/object.cpp b/zone/object.cpp index 2a76d9894..95dec590a 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -736,7 +736,10 @@ Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Gro void ZoneDatabase::DeleteObject(uint32 id) { - // delete record of object + if (id == 0) { + return; + } + std::string query = StringFormat("DELETE FROM object WHERE id = %i", id); auto results = QueryDatabase(query); if (!results.Success()) { From 206761d5e843951c4c773ea8a542601906a03ff7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 24 Apr 2020 20:09:59 -0500 Subject: [PATCH 125/272] Force str_tolower on zone name lookups --- world/world_store.cpp | 4 ++-- zone/zone_store.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/world/world_store.cpp b/world/world_store.cpp index 36a88f998..92be2ce95 100644 --- a/world/world_store.cpp +++ b/world/world_store.cpp @@ -21,7 +21,7 @@ #include "world_store.h" WorldStore::WorldStore() = default; -WorldStore::~WorldStore()= default; +WorldStore::~WorldStore() = default; void WorldStore::LoadZones() { @@ -34,7 +34,7 @@ uint32 WorldStore::GetZoneID(const char *in_zone_name) return 0; } - std::string zone_name = in_zone_name; + std::string zone_name = str_tolower(in_zone_name); return GetZoneID(zone_name); } diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp index 4088e4980..bcaaf1f44 100644 --- a/zone/zone_store.cpp +++ b/zone/zone_store.cpp @@ -34,7 +34,7 @@ uint32 ZoneStore::GetZoneID(const char *in_zone_name) return 0; } - std::string zone_name = in_zone_name; + std::string zone_name = str_tolower(in_zone_name); return GetZoneID(zone_name); } From d8b9c3e3de15d09b4bdf786bb684908ed3a7167f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 25 Apr 2020 04:24:22 -0500 Subject: [PATCH 126/272] Fix bad object Z data automatically using Z calcs, works fairly reliably --- zone/zone.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index 04b57f7a4..1a2e498ac 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -266,6 +266,14 @@ bool Zone::LoadZoneObjects() data.tilt_y = atof(row[18]); data.unknown084 = 0; + + glm::vec3 position; + position.x = data.x; + position.y = data.y; + position.z = data.z; + + data.z = zone->zonemap->FindBestZ(position, nullptr); + EQEmu::ItemInstance *inst = nullptr; // FatherNitwit: this dosent seem to work... // tradeskill containers do not have an itemid of 0... at least what I am seeing @@ -341,7 +349,7 @@ void Zone::DumpMerchantList(uint32 npcid) { for (tmp_itr = tmp_merlist.begin(); tmp_itr != tmp_merlist.end(); ++tmp_itr) { ml = *tmp_itr; - + LogInventory("slot[{}] Orig[{}] Item[{}] Charges[{}]", ml.slot, ml.origslot, ml.item, ml.charges); } } @@ -378,7 +386,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg for (tmp_itr = tmp_merlist.begin(); tmp_itr != tmp_merlist.end(); ++tmp_itr) { ml = *tmp_itr; - + if (ml.item == item) { found = true; LogInventory("Item found in temp list at [{}] with [{}] charges", ml.origslot, ml.charges); @@ -402,11 +410,11 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg ml.charges = charges; LogInventory("new charges is [{}] charges", ml.charges); } - + if (!ml.origslot) { ml.origslot = ml.slot; } - + if (charges > 0) { database.SaveMerchantTemp(npcid, ml.origslot, item, ml.charges); tmp_merlist.push_back(ml); @@ -432,7 +440,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg for (tmp_itr = tmp_merlist.begin(); tmp_itr != tmp_merlist.end(); ++tmp_itr) { ml3 = *tmp_itr; slots.push_back(ml3.origslot); - } + } slots.sort(); std::list::const_iterator slots_itr; uint32 first_empty_slot = 0; @@ -445,7 +453,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg } ++idx; - } + } first_empty_slot = idx; @@ -454,7 +462,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg for (tmp_itr = tmp_merlist.begin(); tmp_itr != tmp_merlist.end(); ++tmp_itr) { ml3 = *tmp_itr; slots.push_back(ml3.slot); - } + } slots.sort(); uint32 first_empty_mslot=0; idx = temp_slot_index; @@ -466,7 +474,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg } ++idx; - } + } first_empty_mslot = idx; From 2bcaf2a476913bb6407e6c887b169f4214d53f5a Mon Sep 17 00:00:00 2001 From: Noudess Date: Thu, 30 Apr 2020 11:35:09 -0400 Subject: [PATCH 127/272] Extended Movement Manager to have a FlyTo --- zone/mob_movement_manager.cpp | 164 ++++++++++++++++++++++++++++++++++ zone/mob_movement_manager.h | 1 + 2 files changed, 165 insertions(+) diff --git a/zone/mob_movement_manager.cpp b/zone/mob_movement_manager.cpp index 4ac0c7f23..904bc5246 100644 --- a/zone/mob_movement_manager.cpp +++ b/zone/mob_movement_manager.cpp @@ -263,6 +263,146 @@ protected: double m_total_v_dist; }; +class FlyToCommand : public IMovementCommand { +public: + FlyToCommand(float x, float y, float z, MobMovementMode mob_movement_mode) + { + m_distance_moved_since_correction = 0.0; + m_move_to_x = x; + m_move_to_y = y; + m_move_to_z = z; + m_move_to_mode = mob_movement_mode; + m_last_sent_time = 0.0; + m_last_sent_speed = 0; + m_started = false; + m_total_h_dist = 0.0; + m_total_v_dist = 0.0; + } + + virtual ~FlyToCommand() + { + + } + + /** + * @param mob_movement_manager + * @param mob + * @return + */ + virtual bool Process(MobMovementManager *mob_movement_manager, Mob *mob) + { + if (!mob->IsAIControlled()) { + return true; + } + + //Send a movement packet when you start moving + double current_time = static_cast(Timer::GetCurrentTime()) / 1000.0; + int current_speed = 0; + + if (m_move_to_mode == MovementRunning) { + if (mob->IsFeared()) { + current_speed = mob->GetFearSpeed(); + } + else { + current_speed = mob->GetRunspeed(); + } + } + else { + current_speed = mob->GetWalkspeed(); + } + + if (!m_started) { + m_started = true; + //rotate to the point + mob->SetMoving(true); + mob->SetHeading(mob->CalculateHeadingToTarget(m_move_to_x, m_move_to_y)); + + m_last_sent_speed = current_speed; + m_last_sent_time = current_time; + m_total_h_dist = DistanceNoZ(mob->GetPosition(), glm::vec4(m_move_to_x, m_move_to_y, 0.0f, 0.0f)); + m_total_v_dist = m_move_to_z - mob->GetZ(); + mob_movement_manager->SendCommandToClients(mob, 0.0, 0.0, 0.0, 0.0, current_speed, ClientRangeCloseMedium); + } + + //When speed changes + if (current_speed != m_last_sent_speed) { + m_distance_moved_since_correction = 0.0; + m_last_sent_speed = current_speed; + m_last_sent_time = current_time; + mob_movement_manager->SendCommandToClients(mob, 0.0, 0.0, 0.0, 0.0, current_speed, ClientRangeCloseMedium); + } + + //If x seconds have passed without sending an update. + if (current_time - m_last_sent_time >= 0.5) { + m_distance_moved_since_correction = 0.0; + m_last_sent_speed = current_speed; + m_last_sent_time = current_time; + mob_movement_manager->SendCommandToClients(mob, 0.0, 0.0, 0.0, 0.0, current_speed, ClientRangeCloseMedium); + } + + auto &p = mob->GetPosition(); + glm::vec2 tar(m_move_to_x, m_move_to_y); + glm::vec2 pos(p.x, p.y); + double len = glm::distance(pos, tar); + if (len == 0) { + return true; + } + + mob->SetMoved(true); + + glm::vec2 dir = tar - pos; + glm::vec2 ndir = glm::normalize(dir); + double distance_moved = frame_time * current_speed * 0.4f * 1.45f; + + if (distance_moved > len) { + if (mob->IsNPC()) { + entity_list.ProcessMove(mob->CastToNPC(), m_move_to_x, m_move_to_y, m_move_to_z); + } + + mob->SetPosition(m_move_to_x, m_move_to_y, m_move_to_z); + + if (RuleB(Map, FixZWhenPathing)) { + mob->FixZ(); + } + return true; + } + else { + glm::vec2 npos = pos + (ndir * static_cast(distance_moved)); + + len -= distance_moved; + double total_distance_traveled = m_total_h_dist - len; + double start_z = m_move_to_z - m_total_v_dist; + double z_at_pos = start_z + (m_total_v_dist * (total_distance_traveled / m_total_h_dist)); + + if (mob->IsNPC()) { + entity_list.ProcessMove(mob->CastToNPC(), npos.x, npos.y, z_at_pos); + } + + mob->SetPosition(npos.x, npos.y, z_at_pos); + } + + return false; + } + + virtual bool Started() const + { + return m_started; + } + +protected: + double m_distance_moved_since_correction; + double m_move_to_x; + double m_move_to_y; + double m_move_to_z; + MobMovementMode m_move_to_mode; + bool m_started; + + double m_last_sent_time; + int m_last_sent_speed; + double m_total_h_dist; + double m_total_v_dist; +}; + class SwimToCommand : public MoveToCommand { public: SwimToCommand(float x, float y, float z, MobMovementMode mob_movement_mode) : MoveToCommand(x, y, z, mob_movement_mode) @@ -921,6 +1061,8 @@ void MobMovementManager::FillCommandStruct( */ void MobMovementManager::UpdatePath(Mob *who, float x, float y, float z, MobMovementMode mob_movement_mode) { + Mob *target=who->GetTarget(); + if (!zone->HasMap() || !zone->HasWaterMap()) { auto iter = _impl->Entries.find(who); auto &ent = (*iter); @@ -936,6 +1078,16 @@ void MobMovementManager::UpdatePath(Mob *who, float x, float y, float z, MobMove else if (who->IsUnderwaterOnly()) { UpdatePathUnderwater(who, x, y, z, mob_movement_mode); } + // If we can fly, and we have a target and we have LoS, simply fly to them. + // if we ever lose LoS we go back to mesh run mode. + else if (target && who->GetFlyMode() == GravityBehavior::Flying && + who->CheckLosFN(x,y,z,target->GetSize())) { + auto iter = _impl->Entries.find(who); + auto &ent = (*iter); + + PushFlyTo(ent.second, x, y, z, mob_movement_mode); + PushStopMoving(ent.second); + } else { UpdatePathGround(who, x, y, z, mob_movement_mode); } @@ -1275,6 +1427,18 @@ void MobMovementManager::PushRotateTo(MobMovementEntry &ent, Mob *who, float to, ent.Commands.push_back(std::unique_ptr(new RotateToCommand(to, diff > 0 ? 1.0 : -1.0, mob_movement_mode))); } +/** + * @param ent + * @param x + * @param y + * @param z + * @param mob_movement_mode + */ +void MobMovementManager::PushFlyTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode) +{ + ent.Commands.push_back(std::unique_ptr(new FlyToCommand(x, y, z, mob_movement_mode))); +} + /** * @param mob_movement_entry */ diff --git a/zone/mob_movement_manager.h b/zone/mob_movement_manager.h index ff7e08436..85d062804 100644 --- a/zone/mob_movement_manager.h +++ b/zone/mob_movement_manager.h @@ -85,6 +85,7 @@ private: void PushTeleportTo(MobMovementEntry &ent, float x, float y, float z, float heading); void PushMoveTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode); void PushSwimTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode); + void PushFlyTo(MobMovementEntry &ent, float x, float y, float z, MobMovementMode mob_movement_mode); void PushRotateTo(MobMovementEntry &ent, Mob *who, float to, MobMovementMode mob_movement_mode); void PushStopMoving(MobMovementEntry &mob_movement_entry); void PushEvadeCombat(MobMovementEntry &mob_movement_entry); From 263ed3913b94aebfc9ac6ce959e43c469bf3b959 Mon Sep 17 00:00:00 2001 From: = <=isaacseniorx@gmail.com> Date: Wed, 6 May 2020 02:44:17 +0000 Subject: [PATCH 128/272] Don't scale 0 values --- zone/npc.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/zone/npc.cpp b/zone/npc.cpp index 39b1b046b..edc9f88c3 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -2443,18 +2443,27 @@ void NPC::LevelScale() { if (RuleB(NPC, NewLevelScaling)) { if (scalerate == 0 || maxlevel <= 25) { - // pre-pop seems to scale by 20 HP increments while newer by 100 - // We also don't want 100 increments on newer noobie zones, check level - if (zone->GetZoneID() < 200 || level < 48) { - max_hp += (random_level - level) * 20; - base_hp += (random_level - level) * 20; - } else { - max_hp += (random_level - level) * 100; - base_hp += (random_level - level) * 100; + // Don't add HP to dynamically scaled NPCs since this will be calculated later + if (max_hp > 0 || skip_auto_scale) + { + // pre-pop seems to scale by 20 HP increments while newer by 100 + // We also don't want 100 increments on newer noobie zones, check level + if (zone->GetZoneID() < 200 || level < 48) { + max_hp += (random_level - level) * 20; + base_hp += (random_level - level) * 20; + } else { + max_hp += (random_level - level) * 100; + base_hp += (random_level - level) * 100; + } + + current_hp = max_hp; + } + + // Don't add max_dmg to dynamically scaled NPCs since this will be calculated later + if (max_dmg > 0 || skip_auto_scale) + { + max_dmg += (random_level - level) * 2; } - - current_hp = max_hp; - max_dmg += (random_level - level) * 2; } else { uint8 scale_adjust = 1; From 0b03f276609e75be64891d68e9f081292657b766 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 7 May 2020 23:05:07 -0400 Subject: [PATCH 129/272] Add GetNPCBySpawnID() to Perl/Lua. --- zone/entity.cpp | 16 ++++++++++++++++ zone/entity.h | 1 + zone/lua_entity_list.cpp | 6 ++++++ zone/lua_entity_list.h | 1 + zone/perl_entity.cpp | 29 +++++++++++++++++++++++++++++ 5 files changed, 53 insertions(+) diff --git a/zone/entity.cpp b/zone/entity.cpp index 23ff268fc..c80f83ec5 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -1097,6 +1097,22 @@ NPC *EntityList::GetNPCByNPCTypeID(uint32 npc_id) return nullptr; } +NPC *EntityList::GetNPCBySpawnID(uint32 spawn_id) +{ + if (spawn_id == 0 || npc_list.empty()) { + return nullptr; + } + + auto it = npc_list.begin(); + while (it != npc_list.end()) { + if (it->second->GetSpawnGroupId() == spawn_id) { + return it->second; + } + ++it; + } + return nullptr; +} + Mob *EntityList::GetMob(uint16 get_id) { Entity *ent = nullptr; diff --git a/zone/entity.h b/zone/entity.h index 3c182be29..8c705897a 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -166,6 +166,7 @@ public: return nullptr; } NPC *GetNPCByNPCTypeID(uint32 npc_id); + NPC *GetNPCBySpawnID(uint32 spawn_id); inline Merc *GetMercByID(uint16 id) { auto it = merc_list.find(id); diff --git a/zone/lua_entity_list.cpp b/zone/lua_entity_list.cpp index abfc020d6..e4f2b207d 100644 --- a/zone/lua_entity_list.cpp +++ b/zone/lua_entity_list.cpp @@ -80,6 +80,11 @@ Lua_NPC Lua_EntityList::GetNPCByNPCTypeID(int npc_type) { return Lua_NPC(self->GetNPCByNPCTypeID(npc_type)); } +Lua_NPC Lua_EntityList::GetNPCBySpawnID(uint32 spawn_id) { + Lua_Safe_Call_Class(Lua_NPC); + return Lua_NPC(self->GetNPCBySpawnID(spawn_id)); +} + Lua_Client Lua_EntityList::GetClientByName(const char *name) { Lua_Safe_Call_Class(Lua_Client); return Lua_Client(self->GetClientByName(name)); @@ -449,6 +454,7 @@ luabind::scope lua_register_entity_list() { .def("IsMobSpawnedByNpcTypeID", (bool(Lua_EntityList::*)(int))&Lua_EntityList::IsMobSpawnedByNpcTypeID) .def("GetNPCByID", (Lua_NPC(Lua_EntityList::*)(int))&Lua_EntityList::GetNPCByID) .def("GetNPCByNPCTypeID", (Lua_NPC(Lua_EntityList::*)(int))&Lua_EntityList::GetNPCByNPCTypeID) + .def("GetNPCBySpawnID", (Lua_NPC(Lua_EntityList::*)(int))&Lua_EntityList::GetNPCBySpawnID) .def("GetClientByName", (Lua_Client(Lua_EntityList::*)(const char*))&Lua_EntityList::GetClientByName) .def("GetClientByAccID", (Lua_Client(Lua_EntityList::*)(uint32))&Lua_EntityList::GetClientByAccID) .def("GetClientByID", (Lua_Client(Lua_EntityList::*)(int))&Lua_EntityList::GetClientByID) diff --git a/zone/lua_entity_list.h b/zone/lua_entity_list.h index 6b0074674..04030e58e 100644 --- a/zone/lua_entity_list.h +++ b/zone/lua_entity_list.h @@ -54,6 +54,7 @@ public: bool IsMobSpawnedByNpcTypeID(int npc_type); Lua_NPC GetNPCByID(int id); Lua_NPC GetNPCByNPCTypeID(int npc_type); + Lua_NPC GetNPCBySpawnID(uint32 spawn_id); Lua_Client GetClientByName(const char *name); Lua_Client GetClientByAccID(uint32 acct_id); Lua_Client GetClientByID(int id); diff --git a/zone/perl_entity.cpp b/zone/perl_entity.cpp index 0f7fe21c7..3280d0a56 100644 --- a/zone/perl_entity.cpp +++ b/zone/perl_entity.cpp @@ -219,6 +219,34 @@ XS(XS_EntityList_GetNPCByNPCTypeID) { XSRETURN(1); } +XS(XS_EntityList_GetNPCBySpawnID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_EntityList_GetNPCBySpawnID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: EntityList::GetNPCBySpawnID(THIS, spawn_id)"); + { + EntityList *THIS; + NPC *RETVAL; + uint32 spawn_id = (uint32) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "EntityList")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(EntityList *, tmp); + } else { + Perl_croak(aTHX_ "THIS is not of type EntityList"); + } + + if (THIS == nullptr) { + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + } + + RETVAL = THIS->GetNPCBySpawnID(spawn_id); + ST(0) = sv_newmortal(); + sv_setref_pv(ST(0), "NPC", (void *) RETVAL); + } + XSRETURN(1); +} + XS(XS_EntityList_GetClientByName); /* prototype to pass -Wmissing-prototypes */ XS(XS_EntityList_GetClientByName) { dXSARGS; @@ -1998,6 +2026,7 @@ XS(boot_EntityList) { newXSproto(strcpy(buf, "IsMobSpawnedByNpcTypeID"), XS_EntityList_IsMobSpawnedByNpcTypeID, file, "$$"); newXSproto(strcpy(buf, "GetNPCByID"), XS_EntityList_GetNPCByID, file, "$$"); newXSproto(strcpy(buf, "GetNPCByNPCTypeID"), XS_EntityList_GetNPCByNPCTypeID, file, "$$"); + newXSproto(strcpy(buf, "GetNPCBySpawnID"), XS_EntityList_GetNPCBySpawnID, file, "$$"); newXSproto(strcpy(buf, "GetClientByName"), XS_EntityList_GetClientByName, file, "$$"); newXSproto(strcpy(buf, "GetClientByAccID"), XS_EntityList_GetClientByAccID, file, "$$"); newXSproto(strcpy(buf, "GetClientByID"), XS_EntityList_GetClientByID, file, "$$"); From 0a42ded33f51bef4126fdeefe9be8a7810535ef7 Mon Sep 17 00:00:00 2001 From: Noudess Date: Fri, 8 May 2020 09:58:53 -0400 Subject: [PATCH 130/272] Expose client method NotifyNewTitlesAvailable for perl and lua --- zone/lua_client.cpp | 6 ++++++ zone/lua_client.h | 1 + zone/perl_client.cpp | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 955130922..e161c5e20 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1210,6 +1210,11 @@ void Lua_Client::OpenLFGuildWindow() { self->OpenLFGuildWindow(); } +void Lua_Client::NotifyNewTitlesAvailable() { + Lua_Safe_Call_Void(); + self->NotifyNewTitlesAvailable(); +} + void Lua_Client::Signal(uint32 id) { Lua_Safe_Call_Void(); self->Signal(id); @@ -1820,6 +1825,7 @@ luabind::scope lua_register_client() { .def("GetAllMoney", (uint64(Lua_Client::*)(void))&Lua_Client::GetAllMoney) .def("GetMoney", (uint32(Lua_Client::*)(uint8, uint8))&Lua_Client::GetMoney) .def("OpenLFGuildWindow", (void(Lua_Client::*)(void))&Lua_Client::OpenLFGuildWindow) + .def("NotifyNewTitlesAvailable", (void(Lua_Client::*)(void))&Lua_Client::NotifyNewTitlesAvailable) .def("Signal", (void(Lua_Client::*)(uint32))&Lua_Client::Signal) .def("AddAlternateCurrencyValue", (void(Lua_Client::*)(uint32,int))&Lua_Client::AddAlternateCurrencyValue) .def("SetAlternateCurrencyValue", (void(Lua_Client::*)(uint32,int))&Lua_Client::SetAlternateCurrencyValue) diff --git a/zone/lua_client.h b/zone/lua_client.h index b0eb719e8..600b594f2 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -269,6 +269,7 @@ public: uint64 GetAllMoney(); uint32 GetMoney(uint8 type, uint8 subtype); void OpenLFGuildWindow(); + void NotifyNewTitlesAvailable(); void Signal(uint32 id); void AddAlternateCurrencyValue(uint32 currency, int amount); void SetAlternateCurrencyValue(uint32 currency, int amount); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index e46b5e8d4..66cf78084 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -5522,6 +5522,27 @@ XS(XS_Client_OpenLFGuildWindow) { XSRETURN_EMPTY; } +XS(XS_NotifyNewTitlesAvailable); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_NotifyNewTitlesAvailable) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: Client::NotifyNewTitlesAvailable(THIS)"); + { + Client *THIS; + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + THIS->NotifyNewTitlesAvailable(); + } + XSRETURN_EMPTY; +} + XS(XS_Client_SignalClient); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_SignalClient) { dXSARGS; @@ -6568,6 +6589,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "NPCSpawn"), XS_Client_NPCSpawn, file, "$$$;$"); newXSproto(strcpy(buf, "NukeItem"), XS_Client_NukeItem, file, "$$;$"); newXSproto(strcpy(buf, "OpenLFGuildWindow"), XS_Client_OpenLFGuildWindow, file, "$"); + newXSproto(strcpy(buf, "NotifyNewTitlesAvailable"), XS_Client_NotifyNewTitlesAvailable, file, "$"); newXSproto(strcpy(buf, "PlayMP3"), XS_Client_PlayMP3, file, "$;$"); newXSproto(strcpy(buf, "Popup2"), XS_Client_Popup2, file, "$$$;$$$$$$$"); newXSproto(strcpy(buf, "QuestReward"), XS_Client_QuestReward, file, "$$;$$$$$$$"); From 572ad1b6ab4ecca91cd04eea1f5e4396562e3463 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Fri, 8 May 2020 12:56:10 -0400 Subject: [PATCH 131/272] Identify SubType in Item structs in some clients This maybe in older clients as well, but I couldn't verify it and those clients never did anything with this field so it doesn't matter. MQ2 calls this SubClass, but we call the field it's a "sub" of Type so I figured we'd call it SubType. We still need to rename the DB field and handle it server side etc --- common/patches/rof2_structs.h | 4 ++-- common/patches/rof_structs.h | 4 ++-- common/patches/uf_structs.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 10ce35654..92021c283 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -4804,8 +4804,8 @@ struct ItemQuaternaryBodyStruct int32 HealAmt; int32 SpellDmg; int32 Clairvoyance; - uint8 unknown18; //Power Source Capacity or evolve filename? - uint32 evolve_string; // Some String, but being evolution related is just a guess + int32 SubType; + uint8 evolve_string; // Some String, but being evolution related is just a guess uint8 unknown19; uint16 unknown20; uint8 unknown21; diff --git a/common/patches/rof_structs.h b/common/patches/rof_structs.h index 03f1a951a..bdf416724 100644 --- a/common/patches/rof_structs.h +++ b/common/patches/rof_structs.h @@ -4744,8 +4744,8 @@ struct ItemQuaternaryBodyStruct int32 HealAmt; int32 SpellDmg; int32 Clairvoyance; - uint8 unknown18; //Power Source Capacity or evolve filename? - uint32 evolve_string; // Some String, but being evolution related is just a guess + int32 SubType; + uint8 evolve_string; // Some String, but being evolution related is just a guess uint8 unknown19; uint32 unknown20; // Bard Stuff? //uint32 unknown21; diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index b6eb414e1..3a66e2a88 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -4215,8 +4215,8 @@ struct ItemQuaternaryBodyStruct int32 HealAmt; int32 SpellDmg; int32 Clairvoyance; - uint8 unknown18; //Power Source Capacity or evolve filename? - uint32 evolve_string; // Some String, but being evolution related is just a guess + int32 SubType; + uint8 evolve_string; // Some String, but being evolution related is just a guess uint8 unknown19; uint32 unknown20; // Bard Stuff? uint32 unknown21; From 5471774b4c677268ecd83aae6ad2ab8c6f134cc2 Mon Sep 17 00:00:00 2001 From: Noudess Date: Fri, 8 May 2020 18:24:25 -0400 Subject: [PATCH 132/272] Repair prototype --- zone/perl_client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 66cf78084..1c0c42bf5 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -5522,7 +5522,7 @@ XS(XS_Client_OpenLFGuildWindow) { XSRETURN_EMPTY; } -XS(XS_NotifyNewTitlesAvailable); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_NotifyNewTitlesAvailable); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_NotifyNewTitlesAvailable) { dXSARGS; if (items != 1) From 914ea274066b4437dc3c2058e06284c6a9e13d42 Mon Sep 17 00:00:00 2001 From: Jose123456 Date: Sat, 9 May 2020 12:40:33 -0700 Subject: [PATCH 133/272] Compile on Freebsd (#1044) * Compile on Freebsd Small changes needed for compilation on Freebsd. Note that you'll have to pass -DEQEMU_BUILD_ZLIB=OFF on the cmake command line. The bundled zlib-ng does not build on Freebsd even though mainline zlib-ng does. * Fix build errors: typo --- CMakeLists.txt | 5 ++++- common/crash.cpp | 5 +++++ common/proc_launcher.h | 4 ++++ common/util/uuid.cpp | 13 +++++++++++++ zone/main.cpp | 8 +++++++- 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b12e2ee1..c164cfba4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,7 +328,10 @@ IF(UNIX) IF(NOT DARWIN) SET(SERVER_LIBS ${SERVER_LIBS} "rt") ENDIF() - SET(SERVER_LIBS ${SERVER_LIBS} "uuid") + # Freebsd provides uuids in the C library + IF(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + SET(SERVER_LIBS ${SERVER_LIBS} "uuid") + ENDIF() ENDIF() IF(EQEMU_BUILD_LOGIN AND NOT TLS_LIBRARY_ENABLED) diff --git a/common/crash.cpp b/common/crash.cpp index 155bfcf2a..cecb52f02 100644 --- a/common/crash.cpp +++ b/common/crash.cpp @@ -118,6 +118,11 @@ void set_exception_handler() { #include #include +#ifdef __FreeBSD__ +#include +#include +#endif + void print_trace() { auto uid = geteuid(); diff --git a/common/proc_launcher.h b/common/proc_launcher.h index 6289579cd..23b7e523c 100644 --- a/common/proc_launcher.h +++ b/common/proc_launcher.h @@ -24,6 +24,10 @@ #include #include +#ifdef __FreeBSD__ +#include +#endif + //I forced this object to become a singleton because it registers its //signal handler for UNIX class ProcLauncher { diff --git a/common/util/uuid.cpp b/common/util/uuid.cpp index c5b6b9a4d..633ffebaf 100644 --- a/common/util/uuid.cpp +++ b/common/util/uuid.cpp @@ -14,6 +14,10 @@ #include #endif +#ifdef __FreeBSD__ +#include +#endif + unsigned char hexDigitToChar(char ch) { if (ch > 47 && ch < 58) @@ -126,6 +130,15 @@ EQ::Util::UUID EQ::Util::UUID::Generate() return buffer; #endif + +#ifdef __FreeBSD__ + uuid_t l_id; + char l_uuid[37]; + uint32_t l_ignored; + uuid_create(&l_id, &l_ignored); + uuid_to_string(&l_id, (char**) &l_uuid, &l_ignored); + return FromString(l_uuid); +#endif } EQ::Util::UUID EQ::Util::UUID::FromString(const std::string &str) diff --git a/zone/main.cpp b/zone/main.cpp index 0445534d4..364df32b9 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -92,6 +92,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/unix.h" #endif +#ifdef __FreeBSD__ +#include +#endif + extern volatile bool is_zone_loaded; EntityList entity_list; @@ -431,8 +435,10 @@ int main(int argc, char** argv) { EQStreamIdentifier stream_identifier; RegisterAllPatches(stream_identifier); -#ifndef WIN32 +#ifdef __linux__ LogDebug("Main thread running with thread id [{}]", pthread_self()); +#elif defined(__FreeBSD__) + LogDebug("Main thread running with thread id [{}]", pthread_getthreadid_np()); #endif bool worldwasconnected = worldserver.Connected(); From b08dc02a0a02068b131d3520a9d446e2dedfcf46 Mon Sep 17 00:00:00 2001 From: hg <4683435+hgtw@users.noreply.github.com> Date: Fri, 8 May 2020 19:01:43 -0400 Subject: [PATCH 134/272] Fix edge case with door packets that can cause missing doors on clients Send OP_RemoveAllDoors packets with default CLIENT_CONNECTINGALL flag to match flag used for OP_SpawnDoor --- zone/entity.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zone/entity.cpp b/zone/entity.cpp index 5290dde0d..605698a5c 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2506,7 +2506,11 @@ void EntityList::RemoveAllDoors() void EntityList::DespawnAllDoors() { auto outapp = new EQApplicationPacket(OP_RemoveAllDoors, 0); - this->QueueClients(0,outapp); + for (auto it = client_list.begin(); it != client_list.end(); ++it) { + if (it->second) { + it->second->QueuePacket(outapp); + } + } safe_delete(outapp); } From 518bcb58d3e99e8834d3b5a7e69418c103ded77c Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 9 May 2020 18:12:24 -0400 Subject: [PATCH 135/272] Fix #findzone to allow you to search using part of a zone's short name. --- zone/command.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/command.cpp b/zone/command.cpp index 42453faab..7157434c9 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -4125,7 +4125,8 @@ void command_findzone(Client *c, const Seperator *sep) */ if (id == 0) { query = fmt::format( - "SELECT zoneidnumber, short_name, long_name, version FROM zone WHERE long_name LIKE '%{}%'", + "SELECT zoneidnumber, short_name, long_name, version FROM zone WHERE long_name LIKE '%{}%' OR `short_name` LIKE '%{}%'", + EscapeString(sep->arg[1]), EscapeString(sep->arg[1]) ); } From 12c4b201692f3b0b06874cd2bf9da4c3deb7a164 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 9 May 2020 21:15:34 -0400 Subject: [PATCH 136/272] Add CrossZoneSignalPlayerByGroupID() to Perl/Lua. --- common/servertalk.h | 6 ++++++ world/zoneserver.cpp | 1 + zone/embparser_api.cpp | 19 +++++++++++++++++++ zone/lua_general.cpp | 5 +++++ zone/questmgr.cpp | 9 +++++++++ zone/questmgr.h | 1 + zone/worldserver.cpp | 11 +++++++++++ 7 files changed, 52 insertions(+) diff --git a/common/servertalk.h b/common/servertalk.h index 032df1ddc..5c5749fe3 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -198,6 +198,7 @@ #define ServerOP_UCSServerStatusRequest 0x4013 #define ServerOP_UCSServerStatusReply 0x4014 #define ServerOP_HotReloadQuests 0x4015 +#define ServerOP_CZSignalGroup 0x4016 /** * QueryServer @@ -1167,6 +1168,11 @@ struct CZClientSignal_Struct { uint32 data; }; +struct CZGroupSignal_Struct { + int group_id; + uint32 data; +}; + struct CZNPCSignal_Struct { uint32 npctype_id; uint32 data; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 08ccbfaff..7731fd571 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1241,6 +1241,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { case ServerOP_CZSignalNPC: case ServerOP_CZSetEntityVariableByNPCTypeID: case ServerOP_CZSignalClient: + case ServerOP_CZSignalGroup: case ServerOP_CZSetEntityVariableByClientName: case ServerOP_WWMarquee: case ServerOP_DepopAllPlayersCorpses: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index c65cd204c..8f2714d64 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3721,6 +3721,24 @@ XS(XS__crosszonesignalclientbycharid) { XSRETURN_EMPTY; } +XS(XS__crosszonesignalclientbygroupid); +XS(XS__crosszonesignalclientbygroupid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); + + if (items == 2) { + int group_id = (int) SvIV(ST(0)); + uint32 int_value = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByGroupID(group_id, int_value); + } else { + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalclientbyname); XS(XS__crosszonesignalclientbyname) { dXSARGS; @@ -4176,6 +4194,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); + newXS(strcpy(buf, "crosszonesignalclientbygroupid"), XS__crosszonesignalclientbygroupid, file); newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); newXS(strcpy(buf, "crosszonesignalnpcbynpctypeid"), XS__crosszonesignalnpcbynpctypeid, file); newXS(strcpy(buf, "worldwidemarquee"), XS__worldwidemarquee, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index d047238de..df890660c 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1026,6 +1026,10 @@ void lua_cross_zone_signal_client_by_char_id(uint32 player_id, int signal) { quest_manager.CrossZoneSignalPlayerByCharID(player_id, signal); } +void lua_cross_zone_signal_client_by_group_id(uint32 group_id, int signal) { + quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); +} + void lua_cross_zone_signal_client_by_name(const char *player, int signal) { quest_manager.CrossZoneSignalPlayerByName(player, signal); } @@ -1839,6 +1843,7 @@ luabind::scope lua_register_general() { luabind::def("voice_tell", &lua_voice_tell), luabind::def("send_mail", &lua_send_mail), luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), + luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), luabind::def("cross_zone_message_player_by_name", &lua_cross_zone_message_player_by_name), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index ba6a5340c..e1933323f 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3211,6 +3211,15 @@ void QuestManager::CrossZoneSignalPlayerByCharID(int charid, uint32 data){ safe_delete(pack); } +void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 data){ + auto pack = new ServerPacket(ServerOP_CZSignalGroup, sizeof(CZGroupSignal_Struct)); + CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*) pack->pBuffer; + CZGS->group_id = group_id; + CZGS->data = data; + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSignalPlayerByName(const char *CharName, uint32 data){ uint32 message_len = strlen(CharName) + 1; auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len); diff --git a/zone/questmgr.h b/zone/questmgr.h index 14ddea9c8..2a12fcd84 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -279,6 +279,7 @@ public: int32 GetZoneID(const char *zone); const char *GetZoneLongName(const char *zone); void CrossZoneSignalPlayerByCharID(int charid, uint32 data); + void CrossZoneSignalPlayerByGroupID(int group_id, uint32 data); void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data); void CrossZoneSignalPlayerByName(const char *CharName, uint32 data); void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 4b2034067..a983b7cfa 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1915,6 +1915,17 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZSignalGroup: + { + CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZGS->group_id) { + client.second->Signal(CZGS->data); + } + } + break; + } case ServerOP_CZSignalClientByName: { CZClientSignalByName_Struct* CZCS = (CZClientSignalByName_Struct*)pack->pBuffer; From 0e6a0b5a7000a0e98d8e7c9e8dfd0069cedbe7f3 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 9 May 2020 22:37:35 -0400 Subject: [PATCH 137/272] Add Item SubType to data structures and DB --- common/item_data.h | 1 + common/item_fieldlist.h | 1 + common/patches/rof.cpp | 1 + common/patches/rof2.cpp | 1 + common/patches/uf.cpp | 3 ++- common/shareddb.cpp | 1 + common/spdat.h | 2 +- common/version.h | 2 +- utils/sql/db_update_manifest.txt | 1 + utils/sql/git/required/2020_05_09_items_subtype.sql | 1 + 10 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 utils/sql/git/required/2020_05_09_items_subtype.sql diff --git a/common/item_data.h b/common/item_data.h index 58bc4c889..d5570f856 100644 --- a/common/item_data.h +++ b/common/item_data.h @@ -434,6 +434,7 @@ namespace EQEmu //uint32 Unk054; int16 MaxCharges; // Maximum charges items can hold: -1 if not a chargeable item uint8 ItemType; // Item Type/Skill (itemClass* from above) + int32 SubType; // Some items have sub types that can be used for other things (unbreakable fishing poles, SE_FFItemClass) uint8 Material; // Item material type uint32 HerosForgeModel;// Hero's Forge Armor Model Type (2-13?) float SellRate; // Sell rate diff --git a/common/item_fieldlist.h b/common/item_fieldlist.h index 665783498..3c00f1e44 100644 --- a/common/item_fieldlist.h +++ b/common/item_fieldlist.h @@ -203,3 +203,4 @@ F(procname) F(wornname) F(focusname) F(scrollname) +F(subtype) diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index fd75cb3db..fed2802df 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -5504,6 +5504,7 @@ namespace RoF iqbs.HealAmt = item->HealAmt; iqbs.SpellDmg = item->SpellDmg; iqbs.Clairvoyance = item->Clairvoyance; + iqbs.SubType = item->SubType; iqbs.unknown28 = 0; iqbs.unknown30 = 0; iqbs.unknown39 = 1; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 36257771b..209324740 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -5759,6 +5759,7 @@ namespace RoF2 iqbs.HealAmt = item->HealAmt; iqbs.SpellDmg = item->SpellDmg; iqbs.Clairvoyance = item->Clairvoyance; + iqbs.SubType = item->SubType; //unknown18; //Power Source Capacity or evolve filename? //evolve_string; // Some String, but being evolution related is just a guess diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index ef28e8e33..4b97658d2 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -4106,7 +4106,8 @@ namespace UF iqbs.HealAmt = item->HealAmt; iqbs.SpellDmg = item->SpellDmg; iqbs.Clairvoyance = item->Clairvoyance; - + iqbs.SubType = item->SubType; + ob.write((const char*)&iqbs, sizeof(UF::structs::ItemQuaternaryBodyStruct)); EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 48cc1309d..6c327b188 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1029,6 +1029,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_ item.MaxCharges = (int16)atoi(row[ItemField::maxcharges]); item.ItemType = (uint8)atoi(row[ItemField::itemtype]); + item.SubType = atoi(row[ItemField::subtype]); item.Material = (uint8)atoi(row[ItemField::material]); item.HerosForgeModel = (uint32)atoi(row[ItemField::herosforgemodel]); item.SellRate = (float)atof(row[ItemField::sellrate]); diff --git a/common/spdat.h b/common/spdat.h index c7c6027c6..9c9cf3f53 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -634,7 +634,7 @@ typedef enum { #define SE_LimitRace 412 // implemented - Limits to spells cast by a certain race (Note: not used in any known live spells) #define SE_FcBaseEffects 413 // implemented - Increases the power of bard songs, skill attacks, runes, bard allowed foci, damage/heal #define SE_LimitCastingSkill 414 // implemented - Limit a focus to include spells cast using a specific skill. -//#define SE_FFItemClass 415 // not used +//#define SE_FFItemClass 415 // not used - base1 matches ItemType, base2 matches SubType, -1 ignored, max is bitmask of valid slots #define SE_ACv2 416 // implemented - New AC spell effect #define SE_ManaRegen_v2 417 // implemented - New mana regen effect #define SE_SkillDamageAmount2 418 // implemented - adds skill damage directly to certain attacks diff --git a/common/version.h b/common/version.h index 7c378e763..c840ebdc5 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9152 +#define CURRENT_BINARY_DATABASE_VERSION 9153 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9027 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 28b22028e..c6af34a98 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -406,6 +406,7 @@ 9150|2020_02_06_aa_reset_on_death.sql|SHOW COLUMNS FROM `aa_ability` LIKE 'reset_on_death'|empty| 9151|2020_03_05_npc_always_aggro.sql|SHOW COLUMNS FROM `npc_types` LIKE 'always_aggro'|empty| 9152|2020_03_09_convert_myisam_to_innodb.sql|SELECT * FROM db_version WHERE version >= 9152|empty| +9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2020_05_09_items_subtype.sql b/utils/sql/git/required/2020_05_09_items_subtype.sql new file mode 100644 index 000000000..43b38d14f --- /dev/null +++ b/utils/sql/git/required/2020_05_09_items_subtype.sql @@ -0,0 +1 @@ +ALTER TABLE `items` CHANGE `UNK219` `subtype` int(11) not null default '0'; From 4d934061765d85aa9d97b075d35da96c8f1d8253 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 10 May 2020 09:16:16 -0400 Subject: [PATCH 138/272] Fix typo in crosszonesignalclientbyname Perl_croak. --- zone/embparser_api.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index c65cd204c..c1263980d 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3726,14 +3726,14 @@ XS(XS__crosszonesignalclientbyname) { dXSARGS; if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbycharid(string name, int value)"); + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyname(string name, int value)"); if (items == 2) { char *name = (char *) SvPV_nolen(ST(0)); uint32 int_value = (uint32) SvIV(ST(1)); quest_manager.CrossZoneSignalPlayerByName(name, int_value); } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbycharid(string name, int value)"); + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyname(string name, int value)"); } XSRETURN_EMPTY; From 857b24727c96cbf15d4f66292f1f53674e827c57 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 10 May 2020 16:52:33 -0400 Subject: [PATCH 139/272] Add CrossZoneMessagePlayerByGuildID() to Perl/Lua. --- common/servertalk.h | 7 +++++++ world/zoneserver.cpp | 1 + zone/embparser_api.cpp | 18 ++++++++++++++++++ zone/lua_general.cpp | 5 +++++ zone/questmgr.cpp | 11 +++++++++++ zone/questmgr.h | 1 + zone/worldserver.cpp | 11 +++++++++++ 7 files changed, 54 insertions(+) diff --git a/common/servertalk.h b/common/servertalk.h index 032df1ddc..318e0cf06 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -198,6 +198,7 @@ #define ServerOP_UCSServerStatusRequest 0x4013 #define ServerOP_UCSServerStatusReply 0x4014 #define ServerOP_HotReloadQuests 0x4015 +#define ServerOP_CZMessageGuild 0x4021 /** * QueryServer @@ -1334,6 +1335,12 @@ struct CZMessagePlayer_Struct { char Message[512]; }; +struct CZMessageGuild_Struct { + uint32 Type; + int GuildID; + char Message[512]; +}; + struct WWMarquee_Struct { uint32 Type; uint32 Priority; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 08ccbfaff..3f1c8eae0 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1238,6 +1238,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_CZSignalClientByName: case ServerOP_CZMessagePlayer: + case ServerOP_CZMessageGuild: case ServerOP_CZSignalNPC: case ServerOP_CZSetEntityVariableByNPCTypeID: case ServerOP_CZSignalClient: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index c65cd204c..55ca42c00 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3757,6 +3757,23 @@ XS(XS__crosszonemessageplayerbyname) { XSRETURN_EMPTY; } +XS(XS__crosszonemessageplayerbyguildid); +XS(XS__crosszonemessageplayerbyguildid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int typ, int guild_id, string message)"); + + if (items == 3) { + uint32 type = (uint32) SvIV(ST(0)); + int guild_id = (int) SvIV(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); + } + + XSRETURN_EMPTY; +} + XS(XS__enablerecipe); XS(XS__enablerecipe) { dXSARGS; @@ -4173,6 +4190,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file); newXS(strcpy(buf, "createguild"), XS__createguild, file); newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); + newXS(strcpy(buf, "crosszonemessageplayerbyguildid"), XS__crosszonemessageplayerbyguildid, file); newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index d047238de..ee3318f31 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1034,6 +1034,10 @@ void lua_cross_zone_message_player_by_name(uint32 type, const char *player, cons quest_manager.CrossZoneMessagePlayerByName(type, player, message); } +void lua_cross_zone_message_player_by_guild_id(uint32 type, int guild_id, const char *message) { + quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); +} + void lua_cross_zone_set_entity_variable_by_client_name(const char *player, const char *id, const char *m_var) { quest_manager.CrossZoneSetEntityVariableByClientName(player, id, m_var); } @@ -1841,6 +1845,7 @@ luabind::scope lua_register_general() { luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), luabind::def("cross_zone_message_player_by_name", &lua_cross_zone_message_player_by_name), + luabind::def("cross_zone_message_player_by_guild_id", &lua_cross_zone_message_player_by_guild_id), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), luabind::def("world_wide_marquee", &lua_world_wide_marquee), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC,Lua_Client))&lua_get_qglobals), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index ba6a5340c..38e6c808c 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3234,6 +3234,17 @@ void QuestManager::CrossZoneMessagePlayerByName(uint32 Type, const char *CharNam safe_delete(pack); } +void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message){ + uint32 message_len = strlen(Message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessageGuild, sizeof(CZMessageGuild_Struct) + message_len); + CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*) pack->pBuffer; + CZGM->Type = Type; + CZGM->GuildID = GuildID; + strn0cpy(CZGM->Message, Message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var){ uint32 message_len = strlen(id) + 1; uint32 message_len2 = strlen(m_var) + 1; diff --git a/zone/questmgr.h b/zone/questmgr.h index 14ddea9c8..15c46f694 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -284,6 +284,7 @@ public: void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var); void CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var); void CrossZoneMessagePlayerByName(uint32 Type, const char *CharName, const char *Message); + void CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message); void WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message); bool EnableRecipe(uint32 recipe_id); bool DisableRecipe(uint32 recipe_id); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 4b2034067..46bac74ed 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1933,6 +1933,17 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZMessageGuild: + { + CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZGM->GuildID) { + client.second->Message(CZGM->Type, CZGM->Message); + } + } + break; + } case ServerOP_CZSetEntityVariableByClientName: { CZSetEntVarByClientName_Struct* CZCS = (CZSetEntVarByClientName_Struct*)pack->pBuffer; From 39cd5bb9a824754717b1a5c0f869e10d0ac8d40d Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Sun, 10 May 2020 23:07:48 -0500 Subject: [PATCH 140/272] Fix issue where powershell progress output was dramatically slowing down requests [skip ci] --- utils/scripts/eqemu_server.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 18d5462a0..c2bec1816 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -1254,7 +1254,7 @@ sub get_remote_file { $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; } elsif ($OS eq "Windows") { - $wget = `powershell -Command "Invoke-WebRequest $request_url -OutFile $destination_file"` + $wget = `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"`; } print "[Download] Saved: (" . $destination_file . ") from " . $request_url . "\n" if !$silent_download; if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i) ) { From 496a958defc916d4d17469e864ad729ebdfe34f1 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 00:28:24 -0500 Subject: [PATCH 141/272] Update eqemu_server.pl --- utils/scripts/eqemu_server.pl | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index c2bec1816..c6eff474d 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -479,10 +479,13 @@ sub do_installer_routines { if (-e "bin/world") { $world_path = "bin/world"; } + elsif (-e "bin/world.exe") { + $world_path = "bin/world.exe"; + } #::: Get Binary DB version if ($OS eq "Windows") { - @db_version = split(': ', `$world_path db_version`); + @db_version = split(': ', `"$world_path" db_version`); } if ($OS eq "Linux") { @db_version = split(': ', `./$world_path db_version`); @@ -522,10 +525,13 @@ sub check_for_world_bootup_database_update { if (-e "bin/world") { $world_path = "bin/world"; } + elsif (-e "bin/world.exe") { + $world_path = "bin/world.exe"; + } #::: Get Binary DB version if ($OS eq "Windows") { - @db_version = split(': ', `$world_path db_version`); + @db_version = split(': ', `"$world_path" db_version`); } if ($OS eq "Linux") { @db_version = split(': ', `./$world_path db_version`); @@ -1254,7 +1260,7 @@ sub get_remote_file { $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; } elsif ($OS eq "Windows") { - $wget = `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"`; + $wget = `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"` } print "[Download] Saved: (" . $destination_file . ") from " . $request_url . "\n" if !$silent_download; if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i) ) { From 2c13f2e9282b112457325a8186adf72b5d16b337 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 01:13:59 -0500 Subject: [PATCH 142/272] Update server script [skip ci] --- utils/scripts/eqemu_server.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index c6eff474d..d7528cc66 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -455,8 +455,8 @@ sub do_installer_routines { #::: Download assets if ($OS eq "Windows") { - fetch_latest_windows_binaries(); - # fetch_latest_windows_appveyor(); + # fetch_latest_windows_binaries(); + fetch_latest_windows_appveyor(); get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); #get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); # No longer required #get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); From 51b98ec7248954f0612f6471bbdf5c62da2589d1 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 03:21:46 -0500 Subject: [PATCH 143/272] Lots of tweaks for overhauls [skip ci] --- utils/scripts/eqemu_server.pl | 869 ++++++++++++++++++++-------------- 1 file changed, 507 insertions(+), 362 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index d7528cc66..a27a59fc4 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -6,7 +6,7 @@ #::: Automatic database versioning (bots and normal DB) #::: Updating server assets (binary, opcodes, maps, configuration files) #::: Original Author: Akkadius -#::: Contributors: Uleat +#::: Contributors: Uleat, Ali #::: Purpose: To upgrade databases with ease and maintain versioning ########################################################### @@ -17,13 +17,22 @@ use File::Path; use File::Find; use Time::HiRes qw(usleep); -#::: Variables -$install_repository_request_url = "https://raw.githubusercontent.com/Akkadius/EQEmuInstall/master/"; -$eqemu_repository_request_url = "https://raw.githubusercontent.com/EQEmu/Server/master/"; +############################################# +# variables +############################################# +my $install_repository_request_url = "https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/"; +my $eqemu_repository_request_url = "https://raw.githubusercontent.com/EQEmu/Server/master/"; +my $opcodes_path = ""; +my $patches_path = ""; +my $time_stamp = strftime('%m-%d-%Y', gmtime()); +my $db_run_stage = 0; #::: Sets database run stage check +my $bin_dir = ""; -#::: Globals -$time_stamp = strftime('%m-%d-%Y', gmtime()); -$db_run_stage = 0; #::: Sets database run stage check +############################################# +# os +############################################# +my $OS = ""; +my $os_flavor = ""; if ($Config{osname} =~ /freebsd|linux/i) { $OS = "Linux"; $os_flavor = ""; @@ -41,22 +50,40 @@ if ($Config{osname} =~ /Win|MS/i) { $OS = "Windows"; } -$has_internet_connection = check_internet_connection(); +############################################# +# internet check +############################################# +my $has_internet_connection = check_internet_connection(); if (-e "skip_internet_connection_check.txt") { $has_internet_connection = 1; } -($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); - +############################################# +# skip self update +############################################# +my $skip_self_update_check = 0; if (-e "eqemu_server_skip_update.txt") { $skip_self_update_check = 1; } +############################################# +# skip maps update +############################################# +my $skip_self_maps_update_check = 0; if (-e "eqemu_server_skip_maps_update.txt") { $skip_self_maps_update_check = 1; } -#::: Check for script self update +############################################# +# bin dir +############################################# +if (-d "bin") { + $bin_dir = "bin/"; +} + +############################################# +# run routines +############################################# check_xml_to_json_conversion() if $ARGV[0] eq "convert_xml"; do_self_update_check_routine() if !$skip_self_update_check; get_perl_version(); @@ -87,20 +114,23 @@ if (trim(get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'Revision'")) ne "" check_for_world_bootup_database_update(); -sub urlencode { +sub urlencode +{ my ($rv) = @_; - $rv =~ s/([^A-Za-z0-9])/sprintf("%%%2.2X", ord($1))/ge; + $rv =~ s/([^A-Za-z0-9])/sprintf("%%%2.2X", ord($1)) /ge; return $rv; } -sub urldecode { +sub urldecode +{ my ($rv) = @_; $rv =~ s/\+/ /g; - $rv =~ s/%(..)/pack("c", hex($1))/ge; + $rv =~ s/%(..)/pack("c", hex($1)) /ge; return $rv; } -sub analytics_insertion { +sub analytics_insertion +{ $event_name = urlencode($_[0]); $event_data = urlencode($_[1]); @@ -169,7 +199,8 @@ sub analytics_insertion { } } -sub show_install_summary_info { +sub show_install_summary_info +{ print "[Install] Installation complete...\n"; print "[Install] Server Info (Save somewhere if needed):\n"; @@ -209,7 +240,8 @@ sub show_install_summary_info { analytics_insertion("install_complete", "null"); } -sub new_server { +sub new_server +{ $file_count = 0; opendir(DIR, ".") or die $!; while (my $file = readdir(DIR)) { @@ -250,14 +282,15 @@ sub new_server { check_for_input("MySQL Password: "); $database_password = trim($input); - $check_connection = `mysql -u $database_user -p$database_password -N -B -e "SHOW PROCESSLIST" > mysqlcheck.txt`; - $mysql_pass = 0; + $check_connection = + `mysql -u $database_user -p$database_password -N -B -e "SHOW PROCESSLIST" > mysqlcheck.txt`; + $mysql_pass = 0; open(MYSQL_CHECK, "mysqlcheck.txt"); while () { chomp; - $o = $_; - if ($o =~ /Error/i) { $mysql_pass = 0; } - if ($o =~ /SHOW PROCESSLIST/i) { $mysql_pass = 1; } + $o = $_; + if ($o =~ /Error/i) {$mysql_pass = 0;} + if ($o =~ /SHOW PROCESSLIST/i) {$mysql_pass = 1;} } close(MYSQL_CHECK); unlink("mysqlcheck.txt"); @@ -291,7 +324,8 @@ sub new_server { print `chmod 755 *.sh`; } - analytics_insertion("new_server::install_complete", $database_name . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); + analytics_insertion("new_server::install_complete", + $database_name . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); print "[New Server] New server folder install complete\n"; print "[New Server] Below is your installation info:\n"; @@ -312,16 +346,19 @@ sub new_server { } } -sub check_xml_to_json_conversion { +sub check_xml_to_json_conversion +{ if (-e "eqemu_config.xml" && !-e "eqemu_config.json") { if ($OS eq "Windows") { - get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-windows-x86.exe", "xmltojson.exe"); + get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-windows-x86.exe", + "xmltojson.exe"); print "Converting eqemu_config.xml to eqemu_config.json\n"; print `xmltojson eqemu_config.xml`; } if ($OS eq "Linux") { - get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-linux-x86", "xmltojson"); + get_remote_file("https://raw.githubusercontent.com/EQEmu/Server/master/utils/xmltojson/xmltojson-linux-x86", + "xmltojson"); print "Converting eqemu_config.xml to eqemu_config.json\n"; print `chmod 755 xmltojson`; print `./xmltojson eqemu_config.xml`; @@ -341,10 +378,10 @@ sub check_xml_to_json_conversion { $result = $json->decode($content); $json->canonical(1); - print $json->pretty->indent_length(5)->utf8->encode($result), "\n"; + print $json->pretty->utf8->encode($result), "\n"; open(my $fh, '>', 'eqemu_config.json'); - print $fh $json->pretty->indent_length(5)->utf8->encode($result); + print $fh $json->pretty->utf8->encode($result); close $fh; mkdir('backups'); @@ -367,7 +404,8 @@ sub check_xml_to_json_conversion { } -sub build_linux_source { +sub build_linux_source +{ $build_options = $_[0]; @@ -408,7 +446,7 @@ sub build_linux_source { print `git submodule update`; chdir($source_dir . "/Server/build"); - + print "Generating CMake build files...\n"; if ($os_flavor eq "fedora_core") { print `cmake $cmake_options -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -DLUA_INCLUDE_DIR=/usr/include/lua-5.1/ -G "Unix Makefiles" ..`; @@ -436,13 +474,17 @@ sub build_linux_source { print `ln -s -f $source_dir/Server/build/bin/loginserver .`; } -sub do_installer_routines { +sub do_installer_routines +{ print "[Install] EQEmu Server Installer... LOADING... PLEASE WAIT...\n"; #::: Make some local server directories... mkdir('logs'); mkdir('updates_staged'); mkdir('shared'); + mkdir('bin'); + + $bin_dir = "bin/"; do_install_config_json(); read_eqemu_config_json(); @@ -455,12 +497,7 @@ sub do_installer_routines { #::: Download assets if ($OS eq "Windows") { - # fetch_latest_windows_binaries(); fetch_latest_windows_appveyor(); - get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); - #get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); # No longer required - #get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); - get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); } map_files_fetch_bulk() if !$skip_self_maps_update_check; @@ -491,7 +528,7 @@ sub do_installer_routines { @db_version = split(': ', `./$world_path db_version`); } - $binary_database_version = trim($db_version[1]); + $binary_database_version = trim($db_version[1]); #::: Local DB Version check_db_version_table(); @@ -513,13 +550,15 @@ sub do_installer_routines { } } -sub check_for_input { +sub check_for_input +{ print "[Input] " . $_[0]; $input = ; chomp $input; } -sub check_for_world_bootup_database_update { +sub check_for_world_bootup_database_update +{ my $world_path = "world"; if (-e "bin/world") { @@ -529,14 +568,16 @@ sub check_for_world_bootup_database_update { $world_path = "bin/world.exe"; } - #::: Get Binary DB version - if ($OS eq "Windows") { - @db_version = split(': ', `"$world_path" db_version`); + # Usually hit during installer when world hasn't been installed yet... + if (-e $world_path) { + if ($OS eq "Windows") { + @db_version = split(': ', `"$world_path" db_version`); + } + if ($OS eq "Linux") { + @db_version = split(': ', `./$world_path db_version`); + } } - if ($OS eq "Linux") { - @db_version = split(': ', `./$world_path db_version`); - } - + $binary_database_version = trim($db_version[1]); $local_database_version = get_main_db_version(); @@ -557,17 +598,18 @@ sub check_for_world_bootup_database_update { print "[Update] Updating database...\n"; sleep(1); main_db_management(); - - analytics_insertion("auto database upgrade world", $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); + + analytics_insertion("auto database upgrade world", + $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); } #::: Make sure that we didn't pass any arugments to the script else { if ($local_database_version > $binary_database_version) { print "[Update] Database version is ahead of current binaries...\n"; - } - - if (!$db) { print "[eqemu_server.pl] No database connection found... Running without\n"; } + } + + if (!$db) {print "[eqemu_server.pl] No database connection found... Running without\n";} show_menu_prompt(); } } @@ -576,7 +618,7 @@ sub check_for_world_bootup_database_update { $binary_database_version = trim($db_version[2]); if ($binary_database_version > 0) { $local_database_version = get_bots_db_version(); - + #::: We ran world - Database needs to update, lets backup and run updates and continue world bootup if ($binary_database_version == $local_database_version && $ARGV[0] eq "ran_from_world") { print "[Update] Bots database up to date...\n"; @@ -591,26 +633,28 @@ sub check_for_world_bootup_database_update { print "[Update] Updating bots database...\n"; sleep(1); bots_db_management(); - - analytics_insertion("auto database bots upgrade world", $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); + + analytics_insertion("auto database bots upgrade world", + $db . " :: Binary DB Version / Local DB Version :: " . $binary_database_version . " / " . $local_database_version); } - + #::: Make sure that we didn't pass any arugments to the script else { if ($local_database_version > $binary_database_version) { print "[Update] Bots database version is ahead of current binaries...\n"; } - - if (!$db) { print "[eqemu_server.pl] No database connection found... Running without\n"; } + + if (!$db) {print "[eqemu_server.pl] No database connection found... Running without\n";} show_menu_prompt(); } } } - + print "[Update] Continuing bootup\n"; } -sub check_internet_connection { +sub check_internet_connection +{ if ($OS eq "Linux") { $count = "c"; } @@ -632,7 +676,8 @@ sub check_internet_connection { } } -sub get_perl_version { +sub get_perl_version +{ #::: Check Perl version $perl_version = $^V; $perl_version =~ s/v//g; @@ -643,7 +688,8 @@ sub get_perl_version { no warnings; } -sub do_self_update_check_routine { +sub do_self_update_check_routine +{ #::: Check for internet connection before updating if (!$has_internet_connection) { @@ -652,7 +698,12 @@ sub do_self_update_check_routine { } #::: Check for script changes :: eqemu_server.pl - get_remote_file($eqemu_repository_request_url . "utils/scripts/eqemu_server.pl", "updates_staged/eqemu_server.pl", 0, 1, 1); + get_remote_file($eqemu_repository_request_url . "utils/scripts/eqemu_server.pl", + "updates_staged/eqemu_server.pl", + 0, + 1, + 1 + ); if (-e "updates_staged/eqemu_server.pl") { @@ -665,14 +716,14 @@ sub do_self_update_check_routine { my @files; my $start_dir = "updates_staged/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { if ($file =~ /eqemu_server/i) { $destination_file = $file; $destination_file =~ s/updates_staged\///g; - print "[Install] Installing :: " . $destination_file . "\n"; + print "[Install] Installing [" . $destination_file . "]\n"; unlink($destination_file); copy_file($file, $destination_file); if ($OS eq "Linux") { @@ -700,7 +751,8 @@ sub do_self_update_check_routine { } } -sub get_installation_variables { +sub get_installation_variables +{ #::: Fetch installation variables before building the config if ($OS eq "Linux") { if (-e "../install_variables.txt") { @@ -722,7 +774,8 @@ sub get_installation_variables { close(INSTALL_VARS); } -sub do_install_config_json { +sub do_install_config_json +{ get_installation_variables(); #::: Fetch json template @@ -733,9 +786,9 @@ sub do_install_config_json { my $content; open(my $fh, '<', "eqemu_config_template.json") or die "cannot open file $filename"; { - local $/; - $content = <$fh>; - } + local $/; + $content = <$fh>; +} close($fh); $config = $json->decode($content); @@ -751,25 +804,24 @@ sub do_install_config_json { $db_name = "peq"; } - $config->{"server"}{"database"}{"username"} = $installation_variables{"mysql_eqemu_user"}; - $config->{"server"}{"database"}{"password"} = $installation_variables{"mysql_eqemu_password"}; - $config->{"server"}{"database"}{"db"} = $db_name; - + $config->{"server"}{"database"}{"username"} = $installation_variables{"mysql_eqemu_user"}; + $config->{"server"}{"database"}{"password"} = $installation_variables{"mysql_eqemu_password"}; + $config->{"server"}{"database"}{"db"} = $db_name; $config->{"server"}{"qsdatabase"}{"username"} = $installation_variables{"mysql_eqemu_user"}; $config->{"server"}{"qsdatabase"}{"password"} = $installation_variables{"mysql_eqemu_password"}; $config->{"server"}{"qsdatabase"}{"db"} = $db_name; $json->canonical(1); - $json->indent_length(5); open(my $fh, '>', 'eqemu_config.json'); - print $fh $json->pretty->indent_length(5)->utf8->encode($config); + print $fh $json->pretty->utf8->encode($config); close $fh; unlink("eqemu_config_template.json"); } -sub do_install_config_login_json { +sub do_install_config_login_json +{ get_installation_variables(); #::: Fetch json template @@ -780,9 +832,9 @@ sub do_install_config_login_json { my $content; open(my $fh, '<', "login_template.json") or die "cannot open file $filename"; { - local $/; - $content = <$fh>; - } + local $/; + $content = <$fh>; +} close($fh); $config = $json->decode($content); @@ -794,31 +846,36 @@ sub do_install_config_login_json { $db_name = "peq"; } - $config->{"database"}{"host"} = "127.0.0.1"; - $config->{"database"}{"user"} = $installation_variables{"mysql_eqemu_user"}; - $config->{"database"}{"password"} = $installation_variables{"mysql_eqemu_password"}; - $config->{"database"}{"db"} = $db_name; + $config->{"database"}{"host"} = "127.0.0.1"; + $config->{"database"}{"user"} = $installation_variables{"mysql_eqemu_user"}; + $config->{"database"}{"password"} = $installation_variables{"mysql_eqemu_password"}; + $config->{"database"}{"db"} = $db_name; + $config->{"client_configuration"}{"titanium_opcodes"} = $opcodes_path . "login_opcodes.conf"; + $config->{"client_configuration"}{"sod_opcodes"} = $opcodes_path . "login_opcodes_sod.conf"; $json->canonical(1); - $json->indent_length(5); open(my $fh, '>', 'login.json'); - print $fh $json->pretty->indent_length(5)->utf8->encode($config); + print $fh $json->pretty->utf8->encode($config); close $fh; unlink("login_template.json"); } -sub fetch_utility_scripts { +sub fetch_utility_scripts +{ if ($OS eq "Windows") { get_remote_file($install_repository_request_url . "t_database_backup.bat", "t_database_backup.bat"); get_remote_file($install_repository_request_url . "t_start_server.bat", "t_start_server.bat"); - get_remote_file($install_repository_request_url . "t_server_update_binaries_no_bots.bat", "t_server_update_binaries_no_bots.bat"); - get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", "t_start_server_with_login_server.bat"); + get_remote_file($install_repository_request_url . "t_server_update_binaries_no_bots.bat", + "t_server_update_binaries_no_bots.bat"); + get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", + "t_start_server_with_login_server.bat"); get_remote_file($install_repository_request_url . "t_stop_server.bat", "t_stop_server.bat"); get_remote_file($install_repository_request_url . "t_server_crash_report.pl", "t_server_crash_report.pl"); get_remote_file($install_repository_request_url . "win_server_launcher.pl", "win_server_launcher.pl"); - get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", "t_start_server_with_login_server.bat"); + get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", + "t_start_server_with_login_server.bat"); } else { get_remote_file($install_repository_request_url . "linux/server_launcher.pl", "server_launcher.pl"); @@ -829,7 +886,8 @@ sub fetch_utility_scripts { } } -sub setup_bots { +sub setup_bots +{ if ($OS eq "Windows") { fetch_latest_windows_appveyor_bots(); } @@ -841,7 +899,8 @@ sub setup_bots { print "Bots should be setup, run your server and the bot command should be available in-game (type '^help')\n"; } -sub show_menu_prompt { +sub show_menu_prompt +{ $dc = 0; while (1) { @@ -1047,7 +1106,8 @@ sub show_menu_prompt { } } -sub print_main_menu { +sub print_main_menu +{ print "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; print ">>> EQEmu Server Main Menu >>>>>>>>>>>>\n"; print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"; @@ -1062,7 +1122,8 @@ sub print_main_menu { print "Enter a command #> "; } -sub get_mysql_path { +sub get_mysql_path +{ if ($OS eq "Windows") { $has_mysql_path = `echo %PATH%`; if ($has_mysql_path =~ /MySQL|MariaDB/i) { @@ -1091,7 +1152,8 @@ sub get_mysql_path { } } -sub check_for_database_dump_script { +sub check_for_database_dump_script +{ #::: Check for internet connection before updating if (!$has_internet_connection) { print "[Update] Cannot check update without internet connection...\n"; @@ -1099,7 +1161,11 @@ sub check_for_database_dump_script { } #::: Check for script changes :: database_dumper.pl - get_remote_file($eqemu_repository_request_url . "utils/scripts/database_dumper.pl", "updates_staged/database_dumper.pl", 0, 1, 1); + get_remote_file($eqemu_repository_request_url . "utils/scripts/database_dumper.pl", + "updates_staged/database_dumper.pl", + 0, + 1, + 1); if (-e "updates_staged/database_dumper.pl") { @@ -1112,14 +1178,14 @@ sub check_for_database_dump_script { my @files; my $start_dir = "updates_staged/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { if ($file =~ /database_dumper/i) { $destination_file = $file; $destination_file =~ s/updates_staged\///g; - print "[Install] Installing :: " . $destination_file . "\n"; + print "[Install] Installing [" . $destination_file . "]\n"; unlink($destination_file); copy_file($file, $destination_file); if ($OS eq "Linux") { @@ -1140,16 +1206,19 @@ sub check_for_database_dump_script { } -sub database_dump { +sub database_dump +{ check_for_database_dump_script(); print "[Database] Performing database backup....\n"; print `perl database_dumper.pl database="$db" loc="backups"`; } -sub database_dump_player_tables { +sub database_dump_player_tables +{ check_for_database_dump_script(); print "[Database] Performing database backup of player tables....\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/character_table_list.txt", "backups/character_table_list.txt"); + get_remote_file($eqemu_repository_request_url . "utils/sql/character_table_list.txt", + "backups/character_table_list.txt"); $tables = ""; open(FILE, "backups/character_table_list.txt"); @@ -1169,19 +1238,22 @@ sub database_dump_player_tables { } -sub database_dump_compress { +sub database_dump_compress +{ check_for_database_dump_script(); print "[Database] Performing database backup....\n"; print `perl database_dumper.pl database="$db" loc="backups" compress`; } -sub script_exit { +sub script_exit +{ #::: Cleanup staged folder... rmtree("updates_staged/"); exit; } -sub check_db_version_table { +sub check_db_version_table +{ if (get_mysql_result("SHOW TABLES LIKE 'db_version'") eq "" && $db) { print get_mysql_result(" CREATE TABLE db_version ( @@ -1193,17 +1265,19 @@ sub check_db_version_table { } #::: Returns Tab Delimited MySQL Result from Command Line -sub get_mysql_result { +sub get_mysql_result +{ my $run_query = $_[0]; - if (!$db) { return; } - if ($OS eq "Windows") { return `"$path" --host $host --user $user --password="$pass" $db -N -B -e "$run_query"`; } + if (!$db) {return;} + if ($OS eq "Windows") {return `"$path" --host $host --user $user --password="$pass" $db -N -B -e "$run_query"`;} if ($OS eq "Linux") { $run_query =~ s/`//g; return `$path --user="$user" --host $host --password="$pass" $db -N -B -e "$run_query"`; } } -sub get_mysql_result_from_file { +sub get_mysql_result_from_file +{ my $update_file = $_[0]; if (!$db) { return; @@ -1220,7 +1294,8 @@ sub get_mysql_result_from_file { #::: Gets Remote File based on request_url (1st Arg), and saves to destination file (2nd Arg) #::: Example: get_remote_file($eqemu_repository_request_url . "utils/sql/db_update_manifest.txt", "db_update/db_update_manifest.txt"); -sub get_remote_file { +sub get_remote_file +{ my $request_url = $_[0]; my $destination_file = $_[1]; my $content_type = $_[2]; @@ -1260,10 +1335,11 @@ sub get_remote_file { $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; } elsif ($OS eq "Windows") { - $wget = `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"` + $wget = + `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"` } - print "[Download] Saved: (" . $destination_file . ") from " . $request_url . "\n" if !$silent_download; - if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i) ) { + print "[Download] Saved [" . $destination_file . "] from [" . $request_url . "]\n" if !$silent_download; + if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i)) { print "Error, no connection or failed request...\n\n"; #die; } @@ -1271,14 +1347,16 @@ sub get_remote_file { } #::: Trim Whitespaces -sub trim { +sub trim +{ my $string = $_[0]; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } -sub read_eqemu_config_xml { +sub read_eqemu_config_xml +{ open(CONFIG, "eqemu_config.xml"); while () { chomp; @@ -1325,44 +1403,49 @@ sub read_eqemu_config_xml { close(CONFIG); } -sub read_eqemu_config_json { +sub read_eqemu_config_json +{ use JSON; my $json = new JSON(); my $content; open(my $fh, '<', "eqemu_config.json") or die "cannot open file $filename"; { - local $/; - $content = <$fh>; - } + local $/; + $content = <$fh>; +} close($fh); $config = $json->decode($content); - $db = $config->{"server"}{"database"}{"db"}; - $host = $config->{"server"}{"database"}{"host"}; - $user = $config->{"server"}{"database"}{"username"}; - $pass = $config->{"server"}{"database"}{"password"}; - + $db = $config->{"server"}{"database"}{"db"}; + $host = $config->{"server"}{"database"}{"host"}; + $user = $config->{"server"}{"database"}{"username"}; + $pass = $config->{"server"}{"database"}{"password"}; + $opcodes_path = $config->{"server"}{"directories"}{"opcodes"}; + $patches_path = $config->{"server"}{"directories"}{"patches"}; } #::: Fetch Latest PEQ AA's -sub aa_fetch { +sub aa_fetch +{ if (!$db) { print "No database present, check your eqemu_config.xml for proper MySQL/MariaDB configuration...\n"; return; } print "[Install] Pulling down PEQ AA Tables...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/peq_aa_tables_post_rework.sql", "db_update/peq_aa_tables_post_rework.sql"); + get_remote_file($eqemu_repository_request_url . "utils/sql/peq_aa_tables_post_rework.sql", + "db_update/peq_aa_tables_post_rework.sql"); print "[Install] Installing AA Tables...\n"; print get_mysql_result_from_file("db_update/peq_aa_tables_post_rework.sql"); print "[Install] Done...\n\n"; } #::: Fetch Latest Opcodes -sub opcodes_fetch { +sub opcodes_fetch +{ print "[Update] Pulling down latest opcodes...\n"; - %opcodes = ( + my %opcodes = ( 1 => [ "opcodes", $eqemu_repository_request_url . "utils/patches/opcodes.conf" ], 2 => [ "mail_opcodes", $eqemu_repository_request_url . "utils/patches/mail_opcodes.conf" ], 3 => [ "Titanium", $eqemu_repository_request_url . "utils/patches/patch_Titanium.conf" ], @@ -1372,23 +1455,29 @@ sub opcodes_fetch { 7 => [ "Rain of Fear", $eqemu_repository_request_url . "utils/patches/patch_RoF.conf" ], 8 => [ "Rain of Fear 2", $eqemu_repository_request_url . "utils/patches/patch_RoF2.conf" ], ); - $loop = 1; + my $loop = 1; while ($opcodes{$loop}[0]) { #::: Split the request_url by the patches folder to get the file name from request_url - @real_file = split("patches/", $opcodes{$loop}[1]); - $find = 0; + my @real_file = split("patches/", $opcodes{$loop}[1]); + my $find = 0; while ($real_file[$find]) { $file_name = $real_file[$find]; $find++; } - get_remote_file($opcodes{$loop}[1], $file_name); + my $file_path = $opcodes_path; + if ($file_name =~ /patch_/i) { + $file_path = $patches_path; + } + + get_remote_file($opcodes{$loop}[1], $file_path . $file_name); $loop++; } print "[Update] Done...\n"; } -sub remove_duplicate_rule_values { +sub remove_duplicate_rule_values +{ $ruleset_id = trim(get_mysql_result("SELECT `ruleset_id` FROM `rule_sets` WHERE `name` = 'default'")); print "[Database] Default Ruleset ID: " . $ruleset_id . "\n"; @@ -1417,10 +1506,11 @@ sub remove_duplicate_rule_values { print "[Database] Total duplicate rules removed... " . $total_removed . "\n"; } -sub copy_file { +sub copy_file +{ $l_source_file = $_[0]; $l_destination_file = $_[1]; - + if ($l_destination_file =~ /\//i) { my @directory_path = split('/', $l_destination_file); $build_path = ""; @@ -1439,13 +1529,16 @@ sub copy_file { $directory_index++; } } - + copy $l_source_file, $l_destination_file; } -sub fetch_latest_windows_appveyor { +sub fetch_latest_windows_appveyor +{ print "[Update] Fetching Latest Windows Binaries (unstable) from Appveyor... \n"; - get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server-87crp/artifacts/build_x64.zip", "updates_staged/build_x64.zip", 1); + get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server-pglwk/artifacts/build_x64.zip", + "updates_staged/build_x64.zip", + 1); print "[Update] Fetched Latest Windows Binaries (unstable) from Appveyor... \n"; print "[Update] Extracting... --- \n"; @@ -1453,46 +1546,52 @@ sub fetch_latest_windows_appveyor { my @files; my $start_dir = "updates_staged/binaries"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { - $destination_file = $file; + my $destination_file = $file; $destination_file =~ s/updates_staged\/binaries\///g; - print "[Update] Installing :: " . $destination_file . "\n"; - copy_file($file, $destination_file); + print "[Update] Installing [" . $bin_dir . $destination_file . "]\n"; + copy_file($file, $bin_dir . $destination_file); } print "[Update] Done\n"; rmtree('updates_staged'); } -sub fetch_latest_windows_binaries { +sub fetch_latest_windows_binaries +{ print "[Update] Fetching Latest Windows Binaries... \n"; - get_remote_file($install_repository_request_url . "master_windows_build.zip", "updates_staged/master_windows_build.zip", 1); + get_remote_file($install_repository_request_url . "master_windows_build.zip", + "updates_staged/master_windows_build.zip", + 1); print "[Update] Fetched Latest Windows Binaries... \n"; print "[Update] Extracting... --- \n"; unzip('updates_staged/master_windows_build.zip', 'updates_staged/binaries/'); my @files; my $start_dir = "updates_staged/binaries"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { - $destination_file = $file; + my $destination_file = $file; $destination_file =~ s/updates_staged\/binaries\///g; - print "[Update] Installing :: " . $destination_file . "\n"; - copy_file($file, $destination_file); + print "[Update] Installing [" . $bin_dir . $destination_file . "]\n"; + copy_file($file, $bin_dir . $destination_file); } print "[Update] Done\n"; rmtree('updates_staged'); } -sub fetch_latest_windows_appveyor_bots { +sub fetch_latest_windows_appveyor_bots +{ print "[Update] Fetching Latest Windows Binaries with Bots (unstable) from Appveyor... \n"; - get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server/artifacts/eqemu-x86-bots.zip", "updates_staged/eqemu-x86-bots.zip", 1); + get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server/artifacts/eqemu-x86-bots.zip", + "updates_staged/eqemu-x86-bots.zip", + 1); print "[Update] Fetched Latest Windows Binaries (unstable) from Appveyor... \n"; print "[Update] Extracting... --- \n"; @@ -1500,23 +1599,26 @@ sub fetch_latest_windows_appveyor_bots { my @files; my $start_dir = "updates_staged/binaries"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { $destination_file = $file; $destination_file =~ s/updates_staged\/binaries\///g; - print "[Update] Installing :: " . $destination_file . "\n"; - copy_file($file, $destination_file); + print "[Update] Installing [" . $bin_dir . $destination_file . "]\n"; + copy_file($file, $bin_dir . $destination_file); } print "[Update] Done\n"; rmtree('updates_staged'); } -sub fetch_latest_windows_binaries_bots { +sub fetch_latest_windows_binaries_bots +{ print "[Update] Fetching Latest Windows Binaries with Bots...\n"; - get_remote_file($install_repository_request_url . "master_windows_build_bots.zip", "updates_staged/master_windows_build_bots.zip", 1); + get_remote_file($install_repository_request_url . "master_windows_build_bots.zip", + "updates_staged/master_windows_build_bots.zip", + 1); print "[Update] Fetched Latest Windows Binaries with Bots...\n"; print "[Update] Extracting...\n"; @@ -1524,41 +1626,38 @@ sub fetch_latest_windows_binaries_bots { my @files; my $start_dir = "updates_staged/binaries"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { $destination_file = $file; $destination_file =~ s/updates_staged\/binaries\///g; - print "[Install] Installing :: " . $destination_file . "\n"; - copy_file($file, $destination_file); + print "[Install] Installing [" . $bin_dir . $destination_file . "]\n"; + copy_file($file, $bin_dir . $destination_file); } print "[Update] Done...\n"; rmtree('updates_staged'); } -sub do_windows_login_server_setup { - print "[Install] Fetching Loginserver... \n"; - get_remote_file($install_repository_request_url . "login_server.zip", "updates_staged/login_server.zip", 1); - print "[Install] Extracting... \n"; - unzip('updates_staged/login_server.zip', 'updates_staged/login_server/'); - my @files; - my $start_dir = "updates_staged/login_server"; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - $destination_file = $file; - $destination_file =~ s/updates_staged\/login_server\///g; - print "[Install] Installing :: " . $destination_file . "\n"; - copy_file($file, $destination_file); - } - print "[Install] Done... \n"; - +sub do_windows_login_server_setup +{ print "[Install] Pulling down Loginserver database tables...\n"; - get_remote_file($eqemu_repository_request_url . "loginserver/login_util/login_schema.sql", "db_update/login_schema.sql"); + get_remote_file( + $eqemu_repository_request_url . "loginserver/login_util/login_schema.sql", + "db_update/login_schema.sql" + ); + + get_remote_file( + $eqemu_repository_request_url . "loginserver/login_util/login_opcodes_sod.conf", + $opcodes_path . "login_opcodes_sod.conf" + ); + + get_remote_file( + $eqemu_repository_request_url . "loginserver/login_util/login_opcodes.conf", + $opcodes_path . "login_opcodes.conf" + ); + print "[Install] Installing Loginserver tables...\n"; print get_mysql_result_from_file("db_update/login_schema.sql"); print "[Install] Done...\n"; @@ -1578,20 +1677,22 @@ sub do_windows_login_server_setup { } -sub do_linux_login_server_setup { +sub do_linux_login_server_setup +{ build_linux_source(); for my $file (@files) { $destination_file = $file; $destination_file =~ s/updates_staged\/login_server\///g; - print "[Install] Installing :: " . $destination_file . "\n"; + print "[Install] Installing [" . $destination_file . "]\n"; copy_file($file, $destination_file); } print "\n Done... \n"; print "[Install] Pulling down Loginserver database tables...\n"; - get_remote_file($eqemu_repository_request_url . "loginserver/login_util/login_schema.sql", "db_update/login_schema.sql"); + get_remote_file($eqemu_repository_request_url . "loginserver/login_util/login_schema.sql", + "db_update/login_schema.sql"); print "[Install] Installing Loginserver tables...\n"; print get_mysql_result_from_file("db_update/login_schema.sql"); print "[Install] Done...\n\n"; @@ -1614,7 +1715,8 @@ sub do_linux_login_server_setup { } -sub add_login_server_firewall_rules { +sub add_login_server_firewall_rules +{ #::: Check Loginserver Firewall install for Windows if ($OS eq "Windows") { $output = `netsh advfirewall firewall show rule name=all`; @@ -1672,7 +1774,8 @@ sub add_login_server_firewall_rules { } } -sub check_windows_firewall_rules { +sub check_windows_firewall_rules +{ $output = `netsh advfirewall firewall show rule name=all`; @output_buffer = split("\n", $output); $has_world_rules = 0; @@ -1705,48 +1808,51 @@ sub check_windows_firewall_rules { } } -sub fetch_server_dlls { - print "[Download] Fetching lua51.dll, zlib1.dll, zlib1.pdb, libmysql.dll...\n"; - get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); - #get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); - #get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); - get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); +sub fetch_server_dlls +{ + # print "[Download] Fetching lua51.dll, zlib1.dll, zlib1.pdb, libmysql.dll...\n"; + # get_remote_file($install_repository_request_url . "lua51.dll", "lua51.dll", 1); + # get_remote_file($install_repository_request_url . "zlib1.dll", "zlib1.dll", 1); + # get_remote_file($install_repository_request_url . "zlib1.pdb", "zlib1.pdb", 1); + # get_remote_file($install_repository_request_url . "libmysql.dll", "libmysql.dll", 1); } -sub fetch_peq_db_full { +sub fetch_peq_db_full +{ print "[Install] Downloading latest PEQ Database... Please wait...\n"; get_remote_file("http://db.projecteq.net/api/v1/dump/latest", "updates_staged/peq-latest.zip", 1); print "[Install] Downloaded latest PEQ Database... Extracting...\n"; unzip('updates_staged/peq-latest.zip', 'updates_staged/peq_db/'); my $start_dir = "updates_staged/peq_db/peq-dump"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { $destination_file = $file; $destination_file =~ s/updates_staged\/peq_db\/peq-dump\///g; if ($file =~ /create_tables_content|create_tables_login|create_tables_player|create_tables_queryserv|create_tables_state|create_tables_system/i) { - print "[Install] DB :: Installing :: " . $destination_file . "\n"; + print "[Install] Database sourcing [" . $destination_file . "]\n"; get_mysql_result_from_file($file); } } } -sub map_files_fetch_bulk { +sub map_files_fetch_bulk +{ print "[Install] Fetching Latest Maps... (This could take a few minutes...)\n"; get_remote_file("http://github.com/Akkadius/EQEmuMaps/archive/master.zip", "maps/maps.zip", 1); unzip('maps/maps.zip', 'maps/'); my @files; my $start_dir = "maps/EQEmuMaps-master/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { $destination_file = $file; $destination_file =~ s/maps\/EQEmuMaps-master\///g; - print "[Install] Installing :: " . $destination_file . "\n"; + print "[Install] Installing [" . $destination_file . "]\n"; copy_file($file, "maps/" . $destination_file); } print "[Install] Fetched Latest Maps\n"; @@ -1755,10 +1861,12 @@ sub map_files_fetch_bulk { unlink('maps/maps.zip'); } -sub map_files_fetch { +sub map_files_fetch +{ print "[Install] Fetching Latest Maps --- \n"; - get_remote_file("https://raw.githubusercontent.com/Akkadius/EQEmuMaps/master/!eqemu_maps_manifest.txt", "updates_staged/eqemu_maps_manifest.txt"); + get_remote_file("https://raw.githubusercontent.com/Akkadius/EQEmuMaps/master/!eqemu_maps_manifest.txt", + "updates_staged/eqemu_maps_manifest.txt"); #::: Get Data from manifest open(FILE, "updates_staged/eqemu_maps_manifest.txt"); @@ -1780,7 +1888,9 @@ sub map_files_fetch { my $file_existing_size = (stat $file_existing)[7]; if ($file_existing_size != $maps_manifest[$m][1]) { print "[Install] Updating: '" . $maps_manifest[$m][0] . "'\n"; - get_remote_file("https://raw.githubusercontent.com/Akkadius/EQEmuMaps/master/" . $maps_manifest[$m][0], $maps_manifest[$m][0], 1); + get_remote_file("https://raw.githubusercontent.com/Akkadius/EQEmuMaps/master/" . $maps_manifest[$m][0], + $maps_manifest[$m][0], + 1); $fc++; } } @@ -1790,10 +1900,13 @@ sub map_files_fetch { } } -sub quest_files_fetch { +sub quest_files_fetch +{ if (!-e "updates_staged/projecteqquests-master/") { print "[Update] Fetching Latest Quests --- \n"; - get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", "updates_staged/projecteqquests-master.zip", 1); + get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", + "updates_staged/projecteqquests-master.zip", + 1); print "[Install] Fetched latest quests...\n"; mkdir('updates_staged'); unzip('updates_staged/projecteqquests-master.zip', 'updates_staged/'); @@ -1806,7 +1919,7 @@ sub quest_files_fetch { my @files; my $start_dir = "updates_staged/projecteqquests-master/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { @@ -1817,7 +1930,7 @@ sub quest_files_fetch { if (!-e $destination_file) { copy_file($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n"; + print "[Install] Installing [" . $destination_file . "]\n"; $fc++; } else { @@ -1835,7 +1948,7 @@ sub quest_files_fetch { copy_file($destination_file, $backup_dest); #::: Copy staged to running copy($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n\n"; + print "[Install] Installing [" . $destination_file . "]\n\n"; } $fc++; } @@ -1846,14 +1959,17 @@ sub quest_files_fetch { if ($fc == 0) { print "[Update] No Quest Updates found... \n\n"; } - + rmtree("updates_staged/"); } -sub lua_modules_fetch { +sub lua_modules_fetch +{ if (!-e "updates_staged/projecteqquests-master/") { print "[Update] Fetching Latest lua modules --- \n"; - get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", "updates_staged/projecteqquests-master.zip", 1); + get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", + "updates_staged/projecteqquests-master.zip", + 1); print "[Install] Fetched latest lua modules...\n"; mkdir('updates_staged'); unzip('updates_staged/projecteqquests-master.zip', 'updates_staged/'); @@ -1868,7 +1984,7 @@ sub lua_modules_fetch { my @files; my $start_dir = "updates_staged/projecteqquests-master/lua_modules/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { @@ -1909,10 +2025,13 @@ sub lua_modules_fetch { } } -sub plugins_fetch { +sub plugins_fetch +{ if (!-e "updates_staged/projecteqquests-master/") { print "[Update] Fetching Latest plugins --- \n"; - get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", "updates_staged/projecteqquests-master.zip", 1); + get_remote_file("https://codeload.github.com/ProjectEQ/projecteqquests/zip/master", + "updates_staged/projecteqquests-master.zip", + 1); print "[Install] Fetched latest plugins...\n"; mkdir('updates_staged'); unzip('updates_staged/projecteqquests-master.zip', 'updates_staged/'); @@ -1927,7 +2046,7 @@ sub plugins_fetch { my @files; my $start_dir = "updates_staged/projecteqquests-master/plugins/"; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { @@ -1968,7 +2087,8 @@ sub plugins_fetch { } } -sub do_file_diff { +sub do_file_diff +{ $file_1 = $_[0]; $file_2 = $_[1]; if ($OS eq "Windows") { @@ -1982,7 +2102,8 @@ sub do_file_diff { } } -sub unzip { +sub unzip +{ $archive_to_unzip = $_[0]; $dest_folder = $_[1]; @@ -2000,7 +2121,8 @@ sub unzip { } } -sub are_file_sizes_different { +sub are_file_sizes_different +{ $file_1 = $_[0]; $file_2 = $_[1]; my $file_1 = (stat $file_1)[7]; @@ -2012,7 +2134,8 @@ sub are_file_sizes_different { return; } -sub do_bots_db_schema_drop { +sub do_bots_db_schema_drop +{ #"drop_bots.sql" is run before reverting database back to 'normal' print "[Database] Fetching drop_bots.sql...\n"; get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/drop_bots.sql", "db_update/drop_bots.sql"); @@ -2038,7 +2161,8 @@ sub do_bots_db_schema_drop { print "[Database] Done...\n"; } -sub modify_db_for_bots { +sub modify_db_for_bots +{ #Called after the db bots schema (2015_09_30_bots.sql) has been loaded print "[Database] Modifying database for bots...\n"; print get_mysql_result("UPDATE `spawn2` SET `enabled` = 1 WHERE `id` IN (59297,59298);"); @@ -2055,7 +2179,8 @@ sub modify_db_for_bots { convert_existing_bot_data(); } -sub convert_existing_bot_data { +sub convert_existing_bot_data +{ if (get_mysql_result("SHOW TABLES LIKE 'bots'") ne "" && $db) { print "[Database] Converting existing bot data...\n"; print get_mysql_result("INSERT INTO `bot_data` (`bot_id`, `owner_id`, `spells_id`, `name`, `last_name`, `zone_id`, `gender`, `race`, `class`, `level`, `creation_day`, `last_spawn`, `time_spawned`, `size`, `face`, `hair_color`, `hair_style`, `beard`, `beard_color`, `eye_color_1`, `eye_color_2`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `ac`, `atk`, `hp`, `mana`, `str`, `sta`, `cha`, `dex`, `int`, `agi`, `wis`, `fire`, `cold`, `magic`, `poison`, `disease`, `corruption`) SELECT `BotID`, `BotOwnerCharacterID`, `BotSpellsID`, `Name`, `LastName`, `LastZoneId`, `Gender`, `Race`, `Class`, `BotLevel`, UNIX_TIMESTAMP(`BotCreateDate`), UNIX_TIMESTAMP(`LastSpawnDate`), `TotalPlayTime`, `Size`, `Face`, `LuclinHairColor`, `LuclinHairStyle`, `LuclinBeard`, `LuclinBeardColor`, `LuclinEyeColor`, `LuclinEyeColor2`, `DrakkinHeritage`, `DrakkinTattoo`, `DrakkinDetails`, `AC`, `ATK`, `HP`, `Mana`, `STR`, `STA`, `CHA`, `DEX`, `_INT`, `AGI`, `WIS`, `FR`, `CR`, `MR`, `PR`, `DR`, `Corrup` FROM `bots`;"); @@ -2150,50 +2275,54 @@ sub convert_existing_bot_data { } } -sub get_main_db_version { +sub get_main_db_version +{ $main_local_db_version = trim(get_mysql_result("SELECT version FROM db_version LIMIT 1")); return $main_local_db_version; } -sub get_bots_db_version { +sub get_bots_db_version +{ #::: Check if bots_version column exists... if (get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'bots_version'") eq "" && $db) { print get_mysql_result("ALTER TABLE db_version ADD bots_version int(11) DEFAULT '0' AFTER version;"); print "[Database] Column 'bots_version' does not exists.... Adding to 'db_version' table...\n\n"; } - + $bots_local_db_version = trim(get_mysql_result("SELECT bots_version FROM db_version LIMIT 1")); return $bots_local_db_version; } #::: Safe for call from world startup or menu option -sub bots_db_management { +sub bots_db_management +{ #::: If we have stale data from main db run if ($db_run_stage > 0 && $bots_db_management == 0) { clear_database_runs(); } - + #::: Main Binary Database version $binary_database_version = trim($db_version[2]); if ($binary_database_version == 0) { print "[Database] Your server binaries (world/zone) are not compiled for bots...\n\n"; return; } - $local_database_version = get_bots_db_version(); - + $local_database_version = get_bots_db_version(); + #::: Set on flag for running bot updates... $bots_db_management = 1; - + if ($local_database_version > $binary_database_version) { print "[Update] Bots database version is ahead of current binaries...\n"; return; } - + run_database_check(); } #::: Safe for call from world startup or menu option -sub main_db_management { +sub main_db_management +{ #::: If we have stale data from bots db run if ($db_run_stage > 0 && $bots_db_management == 1) { clear_database_runs(); @@ -2201,19 +2330,20 @@ sub main_db_management { #::: Main Binary Database version $binary_database_version = trim($db_version[1]); - $local_database_version = get_main_db_version(); + $local_database_version = get_main_db_version(); $bots_db_management = 0; - + if ($local_database_version > $binary_database_version) { print "[Update] Database version is ahead of current binaries...\n"; return; } - + run_database_check(); } -sub clear_database_runs { +sub clear_database_runs +{ # print "DEBUG :: clear_database_runs\n\n"; #::: Clear manifest data... %m_d = (); @@ -2222,27 +2352,30 @@ sub clear_database_runs { } #::: Responsible for Database Upgrade Routines -sub run_database_check { - +sub run_database_check +{ + if (!$db) { print "No database present, check your eqemu_config.xml for proper MySQL/MariaDB configuration...\n"; return; } - + #::: Pull down bots database manifest if ($bots_db_management == 1) { print "[Database] Retrieving latest bots database manifest...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/bots_db_update_manifest.txt", "db_update/db_update_manifest.txt"); + get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/bots_db_update_manifest.txt", + "db_update/db_update_manifest.txt"); } #::: Pull down mainstream database manifest else { print "[Database] Retrieving latest database manifest...\n"; - get_remote_file($eqemu_repository_request_url . "utils/sql/db_update_manifest.txt", "db_update/db_update_manifest.txt"); + get_remote_file($eqemu_repository_request_url . "utils/sql/db_update_manifest.txt", + "db_update/db_update_manifest.txt"); } - + #::: Parse manifest print "[Database] Reading manifest...\n"; - + use Data::Dumper; open(FILE, "db_update/db_update_manifest.txt"); while () { @@ -2251,11 +2384,11 @@ sub run_database_check { if ($o =~ /#/i) { next; } - + @manifest = split('\|', $o); $m_d{$manifest[0]} = [ @manifest ]; } - + #::: This is where we set checkpoints for where a database might be so we don't check so far back in the manifest... if ($local_database_version >= 9000) { $revision_check = $local_database_version + 1; @@ -2267,21 +2400,21 @@ sub run_database_check { $revision_check = 8999; } } - + @total_updates = (); - + #::: Fetch and register sqls for this database update cycle for ($i = $revision_check; $i <= $binary_database_version; $i++) { if (!defined($m_d{$i}[0])) { next; } - + $file_name = trim($m_d{$i}[1]); print "[Database] fetching update: " . $i . " '" . $file_name . "' \n"; fetch_missing_db_update($i, $file_name); push(@total_updates, $i); } - + if (scalar(@total_updates) == 0) { print "[Database] No updates need to be run...\n"; if ($bots_db_management == 1) { @@ -2292,11 +2425,11 @@ sub run_database_check { print "[Database] Setting Database to Binary Version (" . $binary_database_version . ") if not already...\n\n"; get_mysql_result("UPDATE db_version SET version = $binary_database_version "); } - + clear_database_runs(); return; } - + #::: Execute pending updates @total_updates = sort @total_updates; foreach my $val (@total_updates) { @@ -2304,7 +2437,7 @@ sub run_database_check { $query_check = trim($m_d{$val}[2]); $match_type = trim($m_d{$val}[3]); $match_text = trim($m_d{$val}[4]); - + #::: Match type update if ($match_type eq "contains") { if (trim(get_mysql_result($query_check)) =~ /$match_text/i) { @@ -2350,23 +2483,23 @@ sub run_database_check { print_match_debug(); print_break(); } - + if ($bots_db_management == 1) { print get_mysql_result("UPDATE db_version SET bots_version = $val WHERE bots_version < $val"); - + if ($val == 9000) { modify_db_for_bots(); } } else { print get_mysql_result("UPDATE db_version SET version = $val WHERE version < $val"); - + if ($val == 9138) { fix_quest_factions(); } } } - + if ($bots_db_management == 1) { print "[Database] Bots database update cycle complete at version [" . get_bots_db_version() . "]\n"; } @@ -2376,39 +2509,46 @@ sub run_database_check { } -sub fetch_missing_db_update { +sub fetch_missing_db_update +{ $db_update = $_[0]; $update_file = $_[1]; - + if ($bots_db_management == 1) { if ($db_update >= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/required/" . $update_file, "db_update/" . $update_file . ""); + get_remote_file($eqemu_repository_request_url . "utils/sql/git/bots/required/" . $update_file, + "db_update/" . $update_file . ""); } } else { if ($db_update >= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/git/required/" . $update_file, "db_update/" . $update_file . ""); + get_remote_file($eqemu_repository_request_url . "utils/sql/git/required/" . $update_file, + "db_update/" . $update_file . ""); } elsif ($db_update >= 5000 && $db_update <= 9000) { - get_remote_file($eqemu_repository_request_url . "utils/sql/svn/" . $update_file, "db_update/" . $update_file . ""); + get_remote_file($eqemu_repository_request_url . "utils/sql/svn/" . $update_file, + "db_update/" . $update_file . ""); } } } -sub print_match_debug { - if (!$debug) { return; } +sub print_match_debug +{ + if (!$debug) {return;} print " Match Type: '" . $match_type . "'\n"; print " Match Text: '" . $match_text . "'\n"; print " Query Check: '" . $query_check . "'\n"; print " Result: '" . trim(get_mysql_result($query_check)) . "'\n"; } -sub print_break { - if (!$debug) { return; } +sub print_break +{ + if (!$debug) {return;} print "\n==============================================\n"; } -sub generate_random_password { +sub generate_random_password +{ my $passwordsize = shift; my @alphanumeric = ('a' .. 'z', 'A' .. 'Z', 0 .. 9); my $randpassword = join '', @@ -2417,7 +2557,8 @@ sub generate_random_password { return $randpassword; } -sub quest_heading_convert { +sub quest_heading_convert +{ if (trim(get_mysql_result("SELECT value FROM variables WHERE varname = 'new_heading_conversion'")) eq "true") { print "Conversion script has already ran... doing this again would skew proper heading values in function calls...\n"; @@ -2442,13 +2583,13 @@ sub quest_heading_convert { my @files; my $start_dir = "quests/."; find( - sub { push @files, $File::Find::name unless -d; }, + sub {push @files, $File::Find::name unless -d;}, $start_dir ); for my $file (@files) { #::: Skip non script files - if ($file !~ /lua|pl/i) { next; } + if ($file !~ /lua|pl/i) {next;} if ($file =~ /lua|pl/i) { $print_buffer = ""; @@ -2550,125 +2691,129 @@ sub quest_heading_convert { } -sub quest_faction_convert { +sub quest_faction_convert +{ - if(trim(get_mysql_result("SELECT value FROM variables WHERE varname = 'new_faction_conversion'")) eq "true") { - print "Conversion script has already ran... doing this again would skew proper faction values in function calls...\n"; - exit; - } + if (trim(get_mysql_result("SELECT value FROM variables WHERE varname = 'new_faction_conversion'")) eq "true") { + print "Conversion script has already ran... doing this again would skew proper faction values in function calls...\n"; + exit; + } - %matches = ( - 0 => [ "GetCharacterFactionLevel", 0], - 1 => [ "GetModCharacterFactionLevel", 0], - 2 => [ "SetFactionLevel2", 1], - 3 => [ "GetFactionLevel", 5 ], - 4 => [ "CheckNPCFactionAlly", 0 ], - 5 => [ ":Faction", 0 ], - ); + %matches = ( + 0 => [ "GetCharacterFactionLevel", 0 ], + 1 => [ "GetModCharacterFactionLevel", 0 ], + 2 => [ "SetFactionLevel2", 1 ], + 3 => [ "GetFactionLevel", 5 ], + 4 => [ "CheckNPCFactionAlly", 0 ], + 5 => [ ":Faction", 0 ], + ); - $total_matches = 0; + $total_matches = 0; - use Scalar::Util qw(looks_like_number); + use Scalar::Util qw(looks_like_number); - my @files; - my $start_dir = "quests/."; - find( - sub {push @files, $File::Find::name unless -d;}, - $start_dir - ); - for my $file (@files) { + my @files; + my $start_dir = "quests/."; + find( + sub {push @files, $File::Find::name unless -d;}, + $start_dir + ); + for my $file (@files) { - #::: Skip non script files - if ($file !~ /lua|pl/i) { - next; - } + #::: Skip non script files + if ($file !~ /lua|pl/i) { + next; + } - if ($file =~ /lua|pl/i) { - $print_buffer = ""; - $changes_made = 0; + if ($file =~ /lua|pl/i) { + $print_buffer = ""; + $changes_made = 0; - #::: Open and read line by line - open(FILE, $file); - while () { - chomp; - $line = $_; + #::: Open and read line by line + open(FILE, $file); + while () { + chomp; + $line = $_; - #::: Loop through matches - foreach my $key (sort (keys %matches)) { - $argument_position = $matches{$key}[1]; - $match = $matches{$key}[0]; + #::: Loop through matches + foreach my $key (sort (keys %matches)) { + $argument_position = $matches{$key}[1]; + $match = $matches{$key}[0]; - if ($line =~ /$match\(/i || $line =~ /$match \(/i) { - $line_temp = $line; - $line_temp =~ s/^.*$match\(//gi; - $line_temp =~ s/^.*$match \(//gi; - $line_temp =~ s/"//g; - $line_temp =~ s/\);.*//; + if ($line =~ /$match\(/i || $line =~ /$match \(/i) { + $line_temp = $line; + $line_temp =~ s/^.*$match\(//gi; + $line_temp =~ s/^.*$match \(//gi; + $line_temp =~ s/"//g; + $line_temp =~ s/\);.*//; - @line_data = split(",", $line_temp); + @line_data = split(",", $line_temp); - $faction_value = $line_data[$argument_position]; - $faction_value_clean = trim($faction_value); + $faction_value = $line_data[$argument_position]; + $faction_value_clean = trim($faction_value); - if (looks_like_number($faction_value_clean)) { - $new_faction = get_mysql_result("select clientid from client_server_faction_map where serverid = $faction_value_clean"); - chomp $new_faction; - if ($new_faction == 0) { - $new_faction = get_mysql_result("select new_faction from custom_faction_mappings where old_faction = $faction_value_clean"); - chomp $new_faction; - } - if ($new_faction > 0) { - print "BEFORE: " . $line . "\n"; - $line =~ s/$faction_value_clean/$new_faction/g; - print "AFTER: " . $line . "\n"; - $changes_made = 1; - } - else { - print "Unknown Faction: '$match' FACTION VALUE: '" . $faction_value_clean . "'\n"; - } - } + if (looks_like_number($faction_value_clean)) { + $new_faction = + get_mysql_result("select clientid from client_server_faction_map where serverid = $faction_value_clean"); + chomp $new_faction; + if ($new_faction == 0) { + $new_faction = + get_mysql_result("select new_faction from custom_faction_mappings where old_faction = $faction_value_clean"); + chomp $new_faction; + } + if ($new_faction > 0) { + print "BEFORE: " . $line . "\n"; + $line =~ s/$faction_value_clean/$new_faction/g; + print "AFTER: " . $line . "\n"; + $changes_made = 1; + } + else { + print "Unknown Faction: '$match' FACTION VALUE: '" . $faction_value_clean . "'\n"; + } + } - $total_matches++; - } - } + $total_matches++; + } + } - $print_buffer .= $line . "\n"; - } - close(FILE); + $print_buffer .= $line . "\n"; + } + close(FILE); - #::: Write changes - if ($changes_made == 1) { - open(NEW_FILE, '>', $file); - print NEW_FILE $print_buffer; - close NEW_FILE; - } - } - } + #::: Write changes + if ($changes_made == 1) { + open(NEW_FILE, '>', $file); + print NEW_FILE $print_buffer; + close NEW_FILE; + } + } + } - #::: Mark conversion as ran - print get_mysql_result("INSERT INTO `variables` (varname, value, information, ts) VALUES ('new_faction_conversion', 'true', 'Script ran against quests folder to convert new faction values', NOW())"); + #::: Mark conversion as ran + print get_mysql_result("INSERT INTO `variables` (varname, value, information, ts) VALUES ('new_faction_conversion', 'true', 'Script ran against quests folder to convert new faction values', NOW())"); - print "Total matches: " . $total_matches . "\n"; + print "Total matches: " . $total_matches . "\n"; } -sub fix_quest_factions { - # Backup the quests - mkdir('backups'); - my @files; - my $start_dir = "quests/"; - find( - sub { push @files, $File::Find::name unless -d; }, - $start_dir - ); - for my $file (@files) { - $destination_file = $file; - my $date = strftime "%m-%d-%Y", localtime; - $destination_file =~ s/quests/quests-$date/; - print "Backing up :: " . $destination_file . "\n"; -# unlink($destination_file); - copy_file($file, 'backups/' . $destination_file); - } +sub fix_quest_factions +{ + # Backup the quests + mkdir('backups'); + my @files; + my $start_dir = "quests/"; + find( + sub {push @files, $File::Find::name unless -d;}, + $start_dir + ); + for my $file (@files) { + $destination_file = $file; + my $date = strftime "%m-%d-%Y", localtime; + $destination_file =~ s/quests/quests-$date/; + print "Backing up :: " . $destination_file . "\n"; + # unlink($destination_file); + copy_file($file, 'backups/' . $destination_file); + } - # Fix the factions - quest_faction_convert(); + # Fix the factions + quest_faction_convert(); } From d534d345d5ce22f859968daa9dbab2e570e16292 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 03:35:16 -0500 Subject: [PATCH 144/272] More tweaks [skip ci] --- utils/scripts/eqemu_server.pl | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index a27a59fc4..da06bcf8b 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -104,16 +104,24 @@ if (-e "eqemu_update.pl") { print "[Info] For EQEmu Server management utilities - run eqemu_server.pl\n" if $ARGV[0] eq "ran_from_world"; -check_db_version_table(); +my $skip_checks = 0; +if ($ARGV[0] && $ARGV[0] eq "new_server") { + $skip_checks = 1; +} -#::: Check if db_version table exists... -if (trim(get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'Revision'")) ne "" && $db) { - print get_mysql_result("DROP TABLE db_version"); - print "[Database] Old db_version table present, dropping...\n\n"; +if ($skip_checks == 0) { + check_db_version_table(); + + #::: Check if db_version table exists... + if (trim(get_mysql_result("SHOW COLUMNS FROM db_version LIKE 'Revision'")) ne "" && $db) { + print get_mysql_result("DROP TABLE db_version"); + print "[Database] Old db_version table present, dropping...\n\n"; + } } check_for_world_bootup_database_update(); + sub urlencode { my ($rv) = @_; @@ -568,6 +576,9 @@ sub check_for_world_bootup_database_update $world_path = "bin/world.exe"; } + $binary_database_version = 0; + $local_database_version = 0; + # Usually hit during installer when world hasn't been installed yet... if (-e $world_path) { if ($OS eq "Windows") { @@ -576,10 +587,10 @@ sub check_for_world_bootup_database_update if ($OS eq "Linux") { @db_version = split(': ', `./$world_path db_version`); } - } - $binary_database_version = trim($db_version[1]); - $local_database_version = get_main_db_version(); + $binary_database_version = trim($db_version[1]); + $local_database_version = get_main_db_version(); + } if ($binary_database_version == $local_database_version && $ARGV[0] eq "ran_from_world") { print "[Update] Database up to date...\n"; @@ -1704,8 +1715,8 @@ sub do_linux_login_server_setup rmtree('updates_staged'); rmtree('db_update'); - get_remote_file($install_repository_request_url . "linux/login_opcodes.conf", "login_opcodes.conf"); - get_remote_file($install_repository_request_url . "linux/login_opcodes_sod.conf", "login_opcodes_sod.conf"); + get_remote_file($install_repository_request_url . "linux/login_opcodes.conf", $opcodes_path . "login_opcodes.conf"); + get_remote_file($install_repository_request_url . "linux/login_opcodes_sod.conf", $opcodes_path . "login_opcodes_sod.conf"); get_remote_file($install_repository_request_url . "linux/server_start_with_login.sh", "server_start_with_login.sh"); system("chmod 755 *.sh"); From f785dc232bbb305cbd0f385c257c06e5a06d9e0f Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 03:37:09 -0500 Subject: [PATCH 145/272] More tweaks [skip ci] --- utils/scripts/eqemu_server.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index da06bcf8b..92703d4c9 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -2006,7 +2006,7 @@ sub lua_modules_fetch if (!-e $destination_file) { copy_file($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n"; + print "[Install] Installing [" . $destination_file . "]\n"; $fc++; } else { @@ -2023,7 +2023,7 @@ sub lua_modules_fetch copy_file($destination_file, $backup_dest); #::: Copy staged to running copy($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n\n"; + print "[Install] Installing [" . $destination_file . "]\n\n"; } $fc++; } @@ -2068,7 +2068,7 @@ sub plugins_fetch if (!-e $destination_file) { copy_file($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n"; + print "[Install] Installing [" . $destination_file . "]\n"; $fc++; } else { @@ -2085,7 +2085,7 @@ sub plugins_fetch copy_file($destination_file, $backup_dest); #::: Copy staged to running copy($staged_file, $destination_file); - print "[Install] Installing :: '" . $destination_file . "'\n\n"; + print "[Install] Installing [" . $destination_file . "]\n\n"; } $fc++; } From 5dbd2c38ed9401e331ed0426ba9a7c1696ae3b9e Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 11 May 2020 04:51:59 -0500 Subject: [PATCH 146/272] Update script [skip ci] --- utils/scripts/eqemu_server.pl | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 92703d4c9..dde632489 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -887,6 +887,23 @@ sub fetch_utility_scripts get_remote_file($install_repository_request_url . "win_server_launcher.pl", "win_server_launcher.pl"); get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", "t_start_server_with_login_server.bat"); + + get_remote_file( + $install_repository_request_url . "t_start_world.bat", + "t_start_world.bat" + ); + get_remote_file( + $install_repository_request_url . "t_start_zone.bat", + "t_start_zone.bat" + ); + get_remote_file( + $install_repository_request_url . "t_set_gm_account.bat", + "t_set_gm_account.bat" + ); + get_remote_file( + $install_repository_request_url . "t_start_shared_memory.bat", + "t_start_shared_memory.bat" + ); } else { get_remote_file($install_repository_request_url . "linux/server_launcher.pl", "server_launcher.pl"); From 94606504af082a006e38942d48ebc080a2e618d0 Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 11 May 2020 10:07:29 -0400 Subject: [PATCH 147/272] Add check for fishing pole expendable using new subtype field. --- zone/forage.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 24c4641e4..7941c2000 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -368,7 +368,8 @@ void Client::GoFish() //chance to break fishing pole... //this is potentially exploitable in that they can fish //and then swap out items in primary slot... too lazy to fix right now - if (zone->random.Int(0, 49) == 1) { + const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; + if (Pole && Pole->GetItem()->SubType == 1 && zone->random.Int(0, 49) == 1) { MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); } From fb1228946ac0151ace757fb80f36db38f2f35440 Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 11 May 2020 14:50:17 -0400 Subject: [PATCH 148/272] Add code to patchers to put support for Expendable flag on breakable fishing --- common/patches/rof.cpp | 6 ++++++ common/patches/rof2.cpp | 6 ++++++ common/patches/sod.cpp | 6 ++++++ common/patches/sof.cpp | 6 ++++++ common/patches/uf.cpp | 6 ++++++ utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql | 3 +++ 6 files changed, 33 insertions(+) create mode 100644 utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index fed2802df..dfb0f23a5 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -5356,6 +5356,12 @@ namespace RoF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + itbs.unknown8 = 0; itbs.unknown9 = 0; itbs.unknown10 = 0; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 209324740..fc841a9b1 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -5611,6 +5611,12 @@ namespace RoF2 itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + itbs.unknown8 = 0; itbs.unknown9 = 0; itbs.unknown10 = 0; diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 709b07363..753852a18 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -3631,6 +3631,12 @@ namespace SoD itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(SoD::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 9f5626100..6bfb19de5 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -3028,6 +3028,12 @@ namespace SoF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(SoF::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 4b97658d2..576996e76 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -3966,6 +3966,12 @@ namespace UF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(UF::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql b/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql new file mode 100644 index 000000000..60d8c26b4 --- /dev/null +++ b/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql @@ -0,0 +1,3 @@ +/* In July 2018 - magical poles were no longer breakable */ + +UPDATE items SET subtype = magic WHERE itemtype = 36; From b37c75630b43214cb30c658843311819b73d60ae Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 11 May 2020 14:56:38 -0400 Subject: [PATCH 149/272] Fix subtype logic --- zone/forage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 7941c2000..7a166174a 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -369,7 +369,7 @@ void Client::GoFish() //this is potentially exploitable in that they can fish //and then swap out items in primary slot... too lazy to fix right now const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; - if (Pole && Pole->GetItem()->SubType == 1 && zone->random.Int(0, 49) == 1) { + if (Pole && Pole->GetItem()->SubType == 0 && zone->random.Int(0, 49) == 1) { MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); } From ea48acbf0b94e218736425707ee497f39bef41b1 Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 11 May 2020 15:39:28 -0400 Subject: [PATCH 150/272] Added check for GetItem() failure on Pole --- zone/forage.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/zone/forage.cpp b/zone/forage.cpp index 7a166174a..069f2be63 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -369,9 +369,13 @@ void Client::GoFish() //this is potentially exploitable in that they can fish //and then swap out items in primary slot... too lazy to fix right now const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; - if (Pole && Pole->GetItem()->SubType == 0 && zone->random.Int(0, 49) == 1) { - MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! - DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); + + if (Pole) { + const EQEmu::ItemData* fishing_item = Pole->GetItem(); + if (fishing_item && fishing_item->SubType == 0 && zone->random.Int(0, 49) == 1) { + MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! + DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); + } } if (CheckIncreaseSkill(EQEmu::skills::SkillFishing, nullptr, 5)) From 5f0d3e90260dc6a522bce74d2d59d638ea617831 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 11 May 2020 20:10:52 -0400 Subject: [PATCH 151/272] Add several cross zone methods to Perl/Lua. --- common/servertalk.h | 47 +++++++++++++++ world/zoneserver.cpp | 7 +++ zone/embparser_api.cpp | 132 ++++++++++++++++++++++++++++++++++++++++- zone/lua_general.cpp | 35 +++++++++++ zone/questmgr.cpp | 76 ++++++++++++++++++++++++ zone/questmgr.h | 7 +++ zone/worldserver.cpp | 77 ++++++++++++++++++++++++ 7 files changed, 379 insertions(+), 2 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index a7e903cad..e08dbf35d 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -199,7 +199,14 @@ #define ServerOP_UCSServerStatusReply 0x4014 #define ServerOP_HotReloadQuests 0x4015 #define ServerOP_CZSignalGroup 0x4016 +#define ServerOP_CZSignalRaid 0x4017 +#define ServerOP_CZSignalGuild 0x4018 +#define ServerOP_CZMessageGroup 0x4019 +#define ServerOP_CZMessageRaid 0x4020 #define ServerOP_CZMessageGuild 0x4021 +#define ServerOP_CZSetEntityVariableByGroupID 0x4022 +#define ServerOP_CZSetEntityVariableByRaidID 0x4023 +#define ServerOP_CZSetEntityVariableByGuildID 0x4024 /** * QueryServer @@ -1174,6 +1181,16 @@ struct CZGroupSignal_Struct { uint32 data; }; +struct CZRaidSignal_Struct { + int raid_id; + uint32 data; +}; + +struct CZGuildSignal_Struct { + int guild_id; + uint32 data; +}; + struct CZNPCSignal_Struct { uint32 npctype_id; uint32 data; @@ -1341,6 +1358,18 @@ struct CZMessagePlayer_Struct { char Message[512]; }; +struct CZMessageGroup_Struct { + uint32 Type; + int GroupID; + char Message[512]; +}; + +struct CZMessageRaid_Struct { + uint32 Type; + int RaidID; + char Message[512]; +}; + struct CZMessageGuild_Struct { uint32 Type; int GuildID; @@ -1368,6 +1397,24 @@ struct CZSetEntVarByClientName_Struct { char m_var[256]; }; +struct CZSetEntVarByGroupID_Struct { + int group_id; + char id[256]; + char m_var[256]; +}; + +struct CZSetEntVarByRaidID_Struct { + int raid_id; + char id[256]; + char m_var[256]; +}; + +struct CZSetEntVarByGuildID_Struct { + int guild_id; + char id[256]; + char m_var[256]; +}; + struct ReloadWorld_Struct { uint32 Option; }; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 3d6734b05..3b1bfad38 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1238,12 +1238,19 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { } case ServerOP_CZSignalClientByName: case ServerOP_CZMessagePlayer: + case ServerOP_CZMessageGroup: + case ServerOP_CZMessageRaid: case ServerOP_CZMessageGuild: case ServerOP_CZSignalNPC: case ServerOP_CZSetEntityVariableByNPCTypeID: case ServerOP_CZSignalClient: case ServerOP_CZSignalGroup: + case ServerOP_CZSignalRaid: + case ServerOP_CZSignalGuild: case ServerOP_CZSetEntityVariableByClientName: + case ServerOP_CZSetEntityVariableByGroupID: + case ServerOP_CZSetEntityVariableByRaidID: + case ServerOP_CZSetEntityVariableByGuildID: case ServerOP_WWMarquee: case ServerOP_DepopAllPlayersCorpses: case ServerOP_DepopPlayerCorpse: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 4a24d5f3a..f926bc6fe 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3729,7 +3729,7 @@ XS(XS__crosszonesignalclientbygroupid) { Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); if (items == 2) { - int group_id = (int) SvIV(ST(0)); + int group_id = (int) SvIV(ST(0)); uint32 int_value = (uint32) SvIV(ST(1)); quest_manager.CrossZoneSignalPlayerByGroupID(group_id, int_value); } else { @@ -3739,6 +3739,42 @@ XS(XS__crosszonesignalclientbygroupid) { XSRETURN_EMPTY; } +XS(XS__crosszonesignalclientbyraidid); +XS(XS__crosszonesignalclientbyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + uint32 int_value = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, int_value); + } else { + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyguildid); +XS(XS__crosszonesignalclientbyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + uint32 int_value = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, int_value); + } else { + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalclientbyname); XS(XS__crosszonesignalclientbyname) { dXSARGS; @@ -3775,12 +3811,46 @@ XS(XS__crosszonemessageplayerbyname) { XSRETURN_EMPTY; } +XS(XS__crosszonemessageplayerbygroupid); +XS(XS__crosszonemessageplayerbygroupid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbygroupid(int type, int group_id, string message)"); + + if (items == 3) { + uint32 type = (uint32) SvIV(ST(0)); + int group_id = (int) SvIV(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByGroupID(type, group_id, message); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemessageplayerbyraidid); +XS(XS__crosszonemessageplayerbyraidid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyraidid(int type, int raid_id, string message)"); + + if (items == 3) { + uint32 type = (uint32) SvIV(ST(0)); + int raid_id = (int) SvIV(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByRaidID(type, raid_id, message); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonemessageplayerbyguildid); XS(XS__crosszonemessageplayerbyguildid) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int typ, int guild_id, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int type, int guild_id, string message)"); if (items == 3) { uint32 type = (uint32) SvIV(ST(0)); @@ -3911,6 +3981,57 @@ XS(XS__crosszonesetentityvariablebyclientname) { XSRETURN_EMPTY; } +XS(XS__crosszonesetentityvariablebygroupid); +XS(XS__crosszonesetentityvariablebygroupid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebygroupid(int group_id, string key, string value)"); + + if (items == 3) { + int group_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyraidid); +XS(XS__crosszonesetentityvariablebyraidid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyraidid(int raid_id, string key, string value)"); + + if (items == 3) { + int raid_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyguildid); +XS(XS__crosszonesetentityvariablebyguildid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyguildid(int guild_id, string key, string value)"); + + if (items == 3) { + int guild_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, key, str_value); + } + + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalnpcbynpctypeid); XS(XS__crosszonesignalnpcbynpctypeid) { dXSARGS; @@ -4208,11 +4329,18 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file); newXS(strcpy(buf, "createguild"), XS__createguild, file); newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); + newXS(strcpy(buf, "crosszonemessageplayerbygroupid"), XS__crosszonemessageplayerbygroupid, file); + newXS(strcpy(buf, "crosszonemessageplayerbyraidid"), XS__crosszonemessageplayerbyraidid, file); newXS(strcpy(buf, "crosszonemessageplayerbyguildid"), XS__crosszonemessageplayerbyguildid, file); newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); + newXS(strcpy(buf, "crosszonesetentityvariablebygroupid"), XS__crosszonesetentityvariablebygroupid, file); + newXS(strcpy(buf, "crosszonesetentityvariablebyraidid"), XS__crosszonesetentityvariablebyraidid, file); + newXS(strcpy(buf, "crosszonesetentityvariablebyguildid"), XS__crosszonesetentityvariablebyguildid, file); newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); newXS(strcpy(buf, "crosszonesignalclientbygroupid"), XS__crosszonesignalclientbygroupid, file); + newXS(strcpy(buf, "crosszonesignalclientbyraidid"), XS__crosszonesignalclientbyraidid, file); + newXS(strcpy(buf, "crosszonesignalclientbyguildid"), XS__crosszonesignalclientbyguildid, file); newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); newXS(strcpy(buf, "crosszonesignalnpcbynpctypeid"), XS__crosszonesignalnpcbynpctypeid, file); newXS(strcpy(buf, "worldwidemarquee"), XS__worldwidemarquee, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index b522d6f68..6c3392f15 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1030,6 +1030,14 @@ void lua_cross_zone_signal_client_by_group_id(uint32 group_id, int signal) { quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); } +void lua_cross_zone_signal_client_by_raid_id(uint32 raid_id, int signal) { + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, signal); +} + +void lua_cross_zone_signal_client_by_guild_id(uint32 guild_id, int signal) { + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, signal); +} + void lua_cross_zone_signal_client_by_name(const char *player, int signal) { quest_manager.CrossZoneSignalPlayerByName(player, signal); } @@ -1038,6 +1046,14 @@ void lua_cross_zone_message_player_by_name(uint32 type, const char *player, cons quest_manager.CrossZoneMessagePlayerByName(type, player, message); } +void lua_cross_zone_message_player_by_group_id(uint32 type, int group_id, const char *message) { + quest_manager.CrossZoneMessagePlayerByGroupID(type, group_id, message); +} + +void lua_cross_zone_message_player_by_raid_id(uint32 type, int raid_id, const char *message) { + quest_manager.CrossZoneMessagePlayerByRaidID(type, raid_id, message); +} + void lua_cross_zone_message_player_by_guild_id(uint32 type, int guild_id, const char *message) { quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); } @@ -1046,6 +1062,18 @@ void lua_cross_zone_set_entity_variable_by_client_name(const char *player, const quest_manager.CrossZoneSetEntityVariableByClientName(player, id, m_var); } +void lua_cross_zone_set_entity_variable_by_group_id(int group_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, id, m_var); +} + +void lua_cross_zone_set_entity_variable_by_raid_id(int raid_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, id, m_var); +} + +void lua_cross_zone_set_entity_variable_by_guild_id(int guild_id, const char *id, const char *m_var) { + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, id, m_var); +} + void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fadein, uint32 fadeout, uint32 duration, const char *message) { quest_manager.WorldWideMarquee(type, priority, fadein, fadeout, duration, message); } @@ -1848,10 +1876,17 @@ luabind::scope lua_register_general() { luabind::def("send_mail", &lua_send_mail), luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), + luabind::def("cross_zone_signal_client_by_raid_id", &lua_cross_zone_signal_client_by_raid_id), + luabind::def("cross_zone_signal_client_by_guild_id", &lua_cross_zone_signal_client_by_guild_id), luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), luabind::def("cross_zone_message_player_by_name", &lua_cross_zone_message_player_by_name), + luabind::def("cross_zone_message_player_by_group_id", &lua_cross_zone_message_player_by_group_id), + luabind::def("cross_zone_message_player_by_raid_id", &lua_cross_zone_message_player_by_raid_id), luabind::def("cross_zone_message_player_by_guild_id", &lua_cross_zone_message_player_by_guild_id), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), + luabind::def("cross_zone_set_entity_variable_by_group_id", &lua_cross_zone_set_entity_variable_by_group_id), + luabind::def("cross_zone_set_entity_variable_by_raid_id", &lua_cross_zone_set_entity_variable_by_raid_id), + luabind::def("cross_zone_set_entity_variable_by_guild_id", &lua_cross_zone_set_entity_variable_by_guild_id), luabind::def("world_wide_marquee", &lua_world_wide_marquee), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_Client))&lua_get_qglobals), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index dc4d7d111..dc2663d5a 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3220,6 +3220,24 @@ void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 data){ safe_delete(pack); } +void QuestManager::CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data){ + auto pack = new ServerPacket(ServerOP_CZSignalRaid, sizeof(CZRaidSignal_Struct)); + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer; + CZRS->raid_id = raid_id; + CZRS->data = data; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data){ + auto pack = new ServerPacket(ServerOP_CZSignalGuild, sizeof(CZGuildSignal_Struct)); + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer; + CZGS->guild_id = guild_id; + CZGS->data = data; + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSignalPlayerByName(const char *CharName, uint32 data){ uint32 message_len = strlen(CharName) + 1; auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len); @@ -3243,6 +3261,28 @@ void QuestManager::CrossZoneMessagePlayerByName(uint32 Type, const char *CharNam safe_delete(pack); } +void QuestManager::CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message){ + uint32 message_len = strlen(Message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessageGroup, sizeof(CZMessageGroup_Struct) + message_len); + CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*) pack->pBuffer; + CZGM->Type = Type; + CZGM->GroupID = GroupID; + strn0cpy(CZGM->Message, Message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message){ + uint32 message_len = strlen(Message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessageRaid, sizeof(CZMessageRaid_Struct) + message_len); + CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*) pack->pBuffer; + CZRM->Type = Type; + CZRM->RaidID = RaidID; + strn0cpy(CZRM->Message, Message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message){ uint32 message_len = strlen(Message) + 1; auto pack = new ServerPacket(ServerOP_CZMessageGuild, sizeof(CZMessageGuild_Struct) + message_len); @@ -3268,6 +3308,42 @@ void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, safe_delete(pack); } +void QuestManager::CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGroupID, sizeof(CZSetEntVarByGroupID_Struct) + message_len + message_len2); + CZSetEntVarByGroupID_Struct* CZ = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; + CZ->group_id = group_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByRaidID, sizeof(CZSetEntVarByRaidID_Struct) + message_len + message_len2); + CZSetEntVarByRaidID_Struct* CZ = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; + CZ->raid_id = raid_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var){ + uint32 message_len = strlen(id) + 1; + uint32 message_len2 = strlen(m_var) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGuildID, sizeof(CZSetEntVarByGuildID_Struct) + message_len + message_len2); + CZSetEntVarByGuildID_Struct* CZ = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; + CZ->guild_id = guild_id; + strn0cpy(CZ->id, id, 256); + strn0cpy(CZ->m_var, m_var, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var){ uint32 message_len = strlen(id) + 1; uint32 message_len2 = strlen(m_var) + 1; diff --git a/zone/questmgr.h b/zone/questmgr.h index 89901b512..6f9ab4c4e 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -280,11 +280,18 @@ public: const char *GetZoneLongName(const char *zone); void CrossZoneSignalPlayerByCharID(int charid, uint32 data); void CrossZoneSignalPlayerByGroupID(int group_id, uint32 data); + void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data); + void CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data); void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data); void CrossZoneSignalPlayerByName(const char *CharName, uint32 data); void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var); void CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var); + void CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var); void CrossZoneMessagePlayerByName(uint32 Type, const char *CharName, const char *Message); + void CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message); + void CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message); void CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message); void WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message); bool EnableRecipe(uint32 recipe_id); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index b30df9482..0279d55be 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1926,6 +1926,28 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZSignalRaid: + { + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRS->raid_id) { + client.second->Signal(CZRS->data); + } + } + break; + } + case ServerOP_CZSignalGuild: + { + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZGS->guild_id) { + client.second->Signal(CZGS->data); + } + } + break; + } case ServerOP_CZSignalClientByName: { CZClientSignalByName_Struct* CZCS = (CZClientSignalByName_Struct*)pack->pBuffer; @@ -1944,6 +1966,28 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZMessageGroup: + { + CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZGM->GroupID) { + client.second->Message(CZGM->Type, CZGM->Message); + } + } + break; + } + case ServerOP_CZMessageRaid: + { + CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRM->RaidID) { + client.second->Message(CZRM->Type, CZRM->Message); + } + } + break; + } case ServerOP_CZMessageGuild: { CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*)pack->pBuffer; @@ -1964,6 +2008,39 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZSetEntityVariableByGroupID: + { + CZSetEntVarByGroupID_Struct* CZCS = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZCS->group_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } + case ServerOP_CZSetEntityVariableByRaidID: + { + CZSetEntVarByRaidID_Struct* CZCS = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZCS->raid_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } + case ServerOP_CZSetEntityVariableByGuildID: + { + CZSetEntVarByGuildID_Struct* CZCS = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZCS->guild_id) { + client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + } + } + break; + } case ServerOP_WWMarquee: { WWMarquee_Struct* WWMS = (WWMarquee_Struct*)pack->pBuffer; From ee55755c859f933e9bec3d70d4e286357987f5f8 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 14 May 2020 23:55:55 -0400 Subject: [PATCH 152/272] Add IsTaunting() to Perl/Lua. --- zone/lua_npc.cpp | 6 ++++++ zone/lua_npc.h | 1 + zone/perl_npc.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/zone/lua_npc.cpp b/zone/lua_npc.cpp index bf52b9276..23be1e3ee 100644 --- a/zone/lua_npc.cpp +++ b/zone/lua_npc.cpp @@ -237,6 +237,11 @@ void Lua_NPC::SetTaunting(bool t) { self->SetTaunting(t); } +bool Lua_NPC::IsTaunting() { + Lua_Safe_Call_Bool(); + return self->IsTaunting(); +} + void Lua_NPC::PickPocket(Lua_Client thief) { Lua_Safe_Call_Void(); self->PickPocket(thief); @@ -602,6 +607,7 @@ luabind::scope lua_register_npc() { .def("SetPetSpellID", (void(Lua_NPC::*)(int))&Lua_NPC::SetPetSpellID) .def("GetMaxDamage", (uint32(Lua_NPC::*)(int))&Lua_NPC::GetMaxDamage) .def("SetTaunting", (void(Lua_NPC::*)(bool))&Lua_NPC::SetTaunting) + .def("IsTaunting", (bool(Lua_NPC::*)(void))&Lua_NPC::IsTaunting) .def("PickPocket", (void(Lua_NPC::*)(Lua_Client))&Lua_NPC::PickPocket) .def("StartSwarmTimer", (void(Lua_NPC::*)(uint32))&Lua_NPC::StartSwarmTimer) .def("DoClassAttacks", (void(Lua_NPC::*)(Lua_Mob))&Lua_NPC::DoClassAttacks) diff --git a/zone/lua_npc.h b/zone/lua_npc.h index 1c7c879f7..3b1714095 100644 --- a/zone/lua_npc.h +++ b/zone/lua_npc.h @@ -73,6 +73,7 @@ public: void SetPetSpellID(int id); uint32 GetMaxDamage(int level); void SetTaunting(bool t); + bool IsTaunting(); void PickPocket(Lua_Client thief); void StartSwarmTimer(uint32 duration); void DoClassAttacks(Lua_Mob target); diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index 1d40474f3..fc5d791a7 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -991,6 +991,30 @@ XS(XS_NPC_SetTaunting) { XSRETURN_EMPTY; } +XS(XS_NPC_IsTaunting); /* prototype to pass -Wmissing-prototypes */ +XS(XS_NPC_IsTaunting) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: NPC::IsTaunting(THIS)"); + { + NPC *THIS; + bool RETVAL; + + if (sv_derived_from(ST(0), "NPC")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(NPC *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type NPC"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->IsTaunting(); + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + XS(XS_NPC_PickPocket); /* prototype to pass -Wmissing-prototypes */ XS(XS_NPC_PickPocket) { dXSARGS; @@ -2528,6 +2552,7 @@ XS(boot_NPC) { newXSproto(strcpy(buf, "SetPetSpellID"), XS_NPC_SetPetSpellID, file, "$$"); newXSproto(strcpy(buf, "GetMaxDamage"), XS_NPC_GetMaxDamage, file, "$$"); newXSproto(strcpy(buf, "SetTaunting"), XS_NPC_SetTaunting, file, "$$"); + newXSproto(strcpy(buf, "IsTaunting"), XS_NPC_IsTaunting, file, "$"); newXSproto(strcpy(buf, "PickPocket"), XS_NPC_PickPocket, file, "$$"); newXSproto(strcpy(buf, "StartSwarmTimer"), XS_NPC_StartSwarmTimer, file, "$$"); newXSproto(strcpy(buf, "DoClassAttacks"), XS_NPC_DoClassAttacks, file, "$$"); From 968efe8831bb3dac369637cbf5ac4e7f011eec86 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 16 May 2020 14:30:35 -0400 Subject: [PATCH 153/272] Remove duplicate MakeTempPet definition. --- zone/perl_mob.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index cf6ef4be7..655ec6d34 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -8859,7 +8859,6 @@ XS(boot_Mob) { newXSproto(strcpy(buf, "SetDeltas"), XS_Mob_SetDeltas, file, "$$$$$"); newXSproto(strcpy(buf, "SetLD"), XS_Mob_SetLD, file, "$$"); newXSproto(strcpy(buf, "SetTargetable"), XS_Mob_SetTargetable, file, "$$"); - newXSproto(strcpy(buf, "MakeTempPet"), XS_Mob_MakeTempPet, file, "$$;$$$$"); newXSproto(strcpy(buf, "ModSkillDmgTaken"), XS_Mob_ModSkillDmgTaken, file, "$$$"); newXSproto(strcpy(buf, "GetModSkillDmgTaken"), XS_Mob_GetModSkillDmgTaken, file, "$$"); newXSproto(strcpy(buf, "GetSkillDmgTaken"), XS_Mob_GetSkillDmgTaken, file, "$$"); From ceff8b86749e2bfc8024f3193e3bdd9ca72e07d4 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 16 May 2020 14:40:36 -0400 Subject: [PATCH 154/272] Remove duplicate GetSkill() definition. --- zone/perl_client.cpp | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 1c0c42bf5..4063cba40 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1882,32 +1882,6 @@ XS(XS_Client_IncreaseLanguageSkill) { XSRETURN_EMPTY; } -XS(XS_Client_GetSkill); /* prototype to pass -Wmissing-prototypes */ -XS(XS_Client_GetSkill) { - dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: Client::GetSkill(THIS, uint16 skill_id)"); - { - Client *THIS; - uint16 RETVAL; - dXSTARG; - EQEmu::skills::SkillType skill_id = (EQEmu::skills::SkillType) SvUV(ST(1)); - - if (sv_derived_from(ST(0), "Client")) { - IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(Client *, tmp); - } else - Perl_croak(aTHX_ "THIS is not of type Client"); - if (THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - - RETVAL = THIS->GetSkill(skill_id); - XSprePUSH; - PUSHu((UV) RETVAL); - } - XSRETURN(1); -} - XS(XS_Client_GetRawSkill); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_GetRawSkill) { dXSARGS; @@ -6537,7 +6511,6 @@ XS(boot_Client) { newXSproto(strcpy(buf, "GetRaidPoints"), XS_Client_GetRaidPoints, file, "$"); newXSproto(strcpy(buf, "GetRawItemAC"), XS_Client_GetRawItemAC, file, "$"); newXSproto(strcpy(buf, "GetRawSkill"), XS_Client_GetRawSkill, file, "$$"); - newXSproto(strcpy(buf, "GetSkill"), XS_Client_GetSkill, file, "$$"); newXSproto(strcpy(buf, "GetSkillPoints"), XS_Client_GetSkillPoints, file, "$"); newXSproto(strcpy(buf, "GetSpellBookSlotBySpellID"), XS_Client_GetSpellBookSlotBySpellID, file, "$$"); newXSproto(strcpy(buf, "GetSpentAA"), XS_Client_GetSpentAA, file, "$$"); From 5bdc9c6c6087e3624a5c678fa503e490b61f5e3f Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 16 May 2020 14:42:38 -0400 Subject: [PATCH 155/272] Remove duplicate SignalClient() definition. --- zone/perl_client.cpp | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 1c0c42bf5..dad808dae 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -5543,28 +5543,6 @@ XS(XS_Client_NotifyNewTitlesAvailable) { XSRETURN_EMPTY; } -XS(XS_Client_SignalClient); /* prototype to pass -Wmissing-prototypes */ -XS(XS_Client_SignalClient) { - dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: Client::SignalClient(THIS, uint32 data)"); - { - Client *THIS; - uint32 data = (uint32) SvUV(ST(1)); - - if (sv_derived_from(ST(0), "Client")) { - IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(Client *, tmp); - } else - Perl_croak(aTHX_ "THIS is not of type Client"); - if (THIS == nullptr) - Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - - THIS->Signal(data); - } - XSRETURN_EMPTY; -} - XS(XS_Client_AddAlternateCurrencyValue); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_AddAlternateCurrencyValue) { dXSARGS; @@ -6647,7 +6625,6 @@ XS(boot_Client) { newXSproto(strcpy(buf, "SetTint"), XS_Client_SetTint, file, "$$$"); newXSproto(strcpy(buf, "SetTitleSuffix"), XS_Client_SetTitleSuffix, file, "$$;$"); newXSproto(strcpy(buf, "SetZoneFlag"), XS_Client_SetZoneFlag, file, "$$"); - newXSproto(strcpy(buf, "SignalClient"), XS_Client_SignalClient, file, "$"); newXSproto(strcpy(buf, "SilentMessage"), XS_Client_SilentMessage, file, "$$"); newXSproto(strcpy(buf, "SlotConvert2"), XS_Client_SlotConvert2, file, "$$"); newXSproto(strcpy(buf, "Stand"), XS_Client_Stand, file, "$"); From 2fbd5aacccbd7de40988daeccbbc07cc73525696 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 17 May 2020 18:36:06 -0700 Subject: [PATCH 156/272] Rename namespace EQEmu to namespace EQ (so we don't have two similar but different namespaces anymore) --- common/any.h | 4 +- common/compression.cpp | 2 +- common/compression.h | 2 +- common/data_verification.h | 2 +- common/database.cpp | 18 +- common/database.h | 4 +- common/database_conversions.cpp | 8 +- common/deity.cpp | 6 +- common/deity.h | 2 +- common/emu_constants.cpp | 14 +- common/emu_constants.h | 6 +- common/emu_versions.cpp | 62 +- common/emu_versions.h | 2 +- common/eq_constants.h | 2 +- common/eq_limits.cpp | 336 +++++------ common/eq_limits.h | 20 +- common/eq_packet_structs.h | 50 +- common/eq_stream_intf.h | 2 +- common/eq_stream_proxy.cpp | 2 +- common/eq_stream_proxy.h | 2 +- common/eqemu_exception.cpp | 2 +- common/eqemu_exception.h | 4 +- common/event/task.h | 6 +- common/extprofile.h | 2 +- common/fixed_memory_hash_set.h | 2 +- common/fixed_memory_variable_hash_set.h | 2 +- common/inventory_profile.cpp | 194 +++--- common/inventory_profile.h | 20 +- common/inventory_slot.cpp | 62 +- common/inventory_slot.h | 2 +- common/ipc_mutex.cpp | 2 +- common/ipc_mutex.h | 2 +- common/item_data.cpp | 20 +- common/item_data.h | 2 +- common/item_instance.cpp | 218 +++---- common/item_instance.h | 12 +- common/light_source.cpp | 10 +- common/light_source.h | 2 +- common/memory_buffer.cpp | 48 +- common/memory_buffer.h | 2 +- common/memory_mapped_file.cpp | 2 +- common/memory_mapped_file.h | 2 +- common/net/daybreak_connection.cpp | 12 +- common/net/daybreak_connection.h | 2 +- common/patches/rof.cpp | 358 +++++------ common/patches/rof.h | 2 +- common/patches/rof2.cpp | 358 +++++------ common/patches/rof2.h | 2 +- common/patches/rof2_limits.h | 30 +- common/patches/rof2_structs.h | 6 +- common/patches/rof_limits.h | 30 +- common/patches/rof_structs.h | 4 +- common/patches/sod.cpp | 212 +++---- common/patches/sod.h | 2 +- common/patches/sod_limits.h | 30 +- common/patches/sod_structs.h | 6 +- common/patches/sof.cpp | 212 +++---- common/patches/sof.h | 2 +- common/patches/sof_limits.h | 30 +- common/patches/sof_structs.h | 6 +- common/patches/titanium.cpp | 222 +++---- common/patches/titanium.h | 2 +- common/patches/titanium_limits.h | 30 +- common/patches/titanium_structs.h | 4 +- common/patches/uf.cpp | 222 +++---- common/patches/uf.h | 2 +- common/patches/uf_limits.h | 30 +- common/patches/uf_structs.h | 6 +- common/profanity_manager.cpp | 28 +- common/profanity_manager.h | 2 +- common/random.h | 4 +- common/say_link.cpp | 36 +- common/say_link.h | 4 +- common/shareddb.cpp | 214 +++---- common/shareddb.h | 56 +- common/skills.cpp | 20 +- common/skills.h | 4 +- common/spdat.h | 2 +- common/struct_strategy.h | 2 +- common/textures.h | 2 +- loginserver/client.h | 2 +- shared_memory/base_data.cpp | 4 +- shared_memory/items.cpp | 6 +- shared_memory/loot.cpp | 10 +- shared_memory/npc_faction.cpp | 6 +- shared_memory/skill_caps.cpp | 6 +- shared_memory/spells.cpp | 4 +- ucs/chatchannel.cpp | 14 +- ucs/clientlist.cpp | 32 +- ucs/clientlist.h | 4 +- ucs/ucs.cpp | 2 +- ucs/worldserver.cpp | 12 +- world/adventure.cpp | 2 +- world/adventure_manager.cpp | 2 +- world/client.cpp | 116 ++-- world/client.h | 4 +- world/main.cpp | 4 +- world/worlddb.cpp | 56 +- world/worlddb.h | 2 +- world/zonelist.cpp | 2 +- world/zoneserver.cpp | 2 +- zone/aa.cpp | 12 +- zone/attack.cpp | 452 +++++++------- zone/beacon.cpp | 2 +- zone/beacon.h | 6 +- zone/bonuses.cpp | 280 ++++----- zone/bot.cpp | 604 +++++++++---------- zone/bot.h | 62 +- zone/bot_command.cpp | 186 +++--- zone/bot_database.cpp | 42 +- zone/bot_database.h | 6 +- zone/botspellsai.cpp | 44 +- zone/client.cpp | 436 +++++++------- zone/client.h | 132 ++-- zone/client_mods.cpp | 60 +- zone/client_packet.cpp | 534 ++++++++--------- zone/client_process.cpp | 132 ++-- zone/command.cpp | 252 ++++---- zone/common.h | 40 +- zone/corpse.cpp | 102 ++-- zone/corpse.h | 12 +- zone/doors.cpp | 10 +- zone/effects.cpp | 10 +- zone/embparser.cpp | 48 +- zone/embparser.h | 32 +- zone/embparser_api.cpp | 166 +++--- zone/embxs.cpp | 2 +- zone/encounter.cpp | 2 +- zone/encounter.h | 6 +- zone/entity.cpp | 26 +- zone/entity.h | 4 +- zone/forage.cpp | 60 +- zone/groups.cpp | 20 +- zone/guild.cpp | 10 +- zone/guild_mgr.cpp | 28 +- zone/guild_mgr.h | 2 +- zone/hate_list.cpp | 2 +- zone/inventory.cpp | 760 ++++++++++++------------ zone/loottables.cpp | 68 +-- zone/lua_client.cpp | 20 +- zone/lua_general.cpp | 382 ++++++------ zone/lua_inventory.cpp | 6 +- zone/lua_inventory.h | 12 +- zone/lua_item.cpp | 2 +- zone/lua_item.h | 12 +- zone/lua_iteminst.cpp | 6 +- zone/lua_iteminst.h | 16 +- zone/lua_mob.cpp | 54 +- zone/lua_mod.cpp | 2 +- zone/lua_parser.cpp | 42 +- zone/lua_parser.h | 44 +- zone/lua_parser_events.cpp | 198 +++--- zone/lua_parser_events.h | 154 ++--- zone/main.cpp | 4 +- zone/map.cpp | 2 +- zone/merc.cpp | 188 +++--- zone/merc.h | 30 +- zone/mob.cpp | 262 ++++---- zone/mob.h | 132 ++-- zone/mob_ai.cpp | 34 +- zone/mob_appearance.cpp | 100 ++-- zone/mob_info.cpp | 18 +- zone/mod_functions.cpp | 24 +- zone/npc.cpp | 112 ++-- zone/npc.h | 22 +- zone/object.cpp | 64 +- zone/object.h | 22 +- zone/pathfinder_nav_mesh.cpp | 2 +- zone/pathing.cpp | 8 +- zone/perl_client.cpp | 26 +- zone/perl_mob.cpp | 30 +- zone/perl_questitem.cpp | 52 +- zone/pets.cpp | 16 +- zone/quest_interface.h | 32 +- zone/quest_parser_collection.cpp | 32 +- zone/quest_parser_collection.h | 34 +- zone/questmgr.cpp | 86 +-- zone/questmgr.h | 14 +- zone/raids.cpp | 8 +- zone/special_attacks.cpp | 474 +++++++-------- zone/spell_effects.cpp | 124 ++-- zone/spells.cpp | 156 ++--- zone/tasks.cpp | 20 +- zone/tasks.h | 4 +- zone/titles.cpp | 6 +- zone/tradeskills.cpp | 272 ++++----- zone/trading.cpp | 250 ++++---- zone/trap.cpp | 2 +- zone/tribute.cpp | 34 +- zone/tune.cpp | 124 ++-- zone/waypoints.cpp | 6 +- zone/worldserver.cpp | 14 +- zone/zone.cpp | 14 +- zone/zone.h | 2 +- zone/zonedb.cpp | 86 +-- zone/zonedb.h | 18 +- zone/zonedump.h | 4 +- zone/zoning.cpp | 4 +- 198 files changed, 6111 insertions(+), 6111 deletions(-) diff --git a/common/any.h b/common/any.h index fd80fbc5f..1ec59cdb4 100644 --- a/common/any.h +++ b/common/any.h @@ -24,7 +24,7 @@ * DEALINGS IN THE SOFTWARE. */ -// EQEmu::Any is a modified version of Boost::Any and as such retains the Boost licensing. +// EQ::Any is a modified version of Boost::Any and as such retains the Boost licensing. #ifndef EQEMU_COMMON_ANY_H #define EQEMU_COMMON_ANY_H @@ -32,7 +32,7 @@ #include #include -namespace EQEmu +namespace EQ { class Any { diff --git a/common/compression.cpp b/common/compression.cpp index c56d9bf6a..07fe13d65 100644 --- a/common/compression.cpp +++ b/common/compression.cpp @@ -3,7 +3,7 @@ #include #include -namespace EQEmu +namespace EQ { uint32 EstimateDeflateBuffer(uint32 len) { z_stream zstream; diff --git a/common/compression.h b/common/compression.h index cc2fac264..20a4103be 100644 --- a/common/compression.h +++ b/common/compression.h @@ -1,6 +1,6 @@ #pragma once -namespace EQEmu +namespace EQ { uint32 EstimateDeflateBuffer(uint32 len); uint32 DeflateData(const char *buffer, uint32 len, char *out_buffer, uint32 out_len_max); diff --git a/common/data_verification.h b/common/data_verification.h index c56f3ce04..07a4b3bf0 100644 --- a/common/data_verification.h +++ b/common/data_verification.h @@ -23,7 +23,7 @@ #include #include -namespace EQEmu { +namespace EQ { template T Clamp(const T &value, const T &lower, const T &upper) { diff --git a/common/database.cpp b/common/database.cpp index 1935406a2..637d66371 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -751,7 +751,7 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe } /* This only for new Character creation storing */ -bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv) { +bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQ::InventoryProfile* inv) { uint32 charid = 0; char zone[50]; float x, y, z; @@ -779,8 +779,8 @@ bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu /* Insert starting inventory... */ std::string invquery; - for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) { - const EQEmu::ItemInstance* newinv = inv->GetItem(i); + for (int16 i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invbag::BANK_BAGS_END;) { + const EQ::ItemInstance* newinv = inv->GetItem(i); if (newinv) { invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)", charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor()); @@ -788,16 +788,16 @@ bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu auto results = QueryDatabase(invquery); } - if (i == EQEmu::invslot::slotCursor) { - i = EQEmu::invbag::GENERAL_BAGS_BEGIN; + if (i == EQ::invslot::slotCursor) { + i = EQ::invbag::GENERAL_BAGS_BEGIN; continue; } - else if (i == EQEmu::invbag::CURSOR_BAG_END) { - i = EQEmu::invslot::BANK_BEGIN; + else if (i == EQ::invbag::CURSOR_BAG_END) { + i = EQ::invslot::BANK_BEGIN; continue; } - else if (i == EQEmu::invslot::BANK_END) { - i = EQEmu::invbag::BANK_BAGS_BEGIN; + else if (i == EQ::invslot::BANK_END) { + i = EQ::invbag::BANK_BAGS_BEGIN; continue; } i++; diff --git a/common/database.h b/common/database.h index 962349fa9..6683989e5 100644 --- a/common/database.h +++ b/common/database.h @@ -40,7 +40,7 @@ class MySQLRequestResult; class Client; -namespace EQEmu +namespace EQ { class InventoryProfile; } @@ -115,7 +115,7 @@ public: bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp); bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked); bool SetMQDetectionFlag(const char* accountname, const char* charactername, const char* hacked, const char* zone); - bool StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv); + bool StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQ::InventoryProfile* inv); bool UpdateName(const char* oldname, const char* newname); /* General Information Queries */ diff --git a/common/database_conversions.cpp b/common/database_conversions.cpp index ec973d9af..d49651f4d 100644 --- a/common/database_conversions.cpp +++ b/common/database_conversions.cpp @@ -189,7 +189,7 @@ namespace Convert { /*002*/ uint32 HP; /*006*/ uint32 Mana; /*010*/ Convert::SpellBuff_Struct Buffs[BUFF_COUNT]; - /*510*/ uint32 Items[EQEmu::textures::materialCount]; + /*510*/ uint32 Items[EQ::textures::materialCount]; /*546*/ char Name[64]; /*610*/ }; @@ -230,9 +230,9 @@ namespace Convert { /*0304*/ uint8 ability_time_minutes; /*0305*/ uint8 ability_time_hours; //place holder /*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag? - /*0312*/ uint32 item_material[EQEmu::textures::materialCount]; // Item texture/material of worn/held items + /*0312*/ uint32 item_material[EQ::textures::materialCount]; // Item texture/material of worn/held items /*0348*/ uint8 unknown0348[44]; - /*0392*/ Convert::Color_Struct item_tint[EQEmu::textures::materialCount]; + /*0392*/ Convert::Color_Struct item_tint[EQ::textures::materialCount]; /*0428*/ Convert::AA_Array aa_array[MAX_PP_AA_ARRAY]; /*2348*/ float unknown2384; //seen ~128, ~47 /*2352*/ char servername[32]; // length probably not right @@ -1396,7 +1396,7 @@ bool Database::CheckDatabaseConvertPPDeblob(){ if (rquery != ""){ results = QueryDatabase(rquery); } /* Run Material Color Convert */ first_entry = 0; rquery = ""; - for (i = EQEmu::textures::textureBegin; i < EQEmu::textures::materialCount; i++){ + for (i = EQ::textures::textureBegin; i < EQ::textures::materialCount; i++){ if (pp->item_tint[i].color > 0){ if (first_entry != 1){ rquery = StringFormat("REPLACE INTO `character_material` (id, slot, blue, green, red, use_tint, color) VALUES (%u, %u, %u, %u, %u, %u, %u)", character_id, i, pp->item_tint[i].rgb.blue, pp->item_tint[i].rgb.green, pp->item_tint[i].rgb.red, pp->item_tint[i].rgb.use_tint, pp->item_tint[i].color); diff --git a/common/deity.cpp b/common/deity.cpp index b8a2d87d7..0923c43d0 100644 --- a/common/deity.cpp +++ b/common/deity.cpp @@ -20,7 +20,7 @@ #include "deity.h" -EQEmu::deity::DeityTypeBit EQEmu::deity::ConvertDeityTypeToDeityTypeBit(DeityType deity_type) +EQ::deity::DeityTypeBit EQ::deity::ConvertDeityTypeToDeityTypeBit(DeityType deity_type) { switch (deity_type) { case DeityBertoxxulous: @@ -63,7 +63,7 @@ EQEmu::deity::DeityTypeBit EQEmu::deity::ConvertDeityTypeToDeityTypeBit(DeityTyp }; } -EQEmu::deity::DeityType EQEmu::deity::ConvertDeityTypeBitToDeityType(DeityTypeBit deity_type_bit) +EQ::deity::DeityType EQ::deity::ConvertDeityTypeBitToDeityType(DeityTypeBit deity_type_bit) { switch (deity_type_bit) { case bit_DeityAgnostic: @@ -105,7 +105,7 @@ EQEmu::deity::DeityType EQEmu::deity::ConvertDeityTypeBitToDeityType(DeityTypeBi }; } -const char* EQEmu::deity::DeityName(DeityType deity_type) +const char* EQ::deity::DeityName(DeityType deity_type) { switch (deity_type) { case DeityBertoxxulous: diff --git a/common/deity.h b/common/deity.h index f754352a0..8d0fe4c7a 100644 --- a/common/deity.h +++ b/common/deity.h @@ -23,7 +23,7 @@ #include "types.h" -namespace EQEmu +namespace EQ { namespace deity { enum DeityType { diff --git a/common/emu_constants.cpp b/common/emu_constants.cpp index 950bc5ebb..8a6d2a8bd 100644 --- a/common/emu_constants.cpp +++ b/common/emu_constants.cpp @@ -20,7 +20,7 @@ #include "emu_constants.h" -int16 EQEmu::invtype::GetInvTypeSize(int16 inv_type) { +int16 EQ::invtype::GetInvTypeSize(int16 inv_type) { static const int16 local_array[] = { POSSESSIONS_SIZE, BANK_SIZE, @@ -55,7 +55,7 @@ int16 EQEmu::invtype::GetInvTypeSize(int16 inv_type) { return local_array[inv_type]; } -const char* EQEmu::bug::CategoryIDToCategoryName(CategoryID category_id) { +const char* EQ::bug::CategoryIDToCategoryName(CategoryID category_id) { switch (category_id) { case catVideo: return "Video"; @@ -87,7 +87,7 @@ const char* EQEmu::bug::CategoryIDToCategoryName(CategoryID category_id) { } } -EQEmu::bug::CategoryID EQEmu::bug::CategoryNameToCategoryID(const char* category_name) { +EQ::bug::CategoryID EQ::bug::CategoryNameToCategoryID(const char* category_name) { if (!category_name) return catOther; @@ -119,7 +119,7 @@ EQEmu::bug::CategoryID EQEmu::bug::CategoryNameToCategoryID(const char* category return catOther; } -const char *EQEmu::constants::GetStanceName(StanceType stance_type) { +const char *EQ::constants::GetStanceName(StanceType stance_type) { switch (stance_type) { case stanceUnknown: return "Unknown"; @@ -146,9 +146,9 @@ const char *EQEmu::constants::GetStanceName(StanceType stance_type) { } } -int EQEmu::constants::ConvertStanceTypeToIndex(StanceType stance_type) { - if (stance_type >= EQEmu::constants::stancePassive && stance_type <= EQEmu::constants::stanceBurnAE) - return (stance_type - EQEmu::constants::stancePassive); +int EQ::constants::ConvertStanceTypeToIndex(StanceType stance_type) { + if (stance_type >= EQ::constants::stancePassive && stance_type <= EQ::constants::stanceBurnAE) + return (stance_type - EQ::constants::stancePassive); return 0; } diff --git a/common/emu_constants.h b/common/emu_constants.h index 945f513b5..a29418394 100644 --- a/common/emu_constants.h +++ b/common/emu_constants.h @@ -27,7 +27,7 @@ // local definitions are the result of using hybrid-client or server-only values and methods -namespace EQEmu +namespace EQ { using RoF2::IINVALID; using RoF2::INULL; @@ -193,7 +193,7 @@ namespace EQEmu } // namespace invaug namespace constants { - const EQEmu::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQEmu::versions::ClientVersion::Titanium; + const EQ::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQ::versions::ClientVersion::Titanium; using RoF2::constants::EXPANSION; using RoF2::constants::EXPANSION_BIT; @@ -332,6 +332,6 @@ namespace EQEmu /* hack list to prevent circular references - eq_limits.h:EQEmu::inventory::LookupEntry::InventoryTypeSize[n]; + eq_limits.h:EQ::inventory::LookupEntry::InventoryTypeSize[n]; */ diff --git a/common/emu_versions.cpp b/common/emu_versions.cpp index e5b3c5e70..ea8ddba73 100644 --- a/common/emu_versions.cpp +++ b/common/emu_versions.cpp @@ -21,7 +21,7 @@ #include "emu_constants.h" -bool EQEmu::versions::IsValidClientVersion(ClientVersion client_version) +bool EQ::versions::IsValidClientVersion(ClientVersion client_version) { if (client_version <= ClientVersion::Unknown || client_version > LastClientVersion) return false; @@ -29,7 +29,7 @@ bool EQEmu::versions::IsValidClientVersion(ClientVersion client_version) return true; } -EQEmu::versions::ClientVersion EQEmu::versions::ValidateClientVersion(ClientVersion client_version) +EQ::versions::ClientVersion EQ::versions::ValidateClientVersion(ClientVersion client_version) { if (client_version <= ClientVersion::Unknown || client_version > LastClientVersion) return ClientVersion::Unknown; @@ -37,7 +37,7 @@ EQEmu::versions::ClientVersion EQEmu::versions::ValidateClientVersion(ClientVers return client_version; } -const char* EQEmu::versions::ClientVersionName(ClientVersion client_version) +const char* EQ::versions::ClientVersionName(ClientVersion client_version) { switch (client_version) { case ClientVersion::Unknown: @@ -61,7 +61,7 @@ const char* EQEmu::versions::ClientVersionName(ClientVersion client_version) }; } -uint32 EQEmu::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version) +uint32 EQ::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version) { switch (client_version) { case ClientVersion::Titanium: @@ -81,7 +81,7 @@ uint32 EQEmu::versions::ConvertClientVersionToClientVersionBit(ClientVersion cli } } -EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit) +EQ::versions::ClientVersion EQ::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit) { switch (client_version_bit) { case ((uint32)1 << (static_cast(ClientVersion::Titanium) - 1)) : @@ -101,7 +101,7 @@ EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientV } } -bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version) +bool EQ::versions::IsValidMobVersion(MobVersion mob_version) { if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion) return false; @@ -109,7 +109,7 @@ bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version) return true; } -bool EQEmu::versions::IsValidPCMobVersion(MobVersion mob_version) +bool EQ::versions::IsValidPCMobVersion(MobVersion mob_version) { if (mob_version <= MobVersion::Unknown || mob_version > LastPCMobVersion) return false; @@ -117,7 +117,7 @@ bool EQEmu::versions::IsValidPCMobVersion(MobVersion mob_version) return true; } -bool EQEmu::versions::IsValidNonPCMobVersion(MobVersion mob_version) +bool EQ::versions::IsValidNonPCMobVersion(MobVersion mob_version) { if (mob_version <= LastPCMobVersion || mob_version > LastNonPCMobVersion) return false; @@ -125,7 +125,7 @@ bool EQEmu::versions::IsValidNonPCMobVersion(MobVersion mob_version) return true; } -bool EQEmu::versions::IsValidOfflinePCMobVersion(MobVersion mob_version) +bool EQ::versions::IsValidOfflinePCMobVersion(MobVersion mob_version) { if (mob_version <= LastNonPCMobVersion || mob_version > LastOfflinePCMobVersion) return false; @@ -133,7 +133,7 @@ bool EQEmu::versions::IsValidOfflinePCMobVersion(MobVersion mob_version) return true; } -EQEmu::versions::MobVersion EQEmu::versions::ValidateMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ValidateMobVersion(MobVersion mob_version) { if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion) return MobVersion::Unknown; @@ -141,7 +141,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ValidateMobVersion(MobVersion mob_v return mob_version; } -EQEmu::versions::MobVersion EQEmu::versions::ValidatePCMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ValidatePCMobVersion(MobVersion mob_version) { if (mob_version <= MobVersion::Unknown || mob_version > LastPCMobVersion) return MobVersion::Unknown; @@ -149,7 +149,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ValidatePCMobVersion(MobVersion mob return mob_version; } -EQEmu::versions::MobVersion EQEmu::versions::ValidateNonPCMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ValidateNonPCMobVersion(MobVersion mob_version) { if (mob_version <= LastPCMobVersion || mob_version > LastNonPCMobVersion) return MobVersion::Unknown; @@ -157,7 +157,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ValidateNonPCMobVersion(MobVersion return mob_version; } -EQEmu::versions::MobVersion EQEmu::versions::ValidateOfflinePCMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ValidateOfflinePCMobVersion(MobVersion mob_version) { if (mob_version <= LastNonPCMobVersion || mob_version > LastOfflinePCMobVersion) return MobVersion::Unknown; @@ -165,7 +165,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ValidateOfflinePCMobVersion(MobVers return mob_version; } -const char* EQEmu::versions::MobVersionName(MobVersion mob_version) +const char* EQ::versions::MobVersionName(MobVersion mob_version) { switch (mob_version) { case MobVersion::Unknown: @@ -217,7 +217,7 @@ const char* EQEmu::versions::MobVersionName(MobVersion mob_version) }; } -EQEmu::versions::ClientVersion EQEmu::versions::ConvertMobVersionToClientVersion(MobVersion mob_version) +EQ::versions::ClientVersion EQ::versions::ConvertMobVersionToClientVersion(MobVersion mob_version) { switch (mob_version) { case MobVersion::Unknown: @@ -240,7 +240,7 @@ EQEmu::versions::ClientVersion EQEmu::versions::ConvertMobVersionToClientVersion } } -EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToMobVersion(ClientVersion client_version) +EQ::versions::MobVersion EQ::versions::ConvertClientVersionToMobVersion(ClientVersion client_version) { switch (client_version) { case ClientVersion::Unknown: @@ -263,7 +263,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToMobVersion(Cl } } -EQEmu::versions::MobVersion EQEmu::versions::ConvertPCMobVersionToOfflinePCMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ConvertPCMobVersionToOfflinePCMobVersion(MobVersion mob_version) { switch (mob_version) { case MobVersion::Titanium: @@ -283,7 +283,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertPCMobVersionToOfflinePCMobVe } } -EQEmu::versions::MobVersion EQEmu::versions::ConvertOfflinePCMobVersionToPCMobVersion(MobVersion mob_version) +EQ::versions::MobVersion EQ::versions::ConvertOfflinePCMobVersionToPCMobVersion(MobVersion mob_version) { switch (mob_version) { case MobVersion::OfflineTitanium: @@ -303,7 +303,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertOfflinePCMobVersionToPCMobVe } } -EQEmu::versions::ClientVersion EQEmu::versions::ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version) +EQ::versions::ClientVersion EQ::versions::ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version) { switch (mob_version) { case MobVersion::OfflineTitanium: @@ -323,7 +323,7 @@ EQEmu::versions::ClientVersion EQEmu::versions::ConvertOfflinePCMobVersionToClie } } -EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version) +EQ::versions::MobVersion EQ::versions::ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version) { switch (client_version) { case ClientVersion::Titanium: @@ -343,7 +343,7 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobV } } -const char* EQEmu::expansions::ExpansionName(Expansion expansion) +const char* EQ::expansions::ExpansionName(Expansion expansion) { switch (expansion) { case Expansion::EverQuest: @@ -393,12 +393,12 @@ const char* EQEmu::expansions::ExpansionName(Expansion expansion) } } -const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit) +const char* EQ::expansions::ExpansionName(uint32 expansion_bit) { return ExpansionName(ConvertExpansionBitToExpansion(expansion_bit)); } -uint32 EQEmu::expansions::ConvertExpansionToExpansionBit(Expansion expansion) +uint32 EQ::expansions::ConvertExpansionToExpansionBit(Expansion expansion) { switch (expansion) { case Expansion::RoK: @@ -446,7 +446,7 @@ uint32 EQEmu::expansions::ConvertExpansionToExpansionBit(Expansion expansion) } } -EQEmu::expansions::Expansion EQEmu::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit) +EQ::expansions::Expansion EQ::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit) { switch (expansion_bit) { case bitRoK: @@ -494,7 +494,7 @@ EQEmu::expansions::Expansion EQEmu::expansions::ConvertExpansionBitToExpansion(u } } -uint32 EQEmu::expansions::ConvertExpansionToExpansionsMask(Expansion expansion) +uint32 EQ::expansions::ConvertExpansionToExpansionsMask(Expansion expansion) { switch (expansion) { case Expansion::RoK: @@ -542,17 +542,17 @@ uint32 EQEmu::expansions::ConvertExpansionToExpansionsMask(Expansion expansion) } } -EQEmu::expansions::Expansion EQEmu::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version) +EQ::expansions::Expansion EQ::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version) { - return EQEmu::constants::StaticLookup(client_version)->Expansion; + return EQ::constants::StaticLookup(client_version)->Expansion; } -uint32 EQEmu::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version) +uint32 EQ::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version) { - return EQEmu::constants::StaticLookup(client_version)->ExpansionBit; + return EQ::constants::StaticLookup(client_version)->ExpansionBit; } -uint32 EQEmu::expansions::ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version) +uint32 EQ::expansions::ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version) { - return EQEmu::constants::StaticLookup(client_version)->ExpansionsMask; + return EQ::constants::StaticLookup(client_version)->ExpansionsMask; } diff --git a/common/emu_versions.h b/common/emu_versions.h index b55c32267..75f6808c3 100644 --- a/common/emu_versions.h +++ b/common/emu_versions.h @@ -25,7 +25,7 @@ #include -namespace EQEmu +namespace EQ { namespace versions { enum class ClientVersion : uint32 { diff --git a/common/eq_constants.h b/common/eq_constants.h index 4cc61c0b4..1a0c517bd 100644 --- a/common/eq_constants.h +++ b/common/eq_constants.h @@ -318,7 +318,7 @@ static const uint8 DamageTypeUnknown = 0xFF; ** ** (indexed by 'Skill' of SkillUseTypes) */ -static const uint8 SkillDamageTypes[EQEmu::skills::HIGHEST_SKILL + 1] = // change to _SkillServerArraySize once activated +static const uint8 SkillDamageTypes[EQ::skills::HIGHEST_SKILL + 1] = // change to _SkillServerArraySize once activated { /*1HBlunt*/ 0, /*1HSlashing*/ 1, diff --git a/common/eq_limits.cpp b/common/eq_limits.cpp index 9f52de30d..72c82f450 100644 --- a/common/eq_limits.cpp +++ b/common/eq_limits.cpp @@ -25,7 +25,7 @@ static bool global_dictionary_init = false; -void EQEmu::InitializeDynamicLookups() { +void EQ::InitializeDynamicLookups() { if (global_dictionary_init == true) return; @@ -37,12 +37,12 @@ void EQEmu::InitializeDynamicLookups() { global_dictionary_init = true; } -static std::unique_ptr constants_dynamic_nongm_lookup_entries[EQEmu::versions::ClientVersionCount]; -static std::unique_ptr constants_dynamic_gm_lookup_entries[EQEmu::versions::ClientVersionCount]; -static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu::versions::ClientVersionCount] = +static std::unique_ptr constants_dynamic_nongm_lookup_entries[EQ::versions::ClientVersionCount]; +static std::unique_ptr constants_dynamic_gm_lookup_entries[EQ::versions::ClientVersionCount]; +static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::versions::ClientVersionCount] = { /*[ClientVersion::Unknown] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( ClientUnknown::constants::EXPANSION, ClientUnknown::constants::EXPANSION_BIT, ClientUnknown::constants::EXPANSIONS_MASK, @@ -50,7 +50,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu ClientUnknown::INULL ), /*[ClientVersion::Client62] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( Client62::constants::EXPANSION, Client62::constants::EXPANSION_BIT, Client62::constants::EXPANSIONS_MASK, @@ -58,7 +58,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu Client62::INULL ), /*[ClientVersion::Titanium] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( Titanium::constants::EXPANSION, Titanium::constants::EXPANSION_BIT, Titanium::constants::EXPANSIONS_MASK, @@ -66,7 +66,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu Titanium::constants::SAY_LINK_BODY_SIZE ), /*[ClientVersion::SoF] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( SoF::constants::EXPANSION, SoF::constants::EXPANSION_BIT, SoF::constants::EXPANSIONS_MASK, @@ -74,7 +74,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu SoF::constants::SAY_LINK_BODY_SIZE ), /*[ClientVersion::SoD] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( SoD::constants::EXPANSION, SoD::constants::EXPANSION_BIT, SoD::constants::EXPANSIONS_MASK, @@ -82,7 +82,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu SoD::constants::SAY_LINK_BODY_SIZE ), /*[ClientVersion::UF] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( UF::constants::EXPANSION, UF::constants::EXPANSION_BIT, UF::constants::EXPANSIONS_MASK, @@ -90,7 +90,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu UF::constants::SAY_LINK_BODY_SIZE ), /*[ClientVersion::RoF] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( RoF::constants::EXPANSION, RoF::constants::EXPANSION_BIT, RoF::constants::EXPANSIONS_MASK, @@ -98,7 +98,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu RoF::constants::SAY_LINK_BODY_SIZE ), /*[ClientVersion::RoF2] =*/ - EQEmu::constants::LookupEntry( + EQ::constants::LookupEntry( RoF2::constants::EXPANSION, RoF2::constants::EXPANSION_BIT, RoF2::constants::EXPANSIONS_MASK, @@ -108,7 +108,7 @@ static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu }; static bool constants_dictionary_init = false; -void EQEmu::constants::InitializeDynamicLookups() { +void EQ::constants::InitializeDynamicLookups() { if (constants_dictionary_init == true) return; constants_dictionary_init = true; @@ -119,7 +119,7 @@ void EQEmu::constants::InitializeDynamicLookups() { // use static references for now } -const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicLookup(versions::ClientVersion client_version, bool gm_flag) +const EQ::constants::LookupEntry* EQ::constants::DynamicLookup(versions::ClientVersion client_version, bool gm_flag) { if (gm_flag) return DynamicGMLookup(client_version); @@ -127,7 +127,7 @@ const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicLookup(versions::C return DynamicNonGMLookup(client_version); } -const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicNonGMLookup(versions::ClientVersion client_version) +const EQ::constants::LookupEntry* EQ::constants::DynamicNonGMLookup(versions::ClientVersion client_version) { client_version = versions::ValidateClientVersion(client_version); if (constants_dynamic_nongm_lookup_entries[static_cast(client_version)]) @@ -136,7 +136,7 @@ const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicNonGMLookup(versio return &constants_static_lookup_entries[static_cast(client_version)]; } -const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicGMLookup(versions::ClientVersion client_version) +const EQ::constants::LookupEntry* EQ::constants::DynamicGMLookup(versions::ClientVersion client_version) { client_version = versions::ValidateClientVersion(client_version); if (constants_dynamic_gm_lookup_entries[static_cast(client_version)]) @@ -145,18 +145,18 @@ const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicGMLookup(versions: return &constants_static_lookup_entries[static_cast(client_version)]; } -const EQEmu::constants::LookupEntry* EQEmu::constants::StaticLookup(versions::ClientVersion client_version) +const EQ::constants::LookupEntry* EQ::constants::StaticLookup(versions::ClientVersion client_version) { return &constants_static_lookup_entries[static_cast(versions::ValidateClientVersion(client_version))]; } -static std::unique_ptr inventory_dynamic_nongm_lookup_entries[EQEmu::versions::MobVersionCount]; -static std::unique_ptr inventory_dynamic_gm_lookup_entries[EQEmu::versions::MobVersionCount]; -static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu::versions::MobVersionCount] = +static std::unique_ptr inventory_dynamic_nongm_lookup_entries[EQ::versions::MobVersionCount]; +static std::unique_ptr inventory_dynamic_gm_lookup_entries[EQ::versions::MobVersionCount]; +static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::versions::MobVersionCount] = { /*[MobVersion::Unknown] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, @@ -182,8 +182,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::Client62] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, Client62::INULL, @@ -209,9 +209,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::Titanium] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, Titanium::invtype::BANK_SIZE, Titanium::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, Titanium::invtype::BANK_SIZE, Titanium::invtype::SHARED_BANK_SIZE, Titanium::invtype::TRADE_SIZE, Titanium::invtype::WORLD_SIZE, Titanium::invtype::LIMBO_SIZE, Titanium::invtype::TRIBUTE_SIZE, Titanium::INULL, Titanium::invtype::GUILD_TRIBUTE_SIZE, Titanium::invtype::MERCHANT_SIZE, Titanium::INULL, Titanium::invtype::CORPSE_SIZE, @@ -236,9 +236,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu Titanium::inventory::AllowOverLevelEquipment ), /*[MobVersion::SoF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, SoF::invtype::BANK_SIZE, SoF::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, SoF::invtype::BANK_SIZE, SoF::invtype::SHARED_BANK_SIZE, SoF::invtype::TRADE_SIZE, SoF::invtype::WORLD_SIZE, SoF::invtype::LIMBO_SIZE, SoF::invtype::TRIBUTE_SIZE, SoF::INULL, SoF::invtype::GUILD_TRIBUTE_SIZE, SoF::invtype::MERCHANT_SIZE, SoF::INULL, SoF::invtype::CORPSE_SIZE, @@ -263,9 +263,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu SoF::inventory::AllowOverLevelEquipment ), /*[MobVersion::SoD] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, SoD::invtype::BANK_SIZE, SoD::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, SoD::invtype::BANK_SIZE, SoD::invtype::SHARED_BANK_SIZE, SoD::invtype::TRADE_SIZE, SoD::invtype::WORLD_SIZE, SoD::invtype::LIMBO_SIZE, SoD::invtype::TRIBUTE_SIZE, SoD::INULL, SoD::invtype::GUILD_TRIBUTE_SIZE, SoD::invtype::MERCHANT_SIZE, SoD::INULL, SoD::invtype::CORPSE_SIZE, @@ -290,9 +290,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu SoD::inventory::AllowOverLevelEquipment ), /*[MobVersion::UF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, UF::invtype::BANK_SIZE, UF::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, UF::invtype::BANK_SIZE, UF::invtype::SHARED_BANK_SIZE, UF::invtype::TRADE_SIZE, UF::invtype::WORLD_SIZE, UF::invtype::LIMBO_SIZE, UF::invtype::TRIBUTE_SIZE, UF::INULL, UF::invtype::GUILD_TRIBUTE_SIZE, UF::invtype::MERCHANT_SIZE, UF::INULL, UF::invtype::CORPSE_SIZE, @@ -317,9 +317,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu UF::inventory::AllowOverLevelEquipment ), /*[MobVersion::RoF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, RoF::invtype::BANK_SIZE, RoF::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, RoF::invtype::BANK_SIZE, RoF::invtype::SHARED_BANK_SIZE, RoF::invtype::TRADE_SIZE, RoF::invtype::WORLD_SIZE, RoF::invtype::LIMBO_SIZE, RoF::invtype::TRIBUTE_SIZE, RoF::invtype::TROPHY_TRIBUTE_SIZE, RoF::invtype::GUILD_TRIBUTE_SIZE, RoF::invtype::MERCHANT_SIZE, RoF::invtype::DELETED_SIZE, RoF::invtype::CORPSE_SIZE, @@ -344,9 +344,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu RoF::inventory::AllowOverLevelEquipment ), /*[MobVersion::RoF2] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, RoF2::invtype::BANK_SIZE, RoF2::invtype::SHARED_BANK_SIZE, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, RoF2::invtype::BANK_SIZE, RoF2::invtype::SHARED_BANK_SIZE, RoF2::invtype::TRADE_SIZE, RoF2::invtype::WORLD_SIZE, RoF2::invtype::LIMBO_SIZE, RoF2::invtype::TRIBUTE_SIZE, RoF2::invtype::TROPHY_TRIBUTE_SIZE, RoF2::invtype::GUILD_TRIBUTE_SIZE, RoF2::invtype::MERCHANT_SIZE, RoF2::invtype::DELETED_SIZE, RoF2::invtype::CORPSE_SIZE, @@ -371,9 +371,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu RoF2::inventory::AllowOverLevelEquipment ), /*[MobVersion::NPC] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::invtype::TRADE_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, /*InvTypeCorpseSize,*/ @@ -389,8 +389,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -398,9 +398,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::NPCMerchant] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::invtype::TRADE_SIZE, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, /*InvTypeCorpseSize,*/ @@ -416,8 +416,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -425,9 +425,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::Merc] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::invtype::TRADE_SIZE, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, /*InvTypeCorpseSize,*/ @@ -443,8 +443,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -452,9 +452,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::Bot] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::invtype::TRADE_SIZE, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, /*InvTypeCorpseSize,*/ @@ -470,8 +470,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::Bot::invslot::CURSOR_BITMASK, EntityLimits::Bot::invslot::POSSESSIONS_BITMASK, EntityLimits::Bot::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - EQEmu::invaug::SOCKET_COUNT, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + EQ::invaug::SOCKET_COUNT, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -479,9 +479,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::ClientPet] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::invtype::TRADE_SIZE, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, /*InvTypeCorpseSize,*/ @@ -497,8 +497,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -506,9 +506,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::NPCPet] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::invtype::TRADE_SIZE, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, /*InvTypeCorpseSize,*/ @@ -524,8 +524,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -533,9 +533,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::MercPet] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::invtype::TRADE_SIZE, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, /*InvTypeCorpseSize,*/ @@ -551,8 +551,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -560,9 +560,9 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::BotPet] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( - EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::invtype::TRADE_SIZE, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, /*InvTypeCorpseSize,*/ @@ -578,8 +578,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, - 0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/ - 0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/ + 0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/ + 0, //EQ::inventory::SocketCount, /*ItemAugSize,*/ false, false, @@ -587,8 +587,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineTitanium] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( Titanium::INULL, Titanium::INULL, Titanium::INULL, Titanium::invtype::TRADE_SIZE, Titanium::INULL, Titanium::INULL, Titanium::INULL, Titanium::INULL, Titanium::INULL, @@ -614,8 +614,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineSoF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( SoF::INULL, SoF::INULL, SoF::INULL, SoF::invtype::TRADE_SIZE, SoF::INULL, SoF::INULL, SoF::INULL, SoF::INULL, SoF::INULL, @@ -641,8 +641,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineSoD] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( SoD::INULL, SoD::INULL, SoD::INULL, SoD::invtype::TRADE_SIZE, SoD::INULL, SoD::INULL, SoD::INULL, SoD::INULL, SoD::INULL, @@ -668,8 +668,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineUF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( UF::INULL, UF::INULL, UF::INULL, UF::invtype::TRADE_SIZE, UF::INULL, UF::INULL, UF::INULL, UF::INULL, UF::INULL, @@ -695,8 +695,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineRoF] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( RoF::INULL, RoF::INULL, RoF::INULL, RoF::invtype::TRADE_SIZE, RoF::INULL, RoF::INULL, RoF::INULL, RoF::INULL, RoF::INULL, @@ -722,8 +722,8 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu false ), /*[MobVersion::OfflineRoF2] =*/ - EQEmu::inventory::LookupEntry( - EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct( + EQ::inventory::LookupEntry( + EQ::inventory::LookupEntry::InventoryTypeSize_Struct( RoF2::INULL, RoF2::INULL, RoF2::INULL, RoF2::invtype::TRADE_SIZE, RoF2::INULL, RoF2::INULL, RoF2::INULL, RoF2::INULL, RoF2::INULL, @@ -751,7 +751,7 @@ static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu }; static bool inventory_dictionary_init = false; -void EQEmu::inventory::InitializeDynamicLookups() { +void EQ::inventory::InitializeDynamicLookups() { if (inventory_dictionary_init == true) return; inventory_dictionary_init = true; @@ -774,9 +774,9 @@ void EQEmu::inventory::InitializeDynamicLookups() { const uint32 dynamic_check_mask = ( - EQEmu::expansions::bitPoR | - EQEmu::expansions::bitTBS | - EQEmu::expansions::bitHoT + EQ::expansions::bitPoR | + EQ::expansions::bitTBS | + EQ::expansions::bitHoT ); // if all of the above expansion bits are present, then static references will suffice @@ -784,7 +784,7 @@ void EQEmu::inventory::InitializeDynamicLookups() { return; // Dynamic Lookups (promotive methodology) (all mob versions allowed) - for (uint32 iter = static_cast(EQEmu::versions::MobVersion::Unknown); iter <= static_cast(EQEmu::versions::LastPCMobVersion); ++iter) { + for (uint32 iter = static_cast(EQ::versions::MobVersion::Unknown); iter <= static_cast(EQ::versions::LastPCMobVersion); ++iter) { // no need to dynamic this condition since it is the lowest compatibility standard if ((dynamic_check_mask & ~constants_static_lookup_entries[iter].ExpansionsMask) == dynamic_check_mask) continue; @@ -803,21 +803,21 @@ void EQEmu::inventory::InitializeDynamicLookups() { inventory_dynamic_nongm_lookup_entries[iter]->PossessionsBitmask = 0; // we'll fix later inventory_dynamic_nongm_lookup_entries[iter]->CorpseBitmask = 0; // we'll fix later - if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitPoR) { + if (RuleI(World, ExpansionSettings) & EQ::expansions::bitPoR) { // update bank size - if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitPoR) + if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitPoR) inventory_dynamic_nongm_lookup_entries[iter]->InventoryTypeSize.Bank = SoF::invtype::BANK_SIZE; } - if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitTBS) { + if (RuleI(World, ExpansionSettings) & EQ::expansions::bitTBS) { // update power source - if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitTBS) + if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitTBS) inventory_dynamic_nongm_lookup_entries[iter]->EquipmentBitmask = SoF::invslot::EQUIPMENT_BITMASK; } - if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitHoT) { + if (RuleI(World, ExpansionSettings) & EQ::expansions::bitHoT) { // update general size - if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitHoT) + if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitHoT) inventory_dynamic_nongm_lookup_entries[iter]->GeneralBitmask = RoF::invslot::GENERAL_BITMASK; } @@ -841,7 +841,7 @@ void EQEmu::inventory::InitializeDynamicLookups() { } // Dynamic GM Lookups (demotive methodology) (client-linked mob versions only) - for (uint32 iter = static_cast(EQEmu::versions::MobVersion::Unknown); iter <= static_cast(EQEmu::versions::LastPCMobVersion); ++iter) { + for (uint32 iter = static_cast(EQ::versions::MobVersion::Unknown); iter <= static_cast(EQ::versions::LastPCMobVersion); ++iter) { // no need to dynamic this condition since it is the lowest compatibility standard if ((dynamic_check_mask & ~constants_static_lookup_entries[iter].ExpansionsMask) == dynamic_check_mask) continue; @@ -869,13 +869,13 @@ void EQEmu::inventory::InitializeDynamicLookups() { inventory_dynamic_gm_lookup_entries[iter]->PossessionsBitmask = 0; // we'll fix later inventory_dynamic_gm_lookup_entries[iter]->CorpseBitmask = 0; // we'll fix later - if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitPoR) { + if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitPoR) { // update bank size - if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitPoR) + if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitPoR) inventory_dynamic_gm_lookup_entries[iter]->InventoryTypeSize.Bank = Titanium::invtype::BANK_SIZE; } - if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitTBS) { + if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitTBS) { // update power source switch (iter) { case versions::bitUF: @@ -890,7 +890,7 @@ void EQEmu::inventory::InitializeDynamicLookups() { } } - if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitHoT) { + if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitHoT) { // update general size switch (iter) { case versions::bitUF: @@ -927,7 +927,7 @@ void EQEmu::inventory::InitializeDynamicLookups() { // only client versions that require a change from their static definitions have been given a dynamic (gm) lookup entry } -const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicLookup(versions::MobVersion mob_version, bool gm_flag) +const EQ::inventory::LookupEntry* EQ::inventory::DynamicLookup(versions::MobVersion mob_version, bool gm_flag) { if (gm_flag) return DynamicGMLookup(mob_version); @@ -935,7 +935,7 @@ const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicLookup(versions::M return DynamicNonGMLookup(mob_version); } -const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicNonGMLookup(versions::MobVersion mob_version) +const EQ::inventory::LookupEntry* EQ::inventory::DynamicNonGMLookup(versions::MobVersion mob_version) { mob_version = versions::ValidateMobVersion(mob_version); if (inventory_dynamic_nongm_lookup_entries[static_cast(mob_version)]) @@ -944,7 +944,7 @@ const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicNonGMLookup(versio return &inventory_static_lookup_entries[static_cast(mob_version)]; } -const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicGMLookup(versions::MobVersion mob_version) +const EQ::inventory::LookupEntry* EQ::inventory::DynamicGMLookup(versions::MobVersion mob_version) { mob_version = versions::ValidateMobVersion(mob_version); if (inventory_dynamic_gm_lookup_entries[static_cast(mob_version)]) @@ -953,107 +953,107 @@ const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicGMLookup(versions: return &inventory_static_lookup_entries[static_cast(mob_version)]; } -const EQEmu::inventory::LookupEntry* EQEmu::inventory::StaticLookup(versions::MobVersion mob_version) +const EQ::inventory::LookupEntry* EQ::inventory::StaticLookup(versions::MobVersion mob_version) { return &inventory_static_lookup_entries[static_cast(versions::ValidateMobVersion(mob_version))]; } -static std::unique_ptr behavior_dynamic_nongm_lookup_entries[EQEmu::versions::MobVersionCount]; -static std::unique_ptr behavior_dynamic_gm_lookup_entries[EQEmu::versions::MobVersionCount]; -static const EQEmu::behavior::LookupEntry behavior_static_lookup_entries[EQEmu::versions::MobVersionCount] = +static std::unique_ptr behavior_dynamic_nongm_lookup_entries[EQ::versions::MobVersionCount]; +static std::unique_ptr behavior_dynamic_gm_lookup_entries[EQ::versions::MobVersionCount]; +static const EQ::behavior::LookupEntry behavior_static_lookup_entries[EQ::versions::MobVersionCount] = { /*[MobVersion::Unknown] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( true ), /*[MobVersion::Client62] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( true ), /*[MobVersion::Titanium] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( Titanium::behavior::CoinHasWeight ), /*[MobVersion::SoF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( SoF::behavior::CoinHasWeight ), /*[MobVersion::SoD] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( SoD::behavior::CoinHasWeight ), /*[MobVersion::UF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( UF::behavior::CoinHasWeight ), /*[MobVersion::RoF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( RoF::behavior::CoinHasWeight ), /*[MobVersion::RoF2] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( RoF2::behavior::CoinHasWeight ), /*[MobVersion::NPC] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::NPCMerchant] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::Merc] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::Bot] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::ClientPet] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::NPCPet] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::MercPet] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::BotPet] =*/ - EQEmu::behavior::LookupEntry( - EQEmu::behavior::CoinHasWeight + EQ::behavior::LookupEntry( + EQ::behavior::CoinHasWeight ), /*[MobVersion::OfflineTitanium] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( Titanium::behavior::CoinHasWeight ), /*[MobVersion::OfflineSoF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( SoF::behavior::CoinHasWeight ), /*[MobVersion::OfflineSoD] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( SoD::behavior::CoinHasWeight ), /*[MobVersion::OfflineUF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( UF::behavior::CoinHasWeight ), /*[MobVersion::OfflineRoF] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( RoF::behavior::CoinHasWeight ), /*[MobVersion::OfflineRoF2] =*/ - EQEmu::behavior::LookupEntry( + EQ::behavior::LookupEntry( RoF2::behavior::CoinHasWeight ) }; static bool behavior_dictionary_init = false; -void EQEmu::behavior::InitializeDynamicLookups() { +void EQ::behavior::InitializeDynamicLookups() { if (behavior_dictionary_init == true) return; behavior_dictionary_init = true; @@ -1064,7 +1064,7 @@ void EQEmu::behavior::InitializeDynamicLookups() { // use static references for now } -const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicLookup(versions::MobVersion mob_version, bool gm_flag) +const EQ::behavior::LookupEntry* EQ::behavior::DynamicLookup(versions::MobVersion mob_version, bool gm_flag) { if (gm_flag) return DynamicGMLookup(mob_version); @@ -1072,7 +1072,7 @@ const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicLookup(versions::Mob return DynamicNonGMLookup(mob_version); } -const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicNonGMLookup(versions::MobVersion mob_version) +const EQ::behavior::LookupEntry* EQ::behavior::DynamicNonGMLookup(versions::MobVersion mob_version) { mob_version = versions::ValidateMobVersion(mob_version); if (behavior_dynamic_nongm_lookup_entries[static_cast(mob_version)]) @@ -1081,7 +1081,7 @@ const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicNonGMLookup(versions return &behavior_static_lookup_entries[static_cast(mob_version)]; } -const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicGMLookup(versions::MobVersion mob_version) +const EQ::behavior::LookupEntry* EQ::behavior::DynamicGMLookup(versions::MobVersion mob_version) { mob_version = versions::ValidateMobVersion(mob_version); if (behavior_dynamic_gm_lookup_entries[static_cast(mob_version)]) @@ -1090,17 +1090,17 @@ const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicGMLookup(versions::M return &behavior_static_lookup_entries[static_cast(mob_version)]; } -const EQEmu::behavior::LookupEntry* EQEmu::behavior::StaticLookup(versions::MobVersion mob_version) +const EQ::behavior::LookupEntry* EQ::behavior::StaticLookup(versions::MobVersion mob_version) { return &behavior_static_lookup_entries[static_cast(versions::ValidateMobVersion(mob_version))]; } -static std::unique_ptr spells_dynamic_nongm_lookup_entries[EQEmu::versions::ClientVersionCount]; -static std::unique_ptr spells_dynamic_gm_lookup_entries[EQEmu::versions::ClientVersionCount]; -static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::versions::ClientVersionCount] = +static std::unique_ptr spells_dynamic_nongm_lookup_entries[EQ::versions::ClientVersionCount]; +static std::unique_ptr spells_dynamic_gm_lookup_entries[EQ::versions::ClientVersionCount]; +static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::ClientVersionCount] = { /*[ClientVersion::Unknown] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, @@ -1113,7 +1113,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers ClientUnknown::INULL ), /*[ClientVersion::Client62] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( Client62::INULL, Client62::INULL, Client62::INULL, @@ -1126,7 +1126,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers Client62::INULL ), /*[ClientVersion::Titanium] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( Titanium::spells::SPELL_ID_MAX, Titanium::spells::SPELLBOOK_SIZE, Titanium::spells::SPELL_GEM_COUNT, @@ -1139,7 +1139,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers Titanium::spells::MERC_BUFFS ), /*[ClientVersion::SoF] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( SoF::spells::SPELL_ID_MAX, SoF::spells::SPELLBOOK_SIZE, SoF::spells::SPELL_GEM_COUNT, @@ -1152,7 +1152,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers SoF::spells::MERC_BUFFS ), /*[ClientVersion::SoD] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( SoD::spells::SPELL_ID_MAX, SoD::spells::SPELLBOOK_SIZE, SoD::spells::SPELL_GEM_COUNT, @@ -1165,7 +1165,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers SoD::spells::MERC_BUFFS ), /*[ClientVersion::UF] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( UF::spells::SPELL_ID_MAX, UF::spells::SPELLBOOK_SIZE, UF::spells::SPELL_GEM_COUNT, @@ -1178,7 +1178,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers UF::spells::MERC_BUFFS ), /*[ClientVersion::RoF] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( RoF::spells::SPELL_ID_MAX, RoF::spells::SPELLBOOK_SIZE, UF::spells::SPELL_GEM_COUNT, // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case @@ -1191,7 +1191,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers RoF::spells::MERC_BUFFS ), /*[ClientVersion::RoF2] =*/ - EQEmu::spells::LookupEntry( + EQ::spells::LookupEntry( RoF2::spells::SPELL_ID_MAX, RoF2::spells::SPELLBOOK_SIZE, UF::spells::SPELL_GEM_COUNT, // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case @@ -1206,7 +1206,7 @@ static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::vers }; static bool spells_dictionary_init = false; -void EQEmu::spells::InitializeDynamicLookups() { +void EQ::spells::InitializeDynamicLookups() { if (spells_dictionary_init == true) return; spells_dictionary_init = true; @@ -1217,7 +1217,7 @@ void EQEmu::spells::InitializeDynamicLookups() { // use static references for now } -const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicLookup(versions::ClientVersion client_version, bool gm_flag) +const EQ::spells::LookupEntry* EQ::spells::DynamicLookup(versions::ClientVersion client_version, bool gm_flag) { if (gm_flag) return DynamicGMLookup(client_version); @@ -1225,7 +1225,7 @@ const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicLookup(versions::ClientV return DynamicNonGMLookup(client_version); } -const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicNonGMLookup(versions::ClientVersion client_version) +const EQ::spells::LookupEntry* EQ::spells::DynamicNonGMLookup(versions::ClientVersion client_version) { client_version = versions::ValidateClientVersion(client_version); if (spells_dynamic_nongm_lookup_entries[static_cast(client_version)]) @@ -1234,7 +1234,7 @@ const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicNonGMLookup(versions::Cl return &spells_static_lookup_entries[static_cast(client_version)]; } -const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicGMLookup(versions::ClientVersion client_version) +const EQ::spells::LookupEntry* EQ::spells::DynamicGMLookup(versions::ClientVersion client_version) { client_version = versions::ValidateClientVersion(client_version); if (spells_dynamic_gm_lookup_entries[static_cast(client_version)]) @@ -1243,7 +1243,7 @@ const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicGMLookup(versions::Clien return &spells_static_lookup_entries[static_cast(client_version)]; } -const EQEmu::spells::LookupEntry* EQEmu::spells::StaticLookup(versions::ClientVersion client_version) +const EQ::spells::LookupEntry* EQ::spells::StaticLookup(versions::ClientVersion client_version) { return &spells_static_lookup_entries[static_cast(versions::ValidateClientVersion(client_version))]; } diff --git a/common/eq_limits.h b/common/eq_limits.h index 5d62ced66..fe944c816 100644 --- a/common/eq_limits.h +++ b/common/eq_limits.h @@ -31,13 +31,13 @@ #include "../common/patches/rof2_limits.h" -namespace EQEmu +namespace EQ { void InitializeDynamicLookups(); namespace constants { struct LookupEntry { - EQEmu::expansions::Expansion Expansion; + EQ::expansions::Expansion Expansion; uint32 ExpansionBit; uint32 ExpansionsMask; int16 CharacterCreationLimit; @@ -45,7 +45,7 @@ namespace EQEmu LookupEntry(const LookupEntry *lookup_entry) { } LookupEntry( - EQEmu::expansions::Expansion Expansion, + EQ::expansions::Expansion Expansion, uint32 ExpansionBit, uint32 ExpansionsMask, int16 CharacterCreationLimit, @@ -111,7 +111,7 @@ namespace EQEmu union { InventoryTypeSize_Struct InventoryTypeSize; - int16 InventoryTypeSizeArray[25]; // should reflect EQEmu::invtype::TYPE_COUNT referenced in emu_constants.h + int16 InventoryTypeSizeArray[25]; // should reflect EQ::invtype::TYPE_COUNT referenced in emu_constants.h }; uint64 EquipmentBitmask; @@ -244,9 +244,9 @@ namespace ClientUnknown const int16 INULL = 0; namespace constants { - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::EverQuest; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitEverQuest; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskEverQuest; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::EverQuest; + const uint32 EXPANSION_BIT = EQ::expansions::bitEverQuest; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskEverQuest; } // namespace constants @@ -258,9 +258,9 @@ namespace Client62 const int16 INULL = 0; namespace constants { - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::EverQuest; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitEverQuest; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskEverQuest; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::EverQuest; + const uint32 EXPANSION_BIT = EQ::expansions::bitEverQuest; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskEverQuest; } // namespace constants diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index e9e7c5ef3..0bd59d360 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -129,7 +129,7 @@ struct LDoNTrapTemplate // All clients translate the character select information to some degree -struct CharSelectEquip : EQEmu::textures::Texture_Struct, EQEmu::textures::Tint_Struct {}; +struct CharSelectEquip : EQ::textures::Texture_Struct, EQ::textures::Tint_Struct {}; // RoF2-based hybrid struct struct CharacterSelectEntry_Struct @@ -144,7 +144,7 @@ struct CharacterSelectEntry_Struct uint16 Instance; uint8 Gender; uint8 Face; - CharSelectEquip Equip[EQEmu::textures::materialCount]; + CharSelectEquip Equip[EQ::textures::materialCount]; uint8 Unknown15; // Seen FF uint8 Unknown19; // Seen FF uint32 DrakkinTattoo; @@ -253,7 +253,7 @@ struct Spawn_Struct { /*0189*/ uint32 petOwnerId; // If this is a pet, the spawn id of owner /*0193*/ uint8 guildrank; // 0=normal, 1=officer, 2=leader /*0194*/ uint8 unknown0194[3]; -/*0197*/ EQEmu::TextureProfile equipment; +/*0197*/ EQ::TextureProfile equipment; /*0233*/ float runspeed; // Speed when running /*0036*/ uint8 afk; // 0=no, 1=afk /*0238*/ uint32 guildID; // Current guild @@ -284,7 +284,7 @@ union /*0340*/ uint32 spawnId; // Spawn Id /*0344*/ float bounding_radius; // used in melee, overrides calc /*0347*/ uint8 IsMercenary; -/*0348*/ EQEmu::TintProfile equipment_tint; +/*0348*/ EQ::TintProfile equipment_tint; /*0384*/ uint8 lfg; // 0=off, 1=lfg on /*0385*/ @@ -736,7 +736,7 @@ struct BandolierItem_Struct struct Bandolier_Struct { char Name[32]; - BandolierItem_Struct Items[EQEmu::profile::BANDOLIER_ITEM_COUNT]; + BandolierItem_Struct Items[EQ::profile::BANDOLIER_ITEM_COUNT]; }; //len = 72 @@ -750,7 +750,7 @@ struct PotionBeltItem_Struct //len = 288 struct PotionBelt_Struct { - PotionBeltItem_Struct Items[EQEmu::profile::POTION_BELT_SIZE]; + PotionBeltItem_Struct Items[EQ::profile::POTION_BELT_SIZE]; }; struct MovePotionToBelt_Struct @@ -841,7 +841,7 @@ struct SuspendedMinion_Struct /*002*/ uint32 HP; /*006*/ uint32 Mana; /*010*/ SpellBuff_Struct Buffs[BUFF_COUNT]; - /*510*/ EQEmu::TextureMaterialProfile Items; + /*510*/ EQ::TextureMaterialProfile Items; /*546*/ char Name[64]; /*610*/ }; @@ -933,7 +933,7 @@ struct PlayerProfile_Struct /*0245*/ uint8 guildbanker; /*0246*/ uint8 unknown0246[6]; // /*0252*/ uint32 intoxication; -/*0256*/ uint32 spellSlotRefresh[EQEmu::spells::SPELL_GEM_COUNT]; //in ms +/*0256*/ uint32 spellSlotRefresh[EQ::spells::SPELL_GEM_COUNT]; //in ms /*0292*/ uint32 abilitySlotRefresh; /*0296*/ uint8 haircolor; // Player hair color /*0297*/ uint8 beardcolor; // Player beard color @@ -946,9 +946,9 @@ struct PlayerProfile_Struct /*0304*/ uint8 ability_time_minutes; /*0305*/ uint8 ability_time_hours; //place holder /*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag? -/*0312*/ EQEmu::TextureMaterialProfile item_material; // Item texture/material of worn/held items +/*0312*/ EQ::TextureMaterialProfile item_material; // Item texture/material of worn/held items /*0348*/ uint8 unknown0348[44]; -/*0392*/ EQEmu::TintProfile item_tint; +/*0392*/ EQ::TintProfile item_tint; /*0428*/ AA_Array aa_array[MAX_PP_AA_ARRAY]; /*2348*/ float unknown2384; //seen ~128, ~47 /*2352*/ char servername[32]; // length probably not right @@ -972,9 +972,9 @@ struct PlayerProfile_Struct /*2505*/ uint8 unknown2541[47]; // ? /*2552*/ uint8 languages[MAX_PP_LANGUAGE]; /*2580*/ uint8 unknown2616[4]; -/*2584*/ uint32 spell_book[EQEmu::spells::SPELLBOOK_SIZE]; +/*2584*/ uint32 spell_book[EQ::spells::SPELLBOOK_SIZE]; /*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff -/*4632*/ uint32 mem_spells[EQEmu::spells::SPELL_GEM_COUNT]; +/*4632*/ uint32 mem_spells[EQ::spells::SPELL_GEM_COUNT]; /*4668*/ uint8 unknown4704[32]; // /*4700*/ float y; // Player y position /*4704*/ float x; // Player x position @@ -1050,7 +1050,7 @@ struct PlayerProfile_Struct /*7212*/ uint32 tribute_points; /*7216*/ uint32 unknown7252; /*7220*/ uint32 tribute_active; //1=active -/*7224*/ Tribute_Struct tributes[EQEmu::invtype::TRIBUTE_SIZE]; +/*7224*/ Tribute_Struct tributes[EQ::invtype::TRIBUTE_SIZE]; /*7264*/ Disciplines_Struct disciplines; /*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use) /*7744*/ char unknown7780[160]; @@ -1077,7 +1077,7 @@ struct PlayerProfile_Struct /*12800*/ uint32 expAA; /*12804*/ uint32 aapoints; //avaliable, unspent /*12808*/ uint8 unknown12844[36]; -/*12844*/ Bandolier_Struct bandoliers[EQEmu::profile::BANDOLIERS_SIZE]; +/*12844*/ Bandolier_Struct bandoliers[EQ::profile::BANDOLIERS_SIZE]; /*14124*/ uint8 unknown14160[4506]; /*18630*/ SuspendedMinion_Struct SuspendedMinion; // No longer in use /*19240*/ uint32 timeentitledonaccount; @@ -1095,16 +1095,16 @@ struct PlayerProfile_Struct /*19568*/ // All player profile packets are translated and this overhead is ignored in out-bound packets - PlayerProfile_Struct() : m_player_profile_version(EQEmu::versions::MobVersion::Unknown) { } + PlayerProfile_Struct() : m_player_profile_version(EQ::versions::MobVersion::Unknown) { } - EQEmu::versions::MobVersion PlayerProfileVersion() { return m_player_profile_version; } - void SetPlayerProfileVersion(EQEmu::versions::MobVersion mob_version) { m_player_profile_version = EQEmu::versions::ValidateMobVersion(mob_version); } - void SetPlayerProfileVersion(EQEmu::versions::ClientVersion client_version) { SetPlayerProfileVersion(EQEmu::versions::ConvertClientVersionToMobVersion(client_version)); } + EQ::versions::MobVersion PlayerProfileVersion() { return m_player_profile_version; } + void SetPlayerProfileVersion(EQ::versions::MobVersion mob_version) { m_player_profile_version = EQ::versions::ValidateMobVersion(mob_version); } + void SetPlayerProfileVersion(EQ::versions::ClientVersion client_version) { SetPlayerProfileVersion(EQ::versions::ConvertClientVersionToMobVersion(client_version)); } private: // No need for gm flag since pp already has one // No need for lookup pointer since this struct is not tied to any one system - EQEmu::versions::MobVersion m_player_profile_version; + EQ::versions::MobVersion m_player_profile_version; }; @@ -1215,7 +1215,7 @@ struct WearChange_Struct { /*010*/ uint32 elite_material; // 1 for Drakkin Elite Material /*014*/ uint32 hero_forge_model; // New to VoA /*018*/ uint32 unknown18; // New to RoF -/*022*/ EQEmu::textures::Tint_Struct color; +/*022*/ EQ::textures::Tint_Struct color; /*026*/ uint8 wear_slot_id; /*027*/ }; @@ -2123,7 +2123,7 @@ struct AdventureLeaderboard_Struct /*struct Item_Shop_Struct { uint16 merchantid; uint8 itemtype; - EQEmu::ItemData item; + EQ::ItemData item; uint8 iss_unknown001[6]; };*/ @@ -2149,7 +2149,7 @@ struct Illusion_Struct { //size: 256 - SoF /*092*/ uint32 drakkin_heritage; // /*096*/ uint32 drakkin_tattoo; // /*100*/ uint32 drakkin_details; // -/*104*/ EQEmu::TintProfile armor_tint; // +/*104*/ EQ::TintProfile armor_tint; // /*140*/ uint8 eyecolor1; // Field Not Identified in any Illusion Struct /*141*/ uint8 eyecolor2; // Field Not Identified in any Illusion Struct /*142*/ uint8 unknown138[114]; // @@ -3489,8 +3489,8 @@ struct SelectTributeReply_Struct { struct TributeInfo_Struct { uint32 active; //0 == inactive, 1 == active - uint32 tributes[EQEmu::invtype::TRIBUTE_SIZE]; //-1 == NONE - uint32 tiers[EQEmu::invtype::TRIBUTE_SIZE]; //all 00's + uint32 tributes[EQ::invtype::TRIBUTE_SIZE]; //-1 == NONE + uint32 tiers[EQ::invtype::TRIBUTE_SIZE]; //all 00's uint32 tribute_master_id; }; @@ -4401,7 +4401,7 @@ struct AnnoyingZoneUnknown_Struct { }; struct LoadSpellSet_Struct { - uint32 spell[EQEmu::spells::SPELL_GEM_COUNT]; // 0xFFFFFFFF if no action, slot number if to unmem starting at 0 + uint32 spell[EQ::spells::SPELL_GEM_COUNT]; // 0xFFFFFFFF if no action, slot number if to unmem starting at 0 uint32 unknown; //there seems to be an extra field in this packet... }; diff --git a/common/eq_stream_intf.h b/common/eq_stream_intf.h index 68a25f41c..b2c889244 100644 --- a/common/eq_stream_intf.h +++ b/common/eq_stream_intf.h @@ -100,7 +100,7 @@ public: virtual MatchState CheckSignature(const Signature *sig) { return MatchFailed; } virtual EQStreamState GetState() = 0; virtual void SetOpcodeManager(OpcodeManager **opm) = 0; - virtual const EQEmu::versions::ClientVersion ClientVersion() const { return EQEmu::versions::ClientVersion::Unknown; } + virtual const EQ::versions::ClientVersion ClientVersion() const { return EQ::versions::ClientVersion::Unknown; } virtual Stats GetStats() const = 0; virtual void ResetStats() = 0; virtual EQStreamManagerInterface* GetManager() const = 0; diff --git a/common/eq_stream_proxy.cpp b/common/eq_stream_proxy.cpp index 587e55b64..ca8cb2142 100644 --- a/common/eq_stream_proxy.cpp +++ b/common/eq_stream_proxy.cpp @@ -22,7 +22,7 @@ std::string EQStreamProxy::Describe() const { return(m_structs->Describe()); } -const EQEmu::versions::ClientVersion EQStreamProxy::ClientVersion() const +const EQ::versions::ClientVersion EQStreamProxy::ClientVersion() const { return m_structs->ClientVersion(); } diff --git a/common/eq_stream_proxy.h b/common/eq_stream_proxy.h index 92de5a463..9d007b48e 100644 --- a/common/eq_stream_proxy.h +++ b/common/eq_stream_proxy.h @@ -28,7 +28,7 @@ public: virtual void RemoveData(); virtual bool CheckState(EQStreamState state); virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; virtual EQStreamState GetState(); virtual void SetOpcodeManager(OpcodeManager **opm); virtual Stats GetStats() const; diff --git a/common/eqemu_exception.cpp b/common/eqemu_exception.cpp index 88e1ea225..62376283f 100644 --- a/common/eqemu_exception.cpp +++ b/common/eqemu_exception.cpp @@ -18,7 +18,7 @@ #include "eqemu_exception.h" -namespace EQEmu +namespace EQ { Exception::Exception(const char* name, const std::string& description, const char* file, long line) : line_(line), diff --git a/common/eqemu_exception.h b/common/eqemu_exception.h index 1e888da85..9649c7a98 100644 --- a/common/eqemu_exception.h +++ b/common/eqemu_exception.h @@ -22,7 +22,7 @@ #include #include -namespace EQEmu +namespace EQ { //! EQEmu Exception Class /*! @@ -104,7 +104,7 @@ namespace EQEmu } // EQEmu #ifndef EQ_EXCEPT -#define EQ_EXCEPT(n, d) throw EQEmu::Exception(n, d, __FILE__, __LINE__) +#define EQ_EXCEPT(n, d) throw EQ::Exception(n, d, __FILE__, __LINE__) #endif #endif diff --git a/common/event/task.h b/common/event/task.h index ae19700a2..89077734f 100644 --- a/common/event/task.h +++ b/common/event/task.h @@ -8,7 +8,7 @@ namespace EQ { class Task { public: - typedef std::function ResolveFn; + typedef std::function ResolveFn; typedef std::function RejectFn; typedef std::function FinallyFn; typedef std::function TaskFn; @@ -19,7 +19,7 @@ namespace EQ { RejectFn on_catch; FinallyFn on_finally; bool has_result; - EQEmu::Any result; + EQ::Any result; bool has_error; std::exception error; }; @@ -63,7 +63,7 @@ namespace EQ { uv_queue_work(EventLoop::Get().Handle(), m_work, [](uv_work_t* req) { TaskBaton *baton = (TaskBaton*)req->data; - baton->fn([baton](const EQEmu::Any& result) { + baton->fn([baton](const EQ::Any& result) { baton->has_error = false; baton->has_result = true; baton->result = result; diff --git a/common/extprofile.h b/common/extprofile.h index bdb746068..5f69a449d 100644 --- a/common/extprofile.h +++ b/common/extprofile.h @@ -40,7 +40,7 @@ struct ExtendedProfile_Struct { uint16 old_pet_hp; /* Not Used */ uint16 old_pet_mana; /* Not Used */ SpellBuff_Struct pet_buffs[BUFF_COUNT]; /* Not Used */ - EQEmu::TextureMaterialProfile pet_items; /* Not Used */ + EQ::TextureMaterialProfile pet_items; /* Not Used */ char merc_name[64]; /* Used */ uint32 aa_effects; /* Used */ diff --git a/common/fixed_memory_hash_set.h b/common/fixed_memory_hash_set.h index 2b119bd3f..d02900260 100644 --- a/common/fixed_memory_hash_set.h +++ b/common/fixed_memory_hash_set.h @@ -23,7 +23,7 @@ #include "eqemu_exception.h" #include "types.h" -namespace EQEmu { +namespace EQ { /*! Simple HashSet designed to be used in fixed memory that may be difficult to use an allocator for (shared memory), we assume all keys are unsigned int diff --git a/common/fixed_memory_variable_hash_set.h b/common/fixed_memory_variable_hash_set.h index b25fe5b2f..cc0f7979e 100644 --- a/common/fixed_memory_variable_hash_set.h +++ b/common/fixed_memory_variable_hash_set.h @@ -23,7 +23,7 @@ #include "eqemu_exception.h" #include "types.h" -namespace EQEmu { +namespace EQ { /*! Simple HashSet designed to be used in fixed memory that may be difficult to use an allocator for (shared memory), we assume all keys are unsigned int, values are a pointer and size diff --git a/common/inventory_profile.cpp b/common/inventory_profile.cpp index a51b04998..e93146598 100644 --- a/common/inventory_profile.cpp +++ b/common/inventory_profile.cpp @@ -33,7 +33,7 @@ #include -std::list dirty_inst; +std::list dirty_inst; // @@ -48,50 +48,50 @@ ItemInstQueue::~ItemInstQueue() } // Put item onto back of queue -void ItemInstQueue::push(EQEmu::ItemInstance* inst) +void ItemInstQueue::push(EQ::ItemInstance* inst) { m_list.push_back(inst); } // Put item onto front of queue -void ItemInstQueue::push_front(EQEmu::ItemInstance* inst) +void ItemInstQueue::push_front(EQ::ItemInstance* inst) { m_list.push_front(inst); } // Remove item from front of queue -EQEmu::ItemInstance* ItemInstQueue::pop() +EQ::ItemInstance* ItemInstQueue::pop() { if (m_list.empty()) return nullptr; - EQEmu::ItemInstance* inst = m_list.front(); + EQ::ItemInstance* inst = m_list.front(); m_list.pop_front(); return inst; } // Remove item from back of queue -EQEmu::ItemInstance* ItemInstQueue::pop_back() +EQ::ItemInstance* ItemInstQueue::pop_back() { if (m_list.empty()) return nullptr; - EQEmu::ItemInstance* inst = m_list.back(); + EQ::ItemInstance* inst = m_list.back(); m_list.pop_back(); return inst; } // Look at item at front of queue -EQEmu::ItemInstance* ItemInstQueue::peek_front() const +EQ::ItemInstance* ItemInstQueue::peek_front() const { return (m_list.empty()) ? nullptr : m_list.front(); } // -// class EQEmu::InventoryProfile +// class EQ::InventoryProfile // -EQEmu::InventoryProfile::~InventoryProfile() +EQ::InventoryProfile::~InventoryProfile() { for (auto iter = m_worn.begin(); iter != m_worn.end(); ++iter) { safe_delete(iter->second); @@ -119,18 +119,18 @@ EQEmu::InventoryProfile::~InventoryProfile() m_trade.clear(); } -void EQEmu::InventoryProfile::SetInventoryVersion(versions::MobVersion inventory_version) { +void EQ::InventoryProfile::SetInventoryVersion(versions::MobVersion inventory_version) { m_mob_version = versions::ValidateMobVersion(inventory_version); SetGMInventory(m_gm_inventory); } -void EQEmu::InventoryProfile::SetGMInventory(bool gmi_flag) { +void EQ::InventoryProfile::SetGMInventory(bool gmi_flag) { m_gm_inventory = gmi_flag; m_lookup = inventory::DynamicLookup(m_mob_version, gmi_flag); } -void EQEmu::InventoryProfile::CleanDirty() { +void EQ::InventoryProfile::CleanDirty() { auto iter = dirty_inst.begin(); while (iter != dirty_inst.end()) { delete (*iter); @@ -139,14 +139,14 @@ void EQEmu::InventoryProfile::CleanDirty() { dirty_inst.clear(); } -void EQEmu::InventoryProfile::MarkDirty(ItemInstance *inst) { +void EQ::InventoryProfile::MarkDirty(ItemInstance *inst) { if (inst) { dirty_inst.push_back(inst); } } // Retrieve item at specified slot; returns false if item not found -EQEmu::ItemInstance* EQEmu::InventoryProfile::GetItem(int16 slot_id) const +EQ::ItemInstance* EQ::InventoryProfile::GetItem(int16 slot_id) const { ItemInstance* result = nullptr; @@ -219,31 +219,31 @@ EQEmu::ItemInstance* EQEmu::InventoryProfile::GetItem(int16 slot_id) const } // Retrieve item at specified position within bag -EQEmu::ItemInstance* EQEmu::InventoryProfile::GetItem(int16 slot_id, uint8 bagidx) const +EQ::ItemInstance* EQ::InventoryProfile::GetItem(int16 slot_id, uint8 bagidx) const { return GetItem(InventoryProfile::CalcSlotId(slot_id, bagidx)); } // Put an item snto specified slot -int16 EQEmu::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst) +int16 EQ::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst) { - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << slot_id) & m_lookup->PossessionsBitmask) == 0) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } - else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) - return EQEmu::invslot::SLOT_INVALID; + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) + return EQ::invslot::SLOT_INVALID; } - else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= m_lookup->InventoryTypeSize.Bank) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } // Clean up item already in slot (if exists) @@ -259,17 +259,17 @@ int16 EQEmu::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst) return _PutItem(slot_id, inst.Clone()); } -int16 EQEmu::InventoryProfile::PushCursor(const ItemInstance &inst) { +int16 EQ::InventoryProfile::PushCursor(const ItemInstance &inst) { m_cursor.push(inst.Clone()); return invslot::slotCursor; } -EQEmu::ItemInstance* EQEmu::InventoryProfile::GetCursorItem() { +EQ::ItemInstance* EQ::InventoryProfile::GetCursorItem() { return m_cursor.peek_front(); } // Swap items in inventory -bool EQEmu::InventoryProfile::SwapItem( +bool EQ::InventoryProfile::SwapItem( int16 source_slot, int16 destination_slot, SwapItemFailState &fail_state, @@ -280,54 +280,54 @@ bool EQEmu::InventoryProfile::SwapItem( ) { fail_state = swapInvalid; - if (source_slot <= EQEmu::invslot::POSSESSIONS_END && source_slot >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (source_slot <= EQ::invslot::POSSESSIONS_END && source_slot >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64) 1 << source_slot) & m_lookup->PossessionsBitmask) == 0) { fail_state = swapNotAllowed; return false; } } - else if (source_slot <= EQEmu::invbag::GENERAL_BAGS_END && source_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((source_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (source_slot <= EQ::invbag::GENERAL_BAGS_END && source_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((source_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0) { fail_state = swapNotAllowed; return false; } } - else if (source_slot <= EQEmu::invslot::BANK_END && source_slot >= EQEmu::invslot::BANK_BEGIN) { - if ((source_slot - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) { + else if (source_slot <= EQ::invslot::BANK_END && source_slot >= EQ::invslot::BANK_BEGIN) { + if ((source_slot - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) { fail_state = swapNotAllowed; return false; } } - else if (source_slot <= EQEmu::invbag::BANK_BAGS_END && source_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (source_slot - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (source_slot <= EQ::invbag::BANK_BAGS_END && source_slot >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (source_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= m_lookup->InventoryTypeSize.Bank) { fail_state = swapNotAllowed; return false; } } - if (destination_slot <= EQEmu::invslot::POSSESSIONS_END && destination_slot >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (destination_slot <= EQ::invslot::POSSESSIONS_END && destination_slot >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << destination_slot) & m_lookup->PossessionsBitmask) == 0) { fail_state = swapNotAllowed; return false; } } - else if (destination_slot <= EQEmu::invbag::GENERAL_BAGS_END && destination_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((destination_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (destination_slot <= EQ::invbag::GENERAL_BAGS_END && destination_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((destination_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0) { fail_state = swapNotAllowed; return false; } } - else if (destination_slot <= EQEmu::invslot::BANK_END && destination_slot >= EQEmu::invslot::BANK_BEGIN) { - if ((destination_slot - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) { + else if (destination_slot <= EQ::invslot::BANK_END && destination_slot >= EQ::invslot::BANK_BEGIN) { + if ((destination_slot - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) { fail_state = swapNotAllowed; return false; } } - else if (destination_slot <= EQEmu::invbag::BANK_BAGS_END && destination_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (destination_slot - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (destination_slot <= EQ::invbag::BANK_BAGS_END && destination_slot >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (destination_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= m_lookup->InventoryTypeSize.Bank) { fail_state = swapNotAllowed; return false; @@ -399,7 +399,7 @@ bool EQEmu::InventoryProfile::SwapItem( } // Remove item from inventory (with memory delete) -bool EQEmu::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) { +bool EQ::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) { // Pop item out of inventory map (or queue) ItemInstance *item_to_delete = PopItem(slot_id); @@ -434,7 +434,7 @@ bool EQEmu::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) { } // Checks All items in a bag for No Drop -bool EQEmu::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse) +bool EQ::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse) { ItemInstance* inst = GetItem(slot_id); if (!inst) @@ -445,7 +445,7 @@ bool EQEmu::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse) // Remove item from bucket without memory delete // Returns item pointer if full delete was successful -EQEmu::ItemInstance* EQEmu::InventoryProfile::PopItem(int16 slot_id) +EQ::ItemInstance* EQ::InventoryProfile::PopItem(int16 slot_id) { ItemInstance* p = nullptr; @@ -488,7 +488,7 @@ EQEmu::ItemInstance* EQEmu::InventoryProfile::PopItem(int16 slot_id) return p; } -bool EQEmu::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Quantity) { +bool EQ::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Quantity) { if (ItemToTry->Stackable) { @@ -592,7 +592,7 @@ bool EQEmu::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Q //This function has a flaw in that it only returns the last stack that it looked at //when quantity is greater than 1 and not all of quantity can be found in 1 stack. -int16 EQEmu::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 where) +int16 EQ::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 where) { int16 slot_id = INVALID_INDEX; @@ -642,7 +642,7 @@ int16 EQEmu::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 whe } //this function has the same quantity flaw mentioned above in HasItem() -int16 EQEmu::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 where) +int16 EQ::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 where) { int16 slot_id = INVALID_INDEX; @@ -688,7 +688,7 @@ int16 EQEmu::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 whe return slot_id; } -int16 EQEmu::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where) +int16 EQ::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where) { int16 slot_id = INVALID_INDEX; @@ -736,7 +736,7 @@ int16 EQEmu::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where) // Locate an available inventory slot // Returns slot_id when there's one available, else SLOT_INVALID -int16 EQEmu::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size, bool is_arrow) +int16 EQ::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size, bool is_arrow) { // Check basic inventory for (int16 i = invslot::GENERAL_BEGIN; i <= invslot::GENERAL_END; i++) { @@ -786,7 +786,7 @@ int16 EQEmu::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 } // This is a mix of HasSpaceForItem and FindFreeSlot..due to existing coding behavior, it was better to add a new helper function... -int16 EQEmu::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst, int16 general_start, uint8 bag_start) { +int16 EQ::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst, int16 general_start, uint8 bag_start) { // Do not arbitrarily use this function..it is designed for use with Client::ResetTrade() and Client::FinishTrade(). // If you have a need, use it..but, understand it is not a suitable replacement for InventoryProfile::FindFreeSlot(). // @@ -924,7 +924,7 @@ int16 EQEmu::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst } // Opposite of below: Get parent bag slot_id from a slot inside of bag -int16 EQEmu::InventoryProfile::CalcSlotId(int16 slot_id) { +int16 EQ::InventoryProfile::CalcSlotId(int16 slot_id) { int16 parent_slot_id = INVALID_INDEX; // this is not a bag range... using this risks over-writing existing items @@ -952,7 +952,7 @@ int16 EQEmu::InventoryProfile::CalcSlotId(int16 slot_id) { } // Calculate slot_id for an item within a bag -int16 EQEmu::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) { +int16 EQ::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) { if (!InventoryProfile::SupportsContainers(bagslot_id)) return INVALID_INDEX; @@ -977,7 +977,7 @@ int16 EQEmu::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) { return slot_id; } -uint8 EQEmu::InventoryProfile::CalcBagIdx(int16 slot_id) { +uint8 EQ::InventoryProfile::CalcBagIdx(int16 slot_id) { uint8 index = 0; // this is not a bag range... using this risks over-writing existing items @@ -1006,7 +1006,7 @@ uint8 EQEmu::InventoryProfile::CalcBagIdx(int16 slot_id) { return index; } -int16 EQEmu::InventoryProfile::CalcSlotFromMaterial(uint8 material) +int16 EQ::InventoryProfile::CalcSlotFromMaterial(uint8 material) { switch (material) { @@ -1033,7 +1033,7 @@ int16 EQEmu::InventoryProfile::CalcSlotFromMaterial(uint8 material) } } -uint8 EQEmu::InventoryProfile::CalcMaterialFromSlot(int16 equipslot) +uint8 EQ::InventoryProfile::CalcMaterialFromSlot(int16 equipslot) { switch (equipslot) { @@ -1061,7 +1061,7 @@ uint8 EQEmu::InventoryProfile::CalcMaterialFromSlot(int16 equipslot) } } -bool EQEmu::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, const ItemData *Container) { +bool EQ::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, const ItemData *Container) { if (!ItemToTry || !Container) return false; @@ -1078,7 +1078,7 @@ bool EQEmu::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, c return true; } -bool EQEmu::InventoryProfile::SupportsClickCasting(int16 slot_id) +bool EQ::InventoryProfile::SupportsClickCasting(int16 slot_id) { // there are a few non-potion items that identify as ItemTypePotion..so, we still need to ubiquitously include the equipment range if (slot_id >= invslot::EQUIPMENT_BEGIN && slot_id <= invslot::EQUIPMENT_END) { @@ -1095,7 +1095,7 @@ bool EQEmu::InventoryProfile::SupportsClickCasting(int16 slot_id) return false; } -bool EQEmu::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id) +bool EQ::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id) { // does this have the same criteria as 'SupportsClickCasting' above? (bag clicking per client) if (slot_id >= invslot::EQUIPMENT_BEGIN && slot_id <= invslot::EQUIPMENT_END) { @@ -1112,7 +1112,7 @@ bool EQEmu::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id) } // Test whether a given slot can support a container item -bool EQEmu::InventoryProfile::SupportsContainers(int16 slot_id) +bool EQ::InventoryProfile::SupportsContainers(int16 slot_id) { if ((slot_id == invslot::slotCursor) || (slot_id >= invslot::GENERAL_BEGIN && slot_id <= invslot::GENERAL_END) || @@ -1126,7 +1126,7 @@ bool EQEmu::InventoryProfile::SupportsContainers(int16 slot_id) return false; } -int EQEmu::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) { +int EQ::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) { if (!inst) return INVALID_INDEX; @@ -1162,7 +1162,7 @@ int EQEmu::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) { return INVALID_INDEX; } -uint8 EQEmu::InventoryProfile::FindBrightestLightType() +uint8 EQ::InventoryProfile::FindBrightestLightType() { uint8 brightest_light_type = 0; @@ -1213,7 +1213,7 @@ uint8 EQEmu::InventoryProfile::FindBrightestLightType() return brightest_light_type; } -void EQEmu::InventoryProfile::dumpEntireInventory() { +void EQ::InventoryProfile::dumpEntireInventory() { dumpWornItems(); dumpInventory(); @@ -1223,29 +1223,29 @@ void EQEmu::InventoryProfile::dumpEntireInventory() { std::cout << std::endl; } -void EQEmu::InventoryProfile::dumpWornItems() { +void EQ::InventoryProfile::dumpWornItems() { std::cout << "Worn items:" << std::endl; dumpItemCollection(m_worn); } -void EQEmu::InventoryProfile::dumpInventory() { +void EQ::InventoryProfile::dumpInventory() { std::cout << "Inventory items:" << std::endl; dumpItemCollection(m_inv); } -void EQEmu::InventoryProfile::dumpBankItems() { +void EQ::InventoryProfile::dumpBankItems() { std::cout << "Bank items:" << std::endl; dumpItemCollection(m_bank); } -void EQEmu::InventoryProfile::dumpSharedBankItems() { +void EQ::InventoryProfile::dumpSharedBankItems() { std::cout << "Shared Bank items:" << std::endl; dumpItemCollection(m_shbank); } -int EQEmu::InventoryProfile::GetSlotByItemInstCollection(const std::map &collection, ItemInstance *inst) { +int EQ::InventoryProfile::GetSlotByItemInstCollection(const std::map &collection, ItemInstance *inst) { for (auto iter = collection.begin(); iter != collection.end(); ++iter) { ItemInstance *t_inst = iter->second; if (t_inst == inst) { @@ -1261,10 +1261,10 @@ int EQEmu::InventoryProfile::GetSlotByItemInstCollection(const std::map &collection) +void EQ::InventoryProfile::dumpItemCollection(const std::map &collection) { for (auto it = collection.cbegin(); it != collection.cend(); ++it) { auto inst = it->second; @@ -1278,7 +1278,7 @@ void EQEmu::InventoryProfile::dumpItemCollection(const std::map::const_iterator *it) +void EQ::InventoryProfile::dumpBagContents(ItemInstance *inst, std::map::const_iterator *it) { if (!inst || !inst->IsClassBag()) return; @@ -1297,14 +1297,14 @@ void EQEmu::InventoryProfile::dumpBagContents(ItemInstance *inst, std::map& bucket, int16 slot_id) const +EQ::ItemInstance* EQ::InventoryProfile::_GetItem(const std::map& bucket, int16 slot_id) const { - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << slot_id) & m_lookup->PossessionsBitmask) == 0) return nullptr; } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { - if (slot_id - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { + if (slot_id - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) return nullptr; } @@ -1319,7 +1319,7 @@ EQEmu::ItemInstance* EQEmu::InventoryProfile::_GetItem(const std::map= invslot::BANK_BEGIN && slot_id <= invslot::BANK_END) { - if (slot_id - EQEmu::invslot::BANK_BEGIN < m_lookup->InventoryTypeSize.Bank) { + if (slot_id - EQ::invslot::BANK_BEGIN < m_lookup->InventoryTypeSize.Bank) { m_bank[slot_id] = inst; result = slot_id; } @@ -1389,17 +1389,17 @@ int16 EQEmu::InventoryProfile::_PutItem(int16 slot_id, ItemInstance* inst) } // Internal Method: Checks an inventory bucket for a particular item -int16 EQEmu::InventoryProfile::_HasItem(std::map& bucket, uint32 item_id, uint8 quantity) +int16 EQ::InventoryProfile::_HasItem(std::map& bucket, uint32 item_id, uint8 quantity) { uint32 quantity_found = 0; for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) { - if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0) continue; } - else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) { - if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) + else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) { + if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) continue; } @@ -1440,7 +1440,7 @@ int16 EQEmu::InventoryProfile::_HasItem(std::map& bucket, } // Internal Method: Checks an inventory queue type bucket for a particular item -int16 EQEmu::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity) +int16 EQ::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity) { // The downfall of this (these) queue procedure is that callers presume that when an item is // found, it is presented as being available on the cursor. In cases of a parity check, this @@ -1491,17 +1491,17 @@ int16 EQEmu::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, u } // Internal Method: Checks an inventory bucket for a particular item -int16 EQEmu::InventoryProfile::_HasItemByUse(std::map& bucket, uint8 use, uint8 quantity) +int16 EQ::InventoryProfile::_HasItemByUse(std::map& bucket, uint8 use, uint8 quantity) { uint32 quantity_found = 0; for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) { - if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0) continue; } - else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) { - if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) + else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) { + if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) continue; } @@ -1532,7 +1532,7 @@ int16 EQEmu::InventoryProfile::_HasItemByUse(std::map& buc } // Internal Method: Checks an inventory queue type bucket for a particular item -int16 EQEmu::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity) +int16 EQ::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity) { uint32 quantity_found = 0; @@ -1566,15 +1566,15 @@ int16 EQEmu::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, u return INVALID_INDEX; } -int16 EQEmu::InventoryProfile::_HasItemByLoreGroup(std::map& bucket, uint32 loregroup) +int16 EQ::InventoryProfile::_HasItemByLoreGroup(std::map& bucket, uint32 loregroup) { for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) { - if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0) continue; } - else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) { - if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) + else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) { + if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank) continue; } @@ -1611,11 +1611,11 @@ int16 EQEmu::InventoryProfile::_HasItemByLoreGroup(std::map::const_iterator cbegin() { return m_list.cbegin(); } - inline std::list::const_iterator cend() { return m_list.cend(); } + inline std::list::const_iterator cbegin() { return m_list.cbegin(); } + inline std::list::const_iterator cend() { return m_list.cend(); } inline int size() { return static_cast(m_list.size()); } // TODO: change to size_t inline bool empty() { return m_list.empty(); } - void push(EQEmu::ItemInstance* inst); - void push_front(EQEmu::ItemInstance* inst); - EQEmu::ItemInstance* pop(); - EQEmu::ItemInstance* pop_back(); - EQEmu::ItemInstance* peek_front() const; + void push(EQ::ItemInstance* inst); + void push_front(EQ::ItemInstance* inst); + EQ::ItemInstance* pop(); + EQ::ItemInstance* pop_back(); + EQ::ItemInstance* peek_front() const; protected: ///////////////////////// // Protected Members ///////////////////////// - std::list m_list; + std::list m_list; }; // ######################################## -// Class: EQEmu::InventoryProfile +// Class: EQ::InventoryProfile // Character inventory -namespace EQEmu +namespace EQ { class InventoryProfile { diff --git a/common/inventory_slot.cpp b/common/inventory_slot.cpp index 21af3eb45..b86b5ca91 100644 --- a/common/inventory_slot.cpp +++ b/common/inventory_slot.cpp @@ -22,7 +22,7 @@ #include "string_util.h" -int8 EQEmu::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index) +int8 EQ::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index) { switch (slot_index) { case invslot::slotHead: @@ -48,7 +48,7 @@ int8 EQEmu::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index) } } -int8 EQEmu::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& inventory_slot) +int8 EQ::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& inventory_slot) { if ((!inventory_slot.Typeless() && !inventory_slot.IsTypeIndex(invtype::typePossessions)) || !inventory_slot.IsContainerIndex(invbag::SLOT_INVALID) || !inventory_slot.IsSocketIndex(invaug::SOCKET_INVALID)) return textures::textureInvalid; @@ -56,7 +56,7 @@ int8 EQEmu::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& i return ConvertEquipmentIndexToTextureIndex(inventory_slot.SlotIndex()); } -int16 EQEmu::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index) +int16 EQ::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index) { switch (texture_index) { case textures::armorHead: @@ -82,7 +82,7 @@ int16 EQEmu::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index) } } -bool EQEmu::InventorySlot::IsValidSlot() const +bool EQ::InventorySlot::IsValidSlot() const { if (_typeless) return false; @@ -100,7 +100,7 @@ bool EQEmu::InventorySlot::IsValidSlot() const return true; } -bool EQEmu::InventorySlot::IsDeleteSlot() const +bool EQ::InventorySlot::IsDeleteSlot() const { if (_typeless) return (_slot_index == invslot::SLOT_INVALID && _container_index == invbag::SLOT_INVALID && _socket_index == invaug::SOCKET_INVALID); @@ -108,7 +108,7 @@ bool EQEmu::InventorySlot::IsDeleteSlot() const return (_type_index == invtype::TYPE_INVALID && _slot_index == invslot::SLOT_INVALID && _container_index == invbag::SLOT_INVALID && _socket_index == invaug::SOCKET_INVALID); } -bool EQEmu::InventorySlot::IsEquipmentIndex(int16 slot_index) +bool EQ::InventorySlot::IsEquipmentIndex(int16 slot_index) { if (slot_index < invslot::EQUIPMENT_BEGIN || slot_index > invslot::EQUIPMENT_END) return false; @@ -116,7 +116,7 @@ bool EQEmu::InventorySlot::IsEquipmentIndex(int16 slot_index) return true; } -bool EQEmu::InventorySlot::IsGeneralIndex(int16 slot_index) +bool EQ::InventorySlot::IsGeneralIndex(int16 slot_index) { if (slot_index < invslot::GENERAL_BEGIN || slot_index > invslot::GENERAL_END) return false; @@ -124,7 +124,7 @@ bool EQEmu::InventorySlot::IsGeneralIndex(int16 slot_index) return true; } -bool EQEmu::InventorySlot::IsCursorIndex(int16 slot_index) +bool EQ::InventorySlot::IsCursorIndex(int16 slot_index) { if (slot_index == invslot::slotCursor) return true; @@ -132,7 +132,7 @@ bool EQEmu::InventorySlot::IsCursorIndex(int16 slot_index) return false; } -bool EQEmu::InventorySlot::IsWeaponIndex(int16 slot_index) +bool EQ::InventorySlot::IsWeaponIndex(int16 slot_index) { if (slot_index == invslot::slotPrimary || slot_index == invslot::slotSecondary || slot_index == invslot::slotRange) return true; @@ -140,7 +140,7 @@ bool EQEmu::InventorySlot::IsWeaponIndex(int16 slot_index) return false; } -bool EQEmu::InventorySlot::IsTextureIndex(int16 slot_index) +bool EQ::InventorySlot::IsTextureIndex(int16 slot_index) { switch (slot_index) { case invslot::slotHead: @@ -158,7 +158,7 @@ bool EQEmu::InventorySlot::IsTextureIndex(int16 slot_index) } } -bool EQEmu::InventorySlot::IsTintableIndex(int16 slot_index) +bool EQ::InventorySlot::IsTintableIndex(int16 slot_index) { switch (slot_index) { case invslot::slotHead: @@ -174,7 +174,7 @@ bool EQEmu::InventorySlot::IsTintableIndex(int16 slot_index) } } -bool EQEmu::InventorySlot::IsEquipmentSlot() const +bool EQ::InventorySlot::IsEquipmentSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -185,7 +185,7 @@ bool EQEmu::InventorySlot::IsEquipmentSlot() const return IsEquipmentIndex(_slot_index); } -bool EQEmu::InventorySlot::IsGeneralSlot() const +bool EQ::InventorySlot::IsGeneralSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -196,7 +196,7 @@ bool EQEmu::InventorySlot::IsGeneralSlot() const return IsGeneralIndex(_socket_index); } -bool EQEmu::InventorySlot::IsCursorSlot() const +bool EQ::InventorySlot::IsCursorSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -207,7 +207,7 @@ bool EQEmu::InventorySlot::IsCursorSlot() const return IsCursorIndex(_slot_index); } -bool EQEmu::InventorySlot::IsWeaponSlot() const +bool EQ::InventorySlot::IsWeaponSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -218,7 +218,7 @@ bool EQEmu::InventorySlot::IsWeaponSlot() const return IsWeaponIndex(_slot_index); } -bool EQEmu::InventorySlot::IsTextureSlot() const +bool EQ::InventorySlot::IsTextureSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -229,7 +229,7 @@ bool EQEmu::InventorySlot::IsTextureSlot() const return IsTextureIndex(_slot_index); } -bool EQEmu::InventorySlot::IsTintableSlot() const +bool EQ::InventorySlot::IsTintableSlot() const { if (!_typeless && (_type_index != invtype::typePossessions)) return false; @@ -240,7 +240,7 @@ bool EQEmu::InventorySlot::IsTintableSlot() const return IsTintableIndex(_slot_index); } -bool EQEmu::InventorySlot::IsSlot() const +bool EQ::InventorySlot::IsSlot() const { if (!_typeless && (_type_index == invtype::TYPE_INVALID)) return false; @@ -254,7 +254,7 @@ bool EQEmu::InventorySlot::IsSlot() const return true; } -bool EQEmu::InventorySlot::IsSlotSocket() const +bool EQ::InventorySlot::IsSlotSocket() const { if (!_typeless && (_type_index == invtype::TYPE_INVALID)) return false; @@ -268,7 +268,7 @@ bool EQEmu::InventorySlot::IsSlotSocket() const return true; } -bool EQEmu::InventorySlot::IsContainer() const +bool EQ::InventorySlot::IsContainer() const { if (!_typeless && (_type_index == invtype::TYPE_INVALID)) return false; @@ -282,7 +282,7 @@ bool EQEmu::InventorySlot::IsContainer() const return true; } -bool EQEmu::InventorySlot::IsContainerSocket() const +bool EQ::InventorySlot::IsContainerSocket() const { if (!_typeless && (_type_index == invtype::TYPE_INVALID)) return false; @@ -296,12 +296,12 @@ bool EQEmu::InventorySlot::IsContainerSocket() const return true; } -EQEmu::InventorySlot EQEmu::InventorySlot::ToTopOwner() const +EQ::InventorySlot EQ::InventorySlot::ToTopOwner() const { return InventorySlot(_type_index, _slot_index); } -EQEmu::InventorySlot EQEmu::InventorySlot::ToOwner() const +EQ::InventorySlot EQ::InventorySlot::ToOwner() const { if (IsSlot() || IsSlotSocket() || IsContainer()) return InventorySlot(_type_index, _slot_index); @@ -312,17 +312,17 @@ EQEmu::InventorySlot EQEmu::InventorySlot::ToOwner() const return InventorySlot(); } -const std::string EQEmu::InventorySlot::ToString() const +const std::string EQ::InventorySlot::ToString() const { return StringFormat("(%i%s, %i, %i, %i)", _type_index, (_typeless ? " [typeless]" : ""), _slot_index, _container_index, _socket_index); } -const std::string EQEmu::InventorySlot::ToName() const +const std::string EQ::InventorySlot::ToName() const { return StringFormat("InventorySlot - _type_index: %i%s, _slot_index: %i, _container_index: %i, _socket_index: %i", _type_index, (_typeless ? " [typeless]" : ""), _slot_index, _container_index, _socket_index); } -void EQEmu::InventorySlot::SetInvalidSlot() +void EQ::InventorySlot::SetInvalidSlot() { _type_index = invtype::TYPE_INVALID; _slot_index = invslot::SLOT_INVALID; @@ -330,7 +330,7 @@ void EQEmu::InventorySlot::SetInvalidSlot() _socket_index = invaug::SOCKET_INVALID; } -//bool EQEmu::InventorySlot::IsBonusIndex(int16 slot_index) +//bool EQ::InventorySlot::IsBonusIndex(int16 slot_index) //{ // if ((slot_index >= inventory::EquipmentBegin) && (slot_index <= inventory::EquipmentEnd) && (slot_index != inventory::slotAmmo)) // return true; @@ -338,7 +338,7 @@ void EQEmu::InventorySlot::SetInvalidSlot() // return false; //} -//bool EQEmu::InventorySlot::IsBonusSlot() const +//bool EQ::InventorySlot::IsBonusSlot() const //{ // if ((_type_index != inventory::typePossessions) || (_container_index != inventory::containerInvalid) || (_socket_index != inventory::socketInvalid)) // return false; @@ -346,7 +346,7 @@ void EQEmu::InventorySlot::SetInvalidSlot() // return IsBonusIndex(_slot_index); //} -bool inventory_slot_typeless_lessthan(const EQEmu::InventorySlot& lhs, const EQEmu::InventorySlot& rhs) +bool inventory_slot_typeless_lessthan(const EQ::InventorySlot& lhs, const EQ::InventorySlot& rhs) { if (lhs.SlotIndex() < rhs.SlotIndex()) return true; @@ -360,7 +360,7 @@ bool inventory_slot_typeless_lessthan(const EQEmu::InventorySlot& lhs, const EQE return false; } -bool EQEmu::InventorySlot::operator<(const InventorySlot& rhs) const +bool EQ::InventorySlot::operator<(const InventorySlot& rhs) const { if (Typeless() || rhs.Typeless()) return inventory_slot_typeless_lessthan(*this, rhs); @@ -380,7 +380,7 @@ bool EQEmu::InventorySlot::operator<(const InventorySlot& rhs) const return false; } -bool EQEmu::operator==(const InventorySlot& lhs, const InventorySlot& rhs) +bool EQ::operator==(const InventorySlot& lhs, const InventorySlot& rhs) { if (lhs.Typeless() || rhs.Typeless()) return ((lhs.SlotIndex() == rhs.SlotIndex()) && (lhs.ContainerIndex() == rhs.ContainerIndex()) && (lhs.SocketIndex() == rhs.SocketIndex())); diff --git a/common/inventory_slot.h b/common/inventory_slot.h index 967673f99..d61d8acb0 100644 --- a/common/inventory_slot.h +++ b/common/inventory_slot.h @@ -23,7 +23,7 @@ #include "emu_constants.h" -namespace EQEmu +namespace EQ { class InventorySlot; diff --git a/common/ipc_mutex.cpp b/common/ipc_mutex.cpp index 75e0a63a1..5eb4eedfc 100644 --- a/common/ipc_mutex.cpp +++ b/common/ipc_mutex.cpp @@ -31,7 +31,7 @@ #include "eqemu_exception.h" #include "eqemu_config.h" -namespace EQEmu { +namespace EQ { struct IPCMutex::Implementation { #ifdef _WINDOWS HANDLE mut_; diff --git a/common/ipc_mutex.h b/common/ipc_mutex.h index ab0af4817..a8f2fd13c 100644 --- a/common/ipc_mutex.h +++ b/common/ipc_mutex.h @@ -21,7 +21,7 @@ #include -namespace EQEmu { +namespace EQ { //! Interprocess Named Binary Semaphore (Mutex) /*! diff --git a/common/item_data.cpp b/common/item_data.cpp index c0e70d72a..f3e13edf7 100644 --- a/common/item_data.cpp +++ b/common/item_data.cpp @@ -23,7 +23,7 @@ //#include "deity.h" -uint32 EQEmu::item::ConvertAugTypeToAugTypeBit(uint8 aug_type) +uint32 EQ::item::ConvertAugTypeToAugTypeBit(uint8 aug_type) { switch (aug_type) { case AugTypeGeneralSingleStat: @@ -95,7 +95,7 @@ uint32 EQEmu::item::ConvertAugTypeToAugTypeBit(uint8 aug_type) } } -uint8 EQEmu::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit) +uint8 EQ::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit) { switch (aug_type_bit) { case bit_AugTypeGeneralSingleStat: @@ -167,7 +167,7 @@ uint8 EQEmu::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit) } } -bool EQEmu::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const +bool EQ::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const { if (!(Races & GetPlayerRaceBit(race_id))) return false; @@ -178,37 +178,37 @@ bool EQEmu::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const return true; } -bool EQEmu::ItemData::IsClassCommon() const +bool EQ::ItemData::IsClassCommon() const { return (ItemClass == item::ItemClassCommon); } -bool EQEmu::ItemData::IsClassBag() const +bool EQ::ItemData::IsClassBag() const { return (ItemClass == item::ItemClassBag); } -bool EQEmu::ItemData::IsClassBook() const +bool EQ::ItemData::IsClassBook() const { return (ItemClass == item::ItemClassBook); } -bool EQEmu::ItemData::IsType1HWeapon() const +bool EQ::ItemData::IsType1HWeapon() const { return ((ItemType == item::ItemType1HBlunt) || (ItemType == item::ItemType1HSlash) || (ItemType == item::ItemType1HPiercing) || (ItemType == item::ItemTypeMartial)); } -bool EQEmu::ItemData::IsType2HWeapon() const +bool EQ::ItemData::IsType2HWeapon() const { return ((ItemType == item::ItemType2HBlunt) || (ItemType == item::ItemType2HSlash) || (ItemType == item::ItemType2HPiercing)); } -bool EQEmu::ItemData::IsTypeShield() const +bool EQ::ItemData::IsTypeShield() const { return (ItemType == item::ItemTypeShield); } -bool EQEmu::ItemData::CheckLoreConflict(const ItemData* l_item, const ItemData* r_item) +bool EQ::ItemData::CheckLoreConflict(const ItemData* l_item, const ItemData* r_item) { if (!l_item || !r_item) return false; diff --git a/common/item_data.h b/common/item_data.h index d5570f856..d3ae5f928 100644 --- a/common/item_data.h +++ b/common/item_data.h @@ -47,7 +47,7 @@ #include "emu_constants.h" -namespace EQEmu +namespace EQ { namespace item { enum ItemClass { diff --git a/common/item_instance.cpp b/common/item_instance.cpp index 2c186e066..d0bbbca50 100644 --- a/common/item_instance.cpp +++ b/common/item_instance.cpp @@ -54,9 +54,9 @@ static inline int32 GetNextItemInstSerialNumber() { } // -// class EQEmu::ItemInstance +// class EQ::ItemInstance // -EQEmu::ItemInstance::ItemInstance(const ItemData* item, int16 charges) { +EQ::ItemInstance::ItemInstance(const ItemData* item, int16 charges) { m_use_type = ItemInstNormal; if(item) { m_item = new ItemData(*item); @@ -87,7 +87,7 @@ EQEmu::ItemInstance::ItemInstance(const ItemData* item, int16 charges) { m_new_id_file = 0; } -EQEmu::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) { +EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) { m_use_type = ItemInstNormal; m_item = db->GetItem(item_id); if(m_item) { @@ -121,7 +121,7 @@ EQEmu::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 char m_new_id_file = 0; } -EQEmu::ItemInstance::ItemInstance(ItemInstTypes use_type) { +EQ::ItemInstance::ItemInstance(ItemInstTypes use_type) { m_use_type = use_type; m_item = nullptr; m_charges = 0; @@ -143,8 +143,8 @@ EQEmu::ItemInstance::ItemInstance(ItemInstTypes use_type) { m_new_id_file = 0; } -// Make a copy of an EQEmu::ItemInstance object -EQEmu::ItemInstance::ItemInstance(const ItemInstance& copy) +// Make a copy of an EQ::ItemInstance object +EQ::ItemInstance::ItemInstance(const ItemInstance& copy) { m_use_type=copy.m_use_type; if(copy.m_item) @@ -202,7 +202,7 @@ EQEmu::ItemInstance::ItemInstance(const ItemInstance& copy) } // Clean up container contents -EQEmu::ItemInstance::~ItemInstance() +EQ::ItemInstance::~ItemInstance() { Clear(); safe_delete(m_item); @@ -211,7 +211,7 @@ EQEmu::ItemInstance::~ItemInstance() } // Query item type -bool EQEmu::ItemInstance::IsType(item::ItemClass item_class) const +bool EQ::ItemInstance::IsType(item::ItemClass item_class) const { // IsType() does not protect against 'm_item = nullptr' @@ -225,23 +225,23 @@ bool EQEmu::ItemInstance::IsType(item::ItemClass item_class) const return (m_item->ItemClass == item_class); } -bool EQEmu::ItemInstance::IsClassCommon() const +bool EQ::ItemInstance::IsClassCommon() const { return (m_item && m_item->IsClassCommon()); } -bool EQEmu::ItemInstance::IsClassBag() const +bool EQ::ItemInstance::IsClassBag() const { return (m_item && m_item->IsClassBag()); } -bool EQEmu::ItemInstance::IsClassBook() const +bool EQ::ItemInstance::IsClassBook() const { return (m_item && m_item->IsClassBook()); } // Is item stackable? -bool EQEmu::ItemInstance::IsStackable() const +bool EQ::ItemInstance::IsStackable() const { if (!m_item) return false; @@ -249,7 +249,7 @@ bool EQEmu::ItemInstance::IsStackable() const return m_item->Stackable; } -bool EQEmu::ItemInstance::IsCharged() const +bool EQ::ItemInstance::IsCharged() const { if (!m_item) return false; @@ -261,7 +261,7 @@ bool EQEmu::ItemInstance::IsCharged() const } // Can item be equipped? -bool EQEmu::ItemInstance::IsEquipable(uint16 race, uint16 class_) const +bool EQ::ItemInstance::IsEquipable(uint16 race, uint16 class_) const { if (!m_item || (m_item->Slots == 0)) return false; @@ -270,18 +270,18 @@ bool EQEmu::ItemInstance::IsEquipable(uint16 race, uint16 class_) const } // Can equip at this slot? -bool EQEmu::ItemInstance::IsEquipable(int16 slot_id) const +bool EQ::ItemInstance::IsEquipable(int16 slot_id) const { if (!m_item) return false; - if (slot_id < EQEmu::invslot::EQUIPMENT_BEGIN || slot_id > EQEmu::invslot::EQUIPMENT_END) + if (slot_id < EQ::invslot::EQUIPMENT_BEGIN || slot_id > EQ::invslot::EQUIPMENT_END) return false; return ((m_item->Slots & (1 << slot_id)) != 0); } -bool EQEmu::ItemInstance::IsAugmentable() const +bool EQ::ItemInstance::IsAugmentable() const { if (!m_item) return false; @@ -294,7 +294,7 @@ bool EQEmu::ItemInstance::IsAugmentable() const return false; } -bool EQEmu::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const { +bool EQ::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const { if (!m_item || !m_item->IsClassCommon()) return false; @@ -306,10 +306,10 @@ bool EQEmu::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const { } } - return (index <= EQEmu::invslot::EQUIPMENT_END); + return (index <= EQ::invslot::EQUIPMENT_END); } -int8 EQEmu::ItemInstance::AvailableAugmentSlot(int32 augtype) const +int8 EQ::ItemInstance::AvailableAugmentSlot(int32 augtype) const { if (!m_item || !m_item->IsClassCommon()) return INVALID_INDEX; @@ -324,7 +324,7 @@ int8 EQEmu::ItemInstance::AvailableAugmentSlot(int32 augtype) const return (index <= invaug::SOCKET_END) ? index : INVALID_INDEX; } -bool EQEmu::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) const +bool EQ::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) const { if (!m_item || !m_item->IsClassCommon()) return false; @@ -336,7 +336,7 @@ bool EQEmu::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) cons } // Retrieve item inside container -EQEmu::ItemInstance* EQEmu::ItemInstance::GetItem(uint8 index) const +EQ::ItemInstance* EQ::ItemInstance::GetItem(uint8 index) const { auto it = m_contents.find(index); if (it != m_contents.end()) { @@ -346,7 +346,7 @@ EQEmu::ItemInstance* EQEmu::ItemInstance::GetItem(uint8 index) const return nullptr; } -uint32 EQEmu::ItemInstance::GetItemID(uint8 slot) const +uint32 EQ::ItemInstance::GetItemID(uint8 slot) const { ItemInstance *item = GetItem(slot); if (item) @@ -355,7 +355,7 @@ uint32 EQEmu::ItemInstance::GetItemID(uint8 slot) const return 0; } -void EQEmu::ItemInstance::PutItem(uint8 index, const ItemInstance& inst) +void EQ::ItemInstance::PutItem(uint8 index, const ItemInstance& inst) { // Clean up item already in slot (if exists) DeleteItem(index); @@ -365,7 +365,7 @@ void EQEmu::ItemInstance::PutItem(uint8 index, const ItemInstance& inst) } // Remove item inside container -void EQEmu::ItemInstance::DeleteItem(uint8 index) +void EQ::ItemInstance::DeleteItem(uint8 index) { ItemInstance* inst = PopItem(index); safe_delete(inst); @@ -373,7 +373,7 @@ void EQEmu::ItemInstance::DeleteItem(uint8 index) // Remove item from container without memory delete // Hands over memory ownership to client of this function call -EQEmu::ItemInstance* EQEmu::ItemInstance::PopItem(uint8 index) +EQ::ItemInstance* EQ::ItemInstance::PopItem(uint8 index) { auto iter = m_contents.find(index); if (iter != m_contents.end()) { @@ -386,7 +386,7 @@ EQEmu::ItemInstance* EQEmu::ItemInstance::PopItem(uint8 index) } // Remove all items from container -void EQEmu::ItemInstance::Clear() +void EQ::ItemInstance::Clear() { // Destroy container contents for (auto iter = m_contents.begin(); iter != m_contents.end(); ++iter) { @@ -396,7 +396,7 @@ void EQEmu::ItemInstance::Clear() } // Remove all items from container -void EQEmu::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent) +void EQ::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent) { // TODO: This needs work... @@ -458,7 +458,7 @@ void EQEmu::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is } } -uint8 EQEmu::ItemInstance::FirstOpenSlot() const +uint8 EQ::ItemInstance::FirstOpenSlot() const { if (!m_item) return INVALID_INDEX; @@ -472,7 +472,7 @@ uint8 EQEmu::ItemInstance::FirstOpenSlot() const return (i < slots) ? i : INVALID_INDEX; } -uint8 EQEmu::ItemInstance::GetTotalItemCount() const +uint8 EQ::ItemInstance::GetTotalItemCount() const { if (!m_item) return 0; @@ -486,7 +486,7 @@ uint8 EQEmu::ItemInstance::GetTotalItemCount() const return item_count; } -bool EQEmu::ItemInstance::IsNoneEmptyContainer() +bool EQ::ItemInstance::IsNoneEmptyContainer() { if (!m_item || !m_item->IsClassBag()) return false; @@ -500,7 +500,7 @@ bool EQEmu::ItemInstance::IsNoneEmptyContainer() } // Retrieve augment inside item -EQEmu::ItemInstance* EQEmu::ItemInstance::GetAugment(uint8 slot) const +EQ::ItemInstance* EQ::ItemInstance::GetAugment(uint8 slot) const { if (m_item && m_item->IsClassCommon()) return GetItem(slot); @@ -508,7 +508,7 @@ EQEmu::ItemInstance* EQEmu::ItemInstance::GetAugment(uint8 slot) const return nullptr; } -EQEmu::ItemInstance* EQEmu::ItemInstance::GetOrnamentationAug(int32 ornamentationAugtype) const +EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAug(int32 ornamentationAugtype) const { if (!m_item || !m_item->IsClassCommon()) { return nullptr; } if (ornamentationAugtype == 0) { return nullptr; } @@ -533,7 +533,7 @@ EQEmu::ItemInstance* EQEmu::ItemInstance::GetOrnamentationAug(int32 ornamentatio return nullptr; } -uint32 EQEmu::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const { +uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const { // Not a Hero Forge item. if (m_ornament_hero_model == 0 || material_slot < 0) return 0; @@ -546,7 +546,7 @@ uint32 EQEmu::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const { return (m_ornament_hero_model * 100) + material_slot; } -bool EQEmu::ItemInstance::UpdateOrnamentationInfo() { +bool EQ::ItemInstance::UpdateOrnamentationInfo() { if (!m_item || !m_item->IsClassCommon()) return false; @@ -582,7 +582,7 @@ bool EQEmu::ItemInstance::UpdateOrnamentationInfo() { return ornamentSet; } -bool EQEmu::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll) { +bool EQ::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll) { if (!ItemToTry || !Container) return false; if (ItemToTry->ItemType == item::ItemTypeArrow || strnlen(Container->CharmFile, 30) == 0) @@ -629,7 +629,7 @@ bool EQEmu::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData return false; } -uint32 EQEmu::ItemInstance::GetAugmentItemID(uint8 slot) const +uint32 EQ::ItemInstance::GetAugmentItemID(uint8 slot) const { if (!m_item || !m_item->IsClassCommon()) return 0; @@ -638,7 +638,7 @@ uint32 EQEmu::ItemInstance::GetAugmentItemID(uint8 slot) const } // Add an augment to the item -void EQEmu::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment) +void EQ::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment) { if (!m_item || !m_item->IsClassCommon()) return; @@ -646,7 +646,7 @@ void EQEmu::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment) PutItem(slot, augment); } -void EQEmu::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id) +void EQ::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id) { if (item_id == 0) { return; } if (db == nullptr) { return; /* TODO: add log message for nullptr */ } @@ -659,7 +659,7 @@ void EQEmu::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item } // Remove augment from item and destroy it -void EQEmu::ItemInstance::DeleteAugment(uint8 index) +void EQ::ItemInstance::DeleteAugment(uint8 index) { if (!m_item || !m_item->IsClassCommon()) return; @@ -668,7 +668,7 @@ void EQEmu::ItemInstance::DeleteAugment(uint8 index) } // Remove augment from item and return it -EQEmu::ItemInstance* EQEmu::ItemInstance::RemoveAugment(uint8 index) +EQ::ItemInstance* EQ::ItemInstance::RemoveAugment(uint8 index) { if (!m_item || !m_item->IsClassCommon()) return nullptr; @@ -676,7 +676,7 @@ EQEmu::ItemInstance* EQEmu::ItemInstance::RemoveAugment(uint8 index) return PopItem(index); } -bool EQEmu::ItemInstance::IsAugmented() +bool EQ::ItemInstance::IsAugmented() { if (!m_item || !m_item->IsClassCommon()) return false; @@ -690,7 +690,7 @@ bool EQEmu::ItemInstance::IsAugmented() } // Has attack/delay? -bool EQEmu::ItemInstance::IsWeapon() const +bool EQ::ItemInstance::IsWeapon() const { if (!m_item || !m_item->IsClassCommon()) return false; @@ -701,7 +701,7 @@ bool EQEmu::ItemInstance::IsWeapon() const return ((m_item->Damage != 0) && (m_item->Delay != 0)); } -bool EQEmu::ItemInstance::IsAmmo() const +bool EQ::ItemInstance::IsAmmo() const { if (!m_item) return false; @@ -717,7 +717,7 @@ bool EQEmu::ItemInstance::IsAmmo() const } -const EQEmu::ItemData* EQEmu::ItemInstance::GetItem() const +const EQ::ItemData* EQ::ItemInstance::GetItem() const { if (!m_item) return nullptr; @@ -728,13 +728,13 @@ const EQEmu::ItemData* EQEmu::ItemInstance::GetItem() const return m_item; } -const EQEmu::ItemData* EQEmu::ItemInstance::GetUnscaledItem() const +const EQ::ItemData* EQ::ItemInstance::GetUnscaledItem() const { // No operator calls and defaults to nullptr return m_item; } -std::string EQEmu::ItemInstance::GetCustomDataString() const { +std::string EQ::ItemInstance::GetCustomDataString() const { std::string ret_val; auto iter = m_custom_data.begin(); while (iter != m_custom_data.end()) { @@ -753,7 +753,7 @@ std::string EQEmu::ItemInstance::GetCustomDataString() const { return ret_val; } -std::string EQEmu::ItemInstance::GetCustomData(std::string identifier) { +std::string EQ::ItemInstance::GetCustomData(std::string identifier) { std::map::const_iterator iter = m_custom_data.find(identifier); if (iter != m_custom_data.end()) { return iter->second; @@ -762,49 +762,49 @@ std::string EQEmu::ItemInstance::GetCustomData(std::string identifier) { return ""; } -void EQEmu::ItemInstance::SetCustomData(std::string identifier, std::string value) { +void EQ::ItemInstance::SetCustomData(std::string identifier, std::string value) { DeleteCustomData(identifier); m_custom_data[identifier] = value; } -void EQEmu::ItemInstance::SetCustomData(std::string identifier, int value) { +void EQ::ItemInstance::SetCustomData(std::string identifier, int value) { DeleteCustomData(identifier); std::stringstream ss; ss << value; m_custom_data[identifier] = ss.str(); } -void EQEmu::ItemInstance::SetCustomData(std::string identifier, float value) { +void EQ::ItemInstance::SetCustomData(std::string identifier, float value) { DeleteCustomData(identifier); std::stringstream ss; ss << value; m_custom_data[identifier] = ss.str(); } -void EQEmu::ItemInstance::SetCustomData(std::string identifier, bool value) { +void EQ::ItemInstance::SetCustomData(std::string identifier, bool value) { DeleteCustomData(identifier); std::stringstream ss; ss << value; m_custom_data[identifier] = ss.str(); } -void EQEmu::ItemInstance::DeleteCustomData(std::string identifier) { +void EQ::ItemInstance::DeleteCustomData(std::string identifier) { auto iter = m_custom_data.find(identifier); if (iter != m_custom_data.end()) { m_custom_data.erase(iter); } } -// Clone a type of EQEmu::ItemInstance object +// Clone a type of EQ::ItemInstance object // c++ doesn't allow a polymorphic copy constructor, // so we have to resort to a polymorphic Clone() -EQEmu::ItemInstance* EQEmu::ItemInstance::Clone() const +EQ::ItemInstance* EQ::ItemInstance::Clone() const { // Pseudo-polymorphic copy constructor return new ItemInstance(*this); } -bool EQEmu::ItemInstance::IsSlotAllowed(int16 slot_id) const { +bool EQ::ItemInstance::IsSlotAllowed(int16 slot_id) const { if (!m_item) { return false; } else if (InventoryProfile::SupportsContainers(slot_id)) { return true; } else if (m_item->Slots & (1 << slot_id)) { return true; } @@ -812,7 +812,7 @@ bool EQEmu::ItemInstance::IsSlotAllowed(int16 slot_id) const { else { return false; } } -bool EQEmu::ItemInstance::IsDroppable(bool recurse) const +bool EQ::ItemInstance::IsDroppable(bool recurse) const { if (!m_item) return false; @@ -838,7 +838,7 @@ bool EQEmu::ItemInstance::IsDroppable(bool recurse) const return true; } -void EQEmu::ItemInstance::Initialize(SharedDatabase *db) { +void EQ::ItemInstance::Initialize(SharedDatabase *db) { // if there's no actual item, don't do anything if (!m_item) return; @@ -855,7 +855,7 @@ void EQEmu::ItemInstance::Initialize(SharedDatabase *db) { } } -void EQEmu::ItemInstance::ScaleItem() { +void EQ::ItemInstance::ScaleItem() { if (!m_item) return; @@ -939,18 +939,18 @@ void EQEmu::ItemInstance::ScaleItem() { m_scaledItem->CharmFileID = 0; // this stops the client from trying to scale the item itself. } -bool EQEmu::ItemInstance::EvolveOnAllKills() const { +bool EQ::ItemInstance::EvolveOnAllKills() const { return (m_evolveInfo && m_evolveInfo->AllKills); } -int8 EQEmu::ItemInstance::GetMaxEvolveLvl() const { +int8 EQ::ItemInstance::GetMaxEvolveLvl() const { if (m_evolveInfo) return m_evolveInfo->MaxLvl; else return 0; } -uint32 EQEmu::ItemInstance::GetKillsNeeded(uint8 currentlevel) { +uint32 EQ::ItemInstance::GetKillsNeeded(uint8 currentlevel) { uint32 kills = -1; // default to -1 (max uint32 value) because this value is usually divided by, so we don't want to ever return zero. if (m_evolveInfo) if (currentlevel != m_evolveInfo->MaxLvl) @@ -962,24 +962,24 @@ uint32 EQEmu::ItemInstance::GetKillsNeeded(uint8 currentlevel) { return kills; } -void EQEmu::ItemInstance::SetTimer(std::string name, uint32 time) { +void EQ::ItemInstance::SetTimer(std::string name, uint32 time) { Timer t(time); t.Start(time, false); m_timers[name] = t; } -void EQEmu::ItemInstance::StopTimer(std::string name) { +void EQ::ItemInstance::StopTimer(std::string name) { auto iter = m_timers.find(name); if(iter != m_timers.end()) { m_timers.erase(iter); } } -void EQEmu::ItemInstance::ClearTimers() { +void EQ::ItemInstance::ClearTimers() { m_timers.clear(); } -int EQEmu::ItemInstance::GetItemArmorClass(bool augments) const +int EQ::ItemInstance::GetItemArmorClass(bool augments) const { int ac = 0; const auto item = GetItem(); @@ -993,7 +993,7 @@ int EQEmu::ItemInstance::GetItemArmorClass(bool augments) const return ac; } -int EQEmu::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments) const +int EQ::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments) const { const auto item = GetItem(); if (item) { @@ -1035,7 +1035,7 @@ int EQEmu::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold return magic + fire + cold + poison + disease + chromatic + prismatic + physical + corruption; } -int EQEmu::ItemInstance::GetItemElementalFlag(bool augments) const +int EQ::ItemInstance::GetItemElementalFlag(bool augments) const { int flag = 0; const auto item = GetItem(); @@ -1056,7 +1056,7 @@ int EQEmu::ItemInstance::GetItemElementalFlag(bool augments) const return flag; } -int EQEmu::ItemInstance::GetItemElementalDamage(bool augments) const +int EQ::ItemInstance::GetItemElementalDamage(bool augments) const { int damage = 0; const auto item = GetItem(); @@ -1077,7 +1077,7 @@ int EQEmu::ItemInstance::GetItemElementalDamage(bool augments) const return damage; } -int EQEmu::ItemInstance::GetItemRecommendedLevel(bool augments) const +int EQ::ItemInstance::GetItemRecommendedLevel(bool augments) const { int level = 0; const auto item = GetItem(); @@ -1099,7 +1099,7 @@ int EQEmu::ItemInstance::GetItemRecommendedLevel(bool augments) const return level; } -int EQEmu::ItemInstance::GetItemRequiredLevel(bool augments) const +int EQ::ItemInstance::GetItemRequiredLevel(bool augments) const { int level = 0; const auto item = GetItem(); @@ -1121,7 +1121,7 @@ int EQEmu::ItemInstance::GetItemRequiredLevel(bool augments) const return level; } -int EQEmu::ItemInstance::GetItemWeaponDamage(bool augments) const +int EQ::ItemInstance::GetItemWeaponDamage(bool augments) const { int damage = 0; const auto item = GetItem(); @@ -1137,7 +1137,7 @@ int EQEmu::ItemInstance::GetItemWeaponDamage(bool augments) const return damage; } -int EQEmu::ItemInstance::GetItemBackstabDamage(bool augments) const +int EQ::ItemInstance::GetItemBackstabDamage(bool augments) const { int damage = 0; const auto item = GetItem(); @@ -1153,7 +1153,7 @@ int EQEmu::ItemInstance::GetItemBackstabDamage(bool augments) const return damage; } -int EQEmu::ItemInstance::GetItemBaneDamageBody(bool augments) const +int EQ::ItemInstance::GetItemBaneDamageBody(bool augments) const { int body = 0; const auto item = GetItem(); @@ -1174,7 +1174,7 @@ int EQEmu::ItemInstance::GetItemBaneDamageBody(bool augments) const return body; } -int EQEmu::ItemInstance::GetItemBaneDamageRace(bool augments) const +int EQ::ItemInstance::GetItemBaneDamageRace(bool augments) const { int race = 0; const auto item = GetItem(); @@ -1195,7 +1195,7 @@ int EQEmu::ItemInstance::GetItemBaneDamageRace(bool augments) const return race; } -int EQEmu::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) const +int EQ::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) const { int damage = 0; const auto item = GetItem(); @@ -1212,7 +1212,7 @@ int EQEmu::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) return damage; } -int EQEmu::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) const +int EQ::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) const { int damage = 0; const auto item = GetItem(); @@ -1229,7 +1229,7 @@ int EQEmu::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) co return damage; } -int EQEmu::ItemInstance::GetItemMagical(bool augments) const +int EQ::ItemInstance::GetItemMagical(bool augments) const { const auto item = GetItem(); if (item) { @@ -1245,7 +1245,7 @@ int EQEmu::ItemInstance::GetItemMagical(bool augments) const return 0; } -int EQEmu::ItemInstance::GetItemHP(bool augments) const +int EQ::ItemInstance::GetItemHP(bool augments) const { int hp = 0; const auto item = GetItem(); @@ -1259,7 +1259,7 @@ int EQEmu::ItemInstance::GetItemHP(bool augments) const return hp; } -int EQEmu::ItemInstance::GetItemMana(bool augments) const +int EQ::ItemInstance::GetItemMana(bool augments) const { int mana = 0; const auto item = GetItem(); @@ -1273,7 +1273,7 @@ int EQEmu::ItemInstance::GetItemMana(bool augments) const return mana; } -int EQEmu::ItemInstance::GetItemEndur(bool augments) const +int EQ::ItemInstance::GetItemEndur(bool augments) const { int endur = 0; const auto item = GetItem(); @@ -1287,7 +1287,7 @@ int EQEmu::ItemInstance::GetItemEndur(bool augments) const return endur; } -int EQEmu::ItemInstance::GetItemAttack(bool augments) const +int EQ::ItemInstance::GetItemAttack(bool augments) const { int atk = 0; const auto item = GetItem(); @@ -1301,7 +1301,7 @@ int EQEmu::ItemInstance::GetItemAttack(bool augments) const return atk; } -int EQEmu::ItemInstance::GetItemStr(bool augments) const +int EQ::ItemInstance::GetItemStr(bool augments) const { int str = 0; const auto item = GetItem(); @@ -1315,7 +1315,7 @@ int EQEmu::ItemInstance::GetItemStr(bool augments) const return str; } -int EQEmu::ItemInstance::GetItemSta(bool augments) const +int EQ::ItemInstance::GetItemSta(bool augments) const { int sta = 0; const auto item = GetItem(); @@ -1329,7 +1329,7 @@ int EQEmu::ItemInstance::GetItemSta(bool augments) const return sta; } -int EQEmu::ItemInstance::GetItemDex(bool augments) const +int EQ::ItemInstance::GetItemDex(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1343,7 +1343,7 @@ int EQEmu::ItemInstance::GetItemDex(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemAgi(bool augments) const +int EQ::ItemInstance::GetItemAgi(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1357,7 +1357,7 @@ int EQEmu::ItemInstance::GetItemAgi(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemInt(bool augments) const +int EQ::ItemInstance::GetItemInt(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1371,7 +1371,7 @@ int EQEmu::ItemInstance::GetItemInt(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemWis(bool augments) const +int EQ::ItemInstance::GetItemWis(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1385,7 +1385,7 @@ int EQEmu::ItemInstance::GetItemWis(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemCha(bool augments) const +int EQ::ItemInstance::GetItemCha(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1399,7 +1399,7 @@ int EQEmu::ItemInstance::GetItemCha(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemMR(bool augments) const +int EQ::ItemInstance::GetItemMR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1413,7 +1413,7 @@ int EQEmu::ItemInstance::GetItemMR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemFR(bool augments) const +int EQ::ItemInstance::GetItemFR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1427,7 +1427,7 @@ int EQEmu::ItemInstance::GetItemFR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemCR(bool augments) const +int EQ::ItemInstance::GetItemCR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1441,7 +1441,7 @@ int EQEmu::ItemInstance::GetItemCR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemPR(bool augments) const +int EQ::ItemInstance::GetItemPR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1455,7 +1455,7 @@ int EQEmu::ItemInstance::GetItemPR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemDR(bool augments) const +int EQ::ItemInstance::GetItemDR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1469,7 +1469,7 @@ int EQEmu::ItemInstance::GetItemDR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemCorrup(bool augments) const +int EQ::ItemInstance::GetItemCorrup(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1483,7 +1483,7 @@ int EQEmu::ItemInstance::GetItemCorrup(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicStr(bool augments) const +int EQ::ItemInstance::GetItemHeroicStr(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1497,7 +1497,7 @@ int EQEmu::ItemInstance::GetItemHeroicStr(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicSta(bool augments) const +int EQ::ItemInstance::GetItemHeroicSta(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1511,7 +1511,7 @@ int EQEmu::ItemInstance::GetItemHeroicSta(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicDex(bool augments) const +int EQ::ItemInstance::GetItemHeroicDex(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1525,7 +1525,7 @@ int EQEmu::ItemInstance::GetItemHeroicDex(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicAgi(bool augments) const +int EQ::ItemInstance::GetItemHeroicAgi(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1539,7 +1539,7 @@ int EQEmu::ItemInstance::GetItemHeroicAgi(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicInt(bool augments) const +int EQ::ItemInstance::GetItemHeroicInt(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1553,7 +1553,7 @@ int EQEmu::ItemInstance::GetItemHeroicInt(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicWis(bool augments) const +int EQ::ItemInstance::GetItemHeroicWis(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1567,7 +1567,7 @@ int EQEmu::ItemInstance::GetItemHeroicWis(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicCha(bool augments) const +int EQ::ItemInstance::GetItemHeroicCha(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1581,7 +1581,7 @@ int EQEmu::ItemInstance::GetItemHeroicCha(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicMR(bool augments) const +int EQ::ItemInstance::GetItemHeroicMR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1595,7 +1595,7 @@ int EQEmu::ItemInstance::GetItemHeroicMR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicFR(bool augments) const +int EQ::ItemInstance::GetItemHeroicFR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1609,7 +1609,7 @@ int EQEmu::ItemInstance::GetItemHeroicFR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicCR(bool augments) const +int EQ::ItemInstance::GetItemHeroicCR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1623,7 +1623,7 @@ int EQEmu::ItemInstance::GetItemHeroicCR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicPR(bool augments) const +int EQ::ItemInstance::GetItemHeroicPR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1637,7 +1637,7 @@ int EQEmu::ItemInstance::GetItemHeroicPR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicDR(bool augments) const +int EQ::ItemInstance::GetItemHeroicDR(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1651,7 +1651,7 @@ int EQEmu::ItemInstance::GetItemHeroicDR(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHeroicCorrup(bool augments) const +int EQ::ItemInstance::GetItemHeroicCorrup(bool augments) const { int total = 0; const auto item = GetItem(); @@ -1665,7 +1665,7 @@ int EQEmu::ItemInstance::GetItemHeroicCorrup(bool augments) const return total; } -int EQEmu::ItemInstance::GetItemHaste(bool augments) const +int EQ::ItemInstance::GetItemHaste(bool augments) const { int total = 0; const auto item = GetItem(); diff --git a/common/item_instance.h b/common/item_instance.h index d38ad0868..263bf676d 100644 --- a/common/item_instance.h +++ b/common/item_instance.h @@ -38,7 +38,7 @@ class EvolveInfo; // Stores information about an evolving item family #include -// Specifies usage type for item inside EQEmu::ItemInstance +// Specifies usage type for item inside EQ::ItemInstance enum ItemInstTypes { ItemInstNormal = 0, @@ -54,11 +54,11 @@ typedef enum { class SharedDatabase; // ######################################## -// Class: EQEmu::ItemInstance +// Class: EQ::ItemInstance // Base class for an instance of an item // An item instance encapsulates item data + data specific // to an item instance (includes dye, augments, charges, etc) -namespace EQEmu +namespace EQ { class InventoryProfile; @@ -222,7 +222,7 @@ namespace EQEmu inline int32 GetSerialNumber() const { return m_SerialNumber; } inline void SetSerialNumber(int32 id) { m_SerialNumber = id; } - std::map& GetTimers() { return m_timers; } + std::map& GetTimers() { return m_timers; } void SetTimer(std::string name, uint32 time); void StopTimer(std::string name); void ClearTimers(); @@ -316,13 +316,13 @@ namespace EQEmu // Items inside of this item (augs or contents); std::map m_contents; // Zero-based index: min=0, max=9 std::map m_custom_data; - std::map m_timers; + std::map m_timers; }; } class EvolveInfo { public: - friend class EQEmu::ItemInstance; + friend class EQ::ItemInstance; //temporary uint16 LvlKills[9]; uint32 FirstItem; diff --git a/common/light_source.cpp b/common/light_source.cpp index 476f315b8..7aeb4d166 100644 --- a/common/light_source.cpp +++ b/common/light_source.cpp @@ -22,7 +22,7 @@ #include -uint8 EQEmu::lightsource::TypeToLevel(uint8 light_type) +uint8 EQ::lightsource::TypeToLevel(uint8 light_type) { switch (light_type) { case LightTypeGlobeOfStars: @@ -55,7 +55,7 @@ uint8 EQEmu::lightsource::TypeToLevel(uint8 light_type) } } -bool EQEmu::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type) +bool EQ::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type) { static const uint8 light_levels[LightTypeCount] = { LightLevelUnlit, /* LightTypeNone */ @@ -82,17 +82,17 @@ bool EQEmu::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type) return (light_levels[left_type] > light_levels[right_type]); } -EQEmu::LightSource_Struct::LightSource_Struct() +EQ::LightSource_Struct::LightSource_Struct() { Clear(); } -void EQEmu::LightSource_Struct::Clear() +void EQ::LightSource_Struct::Clear() { memset(&Slot, 0, (sizeof(uint8) * lightsource::LightCount)); } -void EQEmu::LightSourceProfile::Clear() +void EQ::LightSourceProfile::Clear() { Type.Clear(); Level.Clear(); diff --git a/common/light_source.h b/common/light_source.h index a77049e4f..f68f7fe87 100644 --- a/common/light_source.h +++ b/common/light_source.h @@ -23,7 +23,7 @@ #include "types.h" -namespace EQEmu +namespace EQ { namespace lightsource { enum LightSlot { diff --git a/common/memory_buffer.cpp b/common/memory_buffer.cpp index 898851cb3..9cebd5ff2 100644 --- a/common/memory_buffer.cpp +++ b/common/memory_buffer.cpp @@ -20,7 +20,7 @@ #include "memory_buffer.h" -EQEmu::MemoryBuffer::MemoryBuffer() +EQ::MemoryBuffer::MemoryBuffer() { buffer_ = nullptr; size_ = 0; @@ -29,7 +29,7 @@ EQEmu::MemoryBuffer::MemoryBuffer() write_pos_ = 0; } -EQEmu::MemoryBuffer::MemoryBuffer(size_t sz) +EQ::MemoryBuffer::MemoryBuffer(size_t sz) { buffer_ = nullptr; size_ = 0; @@ -39,7 +39,7 @@ EQEmu::MemoryBuffer::MemoryBuffer(size_t sz) Resize(sz); } -EQEmu::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other) +EQ::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other) { if(other.capacity_) { buffer_ = new uchar[other.capacity_]; @@ -54,7 +54,7 @@ EQEmu::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other) read_pos_ = other.read_pos_; } -EQEmu::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other) +EQ::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other) { uchar *tbuf = other.buffer_; size_t tsz = other.size_; @@ -75,7 +75,7 @@ EQEmu::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other) read_pos_ = tread_pos; } -EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(const MemoryBuffer &other) +EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(const MemoryBuffer &other) { if(this == &other) { return *this; @@ -100,7 +100,7 @@ EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(const MemoryBuffer &other) return *this; } -EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(MemoryBuffer &&other) +EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(MemoryBuffer &&other) { uchar *tbuf = other.buffer_; size_t tsz = other.size_; @@ -122,7 +122,7 @@ EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(MemoryBuffer &&other) return *this; } -EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator+=(const MemoryBuffer &rhs) +EQ::MemoryBuffer& EQ::MemoryBuffer::operator+=(const MemoryBuffer &rhs) { if(!rhs.buffer_) { return *this; @@ -142,52 +142,52 @@ EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator+=(const MemoryBuffer &rhs) return *this; } -EQEmu::MemoryBuffer::~MemoryBuffer() +EQ::MemoryBuffer::~MemoryBuffer() { Clear(); } -uchar& EQEmu::MemoryBuffer::operator[](size_t pos) +uchar& EQ::MemoryBuffer::operator[](size_t pos) { return buffer_[pos]; } -const uchar& EQEmu::MemoryBuffer::operator[](size_t pos) const +const uchar& EQ::MemoryBuffer::operator[](size_t pos) const { return buffer_[pos]; } -bool EQEmu::MemoryBuffer::Empty() +bool EQ::MemoryBuffer::Empty() { return size_ == 0; } -bool EQEmu::MemoryBuffer::Empty() const +bool EQ::MemoryBuffer::Empty() const { return size_ == 0; } -size_t EQEmu::MemoryBuffer::Size() +size_t EQ::MemoryBuffer::Size() { return size_; } -size_t EQEmu::MemoryBuffer::Size() const +size_t EQ::MemoryBuffer::Size() const { return size_; } -size_t EQEmu::MemoryBuffer::Capacity() +size_t EQ::MemoryBuffer::Capacity() { return capacity_; } -size_t EQEmu::MemoryBuffer::Capacity() const +size_t EQ::MemoryBuffer::Capacity() const { return capacity_; } -void EQEmu::MemoryBuffer::Resize(size_t sz) +void EQ::MemoryBuffer::Resize(size_t sz) { if(!buffer_) { size_t new_size = sz + 64; @@ -213,7 +213,7 @@ void EQEmu::MemoryBuffer::Resize(size_t sz) } } -void EQEmu::MemoryBuffer::Clear() +void EQ::MemoryBuffer::Clear() { if(buffer_) { delete[] buffer_; @@ -226,14 +226,14 @@ void EQEmu::MemoryBuffer::Clear() read_pos_ = 0; } -void EQEmu::MemoryBuffer::Zero() +void EQ::MemoryBuffer::Zero() { if(buffer_) { memset(buffer_, 0, capacity_); } } -void EQEmu::MemoryBuffer::Write(const char *val, size_t len) +void EQ::MemoryBuffer::Write(const char *val, size_t len) { size_t size_needed = write_pos_ + len; Resize(size_needed); @@ -242,20 +242,20 @@ void EQEmu::MemoryBuffer::Write(const char *val, size_t len) write_pos_ += len; } -void EQEmu::MemoryBuffer::Read(uchar *buf, size_t len) +void EQ::MemoryBuffer::Read(uchar *buf, size_t len) { memcpy(buf, &buffer_[read_pos_], len); read_pos_ += len; } -void EQEmu::MemoryBuffer::Read(char *str) +void EQ::MemoryBuffer::Read(char *str) { size_t len = strlen((const char*)&buffer_[read_pos_]); memcpy(str, &buffer_[read_pos_], len); read_pos_ += len; } -void EQEmu::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, std::streamsize _Count) +void EQ::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, std::streamsize _Count) { auto last_pos = tellp(); seekp(position); @@ -263,7 +263,7 @@ void EQEmu::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, seekp(last_pos); } -uchar* EQEmu::OutBuffer::detach() +uchar* EQ::OutBuffer::detach() { size_t buffer_size = tellp(); if (buffer_size == 0) diff --git a/common/memory_buffer.h b/common/memory_buffer.h index 474953f91..b1019a232 100644 --- a/common/memory_buffer.h +++ b/common/memory_buffer.h @@ -28,7 +28,7 @@ #include -namespace EQEmu +namespace EQ { class MemoryBuffer { public: diff --git a/common/memory_mapped_file.cpp b/common/memory_mapped_file.cpp index b8b5e2a4b..a11b3c5db 100644 --- a/common/memory_mapped_file.cpp +++ b/common/memory_mapped_file.cpp @@ -33,7 +33,7 @@ #include #endif -namespace EQEmu { +namespace EQ { struct MemoryMappedFile::Implementation { #ifdef _WINDOWS diff --git a/common/memory_mapped_file.h b/common/memory_mapped_file.h index cc4ed700d..d3e832cef 100644 --- a/common/memory_mapped_file.h +++ b/common/memory_mapped_file.h @@ -22,7 +22,7 @@ #include #include "types.h" -namespace EQEmu { +namespace EQ { //! Memory Backed Shared Memory /*! diff --git a/common/net/daybreak_connection.cpp b/common/net/daybreak_connection.cpp index 693a47bf1..125a240dd 100644 --- a/common/net/daybreak_connection.cpp +++ b/common/net/daybreak_connection.cpp @@ -1103,7 +1103,7 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream) InternalBufferedSend(p); entry.second.last_sent = now; entry.second.times_resent++; - entry.second.resend_delay = EQEmu::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); + entry.second.resend_delay = EQ::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); resends++; } } @@ -1132,7 +1132,7 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream) InternalBufferedSend(p); entry.second.last_sent = now; entry.second.times_resent++; - entry.second.resend_delay = EQEmu::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); + entry.second.resend_delay = EQ::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); resends++; } } @@ -1184,7 +1184,7 @@ void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq) void EQ::Net::DaybreakConnection::UpdateDataBudget(double budget_add) { auto outgoing_data_rate = m_owner->m_options.outgoing_data_rate; - m_outgoing_budget = EQEmu::ClampUpper(m_outgoing_budget + budget_add, outgoing_data_rate); + m_outgoing_budget = EQ::ClampUpper(m_outgoing_budget + budget_add, outgoing_data_rate); } void EQ::Net::DaybreakConnection::SendAck(int stream_id, uint16_t seq) @@ -1405,7 +1405,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, sent.last_sent = Clock::now(); sent.first_sent = Clock::now(); sent.times_resent = 0; - sent.resend_delay = EQEmu::Clamp( + sent.resend_delay = EQ::Clamp( static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); @@ -1437,7 +1437,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, sent.last_sent = Clock::now(); sent.first_sent = Clock::now(); sent.times_resent = 0; - sent.resend_delay = EQEmu::Clamp( + sent.resend_delay = EQ::Clamp( static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); @@ -1461,7 +1461,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id, sent.last_sent = Clock::now(); sent.first_sent = Clock::now(); sent.times_resent = 0; - sent.resend_delay = EQEmu::Clamp( + sent.resend_delay = EQ::Clamp( static_cast((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms), m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max); diff --git a/common/net/daybreak_connection.h b/common/net/daybreak_connection.h index 883ecefac..c2c714813 100644 --- a/common/net/daybreak_connection.h +++ b/common/net/daybreak_connection.h @@ -318,7 +318,7 @@ namespace EQ void Attach(uv_loop_t *loop); void Detach(); - EQEmu::Random m_rand; + EQ::Random m_rand; uv_timer_t m_timer; uv_udp_t m_socket; uv_loop_t *m_attached; diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index dfb0f23a5..c9e80a0f1 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -45,7 +45,7 @@ namespace RoF static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type); // server to client inventory location converters static inline structs::InventorySlot_Struct ServerToRoFSlot(uint32 server_slot); @@ -65,8 +65,8 @@ namespace RoF // client to server say link converter static inline void RoFToServerSayLink(std::string& serverSayLink, const std::string& rofSayLink); - static inline spells::CastingSlot ServerToRoFCastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot RoFToServerCastingSlot(spells::CastingSlot slot); + static inline spells::CastingSlot ServerToRoFCastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot RoFToServerCastingSlot(spells::CastingSlot slot); static inline int ServerToRoFBuffSlot(int index); static inline int RoFToServerBuffSlot(int index); @@ -147,9 +147,9 @@ namespace RoF return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::RoF; + return EQ::versions::ClientVersion::RoF; } #include "ss_define.h" @@ -193,7 +193,7 @@ namespace RoF eq->unknown000 = 1; OUT(npcid); - eq->inventory_slot = ServerToRoFTypelessSlot(emu->slot, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoFTypelessSlot(emu->slot, EQ::invtype::typePossessions); OUT(charges); OUT(sell_price); @@ -246,7 +246,7 @@ namespace RoF SETUP_DIRECT_ENCODE(AltCurrencySellItem_Struct, structs::AltCurrencySellItem_Struct); OUT(merchant_entity_id); - eq->inventory_slot = ServerToRoFTypelessSlot(emu->slot_id, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoFTypelessSlot(emu->slot_id, EQ::invtype::typePossessions); OUT(charges); OUT(cost); @@ -270,7 +270,7 @@ namespace RoF ENCODE_LENGTH_EXACT(ApplyPoison_Struct); SETUP_DIRECT_ENCODE(ApplyPoison_Struct, structs::ApplyPoison_Struct); - eq->inventory_slot = ServerToRoFTypelessSlot(emu->inventorySlot, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoFTypelessSlot(emu->inventorySlot, EQ::invtype::typePossessions); OUT(success); FINISH_ENCODE(); @@ -502,7 +502,7 @@ namespace RoF ENCODE_LENGTH_EXACT(CastSpell_Struct); SETUP_DIRECT_ENCODE(CastSpell_Struct, structs::CastSpell_Struct); - eq->slot = static_cast(ServerToRoFCastingSlot(static_cast(emu->slot))); + eq->slot = static_cast(ServerToRoFCastingSlot(static_cast(emu->slot))); OUT(spell_id); eq->inventory_slot = ServerToRoFSlot(emu->inventoryslot); @@ -570,24 +570,24 @@ namespace RoF //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)&item_count, sizeof(uint32)); for (int index = 0; index < item_count; ++index, ++eq) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory); if (ob.tellp() == last_pos) LogNetcode("RoF::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -1513,14 +1513,14 @@ namespace RoF uchar* __emu_buffer = in->pBuffer; ItemPacket_Struct* old_item_pkt = (ItemPacket_Struct*)__emu_buffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType); if (ob.tellp() == last_pos) { LogNetcode("RoF::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -1957,7 +1957,7 @@ namespace RoF outapp->WriteUInt32(22); // Equipment count - for (int r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) + for (int r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { outapp->WriteUInt32(emu->item_material.Slot[r].Material); outapp->WriteUInt32(0); @@ -1977,9 +1977,9 @@ namespace RoF outapp->WriteUInt32(0); } - outapp->WriteUInt32(EQEmu::textures::materialCount); // Equipment2 count + outapp->WriteUInt32(EQ::textures::materialCount); // Equipment2 count - for (int r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) + for (int r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { outapp->WriteUInt32(0); outapp->WriteUInt32(0); @@ -1988,7 +1988,7 @@ namespace RoF outapp->WriteUInt32(0); } - outapp->WriteUInt32(EQEmu::textures::materialCount); // Tint Count + outapp->WriteUInt32(EQ::textures::materialCount); // Tint Count for (int r = 0; r < 7; r++) { @@ -1998,7 +1998,7 @@ namespace RoF outapp->WriteUInt32(0); outapp->WriteUInt32(0); - outapp->WriteUInt32(EQEmu::textures::materialCount); // Tint2 Count + outapp->WriteUInt32(EQ::textures::materialCount); // Tint2 Count for (int r = 0; r < 7; r++) { @@ -2127,7 +2127,7 @@ namespace RoF outapp->WriteUInt32(spells::SPELLBOOK_SIZE); // Spellbook slots - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) outapp->WriteUInt32(emu->spell_book[r]); @@ -2136,33 +2136,33 @@ namespace RoF } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) outapp->WriteUInt32(emu->spell_book[r]); else outapp->WriteUInt32(0xFFFFFFFFU); } // invalidate the rest of the spellbook slots - for (uint32 r = EQEmu::spells::SPELLBOOK_SIZE; r < spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = EQ::spells::SPELLBOOK_SIZE; r < spells::SPELLBOOK_SIZE; r++) { outapp->WriteUInt32(0xFFFFFFFFU); } } outapp->WriteUInt32(spells::SPELL_GEM_COUNT); // Memorised spell slots - for (uint32 r = 0; r < EQEmu::spells::SPELL_GEM_COUNT; r++) // first 12 + for (uint32 r = 0; r < EQ::spells::SPELL_GEM_COUNT; r++) // first 12 { outapp->WriteUInt32(emu->mem_spells[r]); } // zeroes for the rest of the slots -- the other 4 which don't work at all! - for (uint32 r = 0; r < spells::SPELL_GEM_COUNT - EQEmu::spells::SPELL_GEM_COUNT; r++) + for (uint32 r = 0; r < spells::SPELL_GEM_COUNT - EQ::spells::SPELL_GEM_COUNT; r++) { outapp->WriteUInt32(0xFFFFFFFFU); } outapp->WriteUInt32(13); // gem refresh count - for (uint32 r = 0; r < EQEmu::spells::SPELL_GEM_COUNT; r++) + for (uint32 r = 0; r < EQ::spells::SPELL_GEM_COUNT; r++) { outapp->WriteUInt32(emu->spellSlotRefresh[r]); // spell gem refresh } @@ -2251,7 +2251,7 @@ namespace RoF outapp->WriteUInt32(profile::BANDOLIERS_SIZE); // Copy bandoliers where server and client indices converge - for (uint32 r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (uint32 r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { outapp->WriteString(emu->bandoliers[r].Name); for (uint32 j = 0; j < profile::BANDOLIER_ITEM_COUNT; ++j) { // Will need adjusting if 'server != client' is ever true outapp->WriteString(emu->bandoliers[r].Items[j].Name); @@ -2266,7 +2266,7 @@ namespace RoF } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (uint32 r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (uint32 r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { outapp->WriteString(""); for (uint32 j = 0; j < profile::BANDOLIER_ITEM_COUNT; ++j) { // Will need adjusting if 'server != client' is ever true outapp->WriteString(""); @@ -2278,7 +2278,7 @@ namespace RoF outapp->WriteUInt32(profile::POTION_BELT_SIZE); // Copy potion belt where server and client indices converge - for (uint32 r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (uint32 r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { outapp->WriteString(emu->potionbelt.Items[r].Name); outapp->WriteUInt32(emu->potionbelt.Items[r].ID); if (emu->potionbelt.Items[r].Icon) { @@ -2290,7 +2290,7 @@ namespace RoF } } // Nullify potion belt where server and client indices diverge, with a client bias - for (uint32 r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (uint32 r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { outapp->WriteString(""); outapp->WriteUInt32(0); outapp->WriteSInt32(-1); @@ -2412,9 +2412,9 @@ namespace RoF outapp->WriteUInt8(0); // Unknown outapp->WriteUInt8(0); // Unknown - outapp->WriteUInt32(EQEmu::invtype::TRIBUTE_SIZE); + outapp->WriteUInt32(EQ::invtype::TRIBUTE_SIZE); - for (uint32 r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) + for (uint32 r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { outapp->WriteUInt32(emu->tributes[r].tribute); outapp->WriteUInt32(emu->tributes[r].tier); @@ -2949,7 +2949,7 @@ namespace RoF eq_cse->Gender = emu_cse->Gender; eq_cse->Face = emu_cse->Face; - for (int equip_index = 0; equip_index < EQEmu::textures::materialCount; equip_index++) { + for (int equip_index = 0; equip_index < EQ::textures::materialCount; equip_index++) { eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; @@ -3066,7 +3066,7 @@ namespace RoF SETUP_DIRECT_ENCODE(Merchant_Purchase_Struct, structs::Merchant_Purchase_Struct); OUT(npcid); - eq->inventory_slot = ServerToRoFTypelessSlot(emu->itemslot, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoFTypelessSlot(emu->itemslot, EQ::invtype::typePossessions); //OUT(itemslot); OUT(quantity); OUT(price); @@ -3980,7 +3980,7 @@ namespace RoF if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; ++k) + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) { { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment_tint.Slot[k].Color); @@ -3989,7 +3989,7 @@ namespace RoF structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { Equipment[k].Material = emu->equipment.Slot[k].Material; Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteModel; @@ -3997,7 +3997,7 @@ namespace RoF Equipment[k].Material2 = emu->equipment.Slot[k].Unknown2; } - Buffer += (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + Buffer += (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); } else { @@ -4714,7 +4714,7 @@ namespace RoF IN(item_id); int r; - for (r = EQEmu::invaug::SOCKET_BEGIN; r <= EQEmu::invaug::SOCKET_END; r++) { + for (r = EQ::invaug::SOCKET_BEGIN; r <= EQ::invaug::SOCKET_END; r++) { IN(augments[r]); } IN(link_hash); @@ -4739,7 +4739,7 @@ namespace RoF DECODE_LENGTH_EXACT(structs::LoadSpellSet_Struct); SETUP_DIRECT_DECODE(LoadSpellSet_Struct, structs::LoadSpellSet_Struct); - for (unsigned int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (unsigned int i = 0; i < EQ::spells::SPELL_GEM_COUNT; ++i) { if (eq->spell[i] == 0) emu->spell[i] = 0xFFFFFFFF; @@ -5091,9 +5091,9 @@ namespace RoF return NextItemInstSerialNumber; } - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type) + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type) { - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); RoF::structs::ItemSerializationHeader hdr; @@ -5156,7 +5156,7 @@ namespace RoF uint32 hero_model = 0; if (inst->GetOrnamentationIDFile()) { - hero_model = inst->GetOrnamentHeroModel(EQEmu::InventoryProfile::CalcMaterialFromSlot(slot_id_in)); + hero_model = inst->GetOrnamentHeroModel(EQ::InventoryProfile::CalcMaterialFromSlot(slot_id_in)); char tmp[30]; memset(tmp, 0x0, 30); @@ -5358,7 +5358,7 @@ namespace RoF // Done to hack older clients to label expendable fishing poles as such // July 28th, 2018 patch - if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) { itbs.expendablearrow = 1; } @@ -5517,28 +5517,28 @@ namespace RoF ob.write((const char*)&iqbs, sizeof(RoF::structs::ItemQuaternaryBodyStruct)); - EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); + EQ::OutBuffer::pos_type count_pos = ob.tellp(); uint32 subitem_count = 0; ob.write((const char*)&subitem_count, sizeof(uint32)); // moved outside of loop since it is not modified within that scope - int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID; + int16 SubSlotNumber = EQ::invbag::SLOT_INVALID; - if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN) - SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in == EQEmu::invslot::slotCursor) - SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); + if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::GENERAL_BEGIN) + SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in == EQ::invslot::slotCursor) + SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN; + else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN) + SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN) + SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT); else SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now - if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) { - for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { - EQEmu::ItemInstance* sub = inst->GetItem(index); + if (SubSlotNumber != EQ::invbag::SLOT_INVALID) { + for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { + EQ::ItemInstance* sub = inst->GetItem(index); if (!sub) continue; @@ -5564,77 +5564,77 @@ namespace RoF RoFSlot.AugIndex = invaug::SOCKET_INVALID; RoFSlot.Unknown01 = INULL; - uint32 temp_slot = (uint32) EQEmu::invslot::SLOT_INVALID; + uint32 temp_slot = (uint32) EQ::invslot::SLOT_INVALID; - if (server_slot < EQEmu::invtype::POSSESSIONS_SIZE) { + if (server_slot < EQ::invtype::POSSESSIONS_SIZE) { RoFSlot.Type = invtype::typePossessions; RoFSlot.Slot = server_slot; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - temp_slot = server_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + temp_slot = server_slot - EQ::invbag::GENERAL_BAGS_BEGIN; RoFSlot.Type = invtype::typePossessions; - RoFSlot.Slot = invslot::GENERAL_BEGIN + (temp_slot / EQEmu::invbag::SLOT_COUNT); - RoFSlot.SubIndex = temp_slot - ((RoFSlot.Slot - invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); + RoFSlot.Slot = invslot::GENERAL_BEGIN + (temp_slot / EQ::invbag::SLOT_COUNT); + RoFSlot.SubIndex = temp_slot - ((RoFSlot.Slot - invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::TRIBUTE_END && server_slot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) { RoFSlot.Type = invtype::typeTribute; - RoFSlot.Slot = server_slot - EQEmu::invslot::TRIBUTE_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::TRIBUTE_BEGIN; } - else if (server_slot <= EQEmu::invslot::GUILD_TRIBUTE_END && server_slot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::GUILD_TRIBUTE_END && server_slot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { RoFSlot.Type = invtype::typeGuildTribute; - RoFSlot.Slot = server_slot - EQEmu::invslot::GUILD_TRIBUTE_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::GUILD_TRIBUTE_BEGIN; } - else if (server_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (server_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { RoFSlot.Type = invtype::typeWorld; } - else if (server_slot <= EQEmu::invslot::BANK_END && server_slot >= EQEmu::invslot::BANK_BEGIN) { + else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) { RoFSlot.Type = invtype::typeBank; - RoFSlot.Slot = server_slot - EQEmu::invslot::BANK_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::BANK_BEGIN; } - else if (server_slot <= EQEmu::invbag::BANK_BAGS_END && server_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { - temp_slot = server_slot - EQEmu::invbag::BANK_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) { + temp_slot = server_slot - EQ::invbag::BANK_BAGS_BEGIN; RoFSlot.Type = invtype::typeBank; - RoFSlot.Slot = temp_slot / EQEmu::invbag::SLOT_COUNT; - RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQEmu::invbag::SLOT_COUNT); + RoFSlot.Slot = temp_slot / EQ::invbag::SLOT_COUNT; + RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::SHARED_BANK_END && server_slot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) { RoFSlot.Type = invtype::typeSharedBank; - RoFSlot.Slot = server_slot - EQEmu::invslot::SHARED_BANK_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::SHARED_BANK_BEGIN; } - else if (server_slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && server_slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { - temp_slot = server_slot - EQEmu::invbag::SHARED_BANK_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { + temp_slot = server_slot - EQ::invbag::SHARED_BANK_BAGS_BEGIN; RoFSlot.Type = invtype::typeSharedBank; - RoFSlot.Slot = temp_slot / EQEmu::invbag::SLOT_COUNT; - RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQEmu::invbag::SLOT_COUNT); + RoFSlot.Slot = temp_slot / EQ::invbag::SLOT_COUNT; + RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::TRADE_END && server_slot >= EQEmu::invslot::TRADE_BEGIN) { + else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) { RoFSlot.Type = invtype::typeTrade; - RoFSlot.Slot = server_slot - EQEmu::invslot::TRADE_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::TRADE_BEGIN; } - else if (server_slot <= EQEmu::invbag::TRADE_BAGS_END && server_slot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { - temp_slot = server_slot - EQEmu::invbag::TRADE_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) { + temp_slot = server_slot - EQ::invbag::TRADE_BAGS_BEGIN; RoFSlot.Type = invtype::typeTrade; - RoFSlot.Slot = temp_slot / EQEmu::invbag::SLOT_COUNT; - RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQEmu::invbag::SLOT_COUNT); + RoFSlot.Slot = temp_slot / EQ::invbag::SLOT_COUNT; + RoFSlot.SubIndex = temp_slot - (RoFSlot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::WORLD_END && server_slot >= EQEmu::invslot::WORLD_BEGIN) { + else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) { RoFSlot.Type = invtype::typeWorld; - RoFSlot.Slot = server_slot - EQEmu::invslot::WORLD_BEGIN; + RoFSlot.Slot = server_slot - EQ::invslot::WORLD_BEGIN; } Log(Logs::Detail, @@ -5683,7 +5683,7 @@ namespace RoF { uint32 RoFSlot = invslot::SLOT_INVALID; - if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::CORPSE_BEGIN) { + if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::CORPSE_BEGIN) { RoFSlot = server_corpse_slot; } @@ -5700,18 +5700,18 @@ namespace RoF RoFSlot.AugIndex = invaug::SOCKET_INVALID; RoFSlot.Unknown01 = INULL; - uint32 TempSlot = EQEmu::invslot::SLOT_INVALID; + uint32 TempSlot = EQ::invslot::SLOT_INVALID; - if (server_type == EQEmu::invtype::typePossessions) { - if (server_slot < EQEmu::invtype::POSSESSIONS_SIZE) { + if (server_type == EQ::invtype::typePossessions) { + if (server_slot < EQ::invtype::POSSESSIONS_SIZE) { RoFSlot.Slot = server_slot; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::GENERAL_BAGS_BEGIN; - RoFSlot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQEmu::invbag::SLOT_COUNT); - RoFSlot.SubIndex = TempSlot - ((RoFSlot.Slot - invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); + RoFSlot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQ::invbag::SLOT_COUNT); + RoFSlot.SubIndex = TempSlot - ((RoFSlot.Slot - invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); } } @@ -5732,12 +5732,12 @@ namespace RoF rof_slot.AugIndex, rof_slot.Unknown02, rof_slot.Unknown01, - EQEmu::invslot::SLOT_INVALID); + EQ::invslot::SLOT_INVALID); - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; uint32 temp_slot = invslot::SLOT_INVALID; switch (rof_slot.Type) { @@ -5747,10 +5747,10 @@ namespace RoF server_slot = rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { if (rof_slot.Slot < invslot::GENERAL_BEGIN) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; temp_slot = (rof_slot.Slot - invslot::GENERAL_BEGIN) * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5759,10 +5759,10 @@ namespace RoF case invtype::typeBank: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::BANK_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::BANK_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::BANK_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5771,10 +5771,10 @@ namespace RoF case invtype::typeSharedBank: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::SHARED_BANK_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::SHARED_BANK_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::SHARED_BANK_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5783,10 +5783,10 @@ namespace RoF case invtype::typeTrade: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::TRADE_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::TRADE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::TRADE_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::TRADE_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::TRADE_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5794,32 +5794,32 @@ namespace RoF } case invtype::typeWorld: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::WORLD_SIZE) { - server_slot = EQEmu::invslot::WORLD_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::WORLD_BEGIN + rof_slot.Slot; } else if (rof_slot.Slot == invslot::SLOT_INVALID) { - server_slot = EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; + server_slot = EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; } break; } case invtype::typeLimbo: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::LIMBO_SIZE) { - server_slot = EQEmu::invslot::slotCursor; + server_slot = EQ::invslot::slotCursor; } break; } case invtype::typeTribute: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::TRIBUTE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::TRIBUTE_BEGIN + rof_slot.Slot; } break; } case invtype::typeGuildTribute: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::GUILD_TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::GUILD_TRIBUTE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::GUILD_TRIBUTE_BEGIN + rof_slot.Slot; } break; @@ -5853,10 +5853,10 @@ namespace RoF static inline uint32 RoFToServerCorpseSlot(structs::InventorySlot_Struct rof_corpse_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (rof_corpse_slot.Type != invtype::typeCorpse || rof_corpse_slot.SubIndex != invbag::SLOT_INVALID || rof_corpse_slot.AugIndex != invaug::SOCKET_INVALID) { - server_slot = EQEmu::invslot::SLOT_INVALID; + server_slot = EQ::invslot::SLOT_INVALID; } else { @@ -5878,7 +5878,7 @@ namespace RoF } static inline uint32 RoFToServerCorpseMainSlot(uint32 rof_corpse_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (rof_corpse_slot <= invslot::CORPSE_END && rof_corpse_slot >= invslot::CORPSE_BEGIN) { server_slot = rof_corpse_slot; @@ -5904,12 +5904,12 @@ namespace RoF rof_slot.AugIndex, rof_type, rof_slot.Unknown01, - EQEmu::invslot::SLOT_INVALID); + EQ::invslot::SLOT_INVALID); - return (uint32) EQEmu::invslot::SLOT_INVALID; + return (uint32) EQ::invslot::SLOT_INVALID; } - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; uint32 temp_slot = invslot::SLOT_INVALID; switch (rof_type) { @@ -5919,10 +5919,10 @@ namespace RoF server_slot = rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { if (rof_slot.Slot < invslot::GENERAL_BEGIN) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; temp_slot = (rof_slot.Slot - invslot::GENERAL_BEGIN) * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5931,10 +5931,10 @@ namespace RoF case invtype::typeBank: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::BANK_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::BANK_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::BANK_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5943,10 +5943,10 @@ namespace RoF case invtype::typeSharedBank: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::SHARED_BANK_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::SHARED_BANK_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::SHARED_BANK_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5955,10 +5955,10 @@ namespace RoF case invtype::typeTrade: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::TRADE_SIZE) { if (rof_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::TRADE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::TRADE_BEGIN + rof_slot.Slot; } else if (rof_slot.SubIndex >= invbag::SLOT_BEGIN && rof_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::TRADE_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; + server_slot = EQ::invbag::TRADE_BAGS_BEGIN + temp_slot + rof_slot.SubIndex; } } @@ -5966,32 +5966,32 @@ namespace RoF } case invtype::typeWorld: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::WORLD_SIZE) { - server_slot = EQEmu::invslot::WORLD_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::WORLD_BEGIN + rof_slot.Slot; } else if (rof_slot.Slot == invslot::SLOT_INVALID) { - server_slot = EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; + server_slot = EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; } break; } case invtype::typeLimbo: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::LIMBO_SIZE) { - server_slot = EQEmu::invslot::slotCursor; + server_slot = EQ::invslot::slotCursor; } break; } case invtype::typeTribute: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::TRIBUTE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::TRIBUTE_BEGIN + rof_slot.Slot; } break; } case invtype::typeGuildTribute: { if (rof_slot.Slot >= invslot::SLOT_BEGIN && rof_slot.Slot < invtype::GUILD_TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::GUILD_TRIBUTE_BEGIN + rof_slot.Slot; + server_slot = EQ::invslot::GUILD_TRIBUTE_BEGIN + rof_slot.Slot; } break; @@ -6024,7 +6024,7 @@ namespace RoF static inline void ServerToRoFSayLink(std::string& rofSayLink, const std::string& serverSayLink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (serverSayLink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (serverSayLink.find('\x12') == std::string::npos)) { rofSayLink = serverSayLink; return; } @@ -6033,7 +6033,7 @@ namespace RoF for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { rofSayLink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -6063,7 +6063,7 @@ namespace RoF static inline void RoFToServerSayLink(std::string& serverSayLink, const std::string& rofSayLink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (rofSayLink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (rofSayLink.find('\x12') == std::string::npos)) { serverSayLink = rofSayLink; return; } @@ -6095,80 +6095,80 @@ namespace RoF } } - static inline spells::CastingSlot ServerToRoFCastingSlot(EQEmu::spells::CastingSlot slot) + static inline spells::CastingSlot ServerToRoFCastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Gem10: + case EQ::spells::CastingSlot::Gem10: return spells::CastingSlot::Gem10; - case EQEmu::spells::CastingSlot::Gem11: + case EQ::spells::CastingSlot::Gem11: return spells::CastingSlot::Gem11; - case EQEmu::spells::CastingSlot::Gem12: + case EQ::spells::CastingSlot::Gem12: return spells::CastingSlot::Gem12; - case EQEmu::spells::CastingSlot::Item: - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot RoFToServerCastingSlot(spells::CastingSlot slot) + static inline EQ::spells::CastingSlot RoFToServerCastingSlot(spells::CastingSlot slot) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Gem10: - return EQEmu::spells::CastingSlot::Gem10; + return EQ::spells::CastingSlot::Gem10; case spells::CastingSlot::Gem11: - return EQEmu::spells::CastingSlot::Gem11; + return EQ::spells::CastingSlot::Gem11; case spells::CastingSlot::Gem12: - return EQEmu::spells::CastingSlot::Gem12; + return EQ::spells::CastingSlot::Gem12; case spells::CastingSlot::Discipline: - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; case spells::CastingSlot::Item: - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } @@ -6177,12 +6177,12 @@ namespace RoF static inline int ServerToRoFBuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -6191,11 +6191,11 @@ namespace RoF { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/rof.h b/common/patches/rof.h index 205998b32..21a525192 100644 --- a/common/patches/rof.h +++ b/common/patches/rof.h @@ -43,7 +43,7 @@ namespace RoF protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index fc841a9b1..1b3827984 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -46,7 +46,7 @@ namespace RoF2 static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type); // server to client inventory location converters static inline structs::InventorySlot_Struct ServerToRoF2Slot(uint32 server_slot); @@ -66,8 +66,8 @@ namespace RoF2 // client to server say link converter static inline void RoF2ToServerSayLink(std::string &server_saylink, const std::string &rof2_saylink); - static inline spells::CastingSlot ServerToRoF2CastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot RoF2ToServerCastingSlot(spells::CastingSlot slot); + static inline spells::CastingSlot ServerToRoF2CastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot RoF2ToServerCastingSlot(spells::CastingSlot slot); static inline int ServerToRoF2BuffSlot(int index); static inline int RoF2ToServerBuffSlot(int index); @@ -151,9 +151,9 @@ namespace RoF2 return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::RoF2; + return EQ::versions::ClientVersion::RoF2; } #include "ss_define.h" @@ -263,7 +263,7 @@ namespace RoF2 eq->unknown000 = 1; OUT(npcid); - eq->inventory_slot = ServerToRoF2TypelessSlot(emu->slot, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoF2TypelessSlot(emu->slot, EQ::invtype::typePossessions); OUT(charges); OUT(sell_price); @@ -316,7 +316,7 @@ namespace RoF2 SETUP_DIRECT_ENCODE(AltCurrencySellItem_Struct, structs::AltCurrencySellItem_Struct); OUT(merchant_entity_id); - eq->inventory_slot = ServerToRoF2TypelessSlot(emu->slot_id, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoF2TypelessSlot(emu->slot_id, EQ::invtype::typePossessions); OUT(charges); OUT(cost); @@ -340,7 +340,7 @@ namespace RoF2 ENCODE_LENGTH_EXACT(ApplyPoison_Struct); SETUP_DIRECT_ENCODE(ApplyPoison_Struct, structs::ApplyPoison_Struct); - eq->inventorySlot = ServerToRoF2TypelessSlot(emu->inventorySlot, EQEmu::invtype::typePossessions); + eq->inventorySlot = ServerToRoF2TypelessSlot(emu->inventorySlot, EQ::invtype::typePossessions); OUT(success); FINISH_ENCODE(); @@ -571,7 +571,7 @@ namespace RoF2 ENCODE_LENGTH_EXACT(CastSpell_Struct); SETUP_DIRECT_ENCODE(CastSpell_Struct, structs::CastSpell_Struct); - eq->slot = static_cast(ServerToRoF2CastingSlot(static_cast(emu->slot))); + eq->slot = static_cast(ServerToRoF2CastingSlot(static_cast(emu->slot))); OUT(spell_id); eq->inventory_slot = ServerToRoF2Slot(emu->inventoryslot); @@ -639,24 +639,24 @@ namespace RoF2 //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)&item_count, sizeof(uint32)); for (int index = 0; index < item_count; ++index, ++eq) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory); if (ob.tellp() == last_pos) LogNetcode("RoF2::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -1562,14 +1562,14 @@ namespace RoF2 uchar* __emu_buffer = in->pBuffer; ItemPacket_Struct* old_item_pkt = (ItemPacket_Struct*)__emu_buffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType); if (ob.tellp() == last_pos) { LogNetcode("RoF2::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -2014,7 +2014,7 @@ namespace RoF2 outapp->WriteUInt32(22); // Equipment count - for (int r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) + for (int r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { outapp->WriteUInt32(emu->item_material.Slot[r].Material); outapp->WriteUInt32(0); @@ -2034,9 +2034,9 @@ namespace RoF2 outapp->WriteUInt32(0); } - outapp->WriteUInt32(EQEmu::textures::materialCount); // Equipment2 count + outapp->WriteUInt32(EQ::textures::materialCount); // Equipment2 count - for (int r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) + for (int r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { outapp->WriteUInt32(0); outapp->WriteUInt32(0); @@ -2045,7 +2045,7 @@ namespace RoF2 outapp->WriteUInt32(0); } - outapp->WriteUInt32(EQEmu::textures::materialCount); // Tint Count + outapp->WriteUInt32(EQ::textures::materialCount); // Tint Count for (int r = 0; r < 7; r++) { @@ -2055,7 +2055,7 @@ namespace RoF2 outapp->WriteUInt32(0); outapp->WriteUInt32(0); - outapp->WriteUInt32(EQEmu::textures::materialCount); // Tint2 Count + outapp->WriteUInt32(EQ::textures::materialCount); // Tint2 Count for (int r = 0; r < 7; r++) { @@ -2184,7 +2184,7 @@ namespace RoF2 outapp->WriteUInt32(spells::SPELLBOOK_SIZE); // Spellbook slots - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) outapp->WriteUInt32(emu->spell_book[r]); @@ -2193,33 +2193,33 @@ namespace RoF2 } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) outapp->WriteUInt32(emu->spell_book[r]); else outapp->WriteUInt32(0xFFFFFFFFU); } // invalidate the rest of the spellbook slots - for (uint32 r = EQEmu::spells::SPELLBOOK_SIZE; r < spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = EQ::spells::SPELLBOOK_SIZE; r < spells::SPELLBOOK_SIZE; r++) { outapp->WriteUInt32(0xFFFFFFFFU); } } outapp->WriteUInt32(spells::SPELL_GEM_COUNT); // Memorised spell slots - for (uint32 r = 0; r < EQEmu::spells::SPELL_GEM_COUNT; r++) // write first 12 + for (uint32 r = 0; r < EQ::spells::SPELL_GEM_COUNT; r++) // write first 12 { outapp->WriteUInt32(emu->mem_spells[r]); } // zeroes for the rest of the slots the other 4, which actually don't work on the client at all :D - for (uint32 r = 0; r < spells::SPELL_GEM_COUNT - EQEmu::spells::SPELL_GEM_COUNT; r++) + for (uint32 r = 0; r < spells::SPELL_GEM_COUNT - EQ::spells::SPELL_GEM_COUNT; r++) { outapp->WriteUInt32(0xFFFFFFFFU); } outapp->WriteUInt32(13); // gem refresh counts - for (uint32 r = 0; r < EQEmu::spells::SPELL_GEM_COUNT; r++) + for (uint32 r = 0; r < EQ::spells::SPELL_GEM_COUNT; r++) { outapp->WriteUInt32(emu->spellSlotRefresh[r]); // spell gem refresh } @@ -2308,7 +2308,7 @@ namespace RoF2 outapp->WriteUInt32(profile::BANDOLIERS_SIZE); // Copy bandoliers where server and client indices converge - for (uint32 r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (uint32 r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { outapp->WriteString(emu->bandoliers[r].Name); for (uint32 j = 0; j < profile::BANDOLIER_ITEM_COUNT; ++j) { // Will need adjusting if 'server != client' is ever true outapp->WriteString(emu->bandoliers[r].Items[j].Name); @@ -2323,7 +2323,7 @@ namespace RoF2 } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (uint32 r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (uint32 r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { outapp->WriteString(""); for (uint32 j = 0; j < profile::BANDOLIER_ITEM_COUNT; ++j) { // Will need adjusting if 'server != client' is ever true outapp->WriteString(""); @@ -2335,7 +2335,7 @@ namespace RoF2 outapp->WriteUInt32(profile::POTION_BELT_SIZE); // Copy potion belt where server and client indices converge - for (uint32 r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (uint32 r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { outapp->WriteString(emu->potionbelt.Items[r].Name); outapp->WriteUInt32(emu->potionbelt.Items[r].ID); if (emu->potionbelt.Items[r].Icon) { @@ -2347,7 +2347,7 @@ namespace RoF2 } } // Nullify potion belt where server and client indices diverge, with a client bias - for (uint32 r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (uint32 r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { outapp->WriteString(""); outapp->WriteUInt32(0); outapp->WriteSInt32(-1); @@ -2464,9 +2464,9 @@ namespace RoF2 outapp->WriteUInt8(0); // Unknown outapp->WriteUInt8(0); // Unknown - outapp->WriteUInt32(EQEmu::invtype::TRIBUTE_SIZE); + outapp->WriteUInt32(EQ::invtype::TRIBUTE_SIZE); - for (uint32 r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) + for (uint32 r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { outapp->WriteUInt32(emu->tributes[r].tribute); outapp->WriteUInt32(emu->tributes[r].tier); @@ -3015,7 +3015,7 @@ namespace RoF2 eq_cse->Gender = emu_cse->Gender; eq_cse->Face = emu_cse->Face; - for (int equip_index = 0; equip_index < EQEmu::textures::materialCount; equip_index++) { + for (int equip_index = 0; equip_index < EQ::textures::materialCount; equip_index++) { eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; @@ -3114,7 +3114,7 @@ namespace RoF2 SETUP_DIRECT_ENCODE(Merchant_Purchase_Struct, structs::Merchant_Purchase_Struct); OUT(npcid); - eq->inventory_slot = ServerToRoF2TypelessSlot(emu->itemslot, EQEmu::invtype::typePossessions); + eq->inventory_slot = ServerToRoF2TypelessSlot(emu->itemslot, EQ::invtype::typePossessions); //OUT(itemslot); OUT(quantity); OUT(price); @@ -4183,7 +4183,7 @@ namespace RoF2 if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; ++k) + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) { { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment_tint.Slot[k].Color); @@ -4192,7 +4192,7 @@ namespace RoF2 structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { Equipment[k].Material = emu->equipment.Slot[k].Material; Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteModel; @@ -4200,7 +4200,7 @@ namespace RoF2 Equipment[k].Material2 = emu->equipment.Slot[k].Unknown2; } - Buffer += (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + Buffer += (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); } else { @@ -4911,7 +4911,7 @@ namespace RoF2 IN(item_id); int r; - for (r = EQEmu::invaug::SOCKET_BEGIN; r <= EQEmu::invaug::SOCKET_END; r++) { + for (r = EQ::invaug::SOCKET_BEGIN; r <= EQ::invaug::SOCKET_END; r++) { IN(augments[r]); } IN(link_hash); @@ -4936,7 +4936,7 @@ namespace RoF2 DECODE_LENGTH_EXACT(structs::LoadSpellSet_Struct); SETUP_DIRECT_DECODE(LoadSpellSet_Struct, structs::LoadSpellSet_Struct); - for (unsigned int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (unsigned int i = 0; i < EQ::spells::SPELL_GEM_COUNT; ++i) { if (eq->spell[i] == 0) emu->spell[i] = 0xFFFFFFFF; @@ -5346,9 +5346,9 @@ namespace RoF2 return NextItemInstSerialNumber; } - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type) + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type) { - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); RoF2::structs::ItemSerializationHeader hdr; @@ -5411,7 +5411,7 @@ namespace RoF2 uint32 hero_model = 0; if (inst->GetOrnamentationIDFile()) { - hero_model = inst->GetOrnamentHeroModel(EQEmu::InventoryProfile::CalcMaterialFromSlot(slot_id_in)); + hero_model = inst->GetOrnamentHeroModel(EQ::InventoryProfile::CalcMaterialFromSlot(slot_id_in)); char tmp[30]; memset(tmp, 0x0, 30); @@ -5613,7 +5613,7 @@ namespace RoF2 // Done to hack older clients to label expendable fishing poles as such // July 28th, 2018 patch - if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) { itbs.expendablearrow = 1; } @@ -5782,28 +5782,28 @@ namespace RoF2 ob.write((const char*)&iqbs, sizeof(RoF2::structs::ItemQuaternaryBodyStruct)); - EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); + EQ::OutBuffer::pos_type count_pos = ob.tellp(); uint32 subitem_count = 0; ob.write((const char*)&subitem_count, sizeof(uint32)); // moved outside of loop since it is not modified within that scope - int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID; + int16 SubSlotNumber = EQ::invbag::SLOT_INVALID; - if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN) - SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in == EQEmu::invslot::slotCursor) - SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); + if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::GENERAL_BEGIN) + SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in == EQ::invslot::slotCursor) + SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN; + else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN) + SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN) + SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT); else SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now - if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) { - for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { - EQEmu::ItemInstance* sub = inst->GetItem(index); + if (SubSlotNumber != EQ::invbag::SLOT_INVALID) { + for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { + EQ::ItemInstance* sub = inst->GetItem(index); if (!sub) continue; @@ -5828,77 +5828,77 @@ namespace RoF2 RoF2Slot.AugIndex = invaug::SOCKET_INVALID; RoF2Slot.Unknown01 = INULL; - uint32 TempSlot = EQEmu::invslot::SLOT_INVALID; + uint32 TempSlot = EQ::invslot::SLOT_INVALID; - if (server_slot < EQEmu::invtype::POSSESSIONS_SIZE) { + if (server_slot < EQ::invtype::POSSESSIONS_SIZE) { RoF2Slot.Type = invtype::typePossessions; RoF2Slot.Slot = server_slot; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::GENERAL_BAGS_BEGIN; RoF2Slot.Type = invtype::typePossessions; - RoF2Slot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQEmu::invbag::SLOT_COUNT); - RoF2Slot.SubIndex = TempSlot - ((RoF2Slot.Slot - invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); + RoF2Slot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQ::invbag::SLOT_COUNT); + RoF2Slot.SubIndex = TempSlot - ((RoF2Slot.Slot - invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::TRIBUTE_END && server_slot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) { RoF2Slot.Type = invtype::typeTribute; - RoF2Slot.Slot = server_slot - EQEmu::invslot::TRIBUTE_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::TRIBUTE_BEGIN; } - else if (server_slot <= EQEmu::invslot::GUILD_TRIBUTE_END && server_slot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::GUILD_TRIBUTE_END && server_slot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { RoF2Slot.Type = invtype::typeGuildTribute; - RoF2Slot.Slot = server_slot - EQEmu::invslot::GUILD_TRIBUTE_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::GUILD_TRIBUTE_BEGIN; } - else if (server_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (server_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { RoF2Slot.Type = invtype::typeWorld; } - else if (server_slot <= EQEmu::invslot::BANK_END && server_slot >= EQEmu::invslot::BANK_BEGIN) { + else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) { RoF2Slot.Type = invtype::typeBank; - RoF2Slot.Slot = server_slot - EQEmu::invslot::BANK_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::BANK_BEGIN; } - else if (server_slot <= EQEmu::invbag::BANK_BAGS_END && server_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::BANK_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::BANK_BAGS_BEGIN; RoF2Slot.Type = invtype::typeBank; - RoF2Slot.Slot = TempSlot / EQEmu::invbag::SLOT_COUNT; - RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQEmu::invbag::SLOT_COUNT); + RoF2Slot.Slot = TempSlot / EQ::invbag::SLOT_COUNT; + RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::SHARED_BANK_END && server_slot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) { RoF2Slot.Type = invtype::typeSharedBank; - RoF2Slot.Slot = server_slot - EQEmu::invslot::SHARED_BANK_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::SHARED_BANK_BEGIN; } - else if (server_slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && server_slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::SHARED_BANK_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::SHARED_BANK_BAGS_BEGIN; RoF2Slot.Type = invtype::typeSharedBank; - RoF2Slot.Slot = TempSlot / EQEmu::invbag::SLOT_COUNT; - RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQEmu::invbag::SLOT_COUNT); + RoF2Slot.Slot = TempSlot / EQ::invbag::SLOT_COUNT; + RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::TRADE_END && server_slot >= EQEmu::invslot::TRADE_BEGIN) { + else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) { RoF2Slot.Type = invtype::typeTrade; - RoF2Slot.Slot = server_slot - EQEmu::invslot::TRADE_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::TRADE_BEGIN; } - else if (server_slot <= EQEmu::invbag::TRADE_BAGS_END && server_slot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::TRADE_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::TRADE_BAGS_BEGIN; RoF2Slot.Type = invtype::typeTrade; - RoF2Slot.Slot = TempSlot / EQEmu::invbag::SLOT_COUNT; - RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQEmu::invbag::SLOT_COUNT); + RoF2Slot.Slot = TempSlot / EQ::invbag::SLOT_COUNT; + RoF2Slot.SubIndex = TempSlot - (RoF2Slot.Slot * EQ::invbag::SLOT_COUNT); } - else if (server_slot <= EQEmu::invslot::WORLD_END && server_slot >= EQEmu::invslot::WORLD_BEGIN) { + else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) { RoF2Slot.Type = invtype::typeWorld; - RoF2Slot.Slot = server_slot - EQEmu::invslot::WORLD_BEGIN; + RoF2Slot.Slot = server_slot - EQ::invslot::WORLD_BEGIN; } Log(Logs::Detail, Logs::Netcode, "Convert Server Slot %i to RoF2 Slot [%i, %i, %i, %i] (unk2: %i, unk1: %i)", @@ -5930,7 +5930,7 @@ namespace RoF2 { uint32 RoF2Slot = invslot::SLOT_INVALID; - if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::CORPSE_BEGIN) { + if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::CORPSE_BEGIN) { RoF2Slot = server_corpse_slot; } @@ -5947,18 +5947,18 @@ namespace RoF2 RoF2Slot.AugIndex = invaug::SOCKET_INVALID; RoF2Slot.Unknown01 = INULL; - uint32 TempSlot = EQEmu::invslot::SLOT_INVALID; + uint32 TempSlot = EQ::invslot::SLOT_INVALID; - if (server_type == EQEmu::invtype::typePossessions) { - if (server_slot < EQEmu::invtype::POSSESSIONS_SIZE) { + if (server_type == EQ::invtype::typePossessions) { + if (server_slot < EQ::invtype::POSSESSIONS_SIZE) { RoF2Slot.Slot = server_slot; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - TempSlot = server_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN; + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + TempSlot = server_slot - EQ::invbag::GENERAL_BAGS_BEGIN; - RoF2Slot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQEmu::invbag::SLOT_COUNT); - RoF2Slot.SubIndex = TempSlot - ((RoF2Slot.Slot - invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); + RoF2Slot.Slot = invslot::GENERAL_BEGIN + (TempSlot / EQ::invbag::SLOT_COUNT); + RoF2Slot.SubIndex = TempSlot - ((RoF2Slot.Slot - invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); } } @@ -5972,12 +5972,12 @@ namespace RoF2 { if (rof2_slot.AugIndex < invaug::SOCKET_INVALID || rof2_slot.AugIndex >= invaug::SOCKET_COUNT) { Log(Logs::Detail, Logs::Netcode, "Convert RoF2 Slot [%i, %i, %i, %i] (unk2: %i, unk1: %i) to Server Slot %i", - rof2_slot.Type, rof2_slot.Slot, rof2_slot.SubIndex, rof2_slot.AugIndex, rof2_slot.Unknown02, rof2_slot.Unknown01, EQEmu::invslot::SLOT_INVALID); + rof2_slot.Type, rof2_slot.Slot, rof2_slot.SubIndex, rof2_slot.AugIndex, rof2_slot.Unknown02, rof2_slot.Unknown01, EQ::invslot::SLOT_INVALID); - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; uint32 temp_slot = invslot::SLOT_INVALID; switch (rof2_slot.Type) { @@ -5989,10 +5989,10 @@ namespace RoF2 else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { if (rof2_slot.Slot < invslot::GENERAL_BEGIN) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; temp_slot = (rof2_slot.Slot - invslot::GENERAL_BEGIN) * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; + server_slot = EQ::invbag::GENERAL_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; } } @@ -6001,12 +6001,12 @@ namespace RoF2 case invtype::typeBank: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::BANK_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::BANK_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::BANK_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof2_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::BANK_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; + server_slot = EQ::invbag::BANK_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; } } @@ -6015,12 +6015,12 @@ namespace RoF2 case invtype::typeSharedBank: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::SHARED_BANK_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::SHARED_BANK_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::SHARED_BANK_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof2_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; + server_slot = EQ::invbag::SHARED_BANK_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; } } @@ -6029,12 +6029,12 @@ namespace RoF2 case invtype::typeTrade: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::TRADE_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - server_slot = EQEmu::invslot::TRADE_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::TRADE_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { temp_slot = rof2_slot.Slot * invbag::SLOT_COUNT; - server_slot = EQEmu::invbag::TRADE_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; + server_slot = EQ::invbag::TRADE_BAGS_BEGIN + temp_slot + rof2_slot.SubIndex; } } @@ -6042,32 +6042,32 @@ namespace RoF2 } case invtype::typeWorld: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::WORLD_SIZE) { - server_slot = EQEmu::invslot::WORLD_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::WORLD_BEGIN + rof2_slot.Slot; } else if (rof2_slot.Slot == invslot::SLOT_INVALID) { - server_slot = EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; + server_slot = EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; } break; } case invtype::typeLimbo: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::LIMBO_SIZE) { - server_slot = EQEmu::invslot::slotCursor; + server_slot = EQ::invslot::slotCursor; } break; } case invtype::typeTribute: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::TRIBUTE_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::TRIBUTE_BEGIN + rof2_slot.Slot; } break; } case invtype::typeGuildTribute: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::GUILD_TRIBUTE_SIZE) { - server_slot = EQEmu::invslot::GUILD_TRIBUTE_BEGIN + rof2_slot.Slot; + server_slot = EQ::invslot::GUILD_TRIBUTE_BEGIN + rof2_slot.Slot; } break; @@ -6093,10 +6093,10 @@ namespace RoF2 static inline uint32 RoF2ToServerCorpseSlot(structs::InventorySlot_Struct rof2_corpse_slot) { - uint32 ServerSlot = EQEmu::invslot::SLOT_INVALID; + uint32 ServerSlot = EQ::invslot::SLOT_INVALID; if (rof2_corpse_slot.Type != invtype::typeCorpse || rof2_corpse_slot.SubIndex != invbag::SLOT_INVALID || rof2_corpse_slot.AugIndex != invaug::SOCKET_INVALID) { - ServerSlot = EQEmu::invslot::SLOT_INVALID; + ServerSlot = EQ::invslot::SLOT_INVALID; } else { @@ -6111,7 +6111,7 @@ namespace RoF2 static inline uint32 RoF2ToServerCorpseMainSlot(uint32 rof2_corpse_slot) { - uint32 ServerSlot = EQEmu::invslot::SLOT_INVALID; + uint32 ServerSlot = EQ::invslot::SLOT_INVALID; if (rof2_corpse_slot <= invslot::CORPSE_END && rof2_corpse_slot >= invslot::CORPSE_BEGIN) { ServerSlot = rof2_corpse_slot; @@ -6126,12 +6126,12 @@ namespace RoF2 { if (rof2_slot.AugIndex < invaug::SOCKET_INVALID || rof2_slot.AugIndex >= invaug::SOCKET_COUNT) { Log(Logs::Detail, Logs::Netcode, "Convert RoF2 Typeless Slot [%i, %i, %i] (implied type: %i, unk1: %i) to Server Slot %i", - rof2_slot.Slot, rof2_slot.SubIndex, rof2_slot.AugIndex, rof2_type, rof2_slot.Unknown01, EQEmu::invslot::SLOT_INVALID); + rof2_slot.Slot, rof2_slot.SubIndex, rof2_slot.AugIndex, rof2_type, rof2_slot.Unknown01, EQ::invslot::SLOT_INVALID); - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; } - uint32 ServerSlot = EQEmu::invslot::SLOT_INVALID; + uint32 ServerSlot = EQ::invslot::SLOT_INVALID; uint32 TempSlot = invslot::SLOT_INVALID; switch (rof2_type) { @@ -6143,10 +6143,10 @@ namespace RoF2 else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { if (rof2_slot.Slot < invslot::GENERAL_BEGIN) - return EQEmu::invslot::SLOT_INVALID; + return EQ::invslot::SLOT_INVALID; TempSlot = (rof2_slot.Slot - invslot::GENERAL_BEGIN) * invbag::SLOT_COUNT; - ServerSlot = EQEmu::invbag::GENERAL_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; + ServerSlot = EQ::invbag::GENERAL_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; } } @@ -6155,12 +6155,12 @@ namespace RoF2 case invtype::typeBank: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::BANK_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - ServerSlot = EQEmu::invslot::BANK_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::BANK_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { TempSlot = rof2_slot.Slot * invbag::SLOT_COUNT; - ServerSlot = EQEmu::invbag::BANK_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; + ServerSlot = EQ::invbag::BANK_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; } } @@ -6169,12 +6169,12 @@ namespace RoF2 case invtype::typeSharedBank: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::SHARED_BANK_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - ServerSlot = EQEmu::invslot::SHARED_BANK_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::SHARED_BANK_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { TempSlot = rof2_slot.Slot * invbag::SLOT_COUNT; - ServerSlot = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; + ServerSlot = EQ::invbag::SHARED_BANK_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; } } @@ -6183,12 +6183,12 @@ namespace RoF2 case invtype::typeTrade: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::TRADE_SIZE) { if (rof2_slot.SubIndex == invbag::SLOT_INVALID) { - ServerSlot = EQEmu::invslot::TRADE_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::TRADE_BEGIN + rof2_slot.Slot; } else if (rof2_slot.SubIndex >= invbag::SLOT_BEGIN && rof2_slot.SubIndex <= invbag::SLOT_END) { TempSlot = rof2_slot.Slot * invbag::SLOT_COUNT; - ServerSlot = EQEmu::invbag::TRADE_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; + ServerSlot = EQ::invbag::TRADE_BAGS_BEGIN + TempSlot + rof2_slot.SubIndex; } } @@ -6196,32 +6196,32 @@ namespace RoF2 } case invtype::typeWorld: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::WORLD_SIZE) { - ServerSlot = EQEmu::invslot::WORLD_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::WORLD_BEGIN + rof2_slot.Slot; } else if (rof2_slot.Slot == invslot::SLOT_INVALID) { - ServerSlot = EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; + ServerSlot = EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; } break; } case invtype::typeLimbo: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::LIMBO_SIZE) { - ServerSlot = EQEmu::invslot::slotCursor; + ServerSlot = EQ::invslot::slotCursor; } break; } case invtype::typeTribute: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::TRIBUTE_SIZE) { - ServerSlot = EQEmu::invslot::TRIBUTE_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::TRIBUTE_BEGIN + rof2_slot.Slot; } break; } case invtype::typeGuildTribute: { if (rof2_slot.Slot >= invslot::SLOT_BEGIN && rof2_slot.Slot < invtype::GUILD_TRIBUTE_SIZE) { - ServerSlot = EQEmu::invslot::GUILD_TRIBUTE_BEGIN + rof2_slot.Slot; + ServerSlot = EQ::invslot::GUILD_TRIBUTE_BEGIN + rof2_slot.Slot; } break; @@ -6247,7 +6247,7 @@ namespace RoF2 static inline void ServerToRoF2SayLink(std::string &rof2_saylink, const std::string &server_saylink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { rof2_saylink = server_saylink; return; } @@ -6256,7 +6256,7 @@ namespace RoF2 for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { rof2_saylink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -6279,7 +6279,7 @@ namespace RoF2 static inline void RoF2ToServerSayLink(std::string &server_saylink, const std::string &rof2_saylink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (rof2_saylink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (rof2_saylink.find('\x12') == std::string::npos)) { server_saylink = rof2_saylink; return; } @@ -6309,80 +6309,80 @@ namespace RoF2 } } - static inline spells::CastingSlot ServerToRoF2CastingSlot(EQEmu::spells::CastingSlot slot) + static inline spells::CastingSlot ServerToRoF2CastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Gem10: + case EQ::spells::CastingSlot::Gem10: return spells::CastingSlot::Gem10; - case EQEmu::spells::CastingSlot::Gem11: + case EQ::spells::CastingSlot::Gem11: return spells::CastingSlot::Gem11; - case EQEmu::spells::CastingSlot::Gem12: + case EQ::spells::CastingSlot::Gem12: return spells::CastingSlot::Gem12; - case EQEmu::spells::CastingSlot::Item: - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot RoF2ToServerCastingSlot(spells::CastingSlot slot) + static inline EQ::spells::CastingSlot RoF2ToServerCastingSlot(spells::CastingSlot slot) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Gem10: - return EQEmu::spells::CastingSlot::Gem10; + return EQ::spells::CastingSlot::Gem10; case spells::CastingSlot::Gem11: - return EQEmu::spells::CastingSlot::Gem11; + return EQ::spells::CastingSlot::Gem11; case spells::CastingSlot::Gem12: - return EQEmu::spells::CastingSlot::Gem12; + return EQ::spells::CastingSlot::Gem12; case spells::CastingSlot::Discipline: - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; case spells::CastingSlot::Item: - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } @@ -6391,12 +6391,12 @@ namespace RoF2 static inline int ServerToRoF2BuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -6405,11 +6405,11 @@ namespace RoF2 { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/rof2.h b/common/patches/rof2.h index 9eef8e596..f5f00db47 100644 --- a/common/patches/rof2.h +++ b/common/patches/rof2.h @@ -43,7 +43,7 @@ namespace RoF2 protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/rof2_limits.h b/common/patches/rof2_limits.h index b3a1a4962..114db68aa 100644 --- a/common/patches/rof2_limits.h +++ b/common/patches/rof2_limits.h @@ -31,7 +31,7 @@ namespace RoF2 const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::RoF2; } const bool ConcatenateInvTypeLimbo = false; @@ -43,7 +43,7 @@ namespace RoF2 } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::RoF2; } namespace enum_ { enum InventoryTypes : int16 { @@ -118,7 +118,7 @@ namespace RoF2 } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::RoF2; } namespace enum_ { enum InventorySlots : int16 { @@ -196,7 +196,7 @@ namespace RoF2 } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::RoF2; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -208,7 +208,7 @@ namespace RoF2 } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::RoF2; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -220,7 +220,7 @@ namespace RoF2 } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::RoF2; } //enum Unknown : int { // looks like item class..but, RoF has it too - nothing in UF- // Unknown1 = 0, @@ -249,7 +249,7 @@ namespace RoF2 } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::RoF2; } const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -261,11 +261,11 @@ namespace RoF2 } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::RoF2; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::RoF; + const uint32 EXPANSION_BIT = EQ::expansions::bitRoF; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskRoF; const size_t CHARACTER_CREATION_LIMIT = 12; @@ -274,21 +274,21 @@ namespace RoF2 } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::RoF2; } const bool CoinHasWeight = false; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF2; } - const size_t LastUsableSkill = EQEmu::skills::Skill2HPiercing; + const size_t LastUsableSkill = EQ::skills::Skill2HPiercing; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF2; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF2; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 92021c283..67947d57f 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -190,7 +190,7 @@ struct TintProfile Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -222,7 +222,7 @@ struct Texture_Struct // Texture_Struct Primary; // Texture_Struct Secondary; // }; -// Texture_Struct Slot[EQEmu::textures::TextureCount]; +// Texture_Struct Slot[EQ::textures::TextureCount]; // }; // // TextureProfile(); @@ -1113,7 +1113,7 @@ union /*00184*/ Texture_Struct equipment[22]; // Total Slots }; /*00624*/ uint32 equip2_count; // Seen 9 -/*00628*/ Texture_Struct equipment2[EQEmu::textures::materialCount]; // Appears to be Visible slots, but all 0s +/*00628*/ Texture_Struct equipment2[EQ::textures::materialCount]; // Appears to be Visible slots, but all 0s /*00808*/ uint32 tint_count; // Seen 9 /*00812*/ TintProfile item_tint; // RR GG BB 00 /*00848*/ uint32 tint_count2; // Seen 9 diff --git a/common/patches/rof_limits.h b/common/patches/rof_limits.h index 460ebfddb..4df54d1c2 100644 --- a/common/patches/rof_limits.h +++ b/common/patches/rof_limits.h @@ -31,7 +31,7 @@ namespace RoF const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::RoF; } const bool ConcatenateInvTypeLimbo = false; @@ -43,7 +43,7 @@ namespace RoF } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::RoF; } namespace enum_ { enum InventoryTypes : int16 { @@ -116,7 +116,7 @@ namespace RoF } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::RoF; } namespace enum_ { enum InventorySlots : int16 { @@ -194,7 +194,7 @@ namespace RoF } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::RoF; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -206,7 +206,7 @@ namespace RoF } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::RoF; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -218,7 +218,7 @@ namespace RoF } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::RoF; } enum ItemPacketType : int { ItemPacketMerchant = 100, @@ -240,7 +240,7 @@ namespace RoF } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::RoF; } const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -252,11 +252,11 @@ namespace RoF } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::RoF; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::RoF; + const uint32 EXPANSION_BIT = EQ::expansions::bitRoF; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskRoF; const size_t CHARACTER_CREATION_LIMIT = 12; @@ -265,21 +265,21 @@ namespace RoF } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::RoF; } const bool CoinHasWeight = false; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF; } - const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack; + const size_t LastUsableSkill = EQ::skills::SkillTripleAttack; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/rof_structs.h b/common/patches/rof_structs.h index bdf416724..76324d59b 100644 --- a/common/patches/rof_structs.h +++ b/common/patches/rof_structs.h @@ -190,7 +190,7 @@ struct TintProfile Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -222,7 +222,7 @@ struct Texture_Struct // Texture_Struct Primary; // Texture_Struct Secondary; // }; -// Texture_Struct Slot[EQEmu::textures::TextureCount]; +// Texture_Struct Slot[EQ::textures::TextureCount]; // }; // // TextureProfile(); diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 753852a18..6e3f274e7 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -43,7 +43,7 @@ namespace SoD static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth); // server to client inventory location converters static inline uint32 ServerToSoDSlot(uint32 server_slot); @@ -59,8 +59,8 @@ namespace SoD // client to server say link converter static inline void SoDToServerSayLink(std::string &server_saylink, const std::string &sod_saylink); - static inline spells::CastingSlot ServerToSoDCastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot); + static inline spells::CastingSlot ServerToSoDCastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot); static inline int ServerToSoDBuffSlot(int index); static inline int SoDToServerBuffSlot(int index); @@ -144,9 +144,9 @@ namespace SoD return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::SoD; + return EQ::versions::ClientVersion::SoD; } #include "ss_define.h" @@ -381,24 +381,24 @@ namespace SoD //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)&item_count, sizeof(uint32)); for (int index = 0; index < item_count; ++index, ++eq) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0); if (ob.tellp() == last_pos) LogNetcode("SoD::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -1060,14 +1060,14 @@ namespace SoD //store away the emu struct uchar* __emu_buffer = in->pBuffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); if (ob.tellp() == last_pos) { LogNetcode("SoD::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -1463,7 +1463,7 @@ namespace SoD OUT(hairstyle); OUT(beard); // OUT(unknown00178[10]); - for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) { + for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; eq->equipment.Slot[r].Unknown1 = 0; eq->equipment.Slot[r].EliteMaterial = 0; @@ -1493,7 +1493,7 @@ namespace SoD OUT(face); // OUT(unknown02264[47]); - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; @@ -1502,14 +1502,14 @@ namespace SoD } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; else eq->spell_book[r] = 0xFFFFFFFFU; } // invalidate the rest of the spellbook slots - memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE))); + memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE))); } // OUT(unknown4184[128]); @@ -1553,7 +1553,7 @@ namespace SoD // OUT(unknown06160[4]); // Copy bandoliers where server and client indices converge - for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { OUT_str(bandoliers[r].Name); for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true OUT(bandoliers[r].Items[k].ID); @@ -1562,7 +1562,7 @@ namespace SoD } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { eq->bandoliers[r].Name[0] = '\0'; for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true eq->bandoliers[r].Items[k].ID = 0; @@ -1574,13 +1574,13 @@ namespace SoD // OUT(unknown07444[5120]); // Copy potion belt where server and client indices converge - for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { OUT(potionbelt.Items[r].ID); OUT(potionbelt.Items[r].Icon); OUT_str(potionbelt.Items[r].Name); } // Nullify potion belt where server and client indices diverge, with a client bias - for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { eq->potionbelt.Items[r].ID = 0; eq->potionbelt.Items[r].Icon = 0; eq->potionbelt.Items[r].Name[0] = '\0'; @@ -1923,7 +1923,7 @@ namespace SoD eq_cse->HairColor = emu_cse->HairColor; eq_cse->Face = emu_cse->Face; - for (int equip_index = EQEmu::textures::textureBegin; equip_index < EQEmu::textures::materialCount; equip_index++) { + for (int equip_index = EQ::textures::textureBegin; equip_index < EQ::textures::materialCount; equip_index++) { eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; @@ -2484,7 +2484,7 @@ namespace SoD float SpawnSize = emu->size; if (!((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522))) { - PacketSize -= (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + PacketSize -= (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); if (emu->size == 0) { @@ -2681,7 +2681,7 @@ namespace SoD if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; ++k) + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) { { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment_tint.Slot[k].Color); @@ -2708,13 +2708,13 @@ namespace SoD { structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { Equipment[k].Material = emu->equipment.Slot[k].Material; Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1; Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteModel; } - Buffer += (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + Buffer += (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); } if (strlen(emu->title)) { @@ -3146,7 +3146,7 @@ namespace SoD for (int i = 0; i < spells::SPELL_GEM_COUNT; ++i) emu->spell[i] = eq->spell[i]; - for (int i = spells::SPELL_GEM_COUNT; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (int i = spells::SPELL_GEM_COUNT; i < EQ::spells::SPELL_GEM_COUNT; ++i) emu->spell[i] = 0xFFFFFFFF; FINISH_DIRECT_DECODE(); @@ -3440,9 +3440,9 @@ namespace SoD return NextItemInstSerialNumber; } - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth) + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth) { - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); SoD::structs::ItemSerializationHeader hdr; @@ -3633,7 +3633,7 @@ namespace SoD // Done to hack older clients to label expendable fishing poles as such // July 28th, 2018 patch - if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) { itbs.expendablearrow = 1; } @@ -3757,30 +3757,30 @@ namespace SoD ob.write((const char*)&iqbs, sizeof(SoD::structs::ItemQuaternaryBodyStruct)); - EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); + EQ::OutBuffer::pos_type count_pos = ob.tellp(); uint32 subitem_count = 0; ob.write((const char*)&subitem_count, sizeof(uint32)); // moved outside of loop since it is not modified within that scope - int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID; + int16 SubSlotNumber = EQ::invbag::SLOT_INVALID; - if (slot_id_in <= EQEmu::invslot::slotGeneral8 && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN) - SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::slotGeneral9) - SubSlotNumber = EQEmu::invbag::SLOT_INVALID; - else if (slot_id_in == EQEmu::invslot::slotCursor) - SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); + if (slot_id_in <= EQ::invslot::slotGeneral8 && slot_id_in >= EQ::invslot::GENERAL_BEGIN) + SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::slotGeneral9) + SubSlotNumber = EQ::invbag::SLOT_INVALID; + else if (slot_id_in == EQ::invslot::slotCursor) + SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN; + else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN) + SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN) + SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT); else SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now - if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) { - for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { - EQEmu::ItemInstance* sub = inst->GetItem(index); + if (SubSlotNumber != EQ::invbag::SLOT_INVALID) { + for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { + EQ::ItemInstance* sub = inst->GetItem(index); if (!sub) continue; @@ -3799,59 +3799,59 @@ namespace SoD { uint32 SoDSlot = invslot::SLOT_INVALID; - if (serverSlot <= EQEmu::invslot::slotGeneral8) { + if (serverSlot <= EQ::invslot::slotGeneral8) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::CORPSE_END && serverSlot >= EQEmu::invslot::slotCursor) { + else if (serverSlot <= EQ::invslot::CORPSE_END && serverSlot >= EQ::invslot::slotCursor) { SoDSlot = serverSlot - 2; } - else if (serverSlot <= EQEmu::invbag::GENERAL_BAGS_8_END && serverSlot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::GENERAL_BAGS_8_END && serverSlot >= EQ::invbag::GENERAL_BAGS_BEGIN) { SoDSlot = serverSlot + 11; } - else if (serverSlot <= EQEmu::invbag::CURSOR_BAG_END && serverSlot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { + else if (serverSlot <= EQ::invbag::CURSOR_BAG_END && serverSlot >= EQ::invbag::CURSOR_BAG_BEGIN) { SoDSlot = serverSlot - 9; } - else if (serverSlot <= EQEmu::invslot::TRIBUTE_END && serverSlot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (serverSlot <= EQ::invslot::TRIBUTE_END && serverSlot >= EQ::invslot::TRIBUTE_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::GUILD_TRIBUTE_END && serverSlot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (serverSlot <= EQ::invslot::GUILD_TRIBUTE_END && serverSlot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (serverSlot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::BANK_END && serverSlot >= EQEmu::invslot::BANK_BEGIN) { + else if (serverSlot <= EQ::invslot::BANK_END && serverSlot >= EQ::invslot::BANK_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::BANK_BAGS_END && serverSlot >= EQEmu::invbag::BANK_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::BANK_BAGS_END && serverSlot >= EQ::invbag::BANK_BAGS_BEGIN) { SoDSlot = serverSlot + 1; } - else if (serverSlot <= EQEmu::invslot::SHARED_BANK_END && serverSlot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (serverSlot <= EQ::invslot::SHARED_BANK_END && serverSlot >= EQ::invslot::SHARED_BANK_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { SoDSlot = serverSlot + 1; } - else if (serverSlot <= EQEmu::invslot::TRADE_END && serverSlot >= EQEmu::invslot::TRADE_BEGIN) { + else if (serverSlot <= EQ::invslot::TRADE_END && serverSlot >= EQ::invslot::TRADE_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::TRADE_BAGS_END && serverSlot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::TRADE_BAGS_END && serverSlot >= EQ::invbag::TRADE_BAGS_BEGIN) { SoDSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::WORLD_END && serverSlot >= EQEmu::invslot::WORLD_BEGIN) { + else if (serverSlot <= EQ::invslot::WORLD_END && serverSlot >= EQ::invslot::WORLD_BEGIN) { SoDSlot = serverSlot; } @@ -3864,11 +3864,11 @@ namespace SoD { uint32 SoDSlot = invslot::SLOT_INVALID; - if (server_corpse_slot <= EQEmu::invslot::slotGeneral8 && server_corpse_slot >= EQEmu::invslot::slotGeneral1) { + if (server_corpse_slot <= EQ::invslot::slotGeneral8 && server_corpse_slot >= EQ::invslot::slotGeneral1) { SoDSlot = server_corpse_slot; } - else if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::slotCursor) { + else if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::slotCursor) { SoDSlot = server_corpse_slot - 2; } @@ -3879,7 +3879,7 @@ namespace SoD static inline uint32 SoDToServerSlot(uint32 sod_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (sod_slot <= invslot::slotGeneral8) { server_slot = sod_slot; @@ -3944,7 +3944,7 @@ namespace SoD static inline uint32 SoDToServerCorpseSlot(uint32 sod_corpse_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (sod_corpse_slot <= invslot::slotGeneral8 && sod_corpse_slot >= invslot::slotGeneral1) { server_slot = sod_corpse_slot; @@ -3961,7 +3961,7 @@ namespace SoD static inline void ServerToSoDSayLink(std::string &sod_saylink, const std::string &server_saylink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { sod_saylink = server_saylink; return; } @@ -3970,7 +3970,7 @@ namespace SoD for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { sod_saylink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -4001,7 +4001,7 @@ namespace SoD static inline void SoDToServerSayLink(std::string &server_saylink, const std::string &sod_saylink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sod_saylink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sod_saylink.find('\x12') == std::string::npos)) { server_saylink = sod_saylink; return; } @@ -4035,84 +4035,84 @@ namespace SoD } } - static inline spells::CastingSlot ServerToSoDCastingSlot(EQEmu::spells::CastingSlot slot) + static inline spells::CastingSlot ServerToSoDCastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Gem10: + case EQ::spells::CastingSlot::Gem10: return spells::CastingSlot::Gem10; - case EQEmu::spells::CastingSlot::Item: - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot) + static inline EQ::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Gem10: - return EQEmu::spells::CastingSlot::Gem10; + return EQ::spells::CastingSlot::Gem10; case spells::CastingSlot::Discipline: - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; case spells::CastingSlot::Item: - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } static inline int ServerToSoDBuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -4121,11 +4121,11 @@ namespace SoD { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/sod.h b/common/patches/sod.h index 977645231..1a0188f6e 100644 --- a/common/patches/sod.h +++ b/common/patches/sod.h @@ -43,7 +43,7 @@ namespace SoD protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/sod_limits.h b/common/patches/sod_limits.h index 7927a255b..46d8293fe 100644 --- a/common/patches/sod_limits.h +++ b/common/patches/sod_limits.h @@ -31,7 +31,7 @@ namespace SoD const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::SoD; } const bool ConcatenateInvTypeLimbo = true; @@ -43,7 +43,7 @@ namespace SoD } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::SoD; } namespace enum_ { enum InventoryTypes : int16 { @@ -106,7 +106,7 @@ namespace SoD } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::SoD; } namespace enum_ { enum InventorySlots : int16 { @@ -205,7 +205,7 @@ namespace SoD } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::SoD; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -237,7 +237,7 @@ namespace SoD } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::SoD; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -249,7 +249,7 @@ namespace SoD } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::SoD; } enum ItemPacketType : int { ItemPacketMerchant = 100, @@ -267,7 +267,7 @@ namespace SoD } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::SoD; } const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -279,11 +279,11 @@ namespace SoD } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::SoD; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::SoD; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoD; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoD; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::SoD; + const uint32 EXPANSION_BIT = EQ::expansions::bitSoD; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskSoD; const size_t CHARACTER_CREATION_LIMIT = 12; @@ -292,21 +292,21 @@ namespace SoD } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::SoD; } const bool CoinHasWeight = false; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoD; } - const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack; + const size_t LastUsableSkill = EQ::skills::SkillTripleAttack; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoD; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoD; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/sod_structs.h b/common/patches/sod_structs.h index 76a534e6a..2a8b0cec8 100644 --- a/common/patches/sod_structs.h +++ b/common/patches/sod_structs.h @@ -149,7 +149,7 @@ struct TintProfile Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -178,7 +178,7 @@ struct TextureProfile Texture_Struct Primary; Texture_Struct Secondary; }; - Texture_Struct Slot[EQEmu::textures::materialCount]; + Texture_Struct Slot[EQ::textures::materialCount]; }; TextureProfile(); @@ -195,7 +195,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[EQEmu::textures::materialCount]; +/*0000*/ CharSelectEquip Equip[EQ::textures::materialCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 6bfb19de5..94e94f946 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -43,7 +43,7 @@ namespace SoF static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth); // server to client inventory location converters static inline uint32 ServerToSoFSlot(uint32 server_slot); @@ -59,8 +59,8 @@ namespace SoF // client to server say link converter static inline void SoFToServerSayLink(std::string &server_saylink, const std::string &sof_saylink); - static inline spells::CastingSlot ServerToSoFCastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location); + static inline spells::CastingSlot ServerToSoFCastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location); static inline int ServerToSoFBuffSlot(int index); static inline int SoFToServerBuffSlot(int index); @@ -142,9 +142,9 @@ namespace SoF return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::SoF; + return EQ::versions::ClientVersion::SoF; } #include "ss_define.h" @@ -361,24 +361,24 @@ namespace SoF //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)&item_count, sizeof(uint32)); for (int index = 0; index < item_count; ++index, ++eq) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0); if (ob.tellp() == last_pos) LogNetcode("SoF::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -855,14 +855,14 @@ namespace SoF //store away the emu struct uchar* __emu_buffer = in->pBuffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); if (ob.tellp() == last_pos) { LogNetcode("SoF::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -956,7 +956,7 @@ namespace SoF // Since HT/LoH are translated up, we need to translate down only for memSpellSpellbar case if (emu->scribing == 3) - eq->slot = static_cast(ServerToSoFCastingSlot(static_cast(emu->slot))); + eq->slot = static_cast(ServerToSoFCastingSlot(static_cast(emu->slot))); else OUT(slot); OUT(spell_id); @@ -1130,7 +1130,7 @@ namespace SoF OUT(hairstyle); OUT(beard); // OUT(unknown00178[10]); - for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) { + for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; eq->equipment.Slot[r].Unknown1 = 0; eq->equipment.Slot[r].EliteMaterial = 0; @@ -1160,7 +1160,7 @@ namespace SoF OUT(face); // OUT(unknown02264[47]); - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; @@ -1169,14 +1169,14 @@ namespace SoF } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; else eq->spell_book[r] = 0xFFFFFFFFU; } // invalidate the rest of the spellbook slots - memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE))); + memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE))); } // OUT(unknown4184[128]); @@ -1223,7 +1223,7 @@ namespace SoF // OUT(unknown06160[4]); // Copy bandoliers where server and client indices converge - for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { OUT_str(bandoliers[r].Name); for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true OUT(bandoliers[r].Items[k].ID); @@ -1232,7 +1232,7 @@ namespace SoF } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { eq->bandoliers[r].Name[0] = '\0'; for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true eq->bandoliers[r].Items[k].ID = 0; @@ -1244,13 +1244,13 @@ namespace SoF // OUT(unknown07444[5120]); // Copy potion belt where server and client indices converge - for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { OUT(potionbelt.Items[r].ID); OUT(potionbelt.Items[r].Icon); OUT_str(potionbelt.Items[r].Name); } // Nullify potion belt where server and client indices diverge, with a client bias - for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { eq->potionbelt.Items[r].ID = 0; eq->potionbelt.Items[r].Icon = 0; eq->potionbelt.Items[r].Name[0] = '\0'; @@ -1593,7 +1593,7 @@ namespace SoF eq_cse->HairColor = emu_cse->HairColor; eq_cse->Face = emu_cse->Face; - for (int equip_index = EQEmu::textures::textureBegin; equip_index < EQEmu::textures::materialCount; equip_index++) { + for (int equip_index = EQ::textures::textureBegin; equip_index < EQ::textures::materialCount; equip_index++) { eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; @@ -2015,7 +2015,7 @@ namespace SoF eq->deity = emu->deity; eq->drakkin_heritage = emu->drakkin_heritage; eq->gender = emu->gender; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { eq->equipment.Slot[k].Material = emu->equipment.Slot[k].Material; eq->equipment.Slot[k].Unknown1 = emu->equipment.Slot[k].Unknown1; eq->equipment.Slot[k].EliteMaterial = emu->equipment.Slot[k].EliteModel; @@ -2081,7 +2081,7 @@ namespace SoF strcpy(eq->name, emu->name); eq->petOwnerId = emu->petOwnerId; eq->pvp = 0; // 0 = non-pvp colored name, 1 = red pvp name - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { eq->equipment_tint.Slot[k].Color = emu->equipment_tint.Slot[k].Color; } eq->anon = emu->anon; @@ -2300,7 +2300,7 @@ namespace SoF DECODE_LENGTH_EXACT(structs::BugReport_Struct); SETUP_DIRECT_DECODE(BugReport_Struct, structs::BugReport_Struct); - emu->category_id = EQEmu::bug::CategoryNameToCategoryID(eq->category_name); + emu->category_id = EQ::bug::CategoryNameToCategoryID(eq->category_name); memcpy(emu->category_name, eq, sizeof(structs::BugReport_Struct)); FINISH_DIRECT_DECODE(); @@ -2556,7 +2556,7 @@ namespace SoF for (int i = 0; i < spells::SPELL_GEM_COUNT; ++i) IN(spell[i]); - for (int i = spells::SPELL_GEM_COUNT; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (int i = spells::SPELL_GEM_COUNT; i < EQ::spells::SPELL_GEM_COUNT; ++i) emu->spell[i] = 0xFFFFFFFF; IN(unknown); @@ -2838,9 +2838,9 @@ namespace SoF return NextItemInstSerialNumber; } - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth) + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth) { - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); SoF::structs::ItemSerializationHeader hdr; @@ -3030,7 +3030,7 @@ namespace SoF // Done to hack older clients to label expendable fishing poles as such // July 28th, 2018 patch - if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) { itbs.expendablearrow = 1; } @@ -3153,30 +3153,30 @@ namespace SoF ob.write((const char*)&iqbs, sizeof(SoF::structs::ItemQuaternaryBodyStruct)); - EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); + EQ::OutBuffer::pos_type count_pos = ob.tellp(); uint32 subitem_count = 0; ob.write((const char*)&subitem_count, sizeof(uint32)); // moved outside of loop since it is not modified within that scope - int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID; + int16 SubSlotNumber = EQ::invbag::SLOT_INVALID; - if (slot_id_in <= EQEmu::invslot::slotGeneral8 && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN) - SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::slotGeneral9) - SubSlotNumber = EQEmu::invbag::SLOT_INVALID; - else if (slot_id_in == EQEmu::invslot::slotCursor) - SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); + if (slot_id_in <= EQ::invslot::slotGeneral8 && slot_id_in >= EQ::invslot::GENERAL_BEGIN) + SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::slotGeneral9) + SubSlotNumber = EQ::invbag::SLOT_INVALID; + else if (slot_id_in == EQ::invslot::slotCursor) + SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN; + else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN) + SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN) + SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT); else SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now - if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) { - for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { - EQEmu::ItemInstance* sub = inst->GetItem(index); + if (SubSlotNumber != EQ::invbag::SLOT_INVALID) { + for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { + EQ::ItemInstance* sub = inst->GetItem(index); if (!sub) continue; @@ -3195,59 +3195,59 @@ namespace SoF { uint32 sof_slot = invslot::SLOT_INVALID; - if (server_slot <= EQEmu::invslot::slotGeneral8) { + if (server_slot <= EQ::invslot::slotGeneral8) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::CORPSE_END && server_slot >= EQEmu::invslot::slotCursor) { + else if (server_slot <= EQ::invslot::CORPSE_END && server_slot >= EQ::invslot::slotCursor) { sof_slot = server_slot - 2; } - else if (server_slot <= EQEmu::invbag::GENERAL_BAGS_8_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::GENERAL_BAGS_8_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { sof_slot = server_slot + 11; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) { sof_slot = server_slot - 9; } - else if (server_slot <= EQEmu::invslot::TRIBUTE_END && server_slot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::GUILD_TRIBUTE_END && server_slot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::GUILD_TRIBUTE_END && server_slot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { sof_slot = server_slot; } - else if (server_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (server_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::BANK_END && server_slot >= EQEmu::invslot::BANK_BEGIN) { + else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::BANK_BAGS_END && server_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) { sof_slot = server_slot + 1; } - else if (server_slot <= EQEmu::invslot::SHARED_BANK_END && server_slot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && server_slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { sof_slot = server_slot + 1; } - else if (server_slot <= EQEmu::invslot::TRADE_END && server_slot >= EQEmu::invslot::TRADE_BEGIN) { + else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::TRADE_BAGS_END && server_slot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) { sof_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::WORLD_END && server_slot >= EQEmu::invslot::WORLD_BEGIN) { + else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) { sof_slot = server_slot; } @@ -3260,11 +3260,11 @@ namespace SoF { uint32 SoFSlot = invslot::SLOT_INVALID; - if (server_corpse_slot <= EQEmu::invslot::slotGeneral8 && server_corpse_slot >= EQEmu::invslot::slotGeneral1) { + if (server_corpse_slot <= EQ::invslot::slotGeneral8 && server_corpse_slot >= EQ::invslot::slotGeneral1) { SoFSlot = server_corpse_slot; } - else if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::slotCursor) { + else if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::slotCursor) { SoFSlot = server_corpse_slot - 2; } @@ -3279,7 +3279,7 @@ namespace SoF static inline uint32 SoFToServerSlot(uint32 sof_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (sof_slot <= invslot::slotGeneral8) { server_slot = sof_slot; @@ -3344,7 +3344,7 @@ namespace SoF static inline uint32 SoFToServerCorpseSlot(uint32 sof_corpse_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (sof_corpse_slot <= invslot::slotGeneral8 && sof_corpse_slot >= invslot::slotGeneral1) { server_slot = sof_corpse_slot; @@ -3365,7 +3365,7 @@ namespace SoF static inline void ServerToSoFSayLink(std::string &sof_saylink, const std::string &server_saylink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { sof_saylink = server_saylink; return; } @@ -3374,7 +3374,7 @@ namespace SoF for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { sof_saylink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -3405,7 +3405,7 @@ namespace SoF static inline void SoFToServerSayLink(std::string &server_saylink, const std::string &sof_saylink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sof_saylink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sof_saylink.find('\x12') == std::string::npos)) { server_saylink = sof_saylink; return; } @@ -3439,84 +3439,84 @@ namespace SoF } } - static inline spells::CastingSlot ServerToSoFCastingSlot(EQEmu::spells::CastingSlot slot) { + static inline spells::CastingSlot ServerToSoFCastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::Item: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::PotionBelt; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) { + static inline EQ::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Ability: - return EQEmu::spells::CastingSlot::Ability; + return EQ::spells::CastingSlot::Ability; // Tit uses 10 for item and discipline casting, but items have a valid location case spells::CastingSlot::Item: if (item_location == INVALID_INDEX) - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; else - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::PotionBelt: - return EQEmu::spells::CastingSlot::PotionBelt; + return EQ::spells::CastingSlot::PotionBelt; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } static inline int ServerToSoFBuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -3525,11 +3525,11 @@ namespace SoF { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/sof.h b/common/patches/sof.h index dde55f9a3..47a6433ac 100644 --- a/common/patches/sof.h +++ b/common/patches/sof.h @@ -43,7 +43,7 @@ namespace SoF protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/sof_limits.h b/common/patches/sof_limits.h index a03676f2d..063644e18 100644 --- a/common/patches/sof_limits.h +++ b/common/patches/sof_limits.h @@ -31,7 +31,7 @@ namespace SoF const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::SoF; } const bool ConcatenateInvTypeLimbo = true; @@ -43,7 +43,7 @@ namespace SoF } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::SoF; } namespace enum_ { enum InventoryTypes : int16 { @@ -106,7 +106,7 @@ namespace SoF } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::SoF; } namespace enum_ { enum InventorySlots : int16 { @@ -205,7 +205,7 @@ namespace SoF } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::SoF; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -237,7 +237,7 @@ namespace SoF } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::SoF; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -249,7 +249,7 @@ namespace SoF } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::SoF; } enum ItemPacketType : int { ItemPacketMerchant = 100, @@ -267,7 +267,7 @@ namespace SoF } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::SoF; } const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -279,11 +279,11 @@ namespace SoF } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::SoF; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::SoF; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoF; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoF; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::SoF; + const uint32 EXPANSION_BIT = EQ::expansions::bitSoF; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskSoF; const size_t CHARACTER_CREATION_LIMIT = 12; @@ -292,21 +292,21 @@ namespace SoF } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::SoF; } const bool CoinHasWeight = true; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoF; } - const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack; + const size_t LastUsableSkill = EQ::skills::SkillTripleAttack; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoF; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index 1507630bd..c76ef0b96 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -168,7 +168,7 @@ struct TintProfile Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -197,7 +197,7 @@ struct TextureProfile Texture_Struct Primary; Texture_Struct Secondary; }; - Texture_Struct Slot[EQEmu::textures::materialCount]; + Texture_Struct Slot[EQ::textures::materialCount]; }; TextureProfile(); @@ -214,7 +214,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[EQEmu::textures::materialCount]; +/*0000*/ CharSelectEquip Equip[EQ::textures::materialCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index b612b9173..505bca10c 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -42,7 +42,7 @@ namespace Titanium static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth); // server to client inventory location converters static inline int16 ServerToTitaniumSlot(uint32 server_slot); @@ -58,8 +58,8 @@ namespace Titanium // client to server say link converter static inline void TitaniumToServerSayLink(std::string &server_saylink, const std::string &titanium_saylink); - static inline spells::CastingSlot ServerToTitaniumCastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot TitaniumToServerCastingSlot(spells::CastingSlot slot, uint32 item_location); + static inline spells::CastingSlot ServerToTitaniumCastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot TitaniumToServerCastingSlot(spells::CastingSlot slot, uint32 item_location); static inline int ServerToTitaniumBuffSlot(int index); static inline int TitaniumToServerBuffSlot(int index); @@ -143,9 +143,9 @@ namespace Titanium return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::Titanium; + return EQ::versions::ClientVersion::Titanium; } #include "ss_define.h" @@ -320,22 +320,22 @@ namespace Titanium //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int itemcount = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (itemcount == 0 || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int itemcount = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (itemcount == 0 || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; //do the transform... - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); for (int r = 0; r < itemcount; r++, eq++) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, ServerToTitaniumSlot(eq->slot_id), 0); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, ServerToTitaniumSlot(eq->slot_id), 0); if (ob.tellp() == last_pos) LogNetcode("Titanium::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -796,14 +796,14 @@ namespace Titanium OUT(TargetID); OUT(playerid); - for (int i = EQEmu::invslot::slotCharm; i <= EQEmu::invslot::slotWaist; ++i) { + for (int i = EQ::invslot::slotCharm; i <= EQ::invslot::slotWaist; ++i) { strn0cpy(eq->itemnames[i], emu->itemnames[i], sizeof(eq->itemnames[i])); OUT(itemicons[i]); } // move ammo down to last element in titanium array - strn0cpy(eq->itemnames[invslot::slotAmmo], emu->itemnames[EQEmu::invslot::slotAmmo], sizeof(eq->itemnames[invslot::slotAmmo])); - eq->itemicons[invslot::slotAmmo] = emu->itemicons[EQEmu::invslot::slotAmmo]; + strn0cpy(eq->itemnames[invslot::slotAmmo], emu->itemnames[EQ::invslot::slotAmmo], sizeof(eq->itemnames[invslot::slotAmmo])); + eq->itemicons[invslot::slotAmmo] = emu->itemicons[EQ::invslot::slotAmmo]; strn0cpy(eq->text, emu->text, sizeof(eq->text)); @@ -832,14 +832,14 @@ namespace Titanium //store away the emu struct uchar* __emu_buffer = in->pBuffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, ServerToTitaniumSlot(int_struct->slot_id), 0); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, ServerToTitaniumSlot(int_struct->slot_id), 0); if (ob.tellp() == last_pos) { LogNetcode("Titanium::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -909,7 +909,7 @@ namespace Titanium // Since HT/LoH are translated up, we need to translate down only for memSpellSpellbar case if (emu->scribing == 3) - eq->slot = static_cast(ServerToTitaniumCastingSlot(static_cast(emu->slot))); + eq->slot = static_cast(ServerToTitaniumCastingSlot(static_cast(emu->slot))); else OUT(slot); OUT(spell_id); @@ -1009,7 +1009,7 @@ namespace Titanium OUT(hairstyle); OUT(beard); // OUT(unknown00178[10]); - for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) { + for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { OUT(item_material.Slot[r].Material); OUT(item_tint.Slot[r].Color); } @@ -1032,7 +1032,7 @@ namespace Titanium OUT(face); // OUT(unknown02264[47]); - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; @@ -1041,14 +1041,14 @@ namespace Titanium } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; else eq->spell_book[r] = 0xFFFFFFFFU; } // invalidate the rest of the spellbook slots - memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE))); + memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE))); } // OUT(unknown4184[448]); @@ -1092,7 +1092,7 @@ namespace Titanium // OUT(unknown06160[4]); // Copy bandoliers where server and client indices converge - for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { OUT_str(bandoliers[r].Name); for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true OUT(bandoliers[r].Items[k].ID); @@ -1101,7 +1101,7 @@ namespace Titanium } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { eq->bandoliers[r].Name[0] = '\0'; for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true eq->bandoliers[r].Items[k].ID = 0; @@ -1113,13 +1113,13 @@ namespace Titanium // OUT(unknown07444[5120]); // Copy potion belt where server and client indices converge - for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { OUT(potionbelt.Items[r].ID); OUT(potionbelt.Items[r].Icon); OUT_str(potionbelt.Items[r].Name); } // Nullify potion belt where server and client indices diverge, with a client bias - for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { eq->potionbelt.Items[r].ID = 0; eq->potionbelt.Items[r].Icon = 0; eq->potionbelt.Items[r].Name[0] = '\0'; @@ -1349,14 +1349,14 @@ namespace Titanium if (eq->Race[char_index] > 473) eq->Race[char_index] = 1; - for (int index = 0; index < EQEmu::textures::materialCount; ++index) { + for (int index = 0; index < EQ::textures::materialCount; ++index) { eq->CS_Colors[char_index].Slot[index].Color = emu_cse->Equip[index].Color; } eq->BeardColor[char_index] = emu_cse->BeardColor; eq->HairStyle[char_index] = emu_cse->HairStyle; - for (int index = 0; index < EQEmu::textures::materialCount; ++index) { + for (int index = 0; index < EQ::textures::materialCount; ++index) { eq->Equip[char_index].Slot[index].Material = emu_cse->Equip[index].Material; } @@ -1386,14 +1386,14 @@ namespace Titanium for (; char_index < 10; ++char_index) { eq->Race[char_index] = 0; - for (int index = 0; index < EQEmu::textures::materialCount; ++index) { + for (int index = 0; index < EQ::textures::materialCount; ++index) { eq->CS_Colors[char_index].Slot[index].Color = 0; } eq->BeardColor[char_index] = 0; eq->HairStyle[char_index] = 0; - for (int index = 0; index < EQEmu::textures::materialCount; ++index) { + for (int index = 0; index < EQ::textures::materialCount; ++index) { eq->Equip[char_index].Slot[index].Material = 0; } @@ -1717,7 +1717,7 @@ namespace Titanium eq->petOwnerId = emu->petOwnerId; eq->guildrank = emu->guildrank; // eq->unknown0194[3] = emu->unknown0194[3]; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { eq->equipment.Slot[k].Material = emu->equipment.Slot[k].Material; eq->equipment_tint.Slot[k].Color = emu->equipment_tint.Slot[k].Color; } @@ -1830,7 +1830,7 @@ namespace Titanium DECODE_LENGTH_EXACT(structs::BugReport_Struct); SETUP_DIRECT_DECODE(BugReport_Struct, structs::BugReport_Struct); - emu->category_id = EQEmu::bug::CategoryNameToCategoryID(eq->category_name); + emu->category_id = EQ::bug::CategoryNameToCategoryID(eq->category_name); memcpy(emu->category_name, eq, sizeof(structs::BugReport_Struct)); FINISH_DIRECT_DECODE(); @@ -1993,12 +1993,12 @@ namespace Titanium } // move ammo up to last element in server array - strn0cpy(emu->itemnames[EQEmu::invslot::slotAmmo], eq->itemnames[invslot::slotAmmo], sizeof(emu->itemnames[EQEmu::invslot::slotAmmo])); - emu->itemicons[EQEmu::invslot::slotAmmo] = eq->itemicons[invslot::slotAmmo]; + strn0cpy(emu->itemnames[EQ::invslot::slotAmmo], eq->itemnames[invslot::slotAmmo], sizeof(emu->itemnames[EQ::invslot::slotAmmo])); + emu->itemicons[EQ::invslot::slotAmmo] = eq->itemicons[invslot::slotAmmo]; // nullify power source element in server array - strn0cpy(emu->itemnames[EQEmu::invslot::slotPowerSource], "", sizeof(emu->itemnames[EQEmu::invslot::slotPowerSource])); - emu->itemicons[EQEmu::invslot::slotPowerSource] = 0xFFFFFFFF; + strn0cpy(emu->itemnames[EQ::invslot::slotPowerSource], "", sizeof(emu->itemnames[EQ::invslot::slotPowerSource])); + emu->itemicons[EQ::invslot::slotPowerSource] = 0xFFFFFFFF; strn0cpy(emu->text, eq->text, sizeof(emu->text)); @@ -2053,7 +2053,7 @@ namespace Titanium for (int i = 0; i < spells::SPELL_GEM_COUNT; ++i) IN(spell[i]); - for (int i = spells::SPELL_GEM_COUNT; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (int i = spells::SPELL_GEM_COUNT; i < EQ::spells::SPELL_GEM_COUNT; ++i) emu->spell[i] = 0xFFFFFFFF; IN(unknown); @@ -2273,9 +2273,9 @@ namespace Titanium } // file scope helper methods - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth) { + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth) { const char *protection = "\\\\\\\\\\"; - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); ob << StringFormat( "%.*s%s", @@ -2293,7 +2293,7 @@ namespace Titanium ob << '|' << itoa((!inst->GetMerchantSlot() ? inst->GetSerialNumber() : inst->GetMerchantSlot())); // merchant serial number ob << '|' << itoa(inst->GetRecastTimestamp()); // recast timestamp - ob << '|' << itoa(((inst->IsStackable() ? ((inst->GetItem()->ItemType == EQEmu::item::ItemTypePotion) ? 1 : 0) + ob << '|' << itoa(((inst->IsStackable() ? ((inst->GetItem()->ItemType == EQ::item::ItemTypePotion) ? 1 : 0) : inst->GetCharges()))); // charge count ob << '|' << itoa((inst->IsAttuned() ? 1 : 0)); // inst attuned ob << '|' << itoa(0); // unknown @@ -2502,10 +2502,10 @@ namespace Titanium ob << StringFormat("%.*s\"", depth, protection); // Quotes (and protection, if needed) around static data // Sub data - for (int index = EQEmu::invbag::SLOT_BEGIN; index <= invbag::SLOT_END; ++index) { + for (int index = EQ::invbag::SLOT_BEGIN; index <= invbag::SLOT_END; ++index) { ob << '|'; - EQEmu::ItemInstance *sub = inst->GetItem(index); + EQ::ItemInstance *sub = inst->GetItem(index); if (!sub) continue; @@ -2525,59 +2525,59 @@ namespace Titanium static inline int16 ServerToTitaniumSlot(uint32 server_slot) { int16 titanium_slot = invslot::SLOT_INVALID; - if (server_slot <= EQEmu::invslot::slotWaist) { + if (server_slot <= EQ::invslot::slotWaist) { titanium_slot = server_slot; } - else if (server_slot == EQEmu::invslot::slotAmmo) { + else if (server_slot == EQ::invslot::slotAmmo) { titanium_slot = server_slot - 1; } - else if (server_slot <= EQEmu::invslot::slotGeneral8 && server_slot >= EQEmu::invslot::slotGeneral1) { + else if (server_slot <= EQ::invslot::slotGeneral8 && server_slot >= EQ::invslot::slotGeneral1) { titanium_slot = server_slot - 1; } - else if (server_slot <= (EQEmu::invslot::POSSESSIONS_COUNT + EQEmu::invslot::slotWaist) && - server_slot >= EQEmu::invslot::slotCursor) { + else if (server_slot <= (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotWaist) && + server_slot >= EQ::invslot::slotCursor) { titanium_slot = server_slot - 3; } - else if (server_slot == (EQEmu::invslot::POSSESSIONS_COUNT + EQEmu::invslot::slotAmmo)) { + else if (server_slot == (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotAmmo)) { titanium_slot = server_slot - 4; } - else if (server_slot <= EQEmu::invbag::GENERAL_BAGS_8_END && - server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::GENERAL_BAGS_8_END && + server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { + else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) { titanium_slot = server_slot - 20; } - else if (server_slot <= EQEmu::invslot::TRIBUTE_END && server_slot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::GUILD_TRIBUTE_END && - server_slot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (server_slot <= EQ::invslot::GUILD_TRIBUTE_END && + server_slot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { titanium_slot = server_slot; } - else if (server_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (server_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::BANK_END && server_slot >= EQEmu::invslot::BANK_BEGIN) { + else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::BANK_BAGS_16_END && server_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::BANK_BAGS_16_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::SHARED_BANK_END && server_slot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && - server_slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && + server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::TRADE_END && server_slot >= EQEmu::invslot::TRADE_BEGIN) { + else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invbag::TRADE_BAGS_END && server_slot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { + else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) { titanium_slot = server_slot; } - else if (server_slot <= EQEmu::invslot::WORLD_END && server_slot >= EQEmu::invslot::WORLD_BEGIN) { + else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) { titanium_slot = server_slot; } @@ -2590,16 +2590,16 @@ namespace Titanium static inline int16 ServerToTitaniumCorpseSlot(uint32 server_corpse_slot) { int16 titanium_slot = invslot::SLOT_INVALID; - if (server_corpse_slot <= EQEmu::invslot::slotGeneral8 && server_corpse_slot >= EQEmu::invslot::slotGeneral1) { + if (server_corpse_slot <= EQ::invslot::slotGeneral8 && server_corpse_slot >= EQ::invslot::slotGeneral1) { titanium_slot = server_corpse_slot - 1; } - else if (server_corpse_slot <= (EQEmu::invslot::POSSESSIONS_COUNT + EQEmu::invslot::slotWaist) && - server_corpse_slot >= EQEmu::invslot::slotCursor) { + else if (server_corpse_slot <= (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotWaist) && + server_corpse_slot >= EQ::invslot::slotCursor) { titanium_slot = server_corpse_slot - 3; } - else if (server_corpse_slot == (EQEmu::invslot::POSSESSIONS_COUNT + EQEmu::invslot::slotAmmo)) { + else if (server_corpse_slot == (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotAmmo)) { titanium_slot = server_corpse_slot - 4; } @@ -2613,7 +2613,7 @@ namespace Titanium } static inline uint32 TitaniumToServerSlot(int16 titanium_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (titanium_slot <= invslot::slotWaist) { server_slot = titanium_slot; @@ -2675,7 +2675,7 @@ namespace Titanium static inline uint32 TitaniumToServerCorpseSlot(int16 titanium_corpse_slot) { - uint32 server_slot = EQEmu::invslot::SLOT_INVALID; + uint32 server_slot = EQ::invslot::SLOT_INVALID; if (titanium_corpse_slot <= invslot::slotGeneral8 && titanium_corpse_slot >= invslot::slotGeneral1) { server_slot = titanium_corpse_slot + 1; @@ -2696,7 +2696,7 @@ namespace Titanium static inline void ServerToTitaniumSayLink(std::string &titanium_saylink, const std::string &server_saylink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) { titanium_saylink = server_saylink; return; } @@ -2705,7 +2705,7 @@ namespace Titanium for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { titanium_saylink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -2736,7 +2736,7 @@ namespace Titanium static inline void TitaniumToServerSayLink(std::string &server_saylink, const std::string &titanium_saylink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (titanium_saylink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (titanium_saylink.find('\x12') == std::string::npos)) { server_saylink = titanium_saylink; return; } @@ -2772,85 +2772,85 @@ namespace Titanium } } - static inline spells::CastingSlot ServerToTitaniumCastingSlot(EQEmu::spells::CastingSlot slot) { + static inline spells::CastingSlot ServerToTitaniumCastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::Item: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::PotionBelt; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot TitaniumToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) { + static inline EQ::spells::CastingSlot TitaniumToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Ability: - return EQEmu::spells::CastingSlot::Ability; + return EQ::spells::CastingSlot::Ability; // Tit uses 10 for item and discipline casting, but items have a valid location case spells::CastingSlot::Item: if (item_location == INVALID_INDEX) - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; else - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::PotionBelt: - return EQEmu::spells::CastingSlot::PotionBelt; + return EQ::spells::CastingSlot::PotionBelt; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } static inline int ServerToTitaniumBuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -2859,11 +2859,11 @@ namespace Titanium { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/titanium.h b/common/patches/titanium.h index 2f063c9ad..9e5cc7af5 100644 --- a/common/patches/titanium.h +++ b/common/patches/titanium.h @@ -43,7 +43,7 @@ namespace Titanium protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/titanium_limits.h b/common/patches/titanium_limits.h index 5a804defb..09d3d99ca 100644 --- a/common/patches/titanium_limits.h +++ b/common/patches/titanium_limits.h @@ -31,7 +31,7 @@ namespace Titanium const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::Titanium; } const bool ConcatenateInvTypeLimbo = true; @@ -43,7 +43,7 @@ namespace Titanium } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::Titanium; } namespace enum_ { enum InventoryTypes : int16 { @@ -106,7 +106,7 @@ namespace Titanium } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::Titanium; } namespace enum_ { enum InventorySlots : int16 { @@ -204,7 +204,7 @@ namespace Titanium } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::Titanium; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -236,7 +236,7 @@ namespace Titanium } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::Titanium; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -248,7 +248,7 @@ namespace Titanium } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::Titanium; } enum ItemPacketType : int { ItemPacketMerchant = 100, @@ -266,7 +266,7 @@ namespace Titanium } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::Titanium; } const int16 BANDOLIERS_SIZE = 4; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -278,11 +278,11 @@ namespace Titanium } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::Titanium; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::DoD; // Someone had this as PoR in another section... - const uint32 EXPANSION_BIT = EQEmu::expansions::bitDoD; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskDoD; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::DoD; // Someone had this as PoR in another section... + const uint32 EXPANSION_BIT = EQ::expansions::bitDoD; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskDoD; const size_t CHARACTER_CREATION_LIMIT = 8; // Hard-coded in client - DO NOT ALTER @@ -291,21 +291,21 @@ namespace Titanium } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::Titanium; } const bool CoinHasWeight = true; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::Titanium; } - const size_t LastUsableSkill = EQEmu::skills::SkillFrenzy; + const size_t LastUsableSkill = EQ::skills::SkillFrenzy; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::Titanium; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::Titanium; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/titanium_structs.h b/common/patches/titanium_structs.h index de350db0b..f620089d6 100644 --- a/common/patches/titanium_structs.h +++ b/common/patches/titanium_structs.h @@ -161,7 +161,7 @@ struct TintProfile { Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -184,7 +184,7 @@ struct TextureProfile Texture_Struct Primary; Texture_Struct Secondary; }; - Texture_Struct Slot[EQEmu::textures::materialCount]; + Texture_Struct Slot[EQ::textures::materialCount]; }; TextureProfile(); diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 576996e76..49c13833d 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -43,7 +43,7 @@ namespace UF static OpcodeManager *opcodes = nullptr; static Strategy struct_strategy; - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth); + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth); // server to client inventory location converters static inline uint32 ServerToUFSlot(uint32 serverSlot); @@ -59,8 +59,8 @@ namespace UF // client to server say link converter static inline void UFToServerSayLink(std::string& serverSayLink, const std::string& ufSayLink); - static inline spells::CastingSlot ServerToUFCastingSlot(EQEmu::spells::CastingSlot slot); - static inline EQEmu::spells::CastingSlot UFToServerCastingSlot(spells::CastingSlot slot); + static inline spells::CastingSlot ServerToUFCastingSlot(EQ::spells::CastingSlot slot); + static inline EQ::spells::CastingSlot UFToServerCastingSlot(spells::CastingSlot slot); static inline int ServerToUFBuffSlot(int index); static inline int UFToServerBuffSlot(int index); @@ -144,9 +144,9 @@ namespace UF return(r); } - const EQEmu::versions::ClientVersion Strategy::ClientVersion() const + const EQ::versions::ClientVersion Strategy::ClientVersion() const { - return EQEmu::versions::ClientVersion::UF; + return EQ::versions::ClientVersion::UF; } #include "ss_define.h" @@ -501,24 +501,24 @@ namespace UF //store away the emu struct uchar* __emu_buffer = in->pBuffer; - int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct); - if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) { + int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct); + if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) { Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", - opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct)); + opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct)); delete in; return; } - EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer; + EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer; - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)&item_count, sizeof(uint32)); for (int index = 0; index < item_count; ++index, ++eq) { - SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0); if (ob.tellp() == last_pos) LogNetcode("UF::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id); @@ -1268,14 +1268,14 @@ namespace UF //store away the emu struct uchar* __emu_buffer = in->pBuffer; - EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]); + EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); ob.write((const char*)__emu_buffer, 4); - SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); + SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0); if (ob.tellp() == last_pos) { LogNetcode("UF::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id); delete in; @@ -1693,7 +1693,7 @@ namespace UF OUT(hairstyle); OUT(beard); // OUT(unknown00178[10]); - for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) { + for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) { eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material; eq->equipment.Slot[r].Unknown1 = 0; eq->equipment.Slot[r].EliteMaterial = 0; @@ -1725,7 +1725,7 @@ namespace UF OUT(face); // OUT(unknown02264[47]); - if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) { + if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) { for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; @@ -1734,14 +1734,14 @@ namespace UF } } else { - for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) { + for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) { if (emu->spell_book[r] <= spells::SPELL_ID_MAX) eq->spell_book[r] = emu->spell_book[r]; else eq->spell_book[r] = 0xFFFFFFFFU; } // invalidate the rest of the spellbook slots - memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE))); + memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE))); } // OUT(unknown4184[128]); @@ -1797,7 +1797,7 @@ namespace UF // OUT(unknown06160[4]); // Copy bandoliers where server and client indices converge - for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { + for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) { OUT_str(bandoliers[r].Name); for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true OUT(bandoliers[r].Items[k].ID); @@ -1806,7 +1806,7 @@ namespace UF } } // Nullify bandoliers where server and client indices diverge, with a client bias - for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { + for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) { eq->bandoliers[r].Name[0] = '\0'; for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true eq->bandoliers[r].Items[k].ID = 0; @@ -1818,13 +1818,13 @@ namespace UF // OUT(unknown07444[5120]); // Copy potion belt where server and client indices converge - for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { + for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) { OUT(potionbelt.Items[r].ID); OUT(potionbelt.Items[r].Icon); OUT_str(potionbelt.Items[r].Name); } // Nullify potion belt where server and client indices diverge, with a client bias - for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { + for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) { eq->potionbelt.Items[r].ID = 0; eq->potionbelt.Items[r].Icon = 0; eq->potionbelt.Items[r].Name[0] = '\0'; @@ -2196,7 +2196,7 @@ namespace UF eq_cse->HairColor = emu_cse->HairColor; eq_cse->Face = emu_cse->Face; - for (int equip_index = EQEmu::textures::textureBegin; equip_index < EQEmu::textures::materialCount; equip_index++) { + for (int equip_index = EQ::textures::textureBegin; equip_index < EQ::textures::materialCount; equip_index++) { eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material; eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1; eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel; @@ -2755,7 +2755,7 @@ namespace UF float SpawnSize = emu->size; if (!((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522))) { - PacketSize -= (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + PacketSize -= (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); if (emu->size == 0) { @@ -2954,7 +2954,7 @@ namespace UF if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)) { - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; ++k) + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) { { VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment_tint.Slot[k].Color); @@ -2990,7 +2990,7 @@ namespace UF { structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; - for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) { + for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) { if (emu->equipment.Slot[k].Material > 99999) { Equipment[k].Material = 63; } else { @@ -3000,7 +3000,7 @@ namespace UF Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteModel; } - Buffer += (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount); + Buffer += (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); } if (strlen(emu->title)) { @@ -3498,7 +3498,7 @@ namespace UF DECODE_LENGTH_EXACT(structs::LoadSpellSet_Struct); SETUP_DIRECT_DECODE(LoadSpellSet_Struct, structs::LoadSpellSet_Struct); - for (unsigned int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (unsigned int i = 0; i < EQ::spells::SPELL_GEM_COUNT; ++i) if (eq->spell[i] == 0) emu->spell[i] = 0xFFFFFFFF; else @@ -3737,9 +3737,9 @@ namespace UF return NextItemInstSerialNumber; } - void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth) + void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth) { - const EQEmu::ItemData *item = inst->GetUnscaledItem(); + const EQ::ItemData *item = inst->GetUnscaledItem(); UF::structs::ItemSerializationHeader hdr; @@ -3783,7 +3783,7 @@ namespace UF int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); uint16 ornaIcon = 0; if (inst->GetOrnamentationAug(ornamentationAugtype)) { - const EQEmu::ItemData *aug_weap = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); + const EQ::ItemData *aug_weap = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); ornaIcon = aug_weap->Icon; ob.write(aug_weap->IDFile, strlen(aug_weap->IDFile)); @@ -3968,7 +3968,7 @@ namespace UF // Done to hack older clients to label expendable fishing poles as such // July 28th, 2018 patch - if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) { itbs.expendablearrow = 1; } @@ -4116,30 +4116,30 @@ namespace UF ob.write((const char*)&iqbs, sizeof(UF::structs::ItemQuaternaryBodyStruct)); - EQEmu::OutBuffer::pos_type count_pos = ob.tellp(); + EQ::OutBuffer::pos_type count_pos = ob.tellp(); uint32 subitem_count = 0; ob.write((const char*)&subitem_count, sizeof(uint32)); // moved outside of loop since it is not modified within that scope - int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID; + int16 SubSlotNumber = EQ::invbag::SLOT_INVALID; - if (slot_id_in <= EQEmu::invslot::slotGeneral8 && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN) - SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::slotGeneral9) - SubSlotNumber = EQEmu::invbag::SLOT_INVALID; - else if (slot_id_in == EQEmu::invslot::slotCursor) - SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); - else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN) - SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT); + if (slot_id_in <= EQ::invslot::slotGeneral8 && slot_id_in >= EQ::invslot::GENERAL_BEGIN) + SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::slotGeneral9) + SubSlotNumber = EQ::invbag::SLOT_INVALID; + else if (slot_id_in == EQ::invslot::slotCursor) + SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN; + else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN) + SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT); + else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN) + SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT); else SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now - if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) { - for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { - EQEmu::ItemInstance* sub = inst->GetItem(index); + if (SubSlotNumber != EQ::invbag::SLOT_INVALID) { + for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { + EQ::ItemInstance* sub = inst->GetItem(index); if (!sub) continue; @@ -4158,59 +4158,59 @@ namespace UF { uint32 UFSlot = invslot::SLOT_INVALID; - if (serverSlot <= EQEmu::invslot::slotGeneral8) { + if (serverSlot <= EQ::invslot::slotGeneral8) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::CORPSE_END && serverSlot >= EQEmu::invslot::slotCursor) { + else if (serverSlot <= EQ::invslot::CORPSE_END && serverSlot >= EQ::invslot::slotCursor) { UFSlot = serverSlot - 2; } - else if (serverSlot <= EQEmu::invbag::GENERAL_BAGS_8_END && serverSlot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::GENERAL_BAGS_8_END && serverSlot >= EQ::invbag::GENERAL_BAGS_BEGIN) { UFSlot = serverSlot + 11; } - else if (serverSlot <= EQEmu::invbag::CURSOR_BAG_END && serverSlot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { + else if (serverSlot <= EQ::invbag::CURSOR_BAG_END && serverSlot >= EQ::invbag::CURSOR_BAG_BEGIN) { UFSlot = serverSlot - 9; } - else if (serverSlot <= EQEmu::invslot::TRIBUTE_END && serverSlot >= EQEmu::invslot::TRIBUTE_BEGIN) { + else if (serverSlot <= EQ::invslot::TRIBUTE_END && serverSlot >= EQ::invslot::TRIBUTE_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::GUILD_TRIBUTE_END && serverSlot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) { + else if (serverSlot <= EQ::invslot::GUILD_TRIBUTE_END && serverSlot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + else if (serverSlot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::BANK_END && serverSlot >= EQEmu::invslot::BANK_BEGIN) { + else if (serverSlot <= EQ::invslot::BANK_END && serverSlot >= EQ::invslot::BANK_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::BANK_BAGS_END && serverSlot >= EQEmu::invbag::BANK_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::BANK_BAGS_END && serverSlot >= EQ::invbag::BANK_BAGS_BEGIN) { UFSlot = serverSlot + 1; } - else if (serverSlot <= EQEmu::invslot::SHARED_BANK_END && serverSlot >= EQEmu::invslot::SHARED_BANK_BEGIN) { + else if (serverSlot <= EQ::invslot::SHARED_BANK_END && serverSlot >= EQ::invslot::SHARED_BANK_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) { UFSlot = serverSlot + 1; } - else if (serverSlot <= EQEmu::invslot::TRADE_END && serverSlot >= EQEmu::invslot::TRADE_BEGIN) { + else if (serverSlot <= EQ::invslot::TRADE_END && serverSlot >= EQ::invslot::TRADE_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invbag::TRADE_BAGS_END && serverSlot >= EQEmu::invbag::TRADE_BAGS_BEGIN) { + else if (serverSlot <= EQ::invbag::TRADE_BAGS_END && serverSlot >= EQ::invbag::TRADE_BAGS_BEGIN) { UFSlot = serverSlot; } - else if (serverSlot <= EQEmu::invslot::WORLD_END && serverSlot >= EQEmu::invslot::WORLD_BEGIN) { + else if (serverSlot <= EQ::invslot::WORLD_END && serverSlot >= EQ::invslot::WORLD_BEGIN) { UFSlot = serverSlot; } @@ -4223,11 +4223,11 @@ namespace UF { uint32 UFSlot = invslot::SLOT_INVALID; - if (serverCorpseSlot <= EQEmu::invslot::slotGeneral8 && serverCorpseSlot >= EQEmu::invslot::slotGeneral1) { + if (serverCorpseSlot <= EQ::invslot::slotGeneral8 && serverCorpseSlot >= EQ::invslot::slotGeneral1) { UFSlot = serverCorpseSlot; } - else if (serverCorpseSlot <= EQEmu::invslot::CORPSE_END && serverCorpseSlot >= EQEmu::invslot::slotCursor) { + else if (serverCorpseSlot <= EQ::invslot::CORPSE_END && serverCorpseSlot >= EQ::invslot::slotCursor) { UFSlot = serverCorpseSlot - 2; } @@ -4238,7 +4238,7 @@ namespace UF static inline uint32 UFToServerSlot(uint32 ufSlot) { - uint32 ServerSlot = EQEmu::invslot::SLOT_INVALID; + uint32 ServerSlot = EQ::invslot::SLOT_INVALID; if (ufSlot <= invslot::slotGeneral8) { ServerSlot = ufSlot; @@ -4303,7 +4303,7 @@ namespace UF static inline uint32 UFToServerCorpseSlot(uint32 ufCorpseSlot) { - uint32 ServerSlot = EQEmu::invslot::SLOT_INVALID; + uint32 ServerSlot = EQ::invslot::SLOT_INVALID; if (ufCorpseSlot <= invslot::slotGeneral8 && ufCorpseSlot >= invslot::slotGeneral1) { ServerSlot = ufCorpseSlot; @@ -4320,7 +4320,7 @@ namespace UF static inline void ServerToUFSayLink(std::string& ufSayLink, const std::string& serverSayLink) { - if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (serverSayLink.find('\x12') == std::string::npos)) { + if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (serverSayLink.find('\x12') == std::string::npos)) { ufSayLink = serverSayLink; return; } @@ -4329,7 +4329,7 @@ namespace UF for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) { ufSayLink.append(segments[segment_iter]); // TODO: log size mismatch error continue; @@ -4360,7 +4360,7 @@ namespace UF static inline void UFToServerSayLink(std::string& serverSayLink, const std::string& ufSayLink) { - if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (ufSayLink.find('\x12') == std::string::npos)) { + if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (ufSayLink.find('\x12') == std::string::npos)) { serverSayLink = ufSayLink; return; } @@ -4394,92 +4394,92 @@ namespace UF } } - static inline spells::CastingSlot ServerToUFCastingSlot(EQEmu::spells::CastingSlot slot) + static inline spells::CastingSlot ServerToUFCastingSlot(EQ::spells::CastingSlot slot) { switch (slot) { - case EQEmu::spells::CastingSlot::Gem1: + case EQ::spells::CastingSlot::Gem1: return spells::CastingSlot::Gem1; - case EQEmu::spells::CastingSlot::Gem2: + case EQ::spells::CastingSlot::Gem2: return spells::CastingSlot::Gem2; - case EQEmu::spells::CastingSlot::Gem3: + case EQ::spells::CastingSlot::Gem3: return spells::CastingSlot::Gem3; - case EQEmu::spells::CastingSlot::Gem4: + case EQ::spells::CastingSlot::Gem4: return spells::CastingSlot::Gem4; - case EQEmu::spells::CastingSlot::Gem5: + case EQ::spells::CastingSlot::Gem5: return spells::CastingSlot::Gem5; - case EQEmu::spells::CastingSlot::Gem6: + case EQ::spells::CastingSlot::Gem6: return spells::CastingSlot::Gem6; - case EQEmu::spells::CastingSlot::Gem7: + case EQ::spells::CastingSlot::Gem7: return spells::CastingSlot::Gem7; - case EQEmu::spells::CastingSlot::Gem8: + case EQ::spells::CastingSlot::Gem8: return spells::CastingSlot::Gem8; - case EQEmu::spells::CastingSlot::Gem9: + case EQ::spells::CastingSlot::Gem9: return spells::CastingSlot::Gem9; - case EQEmu::spells::CastingSlot::Gem10: + case EQ::spells::CastingSlot::Gem10: return spells::CastingSlot::Gem10; - case EQEmu::spells::CastingSlot::Gem11: + case EQ::spells::CastingSlot::Gem11: return spells::CastingSlot::Gem11; - case EQEmu::spells::CastingSlot::Gem12: + case EQ::spells::CastingSlot::Gem12: return spells::CastingSlot::Gem12; - case EQEmu::spells::CastingSlot::Item: - case EQEmu::spells::CastingSlot::PotionBelt: + case EQ::spells::CastingSlot::Item: + case EQ::spells::CastingSlot::PotionBelt: return spells::CastingSlot::Item; - case EQEmu::spells::CastingSlot::Discipline: + case EQ::spells::CastingSlot::Discipline: return spells::CastingSlot::Discipline; - case EQEmu::spells::CastingSlot::AltAbility: + case EQ::spells::CastingSlot::AltAbility: return spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something return spells::CastingSlot::Discipline; } } - static inline EQEmu::spells::CastingSlot UFToServerCastingSlot(spells::CastingSlot slot) + static inline EQ::spells::CastingSlot UFToServerCastingSlot(spells::CastingSlot slot) { switch (slot) { case spells::CastingSlot::Gem1: - return EQEmu::spells::CastingSlot::Gem1; + return EQ::spells::CastingSlot::Gem1; case spells::CastingSlot::Gem2: - return EQEmu::spells::CastingSlot::Gem2; + return EQ::spells::CastingSlot::Gem2; case spells::CastingSlot::Gem3: - return EQEmu::spells::CastingSlot::Gem3; + return EQ::spells::CastingSlot::Gem3; case spells::CastingSlot::Gem4: - return EQEmu::spells::CastingSlot::Gem4; + return EQ::spells::CastingSlot::Gem4; case spells::CastingSlot::Gem5: - return EQEmu::spells::CastingSlot::Gem5; + return EQ::spells::CastingSlot::Gem5; case spells::CastingSlot::Gem6: - return EQEmu::spells::CastingSlot::Gem6; + return EQ::spells::CastingSlot::Gem6; case spells::CastingSlot::Gem7: - return EQEmu::spells::CastingSlot::Gem7; + return EQ::spells::CastingSlot::Gem7; case spells::CastingSlot::Gem8: - return EQEmu::spells::CastingSlot::Gem8; + return EQ::spells::CastingSlot::Gem8; case spells::CastingSlot::Gem9: - return EQEmu::spells::CastingSlot::Gem9; + return EQ::spells::CastingSlot::Gem9; case spells::CastingSlot::Gem10: - return EQEmu::spells::CastingSlot::Gem10; + return EQ::spells::CastingSlot::Gem10; case spells::CastingSlot::Gem11: - return EQEmu::spells::CastingSlot::Gem11; + return EQ::spells::CastingSlot::Gem11; case spells::CastingSlot::Gem12: - return EQEmu::spells::CastingSlot::Gem12; + return EQ::spells::CastingSlot::Gem12; case spells::CastingSlot::Discipline: - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; case spells::CastingSlot::Item: - return EQEmu::spells::CastingSlot::Item; + return EQ::spells::CastingSlot::Item; case spells::CastingSlot::AltAbility: - return EQEmu::spells::CastingSlot::AltAbility; + return EQ::spells::CastingSlot::AltAbility; default: // we shouldn't have any issues with other slots ... just return something - return EQEmu::spells::CastingSlot::Discipline; + return EQ::spells::CastingSlot::Discipline; } } static inline int ServerToUFBuffSlot(int index) { // we're a disc - if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS) - return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS + + if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS) + return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS + spells::LONG_BUFFS + spells::SHORT_BUFFS; // we're a song - if (index >= EQEmu::spells::LONG_BUFFS) - return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS; + if (index >= EQ::spells::LONG_BUFFS) + return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } @@ -4488,11 +4488,11 @@ namespace UF { // we're a disc if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS) - return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS + - EQEmu::spells::SHORT_BUFFS; + return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS + + EQ::spells::SHORT_BUFFS; // we're a song if (index >= spells::LONG_BUFFS) - return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS; + return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS; // we're a normal buff return index; // as long as we guard against bad slots server side, we should be fine } diff --git a/common/patches/uf.h b/common/patches/uf.h index c36d9e851..465f32e74 100644 --- a/common/patches/uf.h +++ b/common/patches/uf.h @@ -43,7 +43,7 @@ namespace UF protected: virtual std::string Describe() const; - virtual const EQEmu::versions::ClientVersion ClientVersion() const; + virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" diff --git a/common/patches/uf_limits.h b/common/patches/uf_limits.h index 429d57cd5..978699ed2 100644 --- a/common/patches/uf_limits.h +++ b/common/patches/uf_limits.h @@ -31,7 +31,7 @@ namespace UF const int16 INULL = 0; namespace inventory { - inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::UF; } const bool ConcatenateInvTypeLimbo = true; @@ -43,7 +43,7 @@ namespace UF } /*inventory*/ namespace invtype { - inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::UF; } namespace enum_ { enum InventoryTypes : int16 { @@ -106,7 +106,7 @@ namespace UF } /*invtype*/ namespace invslot { - inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::UF; } namespace enum_ { enum InventorySlots : int16 { @@ -205,7 +205,7 @@ namespace UF } /*invslot*/ namespace invbag { - inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::UF; } const int16 SLOT_INVALID = IINVALID; const int16 SLOT_BEGIN = INULL; @@ -237,7 +237,7 @@ namespace UF } /*invbag*/ namespace invaug { - inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::UF; } const int16 SOCKET_INVALID = IINVALID; const int16 SOCKET_BEGIN = INULL; @@ -249,7 +249,7 @@ namespace UF } /*invaug*/ namespace item { - inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::UF; } enum ItemPacketType : int { ItemPacketMerchant = 100, @@ -268,7 +268,7 @@ namespace UF } /*item*/ namespace profile { - inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::UF; } const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance @@ -280,11 +280,11 @@ namespace UF } /*profile*/ namespace constants { - inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::UF; } - const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::UF; - const uint32 EXPANSION_BIT = EQEmu::expansions::bitUF; - const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskUF; + const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::UF; + const uint32 EXPANSION_BIT = EQ::expansions::bitUF; + const uint32 EXPANSIONS_MASK = EQ::expansions::maskUF; const size_t CHARACTER_CREATION_LIMIT = 12; @@ -293,21 +293,21 @@ namespace UF } /*constants*/ namespace behavior { - inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::UF; } const bool CoinHasWeight = false; } /*behavior*/ namespace skills { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::UF; } - const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack; + const size_t LastUsableSkill = EQ::skills::SkillTripleAttack; } /*skills*/ namespace spells { - inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::UF; } + inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::UF; } enum class CastingSlot : uint32 { Gem1 = 0, diff --git a/common/patches/uf_structs.h b/common/patches/uf_structs.h index 3a66e2a88..a87ab7a07 100644 --- a/common/patches/uf_structs.h +++ b/common/patches/uf_structs.h @@ -149,7 +149,7 @@ struct TintProfile Tint_Struct Primary; Tint_Struct Secondary; }; - Tint_Struct Slot[EQEmu::textures::materialCount]; + Tint_Struct Slot[EQ::textures::materialCount]; }; }; @@ -178,7 +178,7 @@ struct TextureProfile Texture_Struct Primary; Texture_Struct Secondary; }; - Texture_Struct Slot[EQEmu::textures::materialCount]; + Texture_Struct Slot[EQ::textures::materialCount]; }; TextureProfile(); @@ -195,7 +195,7 @@ struct CharacterSelectEntry_Struct /*0000*/ uint8 Beard; // /*0001*/ uint8 HairColor; // /*0000*/ uint8 Face; // -/*0000*/ CharSelectEquip Equip[EQEmu::textures::materialCount]; +/*0000*/ CharSelectEquip Equip[EQ::textures::materialCount]; /*0000*/ uint32 PrimaryIDFile; // /*0000*/ uint32 SecondaryIDFile; // /*0000*/ uint8 Unknown15; // 0xff diff --git a/common/profanity_manager.cpp b/common/profanity_manager.cpp index 70817576f..005fc4909 100644 --- a/common/profanity_manager.cpp +++ b/common/profanity_manager.cpp @@ -28,7 +28,7 @@ static std::list profanity_list; static bool update_originator_flag = false; -bool EQEmu::ProfanityManager::LoadProfanityList(DBcore *db) { +bool EQ::ProfanityManager::LoadProfanityList(DBcore *db) { if (update_originator_flag == true) { update_originator_flag = false; return true; @@ -40,7 +40,7 @@ bool EQEmu::ProfanityManager::LoadProfanityList(DBcore *db) { return true; } -bool EQEmu::ProfanityManager::UpdateProfanityList(DBcore *db) { +bool EQ::ProfanityManager::UpdateProfanityList(DBcore *db) { if (!load_database_entries(db)) return false; @@ -49,7 +49,7 @@ bool EQEmu::ProfanityManager::UpdateProfanityList(DBcore *db) { return true; } -bool EQEmu::ProfanityManager::DeleteProfanityList(DBcore *db) { +bool EQ::ProfanityManager::DeleteProfanityList(DBcore *db) { if (!clear_database_entries(db)) return false; @@ -58,7 +58,7 @@ bool EQEmu::ProfanityManager::DeleteProfanityList(DBcore *db) { return true; } -bool EQEmu::ProfanityManager::AddProfanity(DBcore *db, const char *profanity) { +bool EQ::ProfanityManager::AddProfanity(DBcore *db, const char *profanity) { if (!db || !profanity) return false; @@ -86,7 +86,7 @@ bool EQEmu::ProfanityManager::AddProfanity(DBcore *db, const char *profanity) { return true; } -bool EQEmu::ProfanityManager::RemoveProfanity(DBcore *db, const char *profanity) { +bool EQ::ProfanityManager::RemoveProfanity(DBcore *db, const char *profanity) { if (!db || !profanity) return false; @@ -111,7 +111,7 @@ bool EQEmu::ProfanityManager::RemoveProfanity(DBcore *db, const char *profanity) return true; } -void EQEmu::ProfanityManager::RedactMessage(char *message) { +void EQ::ProfanityManager::RedactMessage(char *message) { if (!message) return; @@ -142,7 +142,7 @@ void EQEmu::ProfanityManager::RedactMessage(char *message) { } } -void EQEmu::ProfanityManager::RedactMessage(std::string &message) { +void EQ::ProfanityManager::RedactMessage(std::string &message) { if (message.length() < REDACTION_LENGTH_MIN || message.length() >= 4096) return; @@ -169,14 +169,14 @@ void EQEmu::ProfanityManager::RedactMessage(std::string &message) { } } -bool EQEmu::ProfanityManager::ContainsCensoredLanguage(const char *message) { +bool EQ::ProfanityManager::ContainsCensoredLanguage(const char *message) { if (!message) return false; return ContainsCensoredLanguage(std::string(message)); } -bool EQEmu::ProfanityManager::ContainsCensoredLanguage(const std::string &message) { +bool EQ::ProfanityManager::ContainsCensoredLanguage(const std::string &message) { if (message.length() < REDACTION_LENGTH_MIN || message.length() >= 4096) return false; @@ -192,15 +192,15 @@ bool EQEmu::ProfanityManager::ContainsCensoredLanguage(const std::string &messag return false; } -const std::list &EQEmu::ProfanityManager::GetProfanityList() { +const std::list &EQ::ProfanityManager::GetProfanityList() { return profanity_list; } -bool EQEmu::ProfanityManager::IsCensorshipActive() { +bool EQ::ProfanityManager::IsCensorshipActive() { return (profanity_list.size() != 0); } -bool EQEmu::ProfanityManager::load_database_entries(DBcore *db) { +bool EQ::ProfanityManager::load_database_entries(DBcore *db) { if (!db) return false; @@ -223,7 +223,7 @@ bool EQEmu::ProfanityManager::load_database_entries(DBcore *db) { return true; } -bool EQEmu::ProfanityManager::clear_database_entries(DBcore *db) { +bool EQ::ProfanityManager::clear_database_entries(DBcore *db) { if (!db) return false; @@ -237,7 +237,7 @@ bool EQEmu::ProfanityManager::clear_database_entries(DBcore *db) { return true; } -bool EQEmu::ProfanityManager::check_for_existing_entry(const char *profanity) { +bool EQ::ProfanityManager::check_for_existing_entry(const char *profanity) { if (!profanity) return false; diff --git a/common/profanity_manager.h b/common/profanity_manager.h index fa601f0f0..a1ad93a86 100644 --- a/common/profanity_manager.h +++ b/common/profanity_manager.h @@ -26,7 +26,7 @@ class DBcore; -namespace EQEmu +namespace EQ { class ProfanityManager { public: diff --git a/common/random.h b/common/random.h index 0c877bfea..203755efd 100644 --- a/common/random.h +++ b/common/random.h @@ -32,7 +32,7 @@ * Eventually this should be derived from an abstract base class */ -namespace EQEmu { +namespace EQ { class Random { public: // AKA old MakeRandomInt @@ -80,7 +80,7 @@ namespace EQEmu { { static_assert(std::is_same::iterator_category>::value, - "EQEmu::Random::Shuffle requires random access iterators"); + "EQ::Random::Shuffle requires random access iterators"); std::shuffle(first, last, m_gen); } diff --git a/common/say_link.cpp b/common/say_link.cpp index f4937fe88..5fb847294 100644 --- a/common/say_link.cpp +++ b/common/say_link.cpp @@ -26,10 +26,10 @@ #include "../zone/zonedb.h" -bool EQEmu::saylink::DegenerateLinkBody(SayLinkBody_Struct &say_link_body_struct, const std::string &say_link_body) +bool EQ::saylink::DegenerateLinkBody(SayLinkBody_Struct &say_link_body_struct, const std::string &say_link_body) { memset(&say_link_body_struct, 0, sizeof(say_link_body_struct)); - if (say_link_body.length() != EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (say_link_body.length() != EQ::constants::SAY_LINK_BODY_SIZE) { return false; } @@ -50,7 +50,7 @@ bool EQEmu::saylink::DegenerateLinkBody(SayLinkBody_Struct &say_link_body_struct return true; } -bool EQEmu::saylink::GenerateLinkBody(std::string &say_link_body, const SayLinkBody_Struct &say_link_body_struct) +bool EQ::saylink::GenerateLinkBody(std::string &say_link_body, const SayLinkBody_Struct &say_link_body_struct) { say_link_body = StringFormat( "%1X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%05X" "%1X" "%04X" "%02X" "%05X" "%08X", @@ -69,19 +69,19 @@ bool EQEmu::saylink::GenerateLinkBody(std::string &say_link_body, const SayLinkB (0xFFFFFFFF & say_link_body_struct.hash) ); - if (say_link_body.length() != EQEmu::constants::SAY_LINK_BODY_SIZE) { + if (say_link_body.length() != EQ::constants::SAY_LINK_BODY_SIZE) { return false; } return true; } -EQEmu::SayLinkEngine::SayLinkEngine() +EQ::SayLinkEngine::SayLinkEngine() { Reset(); } -const std::string &EQEmu::SayLinkEngine::GenerateLink() +const std::string &EQ::SayLinkEngine::GenerateLink() { m_Link.clear(); m_LinkBody.clear(); @@ -90,25 +90,25 @@ const std::string &EQEmu::SayLinkEngine::GenerateLink() generate_body(); generate_text(); - if ((m_LinkBody.length() == EQEmu::constants::SAY_LINK_BODY_SIZE) && (m_LinkText.length() > 0)) { + if ((m_LinkBody.length() == EQ::constants::SAY_LINK_BODY_SIZE) && (m_LinkText.length() > 0)) { m_Link.push_back(0x12); m_Link.append(m_LinkBody); m_Link.append(m_LinkText); m_Link.push_back(0x12); } - if ((m_Link.length() == 0) || (m_Link.length() > (EQEmu::constants::SAY_LINK_MAXIMUM_SIZE))) { + if ((m_Link.length() == 0) || (m_Link.length() > (EQ::constants::SAY_LINK_MAXIMUM_SIZE))) { m_Error = true; m_Link = ""; LogError("SayLinkEngine::GenerateLink() failed to generate a useable say link"); LogError(">> LinkType: {}, Lengths: {link: {}({}), body: {}({}), text: {}({})}", m_LinkType, m_Link.length(), - EQEmu::constants::SAY_LINK_MAXIMUM_SIZE, + EQ::constants::SAY_LINK_MAXIMUM_SIZE, m_LinkBody.length(), - EQEmu::constants::SAY_LINK_BODY_SIZE, + EQ::constants::SAY_LINK_BODY_SIZE, m_LinkText.length(), - EQEmu::constants::SAY_LINK_TEXT_SIZE + EQ::constants::SAY_LINK_TEXT_SIZE ); LogError(">> LinkBody: {}", m_LinkBody.c_str()); LogError(">> LinkText: {}", m_LinkText.c_str()); @@ -117,7 +117,7 @@ const std::string &EQEmu::SayLinkEngine::GenerateLink() return m_Link; } -void EQEmu::SayLinkEngine::Reset() +void EQ::SayLinkEngine::Reset() { m_LinkType = saylink::SayLinkBlank; m_ItemData = nullptr; @@ -134,7 +134,7 @@ void EQEmu::SayLinkEngine::Reset() m_Error = false; } -void EQEmu::SayLinkEngine::generate_body() +void EQ::SayLinkEngine::generate_body() { /* Current server mask: EQClientRoF2 @@ -147,7 +147,7 @@ void EQEmu::SayLinkEngine::generate_body() memset(&m_LinkBodyStruct, 0, sizeof(SayLinkBody_Struct)); - const EQEmu::ItemData *item_data = nullptr; + const EQ::ItemData *item_data = nullptr; switch (m_LinkType) { case saylink::SayLinkBlank: @@ -257,14 +257,14 @@ void EQEmu::SayLinkEngine::generate_body() ); } -void EQEmu::SayLinkEngine::generate_text() +void EQ::SayLinkEngine::generate_text() { if (m_LinkProxyStruct.text != nullptr) { m_LinkText = m_LinkProxyStruct.text; return; } - const EQEmu::ItemData *item_data = nullptr; + const EQ::ItemData *item_data = nullptr; switch (m_LinkType) { case saylink::SayLinkBlank: @@ -291,7 +291,7 @@ void EQEmu::SayLinkEngine::generate_text() m_LinkText = "null"; } -std::string EQEmu::SayLinkEngine::GenerateQuestSaylink(std::string saylink_text, bool silent, std::string link_name) +std::string EQ::SayLinkEngine::GenerateQuestSaylink(std::string saylink_text, bool silent, std::string link_name) { uint32 saylink_id = 0; @@ -327,7 +327,7 @@ std::string EQEmu::SayLinkEngine::GenerateQuestSaylink(std::string saylink_text, /** * Generate the actual link */ - EQEmu::SayLinkEngine linker; + EQ::SayLinkEngine linker; linker.SetProxyItemID(SAYLINK_ITEM_ID); if (silent) { linker.SetProxyAugment2ID(saylink_id); diff --git a/common/say_link.h b/common/say_link.h index c282bde05..c0ea5a235 100644 --- a/common/say_link.h +++ b/common/say_link.h @@ -27,7 +27,7 @@ struct ServerLootItem_Struct; -namespace EQEmu +namespace EQ { struct ItemData; class ItemInstance; @@ -72,7 +72,7 @@ namespace EQEmu SayLinkEngine(); void SetLinkType(saylink::SayLinkType link_type) { m_LinkType = link_type; } - void SetItemData(const EQEmu::ItemData* item_data) { m_ItemData = item_data; } + void SetItemData(const EQ::ItemData* item_data) { m_ItemData = item_data; } void SetLootData(const ServerLootItem_Struct* loot_data) { m_LootData = loot_data; } void SetItemInst(const ItemInstance* item_inst) { m_ItemInst = item_inst; } diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 6c327b188..789b739a8 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -164,14 +164,14 @@ std::string SharedDatabase::GetMailKey(int CharID, bool key_only) } } -bool SharedDatabase::SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end) +bool SharedDatabase::SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end) { // Delete cursor items std::string query = StringFormat("DELETE FROM inventory WHERE charid = %i " "AND ((slotid >= 8000 AND slotid <= 8999) " "OR slotid = %i OR (slotid >= %i AND slotid <= %i) )", - char_id, EQEmu::invslot::slotCursor, - EQEmu::invbag::CURSOR_BAG_BEGIN, EQEmu::invbag::CURSOR_BAG_END); + char_id, EQ::invslot::slotCursor, + EQ::invbag::CURSOR_BAG_BEGIN, EQ::invbag::CURSOR_BAG_END); auto results = QueryDatabase(query); if (!results.Success()) { std::cout << "Clearing cursor failed: " << results.ErrorMessage() << std::endl; @@ -181,8 +181,8 @@ bool SharedDatabase::SaveCursor(uint32 char_id, std::list: int i = 8000; for(auto it = start; it != end; ++it, i++) { if (i > 8999) { break; } // shouldn't be anything in the queue that indexes this high - EQEmu::ItemInstance *inst = *it; - int16 use_slot = (i == 8000) ? EQEmu::invslot::slotCursor : i; + EQ::ItemInstance *inst = *it; + int16 use_slot = (i == 8000) ? EQ::invslot::slotCursor : i; if (!SaveInventory(char_id, inst, use_slot)) { return false; } @@ -191,7 +191,7 @@ bool SharedDatabase::SaveCursor(uint32 char_id, std::list: return true; } -bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst) +bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const EQ::ItemInstance* inst) { // Delete cursor items std::string query = StringFormat("SELECT itemid, charges FROM sharedbank " @@ -224,15 +224,15 @@ bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const EQE return true; } -bool SharedDatabase::SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) { +bool SharedDatabase::SaveInventory(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id) { //never save tribute slots: - if (slot_id >= EQEmu::invslot::TRIBUTE_BEGIN && slot_id <= EQEmu::invslot::TRIBUTE_END) + if (slot_id >= EQ::invslot::TRIBUTE_BEGIN && slot_id <= EQ::invslot::TRIBUTE_END) return true; - if (slot_id >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN && slot_id <= EQEmu::invslot::GUILD_TRIBUTE_END) + if (slot_id >= EQ::invslot::GUILD_TRIBUTE_BEGIN && slot_id <= EQ::invslot::GUILD_TRIBUTE_END) return true; - if (slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && slot_id <= EQEmu::invbag::SHARED_BANK_BAGS_END) { + if (slot_id >= EQ::invslot::SHARED_BANK_BEGIN && slot_id <= EQ::invbag::SHARED_BANK_BAGS_END) { // Shared bank inventory if (!inst) { return DeleteSharedBankSlot(char_id, slot_id); @@ -240,7 +240,7 @@ bool SharedDatabase::SaveInventory(uint32 char_id, const EQEmu::ItemInstance* in else { // Needed to clear out bag slots that 'REPLACE' in UpdateSharedBankSlot does not overwrite..otherwise, duplication occurs // (This requires that parent then child items be sent..which should be how they are currently passed) - if (EQEmu::InventoryProfile::SupportsContainers(slot_id)) + if (EQ::InventoryProfile::SupportsContainers(slot_id)) DeleteSharedBankSlot(char_id, slot_id); return UpdateSharedBankSlot(char_id, inst, slot_id); } @@ -251,18 +251,18 @@ bool SharedDatabase::SaveInventory(uint32 char_id, const EQEmu::ItemInstance* in // Needed to clear out bag slots that 'REPLACE' in UpdateInventorySlot does not overwrite..otherwise, duplication occurs // (This requires that parent then child items be sent..which should be how they are currently passed) - if (EQEmu::InventoryProfile::SupportsContainers(slot_id)) + if (EQ::InventoryProfile::SupportsContainers(slot_id)) DeleteInventorySlot(char_id, slot_id); return UpdateInventorySlot(char_id, inst, slot_id); } -bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) { +bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id) { // need to check 'inst' argument for valid pointer - uint32 augslot[EQEmu::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; + uint32 augslot[EQ::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; if (inst->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { - EQEmu::ItemInstance *auginst = inst->GetItem(i); + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { + EQ::ItemInstance *auginst = inst->GetItem(i); augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0; } } @@ -288,12 +288,12 @@ bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstan auto results = QueryDatabase(query); // Save bag contents, if slot supports bag contents - if (inst->IsClassBag() && EQEmu::InventoryProfile::SupportsContainers(slot_id)) + if (inst->IsClassBag() && EQ::InventoryProfile::SupportsContainers(slot_id)) // Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID' // messages through attrition (and the modded code in SaveInventory) - for (uint8 idx = EQEmu::invbag::SLOT_BEGIN; idx < inst->GetItem()->BagSlots && idx <= EQEmu::invbag::SLOT_END; idx++) { - const EQEmu::ItemInstance* baginst = inst->GetItem(idx); - SaveInventory(char_id, baginst, EQEmu::InventoryProfile::CalcSlotId(slot_id, idx)); + for (uint8 idx = EQ::invbag::SLOT_BEGIN; idx < inst->GetItem()->BagSlots && idx <= EQ::invbag::SLOT_END; idx++) { + const EQ::ItemInstance* baginst = inst->GetItem(idx); + SaveInventory(char_id, baginst, EQ::InventoryProfile::CalcSlotId(slot_id, idx)); } if (!results.Success()) { @@ -303,13 +303,13 @@ bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstan return true; } -bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) { +bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id) { // need to check 'inst' argument for valid pointer - uint32 augslot[EQEmu::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; + uint32 augslot[EQ::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; if (inst->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { - EQEmu::ItemInstance *auginst = inst->GetItem(i); + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { + EQ::ItemInstance *auginst = inst->GetItem(i); augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0; } } @@ -334,12 +334,12 @@ bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInsta auto results = QueryDatabase(query); // Save bag contents, if slot supports bag contents - if (inst->IsClassBag() && EQEmu::InventoryProfile::SupportsContainers(slot_id)) { + if (inst->IsClassBag() && EQ::InventoryProfile::SupportsContainers(slot_id)) { // Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID' // messages through attrition (and the modded code in SaveInventory) - for (uint8 idx = EQEmu::invbag::SLOT_BEGIN; idx < inst->GetItem()->BagSlots && idx <= EQEmu::invbag::SLOT_END; idx++) { - const EQEmu::ItemInstance* baginst = inst->GetItem(idx); - SaveInventory(char_id, baginst, EQEmu::InventoryProfile::CalcSlotId(slot_id, idx)); + for (uint8 idx = EQ::invbag::SLOT_BEGIN; idx < inst->GetItem()->BagSlots && idx <= EQ::invbag::SLOT_END; idx++) { + const EQ::ItemInstance* baginst = inst->GetItem(idx); + SaveInventory(char_id, baginst, EQ::InventoryProfile::CalcSlotId(slot_id, idx)); } } @@ -360,10 +360,10 @@ bool SharedDatabase::DeleteInventorySlot(uint32 char_id, int16 slot_id) { } // Delete bag slots, if need be - if (!EQEmu::InventoryProfile::SupportsContainers(slot_id)) + if (!EQ::InventoryProfile::SupportsContainers(slot_id)) return true; - int16 base_slot_id = EQEmu::InventoryProfile::CalcSlotId(slot_id, EQEmu::invbag::SLOT_BEGIN); + int16 base_slot_id = EQ::InventoryProfile::CalcSlotId(slot_id, EQ::invbag::SLOT_BEGIN); query = StringFormat("DELETE FROM inventory WHERE charid = %i AND slotid >= %i AND slotid < %i", char_id, base_slot_id, (base_slot_id+10)); results = QueryDatabase(query); @@ -386,10 +386,10 @@ bool SharedDatabase::DeleteSharedBankSlot(uint32 char_id, int16 slot_id) { } // Delete bag slots, if need be - if (!EQEmu::InventoryProfile::SupportsContainers(slot_id)) + if (!EQ::InventoryProfile::SupportsContainers(slot_id)) return true; - int16 base_slot_id = EQEmu::InventoryProfile::CalcSlotId(slot_id, EQEmu::invbag::SLOT_BEGIN); + int16 base_slot_id = EQ::InventoryProfile::CalcSlotId(slot_id, EQ::invbag::SLOT_BEGIN); query = StringFormat("DELETE FROM sharedbank WHERE acctid = %i " "AND slotid >= %i AND slotid < %i", account_id, base_slot_id, (base_slot_id+10)); @@ -429,9 +429,9 @@ bool SharedDatabase::SetSharedPlatinum(uint32 account_id, int32 amount_to_add) { return true; } -bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) { +bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQ::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) { - const EQEmu::ItemData* myitem; + const EQ::ItemData* myitem; std::string query = StringFormat("SELECT itemid, item_charges, slot FROM starting_items " "WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND " @@ -452,7 +452,7 @@ bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQEmu::Inventory if(!myitem) continue; - EQEmu::ItemInstance* myinst = CreateBaseItem(myitem, charges); + EQ::ItemInstance* myinst = CreateBaseItem(myitem, charges); if(slot < 0) slot = inv->FindFreeSlot(0, 0); @@ -466,7 +466,7 @@ bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, EQEmu::Inventory // Retrieve shared bank inventory based on either account or character -bool SharedDatabase::GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool is_charid) +bool SharedDatabase::GetSharedBank(uint32 id, EQ::InventoryProfile *inv, bool is_charid) { std::string query; @@ -493,7 +493,7 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool uint32 item_id = (uint32)atoi(row[1]); int8 charges = (int8)atoi(row[2]); - uint32 aug[EQEmu::invaug::SOCKET_COUNT]; + uint32 aug[EQ::invaug::SOCKET_COUNT]; aug[0] = (uint32)atoi(row[3]); aug[1] = (uint32)atoi(row[4]); aug[2] = (uint32)atoi(row[5]); @@ -501,7 +501,7 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool aug[4] = (uint32)atoi(row[7]); aug[5] = (uint32)atoi(row[8]); - const EQEmu::ItemData *item = GetItem(item_id); + const EQ::ItemData *item = GetItem(item_id); if (!item) { LogError("Warning: [{}] [{}] has an invalid item_id [{}] in inventory slot [{}]", @@ -511,9 +511,9 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool int16 put_slot_id = INVALID_INDEX; - EQEmu::ItemInstance *inst = CreateBaseItem(item, charges); + EQ::ItemInstance *inst = CreateBaseItem(item, charges); if (inst && item->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (aug[i]) inst->PutAugment(this, i, aug[i]); } @@ -563,7 +563,7 @@ bool SharedDatabase::GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool } // Overloaded: Retrieve character inventory based on character id (zone entry) -bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) +bool SharedDatabase::GetInventory(uint32 char_id, EQ::InventoryProfile *inv) { if (!char_id || !inv) return false; @@ -591,28 +591,28 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) for (auto row = results.begin(); row != results.end(); ++row) { int16 slot_id = atoi(row[0]); - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { // Titanium thru UF check + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { // Titanium thru UF check if ((((uint64)1 << slot_id) & pmask) == 0) { cv_conflict = true; continue; } } - else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { // Titanium thru UF check - auto parent_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) { // Titanium thru UF check + auto parent_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << parent_slot) & pmask) == 0) { cv_conflict = true; continue; } } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { // Titanium check - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= bank_size) { + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { // Titanium check + if ((slot_id - EQ::invslot::BANK_BEGIN) >= bank_size) { cv_conflict = true; continue; } } - else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) { // Titanium check - auto parent_index = ((slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); - if (parent_index < EQEmu::invslot::SLOT_BEGIN || parent_index >= bank_size) { + else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { // Titanium check + auto parent_index = ((slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); + if (parent_index < EQ::invslot::SLOT_BEGIN || parent_index >= bank_size) { cv_conflict = true; continue; } @@ -622,7 +622,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) uint16 charges = atoi(row[2]); uint32 color = atoul(row[3]); - uint32 aug[EQEmu::invaug::SOCKET_COUNT]; + uint32 aug[EQ::invaug::SOCKET_COUNT]; aug[0] = (uint32)atoul(row[4]); aug[1] = (uint32)atoul(row[5]); @@ -637,7 +637,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) uint32 ornament_idfile = (uint32)atoul(row[13]); uint32 ornament_hero_model = (uint32)atoul(row[14]); - const EQEmu::ItemData *item = GetItem(item_id); + const EQ::ItemData *item = GetItem(item_id); if (!item) { LogError("Warning: charid [{}] has an invalid item_id [{}] in inventory slot [{}]", char_id, item_id, @@ -647,7 +647,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) int16 put_slot_id = INVALID_INDEX; - EQEmu::ItemInstance *inst = CreateBaseItem(item, charges); + EQ::ItemInstance *inst = CreateBaseItem(item, charges); if (inst == nullptr) continue; @@ -682,7 +682,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) inst->SetOrnamentationIDFile(ornament_idfile); inst->SetOrnamentHeroModel(item->HerosForgeModel); - if (instnodrop || (inst->GetItem()->Attuneable && slot_id >= EQEmu::invslot::EQUIPMENT_BEGIN && slot_id <= EQEmu::invslot::EQUIPMENT_END)) + if (instnodrop || (inst->GetItem()->Attuneable && slot_id >= EQ::invslot::EQUIPMENT_BEGIN && slot_id <= EQ::invslot::EQUIPMENT_END)) inst->SetAttuned(true); if (color > 0) @@ -703,7 +703,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) } if (item->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (aug[i]) inst->PutAugment(this, i, aug[i]); } @@ -735,7 +735,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) LogError("ClientVersion/Expansion conflict during inventory load at zone entry for [{}] (charid: [{}], inver: [{}], gmi: [{}])", char_name, char_id, - EQEmu::versions::MobVersionName(inv->InventoryVersion()), + EQ::versions::MobVersionName(inv->InventoryVersion()), (inv->GMInventory() ? "true" : "false") ); } @@ -745,7 +745,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv) } // Overloaded: Retrieve character inventory based on account_id and character name (char select) -bool SharedDatabase::GetInventory(uint32 account_id, char *name, EQEmu::InventoryProfile *inv) // deprecated +bool SharedDatabase::GetInventory(uint32 account_id, char *name, EQ::InventoryProfile *inv) // deprecated { // Retrieve character inventory std::string query = @@ -769,7 +769,7 @@ bool SharedDatabase::GetInventory(uint32 account_id, char *name, EQEmu::Inventor int8 charges = atoi(row[2]); uint32 color = atoul(row[3]); - uint32 aug[EQEmu::invaug::SOCKET_COUNT]; + uint32 aug[EQ::invaug::SOCKET_COUNT]; aug[0] = (uint32)atoi(row[4]); aug[1] = (uint32)atoi(row[5]); aug[2] = (uint32)atoi(row[6]); @@ -782,12 +782,12 @@ bool SharedDatabase::GetInventory(uint32 account_id, char *name, EQEmu::Inventor uint32 ornament_idfile = (uint32)atoul(row[13]); uint32 ornament_hero_model = (uint32)atoul(row[14]); - const EQEmu::ItemData *item = GetItem(item_id); + const EQ::ItemData *item = GetItem(item_id); int16 put_slot_id = INVALID_INDEX; if (!item) continue; - EQEmu::ItemInstance *inst = CreateBaseItem(item, charges); + EQ::ItemInstance *inst = CreateBaseItem(item, charges); if (inst == nullptr) continue; @@ -830,7 +830,7 @@ bool SharedDatabase::GetInventory(uint32 account_id, char *name, EQEmu::Inventor inst->SetCharges(charges); if (item->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (aug[i]) inst->PutAugment(this, i, aug[i]); } @@ -914,11 +914,11 @@ bool SharedDatabase::LoadItems(const std::string &prefix) { try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("items"); + EQ::IPCMutex mutex("items"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("items"); - items_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); - items_hash = std::unique_ptr>(new EQEmu::FixedMemoryHashSet(reinterpret_cast(items_mmf->Get()), items_mmf->Size())); + items_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); + items_hash = std::unique_ptr>(new EQ::FixedMemoryHashSet(reinterpret_cast(items_mmf->Get()), items_mmf->Size())); mutex.Unlock(); } catch(std::exception& ex) { LogError("Error Loading Items: {}", ex.what()); @@ -930,7 +930,7 @@ bool SharedDatabase::LoadItems(const std::string &prefix) { void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id) { - EQEmu::FixedMemoryHashSet hash(reinterpret_cast(data), size, items, max_item_id); + EQ::FixedMemoryHashSet hash(reinterpret_cast(data), size, items, max_item_id); std::string ndbuffer; bool disableNoRent = false; @@ -958,7 +958,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_ } } - EQEmu::ItemData item; + EQ::ItemData item; const std::string query = "SELECT source," #define F(x) "`"#x"`," @@ -971,7 +971,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_ } for (auto row = results.begin(); row != results.end(); ++row) { - memset(&item, 0, sizeof(EQEmu::ItemData)); + memset(&item, 0, sizeof(EQ::ItemData)); item.ItemClass = (uint8)atoi(row[ItemField::itemclass]); strcpy(item.Name, row[ItemField::name]); @@ -1189,7 +1189,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_ } } -const EQEmu::ItemData *SharedDatabase::GetItem(uint32 id) +const EQ::ItemData *SharedDatabase::GetItem(uint32 id) { if (id == 0) { return nullptr; @@ -1206,7 +1206,7 @@ const EQEmu::ItemData *SharedDatabase::GetItem(uint32 id) return nullptr; } -const EQEmu::ItemData* SharedDatabase::IterateItems(uint32* id) { +const EQ::ItemData* SharedDatabase::IterateItems(uint32* id) { if(!items_hash || !id) { return nullptr; } @@ -1284,7 +1284,7 @@ const NPCFactionList* SharedDatabase::GetNPCFactionEntry(uint32 id) { } void SharedDatabase::LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists) { - EQEmu::FixedMemoryHashSet hash(reinterpret_cast(data), size, list_count, max_lists); + EQ::FixedMemoryHashSet hash(reinterpret_cast(data), size, list_count, max_lists); NPCFactionList faction; const std::string query = "SELECT npc_faction.id, npc_faction.primaryfaction, npc_faction.ignore_primary_assist, " @@ -1338,11 +1338,11 @@ bool SharedDatabase::LoadNPCFactionLists(const std::string &prefix) { try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("faction"); + EQ::IPCMutex mutex("faction"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("faction"); - faction_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); - faction_hash = std::unique_ptr>(new EQEmu::FixedMemoryHashSet(reinterpret_cast(faction_mmf->Get()), faction_mmf->Size())); + faction_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); + faction_hash = std::unique_ptr>(new EQ::FixedMemoryHashSet(reinterpret_cast(faction_mmf->Get()), faction_mmf->Size())); mutex.Unlock(); } catch(std::exception& ex) { LogError("Error Loading npc factions: {}", ex.what()); @@ -1352,18 +1352,18 @@ bool SharedDatabase::LoadNPCFactionLists(const std::string &prefix) { return true; } -// Create appropriate EQEmu::ItemInstance class -EQEmu::ItemInstance* SharedDatabase::CreateItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned) +// Create appropriate EQ::ItemInstance class +EQ::ItemInstance* SharedDatabase::CreateItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned) { - const EQEmu::ItemData* item = nullptr; - EQEmu::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; + EQ::ItemInstance* inst = nullptr; item = GetItem(item_id); if (item) { inst = CreateBaseItem(item, charges); if (inst == nullptr) { - LogError("Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateItem()"); + LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateItem()"); LogError("Item Data = ID: {}, Name: {}, Charges: {}", item->ID, item->Name, charges); return nullptr; } @@ -1381,15 +1381,15 @@ EQEmu::ItemInstance* SharedDatabase::CreateItem(uint32 item_id, int16 charges, u } -// Create appropriate EQEmu::ItemInstance class -EQEmu::ItemInstance* SharedDatabase::CreateItem(const EQEmu::ItemData* item, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned) +// Create appropriate EQ::ItemInstance class +EQ::ItemInstance* SharedDatabase::CreateItem(const EQ::ItemData* item, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned) { - EQEmu::ItemInstance* inst = nullptr; + EQ::ItemInstance* inst = nullptr; if (item) { inst = CreateBaseItem(item, charges); if (inst == nullptr) { - LogError("Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateItem()"); + LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateItem()"); LogError("Item Data = ID: {}, Name: {}, Charges: {}", item->ID, item->Name, charges); return nullptr; } @@ -1406,8 +1406,8 @@ EQEmu::ItemInstance* SharedDatabase::CreateItem(const EQEmu::ItemData* item, int return inst; } -EQEmu::ItemInstance* SharedDatabase::CreateBaseItem(const EQEmu::ItemData* item, int16 charges) { - EQEmu::ItemInstance* inst = nullptr; +EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16 charges) { + EQ::ItemInstance* inst = nullptr; if (item) { // if maxcharges is -1 that means it is an unlimited use item. // set it to 1 charge so that it is usable on creation @@ -1417,10 +1417,10 @@ EQEmu::ItemInstance* SharedDatabase::CreateBaseItem(const EQEmu::ItemData* item, if(charges <= 0 && item->Stackable) charges = 1; - inst = new EQEmu::ItemInstance(item, charges); + inst = new EQ::ItemInstance(item, charges); if (inst == nullptr) { - LogError("Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateBaseItem()"); + LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateBaseItem()"); LogError("Item Data = ID: {}, Name: {}, Charges: {}", item->ID, item->Name, charges); return nullptr; } @@ -1533,16 +1533,16 @@ bool SharedDatabase::LoadSkillCaps(const std::string &prefix) { skill_caps_mmf.reset(nullptr); uint32 class_count = PLAYER_CLASS_COUNT; - uint32 skill_count = EQEmu::skills::HIGHEST_SKILL + 1; + uint32 skill_count = EQ::skills::HIGHEST_SKILL + 1; uint32 level_count = HARD_LEVEL_CAP + 1; uint32 size = (class_count * skill_count * level_count * sizeof(uint16)); try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("skill_caps"); + EQ::IPCMutex mutex("skill_caps"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("skill_caps"); - skill_caps_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); + skill_caps_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); mutex.Unlock(); } catch(std::exception &ex) { LogError("Error loading skill caps: {}", ex.what()); @@ -1554,7 +1554,7 @@ bool SharedDatabase::LoadSkillCaps(const std::string &prefix) { void SharedDatabase::LoadSkillCaps(void *data) { uint32 class_count = PLAYER_CLASS_COUNT; - uint32 skill_count = EQEmu::skills::HIGHEST_SKILL + 1; + uint32 skill_count = EQ::skills::HIGHEST_SKILL + 1; uint32 level_count = HARD_LEVEL_CAP + 1; uint16 *skill_caps_table = reinterpret_cast(data); @@ -1579,7 +1579,7 @@ void SharedDatabase::LoadSkillCaps(void *data) { } } -uint16 SharedDatabase::GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level) { +uint16 SharedDatabase::GetSkillCap(uint8 Class_, EQ::skills::SkillType Skill, uint8 Level) { if(!skill_caps_mmf) { return 0; } @@ -1593,7 +1593,7 @@ uint16 SharedDatabase::GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, } uint32 class_count = PLAYER_CLASS_COUNT; - uint32 skill_count = EQEmu::skills::HIGHEST_SKILL + 1; + uint32 skill_count = EQ::skills::HIGHEST_SKILL + 1; uint32 level_count = HARD_LEVEL_CAP + 1; if(Class_ > class_count || static_cast(Skill) > skill_count || Level > level_count) { return 0; @@ -1608,7 +1608,7 @@ uint16 SharedDatabase::GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, return skill_caps_table[index]; } -uint8 SharedDatabase::GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level) { +uint8 SharedDatabase::GetTrainLevel(uint8 Class_, EQ::skills::SkillType Skill, uint8 Level) { if(!skill_caps_mmf) { return 0; } @@ -1622,7 +1622,7 @@ uint8 SharedDatabase::GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill } uint32 class_count = PLAYER_CLASS_COUNT; - uint32 skill_count = EQEmu::skills::HIGHEST_SKILL + 1; + uint32 skill_count = EQ::skills::HIGHEST_SKILL + 1; uint32 level_count = HARD_LEVEL_CAP + 1; if(Class_ > class_count || static_cast(Skill) > skill_count || Level > level_count) { return 0; @@ -1695,11 +1695,11 @@ bool SharedDatabase::LoadSpells(const std::string &prefix, int32 *records, const try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("spells"); + EQ::IPCMutex mutex("spells"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("spells"); - spells_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); + spells_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); *records = *reinterpret_cast(spells_mmf->Get()); *sp = reinterpret_cast((char*)spells_mmf->Get() + 4); mutex.Unlock(); @@ -1793,10 +1793,10 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { int tmp_skill = atoi(row[100]);; - if (tmp_skill < 0 || tmp_skill > EQEmu::skills::HIGHEST_SKILL) - sp[tempid].skill = EQEmu::skills::SkillBegging; /* not much better we can do. */ // can probably be changed to client-based 'SkillNone' once activated + if (tmp_skill < 0 || tmp_skill > EQ::skills::HIGHEST_SKILL) + sp[tempid].skill = EQ::skills::SkillBegging; /* not much better we can do. */ // can probably be changed to client-based 'SkillNone' once activated else - sp[tempid].skill = (EQEmu::skills::SkillType) tmp_skill; + sp[tempid].skill = (EQ::skills::SkillType) tmp_skill; sp[tempid].zonetype=atoi(row[101]); sp[tempid].EnvironmentType=atoi(row[102]); @@ -1902,11 +1902,11 @@ bool SharedDatabase::LoadBaseData(const std::string &prefix) { try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("base_data"); + EQ::IPCMutex mutex("base_data"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("base_data"); - base_data_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name)); + base_data_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); mutex.Unlock(); } catch(std::exception& ex) { LogError("Error Loading Base Data: {}", ex.what()); @@ -2035,7 +2035,7 @@ void SharedDatabase::GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_d } void SharedDatabase::LoadLootTables(void *data, uint32 size) { - EQEmu::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); + EQ::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); uint8 loot_table[sizeof(LootTable_Struct) + (sizeof(LootTableEntries_Struct) * 128)]; LootTable_Struct *lt = reinterpret_cast(loot_table); @@ -2089,7 +2089,7 @@ void SharedDatabase::LoadLootTables(void *data, uint32 size) { void SharedDatabase::LoadLootDrops(void *data, uint32 size) { - EQEmu::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); + EQ::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); uint8 loot_drop[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)]; LootDrop_Struct *ld = reinterpret_cast(loot_drop); @@ -2142,16 +2142,16 @@ bool SharedDatabase::LoadLoot(const std::string &prefix) { try { auto Config = EQEmuConfig::get(); - EQEmu::IPCMutex mutex("loot"); + EQ::IPCMutex mutex("loot"); mutex.Lock(); std::string file_name_lt = Config->SharedMemDir + prefix + std::string("loot_table"); - loot_table_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name_lt)); - loot_table_hash = std::unique_ptr>(new EQEmu::FixedMemoryVariableHashSet( + loot_table_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name_lt)); + loot_table_hash = std::unique_ptr>(new EQ::FixedMemoryVariableHashSet( reinterpret_cast(loot_table_mmf->Get()), loot_table_mmf->Size())); std::string file_name_ld = Config->SharedMemDir + prefix + std::string("loot_drop"); - loot_drop_mmf = std::unique_ptr(new EQEmu::MemoryMappedFile(file_name_ld)); - loot_drop_hash = std::unique_ptr>(new EQEmu::FixedMemoryVariableHashSet( + loot_drop_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name_ld)); + loot_drop_hash = std::unique_ptr>(new EQ::FixedMemoryVariableHashSet( reinterpret_cast(loot_drop_mmf->Get()), loot_drop_mmf->Size())); mutex.Unlock(); diff --git a/common/shareddb.h b/common/shareddb.h index 8deb65126..e7bbd3e61 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -41,7 +41,7 @@ struct NPCFactionList; struct LootTable_Struct; struct LootDrop_Struct; -namespace EQEmu +namespace EQ { struct ItemData; class ItemInstance; @@ -80,22 +80,22 @@ class SharedDatabase : public Database /* Character InventoryProfile */ - bool SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end); - bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); + bool SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end); + bool SaveInventory(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id); bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id); bool DeleteInventorySlot(uint32 char_id, int16 slot_id); - bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst); - bool GetSharedBank(uint32 id, EQEmu::InventoryProfile* inv, bool is_charid); + bool UpdateInventorySlot(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id); + bool UpdateSharedBankSlot(uint32 char_id, const EQ::ItemInstance* inst, int16 slot_id); + bool VerifyInventory(uint32 account_id, int16 slot_id, const EQ::ItemInstance* inst); + bool GetSharedBank(uint32 id, EQ::InventoryProfile* inv, bool is_charid); int32 GetSharedPlatinum(uint32 account_id); bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add); - bool GetInventory(uint32 char_id, EQEmu::InventoryProfile* inv); - bool GetInventory(uint32 account_id, char* name, EQEmu::InventoryProfile* inv); // deprecated + bool GetInventory(uint32 char_id, EQ::InventoryProfile* inv); + bool GetInventory(uint32 account_id, char* name, EQ::InventoryProfile* inv); // deprecated std::map GetItemRecastTimestamps(uint32 char_id); uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type); void ClearOldRecastTimestamps(uint32 char_id); - bool SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin); + bool SetStartingItems(PlayerProfile_Struct* pp, EQ::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin); std::string GetBook(const char *txtfile, int16 *language); @@ -103,9 +103,9 @@ class SharedDatabase : public Database /* Item Methods */ - EQEmu::ItemInstance* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateItem(const EQEmu::ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateBaseItem(const EQEmu::ItemData* item, int16 charges = 0); + EQ::ItemInstance* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); + EQ::ItemInstance* CreateItem(const EQ::ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); + EQ::ItemInstance* CreateBaseItem(const EQ::ItemData* item, int16 charges = 0); /* Shared Memory crap @@ -115,8 +115,8 @@ class SharedDatabase : public Database void GetItemsCount(int32 &item_count, uint32 &max_id); void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); bool LoadItems(const std::string &prefix); - const EQEmu::ItemData* IterateItems(uint32* id); - const EQEmu::ItemData* GetItem(uint32 id); + const EQ::ItemData* IterateItems(uint32* id); + const EQ::ItemData* GetItem(uint32 id); const EvolveInfo* GetEvolveInfo(uint32 loregroup); //faction lists @@ -136,8 +136,8 @@ class SharedDatabase : public Database void LoadSkillCaps(void *data); bool LoadSkillCaps(const std::string &prefix); - uint16 GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); - uint8 GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); + uint16 GetSkillCap(uint8 Class_, EQ::skills::SkillType Skill, uint8 Level); + uint8 GetTrainLevel(uint8 Class_, EQ::skills::SkillType Skill, uint8 Level); int GetMaxSpellID(); bool LoadSpells(const std::string &prefix, int32 *records, const SPDat_Spell_Struct **sp); @@ -151,17 +151,17 @@ class SharedDatabase : public Database protected: - std::unique_ptr skill_caps_mmf; - std::unique_ptr items_mmf; - std::unique_ptr> items_hash; - std::unique_ptr faction_mmf; - std::unique_ptr> faction_hash; - std::unique_ptr loot_table_mmf; - std::unique_ptr> loot_table_hash; - std::unique_ptr loot_drop_mmf; - std::unique_ptr> loot_drop_hash; - std::unique_ptr base_data_mmf; - std::unique_ptr spells_mmf; + std::unique_ptr skill_caps_mmf; + std::unique_ptr items_mmf; + std::unique_ptr> items_hash; + std::unique_ptr faction_mmf; + std::unique_ptr> faction_hash; + std::unique_ptr loot_table_mmf; + std::unique_ptr> loot_table_hash; + std::unique_ptr loot_drop_mmf; + std::unique_ptr> loot_drop_hash; + std::unique_ptr base_data_mmf; + std::unique_ptr spells_mmf; }; #endif /*SHAREDDB_H_*/ diff --git a/common/skills.cpp b/common/skills.cpp index 947861163..81b1a926c 100644 --- a/common/skills.cpp +++ b/common/skills.cpp @@ -22,7 +22,7 @@ #include -bool EQEmu::skills::IsTradeskill(SkillType skill) +bool EQ::skills::IsTradeskill(SkillType skill) { switch (skill) { case SkillFishing: @@ -43,7 +43,7 @@ bool EQEmu::skills::IsTradeskill(SkillType skill) } } -bool EQEmu::skills::IsSpecializedSkill(SkillType skill) +bool EQ::skills::IsSpecializedSkill(SkillType skill) { // this could be a simple if, but if this is more portable if any IDs change (probably won't) // or any other specialized are added (also unlikely) @@ -59,7 +59,7 @@ bool EQEmu::skills::IsSpecializedSkill(SkillType skill) } } -float EQEmu::skills::GetSkillMeleePushForce(SkillType skill) +float EQ::skills::GetSkillMeleePushForce(SkillType skill) { // This is the force/magnitude of the push from an attack of this skill type // You can find these numbers in the clients skill struct @@ -96,7 +96,7 @@ float EQEmu::skills::GetSkillMeleePushForce(SkillType skill) } } -bool EQEmu::skills::IsBardInstrumentSkill(SkillType skill) +bool EQ::skills::IsBardInstrumentSkill(SkillType skill) { switch (skill) { case SkillBrassInstruments: @@ -110,7 +110,7 @@ bool EQEmu::skills::IsBardInstrumentSkill(SkillType skill) } } -bool EQEmu::skills::IsCastingSkill(SkillType skill) +bool EQ::skills::IsCastingSkill(SkillType skill) { switch (skill) { case SkillAbjuration: @@ -124,7 +124,7 @@ bool EQEmu::skills::IsCastingSkill(SkillType skill) } } -int32 EQEmu::skills::GetBaseDamage(SkillType skill) +int32 EQ::skills::GetBaseDamage(SkillType skill) { switch (skill) { case SkillBash: @@ -148,7 +148,7 @@ int32 EQEmu::skills::GetBaseDamage(SkillType skill) } } -bool EQEmu::skills::IsMeleeDmg(SkillType skill) +bool EQ::skills::IsMeleeDmg(SkillType skill) { switch (skill) { case Skill1HBlunt: @@ -175,7 +175,7 @@ bool EQEmu::skills::IsMeleeDmg(SkillType skill) } } -const std::map& EQEmu::skills::GetSkillTypeMap() +const std::map& EQ::skills::GetSkillTypeMap() { /* VS2013 code static const std::map skill_use_types_map = { @@ -355,12 +355,12 @@ const std::map& EQEmu::skills::GetSkillTy return skill_type_map; } -EQEmu::SkillProfile::SkillProfile() +EQ::SkillProfile::SkillProfile() { memset(&Skill, 0, (sizeof(uint32) * PACKET_SKILL_ARRAY_SIZE)); } -uint32 EQEmu::SkillProfile::GetSkill(int skill_id) +uint32 EQ::SkillProfile::GetSkill(int skill_id) { if (skill_id < 0 || skill_id >= PACKET_SKILL_ARRAY_SIZE) return 0; diff --git a/common/skills.h b/common/skills.h index 43a31ed15..81790ede1 100644 --- a/common/skills.h +++ b/common/skills.h @@ -26,7 +26,7 @@ #include -namespace EQEmu +namespace EQ { namespace skills { enum SkillType : int { @@ -287,7 +287,7 @@ namespace EQEmu uint32* GetSkills() { return reinterpret_cast(&Skill); } - skills::SkillType GetLastUseableSkill() { return EQEmu::skills::Skill2HPiercing; } + skills::SkillType GetLastUseableSkill() { return EQ::skills::Skill2HPiercing; } size_t GetSkillsArraySize() { return PACKET_SKILL_ARRAY_SIZE; } uint32 GetSkill(int skill_id); diff --git a/common/spdat.h b/common/spdat.h index 9c9cf3f53..811825757 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -748,7 +748,7 @@ struct SPDat_Spell_Struct /* 086 */ int effectid[EFFECT_COUNT]; // Spell's effects -- SPELLAFFECT1 ... SPELLAFFECT12 /* 098 */ SpellTargetType targettype; // Spell's Target -- TYPENUMBER /* 099 */ int basediff; // base difficulty fizzle adjustment -- BASEDIFFICULTY -/* 100 */ EQEmu::skills::SkillType skill; // -- CASTINGSKILL +/* 100 */ EQ::skills::SkillType skill; // -- CASTINGSKILL /* 101 */ int8 zonetype; // 01=Outdoors, 02=dungeons, ff=Any -- ZONETYPE /* 102 */ int8 EnvironmentType; // -- ENVIRONMENTTYPE /* 103 */ int8 TimeOfDay; // -- TIMEOFDAY diff --git a/common/struct_strategy.h b/common/struct_strategy.h index 3c92cf060..da4142295 100644 --- a/common/struct_strategy.h +++ b/common/struct_strategy.h @@ -25,7 +25,7 @@ public: void Decode(EQApplicationPacket *p) const; virtual std::string Describe() const = 0; - virtual const EQEmu::versions::ClientVersion ClientVersion() const = 0; + virtual const EQ::versions::ClientVersion ClientVersion() const = 0; protected: //some common coders: diff --git a/common/textures.h b/common/textures.h index f489977ce..b415c442c 100644 --- a/common/textures.h +++ b/common/textures.h @@ -23,7 +23,7 @@ #include "types.h" -namespace EQEmu +namespace EQ { namespace textures { enum : int8 { textureInvalid = -1, textureBegin }; diff --git a/loginserver/client.h b/loginserver/client.h index b8f092db3..9d76e7e78 100644 --- a/loginserver/client.h +++ b/loginserver/client.h @@ -195,7 +195,7 @@ public: void CreateEQEmuAccount(const std::string &in_account_name, const std::string &in_account_password, unsigned int loginserver_account_id); private: - EQEmu::Random random; + EQ::Random random; std::shared_ptr connection; LSClientVersion version; LSClientStatus status; diff --git a/shared_memory/base_data.cpp b/shared_memory/base_data.cpp index 557d13ce5..f65780886 100644 --- a/shared_memory/base_data.cpp +++ b/shared_memory/base_data.cpp @@ -24,7 +24,7 @@ #include "../common/eqemu_exception.h" void LoadBaseData(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("base_data"); + EQ::IPCMutex mutex("base_data"); mutex.Lock(); int records = (database->GetMaxBaseDataLevel() + 1); if(records == 0) { @@ -35,7 +35,7 @@ void LoadBaseData(SharedDatabase *database, const std::string &prefix) { auto Config = EQEmuConfig::get(); std::string file_name = Config->SharedMemDir + prefix + std::string("base_data"); - EQEmu::MemoryMappedFile mmf(file_name, size); + EQ::MemoryMappedFile mmf(file_name, size); mmf.ZeroFile(); void *ptr = mmf.Get(); diff --git a/shared_memory/items.cpp b/shared_memory/items.cpp index 6923fea3d..b1052730c 100644 --- a/shared_memory/items.cpp +++ b/shared_memory/items.cpp @@ -25,7 +25,7 @@ #include "../common/item_data.h" void LoadItems(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("items"); + EQ::IPCMutex mutex("items"); mutex.Lock(); int32 items = -1; @@ -35,11 +35,11 @@ void LoadItems(SharedDatabase *database, const std::string &prefix) { EQ_EXCEPT("Shared Memory", "Unable to get any items from the database."); } - uint32 size = static_cast(EQEmu::FixedMemoryHashSet::estimated_size(items, max_item)); + uint32 size = static_cast(EQ::FixedMemoryHashSet::estimated_size(items, max_item)); auto Config = EQEmuConfig::get(); std::string file_name = Config->SharedMemDir + prefix + std::string("items"); - EQEmu::MemoryMappedFile mmf(file_name, size); + EQ::MemoryMappedFile mmf(file_name, size); mmf.ZeroFile(); void *ptr = mmf.Get(); diff --git a/shared_memory/loot.cpp b/shared_memory/loot.cpp index 742f373bf..a8ab94326 100644 --- a/shared_memory/loot.cpp +++ b/shared_memory/loot.cpp @@ -26,7 +26,7 @@ #include "../common/loottable.h" void LoadLoot(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("loot"); + EQ::IPCMutex mutex("loot"); mutex.Lock(); uint32 loot_table_count, loot_table_max, loot_table_entries_count; @@ -48,15 +48,15 @@ void LoadLoot(SharedDatabase *database, const std::string &prefix) { std::string file_name_lt = Config->SharedMemDir + prefix + std::string("loot_table"); std::string file_name_ld = Config->SharedMemDir + prefix + std::string("loot_drop"); - EQEmu::MemoryMappedFile mmf_loot_table(file_name_lt, loot_table_size); - EQEmu::MemoryMappedFile mmf_loot_drop(file_name_ld, loot_drop_size); + EQ::MemoryMappedFile mmf_loot_table(file_name_lt, loot_table_size); + EQ::MemoryMappedFile mmf_loot_drop(file_name_ld, loot_drop_size); mmf_loot_table.ZeroFile(); mmf_loot_drop.ZeroFile(); - EQEmu::FixedMemoryVariableHashSet loot_table_hash(reinterpret_cast(mmf_loot_table.Get()), + EQ::FixedMemoryVariableHashSet loot_table_hash(reinterpret_cast(mmf_loot_table.Get()), loot_table_size, loot_table_max); - EQEmu::FixedMemoryVariableHashSet loot_drop_hash(reinterpret_cast(mmf_loot_drop.Get()), + EQ::FixedMemoryVariableHashSet loot_drop_hash(reinterpret_cast(mmf_loot_drop.Get()), loot_drop_size, loot_drop_max); database->LoadLootTables(mmf_loot_table.Get(), loot_table_max); diff --git a/shared_memory/npc_faction.cpp b/shared_memory/npc_faction.cpp index 2c6ab0098..fb2d20ac4 100644 --- a/shared_memory/npc_faction.cpp +++ b/shared_memory/npc_faction.cpp @@ -25,18 +25,18 @@ #include "../common/faction.h" void LoadFactions(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("faction"); + EQ::IPCMutex mutex("faction"); mutex.Lock(); uint32 lists = 0; uint32 max_list = 0; database->GetFactionListInfo(lists, max_list); - uint32 size = static_cast(EQEmu::FixedMemoryHashSet::estimated_size(lists, max_list)); + uint32 size = static_cast(EQ::FixedMemoryHashSet::estimated_size(lists, max_list)); auto Config = EQEmuConfig::get(); std::string file_name = Config->SharedMemDir + prefix + std::string("faction"); - EQEmu::MemoryMappedFile mmf(file_name, size); + EQ::MemoryMappedFile mmf(file_name, size); mmf.ZeroFile(); void *ptr = mmf.Get(); diff --git a/shared_memory/skill_caps.cpp b/shared_memory/skill_caps.cpp index 758ce6955..8f11e31dd 100644 --- a/shared_memory/skill_caps.cpp +++ b/shared_memory/skill_caps.cpp @@ -26,17 +26,17 @@ #include "../common/features.h" void LoadSkillCaps(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("skill_caps"); + EQ::IPCMutex mutex("skill_caps"); mutex.Lock(); uint32 class_count = PLAYER_CLASS_COUNT; - uint32 skill_count = EQEmu::skills::HIGHEST_SKILL + 1; + uint32 skill_count = EQ::skills::HIGHEST_SKILL + 1; uint32 level_count = HARD_LEVEL_CAP + 1; uint32 size = (class_count * skill_count * level_count * sizeof(uint16)); auto Config = EQEmuConfig::get(); std::string file_name = Config->SharedMemDir + prefix + std::string("skill_caps"); - EQEmu::MemoryMappedFile mmf(file_name, size); + EQ::MemoryMappedFile mmf(file_name, size); mmf.ZeroFile(); void *ptr = mmf.Get(); diff --git a/shared_memory/spells.cpp b/shared_memory/spells.cpp index c653e26f5..0faf5d764 100644 --- a/shared_memory/spells.cpp +++ b/shared_memory/spells.cpp @@ -25,7 +25,7 @@ #include "../common/spdat.h" void LoadSpells(SharedDatabase *database, const std::string &prefix) { - EQEmu::IPCMutex mutex("spells"); + EQ::IPCMutex mutex("spells"); mutex.Lock(); int records = database->GetMaxSpellID() + 1; if(records == 0) { @@ -36,7 +36,7 @@ void LoadSpells(SharedDatabase *database, const std::string &prefix) { auto Config = EQEmuConfig::get(); std::string file_name = Config->SharedMemDir + prefix + std::string("spells"); - EQEmu::MemoryMappedFile mmf(file_name, size); + EQ::MemoryMappedFile mmf(file_name, size); mmf.ZeroFile(); void *ptr = mmf.Get(); diff --git a/ucs/chatchannel.cpp b/ucs/chatchannel.cpp index efac898d5..da3390f55 100644 --- a/ucs/chatchannel.cpp +++ b/ucs/chatchannel.cpp @@ -393,7 +393,7 @@ void ChatChannel::SendMessageToChannel(std::string Message, Client* Sender) { if(!Sender) return; - std::string cv_messages[EQEmu::versions::ClientVersionCount]; + std::string cv_messages[EQ::versions::ClientVersionCount]; ChatMessagesSent++; @@ -412,18 +412,18 @@ void ChatChannel::SendMessageToChannel(std::string Message, Client* Sender) { if (cv_messages[static_cast(ChannelClient->GetClientVersion())].length() == 0) { switch (ChannelClient->GetClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: + case EQ::versions::ClientVersion::Titanium: ServerToClient45SayLink(cv_messages[static_cast(ChannelClient->GetClientVersion())], Message); break; - case EQEmu::versions::ClientVersion::SoF: - case EQEmu::versions::ClientVersion::SoD: - case EQEmu::versions::ClientVersion::UF: + case EQ::versions::ClientVersion::SoF: + case EQ::versions::ClientVersion::SoD: + case EQ::versions::ClientVersion::UF: ServerToClient50SayLink(cv_messages[static_cast(ChannelClient->GetClientVersion())], Message); break; - case EQEmu::versions::ClientVersion::RoF: + case EQ::versions::ClientVersion::RoF: ServerToClient55SayLink(cv_messages[static_cast(ChannelClient->GetClientVersion())], Message); break; - case EQEmu::versions::ClientVersion::RoF2: + case EQ::versions::ClientVersion::RoF2: default: cv_messages[static_cast(ChannelClient->GetClientVersion())] = Message; break; diff --git a/ucs/clientlist.cpp b/ucs/clientlist.cpp index 0b1d43262..2d5d40fb9 100644 --- a/ucs/clientlist.cpp +++ b/ucs/clientlist.cpp @@ -523,7 +523,7 @@ Client::Client(std::shared_ptr eqs) { GlobalChatLimiterTimer = new Timer(RuleI(Chat, IntervalDurationMS)); TypeOfConnection = ConnectionTypeUnknown; - ClientVersion_ = EQEmu::versions::ClientVersion::Unknown; + ClientVersion_ = EQ::versions::ClientVersion::Unknown; UnderfootOrLater = false; } @@ -2163,54 +2163,54 @@ void Client::SetConnectionType(char c) { switch (c) { - case EQEmu::versions::ucsTitaniumChat: + case EQ::versions::ucsTitaniumChat: { TypeOfConnection = ConnectionTypeChat; - ClientVersion_ = EQEmu::versions::ClientVersion::Titanium; + ClientVersion_ = EQ::versions::ClientVersion::Titanium; LogInfo("Connection type is Chat (Titanium)"); break; } - case EQEmu::versions::ucsTitaniumMail: + case EQ::versions::ucsTitaniumMail: { TypeOfConnection = ConnectionTypeMail; - ClientVersion_ = EQEmu::versions::ClientVersion::Titanium; + ClientVersion_ = EQ::versions::ClientVersion::Titanium; LogInfo("Connection type is Mail (Titanium)"); break; } - case EQEmu::versions::ucsSoFCombined: + case EQ::versions::ucsSoFCombined: { TypeOfConnection = ConnectionTypeCombined; - ClientVersion_ = EQEmu::versions::ClientVersion::SoF; + ClientVersion_ = EQ::versions::ClientVersion::SoF; LogInfo("Connection type is Combined (SoF)"); break; } - case EQEmu::versions::ucsSoDCombined: + case EQ::versions::ucsSoDCombined: { TypeOfConnection = ConnectionTypeCombined; - ClientVersion_ = EQEmu::versions::ClientVersion::SoD; + ClientVersion_ = EQ::versions::ClientVersion::SoD; LogInfo("Connection type is Combined (SoD)"); break; } - case EQEmu::versions::ucsUFCombined: + case EQ::versions::ucsUFCombined: { TypeOfConnection = ConnectionTypeCombined; - ClientVersion_ = EQEmu::versions::ClientVersion::UF; + ClientVersion_ = EQ::versions::ClientVersion::UF; UnderfootOrLater = true; LogInfo("Connection type is Combined (Underfoot)"); break; } - case EQEmu::versions::ucsRoFCombined: + case EQ::versions::ucsRoFCombined: { TypeOfConnection = ConnectionTypeCombined; - ClientVersion_ = EQEmu::versions::ClientVersion::RoF; + ClientVersion_ = EQ::versions::ClientVersion::RoF; UnderfootOrLater = true; LogInfo("Connection type is Combined (RoF)"); break; } - case EQEmu::versions::ucsRoF2Combined: + case EQ::versions::ucsRoF2Combined: { TypeOfConnection = ConnectionTypeCombined; - ClientVersion_ = EQEmu::versions::ClientVersion::RoF2; + ClientVersion_ = EQ::versions::ClientVersion::RoF2; UnderfootOrLater = true; LogInfo("Connection type is Combined (RoF2)"); break; @@ -2218,7 +2218,7 @@ void Client::SetConnectionType(char c) { default: { TypeOfConnection = ConnectionTypeUnknown; - ClientVersion_ = EQEmu::versions::ClientVersion::Unknown; + ClientVersion_ = EQ::versions::ClientVersion::Unknown; LogInfo("Connection type is unknown"); } } diff --git a/ucs/clientlist.h b/ucs/clientlist.h index 548fb170c..13d31784c 100644 --- a/ucs/clientlist.h +++ b/ucs/clientlist.h @@ -142,7 +142,7 @@ public: void SetConnectionType(char c); ConnectionType GetConnectionType() { return TypeOfConnection; } - EQEmu::versions::ClientVersion GetClientVersion() { return ClientVersion_; } + EQ::versions::ClientVersion GetClientVersion() { return ClientVersion_; } inline bool IsMailConnection() { return (TypeOfConnection == ConnectionTypeMail) || (TypeOfConnection == ConnectionTypeCombined); } void SendNotification(int MailBoxNumber, std::string From, std::string Subject, int MessageID); @@ -173,7 +173,7 @@ private: bool ForceDisconnect; ConnectionType TypeOfConnection; - EQEmu::versions::ClientVersion ClientVersion_; + EQ::versions::ClientVersion ClientVersion_; bool UnderfootOrLater; }; diff --git a/ucs/ucs.cpp b/ucs/ucs.cpp index 46bda530c..11f6ed103 100644 --- a/ucs/ucs.cpp +++ b/ucs/ucs.cpp @@ -117,7 +117,7 @@ int main() { } } - EQEmu::InitializeDynamicLookups(); + EQ::InitializeDynamicLookups(); LogInfo("Initialized dynamic dictionary entries"); database.ExpireMail(); diff --git a/ucs/worldserver.cpp b/ucs/worldserver.cpp index 107624a0d..88cff5afd 100644 --- a/ucs/worldserver.cpp +++ b/ucs/worldserver.cpp @@ -101,18 +101,18 @@ void WorldServer::ProcessMessage(uint16 opcode, EQ::Net::Packet &p) { std::string new_message; switch (c->GetClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: + case EQ::versions::ClientVersion::Titanium: Client45ToServerSayLink(new_message, Message.substr(1, std::string::npos)); break; - case EQEmu::versions::ClientVersion::SoF: - case EQEmu::versions::ClientVersion::SoD: - case EQEmu::versions::ClientVersion::UF: + case EQ::versions::ClientVersion::SoF: + case EQ::versions::ClientVersion::SoD: + case EQ::versions::ClientVersion::UF: Client50ToServerSayLink(new_message, Message.substr(1, std::string::npos)); break; - case EQEmu::versions::ClientVersion::RoF: + case EQ::versions::ClientVersion::RoF: Client55ToServerSayLink(new_message, Message.substr(1, std::string::npos)); break; - case EQEmu::versions::ClientVersion::RoF2: + case EQ::versions::ClientVersion::RoF2: default: new_message = Message.substr(1, std::string::npos); break; diff --git a/world/adventure.cpp b/world/adventure.cpp index 3b784cd6e..5ec088d73 100644 --- a/world/adventure.cpp +++ b/world/adventure.cpp @@ -15,7 +15,7 @@ extern ZSList zoneserver_list; extern ClientList client_list; extern AdventureManager adventure_manager; -extern EQEmu::Random emu_random; +extern EQ::Random emu_random; Adventure::Adventure(AdventureTemplate *t) { diff --git a/world/adventure_manager.cpp b/world/adventure_manager.cpp index c3e70b7ed..57c98cafb 100644 --- a/world/adventure_manager.cpp +++ b/world/adventure_manager.cpp @@ -15,7 +15,7 @@ extern ZSList zoneserver_list; extern ClientList client_list; -extern EQEmu::Random emu_random; +extern EQ::Random emu_random; AdventureManager::AdventureManager() { diff --git a/world/client.cpp b/world/client.cpp index 18f0aa776..383a31586 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -81,7 +81,7 @@ std::vector character_create_race_class_combos; extern ZSList zoneserver_list; extern LoginServerList loginserverlist; extern ClientList client_list; -extern EQEmu::Random emu_random; +extern EQ::Random emu_random; extern uint32 numclients; extern volatile bool RunLoops; extern volatile bool UCSServerAvailable_; @@ -108,7 +108,7 @@ Client::Client(EQStreamInterface* ieqs) StartInTutorial = false; m_ClientVersion = eqs->ClientVersion(); - m_ClientVersionBit = EQEmu::versions::ConvertClientVersionToClientVersionBit(m_ClientVersion); + m_ClientVersionBit = EQ::versions::ConvertClientVersionToClientVersionBit(m_ClientVersion); numclients++; } @@ -173,10 +173,10 @@ void Client::SendExpansionInfo() { ExpansionInfo_Struct *eis = (ExpansionInfo_Struct*)outapp->pBuffer; if (RuleB(World, UseClientBasedExpansionSettings)) { - eis->Expansions = EQEmu::expansions::ConvertClientVersionToExpansionsMask(eqs->ClientVersion()); + eis->Expansions = EQ::expansions::ConvertClientVersionToExpansionsMask(eqs->ClientVersion()); } else { - eis->Expansions = (RuleI(World, ExpansionSettings) & EQEmu::expansions::ConvertClientVersionToExpansionsMask(eqs->ClientVersion())); + eis->Expansions = (RuleI(World, ExpansionSettings) & EQ::expansions::ConvertClientVersionToExpansionsMask(eqs->ClientVersion())); } QueuePacket(outapp); @@ -188,7 +188,7 @@ void Client::SendCharInfo() { cle->SetOnline(CLE_Status::CharSelect); } - if (m_ClientVersionBit & EQEmu::versions::maskRoFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskRoFAndLater) { SendMaxCharCreate(); SendMembership(); SendMembershipSettings(); @@ -213,9 +213,9 @@ void Client::SendMaxCharCreate() { auto outapp = new EQApplicationPacket(OP_SendMaxCharacters, sizeof(MaxCharacters_Struct)); MaxCharacters_Struct* mc = (MaxCharacters_Struct*)outapp->pBuffer; - mc->max_chars = EQEmu::constants::StaticLookup(m_ClientVersion)->CharacterCreationLimit; - if (mc->max_chars > EQEmu::constants::CHARACTER_CREATION_LIMIT) - mc->max_chars = EQEmu::constants::CHARACTER_CREATION_LIMIT; + mc->max_chars = EQ::constants::StaticLookup(m_ClientVersion)->CharacterCreationLimit; + if (mc->max_chars > EQ::constants::CHARACTER_CREATION_LIMIT) + mc->max_chars = EQ::constants::CHARACTER_CREATION_LIMIT; QueuePacket(outapp); safe_delete(outapp); @@ -682,7 +682,7 @@ bool Client::HandleCharacterCreatePacket(const EQApplicationPacket *app) { } else { - if (m_ClientVersionBit & EQEmu::versions::maskTitaniumAndEarlier) + if (m_ClientVersionBit & EQ::versions::maskTitaniumAndEarlier) StartInTutorial = true; SendCharInfo(); } @@ -730,9 +730,9 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { // This can probably be moved outside and have another method return requested info (don't forget to remove the #include "../common/shareddb.h" above) // (This is a literal translation of the original process..I don't see why it can't be changed to a single-target query over account iteration) if (!is_player_zoning) { - size_t character_limit = EQEmu::constants::StaticLookup(eqs->ClientVersion())->CharacterCreationLimit; - if (character_limit > EQEmu::constants::CHARACTER_CREATION_LIMIT) { character_limit = EQEmu::constants::CHARACTER_CREATION_LIMIT; } - if (eqs->ClientVersion() == EQEmu::versions::ClientVersion::Titanium) { character_limit = Titanium::constants::CHARACTER_CREATION_LIMIT; } + size_t character_limit = EQ::constants::StaticLookup(eqs->ClientVersion())->CharacterCreationLimit; + if (character_limit > EQ::constants::CHARACTER_CREATION_LIMIT) { character_limit = EQ::constants::CHARACTER_CREATION_LIMIT; } + if (eqs->ClientVersion() == EQ::versions::ClientVersion::Titanium) { character_limit = Titanium::constants::CHARACTER_CREATION_LIMIT; } std::string tgh_query = StringFormat( "SELECT " @@ -865,30 +865,30 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { const WorldConfig *Config = WorldConfig::get(); std::string buffer; - EQEmu::versions::UCSVersion ConnectionType = EQEmu::versions::ucsUnknown; + EQ::versions::UCSVersion ConnectionType = EQ::versions::ucsUnknown; // chat server packet switch (GetClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumChat; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumChat; break; - case EQEmu::versions::ClientVersion::SoF: - ConnectionType = EQEmu::versions::ucsSoFCombined; + case EQ::versions::ClientVersion::SoF: + ConnectionType = EQ::versions::ucsSoFCombined; break; - case EQEmu::versions::ClientVersion::SoD: - ConnectionType = EQEmu::versions::ucsSoDCombined; + case EQ::versions::ClientVersion::SoD: + ConnectionType = EQ::versions::ucsSoDCombined; break; - case EQEmu::versions::ClientVersion::UF: - ConnectionType = EQEmu::versions::ucsUFCombined; + case EQ::versions::ClientVersion::UF: + ConnectionType = EQ::versions::ucsUFCombined; break; - case EQEmu::versions::ClientVersion::RoF: - ConnectionType = EQEmu::versions::ucsRoFCombined; + case EQ::versions::ClientVersion::RoF: + ConnectionType = EQ::versions::ucsRoFCombined; break; - case EQEmu::versions::ClientVersion::RoF2: - ConnectionType = EQEmu::versions::ucsRoF2Combined; + case EQ::versions::ClientVersion::RoF2: + ConnectionType = EQ::versions::ucsRoF2Combined; break; default: - ConnectionType = EQEmu::versions::ucsUnknown; + ConnectionType = EQ::versions::ucsUnknown; break; } @@ -910,8 +910,8 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) { // mail server packet switch (GetClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumMail; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumMail; break; default: // retain value from previous switch @@ -954,7 +954,7 @@ bool Client::HandleDeleteCharacterPacket(const EQApplicationPacket *app) { bool Client::HandleZoneChangePacket(const EQApplicationPacket *app) { // HoT sends this to world while zoning and wants it echoed back. - if (m_ClientVersionBit & EQEmu::versions::maskRoFAndLater) + if (m_ClientVersionBit & EQ::versions::maskRoFAndLater) { QueuePacket(app); } @@ -1416,10 +1416,10 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) { PlayerProfile_Struct pp; ExtendedProfile_Struct ext; - EQEmu::InventoryProfile inv; + EQ::InventoryProfile inv; - pp.SetPlayerProfileVersion(EQEmu::versions::ConvertClientVersionToMobVersion(EQEmu::versions::ConvertClientVersionBitToClientVersion(m_ClientVersionBit))); - inv.SetInventoryVersion(EQEmu::versions::ConvertClientVersionBitToClientVersion(m_ClientVersionBit)); + pp.SetPlayerProfileVersion(EQ::versions::ConvertClientVersionToMobVersion(EQ::versions::ConvertClientVersionBitToClientVersion(m_ClientVersionBit))); + inv.SetInventoryVersion(EQ::versions::ConvertClientVersionBitToClientVersion(m_ClientVersionBit)); inv.SetGMInventory(false); // character cannot have gm flag at this point time_t bday = time(nullptr); @@ -1444,7 +1444,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) LogInfo("Beard: [{}] Beardcolor: [{}]", cc->beard, cc->beardcolor); /* Validate the char creation struct */ - if (m_ClientVersionBit & EQEmu::versions::maskSoFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskSoFAndLater) { if (!CheckCharCreateInfoSoF(cc)) { LogInfo("CheckCharCreateInfo did not validate the request (bad race/class/stats)"); return false; @@ -1496,14 +1496,14 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) SetClassStartingSkills(&pp); SetClassLanguages(&pp); - pp.skills[EQEmu::skills::SkillSwimming] = RuleI(Skills, SwimmingStartValue); - pp.skills[EQEmu::skills::SkillSenseHeading] = RuleI(Skills, SenseHeadingStartValue); + pp.skills[EQ::skills::SkillSwimming] = RuleI(Skills, SwimmingStartValue); + pp.skills[EQ::skills::SkillSenseHeading] = RuleI(Skills, SenseHeadingStartValue); // strcpy(pp.servername, WorldConfig::get()->ShortName.c_str()); - memset(pp.spell_book, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELLBOOK_SIZE)); + memset(pp.spell_book, 0xFF, (sizeof(uint32) * EQ::spells::SPELLBOOK_SIZE)); - memset(pp.mem_spells, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELL_GEM_COUNT)); + memset(pp.mem_spells, 0xFF, (sizeof(uint32) * EQ::spells::SPELL_GEM_COUNT)); for(i = 0; i < BUFF_COUNT; i++) pp.buffs[i].spellid = 0xFFFF; @@ -1512,7 +1512,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) pp.pvp = database.GetServerType() == 1 ? 1 : 0; /* If it is an SoF Client and the SoF Start Zone rule is set, send new chars there */ - if (m_ClientVersionBit & EQEmu::versions::maskSoFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskSoFAndLater) { LogInfo("Found 'SoFStartZoneID' rule setting: [{}]", RuleI(World, SoFStartZoneID)); if (RuleI(World, SoFStartZoneID) > 0) { pp.zone_id = RuleI(World, SoFStartZoneID); @@ -1528,7 +1528,7 @@ bool Client::OPCharCreate(char *name, CharCreate_Struct *cc) } } /* use normal starting zone logic to either get defaults, or if startzone was set, load that from the db table.*/ - bool ValidStartZone = database.GetStartZone(&pp, cc, m_ClientVersionBit & EQEmu::versions::maskTitaniumAndEarlier); + bool ValidStartZone = database.GetStartZone(&pp, cc, m_ClientVersionBit & EQ::versions::maskTitaniumAndEarlier); if (!ValidStartZone){ return false; @@ -1870,21 +1870,21 @@ bool CheckCharCreateInfoTitanium(CharCreate_Struct *cc) void Client::SetClassStartingSkills(PlayerProfile_Struct *pp) { - for (uint32 i = 0; i <= EQEmu::skills::HIGHEST_SKILL; ++i) { + for (uint32 i = 0; i <= EQ::skills::HIGHEST_SKILL; ++i) { if (pp->skills[i] == 0) { // Skip specialized, tradeskills (fishing excluded), Alcohol Tolerance, and Bind Wound - if (EQEmu::skills::IsSpecializedSkill((EQEmu::skills::SkillType)i) || - (EQEmu::skills::IsTradeskill((EQEmu::skills::SkillType)i) && i != EQEmu::skills::SkillFishing) || - i == EQEmu::skills::SkillAlcoholTolerance || i == EQEmu::skills::SkillBindWound) + if (EQ::skills::IsSpecializedSkill((EQ::skills::SkillType)i) || + (EQ::skills::IsTradeskill((EQ::skills::SkillType)i) && i != EQ::skills::SkillFishing) || + i == EQ::skills::SkillAlcoholTolerance || i == EQ::skills::SkillBindWound) continue; - pp->skills[i] = database.GetSkillCap(pp->class_, (EQEmu::skills::SkillType)i, 1); + pp->skills[i] = database.GetSkillCap(pp->class_, (EQ::skills::SkillType)i, 1); } } - if (cle->GetClientVersion() < static_cast(EQEmu::versions::ClientVersion::RoF2) && pp->class_ == BERSERKER) { - pp->skills[EQEmu::skills::Skill1HPiercing] = pp->skills[EQEmu::skills::Skill2HPiercing]; - pp->skills[EQEmu::skills::Skill2HPiercing] = 0; + if (cle->GetClientVersion() < static_cast(EQ::versions::ClientVersion::RoF2) && pp->class_ == BERSERKER) { + pp->skills[EQ::skills::Skill1HPiercing] = pp->skills[EQ::skills::Skill2HPiercing]; + pp->skills[EQ::skills::Skill2HPiercing] = 0; } } @@ -1907,41 +1907,41 @@ void Client::SetRaceStartingSkills( PlayerProfile_Struct *pp ) } case DARK_ELF: { - pp->skills[EQEmu::skills::SkillHide] = 50; + pp->skills[EQ::skills::SkillHide] = 50; break; } case FROGLOK: { - pp->skills[EQEmu::skills::SkillSwimming] = 125; + pp->skills[EQ::skills::SkillSwimming] = 125; break; } case GNOME: { - pp->skills[EQEmu::skills::SkillTinkering] = 50; + pp->skills[EQ::skills::SkillTinkering] = 50; break; } case HALFLING: { - pp->skills[EQEmu::skills::SkillHide] = 50; - pp->skills[EQEmu::skills::SkillSneak] = 50; + pp->skills[EQ::skills::SkillHide] = 50; + pp->skills[EQ::skills::SkillSneak] = 50; break; } case IKSAR: { - pp->skills[EQEmu::skills::SkillForage] = 50; - pp->skills[EQEmu::skills::SkillSwimming] = 100; + pp->skills[EQ::skills::SkillForage] = 50; + pp->skills[EQ::skills::SkillSwimming] = 100; break; } case WOOD_ELF: { - pp->skills[EQEmu::skills::SkillForage] = 50; - pp->skills[EQEmu::skills::SkillHide] = 50; + pp->skills[EQ::skills::SkillForage] = 50; + pp->skills[EQ::skills::SkillHide] = 50; break; } case VAHSHIR: { - pp->skills[EQEmu::skills::SkillSafeFall] = 50; - pp->skills[EQEmu::skills::SkillSneak] = 50; + pp->skills[EQ::skills::SkillSafeFall] = 50; + pp->skills[EQ::skills::SkillSneak] = 50; break; } } diff --git a/world/client.h b/world/client.h index 4dbad85c5..289cf63af 100644 --- a/world/client.h +++ b/world/client.h @@ -68,7 +68,7 @@ public: inline const char* GetLSKey() { if (cle) { return cle->GetLSKey(); } return "NOKEY"; } inline uint32 GetCharID() { return charid; } inline const char* GetCharName() { return char_name; } - inline EQEmu::versions::ClientVersion GetClientVersion() { return m_ClientVersion; } + inline EQ::versions::ClientVersion GetClientVersion() { return m_ClientVersion; } inline ClientListEntry* GetCLE() { return cle; } inline void SetCLE(ClientListEntry* iCLE) { cle = iCLE; } private: @@ -85,7 +85,7 @@ private: bool enter_world_triggered; bool StartInTutorial; - EQEmu::versions::ClientVersion m_ClientVersion; + EQ::versions::ClientVersion m_ClientVersion; uint32 m_ClientVersionBit; bool OPCharCreate(char *name, CharCreate_Struct *cc); diff --git a/world/main.cpp b/world/main.cpp index 9aac1a903..526f839e5 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -99,7 +99,7 @@ UCSConnection UCSLink; QueryServConnection QSLink; LauncherList launcher_list; AdventureManager adventure_manager; -EQEmu::Random emu_random; +EQ::Random emu_random; volatile bool RunLoops = true; uint32 numclients = 0; uint32 numzones = 0; @@ -364,7 +364,7 @@ int main(int argc, char** argv) { } } - EQEmu::InitializeDynamicLookups(); + EQ::InitializeDynamicLookups(); LogInfo("Initialized dynamic dictionary entries"); if (RuleB(World, ClearTempMerchantlist)) { diff --git a/world/worlddb.cpp b/world/worlddb.cpp index f45207273..f42c04964 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -38,16 +38,16 @@ extern std::vector character_create_race_class_combos; */ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **out_app, uint32 client_version_bit) { - EQEmu::versions::ClientVersion - client_version = EQEmu::versions::ConvertClientVersionBitToClientVersion(client_version_bit); - size_t character_limit = EQEmu::constants::StaticLookup(client_version)->CharacterCreationLimit; + EQ::versions::ClientVersion + client_version = EQ::versions::ConvertClientVersionBitToClientVersion(client_version_bit); + size_t character_limit = EQ::constants::StaticLookup(client_version)->CharacterCreationLimit; - if (character_limit > EQEmu::constants::CHARACTER_CREATION_LIMIT) { - character_limit = EQEmu::constants::CHARACTER_CREATION_LIMIT; + if (character_limit > EQ::constants::CHARACTER_CREATION_LIMIT) { + character_limit = EQ::constants::CHARACTER_CREATION_LIMIT; } // Force Titanium clients to use '8' - if (client_version == EQEmu::versions::ClientVersion::Titanium) { + if (client_version == EQ::versions::ClientVersion::Titanium) { character_limit = 8; } @@ -104,9 +104,9 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o for (auto row = results.begin(); row != results.end(); ++row) { CharacterSelectEntry_Struct *p_character_select_entry_struct = (CharacterSelectEntry_Struct *) buff_ptr; PlayerProfile_Struct player_profile_struct; - EQEmu::InventoryProfile inventory_profile; + EQ::InventoryProfile inventory_profile; - player_profile_struct.SetPlayerProfileVersion(EQEmu::versions::ConvertClientVersionToMobVersion(client_version)); + player_profile_struct.SetPlayerProfileVersion(EQ::versions::ConvertClientVersionToMobVersion(client_version)); inventory_profile.SetInventoryVersion(client_version); inventory_profile.SetGMInventory(true); // charsel can not interact with items..but, no harm in setting to full expansion support @@ -128,7 +128,7 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o p_character_select_entry_struct->Gender = (uint8) atoi(row[2]); p_character_select_entry_struct->Face = (uint8) atoi(row[15]); - for (uint32 material_slot = 0; material_slot < EQEmu::textures::materialCount; material_slot++) { + for (uint32 material_slot = 0; material_slot < EQ::textures::materialCount; material_slot++) { p_character_select_entry_struct->Equip[material_slot].Material = 0; p_character_select_entry_struct->Equip[material_slot].Unknown1 = 0; p_character_select_entry_struct->Equip[material_slot].EliteModel = 0; @@ -294,12 +294,12 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o } if (GetCharSelInventory(account_id, p_character_select_entry_struct->Name, &inventory_profile)) { - const EQEmu::ItemData *item = nullptr; - const EQEmu::ItemInstance *inst = nullptr; + const EQ::ItemData *item = nullptr; + const EQ::ItemInstance *inst = nullptr; int16 inventory_slot = 0; - for (uint32 matslot = EQEmu::textures::textureBegin; matslot < EQEmu::textures::materialCount; matslot++) { - inventory_slot = EQEmu::InventoryProfile::CalcSlotFromMaterial(matslot); + for (uint32 matslot = EQ::textures::textureBegin; matslot < EQ::textures::materialCount; matslot++) { + inventory_slot = EQ::InventoryProfile::CalcSlotFromMaterial(matslot); if (inventory_slot == INVALID_INDEX) { continue; } inst = inventory_profile.GetItem(inventory_slot); if (inst == nullptr) { @@ -323,7 +323,7 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, EQApplicationPacket **o p_character_select_entry_struct->Equip[matslot].Material = item_id_file; } } - if (matslot == EQEmu::textures::weaponPrimary) { + if (matslot == EQ::textures::weaponPrimary) { p_character_select_entry_struct->PrimaryIDFile = item_id_file; } else { @@ -645,7 +645,7 @@ bool WorldDatabase::LoadCharacterCreateCombos() } // this is a slightly modified version of SharedDatabase::GetInventory(...) for character select use-only -bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::InventoryProfile *inv) +bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQ::InventoryProfile *inv) { if (!account_id || !name || !inv) return false; @@ -683,8 +683,8 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In " slotid <= %i", name, account_id, - EQEmu::invslot::slotHead, - EQEmu::invslot::slotFeet + EQ::invslot::slotHead, + EQ::invslot::slotFeet ); auto results = QueryDatabase(query); if (!results.Success()) @@ -694,13 +694,13 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In int16 slot_id = atoi(row[0]); switch (slot_id) { - case EQEmu::invslot::slotFace: - case EQEmu::invslot::slotEar2: - case EQEmu::invslot::slotNeck: - case EQEmu::invslot::slotShoulders: - case EQEmu::invslot::slotBack: - case EQEmu::invslot::slotFinger1: - case EQEmu::invslot::slotFinger2: + case EQ::invslot::slotFace: + case EQ::invslot::slotEar2: + case EQ::invslot::slotNeck: + case EQ::invslot::slotShoulders: + case EQ::invslot::slotBack: + case EQ::invslot::slotFinger1: + case EQ::invslot::slotFinger2: continue; default: break; @@ -710,7 +710,7 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In int8 charges = atoi(row[2]); uint32 color = atoul(row[3]); - uint32 aug[EQEmu::invaug::SOCKET_COUNT]; + uint32 aug[EQ::invaug::SOCKET_COUNT]; aug[0] = (uint32)atoi(row[4]); aug[1] = (uint32)atoi(row[5]); aug[2] = (uint32)atoi(row[6]); @@ -723,11 +723,11 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In uint32 ornament_idfile = (uint32)atoul(row[13]); uint32 ornament_hero_model = (uint32)atoul(row[14]); - const EQEmu::ItemData *item = GetItem(item_id); + const EQ::ItemData *item = GetItem(item_id); if (!item) continue; - EQEmu::ItemInstance *inst = CreateBaseItem(item, charges); + EQ::ItemInstance *inst = CreateBaseItem(item, charges); if (inst == nullptr) continue; @@ -770,7 +770,7 @@ bool WorldDatabase::GetCharSelInventory(uint32 account_id, char *name, EQEmu::In inst->SetCharges(charges); if (item->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (aug[i]) inst->PutAugment(this, i, aug[i]); } diff --git a/world/worlddb.h b/world/worlddb.h index e367803ec..2000f9bf0 100644 --- a/world/worlddb.h +++ b/world/worlddb.h @@ -42,7 +42,7 @@ private: void SetTitaniumDefaultStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc); void SetSoFDefaultStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc); - bool GetCharSelInventory(uint32 account_id, char* name, EQEmu::InventoryProfile* inv); + bool GetCharSelInventory(uint32 account_id, char* name, EQ::InventoryProfile* inv); }; extern WorldDatabase database; diff --git a/world/zonelist.cpp b/world/zonelist.cpp index 7f898f89c..7bcc2f177 100644 --- a/world/zonelist.cpp +++ b/world/zonelist.cpp @@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA extern uint32 numzones; extern bool holdzones; -extern EQEmu::Random emu_random; +extern EQ::Random emu_random; extern WebInterfaceList web_interface; volatile bool UCSServerAvailable_ = false; void CatchSignal(int sig_num); diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 3b1bfad38..282c5f6be 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1078,7 +1078,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { LogInfo("Unable to locate zone record for zone id [{}] or instance id [{}] in zoneserver list for ServerOP_Consent_Response operation", s->zone_id, s->instance_id); } - if (s->consent_type == EQEmu::consent::Normal) { + if (s->consent_type == EQ::consent::Normal) { // send the message to the client being granted or denied permission ClientListEntry* cle = client_list.FindCharacter(s->grantname); if (cle) { diff --git a/zone/aa.cpp b/zone/aa.cpp index 1ccc6f656..39df8d4bc 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -441,12 +441,12 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) //gear stuff, need to make sure there's //no situation where this stuff can be duped - for (int x = EQEmu::invslot::EQUIPMENT_BEGIN; x <= EQEmu::invslot::EQUIPMENT_END; x++) + for (int x = EQ::invslot::EQUIPMENT_BEGIN; x <= EQ::invslot::EQUIPMENT_END; x++) { uint32 sitem = 0; sitem = CorpseToUse->GetWornItem(x); if(sitem){ - const EQEmu::ItemData * itm = database.GetItem(sitem); + const EQ::ItemData * itm = database.GetItem(sitem); npca->AddLootDrop(itm, &npca->itemlist, 1, 1, 255, true, true); } } @@ -494,7 +494,7 @@ void Client::ResetAA() { database.DeleteCharacterLeadershipAAs(CharacterID()); // undefined for these clients - if (ClientVersionBit() & EQEmu::versions::maskTitaniumAndEarlier) + if (ClientVersionBit() & EQ::versions::maskTitaniumAndEarlier) Kick("AA Reset on client that doesn't support it"); } @@ -1245,12 +1245,12 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) { // Bards can cast instant cast AAs while they are casting another song if(spells[rank->spell].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) { - if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), EQEmu::spells::CastingSlot::AltAbility, spells[rank->spell].mana, -1, spells[rank->spell].ResistDiff, false)) { + if(!SpellFinished(rank->spell, entity_list.GetMob(target_id), EQ::spells::CastingSlot::AltAbility, spells[rank->spell].mana, -1, spells[rank->spell].ResistDiff, false)) { return; } ExpendAlternateAdvancementCharge(ability->id); } else { - if(!CastSpell(rank->spell, target_id, EQEmu::spells::CastingSlot::AltAbility, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { + if(!CastSpell(rank->spell, target_id, EQ::spells::CastingSlot::AltAbility, -1, -1, 0, -1, rank->spell_type + pTimerAAStart, cooldown, nullptr, rank->id)) { return; } } @@ -1479,7 +1479,7 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) { //the one titanium hack i will allow //just to make sure we dont crash the client with newer aas //we'll exclude any expendable ones - if(IsClient() && CastToClient()->ClientVersionBit() & EQEmu::versions::maskTitaniumAndEarlier) { + if(IsClient() && CastToClient()->ClientVersionBit() & EQ::versions::maskTitaniumAndEarlier) { if(ability->charges > 0) { return false; } diff --git a/zone/attack.cpp b/zone/attack.cpp index 4da160608..4ac29fdc0 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -59,74 +59,74 @@ extern FastMath g_Math; extern EntityList entity_list; extern Zone* zone; -EQEmu::skills::SkillType Mob::AttackAnimation(int Hand, const EQEmu::ItemInstance* weapon, EQEmu::skills::SkillType skillinuse) +EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* weapon, EQ::skills::SkillType skillinuse) { // Determine animation int type = 0; if (weapon && weapon->IsClassCommon()) { - const EQEmu::ItemData* item = weapon->GetItem(); + const EQ::ItemData* item = weapon->GetItem(); Log(Logs::Detail, Logs::Attack, "Weapon skill : %i", item->ItemType); switch (item->ItemType) { - case EQEmu::item::ItemType1HSlash: // 1H Slashing - skillinuse = EQEmu::skills::Skill1HSlashing; + case EQ::item::ItemType1HSlash: // 1H Slashing + skillinuse = EQ::skills::Skill1HSlashing; type = anim1HWeapon; break; - case EQEmu::item::ItemType2HSlash: // 2H Slashing - skillinuse = EQEmu::skills::Skill2HSlashing; + case EQ::item::ItemType2HSlash: // 2H Slashing + skillinuse = EQ::skills::Skill2HSlashing; type = anim2HSlashing; break; - case EQEmu::item::ItemType1HPiercing: // Piercing - skillinuse = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HPiercing: // Piercing + skillinuse = EQ::skills::Skill1HPiercing; type = anim1HPiercing; break; - case EQEmu::item::ItemType1HBlunt: // 1H Blunt - skillinuse = EQEmu::skills::Skill1HBlunt; + case EQ::item::ItemType1HBlunt: // 1H Blunt + skillinuse = EQ::skills::Skill1HBlunt; type = anim1HWeapon; break; - case EQEmu::item::ItemType2HBlunt: // 2H Blunt - skillinuse = EQEmu::skills::Skill2HBlunt; + case EQ::item::ItemType2HBlunt: // 2H Blunt + skillinuse = EQ::skills::Skill2HBlunt; type = anim2HSlashing; //anim2HWeapon break; - case EQEmu::item::ItemType2HPiercing: // 2H Piercing - if (IsClient() && CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::RoF2) - skillinuse = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType2HPiercing: // 2H Piercing + if (IsClient() && CastToClient()->ClientVersion() < EQ::versions::ClientVersion::RoF2) + skillinuse = EQ::skills::Skill1HPiercing; else - skillinuse = EQEmu::skills::Skill2HPiercing; + skillinuse = EQ::skills::Skill2HPiercing; type = anim2HWeapon; break; - case EQEmu::item::ItemTypeMartial: - skillinuse = EQEmu::skills::SkillHandtoHand; + case EQ::item::ItemTypeMartial: + skillinuse = EQ::skills::SkillHandtoHand; type = animHand2Hand; break; default: - skillinuse = EQEmu::skills::SkillHandtoHand; + skillinuse = EQ::skills::SkillHandtoHand; type = animHand2Hand; break; }// switch } else if (IsNPC()) { switch (skillinuse) { - case EQEmu::skills::Skill1HSlashing: // 1H Slashing + case EQ::skills::Skill1HSlashing: // 1H Slashing type = anim1HWeapon; break; - case EQEmu::skills::Skill2HSlashing: // 2H Slashing + case EQ::skills::Skill2HSlashing: // 2H Slashing type = anim2HSlashing; break; - case EQEmu::skills::Skill1HPiercing: // Piercing + case EQ::skills::Skill1HPiercing: // Piercing type = anim1HPiercing; break; - case EQEmu::skills::Skill1HBlunt: // 1H Blunt + case EQ::skills::Skill1HBlunt: // 1H Blunt type = anim1HWeapon; break; - case EQEmu::skills::Skill2HBlunt: // 2H Blunt + case EQ::skills::Skill2HBlunt: // 2H Blunt type = anim2HSlashing; //anim2HWeapon break; - case EQEmu::skills::Skill2HPiercing: // 2H Piercing + case EQ::skills::Skill2HPiercing: // 2H Piercing type = anim2HWeapon; break; - case EQEmu::skills::SkillHandtoHand: + case EQ::skills::SkillHandtoHand: type = animHand2Hand; break; default: @@ -135,12 +135,12 @@ EQEmu::skills::SkillType Mob::AttackAnimation(int Hand, const EQEmu::ItemInstanc }// switch } else { - skillinuse = EQEmu::skills::SkillHandtoHand; + skillinuse = EQ::skills::SkillHandtoHand; type = animHand2Hand; } // If we're attacking with the secondary hand, play the dual wield anim - if (Hand == EQEmu::invslot::slotSecondary) // DW anim + if (Hand == EQ::invslot::slotSecondary) // DW anim type = animDualWield; DoAnim(type, 0, false); @@ -148,9 +148,9 @@ EQEmu::skills::SkillType Mob::AttackAnimation(int Hand, const EQEmu::ItemInstanc return skillinuse; } -int Mob::compute_tohit(EQEmu::skills::SkillType skillinuse) +int Mob::compute_tohit(EQ::skills::SkillType skillinuse) { - int tohit = GetSkill(EQEmu::skills::SkillOffense) + 7; + int tohit = GetSkill(EQ::skills::SkillOffense) + 7; tohit += GetSkill(skillinuse); if (IsNPC()) tohit += CastToNPC()->GetAccuracyRating(); @@ -168,7 +168,7 @@ int Mob::compute_tohit(EQEmu::skills::SkillType skillinuse) } // return -1 in cases that always hit -int Mob::GetTotalToHit(EQEmu::skills::SkillType skill, int chance_mod) +int Mob::GetTotalToHit(EQ::skills::SkillType skill, int chance_mod) { if (chance_mod >= 10000) // override for stuff like SE_SkillAttack return -1; @@ -185,13 +185,13 @@ int Mob::GetTotalToHit(EQEmu::skills::SkillType skill, int chance_mod) // unsure on the stacking order of these effects, rather hard to parse // item mod2 accuracy isn't applied to range? Theory crafting and parses back it up I guess // mod2 accuracy -- flat bonus - if (skill != EQEmu::skills::SkillArchery && skill != EQEmu::skills::SkillThrowing) + if (skill != EQ::skills::SkillArchery && skill != EQ::skills::SkillThrowing) accuracy += itembonuses.HitChance; // 216 Melee Accuracy Amt aka SE_Accuracy -- flat bonus - accuracy += itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + - aabonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + - spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + + accuracy += itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + + aabonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + + spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.Accuracy[skill] + aabonuses.Accuracy[skill] + spellbonuses.Accuracy[skill]; @@ -200,13 +200,13 @@ int Mob::GetTotalToHit(EQEmu::skills::SkillType skill, int chance_mod) if (spellbonuses.HitChanceEffect[skill] >= 10000 || aabonuses.HitChanceEffect[skill] >= 10000) return -1; - if (spellbonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] >= 10000) + if (spellbonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] >= 10000) return -1; // 184 Accuracy % aka SE_HitChance -- percentage increase - auto hit_bonus = itembonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] + - aabonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] + - spellbonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] + + auto hit_bonus = itembonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] + + aabonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] + + spellbonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.HitChanceEffect[skill] + aabonuses.HitChanceEffect[skill] + spellbonuses.HitChanceEffect[skill]; @@ -228,7 +228,7 @@ int Mob::GetTotalToHit(EQEmu::skills::SkillType skill, int chance_mod) // the AGI bonus has actually drastically changed from classic int Mob::compute_defense() { - int defense = GetSkill(EQEmu::skills::SkillDefense) * 400 / 225; + int defense = GetSkill(EQ::skills::SkillDefense) * 400 / 225; defense += (8000 * (GetAGI() - 40)) / 36000; if (IsClient()) defense += CastToClient()->GetHeroicAGI() / 10; @@ -390,20 +390,20 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) // riposte -- it may seem crazy, but if the attacker has SPA 173 on them, they are immune to Ripo bool ImmuneRipo = attacker->aabonuses.RiposteChance || attacker->spellbonuses.RiposteChance || attacker->itembonuses.RiposteChance || attacker->IsEnraged(); // Need to check if we have something in MainHand to actually attack with (or fists) - if (hit.hand != EQEmu::invslot::slotRange && (CanThisClassRiposte() || IsEnraged()) && InFront && !ImmuneRipo) { + if (hit.hand != EQ::invslot::slotRange && (CanThisClassRiposte() || IsEnraged()) && InFront && !ImmuneRipo) { if (IsEnraged()) { hit.damage_done = DMG_RIPOSTED; LogCombat("I am enraged, riposting frontal attack"); return true; } if (IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillRiposte, other, -10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillRiposte, other, -10); // check auto discs ... I guess aa/items too :P if (spellbonuses.RiposteChance == 10000 || aabonuses.RiposteChance == 10000 || itembonuses.RiposteChance == 10000) { hit.damage_done = DMG_RIPOSTED; return true; } - int chance = GetSkill(EQEmu::skills::SkillRiposte) + 100; + int chance = GetSkill(EQ::skills::SkillRiposte) + 100; chance += (chance * (aabonuses.RiposteChance + spellbonuses.RiposteChance + itembonuses.RiposteChance)) / 100; chance /= 50; chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter @@ -412,7 +412,7 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) chance -= chance * counter; } // AA Slippery Attacks - if (hit.hand == EQEmu::invslot::slotSecondary) { + if (hit.hand == EQ::invslot::slotSecondary) { int slip = aabonuses.OffhandRiposteFail + itembonuses.OffhandRiposteFail + spellbonuses.OffhandRiposteFail; chance += chance * slip / 100; } @@ -435,14 +435,14 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) if (CanThisClassBlock() && (InFront || bBlockFromRear)) { if (IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillBlock, other, -10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillBlock, other, -10); // check auto discs ... I guess aa/items too :P if (spellbonuses.IncreaseBlockChance == 10000 || aabonuses.IncreaseBlockChance == 10000 || itembonuses.IncreaseBlockChance == 10000) { hit.damage_done = DMG_BLOCKED; return true; } - int chance = GetSkill(EQEmu::skills::SkillBlock) + 100; + int chance = GetSkill(EQ::skills::SkillBlock) + 100; chance += (chance * (aabonuses.IncreaseBlockChance + spellbonuses.IncreaseBlockChance + itembonuses.IncreaseBlockChance)) / 100; chance /= 25; chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter @@ -457,15 +457,15 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) } // parry - if (CanThisClassParry() && InFront && hit.hand != EQEmu::invslot::slotRange) { + if (CanThisClassParry() && InFront && hit.hand != EQ::invslot::slotRange) { if (IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillParry, other, -10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillParry, other, -10); // check auto discs ... I guess aa/items too :P if (spellbonuses.ParryChance == 10000 || aabonuses.ParryChance == 10000 || itembonuses.ParryChance == 10000) { hit.damage_done = DMG_PARRIED; return true; } - int chance = GetSkill(EQEmu::skills::SkillParry) + 100; + int chance = GetSkill(EQ::skills::SkillParry) + 100; chance += (chance * (aabonuses.ParryChance + spellbonuses.ParryChance + itembonuses.ParryChance)) / 100; chance /= 45; chance += itembonuses.HeroicDEX / 25; // live has "heroic strickthrough" here to counter @@ -482,13 +482,13 @@ bool Mob::AvoidDamage(Mob *other, DamageHitInfo &hit) // dodge if (CanThisClassDodge() && (InFront || GetClass() == MONK)) { if (IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillDodge, other, -10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillDodge, other, -10); // check auto discs ... I guess aa/items too :P if (spellbonuses.DodgeChance == 10000 || aabonuses.DodgeChance == 10000 || itembonuses.DodgeChance == 10000) { hit.damage_done = DMG_DODGED; return true; } - int chance = GetSkill(EQEmu::skills::SkillDodge) + 100; + int chance = GetSkill(EQ::skills::SkillDodge) + 100; chance += (chance * (aabonuses.DodgeChance + spellbonuses.DodgeChance + itembonuses.DodgeChance)) / 100; chance /= 45; chance += itembonuses.HeroicAGI / 25; // live has "heroic strickthrough" here to counter @@ -775,7 +775,7 @@ int Mob::GetClassRaceACBonus() } if (GetRace() == IKSAR) - ac_bonus += EQEmu::Clamp(static_cast(level), 10, 35); + ac_bonus += EQ::Clamp(static_cast(level), 10, 35); return ac_bonus; } @@ -787,7 +787,7 @@ int Mob::ACSum() int shield_ac = 0; if (HasShieldEquiped() && IsClient()) { auto client = CastToClient(); - auto inst = client->GetInv().GetItem(EQEmu::invslot::slotSecondary); + auto inst = client->GetInv().GetItem(EQ::invslot::slotSecondary); if (inst) { if (inst->GetItemRecommendedLevel(true) <= GetLevel()) shield_ac = inst->GetItemArmorClass(true); @@ -816,18 +816,18 @@ int Mob::ACSum() if (owner) ac += owner->aabonuses.PetAvoidance + owner->spellbonuses.PetAvoidance + owner->itembonuses.PetAvoidance; auto spell_aa_ac = aabonuses.AC + spellbonuses.AC; - ac += GetSkill(EQEmu::skills::SkillDefense) / 5; - if (EQEmu::ValueWithin(static_cast(GetClass()), NECROMANCER, ENCHANTER)) + ac += GetSkill(EQ::skills::SkillDefense) / 5; + if (EQ::ValueWithin(static_cast(GetClass()), NECROMANCER, ENCHANTER)) ac += spell_aa_ac / 3; else ac += spell_aa_ac / 4; } else { // TODO: so we can't set NPC skills ... so the skill bonus ends up being HUGE so lets nerf them a bit auto spell_aa_ac = aabonuses.AC + spellbonuses.AC; - if (EQEmu::ValueWithin(static_cast(GetClass()), NECROMANCER, ENCHANTER)) - ac += GetSkill(EQEmu::skills::SkillDefense) / 2 + spell_aa_ac / 3; + if (EQ::ValueWithin(static_cast(GetClass()), NECROMANCER, ENCHANTER)) + ac += GetSkill(EQ::skills::SkillDefense) / 2 + spell_aa_ac / 3; else - ac += GetSkill(EQEmu::skills::SkillDefense) / 3 + spell_aa_ac / 4; + ac += GetSkill(EQ::skills::SkillDefense) / 3 + spell_aa_ac / 4; } if (GetAGI() > 70) @@ -862,19 +862,19 @@ int Mob::ACSum() int Mob::GetBestMeleeSkill() { int bestSkill=0; - EQEmu::skills::SkillType meleeSkills[]= - { EQEmu::skills::Skill1HBlunt, - EQEmu::skills::Skill1HSlashing, - EQEmu::skills::Skill2HBlunt, - EQEmu::skills::Skill2HSlashing, - EQEmu::skills::SkillHandtoHand, - EQEmu::skills::Skill1HPiercing, - EQEmu::skills::Skill2HPiercing, - EQEmu::skills::SkillCount + EQ::skills::SkillType meleeSkills[]= + { EQ::skills::Skill1HBlunt, + EQ::skills::Skill1HSlashing, + EQ::skills::Skill2HBlunt, + EQ::skills::Skill2HSlashing, + EQ::skills::SkillHandtoHand, + EQ::skills::Skill1HPiercing, + EQ::skills::Skill2HPiercing, + EQ::skills::SkillCount }; int i; - for (i=0; meleeSkills[i] != EQEmu::skills::SkillCount; ++i) { + for (i=0; meleeSkills[i] != EQ::skills::SkillCount; ++i) { int value; value = GetSkill(meleeSkills[i]); bestSkill = std::max(value, bestSkill); @@ -883,14 +883,14 @@ int Mob::GetBestMeleeSkill() return bestSkill; } -int Mob::offense(EQEmu::skills::SkillType skill) +int Mob::offense(EQ::skills::SkillType skill) { int offense = GetSkill(skill); int stat_bonus = GetSTR(); switch (skill) { - case EQEmu::skills::SkillArchery: - case EQEmu::skills::SkillThrowing: + case EQ::skills::SkillArchery: + case EQ::skills::SkillThrowing: stat_bonus = GetDEX(); break; @@ -901,7 +901,7 @@ int Mob::offense(EQEmu::skills::SkillType skill) // // Maybe we tweak this if Disarm is actually implemented. - case EQEmu::skills::SkillHandtoHand: + case EQ::skills::SkillHandtoHand: offense = GetBestMeleeSkill(); break; } @@ -933,7 +933,7 @@ double Mob::RollD20(int offense, int mitigation) int avg = (offense + mitigation + 10) / 2; int index = std::max(0, (atk_roll - def_roll) + (avg / 2)); - index = EQEmu::Clamp((index * 20) / avg, 0, 19); + index = EQ::Clamp((index * 20) / avg, 0, 19); return mods[index]; } @@ -973,9 +973,9 @@ void Mob::MeleeMitigation(Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions //Returns the weapon damage against the input mob //if we cannot hit the mob with the current weapon we will get a value less than or equal to zero //Else we know we can hit. -//GetWeaponDamage(mob*, const EQEmu::ItemData*) is intended to be used for mobs or any other situation where we do not have a client inventory item -//GetWeaponDamage(mob*, const EQEmu::ItemInstance*) is intended to be used for situations where we have a client inventory item -int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemData *weapon_item) { +//GetWeaponDamage(mob*, const EQ::ItemData*) is intended to be used for mobs or any other situation where we do not have a client inventory item +//GetWeaponDamage(mob*, const EQ::ItemInstance*) is intended to be used for situations where we have a client inventory item +int Mob::GetWeaponDamage(Mob *against, const EQ::ItemData *weapon_item) { int dmg = 0; int banedmg = 0; @@ -1075,7 +1075,7 @@ int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemData *weapon_item) { return dmg; } -int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemInstance *weapon_item, uint32 *hate) +int Mob::GetWeaponDamage(Mob *against, const EQ::ItemInstance *weapon_item, uint32 *hate) { int dmg = 0; int banedmg = 0; @@ -1116,7 +1116,7 @@ int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemInstance *weapon_item, u else { bool MagicGloves = false; if (IsClient()) { - const EQEmu::ItemInstance *gloves = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotHands); + const EQ::ItemInstance *gloves = CastToClient()->GetInv().GetItem(EQ::invslot::slotHands); if (gloves) MagicGloves = gloves->GetItemMagical(true); } @@ -1401,13 +1401,13 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b if (GetFeigned()) return false; // Rogean: How can you attack while feigned? Moved up from Aggro Code. - EQEmu::ItemInstance* weapon = nullptr; - if (Hand == EQEmu::invslot::slotSecondary) { // Kaiyodo - Pick weapon from the attacking hand - weapon = GetInv().GetItem(EQEmu::invslot::slotSecondary); + EQ::ItemInstance* weapon = nullptr; + if (Hand == EQ::invslot::slotSecondary) { // Kaiyodo - Pick weapon from the attacking hand + weapon = GetInv().GetItem(EQ::invslot::slotSecondary); OffHandAtk(true); } else { - weapon = GetInv().GetItem(EQEmu::invslot::slotPrimary); + weapon = GetInv().GetItem(EQ::invslot::slotPrimary); OffHandAtk(false); } @@ -1445,16 +1445,16 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b if (my_hit.base_damage > 0) { // if we revamp this function be more general, we will have to make sure this isn't // executed for anything BUT normal melee damage weapons from auto attack - if (Hand == EQEmu::invslot::slotPrimary || Hand == EQEmu::invslot::slotSecondary) + if (Hand == EQ::invslot::slotPrimary || Hand == EQ::invslot::slotSecondary) my_hit.base_damage = DoDamageCaps(my_hit.base_damage); auto shield_inc = spellbonuses.ShieldEquipDmgMod + itembonuses.ShieldEquipDmgMod + aabonuses.ShieldEquipDmgMod; - if (shield_inc > 0 && HasShieldEquiped() && Hand == EQEmu::invslot::slotPrimary) { + if (shield_inc > 0 && HasShieldEquiped() && Hand == EQ::invslot::slotPrimary) { my_hit.base_damage = my_hit.base_damage * (100 + shield_inc) / 100; hate = hate * (100 + shield_inc) / 100; } CheckIncreaseSkill(my_hit.skill, other, -15); - CheckIncreaseSkill(EQEmu::skills::SkillOffense, other, -15); + CheckIncreaseSkill(EQ::skills::SkillOffense, other, -15); // *************************************************************** // *** Calculate the damage bonus, if applicable, for this hit *** @@ -1470,22 +1470,22 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b int ucDamageBonus = 0; - if (Hand == EQEmu::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) + if (Hand == EQ::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) { // Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above // who belong to a melee class. If we're here, then all of these conditions apply. - ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr); + ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQ::ItemData*) nullptr); my_hit.min_damage = ucDamageBonus; hate += ucDamageBonus; } #endif //Live AA - Sinister Strikes *Adds weapon damage bonus to offhand weapon. - if (Hand == EQEmu::invslot::slotSecondary) { + if (Hand == EQ::invslot::slotSecondary) { if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc) { - ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr, true); + ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQ::ItemData*) nullptr, true); my_hit.min_damage = ucDamageBonus; hate += ucDamageBonus; @@ -1528,7 +1528,7 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b IsValidSpell(aabonuses.SkillAttackProc[2])) { float chance = aabonuses.SkillAttackProc[0] / 1000.0f; if (zone->random.Roll(chance)) - SpellFinished(aabonuses.SkillAttackProc[2], other, EQEmu::spells::CastingSlot::Item, 0, -1, + SpellFinished(aabonuses.SkillAttackProc[2], other, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } other->Damage(this, my_hit.damage_done, SPELL_UNKNOWN, my_hit.skill, true, -1, false, m_specialattacks); @@ -1559,7 +1559,7 @@ void Mob::Heal() SendHPUpdate(); } -void Client::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) +void Client::Damage(Mob* other, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { if (dead || IsCorpse()) return; @@ -1574,7 +1574,7 @@ void Client::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::Sk //patch notes on PVP reductions only mention archery/throwing ... not normal dmg if (other && other->IsClient() && (other != this) && damage > 0) { int PvPMitigation = 100; - if (attack_skill == EQEmu::skills::SkillArchery || attack_skill == EQEmu::skills::SkillThrowing) + if (attack_skill == EQ::skills::SkillArchery || attack_skill == EQ::skills::SkillThrowing) PvPMitigation = 80; else PvPMitigation = 67; @@ -1590,11 +1590,11 @@ void Client::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::Sk if (damage > 0) { if (spell_id == SPELL_UNKNOWN) - CheckIncreaseSkill(EQEmu::skills::SkillDefense, other, -15); + CheckIncreaseSkill(EQ::skills::SkillDefense, other, -15); } } -bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::SkillType attack_skill) +bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQ::skills::SkillType attack_skill) { if (!ClientFinishedLoading()) return false; @@ -1796,7 +1796,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk //this generates a lot of 'updates' to the client that the client does not need BuffFadeNonPersistDeath(); if (RuleB(Character, UnmemSpellsOnDeath)) { - if ((ClientVersionBit() & EQEmu::versions::maskSoFAndLater) && RuleB(Character, RespawnFromHover)) + if ((ClientVersionBit() & EQ::versions::maskSoFAndLater) && RuleB(Character, RespawnFromHover)) UnmemSpellAll(true); else UnmemSpellAll(false); @@ -1870,7 +1870,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk from these and overwrite what we set in pp anyway */ - if (LeftCorpse && (ClientVersionBit() & EQEmu::versions::maskSoFAndLater) && RuleB(Character, RespawnFromHover)) + if (LeftCorpse && (ClientVersionBit() & EQ::versions::maskSoFAndLater) && RuleB(Character, RespawnFromHover)) { ClearDraggedCorpses(); RespawnFromHoverTimer.Start(RuleI(Character, RespawnFromHoverTimer) * 1000); @@ -1940,63 +1940,63 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool FaceTarget(GetTarget()); DamageHitInfo my_hit; - my_hit.skill = EQEmu::skills::SkillHandtoHand; + my_hit.skill = EQ::skills::SkillHandtoHand; my_hit.hand = Hand; my_hit.damage_done = 1; - if (Hand == EQEmu::invslot::slotPrimary) { - my_hit.skill = static_cast(GetPrimSkill()); + if (Hand == EQ::invslot::slotPrimary) { + my_hit.skill = static_cast(GetPrimSkill()); OffHandAtk(false); } - if (Hand == EQEmu::invslot::slotSecondary) { - my_hit.skill = static_cast(GetSecSkill()); + if (Hand == EQ::invslot::slotSecondary) { + my_hit.skill = static_cast(GetSecSkill()); OffHandAtk(true); } //figure out what weapon they are using, if any - const EQEmu::ItemData* weapon = nullptr; - if (Hand == EQEmu::invslot::slotPrimary && equipment[EQEmu::invslot::slotPrimary] > 0) - weapon = database.GetItem(equipment[EQEmu::invslot::slotPrimary]); - else if (equipment[EQEmu::invslot::slotSecondary]) - weapon = database.GetItem(equipment[EQEmu::invslot::slotSecondary]); + const EQ::ItemData* weapon = nullptr; + if (Hand == EQ::invslot::slotPrimary && equipment[EQ::invslot::slotPrimary] > 0) + weapon = database.GetItem(equipment[EQ::invslot::slotPrimary]); + else if (equipment[EQ::invslot::slotSecondary]) + weapon = database.GetItem(equipment[EQ::invslot::slotSecondary]); //We dont factor much from the weapon into the attack. //Just the skill type so it doesn't look silly using punching animations and stuff while wielding weapons if (weapon) { LogCombat("Attacking with weapon: [{}] ([{}]) (too bad im not using it for much)", weapon->Name, weapon->ID); - if (Hand == EQEmu::invslot::slotSecondary && !weapon->IsType1HWeapon()) { + if (Hand == EQ::invslot::slotSecondary && !weapon->IsType1HWeapon()) { LogCombat("Attack with non-weapon cancelled"); return false; } switch (weapon->ItemType) { - case EQEmu::item::ItemType1HSlash: - my_hit.skill = EQEmu::skills::Skill1HSlashing; + case EQ::item::ItemType1HSlash: + my_hit.skill = EQ::skills::Skill1HSlashing; break; - case EQEmu::item::ItemType2HSlash: - my_hit.skill = EQEmu::skills::Skill2HSlashing; + case EQ::item::ItemType2HSlash: + my_hit.skill = EQ::skills::Skill2HSlashing; break; - case EQEmu::item::ItemType1HPiercing: - my_hit.skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HPiercing: + my_hit.skill = EQ::skills::Skill1HPiercing; break; - case EQEmu::item::ItemType2HPiercing: - my_hit.skill = EQEmu::skills::Skill2HPiercing; + case EQ::item::ItemType2HPiercing: + my_hit.skill = EQ::skills::Skill2HPiercing; break; - case EQEmu::item::ItemType1HBlunt: - my_hit.skill = EQEmu::skills::Skill1HBlunt; + case EQ::item::ItemType1HBlunt: + my_hit.skill = EQ::skills::Skill1HBlunt; break; - case EQEmu::item::ItemType2HBlunt: - my_hit.skill = EQEmu::skills::Skill2HBlunt; + case EQ::item::ItemType2HBlunt: + my_hit.skill = EQ::skills::Skill2HBlunt; break; - case EQEmu::item::ItemTypeBow: - my_hit.skill = EQEmu::skills::SkillArchery; + case EQ::item::ItemTypeBow: + my_hit.skill = EQ::skills::SkillArchery; break; - case EQEmu::item::ItemTypeLargeThrowing: - case EQEmu::item::ItemTypeSmallThrowing: - my_hit.skill = EQEmu::skills::SkillThrowing; + case EQ::item::ItemTypeLargeThrowing: + case EQ::item::ItemTypeSmallThrowing: + my_hit.skill = EQ::skills::SkillThrowing; break; default: - my_hit.skill = EQEmu::skills::SkillHandtoHand; + my_hit.skill = EQ::skills::SkillHandtoHand; break; } } @@ -2005,7 +2005,7 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool //do attack animation regardless of whether or not we can hit below int16 charges = 0; - EQEmu::ItemInstance weapon_inst(weapon, charges); + EQ::ItemInstance weapon_inst(weapon, charges); my_hit.skill = AttackAnimation(Hand, &weapon_inst, my_hit.skill); //basically "if not immune" then do the attack @@ -2117,7 +2117,7 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool return false; } -void NPC::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { +void NPC::Damage(Mob* other, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { if (spell_id == 0) spell_id = SPELL_UNKNOWN; @@ -2143,7 +2143,7 @@ void NPC::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::Skill if (IsLDoNTrapped()) { MessageString(Chat::Red, LDON_ACCIDENT_SETOFF2); - SpellFinished(GetLDoNTrapSpellID(), other, EQEmu::spells::CastingSlot::Item, 0, -1, spells[GetLDoNTrapSpellID()].ResistDiff, false); + SpellFinished(GetLDoNTrapSpellID(), other, EQ::spells::CastingSlot::Item, 0, -1, spells[GetLDoNTrapSpellID()].ResistDiff, false); SetLDoNTrapSpellID(0); SetLDoNTrapped(false); SetLDoNTrapDetected(false); @@ -2160,7 +2160,7 @@ void NPC::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::Skill } } -bool NPC::Death(Mob* killer_mob, int32 damage, uint16 spell, EQEmu::skills::SkillType attack_skill) +bool NPC::Death(Mob* killer_mob, int32 damage, uint16 spell, EQ::skills::SkillType attack_skill) { LogCombat("Fatal blow dealt by [{}] with [{}] damage, spell [{}], skill [{}]", ((killer_mob) ? (killer_mob->GetName()) : ("[nullptr]")), damage, spell, attack_skill); @@ -2839,7 +2839,7 @@ void Mob::DamageShield(Mob* attacker, bool spell_ds) { } DS -= DS * attacker->itembonuses.DSMitigation / 100; } - attacker->Damage(this, -DS, spellid, EQEmu::skills::SkillAbjuration/*hackish*/, false); + attacker->Damage(this, -DS, spellid, EQ::skills::SkillAbjuration/*hackish*/, false); //we can assume there is a spell now auto outapp = new EQApplicationPacket(OP_Damage, sizeof(CombatDamage_Struct)); CombatDamage_Struct* cds = (CombatDamage_Struct*)outapp->pBuffer; @@ -2867,12 +2867,12 @@ void Mob::DamageShield(Mob* attacker, bool spell_ds) { if (rev_ds < 0) { LogCombat("Applying Reverse Damage Shield of value [{}] to [{}]", rev_ds, attacker->GetName()); - attacker->Damage(this, -rev_ds, rev_ds_spell_id, EQEmu::skills::SkillAbjuration/*hackish*/, false); //"this" (us) will get the hate, etc. not sure how this works on Live, but it'll works for now, and tanks will love us for this + attacker->Damage(this, -rev_ds, rev_ds_spell_id, EQ::skills::SkillAbjuration/*hackish*/, false); //"this" (us) will get the hate, etc. not sure how this works on Live, but it'll works for now, and tanks will love us for this //do we need to send a damage packet here also? } } -uint8 Mob::GetWeaponDamageBonus(const EQEmu::ItemData *weapon, bool offhand) +uint8 Mob::GetWeaponDamageBonus(const EQ::ItemData *weapon, bool offhand) { // dev quote with old and new formulas // https://forums.daybreakgames.com/eq/index.php?threads/test-update-09-17-15.226618/page-5#post-3326194 @@ -2884,7 +2884,7 @@ uint8 Mob::GetWeaponDamageBonus(const EQEmu::ItemData *weapon, bool offhand) return 1 + ((level - 28) / 3); // how does weaponless scale? auto delay = weapon->Delay; - if (weapon->IsType1HWeapon() || weapon->ItemType == EQEmu::item::ItemTypeMartial) { + if (weapon->IsType1HWeapon() || weapon->ItemType == EQ::item::ItemTypeMartial) { // we assume sinister strikes is checked before calling here if (!offhand) { if (delay <= 39) @@ -2943,7 +2943,7 @@ int Mob::GetHandToHandDamage(void) { if (RuleB(Combat, UseRevampHandToHand)) { // everyone uses this in the revamp! - int skill = GetSkill(EQEmu::skills::SkillHandtoHand); + int skill = GetSkill(EQ::skills::SkillHandtoHand); int epic = 0; if (IsClient() && CastToClient()->GetItemIDAt(12) == 10652 && GetLevel() > 46) epic = 280; @@ -2985,7 +2985,7 @@ int Mob::GetHandToHandDelay(void) { if (RuleB(Combat, UseRevampHandToHand)) { // everyone uses this in the revamp! - int skill = GetSkill(EQEmu::skills::SkillHandtoHand); + int skill = GetSkill(EQ::skills::SkillHandtoHand); int epic = 0; int iksar = 0; if (IsClient() && CastToClient()->GetItemIDAt(12) == 10652 && GetLevel() > 46) @@ -3323,7 +3323,7 @@ bool Mob::HasRangedProcs() const bool Client::CheckDoubleAttack() { int chance = 0; - int skill = GetSkill(EQEmu::skills::SkillDoubleAttack); + int skill = GetSkill(EQ::skills::SkillDoubleAttack); //Check for bonuses that give you a double attack chance regardless of skill (ie Bestial Frenzy/Harmonious Attack AA) int bonusGiveDA = aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack; if (skill > 0) @@ -3344,7 +3344,7 @@ bool Client::CheckDoubleAttack() // with varying triple attack skill (1-3% error at least) bool Client::CheckTripleAttack() { - int chance = GetSkill(EQEmu::skills::SkillTripleAttack); + int chance = GetSkill(EQ::skills::SkillTripleAttack); if (chance < 1) return false; @@ -3368,7 +3368,7 @@ bool Mob::CheckDoubleAttack() { // Not 100% certain pets follow this or if it's just from pets not always // having the same skills as most mobs - int chance = GetSkill(EQEmu::skills::SkillDoubleAttack); + int chance = GetSkill(EQ::skills::SkillDoubleAttack); if (GetLevel() > 35) chance += GetLevel(); @@ -3379,9 +3379,9 @@ bool Mob::CheckDoubleAttack() return zone->random.Int(1, 500) <= chance; } -void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const EQEmu::skills::SkillType skill_used, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks special) { +void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const EQ::skills::SkillType skill_used, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks special) { // This method is called with skill_used=ABJURE for Damage Shield damage. - bool FromDamageShield = (skill_used == EQEmu::skills::SkillAbjuration); + bool FromDamageShield = (skill_used == EQ::skills::SkillAbjuration); bool ignore_invul = false; if (IsValidSpell(spell_id)) ignore_invul = spell_id == 982 || spells[spell_id].cast_not_standing; // cazic touch @@ -3392,7 +3392,7 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const } // this should actually happen MUCH sooner, need to investigate though -- good enough for now - if ((skill_used == EQEmu::skills::SkillArchery || skill_used == EQEmu::skills::SkillThrowing) && GetSpecialAbility(IMMUNE_RANGED_ATTACKS)) { + if ((skill_used == EQ::skills::SkillArchery || skill_used == EQ::skills::SkillThrowing) && GetSpecialAbility(IMMUNE_RANGED_ATTACKS)) { LogCombat("Avoiding [{}] damage due to IMMUNE_RANGED_ATTACKS", damage); damage = DMG_INVULNERABLE; } @@ -3402,7 +3402,7 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const // only apply DS if physical damage (no spell damage) // damage shield calls this function with spell_id set, so its unavoidable - if (attacker && damage > 0 && spell_id == SPELL_UNKNOWN && skill_used != EQEmu::skills::SkillArchery && skill_used != EQEmu::skills::SkillThrowing) { + if (attacker && damage > 0 && spell_id == SPELL_UNKNOWN && skill_used != EQ::skills::SkillArchery && skill_used != EQ::skills::SkillThrowing) { DamageShield(attacker); } @@ -3543,14 +3543,14 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const bool can_stun = false; int stunbash_chance = 0; // bonus if (attacker) { - if (skill_used == EQEmu::skills::SkillBash) { + if (skill_used == EQ::skills::SkillBash) { can_stun = true; if (attacker->IsClient()) stunbash_chance = attacker->spellbonuses.StunBashChance + attacker->itembonuses.StunBashChance + attacker->aabonuses.StunBashChance; } - else if (skill_used == EQEmu::skills::SkillKick && + else if (skill_used == EQ::skills::SkillKick && (attacker->GetLevel() > 55 || attacker->IsNPC()) && GetClass() == WARRIOR) { can_stun = true; } @@ -3593,7 +3593,7 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const else { // main stun failed -- extra interrupt roll if (IsCasting() && - !EQEmu::ValueWithin(casting_spell_id, 859, 1023)) // these spells are excluded + !EQ::ValueWithin(casting_spell_id, 859, 1023)) // these spells are excluded // 90% chance >< -- stun immune won't reach this branch though :( if (zone->random.Int(0, 9) > 1) InterruptSpell(); @@ -3642,7 +3642,7 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const a->hit_heading = attacker ? attacker->GetHeading() : 0.0f; if (RuleB(Combat, MeleePush) && damage > 0 && !IsRooted() && (IsClient() || zone->random.Roll(RuleI(Combat, MeleePushChance)))) { - a->force = EQEmu::skills::GetSkillMeleePushForce(skill_used); + a->force = EQ::skills::GetSkillMeleePushForce(skill_used); if (IsNPC()) { if (attacker->IsNPC()) a->force = 0.0f; // 2013 change that disabled NPC vs NPC push @@ -3808,7 +3808,7 @@ void Mob::HealDamage(uint32 amount, Mob *caster, uint16 spell_id) if (IsBuffSpell(spell_id)) { // hots // message to caster if (caster->IsClient() && caster == this) { - if (caster->CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoFAndLater) + if (caster->CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater) FilteredMessageString(caster, Chat::NonMelee, FilterHealOverTime, HOT_HEAL_SELF, itoa(acthealed), spells[spell_id].name); else @@ -3816,7 +3816,7 @@ void Mob::HealDamage(uint32 amount, Mob *caster, uint16 spell_id) YOU_HEALED, GetCleanName(), itoa(acthealed)); } else if (caster->IsClient() && caster != this) { - if (caster->CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoFAndLater) + if (caster->CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater) caster->FilteredMessageString(caster, Chat::NonMelee, FilterHealOverTime, HOT_HEAL_OTHER, GetCleanName(), itoa(acthealed), spells[spell_id].name); @@ -3826,7 +3826,7 @@ void Mob::HealDamage(uint32 amount, Mob *caster, uint16 spell_id) } // message to target if (IsClient() && caster != this) { - if (CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoFAndLater) + if (CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater) FilteredMessageString(this, Chat::NonMelee, FilterHealOverTime, HOT_HEALED_OTHER, caster->GetCleanName(), itoa(acthealed), spells[spell_id].name); @@ -3919,7 +3919,7 @@ void Mob::TryDefensiveProc(Mob *on, uint16 hand) { float ProcChance, ProcBonus; on->GetDefensiveProcChances(ProcBonus, ProcChance, hand, this); - if (hand != EQEmu::invslot::slotPrimary) + if (hand != EQ::invslot::slotPrimary) ProcChance /= 2; int level_penalty = 0; @@ -3944,7 +3944,7 @@ void Mob::TryDefensiveProc(Mob *on, uint16 hand) { } } -void Mob::TryWeaponProc(const EQEmu::ItemInstance* weapon_g, Mob *on, uint16 hand) { +void Mob::TryWeaponProc(const EQ::ItemInstance* weapon_g, Mob *on, uint16 hand) { if (!on) { SetTarget(nullptr); LogError("A null Mob object was passed to Mob::TryWeaponProc for evaluation!"); @@ -3962,12 +3962,12 @@ void Mob::TryWeaponProc(const EQEmu::ItemInstance* weapon_g, Mob *on, uint16 han } if (!weapon_g) { - TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, on); + TrySpellProc(nullptr, (const EQ::ItemData*)nullptr, on); return; } if (!weapon_g->IsClassCommon()) { - TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, on); + TrySpellProc(nullptr, (const EQ::ItemData*)nullptr, on); return; } @@ -3980,7 +3980,7 @@ void Mob::TryWeaponProc(const EQEmu::ItemInstance* weapon_g, Mob *on, uint16 han return; } -void Mob::TryWeaponProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *weapon, Mob *on, uint16 hand) +void Mob::TryWeaponProc(const EQ::ItemInstance *inst, const EQ::ItemData *weapon, Mob *on, uint16 hand) { if (!weapon) @@ -3992,14 +3992,14 @@ void Mob::TryWeaponProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData * ProcBonus += static_cast(itembonuses.ProcChance) / 10.0f; // Combat Effects float ProcChance = GetProcChances(ProcBonus, hand); - if (hand != EQEmu::invslot::slotPrimary) //Is Archery intened to proc at 50% rate? + if (hand != EQ::invslot::slotPrimary) //Is Archery intened to proc at 50% rate? ProcChance /= 2; // Try innate proc on weapon // We can proc once here, either weapon or one aug bool proced = false; // silly bool to prevent augs from going if weapon does skillinuse = GetSkillByItemType(weapon->ItemType); - if (weapon->Proc.Type == EQEmu::item::ItemEffectCombatProc && IsValidSpell(weapon->Proc.Effect)) { + if (weapon->Proc.Type == EQ::item::ItemEffectCombatProc && IsValidSpell(weapon->Proc.Effect)) { float WPC = ProcChance * (100.0f + // Proc chance for this weapon static_cast(weapon->ProcRate)) / 100.0f; if (zone->random.Roll(WPC)) { // 255 dex = 0.084 chance of proc. No idea what this number should be really. @@ -4028,15 +4028,15 @@ void Mob::TryWeaponProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData * proced = false; if (!proced && inst) { - for (int r = EQEmu::invaug::SOCKET_BEGIN; r <= EQEmu::invaug::SOCKET_END; r++) { - const EQEmu::ItemInstance *aug_i = inst->GetAugment(r); + for (int r = EQ::invaug::SOCKET_BEGIN; r <= EQ::invaug::SOCKET_END; r++) { + const EQ::ItemInstance *aug_i = inst->GetAugment(r); if (!aug_i) // no aug, try next slot! continue; - const EQEmu::ItemData *aug = aug_i->GetItem(); + const EQ::ItemData *aug = aug_i->GetItem(); if (!aug) continue; - if (aug->Proc.Type == EQEmu::item::ItemEffectCombatProc && IsValidSpell(aug->Proc.Effect)) { + if (aug->Proc.Type == EQ::item::ItemEffectCombatProc && IsValidSpell(aug->Proc.Effect)) { float APC = ProcChance * (100.0f + // Proc chance for this aug static_cast(aug->ProcRate)) / 100.0f; if (zone->random.Roll(APC)) { @@ -4064,37 +4064,37 @@ void Mob::TryWeaponProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData * return; } -void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *weapon, Mob *on, uint16 hand) +void Mob::TrySpellProc(const EQ::ItemInstance *inst, const EQ::ItemData *weapon, Mob *on, uint16 hand) { float ProcBonus = static_cast(spellbonuses.SpellProcChance + itembonuses.SpellProcChance + aabonuses.SpellProcChance); float ProcChance = 0.0f; ProcChance = GetProcChances(ProcBonus, hand); - if (hand != EQEmu::invslot::slotPrimary) //Is Archery intened to proc at 50% rate? + if (hand != EQ::invslot::slotPrimary) //Is Archery intened to proc at 50% rate? ProcChance /= 2; bool rangedattk = false; - if (weapon && hand == EQEmu::invslot::slotRange) { - if (weapon->ItemType == EQEmu::item::ItemTypeArrow || - weapon->ItemType == EQEmu::item::ItemTypeLargeThrowing || - weapon->ItemType == EQEmu::item::ItemTypeSmallThrowing || - weapon->ItemType == EQEmu::item::ItemTypeBow) { + if (weapon && hand == EQ::invslot::slotRange) { + if (weapon->ItemType == EQ::item::ItemTypeArrow || + weapon->ItemType == EQ::item::ItemTypeLargeThrowing || + weapon->ItemType == EQ::item::ItemTypeSmallThrowing || + weapon->ItemType == EQ::item::ItemTypeBow) { rangedattk = true; } } - if (!weapon && hand == EQEmu::invslot::slotRange && GetSpecialAbility(SPECATK_RANGED_ATK)) + if (!weapon && hand == EQ::invslot::slotRange && GetSpecialAbility(SPECATK_RANGED_ATK)) rangedattk = true; int16 poison_slot=-1; for (uint32 i = 0; i < MAX_PROCS; i++) { - if (IsPet() && hand != EQEmu::invslot::slotPrimary) //Pets can only proc spell procs from their primay hand (ie; beastlord pets) + if (IsPet() && hand != EQ::invslot::slotPrimary) //Pets can only proc spell procs from their primay hand (ie; beastlord pets) continue; // If pets ever can proc from off hand, this will need to change if (SpellProcs[i].base_spellID == POISON_PROC && - (!weapon || weapon->ItemType != EQEmu::item::ItemType1HPiercing)) + (!weapon || weapon->ItemType != EQ::item::ItemType1HPiercing)) continue; // Old school poison will only proc with 1HP equipped. // Not ranged @@ -4162,7 +4162,7 @@ void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *w } } - if (HasSkillProcs() && hand != EQEmu::invslot::slotRange) { //We check ranged skill procs within the attack functions. + if (HasSkillProcs() && hand != EQ::invslot::slotRange) { //We check ranged skill procs within the attack functions. uint16 skillinuse = 28; if (weapon) skillinuse = GetSkillByItemType(weapon->ItemType); @@ -4308,17 +4308,17 @@ void Mob::TryCriticalHit(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions * int crit_chance = GetCriticalChanceBonus(hit.skill); if ((GetClass() == WARRIOR || GetClass() == BERSERKER) && GetLevel() >= 12) innate_crit = true; - else if (GetClass() == RANGER && GetLevel() >= 12 && hit.skill == EQEmu::skills::SkillArchery) + else if (GetClass() == RANGER && GetLevel() >= 12 && hit.skill == EQ::skills::SkillArchery) innate_crit = true; - else if (GetClass() == ROGUE && GetLevel() >= 12 && hit.skill == EQEmu::skills::SkillThrowing) + else if (GetClass() == ROGUE && GetLevel() >= 12 && hit.skill == EQ::skills::SkillThrowing) innate_crit = true; // we have a chance to crit! if (innate_crit || crit_chance) { int difficulty = 0; - if (hit.skill == EQEmu::skills::SkillArchery) + if (hit.skill == EQ::skills::SkillArchery) difficulty = RuleI(Combat, ArcheryCritDifficulty); - else if (hit.skill == EQEmu::skills::SkillThrowing) + else if (hit.skill == EQ::skills::SkillThrowing) difficulty = RuleI(Combat, ThrowingCritDifficulty); else difficulty = RuleI(Combat, MeleeCritDifficulty); @@ -4330,7 +4330,7 @@ void Mob::TryCriticalHit(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions * dex_bonus += 45; // chances did not match live without a small boost // so if we have an innate crit we have a better chance, except for ber throwing - if (!innate_crit || (GetClass() == BERSERKER && hit.skill == EQEmu::skills::SkillThrowing)) + if (!innate_crit || (GetClass() == BERSERKER && hit.skill == EQ::skills::SkillThrowing)) dex_bonus = dex_bonus * 3 / 5; if (crit_chance) @@ -4354,7 +4354,7 @@ void Mob::TryCriticalHit(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions * LogCombat("Crit success roll [{}] dex chance [{}] og dmg [{}] crit_mod [{}] new dmg [{}]", roll, dex_bonus, og_damage, crit_mod, hit.damage_done); // step 3: check deadly strike - if (GetClass() == ROGUE && hit.skill == EQEmu::skills::SkillThrowing) { + if (GetClass() == ROGUE && hit.skill == EQ::skills::SkillThrowing) { if (BehindMob(defender, GetX(), GetY())) { int chance = GetLevel() * 12; if (zone->random.Int(1, 1000) < chance) { @@ -4483,7 +4483,7 @@ void Mob::DoRiposte(Mob *defender) return; } - defender->Attack(this, EQEmu::invslot::slotPrimary, true); + defender->Attack(this, EQ::invslot::slotPrimary, true); if (HasDied()) return; @@ -4493,7 +4493,7 @@ void Mob::DoRiposte(Mob *defender) if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { LogCombat("Preforming a double riposted from SE_DoubleRiposte ([{}] percent chance)", DoubleRipChance); - defender->Attack(this, EQEmu::invslot::slotPrimary, true); + defender->Attack(this, EQ::invslot::slotPrimary, true); if (HasDied()) return; } @@ -4504,7 +4504,7 @@ void Mob::DoRiposte(Mob *defender) // Live AA - Double Riposte if (DoubleRipChance && zone->random.Roll(DoubleRipChance)) { LogCombat("Preforming a double riposted from SE_GiveDoubleRiposte base1 == 0 ([{}] percent chance)", DoubleRipChance); - defender->Attack(this, EQEmu::invslot::slotPrimary, true); + defender->Attack(this, EQ::invslot::slotPrimary, true); if (HasDied()) return; } @@ -4782,7 +4782,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui ProcMod = static_cast(spells[base_spell_id].base2[i]); } - else if (spells[base_spell_id].effectid[i] == SE_LimitToSkill && spells[base_spell_id].base[i] <= EQEmu::skills::HIGHEST_SKILL) { + else if (spells[base_spell_id].effectid[i] == SE_LimitToSkill && spells[base_spell_id].base[i] <= EQ::skills::HIGHEST_SKILL) { if (CanProc && spells[base_spell_id].base[i] == skill && IsValidSpell(proc_spell_id)) { float final_chance = chance * (ProcMod / 100.0f); @@ -4826,7 +4826,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui ProcMod = static_cast(spells[base_spell_id].base2[i]); } - else if (spells[base_spell_id].effectid[i] == SE_LimitToSkill && spells[base_spell_id].base[i] <= EQEmu::skills::HIGHEST_SKILL) { + else if (spells[base_spell_id].effectid[i] == SE_LimitToSkill && spells[base_spell_id].base[i] <= EQ::skills::HIGHEST_SKILL) { if (CanProc && spells[base_spell_id].base[i] == skill && IsValidSpell(proc_spell_id)) { float final_chance = chance * (ProcMod / 100.0f); @@ -4887,7 +4887,7 @@ void Mob::TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success, ui proc_spell_id = base1; ProcMod = static_cast(base2); } - else if (effect_id == SE_LimitToSkill && base1 <= EQEmu::skills::HIGHEST_SKILL) { + else if (effect_id == SE_LimitToSkill && base1 <= EQ::skills::HIGHEST_SKILL) { if (CanProc && base1 == skill && IsValidSpell(proc_spell_id)) { float final_chance = chance * (ProcMod / 100.0f); @@ -4918,7 +4918,7 @@ float Mob::GetSkillProcChances(uint16 ReuseTime, uint16 hand) { if (!ReuseTime && hand) { weapon_speed = GetWeaponSpeedbyHand(hand); ProcChance = static_cast(weapon_speed) * (RuleR(Combat, AvgProcsPerMinute) / 60000.0f); - if (hand != EQEmu::invslot::slotPrimary) + if (hand != EQ::invslot::slotPrimary) ProcChance /= 2; } @@ -5047,14 +5047,14 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac #endif // BER weren't parsing the halving - if (hit.skill == EQEmu::skills::SkillArchery || - (hit.skill == EQEmu::skills::SkillThrowing && GetClass() != BERSERKER)) + if (hit.skill == EQ::skills::SkillArchery || + (hit.skill == EQ::skills::SkillThrowing && GetClass() != BERSERKER)) hit.damage_done /= 2; if (hit.damage_done < 1) hit.damage_done = 1; - if (hit.skill == EQEmu::skills::SkillArchery) { + if (hit.skill == EQ::skills::SkillArchery) { int bonus = aabonuses.ArcheryDamageModifier + itembonuses.ArcheryDamageModifier + spellbonuses.ArcheryDamageModifier; hit.damage_done += hit.damage_done * bonus / 100; int headshot = TryHeadShot(defender, hit.skill); @@ -5071,7 +5071,7 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac int extra_mincap = 0; int min_mod = hit.base_damage * GetMeleeMinDamageMod_SE(hit.skill) / 100; - if (hit.skill == EQEmu::skills::SkillBackstab) { + if (hit.skill == EQ::skills::SkillBackstab) { extra_mincap = GetLevel() < 7 ? 7 : GetLevel(); if (GetLevel() >= 60) extra_mincap = GetLevel() * 2; @@ -5086,7 +5086,7 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac hit.damage_done = ass; } } - else if (hit.skill == EQEmu::skills::SkillFrenzy && GetClass() == BERSERKER && GetLevel() > 50) { + else if (hit.skill == EQ::skills::SkillFrenzy && GetClass() == BERSERKER && GetLevel() > 50) { extra_mincap = 4 * GetLevel() / 5; } @@ -5111,8 +5111,8 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac if (IsClient()) { int extra = 0; switch (hit.skill) { - case EQEmu::skills::SkillThrowing: - case EQEmu::skills::SkillArchery: + case EQ::skills::SkillThrowing: + case EQ::skills::SkillArchery: extra = CastToClient()->GetHeroicDEX() / 10; break; default: @@ -5212,26 +5212,26 @@ void Client::SetAttackTimer() Timer *TimerToUse = nullptr; - for (int i = EQEmu::invslot::slotRange; i <= EQEmu::invslot::slotSecondary; i++) { + for (int i = EQ::invslot::slotRange; i <= EQ::invslot::slotSecondary; i++) { //pick a timer - if (i == EQEmu::invslot::slotPrimary) + if (i == EQ::invslot::slotPrimary) TimerToUse = &attack_timer; - else if (i == EQEmu::invslot::slotRange) + else if (i == EQ::invslot::slotRange) TimerToUse = &ranged_timer; - else if (i == EQEmu::invslot::slotSecondary) + else if (i == EQ::invslot::slotSecondary) TimerToUse = &attack_dw_timer; else //invalid slot (hands will always hit this) continue; - const EQEmu::ItemData *ItemToUse = nullptr; + const EQ::ItemData *ItemToUse = nullptr; //find our item - EQEmu::ItemInstance *ci = GetInv().GetItem(i); + EQ::ItemInstance *ci = GetInv().GetItem(i); if (ci) ItemToUse = ci->GetItem(); //special offhand stuff - if (i == EQEmu::invslot::slotSecondary) { + if (i == EQ::invslot::slotSecondary) { //if we cant dual wield, skip it if (!CanThisClassDualWield() || HasTwoHanderEquipped()) { attack_dw_timer.Disable(); @@ -5249,9 +5249,9 @@ void Client::SetAttackTimer() ItemToUse = nullptr; } // Check to see if skill is valid - else if ((ItemToUse->ItemType > EQEmu::item::ItemTypeLargeThrowing) && - (ItemToUse->ItemType != EQEmu::item::ItemTypeMartial) && - (ItemToUse->ItemType != EQEmu::item::ItemType2HPiercing)) { + else if ((ItemToUse->ItemType > EQ::item::ItemTypeLargeThrowing) && + (ItemToUse->ItemType != EQ::item::ItemTypeMartial) && + (ItemToUse->ItemType != EQ::item::ItemType2HPiercing)) { //no weapon ItemToUse = nullptr; } @@ -5270,7 +5270,7 @@ void Client::SetAttackTimer() speed = delay / haste_mod; - if (ItemToUse && ItemToUse->ItemType == EQEmu::item::ItemTypeBow) { + if (ItemToUse && ItemToUse->ItemType == EQ::item::ItemTypeBow) { // Live actually had a bug here where they would return the non-modified attack speed // rather than the cap ... speed = std::max(speed - GetQuiverHaste(speed), RuleI(Combat, QuiverHasteCap)); @@ -5306,19 +5306,19 @@ void NPC::SetAttackTimer() else speed = static_cast((attack_delay / haste_mod) + ((hhe / 100.0f) * attack_delay)); - for (int i = EQEmu::invslot::slotRange; i <= EQEmu::invslot::slotSecondary; i++) { + for (int i = EQ::invslot::slotRange; i <= EQ::invslot::slotSecondary; i++) { //pick a timer - if (i == EQEmu::invslot::slotPrimary) + if (i == EQ::invslot::slotPrimary) TimerToUse = &attack_timer; - else if (i == EQEmu::invslot::slotRange) + else if (i == EQ::invslot::slotRange) TimerToUse = &ranged_timer; - else if (i == EQEmu::invslot::slotSecondary) + else if (i == EQ::invslot::slotSecondary) TimerToUse = &attack_dw_timer; else //invalid slot (hands will always hit this) continue; //special offhand stuff - if (i == EQEmu::invslot::slotSecondary) { + if (i == EQ::invslot::slotSecondary) { // SPECATK_QUAD is uncheesable if (!CanThisClassDualWield() || (HasTwoHanderEquipped() && !GetSpecialAbility(SPECATK_QUAD))) { attack_dw_timer.Disable(); @@ -5340,18 +5340,18 @@ void Client::DoAttackRounds(Mob *target, int hand, bool IsFromSpell) bool candouble = CanThisClassDoubleAttack(); // extra off hand non-sense, can only double with skill of 150 or above // or you have any amount of GiveDoubleAttack - if (candouble && hand == EQEmu::invslot::slotSecondary) + if (candouble && hand == EQ::invslot::slotSecondary) candouble = - GetSkill(EQEmu::skills::SkillDoubleAttack) > 149 || + GetSkill(EQ::skills::SkillDoubleAttack) > 149 || (aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack) > 0; if (candouble) { - CheckIncreaseSkill(EQEmu::skills::SkillDoubleAttack, target, -10); + CheckIncreaseSkill(EQ::skills::SkillDoubleAttack, target, -10); if (CheckDoubleAttack()) { Attack(target, hand, false, false, IsFromSpell); // Modern AA description: Increases your chance of ... performing one additional hit with a 2-handed weapon when double attacking by 2%. - if (hand == EQEmu::invslot::slotPrimary) { + if (hand == EQ::invslot::slotPrimary) { auto extraattackchance = aabonuses.ExtraAttackChance + spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance; if (extraattackchance && HasTwoHanderEquipped() && zone->random.Roll(extraattackchance)) @@ -5359,8 +5359,8 @@ void Client::DoAttackRounds(Mob *target, int hand, bool IsFromSpell) } // you can only triple from the main hand - if (hand == EQEmu::invslot::slotPrimary && CanThisClassTripleAttack()) { - CheckIncreaseSkill(EQEmu::skills::SkillTripleAttack, target, -10); + if (hand == EQ::invslot::slotPrimary && CanThisClassTripleAttack()) { + CheckIncreaseSkill(EQ::skills::SkillTripleAttack, target, -10); if (CheckTripleAttack()) { Attack(target, hand, false, false, IsFromSpell); auto flurrychance = aabonuses.FlurryChance + spellbonuses.FlurryChance + @@ -5381,7 +5381,7 @@ bool Mob::CheckDualWield() { // Pets /might/ follow a slightly different progression // although it could all be from pets having different skills than most mobs - int chance = GetSkill(EQEmu::skills::SkillDualWield); + int chance = GetSkill(EQ::skills::SkillDualWield); if (GetLevel() > 35) chance += GetLevel(); @@ -5395,7 +5395,7 @@ bool Mob::CheckDualWield() bool Client::CheckDualWield() { - int chance = GetSkill(EQEmu::skills::SkillDualWield) + GetLevel(); + int chance = GetSkill(EQ::skills::SkillDualWield) + GetLevel(); chance += aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; int per_inc = spellbonuses.DualWieldChance + aabonuses.DualWieldChance + itembonuses.DualWieldChance; @@ -5413,9 +5413,9 @@ void Mob::DoMainHandAttackRounds(Mob *target, ExtraAttackOptions *opts) if (RuleB(Combat, UseLiveCombatRounds)) { // A "quad" on live really is just a successful dual wield where both double attack // The mobs that could triple lost the ability to when the triple attack skill was added in - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); if (CanThisClassDoubleAttack() && CheckDoubleAttack()) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); if ((IsPet() || IsTempPet()) && IsPetOwnerClient()) { int chance = spellbonuses.PC_Pet_Flurry + itembonuses.PC_Pet_Flurry + aabonuses.PC_Pet_Flurry; if (chance && zone->random.Roll(chance)) @@ -5428,16 +5428,16 @@ void Mob::DoMainHandAttackRounds(Mob *target, ExtraAttackOptions *opts) if (IsNPC()) { int16 n_atk = CastToNPC()->GetNumberOfAttacks(); if (n_atk <= 1) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); } else { for (int i = 0; i < n_atk; ++i) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); } } } else { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); } // we use this random value in three comparisons with different @@ -5448,15 +5448,15 @@ void Mob::DoMainHandAttackRounds(Mob *target, ExtraAttackOptions *opts) // check double attack, this is NOT the same rules that clients use... && RandRoll < (GetLevel() + NPCDualAttackModifier)) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); // lets see if we can do a triple attack with the main hand // pets are excluded from triple and quads... if ((GetSpecialAbility(SPECATK_TRIPLE) || GetSpecialAbility(SPECATK_QUAD)) && !IsPet() && RandRoll < (GetLevel() + NPCTripleAttackModifier)) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); // now lets check the quad attack if (GetSpecialAbility(SPECATK_QUAD) && RandRoll < (GetLevel() + NPCQuadAttackModifier)) { - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); } } } @@ -5470,11 +5470,11 @@ void Mob::DoOffHandAttackRounds(Mob *target, ExtraAttackOptions *opts) // For now, SPECATK_QUAD means innate DW when Combat:UseLiveCombatRounds is true if ((GetSpecialAbility(SPECATK_INNATE_DW) || (RuleB(Combat, UseLiveCombatRounds) && GetSpecialAbility(SPECATK_QUAD))) || - GetEquippedItemFromTextureSlot(EQEmu::textures::weaponSecondary) != 0) { + GetEquippedItemFromTextureSlot(EQ::textures::weaponSecondary) != 0) { if (CheckDualWield()) { - Attack(target, EQEmu::invslot::slotSecondary, false, false, false, opts); + Attack(target, EQ::invslot::slotSecondary, false, false, false, opts); if (CanThisClassDoubleAttack() && GetLevel() > 35 && CheckDoubleAttack()) { - Attack(target, EQEmu::invslot::slotSecondary, false, false, false, opts); + Attack(target, EQ::invslot::slotSecondary, false, false, false, opts); if ((IsPet() || IsTempPet()) && IsPetOwnerClient()) { int chance = spellbonuses.PC_Pet_Flurry + itembonuses.PC_Pet_Flurry + aabonuses.PC_Pet_Flurry; diff --git a/zone/beacon.cpp b/zone/beacon.cpp index ac4beaacc..11b0de0fd 100644 --- a/zone/beacon.cpp +++ b/zone/beacon.cpp @@ -56,7 +56,7 @@ Beacon::Beacon(Mob *at_mob, int lifetime) :Mob ( nullptr, nullptr, 0, 0, 0, INVISIBLE_MAN, 0, BT_NoTarget, 0, 0, 0, 0, 0, at_mob->GetPosition(), 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQEmu::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQ::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false ), remove_timer(lifetime), spell_timer(0) diff --git a/zone/beacon.h b/zone/beacon.h index 3e8f6edcc..e5880c981 100644 --- a/zone/beacon.h +++ b/zone/beacon.h @@ -34,9 +34,9 @@ public: ~Beacon(); //abstract virtual function implementations requird by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill) { return true; } - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) { return true; } + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr) { return false; } virtual bool HasRaid() { return false; } virtual bool HasGroup() { return false; } diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index ad314d214..fc513577d 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -157,36 +157,36 @@ void Client::CalcItemBonuses(StatBonuses* newbon) { unsigned int i; // Update: MainAmmo should only calc skill mods (TODO: Check for other cases) - for (i = EQEmu::invslot::BONUS_BEGIN; i <= EQEmu::invslot::BONUS_SKILL_END; i++) { - const EQEmu::ItemInstance* inst = m_inv[i]; + for (i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_SKILL_END; i++) { + const EQ::ItemInstance* inst = m_inv[i]; if(inst == 0) continue; - AddItemBonuses(inst, newbon, false, false, 0, (i == EQEmu::invslot::slotAmmo)); + AddItemBonuses(inst, newbon, false, false, 0, (i == EQ::invslot::slotAmmo)); //These are given special flags due to how often they are checked for various spell effects. - const EQEmu::ItemData *item = inst->GetItem(); - if (i == EQEmu::invslot::slotSecondary && (item && item->ItemType == EQEmu::item::ItemTypeShield)) + const EQ::ItemData *item = inst->GetItem(); + if (i == EQ::invslot::slotSecondary && (item && item->ItemType == EQ::item::ItemTypeShield)) SetShieldEquiped(true); - else if (i == EQEmu::invslot::slotPrimary && (item && item->ItemType == EQEmu::item::ItemType2HBlunt)) { + else if (i == EQ::invslot::slotPrimary && (item && item->ItemType == EQ::item::ItemType2HBlunt)) { SetTwoHandBluntEquiped(true); SetTwoHanderEquipped(true); } - else if (i == EQEmu::invslot::slotPrimary && (item && (item->ItemType == EQEmu::item::ItemType2HSlash || item->ItemType == EQEmu::item::ItemType2HPiercing))) + else if (i == EQ::invslot::slotPrimary && (item && (item->ItemType == EQ::item::ItemType2HSlash || item->ItemType == EQ::item::ItemType2HPiercing))) SetTwoHanderEquipped(true); } //tribute items - for (i = EQEmu::invslot::TRIBUTE_BEGIN; i <= EQEmu::invslot::TRIBUTE_END; i++) { - const EQEmu::ItemInstance* inst = m_inv[i]; + for (i = EQ::invslot::TRIBUTE_BEGIN; i <= EQ::invslot::TRIBUTE_END; i++) { + const EQ::ItemInstance* inst = m_inv[i]; if(inst == 0) continue; AddItemBonuses(inst, newbon, false, true); } //Optional ability to have worn effects calculate as an addititive bonus instead of highest value - if (RuleI(Spells, AdditiveBonusWornType) && RuleI(Spells, AdditiveBonusWornType) != EQEmu::item::ItemEffectWorn){ - for (i = EQEmu::invslot::BONUS_BEGIN; i <= EQEmu::invslot::BONUS_STAT_END; i++) { - const EQEmu::ItemInstance* inst = m_inv[i]; + if (RuleI(Spells, AdditiveBonusWornType) && RuleI(Spells, AdditiveBonusWornType) != EQ::item::ItemEffectWorn){ + for (i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_STAT_END; i++) { + const EQ::ItemInstance* inst = m_inv[i]; if(inst == 0) continue; AdditiveWornBonuses(inst, newbon); @@ -212,7 +212,7 @@ void Client::ProcessItemCaps() itembonuses.ATK = std::min(itembonuses.ATK, CalcItemATKCap()); } -void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon, bool isAug, bool isTribute, int rec_override, bool ammo_slot_item) +void Client::AddItemBonuses(const EQ::ItemInstance *inst, StatBonuses *newbon, bool isAug, bool isTribute, int rec_override, bool ammo_slot_item) { if (!inst || !inst->IsClassCommon()) { return; @@ -222,10 +222,10 @@ void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon return; } - const EQEmu::ItemData *item = inst->GetItem(); + const EQ::ItemData *item = inst->GetItem(); if (!isTribute && !inst->IsEquipable(GetBaseRace(), GetClass())) { - if (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink) + if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink) return; } @@ -434,11 +434,11 @@ void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon else newbon->DSMitigation += item->DSMitigation; } - if (item->Worn.Effect > 0 && item->Worn.Type == EQEmu::item::ItemEffectWorn) { // latent effects + if (item->Worn.Effect > 0 && item->Worn.Type == EQ::item::ItemEffectWorn) { // latent effects ApplySpellsBonuses(item->Worn.Effect, item->Worn.Level, newbon, 0, item->Worn.Type); } - if (item->Focus.Effect > 0 && (item->Focus.Type == EQEmu::item::ItemEffectFocus)) { // focus effects + if (item->Focus.Effect > 0 && (item->Focus.Type == EQ::item::ItemEffectFocus)) { // focus effects ApplySpellsBonuses(item->Focus.Effect, item->Focus.Level, newbon, 0); } @@ -511,7 +511,7 @@ void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon } } - if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQEmu::skills::HIGHEST_SKILL) { + if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQ::skills::HIGHEST_SKILL) { if ((newbon->SkillDamageAmount[item->ExtraDmgSkill] + item->ExtraDmgAmt) > RuleI(Character, ItemExtraDmgCap)) newbon->SkillDamageAmount[item->ExtraDmgSkill] = RuleI(Character, ItemExtraDmgCap); @@ -521,7 +521,7 @@ void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon } // Process when ammo_slot_item = true or false - if (item->SkillModValue != 0 && item->SkillModType <= EQEmu::skills::HIGHEST_SKILL) { + if (item->SkillModValue != 0 && item->SkillModType <= EQ::skills::HIGHEST_SKILL) { if ((item->SkillModValue > 0 && newbon->skillmod[item->SkillModType] < item->SkillModValue) || (item->SkillModValue < 0 && newbon->skillmod[item->SkillModType] > item->SkillModValue)) { @@ -531,12 +531,12 @@ void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon } if (!isAug) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) AddItemBonuses(inst->GetAugment(i), newbon, true, false, rec_level, ammo_slot_item); } } -void Client::AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug) { +void Client::AdditiveWornBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug) { /* Powerful Non-live like option allows developers to add worn effects on items that @@ -554,7 +554,7 @@ void Client::AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* n if(inst->GetAugmentType()==0 && isAug == true) return; - const EQEmu::ItemData *item = inst->GetItem(); + const EQ::ItemData *item = inst->GetItem(); if(!inst->IsEquipable(GetBaseRace(),GetClass())) return; @@ -569,7 +569,7 @@ void Client::AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* n if (!isAug) { int i; - for (i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { AdditiveWornBonuses(inst->GetAugment(i),newbon,true); } } @@ -580,32 +580,32 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) { bool food = false; bool drink = false; - for (i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) + for (i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { if (food && drink) break; - const EQEmu::ItemInstance* inst = GetInv().GetItem(i); + const EQ::ItemInstance* inst = GetInv().GetItem(i); if (inst && inst->GetItem() && inst->IsClassCommon()) { - const EQEmu::ItemData *item = inst->GetItem(); - if (!food && item->ItemType == EQEmu::item::ItemTypeFood) + const EQ::ItemData *item = inst->GetItem(); + if (!food && item->ItemType == EQ::item::ItemTypeFood) food = true; - else if (!drink && item->ItemType == EQEmu::item::ItemTypeDrink) + else if (!drink && item->ItemType == EQ::item::ItemTypeDrink) drink = true; else continue; AddItemBonuses(inst, newbon); } } - for (i = EQEmu::invbag::GENERAL_BAGS_BEGIN; i <= EQEmu::invbag::GENERAL_BAGS_END; i++) + for (i = EQ::invbag::GENERAL_BAGS_BEGIN; i <= EQ::invbag::GENERAL_BAGS_END; i++) { if (food && drink) break; - const EQEmu::ItemInstance* inst = GetInv().GetItem(i); + const EQ::ItemInstance* inst = GetInv().GetItem(i); if (inst && inst->GetItem() && inst->IsClassCommon()) { - const EQEmu::ItemData *item = inst->GetItem(); - if (!food && item->ItemType == EQEmu::item::ItemTypeFood) + const EQ::ItemData *item = inst->GetItem(); + if (!food && item->ItemType == EQ::item::ItemTypeFood) food = true; - else if (!drink && item->ItemType == EQEmu::item::ItemTypeDrink) + else if (!drink && item->ItemType == EQ::item::ItemTypeDrink) drink = true; else continue; @@ -680,10 +680,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) // Note: AA effects that use accuracy are skill limited, while spell effect is not. case SE_Accuracy: // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - if ((base2 == ALL_SKILLS) && (newbon->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] < base1)) - newbon->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] = base1; + if ((base2 == ALL_SKILLS) && (newbon->Accuracy[EQ::skills::HIGHEST_SKILL + 1] < base1)) + newbon->Accuracy[EQ::skills::HIGHEST_SKILL + 1] = base1; else if (newbon->Accuracy[base2] < base1) newbon->Accuracy[base2] += base1; break; @@ -919,19 +919,19 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; case SE_AddSingingMod: switch (base2) { - case EQEmu::item::ItemTypeWindInstrument: + case EQ::item::ItemTypeWindInstrument: newbon->windMod += base1; break; - case EQEmu::item::ItemTypeStringedInstrument: + case EQ::item::ItemTypeStringedInstrument: newbon->stringedMod += base1; break; - case EQEmu::item::ItemTypeBrassInstrument: + case EQ::item::ItemTypeBrassInstrument: newbon->brassMod += base1; break; - case EQEmu::item::ItemTypePercussionInstrument: + case EQ::item::ItemTypePercussionInstrument: newbon->percussionMod += base1; break; - case EQEmu::item::ItemTypeSinging: + case EQ::item::ItemTypeSinging: newbon->singingMod += base1; break; } @@ -1028,10 +1028,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_HitChance: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (base2 == ALL_SKILLS) - newbon->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->HitChanceEffect[base2] += base1; } @@ -1082,21 +1082,21 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_CriticalHitChance: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (base2 == ALL_SKILLS) - newbon->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->CriticalHitChance[base2] += base1; } break; case SE_CriticalDamageMob: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; // base1 = effect value, base2 = skill restrictions(-1 for all) if (base2 == ALL_SKILLS) - newbon->CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->CritDmgMod[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->CritDmgMod[base2] += base1; break; @@ -1122,10 +1122,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_SkillDamageAmount: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (base2 == ALL_SKILLS) - newbon->SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->SkillDamageAmount[base2] += base1; break; @@ -1141,10 +1141,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_DamageModifier: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (base2 == ALL_SKILLS) - newbon->DamageModifier[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->DamageModifier[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->DamageModifier[base2] += base1; break; @@ -1152,10 +1152,10 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_DamageModifier2: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (base2 == ALL_SKILLS) - newbon->DamageModifier2[EQEmu::skills::HIGHEST_SKILL + 1] += base1; + newbon->DamageModifier2[EQ::skills::HIGHEST_SKILL + 1] += base1; else newbon->DamageModifier2[base2] += base1; break; @@ -1191,7 +1191,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) // Physically raises skill cap ie if 55/55 it will raise to 55/60 case SE_RaiseSkillCap: { - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (newbon->RaiseSkillCap[base2] < base1) @@ -1370,9 +1370,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_LimitToSkill: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - if (base1 <= EQEmu::skills::HIGHEST_SKILL) + if (base1 <= EQ::skills::HIGHEST_SKILL) newbon->LimitToSkill[base1] = true; break; } @@ -1436,7 +1436,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) case SE_ReduceTradeskillFail:{ - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; newbon->ReduceTradeskillFail[base2] += base1; @@ -1482,8 +1482,8 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) // I'd rather not do this here, but whatever, probably fine if (IsClient()) { auto client = CastToClient(); - if (client->GetRawSkill(EQEmu::skills::SkillType::SkillForage) == 0) - client->SetSkill(EQEmu::skills::SkillType::SkillForage, 1); + if (client->GetRawSkill(EQ::skills::SkillType::SkillForage) == 0) + client->SetSkill(EQ::skills::SkillType::SkillForage, 1); } break; @@ -1983,26 +1983,26 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalHitChance: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (AdditiveWornBonus) { if(base2 == ALL_SKILLS) - new_bonus->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->CriticalHitChance[base2] += effect_value; } else if(effect_value < 0) { - if (base2 == ALL_SKILLS && new_bonus->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] > effect_value) - new_bonus->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + if (base2 == ALL_SKILLS && new_bonus->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] > effect_value) + new_bonus->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] = effect_value; else if(base2 != ALL_SKILLS && new_bonus->CriticalHitChance[base2] > effect_value) new_bonus->CriticalHitChance[base2] = effect_value; } - else if (base2 == ALL_SKILLS && new_bonus->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] < effect_value) - new_bonus->CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + else if (base2 == ALL_SKILLS && new_bonus->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] < effect_value) + new_bonus->CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] = effect_value; else if(base2 != ALL_SKILLS && new_bonus->CriticalHitChance[base2] < effect_value) new_bonus->CriticalHitChance[base2] = effect_value; @@ -2189,24 +2189,24 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_HitChance: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (AdditiveWornBonus){ if(base2 == ALL_SKILLS) - new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->HitChanceEffect[base2] += effect_value; } else if(base2 == ALL_SKILLS){ - if ((effect_value < 0) && (new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] > effect_value)) - new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + if ((effect_value < 0) && (new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] > effect_value)) + new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] = effect_value; - else if (!new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] || - ((new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] > 0) && (new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] < effect_value))) - new_bonus->HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + else if (!new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] || + ((new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] > 0) && (new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] < effect_value))) + new_bonus->HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] = effect_value; } else { @@ -2226,9 +2226,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - int skill = base2 == ALL_SKILLS ? EQEmu::skills::HIGHEST_SKILL + 1 : base2; + int skill = base2 == ALL_SKILLS ? EQ::skills::HIGHEST_SKILL + 1 : base2; if (effect_value < 0 && new_bonus->DamageModifier[skill] > effect_value) new_bonus->DamageModifier[skill] = effect_value; else if (effect_value > 0 && new_bonus->DamageModifier[skill] < effect_value) @@ -2239,9 +2239,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_DamageModifier2: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - int skill = base2 == ALL_SKILLS ? EQEmu::skills::HIGHEST_SKILL + 1 : base2; + int skill = base2 == ALL_SKILLS ? EQ::skills::HIGHEST_SKILL + 1 : base2; if (effect_value < 0 && new_bonus->DamageModifier2[skill] > effect_value) new_bonus->DamageModifier2[skill] = effect_value; else if (effect_value > 0 && new_bonus->DamageModifier2[skill] < effect_value) @@ -2252,9 +2252,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_MinDamageModifier: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - int skill = base2 == ALL_SKILLS ? EQEmu::skills::HIGHEST_SKILL + 1 : base2; + int skill = base2 == ALL_SKILLS ? EQ::skills::HIGHEST_SKILL + 1 : base2; if (effect_value < 0 && new_bonus->MinDamageModifier[skill] > effect_value) new_bonus->MinDamageModifier[skill] = effect_value; else if (effect_value > 0 && new_bonus->MinDamageModifier[skill] < effect_value) @@ -2329,14 +2329,14 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_Accuracy: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - if ((effect_value < 0) && (new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] > effect_value)) - new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + if ((effect_value < 0) && (new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] > effect_value)) + new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] = effect_value; - else if (!new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] || - ((new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] > 0) && (new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] < effect_value))) - new_bonus->Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + else if (!new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] || + ((new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] > 0) && (new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] < effect_value))) + new_bonus->Accuracy[EQ::skills::HIGHEST_SKILL + 1] = effect_value; break; } @@ -2355,19 +2355,19 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageTaken: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; //When using npc_spells_effects if MAX value set, use stackable quest based modifier. if (IsAISpellEffect && max){ if(base2 == ALL_SKILLS) - SkillDmgTaken_Mod[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + SkillDmgTaken_Mod[EQ::skills::HIGHEST_SKILL + 1] = effect_value; else SkillDmgTaken_Mod[base2] = effect_value; } else { if(base2 == ALL_SKILLS) - new_bonus->SkillDmgTaken[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->SkillDmgTaken[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->SkillDmgTaken[base2] += effect_value; @@ -2476,10 +2476,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_CriticalDamageMob: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if(base2 == ALL_SKILLS) - new_bonus->CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->CritDmgMod[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->CritDmgMod[base2] += effect_value; break; @@ -2495,10 +2495,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if(base2 == ALL_SKILLS) - new_bonus->SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->SkillDamageAmount[base2] += effect_value; break; @@ -2614,10 +2614,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_SkillDamageAmount2: { // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if(base2 == ALL_SKILLS) - new_bonus->SkillDamageAmount2[EQEmu::skills::HIGHEST_SKILL + 1] += effect_value; + new_bonus->SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] += effect_value; else new_bonus->SkillDamageAmount2[base2] += effect_value; break; @@ -2805,19 +2805,19 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_AddSingingMod: switch (base2) { - case EQEmu::item::ItemTypeWindInstrument: + case EQ::item::ItemTypeWindInstrument: new_bonus->windMod += effect_value; break; - case EQEmu::item::ItemTypeStringedInstrument: + case EQ::item::ItemTypeStringedInstrument: new_bonus->stringedMod += effect_value; break; - case EQEmu::item::ItemTypeBrassInstrument: + case EQ::item::ItemTypeBrassInstrument: new_bonus->brassMod += effect_value; break; - case EQEmu::item::ItemTypePercussionInstrument: + case EQ::item::ItemTypePercussionInstrument: new_bonus->percussionMod += effect_value; break; - case EQEmu::item::ItemTypeSinging: + case EQ::item::ItemTypeSinging: new_bonus->singingMod += effect_value; break; default: @@ -3151,9 +3151,9 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_LimitToSkill:{ // Bad data or unsupported new skill - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; - if (effect_value <= EQEmu::skills::HIGHEST_SKILL){ + if (effect_value <= EQ::skills::HIGHEST_SKILL){ new_bonus->LimitToSkill[effect_value] = true; } break; @@ -3210,7 +3210,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne case SE_ReduceTradeskillFail:{ - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; new_bonus->ReduceTradeskillFail[base2] += effect_value; @@ -3223,7 +3223,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne break; case SE_RaiseSkillCap: { - if (base2 > EQEmu::skills::HIGHEST_SKILL) + if (base2 > EQ::skills::HIGHEST_SKILL) break; if (new_bonus->RaiseSkillCap[base2] < effect_value) @@ -3267,8 +3267,8 @@ void NPC::CalcItemBonuses(StatBonuses *newbon) { if(newbon){ - for (int i = EQEmu::invslot::BONUS_BEGIN; i <= EQEmu::invslot::BONUS_STAT_END; i++){ - const EQEmu::ItemData *cur = database.GetItem(equipment[i]); + for (int i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_STAT_END; i++){ + const EQ::ItemData *cur = database.GetItem(equipment[i]); if(cur){ //basic stats newbon->AC += cur->AC; @@ -3323,12 +3323,12 @@ void NPC::CalcItemBonuses(StatBonuses *newbon) if(cur->CombatEffects > 0) { newbon->ProcChance += cur->CombatEffects; } - if (cur->Worn.Effect>0 && (cur->Worn.Type == EQEmu::item::ItemEffectWorn)) { // latent effects + if (cur->Worn.Effect>0 && (cur->Worn.Type == EQ::item::ItemEffectWorn)) { // latent effects ApplySpellsBonuses(cur->Worn.Effect, cur->Worn.Level, newbon, 0, cur->Worn.Type); } if (RuleB(Spells, NPC_UseFocusFromItems)){ - if (cur->Focus.Effect>0 && (cur->Focus.Type == EQEmu::item::ItemEffectFocus)){ // focus effects + if (cur->Focus.Effect>0 && (cur->Focus.Type == EQ::item::ItemEffectFocus)){ // focus effects ApplySpellsBonuses(cur->Focus.Effect, cur->Focus.Level, newbon); } } @@ -3345,18 +3345,18 @@ void Client::CalcItemScale() { bool changed = false; // MainAmmo excluded in helper function below - if (CalcItemScale(EQEmu::invslot::EQUIPMENT_BEGIN, EQEmu::invslot::EQUIPMENT_END)) // original coding excluded MainAmmo (< 21) + if (CalcItemScale(EQ::invslot::EQUIPMENT_BEGIN, EQ::invslot::EQUIPMENT_END)) // original coding excluded MainAmmo (< 21) changed = true; - if (CalcItemScale(EQEmu::invslot::GENERAL_BEGIN, EQEmu::invslot::GENERAL_END)) // original coding excluded MainCursor (< 30) + if (CalcItemScale(EQ::invslot::GENERAL_BEGIN, EQ::invslot::GENERAL_END)) // original coding excluded MainCursor (< 30) changed = true; // I excluded cursor bag slots here because cursor was excluded above..if this is incorrect, change 'slot_y' here to CURSOR_BAG_END // and 'slot_y' above to CURSOR from GENERAL_END above - or however it is supposed to be... - if (CalcItemScale(EQEmu::invbag::GENERAL_BAGS_BEGIN, EQEmu::invbag::GENERAL_BAGS_END)) // (< 341) + if (CalcItemScale(EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END)) // (< 341) changed = true; - if (CalcItemScale(EQEmu::invslot::TRIBUTE_BEGIN, EQEmu::invslot::TRIBUTE_END)) // (< 405) + if (CalcItemScale(EQ::invslot::TRIBUTE_BEGIN, EQ::invslot::TRIBUTE_END)) // (< 405) changed = true; if(changed) @@ -3370,18 +3370,18 @@ bool Client::CalcItemScale(uint32 slot_x, uint32 slot_y) { bool changed = false; uint32 i; for (i = slot_x; i <= slot_y; i++) { - if (i == EQEmu::invslot::slotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot + if (i == EQ::invslot::slotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot continue; - EQEmu::ItemInstance* inst = m_inv.GetItem(i); + EQ::ItemInstance* inst = m_inv.GetItem(i); if(inst == nullptr) continue; // TEST CODE: test for bazaar trader crashing with charm items if (Trader) - if (i >= EQEmu::invbag::GENERAL_BAGS_BEGIN && i <= EQEmu::invbag::GENERAL_BAGS_END) { - EQEmu::ItemInstance* parent_item = m_inv.GetItem(EQEmu::InventoryProfile::CalcSlotId(i)); + if (i >= EQ::invbag::GENERAL_BAGS_BEGIN && i <= EQ::invbag::GENERAL_BAGS_END) { + EQ::ItemInstance* parent_item = m_inv.GetItem(EQ::InventoryProfile::CalcSlotId(i)); if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel continue; } @@ -3400,9 +3400,9 @@ bool Client::CalcItemScale(uint32 slot_x, uint32 slot_y) { } //iterate all augments - for (int x = EQEmu::invaug::SOCKET_BEGIN; x <= EQEmu::invaug::SOCKET_END; ++x) + for (int x = EQ::invaug::SOCKET_BEGIN; x <= EQ::invaug::SOCKET_END; ++x) { - EQEmu::ItemInstance * a_inst = inst->GetAugment(x); + EQ::ItemInstance * a_inst = inst->GetAugment(x); if(!a_inst) continue; @@ -3432,18 +3432,18 @@ void Client::DoItemEnterZone() { bool changed = false; // MainAmmo excluded in helper function below - if (DoItemEnterZone(EQEmu::invslot::EQUIPMENT_BEGIN, EQEmu::invslot::EQUIPMENT_END)) // original coding excluded MainAmmo (< 21) + if (DoItemEnterZone(EQ::invslot::EQUIPMENT_BEGIN, EQ::invslot::EQUIPMENT_END)) // original coding excluded MainAmmo (< 21) changed = true; - if (DoItemEnterZone(EQEmu::invslot::GENERAL_BEGIN, EQEmu::invslot::GENERAL_END)) // original coding excluded MainCursor (< 30) + if (DoItemEnterZone(EQ::invslot::GENERAL_BEGIN, EQ::invslot::GENERAL_END)) // original coding excluded MainCursor (< 30) changed = true; // I excluded cursor bag slots here because cursor was excluded above..if this is incorrect, change 'slot_y' here to CURSOR_BAG_END // and 'slot_y' above to CURSOR from GENERAL_END above - or however it is supposed to be... - if (DoItemEnterZone(EQEmu::invbag::GENERAL_BAGS_BEGIN, EQEmu::invbag::GENERAL_BAGS_END)) // (< 341) + if (DoItemEnterZone(EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END)) // (< 341) changed = true; - if (DoItemEnterZone(EQEmu::invslot::TRIBUTE_BEGIN, EQEmu::invslot::TRIBUTE_END)) // (< 405) + if (DoItemEnterZone(EQ::invslot::TRIBUTE_BEGIN, EQ::invslot::TRIBUTE_END)) // (< 405) changed = true; if(changed) @@ -3456,18 +3456,18 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) { // behavior change: 'slot_y' is now [RANGE]_END and not [RANGE]_END + 1 bool changed = false; for(uint32 i = slot_x; i <= slot_y; i++) { - if (i == EQEmu::invslot::slotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot + if (i == EQ::invslot::slotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot continue; - EQEmu::ItemInstance* inst = m_inv.GetItem(i); + EQ::ItemInstance* inst = m_inv.GetItem(i); if(!inst) continue; // TEST CODE: test for bazaar trader crashing with charm items if (Trader) - if (i >= EQEmu::invbag::GENERAL_BAGS_BEGIN && i <= EQEmu::invbag::GENERAL_BAGS_END) { - EQEmu::ItemInstance* parent_item = m_inv.GetItem(EQEmu::InventoryProfile::CalcSlotId(i)); + if (i >= EQ::invbag::GENERAL_BAGS_BEGIN && i <= EQ::invbag::GENERAL_BAGS_END) { + EQ::ItemInstance* parent_item = m_inv.GetItem(EQ::InventoryProfile::CalcSlotId(i)); if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel continue; } @@ -3478,7 +3478,7 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) { uint16 oldexp = inst->GetExp(); parse->EventItem(EVENT_ITEM_ENTER_ZONE, this, inst, nullptr, "", 0); - if (i <= EQEmu::invslot::EQUIPMENT_END) { + if (i <= EQ::invslot::EQUIPMENT_END) { parse->EventItem(EVENT_EQUIP_ITEM, this, inst, nullptr, "", i); } @@ -3488,7 +3488,7 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) { update_slot = true; } } else { - if (i <= EQEmu::invslot::EQUIPMENT_END) { + if (i <= EQ::invslot::EQUIPMENT_END) { parse->EventItem(EVENT_EQUIP_ITEM, this, inst, nullptr, "", i); } @@ -3496,9 +3496,9 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) { } //iterate all augments - for (int x = EQEmu::invaug::SOCKET_BEGIN; x <= EQEmu::invaug::SOCKET_END; ++x) + for (int x = EQ::invaug::SOCKET_BEGIN; x <= EQ::invaug::SOCKET_END; ++x) { - EQEmu::ItemInstance *a_inst = inst->GetAugment(x); + EQ::ItemInstance *a_inst = inst->GetAugment(x); if(!a_inst) continue; @@ -3922,7 +3922,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_CriticalHitChance: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.CriticalHitChance[e] = effect_value; aabonuses.CriticalHitChance[e] = effect_value; @@ -4040,7 +4040,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_HitChance: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.HitChanceEffect[e] = effect_value; aabonuses.HitChanceEffect[e] = effect_value; @@ -4051,7 +4051,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_DamageModifier: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.DamageModifier[e] = effect_value; aabonuses.DamageModifier[e] = effect_value; @@ -4062,7 +4062,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_DamageModifier2: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.DamageModifier2[e] = effect_value; aabonuses.DamageModifier2[e] = effect_value; @@ -4073,7 +4073,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_MinDamageModifier: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.MinDamageModifier[e] = effect_value; aabonuses.MinDamageModifier[e] = effect_value; @@ -4114,10 +4114,10 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_Accuracy: { - spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; - itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] = effect_value; + spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] = effect_value; + itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] = effect_value; - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { aabonuses.Accuracy[e] = effect_value; } @@ -4144,7 +4144,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_SkillDamageTaken: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.SkillDmgTaken[e] = effect_value; aabonuses.SkillDmgTaken[e] = effect_value; @@ -4249,7 +4249,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_CriticalDamageMob: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.CritDmgMod[e] = effect_value; aabonuses.CritDmgMod[e] = effect_value; @@ -4260,7 +4260,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_SkillDamageAmount: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.SkillDamageAmount[e] = effect_value; aabonuses.SkillDamageAmount[e] = effect_value; @@ -4311,7 +4311,7 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) case SE_SkillDamageAmount2: { - for (int e = 0; e < EQEmu::skills::HIGHEST_SKILL + 1; e++) + for (int e = 0; e < EQ::skills::HIGHEST_SKILL + 1; e++) { spellbonuses.SkillDamageAmount2[e] = effect_value; aabonuses.SkillDamageAmount2[e] = effect_value; diff --git a/zone/bot.cpp b/zone/bot.cpp index 6d14ce740..48e468a05 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -40,7 +40,7 @@ Bot::Bot(NPCType *npcTypeData, Client* botOwner) : NPC(npcTypeData, nullptr, glm this->_botOwnerCharacterID = 0; } - m_inv.SetInventoryVersion(EQEmu::versions::MobVersion::Bot); + m_inv.SetInventoryVersion(EQ::versions::MobVersion::Bot); m_inv.SetGMInventory(false); // bot expansions are not currently implemented (defaults to static) _guildRank = 0; @@ -132,7 +132,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to auto bot_owner = GetBotOwner(); - m_inv.SetInventoryVersion(EQEmu::versions::MobVersion::Bot); + m_inv.SetInventoryVersion(EQ::versions::MobVersion::Bot); m_inv.SetGMInventory(false); // bot expansions are not currently implemented (defaults to static) _guildRank = 0; @@ -177,7 +177,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to if (!stance_flag && bot_owner) bot_owner->Message(Chat::Red, "Could not locate stance for '%s'", GetCleanName()); - SetTaunting((GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT) && (GetBotStance() == EQEmu::constants::stanceAggressive)); + SetTaunting((GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT) && (GetBotStance() == EQ::constants::stanceAggressive)); SetPauseAI(false); m_alt_combat_hate_timer.Start(250); @@ -491,14 +491,14 @@ void Bot::SetSuffix(std::string bot_suffix) { } uint32 Bot::GetBotArcheryRange() { - const EQEmu::ItemInstance *range_inst = GetBotItem(EQEmu::invslot::slotRange); - const EQEmu::ItemInstance *ammo_inst = GetBotItem(EQEmu::invslot::slotAmmo); + const EQ::ItemInstance *range_inst = GetBotItem(EQ::invslot::slotRange); + const EQ::ItemInstance *ammo_inst = GetBotItem(EQ::invslot::slotAmmo); if (!range_inst || !ammo_inst) return 0; - const EQEmu::ItemData *range_item = range_inst->GetItem(); - const EQEmu::ItemData *ammo_item = ammo_inst->GetItem(); - if (!range_item || !ammo_item || range_item->ItemType != EQEmu::item::ItemTypeBow || ammo_item->ItemType != EQEmu::item::ItemTypeArrow) + const EQ::ItemData *range_item = range_inst->GetItem(); + const EQ::ItemData *ammo_item = ammo_inst->GetItem(); + if (!range_item || !ammo_item || range_item->ItemType != EQ::item::ItemTypeBow || ammo_item->ItemType != EQ::item::ItemTypeArrow) return 0; // everything is good! @@ -508,15 +508,15 @@ uint32 Bot::GetBotArcheryRange() { void Bot::ChangeBotArcherWeapons(bool isArcher) { if((GetClass()==WARRIOR) || (GetClass()==PALADIN) || (GetClass()==RANGER) || (GetClass()==SHADOWKNIGHT) || (GetClass()==ROGUE)) { if(!isArcher) { - BotAddEquipItem(EQEmu::invslot::slotPrimary, GetBotItemBySlot(EQEmu::invslot::slotPrimary)); - BotAddEquipItem(EQEmu::invslot::slotSecondary, GetBotItemBySlot(EQEmu::invslot::slotSecondary)); + BotAddEquipItem(EQ::invslot::slotPrimary, GetBotItemBySlot(EQ::invslot::slotPrimary)); + BotAddEquipItem(EQ::invslot::slotSecondary, GetBotItemBySlot(EQ::invslot::slotSecondary)); SetAttackTimer(); BotGroupSay(this, "My blade is ready"); } else { - BotRemoveEquipItem(EQEmu::invslot::slotPrimary); - BotRemoveEquipItem(EQEmu::invslot::slotSecondary); - BotAddEquipItem(EQEmu::invslot::slotAmmo, GetBotItemBySlot(EQEmu::invslot::slotAmmo)); - BotAddEquipItem(EQEmu::invslot::slotSecondary, GetBotItemBySlot(EQEmu::invslot::slotRange)); + BotRemoveEquipItem(EQ::invslot::slotPrimary); + BotRemoveEquipItem(EQ::invslot::slotSecondary); + BotAddEquipItem(EQ::invslot::slotAmmo, GetBotItemBySlot(EQ::invslot::slotAmmo)); + BotAddEquipItem(EQ::invslot::slotSecondary, GetBotItemBySlot(EQ::invslot::slotRange)); SetAttackTimer(); BotGroupSay(this, "My bow is true and ready"); } @@ -574,7 +574,7 @@ NPCType *Bot::FillNPCTypeStruct(uint32 botSpellsID, std::string botName, std::st bot_npc_type->race = botRace; bot_npc_type->class_ = botClass; bot_npc_type->bodytype = 1; - bot_npc_type->deity = EQEmu::deity::DeityAgnostic; + bot_npc_type->deity = EQ::deity::DeityAgnostic; bot_npc_type->level = botLevel; //bot_npc_type->npc_id = 0; //bot_npc_type->texture = 0; @@ -699,7 +699,7 @@ NPCType *Bot::CreateDefaultNPCTypeStructForBot(std::string botName, std::string bot_npc_type->race = botRace; bot_npc_type->class_ = botClass; bot_npc_type->bodytype = 1; - bot_npc_type->deity = EQEmu::deity::DeityAgnostic; + bot_npc_type->deity = EQ::deity::DeityAgnostic; bot_npc_type->level = botLevel; //bot_npc_type->npc_id = 0; //bot_npc_type->texture = 0; @@ -1553,36 +1553,36 @@ int32 Bot::acmod() { } uint16 Bot::GetPrimarySkillValue() { - EQEmu::skills::SkillType skill = EQEmu::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill - bool equiped = m_inv.GetItem(EQEmu::invslot::slotPrimary); + EQ::skills::SkillType skill = EQ::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill + bool equiped = m_inv.GetItem(EQ::invslot::slotPrimary); if(!equiped) - skill = EQEmu::skills::SkillHandtoHand; + skill = EQ::skills::SkillHandtoHand; else { - uint8 type = m_inv.GetItem(EQEmu::invslot::slotPrimary)->GetItem()->ItemType; //is this the best way to do this? + uint8 type = m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->ItemType; //is this the best way to do this? switch(type) { - case EQEmu::item::ItemType1HSlash: - skill = EQEmu::skills::Skill1HSlashing; + case EQ::item::ItemType1HSlash: + skill = EQ::skills::Skill1HSlashing; break; - case EQEmu::item::ItemType2HSlash: - skill = EQEmu::skills::Skill2HSlashing; + case EQ::item::ItemType2HSlash: + skill = EQ::skills::Skill2HSlashing; break; - case EQEmu::item::ItemType1HPiercing: - skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HPiercing: + skill = EQ::skills::Skill1HPiercing; break; - case EQEmu::item::ItemType1HBlunt: - skill = EQEmu::skills::Skill1HBlunt; + case EQ::item::ItemType1HBlunt: + skill = EQ::skills::Skill1HBlunt; break; - case EQEmu::item::ItemType2HBlunt: - skill = EQEmu::skills::Skill2HBlunt; + case EQ::item::ItemType2HBlunt: + skill = EQ::skills::Skill2HBlunt; break; - case EQEmu::item::ItemType2HPiercing: - skill = EQEmu::skills::Skill2HPiercing; + case EQ::item::ItemType2HPiercing: + skill = EQ::skills::Skill2HPiercing; break; - case EQEmu::item::ItemTypeMartial: - skill = EQEmu::skills::SkillHandtoHand; + case EQ::item::ItemTypeMartial: + skill = EQ::skills::SkillHandtoHand; break; default: - skill = EQEmu::skills::SkillHandtoHand; + skill = EQ::skills::SkillHandtoHand; break; } } @@ -1590,7 +1590,7 @@ uint16 Bot::GetPrimarySkillValue() { return GetSkill(skill); } -uint16 Bot::MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const { +uint16 Bot::MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const { return(database.GetSkillCap(class_, skillid, level)); } @@ -1598,7 +1598,7 @@ uint32 Bot::GetTotalATK() { uint32 AttackRating = 0; uint32 WornCap = itembonuses.ATK; if(IsBot()) { - AttackRating = ((WornCap * 1.342) + (GetSkill(EQEmu::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69)); + AttackRating = ((WornCap * 1.342) + (GetSkill(EQ::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69)); AttackRating += aabonuses.ATK + GroupLeadershipAAOffenseEnhancement(); if (AttackRating < 10) AttackRating = 10; @@ -1613,7 +1613,7 @@ uint32 Bot::GetTotalATK() { uint32 Bot::GetATKRating() { uint32 AttackRating = 0; if(IsBot()) { - AttackRating = (GetSkill(EQEmu::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69); + AttackRating = (GetSkill(EQ::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69); if (AttackRating < 10) AttackRating = 10; } @@ -1626,7 +1626,7 @@ int32 Bot::GenerateBaseHitPoints() { uint32 lm = GetClassLevelFactor(); int32 Post255; int32 NormalSTA = GetSTA(); - if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { float SoDPost255; if(((NormalSTA - 255) / 2) > 0) SoDPost255 = ((NormalSTA - 255) / 2); @@ -2106,8 +2106,8 @@ bool Bot::LoadPet() if (!database.botdb.LoadPetBuffs(GetBotID(), pet_buffs)) bot_owner->Message(Chat::Red, "%s for %s's pet", BotDatabase::fail::LoadPetBuffs(), GetCleanName()); - uint32 pet_items[EQEmu::invslot::EQUIPMENT_COUNT]; - memset(pet_items, 0, (sizeof(uint32) * EQEmu::invslot::EQUIPMENT_COUNT)); + uint32 pet_items[EQ::invslot::EQUIPMENT_COUNT]; + memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT)); if (!database.botdb.LoadPetItems(GetBotID(), pet_items)) bot_owner->Message(Chat::Red, "%s for %s's pet", BotDatabase::fail::LoadPetItems(), GetCleanName()); @@ -2134,11 +2134,11 @@ bool Bot::SavePet() char* pet_name = new char[64]; SpellBuff_Struct pet_buffs[PET_BUFF_COUNT]; - uint32 pet_items[EQEmu::invslot::EQUIPMENT_COUNT]; + uint32 pet_items[EQ::invslot::EQUIPMENT_COUNT]; memset(pet_name, 0, 64); memset(pet_buffs, 0, (sizeof(SpellBuff_Struct) * PET_BUFF_COUNT)); - memset(pet_items, 0, (sizeof(uint32) * EQEmu::invslot::EQUIPMENT_COUNT)); + memset(pet_items, 0, (sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT)); pet_inst->GetPetState(pet_buffs, pet_items, pet_name); @@ -2344,13 +2344,13 @@ void Bot::BotRangedAttack(Mob* other) { return; } - EQEmu::ItemInstance* rangedItem = GetBotItem(EQEmu::invslot::slotRange); - const EQEmu::ItemData* RangeWeapon = nullptr; + EQ::ItemInstance* rangedItem = GetBotItem(EQ::invslot::slotRange); + const EQ::ItemData* RangeWeapon = nullptr; if(rangedItem) RangeWeapon = rangedItem->GetItem(); - EQEmu::ItemInstance* ammoItem = GetBotItem(EQEmu::invslot::slotAmmo); - const EQEmu::ItemData* Ammo = nullptr; + EQ::ItemInstance* ammoItem = GetBotItem(EQ::invslot::slotAmmo); + const EQ::ItemData* Ammo = nullptr; if(ammoItem) Ammo = ammoItem->GetItem(); @@ -2361,7 +2361,7 @@ void Bot::BotRangedAttack(Mob* other) { if(!IsAttackAllowed(other) || IsCasting() || DivineAura() || IsStunned() || IsMezzed() || (GetAppearance() == eaDead)) return; - SendItemAnimation(other, Ammo, EQEmu::skills::SkillArchery); + SendItemAnimation(other, Ammo, EQ::skills::SkillArchery); //DoArcheryAttackDmg(GetTarget(), rangedItem, ammoItem); DoArcheryAttackDmg(other, rangedItem, ammoItem); // watch @@ -2406,12 +2406,12 @@ bool Bot::CheckBotDoubleAttack(bool tripleAttack) { //Check for bonuses that give you a double attack chance regardless of skill (ie Bestial Frenzy/Harmonious Attack AA) uint32 bonusGiveDA = (aabonuses.GiveDoubleAttack + spellbonuses.GiveDoubleAttack + itembonuses.GiveDoubleAttack); // If you don't have the double attack skill, return - if (!GetSkill(EQEmu::skills::SkillDoubleAttack) && !(GetClass() == BARD || GetClass() == BEASTLORD)) + if (!GetSkill(EQ::skills::SkillDoubleAttack) && !(GetClass() == BARD || GetClass() == BEASTLORD)) return false; // You start with no chance of double attacking float chance = 0.0f; - uint16 skill = GetSkill(EQEmu::skills::SkillDoubleAttack); + uint16 skill = GetSkill(EQ::skills::SkillDoubleAttack); int32 bonusDA = (aabonuses.DoubleAttackChance + spellbonuses.DoubleAttackChance + itembonuses.DoubleAttackChance); //Use skill calculations otherwise, if you only have AA applied GiveDoubleAttack chance then use that value as the base. if (skill) @@ -2436,28 +2436,28 @@ bool Bot::CheckBotDoubleAttack(bool tripleAttack) { return false; } -void Bot::ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int32 &mindmg) { +void Bot::ApplySpecialAttackMod(EQ::skills::SkillType skill, int32 &dmg, int32 &mindmg) { int item_slot = -1; //1: Apply bonus from AC (BOOT/SHIELD/HANDS) est. 40AC=6dmg switch (skill) { - case EQEmu::skills::SkillFlyingKick: - case EQEmu::skills::SkillRoundKick: - case EQEmu::skills::SkillKick: - item_slot = EQEmu::invslot::slotFeet; + case EQ::skills::SkillFlyingKick: + case EQ::skills::SkillRoundKick: + case EQ::skills::SkillKick: + item_slot = EQ::invslot::slotFeet; break; - case EQEmu::skills::SkillBash: - item_slot = EQEmu::invslot::slotSecondary; + case EQ::skills::SkillBash: + item_slot = EQ::invslot::slotSecondary; break; - case EQEmu::skills::SkillDragonPunch: - case EQEmu::skills::SkillEagleStrike: - case EQEmu::skills::SkillTigerClaw: - item_slot = EQEmu::invslot::slotHands; + case EQ::skills::SkillDragonPunch: + case EQ::skills::SkillEagleStrike: + case EQ::skills::SkillTigerClaw: + item_slot = EQ::invslot::slotHands; break; } - if (item_slot >= EQEmu::invslot::EQUIPMENT_BEGIN){ - const EQEmu::ItemInstance* inst = GetBotItem(item_slot); - const EQEmu::ItemData* botweapon = nullptr; + if (item_slot >= EQ::invslot::EQUIPMENT_BEGIN){ + const EQ::ItemInstance* inst = GetBotItem(item_slot); + const EQ::ItemData* botweapon = nullptr; if(inst) botweapon = inst->GetItem(); @@ -2532,8 +2532,8 @@ void Bot::AI_Process() #define NOT_GUARDING (!GetGuardFlag()) #define HOLDING (GetHoldFlag()) #define NOT_HOLDING (!GetHoldFlag()) -#define PASSIVE (GetBotStance() == EQEmu::constants::stancePassive) -#define NOT_PASSIVE (GetBotStance() != EQEmu::constants::stancePassive) +#define PASSIVE (GetBotStance() == EQ::constants::stancePassive) +#define NOT_PASSIVE (GetBotStance() != EQ::constants::stancePassive) Client* bot_owner = (GetBotOwner() && GetBotOwner()->IsClient() ? GetBotOwner()->CastToClient() : nullptr); Group* bot_group = GetGroup(); @@ -3068,8 +3068,8 @@ void Bot::AI_Process() bool atCombatRange = false; - const auto* p_item = GetBotItem(EQEmu::invslot::slotPrimary); - const auto* s_item = GetBotItem(EQEmu::invslot::slotSecondary); + const auto* p_item = GetBotItem(EQ::invslot::slotPrimary); + const auto* s_item = GetBotItem(EQ::invslot::slotSecondary); bool behind_mob = false; bool backstab_weapon = false; @@ -3257,13 +3257,13 @@ void Bot::AI_Process() if (m_evade_timer.Check(false)) { // Attempt to evade - int timer_duration = (HideReuseTime - GetSkillReuseTime(EQEmu::skills::SkillHide)) * 1000; + int timer_duration = (HideReuseTime - GetSkillReuseTime(EQ::skills::SkillHide)) * 1000; if (timer_duration < 0) { timer_duration = 0; } m_evade_timer.Start(timer_duration); - if (zone->random.Int(0, 260) < (int)GetSkill(EQEmu::skills::SkillHide)) { + if (zone->random.Int(0, 260) < (int)GetSkill(EQ::skills::SkillHide)) { RogueEvade(tar); } @@ -3417,13 +3417,13 @@ void Bot::AI_Process() TEST_COMBATANTS(); if (attack_timer.Check()) { // Process primary weapon attacks - Attack(tar, EQEmu::invslot::slotPrimary); + Attack(tar, EQ::invslot::slotPrimary); TEST_COMBATANTS(); - TriggerDefensiveProcs(tar, EQEmu::invslot::slotPrimary, false); + TriggerDefensiveProcs(tar, EQ::invslot::slotPrimary, false); TEST_COMBATANTS(); - TryWeaponProc(p_item, tar, EQEmu::invslot::slotPrimary); + TryWeaponProc(p_item, tar, EQ::invslot::slotPrimary); // bool tripleSuccess = false; @@ -3431,19 +3431,19 @@ void Bot::AI_Process() if (CanThisClassDoubleAttack()) { if (CheckBotDoubleAttack()) { - Attack(tar, EQEmu::invslot::slotPrimary, true); + Attack(tar, EQ::invslot::slotPrimary, true); } TEST_COMBATANTS(); if (GetSpecialAbility(SPECATK_TRIPLE) && CheckBotDoubleAttack(true)) { // tripleSuccess = true; - Attack(tar, EQEmu::invslot::slotPrimary, true); + Attack(tar, EQ::invslot::slotPrimary, true); } TEST_COMBATANTS(); // quad attack, does this belong here?? if (GetSpecialAbility(SPECATK_QUAD) && CheckBotDoubleAttack(true)) { - Attack(tar, EQEmu::invslot::slotPrimary, true); + Attack(tar, EQ::invslot::slotPrimary, true); } } @@ -3455,10 +3455,10 @@ void Bot::AI_Process() if (zone->random.Int(0, 100) < flurrychance) { MessageString(Chat::NPCFlurry, YOU_FLURRY); - Attack(tar, EQEmu::invslot::slotPrimary, false); + Attack(tar, EQ::invslot::slotPrimary, false); TEST_COMBATANTS(); - Attack(tar, EQEmu::invslot::slotPrimary, false); + Attack(tar, EQ::invslot::slotPrimary, false); } } @@ -3469,7 +3469,7 @@ void Bot::AI_Process() if (p_item && p_item->GetItem()->IsType2HWeapon()) { if (zone->random.Int(0, 100) < ExtraAttackChanceBonus) { - Attack(tar, EQEmu::invslot::slotPrimary, false); + Attack(tar, EQ::invslot::slotPrimary, false); } } } @@ -3478,7 +3478,7 @@ void Bot::AI_Process() TEST_COMBATANTS(); if (attack_dw_timer.Check() && CanThisClassDualWield()) { // Process secondary weapon attacks - const EQEmu::ItemData* s_itemdata = nullptr; + const EQ::ItemData* s_itemdata = nullptr; // Can only dual wield without a weapon if you're a monk if (s_item || (GetClass() == MONK)) { @@ -3499,7 +3499,7 @@ void Bot::AI_Process() float DualWieldProbability = 0.0f; int32 Ambidexterity = (aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity); - DualWieldProbability = ((GetSkill(EQEmu::skills::SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f); // 78.0 max + DualWieldProbability = ((GetSkill(EQ::skills::SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f); // 78.0 max int32 DWBonus = (spellbonuses.DualWieldChance + itembonuses.DualWieldChance); DualWieldProbability += (DualWieldProbability * float(DWBonus) / 100.0f); @@ -3507,16 +3507,16 @@ void Bot::AI_Process() float random = zone->random.Real(0, 1); if (random < DualWieldProbability) { // Max 78% of DW - Attack(tar, EQEmu::invslot::slotSecondary); // Single attack with offhand + Attack(tar, EQ::invslot::slotSecondary); // Single attack with offhand TEST_COMBATANTS(); - TryWeaponProc(s_item, tar, EQEmu::invslot::slotSecondary); + TryWeaponProc(s_item, tar, EQ::invslot::slotSecondary); TEST_COMBATANTS(); if (CanThisClassDoubleAttack() && CheckBotDoubleAttack()) { if (tar->GetHP() > -10) { - Attack(tar, EQEmu::invslot::slotSecondary); // Single attack with offhand + Attack(tar, EQ::invslot::slotSecondary); // Single attack with offhand } } } @@ -3859,12 +3859,12 @@ void Bot::PetAIProcess() { if(!botPet->BehindMob(botPet->GetTarget(), botPet->GetX(), botPet->GetY()) && botPet->GetTarget()->IsEnraged()) return; - if (botPet->Attack(GetTarget(), EQEmu::invslot::slotPrimary)) // try the main hand + if (botPet->Attack(GetTarget(), EQ::invslot::slotPrimary)) // try the main hand if (botPet->GetTarget()) { // We're a pet so we re able to dual attack int32 RandRoll = zone->random.Int(0, 99); if (botPet->CanThisClassDoubleAttack() && (RandRoll < (botPet->GetLevel() + NPCDualAttackModifier))) { - if (botPet->Attack(botPet->GetTarget(), EQEmu::invslot::slotPrimary)) {} + if (botPet->Attack(botPet->GetTarget(), EQ::invslot::slotPrimary)) {} } } @@ -3899,14 +3899,14 @@ void Bot::PetAIProcess() { // Ok now, let's check pet's offhand. if (botPet->GetAttackDWTimer().Check() && botPet->GetOwnerID() && botPet->GetOwner() && ((botPet->GetOwner()->GetClass() == MAGICIAN) || (botPet->GetOwner()->GetClass() == NECROMANCER) || (botPet->GetOwner()->GetClass() == SHADOWKNIGHT) || (botPet->GetOwner()->GetClass() == BEASTLORD))) { if(botPet->GetOwner()->GetLevel() >= 24) { - float DualWieldProbability = ((botPet->GetSkill(EQEmu::skills::SkillDualWield) + botPet->GetLevel()) / 400.0f); + float DualWieldProbability = ((botPet->GetSkill(EQ::skills::SkillDualWield) + botPet->GetLevel()) / 400.0f); DualWieldProbability -= zone->random.Real(0, 1); if(DualWieldProbability < 0) { - botPet->Attack(botPet->GetTarget(), EQEmu::invslot::slotSecondary); + botPet->Attack(botPet->GetTarget(), EQ::invslot::slotSecondary); if (botPet->CanThisClassDoubleAttack()) { int32 RandRoll = zone->random.Int(0, 99); if (RandRoll < (botPet->GetLevel() + 20)) - botPet->Attack(botPet->GetTarget(), EQEmu::invslot::slotSecondary); + botPet->Attack(botPet->GetTarget(), EQ::invslot::slotSecondary); } } } @@ -4030,10 +4030,10 @@ bool Bot::Spawn(Client* botCharacterOwner) { // I re-enabled this until I can sort it out uint32 itemID = 0; uint8 materialFromSlot = 0xFF; - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { itemID = GetBotItemBySlot(i); if(itemID != 0) { - materialFromSlot = EQEmu::InventoryProfile::CalcMaterialFromSlot(i); + materialFromSlot = EQ::InventoryProfile::CalcMaterialFromSlot(i); if(materialFromSlot != 0xFF) this->SendWearChange(materialFromSlot); } @@ -4059,7 +4059,7 @@ void Bot::RemoveBotItemBySlot(uint32 slotID, std::string *errorMessage) } // Retrieves all the inventory records from the database for this bot. -void Bot::GetBotItems(EQEmu::InventoryProfile &inv, std::string* errorMessage) +void Bot::GetBotItems(EQ::InventoryProfile &inv, std::string* errorMessage) { if(!GetBotID()) return; @@ -4111,18 +4111,18 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { ns->spawn.size = 0; ns->spawn.NPC = 0; // 0=player,1=npc,2=pc corpse,3=npc corpse UpdateActiveLight(); - ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive]; + ns->spawn.light = m_Light.Type[EQ::lightsource::LightActive]; ns->spawn.helm = helmtexture; //(GetShowHelm() ? helmtexture : 0); //0xFF; ns->spawn.equip_chest2 = texture; //0xFF; ns->spawn.show_name = true; strcpy(ns->spawn.lastName, GetSurname().c_str()); strcpy(ns->spawn.title, GetTitle().c_str()); strcpy(ns->spawn.suffix, GetSuffix().c_str()); - const EQEmu::ItemData* item = nullptr; - const EQEmu::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; + const EQ::ItemInstance* inst = nullptr; uint32 spawnedbotid = 0; spawnedbotid = this->GetBotID(); - for (int i = EQEmu::textures::textureBegin; i < EQEmu::textures::weaponPrimary; i++) { + for (int i = EQ::textures::textureBegin; i < EQ::textures::weaponPrimary; i++) { inst = GetBotItem(i); if (inst) { item = inst->GetItem(); @@ -4141,25 +4141,25 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { } } - inst = GetBotItem(EQEmu::invslot::slotPrimary); + inst = GetBotItem(EQ::invslot::slotPrimary); if(inst) { item = inst->GetItem(); if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment.Primary.Material = atoi(&item->IDFile[2]); - ns->spawn.equipment_tint.Primary.Color = GetEquipmentColor(EQEmu::textures::weaponPrimary); + ns->spawn.equipment_tint.Primary.Color = GetEquipmentColor(EQ::textures::weaponPrimary); } } - inst = GetBotItem(EQEmu::invslot::slotSecondary); + inst = GetBotItem(EQ::invslot::slotSecondary); if(inst) { item = inst->GetItem(); if(item) { if(strlen(item->IDFile) > 2) ns->spawn.equipment.Secondary.Material = atoi(&item->IDFile[2]); - ns->spawn.equipment_tint.Secondary.Color = GetEquipmentColor(EQEmu::textures::weaponSecondary); + ns->spawn.equipment_tint.Secondary.Color = GetEquipmentColor(EQ::textures::weaponSecondary); } } } @@ -4396,8 +4396,8 @@ void Bot::SendBotArcheryWearChange(uint8 material_slot, uint32 material, uint32 } // Returns the item id that is in the bot inventory collection for the specified slot. -EQEmu::ItemInstance* Bot::GetBotItem(uint32 slotID) { - EQEmu::ItemInstance* item = m_inv.GetItem(slotID); +EQ::ItemInstance* Bot::GetBotItem(uint32 slotID) { + EQ::ItemInstance* item = m_inv.GetItem(slotID); if(item) return item; @@ -4409,9 +4409,9 @@ void Bot::BotAddEquipItem(int slot, uint32 id) { // this is being called before bot is assigned an entity id.. // ..causing packets to be sent out to zone with an id of '0' if(slot > 0 && id > 0) { - uint8 materialFromSlot = EQEmu::InventoryProfile::CalcMaterialFromSlot(slot); + uint8 materialFromSlot = EQ::InventoryProfile::CalcMaterialFromSlot(slot); - if (materialFromSlot != EQEmu::textures::materialInvalid) { + if (materialFromSlot != EQ::textures::materialInvalid) { equipment[slot] = id; // npc has more than just material slots. Valid material should mean valid inventory index if (GetID()) // temp hack fix SendWearChange(materialFromSlot); @@ -4427,13 +4427,13 @@ void Bot::BotAddEquipItem(int slot, uint32 id) { // Erases the specified item from bot the NPC equipment array and from the bot inventory collection. void Bot::BotRemoveEquipItem(int16 slot) { - uint8 material_slot = EQEmu::InventoryProfile::CalcMaterialFromSlot(slot); + uint8 material_slot = EQ::InventoryProfile::CalcMaterialFromSlot(slot); - if (material_slot != EQEmu::textures::materialInvalid) { + if (material_slot != EQ::textures::materialInvalid) { equipment[slot] = 0; // npc has more than just material slots. Valid material should mean valid inventory index SendWearChange(material_slot); - if (material_slot == EQEmu::textures::armorChest) - SendWearChange(EQEmu::textures::armorArms); + if (material_slot == EQ::textures::armorChest) + SendWearChange(EQ::textures::armorArms); } UpdateEquipmentLight(); @@ -4441,7 +4441,7 @@ void Bot::BotRemoveEquipItem(int16 slot) SendAppearancePacket(AT_Light, GetActiveLightType()); } -void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap) { +void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const EQ::ItemInstance* inst, const EQ::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap) { if(!errorMessage->empty()) return; @@ -4464,7 +4464,7 @@ void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const EQEmu::ItemInst } } -void Bot::BotTradeAddItem(uint32 id, const EQEmu::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb) +void Bot::BotTradeAddItem(uint32 id, const EQ::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb) { if(addToDb) { if (!database.botdb.SaveItemBySlot(this, lootSlot, inst)) { @@ -4537,12 +4537,12 @@ void Bot::FinishTrade(Client* client, BotTradeType tradeType) if (tradeType == BotTradeClientNormal) { // Items being traded are found in the normal trade window used to trade between a Client and a Client or NPC // Items in this mode are found in slot ids 3000 thru 3003 - thought bots used the full 8-slot window..? - PerformTradeWithClient(EQEmu::invslot::TRADE_BEGIN, EQEmu::invslot::TRADE_END, client); // {3000..3007} + PerformTradeWithClient(EQ::invslot::TRADE_BEGIN, EQ::invslot::TRADE_END, client); // {3000..3007} } else if (tradeType == BotTradeClientNoDropNoTrade) { // Items being traded are found on the Client's cursor slot, slot id 30. This item can be either a single item or it can be a bag. // If it is a bag, then we have to search for items in slots 331 thru 340 - PerformTradeWithClient(EQEmu::invslot::slotCursor, EQEmu::invslot::slotCursor, client); + PerformTradeWithClient(EQ::invslot::slotCursor, EQ::invslot::slotCursor, client); // TODO: Add logic here to test if the item in SLOT_CURSOR is a container type, if it is then we need to call the following: // PerformTradeWithClient(331, 340, client); @@ -4552,7 +4552,7 @@ void Bot::FinishTrade(Client* client, BotTradeType tradeType) // Perfoms the actual trade action with a client bot owner void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* client) { - using namespace EQEmu; + using namespace EQ; struct ClientTrade { const ItemInstance* tradeItemInstance; @@ -4692,7 +4692,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli } // find equipment slots - const bool can_dual_wield = (GetSkill(EQEmu::skills::SkillDualWield) > 0); + const bool can_dual_wield = (GetSkill(EQ::skills::SkillDualWield) > 0); bool melee_2h_weapon = false; bool melee_secondary = false; @@ -4904,7 +4904,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli this->BotAddEquipItem(trade_iterator.toBotSlot, (trade_iterator.tradeItemInstance ? trade_iterator.tradeItemInstance->GetID() : 0)); trade_iterator.tradeItemInstance = nullptr; // actual deletion occurs in client delete below - client->DeleteItemInInventory(trade_iterator.fromClientSlot, 0, (trade_iterator.fromClientSlot == EQEmu::invslot::slotCursor)); + client->DeleteItemInInventory(trade_iterator.fromClientSlot, 0, (trade_iterator.fromClientSlot == EQ::invslot::slotCursor)); // database currently has unattuned item saved in inventory..it will be attuned on next bot load // this prevents unattuned item returns in the mean time (TODO: re-work process) @@ -4934,7 +4934,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli CalcBotStats(client->GetBotOption(Client::booStatsUpdate)); } -bool Bot::Death(Mob *killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill) { +bool Bot::Death(Mob *killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) { if(!NPC::Death(killerMob, damage, spell_id, attack_skill)) return false; @@ -5022,7 +5022,7 @@ bool Bot::Death(Mob *killerMob, int32 damage, uint16 spell_id, EQEmu::skills::Sk return true; } -void Bot::Damage(Mob *from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { +void Bot::Damage(Mob *from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { if(spell_id == 0) spell_id = SPELL_UNKNOWN; @@ -5108,14 +5108,14 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b } FaceTarget(GetTarget()); - EQEmu::ItemInstance* weapon = nullptr; - if (Hand == EQEmu::invslot::slotPrimary) { - weapon = GetBotItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance* weapon = nullptr; + if (Hand == EQ::invslot::slotPrimary) { + weapon = GetBotItem(EQ::invslot::slotPrimary); OffHandAtk(false); } - if (Hand == EQEmu::invslot::slotSecondary) { - weapon = GetBotItem(EQEmu::invslot::slotSecondary); + if (Hand == EQ::invslot::slotSecondary) { + weapon = GetBotItem(EQ::invslot::slotSecondary); OffHandAtk(true); } @@ -5164,18 +5164,18 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b // This is not recommended for normal usage, as the damage bonus represents a non-trivial component of the DPS output // of weapons wielded by higher-level melee characters (especially for two-handed weapons). int ucDamageBonus = 0; - if (Hand == EQEmu::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) { + if (Hand == EQ::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) { // Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above // who belong to a melee class. If we're here, then all of these conditions apply. - ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr); + ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQ::ItemData*) nullptr); my_hit.min_damage = ucDamageBonus; hate += ucDamageBonus; } #endif //Live AA - Sinister Strikes *Adds weapon damage bonus to offhand weapon. - if (Hand == EQEmu::invslot::slotSecondary) { + if (Hand == EQ::invslot::slotSecondary) { if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc){ - ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr); + ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQ::ItemData*) nullptr); my_hit.min_damage = ucDamageBonus; hate += ucDamageBonus; } @@ -5581,18 +5581,18 @@ int32 Bot::GetBotFocusEffect(focusType bottype, uint16 spell_id) { //Check if item focus effect exists for the client. if (itembonuses.FocusEffects[bottype]) { - const EQEmu::ItemData* TempItem = nullptr; - const EQEmu::ItemData* UsedItem = nullptr; - const EQEmu::ItemInstance* TempInst = nullptr; + const EQ::ItemData* TempItem = nullptr; + const EQ::ItemData* UsedItem = nullptr; + const EQ::ItemInstance* TempInst = nullptr; uint16 UsedFocusID = 0; int32 Total = 0; int32 focus_max = 0; int32 focus_max_real = 0; //item focus // are focus effects the same as bonus? (slotAmmo-excluded) - for (int x = EQEmu::invslot::EQUIPMENT_BEGIN; x <= EQEmu::invslot::EQUIPMENT_END; x++) { + for (int x = EQ::invslot::EQUIPMENT_BEGIN; x <= EQ::invslot::EQUIPMENT_END; x++) { TempItem = nullptr; - EQEmu::ItemInstance* ins = GetBotItem(x); + EQ::ItemInstance* ins = GetBotItem(x); if (!ins) continue; @@ -5615,11 +5615,11 @@ int32 Bot::GetBotFocusEffect(focusType bottype, uint16 spell_id) { } } - for (int y = EQEmu::invaug::SOCKET_BEGIN; y <= EQEmu::invaug::SOCKET_END; ++y) { - EQEmu::ItemInstance *aug = nullptr; + for (int y = EQ::invaug::SOCKET_BEGIN; y <= EQ::invaug::SOCKET_END; ++y) { + EQ::ItemInstance *aug = nullptr; aug = ins->GetAugment(y); if(aug) { - const EQEmu::ItemData* TempItemAug = aug->GetItem(); + const EQ::ItemData* TempItemAug = aug->GetItem(); if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) { if(rand_effectiveness) { focus_max = CalcBotFocusEffect(bottype, TempItemAug->Focus.Effect, spell_id, true); @@ -6070,13 +6070,13 @@ float Bot::GetProcChances(float ProcBonus, uint16 hand) { float ProcChance = 0.0f; uint32 weapon_speed = 0; switch (hand) { - case EQEmu::invslot::slotPrimary: + case EQ::invslot::slotPrimary: weapon_speed = attack_timer.GetDuration(); break; - case EQEmu::invslot::slotSecondary: + case EQ::invslot::slotSecondary: weapon_speed = attack_dw_timer.GetDuration(); break; - case EQEmu::invslot::slotRange: + case EQ::invslot::slotRange: weapon_speed = ranged_timer.GetDuration(); break; } @@ -6100,9 +6100,9 @@ float Bot::GetProcChances(float ProcBonus, uint16 hand) { int Bot::GetHandToHandDamage(void) { if (RuleB(Combat, UseRevampHandToHand)) { // everyone uses this in the revamp! - int skill = GetSkill(EQEmu::skills::SkillHandtoHand); + int skill = GetSkill(EQ::skills::SkillHandtoHand); int epic = 0; - if (CastToNPC()->GetEquippedItemFromTextureSlot(EQEmu::textures::armorHands) == 10652 && GetLevel() > 46) + if (CastToNPC()->GetEquippedItemFromTextureSlot(EQ::textures::armorHands) == 10652 && GetLevel() > 46) epic = 280; if (epic > skill) skill = epic; @@ -6124,7 +6124,7 @@ int Bot::GetHandToHandDamage(void) { 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, // 31-40 10, 11, 11, 11, 11, 11, 11, 12, 12}; // 41-49 if (GetClass() == MONK) { - if (CastToNPC()->GetEquippedItemFromTextureSlot(EQEmu::textures::armorHands) == 10652 && GetLevel() > 50) + if (CastToNPC()->GetEquippedItemFromTextureSlot(EQ::textures::armorHands) == 10652 && GetLevel() > 50) return 9; if (level > 62) return 15; @@ -6166,11 +6166,11 @@ void Bot::DoRiposte(Mob* defender) { if (!defender) return; - defender->Attack(this, EQEmu::invslot::slotPrimary, true); + defender->Attack(this, EQ::invslot::slotPrimary, true); int32 DoubleRipChance = (defender->GetAABonuses().GiveDoubleRiposte[0] + defender->GetSpellBonuses().GiveDoubleRiposte[0] + defender->GetItemBonuses().GiveDoubleRiposte[0]); if(DoubleRipChance && (DoubleRipChance >= zone->random.Int(0, 100))) { LogCombat("Preforming a double riposte ([{}] percent chance)", DoubleRipChance); - defender->Attack(this, EQEmu::invslot::slotPrimary, true); + defender->Attack(this, EQ::invslot::slotPrimary, true); } DoubleRipChance = defender->GetAABonuses().GiveDoubleRiposte[1]; @@ -6182,14 +6182,14 @@ void Bot::DoRiposte(Mob* defender) { } } -int Bot::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) +int Bot::GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target) { - int base = EQEmu::skills::GetBaseDamage(skill); + int base = EQ::skills::GetBaseDamage(skill); auto skill_level = GetSkill(skill); switch (skill) { - case EQEmu::skills::SkillDragonPunch: - case EQEmu::skills::SkillEagleStrike: - case EQEmu::skills::SkillTigerClaw: + case EQ::skills::SkillDragonPunch: + case EQ::skills::SkillEagleStrike: + case EQ::skills::SkillTigerClaw: if (skill_level >= 25) base++; if (skill_level >= 75) @@ -6199,8 +6199,8 @@ int Bot::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) if (skill_level >= 175) base++; return base; - case EQEmu::skills::SkillFrenzy: - if (GetBotItem(EQEmu::invslot::slotPrimary)) { + case EQ::skills::SkillFrenzy: + if (GetBotItem(EQ::invslot::slotPrimary)) { if (GetLevel() > 15) base += GetLevel() - 15; if (base > 23) @@ -6213,44 +6213,44 @@ int Bot::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) base++; } return base; - case EQEmu::skills::SkillFlyingKick: { + case EQ::skills::SkillFlyingKick: { float skill_bonus = skill_level / 9.0f; float ac_bonus = 0.0f; - auto inst = GetBotItem(EQEmu::invslot::slotFeet); + auto inst = GetBotItem(EQ::invslot::slotFeet); if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; if (ac_bonus > skill_bonus) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillKick: { + case EQ::skills::SkillKick: { float skill_bonus = skill_level / 10.0f; float ac_bonus = 0.0f; - auto inst = GetBotItem(EQEmu::invslot::slotFeet); + auto inst = GetBotItem(EQ::invslot::slotFeet); if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; if (ac_bonus > skill_bonus) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillBash: { + case EQ::skills::SkillBash: { float skill_bonus = skill_level / 10.0f; float ac_bonus = 0.0f; - const EQEmu::ItemInstance *inst = nullptr; + const EQ::ItemInstance *inst = nullptr; if (HasShieldEquiped()) - inst = GetBotItem(EQEmu::invslot::slotSecondary); + inst = GetBotItem(EQ::invslot::slotSecondary); else if (HasTwoHanderEquipped()) - inst = GetBotItem(EQEmu::invslot::slotPrimary); + inst = GetBotItem(EQ::invslot::slotPrimary); if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; if (ac_bonus > skill_bonus) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillBackstab: { + case EQ::skills::SkillBackstab: { float skill_bonus = static_cast(skill_level) * 0.02f; - auto inst = GetBotItem(EQEmu::invslot::slotPrimary); - if (inst && inst->GetItem() && inst->GetItem()->ItemType == EQEmu::item::ItemType1HPiercing) { + auto inst = GetBotItem(EQ::invslot::slotPrimary); + if (inst && inst->GetItem() && inst->GetItem()->ItemType == EQ::item::ItemType1HPiercing) { base = inst->GetItemBackstabDamage(true); if (!inst->GetItemBackstabDamage()) base += inst->GetItemWeaponDamage(true); @@ -6268,19 +6268,19 @@ int Bot::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) } } -void Bot::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 max_damage, int32 min_damage, int32 hate_override, int ReuseTime, bool HitChance) { +void Bot::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 max_damage, int32 min_damage, int32 hate_override, int ReuseTime, bool HitChance) { int32 hate = max_damage; if(hate_override > -1) hate = hate_override; - if (skill == EQEmu::skills::SkillBash) { - const EQEmu::ItemInstance* inst = GetBotItem(EQEmu::invslot::slotSecondary); - const EQEmu::ItemData* botweapon = nullptr; + if (skill == EQ::skills::SkillBash) { + const EQ::ItemInstance* inst = GetBotItem(EQ::invslot::slotSecondary); + const EQ::ItemData* botweapon = nullptr; if(inst) botweapon = inst->GetItem(); if(botweapon) { - if (botweapon->ItemType == EQEmu::item::ItemTypeShield) + if (botweapon->ItemType == EQ::item::ItemTypeShield) hate += botweapon->AC; hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); @@ -6295,10 +6295,10 @@ void Bot::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 my_hit.skill = skill; my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, 0); - my_hit.hand = EQEmu::invslot::slotPrimary; + my_hit.hand = EQ::invslot::slotPrimary; - if (skill == EQEmu::skills::SkillThrowing || skill == EQEmu::skills::SkillArchery) - my_hit.hand = EQEmu::invslot::slotRange; + if (skill == EQ::skills::SkillThrowing || skill == EQ::skills::SkillArchery) + my_hit.hand = EQ::invslot::slotRange; DoAttack(who, my_hit); @@ -6335,12 +6335,12 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) { bool bIsBehind = false; bool bCanFrontalBS = false; - const EQEmu::ItemInstance* inst = GetBotItem(EQEmu::invslot::slotPrimary); - const EQEmu::ItemData* botpiercer = nullptr; + const EQ::ItemInstance* inst = GetBotItem(EQ::invslot::slotPrimary); + const EQ::ItemData* botpiercer = nullptr; if(inst) botpiercer = inst->GetItem(); - if (!botpiercer || (botpiercer->ItemType != EQEmu::item::ItemType1HPiercing)) { + if (!botpiercer || (botpiercer->ItemType != EQ::item::ItemType1HPiercing)) { BotGroupSay(this, "I can't backstab with this weapon!"); return; } @@ -6362,7 +6362,7 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) { } else { RogueBackstab(other); if (level > 54) { - float DoubleAttackProbability = ((GetSkill(EQEmu::skills::SkillDoubleAttack) + GetLevel()) / 500.0f); + float DoubleAttackProbability = ((GetSkill(EQ::skills::SkillDoubleAttack) + GetLevel()) / 500.0f); if(zone->random.Real(0, 1) < DoubleAttackProbability) { if(other->GetHP() > 0) RogueBackstab(other,false,ReuseTime); @@ -6378,7 +6378,7 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) { m_specialattacks = eSpecialAttacks::None; } else - Attack(other, EQEmu::invslot::slotPrimary); + Attack(other, EQ::invslot::slotPrimary); } void Bot::RogueBackstab(Mob *other, bool min_damage, int ReuseTime) @@ -6386,30 +6386,30 @@ void Bot::RogueBackstab(Mob *other, bool min_damage, int ReuseTime) if (!other) return; - EQEmu::ItemInstance *botweaponInst = GetBotItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance *botweaponInst = GetBotItem(EQ::invslot::slotPrimary); if (botweaponInst) { if (!GetWeaponDamage(other, botweaponInst)) return; - } else if (!GetWeaponDamage(other, (const EQEmu::ItemData *)nullptr)) { + } else if (!GetWeaponDamage(other, (const EQ::ItemData *)nullptr)) { return; } uint32 hate = 0; - int base_damage = GetBaseSkillDamage(EQEmu::skills::SkillBackstab, other); + int base_damage = GetBaseSkillDamage(EQ::skills::SkillBackstab, other); hate = base_damage; - DoSpecialAttackDamage(other, EQEmu::skills::SkillBackstab, base_damage, 0, hate, ReuseTime); + DoSpecialAttackDamage(other, EQ::skills::SkillBackstab, base_damage, 0, hate, ReuseTime); DoAnim(anim1HPiercing); } void Bot::RogueAssassinate(Mob* other) { - EQEmu::ItemInstance* botweaponInst = GetBotItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance* botweaponInst = GetBotItem(EQ::invslot::slotPrimary); if(botweaponInst) { if(GetWeaponDamage(other, botweaponInst)) - other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab); + other->Damage(this, 32000, SPELL_UNKNOWN, EQ::skills::SkillBackstab); else - other->Damage(this, -5, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab); + other->Damage(this, -5, SPELL_UNKNOWN, EQ::skills::SkillBackstab); } DoAnim(anim1HPiercing); @@ -6428,7 +6428,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { // Bots without this skill shouldn't be 'checking' on this timer..let's just disable it and avoid the extra IsAttackAllowed() checks // Note: this is done here instead of NPC::ctor() because taunt skill can be acquired during level ups (the timer is re-enabled in CalcBotStats()) - if (!GetSkill(EQEmu::skills::SkillTaunt)) { + if (!GetSkill(EQ::skills::SkillTaunt)) { taunt_timer.Disable(); return; @@ -6480,18 +6480,18 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { if (ma_time) { switch (GetClass()) { case MONK: { - int reuse = (MonkSpecialAttack(target, EQEmu::skills::SkillTigerClaw) - 1); + int reuse = (MonkSpecialAttack(target, EQ::skills::SkillTigerClaw) - 1); // Live AA - Technique of Master Wu int wuchance = itembonuses.DoubleSpecialAttack + spellbonuses.DoubleSpecialAttack + aabonuses.DoubleSpecialAttack; if (wuchance) { const int MonkSPA[5] = { - EQEmu::skills::SkillFlyingKick, - EQEmu::skills::SkillDragonPunch, - EQEmu::skills::SkillEagleStrike, - EQEmu::skills::SkillTigerClaw, - EQEmu::skills::SkillRoundKick + EQ::skills::SkillFlyingKick, + EQ::skills::SkillDragonPunch, + EQ::skills::SkillEagleStrike, + EQ::skills::SkillTigerClaw, + EQ::skills::SkillRoundKick }; int extra = 0; // always 1/4 of the double attack chance, 25% at rank 5 (100/4) @@ -6519,7 +6519,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { auto classic = RuleB(Combat, ClassicMasterWu); while (extra) { - MonkSpecialAttack(GetTarget(), (classic ? MonkSPA[zone->random.Int(0, 4)] : EQEmu::skills::SkillTigerClaw)); + MonkSpecialAttack(GetTarget(), (classic ? MonkSPA[zone->random.Int(0, 4)] : EQ::skills::SkillTigerClaw)); --extra; } } @@ -6547,70 +6547,70 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { case WARRIOR: if(level >= RuleI(Combat, NPCBashKickLevel)){ bool canBash = false; - if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQEmu::invslot::slotSecondary) && m_inv.GetItem(EQEmu::invslot::slotSecondary)->GetItem()->ItemType == EQEmu::item::ItemTypeShield) || (m_inv.GetItem(EQEmu::invslot::slotPrimary) && m_inv.GetItem(EQEmu::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) + if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) canBash = true; if(!canBash || zone->random.Int(0, 100) > 25) - skill_to_use = EQEmu::skills::SkillKick; + skill_to_use = EQ::skills::SkillKick; else - skill_to_use = EQEmu::skills::SkillBash; + skill_to_use = EQ::skills::SkillBash; } case RANGER: case BEASTLORD: - skill_to_use = EQEmu::skills::SkillKick; + skill_to_use = EQ::skills::SkillKick; break; case BERSERKER: - skill_to_use = EQEmu::skills::SkillFrenzy; + skill_to_use = EQ::skills::SkillFrenzy; break; case CLERIC: case SHADOWKNIGHT: case PALADIN: if(level >= RuleI(Combat, NPCBashKickLevel)){ - if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQEmu::invslot::slotSecondary) && m_inv.GetItem(EQEmu::invslot::slotSecondary)->GetItem()->ItemType == EQEmu::item::ItemTypeShield) || (m_inv.GetItem(EQEmu::invslot::slotPrimary) && m_inv.GetItem(EQEmu::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) - skill_to_use = EQEmu::skills::SkillBash; + if ((GetRace() == OGRE || GetRace() == TROLL || GetRace() == BARBARIAN) || (m_inv.GetItem(EQ::invslot::slotSecondary) && m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield) || (m_inv.GetItem(EQ::invslot::slotPrimary) && m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() && GetAA(aa2HandBash) >= 1)) + skill_to_use = EQ::skills::SkillBash; } break; case MONK: if (GetLevel() >= 30) { - skill_to_use = EQEmu::skills::SkillFlyingKick; + skill_to_use = EQ::skills::SkillFlyingKick; } else if (GetLevel() >= 25) { - skill_to_use = EQEmu::skills::SkillDragonPunch; + skill_to_use = EQ::skills::SkillDragonPunch; } else if (GetLevel() >= 20) { - skill_to_use = EQEmu::skills::SkillEagleStrike; + skill_to_use = EQ::skills::SkillEagleStrike; } else if (GetLevel() >= 5) { - skill_to_use = EQEmu::skills::SkillRoundKick; + skill_to_use = EQ::skills::SkillRoundKick; } else { - skill_to_use = EQEmu::skills::SkillKick; + skill_to_use = EQ::skills::SkillKick; } break; case ROGUE: - skill_to_use = EQEmu::skills::SkillBackstab; + skill_to_use = EQ::skills::SkillBackstab; break; } if(skill_to_use == -1) return; - int dmg = GetBaseSkillDamage(static_cast(skill_to_use), GetTarget()); + int dmg = GetBaseSkillDamage(static_cast(skill_to_use), GetTarget()); - if (skill_to_use == EQEmu::skills::SkillBash) { + if (skill_to_use == EQ::skills::SkillBash) { if (target != this) { DoAnim(animTailRake); - if (GetWeaponDamage(target, GetBotItem(EQEmu::invslot::slotSecondary)) <= 0 && GetWeaponDamage(target, GetBotItem(EQEmu::invslot::slotShoulders)) <= 0) + if (GetWeaponDamage(target, GetBotItem(EQ::invslot::slotSecondary)) <= 0 && GetWeaponDamage(target, GetBotItem(EQ::invslot::slotShoulders)) <= 0) dmg = DMG_INVULNERABLE; reuse = (BashReuseTime * 1000); - DoSpecialAttackDamage(target, EQEmu::skills::SkillBash, dmg, 0, -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillBash, dmg, 0, -1, reuse); did_attack = true; } } - if (skill_to_use == EQEmu::skills::SkillFrenzy) { + if (skill_to_use == EQ::skills::SkillFrenzy) { int AtkRounds = 3; DoAnim(anim2HSlashing); @@ -6618,30 +6618,30 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { did_attack = true; while(AtkRounds > 0) { if (GetTarget() && (AtkRounds == 1 || zone->random.Int(0, 100) < 75)) { - DoSpecialAttackDamage(GetTarget(), EQEmu::skills::SkillFrenzy, dmg, 0, dmg, reuse, true); + DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillFrenzy, dmg, 0, dmg, reuse, true); } AtkRounds--; } } - if (skill_to_use == EQEmu::skills::SkillKick) { + if (skill_to_use == EQ::skills::SkillKick) { if(target != this) { DoAnim(animKick); - if (GetWeaponDamage(target, GetBotItem(EQEmu::invslot::slotFeet)) <= 0) + if (GetWeaponDamage(target, GetBotItem(EQ::invslot::slotFeet)) <= 0) dmg = DMG_INVULNERABLE; reuse = (KickReuseTime * 1000); - DoSpecialAttackDamage(target, EQEmu::skills::SkillKick, dmg, 0, -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, 0, -1, reuse); did_attack = true; } } if ( - skill_to_use == EQEmu::skills::SkillFlyingKick || - skill_to_use == EQEmu::skills::SkillDragonPunch || - skill_to_use == EQEmu::skills::SkillEagleStrike || - skill_to_use == EQEmu::skills::SkillRoundKick + skill_to_use == EQ::skills::SkillFlyingKick || + skill_to_use == EQ::skills::SkillDragonPunch || + skill_to_use == EQ::skills::SkillEagleStrike || + skill_to_use == EQ::skills::SkillRoundKick ) { reuse = (MonkSpecialAttack(target, skill_to_use) - 1); @@ -6650,11 +6650,11 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { if (wuchance) { const int MonkSPA[5] = { - EQEmu::skills::SkillFlyingKick, - EQEmu::skills::SkillDragonPunch, - EQEmu::skills::SkillEagleStrike, - EQEmu::skills::SkillTigerClaw, - EQEmu::skills::SkillRoundKick + EQ::skills::SkillFlyingKick, + EQ::skills::SkillDragonPunch, + EQ::skills::SkillEagleStrike, + EQ::skills::SkillTigerClaw, + EQ::skills::SkillRoundKick }; int extra = 0; // always 1/4 of the double attack chance, 25% at rank 5 (100/4) @@ -6691,7 +6691,7 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { did_attack = true; } - if (skill_to_use == EQEmu::skills::SkillBackstab) { + if (skill_to_use == EQ::skills::SkillBackstab) { reuse = (BackstabReuseTime * 1000); did_attack = true; if (IsRiposte) @@ -6799,9 +6799,9 @@ bool Bot::IsBotAttackAllowed(Mob* attacker, Mob* target, bool& hasRuleDefined) { void Bot::EquipBot(std::string* errorMessage) { GetBotItems(m_inv, errorMessage); - const EQEmu::ItemInstance* inst = nullptr; - const EQEmu::ItemData* item = nullptr; - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { + const EQ::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { inst = GetBotItem(i); if(inst) { item = inst->GetItem(); @@ -6927,23 +6927,23 @@ void Bot::SetAttackTimer() { float haste_mod = (GetHaste() * 0.01f); attack_timer.SetAtTrigger(4000, true); Timer* TimerToUse = nullptr; - const EQEmu::ItemData* PrimaryWeapon = nullptr; - for (int i = EQEmu::invslot::slotRange; i <= EQEmu::invslot::slotSecondary; i++) { - if (i == EQEmu::invslot::slotPrimary) + const EQ::ItemData* PrimaryWeapon = nullptr; + for (int i = EQ::invslot::slotRange; i <= EQ::invslot::slotSecondary; i++) { + if (i == EQ::invslot::slotPrimary) TimerToUse = &attack_timer; - else if (i == EQEmu::invslot::slotRange) + else if (i == EQ::invslot::slotRange) TimerToUse = &ranged_timer; - else if (i == EQEmu::invslot::slotSecondary) + else if (i == EQ::invslot::slotSecondary) TimerToUse = &attack_dw_timer; else continue; - const EQEmu::ItemData* ItemToUse = nullptr; - EQEmu::ItemInstance* ci = GetBotItem(i); + const EQ::ItemData* ItemToUse = nullptr; + EQ::ItemInstance* ci = GetBotItem(i); if (ci) ItemToUse = ci->GetItem(); - if (i == EQEmu::invslot::slotSecondary) { + if (i == EQ::invslot::slotSecondary) { if (PrimaryWeapon != nullptr) { if (PrimaryWeapon->IsClassCommon() && PrimaryWeapon->IsType2HWeapon()) { attack_dw_timer.Disable(); @@ -6951,14 +6951,14 @@ void Bot::SetAttackTimer() { } } - if (!GetSkill(EQEmu::skills::SkillDualWield)) { + if (!GetSkill(EQ::skills::SkillDualWield)) { attack_dw_timer.Disable(); continue; } } if (ItemToUse != nullptr) { - if (!ItemToUse->IsClassCommon() || ItemToUse->Damage == 0 || ItemToUse->Delay == 0 || ((ItemToUse->ItemType > EQEmu::item::ItemTypeLargeThrowing) && (ItemToUse->ItemType != EQEmu::item::ItemTypeMartial) && (ItemToUse->ItemType != EQEmu::item::ItemType2HPiercing))) + if (!ItemToUse->IsClassCommon() || ItemToUse->Damage == 0 || ItemToUse->Delay == 0 || ((ItemToUse->ItemType > EQ::item::ItemTypeLargeThrowing) && (ItemToUse->ItemType != EQ::item::ItemTypeMartial) && (ItemToUse->ItemType != EQ::item::ItemType2HPiercing))) ItemToUse = nullptr; } @@ -6974,7 +6974,7 @@ void Bot::SetAttackTimer() { speed = (RuleB(Spells, Jun182014HundredHandsRevamp) ? static_cast(((delay / haste_mod) + ((hhe / 1000.0f) * (delay / haste_mod))) * 100) : static_cast(((delay / haste_mod) + ((hhe / 100.0f) * delay)) * 100)); TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true); - if (i == EQEmu::invslot::slotPrimary) + if (i == EQ::invslot::slotPrimary) PrimaryWeapon = ItemToUse; } } @@ -7337,7 +7337,7 @@ void Bot::DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster) { Mob::DoBuffTic(buff, slot, caster); } -bool Bot::CastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot, int32 cast_time, int32 mana_cost, +bool Bot::CastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, int16 *resist_adjust, uint32 aa_id) { bool Result = false; if(zone && !zone->IsSpellBlocked(spell_id, glm::vec3(GetPosition()))) { @@ -7377,7 +7377,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlo return false; } - if(slot < EQEmu::spells::CastingSlot::MaxGems && !CheckFizzle(spell_id)) { + if(slot < EQ::spells::CastingSlot::MaxGems && !CheckFizzle(spell_id)) { int fizzle_msg = IsBardSong(spell_id) ? MISS_NOTE : SPELL_FIZZLE; InterruptSpell(fizzle_msg, 0x121, spell_id); @@ -7391,7 +7391,7 @@ bool Bot::CastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlo LogSpells("Casting a new spell/song while singing a song. Killing old song [{}]", bardsong); bardsong = 0; bardsong_target_id = 0; - bardsong_slot = EQEmu::spells::CastingSlot::Gem1; + bardsong_slot = EQ::spells::CastingSlot::Gem1; bardsong_timer.Disable(); } @@ -7521,7 +7521,7 @@ bool Bot::IsImmuneToSpell(uint16 spell_id, Mob *caster) { return Result; } -bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction, EQEmu::spells::CastingSlot slot) { +bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction, EQ::spells::CastingSlot slot) { bool Result = false; SpellTargetType targetType = spells[spell_id].targettype; if(targetType == ST_GroupClientAndPet) { @@ -7534,7 +7534,7 @@ bool Bot::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce return Result; } -bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) { +bool Bot::DoCastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot, int32 cast_time, int32 mana_cost, uint32* oSpellWillFinish, uint32 item_slot, uint32 aa_id) { bool Result = false; if(GetClass() == BARD) cast_time = 0; @@ -7558,7 +7558,7 @@ int32 Bot::GenerateBaseManaPoints() { switch(GetCasterClass()) { case 'I': WisInt = INT; - if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { if(WisInt > 100) { ConvertedWisInt = (((WisInt - 100) * 5 / 2) + 100); if(WisInt > 201) @@ -7593,7 +7593,7 @@ int32 Bot::GenerateBaseManaPoints() { break; case 'W': WisInt = WIS; - if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { if(WisInt > 100) { ConvertedWisInt = (((WisInt - 100) * 5 / 2) + 100); if(WisInt > 201) @@ -7638,7 +7638,7 @@ void Bot::GenerateSpecialAttacks() { SetSpecialAbility(SPECATK_TRIPLE, 1); } -bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool& stopLogic) { +bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool& stopLogic) { if(GetClass() == BARD) { if(!ApplyNextBardPulse(bardsong, this, bardsong_slot)) InterruptSpell(SONG_ENDS_ABRUPTLY, 0x121, bardsong); @@ -7648,7 +7648,7 @@ bool Bot::DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQEmu::spel return true; } -bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool& stopLogic) { +bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool& stopLogic) { if(spellTarget) { if(IsGrouped() && (spellTarget->IsBot() || spellTarget->IsClient()) && RuleB(Bots, GroupBuffing)) { bool noGroupSpell = false; @@ -7660,7 +7660,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQEmu:: bool spelltypeequal = ((spelltype == 2) || (spelltype == 16) || (spelltype == 32)); bool spelltypetargetequal = ((spelltype == 8) && (spells[thespell].targettype == ST_Self)); bool spelltypeclassequal = ((spelltype == 1024) && (GetClass() == SHAMAN)); - bool slotequal = (slot == EQEmu::spells::CastingSlot::Item); + bool slotequal = (slot == EQ::spells::CastingSlot::Item); if(spellequal || slotequal) { if((spelltypeequal || spelltypetargetequal) || spelltypeclassequal || slotequal) { if(((spells[thespell].effectid[0] == 0) && (spells[thespell].base[0] < 0)) && @@ -7699,7 +7699,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQEmu:: return true; } -bool Bot::DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool& stopLogic) { +bool Bot::DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool& stopLogic) { bool isMainGroupMGB = false; if(isMainGroupMGB && (GetClass() != BARD)) { BotGroupSay(this, "MGB %s", spells[spell_id].name); @@ -7777,7 +7777,7 @@ int32 Bot::GetMaxStat() { int32 base = 0; if (level < 61) base = 255; - else if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoF) + else if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoF) base = (255 + 5 * (level - 60)); else if (level < 71) base = (255 + 5 * (level - 60)); @@ -8170,7 +8170,7 @@ int32 Bot::CalcManaRegen() { if (IsSitting()) { BuffFadeBySitModifier(); if(botclass != WARRIOR && botclass != MONK && botclass != ROGUE && botclass != BERSERKER) { - regen = ((((GetSkill(EQEmu::skills::SkillMeditate) / 10) + (level - (level / 4))) / 4) + 4); + regen = ((((GetSkill(EQ::skills::SkillMeditate) / 10) + (level - (level / 4))) / 4) + 4); regen += (spellbonuses.ManaRegen + itembonuses.ManaRegen); } else regen = (2 + spellbonuses.ManaRegen + itembonuses.ManaRegen); @@ -8271,7 +8271,7 @@ int32 Bot::CalcBaseEndurance() { int32 ConvertedStats = 0; int32 sta_end = 0; int Stats = 0; - if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd)) { int HeroicStats = 0; Stats = ((GetSTR() + GetSTA() + GetDEX() + GetAGI()) / 4); HeroicStats = ((GetHeroicSTR() + GetHeroicSTA() + GetHeroicDEX() + GetHeroicAGI()) / 4); @@ -8687,10 +8687,10 @@ void Bot::ProcessBotInspectionRequest(Bot* inspectedBot, Client* client) { insr->TargetID = inspectedBot->GetNPCTypeID(); insr->playerid = inspectedBot->GetID(); - const EQEmu::ItemData* item = nullptr; - const EQEmu::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; + const EQ::ItemInstance* inst = nullptr; - for (int16 L = EQEmu::invslot::EQUIPMENT_BEGIN; L <= EQEmu::invslot::EQUIPMENT_END; L++) { + for (int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { inst = inspectedBot->GetBotItem(L); if(inst) { @@ -8718,10 +8718,10 @@ void Bot::ProcessBotInspectionRequest(Bot* inspectedBot, Client* client) { void Bot::CalcItemBonuses(StatBonuses* newbon) { - const EQEmu::ItemData* itemtmp = nullptr; + const EQ::ItemData* itemtmp = nullptr; - for (int i = EQEmu::invslot::BONUS_BEGIN; i <= EQEmu::invslot::BONUS_STAT_END; ++i) { - const EQEmu::ItemInstance* item = GetBotItem(i); + for (int i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_STAT_END; ++i) { + const EQ::ItemInstance* item = GetBotItem(i); if(item) { AddItemBonuses(item, newbon); } @@ -8738,7 +8738,7 @@ void Bot::CalcItemBonuses(StatBonuses* newbon) newbon->EnduranceRegen = CalcEnduranceRegenCap(); } -void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug, bool isTribute, int rec_override) { +void Bot::AddItemBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug, bool isTribute, int rec_override) { if (!inst || !inst->IsClassCommon()) { return; @@ -8749,11 +8749,11 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b return; } - const EQEmu::ItemData *item = inst->GetItem(); + const EQ::ItemData *item = inst->GetItem(); if(!isTribute && !inst->IsEquipable(GetBaseRace(),GetClass())) { - if (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink) + if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink) return; } @@ -8960,17 +8960,17 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b else newbon->DSMitigation += item->DSMitigation; } - if (item->Worn.Effect > 0 && item->Worn.Type == EQEmu::item::ItemEffectWorn) {// latent effects + if (item->Worn.Effect > 0 && item->Worn.Type == EQ::item::ItemEffectWorn) {// latent effects ApplySpellsBonuses(item->Worn.Effect, item->Worn.Level, newbon, 0, item->Worn.Type); } - if (item->Focus.Effect>0 && (item->Focus.Type == EQEmu::item::ItemEffectFocus)) { // focus effects + if (item->Focus.Effect>0 && (item->Focus.Type == EQ::item::ItemEffectFocus)) { // focus effects ApplySpellsBonuses(item->Focus.Effect, item->Focus.Level, newbon, 0); } switch(item->BardType) { - case EQEmu::item::ItemTypeAllInstrumentTypes: // (e.g. Singing Short Sword) + case EQ::item::ItemTypeAllInstrumentTypes: // (e.g. Singing Short Sword) { if(item->BardValue > newbon->singingMod) newbon->singingMod = item->BardValue; @@ -8984,31 +8984,31 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b newbon->windMod = item->BardValue; break; } - case EQEmu::item::ItemTypeSinging: + case EQ::item::ItemTypeSinging: { if(item->BardValue > newbon->singingMod) newbon->singingMod = item->BardValue; break; } - case EQEmu::item::ItemTypeWindInstrument: + case EQ::item::ItemTypeWindInstrument: { if(item->BardValue > newbon->windMod) newbon->windMod = item->BardValue; break; } - case EQEmu::item::ItemTypeStringedInstrument: + case EQ::item::ItemTypeStringedInstrument: { if(item->BardValue > newbon->stringedMod) newbon->stringedMod = item->BardValue; break; } - case EQEmu::item::ItemTypeBrassInstrument: + case EQ::item::ItemTypeBrassInstrument: { if(item->BardValue > newbon->brassMod) newbon->brassMod = item->BardValue; break; } - case EQEmu::item::ItemTypePercussionInstrument: + case EQ::item::ItemTypePercussionInstrument: { if(item->BardValue > newbon->percussionMod) newbon->percussionMod = item->BardValue; @@ -9016,7 +9016,7 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b } } - if (item->SkillModValue != 0 && item->SkillModType <= EQEmu::skills::HIGHEST_SKILL){ + if (item->SkillModValue != 0 && item->SkillModType <= EQ::skills::HIGHEST_SKILL){ if ((item->SkillModValue > 0 && newbon->skillmod[item->SkillModType] < item->SkillModValue) || (item->SkillModValue < 0 && newbon->skillmod[item->SkillModType] > item->SkillModValue)) { @@ -9024,7 +9024,7 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b } } - if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQEmu::skills::HIGHEST_SKILL) { + if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQ::skills::HIGHEST_SKILL) { if((newbon->SkillDamageAmount[item->ExtraDmgSkill] + item->ExtraDmgAmt) > RuleI(Character, ItemExtraDmgCap)) newbon->SkillDamageAmount[item->ExtraDmgSkill] = RuleI(Character, ItemExtraDmgCap); else @@ -9033,7 +9033,7 @@ void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, b if (!isAug) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) AddItemBonuses(inst->GetAugment(i),newbon,true, false, rec_level); } @@ -9079,8 +9079,8 @@ void Bot::CalcBotStats(bool showtext) { if(GetBotOwner()->GetLevel() != GetLevel()) SetLevel(GetBotOwner()->GetLevel()); - for (int sindex = 0; sindex <= EQEmu::skills::HIGHEST_SKILL; ++sindex) { - skills[sindex] = database.GetSkillCap(GetClass(), (EQEmu::skills::SkillType)sindex, GetLevel()); + for (int sindex = 0; sindex <= EQ::skills::HIGHEST_SKILL; ++sindex) { + skills[sindex] = database.GetSkillCap(GetClass(), (EQ::skills::SkillType)sindex, GetLevel()); } taunt_timer.Start(1000); @@ -9099,7 +9099,7 @@ void Bot::CalcBotStats(bool showtext) { // Test Code if(GetClass() == BARD) GetBotOwner()->Message(Chat::Yellow, "Bard Skills-- Brass: %i, Percussion: %i, Singing: %i, Stringed: %i, Wind: %i", - GetSkill(EQEmu::skills::SkillBrassInstruments), GetSkill(EQEmu::skills::SkillPercussionInstruments), GetSkill(EQEmu::skills::SkillSinging), GetSkill(EQEmu::skills::SkillStringedInstruments), GetSkill(EQEmu::skills::SkillWindInstruments)); + GetSkill(EQ::skills::SkillBrassInstruments), GetSkill(EQ::skills::SkillPercussionInstruments), GetSkill(EQ::skills::SkillSinging), GetSkill(EQ::skills::SkillStringedInstruments), GetSkill(EQ::skills::SkillWindInstruments)); } //if(this->Save()) @@ -9118,17 +9118,17 @@ void Bot::CalcBotStats(bool showtext) { // Test Code if(GetClass() == BARD) { GetBotOwner()->Message(Chat::Yellow, "Bard Skills-- Brass: %i, Percussion: %i, Singing: %i, Stringed: %i, Wind: %i", - GetSkill(EQEmu::skills::SkillBrassInstruments) + GetBrassMod(), - GetSkill(EQEmu::skills::SkillPercussionInstruments) + GetPercMod(), - GetSkill(EQEmu::skills::SkillSinging) + GetSingMod(), - GetSkill(EQEmu::skills::SkillStringedInstruments) + GetStringMod(), - GetSkill(EQEmu::skills::SkillWindInstruments) + GetWindMod()); + GetSkill(EQ::skills::SkillBrassInstruments) + GetBrassMod(), + GetSkill(EQ::skills::SkillPercussionInstruments) + GetPercMod(), + GetSkill(EQ::skills::SkillSinging) + GetSingMod(), + GetSkill(EQ::skills::SkillStringedInstruments) + GetStringMod(), + GetSkill(EQ::skills::SkillWindInstruments) + GetWindMod()); GetBotOwner()->Message(Chat::Yellow, "Bard Skill Mods-- Brass: %i, Percussion: %i, Singing: %i, Stringed: %i, Wind: %i", GetBrassMod(), GetPercMod(), GetSingMod(), GetStringMod(), GetWindMod()); } } } -bool Bot::CheckLoreConflict(const EQEmu::ItemData* item) { +bool Bot::CheckLoreConflict(const EQ::ItemData* item) { if (!item || !(item->LoreFlag)) return false; @@ -9195,16 +9195,16 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl Group *g = caster->GetGroup(); float hpRatioToHeal = 25.0f; switch(caster->GetBotStance()) { - case EQEmu::constants::stanceReactive: - case EQEmu::constants::stanceBalanced: + case EQ::constants::stanceReactive: + case EQ::constants::stanceBalanced: hpRatioToHeal = 50.0f; break; - case EQEmu::constants::stanceBurn: - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurn: + case EQ::constants::stanceBurnAE: hpRatioToHeal = 20.0f; break; - case EQEmu::constants::stanceAggressive: - case EQEmu::constants::stanceEfficient: + case EQ::constants::stanceAggressive: + case EQ::constants::stanceEfficient: default: hpRatioToHeal = 25.0f; break; @@ -9601,12 +9601,12 @@ uint8 Bot::GetNumberNeedingHealedInGroup(uint8 hpr, bool includePets) { int Bot::GetRawACNoShield(int &shield_ac) { int ac = itembonuses.AC + spellbonuses.AC; shield_ac = 0; - EQEmu::ItemInstance* inst = GetBotItem(EQEmu::invslot::slotSecondary); + EQ::ItemInstance* inst = GetBotItem(EQ::invslot::slotSecondary); if(inst) { - if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) { + if (inst->GetItem()->ItemType == EQ::item::ItemTypeShield) { ac -= inst->GetItem()->AC; shield_ac = inst->GetItem()->AC; - for (uint8 i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (uint8 i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if(inst->GetAugment(i)) { ac -= inst->GetAugment(i)->GetItem()->AC; shield_ac += inst->GetAugment(i)->GetItem()->AC; @@ -9618,10 +9618,10 @@ int Bot::GetRawACNoShield(int &shield_ac) { } uint32 Bot::CalcCurrentWeight() { - const EQEmu::ItemData* TempItem = nullptr; - EQEmu::ItemInstance* inst = nullptr; + const EQ::ItemData* TempItem = nullptr; + EQ::ItemInstance* inst = nullptr; uint32 Total = 0; - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { inst = GetBotItem(i); if(inst) { TempItem = inst->GetItem(); @@ -9794,11 +9794,11 @@ bool Bot::HasOrMayGetAggro() { } void Bot::SetDefaultBotStance() { - EQEmu::constants::StanceType defaultStance = EQEmu::constants::stanceBalanced; + EQ::constants::StanceType defaultStance = EQ::constants::stanceBalanced; if (GetClass() == WARRIOR) - defaultStance = EQEmu::constants::stanceAggressive; + defaultStance = EQ::constants::stanceAggressive; - _baseBotStance = EQEmu::constants::stancePassive; + _baseBotStance = EQ::constants::stancePassive; _botStance = defaultStance; } @@ -9847,7 +9847,7 @@ bool Bot::UseDiscipline(uint32 spell_id, uint32 target) { if(IsCasting()) InterruptSpell(); - CastSpell(spell_id, target, EQEmu::spells::CastingSlot::Discipline); + CastSpell(spell_id, target, EQ::spells::CastingSlot::Discipline); return true; } @@ -10011,9 +10011,9 @@ bool Bot::DyeArmor(int16 slot_id, uint32 rgb, bool all_flag, bool save_flag) if (slot_id != INVALID_INDEX) return false; - for (uint8 i = EQEmu::textures::textureBegin; i < EQEmu::textures::weaponPrimary; ++i) { - uint8 inv_slot = EQEmu::InventoryProfile::CalcSlotFromMaterial(i); - EQEmu::ItemInstance* inst = m_inv.GetItem(inv_slot); + for (uint8 i = EQ::textures::textureBegin; i < EQ::textures::weaponPrimary; ++i) { + uint8 inv_slot = EQ::InventoryProfile::CalcSlotFromMaterial(i); + EQ::ItemInstance* inst = m_inv.GetItem(inv_slot); if (!inst) continue; @@ -10022,11 +10022,11 @@ bool Bot::DyeArmor(int16 slot_id, uint32 rgb, bool all_flag, bool save_flag) } } else { - uint8 mat_slot = EQEmu::InventoryProfile::CalcMaterialFromSlot(slot_id); - if (mat_slot == EQEmu::textures::materialInvalid || mat_slot >= EQEmu::textures::weaponPrimary) + uint8 mat_slot = EQ::InventoryProfile::CalcMaterialFromSlot(slot_id); + if (mat_slot == EQ::textures::materialInvalid || mat_slot >= EQ::textures::weaponPrimary) return false; - EQEmu::ItemInstance* inst = m_inv.GetItem(slot_id); + EQ::ItemInstance* inst = m_inv.GetItem(slot_id); if (!inst) return false; @@ -10061,8 +10061,8 @@ std::string Bot::CreateSayLink(Client* c, const char* message, const char* name) uint32 saylink_id = database.LoadSaylinkID(escaped_string); safe_delete_array(escaped_string); - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemData); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); linker.SetProxyItemID(SAYLINK_ITEM_ID); linker.SetProxyAugment1ID(saylink_id); linker.SetProxyText(name); @@ -10087,6 +10087,6 @@ void Bot::StopMoving(float new_heading) Mob::StopMoving(new_heading); } -uint8 Bot::spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQEmu::constants::STANCE_TYPE_COUNT][cntHSND] = { 0 }; +uint8 Bot::spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQ::constants::STANCE_TYPE_COUNT][cntHSND] = { 0 }; #endif diff --git a/zone/bot.h b/zone/bot.h index b456fd77f..f81a3abdf 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -144,9 +144,9 @@ public: Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double totalPlayTime, uint32 lastZoneId, NPCType *npcTypeData); //abstract virtual function implementations requird by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill); - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr); virtual bool HasRaid() { return (GetRaid() ? true : false); } virtual bool HasGroup() { return (GetGroup() ? true : false); } @@ -180,25 +180,25 @@ public: virtual int GetHandToHandDamage(void); virtual bool TryFinishingBlow(Mob *defender, int &damage); virtual void DoRiposte(Mob* defender); - inline virtual int32 GetATK() const { return ATK + itembonuses.ATK + spellbonuses.ATK + ((GetSTR() + GetSkill(EQEmu::skills::SkillOffense)) * 9 / 10); } + inline virtual int32 GetATK() const { return ATK + itembonuses.ATK + spellbonuses.ATK + ((GetSTR() + GetSkill(EQ::skills::SkillOffense)) * 9 / 10); } inline virtual int32 GetATKBonus() const { return itembonuses.ATK + spellbonuses.ATK; } uint32 GetTotalATK(); uint32 GetATKRating(); uint16 GetPrimarySkillValue(); - uint16 MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const; - inline uint16 MaxSkill(EQEmu::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } - virtual int GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target = nullptr); - virtual void DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 max_damage, int32 min_damage = 1, int32 hate_override = -1, int ReuseTime = 10, bool HitChance = false); + uint16 MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const; + inline uint16 MaxSkill(EQ::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } + virtual int GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target = nullptr); + virtual void DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 max_damage, int32 min_damage = 1, int32 hate_override = -1, int ReuseTime = 10, bool HitChance = false); virtual void TryBackstab(Mob *other,int ReuseTime = 10); virtual void RogueBackstab(Mob* other, bool min_damage = false, int ReuseTime = 10); virtual void RogueAssassinate(Mob* other); virtual void DoClassAttacks(Mob *target, bool IsRiposte=false); - virtual void ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int32 &mindmg); + virtual void ApplySpecialAttackMod(EQ::skills::SkillType skill, int32 &dmg, int32 &mindmg); bool CanDoSpecialAttack(Mob *other); virtual int32 CheckAggroAmount(uint16 spellid); virtual void CalcBonuses(); void CalcItemBonuses(StatBonuses* newbon); - void AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0); + void AddItemBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0); int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); virtual void MakePet(uint16 spell_id, const char* pettype, const char *petname = nullptr); virtual FACTION_VALUE GetReverseFactionCon(Mob* iOther); @@ -212,9 +212,9 @@ public: virtual void SetAttackTimer(); uint32 GetClassHPFactor(); virtual int32 CalcMaxHP(); - bool DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool &stopLogic); - bool DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool &stopLogic); - bool DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQEmu::spells::CastingSlot slot, bool &stopLogic); + bool DoFinishedSpellAETarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); + bool DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); + bool DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQ::spells::CastingSlot slot, bool &stopLogic); void SendBotArcheryWearChange(uint8 material_slot, uint32 material, uint32 color); void Camp(bool databaseSave = true); virtual void AddToHateList(Mob* other, uint32 hate = 0, int32 damage = 0, bool iYellForHelp = true, bool bFrenzy = false, bool iBuffTic = false, bool pet_command = false); @@ -336,20 +336,20 @@ public: virtual float GetAOERange(uint16 spell_id); virtual bool SpellEffect(Mob* caster, uint16 spell_id, float partial = 100); virtual void DoBuffTic(const Buffs_Struct &buff, int slot, Mob* caster = nullptr); - virtual bool CastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot = EQEmu::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, + virtual bool CastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot = EQ::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, int16 *resist_adjust = nullptr, uint32 aa_id = 0); virtual bool SpellOnTarget(uint16 spell_id, Mob* spelltar); virtual bool IsImmuneToSpell(uint16 spell_id, Mob *caster); - virtual bool DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction, EQEmu::spells::CastingSlot slot); - virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot = EQEmu::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0); + virtual bool DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, CastAction_type &CastAction, EQ::spells::CastingSlot slot); + virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot = EQ::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0); // Bot Equipment & Inventory Class Methods - void BotTradeSwapItem(Client* client, int16 lootSlot, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap = true); - void BotTradeAddItem(uint32 id, const EQEmu::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb = true); + void BotTradeSwapItem(Client* client, int16 lootSlot, const EQ::ItemInstance* inst, const EQ::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap = true); + void BotTradeAddItem(uint32 id, const EQ::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb = true); void EquipBot(std::string* errorMessage); - bool CheckLoreConflict(const EQEmu::ItemData* item); - virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); } - const EQEmu::InventoryProfile& GetBotInv() const { return m_inv; } + bool CheckLoreConflict(const EQ::ItemData* item); + virtual void UpdateEquipmentLight() { m_Light.Type[EQ::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } + const EQ::InventoryProfile& GetBotInv() const { return m_inv; } // Static Class Methods //static void DestroyBotRaidObjects(Client* client); // Can be removed after bot raids are dumped @@ -419,7 +419,7 @@ public: uint32 GetBotSpellID() { return npc_spells_id; } Mob* GetBotOwner() { return this->_botOwner; } uint32 GetBotArcheryRange(); - EQEmu::ItemInstance* GetBotItem(uint32 slotID); + EQ::ItemInstance* GetBotItem(uint32 slotID); virtual bool GetSpawnStatus() { return _spawnStatus; } uint8 GetPetChooserID() { return _petChooserID; } bool IsPetChooser() { return _petChooser; } @@ -428,7 +428,7 @@ public: virtual bool IsBot() const { return true; } bool GetRangerAutoWeaponSelect() { return _rangerAutoWeaponSelect; } BotRoleType GetBotRole() { return _botRole; } - EQEmu::constants::StanceType GetBotStance() { return _botStance; } + EQ::constants::StanceType GetBotStance() { return _botStance; } uint8 GetChanceToCastBySpellType(uint32 spellType); bool IsGroupHealer() { return m_CastingRoles.GroupHealer; } @@ -542,11 +542,11 @@ public: // void SetBotOwnerCharacterID(uint32 botOwnerCharacterID) { _botOwnerCharacterID = botOwnerCharacterID; } void SetRangerAutoWeaponSelect(bool enable) { GetClass() == RANGER ? _rangerAutoWeaponSelect = enable : _rangerAutoWeaponSelect = false; } void SetBotRole(BotRoleType botRole) { _botRole = botRole; } - void SetBotStance(EQEmu::constants::StanceType botStance) { - if (botStance >= EQEmu::constants::stancePassive && botStance <= EQEmu::constants::stanceBurnAE) + void SetBotStance(EQ::constants::StanceType botStance) { + if (botStance >= EQ::constants::stancePassive && botStance <= EQ::constants::stanceBurnAE) _botStance = botStance; else - _botStance = EQEmu::constants::stancePassive; + _botStance = EQ::constants::stancePassive; } void SetSpellRecastTimer(int timer_index, int32 recast_delay); void SetDisciplineRecastTimer(int timer_index, int32 recast_delay); @@ -631,7 +631,7 @@ private: bool _petChooser; uint8 _petChooserID; bool berserk; - EQEmu::InventoryProfile m_inv; + EQ::InventoryProfile m_inv; double _lastTotalPlayTime; time_t _startTotalPlayTime; Mob* _previousTarget; @@ -644,8 +644,8 @@ private: uint32 _lastZoneId; bool _rangerAutoWeaponSelect; BotRoleType _botRole; - EQEmu::constants::StanceType _botStance; - EQEmu::constants::StanceType _baseBotStance; + EQ::constants::StanceType _botStance; + EQ::constants::StanceType _baseBotStance; unsigned int RestRegenHP; unsigned int RestRegenMana; unsigned int RestRegenEndurance; @@ -717,7 +717,7 @@ private: void SetReturningFlag(bool flag = true) { m_returning_flag = flag; } // Private "Inventory" Methods - void GetBotItems(EQEmu::InventoryProfile &inv, std::string* errorMessage); + void GetBotItems(EQ::InventoryProfile &inv, std::string* errorMessage); void BotAddEquipItem(int slot, uint32 id); uint32 GetBotItemBySlot(uint32 slotID); @@ -727,7 +727,7 @@ private: bool DeletePet(); public: - static uint8 spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQEmu::constants::STANCE_TYPE_COUNT][cntHSND]; + static uint8 spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQ::constants::STANCE_TYPE_COUNT][cntHSND]; }; #endif // BOTS diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index 9c202fed8..7d5f918fd 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -338,11 +338,11 @@ public: while (spells[spell_id].typedescnum == 27) { if (!spells[spell_id].goodEffect) break; - if (spells[spell_id].skill != EQEmu::skills::SkillOffense && spells[spell_id].skill != EQEmu::skills::SkillDefense) + if (spells[spell_id].skill != EQ::skills::SkillOffense && spells[spell_id].skill != EQ::skills::SkillDefense) break; entry_prototype = new STStanceEntry(); - if (spells[spell_id].skill == EQEmu::skills::SkillOffense) + if (spells[spell_id].skill == EQ::skills::SkillOffense) entry_prototype->SafeCastToStance()->stance_type = BCEnum::StT_Aggressive; else entry_prototype->SafeCastToStance()->stance_type = BCEnum::StT_Defensive; @@ -2462,7 +2462,7 @@ namespace ActionableBots sbl.remove_if([bot_owner](Bot* l) { return (!l->IsBotArcher()); }); } - static void Filter_ByHighestSkill(Client* bot_owner, std::list& sbl, EQEmu::skills::SkillType skill_type, float& skill_value) { + static void Filter_ByHighestSkill(Client* bot_owner, std::list& sbl, EQ::skills::SkillType skill_type, float& skill_value) { sbl.remove_if([bot_owner](Bot* l) { return (!MyBots::IsMyBot(bot_owner, l)); }); skill_value = 0.0f; @@ -2474,8 +2474,8 @@ namespace ActionableBots continue; mod_skill_value = base_skill_value; - for (int16 index = EQEmu::invslot::EQUIPMENT_BEGIN; index <= EQEmu::invslot::EQUIPMENT_END; ++index) { - const EQEmu::ItemInstance* indexed_item = bot_iter->GetBotItem(index); + for (int16 index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; ++index) { + const EQ::ItemInstance* indexed_item = bot_iter->GetBotItem(index); if (indexed_item && indexed_item->GetItem()->SkillModType == skill_type) mod_skill_value += (base_skill_value * (((float)indexed_item->GetItem()->SkillModValue) / 100.0f)); } @@ -2499,7 +2499,7 @@ namespace ActionableBots sbl.remove_if([bot_owner](const Bot* l) { return (l->GetClass() == ROGUE && l->GetLevel() < 5); }); sbl.remove_if([bot_owner](const Bot* l) { return (l->GetClass() == BARD && l->GetLevel() < 40); }); - ActionableBots::Filter_ByHighestSkill(bot_owner, sbl, EQEmu::skills::SkillPickLock, pick_lock_value); + ActionableBots::Filter_ByHighestSkill(bot_owner, sbl, EQ::skills::SkillPickLock, pick_lock_value); } }; @@ -2611,7 +2611,7 @@ void bot_command_apply_poison(Client *c, const Seperator *sep) return; } - const auto poison_instance = c->GetInv().GetItem(EQEmu::invslot::slotCursor); + const auto poison_instance = c->GetInv().GetItem(EQ::invslot::slotCursor); if (!poison_instance) { c->Message(m_fail, "No item found on cursor!"); @@ -2625,7 +2625,7 @@ void bot_command_apply_poison(Client *c, const Seperator *sep) return; } - if (poison_data->ItemType == EQEmu::item::ItemTypePoison) { + if (poison_data->ItemType == EQ::item::ItemTypePoison) { if ((~poison_data->Races) & GetPlayerRaceBit(my_rogue_bot->GetRace())) { @@ -2654,7 +2654,7 @@ void bot_command_apply_poison(Client *c, const Seperator *sep) c->Message(m_fail, "Failed to apply %s to %s's weapon.", poison_data->Name, my_rogue_bot->GetCleanName()); } - c->DeleteItemInInventory(EQEmu::invslot::slotCursor, 1, true); + c->DeleteItemInInventory(EQ::invslot::slotCursor, 1, true); } else { @@ -2687,7 +2687,7 @@ void bot_command_apply_potion(Client* c, const Seperator* sep) return; } - const auto potion_instance = c->GetInv().GetItem(EQEmu::invslot::slotCursor); + const auto potion_instance = c->GetInv().GetItem(EQ::invslot::slotCursor); if (!potion_instance) { c->Message(m_fail, "No item found on cursor!"); @@ -2701,7 +2701,7 @@ void bot_command_apply_potion(Client* c, const Seperator* sep) return; } - if (potion_data->ItemType == EQEmu::item::ItemTypePotion && potion_data->Click.Effect > 0) { + if (potion_data->ItemType == EQ::item::ItemTypePotion && potion_data->Click.Effect > 0) { if (RuleB(Bots, RestrictApplyPotionToRogue) && potion_data->Classes != PLAYER_CLASS_ROGUE_BIT) { @@ -2726,14 +2726,14 @@ void bot_command_apply_potion(Client* c, const Seperator* sep) } // TODO: figure out best way to handle casting time/animation - if (my_bot->SpellFinished(potion_data->Click.Effect, my_bot, EQEmu::spells::CastingSlot::Item, 0)) { + if (my_bot->SpellFinished(potion_data->Click.Effect, my_bot, EQ::spells::CastingSlot::Item, 0)) { c->Message(m_action, "Successfully applied %s to %s's buff effects.", potion_data->Name, my_bot->GetCleanName()); } else { c->Message(m_fail, "Failed to apply %s to %s's buff effects.", potion_data->Name, my_bot->GetCleanName()); } - c->DeleteItemInInventory(EQEmu::invslot::slotCursor, 1, true); + c->DeleteItemInInventory(EQ::invslot::slotCursor, 1, true); } else { @@ -2776,7 +2776,7 @@ void bot_command_attack(Client *c, const Seperator *sep) sbl.remove(nullptr); for (auto bot_iter : sbl) { - if (bot_iter->GetAppearance() != eaDead && bot_iter->GetBotStance() != EQEmu::constants::stancePassive) { + if (bot_iter->GetAppearance() != eaDead && bot_iter->GetBotStance() != EQ::constants::stancePassive) { if (!first_attacker) { first_attacker = bot_iter; @@ -3599,7 +3599,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) empty_only = true; } - const auto item_instance = c->GetInv().GetItem(EQEmu::invslot::slotCursor); + const auto item_instance = c->GetInv().GetItem(EQ::invslot::slotCursor); if (!item_instance) { c->Message(m_fail, "No item found on cursor!"); @@ -3613,14 +3613,14 @@ void bot_command_item_use(Client* c, const Seperator* sep) return; } - if (item_data->ItemClass != EQEmu::item::ItemClassCommon || item_data->Slots == 0) { + if (item_data->ItemClass != EQ::item::ItemClassCommon || item_data->Slots == 0) { c->Message(m_fail, "'%s' is not an equipable item!", item_data->Name); return; } std::list equipable_slot_list; - for (int16 equipable_slot = EQEmu::invslot::EQUIPMENT_BEGIN; equipable_slot <= EQEmu::invslot::EQUIPMENT_END; ++equipable_slot) { + for (int16 equipable_slot = EQ::invslot::EQUIPMENT_BEGIN; equipable_slot <= EQ::invslot::EQUIPMENT_END; ++equipable_slot) { if (item_data->Slots & (1 << equipable_slot)) { equipable_slot_list.push_back(equipable_slot); } @@ -3629,8 +3629,8 @@ void bot_command_item_use(Client* c, const Seperator* sep) std::string msg; std::string text_link; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); std::list sbl; MyBots::PopulateSBL_BySpawnedBots(c, sbl); @@ -3651,7 +3651,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) for (auto slot_iter : equipable_slot_list) { // needs more failure criteria - this should cover the bulk for now - if (slot_iter == EQEmu::invslot::slotSecondary && item_data->Damage && !bot_iter->CanThisClassDualWield()) { + if (slot_iter == EQ::invslot::slotSecondary && item_data->Damage && !bot_iter->CanThisClassDualWield()) { continue; } @@ -3665,7 +3665,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) Chat::Say, "[%s] says, 'I can use that for my %s! (replaces: [%s])'", text_link.c_str(), - EQEmu::invslot::GetInvPossessionsSlotName(slot_iter), + EQ::invslot::GetInvPossessionsSlotName(slot_iter), linker.GenerateLink().c_str() ); bot_iter->DoAnim(29); @@ -3676,7 +3676,7 @@ void bot_command_item_use(Client* c, const Seperator* sep) Chat::Say, "[%s] says, 'I can use that for my %s!'", text_link.c_str(), - EQEmu::invslot::GetInvPossessionsSlotName(slot_iter) + EQ::invslot::GetInvPossessionsSlotName(slot_iter) ); bot_iter->DoAnim(29); } @@ -4307,7 +4307,7 @@ void bot_command_pull(Client *c, const Seperator *sep) Bot* bot_puller = nullptr; for (auto bot_iter : sbl) { - if (bot_iter->GetAppearance() == eaDead || bot_iter->GetBotStance() == EQEmu::constants::stancePassive) { + if (bot_iter->GetAppearance() == eaDead || bot_iter->GetBotStance() == EQ::constants::stancePassive) { continue; } @@ -4774,7 +4774,7 @@ void bot_command_taunt(Client *c, const Seperator *sep) int taunting_count = 0; for (auto bot_iter : sbl) { - if (!bot_iter->GetSkill(EQEmu::skills::SkillTaunt)) + if (!bot_iter->GetSkill(EQ::skills::SkillTaunt)) continue; if (toggle_taunt) @@ -5094,7 +5094,7 @@ void bot_subcommand_bot_clone(Client *c, const Seperator *sep) return; } - int clone_stance = EQEmu::constants::stancePassive; + int clone_stance = EQ::constants::stancePassive; if (!database.botdb.LoadStance(my_bot->GetBotID(), clone_stance)) c->Message(m_fail, "%s for bot '%s'", BotDatabase::fail::LoadStance(), my_bot->GetCleanName()); if (!database.botdb.SaveStance(clone_id, clone_stance)) @@ -5298,7 +5298,7 @@ void bot_subcommand_bot_dye_armor(Client *c, const Seperator *sep) // TODO: Trouble-shoot model update issue const std::string msg_matslot = StringFormat("mat_slot: %c(All), %i(Head), %i(Chest), %i(Arms), %i(Wrists), %i(Hands), %i(Legs), %i(Feet)", - '*', EQEmu::textures::armorHead, EQEmu::textures::armorChest, EQEmu::textures::armorArms, EQEmu::textures::armorWrist, EQEmu::textures::armorHands, EQEmu::textures::armorLegs, EQEmu::textures::armorFeet); + '*', EQ::textures::armorHead, EQ::textures::armorChest, EQ::textures::armorArms, EQ::textures::armorWrist, EQ::textures::armorHands, EQ::textures::armorLegs, EQ::textures::armorFeet); if (helper_command_alias_fail(c, "bot_subcommand_bot_dye_armor", sep->arg[0], "botdyearmor")) return; @@ -5309,15 +5309,15 @@ void bot_subcommand_bot_dye_armor(Client *c, const Seperator *sep) } const int ab_mask = ActionableBots::ABM_NoFilter; - uint8 material_slot = EQEmu::textures::materialInvalid; + uint8 material_slot = EQ::textures::materialInvalid; int16 slot_id = INVALID_INDEX; bool dye_all = (sep->arg[1][0] == '*'); if (!dye_all) { material_slot = atoi(sep->arg[1]); - slot_id = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + slot_id = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); - if (!sep->IsNumber(1) || slot_id == INVALID_INDEX || material_slot > EQEmu::textures::LastTintableTexture) { + if (!sep->IsNumber(1) || slot_id == INVALID_INDEX || material_slot > EQ::textures::LastTintableTexture) { c->Message(m_fail, "Valid [mat_slot]s for this command are:"); c->Message(m_fail, msg_matslot.c_str()); return; @@ -5654,7 +5654,7 @@ void bot_subcommand_bot_inspect_message(Client *c, const Seperator *sep) if (helper_is_help_or_usage(sep->arg[1])) { c->Message(m_usage, "usage: %s [set | clear] ([actionable: target | byname | ownergroup | botgroup | targetgroup | namesgroup | healrotation | spawned] ([actionable_name]))", sep->arg[0]); c->Message(m_note, "Notes:"); - if (c->ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (c->ClientVersion() >= EQ::versions::ClientVersion::SoF) { c->Message(m_message, "- Self-inspect and type your bot's inspect message"); c->Message(m_message, "- Close the self-inspect window to update the server"); c->Message(m_message, "- Type '%s set' to set the bot's inspect message", sep->arg[0]); @@ -5799,7 +5799,7 @@ void bot_subcommand_bot_list(Client *c, const Seperator *sep) Bot * botCheckNotOnline = entity_list.GetBotByBotName(bots_iter.Name); std::string botspawn_saylink = StringFormat("^botspawn %s", bots_iter.Name); c->Message(Chat::White, "[%s] is a level %u %s %s %s who is owned by %s", - ((c->CharacterID() == bots_iter.Owner_ID) && (!botCheckNotOnline) ? (EQEmu::SayLinkEngine::GenerateQuestSaylink(botspawn_saylink, false, bots_iter.Name).c_str()) : (bots_iter.Name)), + ((c->CharacterID() == bots_iter.Owner_ID) && (!botCheckNotOnline) ? (EQ::SayLinkEngine::GenerateQuestSaylink(botspawn_saylink, false, bots_iter.Name).c_str()) : (bots_iter.Name)), bots_iter.Level, Bot::RaceIdToString(bots_iter.Race).c_str(), ((bots_iter.Gender == FEMALE) ? ("Female") : ((bots_iter.Gender == MALE) ? ("Male") : ("Neuter"))), @@ -6127,32 +6127,32 @@ void bot_subcommand_bot_stance(Client *c, const Seperator *sep) if (helper_is_help_or_usage(sep->arg[1])) { c->Message(m_usage, "usage: %s [current | value: 1-9] ([actionable: target | byname] ([actionable_name]))", sep->arg[0]); c->Message(m_note, "value: %u(%s), %u(%s), %u(%s), %u(%s), %u(%s), %u(%s), %u(%s)", - EQEmu::constants::stancePassive, EQEmu::constants::GetStanceName(EQEmu::constants::stancePassive), - EQEmu::constants::stanceBalanced, EQEmu::constants::GetStanceName(EQEmu::constants::stanceBalanced), - EQEmu::constants::stanceEfficient, EQEmu::constants::GetStanceName(EQEmu::constants::stanceEfficient), - EQEmu::constants::stanceReactive, EQEmu::constants::GetStanceName(EQEmu::constants::stanceReactive), - EQEmu::constants::stanceAggressive, EQEmu::constants::GetStanceName(EQEmu::constants::stanceAggressive), - EQEmu::constants::stanceAssist, EQEmu::constants::GetStanceName(EQEmu::constants::stanceAssist), - EQEmu::constants::stanceBurn, EQEmu::constants::GetStanceName(EQEmu::constants::stanceBurn), - EQEmu::constants::stanceEfficient2, EQEmu::constants::GetStanceName(EQEmu::constants::stanceEfficient2), - EQEmu::constants::stanceBurnAE, EQEmu::constants::GetStanceName(EQEmu::constants::stanceBurnAE) + EQ::constants::stancePassive, EQ::constants::GetStanceName(EQ::constants::stancePassive), + EQ::constants::stanceBalanced, EQ::constants::GetStanceName(EQ::constants::stanceBalanced), + EQ::constants::stanceEfficient, EQ::constants::GetStanceName(EQ::constants::stanceEfficient), + EQ::constants::stanceReactive, EQ::constants::GetStanceName(EQ::constants::stanceReactive), + EQ::constants::stanceAggressive, EQ::constants::GetStanceName(EQ::constants::stanceAggressive), + EQ::constants::stanceAssist, EQ::constants::GetStanceName(EQ::constants::stanceAssist), + EQ::constants::stanceBurn, EQ::constants::GetStanceName(EQ::constants::stanceBurn), + EQ::constants::stanceEfficient2, EQ::constants::GetStanceName(EQ::constants::stanceEfficient2), + EQ::constants::stanceBurnAE, EQ::constants::GetStanceName(EQ::constants::stanceBurnAE) ); return; } int ab_mask = (ActionableBots::ABM_Target | ActionableBots::ABM_ByName); bool current_flag = false; - auto bst = EQEmu::constants::stanceUnknown; + auto bst = EQ::constants::stanceUnknown; if (!strcasecmp(sep->arg[1], "current")) current_flag = true; else if (sep->IsNumber(1)) { - bst = (EQEmu::constants::StanceType)atoi(sep->arg[1]); - if (bst < EQEmu::constants::stanceUnknown || bst > EQEmu::constants::stanceBurnAE) - bst = EQEmu::constants::stanceUnknown; + bst = (EQ::constants::StanceType)atoi(sep->arg[1]); + if (bst < EQ::constants::stanceUnknown || bst > EQ::constants::stanceBurnAE) + bst = EQ::constants::stanceUnknown; } - if (!current_flag && bst == EQEmu::constants::stanceUnknown) { + if (!current_flag && bst == EQ::constants::stanceUnknown) { c->Message(m_fail, "A [current] argument or valid numeric [value] is required to use this command"); return; } @@ -6173,7 +6173,7 @@ void bot_subcommand_bot_stance(Client *c, const Seperator *sep) Bot::BotGroupSay( bot_iter, "My current stance is '%s' (%i)", - EQEmu::constants::GetStanceName(bot_iter->GetBotStance()), + EQ::constants::GetStanceName(bot_iter->GetBotStance()), bot_iter->GetBotStance() ); } @@ -8181,31 +8181,31 @@ void bot_subcommand_inventory_list(Client *c, const Seperator *sep) return; } - const EQEmu::ItemInstance* inst = nullptr; - const EQEmu::ItemData* item = nullptr; + const EQ::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; bool is2Hweapon = false; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); uint32 inventory_count = 0; - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { - if ((i == EQEmu::invslot::slotSecondary) && is2Hweapon) + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { + if ((i == EQ::invslot::slotSecondary) && is2Hweapon) continue; inst = my_bot->CastToBot()->GetBotItem(i); if (!inst || !inst->GetItem()) { - c->Message(m_message, "I need something for my %s (slot %i)", EQEmu::invslot::GetInvPossessionsSlotName(i), i); + c->Message(m_message, "I need something for my %s (slot %i)", EQ::invslot::GetInvPossessionsSlotName(i), i); continue; } item = inst->GetItem(); - if ((i == EQEmu::invslot::slotPrimary) && item->IsType2HWeapon()) { + if ((i == EQ::invslot::slotPrimary) && item->IsType2HWeapon()) { is2Hweapon = true; } linker.SetItemInst(inst); - c->Message(m_message, "Using %s in my %s (slot %i)", linker.GenerateLink().c_str(), EQEmu::invslot::GetInvPossessionsSlotName(i), i); + c->Message(m_message, "Using %s in my %s (slot %i)", linker.GenerateLink().c_str(), EQ::invslot::GetInvPossessionsSlotName(i), i); ++inventory_count; } @@ -8244,13 +8244,13 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep) } int slotId = atoi(sep->arg[1]); - if (!sep->IsNumber(1) || (slotId > EQEmu::invslot::EQUIPMENT_END || slotId < EQEmu::invslot::EQUIPMENT_BEGIN)) { + if (!sep->IsNumber(1) || (slotId > EQ::invslot::EQUIPMENT_END || slotId < EQ::invslot::EQUIPMENT_BEGIN)) { c->Message(m_fail, "Valid slots are 0-22"); return; } - const EQEmu::ItemData* itm = nullptr; - const EQEmu::ItemInstance* itminst = my_bot->GetBotItem(slotId); + const EQ::ItemData* itm = nullptr; + const EQ::ItemInstance* itminst = my_bot->GetBotItem(slotId); if (itminst) itm = itminst->GetItem(); @@ -8259,11 +8259,11 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep) return; } - for (int m = EQEmu::invaug::SOCKET_BEGIN; m <= EQEmu::invaug::SOCKET_END; ++m) { + for (int m = EQ::invaug::SOCKET_BEGIN; m <= EQ::invaug::SOCKET_END; ++m) { if (!itminst) break; - EQEmu::ItemInstance *itma = itminst->GetAugment(m); + EQ::ItemInstance *itma = itminst->GetAugment(m); if (!itma) continue; if (!c->CheckLoreConflict(itma->GetItem())) @@ -8276,7 +8276,7 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep) std::string error_message; if (itm) { c->PushItemOnCursor(*itminst, true); - if ((slotId == EQEmu::invslot::slotRange) || (slotId == EQEmu::invslot::slotAmmo) || (slotId == EQEmu::invslot::slotPrimary) || (slotId == EQEmu::invslot::slotSecondary)) + if ((slotId == EQ::invslot::slotRange) || (slotId == EQ::invslot::slotAmmo) || (slotId == EQ::invslot::slotPrimary) || (slotId == EQ::invslot::slotSecondary)) my_bot->SetBotArcher(false); my_bot->RemoveBotItemBySlot(slotId, &error_message); @@ -8290,32 +8290,32 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep) } switch (slotId) { - case EQEmu::invslot::slotCharm: - case EQEmu::invslot::slotEar1: - case EQEmu::invslot::slotHead: - case EQEmu::invslot::slotFace: - case EQEmu::invslot::slotEar2: - case EQEmu::invslot::slotNeck: - case EQEmu::invslot::slotBack: - case EQEmu::invslot::slotWrist1: - case EQEmu::invslot::slotWrist2: - case EQEmu::invslot::slotRange: - case EQEmu::invslot::slotPrimary: - case EQEmu::invslot::slotSecondary: - case EQEmu::invslot::slotFinger1: - case EQEmu::invslot::slotFinger2: - case EQEmu::invslot::slotChest: - case EQEmu::invslot::slotWaist: - case EQEmu::invslot::slotPowerSource: - case EQEmu::invslot::slotAmmo: - c->Message(m_message, "My %s is %s unequipped", EQEmu::invslot::GetInvPossessionsSlotName(slotId), ((itm) ? ("now") : ("already"))); + case EQ::invslot::slotCharm: + case EQ::invslot::slotEar1: + case EQ::invslot::slotHead: + case EQ::invslot::slotFace: + case EQ::invslot::slotEar2: + case EQ::invslot::slotNeck: + case EQ::invslot::slotBack: + case EQ::invslot::slotWrist1: + case EQ::invslot::slotWrist2: + case EQ::invslot::slotRange: + case EQ::invslot::slotPrimary: + case EQ::invslot::slotSecondary: + case EQ::invslot::slotFinger1: + case EQ::invslot::slotFinger2: + case EQ::invslot::slotChest: + case EQ::invslot::slotWaist: + case EQ::invslot::slotPowerSource: + case EQ::invslot::slotAmmo: + c->Message(m_message, "My %s is %s unequipped", EQ::invslot::GetInvPossessionsSlotName(slotId), ((itm) ? ("now") : ("already"))); break; - case EQEmu::invslot::slotShoulders: - case EQEmu::invslot::slotArms: - case EQEmu::invslot::slotHands: - case EQEmu::invslot::slotLegs: - case EQEmu::invslot::slotFeet: - c->Message(m_message, "My %s are %s unequipped", EQEmu::invslot::GetInvPossessionsSlotName(slotId), ((itm) ? ("now") : ("already"))); + case EQ::invslot::slotShoulders: + case EQ::invslot::slotArms: + case EQ::invslot::slotHands: + case EQ::invslot::slotLegs: + case EQ::invslot::slotFeet: + c->Message(m_message, "My %s are %s unequipped", EQ::invslot::GetInvPossessionsSlotName(slotId), ((itm) ? ("now") : ("already"))); break; default: c->Message(m_fail, "I'm soo confused..."); @@ -8348,17 +8348,17 @@ void bot_subcommand_inventory_window(Client *c, const Seperator *sep) std::string window_text; //std::string item_link; - //EQEmu::SayLinkEngine linker; - //linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + //EQ::SayLinkEngine linker; + //linker.SetLinkType(EQ::saylink::SayLinkItemInst); - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { - const EQEmu::ItemData* item = nullptr; - const EQEmu::ItemInstance* inst = my_bot->CastToBot()->GetBotItem(i); + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { + const EQ::ItemData* item = nullptr; + const EQ::ItemInstance* inst = my_bot->CastToBot()->GetBotItem(i); if (inst) item = inst->GetItem(); window_text.append(""); - window_text.append(EQEmu::invslot::GetInvPossessionsSlotName(i)); + window_text.append(EQ::invslot::GetInvPossessionsSlotName(i)); window_text.append(": "); if (item) { //window_text.append(""); @@ -8840,7 +8840,7 @@ bool helper_cast_standard_spell(Bot* casting_bot, Mob* target_mob, int spell_id, if (annouce_cast) Bot::BotGroupSay(casting_bot, "Attempting to cast '%s' on %s", spells[spell_id].name, target_mob->GetCleanName()); - return casting_bot->CastSpell(spell_id, target_mob->GetID(), EQEmu::spells::CastingSlot::Gem2, -1, -1, dont_root_before); + return casting_bot->CastSpell(spell_id, target_mob->GetID(), EQ::spells::CastingSlot::Gem2, -1, -1, dont_root_before); } bool helper_command_disabled(Client* bot_owner, bool rule_value, const char* command) diff --git a/zone/bot_database.cpp b/zone/bot_database.cpp index 28b5288e0..3f893dc17 100644 --- a/zone/bot_database.cpp +++ b/zone/bot_database.cpp @@ -145,7 +145,7 @@ bool BotDatabase::LoadBotSpellCastingChances() continue; --class_index; uint8 stance_index = atoi(row[2]); - if (stance_index >= EQEmu::constants::STANCE_TYPE_COUNT) + if (stance_index >= EQ::constants::STANCE_TYPE_COUNT) continue; for (uint8 conditional_index = nHSND; conditional_index < cntHSND; ++conditional_index) { @@ -914,7 +914,7 @@ bool BotDatabase::LoadStance(Bot* bot_inst, bool& stance_flag) return true; auto row = results.begin(); - bot_inst->SetBotStance((EQEmu::constants::StanceType)atoi(row[0])); + bot_inst->SetBotStance((EQ::constants::StanceType)atoi(row[0])); stance_flag = true; return true; @@ -1141,7 +1141,7 @@ bool BotDatabase::QueryInventoryCount(const uint32 bot_id, uint32& item_count) return true; } -bool BotDatabase::LoadItems(const uint32 bot_id, EQEmu::InventoryProfile& inventory_inst) +bool BotDatabase::LoadItems(const uint32 bot_id, EQ::InventoryProfile& inventory_inst) { if (!bot_id) return false; @@ -1176,13 +1176,13 @@ bool BotDatabase::LoadItems(const uint32 bot_id, EQEmu::InventoryProfile& invent for (auto row = results.begin(); row != results.end(); ++row) { int16 slot_id = atoi(row[0]); - if (slot_id < EQEmu::invslot::EQUIPMENT_BEGIN || slot_id > EQEmu::invslot::EQUIPMENT_END) + if (slot_id < EQ::invslot::EQUIPMENT_BEGIN || slot_id > EQ::invslot::EQUIPMENT_END) continue; uint32 item_id = atoi(row[1]); uint16 item_charges = (uint16)atoi(row[2]); - EQEmu::ItemInstance* item_inst = database.CreateItem( + EQ::ItemInstance* item_inst = database.CreateItem( item_id, item_charges, (uint32)atoul(row[9]), @@ -1211,7 +1211,7 @@ bool BotDatabase::LoadItems(const uint32 bot_id, EQEmu::InventoryProfile& invent if (item_inst->GetItem()->Attuneable) { if (atoi(row[4])) item_inst->SetAttuned(true); - else if (slot_id >= EQEmu::invslot::EQUIPMENT_BEGIN && slot_id <= EQEmu::invslot::EQUIPMENT_END) + else if (slot_id >= EQ::invslot::EQUIPMENT_BEGIN && slot_id <= EQ::invslot::EQUIPMENT_END) item_inst->SetAttuned(true); } @@ -1279,7 +1279,7 @@ bool BotDatabase::LoadItemBySlot(Bot* bot_inst) bool BotDatabase::LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint32& item_id) { - if (!bot_id || slot_id > EQEmu::invslot::EQUIPMENT_END) + if (!bot_id || slot_id > EQ::invslot::EQUIPMENT_END) return false; query = StringFormat("SELECT `item_id` FROM `bot_inventories` WHERE `bot_id` = '%i' AND `slot_id` = '%i' LIMIT 1", bot_id, slot_id); @@ -1295,9 +1295,9 @@ bool BotDatabase::LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint return true; } -bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEmu::ItemInstance* item_inst) +bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQ::ItemInstance* item_inst) { - if (!bot_inst || !bot_inst->GetBotID() || slot_id > EQEmu::invslot::EQUIPMENT_END) + if (!bot_inst || !bot_inst->GetBotID() || slot_id > EQ::invslot::EQUIPMENT_END) return false; if (!DeleteItemBySlot(bot_inst->GetBotID(), slot_id)) @@ -1306,8 +1306,8 @@ bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEm if (!item_inst || !item_inst->GetID()) return true; - uint32 augment_id[EQEmu::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; - for (int augment_iter = EQEmu::invaug::SOCKET_BEGIN; augment_iter <= EQEmu::invaug::SOCKET_END; ++augment_iter) + uint32 augment_id[EQ::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; + for (int augment_iter = EQ::invaug::SOCKET_BEGIN; augment_iter <= EQ::invaug::SOCKET_END; ++augment_iter) augment_id[augment_iter] = item_inst->GetAugmentItemID(augment_iter); uint16 item_charges = 0; @@ -1381,7 +1381,7 @@ bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEm bool BotDatabase::DeleteItemBySlot(const uint32 bot_id, const uint32 slot_id) { - if (!bot_id || slot_id > EQEmu::invslot::EQUIPMENT_END) + if (!bot_id || slot_id > EQ::invslot::EQUIPMENT_END) return false; query = StringFormat("DELETE FROM `bot_inventories` WHERE `bot_id` = '%u' AND `slot_id` = '%u'", bot_id, slot_id); @@ -1397,7 +1397,7 @@ bool BotDatabase::LoadEquipmentColor(const uint32 bot_id, const uint8 material_s if (!bot_id) return false; - int16 slot_id = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot_id); + int16 slot_id = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot_id); if (slot_id == INVALID_INDEX) return false; @@ -1420,12 +1420,12 @@ bool BotDatabase::SaveEquipmentColor(const uint32 bot_id, const int16 slot_id, c return false; bool all_flag = (slot_id == -2); - if ((slot_id < EQEmu::invslot::EQUIPMENT_BEGIN || slot_id > EQEmu::invslot::EQUIPMENT_END) && !all_flag) + if ((slot_id < EQ::invslot::EQUIPMENT_BEGIN || slot_id > EQ::invslot::EQUIPMENT_END) && !all_flag) return false; std::string where_clause; if (all_flag) - where_clause = StringFormat(" AND `slot_id` IN ('%u', '%u', '%u', '%u', '%u', '%u', '%u')", EQEmu::invslot::slotHead, EQEmu::invslot::slotArms, EQEmu::invslot::slotWrist1, EQEmu::invslot::slotHands, EQEmu::invslot::slotChest, EQEmu::invslot::slotLegs, EQEmu::invslot::slotFeet); + where_clause = StringFormat(" AND `slot_id` IN ('%u', '%u', '%u', '%u', '%u', '%u', '%u')", EQ::invslot::slotHead, EQ::invslot::slotArms, EQ::invslot::slotWrist1, EQ::invslot::slotHands, EQ::invslot::slotChest, EQ::invslot::slotLegs, EQ::invslot::slotFeet); else where_clause = StringFormat(" AND `slot_id` = '%u'", slot_id); @@ -1696,8 +1696,8 @@ bool BotDatabase::LoadPetItems(const uint32 bot_id, uint32* pet_items) if (!results.RowCount()) return true; - int item_index = EQEmu::invslot::EQUIPMENT_BEGIN; - for (auto row = results.begin(); row != results.end() && (item_index >= EQEmu::invslot::EQUIPMENT_BEGIN && item_index <= EQEmu::invslot::EQUIPMENT_END); ++row) { + int item_index = EQ::invslot::EQUIPMENT_BEGIN; + for (auto row = results.begin(); row != results.end() && (item_index >= EQ::invslot::EQUIPMENT_BEGIN && item_index <= EQ::invslot::EQUIPMENT_END); ++row) { pet_items[item_index] = atoi(row[0]); ++item_index; } @@ -1721,7 +1721,7 @@ bool BotDatabase::SavePetItems(const uint32 bot_id, const uint32* pet_items, boo if (!saved_pet_index) return true; - for (int item_index = EQEmu::invslot::EQUIPMENT_BEGIN; item_index <= EQEmu::invslot::EQUIPMENT_END; ++item_index) { + for (int item_index = EQ::invslot::EQUIPMENT_BEGIN; item_index <= EQ::invslot::EQUIPMENT_END; ++item_index) { if (!pet_items[item_index]) continue; @@ -1870,7 +1870,7 @@ bool BotDatabase::SaveAllArmorColorBySlot(const uint32 owner_id, const int16 slo " AND bi.`slot_id` = '%i'", owner_id, rgb_value, - EQEmu::invslot::slotHead, EQEmu::invslot::slotChest, EQEmu::invslot::slotArms, EQEmu::invslot::slotWrist1, EQEmu::invslot::slotWrist2, EQEmu::invslot::slotHands, EQEmu::invslot::slotLegs, EQEmu::invslot::slotFeet, + EQ::invslot::slotHead, EQ::invslot::slotChest, EQ::invslot::slotArms, EQ::invslot::slotWrist1, EQ::invslot::slotWrist2, EQ::invslot::slotHands, EQ::invslot::slotLegs, EQ::invslot::slotFeet, slot_id ); auto results = database.QueryDatabase(query); @@ -1894,7 +1894,7 @@ bool BotDatabase::SaveAllArmorColors(const uint32 owner_id, const uint32 rgb_val " AND bi.`slot_id` IN ('%u', '%u', '%u', '%u', '%u', '%u', '%u', '%u')", owner_id, rgb_value, - EQEmu::invslot::slotHead, EQEmu::invslot::slotChest, EQEmu::invslot::slotArms, EQEmu::invslot::slotWrist1, EQEmu::invslot::slotWrist2, EQEmu::invslot::slotHands, EQEmu::invslot::slotLegs, EQEmu::invslot::slotFeet + EQ::invslot::slotHead, EQ::invslot::slotChest, EQ::invslot::slotArms, EQ::invslot::slotWrist1, EQ::invslot::slotWrist2, EQ::invslot::slotHands, EQ::invslot::slotLegs, EQ::invslot::slotFeet ); auto results = database.QueryDatabase(query); if (!results.Success()) @@ -2944,7 +2944,7 @@ uint8 BotDatabase::GetSpellCastingChance(uint8 spell_type_index, uint8 class_ind return 0; if (class_index >= PLAYER_CLASS_COUNT) return 0; - if (stance_index >= EQEmu::constants::STANCE_TYPE_COUNT) + if (stance_index >= EQ::constants::STANCE_TYPE_COUNT) return 0; if (conditional_index >= cntHSND) return 0; diff --git a/zone/bot_database.h b/zone/bot_database.h index 82cf68f09..57cf185ce 100644 --- a/zone/bot_database.h +++ b/zone/bot_database.h @@ -32,7 +32,7 @@ class Client; struct BotsAvailableList; struct InspectMessage_Struct; -namespace EQEmu +namespace EQ { class ItemInstance; class InventoryProfile; @@ -85,13 +85,13 @@ public: /* Bot inventory functions */ bool QueryInventoryCount(const uint32 bot_id, uint32& item_count); - bool LoadItems(const uint32 bot_id, EQEmu::InventoryProfile &inventory_inst); + bool LoadItems(const uint32 bot_id, EQ::InventoryProfile &inventory_inst); bool SaveItems(Bot* bot_inst); bool DeleteItems(const uint32 bot_id); bool LoadItemBySlot(Bot* bot_inst); bool LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint32& item_id); - bool SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEmu::ItemInstance* item_inst); + bool SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQ::ItemInstance* item_inst); bool DeleteItemBySlot(const uint32 bot_id, const uint32 slot_id); bool LoadEquipmentColor(const uint32 bot_id, const uint8 material_slot_id, uint32& rgb); diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index 9acc8ac8b..e03c996fd 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -193,18 +193,18 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { float hpRatioToCast = 0.0f; switch(this->GetBotStance()) { - case EQEmu::constants::stanceEfficient: - case EQEmu::constants::stanceAggressive: + case EQ::constants::stanceEfficient: + case EQ::constants::stanceAggressive: hpRatioToCast = isPrimaryHealer?90.0f:50.0f; break; - case EQEmu::constants::stanceBalanced: + case EQ::constants::stanceBalanced: hpRatioToCast = isPrimaryHealer?95.0f:75.0f; break; - case EQEmu::constants::stanceReactive: + case EQ::constants::stanceReactive: hpRatioToCast = isPrimaryHealer?100.0f:90.0f; break; - case EQEmu::constants::stanceBurn: - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurn: + case EQ::constants::stanceBurnAE: hpRatioToCast = isPrimaryHealer?75.0f:25.0f; break; default: @@ -381,16 +381,16 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { float manaRatioToCast = 75.0f; switch(this->GetBotStance()) { - case EQEmu::constants::stanceEfficient: + case EQ::constants::stanceEfficient: manaRatioToCast = 90.0f; break; - case EQEmu::constants::stanceBalanced: - case EQEmu::constants::stanceAggressive: + case EQ::constants::stanceBalanced: + case EQ::constants::stanceAggressive: manaRatioToCast = 75.0f; break; - case EQEmu::constants::stanceReactive: - case EQEmu::constants::stanceBurn: - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceReactive: + case EQ::constants::stanceBurn: + case EQ::constants::stanceBurnAE: manaRatioToCast = 50.0f; break; default: @@ -460,18 +460,18 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { float manaRatioToCast = 75.0f; switch(this->GetBotStance()) { - case EQEmu::constants::stanceEfficient: + case EQ::constants::stanceEfficient: manaRatioToCast = 90.0f; break; - case EQEmu::constants::stanceBalanced: + case EQ::constants::stanceBalanced: manaRatioToCast = 75.0f; break; - case EQEmu::constants::stanceReactive: - case EQEmu::constants::stanceAggressive: + case EQ::constants::stanceReactive: + case EQ::constants::stanceAggressive: manaRatioToCast = 50.0f; break; - case EQEmu::constants::stanceBurn: - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurn: + case EQ::constants::stanceBurnAE: manaRatioToCast = 25.0f; break; default: @@ -1310,7 +1310,7 @@ bool Bot::AI_EngagedCastCheck() { AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting. uint8 botClass = GetClass(); - EQEmu::constants::StanceType botStance = GetBotStance(); + EQ::constants::StanceType botStance = GetBotStance(); bool mayGetAggro = HasOrMayGetAggro(); LogAI("Engaged autocast check triggered (BOTS). Trying to cast healing spells then maybe offensive spells"); @@ -2653,11 +2653,11 @@ uint8 Bot::GetChanceToCastBySpellType(uint32 spellType) return 0; --class_index; - EQEmu::constants::StanceType stance_type = GetBotStance(); - if (stance_type < EQEmu::constants::stancePassive || stance_type > EQEmu::constants::stanceBurnAE) + EQ::constants::StanceType stance_type = GetBotStance(); + if (stance_type < EQ::constants::stancePassive || stance_type > EQ::constants::stanceBurnAE) return 0; - uint8 stance_index = EQEmu::constants::ConvertStanceTypeToIndex(stance_type); + uint8 stance_index = EQ::constants::ConvertStanceTypeToIndex(stance_type); uint8 type_index = nHSND; if (HasGroup()) { diff --git a/zone/client.cpp b/zone/client.cpp index e730b32ee..7b03fa4cb 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -105,7 +105,7 @@ Client::Client(EQStreamInterface* ieqs) 0, // Drakkin Heritage 0, // Drakkin Tattoo 0, // Drakkin Details - EQEmu::TintProfile(), // Armor Tint + EQ::TintProfile(), // Armor Tint 0xff, // AA Title 0, // see_invis 0, // see_invis_undead @@ -285,7 +285,7 @@ Client::Client(EQStreamInterface* ieqs) GlobalChatLimiterTimer = new Timer(RuleI(Chat, IntervalDurationMS)); AttemptedMessages = 0; TotalKarma = 0; - m_ClientVersion = EQEmu::versions::ClientVersion::Unknown; + m_ClientVersion = EQ::versions::ClientVersion::Unknown; m_ClientVersionBit = 0; AggroCount = 0; ooc_regen = false; @@ -923,8 +923,8 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s } // Censor the message - if (EQEmu::ProfanityManager::IsCensorshipActive() && (chan_num != ChatChannel_Say)) - EQEmu::ProfanityManager::RedactMessage(message); + if (EQ::ProfanityManager::IsCensorshipActive() && (chan_num != ChatChannel_Say)) + EQ::ProfanityManager::RedactMessage(message); switch(chan_num) { @@ -1156,8 +1156,8 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s } #endif - if (EQEmu::ProfanityManager::IsCensorshipActive()) { - EQEmu::ProfanityManager::RedactMessage(message); + if (EQ::ProfanityManager::IsCensorshipActive()) { + EQ::ProfanityManager::RedactMessage(message); } Mob* sender = this; @@ -1507,8 +1507,8 @@ bool Client::UpdateLDoNPoints(int32 points, uint32 theme) return(false); } -void Client::SetSkill(EQEmu::skills::SkillType skillid, uint16 value) { - if (skillid > EQEmu::skills::HIGHEST_SKILL) +void Client::SetSkill(EQ::skills::SkillType skillid, uint16 value) { + if (skillid > EQ::skills::HIGHEST_SKILL) return; m_pp.skills[skillid] = value; // We need to be able to #setskill 254 and 255 to reset skills @@ -1544,8 +1544,8 @@ void Client::IncreaseLanguageSkill(int skill_id, int value) { MessageString( Chat::Skills, LANG_SKILL_IMPROVED ); //Notify client } -void Client::AddSkill(EQEmu::skills::SkillType skillid, uint16 value) { - if (skillid > EQEmu::skills::HIGHEST_SKILL) +void Client::AddSkill(EQ::skills::SkillType skillid, uint16 value) { + if (skillid > EQ::skills::HIGHEST_SKILL) return; value = GetRawSkill(skillid) + value; uint16 max = GetMaxSkillAfterSpecializationRules(skillid, MaxSkill(skillid)); @@ -1865,7 +1865,7 @@ void Client::CheckManaEndUpdate() { if (last_reported_mana != current_mana || last_reported_endurance != current_endurance) { - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) { SendManaUpdate(); SendEnduranceUpdate(); } @@ -1900,9 +1900,9 @@ void Client::CheckManaEndUpdate() { mana_update->cur_mana = GetMana(); mana_update->max_mana = GetMaxMana(); mana_update->spawn_id = GetID(); - if ((ClientVersionBit() & EQEmu::versions::ClientVersionBitmask::maskSoDAndLater) != 0) + if ((ClientVersionBit() & EQ::versions::ClientVersionBitmask::maskSoDAndLater) != 0) QueuePacket(mana_packet); // do we need this with the OP_ManaChange packet above? - entity_list.QueueClientsByXTarget(this, mana_packet, false, EQEmu::versions::ClientVersionBitmask::maskSoDAndLater); + entity_list.QueueClientsByXTarget(this, mana_packet, false, EQ::versions::ClientVersionBitmask::maskSoDAndLater); safe_delete(mana_packet); last_reported_mana_percent = this->GetManaPercent(); @@ -1925,9 +1925,9 @@ void Client::CheckManaEndUpdate() { endurance_update->cur_end = GetEndurance(); endurance_update->max_end = GetMaxEndurance(); endurance_update->spawn_id = GetID(); - if ((ClientVersionBit() & EQEmu::versions::ClientVersionBitmask::maskSoDAndLater) != 0) + if ((ClientVersionBit() & EQ::versions::ClientVersionBitmask::maskSoDAndLater) != 0) QueuePacket(endurance_packet); // do we need this with the OP_ManaChange packet above? - entity_list.QueueClientsByXTarget(this, endurance_packet, false, EQEmu::versions::ClientVersionBitmask::maskSoDAndLater); + entity_list.QueueClientsByXTarget(this, endurance_packet, false, EQ::versions::ClientVersionBitmask::maskSoDAndLater); safe_delete(endurance_packet); last_reported_endurance_percent = this->GetEndurancePercent(); @@ -1998,7 +1998,7 @@ void Client::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) UpdateEquipmentLight(); UpdateActiveLight(); - ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive]; + ns->spawn.light = m_Light.Type[EQ::lightsource::LightActive]; } bool Client::GMHideMe(Client* client) { @@ -2107,7 +2107,7 @@ void Client::ReadBook(BookRequest_Struct *book) { out->window = book->window; - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { // Find out what slot the book was read from. // SoF+ need to look up book type for the output message. int16 read_from_slot; @@ -2121,9 +2121,9 @@ void Client::ReadBook(BookRequest_Struct *book) { read_from_slot = book->invslot -1; } - const EQEmu::ItemInstance *inst = nullptr; + const EQ::ItemInstance *inst = nullptr; - if (read_from_slot <= EQEmu::invbag::GENERAL_BAGS_END) + if (read_from_slot <= EQ::invbag::GENERAL_BAGS_END) { inst = m_inv[read_from_slot]; } @@ -2413,12 +2413,12 @@ uint64 Client::GetAllMoney() { (static_cast(m_pp.platinum_shared) * 1000))))); } -bool Client::CheckIncreaseSkill(EQEmu::skills::SkillType skillid, Mob *against_who, int chancemodi) { +bool Client::CheckIncreaseSkill(EQ::skills::SkillType skillid, Mob *against_who, int chancemodi) { if (IsDead() || IsUnconscious()) return false; if (IsAIControlled()) // no skillups while chamred =p return false; - if (skillid > EQEmu::skills::HIGHEST_SKILL) + if (skillid > EQ::skills::HIGHEST_SKILL) return false; int skillval = GetRawSkill(skillid); int maxskill = GetMaxSkillAfterSpecializationRules(skillid, MaxSkill(skillid)); @@ -2485,34 +2485,34 @@ void Client::CheckLanguageSkillIncrease(uint8 langid, uint8 TeacherSkill) { } } -bool Client::HasSkill(EQEmu::skills::SkillType skill_id) const { +bool Client::HasSkill(EQ::skills::SkillType skill_id) const { return((GetSkill(skill_id) > 0) && CanHaveSkill(skill_id)); } -bool Client::CanHaveSkill(EQEmu::skills::SkillType skill_id) const { - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2 && class_ == BERSERKER && skill_id == EQEmu::skills::Skill1HPiercing) - skill_id = EQEmu::skills::Skill2HPiercing; +bool Client::CanHaveSkill(EQ::skills::SkillType skill_id) const { + if (ClientVersion() < EQ::versions::ClientVersion::RoF2 && class_ == BERSERKER && skill_id == EQ::skills::Skill1HPiercing) + skill_id = EQ::skills::Skill2HPiercing; return(database.GetSkillCap(GetClass(), skill_id, RuleI(Character, MaxLevel)) > 0); //if you don't have it by max level, then odds are you never will? } -uint16 Client::MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const { - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2 && class_ == BERSERKER && skillid == EQEmu::skills::Skill1HPiercing) - skillid = EQEmu::skills::Skill2HPiercing; +uint16 Client::MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const { + if (ClientVersion() < EQ::versions::ClientVersion::RoF2 && class_ == BERSERKER && skillid == EQ::skills::Skill1HPiercing) + skillid = EQ::skills::Skill2HPiercing; return(database.GetSkillCap(class_, skillid, level)); } -uint8 Client::SkillTrainLevel(EQEmu::skills::SkillType skillid, uint16 class_) +uint8 Client::SkillTrainLevel(EQ::skills::SkillType skillid, uint16 class_) { - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2 && class_ == BERSERKER && skillid == EQEmu::skills::Skill1HPiercing) - skillid = EQEmu::skills::Skill2HPiercing; + if (ClientVersion() < EQ::versions::ClientVersion::RoF2 && class_ == BERSERKER && skillid == EQ::skills::Skill1HPiercing) + skillid = EQ::skills::Skill2HPiercing; return(database.GetTrainLevel(class_, skillid, RuleI(Character, MaxLevel))); } -uint16 Client::GetMaxSkillAfterSpecializationRules(EQEmu::skills::SkillType skillid, uint16 maxSkill) +uint16 Client::GetMaxSkillAfterSpecializationRules(EQ::skills::SkillType skillid, uint16 maxSkill) { uint16 Result = maxSkill; @@ -2522,13 +2522,13 @@ uint16 Client::GetMaxSkillAfterSpecializationRules(EQEmu::skills::SkillType skil uint16 MaxSpecializations = GetAA(aaSecondaryForte) ? 2 : 1; - if (skillid >= EQEmu::skills::SkillSpecializeAbjure && skillid <= EQEmu::skills::SkillSpecializeEvocation) + if (skillid >= EQ::skills::SkillSpecializeAbjure && skillid <= EQ::skills::SkillSpecializeEvocation) { bool HasPrimarySpecSkill = false; int NumberOfPrimarySpecSkills = 0; - for (int i = EQEmu::skills::SkillSpecializeAbjure; i <= EQEmu::skills::SkillSpecializeEvocation; ++i) + for (int i = EQ::skills::SkillSpecializeAbjure; i <= EQ::skills::SkillSpecializeEvocation; ++i) { if(m_pp.skills[i] > 50) { @@ -2585,8 +2585,8 @@ uint16 Client::GetMaxSkillAfterSpecializationRules(EQEmu::skills::SkillType skil Message(Chat::Red, "Your spell casting specializations skills have been reset. " "Only %i primary specialization skill is allowed.", MaxSpecializations); - for (int i = EQEmu::skills::SkillSpecializeAbjure; i <= EQEmu::skills::SkillSpecializeEvocation; ++i) - SetSkill((EQEmu::skills::SkillType)i, 1); + for (int i = EQ::skills::SkillSpecializeAbjure; i <= EQ::skills::SkillSpecializeEvocation; ++i) + SetSkill((EQ::skills::SkillType)i, 1); Save(); @@ -2599,7 +2599,7 @@ uint16 Client::GetMaxSkillAfterSpecializationRules(EQEmu::skills::SkillType skil Result += spellbonuses.RaiseSkillCap[skillid] + itembonuses.RaiseSkillCap[skillid] + aabonuses.RaiseSkillCap[skillid]; - if (skillid == EQEmu::skills::SkillType::SkillForage) + if (skillid == EQ::skills::SkillType::SkillForage) Result += aabonuses.GrantForage; return Result; @@ -2650,9 +2650,9 @@ bool Client::CheckAccess(int16 iDBLevel, int16 iDefaultLevel) { } void Client::MemorizeSpell(uint32 slot,uint32 spellid,uint32 scribing){ - if (slot < 0 || slot >= EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) + if (slot < 0 || slot >= EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) return; - if ((spellid < 3 || spellid > EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellIdMax) && spellid != 0xFFFFFFFF) + if ((spellid < 3 || spellid > EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellIdMax) && spellid != 0xFFFFFFFF) return; auto outapp = new EQApplicationPacket(OP_MemorizeSpell, sizeof(MemorizeSpell_Struct)); @@ -2681,7 +2681,7 @@ void Client::SetFeigned(bool in_feigned) { feigned=in_feigned; } -void Client::LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemData* item, bool buying) +void Client::LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQ::ItemData* item, bool buying) { if(!player || !merchant || !item) return; @@ -2711,25 +2711,25 @@ void Client::LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 } void Client::Disarm(Client* disarmer, int chance) { - int16 slot = EQEmu::invslot::SLOT_INVALID; - const EQEmu::ItemInstance *inst = this->GetInv().GetItem(EQEmu::invslot::slotPrimary); + int16 slot = EQ::invslot::SLOT_INVALID; + const EQ::ItemInstance *inst = this->GetInv().GetItem(EQ::invslot::slotPrimary); if (inst && inst->IsWeapon()) { - slot = EQEmu::invslot::slotPrimary; + slot = EQ::invslot::slotPrimary; } else { - inst = this->GetInv().GetItem(EQEmu::invslot::slotSecondary); + inst = this->GetInv().GetItem(EQ::invslot::slotSecondary); if (inst && inst->IsWeapon()) - slot = EQEmu::invslot::slotSecondary; + slot = EQ::invslot::slotSecondary; } - if (slot != EQEmu::invslot::SLOT_INVALID && inst->IsClassCommon()) { + if (slot != EQ::invslot::SLOT_INVALID && inst->IsClassCommon()) { // We have an item that can be disarmed. if (zone->random.Int(0, 1000) <= chance) { // Find a free inventory slot - int16 slot_id = EQEmu::invslot::SLOT_INVALID; - slot_id = m_inv.FindFreeSlot(false, true, inst->GetItem()->Size, (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow)); - if (slot_id != EQEmu::invslot::SLOT_INVALID) + int16 slot_id = EQ::invslot::SLOT_INVALID; + slot_id = m_inv.FindFreeSlot(false, true, inst->GetItem()->Size, (inst->GetItem()->ItemType == EQ::item::ItemTypeArrow)); + if (slot_id != EQ::invslot::SLOT_INVALID) { - EQEmu::ItemInstance *InvItem = m_inv.PopItem(slot); + EQ::ItemInstance *InvItem = m_inv.PopItem(slot); if (InvItem) { // there should be no way it is not there, but check anyway EQApplicationPacket* outapp = new EQApplicationPacket(OP_MoveItem, sizeof(MoveItem_Struct)); MoveItem_Struct* mi = (MoveItem_Struct*)outapp->pBuffer; @@ -2742,22 +2742,22 @@ void Client::Disarm(Client* disarmer, int chance) { FastQueuePacket(&outapp); // this deletes item from the weapon slot on the client if (PutItemInInventory(slot_id, *InvItem, true)) database.SaveInventory(this->CharacterID(), NULL, slot); - auto matslot = (slot == EQEmu::invslot::slotPrimary ? EQEmu::textures::weaponPrimary : EQEmu::textures::weaponSecondary); - if (matslot != EQEmu::textures::materialInvalid) + auto matslot = (slot == EQ::invslot::slotPrimary ? EQ::textures::weaponPrimary : EQ::textures::weaponSecondary); + if (matslot != EQ::textures::materialInvalid) SendWearChange(matslot); } MessageString(Chat::Skills, DISARMED); if (disarmer != this) disarmer->MessageString(Chat::Skills, DISARM_SUCCESS, this->GetCleanName()); if (chance != 1000) - disarmer->CheckIncreaseSkill(EQEmu::skills::SkillDisarm, nullptr, 4); + disarmer->CheckIncreaseSkill(EQ::skills::SkillDisarm, nullptr, 4); CalcBonuses(); // CalcEnduranceWeightFactor(); return; } disarmer->MessageString(Chat::Skills, DISARM_FAILED); if (chance != 1000) - disarmer->CheckIncreaseSkill(EQEmu::skills::SkillDisarm, nullptr, 2); + disarmer->CheckIncreaseSkill(EQ::skills::SkillDisarm, nullptr, 2); return; } } @@ -2773,7 +2773,7 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) // Start bind if (!bindwound_timer.Enabled()) { // make sure we actually have a bandage... and consume it. - int16 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeBandage, 1, invWhereWorn | invWherePersonal); + int16 bslot = m_inv.HasItemByUse(EQ::item::ItemTypeBandage, 1, invWhereWorn | invWherePersonal); if (bslot == INVALID_INDEX) { bind_out->type = 3; QueuePacket(outapp); @@ -2839,7 +2839,7 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) bind_out->type = 1; // Done QueuePacket(outapp); bind_out->type = 0; - CheckIncreaseSkill(EQEmu::skills::SkillBindWound, nullptr, 5); + CheckIncreaseSkill(EQ::skills::SkillBindWound, nullptr, 5); if (RuleB(Character, UseOldBindWound)) { int maxHPBonus = spellbonuses.MaxBindWound + itembonuses.MaxBindWound + @@ -2847,7 +2847,7 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) int max_percent = 50 + maxHPBonus; - if (GetClass() == MONK && GetSkill(EQEmu::skills::SkillBindWound) > 200) { + if (GetClass() == MONK && GetSkill(EQ::skills::SkillBindWound) > 200) { max_percent = 70 + maxHPBonus; } @@ -2860,11 +2860,11 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) // 0.120 per skill point, 0.60 per skill level, minimum 3 max 30 int bindhps = 3; - if (GetSkill(EQEmu::skills::SkillBindWound) > 200) { - bindhps += GetSkill(EQEmu::skills::SkillBindWound) * 4 / 10; + if (GetSkill(EQ::skills::SkillBindWound) > 200) { + bindhps += GetSkill(EQ::skills::SkillBindWound) * 4 / 10; } - else if (GetSkill(EQEmu::skills::SkillBindWound) >= 10) { - bindhps += GetSkill(EQEmu::skills::SkillBindWound) / 4; + else if (GetSkill(EQ::skills::SkillBindWound) >= 10) { + bindhps += GetSkill(EQ::skills::SkillBindWound) / 4; } // Implementation of aaMithanielsBinding is a guess (the multiplier) @@ -2899,7 +2899,7 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) } else { int percent_base = 50; - if (GetRawSkill(EQEmu::skills::SkillBindWound) > 200) { + if (GetRawSkill(EQ::skills::SkillBindWound) > 200) { if ((GetClass() == MONK) || (GetClass() == BEASTLORD)) percent_base = 70; else if ((GetLevel() > 50) && ((GetClass() == WARRIOR) || (GetClass() == ROGUE) || (GetClass() == CLERIC))) @@ -2925,9 +2925,9 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) if (bindmob->GetHP() < bindmob->GetMaxHP() && bindmob->GetHP() < max_hp) { int bindhps = 3; // base bind hp if (percent_base >= 70) - bindhps = (GetSkill(EQEmu::skills::SkillBindWound) * 4) / 10; // 8:5 skill-to-hp ratio - else if (GetSkill(EQEmu::skills::SkillBindWound) >= 12) - bindhps = GetSkill(EQEmu::skills::SkillBindWound) / 4; // 4:1 skill-to-hp ratio + bindhps = (GetSkill(EQ::skills::SkillBindWound) * 4) / 10; // 8:5 skill-to-hp ratio + else if (GetSkill(EQ::skills::SkillBindWound) >= 12) + bindhps = GetSkill(EQ::skills::SkillBindWound) / 4; // 4:1 skill-to-hp ratio int bonus_hp_percent = 0; if (percent_base >= 70) @@ -2983,10 +2983,10 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail) void Client::SetMaterial(int16 in_slot, uint32 item_id) { - const EQEmu::ItemData *item = database.GetItem(item_id); + const EQ::ItemData *item = database.GetItem(item_id); if (item && item->IsClassCommon()) { - uint8 matslot = EQEmu::InventoryProfile::CalcMaterialFromSlot(in_slot); - if (matslot != EQEmu::textures::materialInvalid) { + uint8 matslot = EQ::InventoryProfile::CalcMaterialFromSlot(in_slot); + if (matslot != EQ::textures::materialInvalid) { m_pp.item_material.Slot[matslot].Material = GetEquipmentMaterial(matslot); } } @@ -3070,7 +3070,7 @@ void Client::ServerFilter(SetServerFilter_Struct* filter){ Filter0(FilterMissedMe); Filter1(FilterDamageShields); - if (ClientVersionBit() & EQEmu::versions::maskSoDAndLater) { + if (ClientVersionBit() & EQ::versions::maskSoDAndLater) { if (filter->filters[FilterDOT] == 0) ClientFilters[FilterDOT] = FilterShow; else if (filter->filters[FilterDOT] == 1) @@ -3091,7 +3091,7 @@ void Client::ServerFilter(SetServerFilter_Struct* filter){ Filter1(FilterFocusEffects); Filter1(FilterPetSpells); - if (ClientVersionBit() & EQEmu::versions::maskSoDAndLater) { + if (ClientVersionBit() & EQ::versions::maskSoDAndLater) { if (filter->filters[FilterHealOverTime] == 0) ClientFilters[FilterHealOverTime] = FilterShow; // This is called 'Show Mine Only' in the clients, but functions the same as show @@ -3317,17 +3317,17 @@ void Client::Tell_StringID(uint32 string_id, const char *who, const char *messag } void Client::SetTint(int16 in_slot, uint32 color) { - EQEmu::textures::Tint_Struct new_color; + EQ::textures::Tint_Struct new_color; new_color.Color = color; SetTint(in_slot, new_color); database.SaveCharacterMaterialColor(this->CharacterID(), in_slot, color); } // Still need to reconcile bracer01 versus bracer02 -void Client::SetTint(int16 in_slot, EQEmu::textures::Tint_Struct& color) { +void Client::SetTint(int16 in_slot, EQ::textures::Tint_Struct& color) { - uint8 matslot = EQEmu::InventoryProfile::CalcMaterialFromSlot(in_slot); - if (matslot != EQEmu::textures::materialInvalid) + uint8 matslot = EQ::InventoryProfile::CalcMaterialFromSlot(in_slot); + if (matslot != EQ::textures::materialInvalid) { m_pp.item_tint.Slot[matslot].Color = color.Color; database.SaveCharacterMaterialColor(this->CharacterID(), in_slot, color.Color); @@ -3404,28 +3404,28 @@ void Client::LinkDead() uint8 Client::SlotConvert(uint8 slot,bool bracer){ uint8 slot2 = 0; // why are we returning MainCharm instead of INVALID_INDEX? (must be a pre-charm segment...) if(bracer) - return EQEmu::invslot::slotWrist2; + return EQ::invslot::slotWrist2; switch(slot) { - case EQEmu::textures::armorHead: - slot2 = EQEmu::invslot::slotHead; + case EQ::textures::armorHead: + slot2 = EQ::invslot::slotHead; break; - case EQEmu::textures::armorChest: - slot2 = EQEmu::invslot::slotChest; + case EQ::textures::armorChest: + slot2 = EQ::invslot::slotChest; break; - case EQEmu::textures::armorArms: - slot2 = EQEmu::invslot::slotArms; + case EQ::textures::armorArms: + slot2 = EQ::invslot::slotArms; break; - case EQEmu::textures::armorWrist: - slot2 = EQEmu::invslot::slotWrist1; + case EQ::textures::armorWrist: + slot2 = EQ::invslot::slotWrist1; break; - case EQEmu::textures::armorHands: - slot2 = EQEmu::invslot::slotHands; + case EQ::textures::armorHands: + slot2 = EQ::invslot::slotHands; break; - case EQEmu::textures::armorLegs: - slot2 = EQEmu::invslot::slotLegs; + case EQ::textures::armorLegs: + slot2 = EQ::invslot::slotLegs; break; - case EQEmu::textures::armorFeet: - slot2 = EQEmu::invslot::slotFeet; + case EQ::textures::armorFeet: + slot2 = EQ::invslot::slotFeet; break; } return slot2; @@ -3434,26 +3434,26 @@ uint8 Client::SlotConvert(uint8 slot,bool bracer){ uint8 Client::SlotConvert2(uint8 slot){ uint8 slot2 = 0; // same as above... switch(slot){ - case EQEmu::invslot::slotHead: - slot2 = EQEmu::textures::armorHead; + case EQ::invslot::slotHead: + slot2 = EQ::textures::armorHead; break; - case EQEmu::invslot::slotChest: - slot2 = EQEmu::textures::armorChest; + case EQ::invslot::slotChest: + slot2 = EQ::textures::armorChest; break; - case EQEmu::invslot::slotArms: - slot2 = EQEmu::textures::armorArms; + case EQ::invslot::slotArms: + slot2 = EQ::textures::armorArms; break; - case EQEmu::invslot::slotWrist1: - slot2 = EQEmu::textures::armorWrist; + case EQ::invslot::slotWrist1: + slot2 = EQ::textures::armorWrist; break; - case EQEmu::invslot::slotHands: - slot2 = EQEmu::textures::armorHands; + case EQ::invslot::slotHands: + slot2 = EQ::textures::armorHands; break; - case EQEmu::invslot::slotLegs: - slot2 = EQEmu::textures::armorLegs; + case EQ::invslot::slotLegs: + slot2 = EQ::textures::armorLegs; break; - case EQEmu::invslot::slotFeet: - slot2 = EQEmu::textures::armorFeet; + case EQ::invslot::slotFeet: + slot2 = EQ::textures::armorFeet; break; } return slot2; @@ -4024,13 +4024,13 @@ void Client::SendOPTranslocateConfirm(Mob *Caster, uint16 SpellID) { return; } -void Client::SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemData* item){ +void Client::SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQ::ItemData* item){ auto outapp = new EQApplicationPacket(OP_PickPocket, sizeof(sPickPocket_Struct)); sPickPocket_Struct *pick_out = (sPickPocket_Struct *)outapp->pBuffer; pick_out->coin = amt; pick_out->from = GetID(); pick_out->to = from->GetID(); - pick_out->myskill = GetSkill(EQEmu::skills::SkillPickPockets); + pick_out->myskill = GetSkill(EQ::skills::SkillPickPockets); if ((type >= PickPocketPlatinum) && (type <= PickPocketCopper) && (amt == 0)) type = PickPocketFailed; @@ -4271,7 +4271,7 @@ bool Client::KeyRingCheck(uint32 item_id) void Client::KeyRingList() { Message(Chat::LightBlue,"Keys on Keyring:"); - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; for (auto iter = keyring.begin(); iter != keyring.end(); ++iter) { if ((item = database.GetItem(*iter))!=nullptr) { Message(Chat::LightBlue,item->Name); @@ -4457,7 +4457,7 @@ bool Client::GroupFollow(Client* inviter) { group->UpdateGroupAAs(); //Invite the inviter into the group first.....dont ask - if (inviter->ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (inviter->ClientVersion() < EQ::versions::ClientVersion::SoD) { auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct)); GroupJoin_Struct* outgj = (GroupJoin_Struct*)outapp->pBuffer; @@ -4505,13 +4505,13 @@ bool Client::GroupFollow(Client* inviter) { return false; } - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) { SendGroupJoinAcknowledge(); } // Temporary hack for SoD, as things seem to work quite differently - if (inviter->IsClient() && inviter->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (inviter->IsClient() && inviter->ClientVersion() >= EQ::versions::ClientVersion::SoD) { database.RefreshGroupFromDB(inviter); } @@ -4539,43 +4539,43 @@ bool Client::GroupFollow(Client* inviter) { uint16 Client::GetPrimarySkillValue() { - EQEmu::skills::SkillType skill = EQEmu::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill - bool equiped = m_inv.GetItem(EQEmu::invslot::slotPrimary); + EQ::skills::SkillType skill = EQ::skills::HIGHEST_SKILL; //because nullptr == 0, which is 1H Slashing, & we want it to return 0 from GetSkill + bool equiped = m_inv.GetItem(EQ::invslot::slotPrimary); if (!equiped) - skill = EQEmu::skills::SkillHandtoHand; + skill = EQ::skills::SkillHandtoHand; else { - uint8 type = m_inv.GetItem(EQEmu::invslot::slotPrimary)->GetItem()->ItemType; //is this the best way to do this? + uint8 type = m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->ItemType; //is this the best way to do this? switch (type) { - case EQEmu::item::ItemType1HSlash: // 1H Slashing - skill = EQEmu::skills::Skill1HSlashing; + case EQ::item::ItemType1HSlash: // 1H Slashing + skill = EQ::skills::Skill1HSlashing; break; - case EQEmu::item::ItemType2HSlash: // 2H Slashing - skill = EQEmu::skills::Skill2HSlashing; + case EQ::item::ItemType2HSlash: // 2H Slashing + skill = EQ::skills::Skill2HSlashing; break; - case EQEmu::item::ItemType1HPiercing: // Piercing - skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HPiercing: // Piercing + skill = EQ::skills::Skill1HPiercing; break; - case EQEmu::item::ItemType1HBlunt: // 1H Blunt - skill = EQEmu::skills::Skill1HBlunt; + case EQ::item::ItemType1HBlunt: // 1H Blunt + skill = EQ::skills::Skill1HBlunt; break; - case EQEmu::item::ItemType2HBlunt: // 2H Blunt - skill = EQEmu::skills::Skill2HBlunt; + case EQ::item::ItemType2HBlunt: // 2H Blunt + skill = EQ::skills::Skill2HBlunt; break; - case EQEmu::item::ItemType2HPiercing: // 2H Piercing - if (IsClient() && CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::RoF2) - skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType2HPiercing: // 2H Piercing + if (IsClient() && CastToClient()->ClientVersion() < EQ::versions::ClientVersion::RoF2) + skill = EQ::skills::Skill1HPiercing; else - skill = EQEmu::skills::Skill2HPiercing; + skill = EQ::skills::Skill2HPiercing; break; - case EQEmu::item::ItemTypeMartial: // Hand to Hand - skill = EQEmu::skills::SkillHandtoHand; + case EQ::item::ItemTypeMartial: // Hand to Hand + skill = EQ::skills::SkillHandtoHand; break; default: // All other types default to Hand to Hand - skill = EQEmu::skills::SkillHandtoHand; + skill = EQ::skills::SkillHandtoHand; break; } } @@ -4589,7 +4589,7 @@ uint32 Client::GetTotalATK() uint32 WornCap = itembonuses.ATK; if(IsClient()) { - AttackRating = ((WornCap * 1.342) + (GetSkill(EQEmu::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69)); + AttackRating = ((WornCap * 1.342) + (GetSkill(EQ::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69)); AttackRating += aabonuses.ATK + GroupLeadershipAAOffenseEnhancement(); if (AttackRating < 10) @@ -4607,7 +4607,7 @@ uint32 Client::GetATKRating() { uint32 AttackRating = 0; if(IsClient()) { - AttackRating = (GetSkill(EQEmu::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69); + AttackRating = (GetSkill(EQ::skills::SkillOffense) * 1.345) + ((GetSTR() - 66) * 0.9) + (GetPrimarySkillValue() * 2.69); if (AttackRating < 10) AttackRating = 10; @@ -4735,7 +4735,7 @@ void Client::IncrementAggroCount(bool raid_target) if (AggroCount == 1) m_pp.RestTimer = std::max(m_pp.RestTimer, rest_timer.GetRemainingTime() / 1000); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { auto outapp = new EQApplicationPacket(OP_RestState, 1); char *Buffer = (char *)outapp->pBuffer; VARSTRUCT_ENCODE_TYPE(uint8, Buffer, 0x01); @@ -4766,7 +4766,7 @@ void Client::DecrementAggroCount() rest_timer.Start(m_pp.RestTimer * 1000); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { auto outapp = new EQApplicationPacket(OP_RestState, 5); char *Buffer = (char *)outapp->pBuffer; VARSTRUCT_ENCODE_TYPE(uint8, Buffer, 0x00); @@ -4794,7 +4794,7 @@ void Client::UpdateRestTimer(uint32 new_timer) } else { // if we're not aggro, we need to check if current timer needs updating if (rest_timer.GetRemainingTime() / 1000 < new_timer) { rest_timer.Start(new_timer * 1000); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { auto outapp = new EQApplicationPacket(OP_RestState, 5); char *Buffer = (char *)outapp->pBuffer; VARSTRUCT_ENCODE_TYPE(uint8, Buffer, 0x00); @@ -4965,7 +4965,7 @@ void Client::HandleLDoNOpen(NPC *target) if(target->GetLDoNTrapSpellID() != 0) { MessageString(Chat::Red, LDON_ACCIDENT_SETOFF2); - target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); + target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQ::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); target->SetLDoNTrapSpellID(0); target->SetLDoNTrapped(false); target->SetLDoNTrapDetected(false); @@ -5001,7 +5001,7 @@ void Client::HandleLDoNOpen(NPC *target) AddEXP(target->GetLevel()*target->GetLevel()*2625/10, GetLevelCon(target->GetLevel())); } } - target->Death(this, 0, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand); + target->Death(this, 0, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand); } } } @@ -5087,7 +5087,7 @@ void Client::HandleLDoNDisarm(NPC *target, uint16 skill, uint8 type) break; case -1: MessageString(Chat::Red, LDON_ACCIDENT_SETOFF2); - target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); + target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQ::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); target->SetLDoNTrapSpellID(0); target->SetLDoNTrapped(false); target->SetLDoNTrapDetected(false); @@ -5106,7 +5106,7 @@ void Client::HandleLDoNPickLock(NPC *target, uint16 skill, uint8 type) if(target->IsLDoNTrapped()) { MessageString(Chat::Red, LDON_ACCIDENT_SETOFF2); - target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); + target->SpellFinished(target->GetLDoNTrapSpellID(), this, EQ::spells::CastingSlot::Item, 0, -1, spells[target->GetLDoNTrapSpellID()].ResistDiff); target->SetLDoNTrapSpellID(0); target->SetLDoNTrapped(false); target->SetLDoNTrapDetected(false); @@ -5314,14 +5314,14 @@ void Client::ShowSkillsWindow() { const char *WindowTitle = "Skills"; std::string WindowText; - std::map Skills = EQEmu::skills::GetSkillTypeMap(); + std::map Skills = EQ::skills::GetSkillTypeMap(); - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2) - Skills[EQEmu::skills::Skill1HPiercing] = "Piercing"; + if (ClientVersion() < EQ::versions::ClientVersion::RoF2) + Skills[EQ::skills::Skill1HPiercing] = "Piercing"; // print out all available skills for (auto skills_iter : Skills) { - if (skills_iter.first == EQEmu::skills::Skill2HPiercing && ClientVersion() < EQEmu::versions::ClientVersion::RoF2) + if (skills_iter.first == EQ::skills::Skill2HPiercing && ClientVersion() < EQ::versions::ClientVersion::RoF2) continue; if (!GetSkill(skills_iter.first) && !MaxSkill(skills_iter.first)) continue; @@ -5407,8 +5407,8 @@ bool Client::TryReward(uint32 claim_id) // save uint32 free_slot = 0xFFFFFFFF; - for (int i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; ++i) { - EQEmu::ItemInstance *item = GetInv().GetItem(i); + for (int i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; ++i) { + EQ::ItemInstance *item = GetInv().GetItem(i); if (!item) { free_slot = i; break; @@ -5454,7 +5454,7 @@ bool Client::TryReward(uint32 claim_id) } auto &ivr = (*iter); - EQEmu::ItemInstance *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges); + EQ::ItemInstance *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges); if (!claim) { Save(); return true; @@ -5464,7 +5464,7 @@ bool Client::TryReward(uint32 claim_id) for (int y = 1; y < 8; y++) if (ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) { - EQEmu::ItemInstance *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges); + EQ::ItemInstance *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges); if (item_temp) { if (CheckLoreConflict(item_temp->GetItem())) { lore_conflict = true; @@ -5644,7 +5644,7 @@ void Client::SuspendMinion() memset(&m_suspendedminion, 0, sizeof(struct PetInfo)); // TODO: These pet command states need to be synced ... // Will just fix them for now - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) { SetPetCommandState(PET_BUTTON_SIT, 0); SetPetCommandState(PET_BUTTON_STOP, 0); SetPetCommandState(PET_BUTTON_REGROUP, 0); @@ -5744,10 +5744,10 @@ void Client::ProcessInspectRequest(Client* requestee, Client* requester) { insr->TargetID = requester->GetID(); insr->playerid = requestee->GetID(); - const EQEmu::ItemData* item = nullptr; - const EQEmu::ItemInstance* inst = nullptr; + const EQ::ItemData* item = nullptr; + const EQ::ItemInstance* inst = nullptr; int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - for(int16 L = EQEmu::invslot::EQUIPMENT_BEGIN; L <= EQEmu::invslot::EQUIPMENT_END; L++) { + for(int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { inst = requestee->GetInv().GetItem(L); if(inst) { @@ -5755,7 +5755,7 @@ void Client::ProcessInspectRequest(Client* requestee, Client* requester) { if(item) { strcpy(insr->itemnames[L], item->Name); - const EQEmu::ItemData *aug_item = nullptr; + const EQ::ItemData *aug_item = nullptr; if (inst->GetOrnamentationAug(ornamentationAugtype)) inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); @@ -6275,27 +6275,27 @@ void Client::ConsentCorpses(std::string consent_name, bool deny) scs->permission = deny ? 0 : 1; scs->zone_id = zone->GetZoneID(); scs->instance_id = zone->GetInstanceID(); - scs->consent_type = EQEmu::consent::Normal; + scs->consent_type = EQ::consent::Normal; scs->consent_id = 0; if (strcasecmp(scs->grantname, "group") == 0) { if (!deny) { Group* grp = GetGroup(); scs->consent_id = grp ? grp->GetID() : 0; } - scs->consent_type = EQEmu::consent::Group; + scs->consent_type = EQ::consent::Group; } else if (strcasecmp(scs->grantname, "raid") == 0) { if (!deny) { Raid* raid = GetRaid(); scs->consent_id = raid ? raid->GetID() : 0; } - scs->consent_type = EQEmu::consent::Raid; + scs->consent_type = EQ::consent::Raid; } else if (strcasecmp(scs->grantname, "guild") == 0) { if (!deny) { scs->consent_id = GuildID(); } - scs->consent_type = EQEmu::consent::Guild; + scs->consent_type = EQ::consent::Guild; // update all corpses in db so buried/unloaded corpses see new consent id database.UpdateCharacterCorpseConsent(CharacterID(), scs->consent_id); } @@ -6352,8 +6352,8 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid made_npc->Corrup = GetCorrup(); made_npc->PhR = GetPhR(); // looks - made_npc->texture = GetEquipmentMaterial(EQEmu::textures::armorChest); - made_npc->helmtexture = GetEquipmentMaterial(EQEmu::textures::armorHead); + made_npc->texture = GetEquipmentMaterial(EQ::textures::armorChest); + made_npc->helmtexture = GetEquipmentMaterial(EQ::textures::armorHead); made_npc->haircolor = GetHairColor(); made_npc->beardcolor = GetBeardColor(); made_npc->eyecolor1 = GetEyeColor1(); @@ -6364,9 +6364,9 @@ void Client::Doppelganger(uint16 spell_id, Mob *target, const char *name_overrid made_npc->drakkin_heritage = GetDrakkinHeritage(); made_npc->drakkin_tattoo = GetDrakkinTattoo(); made_npc->drakkin_details = GetDrakkinDetails(); - made_npc->d_melee_texture1 = GetEquipmentMaterial(EQEmu::textures::weaponPrimary); - made_npc->d_melee_texture2 = GetEquipmentMaterial(EQEmu::textures::weaponSecondary); - for (int i = EQEmu::textures::textureBegin; i <= EQEmu::textures::LastTexture; i++) { + made_npc->d_melee_texture1 = GetEquipmentMaterial(EQ::textures::weaponPrimary); + made_npc->d_melee_texture2 = GetEquipmentMaterial(EQ::textures::weaponSecondary); + for (int i = EQ::textures::textureBegin; i <= EQ::textures::LastTexture; i++) { made_npc->armor_tint.Slot[i].Color = GetEquipmentColor(i); } made_npc->loottable_id = 0; @@ -6828,7 +6828,7 @@ void Client::SendStatsWindow(Client* client, bool use_window) }; std::string skill_mods = ""; - for (int j = 0; j <= EQEmu::skills::HIGHEST_SKILL; j++) { + for (int j = 0; j <= EQ::skills::HIGHEST_SKILL; j++) { if(itembonuses.skillmod[j] > 0) skill_mods += indP + skill_list[j] + " : +" + itoa(itembonuses.skillmod[j]) + "%
"; else if(itembonuses.skillmod[j] < 0) @@ -6836,7 +6836,7 @@ void Client::SendStatsWindow(Client* client, bool use_window) } std::string skill_dmgs = ""; - for (int j = 0; j <= EQEmu::skills::HIGHEST_SKILL; j++) { + for (int j = 0; j <= EQ::skills::HIGHEST_SKILL; j++) { if((itembonuses.SkillDamageAmount[j] + spellbonuses.SkillDamageAmount[j]) > 0) skill_dmgs += indP + skill_list[j] + " : +" + itoa(itembonuses.SkillDamageAmount[j] + spellbonuses.SkillDamageAmount[j]) + "
"; else if((itembonuses.SkillDamageAmount[j] + spellbonuses.SkillDamageAmount[j]) < 0) @@ -6869,30 +6869,30 @@ void Client::SendStatsWindow(Client* client, bool use_window) indP + "Wind: " + itoa(GetWindMod()) + "
"; } - EQEmu::skills::SkillType skill = EQEmu::skills::SkillHandtoHand; - auto *inst = GetInv().GetItem(EQEmu::invslot::slotPrimary); + EQ::skills::SkillType skill = EQ::skills::SkillHandtoHand; + auto *inst = GetInv().GetItem(EQ::invslot::slotPrimary); if (inst && inst->IsClassCommon()) { switch (inst->GetItem()->ItemType) { - case EQEmu::item::ItemType1HSlash: - skill = EQEmu::skills::Skill1HSlashing; + case EQ::item::ItemType1HSlash: + skill = EQ::skills::Skill1HSlashing; break; - case EQEmu::item::ItemType2HSlash: - skill = EQEmu::skills::Skill2HSlashing; + case EQ::item::ItemType2HSlash: + skill = EQ::skills::Skill2HSlashing; break; - case EQEmu::item::ItemType1HPiercing: - skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HPiercing: + skill = EQ::skills::Skill1HPiercing; break; - case EQEmu::item::ItemType1HBlunt: - skill = EQEmu::skills::Skill1HBlunt; + case EQ::item::ItemType1HBlunt: + skill = EQ::skills::Skill1HBlunt; break; - case EQEmu::item::ItemType2HBlunt: - skill = EQEmu::skills::Skill2HBlunt; + case EQ::item::ItemType2HBlunt: + skill = EQ::skills::Skill2HBlunt; break; - case EQEmu::item::ItemType2HPiercing: - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2) - skill = EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType2HPiercing: + if (ClientVersion() < EQ::versions::ClientVersion::RoF2) + skill = EQ::skills::Skill1HPiercing; else - skill = EQEmu::skills::Skill2HPiercing; + skill = EQ::skills::Skill2HPiercing; break; default: break; @@ -6934,7 +6934,7 @@ void Client::SendStatsWindow(Client* client, bool use_window) if(use_window) { if(final_stats.size() < 4096) { - uint32 Buttons = (client->ClientVersion() < EQEmu::versions::ClientVersion::SoD) ? 0 : 1; + uint32 Buttons = (client->ClientVersion() < EQ::versions::ClientVersion::SoD) ? 0 : 1; client->SendWindow(0, POPUPID_UPDATE_SHOWSTATSWINDOW, Buttons, "Cancel", "Update", 0, 1, this, "", "%s", final_stats.c_str()); goto Extra_Info; } @@ -6972,7 +6972,7 @@ void Client::SendStatsWindow(Client* client, bool use_window) } void Client::SendAltCurrencies() { - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { uint32 count = zone->AlternateCurrencies.size(); if(count == 0) { return; @@ -6988,7 +6988,7 @@ void Client::SendAltCurrencies() { uint32 i = 0; auto iter = zone->AlternateCurrencies.begin(); while(iter != zone->AlternateCurrencies.end()) { - const EQEmu::ItemData* item = database.GetItem((*iter).item_id); + const EQ::ItemData* item = database.GetItem((*iter).item_id); altc->entries[i].currency_number = (*iter).id; altc->entries[i].unknown00 = 1; altc->entries[i].currency_number2 = (*iter).id; @@ -7597,7 +7597,7 @@ void Client::SendMercPersonalInfo() if(mercData) { - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { if (mercCount > 0) { @@ -7710,13 +7710,13 @@ void Client::SendClearMercInfo() void Client::DuplicateLoreMessage(uint32 ItemID) { - if (!(m_ClientVersionBit & EQEmu::versions::maskRoFAndLater)) + if (!(m_ClientVersionBit & EQ::versions::maskRoFAndLater)) { MessageString(Chat::White, PICK_LORE); return; } - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) return; @@ -7743,7 +7743,7 @@ void Client::GarbleMessage(char *message, uint8 variance) for (size_t i = 0; i < strlen(message); i++) { // Client expects hex values inside of a text link body if (message[i] == delimiter) { - if (!(delimiter_count & 1)) { i += EQEmu::constants::SAY_LINK_BODY_SIZE; } + if (!(delimiter_count & 1)) { i += EQ::constants::SAY_LINK_BODY_SIZE; } ++delimiter_count; continue; } @@ -8184,12 +8184,12 @@ void Client::TickItemCheck() if(zone->tick_items.empty()) { return; } //Scan equip, general, cursor slots for items - for (i = EQEmu::invslot::POSSESSIONS_BEGIN; i <= EQEmu::invslot::POSSESSIONS_END; i++) + for (i = EQ::invslot::POSSESSIONS_BEGIN; i <= EQ::invslot::POSSESSIONS_END; i++) { TryItemTick(i); } //Scan bags - for (i = EQEmu::invbag::GENERAL_BAGS_BEGIN; i <= EQEmu::invbag::CURSOR_BAG_END; i++) + for (i = EQ::invbag::GENERAL_BAGS_BEGIN; i <= EQ::invbag::CURSOR_BAG_END; i++) { TryItemTick(i); } @@ -8198,26 +8198,26 @@ void Client::TickItemCheck() void Client::TryItemTick(int slot) { int iid = 0; - const EQEmu::ItemInstance* inst = m_inv[slot]; + const EQ::ItemInstance* inst = m_inv[slot]; if(inst == 0) { return; } iid = inst->GetID(); if(zone->tick_items.count(iid) > 0) { - if (GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) && (zone->tick_items[iid].bagslot || slot <= EQEmu::invslot::EQUIPMENT_END)) + if (GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) && (zone->tick_items[iid].bagslot || slot <= EQ::invslot::EQUIPMENT_END)) { - EQEmu::ItemInstance* e_inst = (EQEmu::ItemInstance*)inst; + EQ::ItemInstance* e_inst = (EQ::ItemInstance*)inst; parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot); } } //Only look at augs in main inventory - if (slot > EQEmu::invslot::EQUIPMENT_END) { return; } + if (slot > EQ::invslot::EQUIPMENT_END) { return; } - for (int x = EQEmu::invaug::SOCKET_BEGIN; x <= EQEmu::invaug::SOCKET_END; ++x) + for (int x = EQ::invaug::SOCKET_BEGIN; x <= EQ::invaug::SOCKET_END; ++x) { - EQEmu::ItemInstance * a_inst = inst->GetAugment(x); + EQ::ItemInstance * a_inst = inst->GetAugment(x); if(!a_inst) { continue; } iid = a_inst->GetID(); @@ -8226,7 +8226,7 @@ void Client::TryItemTick(int slot) { if( GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) ) { - EQEmu::ItemInstance* e_inst = (EQEmu::ItemInstance*)a_inst; + EQ::ItemInstance* e_inst = (EQ::ItemInstance*)a_inst; parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot); } } @@ -8236,11 +8236,11 @@ void Client::TryItemTick(int slot) void Client::ItemTimerCheck() { int i; - for (i = EQEmu::invslot::POSSESSIONS_BEGIN; i <= EQEmu::invslot::POSSESSIONS_END; i++) + for (i = EQ::invslot::POSSESSIONS_BEGIN; i <= EQ::invslot::POSSESSIONS_END; i++) { TryItemTimer(i); } - for (i = EQEmu::invbag::GENERAL_BAGS_BEGIN; i <= EQEmu::invbag::CURSOR_BAG_END; i++) + for (i = EQ::invbag::GENERAL_BAGS_BEGIN; i <= EQ::invbag::CURSOR_BAG_END; i++) { TryItemTimer(i); } @@ -8248,7 +8248,7 @@ void Client::ItemTimerCheck() void Client::TryItemTimer(int slot) { - EQEmu::ItemInstance* inst = m_inv.GetItem(slot); + EQ::ItemInstance* inst = m_inv.GetItem(slot); if(!inst) { return; } @@ -8262,13 +8262,13 @@ void Client::TryItemTimer(int slot) ++it_iter; } - if (slot > EQEmu::invslot::EQUIPMENT_END) { + if (slot > EQ::invslot::EQUIPMENT_END) { return; } - for (int x = EQEmu::invaug::SOCKET_BEGIN; x <= EQEmu::invaug::SOCKET_END; ++x) + for (int x = EQ::invaug::SOCKET_BEGIN; x <= EQ::invaug::SOCKET_END; ++x) { - EQEmu::ItemInstance * a_inst = inst->GetAugment(x); + EQ::ItemInstance * a_inst = inst->GetAugment(x); if(!a_inst) { continue; } @@ -8284,7 +8284,7 @@ void Client::TryItemTimer(int slot) } } -void Client::SendItemScale(EQEmu::ItemInstance *inst) { +void Client::SendItemScale(EQ::ItemInstance *inst) { int slot = m_inv.GetSlotByItemInst(inst); if(slot != -1) { inst->ScaleItem(); @@ -8438,7 +8438,7 @@ void Client::SetConsumption(int32 in_hunger, int32 in_thirst) safe_delete(outapp); } -void Client::Consume(const EQEmu::ItemData *item, uint8 type, int16 slot, bool auto_consume) +void Client::Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto_consume) { if (!item) return; @@ -8450,7 +8450,7 @@ void Client::Consume(const EQEmu::ItemData *item, uint8 type, int16 slot, bool a if (increase < 0) // wasn't food? oh well return; - if (type == EQEmu::item::ItemTypeFood) { + if (type == EQ::item::ItemTypeFood) { increase = mod_food_value(item, increase); if (increase < 0) @@ -8552,13 +8552,13 @@ void Client::ShowNumHits() int Client::GetQuiverHaste(int delay) { - const EQEmu::ItemInstance *pi = nullptr; - for (int r = EQEmu::invslot::GENERAL_BEGIN; r <= EQEmu::invslot::GENERAL_END; r++) { + const EQ::ItemInstance *pi = nullptr; + for (int r = EQ::invslot::GENERAL_BEGIN; r <= EQ::invslot::GENERAL_END; r++) { pi = GetInv().GetItem(r); - if (pi && pi->IsClassBag() && pi->GetItem()->BagType == EQEmu::item::BagTypeQuiver && + if (pi && pi->IsClassBag() && pi->GetItem()->BagType == EQ::item::BagTypeQuiver && pi->GetItem()->BagWR > 0) break; - if (r == EQEmu::invslot::GENERAL_END) + if (r == EQ::invslot::GENERAL_END) // we will get here if we don't find a valid quiver return 0; } @@ -8598,7 +8598,7 @@ void Client::QuestReward(Mob* target, uint32 copper, uint32 silver, uint32 gold, AddMoneyToPP(copper, silver, gold, platinum, false); if (itemid > 0) - SummonItem(itemid, 0, 0, 0, 0, 0, 0, false, EQEmu::invslot::slotCursor); + SummonItem(itemid, 0, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); if (faction) { @@ -8634,7 +8634,7 @@ void Client::QuestReward(Mob* target, const QuestReward_Struct &reward, bool fac for (int i = 0; i < QUESTREWARD_COUNT; ++i) if (reward.item_id[i] > 0) - SummonItem(reward.item_id[i], 0, 0, 0, 0, 0, 0, false, EQEmu::invslot::slotCursor); + SummonItem(reward.item_id[i], 0, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); if (faction) { @@ -9168,19 +9168,19 @@ void Client::SetDevToolsWindowEnabled(bool in_dev_tools_window_enabled) */ void Client::SetPrimaryWeaponOrnamentation(uint32 model_id) { - auto primary_item = m_inv.GetItem(EQEmu::invslot::slotPrimary); + auto primary_item = m_inv.GetItem(EQ::invslot::slotPrimary); if (primary_item) { database.QueryDatabase( StringFormat( "UPDATE `inventory` SET `ornamentidfile` = %i WHERE `charid` = %i AND `slotid` = %i", model_id, character_id, - EQEmu::invslot::slotPrimary + EQ::invslot::slotPrimary )); primary_item->SetOrnamentationIDFile(model_id); - SendItemPacket(EQEmu::invslot::slotPrimary, primary_item, ItemPacketTrade); - WearChange(EQEmu::textures::weaponPrimary, static_cast(model_id), 0); + SendItemPacket(EQ::invslot::slotPrimary, primary_item, ItemPacketTrade); + WearChange(EQ::textures::weaponPrimary, static_cast(model_id), 0); Message(Chat::Yellow, "Your primary weapon appearance has been modified"); } @@ -9191,19 +9191,19 @@ void Client::SetPrimaryWeaponOrnamentation(uint32 model_id) */ void Client::SetSecondaryWeaponOrnamentation(uint32 model_id) { - auto secondary_item = m_inv.GetItem(EQEmu::invslot::slotSecondary); + auto secondary_item = m_inv.GetItem(EQ::invslot::slotSecondary); if (secondary_item) { database.QueryDatabase( StringFormat( "UPDATE `inventory` SET `ornamentidfile` = %i WHERE `charid` = %i AND `slotid` = %i", model_id, character_id, - EQEmu::invslot::slotSecondary + EQ::invslot::slotSecondary )); secondary_item->SetOrnamentationIDFile(model_id); - SendItemPacket(EQEmu::invslot::slotSecondary, secondary_item, ItemPacketTrade); - WearChange(EQEmu::textures::weaponSecondary, static_cast(model_id), 0); + SendItemPacket(EQ::invslot::slotSecondary, secondary_item, ItemPacketTrade); + WearChange(EQ::textures::weaponSecondary, static_cast(model_id), 0); Message(Chat::Yellow, "Your secondary weapon appearance has been modified"); } diff --git a/zone/client.h b/zone/client.h index be842ff50..4253e6643 100644 --- a/zone/client.h +++ b/zone/client.h @@ -29,7 +29,7 @@ class Seperator; class ServerPacket; enum WaterRegionType : int; -namespace EQEmu +namespace EQ { struct ItemData; } @@ -240,9 +240,9 @@ public: bool GotoPlayer(std::string player_name); //abstract virtual function implementations required by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill); - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr); virtual bool HasRaid() { return (GetRaid() ? true : false); } virtual bool HasGroup() { return (GetGroup() ? true : false); } @@ -270,12 +270,12 @@ public: void KeyRingList(); virtual bool IsClient() const { return true; } void CompleteConnect(); - bool TryStacking(EQEmu::ItemInstance* item, uint8 type = ItemPacketTrade, bool try_worn = true, bool try_cursor = true); + bool TryStacking(EQ::ItemInstance* item, uint8 type = ItemPacketTrade, bool try_worn = true, bool try_cursor = true); void SendTraderPacket(Client* trader, uint32 Unknown72 = 51); void SendBuyerPacket(Client* Buyer); GetItems_Struct* GetTraderItems(); void SendBazaarWelcome(); - void DyeArmor(EQEmu::TintProfile* dye); + void DyeArmor(EQ::TintProfile* dye); uint8 SlotConvert(uint8 slot,bool bracer=false); void MessageString(uint32 type, uint32 string_id, uint32 distance = 0); void MessageString(uint32 type, uint32 string_id, const char* message,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0, uint32 distance = 0); @@ -293,7 +293,7 @@ public: void SendTraderItem(uint32 item_id,uint16 quantity); uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity); uint32 FindTraderItemSerialNumber(int32 ItemID); - EQEmu::ItemInstance* FindTraderItemBySerialNumber(int32 SerialNumber); + EQ::ItemInstance* FindTraderItemBySerialNumber(int32 SerialNumber); void FindAndNukeTraderItem(int32 item_id,uint16 quantity,Client* customer,uint16 traderslot); void NukeTraderItem(uint16 slot, int16 charges, uint16 quantity, Client* customer, uint16 traderslot, int32 uniqueid, int32 itemid = 0); void ReturnTraderReq(const EQApplicationPacket* app,int16 traderitemcharges, uint32 itemid = 0); @@ -316,7 +316,7 @@ public: bool ShouldISpawnFor(Client *c) { return !GMHideMe(c) && !IsHoveringForRespawn(); } virtual bool Process(); void ProcessPackets(); - void LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemData* item, bool buying); + void LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQ::ItemData* item, bool buying); void QueuePacket(const EQApplicationPacket* app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL, eqFilterType filter=FilterNone); void FastQueuePacket(EQApplicationPacket** app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL); void ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_skill, const char* orig_message, const char* targetname=nullptr); @@ -326,9 +326,9 @@ public: void VoiceMacroReceived(uint32 Type, char *Target, uint32 MacroNumber); void SendSound(); void LearnRecipe(uint32 recipeID); - bool CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill); + bool CanIncreaseTradeskill(EQ::skills::SkillType tradeskill); - EQApplicationPacket* ReturnItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type); + EQApplicationPacket* ReturnItemPacket(int16 slot_id, const EQ::ItemInstance* inst, ItemPacketType packet_type); bool GetRevoked() const { return revoked; } void SetRevoked(bool rev) { revoked = rev; } @@ -360,8 +360,8 @@ public: inline uint8 GetAnon() const { return m_pp.anon; } inline PlayerProfile_Struct& GetPP() { return m_pp; } inline ExtendedProfile_Struct& GetEPP() { return m_epp; } - inline EQEmu::InventoryProfile& GetInv() { return m_inv; } - inline const EQEmu::InventoryProfile& GetInv() const { return m_inv; } + inline EQ::InventoryProfile& GetInv() { return m_inv; } + inline const EQ::InventoryProfile& GetInv() const { return m_inv; } inline PetInfo* GetPetInfo(uint16 pet) { return (pet==1)?&m_suspendedminion:&m_petinfo; } inline InspectMessage_Struct& GetInspectMessage() { return m_inspect_message; } inline const InspectMessage_Struct& GetInspectMessage() const { return m_inspect_message; } @@ -435,7 +435,7 @@ public: inline uint8 GetLanguageSkill(uint16 n) const { return m_pp.languages[n]; } - void SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemData* item = nullptr); + void SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQ::ItemData* item = nullptr); inline const char* GetLastName() const { return lastname; } @@ -539,10 +539,10 @@ public: virtual int GetCurrentBuffSlots() const; virtual int GetCurrentSongSlots() const; virtual int GetCurrentDiscSlots() const { return 1; } - virtual int GetMaxBuffSlots() const { return EQEmu::spells::LONG_BUFFS; } - virtual int GetMaxSongSlots() const { return EQEmu::spells::SHORT_BUFFS; } - virtual int GetMaxDiscSlots() const { return EQEmu::spells::DISC_BUFFS; } - virtual int GetMaxTotalSlots() const { return EQEmu::spells::TOTAL_BUFFS; } + virtual int GetMaxBuffSlots() const { return EQ::spells::LONG_BUFFS; } + virtual int GetMaxSongSlots() const { return EQ::spells::SHORT_BUFFS; } + virtual int GetMaxDiscSlots() const { return EQ::spells::DISC_BUFFS; } + virtual int GetMaxTotalSlots() const { return EQ::spells::TOTAL_BUFFS; } virtual uint32 GetFirstBuffSlot(bool disc, bool song); virtual uint32 GetLastBuffSlot(bool disc, bool song); virtual void InitializeBuffSlots(); @@ -637,7 +637,7 @@ public: void AssignToInstance(uint16 instance_id); void RemoveFromInstance(uint16 instance_id); void WhoAll(); - bool CheckLoreConflict(const EQEmu::ItemData* item); + bool CheckLoreConflict(const EQ::ItemData* item); void ChangeLastName(const char* in_lastname); void GetGroupAAs(GroupLeadershipAA_Struct *into) const; void GetRaidAAs(RaidLeadershipAA_Struct *into) const; @@ -725,31 +725,31 @@ public: uint16 GetSkillPoints() { return m_pp.points;} void SetSkillPoints(int inp) { m_pp.points = inp;} - void IncreaseSkill(int skill_id, int value = 1) { if (skill_id <= EQEmu::skills::HIGHEST_SKILL) { m_pp.skills[skill_id] += value; } } + void IncreaseSkill(int skill_id, int value = 1) { if (skill_id <= EQ::skills::HIGHEST_SKILL) { m_pp.skills[skill_id] += value; } } void IncreaseLanguageSkill(int skill_id, int value = 1); - virtual uint16 GetSkill(EQEmu::skills::SkillType skill_id) const { if (skill_id <= EQEmu::skills::HIGHEST_SKILL) { return(itembonuses.skillmod[skill_id] > 0 ? (itembonuses.skillmodmax[skill_id] > 0 ? std::min(m_pp.skills[skill_id] + itembonuses.skillmodmax[skill_id], m_pp.skills[skill_id] * (100 + itembonuses.skillmod[skill_id]) / 100) : m_pp.skills[skill_id] * (100 + itembonuses.skillmod[skill_id]) / 100) : m_pp.skills[skill_id]); } return 0; } - uint32 GetRawSkill(EQEmu::skills::SkillType skill_id) const { if (skill_id <= EQEmu::skills::HIGHEST_SKILL) { return(m_pp.skills[skill_id]); } return 0; } - bool HasSkill(EQEmu::skills::SkillType skill_id) const; - bool CanHaveSkill(EQEmu::skills::SkillType skill_id) const; - void SetSkill(EQEmu::skills::SkillType skill_num, uint16 value); - void AddSkill(EQEmu::skills::SkillType skillid, uint16 value); + virtual uint16 GetSkill(EQ::skills::SkillType skill_id) const { if (skill_id <= EQ::skills::HIGHEST_SKILL) { return(itembonuses.skillmod[skill_id] > 0 ? (itembonuses.skillmodmax[skill_id] > 0 ? std::min(m_pp.skills[skill_id] + itembonuses.skillmodmax[skill_id], m_pp.skills[skill_id] * (100 + itembonuses.skillmod[skill_id]) / 100) : m_pp.skills[skill_id] * (100 + itembonuses.skillmod[skill_id]) / 100) : m_pp.skills[skill_id]); } return 0; } + uint32 GetRawSkill(EQ::skills::SkillType skill_id) const { if (skill_id <= EQ::skills::HIGHEST_SKILL) { return(m_pp.skills[skill_id]); } return 0; } + bool HasSkill(EQ::skills::SkillType skill_id) const; + bool CanHaveSkill(EQ::skills::SkillType skill_id) const; + void SetSkill(EQ::skills::SkillType skill_num, uint16 value); + void AddSkill(EQ::skills::SkillType skillid, uint16 value); void CheckSpecializeIncrease(uint16 spell_id); void CheckSongSkillIncrease(uint16 spell_id); - bool CheckIncreaseSkill(EQEmu::skills::SkillType skillid, Mob *against_who, int chancemodi = 0); + bool CheckIncreaseSkill(EQ::skills::SkillType skillid, Mob *against_who, int chancemodi = 0); void CheckLanguageSkillIncrease(uint8 langid, uint8 TeacherSkill); void SetLanguageSkill(int langid, int value); void SetHoTT(uint32 mobid); void ShowSkillsWindow(); void SendStatsWindow(Client* client, bool use_window); - uint16 MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const; - inline uint16 MaxSkill(EQEmu::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } - uint8 SkillTrainLevel(EQEmu::skills::SkillType skillid, uint16 class_); + uint16 MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const; + inline uint16 MaxSkill(EQ::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } + uint8 SkillTrainLevel(EQ::skills::SkillType skillid, uint16 class_); void TradeskillSearchResults(const std::string &query, unsigned long objtype, unsigned long someid); void SendTradeskillDetails(uint32 recipe_id); bool TradeskillExecute(DBTradeskillRecipe_Struct *spec); - void CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float skillup_modifier, uint16 success_modifier, EQEmu::skills::SkillType tradeskill); + void CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float skillup_modifier, uint16 success_modifier, EQ::skills::SkillType tradeskill); void InitInnates(); void GMKill(); @@ -791,7 +791,7 @@ public: #endif uint32 GetEquippedItemFromTextureSlot(uint8 material_slot) const; // returns item id uint32 GetEquipmentColor(uint8 material_slot) const; - virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); } + virtual void UpdateEquipmentLight() { m_Light.Type[EQ::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } inline bool AutoSplitEnabled() { return m_pp.autosplit != 0; } inline bool AutoConsentGroupEnabled() const { return m_pp.groupAutoconsent != 0; } @@ -863,31 +863,31 @@ public: uint32 NukeItem(uint32 itemnum, uint8 where_to_check = (invWhereWorn | invWherePersonal | invWhereBank | invWhereSharedBank | invWhereTrading | invWhereCursor)); void SetTint(int16 slot_id, uint32 color); - void SetTint(int16 slot_id, EQEmu::textures::Tint_Struct& color); + void SetTint(int16 slot_id, EQ::textures::Tint_Struct& color); void SetMaterial(int16 slot_id, uint32 item_id); void Undye(); int32 GetItemIDAt(int16 slot_id); int32 GetAugmentIDAt(int16 slot_id, uint8 augslot); - bool PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, bool client_update = false); - bool PushItemOnCursor(const EQEmu::ItemInstance& inst, bool client_update = false); + bool PutItemInInventory(int16 slot_id, const EQ::ItemInstance& inst, bool client_update = false); + bool PushItemOnCursor(const EQ::ItemInstance& inst, bool client_update = false); void SendCursorBuffer(); void DeleteItemInInventory(int16 slot_id, int8 quantity = 0, bool client_update = false, bool update_db = true); bool SwapItem(MoveItem_Struct* move_in); void SwapItemResync(MoveItem_Struct* move_slots); void QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call = false); - void PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, ServerLootItem_Struct** bag_item_data = 0); - bool AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn = false, bool try_cursor = true, ServerLootItem_Struct** bag_item_data = 0); - bool SummonItem(uint32 item_id, int16 charges = -1, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, bool attuned = false, uint16 to_slot = EQEmu::invslot::slotCursor, uint32 ornament_icon = 0, uint32 ornament_idfile = 0, uint32 ornament_hero_model = 0); + void PutLootInInventory(int16 slot_id, const EQ::ItemInstance &inst, ServerLootItem_Struct** bag_item_data = 0); + bool AutoPutLootInInventory(EQ::ItemInstance& inst, bool try_worn = false, bool try_cursor = true, ServerLootItem_Struct** bag_item_data = 0); + bool SummonItem(uint32 item_id, int16 charges = -1, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, bool attuned = false, uint16 to_slot = EQ::invslot::slotCursor, uint32 ornament_icon = 0, uint32 ornament_idfile = 0, uint32 ornament_hero_model = 0); void SetStats(uint8 type,int16 set_val); void IncStats(uint8 type,int16 increase_val); void DropItem(int16 slot_id, bool recurse = true); - void DropItemQS(EQEmu::ItemInstance* inst, bool pickup); + void DropItemQS(EQ::ItemInstance* inst, bool pickup); - int GetItemLinkHash(const EQEmu::ItemInstance* inst); // move to ItemData..or make use of the pre-calculated database field + int GetItemLinkHash(const EQ::ItemInstance* inst); // move to ItemData..or make use of the pre-calculated database field - void SendItemLink(const EQEmu::ItemInstance* inst, bool sendtoall=false); - void SendLootItemInPacket(const EQEmu::ItemInstance* inst, int16 slot_id); - void SendItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type); + void SendItemLink(const EQ::ItemInstance* inst, bool sendtoall=false); + void SendLootItemInPacket(const EQ::ItemInstance* inst, int16 slot_id); + void SendItemPacket(int16 slot_id, const EQ::ItemInstance* inst, ItemPacketType packet_type); bool IsValidSlot(uint32 slot); bool IsBankSlot(uint32 slot); @@ -945,7 +945,7 @@ public: //Calculate vendor price modifier based on CHA: (reverse==selling) float CalcPriceMod(Mob* other = 0, bool reverse = false); void ResetTrade(); - void DropInst(const EQEmu::ItemInstance* inst); + void DropInst(const EQ::ItemInstance* inst); bool TrainDiscipline(uint32 itemid); void TrainDiscBySpellID(int32 spell_id); int GetDiscSlotBySpellID(int32 spellid); @@ -977,7 +977,7 @@ public: int GetNextAvailableSpellBookSlot(int starting_slot = 0); inline uint32 GetSpellByBookSlot(int book_slot) { return m_pp.spell_book[book_slot]; } inline bool HasSpellScribed(int spellid) { return (FindSpellBookSlotBySpellID(spellid) != -1 ? true : false); } - uint16 GetMaxSkillAfterSpecializationRules(EQEmu::skills::SkillType skillid, uint16 maxSkill); + uint16 GetMaxSkillAfterSpecializationRules(EQ::skills::SkillType skillid, uint16 maxSkill); void SendPopupToClient(const char *Title, const char *Text, uint32 PopupID = 0, uint32 Buttons = 0, uint32 Duration = 0); void SendFullPopup(const char *Title, const char *Text, uint32 PopupID = 0, uint32 NegativeID = 0, uint32 Buttons = 0, uint32 Duration = 0, const char *ButtonName0 = 0, const char *ButtonName1 = 0, uint32 SoundControls = 0); void SendWindow(uint32 PopupID, uint32 NegativeID, uint32 Buttons, const char *ButtonName0, const char *ButtonName1, uint32 Duration, int title_type, Client* target, const char *Title, const char *Text, ...); @@ -1008,7 +1008,7 @@ public: inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); } inline void UpdateTasksOnExplore(int ExploreID) { if(taskstate) taskstate->UpdateTasksOnExplore(this, ExploreID); } inline bool UpdateTasksOnSpeakWith(int NPCTypeID) { if(taskstate) return taskstate->UpdateTasksOnSpeakWith(this, NPCTypeID); else return false; } - inline bool UpdateTasksOnDeliver(std::list& Items, int Cash, int NPCTypeID) { if (taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; } + inline bool UpdateTasksOnDeliver(std::list& Items, int Cash, int NPCTypeID) { if (taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; } inline void TaskSetSelector(Mob *mob, int TaskSetID) { if(taskmanager) taskmanager->TaskSetSelector(this, taskstate, mob, TaskSetID); } inline void TaskQuestSetSelector(Mob *mob, int count, int *tasks) { if(taskmanager) taskmanager->TaskQuestSetSelector(this, taskstate, mob, count, tasks); } inline void EnableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->EnableTask(CharacterID(), TaskCount, TaskList); } @@ -1033,9 +1033,9 @@ public: inline int ActiveTasksInSet(int TaskSet) { return (taskstate ? taskstate->ActiveTasksInSet(TaskSet) :0); } inline int CompletedTasksInSet(int TaskSet) { return (taskstate ? taskstate->CompletedTasksInSet(TaskSet) :0); } - inline const EQEmu::versions::ClientVersion ClientVersion() const { return m_ClientVersion; } + inline const EQ::versions::ClientVersion ClientVersion() const { return m_ClientVersion; } inline const uint32 ClientVersionBit() const { return m_ClientVersionBit; } - inline void SetClientVersion(EQEmu::versions::ClientVersion client_version) { m_ClientVersion = client_version; } + inline void SetClientVersion(EQ::versions::ClientVersion client_version) { m_ClientVersion = client_version; } /** Adventure Stuff **/ void SendAdventureError(const char *error); @@ -1124,7 +1124,7 @@ public: inline bool GetPendingGuildInvitation() { return PendingGuildInvitation; } void LocateCorpse(); void SendTargetCommand(uint32 EntityID); - bool MoveItemToInventory(EQEmu::ItemInstance *BInst, bool UpdateClient = false); + bool MoveItemToInventory(EQ::ItemInstance *BInst, bool UpdateClient = false); void HandleRespawnFromHover(uint32 Option); bool IsHoveringForRespawn() { return RespawnFromHoverTimer.Enabled(); } std::list respawn_options; @@ -1153,7 +1153,7 @@ public: void HandleLFGuildResponse(ServerPacket *pack); void SendLFGuildStatus(); void SendGuildLFGuildStatus(); - inline bool XTargettingAvailable() const { return ((m_ClientVersionBit & EQEmu::versions::maskUFAndLater) && RuleB(Character, EnableXTargetting)); } + inline bool XTargettingAvailable() const { return ((m_ClientVersionBit & EQ::versions::maskUFAndLater) && RuleB(Character, EnableXTargetting)); } inline uint8 GetMaxXTargets() const { return MaxXTargets; } void SetMaxXTargets(uint8 NewMax); bool IsXTarget(const Mob *m) const; @@ -1177,7 +1177,7 @@ public: bool GroupFollow(Client* inviter); inline bool GetRunMode() const { return runmode; } - inline bool AggroMeterAvailable() const { return ((m_ClientVersionBit & EQEmu::versions::maskRoF2AndLater)) && RuleB(Character, EnableAggroMeter); } // RoF untested + inline bool AggroMeterAvailable() const { return ((m_ClientVersionBit & EQ::versions::maskRoF2AndLater)) && RuleB(Character, EnableAggroMeter); } // RoF untested inline void SetAggroMeterLock(int in) { m_aggrometer.set_lock_id(in); } void ProcessAggroMeter(); // builds packet and sends @@ -1229,7 +1229,7 @@ public: void TryItemTick(int slot); void ItemTimerCheck(); void TryItemTimer(int slot); - void SendItemScale(EQEmu::ItemInstance *inst); + void SendItemScale(EQ::ItemInstance *inst); int32 GetActSTR() { return( std::min(GetMaxSTR(), GetSTR()) ); } int32 GetActSTA() { return( std::min(GetMaxSTA(), GetSTA()) ); } @@ -1241,13 +1241,13 @@ public: void LoadAccountFlags(); void SetAccountFlag(std::string flag, std::string val); std::string GetAccountFlag(std::string flag); - float GetDamageMultiplier(EQEmu::skills::SkillType how_long_has_this_been_missing); - void Consume(const EQEmu::ItemData *item, uint8 type, int16 slot, bool auto_consume); + float GetDamageMultiplier(EQ::skills::SkillType how_long_has_this_been_missing); + void Consume(const EQ::ItemData *item, uint8 type, int16 slot, bool auto_consume); void PlayMP3(const char* fname); void ExpeditionSay(const char *str, int ExpID); - int mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemInstance* weapon, Mob* other); + int mod_client_damage(int damage, EQ::skills::SkillType skillinuse, int hand, const EQ::ItemInstance* weapon, Mob* other); bool mod_client_message(char* message, uint8 chan_num); - bool mod_can_increase_skill(EQEmu::skills::SkillType skillid, Mob* against_who); + bool mod_can_increase_skill(EQ::skills::SkillType skillid, Mob* against_who); int16 mod_increase_skill_chance(int16 chance, Mob* against_who); int mod_bindwound_percent(int max_percent, Mob* bindmob); int mod_bindwound_hp(int bindhps, Mob* bindmob); @@ -1257,16 +1257,16 @@ public: int16 mod_pet_power(int16 act_power, uint16 spell_id); float mod_tradeskill_chance(float chance, DBTradeskillRecipe_Struct *spec); float mod_tradeskill_skillup(float chance_stage2); - int32 mod_tribute_item_value(int32 pts, const EQEmu::ItemInstance* item); + int32 mod_tribute_item_value(int32 pts, const EQ::ItemInstance* item); void mod_client_death_npc(Mob* killerMob); void mod_client_death_duel(Mob* killerMob); void mod_client_death_env(); int32 mod_client_xp(int32 in_exp, NPC *npc); uint32 mod_client_xp_for_level(uint32 xp, uint16 check_level); int mod_client_haste_cap(int cap); - int mod_consume(EQEmu::ItemData *item, EQEmu::item::ItemType type, int change); - int mod_food_value(const EQEmu::ItemData *item, int change); - int mod_drink_value(const EQEmu::ItemData *item, int change); + int mod_consume(EQ::ItemData *item, EQ::item::ItemType type, int change); + int mod_food_value(const EQ::ItemData *item, int change); + int mod_drink_value(const EQ::ItemData *item, int change); void ShowNumHits(); // work around function for numhits not showing on buffs @@ -1309,8 +1309,8 @@ public: protected: friend class Mob; void CalcItemBonuses(StatBonuses* newbon); - void AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0, bool ammo_slot_item = false); - void AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false); + void AddItemBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0, bool ammo_slot_item = false); + void AdditiveWornBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug = false); int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CalcEdibleBonuses(StatBonuses* newbon); void ProcessItemCaps(); @@ -1352,7 +1352,7 @@ private: void OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 InstanceID, float x, float y, float z); void OPMemorizeSpell(const EQApplicationPacket *app); void OPMoveCoin(const EQApplicationPacket* app); - void MoveItemCharges(EQEmu::ItemInstance &from, int16 to_slot, uint8 type); + void MoveItemCharges(EQ::ItemInstance &from, int16 to_slot, uint8 type); void OPGMTraining(const EQApplicationPacket *app); void OPGMEndTraining(const EQApplicationPacket *app); void OPGMTrainSkill(const EQApplicationPacket *app); @@ -1466,7 +1466,7 @@ private: PlayerProfile_Struct m_pp; ExtendedProfile_Struct m_epp; - EQEmu::InventoryProfile m_inv; + EQ::InventoryProfile m_inv; Object* m_tradeskill_object; PetInfo m_petinfo; // current pet data, used while loading from and saving to DB PetInfo m_suspendedminion; // pet data for our suspended minion. @@ -1580,7 +1580,7 @@ private: Timer *GlobalChatLimiterTimer; //60 seconds uint32 AttemptedMessages; - EQEmu::versions::ClientVersion m_ClientVersion; + EQ::versions::ClientVersion m_ClientVersion; uint32 m_ClientVersionBit; int XPRate; @@ -1635,8 +1635,8 @@ private: bool interrogateinv_flag; // used to minimize log spamming by players - void InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, bool log, bool silent, bool &error, int depth); - bool InterrogateInventory_error(int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, int depth); + void InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQ::ItemInstance* inst, const EQ::ItemInstance* parent, bool log, bool silent, bool &error, int depth); + bool InterrogateInventory_error(int16 head, int16 index, const EQ::ItemInstance* inst, const EQ::ItemInstance* parent, int depth); int client_max_level; diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 255201090..ec01a00b5 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -44,7 +44,7 @@ int32 Client::GetMaxStat() const if (level < 61) { base = 255; } - else if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + else if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { base = 255 + 5 * (level - 60); } else if (level < 71) { @@ -482,7 +482,7 @@ uint32 Mob::GetClassLevelFactor() int32 Client::CalcBaseHP() { - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { int stats = GetSTA(); if (stats > 255) { stats = (stats - 255) / 2; @@ -558,8 +558,8 @@ int32 Client::GetRawItemAC() { int32 Total = 0; // this skips MainAmmo..add an '=' conditional if that slot is required (original behavior) - for (int16 slot_id = EQEmu::invslot::BONUS_BEGIN; slot_id <= EQEmu::invslot::BONUS_STAT_END; slot_id++) { - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + for (int16 slot_id = EQ::invslot::BONUS_BEGIN; slot_id <= EQ::invslot::BONUS_STAT_END; slot_id++) { + const EQ::ItemInstance* inst = m_inv[slot_id]; if (inst && inst->IsClassCommon()) { Total += inst->GetItem()->AC; } @@ -613,7 +613,7 @@ int32 Client::CalcBaseMana() switch (GetCasterClass()) { case 'I': WisInt = GetINT(); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { ConvertedWisInt = WisInt; int over200 = WisInt; if (WisInt > 100) { @@ -645,7 +645,7 @@ int32 Client::CalcBaseMana() break; case 'W': WisInt = GetWIS(); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { ConvertedWisInt = WisInt; int over200 = WisInt; if (WisInt > 100) { @@ -696,8 +696,8 @@ int32 Client::CalcBaseManaRegen() uint8 clevel = GetLevel(); int32 regen = 0; if (IsSitting() || (GetHorseId() != 0)) { - if (HasSkill(EQEmu::skills::SkillMeditate)) { - regen = (((GetSkill(EQEmu::skills::SkillMeditate) / 10) + (clevel - (clevel / 4))) / 4) + 4; + if (HasSkill(EQ::skills::SkillMeditate)) { + regen = (((GetSkill(EQ::skills::SkillMeditate) / 10) + (clevel - (clevel / 4))) / 4) + 4; } else { regen = 2; @@ -723,7 +723,7 @@ int32 Client::CalcManaRegen(bool bCombat) // kind of weird to do it here w/e // client does some base medding regen for shrouds here if (GetClass() != BARD) { - auto skill = GetSkill(EQEmu::skills::SkillMeditate); + auto skill = GetSkill(EQ::skills::SkillMeditate); if (skill > 0) { regen++; if (skill > 1) @@ -787,11 +787,11 @@ int32 Client::CalcManaRegenCap() uint32 Client::CalcCurrentWeight() { - const EQEmu::ItemData* TempItem = nullptr; - EQEmu::ItemInstance* ins = nullptr; + const EQ::ItemData* TempItem = nullptr; + EQ::ItemInstance* ins = nullptr; uint32 Total = 0; int x; - for (x = EQEmu::invslot::POSSESSIONS_BEGIN; x <= EQEmu::invslot::POSSESSIONS_END; x++) { + for (x = EQ::invslot::POSSESSIONS_BEGIN; x <= EQ::invslot::POSSESSIONS_END; x++) { TempItem = 0; ins = GetInv().GetItem(x); if (ins) { @@ -801,7 +801,7 @@ uint32 Client::CalcCurrentWeight() Total += TempItem->Weight; } } - for (x = EQEmu::invbag::GENERAL_BAGS_BEGIN; x <= EQEmu::invbag::CURSOR_BAG_END; x++) { + for (x = EQ::invbag::GENERAL_BAGS_BEGIN; x <= EQ::invbag::CURSOR_BAG_END; x++) { int TmpWeight = 0; TempItem = 0; ins = GetInv().GetItem(x); @@ -814,14 +814,14 @@ uint32 Client::CalcCurrentWeight() if (TmpWeight > 0) { // this code indicates that weight redux bags can only be in the first general inventory slot to be effective... // is this correct? or can we scan for the highest weight redux and use that? (need client verifications) - int bagslot = EQEmu::invslot::slotGeneral1; + int bagslot = EQ::invslot::slotGeneral1; int reduction = 0; - for (int m = EQEmu::invbag::GENERAL_BAGS_BEGIN + EQEmu::invbag::SLOT_COUNT; m <= EQEmu::invbag::CURSOR_BAG_END; m += EQEmu::invbag::SLOT_COUNT) { + for (int m = EQ::invbag::GENERAL_BAGS_BEGIN + EQ::invbag::SLOT_COUNT; m <= EQ::invbag::CURSOR_BAG_END; m += EQ::invbag::SLOT_COUNT) { if (x >= m) { bagslot += 1; } } - EQEmu::ItemInstance* baginst = GetInv().GetItem(bagslot); + EQ::ItemInstance* baginst = GetInv().GetItem(bagslot); if (baginst && baginst->GetItem() && baginst->IsClassBag()) { reduction = baginst->GetItem()->BagWR; } @@ -840,7 +840,7 @@ uint32 Client::CalcCurrentWeight() This is the ONLY instance I have seen where the client is hard coded to particular Item IDs to set a certain property for an item. It is very odd. */ // SoD+ client has no weight for coin - if (EQEmu::behavior::StaticLookup(EQEmu::versions::ConvertClientVersionToMobVersion(ClientVersion()))->CoinHasWeight) { + if (EQ::behavior::StaticLookup(EQ::versions::ConvertClientVersionToMobVersion(ClientVersion()))->CoinHasWeight) { Total += (m_pp.platinum + m_pp.gold + m_pp.silver + m_pp.copper) / 4; } float Packrat = (float)spellbonuses.Packrat + (float)aabonuses.Packrat + (float)itembonuses.Packrat; @@ -1531,10 +1531,10 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const // clickies (Symphony of Battle) that have a song skill don't get AA bonus for some reason // but clickies that are songs (selo's on Composers Greaves) do get AA mod as well switch (spells[spell_id].skill) { - case EQEmu::skills::SkillPercussionInstruments: + case EQ::skills::SkillPercussionInstruments: if (itembonuses.percussionMod == 0 && spellbonuses.percussionMod == 0) effectmod = 10; - else if (GetSkill(EQEmu::skills::SkillPercussionInstruments) == 0) + else if (GetSkill(EQ::skills::SkillPercussionInstruments) == 0) effectmod = 10; else if (itembonuses.percussionMod > spellbonuses.percussionMod) effectmod = itembonuses.percussionMod; @@ -1543,10 +1543,10 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const if (IsBardSong(spell_id)) effectmod += aabonuses.percussionMod; break; - case EQEmu::skills::SkillStringedInstruments: + case EQ::skills::SkillStringedInstruments: if (itembonuses.stringedMod == 0 && spellbonuses.stringedMod == 0) effectmod = 10; - else if (GetSkill(EQEmu::skills::SkillStringedInstruments) == 0) + else if (GetSkill(EQ::skills::SkillStringedInstruments) == 0) effectmod = 10; else if (itembonuses.stringedMod > spellbonuses.stringedMod) effectmod = itembonuses.stringedMod; @@ -1555,10 +1555,10 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const if (IsBardSong(spell_id)) effectmod += aabonuses.stringedMod; break; - case EQEmu::skills::SkillWindInstruments: + case EQ::skills::SkillWindInstruments: if (itembonuses.windMod == 0 && spellbonuses.windMod == 0) effectmod = 10; - else if (GetSkill(EQEmu::skills::SkillWindInstruments) == 0) + else if (GetSkill(EQ::skills::SkillWindInstruments) == 0) effectmod = 10; else if (itembonuses.windMod > spellbonuses.windMod) effectmod = itembonuses.windMod; @@ -1567,10 +1567,10 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const if (IsBardSong(spell_id)) effectmod += aabonuses.windMod; break; - case EQEmu::skills::SkillBrassInstruments: + case EQ::skills::SkillBrassInstruments: if (itembonuses.brassMod == 0 && spellbonuses.brassMod == 0) effectmod = 10; - else if (GetSkill(EQEmu::skills::SkillBrassInstruments) == 0) + else if (GetSkill(EQ::skills::SkillBrassInstruments) == 0) effectmod = 10; else if (itembonuses.brassMod > spellbonuses.brassMod) effectmod = itembonuses.brassMod; @@ -1579,7 +1579,7 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id) const if (IsBardSong(spell_id)) effectmod += aabonuses.brassMod; break; - case EQEmu::skills::SkillSinging: + case EQ::skills::SkillSinging: if (itembonuses.singingMod == 0 && spellbonuses.singingMod == 0) effectmod = 10; else if (itembonuses.singingMod > spellbonuses.singingMod) @@ -1626,7 +1626,7 @@ void Client::CalcMaxEndurance() int32 Client::CalcBaseEndurance() { int32 base_end = 0; - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF && RuleB(Character, SoDClientUseSoDHPManaEnd)) { double heroic_stats = (GetHeroicSTR() + GetHeroicSTA() + GetHeroicDEX() + GetHeroicAGI()) / 4.0f; double stats = (GetSTR() + GetSTA() + GetDEX() + GetAGI()) / 4.0f; if (stats > 201.0f) { @@ -1765,12 +1765,12 @@ int Client::GetRawACNoShield(int &shield_ac) const { int ac = itembonuses.AC + spellbonuses.AC + aabonuses.AC; shield_ac = 0; - const EQEmu::ItemInstance *inst = m_inv.GetItem(EQEmu::invslot::slotSecondary); + const EQ::ItemInstance *inst = m_inv.GetItem(EQ::invslot::slotSecondary); if (inst) { - if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) { + if (inst->GetItem()->ItemType == EQ::item::ItemTypeShield) { ac -= inst->GetItem()->AC; shield_ac = inst->GetItem()->AC; - for (uint8 i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (uint8 i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (inst->GetAugment(i)) { ac -= inst->GetAugment(i)->GetItem()->AC; shield_ac += inst->GetAugment(i)->GetItem()->AC; diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 1267386eb..1bdf3d0d0 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -442,7 +442,7 @@ int Client::HandlePacket(const EQApplicationPacket *app) case CLIENT_CONNECTING: { if (ConnectingOpcodes.count(opcode) != 1) { //Hate const cast but everything in lua needs to be non-const even if i make it non-mutable - std::vector args; + std::vector args; args.push_back(const_cast(app)); parse->EventPlayer(EVENT_UNHANDLED_OPCODE, this, "", 1, &args); @@ -466,7 +466,7 @@ int Client::HandlePacket(const EQApplicationPacket *app) ClientPacketProc p; p = ConnectedOpcodes[opcode]; if (p == nullptr) { - std::vector args; + std::vector args; args.push_back(const_cast(app)); parse->EventPlayer(EVENT_UNHANDLED_OPCODE, this, "", 0, &args); @@ -514,7 +514,7 @@ void Client::CompleteConnect() if (IsInAGuild()) { uint8 rank = GuildRank(); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { switch (rank) { case 0: { rank = 5; break; } // GUILD_MEMBER 0 @@ -528,9 +528,9 @@ void Client::CompleteConnect() } // moved to dbload and translators since we iterate there also .. keep m_pp values whatever they are when they get here - /*const auto sbs = EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize; + /*const auto sbs = EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize; for (uint32 spellInt = 0; spellInt < sbs; ++spellInt) { - if (m_pp.spell_book[spellInt] < 3 || m_pp.spell_book[spellInt] > EQEmu::spells::SPELL_ID_MAX) + if (m_pp.spell_book[spellInt] < 3 || m_pp.spell_book[spellInt] > EQ::spells::SPELL_ID_MAX) m_pp.spell_book[spellInt] = 0xFFFFFFFF; }*/ @@ -753,7 +753,7 @@ void Client::CompleteConnect() entity_list.SendUntargetable(this); int x; - for (x = EQEmu::textures::textureBegin; x <= EQEmu::textures::LastTexture; x++) { + for (x = EQ::textures::textureBegin; x <= EQ::textures::LastTexture; x++) { SendWearChange(x); } // added due to wear change above @@ -762,7 +762,7 @@ void Client::CompleteConnect() Mob *pet = GetPet(); if (pet != nullptr) { - for (x = EQEmu::textures::textureBegin; x <= EQEmu::textures::LastTexture; x++) { + for (x = EQ::textures::textureBegin; x <= EQ::textures::LastTexture; x++) { pet->SendWearChange(x); } // added due to wear change above @@ -875,7 +875,7 @@ void Client::CompleteConnect() if (zone->GetZoneID() == RuleI(World, GuildBankZoneID) && GuildBanks) GuildBanks->SendGuildBank(this); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) entity_list.SendFindableNPCList(this); if (IsInAGuild()) { @@ -890,14 +890,14 @@ void Client::CompleteConnect() worldserver.SendPacket(pack); delete pack; - if (IsClient() && CastToClient()->ClientVersionBit() & EQEmu::versions::maskUFAndLater) { + if (IsClient() && CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater) { EQApplicationPacket *outapp = MakeBuffsPacket(false); CastToClient()->FastQueuePacket(&outapp); } // TODO: load these states // We at least will set them to the correct state for now - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater && GetPet()) { + if (m_ClientVersionBit & EQ::versions::maskUFAndLater && GetPet()) { SetPetCommandState(PET_BUTTON_SIT, 0); SetPetCommandState(PET_BUTTON_STOP, 0); SetPetCommandState(PET_BUTTON_REGROUP, 0); @@ -1005,7 +1005,7 @@ void Client::Handle_Connect_OP_ReqClientSpawn(const EQApplicationPacket *app) outapp = new EQApplicationPacket(OP_SendExpZonein, 0); FastQueuePacket(&outapp); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { outapp = new EQApplicationPacket(OP_ClientReady, 0); FastQueuePacket(&outapp); @@ -1069,7 +1069,7 @@ void Client::Handle_Connect_OP_SendExpZonein(const EQApplicationPacket *app) safe_delete(outapp); // SoF+ Gets Zone-In packets after sending OP_WorldObjectsSent - if (ClientVersion() < EQEmu::versions::ClientVersion::SoF) + if (ClientVersion() < EQ::versions::ClientVersion::SoF) { SendZoneInPackets(); } @@ -1166,7 +1166,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) conn_state = ReceivedZoneEntry; SetClientVersion(Connection()->ClientVersion()); - m_ClientVersionBit = EQEmu::versions::ConvertClientVersionToClientVersionBit(Connection()->ClientVersion()); + m_ClientVersionBit = EQ::versions::ConvertClientVersionToClientVersionBit(Connection()->ClientVersion()); m_pp.SetPlayerProfileVersion(m_ClientVersion); m_inv.SetInventoryVersion(m_ClientVersion); @@ -1281,7 +1281,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) } /* Set item material tint */ - for (int i = EQEmu::textures::textureBegin; i <= EQEmu::textures::LastTexture; i++) + for (int i = EQ::textures::textureBegin; i <= EQ::textures::LastTexture; i++) { if (m_pp.item_tint.Slot[i].UseTint == 1 || m_pp.item_tint.Slot[i].UseTint == 255) { @@ -1370,7 +1370,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) m_pp.guild_id = GuildID(); uint8 rank = guild_mgr.GetDisplayedRank(GuildID(), GuildRank(), CharacterID()); // FIXME: RoF guild rank - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { switch (rank) { case 0: rank = 5; @@ -1424,10 +1424,10 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000) { m_pp.ldon_points_available = 0; } if (RuleB(World, UseClientBasedExpansionSettings)) { - m_pp.expansions = EQEmu::expansions::ConvertClientVersionToExpansionsMask(ClientVersion()); + m_pp.expansions = EQ::expansions::ConvertClientVersionToExpansionsMask(ClientVersion()); } else { - m_pp.expansions = (RuleI(World, ExpansionSettings) & EQEmu::expansions::ConvertClientVersionToExpansionsMask(ClientVersion())); + m_pp.expansions = (RuleI(World, ExpansionSettings) & EQ::expansions::ConvertClientVersionToExpansionsMask(ClientVersion())); } if (!database.LoadAlternateAdvancement(this)) { @@ -1435,7 +1435,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) } if (SPDAT_RECORDS > 0) { - for (uint32 z = 0; z < EQEmu::spells::SPELL_GEM_COUNT; z++) { + for (uint32 z = 0; z < EQ::spells::SPELL_GEM_COUNT; z++) { if (m_pp.mem_spells[z] >= (uint32)SPDAT_RECORDS) UnmemSpell(z, false); } @@ -1567,7 +1567,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) } /* Load Spell Slot Refresh from Currently Memoried Spells */ - for (unsigned int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) + for (unsigned int i = 0; i < EQ::spells::SPELL_GEM_COUNT; ++i) if (IsValidSpell(m_pp.mem_spells[i])) m_pp.spellSlotRefresh[i] = p_timers.GetRemainingTime(pTimerSpellStart + m_pp.mem_spells[i]) * 1000; @@ -1676,8 +1676,8 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /* First item cursor is sent in bulk inventory packet */ if (iter == m_inv.cursor_cbegin()) continue; - const EQEmu::ItemInstance *inst = *iter; - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketLimbo); + const EQ::ItemInstance *inst = *iter; + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketLimbo); } // this is kinda hackish atm..this process needs to be realigned to allow a contiguous flow @@ -1690,14 +1690,14 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) /** * DevTools Load Settings */ - if (Admin() >= EQEmu::DevTools::GM_ACCOUNT_STATUS_LEVEL) { + if (Admin() >= EQ::DevTools::GM_ACCOUNT_STATUS_LEVEL) { std::string dev_tools_window_key = StringFormat("%i-dev-tools-window-disabled", AccountID()); if (DataBucket::GetData(dev_tools_window_key) == "true") { dev_tools_window_enabled = false; } } - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) { outapp = new EQApplicationPacket(OP_XTargetResponse, 8); outapp->WriteUInt32(GetMaxXTargets()); outapp->WriteUInt32(0); @@ -1721,7 +1721,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) QueuePacket(outapp); safe_delete(outapp); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { Handle_Connect_OP_ReqNewZone(nullptr); } @@ -1879,7 +1879,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app) merchantid = tmp->CastToNPC()->MerchantType; - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; bool found = false; std::list merlist = zone->merchanttable[merchantid]; std::list::const_iterator itr; @@ -2022,10 +2022,10 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app) if (item->MaxCharges != 0) charges = item->MaxCharges; - EQEmu::ItemInstance *inst = database.CreateItem(item, charges); + EQ::ItemInstance *inst = database.CreateItem(item, charges); if (!AutoPutLootInInventory(*inst, true, true)) { - PutLootInInventory(EQEmu::invslot::slotCursor, *inst); + PutLootInInventory(EQ::invslot::slotCursor, *inst); } Save(1); } @@ -2054,7 +2054,7 @@ void Client::Handle_OP_AdventureMerchantRequest(const EQApplicationPacket *app) merchantid = tmp->CastToNPC()->MerchantType; - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; std::list merlist = zone->merchanttable[merchantid]; std::list::const_iterator itr; for (itr = merlist.begin(); itr != merlist.end() && count<255; ++itr) { @@ -2152,8 +2152,8 @@ void Client::Handle_OP_AdventureMerchantSell(const EQApplicationPacket *app) return; } - const EQEmu::ItemData* item = database.GetItem(itemid); - EQEmu::ItemInstance* inst = GetInv().GetItem(ams_in->slot); + const EQ::ItemData* item = database.GetItem(itemid); + EQ::ItemInstance* inst = GetInv().GetItem(ams_in->slot); if (!item || !inst) { Message(Chat::Red, "You seemed to have misplaced that item..."); return; @@ -2439,7 +2439,7 @@ void Client::Handle_OP_AltCurrencyMerchantRequest(const EQApplicationPacket *app ss << alt_cur_id << "|1|" << alt_cur_id; uint32 count = 0; uint32 merchant_id = tar->MerchantType; - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; std::list merlist = zone->merchanttable[merchant_id]; std::list::const_iterator itr; @@ -2499,7 +2499,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app) return; } - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; uint32 cost = 0; uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id); uint32 merchant_id = tar->MerchantType; @@ -2555,10 +2555,10 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app) if (item->MaxCharges != 0) charges = item->MaxCharges; - EQEmu::ItemInstance *inst = database.CreateItem(item, charges); + EQ::ItemInstance *inst = database.CreateItem(item, charges); if (!AutoPutLootInInventory(*inst, true, true)) { - PutLootInInventory(EQEmu::invslot::slotCursor, *inst); + PutLootInInventory(EQ::invslot::slotCursor, *inst); } Save(1); @@ -2608,7 +2608,7 @@ void Client::Handle_OP_AltCurrencyReclaim(const EQApplicationPacket *app) SetAlternateCurrencyValue(reclaim->currency_id, 0); } else { - SummonItem(item_id, reclaim->count, 0, 0, 0, 0, 0, 0, false, EQEmu::invslot::slotCursor); + SummonItem(item_id, reclaim->count, 0, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor); AddAlternateCurrencyValue(reclaim->currency_id, -((int32)reclaim->count)); } /* QS: PlayerLogAlternateCurrencyTransactions :: Cursor to Item Storage */ @@ -2639,7 +2639,7 @@ void Client::Handle_OP_AltCurrencySell(const EQApplicationPacket *app) return; } - EQEmu::ItemInstance* inst = GetInv().GetItem(sell->slot_id); + EQ::ItemInstance* inst = GetInv().GetItem(sell->slot_id); if (!inst) { return; } @@ -2648,7 +2648,7 @@ void Client::Handle_OP_AltCurrencySell(const EQApplicationPacket *app) return; } - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; uint32 cost = 0; uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id); uint32 merchant_id = tar->MerchantType; @@ -2736,12 +2736,12 @@ void Client::Handle_OP_AltCurrencySellSelection(const EQApplicationPacket *app) return; } - EQEmu::ItemInstance *inst = m_inv.GetItem(select->slot_id); + EQ::ItemInstance *inst = m_inv.GetItem(select->slot_id); if (!inst) { return; } - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; uint32 cost = 0; uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id); uint32 merchant_id = tar->MerchantType; @@ -2821,16 +2821,16 @@ void Client::Handle_OP_ApplyPoison(const EQApplicationPacket *app) uint32 ApplyPoisonSuccessResult = 0; - const EQEmu::ItemInstance* PoisonItemInstance = GetInv().GetItem(ApplyPoisonData->inventorySlot); + const EQ::ItemInstance* PoisonItemInstance = GetInv().GetItem(ApplyPoisonData->inventorySlot); - const EQEmu::ItemData* poison = (PoisonItemInstance ? PoisonItemInstance->GetItem() : nullptr); + const EQ::ItemData* poison = (PoisonItemInstance ? PoisonItemInstance->GetItem() : nullptr); - bool IsPoison = (poison && poison->ItemType == EQEmu::item::ItemTypePoison); + bool IsPoison = (poison && poison->ItemType == EQ::item::ItemTypePoison); if (IsPoison && GetClass() == ROGUE) { // Live always checks for skillup, even when poison is too high - CheckIncreaseSkill(EQEmu::skills::SkillApplyPoison, nullptr, 10); + CheckIncreaseSkill(EQ::skills::SkillApplyPoison, nullptr, 10); if (poison->Proc.Level2 > GetLevel()) { // Poison is too high to apply. @@ -2849,7 +2849,7 @@ void Client::Handle_OP_ApplyPoison(const EQApplicationPacket *app) // Poisons that don't proc until a level higher than the // rogue simply won't apply at all, no skill check done. - uint16 poison_skill = GetSkill(EQEmu::skills::SkillApplyPoison); + uint16 poison_skill = GetSkill(EQ::skills::SkillApplyPoison); if (ChanceRoll < (.75 + poison_skill / 1000)) { ApplyPoisonSuccessResult = 1; @@ -2924,7 +2924,7 @@ void Client::Handle_OP_AugmentInfo(const EQApplicationPacket *app) } AugmentInfo_Struct* AugInfo = (AugmentInfo_Struct*)app->pBuffer; - const EQEmu::ItemData * item = database.GetItem(AugInfo->itemid); + const EQ::ItemData * item = database.GetItem(AugInfo->itemid); if (item) { strn0cpy(AugInfo->augment_info, item->Name, 64); @@ -2943,31 +2943,31 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) AugmentItem_Struct* in_augment = (AugmentItem_Struct*)app->pBuffer; bool deleteItems = false; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { - if ((in_augment->container_slot < EQEmu::invslot::EQUIPMENT_BEGIN || in_augment->container_slot > EQEmu::invslot::GENERAL_END) && - (in_augment->container_slot < EQEmu::invbag::GENERAL_BAGS_BEGIN || in_augment->container_slot > EQEmu::invbag::GENERAL_BAGS_END)) + if ((in_augment->container_slot < EQ::invslot::EQUIPMENT_BEGIN || in_augment->container_slot > EQ::invslot::GENERAL_END) && + (in_augment->container_slot < EQ::invbag::GENERAL_BAGS_BEGIN || in_augment->container_slot > EQ::invbag::GENERAL_BAGS_END)) { Message(Chat::Red, "The server does not allow augmentation actions from this slot."); - auto cursor_item = m_inv[EQEmu::invslot::slotCursor]; + auto cursor_item = m_inv[EQ::invslot::slotCursor]; auto augmented_item = m_inv[in_augment->container_slot]; - SendItemPacket(EQEmu::invslot::slotCursor, cursor_item, ItemPacketCharInventory); + SendItemPacket(EQ::invslot::slotCursor, cursor_item, ItemPacketCharInventory); // this may crash clients on certain slots SendItemPacket(in_augment->container_slot, augmented_item, ItemPacketCharInventory); return; } - EQEmu::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr; + EQ::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr; //Log(Logs::DebugLevel::Moderate, Logs::Debug, "cslot: [{}] aslot: [{}] cidx: [{}] aidx: [{}] act: [{}] dest: [{}]", // in_augment->container_slot, in_augment->augment_slot, in_augment->container_index, in_augment->augment_index, in_augment->augment_action, in_augment->dest_inst_id); - EQEmu::ItemInstance *tobe_auged = nullptr, *old_aug = nullptr, *new_aug = nullptr, *aug = nullptr, *solvent = nullptr; - EQEmu::InventoryProfile& user_inv = GetInv(); + EQ::ItemInstance *tobe_auged = nullptr, *old_aug = nullptr, *new_aug = nullptr, *aug = nullptr, *solvent = nullptr; + EQ::InventoryProfile& user_inv = GetInv(); uint16 item_slot = in_augment->container_slot; uint16 solvent_slot = in_augment->augment_slot; - uint8 mat = EQEmu::InventoryProfile::CalcMaterialFromSlot(item_slot); // for when player is augging a piece of equipment while they're wearing it + uint8 mat = EQ::InventoryProfile::CalcMaterialFromSlot(item_slot); // for when player is augging a piece of equipment while they're wearing it if (item_slot == INVALID_INDEX || solvent_slot == INVALID_INDEX) { @@ -2997,7 +2997,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) return; } } - else if (solvent->GetItem()->ItemType == EQEmu::item::ItemTypeAugmentationDistiller) + else if (solvent->GetItem()->ItemType == EQ::item::ItemTypeAugmentationDistiller) { old_aug = tobe_auged->GetAugment(in_augment->augment_index); @@ -3014,7 +3014,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) return; } } - else if (solvent->GetItem()->ItemType != EQEmu::item::ItemTypePerfectedAugmentationDistiller) + else if (solvent->GetItem()->ItemType != EQ::item::ItemTypePerfectedAugmentationDistiller) { LogError("Player tried to safely remove an augment with a non-distiller item"); Message(Chat::Red, "Error: Invalid augmentation distiller for safely removing this augment."); @@ -3026,7 +3026,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) { case 0: // Adding an augment case 2: // Swapping augment - new_aug = user_inv.GetItem(EQEmu::invslot::slotCursor); + new_aug = user_inv.GetItem(EQ::invslot::slotCursor); if (!new_aug) // Shouldn't get the OP code without the augment on the user's cursor, but maybe it's h4x. { @@ -3046,7 +3046,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) CalcBonuses(); - std::vector args; + std::vector args; args.push_back(old_aug); parse->EventItem(EVENT_UNAUGMENT_ITEM, this, tobe_auged, nullptr, "", in_augment->augment_index, &args); @@ -3061,7 +3061,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) aug = tobe_auged->GetAugment(in_augment->augment_index); if (aug) { - std::vector args; + std::vector args; args.push_back(aug); parse->EventItem(EVENT_AUGMENT_ITEM, this, tobe_auged, nullptr, "", in_augment->augment_index, &args); @@ -3084,7 +3084,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) if (itemOneToPush) { DeleteItemInInventory(item_slot, 0, true); - DeleteItemInInventory(EQEmu::invslot::slotCursor, new_aug->IsStackable() ? 1 : 0, true); + DeleteItemInInventory(EQ::invslot::slotCursor, new_aug->IsStackable() ? 1 : 0, true); if (solvent) { @@ -3095,7 +3095,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) if (itemTwoToPush) { // This is a swap. Return the old aug to the player's cursor. - if (!PutItemInInventory(EQEmu::invslot::slotCursor, *itemTwoToPush, true)) + if (!PutItemInInventory(EQ::invslot::slotCursor, *itemTwoToPush, true)) { LogError("Problem returning old augment to player's cursor after augmentation swap"); Message(Chat::Yellow, "Error: Failed to retrieve old augment after augmentation swap!"); @@ -3108,7 +3108,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) CalcBonuses(); - if (mat != EQEmu::textures::materialInvalid) + if (mat != EQ::textures::materialInvalid) { SendWearChange(mat); // Visible item augged while equipped. Send WC in case ornamentation changed. } @@ -3133,7 +3133,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) aug = tobe_auged->GetAugment(in_augment->augment_index); if (aug) { - std::vector args; + std::vector args; args.push_back(aug); parse->EventItem(EVENT_UNAUGMENT_ITEM, this, tobe_auged, nullptr, "", in_augment->augment_index, &args); @@ -3174,13 +3174,13 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) CalcBonuses(); - if (mat != EQEmu::textures::materialInvalid) + if (mat != EQ::textures::materialInvalid) { SendWearChange(mat); // Visible item augged while equipped. Send WC in case ornamentation changed. } // Drop the removed augment on the player's cursor - if (!PutItemInInventory(EQEmu::invslot::slotCursor, *itemTwoToPush, true)) + if (!PutItemInInventory(EQ::invslot::slotCursor, *itemTwoToPush, true)) { LogError("Problem returning augment to player's cursor after safe removal"); Message(Chat::Yellow, "Error: Failed to return augment after removal from item!"); @@ -3196,7 +3196,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) aug = tobe_auged->GetAugment(in_augment->augment_index); if (aug) { - std::vector args; + std::vector args; args.push_back(aug); parse->EventItem(EVENT_UNAUGMENT_ITEM, this, tobe_auged, nullptr, "", in_augment->augment_index, &args); @@ -3229,7 +3229,7 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app) CalcBonuses(); - if (mat != EQEmu::textures::materialInvalid) + if (mat != EQ::textures::materialInvalid) { SendWearChange(mat); } @@ -3519,13 +3519,13 @@ void Client::Handle_OP_Barter(const EQApplicationPacket *app) { BarterItemSearchLinkRequest_Struct* bislr = (BarterItemSearchLinkRequest_Struct*)app->pBuffer; - const EQEmu::ItemData* item = database.GetItem(bislr->ItemID); + const EQ::ItemData* item = database.GetItem(bislr->ItemID); if (!item) Message(Chat::Red, "Error: This item does not exist!"); else { - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if (inst) { SendItemPacket(0, inst, ItemPacketViewLink); @@ -3552,13 +3552,13 @@ void Client::Handle_OP_Barter(const EQApplicationPacket *app) { BuyerItemSearchLinkRequest_Struct* bislr = (BuyerItemSearchLinkRequest_Struct*)app->pBuffer; - const EQEmu::ItemData* item = database.GetItem(bislr->ItemID); + const EQ::ItemData* item = database.GetItem(bislr->ItemID); if (!item) Message(Chat::Red, "Error: This item does not exist!"); else { - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if (inst) { SendItemPacket(0, inst, ItemPacketViewLink); @@ -3591,14 +3591,14 @@ void Client::Handle_OP_BazaarInspect(const EQApplicationPacket *app) BazaarInspect_Struct* bis = (BazaarInspect_Struct*)app->pBuffer; - const EQEmu::ItemData* item = database.GetItem(bis->ItemID); + const EQ::ItemData* item = database.GetItem(bis->ItemID); if (!item) { Message(Chat::Red, "Error: This item does not exist!"); return; } - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if (inst) { SendItemPacket(0, inst, ItemPacketViewLink); @@ -3631,7 +3631,7 @@ void Client::Handle_OP_BazaarSearch(const EQApplicationPacket *app) Client *c = entity_list.GetClientByName(nbis->Name); if (c) { - EQEmu::ItemInstance* inst = c->FindTraderItemBySerialNumber(nbis->SerialNumber); + EQ::ItemInstance* inst = c->FindTraderItemBySerialNumber(nbis->SerialNumber); if (inst) SendItemPacket(0, inst, ItemPacketViewLink); } @@ -3658,7 +3658,7 @@ void Client::Handle_OP_Begging(const EQApplicationPacket *app) return; } - if (!HasSkill(EQEmu::skills::SkillBegging) || !GetTarget()) + if (!HasSkill(EQ::skills::SkillBegging) || !GetTarget()) return; if (GetTarget()->GetClass() == LDON_TREASURE) @@ -3696,7 +3696,7 @@ void Client::Handle_OP_Begging(const EQApplicationPacket *app) return; } - uint16 CurrentSkill = GetSkill(EQEmu::skills::SkillBegging); + uint16 CurrentSkill = GetSkill(EQ::skills::SkillBegging); float ChanceToBeg = ((float)(CurrentSkill / 700.0f) + 0.15f) * 100; @@ -3718,7 +3718,7 @@ void Client::Handle_OP_Begging(const EQApplicationPacket *app) } QueuePacket(outapp); safe_delete(outapp); - CheckIncreaseSkill(EQEmu::skills::SkillBegging, nullptr, -10); + CheckIncreaseSkill(EQ::skills::SkillBegging, nullptr, -10); } void Client::Handle_OP_Bind_Wound(const EQApplicationPacket *app) @@ -4017,7 +4017,7 @@ void Client::Handle_OP_CancelTrade(const EQApplicationPacket *app) void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) { - using EQEmu::spells::CastingSlot; + using EQ::spells::CastingSlot; if (app->size != sizeof(CastSpell_Struct)) { std::cout << "Wrong size: OP_CastSpell, size=" << app->size << ", expected " << sizeof(CastSpell_Struct) << std::endl; return; @@ -4046,14 +4046,14 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) /* Memorized Spell */ if (m_pp.mem_spells[castspell->slot] && m_pp.mem_spells[castspell->slot] == castspell->spell_id) { uint16 spell_to_cast = 0; - if (castspell->slot < EQEmu::spells::SPELL_GEM_COUNT) { + if (castspell->slot < EQ::spells::SPELL_GEM_COUNT) { spell_to_cast = m_pp.mem_spells[castspell->slot]; if (spell_to_cast != castspell->spell_id) { InterruptSpell(castspell->spell_id); //CHEATER!!! return; } } - else if (castspell->slot >= EQEmu::spells::SPELL_GEM_COUNT) { + else if (castspell->slot >= EQ::spells::SPELL_GEM_COUNT) { InterruptSpell(); return; } @@ -4066,11 +4066,11 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) if (m_inv.SupportsClickCasting(castspell->inventoryslot) || slot == CastingSlot::PotionBelt) // sanity check { // packet field types will be reviewed as packet transistions occur - const EQEmu::ItemInstance* inst = m_inv[castspell->inventoryslot]; //slot values are int16, need to check packet on this field + const EQ::ItemInstance* inst = m_inv[castspell->inventoryslot]; //slot values are int16, need to check packet on this field //bool cancast = true; if (inst && inst->IsClassCommon()) { - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (item->Click.Effect != (uint32)castspell->spell_id) { database.SetMQDetectionFlag(account_name, name, "OP_CastSpell with item, tried to cast a different spell.", zone->GetShortName()); @@ -4078,13 +4078,13 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) return; } - if ((item->Click.Type == EQEmu::item::ItemEffectClick) || (item->Click.Type == EQEmu::item::ItemEffectExpendable) || (item->Click.Type == EQEmu::item::ItemEffectEquipClick) || (item->Click.Type == EQEmu::item::ItemEffectClick2)) + if ((item->Click.Type == EQ::item::ItemEffectClick) || (item->Click.Type == EQ::item::ItemEffectExpendable) || (item->Click.Type == EQ::item::ItemEffectEquipClick) || (item->Click.Type == EQ::item::ItemEffectClick2)) { if (item->Click.Level2 > 0) { if (GetLevel() >= item->Click.Level2) { - EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst; + EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst; int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot); if (i == 0) { @@ -4104,7 +4104,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) } else { - EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst; + EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst; int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot); if (i == 0) { @@ -4129,7 +4129,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app) } else { - Message(0, "Error: castspell->inventoryslot >= %i (0x%04x)", EQEmu::invslot::slotCursor, castspell->inventoryslot); + Message(0, "Error: castspell->inventoryslot >= %i (0x%04x)", EQ::invslot::slotCursor, castspell->inventoryslot); InterruptSpell(castspell->spell_id); } } @@ -4263,7 +4263,7 @@ void Client::Handle_OP_ClickDoor(const EQApplicationPacket *app) char buf[20]; snprintf(buf, 19, "%u", cd->doorid); buf[19] = '\0'; - std::vector args; + std::vector args; args.push_back(currentdoor); parse->EventPlayer(EVENT_CLICK_DOOR, this, buf, 0, &args); @@ -4286,7 +4286,7 @@ void Client::Handle_OP_ClickObject(const EQApplicationPacket *app) object->HandleClick(this, click_object); - std::vector args; + std::vector args; args.push_back(object); char buf[10]; @@ -4313,7 +4313,7 @@ void Client::Handle_OP_ClickObjectAction(const EQApplicationPacket *app) QueuePacket(&end_trade2); // RoF sends a 0 sized packet for closing objects - if (GetTradeskillObject() && ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (GetTradeskillObject() && ClientVersion() >= EQ::versions::ClientVersion::RoF) GetTradeskillObject()->CastToObject()->Close(); return; @@ -4497,7 +4497,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { if (IsTracking() && ((m_Position.x != cx) || (m_Position.y != cy))) { if (zone->random.Real(0, 100) < 70)//should be good - CheckIncreaseSkill(EQEmu::skills::SkillTracking, nullptr, -20); + CheckIncreaseSkill(EQ::skills::SkillTracking, nullptr, -20); } /* Break Hide if moving without sneaking and set rewind timer if moved */ @@ -4629,7 +4629,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { if (zone->watermap) { if (zone->watermap->InLiquid(glm::vec3(m_Position))) { - CheckIncreaseSkill(EQEmu::skills::SkillSwimming, nullptr, -17); + CheckIncreaseSkill(EQ::skills::SkillSwimming, nullptr, -17); // Dismount horses when entering water if (GetHorseId() && RuleB(Character, DismountWater)) { @@ -4701,7 +4701,7 @@ void Client::Handle_OP_Consider(const EQApplicationPacket *app) con->faction = 1; con->level = GetLevelCon(tmob->GetLevel()); - if (ClientVersion() <= EQEmu::versions::ClientVersion::Titanium) { + if (ClientVersion() <= EQ::versions::ClientVersion::Titanium) { if (con->level == CON_GRAY) { con->level = CON_GREEN; } @@ -4776,7 +4776,7 @@ void Client::Handle_OP_Consider(const EQApplicationPacket *app) break; } - if (ClientVersion() <= EQEmu::versions::ClientVersion::Titanium) { + if (ClientVersion() <= EQ::versions::ClientVersion::Titanium) { if (color == 6) { color = 2; } @@ -4897,18 +4897,18 @@ void Client::Handle_OP_Consume(const EQApplicationPacket *app) } } - EQEmu::ItemInstance *myitem = GetInv().GetItem(pcs->slot); + EQ::ItemInstance *myitem = GetInv().GetItem(pcs->slot); if (myitem == nullptr) { LogError("Consuming from empty slot [{}]", pcs->slot); return; } - const EQEmu::ItemData* eat_item = myitem->GetItem(); + const EQ::ItemData* eat_item = myitem->GetItem(); if (pcs->type == 0x01) { - Consume(eat_item, EQEmu::item::ItemTypeFood, pcs->slot, (pcs->auto_consumed == 0xffffffff)); + Consume(eat_item, EQ::item::ItemTypeFood, pcs->slot, (pcs->auto_consumed == 0xffffffff)); } else if (pcs->type == 0x02) { - Consume(eat_item, EQEmu::item::ItemTypeDrink, pcs->slot, (pcs->auto_consumed == 0xffffffff)); + Consume(eat_item, EQ::item::ItemTypeDrink, pcs->slot, (pcs->auto_consumed == 0xffffffff)); } else { LogError("OP_Consume: unknown type, type:[{}]", (int)pcs->type); @@ -5044,7 +5044,7 @@ void Client::Handle_OP_CreateObject(const EQApplicationPacket *app) if (LogSys.log_settings[Logs::Inventory].is_category_enabled) LogInventory("Handle_OP_CreateObject() [psize: [{}]] [{}]", app->size, DumpPacketToString(app).c_str()); - DropItem(EQEmu::invslot::slotCursor); + DropItem(EQ::invslot::slotCursor); return; } @@ -5074,7 +5074,7 @@ void Client::Handle_OP_CrystalCreate(const EQApplicationPacket *app) } // Prevent the client from creating more than they have. - const uint32 amount = EQEmu::ClampUpper(requestQty, currentQty); + const uint32 amount = EQ::ClampUpper(requestQty, currentQty); const uint32 itemID = isRadiant ? RuleI(Zone, RadiantCrystalItemID) : RuleI(Zone, EbonCrystalItemID); // Summon crystals for player. @@ -5130,7 +5130,7 @@ void Client::Handle_OP_Death(const EQApplicationPacket *app) Death_Struct* ds = (Death_Struct*)app->pBuffer; //I think this attack_skill value is really a value from SkillDamageTypes... - if (ds->attack_skill > EQEmu::skills::HIGHEST_SKILL) { + if (ds->attack_skill > EQ::skills::HIGHEST_SKILL) { return; } @@ -5138,7 +5138,7 @@ void Client::Handle_OP_Death(const EQApplicationPacket *app) return; Mob* killer = entity_list.GetMob(ds->killer_id); - Death(killer, ds->damage, ds->spell_id, (EQEmu::skills::SkillType)ds->attack_skill); + Death(killer, ds->damage, ds->spell_id, (EQ::skills::SkillType)ds->attack_skill); return; } @@ -5195,15 +5195,15 @@ void Client::Handle_OP_DeleteItem(const EQApplicationPacket *app) } DeleteItem_Struct* alc = (DeleteItem_Struct*)app->pBuffer; - const EQEmu::ItemInstance *inst = GetInv().GetItem(alc->from_slot); - if (inst && inst->GetItem()->ItemType == EQEmu::item::ItemTypeAlcohol) { + const EQ::ItemInstance *inst = GetInv().GetItem(alc->from_slot); + if (inst && inst->GetItem()->ItemType == EQ::item::ItemTypeAlcohol) { entity_list.MessageCloseString(this, true, 50, 0, DRINKING_MESSAGE, GetName(), inst->GetItem()->Name); - CheckIncreaseSkill(EQEmu::skills::SkillAlcoholTolerance, nullptr, 25); + CheckIncreaseSkill(EQ::skills::SkillAlcoholTolerance, nullptr, 25); - int16 AlcoholTolerance = GetSkill(EQEmu::skills::SkillAlcoholTolerance); + int16 AlcoholTolerance = GetSkill(EQ::skills::SkillAlcoholTolerance); int16 IntoxicationIncrease; - if (ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() < EQ::versions::ClientVersion::SoD) IntoxicationIncrease = (200 - AlcoholTolerance) * 30 / 200 + 10; else IntoxicationIncrease = (270 - AlcoholTolerance) * 0.111111108 + 10; @@ -5245,7 +5245,7 @@ void Client::Handle_OP_DeleteSpawn(const EQApplicationPacket *app) void Client::Handle_OP_Disarm(const EQApplicationPacket *app) { if (dead || bZoning) return; - if (!HasSkill(EQEmu::skills::SkillDisarm)) + if (!HasSkill(EQ::skills::SkillDisarm)) return; if (app->size != sizeof(Disarm_Struct)) { @@ -5299,7 +5299,7 @@ void Client::Handle_OP_Disarm(const EQApplicationPacket *app) { if (tmob->IsClient() && tmob->CastToClient()->GetFeigned()) return; if (GetTarget() == tmob && pmob == this->CastToMob() && - disarm->skill == GetSkill(EQEmu::skills::SkillDisarm) && IsAttackAllowed(tmob)) { + disarm->skill == GetSkill(EQ::skills::SkillDisarm) && IsAttackAllowed(tmob)) { int p_level = pmob->GetLevel() ? pmob->GetLevel() : 1; int t_level = tmob->GetLevel() ? tmob->GetLevel() : 1; // We have a disarmable target - sucess or fail, we always aggro the mob @@ -5312,7 +5312,7 @@ void Client::Handle_OP_Disarm(const EQApplicationPacket *app) { tmob->AddToHateList(pmob, p_level / 3); } } - int chance = GetSkill(EQEmu::skills::SkillDisarm); // (1% @ 0 skill) (11% @ 200 skill) - against even con + int chance = GetSkill(EQ::skills::SkillDisarm); // (1% @ 0 skill) (11% @ 200 skill) - against even con chance /= 2; chance += 10; // Modify chance based on level difference @@ -5342,7 +5342,7 @@ void Client::Handle_OP_DeleteSpell(const EQApplicationPacket *app) EQApplicationPacket* outapp = app->Copy(); DeleteSpell_Struct* dss = (DeleteSpell_Struct*)outapp->pBuffer; - if (dss->spell_slot < 0 || dss->spell_slot >= EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) + if (dss->spell_slot < 0 || dss->spell_slot >= EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) return; if (m_pp.spell_book[dss->spell_slot] != SPELLBOOK_UNKNOWN) { @@ -5359,7 +5359,7 @@ void Client::Handle_OP_DeleteSpell(const EQApplicationPacket *app) void Client::Handle_OP_DisarmTraps(const EQApplicationPacket *app) { - if (!HasSkill(EQEmu::skills::SkillDisarmTraps)) + if (!HasSkill(EQ::skills::SkillDisarmTraps)) return; if (!p_timers.Expired(&database, pTimerDisarmTraps, false)) { @@ -5367,7 +5367,7 @@ void Client::Handle_OP_DisarmTraps(const EQApplicationPacket *app) return; } - int reuse = DisarmTrapsReuseTime - GetSkillReuseTime(EQEmu::skills::SkillDisarmTraps); + int reuse = DisarmTrapsReuseTime - GetSkillReuseTime(EQ::skills::SkillDisarmTraps); if (reuse < 1) reuse = 1; @@ -5383,7 +5383,7 @@ void Client::Handle_OP_DisarmTraps(const EQApplicationPacket *app) Log(Logs::General, Logs::Traps, "%s is attempting to disarm trap %d. Curdist is %0.2f maxdist is %0.2f", GetName(), trap->trap_id, curdist, max_radius); if (curdist <= max_radius) { - int uskill = GetSkill(EQEmu::skills::SkillDisarmTraps); + int uskill = GetSkill(EQ::skills::SkillDisarmTraps); if ((zone->random.Int(0, 49) + uskill) >= (zone->random.Int(0, 49) + trap->skill)) { success = SKILLUP_SUCCESS; @@ -5399,7 +5399,7 @@ void Client::Handle_OP_DisarmTraps(const EQApplicationPacket *app) trap->Trigger(this); } } - CheckIncreaseSkill(EQEmu::skills::SkillDisarmTraps, nullptr); + CheckIncreaseSkill(EQ::skills::SkillDisarmTraps, nullptr); return; } else @@ -5540,10 +5540,10 @@ void Client::Handle_OP_DumpName(const EQApplicationPacket *app) void Client::Handle_OP_Dye(const EQApplicationPacket *app) { - if (app->size != sizeof(EQEmu::TintProfile)) - printf("Wrong size of DyeStruct, Got: %i, Expected: %zu\n", app->size, sizeof(EQEmu::TintProfile)); + if (app->size != sizeof(EQ::TintProfile)) + printf("Wrong size of DyeStruct, Got: %i, Expected: %zu\n", app->size, sizeof(EQ::TintProfile)); else { - EQEmu::TintProfile* dye = (EQEmu::TintProfile*)app->pBuffer; + EQ::TintProfile* dye = (EQ::TintProfile*)app->pBuffer; DyeArmor(dye); } return; @@ -5615,7 +5615,7 @@ void Client::Handle_OP_EndLootRequest(const EQApplicationPacket *app) Entity* entity = entity_list.GetID(*((uint16*)app->pBuffer)); if (entity == 0) { Message(Chat::Red, "Error: OP_EndLootRequest: Corpse not found (ent = 0)"); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) Corpse::SendEndLootErrorPacket(this); else Corpse::SendLootReqErrorPacket(this); @@ -5685,7 +5685,7 @@ void Client::Handle_OP_EnvDamage(const EQApplicationPacket *app) if (GetHP() <= 0) { mod_client_death_env(); - Death(0, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand); + Death(0, 32000, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand); } SendHPUpdate(); return; @@ -5729,7 +5729,7 @@ void Client::Handle_OP_FeignDeath(const EQApplicationPacket *app) } int reuse = FeignDeathReuseTime; - reuse -= GetSkillReuseTime(EQEmu::skills::SkillFeignDeath); + reuse -= GetSkillReuseTime(EQ::skills::SkillFeignDeath); if (reuse < 1) reuse = 1; @@ -5738,8 +5738,8 @@ void Client::Handle_OP_FeignDeath(const EQApplicationPacket *app) //BreakInvis(); - uint16 primfeign = GetSkill(EQEmu::skills::SkillFeignDeath); - uint16 secfeign = GetSkill(EQEmu::skills::SkillFeignDeath); + uint16 primfeign = GetSkill(EQ::skills::SkillFeignDeath); + uint16 secfeign = GetSkill(EQ::skills::SkillFeignDeath); if (primfeign > 100) { primfeign = 100; secfeign = secfeign - 100; @@ -5757,7 +5757,7 @@ void Client::Handle_OP_FeignDeath(const EQApplicationPacket *app) SetFeigned(true); } - CheckIncreaseSkill(EQEmu::skills::SkillFeignDeath, nullptr, 5); + CheckIncreaseSkill(EQ::skills::SkillFeignDeath, nullptr, 5); return; } @@ -7009,7 +7009,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) if (Slot >= 0) { - EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), GuildBankMainArea, Slot, 1); + EQ::ItemInstance* inst = GuildBanks->GetItem(GuildID(), GuildBankMainArea, Slot, 1); if (inst) { @@ -7029,7 +7029,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) { GuildBankViewItem_Struct *gbvis = (GuildBankViewItem_Struct*)app->pBuffer; - EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbvis->Area, gbvis->SlotID, 1); + EQ::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbvis->Area, gbvis->SlotID, 1); if (!inst) break; @@ -7052,7 +7052,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) return; } - EQEmu::ItemInstance *CursorItemInst = GetInv().GetItem(EQEmu::invslot::slotCursor); + EQ::ItemInstance *CursorItemInst = GetInv().GetItem(EQ::invslot::slotCursor); bool Allowed = true; @@ -7065,7 +7065,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) return; } - const EQEmu::ItemData* CursorItem = CursorItemInst->GetItem(); + const EQ::ItemData* CursorItem = CursorItemInst->GetItem(); if (!CursorItem->NoDrop || CursorItemInst->IsAttuned()) { @@ -7100,7 +7100,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) { GuildBankDepositAck(false, sentAction); - DeleteItemInInventory(EQEmu::invslot::slotCursor, 0, false); + DeleteItemInInventory(EQ::invslot::slotCursor, 0, false); } break; @@ -7121,7 +7121,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) case GuildBankWithdraw: { - if (GetInv()[EQEmu::invslot::slotCursor]) + if (GetInv()[EQ::invslot::slotCursor]) { MessageString(Chat::Red, GUILD_BANK_EMPTY_HANDS); @@ -7132,7 +7132,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) GuildBankWithdrawItem_Struct *gbwis = (GuildBankWithdrawItem_Struct*)app->pBuffer; - EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbwis->Area, gbwis->SlotID, gbwis->Quantity); + EQ::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbwis->Area, gbwis->SlotID, gbwis->Quantity); if (!inst) { @@ -7167,7 +7167,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app) { PushItemOnCursor(*inst); - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketLimbo); GuildBanks->DeleteItem(GuildID(), gbwis->Area, gbwis->SlotID, gbwis->Quantity); } @@ -7480,11 +7480,11 @@ void Client::Handle_OP_GuildInvite(const EQApplicationPacket *app) gc->guildeqid = GuildID(); // Convert Membership Level between RoF and previous clients. - if (client->ClientVersion() < EQEmu::versions::ClientVersion::RoF && ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (client->ClientVersion() < EQ::versions::ClientVersion::RoF && ClientVersion() >= EQ::versions::ClientVersion::RoF) { gc->officer = 0; } - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::RoF && ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (client->ClientVersion() >= EQ::versions::ClientVersion::RoF && ClientVersion() < EQ::versions::ClientVersion::RoF) { gc->officer = 8; } @@ -7525,7 +7525,7 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app) uint32 guildrank = gj->response; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { if (gj->response > 9) { @@ -7560,11 +7560,11 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app) { Client* client = inviter->CastToClient(); // Convert Membership Level between RoF and previous clients. - if (client->ClientVersion() < EQEmu::versions::ClientVersion::RoF && ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (client->ClientVersion() < EQ::versions::ClientVersion::RoF && ClientVersion() >= EQ::versions::ClientVersion::RoF) { guildrank = 0; } - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::RoF && ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (client->ClientVersion() >= EQ::versions::ClientVersion::RoF && ClientVersion() < EQ::versions::ClientVersion::RoF) { guildrank = 8; } @@ -7601,7 +7601,7 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app) guildrank = gj->response; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { if (gj->response == 8) { @@ -8008,7 +8008,7 @@ void Client::Handle_OP_Hide(const EQApplicationPacket *app) return; } - if (!HasSkill(EQEmu::skills::SkillHide) && GetSkill(EQEmu::skills::SkillHide) == 0) + if (!HasSkill(EQ::skills::SkillHide) && GetSkill(EQ::skills::SkillHide) == 0) { //Can not be able to train hide but still have it from racial though return; //You cannot hide if you do not have hide @@ -8018,16 +8018,16 @@ void Client::Handle_OP_Hide(const EQApplicationPacket *app) Message(Chat::Red, "Ability recovery time not yet met."); return; } - int reuse = HideReuseTime - GetSkillReuseTime(EQEmu::skills::SkillHide); + int reuse = HideReuseTime - GetSkillReuseTime(EQ::skills::SkillHide); if (reuse < 1) reuse = 1; p_timers.Start(pTimerHide, reuse - 1); - float hidechance = ((GetSkill(EQEmu::skills::SkillHide) / 250.0f) + .25) * 100; + float hidechance = ((GetSkill(EQ::skills::SkillHide) / 250.0f) + .25) * 100; float random = zone->random.Real(0, 100); - CheckIncreaseSkill(EQEmu::skills::SkillHide, nullptr, 5); + CheckIncreaseSkill(EQ::skills::SkillHide, nullptr, 5); if (random < hidechance) { auto outapp = new EQApplicationPacket(OP_SpawnAppearance, sizeof(SpawnAppearance_Struct)); SpawnAppearance_Struct* sa_out = (SpawnAppearance_Struct*)outapp->pBuffer; @@ -8051,7 +8051,7 @@ void Client::Handle_OP_Hide(const EQApplicationPacket *app) Mob *evadetar = GetTarget(); if (!auto_attack && (evadetar && evadetar->CheckAggro(this) && evadetar->IsNPC())) { - if (zone->random.Int(0, 260) < (int)GetSkill(EQEmu::skills::SkillHide)) { + if (zone->random.Int(0, 260) < (int)GetSkill(EQ::skills::SkillHide)) { msg->string_id = EVADE_SUCCESS; RogueEvade(evadetar); } @@ -8143,17 +8143,17 @@ void Client::Handle_OP_InspectAnswer(const EQApplicationPacket *app) EQApplicationPacket* outapp = app->Copy(); InspectResponse_Struct* insr = (InspectResponse_Struct*)outapp->pBuffer; Mob* tmp = entity_list.GetMob(insr->TargetID); - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType); - for (int16 L = EQEmu::invslot::EQUIPMENT_BEGIN; L <= EQEmu::invslot::EQUIPMENT_END; L++) { - const EQEmu::ItemInstance* inst = GetInv().GetItem(L); + for (int16 L = EQ::invslot::EQUIPMENT_BEGIN; L <= EQ::invslot::EQUIPMENT_END; L++) { + const EQ::ItemInstance* inst = GetInv().GetItem(L); item = inst ? inst->GetItem() : nullptr; if (item) { strcpy(insr->itemnames[L], item->Name); if (inst && inst->GetOrnamentationAug(ornamentationAugtype)) { - const EQEmu::ItemData *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); + const EQ::ItemData *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem(); insr->itemicons[L] = aug_item->Icon; } else if (inst->GetOrnamentationIcon()) { @@ -8202,7 +8202,7 @@ void Client::Handle_OP_InspectRequest(const EQApplicationPacket *app) Mob* tmp = entity_list.GetMob(ins->TargetID); if (tmp != 0 && tmp->IsClient()) { - if (tmp->CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoF) { tmp->CastToClient()->QueuePacket(app); } // Send request to target + if (tmp->CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoF) { tmp->CastToClient()->QueuePacket(app); } // Send request to target // Inspecting an SoF or later client will make the server handle the request else { ProcessInspectRequest(tmp->CastToClient(), this); } } @@ -8242,7 +8242,7 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app) // todo: verify ivrs->link_hash based on a rule, in case we don't care about people being able to sniff data // from the item DB - const EQEmu::ItemData *item = database.GetItem(ivrs->item_id); + const EQ::ItemData *item = database.GetItem(ivrs->item_id); if (!item) { if (ivrs->item_id != SAYLINK_ITEM_ID) { Message(Chat::Red, "Error: The item for the link you have clicked on does not exist!"); @@ -8325,7 +8325,7 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app) } } - EQEmu::ItemInstance *inst = + EQ::ItemInstance *inst = database.CreateItem(item, item->MaxCharges, ivrs->augments[0], ivrs->augments[1], ivrs->augments[2], ivrs->augments[3], ivrs->augments[4], ivrs->augments[5]); if (inst) { @@ -8342,7 +8342,7 @@ void Client::Handle_OP_ItemLinkResponse(const EQApplicationPacket *app) return; } LDONItemViewRequest_Struct* item = (LDONItemViewRequest_Struct*)app->pBuffer; - EQEmu::ItemInstance* inst = database.CreateItem(item->item_id); + EQ::ItemInstance* inst = database.CreateItem(item->item_id); if (inst) { SendItemPacket(0, inst, ItemPacketViewLink); safe_delete(inst); @@ -8358,7 +8358,7 @@ void Client::Handle_OP_ItemName(const EQApplicationPacket *app) return; } ItemNamePacket_Struct *p = (ItemNamePacket_Struct*)app->pBuffer; - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; if ((item = database.GetItem(p->item_id)) != nullptr) { auto outapp = new EQApplicationPacket(OP_ItemName, sizeof(ItemNamePacket_Struct)); p = (ItemNamePacket_Struct*)outapp->pBuffer; @@ -8374,7 +8374,7 @@ void Client::Handle_OP_ItemPreview(const EQApplicationPacket *app) VERIFY_PACKET_LENGTH(OP_ItemPreview, app, ItemPreview_Struct); ItemPreview_Struct *ips = (ItemPreview_Struct *)app->pBuffer; - const EQEmu::ItemData* item = database.GetItem(ips->itemid); + const EQ::ItemData* item = database.GetItem(ips->itemid); if (item) { auto outapp = new EQApplicationPacket(OP_ItemPreview, strlen(item->Name) + strlen(item->Lore) + @@ -8550,7 +8550,7 @@ void Client::Handle_OP_ItemPreview(const EQApplicationPacket *app) void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) { - using EQEmu::spells::CastingSlot; + using EQ::spells::CastingSlot; if (app->size != sizeof(ItemVerifyRequest_Struct)) { LogError("OP size error: OP_ItemVerifyRequest expected:[{}] got:[{}]", sizeof(ItemVerifyRequest_Struct), app->size); @@ -8585,14 +8585,14 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) return; } - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + const EQ::ItemInstance* inst = m_inv[slot_id]; if (!inst) { Message(0, "Error: item not found in inventory slot #%i", slot_id); DeleteItemInInventory(slot_id, 0, true); return; } - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (!item) { Message(0, "Error: item not found in inventory slot #%i", slot_id); DeleteItemInInventory(slot_id, 0, true); @@ -8631,9 +8631,9 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) LogDebug("OP ItemVerifyRequest: spell=[{}], target=[{}], inv=[{}]", spell_id, target_id, slot_id); - if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQEmu::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check + if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQ::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check { - EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst; + EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst; parse->EventItem(EVENT_ITEM_CLICK, this, p_inst, nullptr, "", slot_id); inst = m_inv[slot_id]; @@ -8644,43 +8644,43 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) int r; bool tryaug = false; - EQEmu::ItemInstance* clickaug = nullptr; - EQEmu::ItemData* augitem = nullptr; + EQ::ItemInstance* clickaug = nullptr; + EQ::ItemData* augitem = nullptr; - for (r = EQEmu::invaug::SOCKET_BEGIN; r <= EQEmu::invaug::SOCKET_END; r++) { - const EQEmu::ItemInstance* aug_i = inst->GetAugment(r); + for (r = EQ::invaug::SOCKET_BEGIN; r <= EQ::invaug::SOCKET_END; r++) { + const EQ::ItemInstance* aug_i = inst->GetAugment(r); if (!aug_i) continue; - const EQEmu::ItemData* aug = aug_i->GetItem(); + const EQ::ItemData* aug = aug_i->GetItem(); if (!aug) continue; - if ((aug->Click.Type == EQEmu::item::ItemEffectClick) || (aug->Click.Type == EQEmu::item::ItemEffectExpendable) || (aug->Click.Type == EQEmu::item::ItemEffectEquipClick) || (aug->Click.Type == EQEmu::item::ItemEffectClick2)) + if ((aug->Click.Type == EQ::item::ItemEffectClick) || (aug->Click.Type == EQ::item::ItemEffectExpendable) || (aug->Click.Type == EQ::item::ItemEffectEquipClick) || (aug->Click.Type == EQ::item::ItemEffectClick2)) { tryaug = true; - clickaug = (EQEmu::ItemInstance*)aug_i; - augitem = (EQEmu::ItemData*)aug; + clickaug = (EQ::ItemInstance*)aug_i; + augitem = (EQ::ItemData*)aug; spell_id = aug->Click.Effect; break; } } - if ((spell_id <= 0) && (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink && item->ItemType != EQEmu::item::ItemTypeAlcohol && item->ItemType != EQEmu::item::ItemTypeSpell)) + if ((spell_id <= 0) && (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol && item->ItemType != EQ::item::ItemTypeSpell)) { LogDebug("Item with no effect right clicked by [{}]", GetName()); } else if (inst->IsClassCommon()) { - if (!RuleB(Skills, RequireTomeHandin) && item->ItemType == EQEmu::item::ItemTypeSpell && (strstr((const char*)item->Name, "Tome of ") || strstr((const char*)item->Name, "Skill: "))) + if (!RuleB(Skills, RequireTomeHandin) && item->ItemType == EQ::item::ItemTypeSpell && (strstr((const char*)item->Name, "Tome of ") || strstr((const char*)item->Name, "Skill: "))) { DeleteItemInInventory(slot_id, 1, true); TrainDiscipline(item->ID); } - else if (item->ItemType == EQEmu::item::ItemTypeSpell) + else if (item->ItemType == EQ::item::ItemTypeSpell) { return; } - else if ((item->Click.Type == EQEmu::item::ItemEffectClick) || (item->Click.Type == EQEmu::item::ItemEffectExpendable) || (item->Click.Type == EQEmu::item::ItemEffectEquipClick) || (item->Click.Type == EQEmu::item::ItemEffectClick2)) + else if ((item->Click.Type == EQ::item::ItemEffectClick) || (item->Click.Type == EQ::item::ItemEffectExpendable) || (item->Click.Type == EQ::item::ItemEffectEquipClick) || (item->Click.Type == EQ::item::ItemEffectClick2)) { if (inst->GetCharges() == 0) { @@ -8740,9 +8740,9 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) } else { - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD && !inst->IsEquipable(GetBaseRace(), GetClass())) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD && !inst->IsEquipable(GetBaseRace(), GetClass())) { - if (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink && item->ItemType != EQEmu::item::ItemTypeAlcohol) + if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol) { LogDebug("Error: unknown item->Click.Type ([{}])", item->Click.Type); } @@ -8751,15 +8751,15 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app) /* //This is food/drink - consume it - if (item->ItemType == EQEmu::item::ItemTypeFood && m_pp.hunger_level < 5000) + if (item->ItemType == EQ::item::ItemTypeFood && m_pp.hunger_level < 5000) { Consume(item, item->ItemType, slot_id, false); } - else if (item->ItemType == EQEmu::item::ItemTypeDrink && m_pp.thirst_level < 5000) + else if (item->ItemType == EQ::item::ItemTypeDrink && m_pp.thirst_level < 5000) { Consume(item, item->ItemType, slot_id, false); } - else if (item->ItemType == EQEmu::item::ItemTypeAlcohol) + else if (item->ItemType == EQ::item::ItemTypeAlcohol) { #if EQDEBUG >= 1 LogDebug("Drinking Alcohol from slot:[{}]", slot_id); @@ -8864,14 +8864,14 @@ void Client::Handle_OP_LDoNDisarmTraps(const EQApplicationPacket *app) Mob * target = GetTarget(); if (target->IsNPC()) { - if (HasSkill(EQEmu::skills::SkillDisarmTraps)) + if (HasSkill(EQ::skills::SkillDisarmTraps)) { if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - HandleLDoNDisarm(target->CastToNPC(), GetSkill(EQEmu::skills::SkillDisarmTraps), LDoNTypeMechanical); + HandleLDoNDisarm(target->CastToNPC(), GetSkill(EQ::skills::SkillDisarmTraps), LDoNTypeMechanical); } else Message(Chat::Red, "You do not have the disarm trap skill."); @@ -8897,14 +8897,14 @@ void Client::Handle_OP_LDoNPickLock(const EQApplicationPacket *app) Mob * target = GetTarget(); if (target->IsNPC()) { - if (HasSkill(EQEmu::skills::SkillPickLock)) + if (HasSkill(EQ::skills::SkillPickLock)) { if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - HandleLDoNPickLock(target->CastToNPC(), GetSkill(EQEmu::skills::SkillPickLock), LDoNTypeMechanical); + HandleLDoNPickLock(target->CastToNPC(), GetSkill(EQ::skills::SkillPickLock), LDoNTypeMechanical); } else Message(Chat::Red, "You do not have the pick locks skill."); @@ -8916,14 +8916,14 @@ void Client::Handle_OP_LDoNSenseTraps(const EQApplicationPacket *app) Mob * target = GetTarget(); if (target->IsNPC()) { - if (HasSkill(EQEmu::skills::SkillSenseTraps)) + if (HasSkill(EQ::skills::SkillSenseTraps)) { if (DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - HandleLDoNSenseTraps(target->CastToNPC(), GetSkill(EQEmu::skills::SkillSenseTraps), LDoNTypeMechanical); + HandleLDoNSenseTraps(target->CastToNPC(), GetSkill(EQ::skills::SkillSenseTraps), LDoNTypeMechanical); } else Message(Chat::Red, "You do not have the sense traps skill."); @@ -9279,7 +9279,7 @@ void Client::Handle_OP_LoadSpellSet(const EQApplicationPacket *app) } int i; LoadSpellSet_Struct* ss = (LoadSpellSet_Struct*)app->pBuffer; - for (i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; i++) { + for (i = 0; i < EQ::spells::SPELL_GEM_COUNT; i++) { if (ss->spell[i] != 0xFFFFFFFF) UnmemSpell(i, true); } @@ -9397,7 +9397,7 @@ void Client::Handle_OP_MemorizeSpell(const EQApplicationPacket *app) void Client::Handle_OP_Mend(const EQApplicationPacket *app) { - if (!HasSkill(EQEmu::skills::SkillMend)) + if (!HasSkill(EQ::skills::SkillMend)) return; if (!p_timers.Expired(&database, pTimerMend, false)) { @@ -9408,7 +9408,7 @@ void Client::Handle_OP_Mend(const EQApplicationPacket *app) int mendhp = GetMaxHP() / 4; int currenthp = GetHP(); - if (zone->random.Int(0, 199) < (int)GetSkill(EQEmu::skills::SkillMend)) { + if (zone->random.Int(0, 199) < (int)GetSkill(EQ::skills::SkillMend)) { int criticalchance = spellbonuses.CriticalMend + itembonuses.CriticalMend + aabonuses.CriticalMend; @@ -9427,7 +9427,7 @@ void Client::Handle_OP_Mend(const EQApplicationPacket *app) 0 skill - 25% chance to worsen 20 skill - 23% chance to worsen 50 skill - 16% chance to worsen */ - if ((GetSkill(EQEmu::skills::SkillMend) <= 75) && (zone->random.Int(GetSkill(EQEmu::skills::SkillMend), 100) < 75) && (zone->random.Int(1, 3) == 1)) + if ((GetSkill(EQ::skills::SkillMend) <= 75) && (zone->random.Int(GetSkill(EQ::skills::SkillMend), 100) < 75) && (zone->random.Int(1, 3) == 1)) { SetHP(currenthp > mendhp ? (GetHP() - mendhp) : 1); SendHPUpdate(); @@ -9437,7 +9437,7 @@ void Client::Handle_OP_Mend(const EQApplicationPacket *app) MessageString(Chat::LightBlue, MEND_FAIL); } - CheckIncreaseSkill(EQEmu::skills::SkillMend, nullptr, 10); + CheckIncreaseSkill(EQ::skills::SkillMend, nullptr, 10); return; } @@ -9486,7 +9486,7 @@ void Client::Handle_OP_MercenaryCommand(const EQApplicationPacket *app) //check to see if selected option is a valid stance slot (option is the slot the stance is in, not the actual stance) if (option >= 0 && option < numStances) { - merc->SetStance((EQEmu::constants::StanceType)mercTemplate->Stances[option]); + merc->SetStance((EQ::constants::StanceType)mercTemplate->Stances[option]); GetMercInfo().Stance = mercTemplate->Stances[option]; Log(Logs::General, Logs::Mercenaries, "Set Stance: %u for %s (%s)", merc->GetStance(), merc->GetName(), GetName()); @@ -9830,11 +9830,11 @@ void Client::Handle_OP_MoveItem(const EQApplicationPacket *app) MoveItem_Struct* mi = (MoveItem_Struct*)app->pBuffer; if (spellend_timer.Enabled() && casting_spell_id && !IsBardSong(casting_spell_id)) { - if (mi->from_slot != mi->to_slot && (mi->from_slot <= EQEmu::invslot::GENERAL_END || mi->from_slot > 39) && IsValidSlot(mi->from_slot) && IsValidSlot(mi->to_slot)) + if (mi->from_slot != mi->to_slot && (mi->from_slot <= EQ::invslot::GENERAL_END || mi->from_slot > 39) && IsValidSlot(mi->from_slot) && IsValidSlot(mi->to_slot)) { char *detect = nullptr; - const EQEmu::ItemInstance *itm_from = GetInv().GetItem(mi->from_slot); - const EQEmu::ItemInstance *itm_to = GetInv().GetItem(mi->to_slot); + const EQ::ItemInstance *itm_from = GetInv().GetItem(mi->from_slot); + const EQ::ItemInstance *itm_to = GetInv().GetItem(mi->to_slot); MakeAnyLenString(&detect, "Player issued a move item from %u(item id %u) to %u(item id %u) while casting %u.", mi->from_slot, itm_from ? itm_from->GetID() : 0, @@ -9851,8 +9851,8 @@ void Client::Handle_OP_MoveItem(const EQApplicationPacket *app) // Illegal bagslot usage checks. Currently, user only receives a message if this check is triggered. bool mi_hack = false; - if (mi->from_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN && mi->from_slot <= EQEmu::invbag::CURSOR_BAG_END) { - if (mi->from_slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { mi_hack = true; } + if (mi->from_slot >= EQ::invbag::GENERAL_BAGS_BEGIN && mi->from_slot <= EQ::invbag::CURSOR_BAG_END) { + if (mi->from_slot >= EQ::invbag::CURSOR_BAG_BEGIN) { mi_hack = true; } else { int16 from_parent = m_inv.CalcSlotId(mi->from_slot); if (!m_inv[from_parent]) { mi_hack = true; } @@ -9861,8 +9861,8 @@ void Client::Handle_OP_MoveItem(const EQApplicationPacket *app) } } - if (mi->to_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN && mi->to_slot <= EQEmu::invbag::CURSOR_BAG_END) { - if (mi->to_slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) { mi_hack = true; } + if (mi->to_slot >= EQ::invbag::GENERAL_BAGS_BEGIN && mi->to_slot <= EQ::invbag::CURSOR_BAG_END) { + if (mi->to_slot >= EQ::invbag::CURSOR_BAG_BEGIN) { mi_hack = true; } else { int16 to_parent = m_inv.CalcSlotId(mi->to_slot); if (!m_inv[to_parent]) { mi_hack = true; } @@ -10280,16 +10280,16 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC()) { if (mypet->IsHeld()) { - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_HOLD_SET_OFF); mypet->SetHeld(false); } else { - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_HOLD_SET_ON); - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) mypet->SayString(this, Chat::PetResponse, PET_NOW_HOLDING); else mypet->SayString(this, Chat::PetResponse, PET_ON_HOLD); @@ -10303,10 +10303,10 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } case PET_HOLD_ON: { if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC() && !mypet->IsHeld()) { - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_HOLD_SET_ON); - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) mypet->SayString(this, Chat::PetResponse, PET_NOW_HOLDING); else mypet->SayString(this, Chat::PetResponse, PET_ON_HOLD); @@ -10318,7 +10318,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } case PET_HOLD_OFF: { if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC() && mypet->IsHeld()) { - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_HOLD_SET_OFF); mypet->SetHeld(false); } @@ -10328,13 +10328,13 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC()) { if (mypet->IsGHeld()) { - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) MessageString(Chat::PetResponse, PET_OFF_GHOLD); mypet->SetGHeld(false); } else { - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) { MessageString(Chat::PetResponse, PET_ON_GHOLD); mypet->SayString(this, Chat::PetResponse, PET_GHOLD_ON_MSG); } else { @@ -10349,7 +10349,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } case PET_GHOLD_ON: { if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC()) { - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) { + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) { MessageString(Chat::PetResponse, PET_ON_GHOLD); mypet->SayString(this, Chat::PetResponse, PET_GHOLD_ON_MSG); } else { @@ -10363,7 +10363,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) } case PET_GHOLD_OFF: { if (aabonuses.PetCommands[PetCommand] && mypet->IsNPC() && mypet->IsGHeld()) { - if (m_ClientVersionBit & EQEmu::versions::maskUFAndLater) + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) MessageString(Chat::PetResponse, PET_OFF_GHOLD); mypet->SetGHeld(false); } @@ -10375,13 +10375,13 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (mypet->IsNoCast()) { MessageString(Chat::PetResponse, PET_CASTING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_SPELLHOLD_SET_OFF); mypet->SetNoCast(false); } else { MessageString(Chat::PetResponse, PET_NOT_CASTING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_SPELLHOLD_SET_ON); mypet->SetNoCast(true); } @@ -10394,7 +10394,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (!mypet->IsNoCast()) { MessageString(Chat::PetResponse, PET_NOT_CASTING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_SPELLHOLD_SET_ON); mypet->SetNoCast(true); } @@ -10407,7 +10407,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (mypet->IsNoCast()) { MessageString(Chat::PetResponse, PET_CASTING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_SPELLHOLD_SET_OFF); mypet->SetNoCast(false); } @@ -10420,13 +10420,13 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (mypet->IsFocused()) { MessageString(Chat::PetResponse, PET_NOT_FOCUSING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_FOCUS_SET_OFF); mypet->SetFocused(false); } else { MessageString(Chat::PetResponse, PET_NOW_FOCUSING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_FOCUS_SET_ON); mypet->SetFocused(true); } @@ -10439,7 +10439,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (!mypet->IsFocused()) { MessageString(Chat::PetResponse, PET_NOW_FOCUSING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_FOCUS_SET_ON); mypet->SetFocused(true); } @@ -10452,7 +10452,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) break; if (mypet->IsFocused()) { MessageString(Chat::PetResponse, PET_NOT_FOCUSING); - if (m_ClientVersionBit & EQEmu::versions::maskSoDAndLater) + if (m_ClientVersionBit & EQ::versions::maskSoDAndLater) MessageString(Chat::PetResponse, PET_FOCUS_SET_OFF); mypet->SetFocused(false); } @@ -10741,7 +10741,7 @@ void Client::Handle_OP_PickPocket(const EQApplicationPacket *app) DumpPacket(app); } - if (!HasSkill(EQEmu::skills::SkillPickPockets)) + if (!HasSkill(EQ::skills::SkillPickPockets)) { return; } @@ -10766,7 +10766,7 @@ void Client::Handle_OP_PickPocket(const EQApplicationPacket *app) pick_out->coin = 0; pick_out->from = victim->GetID(); pick_out->to = GetID(); - pick_out->myskill = GetSkill(EQEmu::skills::SkillPickPockets); + pick_out->myskill = GetSkill(EQ::skills::SkillPickPockets); pick_out->type = 0; //if we do not send this packet the client will lock up and require the player to relog. QueuePacket(outapp); @@ -10779,7 +10779,7 @@ void Client::Handle_OP_PickPocket(const EQApplicationPacket *app) pick_out->coin = 0; pick_out->from = victim->GetID(); pick_out->to = GetID(); - pick_out->myskill = GetSkill(EQEmu::skills::SkillPickPockets); + pick_out->myskill = GetSkill(EQ::skills::SkillPickPockets); pick_out->type = 0; //if we do not send this packet the client will lock up and require the player to relog. QueuePacket(outapp); @@ -10795,7 +10795,7 @@ void Client::Handle_OP_PickPocket(const EQApplicationPacket *app) pick_out->coin = 0; pick_out->from = victim->GetID(); pick_out->to = GetID(); - pick_out->myskill = GetSkill(EQEmu::skills::SkillPickPockets); + pick_out->myskill = GetSkill(EQ::skills::SkillPickPockets); pick_out->type = 0; //if we do not send this packet the client will lock up and require the player to relog. QueuePacket(outapp); @@ -10829,7 +10829,7 @@ void Client::Handle_OP_PopupResponse(const EQApplicationPacket *app) return; break; - case EQEmu::popupresponse::MOB_INFO_DISMISS: + case EQ::popupresponse::MOB_INFO_DISMISS: this->SetDisplayMobInfoWindow(false); this->Message(Chat::Yellow, "[DevTools] Window snoozed in this zone..."); break; @@ -10857,13 +10857,13 @@ void Client::Handle_OP_PotionBelt(const EQApplicationPacket *app) } MovePotionToBelt_Struct *mptbs = (MovePotionToBelt_Struct*)app->pBuffer; - if (!EQEmu::ValueWithin(mptbs->SlotNumber, 0U, 3U)) { + if (!EQ::ValueWithin(mptbs->SlotNumber, 0U, 3U)) { LogDebug("Client::Handle_OP_PotionBelt mptbs->SlotNumber out of range"); return; } if (mptbs->Action == 0) { - const EQEmu::ItemData *BaseItem = database.GetItem(mptbs->ItemID); + const EQ::ItemData *BaseItem = database.GetItem(mptbs->ItemID); if (BaseItem) { m_pp.potionbelt.Items[mptbs->SlotNumber].ID = BaseItem->ID; m_pp.potionbelt.Items[mptbs->SlotNumber].Icon = BaseItem->Icon; @@ -11024,30 +11024,30 @@ void Client::Handle_OP_QueryUCSServerStatus(const EQApplicationPacket *app) std::string buffer; std::string MailKey = database.GetMailKey(CharacterID(), true); - EQEmu::versions::UCSVersion ConnectionType = EQEmu::versions::ucsUnknown; + EQ::versions::UCSVersion ConnectionType = EQ::versions::ucsUnknown; // chat server packet switch (ClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumChat; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumChat; break; - case EQEmu::versions::ClientVersion::SoF: - ConnectionType = EQEmu::versions::ucsSoFCombined; + case EQ::versions::ClientVersion::SoF: + ConnectionType = EQ::versions::ucsSoFCombined; break; - case EQEmu::versions::ClientVersion::SoD: - ConnectionType = EQEmu::versions::ucsSoDCombined; + case EQ::versions::ClientVersion::SoD: + ConnectionType = EQ::versions::ucsSoDCombined; break; - case EQEmu::versions::ClientVersion::UF: - ConnectionType = EQEmu::versions::ucsUFCombined; + case EQ::versions::ClientVersion::UF: + ConnectionType = EQ::versions::ucsUFCombined; break; - case EQEmu::versions::ClientVersion::RoF: - ConnectionType = EQEmu::versions::ucsRoFCombined; + case EQ::versions::ClientVersion::RoF: + ConnectionType = EQ::versions::ucsRoFCombined; break; - case EQEmu::versions::ClientVersion::RoF2: - ConnectionType = EQEmu::versions::ucsRoF2Combined; + case EQ::versions::ClientVersion::RoF2: + ConnectionType = EQ::versions::ucsRoF2Combined; break; default: - ConnectionType = EQEmu::versions::ucsUnknown; + ConnectionType = EQ::versions::ucsUnknown; break; } @@ -11069,8 +11069,8 @@ void Client::Handle_OP_QueryUCSServerStatus(const EQApplicationPacket *app) // mail server packet switch (ClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumMail; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumMail; break; default: // retain value from previous switch @@ -11756,7 +11756,7 @@ void Client::Handle_OP_ReadBook(const EQApplicationPacket *app) } BookRequest_Struct* book = (BookRequest_Struct*)app->pBuffer; ReadBook(book); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { EQApplicationPacket EndOfBook(OP_FinishWindow, 0); QueuePacket(&EndOfBook); @@ -12204,8 +12204,8 @@ void Client::Handle_OP_Sacrifice(const EQApplicationPacket *app) void Client::Handle_OP_SafeFallSuccess(const EQApplicationPacket *app) // bit of a misnomer, sent whenever safe fall is used (success of fail) { - if (HasSkill(EQEmu::skills::SkillSafeFall)) //this should only get called if the client has safe fall, but just in case... - CheckIncreaseSkill(EQEmu::skills::SkillSafeFall, nullptr); //check for skill up + if (HasSkill(EQ::skills::SkillSafeFall)) //this should only get called if the client has safe fall, but just in case... + CheckIncreaseSkill(EQ::skills::SkillSafeFall, nullptr); //check for skill up } void Client::Handle_OP_SafePoint(const EQApplicationPacket *app) @@ -12242,19 +12242,19 @@ void Client::Handle_OP_SelectTribute(const EQApplicationPacket *app) void Client::Handle_OP_SenseHeading(const EQApplicationPacket *app) { - if (!HasSkill(EQEmu::skills::SkillSenseHeading)) + if (!HasSkill(EQ::skills::SkillSenseHeading)) return; int chancemod = 0; - CheckIncreaseSkill(EQEmu::skills::SkillSenseHeading, nullptr, chancemod); + CheckIncreaseSkill(EQ::skills::SkillSenseHeading, nullptr, chancemod); return; } void Client::Handle_OP_SenseTraps(const EQApplicationPacket *app) { - if (!HasSkill(EQEmu::skills::SkillSenseTraps)) + if (!HasSkill(EQ::skills::SkillSenseTraps)) return; if (!p_timers.Expired(&database, pTimerSenseTraps, false)) { @@ -12262,7 +12262,7 @@ void Client::Handle_OP_SenseTraps(const EQApplicationPacket *app) return; } - int reuse = SenseTrapsReuseTime - GetSkillReuseTime(EQEmu::skills::SkillSenseTraps); + int reuse = SenseTrapsReuseTime - GetSkillReuseTime(EQ::skills::SkillSenseTraps); if (reuse < 1) reuse = 1; @@ -12272,10 +12272,10 @@ void Client::Handle_OP_SenseTraps(const EQApplicationPacket *app) float trap_curdist = 0; Trap* trap = entity_list.FindNearbyTrap(this, 800, trap_curdist); - CheckIncreaseSkill(EQEmu::skills::SkillSenseTraps, nullptr); + CheckIncreaseSkill(EQ::skills::SkillSenseTraps, nullptr); if (trap && trap->skill > 0) { - int uskill = GetSkill(EQEmu::skills::SkillSenseTraps); + int uskill = GetSkill(EQ::skills::SkillSenseTraps); if ((zone->random.Int(0, 99) + uskill) >= (zone->random.Int(0, 99) + trap->skill*0.75)) { auto diff = trap->m_Position - glm::vec3(GetPosition()); @@ -12494,13 +12494,13 @@ void Client::Handle_OP_Shielding(const EQApplicationPacket *app) Shielding_Struct* shield = (Shielding_Struct*)app->pBuffer; shield_target = entity_list.GetMob(shield->target_id); bool ack = false; - EQEmu::ItemInstance* inst = GetInv().GetItem(EQEmu::invslot::slotSecondary); + EQ::ItemInstance* inst = GetInv().GetItem(EQ::invslot::slotSecondary); if (!shield_target) return; if (inst) { - const EQEmu::ItemData* shield = inst->GetItem(); - if (shield && shield->ItemType == EQEmu::item::ItemTypeShield) + const EQ::ItemData* shield = inst->GetItem(); + if (shield && shield->ItemType == EQ::item::ItemTypeShield) { for (int x = 0; x < 2; x++) { @@ -12603,7 +12603,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) break; } } - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; uint32 prevcharges = 0; if (item_id == 0) { //check to see if its on the temporary table std::list tmp_merlist = zone->tmpmerchanttable[tmp->GetNPCTypeID()]; @@ -12664,7 +12664,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) else charges = item->MaxCharges; - EQEmu::ItemInstance* inst = database.CreateItem(item, charges); + EQ::ItemInstance* inst = database.CreateItem(item, charges); int SinglePrice = 0; if (RuleB(Merchant, UsePriceMod)) @@ -12707,8 +12707,8 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) // shouldn't we be reimbursing if these two fail? //make sure we are not completely full... - if (freeslotid == EQEmu::invslot::slotCursor) { - if (m_inv.GetItem(EQEmu::invslot::slotCursor) != nullptr) { + if (freeslotid == EQ::invslot::slotCursor) { + if (m_inv.GetItem(EQ::invslot::slotCursor) != nullptr) { Message(Chat::Red, "You do not have room for any more items."); safe_delete(outapp); safe_delete(inst); @@ -12785,7 +12785,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app) qsaudit->items[0].item_id = item->ID; qsaudit->items[0].charges = mpo->quantity; - const EQEmu::ItemInstance* audit_inst = m_inv[freeslotid]; + const EQ::ItemInstance* audit_inst = m_inv[freeslotid]; if (audit_inst) { qsaudit->items[0].aug_1 = audit_inst->GetAugmentItemID(0); @@ -12850,8 +12850,8 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) uint32 itemid = GetItemIDAt(mp->itemslot); if (itemid == 0) return; - const EQEmu::ItemData* item = database.GetItem(itemid); - EQEmu::ItemInstance* inst = GetInv().GetItem(mp->itemslot); + const EQ::ItemData* item = database.GetItem(itemid); + EQ::ItemInstance* inst = GetInv().GetItem(mp->itemslot); if (!item || !inst) { Message(Chat::Red, "You seemed to have misplaced that item.."); return; @@ -12915,7 +12915,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) int freeslot = 0; if (charges > 0 && (freeslot = zone->SaveTempItem(vendor->CastToNPC()->MerchantType, vendor->GetNPCTypeID(), itemid, charges, true)) > 0) { - EQEmu::ItemInstance* inst2 = inst->Clone(); + EQ::ItemInstance* inst2 = inst->Clone(); while (true) { if (inst2 == nullptr) @@ -13105,7 +13105,7 @@ void Client::Handle_OP_ShopRequest(const EQApplicationPacket *app) void Client::Handle_OP_Sneak(const EQApplicationPacket *app) { - if (!HasSkill(EQEmu::skills::SkillSneak) && GetSkill(EQEmu::skills::SkillSneak) == 0) { + if (!HasSkill(EQ::skills::SkillSneak) && GetSkill(EQ::skills::SkillSneak) == 0) { return; //You cannot sneak if you do not have sneak } @@ -13129,9 +13129,9 @@ void Client::Handle_OP_Sneak(const EQApplicationPacket *app) safe_delete(outapp); } else { - CheckIncreaseSkill(EQEmu::skills::SkillSneak, nullptr, 5); + CheckIncreaseSkill(EQ::skills::SkillSneak, nullptr, 5); } - float hidechance = ((GetSkill(EQEmu::skills::SkillSneak) / 300.0f) + .25) * 100; + float hidechance = ((GetSkill(EQ::skills::SkillSneak) / 300.0f) + .25) * 100; float random = zone->random.Real(0, 99); if (!was && random < hidechance) { sneaking = true; @@ -13172,9 +13172,9 @@ void Client::Handle_OP_SpawnAppearance(const EQApplicationPacket *app) if (sa->type == AT_Invis) { if (sa->parameter != 0) { - if (!HasSkill(EQEmu::skills::SkillHide) && GetSkill(EQEmu::skills::SkillHide) == 0) + if (!HasSkill(EQ::skills::SkillHide) && GetSkill(EQ::skills::SkillHide) == 0) { - if (ClientVersion() < EQEmu::versions::ClientVersion::SoF) + if (ClientVersion() < EQ::versions::ClientVersion::SoF) { char *hack_str = nullptr; MakeAnyLenString(&hack_str, "Player sent OP_SpawnAppearance with AT_Invis: %i", sa->parameter); @@ -13276,7 +13276,7 @@ void Client::Handle_OP_SpawnAppearance(const EQApplicationPacket *app) if (sa->parameter != 0) { - if (!HasSkill(EQEmu::skills::SkillSneak)) + if (!HasSkill(EQ::skills::SkillSneak)) { char *hack_str = nullptr; MakeAnyLenString(&hack_str, "Player sent OP_SpawnAppearance with AT_Sneak: %i", sa->parameter); @@ -13446,7 +13446,7 @@ void Client::Handle_OP_SwapSpell(const EQApplicationPacket *app) const SwapSpell_Struct* swapspell = (const SwapSpell_Struct*)app->pBuffer; int swapspelltemp; - const auto sbs = EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize; + const auto sbs = EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize; if (swapspell->from_slot < 0 || swapspell->from_slot >= sbs) return; if (swapspell->to_slot < 0 || swapspell->to_slot >= sbs) @@ -13748,10 +13748,10 @@ void Client::Handle_OP_Track(const EQApplicationPacket *app) if (GetClass() != RANGER && GetClass() != DRUID && GetClass() != BARD) return; - if (GetSkill(EQEmu::skills::SkillTracking) == 0) - SetSkill(EQEmu::skills::SkillTracking, 1); + if (GetSkill(EQ::skills::SkillTracking) == 0) + SetSkill(EQ::skills::SkillTracking, 1); else - CheckIncreaseSkill(EQEmu::skills::SkillTracking, nullptr, 15); + CheckIncreaseSkill(EQ::skills::SkillTracking, nullptr, 15); if (!entity_list.MakeTrackPacket(this)) LogError("Unable to generate OP_Track packet requested by client"); @@ -14036,7 +14036,7 @@ void Client::Handle_OP_Trader(const EQApplicationPacket *app) TradeItemsValid = false; break; } - const EQEmu::ItemData *Item = database.GetItem(gis->Items[i]); + const EQ::ItemData *Item = database.GetItem(gis->Items[i]); if (!Item) { Message(Chat::Red, "Unexpected error. Unable to start trader mode"); @@ -14076,7 +14076,7 @@ void Client::Handle_OP_Trader(const EQApplicationPacket *app) this->Trader_StartTrader(); // This refreshes the Trader window to display the End Trader button - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { auto outapp = new EQApplicationPacket(OP_Trader, sizeof(TraderStatus_Struct)); TraderStatus_Struct* tss = (TraderStatus_Struct*)outapp->pBuffer; @@ -14572,7 +14572,7 @@ void Client::Handle_OP_WearChange(const EQApplicationPacket *app) return; // Hero Forge ID needs to be fixed here as RoF2 appears to send an incorrect value. - if (wc->hero_forge_model != 0 && wc->wear_slot_id >= 0 && wc->wear_slot_id < EQEmu::textures::weaponPrimary) + if (wc->hero_forge_model != 0 && wc->wear_slot_id >= 0 && wc->wear_slot_id < EQ::textures::weaponPrimary) wc->hero_forge_model = GetHerosForgeModel(wc->wear_slot_id); // we could maybe ignore this and just send our own from moveitem diff --git a/zone/client_process.cpp b/zone/client_process.cpp index d8ec451a9..29a826f0e 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -112,7 +112,7 @@ bool Client::Process() { HandleRespawnFromHover(0); } - if (IsTracking() && (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) && TrackingTimer.Check()) + if (IsTracking() && (ClientVersion() >= EQ::versions::ClientVersion::SoD) && TrackingTimer.Check()) DoTracking(); // SendHPUpdate calls hpupdate_timer.Start so it can delay this timer, so lets not reset with the check @@ -286,10 +286,10 @@ bool Client::Process() { } if (AutoFireEnabled()) { - EQEmu::ItemInstance *ranged = GetInv().GetItem(EQEmu::invslot::slotRange); + EQ::ItemInstance *ranged = GetInv().GetItem(EQ::invslot::slotRange); if (ranged) { - if (ranged->GetItem() && ranged->GetItem()->ItemType == EQEmu::item::ItemTypeBow) { + if (ranged->GetItem() && ranged->GetItem()->ItemType == EQ::item::ItemTypeBow) { if (ranged_timer.Check(false)) { if (GetTarget() && (GetTarget()->IsNPC() || GetTarget()->IsClient())) { if (GetTarget()->InFrontMob(this, GetTarget()->GetX(), GetTarget()->GetY())) { @@ -309,7 +309,7 @@ bool Client::Process() { ranged_timer.Start(); } } - else if (ranged->GetItem() && (ranged->GetItem()->ItemType == EQEmu::item::ItemTypeLargeThrowing || ranged->GetItem()->ItemType == EQEmu::item::ItemTypeSmallThrowing)) { + else if (ranged->GetItem() && (ranged->GetItem()->ItemType == EQ::item::ItemTypeLargeThrowing || ranged->GetItem()->ItemType == EQ::item::ItemTypeSmallThrowing)) { if (ranged_timer.Check(false)) { if (GetTarget() && (GetTarget()->IsNPC() || GetTarget()->IsClient())) { if (GetTarget()->InFrontMob(this, GetTarget()->GetX(), GetTarget()->GetY())) { @@ -374,11 +374,11 @@ bool Client::Process() { } else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP { - EQEmu::ItemInstance *wpn = GetInv().GetItem(EQEmu::invslot::slotPrimary); - TryWeaponProc(wpn, auto_attack_target, EQEmu::invslot::slotPrimary); - TriggerDefensiveProcs(auto_attack_target, EQEmu::invslot::slotPrimary, false); + EQ::ItemInstance *wpn = GetInv().GetItem(EQ::invslot::slotPrimary); + TryWeaponProc(wpn, auto_attack_target, EQ::invslot::slotPrimary); + TriggerDefensiveProcs(auto_attack_target, EQ::invslot::slotPrimary, false); - DoAttackRounds(auto_attack_target, EQEmu::invslot::slotPrimary); + DoAttackRounds(auto_attack_target, EQ::invslot::slotPrimary); if (CheckAATimer(aaTimerRampage)) { entity_list.AEAttack(this, 30); } @@ -413,12 +413,12 @@ bool Client::Process() { //you can't see your target } else if (auto_attack_target->GetHP() > -10) { - CheckIncreaseSkill(EQEmu::skills::SkillDualWield, auto_attack_target, -10); + CheckIncreaseSkill(EQ::skills::SkillDualWield, auto_attack_target, -10); if (CheckDualWield()) { - EQEmu::ItemInstance *wpn = GetInv().GetItem(EQEmu::invslot::slotSecondary); - TryWeaponProc(wpn, auto_attack_target, EQEmu::invslot::slotSecondary); + EQ::ItemInstance *wpn = GetInv().GetItem(EQ::invslot::slotSecondary); + TryWeaponProc(wpn, auto_attack_target, EQ::invslot::slotSecondary); - DoAttackRounds(auto_attack_target, EQEmu::invslot::slotSecondary); + DoAttackRounds(auto_attack_target, EQ::invslot::slotSecondary); } } } @@ -722,10 +722,10 @@ void Client::BulkSendInventoryItems() { // LINKDEAD TRADE ITEMS // Move trade slot items back into normal inventory..need them there now for the proceeding validity checks - for (int16 slot_id = EQEmu::invslot::TRADE_BEGIN; slot_id <= EQEmu::invslot::TRADE_END; slot_id++) { - EQEmu::ItemInstance* inst = m_inv.PopItem(slot_id); + for (int16 slot_id = EQ::invslot::TRADE_BEGIN; slot_id <= EQ::invslot::TRADE_END; slot_id++) { + EQ::ItemInstance* inst = m_inv.PopItem(slot_id); if(inst) { - bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false; + bool is_arrow = (inst->GetItem()->ItemType == EQ::item::ItemTypeArrow) ? true : false; int16 free_slot_id = m_inv.FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size, is_arrow); LogInventory("Incomplete Trade Transaction: Moving [{}] from slot [{}] to [{}]", inst->GetItem()->Name, slot_id, free_slot_id); PutItemInInventory(free_slot_id, *inst, false); @@ -744,12 +744,12 @@ void Client::BulkSendInventoryItems() RemoveDuplicateLore(false); MoveSlotNotAllowed(false); - EQEmu::OutBuffer ob; - EQEmu::OutBuffer::pos_type last_pos = ob.tellp(); + EQ::OutBuffer ob; + EQ::OutBuffer::pos_type last_pos = ob.tellp(); // Possessions items - for (int16 slot_id = EQEmu::invslot::POSSESSIONS_BEGIN; slot_id <= EQEmu::invslot::POSSESSIONS_END; slot_id++) { - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + for (int16 slot_id = EQ::invslot::POSSESSIONS_BEGIN; slot_id <= EQ::invslot::POSSESSIONS_END; slot_id++) { + const EQ::ItemInstance* inst = m_inv[slot_id]; if (!inst) continue; @@ -762,8 +762,8 @@ void Client::BulkSendInventoryItems() } // Bank items - for (int16 slot_id = EQEmu::invslot::BANK_BEGIN; slot_id <= EQEmu::invslot::BANK_END; slot_id++) { - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + for (int16 slot_id = EQ::invslot::BANK_BEGIN; slot_id <= EQ::invslot::BANK_END; slot_id++) { + const EQ::ItemInstance* inst = m_inv[slot_id]; if (!inst) continue; @@ -776,8 +776,8 @@ void Client::BulkSendInventoryItems() } // SharedBank items - for (int16 slot_id = EQEmu::invslot::SHARED_BANK_BEGIN; slot_id <= EQEmu::invslot::SHARED_BANK_END; slot_id++) { - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + for (int16 slot_id = EQ::invslot::SHARED_BANK_BEGIN; slot_id <= EQ::invslot::SHARED_BANK_END; slot_id++) { + const EQ::ItemInstance* inst = m_inv[slot_id]; if (!inst) continue; @@ -797,12 +797,12 @@ void Client::BulkSendInventoryItems() } void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { - const EQEmu::ItemData* handyitem = nullptr; + const EQ::ItemData* handyitem = nullptr; uint32 numItemSlots = 80; //The max number of items passed in the transaction. - if (m_ClientVersionBit & EQEmu::versions::maskRoFAndLater) { // RoF+ can send 200 items + if (m_ClientVersionBit & EQ::versions::maskRoFAndLater) { // RoF+ can send 200 items numItemSlots = 200; } - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; std::list merlist = zone->merchanttable[merchant_id]; std::list::const_iterator itr; Mob* merch = entity_list.GetMobByNpcTypeID(npcid); @@ -851,7 +851,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { int charges = 1; if (item->IsClassCommon()) charges = item->MaxCharges; - EQEmu::ItemInstance* inst = database.CreateItem(item, charges); + EQ::ItemInstance* inst = database.CreateItem(item, charges); if (inst) { if (RuleB(Merchant, UsePriceMod)) { inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false))); @@ -892,7 +892,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { // charges=ml.charges; //else charges = item->MaxCharges; - EQEmu::ItemInstance* inst = database.CreateItem(item, charges); + EQ::ItemInstance* inst = database.CreateItem(item, charges); if (inst) { if (RuleB(Merchant, UsePriceMod)) { inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false))); @@ -1066,11 +1066,11 @@ void Client::OPMemorizeSpell(const EQApplicationPacket* app) switch(memspell->scribing) { case memSpellScribing: { // scribing spell to book - const EQEmu::ItemInstance* inst = m_inv[EQEmu::invslot::slotCursor]; + const EQ::ItemInstance* inst = m_inv[EQ::invslot::slotCursor]; if (inst && inst->IsClassCommon()) { - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (RuleB(Character, RestrictSpellScribing) && !item->IsEquipable(GetRace(), GetClass())) { MessageString(Chat::Red, CANNOT_USE_ITEM); @@ -1080,7 +1080,7 @@ void Client::OPMemorizeSpell(const EQApplicationPacket* app) if(item && item->Scroll.Effect == (int32)(memspell->spell_id)) { ScribeSpell(memspell->spell_id, memspell->slot); - DeleteItemInInventory(EQEmu::invslot::slotCursor, 1, true); + DeleteItemInInventory(EQ::invslot::slotCursor, 1, true); } else Message(0,"Scribing spell: inst exists but item does not or spell ids do not match."); @@ -1119,7 +1119,7 @@ void Client::CancelSneakHide() // The later clients send back a OP_Hide (this has a size but data is 0) // as well as OP_SpawnAppearance with AT_Invis and one with AT_Sneak // So we don't have to handle any of those flags - if (ClientVersionBit() & EQEmu::versions::maskSoFAndEarlier) + if (ClientVersionBit() & EQ::versions::maskSoFAndEarlier) sneaking = false; } } @@ -1486,19 +1486,19 @@ void Client::OPGMTraining(const EQApplicationPacket *app) // if this for-loop acts up again (crashes linux), try enabling the before and after #pragmas //#pragma GCC push_options //#pragma GCC optimize ("O0") - for (int sk = EQEmu::skills::Skill1HBlunt; sk <= EQEmu::skills::HIGHEST_SKILL; ++sk) { - if (sk == EQEmu::skills::SkillTinkering && GetRace() != GNOME) { + for (int sk = EQ::skills::Skill1HBlunt; sk <= EQ::skills::HIGHEST_SKILL; ++sk) { + if (sk == EQ::skills::SkillTinkering && GetRace() != GNOME) { gmtrain->skills[sk] = 0; //Non gnomes can't tinker! } else { - gmtrain->skills[sk] = GetMaxSkillAfterSpecializationRules((EQEmu::skills::SkillType)sk, MaxSkill((EQEmu::skills::SkillType)sk, GetClass(), RuleI(Character, MaxLevel))); + gmtrain->skills[sk] = GetMaxSkillAfterSpecializationRules((EQ::skills::SkillType)sk, MaxSkill((EQ::skills::SkillType)sk, GetClass(), RuleI(Character, MaxLevel))); //this is the highest level that the trainer can train you to, this is enforced clientside so we can't just //Set it to 1 with CanHaveSkill or you wont be able to train past 1. } } - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2 && GetClass() == BERSERKER) { - gmtrain->skills[EQEmu::skills::Skill1HPiercing] = gmtrain->skills[EQEmu::skills::Skill2HPiercing]; - gmtrain->skills[EQEmu::skills::Skill2HPiercing] = 0; + if (ClientVersion() < EQ::versions::ClientVersion::RoF2 && GetClass() == BERSERKER) { + gmtrain->skills[EQ::skills::Skill1HPiercing] = gmtrain->skills[EQ::skills::Skill2HPiercing]; + gmtrain->skills[EQ::skills::Skill2HPiercing] = 0; } //#pragma GCC pop_options @@ -1587,14 +1587,14 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) else if (gmskill->skillbank == 0x00) { // normal skills go here - if (gmskill->skill_id > EQEmu::skills::HIGHEST_SKILL) + if (gmskill->skill_id > EQ::skills::HIGHEST_SKILL) { std::cout << "Wrong Training Skill (abilities)" << std::endl; DumpPacket(app); return; } - EQEmu::skills::SkillType skill = (EQEmu::skills::SkillType)gmskill->skill_id; + EQ::skills::SkillType skill = (EQ::skills::SkillType)gmskill->skill_id; if(!CanHaveSkill(skill)) { LogSkills("Tried to train skill [{}], which is not allowed", skill); @@ -1619,27 +1619,27 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) SetSkill(skill, t_level); } else { switch(skill) { - case EQEmu::skills::SkillBrewing: - case EQEmu::skills::SkillMakePoison: - case EQEmu::skills::SkillTinkering: - case EQEmu::skills::SkillResearch: - case EQEmu::skills::SkillAlchemy: - case EQEmu::skills::SkillBaking: - case EQEmu::skills::SkillTailoring: - case EQEmu::skills::SkillBlacksmithing: - case EQEmu::skills::SkillFletching: - case EQEmu::skills::SkillJewelryMaking: - case EQEmu::skills::SkillPottery: + case EQ::skills::SkillBrewing: + case EQ::skills::SkillMakePoison: + case EQ::skills::SkillTinkering: + case EQ::skills::SkillResearch: + case EQ::skills::SkillAlchemy: + case EQ::skills::SkillBaking: + case EQ::skills::SkillTailoring: + case EQ::skills::SkillBlacksmithing: + case EQ::skills::SkillFletching: + case EQ::skills::SkillJewelryMaking: + case EQ::skills::SkillPottery: if(skilllevel >= RuleI(Skills, MaxTrainTradeskills)) { MessageString(Chat::Red, MORE_SKILLED_THAN_I, pTrainer->GetCleanName()); return; } break; - case EQEmu::skills::SkillSpecializeAbjure: - case EQEmu::skills::SkillSpecializeAlteration: - case EQEmu::skills::SkillSpecializeConjuration: - case EQEmu::skills::SkillSpecializeDivination: - case EQEmu::skills::SkillSpecializeEvocation: + case EQ::skills::SkillSpecializeAbjure: + case EQ::skills::SkillSpecializeAlteration: + case EQ::skills::SkillSpecializeConjuration: + case EQ::skills::SkillSpecializeDivination: + case EQ::skills::SkillSpecializeEvocation: if(skilllevel >= RuleI(Skills, MaxTrainSpecializations)) { MessageString(Chat::Red, MORE_SKILLED_THAN_I, pTrainer->GetCleanName()); return; @@ -1656,7 +1656,7 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) return; } - if (gmskill->skill_id >= EQEmu::skills::SkillSpecializeAbjure && gmskill->skill_id <= EQEmu::skills::SkillSpecializeEvocation) + if (gmskill->skill_id >= EQ::skills::SkillSpecializeAbjure && gmskill->skill_id <= EQ::skills::SkillSpecializeEvocation) { int MaxSpecSkill = GetMaxSkillAfterSpecializationRules(skill, MaxSkillValue); if (skilllevel >= MaxSpecSkill) @@ -1680,7 +1680,7 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) } } - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) { + if (ClientVersion() >= EQ::versions::ClientVersion::SoF) { // The following packet decreases the skill points left in the Training Window and // produces the 'You have increased your skill / learned the basics of' message. // @@ -1694,7 +1694,7 @@ void Client::OPGMTrainSkill(const EQApplicationPacket *app) gmtsc->SkillID += 100; } else - gmtsc->NewSkill = (GetRawSkill((EQEmu::skills::SkillType)gmtsc->SkillID) == 1); + gmtsc->NewSkill = (GetRawSkill((EQ::skills::SkillType)gmtsc->SkillID) == 1); gmtsc->Cost = Cost; @@ -1775,8 +1775,8 @@ void Client::DoManaRegen() { if (GetMana() >= max_mana && spellbonuses.ManaRegen >= 0) return; - if (GetMana() < max_mana && (IsSitting() || CanMedOnHorse()) && HasSkill(EQEmu::skills::SkillMeditate)) - CheckIncreaseSkill(EQEmu::skills::SkillMeditate, nullptr, -5); + if (GetMana() < max_mana && (IsSitting() || CanMedOnHorse()) && HasSkill(EQ::skills::SkillMeditate)) + CheckIncreaseSkill(EQ::skills::SkillMeditate, nullptr, -5); SetMana(GetMana() + CalcManaRegen()); CheckManaEndUpdate(); @@ -1794,11 +1794,11 @@ void Client::DoStaminaHungerUpdate() if (GetHorseId() != 0) loss *= 3; - m_pp.hunger_level = EQEmu::Clamp(m_pp.hunger_level - loss, 0, 6000); - m_pp.thirst_level = EQEmu::Clamp(m_pp.thirst_level - loss, 0, 6000); + m_pp.hunger_level = EQ::Clamp(m_pp.hunger_level - loss, 0, 6000); + m_pp.thirst_level = EQ::Clamp(m_pp.thirst_level - loss, 0, 6000); if (spellbonuses.hunger) { - m_pp.hunger_level = EQEmu::ClampLower(m_pp.hunger_level, 3500); - m_pp.thirst_level = EQEmu::ClampLower(m_pp.thirst_level, 3500); + m_pp.hunger_level = EQ::ClampLower(m_pp.hunger_level, 3500); + m_pp.thirst_level = EQ::ClampLower(m_pp.thirst_level, 3500); } sta->food = m_pp.hunger_level; sta->water = m_pp.thirst_level; @@ -2113,7 +2113,7 @@ void Client::ClearHover() entity_list.QueueClients(this, outapp, false); safe_delete(outapp); - if (IsClient() && CastToClient()->ClientVersionBit() & EQEmu::versions::maskUFAndLater) + if (IsClient() && CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater) { EQApplicationPacket *outapp = MakeBuffsPacket(false); CastToClient()->FastQueuePacket(&outapp); diff --git a/zone/command.cpp b/zone/command.cpp index 7157434c9..09aa704b1 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -1569,7 +1569,7 @@ void command_list(Client *c, const Seperator *sep) c->Message( 0, "| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), entity->GetID(), entity->GetName(), entity->GetX(), @@ -1610,7 +1610,7 @@ void command_list(Client *c, const Seperator *sep) c->Message( 0, "| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), entity->GetID(), entity->GetName(), entity->GetX(), @@ -1651,7 +1651,7 @@ void command_list(Client *c, const Seperator *sep) c->Message( 0, "| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), entity->GetID(), entity->GetName(), entity->GetX(), @@ -1692,7 +1692,7 @@ void command_list(Client *c, const Seperator *sep) c->Message( 0, "| %s | Entity ID %5d | Door ID %i | %s | x %.0f | y %0.f | z %.0f", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), entity->GetID(), entity->GetDoorID(), entity->GetDoorName(), @@ -1734,7 +1734,7 @@ void command_list(Client *c, const Seperator *sep) c->Message( 0, "| %s | Entity ID %5d | Object DBID %i | %s | x %.0f | y %0.f | z %.0f", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Goto").c_str(), entity->GetID(), entity->GetDBID(), entity->GetModelName(), @@ -2624,7 +2624,7 @@ void command_showskills(Client *c, const Seperator *sep) t=c->GetTarget()->CastToClient(); c->Message(Chat::White, "Skills for %s", t->GetName()); - for (EQEmu::skills::SkillType i = EQEmu::skills::Skill1HBlunt; i <= EQEmu::skills::HIGHEST_SKILL; i = (EQEmu::skills::SkillType)(i + 1)) + for (EQ::skills::SkillType i = EQ::skills::Skill1HBlunt; i <= EQ::skills::HIGHEST_SKILL; i = (EQ::skills::SkillType)(i + 1)) c->Message(Chat::White, "Skill [%d] is at [%d] - %u", i, t->GetSkill(i), t->GetRawSkill(i)); } @@ -2693,14 +2693,14 @@ void command_castspell(Client *c, const Seperator *sep) else if (c->GetTarget() == 0) if(c->Admin() >= commandInstacast) - c->SpellFinished(spellid, 0, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spellid].ResistDiff); + c->SpellFinished(spellid, 0, EQ::spells::CastingSlot::Item, 0, -1, spells[spellid].ResistDiff); else - c->CastSpell(spellid, 0, EQEmu::spells::CastingSlot::Item, 0); + c->CastSpell(spellid, 0, EQ::spells::CastingSlot::Item, 0); else if(c->Admin() >= commandInstacast) - c->SpellFinished(spellid, c->GetTarget(), EQEmu::spells::CastingSlot::Item, 0, -1, spells[spellid].ResistDiff); + c->SpellFinished(spellid, c->GetTarget(), EQ::spells::CastingSlot::Item, 0, -1, spells[spellid].ResistDiff); else - c->CastSpell(spellid, c->GetTarget()->GetID(), EQEmu::spells::CastingSlot::Item, 0); + c->CastSpell(spellid, c->GetTarget()->GetID(), EQ::spells::CastingSlot::Item, 0); } } @@ -2772,20 +2772,20 @@ void command_setskill(Client *c, const Seperator *sep) c->Message(Chat::White, "Error: #setskill: Target must be a client."); } else if ( - !sep->IsNumber(1) || atoi(sep->arg[1]) < 0 || atoi(sep->arg[1]) > EQEmu::skills::HIGHEST_SKILL || + !sep->IsNumber(1) || atoi(sep->arg[1]) < 0 || atoi(sep->arg[1]) > EQ::skills::HIGHEST_SKILL || !sep->IsNumber(2) || atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > HIGHEST_CAN_SET_SKILL ) { c->Message(Chat::White, "Usage: #setskill skill x "); - c->Message(Chat::White, " skill = 0 to %d", EQEmu::skills::HIGHEST_SKILL); + c->Message(Chat::White, " skill = 0 to %d", EQ::skills::HIGHEST_SKILL); c->Message(Chat::White, " x = 0 to %d", HIGHEST_CAN_SET_SKILL); } else { LogInfo("Set skill request from [{}], target:[{}] skill_id:[{}] value:[{}]", c->GetName(), c->GetTarget()->GetName(), atoi(sep->arg[1]), atoi(sep->arg[2]) ); int skill_num = atoi(sep->arg[1]); uint16 skill_value = atoi(sep->arg[2]); - if (skill_num <= EQEmu::skills::HIGHEST_SKILL) - c->GetTarget()->CastToClient()->SetSkill((EQEmu::skills::SkillType)skill_num, skill_value); + if (skill_num <= EQ::skills::HIGHEST_SKILL) + c->GetTarget()->CastToClient()->SetSkill((EQ::skills::SkillType)skill_num, skill_value); } } @@ -2803,7 +2803,7 @@ void command_setskillall(Client *c, const Seperator *sep) if (c->Admin() >= commandSetSkillsOther || c->GetTarget()==c || c->GetTarget()==0) { LogInfo("Set ALL skill request from [{}], target:[{}]", c->GetName(), c->GetTarget()->GetName()); uint16 level = atoi(sep->arg[1]); - for (EQEmu::skills::SkillType skill_num = EQEmu::skills::Skill1HBlunt; skill_num <= EQEmu::skills::HIGHEST_SKILL; skill_num = (EQEmu::skills::SkillType)(skill_num + 1)) { + for (EQ::skills::SkillType skill_num = EQ::skills::Skill1HBlunt; skill_num <= EQ::skills::HIGHEST_SKILL; skill_num = (EQ::skills::SkillType)(skill_num + 1)) { c->GetTarget()->CastToClient()->SetSkill(skill_num, level); } } @@ -2992,7 +2992,7 @@ void command_spawneditmass(Client *c, const Seperator *sep) if (found_count > 0) { c->Message( Chat::Yellow, "To apply these changes, click <%s> or type [%s]", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), saylink.c_str() ); } @@ -3060,14 +3060,14 @@ void command_texture(Client *c, const Seperator *sep) // Player Races Wear Armor, so Wearchange is sent instead int i; if (!c->GetTarget()) - for (i = EQEmu::textures::textureBegin; i <= EQEmu::textures::LastTintableTexture; i++) + for (i = EQ::textures::textureBegin; i <= EQ::textures::LastTintableTexture; i++) { c->SendTextureWC(i, texture); } else if ((c->GetTarget()->GetModel() > 0 && c->GetTarget()->GetModel() <= 12) || c->GetTarget()->GetModel() == 128 || c->GetTarget()->GetModel() == 130 || c->GetTarget()->GetModel() == 330 || c->GetTarget()->GetModel() == 522) { - for (i = EQEmu::textures::textureBegin; i <= EQEmu::textures::LastTintableTexture; i++) + for (i = EQ::textures::textureBegin; i <= EQ::textures::LastTintableTexture; i++) { c->GetTarget()->SendTextureWC(i, texture); } @@ -3249,15 +3249,15 @@ void command_peekinv(Client *c, const Seperator *sep) static const char* scope_prefix[] = { "equip", "gen", "cursor", "limbo", "trib", "bank", "shbank", "trade", "world" }; static const int16 scope_range[][2] = { - { EQEmu::invslot::EQUIPMENT_BEGIN, EQEmu::invslot::EQUIPMENT_END }, - { EQEmu::invslot::GENERAL_BEGIN, EQEmu::invslot::GENERAL_END }, - { EQEmu::invslot::slotCursor, EQEmu::invslot::slotCursor }, - { EQEmu::invslot::SLOT_INVALID, EQEmu::invslot::SLOT_INVALID }, - { EQEmu::invslot::TRIBUTE_BEGIN, EQEmu::invslot::TRIBUTE_END }, - { EQEmu::invslot::BANK_BEGIN, EQEmu::invslot::BANK_END }, - { EQEmu::invslot::SHARED_BANK_BEGIN, EQEmu::invslot::SHARED_BANK_END }, - { EQEmu::invslot::TRADE_BEGIN, EQEmu::invslot::TRADE_END }, - { EQEmu::invslot::SLOT_BEGIN, (EQEmu::invtype::WORLD_SIZE - 1) } + { EQ::invslot::EQUIPMENT_BEGIN, EQ::invslot::EQUIPMENT_END }, + { EQ::invslot::GENERAL_BEGIN, EQ::invslot::GENERAL_END }, + { EQ::invslot::slotCursor, EQ::invslot::slotCursor }, + { EQ::invslot::SLOT_INVALID, EQ::invslot::SLOT_INVALID }, + { EQ::invslot::TRIBUTE_BEGIN, EQ::invslot::TRIBUTE_END }, + { EQ::invslot::BANK_BEGIN, EQ::invslot::BANK_END }, + { EQ::invslot::SHARED_BANK_BEGIN, EQ::invslot::SHARED_BANK_END }, + { EQ::invslot::TRADE_BEGIN, EQ::invslot::TRADE_END }, + { EQ::invslot::SLOT_BEGIN, (EQ::invtype::WORLD_SIZE - 1) } }; static const bool scope_bag[] = { false, true, true, true, false, true, true, true, true }; @@ -3297,13 +3297,13 @@ void command_peekinv(Client *c, const Seperator *sep) if (c->GetTarget()) targetClient = c->GetTarget()->CastToClient(); - const EQEmu::ItemInstance* inst_main = nullptr; - const EQEmu::ItemInstance* inst_sub = nullptr; - const EQEmu::ItemInstance* inst_aug = nullptr; - const EQEmu::ItemData* item_data = nullptr; + const EQ::ItemInstance* inst_main = nullptr; + const EQ::ItemInstance* inst_sub = nullptr; + const EQ::ItemInstance* inst_aug = nullptr; + const EQ::ItemData* item_data = nullptr; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); c->Message(Chat::White, "Displaying inventory for %s...", targetClient->GetName()); @@ -3326,7 +3326,7 @@ void command_peekinv(Client *c, const Seperator *sep) } for (int16 indexMain = scope_range[scopeIndex][0]; indexMain <= scope_range[scopeIndex][1]; ++indexMain) { - if (indexMain == EQEmu::invslot::SLOT_INVALID) + if (indexMain == EQ::invslot::SLOT_INVALID) continue; inst_main = ((scopeBit & peekWorld) ? objectTradeskill->GetItem(indexMain) : targetClient->GetInv().GetItem(indexMain)); @@ -3344,14 +3344,14 @@ void command_peekinv(Client *c, const Seperator *sep) (item_data == nullptr), "%sSlot: %i, Item: %i (%s), Charges: %i", scope_prefix[scopeIndex], - ((scopeBit & peekWorld) ? (EQEmu::invslot::WORLD_BEGIN + indexMain) : indexMain), + ((scopeBit & peekWorld) ? (EQ::invslot::WORLD_BEGIN + indexMain) : indexMain), ((item_data == nullptr) ? 0 : item_data->ID), linker.GenerateLink().c_str(), ((inst_main == nullptr) ? 0 : inst_main->GetCharges()) ); if (inst_main && inst_main->IsClassCommon()) { - for (uint8 indexAug = EQEmu::invaug::SOCKET_BEGIN; indexAug <= EQEmu::invaug::SOCKET_END; ++indexAug) { + for (uint8 indexAug = EQ::invaug::SOCKET_BEGIN; indexAug <= EQ::invaug::SOCKET_END; ++indexAug) { inst_aug = inst_main->GetItem(indexAug); if (!inst_aug) // extant only continue; @@ -3364,7 +3364,7 @@ void command_peekinv(Client *c, const Seperator *sep) ".%sAugSlot: %i (Slot #%i, Aug idx #%i), Item: %i (%s), Charges: %i", scope_prefix[scopeIndex], INVALID_INDEX, - ((scopeBit & peekWorld) ? (EQEmu::invslot::WORLD_BEGIN + indexMain) : indexMain), + ((scopeBit & peekWorld) ? (EQ::invslot::WORLD_BEGIN + indexMain) : indexMain), indexAug, ((item_data == nullptr) ? 0 : item_data->ID), linker.GenerateLink().c_str(), @@ -3376,7 +3376,7 @@ void command_peekinv(Client *c, const Seperator *sep) if (!scope_bag[scopeIndex] || !(inst_main && inst_main->IsClassBag())) continue; - for (uint8 indexSub = EQEmu::invbag::SLOT_BEGIN; indexSub <= EQEmu::invbag::SLOT_END; ++indexSub) { + for (uint8 indexSub = EQ::invbag::SLOT_BEGIN; indexSub <= EQ::invbag::SLOT_END; ++indexSub) { inst_sub = inst_main->GetItem(indexSub); if (!inst_sub) // extant only continue; @@ -3388,8 +3388,8 @@ void command_peekinv(Client *c, const Seperator *sep) (item_data == nullptr), "..%sBagSlot: %i (Slot #%i, Bag idx #%i), Item: %i (%s), Charges: %i", scope_prefix[scopeIndex], - ((scopeBit & peekWorld) ? INVALID_INDEX : EQEmu::InventoryProfile::CalcSlotId(indexMain, indexSub)), - ((scopeBit & peekWorld) ? (EQEmu::invslot::WORLD_BEGIN + indexMain) : indexMain), + ((scopeBit & peekWorld) ? INVALID_INDEX : EQ::InventoryProfile::CalcSlotId(indexMain, indexSub)), + ((scopeBit & peekWorld) ? (EQ::invslot::WORLD_BEGIN + indexMain) : indexMain), indexSub, ((item_data == nullptr) ? 0 : item_data->ID), linker.GenerateLink().c_str(), @@ -3397,7 +3397,7 @@ void command_peekinv(Client *c, const Seperator *sep) ); if (inst_sub->IsClassCommon()) { - for (uint8 indexAug = EQEmu::invaug::SOCKET_BEGIN; indexAug <= EQEmu::invaug::SOCKET_END; ++indexAug) { + for (uint8 indexAug = EQ::invaug::SOCKET_BEGIN; indexAug <= EQ::invaug::SOCKET_END; ++indexAug) { inst_aug = inst_sub->GetItem(indexAug); if (!inst_aug) // extant only continue; @@ -3410,7 +3410,7 @@ void command_peekinv(Client *c, const Seperator *sep) "...%sAugSlot: %i (Slot #%i, Sub idx #%i, Aug idx #%i), Item: %i (%s), Charges: %i", scope_prefix[scopeIndex], INVALID_INDEX, - ((scopeBit & peekWorld) ? INVALID_INDEX : EQEmu::InventoryProfile::CalcSlotId(indexMain, indexSub)), + ((scopeBit & peekWorld) ? INVALID_INDEX : EQ::InventoryProfile::CalcSlotId(indexMain, indexSub)), indexSub, indexAug, ((item_data == nullptr) ? 0 : item_data->ID), @@ -3450,7 +3450,7 @@ void command_peekinv(Client *c, const Seperator *sep) ); if (inst_main && inst_main->IsClassCommon()) { - for (uint8 indexAug = EQEmu::invaug::SOCKET_BEGIN; indexAug <= EQEmu::invaug::SOCKET_END; ++indexAug) { + for (uint8 indexAug = EQ::invaug::SOCKET_BEGIN; indexAug <= EQ::invaug::SOCKET_END; ++indexAug) { inst_aug = inst_main->GetItem(indexAug); if (!inst_aug) // extant only continue; @@ -3475,7 +3475,7 @@ void command_peekinv(Client *c, const Seperator *sep) if (!scope_bag[scopeIndex] || !(inst_main && inst_main->IsClassBag())) continue; - for (uint8 indexSub = EQEmu::invbag::SLOT_BEGIN; indexSub <= EQEmu::invbag::SLOT_END; ++indexSub) { + for (uint8 indexSub = EQ::invbag::SLOT_BEGIN; indexSub <= EQ::invbag::SLOT_END; ++indexSub) { inst_sub = inst_main->GetItem(indexSub); if (!inst_sub) continue; @@ -3497,7 +3497,7 @@ void command_peekinv(Client *c, const Seperator *sep) ); if (inst_sub->IsClassCommon()) { - for (uint8 indexAug = EQEmu::invaug::SOCKET_BEGIN; indexAug <= EQEmu::invaug::SOCKET_END; ++indexAug) { + for (uint8 indexAug = EQ::invaug::SOCKET_BEGIN; indexAug <= EQ::invaug::SOCKET_END; ++indexAug) { inst_aug = inst_sub->GetItem(indexAug); if (!inst_aug) // extant only continue; @@ -3557,7 +3557,7 @@ void command_interrogateinv(Client *c, const Seperator *sep) } Client* target = nullptr; - std::map instmap; + std::map instmap; bool log = false; bool silent = false; bool error = false; @@ -4063,7 +4063,7 @@ void command_faction(Client *c, const Seperator *sep) std::string fvalue = rrow[2]; _ctr2++; std::string resetlink = fmt::format("#faction reset {}", f_id); - c->Message(Chat::Yellow, "Reset: %s id: %s (%s)", EQEmu::SayLinkEngine::GenerateQuestSaylink(resetlink, false, cname.c_str()).c_str(), std::to_string(f_id).c_str(), fvalue.c_str()); + c->Message(Chat::Yellow, "Reset: %s id: %s (%s)", EQ::SayLinkEngine::GenerateQuestSaylink(resetlink, false, cname.c_str()).c_str(), std::to_string(f_id).c_str(), fvalue.c_str()); } std::string response = _ctr2 > 0 ? fmt::format("Found {} matching factions", _ctr2).c_str() : "No faction hits found."; c->Message(Chat::Yellow, response.c_str()); @@ -4159,8 +4159,8 @@ void command_findzone(Client *c, const Seperator *sep) break; } - std::string command_zone = EQEmu::SayLinkEngine::GenerateQuestSaylink("#zone " + short_name, false, "zone"); - std::string command_gmzone = EQEmu::SayLinkEngine::GenerateQuestSaylink( + std::string command_zone = EQ::SayLinkEngine::GenerateQuestSaylink("#zone " + short_name, false, "zone"); + std::string command_gmzone = EQ::SayLinkEngine::GenerateQuestSaylink( fmt::format("#gmzone {} {}", short_name, version), false, "gmzone" @@ -4410,16 +4410,16 @@ void command_listpetition(Client *c, const Seperator *sep) void command_equipitem(Client *c, const Seperator *sep) { uint32 slot_id = atoi(sep->arg[1]); - if (sep->IsNumber(1) && (slot_id >= EQEmu::invslot::EQUIPMENT_BEGIN && slot_id <= EQEmu::invslot::EQUIPMENT_END)) { - const EQEmu::ItemInstance* from_inst = c->GetInv().GetItem(EQEmu::invslot::slotCursor); - const EQEmu::ItemInstance* to_inst = c->GetInv().GetItem(slot_id); // added (desync issue when forcing stack to stack) + if (sep->IsNumber(1) && (slot_id >= EQ::invslot::EQUIPMENT_BEGIN && slot_id <= EQ::invslot::EQUIPMENT_END)) { + const EQ::ItemInstance* from_inst = c->GetInv().GetItem(EQ::invslot::slotCursor); + const EQ::ItemInstance* to_inst = c->GetInv().GetItem(slot_id); // added (desync issue when forcing stack to stack) bool partialmove = false; int16 movecount; if (from_inst && from_inst->IsClassCommon()) { auto outapp = new EQApplicationPacket(OP_MoveItem, sizeof(MoveItem_Struct)); MoveItem_Struct* mi = (MoveItem_Struct*)outapp->pBuffer; - mi->from_slot = EQEmu::invslot::slotCursor; + mi->from_slot = EQ::invslot::slotCursor; mi->to_slot = slot_id; // mi->number_in_stack = from_inst->GetCharges(); // replaced with con check for stacking @@ -5151,7 +5151,7 @@ void command_memspell(Client *c, const Seperator *sep) { slot = atoi(sep->arg[1]) - 1; spell_id = atoi(sep->arg[2]); - if (slot > EQEmu::spells::SPELL_GEM_COUNT || spell_id >= SPDAT_RECORDS) + if (slot > EQ::spells::SPELL_GEM_COUNT || spell_id >= SPDAT_RECORDS) { c->Message(Chat::White, "Error: #MemSpell: Arguement out of range"); } @@ -5249,11 +5249,11 @@ void command_devtools(Client *c, const Seperator *sep) /** * Search entity commands */ - menu_commands_search += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#list npcs", false, "NPC") + "] "; - menu_commands_search += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#list players", false, "Players") + "] "; - menu_commands_search += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#list corpses", false, "Corpses") + "] "; - menu_commands_search += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#list doors", false, "Doors") + "] "; - menu_commands_search += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#list objects", false, "Objects") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list npcs", false, "NPC") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list players", false, "Players") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list corpses", false, "Corpses") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list doors", false, "Doors") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list objects", false, "Objects") + "] "; std::string dev_tools_window_key = StringFormat("%i-dev-tools-window-disabled", c->AccountID()); @@ -5272,9 +5272,9 @@ void command_devtools(Client *c, const Seperator *sep) /** * Show window status */ - window_toggle_command = "Disabled [" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#devtools enable_window", false, "Enable") + "] "; + window_toggle_command = "Disabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools enable_window", false, "Enable") + "] "; if (c->IsDevToolsWindowEnabled()) { - window_toggle_command = "Enabled [" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#devtools disable_window", false, "Disable") + "] "; + window_toggle_command = "Enabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools disable_window", false, "Disable") + "] "; } /** @@ -5546,7 +5546,7 @@ void command_proximity(Client *c, const Seperator *sep) points.push_back(p); } - if (c->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) { + if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) { c->SendPathPacket(points); } } @@ -5723,7 +5723,7 @@ void command_killallnpcs(Client *c, const Seperator *sep) continue; } - entity->Damage(c, 1000000000, 0, EQEmu::skills::SkillDragonPunch); + entity->Damage(c, 1000000000, 0, EQ::skills::SkillDragonPunch); count++; } @@ -5759,7 +5759,7 @@ void command_damage(Client *c, const Seperator *sep) if (nkdmg > 2100000000) c->Message(Chat::White, "Enter a value less then 2,100,000,000."); else - c->GetTarget()->Damage(c, nkdmg, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand, false); + c->GetTarget()->Damage(c, nkdmg, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false); } } @@ -5949,7 +5949,7 @@ void command_goto(Client *c, const Seperator *sep) void command_iteminfo(Client *c, const Seperator *sep) { - auto inst = c->GetInv()[EQEmu::invslot::slotCursor]; + auto inst = c->GetInv()[EQ::invslot::slotCursor]; if (!inst) { c->Message(Chat::Red, "Error: You need an item on your cursor for this command"); return; @@ -5961,8 +5961,8 @@ void command_iteminfo(Client *c, const Seperator *sep) return; } - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); linker.SetItemInst(inst); c->Message(Chat::White, "*** Item Info for [%s] ***", linker.GenerateLink().c_str()); @@ -6653,7 +6653,7 @@ void command_editmassrespawn(Client* c, const Seperator* sep) c->Message( Chat::Yellow, "To apply these changes, click <%s> or type [%s]", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), saylink.c_str() ); } @@ -7027,7 +7027,7 @@ void command_scribespells(Client *c, const Seperator *sep) int spell_id = 0; int count = 0; - for ( ; spell_id < SPDAT_RECORDS && book_slot < EQEmu::spells::SPELLBOOK_SIZE; ++spell_id) { + for ( ; spell_id < SPDAT_RECORDS && book_slot < EQ::spells::SPELLBOOK_SIZE; ++spell_id) { if (book_slot == -1) { t->Message( 13, @@ -7050,8 +7050,8 @@ void command_scribespells(Client *c, const Seperator *sep) c->Message(Chat::Red, "FATAL ERROR: Spell id out-of-range (id: %i, min: 0, max: %i)", spell_id, SPDAT_RECORDS); return; } - if (book_slot < 0 || book_slot >= EQEmu::spells::SPELLBOOK_SIZE) { - c->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQEmu::spells::SPELLBOOK_SIZE); + if (book_slot < 0 || book_slot >= EQ::spells::SPELLBOOK_SIZE) { + c->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQ::spells::SPELLBOOK_SIZE); return; } @@ -7286,9 +7286,9 @@ void command_summonitem(Client *c, const Seperator *sep) std::string cmd_msg = sep->msg; size_t link_open = cmd_msg.find('\x12'); size_t link_close = cmd_msg.find_last_of('\x12'); - if (link_open != link_close && (cmd_msg.length() - link_open) > EQEmu::constants::SAY_LINK_BODY_SIZE) { - EQEmu::SayLinkBody_Struct link_body; - EQEmu::saylink::DegenerateLinkBody(link_body, cmd_msg.substr(link_open + 1, EQEmu::constants::SAY_LINK_BODY_SIZE)); + if (link_open != link_close && (cmd_msg.length() - link_open) > EQ::constants::SAY_LINK_BODY_SIZE) { + EQ::SayLinkBody_Struct link_body; + EQ::saylink::DegenerateLinkBody(link_body, cmd_msg.substr(link_open + 1, EQ::constants::SAY_LINK_BODY_SIZE)); itemid = link_body.item_id; } else if (!sep->IsNumber(1)) { @@ -7304,7 +7304,7 @@ void command_summonitem(Client *c, const Seperator *sep) } int16 item_status = 0; - const EQEmu::ItemData* item = database.GetItem(itemid); + const EQ::ItemData* item = database.GetItem(itemid); if (item) { item_status = static_cast(item->MinStatus); } @@ -7343,7 +7343,7 @@ void command_giveitem(Client *c, const Seperator *sep) Client *t = c->GetTarget()->CastToClient(); uint32 itemid = atoi(sep->arg[1]); int16 item_status = 0; - const EQEmu::ItemData* item = database.GetItem(itemid); + const EQ::ItemData* item = database.GetItem(itemid); if(item) { item_status = static_cast(item->MinStatus); } @@ -7396,9 +7396,9 @@ void command_itemsearch(Client *c, const Seperator *sep) { const char *search_criteria=sep->argplus[1]; - const EQEmu::ItemData* item = nullptr; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemData); + const EQ::ItemData* item = nullptr; + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); if (Seperator::IsNumber(search_criteria)) { item = database.GetItem(atoi(search_criteria)); @@ -8101,7 +8101,7 @@ void command_npceditmass(Client *c, const Seperator *sep) if (found_count > 0) { c->Message( Chat::Yellow, "To apply these changes, click <%s> or type [%s]", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), saylink.c_str() ); } @@ -8889,9 +8889,9 @@ void command_path(Client *c, const Seperator *sep) } void Client::Undye() { - for (int cur_slot = EQEmu::textures::textureBegin; cur_slot <= EQEmu::textures::LastTexture; cur_slot++) { + for (int cur_slot = EQ::textures::textureBegin; cur_slot <= EQ::textures::LastTexture; cur_slot++) { uint8 slot2=SlotConvert(cur_slot); - EQEmu::ItemInstance* inst = m_inv.GetItem(slot2); + EQ::ItemInstance* inst = m_inv.GetItem(slot2); if(inst != nullptr) { inst->SetColor(inst->GetItem()->Color); @@ -8930,30 +8930,30 @@ void command_ucs(Client *c, const Seperator *sep) std::string buffer; std::string MailKey = database.GetMailKey(c->CharacterID(), true); - EQEmu::versions::UCSVersion ConnectionType = EQEmu::versions::ucsUnknown; + EQ::versions::UCSVersion ConnectionType = EQ::versions::ucsUnknown; // chat server packet switch (c->ClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumChat; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumChat; break; - case EQEmu::versions::ClientVersion::SoF: - ConnectionType = EQEmu::versions::ucsSoFCombined; + case EQ::versions::ClientVersion::SoF: + ConnectionType = EQ::versions::ucsSoFCombined; break; - case EQEmu::versions::ClientVersion::SoD: - ConnectionType = EQEmu::versions::ucsSoDCombined; + case EQ::versions::ClientVersion::SoD: + ConnectionType = EQ::versions::ucsSoDCombined; break; - case EQEmu::versions::ClientVersion::UF: - ConnectionType = EQEmu::versions::ucsUFCombined; + case EQ::versions::ClientVersion::UF: + ConnectionType = EQ::versions::ucsUFCombined; break; - case EQEmu::versions::ClientVersion::RoF: - ConnectionType = EQEmu::versions::ucsRoFCombined; + case EQ::versions::ClientVersion::RoF: + ConnectionType = EQ::versions::ucsRoFCombined; break; - case EQEmu::versions::ClientVersion::RoF2: - ConnectionType = EQEmu::versions::ucsRoF2Combined; + case EQ::versions::ClientVersion::RoF2: + ConnectionType = EQ::versions::ucsRoF2Combined; break; default: - ConnectionType = EQEmu::versions::ucsUnknown; + ConnectionType = EQ::versions::ucsUnknown; break; } @@ -8975,8 +8975,8 @@ void command_ucs(Client *c, const Seperator *sep) // mail server packet switch (c->ClientVersion()) { - case EQEmu::versions::ClientVersion::Titanium: - ConnectionType = EQEmu::versions::ucsTitaniumMail; + case EQ::versions::ClientVersion::Titanium: + ConnectionType = EQ::versions::ucsTitaniumMail; break; default: // retain value from previous switch @@ -11864,16 +11864,16 @@ void command_max_all_skills(Client *c, const Seperator *sep) { if(c) { - for (int i = 0; i <= EQEmu::skills::HIGHEST_SKILL; ++i) + for (int i = 0; i <= EQ::skills::HIGHEST_SKILL; ++i) { - if (i >= EQEmu::skills::SkillSpecializeAbjure && i <= EQEmu::skills::SkillSpecializeEvocation) + if (i >= EQ::skills::SkillSpecializeAbjure && i <= EQ::skills::SkillSpecializeEvocation) { - c->SetSkill((EQEmu::skills::SkillType)i, 50); + c->SetSkill((EQ::skills::SkillType)i, 50); } else { - int max_skill_level = database.GetSkillCap(c->GetClass(), (EQEmu::skills::SkillType)i, c->GetLevel()); - c->SetSkill((EQEmu::skills::SkillType)i, max_skill_level); + int max_skill_level = database.GetSkillCap(c->GetClass(), (EQ::skills::SkillType)i, c->GetLevel()); + c->SetSkill((EQ::skills::SkillType)i, max_skill_level); } } } @@ -11959,14 +11959,14 @@ void command_disarmtrap(Client *c, const Seperator *sep) if(target->IsNPC()) { - if (c->HasSkill(EQEmu::skills::SkillDisarmTraps)) + if (c->HasSkill(EQ::skills::SkillDisarmTraps)) { if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - c->HandleLDoNDisarm(target->CastToNPC(), c->GetSkill(EQEmu::skills::SkillDisarmTraps), LDoNTypeMechanical); + c->HandleLDoNDisarm(target->CastToNPC(), c->GetSkill(EQ::skills::SkillDisarmTraps), LDoNTypeMechanical); } else c->Message(Chat::Red, "You do not have the disarm trap skill."); @@ -11984,14 +11984,14 @@ void command_sensetrap(Client *c, const Seperator *sep) if(target->IsNPC()) { - if (c->HasSkill(EQEmu::skills::SkillSenseTraps)) + if (c->HasSkill(EQ::skills::SkillSenseTraps)) { if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - c->HandleLDoNSenseTraps(target->CastToNPC(), c->GetSkill(EQEmu::skills::SkillSenseTraps), LDoNTypeMechanical); + c->HandleLDoNSenseTraps(target->CastToNPC(), c->GetSkill(EQ::skills::SkillSenseTraps), LDoNTypeMechanical); } else c->Message(Chat::Red, "You do not have the sense traps skill."); @@ -12009,14 +12009,14 @@ void command_picklock(Client *c, const Seperator *sep) if(target->IsNPC()) { - if (c->HasSkill(EQEmu::skills::SkillPickLock)) + if (c->HasSkill(EQ::skills::SkillPickLock)) { if(DistanceSquaredNoZ(c->GetPosition(), target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { c->Message(Chat::Red, "%s is too far away.", target->GetCleanName()); return; } - c->HandleLDoNPickLock(target->CastToNPC(), c->GetSkill(EQEmu::skills::SkillPickLock), LDoNTypeMechanical); + c->HandleLDoNPickLock(target->CastToNPC(), c->GetSkill(EQ::skills::SkillPickLock), LDoNTypeMechanical); } else c->Message(Chat::Red, "You do not have the pick locks skill."); @@ -12032,27 +12032,27 @@ void command_profanity(Client *c, const Seperator *sep) // do nothing } else if (arg1.compare("clear") == 0) { - EQEmu::ProfanityManager::DeleteProfanityList(&database); + EQ::ProfanityManager::DeleteProfanityList(&database); auto pack = new ServerPacket(ServerOP_RefreshCensorship); worldserver.SendPacket(pack); safe_delete(pack); } else if (arg1.compare("add") == 0) { - if (!EQEmu::ProfanityManager::AddProfanity(&database, sep->arg[2])) + if (!EQ::ProfanityManager::AddProfanity(&database, sep->arg[2])) c->Message(Chat::Red, "Could not add '%s' to the profanity list.", sep->arg[2]); auto pack = new ServerPacket(ServerOP_RefreshCensorship); worldserver.SendPacket(pack); safe_delete(pack); } else if (arg1.compare("del") == 0) { - if (!EQEmu::ProfanityManager::RemoveProfanity(&database, sep->arg[2])) + if (!EQ::ProfanityManager::RemoveProfanity(&database, sep->arg[2])) c->Message(Chat::Red, "Could not delete '%s' from the profanity list.", sep->arg[2]); auto pack = new ServerPacket(ServerOP_RefreshCensorship); worldserver.SendPacket(pack); safe_delete(pack); } else if (arg1.compare("reload") == 0) { - if (!EQEmu::ProfanityManager::UpdateProfanityList(&database)) + if (!EQ::ProfanityManager::UpdateProfanityList(&database)) c->Message(Chat::Red, "Could not reload the profanity list."); auto pack = new ServerPacket(ServerOP_RefreshCensorship); worldserver.SendPacket(pack); @@ -12063,7 +12063,7 @@ void command_profanity(Client *c, const Seperator *sep) } std::string popup; - const auto &list = EQEmu::ProfanityManager::GetProfanityList(); + const auto &list = EQ::ProfanityManager::GetProfanityList(); for (const auto &iter : list) { popup.append(iter); popup.append("
"); @@ -12213,7 +12213,7 @@ void command_zopp(Client *c, const Seperator *sep) uint32 itemid = atoi(sep->arg[3]); int16 charges = sep->argnum == 4 ? atoi(sep->arg[4]) : 1; // defaults to 1 charge if not specified - const EQEmu::ItemData* FakeItem = database.GetItem(itemid); + const EQ::ItemData* FakeItem = database.GetItem(itemid); if (!FakeItem) { c->Message(Chat::Red, "Error: Item [%u] is not a valid item id.", itemid); @@ -12221,7 +12221,7 @@ void command_zopp(Client *c, const Seperator *sep) } int16 item_status = 0; - const EQEmu::ItemData* item = database.GetItem(itemid); + const EQ::ItemData* item = database.GetItem(itemid); if(item) { item_status = static_cast(item->MinStatus); } @@ -12235,7 +12235,7 @@ void command_zopp(Client *c, const Seperator *sep) c->Message(Chat::White, "Processing request..results may cause unpredictable behavior."); } - EQEmu::ItemInstance* FakeItemInst = database.CreateItem(FakeItem, charges); + EQ::ItemInstance* FakeItemInst = database.CreateItem(FakeItem, charges); c->SendItemPacket(slotid, FakeItemInst, packettype); c->Message(Chat::White, "Sending zephyr op packet to client - [%s] %s (%u) with %i %s to slot %i.", packettype == ItemPacketTrade ? "Trade" : "Summon", FakeItem->Name, itemid, charges, @@ -12993,7 +12993,7 @@ void command_scale(Client *c, const Seperator *sep) c->Message(Chat::Yellow, "Found (%i) NPC's that match this search...", found_count); c->Message( Chat::Yellow, "To apply these changes, click <%s> or type %s", - EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Apply").c_str(), saylink.c_str() ); } @@ -13062,7 +13062,7 @@ void command_databuckets(Client *c, const Seperator *sep) _ctr++; std::string del_saylink = StringFormat("#databuckets delete %s", key.c_str()); c->Message(Chat::White, "%s : %s", - EQEmu::SayLinkEngine::GenerateQuestSaylink(del_saylink, false, "Delete").c_str(), key.c_str(), " Value: ", value.c_str()); + EQ::SayLinkEngine::GenerateQuestSaylink(del_saylink, false, "Delete").c_str(), key.c_str(), " Value: ", value.c_str()); } window_text.append("
"); c->SendPopupToClient(window_title.c_str(), window_text.c_str()); @@ -13157,7 +13157,7 @@ void command_who(Client *c, const Seperator *sep) std::string displayed_guild_name; if (guild_name.length() > 0) { - displayed_guild_name = EQEmu::SayLinkEngine::GenerateQuestSaylink( + displayed_guild_name = EQ::SayLinkEngine::GenerateQuestSaylink( StringFormat( "#who \"%s\"", guild_name.c_str()), @@ -13166,7 +13166,7 @@ void command_who(Client *c, const Seperator *sep) ); } - std::string goto_saylink = EQEmu::SayLinkEngine::GenerateQuestSaylink( + std::string goto_saylink = EQ::SayLinkEngine::GenerateQuestSaylink( StringFormat("#goto %s", player_name.c_str()), false, "Goto" ); @@ -13176,15 +13176,15 @@ void command_who(Client *c, const Seperator *sep) 5, "%s[%u %s] %s (%s) %s ZONE: %s (%u) (%s) (%s) (%s)", (account_status > 0 ? "* GM * " : ""), player_level, - EQEmu::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", base_class_name.c_str()), false, display_class_name).c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", base_class_name.c_str()), false, display_class_name).c_str(), player_name.c_str(), - EQEmu::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", displayed_race_name.c_str()), false, displayed_race_name).c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", displayed_race_name.c_str()), false, displayed_race_name).c_str(), displayed_guild_name.c_str(), - EQEmu::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", zone_short_name.c_str()), false, zone_short_name).c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", zone_short_name.c_str()), false, zone_short_name).c_str(), zone_instance, goto_saylink.c_str(), - EQEmu::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", account_name.c_str()), false, account_name).c_str(), - EQEmu::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", account_ip.c_str()), false, account_ip).c_str() + EQ::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", account_name.c_str()), false, account_name).c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink(StringFormat("#who %s", account_ip.c_str()), false, account_ip).c_str() ); found_count++; diff --git a/zone/common.h b/zone/common.h index 2d97527fc..19df1a576 100644 --- a/zone/common.h +++ b/zone/common.h @@ -268,7 +268,7 @@ enum class LootRequestType : uint8 { Self, AllowedPVE, AllowedPVPAll, - AllowedPVPSingle, // can make this 'AllowedPVPVariable' and allow values between 1 and EQEmu::invtype::POSSESSIONS_SIZE + AllowedPVPSingle, // can make this 'AllowedPVPVariable' and allow values between 1 and EQ::invtype::POSSESSIONS_SIZE AllowedPVPDefined, }; @@ -385,8 +385,8 @@ struct StatBonuses { int32 inhibitmelee; float AggroRange; // when calculate just replace original value with this float AssistRange; - int32 skillmod[EQEmu::skills::HIGHEST_SKILL + 1]; - int32 skillmodmax[EQEmu::skills::HIGHEST_SKILL + 1]; + int32 skillmod[EQ::skills::HIGHEST_SKILL + 1]; + int32 skillmodmax[EQ::skills::HIGHEST_SKILL + 1]; int effective_casting_level; int adjusted_casting_skill; // SPA 112 for fizzles int reflect_chance; // chance to reflect incoming spell @@ -403,7 +403,7 @@ struct StatBonuses { int32 StrikeThrough; // PoP: Strike Through % int32 MeleeMitigation; //i = Shielding int32 MeleeMitigationEffect; //i = Spell Effect Melee Mitigation - int32 CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 2]; //i + int32 CriticalHitChance[EQ::skills::HIGHEST_SKILL + 2]; //i int32 CriticalSpellChance; //i int32 SpellCritDmgIncrease; //i int32 SpellCritDmgIncNoStack; // increase @@ -430,10 +430,10 @@ struct StatBonuses { int32 MeleeSkillCheck; //i uint8 MeleeSkillCheckSkill; int32 HitChance; //HitChance/15 == % increase i = Accuracy (Item: Accuracy) - int32 HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 2]; //Spell effect Chance to Hit, straight percent increase - int32 DamageModifier[EQEmu::skills::HIGHEST_SKILL + 2]; //i - int32 DamageModifier2[EQEmu::skills::HIGHEST_SKILL + 2]; //i - int32 MinDamageModifier[EQEmu::skills::HIGHEST_SKILL + 2]; //i + int32 HitChanceEffect[EQ::skills::HIGHEST_SKILL + 2]; //Spell effect Chance to Hit, straight percent increase + int32 DamageModifier[EQ::skills::HIGHEST_SKILL + 2]; //i + int32 DamageModifier2[EQ::skills::HIGHEST_SKILL + 2]; //i + int32 MinDamageModifier[EQ::skills::HIGHEST_SKILL + 2]; //i int32 ProcChance; // ProcChance/10 == % increase i = CombatEffects int32 ProcChanceSPA; // ProcChance from spell effects int32 ExtraAttackChance; @@ -441,13 +441,13 @@ struct StatBonuses { int32 DivineSaveChance[2]; // Second Chance (base1 = chance, base2 = spell on trigger) uint32 DeathSave[4]; // Death Pact [0](value = 1 partial 2 = full) [1]=slot [2]=LvLimit [3]=HealAmt int32 FlurryChance; - int32 Accuracy[EQEmu::skills::HIGHEST_SKILL + 2]; //Accuracy/15 == % increase [Spell Effect: Accuracy) + int32 Accuracy[EQ::skills::HIGHEST_SKILL + 2]; //Accuracy/15 == % increase [Spell Effect: Accuracy) int32 HundredHands; //extra haste, stacks with all other haste i int32 MeleeLifetap; //i int32 Vampirism; //i int32 HealRate; // Spell effect that influences effectiveness of heals int32 MaxHPChange; // Spell Effect - int16 SkillDmgTaken[EQEmu::skills::HIGHEST_SKILL + 2]; // All Skills + -1 + int16 SkillDmgTaken[EQ::skills::HIGHEST_SKILL + 2]; // All Skills + -1 int32 HealAmt; // Item Effect int32 SpellDmg; // Item Effect int32 Clairvoyance; // Item Effect @@ -456,9 +456,9 @@ struct StatBonuses { uint32 SpellTriggers[MAX_SPELL_TRIGGER]; // Innate/Spell/Item Spells that trigger when you cast uint32 SpellOnKill[MAX_SPELL_TRIGGER*3]; // Chance to proc after killing a mob uint32 SpellOnDeath[MAX_SPELL_TRIGGER*2]; // Chance to have effect cast when you die - int32 CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 2]; // All Skills + -1 - int32 SkillReuseTime[EQEmu::skills::HIGHEST_SKILL + 1]; // Reduces skill timers - int32 SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 2]; // All Skills + -1 + int32 CritDmgMod[EQ::skills::HIGHEST_SKILL + 2]; // All Skills + -1 + int32 SkillReuseTime[EQ::skills::HIGHEST_SKILL + 1]; // Reduces skill timers + int32 SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 2]; // All Skills + -1 int32 TwoHandBluntBlock; // chance to block when wielding two hand blunt weapon uint32 ItemManaRegenCap; // Increases the amount of mana you have can over the cap(aa effect) int32 GravityEffect; // Indictor of spell effect @@ -481,7 +481,7 @@ struct StatBonuses { uint8 FocusEffects[HIGHEST_FOCUS+1]; // Stores the focus effectid for each focustype you have. int16 FocusEffectsWorn[HIGHEST_FOCUS+1]; // Optional to allow focus effects to be applied additively from worn slot bool NegateEffects; // Check if you contain a buff with negate effect. (only spellbonuses) - int32 SkillDamageAmount2[EQEmu::skills::HIGHEST_SKILL + 2]; // Adds skill specific damage + int32 SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 2]; // Adds skill specific damage uint32 NegateAttacks[3]; // 0 = bool HasEffect 1 = Buff Slot 2 = Max damage absorbed per hit uint32 MitigateMeleeRune[4]; // 0 = Mitigation value 1 = Buff Slot 2 = Max mitigation per hit 3 = Rune Amt uint32 MeleeThresholdGuard[3]; // 0 = Mitigation value 1 = Buff Slot 2 = Min damage to trigger. @@ -514,7 +514,7 @@ struct StatBonuses { int32 Metabolism; // Food/drink consumption rates. bool Sanctuary; // Sanctuary effect, lowers place on hate list until cast on others. int32 FactionModPct; // Modifies amount of faction gained. - bool LimitToSkill[EQEmu::skills::HIGHEST_SKILL + 2]; // Determines if we need to search for a skill proc. + bool LimitToSkill[EQ::skills::HIGHEST_SKILL + 2]; // Determines if we need to search for a skill proc. uint32 SkillProc[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs. uint32 SkillProcSuccess[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs_success. uint32 PC_Pet_Rampage[2]; // 0= % chance to rampage, 1=damage modifier @@ -549,7 +549,7 @@ struct StatBonuses { int32 CombatStability; // Melee damage mitigation. int32 DoubleRiposte; // Chance to double riposte int32 GiveDoubleRiposte[3]; // 0=Regular Chance, 1=Skill Attack Chance, 2=Skill - uint32 RaiseSkillCap[EQEmu::skills::HIGHEST_SKILL + 1]; // Raise a specific skill cap (base1= value, base2=skill) + uint32 RaiseSkillCap[EQ::skills::HIGHEST_SKILL + 1]; // Raise a specific skill cap (base1= value, base2=skill) int32 Ambidexterity; // Increase chance to duel wield by adding bonus 'skill'. int32 PetMaxHP; // Increase the max hp of your pet. int32 PetFlurry; // Chance for pet to flurry. @@ -578,7 +578,7 @@ struct StatBonuses { uint16 extra_xtargets; // extra xtarget entries bool ShroudofStealth; // rogue improved invisiblity uint16 ReduceFallDamage; // reduce fall damage by percent - int32 ReduceTradeskillFail[EQEmu::skills::HIGHEST_SKILL + 1]; // Reduces chance for trade skills to fail by percent. + int32 ReduceTradeskillFail[EQ::skills::HIGHEST_SKILL + 1]; // Reduces chance for trade skills to fail by percent. uint8 TradeSkillMastery; // Allow number of tradeskills to exceed 200 skill. int16 NoBreakAESneak; // Percent value int16 FeignedCastOnChance; // Percent Value @@ -697,7 +697,7 @@ struct MercData { uint32 NPCID; }; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -739,7 +739,7 @@ public: private: // Send item data for trade item to other person involved in trade - void SendItemData(const EQEmu::ItemInstance* inst, int16 dest_slot_id); + void SendItemData(const EQ::ItemInstance* inst, int16 dest_slot_id); uint32 with_id; Mob* owner; @@ -783,7 +783,7 @@ struct DamageHitInfo { int offense; int tohit; int hand; - EQEmu::skills::SkillType skill; + EQ::skills::SkillType skill; }; #endif diff --git a/zone/corpse.cpp b/zone/corpse.cpp index fd4174868..9bccf6eec 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -153,7 +153,7 @@ Corpse::Corpse(NPC* in_npc, ItemList* in_itemlist, uint32 in_npctypeid, const NP in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),in_npc->GetSize(),0, in_npc->GetPosition(), in_npc->GetInnateLightType(), in_npc->GetTexture(),in_npc->GetHelmTexture(), 0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,EQEmu::TintProfile(),0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,EQ::TintProfile(),0xff,0,0,0,0,0,0,0,0,0,0,0,0,0,0, (*in_npctypedata)->use_model, false), corpse_decay_timer(in_decaytime), corpse_rez_timer(0), @@ -245,7 +245,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( client->GetPP().drakkin_heritage, // uint32 in_drakkin_heritage, client->GetPP().drakkin_tattoo, // uint32 in_drakkin_tattoo, client->GetPP().drakkin_details, // uint32 in_drakkin_details, - EQEmu::TintProfile(), // uint32 in_armor_tint[_MaterialCount], + EQ::TintProfile(), // uint32 in_armor_tint[_MaterialCount], 0xff, // uint8 in_aa_title, 0, // uint8 in_see_invis, // see through invis 0, // uint8 in_see_invis_undead, // see through invis vs. undead @@ -273,7 +273,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( int i; PlayerProfile_Struct *pp = &client->GetPP(); - EQEmu::ItemInstance *item = nullptr; + EQ::ItemInstance *item = nullptr; /* Check if Zone has Graveyard First */ if(!zone->HasGraveyard()) { @@ -325,7 +325,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( // cash // Let's not move the cash when 'RespawnFromHover = true' && 'client->GetClientVersion() < EQClientSoF' since the client doesn't. // (change to first client that supports 'death hover' mode, if not SoF.) - if (!RuleB(Character, RespawnFromHover) || client->ClientVersion() < EQEmu::versions::ClientVersion::SoF) { + if (!RuleB(Character, RespawnFromHover) || client->ClientVersion() < EQ::versions::ClientVersion::SoF) { SetCash(pp->copper, pp->silver, pp->gold, pp->platinum); pp->copper = 0; pp->silver = 0; @@ -344,7 +344,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( // ..then regress and process invslot::EQUIPMENT_BEGIN through invslot::EQUIPMENT_END... // without additional work to database loading of player corpses, this order is not // currently preserved and a re-work of this processing loop is not warranted. - for (i = EQEmu::invslot::POSSESSIONS_BEGIN; i <= EQEmu::invslot::POSSESSIONS_END; ++i) { + for (i = EQ::invslot::POSSESSIONS_BEGIN; i <= EQ::invslot::POSSESSIONS_END; ++i) { item = client->GetInv().GetItem(i); if (item == nullptr) { continue; } @@ -402,7 +402,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob ( Save(); } -void Corpse::MoveItemToCorpse(Client *client, EQEmu::ItemInstance *inst, int16 equipSlot, std::list &removedList) +void Corpse::MoveItemToCorpse(Client *client, EQ::ItemInstance *inst, int16 equipSlot, std::list &removedList) { AddItem( inst->GetItem()->ID, @@ -420,10 +420,10 @@ void Corpse::MoveItemToCorpse(Client *client, EQEmu::ItemInstance *inst, int16 e while (true) { if (!inst->IsClassBag()) { break; } - if (equipSlot < EQEmu::invslot::GENERAL_BEGIN || equipSlot > EQEmu::invslot::slotCursor) { break; } + if (equipSlot < EQ::invslot::GENERAL_BEGIN || equipSlot > EQ::invslot::slotCursor) { break; } - for (int16 sub_index = EQEmu::invbag::SLOT_BEGIN; sub_index <= EQEmu::invbag::SLOT_END; ++sub_index) { - int16 real_bag_slot = EQEmu::InventoryProfile::CalcSlotId(equipSlot, sub_index); + for (int16 sub_index = EQ::invbag::SLOT_BEGIN; sub_index <= EQ::invbag::SLOT_END; ++sub_index) { + int16 real_bag_slot = EQ::InventoryProfile::CalcSlotId(equipSlot, sub_index); auto bag_inst = client->GetInv().GetItem(real_bag_slot); if (bag_inst == nullptr) { continue; } @@ -485,7 +485,7 @@ in_helmtexture, 0, 0, 0, -EQEmu::TintProfile(), +EQ::TintProfile(), 0xff, 0, 0, @@ -722,8 +722,8 @@ ServerLootItem_Struct* Corpse::GetItem(uint16 lootslot, ServerLootItem_Struct** } } - if (sitem && bag_item_data && EQEmu::InventoryProfile::SupportsContainers(sitem->equip_slot)) { - int16 bagstart = EQEmu::InventoryProfile::CalcSlotId(sitem->equip_slot, EQEmu::invbag::SLOT_BEGIN); + if (sitem && bag_item_data && EQ::InventoryProfile::SupportsContainers(sitem->equip_slot)) { + int16 bagstart = EQ::InventoryProfile::CalcSlotId(sitem->equip_slot, EQ::invbag::SLOT_BEGIN); cur = itemlist.begin(); end = itemlist.end(); @@ -777,8 +777,8 @@ void Corpse::RemoveItem(ServerLootItem_Struct* item_data) is_corpse_changed = true; itemlist.erase(iter); - uint8 material = EQEmu::InventoryProfile::CalcMaterialFromSlot(sitem->equip_slot); // autos to unsigned char - if (material != EQEmu::textures::materialInvalid) + uint8 material = EQ::InventoryProfile::CalcMaterialFromSlot(sitem->equip_slot); // autos to unsigned char + if (material != EQ::textures::materialInvalid) SendWearChange(material); UpdateEquipmentLight(); @@ -1061,9 +1061,9 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a if (pkitem->RecastDelay) pkinst->SetRecastTimestamp(timestamps.count(pkitem->RecastType) ? timestamps.at(pkitem->RecastType) : 0); - LogInventory("MakeLootRequestPackets() Slot [{}], Item [{}]", EQEmu::invslot::CORPSE_BEGIN, pkitem->Name); + LogInventory("MakeLootRequestPackets() Slot [{}], Item [{}]", EQ::invslot::CORPSE_BEGIN, pkitem->Name); - client->SendItemPacket(EQEmu::invslot::CORPSE_BEGIN, pkinst, ItemPacketLoot); + client->SendItemPacket(EQ::invslot::CORPSE_BEGIN, pkinst, ItemPacketLoot); safe_delete(pkinst); } else { @@ -1076,7 +1076,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a return; } - auto loot_slot = EQEmu::invslot::CORPSE_BEGIN; + auto loot_slot = EQ::invslot::CORPSE_BEGIN; auto corpse_mask = client->GetInv().GetLookup()->CorpseBitmask; for (auto item_data : itemlist) { @@ -1085,17 +1085,17 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a item_data->lootslot = 0xFFFF; // align server and client corpse slot mappings so translators can function properly - while (loot_slot <= EQEmu::invslot::CORPSE_END && (((uint64)1 << loot_slot) & corpse_mask) == 0) + while (loot_slot <= EQ::invslot::CORPSE_END && (((uint64)1 << loot_slot) & corpse_mask) == 0) ++loot_slot; - if (loot_slot > EQEmu::invslot::CORPSE_END) + if (loot_slot > EQ::invslot::CORPSE_END) continue; if (IsPlayerCorpse()) { - if (loot_request_type == LootRequestType::AllowedPVPSingle && loot_slot != EQEmu::invslot::CORPSE_BEGIN) + if (loot_request_type == LootRequestType::AllowedPVPSingle && loot_slot != EQ::invslot::CORPSE_BEGIN) continue; - if (item_data->equip_slot < EQEmu::invslot::POSSESSIONS_BEGIN || item_data->equip_slot > EQEmu::invslot::POSSESSIONS_END) + if (item_data->equip_slot < EQ::invslot::POSSESSIONS_BEGIN || item_data->equip_slot > EQ::invslot::POSSESSIONS_END) continue; } @@ -1130,7 +1130,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a // This is required for the 'Loot All' feature to work for SoD clients. I expect it is to tell the client that the // server has now sent all the items on the corpse. - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (client->ClientVersion() >= EQ::versions::ClientVersion::SoD) SendLootReqErrorPacket(client, LootResponse::LootAll); } @@ -1202,8 +1202,8 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) return; } - const EQEmu::ItemData *item = nullptr; - EQEmu::ItemInstance *inst = nullptr; + const EQ::ItemData *item = nullptr; + EQ::ItemInstance *inst = nullptr; ServerLootItem_Struct *item_data = nullptr, *bag_item_data[10] = {}; memset(bag_item_data, 0, sizeof(bag_item_data)); @@ -1244,8 +1244,8 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) } if (inst->IsAugmented()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { - EQEmu::ItemInstance *itm = inst->GetAugment(i); + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { + EQ::ItemInstance *itm = inst->GetAugment(i); if (itm) { if (client->CheckLoreConflict(itm->GetItem())) { client->MessageString(Chat::White, LOOT_LORE_ERROR); @@ -1265,7 +1265,7 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) snprintf(buf, 87, "%d %d %s", inst->GetItem()->ID, inst->GetCharges(), EntityList::RemoveNumbers(q_corpse_name)); buf[87] = '\0'; - std::vector args; + std::vector args; args.push_back(inst); args.push_back(this); if (parse->EventPlayer(EVENT_LOOT, client, buf, 0, &args) != 0) { @@ -1300,10 +1300,10 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) /* First add it to the looter - this will do the bag contents too */ if (lootitem->auto_loot > 0) { if (!client->AutoPutLootInInventory(*inst, true, true, bag_item_data)) - client->PutLootInInventory(EQEmu::invslot::slotCursor, *inst, bag_item_data); + client->PutLootInInventory(EQ::invslot::slotCursor, *inst, bag_item_data); } else { - client->PutLootInInventory(EQEmu::invslot::slotCursor, *inst, bag_item_data); + client->PutLootInInventory(EQ::invslot::slotCursor, *inst, bag_item_data); } /* Update any tasks that have an activity to loot this item */ @@ -1322,7 +1322,7 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) /* Remove Bag Contents */ if (item->IsClassBag() && (GetPlayerKillItem() != -1 || GetPlayerKillItem() != 1)) { - for (int i = EQEmu::invbag::SLOT_BEGIN; i <= EQEmu::invbag::SLOT_END; i++) { + for (int i = EQ::invbag::SLOT_BEGIN; i <= EQ::invbag::SLOT_END; i++) { if (bag_item_data[i]) { /* Delete needs to be before RemoveItem because its deletes the pointer for * item_data/bag_item_data */ @@ -1340,8 +1340,8 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app) } /* Send message with item link to groups and such */ - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemInst); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); linker.SetItemInst(inst); linker.GenerateLink(); @@ -1400,7 +1400,7 @@ void Corpse::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { ns->spawn.NPC = 2; UpdateActiveLight(); - ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive]; + ns->spawn.light = m_Light.Type[EQ::lightsource::LightActive]; } void Corpse::QueryLoot(Client* to) { @@ -1417,12 +1417,12 @@ void Corpse::QueryLoot(Client* to) { ServerLootItem_Struct* sitem = *cur; if (IsPlayerCorpse()) { - if (sitem->equip_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN && sitem->equip_slot <= EQEmu::invbag::CURSOR_BAG_END) + if (sitem->equip_slot >= EQ::invbag::GENERAL_BAGS_BEGIN && sitem->equip_slot <= EQ::invbag::CURSOR_BAG_END) sitem->lootslot = 0xFFFF; else x < corpselootlimit ? sitem->lootslot = x : sitem->lootslot = 0xFFFF; - const EQEmu::ItemData* item = database.GetItem(sitem->item_id); + const EQ::ItemData* item = database.GetItem(sitem->item_id); if (item) to->Message((sitem->lootslot == 0xFFFF), "LootSlot: %i (EquipSlot: %i) Item: %s (%d), Count: %i", static_cast(sitem->lootslot), sitem->equip_slot, item->Name, item->ID, sitem->charges); @@ -1436,7 +1436,7 @@ void Corpse::QueryLoot(Client* to) { } else { sitem->lootslot=y; - const EQEmu::ItemData* item = database.GetItem(sitem->item_id); + const EQ::ItemData* item = database.GetItem(sitem->item_id); if (item) to->Message(Chat::White, "LootSlot: %i Item: %s (%d), Count: %i", sitem->lootslot, item->Name, item->ID, sitem->charges); @@ -1540,11 +1540,11 @@ void Corpse::Spawn() { uint32 Corpse::GetEquippedItemFromTextureSlot(uint8 material_slot) const { int16 invslot; - if (material_slot > EQEmu::textures::LastTexture) { + if (material_slot > EQ::textures::LastTexture) { return 0; } - invslot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + invslot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if(invslot == INVALID_INDEX) // GetWornItem() should be returning a 0 for any invalid index... return 0; @@ -1552,9 +1552,9 @@ uint32 Corpse::GetEquippedItemFromTextureSlot(uint8 material_slot) const { } uint32 Corpse::GetEquipmentColor(uint8 material_slot) const { - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; - if (material_slot > EQEmu::textures::LastTexture) { + if (material_slot > EQ::textures::LastTexture) { return 0; } @@ -1568,23 +1568,23 @@ uint32 Corpse::GetEquipmentColor(uint8 material_slot) const { void Corpse::UpdateEquipmentLight() { - m_Light.Type[EQEmu::lightsource::LightEquipment] = 0; - m_Light.Level[EQEmu::lightsource::LightEquipment] = 0; + m_Light.Type[EQ::lightsource::LightEquipment] = 0; + m_Light.Level[EQ::lightsource::LightEquipment] = 0; for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { - if ((*iter)->equip_slot < EQEmu::invslot::EQUIPMENT_BEGIN || (*iter)->equip_slot > EQEmu::invslot::EQUIPMENT_END) { continue; } - if ((*iter)->equip_slot == EQEmu::invslot::slotAmmo) { continue; } + if ((*iter)->equip_slot < EQ::invslot::EQUIPMENT_BEGIN || (*iter)->equip_slot > EQ::invslot::EQUIPMENT_END) { continue; } + if ((*iter)->equip_slot == EQ::invslot::slotAmmo) { continue; } auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } - if (EQEmu::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQEmu::lightsource::LightEquipment])) - m_Light.Type[EQEmu::lightsource::LightEquipment] = item->Light; + if (EQ::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQ::lightsource::LightEquipment])) + m_Light.Type[EQ::lightsource::LightEquipment] = item->Light; } uint8 general_light_type = 0; for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { - if ((*iter)->equip_slot < EQEmu::invslot::GENERAL_BEGIN || (*iter)->equip_slot > EQEmu::invslot::GENERAL_END) { continue; } + if ((*iter)->equip_slot < EQ::invslot::GENERAL_BEGIN || (*iter)->equip_slot > EQ::invslot::GENERAL_END) { continue; } auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } @@ -1592,14 +1592,14 @@ void Corpse::UpdateEquipmentLight() if (!item->IsClassCommon()) { continue; } if (item->Light < 9 || item->Light > 13) { continue; } - if (EQEmu::lightsource::TypeToLevel(item->Light)) + if (EQ::lightsource::TypeToLevel(item->Light)) general_light_type = item->Light; } - if (EQEmu::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQEmu::lightsource::LightEquipment])) - m_Light.Type[EQEmu::lightsource::LightEquipment] = general_light_type; + if (EQ::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQ::lightsource::LightEquipment])) + m_Light.Type[EQ::lightsource::LightEquipment] = general_light_type; - m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); + m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } void Corpse::AddLooter(Mob* who) { diff --git a/zone/corpse.h b/zone/corpse.h index d453c7e9e..300569f89 100644 --- a/zone/corpse.h +++ b/zone/corpse.h @@ -30,7 +30,7 @@ class Raid; struct ExtraAttackOptions; struct NPCType; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -51,9 +51,9 @@ class Corpse : public Mob { static Corpse* LoadCharacterCorpseEntity(uint32 in_dbid, uint32 in_charid, std::string in_charname, const glm::vec4& position, std::string time_of_death, bool rezzed, bool was_at_graveyard, uint32 guild_consent_id); /* Corpse: General */ - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill) { return true; } - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = true, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr) { return false; } + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) { return true; } + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = true, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr) { return false; } virtual bool HasRaid() { return false; } virtual bool HasGroup() { return false; } virtual Raid* GetRaid() { return 0; } @@ -138,7 +138,7 @@ class Corpse : public Mob { virtual void UpdateEquipmentLight(); protected: - void MoveItemToCorpse(Client *client, EQEmu::ItemInstance *inst, int16 equipSlot, std::list &removedList); + void MoveItemToCorpse(Client *client, EQ::ItemInstance *inst, int16 equipSlot, std::list &removedList); private: bool is_player_corpse; /* Determines if Player Corpse or not */ @@ -167,7 +167,7 @@ private: Timer corpse_delay_timer; Timer corpse_graveyard_timer; Timer loot_cooldown_timer; /* Delay between loot actions on the corpse entity */ - EQEmu::TintProfile item_tint; + EQ::TintProfile item_tint; std::vector consented_player_names; LootRequestType loot_request_type; diff --git a/zone/doors.cpp b/zone/doors.cpp index 92e83f06d..00c17c668 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -210,7 +210,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { uint32 player_has_key = 0; uint32 player_key = 0; - const EQEmu::ItemInstance *lock_pick_item = sender->GetInv().GetItem(EQEmu::invslot::slotCursor); + const EQ::ItemInstance *lock_pick_item = sender->GetInv().GetItem(EQ::invslot::slotCursor); player_has_key = static_cast(sender->GetInv().HasItem(required_key_item, 1)); if (player_has_key != INVALID_INDEX) { @@ -320,10 +320,10 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { * Try Lock pick */ else if (lock_pick_item != nullptr) { - if (sender->GetSkill(EQEmu::skills::SkillPickLock)) { - if (lock_pick_item->GetItem()->ItemType == EQEmu::item::ItemTypeLockPick) { - float player_pick_lock_skill = sender->GetSkill(EQEmu::skills::SkillPickLock); - sender->CheckIncreaseSkill(EQEmu::skills::SkillPickLock, nullptr, 1); + if (sender->GetSkill(EQ::skills::SkillPickLock)) { + if (lock_pick_item->GetItem()->ItemType == EQ::item::ItemTypeLockPick) { + float player_pick_lock_skill = sender->GetSkill(EQ::skills::SkillPickLock); + sender->CheckIncreaseSkill(EQ::skills::SkillPickLock, nullptr, 1); LogSkills("Client has lockpicks: skill=[{}]", player_pick_lock_skill); diff --git a/zone/effects.cpp b/zone/effects.cpp index 7e2ecdbc7..b82f74a4d 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -432,14 +432,14 @@ int32 Client::GetActSpellCasttime(uint16 spell_id, int32 casttime) bool Client::TrainDiscipline(uint32 itemid) { //get the item info - const EQEmu::ItemData *item = database.GetItem(itemid); + const EQ::ItemData *item = database.GetItem(itemid); if(item == nullptr) { Message(Chat::Red, "Unable to find the tome you turned in!"); LogError("Unable to find turned in tome id [{}]\n", (unsigned long)itemid); return(false); } - if (!item->IsClassCommon() || item->ItemType != EQEmu::item::ItemTypeSpell) { + if (!item->IsClassCommon() || item->ItemType != EQ::item::ItemTypeSpell) { Message(Chat::Red, "Invalid item type, you cannot learn from this item."); //summon them the item back... SummonItem(itemid); @@ -645,9 +645,9 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { } if (reduced_recast > 0) - CastSpell(spell_id, target, EQEmu::spells::CastingSlot::Discipline, -1, -1, 0, -1, (uint32)DiscTimer, reduced_recast); + CastSpell(spell_id, target, EQ::spells::CastingSlot::Discipline, -1, -1, 0, -1, (uint32)DiscTimer, reduced_recast); else{ - CastSpell(spell_id, target, EQEmu::spells::CastingSlot::Discipline); + CastSpell(spell_id, target, EQ::spells::CastingSlot::Discipline); return true; } @@ -655,7 +655,7 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { } else { - CastSpell(spell_id, target, EQEmu::spells::CastingSlot::Discipline); + CastSpell(spell_id, target, EQ::spells::CastingSlot::Discipline); } return(true); } diff --git a/zone/embparser.cpp b/zone/embparser.cpp index f89c09ad4..671a26d9c 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -165,8 +165,8 @@ void PerlembParser::ReloadQuests() } int PerlembParser::EventCommon( - QuestEventID event, uint32 objid, const char *data, NPC *npcmob, EQEmu::ItemInstance *item_inst, Mob *mob, - uint32 extradata, bool global, std::vector *extra_pointers + QuestEventID event, uint32 objid, const char *data, NPC *npcmob, EQ::ItemInstance *item_inst, Mob *mob, + uint32 extradata, bool global, std::vector *extra_pointers ) { if (!perl) { @@ -266,7 +266,7 @@ int PerlembParser::EventCommon( int PerlembParser::EventNPC( QuestEventID evt, NPC *npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers + std::vector *extra_pointers ) { return EventCommon(evt, npc->GetNPCTypeID(), data.c_str(), npc, nullptr, init, extra_data, false, extra_pointers); @@ -274,7 +274,7 @@ int PerlembParser::EventNPC( int PerlembParser::EventGlobalNPC( QuestEventID evt, NPC *npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers + std::vector *extra_pointers ) { return EventCommon(evt, npc->GetNPCTypeID(), data.c_str(), npc, nullptr, init, extra_data, true, extra_pointers); @@ -282,7 +282,7 @@ int PerlembParser::EventGlobalNPC( int PerlembParser::EventPlayer( QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers + std::vector *extra_pointers ) { return EventCommon(evt, 0, data.c_str(), nullptr, nullptr, client, extra_data, false, extra_pointers); @@ -290,15 +290,15 @@ int PerlembParser::EventPlayer( int PerlembParser::EventGlobalPlayer( QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers + std::vector *extra_pointers ) { return EventCommon(evt, 0, data.c_str(), nullptr, nullptr, client, extra_data, true, extra_pointers); } int PerlembParser::EventItem( - QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers + QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers ) { // needs pointer validation on 'item' argument @@ -307,7 +307,7 @@ int PerlembParser::EventItem( int PerlembParser::EventSpell( QuestEventID evt, NPC *npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers + std::vector *extra_pointers ) { return EventCommon(evt, 0, itoa(spell_id), npc, nullptr, client, extra_data, false, extra_pointers); @@ -416,7 +416,7 @@ bool PerlembParser::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) return (perl->SubExists(package_name.str().c_str(), subname)); } -bool PerlembParser::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) +bool PerlembParser::ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) { std::stringstream package_name; package_name << "qst_item_" << itm->GetID(); @@ -564,7 +564,7 @@ void PerlembParser::LoadGlobalPlayerScript(std::string filename) global_player_quest_status_ = questLoaded; } -void PerlembParser::LoadItemScript(std::string filename, EQEmu::ItemInstance *item) +void PerlembParser::LoadItemScript(std::string filename, EQ::ItemInstance *item) { if (item == nullptr) { return; @@ -776,7 +776,7 @@ int PerlembParser::SendCommands( uint32 npcid, Mob *other, Mob *mob, - EQEmu::ItemInstance *item_inst + EQ::ItemInstance *item_inst ) { if (!perl) { @@ -852,7 +852,7 @@ int PerlembParser::SendCommands( //only export QuestItem if it's an item quest if (item_inst) { - EQEmu::ItemInstance *curi = quest_manager.GetQuestItem(); + EQ::ItemInstance *curi = quest_manager.GetQuestItem(); snprintf(namebuf, 64, "%s::questitem", pkgprefix); SV *questitem = get_sv(namebuf, true); sv_setref_pv(questitem, "QuestItem", curi); @@ -979,7 +979,7 @@ void PerlembParser::MapFunctions() void PerlembParser::GetQuestTypes( bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, - bool &isSpellQuest, QuestEventID event, NPC *npcmob, EQEmu::ItemInstance *item_inst, Mob *mob, bool global + bool &isSpellQuest, QuestEventID event, NPC *npcmob, EQ::ItemInstance *item_inst, Mob *mob, bool global ) { if (event == EVENT_SPELL_EFFECT_CLIENT || @@ -1018,7 +1018,7 @@ void PerlembParser::GetQuestPackageName( uint32 objid, const char *data, NPC *npcmob, - EQEmu::ItemInstance *item_inst, + EQ::ItemInstance *item_inst, bool global ) { @@ -1033,8 +1033,8 @@ void PerlembParser::GetQuestPackageName( } } else if (isItemQuest) { - // need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process - const EQEmu::ItemData *item = item_inst->GetItem(); + // need a valid EQ::ItemInstance pointer check here..unsure how to cancel this process + const EQ::ItemData *item = item_inst->GetItem(); package_name = "qst_item_"; package_name += itoa(item->ID); } @@ -1263,7 +1263,7 @@ void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) //start with an empty hash perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); - for (int slot = EQEmu::invslot::EQUIPMENT_BEGIN; slot <= EQEmu::invslot::GENERAL_END; slot++) { + for (int slot = EQ::invslot::EQUIPMENT_BEGIN; slot <= EQ::invslot::GENERAL_END; slot++) { char *hi_decl = nullptr; int itemid = mob->CastToClient()->GetItemIDAt(slot); if (itemid != -1 && itemid != 0) { @@ -1278,9 +1278,9 @@ void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) std::string hashname = package_name + std::string("::oncursor"); perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); char *hi_decl = nullptr; - int itemid = mob->CastToClient()->GetItemIDAt(EQEmu::invslot::slotCursor); + int itemid = mob->CastToClient()->GetItemIDAt(EQ::invslot::slotCursor); if (itemid != -1 && itemid != 0) { - MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);", hashname.c_str(), itemid, EQEmu::invslot::slotCursor); + MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);", hashname.c_str(), itemid, EQ::invslot::slotCursor); perl->eval(hi_decl); safe_delete_array(hi_decl); } @@ -1289,7 +1289,7 @@ void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) void PerlembParser::ExportEventVariables( std::string &package_name, QuestEventID event, uint32 objid, const char *data, - NPC *npcmob, EQEmu::ItemInstance *item_inst, Mob *mob, uint32 extradata, std::vector *extra_pointers + NPC *npcmob, EQ::ItemInstance *item_inst, Mob *mob, uint32 extradata, std::vector *extra_pointers ) { switch (event) { @@ -1308,7 +1308,7 @@ void PerlembParser::ExportEventVariables( if (extra_pointers) { size_t sz = extra_pointers->size(); for (size_t i = 0; i < sz; ++i) { - EQEmu::ItemInstance *inst = EQEmu::any_cast(extra_pointers->at(i)); + EQ::ItemInstance *inst = EQ::any_cast(extra_pointers->at(i)); std::string var_name = "item"; var_name += std::to_string(i + 1); @@ -1476,7 +1476,7 @@ void PerlembParser::ExportEventVariables( case EVENT_SCALE_CALC: case EVENT_ITEM_ENTER_ZONE: { - // need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process + // need a valid EQ::ItemInstance pointer check here..unsure how to cancel this process ExportVar(package_name.c_str(), "itemid", objid); ExportVar(package_name.c_str(), "itemname", item_inst->GetItem()->Name); break; @@ -1484,7 +1484,7 @@ void PerlembParser::ExportEventVariables( case EVENT_ITEM_CLICK_CAST: case EVENT_ITEM_CLICK: { - // need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process + // need a valid EQ::ItemInstance pointer check here..unsure how to cancel this process ExportVar(package_name.c_str(), "itemid", objid); ExportVar(package_name.c_str(), "itemname", item_inst->GetItem()->Name); ExportVar(package_name.c_str(), "slotid", extradata); diff --git a/zone/embparser.h b/zone/embparser.h index 1e4c9c391..ed7989a99 100644 --- a/zone/embparser.h +++ b/zone/embparser.h @@ -31,7 +31,7 @@ class Mob; class Client; class NPC; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -49,30 +49,30 @@ public: ~PerlembParser(); virtual int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventGlobalNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); - virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); + virtual int EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual bool HasQuestSub(uint32 npcid, QuestEventID evt); virtual bool HasGlobalQuestSub(QuestEventID evt); virtual bool PlayerHasQuestSub(QuestEventID evt); virtual bool GlobalPlayerHasQuestSub(QuestEventID evt); virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt); - virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt); + virtual bool ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt); virtual void LoadNPCScript(std::string filename, int npc_id); virtual void LoadGlobalNPCScript(std::string filename); virtual void LoadPlayerScript(std::string filename); virtual void LoadGlobalPlayerScript(std::string filename); - virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item); + virtual void LoadItemScript(std::string filename, EQ::ItemInstance *item); virtual void LoadSpellScript(std::string filename, uint32 spell_id); virtual void AddVar(std::string name, std::string val); @@ -90,16 +90,16 @@ private: void ExportVar(const char *pkgprefix, const char *varname, float value); void ExportVarComplex(const char *pkgprefix, const char *varname, const char *value); - int EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, - uint32 extradata, bool global, std::vector *extra_pointers); - int SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, EQEmu::ItemInstance *item_inst); + int EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, EQ::ItemInstance* item_inst, Mob* mob, + uint32 extradata, bool global, std::vector *extra_pointers); + int SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, EQ::ItemInstance *item_inst); void MapFunctions(); void GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, - bool &isSpellQuest, QuestEventID event, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, bool global); + bool &isSpellQuest, QuestEventID event, NPC* npcmob, EQ::ItemInstance* item_inst, Mob* mob, bool global); void GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data, - NPC* npcmob, EQEmu::ItemInstance* item_inst, bool global); + NPC* npcmob, EQ::ItemInstance* item_inst, bool global); void ExportCharID(const std::string &package_name, int &char_id, NPC *npcmob, Mob *mob); void ExportQGlobals(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest, bool isSpellQuest, std::string &package_name, NPC *npcmob, Mob *mob, int char_id); @@ -108,7 +108,7 @@ private: void ExportZoneVariables(std::string &package_name); void ExportItemVariables(std::string &package_name, Mob *mob); void ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data, - NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, uint32 extradata, std::vector *extra_pointers); + NPC* npcmob, EQ::ItemInstance* item_inst, Mob* mob, uint32 extradata, std::vector *extra_pointers); std::map npc_quest_status_; PerlQuestStatus global_npc_quest_status_; diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index f926bc6fe..6b4d75719 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -109,7 +109,7 @@ XS(XS_QuestItem_new) { if (items != 1) Perl_croak(aTHX_ "Usage: quest::QuestItem::new()"); - EQEmu::ItemInstance *RETVAL; + EQ::ItemInstance *RETVAL; RETVAL = quest_manager.GetQuestItem(); ST(0) = sv_newmortal(); @@ -372,7 +372,7 @@ XS(XS__getinventoryslotid) { if (items != 1) Perl_croak(aTHX_ "Usage: quest::getinventoryslotid(string identifier)"); - int16 RETVAL = EQEmu::invslot::SLOT_INVALID; + int16 RETVAL = EQ::invslot::SLOT_INVALID; dXSTARG; std::string identifier = (Const_char *)SvPV_nolen(ST(0)); @@ -380,89 +380,89 @@ XS(XS__getinventoryslotid) { identifier[i] = std::tolower(identifier[i]); if (identifier.find('.') == std::string::npos) { - if (identifier == "invalid") RETVAL = EQEmu::invslot::SLOT_INVALID; - else if (identifier == "charm") RETVAL = EQEmu::invslot::slotCharm; - else if (identifier == "ear1") RETVAL = EQEmu::invslot::slotEar1; - else if (identifier == "head") RETVAL = EQEmu::invslot::slotHead; - else if (identifier == "face") RETVAL = EQEmu::invslot::slotFace; - else if (identifier == "ear2") RETVAL = EQEmu::invslot::slotEar2; - else if (identifier == "neck") RETVAL = EQEmu::invslot::slotNeck; - else if (identifier == "shoulders") RETVAL = EQEmu::invslot::slotShoulders; - else if (identifier == "arms") RETVAL = EQEmu::invslot::slotArms; - else if (identifier == "back") RETVAL = EQEmu::invslot::slotBack; - else if (identifier == "wrist1") RETVAL = EQEmu::invslot::slotWrist1; - else if (identifier == "wrist2") RETVAL = EQEmu::invslot::slotWrist2; - else if (identifier == "range") RETVAL = EQEmu::invslot::slotRange; - else if (identifier == "hands") RETVAL = EQEmu::invslot::slotHands; - else if (identifier == "primary") RETVAL = EQEmu::invslot::slotPrimary; - else if (identifier == "secondary") RETVAL = EQEmu::invslot::slotSecondary; - else if (identifier == "finger1") RETVAL = EQEmu::invslot::slotFinger1; - else if (identifier == "finger2") RETVAL = EQEmu::invslot::slotFinger2; - else if (identifier == "chest") RETVAL = EQEmu::invslot::slotChest; - else if (identifier == "legs") RETVAL = EQEmu::invslot::slotLegs; - else if (identifier == "feet") RETVAL = EQEmu::invslot::slotFeet; - else if (identifier == "waist") RETVAL = EQEmu::invslot::slotWaist; - else if (identifier == "powersource") RETVAL = EQEmu::invslot::slotPowerSource; - else if (identifier == "ammo") RETVAL = EQEmu::invslot::slotAmmo; - else if (identifier == "general1") RETVAL = EQEmu::invslot::slotGeneral1; - else if (identifier == "general2") RETVAL = EQEmu::invslot::slotGeneral2; - else if (identifier == "general3") RETVAL = EQEmu::invslot::slotGeneral3; - else if (identifier == "general4") RETVAL = EQEmu::invslot::slotGeneral4; - else if (identifier == "general5") RETVAL = EQEmu::invslot::slotGeneral5; - else if (identifier == "general6") RETVAL = EQEmu::invslot::slotGeneral6; - else if (identifier == "general7") RETVAL = EQEmu::invslot::slotGeneral7; - else if (identifier == "general8") RETVAL = EQEmu::invslot::slotGeneral8; - else if (identifier == "general9") RETVAL = EQEmu::invslot::slotGeneral9; - else if (identifier == "general10") RETVAL = EQEmu::invslot::slotGeneral10; - else if (identifier == "cursor") RETVAL = EQEmu::invslot::slotCursor; - else if (identifier == "tradeskill") RETVAL = EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; - else if (identifier == "augment") RETVAL = EQEmu::invslot::SLOT_AUGMENT_GENERIC_RETURN; + if (identifier == "invalid") RETVAL = EQ::invslot::SLOT_INVALID; + else if (identifier == "charm") RETVAL = EQ::invslot::slotCharm; + else if (identifier == "ear1") RETVAL = EQ::invslot::slotEar1; + else if (identifier == "head") RETVAL = EQ::invslot::slotHead; + else if (identifier == "face") RETVAL = EQ::invslot::slotFace; + else if (identifier == "ear2") RETVAL = EQ::invslot::slotEar2; + else if (identifier == "neck") RETVAL = EQ::invslot::slotNeck; + else if (identifier == "shoulders") RETVAL = EQ::invslot::slotShoulders; + else if (identifier == "arms") RETVAL = EQ::invslot::slotArms; + else if (identifier == "back") RETVAL = EQ::invslot::slotBack; + else if (identifier == "wrist1") RETVAL = EQ::invslot::slotWrist1; + else if (identifier == "wrist2") RETVAL = EQ::invslot::slotWrist2; + else if (identifier == "range") RETVAL = EQ::invslot::slotRange; + else if (identifier == "hands") RETVAL = EQ::invslot::slotHands; + else if (identifier == "primary") RETVAL = EQ::invslot::slotPrimary; + else if (identifier == "secondary") RETVAL = EQ::invslot::slotSecondary; + else if (identifier == "finger1") RETVAL = EQ::invslot::slotFinger1; + else if (identifier == "finger2") RETVAL = EQ::invslot::slotFinger2; + else if (identifier == "chest") RETVAL = EQ::invslot::slotChest; + else if (identifier == "legs") RETVAL = EQ::invslot::slotLegs; + else if (identifier == "feet") RETVAL = EQ::invslot::slotFeet; + else if (identifier == "waist") RETVAL = EQ::invslot::slotWaist; + else if (identifier == "powersource") RETVAL = EQ::invslot::slotPowerSource; + else if (identifier == "ammo") RETVAL = EQ::invslot::slotAmmo; + else if (identifier == "general1") RETVAL = EQ::invslot::slotGeneral1; + else if (identifier == "general2") RETVAL = EQ::invslot::slotGeneral2; + else if (identifier == "general3") RETVAL = EQ::invslot::slotGeneral3; + else if (identifier == "general4") RETVAL = EQ::invslot::slotGeneral4; + else if (identifier == "general5") RETVAL = EQ::invslot::slotGeneral5; + else if (identifier == "general6") RETVAL = EQ::invslot::slotGeneral6; + else if (identifier == "general7") RETVAL = EQ::invslot::slotGeneral7; + else if (identifier == "general8") RETVAL = EQ::invslot::slotGeneral8; + else if (identifier == "general9") RETVAL = EQ::invslot::slotGeneral9; + else if (identifier == "general10") RETVAL = EQ::invslot::slotGeneral10; + else if (identifier == "cursor") RETVAL = EQ::invslot::slotCursor; + else if (identifier == "tradeskill") RETVAL = EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE; + else if (identifier == "augment") RETVAL = EQ::invslot::SLOT_AUGMENT_GENERIC_RETURN; } else { - if (identifier == "possessions.begin") RETVAL = EQEmu::invslot::POSSESSIONS_BEGIN; - else if (identifier == "possessions.end") RETVAL = EQEmu::invslot::POSSESSIONS_END; - else if (identifier == "equipment.begin") RETVAL = EQEmu::invslot::EQUIPMENT_BEGIN; - else if (identifier == "equipment.end") RETVAL = EQEmu::invslot::EQUIPMENT_END; - else if (identifier == "general.begin") RETVAL = EQEmu::invslot::GENERAL_BEGIN; - else if (identifier == "general.end") RETVAL = EQEmu::invslot::GENERAL_END; - else if (identifier == "possessionsbags.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN; - else if (identifier == "possessionsbags.end") RETVAL = EQEmu::invbag::CURSOR_BAG_END; - else if (identifier == "generalbags.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN; - else if (identifier == "generalbags.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_END; - else if (identifier == "general1bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN; - else if (identifier == "general1bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 9; - else if (identifier == "general2bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 10; - else if (identifier == "general2bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 19; - else if (identifier == "general3bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 20; - else if (identifier == "general3bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 29; - else if (identifier == "general4bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 30; - else if (identifier == "general4bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 39; - else if (identifier == "general5bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 40; - else if (identifier == "general5bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 49; - else if (identifier == "general6bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 50; - else if (identifier == "general6bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 59; - else if (identifier == "general7bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 60; - else if (identifier == "general7bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 69; - else if (identifier == "general8bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 70; - else if (identifier == "general8bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 79; - else if (identifier == "general9bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 80; - else if (identifier == "general9bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 89; - else if (identifier == "general10bag.begin") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 90; - else if (identifier == "general10bag.end") RETVAL = EQEmu::invbag::GENERAL_BAGS_BEGIN + 99; - else if (identifier == "cursorbag.begin") RETVAL = EQEmu::invbag::CURSOR_BAG_BEGIN; - else if (identifier == "cursorbag.end") RETVAL = EQEmu::invbag::CURSOR_BAG_END; - else if (identifier == "bank.begin") RETVAL = EQEmu::invslot::BANK_BEGIN; - else if (identifier == "bank.end") RETVAL = EQEmu::invslot::BANK_END; - else if (identifier == "bankbags.begin") RETVAL = EQEmu::invbag::BANK_BAGS_BEGIN; - else if (identifier == "bankbags.end") RETVAL = EQEmu::invbag::BANK_BAGS_END; - else if (identifier == "sharedbank.begin") RETVAL = EQEmu::invslot::SHARED_BANK_BEGIN; - else if (identifier == "sharedbank.end") RETVAL = EQEmu::invslot::SHARED_BANK_END; - else if (identifier == "sharedbankbags.begin") RETVAL = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN; - else if (identifier == "sharedbankbags.end") RETVAL = EQEmu::invbag::SHARED_BANK_BAGS_END; - else if (identifier == "bagslot.begin") RETVAL = EQEmu::invbag::SLOT_BEGIN; - else if (identifier == "bagslot.end") RETVAL = EQEmu::invbag::SLOT_END; - else if (identifier == "augsocket.begin") RETVAL = EQEmu::invaug::SOCKET_BEGIN; - else if (identifier == "augsocket.end") RETVAL = EQEmu::invaug::SOCKET_END; + if (identifier == "possessions.begin") RETVAL = EQ::invslot::POSSESSIONS_BEGIN; + else if (identifier == "possessions.end") RETVAL = EQ::invslot::POSSESSIONS_END; + else if (identifier == "equipment.begin") RETVAL = EQ::invslot::EQUIPMENT_BEGIN; + else if (identifier == "equipment.end") RETVAL = EQ::invslot::EQUIPMENT_END; + else if (identifier == "general.begin") RETVAL = EQ::invslot::GENERAL_BEGIN; + else if (identifier == "general.end") RETVAL = EQ::invslot::GENERAL_END; + else if (identifier == "possessionsbags.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN; + else if (identifier == "possessionsbags.end") RETVAL = EQ::invbag::CURSOR_BAG_END; + else if (identifier == "generalbags.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN; + else if (identifier == "generalbags.end") RETVAL = EQ::invbag::GENERAL_BAGS_END; + else if (identifier == "general1bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN; + else if (identifier == "general1bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 9; + else if (identifier == "general2bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 10; + else if (identifier == "general2bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 19; + else if (identifier == "general3bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 20; + else if (identifier == "general3bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 29; + else if (identifier == "general4bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 30; + else if (identifier == "general4bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 39; + else if (identifier == "general5bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 40; + else if (identifier == "general5bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 49; + else if (identifier == "general6bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 50; + else if (identifier == "general6bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 59; + else if (identifier == "general7bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 60; + else if (identifier == "general7bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 69; + else if (identifier == "general8bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 70; + else if (identifier == "general8bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 79; + else if (identifier == "general9bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 80; + else if (identifier == "general9bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 89; + else if (identifier == "general10bag.begin") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 90; + else if (identifier == "general10bag.end") RETVAL = EQ::invbag::GENERAL_BAGS_BEGIN + 99; + else if (identifier == "cursorbag.begin") RETVAL = EQ::invbag::CURSOR_BAG_BEGIN; + else if (identifier == "cursorbag.end") RETVAL = EQ::invbag::CURSOR_BAG_END; + else if (identifier == "bank.begin") RETVAL = EQ::invslot::BANK_BEGIN; + else if (identifier == "bank.end") RETVAL = EQ::invslot::BANK_END; + else if (identifier == "bankbags.begin") RETVAL = EQ::invbag::BANK_BAGS_BEGIN; + else if (identifier == "bankbags.end") RETVAL = EQ::invbag::BANK_BAGS_END; + else if (identifier == "sharedbank.begin") RETVAL = EQ::invslot::SHARED_BANK_BEGIN; + else if (identifier == "sharedbank.end") RETVAL = EQ::invslot::SHARED_BANK_END; + else if (identifier == "sharedbankbags.begin") RETVAL = EQ::invbag::SHARED_BANK_BAGS_BEGIN; + else if (identifier == "sharedbankbags.end") RETVAL = EQ::invbag::SHARED_BANK_BAGS_END; + else if (identifier == "bagslot.begin") RETVAL = EQ::invbag::SLOT_BEGIN; + else if (identifier == "bagslot.end") RETVAL = EQ::invbag::SLOT_END; + else if (identifier == "augsocket.begin") RETVAL = EQ::invaug::SOCKET_BEGIN; + else if (identifier == "augsocket.end") RETVAL = EQ::invaug::SOCKET_END; } XSprePUSH; PUSHu((IV)RETVAL); diff --git a/zone/embxs.cpp b/zone/embxs.cpp index 4571a8f8f..d22f3ecac 100644 --- a/zone/embxs.cpp +++ b/zone/embxs.cpp @@ -33,7 +33,7 @@ const char *getItemName(unsigned itemid) { - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; item = database.GetItem(itemid); if (item) diff --git a/zone/encounter.cpp b/zone/encounter.cpp index 7d37844b6..5eba3b028 100644 --- a/zone/encounter.cpp +++ b/zone/encounter.cpp @@ -36,7 +36,7 @@ Encounter::Encounter(const char* enc_name) :Mob ( nullptr, nullptr, 0, 0, 0, INVISIBLE_MAN, 0, BT_NoTarget, 0, 0, 0, 0, 0, glm::vec4(0,0,0,0), 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQEmu::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EQ::TintProfile(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false ) { encounter_name[0] = 0; diff --git a/zone/encounter.h b/zone/encounter.h index eeeba8e0f..026da2e79 100644 --- a/zone/encounter.h +++ b/zone/encounter.h @@ -34,9 +34,9 @@ public: ~Encounter(); //abstract virtual function implementations required by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill) { return true; } - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) { return true; } + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) { return; } + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr) { return false; } diff --git a/zone/entity.cpp b/zone/entity.cpp index 5290dde0d..92f2c6174 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -1598,7 +1598,7 @@ void EntityList::QueueClientsByTarget(Mob *sender, const EQApplicationPacket *ap } } -void EntityList::QueueClientsByXTarget(Mob *sender, const EQApplicationPacket *app, bool iSendToSender, EQEmu::versions::ClientVersionBitmask client_version_bits) +void EntityList::QueueClientsByXTarget(Mob *sender, const EQApplicationPacket *app, bool iSendToSender, EQ::versions::ClientVersionBitmask client_version_bits) { auto it = client_list.begin(); while (it != client_list.end()) { @@ -1728,7 +1728,7 @@ void EntityList::QueueClientsStatus(Mob *sender, const EQApplicationPacket *app, void EntityList::DuelMessage(Mob *winner, Mob *loser, bool flee) { if (winner->GetLevelCon(winner->GetLevel(), loser->GetLevel()) > 2) { - std::vector args; + std::vector args; args.push_back(winner); args.push_back(loser); @@ -2130,7 +2130,7 @@ void EntityList::QueueClientsGuildBankItemUpdate(const GuildBankItemUpdate_Struc memcpy(outgbius, gbius, sizeof(GuildBankItemUpdate_Struct)); - const EQEmu::ItemData *Item = database.GetItem(gbius->ItemID); + const EQ::ItemData *Item = database.GetItem(gbius->ItemID); auto it = client_list.begin(); while (it != client_list.end()) { @@ -3378,7 +3378,7 @@ void EntityList::ClearFeignAggro(Mob *targ) } if (targ->IsClient()) { - std::vector args; + std::vector args; args.push_back(it->second); int i = parse->EventPlayer(EVENT_FEIGN_DEATH, targ->CastToClient(), "", 0, &args); if (i != 0) { @@ -3445,11 +3445,11 @@ bool EntityList::MakeTrackPacket(Client *client) float MobDistance; if (client->GetClass() == DRUID) - distance = (client->GetSkill(EQEmu::skills::SkillTracking) * 10); + distance = (client->GetSkill(EQ::skills::SkillTracking) * 10); else if (client->GetClass() == RANGER) - distance = (client->GetSkill(EQEmu::skills::SkillTracking) * 12); + distance = (client->GetSkill(EQ::skills::SkillTracking) * 12); else if (client->GetClass() == BARD) - distance = (client->GetSkill(EQEmu::skills::SkillTracking) * 7); + distance = (client->GetSkill(EQ::skills::SkillTracking) * 7); if (distance <= 0) return false; if (distance < 300) @@ -3710,10 +3710,10 @@ void EntityList::ProcessMove(Client *c, const glm::vec3& location) for (auto iter = events.begin(); iter != events.end(); ++iter) { quest_proximity_event& evt = (*iter); if (evt.npc) { - std::vector args; + std::vector args; parse->EventNPC(evt.event_id, evt.npc, evt.client, "", 0, &args); } else { - std::vector args; + std::vector args; args.push_back(&evt.area_id); args.push_back(&evt.area_type); parse->EventPlayer(evt.event_id, evt.client, "", 0, &args); @@ -3769,7 +3769,7 @@ void EntityList::ProcessMove(NPC *n, float x, float y, float z) { for (auto iter = events.begin(); iter != events.end(); ++iter) { quest_proximity_event &evt = (*iter); - std::vector args; + std::vector args; args.push_back(&evt.area_id); args.push_back(&evt.area_type); parse->EventNPC(evt.event_id, evt.npc, evt.client, "", 0, &args); @@ -4262,11 +4262,11 @@ void EntityList::GroupMessage(uint32 gid, const char *from, const char *message) uint16 EntityList::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time) { - const EQEmu::ItemData *is = database.GetItem(itemid); + const EQ::ItemData *is = database.GetItem(itemid); if (!is) return 0; - auto i = new EQEmu::ItemInstance(is, is->MaxCharges); + auto i = new EQ::ItemInstance(is, is->MaxCharges); if (!i) return 0; @@ -4848,7 +4848,7 @@ void EntityList::UpdateFindableNPCState(NPC *n, bool Remove) auto it = client_list.begin(); while (it != client_list.end()) { Client *c = it->second; - if (c && (c->ClientVersion() >= EQEmu::versions::ClientVersion::SoD)) + if (c && (c->ClientVersion() >= EQ::versions::ClientVersion::SoD)) c->QueuePacket(outapp); ++it; diff --git a/zone/entity.h b/zone/entity.h index 8c705897a..b6b187300 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -394,14 +394,14 @@ public: void QueueClientsByTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, Mob* SkipThisMob = 0, bool ackreq = true, bool HoTT = true, uint32 ClientVersionBits = 0xFFFFFFFF, bool inspect_buffs = false); - void QueueClientsByXTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, EQEmu::versions::ClientVersionBitmask client_version_bits = EQEmu::versions::ClientVersionBitmask::maskAllClients); + void QueueClientsByXTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, EQ::versions::ClientVersionBitmask client_version_bits = EQ::versions::ClientVersionBitmask::maskAllClients); void QueueToGroupsForNPCHealthAA(Mob* sender, const EQApplicationPacket* app); void QueueManaged(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, bool ackreq = true); void AEAttack( Mob *attacker, float distance, - int Hand = EQEmu::invslot::slotPrimary, + int Hand = EQ::invslot::slotPrimary, int count = 0, bool is_from_spell = false ); diff --git a/zone/forage.cpp b/zone/forage.cpp index 069f2be63..2119d699d 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -153,21 +153,21 @@ uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, //we need this function to immediately determine, after we receive OP_Fishing, if we can even try to fish, otherwise we have to wait a while to get the failure bool Client::CanFish() { //make sure we still have a fishing pole on: - const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; - int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal); - const EQEmu::ItemInstance* Bait = nullptr; + const EQ::ItemInstance* Pole = m_inv[EQ::invslot::slotPrimary]; + int32 bslot = m_inv.HasItemByUse(EQ::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal); + const EQ::ItemInstance* Bait = nullptr; if (bslot != INVALID_INDEX) Bait = m_inv.GetItem(bslot); - if (!Pole || !Pole->IsClassCommon() || Pole->GetItem()->ItemType != EQEmu::item::ItemTypeFishingPole) { - if (m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingPole, 1, invWhereWorn | invWherePersonal | invWhereBank | invWhereSharedBank | invWhereTrading | invWhereCursor)) //We have a fishing pole somewhere, just not equipped + if (!Pole || !Pole->IsClassCommon() || Pole->GetItem()->ItemType != EQ::item::ItemTypeFishingPole) { + if (m_inv.HasItemByUse(EQ::item::ItemTypeFishingPole, 1, invWhereWorn | invWherePersonal | invWhereBank | invWhereSharedBank | invWhereTrading | invWhereCursor)) //We have a fishing pole somewhere, just not equipped MessageString(Chat::Skills, FISHING_EQUIP_POLE); //You need to put your fishing pole in your primary hand. else //We don't have a fishing pole anywhere MessageString(Chat::Skills, FISHING_NO_POLE); //You can't fish without a fishing pole, go buy one. return false; } - if (!Bait || !Bait->IsClassCommon() || Bait->GetItem()->ItemType != EQEmu::item::ItemTypeFishingBait) { + if (!Bait || !Bait->IsClassCommon() || Bait->GetItem()->ItemType != EQ::item::ItemTypeFishingBait) { MessageString(Chat::Skills, FISHING_NO_BAIT); //You can't fish without fishing bait, go buy some. return false; } @@ -249,16 +249,16 @@ void Client::GoFish() //success formula is not researched at all - int fishing_skill = GetSkill(EQEmu::skills::SkillFishing); //will take into account skill bonuses on pole & bait + int fishing_skill = GetSkill(EQ::skills::SkillFishing); //will take into account skill bonuses on pole & bait //make sure we still have a fishing pole on: - int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal); - const EQEmu::ItemInstance* Bait = nullptr; + int32 bslot = m_inv.HasItemByUse(EQ::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal); + const EQ::ItemInstance* Bait = nullptr; if (bslot != INVALID_INDEX) Bait = m_inv.GetItem(bslot); //if the bait isnt equipped, need to add its skill bonus - if (bslot >= EQEmu::invslot::GENERAL_BEGIN && Bait != nullptr && Bait->GetItem()->SkillModType == EQEmu::skills::SkillFishing) { + if (bslot >= EQ::invslot::GENERAL_BEGIN && Bait != nullptr && Bait->GetItem()->SkillModType == EQ::skills::SkillFishing) { fishing_skill += Bait->GetItem()->SkillModValue; } @@ -312,17 +312,17 @@ void Client::GoFish() food_id = (RuleB(Character, UseNoJunkFishing) ? 13019 : common_fish_ids[index]); } - const EQEmu::ItemData* food_item = database.GetItem(food_id); + const EQ::ItemData* food_item = database.GetItem(food_id); if (food_item) { - if (food_item->ItemType != EQEmu::item::ItemTypeFood) { + if (food_item->ItemType != EQ::item::ItemTypeFood) { MessageString(Chat::Skills, FISHING_SUCCESS); } else { MessageString(Chat::Skills, FISHING_SUCCESS_FISH_NAME, food_item->Name); } - EQEmu::ItemInstance* inst = database.CreateItem(food_item, 1); + EQ::ItemInstance* inst = database.CreateItem(food_item, 1); if (inst != nullptr) { if (CheckLoreConflict(inst->GetItem())) { @@ -332,16 +332,16 @@ void Client::GoFish() else { PushItemOnCursor(*inst); - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketLimbo); if (RuleB(TaskSystem, EnableTaskSystem)) UpdateTasksForItem(ActivityFish, food_id); safe_delete(inst); - inst = m_inv.GetItem(EQEmu::invslot::slotCursor); + inst = m_inv.GetItem(EQ::invslot::slotCursor); } if (inst) { - std::vector args; + std::vector args; args.push_back(inst); parse->EventPlayer(EVENT_FISH_SUCCESS, this, "", inst->GetID(), &args); } @@ -368,26 +368,26 @@ void Client::GoFish() //chance to break fishing pole... //this is potentially exploitable in that they can fish //and then swap out items in primary slot... too lazy to fix right now - const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; + const EQ::ItemInstance* Pole = m_inv[EQ::invslot::slotPrimary]; if (Pole) { - const EQEmu::ItemData* fishing_item = Pole->GetItem(); + const EQ::ItemData* fishing_item = Pole->GetItem(); if (fishing_item && fishing_item->SubType == 0 && zone->random.Int(0, 49) == 1) { MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! - DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); + DeleteItemInInventory(EQ::invslot::slotPrimary, 0, true); } } - if (CheckIncreaseSkill(EQEmu::skills::SkillFishing, nullptr, 5)) + if (CheckIncreaseSkill(EQ::skills::SkillFishing, nullptr, 5)) { - if (title_manager.IsNewTradeSkillTitleAvailable(EQEmu::skills::SkillFishing, GetRawSkill(EQEmu::skills::SkillFishing))) + if (title_manager.IsNewTradeSkillTitleAvailable(EQ::skills::SkillFishing, GetRawSkill(EQ::skills::SkillFishing))) NotifyNewTitlesAvailable(); } } void Client::ForageItem(bool guarantee) { - int skill_level = GetSkill(EQEmu::skills::SkillForage); + int skill_level = GetSkill(EQ::skills::SkillForage); //be wary of the string ids in switch below when changing this. uint32 common_food_ids[MAX_COMMON_FOOD_IDS] = { @@ -417,7 +417,7 @@ void Client::ForageItem(bool guarantee) { foragedfood = common_food_ids[index]; } - const EQEmu::ItemData* food_item = database.GetItem(foragedfood); + const EQ::ItemData* food_item = database.GetItem(foragedfood); if(!food_item) { LogError("nullptr returned from database.GetItem in ClientForageItem"); @@ -428,10 +428,10 @@ void Client::ForageItem(bool guarantee) { stringid = FORAGE_GRUBS; else switch(food_item->ItemType) { - case EQEmu::item::ItemTypeFood: + case EQ::item::ItemTypeFood: stringid = FORAGE_FOOD; break; - case EQEmu::item::ItemTypeDrink: + case EQ::item::ItemTypeDrink: if(strstr(food_item->Name, "ater")) stringid = FORAGE_WATER; else @@ -442,7 +442,7 @@ void Client::ForageItem(bool guarantee) { } MessageString(Chat::Skills, stringid); - EQEmu::ItemInstance* inst = database.CreateItem(food_item, 1); + EQ::ItemInstance* inst = database.CreateItem(food_item, 1); if(inst != nullptr) { // check to make sure it isn't a foraged lore item if(CheckLoreConflict(inst->GetItem())) @@ -452,16 +452,16 @@ void Client::ForageItem(bool guarantee) { } else { PushItemOnCursor(*inst); - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketLimbo); if(RuleB(TaskSystem, EnableTaskSystem)) UpdateTasksForItem(ActivityForage, foragedfood); safe_delete(inst); - inst = m_inv.GetItem(EQEmu::invslot::slotCursor); + inst = m_inv.GetItem(EQ::invslot::slotCursor); } if(inst) { - std::vector args; + std::vector args; args.push_back(inst); parse->EventPlayer(EVENT_FORAGE_SUCCESS, this, "", inst->GetID(), &args); } @@ -478,7 +478,7 @@ void Client::ForageItem(bool guarantee) { parse->EventPlayer(EVENT_FORAGE_FAILURE, this, "", 0); } - CheckIncreaseSkill(EQEmu::skills::SkillForage, nullptr, 5); + CheckIncreaseSkill(EQ::skills::SkillForage, nullptr, 5); } diff --git a/zone/groups.cpp b/zone/groups.cpp index e29deca43..5734d4672 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -407,7 +407,7 @@ void Group::SendHPManaEndPacketsTo(Mob *member) safe_delete_array(hpapp.pBuffer); hpapp.size = 0; - if (member->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (member->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; @@ -438,7 +438,7 @@ void Group::SendHPPacketsFrom(Mob *member) for(i = 0; i < MAX_GROUP_MEMBERS; i++) { if(members[i] && members[i] != member && members[i]->IsClient()) { members[i]->CastToClient()->QueuePacket(&hp_app); - if (members[i]->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[i]->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; mana_update->spawn_id = member->GetID(); @@ -463,7 +463,7 @@ void Group::SendManaPacketFrom(Mob *member) uint32 i; for (i = 0; i < MAX_GROUP_MEMBERS; i++) { if (members[i] && members[i] != member && members[i]->IsClient()) { - if (members[i]->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[i]->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; mana_update->spawn_id = member->GetID(); @@ -484,7 +484,7 @@ void Group::SendEndurancePacketFrom(Mob* member) uint32 i; for (i = 0; i < MAX_GROUP_MEMBERS; i++) { if (members[i] && members[i] != member && members[i]->IsClient()) { - if (members[i]->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[i]->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) { MobEnduranceUpdate_Struct *endurance_update = (MobEnduranceUpdate_Struct *)outapp.pBuffer; endurance_update->spawn_id = member->GetID(); endurance_update->endurance = member->GetEndurancePercent(); @@ -621,7 +621,7 @@ bool Group::DelMemberOOZ(const char *Name) { if(GroupCount() < 3) { UnDelegateMarkNPC(NPCMarkerName.c_str()); - if (GetLeader() && GetLeader()->IsClient() && GetLeader()->CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoD) { + if (GetLeader() && GetLeader()->IsClient() && GetLeader()->CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoD) { UnDelegateMainAssist(MainAssistName.c_str()); } ClearAllNPCMarks(); @@ -786,7 +786,7 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender) if(GroupCount() < 3) { UnDelegateMarkNPC(NPCMarkerName.c_str()); - if (GetLeader() && GetLeader()->IsClient() && GetLeader()->CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoD) { + if (GetLeader() && GetLeader()->IsClient() && GetLeader()->CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoD) { UnDelegateMainAssist(MainAssistName.c_str()); } ClearAllNPCMarks(); @@ -1682,7 +1682,7 @@ void Group::NotifyMainTank(Client *c, uint8 toggle) if(!MainTankName.size()) return; - if (c->ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (c->ClientVersion() < EQ::versions::ClientVersion::SoD) { if(toggle) c->Message(Chat::White, "%s is now Main Tank.", MainTankName.c_str()); @@ -1722,7 +1722,7 @@ void Group::NotifyMainAssist(Client *c, uint8 toggle) if(!MainAssistName.size()) return; - if (c->ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (c->ClientVersion() < EQ::versions::ClientVersion::SoD) { auto outapp = new EQApplicationPacket(OP_DelegateAbility, sizeof(DelegateAbility_Struct)); @@ -1777,7 +1777,7 @@ void Group::NotifyPuller(Client *c, uint8 toggle) if(!PullerName.size()) return; - if (c->ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (c->ClientVersion() < EQ::versions::ClientVersion::SoD) { if(toggle) c->Message(Chat::White, "%s is now Puller.", PullerName.c_str()); @@ -2343,7 +2343,7 @@ void Group::ChangeLeader(Mob* newleader) for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) { if (members[i] && members[i]->IsClient()) { - if (members[i]->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (members[i]->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) members[i]->CastToClient()->SendGroupLeaderChangePacket(newleader->GetName()); members[i]->CastToClient()->QueuePacket(outapp); diff --git a/zone/guild.cpp b/zone/guild.cpp index 166e6edfb..c4fada2b0 100644 --- a/zone/guild.cpp +++ b/zone/guild.cpp @@ -63,7 +63,7 @@ void Client::SendGuildMOTD(bool GetGuildMOTDReply) { void Client::SendGuildURL() { - if (ClientVersion() < EQEmu::versions::ClientVersion::SoF) + if (ClientVersion() < EQ::versions::ClientVersion::SoF) return; if(IsInAGuild()) @@ -85,7 +85,7 @@ void Client::SendGuildURL() void Client::SendGuildChannel() { - if (ClientVersion() < EQEmu::versions::ClientVersion::SoF) + if (ClientVersion() < EQ::versions::ClientVersion::SoF) return; if(IsInAGuild()) @@ -108,7 +108,7 @@ void Client::SendGuildChannel() void Client::SendGuildRanks() { - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) return; int permissions = 30 + 1; //Static number of permissions in all EQ clients as of May 2014 @@ -152,7 +152,7 @@ void Client::SendGuildSpawnAppearance() { uint8 rank = guild_mgr.GetDisplayedRank(GuildID(), GuildRank(), CharacterID()); LogGuilds("Sending spawn appearance for guild [{}] at rank [{}]", GuildID(), rank); SendAppearancePacket(AT_GuildID, GuildID()); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { switch (rank) { case 0: { rank = 5; break; } // GUILD_MEMBER 0 @@ -253,7 +253,7 @@ void Client::RefreshGuildInfo() if((guild_id != OldGuildID) && GuildBanks) { // Unsure about this for RoF+ ... But they don't have that action anymore so fuck it - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) ClearGuildBank(); if(guild_id != GUILD_NONE) diff --git a/zone/guild_mgr.cpp b/zone/guild_mgr.cpp index 200f67d90..882740a00 100644 --- a/zone/guild_mgr.cpp +++ b/zone/guild_mgr.cpp @@ -322,7 +322,7 @@ void ZoneGuildManager::ProcessWorldPacket(ServerPacket *pack) { else if(c != nullptr && s->guild_id != GUILD_NONE) { //char is in zone, and has changed into a new guild, send MOTD. c->SendGuildMOTD(); - if (c->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) { c->SendGuildRanks(); } @@ -690,10 +690,10 @@ void GuildBankManager::SendGuildBank(Client *c) auto &guild_bank = *Iterator; // RoF+ uses a bulk list packet -- This is also how the Action 0 of older clients basically works - if (c->ClientVersionBit() & EQEmu::versions::maskRoFAndLater) { + if (c->ClientVersionBit() & EQ::versions::maskRoFAndLater) { auto outapp = new EQApplicationPacket(OP_GuildBankItemList, sizeof(GuildBankItemListEntry_Struct) * 240); for (int i = 0; i < GUILD_BANK_DEPOSIT_AREA_SIZE; ++i) { - const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID); + const EQ::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID); if (Item) { outapp->WriteUInt8(1); outapp->WriteUInt32(guild_bank->Items.DepositArea[i].Permissions); @@ -717,7 +717,7 @@ void GuildBankManager::SendGuildBank(Client *c) outapp->SetWritePosition(outapp->GetWritePosition() + 20); // newer clients have 40 deposit slots, keep them 0 for now for (int i = 0; i < GUILD_BANK_MAIN_AREA_SIZE; ++i) { - const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID); + const EQ::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID); if (Item) { outapp->WriteUInt8(1); outapp->WriteUInt32(guild_bank->Items.MainArea[i].Permissions); @@ -748,7 +748,7 @@ void GuildBankManager::SendGuildBank(Client *c) { if(guild_bank->Items.DepositArea[i].ItemID > 0) { - const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID); + const EQ::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID); if(!Item) continue; @@ -784,7 +784,7 @@ void GuildBankManager::SendGuildBank(Client *c) { if(guild_bank->Items.MainArea[i].ItemID > 0) { - const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID); + const EQ::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID); if(!Item) continue; @@ -915,7 +915,7 @@ bool GuildBankManager::AddItem(uint32 GuildID, uint8 Area, uint32 ItemID, int32 return false; } - const EQEmu::ItemData *Item = database.GetItem(ItemID); + const EQ::ItemData *Item = database.GetItem(ItemID); GuildBankItemUpdate_Struct gbius; @@ -981,7 +981,7 @@ int GuildBankManager::Promote(uint32 guildID, int slotID) (*iter)->Items.DepositArea[slotID].ItemID = 0; - const EQEmu::ItemData *Item = database.GetItem((*iter)->Items.MainArea[mainSlot].ItemID); + const EQ::ItemData *Item = database.GetItem((*iter)->Items.MainArea[mainSlot].ItemID); GuildBankItemUpdate_Struct gbius; @@ -1037,7 +1037,7 @@ void GuildBankManager::SetPermissions(uint32 guildID, uint16 slotID, uint32 perm else (*iter)->Items.MainArea[slotID].WhoFor[0] = '\0'; - const EQEmu::ItemData *Item = database.GetItem((*iter)->Items.MainArea[slotID].ItemID); + const EQ::ItemData *Item = database.GetItem((*iter)->Items.MainArea[slotID].ItemID); GuildBankItemUpdate_Struct gbius; @@ -1061,7 +1061,7 @@ void GuildBankManager::SetPermissions(uint32 guildID, uint16 slotID, uint32 perm entity_list.QueueClientsGuildBankItemUpdate(&gbius, guildID); } -EQEmu::ItemInstance* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity) +EQ::ItemInstance* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity) { auto Iterator = GetGuildBank(GuildID); @@ -1070,7 +1070,7 @@ EQEmu::ItemInstance* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint GuildBankItem* BankArea = nullptr; - EQEmu::ItemInstance* inst = nullptr; + EQ::ItemInstance* inst = nullptr; if(Area == GuildBankDepositArea) { @@ -1168,7 +1168,7 @@ bool GuildBankManager::DeleteItem(uint32 guildID, uint16 area, uint16 slotID, ui bool deleted = true; - const EQEmu::ItemData *Item = database.GetItem(BankArea[slotID].ItemID); + const EQ::ItemData *Item = database.GetItem(BankArea[slotID].ItemID); if(!Item->Stackable || (quantity >= BankArea[slotID].Quantity)) { std::string query = StringFormat("DELETE FROM `guild_bank` WHERE `guildid` = %i " @@ -1229,7 +1229,7 @@ bool GuildBankManager::MergeStacks(uint32 GuildID, uint16 SlotID) if(BankArea[SlotID].ItemID == 0) return false; - const EQEmu::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID); + const EQ::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID); if(!Item->Stackable) return false; @@ -1327,7 +1327,7 @@ bool GuildBankManager::SplitStack(uint32 GuildID, uint16 SlotID, uint32 Quantity if(BankArea[SlotID].Quantity <= Quantity || Quantity == 0) return false; - const EQEmu::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID); + const EQ::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID); if(!Item->Stackable) return false; diff --git a/zone/guild_mgr.h b/zone/guild_mgr.h index abd11fd9f..60f9ba98f 100644 --- a/zone/guild_mgr.h +++ b/zone/guild_mgr.h @@ -117,7 +117,7 @@ public: bool AddItem(uint32 GuildID, uint8 Area, uint32 ItemID, int32 QtyOrCharges, const char *Donator, uint8 Permissions, const char *WhoFor); int Promote(uint32 GuildID, int SlotID); void SetPermissions(uint32 GuildID, uint16 SlotID, uint32 Permissions, const char *MemberName); - EQEmu::ItemInstance* GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity); + EQ::ItemInstance* GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity); bool DeleteItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity); bool HasItem(uint32 GuildID, uint32 ItemID); bool IsAreaFull(uint32 GuildID, uint16 Area); diff --git a/zone/hate_list.cpp b/zone/hate_list.cpp index 6b26cba8a..725918762 100644 --- a/zone/hate_list.cpp +++ b/zone/hate_list.cpp @@ -297,7 +297,7 @@ int HateList::GetHateRatio(Mob *top, Mob *other) if (!top_entry || top_entry->stored_hate_amount < 1) return 999; // shouldn't happen if you call it right :P - return EQEmu::Clamp(static_cast((other_entry->stored_hate_amount * 100) / top_entry->stored_hate_amount), 1, 999); + return EQ::Clamp(static_cast((other_entry->stored_hate_amount * 100) / top_entry->stored_hate_amount), 1, 999); } // skip is used to ignore a certain mob on the list diff --git a/zone/inventory.cpp b/zone/inventory.cpp index f9438b32c..993cdac8a 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -31,11 +31,11 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { if (itemnum == 0) return 0; uint32 x = 0; - EQEmu::ItemInstance *cur = nullptr; + EQ::ItemInstance *cur = nullptr; int i; if(where_to_check & invWhereWorn) { - for (i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++) { + for (i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -50,18 +50,18 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { } if(where_to_check & invWhereCursor) { - if (GetItemIDAt(EQEmu::invslot::slotCursor) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(EQEmu::invslot::slotCursor) != INVALID_ID)) { - cur = m_inv.GetItem(EQEmu::invslot::slotCursor); + if (GetItemIDAt(EQ::invslot::slotCursor) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(EQ::invslot::slotCursor) != INVALID_ID)) { + cur = m_inv.GetItem(EQ::invslot::slotCursor); if(cur && cur->GetItem()->Stackable) { x += cur->GetCharges(); } else { x++; } - DeleteItemInInventory(EQEmu::invslot::slotCursor, 0, true); + DeleteItemInInventory(EQ::invslot::slotCursor, 0, true); } - for (i = EQEmu::invbag::CURSOR_BAG_BEGIN; i <= EQEmu::invbag::CURSOR_BAG_END; i++) { + for (i = EQ::invbag::CURSOR_BAG_BEGIN; i <= EQ::invbag::CURSOR_BAG_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -76,7 +76,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { } if(where_to_check & invWherePersonal) { - for (i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) { + for (i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -89,7 +89,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { } } - for (i = EQEmu::invbag::GENERAL_BAGS_BEGIN; i <= EQEmu::invbag::GENERAL_BAGS_END; i++) { + for (i = EQ::invbag::GENERAL_BAGS_BEGIN; i <= EQ::invbag::GENERAL_BAGS_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -98,13 +98,13 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { x++; } - DeleteItemInInventory(i, 0, ((((uint64)1 << (EQEmu::invslot::GENERAL_BEGIN + ((i - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) != 0)); + DeleteItemInInventory(i, 0, ((((uint64)1 << (EQ::invslot::GENERAL_BEGIN + ((i - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) != 0)); } } } if(where_to_check & invWhereBank) { - for (i = EQEmu::invslot::BANK_BEGIN; i <= EQEmu::invslot::BANK_END; i++) { + for (i = EQ::invslot::BANK_BEGIN; i <= EQ::invslot::BANK_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -113,11 +113,11 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { x++; } - DeleteItemInInventory(i, 0, ((i - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank)); + DeleteItemInInventory(i, 0, ((i - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank)); } } - for (i = EQEmu::invbag::BANK_BAGS_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END; i++) { + for (i = EQ::invbag::BANK_BAGS_BEGIN; i <= EQ::invbag::BANK_BAGS_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -126,13 +126,13 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { x++; } - DeleteItemInInventory(i, 0, (((i - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT) >= GetInv().GetLookup()->InventoryTypeSize.Bank)); + DeleteItemInInventory(i, 0, (((i - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT) >= GetInv().GetLookup()->InventoryTypeSize.Bank)); } } } if(where_to_check & invWhereSharedBank) { - for (i = EQEmu::invslot::SHARED_BANK_BEGIN; i <= EQEmu::invslot::SHARED_BANK_END; i++) { + for (i = EQ::invslot::SHARED_BANK_BEGIN; i <= EQ::invslot::SHARED_BANK_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -145,7 +145,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { } } - for (i = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN; i <= EQEmu::invbag::SHARED_BANK_BAGS_END; i++) { + for (i = EQ::invbag::SHARED_BANK_BAGS_BEGIN; i <= EQ::invbag::SHARED_BANK_BAGS_END; i++) { if (GetItemIDAt(i) == itemnum || (itemnum == 0xFFFE && GetItemIDAt(i) != INVALID_ID)) { cur = m_inv.GetItem(i); if(cur && cur->GetItem()->Stackable) { @@ -163,7 +163,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) { } -bool Client::CheckLoreConflict(const EQEmu::ItemData* item) +bool Client::CheckLoreConflict(const EQ::ItemData* item) { if (!item) { return false; } if (!item->LoreFlag) { return false; } @@ -181,7 +181,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, // TODO: update calling methods and script apis to handle a failure return - const EQEmu::ItemData* item = database.GetItem(item_id); + const EQ::ItemData* item = database.GetItem(item_id); // make sure the item exists if(item == nullptr) { @@ -222,7 +222,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, } */ - uint32 augments[EQEmu::invaug::SOCKET_COUNT] = { aug1, aug2, aug3, aug4, aug5, aug6 }; + uint32 augments[EQ::invaug::SOCKET_COUNT] = { aug1, aug2, aug3, aug4, aug5, aug6 }; uint32 classes = item->Classes; uint32 races = item->Races; @@ -232,8 +232,8 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, bool enforcerestr = RuleB(Inventory, EnforceAugmentRestriction); bool enforceusable = RuleB(Inventory, EnforceAugmentUsability); - for (int iter = EQEmu::invaug::SOCKET_BEGIN; iter <= EQEmu::invaug::SOCKET_END; ++iter) { - const EQEmu::ItemData* augtest = database.GetItem(augments[iter]); + for (int iter = EQ::invaug::SOCKET_BEGIN; iter <= EQ::invaug::SOCKET_END; ++iter) { + const EQ::ItemData* augtest = database.GetItem(augments[iter]); if(augtest == nullptr) { if(augments[iter]) { @@ -276,7 +276,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, // check for augment type allowance if(enforcewear) { - if ((item->AugSlotType[iter] == EQEmu::item::AugTypeNone) || !(((uint32)1 << (item->AugSlotType[iter] - 1)) & augtest->AugType)) { + if ((item->AugSlotType[iter] == EQ::item::AugTypeNone) || !(((uint32)1 << (item->AugSlotType[iter] - 1)) & augtest->AugType)) { Message(Chat::Red, "Augment %u (Aug%i) is not acceptable wear on Item %u.", augments[iter], iter + 1, item->ID); LogInventory("Player [{}] on account [{}] attempted to augment an item with an unacceptable augment type (Aug[{}]).\n(Item: [{}], Aug1: [{}], Aug2: [{}], Aug3: [{}], Aug4: [{}], Aug5: [{}], Aug6: [{}])\n", GetName(), account_name, (iter + 1), item->ID, aug1, aug2, aug3, aug4, aug5, aug6); @@ -299,153 +299,153 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, uint8 it = item->ItemType; switch(augtest->AugRestrict) { - case EQEmu::item::AugRestrictionAny: + case EQ::item::AugRestrictionAny: break; - case EQEmu::item::AugRestrictionArmor: + case EQ::item::AugRestrictionArmor: switch(it) { - case EQEmu::item::ItemTypeArmor: + case EQ::item::ItemTypeArmor: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestrictionWeapons: + case EQ::item::AugRestrictionWeapons: switch(it) { - case EQEmu::item::ItemType1HSlash: - case EQEmu::item::ItemType1HBlunt: - case EQEmu::item::ItemType1HPiercing: - case EQEmu::item::ItemTypeMartial: - case EQEmu::item::ItemType2HSlash: - case EQEmu::item::ItemType2HBlunt: - case EQEmu::item::ItemType2HPiercing: - case EQEmu::item::ItemTypeBow: + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemType1HPiercing: + case EQ::item::ItemTypeMartial: + case EQ::item::ItemType2HSlash: + case EQ::item::ItemType2HBlunt: + case EQ::item::ItemType2HPiercing: + case EQ::item::ItemTypeBow: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction1HWeapons: + case EQ::item::AugRestriction1HWeapons: switch(it) { - case EQEmu::item::ItemType1HSlash: - case EQEmu::item::ItemType1HBlunt: - case EQEmu::item::ItemType1HPiercing: - case EQEmu::item::ItemTypeMartial: + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemType1HPiercing: + case EQ::item::ItemTypeMartial: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction2HWeapons: + case EQ::item::AugRestriction2HWeapons: switch(it) { - case EQEmu::item::ItemType2HSlash: - case EQEmu::item::ItemType2HBlunt: - case EQEmu::item::ItemType2HPiercing: - case EQEmu::item::ItemTypeBow: + case EQ::item::ItemType2HSlash: + case EQ::item::ItemType2HBlunt: + case EQ::item::ItemType2HPiercing: + case EQ::item::ItemTypeBow: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction1HSlash: + case EQ::item::AugRestriction1HSlash: switch(it) { - case EQEmu::item::ItemType1HSlash: + case EQ::item::ItemType1HSlash: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction1HBlunt: + case EQ::item::AugRestriction1HBlunt: switch(it) { - case EQEmu::item::ItemType1HBlunt: + case EQ::item::ItemType1HBlunt: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestrictionPiercing: + case EQ::item::AugRestrictionPiercing: switch(it) { - case EQEmu::item::ItemType1HPiercing: + case EQ::item::ItemType1HPiercing: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestrictionHandToHand: + case EQ::item::AugRestrictionHandToHand: switch(it) { - case EQEmu::item::ItemTypeMartial: + case EQ::item::ItemTypeMartial: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction2HSlash: + case EQ::item::AugRestriction2HSlash: switch(it) { - case EQEmu::item::ItemType2HSlash: + case EQ::item::ItemType2HSlash: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction2HBlunt: + case EQ::item::AugRestriction2HBlunt: switch(it) { - case EQEmu::item::ItemType2HBlunt: + case EQ::item::ItemType2HBlunt: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction2HPierce: + case EQ::item::AugRestriction2HPierce: switch(it) { - case EQEmu::item::ItemType2HPiercing: + case EQ::item::ItemType2HPiercing: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestrictionBows: + case EQ::item::AugRestrictionBows: switch(it) { - case EQEmu::item::ItemTypeBow: + case EQ::item::ItemTypeBow: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestrictionShields: + case EQ::item::AugRestrictionShields: switch(it) { - case EQEmu::item::ItemTypeShield: + case EQ::item::ItemTypeShield: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction1HSlash1HBluntOrHandToHand: + case EQ::item::AugRestriction1HSlash1HBluntOrHandToHand: switch(it) { - case EQEmu::item::ItemType1HSlash: - case EQEmu::item::ItemType1HBlunt: - case EQEmu::item::ItemTypeMartial: + case EQ::item::ItemType1HSlash: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemTypeMartial: break; default: restrictfail = true; break; } break; - case EQEmu::item::AugRestriction1HBluntOrHandToHand: + case EQ::item::AugRestriction1HBluntOrHandToHand: switch(it) { - case EQEmu::item::ItemType1HBlunt: - case EQEmu::item::ItemTypeMartial: + case EQ::item::ItemType1HBlunt: + case EQ::item::ItemTypeMartial: break; default: restrictfail = true; @@ -453,9 +453,9 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, } break; // These 3 are in-work - case EQEmu::item::AugRestrictionUnknown1: - case EQEmu::item::AugRestrictionUnknown2: - case EQEmu::item::AugRestrictionUnknown3: + case EQ::item::AugRestrictionUnknown1: + case EQ::item::AugRestrictionUnknown2: + case EQ::item::AugRestrictionUnknown3: default: restrictfail = true; break; @@ -514,7 +514,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, // in any other situation just use charges as passed - EQEmu::ItemInstance* inst = database.CreateItem(item, charges); + EQ::ItemInstance* inst = database.CreateItem(item, charges); if(inst == nullptr) { Message(Chat::Red, "An unknown server error has occurred and your item was not created."); @@ -526,7 +526,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, } // add any validated augments - for (int iter = EQEmu::invaug::SOCKET_BEGIN; iter <= EQEmu::invaug::SOCKET_END; ++iter) { + for (int iter = EQ::invaug::SOCKET_BEGIN; iter <= EQ::invaug::SOCKET_END; ++iter) { if(augments[iter]) inst->PutAugment(&database, iter, augments[iter]); } @@ -540,7 +540,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, inst->SetOrnamentHeroModel(ornament_hero_model); // check to see if item is usable in requested slot - if (enforceusable && (to_slot >= EQEmu::invslot::EQUIPMENT_BEGIN && to_slot <= EQEmu::invslot::EQUIPMENT_END)) { + if (enforceusable && (to_slot >= EQ::invslot::EQUIPMENT_BEGIN && to_slot <= EQ::invslot::EQUIPMENT_END)) { uint32 slottest = to_slot; if(!(slots & ((uint32)1 << slottest))) { @@ -548,14 +548,14 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, LogInventory("Player [{}] on account [{}] attempted to equip an item unusable in slot [{}] - moved to cursor.\n(Item: [{}], Aug1: [{}], Aug2: [{}], Aug3: [{}], Aug4: [{}], Aug5: [{}], Aug6: [{}])\n", GetName(), account_name, to_slot, item->ID, aug1, aug2, aug3, aug4, aug5, aug6); - to_slot = EQEmu::invslot::slotCursor; + to_slot = EQ::invslot::slotCursor; } } // put item into inventory - if (to_slot == EQEmu::invslot::slotCursor) { + if (to_slot == EQ::invslot::slotCursor) { PushItemOnCursor(*inst); - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketLimbo); } else { PutItemInInventory(to_slot, *inst, true); @@ -569,7 +569,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, DiscoverItem(item_id); /* // Augments should have been discovered prior to being placed on an item. - for (int iter = AUG_BEGIN; iter < EQEmu::constants::ITEM_COMMON_SIZE; ++iter) { + for (int iter = AUG_BEGIN; iter < EQ::constants::ITEM_COMMON_SIZE; ++iter) { if(augments[iter] && !IsDiscovered(augments[iter])) DiscoverItem(augments[iter]); } @@ -617,7 +617,7 @@ void Client::DropItem(int16 slot_id, bool recurse) } // Take control of item in client inventory - EQEmu::ItemInstance *inst = m_inv.PopItem(slot_id); + EQ::ItemInstance *inst = m_inv.PopItem(slot_id); if(inst) { if (LogSys.log_settings[Logs::Inventory].is_category_enabled) { LogInventory("DropItem() Processing - full item parse:"); @@ -657,7 +657,7 @@ void Client::DropItem(int16 slot_id, bool recurse) } // Save client inventory change to database - if (slot_id == EQEmu::invslot::slotCursor) { + if (slot_id == EQ::invslot::slotCursor) { SendCursorBuffer(); auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); database.SaveCursor(CharacterID(), s, e); @@ -679,7 +679,7 @@ void Client::DropItem(int16 slot_id, bool recurse) safe_delete(inst); } -void Client::DropItemQS(EQEmu::ItemInstance* inst, bool pickup) { +void Client::DropItemQS(EQ::ItemInstance* inst, bool pickup) { if (RuleB(QueryServ, PlayerDropItems)) { QSPlayerDropItem_Struct qs_audit; std::list event_details; @@ -704,8 +704,8 @@ void Client::DropItemQS(EQEmu::ItemInstance* inst, bool pickup) { event_details.push_back(detail); if (inst->IsClassBag()) { - for (uint8 sub_slot = EQEmu::invbag::SLOT_BEGIN; (sub_slot <= EQEmu::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items - const EQEmu::ItemInstance* bag_inst = inst->GetItem(sub_slot); + for (uint8 sub_slot = EQ::invbag::SLOT_BEGIN; (sub_slot <= EQ::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items + const EQ::ItemInstance* bag_inst = inst->GetItem(sub_slot); if (bag_inst) { detail = new QSDropItems_Struct; detail->item_id = bag_inst->GetID(); @@ -748,7 +748,7 @@ void Client::DropItemQS(EQEmu::ItemInstance* inst, bool pickup) { } // Drop inst -void Client::DropInst(const EQEmu::ItemInstance* inst) +void Client::DropInst(const EQ::ItemInstance* inst) { if (!inst) { // Item doesn't exist in inventory! @@ -771,26 +771,26 @@ void Client::DropInst(const EQEmu::ItemInstance* inst) // Returns a slot's item ID (returns INVALID_ID if not found) int32 Client::GetItemIDAt(int16 slot_id) { - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask) == 0) return INVALID_ID; } - else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) == 0) return INVALID_ID; } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) return INVALID_ID; } - else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= GetInv().GetLookup()->InventoryTypeSize.Bank) return INVALID_ID; } - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + const EQ::ItemInstance* inst = m_inv[slot_id]; if (inst) return inst->GetItem()->ID; @@ -801,26 +801,26 @@ int32 Client::GetItemIDAt(int16 slot_id) { // Returns an augment's ID that's in an item (returns INVALID_ID if not found) // Pass in the slot ID of the item and which augslot you want to check (0-5) int32 Client::GetAugmentIDAt(int16 slot_id, uint8 augslot) { - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask) == 0) return INVALID_ID; } - else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) == 0) return INVALID_ID; } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) return INVALID_ID; } - else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= GetInv().GetLookup()->InventoryTypeSize.Bank) return INVALID_ID; } - const EQEmu::ItemInstance* inst = m_inv[slot_id]; + const EQ::ItemInstance* inst = m_inv[slot_id]; if (inst && inst->GetAugmentItemID(augslot)) { return inst->GetAugmentItemID(augslot); } @@ -834,7 +834,7 @@ void Client::SendCursorBuffer() // Temporary work-around for the RoF+ Client Buffer // Instead of dealing with client moving items in cursor buffer, // we can just send the next item in the cursor buffer to the cursor. - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) { return; } + if (ClientVersion() < EQ::versions::ClientVersion::RoF) { return; } if (GetInv().CursorEmpty()) { return; } auto test_inst = GetInv().GetCursorItem(); @@ -855,11 +855,11 @@ void Client::SendCursorBuffer() GetName(), test_item->Name, test_item->ID); MessageString(Chat::Loot, 290); parse->EventItem(EVENT_DESTROY_ITEM, this, test_inst, nullptr, "", 0); - DeleteItemInInventory(EQEmu::invslot::slotCursor); + DeleteItemInInventory(EQ::invslot::slotCursor); SendCursorBuffer(); } else { - SendItemPacket(EQEmu::invslot::slotCursor, test_inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, test_inst, ItemPacketLimbo); } } @@ -912,11 +912,11 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd qsaudit->items[parent_offset].aug_5 = m_inv[slot_id]->GetAugmentItemID(5); if (m_inv[slot_id]->IsClassBag()) { - for (uint8 bag_idx = EQEmu::invbag::SLOT_BEGIN; bag_idx < m_inv[slot_id]->GetItem()->BagSlots; bag_idx++) { - EQEmu::ItemInstance* bagitem = m_inv[slot_id]->GetItem(bag_idx); + for (uint8 bag_idx = EQ::invbag::SLOT_BEGIN; bag_idx < m_inv[slot_id]->GetItem()->BagSlots; bag_idx++) { + EQ::ItemInstance* bagitem = m_inv[slot_id]->GetItem(bag_idx); if(bagitem) { - int16 bagslot_id = EQEmu::InventoryProfile::CalcSlotId(slot_id, bag_idx); + int16 bagslot_id = EQ::InventoryProfile::CalcSlotId(slot_id, bag_idx); qsaudit->items[++parent_offset].char_slot = bagslot_id; qsaudit->items[parent_offset].item_id = bagitem->GetID(); @@ -937,8 +937,8 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd bool isDeleted = m_inv.DeleteItem(slot_id, quantity); - const EQEmu::ItemInstance* inst = nullptr; - if (slot_id == EQEmu::invslot::slotCursor) { + const EQ::ItemInstance* inst = nullptr; + if (slot_id == EQ::invslot::slotCursor) { auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); if(update_db) database.SaveCursor(character_id, s, e); @@ -984,13 +984,13 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd } } -bool Client::PushItemOnCursor(const EQEmu::ItemInstance& inst, bool client_update) +bool Client::PushItemOnCursor(const EQ::ItemInstance& inst, bool client_update) { LogInventory("Putting item [{}] ([{}]) on the cursor", inst.GetItem()->Name, inst.GetItem()->ID); m_inv.PushCursor(inst); if (client_update) { - SendItemPacket(EQEmu::invslot::slotCursor, &inst, ItemPacketLimbo); + SendItemPacket(EQ::invslot::slotCursor, &inst, ItemPacketLimbo); } auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); @@ -1001,10 +1001,10 @@ bool Client::PushItemOnCursor(const EQEmu::ItemInstance& inst, bool client_updat // Any items already there will be removed from user's inventory // (Also saves changes back to the database: this may be optimized in the future) // client_update: Sends packet to client -bool Client::PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, bool client_update) { +bool Client::PutItemInInventory(int16 slot_id, const EQ::ItemInstance& inst, bool client_update) { LogInventory("Putting item [{}] ([{}]) into slot [{}]", inst.GetItem()->Name, inst.GetItem()->ID, slot_id); - if (slot_id == EQEmu::invslot::slotCursor) { // don't trust macros before conditional statements... + if (slot_id == EQ::invslot::slotCursor) { // don't trust macros before conditional statements... return PushItemOnCursor(inst, client_update); } else { @@ -1013,11 +1013,11 @@ bool Client::PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, if (client_update) { - SendItemPacket(slot_id, &inst, ((slot_id == EQEmu::invslot::slotCursor) ? ItemPacketLimbo : ItemPacketTrade)); - //SendWearChange(EQEmu::InventoryProfile::CalcMaterialFromSlot(slot_id)); + SendItemPacket(slot_id, &inst, ((slot_id == EQ::invslot::slotCursor) ? ItemPacketLimbo : ItemPacketTrade)); + //SendWearChange(EQ::InventoryProfile::CalcMaterialFromSlot(slot_id)); } - if (slot_id == EQEmu::invslot::slotCursor) { + if (slot_id == EQ::invslot::slotCursor) { auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); return database.SaveCursor(this->CharacterID(), s, e); } @@ -1029,13 +1029,13 @@ bool Client::PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, // a lot of wasted checks and calls coded above... } -void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, ServerLootItem_Struct** bag_item_data) +void Client::PutLootInInventory(int16 slot_id, const EQ::ItemInstance &inst, ServerLootItem_Struct** bag_item_data) { LogInventory("Putting loot item [{}] ([{}]) into slot [{}]", inst.GetItem()->Name, inst.GetItem()->ID, slot_id); bool cursor_empty = m_inv.CursorEmpty(); - if (slot_id == EQEmu::invslot::slotCursor) { + if (slot_id == EQ::invslot::slotCursor) { m_inv.PushCursor(inst); auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); database.SaveCursor(this->CharacterID(), s, e); @@ -1046,9 +1046,9 @@ void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, } // Subordinate items in cursor buffer must be sent via ItemPacketSummonItem or we just overwrite the visible cursor and desync the client - if (slot_id == EQEmu::invslot::slotCursor && !cursor_empty) { + if (slot_id == EQ::invslot::slotCursor && !cursor_empty) { // RoF+ currently has a specialized cursor handler - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendItemPacket(slot_id, &inst, ItemPacketLimbo); } else { @@ -1056,11 +1056,11 @@ void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, } if (bag_item_data) { - for (int index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) { + for (int index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) { if (bag_item_data[index] == nullptr) continue; - const EQEmu::ItemInstance *bagitem = database.CreateItem( + const EQ::ItemInstance *bagitem = database.CreateItem( bag_item_data[index]->item_id, bag_item_data[index]->charges, bag_item_data[index]->aug_1, @@ -1074,14 +1074,14 @@ void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, // Dump bag contents to cursor in the event that owning bag is not the first cursor item // (This assumes that the data passed is correctly associated..no safety checks are implemented) - if (slot_id == EQEmu::invslot::slotCursor && !cursor_empty) { + if (slot_id == EQ::invslot::slotCursor && !cursor_empty) { LogInventory("Putting bag loot item [{}] ([{}]) into slot [{}] (non-empty cursor override)", - inst.GetItem()->Name, inst.GetItem()->ID, EQEmu::invslot::slotCursor); + inst.GetItem()->Name, inst.GetItem()->ID, EQ::invslot::slotCursor); - PutLootInInventory(EQEmu::invslot::slotCursor, *bagitem); + PutLootInInventory(EQ::invslot::slotCursor, *bagitem); } else { - auto bag_slot = EQEmu::InventoryProfile::CalcSlotId(slot_id, index); + auto bag_slot = EQ::InventoryProfile::CalcSlotId(slot_id, index); LogInventory("Putting bag loot item [{}] ([{}]) into slot [{}] (bag slot [{}])", inst.GetItem()->Name, inst.GetItem()->ID, bag_slot, index); @@ -1094,16 +1094,16 @@ void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, CalcBonuses(); } -bool Client::TryStacking(EQEmu::ItemInstance* item, uint8 type, bool try_worn, bool try_cursor) { +bool Client::TryStacking(EQ::ItemInstance* item, uint8 type, bool try_worn, bool try_cursor) { if(!item || !item->IsStackable() || item->GetCharges()>=item->GetItem()->StackSize) return false; int16 i; uint32 item_id = item->GetItem()->ID; - for (i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) { + for (i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { if (((uint64)1 << i) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; - EQEmu::ItemInstance* tmp_inst = m_inv.GetItem(i); + EQ::ItemInstance* tmp_inst = m_inv.GetItem(i); if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize){ MoveItemCharges(*item, i, type); CalcBonuses(); @@ -1113,13 +1113,13 @@ bool Client::TryStacking(EQEmu::ItemInstance* item, uint8 type, bool try_worn, b return true; } } - for (i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) { + for (i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { if (((uint64)1 << i) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; - for (uint8 j = EQEmu::invbag::SLOT_BEGIN; j <= EQEmu::invbag::SLOT_END; j++) { - uint16 slotid = EQEmu::InventoryProfile::CalcSlotId(i, j); - EQEmu::ItemInstance* tmp_inst = m_inv.GetItem(slotid); + for (uint8 j = EQ::invbag::SLOT_BEGIN; j <= EQ::invbag::SLOT_END; j++) { + uint16 slotid = EQ::InventoryProfile::CalcSlotId(i, j); + EQ::ItemInstance* tmp_inst = m_inv.GetItem(slotid); if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) { MoveItemCharges(*item, slotid, type); @@ -1137,35 +1137,35 @@ bool Client::TryStacking(EQEmu::ItemInstance* item, uint8 type, bool try_worn, b // Locate an available space in inventory to place an item // and then put the item there // The change will be saved to the database -bool Client::AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn, bool try_cursor, ServerLootItem_Struct** bag_item_data) +bool Client::AutoPutLootInInventory(EQ::ItemInstance& inst, bool try_worn, bool try_cursor, ServerLootItem_Struct** bag_item_data) { // #1: Try to auto equip - if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel <= level && (!inst.GetItem()->Attuneable || inst.IsAttuned()) && inst.GetItem()->ItemType != EQEmu::item::ItemTypeAugmentation) { - for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++) { + if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel <= level && (!inst.GetItem()->Attuneable || inst.IsAttuned()) && inst.GetItem()->ItemType != EQ::item::ItemTypeAugmentation) { + for (int16 i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) { if (((uint64)1 << i) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; if (!m_inv[i]) { - if (i == EQEmu::invslot::slotPrimary && inst.IsWeapon()) { // If item is primary slot weapon + if (i == EQ::invslot::slotPrimary && inst.IsWeapon()) { // If item is primary slot weapon if (inst.GetItem()->IsType2HWeapon()) { // and uses 2hs \ 2hb \ 2hp - if (m_inv[EQEmu::invslot::slotSecondary]) { // and if secondary slot is not empty + if (m_inv[EQ::invslot::slotSecondary]) { // and if secondary slot is not empty continue; // Can't auto-equip } } } - if (i == EQEmu::invslot::slotSecondary && m_inv[EQEmu::invslot::slotPrimary]) { // check to see if primary slot is a two hander - if (m_inv[EQEmu::invslot::slotPrimary]->GetItem()->IsType2HWeapon()) + if (i == EQ::invslot::slotSecondary && m_inv[EQ::invslot::slotPrimary]) { // check to see if primary slot is a two hander + if (m_inv[EQ::invslot::slotPrimary]->GetItem()->IsType2HWeapon()) continue; } - if (i == EQEmu::invslot::slotSecondary && inst.IsWeapon() && !CanThisClassDualWield()) { + if (i == EQ::invslot::slotSecondary && inst.IsWeapon() && !CanThisClassDualWield()) { continue; } if (inst.IsEquipable(i)) { // Equippable at this slot? //send worn to everyone... PutLootInInventory(i, inst); - uint8 worn_slot_material = EQEmu::InventoryProfile::CalcMaterialFromSlot(i); - if (worn_slot_material != EQEmu::textures::materialInvalid) { + uint8 worn_slot_material = EQ::InventoryProfile::CalcMaterialFromSlot(i); + if (worn_slot_material != EQ::textures::materialInvalid) { SendWearChange(worn_slot_material); } @@ -1183,7 +1183,7 @@ bool Client::AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn, bo } // #3: put it in inventory - bool is_arrow = (inst.GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false; + bool is_arrow = (inst.GetItem()->ItemType == EQ::item::ItemTypeArrow) ? true : false; int16 slot_id = m_inv.FindFreeSlot(inst.IsClassBag(), try_cursor, inst.GetItem()->Size, is_arrow); if (slot_id != INVALID_INDEX) { PutLootInInventory(slot_id, inst, bag_item_data); @@ -1194,9 +1194,9 @@ bool Client::AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn, bo } // helper function for AutoPutLootInInventory -void Client::MoveItemCharges(EQEmu::ItemInstance &from, int16 to_slot, uint8 type) +void Client::MoveItemCharges(EQ::ItemInstance &from, int16 to_slot, uint8 type) { - EQEmu::ItemInstance *tmp_inst = m_inv.GetItem(to_slot); + EQ::ItemInstance *tmp_inst = m_inv.GetItem(to_slot); if(tmp_inst && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) { // this is how much room is left on the item we're stacking onto @@ -1208,7 +1208,7 @@ void Client::MoveItemCharges(EQEmu::ItemInstance &from, int16 to_slot, uint8 typ tmp_inst->SetCharges(tmp_inst->GetCharges() + charges_to_move); from.SetCharges(from.GetCharges() - charges_to_move); SendLootItemInPacket(tmp_inst, to_slot); - if (to_slot == EQEmu::invslot::slotCursor) { + if (to_slot == EQ::invslot::slotCursor) { auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); database.SaveCursor(this->CharacterID(), s, e); } @@ -1329,13 +1329,13 @@ bool MakeItemLink(char* &ret_link, const ItemData *item, uint32 aug0, uint32 aug } #endif -int Client::GetItemLinkHash(const EQEmu::ItemInstance* inst) { +int Client::GetItemLinkHash(const EQ::ItemInstance* inst) { //pre-Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=70&postdays=0&postorder=asc //Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=145 if (!inst) //have to have an item to make the hash return 0; - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); char* hash_str = 0; /*register */int hash = 0; @@ -1417,8 +1417,8 @@ int Client::GetItemLinkHash(const EQEmu::ItemInstance* inst) { return hash; } -// This appears to still be in use... The core of this should be incorporated into class EQEmu::SayLinkEngine -void Client::SendItemLink(const EQEmu::ItemInstance* inst, bool send_to_all) +// This appears to still be in use... The core of this should be incorporated into class EQ::SayLinkEngine +void Client::SendItemLink(const EQ::ItemInstance* inst, bool send_to_all) { /* @@ -1429,7 +1429,7 @@ packet with the item number in it, but I cant seem to find it right now if (!inst) return; - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); const char* name2 = &item->Name[0]; auto outapp = new EQApplicationPacket(OP_ItemLinkText, strlen(name2) + 68); char buffer2[135] = {0}; @@ -1458,35 +1458,35 @@ packet with the item number in it, but I cant seem to find it right now safe_delete(outapp); } -void Client::SendLootItemInPacket(const EQEmu::ItemInstance* inst, int16 slot_id) +void Client::SendLootItemInPacket(const EQ::ItemInstance* inst, int16 slot_id) { SendItemPacket(slot_id,inst, ItemPacketTrade); } bool Client::IsValidSlot(uint32 slot) { - if (slot <= EQEmu::invslot::POSSESSIONS_END && slot >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot <= EQ::invslot::POSSESSIONS_END && slot >= EQ::invslot::POSSESSIONS_BEGIN) { return ((((uint64)1 << slot) & GetInv().GetLookup()->PossessionsBitmask) != 0); } - else if (slot <= EQEmu::invbag::GENERAL_BAGS_END && slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot <= EQ::invbag::GENERAL_BAGS_END && slot >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); return ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) != 0); } - else if (slot <= EQEmu::invslot::BANK_END && slot >= EQEmu::invslot::BANK_BEGIN) { - return ((slot - EQEmu::invslot::BANK_BEGIN) < GetInv().GetLookup()->InventoryTypeSize.Bank); + else if (slot <= EQ::invslot::BANK_END && slot >= EQ::invslot::BANK_BEGIN) { + return ((slot - EQ::invslot::BANK_BEGIN) < GetInv().GetLookup()->InventoryTypeSize.Bank); } - else if (slot <= EQEmu::invbag::BANK_BAGS_END && slot >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (slot - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (slot <= EQ::invbag::BANK_BAGS_END && slot >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; return (temp_slot < GetInv().GetLookup()->InventoryTypeSize.Bank); } else if ( (slot == (uint32)INVALID_INDEX) || - (slot == (uint32)EQEmu::invslot::slotCursor) || - (slot <= EQEmu::invbag::CURSOR_BAG_END && slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) || - (slot <= EQEmu::invslot::TRIBUTE_END && slot >= EQEmu::invslot::TRIBUTE_BEGIN) || - (slot <= EQEmu::invslot::SHARED_BANK_END && slot >= EQEmu::invslot::SHARED_BANK_BEGIN) || - (slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) || - (slot <= EQEmu::invslot::TRADE_END && slot >= EQEmu::invslot::TRADE_BEGIN) || - (slot <= EQEmu::invslot::WORLD_END && slot >= EQEmu::invslot::WORLD_BEGIN) + (slot == (uint32)EQ::invslot::slotCursor) || + (slot <= EQ::invbag::CURSOR_BAG_END && slot >= EQ::invbag::CURSOR_BAG_BEGIN) || + (slot <= EQ::invslot::TRIBUTE_END && slot >= EQ::invslot::TRIBUTE_BEGIN) || + (slot <= EQ::invslot::SHARED_BANK_END && slot >= EQ::invslot::SHARED_BANK_BEGIN) || + (slot <= EQ::invbag::SHARED_BANK_BAGS_END && slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) || + (slot <= EQ::invslot::TRADE_END && slot >= EQ::invslot::TRADE_BEGIN) || + (slot <= EQ::invslot::WORLD_END && slot >= EQ::invslot::WORLD_BEGIN) ) { return true; } @@ -1496,10 +1496,10 @@ bool Client::IsValidSlot(uint32 slot) { bool Client::IsBankSlot(uint32 slot) { - if ((slot >= EQEmu::invslot::BANK_BEGIN && slot <= EQEmu::invslot::BANK_END) || - (slot >= EQEmu::invbag::BANK_BAGS_BEGIN && slot <= EQEmu::invbag::BANK_BAGS_END) || - (slot >= EQEmu::invslot::SHARED_BANK_BEGIN && slot <= EQEmu::invslot::SHARED_BANK_END) || - (slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN && slot <= EQEmu::invbag::SHARED_BANK_BAGS_END)) + if ((slot >= EQ::invslot::BANK_BEGIN && slot <= EQ::invslot::BANK_END) || + (slot >= EQ::invbag::BANK_BAGS_BEGIN && slot <= EQ::invbag::BANK_BAGS_END) || + (slot >= EQ::invslot::SHARED_BANK_BEGIN && slot <= EQ::invslot::SHARED_BANK_END) || + (slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN && slot <= EQ::invbag::SHARED_BANK_BAGS_END)) { return true; } @@ -1533,10 +1533,10 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { if (move_in->from_slot == move_in->to_slot) { // Item summon, no further processing needed if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) { return true; } // Can't do RoF+ + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { return true; } // Can't do RoF+ - if (move_in->to_slot == EQEmu::invslot::slotCursor) { - auto test_inst = m_inv.GetItem(EQEmu::invslot::slotCursor); + if (move_in->to_slot == EQ::invslot::slotCursor) { + auto test_inst = m_inv.GetItem(EQ::invslot::slotCursor); if (test_inst == nullptr) { return true; } auto test_item = test_inst->GetItem(); if (test_item == nullptr) { return true; } @@ -1555,18 +1555,18 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { GetName(), test_item->Name, test_item->ID); MessageString(Chat::Loot, 290); parse->EventItem(EVENT_DESTROY_ITEM, this, test_inst, nullptr, "", 0); - DeleteItemInInventory(EQEmu::invslot::slotCursor, 0, true); + DeleteItemInInventory(EQ::invslot::slotCursor, 0, true); } } return true; } if (move_in->to_slot == (uint32)INVALID_INDEX) { - if (move_in->from_slot == (uint32)EQEmu::invslot::slotCursor) { + if (move_in->from_slot == (uint32)EQ::invslot::slotCursor) { LogInventory("Client destroyed item from cursor slot [{}]", move_in->from_slot); if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit - EQEmu::ItemInstance *inst = m_inv.GetItem(EQEmu::invslot::slotCursor); + EQ::ItemInstance *inst = m_inv.GetItem(EQ::invslot::slotCursor); if(inst) { parse->EventItem(EVENT_DESTROY_ITEM, this, inst, nullptr, "", 0); } @@ -1585,9 +1585,9 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } if (auto_attack) { - if (move_in->from_slot == EQEmu::invslot::slotPrimary || move_in->from_slot == EQEmu::invslot::slotSecondary || move_in->from_slot == EQEmu::invslot::slotRange) + if (move_in->from_slot == EQ::invslot::slotPrimary || move_in->from_slot == EQ::invslot::slotSecondary || move_in->from_slot == EQ::invslot::slotRange) SetAttackTimer(); - else if (move_in->to_slot == EQEmu::invslot::slotPrimary || move_in->to_slot == EQEmu::invslot::slotSecondary || move_in->to_slot == EQEmu::invslot::slotRange) + else if (move_in->to_slot == EQ::invslot::slotPrimary || move_in->to_slot == EQ::invslot::slotSecondary || move_in->to_slot == EQ::invslot::slotRange) SetAttackTimer(); } @@ -1614,8 +1614,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { //Setup uint32 srcitemid = 0; uint32 dstitemid = 0; - EQEmu::ItemInstance* src_inst = m_inv.GetItem(src_slot_id); - EQEmu::ItemInstance* dst_inst = m_inv.GetItem(dst_slot_id); + EQ::ItemInstance* src_inst = m_inv.GetItem(src_slot_id); + EQ::ItemInstance* dst_inst = m_inv.GetItem(dst_slot_id); if (src_inst){ LogInventory("Src slot [{}] has item [{}] ([{}]) with [{}] charges in it", src_slot_id, src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_inst->GetCharges()); srcitemid = src_inst->GetItem()->ID; @@ -1631,17 +1631,17 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { dstitemid = dst_inst->GetItem()->ID; } if (Trader && srcitemid>0){ - EQEmu::ItemInstance* srcbag; - EQEmu::ItemInstance* dstbag; + EQ::ItemInstance* srcbag; + EQ::ItemInstance* dstbag; uint32 srcbagid =0; uint32 dstbagid = 0; - if (src_slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN && src_slot_id <= EQEmu::invbag::GENERAL_BAGS_END) { + if (src_slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN && src_slot_id <= EQ::invbag::GENERAL_BAGS_END) { srcbag = m_inv.GetItem(((int)(src_slot_id / 10)) - 3); if (srcbag) srcbagid = srcbag->GetItem()->ID; } - if (dst_slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN && dst_slot_id <= EQEmu::invbag::GENERAL_BAGS_END) { + if (dst_slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN && dst_slot_id <= EQ::invbag::GENERAL_BAGS_END) { dstbag = m_inv.GetItem(((int)(dst_slot_id / 10)) - 3); if (dstbag) dstbagid = dstbag->GetItem()->ID; @@ -1654,7 +1654,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { // Step 2: Validate item in from_slot // After this, we can assume src_inst is a valid ptr - if (!src_inst && (src_slot_id < EQEmu::invslot::WORLD_BEGIN || src_slot_id > EQEmu::invslot::WORLD_END)) { + if (!src_inst && (src_slot_id < EQ::invslot::WORLD_BEGIN || src_slot_id > EQ::invslot::WORLD_END)) { if (dst_inst) { // If there is no source item, but there is a destination item, // move the slots around before deleting the invalid source slot item, @@ -1668,32 +1668,32 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { return false; } //verify shared bank transactions in the database - if (src_inst && src_slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && src_slot_id <= EQEmu::invbag::SHARED_BANK_BAGS_END) { + if (src_inst && src_slot_id >= EQ::invslot::SHARED_BANK_BEGIN && src_slot_id <= EQ::invbag::SHARED_BANK_BAGS_END) { if(!database.VerifyInventory(account_id, src_slot_id, src_inst)) { LogError("Player [{}] on account [{}] was found exploiting the shared bank.\n", GetName(), account_name); DeleteItemInInventory(dst_slot_id,0,true); return(false); } - if (src_slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && src_slot_id <= EQEmu::invslot::SHARED_BANK_END && src_inst->IsClassBag()){ - for (uint8 idx = EQEmu::invbag::SLOT_BEGIN; idx <= EQEmu::invbag::SLOT_END; idx++) { - const EQEmu::ItemInstance* baginst = src_inst->GetItem(idx); - if (baginst && !database.VerifyInventory(account_id, EQEmu::InventoryProfile::CalcSlotId(src_slot_id, idx), baginst)){ - DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(src_slot_id, idx), 0, false); + if (src_slot_id >= EQ::invslot::SHARED_BANK_BEGIN && src_slot_id <= EQ::invslot::SHARED_BANK_END && src_inst->IsClassBag()){ + for (uint8 idx = EQ::invbag::SLOT_BEGIN; idx <= EQ::invbag::SLOT_END; idx++) { + const EQ::ItemInstance* baginst = src_inst->GetItem(idx); + if (baginst && !database.VerifyInventory(account_id, EQ::InventoryProfile::CalcSlotId(src_slot_id, idx), baginst)){ + DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(src_slot_id, idx), 0, false); } } } } - if (dst_inst && dst_slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQEmu::invbag::SHARED_BANK_BAGS_END) { + if (dst_inst && dst_slot_id >= EQ::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQ::invbag::SHARED_BANK_BAGS_END) { if(!database.VerifyInventory(account_id, dst_slot_id, dst_inst)) { LogError("Player [{}] on account [{}] was found exploting the shared bank.\n", GetName(), account_name); DeleteItemInInventory(src_slot_id,0,true); return(false); } - if (dst_slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQEmu::invslot::SHARED_BANK_END && dst_inst->IsClassBag()){ - for (uint8 idx = EQEmu::invbag::SLOT_BEGIN; idx <= EQEmu::invbag::SLOT_END; idx++) { - const EQEmu::ItemInstance* baginst = dst_inst->GetItem(idx); - if (baginst && !database.VerifyInventory(account_id, EQEmu::InventoryProfile::CalcSlotId(dst_slot_id, idx), baginst)){ - DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(dst_slot_id, idx), 0, false); + if (dst_slot_id >= EQ::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQ::invslot::SHARED_BANK_END && dst_inst->IsClassBag()){ + for (uint8 idx = EQ::invbag::SLOT_BEGIN; idx <= EQ::invbag::SLOT_END; idx++) { + const EQ::ItemInstance* baginst = dst_inst->GetItem(idx); + if (baginst && !database.VerifyInventory(account_id, EQ::InventoryProfile::CalcSlotId(dst_slot_id, idx), baginst)){ + DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(dst_slot_id, idx), 0, false); } } } @@ -1702,14 +1702,14 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { // Check for No Drop Hacks Mob* with = trade->With(); - if (((with && with->IsClient() && dst_slot_id >= EQEmu::invslot::TRADE_BEGIN && dst_slot_id <= EQEmu::invslot::TRADE_END) || - (dst_slot_id >= EQEmu::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQEmu::invbag::SHARED_BANK_BAGS_END)) + if (((with && with->IsClient() && dst_slot_id >= EQ::invslot::TRADE_BEGIN && dst_slot_id <= EQ::invslot::TRADE_END) || + (dst_slot_id >= EQ::invslot::SHARED_BANK_BEGIN && dst_slot_id <= EQ::invbag::SHARED_BANK_BAGS_END)) && GetInv().CheckNoDrop(src_slot_id) && RuleI(World, FVNoDropFlag) == 0 || RuleI(Character, MinStatusForNoDropExemptions) < Admin() && RuleI(World, FVNoDropFlag) == 2) { auto ndh_inst = m_inv[src_slot_id]; std::string ndh_item_data; if (ndh_inst == nullptr) { - ndh_item_data.append("[nullptr on EQEmu::ItemInstance*]"); + ndh_item_data.append("[nullptr on EQ::ItemInstance*]"); } else { auto ndh_item = ndh_inst->GetItem(); @@ -1733,9 +1733,9 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { // Step 3: Check for interaction with World Container (tradeskills) if(m_tradeskill_object != nullptr) { - if (src_slot_id >= EQEmu::invslot::WORLD_BEGIN && src_slot_id <= EQEmu::invslot::WORLD_END) { + if (src_slot_id >= EQ::invslot::WORLD_BEGIN && src_slot_id <= EQ::invslot::WORLD_END) { // Picking up item from world container - EQEmu::ItemInstance* inst = m_tradeskill_object->PopItem(EQEmu::InventoryProfile::CalcBagIdx(src_slot_id)); + EQ::ItemInstance* inst = m_tradeskill_object->PopItem(EQ::InventoryProfile::CalcBagIdx(src_slot_id)); if (inst) { PutItemInInventory(dst_slot_id, *inst, false); safe_delete(inst); @@ -1745,10 +1745,10 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { return true; } - else if (dst_slot_id >= EQEmu::invslot::WORLD_BEGIN && dst_slot_id <= EQEmu::invslot::WORLD_END) { + else if (dst_slot_id >= EQ::invslot::WORLD_BEGIN && dst_slot_id <= EQ::invslot::WORLD_END) { // Putting item into world container, which may swap (or pile onto) with existing item - uint8 world_idx = EQEmu::InventoryProfile::CalcBagIdx(dst_slot_id); - EQEmu::ItemInstance* world_inst = m_tradeskill_object->PopItem(world_idx); + uint8 world_idx = EQ::InventoryProfile::CalcBagIdx(dst_slot_id); + EQ::ItemInstance* world_inst = m_tradeskill_object->PopItem(world_idx); // Case 1: No item in container, unidirectional "Put" if (world_inst == nullptr) { @@ -1756,8 +1756,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { m_inv.DeleteItem(src_slot_id); } else { - const EQEmu::ItemData* world_item = world_inst->GetItem(); - const EQEmu::ItemData* src_item = src_inst->GetItem(); + const EQ::ItemData* world_item = world_inst->GetItem(); + const EQ::ItemData* src_item = src_inst->GetItem(); if (world_item && src_item) { // Case 2: Same item on cursor, stacks, transfer of charges needed if ((world_item->ID == src_item->ID) && src_inst->IsStackable()) { @@ -1788,7 +1788,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { else { // Case 3: Swap the item on user with item in world container // World containers don't follow normal rules for swapping - EQEmu::ItemInstance* inv_inst = m_inv.PopItem(src_slot_id); + EQ::ItemInstance* inv_inst = m_inv.PopItem(src_slot_id); m_tradeskill_object->PutItem(world_idx, inv_inst); m_inv.PutItem(src_slot_id, *world_inst); safe_delete(inv_inst); @@ -1797,7 +1797,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } safe_delete(world_inst); - if (src_slot_id == EQEmu::invslot::slotCursor) + if (src_slot_id == EQ::invslot::slotCursor) { if (dstitemid == 0) { @@ -1818,15 +1818,15 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } // Step 4: Check for entity trade - if (dst_slot_id >= EQEmu::invslot::TRADE_BEGIN && dst_slot_id <= EQEmu::invslot::TRADE_END) { - if (src_slot_id != EQEmu::invslot::slotCursor) { + if (dst_slot_id >= EQ::invslot::TRADE_BEGIN && dst_slot_id <= EQ::invslot::TRADE_END) { + if (src_slot_id != EQ::invslot::slotCursor) { Kick("Trade with non-cursor item"); return false; } if (with) { LogInventory("Trade item move from slot [{}] to slot [{}] (trade with [{}])", src_slot_id, dst_slot_id, with->GetName()); // Fill Trade list with items from cursor - if (!m_inv[EQEmu::invslot::slotCursor]) { + if (!m_inv[EQ::invslot::slotCursor]) { Message(Chat::Red, "Error: Cursor item not located on server!"); return false; } @@ -1846,7 +1846,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit SummonItem(src_inst->GetID(), src_inst->GetCharges()); - DeleteItemInInventory(EQEmu::invslot::slotCursor); + DeleteItemInInventory(EQ::invslot::slotCursor); return true; } @@ -1896,7 +1896,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { // Nothing in destination slot: split stack into two if ((int16)move_in->number_in_stack >= src_inst->GetCharges()) { // Move entire stack - EQEmu::InventoryProfile::SwapItemFailState fail_state = EQEmu::InventoryProfile::swapInvalid; + EQ::InventoryProfile::SwapItemFailState fail_state = EQ::InventoryProfile::swapInvalid; if (!m_inv.SwapItem(src_slot_id, dst_slot_id, fail_state)) { return false; } LogInventory("Move entire stack from [{}] to [{}] with stack size [{}]. Dest empty", src_slot_id, dst_slot_id, move_in->number_in_stack); } @@ -1904,7 +1904,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { // Split into two src_inst->SetCharges(src_inst->GetCharges() - move_in->number_in_stack); LogInventory("Split stack of [{}] ([{}]) from slot [{}] to [{}] with stack size [{}]. Src keeps [{}]", src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_slot_id, dst_slot_id, move_in->number_in_stack, src_inst->GetCharges()); - EQEmu::ItemInstance* inst = database.CreateItem(src_inst->GetItem(), move_in->number_in_stack); + EQ::ItemInstance* inst = database.CreateItem(src_inst->GetItem(), move_in->number_in_stack); m_inv.PutItem(dst_slot_id, *inst); safe_delete(inst); } @@ -1912,12 +1912,12 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } else { // Not dealing with charges - just do direct swap - if (src_inst && (dst_slot_id <= EQEmu::invslot::EQUIPMENT_END) && dst_slot_id >= EQEmu::invslot::EQUIPMENT_BEGIN) { + if (src_inst && (dst_slot_id <= EQ::invslot::EQUIPMENT_END) && dst_slot_id >= EQ::invslot::EQUIPMENT_BEGIN) { if (src_inst->GetItem()->Attuneable) { src_inst->SetAttuned(true); } if (src_inst->IsAugmented()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { if (src_inst->GetAugment(i)) { if (src_inst->GetAugment(i)->GetItem()->Attuneable) { src_inst->GetAugment(i)->SetAttuned(true); @@ -1928,12 +1928,12 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { SetMaterial(dst_slot_id,src_inst->GetItem()->ID); } - EQEmu::InventoryProfile::SwapItemFailState fail_state = EQEmu::InventoryProfile::swapInvalid; + EQ::InventoryProfile::SwapItemFailState fail_state = EQ::InventoryProfile::swapInvalid; if (!m_inv.SwapItem(src_slot_id, dst_slot_id, fail_state, GetBaseRace(), GetBaseClass(), GetDeity(), GetLevel())) { const char* fail_message = "The selected slot was invalid."; - if (fail_state == EQEmu::InventoryProfile::swapRaceClass || fail_state == EQEmu::InventoryProfile::swapDeity) + if (fail_state == EQ::InventoryProfile::swapRaceClass || fail_state == EQ::InventoryProfile::swapDeity) fail_message = "Your class, deity and/or race may not equip that item."; - else if (fail_state == EQEmu::InventoryProfile::swapLevel) + else if (fail_state == EQ::InventoryProfile::swapLevel) fail_message = "You are not sufficient level to use this item."; if (fail_message) @@ -1944,7 +1944,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { LogInventory("Moving entire item from slot [{}] to slot [{}]", src_slot_id, dst_slot_id); - if (src_slot_id <= EQEmu::invslot::EQUIPMENT_END) { + if (src_slot_id <= EQ::invslot::EQUIPMENT_END) { if(src_inst) { parse->EventItem(EVENT_UNEQUIP_ITEM, this, src_inst, nullptr, "", src_slot_id); } @@ -1954,7 +1954,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } } - if (dst_slot_id <= EQEmu::invslot::EQUIPMENT_END) { + if (dst_slot_id <= EQ::invslot::EQUIPMENT_END) { if(dst_inst) { parse->EventItem(EVENT_UNEQUIP_ITEM, this, dst_inst, nullptr, "", dst_slot_id); } @@ -1966,12 +1966,12 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { } int matslot = SlotConvert2(dst_slot_id); - if (dst_slot_id <= EQEmu::invslot::EQUIPMENT_END && matslot != EQEmu::textures::armorHead) { // think this is to allow the client to update with /showhelm + if (dst_slot_id <= EQ::invslot::EQUIPMENT_END && matslot != EQ::textures::armorHead) { // think this is to allow the client to update with /showhelm SendWearChange(matslot); } // Step 7: Save change to the database - if (src_slot_id == EQEmu::invslot::slotCursor) { + if (src_slot_id == EQ::invslot::slotCursor) { // If not swapping another item to cursor and stacking items were depleted if (dstitemid == 0 || all_to_stack == true) { @@ -1984,7 +1984,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) { database.SaveInventory(character_id, m_inv.GetItem(src_slot_id), src_slot_id); } - if (dst_slot_id == EQEmu::invslot::slotCursor) { + if (dst_slot_id == EQ::invslot::slotCursor) { auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend(); database.SaveCursor(character_id, s, e); } @@ -2008,12 +2008,12 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) { LogInventory("Inventory desyncronization. (charname: [{}], source: [{}], destination: [{}])", GetName(), move_slots->from_slot, move_slots->to_slot); Message(Chat::Yellow, "Inventory Desyncronization detected: Resending slot data..."); - if (move_slots->from_slot >= EQEmu::invslot::EQUIPMENT_BEGIN && move_slots->from_slot <= EQEmu::invbag::CURSOR_BAG_END) { - int16 resync_slot = (EQEmu::InventoryProfile::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : EQEmu::InventoryProfile::CalcSlotId(move_slots->from_slot); + if (move_slots->from_slot >= EQ::invslot::EQUIPMENT_BEGIN && move_slots->from_slot <= EQ::invbag::CURSOR_BAG_END) { + int16 resync_slot = (EQ::InventoryProfile::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : EQ::InventoryProfile::CalcSlotId(move_slots->from_slot); if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) { // This prevents the client from crashing when closing any 'phantom' bags - const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' - EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1); + const EQ::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' + EQ::ItemInstance* token_inst = database.CreateItem(token_struct, 1); SendItemPacket(resync_slot, token_inst, ItemPacketTrade); @@ -2034,11 +2034,11 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) { else { Message(Chat::Red, "Could not resyncronize source slot %i.", move_slots->from_slot); } } else { - int16 resync_slot = (EQEmu::InventoryProfile::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : EQEmu::InventoryProfile::CalcSlotId(move_slots->from_slot); + int16 resync_slot = (EQ::InventoryProfile::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : EQ::InventoryProfile::CalcSlotId(move_slots->from_slot); if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) { if(m_inv[resync_slot]) { - const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' - EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1); + const EQ::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' + EQ::ItemInstance* token_inst = database.CreateItem(token_struct, 1); SendItemPacket(resync_slot, token_inst, ItemPacketTrade); SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade); @@ -2051,11 +2051,11 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) { else { Message(Chat::Red, "Could not resyncronize source slot %i.", move_slots->from_slot); } } - if (move_slots->to_slot >= EQEmu::invslot::EQUIPMENT_BEGIN && move_slots->to_slot <= EQEmu::invbag::CURSOR_BAG_END) { - int16 resync_slot = (EQEmu::InventoryProfile::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : EQEmu::InventoryProfile::CalcSlotId(move_slots->to_slot); + if (move_slots->to_slot >= EQ::invslot::EQUIPMENT_BEGIN && move_slots->to_slot <= EQ::invbag::CURSOR_BAG_END) { + int16 resync_slot = (EQ::InventoryProfile::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : EQ::InventoryProfile::CalcSlotId(move_slots->to_slot); if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) { - const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' - EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1); + const EQ::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' + EQ::ItemInstance* token_inst = database.CreateItem(token_struct, 1); SendItemPacket(resync_slot, token_inst, ItemPacketTrade); @@ -2076,11 +2076,11 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) { else { Message(Chat::Red, "Could not resyncronize destination slot %i.", move_slots->to_slot); } } else { - int16 resync_slot = (EQEmu::InventoryProfile::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : EQEmu::InventoryProfile::CalcSlotId(move_slots->to_slot); + int16 resync_slot = (EQ::InventoryProfile::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : EQ::InventoryProfile::CalcSlotId(move_slots->to_slot); if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) { if(m_inv[resync_slot]) { - const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' - EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1); + const EQ::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin' + EQ::ItemInstance* token_inst = database.CreateItem(token_struct, 1); SendItemPacket(resync_slot, token_inst, ItemPacketTrade); SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade); @@ -2119,7 +2119,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { move_count = 0; - const EQEmu::ItemInstance* from_inst = m_inv[postaction_call?to_slot_id:from_slot_id]; + const EQ::ItemInstance* from_inst = m_inv[postaction_call?to_slot_id:from_slot_id]; if(from_inst) { qsaudit->items[move_count].from_slot = from_slot_id; @@ -2132,13 +2132,13 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { qsaudit->items[move_count].aug_4 = from_inst->GetAugmentItemID(4); qsaudit->items[move_count++].aug_5 = from_inst->GetAugmentItemID(5); - if (from_inst->IsType(EQEmu::item::ItemClassBag)) { - for (uint8 bag_idx = EQEmu::invbag::SLOT_BEGIN; bag_idx < from_inst->GetItem()->BagSlots; bag_idx++) { - const EQEmu::ItemInstance* from_baginst = from_inst->GetItem(bag_idx); + if (from_inst->IsType(EQ::item::ItemClassBag)) { + for (uint8 bag_idx = EQ::invbag::SLOT_BEGIN; bag_idx < from_inst->GetItem()->BagSlots; bag_idx++) { + const EQ::ItemInstance* from_baginst = from_inst->GetItem(bag_idx); if(from_baginst) { - qsaudit->items[move_count].from_slot = EQEmu::InventoryProfile::CalcSlotId(from_slot_id, bag_idx); - qsaudit->items[move_count].to_slot = EQEmu::InventoryProfile::CalcSlotId(to_slot_id, bag_idx); + qsaudit->items[move_count].from_slot = EQ::InventoryProfile::CalcSlotId(from_slot_id, bag_idx); + qsaudit->items[move_count].to_slot = EQ::InventoryProfile::CalcSlotId(to_slot_id, bag_idx); qsaudit->items[move_count].item_id = from_baginst->GetID(); qsaudit->items[move_count].charges = from_baginst->GetCharges(); qsaudit->items[move_count].aug_1 = from_baginst->GetAugmentItemID(1); @@ -2152,7 +2152,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { } if(to_slot_id != from_slot_id) { - const EQEmu::ItemInstance* to_inst = m_inv[postaction_call?from_slot_id:to_slot_id]; + const EQ::ItemInstance* to_inst = m_inv[postaction_call?from_slot_id:to_slot_id]; if(to_inst) { qsaudit->items[move_count].from_slot = to_slot_id; @@ -2165,13 +2165,13 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { qsaudit->items[move_count].aug_4 = to_inst->GetAugmentItemID(4); qsaudit->items[move_count++].aug_5 = to_inst->GetAugmentItemID(5); - if (to_inst->IsType(EQEmu::item::ItemClassBag)) { - for (uint8 bag_idx = EQEmu::invbag::SLOT_BEGIN; bag_idx < to_inst->GetItem()->BagSlots; bag_idx++) { - const EQEmu::ItemInstance* to_baginst = to_inst->GetItem(bag_idx); + if (to_inst->IsType(EQ::item::ItemClassBag)) { + for (uint8 bag_idx = EQ::invbag::SLOT_BEGIN; bag_idx < to_inst->GetItem()->BagSlots; bag_idx++) { + const EQ::ItemInstance* to_baginst = to_inst->GetItem(bag_idx); if(to_baginst) { - qsaudit->items[move_count].from_slot = EQEmu::InventoryProfile::CalcSlotId(to_slot_id, bag_idx); - qsaudit->items[move_count].to_slot = EQEmu::InventoryProfile::CalcSlotId(from_slot_id, bag_idx); + qsaudit->items[move_count].from_slot = EQ::InventoryProfile::CalcSlotId(to_slot_id, bag_idx); + qsaudit->items[move_count].to_slot = EQ::InventoryProfile::CalcSlotId(from_slot_id, bag_idx); qsaudit->items[move_count].item_id = to_baginst->GetID(); qsaudit->items[move_count].charges = to_baginst->GetCharges(); qsaudit->items[move_count].aug_1 = to_baginst->GetAugmentItemID(1); @@ -2192,15 +2192,15 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) { safe_delete(qspack); } -void Client::DyeArmor(EQEmu::TintProfile* dye){ +void Client::DyeArmor(EQ::TintProfile* dye){ int16 slot=0; - for (int i = EQEmu::textures::textureBegin; i <= EQEmu::textures::LastTintableTexture; i++) { + for (int i = EQ::textures::textureBegin; i <= EQ::textures::LastTintableTexture; i++) { if ((m_pp.item_tint.Slot[i].Color & 0x00FFFFFF) != (dye->Slot[i].Color & 0x00FFFFFF)) { slot = m_inv.HasItem(32557, 1, invWherePersonal); if (slot != INVALID_INDEX){ DeleteItemInInventory(slot,1,true); uint8 slot2=SlotConvert(i); - EQEmu::ItemInstance* inst = this->m_inv.GetItem(slot2); + EQ::ItemInstance* inst = this->m_inv.GetItem(slot2); if(inst){ uint32 armor_color = ((uint32)dye->Slot[i].Red << 16) | ((uint32)dye->Slot[i].Green << 8) | ((uint32)dye->Slot[i].Blue); inst->SetColor(armor_color); @@ -2231,9 +2231,9 @@ void Client::DyeArmor(EQEmu::TintProfile* dye){ #if 0 bool Client::DecreaseByItemType(uint32 type, uint8 amt) { const ItemData* TempItem = 0; - EQEmu::ItemInstance* ins; + EQ::ItemInstance* ins; int x; - for(x=EQEmu::legacy::POSSESSIONS_BEGIN; x <= EQEmu::legacy::POSSESSIONS_END; x++) + for(x=EQ::legacy::POSSESSIONS_BEGIN; x <= EQ::legacy::POSSESSIONS_END; x++) { TempItem = 0; ins = GetInv().GetItem(x); @@ -2255,7 +2255,7 @@ bool Client::DecreaseByItemType(uint32 type, uint8 amt) { return true; } } - for(x=EQEmu::legacy::GENERAL_BAGS_BEGIN; x <= EQEmu::legacy::GENERAL_BAGS_END; x++) + for(x=EQ::legacy::GENERAL_BAGS_BEGIN; x <= EQ::legacy::GENERAL_BAGS_END; x++) { TempItem = 0; ins = GetInv().GetItem(x); @@ -2282,12 +2282,12 @@ bool Client::DecreaseByItemType(uint32 type, uint8 amt) { #endif bool Client::DecreaseByID(uint32 type, uint8 amt) { - const EQEmu::ItemData* TempItem = nullptr; - EQEmu::ItemInstance* ins = nullptr; + const EQ::ItemData* TempItem = nullptr; + EQ::ItemInstance* ins = nullptr; int x; int num = 0; - for (x = EQEmu::invslot::POSSESSIONS_BEGIN; x <= EQEmu::invslot::POSSESSIONS_END; ++x) { + for (x = EQ::invslot::POSSESSIONS_BEGIN; x <= EQ::invslot::POSSESSIONS_END; ++x) { if (num >= amt) break; if (((uint64)1 << x) & GetInv().GetLookup()->PossessionsBitmask == 0) @@ -2301,10 +2301,10 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { num += ins->GetCharges(); } - for (x = EQEmu::invbag::GENERAL_BAGS_BEGIN; x <= EQEmu::invbag::GENERAL_BAGS_END; ++x) { + for (x = EQ::invbag::GENERAL_BAGS_BEGIN; x <= EQ::invbag::GENERAL_BAGS_END; ++x) { if (num >= amt) break; - if ((((uint64)1 << (EQEmu::invslot::GENERAL_BEGIN + ((x - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) == 0) + if ((((uint64)1 << (EQ::invslot::GENERAL_BEGIN + ((x - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) == 0) continue; TempItem = nullptr; @@ -2315,7 +2315,7 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { num += ins->GetCharges(); } - for (x = EQEmu::invbag::CURSOR_BAG_BEGIN; x <= EQEmu::invbag::CURSOR_BAG_END; ++x) { + for (x = EQ::invbag::CURSOR_BAG_BEGIN; x <= EQ::invbag::CURSOR_BAG_END; ++x) { if (num >= amt) break; @@ -2331,7 +2331,7 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { return false; - for (x = EQEmu::invslot::POSSESSIONS_BEGIN; x <= EQEmu::invslot::POSSESSIONS_END; ++x) { + for (x = EQ::invslot::POSSESSIONS_BEGIN; x <= EQ::invslot::POSSESSIONS_END; ++x) { if (amt < 1) break; if (((uint64)1 << x) & GetInv().GetLookup()->PossessionsBitmask == 0) @@ -2354,10 +2354,10 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { } } - for (x = EQEmu::invbag::GENERAL_BAGS_BEGIN; x <= EQEmu::invbag::GENERAL_BAGS_END; ++x) { + for (x = EQ::invbag::GENERAL_BAGS_BEGIN; x <= EQ::invbag::GENERAL_BAGS_END; ++x) { if (amt < 1) break; - if ((((uint64)1 << (EQEmu::invslot::GENERAL_BEGIN + ((x - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) == 0) + if ((((uint64)1 << (EQ::invslot::GENERAL_BEGIN + ((x - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT))) & GetInv().GetLookup()->PossessionsBitmask) == 0) continue; TempItem = nullptr; @@ -2377,7 +2377,7 @@ bool Client::DecreaseByID(uint32 type, uint8 amt) { } } - for (x = EQEmu::invbag::CURSOR_BAG_BEGIN; x <= EQEmu::invbag::CURSOR_BAG_END; ++x) { + for (x = EQ::invbag::CURSOR_BAG_BEGIN; x <= EQ::invbag::CURSOR_BAG_END; ++x) { if (amt < 1) break; @@ -2448,7 +2448,7 @@ static uint32 GetDisenchantedBagID(uint8 bag_slots) } } -static bool CopyBagContents(EQEmu::ItemInstance* new_bag, const EQEmu::ItemInstance* old_bag) +static bool CopyBagContents(EQ::ItemInstance* new_bag, const EQ::ItemInstance* old_bag) { if (!new_bag || !old_bag) { return false; } if (new_bag->GetItem()->BagSlots < old_bag->GetItem()->BagSlots) { return false; } @@ -2473,7 +2473,7 @@ static bool CopyBagContents(EQEmu::ItemInstance* new_bag, const EQEmu::ItemInsta void Client::DisenchantSummonedBags(bool client_update) { - for (auto slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id) { + for (auto slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; // not useable this session - will be disenchanted once player logs in on client that doesn't exclude affected slots @@ -2497,8 +2497,8 @@ void Client::DisenchantSummonedBags(bool client_update) safe_delete(new_inst); } - for (auto slot_id = EQEmu::invslot::BANK_BEGIN; slot_id <= EQEmu::invslot::BANK_END; ++slot_id) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) + for (auto slot_id = EQ::invslot::BANK_BEGIN; slot_id <= EQ::invslot::BANK_END; ++slot_id) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) continue; auto inst = m_inv[slot_id]; @@ -2521,7 +2521,7 @@ void Client::DisenchantSummonedBags(bool client_update) safe_delete(new_inst); } - for (auto slot_id = EQEmu::invslot::SHARED_BANK_BEGIN; slot_id <= EQEmu::invslot::SHARED_BANK_END; ++slot_id) { + for (auto slot_id = EQ::invslot::SHARED_BANK_BEGIN; slot_id <= EQ::invslot::SHARED_BANK_END; ++slot_id) { auto inst = m_inv[slot_id]; if (!inst) { continue; } if (!IsSummonedBagID(inst->GetItem()->ID)) { continue; } @@ -2543,7 +2543,7 @@ void Client::DisenchantSummonedBags(bool client_update) } while (!m_inv.CursorEmpty()) { - auto inst = m_inv[EQEmu::invslot::slotCursor]; + auto inst = m_inv[EQ::invslot::slotCursor]; if (!inst) { break; } if (!IsSummonedBagID(inst->GetItem()->ID)) { break; } if (!inst->GetItem()->IsClassBag()) { break; } @@ -2557,14 +2557,14 @@ void Client::DisenchantSummonedBags(bool client_update) if (!new_inst) { break; } if (CopyBagContents(new_inst, inst)) { - LogInventory("Disenchant Summoned Bags: Replacing [{}] with [{}] in slot [{}]", inst->GetItem()->Name, new_inst->GetItem()->Name, EQEmu::invslot::slotCursor); - std::list local; + LogInventory("Disenchant Summoned Bags: Replacing [{}] with [{}] in slot [{}]", inst->GetItem()->Name, new_inst->GetItem()->Name, EQ::invslot::slotCursor); + std::list local; local.push_front(new_inst); - m_inv.PopItem(EQEmu::invslot::slotCursor); + m_inv.PopItem(EQ::invslot::slotCursor); safe_delete(inst); while (!m_inv.CursorEmpty()) { - auto limbo_inst = m_inv.PopItem(EQEmu::invslot::slotCursor); + auto limbo_inst = m_inv.PopItem(EQ::invslot::slotCursor); if (limbo_inst == nullptr) { continue; } local.push_back(limbo_inst); } @@ -2590,7 +2590,7 @@ void Client::DisenchantSummonedBags(bool client_update) void Client::RemoveNoRent(bool client_update) { - for (auto slot_id = EQEmu::invslot::EQUIPMENT_BEGIN; slot_id <= EQEmu::invslot::EQUIPMENT_END; ++slot_id) { + for (auto slot_id = EQ::invslot::EQUIPMENT_BEGIN; slot_id <= EQ::invslot::EQUIPMENT_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; @@ -2601,7 +2601,7 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id) { + for (auto slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; @@ -2612,8 +2612,8 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQEmu::invbag::CURSOR_BAG_END; ++slot_id) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + for (auto slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::CURSOR_BAG_END; ++slot_id) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) == 0) continue; @@ -2624,8 +2624,8 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invslot::BANK_BEGIN; slot_id <= EQEmu::invslot::BANK_END; ++slot_id) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) + for (auto slot_id = EQ::invslot::BANK_BEGIN; slot_id <= EQ::invslot::BANK_END; ++slot_id) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) continue; auto inst = m_inv[slot_id]; @@ -2635,8 +2635,8 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invbag::BANK_BAGS_BEGIN; slot_id <= EQEmu::invbag::BANK_BAGS_END; ++slot_id) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + for (auto slot_id = EQ::invbag::BANK_BAGS_BEGIN; slot_id <= EQ::invbag::BANK_BAGS_END; ++slot_id) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= GetInv().GetLookup()->InventoryTypeSize.Bank) continue; @@ -2647,7 +2647,7 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invslot::SHARED_BANK_BEGIN; slot_id <= EQEmu::invslot::SHARED_BANK_END; ++slot_id) { + for (auto slot_id = EQ::invslot::SHARED_BANK_BEGIN; slot_id <= EQ::invslot::SHARED_BANK_END; ++slot_id) { auto inst = m_inv[slot_id]; if(inst && !inst->GetItem()->NoRent) { LogInventory("NoRent Timer Lapse: Deleting [{}] from slot [{}]", inst->GetItem()->Name, slot_id); @@ -2655,7 +2655,7 @@ void Client::RemoveNoRent(bool client_update) } } - for (auto slot_id = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN; slot_id <= EQEmu::invbag::SHARED_BANK_BAGS_END; ++slot_id) { + for (auto slot_id = EQ::invbag::SHARED_BANK_BAGS_BEGIN; slot_id <= EQ::invbag::SHARED_BANK_BAGS_END; ++slot_id) { auto inst = m_inv[slot_id]; if(inst && !inst->GetItem()->NoRent) { LogInventory("NoRent Timer Lapse: Deleting [{}] from slot [{}]", inst->GetItem()->Name, slot_id); @@ -2664,10 +2664,10 @@ void Client::RemoveNoRent(bool client_update) } if (!m_inv.CursorEmpty()) { - std::list local; + std::list local; while (!m_inv.CursorEmpty()) { - auto inst = m_inv.PopItem(EQEmu::invslot::slotCursor); + auto inst = m_inv.PopItem(EQ::invslot::slotCursor); if (inst == nullptr) { continue; } local.push_back(inst); } @@ -2693,7 +2693,7 @@ void Client::RemoveNoRent(bool client_update) // Two new methods to alleviate perpetual login desyncs void Client::RemoveDuplicateLore(bool client_update) { - for (auto slot_id = EQEmu::invslot::EQUIPMENT_BEGIN; slot_id <= EQEmu::invslot::EQUIPMENT_END; ++slot_id) { + for (auto slot_id = EQ::invslot::EQUIPMENT_BEGIN; slot_id <= EQ::invslot::EQUIPMENT_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; @@ -2709,7 +2709,7 @@ void Client::RemoveDuplicateLore(bool client_update) safe_delete(inst); } - for (auto slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id) { + for (auto slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) { if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; @@ -2725,8 +2725,8 @@ void Client::RemoveDuplicateLore(bool client_update) safe_delete(inst); } - for (auto slot_id = EQEmu::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQEmu::invbag::CURSOR_BAG_END; ++slot_id) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + for (auto slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::CURSOR_BAG_END; ++slot_id) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) == 0) continue; @@ -2742,8 +2742,8 @@ void Client::RemoveDuplicateLore(bool client_update) safe_delete(inst); } - for (auto slot_id = EQEmu::invslot::BANK_BEGIN; slot_id <= EQEmu::invslot::BANK_END; ++slot_id) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) + for (auto slot_id = EQ::invslot::BANK_BEGIN; slot_id <= EQ::invslot::BANK_END; ++slot_id) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) continue; auto inst = m_inv.PopItem(slot_id); @@ -2758,8 +2758,8 @@ void Client::RemoveDuplicateLore(bool client_update) safe_delete(inst); } - for (auto slot_id = EQEmu::invbag::BANK_BAGS_BEGIN; slot_id <= EQEmu::invbag::BANK_BAGS_END; ++slot_id) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + for (auto slot_id = EQ::invbag::BANK_BAGS_BEGIN; slot_id <= EQ::invbag::BANK_BAGS_END; ++slot_id) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= GetInv().GetLookup()->InventoryTypeSize.Bank) continue; @@ -2778,11 +2778,11 @@ void Client::RemoveDuplicateLore(bool client_update) // Shared Bank and Shared Bank Containers are not checked due to their allowing duplicate lore items if (!m_inv.CursorEmpty()) { - std::list local_1; - std::list local_2; + std::list local_1; + std::list local_2; while (!m_inv.CursorEmpty()) { - auto inst = m_inv.PopItem(EQEmu::invslot::slotCursor); + auto inst = m_inv.PopItem(EQ::invslot::slotCursor); if (inst == nullptr) { continue; } local_1.push_back(inst); } @@ -2823,10 +2823,10 @@ void Client::RemoveDuplicateLore(bool client_update) void Client::MoveSlotNotAllowed(bool client_update) { - for (auto slot_id = EQEmu::invslot::EQUIPMENT_BEGIN; slot_id <= EQEmu::invslot::EQUIPMENT_END; ++slot_id) { + for (auto slot_id = EQ::invslot::EQUIPMENT_BEGIN; slot_id <= EQ::invslot::EQUIPMENT_END; ++slot_id) { if(m_inv[slot_id] && !m_inv[slot_id]->IsSlotAllowed(slot_id)) { auto inst = m_inv.PopItem(slot_id); - bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false; + bool is_arrow = (inst->GetItem()->ItemType == EQ::item::ItemTypeArrow) ? true : false; int16 free_slot_id = m_inv.FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size, is_arrow); LogInventory("Slot Assignment Error: Moving [{}] from slot [{}] to [{}]", inst->GetItem()->Name, slot_id, free_slot_id); PutItemInInventory(free_slot_id, *inst, client_update); @@ -2836,13 +2836,13 @@ void Client::MoveSlotNotAllowed(bool client_update) } // added this check to move any client-based excluded slots - //for (auto slot_id = EQEmu::invslot::POSSESSIONS_BEGIN; slot_id <= EQEmu::invslot::POSSESSIONS_END; ++slot_id) { + //for (auto slot_id = EQ::invslot::POSSESSIONS_BEGIN; slot_id <= EQ::invslot::POSSESSIONS_END; ++slot_id) { // if (((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask != 0) // continue; // if (m_inv[slot_id]) { // this is currently dangerous for bag-based movements since limbo does not save bag slots // auto inst = m_inv.PopItem(slot_id); - // bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false; + // bool is_arrow = (inst->GetItem()->ItemType == EQ::item::ItemTypeArrow) ? true : false; // int16 free_slot_id = m_inv.FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size, is_arrow); // LogInventory("Slot Assignment Error: Moving [{}] from slot [{}] to [{}]", inst->GetItem()->Name, slot_id, free_slot_id); // PutItemInInventory(free_slot_id, *inst, client_update); @@ -2860,13 +2860,13 @@ uint32 Client::GetEquippedItemFromTextureSlot(uint8 material_slot) const { int16 inventory_slot; - const EQEmu::ItemInstance *item; + const EQ::ItemInstance *item; - if (material_slot > EQEmu::textures::LastTexture) { + if (material_slot > EQ::textures::LastTexture) { return 0; } - inventory_slot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + inventory_slot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if (inventory_slot == INVALID_INDEX) { return 0; } @@ -2897,10 +2897,10 @@ int32 Client::GetEquipmentMaterial(uint8 material_slot) uint32 Client::GetEquipmentColor(uint8 material_slot) const { - if (material_slot > EQEmu::textures::LastTexture) + if (material_slot > EQ::textures::LastTexture) return 0; - const EQEmu::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); + const EQ::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); if(item != nullptr) return ((m_pp.item_tint.Slot[material_slot].UseTint) ? m_pp.item_tint.Slot[material_slot].Color : item->Color); @@ -2908,33 +2908,33 @@ uint32 Client::GetEquipmentColor(uint8 material_slot) const } // Send an item packet (including all subitems of the item) -void Client::SendItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type) +void Client::SendItemPacket(int16 slot_id, const EQ::ItemInstance* inst, ItemPacketType packet_type) { if (!inst) return; if (packet_type != ItemPacketMerchant) { - if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) { + if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) { if ((((uint64)1 << slot_id) & GetInv().GetLookup()->PossessionsBitmask) == 0) { LogError("Item not sent to merchant : slot [{}]", slot_id); return; } } - else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) { - auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT); + else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) { + auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT); if ((((uint64)1 << temp_slot) & GetInv().GetLookup()->PossessionsBitmask) == 0) { LogError("Item not sent to merchant2 : slot [{}]", slot_id); return; } } - else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) { - if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) { + else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) { + if ((slot_id - EQ::invslot::BANK_BEGIN) >= GetInv().GetLookup()->InventoryTypeSize.Bank) { LogError("Item not sent to merchant3 : slot [{}]", slot_id); return; } } - else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) { - auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT; + else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) { + auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT; if (temp_slot >= GetInv().GetLookup()->InventoryTypeSize.Bank) { LogError("Item not sent to merchant4 : slot [{}]", slot_id); return; @@ -2962,7 +2962,7 @@ void Client::SendItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, Item FastQueuePacket(&outapp); } -EQApplicationPacket* Client::ReturnItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type) +EQApplicationPacket* Client::ReturnItemPacket(int16 slot_id, const EQ::ItemInstance* inst, ItemPacketType packet_type) { if (!inst) return nullptr; @@ -2992,13 +2992,13 @@ static int16 BandolierSlotToWeaponSlot(int BandolierSlot) switch (BandolierSlot) { case bandolierPrimary: - return EQEmu::invslot::slotPrimary; + return EQ::invslot::slotPrimary; case bandolierSecondary: - return EQEmu::invslot::slotSecondary; + return EQ::invslot::slotSecondary; case bandolierRange: - return EQEmu::invslot::slotRange; + return EQ::invslot::slotRange; default: - return EQEmu::invslot::slotAmmo; + return EQ::invslot::slotAmmo; } } @@ -3012,8 +3012,8 @@ void Client::CreateBandolier(const EQApplicationPacket *app) LogInventory("Char: [{}] Creating Bandolier Set [{}], Set Name: [{}]", GetName(), bs->Number, bs->Name); strcpy(m_pp.bandoliers[bs->Number].Name, bs->Name); - const EQEmu::ItemInstance* InvItem = nullptr; - const EQEmu::ItemData *BaseItem = nullptr; + const EQ::ItemInstance* InvItem = nullptr; + const EQ::ItemData *BaseItem = nullptr; int16 WeaponSlot = 0; database.DeleteCharacterBandolier(this->CharacterID(), bs->Number); @@ -3057,7 +3057,7 @@ void Client::SetBandolier(const EQApplicationPacket *app) LogInventory("Char: [{}] activating set [{}]", GetName(), bss->Number); int16 slot = 0; int16 WeaponSlot = 0; - EQEmu::ItemInstance *BandolierItems[4]; // Temporary holding area for the weapons we pull out of their inventory + EQ::ItemInstance *BandolierItems[4]; // Temporary holding area for the weapons we pull out of their inventory // First we pull the items for this bandolier set out of their inventory, this makes space to put the // currently equipped items back. @@ -3073,13 +3073,13 @@ void Client::SetBandolier(const EQApplicationPacket *app) // removed 'invWhereCursor' argument from above and implemented slots 30, 331-340 checks here if (slot == INVALID_INDEX) { - if (m_inv.GetItem(EQEmu::invslot::slotCursor)) { - if (m_inv.GetItem(EQEmu::invslot::slotCursor)->GetItem()->ID == m_pp.bandoliers[bss->Number].Items[BandolierSlot].ID && - m_inv.GetItem(EQEmu::invslot::slotCursor)->GetCharges() >= 1) { // '> 0' the same, but this matches Inventory::_HasItem conditional check - slot = EQEmu::invslot::slotCursor; + if (m_inv.GetItem(EQ::invslot::slotCursor)) { + if (m_inv.GetItem(EQ::invslot::slotCursor)->GetItem()->ID == m_pp.bandoliers[bss->Number].Items[BandolierSlot].ID && + m_inv.GetItem(EQ::invslot::slotCursor)->GetCharges() >= 1) { // '> 0' the same, but this matches Inventory::_HasItem conditional check + slot = EQ::invslot::slotCursor; } - else if (m_inv.GetItem(EQEmu::invslot::slotCursor)->GetItem()->ItemClass == 1) { - for(int16 CursorBagSlot = EQEmu::invbag::CURSOR_BAG_BEGIN; CursorBagSlot <= EQEmu::invbag::CURSOR_BAG_END; CursorBagSlot++) { + else if (m_inv.GetItem(EQ::invslot::slotCursor)->GetItem()->ItemClass == 1) { + for(int16 CursorBagSlot = EQ::invbag::CURSOR_BAG_BEGIN; CursorBagSlot <= EQ::invbag::CURSOR_BAG_END; CursorBagSlot++) { if (m_inv.GetItem(CursorBagSlot)) { if (m_inv.GetItem(CursorBagSlot)->GetItem()->ID == m_pp.bandoliers[bss->Number].Items[BandolierSlot].ID && m_inv.GetItem(CursorBagSlot)->GetCharges() >= 1) { // ditto @@ -3122,7 +3122,7 @@ void Client::SetBandolier(const EQApplicationPacket *app) BandolierItems[BandolierSlot] = 0; if (slot == INVALID_INDEX) { LogInventory("Character does not have required bandolier item for slot [{}]", WeaponSlot); - EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); + EQ::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); if(InvItem) { // If there was an item in that weapon slot, put it in the inventory LogInventory("returning item [{}] in weapon slot [{}] to inventory", @@ -3156,7 +3156,7 @@ void Client::SetBandolier(const EQApplicationPacket *app) // if the player has this item in their inventory, and it is not already where it needs to be if(BandolierItems[BandolierSlot]) { // Pull the item that we are going to replace - EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); + EQ::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); // Put the item specified in the bandolier where it needs to be m_inv.PutItem(WeaponSlot, *BandolierItems[BandolierSlot]); @@ -3176,7 +3176,7 @@ void Client::SetBandolier(const EQApplicationPacket *app) else { // This bandolier set has no item for this slot, so take whatever is in the weapon slot and // put it in the player's inventory. - EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); + EQ::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot); if(InvItem) { LogInventory("Bandolier has no item for slot [{}], returning item [{}] to inventory", WeaponSlot, InvItem->GetItem()->Name); // If there was an item in that weapon slot, put it in the inventory @@ -3194,7 +3194,7 @@ void Client::SetBandolier(const EQApplicationPacket *app) CalcBonuses(); } -bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateClient) { +bool Client::MoveItemToInventory(EQ::ItemInstance *ItemToReturn, bool UpdateClient) { // This is a support function for Client::SetBandolier, however it can be used anywhere it's functionality is required. // @@ -3225,11 +3225,11 @@ bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateC // if(ItemToReturn->IsStackable()) { - for (int16 i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::slotCursor; i++) { // changed slot max to 30 from 29. client will stack into slot 30 (bags too) before moving. + for (int16 i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::slotCursor; i++) { // changed slot max to 30 from 29. client will stack into slot 30 (bags too) before moving. if (((uint64)1 << i) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; - EQEmu::ItemInstance* InvItem = m_inv.GetItem(i); + EQ::ItemInstance* InvItem = m_inv.GetItem(i); if(InvItem && (InvItem->GetItem()->ID == ItemID) && (InvItem->GetCharges() < InvItem->GetItem()->StackSize)) { @@ -3253,12 +3253,12 @@ bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateC // if (InvItem && InvItem->IsClassBag()) { - int16 BaseSlotID = EQEmu::InventoryProfile::CalcSlotId(i, EQEmu::invbag::SLOT_BEGIN); + int16 BaseSlotID = EQ::InventoryProfile::CalcSlotId(i, EQ::invbag::SLOT_BEGIN); uint8 BagSize=InvItem->GetItem()->BagSlots; uint8 BagSlot; - for (BagSlot = EQEmu::invbag::SLOT_BEGIN; BagSlot < BagSize; BagSlot++) { + for (BagSlot = EQ::invbag::SLOT_BEGIN; BagSlot < BagSize; BagSlot++) { InvItem = m_inv.GetItem(BaseSlotID + BagSlot); if (InvItem && (InvItem->GetItem()->ID == ItemID) && (InvItem->GetCharges() < InvItem->GetItem()->StackSize)) { @@ -3286,11 +3286,11 @@ bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateC // We have tried stacking items, now just try and find an empty slot. - for (int16 i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::slotCursor; i++) { // changed slot max to 30 from 29. client will move into slot 30 (bags too) before pushing onto cursor. + for (int16 i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::slotCursor; i++) { // changed slot max to 30 from 29. client will move into slot 30 (bags too) before pushing onto cursor. if (((uint64)1 << i) & GetInv().GetLookup()->PossessionsBitmask == 0) continue; - EQEmu::ItemInstance* InvItem = m_inv.GetItem(i); + EQ::ItemInstance* InvItem = m_inv.GetItem(i); if (!InvItem) { // Found available slot in personal inventory @@ -3305,13 +3305,13 @@ bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateC return true; } - if (InvItem->IsClassBag() && EQEmu::InventoryProfile::CanItemFitInContainer(ItemToReturn->GetItem(), InvItem->GetItem())) { + if (InvItem->IsClassBag() && EQ::InventoryProfile::CanItemFitInContainer(ItemToReturn->GetItem(), InvItem->GetItem())) { - int16 BaseSlotID = EQEmu::InventoryProfile::CalcSlotId(i, EQEmu::invbag::SLOT_BEGIN); + int16 BaseSlotID = EQ::InventoryProfile::CalcSlotId(i, EQ::invbag::SLOT_BEGIN); uint8 BagSize=InvItem->GetItem()->BagSlots; - for (uint8 BagSlot = EQEmu::invbag::SLOT_BEGIN; BagSlot < BagSize; BagSlot++) { + for (uint8 BagSlot = EQ::invbag::SLOT_BEGIN; BagSlot < BagSize; BagSlot++) { InvItem = m_inv.GetItem(BaseSlotID + BagSlot); @@ -3346,30 +3346,30 @@ bool Client::InterrogateInventory(Client* requester, bool log, bool silent, bool if (!requester) return false; - std::map instmap; + std::map instmap; // build reference map - for (int16 index = EQEmu::invslot::POSSESSIONS_BEGIN; index <= EQEmu::invslot::POSSESSIONS_END; ++index) { + for (int16 index = EQ::invslot::POSSESSIONS_BEGIN; index <= EQ::invslot::POSSESSIONS_END; ++index) { auto inst = m_inv[index]; if (inst == nullptr) { continue; } instmap[index] = inst; } - for (int16 index = EQEmu::invslot::TRIBUTE_BEGIN; index <= EQEmu::invslot::TRIBUTE_END; ++index) { + for (int16 index = EQ::invslot::TRIBUTE_BEGIN; index <= EQ::invslot::TRIBUTE_END; ++index) { auto inst = m_inv[index]; if (inst == nullptr) { continue; } instmap[index] = inst; } - for (int16 index = EQEmu::invslot::BANK_BEGIN; index <= EQEmu::invslot::BANK_END; ++index) { + for (int16 index = EQ::invslot::BANK_BEGIN; index <= EQ::invslot::BANK_END; ++index) { auto inst = m_inv[index]; if (inst == nullptr) { continue; } instmap[index] = inst; } - for (int16 index = EQEmu::invslot::SHARED_BANK_BEGIN; index <= EQEmu::invslot::SHARED_BANK_END; ++index) { + for (int16 index = EQ::invslot::SHARED_BANK_BEGIN; index <= EQ::invslot::SHARED_BANK_END; ++index) { auto inst = m_inv[index]; if (inst == nullptr) { continue; } instmap[index] = inst; } - for (int16 index = EQEmu::invslot::TRADE_BEGIN; index <= EQEmu::invslot::TRADE_END; ++index) { + for (int16 index = EQ::invslot::TRADE_BEGIN; index <= EQ::invslot::TRADE_END; ++index) { auto inst = m_inv[index]; if (inst == nullptr) { continue; } instmap[index] = inst; @@ -3377,10 +3377,10 @@ bool Client::InterrogateInventory(Client* requester, bool log, bool silent, bool auto tsobject = GetTradeskillObject(); if (tsobject != nullptr) { - for (int16 index = EQEmu::invslot::SLOT_BEGIN; index < EQEmu::invtype::WORLD_SIZE; ++index) { + for (int16 index = EQ::invslot::SLOT_BEGIN; index < EQ::invtype::WORLD_SIZE; ++index) { auto inst = tsobject->GetItem(index); if (inst == nullptr) { continue; } - instmap[EQEmu::invslot::WORLD_BEGIN + index] = inst; + instmap[EQ::invslot::WORLD_BEGIN + index] = inst; } } @@ -3436,7 +3436,7 @@ bool Client::InterrogateInventory(Client* requester, bool log, bool silent, bool return true; } -void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, bool log, bool silent, bool &error, int depth) +void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQ::ItemInstance* inst, const EQ::ItemInstance* parent, bool log, bool silent, bool &error, int depth) { if (depth >= 10) { LogDebug("[CLIENT] Client::InterrogateInventory_() - Recursion count has exceeded the maximum allowable (You have a REALLY BIG PROBLEM!!)"); @@ -3449,7 +3449,7 @@ void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 hea } else { if (inst) { - for (int16 sub = EQEmu::invbag::SLOT_BEGIN; (sub <= EQEmu::invbag::SLOT_END) && (!error); ++sub) { // treat any EQEmu::ItemInstance as having the max internal slots available + for (int16 sub = EQ::invbag::SLOT_BEGIN; (sub <= EQ::invbag::SLOT_END) && (!error); ++sub) { // treat any EQ::ItemInstance as having the max internal slots available if (inst->GetItem(sub)) InterrogateInventory_(true, requester, head, sub, inst->GetItem(sub), inst, log, silent, error, depth + 1); } @@ -3479,7 +3479,7 @@ void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 hea } if (inst) { - for (int16 sub = EQEmu::invbag::SLOT_BEGIN; (sub <= EQEmu::invbag::SLOT_END); ++sub) { + for (int16 sub = EQ::invbag::SLOT_BEGIN; (sub <= EQ::invbag::SLOT_END); ++sub) { if (inst->GetItem(sub)) InterrogateInventory_(false, requester, head, sub, inst->GetItem(sub), inst, log, silent, error, depth + 1); } @@ -3489,14 +3489,14 @@ void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 hea return; } -bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, int depth) +bool Client::InterrogateInventory_error(int16 head, int16 index, const EQ::ItemInstance* inst, const EQ::ItemInstance* parent, int depth) { // very basic error checking - can be elaborated upon if more in-depth testing is needed... if ( - (head >= EQEmu::invslot::EQUIPMENT_BEGIN && head <= EQEmu::invslot::EQUIPMENT_END) || - (head >= EQEmu::invslot::TRIBUTE_BEGIN && head <= EQEmu::invslot::TRIBUTE_END) || - (head >= EQEmu::invslot::WORLD_BEGIN && head <= EQEmu::invslot::WORLD_END) || + (head >= EQ::invslot::EQUIPMENT_BEGIN && head <= EQ::invslot::EQUIPMENT_END) || + (head >= EQ::invslot::TRIBUTE_BEGIN && head <= EQ::invslot::TRIBUTE_END) || + (head >= EQ::invslot::WORLD_BEGIN && head <= EQ::invslot::WORLD_END) || (head >= 8000 && head <= 8101)) { switch (depth) { @@ -3507,9 +3507,9 @@ bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::It case 1: // requirement: parent is common and inst is augment if ((!parent) || (!inst)) return true; - if (!parent->IsType(EQEmu::item::ItemClassCommon)) + if (!parent->IsType(EQ::item::ItemClassCommon)) return true; - if (index > EQEmu::invaug::SOCKET_END) + if (index > EQ::invaug::SOCKET_END) return true; break; default: // requirement: none (something bad happened...) @@ -3517,11 +3517,11 @@ bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::It } } else if ( - (head >= EQEmu::invslot::GENERAL_BEGIN && head <= EQEmu::invslot::GENERAL_END) || - (head == EQEmu::invslot::slotCursor) || - (head >= EQEmu::invslot::BANK_BEGIN && head <= EQEmu::invslot::BANK_END) || - (head >= EQEmu::invslot::SHARED_BANK_BEGIN && head <= EQEmu::invslot::SHARED_BANK_END) || - (head >= EQEmu::invslot::TRADE_BEGIN && head <= EQEmu::invslot::TRADE_END)) { + (head >= EQ::invslot::GENERAL_BEGIN && head <= EQ::invslot::GENERAL_END) || + (head == EQ::invslot::slotCursor) || + (head >= EQ::invslot::BANK_BEGIN && head <= EQ::invslot::BANK_END) || + (head >= EQ::invslot::SHARED_BANK_BEGIN && head <= EQ::invslot::SHARED_BANK_END) || + (head >= EQ::invslot::TRADE_BEGIN && head <= EQ::invslot::TRADE_END)) { switch (depth) { case 0: // requirement: inst is extant @@ -3531,28 +3531,28 @@ bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::It case 1: // requirement: parent is common and inst is augment ..or.. parent is container and inst is extant if ((!parent) || (!inst)) return true; - if (parent->IsType(EQEmu::item::ItemClassBag)) + if (parent->IsType(EQ::item::ItemClassBag)) break; if (parent->IsClassBook()) return true; if (parent->IsClassCommon()) { if (!(inst->GetItem()->AugType > 0)) return true; - if (index > EQEmu::invaug::SOCKET_END) + if (index > EQ::invaug::SOCKET_END) return true; } break; case 2: // requirement: parent is common and inst is augment if ((!parent) || (!inst)) return true; - if (parent->IsType(EQEmu::item::ItemClassBag)) + if (parent->IsType(EQ::item::ItemClassBag)) return true; if (parent->IsClassBook()) return true; if (parent->IsClassCommon()) { if (!(inst->GetItem()->AugType > 0)) return true; - if (index > EQEmu::invaug::SOCKET_END) + if (index > EQ::invaug::SOCKET_END) return true; } break; @@ -3567,40 +3567,40 @@ bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::It return false; } -void EQEmu::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, std::string value) { - EQEmu::ItemInstance *inst = GetItem(slot_id); +void EQ::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, std::string value) { + EQ::ItemInstance *inst = GetItem(slot_id); if(inst) { inst->SetCustomData(identifier, value); database.SaveInventory(character_id, inst, slot_id); } } -void EQEmu::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, int value) { - EQEmu::ItemInstance *inst = GetItem(slot_id); +void EQ::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, int value) { + EQ::ItemInstance *inst = GetItem(slot_id); if(inst) { inst->SetCustomData(identifier, value); database.SaveInventory(character_id, inst, slot_id); } } -void EQEmu::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, float value) { - EQEmu::ItemInstance *inst = GetItem(slot_id); +void EQ::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, float value) { + EQ::ItemInstance *inst = GetItem(slot_id); if(inst) { inst->SetCustomData(identifier, value); database.SaveInventory(character_id, inst, slot_id); } } -void EQEmu::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, bool value) { - EQEmu::ItemInstance *inst = GetItem(slot_id); +void EQ::InventoryProfile::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, bool value) { + EQ::ItemInstance *inst = GetItem(slot_id); if(inst) { inst->SetCustomData(identifier, value); database.SaveInventory(character_id, inst, slot_id); } } -std::string EQEmu::InventoryProfile::GetCustomItemData(int16 slot_id, std::string identifier) { - EQEmu::ItemInstance *inst = GetItem(slot_id); +std::string EQ::InventoryProfile::GetCustomItemData(int16 slot_id, std::string identifier) { + EQ::ItemInstance *inst = GetItem(slot_id); if(inst) { return inst->GetCustomData(identifier); } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index 0e5ba8d60..dad24a32d 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -61,7 +61,7 @@ void ZoneDatabase::AddLootTableToNPC(NPC* npc,uint32 loottable_id, ItemList* ite uint32 cash = 0; if (!bGlobal) { - if(max_cash > 0 && lts->avgcoin > 0 && EQEmu::ValueWithin(lts->avgcoin, min_cash, max_cash)) { + if(max_cash > 0 && lts->avgcoin > 0 && EQ::ValueWithin(lts->avgcoin, min_cash, max_cash)) { float upper_chance = (float)(lts->avgcoin - min_cash) / (float)(max_cash - min_cash); float avg_cash_roll = (float)zone->random.Real(0.0, 1.0); @@ -128,7 +128,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml int charges = lds->Entries[i].multiplier; for(int j = 0; j < charges; ++j) { if(zone->random.Real(0.0, 100.0) <= lds->Entries[i].chance) { - const EQEmu::ItemData* dbitem = GetItem(lds->Entries[i].item_id); + const EQ::ItemData* dbitem = GetItem(lds->Entries[i].item_id); npc->AddLootDrop(dbitem, itemlist, lds->Entries[i].item_charges, lds->Entries[i].minlevel, lds->Entries[i].maxlevel, lds->Entries[i].equip_item > 0 ? true : false, false); } @@ -149,7 +149,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml float roll_t_min = 0.0f; bool active_item_list = false; for(uint32 i = 0; i < lds->NumEntries; ++i) { - const EQEmu::ItemData* db_item = GetItem(lds->Entries[i].item_id); + const EQ::ItemData* db_item = GetItem(lds->Entries[i].item_id); if(db_item) { roll_t += lds->Entries[i].chance; active_item_list = true; @@ -157,7 +157,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml } roll_t_min = roll_t; - roll_t = EQEmu::ClampLower(roll_t, 100.0f); + roll_t = EQ::ClampLower(roll_t, 100.0f); if(!active_item_list) { return; @@ -166,14 +166,14 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml for(int i = 0; i < mindrop; ++i) { float roll = (float)zone->random.Real(0.0, roll_t_min); for(uint32 j = 0; j < lds->NumEntries; ++j) { - const EQEmu::ItemData* db_item = GetItem(lds->Entries[j].item_id); + const EQ::ItemData* db_item = GetItem(lds->Entries[j].item_id); if(db_item) { if(roll < lds->Entries[j].chance) { npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); int charges = (int)lds->Entries[i].multiplier; - charges = EQEmu::ClampLower(charges, 1); + charges = EQ::ClampLower(charges, 1); for(int k = 1; k < charges; ++k) { float c_roll = (float)zone->random.Real(0.0, 100.0); @@ -196,14 +196,14 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml for(int i = mindrop; i < droplimit; ++i) { float roll = (float)zone->random.Real(0.0, roll_t); for(uint32 j = 0; j < lds->NumEntries; ++j) { - const EQEmu::ItemData* db_item = GetItem(lds->Entries[j].item_id); + const EQ::ItemData* db_item = GetItem(lds->Entries[j].item_id); if(db_item) { if(roll < lds->Entries[j].chance) { npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); int charges = (int)lds->Entries[i].multiplier; - charges = EQEmu::ClampLower(charges, 1); + charges = EQ::ClampLower(charges, 1); for(int k = 1; k < charges; ++k) { float c_roll = (float)zone->random.Real(0.0, 100.0); @@ -230,7 +230,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml } //if itemlist is null, just send wear changes -void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { +void NPC::AddLootDrop(const EQ::ItemData *item2, ItemList* itemlist, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { if(item2 == nullptr) return; @@ -263,12 +263,12 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch item->attuned = 0; item->min_level = minlevel; item->max_level = maxlevel; - item->equip_slot = EQEmu::invslot::SLOT_INVALID; + item->equip_slot = EQ::invslot::SLOT_INVALID; if (equipit) { uint8 eslot = 0xFF; char newid[20]; - const EQEmu::ItemData* compitem = nullptr; + const EQ::ItemData* compitem = nullptr; bool found = false; // track if we found an empty slot we fit into int32 foundslot = -1; // for multi-slot items @@ -282,7 +282,7 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch // it is an improvement. if (!item2->NoPet) { - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; !found && i <= EQEmu::invslot::EQUIPMENT_END; i++) { + for (int i = EQ::invslot::EQUIPMENT_BEGIN; !found && i <= EQ::invslot::EQUIPMENT_END; i++) { uint32 slots = (1 << i); if (item2->Slots & slots) { if(equipment[i]) @@ -323,7 +323,7 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch // @merth: IDFile size has been increased, this needs to change uint16 emat; if(item2->Material <= 0 - || (item2->Slots & ((1 << EQEmu::invslot::slotPrimary) | (1 << EQEmu::invslot::slotSecondary)))) { + || (item2->Slots & ((1 << EQ::invslot::slotPrimary) | (1 << EQ::invslot::slotSecondary)))) { memset(newid, 0, sizeof(newid)); for(int i=0;i<7;i++){ if (!isalpha(item2->IDFile[i])){ @@ -337,11 +337,11 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch emat = item2->Material; } - if (foundslot == EQEmu::invslot::slotPrimary) { + if (foundslot == EQ::invslot::slotPrimary) { if (item2->Proc.Effect != 0) CastToMob()->AddProcToWeapon(item2->Proc.Effect, true); - eslot = EQEmu::textures::weaponPrimary; + eslot = EQ::textures::weaponPrimary; if (item2->Damage > 0) { SendAddPlayerState(PlayerState::PrimaryWeaponEquipped); if (!RuleB(Combat, ClassicNPCBackstab)) @@ -350,37 +350,37 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch if (item2->IsType2HWeapon()) SetTwoHanderEquipped(true); } - else if (foundslot == EQEmu::invslot::slotSecondary + else if (foundslot == EQ::invslot::slotSecondary && (GetOwner() != nullptr || (CanThisClassDualWield() && zone->random.Roll(NPC_DW_CHANCE)) || (item2->Damage==0)) && - (item2->IsType1HWeapon() || item2->ItemType == EQEmu::item::ItemTypeShield || item2->ItemType == EQEmu::item::ItemTypeLight)) + (item2->IsType1HWeapon() || item2->ItemType == EQ::item::ItemTypeShield || item2->ItemType == EQ::item::ItemTypeLight)) { if (item2->Proc.Effect!=0) CastToMob()->AddProcToWeapon(item2->Proc.Effect, true); - eslot = EQEmu::textures::weaponSecondary; + eslot = EQ::textures::weaponSecondary; if (item2->Damage > 0) SendAddPlayerState(PlayerState::SecondaryWeaponEquipped); } - else if (foundslot == EQEmu::invslot::slotHead) { - eslot = EQEmu::textures::armorHead; + else if (foundslot == EQ::invslot::slotHead) { + eslot = EQ::textures::armorHead; } - else if (foundslot == EQEmu::invslot::slotChest) { - eslot = EQEmu::textures::armorChest; + else if (foundslot == EQ::invslot::slotChest) { + eslot = EQ::textures::armorChest; } - else if (foundslot == EQEmu::invslot::slotArms) { - eslot = EQEmu::textures::armorArms; + else if (foundslot == EQ::invslot::slotArms) { + eslot = EQ::textures::armorArms; } - else if (foundslot == EQEmu::invslot::slotWrist1 || foundslot == EQEmu::invslot::slotWrist2) { - eslot = EQEmu::textures::armorWrist; + else if (foundslot == EQ::invslot::slotWrist1 || foundslot == EQ::invslot::slotWrist2) { + eslot = EQ::textures::armorWrist; } - else if (foundslot == EQEmu::invslot::slotHands) { - eslot = EQEmu::textures::armorHands; + else if (foundslot == EQ::invslot::slotHands) { + eslot = EQ::textures::armorHands; } - else if (foundslot == EQEmu::invslot::slotLegs) { - eslot = EQEmu::textures::armorLegs; + else if (foundslot == EQ::invslot::slotLegs) { + eslot = EQ::textures::armorLegs; } - else if (foundslot == EQEmu::invslot::slotFeet) { - eslot = EQEmu::textures::armorFeet; + else if (foundslot == EQ::invslot::slotFeet) { + eslot = EQ::textures::armorFeet; } /* @@ -428,14 +428,14 @@ void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 ch SendAppearancePacket(AT_Light, GetActiveLightType()); } -void NPC::AddItem(const EQEmu::ItemData* item, uint16 charges, bool equipitem) { +void NPC::AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem) { //slot isnt needed, its determined from the item. AddLootDrop(item, &itemlist, charges, 1, 255, equipitem, equipitem); } void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { //slot isnt needed, its determined from the item. - const EQEmu::ItemData * i = database.GetItem(itemid); + const EQ::ItemData * i = database.GetItem(itemid); if(i == nullptr) return; AddLootDrop(i, &itemlist, charges, 1, 255, equipitem, equipitem, aug1, aug2, aug3, aug4, aug5, aug6); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index e161c5e20..5898215f3 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -442,27 +442,27 @@ void Lua_Client::IncreaseLanguageSkill(int skill_id, int value) { int Lua_Client::GetRawSkill(int skill_id) { Lua_Safe_Call_Int(); - return self->GetRawSkill(static_cast(skill_id)); + return self->GetRawSkill(static_cast(skill_id)); } bool Lua_Client::HasSkill(int skill_id) { Lua_Safe_Call_Bool(); - return self->HasSkill(static_cast(skill_id)); + return self->HasSkill(static_cast(skill_id)); } bool Lua_Client::CanHaveSkill(int skill_id) { Lua_Safe_Call_Bool(); - return self->CanHaveSkill(static_cast(skill_id)); + return self->CanHaveSkill(static_cast(skill_id)); } void Lua_Client::SetSkill(int skill_id, int value) { Lua_Safe_Call_Void(); - self->SetSkill(static_cast(skill_id), value); + self->SetSkill(static_cast(skill_id), value); } void Lua_Client::AddSkill(int skill_id, int value) { Lua_Safe_Call_Void(); - self->AddSkill(static_cast(skill_id), value); + self->AddSkill(static_cast(skill_id), value); } void Lua_Client::CheckSpecializeIncrease(int spell_id) { @@ -472,12 +472,12 @@ void Lua_Client::CheckSpecializeIncrease(int spell_id) { void Lua_Client::CheckIncreaseSkill(int skill_id, Lua_Mob target) { Lua_Safe_Call_Void(); - self->CheckIncreaseSkill(static_cast(skill_id), target); + self->CheckIncreaseSkill(static_cast(skill_id), target); } void Lua_Client::CheckIncreaseSkill(int skill_id, Lua_Mob target, int chance_mod) { Lua_Safe_Call_Void(); - self->CheckIncreaseSkill(static_cast(skill_id), target, chance_mod); + self->CheckIncreaseSkill(static_cast(skill_id), target, chance_mod); } void Lua_Client::SetLanguageSkill(int language, int value) { @@ -487,7 +487,7 @@ void Lua_Client::SetLanguageSkill(int language, int value) { int Lua_Client::MaxSkill(int skill_id) { Lua_Safe_Call_Int(); - return self->MaxSkill(static_cast(skill_id)); + return self->MaxSkill(static_cast(skill_id)); } bool Lua_Client::IsMedding() { @@ -1267,13 +1267,13 @@ Lua_Raid Lua_Client::GetRaid() { bool Lua_Client::PutItemInInventory(int slot_id, Lua_ItemInst inst) { Lua_Safe_Call_Bool(); - EQEmu::ItemInstance *rinst = inst; + EQ::ItemInstance *rinst = inst; return self->PutItemInInventory(slot_id, *rinst, true); } bool Lua_Client::PushItemOnCursor(Lua_ItemInst inst) { Lua_Safe_Call_Bool(); - EQEmu::ItemInstance *rinst = inst; + EQ::ItemInstance *rinst = inst; return self->PushItemOnCursor(*rinst, true); } diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 6c3392f15..b7b9ca6bb 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -71,7 +71,7 @@ void load_encounter_with_data(std::string name, std::string info_str) { entity_list.AddEncounter(enc); lua_encounters[name] = enc; lua_encounters_loaded[name] = true; - std::vector info_ptrs; + std::vector info_ptrs; info_ptrs.push_back(&info_str); parse->EventEncounter(EVENT_ENCOUNTER_LOAD, name, "", 0, &info_ptrs); } @@ -133,7 +133,7 @@ void unload_encounter_with_data(std::string name, std::string info_str) { lua_encounters[name]->Depop(); lua_encounters.erase(name); lua_encounters_loaded.erase(name); - std::vector info_ptrs; + std::vector info_ptrs; info_ptrs.push_back(&info_str); parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, "", 0, &info_ptrs); } @@ -2047,95 +2047,95 @@ luabind::scope lua_register_slot() { return luabind::class_("Slot") .enum_("constants") [ - luabind::value("Charm", static_cast(EQEmu::invslot::slotCharm)), - luabind::value("Ear1", static_cast(EQEmu::invslot::slotEar1)), - luabind::value("Head", static_cast(EQEmu::invslot::slotHead)), - luabind::value("Face", static_cast(EQEmu::invslot::slotFace)), - luabind::value("Ear2", static_cast(EQEmu::invslot::slotEar2)), - luabind::value("Neck", static_cast(EQEmu::invslot::slotNeck)), - luabind::value("Shoulders", static_cast(EQEmu::invslot::slotShoulders)), - luabind::value("Arms", static_cast(EQEmu::invslot::slotArms)), - luabind::value("Back", static_cast(EQEmu::invslot::slotBack)), - luabind::value("Wrist1", static_cast(EQEmu::invslot::slotWrist1)), - luabind::value("Wrist2", static_cast(EQEmu::invslot::slotWrist2)), - luabind::value("Range", static_cast(EQEmu::invslot::slotRange)), - luabind::value("Hands", static_cast(EQEmu::invslot::slotHands)), - luabind::value("Primary", static_cast(EQEmu::invslot::slotPrimary)), - luabind::value("Secondary", static_cast(EQEmu::invslot::slotSecondary)), - luabind::value("Finger1", static_cast(EQEmu::invslot::slotFinger1)), - luabind::value("Finger2", static_cast(EQEmu::invslot::slotFinger2)), - luabind::value("Chest", static_cast(EQEmu::invslot::slotChest)), - luabind::value("Legs", static_cast(EQEmu::invslot::slotLegs)), - luabind::value("Feet", static_cast(EQEmu::invslot::slotFeet)), - luabind::value("Waist", static_cast(EQEmu::invslot::slotWaist)), - luabind::value("PowerSource", static_cast(EQEmu::invslot::slotPowerSource)), - luabind::value("Ammo", static_cast(EQEmu::invslot::slotAmmo)), - luabind::value("General1", static_cast(EQEmu::invslot::slotGeneral1)), - luabind::value("General2", static_cast(EQEmu::invslot::slotGeneral2)), - luabind::value("General3", static_cast(EQEmu::invslot::slotGeneral3)), - luabind::value("General4", static_cast(EQEmu::invslot::slotGeneral4)), - luabind::value("General5", static_cast(EQEmu::invslot::slotGeneral5)), - luabind::value("General6", static_cast(EQEmu::invslot::slotGeneral6)), - luabind::value("General7", static_cast(EQEmu::invslot::slotGeneral7)), - luabind::value("General8", static_cast(EQEmu::invslot::slotGeneral8)), - luabind::value("General9", static_cast(EQEmu::invslot::slotGeneral9)), - luabind::value("General10", static_cast(EQEmu::invslot::slotGeneral10)), - luabind::value("Cursor", static_cast(EQEmu::invslot::slotCursor)), - luabind::value("PossessionsBegin", static_cast(EQEmu::invslot::POSSESSIONS_BEGIN)), - luabind::value("PossessionsEnd", static_cast(EQEmu::invslot::POSSESSIONS_END)), - luabind::value("EquipmentBegin", static_cast(EQEmu::invslot::EQUIPMENT_BEGIN)), - luabind::value("EquipmentEnd", static_cast(EQEmu::invslot::EQUIPMENT_END)), - luabind::value("GeneralBegin", static_cast(EQEmu::invslot::GENERAL_BEGIN)), - luabind::value("GeneralEnd", static_cast(EQEmu::invslot::GENERAL_END)), - luabind::value("PossessionsBagsBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN)), - luabind::value("PossessionsBagsEnd", static_cast(EQEmu::invbag::CURSOR_BAG_END)), - luabind::value("GeneralBagsBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN)), - luabind::value("GeneralBagsEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_END)), - luabind::value("General1BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN)), - luabind::value("General1BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 9), - luabind::value("General2BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 10), - luabind::value("General2BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 19), - luabind::value("General3BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 20), - luabind::value("General3BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 29), - luabind::value("General4BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 30), - luabind::value("General4BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 39), - luabind::value("General5BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 40), - luabind::value("General5BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 49), - luabind::value("General6BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 50), - luabind::value("General6BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 59), - luabind::value("General7BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 60), - luabind::value("General7BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 69), - luabind::value("General8BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 70), - luabind::value("General8BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 79), - luabind::value("General9BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 80), - luabind::value("General9BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 89), - luabind::value("General10BagBegin", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 90), - luabind::value("General10BagEnd", static_cast(EQEmu::invbag::GENERAL_BAGS_BEGIN) + 99), - luabind::value("CursorBagBegin", static_cast(EQEmu::invbag::CURSOR_BAG_BEGIN)), - luabind::value("CursorBagEnd", static_cast(EQEmu::invbag::CURSOR_BAG_END)), - luabind::value("Tradeskill", static_cast(EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE)), - luabind::value("Augment", static_cast(EQEmu::invslot::SLOT_AUGMENT_GENERIC_RETURN)), - luabind::value("BankBegin", static_cast(EQEmu::invslot::BANK_BEGIN)), - luabind::value("BankEnd", static_cast(EQEmu::invslot::BANK_END)), - luabind::value("BankBagsBegin", static_cast(EQEmu::invbag::BANK_BAGS_BEGIN)), - luabind::value("BankBagsEnd", static_cast(EQEmu::invbag::BANK_BAGS_END)), - luabind::value("SharedBankBegin", static_cast(EQEmu::invslot::SHARED_BANK_BEGIN)), - luabind::value("SharedBankEnd", static_cast(EQEmu::invslot::SHARED_BANK_END)), - luabind::value("SharedBankBagsBegin", static_cast(EQEmu::invbag::SHARED_BANK_BAGS_BEGIN)), - luabind::value("SharedBankBagsEnd", static_cast(EQEmu::invbag::SHARED_BANK_BAGS_END)), - luabind::value("BagSlotBegin", static_cast(EQEmu::invbag::SLOT_BEGIN)), - luabind::value("BagSlotEnd", static_cast(EQEmu::invbag::SLOT_END)), - luabind::value("AugSocketBegin", static_cast(EQEmu::invaug::SOCKET_BEGIN)), - luabind::value("AugSocketEnd", static_cast(EQEmu::invaug::SOCKET_END)), - luabind::value("Invalid", static_cast(EQEmu::invslot::SLOT_INVALID)), + luabind::value("Charm", static_cast(EQ::invslot::slotCharm)), + luabind::value("Ear1", static_cast(EQ::invslot::slotEar1)), + luabind::value("Head", static_cast(EQ::invslot::slotHead)), + luabind::value("Face", static_cast(EQ::invslot::slotFace)), + luabind::value("Ear2", static_cast(EQ::invslot::slotEar2)), + luabind::value("Neck", static_cast(EQ::invslot::slotNeck)), + luabind::value("Shoulders", static_cast(EQ::invslot::slotShoulders)), + luabind::value("Arms", static_cast(EQ::invslot::slotArms)), + luabind::value("Back", static_cast(EQ::invslot::slotBack)), + luabind::value("Wrist1", static_cast(EQ::invslot::slotWrist1)), + luabind::value("Wrist2", static_cast(EQ::invslot::slotWrist2)), + luabind::value("Range", static_cast(EQ::invslot::slotRange)), + luabind::value("Hands", static_cast(EQ::invslot::slotHands)), + luabind::value("Primary", static_cast(EQ::invslot::slotPrimary)), + luabind::value("Secondary", static_cast(EQ::invslot::slotSecondary)), + luabind::value("Finger1", static_cast(EQ::invslot::slotFinger1)), + luabind::value("Finger2", static_cast(EQ::invslot::slotFinger2)), + luabind::value("Chest", static_cast(EQ::invslot::slotChest)), + luabind::value("Legs", static_cast(EQ::invslot::slotLegs)), + luabind::value("Feet", static_cast(EQ::invslot::slotFeet)), + luabind::value("Waist", static_cast(EQ::invslot::slotWaist)), + luabind::value("PowerSource", static_cast(EQ::invslot::slotPowerSource)), + luabind::value("Ammo", static_cast(EQ::invslot::slotAmmo)), + luabind::value("General1", static_cast(EQ::invslot::slotGeneral1)), + luabind::value("General2", static_cast(EQ::invslot::slotGeneral2)), + luabind::value("General3", static_cast(EQ::invslot::slotGeneral3)), + luabind::value("General4", static_cast(EQ::invslot::slotGeneral4)), + luabind::value("General5", static_cast(EQ::invslot::slotGeneral5)), + luabind::value("General6", static_cast(EQ::invslot::slotGeneral6)), + luabind::value("General7", static_cast(EQ::invslot::slotGeneral7)), + luabind::value("General8", static_cast(EQ::invslot::slotGeneral8)), + luabind::value("General9", static_cast(EQ::invslot::slotGeneral9)), + luabind::value("General10", static_cast(EQ::invslot::slotGeneral10)), + luabind::value("Cursor", static_cast(EQ::invslot::slotCursor)), + luabind::value("PossessionsBegin", static_cast(EQ::invslot::POSSESSIONS_BEGIN)), + luabind::value("PossessionsEnd", static_cast(EQ::invslot::POSSESSIONS_END)), + luabind::value("EquipmentBegin", static_cast(EQ::invslot::EQUIPMENT_BEGIN)), + luabind::value("EquipmentEnd", static_cast(EQ::invslot::EQUIPMENT_END)), + luabind::value("GeneralBegin", static_cast(EQ::invslot::GENERAL_BEGIN)), + luabind::value("GeneralEnd", static_cast(EQ::invslot::GENERAL_END)), + luabind::value("PossessionsBagsBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN)), + luabind::value("PossessionsBagsEnd", static_cast(EQ::invbag::CURSOR_BAG_END)), + luabind::value("GeneralBagsBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN)), + luabind::value("GeneralBagsEnd", static_cast(EQ::invbag::GENERAL_BAGS_END)), + luabind::value("General1BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN)), + luabind::value("General1BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 9), + luabind::value("General2BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 10), + luabind::value("General2BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 19), + luabind::value("General3BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 20), + luabind::value("General3BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 29), + luabind::value("General4BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 30), + luabind::value("General4BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 39), + luabind::value("General5BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 40), + luabind::value("General5BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 49), + luabind::value("General6BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 50), + luabind::value("General6BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 59), + luabind::value("General7BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 60), + luabind::value("General7BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 69), + luabind::value("General8BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 70), + luabind::value("General8BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 79), + luabind::value("General9BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 80), + luabind::value("General9BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 89), + luabind::value("General10BagBegin", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 90), + luabind::value("General10BagEnd", static_cast(EQ::invbag::GENERAL_BAGS_BEGIN) + 99), + luabind::value("CursorBagBegin", static_cast(EQ::invbag::CURSOR_BAG_BEGIN)), + luabind::value("CursorBagEnd", static_cast(EQ::invbag::CURSOR_BAG_END)), + luabind::value("Tradeskill", static_cast(EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE)), + luabind::value("Augment", static_cast(EQ::invslot::SLOT_AUGMENT_GENERIC_RETURN)), + luabind::value("BankBegin", static_cast(EQ::invslot::BANK_BEGIN)), + luabind::value("BankEnd", static_cast(EQ::invslot::BANK_END)), + luabind::value("BankBagsBegin", static_cast(EQ::invbag::BANK_BAGS_BEGIN)), + luabind::value("BankBagsEnd", static_cast(EQ::invbag::BANK_BAGS_END)), + luabind::value("SharedBankBegin", static_cast(EQ::invslot::SHARED_BANK_BEGIN)), + luabind::value("SharedBankEnd", static_cast(EQ::invslot::SHARED_BANK_END)), + luabind::value("SharedBankBagsBegin", static_cast(EQ::invbag::SHARED_BANK_BAGS_BEGIN)), + luabind::value("SharedBankBagsEnd", static_cast(EQ::invbag::SHARED_BANK_BAGS_END)), + luabind::value("BagSlotBegin", static_cast(EQ::invbag::SLOT_BEGIN)), + luabind::value("BagSlotEnd", static_cast(EQ::invbag::SLOT_END)), + luabind::value("AugSocketBegin", static_cast(EQ::invaug::SOCKET_BEGIN)), + luabind::value("AugSocketEnd", static_cast(EQ::invaug::SOCKET_END)), + luabind::value("Invalid", static_cast(EQ::invslot::SLOT_INVALID)), - luabind::value("Shoulder", static_cast(EQEmu::invslot::slotShoulders)), // deprecated - luabind::value("Bracer1", static_cast(EQEmu::invslot::slotWrist1)), // deprecated - luabind::value("Bracer2", static_cast(EQEmu::invslot::slotWrist2)), // deprecated - luabind::value("Ring1", static_cast(EQEmu::invslot::slotFinger1)), // deprecated - luabind::value("Ring2", static_cast(EQEmu::invslot::slotFinger2)), // deprecated - luabind::value("PersonalBegin", static_cast(EQEmu::invslot::GENERAL_BEGIN)), // deprecated - luabind::value("PersonalEnd", static_cast(EQEmu::invslot::GENERAL_END)), // deprecated + luabind::value("Shoulder", static_cast(EQ::invslot::slotShoulders)), // deprecated + luabind::value("Bracer1", static_cast(EQ::invslot::slotWrist1)), // deprecated + luabind::value("Bracer2", static_cast(EQ::invslot::slotWrist2)), // deprecated + luabind::value("Ring1", static_cast(EQ::invslot::slotFinger1)), // deprecated + luabind::value("Ring2", static_cast(EQ::invslot::slotFinger2)), // deprecated + luabind::value("PersonalBegin", static_cast(EQ::invslot::GENERAL_BEGIN)), // deprecated + luabind::value("PersonalEnd", static_cast(EQ::invslot::GENERAL_END)), // deprecated luabind::value("CursorEnd", 0xFFFE) // deprecated (not in use..and never valid vis-a-vis client behavior) ]; } @@ -2144,20 +2144,20 @@ luabind::scope lua_register_material() { return luabind::class_("Material") .enum_("constants") [ - luabind::value("Head", static_cast(EQEmu::textures::armorHead)), - luabind::value("Chest", static_cast(EQEmu::textures::armorChest)), - luabind::value("Arms", static_cast(EQEmu::textures::armorArms)), - luabind::value("Wrist", static_cast(EQEmu::textures::armorWrist)), - luabind::value("Hands", static_cast(EQEmu::textures::armorHands)), - luabind::value("Legs", static_cast(EQEmu::textures::armorLegs)), - luabind::value("Feet", static_cast(EQEmu::textures::armorFeet)), - luabind::value("Primary", static_cast(EQEmu::textures::weaponPrimary)), - luabind::value("Secondary", static_cast(EQEmu::textures::weaponSecondary)), - luabind::value("Count", static_cast(EQEmu::textures::materialCount)), - luabind::value("Invalid", static_cast(EQEmu::textures::materialInvalid)), + luabind::value("Head", static_cast(EQ::textures::armorHead)), + luabind::value("Chest", static_cast(EQ::textures::armorChest)), + luabind::value("Arms", static_cast(EQ::textures::armorArms)), + luabind::value("Wrist", static_cast(EQ::textures::armorWrist)), + luabind::value("Hands", static_cast(EQ::textures::armorHands)), + luabind::value("Legs", static_cast(EQ::textures::armorLegs)), + luabind::value("Feet", static_cast(EQ::textures::armorFeet)), + luabind::value("Primary", static_cast(EQ::textures::weaponPrimary)), + luabind::value("Secondary", static_cast(EQ::textures::weaponSecondary)), + luabind::value("Count", static_cast(EQ::textures::materialCount)), + luabind::value("Invalid", static_cast(EQ::textures::materialInvalid)), - luabind::value("Bracer", static_cast(EQEmu::textures::armorWrist)), // deprecated - luabind::value("Max", static_cast(EQEmu::textures::materialCount)) // deprecated + luabind::value("Bracer", static_cast(EQ::textures::armorWrist)), // deprecated + luabind::value("Max", static_cast(EQ::textures::materialCount)) // deprecated ]; } @@ -2165,14 +2165,14 @@ luabind::scope lua_register_client_version() { return luabind::class_("ClientVersion") .enum_("constants") [ - luabind::value("Unknown", static_cast(EQEmu::versions::ClientVersion::Unknown)), - luabind::value("Titanium", static_cast(EQEmu::versions::ClientVersion::Titanium)), - luabind::value("SoF", static_cast(EQEmu::versions::ClientVersion::SoF)), - luabind::value("SoD", static_cast(EQEmu::versions::ClientVersion::SoD)), - luabind::value("Underfoot", static_cast(EQEmu::versions::ClientVersion::UF)), // deprecated - luabind::value("UF", static_cast(EQEmu::versions::ClientVersion::UF)), - luabind::value("RoF", static_cast(EQEmu::versions::ClientVersion::RoF)), - luabind::value("RoF2", static_cast(EQEmu::versions::ClientVersion::RoF2)) + luabind::value("Unknown", static_cast(EQ::versions::ClientVersion::Unknown)), + luabind::value("Titanium", static_cast(EQ::versions::ClientVersion::Titanium)), + luabind::value("SoF", static_cast(EQ::versions::ClientVersion::SoF)), + luabind::value("SoD", static_cast(EQ::versions::ClientVersion::SoD)), + luabind::value("Underfoot", static_cast(EQ::versions::ClientVersion::UF)), // deprecated + luabind::value("UF", static_cast(EQ::versions::ClientVersion::UF)), + luabind::value("RoF", static_cast(EQ::versions::ClientVersion::RoF)), + luabind::value("RoF2", static_cast(EQ::versions::ClientVersion::RoF2)) ]; } @@ -2245,86 +2245,86 @@ luabind::scope lua_register_skills() { return luabind::class_("Skill") .enum_("constants") [ - luabind::value("1HBlunt", EQEmu::skills::Skill1HBlunt), - luabind::value("1HSlashing", EQEmu::skills::Skill1HSlashing), - luabind::value("2HBlunt", EQEmu::skills::Skill2HBlunt), - luabind::value("2HSlashing", EQEmu::skills::Skill2HSlashing), - luabind::value("Abjuration", EQEmu::skills::SkillAbjuration), - luabind::value("Alteration", EQEmu::skills::SkillAlteration), - luabind::value("ApplyPoison", EQEmu::skills::SkillApplyPoison), - luabind::value("Archery", EQEmu::skills::SkillArchery), - luabind::value("Backstab", EQEmu::skills::SkillBackstab), - luabind::value("BindWound", EQEmu::skills::SkillBindWound), - luabind::value("Bash", EQEmu::skills::SkillBash), - luabind::value("Block", EQEmu::skills::SkillBlock), - luabind::value("BrassInstruments", EQEmu::skills::SkillBrassInstruments), - luabind::value("Channeling", EQEmu::skills::SkillChanneling), - luabind::value("Conjuration", EQEmu::skills::SkillConjuration), - luabind::value("Defense", EQEmu::skills::SkillDefense), - luabind::value("Disarm", EQEmu::skills::SkillDisarm), - luabind::value("DisarmTraps", EQEmu::skills::SkillDisarmTraps), - luabind::value("Divination", EQEmu::skills::SkillDivination), - luabind::value("Dodge", EQEmu::skills::SkillDodge), - luabind::value("DoubleAttack", EQEmu::skills::SkillDoubleAttack), - luabind::value("DragonPunch", EQEmu::skills::SkillDragonPunch), - luabind::value("TailRake", EQEmu::skills::SkillTailRake), - luabind::value("DualWield", EQEmu::skills::SkillDualWield), - luabind::value("EagleStrike", EQEmu::skills::SkillEagleStrike), - luabind::value("Evocation", EQEmu::skills::SkillEvocation), - luabind::value("FeignDeath", EQEmu::skills::SkillFeignDeath), - luabind::value("FlyingKick", EQEmu::skills::SkillFlyingKick), - luabind::value("Forage", EQEmu::skills::SkillForage), - luabind::value("HandtoHand", EQEmu::skills::SkillHandtoHand), - luabind::value("Hide", EQEmu::skills::SkillHide), - luabind::value("Kick", EQEmu::skills::SkillKick), - luabind::value("Meditate", EQEmu::skills::SkillMeditate), - luabind::value("Mend", EQEmu::skills::SkillMend), - luabind::value("Offense", EQEmu::skills::SkillOffense), - luabind::value("Parry", EQEmu::skills::SkillParry), - luabind::value("PickLock", EQEmu::skills::SkillPickLock), - luabind::value("1HPiercing", EQEmu::skills::Skill1HPiercing), - luabind::value("Riposte", EQEmu::skills::SkillRiposte), - luabind::value("RoundKick", EQEmu::skills::SkillRoundKick), - luabind::value("SafeFall", EQEmu::skills::SkillSafeFall), - luabind::value("SenseHeading", EQEmu::skills::SkillSenseHeading), - luabind::value("Singing", EQEmu::skills::SkillSinging), - luabind::value("Sneak", EQEmu::skills::SkillSneak), - luabind::value("SpecializeAbjure", EQEmu::skills::SkillSpecializeAbjure), - luabind::value("SpecializeAlteration", EQEmu::skills::SkillSpecializeAlteration), - luabind::value("SpecializeConjuration", EQEmu::skills::SkillSpecializeConjuration), - luabind::value("SpecializeDivination", EQEmu::skills::SkillSpecializeDivination), - luabind::value("SpecializeEvocation", EQEmu::skills::SkillSpecializeEvocation), - luabind::value("PickPockets", EQEmu::skills::SkillPickPockets), - luabind::value("StringedInstruments", EQEmu::skills::SkillStringedInstruments), - luabind::value("Swimming", EQEmu::skills::SkillSwimming), - luabind::value("Throwing", EQEmu::skills::SkillThrowing), - luabind::value("TigerClaw", EQEmu::skills::SkillTigerClaw), - luabind::value("Tracking", EQEmu::skills::SkillTracking), - luabind::value("WindInstruments", EQEmu::skills::SkillWindInstruments), - luabind::value("Fishing", EQEmu::skills::SkillFishing), - luabind::value("MakePoison", EQEmu::skills::SkillMakePoison), - luabind::value("Tinkering", EQEmu::skills::SkillTinkering), - luabind::value("Research", EQEmu::skills::SkillResearch), - luabind::value("Alchemy", EQEmu::skills::SkillAlchemy), - luabind::value("Baking", EQEmu::skills::SkillBaking), - luabind::value("Tailoring", EQEmu::skills::SkillTailoring), - luabind::value("SenseTraps", EQEmu::skills::SkillSenseTraps), - luabind::value("Blacksmithing", EQEmu::skills::SkillBlacksmithing), - luabind::value("Fletching", EQEmu::skills::SkillFletching), - luabind::value("Brewing", EQEmu::skills::SkillBrewing), - luabind::value("AlcoholTolerance", EQEmu::skills::SkillAlcoholTolerance), - luabind::value("Begging", EQEmu::skills::SkillBegging), - luabind::value("JewelryMaking", EQEmu::skills::SkillJewelryMaking), - luabind::value("Pottery", EQEmu::skills::SkillPottery), - luabind::value("PercussionInstruments", EQEmu::skills::SkillPercussionInstruments), - luabind::value("Intimidation", EQEmu::skills::SkillIntimidation), - luabind::value("Berserking", EQEmu::skills::SkillBerserking), - luabind::value("Taunt", EQEmu::skills::SkillTaunt), - luabind::value("Frenzy", EQEmu::skills::SkillFrenzy), - luabind::value("RemoveTraps", EQEmu::skills::SkillRemoveTraps), - luabind::value("TripleAttack", EQEmu::skills::SkillTripleAttack), - luabind::value("2HPiercing", EQEmu::skills::Skill2HPiercing), - luabind::value("HIGHEST_SKILL", EQEmu::skills::HIGHEST_SKILL) + luabind::value("1HBlunt", EQ::skills::Skill1HBlunt), + luabind::value("1HSlashing", EQ::skills::Skill1HSlashing), + luabind::value("2HBlunt", EQ::skills::Skill2HBlunt), + luabind::value("2HSlashing", EQ::skills::Skill2HSlashing), + luabind::value("Abjuration", EQ::skills::SkillAbjuration), + luabind::value("Alteration", EQ::skills::SkillAlteration), + luabind::value("ApplyPoison", EQ::skills::SkillApplyPoison), + luabind::value("Archery", EQ::skills::SkillArchery), + luabind::value("Backstab", EQ::skills::SkillBackstab), + luabind::value("BindWound", EQ::skills::SkillBindWound), + luabind::value("Bash", EQ::skills::SkillBash), + luabind::value("Block", EQ::skills::SkillBlock), + luabind::value("BrassInstruments", EQ::skills::SkillBrassInstruments), + luabind::value("Channeling", EQ::skills::SkillChanneling), + luabind::value("Conjuration", EQ::skills::SkillConjuration), + luabind::value("Defense", EQ::skills::SkillDefense), + luabind::value("Disarm", EQ::skills::SkillDisarm), + luabind::value("DisarmTraps", EQ::skills::SkillDisarmTraps), + luabind::value("Divination", EQ::skills::SkillDivination), + luabind::value("Dodge", EQ::skills::SkillDodge), + luabind::value("DoubleAttack", EQ::skills::SkillDoubleAttack), + luabind::value("DragonPunch", EQ::skills::SkillDragonPunch), + luabind::value("TailRake", EQ::skills::SkillTailRake), + luabind::value("DualWield", EQ::skills::SkillDualWield), + luabind::value("EagleStrike", EQ::skills::SkillEagleStrike), + luabind::value("Evocation", EQ::skills::SkillEvocation), + luabind::value("FeignDeath", EQ::skills::SkillFeignDeath), + luabind::value("FlyingKick", EQ::skills::SkillFlyingKick), + luabind::value("Forage", EQ::skills::SkillForage), + luabind::value("HandtoHand", EQ::skills::SkillHandtoHand), + luabind::value("Hide", EQ::skills::SkillHide), + luabind::value("Kick", EQ::skills::SkillKick), + luabind::value("Meditate", EQ::skills::SkillMeditate), + luabind::value("Mend", EQ::skills::SkillMend), + luabind::value("Offense", EQ::skills::SkillOffense), + luabind::value("Parry", EQ::skills::SkillParry), + luabind::value("PickLock", EQ::skills::SkillPickLock), + luabind::value("1HPiercing", EQ::skills::Skill1HPiercing), + luabind::value("Riposte", EQ::skills::SkillRiposte), + luabind::value("RoundKick", EQ::skills::SkillRoundKick), + luabind::value("SafeFall", EQ::skills::SkillSafeFall), + luabind::value("SenseHeading", EQ::skills::SkillSenseHeading), + luabind::value("Singing", EQ::skills::SkillSinging), + luabind::value("Sneak", EQ::skills::SkillSneak), + luabind::value("SpecializeAbjure", EQ::skills::SkillSpecializeAbjure), + luabind::value("SpecializeAlteration", EQ::skills::SkillSpecializeAlteration), + luabind::value("SpecializeConjuration", EQ::skills::SkillSpecializeConjuration), + luabind::value("SpecializeDivination", EQ::skills::SkillSpecializeDivination), + luabind::value("SpecializeEvocation", EQ::skills::SkillSpecializeEvocation), + luabind::value("PickPockets", EQ::skills::SkillPickPockets), + luabind::value("StringedInstruments", EQ::skills::SkillStringedInstruments), + luabind::value("Swimming", EQ::skills::SkillSwimming), + luabind::value("Throwing", EQ::skills::SkillThrowing), + luabind::value("TigerClaw", EQ::skills::SkillTigerClaw), + luabind::value("Tracking", EQ::skills::SkillTracking), + luabind::value("WindInstruments", EQ::skills::SkillWindInstruments), + luabind::value("Fishing", EQ::skills::SkillFishing), + luabind::value("MakePoison", EQ::skills::SkillMakePoison), + luabind::value("Tinkering", EQ::skills::SkillTinkering), + luabind::value("Research", EQ::skills::SkillResearch), + luabind::value("Alchemy", EQ::skills::SkillAlchemy), + luabind::value("Baking", EQ::skills::SkillBaking), + luabind::value("Tailoring", EQ::skills::SkillTailoring), + luabind::value("SenseTraps", EQ::skills::SkillSenseTraps), + luabind::value("Blacksmithing", EQ::skills::SkillBlacksmithing), + luabind::value("Fletching", EQ::skills::SkillFletching), + luabind::value("Brewing", EQ::skills::SkillBrewing), + luabind::value("AlcoholTolerance", EQ::skills::SkillAlcoholTolerance), + luabind::value("Begging", EQ::skills::SkillBegging), + luabind::value("JewelryMaking", EQ::skills::SkillJewelryMaking), + luabind::value("Pottery", EQ::skills::SkillPottery), + luabind::value("PercussionInstruments", EQ::skills::SkillPercussionInstruments), + luabind::value("Intimidation", EQ::skills::SkillIntimidation), + luabind::value("Berserking", EQ::skills::SkillBerserking), + luabind::value("Taunt", EQ::skills::SkillTaunt), + luabind::value("Frenzy", EQ::skills::SkillFrenzy), + luabind::value("RemoveTraps", EQ::skills::SkillRemoveTraps), + luabind::value("TripleAttack", EQ::skills::SkillTripleAttack), + luabind::value("2HPiercing", EQ::skills::Skill2HPiercing), + luabind::value("HIGHEST_SKILL", EQ::skills::HIGHEST_SKILL) ]; } diff --git a/zone/lua_inventory.cpp b/zone/lua_inventory.cpp index dd4e1cc6b..1eba6e6f6 100644 --- a/zone/lua_inventory.cpp +++ b/zone/lua_inventory.cpp @@ -20,7 +20,7 @@ Lua_ItemInst Lua_Inventory::GetItem(int slot_id, int bag_slot) { int Lua_Inventory::PutItem(int slot_id, Lua_ItemInst item) { Lua_Safe_Call_Int(); - EQEmu::ItemInstance *inst = item; + EQ::ItemInstance *inst = item; if(!inst) { return 0; } @@ -30,7 +30,7 @@ int Lua_Inventory::PutItem(int slot_id, Lua_ItemInst item) { int Lua_Inventory::PushCursor(Lua_ItemInst item) { Lua_Safe_Call_Int(); - EQEmu::ItemInstance *inst = item; + EQ::ItemInstance *inst = item; if(!inst) { return 0; } @@ -40,7 +40,7 @@ int Lua_Inventory::PushCursor(Lua_ItemInst item) { bool Lua_Inventory::SwapItem(int source_slot, int destination_slot) { Lua_Safe_Call_Bool(); - EQEmu::InventoryProfile::SwapItemFailState fail_state = EQEmu::InventoryProfile::swapInvalid; + EQ::InventoryProfile::SwapItemFailState fail_state = EQ::InventoryProfile::swapInvalid; return self->SwapItem(source_slot, destination_slot, fail_state); } diff --git a/zone/lua_inventory.h b/zone/lua_inventory.h index 272e142de..b64e9c48c 100644 --- a/zone/lua_inventory.h +++ b/zone/lua_inventory.h @@ -7,7 +7,7 @@ class Lua_ItemInst; class Lua_Item; -namespace EQEmu +namespace EQ { class InventoryProfile; } @@ -23,16 +23,16 @@ luabind::scope lua_register_inventory(); // of database calls and can lead to lost items, duplicated items and/or // desync'd inventories, if not handled correctly. -class Lua_Inventory : public Lua_Ptr +class Lua_Inventory : public Lua_Ptr { - typedef EQEmu::InventoryProfile NativeType; + typedef EQ::InventoryProfile NativeType; public: Lua_Inventory() : Lua_Ptr(nullptr) { } - Lua_Inventory(EQEmu::InventoryProfile *d) : Lua_Ptr(d) { } + Lua_Inventory(EQ::InventoryProfile *d) : Lua_Ptr(d) { } virtual ~Lua_Inventory() { } - operator EQEmu::InventoryProfile*() { - return reinterpret_cast(GetLuaPtrData()); + operator EQ::InventoryProfile*() { + return reinterpret_cast(GetLuaPtrData()); } Lua_ItemInst GetItem(int slot_id); diff --git a/zone/lua_item.cpp b/zone/lua_item.cpp index 67e7a1bd4..5ee5f5d69 100644 --- a/zone/lua_item.cpp +++ b/zone/lua_item.cpp @@ -7,7 +7,7 @@ #include "lua_item.h" Lua_Item::Lua_Item(uint32 item_id) { - const EQEmu::ItemData *t = database.GetItem(item_id); + const EQ::ItemData *t = database.GetItem(item_id); SetLuaPtrData(t); } diff --git a/zone/lua_item.h b/zone/lua_item.h index d5a32c41f..6a55c80b3 100644 --- a/zone/lua_item.h +++ b/zone/lua_item.h @@ -4,7 +4,7 @@ #include "lua_ptr.h" -namespace EQEmu +namespace EQ { struct ItemData; } @@ -15,17 +15,17 @@ namespace luabind { luabind::scope lua_register_item(); -class Lua_Item : public Lua_Ptr +class Lua_Item : public Lua_Ptr { - typedef const EQEmu::ItemData NativeType; + typedef const EQ::ItemData NativeType; public: Lua_Item(uint32 item_id); Lua_Item() : Lua_Ptr(nullptr) { } - Lua_Item(const EQEmu::ItemData *d) : Lua_Ptr(d) { } + Lua_Item(const EQ::ItemData *d) : Lua_Ptr(d) { } virtual ~Lua_Item() { } - operator const EQEmu::ItemData*() { - return reinterpret_cast(GetLuaPtrData()); + operator const EQ::ItemData*() { + return reinterpret_cast(GetLuaPtrData()); } int GetMinStatus(); diff --git a/zone/lua_iteminst.cpp b/zone/lua_iteminst.cpp index 7844a64bb..ba3c8a2c6 100644 --- a/zone/lua_iteminst.cpp +++ b/zone/lua_iteminst.cpp @@ -21,7 +21,7 @@ Lua_ItemInst::Lua_ItemInst(int item_id, int charges) { Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) { if(o.cloned_) { cloned_ = true; - d_ = new EQEmu::ItemInstance(*o.d_); + d_ = new EQ::ItemInstance(*o.d_); } else { cloned_ = false; d_ = o.d_; @@ -32,7 +32,7 @@ Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) { Lua_ItemInst::Lua_ItemInst(const Lua_ItemInst& o) { if(o.cloned_) { cloned_ = true; - d_ = new EQEmu::ItemInstance(*o.d_); + d_ = new EQ::ItemInstance(*o.d_); } else { cloned_ = false; d_ = o.d_; @@ -41,7 +41,7 @@ Lua_ItemInst::Lua_ItemInst(const Lua_ItemInst& o) { bool Lua_ItemInst::IsType(int item_class) { Lua_Safe_Call_Bool(); - return self->IsType(static_cast(item_class)); + return self->IsType(static_cast(item_class)); } bool Lua_ItemInst::IsStackable() { diff --git a/zone/lua_iteminst.h b/zone/lua_iteminst.h index 98943d6dc..7614bea5d 100644 --- a/zone/lua_iteminst.h +++ b/zone/lua_iteminst.h @@ -6,7 +6,7 @@ class Lua_Item; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -17,21 +17,21 @@ namespace luabind { luabind::scope lua_register_iteminst(); -class Lua_ItemInst : public Lua_Ptr +class Lua_ItemInst : public Lua_Ptr { - typedef EQEmu::ItemInstance NativeType; + typedef EQ::ItemInstance NativeType; public: Lua_ItemInst(int item_id); Lua_ItemInst(int item_id, int charges); Lua_ItemInst() : Lua_Ptr(nullptr), cloned_(false) { } - Lua_ItemInst(EQEmu::ItemInstance *d) : Lua_Ptr(d), cloned_(false) { } - Lua_ItemInst(EQEmu::ItemInstance *d, bool cloned) : Lua_Ptr(d), cloned_(cloned) { } + Lua_ItemInst(EQ::ItemInstance *d) : Lua_Ptr(d), cloned_(false) { } + Lua_ItemInst(EQ::ItemInstance *d, bool cloned) : Lua_Ptr(d), cloned_(cloned) { } Lua_ItemInst& operator=(const Lua_ItemInst& o); Lua_ItemInst(const Lua_ItemInst& o); - virtual ~Lua_ItemInst() { if(cloned_) { EQEmu::ItemInstance *ptr = GetLuaPtrData(); if(ptr) { delete ptr; } } } + virtual ~Lua_ItemInst() { if(cloned_) { EQ::ItemInstance *ptr = GetLuaPtrData(); if(ptr) { delete ptr; } } } - operator EQEmu::ItemInstance*() { - return reinterpret_cast(GetLuaPtrData()); + operator EQ::ItemInstance*() { + return reinterpret_cast(GetLuaPtrData()); } bool IsType(int item_class); diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 4860ae1e8..69742c655 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -179,22 +179,22 @@ bool Lua_Mob::Attack(Lua_Mob other, int hand, bool from_riposte, bool is_striket void Lua_Mob::Damage(Lua_Mob from, int damage, int spell_id, int attack_skill) { Lua_Safe_Call_Void(); - return self->Damage(from, damage, spell_id, static_cast(attack_skill)); + return self->Damage(from, damage, spell_id, static_cast(attack_skill)); } void Lua_Mob::Damage(Lua_Mob from, int damage, int spell_id, int attack_skill, bool avoidable) { Lua_Safe_Call_Void(); - return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable); + return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable); } void Lua_Mob::Damage(Lua_Mob from, int damage, int spell_id, int attack_skill, bool avoidable, int buffslot) { Lua_Safe_Call_Void(); - return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable, buffslot); + return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable, buffslot); } void Lua_Mob::Damage(Lua_Mob from, int damage, int spell_id, int attack_skill, bool avoidable, int buffslot, bool buff_tic) { Lua_Safe_Call_Void(); - return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable, buffslot, buff_tic); + return self->Damage(from, damage, spell_id, static_cast(attack_skill), avoidable, buffslot, buff_tic); } void Lua_Mob::RangedAttack(Lua_Mob other) { @@ -853,28 +853,28 @@ bool Lua_Mob::CastSpell(int spell_id, int target_id) { bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot) { Lua_Safe_Call_Bool(); - return self->CastSpell(spell_id, target_id, static_cast(slot)); + return self->CastSpell(spell_id, target_id, static_cast(slot)); } bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time) { Lua_Safe_Call_Bool(); - return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time); + return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time); } bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, int mana_cost) { Lua_Safe_Call_Bool(); - return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost); + return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost); } bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, int mana_cost, int item_slot) { Lua_Safe_Call_Bool(); - return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot)); + return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot)); } bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, int mana_cost, int item_slot, int timer, int timer_duration) { Lua_Safe_Call_Bool(); - return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot), + return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot), static_cast(timer), static_cast(timer_duration)); } @@ -883,7 +883,7 @@ bool Lua_Mob::CastSpell(int spell_id, int target_id, int slot, int cast_time, in Lua_Safe_Call_Bool(); int16 res = resist_adjust; - return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot), + return self->CastSpell(spell_id, target_id, static_cast(slot), cast_time, mana_cost, nullptr, static_cast(item_slot), static_cast(timer), static_cast(timer_duration), &res); } @@ -894,27 +894,27 @@ bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target) { bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target, int slot) { Lua_Safe_Call_Bool(); - return self->SpellFinished(spell_id, target, static_cast(slot)); + return self->SpellFinished(spell_id, target, static_cast(slot)); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target, int slot, int mana_used) { Lua_Safe_Call_Bool(); - return self->SpellFinished(spell_id, target, static_cast(slot), mana_used); + return self->SpellFinished(spell_id, target, static_cast(slot), mana_used); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target, int slot, int mana_used, uint32 inventory_slot) { Lua_Safe_Call_Bool(); - return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot); + return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target, int slot, int mana_used, uint32 inventory_slot, int resist_adjust) { Lua_Safe_Call_Bool(); - return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot, resist_adjust); + return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot, resist_adjust); } bool Lua_Mob::SpellFinished(int spell_id, Lua_Mob target, int slot, int mana_used, uint32 inventory_slot, int resist_adjust, bool proc) { Lua_Safe_Call_Bool(); - return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot, resist_adjust, proc); + return self->SpellFinished(spell_id, target, static_cast(slot), mana_used, inventory_slot, resist_adjust, proc); } void Lua_Mob::SendBeginCast(int spell_id, int cast_time) { @@ -1349,22 +1349,22 @@ bool Lua_Mob::CombatRange(Lua_Mob other) { void Lua_Mob::DoSpecialAttackDamage(Lua_Mob other, int skill, int max_damage) { Lua_Safe_Call_Void(); - self->DoSpecialAttackDamage(other, static_cast(skill), max_damage); + self->DoSpecialAttackDamage(other, static_cast(skill), max_damage); } void Lua_Mob::DoSpecialAttackDamage(Lua_Mob other, int skill, int max_damage, int min_damage) { Lua_Safe_Call_Void(); - self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage); + self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage); } void Lua_Mob::DoSpecialAttackDamage(Lua_Mob other, int skill, int max_damage, int min_damage, int hate_override) { Lua_Safe_Call_Void(); - self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage, hate_override); + self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage, hate_override); } void Lua_Mob::DoSpecialAttackDamage(Lua_Mob other, int skill, int max_damage, int min_damage, int hate_override, int reuse_time) { Lua_Safe_Call_Void(); - self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage, hate_override, reuse_time); + self->DoSpecialAttackDamage(other, static_cast(skill), max_damage, min_damage, hate_override, reuse_time); } void Lua_Mob::DoThrowingAttackDmg(Lua_Mob other) { @@ -1400,22 +1400,22 @@ void Lua_Mob::DoThrowingAttackDmg(Lua_Mob other, Lua_ItemInst range_weapon, Lua_ void Lua_Mob::DoMeleeSkillAttackDmg(Lua_Mob other, int weapon_damage, int skill) { Lua_Safe_Call_Void(); - self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill)); + self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill)); } void Lua_Mob::DoMeleeSkillAttackDmg(Lua_Mob other, int weapon_damage, int skill, int chance_mod) { Lua_Safe_Call_Void(); - self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod); + self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod); } void Lua_Mob::DoMeleeSkillAttackDmg(Lua_Mob other, int weapon_damage, int skill, int chance_mod, int focus) { Lua_Safe_Call_Void(); - self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod, focus); + self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod, focus); } void Lua_Mob::DoMeleeSkillAttackDmg(Lua_Mob other, int weapon_damage, int skill, int chance_mod, int focus, bool can_riposte) { Lua_Safe_Call_Void(); - self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod, focus, can_riposte); + self->DoMeleeSkillAttackDmg(other, weapon_damage, static_cast(skill), chance_mod, focus, can_riposte); } void Lua_Mob::DoArcheryAttackDmg(Lua_Mob other) { @@ -1879,17 +1879,17 @@ void Lua_Mob::SetTargetable(bool on) { void Lua_Mob::ModSkillDmgTaken(int skill, int value) { Lua_Safe_Call_Void(); - self->ModSkillDmgTaken(static_cast(skill), value); + self->ModSkillDmgTaken(static_cast(skill), value); } int Lua_Mob::GetModSkillDmgTaken(int skill) { Lua_Safe_Call_Int(); - return self->GetModSkillDmgTaken(static_cast(skill)); + return self->GetModSkillDmgTaken(static_cast(skill)); } int Lua_Mob::GetSkillDmgTaken(int skill) { Lua_Safe_Call_Int(); - return self->GetSkillDmgTaken(static_cast(skill)); + return self->GetSkillDmgTaken(static_cast(skill)); } int Lua_Mob::GetFcDamageAmtIncoming(Lua_Mob caster, uint32 spell_id, bool use_skill, uint16 skill) @@ -1951,7 +1951,7 @@ int Lua_Mob::GetFlurryChance() { int Lua_Mob::GetSkill(int skill) { Lua_Safe_Call_Int(); - return self->GetSkill(static_cast(skill)); + return self->GetSkill(static_cast(skill)); } int Lua_Mob::GetSpecialAbility(int ability) { diff --git a/zone/lua_mod.cpp b/zone/lua_mod.cpp index 8dc77f4f7..382f8adba 100644 --- a/zone/lua_mod.cpp +++ b/zone/lua_mod.cpp @@ -95,7 +95,7 @@ void GetDamageHitInfo(luabind::adl::object &ret, DamageHitInfo &hit) { } if (luabind::type(skill) == LUA_TNUMBER) { - hit.skill = (EQEmu::skills::SkillType)luabind::object_cast(skill); + hit.skill = (EQ::skills::SkillType)luabind::object_cast(skill); } } } diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index 620ee14d1..ebe88f32a 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -246,7 +246,7 @@ LuaParser::~LuaParser() { } int LuaParser::EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -265,7 +265,7 @@ int LuaParser::EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, } int LuaParser::EventGlobalNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -283,7 +283,7 @@ int LuaParser::EventGlobalNPC(QuestEventID evt, NPC* npc, Mob *init, std::string } int LuaParser::_EventNPC(std::string package_name, QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func) { + std::vector *extra_pointers, luabind::adl::object *l_func) { const char *sub_name = LuaEvents[evt]; int start = lua_gettop(L); @@ -342,7 +342,7 @@ int LuaParser::_EventNPC(std::string package_name, QuestEventID evt, NPC* npc, M } int LuaParser::EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -360,7 +360,7 @@ int LuaParser::EventPlayer(QuestEventID evt, Client *client, std::string data, u } int LuaParser::EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -378,7 +378,7 @@ int LuaParser::EventGlobalPlayer(QuestEventID evt, Client *client, std::string d } int LuaParser::_EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func) { + std::vector *extra_pointers, luabind::adl::object *l_func) { const char *sub_name = LuaEvents[evt]; int start = lua_gettop(L); @@ -434,8 +434,8 @@ int LuaParser::_EventPlayer(std::string package_name, QuestEventID evt, Client * return 0; } -int LuaParser::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +int LuaParser::EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -454,8 +454,8 @@ int LuaParser::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance * return _EventItem(package_name, evt, client, item, mob, data, extra_data, extra_pointers); } -int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, - std::string data, uint32 extra_data, std::vector *extra_pointers, luabind::adl::object *l_func) { +int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, + std::string data, uint32 extra_data, std::vector *extra_pointers, luabind::adl::object *l_func) { const char *sub_name = LuaEvents[evt]; int start = lua_gettop(L); @@ -518,7 +518,7 @@ int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *cl } int LuaParser::EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -534,7 +534,7 @@ int LuaParser::EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spe } int LuaParser::_EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func) { + std::vector *extra_pointers, luabind::adl::object *l_func) { const char *sub_name = LuaEvents[evt]; int start = lua_gettop(L); @@ -598,7 +598,7 @@ int LuaParser::_EventSpell(std::string package_name, QuestEventID evt, NPC* npc, return 0; } -int LuaParser::EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, std::vector *extra_pointers) { +int LuaParser::EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -614,7 +614,7 @@ int LuaParser::EventEncounter(QuestEventID evt, std::string encounter_name, std: } int LuaParser::_EventEncounter(std::string package_name, QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { const char *sub_name = LuaEvents[evt]; int start = lua_gettop(L); @@ -718,7 +718,7 @@ bool LuaParser::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) { return HasFunction(subname, package_name); } -bool LuaParser::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) { +bool LuaParser::ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) { if (itm == nullptr) { return false; } @@ -764,7 +764,7 @@ void LuaParser::LoadGlobalPlayerScript(std::string filename) { LoadScript(filename, "global_player"); } -void LuaParser::LoadItemScript(std::string filename, EQEmu::ItemInstance *item) { +void LuaParser::LoadItemScript(std::string filename, EQ::ItemInstance *item) { if (item == nullptr) return; std::string package_name = "item_"; @@ -1118,7 +1118,7 @@ void LuaParser::MapFunctions(lua_State *L) { } int LuaParser::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -1164,7 +1164,7 @@ int LuaParser::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::stri } int LuaParser::DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -1192,8 +1192,8 @@ int LuaParser::DispatchEventPlayer(QuestEventID evt, Client *client, std::string return ret; } -int LuaParser::DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +int LuaParser::DispatchEventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; @@ -1239,7 +1239,7 @@ int LuaParser::DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemIn } int LuaParser::DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { evt = ConvertLuaEvent(evt); if(evt >= _LargestEventID) { return 0; diff --git a/zone/lua_parser.h b/zone/lua_parser.h index eb57faa96..8265a191f 100644 --- a/zone/lua_parser.h +++ b/zone/lua_parser.h @@ -18,7 +18,7 @@ struct lua_State; class Client; class NPC; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -37,33 +37,33 @@ public: ~LuaParser(); virtual int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventGlobalNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); - virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); + virtual int EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual bool HasQuestSub(uint32 npc_id, QuestEventID evt); virtual bool HasGlobalQuestSub(QuestEventID evt); virtual bool PlayerHasQuestSub(QuestEventID evt); virtual bool GlobalPlayerHasQuestSub(QuestEventID evt); virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt); - virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt); + virtual bool ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt); virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt); virtual void LoadNPCScript(std::string filename, int npc_id); virtual void LoadGlobalNPCScript(std::string filename); virtual void LoadPlayerScript(std::string filename); virtual void LoadGlobalPlayerScript(std::string filename); - virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item); + virtual void LoadItemScript(std::string filename, EQ::ItemInstance *item); virtual void LoadSpellScript(std::string filename, uint32 spell_id); virtual void LoadEncounterScript(std::string filename, std::string encounter_name); @@ -74,13 +74,13 @@ public: virtual uint32 GetIdentifier() { return 0xb0712acc; } virtual int DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); - virtual int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); + virtual int DispatchEventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); static LuaParser* Instance() { static LuaParser inst; @@ -106,15 +106,15 @@ private: LuaParser& operator=(const LuaParser&); int _EventNPC(std::string package_name, QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); + std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); int _EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); - int _EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, - uint32 extra_data, std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); + std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); + int _EventItem(std::string package_name, QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, + uint32 extra_data, std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); int _EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); + std::vector *extra_pointers, luabind::adl::object *l_func = nullptr); int _EventEncounter(std::string package_name, QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void LoadScript(std::string filename, std::string package_name); void MapFunctions(lua_State *L); diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index 3ca9edad7..9a1a2c67f 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -28,7 +28,7 @@ //NPC void handle_npc_event_say(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { npc->DoQuestPause(init); Lua_Client l_client(reinterpret_cast(init)); @@ -44,7 +44,7 @@ void handle_npc_event_say(QuestInterface *parse, lua_State* L, NPC* npc, Mob *in } void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Client l_client(reinterpret_cast(init)); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); @@ -58,7 +58,7 @@ void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob * size_t sz = extra_pointers->size(); for(size_t i = 0; i < sz; ++i) { std::string prefix = "item" + std::to_string(i + 1); - EQEmu::ItemInstance *inst = EQEmu::any_cast(extra_pointers->at(i)); + EQ::ItemInstance *inst = EQ::any_cast(extra_pointers->at(i)); Lua_ItemInst l_inst = inst; luabind::adl::object l_inst_o = luabind::adl::object(L, l_inst); @@ -83,7 +83,7 @@ void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob * } void handle_npc_event_hp(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(extra_data == 1) { lua_pushinteger(L, -1); lua_setfield(L, -2, "hp_event"); @@ -100,7 +100,7 @@ void handle_npc_event_hp(QuestInterface *parse, lua_State* L, NPC* npc, Mob *ini } void handle_npc_single_mob(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Mob l_mob(init); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); @@ -108,7 +108,7 @@ void handle_npc_single_mob(QuestInterface *parse, lua_State* L, NPC* npc, Mob *i } void handle_npc_single_client(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Client l_client(reinterpret_cast(init)); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); @@ -116,7 +116,7 @@ void handle_npc_single_client(QuestInterface *parse, lua_State* L, NPC* npc, Mob } void handle_npc_single_npc(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_NPC l_npc(reinterpret_cast(init)); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); l_npc_o.push(L); @@ -124,7 +124,7 @@ void handle_npc_single_npc(QuestInterface *parse, lua_State* L, NPC* npc, Mob *i } void handle_npc_task_accepted(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Client l_client(reinterpret_cast(init)); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); @@ -135,7 +135,7 @@ void handle_npc_task_accepted(QuestInterface *parse, lua_State* L, NPC* npc, Mob } void handle_npc_popup(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Mob l_mob(init); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); @@ -146,7 +146,7 @@ void handle_npc_popup(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, } void handle_npc_waypoint(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Mob l_mob(init); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); @@ -157,7 +157,7 @@ void handle_npc_waypoint(QuestInterface *parse, lua_State* L, NPC* npc, Mob *ini } void handle_npc_hate(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Mob l_mob(init); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); @@ -169,19 +169,19 @@ void handle_npc_hate(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, s void handle_npc_signal(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "signal"); } void handle_npc_timer(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushstring(L, data.c_str()); lua_setfield(L, -2, "timer"); } void handle_npc_death(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Lua_Mob l_mob(init); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); l_mob_o.push(L); @@ -209,7 +209,7 @@ void handle_npc_death(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, } void handle_npc_cast(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int spell_id = std::stoi(data); if(IsValidSpell(spell_id)) { Lua_Spell l_spell(&spells[spell_id]); @@ -225,21 +225,21 @@ void handle_npc_cast(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, s } void handle_npc_area(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(0))); lua_setfield(L, -2, "area_id"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(1))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(1))); lua_setfield(L, -2, "area_type"); } void handle_npc_null(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { } //Player void handle_player_say(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushstring(L, data.c_str()); lua_setfield(L, -2, "message"); @@ -248,7 +248,7 @@ void handle_player_say(QuestInterface *parse, lua_State* L, Client* client, std: } void handle_player_environmental_damage(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers){ + std::vector *extra_pointers){ Seperator sep(data.c_str()); lua_pushinteger(L, std::stoi(sep.arg[0])); lua_setfield(L, -2, "env_damage"); @@ -261,7 +261,7 @@ void handle_player_environmental_damage(QuestInterface *parse, lua_State* L, Cli } void handle_player_death(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Seperator sep(data.c_str()); Mob *o = entity_list.GetMobID(std::stoi(sep.arg[0])); @@ -291,14 +291,14 @@ void handle_player_death(QuestInterface *parse, lua_State* L, Client* client, st } void handle_player_timer(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushstring(L, data.c_str()); lua_setfield(L, -2, "timer"); } void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - const EQEmu::ItemData *item = database.GetItem(extra_data); + std::vector *extra_pointers) { + const EQ::ItemData *item = database.GetItem(extra_data); if(item) { Lua_Item l_item(item); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); @@ -313,51 +313,51 @@ void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* cl } void handle_player_fish_forage_success(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "item"); } void handle_player_click_object(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_Object l_object(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_Object l_object(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_object_o = luabind::adl::object(L, l_object); l_object_o.push(L); lua_setfield(L, -2, "object"); } void handle_player_click_door(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_Door l_door(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_Door l_door(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_door_o = luabind::adl::object(L, l_door); l_door_o.push(L); lua_setfield(L, -2, "door"); } void handle_player_signal(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "signal"); } void handle_player_popup_response(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "popup_id"); } void handle_player_pick_up(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "item"); } void handle_player_cast(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int spell_id = std::stoi(data); if(IsValidSpell(spell_id)) { Lua_Spell l_spell(&spells[spell_id]); @@ -373,48 +373,48 @@ void handle_player_cast(QuestInterface *parse, lua_State* L, Client* client, std } void handle_player_task_fail(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "task_id"); } void handle_player_zone(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "zone_id"); } void handle_player_duel_win(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_Client l_client(EQEmu::any_cast(extra_pointers->at(1))); + std::vector *extra_pointers) { + Lua_Client l_client(EQ::any_cast(extra_pointers->at(1))); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); lua_setfield(L, -2, "other"); } void handle_player_duel_loss(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_Client l_client(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_Client l_client(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_client_o = luabind::adl::object(L, l_client); l_client_o.push(L); lua_setfield(L, -2, "other"); } void handle_player_loot(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "item"); - Lua_Corpse l_corpse(EQEmu::any_cast(extra_pointers->at(1))); + Lua_Corpse l_corpse(EQ::any_cast(extra_pointers->at(1))); luabind::adl::object l_corpse_o = luabind::adl::object(L, l_corpse); l_corpse_o.push(L); lua_setfield(L, -2, "corpse"); } void handle_player_task_stage_complete(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Seperator sep(data.c_str()); lua_pushinteger(L, std::stoi(sep.arg[0])); lua_setfield(L, -2, "task_id"); @@ -424,7 +424,7 @@ void handle_player_task_stage_complete(QuestInterface *parse, lua_State* L, Clie } void handle_player_task_update(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Seperator sep(data.c_str()); lua_pushinteger(L, std::stoi(sep.arg[0])); lua_setfield(L, -2, "count"); @@ -437,7 +437,7 @@ void handle_player_task_update(QuestInterface *parse, lua_State* L, Client* clie } void handle_player_command(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { Seperator sep(data.c_str(), ' ', 10, 100, true); std::string command(sep.arg[0] + 1); lua_pushstring(L, command.c_str()); @@ -456,7 +456,7 @@ void handle_player_command(QuestInterface *parse, lua_State* L, Client* client, } void handle_player_combine(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, extra_data); lua_setfield(L, -2, "recipe_id"); @@ -465,24 +465,24 @@ void handle_player_combine(QuestInterface *parse, lua_State* L, Client* client, } void handle_player_feign(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_NPC l_npc(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_NPC l_npc(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); l_npc_o.push(L); lua_setfield(L, -2, "other"); } void handle_player_area(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(0))); lua_setfield(L, -2, "area_id"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(1))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(1))); lua_setfield(L, -2, "area_type"); } void handle_player_respawn(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushinteger(L, std::stoi(data)); lua_setfield(L, -2, "option"); @@ -491,8 +491,8 @@ void handle_player_respawn(QuestInterface *parse, lua_State* L, Client* client, } void handle_player_packet(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_Packet l_packet(EQEmu::any_cast(extra_pointers->at(0))); + std::vector *extra_pointers) { + Lua_Packet l_packet(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_packet_o = luabind::adl::object(L, l_packet); l_packet_o.push(L); lua_setfield(L, -2, "packet"); @@ -502,10 +502,10 @@ void handle_player_packet(QuestInterface *parse, lua_State* L, Client* client, s } void handle_player_null(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { } -void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, std::vector *extra_pointers) { +void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, std::vector *extra_pointers) { Seperator sep(data.c_str()); lua_pushinteger(L, std::stoi(sep.arg[0])); lua_setfield(L, -2, "skill_id"); @@ -515,7 +515,7 @@ void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client } void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector* extra_pointers) { + std::vector* extra_pointers) { Seperator sep(data.c_str()); lua_pushinteger(L, extra_data); lua_setfield(L, -2, "recipe_id"); @@ -540,7 +540,7 @@ void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* } void handle_player_bot_command(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector* extra_pointers) { + std::vector* extra_pointers) { Seperator sep(data.c_str(), ' ', 10, 100, true); std::string bot_command(sep.arg[0] + 1); lua_pushstring(L, bot_command.c_str()); @@ -559,20 +559,20 @@ void handle_player_bot_command(QuestInterface* parse, lua_State* L, Client* clie } //Item -void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { lua_pushinteger(L, extra_data); lua_setfield(L, -2, "slot_id"); } -void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { lua_pushstring(L, data.c_str()); lua_setfield(L, -2, "timer"); } -void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { Lua_Mob l_mob(mob); luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); @@ -592,8 +592,8 @@ void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQEmu } } -void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { if(mob && mob->IsCorpse()) { Lua_Corpse l_corpse(mob->CastToCorpse()); luabind::adl::object l_corpse_o = luabind::adl::object(L, l_corpse); @@ -607,15 +607,15 @@ void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQEmu } } -void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { lua_pushinteger(L, extra_data); lua_setfield(L, -2, "slot_id"); } -void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); +void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "aug"); @@ -624,9 +624,9 @@ void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQ lua_setfield(L, -2, "slot_id"); } -void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); +void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "item"); @@ -635,9 +635,9 @@ void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* cli lua_setfield(L, -2, "slot_id"); } -void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { - Lua_ItemInst l_item(EQEmu::any_cast(extra_pointers->at(0))); +void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { + Lua_ItemInst l_item(EQ::any_cast(extra_pointers->at(0))); luabind::adl::object l_item_o = luabind::adl::object(L, l_item); l_item_o.push(L); lua_setfield(L, -2, "item"); @@ -645,17 +645,17 @@ void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* cli lua_pushinteger(L, extra_data); lua_setfield(L, -2, "slot_id"); - lua_pushboolean(L, *EQEmu::any_cast(extra_pointers->at(1))); + lua_pushboolean(L, *EQ::any_cast(extra_pointers->at(1))); lua_setfield(L, -2, "destroyed"); } -void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { } //Spell void handle_spell_effect(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(npc) { Lua_Mob l_npc(npc); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); @@ -672,7 +672,7 @@ void handle_spell_effect(QuestInterface *parse, lua_State* L, NPC* npc, Client* lua_setfield(L, -2, "target"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(0))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(0))); lua_setfield(L, -2, "buff_slot"); lua_pushinteger(L, extra_data); @@ -680,7 +680,7 @@ void handle_spell_effect(QuestInterface *parse, lua_State* L, NPC* npc, Client* } void handle_spell_tic(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(npc) { Lua_Mob l_npc(npc); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); @@ -697,13 +697,13 @@ void handle_spell_tic(QuestInterface *parse, lua_State* L, NPC* npc, Client* cli lua_setfield(L, -2, "target"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(0))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(0))); lua_setfield(L, -2, "tics_remaining"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(1))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(1))); lua_setfield(L, -2, "caster_level"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(2))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(2))); lua_setfield(L, -2, "buff_slot"); lua_pushinteger(L, extra_data); @@ -711,7 +711,7 @@ void handle_spell_tic(QuestInterface *parse, lua_State* L, NPC* npc, Client* cli } void handle_spell_fade(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(npc) { Lua_Mob l_npc(npc); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); @@ -731,12 +731,12 @@ void handle_spell_fade(QuestInterface *parse, lua_State* L, NPC* npc, Client* cl lua_pushinteger(L, extra_data); lua_setfield(L, -2, "buff_slot"); - lua_pushinteger(L, *EQEmu::any_cast(extra_pointers->at(0))); + lua_pushinteger(L, *EQ::any_cast(extra_pointers->at(0))); lua_setfield(L, -2, "caster_id"); } void handle_translocate_finish(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(npc) { Lua_Mob l_npc(npc); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc); @@ -755,17 +755,17 @@ void handle_translocate_finish(QuestInterface *parse, lua_State* L, NPC* npc, Cl } void handle_spell_null(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { } void handle_encounter_timer(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { lua_pushstring(L, data.c_str()); lua_setfield(L, -2, "timer"); } void handle_encounter_load(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if (encounter) { Lua_Encounter l_enc(encounter); luabind::adl::object l_enc_o = luabind::adl::object(L, l_enc); @@ -773,23 +773,23 @@ void handle_encounter_load(QuestInterface *parse, lua_State* L, Encounter* encou lua_setfield(L, -2, "encounter"); } if (extra_pointers) { - std::string *str = EQEmu::any_cast(extra_pointers->at(0)); + std::string *str = EQ::any_cast(extra_pointers->at(0)); lua_pushstring(L, str->c_str()); lua_setfield(L, -2, "data"); } } void handle_encounter_unload(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if (extra_pointers) { - std::string *str = EQEmu::any_cast(extra_pointers->at(0)); + std::string *str = EQ::any_cast(extra_pointers->at(0)); lua_pushstring(L, str->c_str()); lua_setfield(L, -2, "data"); } } void handle_encounter_null(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { } diff --git a/zone/lua_parser_events.h b/zone/lua_parser_events.h index 9eeeb11cb..0f826a421 100644 --- a/zone/lua_parser_events.h +++ b/zone/lua_parser_events.h @@ -2,148 +2,148 @@ #define _EQE_LUA_PARSER_EVENTS_H #ifdef LUA_EQEMU -typedef void(*NPCArgumentHandler)(QuestInterface*, lua_State*, NPC*, Mob*, std::string, uint32, std::vector*); -typedef void(*PlayerArgumentHandler)(QuestInterface*, lua_State*, Client*, std::string, uint32, std::vector*); -typedef void(*ItemArgumentHandler)(QuestInterface*, lua_State*, Client*, EQEmu::ItemInstance*, Mob*, std::string, uint32, std::vector*); -typedef void(*SpellArgumentHandler)(QuestInterface*, lua_State*, NPC*, Client*, uint32, uint32, std::vector*); -typedef void(*EncounterArgumentHandler)(QuestInterface*, lua_State*, Encounter* encounter, std::string, uint32, std::vector*); +typedef void(*NPCArgumentHandler)(QuestInterface*, lua_State*, NPC*, Mob*, std::string, uint32, std::vector*); +typedef void(*PlayerArgumentHandler)(QuestInterface*, lua_State*, Client*, std::string, uint32, std::vector*); +typedef void(*ItemArgumentHandler)(QuestInterface*, lua_State*, Client*, EQ::ItemInstance*, Mob*, std::string, uint32, std::vector*); +typedef void(*SpellArgumentHandler)(QuestInterface*, lua_State*, NPC*, Client*, uint32, uint32, std::vector*); +typedef void(*EncounterArgumentHandler)(QuestInterface*, lua_State*, Encounter* encounter, std::string, uint32, std::vector*); //NPC void handle_npc_event_say(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_event_hp(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_single_mob(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_single_client(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_single_npc(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_task_accepted(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_popup(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_waypoint(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_hate(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_signal(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_timer(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_death(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_cast(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_area(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_npc_null(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); //Player void handle_player_say(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_environmental_damage(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_death(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_timer(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_fish_forage_success(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_click_object(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_click_door(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_signal(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_popup_response(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_pick_up(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_cast(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_task_fail(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_zone(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_duel_win(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_duel_loss(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_loot(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_task_stage_complete(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_task_update(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_command(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_combine(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_feign(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_area(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_respawn(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_packet(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_null(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector* extra_pointers); + std::vector* extra_pointers); void handle_player_bot_command(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); //Item -void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); -void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); +void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); +void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQ::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); //Spell void handle_spell_effect(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_spell_tic(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_spell_fade(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_translocate_finish(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_spell_null(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); //Encounter void handle_encounter_timer(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_encounter_load(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_encounter_unload(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); void handle_encounter_null(QuestInterface *parse, lua_State* L, Encounter* encounter, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); #endif #endif diff --git a/zone/main.cpp b/zone/main.cpp index 364df32b9..594f9cf51 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -345,7 +345,7 @@ int main(int argc, char** argv) { database.GetDecayTimes(npcCorpseDecayTimes); LogInfo("Loading profanity list"); - if (!EQEmu::ProfanityManager::LoadProfanityList(&database)) + if (!EQ::ProfanityManager::LoadProfanityList(&database)) LogError("Loading profanity list failed!"); LogInfo("Loading commands"); @@ -373,7 +373,7 @@ int main(int argc, char** argv) { } } - EQEmu::InitializeDynamicLookups(); + EQ::InitializeDynamicLookups(); LogInfo("Initialized dynamic dictionary entries"); } diff --git a/zone/map.cpp b/zone/map.cpp index dbfa3928e..3d35aeabc 100644 --- a/zone/map.cpp +++ b/zone/map.cpp @@ -403,7 +403,7 @@ bool Map::LoadV2(FILE *f) { std::vector buffer; buffer.resize(buffer_size); - uint32 v = EQEmu::InflateData(&data[0], data_size, &buffer[0], buffer_size); + uint32 v = EQ::InflateData(&data[0], data_size, &buffer[0], buffer_size); char *buf = &buffer[0]; uint32 vert_count; diff --git a/zone/merc.cpp b/zone/merc.cpp index 4e635fe72..98d9b24bb 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -50,7 +50,7 @@ Merc::Merc(const NPCType* d, float x, float y, float z, float heading) _baseFR = d->FR; _basePR = d->PR; _baseCorrup = d->Corrup; - _OwnerClientVersion = static_cast(EQEmu::versions::ClientVersion::Titanium); + _OwnerClientVersion = static_cast(EQ::versions::ClientVersion::Titanium); RestRegenHP = 0; RestRegenMana = 0; RestRegenEndurance = 0; @@ -66,15 +66,15 @@ Merc::Merc(const NPCType* d, float x, float y, float z, float heading) memset(equipment, 0, sizeof(equipment)); SetMercID(0); - SetStance(EQEmu::constants::stanceBalanced); + SetStance(EQ::constants::stanceBalanced); rest_timer.Disable(); if (GetClass() == ROGUE) evade_timer.Start(); int r; - for (r = 0; r <= EQEmu::skills::HIGHEST_SKILL; r++) { - skills[r] = database.GetSkillCap(GetClass(), (EQEmu::skills::SkillType)r, GetLevel()); + for (r = 0; r <= EQ::skills::HIGHEST_SKILL; r++) { + skills[r] = database.GetSkillCap(GetClass(), (EQ::skills::SkillType)r, GetLevel()); } size = d->size; @@ -217,12 +217,12 @@ void Merc::CalcItemBonuses(StatBonuses* newbon) { unsigned int i; //should not include 21 (SLOT_AMMO) - for (i = EQEmu::invslot::BONUS_BEGIN; i <= EQEmu::invslot::BONUS_STAT_END; i++) { - if (i == EQEmu::invslot::slotAmmo) + for (i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_STAT_END; i++) { + if (i == EQ::invslot::slotAmmo) continue; if (equipment[i] == 0) continue; - const EQEmu::ItemData * itm = database.GetItem(equipment[i]); + const EQ::ItemData * itm = database.GetItem(equipment[i]); if (itm) AddItemBonuses(itm, newbon); } @@ -240,7 +240,7 @@ void Merc::CalcItemBonuses(StatBonuses* newbon) { SetAttackTimer(); } -void Merc::AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon) { +void Merc::AddItemBonuses(const EQ::ItemData *item, StatBonuses* newbon) { if(GetLevel() < item->ReqLevel) { @@ -453,11 +453,11 @@ void Merc::AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon) { else newbon->DSMitigation += item->DSMitigation; } - if (item->Worn.Effect>0 && (item->Worn.Type == EQEmu::item::ItemEffectWorn)) { // latent effects + if (item->Worn.Effect>0 && (item->Worn.Type == EQ::item::ItemEffectWorn)) { // latent effects ApplySpellsBonuses(item->Worn.Effect, item->Worn.Level, newbon, 0, item->Worn.Type); } - if (item->Focus.Effect>0 && (item->Focus.Type == EQEmu::item::ItemEffectFocus)) { // focus effects + if (item->Focus.Effect>0 && (item->Focus.Type == EQ::item::ItemEffectFocus)) { // focus effects ApplySpellsBonuses(item->Focus.Effect, item->Focus.Level, newbon, 0); } @@ -509,7 +509,7 @@ void Merc::AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon) { } } - if (item->SkillModValue != 0 && item->SkillModType <= EQEmu::skills::HIGHEST_SKILL){ + if (item->SkillModValue != 0 && item->SkillModType <= EQ::skills::HIGHEST_SKILL){ if ((item->SkillModValue > 0 && newbon->skillmod[item->SkillModType] < item->SkillModValue) || (item->SkillModValue < 0 && newbon->skillmod[item->SkillModType] > item->SkillModValue)) { @@ -563,7 +563,7 @@ void Merc::AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon) { } } - if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQEmu::skills::HIGHEST_SKILL) { + if (item->ExtraDmgSkill != 0 && item->ExtraDmgSkill <= EQ::skills::HIGHEST_SKILL) { if((newbon->SkillDamageAmount[item->ExtraDmgSkill] + item->ExtraDmgAmt) > RuleI(Character, ItemExtraDmgCap)) newbon->SkillDamageAmount[item->ExtraDmgSkill] = RuleI(Character, ItemExtraDmgCap); else @@ -928,8 +928,8 @@ int32 Merc::CalcBaseManaRegen() int32 regen = 0; if (IsSitting()) { - if (HasSkill(EQEmu::skills::SkillMeditate)) - regen = (((GetSkill(EQEmu::skills::SkillMeditate) / 10) + (clevel - (clevel / 4))) / 4) + 4; + if (HasSkill(EQ::skills::SkillMeditate)) + regen = (((GetSkill(EQ::skills::SkillMeditate) / 10) + (clevel - (clevel / 4))) / 4) + 4; else regen = 2; } @@ -945,9 +945,9 @@ int32 Merc::CalcManaRegen() if (IsSitting()) { BuffFadeBySitModifier(); - if (HasSkill(EQEmu::skills::SkillMeditate)) { + if (HasSkill(EQ::skills::SkillMeditate)) { this->_medding = true; - regen = ((GetSkill(EQEmu::skills::SkillMeditate) / 10) + mana_regen); + regen = ((GetSkill(EQ::skills::SkillMeditate) / 10) + mana_regen); regen += spellbonuses.ManaRegen + itembonuses.ManaRegen; } else @@ -1015,7 +1015,7 @@ int32 Merc::CalcBaseEndurance() int32 sta_end = 0; int Stats = 0; - if (GetClientVersion() >= static_cast(EQEmu::versions::ClientVersion::SoD) && RuleB(Character, SoDClientUseSoDHPManaEnd)) { + if (GetClientVersion() >= static_cast(EQ::versions::ClientVersion::SoD) && RuleB(Character, SoDClientUseSoDHPManaEnd)) { int HeroicStats = 0; Stats = ((GetSTR() + GetSTA() + GetDEX() + GetAGI()) / 4); @@ -1175,16 +1175,16 @@ void Merc::CalcRestState() { RestRegenEndurance = 6 * (GetMaxEndurance() / zone->newzone_data.FastRegenEndurance); } -bool Merc::HasSkill(EQEmu::skills::SkillType skill_id) const { +bool Merc::HasSkill(EQ::skills::SkillType skill_id) const { return((GetSkill(skill_id) > 0) && CanHaveSkill(skill_id)); } -bool Merc::CanHaveSkill(EQEmu::skills::SkillType skill_id) const { +bool Merc::CanHaveSkill(EQ::skills::SkillType skill_id) const { return(database.GetSkillCap(GetClass(), skill_id, RuleI(Character, MaxLevel)) > 0); //if you don't have it by max level, then odds are you never will? } -uint16 Merc::MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const { +uint16 Merc::MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const { return(database.GetSkillCap(class_, skillid, level)); } @@ -1207,7 +1207,7 @@ void Merc::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) { ns->spawn.show_name = true; UpdateActiveLight(); - ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive]; + ns->spawn.light = m_Light.Type[EQ::lightsource::LightActive]; /* // Wear Slots are not setup for Mercs yet @@ -1518,12 +1518,12 @@ void Merc::AI_Process() { // Hate redux actions if (evade_timer.Check(false)) { // Attempt to evade - int timer_duration = (HideReuseTime - GetSkillReuseTime(EQEmu::skills::SkillHide)) * 1000; + int timer_duration = (HideReuseTime - GetSkillReuseTime(EQ::skills::SkillHide)) * 1000; if (timer_duration < 0) timer_duration = 0; evade_timer.Start(timer_duration); - if (zone->random.Int(0, 260) < (int)GetSkill(EQEmu::skills::SkillHide)) + if (zone->random.Int(0, 260) < (int)GetSkill(EQ::skills::SkillHide)) RogueEvade(GetTarget()); return; @@ -1590,24 +1590,24 @@ void Merc::AI_Process() { //try main hand first if(attack_timer.Check()) { - Attack(GetTarget(), EQEmu::invslot::slotPrimary); + Attack(GetTarget(), EQ::invslot::slotPrimary); bool tripleSuccess = false; if(GetOwner() && GetTarget() && CanThisClassDoubleAttack()) { if(GetOwner()) { - Attack(GetTarget(), EQEmu::invslot::slotPrimary, true); + Attack(GetTarget(), EQ::invslot::slotPrimary, true); } if(GetOwner() && GetTarget() && GetSpecialAbility(SPECATK_TRIPLE)) { tripleSuccess = true; - Attack(GetTarget(), EQEmu::invslot::slotPrimary, true); + Attack(GetTarget(), EQ::invslot::slotPrimary, true); } //quad attack, does this belong here?? if(GetOwner() && GetTarget() && GetSpecialAbility(SPECATK_QUAD)) { - Attack(GetTarget(), EQEmu::invslot::slotPrimary, true); + Attack(GetTarget(), EQ::invslot::slotPrimary, true); } } @@ -1619,8 +1619,8 @@ void Merc::AI_Process() { if(zone->random.Roll(flurrychance)) { MessageString(Chat::NPCFlurry, YOU_FLURRY); - Attack(GetTarget(), EQEmu::invslot::slotPrimary, false); - Attack(GetTarget(), EQEmu::invslot::slotPrimary, false); + Attack(GetTarget(), EQ::invslot::slotPrimary, false); + Attack(GetTarget(), EQ::invslot::slotPrimary, false); } } @@ -1629,7 +1629,7 @@ void Merc::AI_Process() { if (GetTarget() && ExtraAttackChanceBonus) { if(zone->random.Roll(ExtraAttackChanceBonus)) { - Attack(GetTarget(), EQEmu::invslot::slotPrimary, false); + Attack(GetTarget(), EQ::invslot::slotPrimary, false); } } } @@ -1653,23 +1653,23 @@ void Merc::AI_Process() { bool bIsFist = true; // why are we checking 'weapontype' when we know it's set to '0' above? - if (bIsFist || ((weapontype != EQEmu::item::ItemType2HSlash) && (weapontype != EQEmu::item::ItemType2HPiercing) && (weapontype != EQEmu::item::ItemType2HBlunt))) + if (bIsFist || ((weapontype != EQ::item::ItemType2HSlash) && (weapontype != EQ::item::ItemType2HPiercing) && (weapontype != EQ::item::ItemType2HBlunt))) { float DualWieldProbability = 0.0f; int16 Ambidexterity = aabonuses.Ambidexterity + spellbonuses.Ambidexterity + itembonuses.Ambidexterity; - DualWieldProbability = (GetSkill(EQEmu::skills::SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f; // 78.0 max + DualWieldProbability = (GetSkill(EQ::skills::SkillDualWield) + GetLevel() + Ambidexterity) / 400.0f; // 78.0 max int16 DWBonus = spellbonuses.DualWieldChance + itembonuses.DualWieldChance; DualWieldProbability += DualWieldProbability*float(DWBonus)/ 100.0f; // Max 78% of DW if (zone->random.Roll(DualWieldProbability)) { - Attack(GetTarget(), EQEmu::invslot::slotSecondary); // Single attack with offhand + Attack(GetTarget(), EQ::invslot::slotSecondary); // Single attack with offhand if(CanThisClassDoubleAttack()) { if(GetTarget() && GetTarget()->GetHP() > -10) - Attack(GetTarget(), EQEmu::invslot::slotSecondary); // Single attack with offhand + Attack(GetTarget(), EQ::invslot::slotSecondary); // Single attack with offhand } } } @@ -1993,7 +1993,7 @@ bool Merc::AIDoSpellCast(uint16 spellid, Mob* tar, int32 mana_cost, uint32* oDon SentPositionPacket(0.0f, 0.0f, 0.0f, 0.0f, 0); SetMoving(false); - result = CastSpell(spellid, tar->GetID(), EQEmu::spells::CastingSlot::Gem2, -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, 0); + result = CastSpell(spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, 0); if(IsCasting() && IsSitting()) Stand(); @@ -2348,7 +2348,7 @@ bool Merc::AICastSpell(int8 iChance, uint32 iSpellTypes) { continue; } - if (spells[selectedMercSpell.spellid].skill == EQEmu::skills::SkillBackstab && spells[selectedMercSpell.spellid].targettype == ST_Self) { + if (spells[selectedMercSpell.spellid].skill == EQ::skills::SkillBackstab && spells[selectedMercSpell.spellid].targettype == ST_Self) { if(!hidden) { continue; } @@ -2577,15 +2577,15 @@ int16 Merc::GetFocusEffect(focusType type, uint16 spell_id) { //Check if item focus effect exists for the client. if (itembonuses.FocusEffects[type]){ - const EQEmu::ItemData* TempItem = nullptr; - const EQEmu::ItemData* UsedItem = nullptr; + const EQ::ItemData* TempItem = nullptr; + const EQ::ItemData* UsedItem = nullptr; uint16 UsedFocusID = 0; int16 Total = 0; int16 focus_max = 0; int16 focus_max_real = 0; //item focus - for (int x = EQEmu::invslot::EQUIPMENT_BEGIN; x <= EQEmu::invslot::EQUIPMENT_END; ++x) + for (int x = EQ::invslot::EQUIPMENT_BEGIN; x <= EQ::invslot::EQUIPMENT_END; ++x) { TempItem = nullptr; if (equipment[x] == 0) @@ -3669,13 +3669,13 @@ MercSpell Merc::GetBestMercSpellForAENuke(Merc* caster, Mob* tar) { switch(caster->GetStance()) { - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurnAE: initialCastChance = 50; break; - case EQEmu::constants::stanceBalanced: + case EQ::constants::stanceBalanced: initialCastChance = 25; break; - case EQEmu::constants::stanceBurn: + case EQ::constants::stanceBurn: initialCastChance = 0; break; } @@ -3717,11 +3717,11 @@ MercSpell Merc::GetBestMercSpellForTargetedAENuke(Merc* caster, Mob* tar) { switch(caster->GetStance()) { - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurnAE: numTargetsCheck = 1; break; - case EQEmu::constants::stanceBalanced: - case EQEmu::constants::stanceBurn: + case EQ::constants::stanceBalanced: + case EQ::constants::stanceBurn: numTargetsCheck = 2; break; } @@ -3769,11 +3769,11 @@ MercSpell Merc::GetBestMercSpellForPBAENuke(Merc* caster, Mob* tar) { switch(caster->GetStance()) { - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurnAE: numTargetsCheck = 2; break; - case EQEmu::constants::stanceBalanced: - case EQEmu::constants::stanceBurn: + case EQ::constants::stanceBalanced: + case EQ::constants::stanceBurn: numTargetsCheck = 3; break; } @@ -3820,11 +3820,11 @@ MercSpell Merc::GetBestMercSpellForAERainNuke(Merc* caster, Mob* tar) { switch(caster->GetStance()) { - case EQEmu::constants::stanceBurnAE: + case EQ::constants::stanceBurnAE: numTargetsCheck = 1; break; - case EQEmu::constants::stanceBalanced: - case EQEmu::constants::stanceBurn: + case EQ::constants::stanceBalanced: + case EQ::constants::stanceBurn: numTargetsCheck = 2; break; } @@ -4045,7 +4045,7 @@ bool Merc::UseDiscipline(int32 spell_id, int32 target) { if(IsCasting()) InterruptSpell(); - CastSpell(spell_id, target, EQEmu::spells::CastingSlot::Discipline); + CastSpell(spell_id, target, EQ::spells::CastingSlot::Discipline); return(true); } @@ -4461,25 +4461,25 @@ void Merc::DoClassAttacks(Mob *target) { if(zone->random.Int(0, 100) > 25) //tested on live, warrior mobs both kick and bash, kick about 75% of the time, casting doesn't seem to make a difference. { DoAnim(animKick, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillKick); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillKick); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = KickReuseTime * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillKick, dmg, 1, -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, 1, -1, reuse); did_attack = true; } else { DoAnim(animTailRake, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillBash); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillBash); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = BashReuseTime * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillBash, dmg, 1, -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillBash, dmg, 1, -1, reuse); did_attack = true; } } @@ -4501,7 +4501,7 @@ bool Merc::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, boo return NPC::Attack(other, Hand, bRiposte, IsStrikethrough, IsFromSpell, opts); } -void Merc::Damage(Mob* other, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) +void Merc::Damage(Mob* other, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable, int8 buffslot, bool iBuffTic, eSpecialAttacks special) { if(IsDead() || IsCorpse()) return; @@ -4542,7 +4542,7 @@ Mob* Merc::GetOwnerOrSelf() { return Result; } -bool Merc::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::SkillType attack_skill) +bool Merc::Death(Mob* killerMob, int32 damage, uint16 spell, EQ::skills::SkillType attack_skill) { if(!NPC::Death(killerMob, damage, spell, attack_skill)) { @@ -5062,12 +5062,12 @@ void Merc::ScaleStats(int scalepercent, bool setmax) { void Merc::UpdateMercAppearance() { // Copied from Bot Code: uint32 itemID = 0; - uint8 materialFromSlot = EQEmu::textures::materialInvalid; - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; ++i) { + uint8 materialFromSlot = EQ::textures::materialInvalid; + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; ++i) { itemID = equipment[i]; if(itemID != 0) { - materialFromSlot = EQEmu::InventoryProfile::CalcMaterialFromSlot(i); - if (materialFromSlot != EQEmu::textures::materialInvalid) + materialFromSlot = EQ::InventoryProfile::CalcMaterialFromSlot(i); + if (materialFromSlot != EQ::textures::materialInvalid) this->SendWearChange(materialFromSlot); } } @@ -5078,18 +5078,18 @@ void Merc::UpdateMercAppearance() { void Merc::UpdateEquipmentLight() { - m_Light.Type[EQEmu::lightsource::LightEquipment] = 0; - m_Light.Level[EQEmu::lightsource::LightEquipment] = 0; + m_Light.Type[EQ::lightsource::LightEquipment] = 0; + m_Light.Level[EQ::lightsource::LightEquipment] = 0; - for (int index = EQEmu::invslot::EQUIPMENT_BEGIN; index <= EQEmu::invslot::EQUIPMENT_END; ++index) { - if (index == EQEmu::invslot::slotAmmo) { continue; } + for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; ++index) { + if (index == EQ::invslot::slotAmmo) { continue; } auto item = database.GetItem(equipment[index]); if (item == nullptr) { continue; } - if (EQEmu::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQEmu::lightsource::LightEquipment])) { - m_Light.Type[EQEmu::lightsource::LightEquipment] = item->Light; - m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); + if (EQ::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQ::lightsource::LightEquipment])) { + m_Light.Type[EQ::lightsource::LightEquipment] = item->Light; + m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } } @@ -5101,14 +5101,14 @@ void Merc::UpdateEquipmentLight() if (!item->IsClassCommon()) { continue; } if (item->Light < 9 || item->Light > 13) { continue; } - if (EQEmu::lightsource::TypeToLevel(item->Light)) + if (EQ::lightsource::TypeToLevel(item->Light)) general_light_type = item->Light; } - if (EQEmu::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQEmu::lightsource::LightEquipment])) - m_Light.Type[EQEmu::lightsource::LightEquipment] = general_light_type; + if (EQ::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQ::lightsource::LightEquipment])) + m_Light.Type[EQ::lightsource::LightEquipment] = general_light_type; - m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); + m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } void Merc::AddItem(uint8 slot, uint32 item_id) { @@ -5164,109 +5164,109 @@ void Client::SendMercResponsePackets(uint32 ResponseType) SendMercMerchantResponsePacket(6); break; case 7: //You must dismiss your suspended mercenary before purchasing a new one! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(7); else //You have the maximum number of mercenaries. You must dismiss one before purchasing a new one! SendMercMerchantResponsePacket(6); break; case 8: //You can not purchase a mercenary because your group is full! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(8); else SendMercMerchantResponsePacket(7); break; case 9: //You can not purchase a mercenary because you are in combat! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //Mercenary failed to spawn! SendMercMerchantResponsePacket(3); else SendMercMerchantResponsePacket(8); break; case 10: //You have recently dismissed a mercenary and must wait a few more seconds before you can purchase a new one! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //Mercenary failed to spawn! SendMercMerchantResponsePacket(3); else SendMercMerchantResponsePacket(9); break; case 11: //An error occurred created your mercenary! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(9); else SendMercMerchantResponsePacket(10); break; case 12: //Upkeep Charge Message - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(10); else SendMercMerchantResponsePacket(11); break; case 13: // ??? - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(11); else SendMercMerchantResponsePacket(12); break; case 14: //You ran out of funds to pay for your mercenary! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(12); else SendMercMerchantResponsePacket(13); break; case 15: // ??? - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(13); else SendMercMerchantResponsePacket(14); break; case 16: //Your mercenary is about to be suspended due to insufficient funds! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(14); else SendMercMerchantResponsePacket(15); break; case 17: //There is no mercenary liaison nearby! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(15); else SendMercMerchantResponsePacket(16); break; case 18: //You are too far from the liaison! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(16); else SendMercMerchantResponsePacket(17); break; case 19: //You do not meet the requirements for that mercenary! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) SendMercMerchantResponsePacket(17); else SendMercMerchantResponsePacket(18); break; case 20: //You are unable to interact with the liaison! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //You are too far from the liaison! SendMercMerchantResponsePacket(16); else SendMercMerchantResponsePacket(19); break; case 21: //You do not have a high enough membership level to purchase this mercenary! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //You do not meet the requirements for that mercenary! SendMercMerchantResponsePacket(17); else SendMercMerchantResponsePacket(20); break; case 22: //Your purchase has failed because this mercenary requires a Gold membership! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //You do not meet the requirements for that mercenary! SendMercMerchantResponsePacket(17); else SendMercMerchantResponsePacket(21); break; case 23: //Your purchase has failed because this mercenary requires at least a Silver membership! - if (ClientVersion() < EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() < EQ::versions::ClientVersion::RoF) //You do not meet the requirements for that mercenary! SendMercMerchantResponsePacket(17); else @@ -5649,7 +5649,7 @@ void Client::SpawnMerc(Merc* merc, bool setMaxStats) { merc->SetSuspended(false); SetMerc(merc); merc->Unsuspend(setMaxStats); - merc->SetStance((EQEmu::constants::StanceType)GetMercInfo().Stance); + merc->SetStance((EQ::constants::StanceType)GetMercInfo().Stance); Log(Logs::General, Logs::Mercenaries, "SpawnMerc Success for %s.", GetName()); @@ -6106,7 +6106,7 @@ void Client::UpdateMercLevel() { void Client::SendMercMerchantResponsePacket(int32 response_type) { // This response packet brings up the Mercenary Manager window - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) { auto outapp = new EQApplicationPacket(OP_MercenaryHire, sizeof(MercenaryMerchantResponse_Struct)); MercenaryMerchantResponse_Struct* mmr = (MercenaryMerchantResponse_Struct*)outapp->pBuffer; diff --git a/zone/merc.h b/zone/merc.h index 0fdc05f7a..efd27f703 100644 --- a/zone/merc.h +++ b/zone/merc.h @@ -12,7 +12,7 @@ struct MercTemplate; struct NPCType; struct NewSpawn_Struct; -namespace EQEmu +namespace EQ { struct ItemData; } @@ -52,9 +52,9 @@ public: virtual ~Merc(); //abstract virtual function implementations requird by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill); - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr); virtual bool HasRaid() { return false; } virtual bool HasGroup() { return (GetGroup() ? true : false); } @@ -163,16 +163,16 @@ public: uint8 GetTierID() { return _TierID; } uint32 GetCostFormula() { return _CostFormula; } uint32 GetMercNameType() { return _NameType; } - EQEmu::constants::StanceType GetStance() { return _currentStance; } + EQ::constants::StanceType GetStance() { return _currentStance; } int GetHatedCount() { return _hatedCount; } inline const uint8 GetClientVersion() const { return _OwnerClientVersion; } virtual void SetTarget(Mob* mob); - bool HasSkill(EQEmu::skills::SkillType skill_id) const; - bool CanHaveSkill(EQEmu::skills::SkillType skill_id) const; - uint16 MaxSkill(EQEmu::skills::SkillType skillid, uint16 class_, uint16 level) const; - inline uint16 MaxSkill(EQEmu::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } + bool HasSkill(EQ::skills::SkillType skill_id) const; + bool CanHaveSkill(EQ::skills::SkillType skill_id) const; + uint16 MaxSkill(EQ::skills::SkillType skillid, uint16 class_, uint16 level) const; + inline uint16 MaxSkill(EQ::skills::SkillType skillid) const { return MaxSkill(skillid, GetClass(), GetLevel()); } virtual void DoClassAttacks(Mob *target); void CheckHateList(); bool CheckTaunt(); @@ -253,7 +253,7 @@ public: void SetMercNameType( uint8 nametype ) { _NameType = nametype; } void SetClientVersion(uint8 clientVersion) { _OwnerClientVersion = clientVersion; } void SetSuspended(bool suspended) { _suspended = suspended; } - void SetStance( EQEmu::constants::StanceType stance ) { _currentStance = stance; } + void SetStance( EQ::constants::StanceType stance ) { _currentStance = stance; } void SetHatedCount( int count ) { _hatedCount = count; } void Sit(); @@ -270,7 +270,7 @@ public: protected: void CalcItemBonuses(StatBonuses* newbon); - void AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon); + void AddItemBonuses(const EQ::ItemData *item, StatBonuses* newbon); int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); int16 GetFocusEffect(focusType type, uint16 spell_id); @@ -280,8 +280,8 @@ protected: Timer evade_timer; // can be moved to pTimers at some point - uint16 skills[EQEmu::skills::HIGHEST_SKILL + 1]; - uint32 equipment[EQEmu::invslot::EQUIPMENT_COUNT]; //this is an array of item IDs + uint16 skills[EQ::skills::HIGHEST_SKILL + 1]; + uint32 equipment[EQ::invslot::EQUIPMENT_COUNT]; //this is an array of item IDs uint16 d_melee_texture1; //this is an item Material value uint16 d_melee_texture2; //this is an item Material value (offhand) uint8 prim_melee_type; //Sets the Primary Weapon attack message and animation @@ -373,9 +373,9 @@ private: uint8 _CostFormula; uint8 _NameType; uint8 _OwnerClientVersion; - EQEmu::constants::StanceType _currentStance; + EQ::constants::StanceType _currentStance; - EQEmu::InventoryProfile m_inv; + EQ::InventoryProfile m_inv; int32 max_end; int32 cur_end; bool _medding; diff --git a/zone/mob.cpp b/zone/mob.cpp index 5d25c42f0..3b607b2d2 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -77,7 +77,7 @@ Mob::Mob( uint32 in_drakkin_heritage, uint32 in_drakkin_tattoo, uint32 in_drakkin_details, - EQEmu::TintProfile in_armor_tint, + EQ::TintProfile in_armor_tint, uint8 in_aa_title, uint8 in_see_invis, // see through invis/ivu uint8 in_see_invis_undead, @@ -199,10 +199,10 @@ Mob::Mob( runspeed = 1.25f; } - m_Light.Type[EQEmu::lightsource::LightInnate] = in_light; - m_Light.Level[EQEmu::lightsource::LightInnate] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightInnate]); - m_Light.Type[EQEmu::lightsource::LightActive] = m_Light.Type[EQEmu::lightsource::LightInnate]; - m_Light.Level[EQEmu::lightsource::LightActive] = m_Light.Level[EQEmu::lightsource::LightInnate]; + m_Light.Type[EQ::lightsource::LightInnate] = in_light; + m_Light.Level[EQ::lightsource::LightInnate] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightInnate]); + m_Light.Type[EQ::lightsource::LightActive] = m_Light.Type[EQ::lightsource::LightInnate]; + m_Light.Level[EQ::lightsource::LightActive] = m_Light.Level[EQ::lightsource::LightInnate]; texture = in_texture; helmtexture = in_helmtexture; @@ -300,7 +300,7 @@ Mob::Mob( RangedProcs[j].level_override = -1; } - for (int i = EQEmu::textures::textureBegin; i < EQEmu::textures::materialCount; i++) { + for (int i = EQ::textures::textureBegin; i < EQ::textures::materialCount; i++) { armor_tint.Slot[i].Color = in_armor_tint.Slot[i].Color; } @@ -444,7 +444,7 @@ Mob::Mob( m_AllowBeneficial = false; m_DisableMelee = false; - for (int i = 0; i < EQEmu::skills::HIGHEST_SKILL + 2; i++) { + for (int i = 0; i < EQ::skills::HIGHEST_SKILL + 2; i++) { SkillDmgTaken_Mod[i] = 0; } @@ -1147,7 +1147,7 @@ void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) ns->spawn.findable = findable?1:0; UpdateActiveLight(); - ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive]; + ns->spawn.light = m_Light.Type[EQ::lightsource::LightActive]; if (IsNPC() && race == ERUDITE) ns->spawn.showhelm = 1; @@ -1363,7 +1363,7 @@ void Mob::SendHPUpdate(bool skip_self /*= false*/, bool force_update_all /*= fal (skip_self ? "true" : "false") ); - if (!skip_self || this->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (!skip_self || this->CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::SoD) { auto client_packet = new EQApplicationPacket(OP_HPUpdate, sizeof(SpawnHPUpdate_Struct)); auto *hp_packet_client = (SpawnHPUpdate_Struct *) client_packet->pBuffer; @@ -1419,7 +1419,7 @@ void Mob::SendHPUpdate(bool skip_self /*= false*/, bool force_update_all /*= fal /** * Update those who have us targeted */ - entity_list.QueueClientsByTarget(this, &hp_packet, false, 0, false, true, EQEmu::versions::maskAllClients); + entity_list.QueueClientsByTarget(this, &hp_packet, false, 0, false, true, EQ::versions::maskAllClients); /** * Update those who have us on x-target @@ -1639,9 +1639,9 @@ void Mob::ShowStats(Client* client) client->Message(Chat::White, " AggroRange: %1.0f AssistRange: %1.0f", GetAggroRange(), GetAssistRange()); } - client->Message(Chat::White, " compute_tohit: %i TotalToHit: %i", compute_tohit(EQEmu::skills::SkillHandtoHand), GetTotalToHit(EQEmu::skills::SkillHandtoHand, 0)); + client->Message(Chat::White, " compute_tohit: %i TotalToHit: %i", compute_tohit(EQ::skills::SkillHandtoHand), GetTotalToHit(EQ::skills::SkillHandtoHand, 0)); client->Message(Chat::White, " compute_defense: %i TotalDefense: %i", compute_defense(), GetTotalDefense()); - client->Message(Chat::White, " offense: %i mitigation ac: %i", offense(EQEmu::skills::SkillHandtoHand), GetMitigationAC()); + client->Message(Chat::White, " offense: %i mitigation ac: %i", offense(EQ::skills::SkillHandtoHand), GetMitigationAC()); } } @@ -2368,18 +2368,18 @@ void Mob::SetAppearance(EmuAppearance app, bool iIgnoreSelf) { bool Mob::UpdateActiveLight() { - uint8 old_light_level = m_Light.Level[EQEmu::lightsource::LightActive]; + uint8 old_light_level = m_Light.Level[EQ::lightsource::LightActive]; - m_Light.Type[EQEmu::lightsource::LightActive] = 0; - m_Light.Level[EQEmu::lightsource::LightActive] = 0; + m_Light.Type[EQ::lightsource::LightActive] = 0; + m_Light.Level[EQ::lightsource::LightActive] = 0; - if (EQEmu::lightsource::IsLevelGreater((m_Light.Type[EQEmu::lightsource::LightInnate] & 0x0F), m_Light.Type[EQEmu::lightsource::LightActive])) { m_Light.Type[EQEmu::lightsource::LightActive] = m_Light.Type[EQEmu::lightsource::LightInnate]; } - if (m_Light.Level[EQEmu::lightsource::LightEquipment] > m_Light.Level[EQEmu::lightsource::LightActive]) { m_Light.Type[EQEmu::lightsource::LightActive] = m_Light.Type[EQEmu::lightsource::LightEquipment]; } // limiter in property handler - if (m_Light.Level[EQEmu::lightsource::LightSpell] > m_Light.Level[EQEmu::lightsource::LightActive]) { m_Light.Type[EQEmu::lightsource::LightActive] = m_Light.Type[EQEmu::lightsource::LightSpell]; } // limiter in property handler + if (EQ::lightsource::IsLevelGreater((m_Light.Type[EQ::lightsource::LightInnate] & 0x0F), m_Light.Type[EQ::lightsource::LightActive])) { m_Light.Type[EQ::lightsource::LightActive] = m_Light.Type[EQ::lightsource::LightInnate]; } + if (m_Light.Level[EQ::lightsource::LightEquipment] > m_Light.Level[EQ::lightsource::LightActive]) { m_Light.Type[EQ::lightsource::LightActive] = m_Light.Type[EQ::lightsource::LightEquipment]; } // limiter in property handler + if (m_Light.Level[EQ::lightsource::LightSpell] > m_Light.Level[EQ::lightsource::LightActive]) { m_Light.Type[EQ::lightsource::LightActive] = m_Light.Type[EQ::lightsource::LightSpell]; } // limiter in property handler - m_Light.Level[EQEmu::lightsource::LightActive] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightActive]); + m_Light.Level[EQ::lightsource::LightActive] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightActive]); - return (m_Light.Level[EQEmu::lightsource::LightActive] != old_light_level); + return (m_Light.Level[EQ::lightsource::LightActive] != old_light_level); } void Mob::ChangeSize(float in_size = 0, bool bNoRestriction) { @@ -2511,20 +2511,20 @@ void Mob::SetZone(uint32 zone_id, uint32 instance_id) } void Mob::Kill() { - Death(this, 0, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand); + Death(this, 0, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand); } bool Mob::CanThisClassDualWield(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillDualWield) > 0); + return(GetSkill(EQ::skills::SkillDualWield) > 0); } - else if (CastToClient()->HasSkill(EQEmu::skills::SkillDualWield)) { - const EQEmu::ItemInstance* pinst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); - const EQEmu::ItemInstance* sinst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + else if (CastToClient()->HasSkill(EQ::skills::SkillDualWield)) { + const EQ::ItemInstance* pinst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); + const EQ::ItemInstance* sinst = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); // 2HS, 2HB, or 2HP if(pinst && pinst->IsWeapon()) { - const EQEmu::ItemData* item = pinst->GetItem(); + const EQ::ItemData* item = pinst->GetItem(); if (item->IsType2HWeapon()) return false; @@ -2548,12 +2548,12 @@ bool Mob::CanThisClassDualWield(void) const { bool Mob::CanThisClassDoubleAttack(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillDoubleAttack) > 0); + return(GetSkill(EQ::skills::SkillDoubleAttack) > 0); } else { if(aabonuses.GiveDoubleAttack || itembonuses.GiveDoubleAttack || spellbonuses.GiveDoubleAttack) { return true; } - return(CastToClient()->HasSkill(EQEmu::skills::SkillDoubleAttack)); + return(CastToClient()->HasSkill(EQ::skills::SkillDoubleAttack)); } } @@ -2562,7 +2562,7 @@ bool Mob::CanThisClassTripleAttack() const if (!IsClient()) return false; // When they added the real triple attack skill, mobs lost the ability to triple else - return CastToClient()->HasSkill(EQEmu::skills::SkillTripleAttack); + return CastToClient()->HasSkill(EQ::skills::SkillTripleAttack); } bool Mob::IsWarriorClass(void) const @@ -2601,36 +2601,36 @@ bool Mob::IsWarriorClass(void) const bool Mob::CanThisClassParry(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillParry) > 0); + return(GetSkill(EQ::skills::SkillParry) > 0); } else { - return(CastToClient()->HasSkill(EQEmu::skills::SkillParry)); + return(CastToClient()->HasSkill(EQ::skills::SkillParry)); } } bool Mob::CanThisClassDodge(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillDodge) > 0); + return(GetSkill(EQ::skills::SkillDodge) > 0); } else { - return(CastToClient()->HasSkill(EQEmu::skills::SkillDodge)); + return(CastToClient()->HasSkill(EQ::skills::SkillDodge)); } } bool Mob::CanThisClassRiposte(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillRiposte) > 0); + return(GetSkill(EQ::skills::SkillRiposte) > 0); } else { - return(CastToClient()->HasSkill(EQEmu::skills::SkillRiposte)); + return(CastToClient()->HasSkill(EQ::skills::SkillRiposte)); } } bool Mob::CanThisClassBlock(void) const { if(!IsClient()) { - return(GetSkill(EQEmu::skills::SkillBlock) > 0); + return(GetSkill(EQ::skills::SkillBlock) > 0); } else { - return(CastToClient()->HasSkill(EQEmu::skills::SkillBlock)); + return(CastToClient()->HasSkill(EQ::skills::SkillBlock)); } } /* @@ -2881,7 +2881,7 @@ uint32 Mob::RandomTimer(int min, int max) uint32 Mob::IsEliteMaterialItem(uint8 material_slot) const { - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); if(item != 0) @@ -3111,7 +3111,7 @@ int32 Mob::GetActSpellCasttime(uint16 spell_id, int32 casttime) { return casttime; } -void Mob::ExecWeaponProc(const EQEmu::ItemInstance *inst, uint16 spell_id, Mob *on, int level_override) { +void Mob::ExecWeaponProc(const EQ::ItemInstance *inst, uint16 spell_id, Mob *on, int level_override) { // Changed proc targets to look up based on the spells goodEffect flag. // This should work for the majority of weapons. if(spell_id == SPELL_UNKNOWN || on->GetSpecialAbility(NO_HARM_FROM_CLIENT)) { @@ -3132,9 +3132,9 @@ void Mob::ExecWeaponProc(const EQEmu::ItemInstance *inst, uint16 spell_id, Mob * if(inst && IsClient()) { //const cast is dirty but it would require redoing a ton of interfaces at this point - //It should be safe as we don't have any truly const EQEmu::ItemInstance floating around anywhere. + //It should be safe as we don't have any truly const EQ::ItemInstance floating around anywhere. //So we'll live with it for now - int i = parse->EventItem(EVENT_WEAPON_PROC, CastToClient(), const_cast(inst), on, "", spell_id); + int i = parse->EventItem(EVENT_WEAPON_PROC, CastToClient(), const_cast(inst), on, "", spell_id); if(i != 0) { return; } @@ -3150,12 +3150,12 @@ void Mob::ExecWeaponProc(const EQEmu::ItemInstance *inst, uint16 spell_id, Mob * twinproc = true; if (IsBeneficialSpell(spell_id) && (!IsNPC() || (IsNPC() && CastToNPC()->GetInnateProcSpellID() != spell_id))) { // NPC innate procs don't take this path ever - SpellFinished(spell_id, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff, true, level_override); + SpellFinished(spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff, true, level_override); if(twinproc) SpellOnTarget(spell_id, this, false, false, 0, true, level_override); } else if(!(on->IsClient() && on->CastToClient()->dead)) { //dont proc on dead clients - SpellFinished(spell_id, on, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff, true, level_override); + SpellFinished(spell_id, on, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff, true, level_override); if(twinproc) SpellOnTarget(spell_id, on, false, false, 0, true, level_override); } @@ -3368,19 +3368,19 @@ void Mob::TriggerDefensiveProcs(Mob *on, uint16 hand, bool FromSkillProc, int da uint16 skillinuse = 0; switch (damage) { case (-1): - skillinuse = EQEmu::skills::SkillBlock; + skillinuse = EQ::skills::SkillBlock; break; case (-2): - skillinuse = EQEmu::skills::SkillParry; + skillinuse = EQ::skills::SkillParry; break; case (-3): - skillinuse = EQEmu::skills::SkillRiposte; + skillinuse = EQ::skills::SkillRiposte; break; case (-4): - skillinuse = EQEmu::skills::SkillDodge; + skillinuse = EQ::skills::SkillDodge; break; } @@ -3496,7 +3496,7 @@ void Mob::TriggerOnCast(uint32 focus_spell, uint32 spell_id, bool aa_trigger) trigger_spell_id = CastToClient()->CalcAAFocus(focusTriggerOnCast, *rank, spell_id); if (IsValidSpell(trigger_spell_id) && GetTarget()) - SpellFinished(trigger_spell_id, GetTarget(), EQEmu::spells::CastingSlot::Item, 0, -1, + SpellFinished(trigger_spell_id, GetTarget(), EQ::spells::CastingSlot::Item, 0, -1, spells[trigger_spell_id].ResistDiff); } @@ -3504,7 +3504,7 @@ void Mob::TriggerOnCast(uint32 focus_spell, uint32 spell_id, bool aa_trigger) trigger_spell_id = CalcFocusEffect(focusTriggerOnCast, focus_spell, spell_id); if (IsValidSpell(trigger_spell_id) && GetTarget()) { - SpellFinished(trigger_spell_id, GetTarget(), EQEmu::spells::CastingSlot::Item, 0, -1, + SpellFinished(trigger_spell_id, GetTarget(), EQ::spells::CastingSlot::Item, 0, -1, spells[trigger_spell_id].ResistDiff); CheckNumHitsRemaining(NumHit::MatchingSpells, -1, focus_spell); } @@ -3535,7 +3535,7 @@ bool Mob::TrySpellTrigger(Mob *target, uint32 spell_id, int effect) { // If we trigger an effect then its over. if (IsValidSpell(spells[spell_id].base2[i])){ - SpellFinished(spells[spell_id].base2[i], target, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); + SpellFinished(spells[spell_id].base2[i], target, EQ::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); return true; } } @@ -3554,7 +3554,7 @@ bool Mob::TrySpellTrigger(Mob *target, uint32 spell_id, int effect) if(zone->random.Int(0, 100) <= spells[spell_id].base[effect]) { if (IsValidSpell(spells[spell_id].base2[effect])){ - SpellFinished(spells[spell_id].base2[effect], target, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[effect]].ResistDiff); + SpellFinished(spells[spell_id].base2[effect], target, EQ::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[effect]].ResistDiff); return true; //Only trigger once of these per spell effect. } } @@ -3631,7 +3631,7 @@ void Mob::TryTriggerOnValueAmount(bool IsHP, bool IsMana, bool IsEndur, bool IsP } if (use_spell){ - SpellFinished(spells[spell_id].base[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spells[spell_id].base[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); if(!TryFadeEffect(e)) BuffFadeBySlot(e); @@ -3659,7 +3659,7 @@ void Mob::TryTwincast(Mob *caster, Mob *target, uint32 spell_id) if(zone->random.Roll(focus)) { Message(Chat::Spells,"You twincast %s!", spells[spell_id].name); - SpellFinished(spell_id, target, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, target, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } } } @@ -3677,7 +3677,7 @@ void Mob::TryTwincast(Mob *caster, Mob *target, uint32 spell_id) { if(zone->random.Roll(focus)) { - SpellFinished(spell_id, target, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, target, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } } } @@ -3745,15 +3745,15 @@ int32 Mob::GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining) return value; } -int16 Mob::GetSkillDmgTaken(const EQEmu::skills::SkillType skill_used, ExtraAttackOptions *opts) +int16 Mob::GetSkillDmgTaken(const EQ::skills::SkillType skill_used, ExtraAttackOptions *opts) { int skilldmg_mod = 0; // All skill dmg mod + Skill specific - skilldmg_mod += itembonuses.SkillDmgTaken[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.SkillDmgTaken[EQEmu::skills::HIGHEST_SKILL + 1] + + skilldmg_mod += itembonuses.SkillDmgTaken[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.SkillDmgTaken[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDmgTaken[skill_used] + spellbonuses.SkillDmgTaken[skill_used]; - skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[EQEmu::skills::HIGHEST_SKILL + 1]; + skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[EQ::skills::HIGHEST_SKILL + 1]; if (opts) skilldmg_mod += opts->skilldmgtaken_bonus_flat; @@ -3805,10 +3805,10 @@ bool Mob::TryFadeEffect(int slot) if(IsValidSpell(spell_id)) { if (IsBeneficialSpell(spell_id)) { - SpellFinished(spell_id, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } else if(!(IsClient() && CastToClient()->dead)) { - SpellFinished(spell_id, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } return true; } @@ -3842,7 +3842,7 @@ void Mob::TrySympatheticProc(Mob *target, uint32 spell_id) SpellFinished(focus_trigger, target); else - SpellFinished(focus_trigger, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[focus_trigger].ResistDiff); + SpellFinished(focus_trigger, this, EQ::spells::CastingSlot::Item, 0, -1, spells[focus_trigger].ResistDiff); } // For detrimental spells, if the triggered spell is beneficial, then it will land on the caster // if the triggered spell is also detrimental, then it will land on the target @@ -3852,7 +3852,7 @@ void Mob::TrySympatheticProc(Mob *target, uint32 spell_id) SpellFinished(focus_trigger, this); else - SpellFinished(focus_trigger, target, EQEmu::spells::CastingSlot::Item, 0, -1, spells[focus_trigger].ResistDiff); + SpellFinished(focus_trigger, target, EQ::spells::CastingSlot::Item, 0, -1, spells[focus_trigger].ResistDiff); } CheckNumHitsRemaining(NumHit::MatchingSpells, -1, focus_spell); @@ -3860,11 +3860,11 @@ void Mob::TrySympatheticProc(Mob *target, uint32 spell_id) int32 Mob::GetItemStat(uint32 itemid, const char *identifier) { - const EQEmu::ItemInstance* inst = database.CreateItem(itemid); + const EQ::ItemInstance* inst = database.CreateItem(itemid); if (!inst) return 0; - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (!item) return 0; @@ -4502,7 +4502,7 @@ void Mob::TrySpellOnKill(uint8 level, uint16 spell_id) if (IsValidSpell(spells[spell_id].base2[i]) && spells[spell_id].max[i] <= level) { if(zone->random.Roll(spells[spell_id].base[i])) - SpellFinished(spells[spell_id].base2[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); + SpellFinished(spells[spell_id].base2[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); } } } @@ -4517,17 +4517,17 @@ void Mob::TrySpellOnKill(uint8 level, uint16 spell_id) if(aabonuses.SpellOnKill[i] && IsValidSpell(aabonuses.SpellOnKill[i]) && (level >= aabonuses.SpellOnKill[i + 2])) { if(zone->random.Roll(static_cast(aabonuses.SpellOnKill[i + 1]))) - SpellFinished(aabonuses.SpellOnKill[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); + SpellFinished(aabonuses.SpellOnKill[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); } if(itembonuses.SpellOnKill[i] && IsValidSpell(itembonuses.SpellOnKill[i]) && (level >= itembonuses.SpellOnKill[i + 2])){ if(zone->random.Roll(static_cast(itembonuses.SpellOnKill[i + 1]))) - SpellFinished(itembonuses.SpellOnKill[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); + SpellFinished(itembonuses.SpellOnKill[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); } if(spellbonuses.SpellOnKill[i] && IsValidSpell(spellbonuses.SpellOnKill[i]) && (level >= spellbonuses.SpellOnKill[i + 2])) { if(zone->random.Roll(static_cast(spellbonuses.SpellOnKill[i + 1]))) - SpellFinished(spellbonuses.SpellOnKill[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); + SpellFinished(spellbonuses.SpellOnKill[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnKill[i]].ResistDiff); } } @@ -4544,19 +4544,19 @@ bool Mob::TrySpellOnDeath() for(int i = 0; i < MAX_SPELL_TRIGGER*2; i+=2) { if(IsClient() && aabonuses.SpellOnDeath[i] && IsValidSpell(aabonuses.SpellOnDeath[i])) { if(zone->random.Roll(static_cast(aabonuses.SpellOnDeath[i + 1]))) { - SpellFinished(aabonuses.SpellOnDeath[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnDeath[i]].ResistDiff); + SpellFinished(aabonuses.SpellOnDeath[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SpellOnDeath[i]].ResistDiff); } } if(itembonuses.SpellOnDeath[i] && IsValidSpell(itembonuses.SpellOnDeath[i])) { if(zone->random.Roll(static_cast(itembonuses.SpellOnDeath[i + 1]))) { - SpellFinished(itembonuses.SpellOnDeath[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[itembonuses.SpellOnDeath[i]].ResistDiff); + SpellFinished(itembonuses.SpellOnDeath[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[itembonuses.SpellOnDeath[i]].ResistDiff); } } if(spellbonuses.SpellOnDeath[i] && IsValidSpell(spellbonuses.SpellOnDeath[i])) { if(zone->random.Roll(static_cast(spellbonuses.SpellOnDeath[i + 1]))) { - SpellFinished(spellbonuses.SpellOnDeath[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spellbonuses.SpellOnDeath[i]].ResistDiff); + SpellFinished(spellbonuses.SpellOnDeath[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[spellbonuses.SpellOnDeath[i]].ResistDiff); } } } @@ -4573,7 +4573,7 @@ int16 Mob::GetCritDmgMod(uint16 skill) int critDmg_mod = 0; // All skill dmg mod + Skill specific - critDmg_mod += itembonuses.CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.CritDmgMod[EQEmu::skills::HIGHEST_SKILL + 1] + + critDmg_mod += itembonuses.CritDmgMod[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.CritDmgMod[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.CritDmgMod[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.CritDmgMod[skill] + spellbonuses.CritDmgMod[skill] + aabonuses.CritDmgMod[skill]; return critDmg_mod; @@ -4615,7 +4615,7 @@ int Mob::GetCriticalChanceBonus(uint16 skill) int critical_chance = 0; // All skills + Skill specific - critical_chance += itembonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] + + critical_chance += itembonuses.CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.CriticalHitChance[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.CriticalHitChance[skill] + spellbonuses.CriticalHitChance[skill] + aabonuses.CriticalHitChance[skill]; if(critical_chance < -100) @@ -4629,10 +4629,10 @@ int16 Mob::GetMeleeDamageMod_SE(uint16 skill) int dmg_mod = 0; // All skill dmg mod + Skill specific - dmg_mod += itembonuses.DamageModifier[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.DamageModifier[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.DamageModifier[EQEmu::skills::HIGHEST_SKILL + 1] + + dmg_mod += itembonuses.DamageModifier[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.DamageModifier[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.DamageModifier[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.DamageModifier[skill] + spellbonuses.DamageModifier[skill] + aabonuses.DamageModifier[skill]; - dmg_mod += itembonuses.DamageModifier2[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.DamageModifier2[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.DamageModifier2[EQEmu::skills::HIGHEST_SKILL + 1] + + dmg_mod += itembonuses.DamageModifier2[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.DamageModifier2[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.DamageModifier2[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.DamageModifier2[skill] + spellbonuses.DamageModifier2[skill] + aabonuses.DamageModifier2[skill]; if(dmg_mod < -100) @@ -4646,7 +4646,7 @@ int16 Mob::GetMeleeMinDamageMod_SE(uint16 skill) int dmg_mod = 0; dmg_mod = itembonuses.MinDamageModifier[skill] + spellbonuses.MinDamageModifier[skill] + - itembonuses.MinDamageModifier[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.MinDamageModifier[EQEmu::skills::HIGHEST_SKILL + 1]; + itembonuses.MinDamageModifier[EQ::skills::HIGHEST_SKILL + 1] + spellbonuses.MinDamageModifier[EQ::skills::HIGHEST_SKILL + 1]; if(dmg_mod < -100) dmg_mod = -100; @@ -4678,10 +4678,10 @@ int16 Mob::GetSkillDmgAmt(uint16 skill) int skill_dmg = 0; // All skill dmg(only spells do this) + Skill specific - skill_dmg += spellbonuses.SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.SkillDamageAmount[EQEmu::skills::HIGHEST_SKILL + 1] + skill_dmg += spellbonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount[skill] + spellbonuses.SkillDamageAmount[skill] + aabonuses.SkillDamageAmount[skill]; - skill_dmg += spellbonuses.SkillDamageAmount2[EQEmu::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount2[EQEmu::skills::HIGHEST_SKILL + 1] + skill_dmg += spellbonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount2[skill] + spellbonuses.SkillDamageAmount2[skill]; return skill_dmg; @@ -4701,7 +4701,7 @@ void Mob::MeleeLifeTap(int32 damage) { if (lifetap_amt > 0) HealDamage(lifetap_amt); //Heal self for modified damage amount. else - Damage(this, -lifetap_amt, 0, EQEmu::skills::SkillEvocation, false); //Dmg self for modified damage amount. + Damage(this, -lifetap_amt, 0, EQ::skills::SkillEvocation, false); //Dmg self for modified damage amount. } } @@ -4904,21 +4904,21 @@ void Mob::SetBodyType(bodyType new_body, bool overwrite_orig) { } -void Mob::ModSkillDmgTaken(EQEmu::skills::SkillType skill_num, int value) +void Mob::ModSkillDmgTaken(EQ::skills::SkillType skill_num, int value) { if (skill_num == ALL_SKILLS) - SkillDmgTaken_Mod[EQEmu::skills::HIGHEST_SKILL + 1] = value; + SkillDmgTaken_Mod[EQ::skills::HIGHEST_SKILL + 1] = value; - else if (skill_num >= 0 && skill_num <= EQEmu::skills::HIGHEST_SKILL) + else if (skill_num >= 0 && skill_num <= EQ::skills::HIGHEST_SKILL) SkillDmgTaken_Mod[skill_num] = value; } -int16 Mob::GetModSkillDmgTaken(const EQEmu::skills::SkillType skill_num) +int16 Mob::GetModSkillDmgTaken(const EQ::skills::SkillType skill_num) { if (skill_num == ALL_SKILLS) - return SkillDmgTaken_Mod[EQEmu::skills::HIGHEST_SKILL + 1]; + return SkillDmgTaken_Mod[EQ::skills::HIGHEST_SKILL + 1]; - else if (skill_num >= 0 && skill_num <= EQEmu::skills::HIGHEST_SKILL) + else if (skill_num >= 0 && skill_num <= EQ::skills::HIGHEST_SKILL) return SkillDmgTaken_Mod[skill_num]; return 0; @@ -5010,56 +5010,56 @@ void Mob::SlowMitigation(Mob* caster) uint16 Mob::GetSkillByItemType(int ItemType) { switch (ItemType) { - case EQEmu::item::ItemType1HSlash: - return EQEmu::skills::Skill1HSlashing; - case EQEmu::item::ItemType2HSlash: - return EQEmu::skills::Skill2HSlashing; - case EQEmu::item::ItemType1HPiercing: - return EQEmu::skills::Skill1HPiercing; - case EQEmu::item::ItemType1HBlunt: - return EQEmu::skills::Skill1HBlunt; - case EQEmu::item::ItemType2HBlunt: - return EQEmu::skills::Skill2HBlunt; - case EQEmu::item::ItemType2HPiercing: - if (IsClient() && CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::RoF2) - return EQEmu::skills::Skill1HPiercing; + case EQ::item::ItemType1HSlash: + return EQ::skills::Skill1HSlashing; + case EQ::item::ItemType2HSlash: + return EQ::skills::Skill2HSlashing; + case EQ::item::ItemType1HPiercing: + return EQ::skills::Skill1HPiercing; + case EQ::item::ItemType1HBlunt: + return EQ::skills::Skill1HBlunt; + case EQ::item::ItemType2HBlunt: + return EQ::skills::Skill2HBlunt; + case EQ::item::ItemType2HPiercing: + if (IsClient() && CastToClient()->ClientVersion() < EQ::versions::ClientVersion::RoF2) + return EQ::skills::Skill1HPiercing; else - return EQEmu::skills::Skill2HPiercing; - case EQEmu::item::ItemTypeBow: - return EQEmu::skills::SkillArchery; - case EQEmu::item::ItemTypeLargeThrowing: - case EQEmu::item::ItemTypeSmallThrowing: - return EQEmu::skills::SkillThrowing; - case EQEmu::item::ItemTypeMartial: - return EQEmu::skills::SkillHandtoHand; + return EQ::skills::Skill2HPiercing; + case EQ::item::ItemTypeBow: + return EQ::skills::SkillArchery; + case EQ::item::ItemTypeLargeThrowing: + case EQ::item::ItemTypeSmallThrowing: + return EQ::skills::SkillThrowing; + case EQ::item::ItemTypeMartial: + return EQ::skills::SkillHandtoHand; default: - return EQEmu::skills::SkillHandtoHand; + return EQ::skills::SkillHandtoHand; } } -uint8 Mob::GetItemTypeBySkill(EQEmu::skills::SkillType skill) +uint8 Mob::GetItemTypeBySkill(EQ::skills::SkillType skill) { switch (skill) { - case EQEmu::skills::SkillThrowing: - return EQEmu::item::ItemTypeSmallThrowing; - case EQEmu::skills::SkillArchery: - return EQEmu::item::ItemTypeArrow; - case EQEmu::skills::Skill1HSlashing: - return EQEmu::item::ItemType1HSlash; - case EQEmu::skills::Skill2HSlashing: - return EQEmu::item::ItemType2HSlash; - case EQEmu::skills::Skill1HPiercing: - return EQEmu::item::ItemType1HPiercing; - case EQEmu::skills::Skill2HPiercing: // watch for undesired client behavior - return EQEmu::item::ItemType2HPiercing; - case EQEmu::skills::Skill1HBlunt: - return EQEmu::item::ItemType1HBlunt; - case EQEmu::skills::Skill2HBlunt: - return EQEmu::item::ItemType2HBlunt; - case EQEmu::skills::SkillHandtoHand: - return EQEmu::item::ItemTypeMartial; + case EQ::skills::SkillThrowing: + return EQ::item::ItemTypeSmallThrowing; + case EQ::skills::SkillArchery: + return EQ::item::ItemTypeArrow; + case EQ::skills::Skill1HSlashing: + return EQ::item::ItemType1HSlash; + case EQ::skills::Skill2HSlashing: + return EQ::item::ItemType2HSlash; + case EQ::skills::Skill1HPiercing: + return EQ::item::ItemType1HPiercing; + case EQ::skills::Skill2HPiercing: // watch for undesired client behavior + return EQ::item::ItemType2HPiercing; + case EQ::skills::Skill1HBlunt: + return EQ::item::ItemType1HBlunt; + case EQ::skills::Skill2HBlunt: + return EQ::item::ItemType2HBlunt; + case EQ::skills::SkillHandtoHand: + return EQ::item::ItemTypeMartial; default: - return EQEmu::item::ItemTypeMartial; + return EQ::item::ItemTypeMartial; } } @@ -5623,7 +5623,7 @@ int32 Mob::GetSpellStat(uint32 spell_id, const char *identifier, uint8 slot) bool Mob::CanClassEquipItem(uint32 item_id) { - const EQEmu::ItemData* itm = nullptr; + const EQ::ItemData* itm = nullptr; itm = database.GetItem(item_id); if (!itm) @@ -5679,9 +5679,9 @@ int32 Mob::GetMeleeMitigation() { } /* this is the mob being attacked. - * Pass in the weapon's EQEmu::ItemInstance + * Pass in the weapon's EQ::ItemInstance */ -int Mob::ResistElementalWeaponDmg(const EQEmu::ItemInstance *item) +int Mob::ResistElementalWeaponDmg(const EQ::ItemInstance *item) { if (!item) return 0; @@ -5831,9 +5831,9 @@ int Mob::ResistElementalWeaponDmg(const EQEmu::ItemInstance *item) } /* this is the mob being attacked. - * Pass in the weapon's EQEmu::ItemInstance + * Pass in the weapon's EQ::ItemInstance */ -int Mob::CheckBaneDamage(const EQEmu::ItemInstance *item) +int Mob::CheckBaneDamage(const EQ::ItemInstance *item) { if (!item) return 0; diff --git a/zone/mob.h b/zone/mob.h index f1c128080..efdf68012 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -54,7 +54,7 @@ class MobMovementManager; const int COLLISION_BOX_SIZE = 8; -namespace EQEmu +namespace EQ { struct ItemData; class ItemInstance; @@ -145,7 +145,7 @@ public: uint32 in_drakkin_heritage, uint32 in_drakkin_tattoo, uint32 in_drakkin_details, - EQEmu::TintProfile in_armor_tint, + EQ::TintProfile in_armor_tint, uint8 in_aa_title, uint8 in_see_invis, // see through invis uint8 in_see_invis_undead, // see through invis vs. undead @@ -193,26 +193,26 @@ public: virtual void RangedAttack(Mob* other) { } virtual void ThrowingAttack(Mob* other) { } // 13 = Primary (default), 14 = secondary - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr) = 0; void DoAttack(Mob *other, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr); int MonkSpecialAttack(Mob* other, uint8 skill_used); virtual void TryBackstab(Mob *other,int ReuseTime = 10); bool AvoidDamage(Mob *attacker, DamageHitInfo &hit); - int compute_tohit(EQEmu::skills::SkillType skillinuse); - int GetTotalToHit(EQEmu::skills::SkillType skill, int chance_mod); // compute_tohit + spell bonuses + int compute_tohit(EQ::skills::SkillType skillinuse); + int GetTotalToHit(EQ::skills::SkillType skill, int chance_mod); // compute_tohit + spell bonuses int compute_defense(); int GetTotalDefense(); // compute_defense + spell bonuses bool CheckHitChance(Mob* attacker, DamageHitInfo &hit); void TryCriticalHit(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr); void TryPetCriticalHit(Mob *defender, DamageHitInfo &hit); virtual bool TryFinishingBlow(Mob *defender, int &damage); - int TryHeadShot(Mob* defender, EQEmu::skills::SkillType skillInUse); - int TryAssassinate(Mob* defender, EQEmu::skills::SkillType skillInUse); + int TryHeadShot(Mob* defender, EQ::skills::SkillType skillInUse); + int TryAssassinate(Mob* defender, EQ::skills::SkillType skillInUse); virtual void DoRiposte(Mob* defender); void ApplyMeleeDamageMods(uint16 skill, int &damage, Mob * defender = nullptr, ExtraAttackOptions *opts = nullptr); int ACSum(); - int offense(EQEmu::skills::SkillType skill); + int offense(EQ::skills::SkillType skill); int GetBestMeleeSkill(); void CalcAC() { mitigation_ac = ACSum(); } int GetACSoftcap(); @@ -251,11 +251,11 @@ public: ************************************************ */ - EQEmu::InternalTextureProfile mob_texture_profile = {}; + EQ::InternalTextureProfile mob_texture_profile = {}; bool IsInvisible(Mob* other = 0) const; - EQEmu::skills::SkillType AttackAnimation(int Hand, const EQEmu::ItemInstance* weapon, EQEmu::skills::SkillType skillinuse = EQEmu::skills::Skill1HBlunt); + EQ::skills::SkillType AttackAnimation(int Hand, const EQ::ItemInstance* weapon, EQ::skills::SkillType skillinuse = EQ::skills::Skill1HBlunt); inline bool GetSeeInvisible(uint8 see_invis); inline bool SeeHide() const { return see_hide; } @@ -275,7 +275,7 @@ public: void ChangeSize(float in_size, bool bNoRestriction = false); void DoAnim(const int animnum, int type=0, bool ackreq = true, eqFilterType filter = FilterNone); - void ProjectileAnimation(Mob* to, int item_id, bool IsArrow = false, float speed = 0, float angle = 0, float tilt = 0, float arc = 0, const char *IDFile = nullptr, EQEmu::skills::SkillType skillInUse = EQEmu::skills::SkillArchery); + void ProjectileAnimation(Mob* to, int item_id, bool IsArrow = false, float speed = 0, float angle = 0, float tilt = 0, float arc = 0, const char *IDFile = nullptr, EQ::skills::SkillType skillInUse = EQ::skills::SkillArchery); void SendAppearanceEffect(uint32 parm1, uint32 parm2, uint32 parm3, uint32 parm4, uint32 parm5, Client *specific_target=nullptr); void SendLevelAppearance(); void SendStunAppearance(); @@ -285,7 +285,7 @@ public: //Song bool UseBardSpellLogic(uint16 spell_id = 0xffff, int slot = -1); - bool ApplyNextBardPulse(uint16 spell_id, Mob *spell_target, EQEmu::spells::CastingSlot slot); + bool ApplyNextBardPulse(uint16 spell_id, Mob *spell_target, EQ::spells::CastingSlot slot); void BardPulse(uint16 spell_id, Mob *caster); //Spell @@ -309,31 +309,31 @@ public: int level_override = -1); int GetResist(uint8 resist_type); int ResistPhysical(int level_diff, uint8 caster_level); - int ResistElementalWeaponDmg(const EQEmu::ItemInstance *item); - int CheckBaneDamage(const EQEmu::ItemInstance *item); + int ResistElementalWeaponDmg(const EQ::ItemInstance *item); + int CheckBaneDamage(const EQ::ItemInstance *item); uint16 GetSpecializeSkillValue(uint16 spell_id) const; void SendSpellBarDisable(); void SendSpellBarEnable(uint16 spellid); void ZeroCastingVars(); virtual void SpellProcess(); - virtual bool CastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot = EQEmu::spells::CastingSlot::Item, int32 casttime = -1, + virtual bool CastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot = EQ::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 *resist_adjust = nullptr, uint32 aa_id = 0); - virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQEmu::spells::CastingSlot slot = EQEmu::spells::CastingSlot::Item, int32 casttime = -1, + virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQ::spells::CastingSlot slot = EQ::spells::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 timer = 0xFFFFFFFF, uint32 timer_duration = 0, int16 resist_adjust = 0, uint32 aa_id = 0); - void CastedSpellFinished(uint16 spell_id, uint32 target_id, EQEmu::spells::CastingSlot slot, uint16 mana_used, + void CastedSpellFinished(uint16 spell_id, uint32 target_id, EQ::spells::CastingSlot slot, uint16 mana_used, uint32 inventory_slot = 0xFFFFFFFF, int16 resist_adjust = 0); - bool SpellFinished(uint16 spell_id, Mob *target, EQEmu::spells::CastingSlot slot = EQEmu::spells::CastingSlot::Item, uint16 mana_used = 0, + bool SpellFinished(uint16 spell_id, Mob *target, EQ::spells::CastingSlot slot = EQ::spells::CastingSlot::Item, uint16 mana_used = 0, uint32 inventory_slot = 0xFFFFFFFF, int16 resist_adjust = 0, bool isproc = false, int level_override = -1); void SendBeginCast(uint16 spell_id, uint32 casttime); virtual bool SpellOnTarget(uint16 spell_id, Mob* spelltar, bool reflect = false, bool use_resist_adjust = false, int16 resist_adjust = 0, bool isproc = false, int level_override = -1); virtual bool SpellEffect(Mob* caster, uint16 spell_id, float partial = 100, int level_override = -1); virtual bool DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_center, - CastAction_type &CastAction, EQEmu::spells::CastingSlot slot, bool isproc = false); + CastAction_type &CastAction, EQ::spells::CastingSlot slot, bool isproc = false); virtual bool CheckFizzle(uint16 spell_id); virtual bool CheckSpellLevelRestriction(uint16 spell_id); virtual bool IsImmuneToSpell(uint16 spell_id, Mob *caster); @@ -432,7 +432,7 @@ public: void SetTwoHanderEquipped(bool val) { has_twohanderequipped = val; } bool CanFacestab() { return can_facestab; } void SetFacestab(bool val) { can_facestab = val; } - virtual uint16 GetSkill(EQEmu::skills::SkillType skill_num) const { return 0; } + virtual uint16 GetSkill(EQ::skills::SkillType skill_num) const { return 0; } virtual uint32 GetEquippedItemFromTextureSlot(uint8 material_slot) const { return(0); } virtual int32 GetEquipmentMaterial(uint8 material_slot) const; virtual int32 GetHerosForgeModel(uint8 material_slot) const; @@ -440,8 +440,8 @@ public: virtual uint32 IsEliteMaterialItem(uint8 material_slot) const; bool CanClassEquipItem(uint32 item_id); bool AffectedBySpellExcludingSlot(int slot, int effect); - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill) = 0; - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill) = 0; + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None) = 0; inline virtual void SetHP(int32 hp) { if (hp >= max_hp) current_hp = max_hp; else current_hp = hp;} bool ChangeHP(Mob* other, int32 amount, uint16 spell_id = 0, int8 buffslot = -1, bool iBuffTic = false); @@ -453,7 +453,7 @@ public: virtual inline uint8 GetBaseGender() const { return base_gender; } virtual uint16 GetFactionRace(); virtual inline uint16 GetDeity() const { return deity; } - virtual EQEmu::deity::DeityTypeBit GetDeityBit() { return EQEmu::deity::ConvertDeityTypeToDeityTypeBit((EQEmu::deity::DeityType)deity); } + virtual EQ::deity::DeityTypeBit GetDeityBit() { return EQ::deity::ConvertDeityTypeToDeityTypeBit((EQ::deity::DeityType)deity); } inline uint16 GetRace() const { return race; } inline uint16 GetModel() const { return (use_model == 0) ? race : use_model; } inline uint8 GetGender() const { return gender; } @@ -483,7 +483,7 @@ public: inline void ChangeDrakkinHeritage(uint8 in) { drakkin_heritage = in; } inline void ChangeDrakkinTattoo(uint8 in) { drakkin_tattoo = in; } inline void ChangeDrakkinDetails(uint8 in) { drakkin_details = in; } - inline uint32 GetArmorTint(uint8 i) const { return armor_tint.Slot[(i < EQEmu::textures::materialCount) ? i : 0].Color; } + inline uint32 GetArmorTint(uint8 i) const { return armor_tint.Slot[(i < EQ::textures::materialCount) ? i : 0].Color; } inline uint8 GetClass() const { return class_; } inline uint8 GetLevel() const { return level; } inline uint8 GetOrigLevel() const { return orig_level; } @@ -680,7 +680,7 @@ public: static uint8 GetDefaultGender(uint16 in_race, uint8 in_gender = 0xFF); static bool IsPlayerRace(uint16 in_race); uint16 GetSkillByItemType(int ItemType); - uint8 GetItemTypeBySkill(EQEmu::skills::SkillType skill); + uint8 GetItemTypeBySkill(EQ::skills::SkillType skill); virtual void MakePet(uint16 spell_id, const char* pettype, const char *petname = nullptr); virtual void MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, const char *petname = nullptr, float in_size = 0.0f); bool IsWarriorClass() const; @@ -709,7 +709,7 @@ public: inline AuraMgr &GetAuraMgr() { return aura_mgr; } // mainly used for zone db loading/saving //Procs - void TriggerDefensiveProcs(Mob *on, uint16 hand = EQEmu::invslot::slotPrimary, bool FromSkillProc = false, int damage = 0); + void TriggerDefensiveProcs(Mob *on, uint16 hand = EQ::invslot::slotPrimary, bool FromSkillProc = false, int damage = 0); bool AddRangedProc(uint16 spell_id, uint16 iChance = 3, uint16 base_spell_id = SPELL_UNKNOWN); bool RemoveRangedProc(uint16 spell_id, bool bAll = false); bool HasRangedProcs() const; @@ -796,7 +796,7 @@ public: int32 GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining); int32 GetFcDamageAmtIncoming(Mob *caster, uint32 spell_id, bool use_skill = false, uint16 skill=0); int32 GetFocusIncoming(focusType type, int effect, Mob *caster, uint32 spell_id); - int16 GetSkillDmgTaken(const EQEmu::skills::SkillType skill_used, ExtraAttackOptions *opts = nullptr); + int16 GetSkillDmgTaken(const EQ::skills::SkillType skill_used, ExtraAttackOptions *opts = nullptr); void DoKnockback(Mob *caster, uint32 pushback, uint32 pushup); int16 CalcResistChanceBonus(); int16 CalcFearResistChance(); @@ -829,8 +829,8 @@ public: inline void SetSpellPowerDistanceMod(int16 value) { SpellPowerDistanceMod = value; }; int32 GetSpellStat(uint32 spell_id, const char *identifier, uint8 slot = 0); - void ModSkillDmgTaken(EQEmu::skills::SkillType skill_num, int value); - int16 GetModSkillDmgTaken(const EQEmu::skills::SkillType skill_num); + void ModSkillDmgTaken(EQ::skills::SkillType skill_num, int value); + int16 GetModSkillDmgTaken(const EQ::skills::SkillType skill_num); void ModVulnerability(uint8 resist, int16 value); int16 GetModVulnerability(const uint8 resist); @@ -856,17 +856,17 @@ public: bool IsDestructibleObject() { return destructibleobject; } void SetDestructibleObject(bool in) { destructibleobject = in; } - inline uint8 GetInnateLightType() { return m_Light.Type[EQEmu::lightsource::LightInnate]; } - inline uint8 GetEquipmentLightType() { return m_Light.Type[EQEmu::lightsource::LightEquipment]; } - inline uint8 GetSpellLightType() { return m_Light.Type[EQEmu::lightsource::LightSpell]; } + inline uint8 GetInnateLightType() { return m_Light.Type[EQ::lightsource::LightInnate]; } + inline uint8 GetEquipmentLightType() { return m_Light.Type[EQ::lightsource::LightEquipment]; } + inline uint8 GetSpellLightType() { return m_Light.Type[EQ::lightsource::LightSpell]; } - virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = 0; m_Light.Level[EQEmu::lightsource::LightEquipment] = 0; } - inline void SetSpellLightType(uint8 light_type) { m_Light.Type[EQEmu::lightsource::LightSpell] = (light_type & 0x0F); m_Light.Level[EQEmu::lightsource::LightSpell] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightSpell]); } + virtual void UpdateEquipmentLight() { m_Light.Type[EQ::lightsource::LightEquipment] = 0; m_Light.Level[EQ::lightsource::LightEquipment] = 0; } + inline void SetSpellLightType(uint8 light_type) { m_Light.Type[EQ::lightsource::LightSpell] = (light_type & 0x0F); m_Light.Level[EQ::lightsource::LightSpell] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightSpell]); } - inline uint8 GetActiveLightType() { return m_Light.Type[EQEmu::lightsource::LightActive]; } + inline uint8 GetActiveLightType() { return m_Light.Type[EQ::lightsource::LightActive]; } bool UpdateActiveLight(); // returns true if change, false if no change - EQEmu::LightSourceProfile* GetLightProfile() { return &m_Light; } + EQ::LightSourceProfile* GetLightProfile() { return &m_Light; } Mob* GetPet(); void SetPet(Mob* newpet); @@ -917,7 +917,7 @@ public: virtual int GetHaste(); int32 GetMeleeMitigation(); - uint8 GetWeaponDamageBonus(const EQEmu::ItemData* weapon, bool offhand = false); + uint8 GetWeaponDamageBonus(const EQ::ItemData* weapon, bool offhand = false); const DamageTable &GetDamageTable() const; void ApplyDamageTable(DamageHitInfo &hit); virtual int GetHandToHandDamage(void); @@ -942,11 +942,11 @@ public: int32 AffectMagicalDamage(int32 damage, uint16 spell_id, const bool iBuffTic, Mob* attacker); int32 ReduceAllDamage(int32 damage); - void DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int base_damage, int min_damage = 0, int32 hate_override = -1, int ReuseTime = 10); - virtual void DoThrowingAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon = nullptr, const EQEmu::ItemData* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f); - void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0); - virtual void DoArcheryAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon = nullptr, const EQEmu::ItemInstance* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQEmu::ItemData *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f); - bool TryProjectileAttack(Mob* other, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, uint16 weapon_dmg, const EQEmu::ItemInstance* RangeWeapon, const EQEmu::ItemInstance* Ammo, int AmmoSlot, float speed); + void DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int base_damage, int min_damage = 0, int32 hate_override = -1, int ReuseTime = 10); + virtual void DoThrowingAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemData* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f); + void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQ::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0); + virtual void DoArcheryAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemInstance* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQ::ItemData *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f); + bool TryProjectileAttack(Mob* other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, uint16 weapon_dmg, const EQ::ItemInstance* RangeWeapon, const EQ::ItemInstance* Ammo, int AmmoSlot, float speed); void ProjectileAttack(); inline bool HasProjectileAttack() const { return ActiveProjectileATK; } inline void SetProjectileAttack(bool value) { ActiveProjectileATK = value; } @@ -1083,7 +1083,7 @@ public: // HP Event inline int GetNextHPEvent() const { return nexthpevent; } void SetNextHPEvent( int hpevent ); - void SendItemAnimation(Mob *to, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, float velocity = 4.0); + void SendItemAnimation(Mob *to, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, float velocity = 4.0); inline int& GetNextIncHPEvent() { return nextinchpevent; } void SetNextIncHPEvent( int inchpevent ); @@ -1136,7 +1136,7 @@ public: bool HasSpellEffect(int effectid); int mod_effect_value(int effect_value, uint16 spell_id, int effect_type, Mob* caster, uint16 caster_id); - float mod_hit_chance(float chancetohit, EQEmu::skills::SkillType skillinuse, Mob* attacker); + float mod_hit_chance(float chancetohit, EQ::skills::SkillType skillinuse, Mob* attacker); float mod_riposte_chance(float ripostchance, Mob* attacker); float mod_block_chance(float blockchance, Mob* attacker); float mod_parry_chance(float parrychance, Mob* attacker); @@ -1147,11 +1147,11 @@ public: int32 mod_kick_damage(int32 dmg); int32 mod_bash_damage(int32 dmg); int32 mod_frenzy_damage(int32 dmg); - int32 mod_monk_special_damage(int32 ndamage, EQEmu::skills::SkillType skill_type); + int32 mod_monk_special_damage(int32 ndamage, EQ::skills::SkillType skill_type); int32 mod_backstab_damage(int32 ndamage); - int mod_archery_bonus_chance(int bonuschance, const EQEmu::ItemInstance* RangeWeapon); - uint32 mod_archery_bonus_damage(uint32 MaxDmg, const EQEmu::ItemInstance* RangeWeapon); - int32 mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQEmu::ItemInstance* RangeWeapon); + int mod_archery_bonus_chance(int bonuschance, const EQ::ItemInstance* RangeWeapon); + uint32 mod_archery_bonus_damage(uint32 MaxDmg, const EQ::ItemInstance* RangeWeapon); + int32 mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQ::ItemInstance* RangeWeapon); uint16 mod_throwing_damage(uint16 MaxDmg); int32 mod_cast_time(int32 cast_time); int mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id); @@ -1166,7 +1166,7 @@ public: uint32 Tune_GetMeanDamage(Mob* GM, Mob *attacker, int32 damage, int32 minhit, ExtraAttackOptions *opts = nullptr, int Msg = 0,int ac_override=0, int atk_override=0, int add_ac=0, int add_atk = 0); void Tune_FindATKByPctMitigation(Mob* defender, Mob *attacker, float pct_mitigation, int interval = 50, int max_loop = 100, int ac_override=0,int Msg =0); void Tune_FindACByPctMitigation(Mob* defender, Mob *attacker, float pct_mitigation, int interval = 50, int max_loop = 100, int atk_override=0,int Msg =0); - float Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::SkillType skillinuse, int Hand, int16 chance_mod, int Msg = 1, int acc_override = 0, int avoid_override = 0, int add_acc = 0, int add_avoid = 0); + float Tune_CheckHitChance(Mob* defender, Mob* attacker, EQ::skills::SkillType skillinuse, int Hand, int16 chance_mod, int Msg = 1, int acc_override = 0, int avoid_override = 0, int add_acc = 0, int add_avoid = 0); void Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int avoid_override, int Msg = 0); void Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_chance, int interval, int max_loop, int acc_override, int Msg = 0); @@ -1187,8 +1187,8 @@ public: void AddAssistCap() { ++npc_assist_cap; } void DelAssistCap() { --npc_assist_cap; } void ResetAssistCap() { npc_assist_cap = 0; } - int GetWeaponDamage(Mob *against, const EQEmu::ItemData *weapon_item); - int GetWeaponDamage(Mob *against, const EQEmu::ItemInstance *weapon_item, uint32 *hate = nullptr); + int GetWeaponDamage(Mob *against, const EQ::ItemData *weapon_item); + int GetWeaponDamage(Mob *against, const EQ::ItemInstance *weapon_item, uint32 *hate = nullptr); int32 GetHPRegen() const; int32 GetManaRegen() const; @@ -1214,7 +1214,7 @@ public: #endif protected: - void CommonDamage(Mob* other, int &damage, const uint16 spell_id, const EQEmu::skills::SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks specal = eSpecialAttacks::None); + void CommonDamage(Mob* other, int &damage, const uint16 spell_id, const EQ::skills::SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks specal = eSpecialAttacks::None); static uint16 GetProcID(uint16 spell_id, uint8 effect_index); float _GetMovementSpeed(int mod) const; int _GetWalkSpeed() const; @@ -1231,7 +1231,7 @@ protected: std::vector RampageArray; std::map m_EntityVariables; - int16 SkillDmgTaken_Mod[EQEmu::skills::HIGHEST_SKILL + 2]; + int16 SkillDmgTaken_Mod[EQ::skills::HIGHEST_SKILL + 2]; int16 Vulnerability_Mod[HIGHEST_RESIST+2]; bool m_AllowBeneficial; bool m_DisableMelee; @@ -1341,19 +1341,19 @@ protected: void TrySkillProc(Mob *on, uint16 skill, uint16 ReuseTime, bool Success = false, uint16 hand = 0, bool IsDefensive = false); // hand = SlotCharm? bool PassLimitToSkill(uint16 spell_id, uint16 skill); bool PassLimitClass(uint32 Classes_, uint16 Class_); - void TryDefensiveProc(Mob *on, uint16 hand = EQEmu::invslot::slotPrimary); - void TryWeaponProc(const EQEmu::ItemInstance* inst, const EQEmu::ItemData* weapon, Mob *on, uint16 hand = EQEmu::invslot::slotPrimary); - void TrySpellProc(const EQEmu::ItemInstance* inst, const EQEmu::ItemData* weapon, Mob *on, uint16 hand = EQEmu::invslot::slotPrimary); - void TryWeaponProc(const EQEmu::ItemInstance* weapon, Mob *on, uint16 hand = EQEmu::invslot::slotPrimary); - void ExecWeaponProc(const EQEmu::ItemInstance* weapon, uint16 spell_id, Mob *on, int level_override = -1); - virtual float GetProcChances(float ProcBonus, uint16 hand = EQEmu::invslot::slotPrimary); - virtual float GetDefensiveProcChances(float &ProcBonus, float &ProcChance, uint16 hand = EQEmu::invslot::slotPrimary, Mob *on = nullptr); + void TryDefensiveProc(Mob *on, uint16 hand = EQ::invslot::slotPrimary); + void TryWeaponProc(const EQ::ItemInstance* inst, const EQ::ItemData* weapon, Mob *on, uint16 hand = EQ::invslot::slotPrimary); + void TrySpellProc(const EQ::ItemInstance* inst, const EQ::ItemData* weapon, Mob *on, uint16 hand = EQ::invslot::slotPrimary); + void TryWeaponProc(const EQ::ItemInstance* weapon, Mob *on, uint16 hand = EQ::invslot::slotPrimary); + void ExecWeaponProc(const EQ::ItemInstance* weapon, uint16 spell_id, Mob *on, int level_override = -1); + virtual float GetProcChances(float ProcBonus, uint16 hand = EQ::invslot::slotPrimary); + virtual float GetDefensiveProcChances(float &ProcBonus, float &ProcChance, uint16 hand = EQ::invslot::slotPrimary, Mob *on = nullptr); virtual float GetSkillProcChances(uint16 ReuseTime, uint16 hand = 0); // hand = MainCharm? uint16 GetWeaponSpeedbyHand(uint16 hand); #ifdef BOTS virtual #endif - int GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target = nullptr); + int GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target = nullptr); virtual int16 GetFocusEffect(focusType type, uint16 spell_id) { return 0; } void CalculateNewFearpoint(); float FindGroundZ(float new_x, float new_y, float z_offset=0.0); @@ -1379,7 +1379,7 @@ protected: // ideally we should use real models, but this should be quick and work mostly glm::vec4 m_CollisionBox[COLLISION_BOX_SIZE]; - EQEmu::LightSourceProfile m_Light; + EQ::LightSourceProfile m_Light; float fixedZ; EmuAppearance _appearance; @@ -1403,7 +1403,7 @@ protected: int attacked_count; bool delaytimer; uint16 casting_spell_targetid; - EQEmu::spells::CastingSlot casting_spell_slot; + EQ::spells::CastingSlot casting_spell_slot; uint16 casting_spell_mana; uint32 casting_spell_inventory_slot; uint32 casting_spell_timer; @@ -1413,7 +1413,7 @@ protected: uint32 casting_spell_aa_id; bool casting_spell_checks; uint16 bardsong; - EQEmu::spells::CastingSlot bardsong_slot; + EQ::spells::CastingSlot bardsong_slot; uint32 bardsong_target_id; bool ActiveProjectileATK; @@ -1438,7 +1438,7 @@ protected: uint32 drakkin_heritage; uint32 drakkin_tattoo; uint32 drakkin_details; - EQEmu::TintProfile armor_tint; + EQ::TintProfile armor_tint; uint8 aa_title; @@ -1567,7 +1567,7 @@ protected: glm::vec3 m_TargetRing; // we might want to do this differently, we gotta do max NPC buffs ... which is 97 - uint32 m_spellHitsLeft[EQEmu::spells::TOTAL_BUFFS]; // Used to track which spells will have their numhits incremented when spell finishes casting + uint32 m_spellHitsLeft[EQ::spells::TOTAL_BUFFS]; // Used to track which spells will have their numhits incremented when spell finishes casting GravityBehavior flymode; bool m_targetable; int QGVarDuration(const char *fmt); diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index b687c0c8a..f37d70292 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -144,7 +144,7 @@ bool NPC::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes, bool bInnates int min_hp = AIspells[i].min_hp; // well 0 is default, so no special case here int max_hp = AIspells[i].max_hp ? AIspells[i].max_hp : RuleI(Spells, AI_HealHPPct); - if (EQEmu::ValueWithin(hp_ratio, min_hp, max_hp) || (tar->IsClient() && hp_ratio <= 99)) { // not sure about client bit, leaving it + if (EQ::ValueWithin(hp_ratio, min_hp, max_hp) || (tar->IsClient() && hp_ratio <= 99)) { // not sure about client bit, leaving it uint32 tempTime = 0; AIDoSpellCast(i, tar, mana_cost, &tempTime); tar->SetDontHealMeBefore(tempTime); @@ -375,7 +375,7 @@ bool NPC::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain #endif casting_spell_AIindex = i; - return CastSpell(AIspells[i].spellid, tar->GetID(), EQEmu::spells::CastingSlot::Gem2, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust)); + return CastSpell(AIspells[i].spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust)); } void Mob::AI_Init() @@ -635,11 +635,11 @@ void Client::AI_SpellCast() } uint32 spell_to_cast = 0xFFFFFFFF; - EQEmu::spells::CastingSlot slot_to_use = EQEmu::spells::CastingSlot::Item; + EQ::spells::CastingSlot slot_to_use = EQ::spells::CastingSlot::Item; if(valid_spells.size() == 1) { spell_to_cast = valid_spells[0]; - slot_to_use = static_cast(slots[0]); + slot_to_use = static_cast(slots[0]); } else if(valid_spells.empty()) { @@ -649,7 +649,7 @@ void Client::AI_SpellCast() { uint32 idx = zone->random.Int(0, (valid_spells.size()-1)); spell_to_cast = valid_spells[idx]; - slot_to_use = static_cast(slots[idx]); + slot_to_use = static_cast(slots[idx]); } if(IsMezSpell(spell_to_cast) || IsFearSpell(spell_to_cast)) @@ -803,7 +803,7 @@ void Client::AI_Process() if (GetTarget() && !IsStunned() && !IsMezzed() && !GetFeigned()) { if (attack_timer.Check()) { // Should charmed clients not be procing? - DoAttackRounds(GetTarget(), EQEmu::invslot::slotPrimary); + DoAttackRounds(GetTarget(), EQ::invslot::slotPrimary); } } @@ -811,7 +811,7 @@ void Client::AI_Process() if (attack_dw_timer.Check()) { if (CheckDualWield()) { // Should charmed clients not be procing? - DoAttackRounds(GetTarget(), EQEmu::invslot::slotSecondary); + DoAttackRounds(GetTarget(), EQ::invslot::slotSecondary); } } } @@ -1159,7 +1159,7 @@ void Mob::AI_Process() { //try main hand first if (attack_timer.Check()) { DoMainHandAttackRounds(target); - TriggerDefensiveProcs(target, EQEmu::invslot::slotPrimary, false); + TriggerDefensiveProcs(target, EQ::invslot::slotPrimary, false); bool specialed = false; // NPCs can only do one of these a round if (GetSpecialAbility(SPECATK_FLURRY)) { @@ -1549,10 +1549,10 @@ void NPC::AI_DoMovement() { // Check if we're already moving to a WP // If so, if we're not moving we have arrived and need to set delay - if (GetCWP() == EQEmu::WaypointStatus::RoamBoxPauseInProgress && !IsMoving()) { + if (GetCWP() == EQ::WaypointStatus::RoamBoxPauseInProgress && !IsMoving()) { // We have arrived - int roambox_move_delay = EQEmu::ClampLower(GetRoamboxDelay(), GetRoamboxMinDelay()); + int roambox_move_delay = EQ::ClampLower(GetRoamboxDelay(), GetRoamboxMinDelay()); int move_delay_max = (roambox_move_delay > 0 ? roambox_move_delay : (int) GetRoamboxMinDelay() * 4); int random_timer = RandomTimer( GetRoamboxMinDelay(), @@ -1579,8 +1579,8 @@ void NPC::AI_DoMovement() { auto move_x = static_cast(zone->random.Real(-roambox_distance, roambox_distance)); auto move_y = static_cast(zone->random.Real(-roambox_distance, roambox_distance)); - roambox_destination_x = EQEmu::Clamp((GetX() + move_x), roambox_min_x, roambox_max_x); - roambox_destination_y = EQEmu::Clamp((GetY() + move_y), roambox_min_y, roambox_max_y); + roambox_destination_x = EQ::Clamp((GetX() + move_x), roambox_min_x, roambox_max_x); + roambox_destination_y = EQ::Clamp((GetY() + move_y), roambox_min_y, roambox_max_y); /** * If our roambox was configured with large distances, chances of hitting the min or max end of @@ -1672,7 +1672,7 @@ void NPC::AI_DoMovement() { roambox_destination_z ); - SetCurrentWP(EQEmu::WaypointStatus::RoamBoxPauseInProgress); + SetCurrentWP(EQ::WaypointStatus::RoamBoxPauseInProgress); NavigateTo(roambox_destination_x, roambox_destination_y, roambox_destination_z); } @@ -1686,7 +1686,7 @@ void NPC::AI_DoMovement() { int32 gridno = CastToNPC()->GetGrid(); - if (gridno > 0 || cur_wp == EQEmu::WaypointStatus::QuestControlNoGrid) { + if (gridno > 0 || cur_wp == EQ::WaypointStatus::QuestControlNoGrid) { if (pause_timer_complete == true) { // time to pause at wp is over AI_SetupNextWaypoint(); } // endif (pause_timer_complete==true) @@ -1736,7 +1736,7 @@ void NPC::AI_DoMovement() { // as that is where roamer is unset and we don't want // the next trip through to move again based on grid stuff. doMove = false; - if (cur_wp == EQEmu::WaypointStatus::QuestControlNoGrid) { + if (cur_wp == EQ::WaypointStatus::QuestControlNoGrid) { AI_SetupNextWaypoint(); } @@ -1830,7 +1830,7 @@ void NPC::AI_SetupNextWaypoint() { pause_timer_complete = false; LogPathing("We are departing waypoint [{}]", cur_wp); //if we were under quest control (with no grid), we are done now.. - if (cur_wp == EQEmu::WaypointStatus::QuestControlNoGrid) { + if (cur_wp == EQ::WaypointStatus::QuestControlNoGrid) { LogPathing("Non-grid quest mob has reached its quest ordered waypoint. Leaving pathing mode"); roamer = false; cur_wp = 0; @@ -2107,7 +2107,7 @@ bool Mob::Flurry(ExtraAttackOptions *opts) int num_attacks = GetSpecialAbilityParam(SPECATK_FLURRY, 1); num_attacks = num_attacks > 0 ? num_attacks : RuleI(Combat, MaxFlurryHits); for (int i = 0; i < num_attacks; i++) - Attack(target, EQEmu::invslot::slotPrimary, false, false, false, opts); + Attack(target, EQ::invslot::slotPrimary, false, false, false, opts); } return true; } diff --git a/zone/mob_appearance.cpp b/zone/mob_appearance.cpp index fe4e07eee..88b52b774 100644 --- a/zone/mob_appearance.cpp +++ b/zone/mob_appearance.cpp @@ -52,47 +52,47 @@ void Mob::SetMobTextureProfile(uint8 material_slot, uint16 texture, uint32 color ); switch (material_slot) { - case EQEmu::textures::armorHead: + case EQ::textures::armorHead: mob_texture_profile.Head.Material = texture; mob_texture_profile.Head.HerosForgeModel = hero_forge_model; mob_texture_profile.Head.Color = color; break; - case EQEmu::textures::armorChest: + case EQ::textures::armorChest: mob_texture_profile.Chest.Material = texture; mob_texture_profile.Chest.HerosForgeModel = hero_forge_model; mob_texture_profile.Chest.Color = color; break; - case EQEmu::textures::armorArms: + case EQ::textures::armorArms: mob_texture_profile.Arms.Material = texture; mob_texture_profile.Arms.HerosForgeModel = hero_forge_model; mob_texture_profile.Arms.Color = color; break; - case EQEmu::textures::armorWrist: + case EQ::textures::armorWrist: mob_texture_profile.Wrist.Material = texture; mob_texture_profile.Wrist.HerosForgeModel = hero_forge_model; mob_texture_profile.Wrist.Color = color; break; - case EQEmu::textures::armorHands: + case EQ::textures::armorHands: mob_texture_profile.Hands.Material = texture; mob_texture_profile.Hands.HerosForgeModel = hero_forge_model; mob_texture_profile.Hands.Color = color; break; - case EQEmu::textures::armorLegs: + case EQ::textures::armorLegs: mob_texture_profile.Legs.Material = texture; mob_texture_profile.Legs.HerosForgeModel = hero_forge_model; mob_texture_profile.Legs.Color = color; break; - case EQEmu::textures::armorFeet: + case EQ::textures::armorFeet: mob_texture_profile.Feet.Material = texture; mob_texture_profile.Feet.HerosForgeModel = hero_forge_model; mob_texture_profile.Feet.Color = color; break; - case EQEmu::textures::weaponPrimary: + case EQ::textures::weaponPrimary: mob_texture_profile.Primary.Material = texture; mob_texture_profile.Primary.HerosForgeModel = hero_forge_model; mob_texture_profile.Primary.Color = color; break; - case EQEmu::textures::weaponSecondary: + case EQ::textures::weaponSecondary: mob_texture_profile.Secondary.Material = texture; mob_texture_profile.Secondary.HerosForgeModel = hero_forge_model; mob_texture_profile.Secondary.Color = color; @@ -111,23 +111,23 @@ void Mob::SetMobTextureProfile(uint8 material_slot, uint16 texture, uint32 color int32 Mob::GetTextureProfileMaterial(uint8 material_slot) const { switch (material_slot) { - case EQEmu::textures::armorHead: + case EQ::textures::armorHead: return mob_texture_profile.Head.Material; - case EQEmu::textures::armorChest: + case EQ::textures::armorChest: return mob_texture_profile.Chest.Material; - case EQEmu::textures::armorArms: + case EQ::textures::armorArms: return mob_texture_profile.Arms.Material; - case EQEmu::textures::armorWrist: + case EQ::textures::armorWrist: return mob_texture_profile.Wrist.Material; - case EQEmu::textures::armorHands: + case EQ::textures::armorHands: return mob_texture_profile.Hands.Material; - case EQEmu::textures::armorLegs: + case EQ::textures::armorLegs: return mob_texture_profile.Legs.Material; - case EQEmu::textures::armorFeet: + case EQ::textures::armorFeet: return mob_texture_profile.Feet.Material; - case EQEmu::textures::weaponPrimary: + case EQ::textures::weaponPrimary: return mob_texture_profile.Primary.Material; - case EQEmu::textures::weaponSecondary: + case EQ::textures::weaponSecondary: return mob_texture_profile.Secondary.Material; default: return 0; @@ -143,23 +143,23 @@ int32 Mob::GetTextureProfileMaterial(uint8 material_slot) const int32 Mob::GetTextureProfileColor(uint8 material_slot) const { switch (material_slot) { - case EQEmu::textures::armorHead: + case EQ::textures::armorHead: return mob_texture_profile.Head.Color; - case EQEmu::textures::armorChest: + case EQ::textures::armorChest: return mob_texture_profile.Chest.Color; - case EQEmu::textures::armorArms: + case EQ::textures::armorArms: return mob_texture_profile.Arms.Color; - case EQEmu::textures::armorWrist: + case EQ::textures::armorWrist: return mob_texture_profile.Wrist.Color; - case EQEmu::textures::armorHands: + case EQ::textures::armorHands: return mob_texture_profile.Hands.Color; - case EQEmu::textures::armorLegs: + case EQ::textures::armorLegs: return mob_texture_profile.Legs.Color; - case EQEmu::textures::armorFeet: + case EQ::textures::armorFeet: return mob_texture_profile.Feet.Color; - case EQEmu::textures::weaponPrimary: + case EQ::textures::weaponPrimary: return mob_texture_profile.Primary.Color; - case EQEmu::textures::weaponSecondary: + case EQ::textures::weaponSecondary: return mob_texture_profile.Secondary.Color; default: return 0; @@ -175,23 +175,23 @@ int32 Mob::GetTextureProfileColor(uint8 material_slot) const int32 Mob::GetTextureProfileHeroForgeModel(uint8 material_slot) const { switch (material_slot) { - case EQEmu::textures::armorHead: + case EQ::textures::armorHead: return mob_texture_profile.Head.HerosForgeModel; - case EQEmu::textures::armorChest: + case EQ::textures::armorChest: return mob_texture_profile.Chest.HerosForgeModel; - case EQEmu::textures::armorArms: + case EQ::textures::armorArms: return mob_texture_profile.Arms.HerosForgeModel; - case EQEmu::textures::armorWrist: + case EQ::textures::armorWrist: return mob_texture_profile.Wrist.HerosForgeModel; - case EQEmu::textures::armorHands: + case EQ::textures::armorHands: return mob_texture_profile.Hands.HerosForgeModel; - case EQEmu::textures::armorLegs: + case EQ::textures::armorLegs: return mob_texture_profile.Legs.HerosForgeModel; - case EQEmu::textures::armorFeet: + case EQ::textures::armorFeet: return mob_texture_profile.Feet.HerosForgeModel; - case EQEmu::textures::weaponPrimary: + case EQ::textures::weaponPrimary: return mob_texture_profile.Primary.HerosForgeModel; - case EQEmu::textures::weaponSecondary: + case EQ::textures::weaponSecondary: return mob_texture_profile.Secondary.HerosForgeModel; default: return 0; @@ -230,18 +230,18 @@ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const * Handle primary / secondary texture */ bool is_primary_or_secondary_weapon = - material_slot == EQEmu::textures::weaponPrimary || - material_slot == EQEmu::textures::weaponSecondary; + material_slot == EQ::textures::weaponPrimary || + material_slot == EQ::textures::weaponSecondary; if (is_primary_or_secondary_weapon) { if (this->IsClient()) { - int16 inventory_slot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + int16 inventory_slot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if (inventory_slot == INVALID_INDEX) { return 0; } - const EQEmu::ItemInstance *item_instance = CastToClient()->m_inv[inventory_slot]; + const EQ::ItemInstance *item_instance = CastToClient()->m_inv[inventory_slot]; if (item_instance) { if (item_instance->GetOrnamentationAug(ornamentation_augment_type)) { item = item_instance->GetOrnamentationAug(ornamentation_augment_type)->GetItem(); @@ -273,7 +273,7 @@ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const */ uint32 Mob::GetEquipmentColor(uint8 material_slot) const { - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; if (armor_tint.Slot[material_slot].Color) { return armor_tint.Slot[material_slot].Color; @@ -294,15 +294,15 @@ uint32 Mob::GetEquipmentColor(uint8 material_slot) const int32 Mob::GetHerosForgeModel(uint8 material_slot) const { uint32 hero_model = 0; - if (material_slot >= 0 && material_slot < EQEmu::textures::weaponPrimary) { + if (material_slot >= 0 && material_slot < EQ::textures::weaponPrimary) { uint32 ornamentation_aug_type = RuleI(Character, OrnamentationAugmentType); - const EQEmu::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); - int16 invslot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + const EQ::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(material_slot)); + int16 invslot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if (item != nullptr && invslot != INVALID_INDEX) { if (IsClient()) { - const EQEmu::ItemInstance *inst = CastToClient()->m_inv[invslot]; + const EQ::ItemInstance *inst = CastToClient()->m_inv[invslot]; if (inst) { if (inst->GetOrnamentationAug(ornamentation_aug_type)) { item = inst->GetOrnamentationAug(ornamentation_aug_type)->GetItem(); @@ -352,7 +352,7 @@ uint32 NPC::GetEquippedItemFromTextureSlot(uint8 material_slot) const return 0; } - int16 inventory_slot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + int16 inventory_slot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if (inventory_slot == INVALID_INDEX) { return 0; } @@ -383,8 +383,8 @@ void Mob::SendArmorAppearance(Client *one_client) if (IsPlayerRace(race)) { if (!IsClient()) { - for (uint8 i = 0; i <= EQEmu::textures::materialCount; ++i) { - const EQEmu::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(i)); + for (uint8 i = 0; i <= EQ::textures::materialCount; ++i) { + const EQ::ItemData *item = database.GetItem(GetEquippedItemFromTextureSlot(i)); if (item != nullptr) { SendWearChange(i, one_client); } @@ -392,7 +392,7 @@ void Mob::SendArmorAppearance(Client *one_client) } } - for (uint8 i = 0; i <= EQEmu::textures::materialCount; ++i) { + for (uint8 i = 0; i <= EQ::textures::materialCount; ++i) { if (GetTextureProfileMaterial(i)) { SendWearChange(i, one_client); } @@ -419,7 +419,7 @@ void Mob::SendWearChange(uint8 material_slot, Client *one_client) #ifdef BOTS if (IsBot()) { - auto item_inst = CastToBot()->GetBotItem(EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot)); + auto item_inst = CastToBot()->GetBotItem(EQ::InventoryProfile::CalcSlotFromMaterial(material_slot)); if (item_inst) wear_change->color.Color = item_inst->GetColor(); else diff --git a/zone/mob_info.cpp b/zone/mob_info.cpp index edac37768..95f04edec 100644 --- a/zone/mob_info.cpp +++ b/zone/mob_info.cpp @@ -230,11 +230,11 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut } if (attribute == "tohit") { - return std::to_string(mob->compute_tohit(EQEmu::skills::SkillHandtoHand)); + return std::to_string(mob->compute_tohit(EQ::skills::SkillHandtoHand)); } if (attribute == "total_to_hit") { - return std::to_string(mob->GetTotalToHit(EQEmu::skills::SkillHandtoHand, 0)); + return std::to_string(mob->GetTotalToHit(EQ::skills::SkillHandtoHand, 0)); } if (attribute == "defense") { @@ -246,7 +246,7 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut } if (attribute == "offense") { - return std::to_string(mob->offense(EQEmu::skills::SkillHandtoHand)); + return std::to_string(mob->offense(EQ::skills::SkillHandtoHand)); } if (attribute == "mitigation_ac") { @@ -606,24 +606,24 @@ inline void NPCCommandsMenu(Client* client, NPC* npc) std::string menu_commands; if (npc->GetGrid() > 0) { - menu_commands += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#grid show", false, "Grid Points") + "] "; + menu_commands += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#grid show", false, "Grid Points") + "] "; } if (npc->GetEmoteID() > 0) { std::string saylink = StringFormat("#emotesearch %u", npc->GetEmoteID()); - menu_commands += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Emotes") + "] "; + menu_commands += "[" + EQ::SayLinkEngine::GenerateQuestSaylink(saylink, false, "Emotes") + "] "; } if (npc->GetLoottableID() > 0) { - menu_commands += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#npcloot show", false, "Loot") + "] "; + menu_commands += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#npcloot show", false, "Loot") + "] "; } if (npc->IsProximitySet()) { - menu_commands += "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#proximity show", false, "Proximity") + "] "; + menu_commands += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#proximity show", false, "Proximity") + "] "; } if (menu_commands.length() > 0) { - std::string dev_menu = "[" + EQEmu::SayLinkEngine::GenerateQuestSaylink("#devtools", false, "DevTools") + "] ";; + std::string dev_menu = "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools", false, "DevTools") + "] ";; client->Message(Chat::White, "| %s [Show Commands] %s", dev_menu.c_str(), menu_commands.c_str()); } } @@ -823,7 +823,7 @@ void Mob::DisplayInfo(Mob *mob) client->SendFullPopup( "GM: Entity Info", window_text.c_str(), - EQEmu::popupresponse::MOB_INFO_DISMISS, + EQ::popupresponse::MOB_INFO_DISMISS, 0, 100, 0, diff --git a/zone/mod_functions.cpp b/zone/mod_functions.cpp index ca9a5e107..b0b335a4e 100644 --- a/zone/mod_functions.cpp +++ b/zone/mod_functions.cpp @@ -9,7 +9,7 @@ class Spawn2; struct Consider_Struct; struct DBTradeskillRecipe_Struct; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -29,7 +29,7 @@ void Zone::mod_repop() { return; } void NPC::mod_prespawn(Spawn2 *sp) { return; } //Base damage from NPC::Attack -int NPC::mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemData* weapon, Mob* other) { return(damage); } +int NPC::mod_npc_damage(int damage, EQ::skills::SkillType skillinuse, int hand, const EQ::ItemData* weapon, Mob* other) { return(damage); } //Mob c has been given credit for a kill. This is called after the regular EVENT_KILLED_MERIT event. void NPC::mod_npc_killed_merit(Mob* c) { return; } @@ -38,7 +38,7 @@ void NPC::mod_npc_killed_merit(Mob* c) { return; } void NPC::mod_npc_killed(Mob* oos) { return; } //Base damage from Client::Attack - can cover myriad skill types -int Client::mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemInstance* weapon, Mob* other) { return(damage); } +int Client::mod_client_damage(int damage, EQ::skills::SkillType skillinuse, int hand, const EQ::ItemInstance* weapon, Mob* other) { return(damage); } //message is char[4096], don't screw it up. Return true for normal behavior, false to return immediately. // Channels: @@ -58,7 +58,7 @@ bool Client::mod_client_message(char* message, uint8 chan_num) { return(true); } //Skillup override. When this is called the regular skillup check has failed. Return false to proceed with default behavior. //This will NOT allow a client to increase skill past a cap. -bool Client::mod_can_increase_skill(EQEmu::skills::SkillType skillid, Mob* against_who) { return(false); } +bool Client::mod_can_increase_skill(EQ::skills::SkillType skillid, Mob* against_who) { return(false); } //chance of general skill increase, rolled against 0-99 where higher chance is better. int16 Client::mod_increase_skill_chance(int16 chance, Mob* against_who) { return(chance); } @@ -91,7 +91,7 @@ float Client::mod_tradeskill_chance(float chance, DBTradeskillRecipe_Struct *spe float Client::mod_tradeskill_skillup(float chance_stage2) { return(chance_stage2); } //Tribute value override -int32 Client::mod_tribute_item_value(int32 pts, const EQEmu::ItemInstance* item) { return(pts); } +int32 Client::mod_tribute_item_value(int32 pts, const EQ::ItemInstance* item) { return(pts); } //Death reporting void Client::mod_client_death_npc(Mob* killerMob) { return; } @@ -107,14 +107,14 @@ int32 Client::mod_client_xp(int32 in_xp, NPC *npc) { return(in_xp); } uint32 Client::mod_client_xp_for_level(uint32 xp, uint16 check_level) { return(xp); } //Food and drink values as computed by consume requests. Return < 0 to abort the request. -int Client::mod_food_value(const EQEmu::ItemData *item, int change) { return(change); } -int Client::mod_drink_value(const EQEmu::ItemData *item, int change) { return(change); } +int Client::mod_food_value(const EQ::ItemData *item, int change) { return(change); } +int Client::mod_drink_value(const EQ::ItemData *item, int change) { return(change); } //effect_vallue - Spell effect value as calculated by default formulas. You will want to ignore effects that don't lend themselves to scaling - pet ID's, gate coords, etc. int Mob::mod_effect_value(int effect_value, uint16 spell_id, int effect_type, Mob* caster, uint16 caster_id) { return(effect_value); } //chancetohit - 0 to 100 percent - set over 1000 for a guaranteed hit -float Mob::mod_hit_chance(float chancetohit, EQEmu::skills::SkillType skillinuse, Mob* attacker) { return(chancetohit); } +float Mob::mod_hit_chance(float chancetohit, EQ::skills::SkillType skillinuse, Mob* attacker) { return(chancetohit); } //Final riposte chance float Mob::mod_riposte_chance(float ripostechance, Mob* attacker) { return(ripostechance); } @@ -146,19 +146,19 @@ int32 Mob::mod_bash_damage(int32 dmg) { return(dmg); } int32 Mob::mod_frenzy_damage(int32 dmg) { return(dmg); } //Special attack damage after all other bonuses are applied. -int32 Mob::mod_monk_special_damage(int32 ndamage, EQEmu::skills::SkillType skill_type) { return(ndamage); } +int32 Mob::mod_monk_special_damage(int32 ndamage, EQ::skills::SkillType skill_type) { return(ndamage); } //ndamage - Backstab damage as calculated by default formulas int32 Mob::mod_backstab_damage(int32 ndamage) { return(ndamage); } //Chance for 50+ archery bonus damage if Combat:UseArcheryBonusRoll is true. Base is Combat:ArcheryBonusChance -int Mob::mod_archery_bonus_chance(int bonuschance, const EQEmu::ItemInstance* RangeWeapon) { return(bonuschance); } +int Mob::mod_archery_bonus_chance(int bonuschance, const EQ::ItemInstance* RangeWeapon) { return(bonuschance); } //Archery bonus damage -uint32 Mob::mod_archery_bonus_damage(uint32 MaxDmg, const EQEmu::ItemInstance* RangeWeapon) { return(MaxDmg); } +uint32 Mob::mod_archery_bonus_damage(uint32 MaxDmg, const EQ::ItemInstance* RangeWeapon) { return(MaxDmg); } //Final archery damage including bonus if it was applied. -int32 Mob::mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQEmu::ItemInstance* RangeWeapon) { return(TotalDmg); } +int32 Mob::mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQ::ItemInstance* RangeWeapon) { return(TotalDmg); } //Thrown weapon damage after all other calcs uint16 Mob::mod_throwing_damage(uint16 MaxDmg) { return(MaxDmg); } diff --git a/zone/npc.cpp b/zone/npc.cpp index edc9f88c3..1794c6d8c 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -303,8 +303,8 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi //give NPCs skill values... int r; - for (r = 0; r <= EQEmu::skills::HIGHEST_SKILL; r++) { - skills[r] = database.GetSkillCap(GetClass(), (EQEmu::skills::SkillType)r, moblevel); + for (r = 0; r <= EQ::skills::HIGHEST_SKILL; r++) { + skills[r] = database.GetSkillCap(GetClass(), (EQ::skills::SkillType)r, moblevel); } // some overrides -- really we need to be able to set skills for mobs in the DB // There are some known low level SHM/BST pets that do not follow this, which supports @@ -319,15 +319,15 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi } else { if (moblevel > 50) { - skills[EQEmu::skills::SkillDoubleAttack] = 250; - skills[EQEmu::skills::SkillDualWield] = 250; + skills[EQ::skills::SkillDoubleAttack] = 250; + skills[EQ::skills::SkillDualWield] = 250; } else if (moblevel > 3) { - skills[EQEmu::skills::SkillDoubleAttack] = moblevel * 5; - skills[EQEmu::skills::SkillDualWield] = skills[EQEmu::skills::SkillDoubleAttack]; + skills[EQ::skills::SkillDoubleAttack] = moblevel * 5; + skills[EQ::skills::SkillDualWield] = skills[EQ::skills::SkillDoubleAttack]; } else { - skills[EQEmu::skills::SkillDoubleAttack] = moblevel * 5; + skills[EQ::skills::SkillDoubleAttack] = moblevel * 5; } } @@ -527,7 +527,7 @@ void NPC::SetTarget(Mob* mob) { if (owner) { auto client = owner->CastToClient(); - if (client->ClientVersionBit() & EQEmu::versions::maskUFAndLater) { + if (client->ClientVersionBit() & EQ::versions::maskUFAndLater) { auto app = new EQApplicationPacket(OP_PetHoTT, sizeof(ClientTarget_Struct)); auto ct = (ClientTarget_Struct *)app->pBuffer; ct->new_target = mob ? mob->GetID() : 0; @@ -592,8 +592,8 @@ void NPC::CheckMinMaxLevel(Mob *them) if(themlevel < (*cur)->min_level || themlevel > (*cur)->max_level) { - material = EQEmu::InventoryProfile::CalcMaterialFromSlot((*cur)->equip_slot); - if (material != EQEmu::textures::materialInvalid) + material = EQ::InventoryProfile::CalcMaterialFromSlot((*cur)->equip_slot); + if (material != EQ::textures::materialInvalid) SendWearChange(material); cur = itemlist.erase(cur); @@ -637,8 +637,8 @@ void NPC::QueryLoot(Client* to) continue; } - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkLootItem); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkLootItem); linker.SetLootData(*cur); to->Message( @@ -790,7 +790,7 @@ bool NPC::Process() if (GetMana() < GetMaxMana()) { if (RuleB(NPC, UseMeditateBasedManaRegen)) { int32 npc_idle_mana_regen_bonus = 2; - uint16 meditate_skill = GetSkill(EQEmu::skills::SkillMeditate); + uint16 meditate_skill = GetSkill(EQ::skills::SkillMeditate); if (!IsEngaged() && meditate_skill > 0) { uint8 clevel = GetLevel(); npc_idle_mana_regen_bonus = @@ -916,18 +916,18 @@ uint32 NPC::CountLoot() { void NPC::UpdateEquipmentLight() { - m_Light.Type[EQEmu::lightsource::LightEquipment] = 0; - m_Light.Level[EQEmu::lightsource::LightEquipment] = 0; + m_Light.Type[EQ::lightsource::LightEquipment] = 0; + m_Light.Level[EQ::lightsource::LightEquipment] = 0; - for (int index = EQEmu::invslot::EQUIPMENT_BEGIN; index <= EQEmu::invslot::EQUIPMENT_END; ++index) { - if (index == EQEmu::invslot::slotAmmo) { continue; } + for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; ++index) { + if (index == EQ::invslot::slotAmmo) { continue; } auto item = database.GetItem(equipment[index]); if (item == nullptr) { continue; } - if (EQEmu::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQEmu::lightsource::LightEquipment])) { - m_Light.Type[EQEmu::lightsource::LightEquipment] = item->Light; - m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); + if (EQ::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQ::lightsource::LightEquipment])) { + m_Light.Type[EQ::lightsource::LightEquipment] = item->Light; + m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } } @@ -939,14 +939,14 @@ void NPC::UpdateEquipmentLight() if (!item->IsClassCommon()) { continue; } if (item->Light < 9 || item->Light > 13) { continue; } - if (EQEmu::lightsource::TypeToLevel(item->Light)) + if (EQ::lightsource::TypeToLevel(item->Light)) general_light_type = item->Light; } - if (EQEmu::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQEmu::lightsource::LightEquipment])) - m_Light.Type[EQEmu::lightsource::LightEquipment] = general_light_type; + if (EQ::lightsource::IsLevelGreater(general_light_type, m_Light.Type[EQ::lightsource::LightEquipment])) + m_Light.Type[EQ::lightsource::LightEquipment] = general_light_type; - m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); + m_Light.Level[EQ::lightsource::LightEquipment] = EQ::lightsource::TypeToLevel(m_Light.Type[EQ::lightsource::LightEquipment]); } void NPC::Depop(bool StartSpawnTimer) { @@ -1586,34 +1586,34 @@ int32 NPC::GetEquipmentMaterial(uint8 material_slot) const return texture_profile_material; } - if (material_slot >= EQEmu::textures::materialCount) { + if (material_slot >= EQ::textures::materialCount) { return 0; } - int16 invslot = EQEmu::InventoryProfile::CalcSlotFromMaterial(material_slot); + int16 invslot = EQ::InventoryProfile::CalcSlotFromMaterial(material_slot); if (invslot == INVALID_INDEX) { return 0; } if (equipment[invslot] == 0) { switch (material_slot) { - case EQEmu::textures::armorHead: + case EQ::textures::armorHead: return helmtexture; - case EQEmu::textures::armorChest: + case EQ::textures::armorChest: return texture; - case EQEmu::textures::armorArms: + case EQ::textures::armorArms: return armtexture; - case EQEmu::textures::armorWrist: + case EQ::textures::armorWrist: return bracertexture; - case EQEmu::textures::armorHands: + case EQ::textures::armorHands: return handtexture; - case EQEmu::textures::armorLegs: + case EQ::textures::armorLegs: return legtexture; - case EQEmu::textures::armorFeet: + case EQ::textures::armorFeet: return feettexture; - case EQEmu::textures::weaponPrimary: + case EQ::textures::weaponPrimary: return d_melee_texture1; - case EQEmu::textures::weaponSecondary: + case EQ::textures::weaponSecondary: return d_melee_texture2; default: //they have nothing in the slot, and its not a special slot... they get nothing. @@ -1641,7 +1641,7 @@ uint32 NPC::GetMaxDamage(uint8 tlevel) void NPC::PickPocket(Client* thief) { - thief->CheckIncreaseSkill(EQEmu::skills::SkillPickPockets, nullptr, 5); + thief->CheckIncreaseSkill(EQ::skills::SkillPickPockets, nullptr, 5); //make sure were allowed to target them: int over_level = GetLevel(); @@ -1661,7 +1661,7 @@ void NPC::PickPocket(Client* thief) return; } - int steal_skill = thief->GetSkill(EQEmu::skills::SkillPickPockets); + int steal_skill = thief->GetSkill(EQ::skills::SkillPickPockets); int steal_chance = steal_skill * 100 / (5 * over_level + 5); // Determine whether to steal money or an item. @@ -1671,7 +1671,7 @@ void NPC::PickPocket(Client* thief) // still needs to have FindFreeSlot vs PutItemInInventory issue worked out while (steal_item) { - std::vector> loot_selection; // + std::vector> loot_selection; // for (auto item_iter : itemlist) { if (!item_iter || !item_iter->item_id) continue; @@ -1688,7 +1688,7 @@ void NPC::PickPocket(Client* thief) } int random = zone->random.Int(0, (loot_selection.size() - 1)); - uint16 slot_id = thief->GetInv().FindFreeSlot(false, true, (loot_selection[random].first->Size), (loot_selection[random].first->ItemType == EQEmu::item::ItemTypeArrow)); + uint16 slot_id = thief->GetInv().FindFreeSlot(false, true, (loot_selection[random].first->Size), (loot_selection[random].first->ItemType == EQ::item::ItemTypeArrow)); if (slot_id == INVALID_INDEX) { steal_item = false; break; @@ -1769,12 +1769,12 @@ void NPC::PickPocket(Client* thief) void NPC::Disarm(Client* client, int chance) { // disarm primary if available, otherwise disarm secondary - const EQEmu::ItemData* weapon = NULL; + const EQ::ItemData* weapon = NULL; uint8 eslot = 0xFF; - if (equipment[EQEmu::invslot::slotPrimary] != 0) - eslot = EQEmu::invslot::slotPrimary; - else if (equipment[EQEmu::invslot::slotSecondary] != 0) - eslot = EQEmu::invslot::slotSecondary; + if (equipment[EQ::invslot::slotPrimary] != 0) + eslot = EQ::invslot::slotPrimary; + else if (equipment[EQ::invslot::slotSecondary] != 0) + eslot = EQ::invslot::slotSecondary; if (eslot != 0xFF) { if (zone->random.Int(0, 1000) <= chance) { weapon = database.GetItem(equipment[eslot]); @@ -1792,7 +1792,7 @@ void NPC::Disarm(Client* client, int chance) { break; } } - EQEmu::ItemInstance *inst = NULL; + EQ::ItemInstance *inst = NULL; inst = database.CreateItem(weapon->ID, charges); // Remove item from loot table RemoveItem(weapon->ID); @@ -1808,19 +1808,19 @@ void NPC::Disarm(Client* client, int chance) { } // Update Appearance equipment[eslot] = 0; - int matslot = eslot == EQEmu::invslot::slotPrimary ? EQEmu::textures::weaponPrimary : EQEmu::textures::weaponSecondary; + int matslot = eslot == EQ::invslot::slotPrimary ? EQ::textures::weaponPrimary : EQ::textures::weaponSecondary; if (matslot != -1) SendWearChange(matslot); - if ((CastToMob()->GetBodyType() == BT_Humanoid || CastToMob()->GetBodyType() == BT_Summoned) && eslot == EQEmu::invslot::slotPrimary) + if ((CastToMob()->GetBodyType() == BT_Humanoid || CastToMob()->GetBodyType() == BT_Summoned) && eslot == EQ::invslot::slotPrimary) Say("Ahh! My weapon!"); client->MessageString(Chat::Skills, DISARM_SUCCESS, this->GetCleanName()); if (chance != 1000) - client->CheckIncreaseSkill(EQEmu::skills::SkillDisarm, nullptr, 4); + client->CheckIncreaseSkill(EQ::skills::SkillDisarm, nullptr, 4); return; } client->MessageString(Chat::Skills, DISARM_FAILED); if (chance != 1000) - client->CheckIncreaseSkill(EQEmu::skills::SkillDisarm, nullptr, 2); + client->CheckIncreaseSkill(EQ::skills::SkillDisarm, nullptr, 2); return; } client->MessageString(Chat::Skills, DISARM_FAILED); @@ -3236,8 +3236,8 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) void NPC::RecalculateSkills() { int r; - for (r = 0; r <= EQEmu::skills::HIGHEST_SKILL; r++) { - skills[r] = database.GetSkillCap(GetClass(), (EQEmu::skills::SkillType)r, level); + for (r = 0; r <= EQ::skills::HIGHEST_SKILL; r++) { + skills[r] = database.GetSkillCap(GetClass(), (EQ::skills::SkillType)r, level); } // some overrides -- really we need to be able to set skills for mobs in the DB @@ -3245,15 +3245,15 @@ void NPC::RecalculateSkills() // the theory of needing to be able to set skills for each mob separately if (!IsBot()) { if (level > 50) { - skills[EQEmu::skills::SkillDoubleAttack] = 250; - skills[EQEmu::skills::SkillDualWield] = 250; + skills[EQ::skills::SkillDoubleAttack] = 250; + skills[EQ::skills::SkillDualWield] = 250; } else if (level > 3) { - skills[EQEmu::skills::SkillDoubleAttack] = level * 5; - skills[EQEmu::skills::SkillDualWield] = skills[EQEmu::skills::SkillDoubleAttack]; + skills[EQ::skills::SkillDoubleAttack] = level * 5; + skills[EQ::skills::SkillDualWield] = skills[EQ::skills::SkillDoubleAttack]; } else { - skills[EQEmu::skills::SkillDoubleAttack] = level * 5; + skills[EQ::skills::SkillDoubleAttack] = level * 5; } } } diff --git a/zone/npc.h b/zone/npc.h index 2b8edc9b9..d9f98cfc6 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -95,7 +95,7 @@ class Raid; class Spawn2; class Aura; -namespace EQEmu +namespace EQ { struct ItemData; } @@ -115,9 +115,9 @@ public: static NPC *SpawnGridNodeNPC(std::string name, const glm::vec4 &position, uint32 grid_id, uint32 grid_number, uint32 pause); //abstract virtual function implementations requird by base abstract class - virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill); - virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQEmu::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); - virtual bool Attack(Mob* other, int Hand = EQEmu::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, + virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); + virtual void Damage(Mob* from, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill, bool avoidable = true, int8 buffslot = -1, bool iBuffTic = false, eSpecialAttacks special = eSpecialAttacks::None); + virtual bool Attack(Mob* other, int Hand = EQ::invslot::slotPrimary, bool FromRiposte = false, bool IsStrikethrough = false, bool IsFromSpell = false, ExtraAttackOptions *opts = nullptr); virtual bool HasRaid() { return false; } virtual bool HasGroup() { return false; } @@ -149,7 +149,7 @@ public: void LevelScale(); virtual void SetTarget(Mob* mob); - virtual uint16 GetSkill(EQEmu::skills::SkillType skill_num) const { if (skill_num <= EQEmu::skills::HIGHEST_SKILL) { return skills[skill_num]; } return 0; } + virtual uint16 GetSkill(EQ::skills::SkillType skill_num) const { if (skill_num <= EQ::skills::HIGHEST_SKILL) { return skills[skill_num]; } return 0; } void CalcItemBonuses(StatBonuses *newbon); virtual void CalcBonuses(); @@ -168,7 +168,7 @@ public: virtual void RangedAttack(Mob* other); virtual void ThrowingAttack(Mob* other) { } int32 GetNumberOfAttacks() const { return attack_count; } - void DoRangedAttackDmg(Mob* other, bool Launch = true, int16 damage_mod = 0, int16 chance_mod = 0, EQEmu::skills::SkillType skill = EQEmu::skills::SkillArchery, float speed = 4.0f, const char *IDFile = nullptr); + void DoRangedAttackDmg(Mob* other, bool Launch = true, int16 damage_mod = 0, int16 chance_mod = 0, EQ::skills::SkillType skill = EQ::skills::SkillArchery, float speed = 4.0f, const char *IDFile = nullptr); bool DatabaseCastAccepted(int spell_id); bool IsFactionListAlly(uint32 other_faction); @@ -185,7 +185,7 @@ public: virtual void SpellProcess(); virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho); - void AddItem(const EQEmu::ItemData* item, uint16 charges, bool equipitem = true); + void AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem = true); void AddItem(uint32 itemid, uint16 charges, bool equipitem = true, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0); void AddLootTable(); void AddLootTable(uint32 ldid); @@ -290,7 +290,7 @@ public: void PickPocket(Client* thief); void Disarm(Client* client, int chance); void StartSwarmTimer(uint32 duration) { swarm_timer.Start(duration); } - void AddLootDrop(const EQEmu::ItemData*dbitem, ItemList* itemlistconst, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange = false, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0); + void AddLootDrop(const EQ::ItemData*dbitem, ItemList* itemlistconst, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange = false, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0); virtual void DoClassAttacks(Mob *target); void CheckSignal(); inline bool IsNotTargetableWithHotkey() const { return no_target_hotkey; } @@ -443,7 +443,7 @@ public: uint32 GetSpawnKillCount(); int GetScore(); void mod_prespawn(Spawn2 *sp); - int mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemData* weapon, Mob* other); + int mod_npc_damage(int damage, EQ::skills::SkillType skillinuse, int hand, const EQ::ItemData* weapon, Mob* other); void mod_npc_killed_merit(Mob* c); void mod_npc_killed(Mob* oos); void AISpellsList(Client *c); @@ -587,9 +587,9 @@ protected: uint32 roambox_delay; uint32 roambox_min_delay; - uint16 skills[EQEmu::skills::HIGHEST_SKILL + 1]; + uint16 skills[EQ::skills::HIGHEST_SKILL + 1]; - uint32 equipment[EQEmu::invslot::EQUIPMENT_COUNT]; //this is an array of item IDs + uint32 equipment[EQ::invslot::EQUIPMENT_COUNT]; //this is an array of item IDs uint32 herosforgemodel; //this is the Hero Forge Armor Model (i.e 63 or 84 or 203) uint16 d_melee_texture1; diff --git a/zone/object.cpp b/zone/object.cpp index 4fbaef1c3..4516e0ec2 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -37,7 +37,7 @@ extern Zone* zone; extern EntityList entity_list; // Loading object from database -Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst) +Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQ::ItemInstance* inst) : respawn_timer(0), decay_timer(300000) { @@ -69,7 +69,7 @@ Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, } //creating a re-ocurring ground spawn. -Object::Object(const EQEmu::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer) +Object::Object(const EQ::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer) : respawn_timer(respawntimer * 1000), decay_timer(300000) { @@ -102,7 +102,7 @@ Object::Object(const EQEmu::ItemInstance* inst, char* name,float max_x,float min } // Loading object from client dropping item on ground -Object::Object(Client* client, const EQEmu::ItemInstance* inst) +Object::Object(Client* client, const EQ::ItemInstance* inst) : respawn_timer(0), decay_timer(300000) { user = nullptr; @@ -120,7 +120,7 @@ Object::Object(Client* client, const EQEmu::ItemInstance* inst) m_data.heading = client->GetHeading(); m_data.x = client->GetX(); m_data.y = client->GetY(); - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::RoF2) + if (client->ClientVersion() >= EQ::versions::ClientVersion::RoF2) { // RoF2 places items at player's Z, which is 0.625 of their height. m_data.z = client->GetZ() - (client->GetSize() * 0.625f); @@ -141,7 +141,7 @@ Object::Object(Client* client, const EQEmu::ItemInstance* inst) // Set object name if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (item && item->IDFile) { if (strlen(item->IDFile) == 0) { strcpy(m_data.object_name, DEFAULT_OBJECT_NAME); @@ -164,7 +164,7 @@ Object::Object(Client* client, const EQEmu::ItemInstance* inst) } } -Object::Object(const EQEmu::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time) +Object::Object(const EQ::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time) : respawn_timer(0), decay_timer(decay_time) { user = nullptr; @@ -197,7 +197,7 @@ Object::Object(const EQEmu::ItemInstance *inst, float x, float y, float z, float // Set object name if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (item && item->IDFile) { if (strlen(item->IDFile) == 0) { strcpy(m_data.object_name, DEFAULT_OBJECT_NAME); @@ -225,7 +225,7 @@ Object::Object(const char *model, float x, float y, float z, float heading, uint { user = nullptr; last_user = nullptr; - EQEmu::ItemInstance* inst = new EQEmu::ItemInstance(ItemInstWorldContainer); + EQ::ItemInstance* inst = new EQ::ItemInstance(ItemInstWorldContainer); // Initialize members m_id = 0; @@ -327,8 +327,8 @@ void Object::Delete(bool reset_state) } } -const EQEmu::ItemInstance* Object::GetItem(uint8 index) { - if (index < EQEmu::invtype::WORLD_SIZE) { +const EQ::ItemInstance* Object::GetItem(uint8 index) { + if (index < EQ::invtype::WORLD_SIZE) { return m_inst->GetItem(index); } @@ -336,14 +336,14 @@ const EQEmu::ItemInstance* Object::GetItem(uint8 index) { } // Add item to object (only logical for world tradeskill containers -void Object::PutItem(uint8 index, const EQEmu::ItemInstance* inst) +void Object::PutItem(uint8 index, const EQ::ItemInstance* inst) { if (index > 9) { LogError("Object::PutItem: Invalid index specified ([{}])", index); return; } - if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) { + if (m_inst && m_inst->IsType(EQ::item::ItemClassBag)) { if (inst) { m_inst->PutItem(index, *inst); } @@ -363,12 +363,12 @@ void Object::Close() { last_user = user; // put any remaining items from the world container back into the player's inventory to avoid item loss // if they close the container without removing all items - EQEmu::ItemInstance* container = this->m_inst; + EQ::ItemInstance* container = this->m_inst; if(container != nullptr) { - for (uint8 i = EQEmu::invbag::SLOT_BEGIN; i <= EQEmu::invbag::SLOT_END; i++) + for (uint8 i = EQ::invbag::SLOT_BEGIN; i <= EQ::invbag::SLOT_END; i++) { - EQEmu::ItemInstance* inst = container->PopItem(i); + EQ::ItemInstance* inst = container->PopItem(i); if(inst != nullptr) { user->MoveItemToInventory(inst, true); @@ -384,7 +384,7 @@ void Object::Close() { // Remove item from container void Object::DeleteItem(uint8 index) { - if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) { + if (m_inst && m_inst->IsType(EQ::item::ItemClassBag)) { m_inst->DeleteItem(index); // This is _highly_ inefficient, but for now it will work: Save entire object to database @@ -393,11 +393,11 @@ void Object::DeleteItem(uint8 index) } // Pop item out of container -EQEmu::ItemInstance* Object::PopItem(uint8 index) +EQ::ItemInstance* Object::PopItem(uint8 index) { - EQEmu::ItemInstance* inst = nullptr; + EQ::ItemInstance* inst = nullptr; - if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) { + if (m_inst && m_inst->IsType(EQ::item::ItemClassBag)) { inst = m_inst->PopItem(index); // This is _highly_ inefficient, but for now it will work: Save entire object to database @@ -510,7 +510,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) char buf[10]; snprintf(buf, 9, "%u", item->ID); buf[9] = '\0'; - std::vector args; + std::vector args; args.push_back(m_inst); if(parse->EventPlayer(EVENT_PLAYER_PICKUP, sender, buf, this->GetID(), &args)) { @@ -530,11 +530,11 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) // Transfer item to client - sender->PutItemInInventory(EQEmu::invslot::slotCursor, *m_inst, false); - sender->SendItemPacket(EQEmu::invslot::slotCursor, m_inst, ItemPacketTrade); + sender->PutItemInInventory(EQ::invslot::slotCursor, *m_inst, false); + sender->SendItemPacket(EQ::invslot::slotCursor, m_inst, ItemPacketTrade); if(cursordelete) // delete the item if it's a duplicate lore. We have to do this because the client expects the item packet - sender->DeleteItemInInventory(EQEmu::invslot::slotCursor); + sender->DeleteItemInInventory(EQ::invslot::slotCursor); sender->DropItemQS(m_inst, true); @@ -577,7 +577,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) else { coa->open = 0x00; - if (sender->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) { + if (sender->ClientVersion() >= EQ::versions::ClientVersion::RoF) { coa->drop_id = 0xFFFFFFFF; sender->Message(Chat::White, "Someone else is using that. Try again later."); } @@ -598,7 +598,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) // Send items inside of container - if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) { + if (m_inst && m_inst->IsType(EQ::item::ItemClassBag)) { //Clear out no-drop and no-rent items first if different player opens it if(user != last_user) @@ -607,8 +607,8 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) auto outapp = new EQApplicationPacket(OP_ClientReady, 0); sender->QueuePacket(outapp); safe_delete(outapp); - for (uint8 i = EQEmu::invbag::SLOT_BEGIN; i <= EQEmu::invbag::SLOT_END; i++) { - const EQEmu::ItemInstance* inst = m_inst->GetItem(i); + for (uint8 i = EQ::invbag::SLOT_BEGIN; i <= EQ::invbag::SLOT_END; i++) { + const EQ::ItemInstance* inst = m_inst->GetItem(i); if (inst) { //sender->GetInv().PutItem(i+4000,inst); sender->SendItemPacket(i, inst, ItemPacketWorldContainer); @@ -621,7 +621,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object) } // Add new Zone Object (theoretically only called for items dropped to ground) -uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst) +uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQ::ItemInstance* inst) { uint32 database_id = 0; uint32 item_id = 0; @@ -652,14 +652,14 @@ uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& ob } // Save container contents, if container - if (inst && inst->IsType(EQEmu::item::ItemClassBag)) + if (inst && inst->IsType(EQ::item::ItemClassBag)) SaveWorldContainer(object.zone_id, database_id, inst); return database_id; } // Update information about existing object in database -void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst) +void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQ::ItemInstance* inst) { uint32 item_id = 0; int16 charges = 0; @@ -691,7 +691,7 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec } // Save container contents, if container - if (inst && inst->IsType(EQEmu::item::ItemClassBag)) + if (inst && inst->IsType(EQ::item::ItemClassBag)) SaveWorldContainer(object.zone_id, id, inst); } @@ -950,7 +950,7 @@ uint32 Object::GetItemID() return 0; } - const EQEmu::ItemData* item = this->m_inst->GetItem(); + const EQ::ItemData* item = this->m_inst->GetItem(); if (item == 0) { diff --git a/zone/object.h b/zone/object.h index ce64ee47e..1ab4463f1 100644 --- a/zone/object.h +++ b/zone/object.h @@ -30,7 +30,7 @@ class Client; class EQApplicationPacket; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -73,7 +73,7 @@ IT10714_ACTORDEF=Augmentation Sealer IT10725_ACTORDEF=Shuriken */ -#define OT_DROPPEDITEM EQEmu::item::BagTypeLargeBag +#define OT_DROPPEDITEM EQ::item::BagTypeLargeBag // Icon values: //0x0453 a pie @@ -93,11 +93,11 @@ class Object: public Entity { public: // Loading object from database - Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& data, const EQEmu::ItemInstance* inst); - Object(const EQEmu::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer); + Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& data, const EQ::ItemInstance* inst); + Object(const EQ::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer); // Loading object from client dropping item on ground - Object(Client* client, const EQEmu::ItemInstance* inst); - Object(const EQEmu::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time = 300000); + Object(Client* client, const EQ::ItemInstance* inst); + Object(const EQ::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time = 300000); Object(const char *model, float x, float y, float z, float heading, uint8 type, uint32 decay_time = 0); // Destructor @@ -112,7 +112,7 @@ public: static void HandleAugmentation(Client* user, const AugmentItem_Struct* in_augment, Object *worldo); static void HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac); - static EQEmu::skills::SkillType TypeToSkill(uint32 type); + static EQ::skills::SkillType TypeToSkill(uint32 type); // Packet functions void CreateSpawnPacket(EQApplicationPacket* app); @@ -124,10 +124,10 @@ public: void StartDecay() {decay_timer.Start();} // Container functions - const EQEmu::ItemInstance* GetItem(uint8 index); - void PutItem(uint8 index, const EQEmu::ItemInstance* inst); + const EQ::ItemInstance* GetItem(uint8 index); + void PutItem(uint8 index, const EQ::ItemInstance* inst); void DeleteItem(uint8 index); // Item inside container - EQEmu::ItemInstance* PopItem(uint8 index); // Pop item out of container + EQ::ItemInstance* PopItem(uint8 index); // Pop item out of container // Override base class implementations virtual bool IsObject() const { return true; } @@ -180,7 +180,7 @@ protected: void RandomSpawn(bool send_packet = false); //spawn this ground spawn at a random place Object_Struct m_data; // Packet data - EQEmu::ItemInstance *m_inst; // Item representing object + EQ::ItemInstance *m_inst; // Item representing object bool m_inuse; // Currently in use by a client? uint32 m_id; // Database key, different than drop_id uint32 m_type; // Object Type, ie, forge, oven, dropped item, etc (ref: ContainerUseTypes) diff --git a/zone/pathfinder_nav_mesh.cpp b/zone/pathfinder_nav_mesh.cpp index 998515a35..4af9fc0f6 100644 --- a/zone/pathfinder_nav_mesh.cpp +++ b/zone/pathfinder_nav_mesh.cpp @@ -432,7 +432,7 @@ void PathfinderNavmesh::Load(const std::string &path) std::vector buffer; buffer.resize(buffer_size); - uint32_t v = EQEmu::InflateData(&data[0], data_size, &buffer[0], buffer_size); + uint32_t v = EQ::InflateData(&data[0], data_size, &buffer[0], buffer_size); fclose(f); char *buf = &buffer[0]; diff --git a/zone/pathing.cpp b/zone/pathing.cpp index ee5f0138a..1513cd5d6 100644 --- a/zone/pathing.cpp +++ b/zone/pathing.cpp @@ -40,14 +40,14 @@ void CullPoints(std::vector &points) { } void Client::SendPathPacket(const std::vector &points) { - EQEmu::Any data(points); + EQ::Any data(points); EQ::Task([=](EQ::Task::ResolveFn resolve, EQ::Task::RejectFn reject) { - auto points = EQEmu::any_cast>(data); + auto points = EQ::any_cast>(data); CullPoints(points); resolve(points); }) - .Then([this](const EQEmu::Any &result) { - auto points = EQEmu::any_cast>(result); + .Then([this](const EQ::Any &result) { + auto points = EQ::any_cast>(result); if (points.size() < 2) { if (Admin() > 10) { Message(Chat::System, "Too few points"); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 1c0c42bf5..d2262ddad 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1891,7 +1891,7 @@ XS(XS_Client_GetSkill) { Client *THIS; uint16 RETVAL; dXSTARG; - EQEmu::skills::SkillType skill_id = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_id = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -1917,7 +1917,7 @@ XS(XS_Client_GetRawSkill) { Client *THIS; uint32 RETVAL; dXSTARG; - EQEmu::skills::SkillType skill_id = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_id = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -1942,7 +1942,7 @@ XS(XS_Client_HasSkill) { { Client *THIS; bool RETVAL; - EQEmu::skills::SkillType skill_id = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_id = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -1967,7 +1967,7 @@ XS(XS_Client_CanHaveSkill) { { Client *THIS; bool RETVAL; - EQEmu::skills::SkillType skill_id = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_id = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -1991,7 +1991,7 @@ XS(XS_Client_SetSkill) { Perl_croak(aTHX_ "Usage: Client::SetSkill(THIS, int skill_id, uint16 value)"); { Client *THIS; - EQEmu::skills::SkillType skill_num = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_num = (EQ::skills::SkillType) SvUV(ST(1)); uint16 value = (uint16) SvUV(ST(2)); if (sv_derived_from(ST(0), "Client")) { @@ -2014,7 +2014,7 @@ XS(XS_Client_AddSkill) { Perl_croak(aTHX_ "Usage: Client::AddSkill(THIS, int skill_id, uint16 value)"); { Client *THIS; - EQEmu::skills::SkillType skillid = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skillid = (EQ::skills::SkillType) SvUV(ST(1)); uint16 value = (uint16) SvUV(ST(2)); if (sv_derived_from(ST(0), "Client")) { @@ -2060,7 +2060,7 @@ XS(XS_Client_CheckIncreaseSkill) { { Client *THIS; bool RETVAL; - EQEmu::skills::SkillType skillid = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skillid = (EQ::skills::SkillType) SvUV(ST(1)); int chancemodi; if (sv_derived_from(ST(0), "Client")) { @@ -2116,7 +2116,7 @@ XS(XS_Client_MaxSkill) { { Client *THIS; uint16 RETVAL; - EQEmu::skills::SkillType skillid = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skillid = (EQ::skills::SkillType) SvUV(ST(1)); uint16 class_ = 0; uint16 level = 0; dXSTARG; @@ -3148,7 +3148,7 @@ XS(XS_Client_SummonItem) { uint32 aug3 = 0; uint32 aug4 = 0; uint32 aug5 = 0; - uint16 slot_id = EQEmu::invslot::slotCursor; + uint16 slot_id = EQ::invslot::slotCursor; if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -4206,7 +4206,7 @@ XS(XS_Client_GetItemAt) { Perl_croak(aTHX_ "Usage: Client::GetItemAt(THIS, uint32 slot)"); { Client *THIS; - EQEmu::ItemInstance *RETVAL; + EQ::ItemInstance *RETVAL; uint32 slot = (int32) SvIV(ST(1)); if (sv_derived_from(ST(0), "Client")) { @@ -4231,7 +4231,7 @@ XS(XS_Client_GetAugmentAt) { Perl_croak(aTHX_ "Usage: Client::GetAugmentAt(THIS, uint32 slot, uint32 aug_slot)"); { Client *THIS; - EQEmu::ItemInstance *RETVAL; + EQ::ItemInstance *RETVAL; uint32 slot = (int32) SvIV(ST(1)); uint32 aug_slot = (int32) SvIV(ST(1)); @@ -4243,7 +4243,7 @@ XS(XS_Client_GetAugmentAt) { if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - EQEmu::ItemInstance *inst = THIS->GetInv().GetItem(slot); + EQ::ItemInstance *inst = THIS->GetInv().GetItem(slot); if (inst) { RETVAL = inst->GetAugment(aug_slot); } else { @@ -5431,7 +5431,7 @@ XS(XS_Client_GetItemInInventory) { { Client *THIS; int16 slot_id = (int16) SvIV(ST(1)); - EQEmu::ItemInstance *RETVAL = nullptr; + EQ::ItemInstance *RETVAL = nullptr; if (sv_derived_from(ST(0), "Client")) { IV tmp = SvIV((SV *) SvRV(ST(0))); diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index cf6ef4be7..24d46b8be 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -606,7 +606,7 @@ XS(XS_Mob_GetSkill) { Mob *THIS; uint32 RETVAL; dXSTARG; - EQEmu::skills::SkillType skill_num = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_num = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -872,7 +872,7 @@ XS(XS_Mob_Damage) { Mob *from; int32 damage = (int32) SvIV(ST(2)); uint16 spell_id = (uint16) SvUV(ST(3)); - EQEmu::skills::SkillType attack_skill = (EQEmu::skills::SkillType) SvUV(ST(4)); + EQ::skills::SkillType attack_skill = (EQ::skills::SkillType) SvUV(ST(4)); bool avoidable; int8 buffslot; bool iBuffTic; @@ -3830,7 +3830,7 @@ XS(XS_Mob_CastSpell) { Mob *THIS; uint16 spell_id = (uint16) SvUV(ST(1)); uint16 target_id = (uint16) SvUV(ST(2)); - EQEmu::spells::CastingSlot slot; + EQ::spells::CastingSlot slot; int32 casttime; int32 mana_cost; int16 resist_adjust; @@ -3844,9 +3844,9 @@ XS(XS_Mob_CastSpell) { Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); if (items < 4) - slot = EQEmu::spells::CastingSlot::Item; + slot = EQ::spells::CastingSlot::Item; else { - slot = static_cast(SvUV(ST(3))); + slot = static_cast(SvUV(ST(3))); } if (items < 5) @@ -3919,7 +3919,7 @@ XS(XS_Mob_SpellFinished) { resist_diff = spells[spell_id].ResistDiff; } - THIS->SpellFinished(spell_id, spell_target, EQEmu::spells::CastingSlot::Item, mana_cost, -1, resist_diff); + THIS->SpellFinished(spell_id, spell_target, EQ::spells::CastingSlot::Item, mana_cost, -1, resist_diff); } XSRETURN_EMPTY; } @@ -6494,7 +6494,7 @@ XS(XS_Mob_DoSpecialAttackDamage) { { Mob *THIS; Mob *target; - EQEmu::skills::SkillType attack_skill = (EQEmu::skills::SkillType) SvUV(ST(2)); + EQ::skills::SkillType attack_skill = (EQ::skills::SkillType) SvUV(ST(2)); int32 max_damage = (int32) SvIV(ST(3)); int32 min_damage = 1; int32 hate_override = -11; @@ -7401,7 +7401,7 @@ XS(XS_Mob_ModSkillDmgTaken) { Perl_croak(aTHX_ "Usage: Mob::ModSkillDmgTaken(THIS, int skill, int16 value)"); { Mob *THIS; - EQEmu::skills::SkillType skill_num = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_num = (EQ::skills::SkillType) SvUV(ST(1)); int16 value = (int16) SvIV(ST(2)); if (sv_derived_from(ST(0), "Mob")) { @@ -7426,7 +7426,7 @@ XS(XS_Mob_GetModSkillDmgTaken) { Mob *THIS; int16 RETVAL; dXSTARG; - EQEmu::skills::SkillType skill_num = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_num = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -7452,7 +7452,7 @@ XS(XS_Mob_GetSkillDmgTaken) { Mob *THIS; int32 RETVAL; dXSTARG; - EQEmu::skills::SkillType skill_num = (EQEmu::skills::SkillType) SvUV(ST(1)); + EQ::skills::SkillType skill_num = (EQ::skills::SkillType) SvUV(ST(1)); if (sv_derived_from(ST(0), "Mob")) { IV tmp = SvIV((SV *) SvRV(ST(0))); @@ -7607,7 +7607,7 @@ XS(XS_Mob_DoMeleeSkillAttackDmg) { Mob *THIS; Mob *target; uint16 weapon_damage = (uint16) SvIV(ST(2)); - EQEmu::skills::SkillType skill = (EQEmu::skills::SkillType) SvUV(ST(3)); + EQ::skills::SkillType skill = (EQ::skills::SkillType) SvUV(ST(3)); int16 chance_mod = (int16) SvIV(ST(4)); int16 focus = (int16) SvIV(ST(5)); uint8 CanRiposte = (uint8) SvIV(ST(6)); @@ -7641,8 +7641,8 @@ XS(XS_Mob_DoArcheryAttackDmg) { { Mob *THIS; Mob *target; - EQEmu::ItemInstance *RangeWeapon = nullptr; - EQEmu::ItemInstance *Ammo = nullptr; + EQ::ItemInstance *RangeWeapon = nullptr; + EQ::ItemInstance *Ammo = nullptr; uint16 weapon_damage = (uint16) SvIV(ST(4)); int16 chance_mod = (int16) SvIV(ST(5)); int16 focus = (int16) SvIV(ST(6)); @@ -7676,8 +7676,8 @@ XS(XS_Mob_DoThrowingAttackDmg) { { Mob *THIS; Mob *target; - EQEmu::ItemInstance *RangeWeapon = nullptr; - EQEmu::ItemData *item = nullptr; + EQ::ItemInstance *RangeWeapon = nullptr; + EQ::ItemData *item = nullptr; uint16 weapon_damage = (uint16) SvIV(ST(4)); int16 chance_mod = (int16) SvIV(ST(5)); int16 focus = (int16) SvIV(ST(6)); diff --git a/zone/perl_questitem.cpp b/zone/perl_questitem.cpp index 6d728e65e..f30728147 100644 --- a/zone/perl_questitem.cpp +++ b/zone/perl_questitem.cpp @@ -40,15 +40,15 @@ XS(XS_QuestItem_GetName) { if (items != 1) Perl_croak(aTHX_ "Usage: QuestItem::GetName(THIS)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; Const_char *RETVAL; dXSTARG; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -66,14 +66,14 @@ XS(XS_QuestItem_SetScale) { if (items != 2) Perl_croak(aTHX_ "Usage: QuestItem::SetScale(THIS, float scale_multiplier)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; float Mult; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -92,15 +92,15 @@ XS(XS_QuestItem_ItemSay) { if (items != 2 && items != 3) Perl_croak(aTHX_ "Usage: QuestItem::ItemSay(THIS, string text [int language_id])"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; Const_char *text; int lang = 0; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -119,19 +119,19 @@ XS(XS_QuestItem_IsType) { if (items != 2) Perl_croak(aTHX_ "Usage: QuestItem::IsType(THIS, type)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; bool RETVAL; uint32 type = (int32) SvIV(ST(1)); if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); - RETVAL = THIS->IsType((EQEmu::item::ItemClass) type); + RETVAL = THIS->IsType((EQ::item::ItemClass) type); ST(0) = boolSV(RETVAL); sv_2mortal(ST(0)); } @@ -144,14 +144,14 @@ XS(XS_QuestItem_IsAttuned) { if (items != 1) Perl_croak(aTHX_ "Usage: QuestItem::IsAttuned(THIS)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; bool RETVAL; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -168,15 +168,15 @@ XS(XS_QuestItem_GetCharges) { if (items != 1) Perl_croak(aTHX_ "Usage: QuestItem::GetCharges(THIS)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; int16 RETVAL; dXSTARG; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -193,15 +193,15 @@ XS(XS_QuestItem_GetAugment) { if (items != 2) Perl_croak(aTHX_ "Usage: QuestItem::GetAugment(THIS, int16 slot_id)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; int16 slot_id = (int16) SvIV(ST(1)); - EQEmu::ItemInstance *RETVAL; + EQ::ItemInstance *RETVAL; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); @@ -218,15 +218,15 @@ XS(XS_QuestItem_GetID) { if (items != 1) Perl_croak(aTHX_ "Usage: QuestItem::GetID(THIS)"); { - EQEmu::ItemInstance *THIS; + EQ::ItemInstance *THIS; uint32 RETVAL; dXSTARG; if (sv_derived_from(ST(0), "QuestItem")) { IV tmp = SvIV((SV *) SvRV(ST(0))); - THIS = INT2PTR(EQEmu::ItemInstance *, tmp); + THIS = INT2PTR(EQ::ItemInstance *, tmp); } else - Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance"); + Perl_croak(aTHX_ "THIS is not of type EQ::ItemInstance"); if (THIS == nullptr) Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); diff --git a/zone/pets.cpp b/zone/pets.cpp index b4897940a..1c7b15f54 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -385,12 +385,12 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, // the base items for the pet. These are always loaded // so that a rank 1 suspend minion does not kill things // like the special back items some focused pets may receive. - uint32 petinv[EQEmu::invslot::EQUIPMENT_COUNT]; + uint32 petinv[EQ::invslot::EQUIPMENT_COUNT]; memset(petinv, 0, sizeof(petinv)); - const EQEmu::ItemData *item = nullptr; + const EQ::ItemData *item = nullptr; if (database.GetBasePetItems(record.equipmentset, petinv)) { - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++) + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) if (petinv[i]) { item = database.GetItem(petinv[i]); npc->AddLootDrop(item, &npc->itemlist, 0, 1, 127, true, true); @@ -524,10 +524,10 @@ void NPC::GetPetState(SpellBuff_Struct *pet_buffs, uint32 *items, char *name) { strn0cpy(name, GetName(), 64); //save their items, we only care about what they are actually wearing - memcpy(items, equipment, sizeof(uint32) * EQEmu::invslot::EQUIPMENT_COUNT); + memcpy(items, equipment, sizeof(uint32) * EQ::invslot::EQUIPMENT_COUNT); //save their buffs. - for (int i=EQEmu::invslot::EQUIPMENT_BEGIN; i < GetPetMaxTotalSlots(); i++) { + for (int i=EQ::invslot::EQUIPMENT_BEGIN; i < GetPetMaxTotalSlots(); i++) { if (buffs[i].spellid != SPELL_UNKNOWN) { pet_buffs[i].spellid = buffs[i].spellid; pet_buffs[i].effect_type = i+1; @@ -612,11 +612,11 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { } //restore their equipment... - for (i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++) { + for (i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) { if(items[i] == 0) continue; - const EQEmu::ItemData* item2 = database.GetItem(items[i]); + const EQ::ItemData* item2 = database.GetItem(items[i]); if (item2) { bool noDrop=(item2->NoDrop == 0); // Field is reverse logic @@ -679,7 +679,7 @@ bool ZoneDatabase::GetBasePetItems(int32 equipmentset, uint32 *items) { { slot = atoi(row[0]); - if (slot > EQEmu::invslot::EQUIPMENT_END) + if (slot > EQ::invslot::EQUIPMENT_END) continue; if (items[slot] == 0) diff --git a/zone/quest_interface.h b/zone/quest_interface.h index 63310efae..a2a6c73c8 100644 --- a/zone/quest_interface.h +++ b/zone/quest_interface.h @@ -26,7 +26,7 @@ class Client; class NPC; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -34,44 +34,44 @@ namespace EQEmu class QuestInterface { public: virtual int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual int EventGlobalNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } - virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } + virtual int EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { return 0; } virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual int EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual bool HasQuestSub(uint32 npcid, QuestEventID evt) { return false; } virtual bool HasGlobalQuestSub(QuestEventID evt) { return false; } virtual bool PlayerHasQuestSub(QuestEventID evt) { return false; } virtual bool GlobalPlayerHasQuestSub(QuestEventID evt) { return false; } virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt) { return false; } - virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) { return false; } + virtual bool ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) { return false; } virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt) { return false; } virtual void LoadNPCScript(std::string filename, int npc_id) { } virtual void LoadGlobalNPCScript(std::string filename) { } virtual void LoadPlayerScript(std::string filename) { } virtual void LoadGlobalPlayerScript(std::string filename) { } - virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item) { } + virtual void LoadItemScript(std::string filename, EQ::ItemInstance *item) { } virtual void LoadSpellScript(std::string filename, uint32 spell_id) { } virtual void LoadEncounterScript(std::string filename, std::string encounter_name) { } virtual int DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } - virtual int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } + virtual int DispatchEventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { return 0; } virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { return 0; } + std::vector *extra_pointers) { return 0; } virtual void AddVar(std::string name, std::string val) { } virtual std::string GetVar(std::string name) { return std::string(); } diff --git a/zone/quest_parser_collection.cpp b/zone/quest_parser_collection.cpp index c3d38ce4f..9320379c6 100644 --- a/zone/quest_parser_collection.cpp +++ b/zone/quest_parser_collection.cpp @@ -201,7 +201,7 @@ bool QuestParserCollection::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) return false; } -bool QuestParserCollection::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) { +bool QuestParserCollection::ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt) { if (itm == nullptr) return false; @@ -238,7 +238,7 @@ bool QuestParserCollection::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEvent } int QuestParserCollection::EventNPC(QuestEventID evt, NPC *npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int rd = DispatchEventNPC(evt, npc, init, data, extra_data, extra_pointers); int rl = EventNPCLocal(evt, npc, init, data, extra_data, extra_pointers); int rg = EventNPCGlobal(evt, npc, init, data, extra_data, extra_pointers); @@ -256,7 +256,7 @@ int QuestParserCollection::EventNPC(QuestEventID evt, NPC *npc, Mob *init, std:: } int QuestParserCollection::EventNPCLocal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { auto iter = _npc_quest_status.find(npc->GetNPCTypeID()); if(iter != _npc_quest_status.end()) { //loaded or failed to load @@ -279,7 +279,7 @@ int QuestParserCollection::EventNPCLocal(QuestEventID evt, NPC* npc, Mob *init, } int QuestParserCollection::EventNPCGlobal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(_global_npc_quest_status != QuestUnloaded && _global_npc_quest_status != QuestFailedToLoad) { auto qiter = _interfaces.find(_global_npc_quest_status); return qiter->second->EventGlobalNPC(evt, npc, init, data, extra_data, extra_pointers); @@ -299,7 +299,7 @@ int QuestParserCollection::EventNPCGlobal(QuestEventID evt, NPC* npc, Mob *init, } int QuestParserCollection::EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int rd = DispatchEventPlayer(evt, client, data, extra_data, extra_pointers); int rl = EventPlayerLocal(evt, client, data, extra_data, extra_pointers); int rg = EventPlayerGlobal(evt, client, data, extra_data, extra_pointers); @@ -317,7 +317,7 @@ int QuestParserCollection::EventPlayer(QuestEventID evt, Client *client, std::st } int QuestParserCollection::EventPlayerLocal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(_player_quest_status == QuestUnloaded) { std::string filename; QuestInterface *qi = GetQIByPlayerQuest(filename); @@ -336,7 +336,7 @@ int QuestParserCollection::EventPlayerLocal(QuestEventID evt, Client *client, st } int QuestParserCollection::EventPlayerGlobal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { if(_global_player_quest_status == QuestUnloaded) { std::string filename; QuestInterface *qi = GetQIByGlobalPlayerQuest(filename); @@ -354,8 +354,8 @@ int QuestParserCollection::EventPlayerGlobal(QuestEventID evt, Client *client, s return 0; } -int QuestParserCollection::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers) { +int QuestParserCollection::EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers) { // needs pointer validation check on 'item' argument std::string item_script; @@ -403,7 +403,7 @@ int QuestParserCollection::EventItem(QuestEventID evt, Client *client, EQEmu::It } int QuestParserCollection::EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { auto iter = _spell_quest_status.find(spell_id); if(iter != _spell_quest_status.end()) { //loaded or failed to load @@ -440,7 +440,7 @@ int QuestParserCollection::EventSpell(QuestEventID evt, NPC* npc, Client *client } int QuestParserCollection::EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { auto iter = _encounter_quest_status.find(encounter_name); if(iter != _encounter_quest_status.end()) { //loaded or failed to load @@ -993,7 +993,7 @@ void QuestParserCollection::GetErrors(std::list &err) { } int QuestParserCollection::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int ret = 0; auto iter = _load_precedence.begin(); while(iter != _load_precedence.end()) { @@ -1007,7 +1007,7 @@ int QuestParserCollection::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *ini } int QuestParserCollection::DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int ret = 0; auto iter = _load_precedence.begin(); while(iter != _load_precedence.end()) { @@ -1020,8 +1020,8 @@ int QuestParserCollection::DispatchEventPlayer(QuestEventID evt, Client *client, return ret; } -int QuestParserCollection::DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, - uint32 extra_data, std::vector *extra_pointers) { +int QuestParserCollection::DispatchEventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, + uint32 extra_data, std::vector *extra_pointers) { int ret = 0; auto iter = _load_precedence.begin(); while(iter != _load_precedence.end()) { @@ -1035,7 +1035,7 @@ int QuestParserCollection::DispatchEventItem(QuestEventID evt, Client *client, E } int QuestParserCollection::DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers) { + std::vector *extra_pointers) { int ret = 0; auto iter = _load_precedence.begin(); while(iter != _load_precedence.end()) { diff --git a/zone/quest_parser_collection.h b/zone/quest_parser_collection.h index 196cfffc2..a5dc07a95 100644 --- a/zone/quest_parser_collection.h +++ b/zone/quest_parser_collection.h @@ -48,7 +48,7 @@ class Mob; class NPC; class QuestInterface; -namespace EQEmu +namespace EQ { class Any; class ItemInstance; @@ -69,18 +69,18 @@ public: bool HasQuestSub(uint32 npcid, QuestEventID evt); bool PlayerHasQuestSub(QuestEventID evt); bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt); - bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt); + bool ItemHasQuestSub(EQ::ItemInstance *itm, QuestEventID evt); int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers = nullptr); + std::vector *extra_pointers = nullptr); int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers = nullptr); - int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers = nullptr); + std::vector *extra_pointers = nullptr); + int EventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers = nullptr); int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers = nullptr); + std::vector *extra_pointers = nullptr); int EventEncounter(QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, - std::vector *extra_pointers = nullptr); + std::vector *extra_pointers = nullptr); void GetErrors(std::list &err); @@ -111,10 +111,10 @@ private: bool PlayerHasQuestSubLocal(QuestEventID evt); bool PlayerHasQuestSubGlobal(QuestEventID evt); - int EventNPCLocal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector *extra_pointers); - int EventNPCGlobal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector *extra_pointers); - int EventPlayerLocal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, std::vector *extra_pointers); - int EventPlayerGlobal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, std::vector *extra_pointers); + int EventNPCLocal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector *extra_pointers); + int EventNPCGlobal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector *extra_pointers); + int EventPlayerLocal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, std::vector *extra_pointers); + int EventPlayerGlobal(QuestEventID evt, Client *client, std::string data, uint32 extra_data, std::vector *extra_pointers); QuestInterface *GetQIByNPCQuest(uint32 npcid, std::string &filename); QuestInterface *GetQIByGlobalNPCQuest(std::string &filename); @@ -125,13 +125,13 @@ private: QuestInterface *GetQIByEncounterQuest(std::string encounter_name, std::string &filename); int DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data, - std::vector *extra_pointers); - int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); + int DispatchEventItem(QuestEventID evt, Client *client, EQ::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data, + std::vector *extra_pointers); int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, - std::vector *extra_pointers); + std::vector *extra_pointers); std::map _interfaces; std::map _extensions; diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index dc2663d5a..969fab6eb 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -54,7 +54,7 @@ QuestManager quest_manager; #define QuestManagerCurrentQuestVars() \ Mob *owner = nullptr; \ Client *initiator = nullptr; \ - EQEmu::ItemInstance* questitem = nullptr; \ + EQ::ItemInstance* questitem = nullptr; \ bool depop_npc = false; \ std::string encounter; \ do { \ @@ -116,7 +116,7 @@ void QuestManager::Process() { } } -void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQEmu::ItemInstance* _questitem, std::string encounter) { +void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQ::ItemInstance* _questitem, std::string encounter) { running_quest run; run.owner = _owner; run.initiator = _initiator; @@ -370,14 +370,14 @@ void QuestManager::castspell(int spell_id, int target_id) { if (owner) { Mob *tgt = entity_list.GetMob(target_id); if(tgt != nullptr) - owner->SpellFinished(spell_id, tgt, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + owner->SpellFinished(spell_id, tgt, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } } void QuestManager::selfcast(int spell_id) { QuestManagerCurrentQuestVars(); if (initiator) - initiator->SpellFinished(spell_id, initiator, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + initiator->SpellFinished(spell_id, initiator, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } void QuestManager::addloot(int item_id, int charges, bool equipitem, int aug1, int aug2, int aug3, int aug4, int aug5, int aug6) { @@ -455,7 +455,7 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds) { QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name)); } -void QuestManager::settimerMS(const char *timer_name, int milliseconds, EQEmu::ItemInstance *inst) { +void QuestManager::settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst) { if (inst) { inst->SetTimer(timer_name, milliseconds); } @@ -498,7 +498,7 @@ void QuestManager::stoptimer(const char *timer_name) { } } -void QuestManager::stoptimer(const char *timer_name, EQEmu::ItemInstance *inst) { +void QuestManager::stoptimer(const char *timer_name, EQ::ItemInstance *inst) { if (inst) { inst->StopTimer(timer_name); } @@ -536,7 +536,7 @@ void QuestManager::stopalltimers() { } } -void QuestManager::stopalltimers(EQEmu::ItemInstance *inst) { +void QuestManager::stopalltimers(EQ::ItemInstance *inst) { if (inst) { inst->ClearTimers(); } @@ -847,12 +847,12 @@ void QuestManager::traindisc(int discipline_tome_item_id) { } bool QuestManager::isdisctome(int item_id) { - const EQEmu::ItemData *item = database.GetItem(item_id); + const EQ::ItemData *item = database.GetItem(item_id); if(item == nullptr) { return(false); } - if (!item->IsClassCommon() || item->ItemType != EQEmu::item::ItemTypeSpell) { + if (!item->IsClassCommon() || item->ItemType != EQ::item::ItemTypeSpell) { return(false); } @@ -920,8 +920,8 @@ std::string QuestManager::getspellname(uint32 spell_id) { } std::string QuestManager::getskillname(int skill_id) { - if (skill_id >= 0 && skill_id < EQEmu::skills::SkillCount) { - std::map Skills = EQEmu::skills::GetSkillTypeMap(); + if (skill_id >= 0 && skill_id < EQ::skills::SkillCount) { + std::map Skills = EQ::skills::GetSkillTypeMap(); for (auto skills_iter : Skills) { if (skill_id == skills_iter.first) { return skills_iter.second; @@ -1009,7 +1009,7 @@ uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) { bool SpellGlobalCheckResult = false; bool SpellBucketCheckResult = false; - for ( ; spell_id < SPDAT_RECORDS && book_slot < EQEmu::spells::SPELLBOOK_SIZE; ++spell_id) { + for ( ; spell_id < SPDAT_RECORDS && book_slot < EQ::spells::SPELLBOOK_SIZE; ++spell_id) { if (book_slot == -1) { initiator->Message( 13, @@ -1024,8 +1024,8 @@ uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) { initiator->Message(Chat::Red, "FATAL ERROR: Spell id out-of-range (id: %i, min: 0, max: %i)", spell_id, SPDAT_RECORDS); return count; } - if (book_slot < 0 || book_slot >= EQEmu::spells::SPELLBOOK_SIZE) { - initiator->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQEmu::spells::SPELLBOOK_SIZE); + if (book_slot < 0 || book_slot >= EQ::spells::SPELLBOOK_SIZE) { + initiator->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQ::spells::SPELLBOOK_SIZE); return count; } @@ -1286,10 +1286,10 @@ void QuestManager::doanim(int anim_id) { void QuestManager::addskill(int skill_id, int value) { QuestManagerCurrentQuestVars(); - if (skill_id < 0 || skill_id > EQEmu::skills::HIGHEST_SKILL) + if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL) return; if (initiator && initiator->IsClient()) - initiator->AddSkill((EQEmu::skills::SkillType) skill_id, value); + initiator->AddSkill((EQ::skills::SkillType) skill_id, value); } void QuestManager::setlanguage(int skill_id, int value) { @@ -1300,10 +1300,10 @@ void QuestManager::setlanguage(int skill_id, int value) { void QuestManager::setskill(int skill_id, int value) { QuestManagerCurrentQuestVars(); - if (skill_id < 0 || skill_id > EQEmu::skills::HIGHEST_SKILL) + if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL) return; if (initiator && initiator->IsClient()) - initiator->SetSkill((EQEmu::skills::SkillType) skill_id, value); + initiator->SetSkill((EQ::skills::SkillType) skill_id, value); } void QuestManager::setallskill(int value) { @@ -1311,8 +1311,8 @@ void QuestManager::setallskill(int value) { if (!initiator) return; if (initiator && initiator->IsClient()) { - EQEmu::skills::SkillType sk; - for (sk = EQEmu::skills::Skill1HBlunt; sk <= EQEmu::skills::HIGHEST_SKILL; sk = (EQEmu::skills::SkillType)(sk + 1)) { + EQ::skills::SkillType sk; + for (sk = EQ::skills::Skill1HBlunt; sk <= EQ::skills::HIGHEST_SKILL; sk = (EQ::skills::SkillType)(sk + 1)) { initiator->SetSkill(sk, value); } } @@ -1438,12 +1438,12 @@ void QuestManager::settime(uint8 new_hour, uint8 new_min, bool update_world /*= void QuestManager::itemlink(int item_id) { QuestManagerCurrentQuestVars(); if (initiator) { - const EQEmu::ItemData* item = database.GetItem(item_id); + const EQ::ItemData* item = database.GetItem(item_id); if (item == nullptr) return; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemData); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); linker.SetItemData(item); initiator->Message(Chat::White, "%s tells you, %s", owner->GetCleanName(), linker.GenerateLink().c_str()); @@ -1908,7 +1908,7 @@ void QuestManager::clear_zone_flag(int zone_id) { void QuestManager::sethp(int hpperc) { QuestManagerCurrentQuestVars(); int newhp = (owner->GetMaxHP() * (100 - hpperc)) / 100; - owner->Damage(owner, newhp, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand, false, 0, false); + owner->Damage(owner, newhp, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false, 0, false); } bool QuestManager::summonburiedplayercorpse(uint32 char_id, const glm::vec4& position) { @@ -2567,7 +2567,7 @@ int QuestManager::collectitems_processSlot(int16 slot_id, uint32 item_id, bool remove) { QuestManagerCurrentQuestVars(); - EQEmu::ItemInstance *item = nullptr; + EQ::ItemInstance *item = nullptr; int quantity = 0; item = initiator->GetInv().GetItem(slot_id); @@ -2602,12 +2602,12 @@ int QuestManager::collectitems(uint32 item_id, bool remove) int quantity = 0; int slot_id; - for (slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id) + for (slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id) { quantity += collectitems_processSlot(slot_id, item_id, remove); } - for (slot_id = EQEmu::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQEmu::invbag::GENERAL_BAGS_END; ++slot_id) + for (slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::GENERAL_BAGS_END; ++slot_id) { quantity += collectitems_processSlot(slot_id, item_id, remove); } @@ -2618,15 +2618,15 @@ int QuestManager::collectitems(uint32 item_id, bool remove) int QuestManager::countitem(uint32 item_id) { QuestManagerCurrentQuestVars(); int quantity = 0; - EQEmu::ItemInstance *item = nullptr; + EQ::ItemInstance *item = nullptr; static const int16 slots[][2] = { - { EQEmu::invslot::POSSESSIONS_BEGIN, EQEmu::invslot::POSSESSIONS_END }, - { EQEmu::invbag::GENERAL_BAGS_BEGIN, EQEmu::invbag::GENERAL_BAGS_END }, - { EQEmu::invbag::CURSOR_BAG_BEGIN, EQEmu::invbag::CURSOR_BAG_END}, - { EQEmu::invslot::BANK_BEGIN, EQEmu::invslot::BANK_END }, - { EQEmu::invbag::BANK_BAGS_BEGIN, EQEmu::invbag::BANK_BAGS_END }, - { EQEmu::invslot::SHARED_BANK_BEGIN, EQEmu::invslot::SHARED_BANK_END }, - { EQEmu::invbag::SHARED_BANK_BAGS_BEGIN, EQEmu::invbag::SHARED_BANK_BAGS_END }, + { EQ::invslot::POSSESSIONS_BEGIN, EQ::invslot::POSSESSIONS_END }, + { EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END }, + { EQ::invbag::CURSOR_BAG_BEGIN, EQ::invbag::CURSOR_BAG_END}, + { EQ::invslot::BANK_BEGIN, EQ::invslot::BANK_END }, + { EQ::invbag::BANK_BAGS_BEGIN, EQ::invbag::BANK_BAGS_END }, + { EQ::invslot::SHARED_BANK_BEGIN, EQ::invslot::SHARED_BANK_END }, + { EQ::invbag::SHARED_BANK_BAGS_BEGIN, EQ::invbag::SHARED_BANK_BAGS_END }, }; const size_t size = sizeof(slots) / sizeof(slots[0]); for (int slot_index = 0; slot_index < size; ++slot_index) { @@ -2682,7 +2682,7 @@ void QuestManager::MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity) if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT)) return; // don't do anything if NPCid isn't a merchant - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; item = database.GetItem(itemid); if (!item) return; // if the item id doesn't correspond to a real item, do nothing @@ -2695,7 +2695,7 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) { if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT)) return 0; // if it isn't a merchant, it doesn't have any items - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; item = database.GetItem(itemid); if (!item) return 0; // if it isn't a valid item, the merchant doesn't have any @@ -2718,12 +2718,12 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) { // Item Link for use in Variables - "my $example_link = quest::varlink(item_id);" const char* QuestManager::varlink(char* perltext, int item_id) { QuestManagerCurrentQuestVars(); - const EQEmu::ItemData* item = database.GetItem(item_id); + const EQ::ItemData* item = database.GetItem(item_id); if (!item) return "INVALID ITEM ID IN VARLINK"; - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemData); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); linker.SetItemData(item); strcpy(perltext, linker.GenerateLink().c_str()); @@ -2732,7 +2732,7 @@ const char* QuestManager::varlink(char* perltext, int item_id) { } std::string QuestManager::getitemname(uint32 item_id) { - const EQEmu::ItemData* item_data = database.GetItem(item_id); + const EQ::ItemData* item_data = database.GetItem(item_id); if (!item_data) { return "INVALID ITEM ID IN GETITEMNAME"; } @@ -2948,7 +2948,7 @@ std::string QuestManager::saylink(char *saylink_text, bool silent, const char *l { QuestManagerCurrentQuestVars(); - return EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name); + return EQ::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name); } const char* QuestManager::getcharnamebyid(uint32 char_id) { @@ -3427,7 +3427,7 @@ Mob *QuestManager::GetOwner() const { return nullptr; } -EQEmu::ItemInstance *QuestManager::GetQuestItem() const { +EQ::ItemInstance *QuestManager::GetQuestItem() const { if(!quests_running_.empty()) { running_quest e = quests_running_.top(); return e.questitem; diff --git a/zone/questmgr.h b/zone/questmgr.h index 6f9ab4c4e..fb27ca002 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -28,7 +28,7 @@ class Client; class Mob; class NPC; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -37,7 +37,7 @@ class QuestManager { struct running_quest { Mob *owner; Client *initiator; - EQEmu::ItemInstance* questitem; + EQ::ItemInstance* questitem; bool depop_npc; std::string encounter; }; @@ -51,7 +51,7 @@ public: QuestManager(); virtual ~QuestManager(); - void StartQuest(Mob *_owner, Client *_initiator = nullptr, EQEmu::ItemInstance* _questitem = nullptr, std::string encounter = ""); + void StartQuest(Mob *_owner, Client *_initiator = nullptr, EQ::ItemInstance* _questitem = nullptr, std::string encounter = ""); void EndQuest(); bool QuestsRunning() { return !quests_running_.empty(); } @@ -79,13 +79,13 @@ public: void Zone(const char *zone_name); void settimer(const char *timer_name, int seconds); void settimerMS(const char *timer_name, int milliseconds); - void settimerMS(const char *timer_name, int milliseconds, EQEmu::ItemInstance *inst); + void settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst); void settimerMS(const char *timer_name, int milliseconds, Mob *mob); void stoptimer(const char *timer_name); - void stoptimer(const char *timer_name, EQEmu::ItemInstance *inst); + void stoptimer(const char *timer_name, EQ::ItemInstance *inst); void stoptimer(const char *timer_name, Mob *mob); void stopalltimers(); - void stopalltimers(EQEmu::ItemInstance *inst); + void stopalltimers(EQ::ItemInstance *inst); void stopalltimers(Mob *mob); void pausetimer(const char *timer_name); void resumetimer(const char *timer_name); @@ -302,7 +302,7 @@ public: Client *GetInitiator() const; NPC *GetNPC() const; Mob *GetOwner() const; - EQEmu::ItemInstance *GetQuestItem() const; + EQ::ItemInstance *GetQuestItem() const; std::string GetEncounter() const; inline bool ProximitySayInUse() { return HaveProximitySays; } diff --git a/zone/raids.cpp b/zone/raids.cpp index 428b17843..2dc892a9a 100644 --- a/zone/raids.cpp +++ b/zone/raids.cpp @@ -1592,7 +1592,7 @@ void Raid::SendHPManaEndPacketsTo(Client *client) safe_delete_array(hp_packet.pBuffer); hp_packet.size = 0; - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (client->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; @@ -1629,7 +1629,7 @@ void Raid::SendHPManaEndPacketsFrom(Mob *mob) if(members[x].member) { if(!mob->IsClient() || ((members[x].member != mob->CastToClient()) && (members[x].GroupNumber == group_id))) { members[x].member->QueuePacket(&hpapp, false); - if (members[x].member->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[x].member->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; mana_update->spawn_id = mob->GetID(); @@ -1661,7 +1661,7 @@ void Raid::SendManaPacketFrom(Mob *mob) for (int x = 0; x < MAX_RAID_MEMBERS; x++) { if (members[x].member) { if (!mob->IsClient() || ((members[x].member != mob->CastToClient()) && (members[x].GroupNumber == group_id))) { - if (members[x].member->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[x].member->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobManaUpdate); MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer; mana_update->spawn_id = mob->GetID(); @@ -1688,7 +1688,7 @@ void Raid::SendEndurancePacketFrom(Mob *mob) for (int x = 0; x < MAX_RAID_MEMBERS; x++) { if (members[x].member) { if (!mob->IsClient() || ((members[x].member != mob->CastToClient()) && (members[x].GroupNumber == group_id))) { - if (members[x].member->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (members[x].member->ClientVersion() >= EQ::versions::ClientVersion::SoD) { outapp.SetOpcode(OP_MobEnduranceUpdate); MobEnduranceUpdate_Struct *endurance_update = (MobEnduranceUpdate_Struct *)outapp.pBuffer; endurance_update->spawn_id = mob->GetID(); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 9334e4f6c..831580e8f 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -29,15 +29,15 @@ extern double frame_time; -int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) +int Mob::GetBaseSkillDamage(EQ::skills::SkillType skill, Mob *target) { - int base = EQEmu::skills::GetBaseDamage(skill); + int base = EQ::skills::GetBaseDamage(skill); auto skill_level = GetSkill(skill); switch (skill) { - case EQEmu::skills::SkillDragonPunch: - case EQEmu::skills::SkillEagleStrike: - case EQEmu::skills::SkillTigerClaw: - case EQEmu::skills::SkillRoundKick: + case EQ::skills::SkillDragonPunch: + case EQ::skills::SkillEagleStrike: + case EQ::skills::SkillTigerClaw: + case EQ::skills::SkillRoundKick: if (skill_level >= 25) base++; if (skill_level >= 75) @@ -47,8 +47,8 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) if (skill_level >= 175) base++; return base; - case EQEmu::skills::SkillFrenzy: - if (IsClient() && CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary)) { + case EQ::skills::SkillFrenzy: + if (IsClient() && CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary)) { if (GetLevel() > 15) base += GetLevel() - 15; if (base > 23) @@ -61,11 +61,11 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) base++; } return base; - case EQEmu::skills::SkillFlyingKick: { + case EQ::skills::SkillFlyingKick: { float skill_bonus = skill_level / 9.0f; float ac_bonus = 0.0f; if (IsClient()) { - auto inst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotFeet); + auto inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotFeet); if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; } @@ -73,12 +73,12 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillKick: { + case EQ::skills::SkillKick: { // there is some base *= 4 case in here? float skill_bonus = skill_level / 10.0f; float ac_bonus = 0.0f; if (IsClient()) { - auto inst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotFeet); + auto inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotFeet); if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; } @@ -86,15 +86,15 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillBash: { + case EQ::skills::SkillBash: { float skill_bonus = skill_level / 10.0f; float ac_bonus = 0.0f; - const EQEmu::ItemInstance *inst = nullptr; + const EQ::ItemInstance *inst = nullptr; if (IsClient()) { if (HasShieldEquiped()) - inst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); else if (HasTwoHanderEquipped()) - inst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); + inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); } if (inst) ac_bonus = inst->GetItemArmorClass(true) / 25.0f; @@ -104,13 +104,13 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) ac_bonus = skill_bonus; return static_cast(ac_bonus + skill_bonus); } - case EQEmu::skills::SkillBackstab: { + case EQ::skills::SkillBackstab: { float skill_bonus = static_cast(skill_level) * 0.02f; base = 3; // There seems to be a base 3 for NPCs or some how BS w/o weapon? // until we get a better inv system for NPCs they get nerfed! if (IsClient()) { - auto *inst = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); - if (inst && inst->GetItem() && inst->GetItem()->ItemType == EQEmu::item::ItemType1HPiercing) { + auto *inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); + if (inst && inst->GetItem() && inst->GetItem()->ItemType == EQ::item::ItemType1HPiercing) { base = inst->GetItemBackstabDamage(true); if (!inst->GetItemBackstabDamage()) base += inst->GetItemWeaponDamage(true); @@ -136,7 +136,7 @@ int Mob::GetBaseSkillDamage(EQEmu::skills::SkillType skill, Mob *target) } } -void Mob::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 base_damage, int32 min_damage, +void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 base_damage, int32 min_damage, int32 hate_override, int ReuseTime) { // this really should go through the same code as normal melee damage to @@ -159,21 +159,21 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 if (who->GetInvul() || who->GetSpecialAbility(IMMUNE_MELEE)) my_hit.damage_done = DMG_INVULNERABLE; - if (who->GetSpecialAbility(IMMUNE_MELEE_EXCEPT_BANE) && skill != EQEmu::skills::SkillBackstab) + if (who->GetSpecialAbility(IMMUNE_MELEE_EXCEPT_BANE) && skill != EQ::skills::SkillBackstab) my_hit.damage_done = DMG_INVULNERABLE; uint32 hate = my_hit.base_damage; if (hate_override > -1) hate = hate_override; - if (skill == EQEmu::skills::SkillBash) { + if (skill == EQ::skills::SkillBash) { if (IsClient()) { - EQEmu::ItemInstance *item = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + EQ::ItemInstance *item = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); if (item) { - if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield) { + if (item->GetItem()->ItemType == EQ::item::ItemTypeShield) { hate += item->GetItem()->AC; } - const EQEmu::ItemData *itm = item->GetItem(); + const EQ::ItemData *itm = item->GetItem(); auto fbash = GetFuriousBash(itm->Focus.Effect); hate = hate * (100 + fbash) / 100; if (fbash) @@ -185,10 +185,10 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, 0); - my_hit.hand = EQEmu::invslot::slotPrimary; // Avoid checks hand for throwing/archery exclusion, primary should + my_hit.hand = EQ::invslot::slotPrimary; // Avoid checks hand for throwing/archery exclusion, primary should // work for most - if (skill == EQEmu::skills::SkillThrowing || skill == EQEmu::skills::SkillArchery) - my_hit.hand = EQEmu::invslot::slotRange; + if (skill == EQ::skills::SkillThrowing || skill == EQ::skills::SkillArchery) + my_hit.hand = EQ::invslot::slotRange; DoAttack(who, my_hit); @@ -197,7 +197,7 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 IsValidSpell(aabonuses.SkillAttackProc[2])) { float chance = aabonuses.SkillAttackProc[0] / 1000.0f; if (zone->random.Roll(chance)) - SpellFinished(aabonuses.SkillAttackProc[2], who, EQEmu::spells::CastingSlot::Item, 0, -1, + SpellFinished(aabonuses.SkillAttackProc[2], who, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } @@ -228,13 +228,13 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) pTimerType timer = pTimerCombatAbility; // RoF2+ Tiger Claw is unlinked from other monk skills, if they ever do that for other classes there will need // to be more checks here - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF2 && ca_atk->m_skill == EQEmu::skills::SkillTigerClaw) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF2 && ca_atk->m_skill == EQ::skills::SkillTigerClaw) timer = pTimerCombatAbility2; bool CanBypassSkillCheck = false; - if (ca_atk->m_skill == EQEmu::skills::SkillBash) { // SLAM - Bash without a shield equipped + if (ca_atk->m_skill == EQ::skills::SkillBash) { // SLAM - Bash without a shield equipped switch (GetRace()) { case OGRE: @@ -247,7 +247,7 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) } /* Check to see if actually have skill */ - if (!MaxSkill(static_cast(ca_atk->m_skill)) && !CanBypassSkillCheck) + if (!MaxSkill(static_cast(ca_atk->m_skill)) && !CanBypassSkillCheck) return; if (GetTarget()->GetID() != ca_atk->m_target) @@ -259,8 +259,8 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) // These two are not subject to the combat ability timer, as they // allready do their checking in conjunction with the attack timer // throwing weapons - if (ca_atk->m_atk == EQEmu::invslot::slotRange) { - if (ca_atk->m_skill == EQEmu::skills::SkillThrowing) { + if (ca_atk->m_atk == EQ::invslot::slotRange) { + if (ca_atk->m_skill == EQ::skills::SkillThrowing) { SetAttackTimer(); ThrowingAttack(GetTarget()); if (CheckDoubleRangedAttack()) @@ -268,7 +268,7 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) return; } // ranged attack (archery) - if (ca_atk->m_skill == EQEmu::skills::SkillArchery) { + if (ca_atk->m_skill == EQ::skills::SkillArchery) { SetAttackTimer(); RangedAttack(GetTarget()); if (CheckDoubleRangedAttack()) @@ -302,38 +302,38 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) // not sure what the '100' indicates..if ->m_atk is not used as 'slot' reference, then change SlotRange above back to '11' if (ca_atk->m_atk == 100 && - ca_atk->m_skill == EQEmu::skills::SkillBash) { // SLAM - Bash without a shield equipped + ca_atk->m_skill == EQ::skills::SkillBash) { // SLAM - Bash without a shield equipped if (GetTarget() != this) { - CheckIncreaseSkill(EQEmu::skills::SkillBash, GetTarget(), 10); + CheckIncreaseSkill(EQ::skills::SkillBash, GetTarget(), 10); DoAnim(animTailRake, 0, false); int32 ht = 0; - if (GetWeaponDamage(GetTarget(), GetInv().GetItem(EQEmu::invslot::slotSecondary)) <= 0 && - GetWeaponDamage(GetTarget(), GetInv().GetItem(EQEmu::invslot::slotShoulders)) <= 0) + if (GetWeaponDamage(GetTarget(), GetInv().GetItem(EQ::invslot::slotSecondary)) <= 0 && + GetWeaponDamage(GetTarget(), GetInv().GetItem(EQ::invslot::slotShoulders)) <= 0) dmg = -5; else - ht = dmg = GetBaseSkillDamage(EQEmu::skills::SkillBash, GetTarget()); + ht = dmg = GetBaseSkillDamage(EQ::skills::SkillBash, GetTarget()); ReuseTime = BashReuseTime - 1 - skill_reduction; ReuseTime = (ReuseTime * HasteMod) / 100; - DoSpecialAttackDamage(GetTarget(), EQEmu::skills::SkillBash, dmg, 0, ht, ReuseTime); + DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillBash, dmg, 0, ht, ReuseTime); if (ReuseTime > 0) p_timers.Start(timer, ReuseTime); } return; } - if (ca_atk->m_atk == 100 && ca_atk->m_skill == EQEmu::skills::SkillFrenzy) { - CheckIncreaseSkill(EQEmu::skills::SkillFrenzy, GetTarget(), 10); + if (ca_atk->m_atk == 100 && ca_atk->m_skill == EQ::skills::SkillFrenzy) { + CheckIncreaseSkill(EQ::skills::SkillFrenzy, GetTarget(), 10); int AtkRounds = 1; - int32 max_dmg = GetBaseSkillDamage(EQEmu::skills::SkillFrenzy, GetTarget()); + int32 max_dmg = GetBaseSkillDamage(EQ::skills::SkillFrenzy, GetTarget()); DoAnim(anim2HSlashing, 0, false); max_dmg = mod_frenzy_damage(max_dmg); if (GetClass() == BERSERKER) { - int chance = GetLevel() * 2 + GetSkill(EQEmu::skills::SkillFrenzy); + int chance = GetLevel() * 2 + GetSkill(EQ::skills::SkillFrenzy); if (zone->random.Roll0(450) < chance) AtkRounds++; if (zone->random.Roll0(450) < chance) @@ -345,7 +345,7 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) while (AtkRounds > 0) { if (GetTarget()) - DoSpecialAttackDamage(GetTarget(), EQEmu::skills::SkillFrenzy, max_dmg, 0, max_dmg, ReuseTime); + DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillFrenzy, max_dmg, 0, max_dmg, ReuseTime); AtkRounds--; } @@ -359,20 +359,20 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) case WARRIOR: case RANGER: case BEASTLORD: - if (ca_atk->m_atk != 100 || ca_atk->m_skill != EQEmu::skills::SkillKick) + if (ca_atk->m_atk != 100 || ca_atk->m_skill != EQ::skills::SkillKick) break; if (GetTarget() != this) { - CheckIncreaseSkill(EQEmu::skills::SkillKick, GetTarget(), 10); + CheckIncreaseSkill(EQ::skills::SkillKick, GetTarget(), 10); DoAnim(animKick, 0, false); int32 ht = 0; - if (GetWeaponDamage(GetTarget(), GetInv().GetItem(EQEmu::invslot::slotFeet)) <= 0) + if (GetWeaponDamage(GetTarget(), GetInv().GetItem(EQ::invslot::slotFeet)) <= 0) dmg = -5; else - ht = dmg = GetBaseSkillDamage(EQEmu::skills::SkillKick, GetTarget()); + ht = dmg = GetBaseSkillDamage(EQ::skills::SkillKick, GetTarget()); ReuseTime = KickReuseTime - 1 - skill_reduction; - DoSpecialAttackDamage(GetTarget(), EQEmu::skills::SkillKick, dmg, 0, ht, ReuseTime); + DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillKick, dmg, 0, ht, ReuseTime); } break; case MONK: { @@ -383,11 +383,11 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) if (wuchance) { const int MonkSPA[5] = { - EQEmu::skills::SkillFlyingKick, - EQEmu::skills::SkillDragonPunch, - EQEmu::skills::SkillEagleStrike, - EQEmu::skills::SkillTigerClaw, - EQEmu::skills::SkillRoundKick + EQ::skills::SkillFlyingKick, + EQ::skills::SkillDragonPunch, + EQ::skills::SkillEagleStrike, + EQ::skills::SkillTigerClaw, + EQ::skills::SkillRoundKick }; int extra = 0; // always 1/4 of the double attack chance, 25% at rank 5 (100/4) @@ -415,12 +415,12 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) // hackish... but we return a huge reuse time if this is an // invalid skill, otherwise, we can safely assume it is a // valid monk skill and just cast it to a SkillType - CheckIncreaseSkill((EQEmu::skills::SkillType)ca_atk->m_skill, GetTarget(), 10); + CheckIncreaseSkill((EQ::skills::SkillType)ca_atk->m_skill, GetTarget(), 10); } break; } case ROGUE: { - if (ca_atk->m_atk != 100 || ca_atk->m_skill != EQEmu::skills::SkillBackstab) + if (ca_atk->m_atk != 100 || ca_atk->m_skill != EQ::skills::SkillBackstab) break; ReuseTime = BackstabReuseTime-1 - skill_reduction; TryBackstab(GetTarget(), ReuseTime); @@ -448,50 +448,50 @@ int Mob::MonkSpecialAttack(Mob *other, uint8 unchecked_type) int32 max_dmg = 0; int32 min_dmg = 0; int reuse = 0; - EQEmu::skills::SkillType skill_type; // to avoid casting... even though it "would work" - uint8 itemslot = EQEmu::invslot::slotFeet; + EQ::skills::SkillType skill_type; // to avoid casting... even though it "would work" + uint8 itemslot = EQ::invslot::slotFeet; if (IsNPC()) { auto *npc = CastToNPC(); min_dmg = npc->GetMinDamage(); } switch (unchecked_type) { - case EQEmu::skills::SkillFlyingKick: - skill_type = EQEmu::skills::SkillFlyingKick; + case EQ::skills::SkillFlyingKick: + skill_type = EQ::skills::SkillFlyingKick; max_dmg = GetBaseSkillDamage(skill_type); min_dmg = 0; // revamped FK formula is missing the min mod? DoAnim(animFlyingKick, 0, false); reuse = FlyingKickReuseTime; break; - case EQEmu::skills::SkillDragonPunch: - skill_type = EQEmu::skills::SkillDragonPunch; + case EQ::skills::SkillDragonPunch: + skill_type = EQ::skills::SkillDragonPunch; max_dmg = GetBaseSkillDamage(skill_type); - itemslot = EQEmu::invslot::slotHands; + itemslot = EQ::invslot::slotHands; DoAnim(animTailRake, 0, false); reuse = TailRakeReuseTime; break; - case EQEmu::skills::SkillEagleStrike: - skill_type = EQEmu::skills::SkillEagleStrike; + case EQ::skills::SkillEagleStrike: + skill_type = EQ::skills::SkillEagleStrike; max_dmg = GetBaseSkillDamage(skill_type); - itemslot = EQEmu::invslot::slotHands; + itemslot = EQ::invslot::slotHands; DoAnim(animEagleStrike, 0, false); reuse = EagleStrikeReuseTime; break; - case EQEmu::skills::SkillTigerClaw: - skill_type = EQEmu::skills::SkillTigerClaw; + case EQ::skills::SkillTigerClaw: + skill_type = EQ::skills::SkillTigerClaw; max_dmg = GetBaseSkillDamage(skill_type); - itemslot = EQEmu::invslot::slotHands; + itemslot = EQ::invslot::slotHands; DoAnim(animTigerClaw, 0, false); reuse = TigerClawReuseTime; break; - case EQEmu::skills::SkillRoundKick: - skill_type = EQEmu::skills::SkillRoundKick; + case EQ::skills::SkillRoundKick: + skill_type = EQ::skills::SkillRoundKick; max_dmg = GetBaseSkillDamage(skill_type); DoAnim(animRoundKick, 0, false); reuse = RoundKickReuseTime; break; - case EQEmu::skills::SkillKick: - skill_type = EQEmu::skills::SkillKick; + case EQ::skills::SkillKick: + skill_type = EQ::skills::SkillKick; max_dmg = GetBaseSkillDamage(skill_type); DoAnim(animKick, 0, false); reuse = KickReuseTime; @@ -506,7 +506,7 @@ int Mob::MonkSpecialAttack(Mob *other, uint8 unchecked_type) max_dmg = DMG_INVULNERABLE; } } else { - if (GetWeaponDamage(other, (const EQEmu::ItemData *)nullptr) <= 0) { + if (GetWeaponDamage(other, (const EQ::ItemData *)nullptr) <= 0) { max_dmg = DMG_INVULNERABLE; } } @@ -532,8 +532,8 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) { //make sure we have a proper weapon if we are a client. if(IsClient()) { - const EQEmu::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); - if (!wpn || (wpn->GetItem()->ItemType != EQEmu::item::ItemType1HPiercing)){ + const EQ::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); + if (!wpn || (wpn->GetItem()->ItemType != EQ::item::ItemType1HPiercing)){ MessageString(Chat::Red, BACKSTAB_WEAPON); return; } @@ -571,7 +571,7 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) { } if(IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillBackstab, other, 10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillBackstab, other, 10); } //Live AA - Chaotic Backstab @@ -583,11 +583,11 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) { // Live actually added SPA 473 which grants chance to double here when they revamped chaotic/seized RogueBackstab(other, true, ReuseTime); if(IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillBackstab, other, 10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillBackstab, other, 10); m_specialattacks = eSpecialAttacks::None; } else { //We do a single regular attack if we attack from the front without chaotic stab - Attack(other, EQEmu::invslot::slotPrimary); + Attack(other, EQ::invslot::slotPrimary); } } @@ -601,17 +601,17 @@ void Mob::RogueBackstab(Mob* other, bool min_damage, int ReuseTime) // make sure we can hit (bane, magical, etc) if (IsClient()) { - const EQEmu::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); + const EQ::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); if (!GetWeaponDamage(other, wpn)) return; - } else if (!GetWeaponDamage(other, (const EQEmu::ItemData*)nullptr)){ + } else if (!GetWeaponDamage(other, (const EQ::ItemData*)nullptr)){ return; } - int base_damage = GetBaseSkillDamage(EQEmu::skills::SkillBackstab, other); + int base_damage = GetBaseSkillDamage(EQ::skills::SkillBackstab, other); hate = base_damage; - DoSpecialAttackDamage(other, EQEmu::skills::SkillBackstab, base_damage, 0, hate, ReuseTime); + DoSpecialAttackDamage(other, EQ::skills::SkillBackstab, base_damage, 0, hate, ReuseTime); DoAnim(anim1HPiercing, 0, false); } @@ -620,10 +620,10 @@ void Mob::RogueAssassinate(Mob* other) { //can you dodge, parry, etc.. an assassinate?? //if so, use DoSpecialAttackDamage(other, BACKSTAB, 32000); instead - if (GetWeaponDamage(other, IsClient() ? CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary) : (const EQEmu::ItemInstance*)nullptr) > 0){ - other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab); + if (GetWeaponDamage(other, IsClient() ? CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary) : (const EQ::ItemInstance*)nullptr) > 0){ + other->Damage(this, 32000, SPELL_UNKNOWN, EQ::skills::SkillBackstab); }else{ - other->Damage(this, -5, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab); + other->Damage(this, -5, SPELL_UNKNOWN, EQ::skills::SkillBackstab); } DoAnim(anim1HPiercing, 0, false); //piercing animation } @@ -640,34 +640,34 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) { //Message(0, "Error: Timer not up. Attack %d, ranged %d", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime()); return; } - const EQEmu::ItemInstance* RangeWeapon = m_inv[EQEmu::invslot::slotRange]; + const EQ::ItemInstance* RangeWeapon = m_inv[EQ::invslot::slotRange]; //locate ammo - int ammo_slot = EQEmu::invslot::slotAmmo; - const EQEmu::ItemInstance* Ammo = m_inv[EQEmu::invslot::slotAmmo]; + int ammo_slot = EQ::invslot::slotAmmo; + const EQ::ItemInstance* Ammo = m_inv[EQ::invslot::slotAmmo]; if (!RangeWeapon || !RangeWeapon->IsClassCommon()) { - LogCombat("Ranged attack canceled. Missing or invalid ranged weapon ([{}]) in slot [{}]", GetItemIDAt(EQEmu::invslot::slotRange), EQEmu::invslot::slotRange); - Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have no bow!", GetItemIDAt(EQEmu::invslot::slotRange)); + LogCombat("Ranged attack canceled. Missing or invalid ranged weapon ([{}]) in slot [{}]", GetItemIDAt(EQ::invslot::slotRange), EQ::invslot::slotRange); + Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have no bow!", GetItemIDAt(EQ::invslot::slotRange)); return; } if (!Ammo || !Ammo->IsClassCommon()) { - LogCombat("Ranged attack canceled. Missing or invalid ammo item ([{}]) in slot [{}]", GetItemIDAt(EQEmu::invslot::slotAmmo), EQEmu::invslot::slotAmmo); - Message(0, "Error: Ammo: GetItem(%i)==0, you have no ammo!", GetItemIDAt(EQEmu::invslot::slotAmmo)); + LogCombat("Ranged attack canceled. Missing or invalid ammo item ([{}]) in slot [{}]", GetItemIDAt(EQ::invslot::slotAmmo), EQ::invslot::slotAmmo); + Message(0, "Error: Ammo: GetItem(%i)==0, you have no ammo!", GetItemIDAt(EQ::invslot::slotAmmo)); return; } - const EQEmu::ItemData* RangeItem = RangeWeapon->GetItem(); - const EQEmu::ItemData* AmmoItem = Ammo->GetItem(); + const EQ::ItemData* RangeItem = RangeWeapon->GetItem(); + const EQ::ItemData* AmmoItem = Ammo->GetItem(); - if (RangeItem->ItemType != EQEmu::item::ItemTypeBow) { + if (RangeItem->ItemType != EQ::item::ItemTypeBow) { LogCombat("Ranged attack canceled. Ranged item is not a bow. type [{}]", RangeItem->ItemType); Message(0, "Error: Rangeweapon: Item %d is not a bow.", RangeWeapon->GetID()); return; } - if (AmmoItem->ItemType != EQEmu::item::ItemTypeArrow) { + if (AmmoItem->ItemType != EQ::item::ItemTypeArrow) { LogCombat("Ranged attack canceled. Ammo item is not an arrow. type [{}]", AmmoItem->ItemType); - Message(0, "Error: Ammo: type %d != %d, you have the wrong type of ammo!", AmmoItem->ItemType, EQEmu::item::ItemTypeArrow); + Message(0, "Error: Ammo: type %d != %d, you have the wrong type of ammo!", AmmoItem->ItemType, EQ::item::ItemTypeArrow); return; } @@ -678,18 +678,18 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) { //first look for quivers int r; bool found = false; - for (r = EQEmu::invslot::GENERAL_BEGIN; r <= EQEmu::invslot::GENERAL_END; r++) { - const EQEmu::ItemInstance *pi = m_inv[r]; + for (r = EQ::invslot::GENERAL_BEGIN; r <= EQ::invslot::GENERAL_END; r++) { + const EQ::ItemInstance *pi = m_inv[r]; if (pi == nullptr || !pi->IsClassBag()) continue; - const EQEmu::ItemData* bagitem = pi->GetItem(); - if (!bagitem || bagitem->BagType != EQEmu::item::BagTypeQuiver) + const EQ::ItemData* bagitem = pi->GetItem(); + if (!bagitem || bagitem->BagType != EQ::item::BagTypeQuiver) continue; //we found a quiver, look for the ammo in it int i; for (i = 0; i < bagitem->BagSlots; i++) { - EQEmu::ItemInstance* baginst = pi->GetItem(i); + EQ::ItemInstance* baginst = pi->GetItem(i); if(!baginst) continue; //empty if(baginst->GetID() == Ammo->GetID()) { @@ -756,13 +756,13 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) { LogCombat("Endless Quiver prevented ammo consumption"); } - CheckIncreaseSkill(EQEmu::skills::SkillArchery, GetTarget(), -15); + CheckIncreaseSkill(EQ::skills::SkillArchery, GetTarget(), -15); CommonBreakInvisibleFromCombat(); } -void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, const EQEmu::ItemInstance *Ammo, +void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemInstance *Ammo, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id, - uint32 ammo_id, const EQEmu::ItemData *AmmoItem, int AmmoSlot, float speed) + uint32 ammo_id, const EQ::ItemData *AmmoItem, int AmmoSlot, float speed) { if ((other == nullptr || ((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) || @@ -770,9 +770,9 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, return; } - const EQEmu::ItemInstance *_RangeWeapon = nullptr; - const EQEmu::ItemInstance *_Ammo = nullptr; - const EQEmu::ItemData *ammo_lost = nullptr; + const EQ::ItemInstance *_RangeWeapon = nullptr; + const EQ::ItemInstance *_Ammo = nullptr; + const EQ::ItemData *ammo_lost = nullptr; /* If LaunchProjectile is false this function will do archery damage on target, @@ -795,7 +795,7 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, if (!RangeWeapon && !Ammo && range_id && ammo_id) { if (IsClient()) { - _RangeWeapon = CastToClient()->m_inv[EQEmu::invslot::slotRange]; + _RangeWeapon = CastToClient()->m_inv[EQ::invslot::slotRange]; if (_RangeWeapon && _RangeWeapon->GetItem() && _RangeWeapon->GetItem()->ID == range_id) RangeWeapon = _RangeWeapon; @@ -809,7 +809,7 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, } } } else if (AmmoItem) { - SendItemAnimation(other, AmmoItem, EQEmu::skills::SkillArchery); + SendItemAnimation(other, AmmoItem, EQ::skills::SkillArchery); } LogCombat("Ranged attack hit [{}]", other->GetName()); @@ -826,7 +826,7 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, } if (LaunchProjectile) { // 1: Shoot the Projectile once we calculate weapon damage. - TryProjectileAttack(other, AmmoItem, EQEmu::skills::SkillArchery, (WDmg + ADmg), RangeWeapon, + TryProjectileAttack(other, AmmoItem, EQ::skills::SkillArchery, (WDmg + ADmg), RangeWeapon, Ammo, AmmoSlot, speed); return; } @@ -858,10 +858,10 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, my_hit.min_damage = 0; my_hit.damage_done = 1; - my_hit.skill = EQEmu::skills::SkillArchery; + my_hit.skill = EQ::skills::SkillArchery; my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, chance_mod); - my_hit.hand = EQEmu::invslot::slotRange; + my_hit.hand = EQ::invslot::slotRange; DoAttack(other, my_hit); TotalDmg = my_hit.damage_done; @@ -872,14 +872,14 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, if (IsClient() && !CastToClient()->GetFeigned()) other->AddToHateList(this, hate, 0, false); - other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQEmu::skills::SkillArchery); + other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillArchery); // Skill Proc Success if (TotalDmg > 0 && HasSkillProcSuccess() && other && !other->HasDied()) { if (ReuseTime) - TrySkillProc(other, EQEmu::skills::SkillArchery, ReuseTime); + TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime); else - TrySkillProc(other, EQEmu::skills::SkillArchery, 0, true, EQEmu::invslot::slotRange); + TrySkillProc(other, EQ::skills::SkillArchery, 0, true, EQ::invslot::slotRange); } // end of old fuck @@ -888,26 +888,26 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, // Weapon Proc if (RangeWeapon && other && !other->HasDied()) - TryWeaponProc(RangeWeapon, other, EQEmu::invslot::slotRange); + TryWeaponProc(RangeWeapon, other, EQ::invslot::slotRange); // Ammo Proc if (ammo_lost) - TryWeaponProc(nullptr, ammo_lost, other, EQEmu::invslot::slotRange); + TryWeaponProc(nullptr, ammo_lost, other, EQ::invslot::slotRange); else if (Ammo && other && !other->HasDied()) - TryWeaponProc(Ammo, other, EQEmu::invslot::slotRange); + TryWeaponProc(Ammo, other, EQ::invslot::slotRange); // Skill Proc if (HasSkillProcs() && other && !other->HasDied()) { if (ReuseTime) - TrySkillProc(other, EQEmu::skills::SkillArchery, ReuseTime); + TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime); else - TrySkillProc(other, EQEmu::skills::SkillArchery, 0, false, EQEmu::invslot::slotRange); + TrySkillProc(other, EQ::skills::SkillArchery, 0, false, EQ::invslot::slotRange); } } -bool Mob::TryProjectileAttack(Mob *other, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, - uint16 weapon_dmg, const EQEmu::ItemInstance *RangeWeapon, - const EQEmu::ItemInstance *Ammo, int AmmoSlot, float speed) +bool Mob::TryProjectileAttack(Mob *other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, + uint16 weapon_dmg, const EQ::ItemInstance *RangeWeapon, + const EQ::ItemInstance *Ammo, int AmmoSlot, float speed) { if (!other) return false; @@ -994,7 +994,7 @@ void Mob::ProjectileAttack() if (ProjectileAtk[i].hit_increment <= ProjectileAtk[i].increment) { if (target) { if (IsNPC()) { - if (ProjectileAtk[i].skill == EQEmu::skills::SkillConjuration) { + if (ProjectileAtk[i].skill == EQ::skills::SkillConjuration) { if (IsValidSpell(ProjectileAtk[i].wpn_dmg)) SpellOnTarget(ProjectileAtk[i].wpn_dmg, target, false, true, spells[ProjectileAtk[i].wpn_dmg].ResistDiff, @@ -1002,19 +1002,19 @@ void Mob::ProjectileAttack() } else { CastToNPC()->DoRangedAttackDmg( target, false, ProjectileAtk[i].wpn_dmg, 0, - static_cast(ProjectileAtk[i].skill)); + static_cast(ProjectileAtk[i].skill)); } } else { - if (ProjectileAtk[i].skill == EQEmu::skills::SkillArchery) + if (ProjectileAtk[i].skill == EQ::skills::SkillArchery) DoArcheryAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg, 0, 0, 0, ProjectileAtk[i].ranged_id, ProjectileAtk[i].ammo_id, nullptr, ProjectileAtk[i].ammo_slot); - else if (ProjectileAtk[i].skill == EQEmu::skills::SkillThrowing) + else if (ProjectileAtk[i].skill == EQ::skills::SkillThrowing) DoThrowingAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg, 0, 0, 0, ProjectileAtk[i].ranged_id, ProjectileAtk[i].ammo_slot); - else if (ProjectileAtk[i].skill == EQEmu::skills::SkillConjuration && + else if (ProjectileAtk[i].skill == EQ::skills::SkillConjuration && IsValidSpell(ProjectileAtk[i].wpn_dmg)) SpellOnTarget(ProjectileAtk[i].wpn_dmg, target, false, true, spells[ProjectileAtk[i].wpn_dmg].ResistDiff, true); @@ -1139,7 +1139,7 @@ void NPC::RangedAttack(Mob* other) } } -void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 chance_mod, EQEmu::skills::SkillType skill, float speed, const char *IDFile) +void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 chance_mod, EQ::skills::SkillType skill, float speed, const char *IDFile) { if ((other == nullptr || (other->HasDied())) || @@ -1151,7 +1151,7 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha return; } - EQEmu::skills::SkillType skillInUse = static_cast(GetRangedSkill()); + EQ::skills::SkillType skillInUse = static_cast(GetRangedSkill()); if (skill != skillInUse) skillInUse = skill; @@ -1192,7 +1192,7 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha my_hit.skill = skill; my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, chance_mod); - my_hit.hand = EQEmu::invslot::slotRange; + my_hit.hand = EQ::invslot::slotRange; DoAttack(other, my_hit); @@ -1208,14 +1208,14 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha other->Damage(this, TotalDmg, SPELL_UNKNOWN, skillInUse); if (TotalDmg > 0 && HasSkillProcSuccess() && !other->HasDied()) - TrySkillProc(other, skillInUse, 0, true, EQEmu::invslot::slotRange); + TrySkillProc(other, skillInUse, 0, true, EQ::invslot::slotRange); //try proc on hits and misses if(other && !other->HasDied()) - TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, other, EQEmu::invslot::slotRange); + TrySpellProc(nullptr, (const EQ::ItemData*)nullptr, other, EQ::invslot::slotRange); if (HasSkillProcs() && other && !other->HasDied()) - TrySkillProc(other, skillInUse, 0, false, EQEmu::invslot::slotRange); + TrySkillProc(other, skillInUse, 0, false, EQ::invslot::slotRange); } void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51 @@ -1231,19 +1231,19 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51 return; } - int ammo_slot = EQEmu::invslot::slotRange; - const EQEmu::ItemInstance* RangeWeapon = m_inv[EQEmu::invslot::slotRange]; + int ammo_slot = EQ::invslot::slotRange; + const EQ::ItemInstance* RangeWeapon = m_inv[EQ::invslot::slotRange]; if (!RangeWeapon || !RangeWeapon->IsClassCommon()) { - LogCombat("Ranged attack canceled. Missing or invalid ranged weapon ([{}]) in slot [{}]", GetItemIDAt(EQEmu::invslot::slotRange), EQEmu::invslot::slotRange); - Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing to throw!", GetItemIDAt(EQEmu::invslot::slotRange)); + LogCombat("Ranged attack canceled. Missing or invalid ranged weapon ([{}]) in slot [{}]", GetItemIDAt(EQ::invslot::slotRange), EQ::invslot::slotRange); + Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing to throw!", GetItemIDAt(EQ::invslot::slotRange)); return; } - const EQEmu::ItemData* item = RangeWeapon->GetItem(); - if (item->ItemType != EQEmu::item::ItemTypeLargeThrowing && item->ItemType != EQEmu::item::ItemTypeSmallThrowing) { + const EQ::ItemData* item = RangeWeapon->GetItem(); + if (item->ItemType != EQ::item::ItemTypeLargeThrowing && item->ItemType != EQ::item::ItemTypeSmallThrowing) { LogCombat("Ranged attack canceled. Ranged item [{}] is not a throwing weapon. type [{}]", item->ItemType); - Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing useful to throw!", GetItemIDAt(EQEmu::invslot::slotRange)); + Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing useful to throw!", GetItemIDAt(EQ::invslot::slotRange)); return; } @@ -1251,11 +1251,11 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51 if(RangeWeapon->GetCharges() == 1) { //first check ammo - const EQEmu::ItemInstance* AmmoItem = m_inv[EQEmu::invslot::slotAmmo]; + const EQ::ItemInstance* AmmoItem = m_inv[EQ::invslot::slotAmmo]; if(AmmoItem != nullptr && AmmoItem->GetID() == RangeWeapon->GetID()) { //more in the ammo slot, use it RangeWeapon = AmmoItem; - ammo_slot = EQEmu::invslot::slotAmmo; + ammo_slot = EQ::invslot::slotAmmo; LogCombat("Using ammo from ammo slot, stack at slot [{}]. [{}] in stack", ammo_slot, RangeWeapon->GetCharges()); } else { //look through our inventory for more @@ -1301,7 +1301,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51 CommonBreakInvisibleFromCombat(); } -void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon, const EQEmu::ItemData *AmmoItem, +void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemData *AmmoItem, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id, int AmmoSlot, float speed) { @@ -1311,8 +1311,8 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon return; } - const EQEmu::ItemInstance *_RangeWeapon = nullptr; - const EQEmu::ItemData *ammo_lost = nullptr; + const EQ::ItemInstance *_RangeWeapon = nullptr; + const EQ::ItemData *ammo_lost = nullptr; /* If LaunchProjectile is false this function will do archery damage on target, @@ -1337,7 +1337,7 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon } } } else if (AmmoItem) { - SendItemAnimation(other, AmmoItem, EQEmu::skills::SkillThrowing); + SendItemAnimation(other, AmmoItem, EQ::skills::SkillThrowing); } LogCombat("Throwing attack hit [{}]", other->GetName()); @@ -1351,7 +1351,7 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon WDmg = GetWeaponDamage(other, AmmoItem); if (LaunchProjectile) { - TryProjectileAttack(other, AmmoItem, EQEmu::skills::SkillThrowing, WDmg, RangeWeapon, + TryProjectileAttack(other, AmmoItem, EQ::skills::SkillThrowing, WDmg, RangeWeapon, nullptr, AmmoSlot, speed); return; } @@ -1370,10 +1370,10 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon my_hit.min_damage = 0; my_hit.damage_done = 1; - my_hit.skill = EQEmu::skills::SkillThrowing; + my_hit.skill = EQ::skills::SkillThrowing; my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, chance_mod); - my_hit.hand = EQEmu::invslot::slotRange; + my_hit.hand = EQ::invslot::slotRange; DoAttack(other, my_hit); TotalDmg = my_hit.damage_done; @@ -1386,13 +1386,13 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon if (IsClient() && !CastToClient()->GetFeigned()) other->AddToHateList(this, WDmg, 0, false); - other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQEmu::skills::SkillThrowing); + other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillThrowing); if (TotalDmg > 0 && HasSkillProcSuccess() && other && !other->HasDied()) { if (ReuseTime) - TrySkillProc(other, EQEmu::skills::SkillThrowing, ReuseTime); + TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime); else - TrySkillProc(other, EQEmu::skills::SkillThrowing, 0, true, EQEmu::invslot::slotRange); + TrySkillProc(other, EQ::skills::SkillThrowing, 0, true, EQ::invslot::slotRange); } // end old shit @@ -1401,22 +1401,22 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQEmu::ItemInstance *RangeWeapon // Throwing item Proc if (ammo_lost) - TryWeaponProc(nullptr, ammo_lost, other, EQEmu::invslot::slotRange); + TryWeaponProc(nullptr, ammo_lost, other, EQ::invslot::slotRange); else if (RangeWeapon && other && !other->HasDied()) - TryWeaponProc(RangeWeapon, other, EQEmu::invslot::slotRange); + TryWeaponProc(RangeWeapon, other, EQ::invslot::slotRange); if (HasSkillProcs() && other && !other->HasDied()) { if (ReuseTime) - TrySkillProc(other, EQEmu::skills::SkillThrowing, ReuseTime); + TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime); else - TrySkillProc(other, EQEmu::skills::SkillThrowing, 0, false, EQEmu::invslot::slotRange); + TrySkillProc(other, EQ::skills::SkillThrowing, 0, false, EQ::invslot::slotRange); } if (IsClient()) { - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillThrowing, GetTarget()); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillThrowing, GetTarget()); } } -void Mob::SendItemAnimation(Mob *to, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, float velocity) { +void Mob::SendItemAnimation(Mob *to, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, float velocity) { auto outapp = new EQApplicationPacket(OP_SomeItemPacketMaybe, sizeof(Arrow_Struct)); Arrow_Struct *as = (Arrow_Struct *) outapp->pBuffer; as->type = 1; @@ -1462,11 +1462,11 @@ void Mob::SendItemAnimation(Mob *to, const EQEmu::ItemData *item, EQEmu::skills: safe_delete(outapp); } -void Mob::ProjectileAnimation(Mob* to, int item_id, bool IsArrow, float speed, float angle, float tilt, float arc, const char *IDFile, EQEmu::skills::SkillType skillInUse) { +void Mob::ProjectileAnimation(Mob* to, int item_id, bool IsArrow, float speed, float angle, float tilt, float arc, const char *IDFile, EQ::skills::SkillType skillInUse) { if (!to) return; - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; uint8 item_type = 0; if(!item_id) { @@ -1592,12 +1592,12 @@ void NPC::DoClassAttacks(Mob *target) { } break; case MONK: case MONKGM: { - uint8 satype = EQEmu::skills::SkillKick; - if (level > 29) { satype = EQEmu::skills::SkillFlyingKick; } - else if (level > 24) { satype = EQEmu::skills::SkillDragonPunch; } - else if (level > 19) { satype = EQEmu::skills::SkillEagleStrike; } - else if (level > 9) { satype = EQEmu::skills::SkillTigerClaw; } - else if (level > 4) { satype = EQEmu::skills::SkillRoundKick; } + uint8 satype = EQ::skills::SkillKick; + if (level > 29) { satype = EQ::skills::SkillFlyingKick; } + else if (level > 24) { satype = EQ::skills::SkillDragonPunch; } + else if (level > 19) { satype = EQ::skills::SkillEagleStrike; } + else if (level > 9) { satype = EQ::skills::SkillTigerClaw; } + else if (level > 4) { satype = EQ::skills::SkillRoundKick; } reuse = MonkSpecialAttack(target, satype); reuse *= 1000; @@ -1608,24 +1608,24 @@ void NPC::DoClassAttacks(Mob *target) { if(level >= RuleI(Combat, NPCBashKickLevel)){ if(zone->random.Roll(75)) { //tested on live, warrior mobs both kick and bash, kick about 75% of the time, casting doesn't seem to make a difference. DoAnim(animKick, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillKick); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillKick); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = (KickReuseTime + 3) * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillKick, dmg, GetMinDamage(), -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, GetMinDamage(), -1, reuse); did_attack = true; } else { DoAnim(animTailRake, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillBash); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillBash); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = (BashReuseTime + 3) * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillBash, dmg, GetMinDamage(), -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillBash, dmg, GetMinDamage(), -1, reuse); did_attack = true; } } @@ -1633,11 +1633,11 @@ void NPC::DoClassAttacks(Mob *target) { } case BERSERKER: case BERSERKERGM:{ int AtkRounds = 1; - int32 max_dmg = GetBaseSkillDamage(EQEmu::skills::SkillFrenzy); + int32 max_dmg = GetBaseSkillDamage(EQ::skills::SkillFrenzy); DoAnim(anim2HSlashing, 0, false); if (GetClass() == BERSERKER) { - int chance = GetLevel() * 2 + GetSkill(EQEmu::skills::SkillFrenzy); + int chance = GetLevel() * 2 + GetSkill(EQ::skills::SkillFrenzy); if (zone->random.Roll0(450) < chance) AtkRounds++; if (zone->random.Roll0(450) < chance) @@ -1646,7 +1646,7 @@ void NPC::DoClassAttacks(Mob *target) { while (AtkRounds > 0) { if (GetTarget()) - DoSpecialAttackDamage(GetTarget(), EQEmu::skills::SkillFrenzy, max_dmg, GetMinDamage(), -1, reuse); + DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillFrenzy, max_dmg, GetMinDamage(), -1, reuse); AtkRounds--; } @@ -1658,13 +1658,13 @@ void NPC::DoClassAttacks(Mob *target) { //kick if(level >= RuleI(Combat, NPCBashKickLevel)){ DoAnim(animKick, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillKick); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillKick); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = (KickReuseTime + 3) * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillKick, dmg, GetMinDamage(), -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillKick, dmg, GetMinDamage(), -1, reuse); did_attack = true; } break; @@ -1674,13 +1674,13 @@ void NPC::DoClassAttacks(Mob *target) { case PALADIN: case PALADINGM:{ if(level >= RuleI(Combat, NPCBashKickLevel)){ DoAnim(animTailRake, 0, false); - int32 dmg = GetBaseSkillDamage(EQEmu::skills::SkillBash); + int32 dmg = GetBaseSkillDamage(EQ::skills::SkillBash); - if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0) + if (GetWeaponDamage(target, (const EQ::ItemData*)nullptr) <= 0) dmg = DMG_INVULNERABLE; reuse = (BashReuseTime + 3) * 1000; - DoSpecialAttackDamage(target, EQEmu::skills::SkillBash, dmg, GetMinDamage(), -1, reuse); + DoSpecialAttackDamage(target, EQ::skills::SkillBash, dmg, GetMinDamage(), -1, reuse); did_attack = true; } break; @@ -1721,43 +1721,43 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) case WARRIOR: case RANGER: case BEASTLORD: - skill_to_use = EQEmu::skills::SkillKick; + skill_to_use = EQ::skills::SkillKick; break; case BERSERKER: - skill_to_use = EQEmu::skills::SkillFrenzy; + skill_to_use = EQ::skills::SkillFrenzy; break; case SHADOWKNIGHT: case PALADIN: - skill_to_use = EQEmu::skills::SkillBash; + skill_to_use = EQ::skills::SkillBash; break; case MONK: if(GetLevel() >= 30) { - skill_to_use = EQEmu::skills::SkillFlyingKick; + skill_to_use = EQ::skills::SkillFlyingKick; } else if(GetLevel() >= 25) { - skill_to_use = EQEmu::skills::SkillDragonPunch; + skill_to_use = EQ::skills::SkillDragonPunch; } else if(GetLevel() >= 20) { - skill_to_use = EQEmu::skills::SkillEagleStrike; + skill_to_use = EQ::skills::SkillEagleStrike; } else if(GetLevel() >= 10) { - skill_to_use = EQEmu::skills::SkillTigerClaw; + skill_to_use = EQ::skills::SkillTigerClaw; } else if(GetLevel() >= 5) { - skill_to_use = EQEmu::skills::SkillRoundKick; + skill_to_use = EQ::skills::SkillRoundKick; } else { - skill_to_use = EQEmu::skills::SkillKick; + skill_to_use = EQ::skills::SkillKick; } break; case ROGUE: - skill_to_use = EQEmu::skills::SkillBackstab; + skill_to_use = EQ::skills::SkillBackstab; break; } } @@ -1768,18 +1768,18 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) if(skill_to_use == -1) return; - int dmg = GetBaseSkillDamage(static_cast(skill_to_use), GetTarget()); + int dmg = GetBaseSkillDamage(static_cast(skill_to_use), GetTarget()); - if (skill_to_use == EQEmu::skills::SkillBash) { + if (skill_to_use == EQ::skills::SkillBash) { if (ca_target!=this) { DoAnim(animTailRake, 0, false); - if (GetWeaponDamage(ca_target, GetInv().GetItem(EQEmu::invslot::slotSecondary)) <= 0 && GetWeaponDamage(ca_target, GetInv().GetItem(EQEmu::invslot::slotShoulders)) <= 0) + if (GetWeaponDamage(ca_target, GetInv().GetItem(EQ::invslot::slotSecondary)) <= 0 && GetWeaponDamage(ca_target, GetInv().GetItem(EQ::invslot::slotShoulders)) <= 0) dmg = DMG_INVULNERABLE; ReuseTime = (BashReuseTime - 1) / HasteMod; - DoSpecialAttackDamage(ca_target, EQEmu::skills::SkillBash, dmg, 0, -1, ReuseTime); + DoSpecialAttackDamage(ca_target, EQ::skills::SkillBash, dmg, 0, -1, ReuseTime); if(ReuseTime > 0 && !IsRiposte) { p_timers.Start(pTimerCombatAbility, ReuseTime); @@ -1788,8 +1788,8 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) return; } - if (skill_to_use == EQEmu::skills::SkillFrenzy) { - CheckIncreaseSkill(EQEmu::skills::SkillFrenzy, GetTarget(), 10); + if (skill_to_use == EQ::skills::SkillFrenzy) { + CheckIncreaseSkill(EQ::skills::SkillFrenzy, GetTarget(), 10); int AtkRounds = 1; DoAnim(anim2HSlashing, 0, false); @@ -1797,7 +1797,7 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) // bards can do riposte frenzy for some reason if (!IsRiposte && GetClass() == BERSERKER) { - int chance = GetLevel() * 2 + GetSkill(EQEmu::skills::SkillFrenzy); + int chance = GetLevel() * 2 + GetSkill(EQ::skills::SkillFrenzy); if (zone->random.Roll0(450) < chance) AtkRounds++; if (zone->random.Roll0(450) < chance) @@ -1806,7 +1806,7 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) while(AtkRounds > 0) { if (ca_target!=this) - DoSpecialAttackDamage(ca_target, EQEmu::skills::SkillFrenzy, dmg, 0, dmg, ReuseTime); + DoSpecialAttackDamage(ca_target, EQ::skills::SkillFrenzy, dmg, 0, dmg, ReuseTime); AtkRounds--; } @@ -1816,20 +1816,20 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) return; } - if (skill_to_use == EQEmu::skills::SkillKick){ + if (skill_to_use == EQ::skills::SkillKick){ if(ca_target!=this){ DoAnim(animKick, 0, false); - if (GetWeaponDamage(ca_target, GetInv().GetItem(EQEmu::invslot::slotFeet)) <= 0) + if (GetWeaponDamage(ca_target, GetInv().GetItem(EQ::invslot::slotFeet)) <= 0) dmg = DMG_INVULNERABLE; ReuseTime = KickReuseTime-1; - DoSpecialAttackDamage(ca_target, EQEmu::skills::SkillKick, dmg, 0, -1, ReuseTime); + DoSpecialAttackDamage(ca_target, EQ::skills::SkillKick, dmg, 0, -1, ReuseTime); } } - if (skill_to_use == EQEmu::skills::SkillFlyingKick || skill_to_use == EQEmu::skills::SkillDragonPunch || skill_to_use == EQEmu::skills::SkillEagleStrike || skill_to_use == EQEmu::skills::SkillTigerClaw || skill_to_use == EQEmu::skills::SkillRoundKick) { + if (skill_to_use == EQ::skills::SkillFlyingKick || skill_to_use == EQ::skills::SkillDragonPunch || skill_to_use == EQ::skills::SkillEagleStrike || skill_to_use == EQ::skills::SkillTigerClaw || skill_to_use == EQ::skills::SkillRoundKick) { ReuseTime = MonkSpecialAttack(ca_target, skill_to_use) - 1; MonkSpecialAttack(ca_target, skill_to_use); @@ -1839,9 +1839,9 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) //Live AA - Technique of Master Wu int wuchance = itembonuses.DoubleSpecialAttack + spellbonuses.DoubleSpecialAttack + aabonuses.DoubleSpecialAttack; if (wuchance) { - const int MonkSPA[5] = {EQEmu::skills::SkillFlyingKick, EQEmu::skills::SkillDragonPunch, - EQEmu::skills::SkillEagleStrike, EQEmu::skills::SkillTigerClaw, - EQEmu::skills::SkillRoundKick}; + const int MonkSPA[5] = {EQ::skills::SkillFlyingKick, EQ::skills::SkillDragonPunch, + EQ::skills::SkillEagleStrike, EQ::skills::SkillTigerClaw, + EQ::skills::SkillRoundKick}; int extra = 0; // always 1/4 of the double attack chance, 25% at rank 5 (100/4) while (wuchance > 0) { @@ -1865,7 +1865,7 @@ void Client::DoClassAttacks(Mob *ca_target, uint16 skill, bool IsRiposte) } } - if (skill_to_use == EQEmu::skills::SkillBackstab){ + if (skill_to_use == EQ::skills::SkillBackstab){ ReuseTime = BackstabReuseTime-1; if (IsRiposte) @@ -1892,7 +1892,7 @@ void Mob::Taunt(NPC *who, bool always_succeed, int chance_bonus, bool FromSpell, return; if (!always_succeed && IsClient()) - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillTaunt, who, 10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillTaunt, who, 10); Mob *hate_top = who->GetHateMost(); @@ -1936,8 +1936,8 @@ void Mob::Taunt(NPC *who, bool always_succeed, int chance_bonus, bool FromSpell, // result. if (IsClient() && !always_succeed) tauntchance -= (RuleR(Combat, TauntSkillFalloff) * - (CastToClient()->MaxSkill(EQEmu::skills::SkillTaunt) - - GetSkill(EQEmu::skills::SkillTaunt))); + (CastToClient()->MaxSkill(EQ::skills::SkillTaunt) - + GetSkill(EQ::skills::SkillTaunt))); if (tauntchance < 1) tauntchance = 1.0f; @@ -1966,10 +1966,10 @@ void Mob::Taunt(NPC *who, bool always_succeed, int chance_bonus, bool FromSpell, } if (HasSkillProcs()) - TrySkillProc(who, EQEmu::skills::SkillTaunt, TauntReuseTime * 1000); + TrySkillProc(who, EQ::skills::SkillTaunt, TauntReuseTime * 1000); if (Success && HasSkillProcSuccess()) - TrySkillProc(who, EQEmu::skills::SkillTaunt, TauntReuseTime * 1000, true); + TrySkillProc(who, EQ::skills::SkillTaunt, TauntReuseTime * 1000, true); } void Mob::InstillDoubt(Mob *who) { @@ -1988,14 +1988,14 @@ void Mob::InstillDoubt(Mob *who) { return; if(IsClient()) { - CastToClient()->CheckIncreaseSkill(EQEmu::skills::SkillIntimidation, who, 10); + CastToClient()->CheckIncreaseSkill(EQ::skills::SkillIntimidation, who, 10); } //I think this formula needs work int value = 0; //user's bonus - value += GetSkill(EQEmu::skills::SkillIntimidation) + GetCHA() / 4; + value += GetSkill(EQ::skills::SkillIntimidation) + GetCHA() / 4; //target's counters value -= target->GetLevel()*4 + who->GetWIS()/4; @@ -2017,11 +2017,11 @@ void Mob::InstillDoubt(Mob *who) { } } -int Mob::TryHeadShot(Mob *defender, EQEmu::skills::SkillType skillInUse) +int Mob::TryHeadShot(Mob *defender, EQ::skills::SkillType skillInUse) { // Only works on YOUR target. if (defender && defender->GetBodyType() == BT_Humanoid && !defender->IsClient() && - skillInUse == EQEmu::skills::SkillArchery && GetTarget() == defender) { + skillInUse == EQ::skills::SkillArchery && GetTarget() == defender) { uint32 HeadShot_Dmg = aabonuses.HeadShot[1] + spellbonuses.HeadShot[1] + itembonuses.HeadShot[1]; uint8 HeadShot_Level = 0; // Get Highest Headshot Level HeadShot_Level = std::max({aabonuses.HSLevel[0], spellbonuses.HSLevel[0], itembonuses.HSLevel[0]}); @@ -2048,12 +2048,12 @@ int Mob::TryHeadShot(Mob *defender, EQEmu::skills::SkillType skillInUse) return 0; } -int Mob::TryAssassinate(Mob *defender, EQEmu::skills::SkillType skillInUse) +int Mob::TryAssassinate(Mob *defender, EQ::skills::SkillType skillInUse) { if (defender && (defender->GetBodyType() == BT_Humanoid) && !defender->IsClient() && GetLevel() >= 60 && - (skillInUse == EQEmu::skills::SkillBackstab || skillInUse == EQEmu::skills::SkillThrowing)) { + (skillInUse == EQ::skills::SkillBackstab || skillInUse == EQ::skills::SkillThrowing)) { int chance = GetDEX(); - if (skillInUse == EQEmu::skills::SkillBackstab) { + if (skillInUse == EQ::skills::SkillBackstab) { chance = 100 * chance / (chance + 3500); if (IsClient()) chance += CastToClient()->GetHeroicDEX(); @@ -2061,7 +2061,7 @@ int Mob::TryAssassinate(Mob *defender, EQEmu::skills::SkillType skillInUse) int norm = aabonuses.AssassinateLevel[1]; if (norm > 0) chance = chance * norm / 100; - } else if (skillInUse == EQEmu::skills::SkillThrowing) { + } else if (skillInUse == EQ::skills::SkillThrowing) { if (chance > 255) chance = 260; else @@ -2094,7 +2094,7 @@ int Mob::TryAssassinate(Mob *defender, EQEmu::skills::SkillType skillInUse) return 0; } -void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills::SkillType skillinuse, int16 chance_mod, +void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQ::skills::SkillType skillinuse, int16 chance_mod, int16 focus, bool CanRiposte, int ReuseTime) { if (!CanDoSpecialAttack(other)) @@ -2106,8 +2106,8 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills: TODO: We need to stop moving skill 98, it's suppose to just be a dummy skill AFAIK Spells using offense should use the skill of your primary, if you can use it, otherwise h2h */ - if (skillinuse == EQEmu::skills::SkillBegging) - skillinuse = EQEmu::skills::SkillOffense; + if (skillinuse == EQ::skills::SkillBegging) + skillinuse = EQ::skills::SkillOffense; int damage = 0; uint32 hate = 0; @@ -2118,15 +2118,15 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills: if (focus) // From FcBaseEffects weapon_damage += weapon_damage * focus / 100; - if (skillinuse == EQEmu::skills::SkillBash) { + if (skillinuse == EQ::skills::SkillBash) { if (IsClient()) { - EQEmu::ItemInstance *item = - CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + EQ::ItemInstance *item = + CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); if (item) { - if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield) { + if (item->GetItem()->ItemType == EQ::item::ItemTypeShield) { hate += item->GetItem()->AC; } - const EQEmu::ItemData *itm = item->GetItem(); + const EQ::ItemData *itm = item->GetItem(); hate = hate * (100 + GetFuriousBash(itm->Focus.Effect)) / 100; } } @@ -2141,7 +2141,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills: my_hit.offense = offense(my_hit.skill); my_hit.tohit = GetTotalToHit(my_hit.skill, chance_mod); // slot range exclude ripe etc ... - my_hit.hand = CanRiposte ? EQEmu::invslot::slotRange : EQEmu::invslot::slotPrimary; + my_hit.hand = CanRiposte ? EQ::invslot::slotRange : EQ::invslot::slotPrimary; if (IsNPC()) my_hit.min_damage = CastToNPC()->GetMinDamage(); @@ -2153,8 +2153,8 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills: } bool CanSkillProc = true; - if (skillinuse == EQEmu::skills::SkillOffense) { // Hack to allow damage to display. - skillinuse = EQEmu::skills::SkillTigerClaw; //'strike' your opponent - Arbitrary choice for message. + if (skillinuse == EQ::skills::SkillOffense) { // Hack to allow damage to display. + skillinuse = EQ::skills::SkillTigerClaw; //'strike' your opponent - Arbitrary choice for message. CanSkillProc = false; // Disable skill procs } @@ -2163,7 +2163,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQEmu::skills: IsValidSpell(aabonuses.SkillAttackProc[2])) { float chance = aabonuses.SkillAttackProc[0] / 1000.0f; if (zone->random.Roll(chance)) - SpellFinished(aabonuses.SkillAttackProc[2], other, EQEmu::spells::CastingSlot::Item, 0, -1, + SpellFinished(aabonuses.SkillAttackProc[2], other, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 63a4a113f..2eb17eb29 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -49,7 +49,7 @@ extern WorldServer worldserver; bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_override) { int caster_level, buffslot, effect, effect_value, i; - EQEmu::ItemInstance *SummonedItem=nullptr; + EQ::ItemInstance *SummonedItem=nullptr; #ifdef SPELL_EFFECT_SPAM #define _EDLEN 200 char effect_desc[_EDLEN]; @@ -65,7 +65,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove bool c_override = false; if (caster && caster->IsClient() && GetCastedSpellInvSlot() > 0) { - const EQEmu::ItemInstance *inst = caster->CastToClient()->GetInv().GetItem(GetCastedSpellInvSlot()); + const EQ::ItemInstance *inst = caster->CastToClient()->GetInv().GetItem(GetCastedSpellInvSlot()); if (inst) { if (inst->GetItem()->Click.Level > 0) { caster_level = inst->GetItem()->Click.Level; @@ -149,7 +149,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (spells[spell_id].EndurUpkeep > 0) SetEndurUpkeep(true); - if (IsClient() && CastToClient()->ClientVersionBit() & EQEmu::versions::maskUFAndLater) + if (IsClient() && CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater) { EQApplicationPacket *outapp = MakeBuffsPacket(false); CastToClient()->FastQueuePacket(&outapp); @@ -158,7 +158,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if(IsNPC()) { - std::vector args; + std::vector args; args.push_back(&buffslot); int i = parse->EventSpell(EVENT_SPELL_EFFECT_NPC, CastToNPC(), nullptr, spell_id, caster ? caster->GetID() : 0, &args); if(i != 0){ @@ -168,7 +168,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove } else if(IsClient()) { - std::vector args; + std::vector args; args.push_back(&buffslot); int i = parse->EventSpell(EVENT_SPELL_EFFECT_CLIENT, nullptr, CastToClient(), spell_id, caster ? caster->GetID() : 0, &args); if(i != 0){ @@ -627,7 +627,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove snprintf(effect_desc, _EDLEN, "Flesh To Bone"); #endif if(IsClient()){ - EQEmu::ItemInstance* transI = CastToClient()->GetInv().GetItem(EQEmu::invslot::slotCursor); + EQ::ItemInstance* transI = CastToClient()->GetInv().GetItem(EQ::invslot::slotCursor); if (transI && transI->IsClassCommon() && transI->IsStackable()){ uint32 fcharges = transI->GetCharges(); //Does it sound like meat... maybe should check if it looks like meat too... @@ -637,7 +637,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove strstr(transI->GetItem()->Name, "Flesh") || strstr(transI->GetItem()->Name, "parts") || strstr(transI->GetItem()->Name, "Parts")){ - CastToClient()->DeleteItemInInventory(EQEmu::invslot::slotCursor, fcharges, true); + CastToClient()->DeleteItemInInventory(EQ::invslot::slotCursor, fcharges, true); CastToClient()->SummonItem(13073, fcharges); } else{ @@ -829,7 +829,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #endif if(IsClient()) { - if (CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoDAndLater) + if (CastToClient()->ClientVersionBit() & EQ::versions::maskSoDAndLater) { bodyType bt = BT_Undead; @@ -1152,7 +1152,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_SummonItem: { - const EQEmu::ItemData *item = database.GetItem(spell.base[i]); + const EQ::ItemData *item = database.GetItem(spell.base[i]); #ifdef SPELL_EFFECT_SPAM const char *itemname = item ? item->Name : "*Unknown Item*"; snprintf(effect_desc, _EDLEN, "Summon Item: %s (id %d)", itemname, spell.base[i]); @@ -1177,7 +1177,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (SummonedItem) { c->PushItemOnCursor(*SummonedItem); - c->SendItemPacket(EQEmu::invslot::slotCursor, SummonedItem, ItemPacketLimbo); + c->SendItemPacket(EQ::invslot::slotCursor, SummonedItem, ItemPacketLimbo); safe_delete(SummonedItem); } SummonedItem = database.CreateItem(spell.base[i], charges); @@ -1188,7 +1188,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove } case SE_SummonItemIntoBag: { - const EQEmu::ItemData *item = database.GetItem(spell.base[i]); + const EQ::ItemData *item = database.GetItem(spell.base[i]); #ifdef SPELL_EFFECT_SPAM const char *itemname = item ? item->Name : "*Unknown Item*"; snprintf(effect_desc, _EDLEN, "Summon Item In Bag: %s (id %d)", itemname, spell.base[i]); @@ -1217,7 +1217,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (charges < 1) charges = 1; - EQEmu::ItemInstance *SubItem = database.CreateItem(spell.base[i], charges); + EQ::ItemInstance *SubItem = database.CreateItem(spell.base[i], charges); if (SubItem != nullptr) { SummonedItem->PutItem(slot, *SubItem); safe_delete(SubItem); @@ -1247,7 +1247,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove // Will fix buttons for now if (IsClient()) { auto c = CastToClient(); - if (c->ClientVersionBit() & EQEmu::versions::maskUFAndLater) { + if (c->ClientVersionBit() & EQ::versions::maskUFAndLater) { c->SetPetCommandState(PET_BUTTON_SIT, 0); c->SetPetCommandState(PET_BUTTON_STOP, 0); c->SetPetCommandState(PET_BUTTON_REGROUP, 0); @@ -1466,7 +1466,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove } } - for (int x = EQEmu::textures::textureBegin; x <= EQEmu::textures::LastTintableTexture; x++) + for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++) SendWearChange(x); if (caster == this && spell.id != 287 && spell.id != 601 && @@ -1492,7 +1492,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove ); caster->SendAppearancePacket(AT_Size, static_cast(caster->GetTarget()->GetSize())); - for (int x = EQEmu::textures::textureBegin; x <= EQEmu::textures::LastTintableTexture; x++) + for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++) caster->SendWearChange(x); } } @@ -1670,7 +1670,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove #endif // This is handled by the client prior to SoD. // - if (IsClient() && (CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoDAndLater)) + if (IsClient() && (CastToClient()->ClientVersionBit() & EQ::versions::maskSoDAndLater)) CastToClient()->LocateCorpse(); break; @@ -2278,7 +2278,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove snprintf(effect_desc, _EDLEN, "Rampage"); #endif if(caster) - entity_list.AEAttack(caster, 30, EQEmu::invslot::slotPrimary, 0, true); // on live wars dont get a duration ramp, its a one shot deal + entity_list.AEAttack(caster, 30, EQ::invslot::slotPrimary, 0, true); // on live wars dont get a duration ramp, its a one shot deal break; } @@ -2329,10 +2329,10 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove focus = caster->GetFocusEffect(focusFcBaseEffects, spell_id); switch(spells[spell_id].skill) { - case EQEmu::skills::SkillThrowing: + case EQ::skills::SkillThrowing: caster->DoThrowingAttackDmg(this, nullptr, nullptr, spells[spell_id].base[i],spells[spell_id].base2[i], focus, ReuseTime); break; - case EQEmu::skills::SkillArchery: + case EQ::skills::SkillArchery: caster->DoArcheryAttackDmg(this, nullptr, nullptr, spells[spell_id].base[i],spells[spell_id].base2[i],focus, ReuseTime); break; default: @@ -2532,7 +2532,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_FcTimerRefresh: { if(IsClient()) { - for (unsigned int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; ++i) { + for (unsigned int i = 0; i < EQ::spells::SPELL_GEM_COUNT; ++i) { if(IsValidSpell(CastToClient()->m_pp.mem_spells[i])) { if (CalcFocusEffect(focusFcTimerRefresh, spell_id, CastToClient()->m_pp.mem_spells[i])){ CastToClient()->m_pp.spellSlotRefresh[i] = 1; @@ -2801,7 +2801,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (caster && IsValidSpell(spells[spell_id].base2[i])){ if(zone->random.Roll(spells[spell_id].base[i])) - caster->SpellFinished(spells[spell_id].base2[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); + caster->SpellFinished(spells[spell_id].base2[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[spells[spell_id].base2[i]].ResistDiff); } break; } @@ -3080,7 +3080,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove if (SummonedItem) { Client *c=CastToClient(); c->PushItemOnCursor(*SummonedItem); - c->SendItemPacket(EQEmu::invslot::slotCursor, SummonedItem, ItemPacketLimbo); + c->SendItemPacket(EQ::invslot::slotCursor, SummonedItem, ItemPacketLimbo); safe_delete(SummonedItem); } @@ -3105,7 +3105,7 @@ int Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level, effect_value = CalcSpellEffectValue_formula(formula, base, max, caster_level, spell_id, ticsremaining); // this doesn't actually need to be a song to get mods, just the right skill - if (EQEmu::skills::IsBardInstrumentSkill(spells[spell_id].skill) && + if (EQ::skills::IsBardInstrumentSkill(spells[spell_id].skill) && spells[spell_id].effectid[effect_id] != SE_AttackSpeed && spells[spell_id].effectid[effect_id] != SE_AttackSpeed2 && spells[spell_id].effectid[effect_id] != SE_AttackSpeed3 && @@ -3464,7 +3464,7 @@ void Mob::BuffProcess() LogSpells("Buff [{}] in slot [{}] has [{}] tics remaining", buffs[buffs_i].spellid, buffs_i, buffs[buffs_i].ticsremaining); } } - else if (IsClient() && !(CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoFAndLater)) + else if (IsClient() && !(CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater)) { buffs[buffs_i].UpdateClient = true; } @@ -3476,7 +3476,7 @@ void Mob::BuffProcess() { CastToClient()->SendBuffDurationPacket(buffs[buffs_i], buffs_i); // Hack to get UF to play nicer, RoF seems fine without it - if (CastToClient()->ClientVersion() == EQEmu::versions::ClientVersion::UF && buffs[buffs_i].numhits > 0) + if (CastToClient()->ClientVersion() == EQ::versions::ClientVersion::UF && buffs[buffs_i].numhits > 0) CastToClient()->SendBuffNumHitPacket(buffs[buffs_i], buffs_i); buffs[buffs_i].UpdateClient = false; } @@ -3495,7 +3495,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) const SPDat_Spell_Struct &spell = spells[buff.spellid]; if (IsNPC()) { - std::vector args; + std::vector args; args.push_back(&buff.ticsremaining); args.push_back(&buff.casterlevel); args.push_back(&slot); @@ -3505,7 +3505,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) return; } } else { - std::vector args; + std::vector args; args.push_back(&buff.ticsremaining); args.push_back(&buff.casterlevel); args.push_back(&slot); @@ -3686,13 +3686,13 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) if (!IsBardSong(buff.spellid)) { double break_chance = 2.0; if (caster) { - break_chance -= (2 * (((double)caster->GetSkill(EQEmu::skills::SkillDivination) + + break_chance -= (2 * (((double)caster->GetSkill(EQ::skills::SkillDivination) + ((double)caster->GetLevel() * 3.0)) / 650.0)); } else { break_chance -= (2 * - (((double)GetSkill(EQEmu::skills::SkillDivination) + ((double)GetLevel() * 3.0)) / + (((double)GetSkill(EQ::skills::SkillDivination) + ((double)GetLevel() * 3.0)) / 650.0)); } @@ -3724,14 +3724,14 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) case SE_CastOnFadeEffectNPC: case SE_CastOnFadeEffectAlways: { if (buff.ticsremaining == 0) { - SpellFinished(spells[buff.spellid].base[i], this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spells[buff.spellid].base[i]].ResistDiff); + SpellFinished(spells[buff.spellid].base[i], this, EQ::spells::CastingSlot::Item, 0, -1, spells[spells[buff.spellid].base[i]].ResistDiff); } break; } case SE_LocateCorpse: { // This is handled by the client prior to SoD. - if (IsClient() && (CastToClient()->ClientVersionBit() & EQEmu::versions::maskSoDAndLater)) + if (IsClient() && (CastToClient()->ClientVersionBit() & EQ::versions::maskSoDAndLater)) CastToClient()->LocateCorpse(); } @@ -3812,12 +3812,12 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) } if(IsClient()) { - std::vector args; + std::vector args; args.push_back(&buffs[slot].casterid); parse->EventSpell(EVENT_SPELL_FADE, nullptr, CastToClient(), buffs[slot].spellid, slot, &args); } else if(IsNPC()) { - std::vector args; + std::vector args; args.push_back(&buffs[slot].casterid); parse->EventSpell(EVENT_SPELL_FADE, CastToNPC(), nullptr, buffs[slot].spellid, slot, &args); @@ -3889,7 +3889,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) else{ SendAppearancePacket(AT_Size, 6); } - for (int x = EQEmu::textures::textureBegin; x <= EQEmu::textures::LastTintableTexture; x++){ + for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++){ SendWearChange(x); } break; @@ -4155,7 +4155,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) { EQApplicationPacket *outapp = MakeBuffsPacket(); - entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQEmu::versions::maskSoDAndLater); + entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQ::versions::maskSoDAndLater); if(IsClient() && GetTarget() == this) { CastToClient()->QueuePacket(outapp); } @@ -4165,11 +4165,11 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) if (IsNPC()) { EQApplicationPacket *outapp = MakeBuffsPacket(); - entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQEmu::versions::maskSoDAndLater, true); + entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQ::versions::maskSoDAndLater, true); safe_delete(outapp); } - if (IsClient() && CastToClient()->ClientVersionBit() & EQEmu::versions::maskUFAndLater) + if (IsClient() && CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater) { EQApplicationPacket *outapp = MakeBuffsPacket(false); CastToClient()->FastQueuePacket(&outapp); @@ -5170,7 +5170,7 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo if (Caston_spell_id) { if (IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id)) - SpellFinished(Caston_spell_id, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[Caston_spell_id].ResistDiff); + SpellFinished(Caston_spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[Caston_spell_id].ResistDiff); } return (value * lvlModifier / 100); @@ -5189,15 +5189,15 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { //item focus if (itembonuses.FocusEffects[type]){ - const EQEmu::ItemData* TempItem = nullptr; + const EQ::ItemData* TempItem = nullptr; - for (int x = EQEmu::invslot::EQUIPMENT_BEGIN; x <= EQEmu::invslot::EQUIPMENT_END; x++) + for (int x = EQ::invslot::EQUIPMENT_BEGIN; x <= EQ::invslot::EQUIPMENT_END; x++) { if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) continue; TempItem = nullptr; - EQEmu::ItemInstance* ins = GetInv().GetItem(x); + EQ::ItemInstance* ins = GetInv().GetItem(x); if (!ins) continue; TempItem = ins->GetItem(); @@ -5211,16 +5211,16 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) { } } - for (int y = EQEmu::invaug::SOCKET_BEGIN; y <= EQEmu::invaug::SOCKET_END; ++y) + for (int y = EQ::invaug::SOCKET_BEGIN; y <= EQ::invaug::SOCKET_END; ++y) { if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS) continue; - EQEmu::ItemInstance *aug = nullptr; + EQ::ItemInstance *aug = nullptr; aug = ins->GetAugment(y); if(aug) { - const EQEmu::ItemData* TempItemAug = aug->GetItem(); + const EQ::ItemData* TempItemAug = aug->GetItem(); if (TempItemAug && TempItemAug->Focus.Effect > 0 && IsValidSpell(TempItemAug->Focus.Effect)) { proc_spellid = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id); if (IsValidSpell(proc_spellid)){ @@ -5318,18 +5318,18 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) //Check if item focus effect exists for the client. if (itembonuses.FocusEffects[type]){ - const EQEmu::ItemData* TempItem = nullptr; - const EQEmu::ItemData* UsedItem = nullptr; + const EQ::ItemData* TempItem = nullptr; + const EQ::ItemData* UsedItem = nullptr; uint16 UsedFocusID = 0; int16 Total = 0; int16 focus_max = 0; int16 focus_max_real = 0; //item focus - for (int x = EQEmu::invslot::EQUIPMENT_BEGIN; x <= EQEmu::invslot::EQUIPMENT_END; x++) + for (int x = EQ::invslot::EQUIPMENT_BEGIN; x <= EQ::invslot::EQUIPMENT_END; x++) { TempItem = nullptr; - EQEmu::ItemInstance* ins = GetInv().GetItem(x); + EQ::ItemInstance* ins = GetInv().GetItem(x); if (!ins) continue; TempItem = ins->GetItem(); @@ -5360,13 +5360,13 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) } } - for (int y = EQEmu::invaug::SOCKET_BEGIN; y <= EQEmu::invaug::SOCKET_END; ++y) + for (int y = EQ::invaug::SOCKET_BEGIN; y <= EQ::invaug::SOCKET_END; ++y) { - EQEmu::ItemInstance *aug = nullptr; + EQ::ItemInstance *aug = nullptr; aug = ins->GetAugment(y); if(aug) { - const EQEmu::ItemData* TempItemAug = aug->GetItem(); + const EQ::ItemData* TempItemAug = aug->GetItem(); if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) { if(rand_effectiveness) { focus_max = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id, true); @@ -5398,10 +5398,10 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id) } //Tribute Focus - for (int x = EQEmu::invslot::TRIBUTE_BEGIN; x <= EQEmu::invslot::TRIBUTE_END; ++x) + for (int x = EQ::invslot::TRIBUTE_BEGIN; x <= EQ::invslot::TRIBUTE_END; ++x) { TempItem = nullptr; - EQEmu::ItemInstance* ins = GetInv().GetItem(x); + EQ::ItemInstance* ins = GetInv().GetItem(x); if (!ins) continue; TempItem = ins->GetItem(); @@ -5590,16 +5590,16 @@ int16 NPC::GetFocusEffect(focusType type, uint16 spell_id) { if (RuleB(Spells, NPC_UseFocusFromItems) && itembonuses.FocusEffects[type]){ - const EQEmu::ItemData* TempItem = nullptr; - const EQEmu::ItemData* UsedItem = nullptr; + const EQ::ItemData* TempItem = nullptr; + const EQ::ItemData* UsedItem = nullptr; uint16 UsedFocusID = 0; int16 Total = 0; int16 focus_max = 0; int16 focus_max_real = 0; //item focus - for (int i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invslot::EQUIPMENT_END; i++){ - const EQEmu::ItemData *cur = database.GetItem(equipment[i]); + for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++){ + const EQ::ItemData *cur = database.GetItem(equipment[i]); if(!cur) continue; @@ -6702,7 +6702,7 @@ bool Mob::TrySpellProjectile(Mob* spell_target, uint16 spell_id, float speed){ ProjectileAtk[slot].origin_x = GetX(); ProjectileAtk[slot].origin_y = GetY(); ProjectileAtk[slot].origin_z = GetZ(); - ProjectileAtk[slot].skill = EQEmu::skills::SkillConjuration; + ProjectileAtk[slot].skill = EQ::skills::SkillConjuration; ProjectileAtk[slot].speed_mod = speed_mod; SetProjectileAttack(true); @@ -6758,7 +6758,7 @@ void Mob::ResourceTap(int32 damage, uint16 spellid) if (damage > 0) HealDamage(damage); else - Damage(this, -damage, 0, EQEmu::skills::SkillEvocation, false); + Damage(this, -damage, 0, EQ::skills::SkillEvocation, false); } if (spells[spellid].base2[i] == 1) // Mana Tap @@ -6801,10 +6801,10 @@ void Mob::TryTriggerThreshHold(int32 damage, int effect_id, Mob* attacker){ if (IsValidSpell(spell_id)) { if (IsBeneficialSpell(spell_id)) - SpellFinished(spell_id, this, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, this, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); else if(attacker) - SpellFinished(spell_id, attacker, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); + SpellFinished(spell_id, attacker, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff); } } } @@ -6875,7 +6875,7 @@ void Mob::CalcSpellPowerDistanceMod(uint16 spell_id, float range, Mob* caster) else distance = sqrt(range); - distance = EQEmu::Clamp(distance, spells[spell_id].min_dist, spells[spell_id].max_dist); + distance = EQ::Clamp(distance, spells[spell_id].min_dist, spells[spell_id].max_dist); float dm_range = spells[spell_id].max_dist - spells[spell_id].min_dist; float dm_mod_interval = spells[spell_id].max_dist_mod - spells[spell_id].min_dist_mod; diff --git a/zone/spells.cpp b/zone/spells.cpp index d9378a23c..8e70df06d 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -108,7 +108,7 @@ extern volatile bool is_zone_loaded; extern WorldServer worldserver; extern FastMath g_Math; -using EQEmu::spells::CastingSlot; +using EQ::spells::CastingSlot; // this is run constantly for every mob void Mob::SpellProcess() @@ -245,12 +245,12 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot, //Added to prevent MQ2 exploitation of equipping normally-unequippable/clickable items with effects and clicking them for benefits. if(item_slot && IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt)) { - EQEmu::ItemInstance *itm = CastToClient()->GetInv().GetItem(item_slot); + EQ::ItemInstance *itm = CastToClient()->GetInv().GetItem(item_slot); int bitmask = 1; bitmask = bitmask << (CastToClient()->GetClass() - 1); if( itm && itm->GetItem()->Classes != 65535 ) { - if ((itm->GetItem()->Click.Type == EQEmu::item::ItemEffectEquipClick) && !(itm->GetItem()->Classes & bitmask)) { - if (CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoF) { + if ((itm->GetItem()->Click.Type == EQ::item::ItemEffectEquipClick) && !(itm->GetItem()->Classes & bitmask)) { + if (CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoF) { // They are casting a spell from an item that requires equipping but shouldn't let them equip it LogError("HACKER: [{}] (account: [{}]) attempted to click an equip-only effect on item [{}] (id: [{}]) which they shouldn't be able to equip!", CastToClient()->GetCleanName(), CastToClient()->AccountName(), itm->GetItem()->Name, itm->GetItem()->ID); @@ -261,15 +261,15 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot, } return(false); } - if ((itm->GetItem()->Click.Type == EQEmu::item::ItemEffectClick2) && !(itm->GetItem()->Classes & bitmask)) { - if (CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoF) { + if ((itm->GetItem()->Click.Type == EQ::item::ItemEffectClick2) && !(itm->GetItem()->Classes & bitmask)) { + if (CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoF) { // They are casting a spell from an item that they don't meet the race/class requirements to cast LogError("HACKER: [{}] (account: [{}]) attempted to click a race/class restricted effect on item [{}] (id: [{}]) which they shouldn't be able to click!", CastToClient()->GetCleanName(), CastToClient()->AccountName(), itm->GetItem()->Name, itm->GetItem()->ID); database.SetHackerFlag(CastToClient()->AccountName(), CastToClient()->GetCleanName(), "Clicking race/class restricted item with an invalid class"); } else { - if (CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (CastToClient()->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // Line 181 in eqstr_us.txt was changed in RoF+ Message(Chat::Yellow, "Your race, class, or deity cannot use this item."); @@ -282,8 +282,8 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot, return(false); } } - if (itm && (itm->GetItem()->Click.Type == EQEmu::item::ItemEffectEquipClick) && item_slot > EQEmu::invslot::EQUIPMENT_END){ - if (CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoF) { + if (itm && (itm->GetItem()->Click.Type == EQ::item::ItemEffectEquipClick) && item_slot > EQ::invslot::EQUIPMENT_END){ + if (CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoF) { // They are attempting to cast a must equip clicky without having it equipped LogError("HACKER: [{}] (account: [{}]) attempted to click an equip-only effect on item [{}] (id: [{}]) without equiping it!", CastToClient()->GetCleanName(), CastToClient()->AccountName(), itm->GetItem()->Name, itm->GetItem()->ID); database.SetHackerFlag(CastToClient()->AccountName(), CastToClient()->GetCleanName(), "Clicking equip-only item without equiping it"); @@ -611,16 +611,16 @@ bool Mob::DoCastingChecks() uint16 Mob::GetSpecializeSkillValue(uint16 spell_id) const { switch(spells[spell_id].skill) { - case EQEmu::skills::SkillAbjuration: - return(GetSkill(EQEmu::skills::SkillSpecializeAbjure)); - case EQEmu::skills::SkillAlteration: - return(GetSkill(EQEmu::skills::SkillSpecializeAlteration)); - case EQEmu::skills::SkillConjuration: - return(GetSkill(EQEmu::skills::SkillSpecializeConjuration)); - case EQEmu::skills::SkillDivination: - return(GetSkill(EQEmu::skills::SkillSpecializeDivination)); - case EQEmu::skills::SkillEvocation: - return(GetSkill(EQEmu::skills::SkillSpecializeEvocation)); + case EQ::skills::SkillAbjuration: + return(GetSkill(EQ::skills::SkillSpecializeAbjure)); + case EQ::skills::SkillAlteration: + return(GetSkill(EQ::skills::SkillSpecializeAlteration)); + case EQ::skills::SkillConjuration: + return(GetSkill(EQ::skills::SkillSpecializeConjuration)); + case EQ::skills::SkillDivination: + return(GetSkill(EQ::skills::SkillSpecializeDivination)); + case EQ::skills::SkillEvocation: + return(GetSkill(EQ::skills::SkillSpecializeEvocation)); default: //wtf... break; @@ -639,20 +639,20 @@ void Client::CheckSpecializeIncrease(uint16 spell_id) { */ switch(spells[spell_id].skill) { - case EQEmu::skills::SkillAbjuration: - CheckIncreaseSkill(EQEmu::skills::SkillSpecializeAbjure, nullptr); + case EQ::skills::SkillAbjuration: + CheckIncreaseSkill(EQ::skills::SkillSpecializeAbjure, nullptr); break; - case EQEmu::skills::SkillAlteration: - CheckIncreaseSkill(EQEmu::skills::SkillSpecializeAlteration, nullptr); + case EQ::skills::SkillAlteration: + CheckIncreaseSkill(EQ::skills::SkillSpecializeAlteration, nullptr); break; - case EQEmu::skills::SkillConjuration: - CheckIncreaseSkill(EQEmu::skills::SkillSpecializeConjuration, nullptr); + case EQ::skills::SkillConjuration: + CheckIncreaseSkill(EQ::skills::SkillSpecializeConjuration, nullptr); break; - case EQEmu::skills::SkillDivination: - CheckIncreaseSkill(EQEmu::skills::SkillSpecializeDivination, nullptr); + case EQ::skills::SkillDivination: + CheckIncreaseSkill(EQ::skills::SkillSpecializeDivination, nullptr); break; - case EQEmu::skills::SkillEvocation: - CheckIncreaseSkill(EQEmu::skills::SkillSpecializeEvocation, nullptr); + case EQ::skills::SkillEvocation: + CheckIncreaseSkill(EQ::skills::SkillSpecializeEvocation, nullptr); break; default: //wtf... @@ -672,48 +672,48 @@ void Client::CheckSongSkillIncrease(uint16 spell_id){ switch(spells[spell_id].skill) { - case EQEmu::skills::SkillSinging: - CheckIncreaseSkill(EQEmu::skills::SkillSinging, nullptr, -15); + case EQ::skills::SkillSinging: + CheckIncreaseSkill(EQ::skills::SkillSinging, nullptr, -15); break; - case EQEmu::skills::SkillPercussionInstruments: + case EQ::skills::SkillPercussionInstruments: if(this->itembonuses.percussionMod > 0) { - if (GetRawSkill(EQEmu::skills::SkillPercussionInstruments) > 0) // no skill increases if not trained in the instrument - CheckIncreaseSkill(EQEmu::skills::SkillPercussionInstruments, nullptr, -15); + if (GetRawSkill(EQ::skills::SkillPercussionInstruments) > 0) // no skill increases if not trained in the instrument + CheckIncreaseSkill(EQ::skills::SkillPercussionInstruments, nullptr, -15); else MessageString(Chat::Red,NO_INSTRUMENT_SKILL); // tell the client that they need instrument training } else - CheckIncreaseSkill(EQEmu::skills::SkillSinging, nullptr, -15); + CheckIncreaseSkill(EQ::skills::SkillSinging, nullptr, -15); break; - case EQEmu::skills::SkillStringedInstruments: + case EQ::skills::SkillStringedInstruments: if(this->itembonuses.stringedMod > 0) { - if (GetRawSkill(EQEmu::skills::SkillStringedInstruments) > 0) - CheckIncreaseSkill(EQEmu::skills::SkillStringedInstruments, nullptr, -15); + if (GetRawSkill(EQ::skills::SkillStringedInstruments) > 0) + CheckIncreaseSkill(EQ::skills::SkillStringedInstruments, nullptr, -15); else MessageString(Chat::Red,NO_INSTRUMENT_SKILL); } else - CheckIncreaseSkill(EQEmu::skills::SkillSinging, nullptr, -15); + CheckIncreaseSkill(EQ::skills::SkillSinging, nullptr, -15); break; - case EQEmu::skills::SkillWindInstruments: + case EQ::skills::SkillWindInstruments: if(this->itembonuses.windMod > 0) { - if (GetRawSkill(EQEmu::skills::SkillWindInstruments) > 0) - CheckIncreaseSkill(EQEmu::skills::SkillWindInstruments, nullptr, -15); + if (GetRawSkill(EQ::skills::SkillWindInstruments) > 0) + CheckIncreaseSkill(EQ::skills::SkillWindInstruments, nullptr, -15); else MessageString(Chat::Red,NO_INSTRUMENT_SKILL); } else - CheckIncreaseSkill(EQEmu::skills::SkillSinging, nullptr, -15); + CheckIncreaseSkill(EQ::skills::SkillSinging, nullptr, -15); break; - case EQEmu::skills::SkillBrassInstruments: + case EQ::skills::SkillBrassInstruments: if(this->itembonuses.brassMod > 0) { - if (GetRawSkill(EQEmu::skills::SkillBrassInstruments) > 0) - CheckIncreaseSkill(EQEmu::skills::SkillBrassInstruments, nullptr, -15); + if (GetRawSkill(EQ::skills::SkillBrassInstruments) > 0) + CheckIncreaseSkill(EQ::skills::SkillBrassInstruments, nullptr, -15); else MessageString(Chat::Red,NO_INSTRUMENT_SKILL); } else - CheckIncreaseSkill(EQEmu::skills::SkillSinging, nullptr, -15); + CheckIncreaseSkill(EQ::skills::SkillSinging, nullptr, -15); break; default: break; @@ -967,7 +967,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo uint16 mana_used, uint32 inventory_slot, int16 resist_adjust) { bool IsFromItem = false; - EQEmu::ItemInstance *item = nullptr; + EQ::ItemInstance *item = nullptr; if(IsClient() && slot != CastingSlot::Item && slot != CastingSlot::PotionBelt && spells[spell_id].recast_time > 1000) { // 10 is item if(!CastToClient()->GetPTimers().Expired(&database, pTimerSpellStart + spell_id, false)) { @@ -1081,7 +1081,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo channelbonuses += spellbonuses.ChannelChanceSpells + itembonuses.ChannelChanceSpells + aabonuses.ChannelChanceSpells; // max 93% chance at 252 skill - channelchance = 30 + GetSkill(EQEmu::skills::SkillChanneling) / 400.0f * 100; + channelchance = 30 + GetSkill(EQ::skills::SkillChanneling) / 400.0f * 100; channelchance -= attacked_count * 2; channelchance += channelchance * channelbonuses / 100.0f; } @@ -1095,7 +1095,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo channelbonuses += spellbonuses.ChannelChanceSpells + itembonuses.ChannelChanceSpells + aabonuses.ChannelChanceSpells; // max 93% chance at 252 skill - channelchance = 30 + GetSkill(EQEmu::skills::SkillChanneling) / 400.0f * 100; + channelchance = 30 + GetSkill(EQ::skills::SkillChanneling) / 400.0f * 100; channelchance -= attacked_count * 2; channelchance += channelchance * channelbonuses / 100.0f; } @@ -1127,7 +1127,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo } } - LogSpells("Checking Interruption: spell x: [{}] spell y: [{}] cur x: [{}] cur y: [{}] channelchance [{}] channeling skill [{}]\n", GetSpellX(), GetSpellY(), GetX(), GetY(), channelchance, GetSkill(EQEmu::skills::SkillChanneling)); + LogSpells("Checking Interruption: spell x: [{}] spell y: [{}] cur x: [{}] cur y: [{}] channelchance [{}] channeling skill [{}]\n", GetSpellX(), GetSpellY(), GetX(), GetY(), channelchance, GetSkill(EQ::skills::SkillChanneling)); if(!spells[spell_id].uninterruptable && zone->random.Real(0, 100) > channelchance) { LogSpells("Casting of [{}] canceled: interrupted", spell_id); @@ -1241,7 +1241,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo missingreags=true; } - const EQEmu::ItemData *item = database.GetItem(component); + const EQ::ItemData *item = database.GetItem(component); if(item) { c->MessageString(Chat::Red, MISSING_SPELL_COMP_ITEM, item->Name); LogSpells("Spell [{}]: Canceled. Missing required reagent [{}] ([{}])", spell_id, item->Name, component); @@ -1305,7 +1305,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo && inventory_slot != 0xFFFFFFFF) // 10 is an item { bool fromaug = false; - EQEmu::ItemData* augitem = nullptr; + EQ::ItemData* augitem = nullptr; uint32 recastdelay = 0; uint32 recasttype = 0; @@ -1313,12 +1313,12 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo if (item == nullptr) break; - for (int r = EQEmu::invaug::SOCKET_BEGIN; r <= EQEmu::invaug::SOCKET_END; r++) { - const EQEmu::ItemInstance* aug_i = item->GetAugment(r); + for (int r = EQ::invaug::SOCKET_BEGIN; r <= EQ::invaug::SOCKET_END; r++) { + const EQ::ItemInstance* aug_i = item->GetAugment(r); if (!aug_i) continue; - const EQEmu::ItemData* aug = aug_i->GetItem(); + const EQ::ItemData* aug = aug_i->GetItem(); if (!aug) continue; @@ -1439,11 +1439,11 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo SetMana(GetMana()); // skills - if (EQEmu::skills::IsCastingSkill(spells[spell_id].skill)) { + if (EQ::skills::IsCastingSkill(spells[spell_id].skill)) { c->CheckIncreaseSkill(spells[spell_id].skill, nullptr); // increased chance of gaining channel skill if you regained concentration - c->CheckIncreaseSkill(EQEmu::skills::SkillChanneling, nullptr, regain_conc ? 5 : 0); + c->CheckIncreaseSkill(EQ::skills::SkillChanneling, nullptr, regain_conc ? 5 : 0); c->CheckSpecializeIncrease(spell_id); } @@ -2422,7 +2422,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, ui auto end_cost = spells[spell_id].EndurCost; if (mgb) end_cost *= 2; - SetEndurance(GetEndurance() - EQEmu::ClampUpper(end_cost, GetEndurance())); + SetEndurance(GetEndurance() - EQ::ClampUpper(end_cost, GetEndurance())); TryTriggerOnValueAmount(false, false, true); } if (mgb) @@ -2465,7 +2465,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, ui if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt)) { - EQEmu::ItemInstance *itm = CastToClient()->GetInv().GetItem(inventory_slot); + EQ::ItemInstance *itm = CastToClient()->GetInv().GetItem(inventory_slot); if(itm && itm->GetItem()->RecastDelay > 0){ auto recast_type = itm->GetItem()->RecastType; CastToClient()->GetPTimers().Start((pTimerItemStart + recast_type), itm->GetItem()->RecastDelay); @@ -3335,7 +3335,7 @@ int Mob::AddBuff(Mob *caster, uint16 spell_id, int duration, int32 level_overrid { EQApplicationPacket *outapp = MakeBuffsPacket(); - entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQEmu::versions::maskSoDAndLater); + entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQ::versions::maskSoDAndLater); if(IsClient() && GetTarget() == this) CastToClient()->QueuePacket(outapp); @@ -3345,7 +3345,7 @@ int Mob::AddBuff(Mob *caster, uint16 spell_id, int duration, int32 level_overrid if (IsNPC()) { EQApplicationPacket *outapp = MakeBuffsPacket(); - entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQEmu::versions::maskSoDAndLater, true); + entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, EQ::versions::maskSoDAndLater, true); safe_delete(outapp); } @@ -5034,7 +5034,7 @@ void Client::MakeBuffFadePacket(uint16 spell_id, int slot_id, bool send_message) void Client::MemSpell(uint16 spell_id, int slot, bool update_client) { - if(slot >= EQEmu::spells::SPELL_GEM_COUNT || slot < 0) + if(slot >= EQ::spells::SPELL_GEM_COUNT || slot < 0) return; if(update_client) @@ -5056,7 +5056,7 @@ void Client::MemSpell(uint16 spell_id, int slot, bool update_client) void Client::UnmemSpell(int slot, bool update_client) { - if(slot > EQEmu::spells::SPELL_GEM_COUNT || slot < 0) + if(slot > EQ::spells::SPELL_GEM_COUNT || slot < 0) return; LogSpells("Spell [{}] forgotten from slot [{}]", m_pp.mem_spells[slot], slot); @@ -5072,7 +5072,7 @@ void Client::UnmemSpell(int slot, bool update_client) void Client::UnmemSpellBySpellID(int32 spell_id) { - for(int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; i++) { + for(int i = 0; i < EQ::spells::SPELL_GEM_COUNT; i++) { if(m_pp.mem_spells[i] == spell_id) { UnmemSpell(i, true); break; @@ -5084,7 +5084,7 @@ void Client::UnmemSpellAll(bool update_client) { int i; - for(i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; i++) + for(i = 0; i < EQ::spells::SPELL_GEM_COUNT; i++) if(m_pp.mem_spells[i] != 0xFFFFFFFF) UnmemSpell(i, update_client); } @@ -5098,7 +5098,7 @@ uint16 Client::FindMemmedSpellBySlot(int slot) { int Client::MemmedCount() { int memmed_count = 0; - for (int i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; i++) + for (int i = 0; i < EQ::spells::SPELL_GEM_COUNT; i++) if (m_pp.mem_spells[i] != 0xFFFFFFFF) memmed_count++; @@ -5108,7 +5108,7 @@ int Client::MemmedCount() { void Client::ScribeSpell(uint16 spell_id, int slot, bool update_client) { - if(slot >= EQEmu::spells::SPELLBOOK_SIZE || slot < 0) + if(slot >= EQ::spells::SPELLBOOK_SIZE || slot < 0) return; if(update_client) @@ -5129,14 +5129,14 @@ void Client::ScribeSpell(uint16 spell_id, int slot, bool update_client) void Client::UnscribeSpell(int slot, bool update_client) { - if(slot >= EQEmu::spells::SPELLBOOK_SIZE || slot < 0) + if(slot >= EQ::spells::SPELLBOOK_SIZE || slot < 0) return; LogSpells("Spell [{}] erased from spell book slot [{}]", m_pp.spell_book[slot], slot); m_pp.spell_book[slot] = 0xFFFFFFFF; database.DeleteCharacterSpell(this->CharacterID(), m_pp.spell_book[slot], slot); - if(update_client && slot < EQEmu::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) + if(update_client && slot < EQ::spells::DynamicLookup(ClientVersion(), GetGM())->SpellbookSize) { auto outapp = new EQApplicationPacket(OP_DeleteSpell, sizeof(DeleteSpell_Struct)); DeleteSpell_Struct* del = (DeleteSpell_Struct*)outapp->pBuffer; @@ -5149,7 +5149,7 @@ void Client::UnscribeSpell(int slot, bool update_client) void Client::UnscribeSpellAll(bool update_client) { - for(int i = 0; i < EQEmu::spells::SPELLBOOK_SIZE; i++) + for(int i = 0; i < EQ::spells::SPELLBOOK_SIZE; i++) { if(m_pp.spell_book[i] != 0xFFFFFFFF) UnscribeSpell(i, update_client); @@ -5183,7 +5183,7 @@ void Client::UntrainDiscAll(bool update_client) } int Client::GetNextAvailableSpellBookSlot(int starting_slot) { - for (int i = starting_slot; i < EQEmu::spells::SPELLBOOK_SIZE; i++) { //using starting_slot should help speed this up when we're iterating through a bunch of spells + for (int i = starting_slot; i < EQ::spells::SPELLBOOK_SIZE; i++) { //using starting_slot should help speed this up when we're iterating through a bunch of spells if (!IsValidSpell(GetSpellByBookSlot(i))) return i; } @@ -5192,7 +5192,7 @@ int Client::GetNextAvailableSpellBookSlot(int starting_slot) { } int Client::FindSpellBookSlotBySpellID(uint16 spellid) { - for(int i = 0; i < EQEmu::spells::SPELLBOOK_SIZE; i++) { + for(int i = 0; i < EQ::spells::SPELLBOOK_SIZE; i++) { if(m_pp.spell_book[i] == spellid) return i; } @@ -5543,7 +5543,7 @@ bool Mob::UseBardSpellLogic(uint16 spell_id, int slot) spell_id != SPELL_UNKNOWN && slot != -1 && GetClass() == BARD && - slot <= EQEmu::spells::SPELL_GEM_COUNT && + slot <= EQ::spells::SPELL_GEM_COUNT && IsBardSong(spell_id) ); } @@ -5607,7 +5607,7 @@ void Client::SendBuffDurationPacket(Buffs_Struct &buff, int slot) void Client::SendBuffNumHitPacket(Buffs_Struct &buff, int slot) { // UF+ use this packet - if (ClientVersion() < EQEmu::versions::ClientVersion::UF) + if (ClientVersion() < EQ::versions::ClientVersion::UF) return; EQApplicationPacket *outapp = nullptr; outapp = new EQApplicationPacket(OP_BuffCreate, sizeof(BuffIcon_Struct) + sizeof(BuffIconEntry_Struct)); @@ -5664,7 +5664,7 @@ void Mob::SendBuffsToClient(Client *c) if(!c) return; - if (c->ClientVersionBit() & EQEmu::versions::maskSoDAndLater) + if (c->ClientVersionBit() & EQ::versions::maskSoDAndLater) { EQApplicationPacket *outapp = MakeBuffsPacket(); c->FastQueuePacket(&outapp); @@ -5752,12 +5752,12 @@ int Client::GetCurrentBuffSlots() const numbuffs++; if (GetLevel() > 74) numbuffs++; - return EQEmu::ClampUpper(numbuffs, EQEmu::spells::StaticLookup(m_ClientVersion)->LongBuffs); + return EQ::ClampUpper(numbuffs, EQ::spells::StaticLookup(m_ClientVersion)->LongBuffs); } int Client::GetCurrentSongSlots() const { - return EQEmu::spells::StaticLookup(m_ClientVersion)->ShortBuffs; // AAs dont affect this + return EQ::spells::StaticLookup(m_ClientVersion)->ShortBuffs; // AAs dont affect this } void Client::InitializeBuffSlots() diff --git a/zone/tasks.cpp b/zone/tasks.cpp index afa7b2062..a2c601aa3 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -1071,7 +1071,7 @@ void TaskManager::TaskQuestSetSelector(Client *c, ClientTaskState *state, Mob *m void TaskManager::SendTaskSelector(Client *c, Mob *mob, int TaskCount, int *TaskList) { - if (c->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) { SendTaskSelectorNew(c, mob, TaskCount, TaskList); return; @@ -1118,7 +1118,7 @@ void TaskManager::SendTaskSelector(Client *c, Mob *mob, int TaskCount, int *Task continue; buf.WriteUInt32(TaskList[i]); // TaskID - if (c->ClientVersion() != EQEmu::versions::ClientVersion::Titanium) + if (c->ClientVersion() != EQ::versions::ClientVersion::Titanium) buf.WriteFloat(1.0f); // affects color, difficulty? buf.WriteUInt32(Tasks[TaskList[i]]->Duration); buf.WriteUInt32(static_cast(Tasks[TaskList[i]]->dur_code)); @@ -1126,7 +1126,7 @@ void TaskManager::SendTaskSelector(Client *c, Mob *mob, int TaskCount, int *Task buf.WriteString(Tasks[TaskList[i]]->Title); // max 64 with null buf.WriteString(Tasks[TaskList[i]]->Description); // max 4000 with null - if (c->ClientVersion() != EQEmu::versions::ClientVersion::Titanium) + if (c->ClientVersion() != EQ::versions::ClientVersion::Titanium) buf.WriteUInt8(0); // Has reward set flag buf.WriteUInt32(Tasks[TaskList[i]]->ActivityCount); @@ -1771,7 +1771,7 @@ void ClientTaskState::UpdateTasksOnExplore(Client *c, int ExploreID) return; } -bool ClientTaskState::UpdateTasksOnDeliver(Client *c, std::list &Items, int Cash, int NPCTypeID) +bool ClientTaskState::UpdateTasksOnDeliver(Client *c, std::list &Items, int Cash, int NPCTypeID) { bool Ret = false; @@ -1988,7 +1988,7 @@ void ClientTaskState::RewardTask(Client *c, TaskInformation *Task) { if(!Task || !c) return; - const EQEmu::ItemData* Item; + const EQ::ItemData* Item; std::vector RewardList; switch(Task->RewardMethod) { @@ -2698,7 +2698,7 @@ void TaskManager::SendTaskActivityShort(Client *c, int TaskID, int ActivityID, i TaskActivityShort_Struct* tass; - if (c->ClientVersionBit() & EQEmu::versions::maskRoFAndLater) + if (c->ClientVersionBit() & EQ::versions::maskRoFAndLater) { auto outapp = new EQApplicationPacket(OP_TaskActivity, 25); outapp->WriteUInt32(ClientTaskIndex); @@ -2734,7 +2734,7 @@ void TaskManager::SendTaskActivityShort(Client *c, int TaskID, int ActivityID, i void TaskManager::SendTaskActivityLong(Client *c, int TaskID, int ActivityID, int ClientTaskIndex, bool Optional, bool TaskComplete) { - if (c->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) { SendTaskActivityNew(c, TaskID, ActivityID, ClientTaskIndex, Optional, TaskComplete); return; @@ -2943,10 +2943,10 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, ClientTaskInf } if(ItemID) { - const EQEmu::ItemData* reward_item = database.GetItem(ItemID); + const EQ::ItemData* reward_item = database.GetItem(ItemID); - EQEmu::SayLinkEngine linker; - linker.SetLinkType(EQEmu::saylink::SayLinkItemData); + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); linker.SetItemData(reward_item); linker.SetTaskUse(); Tasks[TaskID]->item_link = linker.GenerateLink(); diff --git a/zone/tasks.h b/zone/tasks.h index 48fc8e2cc..8d948c370 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -48,7 +48,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net) class Client; class Mob; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -222,7 +222,7 @@ public: void UpdateTasksForItem(Client *c, ActivityType Type, int ItemID, int Count=1); void UpdateTasksOnExplore(Client *c, int ExploreID); bool UpdateTasksOnSpeakWith(Client *c, int NPCTypeID); - bool UpdateTasksOnDeliver(Client *c, std::list& Items, int Cash, int NPCTypeID); + bool UpdateTasksOnDeliver(Client *c, std::list& Items, int Cash, int NPCTypeID); void UpdateTasksOnTouch(Client *c, int ZoneID); void ProcessTaskProximities(Client *c, float X, float Y, float Z); bool TaskOutOfTime(TaskType type, int Index); diff --git a/zone/titles.cpp b/zone/titles.cpp index 7b4537b88..a0cd10a12 100644 --- a/zone/titles.cpp +++ b/zone/titles.cpp @@ -47,7 +47,7 @@ bool TitleManager::LoadTitles() for (auto row = results.begin(); row != results.end(); ++row) { TitleEntry Title; Title.TitleID = atoi(row[0]); - Title.SkillID = (EQEmu::skills::SkillType) atoi(row[1]); + Title.SkillID = (EQ::skills::SkillType) atoi(row[1]); Title.MinSkillValue = atoi(row[2]); Title.MaxSkillValue = atoi(row[3]); Title.MinAAPoints = atoi(row[4]); @@ -188,10 +188,10 @@ bool TitleManager::IsClientEligibleForTitle(Client *c, std::vector:: if(Title->SkillID >= 0) { - if ((Title->MinSkillValue >= 0) && (c->GetRawSkill(static_cast(Title->SkillID)) < static_cast(Title->MinSkillValue))) + if ((Title->MinSkillValue >= 0) && (c->GetRawSkill(static_cast(Title->SkillID)) < static_cast(Title->MinSkillValue))) return false; - if ((Title->MaxSkillValue >= 0) && (c->GetRawSkill(static_cast(Title->SkillID)) > static_cast(Title->MaxSkillValue))) + if ((Title->MaxSkillValue >= 0) && (c->GetRawSkill(static_cast(Title->SkillID)) > static_cast(Title->MaxSkillValue))) return false; } diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index b4451119f..64aa7db72 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -36,7 +36,7 @@ extern QueryServ* QServ; -static const EQEmu::skills::SkillType TradeskillUnknown = EQEmu::skills::Skill1HBlunt; /* an arbitrary non-tradeskill */ +static const EQ::skills::SkillType TradeskillUnknown = EQ::skills::Skill1HBlunt; /* an arbitrary non-tradeskill */ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augment, Object *worldo) { @@ -46,7 +46,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme return; } - EQEmu::ItemInstance* container = nullptr; + EQ::ItemInstance* container = nullptr; if (worldo) { @@ -55,23 +55,23 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme else { // Check to see if they have an inventory container type 53 that is used for this. - EQEmu::InventoryProfile& user_inv = user->GetInv(); - EQEmu::ItemInstance* inst = nullptr; + EQ::InventoryProfile& user_inv = user->GetInv(); + EQ::ItemInstance* inst = nullptr; inst = user_inv.GetItem(in_augment->container_slot); if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); - if (item && inst->IsType(EQEmu::item::ItemClassBag) && item->BagType == 53) + const EQ::ItemData* item = inst->GetItem(); + if (item && inst->IsType(EQ::item::ItemClassBag) && item->BagType == 53) { // We have found an appropriate inventory augmentation sealer container = inst; // Verify that no more than two items are in container to guarantee no inadvertant wipes. uint8 itemsFound = 0; - for (uint8 i = EQEmu::invbag::SLOT_BEGIN; i < EQEmu::invtype::WORLD_SIZE; i++) + for (uint8 i = EQ::invbag::SLOT_BEGIN; i < EQ::invtype::WORLD_SIZE; i++) { - const EQEmu::ItemInstance* inst = container->GetItem(i); + const EQ::ItemInstance* inst = container->GetItem(i); if (inst) { itemsFound++; @@ -94,7 +94,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme return; } - EQEmu::ItemInstance *tobe_auged = nullptr, *auged_with = nullptr; + EQ::ItemInstance *tobe_auged = nullptr, *auged_with = nullptr; int8 slot=-1; // Verify 2 items in the augmentation device @@ -135,7 +135,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme bool deleteItems = false; - EQEmu::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr; + EQ::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr; // Adding augment if (in_augment->augment_slot == -1) @@ -145,9 +145,9 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme { tobe_auged->PutAugment(slot, *auged_with); - EQEmu::ItemInstance *aug = tobe_auged->GetAugment(slot); + EQ::ItemInstance *aug = tobe_auged->GetAugment(slot); if(aug) { - std::vector args; + std::vector args; args.push_back(aug); parse->EventItem(EVENT_AUGMENT_ITEM, user, tobe_auged, nullptr, "", slot, &args); @@ -165,9 +165,9 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme } else { - EQEmu::ItemInstance *old_aug = nullptr; - bool isSolvent = auged_with->GetItem()->ItemType == EQEmu::item::ItemTypeAugmentationSolvent; - if (!isSolvent && auged_with->GetItem()->ItemType != EQEmu::item::ItemTypeAugmentationDistiller) + EQ::ItemInstance *old_aug = nullptr; + bool isSolvent = auged_with->GetItem()->ItemType == EQ::item::ItemTypeAugmentationSolvent; + if (!isSolvent && auged_with->GetItem()->ItemType != EQ::item::ItemTypeAugmentationDistiller) { LogError("Player tried to remove an augment without a solvent or distiller"); user->Message(Chat::Red, "Error: Missing an augmentation solvent or distiller for removing this augment."); @@ -175,7 +175,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme return; } - EQEmu::ItemInstance *aug = tobe_auged->GetAugment(in_augment->augment_slot); + EQ::ItemInstance *aug = tobe_auged->GetAugment(in_augment->augment_slot); if (aug) { if (!isSolvent && auged_with->GetItem()->ID != aug->GetItem()->AugDistiller) { @@ -183,7 +183,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme user->Message(Chat::Red, "Error: Wrong augmentation distiller for safely removing this augment."); return; } - std::vector args; + std::vector args; args.push_back(aug); parse->EventItem(EVENT_UNAUGMENT_ITEM, user, tobe_auged, nullptr, "", slot, &args); @@ -222,12 +222,12 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme else { // Delete items in our inventory container... - for (uint8 i = EQEmu::invbag::SLOT_BEGIN; i < EQEmu::invtype::WORLD_SIZE; i++) + for (uint8 i = EQ::invbag::SLOT_BEGIN; i < EQ::invtype::WORLD_SIZE; i++) { - const EQEmu::ItemInstance* inst = container->GetItem(i); + const EQ::ItemInstance* inst = container->GetItem(i); if (inst) { - user->DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(in_augment->container_slot, i), 0, true); + user->DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(in_augment->container_slot, i), 0, true); } } // Explicitly mark container as cleared. @@ -256,15 +256,15 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob return; } - EQEmu::InventoryProfile& user_inv = user->GetInv(); + EQ::InventoryProfile& user_inv = user->GetInv(); PlayerProfile_Struct& user_pp = user->GetPP(); - EQEmu::ItemInstance* container = nullptr; - EQEmu::ItemInstance* inst = nullptr; + EQ::ItemInstance* container = nullptr; + EQ::ItemInstance* inst = nullptr; uint8 c_type = 0xE8; uint32 some_id = 0; bool worldcontainer=false; - if (in_combine->container_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { + if (in_combine->container_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) { if(!worldo) { user->Message(Chat::Red, "Error: Server is not aware of the tradeskill container you are attempting to use"); return; @@ -274,7 +274,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob worldcontainer=true; // if we're a world container with an item, use that too if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if (item) some_id = item->ID; } @@ -282,28 +282,28 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob else { inst = user_inv.GetItem(in_combine->container_slot); if (inst) { - const EQEmu::ItemData* item = inst->GetItem(); - if (item && inst->IsType(EQEmu::item::ItemClassBag)) { + const EQ::ItemData* item = inst->GetItem(); + if (item && inst->IsType(EQ::item::ItemClassBag)) { c_type = item->BagType; some_id = item->ID; } } } - if (!inst || !inst->IsType(EQEmu::item::ItemClassBag)) { + if (!inst || !inst->IsType(EQ::item::ItemClassBag)) { user->Message(Chat::Red, "Error: Server does not recognize specified tradeskill container"); return; } container = inst; - if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeTransformationmold) { - const EQEmu::ItemInstance* inst = container->GetItem(0); + if (container->GetItem() && container->GetItem()->BagType == EQ::item::BagTypeTransformationmold) { + const EQ::ItemInstance* inst = container->GetItem(0); bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation); - if (inst && EQEmu::ItemInstance::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) { - const EQEmu::ItemData* new_weapon = inst->GetItem(); - user->DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(in_combine->container_slot, 0), 0, true); + if (inst && EQ::ItemInstance::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) { + const EQ::ItemData* new_weapon = inst->GetItem(); + user->DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(in_combine->container_slot, 0), 0, true); container->Clear(); - user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::invslot::slotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2)); + user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQ::invslot::slotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2)); user->MessageString(Chat::LightBlue, TRANSFORM_COMPLETE, inst->GetItem()->Name); if (RuleB(Inventory, DeleteTransformationMold)) user->DeleteItemInInventory(in_combine->container_slot, 0, true); @@ -317,13 +317,13 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob return; } - if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeDetransformationmold) { - const EQEmu::ItemInstance* inst = container->GetItem(0); + if (container->GetItem() && container->GetItem()->BagType == EQ::item::BagTypeDetransformationmold) { + const EQ::ItemInstance* inst = container->GetItem(0); if (inst && inst->GetOrnamentationIcon() && inst->GetOrnamentationIcon()) { - const EQEmu::ItemData* new_weapon = inst->GetItem(); - user->DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(in_combine->container_slot, 0), 0, true); + const EQ::ItemData* new_weapon = inst->GetItem(); + user->DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(in_combine->container_slot, 0), 0, true); container->Clear(); - user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::invslot::slotCursor, 0, 0); + user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQ::invslot::slotCursor, 0, 0); user->MessageString(Chat::LightBlue, TRANSFORM_COMPLETE, inst->GetItem()->Name); } else if (inst) { @@ -369,7 +369,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob } //changing from a switch to string of if's since we don't need to iterate through all of the skills in the SkillType enum - if (spec.tradeskill == EQEmu::skills::SkillAlchemy) { + if (spec.tradeskill == EQ::skills::SkillAlchemy) { if (user_pp.class_ != SHAMAN) { user->Message(Chat::Red, "This tradeskill can only be performed by a shaman."); return; @@ -379,13 +379,13 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob return; } } - else if (spec.tradeskill == EQEmu::skills::SkillTinkering) { + else if (spec.tradeskill == EQ::skills::SkillTinkering) { if (user_pp.race != GNOME) { user->Message(Chat::Red, "Only gnomes can tinker."); return; } } - else if (spec.tradeskill == EQEmu::skills::SkillMakePoison) { + else if (spec.tradeskill == EQ::skills::SkillMakePoison) { if (user_pp.class_ != ROGUE) { user->Message(Chat::Red, "Only rogues can mix poisons."); return; @@ -416,10 +416,10 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob safe_delete(outapp); database.DeleteWorldContainer(worldo->m_id, zone->GetZoneID()); } else{ - for (uint8 i = EQEmu::invbag::SLOT_BEGIN; i < EQEmu::invtype::WORLD_SIZE; i++) { - const EQEmu::ItemInstance* inst = container->GetItem(i); + for (uint8 i = EQ::invbag::SLOT_BEGIN; i < EQ::invtype::WORLD_SIZE; i++) { + const EQ::ItemInstance* inst = container->GetItem(i); if (inst) { - user->DeleteItemInInventory(EQEmu::InventoryProfile::CalcSlotId(in_combine->container_slot, i), 0, true); + user->DeleteItemInInventory(EQ::InventoryProfile::CalcSlotId(in_combine->container_slot, i), 0, true); } } container->Clear(); @@ -516,7 +516,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac memset(counts, 0, sizeof(counts)); //search for all the items in their inventory - EQEmu::InventoryProfile& user_inv = user->GetInv(); + EQ::InventoryProfile& user_inv = user->GetInv(); uint8 count = 0; uint8 needcount = 0; @@ -552,7 +552,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac user->MessageString(Chat::Skills, TRADESKILL_MISSING_COMPONENTS); for (auto it = MissingItems.begin(); it != MissingItems.end(); ++it) { - const EQEmu::ItemData* item = database.GetItem(*it); + const EQ::ItemData* item = database.GetItem(*it); if(item) user->MessageString(Chat::Skills, TRADESKILL_MISSING_ITEM, item->Name); @@ -581,7 +581,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac return; } - const EQEmu::ItemInstance* inst = user_inv.GetItem(slot); + const EQ::ItemInstance* inst = user_inv.GetItem(slot); if (inst && !inst->IsStackable()) user->DeleteItemInInventory(slot, 0, true); @@ -619,84 +619,84 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac parse->EventPlayer(EVENT_COMBINE_FAILURE, user, spec.name.c_str(), spec.recipe_id); } -EQEmu::skills::SkillType Object::TypeToSkill(uint32 type) +EQ::skills::SkillType Object::TypeToSkill(uint32 type) { switch(type) { // grouped and ordered by SkillUseTypes name - new types need to be verified for proper SkillUseTypes and use /*SkillAlchemy*/ - case EQEmu::item::BagTypeMedicineBag: - return EQEmu::skills::SkillAlchemy; + case EQ::item::BagTypeMedicineBag: + return EQ::skills::SkillAlchemy; /*SkillBaking*/ - //case EQEmu::item::BagTypeMixingBowl: // No idea... - case EQEmu::item::BagTypeOven: - return EQEmu::skills::SkillBaking; + //case EQ::item::BagTypeMixingBowl: // No idea... + case EQ::item::BagTypeOven: + return EQ::skills::SkillBaking; /*SkillBlacksmithing*/ - case EQEmu::item::BagTypeForge: - //case EQEmu::item::BagTypeKoadaDalForge: - case EQEmu::item::BagTypeTeirDalForge: - case EQEmu::item::BagTypeOggokForge: - case EQEmu::item::BagTypeStormguardForge: - //case EQEmu::item::BagTypeAkanonForge: - //case EQEmu::item::BagTypeNorthmanForge: - //case EQEmu::item::BagTypeCabilisForge: - //case EQEmu::item::BagTypeFreeportForge: - //case EQEmu::item::BagTypeRoyalQeynosForge: - //case EQEmu::item::BagTypeTrollForge: - case EQEmu::item::BagTypeFierDalForge: - case EQEmu::item::BagTypeValeForge: - //case EQEmu::item::BagTypeErudForge: - //case EQEmu::item::BagTypeGuktaForge: - return EQEmu::skills::SkillBlacksmithing; + case EQ::item::BagTypeForge: + //case EQ::item::BagTypeKoadaDalForge: + case EQ::item::BagTypeTeirDalForge: + case EQ::item::BagTypeOggokForge: + case EQ::item::BagTypeStormguardForge: + //case EQ::item::BagTypeAkanonForge: + //case EQ::item::BagTypeNorthmanForge: + //case EQ::item::BagTypeCabilisForge: + //case EQ::item::BagTypeFreeportForge: + //case EQ::item::BagTypeRoyalQeynosForge: + //case EQ::item::BagTypeTrollForge: + case EQ::item::BagTypeFierDalForge: + case EQ::item::BagTypeValeForge: + //case EQ::item::BagTypeErudForge: + //case EQ::item::BagTypeGuktaForge: + return EQ::skills::SkillBlacksmithing; /*SkillBrewing*/ - //case EQEmu::item::BagTypeIceCreamChurn: // No idea... - case EQEmu::item::BagTypeBrewBarrel: - return EQEmu::skills::SkillBrewing; + //case EQ::item::BagTypeIceCreamChurn: // No idea... + case EQ::item::BagTypeBrewBarrel: + return EQ::skills::SkillBrewing; /*SkillFishing*/ - case EQEmu::item::BagTypeTackleBox: - return EQEmu::skills::SkillFishing; + case EQ::item::BagTypeTackleBox: + return EQ::skills::SkillFishing; /*SkillFletching*/ - case EQEmu::item::BagTypeFletchingKit: - //case EQEmu::item::BagTypeFierDalFletchingKit: - return EQEmu::skills::SkillFletching; + case EQ::item::BagTypeFletchingKit: + //case EQ::item::BagTypeFierDalFletchingKit: + return EQ::skills::SkillFletching; /*SkillJewelryMaking*/ - case EQEmu::item::BagTypeJewelersKit: - return EQEmu::skills::SkillJewelryMaking; + case EQ::item::BagTypeJewelersKit: + return EQ::skills::SkillJewelryMaking; /*SkillMakePoison*/ // This is a guess and needs to be verified... (Could be SkillAlchemy) - //case EQEmu::item::BagTypeMortar: + //case EQ::item::BagTypeMortar: // return SkillMakePoison; /*SkillPottery*/ - case EQEmu::item::BagTypePotteryWheel: - case EQEmu::item::BagTypeKiln: - //case EQEmu::item::BagTypeIksarPotteryWheel: - return EQEmu::skills::SkillPottery; + case EQ::item::BagTypePotteryWheel: + case EQ::item::BagTypeKiln: + //case EQ::item::BagTypeIksarPotteryWheel: + return EQ::skills::SkillPottery; /*SkillResearch*/ - //case EQEmu::item::BagTypeLexicon: - case EQEmu::item::BagTypeWizardsLexicon: - case EQEmu::item::BagTypeMagesLexicon: - case EQEmu::item::BagTypeNecromancersLexicon: - case EQEmu::item::BagTypeEnchantersLexicon: - //case EQEmu::item::BagTypeConcordanceofResearch: - return EQEmu::skills::SkillResearch; + //case EQ::item::BagTypeLexicon: + case EQ::item::BagTypeWizardsLexicon: + case EQ::item::BagTypeMagesLexicon: + case EQ::item::BagTypeNecromancersLexicon: + case EQ::item::BagTypeEnchantersLexicon: + //case EQ::item::BagTypeConcordanceofResearch: + return EQ::skills::SkillResearch; /*SkillTailoring*/ - case EQEmu::item::BagTypeSewingKit: - //case EQEmu::item::BagTypeHalflingTailoringKit: - //case EQEmu::item::BagTypeErudTailoringKit: - //case EQEmu::item::BagTypeFierDalTailoringKit: - return EQEmu::skills::SkillTailoring; + case EQ::item::BagTypeSewingKit: + //case EQ::item::BagTypeHalflingTailoringKit: + //case EQ::item::BagTypeErudTailoringKit: + //case EQ::item::BagTypeFierDalTailoringKit: + return EQ::skills::SkillTailoring; /*SkillTinkering*/ - case EQEmu::item::BagTypeToolBox: - return EQEmu::skills::SkillTinkering; + case EQ::item::BagTypeToolBox: + return EQ::skills::SkillTinkering; /*Undefined*/ default: @@ -733,7 +733,7 @@ void Client::TradeskillSearchResults(const std::string &query, unsigned long obj // Recipes that have either been made before or were // explicitly learned are excempt from that limit if (RuleB(Skills, UseLimitTradeskillSearchSkillDiff) - && ((int32)trivial - (int32)GetSkill((EQEmu::skills::SkillType)tradeskill)) > RuleI(Skills, MaxTradeskillSearchSkillDiff) + && ((int32)trivial - (int32)GetSkill((EQ::skills::SkillType)tradeskill)) > RuleI(Skills, MaxTradeskillSearchSkillDiff) && row[4] == nullptr) continue; @@ -882,34 +882,34 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) { // If you want to customize the stage1 success rate do it here. // Remember: skillup_modifier is (float). Lower is better switch(spec->tradeskill) { - case EQEmu::skills::SkillFletching: + case EQ::skills::SkillFletching: skillup_modifier = RuleI(Character, TradeskillUpFletching); break; - case EQEmu::skills::SkillAlchemy: + case EQ::skills::SkillAlchemy: skillup_modifier = RuleI(Character, TradeskillUpAlchemy); break; - case EQEmu::skills::SkillJewelryMaking: + case EQ::skills::SkillJewelryMaking: skillup_modifier = RuleI(Character, TradeskillUpJewelcrafting); break; - case EQEmu::skills::SkillPottery: + case EQ::skills::SkillPottery: skillup_modifier = RuleI(Character, TradeskillUpPottery); break; - case EQEmu::skills::SkillBaking: + case EQ::skills::SkillBaking: skillup_modifier = RuleI(Character, TradeskillUpBaking); break; - case EQEmu::skills::SkillBrewing: + case EQ::skills::SkillBrewing: skillup_modifier = RuleI(Character, TradeskillUpBrewing); break; - case EQEmu::skills::SkillBlacksmithing: + case EQ::skills::SkillBlacksmithing: skillup_modifier = RuleI(Character, TradeskillUpBlacksmithing); break; - case EQEmu::skills::SkillResearch: + case EQ::skills::SkillResearch: skillup_modifier = RuleI(Character, TradeskillUpResearch); break; - case EQEmu::skills::SkillMakePoison: + case EQ::skills::SkillMakePoison: skillup_modifier = RuleI(Character, TradeskillUpMakePoison); break; - case EQEmu::skills::SkillTinkering: + case EQ::skills::SkillTinkering: skillup_modifier = RuleI(Character, TradeskillUpTinkering); break; default: @@ -920,11 +920,11 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) { // Some tradeskills take the higher of one additional stat beside INT and WIS // to determine the skillup rate. Additionally these tradeskills do not have an // -15 modifier on their statbonus. - if (spec->tradeskill == EQEmu::skills::SkillFletching || spec->tradeskill == EQEmu::skills::SkillMakePoison) { + if (spec->tradeskill == EQ::skills::SkillFletching || spec->tradeskill == EQ::skills::SkillMakePoison) { thirdstat = GetDEX(); stat_modifier = 0; } - else if (spec->tradeskill == EQEmu::skills::SkillBlacksmithing) { + else if (spec->tradeskill == EQ::skills::SkillBlacksmithing) { thirdstat = GetSTR(); stat_modifier = 0; } @@ -977,7 +977,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) { aa_chance = spellbonuses.ReduceTradeskillFail[spec->tradeskill] + itembonuses.ReduceTradeskillFail[spec->tradeskill] + aabonuses.ReduceTradeskillFail[spec->tradeskill]; - const EQEmu::ItemData* item = nullptr; + const EQ::ItemData* item = nullptr; chance = mod_tradeskill_chance(chance, spec); @@ -1085,7 +1085,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) { return(false); } -void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float skillup_modifier, uint16 success_modifier, EQEmu::skills::SkillType tradeskill) +void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float skillup_modifier, uint16 success_modifier, EQ::skills::SkillType tradeskill) { uint16 current_raw_skill = GetRawSkill(tradeskill); @@ -1129,7 +1129,7 @@ void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float LogTradeskills("Stage2 chance was: [{}] percent. 0 percent means stage1 failed", chance_stage2); } -bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id, +bool ZoneDatabase::GetTradeRecipe(const EQ::ItemInstance* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec) { if (container == nullptr) @@ -1148,11 +1148,11 @@ bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_ uint32 count = 0; uint32 sum = 0; for (uint8 i = 0; i < 10; i++) { // TODO: need to determine if this is bound to world/item container size - const EQEmu::ItemInstance* inst = container->GetItem(i); + const EQ::ItemInstance* inst = container->GetItem(i); if (!inst) continue; - const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID); + const EQ::ItemData* item = GetItem(inst->GetItem()->ID); if (!item) continue; @@ -1285,12 +1285,12 @@ bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_ for (auto row = results.begin(); row != results.end(); ++row) { int ccnt = 0; - for (int x = EQEmu::invbag::SLOT_BEGIN; x < EQEmu::invtype::WORLD_SIZE; x++) { - const EQEmu::ItemInstance* inst = container->GetItem(x); + for (int x = EQ::invbag::SLOT_BEGIN; x < EQ::invtype::WORLD_SIZE; x++) { + const EQ::ItemInstance* inst = container->GetItem(x); if(!inst) continue; - const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID); + const EQ::ItemData* item = GetItem(inst->GetItem()->ID); if (!item) continue; @@ -1339,7 +1339,7 @@ bool ZoneDatabase::GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id return false;//just not found i guess.. auto row = results.begin(); - spec->tradeskill = (EQEmu::skills::SkillType)atoi(row[1]); + spec->tradeskill = (EQ::skills::SkillType)atoi(row[1]); spec->skill_needed = (int16)atoi(row[2]); spec->trivial = (uint16)atoi(row[3]); spec->nofail = atoi(row[4]) ? true : false; @@ -1455,32 +1455,32 @@ void Client::LearnRecipe(uint32 recipeID) results = database.QueryDatabase(query); } -bool Client::CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill) { +bool Client::CanIncreaseTradeskill(EQ::skills::SkillType tradeskill) { uint32 rawskill = GetRawSkill(tradeskill); uint16 maxskill = MaxSkill(tradeskill); if (rawskill >= maxskill) //Max skill sanity check return false; - uint8 Baking = (GetRawSkill(EQEmu::skills::SkillBaking) > 200) ? 1 : 0; - uint8 Smithing = (GetRawSkill(EQEmu::skills::SkillBlacksmithing) > 200) ? 1 : 0; - uint8 Brewing = (GetRawSkill(EQEmu::skills::SkillBrewing) > 200) ? 1 : 0; - uint8 Fletching = (GetRawSkill(EQEmu::skills::SkillFletching) > 200) ? 1 : 0; - uint8 Jewelry = (GetRawSkill(EQEmu::skills::SkillJewelryMaking) > 200) ? 1 : 0; - uint8 Pottery = (GetRawSkill(EQEmu::skills::SkillPottery) > 200) ? 1 : 0; - uint8 Tailoring = (GetRawSkill(EQEmu::skills::SkillTailoring) > 200) ? 1 : 0; + uint8 Baking = (GetRawSkill(EQ::skills::SkillBaking) > 200) ? 1 : 0; + uint8 Smithing = (GetRawSkill(EQ::skills::SkillBlacksmithing) > 200) ? 1 : 0; + uint8 Brewing = (GetRawSkill(EQ::skills::SkillBrewing) > 200) ? 1 : 0; + uint8 Fletching = (GetRawSkill(EQ::skills::SkillFletching) > 200) ? 1 : 0; + uint8 Jewelry = (GetRawSkill(EQ::skills::SkillJewelryMaking) > 200) ? 1 : 0; + uint8 Pottery = (GetRawSkill(EQ::skills::SkillPottery) > 200) ? 1 : 0; + uint8 Tailoring = (GetRawSkill(EQ::skills::SkillTailoring) > 200) ? 1 : 0; uint8 SkillTotal = Baking + Smithing + Brewing + Fletching + Jewelry + Pottery + Tailoring; //Tradeskills above 200 //New Tanaan AA: Each level allows an additional tradeskill above 200 (first one is free) uint8 aaLevel = spellbonuses.TradeSkillMastery + itembonuses.TradeSkillMastery + aabonuses.TradeSkillMastery; switch (tradeskill) { - case EQEmu::skills::SkillBaking: - case EQEmu::skills::SkillBlacksmithing: - case EQEmu::skills::SkillBrewing: - case EQEmu::skills::SkillFletching: - case EQEmu::skills::SkillJewelryMaking: - case EQEmu::skills::SkillPottery: - case EQEmu::skills::SkillTailoring: + case EQ::skills::SkillBaking: + case EQ::skills::SkillBlacksmithing: + case EQ::skills::SkillBrewing: + case EQ::skills::SkillFletching: + case EQ::skills::SkillJewelryMaking: + case EQ::skills::SkillPottery: + case EQ::skills::SkillTailoring: if (aaLevel == 6) break; //Maxed AA if (SkillTotal == 0) diff --git a/zone/trading.cpp b/zone/trading.cpp index 1618e7770..f1dd3ef12 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -99,14 +99,14 @@ void Trade::AddEntity(uint16 trade_slot_id, uint32 stack_size) { // Item always goes into trade bucket from cursor Client* client = owner->CastToClient(); - EQEmu::ItemInstance* inst = client->GetInv().GetItem(EQEmu::invslot::slotCursor); + EQ::ItemInstance* inst = client->GetInv().GetItem(EQ::invslot::slotCursor); if (!inst) { client->Message(Chat::Red, "Error: Could not find item on your cursor!"); return; } - EQEmu::ItemInstance* inst2 = client->GetInv().GetItem(trade_slot_id); + EQ::ItemInstance* inst2 = client->GetInv().GetItem(trade_slot_id); // it looks like the original code attempted to allow stacking... // (it just didn't handle partial stack move actions) @@ -132,7 +132,7 @@ void Trade::AddEntity(uint16 trade_slot_id, uint32 stack_size) { if (_stack_size > 0) inst->SetCharges(_stack_size); else - client->DeleteItemInInventory(EQEmu::invslot::slotCursor); + client->DeleteItemInInventory(EQ::invslot::slotCursor); SendItemData(inst2, trade_slot_id); } @@ -147,7 +147,7 @@ void Trade::AddEntity(uint16 trade_slot_id, uint32 stack_size) { LogTrading("[{}] added item [{}] to trade slot [{}]", owner->GetName(), inst->GetItem()->Name, trade_slot_id); client->PutItemInInventory(trade_slot_id, *inst); - client->DeleteItemInInventory(EQEmu::invslot::slotCursor); + client->DeleteItemInInventory(EQ::invslot::slotCursor); } } @@ -159,7 +159,7 @@ Mob* Trade::With() } // Private Method: Send item data for trade item to other person involved in trade -void Trade::SendItemData(const EQEmu::ItemInstance* inst, int16 dest_slot_id) +void Trade::SendItemData(const EQ::ItemInstance* inst, int16 dest_slot_id) { if (inst == nullptr) return; @@ -172,13 +172,13 @@ void Trade::SendItemData(const EQEmu::ItemInstance* inst, int16 dest_slot_id) Client* with = mob->CastToClient(); Client* trader = owner->CastToClient(); if (with && with->IsClient()) { - with->SendItemPacket(dest_slot_id - EQEmu::invslot::TRADE_BEGIN, inst, ItemPacketTradeView); + with->SendItemPacket(dest_slot_id - EQ::invslot::TRADE_BEGIN, inst, ItemPacketTradeView); if (inst->GetItem()->ItemClass == 1) { - for (uint16 i = EQEmu::invbag::SLOT_BEGIN; i <= EQEmu::invbag::SLOT_END; i++) { - uint16 bagslot_id = EQEmu::InventoryProfile::CalcSlotId(dest_slot_id, i); - const EQEmu::ItemInstance* bagitem = trader->GetInv().GetItem(bagslot_id); + for (uint16 i = EQ::invbag::SLOT_BEGIN; i <= EQ::invbag::SLOT_END; i++) { + uint16 bagslot_id = EQ::InventoryProfile::CalcSlotId(dest_slot_id, i); + const EQ::ItemInstance* bagitem = trader->GetInv().GetItem(bagslot_id); if (bagitem) { - with->SendItemPacket(bagslot_id - EQEmu::invslot::TRADE_BEGIN, bagitem, ItemPacketTradeView); + with->SendItemPacket(bagslot_id - EQ::invslot::TRADE_BEGIN, bagitem, ItemPacketTradeView); } } } @@ -200,7 +200,7 @@ void Trade::LogTrade() uint8 item_count = 0; if (zone->tradevar != 0) { - for (uint16 i = EQEmu::invslot::TRADE_BEGIN; i <= EQEmu::invslot::TRADE_END; i++) { + for (uint16 i = EQ::invslot::TRADE_BEGIN; i <= EQ::invslot::TRADE_END; i++) { if (trader->GetInv().GetItem(i)) item_count++; } @@ -252,8 +252,8 @@ void Trade::LogTrade() if (item_count > 0) { strcat(logtext, "items {"); - for (uint16 i = EQEmu::invslot::TRADE_BEGIN; i <= EQEmu::invslot::TRADE_END; i++) { - const EQEmu::ItemInstance* inst = trader->GetInv().GetItem(i); + for (uint16 i = EQ::invslot::TRADE_BEGIN; i <= EQ::invslot::TRADE_END; i++) { + const EQ::ItemInstance* inst = trader->GetInv().GetItem(i); if (!comma) comma = true; @@ -268,7 +268,7 @@ void Trade::LogTrade() strcat(logtext, item_num); if (inst->IsClassBag()) { - for (uint8 j = EQEmu::invbag::SLOT_BEGIN; j <= EQEmu::invbag::SLOT_END; j++) { + for (uint8 j = EQ::invbag::SLOT_BEGIN; j <= EQ::invbag::SLOT_END; j++) { inst = trader->GetInv().GetItem(i, j); if (inst) { strcat(logtext, ","); @@ -304,8 +304,8 @@ void Trade::DumpTrade() return; Client* trader = owner->CastToClient(); - for (uint16 i = EQEmu::invslot::TRADE_BEGIN; i <= EQEmu::invslot::TRADE_END; i++) { - const EQEmu::ItemInstance* inst = trader->GetInv().GetItem(i); + for (uint16 i = EQ::invslot::TRADE_BEGIN; i <= EQ::invslot::TRADE_END; i++) { + const EQ::ItemInstance* inst = trader->GetInv().GetItem(i); if (inst) { LogTrading("Item [{}] (Charges=[{}], Slot=[{}], IsBag=[{}])", @@ -313,12 +313,12 @@ void Trade::DumpTrade() i, ((inst->IsClassBag()) ? "True" : "False")); if (inst->IsClassBag()) { - for (uint8 j = EQEmu::invbag::SLOT_BEGIN; j <= EQEmu::invbag::SLOT_END; j++) { + for (uint8 j = EQ::invbag::SLOT_BEGIN; j <= EQ::invbag::SLOT_END; j++) { inst = trader->GetInv().GetItem(i, j); if (inst) { LogTrading("\tBagItem [{}] (Charges=[{}], Slot=[{}])", inst->GetItem()->ID, inst->GetCharges(), - EQEmu::InventoryProfile::CalcSlotId(i, j)); + EQ::InventoryProfile::CalcSlotId(i, j)); } } } @@ -333,8 +333,8 @@ void Client::ResetTrade() { AddMoneyToPP(trade->cp, trade->sp, trade->gp, trade->pp, true); // step 1: process bags - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - const EQEmu::ItemInstance* inst = m_inv[trade_slot]; + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + const EQ::ItemInstance* inst = m_inv[trade_slot]; if (inst && inst->IsClassBag()) { int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst); @@ -352,18 +352,18 @@ void Client::ResetTrade() { } // step 2a: process stackables - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot); + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + EQ::ItemInstance* inst = GetInv().GetItem(trade_slot); if (inst && inst->IsStackable()) { while (true) { // there's no built-in safety check against an infinite loop..but, it should break on one of the conditional checks int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst); - if ((free_slot == EQEmu::invslot::slotCursor) || (free_slot == INVALID_INDEX)) + if ((free_slot == EQ::invslot::slotCursor) || (free_slot == INVALID_INDEX)) break; - EQEmu::ItemInstance* partial_inst = GetInv().GetItem(free_slot); + EQ::ItemInstance* partial_inst = GetInv().GetItem(free_slot); if (!partial_inst) break; @@ -399,15 +399,15 @@ void Client::ResetTrade() { // step 2b: adjust trade stack bias // (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur) - for (int16 trade_slot = EQEmu::invslot::TRADE_END; trade_slot >= EQEmu::invslot::TRADE_BEGIN; --trade_slot) { - EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot); + for (int16 trade_slot = EQ::invslot::TRADE_END; trade_slot >= EQ::invslot::TRADE_BEGIN; --trade_slot) { + EQ::ItemInstance* inst = GetInv().GetItem(trade_slot); if (inst && inst->IsStackable()) { - for (int16 bias_slot = EQEmu::invslot::TRADE_BEGIN; bias_slot <= EQEmu::invslot::TRADE_END; ++bias_slot) { + for (int16 bias_slot = EQ::invslot::TRADE_BEGIN; bias_slot <= EQ::invslot::TRADE_END; ++bias_slot) { if (bias_slot >= trade_slot) break; - EQEmu::ItemInstance* bias_inst = GetInv().GetItem(bias_slot); + EQ::ItemInstance* bias_inst = GetInv().GetItem(bias_slot); if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize)) continue; @@ -433,8 +433,8 @@ void Client::ResetTrade() { } // step 3: process everything else - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - const EQEmu::ItemInstance* inst = m_inv[trade_slot]; + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + const EQ::ItemInstance* inst = m_inv[trade_slot]; if (inst) { int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst); @@ -488,8 +488,8 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } // step 1: process bags - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - const EQEmu::ItemInstance* inst = m_inv[trade_slot]; + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + const EQ::ItemInstance* inst = m_inv[trade_slot]; if (inst && inst->IsClassBag()) { LogTrading("Giving container [{}] ([{}]) in slot [{}] to [{}]", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName()); @@ -523,16 +523,16 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st else qs_audit->char1_count += detail->charges; - for (uint8 sub_slot = EQEmu::invbag::SLOT_BEGIN; (sub_slot <= EQEmu::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items - const EQEmu::ItemInstance* bag_inst = inst->GetItem(sub_slot); + for (uint8 sub_slot = EQ::invbag::SLOT_BEGIN; (sub_slot <= EQ::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items + const EQ::ItemInstance* bag_inst = inst->GetItem(sub_slot); if (bag_inst) { detail = new QSTradeItems_Struct; detail->from_id = this->character_id; - detail->from_slot = EQEmu::InventoryProfile::CalcSlotId(trade_slot, sub_slot); + detail->from_slot = EQ::InventoryProfile::CalcSlotId(trade_slot, sub_slot); detail->to_id = other->CharacterID(); - detail->to_slot = EQEmu::InventoryProfile::CalcSlotId(free_slot, sub_slot); + detail->to_slot = EQ::InventoryProfile::CalcSlotId(free_slot, sub_slot); detail->item_id = bag_inst->GetID(); detail->charges = (!bag_inst->IsStackable() ? 1 : bag_inst->GetCharges()); detail->aug_1 = bag_inst->GetAugmentItemID(1); @@ -571,18 +571,18 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } // step 2a: process stackables - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot); + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + EQ::ItemInstance* inst = GetInv().GetItem(trade_slot); if (inst && inst->IsStackable()) { while (true) { // there's no built-in safety check against an infinite loop..but, it should break on one of the conditional checks int16 partial_slot = other->GetInv().FindFreeSlotForTradeItem(inst); - if ((partial_slot == EQEmu::invslot::slotCursor) || (partial_slot == INVALID_INDEX)) + if ((partial_slot == EQ::invslot::slotCursor) || (partial_slot == INVALID_INDEX)) break; - EQEmu::ItemInstance* partial_inst = other->GetInv().GetItem(partial_slot); + EQ::ItemInstance* partial_inst = other->GetInv().GetItem(partial_slot); if (!partial_inst) break; @@ -653,15 +653,15 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st // step 2b: adjust trade stack bias // (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur) - for (int16 trade_slot = EQEmu::invslot::TRADE_END; trade_slot >= EQEmu::invslot::TRADE_BEGIN; --trade_slot) { - EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot); + for (int16 trade_slot = EQ::invslot::TRADE_END; trade_slot >= EQ::invslot::TRADE_BEGIN; --trade_slot) { + EQ::ItemInstance* inst = GetInv().GetItem(trade_slot); if (inst && inst->IsStackable()) { - for (int16 bias_slot = EQEmu::invslot::TRADE_BEGIN; bias_slot <= EQEmu::invslot::TRADE_END; ++bias_slot) { + for (int16 bias_slot = EQ::invslot::TRADE_BEGIN; bias_slot <= EQ::invslot::TRADE_END; ++bias_slot) { if (bias_slot >= trade_slot) break; - EQEmu::ItemInstance* bias_inst = GetInv().GetItem(bias_slot); + EQ::ItemInstance* bias_inst = GetInv().GetItem(bias_slot); if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize)) continue; @@ -706,8 +706,8 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } // step 3: process everything else - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_END; ++trade_slot) { - const EQEmu::ItemInstance* inst = m_inv[trade_slot]; + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_END; ++trade_slot) { + const EQ::ItemInstance* inst = m_inv[trade_slot]; if (inst) { LogTrading("Giving item [{}] ([{}]) in slot [{}] to [{}]", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName()); @@ -742,8 +742,8 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st qs_audit->char1_count += detail->charges; // 'step 3' should never really see containers..but, just in case... - for (uint8 sub_slot = EQEmu::invbag::SLOT_BEGIN; (sub_slot <= EQEmu::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items - const EQEmu::ItemInstance* bag_inst = inst->GetItem(sub_slot); + for (uint8 sub_slot = EQ::invbag::SLOT_BEGIN; (sub_slot <= EQ::invbag::SLOT_END); ++sub_slot) { // this is to catch ALL items + const EQ::ItemInstance* bag_inst = inst->GetItem(sub_slot); if (bag_inst) { detail = new QSTradeItems_Struct; @@ -819,8 +819,8 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } if(qs_log) { // This can be incorporated below when revisions are made - for (int16 trade_slot = EQEmu::invslot::TRADE_BEGIN; trade_slot <= EQEmu::invslot::TRADE_NPC_END; ++trade_slot) { - const EQEmu::ItemInstance* trade_inst = m_inv[trade_slot]; + for (int16 trade_slot = EQ::invslot::TRADE_BEGIN; trade_slot <= EQ::invslot::TRADE_NPC_END; ++trade_slot) { + const EQ::ItemInstance* trade_inst = m_inv[trade_slot]; if(trade_inst) { auto detail = new QSHandinItems_Struct; @@ -840,15 +840,15 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st qs_audit->char_count += detail->charges; if (trade_inst->IsClassBag()) { - for (uint8 sub_slot = EQEmu::invbag::SLOT_BEGIN; sub_slot < trade_inst->GetItem()->BagSlots; ++sub_slot) { - const EQEmu::ItemInstance* trade_baginst = trade_inst->GetItem(sub_slot); + for (uint8 sub_slot = EQ::invbag::SLOT_BEGIN; sub_slot < trade_inst->GetItem()->BagSlots; ++sub_slot) { + const EQ::ItemInstance* trade_baginst = trade_inst->GetItem(sub_slot); if(trade_baginst) { detail = new QSHandinItems_Struct; strcpy(detail->action_type, "HANDIN"); - detail->char_slot = EQEmu::InventoryProfile::CalcSlotId(trade_slot, sub_slot); + detail->char_slot = EQ::InventoryProfile::CalcSlotId(trade_slot, sub_slot); detail->item_id = trade_baginst->GetID(); detail->charges = (!trade_inst->IsStackable() ? 1 : trade_inst->GetCharges()); detail->aug_1 = trade_baginst->GetAugmentItemID(1); @@ -872,19 +872,19 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st quest_npc = true; } - std::vector item_list; - std::list items; - for (int i = EQEmu::invslot::TRADE_BEGIN; i <= EQEmu::invslot::TRADE_NPC_END; ++i) { - EQEmu::ItemInstance *inst = m_inv.GetItem(i); + std::vector item_list; + std::list items; + for (int i = EQ::invslot::TRADE_BEGIN; i <= EQ::invslot::TRADE_NPC_END; ++i) { + EQ::ItemInstance *inst = m_inv.GetItem(i); if(inst) { items.push_back(inst); item_list.push_back(inst); } else { - item_list.push_back((EQEmu::ItemInstance*)nullptr); + item_list.push_back((EQ::ItemInstance*)nullptr); continue; } - const EQEmu::ItemData* item = inst->GetItem(); + const EQ::ItemData* item = inst->GetItem(); if(item && quest_npc == false) { bool isPetAndCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(tradingWith) && @@ -894,10 +894,10 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st (item->NoDrop != 0 || isPetAndCanHaveNoDrop))) { // pets need to look inside bags and try to equip items found there if (item->IsClassBag() && item->BagSlots > 0) { - for (int16 bslot = EQEmu::invbag::SLOT_BEGIN; bslot < item->BagSlots; bslot++) { - const EQEmu::ItemInstance* baginst = inst->GetItem(bslot); + for (int16 bslot = EQ::invbag::SLOT_BEGIN; bslot < item->BagSlots; bslot++) { + const EQ::ItemInstance* baginst = inst->GetItem(bslot); if (baginst) { - const EQEmu::ItemData* bagitem = baginst->GetItem(); + const EQ::ItemData* bagitem = baginst->GetItem(); if (bagitem && (GetGM() || (bagitem->NoDrop != 0 && baginst->IsAttuned() == false))) { tradingWith->CastToNPC()->AddLootDrop(bagitem, &tradingWith->CastToNPC()->itemlist, baginst->GetCharges(), 1, 127, true, true); @@ -950,9 +950,9 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st tradingWith->FaceTarget(this); } - EQEmu::ItemInstance *insts[4] = { 0 }; - for (int i = EQEmu::invslot::TRADE_BEGIN; i <= EQEmu::invslot::TRADE_NPC_END; ++i) { - insts[i - EQEmu::invslot::TRADE_BEGIN] = m_inv.PopItem(i); + EQ::ItemInstance *insts[4] = { 0 }; + for (int i = EQ::invslot::TRADE_BEGIN; i <= EQ::invslot::TRADE_NPC_END; ++i) { + insts[i - EQ::invslot::TRADE_BEGIN] = m_inv.PopItem(i); database.SaveInventory(CharacterID(), nullptr, i); } @@ -971,8 +971,8 @@ bool Client::CheckTradeLoreConflict(Client* other) if (!other) return true; - for (int16 index = EQEmu::invslot::TRADE_BEGIN; index <= EQEmu::invslot::TRADE_END; ++index) { - const EQEmu::ItemInstance* inst = m_inv[index]; + for (int16 index = EQ::invslot::TRADE_BEGIN; index <= EQ::invslot::TRADE_END; ++index) { + const EQ::ItemInstance* inst = m_inv[index]; if (!inst || !inst->GetItem()) continue; @@ -980,8 +980,8 @@ bool Client::CheckTradeLoreConflict(Client* other) return true; } - for (int16 index = EQEmu::invbag::TRADE_BAGS_BEGIN; index <= EQEmu::invbag::TRADE_BAGS_END; ++index) { - const EQEmu::ItemInstance* inst = m_inv[index]; + for (int16 index = EQ::invbag::TRADE_BAGS_BEGIN; index <= EQ::invbag::TRADE_BAGS_END; ++index) { + const EQ::ItemInstance* inst = m_inv[index]; if (!inst || !inst->GetItem()) continue; @@ -994,8 +994,8 @@ bool Client::CheckTradeLoreConflict(Client* other) bool Client::CheckTradeNonDroppable() { - for (int16 index = EQEmu::invslot::TRADE_BEGIN; index <= EQEmu::invslot::TRADE_END; ++index){ - const EQEmu::ItemInstance* inst = m_inv[index]; + for (int16 index = EQ::invslot::TRADE_BEGIN; index <= EQ::invslot::TRADE_END; ++index){ + const EQ::ItemInstance* inst = m_inv[index]; if (!inst) continue; @@ -1115,7 +1115,7 @@ void Client::Trader_EndTrader() { for(int i = 0; i < 80; i++) { if(gis->Items[i] != 0) { - if (Customer->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (Customer->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // RoF+ use Item IDs for now tdis->ItemID = gis->Items[i]; @@ -1175,18 +1175,18 @@ void Client::SendTraderItem(uint32 ItemID, uint16 Quantity) { std::string Packet; int16 FreeSlotID=0; - const EQEmu::ItemData* item = database.GetItem(ItemID); + const EQ::ItemData* item = database.GetItem(ItemID); if(!item){ LogTrading("Bogus item deleted in Client::SendTraderItem!\n"); return; } - EQEmu::ItemInstance* inst = database.CreateItem(item, Quantity); + EQ::ItemInstance* inst = database.CreateItem(item, Quantity); if (inst) { - bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false; + bool is_arrow = (inst->GetItem()->ItemType == EQ::item::ItemTypeArrow) ? true : false; FreeSlotID = m_inv.FindFreeSlot(false, true, inst->GetItem()->Size, is_arrow); PutItemInInventory(FreeSlotID, *inst); @@ -1200,16 +1200,16 @@ void Client::SendTraderItem(uint32 ItemID, uint16 Quantity) { void Client::SendSingleTraderItem(uint32 CharID, int SerialNumber) { - EQEmu::ItemInstance* inst= database.LoadSingleTraderItem(CharID, SerialNumber); + EQ::ItemInstance* inst= database.LoadSingleTraderItem(CharID, SerialNumber); if(inst) { - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? safe_delete(inst); } } void Client::BulkSendTraderInventory(uint32 char_id) { - const EQEmu::ItemData *item; + const EQ::ItemData *item; TraderCharges_Struct* TraderItems = database.LoadTraderItemWithCharges(char_id); @@ -1221,7 +1221,7 @@ void Client::BulkSendTraderInventory(uint32 char_id) { item=database.GetItem(TraderItems->ItemID[i]); if (item && (item->NoDrop!=0)) { - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if (inst) { inst->SetSerialNumber(TraderItems->SerialNumber[i]); if(TraderItems->Charges[i] > 0) @@ -1233,7 +1233,7 @@ void Client::BulkSendTraderInventory(uint32 char_id) { } inst->SetPrice(TraderItems->ItemCost[i]); - SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? + SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? safe_delete(inst); } else @@ -1245,14 +1245,14 @@ void Client::BulkSendTraderInventory(uint32 char_id) { uint32 Client::FindTraderItemSerialNumber(int32 ItemID) { - EQEmu::ItemInstance* item = nullptr; + EQ::ItemInstance* item = nullptr; uint16 SlotID = 0; - for (int i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++){ + for (int i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++){ item = this->GetInv().GetItem(i); if (item && item->GetItem()->ID == 17899){ //Traders Satchel - for (int x = EQEmu::invbag::SLOT_BEGIN; x <= EQEmu::invbag::SLOT_END; x++) { + for (int x = EQ::invbag::SLOT_BEGIN; x <= EQ::invbag::SLOT_END; x++) { // we already have the parent bag and a contents iterator..why not just iterate the bag!?? - SlotID = EQEmu::InventoryProfile::CalcSlotId(i, x); + SlotID = EQ::InventoryProfile::CalcSlotId(i, x); item = this->GetInv().GetItem(SlotID); if (item) { if (item->GetID() == ItemID) @@ -1266,16 +1266,16 @@ uint32 Client::FindTraderItemSerialNumber(int32 ItemID) { return 0; } -EQEmu::ItemInstance* Client::FindTraderItemBySerialNumber(int32 SerialNumber){ +EQ::ItemInstance* Client::FindTraderItemBySerialNumber(int32 SerialNumber){ - EQEmu::ItemInstance* item = nullptr; + EQ::ItemInstance* item = nullptr; uint16 SlotID = 0; - for (int i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++){ + for (int i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++){ item = this->GetInv().GetItem(i); if(item && item->GetItem()->ID == 17899){ //Traders Satchel - for (int x = EQEmu::invbag::SLOT_BEGIN; x <= EQEmu::invbag::SLOT_END; x++) { + for (int x = EQ::invbag::SLOT_BEGIN; x <= EQ::invbag::SLOT_END; x++) { // we already have the parent bag and a contents iterator..why not just iterate the bag!?? - SlotID = EQEmu::InventoryProfile::CalcSlotId(i, x); + SlotID = EQ::InventoryProfile::CalcSlotId(i, x); item = this->GetInv().GetItem(SlotID); if(item) { if(item->GetSerialNumber() == SerialNumber) @@ -1292,7 +1292,7 @@ EQEmu::ItemInstance* Client::FindTraderItemBySerialNumber(int32 SerialNumber){ GetItems_Struct* Client::GetTraderItems(){ - const EQEmu::ItemInstance* item = nullptr; + const EQ::ItemInstance* item = nullptr; uint16 SlotID = INVALID_INDEX; auto gis = new GetItems_Struct; @@ -1301,16 +1301,16 @@ GetItems_Struct* Client::GetTraderItems(){ uint8 ndx = 0; - for (int i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) { + for (int i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { if (ndx >= 80) break; item = this->GetInv().GetItem(i); if(item && item->GetItem()->ID == 17899){ //Traders Satchel - for (int x = EQEmu::invbag::SLOT_BEGIN; x <= EQEmu::invbag::SLOT_END; x++) { + for (int x = EQ::invbag::SLOT_BEGIN; x <= EQ::invbag::SLOT_END; x++) { if (ndx >= 80) break; - SlotID = EQEmu::InventoryProfile::CalcSlotId(i, x); + SlotID = EQ::InventoryProfile::CalcSlotId(i, x); item = this->GetInv().GetItem(SlotID); @@ -1328,13 +1328,13 @@ GetItems_Struct* Client::GetTraderItems(){ uint16 Client::FindTraderItem(int32 SerialNumber, uint16 Quantity){ - const EQEmu::ItemInstance* item= nullptr; + const EQ::ItemInstance* item= nullptr; uint16 SlotID = 0; - for (int i = EQEmu::invslot::GENERAL_BEGIN; i <= EQEmu::invslot::GENERAL_END; i++) { + for (int i = EQ::invslot::GENERAL_BEGIN; i <= EQ::invslot::GENERAL_END; i++) { item = this->GetInv().GetItem(i); if(item && item->GetItem()->ID == 17899){ //Traders Satchel - for (int x = EQEmu::invbag::SLOT_BEGIN; x <= EQEmu::invbag::SLOT_END; x++){ - SlotID = EQEmu::InventoryProfile::CalcSlotId(i, x); + for (int x = EQ::invbag::SLOT_BEGIN; x <= EQ::invbag::SLOT_END; x++){ + SlotID = EQ::InventoryProfile::CalcSlotId(i, x); item = this->GetInv().GetItem(SlotID); @@ -1371,7 +1371,7 @@ void Client::NukeTraderItem(uint16 Slot,int16 Charges,uint16 Quantity,Client* Cu tdis->Unknown000 = 0; tdis->TraderID = Customer->GetID(); - if (Customer->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (Customer->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // RoF+ use Item IDs for now tdis->ItemID = itemid; @@ -1390,7 +1390,7 @@ void Client::NukeTraderItem(uint16 Slot,int16 Charges,uint16 Quantity,Client* Cu } // This updates the trader. Removes it from his trading bags. // - const EQEmu::ItemInstance* Inst = m_inv[Slot]; + const EQ::ItemInstance* Inst = m_inv[Slot]; database.SaveInventory(CharacterID(), Inst, Slot); @@ -1432,7 +1432,7 @@ void Client::TraderUpdate(uint16 SlotID,uint32 TraderID){ void Client::FindAndNukeTraderItem(int32 SerialNumber, uint16 Quantity, Client* Customer, uint16 TraderSlot){ - const EQEmu::ItemInstance* item= nullptr; + const EQ::ItemInstance* item= nullptr; bool Stackable = false; int16 Charges=0; @@ -1507,7 +1507,7 @@ void Client::ReturnTraderReq(const EQApplicationPacket* app, int16 TraderItemCha EQApplicationPacket* outapp = nullptr; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { outapp = new EQApplicationPacket(OP_TraderShop, sizeof(TraderBuy_Struct)); } @@ -1519,7 +1519,7 @@ void Client::ReturnTraderReq(const EQApplicationPacket* app, int16 TraderItemCha TraderBuy_Struct* outtbs = (TraderBuy_Struct*)outapp->pBuffer; memcpy(outtbs, tbs, app->size); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { // Convert Serial Number back to Item ID for RoF+ outtbs->ItemID = itemid; @@ -1584,10 +1584,10 @@ void Client::BuyTraderItem(TraderBuy_Struct* tbs, Client* Trader, const EQApplic outtbs->ItemID = tbs->ItemID; - const EQEmu::ItemInstance* BuyItem = nullptr; + const EQ::ItemInstance* BuyItem = nullptr; uint32 ItemID = 0; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { // Convert Item ID to Serial Number for RoF+ ItemID = tbs->ItemID; @@ -1648,7 +1648,7 @@ void Client::BuyTraderItem(TraderBuy_Struct* tbs, Client* Trader, const EQApplic // This cannot overflow assuming MAX_TRANSACTION_VALUE, checked above, is the default of 2000000000 uint32 TotalCost = tbs->Price * outtbs->Quantity; - if (Trader->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (Trader->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // RoF+ uses individual item price where older clients use total price outtbs->Price = tbs->Price; @@ -1699,7 +1699,7 @@ void Client::BuyTraderItem(TraderBuy_Struct* tbs, Client* Trader, const EQApplic Trader->FindAndNukeTraderItem(tbs->ItemID, outtbs->Quantity, this, 0); - if (ItemID > 0 && Trader->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ItemID > 0 && Trader->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // Convert Serial Number back to ItemID for RoF+ outtbs->ItemID = ItemID; @@ -1717,7 +1717,7 @@ void Client::SendBazaarWelcome() auto row = results.begin(); EQApplicationPacket* outapp = nullptr; - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { outapp = new EQApplicationPacket(OP_TraderShop, sizeof(BazaarWelcome_Struct)); } @@ -1735,7 +1735,7 @@ void Client::SendBazaarWelcome() bws->Traders = atoi(row[0]); bws->Items = atoi(row[1]); - if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (ClientVersion() >= EQ::versions::ClientVersion::RoF) { bws->Unknown012 = GetID(); } @@ -2046,11 +2046,11 @@ static void UpdateTraderCustomerItemsAdded(uint32 CustomerID, TraderCharges_Stru if(!Customer) return; - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) return; - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if(!inst) return; @@ -2074,7 +2074,7 @@ static void UpdateTraderCustomerItemsAdded(uint32 CustomerID, TraderCharges_Stru LogTrading("Sending price update for [{}], Serial No. [{}] with [{}] charges", item->Name, gis->SerialNumber[i], gis->Charges[i]); - Customer->SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? + Customer->SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor? } } @@ -2090,7 +2090,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St if(!Customer) return; - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) return; @@ -2107,7 +2107,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St for(int i = 0; i < 80; i++) { if(gis->ItemID[i] == ItemID) { - if (Customer->ClientVersion() >= EQEmu::versions::ClientVersion::RoF) + if (Customer->ClientVersion() >= EQ::versions::ClientVersion::RoF) { // RoF+ use Item IDs for now tdis->ItemID = gis->ItemID[i]; @@ -2131,7 +2131,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St LogTrading("Sending price updates to customer [{}]", Customer->GetName()); - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if(!inst) return; @@ -2158,7 +2158,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St LogTrading("Sending price update for [{}], Serial No. [{}] with [{}] charges", item->Name, gis->SerialNumber[i], gis->Charges[i]); - Customer->SendItemPacket(EQEmu::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor?? + Customer->SendItemPacket(EQ::invslot::slotCursor, inst, ItemPacketMerchant); // MainCursor?? } safe_delete(inst); } @@ -2249,7 +2249,7 @@ void Client::HandleTraderPriceUpdate(const EQApplicationPacket *app) { } - const EQEmu::ItemData *item = 0; + const EQ::ItemData *item = 0; if(IDOfItemToAdd) item = database.GetItem(IDOfItemToAdd); @@ -2415,7 +2415,7 @@ void Client::SendBuyerResults(char* searchString, uint32 searchID) { char *buf = (char *)outapp->pBuffer; - const EQEmu::ItemData* item = database.GetItem(itemID); + const EQ::ItemData* item = database.GetItem(itemID); if(!item) { safe_delete(outapp); @@ -2511,7 +2511,7 @@ void Client::ShowBuyLines(const EQApplicationPacket *app) { char *Buf = (char *)outapp->pBuffer; - const EQEmu::ItemData* item = database.GetItem(ItemID); + const EQ::ItemData* item = database.GetItem(ItemID); if(!item) { safe_delete(outapp); @@ -2555,7 +2555,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) { /*uint32 BuyerID2 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused /*uint32 Unknown3 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item || !Quantity || !Price || !QtyBuyerWants) return; @@ -2621,7 +2621,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) { return; } - EQEmu::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot); + EQ::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot); if(!ItemToTransfer || !Buyer->MoveItemToInventory(ItemToTransfer, true)) { LogError("Unexpected error while moving item from seller to buyer"); @@ -2667,7 +2667,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) { return; } - EQEmu::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot); + EQ::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot); if(!ItemToTransfer) { LogError("Unexpected error while moving item from seller to buyer"); @@ -2767,7 +2767,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) { VARSTRUCT_ENCODE_TYPE(uint32, Buf, Quantity); VARSTRUCT_ENCODE_TYPE(uint32, Buf, Quantity * Price); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) { VARSTRUCT_ENCODE_TYPE(uint32, Buf, 0); // Think this is the upper 32 bits of a 64 bit price } @@ -2791,7 +2791,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) { VARSTRUCT_ENCODE_TYPE(uint32, Buf, Quantity); VARSTRUCT_ENCODE_TYPE(uint32, Buf, Quantity * Price); - if (Buyer->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (Buyer->ClientVersion() >= EQ::versions::ClientVersion::SoD) { VARSTRUCT_ENCODE_TYPE(uint32, Buf, 0); // Think this is the upper 32 bits of a 64 bit price } @@ -2946,7 +2946,7 @@ void Client::UpdateBuyLine(const EQApplicationPacket *app) { /*uint32 UnknownZ =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused uint32 ItemCount = VARSTRUCT_DECODE_TYPE(uint32, Buf); - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) return; @@ -3010,7 +3010,7 @@ void Client::BuyerItemSearch(const EQApplicationPacket *app) { BuyerItemSearchResults_Struct* bisr = (BuyerItemSearchResults_Struct*)outapp->pBuffer; - const EQEmu::ItemData* item = 0; + const EQ::ItemData* item = 0; int Count=0; diff --git a/zone/trap.cpp b/zone/trap.cpp index 7027f3e28..44f34eb8a 100644 --- a/zone/trap.cpp +++ b/zone/trap.cpp @@ -135,7 +135,7 @@ void Trap::Trigger(Mob* trigger) entity_list.MessageClose(trigger,false,100,13,"%s",message.c_str()); } if(hiddenTrigger){ - hiddenTrigger->SpellFinished(effectvalue, trigger, EQEmu::spells::CastingSlot::Item, 0, -1, spells[effectvalue].ResistDiff); + hiddenTrigger->SpellFinished(effectvalue, trigger, EQ::spells::CastingSlot::Item, 0, -1, spells[effectvalue].ResistDiff); } break; case trapTypeAlarm: diff --git a/zone/tribute.cpp b/zone/tribute.cpp index 3e80f5446..95640947e 100644 --- a/zone/tribute.cpp +++ b/zone/tribute.cpp @@ -66,7 +66,7 @@ void Client::ToggleTribute(bool enabled) { int r; uint32 cost = 0; uint32 level = GetLevel(); - for (r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) { + for (r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { uint32 tid = m_pp.tributes[r].tribute; if(tid == TRIBUTE_NONE) continue; @@ -119,7 +119,7 @@ void Client::DoTributeUpdate() { tis->tribute_master_id = tribute_master_id; //Dont know what this is for int r; - for (r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) { + for (r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { if(m_pp.tributes[r].tribute != TRIBUTE_NONE) { tis->tributes[r] = m_pp.tributes[r].tribute; tis->tiers[r] = m_pp.tributes[r].tier; @@ -134,24 +134,24 @@ void Client::DoTributeUpdate() { if(m_pp.tribute_active) { //send and equip tribute items... - for (r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) { + for (r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { uint32 tid = m_pp.tributes[r].tribute; if(tid == TRIBUTE_NONE) { - if (m_inv[EQEmu::invslot::TRIBUTE_BEGIN + r]) - DeleteItemInInventory(EQEmu::invslot::TRIBUTE_BEGIN + r, 0, false); + if (m_inv[EQ::invslot::TRIBUTE_BEGIN + r]) + DeleteItemInInventory(EQ::invslot::TRIBUTE_BEGIN + r, 0, false); continue; } if(tribute_list.count(tid) != 1) { - if (m_inv[EQEmu::invslot::TRIBUTE_BEGIN + r]) - DeleteItemInInventory(EQEmu::invslot::TRIBUTE_BEGIN + r, 0, false); + if (m_inv[EQ::invslot::TRIBUTE_BEGIN + r]) + DeleteItemInInventory(EQ::invslot::TRIBUTE_BEGIN + r, 0, false); continue; } //sanity check if(m_pp.tributes[r].tier >= MAX_TRIBUTE_TIERS) { - if (m_inv[EQEmu::invslot::TRIBUTE_BEGIN + r]) - DeleteItemInInventory(EQEmu::invslot::TRIBUTE_BEGIN + r, 0, false); + if (m_inv[EQ::invslot::TRIBUTE_BEGIN + r]) + DeleteItemInInventory(EQ::invslot::TRIBUTE_BEGIN + r, 0, false); m_pp.tributes[r].tier = 0; continue; } @@ -161,19 +161,19 @@ void Client::DoTributeUpdate() { uint32 item_id = tier.tribute_item_id; //summon the item for them - const EQEmu::ItemInstance* inst = database.CreateItem(item_id, 1); + const EQ::ItemInstance* inst = database.CreateItem(item_id, 1); if(inst == nullptr) continue; - PutItemInInventory(EQEmu::invslot::TRIBUTE_BEGIN + r, *inst, false); - SendItemPacket(EQEmu::invslot::TRIBUTE_BEGIN + r, inst, ItemPacketTributeItem); + PutItemInInventory(EQ::invslot::TRIBUTE_BEGIN + r, *inst, false); + SendItemPacket(EQ::invslot::TRIBUTE_BEGIN + r, inst, ItemPacketTributeItem); safe_delete(inst); } } else { //unequip tribute items... - for (r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) { - if (m_inv[EQEmu::invslot::TRIBUTE_BEGIN + r]) - DeleteItemInInventory(EQEmu::invslot::TRIBUTE_BEGIN + r, 0, false); + for (r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { + if (m_inv[EQ::invslot::TRIBUTE_BEGIN + r]) + DeleteItemInInventory(EQ::invslot::TRIBUTE_BEGIN + r, 0, false); } } CalcBonuses(); @@ -192,7 +192,7 @@ void Client::SendTributeTimer() { void Client::ChangeTributeSettings(TributeInfo_Struct *t) { int r; - for (r = 0; r < EQEmu::invtype::TRIBUTE_SIZE; r++) { + for (r = 0; r < EQ::invtype::TRIBUTE_SIZE; r++) { m_pp.tributes[r].tribute = TRIBUTE_NONE; @@ -239,7 +239,7 @@ void Client::SendTributeDetails(uint32 client_id, uint32 tribute_id) { //returns the number of points received from the tribute int32 Client::TributeItem(uint32 slot, uint32 quantity) { - const EQEmu::ItemInstance*inst = m_inv[slot]; + const EQ::ItemInstance*inst = m_inv[slot]; if(inst == nullptr) return(0); diff --git a/zone/tune.cpp b/zone/tune.cpp index 22ca90375..f22fe6a53 100644 --- a/zone/tune.cpp +++ b/zone/tune.cpp @@ -255,7 +255,7 @@ int32 Mob::Tune_MeleeMitigation(Mob* GM, Mob *attacker, int32 damage, int32 minh } if (RuleB(Combat, UseIntervalAC)) { - float softcap = (GetSkill(EQEmu::skills::SkillDefense) + GetLevel()) * + float softcap = (GetSkill(EQ::skills::SkillDefense) + GetLevel()) * RuleR(Combat, SoftcapFactor) * (1.0 + aa_mit); float mitigation_rating = 0.0; float attack_rating = 0.0; @@ -410,14 +410,14 @@ int32 Mob::Tune_MeleeMitigation(Mob* GM, Mob *attacker, int32 damage, int32 minh int tmp_armor = armor; if (GetClass() == WIZARD || GetClass() == MAGICIAN || GetClass() == NECROMANCER || GetClass() == ENCHANTER){ - mitigation_rating = ((GetSkill(EQEmu::skills::SkillDefense) + itembonuses.HeroicAGI / 10) / 4.0) + armor + 1; + mitigation_rating = ((GetSkill(EQ::skills::SkillDefense) + itembonuses.HeroicAGI / 10) / 4.0) + armor + 1; if (Msg >= 2) - GM->Message(Chat::White, "# + %.2f #### DEFENDER Armor Bonus [Defense Skill %i Heroic Agi %i]", mitigation_rating - tmp_armor, GetSkill(EQEmu::skills::SkillDefense), itembonuses.HeroicAGI); + GM->Message(Chat::White, "# + %.2f #### DEFENDER Armor Bonus [Defense Skill %i Heroic Agi %i]", mitigation_rating - tmp_armor, GetSkill(EQ::skills::SkillDefense), itembonuses.HeroicAGI); } else{ - mitigation_rating = ((GetSkill(EQEmu::skills::SkillDefense) + itembonuses.HeroicAGI / 10) / 3.0) + (armor * 1.333333) + 1; + mitigation_rating = ((GetSkill(EQ::skills::SkillDefense) + itembonuses.HeroicAGI / 10) / 3.0) + (armor * 1.333333) + 1; if (Msg >= 2) - GM->Message(Chat::White, "# + %.2f #### DEFENDER Armor Bonus [Defense Skill %i Heroic Agi %i]", mitigation_rating - tmp_armor, GetSkill(EQEmu::skills::SkillDefense), itembonuses.HeroicAGI); + GM->Message(Chat::White, "# + %.2f #### DEFENDER Armor Bonus [Defense Skill %i Heroic Agi %i]", mitigation_rating - tmp_armor, GetSkill(EQ::skills::SkillDefense), itembonuses.HeroicAGI); } mitigation_rating *= 0.847; @@ -443,16 +443,16 @@ int32 Mob::Tune_MeleeMitigation(Mob* GM, Mob *attacker, int32 damage, int32 minh if (attacker->IsClient()){ if (atk_override) - attack_rating = (atk_override + ((attacker->GetSTR() - 66) * 0.9) + (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345)); + attack_rating = (atk_override + ((attacker->GetSTR() - 66) * 0.9) + (attacker->GetSkill(EQ::skills::SkillOffense)*1.345)); else - attack_rating = ((attacker->CastToClient()->CalcATK() + add_atk) + ((attacker->GetSTR() - 66) * 0.9) + (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345)); + attack_rating = ((attacker->CastToClient()->CalcATK() + add_atk) + ((attacker->GetSTR() - 66) * 0.9) + (attacker->GetSkill(EQ::skills::SkillOffense)*1.345)); } else{ if (atk_override) - attack_rating = (atk_override + (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345) + ((attacker->GetSTR() - 66) * 0.9)); + attack_rating = (atk_override + (attacker->GetSkill(EQ::skills::SkillOffense)*1.345) + ((attacker->GetSTR() - 66) * 0.9)); else - attack_rating = ((attacker->GetATK() + add_atk) + (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345) + ((attacker->GetSTR() - 66) * 0.9)); + attack_rating = ((attacker->GetATK() + add_atk) + (attacker->GetSkill(EQ::skills::SkillOffense)*1.345) + ((attacker->GetSTR() - 66) * 0.9)); } attack_rating = attacker->mod_attack_rating(attack_rating, this); @@ -468,7 +468,7 @@ int32 Mob::Tune_MeleeMitigation(Mob* GM, Mob *attacker, int32 damage, int32 minh GM->Message(Chat::White, "# %i #### ATTACKER Worn/Equip ATK Bonus", attacker->itembonuses.ATK); GM->Message(Chat::White, "# %i #### ATTACKER Worn/Equip ATK Bonus", attacker->itembonuses.ATK); GM->Message(Chat::White, "# %.2f #### ATTACKER Strength Stat ATK Bonus [Stat Amt: %i]", ((attacker->GetSTR()-66) * 0.9),attacker->GetSTR()); - GM->Message(Chat::White, "# %.2f #### ATTACKER Offensive Skill ATK Bonus [Stat Amt: %i]", (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345), attacker->GetSkill(EQEmu::skills::SkillOffense)); + GM->Message(Chat::White, "# %.2f #### ATTACKER Offensive Skill ATK Bonus [Stat Amt: %i]", (attacker->GetSkill(EQ::skills::SkillOffense)*1.345), attacker->GetSkill(EQ::skills::SkillOffense)); } else{ @@ -476,7 +476,7 @@ int32 Mob::Tune_MeleeMitigation(Mob* GM, Mob *attacker, int32 damage, int32 minh GM->Message(Chat::White, "# %i #### ATTACKER SE_ATK(2) spell Bonus", attacker->spellbonuses.ATK); GM->Message(Chat::White, "# %i #### ATTACKER NPC ATK Stat", attacker->CastToNPC()->ATK); GM->Message(Chat::White, "# %.2f #### ATTACKER Strength Stat ATK Bonus [Stat Amt: %i]", ((attacker->GetSTR()-66) * 0.9),attacker->GetSTR()); - GM->Message(Chat::White, "# %.2f #### ATTACKER Offensive Skill ATK Bonus [Stat Amt: %i]", (attacker->GetSkill(EQEmu::skills::SkillOffense)*1.345), attacker->GetSkill(EQEmu::skills::SkillOffense)); + GM->Message(Chat::White, "# %.2f #### ATTACKER Offensive Skill ATK Bonus [Stat Amt: %i]", (attacker->GetSkill(EQ::skills::SkillOffense)*1.345), attacker->GetSkill(EQ::skills::SkillOffense)); } } @@ -582,13 +582,13 @@ int32 Client::Tune_GetMeleeMitDmg(Mob* GM, Mob *attacker, int32 damage, int32 mi int32 Client::GetMeleeDamage(Mob* other, bool GetMinDamage) { - int Hand = EQEmu::invslot::slotPrimary; + int Hand = EQ::invslot::slotPrimary; if (!other) return 0; - EQEmu::ItemInstance* weapon; - weapon = GetInv().GetItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance* weapon; + weapon = GetInv().GetItem(EQ::invslot::slotPrimary); if(weapon != nullptr) { if (!weapon->IsWeapon()) { @@ -596,7 +596,7 @@ int32 Client::GetMeleeDamage(Mob* other, bool GetMinDamage) } } - EQEmu::skills::SkillType skillinuse = AttackAnimation(Hand, weapon); + EQ::skills::SkillType skillinuse = AttackAnimation(Hand, weapon); int damage = 0; uint8 mylevel = GetLevel() ? GetLevel() : 1; @@ -620,16 +620,16 @@ int32 Client::GetMeleeDamage(Mob* other, bool GetMinDamage) max_hit = (RuleI(Combat, HitCapPre20)); CheckIncreaseSkill(skillinuse, other, -15); - CheckIncreaseSkill(EQEmu::skills::SkillOffense, other, -15); + CheckIncreaseSkill(EQ::skills::SkillOffense, other, -15); #ifndef EQEMU_NO_WEAPON_DAMAGE_BONUS int ucDamageBonus = 0; - if (Hand == EQEmu::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) + if (Hand == EQ::invslot::slotPrimary && GetLevel() >= 28 && IsWarriorClass()) { - ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr); + ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQ::ItemData*) nullptr); min_hit += (int) ucDamageBonus; max_hit += (int) ucDamageBonus; @@ -657,28 +657,28 @@ void Mob::Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_ch float tmp_hit_chance = 0.0f; bool end = false; - EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand; + EQ::skills::SkillType skillinuse = EQ::skills::SkillHandtoHand; if (attacker->IsClient()) {//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow. - EQEmu::ItemInstance* weapon; - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance* weapon; + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); if(weapon && weapon->IsWeapon()){ - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotPrimary, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotPrimary, weapon); } else { - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); if (weapon && weapon->IsWeapon()) - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotSecondary, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotSecondary, weapon); else { - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotRange); + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotRange); if (weapon && weapon->IsWeapon()) - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotRange, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotRange, weapon); } } } - tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, 0, 0, avoid_override); + tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, 0, 0, avoid_override); Message(0, "#Tune - Begin Parse [Interval %i Max Loop Iterations %i]", interval, max_loop); @@ -690,7 +690,7 @@ void Mob::Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_ch for (int j=0; j < max_loop; j++) { - tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, false, 0, avoid_override, add_acc); + tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, false, 0, avoid_override, add_acc); if (Msg >= 3) Message(Chat::Yellow, "#Tune - Processing... [%i] [ACCURACY %i] Hit Chance %.2f ",j,add_acc,tmp_hit_chance); @@ -705,7 +705,7 @@ void Mob::Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_ch if (end){ - Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, Msg, 0, avoid_override);//Display Stat Report + Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, Msg, 0, avoid_override);//Display Stat Report Message(0, " "); @@ -737,28 +737,28 @@ void Mob::Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_ float tmp_hit_chance = 0.0f; bool end = false; - EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand; + EQ::skills::SkillType skillinuse = EQ::skills::SkillHandtoHand; if (attacker->IsClient()) {//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow. - EQEmu::ItemInstance* weapon; - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotPrimary); + EQ::ItemInstance* weapon; + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotPrimary); if(weapon && weapon->IsWeapon()){ - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotPrimary, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotPrimary, weapon); } else { - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotSecondary); + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary); if (weapon && weapon->IsWeapon()) - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotSecondary, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotSecondary, weapon); else { - weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::invslot::slotRange); + weapon = attacker->CastToClient()->GetInv().GetItem(EQ::invslot::slotRange); if (weapon && weapon->IsWeapon()) - skillinuse = attacker->CastToClient()->AttackAnimation(EQEmu::invslot::slotRange, weapon); + skillinuse = attacker->CastToClient()->AttackAnimation(EQ::invslot::slotRange, weapon); } } } - tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, 0, acc_override, 0); + tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, 0, acc_override, 0); Message(0, "#Tune - Begin Parse [Interval %i Max Loop Iterations %i]", interval, max_loop); Message(0, "#Tune - Processing... Find Avoidance for hit chance on defender of (%.0f) pct from attacker. [Current Hit Chance %.2f]", hit_chance, tmp_hit_chance); @@ -768,7 +768,7 @@ void Mob::Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_ for (int j=0; j < max_loop; j++) { - tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, 0, acc_override, 0, 0, add_avoid); + tmp_hit_chance = Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, 0, acc_override, 0, 0, add_avoid); if (Msg >= 3) Message(0, "#Tune - Processing... [%i] [AVOIDANCE %i] Hit Chance %.2f ",j,add_avoid,tmp_hit_chance); @@ -783,7 +783,7 @@ void Mob::Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_ if (end){ - Tune_CheckHitChance(defender, attacker, skillinuse, EQEmu::invslot::slotPrimary, 0, Msg, acc_override, 0);//Display Stat Report + Tune_CheckHitChance(defender, attacker, skillinuse, EQ::invslot::slotPrimary, 0, Msg, acc_override, 0);//Display Stat Report Message(0, " "); @@ -808,7 +808,7 @@ void Mob::Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_ } -float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::SkillType skillinuse, int Hand, int16 chance_mod, int Msg, int acc_override, int avoid_override, int add_acc, int add_avoid) +float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQ::skills::SkillType skillinuse, int Hand, int16 chance_mod, int Msg, int acc_override, int avoid_override, int add_acc, int add_avoid) { float chancetohit = RuleR(Combat, BaseHitChance); @@ -896,9 +896,9 @@ float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::Skil if(defender->IsClient()) { - chancetohit += (RuleR(Combat, WeaponSkillFalloff) * (defender->CastToClient()->MaxSkill(EQEmu::skills::SkillDefense) - defender->GetSkill(EQEmu::skills::SkillDefense))); + chancetohit += (RuleR(Combat, WeaponSkillFalloff) * (defender->CastToClient()->MaxSkill(EQ::skills::SkillDefense) - defender->GetSkill(EQ::skills::SkillDefense))); if (Msg >= 2) - Message(0, "# + %.2f Total: %.2f #### DEFENDER Defense Skill Mod", (RuleR(Combat, WeaponSkillFalloff) * (defender->CastToClient()->MaxSkill(EQEmu::skills::SkillDefense) - defender->GetSkill(EQEmu::skills::SkillDefense))), chancetohit); + Message(0, "# + %.2f Total: %.2f #### DEFENDER Defense Skill Mod", (RuleR(Combat, WeaponSkillFalloff) * (defender->CastToClient()->MaxSkill(EQ::skills::SkillDefense) - defender->GetSkill(EQ::skills::SkillDefense))), chancetohit); } @@ -987,17 +987,17 @@ float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::Skil hitBonus += attacker->itembonuses.HitChanceEffect[skillinuse] + attacker->spellbonuses.HitChanceEffect[skillinuse]+ attacker->aabonuses.HitChanceEffect[skillinuse]+ - attacker->itembonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] + - attacker->spellbonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1] + - attacker->aabonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]; + attacker->itembonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] + + attacker->spellbonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1] + + attacker->aabonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]; if (Msg >= 2){ - if (attacker->aabonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %i #### ATTACKER SE_HitChance(184) AA Bonus [All Skills]", attacker->aabonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]); - if (attacker->spellbonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %i #### ATTACKER SE_HitChance(184) Spell Bonus [All Skills]", attacker->spellbonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]); - if (attacker->itembonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %i #### ATTACKER SE_HitChance(184) Worn Bonus [All Skills]", attacker->itembonuses.HitChanceEffect[EQEmu::skills::HIGHEST_SKILL + 1]); + if (attacker->aabonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %i #### ATTACKER SE_HitChance(184) AA Bonus [All Skills]", attacker->aabonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]); + if (attacker->spellbonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %i #### ATTACKER SE_HitChance(184) Spell Bonus [All Skills]", attacker->spellbonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]); + if (attacker->itembonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %i #### ATTACKER SE_HitChance(184) Worn Bonus [All Skills]", attacker->itembonuses.HitChanceEffect[EQ::skills::HIGHEST_SKILL + 1]); if (attacker->itembonuses.HitChanceEffect[skillinuse]) Message(0, "# %i #### ATTACKER SE_HitChance(184) AA Bonus [Skill]", attacker->aabonuses.HitChanceEffect[skillinuse]); if (attacker->spellbonuses.HitChanceEffect[skillinuse]) @@ -1008,19 +1008,19 @@ float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::Skil //Accuracy = Spell Effect , HitChance = 'Accuracy' from Item Effect //Only AA derived accuracy can be skill limited. ie (Precision of the Pathfinder, Dead Aim) - hitBonus += (attacker->itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + - attacker->spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + - attacker->aabonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1] + + hitBonus += (attacker->itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + + attacker->spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + + attacker->aabonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1] + attacker->aabonuses.Accuracy[skillinuse] + attacker->itembonuses.HitChance) / 15.0f; //Item Mod 'Accuracy' if (Msg >= 2) { - if (attacker->aabonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) AA Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->aabonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->aabonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]); - if (attacker->spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) Spell Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->spellbonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]); - if (attacker->itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) - Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) Worn Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->itembonuses.Accuracy[EQEmu::skills::HIGHEST_SKILL + 1]); + if (attacker->aabonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) AA Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->aabonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->aabonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]); + if (attacker->spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) Spell Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->spellbonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]); + if (attacker->itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) + Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) Worn Bonus [All Skills] [Stat Amt: %i]", static_cast(attacker->itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]) / 15.0f, attacker->itembonuses.Accuracy[EQ::skills::HIGHEST_SKILL + 1]); if (attacker->aabonuses.Accuracy[skillinuse]) Message(0, "# %.2f #### ATTACKER SE_Accuracy(216) AA Bonus [Skill] [Stat Amt: %i]", static_cast(attacker->aabonuses.Accuracy[skillinuse])/15.0f,attacker->aabonuses.Accuracy[skillinuse]); if (attacker->itembonuses.HitChance) @@ -1052,7 +1052,7 @@ float Mob::Tune_CheckHitChance(Mob* defender, Mob* attacker, EQEmu::skills::Skil hitBonus += (add_acc / 15.0f); //Modifier from database } - if (skillinuse == EQEmu::skills::SkillArchery){ + if (skillinuse == EQ::skills::SkillArchery){ hitBonus -= hitBonus*RuleR(Combat, ArcheryHitPenalty); if (Msg >= 2) Message(0, "# %.2f pct #### RuleR(Combat, ArcheryHitPenalty) ", RuleR(Combat, ArcheryHitPenalty)); diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index 65f4fd099..544fca2cd 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -118,7 +118,7 @@ void NPC::ResumeWandering() { // we were paused by a quest AI_walking_timer->Disable(); SetGrid(0 - GetGrid()); - if (cur_wp == EQEmu::WaypointStatus::QuestControlGrid) + if (cur_wp == EQ::WaypointStatus::QuestControlGrid) { // got here by a MoveTo() cur_wp = save_wp; UpdateWaypoint(cur_wp); // have him head to last destination from here @@ -184,7 +184,7 @@ void NPC::MoveTo(const glm::vec4 &position, bool saveguardspot) AI_walking_timer->Disable(); // disable timer in case he is paused at a wp if (cur_wp >= 0) { // we've not already done a MoveTo() save_wp = cur_wp; // save the current waypoint - cur_wp = EQEmu::WaypointStatus::QuestControlGrid; + cur_wp = EQ::WaypointStatus::QuestControlGrid; } LogAI("MoveTo [{}], pausing regular grid wandering. Grid [{}], save_wp [{}]", to_string(static_cast(position)).c_str(), @@ -194,7 +194,7 @@ void NPC::MoveTo(const glm::vec4 &position, bool saveguardspot) else { // not on a grid roamer = true; save_wp = 0; - cur_wp = EQEmu::WaypointStatus::QuestControlNoGrid; + cur_wp = EQ::WaypointStatus::QuestControlNoGrid; LogAI("MoveTo [{}] without a grid", to_string(static_cast(position)).c_str()); } diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 0279d55be..dfc9c447a 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -834,7 +834,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) break; } case ServerOP_RefreshCensorship: { - if (!EQEmu::ProfanityManager::LoadProfanityList(&database)) + if (!EQ::ProfanityManager::LoadProfanityList(&database)) LogError("Received request to refresh the profanity list..but, the action failed"); break; } @@ -926,7 +926,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) database.SetGroupLeaderName(group->GetID(), Inviter->GetName()); group->UpdateGroupAAs(); - if (Inviter->CastToClient()->ClientVersion() < EQEmu::versions::ClientVersion::SoD) + if (Inviter->CastToClient()->ClientVersion() < EQ::versions::ClientVersion::SoD) { auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct)); @@ -1454,7 +1454,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) bool found_corpse = false; for (auto const& it : entity_list.GetCorpseList()) { if (it.second->IsPlayerCorpse() && strcmp(it.second->GetOwnerName(), s->ownername) == 0) { - if (s->consent_type == EQEmu::consent::Normal) { + if (s->consent_type == EQ::consent::Normal) { if (s->permission == 1) { it.second->AddConsentName(s->grantname); } @@ -1462,13 +1462,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) it.second->RemoveConsentName(s->grantname); } } - else if (s->consent_type == EQEmu::consent::Group) { + else if (s->consent_type == EQ::consent::Group) { it.second->SetConsentGroupID(s->consent_id); } - else if (s->consent_type == EQEmu::consent::Raid) { + else if (s->consent_type == EQ::consent::Raid) { it.second->SetConsentRaidID(s->consent_id); } - else if (s->consent_type == EQEmu::consent::Guild) { + else if (s->consent_type == EQ::consent::Guild) { it.second->SetConsentGuildID(s->consent_id); } found_corpse = true; @@ -1492,7 +1492,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) ServerOP_Consent_Struct* s = (ServerOP_Consent_Struct*)pack->pBuffer; Client* owner_client = entity_list.GetClientByName(s->ownername); Client* grant_client = nullptr; - if (s->consent_type == EQEmu::consent::Normal) { + if (s->consent_type == EQ::consent::Normal) { grant_client = entity_list.GetClientByName(s->grantname); } if (owner_client || grant_client) { diff --git a/zone/zone.cpp b/zone/zone.cpp index d64c198d3..c9342f305 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -262,12 +262,12 @@ bool Zone::LoadZoneObjects() data.tilt_y = atof(row[18]); data.unknown084 = 0; - EQEmu::ItemInstance *inst = nullptr; + EQ::ItemInstance *inst = nullptr; // FatherNitwit: this dosent seem to work... // tradeskill containers do not have an itemid of 0... at least what I am seeing if (itemid == 0) { // Generic tradeskill container - inst = new EQEmu::ItemInstance(ItemInstWorldContainer); + inst = new EQ::ItemInstance(ItemInstWorldContainer); } else { // Groundspawn object inst = database.CreateItem(itemid); @@ -275,11 +275,11 @@ bool Zone::LoadZoneObjects() // Father Nitwit's fix... not perfect... if (inst == nullptr && type != OT_DROPPEDITEM) { - inst = new EQEmu::ItemInstance(ItemInstWorldContainer); + inst = new EQ::ItemInstance(ItemInstWorldContainer); } // Load child objects if container - if (inst && inst->IsType(EQEmu::item::ItemClassBag)) { + if (inst && inst->IsType(EQ::item::ItemClassBag)) { database.LoadWorldContainer(id, inst); } @@ -308,7 +308,7 @@ bool Zone::LoadGroundSpawns() { uint32 gsnumber=0; for(gsindex=0;gsindex<50;gsindex++){ if(groundspawn.spawn[gsindex].item>0 && groundspawn.spawn[gsindex].item iterator(spawn2_list); - EQEmu::InventoryProfile::CleanDirty(); + EQ::InventoryProfile::CleanDirty(); LogSpawns("Running Zone::Process -> Spawn2::Process"); @@ -2512,7 +2512,7 @@ void Zone::CalculateNpcUpdateDistanceSpread() int x_spread = int(abs(max_x - min_x)); int y_spread = int(abs(max_y - min_y)); int combined_spread = int(abs((x_spread + y_spread) / 2)); - int update_distance = EQEmu::ClampLower(int(combined_spread / 4), int(zone->GetMaxMovementUpdateRange())); + int update_distance = EQ::ClampLower(int(combined_spread / 4), int(zone->GetMaxMovementUpdateRange())); SetNpcPositionUpdateDistance(update_distance); diff --git a/zone/zone.h b/zone/zone.h index 6d8fc54e6..9c56efbab 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -133,7 +133,7 @@ public: const char *GetSpellBlockedMessage(uint32 spell_id, const glm::vec3 &location); - EQEmu::Random random; + EQ::Random random; EQTime zone_time; ZonePoint *GetClosestZonePoint(const glm::vec3 &location, const char *to_name, Client *client, float max_distance = 40000.0f); diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 1dfbeb4a2..40ec77ecd 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -553,7 +553,7 @@ void ZoneDatabase::RegisterBug(Client* client, BugReport_Struct* bug_report) { " '%s')", zone->GetShortName(), client->ClientVersion(), - EQEmu::versions::ClientVersionName(client->ClientVersion()), + EQ::versions::ClientVersionName(client->ClientVersion()), client->AccountID(), client->CharacterID(), client->GetName(), @@ -570,11 +570,11 @@ void ZoneDatabase::RegisterBug(Client* client, BugReport_Struct* bug_report) { bug_report->target_id, (target_name_ ? target_name_ : ""), bug_report->optional_info_mask, - ((bug_report->optional_info_mask & EQEmu::bug::infoCanDuplicate) != 0 ? 1 : 0), - ((bug_report->optional_info_mask & EQEmu::bug::infoCrashBug) != 0 ? 1 : 0), - ((bug_report->optional_info_mask & EQEmu::bug::infoTargetInfo) != 0 ? 1 : 0), - ((bug_report->optional_info_mask & EQEmu::bug::infoCharacterFlags) != 0 ? 1 : 0), - ((bug_report->optional_info_mask & EQEmu::bug::infoUnknownValue) != 0 ? 1 : 0), + ((bug_report->optional_info_mask & EQ::bug::infoCanDuplicate) != 0 ? 1 : 0), + ((bug_report->optional_info_mask & EQ::bug::infoCrashBug) != 0 ? 1 : 0), + ((bug_report->optional_info_mask & EQ::bug::infoTargetInfo) != 0 ? 1 : 0), + ((bug_report->optional_info_mask & EQ::bug::infoCharacterFlags) != 0 ? 1 : 0), + ((bug_report->optional_info_mask & EQ::bug::infoUnknownValue) != 0 ? 1 : 0), (bug_report_ ? bug_report_ : ""), (system_info_ ? system_info_ : "") ); @@ -679,7 +679,7 @@ void ZoneDatabase::GetEventLogs(const char* name,char* target,uint32 account_id, } // Load child objects for a world container (i.e., forge, bag dropped to ground, etc) -void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* container) +void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQ::ItemInstance* container) { if (!container) { LogError("Programming error: LoadWorldContainer passed nullptr pointer"); @@ -701,7 +701,7 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* cont uint8 index = (uint8)atoi(row[0]); uint32 item_id = (uint32)atoi(row[1]); int8 charges = (int8)atoi(row[2]); - uint32 aug[EQEmu::invaug::SOCKET_COUNT]; + uint32 aug[EQ::invaug::SOCKET_COUNT]; aug[0] = (uint32)atoi(row[3]); aug[1] = (uint32)atoi(row[4]); aug[2] = (uint32)atoi(row[5]); @@ -709,9 +709,9 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* cont aug[4] = (uint32)atoi(row[7]); aug[5] = (uint32)atoi(row[8]); - EQEmu::ItemInstance* inst = database.CreateItem(item_id, charges); + EQ::ItemInstance* inst = database.CreateItem(item_id, charges); if (inst && inst->GetItem()->IsClassCommon()) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) if (aug[i]) inst->PutAugment(&database, i, aug[i]); // Put item inside world container @@ -723,7 +723,7 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* cont } // Save child objects for a world container (i.e., forge, bag dropped to ground, etc) -void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQEmu::ItemInstance* container) +void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQ::ItemInstance* container) { // Since state is not saved for each world container action, we'll just delete // all and save from scratch .. we may come back later to optimize @@ -734,18 +734,18 @@ void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQ DeleteWorldContainer(parent_id,zone_id); // Save all 10 items, if they exist - for (uint8 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; index++) { + for (uint8 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; index++) { - EQEmu::ItemInstance* inst = container->GetItem(index); + EQ::ItemInstance* inst = container->GetItem(index); if (!inst) continue; uint32 item_id = inst->GetItem()->ID; - uint32 augslot[EQEmu::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; + uint32 augslot[EQ::invaug::SOCKET_COUNT] = { 0, 0, 0, 0, 0, 0 }; - if (inst->IsType(EQEmu::item::ItemClassCommon)) { - for (int i = EQEmu::invaug::SOCKET_BEGIN; i <= EQEmu::invaug::SOCKET_END; i++) { - EQEmu::ItemInstance *auginst=inst->GetAugment(i); + if (inst->IsType(EQ::item::ItemClassCommon)) { + for (int i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { + EQ::ItemInstance *auginst=inst->GetAugment(i); augslot[i]=(auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0; } } @@ -825,7 +825,7 @@ TraderCharges_Struct* ZoneDatabase::LoadTraderItemWithCharges(uint32 char_id) return loadti; } -EQEmu::ItemInstance* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) { +EQ::ItemInstance* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) { std::string query = StringFormat("SELECT * FROM trader WHERE char_id = %i AND serialnumber = %i " "ORDER BY slot_id LIMIT 80", CharID, SerialNumber); auto results = QueryDatabase(query); @@ -843,7 +843,7 @@ EQEmu::ItemInstance* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int Seria int Charges = atoi(row[3]); int Cost = atoi(row[4]); - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) { LogTrading("Unable to create item\n"); @@ -854,7 +854,7 @@ EQEmu::ItemInstance* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int Seria if (item->NoDrop == 0) return nullptr; - EQEmu::ItemInstance* inst = database.CreateItem(item); + EQ::ItemInstance* inst = database.CreateItem(item); if(!inst) { LogTrading("Unable to create item instance\n"); fflush(stdout); @@ -897,7 +897,7 @@ void ZoneDatabase::UpdateTraderItemPrice(int CharID, uint32 ItemID, uint32 Charg LogTrading("ZoneDatabase::UpdateTraderPrice([{}], [{}], [{}], [{}])", CharID, ItemID, Charges, NewPrice); - const EQEmu::ItemData *item = database.GetItem(ItemID); + const EQ::ItemData *item = database.GetItem(ItemID); if(!item) return; @@ -1222,12 +1222,12 @@ bool ZoneDatabase::LoadCharacterMemmedSpells(uint32 character_id, PlayerProfile_ auto results = database.QueryDatabase(query); int i = 0; /* Initialize Spells */ - for (i = 0; i < EQEmu::spells::SPELL_GEM_COUNT; i++){ + for (i = 0; i < EQ::spells::SPELL_GEM_COUNT; i++){ pp->mem_spells[i] = 0xFFFFFFFF; } for (auto row = results.begin(); row != results.end(); ++row) { i = atoi(row[0]); - if (i < EQEmu::spells::SPELL_GEM_COUNT && atoi(row[1]) <= SPDAT_RECORDS){ + if (i < EQ::spells::SPELL_GEM_COUNT && atoi(row[1]) <= SPDAT_RECORDS){ pp->mem_spells[i] = atoi(row[1]); } } @@ -1246,7 +1246,7 @@ bool ZoneDatabase::LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Str /* Initialize Spells */ - memset(pp->spell_book, 0xFF, (sizeof(uint32) * EQEmu::spells::SPELLBOOK_SIZE)); + memset(pp->spell_book, 0xFF, (sizeof(uint32) * EQ::spells::SPELLBOOK_SIZE)); // We have the ability to block loaded spells by max id on a per-client basis.. // but, we do not have to ability to keep players from using older clients after @@ -1257,7 +1257,7 @@ bool ZoneDatabase::LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Str int idx = atoi(row[0]); int id = atoi(row[1]); - if (idx < 0 || idx >= EQEmu::spells::SPELLBOOK_SIZE) + if (idx < 0 || idx >= EQ::spells::SPELLBOOK_SIZE) continue; if (id < 3 || id > SPDAT_RECORDS) // 3 ("Summon Corpse") is the first scribable spell in spells_us.txt continue; @@ -1405,11 +1405,11 @@ bool ZoneDatabase::LoadCharacterMaterialColor(uint32 character_id, PlayerProfile bool ZoneDatabase::LoadCharacterBandolier(uint32 character_id, PlayerProfile_Struct* pp) { std::string query = StringFormat("SELECT `bandolier_id`, `bandolier_slot`, `item_id`, `icon`, `bandolier_name` FROM `character_bandolier` WHERE `id` = %u LIMIT %u", - character_id, EQEmu::profile::BANDOLIERS_SIZE); + character_id, EQ::profile::BANDOLIERS_SIZE); auto results = database.QueryDatabase(query); int i = 0; int r = 0; int si = 0; - for (i = 0; i < EQEmu::profile::BANDOLIERS_SIZE; i++) { + for (i = 0; i < EQ::profile::BANDOLIERS_SIZE; i++) { pp->bandoliers[i].Name[0] = '\0'; - for (int si = 0; si < EQEmu::profile::BANDOLIER_ITEM_COUNT; si++) { + for (int si = 0; si < EQ::profile::BANDOLIER_ITEM_COUNT; si++) { pp->bandoliers[i].Items[si].ID = 0; pp->bandoliers[i].Items[si].Icon = 0; pp->bandoliers[i].Items[si].Name[0] = '\0'; @@ -1421,7 +1421,7 @@ bool ZoneDatabase::LoadCharacterBandolier(uint32 character_id, PlayerProfile_Str i = atoi(row[r]); /* Bandolier ID */ r++; si = atoi(row[r]); /* Bandolier Slot */ r++; - const EQEmu::ItemData* item_data = database.GetItem(atoi(row[r])); + const EQ::ItemData* item_data = database.GetItem(atoi(row[r])); if (item_data) { pp->bandoliers[i].Items[si].ID = item_data->ID; r++; pp->bandoliers[i].Items[si].Icon = atoi(row[r]); r++; // Must use db value in case an Ornamentation is assigned @@ -1443,7 +1443,7 @@ bool ZoneDatabase::LoadCharacterTribute(uint32 character_id, PlayerProfile_Struc std::string query = StringFormat("SELECT `tier`, `tribute` FROM `character_tribute` WHERE `id` = %u", character_id); auto results = database.QueryDatabase(query); int i = 0; - for (i = 0; i < EQEmu::invtype::TRIBUTE_SIZE; i++){ + for (i = 0; i < EQ::invtype::TRIBUTE_SIZE; i++){ pp->tributes[i].tribute = 0xFFFFFFFF; pp->tributes[i].tier = 0; } @@ -1462,10 +1462,10 @@ bool ZoneDatabase::LoadCharacterPotions(uint32 character_id, PlayerProfile_Struc { std::string query = StringFormat("SELECT `potion_id`, `item_id`, `icon` FROM `character_potionbelt` WHERE `id` = %u LIMIT %u", - character_id, EQEmu::profile::POTION_BELT_SIZE); + character_id, EQ::profile::POTION_BELT_SIZE); auto results = database.QueryDatabase(query); int i = 0; - for (i = 0; i < EQEmu::profile::POTION_BELT_SIZE; i++) { + for (i = 0; i < EQ::profile::POTION_BELT_SIZE; i++) { pp->potionbelt.Items[i].Icon = 0; pp->potionbelt.Items[i].ID = 0; pp->potionbelt.Items[i].Name[0] = '\0'; @@ -1473,7 +1473,7 @@ bool ZoneDatabase::LoadCharacterPotions(uint32 character_id, PlayerProfile_Struc for (auto row = results.begin(); row != results.end(); ++row) { i = atoi(row[0]); - const EQEmu::ItemData *item_data = database.GetItem(atoi(row[1])); + const EQ::ItemData *item_data = database.GetItem(atoi(row[1])); if (!item_data) continue; pp->potionbelt.Items[i].ID = item_data->ID; @@ -1562,7 +1562,7 @@ bool ZoneDatabase::SaveCharacterTribute(uint32 character_id, PlayerProfile_Struc std::string query = StringFormat("DELETE FROM `character_tribute` WHERE `id` = %u", character_id); QueryDatabase(query); /* Save Tributes only if we have values... */ - for (int i = 0; i < EQEmu::invtype::TRIBUTE_SIZE; i++){ + for (int i = 0; i < EQ::invtype::TRIBUTE_SIZE; i++){ if (pp->tributes[i].tribute >= 0 && pp->tributes[i].tribute != TRIBUTE_NONE){ std::string query = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); QueryDatabase(query); @@ -2641,7 +2641,7 @@ const NPCType *ZoneDatabase::LoadNPCTypesData(uint32 npc_type_id, bool bulk_load else { auto armorTint_row = armortint_results.begin(); - for (int index = EQEmu::textures::textureBegin; index <= EQEmu::textures::LastTexture; index++) { + for (int index = EQ::textures::textureBegin; index <= EQ::textures::LastTexture; index++) { temp_npctype_data->armor_tint.Slot[index].Color = atoi(armorTint_row[index * 3]) << 16; temp_npctype_data->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 1]) << 8; temp_npctype_data->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 2]); @@ -2652,7 +2652,7 @@ const NPCType *ZoneDatabase::LoadNPCTypesData(uint32 npc_type_id, bool bulk_load } // Try loading npc_types tint fields if armor tint is 0 or query failed to get results if (armor_tint_id == 0) { - for (int index = EQEmu::textures::armorChest; index < EQEmu::textures::materialCount; index++) { + for (int index = EQ::textures::armorChest; index < EQ::textures::materialCount; index++) { temp_npctype_data->armor_tint.Slot[index].Color = temp_npctype_data->armor_tint.Slot[0].Color; // odd way to 'zero-out' the array... } } @@ -2878,7 +2878,7 @@ const NPCType* ZoneDatabase::GetMercType(uint32 id, uint16 raceid, uint32 client tmpNPCType->armor_tint.Slot[0].Color |= (tmpNPCType->armor_tint.Slot[0].Color) ? (0xFF << 24) : 0; if (armor_tint_id == 0) - for (int index = EQEmu::textures::armorChest; index <= EQEmu::textures::LastTexture; index++) + for (int index = EQ::textures::armorChest; index <= EQ::textures::LastTexture; index++) tmpNPCType->armor_tint.Slot[index].Color = tmpNPCType->armor_tint.Slot[0].Color; else if (tmpNPCType->armor_tint.Slot[0].Color == 0) { std::string armorTint_query = StringFormat("SELECT red1h, grn1h, blu1h, " @@ -2898,7 +2898,7 @@ const NPCType* ZoneDatabase::GetMercType(uint32 id, uint16 raceid, uint32 client else { auto armorTint_row = results.begin(); - for (int index = EQEmu::textures::textureBegin; index <= EQEmu::textures::LastTexture; index++) { + for (int index = EQ::textures::textureBegin; index <= EQ::textures::LastTexture; index++) { tmpNPCType->armor_tint.Slot[index].Color = atoi(armorTint_row[index * 3]) << 16; tmpNPCType->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 1]) << 8; tmpNPCType->armor_tint.Slot[index].Color |= atoi(armorTint_row[index * 3 + 2]); @@ -3257,7 +3257,7 @@ void ZoneDatabase::LoadMercEquipment(Merc *merc) { int itemCount = 0; for(auto row = results.begin(); row != results.end(); ++row) { - if (itemCount == EQEmu::invslot::EQUIPMENT_COUNT) + if (itemCount == EQ::invslot::EQUIPMENT_COUNT) break; if(atoi(row[0]) == 0) @@ -3396,7 +3396,7 @@ void ZoneDatabase::RefreshGroupFromDB(Client *client){ client->QueuePacket(outapp); safe_delete(outapp); - if (client->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) { + if (client->ClientVersion() >= EQ::versions::ClientVersion::SoD) { group->NotifyMainTank(client, 1); group->NotifyPuller(client, 1); } @@ -3698,7 +3698,7 @@ void ZoneDatabase::LoadBuffs(Client *client) } // We load up to the most our client supports - max_slots = EQEmu::spells::StaticLookup(client->ClientVersion())->LongBuffs; + max_slots = EQ::spells::StaticLookup(client->ClientVersion())->LongBuffs; for (int index = 0; index < max_slots; ++index) { if (!IsValidSpell(buffs[index].spellid)) continue; @@ -3807,7 +3807,7 @@ void ZoneDatabase::SavePetInfo(Client *client) query.clear(); // pet inventory! - for (int index = EQEmu::invslot::EQUIPMENT_BEGIN; index <= EQEmu::invslot::EQUIPMENT_END; index++) { + for (int index = EQ::invslot::EQUIPMENT_BEGIN; index <= EQ::invslot::EQUIPMENT_END; index++) { if (!petinfo->Items[index]) continue; @@ -3939,7 +3939,7 @@ void ZoneDatabase::LoadPetInfo(Client *client) continue; int slot = atoi(row[1]); - if (slot < EQEmu::invslot::EQUIPMENT_BEGIN || slot > EQEmu::invslot::EQUIPMENT_END) + if (slot < EQ::invslot::EQUIPMENT_BEGIN || slot > EQ::invslot::EQUIPMENT_END) continue; pi->Items[slot] = atoul(row[2]); diff --git a/zone/zonedb.h b/zone/zonedb.h index b1d88539d..366762fba 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -31,7 +31,7 @@ struct PlayerCorpse_Struct; struct ZonePoint; struct npcDecayTimes_Struct; -namespace EQEmu +namespace EQ { class ItemInstance; } @@ -106,7 +106,7 @@ struct DBnpcspellseffects_Struct { }; struct DBTradeskillRecipe_Struct { - EQEmu::skills::SkillType tradeskill; + EQ::skills::SkillType tradeskill; int16 skill_needed; uint16 trivial; bool nofail; @@ -153,7 +153,7 @@ struct PetInfo { uint32 Mana; float size; SpellBuff_Struct Buffs[PET_BUFF_COUNT]; - uint32 Items[EQEmu::invslot::EQUIPMENT_COUNT]; + uint32 Items[EQ::invslot::EQUIPMENT_COUNT]; char Name[64]; }; @@ -251,11 +251,11 @@ public: virtual ~ZoneDatabase(); /* Objects and World Containers */ - void LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* container); - void SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQEmu::ItemInstance* container); + void LoadWorldContainer(uint32 parentid, EQ::ItemInstance* container); + void SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQ::ItemInstance* container); void DeleteWorldContainer(uint32 parent_id,uint32 zone_id); - uint32 AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst); - void UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst); + uint32 AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQ::ItemInstance* inst); + void UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQ::ItemInstance* inst); void DeleteObject(uint32 id); Ground_Spawns* LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs); @@ -266,7 +266,7 @@ public: void DeleteTraderItem(uint32 char_id); void DeleteTraderItem(uint32 char_id,uint16 slot_id); - EQEmu::ItemInstance* LoadSingleTraderItem(uint32 char_id, int uniqueid); + EQ::ItemInstance* LoadSingleTraderItem(uint32 char_id, int uniqueid); Trader_Struct* LoadTraderItem(uint32 char_id); TraderCharges_Struct* LoadTraderItemWithCharges(uint32 char_id); @@ -488,7 +488,7 @@ public: void DeleteMerchantTemp(uint32 npcid, uint32 slot); /* Tradeskills */ - bool GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec); + bool GetTradeRecipe(const EQ::ItemInstance* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec); bool GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec); uint32 GetZoneForage(uint32 ZoneID, uint8 skill); /* for foraging */ uint32 GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, uint8 &npc_chance); diff --git a/zone/zonedump.h b/zone/zonedump.h index 0a1bcd07d..a30ec9f5f 100644 --- a/zone/zonedump.h +++ b/zone/zonedump.h @@ -86,7 +86,7 @@ struct NPCType uint32 drakkin_heritage; uint32 drakkin_tattoo; uint32 drakkin_details; - EQEmu::TintProfile armor_tint; + EQ::TintProfile armor_tint; uint32 min_dmg; uint32 max_dmg; uint32 charm_ac; @@ -185,7 +185,7 @@ struct PlayerCorpse_Struct { uint32 silver; uint32 gold; uint32 plat; - EQEmu::TintProfile item_tint; + EQ::TintProfile item_tint; uint8 haircolor; uint8 beardcolor; uint8 eyecolor1; diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 8eaa05c5a..7a04cfeae 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -561,7 +561,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z if (entity == 0) { Message(Chat::Red, "Error: OP_EndLootRequest: Corpse not found (ent = 0)"); - if (ClientVersion() >= EQEmu::versions::ClientVersion::SoD) + if (ClientVersion() >= EQ::versions::ClientVersion::SoD) Corpse::SendEndLootErrorPacket(this); else Corpse::SendLootReqErrorPacket(this); @@ -588,7 +588,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z // If we are SoF and later and are respawning from hover, we want the real zone ID, else zero to use the old hack. // if(zone->GetZoneID() == zoneID) { - if ((ClientVersionBit() & EQEmu::versions::maskSoFAndLater) && (!RuleB(Character, RespawnFromHover) || !IsHoveringForRespawn())) + if ((ClientVersionBit() & EQ::versions::maskSoFAndLater) && (!RuleB(Character, RespawnFromHover) || !IsHoveringForRespawn())) gmg->bind_zone_id = 0; else gmg->bind_zone_id = zoneID; From c33090469507432ba78074082d813be697769076 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 17 May 2020 19:10:12 -0700 Subject: [PATCH 157/272] Fix for broken tests --- tests/data_verification_test.h | 40 +++++++++++++------------- tests/fixed_memory_test.h | 46 +++++++++++++++--------------- tests/fixed_memory_variable_test.h | 16 +++++------ tests/ipc_mutex_test.h | 8 +++--- tests/memory_mapped_file_test.h | 4 +-- tests/skills_util_test.h | 8 +++--- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/tests/data_verification_test.h b/tests/data_verification_test.h index b9eb210fa..5053b922a 100644 --- a/tests/data_verification_test.h +++ b/tests/data_verification_test.h @@ -40,13 +40,13 @@ public: float value_f = 500.0f; int value_i = 500; - float vf1 = EQEmu::Clamp(value_f, 0.0f, 1000.0f); - float vf2 = EQEmu::Clamp(value_f, 0.0f, 250.0f); - float vf3 = EQEmu::Clamp(value_f, 750.0f, 1000.0f); + float vf1 = EQ::Clamp(value_f, 0.0f, 1000.0f); + float vf2 = EQ::Clamp(value_f, 0.0f, 250.0f); + float vf3 = EQ::Clamp(value_f, 750.0f, 1000.0f); - int vi1 = EQEmu::Clamp(value_i, 0, 1000); - int vi2 = EQEmu::Clamp(value_i, 0, 250); - int vi3 = EQEmu::Clamp(value_i, 750, 1000); + int vi1 = EQ::Clamp(value_i, 0, 1000); + int vi2 = EQ::Clamp(value_i, 0, 250); + int vi3 = EQ::Clamp(value_i, 750, 1000); TEST_ASSERT_EQUALS(vf1, 500.0f); TEST_ASSERT_EQUALS(vf2, 250.0f); @@ -61,11 +61,11 @@ public: float value_f = 500.0f; int value_i = 500; - float vf1 = EQEmu::ClampUpper(value_f, 1000.0f); - float vf2 = EQEmu::ClampUpper(value_f, 250.0f); + float vf1 = EQ::ClampUpper(value_f, 1000.0f); + float vf2 = EQ::ClampUpper(value_f, 250.0f); - int vi1 = EQEmu::ClampUpper(value_i, 1000); - int vi2 = EQEmu::ClampUpper(value_i, 250); + int vi1 = EQ::ClampUpper(value_i, 1000); + int vi2 = EQ::ClampUpper(value_i, 250); TEST_ASSERT_EQUALS(vf1, 500.0f); TEST_ASSERT_EQUALS(vf2, 250.0f); @@ -78,11 +78,11 @@ public: float value_f = 500.0f; int value_i = 500; - float vf1 = EQEmu::ClampLower(value_f, 0.0f); - float vf2 = EQEmu::ClampLower(value_f, 750.0f); + float vf1 = EQ::ClampLower(value_f, 0.0f); + float vf2 = EQ::ClampLower(value_f, 750.0f); - int vi1 = EQEmu::ClampLower(value_i, 0); - int vi2 = EQEmu::ClampLower(value_i, 750); + int vi1 = EQ::ClampLower(value_i, 0); + int vi2 = EQ::ClampLower(value_i, 750); TEST_ASSERT_EQUALS(vf1, 500.0f); TEST_ASSERT_EQUALS(vf2, 750.0f); @@ -95,13 +95,13 @@ public: float value_f = 500.0f; int value_i = 500; - TEST_ASSERT(EQEmu::ValueWithin(value_f, 0.0f, 1000.0f)); - TEST_ASSERT(!EQEmu::ValueWithin(value_f, 0.0f, 400.0f)); - TEST_ASSERT(!EQEmu::ValueWithin(value_f, 600.0f, 900.0f)); + TEST_ASSERT(EQ::ValueWithin(value_f, 0.0f, 1000.0f)); + TEST_ASSERT(!EQ::ValueWithin(value_f, 0.0f, 400.0f)); + TEST_ASSERT(!EQ::ValueWithin(value_f, 600.0f, 900.0f)); - TEST_ASSERT(EQEmu::ValueWithin(value_i, 0, 1000)); - TEST_ASSERT(!EQEmu::ValueWithin(value_i, 0, 400)); - TEST_ASSERT(!EQEmu::ValueWithin(value_i, 600, 900)); + TEST_ASSERT(EQ::ValueWithin(value_i, 0, 1000)); + TEST_ASSERT(!EQ::ValueWithin(value_i, 0, 400)); + TEST_ASSERT(!EQ::ValueWithin(value_i, 600, 900)); } }; diff --git a/tests/fixed_memory_test.h b/tests/fixed_memory_test.h index 055a85d79..faddc963f 100644 --- a/tests/fixed_memory_test.h +++ b/tests/fixed_memory_test.h @@ -27,7 +27,7 @@ class FixedMemoryHashTest : public Test::Suite { typedef void(FixedMemoryHashTest::*TestFunction)(void); public: FixedMemoryHashTest() { - size_ = EQEmu::FixedMemoryHashSet::estimated_size(72000, 190000); + size_ = EQ::FixedMemoryHashSet::estimated_size(72000, 190000); data_ = new uint8[size_]; memset(data_, 0, size_); TEST_ADD(FixedMemoryHashTest::InitTest); @@ -49,7 +49,7 @@ public: private: void InitTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_, 72000, 190000); + EQ::FixedMemoryHashSet hash(data_, size_, 72000, 190000); TEST_ASSERT(!hash.exists(1001)); TEST_ASSERT(hash.size() == 0); TEST_ASSERT(hash.max_size() == 72000); @@ -57,7 +57,7 @@ public: } void LoadTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(!hash.exists(1001)); TEST_ASSERT(hash.size() == 0); TEST_ASSERT(hash.max_size() == 72000); @@ -65,8 +65,8 @@ public: } void InsertTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); - EQEmu::ItemData item; + EQ::FixedMemoryHashSet hash(data_, size_); + EQ::ItemData item; memset(&item, 0, sizeof(item)); strcpy(item.Name, "Iron Sword"); item.ID = 1001; @@ -79,20 +79,20 @@ public: } void RetrieveTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(hash.exists(1001)); TEST_ASSERT(hash.size() == 1); TEST_ASSERT(hash.max_size() == 72000); TEST_ASSERT(!hash.empty()); - EQEmu::ItemData item = hash[1001]; + EQ::ItemData item = hash[1001]; TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0); TEST_ASSERT(item.ID == 1001); } void OverwriteTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); - EQEmu::ItemData item; + EQ::FixedMemoryHashSet hash(data_, size_); + EQ::ItemData item; memset(&item, 0, sizeof(item)); strcpy(item.Name, "Steel Sword"); item.ID = 1001; @@ -105,20 +105,20 @@ public: } void OverwriteRetrieveTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(hash.exists(1001)); TEST_ASSERT(hash.size() == 1); TEST_ASSERT((hash.max_size() == 72000)); TEST_ASSERT(!hash.empty()); - EQEmu::ItemData item = hash[1001]; + EQ::ItemData item = hash[1001]; TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0); TEST_ASSERT(item.ID == 1001); } void InsertAgainTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); - EQEmu::ItemData item; + EQ::FixedMemoryHashSet hash(data_, size_); + EQ::ItemData item; memset(&item, 0, sizeof(item)); strcpy(item.Name, "Iron Sword"); item.ID = 1000; @@ -132,14 +132,14 @@ public: } void RetrieveAgainTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(hash.exists(1000)); TEST_ASSERT(hash.exists(1001)); TEST_ASSERT(hash.size() == 2); TEST_ASSERT(hash.max_size() == 72000); TEST_ASSERT(!hash.empty()); - EQEmu::ItemData item = hash[1000]; + EQ::ItemData item = hash[1000]; TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0); TEST_ASSERT(item.ID == 1000); @@ -149,8 +149,8 @@ public: } void InsertBeginTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); - EQEmu::ItemData item; + EQ::FixedMemoryHashSet hash(data_, size_); + EQ::ItemData item; memset(&item, 0, sizeof(item)); strcpy(item.Name, "Bronze Sword"); item.ID = 0; @@ -165,7 +165,7 @@ public: } void RetrieveBeginTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(hash.exists(1000)); TEST_ASSERT(hash.exists(1001)); TEST_ASSERT(hash.exists(0)); @@ -173,7 +173,7 @@ public: TEST_ASSERT(hash.max_size() == 72000); TEST_ASSERT(!hash.empty()); - EQEmu::ItemData item = hash[1000]; + EQ::ItemData item = hash[1000]; TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0); TEST_ASSERT(item.ID == 1000); @@ -187,8 +187,8 @@ public: } void InsertEndTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); - EQEmu::ItemData item; + EQ::FixedMemoryHashSet hash(data_, size_); + EQ::ItemData item; memset(&item, 0, sizeof(item)); strcpy(item.Name, "Jade Sword"); item.ID = 190000; @@ -204,7 +204,7 @@ public: } void RetrieveEndTest() { - EQEmu::FixedMemoryHashSet hash(data_, size_); + EQ::FixedMemoryHashSet hash(data_, size_); TEST_ASSERT(hash.exists(1000)); TEST_ASSERT(hash.exists(1001)); TEST_ASSERT(hash.exists(0)); @@ -213,7 +213,7 @@ public: TEST_ASSERT(hash.max_size() == 72000); TEST_ASSERT(!hash.empty()); - EQEmu::ItemData item = hash[1000]; + EQ::ItemData item = hash[1000]; TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0); TEST_ASSERT(item.ID == 1000); diff --git a/tests/fixed_memory_variable_test.h b/tests/fixed_memory_variable_test.h index a728093ef..4bb89e1b6 100644 --- a/tests/fixed_memory_variable_test.h +++ b/tests/fixed_memory_variable_test.h @@ -48,19 +48,19 @@ public: private: void InitTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_, 501); + EQ::FixedMemoryVariableHashSet hash(data_, size_, 501); TEST_ASSERT(!hash.exists(0)); TEST_ASSERT(!hash.exists(501)); } void LoadTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); TEST_ASSERT(!hash.exists(0)); TEST_ASSERT(!hash.exists(501)); } void InsertTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); test_struct test; memset(&test, 0, sizeof(test)); strcpy(test.name, "Bill D."); @@ -71,7 +71,7 @@ public: } void RetrieveTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); TEST_ASSERT(hash.exists(0)); TEST_ASSERT(!hash.exists(501)); @@ -80,7 +80,7 @@ public: } void InsertAgainTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); test_struct test; memset(&test, 0, sizeof(test)); strcpy(test.name, "Jimmy P."); @@ -91,7 +91,7 @@ public: } void RetrieveAgainTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); TEST_ASSERT(hash.exists(0)); TEST_ASSERT(hash.exists(501)); @@ -100,7 +100,7 @@ public: } void InsertAgainFailTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); test_struct test; memset(&test, 0, sizeof(test)); strcpy(test.name, "Tommy M."); @@ -115,7 +115,7 @@ public: } void RetrieveAgainFailTest() { - EQEmu::FixedMemoryVariableHashSet hash(data_, size_); + EQ::FixedMemoryVariableHashSet hash(data_, size_); TEST_ASSERT(hash.exists(0)); TEST_ASSERT(hash.exists(501)); TEST_ASSERT(!hash.exists(500)); diff --git a/tests/ipc_mutex_test.h b/tests/ipc_mutex_test.h index d465f869c..c4323d425 100644 --- a/tests/ipc_mutex_test.h +++ b/tests/ipc_mutex_test.h @@ -40,24 +40,24 @@ public: private: void LockMutexTest() { - EQEmu::IPCMutex mutex("TestMutex1"); + EQ::IPCMutex mutex("TestMutex1"); TEST_ASSERT(mutex.Lock()); TEST_ASSERT(mutex.Unlock()); } void UnlockMutexTest() { - EQEmu::IPCMutex mutex("TestMutex2"); + EQ::IPCMutex mutex("TestMutex2"); TEST_ASSERT(!mutex.Unlock()); } void DoubleLockMutexTest() { - EQEmu::IPCMutex mutex("TestMutex3"); + EQ::IPCMutex mutex("TestMutex3"); TEST_ASSERT(mutex.Lock()); TEST_ASSERT(!mutex.Lock()); } void DoubleUnlockMutexTest() { - EQEmu::IPCMutex mutex("TestMutex4"); + EQ::IPCMutex mutex("TestMutex4"); TEST_ASSERT(mutex.Lock()); TEST_ASSERT(mutex.Unlock()); TEST_ASSERT(!mutex.Unlock()); diff --git a/tests/memory_mapped_file_test.h b/tests/memory_mapped_file_test.h index 3ce61d44e..b23f6568d 100644 --- a/tests/memory_mapped_file_test.h +++ b/tests/memory_mapped_file_test.h @@ -35,7 +35,7 @@ public: private: void LoadAndZeroMMF() { - EQEmu::MemoryMappedFile mmf("testfile.txt", 512); + EQ::MemoryMappedFile mmf("testfile.txt", 512); mmf.ZeroFile(); TEST_ASSERT(mmf.Size() == 512); @@ -46,7 +46,7 @@ public: } void LoadExistingMMF() { - EQEmu::MemoryMappedFile mmf("testfile.txt"); + EQ::MemoryMappedFile mmf("testfile.txt"); TEST_ASSERT(mmf.Size() == 512); unsigned char *data = reinterpret_cast(mmf.Get()); diff --git a/tests/skills_util_test.h b/tests/skills_util_test.h index 478de4206..77616ea14 100644 --- a/tests/skills_util_test.h +++ b/tests/skills_util_test.h @@ -35,13 +35,13 @@ public: private: void IsTradeskill() { - TEST_ASSERT(EQEmu::skills::IsTradeskill(EQEmu::skills::SkillPottery)); - TEST_ASSERT(!EQEmu::skills::IsTradeskill(EQEmu::skills::SkillParry)); + TEST_ASSERT(EQ::skills::IsTradeskill(EQ::skills::SkillPottery)); + TEST_ASSERT(!EQ::skills::IsTradeskill(EQ::skills::SkillParry)); } void IsSpecializedSkill() { - TEST_ASSERT(EQEmu::skills::IsSpecializedSkill(EQEmu::skills::SkillSpecializeConjuration)); - TEST_ASSERT(!EQEmu::skills::IsSpecializedSkill(EQEmu::skills::SkillConjuration)) + TEST_ASSERT(EQ::skills::IsSpecializedSkill(EQ::skills::SkillSpecializeConjuration)); + TEST_ASSERT(!EQ::skills::IsSpecializedSkill(EQ::skills::SkillConjuration)) } }; From 4180ef58eff82a92f742b9a6fb056ff2e3c05b98 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Tue, 19 May 2020 00:58:19 -0500 Subject: [PATCH 158/272] Update eqemu_server.pl [skip ci] --- utils/scripts/eqemu_server.pl | 77 ++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index dde632489..90881c309 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -876,33 +876,41 @@ sub do_install_config_login_json sub fetch_utility_scripts { if ($OS eq "Windows") { - get_remote_file($install_repository_request_url . "t_database_backup.bat", "t_database_backup.bat"); - get_remote_file($install_repository_request_url . "t_start_server.bat", "t_start_server.bat"); - get_remote_file($install_repository_request_url . "t_server_update_binaries_no_bots.bat", - "t_server_update_binaries_no_bots.bat"); - get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", - "t_start_server_with_login_server.bat"); - get_remote_file($install_repository_request_url . "t_stop_server.bat", "t_stop_server.bat"); - get_remote_file($install_repository_request_url . "t_server_crash_report.pl", "t_server_crash_report.pl"); - get_remote_file($install_repository_request_url . "win_server_launcher.pl", "win_server_launcher.pl"); - get_remote_file($install_repository_request_url . "t_start_server_with_login_server.bat", - "t_start_server_with_login_server.bat"); + opendir(DIR, "bin/"); + my @files = grep(/\.exe$/, readdir(DIR)); + closedir(DIR); + + foreach my $file (@files) { + my $full_file = "bin/" . $file; + + if ($file=~/test|launch/i) { + next; + } + + print "Creating Symbolic Link for [$file] from [$full_file]\n"; + system("del start_$file >nul 2>&1"); + system("powershell.exe \"New-Item -ItemType SymbolicLink -Name 'start_$file' -Value '$full_file'\" >nul 2>&1"); + } + + get_remote_file($install_repository_request_url . "windows/t_database_backup.bat", "t_database_backup.bat"); + get_remote_file($install_repository_request_url . "windows/t_start_server.bat", "t_start_server.bat"); + get_remote_file($install_repository_request_url . "windows/t_server_update_binaries_no_bots.bat", + "t_server_update_binaries_no_bots.bat"); + get_remote_file($install_repository_request_url . "windows/t_start_server_with_login_server.bat", + "t_start_server_with_login_server.bat"); + get_remote_file($install_repository_request_url . "windows/t_stop_server.bat", "t_stop_server.bat"); + get_remote_file($install_repository_request_url . "windows/t_server_crash_report.pl", "t_server_crash_report.pl"); + get_remote_file($install_repository_request_url . "windows/win_server_launcher.pl", "win_server_launcher.pl"); + get_remote_file($install_repository_request_url . "windows/t_start_server_with_login_server.bat", + "t_start_server_with_login_server.bat"); get_remote_file( - $install_repository_request_url . "t_start_world.bat", - "t_start_world.bat" - ); - get_remote_file( - $install_repository_request_url . "t_start_zone.bat", - "t_start_zone.bat" - ); - get_remote_file( - $install_repository_request_url . "t_set_gm_account.bat", + $install_repository_request_url . "windows/t_set_gm_account.bat", "t_set_gm_account.bat" ); get_remote_file( - $install_repository_request_url . "t_start_shared_memory.bat", - "t_start_shared_memory.bat" + $install_repository_request_url . "windows/windows_server_readme.html", + "windows_server_readme.html" ); } else { @@ -1346,7 +1354,7 @@ sub get_remote_file # print "checking '" . $build_path . "'\n"; #::: If path does not exist, create the directory... if (!-d $build_path) { - print "[Copy] folder doesn't exist, creating '" . $build_path . "'\n"; + print "[Copy] folder doesn't exist, creating [" . $build_path . "]\n"; mkdir($build_path); } if (!$directory_indexr_path[$directory_index + 2] && $directory_indexr_path[$directory_index + 1]) { @@ -1566,7 +1574,8 @@ sub fetch_latest_windows_appveyor print "[Update] Fetching Latest Windows Binaries (unstable) from Appveyor... \n"; get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server-pglwk/artifacts/build_x64.zip", "updates_staged/build_x64.zip", - 1); + 1 + ); print "[Update] Fetched Latest Windows Binaries (unstable) from Appveyor... \n"; print "[Update] Extracting... --- \n"; @@ -1593,7 +1602,8 @@ sub fetch_latest_windows_binaries print "[Update] Fetching Latest Windows Binaries... \n"; get_remote_file($install_repository_request_url . "master_windows_build.zip", "updates_staged/master_windows_build.zip", - 1); + 1 + ); print "[Update] Fetched Latest Windows Binaries... \n"; print "[Update] Extracting... --- \n"; unzip('updates_staged/master_windows_build.zip', 'updates_staged/binaries/'); @@ -1733,7 +1743,8 @@ sub do_linux_login_server_setup rmtree('db_update'); get_remote_file($install_repository_request_url . "linux/login_opcodes.conf", $opcodes_path . "login_opcodes.conf"); - get_remote_file($install_repository_request_url . "linux/login_opcodes_sod.conf", $opcodes_path . "login_opcodes_sod.conf"); + get_remote_file($install_repository_request_url . "linux/login_opcodes_sod.conf", + $opcodes_path . "login_opcodes_sod.conf"); get_remote_file($install_repository_request_url . "linux/server_start_with_login.sh", "server_start_with_login.sh"); system("chmod 755 *.sh"); @@ -1756,11 +1767,11 @@ sub add_login_server_firewall_rules $val =~ s/Rule Name://g; if ($val =~ /EQEmu Loginserver/i && $val =~ /Titanium/i) { $has_loginserver_rules_titanium = 1; - print "[Install] Found existing rule :: " . trim($val) . "\n"; + print "[Install] Found existing rule [" . trim($val) . "]\n"; } if ($val =~ /EQEmu Loginserver/i && $val =~ /SOD/i) { $has_loginserver_rules_sod = 1; - print "[Install] Found existing rule :: " . trim($val) . "\n"; + print "[Install] Found existing rule [" . trim($val) . "]\n"; } } } @@ -1813,11 +1824,11 @@ sub check_windows_firewall_rules $val =~ s/Rule Name://g; if ($val =~ /EQEmu World/i) { $has_world_rules = 1; - print "[Install] Found existing rule :: " . trim($val) . "\n"; + print "[Install] Found existing rule [" . trim($val) . "]\n"; } if ($val =~ /EQEmu Zone/i) { $has_zone_rules = 1; - print "[Install] Found existing rule :: " . trim($val) . "\n"; + print "[Install] Found existing rule [" . trim($val) . "]\n"; } } } @@ -1967,7 +1978,7 @@ sub quest_files_fetch $backup_dest = "updates_backups/" . $time_stamp . "/" . $destination_file; print $directory_indexff . "\n"; - print "[Update] File Different :: '" . $destination_file . "'\n"; + print "[Update] File Different [" . $destination_file . "]\n"; print "[Update] Do you wish to update this Quest? '" . $destination_file . "' [Yes (Enter) - No (N)] \nA backup will be found in '" . $backup_dest . "'\n"; my $input = ; if ($input =~ /N/i) {} @@ -2031,7 +2042,7 @@ sub lua_modules_fetch if ($directory_indexff ne "") { $backup_dest = "updates_backups/" . $time_stamp . "/" . $destination_file; print $directory_indexff . "\n"; - print "[Update] File Different :: '" . $destination_file . "'\n"; + print "[Update] File Different [" . $destination_file . "]\n"; print "[Update] Do you wish to update this LUA Module? '" . $destination_file . "' [Yes (Enter) - No (N)] \nA backup will be found in '" . $backup_dest . "'\n"; my $input = ; if ($input =~ /N/i) {} @@ -2093,7 +2104,7 @@ sub plugins_fetch if ($directory_indexff ne "") { $backup_dest = "updates_backups/" . $time_stamp . "/" . $destination_file; print $directory_indexff . "\n"; - print "[Update] File Different :: '" . $destination_file . "'\n"; + print "[Update] File Different [" . $destination_file . "]\n"; print "[Update] Do you wish to update this Plugin? '" . $destination_file . "' [Yes (Enter) - No (N)] \nA backup will be found in '" . $backup_dest . "'\n"; my $input = ; if ($input =~ /N/i) {} From 852a8e1617d90779314aeaf9c48aa6e0444a5d3b Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Tue, 19 May 2020 01:17:02 -0500 Subject: [PATCH 159/272] Update eqemu_server.pl [skip ci] --- utils/scripts/eqemu_server.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 90881c309..e094e0cce 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -243,7 +243,7 @@ sub show_install_summary_info print " - server_status.sh Prints the status of the EQEmu Server processes\n"; } - print "[Configure] eqemu_config.xml Edit to change server settings and name\n"; + print "[Configure] eqemu_config.json Edit to change server settings and name\n"; analytics_insertion("install_complete", "null"); } @@ -1465,7 +1465,7 @@ sub read_eqemu_config_json sub aa_fetch { if (!$db) { - print "No database present, check your eqemu_config.xml for proper MySQL/MariaDB configuration...\n"; + print "No database present, check your eqemu_config.json for proper MySQL/MariaDB configuration...\n"; return; } @@ -2395,7 +2395,7 @@ sub run_database_check { if (!$db) { - print "No database present, check your eqemu_config.xml for proper MySQL/MariaDB configuration...\n"; + print "No database present, check your eqemu_config.json for proper MySQL/MariaDB configuration...\n"; return; } From 4e8764b6b96fefcb4f0b46c389bf444a1062e0bf Mon Sep 17 00:00:00 2001 From: Noudess Date: Wed, 20 May 2020 16:08:42 -0400 Subject: [PATCH 160/272] Repair aggro so CallsForHelp are completed before mob charges. --- zone/mob_ai.cpp | 2 +- zone/special_attacks.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index f37d70292..426f462d4 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1319,7 +1319,7 @@ void Mob::AI_Process() { FaceTarget(); } } - else if (AI_movement_timer->Check() && target) { + else if (AI_movement_timer->Check() && target && CastToNPC()->GetCombatEvent()) { if (!IsRooted()) { LogAI("Pursuing [{}] while engaged", target->GetName()); RunTo(target->GetX(), target->GetY(), target->GetZ()); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 831580e8f..717bc4fbf 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -192,7 +192,7 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas DoAttack(who, my_hit); - who->AddToHateList(this, hate, 0, false); + who->AddToHateList(this, hate, 0); if (my_hit.damage_done > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skill && IsValidSpell(aabonuses.SkillAttackProc[2])) { float chance = aabonuses.SkillAttackProc[0] / 1000.0f; @@ -870,7 +870,7 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, co } if (IsClient() && !CastToClient()->GetFeigned()) - other->AddToHateList(this, hate, 0, false); + other->AddToHateList(this, hate, 0); other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillArchery); @@ -1200,9 +1200,9 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha if (TotalDmg > 0) { TotalDmg += TotalDmg * damage_mod / 100; - other->AddToHateList(this, TotalDmg, 0, false); + other->AddToHateList(this, TotalDmg, 0); } else { - other->AddToHateList(this, 0, 0, false); + other->AddToHateList(this, 0, 0); } other->Damage(this, TotalDmg, SPELL_UNKNOWN, skillInUse); @@ -1384,7 +1384,7 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c } if (IsClient() && !CastToClient()->GetFeigned()) - other->AddToHateList(this, WDmg, 0, false); + other->AddToHateList(this, WDmg, 0); other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillThrowing); @@ -2158,7 +2158,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQ::skills::Sk CanSkillProc = false; // Disable skill procs } - other->AddToHateList(this, hate, 0, false); + other->AddToHateList(this, hate, 0); if (damage > 0 && aabonuses.SkillAttackProc[0] && aabonuses.SkillAttackProc[1] == skillinuse && IsValidSpell(aabonuses.SkillAttackProc[2])) { float chance = aabonuses.SkillAttackProc[0] / 1000.0f; From 2c2c09531f095d9dea8738da126783415ae1cfbb Mon Sep 17 00:00:00 2001 From: Ali Date: Thu, 21 May 2020 14:44:07 +0300 Subject: [PATCH 161/272] [ci skip] Revert back to using wget.exe for windows installs --- utils/scripts/eqemu_server.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index e094e0cce..d3081d580 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -1371,11 +1371,10 @@ sub get_remote_file $wget = `wget -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; } elsif ($OS eq "Windows") { - $wget = - `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri $request_url -OutFile $destination_file"` + $wget = `bin\\wget.exe -N --no-cache --cache=no --no-check-certificate --quiet -O $destination_file $request_url`; } print "[Download] Saved [" . $destination_file . "] from [" . $request_url . "]\n" if !$silent_download; - if (($OS eq "Linux" && $wget =~ /unable to resolve/i) || ($OS eq "Windows" && $wget =~ /404/i || $wget =~ /could not be resolved/i)) { + if ($wget =~ /unable to resolve/i) { print "Error, no connection or failed request...\n\n"; #die; } From b585d9b062e4c6569432da75d1cb97b2f502697f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 23 May 2020 16:29:04 -0500 Subject: [PATCH 162/272] Use wget again for windows [skip ci] --- utils/scripts/eqemu_server.pl | 48 ++++++++++------------------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index d3081d580..86b108ecc 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -84,6 +84,7 @@ if (-d "bin") { ############################################# # run routines ############################################# +get_windows_wget(); check_xml_to_json_conversion() if $ARGV[0] eq "convert_xml"; do_self_update_check_routine() if !$skip_self_update_check; get_perl_version(); @@ -699,6 +700,16 @@ sub get_perl_version no warnings; } +sub get_windows_wget { + if (!-e "wget.exe" && $OS eq "Windows") { + eval "use LWP::Simple qw(getstore);"; + if (!-d "bin") { + mkdir("bin"); + } + getstore("https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/windows/wget.exe", "bin/wget.exe"); + } +} + sub do_self_update_check_routine { @@ -1048,10 +1059,6 @@ sub show_menu_prompt fetch_latest_windows_appveyor(); $dc = 1; } - elsif ($input eq "windows_server_download_bots") { - fetch_latest_windows_binaries_bots(); - $dc = 1; - } elsif ($input eq "windows_server_latest_bots") { fetch_latest_windows_appveyor_bots(); $dc = 1; @@ -1626,13 +1633,13 @@ sub fetch_latest_windows_binaries sub fetch_latest_windows_appveyor_bots { print "[Update] Fetching Latest Windows Binaries with Bots (unstable) from Appveyor... \n"; - get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server/artifacts/eqemu-x86-bots.zip", - "updates_staged/eqemu-x86-bots.zip", + get_remote_file("https://ci.appveyor.com/api/projects/KimLS/server-87crp/artifacts/build_x64.zip", + "updates_staged/eqemu-x64-bots.zip", 1); print "[Update] Fetched Latest Windows Binaries (unstable) from Appveyor... \n"; print "[Update] Extracting... --- \n"; - unzip('updates_staged/eqemu-x86-bots.zip', 'updates_staged/binaries/'); + unzip('updates_staged/eqemu-x64-bots.zip', 'updates_staged/binaries/'); my @files; my $start_dir = "updates_staged/binaries"; find( @@ -1650,33 +1657,6 @@ sub fetch_latest_windows_appveyor_bots rmtree('updates_staged'); } -sub fetch_latest_windows_binaries_bots -{ - print "[Update] Fetching Latest Windows Binaries with Bots...\n"; - get_remote_file($install_repository_request_url . "master_windows_build_bots.zip", - "updates_staged/master_windows_build_bots.zip", - 1); - - print "[Update] Fetched Latest Windows Binaries with Bots...\n"; - print "[Update] Extracting...\n"; - unzip('updates_staged/master_windows_build_bots.zip', 'updates_staged/binaries/'); - my @files; - my $start_dir = "updates_staged/binaries"; - find( - sub {push @files, $File::Find::name unless -d;}, - $start_dir - ); - for my $file (@files) { - $destination_file = $file; - $destination_file =~ s/updates_staged\/binaries\///g; - print "[Install] Installing [" . $bin_dir . $destination_file . "]\n"; - copy_file($file, $bin_dir . $destination_file); - } - print "[Update] Done...\n"; - - rmtree('updates_staged'); -} - sub do_windows_login_server_setup { print "[Install] Pulling down Loginserver database tables...\n"; From 86ef1b12e2c6990c40a52aba8567aeba953e1b3a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 23 May 2020 16:50:09 -0500 Subject: [PATCH 163/272] Strawberry Perl OOB has issue with getstore so lets use something else [skip ci] --- utils/scripts/eqemu_server.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 86b108ecc..2b9bd4a7a 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -701,12 +701,11 @@ sub get_perl_version } sub get_windows_wget { - if (!-e "wget.exe" && $OS eq "Windows") { - eval "use LWP::Simple qw(getstore);"; + if (!-e "bin/wget.exe" && $OS eq "Windows") { if (!-d "bin") { mkdir("bin"); } - getstore("https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/windows/wget.exe", "bin/wget.exe"); + `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/windows/wget.exe -OutFile bin/wget.exe"` } } From 03a42543976a9b2483544bf46e080015d66a5c8a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 23 May 2020 22:34:32 -0500 Subject: [PATCH 164/272] Post merge fix [skip ci] --- world/client.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/world/client.h b/world/client.h index 379272b86..d05655d82 100644 --- a/world/client.h +++ b/world/client.h @@ -1,5 +1,5 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) +/* EQ::: Everquest Server Emulator + Copyright (C) 2001-2002 EQ:: Development Team (http://EQ::.org) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -75,7 +75,7 @@ public: bool StoreCharacter( uint32 account_id, PlayerProfile_Struct *p_player_profile_struct, - EQEmu::InventoryProfile *p_inventory_profile + EQ::::InventoryProfile *p_inventory_profile ); private: From 56c4eb280f26a36e8c222969176f4ef8592a3d0a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 23 May 2020 22:41:59 -0500 Subject: [PATCH 165/272] Fix post merge issues --- common/database.cpp | 55 ------------------------------------------ common/database.h | 1 - shared_memory/main.cpp | 2 +- world/client.cpp | 18 +++++++------- world/client.h | 2 +- world/worlddb.h | 2 +- zone/command.cpp | 2 +- zone/tradeskills.cpp | 4 +-- 8 files changed, 15 insertions(+), 71 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index 702e9a7f3..ff52a196e 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -750,61 +750,6 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe return true; } -/* This only for new Character creation storing */ -bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQ::InventoryProfile* inv) { - uint32 charid = 0; - char zone[50]; - float x, y, z; - charid = GetCharacterID(pp->name); - - if(!charid) { - LogError("StoreCharacter: no character id"); - return false; - } - - const char *zname = GetZoneName(pp->zone_id); - if(zname == nullptr) { - /* Zone not in the DB, something to prevent crash... */ - strn0cpy(zone, "qeynos", 49); - pp->zone_id = 1; - } - else{ strn0cpy(zone, zname, 49); } - - x = pp->x; - y = pp->y; - z = pp->z; - - /* Saves Player Profile Data */ - SaveCharacterCreate(charid, account_id, pp); - - /* Insert starting inventory... */ - std::string invquery; - for (int16 i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invbag::BANK_BAGS_END;) { - const EQ::ItemInstance* newinv = inv->GetItem(i); - if (newinv) { - invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)", - charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor()); - - auto results = QueryDatabase(invquery); - } - - if (i == EQ::invslot::slotCursor) { - i = EQ::invbag::GENERAL_BAGS_BEGIN; - continue; - } - else if (i == EQ::invbag::CURSOR_BAG_END) { - i = EQ::invslot::BANK_BEGIN; - continue; - } - else if (i == EQ::invslot::BANK_END) { - i = EQ::invbag::BANK_BAGS_BEGIN; - continue; - } - i++; - } - return true; -} - uint32 Database::GetCharacterID(const char *name) { std::string query = StringFormat("SELECT `id` FROM `character_data` WHERE `name` = '%s'", name); auto results = QueryDatabase(query); diff --git a/common/database.h b/common/database.h index 421777c9d..a7af5fc23 100644 --- a/common/database.h +++ b/common/database.h @@ -114,7 +114,6 @@ public: bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp); bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked); bool SetMQDetectionFlag(const char* accountname, const char* charactername, const char* hacked, const char* zone); - bool StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQ::InventoryProfile* inv); bool UpdateName(const char* oldname, const char* newname); /* General Information Queries */ diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index d9d19205b..7cf54f946 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -161,7 +161,7 @@ int main(int argc, char **argv) } } - EQEmu::InitializeDynamicLookups(); + EQ::InitializeDynamicLookups(); LogInfo("Initialized dynamic dictionary entries"); } diff --git a/world/client.cpp b/world/client.cpp index 8be1f2982..684020137 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -2078,7 +2078,7 @@ void Client::SetClassLanguages(PlayerProfile_Struct *pp) bool Client::StoreCharacter( uint32 account_id, PlayerProfile_Struct *p_player_profile_struct, - EQEmu::InventoryProfile *p_inventory_profile + EQ::InventoryProfile *p_inventory_profile ) { uint32 character_id = 0; @@ -2103,8 +2103,8 @@ bool Client::StoreCharacter( database.SaveCharacterCreate(character_id, account_id, p_player_profile_struct); std::string invquery; - for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) { - const EQEmu::ItemInstance *new_inventory_item = p_inventory_profile->GetItem(i); + for (int16 i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invbag::BANK_BAGS_END;) { + const EQ::ItemInstance *new_inventory_item = p_inventory_profile->GetItem(i); if (new_inventory_item) { invquery = StringFormat( "INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)", @@ -2118,16 +2118,16 @@ bool Client::StoreCharacter( auto results = database.QueryDatabase(invquery); } - if (i == EQEmu::invslot::slotCursor) { - i = EQEmu::invbag::GENERAL_BAGS_BEGIN; + if (i == EQ::invslot::slotCursor) { + i = EQ::invbag::GENERAL_BAGS_BEGIN; continue; } - else if (i == EQEmu::invbag::CURSOR_BAG_END) { - i = EQEmu::invslot::BANK_BEGIN; + else if (i == EQ::invbag::CURSOR_BAG_END) { + i = EQ::invslot::BANK_BEGIN; continue; } - else if (i == EQEmu::invslot::BANK_END) { - i = EQEmu::invbag::BANK_BAGS_BEGIN; + else if (i == EQ::invslot::BANK_END) { + i = EQ::invbag::BANK_BAGS_BEGIN; continue; } i++; diff --git a/world/client.h b/world/client.h index d05655d82..aca958d6f 100644 --- a/world/client.h +++ b/world/client.h @@ -75,7 +75,7 @@ public: bool StoreCharacter( uint32 account_id, PlayerProfile_Struct *p_player_profile_struct, - EQ::::InventoryProfile *p_inventory_profile + EQ::InventoryProfile *p_inventory_profile ); private: diff --git a/world/worlddb.h b/world/worlddb.h index 592e24478..42fbf96b6 100644 --- a/world/worlddb.h +++ b/world/worlddb.h @@ -42,7 +42,7 @@ public: bool StoreCharacter( uint32 account_id, PlayerProfile_Struct *p_player_profile_struct, - EQEmu::InventoryProfile *p_inventory_profile + EQ::InventoryProfile *p_inventory_profile ); private: diff --git a/zone/command.cpp b/zone/command.cpp index 14fdce983..41f691b6d 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -7438,7 +7438,7 @@ void command_itemsearch(Client *c, const Seperator *sep) std::string saylink_commands; for (auto &amount : amounts) { - saylink_commands += EQEmu::SayLinkEngine::GenerateQuestSaylink( + saylink_commands += EQ::SayLinkEngine::GenerateQuestSaylink( "#si " + std::to_string(item->ID) + " " + amount, false, "[" + amount + "] " diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index b3e59b9b4..307560cf4 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -311,7 +311,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob } container = inst; - if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeTransformationmold) { + if (container->GetItem() && container->GetItem()->BagType == EQ::item::BagTypeTransformationmold) { const EQ::ItemInstance *inst = container->GetItem(0); bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation); if (inst && EQ::ItemInstance::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) { @@ -328,7 +328,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), - EQEmu::invslot::slotCursor, + EQ::invslot::slotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2) ); From 712df6c35abdec342d9bf7ffcd24aeb7408c57ce Mon Sep 17 00:00:00 2001 From: KimLS Date: Sat, 23 May 2020 23:19:54 -0700 Subject: [PATCH 166/272] Fix compile issue for latest vc compiler --- common/util/uuid.cpp | 1 + common/util/uuid.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/common/util/uuid.cpp b/common/util/uuid.cpp index 633ffebaf..7acd1517f 100644 --- a/common/util/uuid.cpp +++ b/common/util/uuid.cpp @@ -1,5 +1,6 @@ #include "uuid.h" +#include #include #ifdef _WIN32 diff --git a/common/util/uuid.h b/common/util/uuid.h index 3b37fc2d2..d1e49a0e7 100644 --- a/common/util/uuid.h +++ b/common/util/uuid.h @@ -2,7 +2,7 @@ #include #include -#include +#include namespace EQ { @@ -32,4 +32,4 @@ namespace EQ std::vector m_bytes; }; } -} \ No newline at end of file +} From e8a05ec680c2498a59521456c19f879c5e1a390b Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Sun, 24 May 2020 01:32:50 -0500 Subject: [PATCH 167/272] Fixes instance deletion issue https://github.com/EQEmu/Server/issues/1069 --- common/database_instances.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 617a2baf6..945fca078 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -514,8 +514,10 @@ void Database::BuryCorpsesInInstance(uint16 instance_id) { void Database::DeleteInstance(uint16 instance_id) { - std::string query; + + query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); + QueryDatabase(query) query = StringFormat("DELETE FROM instance_list_player WHERE id=%u", instance_id); QueryDatabase(query); From e474df2b126fad8951ba4c9e771f24e1937a43f7 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 01:36:17 -0500 Subject: [PATCH 168/272] Tweak content flag filtering [skip ci] --- .../repositories/criteria/content_filter_criteria.h | 13 ++++--------- zone/main.cpp | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 5a0770fe5..697d72f71 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -54,22 +54,17 @@ namespace ContentFilterCriteria { ); std::vector flags = content_service.GetContentFlags(); - - for (auto &flag: flags) { - flag = "'" + flag + "'"; - } - - std::string flags_in_filter; + std::string flags_in_filter; if (!flags.empty()) { flags_in_filter = fmt::format( - " OR {}content_flags IN ({})", + " OR CONCAT(',', {}content_flags, ',') REGEXP ',({}),' ", table_prefix, - implode(", ", flags) + implode("|", flags) ); } criteria += fmt::format( - " AND ({}content_flags IS NULL{})", + " AND ({}content_flags IS NULL{}) ", table_prefix, flags_in_filter ); diff --git a/zone/main.cpp b/zone/main.cpp index 64bdece65..85da66f9e 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -417,7 +417,7 @@ int main(int argc, char** argv) { set_content_flags.push_back(flags.flag_name); LogInfo( - "Enabling content-flag [{}]", + "Enabled content flag [{}]", flags.flag_name ); } From e82f0254b07b4bafca7d34f6606dd49491c09ad6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 02:24:38 -0500 Subject: [PATCH 169/272] Add content_flags_disabled field for additional filtering --- .../criteria/content_filter_criteria.h | 18 ++++++++++--- .../2020_04_11_expansions_content_filters.sql | 19 ++++++++++++++ zone/zone.cpp | 26 +++++++++++++++++-- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index 697d72f71..f47936302 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -54,19 +54,31 @@ namespace ContentFilterCriteria { ); std::vector flags = content_service.GetContentFlags(); - std::string flags_in_filter; + std::string flags_in_filter_enabled; + std::string flags_in_filter_disabled; if (!flags.empty()) { - flags_in_filter = fmt::format( + flags_in_filter_enabled = fmt::format( " OR CONCAT(',', {}content_flags, ',') REGEXP ',({}),' ", table_prefix, implode("|", flags) ); + flags_in_filter_disabled = fmt::format( + " OR CONCAT(',', {}content_flags, ',') NOT REGEXP ',({}),' ", + table_prefix, + implode("|", flags) + ); } criteria += fmt::format( " AND ({}content_flags IS NULL{}) ", table_prefix, - flags_in_filter + flags_in_filter_enabled + ); + + criteria += fmt::format( + " AND ({}content_flags_disabled IS NULL{}) ", + table_prefix, + flags_in_filter_disabled ); return std::string(criteria); diff --git a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql index 0456d157b..3c3171ff2 100644 --- a/utils/sql/git/required/2020_04_11_expansions_content_filters.sql +++ b/utils/sql/git/required/2020_04_11_expansions_content_filters.sql @@ -83,3 +83,22 @@ update doors set min_expansion = 4 where name like '%POKTELE%'; -- content flags CREATE TABLE `content_flags` (`id` int AUTO_INCREMENT,`flag_name` varchar(75),`enabled` tinyint,`notes` text, PRIMARY KEY (id)); + +-- content flags disabled + +ALTER TABLE `doors` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `fishing` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `forage` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `global_loot` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `ground_spawns` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `lootdrop` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `loottable` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `merchantlist` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `object` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `spawn2` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `start_zones` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `starting_items` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `tradeskill_recipe` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `traps` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone` ADD `content_flags_disabled` varchar(100) NULL; +ALTER TABLE `zone_points` ADD `content_flags_disabled` varchar(100) NULL; \ No newline at end of file diff --git a/zone/zone.cpp b/zone/zone.cpp index 51f6318b1..828557151 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -57,6 +57,7 @@ #include "../common/data_verification.h" #include "zone_reload.h" #include "../common/repositories/criteria/content_filter_criteria.h" +#include "../common/repositories/content_flags_repository.h" #include #include @@ -1230,8 +1231,29 @@ void Zone::ReloadStaticData() { zone->LoadNPCEmotes(&NPCEmoteList); //load the zone config file. - if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) // try loading the zone name... - LoadZoneCFG(zone->GetFileName(), zone->GetInstanceVersion()); // if that fails, try the file name, then load defaults + if (!LoadZoneCFG(zone->GetShortName(), zone->GetInstanceVersion())) { // try loading the zone name... + LoadZoneCFG( + zone->GetFileName(), + zone->GetInstanceVersion() + ); + } // if that fails, try the file name, then load defaults + + content_service.SetExpansionContext(); + + std::vector set_content_flags; + auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); + set_content_flags.reserve(content_flags.size()); + + for (auto &flags: content_flags) { + set_content_flags.push_back(flags.flag_name); + + LogInfo( + "Enabled content flag [{}]", + flags.flag_name + ); + } + + content_service.SetContentFlags(set_content_flags); LogInfo("Zone Static Data Reloaded"); } From 26831d5ad46bf50beee8f7749be0d5e1f5234fdf Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Sun, 24 May 2020 02:56:04 -0500 Subject: [PATCH 170/272] Fix a copy paste error --- common/database_instances.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 945fca078..d7d84c90b 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -517,7 +517,7 @@ void Database::DeleteInstance(uint16 instance_id) std::string query; query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); - QueryDatabase(query) + QueryDatabase(query); query = StringFormat("DELETE FROM instance_list_player WHERE id=%u", instance_id); QueryDatabase(query); From 12d10bbc50f534f5b0845fa8c2f481c321459473 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 03:08:52 -0500 Subject: [PATCH 171/272] Slight adjustment to filter criteria [skip ci] --- common/repositories/criteria/content_filter_criteria.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/repositories/criteria/content_filter_criteria.h b/common/repositories/criteria/content_filter_criteria.h index f47936302..6fa1adc71 100644 --- a/common/repositories/criteria/content_filter_criteria.h +++ b/common/repositories/criteria/content_filter_criteria.h @@ -63,7 +63,7 @@ namespace ContentFilterCriteria { implode("|", flags) ); flags_in_filter_disabled = fmt::format( - " OR CONCAT(',', {}content_flags, ',') NOT REGEXP ',({}),' ", + " OR CONCAT(',', {}content_flags_disabled, ',') NOT REGEXP ',({}),' ", table_prefix, implode("|", flags) ); From 0d2d6a2c6be6e73a11e1287f2cff3e366dbaf1ea Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 04:07:29 -0500 Subject: [PATCH 172/272] More resilient fix to killing instances for now [skip ci] --- common/database_instances.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index d7d84c90b..0c917d847 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -516,9 +516,6 @@ void Database::DeleteInstance(uint16 instance_id) { std::string query; - query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id); - QueryDatabase(query); - query = StringFormat("DELETE FROM instance_list_player WHERE id=%u", instance_id); QueryDatabase(query); @@ -606,6 +603,9 @@ void Database::PurgeExpiredInstances() } for (auto row = results.begin(); row != results.end(); ++row) { + query = StringFormat("DELETE FROM instance_list WHERE id=%u", atoi(row[0])); + QueryDatabase(query); + DeleteInstance(atoi(row[0])); } } From db072e767a1e822e70d7b702202dbaa3e59d0dae Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 04:23:52 -0500 Subject: [PATCH 173/272] Bulk instance deletion instead of tons of individual statements [skip ci] --- common/database_instances.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/common/database_instances.cpp b/common/database_instances.cpp index 0c917d847..4f7c1b8a2 100644 --- a/common/database_instances.cpp +++ b/common/database_instances.cpp @@ -602,12 +602,20 @@ void Database::PurgeExpiredInstances() return; } + std::vector instance_ids; for (auto row = results.begin(); row != results.end(); ++row) { - query = StringFormat("DELETE FROM instance_list WHERE id=%u", atoi(row[0])); - QueryDatabase(query); - - DeleteInstance(atoi(row[0])); + instance_ids.emplace_back(row[0]); } + + std::string imploded_instance_ids = implode(",", instance_ids); + + QueryDatabase(fmt::format("DELETE FROM instance_list WHERE id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM instance_list_player WHERE id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM respawn_times WHERE instance_id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("DELETE FROM spawn_condition_values WHERE instance_id IN ({})", imploded_instance_ids)); + QueryDatabase(fmt::format("UPDATE character_corpses SET is_buried = 1, instance_id = 0 WHERE instance_id IN ({})", imploded_instance_ids)); + + } void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration) From 50c266982f0f5284c716b2c92164a9d5f3f89ee3 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 19:21:26 -0500 Subject: [PATCH 174/272] Remove string quotes from integers in mysql queries for faction and rules [skip ci] --- common/rulesys.cpp | 4 ++-- zone/zonedb.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/rulesys.cpp b/common/rulesys.cpp index fed83d097..4c6063042 100644 --- a/common/rulesys.cpp +++ b/common/rulesys.cpp @@ -274,7 +274,7 @@ bool RuleManager::LoadRules(Database *database, const char *ruleset_name, bool r Log(Logs::Detail, Logs::Rules, "Processing rule set '%s' (%d) load...", default_ruleset_name.c_str(), default_ruleset_id); std::string query = StringFormat( - "SELECT `rule_name`, `rule_value` FROM `rule_values` WHERE `ruleset_id` = '%d'", + "SELECT `rule_name`, `rule_value` FROM `rule_values` WHERE `ruleset_id` = %d", default_ruleset_id ); @@ -292,7 +292,7 @@ bool RuleManager::LoadRules(Database *database, const char *ruleset_name, bool r Log(Logs::Detail, Logs::Rules, "Processing rule set '%s' (%d) load...", ruleset_name, ruleset_id); - std::string query = StringFormat("SELECT `rule_name`, `rule_value` FROM `rule_values` WHERE `ruleset_id` = '%d'", ruleset_id); + std::string query = StringFormat("SELECT `rule_name`, `rule_value` FROM `rule_values` WHERE `ruleset_id` = %d", ruleset_id); auto results = database->QueryDatabase(query); if (!results.Success()) { diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 7015b042c..ad29b10dc 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -4106,7 +4106,7 @@ bool ZoneDatabase::LoadFactionData() memset(faction_array, 0, (sizeof(Faction*) * (max_faction + 1))); - std::vector faction_ids; + std::vector faction_ids; // load factions query = "SELECT `id`, `name`, `base` FROM `faction_list`"; @@ -4136,12 +4136,12 @@ bool ZoneDatabase::LoadFactionData() faction_array[index]->min = MIN_PERSONAL_FACTION; faction_array[index]->max = MAX_PERSONAL_FACTION; - faction_ids.push_back(index); + faction_ids.push_back(fr_row[0]); } LogInfo("[{}] Faction(s) loaded...", faction_ids.size()); - const std::string faction_id_criteria(implode(",", std::pair('\'', '\''), faction_ids)); + const std::string faction_id_criteria(implode(",", faction_ids)); // load faction mins/maxes query = fmt::format("SELECT `client_faction_id`, `min`, `max` FROM `faction_base_data` WHERE `client_faction_id` IN ({})", faction_id_criteria); From a4b027db582d23b3bb230774b19e3717e5007895 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 20:45:44 -0500 Subject: [PATCH 175/272] Export quest::is_content_flag_enabled and quest::set_content_flag --- common/content/world_content_service.cpp | 54 +++++++++++++++------ common/content/world_content_service.h | 3 +- zone/embparser_api.cpp | 34 ++++++++++++++ zone/lua_general.cpp | 16 ++++++- zone/main.cpp | 15 +----- zone/zone_store.cpp | 60 ++++++++++++++++++++++++ zone/zone_store.h | 4 ++ 7 files changed, 155 insertions(+), 31 deletions(-) diff --git a/common/content/world_content_service.cpp b/common/content/world_content_service.cpp index 64f6a1230..949ebcc0d 100644 --- a/common/content/world_content_service.cpp +++ b/common/content/world_content_service.cpp @@ -48,21 +48,6 @@ void WorldContentService::SetExpansionContext() ); } -void WorldContentService::SetCurrentExpansion(int current_expansion) -{ - WorldContentService::current_expansion = current_expansion; -} - -const std::vector &WorldContentService::GetContentFlags() const -{ - return content_flags; -} - -void WorldContentService::SetContentFlags(std::vector content_flags) -{ - WorldContentService::content_flags = content_flags; -} - std::string WorldContentService::GetCurrentExpansionName() { if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) { @@ -75,3 +60,42 @@ std::string WorldContentService::GetCurrentExpansionName() return "Unknown Expansion"; } + +/** + * @param current_expansion + */ +void WorldContentService::SetCurrentExpansion(int current_expansion) +{ + WorldContentService::current_expansion = current_expansion; +} + +/** + * @return + */ +const std::vector &WorldContentService::GetContentFlags() const +{ + return content_flags; +} + +/** + * @param content_flags + */ +void WorldContentService::SetContentFlags(std::vector content_flags) +{ + WorldContentService::content_flags = content_flags; +} + +/** + * @param content_flag + * @return + */ +bool WorldContentService::IsContentFlagEnabled(const std::string& content_flag) +{ + for (auto &flag : GetContentFlags()) { + if (flag == content_flag) { + return true; + } + } + + return false; +} diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 89abba257..662ec20cc 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -159,10 +159,11 @@ public: bool IsCurrentExpansionTormentOfVelious() { return current_expansion == Expansion::ExpansionNumber::TormentOfVelious; } private: - int current_expansion; + int current_expansion{}; std::vector content_flags; public: const std::vector &GetContentFlags() const; + bool IsContentFlagEnabled(const std::string& content_flag); void SetContentFlags(std::vector content_flags); void SetExpansionContext(); }; diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 6e1147848..0fa7cdbe9 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -4883,6 +4883,34 @@ XS(XS__IsCurrentExpansionTormentOfVelious) { XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); } +XS(XS__IsContentFlagEnabled); +XS(XS__IsContentFlagEnabled) { + dXSARGS; + if (items != 1) { + Perl_croak(aTHX_ "Usage: quest::is_content_flag_enabled(string flag_name)"); + } + + std::string flag_name = (std::string) SvPV_nolen(ST(0)); + + bool RETVAL; dXSTARG; + RETVAL = content_service.IsContentFlagEnabled(flag_name); + XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1); +} + +XS(XS__SetContentFlag); +XS(XS__SetContentFlag) +{ + dXSARGS; + if (items != 2) { + Perl_croak(aTHX_ "Usage: quest::set_content_flag(string flag_name, enabled)"); + } + + std::string flag_name = (std::string) SvPV_nolen(ST(0)); + bool enabled = (int) SvIV(ST(1)) != 0; + ZoneStore::SetContentFlag(flag_name, enabled); + XSRETURN_EMPTY; +} + /* This is the callback perl will look for to setup the quest package's XSUBs @@ -5216,6 +5244,12 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "is_current_expansion_the_burning_lands"), XS__IsCurrentExpansionTheBurningLands, file); newXS(strcpy(buf, "is_current_expansion_torment_of_velious"), XS__IsCurrentExpansionTormentOfVelious, file); + /** + * Content flags + */ + newXS(strcpy(buf, "is_content_flag_enabled"), XS__IsContentFlagEnabled, file); + newXS(strcpy(buf, "set_content_flag"), XS__SetContentFlag, file); + XSRETURN_YES; } diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 99d188219..3ced07d03 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1726,6 +1726,14 @@ bool lua_is_current_expansion_torment_of_velious() { return content_service.IsCurrentExpansionTormentOfVelious(); } +bool lua_is_content_flag_enabled(std::string content_flag){ + return content_service.IsContentFlagEnabled(content_flag); +} + +void lua_set_content_flag(std::string flag_name, bool enabled){ + ZoneStore::SetContentFlag(flag_name, enabled); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -2205,7 +2213,13 @@ luabind::scope lua_register_general() { luabind::def("is_current_expansion_empires_of_kunark", &lua_is_current_expansion_empires_of_kunark), luabind::def("is_current_expansion_ring_of_scale", &lua_is_current_expansion_ring_of_scale), luabind::def("is_current_expansion_the_burning_lands", &lua_is_current_expansion_the_burning_lands), - luabind::def("is_current_expansion_torment_of_velious", &lua_is_current_expansion_torment_of_velious) + luabind::def("is_current_expansion_torment_of_velious", &lua_is_current_expansion_torment_of_velious), + + /** + * Content flags + */ + luabind::def("is_content_flag_enabled", (bool(*)(std::string*))&lua_is_content_flag_enabled), + luabind::def("set_content_flag", (void(*)(std::string*, bool*))&lua_set_content_flag) ]; } diff --git a/zone/main.cpp b/zone/main.cpp index 85da66f9e..3fbb6c8d7 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -409,20 +409,7 @@ int main(int argc, char** argv) { content_service.SetExpansionContext(); - std::vector set_content_flags; - auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); - set_content_flags.reserve(content_flags.size()); - - for (auto &flags: content_flags) { - set_content_flags.push_back(flags.flag_name); - - LogInfo( - "Enabled content flag [{}]", - flags.flag_name - ); - } - - content_service.SetContentFlags(set_content_flags); + ZoneStore::LoadContentFlags(); #ifdef BOTS LogInfo("Loading bot commands"); diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp index bcaaf1f44..2401230e7 100644 --- a/zone/zone_store.cpp +++ b/zone/zone_store.cpp @@ -19,6 +19,8 @@ */ #include "zone_store.h" +#include "../common/repositories/content_flags_repository.h" +#include "../common/content/world_content_service.h" ZoneStore::ZoneStore() = default; ZoneStore::~ZoneStore() = default; @@ -28,6 +30,10 @@ void ZoneStore::LoadZones() zones = ZoneRepository::All(); } +/** + * @param in_zone_name + * @return + */ uint32 ZoneStore::GetZoneID(const char *in_zone_name) { if (in_zone_name == nullptr) { @@ -39,6 +45,10 @@ uint32 ZoneStore::GetZoneID(const char *in_zone_name) return GetZoneID(zone_name); } +/** + * @param zone_name + * @return + */ uint32 ZoneStore::GetZoneID(std::string zone_name) { for (auto &z: zones) { @@ -130,3 +140,53 @@ ZoneRepository::Zone ZoneStore::GetZone(const char *in_zone_name) return ZoneRepository::Zone(); } + +/** + * @return + */ +void ZoneStore::LoadContentFlags() +{ + std::vector set_content_flags; + auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); + + for (auto &flags: content_flags) { + set_content_flags.push_back(flags.flag_name); + + LogInfo( + "Enabled content flag [{}]", + flags.flag_name + ); + } + + content_service.SetContentFlags(set_content_flags); +} + +/** + * Sets the value in the database and proceeds to load content flags into the server context again + * + * @param content_flag_name + * @param enabled + */ +void ZoneStore::SetContentFlag(const std::string &content_flag_name, bool enabled) +{ + auto content_flags = ContentFlagsRepository::GetWhere( + fmt::format("flag_name = '{}'", content_flag_name) + ); + + auto content_flag = ContentFlagsRepository::NewEntity(); + if (!content_flags.empty()) { + content_flag = content_flags.front(); + } + + content_flag.enabled = enabled ? 1 : 0; + content_flag.flag_name = content_flag_name; + + if (!content_flags.empty()) { + ContentFlagsRepository::UpdateOne(content_flag); + } + else { + ContentFlagsRepository::InsertOne(content_flag); + } + + LoadContentFlags(); +} diff --git a/zone/zone_store.h b/zone/zone_store.h index 4057336d5..8513c51fa 100644 --- a/zone/zone_store.h +++ b/zone/zone_store.h @@ -23,6 +23,7 @@ #include "zonedb.h" #include "../common/repositories/zone_repository.h" +#include "../common/repositories/base/base_content_flags_repository.h" class ZoneStore { public: @@ -40,6 +41,9 @@ public: std::string GetZoneName(uint32 zone_id); std::string GetZoneLongName(uint32 zone_id); const char *GetZoneName(uint32 zone_id, bool error_unknown = false); + + static void LoadContentFlags(); + static void SetContentFlag(const std::string& content_flag_name, bool enabled); }; extern ZoneStore zone_store; From a9790e2779f9034bf7a5def27c490695df08bb14 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 24 May 2020 21:57:09 -0500 Subject: [PATCH 176/272] Update lua_general.cpp --- zone/lua_general.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 3ced07d03..7ed50dfc2 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -2218,8 +2218,8 @@ luabind::scope lua_register_general() { /** * Content flags */ - luabind::def("is_content_flag_enabled", (bool(*)(std::string*))&lua_is_content_flag_enabled), - luabind::def("set_content_flag", (void(*)(std::string*, bool*))&lua_set_content_flag) + luabind::def("is_content_flag_enabled", (bool(*)(std::string))&lua_is_content_flag_enabled), + luabind::def("set_content_flag", (void(*)(std::string, bool))&lua_set_content_flag) ]; } From cfe3b2b07139789dc5ab4cb734e96638fff210c9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 25 May 2020 01:35:39 -0500 Subject: [PATCH 177/272] Reconile a post merge issue [skip ci] --- common/item_instance.h | 2 +- world/client.h | 2 +- zone/tradeskills.cpp | 36 ++++++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/common/item_instance.h b/common/item_instance.h index 263bf676d..297908a50 100644 --- a/common/item_instance.h +++ b/common/item_instance.h @@ -61,7 +61,7 @@ class SharedDatabase; namespace EQ { class InventoryProfile; - + class ItemInstance { public: ///////////////////////// diff --git a/world/client.h b/world/client.h index aca958d6f..3631cf129 100644 --- a/world/client.h +++ b/world/client.h @@ -1,4 +1,4 @@ -/* EQ::: Everquest Server Emulator +/* EQ Everquest Server Emulator Copyright (C) 2001-2002 EQ:: Development Team (http://EQ::.org) This program is free software; you can redistribute it and/or modify diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 307560cf4..eb365b8a9 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -1290,23 +1290,24 @@ bool ZoneDatabase::GetTradeRecipe( //length limit on buf2 if(index == 214) { //Maximum number of recipe matches (19 * 215 = 4096) - LogError("GetTradeRecipe warning: Too many matches. Unable to search all recipe entries. Searched [{}] of [{}] possible entries", index + 1, results.RowCount()); + LogError("GetTradeRecipe warning: Too many matches. Unable to search all recipe entries. Searched [{}] of [{}] possible entries", index + 1, results.RowCount()); break; } } query = StringFormat("SELECT tre.recipe_id " "FROM tradeskill_recipe_entries AS tre " - "WHERE tre.recipe_id IN (%s) " - "GROUP BY tre.recipe_id HAVING sum(tre.componentcount) = %u " - "AND sum(tre.item_id * tre.componentcount) = %u", buf2.c_str(), count, sum); + "WHERE tre.recipe_id IN (%s) " + "GROUP BY tre.recipe_id HAVING sum(tre.componentcount) = %u " + "AND sum(tre.item_id * tre.componentcount) = %u", buf2.c_str(), count, sum + ); results = QueryDatabase(query); - if (!results.Success()) { - LogError("Error in GetTradeRecipe, re-query: [{}]", query.c_str()); - LogError("Error in GetTradeRecipe, error: [{}]", results.ErrorMessage().c_str()); - return false; - } - } + if (!results.Success()) { + LogError("Error in GetTradeRecipe, re-query: [{}]", query.c_str()); + LogError("Error in GetTradeRecipe, error: [{}]", results.ErrorMessage().c_str()); + return false; + } + } if (results.RowCount() < 1) return false; @@ -1373,23 +1374,30 @@ bool ZoneDatabase::GetTradeRecipe( } for (auto row = results.begin(); row != results.end(); ++row) { - int ccnt = 0; + int component_count = 0; for (int x = EQ::invbag::SLOT_BEGIN; x < EQ::invtype::WORLD_SIZE; x++) { const EQ::ItemInstance* inst = container->GetItem(x); if(!inst) continue; - const EQ::ItemData* item = GetItem(inst->GetItem()->ID); + const EQ::ItemData* item = database.GetItem(inst->GetItem()->ID); if (!item) continue; if (item->ID == atoi(row[0])) { - ccnt++; + component_count++; } + + LogTradeskills( + "[GetTradeRecipe] Component count loop [{}] item [{}] recipe component_count [{}]", + component_count, + item->ID, + atoi(row[1]) + ); } - if (ccnt != atoi(row[1])) { + if (component_count != atoi(row[1])) { return false; } } From 6896ef650e7feacf4275e8d67f23718877c38965 Mon Sep 17 00:00:00 2001 From: Ali Date: Mon, 25 May 2020 16:18:22 +0300 Subject: [PATCH 178/272] [ci skip] Updated installer to support powershell older than 3.0 --- utils/scripts/eqemu_server.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/scripts/eqemu_server.pl b/utils/scripts/eqemu_server.pl index 2b9bd4a7a..4c510ff9f 100755 --- a/utils/scripts/eqemu_server.pl +++ b/utils/scripts/eqemu_server.pl @@ -705,7 +705,7 @@ sub get_windows_wget { if (!-d "bin") { mkdir("bin"); } - `powershell -Command "\$ProgressPreference = 'SilentlyContinue'; Invoke-RestMethod -ContentType \"application/octet-stream\" -Uri https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/windows/wget.exe -OutFile bin/wget.exe"` + `powershell -Command "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/Akkadius/eqemu-install-v2/master/windows/wget.exe', 'bin\\wget.exe') "` } } From 40e690f8e3b5bca5a2efbc71811474dfd030c787 Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Mon, 25 May 2020 16:25:55 -0400 Subject: [PATCH 179/272] SQL to add the needed guktan and drakkin faction fixes missed by faction_conversion. --- .../optional/drakkin_guktan_faction_data.sql | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 utils/sql/git/optional/drakkin_guktan_faction_data.sql diff --git a/utils/sql/git/optional/drakkin_guktan_faction_data.sql b/utils/sql/git/optional/drakkin_guktan_faction_data.sql new file mode 100644 index 000000000..4c6fe8d97 --- /dev/null +++ b/utils/sql/git/optional/drakkin_guktan_faction_data.sql @@ -0,0 +1,33 @@ +-- MySQL dump 10.13 Distrib 5.7.30, for Linux (x86_64) +-- +-- Host: 192.168.0.3 Database: peqdb +-- ------------------------------------------------------ +-- Server version 5.7.30-0ubuntu0.16.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +LOCK TABLES `faction_list_mod` WRITE; +/*!40000 ALTER TABLE `faction_list_mod` DISABLE KEYS */; +REPLACE INTO `faction_list_mod` VALUES (null,65,-600,'r330','Guktan'),(null,65,-600,'r522','Drakkin'),(null,106,-50,'r330','Guktan'),(null,106,-50,'r522','Drakkin'),(null,217,-500,'r330','Guktan'),(null,217,-500,'r522','Drakkin'),(null,218,-1000,'r330','Guktan'),(null,218,-1000,'r522','Drakkin'),(null,220,50,'r330','Guktan'),(null,220,50,'r522','Drakkin'),(null,221,50,'r330','Guktan'),(null,221,50,'r522','Drakkin'),(null,222,-750,'r330','Guktan'),(null,222,-750,'r522','Drakkin'),(null,223,50,'r330','Guktan'),(null,223,50,'r522','Drakkin'),(null,225,-875,'r330','Guktan'),(null,225,-875,'r522','Drakkin'),(null,227,-10,'r330','Guktan'),(null,227,-10,'r522','Drakkin'),(null,228,-750,'r330','Guktan'),(null,228,-750,'r522','Drakkin'),(null,230,50,'r330','Guktan'),(null,230,50,'r522','Drakkin'),(null,231,-100,'r330','Guktan'),(null,231,-100,'r522','Drakkin'),(null,232,-501,'r330','Guktan'),(null,232,-501,'r522','Drakkin'),(null,233,-100,'r330','Guktan'),(null,233,-100,'r522','Drakkin'),(null,234,-750,'r330','Guktan'),(null,234,-750,'r522','Drakkin'),(null,235,-1000,'r330','Guktan'),(null,235,-1000,'r522','Drakkin'),(null,236,-50,'r330','Guktan'),(null,236,-50,'r522','Drakkin'),(null,237,-500,'r330','Guktan'),(null,237,-500,'r522','Drakkin'),(null,238,-25,'r330','Guktan'),(null,238,-25,'r522','Drakkin'),(null,239,-50,'r330','Guktan'),(null,239,-50,'r522','Drakkin'),(null,240,-50,'r330','Guktan'),(null,240,-50,'r522','Drakkin'),(null,241,-50,'r330','Guktan'),(null,241,-50,'r522','Drakkin'),(null,242,-150,'r330','Guktan'),(null,242,-150,'r522','Drakkin'),(null,244,-200,'r330','Guktan'),(null,244,-200,'r522','Drakkin'),(null,245,-25,'r330','Guktan'),(null,245,-25,'r522','Drakkin'),(null,246,-10,'r330','Guktan'),(null,246,-10,'r522','Drakkin'),(null,247,-1000,'r330','Guktan'),(null,247,-1000,'r522','Drakkin'),(null,248,-25,'r330','Guktan'),(null,248,-25,'r522','Drakkin'),(null,249,-2000,'r330','Guktan'),(null,249,-2000,'r522','Drakkin'),(null,250,-1000,'r330','Guktan'),(null,250,-1000,'r522','Drakkin'),(null,251,-499,'r330','Guktan'),(null,251,-499,'r522','Drakkin'),(null,252,-1000,'r330','Guktan'),(null,252,-1000,'r522','Drakkin'),(null,253,-1000,'r330','Guktan'),(null,253,-1000,'r522','Drakkin'),(null,254,-50,'r330','Guktan'),(null,254,-50,'r522','Drakkin'),(null,255,-50,'r330','Guktan'),(null,255,-50,'r522','Drakkin'),(null,256,-1000,'r330','Guktan'),(null,256,-1000,'r522','Drakkin'),(null,257,-1000,'r330','Guktan'),(null,257,-1000,'r522','Drakkin'),(null,258,-1000,'r330','Guktan'),(null,258,-1000,'r522','Drakkin'),(null,259,-1000,'r330','Guktan'),(null,259,-1000,'r522','Drakkin'),(null,261,-750,'r330','Guktan'),(null,261,-750,'r522','Drakkin'),(null,263,-15,'r330','Guktan'),(null,263,-15,'r522','Drakkin'),(null,264,-50,'r330','Guktan'),(null,264,-50,'r522','Drakkin'),(null,265,-500,'r330','Guktan'),(null,265,-500,'r522','Drakkin'),(null,266,-1,'r330','Guktan'),(null,266,-1,'r522','Drakkin'),(null,267,-25,'r330','Guktan'),(null,267,-25,'r522','Drakkin'),(null,270,-500,'r330','Guktan'),(null,270,-500,'r522','Drakkin'),(null,271,50,'r330','Guktan'),(null,271,50,'r522','Drakkin'),(null,272,50,'r330','Guktan'),(null,272,50,'r522','Drakkin'),(null,274,-10,'r330','Guktan'),(null,274,-10,'r522','Drakkin'),(null,275,-10,'r330','Guktan'),(null,275,-10,'r522','Drakkin'),(null,276,-50,'r330','Guktan'),(null,276,-50,'r522','Drakkin'),(null,277,-450,'r330','Guktan'),(null,277,-450,'r522','Drakkin'),(null,278,-500,'r330','Guktan'),(null,278,-500,'r522','Drakkin'),(null,279,-1,'r330','Guktan'),(null,279,-1,'r522','Drakkin'),(null,280,50,'r330','Guktan'),(null,280,50,'r522','Drakkin'),(null,282,-1000,'r330','Guktan'),(null,282,-1000,'r522','Drakkin'),(null,283,-1000,'r330','Guktan'),(null,283,-1000,'r522','Drakkin'),(null,284,50,'r330','Guktan'),(null,284,50,'r522','Drakkin'),(null,285,-2000,'r330','Guktan'),(null,285,-2000,'r522','Drakkin'),(null,287,-1000,'r330','Guktan'),(null,287,-1000,'r522','Drakkin'),(null,288,-50,'r330','Guktan'),(null,288,-50,'r522','Drakkin'),(null,289,-50,'r330','Guktan'),(null,289,-50,'r522','Drakkin'),(null,290,-50,'r330','Guktan'),(null,290,-50,'r522','Drakkin'),(null,291,50,'r330','Guktan'),(null,291,50,'r522','Drakkin'),(null,292,-25,'r330','Guktan'),(null,292,-25,'r522','Drakkin'),(null,293,-1,'r330','Guktan'),(null,293,-1,'r522','Drakkin'),(null,295,-1000,'r330','Guktan'),(null,295,-1000,'r522','Drakkin'),(null,297,-1,'r330','Guktan'),(null,297,-1,'r522','Drakkin'),(null,299,-1000,'r330','Guktan'),(null,299,-1000,'r522','Drakkin'),(null,302,50,'r330','Guktan'),(null,302,50,'r522','Drakkin'),(null,304,-75,'r330','Guktan'),(null,304,-75,'r522','Drakkin'),(null,305,-99,'r330','Guktan'),(null,305,-99,'r522','Drakkin'),(null,306,-1000,'r330','Guktan'),(null,306,-1000,'r522','Drakkin'),(null,307,-1000,'r330','Guktan'),(null,307,-1000,'r522','Drakkin'),(null,308,-750,'r330','Guktan'),(null,308,-750,'r522','Drakkin'),(null,309,50,'r330','Guktan'),(null,309,50,'r522','Drakkin'),(null,310,-25,'r330','Guktan'),(null,310,-25,'r522','Drakkin'),(null,311,50,'r330','Guktan'),(null,311,50,'r522','Drakkin'),(null,312,-75,'r330','Guktan'),(null,312,-75,'r522','Drakkin'),(null,313,-1000,'r330','Guktan'),(null,313,-1000,'r522','Drakkin'),(null,315,-1000,'r330','Guktan'),(null,315,-1000,'r522','Drakkin'),(null,316,-1,'r330','Guktan'),(null,316,-1,'r522','Drakkin'),(null,317,-1000,'r330','Guktan'),(null,317,-1000,'r522','Drakkin'),(null,318,-75,'r330','Guktan'),(null,318,-75,'r522','Drakkin'),(null,319,-1000,'r330','Guktan'),(null,319,-1000,'r522','Drakkin'),(null,320,-50,'r330','Guktan'),(null,320,-50,'r522','Drakkin'),(null,321,-875,'r330','Guktan'),(null,321,-875,'r522','Drakkin'),(null,323,-75,'r330','Guktan'),(null,323,-75,'r522','Drakkin'),(null,325,-30,'r330','Guktan'),(null,325,-30,'r522','Drakkin'),(null,326,-50,'r330','Guktan'),(null,326,-50,'r522','Drakkin'),(null,327,-25,'r330','Guktan'),(null,327,-25,'r522','Drakkin'),(null,328,-50,'r330','Guktan'),(null,328,-50,'r522','Drakkin'),(null,333,-10,'r330','Guktan'),(null,333,-10,'r522','Drakkin'),(null,334,-500,'r330','Guktan'),(null,334,-500,'r522','Drakkin'),(null,336,50,'r330','Guktan'),(null,336,50,'r522','Drakkin'),(null,337,-875,'r330','Guktan'),(null,337,-875,'r522','Drakkin'),(null,338,-750,'r330','Guktan'),(null,338,-750,'r522','Drakkin'),(null,340,-250,'r330','Guktan'),(null,340,-250,'r522','Drakkin'),(null,342,50,'r330','Guktan'),(null,342,50,'r522','Drakkin'),(null,343,-600,'r330','Guktan'),(null,343,-600,'r522','Drakkin'),(null,346,50,'r330','Guktan'),(null,346,50,'r522','Drakkin'),(null,362,50,'r330','Guktan'),(null,362,50,'r522','Drakkin'),(null,363,-250,'r330','Guktan'),(null,363,-250,'r522','Drakkin'),(null,364,-1000,'r330','Guktan'),(null,364,-1000,'r522','Drakkin'),(null,370,-200,'r330','Guktan'),(null,370,-200,'r522','Drakkin'),(null,371,-875,'r330','Guktan'),(null,371,-875,'r522','Drakkin'),(null,372,-875,'r330','Guktan'),(null,372,-875,'r522','Drakkin'),(null,373,-750,'r330','Guktan'),(null,373,-750,'r522','Drakkin'),(null,375,-1000,'r330','Guktan'),(null,375,-1000,'r522','Drakkin'),(null,377,-875,'r330','Guktan'),(null,377,-875,'r522','Drakkin'),(null,378,-1600,'r330','Guktan'),(null,378,-1600,'r522','Drakkin'),(null,379,-550,'r330','Guktan'),(null,379,-550,'r522','Drakkin'),(null,382,-50,'r330','Guktan'),(null,382,-50,'r522','Drakkin'),(null,387,-1000,'r330','Guktan'),(null,387,-1000,'r522','Drakkin'),(null,390,-100,'r330','Guktan'),(null,390,-100,'r522','Drakkin'),(null,391,-100,'r330','Guktan'),(null,391,-100,'r522','Drakkin'),(null,394,-500,'r330','Guktan'),(null,394,-500,'r522','Drakkin'),(null,398,-1000,'r330','Guktan'),(null,398,-1000,'r522','Drakkin'),(null,401,-25,'r330','Guktan'),(null,401,-25,'r522','Drakkin'),(null,405,-200,'r330','Guktan'),(null,405,-200,'r522','Drakkin'),(null,406,-100,'r330','Guktan'),(null,406,-100,'r522','Drakkin'),(null,407,-800,'r330','Guktan'),(null,407,-800,'r522','Drakkin'),(null,409,-625,'r330','Guktan'),(null,409,-625,'r522','Drakkin'),(null,412,-475,'r330','Guktan'),(null,412,-475,'r522','Drakkin'),(null,415,50,'r330','Guktan'),(null,415,50,'r522','Drakkin'),(null,416,-400,'r330','Guktan'),(null,416,-400,'r522','Drakkin'),(null,418,-750,'r330','Guktan'),(null,418,-750,'r522','Drakkin'),(null,419,-550,'r330','Guktan'),(null,419,-550,'r522','Drakkin'),(null,420,-1000,'r330','Guktan'),(null,420,-1000,'r522','Drakkin'),(null,421,-600,'r330','Guktan'),(null,421,-600,'r522','Drakkin'),(null,423,-1000,'r330','Guktan'),(null,423,-1000,'r522','Drakkin'),(null,425,-1000,'r330','Guktan'),(null,425,-1000,'r522','Drakkin'),(null,426,-1000,'r330','Guktan'),(null,426,-1000,'r522','Drakkin'),(null,427,-400,'r330','Guktan'),(null,427,-400,'r522','Drakkin'),(null,428,-600,'r330','Guktan'),(null,428,-600,'r522','Drakkin'),(null,429,-800,'r330','Guktan'),(null,429,-800,'r522','Drakkin'),(null,430,-800,'r330','Guktan'),(null,430,-800,'r522','Drakkin'),(null,431,-800,'r330','Guktan'),(null,431,-800,'r522','Drakkin'),(null,434,-1000,'r330','Guktan'),(null,434,-1000,'r522','Drakkin'),(null,435,-1000,'r330','Guktan'),(null,435,-1000,'r522','Drakkin'),(null,436,-800,'r330','Guktan'),(null,436,-800,'r522','Drakkin'),(null,440,-1000,'r330','Guktan'),(null,440,-1000,'r522','Drakkin'),(null,441,-1000,'r330','Guktan'),(null,441,-1000,'r522','Drakkin'),(null,442,-1000,'r330','Guktan'),(null,442,-1000,'r522','Drakkin'),(null,443,-1000,'r330','Guktan'),(null,443,-1000,'r522','Drakkin'),(null,444,-1000,'r330','Guktan'),(null,444,-1000,'r522','Drakkin'),(null,445,-1000,'r330','Guktan'),(null,445,-1000,'r522','Drakkin'),(null,446,-1000,'r330','Guktan'),(null,446,-1000,'r522','Drakkin'),(null,447,200,'r330','Guktan'),(null,447,200,'r522','Drakkin'),(null,448,-550,'r330','Guktan'),(null,448,-550,'r522','Drakkin'),(null,450,-1000,'r330','Guktan'),(null,450,-1000,'r522','Drakkin'),(null,451,-800,'r330','Guktan'),(null,451,-800,'r522','Drakkin'),(null,452,-600,'r330','Guktan'),(null,452,-600,'r522','Drakkin'),(null,454,-1000,'r330','Guktan'),(null,454,-1000,'r522','Drakkin'),(null,455,-1000,'r330','Guktan'),(null,455,-1000,'r522','Drakkin'),(null,457,-800,'r330','Guktan'),(null,457,-800,'r522','Drakkin'),(null,460,-200,'r330','Guktan'),(null,460,-200,'r522','Drakkin'),(null,461,-1000,'r330','Guktan'),(null,461,-1000,'r522','Drakkin'),(null,462,-800,'r330','Guktan'),(null,462,-800,'r522','Drakkin'),(null,463,-200,'r330','Guktan'),(null,463,-200,'r522','Drakkin'),(null,467,-1000,'r330','Guktan'),(null,467,-1000,'r522','Drakkin'),(null,468,-1000,'r330','Guktan'),(null,468,-1000,'r522','Drakkin'),(null,471,-800,'r330','Guktan'),(null,471,-800,'r522','Drakkin'),(null,472,-1000,'r330','Guktan'),(null,472,-1000,'r522','Drakkin'),(null,474,-99,'r330','Guktan'),(null,474,-99,'r522','Drakkin'),(null,475,-875,'r330','Guktan'),(null,475,-875,'r522','Drakkin'),(null,548,-1000,'r330','Guktan'),(null,548,-1000,'r522','Drakkin'),(null,680,-100,'r330','Guktan'),(null,680,-100,'r522','Drakkin'),(null,711,-750,'r330','Guktan'),(null,711,-750,'r522','Drakkin'),(null,712,-750,'r330','Guktan'),(null,712,-750,'r522','Drakkin'),(null,713,-1000,'r330','Guktan'),(null,713,-1000,'r522','Drakkin'),(null,714,-1000,'r330','Guktan'),(null,714,-1000,'r522','Drakkin'),(null,715,-1000,'r330','Guktan'),(null,715,-1000,'r522','Drakkin'),(null,716,-1000,'r330','Guktan'),(null,716,-1000,'r522','Drakkin'),(null,720,375,'r330','Guktan'),(null,720,375,'r522','Drakkin'),(null,721,375,'r330','Guktan'),(null,721,375,'r522','Drakkin'),(null,1007,-2000,'r330','Guktan'),(null,1007,-2000,'r522','Drakkin'),(null,1010,-2000,'r330','Guktan'),(null,1010,-2000,'r522','Drakkin'),(null,1013,-2000,'r330','Guktan'),(null,1013,-2000,'r522','Drakkin'),(null,1016,-800,'r330','Guktan'),(null,1016,-800,'r522','Drakkin'),(null,1024,-2000,'r330','Guktan'),(null,1024,-2000,'r522','Drakkin'),(null,1025,-2000,'r330','Guktan'),(null,1025,-2000,'r522','Drakkin'),(null,1026,-2000,'r330','Guktan'),(null,1026,-2000,'r522','Drakkin'),(null,1027,-2000,'r330','Guktan'),(null,1027,-2000,'r522','Drakkin'),(null,1028,-2000,'r330','Guktan'),(null,1028,-2000,'r522','Drakkin'),(null,1029,-2000,'r330','Guktan'),(null,1029,-2000,'r522','Drakkin'),(null,1030,-2000,'r330','Guktan'),(null,1030,-2000,'r522','Drakkin'),(null,1031,-2000,'r330','Guktan'),(null,1031,-2000,'r522','Drakkin'),(null,1032,-2000,'r330','Guktan'),(null,1032,-2000,'r522','Drakkin'),(null,1033,-2000,'r330','Guktan'),(null,1033,-2000,'r522','Drakkin'),(null,1034,-2000,'r330','Guktan'),(null,1034,-2000,'r522','Drakkin'),(null,1035,-2000,'r330','Guktan'),(null,1035,-2000,'r522','Drakkin'),(null,1049,-2000,'r330','Guktan'),(null,1049,-2000,'r522','Drakkin'),(null,1051,-2000,'r330','Guktan'),(null,1051,-2000,'r522','Drakkin'),(null,1052,-2000,'r330','Guktan'),(null,1052,-2000,'r522','Drakkin'),(null,1053,-2000,'r330','Guktan'),(null,1053,-2000,'r522','Drakkin'),(null,1054,-2000,'r330','Guktan'),(null,1054,-2000,'r522','Drakkin'),(null,1055,-500,'r330','Guktan'),(null,1055,-500,'r522','Drakkin'),(null,1056,-2000,'r330','Guktan'),(null,1056,-2000,'r522','Drakkin'),(null,1058,-2000,'r330','Guktan'),(null,1058,-2000,'r522','Drakkin'),(null,1059,-1000,'r330','Guktan'),(null,1059,-1000,'r522','Drakkin'),(null,1062,-500,'r330','Guktan'),(null,1062,-500,'r522','Drakkin'),(null,1066,-1000,'r330','Guktan'),(null,1066,-1000,'r522','Drakkin'),(null,1068,-1000,'r330','Guktan'),(null,1068,-1000,'r522','Drakkin'),(null,1069,-1000,'r330','Guktan'),(null,1069,-1000,'r522','Drakkin'),(null,1070,-1000,'r330','Guktan'),(null,1070,-1000,'r522','Drakkin'),(null,1071,-1000,'r330','Guktan'),(null,1071,-1000,'r522','Drakkin'),(null,1072,-1000,'r330','Guktan'),(null,1072,-1000,'r522','Drakkin'),(null,1073,-1000,'r330','Guktan'),(null,1073,-1000,'r522','Drakkin'),(null,1074,-1000,'r330','Guktan'),(null,1074,-1000,'r522','Drakkin'),(null,1075,-1000,'r330','Guktan'),(null,1075,-1000,'r522','Drakkin'),(null,1076,-1000,'r330','Guktan'),(null,1076,-1000,'r522','Drakkin'),(null,1077,-1000,'r330','Guktan'),(null,1077,-1000,'r522','Drakkin'),(null,1078,-1000,'r330','Guktan'),(null,1078,-1000,'r522','Drakkin'),(null,1079,-1000,'r330','Guktan'),(null,1079,-1000,'r522','Drakkin'),(null,1080,-1000,'r330','Guktan'),(null,1080,-1000,'r522','Drakkin'),(null,1086,-2000,'r330','Guktan'),(null,1086,-2000,'r522','Drakkin'),(null,1088,-1000,'r330','Guktan'),(null,1088,-1000,'r522','Drakkin'),(null,1089,-1000,'r330','Guktan'),(null,1089,-1000,'r522','Drakkin'),(null,1090,-1000,'r330','Guktan'),(null,1090,-1000,'r522','Drakkin'),(null,1091,-1000,'r330','Guktan'),(null,1091,-1000,'r522','Drakkin'),(null,1092,-1000,'r330','Guktan'),(null,1092,-1000,'r522','Drakkin'),(null,1093,-1000,'r330','Guktan'),(null,1093,-1000,'r522','Drakkin'),(null,1094,-1000,'r330','Guktan'),(null,1094,-1000,'r522','Drakkin'),(null,1100,-1000,'r330','Guktan'),(null,1100,-1000,'r522','Drakkin'),(null,1101,-1000,'r330','Guktan'),(null,1101,-1000,'r522','Drakkin'),(null,1103,-1000,'r330','Guktan'),(null,1103,-1000,'r522','Drakkin'),(null,1104,-500,'r330','Guktan'),(null,1104,-500,'r522','Drakkin'),(null,1105,-200,'r330','Guktan'),(null,1105,-200,'r522','Drakkin'),(null,1107,-700,'r330','Guktan'),(null,1107,-700,'r522','Drakkin'),(null,1111,-1000,'r330','Guktan'),(null,1111,-1000,'r522','Drakkin'),(null,1112,-1000,'r330','Guktan'),(null,1112,-1000,'r522','Drakkin'),(null,1113,-1000,'r330','Guktan'),(null,1113,-1000,'r522','Drakkin'),(null,1114,-1000,'r330','Guktan'),(null,1114,-1000,'r522','Drakkin'),(null,1115,-1000,'r330','Guktan'),(null,1115,-1000,'r522','Drakkin'),(null,1120,-1000,'r330','Guktan'),(null,1120,-1000,'r522','Drakkin'),(null,1121,-1000,'r330','Guktan'),(null,1121,-1000,'r522','Drakkin'),(null,1123,-100,'r330','Guktan'),(null,1123,-100,'r522','Drakkin'),(null,1124,-1000,'r330','Guktan'),(null,1124,-1000,'r522','Drakkin'),(null,1125,-1000,'r330','Guktan'),(null,1125,-1000,'r522','Drakkin'),(null,1134,-50,'r330','Guktan'),(null,1134,-50,'r522','Drakkin'),(null,1135,-150,'r330','Guktan'),(null,1135,-150,'r522','Drakkin'),(null,1137,100,'r522','Drakkin'),(null,1140,-1000,'r330','Guktan'),(null,1140,-1000,'r522','Drakkin'),(null,1141,-1000,'r330','Guktan'),(null,1141,-1000,'r522','Drakkin'),(null,1142,-1000,'r330','Guktan'),(null,1142,-1000,'r522','Drakkin'),(null,1143,-500,'r330','Guktan'),(null,1143,-500,'r522','Drakkin'),(null,1144,-250,'r330','Guktan'),(null,1144,-250,'r522','Drakkin'),(null,1145,-500,'r330','Guktan'),(null,1145,-500,'r522','Drakkin'),(null,1146,-800,'r330','Guktan'),(null,1146,-800,'r522','Drakkin'),(null,1147,-800,'r330','Guktan'),(null,1147,-800,'r522','Drakkin'),(null,1148,-800,'r330','Guktan'),(null,1148,-800,'r522','Drakkin'),(null,1149,-800,'r330','Guktan'),(null,1149,-800,'r522','Drakkin'),(null,1166,-1000,'r330','Guktan'),(null,1166,-1000,'r522','Drakkin'),(null,1169,-100,'r330','Guktan'),(null,1169,-100,'r522','Drakkin'),(null,1170,-100,'r330','Guktan'),(null,1170,-100,'r522','Drakkin'),(null,1175,-1000,'r330','Guktan'),(null,1175,-1000,'r522','Drakkin'),(null,1176,-1000,'r330','Guktan'),(null,1176,-1000,'r522','Drakkin'),(null,1181,-1000,'r330','Guktan'),(null,1181,-1000,'r522','Drakkin'),(null,1182,-1000,'r330','Guktan'),(null,1182,-1000,'r522','Drakkin'),(null,1183,-500,'r330','Guktan'),(null,1183,-500,'r522','Drakkin'),(null,1184,-500,'r330','Guktan'),(null,1184,-500,'r522','Drakkin'),(null,1185,-500,'r330','Guktan'),(null,1185,-500,'r522','Drakkin'),(null,1186,-1000,'r330','Guktan'),(null,1186,-1000,'r522','Drakkin'),(null,1188,-500,'r330','Guktan'),(null,1188,-500,'r522','Drakkin'),(null,1189,-500,'r330','Guktan'),(null,1189,-500,'r522','Drakkin'),(null,1190,-500,'r330','Guktan'),(null,1190,-500,'r522','Drakkin'),(null,1191,-500,'r330','Guktan'),(null,1191,-500,'r522','Drakkin'),(null,1192,-1000,'r330','Guktan'),(null,1192,-1000,'r522','Drakkin'),(null,1193,-1000,'r330','Guktan'),(null,1193,-1000,'r522','Drakkin'),(null,1194,-1000,'r330','Guktan'),(null,1194,-1000,'r522','Drakkin'),(null,1195,-1000,'r330','Guktan'),(null,1195,-1000,'r522','Drakkin'),(null,1196,-1000,'r330','Guktan'),(null,1196,-1000,'r522','Drakkin'),(null,1197,-1000,'r330','Guktan'),(null,1197,-1000,'r522','Drakkin'),(null,1198,-1000,'r330','Guktan'),(null,1198,-1000,'r522','Drakkin'),(null,1199,-100,'r330','Guktan'),(null,1199,-100,'r522','Drakkin'),(null,1200,-100,'r330','Guktan'),(null,1200,-100,'r522','Drakkin'),(null,1201,-1000,'r330','Guktan'),(null,1201,-1000,'r522','Drakkin'),(null,1202,-1000,'r330','Guktan'),(null,1202,-1000,'r522','Drakkin'),(null,1203,-300,'r330','Guktan'),(null,1203,-300,'r522','Drakkin'),(null,1204,-300,'r330','Guktan'),(null,1204,-300,'r522','Drakkin'),(null,1205,-300,'r330','Guktan'),(null,1205,-300,'r522','Drakkin'),(null,1209,-500,'r330','Guktan'),(null,1209,-500,'r522','Drakkin'),(null,1210,-1000,'r330','Guktan'),(null,1210,-1000,'r522','Drakkin'),(null,1211,100,'r330','Guktan'),(null,1211,100,'r522','Drakkin'),(null,1212,-100,'r330','Guktan'),(null,1212,-100,'r522','Drakkin'),(null,1213,-1000,'r330','Guktan'),(null,1213,-1000,'r522','Drakkin'),(null,1216,-1000,'r330','Guktan'),(null,1216,-1000,'r522','Drakkin'),(null,1220,-1000,'r330','Guktan'),(null,1220,-1000,'r522','Drakkin'),(null,1222,-500,'r330','Guktan'),(null,1222,-500,'r522','Drakkin'),(null,1223,-500,'r330','Guktan'),(null,1223,-500,'r522','Drakkin'),(null,1224,-500,'r330','Guktan'),(null,1224,-500,'r522','Drakkin'),(null,1225,-500,'r330','Guktan'),(null,1225,-500,'r522','Drakkin'),(null,1226,-500,'r330','Guktan'),(null,1226,-500,'r522','Drakkin'),(null,1227,-500,'r330','Guktan'),(null,1227,-500,'r522','Drakkin'),(null,1229,-1000,'r330','Guktan'),(null,1229,-1000,'r522','Drakkin'),(null,1230,-1000,'r330','Guktan'),(null,1230,-1000,'r522','Drakkin'),(null,1232,1,'r330','Guktan'),(null,1232,1,'r522','Drakkin'),(null,1233,-1000,'r330','Guktan'),(null,1233,-1000,'r522','Drakkin'),(null,1234,1,'r330','Guktan'),(null,1234,1,'r522','Drakkin'),(null,1235,-2000,'r330','Guktan'),(null,1235,-2000,'r522','Drakkin'),(null,1237,-2000,'r330','Guktan'),(null,1237,-2000,'r522','Drakkin'),(null,1238,-100,'r330','Guktan'),(null,1238,-100,'r522','Drakkin'),(null,1241,-750,'r330','Guktan'),(null,1241,-750,'r522','Drakkin'),(null,1242,-500,'r330','Guktan'),(null,1242,-500,'r522','Drakkin'),(null,1243,-2000,'r330','Guktan'),(null,1243,-2000,'r522','Drakkin'),(null,1244,-50,'r330','Guktan'),(null,1244,-50,'r522','Drakkin'),(null,1483,-1000,'r330','Guktan'),(null,1483,-1000,'r522','Drakkin'),(null,1485,-400,'r330','Guktan'),(null,1485,-400,'r522','Drakkin'),(null,1486,-250,'r330','Guktan'),(null,1486,-250,'r522','Drakkin'),(null,1490,-1000,'r330','Guktan'),(null,1490,-1000,'r522','Drakkin'),(null,1491,-1000,'r330','Guktan'),(null,1491,-1000,'r522','Drakkin'),(null,1500,-250,'r330','Guktan'),(null,1500,-250,'r522','Drakkin'),(null,1501,-550,'r330','Guktan'),(null,1501,-550,'r522','Drakkin'),(null,1508,-50,'r330','Guktan'),(null,1508,-50,'r522','Drakkin'),(null,1509,-50,'r330','Guktan'),(null,1509,-50,'r522','Drakkin'),(null,1510,-99,'r330','Guktan'),(null,1510,-99,'r522','Drakkin'),(null,1511,-200,'r330','Guktan'),(null,1511,-200,'r522','Drakkin'),(null,1512,-200,'r330','Guktan'),(null,1512,-200,'r522','Drakkin'),(null,1516,-1000,'r330','Guktan'),(null,1516,-1000,'r522','Drakkin'),(null,1519,-1000,'r330','Guktan'),(null,1519,-1000,'r522','Drakkin'),(null,1520,-100,'r330','Guktan'),(null,1520,-100,'r522','Drakkin'),(null,1521,-2000,'r330','Guktan'),(null,1521,-2000,'r522','Drakkin'),(null,1522,-50,'r330','Guktan'),(null,1522,-50,'r522','Drakkin'),(null,1527,-1000,'r330','Guktan'),(null,1527,-1000,'r522','Drakkin'),(null,1528,-1000,'r330','Guktan'),(null,1528,-1000,'r522','Drakkin'),(null,1535,-1000,'r330','Guktan'),(null,1535,-1000,'r522','Drakkin'),(null,1537,-1,'r330','Guktan'),(null,1537,-1,'r522','Drakkin'),(null,1542,-350,'r330','Guktan'),(null,1542,-350,'r522','Drakkin'),(null,1547,-250,'r330','Guktan'),(null,1547,-250,'r522','Drakkin'),(null,1555,-550,'r330','Guktan'),(null,1555,-550,'r522','Drakkin'),(null,1556,-400,'r330','Guktan'),(null,1556,-400,'r522','Drakkin'),(null,1562,-1000,'r330','Guktan'),(null,1562,-1000,'r522','Drakkin'),(null,1563,-99,'r330','Guktan'),(null,1563,-99,'r522','Drakkin'),(null,1564,-1000,'r330','Guktan'),(null,1564,-1000,'r522','Drakkin'),(null,1565,-99,'r330','Guktan'),(null,1565,-99,'r522','Drakkin'),(null,1568,-1000,'r330','Guktan'),(null,1568,-1000,'r522','Drakkin'),(null,1570,-800,'r330','Guktan'),(null,1570,-800,'r522','Drakkin'),(null,1571,-1000,'r330','Guktan'),(null,1571,-1000,'r522','Drakkin'),(null,1573,-250,'r330','Guktan'),(null,1573,-250,'r522','Drakkin'),(null,1574,-800,'r330','Guktan'),(null,1574,-800,'r522','Drakkin'),(null,1583,-800,'r330','Guktan'),(null,1583,-800,'r522','Drakkin'),(null,1587,-1000,'r330','Guktan'),(null,1587,-1000,'r522','Drakkin'),(null,1598,-50,'r330','Guktan'),(null,1598,-50,'r522','Drakkin'),(null,1599,-1000,'r330','Guktan'),(null,1599,-1000,'r522','Drakkin'),(null,1600,-1000,'r330','Guktan'),(null,1600,-1000,'r522','Drakkin'),(null,1601,-475,'r330','Guktan'),(null,1601,-475,'r522','Drakkin'),(null,1603,-75,'r330','Guktan'),(null,1603,-75,'r522','Drakkin'),(null,1605,50,'r330','Guktan'),(null,1605,50,'r522','Drakkin'),(null,1607,-1000,'r330','Guktan'),(null,1607,-1000,'r522','Drakkin'),(null,1610,-1000,'r330','Guktan'),(null,1610,-1000,'r522','Drakkin'),(null,1611,-1000,'r330','Guktan'),(null,1611,-1000,'r522','Drakkin'),(null,1612,-1000,'r330','Guktan'),(null,1612,-1000,'r522','Drakkin'),(null,1613,-1000,'r330','Guktan'),(null,1613,-1000,'r522','Drakkin'),(null,1618,-1000,'r330','Guktan'),(null,1618,-1000,'r522','Drakkin'),(null,1620,-250,'r330','Guktan'),(null,1620,-250,'r522','Drakkin'),(null,1621,-1000,'r330','Guktan'),(null,1621,-1000,'r522','Drakkin'),(null,1622,-480,'r330','Guktan'),(null,1622,-480,'r522','Drakkin'),(null,1623,-1000,'r330','Guktan'),(null,1623,-1000,'r522','Drakkin'),(null,1624,-1000,'r330','Guktan'),(null,1624,-1000,'r522','Drakkin'),(null,1627,-95,'r330','Guktan'),(null,1627,-95,'r522','Drakkin'),(null,1628,-700,'r330','Guktan'),(null,1628,-700,'r522','Drakkin'),(null,1629,-1000,'r330','Guktan'),(null,1629,-1000,'r522','Drakkin'),(null,1633,-1000,'r330','Guktan'),(null,1633,-1000,'r522','Drakkin'),(null,1643,-1000,'r330','Guktan'),(null,1643,-1000,'r522','Drakkin'),(null,1659,-1000,'r330','Guktan'),(null,1659,-1000,'r522','Drakkin'),(null,1660,-1000,'r330','Guktan'),(null,1660,-1000,'r522','Drakkin'),(null,1665,-1000,'r330','Guktan'),(null,1665,-1000,'r522','Drakkin'),(null,1671,-400,'r330','Guktan'),(null,1671,-400,'r522','Drakkin'),(null,1674,-1000,'r330','Guktan'),(null,1674,-1000,'r522','Drakkin'),(null,1675,-1000,'r330','Guktan'),(null,1675,-1000,'r522','Drakkin'),(null,1676,-1000,'r330','Guktan'),(null,1676,-1000,'r522','Drakkin'),(null,1677,-100,'r330','Guktan'),(null,1677,-100,'r522','Drakkin'),(null,1679,-100,'r330','Guktan'),(null,1679,-100,'r522','Drakkin'),(null,1680,-300,'r330','Guktan'),(null,1680,-300,'r522','Drakkin'),(null,1681,-300,'r330','Guktan'),(null,1681,-300,'r522','Drakkin'),(null,1701,-1000,'r330','Guktan'),(null,1701,-1000,'r522','Drakkin'),(null,1703,-1000,'r330','Guktan'),(null,1703,-1000,'r522','Drakkin'),(null,1716,100,'r330','Guktan'),(null,1717,100,'r330','Guktan'),(null,1718,100,'r330','Guktan'),(null,1720,100,'r330','Guktan'),(null,1722,-1000,'r330','Guktan'),(null,1722,-1000,'r522','Drakkin'),(null,1728,-1000,'r330','Guktan'),(null,1728,-1000,'r522','Drakkin'),(null,1729,-1000,'r330','Guktan'),(null,1729,-1000,'r522','Drakkin'),(null,1732,-1000,'r330','Guktan'),(null,1732,-1000,'r522','Drakkin'),(null,1733,-1000,'r330','Guktan'),(null,1733,-1000,'r522','Drakkin'),(null,1734,-1000,'r330','Guktan'),(null,1734,-1000,'r522','Drakkin'),(null,1735,-1000,'r330','Guktan'),(null,1735,-1000,'r522','Drakkin'),(null,1736,-1000,'r330','Guktan'),(null,1736,-1000,'r522','Drakkin'),(null,1737,-1000,'r330','Guktan'),(null,1737,-1000,'r522','Drakkin'),(null,1738,-1000,'r330','Guktan'),(null,1738,-1000,'r522','Drakkin'),(null,1741,-1000,'r330','Guktan'),(null,1741,-1000,'r522','Drakkin'),(null,1742,-1000,'r330','Guktan'),(null,1742,-1000,'r522','Drakkin'),(null,1743,-1000,'r330','Guktan'),(null,1743,-1000,'r522','Drakkin'),(null,1744,-1000,'r330','Guktan'),(null,1744,-1000,'r522','Drakkin'),(null,1745,-1000,'r330','Guktan'),(null,1745,-1000,'r522','Drakkin'),(null,1746,-1000,'r330','Guktan'),(null,1746,-1000,'r522','Drakkin'),(null,1747,-1000,'r330','Guktan'),(null,1747,-1000,'r522','Drakkin'),(null,1748,-1000,'r330','Guktan'),(null,1748,-1000,'r522','Drakkin'),(null,1749,-1000,'r330','Guktan'),(null,1749,-1000,'r522','Drakkin'),(null,1750,-1000,'r330','Guktan'),(null,1750,-1000,'r522','Drakkin'),(null,1755,-1000,'r330','Guktan'),(null,1755,-1000,'r522','Drakkin'),(null,1758,100,'r330','Guktan'),(null,1758,100,'r522','Drakkin'),(null,1759,-100,'r330','Guktan'),(null,1759,-100,'r522','Drakkin'),(null,1761,-100,'r330','Guktan'),(null,1761,-100,'r522','Drakkin'),(null,1762,-1000,'r330','Guktan'),(null,1762,-1000,'r522','Drakkin'),(null,1763,-1001,'r330','Guktan'),(null,1763,-1001,'r522','Drakkin'),(null,1764,-1000,'r330','Guktan'),(null,1764,-1000,'r522','Drakkin'),(null,1765,-1000,'r330','Guktan'),(null,1765,-1000,'r522','Drakkin'),(null,1766,-1000,'r330','Guktan'),(null,1766,-1000,'r522','Drakkin'),(null,1767,-1000,'r330','Guktan'),(null,1767,-1000,'r522','Drakkin'),(null,1768,-1000,'r330','Guktan'),(null,1768,-1000,'r522','Drakkin'),(null,1770,-400,'r330','Guktan'),(null,1770,-400,'r522','Drakkin'),(null,1771,-750,'r330','Guktan'),(null,1771,-750,'r522','Drakkin'),(null,1775,50,'r330','Guktan'),(null,1775,50,'r522','Drakkin'),(null,1777,-2000,'r330','Guktan'),(null,1777,-2000,'r522','Drakkin'),(null,1778,10,'r330','Guktan'),(null,1778,10,'r522','Drakkin'),(null,1779,30,'r330','Guktan'),(null,1779,30,'r522','Drakkin'),(null,1780,90,'r330','Guktan'),(null,1780,90,'r522','Drakkin'),(null,1781,90,'r330','Guktan'),(null,1781,90,'r522','Drakkin'),(null,1783,10,'r330','Guktan'),(null,1783,10,'r522','Drakkin'),(null,1784,-1000,'r330','Guktan'),(null,1784,-1000,'r522','Drakkin'),(null,1785,90,'r330','Guktan'),(null,1785,90,'r522','Drakkin'),(null,1786,10,'r330','Guktan'),(null,1786,10,'r522','Drakkin'),(null,1787,-2000,'r330','Guktan'),(null,1787,-2000,'r522','Drakkin'),(null,1788,-2000,'r330','Guktan'),(null,1788,-2000,'r522','Drakkin'),(null,1789,-110,'r330','Guktan'),(null,1789,-110,'r522','Drakkin'),(null,1790,-1000,'r330','Guktan'),(null,1790,-1000,'r522','Drakkin'),(null,1791,-110,'r330','Guktan'),(null,1791,-110,'r522','Drakkin'),(null,1792,-1000,'r330','Guktan'),(null,1792,-1000,'r522','Drakkin'),(null,1793,-110,'r330','Guktan'),(null,1793,-110,'r522','Drakkin'),(null,1794,-1000,'r330','Guktan'),(null,1794,-1000,'r522','Drakkin'),(null,1795,-110,'r330','Guktan'),(null,1795,-110,'r522','Drakkin'),(null,1796,-1000,'r330','Guktan'),(null,1796,-1000,'r522','Drakkin'),(null,1798,-110,'r330','Guktan'),(null,1798,-110,'r522','Drakkin'),(null,1799,-1000,'r330','Guktan'),(null,1799,-1000,'r522','Drakkin'),(null,1801,0,'r330','Guktan'),(null,1801,0,'r522','Drakkin'),(null,1802,-1000,'r330','Guktan'),(null,1802,-1000,'r522','Drakkin'),(null,1817,-500,'r330','Guktan'),(null,1817,-500,'r522','Drakkin'),(null,1818,-1000,'r330','Guktan'),(null,1818,-1000,'r522','Drakkin'),(null,1819,-100,'r330','Guktan'),(null,1819,-100,'r522','Drakkin'),(null,1820,100,'r330','Guktan'),(null,1820,100,'r522','Drakkin'),(null,1821,-101,'r330','Guktan'),(null,1821,-101,'r522','Drakkin'),(null,1823,-1000,'r330','Guktan'),(null,1823,-1000,'r522','Drakkin'),(null,1824,-1000,'r330','Guktan'),(null,1824,-1000,'r522','Drakkin'),(null,1828,-1000,'r330','Guktan'),(null,1828,-1000,'r522','Drakkin'),(null,1829,-1000,'r330','Guktan'),(null,1829,-1000,'r522','Drakkin'),(null,1830,-800,'r330','Guktan'),(null,1830,-800,'r522','Drakkin'),(null,1831,-800,'r330','Guktan'),(null,1831,-800,'r522','Drakkin'),(null,1846,-2000,'r330','Guktan'),(null,1846,-2000,'r522','Drakkin'),(null,1847,-2000,'r330','Guktan'),(null,1847,-2000,'r522','Drakkin'),(null,1852,-2000,'r330','Guktan'),(null,1852,-2000,'r522','Drakkin'),(null,1853,-1000,'r330','Guktan'),(null,1853,-1000,'r522','Drakkin'),(null,1854,-1000,'r330','Guktan'),(null,1854,-1000,'r522','Drakkin'),(null,1855,-800,'r330','Guktan'),(null,1855,-800,'r522','Drakkin'),(null,1856,-75,'r330','Guktan'),(null,1856,-75,'r522','Drakkin'),(null,1857,-1000,'r330','Guktan'),(null,1857,-1000,'r522','Drakkin'),(null,1858,-1000,'r330','Guktan'),(null,1858,-1000,'r522','Drakkin'),(null,1859,250,'r330','Guktan'),(null,1859,-250,'r522','Drakkin'),(null,1860,-250,'r330','Guktan'),(null,1860,250,'r522','Drakkin'),(null,1862,-75,'r330','Guktan'),(null,1862,-75,'r522','Drakkin'),(null,1863,-600,'r330','Guktan'),(null,1863,-600,'r522','Drakkin'),(null,1864,-600,'r330','Guktan'),(null,1864,-600,'r522','Drakkin'),(null,1865,-600,'r330','Guktan'),(null,1865,-600,'r522','Drakkin'),(null,1866,-600,'r330','Guktan'),(null,1866,-600,'r522','Drakkin'),(null,1867,1,'r330','Guktan'),(null,1867,1,'r522','Drakkin'),(null,1868,1,'r330','Guktan'),(null,1868,1,'r522','Drakkin'),(null,1869,1,'r330','Guktan'),(null,1869,1,'r522','Drakkin'),(null,1870,1,'r330','Guktan'),(null,1870,1,'r522','Drakkin'),(null,1872,1,'r330','Guktan'),(null,1872,1,'r522','Drakkin'); +/*!40000 ALTER TABLE `faction_list_mod` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2020-05-25 16:13:42 From 0e04e42beaa167235a990860cdace221677fb6c1 Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Mon, 25 May 2020 16:48:03 -0400 Subject: [PATCH 180/272] Added two missing agnostic mods --- utils/sql/git/optional/drakkin_guktan_faction_data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/sql/git/optional/drakkin_guktan_faction_data.sql b/utils/sql/git/optional/drakkin_guktan_faction_data.sql index 4c6fe8d97..7e6417653 100644 --- a/utils/sql/git/optional/drakkin_guktan_faction_data.sql +++ b/utils/sql/git/optional/drakkin_guktan_faction_data.sql @@ -17,7 +17,7 @@ LOCK TABLES `faction_list_mod` WRITE; /*!40000 ALTER TABLE `faction_list_mod` DISABLE KEYS */; -REPLACE INTO `faction_list_mod` VALUES (null,65,-600,'r330','Guktan'),(null,65,-600,'r522','Drakkin'),(null,106,-50,'r330','Guktan'),(null,106,-50,'r522','Drakkin'),(null,217,-500,'r330','Guktan'),(null,217,-500,'r522','Drakkin'),(null,218,-1000,'r330','Guktan'),(null,218,-1000,'r522','Drakkin'),(null,220,50,'r330','Guktan'),(null,220,50,'r522','Drakkin'),(null,221,50,'r330','Guktan'),(null,221,50,'r522','Drakkin'),(null,222,-750,'r330','Guktan'),(null,222,-750,'r522','Drakkin'),(null,223,50,'r330','Guktan'),(null,223,50,'r522','Drakkin'),(null,225,-875,'r330','Guktan'),(null,225,-875,'r522','Drakkin'),(null,227,-10,'r330','Guktan'),(null,227,-10,'r522','Drakkin'),(null,228,-750,'r330','Guktan'),(null,228,-750,'r522','Drakkin'),(null,230,50,'r330','Guktan'),(null,230,50,'r522','Drakkin'),(null,231,-100,'r330','Guktan'),(null,231,-100,'r522','Drakkin'),(null,232,-501,'r330','Guktan'),(null,232,-501,'r522','Drakkin'),(null,233,-100,'r330','Guktan'),(null,233,-100,'r522','Drakkin'),(null,234,-750,'r330','Guktan'),(null,234,-750,'r522','Drakkin'),(null,235,-1000,'r330','Guktan'),(null,235,-1000,'r522','Drakkin'),(null,236,-50,'r330','Guktan'),(null,236,-50,'r522','Drakkin'),(null,237,-500,'r330','Guktan'),(null,237,-500,'r522','Drakkin'),(null,238,-25,'r330','Guktan'),(null,238,-25,'r522','Drakkin'),(null,239,-50,'r330','Guktan'),(null,239,-50,'r522','Drakkin'),(null,240,-50,'r330','Guktan'),(null,240,-50,'r522','Drakkin'),(null,241,-50,'r330','Guktan'),(null,241,-50,'r522','Drakkin'),(null,242,-150,'r330','Guktan'),(null,242,-150,'r522','Drakkin'),(null,244,-200,'r330','Guktan'),(null,244,-200,'r522','Drakkin'),(null,245,-25,'r330','Guktan'),(null,245,-25,'r522','Drakkin'),(null,246,-10,'r330','Guktan'),(null,246,-10,'r522','Drakkin'),(null,247,-1000,'r330','Guktan'),(null,247,-1000,'r522','Drakkin'),(null,248,-25,'r330','Guktan'),(null,248,-25,'r522','Drakkin'),(null,249,-2000,'r330','Guktan'),(null,249,-2000,'r522','Drakkin'),(null,250,-1000,'r330','Guktan'),(null,250,-1000,'r522','Drakkin'),(null,251,-499,'r330','Guktan'),(null,251,-499,'r522','Drakkin'),(null,252,-1000,'r330','Guktan'),(null,252,-1000,'r522','Drakkin'),(null,253,-1000,'r330','Guktan'),(null,253,-1000,'r522','Drakkin'),(null,254,-50,'r330','Guktan'),(null,254,-50,'r522','Drakkin'),(null,255,-50,'r330','Guktan'),(null,255,-50,'r522','Drakkin'),(null,256,-1000,'r330','Guktan'),(null,256,-1000,'r522','Drakkin'),(null,257,-1000,'r330','Guktan'),(null,257,-1000,'r522','Drakkin'),(null,258,-1000,'r330','Guktan'),(null,258,-1000,'r522','Drakkin'),(null,259,-1000,'r330','Guktan'),(null,259,-1000,'r522','Drakkin'),(null,261,-750,'r330','Guktan'),(null,261,-750,'r522','Drakkin'),(null,263,-15,'r330','Guktan'),(null,263,-15,'r522','Drakkin'),(null,264,-50,'r330','Guktan'),(null,264,-50,'r522','Drakkin'),(null,265,-500,'r330','Guktan'),(null,265,-500,'r522','Drakkin'),(null,266,-1,'r330','Guktan'),(null,266,-1,'r522','Drakkin'),(null,267,-25,'r330','Guktan'),(null,267,-25,'r522','Drakkin'),(null,270,-500,'r330','Guktan'),(null,270,-500,'r522','Drakkin'),(null,271,50,'r330','Guktan'),(null,271,50,'r522','Drakkin'),(null,272,50,'r330','Guktan'),(null,272,50,'r522','Drakkin'),(null,274,-10,'r330','Guktan'),(null,274,-10,'r522','Drakkin'),(null,275,-10,'r330','Guktan'),(null,275,-10,'r522','Drakkin'),(null,276,-50,'r330','Guktan'),(null,276,-50,'r522','Drakkin'),(null,277,-450,'r330','Guktan'),(null,277,-450,'r522','Drakkin'),(null,278,-500,'r330','Guktan'),(null,278,-500,'r522','Drakkin'),(null,279,-1,'r330','Guktan'),(null,279,-1,'r522','Drakkin'),(null,280,50,'r330','Guktan'),(null,280,50,'r522','Drakkin'),(null,282,-1000,'r330','Guktan'),(null,282,-1000,'r522','Drakkin'),(null,283,-1000,'r330','Guktan'),(null,283,-1000,'r522','Drakkin'),(null,284,50,'r330','Guktan'),(null,284,50,'r522','Drakkin'),(null,285,-2000,'r330','Guktan'),(null,285,-2000,'r522','Drakkin'),(null,287,-1000,'r330','Guktan'),(null,287,-1000,'r522','Drakkin'),(null,288,-50,'r330','Guktan'),(null,288,-50,'r522','Drakkin'),(null,289,-50,'r330','Guktan'),(null,289,-50,'r522','Drakkin'),(null,290,-50,'r330','Guktan'),(null,290,-50,'r522','Drakkin'),(null,291,50,'r330','Guktan'),(null,291,50,'r522','Drakkin'),(null,292,-25,'r330','Guktan'),(null,292,-25,'r522','Drakkin'),(null,293,-1,'r330','Guktan'),(null,293,-1,'r522','Drakkin'),(null,295,-1000,'r330','Guktan'),(null,295,-1000,'r522','Drakkin'),(null,297,-1,'r330','Guktan'),(null,297,-1,'r522','Drakkin'),(null,299,-1000,'r330','Guktan'),(null,299,-1000,'r522','Drakkin'),(null,302,50,'r330','Guktan'),(null,302,50,'r522','Drakkin'),(null,304,-75,'r330','Guktan'),(null,304,-75,'r522','Drakkin'),(null,305,-99,'r330','Guktan'),(null,305,-99,'r522','Drakkin'),(null,306,-1000,'r330','Guktan'),(null,306,-1000,'r522','Drakkin'),(null,307,-1000,'r330','Guktan'),(null,307,-1000,'r522','Drakkin'),(null,308,-750,'r330','Guktan'),(null,308,-750,'r522','Drakkin'),(null,309,50,'r330','Guktan'),(null,309,50,'r522','Drakkin'),(null,310,-25,'r330','Guktan'),(null,310,-25,'r522','Drakkin'),(null,311,50,'r330','Guktan'),(null,311,50,'r522','Drakkin'),(null,312,-75,'r330','Guktan'),(null,312,-75,'r522','Drakkin'),(null,313,-1000,'r330','Guktan'),(null,313,-1000,'r522','Drakkin'),(null,315,-1000,'r330','Guktan'),(null,315,-1000,'r522','Drakkin'),(null,316,-1,'r330','Guktan'),(null,316,-1,'r522','Drakkin'),(null,317,-1000,'r330','Guktan'),(null,317,-1000,'r522','Drakkin'),(null,318,-75,'r330','Guktan'),(null,318,-75,'r522','Drakkin'),(null,319,-1000,'r330','Guktan'),(null,319,-1000,'r522','Drakkin'),(null,320,-50,'r330','Guktan'),(null,320,-50,'r522','Drakkin'),(null,321,-875,'r330','Guktan'),(null,321,-875,'r522','Drakkin'),(null,323,-75,'r330','Guktan'),(null,323,-75,'r522','Drakkin'),(null,325,-30,'r330','Guktan'),(null,325,-30,'r522','Drakkin'),(null,326,-50,'r330','Guktan'),(null,326,-50,'r522','Drakkin'),(null,327,-25,'r330','Guktan'),(null,327,-25,'r522','Drakkin'),(null,328,-50,'r330','Guktan'),(null,328,-50,'r522','Drakkin'),(null,333,-10,'r330','Guktan'),(null,333,-10,'r522','Drakkin'),(null,334,-500,'r330','Guktan'),(null,334,-500,'r522','Drakkin'),(null,336,50,'r330','Guktan'),(null,336,50,'r522','Drakkin'),(null,337,-875,'r330','Guktan'),(null,337,-875,'r522','Drakkin'),(null,338,-750,'r330','Guktan'),(null,338,-750,'r522','Drakkin'),(null,340,-250,'r330','Guktan'),(null,340,-250,'r522','Drakkin'),(null,342,50,'r330','Guktan'),(null,342,50,'r522','Drakkin'),(null,343,-600,'r330','Guktan'),(null,343,-600,'r522','Drakkin'),(null,346,50,'r330','Guktan'),(null,346,50,'r522','Drakkin'),(null,362,50,'r330','Guktan'),(null,362,50,'r522','Drakkin'),(null,363,-250,'r330','Guktan'),(null,363,-250,'r522','Drakkin'),(null,364,-1000,'r330','Guktan'),(null,364,-1000,'r522','Drakkin'),(null,370,-200,'r330','Guktan'),(null,370,-200,'r522','Drakkin'),(null,371,-875,'r330','Guktan'),(null,371,-875,'r522','Drakkin'),(null,372,-875,'r330','Guktan'),(null,372,-875,'r522','Drakkin'),(null,373,-750,'r330','Guktan'),(null,373,-750,'r522','Drakkin'),(null,375,-1000,'r330','Guktan'),(null,375,-1000,'r522','Drakkin'),(null,377,-875,'r330','Guktan'),(null,377,-875,'r522','Drakkin'),(null,378,-1600,'r330','Guktan'),(null,378,-1600,'r522','Drakkin'),(null,379,-550,'r330','Guktan'),(null,379,-550,'r522','Drakkin'),(null,382,-50,'r330','Guktan'),(null,382,-50,'r522','Drakkin'),(null,387,-1000,'r330','Guktan'),(null,387,-1000,'r522','Drakkin'),(null,390,-100,'r330','Guktan'),(null,390,-100,'r522','Drakkin'),(null,391,-100,'r330','Guktan'),(null,391,-100,'r522','Drakkin'),(null,394,-500,'r330','Guktan'),(null,394,-500,'r522','Drakkin'),(null,398,-1000,'r330','Guktan'),(null,398,-1000,'r522','Drakkin'),(null,401,-25,'r330','Guktan'),(null,401,-25,'r522','Drakkin'),(null,405,-200,'r330','Guktan'),(null,405,-200,'r522','Drakkin'),(null,406,-100,'r330','Guktan'),(null,406,-100,'r522','Drakkin'),(null,407,-800,'r330','Guktan'),(null,407,-800,'r522','Drakkin'),(null,409,-625,'r330','Guktan'),(null,409,-625,'r522','Drakkin'),(null,412,-475,'r330','Guktan'),(null,412,-475,'r522','Drakkin'),(null,415,50,'r330','Guktan'),(null,415,50,'r522','Drakkin'),(null,416,-400,'r330','Guktan'),(null,416,-400,'r522','Drakkin'),(null,418,-750,'r330','Guktan'),(null,418,-750,'r522','Drakkin'),(null,419,-550,'r330','Guktan'),(null,419,-550,'r522','Drakkin'),(null,420,-1000,'r330','Guktan'),(null,420,-1000,'r522','Drakkin'),(null,421,-600,'r330','Guktan'),(null,421,-600,'r522','Drakkin'),(null,423,-1000,'r330','Guktan'),(null,423,-1000,'r522','Drakkin'),(null,425,-1000,'r330','Guktan'),(null,425,-1000,'r522','Drakkin'),(null,426,-1000,'r330','Guktan'),(null,426,-1000,'r522','Drakkin'),(null,427,-400,'r330','Guktan'),(null,427,-400,'r522','Drakkin'),(null,428,-600,'r330','Guktan'),(null,428,-600,'r522','Drakkin'),(null,429,-800,'r330','Guktan'),(null,429,-800,'r522','Drakkin'),(null,430,-800,'r330','Guktan'),(null,430,-800,'r522','Drakkin'),(null,431,-800,'r330','Guktan'),(null,431,-800,'r522','Drakkin'),(null,434,-1000,'r330','Guktan'),(null,434,-1000,'r522','Drakkin'),(null,435,-1000,'r330','Guktan'),(null,435,-1000,'r522','Drakkin'),(null,436,-800,'r330','Guktan'),(null,436,-800,'r522','Drakkin'),(null,440,-1000,'r330','Guktan'),(null,440,-1000,'r522','Drakkin'),(null,441,-1000,'r330','Guktan'),(null,441,-1000,'r522','Drakkin'),(null,442,-1000,'r330','Guktan'),(null,442,-1000,'r522','Drakkin'),(null,443,-1000,'r330','Guktan'),(null,443,-1000,'r522','Drakkin'),(null,444,-1000,'r330','Guktan'),(null,444,-1000,'r522','Drakkin'),(null,445,-1000,'r330','Guktan'),(null,445,-1000,'r522','Drakkin'),(null,446,-1000,'r330','Guktan'),(null,446,-1000,'r522','Drakkin'),(null,447,200,'r330','Guktan'),(null,447,200,'r522','Drakkin'),(null,448,-550,'r330','Guktan'),(null,448,-550,'r522','Drakkin'),(null,450,-1000,'r330','Guktan'),(null,450,-1000,'r522','Drakkin'),(null,451,-800,'r330','Guktan'),(null,451,-800,'r522','Drakkin'),(null,452,-600,'r330','Guktan'),(null,452,-600,'r522','Drakkin'),(null,454,-1000,'r330','Guktan'),(null,454,-1000,'r522','Drakkin'),(null,455,-1000,'r330','Guktan'),(null,455,-1000,'r522','Drakkin'),(null,457,-800,'r330','Guktan'),(null,457,-800,'r522','Drakkin'),(null,460,-200,'r330','Guktan'),(null,460,-200,'r522','Drakkin'),(null,461,-1000,'r330','Guktan'),(null,461,-1000,'r522','Drakkin'),(null,462,-800,'r330','Guktan'),(null,462,-800,'r522','Drakkin'),(null,463,-200,'r330','Guktan'),(null,463,-200,'r522','Drakkin'),(null,467,-1000,'r330','Guktan'),(null,467,-1000,'r522','Drakkin'),(null,468,-1000,'r330','Guktan'),(null,468,-1000,'r522','Drakkin'),(null,471,-800,'r330','Guktan'),(null,471,-800,'r522','Drakkin'),(null,472,-1000,'r330','Guktan'),(null,472,-1000,'r522','Drakkin'),(null,474,-99,'r330','Guktan'),(null,474,-99,'r522','Drakkin'),(null,475,-875,'r330','Guktan'),(null,475,-875,'r522','Drakkin'),(null,548,-1000,'r330','Guktan'),(null,548,-1000,'r522','Drakkin'),(null,680,-100,'r330','Guktan'),(null,680,-100,'r522','Drakkin'),(null,711,-750,'r330','Guktan'),(null,711,-750,'r522','Drakkin'),(null,712,-750,'r330','Guktan'),(null,712,-750,'r522','Drakkin'),(null,713,-1000,'r330','Guktan'),(null,713,-1000,'r522','Drakkin'),(null,714,-1000,'r330','Guktan'),(null,714,-1000,'r522','Drakkin'),(null,715,-1000,'r330','Guktan'),(null,715,-1000,'r522','Drakkin'),(null,716,-1000,'r330','Guktan'),(null,716,-1000,'r522','Drakkin'),(null,720,375,'r330','Guktan'),(null,720,375,'r522','Drakkin'),(null,721,375,'r330','Guktan'),(null,721,375,'r522','Drakkin'),(null,1007,-2000,'r330','Guktan'),(null,1007,-2000,'r522','Drakkin'),(null,1010,-2000,'r330','Guktan'),(null,1010,-2000,'r522','Drakkin'),(null,1013,-2000,'r330','Guktan'),(null,1013,-2000,'r522','Drakkin'),(null,1016,-800,'r330','Guktan'),(null,1016,-800,'r522','Drakkin'),(null,1024,-2000,'r330','Guktan'),(null,1024,-2000,'r522','Drakkin'),(null,1025,-2000,'r330','Guktan'),(null,1025,-2000,'r522','Drakkin'),(null,1026,-2000,'r330','Guktan'),(null,1026,-2000,'r522','Drakkin'),(null,1027,-2000,'r330','Guktan'),(null,1027,-2000,'r522','Drakkin'),(null,1028,-2000,'r330','Guktan'),(null,1028,-2000,'r522','Drakkin'),(null,1029,-2000,'r330','Guktan'),(null,1029,-2000,'r522','Drakkin'),(null,1030,-2000,'r330','Guktan'),(null,1030,-2000,'r522','Drakkin'),(null,1031,-2000,'r330','Guktan'),(null,1031,-2000,'r522','Drakkin'),(null,1032,-2000,'r330','Guktan'),(null,1032,-2000,'r522','Drakkin'),(null,1033,-2000,'r330','Guktan'),(null,1033,-2000,'r522','Drakkin'),(null,1034,-2000,'r330','Guktan'),(null,1034,-2000,'r522','Drakkin'),(null,1035,-2000,'r330','Guktan'),(null,1035,-2000,'r522','Drakkin'),(null,1049,-2000,'r330','Guktan'),(null,1049,-2000,'r522','Drakkin'),(null,1051,-2000,'r330','Guktan'),(null,1051,-2000,'r522','Drakkin'),(null,1052,-2000,'r330','Guktan'),(null,1052,-2000,'r522','Drakkin'),(null,1053,-2000,'r330','Guktan'),(null,1053,-2000,'r522','Drakkin'),(null,1054,-2000,'r330','Guktan'),(null,1054,-2000,'r522','Drakkin'),(null,1055,-500,'r330','Guktan'),(null,1055,-500,'r522','Drakkin'),(null,1056,-2000,'r330','Guktan'),(null,1056,-2000,'r522','Drakkin'),(null,1058,-2000,'r330','Guktan'),(null,1058,-2000,'r522','Drakkin'),(null,1059,-1000,'r330','Guktan'),(null,1059,-1000,'r522','Drakkin'),(null,1062,-500,'r330','Guktan'),(null,1062,-500,'r522','Drakkin'),(null,1066,-1000,'r330','Guktan'),(null,1066,-1000,'r522','Drakkin'),(null,1068,-1000,'r330','Guktan'),(null,1068,-1000,'r522','Drakkin'),(null,1069,-1000,'r330','Guktan'),(null,1069,-1000,'r522','Drakkin'),(null,1070,-1000,'r330','Guktan'),(null,1070,-1000,'r522','Drakkin'),(null,1071,-1000,'r330','Guktan'),(null,1071,-1000,'r522','Drakkin'),(null,1072,-1000,'r330','Guktan'),(null,1072,-1000,'r522','Drakkin'),(null,1073,-1000,'r330','Guktan'),(null,1073,-1000,'r522','Drakkin'),(null,1074,-1000,'r330','Guktan'),(null,1074,-1000,'r522','Drakkin'),(null,1075,-1000,'r330','Guktan'),(null,1075,-1000,'r522','Drakkin'),(null,1076,-1000,'r330','Guktan'),(null,1076,-1000,'r522','Drakkin'),(null,1077,-1000,'r330','Guktan'),(null,1077,-1000,'r522','Drakkin'),(null,1078,-1000,'r330','Guktan'),(null,1078,-1000,'r522','Drakkin'),(null,1079,-1000,'r330','Guktan'),(null,1079,-1000,'r522','Drakkin'),(null,1080,-1000,'r330','Guktan'),(null,1080,-1000,'r522','Drakkin'),(null,1086,-2000,'r330','Guktan'),(null,1086,-2000,'r522','Drakkin'),(null,1088,-1000,'r330','Guktan'),(null,1088,-1000,'r522','Drakkin'),(null,1089,-1000,'r330','Guktan'),(null,1089,-1000,'r522','Drakkin'),(null,1090,-1000,'r330','Guktan'),(null,1090,-1000,'r522','Drakkin'),(null,1091,-1000,'r330','Guktan'),(null,1091,-1000,'r522','Drakkin'),(null,1092,-1000,'r330','Guktan'),(null,1092,-1000,'r522','Drakkin'),(null,1093,-1000,'r330','Guktan'),(null,1093,-1000,'r522','Drakkin'),(null,1094,-1000,'r330','Guktan'),(null,1094,-1000,'r522','Drakkin'),(null,1100,-1000,'r330','Guktan'),(null,1100,-1000,'r522','Drakkin'),(null,1101,-1000,'r330','Guktan'),(null,1101,-1000,'r522','Drakkin'),(null,1103,-1000,'r330','Guktan'),(null,1103,-1000,'r522','Drakkin'),(null,1104,-500,'r330','Guktan'),(null,1104,-500,'r522','Drakkin'),(null,1105,-200,'r330','Guktan'),(null,1105,-200,'r522','Drakkin'),(null,1107,-700,'r330','Guktan'),(null,1107,-700,'r522','Drakkin'),(null,1111,-1000,'r330','Guktan'),(null,1111,-1000,'r522','Drakkin'),(null,1112,-1000,'r330','Guktan'),(null,1112,-1000,'r522','Drakkin'),(null,1113,-1000,'r330','Guktan'),(null,1113,-1000,'r522','Drakkin'),(null,1114,-1000,'r330','Guktan'),(null,1114,-1000,'r522','Drakkin'),(null,1115,-1000,'r330','Guktan'),(null,1115,-1000,'r522','Drakkin'),(null,1120,-1000,'r330','Guktan'),(null,1120,-1000,'r522','Drakkin'),(null,1121,-1000,'r330','Guktan'),(null,1121,-1000,'r522','Drakkin'),(null,1123,-100,'r330','Guktan'),(null,1123,-100,'r522','Drakkin'),(null,1124,-1000,'r330','Guktan'),(null,1124,-1000,'r522','Drakkin'),(null,1125,-1000,'r330','Guktan'),(null,1125,-1000,'r522','Drakkin'),(null,1134,-50,'r330','Guktan'),(null,1134,-50,'r522','Drakkin'),(null,1135,-150,'r330','Guktan'),(null,1135,-150,'r522','Drakkin'),(null,1137,100,'r522','Drakkin'),(null,1140,-1000,'r330','Guktan'),(null,1140,-1000,'r522','Drakkin'),(null,1141,-1000,'r330','Guktan'),(null,1141,-1000,'r522','Drakkin'),(null,1142,-1000,'r330','Guktan'),(null,1142,-1000,'r522','Drakkin'),(null,1143,-500,'r330','Guktan'),(null,1143,-500,'r522','Drakkin'),(null,1144,-250,'r330','Guktan'),(null,1144,-250,'r522','Drakkin'),(null,1145,-500,'r330','Guktan'),(null,1145,-500,'r522','Drakkin'),(null,1146,-800,'r330','Guktan'),(null,1146,-800,'r522','Drakkin'),(null,1147,-800,'r330','Guktan'),(null,1147,-800,'r522','Drakkin'),(null,1148,-800,'r330','Guktan'),(null,1148,-800,'r522','Drakkin'),(null,1149,-800,'r330','Guktan'),(null,1149,-800,'r522','Drakkin'),(null,1166,-1000,'r330','Guktan'),(null,1166,-1000,'r522','Drakkin'),(null,1169,-100,'r330','Guktan'),(null,1169,-100,'r522','Drakkin'),(null,1170,-100,'r330','Guktan'),(null,1170,-100,'r522','Drakkin'),(null,1175,-1000,'r330','Guktan'),(null,1175,-1000,'r522','Drakkin'),(null,1176,-1000,'r330','Guktan'),(null,1176,-1000,'r522','Drakkin'),(null,1181,-1000,'r330','Guktan'),(null,1181,-1000,'r522','Drakkin'),(null,1182,-1000,'r330','Guktan'),(null,1182,-1000,'r522','Drakkin'),(null,1183,-500,'r330','Guktan'),(null,1183,-500,'r522','Drakkin'),(null,1184,-500,'r330','Guktan'),(null,1184,-500,'r522','Drakkin'),(null,1185,-500,'r330','Guktan'),(null,1185,-500,'r522','Drakkin'),(null,1186,-1000,'r330','Guktan'),(null,1186,-1000,'r522','Drakkin'),(null,1188,-500,'r330','Guktan'),(null,1188,-500,'r522','Drakkin'),(null,1189,-500,'r330','Guktan'),(null,1189,-500,'r522','Drakkin'),(null,1190,-500,'r330','Guktan'),(null,1190,-500,'r522','Drakkin'),(null,1191,-500,'r330','Guktan'),(null,1191,-500,'r522','Drakkin'),(null,1192,-1000,'r330','Guktan'),(null,1192,-1000,'r522','Drakkin'),(null,1193,-1000,'r330','Guktan'),(null,1193,-1000,'r522','Drakkin'),(null,1194,-1000,'r330','Guktan'),(null,1194,-1000,'r522','Drakkin'),(null,1195,-1000,'r330','Guktan'),(null,1195,-1000,'r522','Drakkin'),(null,1196,-1000,'r330','Guktan'),(null,1196,-1000,'r522','Drakkin'),(null,1197,-1000,'r330','Guktan'),(null,1197,-1000,'r522','Drakkin'),(null,1198,-1000,'r330','Guktan'),(null,1198,-1000,'r522','Drakkin'),(null,1199,-100,'r330','Guktan'),(null,1199,-100,'r522','Drakkin'),(null,1200,-100,'r330','Guktan'),(null,1200,-100,'r522','Drakkin'),(null,1201,-1000,'r330','Guktan'),(null,1201,-1000,'r522','Drakkin'),(null,1202,-1000,'r330','Guktan'),(null,1202,-1000,'r522','Drakkin'),(null,1203,-300,'r330','Guktan'),(null,1203,-300,'r522','Drakkin'),(null,1204,-300,'r330','Guktan'),(null,1204,-300,'r522','Drakkin'),(null,1205,-300,'r330','Guktan'),(null,1205,-300,'r522','Drakkin'),(null,1209,-500,'r330','Guktan'),(null,1209,-500,'r522','Drakkin'),(null,1210,-1000,'r330','Guktan'),(null,1210,-1000,'r522','Drakkin'),(null,1211,100,'r330','Guktan'),(null,1211,100,'r522','Drakkin'),(null,1212,-100,'r330','Guktan'),(null,1212,-100,'r522','Drakkin'),(null,1213,-1000,'r330','Guktan'),(null,1213,-1000,'r522','Drakkin'),(null,1216,-1000,'r330','Guktan'),(null,1216,-1000,'r522','Drakkin'),(null,1220,-1000,'r330','Guktan'),(null,1220,-1000,'r522','Drakkin'),(null,1222,-500,'r330','Guktan'),(null,1222,-500,'r522','Drakkin'),(null,1223,-500,'r330','Guktan'),(null,1223,-500,'r522','Drakkin'),(null,1224,-500,'r330','Guktan'),(null,1224,-500,'r522','Drakkin'),(null,1225,-500,'r330','Guktan'),(null,1225,-500,'r522','Drakkin'),(null,1226,-500,'r330','Guktan'),(null,1226,-500,'r522','Drakkin'),(null,1227,-500,'r330','Guktan'),(null,1227,-500,'r522','Drakkin'),(null,1229,-1000,'r330','Guktan'),(null,1229,-1000,'r522','Drakkin'),(null,1230,-1000,'r330','Guktan'),(null,1230,-1000,'r522','Drakkin'),(null,1232,1,'r330','Guktan'),(null,1232,1,'r522','Drakkin'),(null,1233,-1000,'r330','Guktan'),(null,1233,-1000,'r522','Drakkin'),(null,1234,1,'r330','Guktan'),(null,1234,1,'r522','Drakkin'),(null,1235,-2000,'r330','Guktan'),(null,1235,-2000,'r522','Drakkin'),(null,1237,-2000,'r330','Guktan'),(null,1237,-2000,'r522','Drakkin'),(null,1238,-100,'r330','Guktan'),(null,1238,-100,'r522','Drakkin'),(null,1241,-750,'r330','Guktan'),(null,1241,-750,'r522','Drakkin'),(null,1242,-500,'r330','Guktan'),(null,1242,-500,'r522','Drakkin'),(null,1243,-2000,'r330','Guktan'),(null,1243,-2000,'r522','Drakkin'),(null,1244,-50,'r330','Guktan'),(null,1244,-50,'r522','Drakkin'),(null,1483,-1000,'r330','Guktan'),(null,1483,-1000,'r522','Drakkin'),(null,1485,-400,'r330','Guktan'),(null,1485,-400,'r522','Drakkin'),(null,1486,-250,'r330','Guktan'),(null,1486,-250,'r522','Drakkin'),(null,1490,-1000,'r330','Guktan'),(null,1490,-1000,'r522','Drakkin'),(null,1491,-1000,'r330','Guktan'),(null,1491,-1000,'r522','Drakkin'),(null,1500,-250,'r330','Guktan'),(null,1500,-250,'r522','Drakkin'),(null,1501,-550,'r330','Guktan'),(null,1501,-550,'r522','Drakkin'),(null,1508,-50,'r330','Guktan'),(null,1508,-50,'r522','Drakkin'),(null,1509,-50,'r330','Guktan'),(null,1509,-50,'r522','Drakkin'),(null,1510,-99,'r330','Guktan'),(null,1510,-99,'r522','Drakkin'),(null,1511,-200,'r330','Guktan'),(null,1511,-200,'r522','Drakkin'),(null,1512,-200,'r330','Guktan'),(null,1512,-200,'r522','Drakkin'),(null,1516,-1000,'r330','Guktan'),(null,1516,-1000,'r522','Drakkin'),(null,1519,-1000,'r330','Guktan'),(null,1519,-1000,'r522','Drakkin'),(null,1520,-100,'r330','Guktan'),(null,1520,-100,'r522','Drakkin'),(null,1521,-2000,'r330','Guktan'),(null,1521,-2000,'r522','Drakkin'),(null,1522,-50,'r330','Guktan'),(null,1522,-50,'r522','Drakkin'),(null,1527,-1000,'r330','Guktan'),(null,1527,-1000,'r522','Drakkin'),(null,1528,-1000,'r330','Guktan'),(null,1528,-1000,'r522','Drakkin'),(null,1535,-1000,'r330','Guktan'),(null,1535,-1000,'r522','Drakkin'),(null,1537,-1,'r330','Guktan'),(null,1537,-1,'r522','Drakkin'),(null,1542,-350,'r330','Guktan'),(null,1542,-350,'r522','Drakkin'),(null,1547,-250,'r330','Guktan'),(null,1547,-250,'r522','Drakkin'),(null,1555,-550,'r330','Guktan'),(null,1555,-550,'r522','Drakkin'),(null,1556,-400,'r330','Guktan'),(null,1556,-400,'r522','Drakkin'),(null,1562,-1000,'r330','Guktan'),(null,1562,-1000,'r522','Drakkin'),(null,1563,-99,'r330','Guktan'),(null,1563,-99,'r522','Drakkin'),(null,1564,-1000,'r330','Guktan'),(null,1564,-1000,'r522','Drakkin'),(null,1565,-99,'r330','Guktan'),(null,1565,-99,'r522','Drakkin'),(null,1568,-1000,'r330','Guktan'),(null,1568,-1000,'r522','Drakkin'),(null,1570,-800,'r330','Guktan'),(null,1570,-800,'r522','Drakkin'),(null,1571,-1000,'r330','Guktan'),(null,1571,-1000,'r522','Drakkin'),(null,1573,-250,'r330','Guktan'),(null,1573,-250,'r522','Drakkin'),(null,1574,-800,'r330','Guktan'),(null,1574,-800,'r522','Drakkin'),(null,1583,-800,'r330','Guktan'),(null,1583,-800,'r522','Drakkin'),(null,1587,-1000,'r330','Guktan'),(null,1587,-1000,'r522','Drakkin'),(null,1598,-50,'r330','Guktan'),(null,1598,-50,'r522','Drakkin'),(null,1599,-1000,'r330','Guktan'),(null,1599,-1000,'r522','Drakkin'),(null,1600,-1000,'r330','Guktan'),(null,1600,-1000,'r522','Drakkin'),(null,1601,-475,'r330','Guktan'),(null,1601,-475,'r522','Drakkin'),(null,1603,-75,'r330','Guktan'),(null,1603,-75,'r522','Drakkin'),(null,1605,50,'r330','Guktan'),(null,1605,50,'r522','Drakkin'),(null,1607,-1000,'r330','Guktan'),(null,1607,-1000,'r522','Drakkin'),(null,1610,-1000,'r330','Guktan'),(null,1610,-1000,'r522','Drakkin'),(null,1611,-1000,'r330','Guktan'),(null,1611,-1000,'r522','Drakkin'),(null,1612,-1000,'r330','Guktan'),(null,1612,-1000,'r522','Drakkin'),(null,1613,-1000,'r330','Guktan'),(null,1613,-1000,'r522','Drakkin'),(null,1618,-1000,'r330','Guktan'),(null,1618,-1000,'r522','Drakkin'),(null,1620,-250,'r330','Guktan'),(null,1620,-250,'r522','Drakkin'),(null,1621,-1000,'r330','Guktan'),(null,1621,-1000,'r522','Drakkin'),(null,1622,-480,'r330','Guktan'),(null,1622,-480,'r522','Drakkin'),(null,1623,-1000,'r330','Guktan'),(null,1623,-1000,'r522','Drakkin'),(null,1624,-1000,'r330','Guktan'),(null,1624,-1000,'r522','Drakkin'),(null,1627,-95,'r330','Guktan'),(null,1627,-95,'r522','Drakkin'),(null,1628,-700,'r330','Guktan'),(null,1628,-700,'r522','Drakkin'),(null,1629,-1000,'r330','Guktan'),(null,1629,-1000,'r522','Drakkin'),(null,1633,-1000,'r330','Guktan'),(null,1633,-1000,'r522','Drakkin'),(null,1643,-1000,'r330','Guktan'),(null,1643,-1000,'r522','Drakkin'),(null,1659,-1000,'r330','Guktan'),(null,1659,-1000,'r522','Drakkin'),(null,1660,-1000,'r330','Guktan'),(null,1660,-1000,'r522','Drakkin'),(null,1665,-1000,'r330','Guktan'),(null,1665,-1000,'r522','Drakkin'),(null,1671,-400,'r330','Guktan'),(null,1671,-400,'r522','Drakkin'),(null,1674,-1000,'r330','Guktan'),(null,1674,-1000,'r522','Drakkin'),(null,1675,-1000,'r330','Guktan'),(null,1675,-1000,'r522','Drakkin'),(null,1676,-1000,'r330','Guktan'),(null,1676,-1000,'r522','Drakkin'),(null,1677,-100,'r330','Guktan'),(null,1677,-100,'r522','Drakkin'),(null,1679,-100,'r330','Guktan'),(null,1679,-100,'r522','Drakkin'),(null,1680,-300,'r330','Guktan'),(null,1680,-300,'r522','Drakkin'),(null,1681,-300,'r330','Guktan'),(null,1681,-300,'r522','Drakkin'),(null,1701,-1000,'r330','Guktan'),(null,1701,-1000,'r522','Drakkin'),(null,1703,-1000,'r330','Guktan'),(null,1703,-1000,'r522','Drakkin'),(null,1716,100,'r330','Guktan'),(null,1717,100,'r330','Guktan'),(null,1718,100,'r330','Guktan'),(null,1720,100,'r330','Guktan'),(null,1722,-1000,'r330','Guktan'),(null,1722,-1000,'r522','Drakkin'),(null,1728,-1000,'r330','Guktan'),(null,1728,-1000,'r522','Drakkin'),(null,1729,-1000,'r330','Guktan'),(null,1729,-1000,'r522','Drakkin'),(null,1732,-1000,'r330','Guktan'),(null,1732,-1000,'r522','Drakkin'),(null,1733,-1000,'r330','Guktan'),(null,1733,-1000,'r522','Drakkin'),(null,1734,-1000,'r330','Guktan'),(null,1734,-1000,'r522','Drakkin'),(null,1735,-1000,'r330','Guktan'),(null,1735,-1000,'r522','Drakkin'),(null,1736,-1000,'r330','Guktan'),(null,1736,-1000,'r522','Drakkin'),(null,1737,-1000,'r330','Guktan'),(null,1737,-1000,'r522','Drakkin'),(null,1738,-1000,'r330','Guktan'),(null,1738,-1000,'r522','Drakkin'),(null,1741,-1000,'r330','Guktan'),(null,1741,-1000,'r522','Drakkin'),(null,1742,-1000,'r330','Guktan'),(null,1742,-1000,'r522','Drakkin'),(null,1743,-1000,'r330','Guktan'),(null,1743,-1000,'r522','Drakkin'),(null,1744,-1000,'r330','Guktan'),(null,1744,-1000,'r522','Drakkin'),(null,1745,-1000,'r330','Guktan'),(null,1745,-1000,'r522','Drakkin'),(null,1746,-1000,'r330','Guktan'),(null,1746,-1000,'r522','Drakkin'),(null,1747,-1000,'r330','Guktan'),(null,1747,-1000,'r522','Drakkin'),(null,1748,-1000,'r330','Guktan'),(null,1748,-1000,'r522','Drakkin'),(null,1749,-1000,'r330','Guktan'),(null,1749,-1000,'r522','Drakkin'),(null,1750,-1000,'r330','Guktan'),(null,1750,-1000,'r522','Drakkin'),(null,1755,-1000,'r330','Guktan'),(null,1755,-1000,'r522','Drakkin'),(null,1758,100,'r330','Guktan'),(null,1758,100,'r522','Drakkin'),(null,1759,-100,'r330','Guktan'),(null,1759,-100,'r522','Drakkin'),(null,1761,-100,'r330','Guktan'),(null,1761,-100,'r522','Drakkin'),(null,1762,-1000,'r330','Guktan'),(null,1762,-1000,'r522','Drakkin'),(null,1763,-1001,'r330','Guktan'),(null,1763,-1001,'r522','Drakkin'),(null,1764,-1000,'r330','Guktan'),(null,1764,-1000,'r522','Drakkin'),(null,1765,-1000,'r330','Guktan'),(null,1765,-1000,'r522','Drakkin'),(null,1766,-1000,'r330','Guktan'),(null,1766,-1000,'r522','Drakkin'),(null,1767,-1000,'r330','Guktan'),(null,1767,-1000,'r522','Drakkin'),(null,1768,-1000,'r330','Guktan'),(null,1768,-1000,'r522','Drakkin'),(null,1770,-400,'r330','Guktan'),(null,1770,-400,'r522','Drakkin'),(null,1771,-750,'r330','Guktan'),(null,1771,-750,'r522','Drakkin'),(null,1775,50,'r330','Guktan'),(null,1775,50,'r522','Drakkin'),(null,1777,-2000,'r330','Guktan'),(null,1777,-2000,'r522','Drakkin'),(null,1778,10,'r330','Guktan'),(null,1778,10,'r522','Drakkin'),(null,1779,30,'r330','Guktan'),(null,1779,30,'r522','Drakkin'),(null,1780,90,'r330','Guktan'),(null,1780,90,'r522','Drakkin'),(null,1781,90,'r330','Guktan'),(null,1781,90,'r522','Drakkin'),(null,1783,10,'r330','Guktan'),(null,1783,10,'r522','Drakkin'),(null,1784,-1000,'r330','Guktan'),(null,1784,-1000,'r522','Drakkin'),(null,1785,90,'r330','Guktan'),(null,1785,90,'r522','Drakkin'),(null,1786,10,'r330','Guktan'),(null,1786,10,'r522','Drakkin'),(null,1787,-2000,'r330','Guktan'),(null,1787,-2000,'r522','Drakkin'),(null,1788,-2000,'r330','Guktan'),(null,1788,-2000,'r522','Drakkin'),(null,1789,-110,'r330','Guktan'),(null,1789,-110,'r522','Drakkin'),(null,1790,-1000,'r330','Guktan'),(null,1790,-1000,'r522','Drakkin'),(null,1791,-110,'r330','Guktan'),(null,1791,-110,'r522','Drakkin'),(null,1792,-1000,'r330','Guktan'),(null,1792,-1000,'r522','Drakkin'),(null,1793,-110,'r330','Guktan'),(null,1793,-110,'r522','Drakkin'),(null,1794,-1000,'r330','Guktan'),(null,1794,-1000,'r522','Drakkin'),(null,1795,-110,'r330','Guktan'),(null,1795,-110,'r522','Drakkin'),(null,1796,-1000,'r330','Guktan'),(null,1796,-1000,'r522','Drakkin'),(null,1798,-110,'r330','Guktan'),(null,1798,-110,'r522','Drakkin'),(null,1799,-1000,'r330','Guktan'),(null,1799,-1000,'r522','Drakkin'),(null,1801,0,'r330','Guktan'),(null,1801,0,'r522','Drakkin'),(null,1802,-1000,'r330','Guktan'),(null,1802,-1000,'r522','Drakkin'),(null,1817,-500,'r330','Guktan'),(null,1817,-500,'r522','Drakkin'),(null,1818,-1000,'r330','Guktan'),(null,1818,-1000,'r522','Drakkin'),(null,1819,-100,'r330','Guktan'),(null,1819,-100,'r522','Drakkin'),(null,1820,100,'r330','Guktan'),(null,1820,100,'r522','Drakkin'),(null,1821,-101,'r330','Guktan'),(null,1821,-101,'r522','Drakkin'),(null,1823,-1000,'r330','Guktan'),(null,1823,-1000,'r522','Drakkin'),(null,1824,-1000,'r330','Guktan'),(null,1824,-1000,'r522','Drakkin'),(null,1828,-1000,'r330','Guktan'),(null,1828,-1000,'r522','Drakkin'),(null,1829,-1000,'r330','Guktan'),(null,1829,-1000,'r522','Drakkin'),(null,1830,-800,'r330','Guktan'),(null,1830,-800,'r522','Drakkin'),(null,1831,-800,'r330','Guktan'),(null,1831,-800,'r522','Drakkin'),(null,1846,-2000,'r330','Guktan'),(null,1846,-2000,'r522','Drakkin'),(null,1847,-2000,'r330','Guktan'),(null,1847,-2000,'r522','Drakkin'),(null,1852,-2000,'r330','Guktan'),(null,1852,-2000,'r522','Drakkin'),(null,1853,-1000,'r330','Guktan'),(null,1853,-1000,'r522','Drakkin'),(null,1854,-1000,'r330','Guktan'),(null,1854,-1000,'r522','Drakkin'),(null,1855,-800,'r330','Guktan'),(null,1855,-800,'r522','Drakkin'),(null,1856,-75,'r330','Guktan'),(null,1856,-75,'r522','Drakkin'),(null,1857,-1000,'r330','Guktan'),(null,1857,-1000,'r522','Drakkin'),(null,1858,-1000,'r330','Guktan'),(null,1858,-1000,'r522','Drakkin'),(null,1859,250,'r330','Guktan'),(null,1859,-250,'r522','Drakkin'),(null,1860,-250,'r330','Guktan'),(null,1860,250,'r522','Drakkin'),(null,1862,-75,'r330','Guktan'),(null,1862,-75,'r522','Drakkin'),(null,1863,-600,'r330','Guktan'),(null,1863,-600,'r522','Drakkin'),(null,1864,-600,'r330','Guktan'),(null,1864,-600,'r522','Drakkin'),(null,1865,-600,'r330','Guktan'),(null,1865,-600,'r522','Drakkin'),(null,1866,-600,'r330','Guktan'),(null,1866,-600,'r522','Drakkin'),(null,1867,1,'r330','Guktan'),(null,1867,1,'r522','Drakkin'),(null,1868,1,'r330','Guktan'),(null,1868,1,'r522','Drakkin'),(null,1869,1,'r330','Guktan'),(null,1869,1,'r522','Drakkin'),(null,1870,1,'r330','Guktan'),(null,1870,1,'r522','Drakkin'),(null,1872,1,'r330','Guktan'),(null,1872,1,'r522','Drakkin'); +REPLACE INTO `faction_list_mod` VALUES (null,1021,-100,'d396','Agnostic'),(null,1023,-100,'d396','Agnostic'),(null,65,-600,'r330','Guktan'),(null,65,-600,'r522','Drakkin'),(null,106,-50,'r330','Guktan'),(null,106,-50,'r522','Drakkin'),(null,217,-500,'r330','Guktan'),(null,217,-500,'r522','Drakkin'),(null,218,-1000,'r330','Guktan'),(null,218,-1000,'r522','Drakkin'),(null,220,50,'r330','Guktan'),(null,220,50,'r522','Drakkin'),(null,221,50,'r330','Guktan'),(null,221,50,'r522','Drakkin'),(null,222,-750,'r330','Guktan'),(null,222,-750,'r522','Drakkin'),(null,223,50,'r330','Guktan'),(null,223,50,'r522','Drakkin'),(null,225,-875,'r330','Guktan'),(null,225,-875,'r522','Drakkin'),(null,227,-10,'r330','Guktan'),(null,227,-10,'r522','Drakkin'),(null,228,-750,'r330','Guktan'),(null,228,-750,'r522','Drakkin'),(null,230,50,'r330','Guktan'),(null,230,50,'r522','Drakkin'),(null,231,-100,'r330','Guktan'),(null,231,-100,'r522','Drakkin'),(null,232,-501,'r330','Guktan'),(null,232,-501,'r522','Drakkin'),(null,233,-100,'r330','Guktan'),(null,233,-100,'r522','Drakkin'),(null,234,-750,'r330','Guktan'),(null,234,-750,'r522','Drakkin'),(null,235,-1000,'r330','Guktan'),(null,235,-1000,'r522','Drakkin'),(null,236,-50,'r330','Guktan'),(null,236,-50,'r522','Drakkin'),(null,237,-500,'r330','Guktan'),(null,237,-500,'r522','Drakkin'),(null,238,-25,'r330','Guktan'),(null,238,-25,'r522','Drakkin'),(null,239,-50,'r330','Guktan'),(null,239,-50,'r522','Drakkin'),(null,240,-50,'r330','Guktan'),(null,240,-50,'r522','Drakkin'),(null,241,-50,'r330','Guktan'),(null,241,-50,'r522','Drakkin'),(null,242,-150,'r330','Guktan'),(null,242,-150,'r522','Drakkin'),(null,244,-200,'r330','Guktan'),(null,244,-200,'r522','Drakkin'),(null,245,-25,'r330','Guktan'),(null,245,-25,'r522','Drakkin'),(null,246,-10,'r330','Guktan'),(null,246,-10,'r522','Drakkin'),(null,247,-1000,'r330','Guktan'),(null,247,-1000,'r522','Drakkin'),(null,248,-25,'r330','Guktan'),(null,248,-25,'r522','Drakkin'),(null,249,-2000,'r330','Guktan'),(null,249,-2000,'r522','Drakkin'),(null,250,-1000,'r330','Guktan'),(null,250,-1000,'r522','Drakkin'),(null,251,-499,'r330','Guktan'),(null,251,-499,'r522','Drakkin'),(null,252,-1000,'r330','Guktan'),(null,252,-1000,'r522','Drakkin'),(null,253,-1000,'r330','Guktan'),(null,253,-1000,'r522','Drakkin'),(null,254,-50,'r330','Guktan'),(null,254,-50,'r522','Drakkin'),(null,255,-50,'r330','Guktan'),(null,255,-50,'r522','Drakkin'),(null,256,-1000,'r330','Guktan'),(null,256,-1000,'r522','Drakkin'),(null,257,-1000,'r330','Guktan'),(null,257,-1000,'r522','Drakkin'),(null,258,-1000,'r330','Guktan'),(null,258,-1000,'r522','Drakkin'),(null,259,-1000,'r330','Guktan'),(null,259,-1000,'r522','Drakkin'),(null,261,-750,'r330','Guktan'),(null,261,-750,'r522','Drakkin'),(null,263,-15,'r330','Guktan'),(null,263,-15,'r522','Drakkin'),(null,264,-50,'r330','Guktan'),(null,264,-50,'r522','Drakkin'),(null,265,-500,'r330','Guktan'),(null,265,-500,'r522','Drakkin'),(null,266,-1,'r330','Guktan'),(null,266,-1,'r522','Drakkin'),(null,267,-25,'r330','Guktan'),(null,267,-25,'r522','Drakkin'),(null,270,-500,'r330','Guktan'),(null,270,-500,'r522','Drakkin'),(null,271,50,'r330','Guktan'),(null,271,50,'r522','Drakkin'),(null,272,50,'r330','Guktan'),(null,272,50,'r522','Drakkin'),(null,274,-10,'r330','Guktan'),(null,274,-10,'r522','Drakkin'),(null,275,-10,'r330','Guktan'),(null,275,-10,'r522','Drakkin'),(null,276,-50,'r330','Guktan'),(null,276,-50,'r522','Drakkin'),(null,277,-450,'r330','Guktan'),(null,277,-450,'r522','Drakkin'),(null,278,-500,'r330','Guktan'),(null,278,-500,'r522','Drakkin'),(null,279,-1,'r330','Guktan'),(null,279,-1,'r522','Drakkin'),(null,280,50,'r330','Guktan'),(null,280,50,'r522','Drakkin'),(null,282,-1000,'r330','Guktan'),(null,282,-1000,'r522','Drakkin'),(null,283,-1000,'r330','Guktan'),(null,283,-1000,'r522','Drakkin'),(null,284,50,'r330','Guktan'),(null,284,50,'r522','Drakkin'),(null,285,-2000,'r330','Guktan'),(null,285,-2000,'r522','Drakkin'),(null,287,-1000,'r330','Guktan'),(null,287,-1000,'r522','Drakkin'),(null,288,-50,'r330','Guktan'),(null,288,-50,'r522','Drakkin'),(null,289,-50,'r330','Guktan'),(null,289,-50,'r522','Drakkin'),(null,290,-50,'r330','Guktan'),(null,290,-50,'r522','Drakkin'),(null,291,50,'r330','Guktan'),(null,291,50,'r522','Drakkin'),(null,292,-25,'r330','Guktan'),(null,292,-25,'r522','Drakkin'),(null,293,-1,'r330','Guktan'),(null,293,-1,'r522','Drakkin'),(null,295,-1000,'r330','Guktan'),(null,295,-1000,'r522','Drakkin'),(null,297,-1,'r330','Guktan'),(null,297,-1,'r522','Drakkin'),(null,299,-1000,'r330','Guktan'),(null,299,-1000,'r522','Drakkin'),(null,302,50,'r330','Guktan'),(null,302,50,'r522','Drakkin'),(null,304,-75,'r330','Guktan'),(null,304,-75,'r522','Drakkin'),(null,305,-99,'r330','Guktan'),(null,305,-99,'r522','Drakkin'),(null,306,-1000,'r330','Guktan'),(null,306,-1000,'r522','Drakkin'),(null,307,-1000,'r330','Guktan'),(null,307,-1000,'r522','Drakkin'),(null,308,-750,'r330','Guktan'),(null,308,-750,'r522','Drakkin'),(null,309,50,'r330','Guktan'),(null,309,50,'r522','Drakkin'),(null,310,-25,'r330','Guktan'),(null,310,-25,'r522','Drakkin'),(null,311,50,'r330','Guktan'),(null,311,50,'r522','Drakkin'),(null,312,-75,'r330','Guktan'),(null,312,-75,'r522','Drakkin'),(null,313,-1000,'r330','Guktan'),(null,313,-1000,'r522','Drakkin'),(null,315,-1000,'r330','Guktan'),(null,315,-1000,'r522','Drakkin'),(null,316,-1,'r330','Guktan'),(null,316,-1,'r522','Drakkin'),(null,317,-1000,'r330','Guktan'),(null,317,-1000,'r522','Drakkin'),(null,318,-75,'r330','Guktan'),(null,318,-75,'r522','Drakkin'),(null,319,-1000,'r330','Guktan'),(null,319,-1000,'r522','Drakkin'),(null,320,-50,'r330','Guktan'),(null,320,-50,'r522','Drakkin'),(null,321,-875,'r330','Guktan'),(null,321,-875,'r522','Drakkin'),(null,323,-75,'r330','Guktan'),(null,323,-75,'r522','Drakkin'),(null,325,-30,'r330','Guktan'),(null,325,-30,'r522','Drakkin'),(null,326,-50,'r330','Guktan'),(null,326,-50,'r522','Drakkin'),(null,327,-25,'r330','Guktan'),(null,327,-25,'r522','Drakkin'),(null,328,-50,'r330','Guktan'),(null,328,-50,'r522','Drakkin'),(null,333,-10,'r330','Guktan'),(null,333,-10,'r522','Drakkin'),(null,334,-500,'r330','Guktan'),(null,334,-500,'r522','Drakkin'),(null,336,50,'r330','Guktan'),(null,336,50,'r522','Drakkin'),(null,337,-875,'r330','Guktan'),(null,337,-875,'r522','Drakkin'),(null,338,-750,'r330','Guktan'),(null,338,-750,'r522','Drakkin'),(null,340,-250,'r330','Guktan'),(null,340,-250,'r522','Drakkin'),(null,342,50,'r330','Guktan'),(null,342,50,'r522','Drakkin'),(null,343,-600,'r330','Guktan'),(null,343,-600,'r522','Drakkin'),(null,346,50,'r330','Guktan'),(null,346,50,'r522','Drakkin'),(null,362,50,'r330','Guktan'),(null,362,50,'r522','Drakkin'),(null,363,-250,'r330','Guktan'),(null,363,-250,'r522','Drakkin'),(null,364,-1000,'r330','Guktan'),(null,364,-1000,'r522','Drakkin'),(null,370,-200,'r330','Guktan'),(null,370,-200,'r522','Drakkin'),(null,371,-875,'r330','Guktan'),(null,371,-875,'r522','Drakkin'),(null,372,-875,'r330','Guktan'),(null,372,-875,'r522','Drakkin'),(null,373,-750,'r330','Guktan'),(null,373,-750,'r522','Drakkin'),(null,375,-1000,'r330','Guktan'),(null,375,-1000,'r522','Drakkin'),(null,377,-875,'r330','Guktan'),(null,377,-875,'r522','Drakkin'),(null,378,-1600,'r330','Guktan'),(null,378,-1600,'r522','Drakkin'),(null,379,-550,'r330','Guktan'),(null,379,-550,'r522','Drakkin'),(null,382,-50,'r330','Guktan'),(null,382,-50,'r522','Drakkin'),(null,387,-1000,'r330','Guktan'),(null,387,-1000,'r522','Drakkin'),(null,390,-100,'r330','Guktan'),(null,390,-100,'r522','Drakkin'),(null,391,-100,'r330','Guktan'),(null,391,-100,'r522','Drakkin'),(null,394,-500,'r330','Guktan'),(null,394,-500,'r522','Drakkin'),(null,398,-1000,'r330','Guktan'),(null,398,-1000,'r522','Drakkin'),(null,401,-25,'r330','Guktan'),(null,401,-25,'r522','Drakkin'),(null,405,-200,'r330','Guktan'),(null,405,-200,'r522','Drakkin'),(null,406,-100,'r330','Guktan'),(null,406,-100,'r522','Drakkin'),(null,407,-800,'r330','Guktan'),(null,407,-800,'r522','Drakkin'),(null,409,-625,'r330','Guktan'),(null,409,-625,'r522','Drakkin'),(null,412,-475,'r330','Guktan'),(null,412,-475,'r522','Drakkin'),(null,415,50,'r330','Guktan'),(null,415,50,'r522','Drakkin'),(null,416,-400,'r330','Guktan'),(null,416,-400,'r522','Drakkin'),(null,418,-750,'r330','Guktan'),(null,418,-750,'r522','Drakkin'),(null,419,-550,'r330','Guktan'),(null,419,-550,'r522','Drakkin'),(null,420,-1000,'r330','Guktan'),(null,420,-1000,'r522','Drakkin'),(null,421,-600,'r330','Guktan'),(null,421,-600,'r522','Drakkin'),(null,423,-1000,'r330','Guktan'),(null,423,-1000,'r522','Drakkin'),(null,425,-1000,'r330','Guktan'),(null,425,-1000,'r522','Drakkin'),(null,426,-1000,'r330','Guktan'),(null,426,-1000,'r522','Drakkin'),(null,427,-400,'r330','Guktan'),(null,427,-400,'r522','Drakkin'),(null,428,-600,'r330','Guktan'),(null,428,-600,'r522','Drakkin'),(null,429,-800,'r330','Guktan'),(null,429,-800,'r522','Drakkin'),(null,430,-800,'r330','Guktan'),(null,430,-800,'r522','Drakkin'),(null,431,-800,'r330','Guktan'),(null,431,-800,'r522','Drakkin'),(null,434,-1000,'r330','Guktan'),(null,434,-1000,'r522','Drakkin'),(null,435,-1000,'r330','Guktan'),(null,435,-1000,'r522','Drakkin'),(null,436,-800,'r330','Guktan'),(null,436,-800,'r522','Drakkin'),(null,440,-1000,'r330','Guktan'),(null,440,-1000,'r522','Drakkin'),(null,441,-1000,'r330','Guktan'),(null,441,-1000,'r522','Drakkin'),(null,442,-1000,'r330','Guktan'),(null,442,-1000,'r522','Drakkin'),(null,443,-1000,'r330','Guktan'),(null,443,-1000,'r522','Drakkin'),(null,444,-1000,'r330','Guktan'),(null,444,-1000,'r522','Drakkin'),(null,445,-1000,'r330','Guktan'),(null,445,-1000,'r522','Drakkin'),(null,446,-1000,'r330','Guktan'),(null,446,-1000,'r522','Drakkin'),(null,447,200,'r330','Guktan'),(null,447,200,'r522','Drakkin'),(null,448,-550,'r330','Guktan'),(null,448,-550,'r522','Drakkin'),(null,450,-1000,'r330','Guktan'),(null,450,-1000,'r522','Drakkin'),(null,451,-800,'r330','Guktan'),(null,451,-800,'r522','Drakkin'),(null,452,-600,'r330','Guktan'),(null,452,-600,'r522','Drakkin'),(null,454,-1000,'r330','Guktan'),(null,454,-1000,'r522','Drakkin'),(null,455,-1000,'r330','Guktan'),(null,455,-1000,'r522','Drakkin'),(null,457,-800,'r330','Guktan'),(null,457,-800,'r522','Drakkin'),(null,460,-200,'r330','Guktan'),(null,460,-200,'r522','Drakkin'),(null,461,-1000,'r330','Guktan'),(null,461,-1000,'r522','Drakkin'),(null,462,-800,'r330','Guktan'),(null,462,-800,'r522','Drakkin'),(null,463,-200,'r330','Guktan'),(null,463,-200,'r522','Drakkin'),(null,467,-1000,'r330','Guktan'),(null,467,-1000,'r522','Drakkin'),(null,468,-1000,'r330','Guktan'),(null,468,-1000,'r522','Drakkin'),(null,471,-800,'r330','Guktan'),(null,471,-800,'r522','Drakkin'),(null,472,-1000,'r330','Guktan'),(null,472,-1000,'r522','Drakkin'),(null,474,-99,'r330','Guktan'),(null,474,-99,'r522','Drakkin'),(null,475,-875,'r330','Guktan'),(null,475,-875,'r522','Drakkin'),(null,548,-1000,'r330','Guktan'),(null,548,-1000,'r522','Drakkin'),(null,680,-100,'r330','Guktan'),(null,680,-100,'r522','Drakkin'),(null,711,-750,'r330','Guktan'),(null,711,-750,'r522','Drakkin'),(null,712,-750,'r330','Guktan'),(null,712,-750,'r522','Drakkin'),(null,713,-1000,'r330','Guktan'),(null,713,-1000,'r522','Drakkin'),(null,714,-1000,'r330','Guktan'),(null,714,-1000,'r522','Drakkin'),(null,715,-1000,'r330','Guktan'),(null,715,-1000,'r522','Drakkin'),(null,716,-1000,'r330','Guktan'),(null,716,-1000,'r522','Drakkin'),(null,720,375,'r330','Guktan'),(null,720,375,'r522','Drakkin'),(null,721,375,'r330','Guktan'),(null,721,375,'r522','Drakkin'),(null,1007,-2000,'r330','Guktan'),(null,1007,-2000,'r522','Drakkin'),(null,1010,-2000,'r330','Guktan'),(null,1010,-2000,'r522','Drakkin'),(null,1013,-2000,'r330','Guktan'),(null,1013,-2000,'r522','Drakkin'),(null,1016,-800,'r330','Guktan'),(null,1016,-800,'r522','Drakkin'),(null,1024,-2000,'r330','Guktan'),(null,1024,-2000,'r522','Drakkin'),(null,1025,-2000,'r330','Guktan'),(null,1025,-2000,'r522','Drakkin'),(null,1026,-2000,'r330','Guktan'),(null,1026,-2000,'r522','Drakkin'),(null,1027,-2000,'r330','Guktan'),(null,1027,-2000,'r522','Drakkin'),(null,1028,-2000,'r330','Guktan'),(null,1028,-2000,'r522','Drakkin'),(null,1029,-2000,'r330','Guktan'),(null,1029,-2000,'r522','Drakkin'),(null,1030,-2000,'r330','Guktan'),(null,1030,-2000,'r522','Drakkin'),(null,1031,-2000,'r330','Guktan'),(null,1031,-2000,'r522','Drakkin'),(null,1032,-2000,'r330','Guktan'),(null,1032,-2000,'r522','Drakkin'),(null,1033,-2000,'r330','Guktan'),(null,1033,-2000,'r522','Drakkin'),(null,1034,-2000,'r330','Guktan'),(null,1034,-2000,'r522','Drakkin'),(null,1035,-2000,'r330','Guktan'),(null,1035,-2000,'r522','Drakkin'),(null,1049,-2000,'r330','Guktan'),(null,1049,-2000,'r522','Drakkin'),(null,1051,-2000,'r330','Guktan'),(null,1051,-2000,'r522','Drakkin'),(null,1052,-2000,'r330','Guktan'),(null,1052,-2000,'r522','Drakkin'),(null,1053,-2000,'r330','Guktan'),(null,1053,-2000,'r522','Drakkin'),(null,1054,-2000,'r330','Guktan'),(null,1054,-2000,'r522','Drakkin'),(null,1055,-500,'r330','Guktan'),(null,1055,-500,'r522','Drakkin'),(null,1056,-2000,'r330','Guktan'),(null,1056,-2000,'r522','Drakkin'),(null,1058,-2000,'r330','Guktan'),(null,1058,-2000,'r522','Drakkin'),(null,1059,-1000,'r330','Guktan'),(null,1059,-1000,'r522','Drakkin'),(null,1062,-500,'r330','Guktan'),(null,1062,-500,'r522','Drakkin'),(null,1066,-1000,'r330','Guktan'),(null,1066,-1000,'r522','Drakkin'),(null,1068,-1000,'r330','Guktan'),(null,1068,-1000,'r522','Drakkin'),(null,1069,-1000,'r330','Guktan'),(null,1069,-1000,'r522','Drakkin'),(null,1070,-1000,'r330','Guktan'),(null,1070,-1000,'r522','Drakkin'),(null,1071,-1000,'r330','Guktan'),(null,1071,-1000,'r522','Drakkin'),(null,1072,-1000,'r330','Guktan'),(null,1072,-1000,'r522','Drakkin'),(null,1073,-1000,'r330','Guktan'),(null,1073,-1000,'r522','Drakkin'),(null,1074,-1000,'r330','Guktan'),(null,1074,-1000,'r522','Drakkin'),(null,1075,-1000,'r330','Guktan'),(null,1075,-1000,'r522','Drakkin'),(null,1076,-1000,'r330','Guktan'),(null,1076,-1000,'r522','Drakkin'),(null,1077,-1000,'r330','Guktan'),(null,1077,-1000,'r522','Drakkin'),(null,1078,-1000,'r330','Guktan'),(null,1078,-1000,'r522','Drakkin'),(null,1079,-1000,'r330','Guktan'),(null,1079,-1000,'r522','Drakkin'),(null,1080,-1000,'r330','Guktan'),(null,1080,-1000,'r522','Drakkin'),(null,1086,-2000,'r330','Guktan'),(null,1086,-2000,'r522','Drakkin'),(null,1088,-1000,'r330','Guktan'),(null,1088,-1000,'r522','Drakkin'),(null,1089,-1000,'r330','Guktan'),(null,1089,-1000,'r522','Drakkin'),(null,1090,-1000,'r330','Guktan'),(null,1090,-1000,'r522','Drakkin'),(null,1091,-1000,'r330','Guktan'),(null,1091,-1000,'r522','Drakkin'),(null,1092,-1000,'r330','Guktan'),(null,1092,-1000,'r522','Drakkin'),(null,1093,-1000,'r330','Guktan'),(null,1093,-1000,'r522','Drakkin'),(null,1094,-1000,'r330','Guktan'),(null,1094,-1000,'r522','Drakkin'),(null,1100,-1000,'r330','Guktan'),(null,1100,-1000,'r522','Drakkin'),(null,1101,-1000,'r330','Guktan'),(null,1101,-1000,'r522','Drakkin'),(null,1103,-1000,'r330','Guktan'),(null,1103,-1000,'r522','Drakkin'),(null,1104,-500,'r330','Guktan'),(null,1104,-500,'r522','Drakkin'),(null,1105,-200,'r330','Guktan'),(null,1105,-200,'r522','Drakkin'),(null,1107,-700,'r330','Guktan'),(null,1107,-700,'r522','Drakkin'),(null,1111,-1000,'r330','Guktan'),(null,1111,-1000,'r522','Drakkin'),(null,1112,-1000,'r330','Guktan'),(null,1112,-1000,'r522','Drakkin'),(null,1113,-1000,'r330','Guktan'),(null,1113,-1000,'r522','Drakkin'),(null,1114,-1000,'r330','Guktan'),(null,1114,-1000,'r522','Drakkin'),(null,1115,-1000,'r330','Guktan'),(null,1115,-1000,'r522','Drakkin'),(null,1120,-1000,'r330','Guktan'),(null,1120,-1000,'r522','Drakkin'),(null,1121,-1000,'r330','Guktan'),(null,1121,-1000,'r522','Drakkin'),(null,1123,-100,'r330','Guktan'),(null,1123,-100,'r522','Drakkin'),(null,1124,-1000,'r330','Guktan'),(null,1124,-1000,'r522','Drakkin'),(null,1125,-1000,'r330','Guktan'),(null,1125,-1000,'r522','Drakkin'),(null,1134,-50,'r330','Guktan'),(null,1134,-50,'r522','Drakkin'),(null,1135,-150,'r330','Guktan'),(null,1135,-150,'r522','Drakkin'),(null,1137,100,'r522','Drakkin'),(null,1140,-1000,'r330','Guktan'),(null,1140,-1000,'r522','Drakkin'),(null,1141,-1000,'r330','Guktan'),(null,1141,-1000,'r522','Drakkin'),(null,1142,-1000,'r330','Guktan'),(null,1142,-1000,'r522','Drakkin'),(null,1143,-500,'r330','Guktan'),(null,1143,-500,'r522','Drakkin'),(null,1144,-250,'r330','Guktan'),(null,1144,-250,'r522','Drakkin'),(null,1145,-500,'r330','Guktan'),(null,1145,-500,'r522','Drakkin'),(null,1146,-800,'r330','Guktan'),(null,1146,-800,'r522','Drakkin'),(null,1147,-800,'r330','Guktan'),(null,1147,-800,'r522','Drakkin'),(null,1148,-800,'r330','Guktan'),(null,1148,-800,'r522','Drakkin'),(null,1149,-800,'r330','Guktan'),(null,1149,-800,'r522','Drakkin'),(null,1166,-1000,'r330','Guktan'),(null,1166,-1000,'r522','Drakkin'),(null,1169,-100,'r330','Guktan'),(null,1169,-100,'r522','Drakkin'),(null,1170,-100,'r330','Guktan'),(null,1170,-100,'r522','Drakkin'),(null,1175,-1000,'r330','Guktan'),(null,1175,-1000,'r522','Drakkin'),(null,1176,-1000,'r330','Guktan'),(null,1176,-1000,'r522','Drakkin'),(null,1181,-1000,'r330','Guktan'),(null,1181,-1000,'r522','Drakkin'),(null,1182,-1000,'r330','Guktan'),(null,1182,-1000,'r522','Drakkin'),(null,1183,-500,'r330','Guktan'),(null,1183,-500,'r522','Drakkin'),(null,1184,-500,'r330','Guktan'),(null,1184,-500,'r522','Drakkin'),(null,1185,-500,'r330','Guktan'),(null,1185,-500,'r522','Drakkin'),(null,1186,-1000,'r330','Guktan'),(null,1186,-1000,'r522','Drakkin'),(null,1188,-500,'r330','Guktan'),(null,1188,-500,'r522','Drakkin'),(null,1189,-500,'r330','Guktan'),(null,1189,-500,'r522','Drakkin'),(null,1190,-500,'r330','Guktan'),(null,1190,-500,'r522','Drakkin'),(null,1191,-500,'r330','Guktan'),(null,1191,-500,'r522','Drakkin'),(null,1192,-1000,'r330','Guktan'),(null,1192,-1000,'r522','Drakkin'),(null,1193,-1000,'r330','Guktan'),(null,1193,-1000,'r522','Drakkin'),(null,1194,-1000,'r330','Guktan'),(null,1194,-1000,'r522','Drakkin'),(null,1195,-1000,'r330','Guktan'),(null,1195,-1000,'r522','Drakkin'),(null,1196,-1000,'r330','Guktan'),(null,1196,-1000,'r522','Drakkin'),(null,1197,-1000,'r330','Guktan'),(null,1197,-1000,'r522','Drakkin'),(null,1198,-1000,'r330','Guktan'),(null,1198,-1000,'r522','Drakkin'),(null,1199,-100,'r330','Guktan'),(null,1199,-100,'r522','Drakkin'),(null,1200,-100,'r330','Guktan'),(null,1200,-100,'r522','Drakkin'),(null,1201,-1000,'r330','Guktan'),(null,1201,-1000,'r522','Drakkin'),(null,1202,-1000,'r330','Guktan'),(null,1202,-1000,'r522','Drakkin'),(null,1203,-300,'r330','Guktan'),(null,1203,-300,'r522','Drakkin'),(null,1204,-300,'r330','Guktan'),(null,1204,-300,'r522','Drakkin'),(null,1205,-300,'r330','Guktan'),(null,1205,-300,'r522','Drakkin'),(null,1209,-500,'r330','Guktan'),(null,1209,-500,'r522','Drakkin'),(null,1210,-1000,'r330','Guktan'),(null,1210,-1000,'r522','Drakkin'),(null,1211,100,'r330','Guktan'),(null,1211,100,'r522','Drakkin'),(null,1212,-100,'r330','Guktan'),(null,1212,-100,'r522','Drakkin'),(null,1213,-1000,'r330','Guktan'),(null,1213,-1000,'r522','Drakkin'),(null,1216,-1000,'r330','Guktan'),(null,1216,-1000,'r522','Drakkin'),(null,1220,-1000,'r330','Guktan'),(null,1220,-1000,'r522','Drakkin'),(null,1222,-500,'r330','Guktan'),(null,1222,-500,'r522','Drakkin'),(null,1223,-500,'r330','Guktan'),(null,1223,-500,'r522','Drakkin'),(null,1224,-500,'r330','Guktan'),(null,1224,-500,'r522','Drakkin'),(null,1225,-500,'r330','Guktan'),(null,1225,-500,'r522','Drakkin'),(null,1226,-500,'r330','Guktan'),(null,1226,-500,'r522','Drakkin'),(null,1227,-500,'r330','Guktan'),(null,1227,-500,'r522','Drakkin'),(null,1229,-1000,'r330','Guktan'),(null,1229,-1000,'r522','Drakkin'),(null,1230,-1000,'r330','Guktan'),(null,1230,-1000,'r522','Drakkin'),(null,1232,1,'r330','Guktan'),(null,1232,1,'r522','Drakkin'),(null,1233,-1000,'r330','Guktan'),(null,1233,-1000,'r522','Drakkin'),(null,1234,1,'r330','Guktan'),(null,1234,1,'r522','Drakkin'),(null,1235,-2000,'r330','Guktan'),(null,1235,-2000,'r522','Drakkin'),(null,1237,-2000,'r330','Guktan'),(null,1237,-2000,'r522','Drakkin'),(null,1238,-100,'r330','Guktan'),(null,1238,-100,'r522','Drakkin'),(null,1241,-750,'r330','Guktan'),(null,1241,-750,'r522','Drakkin'),(null,1242,-500,'r330','Guktan'),(null,1242,-500,'r522','Drakkin'),(null,1243,-2000,'r330','Guktan'),(null,1243,-2000,'r522','Drakkin'),(null,1244,-50,'r330','Guktan'),(null,1244,-50,'r522','Drakkin'),(null,1483,-1000,'r330','Guktan'),(null,1483,-1000,'r522','Drakkin'),(null,1485,-400,'r330','Guktan'),(null,1485,-400,'r522','Drakkin'),(null,1486,-250,'r330','Guktan'),(null,1486,-250,'r522','Drakkin'),(null,1490,-1000,'r330','Guktan'),(null,1490,-1000,'r522','Drakkin'),(null,1491,-1000,'r330','Guktan'),(null,1491,-1000,'r522','Drakkin'),(null,1500,-250,'r330','Guktan'),(null,1500,-250,'r522','Drakkin'),(null,1501,-550,'r330','Guktan'),(null,1501,-550,'r522','Drakkin'),(null,1508,-50,'r330','Guktan'),(null,1508,-50,'r522','Drakkin'),(null,1509,-50,'r330','Guktan'),(null,1509,-50,'r522','Drakkin'),(null,1510,-99,'r330','Guktan'),(null,1510,-99,'r522','Drakkin'),(null,1511,-200,'r330','Guktan'),(null,1511,-200,'r522','Drakkin'),(null,1512,-200,'r330','Guktan'),(null,1512,-200,'r522','Drakkin'),(null,1516,-1000,'r330','Guktan'),(null,1516,-1000,'r522','Drakkin'),(null,1519,-1000,'r330','Guktan'),(null,1519,-1000,'r522','Drakkin'),(null,1520,-100,'r330','Guktan'),(null,1520,-100,'r522','Drakkin'),(null,1521,-2000,'r330','Guktan'),(null,1521,-2000,'r522','Drakkin'),(null,1522,-50,'r330','Guktan'),(null,1522,-50,'r522','Drakkin'),(null,1527,-1000,'r330','Guktan'),(null,1527,-1000,'r522','Drakkin'),(null,1528,-1000,'r330','Guktan'),(null,1528,-1000,'r522','Drakkin'),(null,1535,-1000,'r330','Guktan'),(null,1535,-1000,'r522','Drakkin'),(null,1537,-1,'r330','Guktan'),(null,1537,-1,'r522','Drakkin'),(null,1542,-350,'r330','Guktan'),(null,1542,-350,'r522','Drakkin'),(null,1547,-250,'r330','Guktan'),(null,1547,-250,'r522','Drakkin'),(null,1555,-550,'r330','Guktan'),(null,1555,-550,'r522','Drakkin'),(null,1556,-400,'r330','Guktan'),(null,1556,-400,'r522','Drakkin'),(null,1562,-1000,'r330','Guktan'),(null,1562,-1000,'r522','Drakkin'),(null,1563,-99,'r330','Guktan'),(null,1563,-99,'r522','Drakkin'),(null,1564,-1000,'r330','Guktan'),(null,1564,-1000,'r522','Drakkin'),(null,1565,-99,'r330','Guktan'),(null,1565,-99,'r522','Drakkin'),(null,1568,-1000,'r330','Guktan'),(null,1568,-1000,'r522','Drakkin'),(null,1570,-800,'r330','Guktan'),(null,1570,-800,'r522','Drakkin'),(null,1571,-1000,'r330','Guktan'),(null,1571,-1000,'r522','Drakkin'),(null,1573,-250,'r330','Guktan'),(null,1573,-250,'r522','Drakkin'),(null,1574,-800,'r330','Guktan'),(null,1574,-800,'r522','Drakkin'),(null,1583,-800,'r330','Guktan'),(null,1583,-800,'r522','Drakkin'),(null,1587,-1000,'r330','Guktan'),(null,1587,-1000,'r522','Drakkin'),(null,1598,-50,'r330','Guktan'),(null,1598,-50,'r522','Drakkin'),(null,1599,-1000,'r330','Guktan'),(null,1599,-1000,'r522','Drakkin'),(null,1600,-1000,'r330','Guktan'),(null,1600,-1000,'r522','Drakkin'),(null,1601,-475,'r330','Guktan'),(null,1601,-475,'r522','Drakkin'),(null,1603,-75,'r330','Guktan'),(null,1603,-75,'r522','Drakkin'),(null,1605,50,'r330','Guktan'),(null,1605,50,'r522','Drakkin'),(null,1607,-1000,'r330','Guktan'),(null,1607,-1000,'r522','Drakkin'),(null,1610,-1000,'r330','Guktan'),(null,1610,-1000,'r522','Drakkin'),(null,1611,-1000,'r330','Guktan'),(null,1611,-1000,'r522','Drakkin'),(null,1612,-1000,'r330','Guktan'),(null,1612,-1000,'r522','Drakkin'),(null,1613,-1000,'r330','Guktan'),(null,1613,-1000,'r522','Drakkin'),(null,1618,-1000,'r330','Guktan'),(null,1618,-1000,'r522','Drakkin'),(null,1620,-250,'r330','Guktan'),(null,1620,-250,'r522','Drakkin'),(null,1621,-1000,'r330','Guktan'),(null,1621,-1000,'r522','Drakkin'),(null,1622,-480,'r330','Guktan'),(null,1622,-480,'r522','Drakkin'),(null,1623,-1000,'r330','Guktan'),(null,1623,-1000,'r522','Drakkin'),(null,1624,-1000,'r330','Guktan'),(null,1624,-1000,'r522','Drakkin'),(null,1627,-95,'r330','Guktan'),(null,1627,-95,'r522','Drakkin'),(null,1628,-700,'r330','Guktan'),(null,1628,-700,'r522','Drakkin'),(null,1629,-1000,'r330','Guktan'),(null,1629,-1000,'r522','Drakkin'),(null,1633,-1000,'r330','Guktan'),(null,1633,-1000,'r522','Drakkin'),(null,1643,-1000,'r330','Guktan'),(null,1643,-1000,'r522','Drakkin'),(null,1659,-1000,'r330','Guktan'),(null,1659,-1000,'r522','Drakkin'),(null,1660,-1000,'r330','Guktan'),(null,1660,-1000,'r522','Drakkin'),(null,1665,-1000,'r330','Guktan'),(null,1665,-1000,'r522','Drakkin'),(null,1671,-400,'r330','Guktan'),(null,1671,-400,'r522','Drakkin'),(null,1674,-1000,'r330','Guktan'),(null,1674,-1000,'r522','Drakkin'),(null,1675,-1000,'r330','Guktan'),(null,1675,-1000,'r522','Drakkin'),(null,1676,-1000,'r330','Guktan'),(null,1676,-1000,'r522','Drakkin'),(null,1677,-100,'r330','Guktan'),(null,1677,-100,'r522','Drakkin'),(null,1679,-100,'r330','Guktan'),(null,1679,-100,'r522','Drakkin'),(null,1680,-300,'r330','Guktan'),(null,1680,-300,'r522','Drakkin'),(null,1681,-300,'r330','Guktan'),(null,1681,-300,'r522','Drakkin'),(null,1701,-1000,'r330','Guktan'),(null,1701,-1000,'r522','Drakkin'),(null,1703,-1000,'r330','Guktan'),(null,1703,-1000,'r522','Drakkin'),(null,1716,100,'r330','Guktan'),(null,1717,100,'r330','Guktan'),(null,1718,100,'r330','Guktan'),(null,1720,100,'r330','Guktan'),(null,1722,-1000,'r330','Guktan'),(null,1722,-1000,'r522','Drakkin'),(null,1728,-1000,'r330','Guktan'),(null,1728,-1000,'r522','Drakkin'),(null,1729,-1000,'r330','Guktan'),(null,1729,-1000,'r522','Drakkin'),(null,1732,-1000,'r330','Guktan'),(null,1732,-1000,'r522','Drakkin'),(null,1733,-1000,'r330','Guktan'),(null,1733,-1000,'r522','Drakkin'),(null,1734,-1000,'r330','Guktan'),(null,1734,-1000,'r522','Drakkin'),(null,1735,-1000,'r330','Guktan'),(null,1735,-1000,'r522','Drakkin'),(null,1736,-1000,'r330','Guktan'),(null,1736,-1000,'r522','Drakkin'),(null,1737,-1000,'r330','Guktan'),(null,1737,-1000,'r522','Drakkin'),(null,1738,-1000,'r330','Guktan'),(null,1738,-1000,'r522','Drakkin'),(null,1741,-1000,'r330','Guktan'),(null,1741,-1000,'r522','Drakkin'),(null,1742,-1000,'r330','Guktan'),(null,1742,-1000,'r522','Drakkin'),(null,1743,-1000,'r330','Guktan'),(null,1743,-1000,'r522','Drakkin'),(null,1744,-1000,'r330','Guktan'),(null,1744,-1000,'r522','Drakkin'),(null,1745,-1000,'r330','Guktan'),(null,1745,-1000,'r522','Drakkin'),(null,1746,-1000,'r330','Guktan'),(null,1746,-1000,'r522','Drakkin'),(null,1747,-1000,'r330','Guktan'),(null,1747,-1000,'r522','Drakkin'),(null,1748,-1000,'r330','Guktan'),(null,1748,-1000,'r522','Drakkin'),(null,1749,-1000,'r330','Guktan'),(null,1749,-1000,'r522','Drakkin'),(null,1750,-1000,'r330','Guktan'),(null,1750,-1000,'r522','Drakkin'),(null,1755,-1000,'r330','Guktan'),(null,1755,-1000,'r522','Drakkin'),(null,1758,100,'r330','Guktan'),(null,1758,100,'r522','Drakkin'),(null,1759,-100,'r330','Guktan'),(null,1759,-100,'r522','Drakkin'),(null,1761,-100,'r330','Guktan'),(null,1761,-100,'r522','Drakkin'),(null,1762,-1000,'r330','Guktan'),(null,1762,-1000,'r522','Drakkin'),(null,1763,-1001,'r330','Guktan'),(null,1763,-1001,'r522','Drakkin'),(null,1764,-1000,'r330','Guktan'),(null,1764,-1000,'r522','Drakkin'),(null,1765,-1000,'r330','Guktan'),(null,1765,-1000,'r522','Drakkin'),(null,1766,-1000,'r330','Guktan'),(null,1766,-1000,'r522','Drakkin'),(null,1767,-1000,'r330','Guktan'),(null,1767,-1000,'r522','Drakkin'),(null,1768,-1000,'r330','Guktan'),(null,1768,-1000,'r522','Drakkin'),(null,1770,-400,'r330','Guktan'),(null,1770,-400,'r522','Drakkin'),(null,1771,-750,'r330','Guktan'),(null,1771,-750,'r522','Drakkin'),(null,1775,50,'r330','Guktan'),(null,1775,50,'r522','Drakkin'),(null,1777,-2000,'r330','Guktan'),(null,1777,-2000,'r522','Drakkin'),(null,1778,10,'r330','Guktan'),(null,1778,10,'r522','Drakkin'),(null,1779,30,'r330','Guktan'),(null,1779,30,'r522','Drakkin'),(null,1780,90,'r330','Guktan'),(null,1780,90,'r522','Drakkin'),(null,1781,90,'r330','Guktan'),(null,1781,90,'r522','Drakkin'),(null,1783,10,'r330','Guktan'),(null,1783,10,'r522','Drakkin'),(null,1784,-1000,'r330','Guktan'),(null,1784,-1000,'r522','Drakkin'),(null,1785,90,'r330','Guktan'),(null,1785,90,'r522','Drakkin'),(null,1786,10,'r330','Guktan'),(null,1786,10,'r522','Drakkin'),(null,1787,-2000,'r330','Guktan'),(null,1787,-2000,'r522','Drakkin'),(null,1788,-2000,'r330','Guktan'),(null,1788,-2000,'r522','Drakkin'),(null,1789,-110,'r330','Guktan'),(null,1789,-110,'r522','Drakkin'),(null,1790,-1000,'r330','Guktan'),(null,1790,-1000,'r522','Drakkin'),(null,1791,-110,'r330','Guktan'),(null,1791,-110,'r522','Drakkin'),(null,1792,-1000,'r330','Guktan'),(null,1792,-1000,'r522','Drakkin'),(null,1793,-110,'r330','Guktan'),(null,1793,-110,'r522','Drakkin'),(null,1794,-1000,'r330','Guktan'),(null,1794,-1000,'r522','Drakkin'),(null,1795,-110,'r330','Guktan'),(null,1795,-110,'r522','Drakkin'),(null,1796,-1000,'r330','Guktan'),(null,1796,-1000,'r522','Drakkin'),(null,1798,-110,'r330','Guktan'),(null,1798,-110,'r522','Drakkin'),(null,1799,-1000,'r330','Guktan'),(null,1799,-1000,'r522','Drakkin'),(null,1801,0,'r330','Guktan'),(null,1801,0,'r522','Drakkin'),(null,1802,-1000,'r330','Guktan'),(null,1802,-1000,'r522','Drakkin'),(null,1817,-500,'r330','Guktan'),(null,1817,-500,'r522','Drakkin'),(null,1818,-1000,'r330','Guktan'),(null,1818,-1000,'r522','Drakkin'),(null,1819,-100,'r330','Guktan'),(null,1819,-100,'r522','Drakkin'),(null,1820,100,'r330','Guktan'),(null,1820,100,'r522','Drakkin'),(null,1821,-101,'r330','Guktan'),(null,1821,-101,'r522','Drakkin'),(null,1823,-1000,'r330','Guktan'),(null,1823,-1000,'r522','Drakkin'),(null,1824,-1000,'r330','Guktan'),(null,1824,-1000,'r522','Drakkin'),(null,1828,-1000,'r330','Guktan'),(null,1828,-1000,'r522','Drakkin'),(null,1829,-1000,'r330','Guktan'),(null,1829,-1000,'r522','Drakkin'),(null,1830,-800,'r330','Guktan'),(null,1830,-800,'r522','Drakkin'),(null,1831,-800,'r330','Guktan'),(null,1831,-800,'r522','Drakkin'),(null,1846,-2000,'r330','Guktan'),(null,1846,-2000,'r522','Drakkin'),(null,1847,-2000,'r330','Guktan'),(null,1847,-2000,'r522','Drakkin'),(null,1852,-2000,'r330','Guktan'),(null,1852,-2000,'r522','Drakkin'),(null,1853,-1000,'r330','Guktan'),(null,1853,-1000,'r522','Drakkin'),(null,1854,-1000,'r330','Guktan'),(null,1854,-1000,'r522','Drakkin'),(null,1855,-800,'r330','Guktan'),(null,1855,-800,'r522','Drakkin'),(null,1856,-75,'r330','Guktan'),(null,1856,-75,'r522','Drakkin'),(null,1857,-1000,'r330','Guktan'),(null,1857,-1000,'r522','Drakkin'),(null,1858,-1000,'r330','Guktan'),(null,1858,-1000,'r522','Drakkin'),(null,1859,250,'r330','Guktan'),(null,1859,-250,'r522','Drakkin'),(null,1860,-250,'r330','Guktan'),(null,1860,250,'r522','Drakkin'),(null,1862,-75,'r330','Guktan'),(null,1862,-75,'r522','Drakkin'),(null,1863,-600,'r330','Guktan'),(null,1863,-600,'r522','Drakkin'),(null,1864,-600,'r330','Guktan'),(null,1864,-600,'r522','Drakkin'),(null,1865,-600,'r330','Guktan'),(null,1865,-600,'r522','Drakkin'),(null,1866,-600,'r330','Guktan'),(null,1866,-600,'r522','Drakkin'),(null,1867,1,'r330','Guktan'),(null,1867,1,'r522','Drakkin'),(null,1868,1,'r330','Guktan'),(null,1868,1,'r522','Drakkin'),(null,1869,1,'r330','Guktan'),(null,1869,1,'r522','Drakkin'),(null,1870,1,'r330','Guktan'),(null,1870,1,'r522','Drakkin'),(null,1872,1,'r330','Guktan'),(null,1872,1,'r522','Drakkin'); /*!40000 ALTER TABLE `faction_list_mod` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; From 5e9bf3b044c535273406dd806e84220a2defa001 Mon Sep 17 00:00:00 2001 From: KimLS Date: Mon, 25 May 2020 20:56:49 -0700 Subject: [PATCH 181/272] Make ChooseRandom more idiomatic, the fact that the code can return a SV of anytype makes it a bit dangerous, good canidate for rewriting as a plugin --- zone/embparser_api.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 6b4d75719..83839457b 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1618,11 +1618,12 @@ XS(XS__ChooseRandom) { if (items < 1) Perl_croak(aTHX_ "Usage: quest::ChooseRandom(option1, option2, option3, option4, option5...[no limit])"); + dXSTARG; int index = zone->random.Int(0, items - 1); + SV *RETVAL = ST(index); - SV *tmp = ST(0); - ST(0) = ST(index); - ST(index) = tmp; + XSprePUSH; + PUSHs(RETVAL); XSRETURN(1); //return 1 element from the stack (ST(0)) } From 2ec9a2addde9b76ac60307ae4d2e75f7b75dabfd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 25 May 2020 23:05:05 -0500 Subject: [PATCH 182/272] Zone point logging --- common/eqemu_logsys.h | 2 ++ common/eqemu_logsys_log_aliases.h | 18 +++++++++++++++++- zone/client.cpp | 26 +++++++++++++++++++------- zone/zone.cpp | 12 +++++++++--- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/common/eqemu_logsys.h b/common/eqemu_logsys.h index 51ec48bfc..6c3aca086 100644 --- a/common/eqemu_logsys.h +++ b/common/eqemu_logsys.h @@ -116,6 +116,7 @@ namespace Logs { Aura, HotReload, Merchants, + ZonePoints, MaxCategoryID /* Don't Remove this */ }; @@ -191,6 +192,7 @@ namespace Logs { "Aura", "HotReload", "Merchants", + "ZonePoints" }; } diff --git a/common/eqemu_logsys_log_aliases.h b/common/eqemu_logsys_log_aliases.h index 42f973e79..ceb45c1a7 100644 --- a/common/eqemu_logsys_log_aliases.h +++ b/common/eqemu_logsys_log_aliases.h @@ -581,6 +581,16 @@ OutF(LogSys, Logs::Detail, Logs::Merchants, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ } while (0) +#define LogZonePoints(message, ...) do {\ + if (LogSys.log_settings[Logs::ZonePoints].is_category_enabled == 1)\ + OutF(LogSys, Logs::General, Logs::ZonePoints, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + +#define LogZonePointsDetail(message, ...) do {\ + if (LogSys.log_settings[Logs::ZonePoints].is_category_enabled == 1)\ + OutF(LogSys, Logs::Detail, Logs::ZonePoints, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ if (LogSys.log_settings[log_category].is_category_enabled == 1)\ LogSys.Out(debug_level, log_category, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ @@ -926,6 +936,12 @@ #define LogMerchantsDetail(message, ...) do {\ } while (0) +#define LogZonePoints(message, ...) do {\ +} while (0) + +#define LogZonePointsDetail(message, ...) do {\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ } while (0) @@ -933,4 +949,4 @@ } while (0) #endif -#endif //EQEMU_EQEMU_LOGSYS_LOG_ALIASES_H \ No newline at end of file +#endif //EQEMU_EQEMU_LOGSYS_LOG_ALIASES_H diff --git a/zone/client.cpp b/zone/client.cpp index 6796f9336..406382662 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -6124,16 +6124,16 @@ void Client::MarkSingleCompassLoc(float in_x, float in_y, float in_z, uint8 coun void Client::SendZonePoints() { - int count = 0; - LinkedListIterator iterator(zone->zone_point_list); + int count = 0; + LinkedListIterator iterator(zone->zone_point_list); iterator.Reset(); - while(iterator.MoreElements()) - { - ZonePoint* data = iterator.GetData(); - if(ClientVersionBit() & data->client_version_mask) - { + while (iterator.MoreElements()) { + ZonePoint *data = iterator.GetData(); + + if (ClientVersionBit() & data->client_version_mask) { count++; } + iterator.Advance(); } @@ -6147,6 +6147,17 @@ void Client::SendZonePoints() while(iterator.MoreElements()) { ZonePoint* data = iterator.GetData(); + + LogZonePoints( + "Sending zone point to client [{}] mask [{}] x [{}] y [{}] z [{}] number [{}]", + GetCleanName(), + ClientVersionBit() & data->client_version_mask ? "true" : "false", + data->x, + data->y, + data->z, + data->number + ); + if(ClientVersionBit() & data->client_version_mask) { zp->zpe[i].iterator = data->number; @@ -6160,6 +6171,7 @@ void Client::SendZonePoints() } iterator.Advance(); } + FastQueuePacket(&outapp); } diff --git a/zone/zone.cpp b/zone/zone.cpp index 828557151..f7891a1fc 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1310,7 +1310,14 @@ bool Zone::LoadZoneCFG(const char* filename, uint16 instance_id) strcpy(newzone_data.zone_long_name, GetLongName()); strcpy(newzone_data.zone_short_name2, GetShortName()); - LogInfo("Successfully loaded Zone Config"); + LogInfo( + "Successfully loaded Zone Config for Zone [{}] ({}) Version [{}] Instance ID [{}]", + GetShortName(), + GetLongName(), + GetInstanceVersion(), + instance_id + ); + return true; } @@ -1864,8 +1871,7 @@ ZonePoint* Zone::GetClosestZonePoint(const glm::vec3& location, uint32 to, Clien { ZonePoint* zp = iterator.GetData(); uint32 mask_test = client->ClientVersionBit(); - if(!(zp->client_version_mask & mask_test)) - { + if (!(zp->client_version_mask & mask_test)) { iterator.Advance(); continue; } From c10a9cb6200fad1b2029991832513d71cb15f782 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Tue, 26 May 2020 00:32:45 -0500 Subject: [PATCH 183/272] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b08d54be..e999b7050 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,13 @@ |:---:|:---:|:---:| |**Install Count**|![Windows Install Count](http://analytics.akkadius.com/?install_count&windows_count)|![Linux Install Count](http://analytics.akkadius.com/?install_count&linux_count)| ### > Windows -* [Install](https://eqemu.gitbook.io/server/categories/how-to-guides/installation/server-installation-windows) + +* [Install Guide](https://eqemu.gitbook.io/server/categories/installation/server-installation-windows) ### > Debian/Ubuntu/CentOS/Fedora + +* [Install Guide](https://eqemu.gitbook.io/server/categories/installation/server-installation-linux) + * You can use curl or wget to kick off the installer (whichever your OS has) > curl -O https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/linux_installer/install.sh install.sh && chmod 755 install.sh && ./install.sh From 8a0d4e37bd736b9c34a2ab91c54037e128ab18f5 Mon Sep 17 00:00:00 2001 From: KimLS Date: Tue, 26 May 2020 22:30:19 -0700 Subject: [PATCH 184/272] Remove optimization off of quest::ChooseRandom on msvc to solve a crash on x64 in release mode --- zone/embparser_api.cpp | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 83839457b..f95730eb0 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1523,12 +1523,12 @@ XS(XS__addldonpoints) { if (items != 2) Perl_croak(aTHX_ "Usage: quest::addldonpoints(int points, int theme_id)"); - long points = (long) SvIV(ST(0)); - unsigned long theme_id = (unsigned long) SvUV(ST(1)); +long points = (long)SvIV(ST(0)); +unsigned long theme_id = (unsigned long)SvUV(ST(1)); - quest_manager.addldonpoints(points, theme_id); +quest_manager.addldonpoints(points, theme_id); - XSRETURN_EMPTY; +XSRETURN_EMPTY; } XS(XS__addldonwin); @@ -1537,8 +1537,8 @@ XS(XS__addldonwin) { if (items != 2) Perl_croak(aTHX_ "Usage: quest::addldonwin(int wins, int theme_id)"); - long wins = (long) SvIV(ST(0)); - unsigned long theme_id = (unsigned long) SvUV(ST(1)); + long wins = (long)SvIV(ST(0)); + unsigned long theme_id = (unsigned long)SvUV(ST(1)); quest_manager.addldonwin(wins, theme_id); @@ -1551,8 +1551,8 @@ XS(XS__addldonloss) { if (items != 2) Perl_croak(aTHX_ "Usage: quest::addldonloss(int losses, int theme_id)"); - long losses = (long) SvIV(ST(0)); - unsigned long theme_id = (unsigned long) SvUV(ST(1)); + long losses = (long)SvIV(ST(0)); + unsigned long theme_id = (unsigned long)SvUV(ST(1)); quest_manager.addldonloss(losses, theme_id); @@ -1565,7 +1565,7 @@ XS(XS__setnexthpevent) { if (items != 1) Perl_croak(aTHX_ "Usage: quest::setnexthpevent(int at_mob_percentage)"); - int at = (int) SvIV(ST(0)); + int at = (int)SvIV(ST(0)); quest_manager.setnexthpevent(at); @@ -1578,7 +1578,7 @@ XS(XS__setnextinchpevent) { if (items != 1) Perl_croak(aTHX_ "Usage: quest::setnextinchpevent(int at_mob_percentage)"); - int at = (int) SvIV(ST(0)); + int at = (int)SvIV(ST(0)); quest_manager.setnextinchpevent(at); @@ -1591,7 +1591,7 @@ XS(XS__sethp) { if (items != 1) Perl_croak(aTHX_ "Usage: quest::sethp(int mob_health_percentage [0-100])"); - int hpperc = (int) SvIV(ST(0)); + int hpperc = (int)SvIV(ST(0)); quest_manager.sethp(hpperc); @@ -1604,14 +1604,21 @@ XS(XS__respawn) { if (items != 2) Perl_croak(aTHX_ "Usage: quest::respawn(int npc_type_id, int grid_id)"); - int npc_type_id = (int) SvIV(ST(0)); - int grid_id = (int) SvIV(ST(1)); + int npc_type_id = (int)SvIV(ST(0)); + int grid_id = (int)SvIV(ST(1)); quest_manager.respawn(npc_type_id, grid_id); XSRETURN_EMPTY; } +//64 bit windows seems to optimize something poorly here causing access violations. +//If you don't do anything with index before passing it to perl it gets optimized out +//Disabling optimization right now for msvc on this function is the best solution. +#ifdef _MSC_VER +#pragma optimize( "", off ) +#endif + XS(XS__ChooseRandom); XS(XS__ChooseRandom) { dXSARGS; @@ -1620,7 +1627,7 @@ XS(XS__ChooseRandom) { dXSTARG; int index = zone->random.Int(0, items - 1); - SV *RETVAL = ST(index); + SV* RETVAL = ST(index); XSprePUSH; PUSHs(RETVAL); @@ -1628,6 +1635,10 @@ XS(XS__ChooseRandom) { XSRETURN(1); //return 1 element from the stack (ST(0)) } +#ifdef _MSC_VER +#pragma optimize( "", on ) +#endif + XS(XS__set_proximity); XS(XS__set_proximity) { dXSARGS; From 42352359ad11527efd58ce7d95c7c6abc02c7e85 Mon Sep 17 00:00:00 2001 From: Ali Date: Thu, 28 May 2020 15:16:10 +0300 Subject: [PATCH 185/272] [ci skip] Updated CMakeLists to default to MariaDB instead of MySQL --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c164cfba4..24816a323 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,7 +133,7 @@ ENDIF(EQEMU_ENABLE_BOTS) #database IF(MySQL_FOUND AND MariaDB_FOUND) - SET(DATABASE_LIBRARY_SELECTION MySQL CACHE STRING "Database library to use: + SET(DATABASE_LIBRARY_SELECTION MariaDB CACHE STRING "Database library to use: MySQL MariaDB" ) From 4a23086183b11166046c1fd99c6a8c7e6e343163 Mon Sep 17 00:00:00 2001 From: Noudess Date: Thu, 28 May 2020 08:41:10 -0400 Subject: [PATCH 186/272] Fixes to #grid show. Added new string utilities. --- common/string_util.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++ common/string_util.h | 17 +++++++++++++++ zone/command.cpp | 37 ++++++++++++++++++++------------ zone/npc.cpp | 21 ++++++++++++------ zone/npc.h | 2 +- 5 files changed, 104 insertions(+), 21 deletions(-) diff --git a/common/string_util.cpp b/common/string_util.cpp index df3790def..6a4555ccf 100644 --- a/common/string_util.cpp +++ b/common/string_util.cpp @@ -527,3 +527,51 @@ bool isAlphaNumeric(const char *text) return true; } + +// Function to convert single digit or two digit number into words +std::string convert2digit(int n, std::string suffix) +{ + // if n is zero + if (n == 0) { + return ""; + } + + // split n if it is more than 19 + if (n > 19) { + return NUM_TO_ENGLISH_Y[n / 10] + NUM_TO_ENGLISH_X[n % 10] + suffix; + } + else { + return NUM_TO_ENGLISH_X[n] + suffix; + } +} + +// Function to convert a given number (max 9-digits) into words +std::string numberToWords(unsigned long long int n) +{ + // string to store word representation of given number + std::string res; + + // this handles digits at ones & tens place + res = convert2digit((n % 100), ""); + + if (n > 100 && n % 100) { + res = "and " + res; + } + + // this handles digit at hundreds place + res = convert2digit(((n / 100) % 10), "Hundred ") + res; + + // this handles digits at thousands & tens thousands place + res = convert2digit(((n / 1000) % 100), "Thousand ") + res; + + // this handles digits at hundred thousands & one millions place + res = convert2digit(((n / 100000) % 100), "Lakh, ") + res; + + // this handles digits at ten millions & hundred millions place + res = convert2digit((n / 10000000) % 100, "Crore, ") + res; + + // this handles digits at ten millions & hundred millions place + res = convert2digit((n / 1000000000) % 100, "Billion, ") + res; + + return res; +} diff --git a/common/string_util.h b/common/string_util.h index 037d6a2d8..3fb5e3ec9 100644 --- a/common/string_util.h +++ b/common/string_util.h @@ -43,6 +43,20 @@ std::vector split(std::string str_to_split, char delimiter); const std::string StringFormat(const char* format, ...); const std::string vStringFormat(const char* format, va_list args); std::string implode(std::string glue, std::vector src); +std::string convert2digit(int n, std::string suffix); +std::string numberToWords(unsigned long long int n); + +// For converstion of numerics into English +// Used for grid nodes, as NPC names remove numerals. +// But general purpose + +const std::string NUM_TO_ENGLISH_X[] = { "", "One ", "Two ", "Three ", "Four ", + "Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ", + "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", + "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen " }; + +const std::string NUM_TO_ENGLISH_Y[] = { "", "", "Twenty ", "Thirty ", "Forty ", + "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " }; /** * @param str @@ -189,5 +203,8 @@ uint32 hextoi(const char* num); uint64 hextoi64(const char* num); void MakeLowerString(const char *source, char *target); void RemoveApostrophes(std::string &s); +std::string convert2digit(int n, std::string suffix); +std::string numberToWords(unsigned long long int n); + #endif diff --git a/zone/command.cpp b/zone/command.cpp index 09aa704b1..eef536932 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -2438,10 +2438,10 @@ void command_grid(Client *c, const Seperator *sep) } std::string query = StringFormat( - "SELECT `x`, `y`, `z`, `heading`, `number`, `pause` " + "SELECT `x`, `y`, `z`, `heading`, `number` " "FROM `grid_entries` " "WHERE `zoneid` = %u and `gridid` = %i " - "ORDER BY `number` ", + "ORDER BY `number`", zone->GetZoneID(), target->CastToNPC()->GetGrid() ); @@ -2471,18 +2471,29 @@ void command_grid(Client *c, const Seperator *sep) /** * Spawn grid nodes */ - for (auto row = results.begin(); row != results.end(); ++row) { - auto node_position = glm::vec4(atof(row[0]), atof(row[1]), atof(row[2]), atof(row[3])); + std::map, int32> zoffset; - NPC *npc = NPC::SpawnGridNodeNPC( - target->GetCleanName(), - node_position, - static_cast(target->CastToNPC()->GetGrid()), - static_cast(atoi(row[4])), - static_cast(atoi(row[5])) - ); - npc->SetFlyMode(GravityBehavior::Flying); - npc->GMMove(node_position.x, node_position.y, node_position.z, node_position.w); + for (auto row = results.begin(); row != results.end(); ++row) { + glm::vec4 node_position = glm::vec4(atof(row[0]), atof(row[1]), atof(row[2]), atof(row[3])); + + std::vector node_loc { + node_position.x, node_position.y, node_position.z + }; + + // If we already have a node at this location, set the z offset + // higher from the existing one so we can see it. Adjust so if + // there is another at the same spot we adjust again. + auto search = zoffset.find(node_loc); + if (search != zoffset.end()) { + search->second = search->second + 3; + } + else { + zoffset[node_loc] = 0.0; + } + + node_position.z += zoffset[node_loc]; + + NPC::SpawnGridNodeNPC(node_position,atoi(row[4]),zoffset[node_loc]); } } else if (strcasecmp("delete", sep->arg[1]) == 0) { diff --git a/zone/npc.cpp b/zone/npc.cpp index 1794c6d8c..7f6754f73 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -1068,14 +1068,20 @@ bool NPC::SpawnZoneController() return true; } -NPC * NPC::SpawnGridNodeNPC(std::string name, const glm::vec4 &position, uint32 grid_id, uint32 grid_number, uint32 pause) { +void NPC::SpawnGridNodeNPC(const glm::vec4 &position, int32 grid_number, int32 zoffset) { + auto npc_type = new NPCType; memset(npc_type, 0, sizeof(NPCType)); - sprintf(npc_type->name, "%u_%u", grid_id, grid_number); - sprintf(npc_type->lastname, "Number: %u Grid: %u Pause: %u", grid_number, grid_id, pause); + std::string str_zoffset = numberToWords(zoffset); + std::string str_number= numberToWords(grid_number); - npc_type->current_hp = 4000000; + strcpy(npc_type->name, str_number.c_str()); + if (zoffset != 0) { + strcat(npc_type->name, "(Zoffset)"); + } + + npc_type->current_hp = 4000000; npc_type->max_hp = 4000000; npc_type->race = 2254; npc_type->gender = 2; @@ -1095,11 +1101,12 @@ NPC * NPC::SpawnGridNodeNPC(std::string name, const glm::vec4 &position, uint32 auto node_position = glm::vec4(position.x, position.y, position.z, position.w); auto npc = new NPC(npc_type, nullptr, node_position, GravityBehavior::Flying); + + npc->name[strlen(npc->name)-3] = (char) NULL; + npc->GiveNPCTypeData(npc_type); - entity_list.AddNPC(npc, true, true); - - return npc; + entity_list.AddNPC(npc); } NPC * NPC::SpawnNodeNPC(std::string name, std::string last_name, const glm::vec4 &position) { diff --git a/zone/npc.h b/zone/npc.h index d9f98cfc6..79a98ae94 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -112,7 +112,7 @@ public: virtual ~NPC(); static NPC *SpawnNodeNPC(std::string name, std::string last_name, const glm::vec4 &position); - static NPC *SpawnGridNodeNPC(std::string name, const glm::vec4 &position, uint32 grid_id, uint32 grid_number, uint32 pause); + static void SpawnGridNodeNPC(const glm::vec4 &position, int32 grid_number, int32 zoffset); //abstract virtual function implementations requird by base abstract class virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); From 4ad38d4c497ec4ecab6e01835aeb00f9c593c939 Mon Sep 17 00:00:00 2001 From: Noudess Date: Thu, 28 May 2020 13:17:31 -0400 Subject: [PATCH 187/272] Fix for pets, mercs, bot that don't set combat state. --- zone/mob_ai.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 426f462d4..bc3f71012 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1319,7 +1319,9 @@ void Mob::AI_Process() { FaceTarget(); } } - else if (AI_movement_timer->Check() && target && CastToNPC()->GetCombatEvent()) { + else if (AI_movement_timer->Check() && + (IsPet() || IsMerc() || IsBot() || + (target && CastToNPC()->GetCombatEvent()))) { if (!IsRooted()) { LogAI("Pursuing [{}] while engaged", target->GetName()); RunTo(target->GetX(), target->GetY(), target->GetZ()); From fa2caf8f8356883a79d35b8fbb3518aea9855f47 Mon Sep 17 00:00:00 2001 From: Noudess Date: Thu, 28 May 2020 13:30:34 -0400 Subject: [PATCH 188/272] Comment movement code and make target required in all cases again --- zone/mob_ai.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index bc3f71012..7d18fdb1a 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1319,9 +1319,10 @@ void Mob::AI_Process() { FaceTarget(); } } - else if (AI_movement_timer->Check() && + // mob/npc waits until call for help complete, others can move + else if (AI_movement_timer->Check() && target && (IsPet() || IsMerc() || IsBot() || - (target && CastToNPC()->GetCombatEvent()))) { + CastToNPC()->GetCombatEvent())) { if (!IsRooted()) { LogAI("Pursuing [{}] while engaged", target->GetName()); RunTo(target->GetX(), target->GetY(), target->GetZ()); From efc3832f521528ede7dc930dd02b22802cf1ebd4 Mon Sep 17 00:00:00 2001 From: Noudess Date: Fri, 19 Jun 2020 07:43:06 -0400 Subject: [PATCH 189/272] Fix some formatting and change visual label for stacked node names. --- zone/command.cpp | 4 +++- zone/npc.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index eef536932..43214430e 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -2477,7 +2477,9 @@ void command_grid(Client *c, const Seperator *sep) glm::vec4 node_position = glm::vec4(atof(row[0]), atof(row[1]), atof(row[2]), atof(row[3])); std::vector node_loc { - node_position.x, node_position.y, node_position.z + node_position.x, + node_position.y, + node_position.z }; // If we already have a node at this location, set the z offset diff --git a/zone/npc.cpp b/zone/npc.cpp index 7f6754f73..15b0ce765 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -1074,11 +1074,11 @@ void NPC::SpawnGridNodeNPC(const glm::vec4 &position, int32 grid_number, int32 z memset(npc_type, 0, sizeof(NPCType)); std::string str_zoffset = numberToWords(zoffset); - std::string str_number= numberToWords(grid_number); + std::string str_number = numberToWords(grid_number); strcpy(npc_type->name, str_number.c_str()); if (zoffset != 0) { - strcat(npc_type->name, "(Zoffset)"); + strcat(npc_type->name, "(Stacked)"); } npc_type->current_hp = 4000000; From 06f3d40c2851ffb5fdd13c85fa58612f656a7835 Mon Sep 17 00:00:00 2001 From: Noudess Date: Fri, 19 Jun 2020 07:59:08 -0400 Subject: [PATCH 190/272] Replaced expensive IsPet() with GetOwnerID(). --- zone/mob_ai.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index 7d18fdb1a..b7f69ac14 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -1321,7 +1321,7 @@ void Mob::AI_Process() { } // mob/npc waits until call for help complete, others can move else if (AI_movement_timer->Check() && target && - (IsPet() || IsMerc() || IsBot() || + (GetOwnerID() || IsBot() || CastToNPC()->GetCombatEvent())) { if (!IsRooted()) { LogAI("Pursuing [{}] while engaged", target->GetName()); From ab73fd793892057830b7c4ad77eb2078384db108 Mon Sep 17 00:00:00 2001 From: Thalix <67201730+thalix1337@users.noreply.github.com> Date: Sun, 21 Jun 2020 03:19:38 +0200 Subject: [PATCH 191/272] Improvement of rule descriptions Incomplete descriptions added as far as the function was clear to me. Tried to standardize the words used in the descriptions. Corrected a few orthographic problems. Added some words to existing descriptions to make them more understandable. Some rules which were not used anymore are deleted. --- common/ruletypes.h | 800 ++++++++++++++++++++++----------------------- 1 file changed, 393 insertions(+), 407 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index f4ca7c2d9..59a154ffe 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -36,98 +36,97 @@ RULE_CATEGORY(Character) -RULE_INT(Character, MaxLevel, 65, "") -RULE_BOOL(Character, PerCharacterQglobalMaxLevel, false, "This will check for qglobal 'CharMaxLevel' character qglobal (Type 5, \"\"), if player tries to level beyond that point, it will not go beyond that level") -RULE_BOOL(Character, PerCharacterBucketMaxLevel, false, "This will check for data bucket 'CharMaxLevel', if player tries to level beyond that point, it will not go beyond that level") -RULE_INT(Character, MaxExpLevel, 0, "Sets the Max Level attainable via Experience") -RULE_INT(Character, DeathExpLossLevel, 10, "Any level greater than this will lose exp on death") -RULE_INT(Character, DeathExpLossMaxLevel, 255, "Any level greater than this will no longer lose exp on death") -RULE_INT(Character, DeathItemLossLevel, 10, "") -RULE_INT(Character, DeathExpLossMultiplier, 3, "Adjust how much exp is lost") -RULE_BOOL(Character, UseDeathExpLossMult, false, "Adjust to use the above multiplier or to use code default") -RULE_BOOL(Character, UseOldRaceRezEffects, false, "older clients had ID 757 for races with high starting STR, but it doesn't seem used anymore") -RULE_INT(Character, CorpseDecayTimeMS, 10800000, "") -RULE_INT(Character, CorpseResTimeMS, 10800000, "time before cant res corpse(3 hours)") -RULE_BOOL(Character, LeaveCorpses, true, "") -RULE_BOOL(Character, LeaveNakedCorpses, false, "") -RULE_INT(Character, MaxDraggedCorpses, 2, "") -RULE_REAL(Character, DragCorpseDistance, 400, "If the corpse is <= this distance from the player, it won't move") -RULE_REAL(Character, ExpMultiplier, 0.5, "") -RULE_REAL(Character, AAExpMultiplier, 0.5, "") -RULE_REAL(Character, GroupExpMultiplier, 0.5, "") -RULE_REAL(Character, RaidExpMultiplier, 0.2, "") -RULE_BOOL(Character, UseXPConScaling, true, "") -RULE_INT(Character, ShowExpValues, 0, "0 - normal, 1 - Show raw experience values, 2 - Show raw experience values AND percent") -RULE_INT(Character, GreenModifier, 20, "") -RULE_INT(Character, LightBlueModifier, 40, "") -RULE_INT(Character, BlueModifier, 90, "") -RULE_INT(Character, WhiteModifier, 100, "") -RULE_INT(Character, YellowModifier, 125, "") -RULE_INT(Character, RedModifier, 150, "") -RULE_INT(Character, AutosaveIntervalS, 300, "0 = disabled") -RULE_INT(Character, HPRegenMultiplier, 100, "") -RULE_INT(Character, ManaRegenMultiplier, 100, "") -RULE_INT(Character, EnduranceRegenMultiplier, 100, "") -RULE_BOOL(Character, OldMinMana, false, "this is used for servers that want to follow older skill cap formulas so they can still have some regen w/o mediate") -RULE_INT(Character, ConsumptionMultiplier, 100, "item's hunger restored = this value * item's food level, 100 = normal, 50 = people eat 2x as fast, 200 = people eat 2x as slow") -RULE_BOOL(Character, HealOnLevel, false, "") -RULE_BOOL(Character, FeignKillsPet, false, "") -RULE_INT(Character, ItemManaRegenCap, 15, "") -RULE_INT(Character, ItemHealthRegenCap, 30, "") -RULE_INT(Character, ItemDamageShieldCap, 30, "") -RULE_INT(Character, ItemAccuracyCap, 150, "") -RULE_INT(Character, ItemAvoidanceCap, 100, "") -RULE_INT(Character, ItemCombatEffectsCap, 100, "") -RULE_INT(Character, ItemShieldingCap, 35, "") -RULE_INT(Character, ItemSpellShieldingCap, 35, "") -RULE_INT(Character, ItemDoTShieldingCap, 35, "") -RULE_INT(Character, ItemStunResistCap, 35, "") -RULE_INT(Character, ItemStrikethroughCap, 35, "") -RULE_INT(Character, ItemATKCap, 250, "") -RULE_INT(Character, ItemHealAmtCap, 250, "") -RULE_INT(Character, ItemSpellDmgCap, 250, "") -RULE_INT(Character, ItemClairvoyanceCap, 250, "") -RULE_INT(Character, ItemDSMitigationCap, 50, "") -RULE_INT(Character, ItemEnduranceRegenCap, 15, "") -RULE_INT(Character, ItemExtraDmgCap, 150, "Cap for bonuses to melee skills like Bash, Frenzy, etc") +RULE_INT(Character, MaxLevel, 65, "Sets the highest level attainable by experience for players") +RULE_BOOL(Character, PerCharacterQglobalMaxLevel, false, "Check for qglobal 'CharMaxLevel' character qglobal (Type 5, \"\"), if player tries to level beyond that point, it will not go beyond that level") +RULE_BOOL(Character, PerCharacterBucketMaxLevel, false, "Check for data bucket 'CharMaxLevel', if player tries to level beyond that point, it will not go beyond that level") +RULE_INT(Character, MaxExpLevel, 0, "Defines the maximum level that can be reached through experience") +RULE_INT(Character, DeathExpLossLevel, 10, "Any level equal to or greater than this will lose experience at death") +RULE_INT(Character, DeathExpLossMaxLevel, 255, "Every higher level will no longer lose experience at death") +RULE_INT(Character, DeathItemLossLevel, 10, "From this level on, items are left in the corpse when LeaveCorpses is activated") +RULE_INT(Character, DeathExpLossMultiplier, 3, "Adjust how much experience is lost. Default 3.5% (0=0.5%, 1=1.5%, 2=2.5%, 3=3.5%, 4=4.5%, 5=5.5%, 6=6.5%, 7=7.5%, 8=8.5%, 9=9.5%, 10=11%)") +RULE_BOOL(Character, UseDeathExpLossMult, false, "Setting to control whether DeathExpLossMultiplier or the code default is used: (Level x Level / 18.0) x 12000") +RULE_BOOL(Character, UseOldRaceRezEffects, false, "Older clients had ID 757 for races with high starting STR, but it doesn't seem used anymore") +RULE_INT(Character, CorpseDecayTimeMS, 10800000, "Time after which the corpse decays (milliseconds)") +RULE_INT(Character, CorpseResTimeMS, 10800000, "Time after which the corpse can no longer be resurrected (milliseconds)") +RULE_BOOL(Character, LeaveCorpses, true, "Setting whether you leave a corpse behind") +RULE_BOOL(Character, LeaveNakedCorpses, false, "Setting whether you leave a corpse without items") +RULE_INT(Character, MaxDraggedCorpses, 2, "Maximum number of corpses you can drag at once") +RULE_REAL(Character, DragCorpseDistance, 400, "If a player is using /corpsedrag and moving, the corpse will not move until the player exceeds this distance") +RULE_REAL(Character, ExpMultiplier, 0.5, "If greater than 0, the experience gained is multiplied by this value. ") +RULE_REAL(Character, AAExpMultiplier, 0.5, "If greater than 0, the AA experience gained is multiplied by this value. ") +RULE_REAL(Character, GroupExpMultiplier, 0.5, "The experience in a group is multiplied by this value in addition to the group multiplier. The group multiplier is: 2 members=x 1.2, 3=x1.4, 4=x1.6, 5=x1.8, 6=x2.16") +RULE_REAL(Character, RaidExpMultiplier, 0.2, "The experience gained in raids is multiplied by (1-RaidExpMultiplier) ") +RULE_BOOL(Character, UseXPConScaling, true, "When activated, the experience is modified depending on the difference between player level and NPC level. The settings Green/LightBlue/Blue//White/Yellow and RedModifier are used") +RULE_INT(Character, ShowExpValues, 0, "Show expirience values. 0=normal, 1=show raw experience values, 2=show raw experience values and percent") +RULE_INT(Character, GreenModifier, 20, "The experience obtained for green con mobs is multiplied by value/100") +RULE_INT(Character, LightBlueModifier, 40, "The experience obtained for light-blue con mobs is multiplied by value/100") +RULE_INT(Character, BlueModifier, 90, "The experience obtained for blue con mobs is multiplied by value/100") +RULE_INT(Character, WhiteModifier, 100, "The experience obtained for white con mobs is multiplied by value/100") +RULE_INT(Character, YellowModifier, 125, "The experience obtained for yellow con mobs is multiplied by value/100") +RULE_INT(Character, RedModifier, 150, "The experience obtained for red con mobs is multiplied by value/100") +RULE_INT(Character, AutosaveIntervalS, 300, "Number of seconds after which a timer is triggered which stores the character data. The value 0 means no periodic automatic saving.") +RULE_INT(Character, HPRegenMultiplier, 100, "The hitpoint regeneration is multiplied by value/100 (up to the caps)") +RULE_INT(Character, ManaRegenMultiplier, 100, "The mana regeneration is multiplied by value/100 (up to the caps)") +RULE_INT(Character, EnduranceRegenMultiplier, 100, "The endurance regeneration is multiplied by value/100 (up to the caps)") +RULE_BOOL(Character, OldMinMana, false, "This is used for servers that want to follow older skill cap formulas so they can still have some regen w/o mediate") +RULE_INT(Character, ConsumptionMultiplier, 100, "Item's hunger restored = value x item's food level. 100=normal, 50=player eat 2x as fast, 200=player eat 2x as slow") +RULE_BOOL(Character, HealOnLevel, false, "Setting whether a player should heal completely when leveling") +RULE_BOOL(Character, FeignKillsPet, false, "Setting whether Feign Death kills the player pet") +RULE_INT(Character, ItemManaRegenCap, 15, "Limit on mana regeneration granted by items") +RULE_INT(Character, ItemHealthRegenCap, 30, "Limit on health regeneration granted by items") +RULE_INT(Character, ItemDamageShieldCap, 30, "Limit on damage shields granted by items") +RULE_INT(Character, ItemAccuracyCap, 150, "Limit on accuracy granted by items") +RULE_INT(Character, ItemAvoidanceCap, 100, "Limit on avoidance granted by items") +RULE_INT(Character, ItemCombatEffectsCap, 100, "Limit on combat effects granted by items") +RULE_INT(Character, ItemShieldingCap, 35, "Limit on shielding granted by items") +RULE_INT(Character, ItemSpellShieldingCap, 35, "Limit on spell shieldung granted by items") +RULE_INT(Character, ItemDoTShieldingCap, 35, "Limit on DoT shielding granted by items") +RULE_INT(Character, ItemStunResistCap, 35, "Limit on resistance granted by items") +RULE_INT(Character, ItemStrikethroughCap, 35, "Limit on strikethrough granted by items") +RULE_INT(Character, ItemATKCap, 250, "Limit on ATK granted by items") +RULE_INT(Character, ItemHealAmtCap, 250, "Limit on heal amount granted by items") +RULE_INT(Character, ItemSpellDmgCap, 250, "Limit on spell damage granted by items") +RULE_INT(Character, ItemClairvoyanceCap, 250, "Limit on clairvoyance granted by items") +RULE_INT(Character, ItemDSMitigationCap, 50, "Limit on damageshield mitigation granted by items") +RULE_INT(Character, ItemEnduranceRegenCap, 15, "Limit on endurance regeneration granted by items") +RULE_INT(Character, ItemExtraDmgCap, 150, "Cap for bonuses to melee skills like Bash, Frenzy, etc.") RULE_INT(Character, HasteCap, 100, "Haste cap for non-v3(overhaste) haste") -RULE_INT(Character, SkillUpModifier, 100, "skill ups are at 100%") -RULE_BOOL(Character, SharedBankPlat, false, "off by default to prevent duping for now") -RULE_BOOL(Character, BindAnywhere, false, "") -RULE_BOOL(Character, RestRegenEnabled, true, "Enable OOC Regen") +RULE_INT(Character, SkillUpModifier, 100, "The probability for a skill-up is multiplied by value/100") +RULE_BOOL(Character, SharedBankPlat, false, "Shared bank platinum. Off by default to prevent duplication") +RULE_BOOL(Character, BindAnywhere, false, "Allows players to bind their soul anywhere in the world") +RULE_BOOL(Character, RestRegenEnabled, true, "Setting to activate out-of-combat regeneration") RULE_INT(Character, RestRegenTimeToActivate, 30, "Time in seconds for rest state regen to kick in") RULE_INT(Character, RestRegenRaidTimeToActivate, 300, "Time in seconds for rest state regen to kick in with a raid target") -RULE_INT(Character, KillsPerGroupLeadershipAA, 250, "Number of dark blues or above per Group Leadership AA") -RULE_INT(Character, KillsPerRaidLeadershipAA, 250, "Number of dark blues or above per Raid Leadership AA") -RULE_INT(Character, MaxFearDurationForPlayerCharacter, 4, "4 tics, each tic calculates every 6 seconds") -RULE_INT(Character, MaxCharmDurationForPlayerCharacter, 15, "") -RULE_INT(Character, BaseHPRegenBonusRaces, 4352, "a bitmask of race(s) that receive the regen bonus. Iksar (4096) & Troll (256) = 4352. see common/races.h for the bitmask values") +RULE_INT(Character, KillsPerGroupLeadershipAA, 250, "Minimum number of dark blue mobs that must be killed to get a Group Leadership AA") +RULE_INT(Character, KillsPerRaidLeadershipAA, 250, "Minimum number of dark blue mobs that must be killed to get a Raid Leadership AAA") +RULE_INT(Character, MaxFearDurationForPlayerCharacter, 4, "Maximum number of tics a player can be feared. 1 tic equls 6 seconds") +RULE_INT(Character, MaxCharmDurationForPlayerCharacter, 15, "Maximum number of tics a player can be charmed. 1 tic equls 6 seconds") +RULE_INT(Character, BaseHPRegenBonusRaces, 4352, "A bitmask of race(s) that receive the regen bonus. Iksar (4096) & Troll (256) = 4352. See common/races.h for the bitmask values") RULE_BOOL(Character, SoDClientUseSoDHPManaEnd, false, "Setting this to true will allow SoD clients to use the SoD HP/Mana/End formulas and previous clients will use the old formulas") RULE_BOOL(Character, UseRaceClassExpBonuses, true, "Setting this to true will enable Class and Racial experience rate bonuses") -RULE_BOOL(Character, UseOldRaceExpPenalties, false, "Setting this to true will enable racial exp penalties for Iksar, Troll, Ogre, and Barbarian, as well as the bonus for Halflings") -RULE_BOOL(Character, UseOldClassExpPenalties, false, "Setting this to true will enable old class exp penalties for Paladin, SK, Ranger, Bard, Monk, Wizard, Enchanter, Magician, and Necromancer, as well as the bonus for Rogues and Warriors") -RULE_BOOL(Character, RespawnFromHover, false, "Use Respawn window, or not") -RULE_INT(Character, RespawnFromHoverTimer, 300, "Respawn Window countdown timer, in SECONDS") -RULE_BOOL(Character, UseNewStatsWindow, true, "New stats window shows everything") -RULE_BOOL(Character, ItemCastsUseFocus, false, "If true, this allows item clickies to use focuses that have limited max levels on them") +RULE_BOOL(Character, UseOldRaceExpPenalties, false, "Setting this to true will enable racial experience penalties for Iksar, Troll, Ogre, and Barbarian, as well as the bonus for Halflings") +RULE_BOOL(Character, UseOldClassExpPenalties, false, "Setting this to true will enable old class experience penalties for Paladin, SK, Ranger, Bard, Monk, Wizard, Enchanter, Magician, and Necromancer, as well as the bonus for Rogues and Warriors") +RULE_BOOL(Character, RespawnFromHover, false, "Setting whether the respawn window should be used") +RULE_INT(Character, RespawnFromHoverTimer, 300, "Respawn Window countdown timer, in seconds") +RULE_BOOL(Character, UseNewStatsWindow, true, "Setting whether the new Stats window, which displays all information, should be used") +RULE_BOOL(Character, ItemCastsUseFocus, false, "If true, this allows item clickies to use focuses that have limited maximum levels on them") RULE_INT(Character, MinStatusForNoDropExemptions, 80, "This allows status x and higher to trade no drop items") -RULE_INT(Character, SkillCapMaxLevel, 75, "Sets the Max Level used for Skill Caps (from skill_caps table). -1 makes it use MaxLevel rule value. It is set to 75 because PEQ only has skillcaps up to that level, and grabbing the players' skill past 75 will return 0, breaking all skills past that level. This helps servers with obsurd level caps (75+ level cap) function without any modifications") -RULE_INT(Character, StatCap, 0, "") +RULE_INT(Character, SkillCapMaxLevel, 75, "Sets the Maximum Level used for Skill Caps (from skill_caps table). -1 makes it use MaxLevel rule value. It is set to 75 because PEQ only has skillcaps up to that level, and grabbing the players' skill past 75 will return 0, breaking all skills past that level. This helps servers with obsurd level caps (75+ level cap) function without any modifications") +RULE_INT(Character, StatCap, 0, "") RULE_BOOL(Character, CheckCursorEmptyWhenLooting, true, "If true, a player cannot loot a corpse (player or NPC) with an item on their cursor") RULE_BOOL(Character, MaintainIntoxicationAcrossZones, true, "If true, alcohol effects are maintained across zoning and logging out/in") RULE_BOOL(Character, EnableDiscoveredItems, true, "If enabled, it enables EVENT_DISCOVER_ITEM and also saves character names and timestamps for the first time an item is discovered") -RULE_BOOL(Character, EnableXTargetting, true, "Enable Extended Targetting Window, for users with UF and later clients") +RULE_BOOL(Character, EnableXTargetting, true, "Enable Extended Targeting Window, for users with UF and later clients") RULE_BOOL(Character, EnableAggroMeter, true, "Enable Aggro Meter, for users with RoF and later clients") RULE_BOOL(Character, KeepLevelOverMax, false, "Don't delevel a character that has somehow gone over the level cap") RULE_INT(Character, FoodLossPerUpdate, 32, "How much food/water you lose per stamina update") -RULE_BOOL(Character, EnableHungerPenalties, false, "being hungry/thirsty has negative effects -- it does appear normal live servers do not have penalties") -RULE_BOOL(Character, EnableFoodRequirement, true, "if disabled, food is no longer required") +RULE_BOOL(Character, EnableHungerPenalties, false, "Being hungry/thirsty has negative effects -- it does appear normal live servers do not have penalties") +RULE_BOOL(Character, EnableFoodRequirement, true, "If disabled, food is no longer required") RULE_INT(Character, BaseInstrumentSoftCap, 36, "Softcap for instrument mods, 36 commonly referred to as \"3.6\" as well") RULE_BOOL(Character, UseSpellFileSongCap, true, "When they removed the AA that increased the cap they removed the above and just use the spell field") RULE_INT(Character, BaseRunSpeedCap, 158, "Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225") RULE_INT(Character, OrnamentationAugmentType, 20, "Ornamentation Augment Type") -RULE_REAL(Character, EnvironmentDamageMulipliter, 1, "") -RULE_BOOL(Character, UnmemSpellsOnDeath, true, "") +RULE_BOOL(Character, UnmemSpellsOnDeath, true, "Setting whether at death all memorized Spells are forgotten") RULE_INT(Character, TradeskillUpAlchemy, 2, "Alchemy skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpBaking, 2, "Baking skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpBlacksmithing, 2, "Blacksmithing skillup rate adjust. Lower is faster") @@ -138,7 +137,7 @@ RULE_INT(Character, TradeskillUpMakePoison, 2, "Make Poison skillup rate adjust. RULE_INT(Character, TradeskillUpPottery, 4, "Pottery skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpResearch, 1, "Research skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpTinkering, 2, "Tinkering skillup rate adjust. Lower is faster") -RULE_BOOL(Character, MarqueeHPUpdates, false, "Will show Health % in center of screen < 100%") +RULE_BOOL(Character, MarqueeHPUpdates, false, "Will show Health percentage in center of screen < 100%") RULE_INT(Character, IksarCommonTongue, 95, "95 By default (live-like?)") RULE_INT(Character, OgreCommonTongue, 95, "95 By default (live-like?)") RULE_INT(Character, TrollCommonTongue, 95, "95 By default (live-like?)") @@ -148,15 +147,15 @@ RULE_INT(Character, InvSnapshotMinRetryM, 30, "Time (in minutes) to re-attempt a RULE_INT(Character, InvSnapshotHistoryD, 30, "Time (in days) to keep snapshot entries") RULE_BOOL(Character, RestrictSpellScribing, false, "Restricts spell scribing to allowable races/classes of spell scroll, if true") RULE_BOOL(Character, UseStackablePickPocketing, true, "Allows stackable pickpocketed items to stack instead of only being allowed in empty inventory slots") -RULE_BOOL(Character, EnableAvoidanceCap, false, "") +RULE_BOOL(Character, EnableAvoidanceCap, false, "Setting whether the avoidance cap should be activated") RULE_INT(Character, AvoidanceCap, 750, "750 Is a pretty good value, seen people dodge all attacks beyond 1,000 Avoidance") RULE_BOOL(Character, AllowMQTarget, false, "Disables putting players in the 'hackers' list for targeting beyond the clip plane or attempting to target something untargetable") RULE_BOOL(Character, UseOldBindWound, false, "Uses the original bind wound behavior") RULE_BOOL(Character, GrantHoTTOnCreate, false, "Grant Health of Target's Target leadership AA on character creation") RULE_BOOL(Character, UseOldConSystem, false, "Grant Health of Target's Target leadership AA on character creation") RULE_BOOL(Character, OPClientUpdateVisualDebug, false, "Shows a pulse and forward directional particle each time the client sends its position to server") -RULE_BOOL(Character, AllowCrossClassTrainers, false, "") -RULE_BOOL(Character, PetsUseReagents, true, "Pets use reagent on spells") +RULE_BOOL(Character, AllowCrossClassTrainers, false, "") +RULE_BOOL(Character, PetsUseReagents, true, "Conjuring pets consumes reagents") RULE_BOOL(Character, DismountWater, true, "Dismount horses when entering water") RULE_BOOL(Character, UseNoJunkFishing, false, "Disregards junk items when fishing") RULE_BOOL(Character, SoftDeletes, true, "When characters are deleted in character select, they are only soft deleted") @@ -165,94 +164,91 @@ RULE_BOOL(Character, ProcessFearedProximity, false, "Processes proximity checks RULE_CATEGORY_END() RULE_CATEGORY(Mercs) -RULE_INT(Mercs, SuspendIntervalMS, 10000, "") -RULE_INT(Mercs, UpkeepIntervalMS, 180000, "") -RULE_INT(Mercs, SuspendIntervalS, 10, "") -RULE_INT(Mercs, UpkeepIntervalS, 180, "") -RULE_BOOL(Mercs, AllowMercs, false, "") -RULE_BOOL(Mercs, ChargeMercPurchaseCost, false, "") -RULE_BOOL(Mercs, ChargeMercUpkeepCost, false, "") +RULE_INT(Mercs, SuspendIntervalMS, 10000, "Time interval for merc suspend in milliseconds.") +RULE_INT(Mercs, UpkeepIntervalMS, 180000, "Time interval for merc upkeep in milliseconds") +RULE_INT(Mercs, SuspendIntervalS, 10, "Time interval for merc suspend command in seconds") +RULE_BOOL(Mercs, AllowMercs, false, "Allow the use of mercs") +RULE_BOOL(Mercs, ChargeMercPurchaseCost, false, "Turns Mercenary purchase costs on or off") +RULE_BOOL(Mercs, ChargeMercUpkeepCost, false, "Turns Mercenary upkeep costs on or off") RULE_INT(Mercs, AggroRadius, 100, "Determines the distance from which a merc will aggro group member's target(also used to determine the distance at which a healer merc will begin healing a group member)") RULE_INT(Mercs, AggroRadiusPuller, 25, "Determines the distance from which a merc will aggro group member's target, if they have the group role of puller (also used to determine the distance at which a healer merc will begin healing a group member, if they have the group role of puller)") RULE_INT(Mercs, ResurrectRadius, 50, "Determines the distance from which a healer merc will attempt to resurrect a group member's corpse") -RULE_INT(Mercs, ScaleRate, 100, "") +RULE_INT(Mercs, ScaleRate, 100, "Merc scale factor") RULE_BOOL(Mercs, MercsUsePathing, true, "Mercs will use node pathing when moving") -RULE_BOOL(Mercs, AllowMercSuspendInCombat, true, "") +RULE_BOOL(Mercs, AllowMercSuspendInCombat, true, "Allow merc suspend in combat") RULE_CATEGORY_END() RULE_CATEGORY(Guild) -RULE_INT(Guild, MaxMembers, 2048, "") +RULE_INT(Guild, MaxMembers, 2048, "Maximum number of members a guild can have") RULE_BOOL(Guild, PlayerCreationAllowed, false, "Allow players to create a guild using the window in Underfoot+") RULE_INT(Guild, PlayerCreationLimit, 1, "Only allow use of the UF+ window if the account has < than this number of guild leaders on it") -RULE_INT(Guild, PlayerCreationRequiredStatus, 0, "Required admin status") -RULE_INT(Guild, PlayerCreationRequiredLevel, 0, "Required Level of the player attempting to create the guild") -RULE_INT(Guild, PlayerCreationRequiredTime, 0, "Required Time Entitled On Account (in Minutes) to create the guild") +RULE_INT(Guild, PlayerCreationRequiredStatus, 0, "Required status to create a guild") +RULE_INT(Guild, PlayerCreationRequiredLevel, 0, "Required level of the player attempting to create the guild") +RULE_INT(Guild, PlayerCreationRequiredTime, 0, "Time needed online on the account to create a guild (in minutes)") RULE_CATEGORY_END() RULE_CATEGORY(Skills) -RULE_INT(Skills, MaxTrainTradeskills, 21, "") -RULE_BOOL(Skills, UseLimitTradeskillSearchSkillDiff, true, "") -RULE_INT(Skills, MaxTradeskillSearchSkillDiff, 50, "") -RULE_INT(Skills, MaxTrainSpecializations, 50, "Max level a GM trainer will train casting specializations") -RULE_INT(Skills, SwimmingStartValue, 100, "") -RULE_BOOL(Skills, TrainSenseHeading, false, "") -RULE_INT(Skills, SenseHeadingStartValue, 200, "") -RULE_BOOL(Skills, SelfLanguageLearning, true, "") -RULE_BOOL(Skills, RequireTomeHandin, false, "Disable click-to-learn and force turnin to Guild Master") +RULE_INT(Skills, MaxTrainTradeskills, 21, "Highest level for trading skills that can be learnt by the trainer") +RULE_BOOL(Skills, UseLimitTradeskillSearchSkillDiff, true, "Enables the limit for the maximum difference between trivial and skill for recipe searches and favorites") +RULE_INT(Skills, MaxTradeskillSearchSkillDiff, 50, "The maximum difference in skill between the trivial of an item and the skill of the player if the trivial is higher than the skill. Recipes that have not been learnt or made at least once via the Experiment mode will be removed from searches based on this criteria.") +RULE_INT(Skills, MaxTrainSpecializations, 50, "Maximum level a GM trainer will train casting specializations") +RULE_INT(Skills, SwimmingStartValue, 100, "Start value of swimming skill") +RULE_INT(Skills, SenseHeadingStartValue, 200, "Start value of sense heading skill") +RULE_BOOL(Skills, SelfLanguageLearning, true, "Enabling self learning of languages") +RULE_BOOL(Skills, RequireTomeHandin, false, "Disable click-to-learn and force hand in to Guild Master") RULE_CATEGORY_END() RULE_CATEGORY(Pets) -RULE_REAL(Pets, AttackCommandRange, 150, "") -RULE_BOOL(Pets, UnTargetableSwarmPet, false, "") -RULE_REAL(Pets, PetPowerLevelCap, 10, "Max number of levels your pet can go up with pet power") -RULE_BOOL(Pets, CanTakeNoDrop, false, "Can everyone trade nodrop gear to pets") +RULE_REAL(Pets, AttackCommandRange, 150, "Range at which a pet will respond to attack commands") +RULE_BOOL(Pets, UnTargetableSwarmPet, false, "Setting whether swarm pets should be targetable") +RULE_REAL(Pets, PetPowerLevelCap, 10, "Maximum number of levels a player pet can go up with pet power") +RULE_BOOL(Pets, CanTakeNoDrop, false, "Setting whether anyone can give no-drop items to pets") RULE_CATEGORY_END() RULE_CATEGORY(GM) -RULE_INT(GM, MinStatusToSummonItem, 250, "") -RULE_INT(GM, MinStatusToZoneAnywhere, 250, "") -RULE_INT(GM, MinStatusToLevelTarget, 100, "") +RULE_INT(GM, MinStatusToSummonItem, 250, "Minimum required status to summon items") +RULE_INT(GM, MinStatusToZoneAnywhere, 250, "Minimum required status to zone anywhere") +RULE_INT(GM, MinStatusToLevelTarget, 100, "Minimum required status to set the level of a player") RULE_CATEGORY_END() RULE_CATEGORY(World) -RULE_INT(World, ZoneAutobootTimeoutMS, 60000, "") -RULE_INT(World, ClientKeepaliveTimeoutMS, 65000, "") +RULE_INT(World, ZoneAutobootTimeoutMS, 60000, "Time out for automatic booting of zones in milliseconds") RULE_BOOL(World, UseBannedIPsTable, false, "Toggle whether or not to check incoming client connections against the banned_ips table. Set this value to false to disable this feature") -RULE_BOOL(World, EnableTutorialButton, true, "") -RULE_BOOL(World, EnableReturnHomeButton, true, "") -RULE_INT(World, MaxLevelForTutorial, 10, "") -RULE_INT(World, TutorialZoneID, 189, "") -RULE_INT(World, GuildBankZoneID, 345, "") -RULE_INT(World, MinOfflineTimeToReturnHome, 21600, "21600 seconds is 6 Hours") +RULE_BOOL(World, EnableTutorialButton, true, "Setting whether the Tutorial button should be active. At least in RoF2 you can always press the button, but it loses its effect") +RULE_BOOL(World, EnableReturnHomeButton, true, "Setting whether the Return Home button should be active") +RULE_INT(World, MaxLevelForTutorial, 10, "The highest level with which you can enter the tutorial") +RULE_INT(World, TutorialZoneID, 189, "Zone ID of the tutorial") +RULE_INT(World, GuildBankZoneID, 345, "Zone ID of the guild bank") +RULE_INT(World, MinOfflineTimeToReturnHome, 21600, "Minimum offline time to activate the Return Home button. 21600 seconds is 6 Hours") RULE_INT(World, MaxClientsPerIP, -1, "Maximum number of clients allowed to connect per IP address if account status is < AddMaxClientsStatus. Default value: -1 (feature disabled)") RULE_INT(World, ExemptMaxClientsStatus, -1, "Exempt accounts from the MaxClientsPerIP and AddMaxClientsStatus rules, if their status is >= this value. Default value: -1 (feature disabled)") RULE_INT(World, AddMaxClientsPerIP, -1, "Maximum number of clients allowed to connect per IP address if account status is < ExemptMaxClientsStatus. Default value: -1 (feature disabled)") RULE_INT(World, AddMaxClientsStatus, -1, "Accounts with status >= this rule will be allowed to use the amount of accounts defined in the AddMaxClientsPerIP. Default value: -1 (feature disabled)") -RULE_BOOL(World, MaxClientsSetByStatus, false, "If True, IP Limiting will be set to the status on the account as long as the status is > MaxClientsPerIP") -RULE_BOOL(World, EnableIPExemptions, false, "If True, ip_exemptions table is used, if there is no entry for the IP it will default to RuleI(World, MaxClientsPerIP)") +RULE_BOOL(World, MaxClientsSetByStatus, false, "If true, IP Limiting will be set to the status on the account as long as the status is > MaxClientsPerIP") +RULE_BOOL(World, EnableIPExemptions, false, "If true, ip_exemptions table is used, if there is no entry for the IP it will default to RuleI(World, MaxClientsPerIP)") RULE_BOOL(World, ClearTempMerchantlist, true, "Clears temp merchant items when world boots") RULE_BOOL(World, DeleteStaleCorpeBackups, true, "Deletes stale corpse backups older than 2 weeks") -RULE_BOOL(World, GMAccountIPList, false, "Check ip list against GM Accounts, AntiHack GM Accounts") -RULE_INT(World, MinGMAntiHackStatus, 1, "Minimum GM status to check against AntiHack list") +RULE_BOOL(World, GMAccountIPList, false, "Check IP list against GM accounts. This increases the security of GM accounts, e.g. if you only allow localhost '127.0.0.1' for GM accounts. Think carefully about what you enter!") +RULE_INT(World, MinGMAntiHackStatus, 1, "Minimum status to check against AntiHack list") RULE_INT(World, SoFStartZoneID, -1, "Sets the Starting Zone for SoF Clients separate from Titanium Clients (-1 is disabled)") RULE_INT(World, TitaniumStartZoneID, -1, "Sets the Starting Zone for Titanium Clients (-1 is disabled). Replaces the old method") RULE_INT(World, ExpansionSettings, 16383, "Sets the expansion settings for the server, This is sent on login to world and affects client expansion settings. Defaults to all expansions enabled up to TSS") -RULE_BOOL(World, UseClientBasedExpansionSettings, true, "if true it will overrule World, ExpansionSettings and set someone's expansion based on the client they're using") -RULE_INT(World, PVPSettings, 0, "Sets the PVP settings for the server, 1 = Rallos Zek RuleSet, 2 = Tallon/Vallon Zek Ruleset, 4 = Sullon Zek Ruleset, 6 = Discord Ruleset, anything above 6 is the Discord Ruleset without the no-drop restrictions removed. TODO: Edit IsAttackAllowed in Zone to accomodate for these rules") -RULE_INT(World, PVPMinLevel, 0, "minimum level to pvp") -RULE_BOOL (World, IsGMPetitionWindowEnabled, false, "") -RULE_INT (World, FVNoDropFlag, 0, "Sets the Firiona Vie settings on the client. If set to 2, the flag will be set for GMs only, allowing trading of no-drop items") -RULE_BOOL (World, IPLimitDisconnectAll, false, "") +RULE_BOOL(World, UseClientBasedExpansionSettings, true, "If true it will overrule World, ExpansionSettings and set someone's expansion based on the client they're using") +RULE_INT(World, PVPSettings, 0, "Sets the PVP settings for the server. 1=Rallos Zek RuleSet, 2=Tallon/Vallon Zek Ruleset, 4=Sullon Zek Ruleset, 6=Discord Ruleset, anything above 6 is the Discord Ruleset without the no-drop restrictions removed. NOTE: edit IsAttackAllowed in Zone-table to accomodate for these rules") +RULE_INT(World, PVPMinLevel, 0, "Minimum level to pvp") +RULE_BOOL (World, IsGMPetitionWindowEnabled, false, "Setting whether the GM petition window is available") +RULE_INT (World, FVNoDropFlag, 0, "Sets the Firiona Vie settings on the client, allowing trading of no-drop items. 1=for all players, 2=for GM only") +RULE_BOOL (World, IPLimitDisconnectAll, false, "Disconnect all current clients by IP if they go over the IP limit. This should allow people to quickly reconnect in the case of dead sessions waiting to timeout") RULE_BOOL(World, MaxClientsSimplifiedLogic, false, "New logic that only uses ExemptMaxClientsStatus and MaxClientsPerIP. Done on the loginserver. This mimics the P99-style special IP rules") -RULE_INT (World, TellQueueSize, 20, "") +RULE_INT (World, TellQueueSize, 20, "Maximum tell queue size") RULE_BOOL(World, StartZoneSameAsBindOnCreation, true, "Should the start zone ALWAYS be the same location as your bind?") -RULE_BOOL(World, EnforceCharacterLimitAtLogin, false, "") +RULE_BOOL(World, EnforceCharacterLimitAtLogin, false, "Enforce the limit for characters that are online at login") RULE_CATEGORY_END() RULE_CATEGORY(Zone) -RULE_INT(Zone, ClientLinkdeadMS, 90000, "the time a client remains link dead on the server after a sudden disconnection") -RULE_INT(Zone, GraveyardTimeMS, 1200000, "ms time until a player corpse is moved to a zone's graveyard, if one is specified for the zone") -RULE_BOOL(Zone, EnableShadowrest, 1, "enables or disables the shadowrest zone feature for player corpses. Default is turned on") +RULE_INT(Zone, ClientLinkdeadMS, 90000, "The time a client remains link dead on the server after a sudden disconnection") +RULE_INT(Zone, GraveyardTimeMS, 1200000, "Milliseconds time until a player corpse is moved to a zone's graveyard, if one is specified for the zone") +RULE_BOOL(Zone, EnableShadowrest, 1, "Enables or disables the Shadowrest zone feature for player corpses. Default is turned on") RULE_BOOL(Zone, UsePlayerCorpseBackups, true, "Keeps backups of player corpses") RULE_INT(Zone, MQWarpExemptStatus, -1, "Required status level to exempt the MQWarpDetector. Set to -1 to disable this feature") RULE_INT(Zone, MQZoneExemptStatus, -1, "Required status level to exempt the MQZoneDetector. Set to -1 to disable this feature") @@ -262,20 +258,17 @@ RULE_BOOL(Zone, EnableMQWarpDetector, true, "Enable the MQWarp Detector. Set to RULE_BOOL(Zone, EnableMQZoneDetector, true, "Enable the MQZone Detector. Set to False to disable this feature") RULE_BOOL(Zone, EnableMQGateDetector, true, "Enable the MQGate Detector. Set to False to disable this feature") RULE_BOOL(Zone, EnableMQGhostDetector, true, "Enable the MQGhost Detector. Set to False to disable this feature") -RULE_REAL(Zone, MQWarpDetectionDistanceFactor, 9.0, "clients move at 4.4 about if in a straight line but with movement and to acct for lag we raise it a bit") -RULE_BOOL(Zone, MarkMQWarpLT, false, "") -RULE_INT(Zone, AutoShutdownDelay, 5000, "How long a dynamic zone stays loaded while empty") -RULE_INT(Zone, PEQZoneReuseTime, 900, "How long, in seconds, until you can reuse the #peqzone command") +RULE_REAL(Zone, MQWarpDetectionDistanceFactor, 9.0, "Distance factor for MQ-Warp detection. Clients move at 4.4 about if in a straight line but with movement and to acct for lag we raise it a bit") +RULE_INT(Zone, AutoShutdownDelay, 5000, "How long a dynamic zone stays loaded while empty (milliseconds)") +RULE_INT(Zone, PEQZoneReuseTime, 900, "Time between two uses of the #peqzone command (seconds)") RULE_INT(Zone, PEQZoneDebuff1, 4454, "First debuff casted by #peqzone Default is Cursed Keeper's Blight") RULE_INT(Zone, PEQZoneDebuff2, 2209, "Second debuff casted by #peqzone Default is Tendrils of Apathy") -RULE_BOOL(Zone, UsePEQZoneDebuffs, true, "Will determine if #peqzone will debuff players or not when used") -RULE_REAL(Zone, HotZoneBonus, 0.75, "") -RULE_INT(Zone, EbonCrystalItemID, 40902, "") -RULE_INT(Zone, RadiantCrystalItemID, 40903, "") -RULE_BOOL(Zone, LevelBasedEXPMods, false, "Allows you to use the level_exp_mods table in consideration to your players EXP hits") +RULE_BOOL(Zone, UsePEQZoneDebuffs, true, "Setting if the command #peqzone applies the defined debuffs") +RULE_REAL(Zone, HotZoneBonus, 0.75, "Value which is added to the experience multiplier. This also applies to AA experience.") +RULE_INT(Zone, EbonCrystalItemID, 40902, "Item ID for Ebon Crystal") +RULE_INT(Zone, RadiantCrystalItemID, 40903, "Item ID for Radiant Crystal") +RULE_BOOL(Zone, LevelBasedEXPMods, false, "Allows you to use the level_exp_mods table in consideration to your players experience hits") RULE_INT(Zone, WeatherTimer, 600, "Weather timer when no duration is available") -RULE_BOOL(Zone, EnableLoggedOffReplenishments, true, "") -RULE_INT(Zone, MinOfflineTimeToReplenishments, 21600, "21600 seconds is 6 Hours") RULE_BOOL(Zone, UseZoneController, true, "Enables the ability to use persistent quest based zone controllers (zone_controller.pl/lua)") RULE_BOOL(Zone, EnableZoneControllerGlobals, false, "Enables the ability to use quest globals with the zone controller NPC") RULE_INT(Zone, GlobalLootMultiplier, 1, "Sets Global Loot drop multiplier for database based drops, useful for double, triple loot etc") @@ -284,11 +277,11 @@ RULE_INT(Zone, SecondsBeforeIdle, 60, "Seconds before IDLE_WHEN_EMPTY define kic RULE_CATEGORY_END() RULE_CATEGORY(Map) -RULE_BOOL(Map, FixPathingZOnSendTo, false, "try to repair Z coords in the SendTo routine as well") +RULE_BOOL(Map, FixPathingZOnSendTo, false, "Try to repair Z coordinates in the SendTo routine as well") RULE_BOOL(Map, FixZWhenPathing, true, "Automatically fix NPC Z coordinates when moving/pathing/engaged (Far less CPU intensive than its predecessor)") -RULE_REAL(Map, DistanceCanTravelBeforeAdjustment, 10.0, "distance a mob can path before FixZ is called, depends on FixZWhenPathing") +RULE_REAL(Map, DistanceCanTravelBeforeAdjustment, 10.0, "Distance a mob can path before FixZ is called, depends on FixZWhenPathing") RULE_BOOL(Map, MobZVisualDebug, false, "Displays spell effects determining whether or not NPC is hitting Best Z calcs (blue for hit, red for miss)") -RULE_REAL(Map, FixPathingZMaxDeltaSendTo, 20, "at runtime in SendTo: max change in Z to allow the BestZ code to apply") +RULE_REAL(Map, FixPathingZMaxDeltaSendTo, 20, "At runtime in SendTo: maximum change in Z to allow the BestZ code to apply") RULE_INT(Map, FindBestZHeightAdjust, 1, "Adds this to the current Z before seeking the best Z position") RULE_CATEGORY_END() @@ -296,9 +289,9 @@ RULE_CATEGORY(Pathing) RULE_BOOL(Pathing, Guard, true, "Enable pathing for mobs moving to their guard point") RULE_BOOL(Pathing, Find, true, "Enable pathing for FindPerson requests from the client") RULE_BOOL(Pathing, Fear, true, "Enable pathing for fear") -RULE_REAL(Pathing, NavmeshStepSize, 100.0f, "") -RULE_REAL(Pathing, ShortMovementUpdateRange, 130.0f, "") -RULE_INT(Pathing, MaxNavmeshNodes, 4092, "Max navmesh nodes in a traversable path") +RULE_REAL(Pathing, NavmeshStepSize, 100.0f, "Step size for the movement manager") +RULE_REAL(Pathing, ShortMovementUpdateRange, 130.0f, "Range for short movement updates") +RULE_INT(Pathing, MaxNavmeshNodes, 4092, "Maximum navmesh nodes in a traversable path") RULE_CATEGORY_END() RULE_CATEGORY(Watermap) @@ -314,48 +307,47 @@ RULE_REAL(Watermap, FishingLineStepSize, 1, "Basic step size for fishing calc, t RULE_CATEGORY_END() RULE_CATEGORY(Spells) -RULE_INT(Spells, AutoResistDiff, 15, "") RULE_REAL(Spells, ResistChance, 2.0, "chance to resist given no resists and same level") -RULE_REAL(Spells, ResistMod, 0.40, "multiplier, chance to resist = this * ResistAmount") +RULE_REAL(Spells, ResistMod, 0.40, "Multiplier, chance to resist = this * ResistAmount") RULE_REAL(Spells, PartialHitChance, 0.7, "The chance when a spell is resisted that it will partial hit") RULE_REAL(Spells, PartialHitChanceFear, 0.25, "The chance when a fear spell is resisted that it will partial hit") -RULE_INT(Spells, BaseCritChance, 0, "base % chance that everyone has to crit a spell") -RULE_INT(Spells, BaseCritRatio, 100, "base % bonus to damage on a successful spell crit. 100 = 2x damage") -RULE_INT(Spells, WizCritLevel, 12, "level wizards first get spell crits") -RULE_INT(Spells, WizCritChance, 7, "wiz's crit chance, on top of BaseCritChance") -RULE_INT(Spells, WizCritRatio, 0, "wiz's crit bonus, on top of BaseCritRatio (should be 0 for Live-like)") -RULE_INT(Spells, ResistPerLevelDiff, 85, "8.5 resist per level difference") +RULE_INT(Spells, BaseCritChance, 0, "Base percentage chance that everyone has to crit a spell") +RULE_INT(Spells, BaseCritRatio, 100, "Base percentage bonus to damage on a successful spell crit. 100=2xdamage") +RULE_INT(Spells, WizCritLevel, 12, "Level wizards first get spell crits") +RULE_INT(Spells, WizCritChance, 7, "Wizards crit chance, on top of BaseCritChance") +RULE_INT(Spells, WizCritRatio, 0, "Wizards crit bonus, on top of BaseCritRatio (should be 0 for Live-like)") +RULE_INT(Spells, ResistPerLevelDiff, 85, "Resist per level difference. 85=8.5") RULE_INT(Spells, TranslocateTimeLimit, 0, "If not zero, time in seconds to accept a Translocate") -RULE_INT(Spells, SacrificeMinLevel, 46, "first level Sacrifice will work on") -RULE_INT(Spells, SacrificeMaxLevel, 69, "last level Sacrifice will work on") -RULE_INT(Spells, SacrificeItemID, 9963, "Item ID of the item Sacrifice will return (defaults to an EE)") -RULE_BOOL(Spells, EnableSpellGlobals, false, "If Enabled, spells check the spell_globals table and compare character data from their quest globals before allowing the spell to scribe with scribespells/traindiscs") -RULE_BOOL(Spells, EnableSpellBuckets, false, "If Enabled, spells check the spell_buckets table and compare character data from their data buckets before allowing the spell to scribe with scribespells/traindiscs") -RULE_INT(Spells, MaxBuffSlotsNPC, 60, "default to Tit's limit") -RULE_INT(Spells, MaxSongSlotsNPC, 0, "NPCs don't have songs ...") -RULE_INT(Spells, MaxDiscSlotsNPC, 0, "NPCs don't have discs ...") -RULE_INT(Spells, MaxTotalSlotsNPC, 60, "default to Tit's limit") -RULE_INT(Spells, MaxTotalSlotsPET, 30, "default to Tit's limit") -RULE_BOOL (Spells, EnableBlockedBuffs, true, "") -RULE_INT(Spells, ReflectType, 3, "0 = disabled, 1 = single target player spells only, 2 = all player spells, 3 = all single target spells, 4 = all spells") -RULE_BOOL(Spells, ReflectMessagesClose, true, "Live functionality is for Reflect messages to show to players within close proximity, false shows just player reflecting") +RULE_INT(Spells, SacrificeMinLevel, 46, "First level the spell Sacrifice will work on") +RULE_INT(Spells, SacrificeMaxLevel, 69, "Last level the spell Sacrifice will work on") +RULE_INT(Spells, SacrificeItemID, 9963, "Item ID of the item Sacrifice will return (defaults to an Essence Emerald)") +RULE_BOOL(Spells, EnableSpellGlobals, false, "If enabled, spells check the spell_globals table and compare character data from their quest globals before allowing the spell to scribe with scribespells/traindiscs") +RULE_BOOL(Spells, EnableSpellBuckets, false, "If enabled, spells check the spell_buckets table and compare character data from their data buckets before allowing the spell to scribe with scribespells/traindiscs") +RULE_INT(Spells, MaxBuffSlotsNPC, 60, "Maximum number of NPC buff slots. The default value is the limit of the Titanium client") +RULE_INT(Spells, MaxSongSlotsNPC, 0, "Maximum number of NPC song slots. NPC don't have songs, so it should be 0") +RULE_INT(Spells, MaxDiscSlotsNPC, 0, "Maximum number of NPC disc slots. NPC don't have discs, so it should be 0") +RULE_INT(Spells, MaxTotalSlotsNPC, 60, "Maximum total of NPC slots. The default value is the limit of the Titanium client") +RULE_INT(Spells, MaxTotalSlotsPET, 30, "Maximum total of pet slots. The default value is the limit of the Titanium client") +RULE_BOOL (Spells, EnableBlockedBuffs, true, "Allow blocked spells") +RULE_INT(Spells, ReflectType, 3, "Reflect type. 0=disabled, 1=single target player spells only, 2=all player spells, 3=all single target spells, 4=all spells") +RULE_BOOL(Spells, ReflectMessagesClose, true, "True (Live functionality) is for Reflect messages to show to players within close proximity. False shows just player reflecting") RULE_INT(Spells, VirusSpreadDistance, 30, "The distance a viral spell will jump to its next victim") RULE_BOOL(Spells, LiveLikeFocusEffects, true, "Determines whether specific healing, dmg and mana reduction focuses are randomized") -RULE_INT(Spells, BaseImmunityLevel, 55, "The level that targets start to be immune to stun, fear and mez spells with a max level of 0") -RULE_BOOL(Spells, NPCIgnoreBaseImmunity, true, "Whether or not NPCs get to ignore the BaseImmunityLevel for their spells") +RULE_INT(Spells, BaseImmunityLevel, 55, "The level that targets start to be immune to stun, fear and mez spells with a maximum level of 0") +RULE_BOOL(Spells, NPCIgnoreBaseImmunity, true, "Whether or not NPCget to ignore the BaseImmunityLevel for their spells") RULE_REAL(Spells, AvgSpellProcsPerMinute, 6.0, "Adjust rate for sympathetic spell procs") -RULE_INT(Spells, ResistFalloff, 67, "Max that level that will adjust our resist chance based on level modifiers") -RULE_INT(Spells, CharismaEffectiveness, 10, "Deterimes how much resist modification charisma applies to charm/pacify checks. Default 10 CHA = -1 resist mod") -RULE_INT(Spells, CharismaEffectivenessCap, 255, "Deterimes how much resist modification charisma applies to charm/pacify checks. Default 10 CHA = -1 resist mod") +RULE_INT(Spells, ResistFalloff, 67, "Maximum that level that will adjust our resist chance based on level modifiers") +RULE_INT(Spells, CharismaEffectiveness, 10, "Determines how much resist modification charisma applies to charm/pacify checks. Default 10 CHA = -1 resist mod") +RULE_INT(Spells, CharismaEffectivenessCap, 255, "Determines how much resist modification charisma applies to charm/pacify checks. Default 10 CHA = -1 resist mod") RULE_BOOL(Spells, CharismaCharmDuration, false, "Allow CHA resist mod to extend charm duration") RULE_INT(Spells, CharmBreakCheckChance, 25, "Determines chance for a charm break check to occur each buff tick") RULE_BOOL(Spells, CharmDisablesSpecialAbilities, false, "When charm is cast on an NPC, strip their special abilities") -RULE_INT(Spells, MaxCastTimeReduction, 50, "Max percent your spell cast time can be reduced by spell haste") +RULE_INT(Spells, MaxCastTimeReduction, 50, "Maximum percent your spell cast time can be reduced by spell haste") RULE_INT(Spells, RootBreakFromSpells, 55, "Chance for root to break when cast on") RULE_INT(Spells, DeathSaveCharismaMod, 3, "Determines how much charisma effects chance of death save firing") RULE_INT(Spells, DivineInterventionHeal, 8000, "Divine intervention heal amount") RULE_INT(Spells, AdditiveBonusWornType, 0, "Calc worn bonuses to add together (instead of taking highest) if set to THIS worn type. (2=Will covert live items automatically)") -RULE_BOOL(Spells, UseCHAScribeHack, false, "ScribeSpells and TrainDiscs quest functions will ignore entries where field 12 is CHA. What's the best way to do this?") +RULE_BOOL(Spells, UseCHAScribeHack, false, "ScribeSpells and TrainDiscs quest functions will ignore entries where field 12 is CHA") RULE_BOOL(Spells, BuffLevelRestrictions, true, "Buffs will not land on low level toons like live") RULE_INT(Spells, RootBreakCheckChance, 70, "Determines chance for a root break check to occur each buff tick") RULE_INT(Spells, FearBreakCheckChance, 70, "Determines chance for a fear break check to occur each buff tick") @@ -366,166 +358,166 @@ RULE_INT(Spells, FRProjectileItem_NPC, 80684, "Item id for NPC Fire 'spell proje RULE_BOOL(Spells, UseLiveSpellProjectileGFX, false, "Use spell projectile graphics set in the spells_new table (player_1). Server must be using UF+ spell file") RULE_BOOL(Spells, FocusCombatProcs, false, "Allow all combat procs to receive focus effects") RULE_BOOL(Spells, PreNerfBardAEDoT, false, "Allow bard AOE dots to damage targets when moving") -RULE_INT(Spells, AI_SpellCastFinishedFailRecast, 800, "AI spell recast time(MS) when an spell is cast but fails (ie stunned)") -RULE_INT(Spells, AI_EngagedNoSpellMinRecast, 500, "AI spell recast time(MS) check when no spell is cast while engaged. (min time in random)") -RULE_INT(Spells, AI_EngagedNoSpellMaxRecast, 1000, "AI spell recast time(MS) check when no spell is cast engaged.(max time in random)") +RULE_INT(Spells, AI_SpellCastFinishedFailRecast, 800, "AI spell recast time(milliseconds) when an spell is cast but fails (ie stunned)") +RULE_INT(Spells, AI_EngagedNoSpellMinRecast, 500, "AI spell recast time (milliseconds) check when no spell is cast while engaged. (min time in random)") +RULE_INT(Spells, AI_EngagedNoSpellMaxRecast, 1000, "AI spell recast time (milliseconds) check when no spell is cast engaged.(maximum time in random)") RULE_INT(Spells, AI_EngagedBeneficialSelfChance, 100, "Chance during first AI Cast check to do a beneficial spell on self") RULE_INT(Spells, AI_EngagedBeneficialOtherChance, 25, "Chance during second AI Cast check to do a beneficial spell on others") RULE_INT(Spells, AI_EngagedDetrimentalChance, 20, "Chance during third AI Cast check to do a determental spell on others") -RULE_INT(Spells, AI_PursueNoSpellMinRecast, 500, "AI spell recast time(MS) check when no spell is cast while chasing target. (min time in random)") -RULE_INT(Spells, AI_PursueNoSpellMaxRecast, 2000, "AI spell recast time(MS) check when no spell is cast while chasing target. (max time in random)") +RULE_INT(Spells, AI_PursueNoSpellMinRecast, 500, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (min time in random)") +RULE_INT(Spells, AI_PursueNoSpellMaxRecast, 2000, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (maximum time in random)") RULE_INT(Spells, AI_PursueDetrimentalChance, 90, "Chance while chasing target to cast a detrimental spell") -RULE_INT(Spells, AI_IdleNoSpellMinRecast, 6000, "AI spell recast time(MS) check when no spell is cast while idle. (min time in random)") -RULE_INT(Spells, AI_IdleNoSpellMaxRecast, 60000, "AI spell recast time(MS) check when no spell is cast while chasing target. (max time in random)") +RULE_INT(Spells, AI_IdleNoSpellMinRecast, 6000, "AI spell recast time (milliseconds) check when no spell is cast while idle. (min time in random)") +RULE_INT(Spells, AI_IdleNoSpellMaxRecast, 60000, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (maximum time in random)") RULE_INT(Spells, AI_IdleBeneficialChance, 100, "Chance while idle to do a beneficial spell on self or others") -RULE_INT(Spells, AI_HealHPPct, 50, "HP Pct NPCs will start heals at (in and out of combat) if spell's max_hp is not set") -RULE_BOOL(Spells, SHDProcIDOffByOne, true, "pre June 2009 SHD spell procs were off by 1, they stopped doing this in June 2009 (so UF+ spell files need this false)") -RULE_BOOL(Spells, Jun182014HundredHandsRevamp, false, "this should be true for if you import a spell file newer than June 18, 2014") +RULE_INT(Spells, AI_HealHPPct, 50, "Hitpoint percentage at which NPC starts healing when max_hp of the spell is not set ((nside and outside combat)") +RULE_BOOL(Spells, SHDProcIDOffByOne, true, "Pre June 2009 SHD spell procs were off by 1, they stopped doing this in June 2009 (so UF+ spell files need this false)") +RULE_BOOL(Spells, Jun182014HundredHandsRevamp, false, "This should be true for if you import a spell file newer than June 18, 2014") RULE_BOOL(Spells, SwarmPetTargetLock, false, "Use old method of swarm pets target locking till target dies then despawning") -RULE_BOOL(Spells, NPC_UseFocusFromSpells, true, "Allow npcs to use most spell derived focus effects") -RULE_BOOL(Spells, NPC_UseFocusFromItems, false, "Allow npcs to use most item derived focus effects") +RULE_BOOL(Spells, NPC_UseFocusFromSpells, true, "Allow NPC to use most spell derived focus effects") +RULE_BOOL(Spells, NPC_UseFocusFromItems, false, "Allow NPC to use most item derived focus effects") RULE_BOOL(Spells, UseAdditiveFocusFromWornSlot, false, "Allows an additive focus effect to be calculated from worn slot") -RULE_BOOL(Spells, AlwaysSendTargetsBuffs, false, "ignore LAA level if true") -RULE_BOOL(Spells, FlatItemExtraSpellAmt, false, "allow SpellDmg stat to affect all spells, regardless of cast time/cooldown/etc") -RULE_BOOL(Spells, IgnoreSpellDmgLvlRestriction, false, "ignore the 5 level spread on applying SpellDmg") -RULE_BOOL(Spells, AllowItemTGB, false, "TGB doesn't work with items on live, custom servers want it though") +RULE_BOOL(Spells, AlwaysSendTargetsBuffs, false, "Ignore Leadership Alternate Abilities level if true") +RULE_BOOL(Spells, FlatItemExtraSpellAmt, false, "Allow SpellDmg stat to affect all spells, regardless of cast time/cooldown/etc") +RULE_BOOL(Spells, IgnoreSpellDmgLvlRestriction, false, "Ignore the 5 level spread on applying SpellDmg") +RULE_BOOL(Spells, AllowItemTGB, false, "Target group buff (/tgb) doesn't work with items on live, custom servers want it though") RULE_BOOL(Spells, NPCInnateProcOverride, true, "NPC innate procs override the target type to single target") -RULE_BOOL(Spells, OldRainTargets, false, "use old incorrectly implemented max targets for rains") -RULE_BOOL(Spells, NPCSpellPush, false, "enable spell push on NPCs") +RULE_BOOL(Spells, OldRainTargets, false, "Use old incorrectly implemented maximum targets for rains") +RULE_BOOL(Spells, NPCSpellPush, false, "Enable spell push on NPCs") RULE_CATEGORY_END() RULE_CATEGORY(Combat) -RULE_INT(Combat, PetBaseCritChance, 0, "Pet Base crit chance") -RULE_INT(Combat, NPCBashKickLevel, 6, "The level that npcs can KICK/BASH") +RULE_INT(Combat, PetBaseCritChance, 0, "Pet base crit chance") +RULE_INT(Combat, NPCBashKickLevel, 6, "The level that NPCcan KICK/BASH") RULE_INT(Combat, NPCBashKickStunChance, 15, "Percent chance that a bash/kick will stun") -RULE_INT(Combat, MeleeCritDifficulty, 8900, "lower is easier") -RULE_INT(Combat, ArcheryCritDifficulty, 3400, "lower is easier") -RULE_INT(Combat, ThrowingCritDifficulty, 1100, "lower is easier") -RULE_BOOL(Combat, NPCCanCrit, false, "true allows non PC pet NPCs to crit") -RULE_BOOL(Combat, UseIntervalAC, true, "") -RULE_INT(Combat, PetAttackMagicLevel, 30, "") -RULE_BOOL(Combat, EnableFearPathing, true, "") +RULE_INT(Combat, MeleeCritDifficulty, 8900, "Value against which is rolled to check if a melee crit is triggered. Lower is easier") +RULE_INT(Combat, ArcheryCritDifficulty, 3400, "Value against which is rolled to check if a archery crit is triggered. Lower is easier") +RULE_INT(Combat, ThrowingCritDifficulty, 1100, "Value against which is rolled to check if a throwing crit is triggered. Lower is easier") +RULE_BOOL(Combat, NPCCanCrit, false, "Setting whether an NPC can land critical hits") +RULE_BOOL(Combat, UseIntervalAC, true, "") +RULE_INT(Combat, PetAttackMagicLevel, 30, "Level at which pets can cause magic damage") +RULE_BOOL(Combat, EnableFearPathing, true, "Setting whether to use pathing during fear") RULE_REAL(Combat, FleeMultiplier, 2.0, "Determines how quickly a NPC will slow down while fleeing. Decrease multiplier to slow NPC down quicker") RULE_BOOL(Combat, FleeGray, true, "If true FleeGrayHPRatio will be used") -RULE_INT(Combat, FleeGrayHPRatio, 50, "HP % when a Gray NPC begins to flee") -RULE_INT(Combat, FleeGrayMaxLevel, 18, "NPC's above this level won't do gray/green con flee") -RULE_INT(Combat, FleeHPRatio, 25, "HP % when a NPC begins to flee") +RULE_INT(Combat, FleeGrayHPRatio, 50, "HP percentage when a Gray NPC begins to flee") +RULE_INT(Combat, FleeGrayMaxLevel, 18, "NPC above this level won't do gray/green con flee") +RULE_INT(Combat, FleeHPRatio, 25, "HP percentage when a NPC begins to flee") RULE_BOOL(Combat, FleeIfNotAlone, false, "If false, mobs won't flee if other mobs are in combat with it") -RULE_BOOL(Combat, AdjustProcPerMinute, true, "") -RULE_REAL(Combat, AvgProcsPerMinute, 2.0, "") -RULE_REAL(Combat, ProcPerMinDexContrib, 0.075, "") -RULE_REAL(Combat, BaseProcChance, 0.035, "") -RULE_REAL(Combat, ProcDexDivideBy, 11000, "") +RULE_BOOL(Combat, AdjustProcPerMinute, true, "Adapt the average proc rate to the speed of the weapon") +RULE_REAL(Combat, AvgProcsPerMinute, 2.0, "Average proc rate per minute") +RULE_REAL(Combat, ProcPerMinDexContrib, 0.075, "Increases the probability of a proc increased by DEX by the value indicated") +RULE_REAL(Combat, BaseProcChance, 0.035, "Base chance for procs") +RULE_REAL(Combat, ProcDexDivideBy, 11000, "Divisor for the probability of a proc increased by dexterity") RULE_BOOL(Combat, AdjustSpecialProcPerMinute, true, "Set PPM for special abilities like HeadShot (Live does this as of 4-14)") RULE_REAL(Combat, AvgSpecialProcsPerMinute, 2.0, "Unclear what best value is atm") -RULE_REAL(Combat, BaseHitChance, 69.0, "") -RULE_REAL(Combat, NPCBonusHitChance, 26.0, "") -RULE_REAL(Combat, HitFalloffMinor, 5.0, "hit will fall off up to 5% over the initial level range") -RULE_REAL(Combat, HitFalloffModerate, 7.0, "hit will fall off up to 7% over the three levels after the initial level range") -RULE_REAL(Combat, HitFalloffMajor, 50.0, "hit will fall off sharply if we're outside the minor and moderate range") -RULE_REAL(Combat, HitBonusPerLevel, 1.2, "You gain this % of hit for every level you are above your target") -RULE_REAL(Combat, WeaponSkillFalloff, 0.33, "For every weapon skill point that's not maxed you lose this % of hit") +RULE_REAL(Combat, BaseHitChance, 69.0, "Base chance to hiz") +RULE_REAL(Combat, NPCBonusHitChance, 26.0, "Bonus chance to hit for NPC") +RULE_REAL(Combat, HitFalloffMinor, 5.0, "Hit will fall off up to 5% over the initial level range") +RULE_REAL(Combat, HitFalloffModerate, 7.0, "Hit will fall off up to 7% over the three levels after the initial level range") +RULE_REAL(Combat, HitFalloffMajor, 50.0, "Hit will fall off sharply if we're outside the minor and moderate range") +RULE_REAL(Combat, HitBonusPerLevel, 1.2, "You gain this percentage of hit for every level you are above your target") +RULE_REAL(Combat, WeaponSkillFalloff, 0.33, "For every weapon skill point that's not maxed you lose this percentage of hit") RULE_REAL(Combat, ArcheryHitPenalty, 0.25, "Archery has a hit penalty to try to help balance it with the plethora of long term +hit modifiers for it") -RULE_REAL(Combat, AgiHitFactor, 0.01, "") -RULE_REAL(Combat, MinChancetoHit, 5.0, "Minimum % chance to hit with regular melee/ranged") -RULE_REAL(Combat, MaxChancetoHit, 95.0, "Maximum % chance to hit with regular melee/ranged") +RULE_REAL(Combat, AgiHitFactor, 0.01, "Factor with which agility is taken into account in the hit probability. Higher is better") +RULE_REAL(Combat, MinChancetoHit, 5.0, "Minimum percentage chance to hit with regular melee/ranged") +RULE_REAL(Combat, MaxChancetoHit, 95.0, "Maximum percentage chance to hit with regular melee/ranged") RULE_INT(Combat, MinRangedAttackDist, 25, "Minimum Distance to use Ranged Attacks") RULE_BOOL(Combat, ArcheryBonusRequiresStationary, true, "does the 2x archery bonus chance require a stationary npc") -RULE_REAL(Combat, ArcheryBaseDamageBonus, 1, "% Modifier to Base Archery Damage (.5 = 50% base damage, 1 = 100%, 2 = 200%)") -RULE_REAL(Combat, ArcheryNPCMultiplier, 1.0, "this is multiplied by the regular dmg to get the archery dmg") -RULE_BOOL(Combat, AssistNoTargetSelf, true, "when assisting a target that does not have a target: true = target self, false = leave target as was before assist (false = live like)") -RULE_INT(Combat, MaxRampageTargets, 3, "max number of people hit with rampage") -RULE_INT(Combat, DefaultRampageTargets, 1, "default number of people to hit with rampage") -RULE_BOOL(Combat, RampageHitsTarget, false, "rampage will hit the target if it still has targets left") -RULE_INT(Combat, MaxFlurryHits, 2, "max number of extra hits from flurry") -RULE_INT(Combat, MonkDamageTableBonus, 5, "% bonus monks get to their damage table calcs") -RULE_INT(Combat, FlyingKickBonus, 25, "% Modifier that this skill gets to str and skill bonuses") -RULE_INT(Combat, DragonPunchBonus, 20, "% Modifier that this skill gets to str and skill bonuses") -RULE_INT(Combat, EagleStrikeBonus, 15, "% Modifier that this skill gets to str and skill bonuses") -RULE_INT(Combat, TigerClawBonus, 10, "% Modifier that this skill gets to str and skill bonuses") -RULE_INT(Combat, RoundKickBonus, 5, "% Modifier that this skill gets to str and skill bonuses") -RULE_INT(Combat, FrenzyBonus, 0, "% Modifier to damage") -RULE_INT(Combat, BackstabBonus, 0, "% Modifier to damage") +RULE_REAL(Combat, ArcheryBaseDamageBonus, 1, "Percentage modifier to base archery Damage 0.5=50% base damage, 1=100%,2=200%") +RULE_REAL(Combat, ArcheryNPCMultiplier, 1.0, "Value is multiplied by the regular dmg to get the archery dmg") +RULE_BOOL(Combat, AssistNoTargetSelf, true, "When assisting a target that does not have a target: true = target self, false = leave target as was before assist (false = live like)") +RULE_INT(Combat, MaxRampageTargets, 3, "Maximum number of people hit with rampage") +RULE_INT(Combat, DefaultRampageTargets, 1, "Default number of people to hit with rampage") +RULE_BOOL(Combat, RampageHitsTarget, false, "Rampage will hit the target if it still has targets left") +RULE_INT(Combat, MaxFlurryHits, 2, "Maximum number of extra hits from flurry") +RULE_INT(Combat, MonkDamageTableBonus, 5, "Percentage bonus monks get to their damage table calcs") +RULE_INT(Combat, FlyingKickBonus, 25, "Percentage Modifier that this skill gets to str and skill bonuses") +RULE_INT(Combat, DragonPunchBonus, 20, "Percentage Modifier that this skill gets to str and skill bonuses") +RULE_INT(Combat, EagleStrikeBonus, 15, "Percentage Modifier that this skill gets to str and skill bonuses") +RULE_INT(Combat, TigerClawBonus, 10, "Percentage Modifier that this skill gets to str and skill bonuses") +RULE_INT(Combat, RoundKickBonus, 5, "Percentage Modifier that this skill gets to str and skill bonuses") +RULE_INT(Combat, FrenzyBonus, 0, "Percentage Modifier to damage") +RULE_INT(Combat, BackstabBonus, 0, "Percentage Modifier to damage") RULE_BOOL(Combat, ProcTargetOnly, true, "true = procs will only affect our target, false = procs will affect all of our targets") -RULE_REAL(Combat, NPCACFactor, 2.25, "") -RULE_INT(Combat, ClothACSoftcap, 75, "") -RULE_INT(Combat, LeatherACSoftcap, 100, "") -RULE_INT(Combat, MonkACSoftcap, 120, "") -RULE_INT(Combat, ChainACSoftcap, 200, "") -RULE_INT(Combat, PlateACSoftcap, 300, "") -RULE_REAL(Combat, AAMitigationACFactor, 3.0, "") -RULE_REAL(Combat, WarriorACSoftcapReturn, 0.45, "") -RULE_REAL(Combat, KnightACSoftcapReturn, 0.33, "") -RULE_REAL(Combat, LowPlateChainACSoftcapReturn, 0.23, "") -RULE_REAL(Combat, LowChainLeatherACSoftcapReturn, 0.17, "") -RULE_REAL(Combat, CasterACSoftcapReturn, 0.06, "") -RULE_REAL(Combat, MiscACSoftcapReturn, 0.3, "") -RULE_BOOL(Combat, OldACSoftcapRules, false, "use old softcaps") -RULE_BOOL(Combat, UseOldDamageIntervalRules, false, "use old damage formulas for everything") -RULE_REAL(Combat, WarACSoftcapReturn, 0.3448, "new AC returns") -RULE_REAL(Combat, ClrRngMnkBrdACSoftcapReturn, 0.3030, "") -RULE_REAL(Combat, PalShdACSoftcapReturn, 0.3226, "") -RULE_REAL(Combat, DruNecWizEncMagACSoftcapReturn, 0.2000, "") -RULE_REAL(Combat, RogShmBstBerACSoftcapReturn, 0.2500, "") -RULE_REAL(Combat, SoftcapFactor, 1.88, "") -RULE_REAL(Combat, ACthac0Factor, 0.55, "") -RULE_REAL(Combat, ACthac20Factor, 0.55, "") -RULE_INT(Combat, HitCapPre20, 40, "live has it capped at 40 for whatever dumb reason... this is mainly for custom servers") -RULE_INT(Combat, HitCapPre10, 20, "live has it capped at 20, see above") -RULE_INT(Combat, MinHastedDelay, 400, "how fast we can get with haste") -RULE_REAL(Combat, AvgDefProcsPerMinute, 2.0, "") +RULE_REAL(Combat, NPCACFactor, 2.25, "") +RULE_INT(Combat, ClothACSoftcap, 75, "If OldACSoftcapRules is true: armorclass softcap for cloth armor") +RULE_INT(Combat, LeatherACSoftcap, 100, "If OldACSoftcapRules is true: armorclass softcap for leather armor") +RULE_INT(Combat, MonkACSoftcap, 120, "If OldACSoftcapRules is true: armorclass softcap for monks") +RULE_INT(Combat, ChainACSoftcap, 200, "If OldACSoftcapRules is true: armorclass softcap for chain armor") +RULE_INT(Combat, PlateACSoftcap, 300, "If OldACSoftcapRules is true: armorclass softcap for plate armor") +RULE_REAL(Combat, AAMitigationACFactor, 3.0, "If OldACSoftcapRules: AA mitgation armorclass factor") +RULE_REAL(Combat, WarriorACSoftcapReturn, 0.45, "If OldACSoftcapRules: warrior armorclass softcap increase-factor") +RULE_REAL(Combat, KnightACSoftcapReturn, 0.33, "If OldACSoftcapRules: SHD/PAL/MNK armorclass softcap increase-factor") +RULE_REAL(Combat, LowPlateChainACSoftcapReturn, 0.23, "If OldACSoftcapRules: CLR/BRD/BSK/ROG/SHA/MNK armorclass softcap increase-factor") +RULE_REAL(Combat, LowChainLeatherACSoftcapReturn, 0.17, "If OldACSoftcapRules: RNG/BST armorclass softcap increase-factor") +RULE_REAL(Combat, CasterACSoftcapReturn, 0.06, "If OldACSoftcapRules: WIZ/MAG/NEC/ENC/DRU armorclass softcap increase-factor") +RULE_REAL(Combat, MiscACSoftcapReturn, 0.3, "If OldACSoftcapRules true/false: unspecified classes armorclass softcap increase-factor") +RULE_BOOL(Combat, OldACSoftcapRules, false, "Setting if the old softcap values should be used") +RULE_BOOL(Combat, UseOldDamageIntervalRules, false, "Use old damage formulas for everything") +RULE_REAL(Combat, WarACSoftcapReturn, 0.3448, "WAR armorclass softcap increase-factor") +RULE_REAL(Combat, ClrRngMnkBrdACSoftcapReturn, 0.3030, "CLR/RNG/MNK/BRD armorclass softcap increase-factor") +RULE_REAL(Combat, PalShdACSoftcapReturn, 0.3226, "SHD/PAL armorclass softcap increase-factor") +RULE_REAL(Combat, DruNecWizEncMagACSoftcapReturn, 0.2000, "DRU/NEC/WIZ/ENC/MAG softcap increase-factor") +RULE_REAL(Combat, RogShmBstBerACSoftcapReturn, 0.2500, "ROG/SHM/BST/BER softcap increase-factor") +RULE_REAL(Combat, SoftcapFactor, 1.88, "") +RULE_REAL(Combat, ACthac0Factor, 0.55, "") +RULE_REAL(Combat, ACthac20Factor, 0.55, "") +RULE_INT(Combat, HitCapPre20, 40, "Hit cap before level 20. Live has it capped at 40") +RULE_INT(Combat, HitCapPre10, 20, "Hit cap before level 10. Live has it capped at 20") +RULE_INT(Combat, MinHastedDelay, 400, "Minimum hasted combat delay") +RULE_REAL(Combat, AvgDefProcsPerMinute, 2.0, "Average defense procs per minute") RULE_REAL(Combat, DefProcPerMinAgiContrib, 0.075, "How much agility contributes to defensive proc rate") RULE_INT(Combat, SpecialAttackACBonus, 15, "Percent amount of damage per AC gained for certain special attacks (damage = AC*SpecialAttackACBonus/100)") RULE_INT(Combat, NPCFlurryChance, 20, "Chance for NPC to flurry") RULE_BOOL (Combat,TauntOverLevel, 1, "Allows you to taunt NPC's over warriors level") -RULE_REAL (Combat,TauntSkillFalloff, 0.33, "For every taunt skill point that's not maxed you lose this % chance to taunt") -RULE_BOOL (Combat,EXPFromDmgShield, false, "Determine if damage from a damage shield counts for EXP gain") -RULE_INT(Combat, MonkACBonusWeight, 15, "") +RULE_REAL (Combat,TauntSkillFalloff, 0.33, "For every taunt skill point that's not maxed you lose this percentage chance to taunt") +RULE_BOOL (Combat,EXPFromDmgShield, false, "Determine if damage from a damage shield counts for experience gain") +RULE_INT(Combat, MonkACBonusWeight, 15, "Usually, a monk under this weight threshold gets an AC bonus") RULE_INT(Combat, ClientStunLevel, 55, "This is the level where client kicks and bashes can stun the target") RULE_INT(Combat, QuiverHasteCap, 1000, "Quiver haste cap 1000 on live for a while, currently 700 on live") RULE_BOOL(Combat, UseArcheryBonusRoll, false, "Make the 51+ archery bonus require an actual roll") -RULE_INT(Combat, ArcheryBonusChance, 50, "") -RULE_INT(Combat, BerserkerFrenzyStart, 35, "") -RULE_INT(Combat, BerserkerFrenzyEnd, 45, "") +RULE_INT(Combat, ArcheryBonusChance, 50, "Chance for 50+ archery bonus damage if Combat:UseArcheryBonusRoll is true") +RULE_INT(Combat, BerserkerFrenzyStart, 35, "Percentage Health Points below which Warrior and Berserker start frenzy") +RULE_INT(Combat, BerserkerFrenzyEnd, 45, "Percentage Health Points above which Warrior and Berserker end frenzy") RULE_BOOL(Combat, OneProcPerWeapon, true, "If enabled, One proc per weapon per round") RULE_BOOL(Combat, ProjectileDmgOnImpact, true, "If enabled, projectiles (ie arrows) will hit on impact, instead of instantly") -RULE_BOOL(Combat, MeleePush, true, "enable melee push") +RULE_BOOL(Combat, MeleePush, true, "Eenable melee push") RULE_INT(Combat, MeleePushChance, 50, "(NPCs) chance the target will be pushed. Made up, 100 actually isn't that bad") -RULE_BOOL(Combat, UseLiveCombatRounds, true, "turn this false if you don't want to worry about fixing up combat rounds for NPCs") -RULE_INT(Combat, NPCAssistCap, 5, "Maxiumium number of NPCs that will assist another NPC at once") +RULE_BOOL(Combat, UseLiveCombatRounds, true, "Turn this false if you don't want to worry about fixing up combat rounds for NPCs") +RULE_INT(Combat, NPCAssistCap, 5, "Maxiumium number of NPCthat will assist another NPC at once") RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time in milliseconds a NPC will take to clear assist aggro cap space") -RULE_BOOL(Combat, UseRevampHandToHand, false, "use h2h revamped dmg/delays I believe this was implemented during SoF") -RULE_BOOL(Combat, ClassicMasterWu, false, "classic master wu uses a random special, modern doesn't") -RULE_INT(Combat, LevelToStopDamageCaps, 0, "1 will effectively disable them, 20 should give basically same results as old incorrect system") -RULE_INT(Combat, LevelToStopACTwinkControl, 50, "1 will effectively disable it, 50 should give basically same results as current system") -RULE_BOOL(Combat, ClassicNPCBackstab, false, "true disables npc facestab - npcs get normal attack if not behind") +RULE_BOOL(Combat, UseRevampHandToHand, false, "Use h2h revamped dmg/delays I believe this was implemented during SoF") +RULE_BOOL(Combat, ClassicMasterWu, false, "Classic master wu uses a random special, modern doesn't") +RULE_INT(Combat, LevelToStopDamageCaps, 0, "Level to stop damage caps. 1 will effectively disable them, 20 should give basically same results as old incorrect system") +RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink control. 1 will effectively disable it, 50 should give basically same results as current system") +RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind") RULE_BOOL(Combat, UseNPCDamageClassLevelMods, true, "Uses GetClassLevelDamageMod calc in npc_scale_manager") RULE_BOOL(Combat, UseExtendedPoisonProcs, false, "Allow old school poisons to last until characrer zones, at a lower proc rate") RULE_CATEGORY_END() RULE_CATEGORY(NPC) -RULE_INT(NPC, MinorNPCCorpseDecayTimeMS, 450000, "level < 55") -RULE_INT(NPC, MajorNPCCorpseDecayTimeMS, 1500000, "level >= 55") -RULE_INT(NPC, CorpseUnlockTimer, 150000, "") -RULE_INT(NPC, EmptyNPCCorpseDecayTimeMS, 0, "") -RULE_BOOL(NPC, UseItemBonusesForNonPets, true, "") -RULE_BOOL(NPC, UseBaneDamage, false, "") -RULE_INT(NPC, SayPauseTimeInSec, 5, "") -RULE_INT(NPC, OOCRegen, 0, "") -RULE_BOOL(NPC, BuffFriends, false, "") -RULE_BOOL(NPC, EnableNPCQuestJournal, false, "") -RULE_INT(NPC, LastFightingDelayMovingMin, 10000, "") -RULE_INT(NPC, LastFightingDelayMovingMax, 20000, "") -RULE_BOOL(NPC, SmartLastFightingDelayMoving, true, "") -RULE_BOOL(NPC, ReturnNonQuestNoDropItems, false, "Returns NO DROP items on NPCs that don't have an EVENT_TRADE sub in their script") -RULE_INT(NPC, StartEnrageValue, 9, "% HP that an NPC will begin to enrage") +RULE_INT(NPC, MinorNPCCorpseDecayTimeMS, 450000, "NPC corpse decay time, if NPC below level 55 (milliseconds)") +RULE_INT(NPC, MajorNPCCorpseDecayTimeMS, 1500000, "NPC corpse decay time, if NPC equal or greater than level 55 (milliseconds)") +RULE_INT(NPC, CorpseUnlockTimer, 150000, "") +RULE_INT(NPC, EmptyNPCCorpseDecayTimeMS, 0, "NPC corpse decay time, if no items are left on the corpse (milliseconds)") +RULE_BOOL(NPC, UseItemBonusesForNonPets, true, "") +RULE_BOOL(NPC, UseBaneDamage, false, "If NPCs can't inheriently hit the target we don't add bane/magic dmg which isn't exactly the same as PCs") +RULE_INT(NPC, SayPauseTimeInSec, 5, "") +RULE_INT(NPC, OOCRegen, 0, "Enable out-of-combat regeneration for NPC") +RULE_BOOL(NPC, BuffFriends, false, "Setting whether NPC should buff other NPC") +RULE_BOOL(NPC, EnableNPCQuestJournal, false, "Setting whether the NPC Quest Journal is active") +RULE_INT(NPC, LastFightingDelayMovingMin, 10000, "Minimum time before mob goes home after all aggro loss (milliseconds)") +RULE_INT(NPC, LastFightingDelayMovingMax, 20000, "Maximum time before mob goes home after all aggro loss (milliseconds)") +RULE_BOOL(NPC, SmartLastFightingDelayMoving, true, "When true, mobs that started going home previously will do so again immediately if still on FD hate list") +RULE_BOOL(NPC, ReturnNonQuestNoDropItems, false, "Returns NO DROP items on NPCthat don't have an EVENT_TRADE sub in their script") +RULE_INT(NPC, StartEnrageValue, 9, " Percentage HP that an NPC will begin to enrage") RULE_BOOL(NPC, LiveLikeEnrage, false, "If set to true then only player controlled pets will enrage") RULE_BOOL(NPC, EnableMeritBasedFaction, false, "If set to true, faction will given in the same way as experience (solo/group/raid)") -RULE_INT(NPC, NPCToNPCAggroTimerMin, 500, "") -RULE_INT(NPC, NPCToNPCAggroTimerMax, 6000, "") -RULE_BOOL(NPC, UseClassAsLastName, true, "Uses class archetype as LastName for npcs with none") +RULE_INT(NPC, NPCToNPCAggroTimerMin, 500, "Minimum time span after which one NPC aggro another NPC (milliseconds)") +RULE_INT(NPC, NPCToNPCAggroTimerMax, 6000, "Maximum time span after which one NPC aggro another NPC (milliseconds)") +RULE_BOOL(NPC, UseClassAsLastName, true, "Uses class archetype as LastName for NPCwith none") RULE_BOOL(NPC, NewLevelScaling, true, "Better level scaling, use old if new formulas would break your server") -RULE_INT(NPC, NPCGatePercent, 20, "% at which the NPC Will attempt to gate at") +RULE_INT(NPC, NPCGatePercent, 20, " Percentage at which the NPC Will attempt to gate at") RULE_BOOL(NPC, NPCGateNearBind, false, "Will NPC attempt to gate when near bind location?") RULE_INT(NPC, NPCGateDistanceBind, 75, "Distance from bind before NPC will attempt to gate") RULE_BOOL(NPC, NPCHealOnGate, true, "Will the NPC Heal on Gate") @@ -534,48 +526,46 @@ RULE_REAL(NPC, NPCHealOnGateAmount, 25, "How much the npc will heal on gate if e RULE_CATEGORY_END() RULE_CATEGORY(Aggro) -RULE_BOOL(Aggro, SmartAggroList, true, "") -RULE_INT(Aggro, SittingAggroMod, 35, "35%") -RULE_INT(Aggro, MeleeRangeAggroMod, 10, "10%") -RULE_INT(Aggro, CurrentTargetAggroMod, 0, "0% -- will prefer our current target to any other; makes it harder for our npcs to switch targets") -RULE_INT(Aggro, CriticallyWoundedAggroMod, 100, "100%") -RULE_INT(Aggro, SpellAggroMod, 100, "") -RULE_INT(Aggro, SongAggroMod, 33, "") -RULE_INT(Aggro, PetSpellAggroMod, 10, "") -RULE_REAL(Aggro, TunnelVisionAggroMod, 0.75, "people not currently the top hate generate this much hate on a Tunnel Vision mob") -RULE_INT(Aggro, MaxScalingProcAggro, 400, "Set to -1 for no limit. Maxmimum amount of aggro that HP scaling SPA effect in a proc will add") -RULE_INT(Aggro, IntAggroThreshold, 75, "Int <= this will aggro regardless of level difference") +RULE_BOOL(Aggro, SmartAggroList, true, "") +RULE_INT(Aggro, SittingAggroMod, 35, "Aggro increase against sitting targets. 35=35%") +RULE_INT(Aggro, MeleeRangeAggroMod, 10, "Aggro increase against targets in melee range. 10=10%") +RULE_INT(Aggro, CurrentTargetAggroMod, 0, "Aggro increase against current target. 0% = prefer the current target to any other. Makes it harder for our NPCto switch targets") +RULE_INT(Aggro, CriticallyWoundedAggroMod, 100, "Aggro increase against critical wounded targets") +RULE_INT(Aggro, SpellAggroMod, 100, "Aggro increase for spells") +RULE_INT(Aggro, SongAggroMod, 33, "Aggro increase for songs") +RULE_INT(Aggro, PetSpellAggroMod, 10, "Aggro increase for pet spells") +RULE_REAL(Aggro, TunnelVisionAggroMod, 0.75, "People not currently the top hate generate this much hate on a Tunnel Vision mob") +RULE_INT(Aggro, MaxScalingProcAggro, 400, "Set to -1 for no limit. Maximum amount of aggro that HP scaling SPA effect in a proc will add") +RULE_INT(Aggro, IntAggroThreshold, 75, "Int lesser or equal the value will aggro regardless of level difference") RULE_BOOL(Aggro, AllowTickPulling, false, "tick pulling is an exploit in an NPC's call for help fixed sometime in 2006 on live") -RULE_INT(Aggro, MinAggroLevel, 18, "For use with UseLevelAggro") +RULE_INT(Aggro, MinAggroLevel, 18, "Minimum level for use with UseLevelAggro") RULE_BOOL(Aggro, UseLevelAggro, true, "MinAggroLevel rule value+ and Undead will aggro regardless of level difference. (this will disabled Rule:IntAggroThreshold if set to true)") RULE_INT(Aggro, ClientAggroCheckInterval, 6, "Interval in which clients actually check for aggro - in seconds") -RULE_REAL(Aggro, PetAttackRange, 40000.0, "max squared range /pet attack works at default is 200") +RULE_REAL(Aggro, PetAttackRange, 40000.0, "Maximum squared range /pet attack works at default is 200") RULE_BOOL(Aggro, NPCAggroMaxDistanceEnabled, true, "If enabled, NPC's will drop aggro beyond 600 units or what is defined at the zone level") RULE_CATEGORY_END() RULE_CATEGORY(TaskSystem) RULE_BOOL(TaskSystem, EnableTaskSystem, true, "Globally enable or disable the Task system") RULE_INT(TaskSystem, PeriodicCheckTimer, 5, "Seconds between checks for failed tasks. Also used by the 'Touch' activity") -RULE_BOOL(TaskSystem, RecordCompletedTasks, true, "") -RULE_BOOL(TaskSystem, RecordCompletedOptionalActivities, false, "") -RULE_BOOL(TaskSystem, KeepOneRecordPerCompletedTask, true, "") -RULE_BOOL(TaskSystem, EnableTaskProximity, true, "") +RULE_BOOL(TaskSystem, RecordCompletedTasks, true, "Record completed tasks") +RULE_BOOL(TaskSystem, RecordCompletedOptionalActivities, false, "Record completed optional activities") +RULE_BOOL(TaskSystem, KeepOneRecordPerCompletedTask, true, "Keep only one record per completed task") +RULE_BOOL(TaskSystem, EnableTaskProximity, true, "Enable task proximity system") RULE_CATEGORY_END() RULE_CATEGORY(Range) -RULE_INT(Range, Say, 15, "") -RULE_INT(Range, Emote, 135, "") -RULE_INT(Range, BeginCast, 200, "") -RULE_INT(Range, Anims, 135, "") -RULE_INT(Range, SpellParticles, 135, "") -RULE_INT(Range, DamageMessages, 50, "") -RULE_INT(Range, SpellMessages, 75, "") -RULE_INT(Range, SongMessages, 75, "") -RULE_INT(Range, MobPositionUpdates, 600, "") -RULE_INT(Range, ClientPositionUpdates, 300, "") -RULE_INT(Range, ClientForceSpawnUpdateRange, 1000, "") -RULE_INT(Range, CriticalDamage, 80, "") -RULE_INT(Range, MobCloseScanDistance, 600, "") +RULE_INT(Range, Say, 15, "The range that is required before /say or hail messages will work to an NPC") +RULE_INT(Range, Emote, 135, "The packet range in which emote messages are sent'") +RULE_INT(Range, BeginCast, 200, "The packet range in which begin cast messages are sent") +RULE_INT(Range, Anims, 135, "The packet range in which begin cast messages are sent") +RULE_INT(Range, SpellParticles, 135, "The packet range in which spell particles are sent") +RULE_INT(Range, DamageMessages, 50, "The packet range in which damage messages are sent (non-crit)") +RULE_INT(Range, SpellMessages, 75, "The packet range in which spell damage messages are sent") +RULE_INT(Range, SongMessages, 75, "The packet range in which song messages are sent") +RULE_INT(Range, MobPositionUpdates, 600, "The packet range in which mob position updates are sent") +RULE_INT(Range, CriticalDamage, 80, "The packet range in which critical hit messages are sent") +RULE_INT(Range, MobCloseScanDistance, 600, "Close scan distance") RULE_CATEGORY_END() @@ -596,11 +586,11 @@ RULE_BOOL(Bots, QuestableSpells, false, "Anita Thrall's (Anita_Thrall.pl) Bot Sp RULE_INT(Bots, SpawnLimit, 71, "Number of bots a character can have spawned at one time, You + 71 bots is a 12 group pseudo-raid (bots are not raidable at this time)") RULE_BOOL(Bots, UpdatePositionWithTimer, false, "Sends a position update with every positive movement timer check") RULE_BOOL(Bots, UsePathing, true, "Bots will use node pathing when moving") -RULE_BOOL(Bots, BotGroupXP, false, "Determines whether client gets xp for bots outside their group") +RULE_BOOL(Bots, BotGroupXP, false, "Determines whether client gets experience for bots outside their group") RULE_BOOL(Bots, BotBardUseOutOfCombatSongs, true, "Determines whether bard bots use additional out of combat songs (optional script)") RULE_BOOL(Bots, BotLevelsWithOwner, false, "Auto-updates spawned bots as owner levels/de-levels (false is original behavior)") RULE_BOOL(Bots, BotCharacterLevelEnabled, false, "Enables required level to spawn bots") -RULE_INT(Bots, BotCharacterLevel, 0, "0 as default (if level > this value you can spawn bots if BotCharacterLevelEnabled is true)") +RULE_INT(Bots, BotCharacterLevel, 0, "If level is greater that value player can spawn bots if BotCharacterLevelEnabled is true") RULE_INT(Bots, CasterStopMeleeLevel, 13, "Level at which caster bots stop melee attacks") RULE_INT(Bots, AllowedClasses, 0xFFFFFFFF, "Bitmask of allowed bot classes") RULE_INT(Bots, AllowedRaces, 0xFFFFFFFF, "Bitmask of allowed bot races") @@ -615,20 +605,20 @@ RULE_CATEGORY_END() #endif RULE_CATEGORY(Chat) -RULE_BOOL(Chat, ServerWideOOC, true, "") -RULE_BOOL(Chat, ServerWideAuction, true, "") -RULE_BOOL(Chat, EnableVoiceMacros, true, "") -RULE_BOOL(Chat, EnableMailKeyIPVerification, true, "") -RULE_BOOL(Chat, EnableAntiSpam, true, "") -RULE_BOOL(Chat, SuppressCommandErrors, false, "Do not suppress by default") -RULE_INT(Chat, MinStatusToBypassAntiSpam, 100, "") -RULE_INT(Chat, MinimumMessagesPerInterval, 4, "") -RULE_INT(Chat, MaximumMessagesPerInterval, 12, "") -RULE_INT(Chat, MaxMessagesBeforeKick, 20, "") -RULE_INT(Chat, IntervalDurationMS, 60000, "") -RULE_INT(Chat, KarmaUpdateIntervalMS, 1200000, "") -RULE_INT(Chat, KarmaGlobalChatLimit, 72, "amount of karma you need to be able to talk in ooc/auction/chat below the level limit") -RULE_INT(Chat, GlobalChatLevelLimit, 8, "level limit you need to of reached to talk in ooc/auction/chat if your karma is too low") +RULE_BOOL(Chat, ServerWideOOC, true, "Enable server wide ooc-chat") +RULE_BOOL(Chat, ServerWideAuction, true, "Enable server wide auction-chat") +RULE_BOOL(Chat, EnableVoiceMacros, true, "Enable voice macros") +RULE_BOOL(Chat, EnableMailKeyIPVerification, true, "") +RULE_BOOL(Chat, EnableAntiSpam, true, "Enable anti-spam system for chat") +RULE_BOOL(Chat, SuppressCommandErrors, false, "Do not suppress command errors by default") +RULE_INT(Chat, MinStatusToBypassAntiSpam, 100, "Minimum status to bypass the anti spam system") +RULE_INT(Chat, MinimumMessagesPerInterval, 4, "") +RULE_INT(Chat, MaximumMessagesPerInterval, 12, "") +RULE_INT(Chat, MaxMessagesBeforeKick, 20, "") +RULE_INT(Chat, IntervalDurationMS, 60000, "Interval length in milliseconds") +RULE_INT(Chat, KarmaUpdateIntervalMS, 1200000, "Karma update interval in milliseconds") +RULE_INT(Chat, KarmaGlobalChatLimit, 72, "Amount of karma you need to be able to talk in ooc/auction/chat below the level limit") +RULE_INT(Chat, GlobalChatLevelLimit, 8, "Level limit you need to of reached to talk in ooc/auction/chat if your karma is too low") RULE_CATEGORY_END() RULE_CATEGORY(Merchant) @@ -640,21 +630,21 @@ RULE_INT(Merchant, PricePenaltyPct, 4, "Determines maximum price penalty from ha RULE_REAL(Merchant, ChaBonusMod, 3.45, "Determines CHA cap, from 104 CHA. 3.45 is 132 CHA at apprehensive. 0.34 is 400 CHA at apprehensive") RULE_REAL(Merchant, ChaPenaltyMod, 1.52, "Determines CHA bottom, up to 102 CHA. 1.52 is 37 CHA at apprehensive. 0.98 is 0 CHA at apprehensive") RULE_BOOL(Merchant, EnableAltCurrencySell, true, "Enables the ability to resell items to alternate currency merchants") -RULE_BOOL(Merchant, AllowCorpse, false, "Can merchants generate a corpse") +RULE_BOOL(Merchant, AllowCorpse, false, "Setting whether dealers leave a corpse behind ") RULE_CATEGORY_END() RULE_CATEGORY(Bazaar) -RULE_BOOL(Bazaar, AuditTrail, false, "") -RULE_INT(Bazaar, MaxSearchResults, 50, "") -RULE_BOOL(Bazaar, EnableWarpToTrader, true, "") -RULE_INT(Bazaar, MaxBarterSearchResults, 200, "The max results returned in the /barter search") +RULE_BOOL(Bazaar, AuditTrail, false, "") +RULE_INT(Bazaar, MaxSearchResults, 50, "") +RULE_BOOL(Bazaar, EnableWarpToTrader, true, "") +RULE_INT(Bazaar, MaxBarterSearchResults, 200, "The maximum results returned in the /barter search") RULE_CATEGORY_END() RULE_CATEGORY(Mail) -RULE_BOOL(Mail, EnableMailSystem, true, "If false, client won't bring up the Mail window") -RULE_INT(Mail, ExpireTrash, 0, "Time in seconds. 0 will delete all messages in the trash when the mailserver starts") -RULE_INT(Mail, ExpireRead, 31536000, "1 Year. Set to -1 for never") -RULE_INT(Mail, ExpireUnread, 31536000, "1 Year. Set to -1 for never") +RULE_BOOL(Mail, EnableMailSystem, true, "Setting whether the mail system is activated. If false, client won't bring up the Mail window") +RULE_INT(Mail, ExpireTrash, 0, "Setting when the mail trash is emptied. Time in seconds. 0 will delete all messages in the trash when the mailserver starts") +RULE_INT(Mail, ExpireRead, 31536000, "Setting when read mails expire. 31536000=1 Year. Set to -1 for never") +RULE_INT(Mail, ExpireUnread, 31536000, "Setting when unread mails expire. 31536000=1 Year. Set to -1 for never") RULE_CATEGORY_END() RULE_CATEGORY(Channels) @@ -669,30 +659,26 @@ RULE_BOOL(EventLog, RecordBuyFromMerchant, false, "Record purchases by a player RULE_CATEGORY_END() RULE_CATEGORY(Adventure) -RULE_INT(Adventure, MinNumberForGroup, 2, "") -RULE_INT(Adventure, MaxNumberForGroup, 6, "") -RULE_INT(Adventure, MinNumberForRaid, 18, "") -RULE_INT(Adventure, MaxNumberForRaid, 36, "") -RULE_INT(Adventure, MaxLevelRange, 9, "") -RULE_INT(Adventure, NumberKillsForBossSpawn, 45, "") -RULE_REAL(Adventure, DistanceForRescueAccept, 10000.0, "") -RULE_REAL(Adventure, DistanceForRescueComplete, 2500.0, "") -RULE_INT(Adventure, ItemIDToEnablePorts, 41000, "0 to disable, otherwise using a LDoN portal will require the user to have this item") -RULE_INT(Adventure, LDoNTrapDistanceUse, 625, "") -RULE_REAL(Adventure, LDoNBaseTrapDifficulty, 15.0, "") -RULE_REAL(Adventure, LDoNCriticalFailTrapThreshold, 10.0, "") -RULE_INT(Adventure, LDoNAdventureExpireTime, 1800, "30 minutes to expire") +RULE_INT(Adventure, MaxLevelRange, 9, "Maximum level range for adventure") +RULE_INT(Adventure, NumberKillsForBossSpawn, 45, "Number of adventure kills to make the boss spawn") +RULE_REAL(Adventure, DistanceForRescueAccept, 10000.0, "Distance for adventure rescue accept") +RULE_REAL(Adventure, DistanceForRescueComplete, 2500.0, "Distance for adventure rescue complete") +RULE_INT(Adventure, ItemIDToEnablePorts, 41000, "ItemID to enable adventure ports. 0 to disable, otherwise using a LDoN portal will require the user to have this item") +RULE_INT(Adventure, LDoNTrapDistanceUse, 625, "LDoN trap distance use") +RULE_REAL(Adventure, LDoNBaseTrapDifficulty, 15.0, "LDoN base trap difficulty") +RULE_REAL(Adventure, LDoNCriticalFailTrapThreshold, 10.0, "LDoN critical fail trap threshold") +RULE_INT(Adventure, LDoNAdventureExpireTime, 1800, "LDoN adventure expire time (seconds)") RULE_CATEGORY_END() RULE_CATEGORY(AA) -RULE_INT(AA, ExpPerPoint, 23976503, "Amount of exp per AA. Is the same as the amount of exp to go from level 51 to level 52") +RULE_INT(AA, ExpPerPoint, 23976503, "Amount of experience per AA. Is the same as the amount of experience to go from level 51 to level 52") RULE_BOOL(AA, Stacking, true, "Allow AA that belong to the same group to stack on SOF+ clients") -RULE_BOOL(AA, NormalizedAAEnabled, false, "TSS+ change to AA that normalizes AA XP to a fixed # of white con kills independent of level") +RULE_BOOL(AA, NormalizedAAEnabled, false, "TSS+ change to AA that normalizes AA experience to a fixed # of white con kills independent of level") RULE_INT(AA, NormalizedAANumberOfWhiteConPerAA, 25, "The number of white con kills per AA point") -RULE_BOOL(AA, ModernAAScalingEnabled, false, "Are we linearly scaling AA XP based on total # of earned AA?") -RULE_REAL(AA, ModernAAScalingStartPercent, 1000, "1000% or 10x AA XP at the start of the scaling range") -RULE_INT(AA, ModernAAScalingAAMinimum, 0, "The minimum number of earned AA before AA XP scaling begins") -RULE_INT(AA, ModernAAScalingAALimit, 4000, "The number of earned AA when AA XP scaling ends") +RULE_BOOL(AA, ModernAAScalingEnabled, false, "Are we linearly scaling AA experience based on total # of earned AA?") +RULE_REAL(AA, ModernAAScalingStartPercent, 1000, "1000% or 10x AA experience at the start of the scaling range") +RULE_INT(AA, ModernAAScalingAAMinimum, 0, "The minimum number of earned AA before AA experience scaling begins") +RULE_INT(AA, ModernAAScalingAALimit, 4000, "The number of earned AA when AA experience scaling ends") RULE_CATEGORY_END() RULE_CATEGORY(Console) @@ -700,38 +686,38 @@ RULE_INT(Console, SessionTimeOut, 600000, "Amount of time in ms for the console RULE_CATEGORY_END() RULE_CATEGORY(Network) -RULE_INT(Network, ResendDelayBaseMS, 100, "") -RULE_REAL(Network, ResendDelayFactor, 1.5, "") -RULE_INT(Network, ResendDelayMinMS, 300, "") -RULE_INT(Network, ResendDelayMaxMS, 5000, "") +RULE_INT(Network, ResendDelayBaseMS, 100, "") +RULE_REAL(Network, ResendDelayFactor, 1.5, "") +RULE_INT(Network, ResendDelayMinMS, 300, "") +RULE_INT(Network, ResendDelayMaxMS, 5000, "") RULE_REAL(Network, ClientDataRate, 0.0, "KB / sec, 0.0 disabled") -RULE_BOOL(Network, CompressZoneStream, true, "") +RULE_BOOL(Network, CompressZoneStream, true, "") RULE_CATEGORY_END() RULE_CATEGORY(QueryServ) -RULE_BOOL(QueryServ, PlayerLogChat, false, "Logs Player Chat") -RULE_BOOL(QueryServ, PlayerLogTrades, false, "Logs Player Trades") -RULE_BOOL(QueryServ, PlayerDropItems, false, "Logs Player dropping items") -RULE_BOOL(QueryServ, PlayerLogHandins, false, "Logs Player Handins") -RULE_BOOL(QueryServ, PlayerLogNPCKills, false, "Logs Player NPC Kills") -RULE_BOOL(QueryServ, PlayerLogDeletes, false, "Logs Player Deletes") -RULE_BOOL(QueryServ, PlayerLogMoves, false, "Logs Player Moves") -RULE_BOOL(QueryServ, PlayerLogMerchantTransactions, false, "Logs Merchant Transactions") -RULE_BOOL(QueryServ, PlayerLogPCCoordinates, false, "Logs Player Coordinates with certain events") -RULE_BOOL(QueryServ, PlayerLogDropItem, false, "Logs Player Drop Item") -RULE_BOOL(QueryServ, PlayerLogZone, false, "Logs Player Zone Events") -RULE_BOOL(QueryServ, PlayerLogDeaths, false, "Logs Player Deaths") -RULE_BOOL(QueryServ, PlayerLogConnectDisconnect, false, "Logs Player Connect Disconnect State") -RULE_BOOL(QueryServ, PlayerLogLevels, false, "Logs Player Leveling/Deleveling") -RULE_BOOL(QueryServ, PlayerLogAARate, false, "Logs Player AA Experience Rates") -RULE_BOOL(QueryServ, PlayerLogQGlobalUpdate, false, "Logs Player QGlobal Updates") -RULE_BOOL(QueryServ, PlayerLogTaskUpdates, false, "Logs Player Task Updates") -RULE_BOOL(QueryServ, PlayerLogKeyringAddition, false, "Log PLayer Keyring additions") -RULE_BOOL(QueryServ, PlayerLogAAPurchases, false, "Log Player AA Purchases") -RULE_BOOL(QueryServ, PlayerLogTradeSkillEvents, false, "Log Player Tradeskill Transactions") -RULE_BOOL(QueryServ, PlayerLogIssuedCommandes, false, "Log Player Issued Commands") -RULE_BOOL(QueryServ, PlayerLogMoneyTransactions, false, "Log Player Money Transaction/Splits") -RULE_BOOL(QueryServ, PlayerLogAlternateCurrencyTransactions, false, "Log Player Alternate Currency Transactions") +RULE_BOOL(QueryServ, PlayerLogChat, false, "Log player chat") +RULE_BOOL(QueryServ, PlayerLogTrades, false, "Log player trades") +RULE_BOOL(QueryServ, PlayerDropItems, false, "Log player dropping items") +RULE_BOOL(QueryServ, PlayerLogHandins, false, "Log player handins") +RULE_BOOL(QueryServ, PlayerLogNPCKills, false, "Log player NPC kills") +RULE_BOOL(QueryServ, PlayerLogDeletes, false, "Log player deletes") +RULE_BOOL(QueryServ, PlayerLogMoves, false, "Log player moves") +RULE_BOOL(QueryServ, PlayerLogMerchantTransactions, false, "Log merchant transactions") +RULE_BOOL(QueryServ, PlayerLogPCCoordinates, false, "Log player coordinates with certain events") +RULE_BOOL(QueryServ, PlayerLogDropItem, false, "Log player drop item") +RULE_BOOL(QueryServ, PlayerLogZone, false, "Log player zone events") +RULE_BOOL(QueryServ, PlayerLogDeaths, false, "Log player deaths") +RULE_BOOL(QueryServ, PlayerLogConnectDisconnect, false, "Logs player connect/disconnect state") +RULE_BOOL(QueryServ, PlayerLogLevels, false, "Log player leveling/deleveling") +RULE_BOOL(QueryServ, PlayerLogAARate, false, "Log player AA experience rates") +RULE_BOOL(QueryServ, PlayerLogQGlobalUpdate, false, "Log player QGlobal updates") +RULE_BOOL(QueryServ, PlayerLogTaskUpdates, false, "Log player Task updates") +RULE_BOOL(QueryServ, PlayerLogKeyringAddition, false, "Log player keyring additions") +RULE_BOOL(QueryServ, PlayerLogAAPurchases, false, "Log player AA purchases") +RULE_BOOL(QueryServ, PlayerLogTradeSkillEvents, false, "Log player tradeskill transactions") +RULE_BOOL(QueryServ, PlayerLogIssuedCommandes, false, "Log player issued commands") +RULE_BOOL(QueryServ, PlayerLogMoneyTransactions, false, "Log player money transaction/splits") +RULE_BOOL(QueryServ, PlayerLogAlternateCurrencyTransactions, false, "Log player alternate currency transactions") RULE_CATEGORY_END() RULE_CATEGORY(Inventory) @@ -755,14 +741,14 @@ RULE_BOOL(Bugs, DumpTargetEntity, false, "Dumps the target entity, if one is pro RULE_CATEGORY_END() RULE_CATEGORY(Faction) -RULE_INT(Faction, AllyFactionMinimum, 1100, "") -RULE_INT(Faction, WarmlyFactionMinimum, 750, "") -RULE_INT(Faction, KindlyFactionMinimum, 500, "") -RULE_INT(Faction, AmiablyFactionMinimum, 100, "") -RULE_INT(Faction, IndifferentlyFactionMinimum, 0, "") -RULE_INT(Faction, ApprehensivelyFactionMinimum, -100, "") -RULE_INT(Faction, DubiouslyFactionMinimum, -500, "") -RULE_INT(Faction, ThreateninglyFactionMinimum, -750, "") +RULE_INT(Faction, AllyFactionMinimum, 1100, "Minimum faction for ally") +RULE_INT(Faction, WarmlyFactionMinimum, 750, "Minimum faction for warmly") +RULE_INT(Faction, KindlyFactionMinimum, 500, "Minimum faction for kindly") +RULE_INT(Faction, AmiablyFactionMinimum, 100, "Minimum faction for amiably") +RULE_INT(Faction, IndifferentlyFactionMinimum, 0, "Minimum faction for indifferently") +RULE_INT(Faction, ApprehensivelyFactionMinimum, -100, "Minimum faction for apprehensively") +RULE_INT(Faction, DubiouslyFactionMinimum, -500, "Minimum faction for dubiously") +RULE_INT(Faction, ThreateninglyFactionMinimum, -750, "Minimum faction for threateningly") RULE_CATEGORY_END() RULE_CATEGORY(Logging) From 01698ae9892d55519487ea75c1f5cc0c2b12cbdb Mon Sep 17 00:00:00 2001 From: Thalix <67201730+thalix1337@users.noreply.github.com> Date: Sun, 21 Jun 2020 04:03:03 +0200 Subject: [PATCH 192/272] Incorrectly deleted rules inserted again --- common/ruletypes.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common/ruletypes.h b/common/ruletypes.h index 59a154ffe..f5024a303 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -126,6 +126,7 @@ RULE_INT(Character, BaseInstrumentSoftCap, 36, "Softcap for instrument mods, 36 RULE_BOOL(Character, UseSpellFileSongCap, true, "When they removed the AA that increased the cap they removed the above and just use the spell field") RULE_INT(Character, BaseRunSpeedCap, 158, "Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225") RULE_INT(Character, OrnamentationAugmentType, 20, "Ornamentation Augment Type") +RULE_REAL(Character, EnvironmentDamageMulipliter, 1, "") RULE_BOOL(Character, UnmemSpellsOnDeath, true, "Setting whether at death all memorized Spells are forgotten") RULE_INT(Character, TradeskillUpAlchemy, 2, "Alchemy skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpBaking, 2, "Baking skillup rate adjust. Lower is faster") @@ -193,6 +194,7 @@ RULE_BOOL(Skills, UseLimitTradeskillSearchSkillDiff, true, "Enables the limit fo RULE_INT(Skills, MaxTradeskillSearchSkillDiff, 50, "The maximum difference in skill between the trivial of an item and the skill of the player if the trivial is higher than the skill. Recipes that have not been learnt or made at least once via the Experiment mode will be removed from searches based on this criteria.") RULE_INT(Skills, MaxTrainSpecializations, 50, "Maximum level a GM trainer will train casting specializations") RULE_INT(Skills, SwimmingStartValue, 100, "Start value of swimming skill") +RULE_BOOL(Skills, TrainSenseHeading, false, "") RULE_INT(Skills, SenseHeadingStartValue, 200, "Start value of sense heading skill") RULE_BOOL(Skills, SelfLanguageLearning, true, "Enabling self learning of languages") RULE_BOOL(Skills, RequireTomeHandin, false, "Disable click-to-learn and force hand in to Guild Master") @@ -269,6 +271,8 @@ RULE_INT(Zone, EbonCrystalItemID, 40902, "Item ID for Ebon Crystal") RULE_INT(Zone, RadiantCrystalItemID, 40903, "Item ID for Radiant Crystal") RULE_BOOL(Zone, LevelBasedEXPMods, false, "Allows you to use the level_exp_mods table in consideration to your players experience hits") RULE_INT(Zone, WeatherTimer, 600, "Weather timer when no duration is available") +RULE_BOOL(Zone, EnableLoggedOffReplenishments, true, "") +RULE_INT(Zone, MinOfflineTimeToReplenishments, 21600, " (seconds)") RULE_BOOL(Zone, UseZoneController, true, "Enables the ability to use persistent quest based zone controllers (zone_controller.pl/lua)") RULE_BOOL(Zone, EnableZoneControllerGlobals, false, "Enables the ability to use quest globals with the zone controller NPC") RULE_INT(Zone, GlobalLootMultiplier, 1, "Sets Global Loot drop multiplier for database based drops, useful for double, triple loot etc") @@ -564,6 +568,7 @@ RULE_INT(Range, DamageMessages, 50, "The packet range in which damage messages a RULE_INT(Range, SpellMessages, 75, "The packet range in which spell damage messages are sent") RULE_INT(Range, SongMessages, 75, "The packet range in which song messages are sent") RULE_INT(Range, MobPositionUpdates, 600, "The packet range in which mob position updates are sent") +RULE_INT(Range, ClientPositionUpdates, 300, "") RULE_INT(Range, CriticalDamage, 80, "The packet range in which critical hit messages are sent") RULE_INT(Range, MobCloseScanDistance, 600, "Close scan distance") RULE_CATEGORY_END() @@ -659,6 +664,8 @@ RULE_BOOL(EventLog, RecordBuyFromMerchant, false, "Record purchases by a player RULE_CATEGORY_END() RULE_CATEGORY(Adventure) +RULE_INT(Adventure, MinNumberForGroup, 2, "Minimum members for adventure group") +RULE_INT(Adventure, MaxNumberForGroup, 6, "Maximum members for adventure group") RULE_INT(Adventure, MaxLevelRange, 9, "Maximum level range for adventure") RULE_INT(Adventure, NumberKillsForBossSpawn, 45, "Number of adventure kills to make the boss spawn") RULE_REAL(Adventure, DistanceForRescueAccept, 10000.0, "Distance for adventure rescue accept") From 0d28f0c0832fdda06aae2d3966a01fb3794655f2 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 21 Jun 2020 00:26:13 -0400 Subject: [PATCH 193/272] Add zone ID to #findzone --- zone/command.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/command.cpp b/zone/command.cpp index 09aa704b1..657377558 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -4169,10 +4169,11 @@ void command_findzone(Client *c, const Seperator *sep) c->Message( Chat::White, fmt::format( - "[{}] [{}] [{}] Version ({}) [{}]", + "[{}] [{}] [{}] ID ({}) Version ({}) [{}]", (version == 0 ? command_zone : "zone"), command_gmzone, short_name, + zone_id, version, long_name ).c_str() From 1ae077ea8ff079b34bf6c7f63edb4f27929bbbd3 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 21 Jun 2020 01:15:29 -0400 Subject: [PATCH 194/272] Add new zone methods to Perl/Lua. --- zone/embparser_api.cpp | 28 +++++++++++++++ zone/lua_general.cpp | 15 ++++++++ zone/questmgr.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++ zone/questmgr.h | 2 ++ 4 files changed, 123 insertions(+) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index f95730eb0..0251f990f 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -530,6 +530,32 @@ XS(XS__zone) { XSRETURN_EMPTY; } +XS(XS__zonegroup); +XS(XS__zonegroup) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::zonegroup(string zone_name)"); + + char *zone_name = (char *) SvPV_nolen(ST(0)); + + quest_manager.ZoneGroup(zone_name); + + XSRETURN_EMPTY; +} + +XS(XS__zoneraid); +XS(XS__zoneraid) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::zoneraid(string zone_name)"); + + char *zone_name = (char *) SvPV_nolen(ST(0)); + + quest_manager.ZoneRaid(zone_name); + + XSRETURN_EMPTY; +} + XS(XS__settimer); XS(XS__settimer) { dXSARGS; @@ -4520,6 +4546,8 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "write"), XS__write, file); newXS(strcpy(buf, "ze"), XS__ze, file); newXS(strcpy(buf, "zone"), XS__zone, file); + newXS(strcpy(buf, "zonegroup"), XS__zonegroup, file); + newXS(strcpy(buf, "zoneraid"), XS__zoneraid, file); XSRETURN_YES; } diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index b7b9ca6bb..15c059423 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1146,6 +1146,18 @@ Lua_EntityList lua_get_entity_list() { return Lua_EntityList(&entity_list); } +void lua_zone(const char* zone_name) { + quest_manager.Zone(zone_name); +} + +void lua_zone_group(const char* zone_name) { + quest_manager.ZoneGroup(zone_name); +} + +void lua_zone_raid(const char* zone_name) { + quest_manager.ZoneRaid(zone_name); +} + int lua_get_zone_id() { if(!zone) return 0; @@ -1893,6 +1905,9 @@ luabind::scope lua_register_general() { luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*))&lua_get_qglobals), luabind::def("get_entity_list", &lua_get_entity_list), + luabind::def("zone", &lua_zone), + luabind::def("zone_group", &lua_zone_group), + luabind::def("zone_raid", &lua_zone_raid), luabind::def("get_zone_id", &lua_get_zone_id), luabind::def("get_zone_long_name", &lua_get_zone_long_name), luabind::def("get_zone_short_name", &lua_get_zone_short_name), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 969fab6eb..5b830544a 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -407,6 +407,84 @@ void QuestManager::Zone(const char *zone_name) { } } +void QuestManager::ZoneGroup(const char *zone_name) { + QuestManagerCurrentQuestVars(); + if (initiator && initiator->IsClient()) { + if (!initiator->GetGroup()) { + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->admin = initiator->Admin(); + strcpy(ztz->name, initiator->GetName()); + ztz->guild_id = initiator->GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); + } else { + auto client_group = initiator->GetGroup(); + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->admin = group_member->Admin(); + strcpy(ztz->name, group_member->GetName()); + ztz->guild_id = group_member->GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); + } + } + } + } +} + +void QuestManager::ZoneRaid(const char *zone_name) { + QuestManagerCurrentQuestVars(); + if (initiator && initiator->IsClient()) { + if (!initiator->GetRaid()) { + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->admin = initiator->Admin(); + strcpy(ztz->name, initiator->GetName()); + ztz->guild_id = initiator->GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); + } else { + auto client_raid = initiator->GetRaid(); + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->admin = raid_member->Admin(); + strcpy(ztz->name, raid_member->GetName()); + ztz->guild_id = raid_member->GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); + } + } + } + } +} + void QuestManager::settimer(const char *timer_name, int seconds) { QuestManagerCurrentQuestVars(); diff --git a/zone/questmgr.h b/zone/questmgr.h index fb27ca002..c01dafd70 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -77,6 +77,8 @@ public: void selfcast(int spell_id); void addloot(int item_id, int charges = 0, bool equipitem = true, int aug1 = 0, int aug2 = 0, int aug3 = 0, int aug4 = 0, int aug5 = 0, int aug6 = 0); void Zone(const char *zone_name); + void ZoneGroup(const char *zone_name); + void ZoneRaid(const char *zone_name); void settimer(const char *timer_name, int seconds); void settimerMS(const char *timer_name, int milliseconds); void settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst); From 0daadde41551843b4fcf43c3e184af757bbfbe67 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 21 Jun 2020 14:08:28 -0400 Subject: [PATCH 195/272] Add #findrace command. --- zone/command.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- zone/command.h | 1 + 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 09aa704b1..dcc28ff9b 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -204,9 +204,10 @@ int command_init(void) command_add("equipitem", "[slotid(0-21)] - Equip the item on your cursor into the specified slot", 50, command_equipitem) || command_add("face", "- Change the face of your target", 80, command_face) || command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", 80, command_faction) || - command_add("findaliases", "[search term]- Searches for available command aliases, by alias or command", 0, command_findaliases) || + command_add("findaliases", "[search criteria]- Searches for available command aliases, by alias or command", 0, command_findaliases) || command_add("findnpctype", "[search criteria] - Search database NPC types", 100, command_findnpctype) || - command_add("findspell", "[searchstring] - Search for a spell", 50, command_findspell) || + command_add("findrace", "[search criteria] - Search for a race", 50, command_findrace) || + command_add("findspell", "[search criteria] - Search for a spell", 50, command_findspell) || command_add("findzone", "[search criteria] - Search database zones", 100, command_findzone) || command_add("fixmob", "[race|gender|texture|helm|face|hair|haircolor|beard|beardcolor|heritage|tattoo|detail] [next|prev] - Manipulate appearance of your target", 80, command_fixmob) || command_add("flag", "[status] [acctname] - Refresh your admin status, or set an account's admin status if arguments provided", 0, command_flag) || @@ -2628,6 +2629,46 @@ void command_showskills(Client *c, const Seperator *sep) c->Message(Chat::White, "Skill [%d] is at [%d] - %u", i, t->GetSkill(i), t->GetRawSkill(i)); } +void command_findrace(Client *c, const Seperator *sep) +{ + if (sep->arg[1][0] == 0) { + c->Message(Chat::White, "Usage: #findrace [race name]"); + } else if (Seperator::IsNumber(sep->argplus[1])) { + int search_id = atoi(sep->argplus[1]); + std::string race_name = GetRaceIDName(search_id); + if (race_name != std::string("")) { + c->Message(Chat::White, "Race %d: %s", search_id, race_name.c_str()); + return; + } + } else { + const char *search_criteria = sep->argplus[1]; + int found_count = 0; + char race_name[64]; + char search_string[65]; + strn0cpy(search_string, search_criteria, sizeof(search_string)); + strupr(search_string); + char *string_location; + for (int race_id = RACE_HUMAN_1; race_id <= RT_PEGASUS_3; race_id++) { + strn0cpy(race_name, GetRaceIDName(race_id), sizeof(race_name)); + strupr(race_name); + string_location = strstr(race_name, search_string); + if (string_location != nullptr) { + c->Message(Chat::White, "Race %d: %s", race_id, GetRaceIDName(race_id)); + found_count++; + } + + if (found_count == 20) { + break; + } + } + if (found_count == 20) { + c->Message(Chat::White, "20 Races found... max reached."); + } else { + c->Message(Chat::White, "%i Race(s) found.", found_count); + } + } +} + void command_findspell(Client *c, const Seperator *sep) { if (sep->arg[1][0] == 0) diff --git a/zone/command.h b/zone/command.h index 7c1af0edf..05c92eac4 100644 --- a/zone/command.h +++ b/zone/command.h @@ -101,6 +101,7 @@ void command_face(Client *c, const Seperator *sep); void command_faction(Client *c, const Seperator *sep); void command_findaliases(Client *c, const Seperator *sep); void command_findnpctype(Client *c, const Seperator *sep); +void command_findrace(Client *c, const Seperator *sep); void command_findspell(Client *c, const Seperator *sep); void command_findzone(Client *c, const Seperator *sep); void command_fixmob(Client *c, const Seperator *sep); From 9bbef1d79ab5c9c454a1c6ade7ea09ba742b5de7 Mon Sep 17 00:00:00 2001 From: freyonsecurity Date: Fri, 26 Jun 2020 22:05:35 +0200 Subject: [PATCH 196/272] Missing descriptions added All missing descriptions added. Made corrections to existing descriptions. --- common/ruletypes.h | 124 ++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index f5024a303..4b1eb5c68 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -112,7 +112,7 @@ RULE_BOOL(Character, UseNewStatsWindow, true, "Setting whether the new Stats win RULE_BOOL(Character, ItemCastsUseFocus, false, "If true, this allows item clickies to use focuses that have limited maximum levels on them") RULE_INT(Character, MinStatusForNoDropExemptions, 80, "This allows status x and higher to trade no drop items") RULE_INT(Character, SkillCapMaxLevel, 75, "Sets the Maximum Level used for Skill Caps (from skill_caps table). -1 makes it use MaxLevel rule value. It is set to 75 because PEQ only has skillcaps up to that level, and grabbing the players' skill past 75 will return 0, breaking all skills past that level. This helps servers with obsurd level caps (75+ level cap) function without any modifications") -RULE_INT(Character, StatCap, 0, "") +RULE_INT(Character, StatCap, 0, "If StatCap > 0 then this value is used. If it is 0, the value of the following code is used: If Level < 61: 255. If Level >= 61 and the client SoF or newer: 255 + 5 x (level -60). If the client is older than SoF and the level < 71 then: 255 + x (level-60). In all other cases: 330.") RULE_BOOL(Character, CheckCursorEmptyWhenLooting, true, "If true, a player cannot loot a corpse (player or NPC) with an item on their cursor") RULE_BOOL(Character, MaintainIntoxicationAcrossZones, true, "If true, alcohol effects are maintained across zoning and logging out/in") RULE_BOOL(Character, EnableDiscoveredItems, true, "If enabled, it enables EVENT_DISCOVER_ITEM and also saves character names and timestamps for the first time an item is discovered") @@ -122,11 +122,11 @@ RULE_BOOL(Character, KeepLevelOverMax, false, "Don't delevel a character that ha RULE_INT(Character, FoodLossPerUpdate, 32, "How much food/water you lose per stamina update") RULE_BOOL(Character, EnableHungerPenalties, false, "Being hungry/thirsty has negative effects -- it does appear normal live servers do not have penalties") RULE_BOOL(Character, EnableFoodRequirement, true, "If disabled, food is no longer required") -RULE_INT(Character, BaseInstrumentSoftCap, 36, "Softcap for instrument mods, 36 commonly referred to as \"3.6\" as well") +RULE_INT(Character, BaseInstrumentSoftCap, 36, "Softcap for instrument mods, 36 commonly referred to as 3.6 as well") RULE_BOOL(Character, UseSpellFileSongCap, true, "When they removed the AA that increased the cap they removed the above and just use the spell field") RULE_INT(Character, BaseRunSpeedCap, 158, "Base Run Speed Cap, on live it's 158% which will give you a runspeed of 1.580 hard capped to 225") RULE_INT(Character, OrnamentationAugmentType, 20, "Ornamentation Augment Type") -RULE_REAL(Character, EnvironmentDamageMulipliter, 1, "") +RULE_REAL(Character, EnvironmentDamageMulipliter, 1, "Multiplier for environmental damage like fall damage.") RULE_BOOL(Character, UnmemSpellsOnDeath, true, "Setting whether at death all memorized Spells are forgotten") RULE_INT(Character, TradeskillUpAlchemy, 2, "Alchemy skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpBaking, 2, "Baking skillup rate adjust. Lower is faster") @@ -138,15 +138,15 @@ RULE_INT(Character, TradeskillUpMakePoison, 2, "Make Poison skillup rate adjust. RULE_INT(Character, TradeskillUpPottery, 4, "Pottery skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpResearch, 1, "Research skillup rate adjust. Lower is faster") RULE_INT(Character, TradeskillUpTinkering, 2, "Tinkering skillup rate adjust. Lower is faster") -RULE_BOOL(Character, MarqueeHPUpdates, false, "Will show Health percentage in center of screen < 100%") -RULE_INT(Character, IksarCommonTongue, 95, "95 By default (live-like?)") -RULE_INT(Character, OgreCommonTongue, 95, "95 By default (live-like?)") -RULE_INT(Character, TrollCommonTongue, 95, "95 By default (live-like?)") +RULE_BOOL(Character, MarqueeHPUpdates, false, "Will show health percentage in center of screen if health lesser than 100%") +RULE_INT(Character, IksarCommonTongue, 95, "Starting value for Common Tongue for Iksars") +RULE_INT(Character, OgreCommonTongue, 95, "Starting value for Common Tongue for Ogres") +RULE_INT(Character, TrollCommonTongue, 95, "Starting value for Common Tongue for Trolls") RULE_BOOL(Character, ActiveInvSnapshots, false, "Takes a periodic snapshot of inventory contents from online players") -RULE_INT(Character, InvSnapshotMinIntervalM, 180, "Minimum time (in minutes) between inventory snapshots") -RULE_INT(Character, InvSnapshotMinRetryM, 30, "Time (in minutes) to re-attempt an inventory snapshot after a failure") -RULE_INT(Character, InvSnapshotHistoryD, 30, "Time (in days) to keep snapshot entries") -RULE_BOOL(Character, RestrictSpellScribing, false, "Restricts spell scribing to allowable races/classes of spell scroll, if true") +RULE_INT(Character, InvSnapshotMinIntervalM, 180, "Minimum time between inventory snapshots (minutes)") +RULE_INT(Character, InvSnapshotMinRetryM, 30, "Time to re-attempt an inventory snapshot after a failure (minutes)") +RULE_INT(Character, InvSnapshotHistoryD, 30, "Time to keep snapshot entries (days)") +RULE_BOOL(Character, RestrictSpellScribing, false, "Setting whether to testricts spell scribing to allowable races/classes of spell scroll") RULE_BOOL(Character, UseStackablePickPocketing, true, "Allows stackable pickpocketed items to stack instead of only being allowed in empty inventory slots") RULE_BOOL(Character, EnableAvoidanceCap, false, "Setting whether the avoidance cap should be activated") RULE_INT(Character, AvoidanceCap, 750, "750 Is a pretty good value, seen people dodge all attacks beyond 1,000 Avoidance") @@ -155,7 +155,7 @@ RULE_BOOL(Character, UseOldBindWound, false, "Uses the original bind wound behav RULE_BOOL(Character, GrantHoTTOnCreate, false, "Grant Health of Target's Target leadership AA on character creation") RULE_BOOL(Character, UseOldConSystem, false, "Grant Health of Target's Target leadership AA on character creation") RULE_BOOL(Character, OPClientUpdateVisualDebug, false, "Shows a pulse and forward directional particle each time the client sends its position to server") -RULE_BOOL(Character, AllowCrossClassTrainers, false, "") +RULE_BOOL(Character, AllowCrossClassTrainers, false, "If the value is true, a player can also train with other class Guildmasters.") RULE_BOOL(Character, PetsUseReagents, true, "Conjuring pets consumes reagents") RULE_BOOL(Character, DismountWater, true, "Dismount horses when entering water") RULE_BOOL(Character, UseNoJunkFishing, false, "Disregards junk items when fishing") @@ -165,9 +165,9 @@ RULE_BOOL(Character, ProcessFearedProximity, false, "Processes proximity checks RULE_CATEGORY_END() RULE_CATEGORY(Mercs) -RULE_INT(Mercs, SuspendIntervalMS, 10000, "Time interval for merc suspend in milliseconds.") -RULE_INT(Mercs, UpkeepIntervalMS, 180000, "Time interval for merc upkeep in milliseconds") -RULE_INT(Mercs, SuspendIntervalS, 10, "Time interval for merc suspend command in seconds") +RULE_INT(Mercs, SuspendIntervalMS, 10000, "Time interval for merc suspend (milliseconds)") +RULE_INT(Mercs, UpkeepIntervalMS, 180000, "Time interval for merc upkeep (milliseconds)") +RULE_INT(Mercs, SuspendIntervalS, 10, "Time interval for merc suspend command (seconds)") RULE_BOOL(Mercs, AllowMercs, false, "Allow the use of mercs") RULE_BOOL(Mercs, ChargeMercPurchaseCost, false, "Turns Mercenary purchase costs on or off") RULE_BOOL(Mercs, ChargeMercUpkeepCost, false, "Turns Mercenary upkeep costs on or off") @@ -194,7 +194,7 @@ RULE_BOOL(Skills, UseLimitTradeskillSearchSkillDiff, true, "Enables the limit fo RULE_INT(Skills, MaxTradeskillSearchSkillDiff, 50, "The maximum difference in skill between the trivial of an item and the skill of the player if the trivial is higher than the skill. Recipes that have not been learnt or made at least once via the Experiment mode will be removed from searches based on this criteria.") RULE_INT(Skills, MaxTrainSpecializations, 50, "Maximum level a GM trainer will train casting specializations") RULE_INT(Skills, SwimmingStartValue, 100, "Start value of swimming skill") -RULE_BOOL(Skills, TrainSenseHeading, false, "") +RULE_BOOL(Skills, TrainSenseHeading, false, "Switch whether SenseHeading is trained by use") RULE_INT(Skills, SenseHeadingStartValue, 200, "Start value of sense heading skill") RULE_BOOL(Skills, SelfLanguageLearning, true, "Enabling self learning of languages") RULE_BOOL(Skills, RequireTomeHandin, false, "Disable click-to-learn and force hand in to Guild Master") @@ -234,7 +234,7 @@ RULE_BOOL(World, GMAccountIPList, false, "Check IP list against GM accounts. Thi RULE_INT(World, MinGMAntiHackStatus, 1, "Minimum status to check against AntiHack list") RULE_INT(World, SoFStartZoneID, -1, "Sets the Starting Zone for SoF Clients separate from Titanium Clients (-1 is disabled)") RULE_INT(World, TitaniumStartZoneID, -1, "Sets the Starting Zone for Titanium Clients (-1 is disabled). Replaces the old method") -RULE_INT(World, ExpansionSettings, 16383, "Sets the expansion settings for the server, This is sent on login to world and affects client expansion settings. Defaults to all expansions enabled up to TSS") +RULE_INT(World, ExpansionSettings, 16383, "Sets the expansion settings for the server, This is sent on login to world and affects client expansion settings. Defaults to all expansions enabled up to TSS, value is bitmask") RULE_BOOL(World, UseClientBasedExpansionSettings, true, "If true it will overrule World, ExpansionSettings and set someone's expansion based on the client they're using") RULE_INT(World, PVPSettings, 0, "Sets the PVP settings for the server. 1=Rallos Zek RuleSet, 2=Tallon/Vallon Zek Ruleset, 4=Sullon Zek Ruleset, 6=Discord Ruleset, anything above 6 is the Discord Ruleset without the no-drop restrictions removed. NOTE: edit IsAttackAllowed in Zone-table to accomodate for these rules") RULE_INT(World, PVPMinLevel, 0, "Minimum level to pvp") @@ -243,13 +243,13 @@ RULE_INT (World, FVNoDropFlag, 0, "Sets the Firiona Vie settings on the client, RULE_BOOL (World, IPLimitDisconnectAll, false, "Disconnect all current clients by IP if they go over the IP limit. This should allow people to quickly reconnect in the case of dead sessions waiting to timeout") RULE_BOOL(World, MaxClientsSimplifiedLogic, false, "New logic that only uses ExemptMaxClientsStatus and MaxClientsPerIP. Done on the loginserver. This mimics the P99-style special IP rules") RULE_INT (World, TellQueueSize, 20, "Maximum tell queue size") -RULE_BOOL(World, StartZoneSameAsBindOnCreation, true, "Should the start zone ALWAYS be the same location as your bind?") +RULE_BOOL(World, StartZoneSameAsBindOnCreation, true, "Should the start zone always be the same location as your bind?") RULE_BOOL(World, EnforceCharacterLimitAtLogin, false, "Enforce the limit for characters that are online at login") RULE_CATEGORY_END() RULE_CATEGORY(Zone) -RULE_INT(Zone, ClientLinkdeadMS, 90000, "The time a client remains link dead on the server after a sudden disconnection") -RULE_INT(Zone, GraveyardTimeMS, 1200000, "Milliseconds time until a player corpse is moved to a zone's graveyard, if one is specified for the zone") +RULE_INT(Zone, ClientLinkdeadMS, 90000, "The time a client remains link dead on the server after a sudden disconnection (milliseconds)") +RULE_INT(Zone, GraveyardTimeMS, 1200000, "Time until a player corpse is moved to a zone's graveyard, if one is specified for the zone (milliseconds)") RULE_BOOL(Zone, EnableShadowrest, 1, "Enables or disables the Shadowrest zone feature for player corpses. Default is turned on") RULE_BOOL(Zone, UsePlayerCorpseBackups, true, "Keeps backups of player corpses") RULE_INT(Zone, MQWarpExemptStatus, -1, "Required status level to exempt the MQWarpDetector. Set to -1 to disable this feature") @@ -271,8 +271,8 @@ RULE_INT(Zone, EbonCrystalItemID, 40902, "Item ID for Ebon Crystal") RULE_INT(Zone, RadiantCrystalItemID, 40903, "Item ID for Radiant Crystal") RULE_BOOL(Zone, LevelBasedEXPMods, false, "Allows you to use the level_exp_mods table in consideration to your players experience hits") RULE_INT(Zone, WeatherTimer, 600, "Weather timer when no duration is available") -RULE_BOOL(Zone, EnableLoggedOffReplenishments, true, "") -RULE_INT(Zone, MinOfflineTimeToReplenishments, 21600, " (seconds)") +RULE_BOOL(Zone, EnableLoggedOffReplenishments, true, "'Replenish mana/hp/end if logged off for MinOfflineTimeToReplenishments") +RULE_INT(Zone, MinOfflineTimeToReplenishments, 21600, "Minimum time a player must be offline before LoggedOffReplenishments becomes active (seconds)") RULE_BOOL(Zone, UseZoneController, true, "Enables the ability to use persistent quest based zone controllers (zone_controller.pl/lua)") RULE_BOOL(Zone, EnableZoneControllerGlobals, false, "Enables the ability to use quest globals with the zone controller NPC") RULE_INT(Zone, GlobalLootMultiplier, 1, "Sets Global Loot drop multiplier for database based drops, useful for double, triple loot etc") @@ -362,20 +362,20 @@ RULE_INT(Spells, FRProjectileItem_NPC, 80684, "Item id for NPC Fire 'spell proje RULE_BOOL(Spells, UseLiveSpellProjectileGFX, false, "Use spell projectile graphics set in the spells_new table (player_1). Server must be using UF+ spell file") RULE_BOOL(Spells, FocusCombatProcs, false, "Allow all combat procs to receive focus effects") RULE_BOOL(Spells, PreNerfBardAEDoT, false, "Allow bard AOE dots to damage targets when moving") -RULE_INT(Spells, AI_SpellCastFinishedFailRecast, 800, "AI spell recast time(milliseconds) when an spell is cast but fails (ie stunned)") -RULE_INT(Spells, AI_EngagedNoSpellMinRecast, 500, "AI spell recast time (milliseconds) check when no spell is cast while engaged. (min time in random)") -RULE_INT(Spells, AI_EngagedNoSpellMaxRecast, 1000, "AI spell recast time (milliseconds) check when no spell is cast engaged.(maximum time in random)") +RULE_INT(Spells, AI_SpellCastFinishedFailRecast, 800, "AI spell recast time when an spell is cast but fails, ie if stunned (milliseconds)") +RULE_INT(Spells, AI_EngagedNoSpellMinRecast, 500, "AI spell recast time check when no spell is cast while engaged. Min time in random (milliseconds)") +RULE_INT(Spells, AI_EngagedNoSpellMaxRecast, 1000, "AI spell recast time check when no spell is cast engaged. Mmaximum time in random (milliseconds)") RULE_INT(Spells, AI_EngagedBeneficialSelfChance, 100, "Chance during first AI Cast check to do a beneficial spell on self") RULE_INT(Spells, AI_EngagedBeneficialOtherChance, 25, "Chance during second AI Cast check to do a beneficial spell on others") RULE_INT(Spells, AI_EngagedDetrimentalChance, 20, "Chance during third AI Cast check to do a determental spell on others") -RULE_INT(Spells, AI_PursueNoSpellMinRecast, 500, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (min time in random)") -RULE_INT(Spells, AI_PursueNoSpellMaxRecast, 2000, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (maximum time in random)") +RULE_INT(Spells, AI_PursueNoSpellMinRecast, 500, "AI spell recast time check when no spell is cast while chasing target. Mmin time in random (milliseconds)") +RULE_INT(Spells, AI_PursueNoSpellMaxRecast, 2000, "AI spell recast time check when no spell is cast while chasing target. Maximum time in random (milliseconds)") RULE_INT(Spells, AI_PursueDetrimentalChance, 90, "Chance while chasing target to cast a detrimental spell") -RULE_INT(Spells, AI_IdleNoSpellMinRecast, 6000, "AI spell recast time (milliseconds) check when no spell is cast while idle. (min time in random)") -RULE_INT(Spells, AI_IdleNoSpellMaxRecast, 60000, "AI spell recast time (milliseconds) check when no spell is cast while chasing target. (maximum time in random)") +RULE_INT(Spells, AI_IdleNoSpellMinRecast, 6000, "AI spell recast time check when no spell is cast while idle. Mmin time in random (milliseconds)") +RULE_INT(Spells, AI_IdleNoSpellMaxRecast, 60000, "AI spell recast time check when no spell is cast while chasing target. Maximum time in random (milliseconds)") RULE_INT(Spells, AI_IdleBeneficialChance, 100, "Chance while idle to do a beneficial spell on self or others") -RULE_INT(Spells, AI_HealHPPct, 50, "Hitpoint percentage at which NPC starts healing when max_hp of the spell is not set ((nside and outside combat)") -RULE_BOOL(Spells, SHDProcIDOffByOne, true, "Pre June 2009 SHD spell procs were off by 1, they stopped doing this in June 2009 (so UF+ spell files need this false)") +RULE_INT(Spells, AI_HealHPPct, 50, "Hitpoint percentage at which NPC starts healing when max_hp of the spell is not set (inside and outside combat)") +RULE_BOOL(Spells, SHDProcIDOffByOne, true, "Pre June 2009 SHD spell procs were off by 1, they stopped doing this in June 2009 (UF+ spell files need this false)") RULE_BOOL(Spells, Jun182014HundredHandsRevamp, false, "This should be true for if you import a spell file newer than June 18, 2014") RULE_BOOL(Spells, SwarmPetTargetLock, false, "Use old method of swarm pets target locking till target dies then despawning") RULE_BOOL(Spells, NPC_UseFocusFromSpells, true, "Allow NPC to use most spell derived focus effects") @@ -398,7 +398,7 @@ RULE_INT(Combat, MeleeCritDifficulty, 8900, "Value against which is rolled to ch RULE_INT(Combat, ArcheryCritDifficulty, 3400, "Value against which is rolled to check if a archery crit is triggered. Lower is easier") RULE_INT(Combat, ThrowingCritDifficulty, 1100, "Value against which is rolled to check if a throwing crit is triggered. Lower is easier") RULE_BOOL(Combat, NPCCanCrit, false, "Setting whether an NPC can land critical hits") -RULE_BOOL(Combat, UseIntervalAC, true, "") +RULE_BOOL(Combat, UseIntervalAC, true, "Switch whether bonuses, armour class, multipliers, classes and caps should be considered in the calculation of damage values") RULE_INT(Combat, PetAttackMagicLevel, 30, "Level at which pets can cause magic damage") RULE_BOOL(Combat, EnableFearPathing, true, "Setting whether to use pathing during fear") RULE_REAL(Combat, FleeMultiplier, 2.0, "Determines how quickly a NPC will slow down while fleeing. Decrease multiplier to slow NPC down quicker") @@ -416,8 +416,8 @@ RULE_BOOL(Combat, AdjustSpecialProcPerMinute, true, "Set PPM for special abiliti RULE_REAL(Combat, AvgSpecialProcsPerMinute, 2.0, "Unclear what best value is atm") RULE_REAL(Combat, BaseHitChance, 69.0, "Base chance to hiz") RULE_REAL(Combat, NPCBonusHitChance, 26.0, "Bonus chance to hit for NPC") -RULE_REAL(Combat, HitFalloffMinor, 5.0, "Hit will fall off up to 5% over the initial level range") -RULE_REAL(Combat, HitFalloffModerate, 7.0, "Hit will fall off up to 7% over the three levels after the initial level range") +RULE_REAL(Combat, HitFalloffMinor, 5.0, "Hit will fall off up to value over the initial level range (percent)") +RULE_REAL(Combat, HitFalloffModerate, 7.0, "Hit will fall off up to value over the three levels after the initial level range (percent)") RULE_REAL(Combat, HitFalloffMajor, 50.0, "Hit will fall off sharply if we're outside the minor and moderate range") RULE_REAL(Combat, HitBonusPerLevel, 1.2, "You gain this percentage of hit for every level you are above your target") RULE_REAL(Combat, WeaponSkillFalloff, 0.33, "For every weapon skill point that's not maxed you lose this percentage of hit") @@ -443,7 +443,7 @@ RULE_INT(Combat, RoundKickBonus, 5, "Percentage Modifier that this skill gets to RULE_INT(Combat, FrenzyBonus, 0, "Percentage Modifier to damage") RULE_INT(Combat, BackstabBonus, 0, "Percentage Modifier to damage") RULE_BOOL(Combat, ProcTargetOnly, true, "true = procs will only affect our target, false = procs will affect all of our targets") -RULE_REAL(Combat, NPCACFactor, 2.25, "") +RULE_REAL(Combat, NPCACFactor, 2.25, "If UseIntervalAC is enabled, the armor class for NPC is divided by this value") RULE_INT(Combat, ClothACSoftcap, 75, "If OldACSoftcapRules is true: armorclass softcap for cloth armor") RULE_INT(Combat, LeatherACSoftcap, 100, "If OldACSoftcapRules is true: armorclass softcap for leather armor") RULE_INT(Combat, MonkACSoftcap, 120, "If OldACSoftcapRules is true: armorclass softcap for monks") @@ -463,9 +463,9 @@ RULE_REAL(Combat, ClrRngMnkBrdACSoftcapReturn, 0.3030, "CLR/RNG/MNK/BRD armorcla RULE_REAL(Combat, PalShdACSoftcapReturn, 0.3226, "SHD/PAL armorclass softcap increase-factor") RULE_REAL(Combat, DruNecWizEncMagACSoftcapReturn, 0.2000, "DRU/NEC/WIZ/ENC/MAG softcap increase-factor") RULE_REAL(Combat, RogShmBstBerACSoftcapReturn, 0.2500, "ROG/SHM/BST/BER softcap increase-factor") -RULE_REAL(Combat, SoftcapFactor, 1.88, "") -RULE_REAL(Combat, ACthac0Factor, 0.55, "") -RULE_REAL(Combat, ACthac20Factor, 0.55, "") +RULE_REAL(Combat, SoftcapFactor, 1.88, "When UseIntervalAC is enabled, the softcap for mitigation capability is multiplied by this value") +RULE_REAL(Combat, ACthac0Factor, 0.55, "If a mob is attacked and the attack roll is greater than his defense roll, the attack rating is multiplied by this value") +RULE_REAL(Combat, ACthac20Factor, 0.55, "If a mob is attacked and his defense roll is greater than the attack roll, the attack rating is multiplied by this value") RULE_INT(Combat, HitCapPre20, 40, "Hit cap before level 20. Live has it capped at 40") RULE_INT(Combat, HitCapPre10, 20, "Hit cap before level 10. Live has it capped at 20") RULE_INT(Combat, MinHastedDelay, 400, "Minimum hasted combat delay") @@ -486,10 +486,10 @@ RULE_INT(Combat, BerserkerFrenzyEnd, 45, "Percentage Health Points above which W RULE_BOOL(Combat, OneProcPerWeapon, true, "If enabled, One proc per weapon per round") RULE_BOOL(Combat, ProjectileDmgOnImpact, true, "If enabled, projectiles (ie arrows) will hit on impact, instead of instantly") RULE_BOOL(Combat, MeleePush, true, "Eenable melee push") -RULE_INT(Combat, MeleePushChance, 50, "(NPCs) chance the target will be pushed. Made up, 100 actually isn't that bad") +RULE_INT(Combat, MeleePushChance, 50, "NPC chance the target will be pushed. Made up, 100 actually isn't that bad") RULE_BOOL(Combat, UseLiveCombatRounds, true, "Turn this false if you don't want to worry about fixing up combat rounds for NPCs") RULE_INT(Combat, NPCAssistCap, 5, "Maxiumium number of NPCthat will assist another NPC at once") -RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time in milliseconds a NPC will take to clear assist aggro cap space") +RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time a NPC will take to clear assist aggro cap space (milliseconds)") RULE_BOOL(Combat, UseRevampHandToHand, false, "Use h2h revamped dmg/delays I believe this was implemented during SoF") RULE_BOOL(Combat, ClassicMasterWu, false, "Classic master wu uses a random special, modern doesn't") RULE_INT(Combat, LevelToStopDamageCaps, 0, "Level to stop damage caps. 1 will effectively disable them, 20 should give basically same results as old incorrect system") @@ -502,11 +502,11 @@ RULE_CATEGORY_END() RULE_CATEGORY(NPC) RULE_INT(NPC, MinorNPCCorpseDecayTimeMS, 450000, "NPC corpse decay time, if NPC below level 55 (milliseconds)") RULE_INT(NPC, MajorNPCCorpseDecayTimeMS, 1500000, "NPC corpse decay time, if NPC equal or greater than level 55 (milliseconds)") -RULE_INT(NPC, CorpseUnlockTimer, 150000, "") +RULE_INT(NPC, CorpseUnlockTimer, 150000, "Time after which corpses are unlocked for everyone to loot (milliseconds)") RULE_INT(NPC, EmptyNPCCorpseDecayTimeMS, 0, "NPC corpse decay time, if no items are left on the corpse (milliseconds)") -RULE_BOOL(NPC, UseItemBonusesForNonPets, true, "") +RULE_BOOL(NPC, UseItemBonusesForNonPets, true, "Switch whether item bonuses should be used for NPCs who are not pets") RULE_BOOL(NPC, UseBaneDamage, false, "If NPCs can't inheriently hit the target we don't add bane/magic dmg which isn't exactly the same as PCs") -RULE_INT(NPC, SayPauseTimeInSec, 5, "") +RULE_INT(NPC, SayPauseTimeInSec, 5, "Time span in which an NPC pauses his movement after a Say event without aggro (seconds)") RULE_INT(NPC, OOCRegen, 0, "Enable out-of-combat regeneration for NPC") RULE_BOOL(NPC, BuffFriends, false, "Setting whether NPC should buff other NPC") RULE_BOOL(NPC, EnableNPCQuestJournal, false, "Setting whether the NPC Quest Journal is active") @@ -530,7 +530,7 @@ RULE_REAL(NPC, NPCHealOnGateAmount, 25, "How much the npc will heal on gate if e RULE_CATEGORY_END() RULE_CATEGORY(Aggro) -RULE_BOOL(Aggro, SmartAggroList, true, "") +RULE_BOOL(Aggro, SmartAggroList, true, "Smart aggro list attempts to choose targets in a much smarter fashion, prefering players to pets, sitting and critically injured players to normal players, and players in melee range to players not") RULE_INT(Aggro, SittingAggroMod, 35, "Aggro increase against sitting targets. 35=35%") RULE_INT(Aggro, MeleeRangeAggroMod, 10, "Aggro increase against targets in melee range. 10=10%") RULE_INT(Aggro, CurrentTargetAggroMod, 0, "Aggro increase against current target. 0% = prefer the current target to any other. Makes it harder for our NPCto switch targets") @@ -543,7 +543,7 @@ RULE_INT(Aggro, MaxScalingProcAggro, 400, "Set to -1 for no limit. Maximum amoun RULE_INT(Aggro, IntAggroThreshold, 75, "Int lesser or equal the value will aggro regardless of level difference") RULE_BOOL(Aggro, AllowTickPulling, false, "tick pulling is an exploit in an NPC's call for help fixed sometime in 2006 on live") RULE_INT(Aggro, MinAggroLevel, 18, "Minimum level for use with UseLevelAggro") -RULE_BOOL(Aggro, UseLevelAggro, true, "MinAggroLevel rule value+ and Undead will aggro regardless of level difference. (this will disabled Rule:IntAggroThreshold if set to true)") +RULE_BOOL(Aggro, UseLevelAggro, true, "MinAggroLevel rule value+ and Undead will aggro regardless of level difference. This will disabled Rule:IntAggroThreshold if set to true") RULE_INT(Aggro, ClientAggroCheckInterval, 6, "Interval in which clients actually check for aggro - in seconds") RULE_REAL(Aggro, PetAttackRange, 40000.0, "Maximum squared range /pet attack works at default is 200") RULE_BOOL(Aggro, NPCAggroMaxDistanceEnabled, true, "If enabled, NPC's will drop aggro beyond 600 units or what is defined at the zone level") @@ -568,7 +568,7 @@ RULE_INT(Range, DamageMessages, 50, "The packet range in which damage messages a RULE_INT(Range, SpellMessages, 75, "The packet range in which spell damage messages are sent") RULE_INT(Range, SongMessages, 75, "The packet range in which song messages are sent") RULE_INT(Range, MobPositionUpdates, 600, "The packet range in which mob position updates are sent") -RULE_INT(Range, ClientPositionUpdates, 300, "") +RULE_INT(Range, ClientPositionUpdates, 300, "Distance in which the own changed position is communicated to other clients") RULE_INT(Range, CriticalDamage, 80, "The packet range in which critical hit messages are sent") RULE_INT(Range, MobCloseScanDistance, 600, "Close scan distance") RULE_CATEGORY_END() @@ -578,7 +578,7 @@ RULE_CATEGORY_END() RULE_CATEGORY(Bots) RULE_INT(Bots, BotExpansionSettings, 16383, "Sets the expansion settings for bot use. Defaults to all expansions enabled up to TSS") RULE_BOOL(Bots, AllowCamelCaseNames, false, "Allows the use of 'MyBot' type names") -RULE_INT(Bots, CommandSpellRank, 1, "Filters bot command spells by rank (1, 2 and 3 are valid filters - any other number allows all ranks)") +RULE_INT(Bots, CommandSpellRank, 1, "Filters bot command spells by rank. 1, 2 and 3 are valid filters - any other number allows all ranks") RULE_INT(Bots, CreationLimit, 150, "Number of bots that each account can create") RULE_BOOL(Bots, FinishBuffing, false, "Allow for buffs to complete even if the bot caster is out of mana. Only affects buffing out of combat") RULE_BOOL(Bots, GroupBuffing, false, "Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB") @@ -588,7 +588,7 @@ RULE_REAL(Bots, ManaRegen, 2.0, "Adjust mana regen for bots, 1 is fast and highe RULE_BOOL(Bots, PreferNoManaCommandSpells, true, "Give sorting priority to newer no-mana spells (i.e., 'Bind Affinity')") RULE_BOOL(Bots, QuestableSpawnLimit, false, "Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl") RULE_BOOL(Bots, QuestableSpells, false, "Anita Thrall's (Anita_Thrall.pl) Bot Spell Scriber quests") -RULE_INT(Bots, SpawnLimit, 71, "Number of bots a character can have spawned at one time, You + 71 bots is a 12 group pseudo-raid (bots are not raidable at this time)") +RULE_INT(Bots, SpawnLimit, 71, "Number of bots a character can have spawned at one time, You + 71 bots is a 12 group pseudo-raid") RULE_BOOL(Bots, UpdatePositionWithTimer, false, "Sends a position update with every positive movement timer check") RULE_BOOL(Bots, UsePathing, true, "Bots will use node pathing when moving") RULE_BOOL(Bots, BotGroupXP, false, "Determines whether client gets experience for bots outside their group") @@ -613,13 +613,13 @@ RULE_CATEGORY(Chat) RULE_BOOL(Chat, ServerWideOOC, true, "Enable server wide ooc-chat") RULE_BOOL(Chat, ServerWideAuction, true, "Enable server wide auction-chat") RULE_BOOL(Chat, EnableVoiceMacros, true, "Enable voice macros") -RULE_BOOL(Chat, EnableMailKeyIPVerification, true, "") +RULE_BOOL(Chat, EnableMailKeyIPVerification, true, "Setting whether the authenticity of the client should be verified via its IP address when accessing the InGame mailbox") RULE_BOOL(Chat, EnableAntiSpam, true, "Enable anti-spam system for chat") RULE_BOOL(Chat, SuppressCommandErrors, false, "Do not suppress command errors by default") RULE_INT(Chat, MinStatusToBypassAntiSpam, 100, "Minimum status to bypass the anti spam system") -RULE_INT(Chat, MinimumMessagesPerInterval, 4, "") -RULE_INT(Chat, MaximumMessagesPerInterval, 12, "") -RULE_INT(Chat, MaxMessagesBeforeKick, 20, "") +RULE_INT(Chat, MinimumMessagesPerInterval, 4, "Minimum number of chat messages allowed per interval. The karma value is added to this value") +RULE_INT(Chat, MaximumMessagesPerInterval, 12, "Maximum value of chat messages allowed per interval") +RULE_INT(Chat, MaxMessagesBeforeKick, 20, "If an attempt is made to send more than the maximum allowed number of chat messages per interval, the client will be disconnected after this absolute number of messages") RULE_INT(Chat, IntervalDurationMS, 60000, "Interval length in milliseconds") RULE_INT(Chat, KarmaUpdateIntervalMS, 1200000, "Karma update interval in milliseconds") RULE_INT(Chat, KarmaGlobalChatLimit, 72, "Amount of karma you need to be able to talk in ooc/auction/chat below the level limit") @@ -639,9 +639,9 @@ RULE_BOOL(Merchant, AllowCorpse, false, "Setting whether dealers leave a corpse RULE_CATEGORY_END() RULE_CATEGORY(Bazaar) -RULE_BOOL(Bazaar, AuditTrail, false, "") -RULE_INT(Bazaar, MaxSearchResults, 50, "") -RULE_BOOL(Bazaar, EnableWarpToTrader, true, "") +RULE_BOOL(Bazaar, AuditTrail, false, "Setting whether a path to the trader should be displayed in the bazaar") +RULE_INT(Bazaar, MaxSearchResults, 50, "Maximum number of search results in Bazaar") +RULE_BOOL(Bazaar, EnableWarpToTrader, true, "Setting whether teleport to the selected trader should be active") RULE_INT(Bazaar, MaxBarterSearchResults, 200, "The maximum results returned in the /barter search") RULE_CATEGORY_END() @@ -693,12 +693,12 @@ RULE_INT(Console, SessionTimeOut, 600000, "Amount of time in ms for the console RULE_CATEGORY_END() RULE_CATEGORY(Network) -RULE_INT(Network, ResendDelayBaseMS, 100, "") -RULE_REAL(Network, ResendDelayFactor, 1.5, "") -RULE_INT(Network, ResendDelayMinMS, 300, "") -RULE_INT(Network, ResendDelayMaxMS, 5000, "") +RULE_INT(Network, ResendDelayBaseMS, 100, "Base delay for resending data in EQStreamManager (milliseconds)") +RULE_REAL(Network, ResendDelayFactor, 1.5, "Multiplier for the base delay when resending data in EQStreamManager") +RULE_INT(Network, ResendDelayMinMS, 300, "Minimum timespan between two send retries (milliseconds)") +RULE_INT(Network, ResendDelayMaxMS, 5000, "Maximum timespan between two send retries (milliseconds)") RULE_REAL(Network, ClientDataRate, 0.0, "KB / sec, 0.0 disabled") -RULE_BOOL(Network, CompressZoneStream, true, "") +RULE_BOOL(Network, CompressZoneStream, true, "Setting whether the zone stream should be compressed for transmission") RULE_CATEGORY_END() RULE_CATEGORY(QueryServ) @@ -769,8 +769,8 @@ RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is tr RULE_CATEGORY_END() RULE_CATEGORY(Instances) -RULE_INT(Instances, ReservedInstances, 30, "Will reserve this many instance ids for globals... probably not a good idea to change this while a server is running") -RULE_BOOL(Instances, RecycleInstanceIds, true, "Will recycle free instance ids instead of gradually running out at 32k") +RULE_INT(Instances, ReservedInstances, 30, "Number of instance IDs which are reserved for globals. This value should not be changed while a server is running") +RULE_BOOL(Instances, RecycleInstanceIds, true, "Setting whether free instance IDs should be recycled to prevent them from gradually running out at 32k") RULE_INT(Instances, GuildHallExpirationDays, 90, "Amount of days before a Guild Hall instance expires") RULE_CATEGORY_END() From c3e7cd65e8e33855ed2143be9b6365113d740e7b Mon Sep 17 00:00:00 2001 From: thalix1337 <> Date: Sat, 27 Jun 2020 03:18:40 +0200 Subject: [PATCH 197/272] Corrected duplicate descriptions Corrected descriptions for the rules UseOldConSystem and UseLiveBlockedMessage --- common/ruletypes.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 4b1eb5c68..f9b46cda1 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -153,7 +153,7 @@ RULE_INT(Character, AvoidanceCap, 750, "750 Is a pretty good value, seen people RULE_BOOL(Character, AllowMQTarget, false, "Disables putting players in the 'hackers' list for targeting beyond the clip plane or attempting to target something untargetable") RULE_BOOL(Character, UseOldBindWound, false, "Uses the original bind wound behavior") RULE_BOOL(Character, GrantHoTTOnCreate, false, "Grant Health of Target's Target leadership AA on character creation") -RULE_BOOL(Character, UseOldConSystem, false, "Grant Health of Target's Target leadership AA on character creation") +RULE_BOOL(Character, UseOldConSystem, false, "Setting whether the pre SoF era consider system should be used") RULE_BOOL(Character, OPClientUpdateVisualDebug, false, "Shows a pulse and forward directional particle each time the client sends its position to server") RULE_BOOL(Character, AllowCrossClassTrainers, false, "If the value is true, a player can also train with other class Guildmasters.") RULE_BOOL(Character, PetsUseReagents, true, "Conjuring pets consumes reagents") @@ -737,8 +737,8 @@ RULE_BOOL(Inventory, TransformSummonedBags, false, "Transforms summoned bags int RULE_CATEGORY_END() RULE_CATEGORY(Client) -RULE_BOOL(Client, UseLiveFactionMessage, false, "Allows players to see faction adjustments like Live") -RULE_BOOL(Client, UseLiveBlockedMessage, false, "Allows players to see faction adjustments like Live") +RULE_BOOL(Client, UseLiveFactionMessage, false, "Allows players to see detailed faction adjustments as on the live servers") +RULE_BOOL(Client, UseLiveBlockedMessage, false, "Setting whether detailed spell block messages should be used as on the live servers") RULE_CATEGORY_END() RULE_CATEGORY(Bugs) From 736c345a451fcc2f3208d44ded5d9f90cc1a048e Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 27 Jun 2020 16:37:24 -0400 Subject: [PATCH 198/272] Add GetDisciplineTimer() and ResetDisciplineTimer() to Perl/Lua. --- zone/client.h | 2 ++ zone/effects.cpp | 17 +++++++++++++++ zone/lua_client.cpp | 12 +++++++++++ zone/lua_client.h | 2 ++ zone/perl_client.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+) diff --git a/zone/client.h b/zone/client.h index 4253e6643..c6c44b969 100644 --- a/zone/client.h +++ b/zone/client.h @@ -948,7 +948,9 @@ public: void DropInst(const EQ::ItemInstance* inst); bool TrainDiscipline(uint32 itemid); void TrainDiscBySpellID(int32 spell_id); + uint32 GetDisciplineTimer(uint32 timer_id); int GetDiscSlotBySpellID(int32 spellid); + void ResetDisciplineTimer(uint32 timer_id); void SendDisciplineUpdate(); void SendDisciplineTimer(uint32 timer_id, uint32 duration); bool UseDiscipline(uint32 spell_id, uint32 target); diff --git a/zone/effects.cpp b/zone/effects.cpp index b82f74a4d..67ad52314 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -660,6 +660,23 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { return(true); } +uint32 Client::GetDisciplineTimer(uint32 timer_id) { + pTimerType disc_timer_id = pTimerDisciplineReuseStart + timer_id; + uint32 disc_timer = 0; + if (GetPTimers().Enabled((uint32)disc_timer_id)) { + disc_timer = GetPTimers().GetRemainingTime(disc_timer_id); + } + return disc_timer; +} + +void Client::ResetDisciplineTimer(uint32 timer_id) { + pTimerType disc_timer_id = pTimerDisciplineReuseStart + timer_id; + if (GetPTimers().Enabled((uint32)disc_timer_id)) { + GetPTimers().Clear(&database, (uint32)disc_timer_id); + } + SendDisciplineTimer(timer_id, 0); +} + void Client::SendDisciplineTimer(uint32 timer_id, uint32 duration) { if (timer_id < MAX_DISCIPLINE_TIMERS) diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 5898215f3..65058ec4c 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -845,6 +845,16 @@ void Lua_Client::ResetTrade() { self->ResetTrade(); } +uint32 Lua_Client::GetDisciplineTimer(uint32 timer_id) { + Lua_Safe_Call_Int(); + return self->GetDisciplineTimer(timer_id); +} + +void Lua_Client::ResetDisciplineTimer(uint32 timer_id) { + Lua_Safe_Call_Void(); + self->ResetDisciplineTimer(timer_id); +} + bool Lua_Client::UseDiscipline(int spell_id, int target_id) { Lua_Safe_Call_Bool(); return self->UseDiscipline(spell_id, target_id); @@ -1752,6 +1762,8 @@ luabind::scope lua_register_client() { .def("ForageItem", (void(Lua_Client::*)(bool))&Lua_Client::ForageItem) .def("CalcPriceMod", (float(Lua_Client::*)(Lua_Mob,bool))&Lua_Client::CalcPriceMod) .def("ResetTrade", (void(Lua_Client::*)(void))&Lua_Client::ResetTrade) + .def("GetDisciplineTimer", (uint32(Lua_Client::*)(uint32))&Lua_Client::GetDisciplineTimer) + .def("ResetDisciplineTimer", (void(Lua_Client::*)(uint32))&Lua_Client::ResetDisciplineTimer) .def("UseDiscipline", (bool(Lua_Client::*)(int,int))&Lua_Client::UseDiscipline) .def("GetCharacterFactionLevel", (int(Lua_Client::*)(int))&Lua_Client::GetCharacterFactionLevel) .def("SetZoneFlag", (void(Lua_Client::*)(int))&Lua_Client::SetZoneFlag) diff --git a/zone/lua_client.h b/zone/lua_client.h index 600b594f2..f684de72c 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -196,6 +196,8 @@ public: void ForageItem(bool guarantee); float CalcPriceMod(Lua_Mob other, bool reverse); void ResetTrade(); + uint32 GetDisciplineTimer(uint32 timer_id); + void ResetDisciplineTimer(uint32 timer_id); bool UseDiscipline(int spell_id, int target_id); int GetCharacterFactionLevel(int faction_id); void SetZoneFlag(int zone_id); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index ff17e041c..a2e02231e 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -3670,6 +3670,54 @@ XS(XS_Client_UseDiscipline) { XSRETURN(1); } +XS(XS_Client_GetDisciplineTimer); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_GetDisciplineTimer) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::GetDisciplineTimer(THIS, uint32 timer_id)"); + { + Client *THIS; + uint32 RETVAL; + dXSTARG; + uint32 timer_id = (uint32) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->GetDisciplineTimer(timer_id); + XSprePUSH; + PUSHu((UV) RETVAL); + } + XSRETURN(1); +} + +XS(XS_Client_ResetDisciplineTimer); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_ResetDisciplineTimer) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::ResetDisciplineTimer(THIS, uint32 timer_id)"); + { + Client *THIS; + uint32 timer_id = (uint32) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + THIS->ResetDisciplineTimer(timer_id); + } + XSRETURN_EMPTY; +} + XS(XS_Client_GetCharacterFactionLevel); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_GetCharacterFactionLevel) { dXSARGS; @@ -6451,6 +6499,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "GetCorpseID"), XS_Client_GetCorpseID, file, "$$"); newXSproto(strcpy(buf, "GetCorpseItemAt"), XS_Client_GetCorpseItemAt, file, "$$$"); newXSproto(strcpy(buf, "GetCustomItemData"), XS_Client_GetCustomItemData, file, "$$$"); + newXSproto(strcpy(buf, "GetDisciplineTimer"), XS_Client_GetDisciplineTimer, file, "$$"); newXSproto(strcpy(buf, "GetDiscSlotBySpellID"), XS_Client_GetDiscSlotBySpellID, file, "$$"); newXSproto(strcpy(buf, "GetDuelTarget"), XS_Client_GetDuelTarget, file, "$"); newXSproto(strcpy(buf, "GetEbonCrystals"), XS_Client_GetEbonCrystals, file, "$"); @@ -6548,6 +6597,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "RefundAA"), XS_Client_RefundAA, file, "$$"); newXSproto(strcpy(buf, "RemoveNoRent"), XS_Client_RemoveNoRent, file, "$"); newXSproto(strcpy(buf, "ResetAA"), XS_Client_ResetAA, file, "$"); + newXSproto(strcpy(buf, "ResetDisciplineTimer"), XS_Client_ResetDisciplineTimer, file, "$$"); newXSproto(strcpy(buf, "ResetTrade"), XS_Client_ResetTrade, file, "$"); newXSproto(strcpy(buf, "Save"), XS_Client_Save, file, "$$"); newXSproto(strcpy(buf, "SaveBackup"), XS_Client_SaveBackup, file, "$"); From 25c3d3803f2a1993a6c451842f71bec824efd76b Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 27 Jun 2020 18:37:43 -0400 Subject: [PATCH 199/272] Add cross-zone task assign methods to Perl/Lua. --- common/servertalk.h | 32 +++++++++++++++++ world/zoneserver.cpp | 4 +++ zone/embparser_api.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++ zone/lua_general.cpp | 40 +++++++++++++++++++++ zone/questmgr.cpp | 56 +++++++++++++++++++++++++++++ zone/questmgr.h | 4 +++ zone/tasks.cpp | 11 ++---- zone/worldserver.cpp | 43 +++++++++++++++++++++++ 8 files changed, 262 insertions(+), 8 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index e08dbf35d..3e947a281 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -207,6 +207,10 @@ #define ServerOP_CZSetEntityVariableByGroupID 0x4022 #define ServerOP_CZSetEntityVariableByRaidID 0x4023 #define ServerOP_CZSetEntityVariableByGuildID 0x4024 +#define ServerOP_CZTaskAssign 0x4025 +#define ServerOP_CZTaskAssignGroup 0x4026 +#define ServerOP_CZTaskAssignRaid 0x4027 +#define ServerOP_CZTaskAssignGuild 0x4028 /** * QueryServer @@ -1171,6 +1175,34 @@ struct Server_Speech_Struct { char message[0]; }; +struct CZTaskAssign_Struct { + uint16 npc_entity_id; + int character_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignGroup_Struct { + uint16 npc_entity_id; + int group_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignRaid_Struct { + uint16 npc_entity_id; + int raid_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignGuild_Struct { + uint16 npc_entity_id; + int guild_id; + uint32 task_id; + bool enforce_level_requirement; +}; + struct CZClientSignal_Struct { int charid; uint32 data; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 282c5f6be..9ccd1de81 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1251,6 +1251,10 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { case ServerOP_CZSetEntityVariableByGroupID: case ServerOP_CZSetEntityVariableByRaidID: case ServerOP_CZSetEntityVariableByGuildID: + case ServerOP_CZTaskAssign: + case ServerOP_CZTaskAssignGroup: + case ServerOP_CZTaskAssignRaid: + case ServerOP_CZTaskAssignGuild: case ServerOP_WWMarquee: case ServerOP_DepopAllPlayersCorpses: case ServerOP_DepopPlayerCorpse: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index f95730eb0..d057085bd 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3715,6 +3715,82 @@ XS(XS__GetTimeSeconds) { XSRETURN_UV(seconds); } +XS(XS__crosszoneassigntaskbycharid); +XS(XS__crosszoneassigntaskbycharid) { + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneassigntaskbycharid(int character_id, uint32 task_id, [bool enforce_level_requirement = false])"); + { + int character_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvIV(ST(1)); + bool enforce_level_requirement = false; + + if (items == 3) { + enforce_level_requirement = (bool) SvTRUE(ST(2)); + } + + quest_manager.CrossZoneAssignTaskByCharID(character_id, task_id, enforce_level_requirement); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneassigntaskbygroupid); +XS(XS__crosszoneassigntaskbygroupid) { + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneassigntaskbygroupid(int group_id, uint32 task_id, [bool enforce_level_requirement = false])"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvIV(ST(1)); + bool enforce_level_requirement = false; + + if (items == 3) { + enforce_level_requirement = (bool) SvTRUE(ST(2)); + } + + quest_manager.CrossZoneAssignTaskByGroupID(group_id, task_id, enforce_level_requirement); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneassigntaskbyraidid); +XS(XS__crosszoneassigntaskbyraidid) { + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneassigntaskbyraidid(int raid_id, uint32 task_id, [bool enforce_level_requirement = false])");\ + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvIV(ST(1)); + bool enforce_level_requirement = false; + + if (items == 3) { + enforce_level_requirement = (bool) SvTRUE(ST(2)); + } + + quest_manager.CrossZoneAssignTaskByRaidID(raid_id, task_id, enforce_level_requirement); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneassigntaskbyguildid); +XS(XS__crosszoneassigntaskbyguildid) { + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneassigntaskbyguildid(int guild_id, uint32 task_id, [bool enforce_level_requirement = false])"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvIV(ST(1)); + bool enforce_level_requirement = false; + + if (items == 3) { + enforce_level_requirement = (bool) SvTRUE(ST(2)); + } + quest_manager.CrossZoneAssignTaskByGuildID(guild_id, task_id, enforce_level_requirement); + } + XSRETURN_EMPTY; +} + XS(XS__crosszonesignalclientbycharid); XS(XS__crosszonesignalclientbycharid) { dXSARGS; @@ -4340,6 +4416,10 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "creategroundobject"), XS__CreateGroundObject, file); newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file); newXS(strcpy(buf, "createguild"), XS__createguild, file); + newXS(strcpy(buf, "crosszoneassigntaskbycharid"), XS__crosszoneassigntaskbycharid, file); + newXS(strcpy(buf, "crosszoneassigntaskbygroupid"), XS__crosszoneassigntaskbygroupid, file); + newXS(strcpy(buf, "crosszoneassigntaskbyraidid"), XS__crosszoneassigntaskbyraidid, file); + newXS(strcpy(buf, "crosszoneassigntaskbyguildid"), XS__crosszoneassigntaskbyguildid, file); newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); newXS(strcpy(buf, "crosszonemessageplayerbygroupid"), XS__crosszonemessageplayerbygroupid, file); newXS(strcpy(buf, "crosszonemessageplayerbyraidid"), XS__crosszonemessageplayerbyraidid, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index b7b9ca6bb..0082cb829 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1022,6 +1022,38 @@ void lua_send_mail(const char *to, const char *from, const char *subject, const quest_manager.SendMail(to, from, subject, message); } +void lua_cross_zone_assign_task_by_char_id(int character_id, uint32 task_id) { + quest_manager.CrossZoneAssignTaskByCharID(character_id, task_id); +} + +void lua_cross_zone_assign_task_by_char_id(int character_id, uint32 task_id, bool enforce_level_requirement) { + quest_manager.CrossZoneAssignTaskByCharID(character_id, task_id, enforce_level_requirement); +} + +void lua_cross_zone_assign_task_by_group_id(int group_id, uint32 task_id) { + quest_manager.CrossZoneAssignTaskByGroupID(group_id, task_id); +} + +void lua_cross_zone_assign_task_by_group_id(int group_id, uint32 task_id, bool enforce_level_requirement) { + quest_manager.CrossZoneAssignTaskByGroupID(group_id, task_id, enforce_level_requirement); +} + +void lua_cross_zone_assign_task_by_raid_id(int raid_id, uint32 task_id) { + quest_manager.CrossZoneAssignTaskByRaidID(raid_id, task_id); +} + +void lua_cross_zone_assign_task_by_raid_id(int raid_id, uint32 task_id, bool enforce_level_requirement) { + quest_manager.CrossZoneAssignTaskByRaidID(raid_id, task_id, enforce_level_requirement); +} + +void lua_cross_zone_assign_task_by_guild_id(int guild_id, uint32 task_id) { + quest_manager.CrossZoneAssignTaskByGuildID(guild_id, task_id); +} + +void lua_cross_zone_assign_task_by_guild_id(int guild_id, uint32 task_id, bool enforce_level_requirement) { + quest_manager.CrossZoneAssignTaskByGuildID(guild_id, task_id, enforce_level_requirement); +} + void lua_cross_zone_signal_client_by_char_id(uint32 player_id, int signal) { quest_manager.CrossZoneSignalPlayerByCharID(player_id, signal); } @@ -1874,6 +1906,14 @@ luabind::scope lua_register_general() { luabind::def("wear_change", &lua_wear_change), luabind::def("voice_tell", &lua_voice_tell), luabind::def("send_mail", &lua_send_mail), + luabind::def("cross_zone_assign_task_by_char_id", (void(*)(int,uint32))&lua_cross_zone_assign_task_by_char_id), + luabind::def("cross_zone_assign_task_by_char_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_char_id), + luabind::def("cross_zone_assign_task_by_group_id", (void(*)(int,uint32))&lua_cross_zone_assign_task_by_group_id), + luabind::def("cross_zone_assign_task_by_group_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_group_id), + luabind::def("cross_zone_assign_task_by_raid_id", (void(*)(int,uint32))&lua_cross_zone_assign_task_by_raid_id), + luabind::def("cross_zone_assign_task_by_raid_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_raid_id), + luabind::def("cross_zone_assign_task_by_guild_id", (void(*)(int,uint32))&lua_cross_zone_assign_task_by_guild_id), + luabind::def("cross_zone_assign_task_by_guild_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_guild_id), luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), luabind::def("cross_zone_signal_client_by_raid_id", &lua_cross_zone_signal_client_by_raid_id), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 969fab6eb..38d6b9539 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3193,6 +3193,62 @@ const char* QuestManager::GetZoneLongName(const char *zone) { return ln.c_str(); } +void QuestManager::CrossZoneAssignTaskByCharID(int character_id, uint32 task_id, bool enforce_level_requirement) { + QuestManagerCurrentQuestVars(); + if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskAssign, sizeof(CZTaskAssign_Struct)); + CZTaskAssign_Struct* CZTA = (CZTaskAssign_Struct*)pack->pBuffer; + CZTA->npc_entity_id = owner->GetID(); + CZTA->character_id = character_id; + CZTA->task_id = task_id; + CZTA->enforce_level_requirement = enforce_level_requirement; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bool enforce_level_requirement) { + QuestManagerCurrentQuestVars(); + if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskAssignGroup, sizeof(CZTaskAssignGroup_Struct)); + CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*)pack->pBuffer; + CZTA->npc_entity_id = owner->GetID(); + CZTA->group_id = group_id; + CZTA->task_id = task_id; + CZTA->enforce_level_requirement = enforce_level_requirement; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool enforce_level_requirement) { + QuestManagerCurrentQuestVars(); + if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskAssignRaid, sizeof(CZTaskAssignRaid_Struct)); + CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*) pack->pBuffer; + CZTA->npc_entity_id = owner->GetID(); + CZTA->raid_id = raid_id; + CZTA->task_id = task_id; + CZTA->enforce_level_requirement = enforce_level_requirement; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bool enforce_level_requirement) { + QuestManagerCurrentQuestVars(); + if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskAssignGuild, sizeof(CZTaskAssignGuild_Struct)); + CZTaskAssignGuild_Struct* CZTA = (CZTaskAssignGuild_Struct*) pack->pBuffer; + CZTA->npc_entity_id = owner->GetID(); + CZTA->guild_id = guild_id; + CZTA->task_id = task_id; + CZTA->enforce_level_requirement = enforce_level_requirement; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + void QuestManager::CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data){ auto pack = new ServerPacket(ServerOP_CZSignalNPC, sizeof(CZNPCSignal_Struct)); CZNPCSignal_Struct* CZSN = (CZNPCSignal_Struct*)pack->pBuffer; diff --git a/zone/questmgr.h b/zone/questmgr.h index fb27ca002..917962ade 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -278,6 +278,10 @@ public: uint16 CreateDoor( const char* model, float x, float y, float z, float heading, uint8 opentype, uint16 size); int32 GetZoneID(const char *zone); const char *GetZoneLongName(const char *zone); + void CrossZoneAssignTaskByCharID(int character_id, uint32 task_id, bool enforce_level_requirement = false); + void CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bool enforce_level_requirement = false); + void CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool enforce_level_requirement = false); + void CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bool enforce_level_requirement = false); void CrossZoneSignalPlayerByCharID(int charid, uint32 data); void CrossZoneSignalPlayerByGroupID(int group_id, uint32 data); void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data); diff --git a/zone/tasks.cpp b/zone/tasks.cpp index a2c601aa3..141359d81 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -3308,18 +3308,13 @@ void ClientTaskState::AcceptNewTask(Client *c, int TaskID, int NPCID, bool enfor taskmanager->SendSingleActiveTaskToClient(c, *active_slot, false, true); c->Message(Chat::White, "You have been assigned the task '%s'.", taskmanager->Tasks[TaskID]->Title.c_str()); - + taskmanager->SaveClientState(c, this); std::string buf = std::to_string(TaskID); NPC *npc = entity_list.GetID(NPCID)->CastToNPC(); - if(!npc) { - c->Message(Chat::Yellow, "Task Giver ID is %i", NPCID); - c->Message(Chat::Red, "Unable to find NPC to send EVENT_TASKACCEPTED to. Report this bug."); - return; + if(npc) { + parse->EventNPC(EVENT_TASK_ACCEPTED, npc, c, buf.c_str(), 0); } - - taskmanager->SaveClientState(c, this); - parse->EventNPC(EVENT_TASK_ACCEPTED, npc, c, buf.c_str(), 0); } void ClientTaskState::ProcessTaskProximities(Client *c, float X, float Y, float Z) { diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index dfc9c447a..24d1bb7fb 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -2041,6 +2041,49 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZTaskAssign: + { + CZTaskAssign_Struct* CZTA = (CZTaskAssign_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + Client* client = entity_list.GetClientByCharID(CZTA->character_id); + if (client != 0) { + client->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + break; + } + case ServerOP_CZTaskAssignGroup: + { + CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZTA->group_id) { + client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + break; + } + case ServerOP_CZTaskAssignRaid: + { + CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZTA->raid_id) { + client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + break; + } + case ServerOP_CZTaskAssignGuild: + { + CZTaskAssignGuild_Struct* CZTA = (CZTaskAssignGuild_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZTA->guild_id) { + client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + break; + } case ServerOP_WWMarquee: { WWMarquee_Struct* WWMS = (WWMarquee_Struct*)pack->pBuffer; From 9a2294774ebf4f46e8a3eb020a12388ce312d076 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 27 Jun 2020 20:56:02 -0400 Subject: [PATCH 200/272] Add client-based MoveZone methods. --- zone/client.h | 3 + zone/lua_client.cpp | 18 ++++++ zone/lua_client.h | 3 + zone/perl_client.cpp | 129 +++++++++++++++++++++++++++++++++++++++++++ zone/zoning.cpp | 42 ++++++++++++++ 5 files changed, 195 insertions(+) diff --git a/zone/client.h b/zone/client.h index 4253e6643..3d3f0ad5c 100644 --- a/zone/client.h +++ b/zone/client.h @@ -633,6 +633,9 @@ public: void MovePC(uint32 zoneID, float x, float y, float z, float heading, uint8 ignorerestrictions = 0, ZoneMode zm = ZoneSolicited); void MovePC(float x, float y, float z, float heading, uint8 ignorerestrictions = 0, ZoneMode zm = ZoneSolicited); void MovePC(uint32 zoneID, uint32 instanceID, float x, float y, float z, float heading, uint8 ignorerestrictions = 0, ZoneMode zm = ZoneSolicited); + void MoveZone(const char *zone_short_name); + void MoveZoneGroup(const char *zone_short_name); + void MoveZoneRaid(const char *zone_short_name); void SendToGuildHall(); void AssignToInstance(uint16 instance_id); void RemoveFromInstance(uint16 instance_id); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 5898215f3..006e38b1f 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -325,6 +325,21 @@ void Lua_Client::MovePCInstance(int zone, int instance, float x, float y, float self->MovePC(zone, instance, x, y, z, heading); } +void Lua_Client::MoveZone(const char *zone_short_name) { + Lua_Safe_Call_Void(); + self->MoveZone(zone_short_name); +} + +void Lua_Client::MoveZoneGroup(const char *zone_short_name) { + Lua_Safe_Call_Void(); + self->MoveZoneGroup(zone_short_name); +} + +void Lua_Client::MoveZoneRaid(const char *zone_short_name) { + Lua_Safe_Call_Void(); + self->MoveZoneRaid(zone_short_name); +} + void Lua_Client::ChangeLastName(const char *in) { Lua_Safe_Call_Void(); self->ChangeLastName(in); @@ -1648,6 +1663,9 @@ luabind::scope lua_register_client() { .def("SetSecondaryWeaponOrnamentation", (void(Lua_Client::*)(uint32))&Lua_Client::SetSecondaryWeaponOrnamentation) .def("MovePC", (void(Lua_Client::*)(int,float,float,float,float))&Lua_Client::MovePC) .def("MovePCInstance", (void(Lua_Client::*)(int,int,float,float,float,float))&Lua_Client::MovePCInstance) + .def("MoveZone", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZone) + .def("MoveZoneGroup", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZoneGroup) + .def("MoveZoneRaid", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZoneRaid) .def("ChangeLastName", (void(Lua_Client::*)(const char *in))&Lua_Client::ChangeLastName) .def("GetFactionLevel", (int(Lua_Client::*)(uint32,uint32,uint32,uint32,uint32,uint32,Lua_NPC))&Lua_Client::GetFactionLevel) .def("SetFactionLevel", (void(Lua_Client::*)(uint32,uint32,int,int,int))&Lua_Client::SetFactionLevel) diff --git a/zone/lua_client.h b/zone/lua_client.h index 600b594f2..49b49130f 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -91,6 +91,9 @@ public: uint32 GetBindZoneID(int index); void MovePC(int zone, float x, float y, float z, float heading); void MovePCInstance(int zone, int instance, float x, float y, float z, float heading); + void MoveZone(const char *zone_short_name); + void MoveZoneGroup(const char *zone_short_name); + void MoveZoneRaid(const char *zone_short_name); void ChangeLastName(const char *in); int GetFactionLevel(uint32 char_id, uint32 npc_id, uint32 race, uint32 class_, uint32 deity, uint32 faction, Lua_NPC npc); void SetFactionLevel(uint32 char_id, uint32 npc_id, int char_class, int char_race, int char_deity); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index ff17e041c..17e610078 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1319,6 +1319,132 @@ XS(XS_Client_MovePCInstance) { XSRETURN_EMPTY; } +XS(XS_Client_MoveZone); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZone) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZone(THIS, string zone_short_name)"); + { + Client *THIS; + const char *zone_short_name = (const char *) SvPV_nolen(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZone(zone_short_name); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZone) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZone) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZone) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZone) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + +XS(XS_Client_MoveZoneGroup); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZoneGroup) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZoneGroup(THIS, string zone_short_name)"); + { + Client *THIS; + const char *zone_short_name = (const char *) SvPV_nolen(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZoneGroup(zone_short_name); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneGroup) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneGroup) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneGroup) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneGroup) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + +XS(XS_Client_MoveZoneRaid); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZoneRaid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZoneRaid(THIS, string zone_short_name)"); + { + Client *THIS; + const char *zone_short_name = (const char *) SvPV_nolen(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZoneRaid(zone_short_name); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneRaid) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneRaid) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneRaid) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneRaid) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + XS(XS_Client_ChangeLastName); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_ChangeLastName) { dXSARGS; @@ -6537,6 +6663,9 @@ XS(boot_Client) { newXSproto(strcpy(buf, "MemSpell"), XS_Client_MemSpell, file, "$$$;$"); newXSproto(strcpy(buf, "MovePC"), XS_Client_MovePC, file, "$$$$$$"); newXSproto(strcpy(buf, "MovePCInstance"), XS_Client_MovePCInstance, file, "$$$$$$$"); + newXSproto(strcpy(buf, "MoveZone"), XS_Client_MoveZone, file, "$$"); + newXSproto(strcpy(buf, "MoveZoneGroup"), XS_Client_MoveZoneGroup, file, "$$"); + newXSproto(strcpy(buf, "MoveZoneRaid"), XS_Client_MoveZoneRaid, file, "$$"); newXSproto(strcpy(buf, "NPCSpawn"), XS_Client_NPCSpawn, file, "$$$;$"); newXSproto(strcpy(buf, "NukeItem"), XS_Client_NukeItem, file, "$$;$"); newXSproto(strcpy(buf, "OpenLFGuildWindow"), XS_Client_OpenLFGuildWindow, file, "$"); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 7a04cfeae..a22d5e250 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -418,6 +418,48 @@ void Client::MovePC(uint32 zoneID, uint32 instanceID, float x, float y, float z, ProcessMovePC(zoneID, instanceID, x, y, z, heading, ignorerestrictions, zm); } +void Client::MoveZone(const char *zone_short_name) { + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.GetZoneID(zone_short_name); + ztz->admin = Admin(); + strcpy(ztz->name, GetName()); + ztz->guild_id = GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void Client::MoveZoneGroup(const char *zone_short_name) { + if (!GetGroup()) { + MoveZone(zone_short_name); + } else { + auto client_group = GetGroup(); + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->MoveZone(zone_short_name); + } + } + } +} + +void Client::MoveZoneRaid(const char *zone_short_name) { + if (!GetRaid()) { + MoveZone(zone_short_name); + } else { + auto client_raid = GetRaid(); + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->MoveZone(zone_short_name); + } + } + } +} void Client::ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { From 1292e1c9c0e150b273e31fb91eea6e5428b3dbe3 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 28 Jun 2020 10:08:21 -0400 Subject: [PATCH 201/272] Fix $npc->RecalculateSkills() in Perl. --- zone/perl_npc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/perl_npc.cpp b/zone/perl_npc.cpp index fc5d791a7..59a55e49f 100644 --- a/zone/perl_npc.cpp +++ b/zone/perl_npc.cpp @@ -2479,7 +2479,7 @@ XS(XS_NPC_SetSimpleRoamBox) { XS(XS_NPC_RecalculateSkills); /* prototype to pass -Wmissing-prototypes */ XS(XS_NPC_RecalculateSkills) { dXSARGS; - if (items != 2) + if (items != 1) Perl_croak(aTHX_ "Usage: NPC::RecalculateSkills(THIS)"); { NPC *THIS; From 30067f9b6d70212019300fed8299adb42580410c Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 28 Jun 2020 19:14:36 -0500 Subject: [PATCH 202/272] Fix UCS connection bug --- world/main.cpp | 19 ++++++++++++------- world/ucs.cpp | 9 +++++++-- world/ucs.h | 2 ++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 526f839e5..baffd499d 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -200,7 +200,7 @@ void RegisterLoginservers() /** * World process entrypoint - * + * * @param argc * @param argv * @return @@ -481,14 +481,19 @@ int main(int argc, char** argv) { zoneserver_list.UpdateUCSServerAvailable(); }); - server_connection->OnConnectionRemoved("UCS", [](std::shared_ptr connection) { - LogInfo("Removed UCS Server connection from [{0}]", - connection->GetUUID()); + server_connection->OnConnectionRemoved( + "UCS", [](std::shared_ptr connection) { + LogInfo("Connection lost from UCS Server [{0}]", connection->GetUUID()); - UCSLink.SetConnection(nullptr); + auto ucs_connection = UCSLink.GetConnection(); - zoneserver_list.UpdateUCSServerAvailable(false); - }); + if (ucs_connection->GetUUID() == connection->GetUUID()) { + LogInfo("Removing currently active UCS connection"); + UCSLink.SetConnection(nullptr); + zoneserver_list.UpdateUCSServerAvailable(false); + } + } + ); server_connection->OnConnectionIdentified("WebInterface", [](std::shared_ptr connection) { LogInfo("New WebInterface Server connection from [{2}] at [{0}:{1}]", diff --git a/world/ucs.cpp b/world/ucs.cpp index cde94b8d9..170e49dea 100644 --- a/world/ucs.cpp +++ b/world/ucs.cpp @@ -19,7 +19,7 @@ void UCSConnection::SetConnection(std::shared_ptrHandle()->Disconnect(); } - + connection = inStream; if (connection) { connection->OnMessage( @@ -32,7 +32,12 @@ void UCSConnection::SetConnection(std::shared_ptr &UCSConnection::GetConnection() const +{ + return connection; } void UCSConnection::ProcessPacket(uint16 opcode, EQ::Net::Packet &p) diff --git a/world/ucs.h b/world/ucs.h index c32872ccb..679229736 100644 --- a/world/ucs.h +++ b/world/ucs.h @@ -16,6 +16,8 @@ public: void SendPacket(ServerPacket* pack); void Disconnect() { if(connection && connection->Handle()) connection->Handle()->Disconnect(); } void SendMessage(const char *From, const char *Message); + const std::shared_ptr &GetConnection() const; + private: inline std::string GetIP() const { return (connection && connection->Handle()) ? connection->Handle()->RemoteIP() : 0; } std::shared_ptr connection; From 05113aab7d7c22903e83c9e8f4191bb8288f8df6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 28 Jun 2020 22:56:33 -0500 Subject: [PATCH 203/272] Lower animation throttle frequency --- zone/mob.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/zone/mob.cpp b/zone/mob.cpp index 3b607b2d2..63eb351cb 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -115,7 +115,7 @@ Mob::Mob( tmHidden(-1), mitigation_ac(0), m_specialattacks(eSpecialAttacks::None), - attack_anim_timer(1000), + attack_anim_timer(500), position_update_melee_push_timer(500), hate_list_cleanup_timer(6000), mob_scan_close(6000), @@ -501,7 +501,7 @@ Mob::~Mob() if (HasTempPetsActive()) { entity_list.DestroyTempPets(this); } - + entity_list.UnMarkNPC(GetID()); UninitializeBuffSlots(); @@ -1645,21 +1645,23 @@ void Mob::ShowStats(Client* client) } } -void Mob::DoAnim(const int animnum, int type, bool ackreq, eqFilterType filter) { - if (!attack_anim_timer.Check()) +void Mob::DoAnim(const int animnum, int type, bool ackreq, eqFilterType filter) +{ + if (!attack_anim_timer.Check()) { return; + } auto outapp = new EQApplicationPacket(OP_Animation, sizeof(Animation_Struct)); - Animation_Struct* anim = (Animation_Struct*)outapp->pBuffer; + auto *anim = (Animation_Struct *) outapp->pBuffer; anim->spawnid = GetID(); - if(type == 0){ + if (type == 0) { anim->action = animnum; - anim->speed = 10; + anim->speed = 10; } else { anim->action = animnum; - anim->speed = type; + anim->speed = type; } entity_list.QueueCloseClients( @@ -1801,11 +1803,11 @@ void Mob::SendIllusionPacket( new_hairstyle = (in_hairstyle == 0xFF) ? GetHairStyle() : in_hairstyle; new_luclinface = (in_luclinface == 0xFF) ? GetLuclinFace() : in_luclinface; new_beard = (in_beard == 0xFF) ? GetBeard() : in_beard; - new_drakkin_heritage = + new_drakkin_heritage = (in_drakkin_heritage == 0xFFFFFFFF) ? GetDrakkinHeritage() : in_drakkin_heritage; - new_drakkin_tattoo = + new_drakkin_tattoo = (in_drakkin_tattoo == 0xFFFFFFFF) ? GetDrakkinTattoo() : in_drakkin_tattoo; - new_drakkin_details = + new_drakkin_details = (in_drakkin_details == 0xFFFFFFFF) ? GetDrakkinDetails() : in_drakkin_details; new_aa_title = in_aa_title; size = (in_size <= 0.0f) ? GetSize() : in_size; @@ -2110,8 +2112,8 @@ bool Mob::IsPlayerRace(uint16 in_race) { } uint16 Mob::GetFactionRace() { - uint16 current_race = GetRace(); - if (IsPlayerRace(current_race) || current_race == TREE || + uint16 current_race = GetRace(); + if (IsPlayerRace(current_race) || current_race == TREE || current_race == MINOR_ILL_OBJ) { return current_race; } @@ -5898,7 +5900,7 @@ bool Mob::LeaveHealRotationTargetPool() m_target_of_heal_rotation->RemoveTargetFromPool(this); m_target_of_heal_rotation.reset(); - + return !IsHealRotationTarget(); } From f32126faac21f1e426ca872765d7822aa4d3e0bc Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 28 Jun 2020 23:10:30 -0500 Subject: [PATCH 204/272] Fix issue where when a client first enters a zone, a mob may not be aware of their distance to a client immediately so when the client does their scan we also add ourselves to their lists --- zone/client_packet.cpp | 2 +- zone/entity.cpp | 14 +++++++++++++- zone/entity.h | 8 ++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 1bdf3d0d0..88860774d 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -916,7 +916,7 @@ void Client::CompleteConnect() worldserver.RequestTellQueue(GetName()); - entity_list.ScanCloseMobs(close_mobs, this); + entity_list.ScanCloseMobs(close_mobs, this, true); } // connecting opcode handlers diff --git a/zone/entity.cpp b/zone/entity.cpp index 99d5d28c4..5637777d6 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2694,7 +2694,11 @@ void EntityList::RemoveAuraFromMobs(Mob *aura) * @param close_mobs * @param scanning_mob */ -void EntityList::ScanCloseMobs(std::unordered_map &close_mobs, Mob *scanning_mob) +void EntityList::ScanCloseMobs( + std::unordered_map &close_mobs, + Mob *scanning_mob, + bool add_self_to_other_lists +) { float scan_range = RuleI(Range, MobCloseScanDistance) * RuleI(Range, MobCloseScanDistance); @@ -2714,9 +2718,17 @@ void EntityList::ScanCloseMobs(std::unordered_map &close_mobs, Mo float distance = DistanceSquared(scanning_mob->GetPosition(), mob->GetPosition()); if (distance <= scan_range) { close_mobs.insert(std::pair(mob->GetID(), mob)); + + if (add_self_to_other_lists) { + mob->close_mobs.insert(std::pair(scanning_mob->GetID(), scanning_mob)); + } } else if (mob->GetAggroRange() >= scan_range) { close_mobs.insert(std::pair(mob->GetID(), mob)); + + if (add_self_to_other_lists) { + mob->close_mobs.insert(std::pair(scanning_mob->GetID(), scanning_mob)); + } } } diff --git a/zone/entity.h b/zone/entity.h index b6b187300..3815f3c50 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -523,7 +523,11 @@ public: void RefreshAutoXTargets(Client *c); void RefreshClientXTargets(Client *c); void SendAlternateAdvancementStats(); - void ScanCloseMobs(std::unordered_map &close_mobs, Mob *scanning_mob); + void ScanCloseMobs( + std::unordered_map &close_mobs, + Mob *scanning_mob, + bool add_self_to_other_lists = false + ); void GetTrapInfo(Client* client); bool IsTrapGroupSpawned(uint32 trap_id, uint8 group); @@ -582,7 +586,7 @@ private: bool Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, float iRange, uint32 iSpellTypes); // TODO: Evaluate this closesly in hopes to eliminate void ShowSpawnWindow(Client* client, int Distance, bool NamedOnly); // TODO: Implement ShowSpawnWindow in the bot class but it needs entity list stuff - + void ScanCloseClientMobs(std::unordered_map& close_mobs, Mob* scanning_mob); private: std::list bot_list; From 954b0c5106d187f064f51c13686dd378237236af Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 29 Jun 2020 00:55:53 -0500 Subject: [PATCH 205/272] Post merge fixes --- zone/questmgr.cpp | 8 ++++---- zone/zoning.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 01dab8a43..afd621790 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -417,7 +417,7 @@ void QuestManager::ZoneGroup(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->requested_zone_id = ZoneID(zone_name); ztz->admin = initiator->Admin(); strcpy(ztz->name, initiator->GetName()); ztz->guild_id = initiator->GuildID(); @@ -434,7 +434,7 @@ void QuestManager::ZoneGroup(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->requested_zone_id = ZoneID(zone_name); ztz->admin = group_member->Admin(); strcpy(ztz->name, group_member->GetName()); ztz->guild_id = group_member->GuildID(); @@ -456,7 +456,7 @@ void QuestManager::ZoneRaid(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->requested_zone_id = ZoneID(zone_name); ztz->admin = initiator->Admin(); strcpy(ztz->name, initiator->GetName()); ztz->guild_id = initiator->GuildID(); @@ -473,7 +473,7 @@ void QuestManager::ZoneRaid(const char *zone_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_name); + ztz->requested_zone_id = ZoneID(zone_name); ztz->admin = raid_member->Admin(); strcpy(ztz->name, raid_member->GetName()); ztz->guild_id = raid_member->GuildID(); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index d9b17925f..63b918744 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -452,7 +452,7 @@ void Client::MoveZone(const char *zone_short_name) { ztz->response = 0; ztz->current_zone_id = zone->GetZoneID(); ztz->current_instance_id = zone->GetInstanceID(); - ztz->requested_zone_id = database.GetZoneID(zone_short_name); + ztz->requested_zone_id = ZoneID(zone_short_name); ztz->admin = Admin(); strcpy(ztz->name, GetName()); ztz->guild_id = GuildID(); From eb039d176c99f31aaaba3037eb4801f6c739a51c Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 29 Jun 2020 15:49:24 -0400 Subject: [PATCH 206/272] Add GetDisplayAC() to Perl/Lua. --- zone/attack.cpp | 8 ++++---- zone/lua_mob.cpp | 6 ++++++ zone/lua_mob.h | 1 + zone/mob.h | 3 ++- zone/perl_mob.cpp | 26 ++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/zone/attack.cpp b/zone/attack.cpp index 4ac29fdc0..39fceb568 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -780,7 +780,7 @@ int Mob::GetClassRaceACBonus() return ac_bonus; } -int Mob::ACSum() +int Mob::ACSum(bool skip_caps) { int ac = 0; // this should be base AC whenever shrouds come around ac += itembonuses.AC; // items + food + tribute @@ -799,7 +799,7 @@ int Mob::ACSum() // EQ math ac = (ac * 4) / 3; // anti-twink - if (IsClient() && GetLevel() < RuleI(Combat, LevelToStopACTwinkControl)) + if (!skip_caps && IsClient() && GetLevel() < RuleI(Combat, LevelToStopACTwinkControl)) ac = std::min(ac, 25 + 6 * GetLevel()); ac = std::max(0, ac + GetClassRaceACBonus()); if (IsNPC()) { @@ -835,11 +835,11 @@ int Mob::ACSum() if (ac < 0) ac = 0; - if (IsClient() + if (!skip_caps && (IsClient() #ifdef BOTS || IsBot() #endif - ) { + )) { auto softcap = GetACSoftcap(); auto returns = GetSoftcapReturns(); int total_aclimitmod = aabonuses.CombatStability + itembonuses.CombatStability + spellbonuses.CombatStability; diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 69742c655..53658e63d 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -532,6 +532,11 @@ int Lua_Mob::GetAC() { return self->GetAC(); } +int Lua_Mob::GetDisplayAC() { + Lua_Safe_Call_Int(); + return self->GetDisplayAC(); +} + int Lua_Mob::GetATK() { Lua_Safe_Call_Int(); return self->GetATK(); @@ -2344,6 +2349,7 @@ luabind::scope lua_register_mob() { .def("SetMana", &Lua_Mob::SetMana) .def("GetManaRatio", &Lua_Mob::GetManaRatio) .def("GetAC", &Lua_Mob::GetAC) + .def("GetDisplayAC", &Lua_Mob::GetDisplayAC) .def("GetATK", &Lua_Mob::GetATK) .def("GetSTR", &Lua_Mob::GetSTR) .def("GetSTA", &Lua_Mob::GetSTA) diff --git a/zone/lua_mob.h b/zone/lua_mob.h index 592ac6243..e2dbf9e24 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -124,6 +124,7 @@ public: int SetMana(int mana); double GetManaRatio(); int GetAC(); + int GetDisplayAC(); int GetATK(); int GetSTR(); int GetSTA(); diff --git a/zone/mob.h b/zone/mob.h index efdf68012..b07f51ceb 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -211,7 +211,8 @@ public: int TryAssassinate(Mob* defender, EQ::skills::SkillType skillInUse); virtual void DoRiposte(Mob* defender); void ApplyMeleeDamageMods(uint16 skill, int &damage, Mob * defender = nullptr, ExtraAttackOptions *opts = nullptr); - int ACSum(); + int ACSum(bool skip_caps = false); + inline int GetDisplayAC() { return 1000 * (ACSum(true) + compute_defense()) / 847; } int offense(EQ::skills::SkillType skill); int GetBestMeleeSkill(); void CalcAC() { mitigation_ac = ACSum(); } diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index 12f3b1886..f90435887 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -2506,6 +2506,31 @@ XS(XS_Mob_GetAC) { XSRETURN(1); } +XS(XS_Mob_GetDisplayAC); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Mob_GetDisplayAC) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: Mob::GetDisplayAC(THIS)"); + { + Mob *THIS; + uint32 RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "Mob")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Mob *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Mob"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + RETVAL = THIS->GetDisplayAC(); + XSprePUSH; + PUSHu((UV) RETVAL); + } + XSRETURN(1); +} + XS(XS_Mob_GetATK); /* prototype to pass -Wmissing-prototypes */ XS(XS_Mob_GetATK) { dXSARGS; @@ -8676,6 +8701,7 @@ XS(boot_Mob) { newXSproto(strcpy(buf, "SetMana"), XS_Mob_SetMana, file, "$$"); newXSproto(strcpy(buf, "GetManaRatio"), XS_Mob_GetManaRatio, file, "$"); newXSproto(strcpy(buf, "GetAC"), XS_Mob_GetAC, file, "$"); + newXSproto(strcpy(buf, "GetDisplayAC"), XS_Mob_GetDisplayAC, file, "$"); newXSproto(strcpy(buf, "GetATK"), XS_Mob_GetATK, file, "$"); newXSproto(strcpy(buf, "GetSTR"), XS_Mob_GetSTR, file, "$"); newXSproto(strcpy(buf, "GetSTA"), XS_Mob_GetSTA, file, "$"); From f514dd5b5563643359802ce03a8660aa7a941ea0 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 29 Jun 2020 15:18:32 -0400 Subject: [PATCH 207/272] Optimize cross-zone utilities and add cross-zone player move utilities to Perl/Lua. --- common/servertalk.h | 24 ++++++++ world/zoneserver.cpp | 4 ++ zone/embparser_api.cpp | 68 ++++++++++++++++++++ zone/lua_general.cpp | 20 ++++++ zone/questmgr.cpp | 40 ++++++++++++ zone/questmgr.h | 4 ++ zone/worldserver.cpp | 137 +++++++++++++++++++++++++++++++---------- 7 files changed, 264 insertions(+), 33 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index 3e947a281..a487c84ca 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -211,6 +211,10 @@ #define ServerOP_CZTaskAssignGroup 0x4026 #define ServerOP_CZTaskAssignRaid 0x4027 #define ServerOP_CZTaskAssignGuild 0x4028 +#define ServerOP_CZMovePlayer 0x4029 +#define ServerOP_CZMoveGroup 0x4030 +#define ServerOP_CZMoveRaid 0x4031 +#define ServerOP_CZMoveGuild 0x4032 /** * QueryServer @@ -1408,6 +1412,26 @@ struct CZMessageGuild_Struct { char Message[512]; }; +struct CZMovePlayer_Struct { + int character_id; + char zone_short_name[32]; +}; + +struct CZMoveGroup_Struct { + int group_id; + char zone_short_name[32]; +}; + +struct CZMoveRaid_Struct { + int raid_id; + char zone_short_name[32]; +}; + +struct CZMoveGuild_Struct { + int guild_id; + char zone_short_name[32]; +}; + struct WWMarquee_Struct { uint32 Type; uint32 Priority; diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 9ccd1de81..74a17d43a 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1255,6 +1255,10 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { case ServerOP_CZTaskAssignGroup: case ServerOP_CZTaskAssignRaid: case ServerOP_CZTaskAssignGuild: + case ServerOP_CZMovePlayer: + case ServerOP_CZMoveGroup: + case ServerOP_CZMoveRaid: + case ServerOP_CZMoveGuild: case ServerOP_WWMarquee: case ServerOP_DepopAllPlayersCorpses: case ServerOP_DepopPlayerCorpse: diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 4687e8f29..338e5a1a1 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3976,6 +3976,70 @@ XS(XS__crosszonemessageplayerbyguildid) { XSRETURN_EMPTY; } +XS(XS__crosszonemoveplayerbycharid); +XS(XS__crosszonemoveplayerbycharid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveplayerbycharid(int character_id, string zone_short_name)"); + + if (items == 2) { + int character_id = (int) SvIV(ST(0)); + char *zone_short_name = (char *) SvPV_nolen(ST(1)); + quest_manager.CrossZoneMovePlayerByCharID(character_id, zone_short_name); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveplayerbygroupid); +XS(XS__crosszonemoveplayerbygroupid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveplayerbygroupid(int group_id, string zone_short_name)"); + + if (items == 2) { + int group_id = (int) SvIV(ST(0)); + char *zone_short_name = (char *) SvPV_nolen(ST(1)); + quest_manager.CrossZoneMovePlayerByGroupID(group_id, zone_short_name); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveplayerbyraidid); +XS(XS__crosszonemoveplayerbyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveplayerbyraidid(int raid_id, string zone_short_name)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + char *zone_short_name = (char *) SvPV_nolen(ST(1)); + quest_manager.CrossZoneMovePlayerByRaidID(raid_id, zone_short_name); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveplayerbyguildid); +XS(XS__crosszonemoveplayerbyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveplayerbyguildid(int guild_id, string zone_short_name)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + char *zone_short_name = (char *) SvPV_nolen(ST(1)); + quest_manager.CrossZoneMovePlayerByGuildID(guild_id, zone_short_name); + } + + XSRETURN_EMPTY; +} + XS(XS__enablerecipe); XS(XS__enablerecipe) { dXSARGS; @@ -4450,6 +4514,10 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "crosszonemessageplayerbygroupid"), XS__crosszonemessageplayerbygroupid, file); newXS(strcpy(buf, "crosszonemessageplayerbyraidid"), XS__crosszonemessageplayerbyraidid, file); newXS(strcpy(buf, "crosszonemessageplayerbyguildid"), XS__crosszonemessageplayerbyguildid, file); + newXS(strcpy(buf, "crosszonemoveplayerbycharid"), XS__crosszonemoveplayerbycharid, file); + newXS(strcpy(buf, "crosszonemoveplayerbygroupid"), XS__crosszonemoveplayerbygroupid, file); + newXS(strcpy(buf, "crosszonemoveplayerbyraidid"), XS__crosszonemoveplayerbyraidid, file); + newXS(strcpy(buf, "crosszonemoveplayerbyguildid"), XS__crosszonemoveplayerbyguildid, file); newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); newXS(strcpy(buf, "crosszonesetentityvariablebygroupid"), XS__crosszonesetentityvariablebygroupid, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 990c9f1ca..71798ecf0 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1090,6 +1090,22 @@ void lua_cross_zone_message_player_by_guild_id(uint32 type, int guild_id, const quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); } +void lua_cross_zone_move_player_by_char_id(int character_id, const char *zone_short_name) { + quest_manager.CrossZoneMovePlayerByCharID(character_id, zone_short_name); +} + +void lua_cross_zone_move_player_by_group_id(int group_id, const char *zone_short_name) { + quest_manager.CrossZoneMovePlayerByGroupID(group_id, zone_short_name); +} + +void lua_cross_zone_move_player_by_raid_id(int raid_id, const char *zone_short_name) { + quest_manager.CrossZoneMovePlayerByRaidID(raid_id, zone_short_name); +} + +void lua_cross_zone_move_player_by_guild_id(int guild_id, const char *zone_short_name) { + quest_manager.CrossZoneMovePlayerByGuildID(guild_id, zone_short_name); +} + void lua_cross_zone_set_entity_variable_by_client_name(const char *player, const char *id, const char *m_var) { quest_manager.CrossZoneSetEntityVariableByClientName(player, id, m_var); } @@ -1935,6 +1951,10 @@ luabind::scope lua_register_general() { luabind::def("cross_zone_message_player_by_group_id", &lua_cross_zone_message_player_by_group_id), luabind::def("cross_zone_message_player_by_raid_id", &lua_cross_zone_message_player_by_raid_id), luabind::def("cross_zone_message_player_by_guild_id", &lua_cross_zone_message_player_by_guild_id), + luabind::def("cross_zone_move_player_by_char_id", &lua_cross_zone_move_player_by_char_id), + luabind::def("cross_zone_move_player_by_group_id", &lua_cross_zone_move_player_by_group_id), + luabind::def("cross_zone_move_player_by_raid_id", &lua_cross_zone_move_player_by_raid_id), + luabind::def("cross_zone_move_player_by_guild_id", &lua_cross_zone_move_player_by_guild_id), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), luabind::def("cross_zone_set_entity_variable_by_group_id", &lua_cross_zone_set_entity_variable_by_group_id), luabind::def("cross_zone_set_entity_variable_by_raid_id", &lua_cross_zone_set_entity_variable_by_raid_id), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index a38553c39..09423b49b 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3428,6 +3428,46 @@ void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, con safe_delete(pack); } +void QuestManager::CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name){ + uint32 message_len = strlen(zone_short_name) + 1; + auto pack = new ServerPacket(ServerOP_CZMovePlayer, sizeof(CZMovePlayer_Struct) + message_len); + CZMovePlayer_Struct* CZGM = (CZMovePlayer_Struct*) pack->pBuffer; + CZGM->character_id = character_id; + strn0cpy(CZGM->zone_short_name, zone_short_name, 32); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name){ + uint32 message_len = strlen(zone_short_name) + 1; + auto pack = new ServerPacket(ServerOP_CZMoveGroup, sizeof(CZMoveGroup_Struct) + message_len); + CZMoveGroup_Struct* CZGM = (CZMoveGroup_Struct*) pack->pBuffer; + CZGM->group_id = group_id; + strn0cpy(CZGM->zone_short_name, zone_short_name, 32); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name){ + uint32 message_len = strlen(zone_short_name) + 1; + auto pack = new ServerPacket(ServerOP_CZMoveRaid, sizeof(CZMoveRaid_Struct) + message_len); + CZMoveRaid_Struct* CZRM = (CZMoveRaid_Struct*) pack->pBuffer; + CZRM->raid_id = raid_id; + strn0cpy(CZRM->zone_short_name, zone_short_name, 32); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name){ + uint32 message_len = strlen(zone_short_name) + 1; + auto pack = new ServerPacket(ServerOP_CZMoveGuild, sizeof(CZMoveGuild_Struct) + message_len); + CZMoveGuild_Struct* CZGM = (CZMoveGuild_Struct*) pack->pBuffer; + CZGM->guild_id = guild_id; + strn0cpy(CZGM->zone_short_name, zone_short_name, 32); + worldserver.SendPacket(pack); + safe_delete(pack); +} + void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var){ uint32 message_len = strlen(id) + 1; uint32 message_len2 = strlen(m_var) + 1; diff --git a/zone/questmgr.h b/zone/questmgr.h index ab0701b39..14f4678be 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -299,6 +299,10 @@ public: void CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message); void CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message); void CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message); + void CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name); + void CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name); + void CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name); + void CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name); void WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message); bool EnableRecipe(uint32 recipe_id); bool DisableRecipe(uint32 recipe_id); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 24d1bb7fb..c4a544357 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1918,10 +1918,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZSignalGroup: { CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZGS->group_id) { - client.second->Signal(CZGS->data); + auto client_group = entity_list.GetGroupByID(CZGS->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->Signal(CZGS->data); + } } } break; @@ -1929,10 +1932,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZSignalRaid: { CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRS->raid_id) { - client.second->Signal(CZRS->data); + auto client_raid = entity_list.GetRaidByID(CZRS->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->Signal(CZRS->data); + } } } break; @@ -1969,10 +1975,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZMessageGroup: { CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZGM->GroupID) { - client.second->Message(CZGM->Type, CZGM->Message); + auto client_group = entity_list.GetGroupByID(CZGM->GroupID); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->Message(CZGM->Type, CZGM->Message); + } } } break; @@ -1980,10 +1989,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZMessageRaid: { CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZRM->RaidID) { - client.second->Message(CZRM->Type, CZRM->Message); + auto client_raid = entity_list.GetRaidByID(CZRM->RaidID); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->Message(CZRM->Type, CZRM->Message); + } } } break; @@ -2011,10 +2023,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZSetEntityVariableByGroupID: { CZSetEntVarByGroupID_Struct* CZCS = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZCS->group_id) { - client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + auto client_group = entity_list.GetGroupByID(CZCS->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->SetEntityVariable(CZCS->id, CZCS->m_var); + } } } break; @@ -2022,10 +2037,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZSetEntityVariableByRaidID: { CZSetEntVarByRaidID_Struct* CZCS = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZCS->raid_id) { - client.second->SetEntityVariable(CZCS->id, CZCS->m_var); + auto client_raid = entity_list.GetRaidByID(CZCS->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->SetEntityVariable(CZCS->id, CZCS->m_var); + } } } break; @@ -2044,7 +2062,6 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZTaskAssign: { CZTaskAssign_Struct* CZTA = (CZTaskAssign_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); Client* client = entity_list.GetClientByCharID(CZTA->character_id); if (client != 0) { client->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); @@ -2054,10 +2071,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZTaskAssignGroup: { CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetGroup() && client.second->GetGroup()->GetID() == CZTA->group_id) { - client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + auto client_group = entity_list.GetGroupByID(CZTA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } } } break; @@ -2065,10 +2085,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_CZTaskAssignRaid: { CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GetRaid() && client.second->GetRaid()->GetID() == CZTA->raid_id) { - client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + auto client_raid = entity_list.GetRaidByID(CZTA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } } } break; @@ -2084,6 +2107,54 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } + case ServerOP_CZMovePlayer: + { + CZMovePlayer_Struct* CZMP = (CZMovePlayer_Struct*)pack->pBuffer; + Client* client = entity_list.GetClientByCharID(CZMP->character_id); + if (client != 0) { + client->MoveZone(CZMP->zone_short_name); + } + break; + } + case ServerOP_CZMoveGroup: + { + CZMoveGroup_Struct* CZMG = (CZMoveGroup_Struct*)pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZMG->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->MoveZone(CZMG->zone_short_name); + } + } + } + break; + } + case ServerOP_CZMoveRaid: + { + CZMoveRaid_Struct* CZMR = (CZMoveRaid_Struct*)pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZMR->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->MoveZone(CZMR->zone_short_name); + } + } + } + break; + } + case ServerOP_CZMoveGuild: + { + CZMoveGuild_Struct* CZMG = (CZMoveGuild_Struct*)pack->pBuffer; + auto client_list = entity_list.GetClientList(); + for (auto client : client_list) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZMG->guild_id) { + client.second->MoveZone(CZMG->zone_short_name); + } + } + break; + } case ServerOP_WWMarquee: { WWMarquee_Struct* WWMS = (WWMarquee_Struct*)pack->pBuffer; From 1b2c2a1dd0fca14d31a9226ac1be8568e8ee9824 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 29 Jun 2020 19:24:14 -0400 Subject: [PATCH 208/272] Add MoveZoneInstance methods to Perl/Lua. --- zone/client.h | 3 + zone/lua_client.cpp | 18 ++++++ zone/lua_client.h | 3 + zone/perl_client.cpp | 129 +++++++++++++++++++++++++++++++++++++++++++ zone/zoning.cpp | 47 ++++++++++++++++ 5 files changed, 200 insertions(+) diff --git a/zone/client.h b/zone/client.h index 91319b04a..8b9d32bbc 100644 --- a/zone/client.h +++ b/zone/client.h @@ -636,6 +636,9 @@ public: void MoveZone(const char *zone_short_name); void MoveZoneGroup(const char *zone_short_name); void MoveZoneRaid(const char *zone_short_name); + void MoveZoneInstance(uint16 instance_id); + void MoveZoneInstanceGroup(uint16 instance_id); + void MoveZoneInstanceRaid(uint16 instance_id); void SendToGuildHall(); void AssignToInstance(uint16 instance_id); void RemoveFromInstance(uint16 instance_id); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 88d085f41..ffe643e79 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -340,6 +340,21 @@ void Lua_Client::MoveZoneRaid(const char *zone_short_name) { self->MoveZoneRaid(zone_short_name); } +void Lua_Client::MoveZoneInstance(uint16 instance_id) { + Lua_Safe_Call_Void(); + self->MoveZoneInstance(instance_id); +} + +void Lua_Client::MoveZoneInstanceGroup(uint16 instance_id) { + Lua_Safe_Call_Void(); + self->MoveZoneInstanceGroup(instance_id); +} + +void Lua_Client::MoveZoneInstanceRaid(uint16 instance_id) { + Lua_Safe_Call_Void(); + self->MoveZoneInstanceRaid(instance_id); +} + void Lua_Client::ChangeLastName(const char *in) { Lua_Safe_Call_Void(); self->ChangeLastName(in); @@ -1676,6 +1691,9 @@ luabind::scope lua_register_client() { .def("MoveZone", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZone) .def("MoveZoneGroup", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZoneGroup) .def("MoveZoneRaid", (void(Lua_Client::*)(const char*))&Lua_Client::MoveZoneRaid) + .def("MoveZoneInstance", (void(Lua_Client::*)(uint16))&Lua_Client::MoveZoneInstance) + .def("MoveZoneInstanceGroup", (void(Lua_Client::*)(uint16))&Lua_Client::MoveZoneInstanceGroup) + .def("MoveZoneInstanceRaid", (void(Lua_Client::*)(uint16))&Lua_Client::MoveZoneInstanceRaid) .def("ChangeLastName", (void(Lua_Client::*)(const char *in))&Lua_Client::ChangeLastName) .def("GetFactionLevel", (int(Lua_Client::*)(uint32,uint32,uint32,uint32,uint32,uint32,Lua_NPC))&Lua_Client::GetFactionLevel) .def("SetFactionLevel", (void(Lua_Client::*)(uint32,uint32,int,int,int))&Lua_Client::SetFactionLevel) diff --git a/zone/lua_client.h b/zone/lua_client.h index 1453c46e9..e0f4745f5 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -94,6 +94,9 @@ public: void MoveZone(const char *zone_short_name); void MoveZoneGroup(const char *zone_short_name); void MoveZoneRaid(const char *zone_short_name); + void MoveZoneInstance(uint16 instance_id); + void MoveZoneInstanceGroup(uint16 instance_id); + void MoveZoneInstanceRaid(uint16 instance_id); void ChangeLastName(const char *in); int GetFactionLevel(uint32 char_id, uint32 npc_id, uint32 race, uint32 class_, uint32 deity, uint32 faction, Lua_NPC npc); void SetFactionLevel(uint32 char_id, uint32 npc_id, int char_class, int char_race, int char_deity); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 393f8ea28..c8a070fd4 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -1445,6 +1445,132 @@ XS(XS_Client_MoveZoneRaid) { XSRETURN_EMPTY; } +XS(XS_Client_MoveZoneInstance); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZoneInstance) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZoneInstance(THIS, uint16 instance_id)"); + { + Client *THIS; + uint16 instance_id = (uint16) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZoneInstance(instance_id); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstance) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstance) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstance) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstance) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + +XS(XS_Client_MoveZoneInstanceGroup); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZoneInstanceGroup) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZoneInstanceGroup(THIS, uint16 instance_id)"); + { + Client *THIS; + uint16 instance_id = (uint16) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZoneInstanceGroup(instance_id); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceGroup) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceGroup) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceGroup) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceGroup) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + +XS(XS_Client_MoveZoneInstanceRaid); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_MoveZoneInstanceRaid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::MoveZoneInstanceRaid(THIS, uint16 instance_id)"); + { + Client *THIS; + uint16 instance_id = (uint16) SvUV(ST(1)); + + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + if (THIS->IsClient()) { + THIS->MoveZoneInstanceRaid(instance_id); + } else { + if (THIS->IsMerc()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceRaid) attempted to process a type Merc reference"); + } +#ifdef BOTS + else if (THIS->IsBot()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceRaid) attempted to process a type Bot reference"); + } +#endif + else if (THIS->IsNPC()) { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceRaid) attempted to process a type NPC reference"); + } + else { + LogDebug("[CLIENT] Perl(XS_Client_MoveZoneInstanceRaid) attempted to process an Unknown type reference"); + } + + Perl_croak(aTHX_ "THIS is not of type Client"); + } + + } + XSRETURN_EMPTY; +} + XS(XS_Client_ChangeLastName); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_ChangeLastName) { dXSARGS; @@ -6715,6 +6841,9 @@ XS(boot_Client) { newXSproto(strcpy(buf, "MoveZone"), XS_Client_MoveZone, file, "$$"); newXSproto(strcpy(buf, "MoveZoneGroup"), XS_Client_MoveZoneGroup, file, "$$"); newXSproto(strcpy(buf, "MoveZoneRaid"), XS_Client_MoveZoneRaid, file, "$$"); + newXSproto(strcpy(buf, "MoveZoneInstance"), XS_Client_MoveZoneInstance, file, "$$"); + newXSproto(strcpy(buf, "MoveZoneInstanceGroup"), XS_Client_MoveZoneInstanceGroup, file, "$$"); + newXSproto(strcpy(buf, "MoveZoneInstanceRaid"), XS_Client_MoveZoneInstanceRaid, file, "$$"); newXSproto(strcpy(buf, "NPCSpawn"), XS_Client_NPCSpawn, file, "$$$;$"); newXSproto(strcpy(buf, "NukeItem"), XS_Client_NukeItem, file, "$$;$"); newXSproto(strcpy(buf, "OpenLFGuildWindow"), XS_Client_OpenLFGuildWindow, file, "$"); diff --git a/zone/zoning.cpp b/zone/zoning.cpp index a22d5e250..785573bef 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -461,6 +461,53 @@ void Client::MoveZoneRaid(const char *zone_short_name) { } } +void Client::MoveZoneInstance(uint16 instance_id) { + if (!database.CharacterInInstanceGroup(instance_id, CharacterID())) { + database.AddClientToInstance(instance_id, CharacterID()); + } + auto pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct)); + ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer; + ztz->response = 0; + ztz->current_zone_id = zone->GetZoneID(); + ztz->current_instance_id = zone->GetInstanceID(); + ztz->requested_zone_id = database.ZoneIDFromInstanceID(instance_id); + ztz->requested_instance_id = instance_id; + ztz->admin = Admin(); + strcpy(ztz->name, GetName()); + ztz->guild_id = GuildID(); + ztz->ignorerestrictions = 3; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void Client::MoveZoneInstanceGroup(uint16 instance_id) { + if (!GetGroup()) { + MoveZoneInstance(instance_id); + } else { + auto client_group = GetGroup(); + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->MoveZoneInstance(instance_id); + } + } + } +} + +void Client::MoveZoneInstanceRaid(uint16 instance_id) { + if (!GetRaid()) { + MoveZoneInstance(instance_id); + } else { + auto client_raid = GetRaid(); + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->MoveZoneInstance(instance_id); + } + } + } +} + void Client::ProcessMovePC(uint32 zoneID, uint32 instance_id, float x, float y, float z, float heading, uint8 ignorerestrictions, ZoneMode zm) { // From what I have read, dragged corpses should stay with the player for Intra-zone summons etc, but we can implement that later. From eed1fd8a4320d85c534ea59e216f139ad6de7e8d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 29 Jun 2020 20:54:48 -0400 Subject: [PATCH 209/272] Add DyeArmorBySlot(slot, red, green, blue, use_tint) to Perl/Lua. --- zone/client.h | 1 + zone/inventory.cpp | 16 ++++++++++++++++ zone/lua_client.cpp | 12 ++++++++++++ zone/lua_client.h | 2 ++ zone/perl_client.cpp | 29 +++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+) diff --git a/zone/client.h b/zone/client.h index 91319b04a..20ae0795b 100644 --- a/zone/client.h +++ b/zone/client.h @@ -276,6 +276,7 @@ public: GetItems_Struct* GetTraderItems(); void SendBazaarWelcome(); void DyeArmor(EQ::TintProfile* dye); + void DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue, uint8 use_tint = 0x00); uint8 SlotConvert(uint8 slot,bool bracer=false); void MessageString(uint32 type, uint32 string_id, uint32 distance = 0); void MessageString(uint32 type, uint32 string_id, const char* message,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0, uint32 distance = 0); diff --git a/zone/inventory.cpp b/zone/inventory.cpp index 993cdac8a..54ae07b7d 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -2228,6 +2228,22 @@ void Client::DyeArmor(EQ::TintProfile* dye){ } +void Client::DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue, uint8 use_tint) { + uint8 item_slot = SlotConvert(slot); + EQ::ItemInstance* item_instance = this->m_inv.GetItem(item_slot); + if (item_instance) { + uint32 armor_color = ((uint32)red << 16) | ((uint32)green << 8) | ((uint32)blue); + item_instance->SetColor(armor_color); + database.SaveCharacterMaterialColor(this->CharacterID(), slot, armor_color); + database.SaveInventory(CharacterID(), item_instance, item_slot); + m_pp.item_tint.Slot[slot].UseTint = (use_tint ? 0xFF : 0x00); + } + m_pp.item_tint.Slot[slot].Red = red; + m_pp.item_tint.Slot[slot].Green = green; + m_pp.item_tint.Slot[slot].Blue = blue; + SendWearChange(slot); +} + #if 0 bool Client::DecreaseByItemType(uint32 type, uint8 amt) { const ItemData* TempItem = 0; diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 88d085f41..70adce43f 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -75,6 +75,16 @@ void Lua_Client::Duck() { self->Duck(); } +void Lua_Client::DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue) { + Lua_Safe_Call_Void(); + self->DyeArmorBySlot(slot, red, green, blue); +} + +void Lua_Client::DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue, uint8 use_tint) { + Lua_Safe_Call_Void(); + self->DyeArmorBySlot(slot, red, green, blue, use_tint); +} + void Lua_Client::Stand() { Lua_Safe_Call_Void(); self->Stand(); @@ -1622,6 +1632,8 @@ luabind::scope lua_register_client() { .def("SendToGuildHall", (void(Lua_Client::*)(void))&Lua_Client::SendToGuildHall) .def("GetAnon", (bool(Lua_Client::*)(void))&Lua_Client::GetAnon) .def("Duck", (void(Lua_Client::*)(void))&Lua_Client::Duck) + .def("DyeArmorBySlot", (void(Lua_Client::*)(uint8,uint8,uint8,uint8))&Lua_Client::DyeArmorBySlot) + .def("DyeArmorBySlot", (void(Lua_Client::*)(uint8,uint8,uint8,uint8,uint8))&Lua_Client::DyeArmorBySlot) .def("Stand", (void(Lua_Client::*)(void))&Lua_Client::Stand) .def("SetGM", (void(Lua_Client::*)(bool))&Lua_Client::SetGM) .def("SetPVP", (void(Lua_Client::*)(bool))&Lua_Client::SetPVP) diff --git a/zone/lua_client.h b/zone/lua_client.h index 1453c46e9..45eeb27a4 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -42,6 +42,8 @@ public: void SendToGuildHall(); bool GetAnon(); void Duck(); + void DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue); + void DyeArmorBySlot(uint8 slot, uint8 red, uint8 green, uint8 blue, uint8 use_tint); void Stand(); void SetGM(bool v); void SetPVP(bool v); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 393f8ea28..8a13df9d3 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -312,6 +312,34 @@ XS(XS_Client_Duck) { XSRETURN_EMPTY; } +XS(XS_Client_DyeArmorBySlot); /* prototype to pass -Wmissing-prototypes */ +XS(XS_Client_DyeArmorBySlot) { + dXSARGS; + if (items != 5 && items != 6) + Perl_croak(aTHX_ "Usage: Client::DyeArmorBySlot(THIS, uint8 slot, uint8 red, uint8 green, uint8 blue, [uint8 use_tint = 0x00])"); + { + Client *THIS; + uint8 slot = (uint8) SvUV(ST(1)); + uint8 red = (uint8) SvUV(ST(2)); + uint8 green = (uint8) SvUV(ST(3)); + uint8 blue = (uint8) SvUV(ST(4)); + uint8 use_tint = 0x00; + if (items == 6) { + use_tint = (uint8) SvUV(ST(5)); + } + if (sv_derived_from(ST(0), "Client")) { + IV tmp = SvIV((SV *) SvRV(ST(0))); + THIS = INT2PTR(Client *, tmp); + } else + Perl_croak(aTHX_ "THIS is not of type Client"); + if (THIS == nullptr) + Perl_croak(aTHX_ "THIS is nullptr, avoiding crash."); + + THIS->DyeArmorBySlot(slot, red, green, blue, use_tint); + } + XSRETURN_EMPTY; +} + XS(XS_Client_Stand); /* prototype to pass -Wmissing-prototypes */ XS(XS_Client_Stand) { dXSARGS; @@ -6585,6 +6613,7 @@ XS(boot_Client) { newXSproto(strcpy(buf, "Disconnect"), XS_Client_Disconnect, file, "$"); newXSproto(strcpy(buf, "DropItem"), XS_Client_DropItem, file, "$$"); newXSproto(strcpy(buf, "Duck"), XS_Client_Duck, file, "$"); + newXSproto(strcpy(buf, "DyeArmorBySlot"), XS_Client_DyeArmorBySlot, file, "$$$$$;$"); newXSproto(strcpy(buf, "Escape"), XS_Client_Escape, file, "$"); newXSproto(strcpy(buf, "ExpeditionMessage"), XS_Client_ExpeditionMessage, file, "$$$"); newXSproto(strcpy(buf, "FailTask"), XS_Client_FailTask, file, "$$"); From 12a0e3e2266c2208236745ba12a999a4f989cb45 Mon Sep 17 00:00:00 2001 From: Erick Christgau Date: Thu, 2 Jul 2020 10:16:04 -0500 Subject: [PATCH 210/272] Issue 743 - WorldDatabase::GetStartZone now checks isTitanium when creating the SQL --- world/worlddb.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/world/worlddb.cpp b/world/worlddb.cpp index f42c04964..bfdc40fd4 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -405,10 +405,24 @@ bool WorldDatabase::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_pp->x = in_pp->y = in_pp->z = in_pp->heading = in_pp->zone_id = 0; in_pp->binds[0].x = in_pp->binds[0].y = in_pp->binds[0].z = in_pp->binds[0].zoneId = in_pp->binds[0].instance_id = 0; + // see if we have an entry for start_zone. We can support both titanium & SOF+ by having two entries per class/race/deity combo with different zone_ids - std::string query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i " - "AND player_class = %i AND player_deity = %i AND player_race = %i", - in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race); + std::string query; + + if (isTitanium) { + // Titanium sends player choice (starting city) instead of a zone id + query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE player_choice = %i " + "AND player_class = %i AND player_deity = %i AND player_race = %i", + in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race); + LogInfo("Titanium Start zone query: [{}]\n", query.c_str()); + } + else { + query = StringFormat("SELECT x, y, z, heading, start_zone, bind_id, bind_x, bind_y, bind_z FROM start_zones WHERE zone_id = %i " + "AND player_class = %i AND player_deity = %i AND player_race = %i", + in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race); + LogInfo("SoF Start zone query: [{}]\n", query.c_str()); + } + auto results = QueryDatabase(query); if(!results.Success()) { return false; From 36e064a7b32ad0f2c86c946dce62559e777a194c Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 2 Jul 2020 21:31:50 -0500 Subject: [PATCH 211/272] Fix issue where #hotfix doesn't work properly in new Windows installations --- zone/command.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 3cb8b6558..1e1b4475e 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -206,7 +206,7 @@ int command_init(void) command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", 80, command_faction) || command_add("findaliases", "[search criteria]- Searches for available command aliases, by alias or command", 0, command_findaliases) || command_add("findnpctype", "[search criteria] - Search database NPC types", 100, command_findnpctype) || - command_add("findrace", "[search criteria] - Search for a race", 50, command_findrace) || + command_add("findrace", "[search criteria] - Search for a race", 50, command_findrace) || command_add("findspell", "[search criteria] - Search for a spell", 50, command_findspell) || command_add("findzone", "[search criteria] - Search database zones", 100, command_findzone) || command_add("fixmob", "[race|gender|texture|helm|face|hair|haircolor|beard|beardcolor|heritage|tattoo|detail] [next|prev] - Manipulate appearance of your target", 80, command_fixmob) || @@ -2478,8 +2478,8 @@ void command_grid(Client *c, const Seperator *sep) glm::vec4 node_position = glm::vec4(atof(row[0]), atof(row[1]), atof(row[2]), atof(row[3])); std::vector node_loc { - node_position.x, - node_position.y, + node_position.x, + node_position.y, node_position.z }; @@ -4180,7 +4180,7 @@ void command_findzone(Client *c, const Seperator *sep) if (id == 0) { query = fmt::format( "SELECT zoneidnumber, short_name, long_name, version FROM zone WHERE long_name LIKE '%{}%' OR `short_name` LIKE '%{}%'", - EscapeString(sep->arg[1]), + EscapeString(sep->arg[1]), EscapeString(sep->arg[1]) ); } @@ -12822,15 +12822,23 @@ void command_hotfix(Client *c, const Seperator *sep) c->Message(Chat::White, "Creating and applying hotfix"); std::thread t1( [c, hotfix_name]() { + + std::string shared_memory_path; + #ifdef WIN32 - if(hotfix_name.length() > 0) { - if(system(StringFormat("shared_memory -hotfix=%s", hotfix_name.c_str()).c_str())); - } else { - if(system(StringFormat("shared_memory").c_str())); + shared_memory_path = "shared_memory"; + if (file_exists("bin/shared_memory")) { + shared_memory_path = "bin/shared_memory"; + } + + if (hotfix_name.length() > 0) { + if (system(StringFormat("%s -hotfix=%s", shared_memory_path.c_str(), hotfix_name.c_str()).c_str())) {} + } + else { + if (system(StringFormat("%s", shared_memory_path.c_str()).c_str())) {} } #else - - std::string shared_memory_path = "./shared_memory"; + shared_memory_path = "./shared_memory"; if (file_exists("./bin/shared_memory")) { shared_memory_path = "./bin/shared_memory"; } From 6aad062e9a3e751c7430a6134353f53e3c7eb399 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Jul 2020 01:50:29 -0500 Subject: [PATCH 212/272] Add logging [skip ci] --- common/shareddb.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 789b739a8..6507eaebc 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -917,6 +917,7 @@ bool SharedDatabase::LoadItems(const std::string &prefix) { EQ::IPCMutex mutex("items"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("items"); + LogInfo("[Shared Memory] Attempting to load file [{}]", file_name); items_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); items_hash = std::unique_ptr>(new EQ::FixedMemoryHashSet(reinterpret_cast(items_mmf->Get()), items_mmf->Size())); mutex.Unlock(); @@ -1341,6 +1342,7 @@ bool SharedDatabase::LoadNPCFactionLists(const std::string &prefix) { EQ::IPCMutex mutex("faction"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("faction"); + LogInfo("[Shared Memory] Attempting to load file [{}]", file_name); faction_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); faction_hash = std::unique_ptr>(new EQ::FixedMemoryHashSet(reinterpret_cast(faction_mmf->Get()), faction_mmf->Size())); mutex.Unlock(); @@ -1542,6 +1544,7 @@ bool SharedDatabase::LoadSkillCaps(const std::string &prefix) { EQ::IPCMutex mutex("skill_caps"); mutex.Lock(); std::string file_name = Config->SharedMemDir + prefix + std::string("skill_caps"); + LogInfo("[Shared Memory] Attempting to load file [{}]", file_name); skill_caps_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); mutex.Unlock(); } catch(std::exception &ex) { @@ -1700,6 +1703,7 @@ bool SharedDatabase::LoadSpells(const std::string &prefix, int32 *records, const std::string file_name = Config->SharedMemDir + prefix + std::string("spells"); spells_mmf = std::unique_ptr(new EQ::MemoryMappedFile(file_name)); + LogInfo("[Shared Memory] Attempting to load file [{}]", file_name); *records = *reinterpret_cast(spells_mmf->Get()); *sp = reinterpret_cast((char*)spells_mmf->Get() + 4); mutex.Unlock(); From 8e96232690eaca15302be8b75b918b731012c1b5 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Jul 2020 01:58:02 -0500 Subject: [PATCH 213/272] Add explicit file extension to file check [skip ci] --- zone/command.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/command.cpp b/zone/command.cpp index 1e1b4475e..6dd380975 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -12827,7 +12827,7 @@ void command_hotfix(Client *c, const Seperator *sep) #ifdef WIN32 shared_memory_path = "shared_memory"; - if (file_exists("bin/shared_memory")) { + if (file_exists("bin/shared_memory.exe")) { shared_memory_path = "bin/shared_memory"; } From 9e960b90bdea5a16b560d917d679c45556157cf6 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Jul 2020 02:01:35 -0500 Subject: [PATCH 214/272] Adjust path quote [skip ci] --- zone/command.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 6dd380975..58cf8e876 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -12832,10 +12832,10 @@ void command_hotfix(Client *c, const Seperator *sep) } if (hotfix_name.length() > 0) { - if (system(StringFormat("%s -hotfix=%s", shared_memory_path.c_str(), hotfix_name.c_str()).c_str())) {} + if (system(StringFormat("\"%s\" -hotfix=%s", shared_memory_path.c_str(), hotfix_name.c_str()).c_str())) {} } else { - if (system(StringFormat("%s", shared_memory_path.c_str()).c_str())) {} + if (system(StringFormat("\"%s\"", shared_memory_path.c_str()).c_str())) {} } #else shared_memory_path = "./shared_memory"; From 15a70c7aa9e3cb3c1b0ec7cc4cb89c2a0c6e572c Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 4 Jul 2020 02:24:53 -0500 Subject: [PATCH 215/272] Fix for windows hotfix [skip ci] --- zone/command.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/zone/command.cpp b/zone/command.cpp index 58cf8e876..f60490b88 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -12828,15 +12828,19 @@ void command_hotfix(Client *c, const Seperator *sep) #ifdef WIN32 shared_memory_path = "shared_memory"; if (file_exists("bin/shared_memory.exe")) { - shared_memory_path = "bin/shared_memory"; + shared_memory_path = "bin\\shared_memory.exe"; } + std::string hotfix_command; if (hotfix_name.length() > 0) { - if (system(StringFormat("\"%s\" -hotfix=%s", shared_memory_path.c_str(), hotfix_name.c_str()).c_str())) {} + hotfix_command = fmt::format("\"{}\" -hotfix={}", shared_memory_path, hotfix_name); } else { - if (system(StringFormat("\"%s\"", shared_memory_path.c_str()).c_str())) {} + hotfix_command = fmt::format("\"{}\"", shared_memory_path, hotfix_name); } + + LogInfo("Running hotfix command [{}]", hotfix_command); + if (system(hotfix_command.c_str())) {} #else shared_memory_path = "./shared_memory"; if (file_exists("./bin/shared_memory")) { From 4e6c3b524f2df01278c23c2d519b65773d0a6ad9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 01:19:02 -0500 Subject: [PATCH 216/272] Add fix for scenario where a client traveled far distance quickly and mob scanning is too slow; this takes care of all scenarios --- zone/client_process.cpp | 10 +++++----- zone/entity.cpp | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 29a826f0e..ff51fcfb7 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -256,9 +256,9 @@ bool Client::Process() { * Used in aggro checks */ if (mob_close_scan_timer.Check()) { - entity_list.ScanCloseMobs(close_mobs, this); + entity_list.ScanCloseMobs(close_mobs, this, true); } - + bool may_use_attacks = false; /* Things which prevent us from attacking: @@ -757,7 +757,7 @@ void Client::BulkSendInventoryItems() if (ob.tellp() == last_pos) LogInventory("Serialization failed on item slot [{}] during BulkSendInventoryItems. Item skipped", slot_id); - + last_pos = ob.tellp(); } @@ -836,7 +836,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { else { cur_fac_level = GetModCharacterFactionLevel(fac); } - + if (cur_fac_level < ml.faction_required) continue; @@ -1170,7 +1170,7 @@ void Client::OPMoveCoin(const EQApplicationPacket* app) { return; } - + // could just do a range, but this is clearer and explicit if ( diff --git a/zone/entity.cpp b/zone/entity.cpp index 5637777d6..b00735e4a 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2716,18 +2716,22 @@ void EntityList::ScanCloseMobs( } float distance = DistanceSquared(scanning_mob->GetPosition(), mob->GetPosition()); - if (distance <= scan_range) { + if (distance <= scan_range || mob->GetAggroRange() >= scan_range) { close_mobs.insert(std::pair(mob->GetID(), mob)); if (add_self_to_other_lists) { - mob->close_mobs.insert(std::pair(scanning_mob->GetID(), scanning_mob)); - } - } - else if (mob->GetAggroRange() >= scan_range) { - close_mobs.insert(std::pair(mob->GetID(), mob)); + bool has_mob = false; - if (add_self_to_other_lists) { - mob->close_mobs.insert(std::pair(scanning_mob->GetID(), scanning_mob)); + for (auto &cm: mob->close_mobs) { + if (scanning_mob->GetID() == cm.first) { + has_mob = true; + break; + } + } + + if (!has_mob) { + mob->close_mobs.insert(std::pair(scanning_mob->GetID(), scanning_mob)); + } } } } From 331eb51126b6046a9fcc075e84d482c028ab0411 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:06:00 -0500 Subject: [PATCH 217/272] Add connection label to MySQL connects --- common/database.cpp | 6 +++--- common/database.h | 2 +- common/version.h | 2 +- world/main.cpp | 3 ++- zone/main.cpp | 3 ++- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index ff52a196e..dbf4cabea 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -61,15 +61,15 @@ Database::Database(const char* host, const char* user, const char* passwd, const Connect(host, user, passwd, database, port); } -bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port) { +bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port, std::string connection_label) { uint32 errnum= 0; char errbuf[MYSQL_ERRMSG_SIZE]; if (!Open(host, user, passwd, database, port, &errnum, errbuf)) { - LogError("Failed to connect to database: Error: {}", errbuf); + LogError("[MySQL] Connection [{}] Failed to connect to database: Error [{}]", connection_label, errbuf); return false; } else { - LogInfo("Using database [{}] at [{}]:[{}]", database, host,port); + LogInfo("[MySQL] Connection [{}] database [{}] at [{}]:[{}]", connection_label, database, host,port); return true; } } diff --git a/common/database.h b/common/database.h index a7af5fc23..1d55484d5 100644 --- a/common/database.h +++ b/common/database.h @@ -100,7 +100,7 @@ class Database : public DBcore { public: Database(); Database(const char* host, const char* user, const char* passwd, const char* database,uint32 port); - bool Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port); + bool Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port, std::string connection_label = "default"); ~Database(); /* Character Creation */ diff --git a/common/version.h b/common/version.h index c840ebdc5..fb60b794e 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9153 +#define CURRENT_BINARY_DATABASE_VERSION 9154 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9027 diff --git a/world/main.cpp b/world/main.cpp index ad723a212..49e02859f 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -154,7 +154,8 @@ void LoadDatabaseConnections() Config->ContentDbUsername.c_str(), Config->ContentDbPassword.c_str(), Config->ContentDbName.c_str(), - Config->ContentDbPort + Config->ContentDbPort, + "content" )) { LogError("Cannot continue without a content database connection"); std::exit(1); diff --git a/zone/main.cpp b/zone/main.cpp index 3fbb6c8d7..7b5fca736 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -260,7 +260,8 @@ int main(int argc, char** argv) { Config->ContentDbUsername.c_str(), Config->ContentDbPassword.c_str(), Config->ContentDbName.c_str(), - Config->ContentDbPort + Config->ContentDbPort, + "content" )) { LogError("Cannot continue without a content database connection"); return 1; From a54d92d078e6d0946742780f39754ce28bd2c764 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:06:16 -0500 Subject: [PATCH 218/272] Cleanup content flag loading logic --- zone/zone.cpp | 15 +-------------- zone/zone_store.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/zone/zone.cpp b/zone/zone.cpp index f7891a1fc..01850dc93 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1240,20 +1240,7 @@ void Zone::ReloadStaticData() { content_service.SetExpansionContext(); - std::vector set_content_flags; - auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); - set_content_flags.reserve(content_flags.size()); - - for (auto &flags: content_flags) { - set_content_flags.push_back(flags.flag_name); - - LogInfo( - "Enabled content flag [{}]", - flags.flag_name - ); - } - - content_service.SetContentFlags(set_content_flags); + ZoneStore::LoadContentFlags(); LogInfo("Zone Static Data Reloaded"); } diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp index 2401230e7..e06737be2 100644 --- a/zone/zone_store.cpp +++ b/zone/zone_store.cpp @@ -149,15 +149,16 @@ void ZoneStore::LoadContentFlags() std::vector set_content_flags; auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1"); + set_content_flags.reserve(content_flags.size()); for (auto &flags: content_flags) { set_content_flags.push_back(flags.flag_name); - - LogInfo( - "Enabled content flag [{}]", - flags.flag_name - ); } + LogInfo( + "Enabled content flags [{}]", + implode(", ", set_content_flags) + ); + content_service.SetContentFlags(set_content_flags); } From 084e9b7a3511fd8ae665553ff7fd9c231639a0c8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:09:39 -0500 Subject: [PATCH 219/272] Fix command exit codes --- common/cli/eqemu_command_handler.cpp | 8 ++++---- world/world_server_command_handler.cpp | 6 +----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/common/cli/eqemu_command_handler.cpp b/common/cli/eqemu_command_handler.cpp index d803d35d4..3162d400a 100644 --- a/common/cli/eqemu_command_handler.cpp +++ b/common/cli/eqemu_command_handler.cpp @@ -77,7 +77,7 @@ namespace EQEmuCommand { index++; } - if (!arguments_filled || argc == 2) { + if (!arguments_filled || argc == 2 || cmd[{"-h", "--help"}]) { std::string arguments_string; for (auto &arg : arguments) { arguments_string += " " + arg; @@ -101,7 +101,7 @@ namespace EQEmuCommand { std::cout << command_string.str() << std::endl; - exit(1); + exit(0); } } @@ -188,11 +188,11 @@ namespace EQEmuCommand { std::cout << std::endl; - std::exit(1); + std::exit(0); } if (ran_command) { - std::exit(1); + std::exit(0); } } diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index 169c2c0bc..b588577a4 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -223,10 +223,6 @@ namespace WorldserverCommandHandler { { description = "Dumps server database tables"; - if (cmd[{"-h", "--help"}]) { - return; - } - std::vector arguments = {}; std::vector options = { "--all", @@ -245,7 +241,7 @@ namespace WorldserverCommandHandler { }; - if (argc < 3) { + if (argc < 3 || cmd[{"-h", "--help"}]) { EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); return; } From bdf55403cf38d5e2dd035e36e5ddda4b9b154be1 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:10:00 -0500 Subject: [PATCH 220/272] Add manifest criteria --- utils/sql/db_update_manifest.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index c6af34a98..4adc4bca0 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -407,6 +407,7 @@ 9151|2020_03_05_npc_always_aggro.sql|SHOW COLUMNS FROM `npc_types` LIKE 'always_aggro'|empty| 9152|2020_03_09_convert_myisam_to_innodb.sql|SELECT * FROM db_version WHERE version >= 9152|empty| 9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| +9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not From f6b5bbef00d80668f970e0f7287b9d596206eac8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Tue, 7 Jul 2020 02:21:44 -0500 Subject: [PATCH 221/272] Add world api get_database_schema --- world/eqemu_api_world_data_service.cpp | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/world/eqemu_api_world_data_service.cpp b/world/eqemu_api_world_data_service.cpp index 99cbcebe1..10bf6dab0 100644 --- a/world/eqemu_api_world_data_service.cpp +++ b/world/eqemu_api_world_data_service.cpp @@ -23,6 +23,7 @@ #include "eqemu_api_world_data_service.h" #include "zoneserver.h" #include "zonelist.h" +#include "../common/database_schema.h" extern ZSList zoneserver_list; extern ClientList client_list; @@ -60,6 +61,63 @@ void callGetZoneList(Json::Value &response) } } +void callGetDatabaseSchema(Json::Value &response) +{ + Json::Value player_tables_json; + std::vector player_tables = DatabaseSchema::GetPlayerTables(); + for (const auto &table : player_tables) { + player_tables_json.append(table); + } + + Json::Value content_tables_json; + std::vector content_tables = DatabaseSchema::GetContentTables(); + for (const auto &table : content_tables) { + content_tables_json.append(table); + } + + Json::Value server_tables_json; + std::vector server_tables = DatabaseSchema::GetServerTables(); + for (const auto &table : server_tables) { + server_tables_json.append(table); + } + + Json::Value login_tables_json; + std::vector login_tables = DatabaseSchema::GetLoginTables(); + for (const auto &table : login_tables) { + login_tables_json.append(table); + } + + Json::Value state_tables_json; + std::vector state_tables = DatabaseSchema::GetStateTables(); + for (const auto &table : state_tables) { + state_tables_json.append(table); + } + + Json::Value version_tables_json; + std::vector version_tables = DatabaseSchema::GetVersionTables(); + for (const auto &table : version_tables) { + version_tables_json.append(table); + } + + Json::Value character_table_columns_json; + std::map character_table = DatabaseSchema::GetCharacterTables(); + for (const auto &ctc : character_table) { + character_table_columns_json[ctc.first] = ctc.second; + } + + Json::Value schema; + + schema["character_table_columns"] = character_table_columns_json; + schema["content_tables"] = content_tables_json; + schema["login_tables"] = login_tables_json; + schema["player_tables"] = player_tables_json; + schema["server_tables"] = server_tables_json; + schema["state_tables"] = state_tables_json; + schema["version_tables"] = version_tables_json; + + response.append(schema); +} + void callGetClientList(Json::Value &response) { client_list.GetClientList(response); @@ -72,6 +130,9 @@ void EQEmuApiWorldDataService::get(Json::Value &response, const std::vector Date: Sun, 5 Jul 2020 20:31:11 -0400 Subject: [PATCH 222/272] Add hot reload saylinks as well as a rule to determine if you bypass the saylinks. --- common/ruletypes.h | 1 + common/servertalk.h | 1 - zone/worldserver.cpp | 8 +++++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index f9b46cda1..098fbd94f 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -766,6 +766,7 @@ RULE_CATEGORY(HotReload) RULE_BOOL(HotReload, QuestsRepopWithReload, true, "When a hot reload is triggered, the zone will repop") RULE_BOOL(HotReload, QuestsRepopWhenPlayersNotInCombat, true, "When a hot reload is triggered, the zone will repop when no clients are in combat") RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is triggered, quest timers will be reset") +RULE_BOOL(HotReload, QuestsAutoReloadGlobalScripts, false, "When a quest, plugin, or global script changes, auto reload.") RULE_CATEGORY_END() RULE_CATEGORY(Instances) diff --git a/common/servertalk.h b/common/servertalk.h index a487c84ca..a0b51af67 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -27,7 +27,6 @@ #define ServerOP_Who 0x000B // #who #define ServerOP_ZonePlayer 0x000C // #zone, or #summon #define ServerOP_KickPlayer 0x000D // #kick - #define ServerOP_RefreshGuild 0x000E // Notice to all zoneservers to refresh their guild cache for ID# in packet (ServerGuildRefresh_Struct) #define ServerOP_VoiceMacro 0x000F //#define ServerOP_GuildInvite 0x0010 diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index c4a544357..1b07c5567 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -35,6 +35,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "../common/eq_packet_structs.h" #include "../common/misc_functions.h" #include "../common/rulesys.h" +#include "../common/say_link.h" #include "../common/servertalk.h" #include "../common/profanity_manager.h" @@ -2194,9 +2195,14 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) std::string request_zone_short_name = hot_reload_quests->zone_short_name; std::string local_zone_short_name = zone->GetShortName(); + bool can_reload_global_script = (request_zone_short_name == "all" && RuleB(HotReload, QuestsAutoReloadGlobalScripts)); - if (request_zone_short_name == local_zone_short_name || request_zone_short_name == "all"){ + if (request_zone_short_name == local_zone_short_name || can_reload_global_script) { zone->SetQuestHotReloadQueued(true); + } else if (request_zone_short_name == "all") { + std::string reload_quest_saylink = EQ::SayLinkEngine::GenerateQuestSaylink("#reloadquest", false, "Locally"); + std::string reload_world_saylink = EQ::SayLinkEngine::GenerateQuestSaylink("#reloadworld", false, "Globally"); + worldserver.SendEmoteMessage(0, 0, 20, 15, "A quest, plugin, or global script has changed reload quests [%s] [%s].", reload_quest_saylink.c_str(), reload_world_saylink.c_str()); } break; From c8389bc674db575807e1d8bedfd86e7f31dd425f Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 3 Jul 2020 00:54:55 -0400 Subject: [PATCH 223/272] Completely overhaul cross zone and world wide methods in quest API. --- common/servertalk.h | 791 ++++++++++++++++++----- world/console.cpp | 6 +- world/zoneserver.cpp | 86 ++- zone/client.h | 1 + zone/embparser_api.cpp | 1379 ++++++++++++++++++++++++++++++++++------ zone/lua_general.cpp | 369 ++++++++++- zone/questmgr.cpp | 816 ++++++++++++++++++++---- zone/questmgr.h | 88 ++- zone/tasks.cpp | 95 ++- zone/tasks.h | 2 + zone/worldserver.cpp | 991 ++++++++++++++++++++++++----- 11 files changed, 3906 insertions(+), 718 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index a487c84ca..69403ff38 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -188,55 +188,114 @@ #define ServerOP_ReloadRulesWorld 0x4003 #define ServerOP_CameraShake 0x4004 #define ServerOP_QueryServGeneric 0x4005 -#define ServerOP_CZSignalClient 0x4006 -#define ServerOP_CZSignalClientByName 0x4007 -#define ServerOP_CZMessagePlayer 0x4008 -#define ServerOP_ReloadWorld 0x4009 -#define ServerOP_ReloadLogs 0x4010 -#define ServerOP_ReloadPerlExportSettings 0x4011 -#define ServerOP_CZSetEntityVariableByClientName 0x4012 -#define ServerOP_UCSServerStatusRequest 0x4013 -#define ServerOP_UCSServerStatusReply 0x4014 -#define ServerOP_HotReloadQuests 0x4015 -#define ServerOP_CZSignalGroup 0x4016 -#define ServerOP_CZSignalRaid 0x4017 -#define ServerOP_CZSignalGuild 0x4018 -#define ServerOP_CZMessageGroup 0x4019 -#define ServerOP_CZMessageRaid 0x4020 -#define ServerOP_CZMessageGuild 0x4021 -#define ServerOP_CZSetEntityVariableByGroupID 0x4022 -#define ServerOP_CZSetEntityVariableByRaidID 0x4023 -#define ServerOP_CZSetEntityVariableByGuildID 0x4024 -#define ServerOP_CZTaskAssign 0x4025 -#define ServerOP_CZTaskAssignGroup 0x4026 -#define ServerOP_CZTaskAssignRaid 0x4027 -#define ServerOP_CZTaskAssignGuild 0x4028 -#define ServerOP_CZMovePlayer 0x4029 -#define ServerOP_CZMoveGroup 0x4030 -#define ServerOP_CZMoveRaid 0x4031 -#define ServerOP_CZMoveGuild 0x4032 +#define ServerOP_ReloadWorld 0x4006 +#define ServerOP_ReloadLogs 0x4007 +#define ServerOP_ReloadPerlExportSettings 0x4008 +#define ServerOP_UCSServerStatusRequest 0x4009 +#define ServerOP_UCSServerStatusReply 0x4010 +#define ServerOP_HotReloadQuests 0x4011 + +#define ServerOP_CZCastSpellPlayer 0x4500 +#define ServerOP_CZCastSpellGroup 0x4501 +#define ServerOP_CZCastSpellRaid 0x4502 +#define ServerOP_CZCastSpellGuild 0x4503 +#define ServerOP_CZMarqueePlayer 0x4504 +#define ServerOP_CZMarqueeGroup 0x4505 +#define ServerOP_CZMarqueeRaid 0x4506 +#define ServerOP_CZMarqueeGuild 0x4507 +#define ServerOP_CZMessagePlayer 0x4508 +#define ServerOP_CZMessageGroup 0x4509 +#define ServerOP_CZMessageRaid 0x4510 +#define ServerOP_CZMessageGuild 0x4511 +#define ServerOP_CZMovePlayer 0x4512 +#define ServerOP_CZMoveGroup 0x4513 +#define ServerOP_CZMoveRaid 0x4514 +#define ServerOP_CZMoveGuild 0x4515 +#define ServerOP_CZMoveInstancePlayer 0x4516 +#define ServerOP_CZMoveInstanceGroup 0x4517 +#define ServerOP_CZMoveInstanceRaid 0x4518 +#define ServerOP_CZMoveInstanceGuild 0x4519 +#define ServerOP_CZRemoveSpellPlayer 0x4520 +#define ServerOP_CZRemoveSpellGroup 0x4521 +#define ServerOP_CZRemoveSpellRaid 0x4522 +#define ServerOP_CZRemoveSpellGuild 0x4523 +#define ServerOP_CZSetEntityVariableByClientName 0x4524 +#define ServerOP_CZSetEntityVariableByNPCTypeID 0x4525 +#define ServerOP_CZSetEntityVariableByGroupID 0x4526 +#define ServerOP_CZSetEntityVariableByRaidID 0x4527 +#define ServerOP_CZSetEntityVariableByGuildID 0x4528 +#define ServerOP_CZSignalClient 0x4529 +#define ServerOP_CZSignalClientByName 0x4530 +#define ServerOP_CZSignalNPC 0x4531 +#define ServerOP_CZSignalGroup 0x4532 +#define ServerOP_CZSignalRaid 0x4533 +#define ServerOP_CZSignalGuild 0x4534 +#define ServerOP_CZTaskActivityResetPlayer 0x4535 +#define ServerOP_CZTaskActivityResetGroup 0x4536 +#define ServerOP_CZTaskActivityResetRaid 0x4537 +#define ServerOP_CZTaskActivityResetGuild 0x4538 +#define ServerOP_CZTaskActivityUpdatePlayer 0x4539 +#define ServerOP_CZTaskActivityUpdateGroup 0x4540 +#define ServerOP_CZTaskActivityUpdateRaid 0x4541 +#define ServerOP_CZTaskActivityUpdateGuild 0x4542 +#define ServerOP_CZTaskAssignPlayer 0x4543 +#define ServerOP_CZTaskAssignGroup 0x4544 +#define ServerOP_CZTaskAssignRaid 0x4545 +#define ServerOP_CZTaskAssignGuild 0x4546 +#define ServerOP_CZTaskDisablePlayer 0x4547 +#define ServerOP_CZTaskDisableGroup 0x4548 +#define ServerOP_CZTaskDisableRaid 0x4549 +#define ServerOP_CZTaskDisableGuild 0x4550 +#define ServerOP_CZTaskEnablePlayer 0x4551 +#define ServerOP_CZTaskEnableGroup 0x4552 +#define ServerOP_CZTaskEnableRaid 0x4553 +#define ServerOP_CZTaskEnableGuild 0x4554 +#define ServerOP_CZTaskFailPlayer 0x4555 +#define ServerOP_CZTaskFailGroup 0x4556 +#define ServerOP_CZTaskFailRaid 0x4557 +#define ServerOP_CZTaskFailGuild 0x4558 +#define ServerOP_CZTaskRemovePlayer 0x4559 +#define ServerOP_CZTaskRemoveGroup 0x4560 +#define ServerOP_CZTaskRemoveRaid 0x4561 +#define ServerOP_CZTaskRemoveGuild 0x4562 + +#define ServerOP_WWAssignTask 0x4750 +#define ServerOP_WWCastSpell 0x4751 +#define ServerOP_WWCompleteActivity 0x4752 +#define ServerOP_WWDisableTask 0x4753 +#define ServerOP_WWEnableTask 0x4754 +#define ServerOP_WWFailTask 0x4755 +#define ServerOP_WWMarquee 0x4756 +#define ServerOP_WWMessage 0x4757 +#define ServerOP_WWMove 0x4758 +#define ServerOP_WWMoveInstance 0x4759 +#define ServerOP_WWRemoveSpell 0x4760 +#define ServerOP_WWRemoveTask 0x4761 +#define ServerOP_WWResetActivity 0x4762 +#define ServerOP_WWSetEntityVariableClient 0x4763 +#define ServerOP_WWSetEntityVariableNPC 0x4764 +#define ServerOP_WWSignalClient 0x4765 +#define ServerOP_WWSignalNPC 0x4766 +#define ServerOP_WWUpdateActivity 0x4767 /** * QueryServer */ -#define ServerOP_QSPlayerLogTrades 0x5010 -#define ServerOP_QSPlayerLogHandins 0x5011 -#define ServerOP_QSPlayerLogNPCKills 0x5012 -#define ServerOP_QSPlayerLogDeletes 0x5013 -#define ServerOP_QSPlayerLogMoves 0x5014 -#define ServerOP_QSPlayerLogMerchantTransactions 0x5015 -#define ServerOP_QSSendQuery 0x5016 -#define ServerOP_CZSignalNPC 0x5017 -#define ServerOP_CZSetEntityVariableByNPCTypeID 0x5018 -#define ServerOP_WWMarquee 0x5019 -#define ServerOP_QSPlayerDropItem 0x5020 +#define ServerOP_QSPlayerLogTrades 0x5000 +#define ServerOP_QSPlayerLogHandins 0x5001 +#define ServerOP_QSPlayerLogNPCKills 0x5002 +#define ServerOP_QSPlayerLogDeletes 0x5003 +#define ServerOP_QSPlayerLogMoves 0x5004 +#define ServerOP_QSPlayerLogMerchantTransactions 0x5005 +#define ServerOP_QSSendQuery 0x5006 +#define ServerOP_QSPlayerDropItem 0x5007 /* Query Serv Generic Packet Flag/Type Enumeration */ enum { QSG_LFGuild = 0 }; enum { QSG_LFGuild_PlayerMatches = 0, QSG_LFGuild_UpdatePlayerInfo, QSG_LFGuild_RequestPlayerInfo, QSG_LFGuild_UpdateGuildInfo, QSG_LFGuild_GuildMatches, QSG_LFGuild_RequestGuildInfo }; -#define ServerOP_Speech 0x4513 +#define ServerOP_Speech 0x5500 enum { UserToWorldStatusWorldUnavail = 0, @@ -339,7 +398,7 @@ struct ServerZoneIncomingClient_Struct { uint32 accid; int16 admin; uint32 charid; - uint32 lsid; + uint32 lsid; bool tellsoff; char charname[64]; char lskey[30]; @@ -480,34 +539,34 @@ struct ServerKickPlayer_Struct { }; struct ServerLSInfo_Struct { - char name[201]; // name the worldserver wants + char name[201]; // name the worldserver wants char address[250]; // DNS address of the server char account[31]; // account name for the worldserver char password[31]; // password for the name char protocolversion[25]; // Major protocol version number char serverversion[64]; // minor server software version number - uint8 servertype; // 0=world, 1=chat, 2=login, 3=MeshLogin + uint8 servertype; // 0=world, 1=chat, 2=login, 3=MeshLogin }; struct ServerNewLSInfo_Struct { - char server_long_name[201]; // name the worldserver wants - char server_short_name[50]; // shortname the worldserver wants + char server_long_name[201]; // name the worldserver wants + char server_short_name[50]; // shortname the worldserver wants char remote_ip_address[125]; // DNS address of the server char local_ip_address[125]; // DNS address of the server char account_name[31]; // account name for the worldserver char account_password[31]; // password for the name char protocol_version[25]; // Major protocol version number char server_version[64]; // minor server software version number - uint8 server_process_type; // 0=world, 1=chat, 2=login, 3=MeshLogin + uint8 server_process_type; // 0=world, 1=chat, 2=login, 3=MeshLogin }; struct ServerLSAccountUpdate_Struct { // for updating info on login server char worldaccount[31]; // account name for the worldserver char worldpassword[31]; // password for the name - uint32 useraccountid; // player account ID + uint32 useraccountid; // player account ID char useraccount[31]; // player account name char userpassword[51]; // player account password - char user_email[101]; // player account email address + char user_email[101]; // player account email address }; struct ServerLSStatus_Struct { @@ -602,7 +661,7 @@ struct ServerConnectInfo { char address[250]; char local_address[250]; uint16 port; - uint32 process_id; + uint32 process_id; }; struct ServerGMGoto_Struct { @@ -730,7 +789,7 @@ struct UsertoWorldRequest_Struct { struct UsertoWorldResponseLegacy_Struct { uint32 lsaccountid; uint32 worldid; - int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed + int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed uint32 FromID; uint32 ToID; }; @@ -738,10 +797,10 @@ struct UsertoWorldResponseLegacy_Struct { struct UsertoWorldResponse_Struct { uint32 lsaccountid; uint32 worldid; - int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed + int8 response; // -3) World Full, -2) Banned, -1) Suspended, 0) Denied, 1) Allowed uint32 FromID; uint32 ToID; - char login[64]; + char login[64]; }; // generic struct to be used for alot of simple zone->world questions @@ -891,7 +950,7 @@ struct ServerOP_Consent_Struct { uint8 permission; uint32 zone_id; uint16 instance_id; - uint8 consent_type; // 0 = normal, 1 = group, 2 = raid, 3 = guild + uint8 consent_type; // 0 = normal, 1 = group, 2 = raid, 3 = guild uint32 consent_id; }; @@ -1179,64 +1238,6 @@ struct Server_Speech_Struct { char message[0]; }; -struct CZTaskAssign_Struct { - uint16 npc_entity_id; - int character_id; - uint32 task_id; - bool enforce_level_requirement; -}; - -struct CZTaskAssignGroup_Struct { - uint16 npc_entity_id; - int group_id; - uint32 task_id; - bool enforce_level_requirement; -}; - -struct CZTaskAssignRaid_Struct { - uint16 npc_entity_id; - int raid_id; - uint32 task_id; - bool enforce_level_requirement; -}; - -struct CZTaskAssignGuild_Struct { - uint16 npc_entity_id; - int guild_id; - uint32 task_id; - bool enforce_level_requirement; -}; - -struct CZClientSignal_Struct { - int charid; - uint32 data; -}; - -struct CZGroupSignal_Struct { - int group_id; - uint32 data; -}; - -struct CZRaidSignal_Struct { - int raid_id; - uint32 data; -}; - -struct CZGuildSignal_Struct { - int guild_id; - uint32 data; -}; - -struct CZNPCSignal_Struct { - uint32 npctype_id; - uint32 data; -}; - -struct CZClientSignalByName_Struct { - char Name[64]; - uint32 data; -}; - struct QSTradeItems_Struct { uint32 from_id; uint16 from_slot; @@ -1252,13 +1253,13 @@ struct QSTradeItems_Struct { }; struct QSPlayerLogTrade_Struct { - uint32 char1_id; + uint32 char1_id; MoneyUpdate_Struct char1_money; - uint16 char1_count; - uint32 char2_id; + uint16 char1_count; + uint32 char2_id; MoneyUpdate_Struct char2_money; - uint16 char2_count; - uint16 _detail_count; + uint16 char2_count; + uint16 _detail_count; QSTradeItems_Struct items[0]; }; @@ -1296,14 +1297,14 @@ struct QSHandinItems_Struct { }; struct QSPlayerLogHandin_Struct { - uint32 quest_id; - uint32 char_id; + uint32 quest_id; + uint32 char_id; MoneyUpdate_Struct char_money; - uint16 char_count; - uint32 npc_id; + uint16 char_count; + uint32 npc_id; MoneyUpdate_Struct npc_money; - uint16 npc_count; - uint16 _detail_count; + uint16 npc_count; + uint16 _detail_count; QSHandinItems_Struct items[0]; }; @@ -1334,9 +1335,9 @@ struct QSDeleteItems_Struct { }; struct QSPlayerLogDelete_Struct { - uint32 char_id; - uint16 stack_size; // '0' indicates full stack or non-stackable item move - uint16 char_count; + uint32 char_id; + uint16 stack_size; // '0' indicates full stack or non-stackable item move + uint16 char_count; QSDeleteItems_Struct items[0]; }; @@ -1374,13 +1375,13 @@ struct QSTransactionItems_Struct { }; struct QSMerchantLogTransaction_Struct { - uint32 zone_id; - uint32 merchant_id; + uint32 zone_id; + uint32 merchant_id; MoneyUpdate_Struct merchant_money; - uint16 merchant_count; - uint32 char_id; + uint16 merchant_count; + uint32 char_id; MoneyUpdate_Struct char_money; - uint16 char_count; + uint16 char_count; QSTransactionItems_Struct items[0]; }; @@ -1388,28 +1389,78 @@ struct QSGeneralQuery_Struct { char QueryString[0]; }; -struct CZMessagePlayer_Struct { - uint32 Type; - char CharName[64]; - char Message[512]; +struct CZCastSpellPlayer_Struct { + int character_id; + uint32 spell_id; }; -struct CZMessageGroup_Struct { - uint32 Type; - int GroupID; - char Message[512]; +struct CZCastSpellGroup_Struct { + int group_id; + uint32 spell_id; }; -struct CZMessageRaid_Struct { - uint32 Type; - int RaidID; - char Message[512]; +struct CZCastSpellRaid_Struct { + int raid_id; + uint32 spell_id; }; -struct CZMessageGuild_Struct { - uint32 Type; - int GuildID; - char Message[512]; +struct CZCastSpellGuild_Struct { + int guild_id; + uint32 spell_id; +}; + +struct CZClientSignal_Struct { + int character_id; + uint32 signal; +}; + +struct CZGroupSignal_Struct { + int group_id; + uint32 signal; +}; + +struct CZRaidSignal_Struct { + int raid_id; + uint32 signal; +}; + +struct CZGuildSignal_Struct { + int guild_id; + uint32 signal; +}; + +struct CZNPCSignal_Struct { + uint32 npctype_id; + uint32 signal; +}; + +struct CZClientSignalByName_Struct { + char character_name[64]; + uint32 signal; +}; + +struct CZCompleteActivityPlayer_Struct { + int character_id; + uint32 task_id; + int activity_id; +}; + +struct CZCompleteActivityGroup_Struct { + int group_id; + uint32 task_id; + int activity_id; +}; + +struct CZCompleteActivityRaid_Struct { + int raid_id; + uint32 task_id; + int activity_id; +}; + +struct CZCompleteActivityGuild_Struct { + int guild_id; + uint32 task_id; + int activity_id; }; struct CZMovePlayer_Struct { @@ -1417,6 +1468,70 @@ struct CZMovePlayer_Struct { char zone_short_name[32]; }; +struct CZMarqueePlayer_Struct { + int character_id; + uint32 type; + uint32 priority; + uint32 fade_in; + uint32 fade_out; + uint32 duration; + char message[512]; +}; + +struct CZMarqueeGroup_Struct { + int group_id; + uint32 type; + uint32 priority; + uint32 fade_in; + uint32 fade_out; + uint32 duration; + char message[512]; +}; + +struct CZMarqueeRaid_Struct { + int raid_id; + uint32 type; + uint32 priority; + uint32 fade_in; + uint32 fade_out; + uint32 duration; + char message[512]; +}; + +struct CZMarqueeGuild_Struct { + int guild_id; + uint32 type; + uint32 priority; + uint32 fade_in; + uint32 fade_out; + uint32 duration; + char message[512]; +}; + +struct CZMessagePlayer_Struct { + uint32 type; + char character_name[64]; + char message[512]; +}; + +struct CZMessageGroup_Struct { + uint32 type; + int group_id; + char message[512]; +}; + +struct CZMessageRaid_Struct { + uint32 type; + int raid_id; + char message[512]; +}; + +struct CZMessageGuild_Struct { + uint32 type; + int guild_id; + char message[512]; +}; + struct CZMoveGroup_Struct { int group_id; char zone_short_name[32]; @@ -1432,43 +1547,393 @@ struct CZMoveGuild_Struct { char zone_short_name[32]; }; -struct WWMarquee_Struct { - uint32 Type; - uint32 Priority; - uint32 FadeIn; - uint32 FadeOut; - uint32 Duration; - char Message[512]; +struct CZMoveInstancePlayer_Struct { + int character_id; + uint16 instance_id; +}; + +struct CZMoveInstanceGroup_Struct { + int group_id; + uint16 instance_id; +}; + +struct CZMoveInstanceRaid_Struct { + int raid_id; + uint16 instance_id; +}; + +struct CZMoveInstanceGuild_Struct { + int guild_id; + uint16 instance_id; +}; + +struct CZRemoveSpellPlayer_Struct { + int character_id; + uint32 spell_id; +}; + +struct CZRemoveSpellGroup_Struct { + int group_id; + uint32 spell_id; +}; + +struct CZRemoveSpellRaid_Struct { + int raid_id; + uint32 spell_id; +}; + +struct CZRemoveSpellGuild_Struct { + int guild_id; + uint32 spell_id; +}; + +struct CZRemoveTaskPlayer_Struct { + int character_id; + uint32 task_id; +}; + +struct CZRemoveTaskGroup_Struct { + int group_id; + uint32 task_id; +}; + +struct CZRemoveTaskRaid_Struct { + int raid_id; + uint32 task_id; +}; + +struct CZRemoveTaskGuild_Struct { + int guild_id; + uint32 task_id; +}; + +struct CZResetActivityPlayer_Struct { + int character_id; + uint32 task_id; + int activity_id; +}; + +struct CZResetActivityGroup_Struct { + int group_id; + uint32 task_id; + int activity_id; +}; + +struct CZResetActivityRaid_Struct { + int raid_id; + uint32 task_id; + int activity_id; +}; + +struct CZResetActivityGuild_Struct { + int guild_id; + uint32 task_id; + int activity_id; }; struct CZSetEntVarByNPCTypeID_Struct { uint32 npctype_id; - char id[256]; - char m_var[256]; + char variable_name[256]; + char variable_value[256]; }; struct CZSetEntVarByClientName_Struct { - char CharName[64]; - char id[256]; - char m_var[256]; + char character_name[64]; + char variable_name[256]; + char variable_value[256]; }; struct CZSetEntVarByGroupID_Struct { int group_id; - char id[256]; - char m_var[256]; + char variable_name[256]; + char variable_value[256]; }; struct CZSetEntVarByRaidID_Struct { int raid_id; - char id[256]; - char m_var[256]; + char variable_name[256]; + char variable_value[256]; }; struct CZSetEntVarByGuildID_Struct { int guild_id; - char id[256]; - char m_var[256]; + char variable_name[256]; + char variable_value[256]; +}; + +struct CZTaskActivityResetPlayer_Struct { + int character_id; + uint32 task_id; + int activity_id; +}; + +struct CZTaskActivityResetGroup_Struct { + int group_id; + uint32 task_id; + int activity_id; +}; + +struct CZTaskActivityResetRaid_Struct { + int raid_id; + uint32 task_id; + int activity_id; +}; + +struct CZTaskActivityResetGuild_Struct { + int guild_id; + uint32 task_id; + int activity_id; +}; + +struct CZTaskActivityUpdatePlayer_Struct { + int character_id; + uint32 task_id; + int activity_id; + int activity_count; +}; + +struct CZTaskActivityUpdateGroup_Struct { + int group_id; + uint32 task_id; + int activity_id; + int activity_count; +}; + +struct CZTaskActivityUpdateRaid_Struct { + int raid_id; + uint32 task_id; + int activity_id; + int activity_count; +}; + +struct CZTaskActivityUpdateGuild_Struct { + int guild_id; + uint32 task_id; + int activity_id; + int activity_count; +}; + +struct CZTaskAssignPlayer_Struct { + uint16 npc_entity_id; + int character_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignGroup_Struct { + uint16 npc_entity_id; + int group_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignRaid_Struct { + uint16 npc_entity_id; + int raid_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskAssignGuild_Struct { + uint16 npc_entity_id; + int guild_id; + uint32 task_id; + bool enforce_level_requirement; +}; + +struct CZTaskDisablePlayer_Struct { + int character_id; + uint32 task_id; +}; + +struct CZTaskDisableGroup_Struct { + int group_id; + uint32 task_id; +}; + +struct CZTaskDisableRaid_Struct { + int raid_id; + uint32 task_id; +}; + +struct CZTaskDisableGuild_Struct { + int guild_id; + uint32 task_id; +}; + +struct CZTaskEnablePlayer_Struct { + int character_id; + uint32 task_id; +}; + +struct CZTaskEnableGroup_Struct { + int group_id; + uint32 task_id; +}; + +struct CZTaskEnableRaid_Struct { + int raid_id; + uint32 task_id; +}; + +struct CZTaskEnableGuild_Struct { + int guild_id; + uint32 task_id; +}; + +struct CZTaskFailPlayer_Struct { + int character_id; + uint32 task_id; +}; + +struct CZTaskFailGroup_Struct { + int group_id; + uint32 task_id; +}; + +struct CZTaskFailRaid_Struct { + int raid_id; + uint32 task_id; +}; + +struct CZTaskFailGuild_Struct { + int guild_id; + uint32 task_id; +}; + +struct CZTaskRemovePlayer_Struct { + uint16 npc_entity_id; + int character_id; + uint32 task_id; +}; + +struct CZTaskRemoveGroup_Struct { + uint16 npc_entity_id; + int group_id; + uint32 task_id; +}; + +struct CZTaskRemoveRaid_Struct { + uint16 npc_entity_id; + int raid_id; + uint32 task_id; +}; + +struct CZTaskRemoveGuild_Struct { + uint16 npc_entity_id; + int guild_id; + uint32 task_id; +}; + +struct WWAssignTask_Struct { + uint16 npc_entity_id; + uint32 task_id; + bool enforce_level_requirement; + uint8 min_status; + uint8 max_status; +}; + +struct WWCastSpell_Struct { + uint32 spell_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWDisableTask_Struct { + uint32 task_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWEnableTask_Struct { + uint32 task_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWFailTask_Struct { + uint32 task_id; + uint8 min_status; + uint8 max_status; +}; +struct WWMarquee_Struct { + uint32 type; + uint32 priority; + uint32 fade_in; + uint32 fade_out; + uint32 duration; + char message[512]; + uint8 min_status; + uint8 max_status; +}; + +struct WWMessage_Struct { + uint32 type; + char message[512]; + uint8 min_status; + uint8 max_status; +}; + +struct WWMove_Struct { + char zone_short_name[32]; + uint8 min_status; + uint8 max_status; +}; + +struct WWMoveInstance_Struct { + uint16 instance_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWRemoveSpell_Struct { + uint32 spell_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWRemoveTask_Struct { + uint32 task_id; + uint8 min_status; + uint8 max_status; + +}; + +struct WWResetActivity_Struct { + uint32 task_id; + int activity_id; + uint8 min_status; + uint8 max_status; +}; + +struct WWSetEntVarClient_Struct { + char variable_name[256]; + char variable_value[256]; + uint8 min_status; + uint8 max_status; +}; + +struct WWSetEntVarNPC_Struct { + char variable_name[256]; + char variable_value[256]; +}; + +struct WWSignalClient_Struct { + uint32 signal; + uint8 min_status; + uint8 max_status; +}; + +struct WWSignalNPC_Struct { + uint32 signal; +}; + +struct WWUpdateActivity_Struct { + uint32 task_id; + int activity_id; + int activity_count; + uint8 min_status; + uint8 max_status; }; struct ReloadWorld_Struct { diff --git a/world/console.cpp b/world/console.cpp index b3f36c923..26132efea 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -830,8 +830,8 @@ void ConsoleSignalCharByName( sizeof(CZClientSignalByName_Struct) + message_len ); CZClientSignalByName_Struct *CZSC = (CZClientSignalByName_Struct *) pack->pBuffer; - strn0cpy(CZSC->Name, (char *) args[0].c_str(), 64); - CZSC->data = atoi(args[1].c_str()); + strn0cpy(CZSC->character_name, (char *) args[0].c_str(), 64); + CZSC->signal = atoi(args[1].c_str()); zoneserver_list.SendPacket(pack); safe_delete(pack); } @@ -936,4 +936,4 @@ void RegisterConsoleFunctions(std::unique_ptr& console) console->RegisterCall("zonestatus", 50, "zonestatus", std::bind(ConsoleZoneStatus, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));console->RegisterCall("ping", 50, "ping", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("quit", 50, "quit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("exit", 50, "exit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); -} \ No newline at end of file +} diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp index 74a17d43a..011258765 100644 --- a/world/zoneserver.cpp +++ b/world/zoneserver.cpp @@ -1236,30 +1236,86 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) { QSLink.SendPacket(pack); break; } - case ServerOP_CZSignalClientByName: + case ServerOP_CZCastSpellPlayer: + case ServerOP_CZCastSpellGroup: + case ServerOP_CZCastSpellRaid: + case ServerOP_CZCastSpellGuild: + case ServerOP_CZMarqueePlayer: + case ServerOP_CZMarqueeGroup: + case ServerOP_CZMarqueeRaid: + case ServerOP_CZMarqueeGuild: case ServerOP_CZMessagePlayer: case ServerOP_CZMessageGroup: case ServerOP_CZMessageRaid: case ServerOP_CZMessageGuild: - case ServerOP_CZSignalNPC: - case ServerOP_CZSetEntityVariableByNPCTypeID: - case ServerOP_CZSignalClient: - case ServerOP_CZSignalGroup: - case ServerOP_CZSignalRaid: - case ServerOP_CZSignalGuild: - case ServerOP_CZSetEntityVariableByClientName: - case ServerOP_CZSetEntityVariableByGroupID: - case ServerOP_CZSetEntityVariableByRaidID: - case ServerOP_CZSetEntityVariableByGuildID: - case ServerOP_CZTaskAssign: - case ServerOP_CZTaskAssignGroup: - case ServerOP_CZTaskAssignRaid: - case ServerOP_CZTaskAssignGuild: case ServerOP_CZMovePlayer: case ServerOP_CZMoveGroup: case ServerOP_CZMoveRaid: case ServerOP_CZMoveGuild: + case ServerOP_CZMoveInstancePlayer: + case ServerOP_CZMoveInstanceGroup: + case ServerOP_CZMoveInstanceRaid: + case ServerOP_CZMoveInstanceGuild: + case ServerOP_CZRemoveSpellPlayer: + case ServerOP_CZRemoveSpellGroup: + case ServerOP_CZRemoveSpellRaid: + case ServerOP_CZRemoveSpellGuild: + case ServerOP_CZSetEntityVariableByClientName: + case ServerOP_CZSetEntityVariableByNPCTypeID: + case ServerOP_CZSetEntityVariableByGroupID: + case ServerOP_CZSetEntityVariableByRaidID: + case ServerOP_CZSetEntityVariableByGuildID: + case ServerOP_CZSignalNPC: + case ServerOP_CZSignalClient: + case ServerOP_CZSignalClientByName: + case ServerOP_CZSignalGroup: + case ServerOP_CZSignalRaid: + case ServerOP_CZSignalGuild: + case ServerOP_CZTaskActivityResetPlayer: + case ServerOP_CZTaskActivityResetGroup: + case ServerOP_CZTaskActivityResetRaid: + case ServerOP_CZTaskActivityResetGuild: + case ServerOP_CZTaskActivityUpdatePlayer: + case ServerOP_CZTaskActivityUpdateGroup: + case ServerOP_CZTaskActivityUpdateRaid: + case ServerOP_CZTaskActivityUpdateGuild: + case ServerOP_CZTaskAssignPlayer: + case ServerOP_CZTaskAssignGroup: + case ServerOP_CZTaskAssignRaid: + case ServerOP_CZTaskAssignGuild: + case ServerOP_CZTaskDisablePlayer: + case ServerOP_CZTaskDisableGroup: + case ServerOP_CZTaskDisableRaid: + case ServerOP_CZTaskDisableGuild: + case ServerOP_CZTaskEnablePlayer: + case ServerOP_CZTaskEnableGroup: + case ServerOP_CZTaskEnableRaid: + case ServerOP_CZTaskEnableGuild: + case ServerOP_CZTaskFailPlayer: + case ServerOP_CZTaskFailGroup: + case ServerOP_CZTaskFailRaid: + case ServerOP_CZTaskFailGuild: + case ServerOP_CZTaskRemovePlayer: + case ServerOP_CZTaskRemoveGroup: + case ServerOP_CZTaskRemoveRaid: + case ServerOP_CZTaskRemoveGuild: + case ServerOP_WWAssignTask: + case ServerOP_WWCastSpell: + case ServerOP_WWDisableTask: + case ServerOP_WWEnableTask: + case ServerOP_WWFailTask: case ServerOP_WWMarquee: + case ServerOP_WWMessage: + case ServerOP_WWMove: + case ServerOP_WWMoveInstance: + case ServerOP_WWRemoveSpell: + case ServerOP_WWRemoveTask: + case ServerOP_WWResetActivity: + case ServerOP_WWSetEntityVariableClient: + case ServerOP_WWSetEntityVariableNPC: + case ServerOP_WWSignalClient: + case ServerOP_WWSignalNPC: + case ServerOP_WWUpdateActivity: case ServerOP_DepopAllPlayersCorpses: case ServerOP_DepopPlayerCorpse: case ServerOP_ReloadTitles: diff --git a/zone/client.h b/zone/client.h index 76c02b517..dc5064f6b 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1012,6 +1012,7 @@ public: inline bool IsTaskActivityActive(int TaskID, int ActivityID) { return (taskstate ? taskstate->IsTaskActivityActive(TaskID, ActivityID) : false); } inline ActivityState GetTaskActivityState(TaskType type, int index, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityState(type, index, ActivityID) : ActivityHidden); } inline void UpdateTaskActivity(int TaskID, int ActivityID, int Count, bool ignore_quest_update = false) { if (taskstate) taskstate->UpdateTaskActivity(this, TaskID, ActivityID, Count, ignore_quest_update); } + inline void RemoveTaskByTaskID(uint32 task_id) { if (taskstate) taskstate->RemoveTaskByTaskID(this, task_id); } inline void ResetTaskActivity(int TaskID, int ActivityID) { if(taskstate) taskstate->ResetTaskActivity(this, TaskID, ActivityID); } inline void UpdateTasksOnKill(int NPCTypeID) { if(taskstate) taskstate->UpdateTasksOnKill(this, NPCTypeID); } inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); } diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 338e5a1a1..ae5a79f10 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3753,8 +3753,7 @@ XS(XS__crosszoneassigntaskbycharid) { if (items == 3) { enforce_level_requirement = (bool) SvTRUE(ST(2)); - } - + } quest_manager.CrossZoneAssignTaskByCharID(character_id, task_id, enforce_level_requirement); } @@ -3774,7 +3773,6 @@ XS(XS__crosszoneassigntaskbygroupid) { if (items == 3) { enforce_level_requirement = (bool) SvTRUE(ST(2)); } - quest_manager.CrossZoneAssignTaskByGroupID(group_id, task_id, enforce_level_requirement); } XSRETURN_EMPTY; @@ -3793,7 +3791,6 @@ XS(XS__crosszoneassigntaskbyraidid) { if (items == 3) { enforce_level_requirement = (bool) SvTRUE(ST(2)); } - quest_manager.CrossZoneAssignTaskByRaidID(raid_id, task_id, enforce_level_requirement); } XSRETURN_EMPTY; @@ -3817,109 +3814,310 @@ XS(XS__crosszoneassigntaskbyguildid) { XSRETURN_EMPTY; } -XS(XS__crosszonesignalclientbycharid); -XS(XS__crosszonesignalclientbycharid) { +XS(XS__crosszonecastspellbycharid); +XS(XS__crosszonecastspellbycharid) { dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbycharid(int character_id, int value)"); - - if (items == 2) { - int char_id = (int) SvIV(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalPlayerByCharID(char_id, int_value); - } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbycharid(int character_id, int value)"); + Perl_croak(aTHX_ "Usage: quest::crosszonecastspellbycharid(int character_id, uint32 spell_id)"); + { + int character_id = (int) SvIV(ST(0)); + uint32 spell_id = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneCastSpellByCharID(character_id, spell_id); } - - XSRETURN_EMPTY; + XSRETURN_EMPTY; } -XS(XS__crosszonesignalclientbygroupid); -XS(XS__crosszonesignalclientbygroupid) { +XS(XS__crosszonecastspellbygroupid); +XS(XS__crosszonecastspellbygroupid) { dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); - - if (items == 2) { + Perl_croak(aTHX_ "Usage: quest::crosszonecastspellbygroupid(int group_id, uint32 spell_id)"); + { int group_id = (int) SvIV(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalPlayerByGroupID(group_id, int_value); - } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, int value)"); + uint32 spell_id = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneCastSpellByGroupID(group_id, spell_id); } - - XSRETURN_EMPTY; + XSRETURN_EMPTY; } -XS(XS__crosszonesignalclientbyraidid); -XS(XS__crosszonesignalclientbyraidid) { +XS(XS__crosszonecastspellbyraidid); +XS(XS__crosszonecastspellbyraidid) { dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); - - if (items == 2) { + Perl_croak(aTHX_ "Usage: quest::crosszonecastspellbyraidid(int raid_id, uint32 spell_id)"); + { int raid_id = (int) SvIV(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, int_value); - } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, int value)"); + uint32 spell_id = (uint32) SvIV(ST(1)); + quest_manager.CrossZoneCastSpellByRaidID(raid_id, spell_id); } - - XSRETURN_EMPTY; + XSRETURN_EMPTY; } -XS(XS__crosszonesignalclientbyguildid); -XS(XS__crosszonesignalclientbyguildid) { +XS(XS__crosszonecastspellbyguildid); +XS(XS__crosszonecastspellbyguildid) { dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); - - if (items == 2) { + Perl_croak(aTHX_ "Usage: quest::crosszonecastspellbyguildid(int guild_id, uint32 spell_id)"); + { int guild_id = (int) SvIV(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, int_value); - } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, int value)"); + uint32 spell_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneCastSpellByGuildID(guild_id, spell_id); } - - XSRETURN_EMPTY; + XSRETURN_EMPTY; } -XS(XS__crosszonesignalclientbyname); -XS(XS__crosszonesignalclientbyname) { +XS(XS__crosszonedisabletaskbycharid); +XS(XS__crosszonedisabletaskbycharid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonedisabletaskbycharid(int character_id, uint32 task_id)"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneDisableTaskByCharID(char_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonedisabletaskbygroupid); +XS(XS__crosszonedisabletaskbygroupid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonedisabletaskbygroupid(int group_id, uint32 task_id)"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneDisableTaskByGroupID(group_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonedisabletaskbyraidid); +XS(XS__crosszonedisabletaskbyraidid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonedisabletaskbyraidid(int raid_id, uint32 task_id)"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneDisableTaskByRaidID(raid_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonedisabletaskbyguildid); +XS(XS__crosszonedisabletaskbyguildid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonedisabletaskbyguildid(int guild_id, uint32 task_id)"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneDisableTaskByGuildID(guild_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneenabletaskbycharid); +XS(XS__crosszoneenabletaskbycharid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneenabletaskbycharid(int character_id, uint32 task_id)"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneEnableTaskByCharID(char_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneenabletaskbygroupid); +XS(XS__crosszoneenabletaskbygroupid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneenabletaskbygroupid(int group_id, uint32 task_id)"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneEnableTaskByGroupID(group_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneenabletaskbyraidid); +XS(XS__crosszoneenabletaskbyraidid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneenabletaskbyraidid(int raid_id, uint32 task_id)"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneEnableTaskByRaidID(raid_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneenabletaskbyguildid); +XS(XS__crosszoneenabletaskbyguildid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneenabletaskbyguildid(int guild_id, uint32 task_id)"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneEnableTaskByGuildID(guild_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonefailtaskbycharid); +XS(XS__crosszonefailtaskbycharid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonefailtaskbycharid(int character_id, uint32 task_id)"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneFailTaskByCharID(char_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonefailtaskbygroupid); +XS(XS__crosszonefailtaskbygroupid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonefailtaskbygroupid(int group_id, uint32 task_id)"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneFailTaskByGroupID(group_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonefailtaskbyraidid); +XS(XS__crosszonefailtaskbyraidid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonefailtaskbyraidid(int raid_id, uint32 task_id)"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneFailTaskByRaidID(raid_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonefailtaskbyguildid); +XS(XS__crosszonefailtaskbyguildid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonefailtaskbyguildid(int guild_id, uint32 task_id)"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneFailTaskByGuildID(guild_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonemarqueebycharid); +XS(XS__crosszonemarqueebycharid) { dXSARGS; - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyname(string name, int value)"); + if (items != 7) + Perl_croak(aTHX_ "Usage: quest::crosszonemarqueebycharid(int character_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message)"); - if (items == 2) { - char *name = (char *) SvPV_nolen(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalPlayerByName(name, int_value); - } else { - Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyname(string name, int value)"); + if (items == 7) { + int character_id = (int) SvIV(ST(0)); + int type = (int) SvIV(ST(1)); + int priority = (int) SvIV(ST(2)); + int fade_in = (int) SvIV(ST(3)); + int fade_out = (int) SvIV(ST(4)); + int duration = (int) SvIV(ST(5)); + char *message = (char *) SvPV_nolen(ST(6)); + quest_manager.CrossZoneMarqueeByCharID(character_id, type, priority, fade_in, fade_out, duration, message); } XSRETURN_EMPTY; } +XS(XS__crosszonemarqueebygroupid); +XS(XS__crosszonemarqueebygroupid) { + dXSARGS; + + if (items != 7) + Perl_croak(aTHX_ "Usage: quest::crosszonemarqueebygroupid(int group_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message)"); + + if (items == 7) { + int group_id = (int) SvIV(ST(0)); + int type = (int) SvIV(ST(1)); + int priority = (int) SvIV(ST(2)); + int fade_in = (int) SvIV(ST(3)); + int fade_out = (int) SvIV(ST(4)); + int duration = (int) SvIV(ST(5)); + char *message = (char *) SvPV_nolen(ST(6)); + quest_manager.CrossZoneMarqueeByGroupID(group_id, type, priority, fade_in, fade_out, duration, message); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemarqueebyraidid); +XS(XS__crosszonemarqueebyraidid) { + dXSARGS; + + if (items != 7) + Perl_croak(aTHX_ "Usage: quest::crosszonemarqueebyraidid(int raid_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message)"); + + if (items == 7) { + int raid_id = (int) SvIV(ST(0)); + int type = (int) SvIV(ST(1)); + int priority = (int) SvIV(ST(2)); + int fade_in = (int) SvIV(ST(3)); + int fade_out = (int) SvIV(ST(4)); + int duration = (int) SvIV(ST(5)); + char *message = (char *) SvPV_nolen(ST(6)); + quest_manager.CrossZoneMarqueeByRaidID(raid_id, type, priority, fade_in, fade_out, duration, message); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemarqueebyguildid); +XS(XS__crosszonemarqueebyguildid) { + dXSARGS; + + if (items != 7) + Perl_croak(aTHX_ "Usage: quest::crosszonemarqueebyguildid(int guild_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message)"); + + if (items == 7) { + int guild_id = (int) SvIV(ST(0)); + int type = (int) SvIV(ST(1)); + int priority = (int) SvIV(ST(2)); + int fade_in = (int) SvIV(ST(3)); + int fade_out = (int) SvIV(ST(4)); + int duration = (int) SvIV(ST(5)); + char *message = (char *) SvPV_nolen(ST(6)); + quest_manager.CrossZoneMarqueeByGuildID(guild_id, type, priority, fade_in, fade_out, duration, message); + } + + XSRETURN_EMPTY; +} XS(XS__crosszonemessageplayerbyname); XS(XS__crosszonemessageplayerbyname) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyname(int channel_id, string name, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyname(uint32 type, string name, string message)"); if (items == 3) { - uint32 channel_id = (uint32) SvIV(ST(0)); - char *name = (char *) SvPV_nolen(ST(1)); - char *message = (char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneMessagePlayerByName(channel_id, name, message); + uint32 type = (uint32) SvUV(ST(0)); + char *name = (char *) SvPV_nolen(ST(1)); + char *message = (char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByName(type, name, message); } XSRETURN_EMPTY; @@ -3930,10 +4128,10 @@ XS(XS__crosszonemessageplayerbygroupid) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbygroupid(int type, int group_id, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbygroupid(uint32 type, int group_id, string message)"); if (items == 3) { - uint32 type = (uint32) SvIV(ST(0)); + uint32 type = (uint32) SvUV(ST(0)); int group_id = (int) SvIV(ST(1)); char *message = (char *) SvPV_nolen(ST(2)); quest_manager.CrossZoneMessagePlayerByGroupID(type, group_id, message); @@ -3947,10 +4145,10 @@ XS(XS__crosszonemessageplayerbyraidid) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyraidid(int type, int raid_id, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyraidid(uint32 type, int raid_id, string message)"); if (items == 3) { - uint32 type = (uint32) SvIV(ST(0)); + uint32 type = (uint32) SvUV(ST(0)); int raid_id = (int) SvIV(ST(1)); char *message = (char *) SvPV_nolen(ST(2)); quest_manager.CrossZoneMessagePlayerByRaidID(type, raid_id, message); @@ -3964,10 +4162,10 @@ XS(XS__crosszonemessageplayerbyguildid) { dXSARGS; if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(int type, int guild_id, string message)"); + Perl_croak(aTHX_ "Usage: quest::crosszonemessageplayerbyguildid(uint32 type, int guild_id, string message)"); if (items == 3) { - uint32 type = (uint32) SvIV(ST(0)); + uint32 type = (uint32) SvUV(ST(0)); int guild_id = (int) SvIV(ST(1)); char *message = (char *) SvPV_nolen(ST(2)); quest_manager.CrossZoneMessagePlayerByGuildID(type, guild_id, message); @@ -4040,6 +4238,866 @@ XS(XS__crosszonemoveplayerbyguildid) { XSRETURN_EMPTY; } +XS(XS__crosszonemoveinstancebycharid); +XS(XS__crosszonemoveinstancebycharid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveinstancebycharid(int character_id, uint16 instance_id)"); + + if (items == 2) { + int character_id = (int) SvIV(ST(0)); + uint16 instance_id = (uint16) SvUV(ST(1)); + quest_manager.CrossZoneMoveInstanceByCharID(character_id, instance_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveinstancebygroupid); +XS(XS__crosszonemoveinstancebygroupid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveinstancebygroupid(int group_id, uint16 instance_id)"); + + if (items == 2) { + int group_id = (int) SvIV(ST(0)); + uint16 instance_id = (uint16) SvUV(ST(1)); + quest_manager.CrossZoneMoveInstanceByGroupID(group_id, instance_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveinstancebyraidid); +XS(XS__crosszonemoveinstancebyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveinstancebyraidid(int raid_id, uint16 instance_id)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + uint16 instance_id = (uint16) SvUV(ST(1)); + quest_manager.CrossZoneMoveInstanceByRaidID(raid_id, instance_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonemoveinstancebyguildid); +XS(XS__crosszonemoveinstancebyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonemoveinstancebyguildid(int guild_id, uint16 instance_id)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + uint16 instance_id = (uint16) SvUV(ST(1)); + quest_manager.CrossZoneMoveInstanceByGuildID(guild_id, instance_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovespellbycharid); +XS(XS__crosszoneremovespellbycharid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovespellbycharid(int character_id, uint32 spell_id)"); + + if (items == 2) { + int character_id = (int) SvIV(ST(0)); + uint32 spell_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveSpellByCharID(character_id, spell_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovespellbygroupid); +XS(XS__crosszoneremovespellbygroupid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovespellbygroupid(int group_id, uint32 spell_id)"); + + if (items == 2) { + int group_id = (int) SvIV(ST(0)); + uint32 spell_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveSpellByGroupID(group_id, spell_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovespellbyraidid); +XS(XS__crosszoneremovespellbyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovespellbyraidid(int raid_id, uint32 spell_id)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + uint32 spell_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveSpellByRaidID(raid_id, spell_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovespellbyguildid); +XS(XS__crosszoneremovespellbyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovespellbyguildid(int guild_id, uint32 spell_id)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + uint32 spell_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveSpellByGuildID(guild_id, spell_id); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovetaskbycharid); +XS(XS__crosszoneremovetaskbycharid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovetaskbycharid(int character_id, uint32 task_id)"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveTaskByCharID(char_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovetaskbygroupid); +XS(XS__crosszoneremovetaskbygroupid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovetaskbygroupid(int group_id, uint32 task_id)"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveTaskByGroupID(group_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovetaskbyraidid); +XS(XS__crosszoneremovetaskbyraidid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovetaskbyraidid(int raid_id, uint32 task_id)"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveTaskByRaidID(raid_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneremovetaskbyguildid); +XS(XS__crosszoneremovetaskbyguildid) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszoneremovetaskbyguildid(int guild_id, uint32 task_id)"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneRemoveTaskByGuildID(guild_id, task_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneresetactivitybycharid); +XS(XS__crosszoneresetactivitybycharid) { + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneresetactivitybycharid(int char_id, uint32 task_id, int activity_id)"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + quest_manager.CrossZoneResetActivityByCharID(char_id, task_id, activity_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneresetactivitybygroupid); +XS(XS__crosszoneresetactivitybygroupid) { + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneresetactivitybygroupid(int group_id, uint32 task_id, int activity_id)"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + quest_manager.CrossZoneResetActivityByGroupID(group_id, task_id, activity_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneresetactivitybyraidid); +XS(XS__crosszoneresetactivitybyraidid) { + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneresetactivitybyraidid(int raid_id, uint32 task_id, int activity_id)"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + quest_manager.CrossZoneResetActivityByRaidID(raid_id, task_id, activity_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneresetactivitybyguildid); +XS(XS__crosszoneresetactivitybyguildid) { + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszoneresetactivitybyguildid(int guild_id, uint32 task_id, int activity_id)"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + quest_manager.CrossZoneResetActivityByGuildID(guild_id, task_id, activity_id); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebynpctypeid); +XS(XS__crosszonesetentityvariablebynpctypeid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebynpctypeid(int npc_type_id, string key, string value)"); + + if (items == 3) { + uint32 npc_type_id = (uint32) SvUV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByNPCTypeID(npc_type_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyclientname); +XS(XS__crosszonesetentityvariablebyclientname) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyclientname(string client_name, string key, string value)"); + + if (items == 3) { + const char *client_name = (const char *) SvPV_nolen(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByClientName(client_name, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebygroupid); +XS(XS__crosszonesetentityvariablebygroupid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebygroupid(int group_id, string key, string value)"); + + if (items == 3) { + int group_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyraidid); +XS(XS__crosszonesetentityvariablebyraidid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyraidid(int raid_id, string key, string value)"); + + if (items == 3) { + int raid_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesetentityvariablebyguildid); +XS(XS__crosszonesetentityvariablebyguildid) { + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyguildid(int guild_id, string key, string value)"); + + if (items == 3) { + int guild_id = SvIV(ST(0)); + const char *key = (const char *) SvPV_nolen(ST(1)); + const char *str_value = (const char *) SvPV_nolen(ST(2)); + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, key, str_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbycharid); +XS(XS__crosszonesignalclientbycharid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbycharid(int character_id, uint32 signal)"); + + if (items == 2) { + int char_id = (int) SvIV(ST(0)); + uint32 signal = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalPlayerByCharID(char_id, signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbygroupid); +XS(XS__crosszonesignalclientbygroupid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbygroupid(int group_id, uint32 signal)"); + + if (items == 2) { + int group_id = (int) SvIV(ST(0)); + uint32 signal = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyraidid); +XS(XS__crosszonesignalclientbyraidid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyraidid(int raid_id, uint32 signal)"); + + if (items == 2) { + int raid_id = (int) SvIV(ST(0)); + uint32 signal = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyguildid); +XS(XS__crosszonesignalclientbyguildid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyguildid(int guild_id, uint32 signal)"); + + if (items == 2) { + int guild_id = (int) SvIV(ST(0)); + uint32 signal = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyname); +XS(XS__crosszonesignalclientbyname) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalclientbyname(string name, uint32 signal)"); + + if (items == 2) { + char *name = (char *) SvPV_nolen(ST(0)); + uint32 signal = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalPlayerByName(name, signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalnpcbynpctypeid); +XS(XS__crosszonesignalnpcbynpctypeid) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::crosszonesignalnpcbynpctypeid(uint32 npc_type_id, uint32 value)"); + + if (items == 2) { + uint32 npc_type_id = (uint32) SvUV(ST(0)); + uint32 int_value = (uint32) SvUV(ST(1)); + quest_manager.CrossZoneSignalNPCByNPCTypeID(npc_type_id, int_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszoneupdateactivitybycharid); +XS(XS__crosszoneupdateactivitybycharid) { + dXSARGS; + if (items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: quest::crosszoneupdateactivitybycharid(int char_id, uint32 task_id, int activity_id, [int activity_count = 1])"); + { + int char_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + int activity_count = 1; + if (items == 4) { + activity_count = (int) SvIV(ST(3)); + } + quest_manager.CrossZoneUpdateActivityByCharID(char_id, task_id, activity_id, activity_count); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneupdateactivitybygroupid); +XS(XS__crosszoneupdateactivitybygroupid) { + dXSARGS; + if (items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: quest::crosszoneupdateactivitybygroupid(int group_id, uint32 task_id, int activity_id, [int activity_count = 1])"); + { + int group_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + int activity_count = 1; + if (items == 4) { + activity_count = (int) SvIV(ST(3)); + } + quest_manager.CrossZoneUpdateActivityByGroupID(group_id, task_id, activity_id, activity_count); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneupdateactivitybyraidid); +XS(XS__crosszoneupdateactivitybyraidid) { + dXSARGS; + if (items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: quest::crosszoneupdateactivitybyraidid(int raid_id, uint32 task_id, int activity_id, [int activity_count = 1])"); + { + int raid_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + int activity_count = 1; + if (items == 4) { + activity_count = (int) SvIV(ST(3)); + } + quest_manager.CrossZoneUpdateActivityByRaidID(raid_id, task_id, activity_id, activity_count); + } + XSRETURN_EMPTY; +} + +XS(XS__crosszoneupdateactivitybyguildid); +XS(XS__crosszoneupdateactivitybyguildid) { + dXSARGS; + if (items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: quest::crosszoneupdateactivitybyguildid(int guild_id, uint32 task_id, int activity_id, [int activity_count = 1])"); + { + int guild_id = (int) SvIV(ST(0)); + uint32 task_id = (uint32) SvUV(ST(1)); + int activity_id = (int) SvIV(ST(2)); + int activity_count = 1; + if (items == 4) { + activity_count = (int) SvIV(ST(3)); + } + quest_manager.CrossZoneUpdateActivityByGuildID(guild_id, task_id, activity_id, activity_count); + } + XSRETURN_EMPTY; +} + +XS(XS__worldwideassigntask); +XS(XS__worldwideassigntask) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwideassigntask(uint32 task_id, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideAssignTask(task_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidecastspell); +XS(XS__worldwidecastspell) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidecastspell(uint32 spell_id, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 spell_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideCastSpell(spell_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidedisabletask); +XS(XS__worldwidedisabletask) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidedisabletask(uint32 task_id, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideDisableTask(task_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwideenabletask); +XS(XS__worldwideenabletask) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwideenabletask(uint32 task_id, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideEnableTask(task_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidefailtask); +XS(XS__worldwidefailtask) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidefailtask(uint32 task_id, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideFailTask(task_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidemarquee); +XS(XS__worldwidemarquee) { + dXSARGS; + if (items < 6 || items > 8) + Perl_croak(aTHX_ "Usage: quest::worldwidemarquee(uint32 color_id, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, string message, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 color_id = (uint32) SvUV(ST(0)); + uint32 priority = (uint32) SvUV(ST(1)); + uint32 fade_in = (uint32) SvUV(ST(2)); + uint32 fade_out = (uint32) SvUV(ST(3)); + uint32 duration = (uint32) SvUV(ST(4)); + char *message = (char *) SvPV_nolen(ST(5)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 7) { + min_status = (uint8) SvUV(ST(6)); + } + + if (items == 8) { + max_status = (uint8) SvUV(ST(7)); + } + quest_manager.WorldWideMarquee(color_id, priority, fade_in, fade_out, duration, message, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidemessage); +XS(XS__worldwidemessage) { + dXSARGS; + if (items < 2 || items > 4) + Perl_croak(aTHX_ "Usage: quest::worldwidemessage(uint32 type, string message, [uint8 min_status = 0, uint8 max_status = 0])"); + { + uint32 type = (uint32)SvUV(ST(0)); + const char *message = (const char*) SvPV_nolen(ST(1)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 3) { + min_status = (uint8) SvUV(ST(2)); + } + + if (items == 4) { + max_status = (uint8) SvUV(ST(3)); + } + quest_manager.WorldWideMessage(type, message, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidemove); +XS(XS__worldwidemove) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidemove(string zone_short_name, [uint8 min_status = 0, uint8 max_status = 0])"); + + if (items == 1) { + const char *zone_short_name = (const char*) SvPV_nolen(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideMove(zone_short_name, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidemoveinstance); +XS(XS__worldwidemoveinstance) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidemoveinstance(uint16 instance_id, [uint8 min_status = 0, uint max_status = 0])"); + { + uint16 instance_id = (uint16) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideMoveInstance(instance_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwideremovespell); +XS(XS__worldwideremovespell) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwideremovespell(uint32 spell_id, [uint8 min_status = 0, uint max_status = 0])"); + { + uint32 spell_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideRemoveSpell(spell_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwideremovetask); +XS(XS__worldwideremovetask) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwideremovetask(uint32 task_id, [uint8 min_status = 0, uint max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(2)); + } + quest_manager.WorldWideRemoveTask(task_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwideresetactivity); +XS(XS__worldwideresetactivity) { + dXSARGS; + if (items < 2 || items > 4) + Perl_croak(aTHX_ "Usage: quest::worldwideresetactivity(uint32 task_id, int activity_id, [uint8 min_status = 0, uint max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + int activity_id = (int) SvIV(ST(1)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 3) { + min_status = (uint8) SvUV(ST(2)); + } + + if (items == 4) { + max_status = (uint8) SvUV(ST(3)); + } + quest_manager.WorldWideResetActivity(task_id, activity_id, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidesetentityvariableclient); +XS(XS__worldwidesetentityvariableclient) { + dXSARGS; + if (items < 2 || items > 4) + Perl_croak(aTHX_ "Usage: quest::worldwidesetentityvariableclient(string variable_name, string variable_value, [uint8 min_status = 0, uint max_status = 0])"); + { + const char *variable_name = (const char*) SvPV_nolen(ST(0)); + const char *variable_value = (const char*) SvPV_nolen(ST(1)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 3) { + min_status = (uint8) SvUV(ST(2)); + } + + if (items == 4) { + max_status = (uint8) SvUV(ST(3)); + } + quest_manager.WorldWideSetEntityVariableClient(variable_name, variable_value, min_status, max_status); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidesetentityvariablenpc); +XS(XS__worldwidesetentityvariablenpc) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: quest::worldwidesetentityvariablenpc(string variable_name, string variable_value)"); + { + const char *variable_name = (const char*) SvPV_nolen(ST(0)); + const char *variable_value = (const char*) SvPV_nolen(ST(1)); + quest_manager.WorldWideSetEntityVariableNPC(variable_name, variable_value); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidesignalnpc); +XS(XS__worldwidesignalnpc) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::worldwidesignalnpc(uint32 signal)"); + { + uint32 signal = (uint32) SvUV(ST(0)); + quest_manager.WorldWideSignalNPC(signal); + } + + XSRETURN_EMPTY; +} + +XS(XS__worldwidesignalclient); +XS(XS__worldwidesignalclient) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: quest::worldwidesignalclient(uint32 signal, [uint8 min_status = 0, uint max_status = 0])"); + { + uint32 signal = (uint32) SvUV(ST(0)); + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 2) { + min_status = (uint8) SvUV(ST(1)); + } + + if (items == 3) { + max_status = (uint8) SvUV(ST(1)); + } + quest_manager.WorldWideSignalClient(signal, min_status, max_status); + } + + XSRETURN_EMPTY; +} +XS(XS__worldwideupdateactivity); +XS(XS__worldwideupdateactivity) { + dXSARGS; + if (items < 2 || items > 5) + Perl_croak(aTHX_ "Usage: quest::worldwideupdateactivity(uint32 task_id, int activity_id, [int activity_count = 1, uint8 min_status = 0, uint max_status = 0])"); + { + uint32 task_id = (uint32) SvUV(ST(0)); + int activity_id = (int) SvIV(ST(1)); + int activity_count = 1; + uint8 min_status = 0; + uint8 max_status = 0; + if (items == 3) { + activity_count = (int) SvIV(ST(2)); + } + + if (items == 4) { + min_status = (uint8) SvUV(ST(3)); + } + + if (items == 5) { + max_status = (uint8) SvUV(ST(4)); + } + quest_manager.WorldWideUpdateActivity(task_id, activity_id, activity_count, min_status, max_status); + } + + XSRETURN_EMPTY; +} + XS(XS__enablerecipe); XS(XS__enablerecipe) { dXSARGS; @@ -4125,125 +5183,7 @@ XS(XS__qs_player_event) { XSRETURN_EMPTY; } -XS(XS__crosszonesetentityvariablebynpctypeid); -XS(XS__crosszonesetentityvariablebynpctypeid) { - dXSARGS; - if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebynpctypeid(int npc_type_id, string key, string value)"); - - if (items == 3) { - uint32 npc_type_id = (uint32) SvIV(ST(0)); - const char *key = (const char *) SvPV_nolen(ST(1)); - const char *str_value = (const char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneSetEntityVariableByNPCTypeID(npc_type_id, key, str_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__crosszonesetentityvariablebyclientname); -XS(XS__crosszonesetentityvariablebyclientname) { - dXSARGS; - - if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyclientname(string client_name, string key, string value)"); - - if (items == 3) { - const char *client_name = (const char *) SvPV_nolen(ST(0)); - const char *key = (const char *) SvPV_nolen(ST(1)); - const char *str_value = (const char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneSetEntityVariableByClientName(client_name, key, str_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__crosszonesetentityvariablebygroupid); -XS(XS__crosszonesetentityvariablebygroupid) { - dXSARGS; - - if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebygroupid(int group_id, string key, string value)"); - - if (items == 3) { - int group_id = SvIV(ST(0)); - const char *key = (const char *) SvPV_nolen(ST(1)); - const char *str_value = (const char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, key, str_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__crosszonesetentityvariablebyraidid); -XS(XS__crosszonesetentityvariablebyraidid) { - dXSARGS; - - if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyraidid(int raid_id, string key, string value)"); - - if (items == 3) { - int raid_id = SvIV(ST(0)); - const char *key = (const char *) SvPV_nolen(ST(1)); - const char *str_value = (const char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, key, str_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__crosszonesetentityvariablebyguildid); -XS(XS__crosszonesetentityvariablebyguildid) { - dXSARGS; - - if (items != 3) - Perl_croak(aTHX_ "Usage: quest::crosszonesetentityvariablebyguildid(int guild_id, string key, string value)"); - - if (items == 3) { - int guild_id = SvIV(ST(0)); - const char *key = (const char *) SvPV_nolen(ST(1)); - const char *str_value = (const char *) SvPV_nolen(ST(2)); - quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, key, str_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__crosszonesignalnpcbynpctypeid); -XS(XS__crosszonesignalnpcbynpctypeid) { - dXSARGS; - - if (items != 2) - Perl_croak(aTHX_ "Usage: quest::crosszonesignalnpcbynpctypeid(uint32 npc_type_id, uint32 value)"); - - if (items == 2) { - uint32 npc_type_id = (uint32) SvIV(ST(0)); - uint32 int_value = (uint32) SvIV(ST(1)); - quest_manager.CrossZoneSignalNPCByNPCTypeID(npc_type_id, int_value); - } - - XSRETURN_EMPTY; -} - -XS(XS__worldwidemarquee); -XS(XS__worldwidemarquee) { - dXSARGS; - if (items != 6) - Perl_croak(aTHX_ "Usage: quest::worldwidemarquee(uint32 color_id, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, string message)"); - - if (items == 6) { - uint32 color_id = (uint32) SvIV(ST(0)); - uint32 priority = (uint32) SvIV(ST(1)); - uint32 fade_in = (uint32) SvIV(ST(2)); - uint32 fade_out = (uint32) SvIV(ST(3)); - uint32 duration = (uint32) SvIV(ST(4)); - char *message = (char *) SvPV_nolen(ST(5)); - quest_manager.WorldWideMarquee(color_id, priority, fade_in, fade_out, duration, message); - } - - XSRETURN_EMPTY; -} XS(XS__log); XS(XS__log) { @@ -4510,6 +5450,26 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "crosszoneassigntaskbygroupid"), XS__crosszoneassigntaskbygroupid, file); newXS(strcpy(buf, "crosszoneassigntaskbyraidid"), XS__crosszoneassigntaskbyraidid, file); newXS(strcpy(buf, "crosszoneassigntaskbyguildid"), XS__crosszoneassigntaskbyguildid, file); + newXS(strcpy(buf, "crosszonecastspellbycharid"), XS__crosszonecastspellbycharid, file); + newXS(strcpy(buf, "crosszonecastspellbygroupid"), XS__crosszonecastspellbygroupid, file); + newXS(strcpy(buf, "crosszonecastspellbyraidid"), XS__crosszonecastspellbyraidid, file); + newXS(strcpy(buf, "crosszonecastspellbyguildid"), XS__crosszonecastspellbyguildid, file); + newXS(strcpy(buf, "crosszonedisabletaskbycharid"), XS__crosszonedisabletaskbycharid, file); + newXS(strcpy(buf, "crosszonedisabletaskbygroupid"), XS__crosszonedisabletaskbygroupid, file); + newXS(strcpy(buf, "crosszonedisabletaskbyraidid"), XS__crosszonedisabletaskbyraidid, file); + newXS(strcpy(buf, "crosszonedisabletaskbyguildid"), XS__crosszonedisabletaskbyguildid, file); + newXS(strcpy(buf, "crosszoneenabletaskbycharid"), XS__crosszoneenabletaskbycharid, file); + newXS(strcpy(buf, "crosszoneenabletaskbygroupid"), XS__crosszoneenabletaskbygroupid, file); + newXS(strcpy(buf, "crosszoneenabletaskbyraidid"), XS__crosszoneenabletaskbyraidid, file); + newXS(strcpy(buf, "crosszoneenabletaskbyguildid"), XS__crosszoneenabletaskbyguildid, file); + newXS(strcpy(buf, "crosszonefailtaskbycharid"), XS__crosszonefailtaskbycharid, file); + newXS(strcpy(buf, "crosszonefailtaskbygroupid"), XS__crosszonefailtaskbygroupid, file); + newXS(strcpy(buf, "crosszonefailtaskbyraidid"), XS__crosszonefailtaskbyraidid, file); + newXS(strcpy(buf, "crosszonefailtaskbyguildid"), XS__crosszonefailtaskbyguildid, file); + newXS(strcpy(buf, "crosszonemarqueebycharid"), XS__crosszonemarqueebycharid, file); + newXS(strcpy(buf, "crosszonemarqueebygroupid"), XS__crosszonemarqueebygroupid, file); + newXS(strcpy(buf, "crosszonemarqueebyraidid"), XS__crosszonemarqueebyraidid, file); + newXS(strcpy(buf, "crosszonemarqueebyguildid"), XS__crosszonemarqueebyguildid, file); newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); newXS(strcpy(buf, "crosszonemessageplayerbygroupid"), XS__crosszonemessageplayerbygroupid, file); newXS(strcpy(buf, "crosszonemessageplayerbyraidid"), XS__crosszonemessageplayerbyraidid, file); @@ -4518,6 +5478,22 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "crosszonemoveplayerbygroupid"), XS__crosszonemoveplayerbygroupid, file); newXS(strcpy(buf, "crosszonemoveplayerbyraidid"), XS__crosszonemoveplayerbyraidid, file); newXS(strcpy(buf, "crosszonemoveplayerbyguildid"), XS__crosszonemoveplayerbyguildid, file); + newXS(strcpy(buf, "crosszonemoveinstancebycharid"), XS__crosszonemoveinstancebycharid, file); + newXS(strcpy(buf, "crosszonemoveinstancebygroupid"), XS__crosszonemoveinstancebygroupid, file); + newXS(strcpy(buf, "crosszonemoveinstancebyraidid"), XS__crosszonemoveinstancebyraidid, file); + newXS(strcpy(buf, "crosszonemoveinstancebyguildid"), XS__crosszonemoveinstancebyguildid, file); + newXS(strcpy(buf, "crosszoneremovespellbycharid"), XS__crosszoneremovespellbycharid, file); + newXS(strcpy(buf, "crosszoneremovespellbygroupid"), XS__crosszoneremovespellbygroupid, file); + newXS(strcpy(buf, "crosszoneremovespellbyraidid"), XS__crosszoneremovespellbyraidid, file); + newXS(strcpy(buf, "crosszoneremovespellbyguildid"), XS__crosszoneremovespellbyguildid, file); + newXS(strcpy(buf, "crosszoneremovetaskbycharid"), XS__crosszoneremovetaskbycharid, file); + newXS(strcpy(buf, "crosszoneremovetaskbygroupid"), XS__crosszoneremovetaskbygroupid, file); + newXS(strcpy(buf, "crosszoneremovetaskbyraidid"), XS__crosszoneremovetaskbyraidid, file); + newXS(strcpy(buf, "crosszoneremovetaskbyguildid"), XS__crosszoneremovetaskbyguildid, file); + newXS(strcpy(buf, "crosszoneresetactivitybycharid"), XS__crosszoneresetactivitybycharid, file); + newXS(strcpy(buf, "crosszoneresetactivitybygroupid"), XS__crosszoneresetactivitybygroupid, file); + newXS(strcpy(buf, "crosszoneresetactivitybyraidid"), XS__crosszoneresetactivitybyraidid, file); + newXS(strcpy(buf, "crosszoneresetactivitybyguildid"), XS__crosszoneresetactivitybyguildid, file); newXS(strcpy(buf, "crosszonesetentityvariablebynpctypeid"), XS__crosszonesetentityvariablebynpctypeid, file); newXS(strcpy(buf, "crosszonesetentityvariablebyclientname"), XS__crosszonesetentityvariablebyclientname, file); newXS(strcpy(buf, "crosszonesetentityvariablebygroupid"), XS__crosszonesetentityvariablebygroupid, file); @@ -4529,7 +5505,26 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "crosszonesignalclientbyguildid"), XS__crosszonesignalclientbyguildid, file); newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); newXS(strcpy(buf, "crosszonesignalnpcbynpctypeid"), XS__crosszonesignalnpcbynpctypeid, file); + newXS(strcpy(buf, "crosszoneupdateactivitybycharid"), XS__crosszoneupdateactivitybycharid, file); + newXS(strcpy(buf, "crosszoneupdateactivitybygroupid"), XS__crosszoneupdateactivitybygroupid, file); + newXS(strcpy(buf, "crosszoneupdateactivitybyraidid"), XS__crosszoneupdateactivitybyraidid, file); + newXS(strcpy(buf, "crosszoneupdateactivitybyguildid"), XS__crosszoneupdateactivitybyguildid, file); + newXS(strcpy(buf, "worldwidecastspell"), XS__worldwidecastspell, file); + newXS(strcpy(buf, "worldwidedisabletask"), XS__worldwidedisabletask, file); + newXS(strcpy(buf, "worldwideenabletask"), XS__worldwideenabletask, file); + newXS(strcpy(buf, "worldwidefailtask"), XS__worldwidefailtask, file); newXS(strcpy(buf, "worldwidemarquee"), XS__worldwidemarquee, file); + newXS(strcpy(buf, "worldwidemessage"), XS__worldwidemessage, file); + newXS(strcpy(buf, "worldwidemove"), XS__worldwidemove, file); + newXS(strcpy(buf, "worldwidemoveinstance"), XS__worldwidemoveinstance, file); + newXS(strcpy(buf, "worldwideremovespell"), XS__worldwideremovespell, file); + newXS(strcpy(buf, "worldwideremovetask"), XS__worldwideremovetask, file); + newXS(strcpy(buf, "worldwideresetactivity"), XS__worldwideresetactivity, file); + newXS(strcpy(buf, "worldwidesetentityvariableclient"), XS__worldwidesetentityvariableclient, file); + newXS(strcpy(buf, "worldwidesetentityvariablenpc"), XS__worldwidesetentityvariablenpc, file); + newXS(strcpy(buf, "worldwidesignalclient"), XS__worldwidesignalclient, file); + newXS(strcpy(buf, "worldwidesignalnpc"), XS__worldwidesignalnpc, file); + newXS(strcpy(buf, "worldwideupdateactivity"), XS__worldwideupdateactivity, file); newXS(strcpy(buf, "debug"), XS__debug, file); newXS(strcpy(buf, "delglobal"), XS__delglobal, file); newXS(strcpy(buf, "depop"), XS__depop, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 71798ecf0..4428dadfa 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1054,28 +1054,88 @@ void lua_cross_zone_assign_task_by_guild_id(int guild_id, uint32 task_id, bool e quest_manager.CrossZoneAssignTaskByGuildID(guild_id, task_id, enforce_level_requirement); } -void lua_cross_zone_signal_client_by_char_id(uint32 player_id, int signal) { - quest_manager.CrossZoneSignalPlayerByCharID(player_id, signal); +void lua_cross_zone_cast_spell_by_char_id(int character_id, uint32 spell_id) { + quest_manager.CrossZoneCastSpellByCharID(character_id, spell_id); } -void lua_cross_zone_signal_client_by_group_id(uint32 group_id, int signal) { - quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); +void lua_cross_zone_cast_spell_by_group_id(int group_id, uint32 spell_id) { + quest_manager.CrossZoneCastSpellByGroupID(group_id, spell_id); } -void lua_cross_zone_signal_client_by_raid_id(uint32 raid_id, int signal) { - quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, signal); +void lua_cross_zone_cast_spell_by_raid_id(int raid_id, uint32 spell_id) { + quest_manager.CrossZoneCastSpellByRaidID(raid_id, spell_id); } -void lua_cross_zone_signal_client_by_guild_id(uint32 guild_id, int signal) { - quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, signal); +void lua_cross_zone_cast_spell_by_guild_id(int guild_id, uint32 spell_id) { + quest_manager.CrossZoneCastSpellByGuildID(guild_id, spell_id); } -void lua_cross_zone_signal_client_by_name(const char *player, int signal) { - quest_manager.CrossZoneSignalPlayerByName(player, signal); +void lua_cross_zone_disable_task_by_char_id(int character_id, uint32 task_id) { + quest_manager.CrossZoneDisableTaskByCharID(character_id, task_id); } -void lua_cross_zone_message_player_by_name(uint32 type, const char *player, const char *message) { - quest_manager.CrossZoneMessagePlayerByName(type, player, message); +void lua_cross_zone_disable_task_by_group_id(int group_id, uint32 task_id) { + quest_manager.CrossZoneDisableTaskByGroupID(group_id, task_id); +} + +void lua_cross_zone_disable_task_by_raid_id(int raid_id, uint32 task_id) { + quest_manager.CrossZoneDisableTaskByRaidID(raid_id, task_id); +} + +void lua_cross_zone_disable_task_by_guild_id(int guild_id, uint32 task_id) { + quest_manager.CrossZoneDisableTaskByGuildID(guild_id, task_id); +} + +void lua_cross_zone_enable_task_by_char_id(int character_id, uint32 task_id) { + quest_manager.CrossZoneEnableTaskByCharID(character_id, task_id); +} + +void lua_cross_zone_enable_task_by_group_id(int group_id, uint32 task_id) { + quest_manager.CrossZoneEnableTaskByGroupID(group_id, task_id); +} + +void lua_cross_zone_enable_task_by_raid_id(int raid_id, uint32 task_id) { + quest_manager.CrossZoneEnableTaskByRaidID(raid_id, task_id); +} + +void lua_cross_zone_enable_task_by_guild_id(int guild_id, uint32 task_id) { + quest_manager.CrossZoneEnableTaskByGuildID(guild_id, task_id); +} + +void lua_cross_zone_fail_task_by_char_id(int character_id, uint32 task_id) { + quest_manager.CrossZoneFailTaskByCharID(character_id, task_id); +} + +void lua_cross_zone_fail_task_by_group_id(int group_id, uint32 task_id) { + quest_manager.CrossZoneFailTaskByGroupID(group_id, task_id); +} + +void lua_cross_zone_fail_task_by_raid_id(int raid_id, uint32 task_id) { + quest_manager.CrossZoneFailTaskByRaidID(raid_id, task_id); +} + +void lua_cross_zone_fail_task_by_guild_id(int guild_id, uint32 task_id) { + quest_manager.CrossZoneFailTaskByGuildID(guild_id, task_id); +} + +void lua_cross_zone_marquee_by_char_id(int character_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + quest_manager.CrossZoneMarqueeByCharID(character_id, type, priority, fade_in, fade_out, duration, message); +} + +void lua_cross_zone_marquee_by_group_id(int group_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + quest_manager.CrossZoneMarqueeByGroupID(group_id, type, priority, fade_in, fade_out, duration, message); +} + +void lua_cross_zone_marquee_by_raid_id(int raid_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + quest_manager.CrossZoneMarqueeByRaidID(raid_id, type, priority, fade_in, fade_out, duration, message); +} + +void lua_cross_zone_marquee_by_guild_id(int guild_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + quest_manager.CrossZoneMarqueeByGuildID(guild_id, type, priority, fade_in, fade_out, duration, message); +} + +void lua_cross_zone_message_player_by_name(uint32 type, const char *character_name, const char *message) { + quest_manager.CrossZoneMessagePlayerByName(type, character_name, message); } void lua_cross_zone_message_player_by_group_id(uint32 type, int group_id, const char *message) { @@ -1106,24 +1166,216 @@ void lua_cross_zone_move_player_by_guild_id(int guild_id, const char *zone_short quest_manager.CrossZoneMovePlayerByGuildID(guild_id, zone_short_name); } -void lua_cross_zone_set_entity_variable_by_client_name(const char *player, const char *id, const char *m_var) { - quest_manager.CrossZoneSetEntityVariableByClientName(player, id, m_var); +void lua_cross_zone_move_instance_by_char_id(int character_id, uint16 instance_id) { + quest_manager.CrossZoneMoveInstanceByCharID(character_id, instance_id); } -void lua_cross_zone_set_entity_variable_by_group_id(int group_id, const char *id, const char *m_var) { - quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, id, m_var); +void lua_cross_zone_move_instance_by_group_id(int group_id, uint16 instance_id) { + quest_manager.CrossZoneMoveInstanceByGroupID(group_id, instance_id); } -void lua_cross_zone_set_entity_variable_by_raid_id(int raid_id, const char *id, const char *m_var) { - quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, id, m_var); +void lua_cross_zone_move_instance_by_raid_id(int raid_id, uint16 instance_id) { + quest_manager.CrossZoneMoveInstanceByRaidID(raid_id, instance_id); } -void lua_cross_zone_set_entity_variable_by_guild_id(int guild_id, const char *id, const char *m_var) { - quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, id, m_var); +void lua_cross_zone_move_instance_by_guild_id(int guild_id, uint16 instance_id) { + quest_manager.CrossZoneMoveInstanceByGuildID(guild_id, instance_id); } -void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fadein, uint32 fadeout, uint32 duration, const char *message) { - quest_manager.WorldWideMarquee(type, priority, fadein, fadeout, duration, message); +void lua_cross_zone_remove_spell_by_char_id(int character_id, uint32 spell_id) { + quest_manager.CrossZoneRemoveSpellByCharID(character_id, spell_id); +} + +void lua_cross_zone_remove_spell_by_group_id(int group_id, uint32 spell_id) { + quest_manager.CrossZoneRemoveSpellByGroupID(group_id, spell_id); +} + +void lua_cross_zone_remove_spell_by_raid_id(int raid_id, uint32 spell_id) { + quest_manager.CrossZoneRemoveSpellByRaidID(raid_id, spell_id); +} + +void lua_cross_zone_remove_spell_by_guild_id(int guild_id, uint32 spell_id) { + quest_manager.CrossZoneRemoveSpellByGuildID(guild_id, spell_id); +} + +void lua_cross_zone_remove_task_by_char_id(int character_id, uint32 task_id) { + quest_manager.CrossZoneRemoveTaskByCharID(character_id, task_id); +} + +void lua_cross_zone_remove_task_by_group_id(int group_id, uint32 task_id) { + quest_manager.CrossZoneRemoveTaskByGroupID(group_id, task_id); +} + +void lua_cross_zone_remove_task_by_raid_id(int raid_id, uint32 task_id) { + quest_manager.CrossZoneRemoveTaskByRaidID(raid_id, task_id); +} + +void lua_cross_zone_remove_task_by_guild_id(int guild_id, uint32 task_id) { + quest_manager.CrossZoneRemoveTaskByGuildID(guild_id, task_id); +} + +void lua_cross_zone_reset_activity_by_char_id(int character_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneResetActivityByCharID(character_id, task_id, activity_id); +} + +void lua_cross_zone_reset_activity_by_group_id(int group_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneResetActivityByGroupID(group_id, task_id, activity_id); +} + +void lua_cross_zone_reset_activity_by_raid_id(int raid_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneResetActivityByRaidID(raid_id, task_id, activity_id); +} + +void lua_cross_zone_reset_activity_by_guild_id(int guild_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneResetActivityByGuildID(guild_id, task_id, activity_id); +} + +void lua_cross_zone_set_entity_variable_by_client_name(const char *character_name, const char *variable_name, const char *variable_value) { + quest_manager.CrossZoneSetEntityVariableByClientName(character_name, variable_name, variable_value); +} + +void lua_cross_zone_set_entity_variable_by_group_id(int group_id, const char *variable_name, const char *variable_value) { + quest_manager.CrossZoneSetEntityVariableByGroupID(group_id, variable_name, variable_value); +} + +void lua_cross_zone_set_entity_variable_by_raid_id(int raid_id, const char *variable_name, const char *variable_value) { + quest_manager.CrossZoneSetEntityVariableByRaidID(raid_id, variable_name, variable_value); +} + +void lua_cross_zone_set_entity_variable_by_guild_id(int guild_id, const char *variable_name, const char *variable_value) { + quest_manager.CrossZoneSetEntityVariableByGuildID(guild_id, variable_name, variable_value); +} + +void lua_cross_zone_signal_client_by_char_id(uint32 character_id, int signal) { + quest_manager.CrossZoneSignalPlayerByCharID(character_id, signal); +} + +void lua_cross_zone_signal_client_by_group_id(uint32 group_id, int signal) { + quest_manager.CrossZoneSignalPlayerByGroupID(group_id, signal); +} + +void lua_cross_zone_signal_client_by_raid_id(uint32 raid_id, int signal) { + quest_manager.CrossZoneSignalPlayerByRaidID(raid_id, signal); +} + +void lua_cross_zone_signal_client_by_guild_id(uint32 guild_id, int signal) { + quest_manager.CrossZoneSignalPlayerByGuildID(guild_id, signal); +} + +void lua_cross_zone_signal_client_by_name(const char *character_name, int signal) { + quest_manager.CrossZoneSignalPlayerByName(character_name, signal); +} + +void lua_cross_zone_signal_npc_by_npctype_id(uint32 npctype_id, int signal) { + quest_manager.CrossZoneSignalNPCByNPCTypeID(npctype_id, signal); +} + +void lua_cross_zone_update_activity_by_char_id(int character_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneUpdateActivityByCharID(character_id, task_id, activity_id); +} + +void lua_cross_zone_update_activity_by_char_id(int character_id, uint32 task_id, int activity_id, int activity_count) { + quest_manager.CrossZoneUpdateActivityByCharID(character_id, task_id, activity_id, activity_count); +} + +void lua_cross_zone_update_activity_by_group_id(int group_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneUpdateActivityByGroupID(group_id, task_id, activity_id); +} + +void lua_cross_zone_update_activity_by_group_id(int group_id, uint32 task_id, int activity_id, int activity_count) { + quest_manager.CrossZoneUpdateActivityByGroupID(group_id, task_id, activity_id, activity_count); +} + +void lua_cross_zone_update_activity_by_raid_id(int raid_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneUpdateActivityByRaidID(raid_id, task_id, activity_id); +} + +void lua_cross_zone_update_activity_by_raid_id(int raid_id, uint32 task_id, int activity_id, int activity_count) { + quest_manager.CrossZoneUpdateActivityByRaidID(raid_id, task_id, activity_id, activity_count); +} + +void lua_cross_zone_update_activity_by_guild_id(int guild_id, uint32 task_id, int activity_id) { + quest_manager.CrossZoneUpdateActivityByGuildID(guild_id, task_id, activity_id); +} + +void lua_cross_zone_update_activity_by_guild_id(int guild_id, uint32 task_id, int activity_id, int activity_count) { + quest_manager.CrossZoneUpdateActivityByGuildID(guild_id, task_id, activity_id, activity_count); +} + +void lua_world_wide_assign_task(uint32 task_id) { + quest_manager.WorldWideAssignTask(task_id); +} + +void lua_world_wide_assign_task(uint32 task_id, bool enforce_level_requirement) { + quest_manager.WorldWideAssignTask(task_id, enforce_level_requirement); +} + +void lua_world_wide_cast_spell(uint32 spell_id) { + quest_manager.WorldWideCastSpell(spell_id); +} + +void lua_world_wide_disable_task(uint32 task_id) { + quest_manager.WorldWideDisableTask(task_id); +} + +void lua_world_wide_enable_task(uint32 task_id) { + quest_manager.WorldWideEnableTask(task_id); +} + +void lua_world_wide_fail_task(uint32 task_id) { + quest_manager.WorldWideFailTask(task_id); +} + +void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + quest_manager.WorldWideMarquee(type, priority, fade_in, fade_out, duration, message); +} + +void lua_world_wide_message(uint32 type, const char *message) { + quest_manager.WorldWideMessage(type, message); +} + +void lua_world_wide_move(const char *zone_short_name) { + quest_manager.WorldWideMove(zone_short_name); +} + +void lua_world_wide_move_instance(uint16 instance_id) { + quest_manager.WorldWideMoveInstance(instance_id); +} + +void lua_world_wide_remove_spell(uint32 spell_id) { + quest_manager.WorldWideRemoveSpell(spell_id); +} + +void lua_world_wide_remove_task(uint32 task_id) { + quest_manager.WorldWideRemoveTask(task_id); +} + +void lua_world_wide_reset_activity(uint32 task_id, int activity_id) { + quest_manager.WorldWideResetActivity(task_id, activity_id); +} + +void lua_world_wide_set_entity_variable_client(const char *variable_name, const char *variable_value) { + quest_manager.WorldWideSetEntityVariableClient(variable_name, variable_value); +} + +void lua_world_wide_set_entity_variable_npc(const char *variable_name, const char *variable_value) { + quest_manager.WorldWideSetEntityVariableNPC(variable_name, variable_value); +} + +void lua_world_wide_signal_client(uint32 signal) { + quest_manager.WorldWideSignalClient(signal); +} + +void lua_world_wide_signal_npc(uint32 signal) { + quest_manager.WorldWideSignalNPC(signal); +} + +void lua_world_wide_update_activity(uint32 task_id, int activity_id) { + quest_manager.WorldWideUpdateActivity(task_id, activity_id); +} + +void lua_world_wide_update_activity(uint32 task_id, int activity_id, int activity_count) { + quest_manager.WorldWideUpdateActivity(task_id, activity_id, activity_count); } luabind::adl::object lua_get_qglobals(lua_State *L, Lua_NPC npc, Lua_Client client) { @@ -1942,11 +2194,26 @@ luabind::scope lua_register_general() { luabind::def("cross_zone_assign_task_by_raid_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_raid_id), luabind::def("cross_zone_assign_task_by_guild_id", (void(*)(int,uint32))&lua_cross_zone_assign_task_by_guild_id), luabind::def("cross_zone_assign_task_by_guild_id", (void(*)(int,uint32,bool))&lua_cross_zone_assign_task_by_guild_id), - luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), - luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), - luabind::def("cross_zone_signal_client_by_raid_id", &lua_cross_zone_signal_client_by_raid_id), - luabind::def("cross_zone_signal_client_by_guild_id", &lua_cross_zone_signal_client_by_guild_id), - luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), + luabind::def("cross_zone_cast_spell_by_char_id", &lua_cross_zone_cast_spell_by_char_id), + luabind::def("cross_zone_cast_spell_by_group_id", &lua_cross_zone_cast_spell_by_group_id), + luabind::def("cross_zone_cast_spell_by_raid_id", &lua_cross_zone_cast_spell_by_raid_id), + luabind::def("cross_zone_cast_spell_by_guild_id", &lua_cross_zone_cast_spell_by_guild_id), + luabind::def("cross_zone_disable_task_by_char_id", &lua_cross_zone_disable_task_by_char_id), + luabind::def("cross_zone_disable_task_by_group_id", &lua_cross_zone_disable_task_by_group_id), + luabind::def("cross_zone_disable_task_by_raid_id", &lua_cross_zone_disable_task_by_raid_id), + luabind::def("cross_zone_disable_task_by_guild_id", &lua_cross_zone_disable_task_by_guild_id), + luabind::def("cross_zone_enable_task_by_char_id", &lua_cross_zone_enable_task_by_char_id), + luabind::def("cross_zone_enable_task_by_group_id", &lua_cross_zone_enable_task_by_group_id), + luabind::def("cross_zone_enable_task_by_raid_id", &lua_cross_zone_enable_task_by_raid_id), + luabind::def("cross_zone_enable_task_by_guild_id", &lua_cross_zone_enable_task_by_guild_id), + luabind::def("cross_zone_fail_task_by_char_id", &lua_cross_zone_fail_task_by_char_id), + luabind::def("cross_zone_fail_task_by_group_id", &lua_cross_zone_fail_task_by_group_id), + luabind::def("cross_zone_fail_task_by_raid_id", &lua_cross_zone_fail_task_by_raid_id), + luabind::def("cross_zone_fail_task_by_guild_id", &lua_cross_zone_fail_task_by_guild_id), + luabind::def("cross_zone_marquee_by_char_id", &lua_cross_zone_marquee_by_char_id), + luabind::def("cross_zone_marquee_by_group_id", &lua_cross_zone_marquee_by_group_id), + luabind::def("cross_zone_marquee_by_raid_id", &lua_cross_zone_marquee_by_raid_id), + luabind::def("cross_zone_marquee_by_guild_id", &lua_cross_zone_marquee_by_guild_id), luabind::def("cross_zone_message_player_by_name", &lua_cross_zone_message_player_by_name), luabind::def("cross_zone_message_player_by_group_id", &lua_cross_zone_message_player_by_group_id), luabind::def("cross_zone_message_player_by_raid_id", &lua_cross_zone_message_player_by_raid_id), @@ -1955,11 +2222,59 @@ luabind::scope lua_register_general() { luabind::def("cross_zone_move_player_by_group_id", &lua_cross_zone_move_player_by_group_id), luabind::def("cross_zone_move_player_by_raid_id", &lua_cross_zone_move_player_by_raid_id), luabind::def("cross_zone_move_player_by_guild_id", &lua_cross_zone_move_player_by_guild_id), + luabind::def("cross_zone_move_instance_by_char_id", &lua_cross_zone_move_instance_by_char_id), + luabind::def("cross_zone_move_instance_by_group_id", &lua_cross_zone_move_instance_by_group_id), + luabind::def("cross_zone_move_instance_by_raid_id", &lua_cross_zone_move_instance_by_raid_id), + luabind::def("cross_zone_move_instance_by_guild_id", &lua_cross_zone_move_instance_by_guild_id), + luabind::def("cross_zone_remove_spell_by_char_id", &lua_cross_zone_remove_spell_by_char_id), + luabind::def("cross_zone_remove_spell_by_group_id", &lua_cross_zone_remove_spell_by_group_id), + luabind::def("cross_zone_remove_spell_by_raid_id", &lua_cross_zone_remove_spell_by_raid_id), + luabind::def("cross_zone_remove_spell_by_guild_id", &lua_cross_zone_remove_spell_by_guild_id), + luabind::def("cross_zone_remove_task_by_char_id", &lua_cross_zone_remove_task_by_char_id), + luabind::def("cross_zone_remove_task_by_group_id", &lua_cross_zone_remove_task_by_group_id), + luabind::def("cross_zone_remove_task_by_raid_id", &lua_cross_zone_remove_task_by_raid_id), + luabind::def("cross_zone_remove_task_by_guild_id", &lua_cross_zone_remove_task_by_guild_id), + luabind::def("cross_zone_reset_activity_by_char_id", &lua_cross_zone_reset_activity_by_char_id), + luabind::def("cross_zone_reset_activity_by_group_id", &lua_cross_zone_reset_activity_by_group_id), + luabind::def("cross_zone_reset_activity_by_raid_id", &lua_cross_zone_reset_activity_by_raid_id), + luabind::def("cross_zone_reset_activity_by_guild_id", &lua_cross_zone_reset_activity_by_guild_id), luabind::def("cross_zone_set_entity_variable_by_client_name", &lua_cross_zone_set_entity_variable_by_client_name), luabind::def("cross_zone_set_entity_variable_by_group_id", &lua_cross_zone_set_entity_variable_by_group_id), luabind::def("cross_zone_set_entity_variable_by_raid_id", &lua_cross_zone_set_entity_variable_by_raid_id), luabind::def("cross_zone_set_entity_variable_by_guild_id", &lua_cross_zone_set_entity_variable_by_guild_id), + luabind::def("cross_zone_signal_client_by_char_id", &lua_cross_zone_signal_client_by_char_id), + luabind::def("cross_zone_signal_client_by_group_id", &lua_cross_zone_signal_client_by_group_id), + luabind::def("cross_zone_signal_client_by_raid_id", &lua_cross_zone_signal_client_by_raid_id), + luabind::def("cross_zone_signal_client_by_guild_id", &lua_cross_zone_signal_client_by_guild_id), + luabind::def("cross_zone_signal_client_by_name", &lua_cross_zone_signal_client_by_name), + luabind::def("cross_zone_signal_npc_by_npctype_id", &lua_cross_zone_signal_npc_by_npctype_id), + luabind::def("cross_zone_update_activity_by_char_id", (void(*)(int,uint32,int))&lua_cross_zone_update_activity_by_char_id), + luabind::def("cross_zone_update_activity_by_char_id", (void(*)(int,uint32,int,int))&lua_cross_zone_update_activity_by_char_id), + luabind::def("cross_zone_update_activity_by_group_id", (void(*)(int,uint32,int))&lua_cross_zone_update_activity_by_group_id), + luabind::def("cross_zone_update_activity_by_group_id", (void(*)(int,uint32,int,int))&lua_cross_zone_update_activity_by_group_id), + luabind::def("cross_zone_update_activity_by_raid_id", (void(*)(int,uint32,int))&lua_cross_zone_update_activity_by_raid_id), + luabind::def("cross_zone_update_activity_by_raid_id", (void(*)(int,uint32,int,int))&lua_cross_zone_update_activity_by_raid_id), + luabind::def("cross_zone_update_activity_by_guild_id", (void(*)(int,uint32,int))&lua_cross_zone_update_activity_by_guild_id), + luabind::def("cross_zone_update_activity_by_guild_id", (void(*)(int,uint32,int,int))&lua_cross_zone_update_activity_by_guild_id), + luabind::def("world_wide_assign_task", (void(*)(uint32))&lua_world_wide_assign_task), + luabind::def("world_wide_assign_task", (void(*)(uint32,bool))&lua_world_wide_assign_task), + luabind::def("world_wide_cast_spell", &lua_world_wide_cast_spell), + luabind::def("world_wide_disable_task", &lua_world_wide_disable_task), + luabind::def("world_wide_enable_task", &lua_world_wide_enable_task), + luabind::def("world_wide_fail_task", &lua_world_wide_fail_task), luabind::def("world_wide_marquee", &lua_world_wide_marquee), + luabind::def("world_wide_message", &lua_world_wide_message), + luabind::def("world_wide_move", &lua_world_wide_move), + luabind::def("world_wide_move_instance", &lua_world_wide_move_instance), + luabind::def("world_wide_remove_spell", &lua_world_wide_remove_spell), + luabind::def("world_wide_remove_task", &lua_world_wide_remove_task), + luabind::def("world_wide_reset_activity", &lua_world_wide_reset_activity), + luabind::def("world_wide_set_entity_variable_client", &lua_world_wide_set_entity_variable_client), + luabind::def("world_wide_set_entity_variable_npc", &lua_world_wide_set_entity_variable_npc), + luabind::def("world_wide_signal_client", &lua_world_wide_signal_client), + luabind::def("world_wide_signal_npc", &lua_world_wide_signal_npc), + luabind::def("world_wide_update_activity", (void(*)(uint32,int))&lua_world_wide_update_activity), + luabind::def("world_wide_update_activity", (void(*)(uint32,int,int))&lua_world_wide_update_activity), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC))&lua_get_qglobals), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 09423b49b..9daf2d351 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -1629,7 +1629,7 @@ int QuestManager::InsertQuestGlobal(int charid, int npcid, int zoneid, const cha /* Create new qglobal data and update zone processes */ pack = new ServerPacket(ServerOP_QGlobalUpdate, sizeof(ServerQGlobalUpdate_Struct)); - ServerQGlobalUpdate_Struct *qgu = (ServerQGlobalUpdate_Struct*)pack->pBuffer; + ServerQGlobalUpdate_Struct *qgu = (ServerQGlobalUpdate_Struct*) pack->pBuffer; qgu->npc_id = npcid; qgu->char_id = charid; qgu->zone_id = zoneid; @@ -2745,7 +2745,7 @@ void QuestManager::UpdateSpawnTimer(uint32 id, uint32 newTime) //Spawn wasn't in this zone... //Tell the other zones to update their spawn time for this spawn point auto pack = new ServerPacket(ServerOP_UpdateSpawn, sizeof(UpdateSpawnTimer_Struct)); - UpdateSpawnTimer_Struct *ust = (UpdateSpawnTimer_Struct*)pack->pBuffer; + UpdateSpawnTimer_Struct *ust = (UpdateSpawnTimer_Struct*) pack->pBuffer; ust->id = id; ust->duration = newTime; worldserver.SendPacket(pack); @@ -2865,7 +2865,7 @@ void QuestManager::UpdateInstanceTimer(uint16 instance_id, uint32 new_duration) if (results.Success()) { auto pack = new ServerPacket(ServerOP_InstanceUpdateTime, sizeof(ServerInstanceUpdateTime_Struct)); - ServerInstanceUpdateTime_Struct *ut = (ServerInstanceUpdateTime_Struct*)pack->pBuffer; + ServerInstanceUpdateTime_Struct *ut = (ServerInstanceUpdateTime_Struct*) pack->pBuffer; ut->instance_id = instance_id; ut->new_duration = new_duration; worldserver.SendPacket(pack); @@ -3273,9 +3273,9 @@ const char* QuestManager::GetZoneLongName(const char *zone) { void QuestManager::CrossZoneAssignTaskByCharID(int character_id, uint32 task_id, bool enforce_level_requirement) { QuestManagerCurrentQuestVars(); - if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { - auto pack = new ServerPacket(ServerOP_CZTaskAssign, sizeof(CZTaskAssign_Struct)); - CZTaskAssign_Struct* CZTA = (CZTaskAssign_Struct*)pack->pBuffer; + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskAssignPlayer, sizeof(CZTaskAssignPlayer_Struct)); + CZTaskAssignPlayer_Struct* CZTA = (CZTaskAssignPlayer_Struct*) pack->pBuffer; CZTA->npc_entity_id = owner->GetID(); CZTA->character_id = character_id; CZTA->task_id = task_id; @@ -3287,9 +3287,9 @@ void QuestManager::CrossZoneAssignTaskByCharID(int character_id, uint32 task_id, void QuestManager::CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bool enforce_level_requirement) { QuestManagerCurrentQuestVars(); - if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + if (initiator && owner) { auto pack = new ServerPacket(ServerOP_CZTaskAssignGroup, sizeof(CZTaskAssignGroup_Struct)); - CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*)pack->pBuffer; + CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*) pack->pBuffer; CZTA->npc_entity_id = owner->GetID(); CZTA->group_id = group_id; CZTA->task_id = task_id; @@ -3301,7 +3301,7 @@ void QuestManager::CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bo void QuestManager::CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool enforce_level_requirement) { QuestManagerCurrentQuestVars(); - if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + if (initiator && owner) { auto pack = new ServerPacket(ServerOP_CZTaskAssignRaid, sizeof(CZTaskAssignRaid_Struct)); CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*) pack->pBuffer; CZTA->npc_entity_id = owner->GetID(); @@ -3315,7 +3315,7 @@ void QuestManager::CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool void QuestManager::CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bool enforce_level_requirement) { QuestManagerCurrentQuestVars(); - if (RuleB(TaskSystem, EnableTaskSystem) && initiator && owner) { + if (initiator && owner) { auto pack = new ServerPacket(ServerOP_CZTaskAssignGuild, sizeof(CZTaskAssignGuild_Struct)); CZTaskAssignGuild_Struct* CZTA = (CZTaskAssignGuild_Struct*) pack->pBuffer; CZTA->npc_entity_id = owner->GetID(); @@ -3327,108 +3327,256 @@ void QuestManager::CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bo } } -void QuestManager::CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data){ - auto pack = new ServerPacket(ServerOP_CZSignalNPC, sizeof(CZNPCSignal_Struct)); - CZNPCSignal_Struct* CZSN = (CZNPCSignal_Struct*)pack->pBuffer; - CZSN->npctype_id = npctype_id; - CZSN->data = data; +void QuestManager::CrossZoneCastSpellByCharID(int character_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZCastSpellPlayer, sizeof(CZCastSpellPlayer_Struct)); + CZCastSpellPlayer_Struct* CZCS = (CZCastSpellPlayer_Struct*) pack->pBuffer; + CZCS->character_id = character_id; + CZCS->spell_id = spell_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSignalPlayerByCharID(int charid, uint32 data){ - auto pack = new ServerPacket(ServerOP_CZSignalClient, sizeof(CZClientSignal_Struct)); - CZClientSignal_Struct* CZSC = (CZClientSignal_Struct*) pack->pBuffer; - CZSC->charid = charid; - CZSC->data = data; +void QuestManager::CrossZoneCastSpellByGroupID(int group_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZCastSpellGroup, sizeof(CZCastSpellGroup_Struct)); + CZCastSpellGroup_Struct* CZCS = (CZCastSpellGroup_Struct*) pack->pBuffer; + CZCS->group_id = group_id; + CZCS->spell_id = spell_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 data){ - auto pack = new ServerPacket(ServerOP_CZSignalGroup, sizeof(CZGroupSignal_Struct)); - CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*) pack->pBuffer; - CZGS->group_id = group_id; - CZGS->data = data; +void QuestManager::CrossZoneCastSpellByRaidID(int raid_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZCastSpellRaid, sizeof(CZCastSpellRaid_Struct)); + CZCastSpellRaid_Struct* CZCS = (CZCastSpellRaid_Struct*) pack->pBuffer; + CZCS->raid_id = raid_id; + CZCS->spell_id = spell_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data){ - auto pack = new ServerPacket(ServerOP_CZSignalRaid, sizeof(CZRaidSignal_Struct)); - CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer; - CZRS->raid_id = raid_id; - CZRS->data = data; +void QuestManager::CrossZoneCastSpellByGuildID(int guild_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZCastSpellGuild, sizeof(CZCastSpellGuild_Struct)); + CZCastSpellGuild_Struct* CZCS = (CZCastSpellGuild_Struct*) pack->pBuffer; + CZCS->guild_id = guild_id; + CZCS->spell_id = spell_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data){ - auto pack = new ServerPacket(ServerOP_CZSignalGuild, sizeof(CZGuildSignal_Struct)); - CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer; - CZGS->guild_id = guild_id; - CZGS->data = data; +void QuestManager::CrossZoneDisableTaskByCharID(int character_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskDisablePlayer, sizeof(CZTaskDisablePlayer_Struct)); + CZTaskDisablePlayer_Struct* CZTD = (CZTaskDisablePlayer_Struct*) pack->pBuffer; + CZTD->character_id = character_id; + CZTD->task_id = task_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSignalPlayerByName(const char *CharName, uint32 data){ - uint32 message_len = strlen(CharName) + 1; - auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len); - CZClientSignalByName_Struct* CZSC = (CZClientSignalByName_Struct*) pack->pBuffer; - strn0cpy(CZSC->Name, CharName, 64); - CZSC->data = data; +void QuestManager::CrossZoneDisableTaskByGroupID(int group_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskDisableGroup, sizeof(CZTaskDisableGroup_Struct)); + CZTaskDisableGroup_Struct* CZTD = (CZTaskDisableGroup_Struct*) pack->pBuffer; + CZTD->group_id = group_id; + CZTD->task_id = task_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneMessagePlayerByName(uint32 Type, const char *CharName, const char *Message){ - uint32 message_len = strlen(CharName) + 1; - uint32 message_len2 = strlen(Message) + 1; - auto pack = - new ServerPacket(ServerOP_CZMessagePlayer, sizeof(CZMessagePlayer_Struct) + message_len + message_len2); +void QuestManager::CrossZoneDisableTaskByRaidID(int raid_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskDisableRaid, sizeof(CZTaskDisableRaid_Struct)); + CZTaskDisableRaid_Struct* CZTD = (CZTaskDisableRaid_Struct*) pack->pBuffer; + CZTD->raid_id = raid_id; + CZTD->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneDisableTaskByGuildID(int guild_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskDisableGuild, sizeof(CZTaskDisableGuild_Struct)); + CZTaskDisableGuild_Struct* CZTD = (CZTaskDisableGuild_Struct*) pack->pBuffer; + CZTD->guild_id = guild_id; + CZTD->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneEnableTaskByCharID(int character_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskEnablePlayer, sizeof(CZTaskEnablePlayer_Struct)); + CZTaskEnablePlayer_Struct* CZTE = (CZTaskEnablePlayer_Struct*) pack->pBuffer; + CZTE->character_id = character_id; + CZTE->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneEnableTaskByGroupID(int group_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskEnableGroup, sizeof(CZTaskEnableGroup_Struct)); + CZTaskEnableGroup_Struct* CZTE = (CZTaskEnableGroup_Struct*) pack->pBuffer; + CZTE->group_id = group_id; + CZTE->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneEnableTaskByRaidID(int raid_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskEnableRaid, sizeof(CZTaskEnableRaid_Struct)); + CZTaskEnableRaid_Struct* CZTE = (CZTaskEnableRaid_Struct*) pack->pBuffer; + CZTE->raid_id = raid_id; + CZTE->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneEnableTaskByGuildID(int guild_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskEnableGuild, sizeof(CZTaskEnableGuild_Struct)); + CZTaskEnableGuild_Struct* CZTE = (CZTaskEnableGuild_Struct*) pack->pBuffer; + CZTE->guild_id = guild_id; + CZTE->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneFailTaskByCharID(int character_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskFailPlayer, sizeof(CZTaskFailPlayer_Struct)); + CZTaskFailPlayer_Struct* CZTF = (CZTaskFailPlayer_Struct*) pack->pBuffer; + CZTF->character_id = character_id; + CZTF->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneFailTaskByGroupID(int group_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskFailGroup, sizeof(CZTaskFailGroup_Struct)); + CZTaskFailGroup_Struct* CZTF = (CZTaskFailGroup_Struct*) pack->pBuffer; + CZTF->group_id = group_id; + CZTF->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneFailTaskByRaidID(int raid_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskFailRaid, sizeof(CZTaskFailRaid_Struct)); + CZTaskFailRaid_Struct* CZTF = (CZTaskFailRaid_Struct*) pack->pBuffer; + CZTF->raid_id = raid_id; + CZTF->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneFailTaskByGuildID(int guild_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskFailGuild, sizeof(CZTaskFailGuild_Struct)); + CZTaskFailGuild_Struct* CZTF = (CZTaskFailGuild_Struct*) pack->pBuffer; + CZTF->guild_id = guild_id; + CZTF->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMarqueeByCharID(int character_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + uint32 message_len = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_CZMarqueePlayer, sizeof(CZMarqueePlayer_Struct) + message_len); + CZMarqueePlayer_Struct* CZMS = (CZMarqueePlayer_Struct*) pack->pBuffer; + CZMS->character_id = character_id; + CZMS->type = type; + CZMS->priority = priority; + CZMS->fade_in = fade_in; + CZMS->fade_out = fade_out; + CZMS->duration = duration; + strn0cpy(CZMS->message, message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMarqueeByGroupID(int group_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + uint32 message_len = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_CZMarqueeGroup, sizeof(CZMarqueeGroup_Struct) + message_len); + CZMarqueeGroup_Struct* CZMS = (CZMarqueeGroup_Struct*) pack->pBuffer; + CZMS->group_id = group_id; + CZMS->type = type; + CZMS->priority = priority; + CZMS->fade_in = fade_in; + CZMS->fade_out = fade_out; + CZMS->duration = duration; + strn0cpy(CZMS->message, message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMarqueeByRaidID(int raid_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + uint32 message_len = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_CZMarqueeRaid, sizeof(CZMarqueeRaid_Struct) + message_len); + CZMarqueeRaid_Struct* CZMS = (CZMarqueeRaid_Struct*) pack->pBuffer; + CZMS->raid_id = raid_id; + CZMS->type = type; + CZMS->priority = priority; + CZMS->fade_in = fade_in; + CZMS->fade_out = fade_out; + CZMS->duration = duration; + strn0cpy(CZMS->message, message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMarqueeByGuildID(int guild_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { + uint32 message_len = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_CZMarqueeGuild, sizeof(CZMarqueeGuild_Struct) + message_len); + CZMarqueeGuild_Struct* CZMS = (CZMarqueeGuild_Struct*) pack->pBuffer; + CZMS->guild_id = guild_id; + CZMS->type = type; + CZMS->priority = priority; + CZMS->fade_in = fade_in; + CZMS->fade_out = fade_out; + CZMS->duration = duration; + strn0cpy(CZMS->message, message, 512); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMessagePlayerByName(uint32 type, const char *character_name, const char *message) { + uint32 message_len = strlen(character_name) + 1; + uint32 message_len2 = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_CZMessagePlayer, sizeof(CZMessagePlayer_Struct) + message_len + message_len2); CZMessagePlayer_Struct* CZSC = (CZMessagePlayer_Struct*) pack->pBuffer; - CZSC->Type = Type; - strn0cpy(CZSC->CharName, CharName, 64); - strn0cpy(CZSC->Message, Message, 512); + CZSC->type = type; + strn0cpy(CZSC->character_name, character_name, 64); + strn0cpy(CZSC->message, message, 512); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message){ - uint32 message_len = strlen(Message) + 1; +void QuestManager::CrossZoneMessagePlayerByGroupID(uint32 type, int group_id, const char *message) { + uint32 message_len = strlen(message) + 1; auto pack = new ServerPacket(ServerOP_CZMessageGroup, sizeof(CZMessageGroup_Struct) + message_len); CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*) pack->pBuffer; - CZGM->Type = Type; - CZGM->GroupID = GroupID; - strn0cpy(CZGM->Message, Message, 512); + CZGM->type = type; + CZGM->group_id = group_id; + strn0cpy(CZGM->message, message, 512); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message){ - uint32 message_len = strlen(Message) + 1; +void QuestManager::CrossZoneMessagePlayerByRaidID(uint32 type, int raid_id, const char *message) { + uint32 message_len = strlen(message) + 1; auto pack = new ServerPacket(ServerOP_CZMessageRaid, sizeof(CZMessageRaid_Struct) + message_len); CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*) pack->pBuffer; - CZRM->Type = Type; - CZRM->RaidID = RaidID; - strn0cpy(CZRM->Message, Message, 512); + CZRM->type = type; + CZRM->raid_id = raid_id; + strn0cpy(CZRM->message, message, 512); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message){ - uint32 message_len = strlen(Message) + 1; +void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 type, int guild_id, const char *message) { + uint32 message_len = strlen(message) + 1; auto pack = new ServerPacket(ServerOP_CZMessageGuild, sizeof(CZMessageGuild_Struct) + message_len); CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*) pack->pBuffer; - CZGM->Type = Type; - CZGM->GuildID = GuildID; - strn0cpy(CZGM->Message, Message, 512); + CZGM->type = type; + CZGM->guild_id = guild_id; + strn0cpy(CZGM->message, message, 512); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name){ +void QuestManager::CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name) { uint32 message_len = strlen(zone_short_name) + 1; auto pack = new ServerPacket(ServerOP_CZMovePlayer, sizeof(CZMovePlayer_Struct) + message_len); CZMovePlayer_Struct* CZGM = (CZMovePlayer_Struct*) pack->pBuffer; @@ -3438,7 +3586,7 @@ void QuestManager::CrossZoneMovePlayerByCharID(int character_id, const char *zon safe_delete(pack); } -void QuestManager::CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name){ +void QuestManager::CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name) { uint32 message_len = strlen(zone_short_name) + 1; auto pack = new ServerPacket(ServerOP_CZMoveGroup, sizeof(CZMoveGroup_Struct) + message_len); CZMoveGroup_Struct* CZGM = (CZMoveGroup_Struct*) pack->pBuffer; @@ -3448,7 +3596,7 @@ void QuestManager::CrossZoneMovePlayerByGroupID(int group_id, const char *zone_s safe_delete(pack); } -void QuestManager::CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name){ +void QuestManager::CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name) { uint32 message_len = strlen(zone_short_name) + 1; auto pack = new ServerPacket(ServerOP_CZMoveRaid, sizeof(CZMoveRaid_Struct) + message_len); CZMoveRaid_Struct* CZRM = (CZMoveRaid_Struct*) pack->pBuffer; @@ -3458,7 +3606,7 @@ void QuestManager::CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_sho safe_delete(pack); } -void QuestManager::CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name){ +void QuestManager::CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name) { uint32 message_len = strlen(zone_short_name) + 1; auto pack = new ServerPacket(ServerOP_CZMoveGuild, sizeof(CZMoveGuild_Struct) + message_len); CZMoveGuild_Struct* CZGM = (CZMoveGuild_Struct*) pack->pBuffer; @@ -3468,79 +3616,523 @@ void QuestManager::CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_s safe_delete(pack); } -void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var){ - uint32 message_len = strlen(id) + 1; - uint32 message_len2 = strlen(m_var) + 1; - uint32 message_len3 = strlen(CharName) + 1; - auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByClientName, - sizeof(CZSetEntVarByClientName_Struct) + message_len + message_len2 + message_len3); - CZSetEntVarByClientName_Struct* CZ = (CZSetEntVarByClientName_Struct*)pack->pBuffer; - strn0cpy(CZ->CharName, CharName, 64); - strn0cpy(CZ->id, id, 256); - strn0cpy(CZ->m_var, m_var, 256); +void QuestManager::CrossZoneMoveInstanceByCharID(int character_id, uint16 instance_id) { + auto pack = new ServerPacket(ServerOP_CZMoveInstancePlayer, sizeof(CZMoveInstancePlayer_Struct)); + CZMoveInstancePlayer_Struct* CZMS = (CZMoveInstancePlayer_Struct*) pack->pBuffer; + CZMS->character_id = character_id; + CZMS->instance_id = instance_id; worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var){ - uint32 message_len = strlen(id) + 1; - uint32 message_len2 = strlen(m_var) + 1; +void QuestManager::CrossZoneMoveInstanceByGroupID(int group_id, uint16 instance_id) { + auto pack = new ServerPacket(ServerOP_CZMoveInstanceGroup, sizeof(CZMoveInstanceGroup_Struct)); + CZMoveInstanceGroup_Struct* CZMS = (CZMoveInstanceGroup_Struct*) pack->pBuffer; + CZMS->group_id = group_id; + CZMS->instance_id = instance_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMoveInstanceByRaidID(int raid_id, uint16 instance_id) { + auto pack = new ServerPacket(ServerOP_CZMoveInstanceRaid, sizeof(CZMoveInstanceRaid_Struct)); + CZMoveInstanceRaid_Struct* CZMS = (CZMoveInstanceRaid_Struct*) pack->pBuffer; + CZMS->raid_id = raid_id; + CZMS->instance_id = instance_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneMoveInstanceByGuildID(int guild_id, uint16 instance_id) { + auto pack = new ServerPacket(ServerOP_CZMoveInstanceGuild, sizeof(CZMoveInstanceGuild_Struct)); + CZMoveInstanceGuild_Struct* CZMS = (CZMoveInstanceGuild_Struct*) pack->pBuffer; + CZMS->guild_id = guild_id; + CZMS->instance_id = instance_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveSpellByCharID(int character_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZRemoveSpellPlayer, sizeof(CZRemoveSpellPlayer_Struct)); + CZRemoveSpellPlayer_Struct* CZCS = (CZRemoveSpellPlayer_Struct*) pack->pBuffer; + CZCS->character_id = character_id; + CZCS->spell_id = spell_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveSpellByGroupID(int group_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZRemoveSpellGroup, sizeof(CZRemoveSpellGroup_Struct)); + CZRemoveSpellGroup_Struct* CZCS = (CZRemoveSpellGroup_Struct*) pack->pBuffer; + CZCS->group_id = group_id; + CZCS->spell_id = spell_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveSpellByRaidID(int raid_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZRemoveSpellRaid, sizeof(CZRemoveSpellRaid_Struct)); + CZRemoveSpellRaid_Struct* CZCS = (CZRemoveSpellRaid_Struct*) pack->pBuffer; + CZCS->raid_id = raid_id; + CZCS->spell_id = spell_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveSpellByGuildID(int guild_id, uint32 spell_id) { + auto pack = new ServerPacket(ServerOP_CZRemoveSpellGuild, sizeof(CZRemoveSpellGuild_Struct)); + CZRemoveSpellGuild_Struct* CZCS = (CZRemoveSpellGuild_Struct*) pack->pBuffer; + CZCS->guild_id = guild_id; + CZCS->spell_id = spell_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveTaskByCharID(int character_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskRemovePlayer, sizeof(CZTaskRemovePlayer_Struct)); + CZTaskRemovePlayer_Struct* CZCS = (CZTaskRemovePlayer_Struct*) pack->pBuffer; + CZCS->character_id = character_id; + CZCS->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveTaskByGroupID(int group_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskRemoveGroup, sizeof(CZTaskRemoveGroup_Struct)); + CZTaskRemoveGroup_Struct* CZCS = (CZTaskRemoveGroup_Struct*) pack->pBuffer; + CZCS->group_id = group_id; + CZCS->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveTaskByRaidID(int raid_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskRemoveRaid, sizeof(CZTaskRemoveRaid_Struct)); + CZTaskRemoveRaid_Struct* CZCS = (CZTaskRemoveRaid_Struct*) pack->pBuffer; + CZCS->raid_id = raid_id; + CZCS->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneRemoveTaskByGuildID(int guild_id, uint32 task_id) { + auto pack = new ServerPacket(ServerOP_CZTaskRemoveGuild, sizeof(CZTaskRemoveGuild_Struct)); + CZTaskRemoveGuild_Struct* CZCS = (CZTaskRemoveGuild_Struct*) pack->pBuffer; + CZCS->guild_id = guild_id; + CZCS->task_id = task_id; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneResetActivityByCharID(int character_id, uint32 task_id, int activity_id) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityResetPlayer, sizeof(CZResetActivityPlayer_Struct)); + CZResetActivityPlayer_Struct* CZCA = (CZResetActivityPlayer_Struct*) pack->pBuffer; + CZCA->character_id = character_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneResetActivityByGroupID(int group_id, uint32 task_id, int activity_id) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityResetGroup, sizeof(CZResetActivityGroup_Struct)); + CZResetActivityGroup_Struct* CZCA = (CZResetActivityGroup_Struct*) pack->pBuffer; + CZCA->group_id = group_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneResetActivityByRaidID(int raid_id, uint32 task_id, int activity_id) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityResetRaid, sizeof(CZResetActivityRaid_Struct)); + CZResetActivityRaid_Struct* CZCA = (CZResetActivityRaid_Struct*) pack->pBuffer; + CZCA->raid_id = raid_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneResetActivityByGuildID(int guild_id, uint32 task_id, int activity_id) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityResetGuild, sizeof(CZResetActivityGuild_Struct)); + CZResetActivityGuild_Struct* CZCA = (CZResetActivityGuild_Struct*) pack->pBuffer; + CZCA->guild_id = guild_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 signal) { + auto pack = new ServerPacket(ServerOP_CZSignalNPC, sizeof(CZNPCSignal_Struct)); + CZNPCSignal_Struct* CZSN = (CZNPCSignal_Struct*) pack->pBuffer; + CZSN->npctype_id = npctype_id; + CZSN->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByCharID(int character_id, uint32 signal) { + auto pack = new ServerPacket(ServerOP_CZSignalClient, sizeof(CZClientSignal_Struct)); + CZClientSignal_Struct* CZSC = (CZClientSignal_Struct*) pack->pBuffer; + CZSC->character_id = character_id; + CZSC->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByClientName(const char *character_name, const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; + uint32 message_len3 = strlen(character_name) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByClientName, sizeof(CZSetEntVarByClientName_Struct) + message_len + message_len2 + message_len3); + CZSetEntVarByClientName_Struct* CZ = (CZSetEntVarByClientName_Struct*) pack->pBuffer; + strn0cpy(CZ->character_name, character_name, 64); + strn0cpy(CZ->variable_name, variable_name, 256); + strn0cpy(CZ->variable_value, variable_value, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSetEntityVariableByGroupID(int group_id, const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGroupID, sizeof(CZSetEntVarByGroupID_Struct) + message_len + message_len2); - CZSetEntVarByGroupID_Struct* CZ = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; + CZSetEntVarByGroupID_Struct* CZ = (CZSetEntVarByGroupID_Struct*) pack->pBuffer; CZ->group_id = group_id; - strn0cpy(CZ->id, id, 256); - strn0cpy(CZ->m_var, m_var, 256); + strn0cpy(CZ->variable_name, variable_name, 256); + strn0cpy(CZ->variable_value, variable_value, 256); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var){ - uint32 message_len = strlen(id) + 1; - uint32 message_len2 = strlen(m_var) + 1; +void QuestManager::CrossZoneSetEntityVariableByRaidID(int raid_id, const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByRaidID, sizeof(CZSetEntVarByRaidID_Struct) + message_len + message_len2); - CZSetEntVarByRaidID_Struct* CZ = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; + CZSetEntVarByRaidID_Struct* CZ = (CZSetEntVarByRaidID_Struct*) pack->pBuffer; CZ->raid_id = raid_id; - strn0cpy(CZ->id, id, 256); - strn0cpy(CZ->m_var, m_var, 256); + strn0cpy(CZ->variable_name, variable_name, 256); + strn0cpy(CZ->variable_value, variable_value, 256); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var){ - uint32 message_len = strlen(id) + 1; - uint32 message_len2 = strlen(m_var) + 1; +void QuestManager::CrossZoneSetEntityVariableByGuildID(int guild_id, const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGuildID, sizeof(CZSetEntVarByGuildID_Struct) + message_len + message_len2); - CZSetEntVarByGuildID_Struct* CZ = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; + CZSetEntVarByGuildID_Struct* CZ = (CZSetEntVarByGuildID_Struct*) pack->pBuffer; CZ->guild_id = guild_id; - strn0cpy(CZ->id, id, 256); - strn0cpy(CZ->m_var, m_var, 256); + strn0cpy(CZ->variable_name, variable_name, 256); + strn0cpy(CZ->variable_value, variable_value, 256); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var){ - uint32 message_len = strlen(id) + 1; - uint32 message_len2 = strlen(m_var) + 1; - auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByNPCTypeID, - sizeof(CZSetEntVarByNPCTypeID_Struct) + message_len + message_len2); - CZSetEntVarByNPCTypeID_Struct* CZSNBYNID = (CZSetEntVarByNPCTypeID_Struct*)pack->pBuffer; +void QuestManager::CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; + auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByNPCTypeID, sizeof(CZSetEntVarByNPCTypeID_Struct) + message_len + message_len2); + CZSetEntVarByNPCTypeID_Struct* CZSNBYNID = (CZSetEntVarByNPCTypeID_Struct*) pack->pBuffer; CZSNBYNID->npctype_id = npctype_id; - strn0cpy(CZSNBYNID->id, id, 256); - strn0cpy(CZSNBYNID->m_var, m_var, 256); + strn0cpy(CZSNBYNID->variable_name, variable_name, 256); + strn0cpy(CZSNBYNID->variable_value, variable_value, 256); worldserver.SendPacket(pack); safe_delete(pack); } -void QuestManager::WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message) { - uint32 message_len = strlen(Message) + 1; +void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 signal) { + auto pack = new ServerPacket(ServerOP_CZSignalGroup, sizeof(CZGroupSignal_Struct)); + CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*) pack->pBuffer; + CZGS->group_id = group_id; + CZGS->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByRaidID(int raid_id, uint32 signal) { + auto pack = new ServerPacket(ServerOP_CZSignalRaid, sizeof(CZRaidSignal_Struct)); + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer; + CZRS->raid_id = raid_id; + CZRS->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByGuildID(int guild_id, uint32 signal) { + auto pack = new ServerPacket(ServerOP_CZSignalGuild, sizeof(CZGuildSignal_Struct)); + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer; + CZGS->guild_id = guild_id; + CZGS->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneSignalPlayerByName(const char *character_name, uint32 signal) { + uint32 message_len = strlen(character_name) + 1; + auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len); + CZClientSignalByName_Struct* CZSC = (CZClientSignalByName_Struct*) pack->pBuffer; + strn0cpy(CZSC->character_name, character_name, 64); + CZSC->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::CrossZoneUpdateActivityByCharID(int character_id, uint32 task_id, int activity_id, int activity_count) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityUpdatePlayer, sizeof(CZTaskActivityUpdatePlayer_Struct)); + CZTaskActivityUpdatePlayer_Struct* CZCA = (CZTaskActivityUpdatePlayer_Struct*) pack->pBuffer; + CZCA->character_id = character_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + CZCA->activity_count = activity_count; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneUpdateActivityByGroupID(int group_id, uint32 task_id, int activity_id, int activity_count) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityUpdateGroup, sizeof(CZTaskActivityUpdateGroup_Struct)); + CZTaskActivityUpdateGroup_Struct* CZCA = (CZTaskActivityUpdateGroup_Struct*) pack->pBuffer; + CZCA->group_id = group_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + CZCA->activity_count = activity_count; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneUpdateActivityByRaidID(int raid_id, uint32 task_id, int activity_id, int activity_count) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityUpdateRaid, sizeof(CZTaskActivityUpdateRaid_Struct)); + CZTaskActivityUpdateRaid_Struct* CZCA = (CZTaskActivityUpdateRaid_Struct*) pack->pBuffer; + CZCA->raid_id = raid_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + CZCA->activity_count = activity_count; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::CrossZoneUpdateActivityByGuildID(int guild_id, uint32 task_id, int activity_id, int activity_count) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_CZTaskActivityUpdateGuild, sizeof(CZTaskActivityUpdateGuild_Struct)); + CZTaskActivityUpdateGuild_Struct* CZCA = (CZTaskActivityUpdateGuild_Struct*) pack->pBuffer; + CZCA->guild_id = guild_id; + CZCA->task_id = task_id; + CZCA->activity_id = activity_id; + CZCA->activity_count = activity_count; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::WorldWideAssignTask(uint32 task_id, bool enforce_level_requirement, uint8 min_status, uint8 max_status) { + QuestManagerCurrentQuestVars(); + if (initiator && owner) { + auto pack = new ServerPacket(ServerOP_WWAssignTask, sizeof(WWAssignTask_Struct)); + WWAssignTask_Struct* WWTA = (WWAssignTask_Struct*) pack->pBuffer; + WWTA->npc_entity_id = owner->GetID(); + WWTA->task_id = task_id; + WWTA->enforce_level_requirement = enforce_level_requirement; + WWTA->min_status = min_status; + WWTA->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); + } +} + +void QuestManager::WorldWideCastSpell(uint32 spell_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWCastSpell, sizeof(WWCastSpell_Struct)); + WWCastSpell_Struct* WWCS = (WWCastSpell_Struct*) pack->pBuffer; + WWCS->spell_id = spell_id; + WWCS->min_status = min_status; + WWCS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideDisableTask(uint32 task_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWDisableTask, sizeof(WWDisableTask_Struct)); + WWDisableTask_Struct* WWDT = (WWDisableTask_Struct*) pack->pBuffer; + WWDT->task_id = task_id; + WWDT->min_status = min_status; + WWDT->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideEnableTask(uint32 task_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWEnableTask, sizeof(WWEnableTask_Struct)); + WWEnableTask_Struct* WWET = (WWEnableTask_Struct*) pack->pBuffer; + WWET->task_id = task_id; + WWET->min_status = min_status; + WWET->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideFailTask(uint32 task_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWFailTask, sizeof(WWFailTask_Struct)); + WWFailTask_Struct* WWFT = (WWFailTask_Struct*) pack->pBuffer; + WWFT->task_id = task_id; + WWFT->min_status = min_status; + WWFT->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message, uint8 min_status, uint8 max_status) { + uint32 message_len = strlen(message) + 1; auto pack = new ServerPacket(ServerOP_WWMarquee, sizeof(WWMarquee_Struct) + message_len); WWMarquee_Struct* WWMS = (WWMarquee_Struct*) pack->pBuffer; - WWMS->Type = Type; - WWMS->Priority = Priority; - WWMS->FadeIn = FadeIn; - WWMS->FadeOut = FadeOut; - WWMS->Duration = Duration; - strn0cpy(WWMS->Message, Message, 512); + WWMS->type = type; + WWMS->priority = priority; + WWMS->fade_in = fade_in; + WWMS->fade_out = fade_out; + WWMS->duration = duration; + strn0cpy(WWMS->message, message, 512); + WWMS->min_status = min_status; + WWMS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideMessage(uint32 type, const char *message, uint8 min_status, uint8 max_status) { + uint32 message_len = strlen(message) + 1; + auto pack = new ServerPacket(ServerOP_WWMessage, sizeof(WWMessage_Struct) + message_len); + WWMessage_Struct* WWMS = (WWMessage_Struct*) pack->pBuffer; + WWMS->type = type; + strn0cpy(WWMS->message, message, 512); + WWMS->min_status = min_status; + WWMS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideMove(const char *zone_short_name, uint8 min_status, uint8 max_status) { + uint32 message_len = strlen(zone_short_name) + 1; + auto pack = new ServerPacket(ServerOP_WWMove, sizeof(WWMove_Struct) + message_len); + WWMove_Struct* WWMS = (WWMove_Struct*) pack->pBuffer;; + strn0cpy(WWMS->zone_short_name, zone_short_name, 32); + WWMS->min_status = min_status; + WWMS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideMoveInstance(uint16 instance_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWMoveInstance, sizeof(WWMoveInstance_Struct)); + WWMoveInstance_Struct* WWMS = (WWMoveInstance_Struct*) pack->pBuffer; + WWMS->instance_id = instance_id; + WWMS->min_status = min_status; + WWMS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideRemoveSpell(uint32 spell_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWRemoveSpell, sizeof(WWRemoveSpell_Struct)); + WWRemoveSpell_Struct* WWRS = (WWRemoveSpell_Struct*) pack->pBuffer; + WWRS->spell_id = spell_id; + WWRS->min_status = min_status; + WWRS->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideRemoveTask(uint32 task_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWRemoveTask, sizeof(WWRemoveTask_Struct)); + WWRemoveTask_Struct* WWRT = (WWRemoveTask_Struct*) pack->pBuffer; + WWRT->task_id = task_id; + WWRT->min_status = min_status; + WWRT->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideResetActivity(uint32 task_id, int activity_id, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWResetActivity, sizeof(WWResetActivity_Struct)); + WWResetActivity_Struct* WWRA = (WWResetActivity_Struct*) pack->pBuffer; + WWRA->task_id = task_id; + WWRA->activity_id = activity_id; + WWRA->min_status = min_status; + WWRA->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideSetEntityVariableClient(const char *variable_name, const char *variable_value, uint8 min_status, uint8 max_status) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; + auto pack = new ServerPacket(ServerOP_WWSetEntityVariableClient, sizeof(WWSetEntVarClient_Struct) + message_len + message_len2); + WWSetEntVarClient_Struct* WWSC = (WWSetEntVarClient_Struct*) pack->pBuffer; + strn0cpy(WWSC->variable_name, variable_name, 256); + strn0cpy(WWSC->variable_value, variable_value, 256); + WWSC->min_status = min_status; + WWSC->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideSetEntityVariableNPC(const char *variable_name, const char *variable_value) { + uint32 message_len = strlen(variable_name) + 1; + uint32 message_len2 = strlen(variable_value) + 1; + auto pack = new ServerPacket(ServerOP_WWSetEntityVariableNPC, sizeof(WWSetEntVarNPC_Struct) + message_len + message_len2); + WWSetEntVarNPC_Struct* WWSN = (WWSetEntVarNPC_Struct*) pack->pBuffer; + strn0cpy(WWSN->variable_name, variable_name, 256); + strn0cpy(WWSN->variable_value, variable_value, 256); + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideSignalClient(uint32 signal, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWSignalClient, sizeof(WWSignalClient_Struct)); + WWSignalClient_Struct* WWSC = (WWSignalClient_Struct*) pack->pBuffer; + WWSC->signal = signal; + WWSC->min_status = min_status; + WWSC->max_status = max_status; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideSignalNPC(uint32 signal) { + auto pack = new ServerPacket(ServerOP_WWSignalNPC, sizeof(WWSignalNPC_Struct)); + WWSignalNPC_Struct* WWSN = (WWSignalNPC_Struct*) pack->pBuffer; + WWSN->signal = signal; + worldserver.SendPacket(pack); + safe_delete(pack); +} + +void QuestManager::WorldWideUpdateActivity(uint32 task_id, int activity_id, int activity_count, uint8 min_status, uint8 max_status) { + auto pack = new ServerPacket(ServerOP_WWUpdateActivity, sizeof(WWUpdateActivity_Struct)); + WWUpdateActivity_Struct* WWUA = (WWUpdateActivity_Struct*) pack->pBuffer; + WWUA->task_id = task_id; + WWUA->activity_id = activity_id; + WWUA->activity_count = activity_count; + WWUA->min_status = min_status; + WWUA->max_status = max_status; worldserver.SendPacket(pack); safe_delete(pack); } diff --git a/zone/questmgr.h b/zone/questmgr.h index 14f4678be..8e9d84cf9 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -284,26 +284,82 @@ public: void CrossZoneAssignTaskByGroupID(int group_id, uint32 task_id, bool enforce_level_requirement = false); void CrossZoneAssignTaskByRaidID(int raid_id, uint32 task_id, bool enforce_level_requirement = false); void CrossZoneAssignTaskByGuildID(int guild_id, uint32 task_id, bool enforce_level_requirement = false); - void CrossZoneSignalPlayerByCharID(int charid, uint32 data); - void CrossZoneSignalPlayerByGroupID(int group_id, uint32 data); - void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data); - void CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data); - void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 data); - void CrossZoneSignalPlayerByName(const char *CharName, uint32 data); - void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var); - void CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var); - void CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var); - void CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var); - void CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var); - void CrossZoneMessagePlayerByName(uint32 Type, const char *CharName, const char *Message); - void CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message); - void CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message); - void CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message); + void CrossZoneCastSpellByCharID(int character_id, uint32 spell_id); + void CrossZoneCastSpellByGroupID(int group_id, uint32 spell_id); + void CrossZoneCastSpellByRaidID(int raid_id, uint32 spell_id); + void CrossZoneCastSpellByGuildID(int guild_id, uint32 spell_id); + void CrossZoneDisableTaskByCharID(int character_id, uint32 task_id); + void CrossZoneDisableTaskByGroupID(int group_id, uint32 task_id); + void CrossZoneDisableTaskByRaidID(int raid_id, uint32 task_id); + void CrossZoneDisableTaskByGuildID(int guild_id, uint32 task_id); + void CrossZoneEnableTaskByCharID(int character_id, uint32 task_id); + void CrossZoneEnableTaskByGroupID(int group_id, uint32 task_id); + void CrossZoneEnableTaskByRaidID(int raid_id, uint32 task_id); + void CrossZoneEnableTaskByGuildID(int guild_id, uint32 task_id); + void CrossZoneFailTaskByCharID(int character_id, uint32 task_id); + void CrossZoneFailTaskByGroupID(int group_id, uint32 task_id); + void CrossZoneFailTaskByRaidID(int raid_id, uint32 task_id); + void CrossZoneFailTaskByGuildID(int guild_id, uint32 task_id); + void CrossZoneMarqueeByCharID(int character_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message); + void CrossZoneMarqueeByGroupID(int group_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message); + void CrossZoneMarqueeByRaidID(int raid_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message); + void CrossZoneMarqueeByGuildID(int guild_id, uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message); + void CrossZoneMessagePlayerByName(uint32 type, const char *character_name, const char *message); + void CrossZoneMessagePlayerByGroupID(uint32 type, int group_id, const char *message); + void CrossZoneMessagePlayerByRaidID(uint32 type, int raid_id, const char *message); + void CrossZoneMessagePlayerByGuildID(uint32 type, int guild_id, const char *message); void CrossZoneMovePlayerByCharID(int character_id, const char *zone_short_name); void CrossZoneMovePlayerByGroupID(int group_id, const char *zone_short_name); void CrossZoneMovePlayerByRaidID(int raid_id, const char *zone_short_name); void CrossZoneMovePlayerByGuildID(int guild_id, const char *zone_short_name); - void WorldWideMarquee(uint32 Type, uint32 Priority, uint32 FadeIn, uint32 FadeOut, uint32 Duration, const char *Message); + void CrossZoneMoveInstanceByCharID(int character_id, uint16 instance_id); + void CrossZoneMoveInstanceByGroupID(int group_id, uint16 instance_id); + void CrossZoneMoveInstanceByRaidID(int raid_id, uint16 instance_id); + void CrossZoneMoveInstanceByGuildID(int guild_id, uint16 instance_id); + void CrossZoneRemoveSpellByCharID(int character_id, uint32 spell_id); + void CrossZoneRemoveSpellByGroupID(int group_id, uint32 spell_id); + void CrossZoneRemoveSpellByRaidID(int raid_id, uint32 spell_id); + void CrossZoneRemoveSpellByGuildID(int guild_id, uint32 spell_id); + void CrossZoneRemoveTaskByCharID(int character_id, uint32 task_id); + void CrossZoneRemoveTaskByGroupID(int group_id, uint32 task_id); + void CrossZoneRemoveTaskByRaidID(int raid_id, uint32 task_id); + void CrossZoneRemoveTaskByGuildID(int guild_id, uint32 task_id); + void CrossZoneResetActivityByCharID(int character_id, uint32 task_id, int activity_id); + void CrossZoneResetActivityByGroupID(int group_id, uint32 task_id, int activity_id); + void CrossZoneResetActivityByRaidID(int raid_id, uint32 task_id, int activity_id); + void CrossZoneResetActivityByGuildID(int guild_id, uint32 task_id, int activity_id); + void CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *variable_name, const char *variable_value); + void CrossZoneSetEntityVariableByClientName(const char *character_name, const char *variable_name, const char *variable_value); + void CrossZoneSetEntityVariableByGroupID(int group_id, const char *variable_name, const char *variable_value); + void CrossZoneSetEntityVariableByRaidID(int raid_id, const char *variable_name, const char *variable_value); + void CrossZoneSetEntityVariableByGuildID(int guild_id, const char *variable_name, const char *variable_value); + void CrossZoneSignalPlayerByCharID(int charid, uint32 signal); + void CrossZoneSignalPlayerByGroupID(int group_id, uint32 signal); + void CrossZoneSignalPlayerByRaidID(int raid_id, uint32 signal); + void CrossZoneSignalPlayerByGuildID(int guild_id, uint32 signal); + void CrossZoneSignalNPCByNPCTypeID(uint32 npctype_id, uint32 signal); + void CrossZoneSignalPlayerByName(const char *character_name, uint32 signal); + void CrossZoneUpdateActivityByCharID(int character_id, uint32 task_id, int activity_id, int activity_count = 1); + void CrossZoneUpdateActivityByGroupID(int group_id, uint32 task_id, int activity_id, int activity_count = 1); + void CrossZoneUpdateActivityByRaidID(int raid_id, uint32 task_id, int activity_id, int activity_count = 1); + void CrossZoneUpdateActivityByGuildID(int guild_id, uint32 task_id, int activity_id, int activity_count = 1); + void WorldWideAssignTask(uint32 task_id, bool enforce_level_requirement = false, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideCastSpell(uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideDisableTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideEnableTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideFailTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideMessage(uint32 type, const char *message, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideMove(const char *zone_short_name, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideMoveInstance(uint16 instance_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideRemoveSpell(uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideRemoveTask(uint32 task_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideResetActivity(uint32 task_id, int activity_id, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideSetEntityVariableClient(const char *variable_name, const char *variable_value, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideSetEntityVariableNPC(const char *variable_name, const char *variable_value); + void WorldWideSignalClient(uint32 signal, uint8 min_status = 0, uint8 max_status = 0); + void WorldWideSignalNPC(uint32 signal); + void WorldWideUpdateActivity(uint32 task_id, int activity_id, int activity_count = 1, uint8 min_status = 0, uint8 max_status = 0); bool EnableRecipe(uint32 recipe_id); bool DisableRecipe(uint32 recipe_id); void ClearNPCTypeCache(int npctype_id); diff --git a/zone/tasks.cpp b/zone/tasks.cpp index 141359d81..35fec576c 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -966,6 +966,16 @@ std::string TaskManager::GetTaskName(uint32 task_id) return std::string(); } +TaskType TaskManager::GetTaskType(uint32 task_id) +{ + if (task_id > 0 && task_id < MAXTASKS) { + if (Tasks[task_id] != nullptr) { + return Tasks[task_id]->type; + } + } + return TaskType::Task; +} + int TaskManager::GetTaskMinLevel(int TaskID) { if (Tasks[TaskID]->MinLevel) @@ -1981,6 +1991,7 @@ void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation *Task, int T // Send an update packet for this single activity taskmanager->SendTaskActivityLong(c, info->TaskID, ActivityID, TaskIndex, Task->Activity[ActivityID].Optional); + taskmanager->SaveClientState(c, this); } } @@ -2238,15 +2249,16 @@ void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID, return; // The Activity is not currently active - if (info->Activity[ActivityID].State != ActivityActive) + if (info->Activity[ActivityID].State == ActivityHidden) return; - Log(Logs::General, Logs::Tasks, "[UPDATE] Increment done count on UpdateTaskActivity"); + + Log(Logs::General, Logs::Tasks, "[UPDATE] Increment done count on UpdateTaskActivity %d %d", ActivityID, Count); IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, Count, ignore_quest_update); } void ClientTaskState::ResetTaskActivity(Client *c, int TaskID, int ActivityID) { - Log(Logs::General, Logs::Tasks, "[UPDATE] ClientTaskState UpdateTaskActivity(%i, %i, 0).", TaskID, ActivityID); + Log(Logs::General, Logs::Tasks, "[RESET] ClientTaskState ResetTaskActivity(%i, %i).", TaskID, ActivityID); // Quick sanity check if (ActivityID < 0 || (ActiveTaskCount == 0 && ActiveTask.TaskID == TASKSLOTEMPTY)) @@ -2288,18 +2300,11 @@ void ClientTaskState::ResetTaskActivity(Client *c, int TaskID, int ActivityID) return; // The Activity is not currently active - if (info->Activity[ActivityID].State != ActivityActive) + if (info->Activity[ActivityID].State == ActivityHidden) return; - - Log(Logs::General, Logs::Tasks, "[UPDATE] ResetTaskActivityCount"); - - info->Activity[ActivityID].DoneCount = 0; - - info->Activity[ActivityID].Updated = true; - - // Send an update packet for this single activity - taskmanager->SendTaskActivityLong(c, info->TaskID, ActivityID, ActiveTaskIndex, - Task->Activity[ActivityID].Optional); + + Log(Logs::General, Logs::Tasks, "[RESET] Increment done count on ResetTaskActivity"); + IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, (info->Activity[ActivityID].DoneCount * -1), false); } void ClientTaskState::ShowClientTasks(Client *c) @@ -3199,6 +3204,68 @@ void ClientTaskState::RemoveTask(Client *c, int sequenceNumber, TaskType type) } } +void ClientTaskState::RemoveTaskByTaskID(Client *c, uint32 task_id) +{ + auto task_type = taskmanager->GetTaskType(task_id); + int character_id = c->CharacterID(); + Log(Logs::General, Logs::Tasks, "[UPDATE] RemoveTaskByTaskID: %d", task_id); + std::string query = fmt::format("DELETE FROM character_activities WHERE charid = {} AND taskid = {}", character_id, task_id); + auto results = database.QueryDatabase(query); + if (!results.Success()) { + LogError("[TASKS] Error in CientTaskState::RemoveTaskByTaskID [{}]", results.ErrorMessage().c_str()); + return; + } + LogTasks("[UPDATE] RemoveTaskByTaskID: {}", query.c_str()); + + query = fmt::format("DELETE FROM character_tasks WHERE charid = {} AND taskid = {} AND type = {}", character_id, task_id, (int) task_type); + results = database.QueryDatabase(query); + if (!results.Success()) { + LogError("[TASKS] Error in ClientTaskState::RemoveTaskByTaskID [{}]", results.ErrorMessage().c_str()); + } + + LogTasks("[UPDATE] RemoveTaskByTaskID: {}", query.c_str()); + + switch (task_type) { + case TaskType::Task: + { + if (ActiveTask.TaskID == task_id) { + auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct)); + CancelTask_Struct* cts = (CancelTask_Struct*)outapp->pBuffer; + cts->SequenceNumber = 0; + cts->type = static_cast(task_type); + LogTasks("[UPDATE] RemoveTaskByTaskID found Task [{}]", task_id); + c->QueuePacket(outapp); + safe_delete(outapp); + ActiveTask.TaskID = TASKSLOTEMPTY; + } + break; + } + case TaskType::Shared: + { + break; // TODO: shared tasks + } + case TaskType::Quest: + { + for (int active_quest = 0; active_quest < MAXACTIVEQUESTS; active_quest++) { + if (ActiveQuests[active_quest].TaskID == task_id) { + auto outapp = new EQApplicationPacket(OP_CancelTask, sizeof(CancelTask_Struct)); + CancelTask_Struct* cts = (CancelTask_Struct*)outapp->pBuffer; + cts->SequenceNumber = active_quest; + cts->type = static_cast(task_type); + LogTasks("[UPDATE] RemoveTaskByTaskID found Quest [{}] at index [{}]", task_id, active_quest); + ActiveQuests[active_quest].TaskID = TASKSLOTEMPTY; + ActiveTaskCount--; + c->QueuePacket(outapp); + safe_delete(outapp); + } + } + } + default: { + break; + } + } +} + void ClientTaskState::AcceptNewTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement) { if (!taskmanager || TaskID < 0 || TaskID >= MAXTASKS) { diff --git a/zone/tasks.h b/zone/tasks.h index 8d948c370..cb4cd63c1 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -217,6 +217,7 @@ public: void CancelTask(Client *c, int SequenceNumber, TaskType type, bool RemoveFromDB = true); void CancelAllTasks(Client *c); void RemoveTask(Client *c, int SequenceNumber, TaskType type); + void RemoveTaskByTaskID(Client *c, uint32 task_id); bool UpdateTasksByNPC(Client *c, int ActivityType, int NPCTypeID); void UpdateTasksOnKill(Client *c, int NPCTypeID); void UpdateTasksForItem(Client *c, ActivityType Type, int ItemID, int Count=1); @@ -300,6 +301,7 @@ public: int GetTaskMinLevel(int TaskID); int GetTaskMaxLevel(int TaskID); std::string GetTaskName(uint32 task_id); + TaskType GetTaskType(uint32 task_id); void TaskSetSelector(Client *c, ClientTaskState *state, Mob *mob, int TaskSetID); void TaskQuestSetSelector(Client *c, ClientTaskState *state, Mob *mob, int count, int *tasks); // task list provided by QuestManager (perl/lua) void SendActiveTasksToClient(Client *c, bool TaskComplete=false); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index c4a544357..ccd7edde8 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -448,7 +448,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) entity_list.MessageStatus(sem->guilddbid, sem->minstatus, sem->type, (char*)sem->message); else { Client* client = entity_list.GetClientByName(sem->to); - if (client != 0) { + if (client) { char* newmessage = 0; if (strstr(sem->message, "^") == 0) client->Message(sem->type, (char*)sem->message); @@ -584,7 +584,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(szp->name); printf("Zoning %s to %s(%u) - %u\n", client != nullptr ? client->GetCleanName() : "Unknown", szp->zone, database.GetZoneID(szp->zone), szp->instance_id); - if (client != 0) { + if (client) { if (strcasecmp(szp->adminname, szp->name) == 0) client->Message(Chat::White, "Zoning to: %s", szp->zone); else if (client->GetAnon() == 1 && client->Admin() > szp->adminrank) @@ -612,7 +612,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_KickPlayer: { ServerKickPlayer_Struct* skp = (ServerKickPlayer_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(skp->name); - if (client != 0) { + if (client) { if (skp->adminrank >= client->Admin()) { client->WorldKick(); if (is_zone_loaded) @@ -628,7 +628,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_KillPlayer: { ServerKillPlayer_Struct* skp = (ServerKillPlayer_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(skp->target); - if (client != 0) { + if (client) { if (skp->admin >= client->Admin()) { client->GMKill(); if (is_zone_loaded) @@ -659,7 +659,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) case ServerOP_FlagUpdate: { Client* client = entity_list.GetClientByAccID(*((uint32*)pack->pBuffer)); - if (client != 0) { + if (client) { client->UpdateAdmin(); } break; @@ -673,7 +673,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) break; ServerGMGoto_Struct* gmg = (ServerGMGoto_Struct*)pack->pBuffer; Client* client = entity_list.GetClientByName(gmg->gotoname); - if (client != 0) { + if (client) { SendEmoteMessage(gmg->myname, 0, 13, "Summoning you to: %s @ %s, %1.1f, %1.1f, %1.1f", client->GetName(), zone->GetShortName(), client->GetX(), client->GetY(), client->GetZ()); auto outpack = new ServerPacket(ServerOP_ZonePlayer, sizeof(ServerZonePlayer_Struct)); ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)outpack->pBuffer; @@ -1888,99 +1888,122 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } break; } - case ServerOP_CZSetEntityVariableByNPCTypeID: + case ServerOP_CZCastSpellPlayer: { - CZSetEntVarByNPCTypeID_Struct* CZM = (CZSetEntVarByNPCTypeID_Struct*)pack->pBuffer; - NPC* n = entity_list.GetNPCByNPCTypeID(CZM->npctype_id); - if (n != 0) { - n->SetEntityVariable(CZM->id, CZM->m_var); + CZCastSpellPlayer_Struct* CZSC = (CZCastSpellPlayer_Struct*) pack->pBuffer; + Client* client = entity_list.GetClientByCharID(CZSC->character_id); + if (client) { + client->SpellFinished(CZSC->spell_id, client); } break; } - case ServerOP_CZSignalNPC: + case ServerOP_CZCastSpellGroup: { - CZNPCSignal_Struct* CZCN = (CZNPCSignal_Struct*)pack->pBuffer; - NPC* n = entity_list.GetNPCByNPCTypeID(CZCN->npctype_id); - if (n != 0) { - n->SignalNPC(CZCN->data); - } - break; - } - case ServerOP_CZSignalClient: - { - CZClientSignal_Struct* CZCS = (CZClientSignal_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByCharID(CZCS->charid); - if (client != 0) { - client->Signal(CZCS->data); - } - break; - } - case ServerOP_CZSignalGroup: - { - CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*)pack->pBuffer; - auto client_group = entity_list.GetGroupByID(CZGS->group_id); + CZCastSpellGroup_Struct* CZSC = (CZCastSpellGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZSC->group_id); if (client_group) { for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { auto group_member = client_group->members[member_index]->CastToClient(); - group_member->Signal(CZGS->data); + group_member->SpellFinished(CZSC->spell_id, group_member); } } } break; } - case ServerOP_CZSignalRaid: + case ServerOP_CZCastSpellRaid: { - CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*)pack->pBuffer; - auto client_raid = entity_list.GetRaidByID(CZRS->raid_id); + CZCastSpellRaid_Struct* CZSC = (CZCastSpellRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZSC->raid_id); if (client_raid) { for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { auto raid_member = client_raid->members[member_index].member->CastToClient(); - raid_member->Signal(CZRS->data); + raid_member->SpellFinished(CZSC->spell_id, raid_member); } } } break; } - case ServerOP_CZSignalGuild: + case ServerOP_CZCastSpellGuild: { - CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GuildID() > 0 && client.second->GuildID() == CZGS->guild_id) { - client.second->Signal(CZGS->data); + CZCastSpellGuild_Struct* CZSC = (CZCastSpellGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZSC->guild_id) { + client.second->SpellFinished(CZSC->spell_id, client.second); } } break; } - case ServerOP_CZSignalClientByName: + case ServerOP_CZMarqueePlayer: { - CZClientSignalByName_Struct* CZCS = (CZClientSignalByName_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByName(CZCS->Name); - if (client != 0) { - client->Signal(CZCS->data); + CZMarqueePlayer_Struct* CZMS = (CZMarqueePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZMS->character_id); + std::string message = CZMS->message; + if (client) { + client->SendMarqueeMessage(CZMS->type, CZMS->priority, CZMS->fade_in, CZMS->fade_out, CZMS->duration, message); + } + break; + } + case ServerOP_CZMarqueeGroup: + { + CZMarqueeGroup_Struct* CZMS = (CZMarqueeGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZMS->group_id); + std::string message = CZMS->message; + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->SendMarqueeMessage(CZMS->type, CZMS->priority, CZMS->fade_in, CZMS->fade_out, CZMS->duration, message); + } + } + } + break; + } + case ServerOP_CZMarqueeRaid: + { + CZMarqueeRaid_Struct* CZMS = (CZMarqueeRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZMS->raid_id); + std::string message = CZMS->message; + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->SendMarqueeMessage(CZMS->type, CZMS->priority, CZMS->fade_in, CZMS->fade_out, CZMS->duration, message); + } + } + } + break; + } + case ServerOP_CZMarqueeGuild: + { + CZMarqueeGuild_Struct* CZMS = (CZMarqueeGuild_Struct*) pack->pBuffer; + std::string message = CZMS->message; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZMS->guild_id) { + client.second->SendMarqueeMessage(CZMS->type, CZMS->priority, CZMS->fade_in, CZMS->fade_out, CZMS->duration, message); + } } break; } case ServerOP_CZMessagePlayer: { - CZMessagePlayer_Struct* CZCS = (CZMessagePlayer_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByName(CZCS->CharName); - if (client != 0) { - client->Message(CZCS->Type, CZCS->Message); + CZMessagePlayer_Struct* CZCS = (CZMessagePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByName(CZCS->character_name); + if (client) { + client->Message(CZCS->type, CZCS->message); } break; } case ServerOP_CZMessageGroup: { - CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*)pack->pBuffer; - auto client_group = entity_list.GetGroupByID(CZGM->GroupID); + CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZGM->group_id); if (client_group) { for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { auto group_member = client_group->members[member_index]->CastToClient(); - group_member->Message(CZGM->Type, CZGM->Message); + group_member->Message(CZGM->type, CZGM->message); } } } @@ -1988,13 +2011,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } case ServerOP_CZMessageRaid: { - CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*)pack->pBuffer; - auto client_raid = entity_list.GetRaidByID(CZRM->RaidID); + CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZRM->raid_id); if (client_raid) { for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { auto raid_member = client_raid->members[member_index].member->CastToClient(); - raid_member->Message(CZRM->Type, CZRM->Message); + raid_member->Message(CZRM->type, CZRM->message); } } } @@ -2002,123 +2025,26 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } case ServerOP_CZMessageGuild: { - CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GuildID() > 0 && client.second->GuildID() == CZGM->GuildID) { - client.second->Message(CZGM->Type, CZGM->Message); - } - } - break; - } - case ServerOP_CZSetEntityVariableByClientName: - { - CZSetEntVarByClientName_Struct* CZCS = (CZSetEntVarByClientName_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByName(CZCS->CharName); - if (client != 0) { - client->SetEntityVariable(CZCS->id, CZCS->m_var); - } - break; - } - case ServerOP_CZSetEntityVariableByGroupID: - { - CZSetEntVarByGroupID_Struct* CZCS = (CZSetEntVarByGroupID_Struct*)pack->pBuffer; - auto client_group = entity_list.GetGroupByID(CZCS->group_id); - if (client_group) { - for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { - if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { - auto group_member = client_group->members[member_index]->CastToClient(); - group_member->SetEntityVariable(CZCS->id, CZCS->m_var); - } - } - } - break; - } - case ServerOP_CZSetEntityVariableByRaidID: - { - CZSetEntVarByRaidID_Struct* CZCS = (CZSetEntVarByRaidID_Struct*)pack->pBuffer; - auto client_raid = entity_list.GetRaidByID(CZCS->raid_id); - if (client_raid) { - for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { - if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { - auto raid_member = client_raid->members[member_index].member->CastToClient(); - raid_member->SetEntityVariable(CZCS->id, CZCS->m_var); - } - } - } - break; - } - case ServerOP_CZSetEntityVariableByGuildID: - { - CZSetEntVarByGuildID_Struct* CZCS = (CZSetEntVarByGuildID_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GuildID() > 0 && client.second->GuildID() == CZCS->guild_id) { - client.second->SetEntityVariable(CZCS->id, CZCS->m_var); - } - } - break; - } - case ServerOP_CZTaskAssign: - { - CZTaskAssign_Struct* CZTA = (CZTaskAssign_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByCharID(CZTA->character_id); - if (client != 0) { - client->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); - } - break; - } - case ServerOP_CZTaskAssignGroup: - { - CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*)pack->pBuffer; - auto client_group = entity_list.GetGroupByID(CZTA->group_id); - if (client_group) { - for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { - if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { - auto group_member = client_group->members[member_index]->CastToClient(); - group_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); - } - } - } - break; - } - case ServerOP_CZTaskAssignRaid: - { - CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*)pack->pBuffer; - auto client_raid = entity_list.GetRaidByID(CZTA->raid_id); - if (client_raid) { - for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { - if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { - auto raid_member = client_raid->members[member_index].member->CastToClient(); - raid_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); - } - } - } - break; - } - case ServerOP_CZTaskAssignGuild: - { - CZTaskAssignGuild_Struct* CZTA = (CZTaskAssignGuild_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { - if (client.second->GuildID() > 0 && client.second->GuildID() == CZTA->guild_id) { - client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZGM->guild_id) { + client.second->Message(CZGM->type, CZGM->message); } } break; } case ServerOP_CZMovePlayer: { - CZMovePlayer_Struct* CZMP = (CZMovePlayer_Struct*)pack->pBuffer; - Client* client = entity_list.GetClientByCharID(CZMP->character_id); - if (client != 0) { + CZMovePlayer_Struct* CZMP = (CZMovePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZMP->character_id); + if (client) { client->MoveZone(CZMP->zone_short_name); } break; } case ServerOP_CZMoveGroup: { - CZMoveGroup_Struct* CZMG = (CZMoveGroup_Struct*)pack->pBuffer; + CZMoveGroup_Struct* CZMG = (CZMoveGroup_Struct*) pack->pBuffer; auto client_group = entity_list.GetGroupByID(CZMG->group_id); if (client_group) { for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { @@ -2132,7 +2058,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } case ServerOP_CZMoveRaid: { - CZMoveRaid_Struct* CZMR = (CZMoveRaid_Struct*)pack->pBuffer; + CZMoveRaid_Struct* CZMR = (CZMoveRaid_Struct*) pack->pBuffer; auto client_raid = entity_list.GetRaidByID(CZMR->raid_id); if (client_raid) { for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { @@ -2146,27 +2072,740 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) } case ServerOP_CZMoveGuild: { - CZMoveGuild_Struct* CZMG = (CZMoveGuild_Struct*)pack->pBuffer; - auto client_list = entity_list.GetClientList(); - for (auto client : client_list) { + CZMoveGuild_Struct* CZMG = (CZMoveGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { if (client.second->GuildID() > 0 && client.second->GuildID() == CZMG->guild_id) { client.second->MoveZone(CZMG->zone_short_name); } } break; } + + case ServerOP_CZMoveInstancePlayer: + { + CZMoveInstancePlayer_Struct* CZMP = (CZMoveInstancePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZMP->character_id); + if (client) { + client->MoveZoneInstance(CZMP->instance_id); + } + break; + } + case ServerOP_CZMoveInstanceGroup: + { + CZMoveInstanceGroup_Struct* CZMG = (CZMoveInstanceGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZMG->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->MoveZoneInstance(CZMG->instance_id); + } + } + } + break; + } + case ServerOP_CZMoveInstanceRaid: + { + CZMoveInstanceRaid_Struct* CZMR = (CZMoveInstanceRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZMR->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->MoveZoneInstance(CZMR->instance_id); + } + } + } + break; + } + case ServerOP_CZMoveInstanceGuild: + { + CZMoveInstanceGuild_Struct* CZMG = (CZMoveInstanceGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZMG->guild_id) { + client.second->MoveZoneInstance(CZMG->instance_id); + } + } + break; + } + case ServerOP_CZRemoveSpellPlayer: + { + CZRemoveSpellPlayer_Struct* CZRS = (CZRemoveSpellPlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZRS->character_id); + if (client) { + client->BuffFadeBySpellID(CZRS->spell_id); + } + break; + } + case ServerOP_CZRemoveSpellGroup: + { + CZRemoveSpellGroup_Struct* CZRS = (CZRemoveSpellGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZRS->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->BuffFadeBySpellID(CZRS->spell_id); + } + } + } + break; + } + case ServerOP_CZRemoveSpellRaid: + { + CZRemoveSpellRaid_Struct* CZRS = (CZRemoveSpellRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZRS->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->BuffFadeBySpellID(CZRS->spell_id); + } + } + } + break; + } + case ServerOP_CZRemoveSpellGuild: + { + CZRemoveSpellGuild_Struct* CZRS = (CZRemoveSpellGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZRS->guild_id) { + client.second->BuffFadeBySpellID(CZRS->spell_id); + } + } + break; + } + case ServerOP_CZSetEntityVariableByClientName: + { + CZSetEntVarByClientName_Struct* CZCS = (CZSetEntVarByClientName_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByName(CZCS->character_name); + if (client) { + client->SetEntityVariable(CZCS->variable_name, CZCS->variable_value); + } + break; + } + case ServerOP_CZSetEntityVariableByGroupID: + { + CZSetEntVarByGroupID_Struct* CZCS = (CZSetEntVarByGroupID_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZCS->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->SetEntityVariable(CZCS->variable_name, CZCS->variable_value); + } + } + } + break; + } + case ServerOP_CZSetEntityVariableByRaidID: + { + CZSetEntVarByRaidID_Struct* CZCS = (CZSetEntVarByRaidID_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZCS->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->SetEntityVariable(CZCS->variable_name, CZCS->variable_value); + } + } + } + break; + } + case ServerOP_CZSetEntityVariableByGuildID: + { + CZSetEntVarByGuildID_Struct* CZCS = (CZSetEntVarByGuildID_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZCS->guild_id) { + client.second->SetEntityVariable(CZCS->variable_name, CZCS->variable_value); + } + } + break; + } + case ServerOP_CZSetEntityVariableByNPCTypeID: + { + CZSetEntVarByNPCTypeID_Struct* CZM = (CZSetEntVarByNPCTypeID_Struct*) pack->pBuffer; + auto npc = entity_list.GetNPCByNPCTypeID(CZM->npctype_id); + if (npc != 0) { + npc->SetEntityVariable(CZM->variable_name, CZM->variable_value); + } + break; + } + case ServerOP_CZSignalNPC: + { + CZNPCSignal_Struct* CZCN = (CZNPCSignal_Struct*) pack->pBuffer; + auto npc = entity_list.GetNPCByNPCTypeID(CZCN->npctype_id); + if (npc != 0) { + npc->SignalNPC(CZCN->signal); + } + break; + } + case ServerOP_CZSignalClient: + { + CZClientSignal_Struct* CZCS = (CZClientSignal_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZCS->character_id); + if (client) { + client->Signal(CZCS->signal); + } + break; + } + case ServerOP_CZSignalGroup: + { + CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZGS->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->Signal(CZGS->signal); + } + } + } + break; + } + case ServerOP_CZSignalRaid: + { + CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZRS->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->Signal(CZRS->signal); + } + } + } + break; + } + case ServerOP_CZSignalGuild: + { + CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZGS->guild_id) { + client.second->Signal(CZGS->signal); + } + } + break; + } + case ServerOP_CZSignalClientByName: + { + CZClientSignalByName_Struct* CZCS = (CZClientSignalByName_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByName(CZCS->character_name); + if (client) { + client->Signal(CZCS->signal); + } + break; + } + case ServerOP_CZTaskAssignPlayer: + { + CZTaskAssignPlayer_Struct* CZTA = (CZTaskAssignPlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZTA->character_id); + if (client) { + client->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + break; + } + case ServerOP_CZTaskAssignGroup: + { + CZTaskAssignGroup_Struct* CZTA = (CZTaskAssignGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZTA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + } + break; + } + case ServerOP_CZTaskAssignRaid: + { + CZTaskAssignRaid_Struct* CZTA = (CZTaskAssignRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZTA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + } + break; + } + case ServerOP_CZTaskAssignGuild: + { + CZTaskAssignGuild_Struct* CZTA = (CZTaskAssignGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZTA->guild_id) { + client.second->AssignTask(CZTA->task_id, CZTA->npc_entity_id, CZTA->enforce_level_requirement); + } + } + break; + } + case ServerOP_CZTaskActivityResetPlayer: + { + CZTaskActivityResetPlayer_Struct* CZRA = (CZTaskActivityResetPlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZRA->character_id); + if (client) { + client->ResetTaskActivity(CZRA->task_id, CZRA->activity_id); + } + break; + } + case ServerOP_CZTaskActivityResetGroup: + { + CZTaskActivityResetGroup_Struct* CZRA = (CZTaskActivityResetGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZRA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->ResetTaskActivity(CZRA->task_id, CZRA->activity_id); + } + } + } + break; + } + case ServerOP_CZTaskActivityResetRaid: + { + CZTaskActivityResetRaid_Struct* CZRA = (CZTaskActivityResetRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZRA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->ResetTaskActivity(CZRA->task_id, CZRA->activity_id); + } + } + } + break; + } + case ServerOP_CZTaskActivityResetGuild: + { + CZTaskActivityResetGuild_Struct* CZRA = (CZTaskActivityResetGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZRA->guild_id) { + client.second->ResetTaskActivity(CZRA->task_id, CZRA->activity_id); + } + } + break; + } + case ServerOP_CZTaskActivityUpdatePlayer: + { + CZTaskActivityUpdatePlayer_Struct* CZUA = (CZTaskActivityUpdatePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZUA->character_id); + if (client) { + client->UpdateTaskActivity(CZUA->task_id, CZUA->activity_id, CZUA->activity_count); + } + break; + } + case ServerOP_CZTaskActivityUpdateGroup: + { + CZTaskActivityUpdateGroup_Struct* CZUA = (CZTaskActivityUpdateGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZUA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->UpdateTaskActivity(CZUA->task_id, CZUA->activity_id, CZUA->activity_count); + } + } + } + break; + } + case ServerOP_CZTaskActivityUpdateRaid: + { + CZTaskActivityUpdateRaid_Struct* CZUA = (CZTaskActivityUpdateRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZUA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->UpdateTaskActivity(CZUA->task_id, CZUA->activity_id, CZUA->activity_count); + } + } + } + break; + } + case ServerOP_CZTaskActivityUpdateGuild: + { + CZTaskActivityUpdateGuild_Struct* CZUA = (CZTaskActivityUpdateGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZUA->guild_id) { + client.second->UpdateTaskActivity(CZUA->task_id, CZUA->activity_id, CZUA->activity_count); + } + } + break; + } + case ServerOP_CZTaskDisablePlayer: + { + CZTaskDisablePlayer_Struct* CZUA = (CZTaskDisablePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZUA->character_id); + if (client) { + client->DisableTask(1, (int*) CZUA->task_id); + } + break; + } + case ServerOP_CZTaskDisableGroup: + { + CZTaskDisableGroup_Struct* CZUA = (CZTaskDisableGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZUA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->DisableTask(1, (int*) CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskDisableRaid: + { + CZTaskDisableRaid_Struct* CZUA = (CZTaskDisableRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZUA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->DisableTask(1, (int*) CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskDisableGuild: + { + CZTaskDisableGuild_Struct* CZUA = (CZTaskDisableGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZUA->guild_id) { + client.second->DisableTask(1, (int*) CZUA->task_id); + } + } + break; + } + case ServerOP_CZTaskEnablePlayer: + { + CZTaskEnablePlayer_Struct* CZUA = (CZTaskEnablePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZUA->character_id); + if (client) { + client->EnableTask(1, (int*) CZUA->task_id); + } + break; + } + case ServerOP_CZTaskEnableGroup: + { + CZTaskEnableGroup_Struct* CZUA = (CZTaskEnableGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZUA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->EnableTask(1, (int*) CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskEnableRaid: + { + CZTaskEnableRaid_Struct* CZUA = (CZTaskEnableRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZUA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->EnableTask(1, (int*) CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskEnableGuild: + { + CZTaskEnableGuild_Struct* CZUA = (CZTaskEnableGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZUA->guild_id) { + client.second->EnableTask(1, (int*) CZUA->task_id); + } + } + break; + } + case ServerOP_CZTaskFailPlayer: + { + CZTaskFailPlayer_Struct* CZUA = (CZTaskFailPlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZUA->character_id); + if (client) { + client->FailTask(CZUA->task_id); + } + break; + } + case ServerOP_CZTaskFailGroup: + { + CZTaskFailGroup_Struct* CZUA = (CZTaskFailGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZUA->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->FailTask(CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskFailRaid: + { + CZTaskFailRaid_Struct* CZUA = (CZTaskFailRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZUA->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->FailTask(CZUA->task_id); + } + } + } + break; + } + case ServerOP_CZTaskFailGuild: + { + CZTaskFailGuild_Struct* CZUA = (CZTaskFailGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZUA->guild_id) { + client.second->FailTask(CZUA->task_id); + } + } + break; + } + case ServerOP_CZTaskRemovePlayer: + { + CZTaskRemovePlayer_Struct* CZTR = (CZTaskRemovePlayer_Struct*) pack->pBuffer; + auto client = entity_list.GetClientByCharID(CZTR->character_id); + if (client) { + client->RemoveTaskByTaskID(CZTR->task_id); + } + break; + } + case ServerOP_CZTaskRemoveGroup: + { + CZTaskRemoveGroup_Struct* CZTR = (CZTaskRemoveGroup_Struct*) pack->pBuffer; + auto client_group = entity_list.GetGroupByID(CZTR->group_id); + if (client_group) { + for (int member_index = 0; member_index < MAX_GROUP_MEMBERS; member_index++) { + if (client_group->members[member_index] && client_group->members[member_index]->IsClient()) { + auto group_member = client_group->members[member_index]->CastToClient(); + group_member->RemoveTaskByTaskID(CZTR->task_id); + } + } + } + break; + } + case ServerOP_CZTaskRemoveRaid: + { + CZTaskRemoveRaid_Struct* CZTR = (CZTaskRemoveRaid_Struct*) pack->pBuffer; + auto client_raid = entity_list.GetRaidByID(CZTR->raid_id); + if (client_raid) { + for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) { + if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) { + auto raid_member = client_raid->members[member_index].member->CastToClient(); + raid_member->RemoveTaskByTaskID(CZTR->task_id); + } + } + } + break; + } + case ServerOP_CZTaskRemoveGuild: + { + CZTaskRemoveGuild_Struct* CZTR = (CZTaskRemoveGuild_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + if (client.second->GuildID() > 0 && client.second->GuildID() == CZTR->guild_id) { + client.second->RemoveTaskByTaskID(CZTR->task_id); + } + } + break; + } + case ServerOP_WWAssignTask: + { + WWAssignTask_Struct* WWAT = (WWAssignTask_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWAT->min_status && (client_status <= WWAT->max_status || WWAT->max_status == 0)) { + client.second->AssignTask(WWAT->task_id, WWAT->npc_entity_id, WWAT->enforce_level_requirement); + } + } + break; + } + case ServerOP_WWCastSpell: + { + WWCastSpell_Struct* WWCS = (WWCastSpell_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWCS->min_status && (client_status <= WWCS->max_status || WWCS->max_status == 0)) { + client.second->SpellFinished(WWCS->spell_id, client.second); + } + } + break; + } + case ServerOP_WWDisableTask: + { + WWDisableTask_Struct* WWDT = (WWDisableTask_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWDT->min_status && (client_status <= WWDT->max_status || WWDT->max_status == 0)) { + client.second->DisableTask(1, (int *) WWDT->task_id); + } + } + break; + } + case ServerOP_WWEnableTask: + { + WWEnableTask_Struct* WWET = (WWEnableTask_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWET->min_status && (client_status <= WWET->max_status || WWET->max_status == 0)) { + client.second->EnableTask(1, (int *) WWET->task_id); + } + } + break; + } + case ServerOP_WWFailTask: + { + WWFailTask_Struct* WWFT = (WWFailTask_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWFT->min_status && (client_status <= WWFT->max_status || WWFT->max_status == 0)) { + client.second->FailTask(WWFT->task_id); + } + } + break; + } case ServerOP_WWMarquee: { - WWMarquee_Struct* WWMS = (WWMarquee_Struct*)pack->pBuffer; - std::list client_list; - entity_list.GetClientList(client_list); - auto iter = client_list.begin(); - std::string Message = WWMS->Message; - while (iter != client_list.end()) { - Client* client = (*iter); - client->SendMarqueeMessage(WWMS->Type, WWMS->Priority, WWMS->FadeIn, WWMS->FadeOut, WWMS->Duration, Message); - iter++; + WWMarquee_Struct* WWMS = (WWMarquee_Struct*) pack->pBuffer; + std::string message = WWMS->message; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWMS->min_status && (client_status <= WWMS->max_status || WWMS->max_status == 0)) { + client.second->SendMarqueeMessage(WWMS->type, WWMS->priority, WWMS->fade_in, WWMS->fade_out, WWMS->duration, message); + } } + break; + } + case ServerOP_WWMessage: + { + WWMessage_Struct* WWMS = (WWMessage_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWMS->min_status && (client_status <= WWMS->max_status || WWMS->max_status == 0)) { + client.second->Message(WWMS->type, WWMS->message); + } + } + break; + } + case ServerOP_WWMove: + { + WWMove_Struct* WWMS = (WWMove_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWMS->min_status && (client_status <= WWMS->max_status || WWMS->max_status == 0)) { + client.second->MoveZone(WWMS->zone_short_name); + } + } + break; + } + case ServerOP_WWMoveInstance: + { + WWMoveInstance_Struct* WWMS = (WWMoveInstance_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWMS->min_status && (client_status <= WWMS->max_status || WWMS->max_status == 0)) { + client.second->MoveZoneInstance(WWMS->instance_id); + } + } + break; + } + case ServerOP_WWRemoveSpell: + { + WWRemoveSpell_Struct* WWRS = (WWRemoveSpell_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWRS->min_status && (client_status <= WWRS->max_status || WWRS->max_status == 0)) { + client.second->BuffFadeBySpellID(WWRS->spell_id); + } + } + break; + } + case ServerOP_WWRemoveTask: + { + WWRemoveTask_Struct* WWRT = (WWRemoveTask_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWRT->min_status && (client_status <= WWRT->max_status || WWRT->max_status == 0)) { + client.second->RemoveTaskByTaskID(WWRT->task_id); + } + } + break; + } + case ServerOP_WWResetActivity: + { + WWResetActivity_Struct* WWRA = (WWResetActivity_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWRA->min_status && (client_status <= WWRA->max_status || WWRA->max_status == 0)) { + client.second->ResetTaskActivity(WWRA->task_id, WWRA->activity_id); + } + } + break; + } + case ServerOP_WWSetEntityVariableClient: + { + WWSetEntVarClient_Struct* WWSC = (WWSetEntVarClient_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWSC->min_status && (client_status <= WWSC->max_status || WWSC->max_status == 0)) { + client.second->SetEntityVariable(WWSC->variable_name, WWSC->variable_value); + } + } + break; + } + case ServerOP_WWSetEntityVariableNPC: + { + WWSetEntVarNPC_Struct* WWSN = (WWSetEntVarNPC_Struct*) pack->pBuffer; + for (auto &npc : entity_list.GetNPCList()) { + npc.second->SetEntityVariable(WWSN->variable_name, WWSN->variable_value); + } + break; + } + case ServerOP_WWSignalClient: + { + WWSignalClient_Struct* WWSC = (WWSignalClient_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWSC->min_status && (client_status <= WWSC->max_status || WWSC->max_status == 0)) { + client.second->Signal(WWSC->signal); + } + } + break; + } + case ServerOP_WWSignalNPC: + { + WWSignalNPC_Struct* WWSN = (WWSignalNPC_Struct*) pack->pBuffer; + for (auto &npc : entity_list.GetNPCList()) { + npc.second->SignalNPC(WWSN->signal); + } + break; + } + case ServerOP_WWUpdateActivity: + { + WWUpdateActivity_Struct* WWUA = (WWUpdateActivity_Struct*) pack->pBuffer; + for (auto &client : entity_list.GetClientList()) { + auto client_status = client.second->Admin(); + if (client_status >= WWUA->min_status && (client_status <= WWUA->max_status || WWUA->max_status == 0)) { + client.second->UpdateTaskActivity(WWUA->task_id, WWUA->activity_id, WWUA->activity_count); + } + } + break; } case ServerOP_ReloadWorld: From e033d89a32e9ffb5ff67e3ab4e3cd594beeb0c9f Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Jul 2020 18:16:20 -0400 Subject: [PATCH 224/272] Add Lua overrides to worldwide methods to make additional parameters optional. --- zone/lua_general.cpp | 176 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 163 insertions(+), 13 deletions(-) diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 4428dadfa..5ad1b2266 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -1310,54 +1310,158 @@ void lua_world_wide_assign_task(uint32 task_id, bool enforce_level_requirement) quest_manager.WorldWideAssignTask(task_id, enforce_level_requirement); } +void lua_world_wide_assign_task(uint32 task_id, bool enforce_level_requirement, uint8 min_status) { + quest_manager.WorldWideAssignTask(task_id, enforce_level_requirement, min_status); +} + +void lua_world_wide_assign_task(uint32 task_id, bool enforce_level_requirement, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideAssignTask(task_id, enforce_level_requirement, min_status, max_status); +} + void lua_world_wide_cast_spell(uint32 spell_id) { quest_manager.WorldWideCastSpell(spell_id); } +void lua_world_wide_cast_spell(uint32 spell_id, uint8 min_status) { + quest_manager.WorldWideCastSpell(spell_id, min_status); +} + +void lua_world_wide_cast_spell(uint32 spell_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideCastSpell(spell_id, min_status, max_status); +} + void lua_world_wide_disable_task(uint32 task_id) { quest_manager.WorldWideDisableTask(task_id); } +void lua_world_wide_disable_task(uint32 task_id, uint8 min_status) { + quest_manager.WorldWideDisableTask(task_id, min_status); +} + +void lua_world_wide_disable_task(uint32 task_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideDisableTask(task_id, min_status, max_status); +} + void lua_world_wide_enable_task(uint32 task_id) { quest_manager.WorldWideEnableTask(task_id); } +void lua_world_wide_enable_task(uint32 task_id, uint8 min_status) { + quest_manager.WorldWideEnableTask(task_id, min_status); +} + +void lua_world_wide_enable_task(uint32 task_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideEnableTask(task_id, min_status, max_status); +} + void lua_world_wide_fail_task(uint32 task_id) { quest_manager.WorldWideFailTask(task_id); } +void lua_world_wide_fail_task(uint32 task_id, uint8 min_status) { + quest_manager.WorldWideFailTask(task_id, min_status); +} + +void lua_world_wide_fail_task(uint32 task_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideFailTask(task_id, min_status, max_status); +} + void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message) { quest_manager.WorldWideMarquee(type, priority, fade_in, fade_out, duration, message); } +void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message, uint8 min_status) { + quest_manager.WorldWideMarquee(type, priority, fade_in, fade_out, duration, message, min_status); +} + +void lua_world_wide_marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char *message, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideMarquee(type, priority, fade_in, fade_out, duration, message, min_status, max_status); +} + void lua_world_wide_message(uint32 type, const char *message) { quest_manager.WorldWideMessage(type, message); } +void lua_world_wide_message(uint32 type, const char *message, uint8 min_status) { + quest_manager.WorldWideMessage(type, message, min_status); +} + +void lua_world_wide_message(uint32 type, const char *message, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideMessage(type, message, min_status, max_status); +} + void lua_world_wide_move(const char *zone_short_name) { quest_manager.WorldWideMove(zone_short_name); } +void lua_world_wide_move(const char *zone_short_name, uint8 min_status) { + quest_manager.WorldWideMove(zone_short_name, min_status); +} + +void lua_world_wide_move(const char *zone_short_name, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideMove(zone_short_name, min_status, max_status); +} + void lua_world_wide_move_instance(uint16 instance_id) { quest_manager.WorldWideMoveInstance(instance_id); } +void lua_world_wide_move_instance(uint16 instance_id, uint8 min_status) { + quest_manager.WorldWideMoveInstance(instance_id, min_status); +} + +void lua_world_wide_move_instance(uint16 instance_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideMoveInstance(instance_id, min_status, max_status); +} + void lua_world_wide_remove_spell(uint32 spell_id) { quest_manager.WorldWideRemoveSpell(spell_id); } +void lua_world_wide_remove_spell(uint32 spell_id, uint8 min_status) { + quest_manager.WorldWideRemoveSpell(spell_id, min_status); +} + +void lua_world_wide_remove_spell(uint32 spell_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideRemoveSpell(spell_id, min_status, max_status); +} + void lua_world_wide_remove_task(uint32 task_id) { quest_manager.WorldWideRemoveTask(task_id); } +void lua_world_wide_remove_task(uint32 task_id, uint8 min_status) { + quest_manager.WorldWideRemoveTask(task_id, min_status); +} + +void lua_world_wide_remove_task(uint32 task_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideRemoveTask(task_id, min_status, max_status); +} + void lua_world_wide_reset_activity(uint32 task_id, int activity_id) { quest_manager.WorldWideResetActivity(task_id, activity_id); } +void lua_world_wide_reset_activity(uint32 task_id, int activity_id, uint8 min_status) { + quest_manager.WorldWideResetActivity(task_id, activity_id, min_status); +} + +void lua_world_wide_reset_activity(uint32 task_id, int activity_id, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideResetActivity(task_id, activity_id, min_status, max_status); +} + void lua_world_wide_set_entity_variable_client(const char *variable_name, const char *variable_value) { quest_manager.WorldWideSetEntityVariableClient(variable_name, variable_value); } +void lua_world_wide_set_entity_variable_client(const char *variable_name, const char *variable_value, uint8 min_status) { + quest_manager.WorldWideSetEntityVariableClient(variable_name, variable_value, min_status); +} + +void lua_world_wide_set_entity_variable_client(const char *variable_name, const char *variable_value, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideSetEntityVariableClient(variable_name, variable_value, min_status, max_status); +} + void lua_world_wide_set_entity_variable_npc(const char *variable_name, const char *variable_value) { quest_manager.WorldWideSetEntityVariableNPC(variable_name, variable_value); } @@ -1366,6 +1470,14 @@ void lua_world_wide_signal_client(uint32 signal) { quest_manager.WorldWideSignalClient(signal); } +void lua_world_wide_signal_client(uint32 signal, uint8 min_status) { + quest_manager.WorldWideSignalClient(signal, min_status); +} + +void lua_world_wide_signal_client(uint32 signal, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideSignalClient(signal, min_status, max_status); +} + void lua_world_wide_signal_npc(uint32 signal) { quest_manager.WorldWideSignalNPC(signal); } @@ -1378,6 +1490,14 @@ void lua_world_wide_update_activity(uint32 task_id, int activity_id, int activit quest_manager.WorldWideUpdateActivity(task_id, activity_id, activity_count); } +void lua_world_wide_update_activity(uint32 task_id, int activity_id, int activity_count, uint8 min_status) { + quest_manager.WorldWideUpdateActivity(task_id, activity_id, activity_count, min_status); +} + +void lua_world_wide_update_activity(uint32 task_id, int activity_id, int activity_count, uint8 min_status, uint8 max_status) { + quest_manager.WorldWideUpdateActivity(task_id, activity_id, activity_count, min_status, max_status); +} + luabind::adl::object lua_get_qglobals(lua_State *L, Lua_NPC npc, Lua_Client client) { luabind::adl::object ret = luabind::newtable(L); @@ -2258,23 +2378,53 @@ luabind::scope lua_register_general() { luabind::def("cross_zone_update_activity_by_guild_id", (void(*)(int,uint32,int,int))&lua_cross_zone_update_activity_by_guild_id), luabind::def("world_wide_assign_task", (void(*)(uint32))&lua_world_wide_assign_task), luabind::def("world_wide_assign_task", (void(*)(uint32,bool))&lua_world_wide_assign_task), - luabind::def("world_wide_cast_spell", &lua_world_wide_cast_spell), - luabind::def("world_wide_disable_task", &lua_world_wide_disable_task), - luabind::def("world_wide_enable_task", &lua_world_wide_enable_task), - luabind::def("world_wide_fail_task", &lua_world_wide_fail_task), - luabind::def("world_wide_marquee", &lua_world_wide_marquee), - luabind::def("world_wide_message", &lua_world_wide_message), - luabind::def("world_wide_move", &lua_world_wide_move), - luabind::def("world_wide_move_instance", &lua_world_wide_move_instance), - luabind::def("world_wide_remove_spell", &lua_world_wide_remove_spell), - luabind::def("world_wide_remove_task", &lua_world_wide_remove_task), - luabind::def("world_wide_reset_activity", &lua_world_wide_reset_activity), - luabind::def("world_wide_set_entity_variable_client", &lua_world_wide_set_entity_variable_client), + luabind::def("world_wide_assign_task", (void(*)(uint32,bool,uint8))&lua_world_wide_assign_task), + luabind::def("world_wide_assign_task", (void(*)(uint32,bool,uint8,uint8))&lua_world_wide_assign_task), + luabind::def("world_wide_cast_spell", (void(*)(uint32))&lua_world_wide_cast_spell), + luabind::def("world_wide_cast_spell", (void(*)(uint32,uint8))&lua_world_wide_cast_spell), + luabind::def("world_wide_cast_spell", (void(*)(uint32,uint8,uint8))&lua_world_wide_cast_spell), + luabind::def("world_wide_disable_task", (void(*)(uint32))&lua_world_wide_disable_task), + luabind::def("world_wide_disable_task", (void(*)(uint32,uint8))&lua_world_wide_disable_task), + luabind::def("world_wide_disable_task", (void(*)(uint32,uint8,uint8))&lua_world_wide_disable_task), + luabind::def("world_wide_enable_task", (void(*)(uint32))&lua_world_wide_enable_task), + luabind::def("world_wide_enable_task", (void(*)(uint32,uint8))&lua_world_wide_enable_task), + luabind::def("world_wide_enable_task", (void(*)(uint32,uint8,uint8))&lua_world_wide_enable_task), + luabind::def("world_wide_fail_task", (void(*)(uint32))&lua_world_wide_fail_task), + luabind::def("world_wide_fail_task", (void(*)(uint32,uint8))&lua_world_wide_fail_task), + luabind::def("world_wide_fail_task", (void(*)(uint32,uint8,uint8))&lua_world_wide_fail_task), + luabind::def("world_wide_marquee", (void(*)(uint32,uint32,uint32,uint32,uint32,const char*))&lua_world_wide_marquee), + luabind::def("world_wide_marquee", (void(*)(uint32,uint32,uint32,uint32,uint32,const char*,uint8))&lua_world_wide_marquee), + luabind::def("world_wide_marquee", (void(*)(uint32,uint32,uint32,uint32,uint32,const char*,uint8,uint8))&lua_world_wide_marquee), + luabind::def("world_wide_message", (void(*)(uint32,const char*))&lua_world_wide_message), + luabind::def("world_wide_message", (void(*)(uint32,const char*,uint8))&lua_world_wide_message), + luabind::def("world_wide_message", (void(*)(uint32,const char*,uint8,uint8))&lua_world_wide_message), + luabind::def("world_wide_move", (void(*)(const char*))&lua_world_wide_move), + luabind::def("world_wide_move", (void(*)(const char*,uint8))&lua_world_wide_move), + luabind::def("world_wide_move", (void(*)(const char*,uint8,uint8))&lua_world_wide_move), + luabind::def("world_wide_move_instance", (void(*)(uint16))&lua_world_wide_move_instance), + luabind::def("world_wide_move_instance", (void(*)(uint16,uint8))&lua_world_wide_move_instance), + luabind::def("world_wide_move_instance", (void(*)(uint16,uint8,uint8))&lua_world_wide_move_instance), + luabind::def("world_wide_remove_spell", (void(*)(uint32))&lua_world_wide_remove_spell), + luabind::def("world_wide_remove_spell", (void(*)(uint32,uint8))&lua_world_wide_remove_spell), + luabind::def("world_wide_remove_spell", (void(*)(uint32,uint8,uint8))&lua_world_wide_remove_spell), + luabind::def("world_wide_remove_task", (void(*)(uint32))&lua_world_wide_remove_task), + luabind::def("world_wide_remove_task", (void(*)(uint32,uint8))&lua_world_wide_remove_task), + luabind::def("world_wide_remove_task", (void(*)(uint32,uint8,uint8))&lua_world_wide_remove_task), + luabind::def("world_wide_reset_activity", (void(*)(uint32,int))&lua_world_wide_reset_activity), + luabind::def("world_wide_reset_activity", (void(*)(uint32,int,uint8))&lua_world_wide_reset_activity), + luabind::def("world_wide_reset_activity", (void(*)(uint32,int,uint8,uint8))&lua_world_wide_reset_activity), + luabind::def("world_wide_set_entity_variable_client", (void(*)(const char*,const char*))&lua_world_wide_set_entity_variable_client), + luabind::def("world_wide_set_entity_variable_client", (void(*)(const char*,const char*,uint8))&lua_world_wide_set_entity_variable_client), + luabind::def("world_wide_set_entity_variable_client", (void(*)(const char*,const char*,uint8,uint8))&lua_world_wide_set_entity_variable_client), luabind::def("world_wide_set_entity_variable_npc", &lua_world_wide_set_entity_variable_npc), - luabind::def("world_wide_signal_client", &lua_world_wide_signal_client), + luabind::def("world_wide_signal_client", (void(*)(uint32))&lua_world_wide_signal_client), + luabind::def("world_wide_signal_client", (void(*)(uint32,uint8))&lua_world_wide_signal_client), + luabind::def("world_wide_signal_client", (void(*)(uint32,uint8,uint8))&lua_world_wide_signal_client), luabind::def("world_wide_signal_npc", &lua_world_wide_signal_npc), luabind::def("world_wide_update_activity", (void(*)(uint32,int))&lua_world_wide_update_activity), luabind::def("world_wide_update_activity", (void(*)(uint32,int,int))&lua_world_wide_update_activity), + luabind::def("world_wide_update_activity", (void(*)(uint32,int,int,uint8))&lua_world_wide_update_activity), + luabind::def("world_wide_update_activity", (void(*)(uint32,int,int,uint8,uint8))&lua_world_wide_update_activity), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_Client))&lua_get_qglobals), luabind::def("get_qglobals", (luabind::adl::object(*)(lua_State*,Lua_NPC))&lua_get_qglobals), From 3016f9409b67c603ff252081e56ef190b8316e19 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 12 Jul 2020 16:57:04 -0500 Subject: [PATCH 225/272] Fix merge --- zone/worldserver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 5ede67713..d5d14b6cd 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1,4 +1,4 @@ -< Date: Sun, 12 Jul 2020 16:57:36 -0500 Subject: [PATCH 226/272] Fix merge --- zone/worldserver.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index d5d14b6cd..d4fa5e572 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -3265,5 +3265,4 @@ void WorldServer::OnKeepAlive(EQ::Timer *t) { ServerPacket pack(ServerOP_KeepAlive, 0); SendPacket(&pack); -} ->> \ No newline at end of file +} \ No newline at end of file From 6a7a78af29adfddb8b06d4ba9c61a0ec02e7ed9b Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 12 Jul 2020 17:25:50 -0500 Subject: [PATCH 227/272] Static cast floats in atof usages where the datatype is actually float to avoid windows compiler warnings --- .../base/base_adventure_template_repository.h | 84 ++++++------ .../base/base_blocked_spells_repository.h | 36 +++--- .../base/base_bug_reports_repository.h | 18 +-- .../repositories/base/base_bugs_repository.h | 18 +-- .../base/base_character_bind_repository.h | 24 ++-- .../base/base_character_corpses_repository.h | 24 ++-- .../base/base_character_data_repository.h | 24 ++-- .../base/base_character_pet_info_repository.h | 6 +- .../repositories/base/base_doors_repository.h | 54 ++++---- .../base/base_graveyard_repository.h | 24 ++-- .../base/base_ground_spawns_repository.h | 36 +++--- .../repositories/base/base_items_repository.h | 24 ++-- .../base/base_level_exp_mods_repository.h | 12 +- .../base/base_lootdrop_entries_repository.h | 12 +- .../base/base_loottable_entries_repository.h | 6 +- .../base/base_npc_types_repository.h | 30 ++--- .../base/base_object_repository.h | 42 +++--- .../base/base_proximities_repository.h | 36 +++--- .../base/base_spawn2_repository.h | 24 ++-- .../base/base_spawngroup_repository.h | 30 ++--- .../base/base_spells_new_repository.h | 24 ++-- .../base/base_start_zones_repository.h | 42 +++--- .../repositories/base/base_traps_repository.h | 12 +- .../base/base_zone_points_repository.h | 54 ++++---- .../repositories/base/base_zone_repository.h | 120 +++++++++--------- .../generators/repository-generator.pl | 11 +- 26 files changed, 418 insertions(+), 409 deletions(-) diff --git a/common/repositories/base/base_adventure_template_repository.h b/common/repositories/base/base_adventure_template_repository.h index 41c5df27b..0f15813da 100644 --- a/common/repositories/base/base_adventure_template_repository.h +++ b/common/repositories/base/base_adventure_template_repository.h @@ -238,10 +238,10 @@ public: entry.type = atoi(row[7]); entry.type_data = atoi(row[8]); entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); + entry.assa_x = static_cast(atof(row[10])); + entry.assa_y = static_cast(atof(row[11])); + entry.assa_z = static_cast(atof(row[12])); + entry.assa_h = static_cast(atof(row[13])); entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); @@ -249,18 +249,18 @@ public: entry.lose_points = atoi(row[18]); entry.theme = atoi(row[19]); entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); + entry.zone_in_x = static_cast(atof(row[21])); + entry.zone_in_y = static_cast(atof(row[22])); entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); + entry.dest_x = static_cast(atof(row[24])); + entry.dest_y = static_cast(atof(row[25])); + entry.dest_z = static_cast(atof(row[26])); + entry.dest_h = static_cast(atof(row[27])); entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); + entry.graveyard_x = static_cast(atof(row[29])); + entry.graveyard_y = static_cast(atof(row[30])); + entry.graveyard_z = static_cast(atof(row[31])); + entry.graveyard_radius = static_cast(atof(row[32])); return entry; } @@ -482,10 +482,10 @@ public: entry.type = atoi(row[7]); entry.type_data = atoi(row[8]); entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); + entry.assa_x = static_cast(atof(row[10])); + entry.assa_y = static_cast(atof(row[11])); + entry.assa_z = static_cast(atof(row[12])); + entry.assa_h = static_cast(atof(row[13])); entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); @@ -493,18 +493,18 @@ public: entry.lose_points = atoi(row[18]); entry.theme = atoi(row[19]); entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); + entry.zone_in_x = static_cast(atof(row[21])); + entry.zone_in_y = static_cast(atof(row[22])); entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); + entry.dest_x = static_cast(atof(row[24])); + entry.dest_y = static_cast(atof(row[25])); + entry.dest_z = static_cast(atof(row[26])); + entry.dest_h = static_cast(atof(row[27])); entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); + entry.graveyard_x = static_cast(atof(row[29])); + entry.graveyard_y = static_cast(atof(row[30])); + entry.graveyard_z = static_cast(atof(row[31])); + entry.graveyard_radius = static_cast(atof(row[32])); all_entries.push_back(entry); } @@ -539,10 +539,10 @@ public: entry.type = atoi(row[7]); entry.type_data = atoi(row[8]); entry.type_count = atoi(row[9]); - entry.assa_x = atof(row[10]); - entry.assa_y = atof(row[11]); - entry.assa_z = atof(row[12]); - entry.assa_h = atof(row[13]); + entry.assa_x = static_cast(atof(row[10])); + entry.assa_y = static_cast(atof(row[11])); + entry.assa_z = static_cast(atof(row[12])); + entry.assa_h = static_cast(atof(row[13])); entry.text = row[14] ? row[14] : ""; entry.duration = atoi(row[15]); entry.zone_in_time = atoi(row[16]); @@ -550,18 +550,18 @@ public: entry.lose_points = atoi(row[18]); entry.theme = atoi(row[19]); entry.zone_in_zone_id = atoi(row[20]); - entry.zone_in_x = atof(row[21]); - entry.zone_in_y = atof(row[22]); + entry.zone_in_x = static_cast(atof(row[21])); + entry.zone_in_y = static_cast(atof(row[22])); entry.zone_in_object_id = atoi(row[23]); - entry.dest_x = atof(row[24]); - entry.dest_y = atof(row[25]); - entry.dest_z = atof(row[26]); - entry.dest_h = atof(row[27]); + entry.dest_x = static_cast(atof(row[24])); + entry.dest_y = static_cast(atof(row[25])); + entry.dest_z = static_cast(atof(row[26])); + entry.dest_h = static_cast(atof(row[27])); entry.graveyard_zone_id = atoi(row[28]); - entry.graveyard_x = atof(row[29]); - entry.graveyard_y = atof(row[30]); - entry.graveyard_z = atof(row[31]); - entry.graveyard_radius = atof(row[32]); + entry.graveyard_x = static_cast(atof(row[29])); + entry.graveyard_y = static_cast(atof(row[30])); + entry.graveyard_z = static_cast(atof(row[31])); + entry.graveyard_radius = static_cast(atof(row[32])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_blocked_spells_repository.h b/common/repositories/base/base_blocked_spells_repository.h index 8f24ed9f0..50e6a682e 100644 --- a/common/repositories/base/base_blocked_spells_repository.h +++ b/common/repositories/base/base_blocked_spells_repository.h @@ -169,12 +169,12 @@ public: entry.spellid = atoi(row[1]); entry.type = atoi(row[2]); entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.x_diff = static_cast(atof(row[7])); + entry.y_diff = static_cast(atof(row[8])); + entry.z_diff = static_cast(atof(row[9])); entry.message = row[10] ? row[10] : ""; entry.description = row[11] ? row[11] : ""; @@ -326,12 +326,12 @@ public: entry.spellid = atoi(row[1]); entry.type = atoi(row[2]); entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.x_diff = static_cast(atof(row[7])); + entry.y_diff = static_cast(atof(row[8])); + entry.z_diff = static_cast(atof(row[9])); entry.message = row[10] ? row[10] : ""; entry.description = row[11] ? row[11] : ""; @@ -362,12 +362,12 @@ public: entry.spellid = atoi(row[1]); entry.type = atoi(row[2]); entry.zoneid = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.x_diff = atof(row[7]); - entry.y_diff = atof(row[8]); - entry.z_diff = atof(row[9]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.x_diff = static_cast(atof(row[7])); + entry.y_diff = static_cast(atof(row[8])); + entry.z_diff = static_cast(atof(row[9])); entry.message = row[10] ? row[10] : ""; entry.description = row[11] ? row[11] : ""; diff --git a/common/repositories/base/base_bug_reports_repository.h b/common/repositories/base/base_bug_reports_repository.h index 779327ef9..c70d897f2 100644 --- a/common/repositories/base/base_bug_reports_repository.h +++ b/common/repositories/base/base_bug_reports_repository.h @@ -237,9 +237,9 @@ public: entry.category_name = row[9] ? row[9] : ""; entry.reporter_name = row[10] ? row[10] : ""; entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); + entry.pos_x = static_cast(atof(row[12])); + entry.pos_y = static_cast(atof(row[13])); + entry.pos_z = static_cast(atof(row[14])); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); @@ -474,9 +474,9 @@ public: entry.category_name = row[9] ? row[9] : ""; entry.reporter_name = row[10] ? row[10] : ""; entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); + entry.pos_x = static_cast(atof(row[12])); + entry.pos_y = static_cast(atof(row[13])); + entry.pos_z = static_cast(atof(row[14])); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); @@ -530,9 +530,9 @@ public: entry.category_name = row[9] ? row[9] : ""; entry.reporter_name = row[10] ? row[10] : ""; entry.ui_path = row[11] ? row[11] : ""; - entry.pos_x = atof(row[12]); - entry.pos_y = atof(row[13]); - entry.pos_z = atof(row[14]); + entry.pos_x = static_cast(atof(row[12])); + entry.pos_y = static_cast(atof(row[13])); + entry.pos_z = static_cast(atof(row[14])); entry.heading = atoi(row[15]); entry.time_played = atoi(row[16]); entry.target_id = atoi(row[17]); diff --git a/common/repositories/base/base_bugs_repository.h b/common/repositories/base/base_bugs_repository.h index 664097890..4bcab8c66 100644 --- a/common/repositories/base/base_bugs_repository.h +++ b/common/repositories/base/base_bugs_repository.h @@ -172,9 +172,9 @@ public: entry.zone = row[1] ? row[1] : ""; entry.name = row[2] ? row[2] : ""; entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); entry.target = row[9] ? row[9] : ""; @@ -333,9 +333,9 @@ public: entry.zone = row[1] ? row[1] : ""; entry.name = row[2] ? row[2] : ""; entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); entry.target = row[9] ? row[9] : ""; @@ -370,9 +370,9 @@ public: entry.zone = row[1] ? row[1] : ""; entry.name = row[2] ? row[2] : ""; entry.ui = row[3] ? row[3] : ""; - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); entry.type = row[7] ? row[7] : ""; entry.flag = atoi(row[8]); entry.target = row[9] ? row[9] : ""; diff --git a/common/repositories/base/base_character_bind_repository.h b/common/repositories/base/base_character_bind_repository.h index 9994cb2b2..911545a6f 100644 --- a/common/repositories/base/base_character_bind_repository.h +++ b/common/repositories/base/base_character_bind_repository.h @@ -157,10 +157,10 @@ public: entry.slot = atoi(row[1]); entry.zone_id = atoi(row[2]); entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); return entry; } @@ -298,10 +298,10 @@ public: entry.slot = atoi(row[1]); entry.zone_id = atoi(row[2]); entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); all_entries.push_back(entry); } @@ -330,10 +330,10 @@ public: entry.slot = atoi(row[1]); entry.zone_id = atoi(row[2]); entry.instance_id = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_character_corpses_repository.h b/common/repositories/base/base_character_corpses_repository.h index c9d46ff52..db64a58fa 100644 --- a/common/repositories/base/base_character_corpses_repository.h +++ b/common/repositories/base/base_character_corpses_repository.h @@ -275,10 +275,10 @@ public: entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); + entry.x = static_cast(atof(row[5])); + entry.y = static_cast(atof(row[6])); + entry.z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); @@ -572,10 +572,10 @@ public: entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); + entry.x = static_cast(atof(row[5])); + entry.y = static_cast(atof(row[6])); + entry.z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); @@ -643,10 +643,10 @@ public: entry.charname = row[2] ? row[2] : ""; entry.zone_id = atoi(row[3]); entry.instance_id = atoi(row[4]); - entry.x = atof(row[5]); - entry.y = atof(row[6]); - entry.z = atof(row[7]); - entry.heading = atof(row[8]); + entry.x = static_cast(atof(row[5])); + entry.y = static_cast(atof(row[6])); + entry.z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.time_of_death = row[9] ? row[9] : ""; entry.guild_consent_id = atoi(row[10]); entry.is_rezzed = atoi(row[11]); diff --git a/common/repositories/base/base_character_data_repository.h b/common/repositories/base/base_character_data_repository.h index 489af6ca3..e6c59579a 100644 --- a/common/repositories/base/base_character_data_repository.h +++ b/common/repositories/base/base_character_data_repository.h @@ -443,10 +443,10 @@ public: entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); + entry.y = static_cast(atof(row[8])); + entry.x = static_cast(atof(row[9])); + entry.z = static_cast(atof(row[10])); + entry.heading = static_cast(atof(row[11])); entry.gender = atoi(row[12]); entry.race = atoi(row[13]); entry.class = atoi(row[14]); @@ -960,10 +960,10 @@ public: entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); + entry.y = static_cast(atof(row[8])); + entry.x = static_cast(atof(row[9])); + entry.z = static_cast(atof(row[10])); + entry.heading = static_cast(atof(row[11])); entry.gender = atoi(row[12]); entry.race = atoi(row[13]); entry.class = atoi(row[14]); @@ -1086,10 +1086,10 @@ public: entry.suffix = row[5] ? row[5] : ""; entry.zone_id = atoi(row[6]); entry.zone_instance = atoi(row[7]); - entry.y = atof(row[8]); - entry.x = atof(row[9]); - entry.z = atof(row[10]); - entry.heading = atof(row[11]); + entry.y = static_cast(atof(row[8])); + entry.x = static_cast(atof(row[9])); + entry.z = static_cast(atof(row[10])); + entry.heading = static_cast(atof(row[11])); entry.gender = atoi(row[12]); entry.race = atoi(row[13]); entry.class = atoi(row[14]); diff --git a/common/repositories/base/base_character_pet_info_repository.h b/common/repositories/base/base_character_pet_info_repository.h index 3b7f5baea..b4d795745 100644 --- a/common/repositories/base/base_character_pet_info_repository.h +++ b/common/repositories/base/base_character_pet_info_repository.h @@ -160,7 +160,7 @@ public: entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); entry.mana = atoi(row[6]); - entry.size = atof(row[7]); + entry.size = static_cast(atof(row[7])); return entry; } @@ -304,7 +304,7 @@ public: entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); entry.mana = atoi(row[6]); - entry.size = atof(row[7]); + entry.size = static_cast(atof(row[7])); all_entries.push_back(entry); } @@ -336,7 +336,7 @@ public: entry.spell_id = atoi(row[4]); entry.hp = atoi(row[5]); entry.mana = atoi(row[6]); - entry.size = atof(row[7]); + entry.size = static_cast(atof(row[7])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h index ea08eba8d..3ca9dcd86 100644 --- a/common/repositories/base/base_doors_repository.h +++ b/common/repositories/base/base_doors_repository.h @@ -236,10 +236,10 @@ public: entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.opentype = atoi(row[9]); entry.guild = atoi(row[10]); entry.lockpick = atoi(row[11]); @@ -252,14 +252,14 @@ public: entry.door_param = atoi(row[18]); entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); entry.invert_state = atoi(row[25]); entry.incline = atoi(row[26]); entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); + entry.buffer = static_cast(atof(row[28])); entry.client_version_mask = atoi(row[29]); entry.is_ldon_door = atoi(row[30]); entry.min_expansion = atoi(row[31]); @@ -481,10 +481,10 @@ public: entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.opentype = atoi(row[9]); entry.guild = atoi(row[10]); entry.lockpick = atoi(row[11]); @@ -497,14 +497,14 @@ public: entry.door_param = atoi(row[18]); entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); entry.invert_state = atoi(row[25]); entry.incline = atoi(row[26]); entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); + entry.buffer = static_cast(atof(row[28])); entry.client_version_mask = atoi(row[29]); entry.is_ldon_door = atoi(row[30]); entry.min_expansion = atoi(row[31]); @@ -539,10 +539,10 @@ public: entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); entry.name = row[4] ? row[4] : ""; - entry.pos_y = atof(row[5]); - entry.pos_x = atof(row[6]); - entry.pos_z = atof(row[7]); - entry.heading = atof(row[8]); + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.opentype = atoi(row[9]); entry.guild = atoi(row[10]); entry.lockpick = atoi(row[11]); @@ -555,14 +555,14 @@ public: entry.door_param = atoi(row[18]); entry.dest_zone = row[19] ? row[19] : ""; entry.dest_instance = atoi(row[20]); - entry.dest_x = atof(row[21]); - entry.dest_y = atof(row[22]); - entry.dest_z = atof(row[23]); - entry.dest_heading = atof(row[24]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); entry.invert_state = atoi(row[25]); entry.incline = atoi(row[26]); entry.size = atoi(row[27]); - entry.buffer = atof(row[28]); + entry.buffer = static_cast(atof(row[28])); entry.client_version_mask = atoi(row[29]); entry.is_ldon_door = atoi(row[30]); entry.min_expansion = atoi(row[31]); diff --git a/common/repositories/base/base_graveyard_repository.h b/common/repositories/base/base_graveyard_repository.h index 0ed2eca7a..ca6aad86b 100644 --- a/common/repositories/base/base_graveyard_repository.h +++ b/common/repositories/base/base_graveyard_repository.h @@ -149,10 +149,10 @@ public: entry.id = atoi(row[0]); entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); + entry.x = static_cast(atof(row[2])); + entry.y = static_cast(atof(row[3])); + entry.z = static_cast(atof(row[4])); + entry.heading = static_cast(atof(row[5])); return entry; } @@ -282,10 +282,10 @@ public: entry.id = atoi(row[0]); entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); + entry.x = static_cast(atof(row[2])); + entry.y = static_cast(atof(row[3])); + entry.z = static_cast(atof(row[4])); + entry.heading = static_cast(atof(row[5])); all_entries.push_back(entry); } @@ -312,10 +312,10 @@ public: entry.id = atoi(row[0]); entry.zone_id = atoi(row[1]); - entry.x = atof(row[2]); - entry.y = atof(row[3]); - entry.z = atof(row[4]); - entry.heading = atof(row[5]); + entry.x = static_cast(atof(row[2])); + entry.y = static_cast(atof(row[3])); + entry.z = static_cast(atof(row[4])); + entry.heading = static_cast(atof(row[5])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h index 3d9ee9977..7e21389fe 100644 --- a/common/repositories/base/base_ground_spawns_repository.h +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -183,12 +183,12 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); @@ -360,12 +360,12 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); @@ -401,12 +401,12 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.max_x = atof(row[3]); - entry.max_y = atof(row[4]); - entry.max_z = atof(row[5]); - entry.min_x = atof(row[6]); - entry.min_y = atof(row[7]); - entry.heading = atof(row[8]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); entry.name = row[9] ? row[9] : ""; entry.item = atoi(row[10]); entry.max_allowed = atoi(row[11]); diff --git a/common/repositories/base/base_items_repository.h b/common/repositories/base/base_items_repository.h index fe36db64a..29884ec16 100644 --- a/common/repositories/base/base_items_repository.h +++ b/common/repositories/base/base_items_repository.h @@ -296,7 +296,7 @@ public: std::string bardname; int bardunk7; int UNK214; - int UNK219; + int subtype; int UNK220; int UNK221; int heirloom; @@ -591,7 +591,7 @@ public: "bardname", "bardunk7", "UNK214", - "UNK219", + "subtype", "UNK220", "UNK221", "heirloom", @@ -926,7 +926,7 @@ public: entry.bardname = ""; entry.bardunk7 = 0; entry.UNK214 = 0; - entry.UNK219 = 0; + entry.subtype = 0; entry.UNK220 = 0; entry.UNK221 = 0; entry.heirloom = 0; @@ -1091,7 +1091,7 @@ public: entry.reclevel = atoi(row[104]); entry.recskill = atoi(row[105]); entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); + entry.sellrate = static_cast(atof(row[107])); entry.shielding = atoi(row[108]); entry.size = atoi(row[109]); entry.skillmodtype = atoi(row[110]); @@ -1245,7 +1245,7 @@ public: entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); + entry.subtype = atoi(row[261]); entry.UNK220 = atoi(row[262]); entry.UNK221 = atoi(row[263]); entry.heirloom = atoi(row[264]); @@ -1561,7 +1561,7 @@ public: update_values.push_back(columns[258] + " = '" + EscapeString(items_entry.bardname) + "'"); update_values.push_back(columns[259] + " = " + std::to_string(items_entry.bardunk7)); update_values.push_back(columns[260] + " = " + std::to_string(items_entry.UNK214)); - update_values.push_back(columns[261] + " = " + std::to_string(items_entry.UNK219)); + update_values.push_back(columns[261] + " = " + std::to_string(items_entry.subtype)); update_values.push_back(columns[262] + " = " + std::to_string(items_entry.UNK220)); update_values.push_back(columns[263] + " = " + std::to_string(items_entry.UNK221)); update_values.push_back(columns[264] + " = " + std::to_string(items_entry.heirloom)); @@ -1866,7 +1866,7 @@ public: insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); insert_values.push_back(std::to_string(items_entry.bardunk7)); insert_values.push_back(std::to_string(items_entry.UNK214)); - insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.subtype)); insert_values.push_back(std::to_string(items_entry.UNK220)); insert_values.push_back(std::to_string(items_entry.UNK221)); insert_values.push_back(std::to_string(items_entry.heirloom)); @@ -2179,7 +2179,7 @@ public: insert_values.push_back("'" + EscapeString(items_entry.bardname) + "'"); insert_values.push_back(std::to_string(items_entry.bardunk7)); insert_values.push_back(std::to_string(items_entry.UNK214)); - insert_values.push_back(std::to_string(items_entry.UNK219)); + insert_values.push_back(std::to_string(items_entry.subtype)); insert_values.push_back(std::to_string(items_entry.UNK220)); insert_values.push_back(std::to_string(items_entry.UNK221)); insert_values.push_back(std::to_string(items_entry.heirloom)); @@ -2343,7 +2343,7 @@ public: entry.reclevel = atoi(row[104]); entry.recskill = atoi(row[105]); entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); + entry.sellrate = static_cast(atof(row[107])); entry.shielding = atoi(row[108]); entry.size = atoi(row[109]); entry.skillmodtype = atoi(row[110]); @@ -2497,7 +2497,7 @@ public: entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); + entry.subtype = atoi(row[261]); entry.UNK220 = atoi(row[262]); entry.UNK221 = atoi(row[263]); entry.heirloom = atoi(row[264]); @@ -2652,7 +2652,7 @@ public: entry.reclevel = atoi(row[104]); entry.recskill = atoi(row[105]); entry.reqlevel = atoi(row[106]); - entry.sellrate = atof(row[107]); + entry.sellrate = static_cast(atof(row[107])); entry.shielding = atoi(row[108]); entry.size = atoi(row[109]); entry.skillmodtype = atoi(row[110]); @@ -2806,7 +2806,7 @@ public: entry.bardname = row[258] ? row[258] : ""; entry.bardunk7 = atoi(row[259]); entry.UNK214 = atoi(row[260]); - entry.UNK219 = atoi(row[261]); + entry.subtype = atoi(row[261]); entry.UNK220 = atoi(row[262]); entry.UNK221 = atoi(row[263]); entry.heirloom = atoi(row[264]); diff --git a/common/repositories/base/base_level_exp_mods_repository.h b/common/repositories/base/base_level_exp_mods_repository.h index a25bd1fb0..4a77e47dc 100644 --- a/common/repositories/base/base_level_exp_mods_repository.h +++ b/common/repositories/base/base_level_exp_mods_repository.h @@ -139,8 +139,8 @@ public: LevelExpMods entry{}; entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); + entry.exp_mod = static_cast(atof(row[1])); + entry.aa_exp_mod = static_cast(atof(row[2])); return entry; } @@ -263,8 +263,8 @@ public: LevelExpMods entry{}; entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); + entry.exp_mod = static_cast(atof(row[1])); + entry.aa_exp_mod = static_cast(atof(row[2])); all_entries.push_back(entry); } @@ -290,8 +290,8 @@ public: LevelExpMods entry{}; entry.level = atoi(row[0]); - entry.exp_mod = atof(row[1]); - entry.aa_exp_mod = atof(row[2]); + entry.exp_mod = static_cast(atof(row[1])); + entry.aa_exp_mod = static_cast(atof(row[2])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h index 830a9ea49..c513956e8 100644 --- a/common/repositories/base/base_lootdrop_entries_repository.h +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -160,8 +160,8 @@ public: entry.item_id = atoi(row[1]); entry.item_charges = atoi(row[2]); entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); entry.minlevel = atoi(row[6]); entry.maxlevel = atoi(row[7]); entry.multiplier = atoi(row[8]); @@ -308,8 +308,8 @@ public: entry.item_id = atoi(row[1]); entry.item_charges = atoi(row[2]); entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); entry.minlevel = atoi(row[6]); entry.maxlevel = atoi(row[7]); entry.multiplier = atoi(row[8]); @@ -341,8 +341,8 @@ public: entry.item_id = atoi(row[1]); entry.item_charges = atoi(row[2]); entry.equip_item = atoi(row[3]); - entry.chance = atof(row[4]); - entry.disabled_chance = atof(row[5]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); entry.minlevel = atoi(row[6]); entry.maxlevel = atoi(row[7]); entry.multiplier = atoi(row[8]); diff --git a/common/repositories/base/base_loottable_entries_repository.h b/common/repositories/base/base_loottable_entries_repository.h index d405b0894..f3baab03f 100644 --- a/common/repositories/base/base_loottable_entries_repository.h +++ b/common/repositories/base/base_loottable_entries_repository.h @@ -152,7 +152,7 @@ public: entry.multiplier = atoi(row[2]); entry.droplimit = atoi(row[3]); entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); + entry.probability = static_cast(atof(row[5])); return entry; } @@ -288,7 +288,7 @@ public: entry.multiplier = atoi(row[2]); entry.droplimit = atoi(row[3]); entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); + entry.probability = static_cast(atof(row[5])); all_entries.push_back(entry); } @@ -318,7 +318,7 @@ public: entry.multiplier = atoi(row[2]); entry.droplimit = atoi(row[3]); entry.mindrop = atoi(row[4]); - entry.probability = atof(row[5]); + entry.probability = static_cast(atof(row[5])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_npc_types_repository.h b/common/repositories/base/base_npc_types_repository.h index c85eba178..6ac6b5321 100644 --- a/common/repositories/base/base_npc_types_repository.h +++ b/common/repositories/base/base_npc_types_repository.h @@ -508,7 +508,7 @@ public: entry.texture = atoi(row[10]); entry.helmtexture = atoi(row[11]); entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); + entry.size = static_cast(atof(row[13])); entry.hp_regen_rate = atoi(row[14]); entry.mana_regen_rate = atoi(row[15]); entry.loottable_id = atoi(row[16]); @@ -546,7 +546,7 @@ public: entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); + entry.runspeed = static_cast(atof(row[51])); entry.MR = atoi(row[52]); entry.CR = atoi(row[53]); entry.DR = atoi(row[54]); @@ -560,7 +560,7 @@ public: entry.AC = atoi(row[62]); entry.npc_aggro = atoi(row[63]); entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); + entry.attack_speed = static_cast(atof(row[65])); entry.attack_delay = atoi(row[66]); entry.findable = atoi(row[67]); entry.STR = atoi(row[68]); @@ -587,8 +587,8 @@ public: entry.underwater = atoi(row[89]); entry.isquest = atoi(row[90]); entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); + entry.spellscale = static_cast(atof(row[92])); + entry.healscale = static_cast(atof(row[93])); entry.no_target_hotkey = atoi(row[94]); entry.raid_target = atoi(row[95]); entry.armtexture = atoi(row[96]); @@ -1105,7 +1105,7 @@ public: entry.texture = atoi(row[10]); entry.helmtexture = atoi(row[11]); entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); + entry.size = static_cast(atof(row[13])); entry.hp_regen_rate = atoi(row[14]); entry.mana_regen_rate = atoi(row[15]); entry.loottable_id = atoi(row[16]); @@ -1143,7 +1143,7 @@ public: entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); + entry.runspeed = static_cast(atof(row[51])); entry.MR = atoi(row[52]); entry.CR = atoi(row[53]); entry.DR = atoi(row[54]); @@ -1157,7 +1157,7 @@ public: entry.AC = atoi(row[62]); entry.npc_aggro = atoi(row[63]); entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); + entry.attack_speed = static_cast(atof(row[65])); entry.attack_delay = atoi(row[66]); entry.findable = atoi(row[67]); entry.STR = atoi(row[68]); @@ -1184,8 +1184,8 @@ public: entry.underwater = atoi(row[89]); entry.isquest = atoi(row[90]); entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); + entry.spellscale = static_cast(atof(row[92])); + entry.healscale = static_cast(atof(row[93])); entry.no_target_hotkey = atoi(row[94]); entry.raid_target = atoi(row[95]); entry.armtexture = atoi(row[96]); @@ -1251,7 +1251,7 @@ public: entry.texture = atoi(row[10]); entry.helmtexture = atoi(row[11]); entry.herosforgemodel = atoi(row[12]); - entry.size = atof(row[13]); + entry.size = static_cast(atof(row[13])); entry.hp_regen_rate = atoi(row[14]); entry.mana_regen_rate = atoi(row[15]); entry.loottable_id = atoi(row[16]); @@ -1289,7 +1289,7 @@ public: entry.prim_melee_type = atoi(row[48]); entry.sec_melee_type = atoi(row[49]); entry.ranged_type = atoi(row[50]); - entry.runspeed = atof(row[51]); + entry.runspeed = static_cast(atof(row[51])); entry.MR = atoi(row[52]); entry.CR = atoi(row[53]); entry.DR = atoi(row[54]); @@ -1303,7 +1303,7 @@ public: entry.AC = atoi(row[62]); entry.npc_aggro = atoi(row[63]); entry.spawn_limit = atoi(row[64]); - entry.attack_speed = atof(row[65]); + entry.attack_speed = static_cast(atof(row[65])); entry.attack_delay = atoi(row[66]); entry.findable = atoi(row[67]); entry.STR = atoi(row[68]); @@ -1330,8 +1330,8 @@ public: entry.underwater = atoi(row[89]); entry.isquest = atoi(row[90]); entry.emoteid = atoi(row[91]); - entry.spellscale = atof(row[92]); - entry.healscale = atof(row[93]); + entry.spellscale = static_cast(atof(row[92])); + entry.healscale = static_cast(atof(row[93])); entry.no_target_hotkey = atoi(row[94]); entry.raid_target = atoi(row[95]); entry.armtexture = atoi(row[96]); diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h index e8f340f22..c44685202 100644 --- a/common/repositories/base/base_object_repository.h +++ b/common/repositories/base/base_object_repository.h @@ -210,10 +210,10 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); entry.objectname = row[9] ? row[9] : ""; @@ -229,9 +229,9 @@ public: entry.unknown72 = atoi(row[19]); entry.unknown76 = atoi(row[20]); entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); entry.display_name = row[25] ? row[25] : ""; return entry; @@ -423,10 +423,10 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); entry.objectname = row[9] ? row[9] : ""; @@ -442,9 +442,9 @@ public: entry.unknown72 = atoi(row[19]); entry.unknown76 = atoi(row[20]); entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); entry.display_name = row[25] ? row[25] : ""; all_entries.push_back(entry); @@ -473,10 +473,10 @@ public: entry.id = atoi(row[0]); entry.zoneid = atoi(row[1]); entry.version = atoi(row[2]); - entry.xpos = atof(row[3]); - entry.ypos = atof(row[4]); - entry.zpos = atof(row[5]); - entry.heading = atof(row[6]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); entry.itemid = atoi(row[7]); entry.charges = atoi(row[8]); entry.objectname = row[9] ? row[9] : ""; @@ -492,9 +492,9 @@ public: entry.unknown72 = atoi(row[19]); entry.unknown76 = atoi(row[20]); entry.unknown84 = atoi(row[21]); - entry.size = atof(row[22]); - entry.tilt_x = atof(row[23]); - entry.tilt_y = atof(row[24]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); entry.display_name = row[25] ? row[25] : ""; all_entries.push_back(entry); diff --git a/common/repositories/base/base_proximities_repository.h b/common/repositories/base/base_proximities_repository.h index bcb5522a5..502a822dc 100644 --- a/common/repositories/base/base_proximities_repository.h +++ b/common/repositories/base/base_proximities_repository.h @@ -155,12 +155,12 @@ public: entry.zoneid = atoi(row[0]); entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); + entry.minx = static_cast(atof(row[2])); + entry.maxx = static_cast(atof(row[3])); + entry.miny = static_cast(atof(row[4])); + entry.maxy = static_cast(atof(row[5])); + entry.minz = static_cast(atof(row[6])); + entry.maxz = static_cast(atof(row[7])); return entry; } @@ -299,12 +299,12 @@ public: entry.zoneid = atoi(row[0]); entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); + entry.minx = static_cast(atof(row[2])); + entry.maxx = static_cast(atof(row[3])); + entry.miny = static_cast(atof(row[4])); + entry.maxy = static_cast(atof(row[5])); + entry.minz = static_cast(atof(row[6])); + entry.maxz = static_cast(atof(row[7])); all_entries.push_back(entry); } @@ -331,12 +331,12 @@ public: entry.zoneid = atoi(row[0]); entry.exploreid = atoi(row[1]); - entry.minx = atof(row[2]); - entry.maxx = atof(row[3]); - entry.miny = atof(row[4]); - entry.maxy = atof(row[5]); - entry.minz = atof(row[6]); - entry.maxz = atof(row[7]); + entry.minx = static_cast(atof(row[2])); + entry.maxx = static_cast(atof(row[3])); + entry.miny = static_cast(atof(row[4])); + entry.maxy = static_cast(atof(row[5])); + entry.minz = static_cast(atof(row[6])); + entry.maxz = static_cast(atof(row[7])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h index ffff6b294..51e96a36b 100644 --- a/common/repositories/base/base_spawn2_repository.h +++ b/common/repositories/base/base_spawn2_repository.h @@ -178,10 +178,10 @@ public: entry.spawngroupID = atoi(row[1]); entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); entry.respawntime = atoi(row[8]); entry.variance = atoi(row[9]); entry.pathgrid = atoi(row[10]); @@ -347,10 +347,10 @@ public: entry.spawngroupID = atoi(row[1]); entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); entry.respawntime = atoi(row[8]); entry.variance = atoi(row[9]); entry.pathgrid = atoi(row[10]); @@ -386,10 +386,10 @@ public: entry.spawngroupID = atoi(row[1]); entry.zone = row[2] ? row[2] : ""; entry.version = atoi(row[3]); - entry.x = atof(row[4]); - entry.y = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); entry.respawntime = atoi(row[8]); entry.variance = atoi(row[9]); entry.pathgrid = atoi(row[10]); diff --git a/common/repositories/base/base_spawngroup_repository.h b/common/repositories/base/base_spawngroup_repository.h index fceacd2b0..9e6e6bbf8 100644 --- a/common/repositories/base/base_spawngroup_repository.h +++ b/common/repositories/base/base_spawngroup_repository.h @@ -171,11 +171,11 @@ public: entry.id = atoi(row[0]); entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); + entry.dist = static_cast(atof(row[3])); + entry.max_x = static_cast(atof(row[4])); + entry.min_x = static_cast(atof(row[5])); + entry.max_y = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); entry.delay = atoi(row[8]); entry.mindelay = atoi(row[9]); entry.despawn = atoi(row[10]); @@ -332,11 +332,11 @@ public: entry.id = atoi(row[0]); entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); + entry.dist = static_cast(atof(row[3])); + entry.max_x = static_cast(atof(row[4])); + entry.min_x = static_cast(atof(row[5])); + entry.max_y = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); entry.delay = atoi(row[8]); entry.mindelay = atoi(row[9]); entry.despawn = atoi(row[10]); @@ -369,11 +369,11 @@ public: entry.id = atoi(row[0]); entry.name = row[1] ? row[1] : ""; entry.spawn_limit = atoi(row[2]); - entry.dist = atof(row[3]); - entry.max_x = atof(row[4]); - entry.min_x = atof(row[5]); - entry.max_y = atof(row[6]); - entry.min_y = atof(row[7]); + entry.dist = static_cast(atof(row[3])); + entry.max_x = static_cast(atof(row[4])); + entry.min_x = static_cast(atof(row[5])); + entry.max_y = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); entry.delay = atoi(row[8]); entry.mindelay = atoi(row[9]); entry.despawn = atoi(row[10]); diff --git a/common/repositories/base/base_spells_new_repository.h b/common/repositories/base/base_spells_new_repository.h index a38bdff4b..19220c09c 100644 --- a/common/repositories/base/base_spells_new_repository.h +++ b/common/repositories/base/base_spells_new_repository.h @@ -1067,10 +1067,10 @@ public: entry.persistdeath = atoi(row[224]); entry.field225 = atoi(row[225]); entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); + entry.min_dist = static_cast(atof(row[227])); + entry.min_dist_mod = static_cast(atof(row[228])); + entry.max_dist = static_cast(atof(row[229])); + entry.max_dist_mod = static_cast(atof(row[230])); entry.min_range = atoi(row[231]); entry.field232 = atoi(row[232]); entry.field233 = atoi(row[233]); @@ -2127,10 +2127,10 @@ public: entry.persistdeath = atoi(row[224]); entry.field225 = atoi(row[225]); entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); + entry.min_dist = static_cast(atof(row[227])); + entry.min_dist_mod = static_cast(atof(row[228])); + entry.max_dist = static_cast(atof(row[229])); + entry.max_dist_mod = static_cast(atof(row[230])); entry.min_range = atoi(row[231]); entry.field232 = atoi(row[232]); entry.field233 = atoi(row[233]); @@ -2388,10 +2388,10 @@ public: entry.persistdeath = atoi(row[224]); entry.field225 = atoi(row[225]); entry.field226 = atoi(row[226]); - entry.min_dist = atof(row[227]); - entry.min_dist_mod = atof(row[228]); - entry.max_dist = atof(row[229]); - entry.max_dist_mod = atof(row[230]); + entry.min_dist = static_cast(atof(row[227])); + entry.min_dist_mod = static_cast(atof(row[228])); + entry.max_dist = static_cast(atof(row[229])); + entry.max_dist_mod = static_cast(atof(row[230])); entry.min_range = atoi(row[231]); entry.field232 = atoi(row[232]); entry.field233 = atoi(row[233]); diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h index 770c9f9fd..60cfd072a 100644 --- a/common/repositories/base/base_start_zones_repository.h +++ b/common/repositories/base/base_start_zones_repository.h @@ -183,10 +183,10 @@ public: if (results.RowCount() == 1) { StartZones entry{}; - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); entry.zone_id = atoi(row[4]); entry.bind_id = atoi(row[5]); entry.player_choice = atoi(row[6]); @@ -194,9 +194,9 @@ public: entry.player_deity = atoi(row[8]); entry.player_race = atoi(row[9]); entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); entry.select_rank = atoi(row[14]); entry.min_expansion = atoi(row[15]); entry.max_expansion = atoi(row[16]); @@ -367,10 +367,10 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartZones entry{}; - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); entry.zone_id = atoi(row[4]); entry.bind_id = atoi(row[5]); entry.player_choice = atoi(row[6]); @@ -378,9 +378,9 @@ public: entry.player_deity = atoi(row[8]); entry.player_race = atoi(row[9]); entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); entry.select_rank = atoi(row[14]); entry.min_expansion = atoi(row[15]); entry.max_expansion = atoi(row[16]); @@ -409,10 +409,10 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartZones entry{}; - entry.x = atof(row[0]); - entry.y = atof(row[1]); - entry.z = atof(row[2]); - entry.heading = atof(row[3]); + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); entry.zone_id = atoi(row[4]); entry.bind_id = atoi(row[5]); entry.player_choice = atoi(row[6]); @@ -420,9 +420,9 @@ public: entry.player_deity = atoi(row[8]); entry.player_race = atoi(row[9]); entry.start_zone = atoi(row[10]); - entry.bind_x = atof(row[11]); - entry.bind_y = atof(row[12]); - entry.bind_z = atof(row[13]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); entry.select_rank = atoi(row[14]); entry.min_expansion = atoi(row[15]); entry.max_expansion = atoi(row[16]); diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h index ff1bc8474..213de6b6d 100644 --- a/common/repositories/base/base_traps_repository.h +++ b/common/repositories/base/base_traps_repository.h @@ -208,8 +208,8 @@ public: entry.y = atoi(row[4]); entry.z = atoi(row[5]); entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); + entry.maxzdiff = static_cast(atof(row[7])); + entry.radius = static_cast(atof(row[8])); entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); @@ -413,8 +413,8 @@ public: entry.y = atoi(row[4]); entry.z = atoi(row[5]); entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); + entry.maxzdiff = static_cast(atof(row[7])); + entry.radius = static_cast(atof(row[8])); entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); @@ -461,8 +461,8 @@ public: entry.y = atoi(row[4]); entry.z = atoi(row[5]); entry.chance = atoi(row[6]); - entry.maxzdiff = atof(row[7]); - entry.radius = atof(row[8]); + entry.maxzdiff = static_cast(atof(row[7])); + entry.radius = static_cast(atof(row[8])); entry.effect = atoi(row[9]); entry.effectvalue = atoi(row[10]); entry.effectvalue2 = atoi(row[11]); diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index 1b84254ab..8867e37d7 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -193,18 +193,18 @@ public: entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); entry.zoneinst = atoi(row[12]); entry.target_zone_id = atoi(row[13]); entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); + entry.buffer = static_cast(atof(row[15])); entry.client_version_mask = atoi(row[16]); entry.min_expansion = atoi(row[17]); entry.max_expansion = atoi(row[18]); @@ -382,18 +382,18 @@ public: entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); entry.zoneinst = atoi(row[12]); entry.target_zone_id = atoi(row[13]); entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); + entry.buffer = static_cast(atof(row[15])); entry.client_version_mask = atoi(row[16]); entry.min_expansion = atoi(row[17]); entry.max_expansion = atoi(row[18]); @@ -426,18 +426,18 @@ public: entry.zone = row[1] ? row[1] : ""; entry.version = atoi(row[2]); entry.number = atoi(row[3]); - entry.y = atof(row[4]); - entry.x = atof(row[5]); - entry.z = atof(row[6]); - entry.heading = atof(row[7]); - entry.target_y = atof(row[8]); - entry.target_x = atof(row[9]); - entry.target_z = atof(row[10]); - entry.target_heading = atof(row[11]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); entry.zoneinst = atoi(row[12]); entry.target_zone_id = atoi(row[13]); entry.target_instance = atoi(row[14]); - entry.buffer = atof(row[15]); + entry.buffer = static_cast(atof(row[15])); entry.client_version_mask = atoi(row[16]); entry.min_expansion = atoi(row[17]); entry.max_expansion = atoi(row[18]); diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 3729021f3..d436124ac 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -392,10 +392,10 @@ public: entry.file_name = row[2] ? row[2] : ""; entry.long_name = row[3] ? row[3] : ""; entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); + entry.safe_x = static_cast(atof(row[5])); + entry.safe_y = static_cast(atof(row[6])); + entry.safe_z = static_cast(atof(row[7])); + entry.graveyard_id = static_cast(atof(row[8])); entry.min_level = atoi(row[9]); entry.min_status = atoi(row[10]); entry.zoneidnumber = atoi(row[11]); @@ -404,40 +404,40 @@ public: entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); + entry.underworld = static_cast(atof(row[17])); + entry.minclip = static_cast(atof(row[18])); + entry.maxclip = static_cast(atof(row[19])); + entry.fog_minclip = static_cast(atof(row[20])); + entry.fog_maxclip = static_cast(atof(row[21])); entry.fog_blue = atoi(row[22]); entry.fog_red = atoi(row[23]); entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); + entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); entry.fog_green1 = atoi(row[31]); entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); + entry.fog_minclip1 = static_cast(atof(row[33])); + entry.fog_maxclip1 = static_cast(atof(row[34])); entry.fog_red2 = atoi(row[35]); entry.fog_green2 = atoi(row[36]); entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); + entry.fog_minclip2 = static_cast(atof(row[38])); + entry.fog_maxclip2 = static_cast(atof(row[39])); entry.fog_red3 = atoi(row[40]); entry.fog_green3 = atoi(row[41]); entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); + entry.fog_minclip3 = static_cast(atof(row[43])); + entry.fog_maxclip3 = static_cast(atof(row[44])); entry.fog_red4 = atoi(row[45]); entry.fog_green4 = atoi(row[46]); entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); + entry.fog_minclip4 = static_cast(atof(row[48])); + entry.fog_maxclip4 = static_cast(atof(row[49])); + entry.fog_density = static_cast(atof(row[50])); entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); @@ -465,7 +465,7 @@ public: entry.snow_duration2 = atoi(row[75]); entry.snow_duration3 = atoi(row[76]); entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); + entry.gravity = static_cast(atof(row[78])); entry.type = atoi(row[79]); entry.skylock = atoi(row[80]); entry.fast_regen_hp = atoi(row[81]); @@ -845,10 +845,10 @@ public: entry.file_name = row[2] ? row[2] : ""; entry.long_name = row[3] ? row[3] : ""; entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); + entry.safe_x = static_cast(atof(row[5])); + entry.safe_y = static_cast(atof(row[6])); + entry.safe_z = static_cast(atof(row[7])); + entry.graveyard_id = static_cast(atof(row[8])); entry.min_level = atoi(row[9]); entry.min_status = atoi(row[10]); entry.zoneidnumber = atoi(row[11]); @@ -857,40 +857,40 @@ public: entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); + entry.underworld = static_cast(atof(row[17])); + entry.minclip = static_cast(atof(row[18])); + entry.maxclip = static_cast(atof(row[19])); + entry.fog_minclip = static_cast(atof(row[20])); + entry.fog_maxclip = static_cast(atof(row[21])); entry.fog_blue = atoi(row[22]); entry.fog_red = atoi(row[23]); entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); + entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); entry.fog_green1 = atoi(row[31]); entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); + entry.fog_minclip1 = static_cast(atof(row[33])); + entry.fog_maxclip1 = static_cast(atof(row[34])); entry.fog_red2 = atoi(row[35]); entry.fog_green2 = atoi(row[36]); entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); + entry.fog_minclip2 = static_cast(atof(row[38])); + entry.fog_maxclip2 = static_cast(atof(row[39])); entry.fog_red3 = atoi(row[40]); entry.fog_green3 = atoi(row[41]); entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); + entry.fog_minclip3 = static_cast(atof(row[43])); + entry.fog_maxclip3 = static_cast(atof(row[44])); entry.fog_red4 = atoi(row[45]); entry.fog_green4 = atoi(row[46]); entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); + entry.fog_minclip4 = static_cast(atof(row[48])); + entry.fog_maxclip4 = static_cast(atof(row[49])); + entry.fog_density = static_cast(atof(row[50])); entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); @@ -918,7 +918,7 @@ public: entry.snow_duration2 = atoi(row[75]); entry.snow_duration3 = atoi(row[76]); entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); + entry.gravity = static_cast(atof(row[78])); entry.type = atoi(row[79]); entry.skylock = atoi(row[80]); entry.fast_regen_hp = atoi(row[81]); @@ -955,10 +955,10 @@ public: entry.file_name = row[2] ? row[2] : ""; entry.long_name = row[3] ? row[3] : ""; entry.map_file_name = row[4] ? row[4] : ""; - entry.safe_x = atof(row[5]); - entry.safe_y = atof(row[6]); - entry.safe_z = atof(row[7]); - entry.graveyard_id = atof(row[8]); + entry.safe_x = static_cast(atof(row[5])); + entry.safe_y = static_cast(atof(row[6])); + entry.safe_z = static_cast(atof(row[7])); + entry.graveyard_id = static_cast(atof(row[8])); entry.min_level = atoi(row[9]); entry.min_status = atoi(row[10]); entry.zoneidnumber = atoi(row[11]); @@ -967,40 +967,40 @@ public: entry.maxclients = atoi(row[14]); entry.ruleset = atoi(row[15]); entry.note = row[16] ? row[16] : ""; - entry.underworld = atof(row[17]); - entry.minclip = atof(row[18]); - entry.maxclip = atof(row[19]); - entry.fog_minclip = atof(row[20]); - entry.fog_maxclip = atof(row[21]); + entry.underworld = static_cast(atof(row[17])); + entry.minclip = static_cast(atof(row[18])); + entry.maxclip = static_cast(atof(row[19])); + entry.fog_minclip = static_cast(atof(row[20])); + entry.fog_maxclip = static_cast(atof(row[21])); entry.fog_blue = atoi(row[22]); entry.fog_red = atoi(row[23]); entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); entry.zone_exp_multiplier = atof(row[27]); - entry.walkspeed = atof(row[28]); + entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); entry.fog_green1 = atoi(row[31]); entry.fog_blue1 = atoi(row[32]); - entry.fog_minclip1 = atof(row[33]); - entry.fog_maxclip1 = atof(row[34]); + entry.fog_minclip1 = static_cast(atof(row[33])); + entry.fog_maxclip1 = static_cast(atof(row[34])); entry.fog_red2 = atoi(row[35]); entry.fog_green2 = atoi(row[36]); entry.fog_blue2 = atoi(row[37]); - entry.fog_minclip2 = atof(row[38]); - entry.fog_maxclip2 = atof(row[39]); + entry.fog_minclip2 = static_cast(atof(row[38])); + entry.fog_maxclip2 = static_cast(atof(row[39])); entry.fog_red3 = atoi(row[40]); entry.fog_green3 = atoi(row[41]); entry.fog_blue3 = atoi(row[42]); - entry.fog_minclip3 = atof(row[43]); - entry.fog_maxclip3 = atof(row[44]); + entry.fog_minclip3 = static_cast(atof(row[43])); + entry.fog_maxclip3 = static_cast(atof(row[44])); entry.fog_red4 = atoi(row[45]); entry.fog_green4 = atoi(row[46]); entry.fog_blue4 = atoi(row[47]); - entry.fog_minclip4 = atof(row[48]); - entry.fog_maxclip4 = atof(row[49]); - entry.fog_density = atof(row[50]); + entry.fog_minclip4 = static_cast(atof(row[48])); + entry.fog_maxclip4 = static_cast(atof(row[49])); + entry.fog_density = static_cast(atof(row[50])); entry.flag_needed = row[51] ? row[51] : ""; entry.canbind = atoi(row[52]); entry.cancombat = atoi(row[53]); @@ -1028,7 +1028,7 @@ public: entry.snow_duration2 = atoi(row[75]); entry.snow_duration3 = atoi(row[76]); entry.snow_duration4 = atoi(row[77]); - entry.gravity = atof(row[78]); + entry.gravity = static_cast(atof(row[78])); entry.type = atoi(row[79]); entry.skylock = atoi(row[80]); entry.fast_regen_hp = atoi(row[81]); diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 93084d7a0..0efcd25b9 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -17,6 +17,11 @@ use DBD::mysql; use JSON; my $json = new JSON(); +if (!$ARGV[0]) { + print "\@example perl ~/code/utils/scripts/generators/repository-generator.pl ~/server/ [table|all] [base|extended|all]\n"; + exit; +} + ############################################# # args ############################################# @@ -277,7 +282,11 @@ foreach my $table_to_generate (@tables) { $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); } - elsif ($data_type =~ /float|double|decimal/) { + elsif ($data_type =~ /float/) { + $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast(atof(row[%s]));\n", $column_name, $index); + $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast(atof(row[%s]));\n", $column_name, $index); + } + elsif ($data_type =~ /double|decimal/) { $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); } From 30e0bbb9125b8fa19b21828ec89a50d6cdf711ea Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 12 Jul 2020 17:33:17 -0500 Subject: [PATCH 228/272] More conversion changes to reduce warnings [skip ci] --- .../base/base_base_data_repository.h | 48 +++++++++---------- .../repositories/base/base_zone_repository.h | 6 +-- .../generators/repository-generator.pl | 6 +-- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/common/repositories/base/base_base_data_repository.h b/common/repositories/base/base_base_data_repository.h index 8d1075cc5..f42ff6842 100644 --- a/common/repositories/base/base_base_data_repository.h +++ b/common/repositories/base/base_base_data_repository.h @@ -161,14 +161,14 @@ public: entry.level = atoi(row[0]); entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); + entry.hp = static_cast(atof(row[2])); + entry.mana = static_cast(atof(row[3])); + entry.end = static_cast(atof(row[4])); + entry.unk1 = static_cast(atof(row[5])); + entry.unk2 = static_cast(atof(row[6])); + entry.hp_fac = static_cast(atof(row[7])); + entry.mana_fac = static_cast(atof(row[8])); + entry.end_fac = static_cast(atof(row[9])); return entry; } @@ -313,14 +313,14 @@ public: entry.level = atoi(row[0]); entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); + entry.hp = static_cast(atof(row[2])); + entry.mana = static_cast(atof(row[3])); + entry.end = static_cast(atof(row[4])); + entry.unk1 = static_cast(atof(row[5])); + entry.unk2 = static_cast(atof(row[6])); + entry.hp_fac = static_cast(atof(row[7])); + entry.mana_fac = static_cast(atof(row[8])); + entry.end_fac = static_cast(atof(row[9])); all_entries.push_back(entry); } @@ -347,14 +347,14 @@ public: entry.level = atoi(row[0]); entry.class = atoi(row[1]); - entry.hp = atof(row[2]); - entry.mana = atof(row[3]); - entry.end = atof(row[4]); - entry.unk1 = atof(row[5]); - entry.unk2 = atof(row[6]); - entry.hp_fac = atof(row[7]); - entry.mana_fac = atof(row[8]); - entry.end_fac = atof(row[9]); + entry.hp = static_cast(atof(row[2])); + entry.mana = static_cast(atof(row[3])); + entry.end = static_cast(atof(row[4])); + entry.unk1 = static_cast(atof(row[5])); + entry.unk2 = static_cast(atof(row[6])); + entry.hp_fac = static_cast(atof(row[7])); + entry.mana_fac = static_cast(atof(row[8])); + entry.end_fac = static_cast(atof(row[9])); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index d436124ac..1229ca2ec 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -414,7 +414,7 @@ public: entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); + entry.zone_exp_multiplier = static_cast(atof(row[27])); entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); @@ -867,7 +867,7 @@ public: entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); + entry.zone_exp_multiplier = static_cast(atof(row[27])); entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); @@ -977,7 +977,7 @@ public: entry.fog_green = atoi(row[24]); entry.sky = atoi(row[25]); entry.ztype = atoi(row[26]); - entry.zone_exp_multiplier = atof(row[27]); + entry.zone_exp_multiplier = static_cast(atof(row[27])); entry.walkspeed = static_cast(atof(row[28])); entry.time_type = atoi(row[29]); entry.fog_red1 = atoi(row[30]); diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 0efcd25b9..193bd1c37 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -282,14 +282,10 @@ foreach my $table_to_generate (@tables) { $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atoi(row[%s]);\n", $column_name, $index); } - elsif ($data_type =~ /float/) { + elsif ($data_type =~ /float|double|decimal/) { $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast(atof(row[%s]));\n", $column_name, $index); $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = static_cast(atof(row[%s]));\n", $column_name, $index); } - elsif ($data_type =~ /double|decimal/) { - $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); - $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = atof(row[%s]);\n", $column_name, $index); - } else { $all_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index); $find_one_entries .= sprintf("\t\t\tentry.%-${longest_column_length}s = row[%s] ? row[%s] : \"\";\n", $column_name, $index, $index); From db4f1131293e701f2a3957a7facfcf57fe79f820 Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 13 Jul 2020 08:12:02 -0400 Subject: [PATCH 229/272] Added rule to allow the Ding sound when AA is earned. --- common/ruletypes.h | 1 + zone/exp.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/common/ruletypes.h b/common/ruletypes.h index 098fbd94f..bf61585f7 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -686,6 +686,7 @@ RULE_BOOL(AA, ModernAAScalingEnabled, false, "Are we linearly scaling AA experie RULE_REAL(AA, ModernAAScalingStartPercent, 1000, "1000% or 10x AA experience at the start of the scaling range") RULE_INT(AA, ModernAAScalingAAMinimum, 0, "The minimum number of earned AA before AA experience scaling begins") RULE_INT(AA, ModernAAScalingAALimit, 4000, "The number of earned AA when AA experience scaling ends") +RULE_BOOL(AA, SoundForAAEarned, false, "Play sound when AA point earned") RULE_CATEGORY_END() RULE_CATEGORY(Console) diff --git a/zone/exp.cpp b/zone/exp.cpp index ed510bbf9..1a314b479 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -657,6 +657,9 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) { //Message(Chat::Yellow, "You have gained %d skill points!!", m_pp.aapoints - last_unspentAA); char val1[20]={0}; MessageString(Chat::Experience, GAIN_ABILITY_POINT, ConvertArray(m_pp.aapoints, val1),m_pp.aapoints == 1 ? "" : "(s)"); //You have gained an ability point! You now have %1 ability point%2. + if (RuleB(AA, SoundForAAEarned)) { + SendSound(); + } /* QS: PlayerLogAARate */ if (RuleB(QueryServ, PlayerLogAARate)){ From 880b19cc7f8c12967a5aa2789a706c615c919a6d Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Jul 2020 13:16:27 -0500 Subject: [PATCH 230/272] Hit the zone cache first so we're not hitting the database every time someone attempts to zone --- zone/zoning.cpp | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 221b9f379..2e0b46d78 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -291,23 +291,47 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { * Expansion check */ if (content_service.GetCurrentExpansion() >= Expansion::Classic && !GetGM()) { - auto zones = ZoneRepository::GetWhere( - fmt::format( - "expansion <= {} AND short_name = '{}'", - (content_service.GetCurrentExpansion() + 1), - target_zone_name - ) - ); + + /** + * Hit the zone cache first so we're not hitting the database every time someone attempts to zone + */ + bool meets_zone_expansion_check = false; + bool found_zone = false; + for (auto &z: zone_store.zones) { + if (z.short_name == target_zone_name && z.version == 0) { + found_zone = true; + if (z.expansion <= (content_service.GetCurrentExpansion() + 1)) { + meets_zone_expansion_check = true; + break; + } + } + } + + /** + * If we fail to find a cached zone lookup because someone just so happened to change some data, second attempt + * In 99% of cases we would never get here and this would be fallback + */ + if (!found_zone) { + auto zones = ZoneRepository::GetWhere( + fmt::format( + "expansion <= {} AND short_name = '{}' and version = 0", + (content_service.GetCurrentExpansion() + 1), + target_zone_name + ) + ); + + meets_zone_expansion_check = !zones.empty(); + } LogInfo( "Checking zone request [{}] for expansion [{}] ({}) success [{}]", target_zone_name, (content_service.GetCurrentExpansion() + 1), content_service.GetCurrentExpansionName(), - !zones.empty() ? "true" : "false" + meets_zone_expansion_check ? "true" : "false" ); - if (zones.empty()) { + if (!meets_zone_expansion_check) { myerror = ZONE_ERROR_NOEXPANSION; } } From 2e0c892b07815a8082ea676ab2bb8134f9281771 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 18 Jul 2020 21:07:22 -0500 Subject: [PATCH 231/272] Add cli character:copy-character and #copycharacter --- common/database.cpp | 138 +++++++++++++++++++++++++ common/database.h | 39 +++++-- common/string_util.cpp | 19 +++- common/string_util.h | 9 +- world/world_server_command_handler.cpp | 48 ++++++++- world/world_server_command_handler.h | 1 + zone/command.cpp | 33 ++++++ zone/command.h | 1 + 8 files changed, 270 insertions(+), 18 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index dbf4cabea..01520d5a3 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -2309,3 +2309,141 @@ int Database::GetInstanceID(uint32 char_id, uint32 zone_id) { return 0; } +/** + * @param source_character_name + * @param destination_character_name + * @param destination_account_name + * @return + */ +bool Database::CopyCharacter( + std::string source_character_name, + std::string destination_character_name, + std::string destination_account_name +) +{ + auto results = QueryDatabase( + fmt::format( + "SELECT id FROM character_data WHERE name = '{}' and deleted_at is NULL LIMIT 1", + source_character_name + ) + ); + + if (results.RowCount() == 0) { + LogError("No character found with name [{}]", source_character_name); + } + + auto row = results.begin(); + std::string source_character_id = row[0]; + + results = QueryDatabase( + fmt::format( + "SELECT id FROM account WHERE name = '{}' LIMIT 1", + destination_account_name + ) + ); + + if (results.RowCount() == 0) { + LogError("No account found with name [{}]", destination_account_name); + } + + row = results.begin(); + std::string source_account_id = row[0]; + + /** + * Fresh ID + */ + results = QueryDatabase("SELECT (MAX(id) + 1) as new_id from character_data"); + row = results.begin(); + std::string new_character_id = row[0]; + + TransactionBegin(); + for (const auto &iter : DatabaseSchema::GetCharacterTables()) { + std::string table_name = iter.first; + std::string character_id_column_name = iter.second; + + /** + * Columns + */ + results = QueryDatabase(fmt::format("SHOW COLUMNS FROM {}", table_name)); + std::vector columns = {}; + int column_count = 0; + for (row = results.begin(); row != results.end(); ++row) { + columns.emplace_back(row[0]); + column_count++; + } + + results = QueryDatabase( + fmt::format( + "SELECT {} FROM {} WHERE {} = {}", + implode(",", wrap(columns, "`")), + table_name, + character_id_column_name, + source_character_id + ) + ); + + std::vector> new_rows; + for (row = results.begin(); row != results.end(); ++row) { + std::vector new_values = {}; + for (int column_index = 0; column_index < column_count; column_index++) { + std::string column = columns[column_index]; + std::string value = row[column_index] ? row[column_index] : "null"; + + if (column == character_id_column_name) { + value = new_character_id; + } + + if (column == "name" && table_name == "character_data") { + value = destination_character_name; + } + + if (column == "account_id" && table_name == "character_data") { + value = source_account_id; + } + + new_values.emplace_back(value); + } + + new_rows.emplace_back(new_values); + } + + std::string insert_values; + std::vector insert_rows; + + for (auto &r: new_rows) { + std::string insert_row = "(" + implode(",", wrap(r, "'")) + ")"; + insert_rows.emplace_back(insert_row); + } + + if (!insert_rows.empty()) { + QueryDatabase( + fmt::format( + "DELETE FROM {} WHERE {} = {}", + table_name, + character_id_column_name, + new_character_id + ) + ); + + auto insert = QueryDatabase( + fmt::format( + "INSERT INTO {} ({}) VALUES {}", + table_name, + implode(",", wrap(columns, "`")), + implode(",", insert_rows) + ) + ); + + if (!insert.ErrorMessage().empty()) { + TransactionRollback(); + return false; + break; + } + } + } + + TransactionCommit(); + + return true; +} + diff --git a/common/database.h b/common/database.h index 1d55484d5..74566f4fd 100644 --- a/common/database.h +++ b/common/database.h @@ -105,16 +105,35 @@ public: /* Character Creation */ - bool AddToNameFilter(const char* name); - bool CreateCharacter(uint32 account_id, char* name, uint16 gender, uint16 race, uint16 class_, uint8 str, uint8 sta, uint8 cha, uint8 dex, uint8 int_, uint8 agi, uint8 wis, uint8 face); - bool DeleteCharacter(char* character_name); - bool MoveCharacterToZone(const char* charname, uint32 zone_id); - bool MoveCharacterToZone(uint32 character_id, uint32 zone_id); - bool ReserveName(uint32 account_id, char* name); - bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp); - bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked); - bool SetMQDetectionFlag(const char* accountname, const char* charactername, const char* hacked, const char* zone); - bool UpdateName(const char* oldname, const char* newname); + bool AddToNameFilter(const char *name); + bool CreateCharacter( + uint32 account_id, + char *name, + uint16 gender, + uint16 race, + uint16 class_, + uint8 str, + uint8 sta, + uint8 cha, + uint8 dex, + uint8 int_, + uint8 agi, + uint8 wis, + uint8 face + ); + bool DeleteCharacter(char *character_name); + bool MoveCharacterToZone(const char *charname, uint32 zone_id); + bool MoveCharacterToZone(uint32 character_id, uint32 zone_id); + bool ReserveName(uint32 account_id, char *name); + bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct *pp); + bool SetHackerFlag(const char *accountname, const char *charactername, const char *hacked); + bool SetMQDetectionFlag(const char *accountname, const char *charactername, const char *hacked, const char *zone); + bool UpdateName(const char *oldname, const char *newname); + bool CopyCharacter( + std::string source_character_name, + std::string destination_character_name, + std::string destination_account_name + ); /* General Information Queries */ diff --git a/common/string_util.cpp b/common/string_util.cpp index 6a4555ccf..680c2822b 100644 --- a/common/string_util.cpp +++ b/common/string_util.cpp @@ -35,7 +35,7 @@ #define va_copy(d,s) ((d) = (s)) #endif -// original source: +// original source: // https://github.com/facebook/folly/blob/master/folly/String.cpp // const std::string vStringFormat(const char* format, va_list args) @@ -144,6 +144,23 @@ std::string implode(std::string glue, std::vector src) return final_output; } +std::vector wrap(std::vector &src, std::string character) +{ + std::vector new_vector; + new_vector.reserve(src.size()); + + for (auto &e: src) { + if (e == "null") { + new_vector.emplace_back(e); + continue; + } + + new_vector.emplace_back(character + e + character); + } + + return new_vector; +} + std::string EscapeString(const std::string &s) { std::string ret; diff --git a/common/string_util.h b/common/string_util.h index 3fb5e3ec9..0d602e395 100644 --- a/common/string_util.h +++ b/common/string_util.h @@ -42,6 +42,7 @@ const std::string ucfirst(std::string s); std::vector split(std::string str_to_split, char delimiter); const std::string StringFormat(const char* format, ...); const std::string vStringFormat(const char* format, va_list args); +std::vector wrap(std::vector &src, std::string character); std::string implode(std::string glue, std::vector src); std::string convert2digit(int n, std::string suffix); std::string numberToWords(unsigned long long int n); @@ -98,14 +99,14 @@ std::string implode(const std::string &glue, const std::pair &encaps } std::ostringstream oss; - + for (const T &src_iter : src) { oss << encapsulation.first << src_iter << encapsulation.second << glue; } std::string output(oss.str()); output.resize(output.size() - glue.size()); - + return output; } @@ -121,7 +122,7 @@ std::vector join_pair(const std::string &glue, const std::pair &src_iter : src) { output.push_back( - + fmt::format( "{}{}{}{}{}{}{}", encapsulation.first, @@ -151,7 +152,7 @@ std::vector join_tuple(const std::string &glue, const std::pair &src_iter : src) { output.push_back( - + fmt::format( "{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}", encapsulation.first, diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index b588577a4..0d1eecafc 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -54,6 +54,7 @@ namespace WorldserverCommandHandler { * Register commands */ function_map["world:version"] = &WorldserverCommandHandler::Version; + function_map["character:copy-character"] = &WorldserverCommandHandler::CopyCharacter; function_map["database:version"] = &WorldserverCommandHandler::DatabaseVersion; function_map["database:set-account-status"] = &WorldserverCommandHandler::DatabaseSetAccountStatus; function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema; @@ -240,12 +241,12 @@ namespace WorldserverCommandHandler { "--compress" }; - - if (argc < 3 || cmd[{"-h", "--help"}]) { - EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); + if (cmd[{"-h", "--help"}]) { return; } + EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); + auto database_dump_service = new DatabaseDumpService(); bool dump_all = cmd[{"-a", "--all"}]; @@ -453,4 +454,45 @@ namespace WorldserverCommandHandler { } } + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void CopyCharacter(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Copies a character into a destination account"; + + std::vector arguments = { + "source_character_name", + "destination_character_name", + "destination_account_name" + }; + std::vector options = { }; + + if (cmd[{"-h", "--help"}]) { + return; + } + + EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); + + std::string source_character_name = cmd(2).str(); + std::string destination_character_name = cmd(3).str(); + std::string destination_account_name = cmd(4).str(); + + LogInfo( + "Attempting to copy character [{}] to [{}] via account [{}]", + source_character_name, + destination_character_name, + destination_account_name + ); + + database.CopyCharacter( + source_character_name, + destination_character_name, + destination_account_name + ); + } + } diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index 251e1d048..2d7c59f8e 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -27,6 +27,7 @@ namespace WorldserverCommandHandler { void CommandHandler(int argc, char **argv); void Version(int argc, char **argv, argh::parser &cmd, std::string &description); + void CopyCharacter(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseVersion(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description); diff --git a/zone/command.cpp b/zone/command.cpp index 8fa63c15e..5a01f6a92 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -177,6 +177,7 @@ int command_init(void) command_add("castspell", "[spellid] - Cast a spell", 50, command_castspell) || command_add("chat", "[channel num] [message] - Send a channel message to all zones", 200, command_chat) || command_add("checklos", "- Check for line of sight to your target", 50, command_checklos) || + command_add("copycharacter", "[source_char_name] [dest_char_name] [dest_account_name] Copies character to destination account", 250, command_copycharacter) || command_add("corpse", "- Manipulate corpses, use with no arguments for help", 50, command_corpse) || command_add("corpsefix", "Attempts to bring corpses from underneath the ground within close proximity of the player", 0, command_corpsefix) || command_add("crashtest", "- Crash the zoneserver", 255, command_crashtest) || @@ -4578,6 +4579,38 @@ void command_zonelock(Client *c, const Seperator *sep) safe_delete(pack); } +void command_copycharacter(Client *c, const Seperator *sep) +{ + if (sep->argnum < 3) { + c->Message( + Chat::White, + "Usage: [source_character_name] [destination_character_name] [destination_account_name]" + ); + return; + } + + std::string source_character_name = sep->arg[1]; + std::string destination_character_name = sep->arg[2]; + std::string destination_account_name = sep->arg[3]; + + bool result = database.CopyCharacter( + source_character_name, + destination_character_name, + destination_account_name + ); + + c->Message( + Chat::Yellow, + fmt::format( + "Character Copy [{}] to [{}] via account [{}] [{}]", + source_character_name, + destination_character_name, + destination_account_name, + result ? "Success" : "Failed" + ).c_str() + ); +} + void command_corpse(Client *c, const Seperator *sep) { Mob *target=c->GetTarget(); diff --git a/zone/command.h b/zone/command.h index d2cd14467..f2f22fbcf 100644 --- a/zone/command.h +++ b/zone/command.h @@ -71,6 +71,7 @@ void command_chat(Client *c, const Seperator *sep); void command_checklos(Client *c, const Seperator *sep); void command_clearinvsnapshots(Client *c, const Seperator *sep); void command_connectworldserver(Client *c, const Seperator *sep); +void command_copycharacter(Client *c, const Seperator *sep); void command_corpse(Client *c, const Seperator *sep); void command_corpsefix(Client *c, const Seperator *sep); void command_crashtest(Client *c, const Seperator *sep); From eacd2c2cdeb1cc85d1e44cf5240e636697810a98 Mon Sep 17 00:00:00 2001 From: E Spause Date: Sun, 19 Jul 2020 02:30:50 -0400 Subject: [PATCH 232/272] Fix null pointers in group/raid pointer removal --- zone/entity.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zone/entity.cpp b/zone/entity.cpp index b00735e4a..4cccd8a52 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2476,7 +2476,7 @@ void EntityList::RemoveAllGroups() while (group_list.size()) { auto group = group_list.front(); group_list.pop_front(); - delete group; + safe_delete(group); } #if EQDEBUG >= 5 CheckGroupList (__FILE__, __LINE__); @@ -2488,7 +2488,7 @@ void EntityList::RemoveAllRaids() while (raid_list.size()) { auto raid = raid_list.front(); raid_list.pop_front(); - delete raid; + safe_delete(raid); } } @@ -2838,7 +2838,7 @@ bool EntityList::RemoveGroup(uint32 delete_id) } auto group = *it; group_list.erase(it); - delete group; + safe_delete(group); return true; } @@ -2850,7 +2850,7 @@ bool EntityList::RemoveRaid(uint32 delete_id) return false; auto raid = *it; raid_list.erase(it); - delete raid; + safe_delete(raid); return true; } From 42781036a8dc76ce1c1353ec3c71f31fe964242f Mon Sep 17 00:00:00 2001 From: E Spause Date: Sun, 19 Jul 2020 02:31:22 -0400 Subject: [PATCH 233/272] Fix issue where npc_types could become null in the cache but remain referenced, causing a crash due to invalid memory accessed --- zone/zone.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zone/zone.cpp b/zone/zone.cpp index c9342f305..a98c70c73 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -773,12 +773,14 @@ void Zone::Shutdown(bool quiet) while (!zone->npctable.empty()) { itr = zone->npctable.begin(); delete itr->second; + itr->second = nullptr; zone->npctable.erase(itr); } while (!zone->merctable.empty()) { itr = zone->merctable.begin(); delete itr->second; + itr->second = nullptr; zone->merctable.erase(itr); } @@ -788,6 +790,7 @@ void Zone::Shutdown(bool quiet) while (!zone->ldon_trap_list.empty()) { itr4 = zone->ldon_trap_list.begin(); delete itr4->second; + itr4->second = nullptr; zone->ldon_trap_list.erase(itr4); } zone->ldon_trap_entry_list.clear(); @@ -1583,6 +1586,7 @@ bool Zone::Depop(bool StartSpawnTimer) { while(!npctable.empty()) { itr = npctable.begin(); delete itr->second; + itr->second = nullptr; npctable.erase(itr); } @@ -1599,6 +1603,7 @@ void Zone::ClearNPCTypeCache(int id) { auto iter = npctable.begin(); while (iter != npctable.end()) { delete iter->second; + iter->second = nullptr; ++iter; } npctable.clear(); @@ -1608,6 +1613,7 @@ void Zone::ClearNPCTypeCache(int id) { while (iter != npctable.end()) { if (iter->first == (uint32)id) { delete iter->second; + iter->second = nullptr; npctable.erase(iter); return; } From 98340751b0827db35868a51cddacb0b8aec4608b Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 19 Jul 2020 01:34:25 -0500 Subject: [PATCH 234/272] Sanity check on adding self to other lists --- zone/entity.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zone/entity.cpp b/zone/entity.cpp index b00735e4a..2c8216101 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2657,7 +2657,6 @@ bool EntityList::RemoveMobFromCloseLists(Mob *mob) auto it = mob_list.begin(); while (it != mob_list.end()) { - LogEntityManagement( "Removing mob [{}] from [{}] close list entity_id ({})", mob->GetCleanName(), @@ -2719,7 +2718,7 @@ void EntityList::ScanCloseMobs( if (distance <= scan_range || mob->GetAggroRange() >= scan_range) { close_mobs.insert(std::pair(mob->GetID(), mob)); - if (add_self_to_other_lists) { + if (add_self_to_other_lists && scanning_mob->GetID() > 0) { bool has_mob = false; for (auto &cm: mob->close_mobs) { From 147916ce2e94ea8a04927213c2f25ae33d41675b Mon Sep 17 00:00:00 2001 From: E Spause Date: Sun, 19 Jul 2020 02:34:59 -0400 Subject: [PATCH 235/272] Set group info to null in various places When the group is disbanded, set the leader to null. When setting a new raid leader, make sure we have a new raid leader. If we don't, avoid a crash and disband the raid. It's better than zones falling apart, and will resolve itself on the next VerifyRaid call. If a member zones, set the leader pointer to nullptr. This fixes an issue where the leader pointer is freed later (MemberZoned normally cleans up the Client object), but referenced by other entities, allowing the leader to be used in the same server process tick, post-cleanup - as the leader won't exist. --- zone/groups.cpp | 4 ++++ zone/raids.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/zone/groups.cpp b/zone/groups.cpp index 5734d4672..60a58b99c 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -498,6 +498,9 @@ void Group::SendEndurancePacketFrom(Mob* member) //if the group was in the zone already bool Group::UpdatePlayer(Mob* update){ + if (!update) + return false; + bool updateSuccess = false; VerifyGroup(); @@ -1009,6 +1012,7 @@ void Group::DisbandGroup(bool joinraid) { Leader->UpdateLFP(); } + SetLeader(nullptr); safe_delete(outapp); } diff --git a/zone/raids.cpp b/zone/raids.cpp index 2dc892a9a..51c52d8d4 100644 --- a/zone/raids.cpp +++ b/zone/raids.cpp @@ -279,6 +279,8 @@ void Raid::SetRaidLeader(const char *wasLead, const char *name) Client *c = entity_list.GetClientByName(name); if(c) SetLeader(c); + else + SetLeader(nullptr); //sanity check, should never get hit but we want to prefer to NOT crash if we do VerifyRaid and leader never gets set there (raid without a leader?) LearnMembers(); VerifyRaid(); @@ -1549,6 +1551,11 @@ void Raid::VerifyRaid() SetLeader(members[x].member); strn0cpy(leadername, members[x].membername, 64); } + else + { + //should never happen, but maybe it is? + SetLeader(nullptr); + } } } } @@ -1558,6 +1565,11 @@ void Raid::MemberZoned(Client *c) if(!c) return; + if (leader == c) + { + leader = nullptr; + } + // Raid::GetGroup() goes over the members as well, this way we go over once uint32 gid = RAID_GROUPLESS; for(int x = 0; x < MAX_RAID_MEMBERS; x++) From 63ad92090aa97702f3fcf9842af5ff419442ac7a Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 19 Jul 2020 18:01:06 -0400 Subject: [PATCH 236/272] Add Lua eq.update_zone_header export to lua_general.cpp. --- zone/lua_general.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 5ad1b2266..d6be4992c 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -2461,6 +2461,7 @@ luabind::scope lua_register_general() { luabind::def("disable_recipe", &lua_disable_recipe), luabind::def("clear_npctype_cache", &lua_clear_npctype_cache), luabind::def("reloadzonestaticdata", &lua_reloadzonestaticdata), + luabind::def("update_zone_header", &lua_update_zone_header), luabind::def("clock", &lua_clock), luabind::def("create_npc", &lua_create_npc), luabind::def("log", (void(*)(int, std::string))&lua_log), From a307636962c54ae93707f35c23036901f455640a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 20 Jul 2020 22:53:58 -0500 Subject: [PATCH 237/272] Fix object update spam issue (terrible code) --- zone/object.cpp | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/zone/object.cpp b/zone/object.cpp index 9a7701733..97fdcd69b 100644 --- a/zone/object.cpp +++ b/zone/object.cpp @@ -672,30 +672,34 @@ void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Objec charges = inst->GetCharges(); } - // SQL Escape object_name - uint32 len = strlen(object.object_name) * 2 + 1; - auto object_name = new char[len]; - DoEscapeString(object_name, object.object_name, strlen(object.object_name)); + if (inst && !inst->IsType(EQ::item::ItemClassBag)) { + uint32 len = strlen(object.object_name) * 2 + 1; + auto object_name = new char[len]; + DoEscapeString(object_name, object.object_name, strlen(object.object_name)); - // Save new record for object - std::string query = StringFormat("UPDATE object SET " - "zoneid = %i, xpos = %f, ypos = %f, zpos = %f, heading = %f, " - "itemid = %i, charges = %i, objectname = '%s', type = %i, icon = %i, " - "size = %f, tilt_x = %f, tilt_y = %f " - "WHERE id = %i", - object.zone_id, object.x, object.y, object.z, object.heading, - item_id, charges, object_name, type, icon, - object.size, object.tilt_x, object.tilt_y, id); - safe_delete_array(object_name); - auto results = QueryDatabase(query); - if (!results.Success()) { - LogError("Unable to update object: [{}]", results.ErrorMessage().c_str()); - return; + // Save new record for object + std::string query = StringFormat( + "UPDATE object SET " + "zoneid = %i, xpos = %f, ypos = %f, zpos = %f, heading = %f, " + "itemid = %i, charges = %i, objectname = '%s', type = %i, icon = %i, " + "size = %f, tilt_x = %f, tilt_y = %f " + "WHERE id = %i", + object.zone_id, object.x, object.y, object.z, object.heading, + item_id, charges, object_name, type, icon, + object.size, object.tilt_x, object.tilt_y, id + ); + safe_delete_array(object_name); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogError("Unable to update object: [{}]", results.ErrorMessage().c_str()); + return; + } } - // Save container contents, if container - if (inst && inst->IsType(EQ::item::ItemClassBag)) - SaveWorldContainer(object.zone_id, id, inst); + // Save container contents, if container + if (inst && inst->IsType(EQ::item::ItemClassBag)) { + SaveWorldContainer(object.zone_id, id, inst); + } } // From 8e7591cd4b4dc1e3b715702b72e5eea185ac7b1b Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 27 Jul 2020 10:43:24 -0400 Subject: [PATCH 238/272] Added support for quests to enable and then redisable processing of movement. --- zone/embparser_api.cpp | 14 ++++++++++++++ zone/entity.cpp | 2 +- zone/lua_general.cpp | 5 +++++ zone/questmgr.cpp | 9 +++++++++ zone/questmgr.h | 1 + zone/zone.cpp | 1 + zone/zone.h | 1 + 7 files changed, 32 insertions(+), 1 deletion(-) diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index ae5a79f10..d37960105 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -2070,6 +2070,19 @@ XS(XS__repopzone) { XSRETURN_EMPTY; } +XS(XS__processmobswhilezoneempty); +XS(XS__processmobswhilezoneempty) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: quest::processmobswhilezoneempty(bool on)"); + + bool ProcessingOn = ((int) SvIV(ST(0))) == 0 ? false : true; + + quest_manager.processmobswhilezoneempty(ProcessingOn); + + XSRETURN_EMPTY; +} + XS(XS__npcrace); XS(XS__npcrace) { dXSARGS; @@ -5614,6 +5627,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "playersize"), XS__playersize, file); newXS(strcpy(buf, "playertexture"), XS__playertexture, file); newXS(strcpy(buf, "popup"), XS__popup, file); + newXS(strcpy(buf, "processmobswhilezoneempty"), XS__processmobswhilezoneempty, file); newXS(strcpy(buf, "pvp"), XS__pvp, file); newXS(strcpy(buf, "qs_player_event"), XS__qs_player_event, file); newXS(strcpy(buf, "qs_send_query"), XS__qs_send_query, file); diff --git a/zone/entity.cpp b/zone/entity.cpp index 2c8216101..38d3a0afd 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -515,7 +515,7 @@ void EntityList::MobProcess() mob_settle_timer->Disable(); } - if (numclients > 0 || + if (zone->process_mobs_while_empty || numclients > 0 || mob->GetWanderType() == 4 || mob->GetWanderType() == 6 || mob_settle_timer->Enabled()) { // Normal processing, or assuring that spawns that should diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 5ad1b2266..12a1a6fc8 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -389,6 +389,10 @@ void lua_repop_zone() { quest_manager.repopzone(); } +void lua_process_mobs_while_zone_empty(bool on) { + quest_manager.processmobswhilezoneempty(on); +} + bool lua_is_disc_tome(int item_id) { return quest_manager.isdisctome(item_id); } @@ -2167,6 +2171,7 @@ luabind::scope lua_register_general() { luabind::def("depop_all", (void(*)(int))&lua_depop_all), luabind::def("depop_zone", &lua_depop_zone), luabind::def("repop_zone", &lua_repop_zone), + luabind::def("process_mobs_while_zone_empty", &lua_process_mobs_while_zone_empty), luabind::def("is_disc_tome", &lua_is_disc_tome), luabind::def("get_race_name", (std::string(*)(uint16))&lua_get_race_name), luabind::def("get_spell_name", (std::string(*)(uint32))&lua_get_spell_name), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 9daf2d351..2b130b803 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -856,6 +856,15 @@ void QuestManager::repopzone() { } } +void QuestManager::processmobswhilezoneempty(bool on) { + if(zone) { + zone->process_mobs_while_empty = on; + } + else { + LogQuests("QuestManager::processmobswhilezoneempty called with nullptr zone. Probably syntax error in quest file"); + } +} + void QuestManager::settarget(const char *type, int target_id) { QuestManagerCurrentQuestVars(); if (!owner || !owner->IsNPC()) diff --git a/zone/questmgr.h b/zone/questmgr.h index 8e9d84cf9..9ea34e1e1 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -101,6 +101,7 @@ public: void depopall(int npc_type = 0); void depopzone(bool StartSpawnTimer = true); void repopzone(); + void processmobswhilezoneempty(bool on); void settarget(const char *type, int target_id); void follow(int entity_id, int distance); void sfollow(); diff --git a/zone/zone.cpp b/zone/zone.cpp index c9342f305..34cd2e457 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -866,6 +866,7 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) default_ruleset = 0; is_zone_time_localized = false; + process_mobs_while_empty = false; loglevelvar = 0; merchantvar = 0; diff --git a/zone/zone.h b/zone/zone.h index 9c56efbab..27d45def7 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -93,6 +93,7 @@ public: AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id); AA::Rank *GetAlternateAdvancementRank(int rank_id); bool is_zone_time_localized; + bool process_mobs_while_empty; bool AggroLimitReached() { return (aggroedmobs > 10) ? true : false; } bool AllowMercs() const { return (allow_mercs); } bool CanBind() const { return (can_bind); } From cfa3e88bb29f164751e147eca9a57ff128c5316a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Thu, 30 Jul 2020 21:10:15 -0500 Subject: [PATCH 239/272] Add command #gearup as a fairly decent start to a expansion specific way of gearing up a GM test character --- common/dbcore.cpp | 7 + common/dbcore.h | 2 + .../2020_07_20_tool_gearup_armor_sets.sql | 148916 +++++++++++++++ zone/command.cpp | 115 + zone/command.h | 1 + 5 files changed, 149041 insertions(+) create mode 100644 utils/sql/git/optional/2020_07_20_tool_gearup_armor_sets.sql diff --git a/common/dbcore.cpp b/common/dbcore.cpp index d85c4b2ae..dae05b14b 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -83,6 +83,13 @@ MySQLRequestResult DBcore::QueryDatabase(std::string query, bool retryOnFailureO return QueryDatabase(query.c_str(), query.length(), retryOnFailureOnce); } +bool DBcore::DoesTableExist(std::string table_name) +{ + auto results = QueryDatabase(fmt::format("SHOW TABLES LIKE '{}'", table_name)); + + return results.RowCount() > 0; +} + MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, bool retryOnFailureOnce) { BenchTimer timer; diff --git a/common/dbcore.h b/common/dbcore.h index 8c508255b..8e8e6b46b 100644 --- a/common/dbcore.h +++ b/common/dbcore.h @@ -35,6 +35,8 @@ public: const std::string &GetOriginHost() const; void SetOriginHost(const std::string &origin_host); + bool DoesTableExist(std::string table_name); + protected: bool Open( const char *iHost, diff --git a/utils/sql/git/optional/2020_07_20_tool_gearup_armor_sets.sql b/utils/sql/git/optional/2020_07_20_tool_gearup_armor_sets.sql new file mode 100644 index 000000000..24c2a129d --- /dev/null +++ b/utils/sql/git/optional/2020_07_20_tool_gearup_armor_sets.sql @@ -0,0 +1,148916 @@ +CREATE TABLE `tool_gearup_armor_sets` ( + `class` tinyint(4) DEFAULT NULL, + `level` smallint(6) DEFAULT NULL, + `slot` tinyint(4) DEFAULT NULL, + `item_id` int(11) DEFAULT NULL, + `score` mediumint(9) DEFAULT NULL, + `expansion` tinyint(4) DEFAULT NULL, + KEY `class` (`class`,`level`,`slot`,`item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '1', '22', '8567', '0', '0'), +('1', '1', '22', '10323', '0', '0'), +('1', '1', '22', '66166', '0', '0'), +('1', '1', '22', '10664', '0', '0'), +('1', '1', '1', '14701', '4104', '0'), +('1', '1', '1', '14702', '2500', '0'), +('1', '1', '1', '10165', '1940', '0'), +('1', '1', '1', '14658', '1146', '0'), +('1', '1', '2', '4301', '7726', '0'), +('1', '1', '2', '4831', '6040', '0'), +('1', '1', '2', '4911', '6040', '0'), +('1', '1', '2', '10142', '4824', '0'), +('1', '1', '3', '21026', '2114', '0'), +('1', '1', '3', '21002', '2114', '0'), +('1', '1', '3', '10144', '1628', '0'), +('1', '1', '3', '21303', '1510', '0'), +('1', '1', '5', '14569', '6171', '0'), +('1', '1', '5', '14703', '5500', '0'), +('1', '1', '5', '10055', '4010', '0'), +('1', '1', '5', '14700', '3906', '0'), +('1', '1', '8', '11621', '26579', '0'), +('1', '1', '8', '1546', '9983', '0'), +('1', '1', '8', '11551', '8753', '0'), +('1', '1', '8', '1409', '7747', '0'), +('1', '1', '6', '1557', '8270', '0'), +('1', '1', '6', '27701', '4137', '0'), +('1', '1', '6', '4175', '3775', '0'), +('1', '1', '6', '25062', '3672', '0'), +('1', '1', '17', '4912', '11404', '0'), +('1', '1', '17', '4832', '11404', '0'), +('1', '1', '17', '4174', '9165', '0'), +('1', '1', '17', '4309', '8225', '0'), +('1', '1', '7', '4913', '6478', '0'), +('1', '1', '7', '4833', '6478', '0'), +('1', '1', '7', '2986', '3926', '0'), +('1', '1', '7', '4176', '3789', '0'), +('1', '1', '9', '4834', '4408', '0'), +('1', '1', '9', '4914', '4408', '0'), +('1', '1', '9', '12189', '3471', '0'), +('1', '1', '9', '4177', '3032', '0'), +('1', '1', '15', '10366', '8054', '0'), +('1', '1', '15', '10151', '7200', '0'), +('1', '1', '15', '14679', '7010', '0'), +('1', '1', '15', '14678', '5708', '0'), +('1', '1', '20', '11673', '22827', '0'), +('1', '1', '20', '11601', '17566', '0'), +('1', '1', '20', '2921', '13918', '0'), +('1', '1', '20', '1365', '10500', '0'), +('1', '1', '12', '4835', '9883', '0'), +('1', '1', '12', '4915', '9883', '0'), +('1', '1', '12', '20655', '7255', '0'), +('1', '1', '12', '2923', '4008', '0'), +('1', '1', '18', '4916', '6318', '0'), +('1', '1', '18', '4836', '6318', '0'), +('1', '1', '18', '4346', '4645', '0'), +('1', '1', '18', '4179', '4393', '0'), +('1', '1', '19', '4917', '6970', '0'), +('1', '1', '19', '4837', '6970', '0'), +('1', '1', '19', '68239', '4760', '0'), +('1', '1', '19', '4180', '3654', '0'), +('1', '1', '13', '11674', '28400', '0'), +('1', '1', '13', '11667', '17080', '0'), +('1', '1', '13', '11550', '17075', '0'), +('1', '1', '13', '5401', '13799', '0'), +('1', '1', '14', '11674', '28400', '0'), +('1', '1', '14', '11632', '27713', '0'), +('1', '1', '14', '11551', '23853', '0'), +('1', '1', '14', '9428', '20353', '0'), +('1', '1', '11', '8408', '6861', '0'), +('1', '1', '11', '8325', '6668', '0'), +('1', '1', '11', '8811', '5213', '0'), +('1', '1', '11', '8810', '4798', '0'), +('1', '2', '22', '8567', '0', '0'), +('1', '2', '22', '10323', '0', '0'), +('1', '2', '22', '66166', '0', '0'), +('1', '2', '22', '10664', '0', '0'), +('1', '2', '1', '14701', '4104', '0'), +('1', '2', '1', '14702', '2500', '0'), +('1', '2', '1', '10165', '1940', '0'), +('1', '2', '1', '14658', '1146', '0'), +('1', '2', '2', '4301', '7726', '0'), +('1', '2', '2', '4831', '6040', '0'), +('1', '2', '2', '4911', '6040', '0'), +('1', '2', '2', '10142', '4824', '0'), +('1', '2', '3', '21026', '2114', '0'), +('1', '2', '3', '21002', '2114', '0'), +('1', '2', '3', '10144', '1628', '0'), +('1', '2', '3', '4226', '1510', '0'), +('1', '2', '5', '14569', '6171', '0'), +('1', '2', '5', '14703', '5500', '0'), +('1', '2', '5', '10055', '4010', '0'), +('1', '2', '5', '14700', '3906', '0'), +('1', '2', '8', '11621', '26579', '0'), +('1', '2', '8', '1546', '9983', '0'), +('1', '2', '8', '11551', '8753', '0'), +('1', '2', '8', '1409', '7747', '0'), +('1', '2', '6', '1557', '8270', '0'), +('1', '2', '6', '27701', '4171', '0'), +('1', '2', '6', '4175', '3775', '0'), +('1', '2', '6', '25062', '3672', '0'), +('1', '2', '17', '4912', '11476', '0'), +('1', '2', '17', '4832', '11476', '0'), +('1', '2', '17', '4174', '9189', '0'), +('1', '2', '17', '4309', '8225', '0'), +('1', '2', '7', '4913', '6478', '0'), +('1', '2', '7', '4833', '6478', '0'), +('1', '2', '7', '2986', '3926', '0'), +('1', '2', '7', '4176', '3789', '0'), +('1', '2', '9', '4834', '4408', '0'), +('1', '2', '9', '4914', '4408', '0'), +('1', '2', '9', '12189', '3471', '0'), +('1', '2', '9', '4177', '3032', '0'), +('1', '2', '15', '10366', '8054', '0'), +('1', '2', '15', '10151', '7200', '0'), +('1', '2', '15', '14679', '7010', '0'), +('1', '2', '15', '14678', '5708', '0'), +('1', '2', '20', '11673', '22885', '0'), +('1', '2', '20', '11601', '17614', '0'), +('1', '2', '20', '2921', '13942', '0'), +('1', '2', '20', '1365', '10500', '0'), +('1', '2', '12', '4835', '9908', '0'), +('1', '2', '12', '4915', '9908', '0'), +('1', '2', '12', '20655', '7265', '0'), +('1', '2', '12', '2923', '4008', '0'), +('1', '2', '18', '4916', '6342', '0'), +('1', '2', '18', '4836', '6342', '0'), +('1', '2', '18', '4346', '4645', '0'), +('1', '2', '18', '4179', '4393', '0'), +('1', '2', '19', '4917', '6970', '0'), +('1', '2', '19', '4837', '6970', '0'), +('1', '2', '19', '68239', '4760', '0'), +('1', '2', '19', '4180', '3654', '0'), +('1', '2', '13', '11674', '28400', '0'), +('1', '2', '13', '11667', '17101', '0'), +('1', '2', '13', '11550', '17075', '0'), +('1', '2', '13', '5401', '13799', '0'), +('1', '2', '14', '11674', '28400', '0'), +('1', '2', '14', '11632', '27786', '0'), +('1', '2', '14', '11551', '23853', '0'), +('1', '2', '14', '9428', '20353', '0'), +('1', '2', '11', '8408', '6861', '0'), +('1', '2', '11', '8325', '6668', '0'), +('1', '2', '11', '8811', '5213', '0'), +('1', '2', '11', '8810', '4798', '0'), +('1', '3', '22', '8567', '0', '0'), +('1', '3', '22', '10323', '0', '0'), +('1', '3', '22', '66166', '0', '0'), +('1', '3', '22', '10664', '0', '0'), +('1', '3', '1', '14701', '4104', '0'), +('1', '3', '1', '14702', '2500', '0'), +('1', '3', '1', '10165', '1940', '0'), +('1', '3', '1', '14658', '1146', '0'), +('1', '3', '2', '4301', '7726', '0'), +('1', '3', '2', '4831', '6040', '0'), +('1', '3', '2', '4911', '6040', '0'), +('1', '3', '2', '10142', '4824', '0'), +('1', '3', '3', '21026', '2114', '0'), +('1', '3', '3', '21002', '2114', '0'), +('1', '3', '3', '10144', '1628', '0'), +('1', '3', '3', '4382', '1510', '0'), +('1', '3', '5', '14569', '6171', '0'), +('1', '3', '5', '14703', '5500', '0'), +('1', '3', '5', '10055', '4010', '0'), +('1', '3', '5', '14700', '3906', '0'), +('1', '3', '8', '11621', '26579', '0'), +('1', '3', '8', '1546', '9983', '0'), +('1', '3', '8', '11551', '8753', '0'), +('1', '3', '8', '1409', '7747', '0'), +('1', '3', '6', '1557', '8270', '0'), +('1', '3', '6', '27701', '4200', '0'), +('1', '3', '6', '4175', '3775', '0'), +('1', '3', '6', '25062', '3672', '0'), +('1', '3', '17', '4912', '11539', '0'), +('1', '3', '17', '4832', '11539', '0'), +('1', '3', '17', '4174', '9210', '0'), +('1', '3', '17', '4309', '8225', '0'), +('1', '3', '7', '4913', '6478', '0'), +('1', '3', '7', '4833', '6478', '0'), +('1', '3', '7', '2986', '3926', '0'), +('1', '3', '7', '4343', '3793', '0'), +('1', '3', '9', '4834', '4408', '0'), +('1', '3', '9', '4914', '4408', '0'), +('1', '3', '9', '12189', '3471', '0'), +('1', '3', '9', '4177', '3032', '0'), +('1', '3', '15', '10366', '8054', '0'), +('1', '3', '15', '10151', '7200', '0'), +('1', '3', '15', '14679', '7010', '0'), +('1', '3', '15', '14678', '5708', '0'), +('1', '3', '20', '11673', '22936', '0'), +('1', '3', '20', '11601', '17656', '0'), +('1', '3', '20', '2921', '13963', '0'), +('1', '3', '20', '1365', '10500', '0'), +('1', '3', '12', '4835', '9929', '0'), +('1', '3', '12', '4915', '9929', '0'), +('1', '3', '12', '20655', '7273', '0'), +('1', '3', '12', '2923', '4008', '0'), +('1', '3', '18', '4916', '6363', '0'), +('1', '3', '18', '4836', '6363', '0'), +('1', '3', '18', '4346', '4645', '0'), +('1', '3', '18', '4179', '4393', '0'), +('1', '3', '19', '4917', '6970', '0'), +('1', '3', '19', '4837', '6970', '0'), +('1', '3', '19', '68239', '4760', '0'), +('1', '3', '19', '4180', '3654', '0'), +('1', '3', '13', '11674', '28400', '0'), +('1', '3', '13', '11667', '17120', '0'), +('1', '3', '13', '11550', '17075', '0'), +('1', '3', '13', '5401', '13799', '0'), +('1', '3', '14', '11674', '28400', '0'), +('1', '3', '14', '11632', '27849', '0'), +('1', '3', '14', '11551', '23853', '0'), +('1', '3', '14', '9428', '20353', '0'), +('1', '3', '11', '8408', '6861', '0'), +('1', '3', '11', '8325', '6668', '0'), +('1', '3', '11', '8811', '5213', '0'), +('1', '3', '11', '8810', '4798', '0'), +('1', '4', '22', '8567', '0', '0'), +('1', '4', '22', '10323', '0', '0'), +('1', '4', '22', '66166', '0', '0'), +('1', '4', '22', '10664', '0', '0'), +('1', '4', '1', '14701', '4104', '0'), +('1', '4', '1', '14702', '2500', '0'), +('1', '4', '1', '10165', '1940', '0'), +('1', '4', '1', '14658', '1146', '0'), +('1', '4', '2', '4301', '7726', '0'), +('1', '4', '2', '4831', '6040', '0'), +('1', '4', '2', '4911', '6040', '0'), +('1', '4', '2', '10142', '4824', '0'), +('1', '4', '3', '21026', '2114', '0'), +('1', '4', '3', '21002', '2114', '0'), +('1', '4', '3', '10144', '1628', '0'), +('1', '4', '3', '4202', '1510', '0'), +('1', '4', '5', '14569', '6171', '0'), +('1', '4', '5', '14703', '5500', '0'), +('1', '4', '5', '10055', '4010', '0'), +('1', '4', '5', '14700', '3906', '0'), +('1', '4', '8', '11621', '26579', '0'), +('1', '4', '8', '1546', '9983', '0'), +('1', '4', '8', '11551', '8753', '0'), +('1', '4', '8', '1409', '7747', '0'), +('1', '4', '6', '1557', '8270', '0'), +('1', '4', '6', '27701', '4234', '0'), +('1', '4', '6', '4175', '3775', '0'), +('1', '4', '6', '25062', '3672', '0'), +('1', '4', '17', '4912', '11612', '0'), +('1', '4', '17', '4832', '11612', '0'), +('1', '4', '17', '4174', '9235', '0'), +('1', '4', '17', '4309', '8225', '0'), +('1', '4', '7', '4913', '6478', '0'), +('1', '4', '7', '4833', '6478', '0'), +('1', '4', '7', '2986', '3926', '0'), +('1', '4', '7', '4343', '3841', '0'), +('1', '4', '9', '4834', '4408', '0'), +('1', '4', '9', '4914', '4408', '0'), +('1', '4', '9', '12189', '3471', '0'), +('1', '4', '9', '4177', '3032', '0'), +('1', '4', '15', '10366', '8054', '0'), +('1', '4', '15', '10151', '7200', '0'), +('1', '4', '15', '14679', '7010', '0'), +('1', '4', '15', '14678', '5708', '0'), +('1', '4', '20', '11673', '22994', '0'), +('1', '4', '20', '11601', '17705', '0'), +('1', '4', '20', '2921', '13987', '0'), +('1', '4', '20', '1365', '10500', '0'), +('1', '4', '12', '4835', '9953', '0'), +('1', '4', '12', '4915', '9953', '0'), +('1', '4', '12', '20655', '7283', '0'), +('1', '4', '12', '2923', '4008', '0'), +('1', '4', '18', '4916', '6387', '0'), +('1', '4', '18', '4836', '6387', '0'), +('1', '4', '18', '4346', '4645', '0'), +('1', '4', '18', '4179', '4393', '0'), +('1', '4', '19', '4917', '6970', '0'), +('1', '4', '19', '4837', '6970', '0'), +('1', '4', '19', '68239', '4760', '0'), +('1', '4', '19', '4180', '3654', '0'), +('1', '4', '13', '11674', '28400', '0'), +('1', '4', '13', '11667', '17142', '0'), +('1', '4', '13', '11550', '17075', '0'), +('1', '4', '13', '5401', '13799', '0'), +('1', '4', '14', '11674', '28400', '0'), +('1', '4', '14', '11632', '27922', '0'), +('1', '4', '14', '11551', '23853', '0'), +('1', '4', '14', '9428', '20353', '0'), +('1', '4', '11', '8408', '6861', '0'), +('1', '4', '11', '8325', '6668', '0'), +('1', '4', '11', '8811', '5213', '0'), +('1', '4', '11', '8810', '4798', '0'), +('1', '5', '22', '8567', '0', '0'), +('1', '5', '22', '10323', '0', '0'), +('1', '5', '22', '66166', '0', '0'), +('1', '5', '22', '10664', '0', '0'), +('1', '5', '1', '14701', '4104', '0'), +('1', '5', '1', '14702', '2500', '0'), +('1', '5', '1', '10165', '1940', '0'), +('1', '5', '1', '14658', '1146', '0'), +('1', '5', '2', '4301', '7726', '0'), +('1', '5', '2', '4831', '6040', '0'), +('1', '5', '2', '4911', '6040', '0'), +('1', '5', '2', '10142', '4824', '0'), +('1', '5', '3', '21026', '2114', '0'), +('1', '5', '3', '21002', '2114', '0'), +('1', '5', '3', '71529', '1720', '0'), +('1', '5', '3', '10144', '1628', '0'), +('1', '5', '5', '14569', '6171', '0'), +('1', '5', '5', '14703', '5500', '0'), +('1', '5', '5', '10055', '4010', '0'), +('1', '5', '5', '14700', '3906', '0'), +('1', '5', '8', '11621', '26579', '0'), +('1', '5', '8', '1546', '9983', '0'), +('1', '5', '8', '11551', '8753', '0'), +('1', '5', '8', '1409', '7747', '0'), +('1', '5', '6', '1557', '8270', '0'), +('1', '5', '6', '27701', '4268', '0'), +('1', '5', '6', '4175', '3775', '0'), +('1', '5', '6', '25062', '3672', '0'), +('1', '5', '17', '4912', '11684', '0'), +('1', '5', '17', '4832', '11684', '0'), +('1', '5', '17', '4174', '9259', '0'), +('1', '5', '17', '4309', '8225', '0'), +('1', '5', '7', '4913', '6478', '0'), +('1', '5', '7', '4833', '6478', '0'), +('1', '5', '7', '2986', '3926', '0'), +('1', '5', '7', '4343', '3890', '0'), +('1', '5', '9', '4834', '4408', '0'), +('1', '5', '9', '4914', '4408', '0'), +('1', '5', '9', '12189', '3471', '0'), +('1', '5', '9', '4177', '3032', '0'), +('1', '5', '15', '10366', '8054', '0'), +('1', '5', '15', '10151', '7200', '0'), +('1', '5', '15', '14679', '7010', '0'), +('1', '5', '15', '14678', '5708', '0'), +('1', '5', '20', '11673', '23052', '0'), +('1', '5', '20', '11601', '17753', '0'), +('1', '5', '20', '2921', '14011', '0'), +('1', '5', '20', '1365', '10500', '0'), +('1', '5', '12', '4835', '9977', '0'), +('1', '5', '12', '4915', '9977', '0'), +('1', '5', '12', '20655', '7293', '0'), +('1', '5', '12', '2923', '4008', '0'), +('1', '5', '18', '4916', '6411', '0'), +('1', '5', '18', '4836', '6411', '0'), +('1', '5', '18', '4346', '4645', '0'), +('1', '5', '18', '4179', '4393', '0'), +('1', '5', '19', '4917', '6970', '0'), +('1', '5', '19', '4837', '6970', '0'), +('1', '5', '19', '68239', '4760', '0'), +('1', '5', '19', '4180', '3654', '0'), +('1', '5', '13', '11674', '28400', '0'), +('1', '5', '13', '11667', '17164', '0'), +('1', '5', '13', '11550', '17075', '0'), +('1', '5', '13', '5401', '13799', '0'), +('1', '5', '14', '11674', '28400', '0'), +('1', '5', '14', '11632', '27994', '0'), +('1', '5', '14', '11551', '23853', '0'), +('1', '5', '14', '9428', '20353', '0'), +('1', '5', '11', '8408', '6861', '0'), +('1', '5', '11', '8325', '6668', '0'), +('1', '5', '11', '8811', '5213', '0'), +('1', '5', '11', '8810', '4798', '0'), +('1', '6', '22', '8567', '0', '0'), +('1', '6', '22', '10323', '0', '0'), +('1', '6', '22', '66166', '0', '0'), +('1', '6', '22', '10664', '0', '0'), +('1', '6', '1', '14701', '4104', '0'), +('1', '6', '1', '14702', '2500', '0'), +('1', '6', '1', '10165', '1940', '0'), +('1', '6', '1', '14658', '1146', '0'), +('1', '6', '2', '4301', '7726', '0'), +('1', '6', '2', '4831', '6040', '0'), +('1', '6', '2', '4911', '6040', '0'), +('1', '6', '2', '10142', '4824', '0'), +('1', '6', '3', '21026', '2114', '0'), +('1', '6', '3', '21002', '2114', '0'), +('1', '6', '3', '71529', '2074', '0'), +('1', '6', '3', '10144', '1628', '0'), +('1', '6', '5', '14569', '6171', '0'), +('1', '6', '5', '14703', '5500', '0'), +('1', '6', '5', '10055', '4010', '0'), +('1', '6', '5', '14700', '3906', '0'), +('1', '6', '8', '11621', '26579', '0'), +('1', '6', '8', '1546', '9983', '0'), +('1', '6', '8', '11551', '8753', '0'), +('1', '6', '8', '1409', '7747', '0'), +('1', '6', '6', '1557', '8270', '0'), +('1', '6', '6', '27701', '4297', '0'), +('1', '6', '6', '4175', '3775', '0'), +('1', '6', '6', '25062', '3672', '0'), +('1', '6', '17', '4912', '11748', '0'), +('1', '6', '17', '4832', '11748', '0'), +('1', '6', '17', '4174', '9280', '0'), +('1', '6', '17', '4309', '8225', '0'), +('1', '6', '7', '4913', '6478', '0'), +('1', '6', '7', '4833', '6478', '0'), +('1', '6', '7', '4343', '3932', '0'), +('1', '6', '7', '2986', '3926', '0'), +('1', '6', '9', '4834', '4408', '0'), +('1', '6', '9', '4914', '4408', '0'), +('1', '6', '9', '12189', '3471', '0'), +('1', '6', '9', '4177', '3032', '0'), +('1', '6', '15', '10366', '8054', '0'), +('1', '6', '15', '10151', '7200', '0'), +('1', '6', '15', '14679', '7010', '0'), +('1', '6', '15', '14678', '5708', '0'), +('1', '6', '20', '11673', '23102', '0'), +('1', '6', '20', '11601', '17795', '0'), +('1', '6', '20', '2921', '14032', '0'), +('1', '6', '20', '1365', '10500', '0'), +('1', '6', '12', '4835', '9998', '0'), +('1', '6', '12', '4915', '9998', '0'), +('1', '6', '12', '20655', '7301', '0'), +('1', '6', '12', '2923', '4008', '0'), +('1', '6', '18', '4916', '6433', '0'), +('1', '6', '18', '4836', '6433', '0'), +('1', '6', '18', '4346', '4645', '0'), +('1', '6', '18', '4179', '4393', '0'), +('1', '6', '19', '4917', '6970', '0'), +('1', '6', '19', '4837', '6970', '0'), +('1', '6', '19', '68239', '4760', '0'), +('1', '6', '19', '4180', '3654', '0'), +('1', '6', '13', '11674', '28400', '0'), +('1', '6', '13', '11667', '17183', '0'), +('1', '6', '13', '11550', '17075', '0'), +('1', '6', '13', '5401', '13799', '0'), +('1', '6', '14', '11674', '28400', '0'), +('1', '6', '14', '11632', '28058', '0'), +('1', '6', '14', '11551', '23853', '0'), +('1', '6', '14', '9428', '20353', '0'), +('1', '6', '11', '8408', '6861', '0'), +('1', '6', '11', '8325', '6668', '0'), +('1', '6', '11', '8811', '5213', '0'), +('1', '6', '11', '8810', '4798', '0'), +('1', '7', '22', '8567', '0', '0'), +('1', '7', '22', '10323', '0', '0'), +('1', '7', '22', '66166', '0', '0'), +('1', '7', '22', '10664', '0', '0'), +('1', '7', '1', '14701', '4104', '0'), +('1', '7', '1', '14702', '2500', '0'), +('1', '7', '1', '10165', '1940', '0'), +('1', '7', '1', '14658', '1146', '0'), +('1', '7', '2', '4301', '7726', '0'), +('1', '7', '2', '4831', '6040', '0'), +('1', '7', '2', '4911', '6040', '0'), +('1', '7', '2', '10142', '4824', '0'), +('1', '7', '3', '71529', '2433', '0'), +('1', '7', '3', '21026', '2114', '0'), +('1', '7', '3', '21002', '2114', '0'), +('1', '7', '3', '10144', '1628', '0'), +('1', '7', '5', '14569', '6171', '0'), +('1', '7', '5', '14703', '5500', '0'), +('1', '7', '5', '10055', '4010', '0'), +('1', '7', '5', '14700', '3906', '0'), +('1', '7', '8', '11621', '26579', '0'), +('1', '7', '8', '1546', '9983', '0'), +('1', '7', '8', '11551', '8753', '0'), +('1', '7', '8', '1409', '7747', '0'), +('1', '7', '6', '1557', '8270', '0'), +('1', '7', '6', '27701', '4331', '0'), +('1', '7', '6', '4175', '3775', '0'), +('1', '7', '6', '25062', '3672', '0'), +('1', '7', '17', '4912', '11820', '0'), +('1', '7', '17', '4832', '11820', '0'), +('1', '7', '17', '4174', '9304', '0'), +('1', '7', '17', '4309', '8225', '0'), +('1', '7', '7', '4913', '6478', '0'), +('1', '7', '7', '4833', '6478', '0'), +('1', '7', '7', '4343', '3980', '0'), +('1', '7', '7', '2986', '3926', '0'), +('1', '7', '9', '4834', '4408', '0'), +('1', '7', '9', '4914', '4408', '0'), +('1', '7', '9', '12189', '3471', '0'), +('1', '7', '9', '4177', '3032', '0'), +('1', '7', '15', '10366', '8054', '0'), +('1', '7', '15', '10151', '7200', '0'), +('1', '7', '15', '14679', '7010', '0'), +('1', '7', '15', '14678', '5708', '0'), +('1', '7', '20', '11673', '23160', '0'), +('1', '7', '20', '11601', '17844', '0'), +('1', '7', '20', '2921', '14057', '0'), +('1', '7', '20', '1365', '10500', '0'), +('1', '7', '12', '4835', '10022', '0'), +('1', '7', '12', '4915', '10022', '0'), +('1', '7', '12', '20655', '7311', '0'), +('1', '7', '12', '11624', '4023', '0'), +('1', '7', '18', '4916', '6457', '0'), +('1', '7', '18', '4836', '6457', '0'), +('1', '7', '18', '4346', '4645', '0'), +('1', '7', '18', '4179', '4393', '0'), +('1', '7', '19', '4917', '6970', '0'), +('1', '7', '19', '4837', '6970', '0'), +('1', '7', '19', '68239', '4760', '0'), +('1', '7', '19', '4180', '3654', '0'), +('1', '7', '13', '11674', '28400', '0'), +('1', '7', '13', '11667', '17205', '0'), +('1', '7', '13', '11550', '17075', '0'), +('1', '7', '13', '5401', '13799', '0'), +('1', '7', '14', '11674', '28400', '0'), +('1', '7', '14', '11632', '28130', '0'), +('1', '7', '14', '11551', '23853', '0'), +('1', '7', '14', '9428', '20353', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '7', '11', '8408', '6861', '0'), +('1', '7', '11', '8325', '6668', '0'), +('1', '7', '11', '8811', '5213', '0'), +('1', '7', '11', '8810', '4798', '0'), +('1', '8', '22', '8567', '0', '0'), +('1', '8', '22', '10323', '0', '0'), +('1', '8', '22', '66166', '0', '0'), +('1', '8', '22', '10664', '0', '0'), +('1', '8', '1', '14701', '4104', '0'), +('1', '8', '1', '14702', '2500', '0'), +('1', '8', '1', '10165', '1940', '0'), +('1', '8', '1', '14658', '1146', '0'), +('1', '8', '2', '4301', '7726', '0'), +('1', '8', '2', '4831', '6040', '0'), +('1', '8', '2', '4911', '6040', '0'), +('1', '8', '2', '10142', '4824', '0'), +('1', '8', '3', '71529', '2796', '0'), +('1', '8', '3', '21026', '2114', '0'), +('1', '8', '3', '21002', '2114', '0'), +('1', '8', '3', '10144', '1628', '0'), +('1', '8', '5', '14569', '6171', '0'), +('1', '8', '5', '14703', '5500', '0'), +('1', '8', '5', '10055', '4010', '0'), +('1', '8', '5', '14700', '3906', '0'), +('1', '8', '8', '11621', '26579', '0'), +('1', '8', '8', '1546', '9983', '0'), +('1', '8', '8', '11551', '8753', '0'), +('1', '8', '8', '1409', '7747', '0'), +('1', '8', '6', '1557', '8270', '0'), +('1', '8', '6', '27701', '4365', '0'), +('1', '8', '6', '4175', '3775', '0'), +('1', '8', '6', '25062', '3672', '0'), +('1', '8', '17', '4912', '11893', '0'), +('1', '8', '17', '4832', '11893', '0'), +('1', '8', '17', '4174', '9328', '0'), +('1', '8', '17', '4309', '8225', '0'), +('1', '8', '7', '4913', '6478', '0'), +('1', '8', '7', '4833', '6478', '0'), +('1', '8', '7', '4343', '4029', '0'), +('1', '8', '7', '2986', '3926', '0'), +('1', '8', '9', '4834', '4408', '0'), +('1', '8', '9', '4914', '4408', '0'), +('1', '8', '9', '12189', '3471', '0'), +('1', '8', '9', '4177', '3032', '0'), +('1', '8', '15', '10366', '8054', '0'), +('1', '8', '15', '10151', '7200', '0'), +('1', '8', '15', '14679', '7010', '0'), +('1', '8', '15', '14678', '5708', '0'), +('1', '8', '20', '11673', '23218', '0'), +('1', '8', '20', '11601', '17892', '0'), +('1', '8', '20', '2921', '14081', '0'), +('1', '8', '20', '1365', '10500', '0'), +('1', '8', '12', '4835', '10046', '0'), +('1', '8', '12', '4915', '10046', '0'), +('1', '8', '12', '20655', '7320', '0'), +('1', '8', '12', '11624', '4057', '0'), +('1', '8', '18', '4916', '6481', '0'), +('1', '8', '18', '4836', '6481', '0'), +('1', '8', '18', '4346', '4645', '0'), +('1', '8', '18', '4179', '4393', '0'), +('1', '8', '19', '4917', '6970', '0'), +('1', '8', '19', '4837', '6970', '0'), +('1', '8', '19', '68239', '4760', '0'), +('1', '8', '19', '4180', '3654', '0'), +('1', '8', '13', '11674', '28400', '0'), +('1', '8', '13', '11667', '17226', '0'), +('1', '8', '13', '11550', '17075', '0'), +('1', '8', '13', '5401', '13799', '0'), +('1', '8', '14', '11674', '28400', '0'), +('1', '8', '14', '11632', '28203', '0'), +('1', '8', '14', '11551', '23853', '0'), +('1', '8', '14', '9428', '20353', '0'), +('1', '8', '11', '8408', '6861', '0'), +('1', '8', '11', '8325', '6668', '0'), +('1', '8', '11', '8811', '5213', '0'), +('1', '8', '11', '8810', '4798', '0'), +('1', '9', '22', '8567', '0', '0'), +('1', '9', '22', '10323', '0', '0'), +('1', '9', '22', '66166', '0', '0'), +('1', '9', '22', '10664', '0', '0'), +('1', '9', '1', '14701', '4104', '0'), +('1', '9', '1', '14702', '2500', '0'), +('1', '9', '1', '10165', '1940', '0'), +('1', '9', '1', '14658', '1146', '0'), +('1', '9', '2', '4301', '7726', '0'), +('1', '9', '2', '4831', '6040', '0'), +('1', '9', '2', '4911', '6040', '0'), +('1', '9', '2', '10142', '4824', '0'), +('1', '9', '3', '71529', '3163', '0'), +('1', '9', '3', '21026', '2114', '0'), +('1', '9', '3', '21002', '2114', '0'), +('1', '9', '3', '10144', '1628', '0'), +('1', '9', '5', '14569', '6171', '0'), +('1', '9', '5', '14703', '5500', '0'), +('1', '9', '5', '10055', '4010', '0'), +('1', '9', '5', '14700', '3906', '0'), +('1', '9', '8', '11621', '26579', '0'), +('1', '9', '8', '1546', '9983', '0'), +('1', '9', '8', '11551', '8753', '0'), +('1', '9', '8', '1409', '7747', '0'), +('1', '9', '6', '1557', '8270', '0'), +('1', '9', '6', '27701', '4399', '0'), +('1', '9', '6', '4175', '3775', '0'), +('1', '9', '6', '25062', '3672', '0'), +('1', '9', '17', '4912', '11965', '0'), +('1', '9', '17', '4832', '11965', '0'), +('1', '9', '17', '4174', '9352', '0'), +('1', '9', '17', '4309', '8225', '0'), +('1', '9', '7', '4913', '6478', '0'), +('1', '9', '7', '4833', '6478', '0'), +('1', '9', '7', '4343', '4077', '0'), +('1', '9', '7', '2986', '3926', '0'), +('1', '9', '9', '4834', '4408', '0'), +('1', '9', '9', '4914', '4408', '0'), +('1', '9', '9', '12189', '3471', '0'), +('1', '9', '9', '4177', '3032', '0'), +('1', '9', '15', '10366', '8054', '0'), +('1', '9', '15', '10151', '7200', '0'), +('1', '9', '15', '14679', '7010', '0'), +('1', '9', '15', '14678', '5708', '0'), +('1', '9', '20', '11673', '23276', '0'), +('1', '9', '20', '11601', '17940', '0'), +('1', '9', '20', '2921', '14105', '0'), +('1', '9', '20', '1365', '10500', '0'), +('1', '9', '12', '4835', '10071', '0'), +('1', '9', '12', '4915', '10071', '0'), +('1', '9', '12', '20655', '7330', '0'), +('1', '9', '12', '11624', '4091', '0'), +('1', '9', '18', '4916', '6505', '0'), +('1', '9', '18', '4836', '6505', '0'), +('1', '9', '18', '4346', '4645', '0'), +('1', '9', '18', '4179', '4393', '0'), +('1', '9', '19', '4917', '6970', '0'), +('1', '9', '19', '4837', '6970', '0'), +('1', '9', '19', '68239', '4760', '0'), +('1', '9', '19', '4180', '3654', '0'), +('1', '9', '13', '11674', '28400', '0'), +('1', '9', '13', '11667', '17248', '0'), +('1', '9', '13', '11550', '17075', '0'), +('1', '9', '13', '5401', '13799', '0'), +('1', '9', '14', '11674', '28400', '0'), +('1', '9', '14', '11632', '28275', '0'), +('1', '9', '14', '11551', '23853', '0'), +('1', '9', '14', '9428', '20353', '0'), +('1', '9', '11', '8408', '6861', '0'), +('1', '9', '11', '8325', '6668', '0'), +('1', '9', '11', '8811', '5213', '0'), +('1', '9', '11', '8810', '4798', '0'), +('1', '10', '22', '8567', '0', '0'), +('1', '10', '22', '10323', '0', '0'), +('1', '10', '22', '66166', '0', '0'), +('1', '10', '22', '10664', '0', '0'), +('1', '10', '1', '14701', '4104', '0'), +('1', '10', '1', '14702', '2500', '0'), +('1', '10', '1', '10165', '1940', '0'), +('1', '10', '1', '14658', '1146', '0'), +('1', '10', '2', '4301', '7726', '0'), +('1', '10', '2', '4831', '6040', '0'), +('1', '10', '2', '4911', '6040', '0'), +('1', '10', '2', '10142', '4824', '0'), +('1', '10', '3', '71529', '3534', '0'), +('1', '10', '3', '21026', '2114', '0'), +('1', '10', '3', '21002', '2114', '0'), +('1', '10', '3', '10144', '1628', '0'), +('1', '10', '5', '14569', '6171', '0'), +('1', '10', '5', '14703', '5500', '0'), +('1', '10', '5', '10055', '4010', '0'), +('1', '10', '5', '14700', '3906', '0'), +('1', '10', '8', '11621', '26579', '0'), +('1', '10', '8', '1546', '9983', '0'), +('1', '10', '8', '11551', '8753', '0'), +('1', '10', '8', '1409', '7747', '0'), +('1', '10', '6', '1557', '8270', '0'), +('1', '10', '6', '27701', '4433', '0'), +('1', '10', '6', '4175', '3775', '0'), +('1', '10', '6', '25062', '3672', '0'), +('1', '10', '17', '4912', '12038', '0'), +('1', '10', '17', '4832', '12038', '0'), +('1', '10', '17', '4174', '9377', '0'), +('1', '10', '17', '4309', '8225', '0'), +('1', '10', '7', '4913', '6478', '0'), +('1', '10', '7', '4833', '6478', '0'), +('1', '10', '7', '4343', '4125', '0'), +('1', '10', '7', '2986', '3926', '0'), +('1', '10', '9', '4834', '4408', '0'), +('1', '10', '9', '4914', '4408', '0'), +('1', '10', '9', '12189', '3471', '0'), +('1', '10', '9', '4177', '3032', '0'), +('1', '10', '15', '10366', '8054', '0'), +('1', '10', '15', '10151', '7200', '0'), +('1', '10', '15', '14679', '7010', '0'), +('1', '10', '15', '14678', '5708', '0'), +('1', '10', '20', '11673', '23334', '0'), +('1', '10', '20', '11601', '17988', '0'), +('1', '10', '20', '2921', '14129', '0'), +('1', '10', '20', '1365', '10500', '0'), +('1', '10', '12', '4835', '10095', '0'), +('1', '10', '12', '4915', '10095', '0'), +('1', '10', '12', '20655', '7340', '0'), +('1', '10', '12', '11624', '4125', '0'), +('1', '10', '18', '4916', '6529', '0'), +('1', '10', '18', '4836', '6529', '0'), +('1', '10', '18', '4346', '4645', '0'), +('1', '10', '18', '4179', '4393', '0'), +('1', '10', '19', '4917', '6970', '0'), +('1', '10', '19', '4837', '6970', '0'), +('1', '10', '19', '68239', '4760', '0'), +('1', '10', '19', '4180', '3654', '0'), +('1', '10', '13', '11674', '28400', '0'), +('1', '10', '13', '11667', '17270', '0'), +('1', '10', '13', '11550', '17075', '0'), +('1', '10', '13', '5401', '13799', '0'), +('1', '10', '14', '11674', '28400', '0'), +('1', '10', '14', '11632', '28348', '0'), +('1', '10', '14', '11551', '23853', '0'), +('1', '10', '14', '9428', '20353', '0'), +('1', '10', '11', '8408', '6861', '0'), +('1', '10', '11', '8325', '6668', '0'), +('1', '10', '11', '8811', '5213', '0'), +('1', '10', '11', '8810', '4798', '0'), +('1', '11', '22', '8567', '0', '0'), +('1', '11', '22', '10323', '0', '0'), +('1', '11', '22', '66166', '0', '0'), +('1', '11', '22', '10664', '0', '0'), +('1', '11', '1', '14701', '4104', '0'), +('1', '11', '1', '14702', '2500', '0'), +('1', '11', '1', '10165', '1940', '0'), +('1', '11', '1', '14658', '1146', '0'), +('1', '11', '2', '4301', '7726', '0'), +('1', '11', '2', '4831', '6040', '0'), +('1', '11', '2', '4911', '6040', '0'), +('1', '11', '2', '10142', '4824', '0'), +('1', '11', '3', '71529', '3556', '0'), +('1', '11', '3', '21026', '2114', '0'), +('1', '11', '3', '21002', '2114', '0'), +('1', '11', '3', '10144', '1628', '0'), +('1', '11', '5', '14569', '6171', '0'), +('1', '11', '5', '14703', '5500', '0'), +('1', '11', '5', '10055', '4010', '0'), +('1', '11', '5', '14700', '3906', '0'), +('1', '11', '8', '11621', '26579', '0'), +('1', '11', '8', '1546', '9983', '0'), +('1', '11', '8', '11551', '8753', '0'), +('1', '11', '8', '1409', '7747', '0'), +('1', '11', '6', '1557', '8270', '0'), +('1', '11', '6', '27701', '4471', '0'), +('1', '11', '6', '4175', '3775', '0'), +('1', '11', '6', '25062', '3672', '0'), +('1', '11', '17', '4912', '12119', '0'), +('1', '11', '17', '4832', '12119', '0'), +('1', '11', '17', '4174', '9404', '0'), +('1', '11', '17', '4309', '8225', '0'), +('1', '11', '7', '4913', '6478', '0'), +('1', '11', '7', '4833', '6478', '0'), +('1', '11', '7', '4343', '4180', '0'), +('1', '11', '7', '2986', '3926', '0'), +('1', '11', '9', '4834', '4408', '0'), +('1', '11', '9', '4914', '4408', '0'), +('1', '11', '9', '12189', '3471', '0'), +('1', '11', '9', '4177', '3032', '0'), +('1', '11', '15', '10366', '8054', '0'), +('1', '11', '15', '10151', '7200', '0'), +('1', '11', '15', '14679', '7010', '0'), +('1', '11', '15', '14678', '5708', '0'), +('1', '11', '20', '11673', '23399', '0'), +('1', '11', '20', '11601', '18043', '0'), +('1', '11', '20', '2921', '14156', '0'), +('1', '11', '20', '1365', '10500', '0'), +('1', '11', '12', '4835', '10122', '0'), +('1', '11', '12', '4915', '10122', '0'), +('1', '11', '12', '20655', '7351', '0'), +('1', '11', '12', '11624', '4163', '0'), +('1', '11', '18', '4916', '6556', '0'), +('1', '11', '18', '4836', '6556', '0'), +('1', '11', '18', '4346', '4645', '0'), +('1', '11', '18', '4179', '4393', '0'), +('1', '11', '19', '4917', '6970', '0'), +('1', '11', '19', '4837', '6970', '0'), +('1', '11', '19', '68239', '4760', '0'), +('1', '11', '19', '4180', '3654', '0'), +('1', '11', '13', '11674', '28400', '0'), +('1', '11', '13', '11667', '17294', '0'), +('1', '11', '13', '11550', '17075', '0'), +('1', '11', '13', '5401', '13799', '0'), +('1', '11', '14', '11632', '28429', '0'), +('1', '11', '14', '11674', '28400', '0'), +('1', '11', '14', '11551', '23853', '0'), +('1', '11', '14', '9428', '20353', '0'), +('1', '11', '11', '8408', '6861', '0'), +('1', '11', '11', '8325', '6668', '0'), +('1', '11', '11', '8811', '5213', '0'), +('1', '11', '11', '8810', '4798', '0'), +('1', '12', '22', '8567', '0', '0'), +('1', '12', '22', '10323', '0', '0'), +('1', '12', '22', '66166', '0', '0'), +('1', '12', '22', '10664', '0', '0'), +('1', '12', '1', '14701', '4104', '0'), +('1', '12', '1', '14702', '2500', '0'), +('1', '12', '1', '10165', '1940', '0'), +('1', '12', '1', '14658', '1146', '0'), +('1', '12', '2', '4301', '7726', '0'), +('1', '12', '2', '4831', '6040', '0'), +('1', '12', '2', '4911', '6040', '0'), +('1', '12', '2', '10142', '4824', '0'), +('1', '12', '3', '71529', '3575', '0'), +('1', '12', '3', '21026', '2114', '0'), +('1', '12', '3', '21002', '2114', '0'), +('1', '12', '3', '10144', '1628', '0'), +('1', '12', '5', '14569', '6171', '0'), +('1', '12', '5', '14703', '5500', '0'), +('1', '12', '5', '10055', '4010', '0'), +('1', '12', '5', '14700', '3906', '0'), +('1', '12', '8', '11621', '26579', '0'), +('1', '12', '8', '1546', '9983', '0'), +('1', '12', '8', '11551', '8753', '0'), +('1', '12', '8', '1409', '7747', '0'), +('1', '12', '6', '1557', '8270', '0'), +('1', '12', '6', '27701', '4505', '0'), +('1', '12', '6', '4175', '3775', '0'), +('1', '12', '6', '25062', '3672', '0'), +('1', '12', '17', '4912', '12192', '0'), +('1', '12', '17', '4832', '12192', '0'), +('1', '12', '17', '4174', '9428', '0'), +('1', '12', '17', '4309', '8225', '0'), +('1', '12', '7', '4913', '6478', '0'), +('1', '12', '7', '4833', '6478', '0'), +('1', '12', '7', '4343', '4228', '0'), +('1', '12', '7', '2986', '3926', '0'), +('1', '12', '9', '4834', '4408', '0'), +('1', '12', '9', '4914', '4408', '0'), +('1', '12', '9', '12189', '3471', '0'), +('1', '12', '9', '4177', '3032', '0'), +('1', '12', '15', '10366', '8054', '0'), +('1', '12', '15', '10151', '7200', '0'), +('1', '12', '15', '14679', '7010', '0'), +('1', '12', '15', '14678', '5708', '0'), +('1', '12', '20', '11673', '23457', '0'), +('1', '12', '20', '11601', '18091', '0'), +('1', '12', '20', '2921', '14180', '0'), +('1', '12', '20', '1365', '10500', '0'), +('1', '12', '12', '4835', '10146', '0'), +('1', '12', '12', '4915', '10146', '0'), +('1', '12', '12', '20655', '7360', '0'), +('1', '12', '12', '11624', '4197', '0'), +('1', '12', '18', '4916', '6581', '0'), +('1', '12', '18', '4836', '6581', '0'), +('1', '12', '18', '4346', '4645', '0'), +('1', '12', '18', '4179', '4393', '0'), +('1', '12', '19', '4917', '6970', '0'), +('1', '12', '19', '4837', '6970', '0'), +('1', '12', '19', '68239', '4760', '0'), +('1', '12', '19', '4180', '3654', '0'), +('1', '12', '13', '11674', '28400', '0'), +('1', '12', '13', '11667', '17316', '0'), +('1', '12', '13', '11550', '17075', '0'), +('1', '12', '13', '5401', '13799', '0'), +('1', '12', '14', '11632', '28502', '0'), +('1', '12', '14', '11674', '28400', '0'), +('1', '12', '14', '11551', '23853', '0'), +('1', '12', '14', '9428', '20353', '0'), +('1', '12', '11', '8408', '6861', '0'), +('1', '12', '11', '8325', '6668', '0'), +('1', '12', '11', '8811', '5213', '0'), +('1', '12', '11', '8810', '4798', '0'), +('1', '13', '22', '8567', '0', '0'), +('1', '13', '22', '10323', '0', '0'), +('1', '13', '22', '66166', '0', '0'), +('1', '13', '22', '10664', '0', '0'), +('1', '13', '1', '14701', '4104', '0'), +('1', '13', '1', '14702', '2500', '0'), +('1', '13', '1', '10165', '1940', '0'), +('1', '13', '1', '14658', '1146', '0'), +('1', '13', '2', '4301', '7726', '0'), +('1', '13', '2', '4831', '6040', '0'), +('1', '13', '2', '4911', '6040', '0'), +('1', '13', '2', '10142', '4824', '0'), +('1', '13', '3', '71529', '3595', '0'), +('1', '13', '3', '21026', '2114', '0'), +('1', '13', '3', '21002', '2114', '0'), +('1', '13', '3', '10144', '1628', '0'), +('1', '13', '5', '14569', '6171', '0'), +('1', '13', '5', '14703', '5500', '0'), +('1', '13', '5', '10055', '4010', '0'), +('1', '13', '5', '14700', '3906', '0'), +('1', '13', '8', '11621', '26579', '0'), +('1', '13', '8', '1546', '9983', '0'), +('1', '13', '8', '11551', '8753', '0'), +('1', '13', '8', '1409', '7747', '0'), +('1', '13', '6', '1557', '8270', '0'), +('1', '13', '6', '27701', '4538', '0'), +('1', '13', '6', '4175', '3775', '0'), +('1', '13', '6', '4302', '3692', '0'), +('1', '13', '17', '4912', '12264', '0'), +('1', '13', '17', '4832', '12264', '0'), +('1', '13', '17', '4174', '9452', '0'), +('1', '13', '17', '4309', '8225', '0'), +('1', '13', '7', '4913', '6478', '0'), +('1', '13', '7', '4833', '6478', '0'), +('1', '13', '7', '4343', '4276', '0'), +('1', '13', '7', '2986', '3926', '0'), +('1', '13', '9', '4834', '4408', '0'), +('1', '13', '9', '4914', '4408', '0'), +('1', '13', '9', '12189', '3471', '0'), +('1', '13', '9', '4177', '3032', '0'), +('1', '13', '15', '10366', '8054', '0'), +('1', '13', '15', '10151', '7200', '0'), +('1', '13', '15', '14679', '7010', '0'), +('1', '13', '15', '14678', '5708', '0'), +('1', '13', '20', '11673', '23515', '0'), +('1', '13', '20', '11601', '18139', '0'), +('1', '13', '20', '2921', '14205', '0'), +('1', '13', '20', '1365', '10500', '0'), +('1', '13', '12', '4835', '10170', '0'), +('1', '13', '12', '4915', '10170', '0'), +('1', '13', '12', '20655', '7370', '0'), +('1', '13', '12', '11624', '4231', '0'), +('1', '13', '18', '4916', '6605', '0'), +('1', '13', '18', '4836', '6605', '0'), +('1', '13', '18', '4346', '4645', '0'), +('1', '13', '18', '4179', '4393', '0'), +('1', '13', '19', '4917', '6970', '0'), +('1', '13', '19', '4837', '6970', '0'), +('1', '13', '19', '68239', '4760', '0'), +('1', '13', '19', '4180', '3654', '0'), +('1', '13', '13', '11674', '28400', '0'), +('1', '13', '13', '11667', '17338', '0'), +('1', '13', '13', '11550', '17075', '0'), +('1', '13', '13', '5401', '13799', '0'), +('1', '13', '14', '11632', '28574', '0'), +('1', '13', '14', '11674', '28400', '0'), +('1', '13', '14', '11551', '23853', '0'), +('1', '13', '14', '9428', '20353', '0'), +('1', '13', '11', '8408', '6861', '0'), +('1', '13', '11', '8325', '6668', '0'), +('1', '13', '11', '8811', '5213', '0'), +('1', '13', '11', '8810', '4798', '0'), +('1', '14', '22', '8567', '0', '0'), +('1', '14', '22', '10323', '0', '0'), +('1', '14', '22', '66166', '0', '0'), +('1', '14', '22', '10664', '0', '0'), +('1', '14', '1', '14701', '4104', '0'), +('1', '14', '1', '14702', '2500', '0'), +('1', '14', '1', '10165', '1940', '0'), +('1', '14', '1', '14658', '1146', '0'), +('1', '14', '2', '4301', '7726', '0'), +('1', '14', '2', '4831', '6040', '0'), +('1', '14', '2', '4911', '6040', '0'), +('1', '14', '2', '10142', '4824', '0'), +('1', '14', '3', '71529', '3616', '0'), +('1', '14', '3', '21026', '2114', '0'), +('1', '14', '3', '21002', '2114', '0'), +('1', '14', '3', '10144', '1628', '0'), +('1', '14', '5', '14569', '6171', '0'), +('1', '14', '5', '14703', '5500', '0'), +('1', '14', '5', '10055', '4010', '0'), +('1', '14', '5', '14700', '3906', '0'), +('1', '14', '8', '11621', '26579', '0'), +('1', '14', '8', '1546', '9983', '0'), +('1', '14', '8', '11551', '8753', '0'), +('1', '14', '8', '1409', '7747', '0'), +('1', '14', '6', '1557', '8270', '0'), +('1', '14', '6', '27701', '4577', '0'), +('1', '14', '6', '4175', '3775', '0'), +('1', '14', '6', '4302', '3724', '0'), +('1', '14', '17', '4912', '12346', '0'), +('1', '14', '17', '4832', '12346', '0'), +('1', '14', '17', '4174', '9479', '0'), +('1', '14', '17', '4309', '8225', '0'), +('1', '14', '7', '4913', '6478', '0'), +('1', '14', '7', '4833', '6478', '0'), +('1', '14', '7', '4343', '4331', '0'), +('1', '14', '7', '2986', '3926', '0'), +('1', '14', '9', '4834', '4408', '0'), +('1', '14', '9', '4914', '4408', '0'), +('1', '14', '9', '12189', '3471', '0'), +('1', '14', '9', '4177', '3032', '0'), +('1', '14', '15', '10366', '8054', '0'), +('1', '14', '15', '10151', '7200', '0'), +('1', '14', '15', '14679', '7010', '0'), +('1', '14', '15', '14678', '5708', '0'), +('1', '14', '20', '11673', '23581', '0'), +('1', '14', '20', '11601', '18194', '0'), +('1', '14', '20', '2921', '14232', '0'), +('1', '14', '20', '1365', '10500', '0'), +('1', '14', '12', '4835', '10197', '0'), +('1', '14', '12', '4915', '10197', '0'), +('1', '14', '12', '20655', '7381', '0'), +('1', '14', '12', '11624', '4269', '0'), +('1', '14', '18', '4916', '6632', '0'), +('1', '14', '18', '4836', '6632', '0'), +('1', '14', '18', '4346', '4645', '0'), +('1', '14', '18', '4179', '4393', '0'), +('1', '14', '19', '4917', '6970', '0'), +('1', '14', '19', '4837', '6970', '0'), +('1', '14', '19', '68239', '4760', '0'), +('1', '14', '19', '4180', '3654', '0'), +('1', '14', '13', '11674', '28400', '0'), +('1', '14', '13', '11667', '17362', '0'), +('1', '14', '13', '11550', '17075', '0'), +('1', '14', '13', '5401', '13799', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '14', '14', '11632', '28656', '0'), +('1', '14', '14', '11674', '28400', '0'), +('1', '14', '14', '11551', '23853', '0'), +('1', '14', '14', '9428', '20353', '0'), +('1', '14', '11', '8408', '6861', '0'), +('1', '14', '11', '8325', '6668', '0'), +('1', '14', '11', '8811', '5213', '0'), +('1', '14', '11', '8810', '4798', '0'), +('1', '15', '22', '8567', '0', '0'), +('1', '15', '22', '10323', '0', '0'), +('1', '15', '22', '66166', '0', '0'), +('1', '15', '22', '10664', '0', '0'), +('1', '15', '1', '14701', '4104', '0'), +('1', '15', '1', '14702', '2500', '0'), +('1', '15', '1', '10165', '1940', '0'), +('1', '15', '1', '14658', '1146', '0'), +('1', '15', '2', '4301', '7726', '0'), +('1', '15', '2', '4831', '6040', '0'), +('1', '15', '2', '4911', '6040', '0'), +('1', '15', '2', '10142', '4824', '0'), +('1', '15', '3', '71529', '3636', '0'), +('1', '15', '3', '21026', '2114', '0'), +('1', '15', '3', '21002', '2114', '0'), +('1', '15', '3', '10144', '1628', '0'), +('1', '15', '5', '14569', '6171', '0'), +('1', '15', '5', '14703', '5500', '0'), +('1', '15', '5', '10055', '4010', '0'), +('1', '15', '5', '14700', '3906', '0'), +('1', '15', '8', '11621', '26579', '0'), +('1', '15', '8', '1546', '9983', '0'), +('1', '15', '8', '11551', '8753', '0'), +('1', '15', '8', '1409', '7747', '0'), +('1', '15', '6', '1557', '8270', '0'), +('1', '15', '6', '27701', '4610', '0'), +('1', '15', '6', '4175', '3775', '0'), +('1', '15', '6', '4302', '3753', '0'), +('1', '15', '17', '4912', '12418', '0'), +('1', '15', '17', '4832', '12418', '0'), +('1', '15', '17', '4174', '9503', '0'), +('1', '15', '17', '4309', '8225', '0'), +('1', '15', '7', '4913', '6478', '0'), +('1', '15', '7', '4833', '6478', '0'), +('1', '15', '7', '4343', '4379', '0'), +('1', '15', '7', '2986', '3926', '0'), +('1', '15', '9', '4834', '4408', '0'), +('1', '15', '9', '4914', '4408', '0'), +('1', '15', '9', '12189', '3471', '0'), +('1', '15', '9', '4177', '3032', '0'), +('1', '15', '15', '10366', '8054', '0'), +('1', '15', '15', '10151', '7200', '0'), +('1', '15', '15', '14679', '7010', '0'), +('1', '15', '15', '14678', '5708', '0'), +('1', '15', '20', '11673', '23639', '0'), +('1', '15', '20', '11601', '18242', '0'), +('1', '15', '20', '2921', '14256', '0'), +('1', '15', '20', '1365', '10500', '0'), +('1', '15', '12', '4835', '10222', '0'), +('1', '15', '12', '4915', '10222', '0'), +('1', '15', '12', '20655', '7391', '0'), +('1', '15', '12', '11624', '4303', '0'), +('1', '15', '18', '4916', '6656', '0'), +('1', '15', '18', '4836', '6656', '0'), +('1', '15', '18', '4346', '4645', '0'), +('1', '15', '18', '4179', '4393', '0'), +('1', '15', '19', '4917', '6970', '0'), +('1', '15', '19', '4837', '6970', '0'), +('1', '15', '19', '68239', '4760', '0'), +('1', '15', '19', '4180', '3654', '0'), +('1', '15', '13', '11674', '28400', '0'), +('1', '15', '13', '11667', '17384', '0'), +('1', '15', '13', '11550', '17075', '0'), +('1', '15', '13', '5401', '13799', '0'), +('1', '15', '14', '11632', '28728', '0'), +('1', '15', '14', '11674', '28400', '0'), +('1', '15', '14', '11551', '23853', '0'), +('1', '15', '14', '9428', '20353', '0'), +('1', '15', '11', '8408', '6861', '0'), +('1', '15', '11', '8325', '6668', '0'), +('1', '15', '11', '8811', '5213', '0'), +('1', '15', '11', '8810', '4798', '0'), +('1', '16', '22', '8567', '0', '0'), +('1', '16', '22', '10323', '0', '0'), +('1', '16', '22', '66166', '0', '0'), +('1', '16', '22', '10664', '0', '0'), +('1', '16', '1', '14701', '4104', '0'), +('1', '16', '1', '14702', '2500', '0'), +('1', '16', '1', '10165', '1940', '0'), +('1', '16', '1', '14658', '1146', '0'), +('1', '16', '2', '4301', '7726', '0'), +('1', '16', '2', '4831', '6040', '0'), +('1', '16', '2', '4911', '6040', '0'), +('1', '16', '2', '10142', '4824', '0'), +('1', '16', '3', '71529', '3657', '0'), +('1', '16', '3', '21026', '2114', '0'), +('1', '16', '3', '21002', '2114', '0'), +('1', '16', '3', '10144', '1628', '0'), +('1', '16', '5', '14569', '6171', '0'), +('1', '16', '5', '14703', '5500', '0'), +('1', '16', '5', '10055', '4010', '0'), +('1', '16', '5', '14700', '3906', '0'), +('1', '16', '8', '11621', '26579', '0'), +('1', '16', '8', '1546', '9983', '0'), +('1', '16', '8', '11551', '8753', '0'), +('1', '16', '8', '1409', '7747', '0'), +('1', '16', '6', '1557', '8270', '0'), +('1', '16', '6', '27701', '4648', '0'), +('1', '16', '6', '4302', '3786', '0'), +('1', '16', '6', '4175', '3775', '0'), +('1', '16', '17', '4912', '12500', '0'), +('1', '16', '17', '4832', '12500', '0'), +('1', '16', '17', '4174', '9531', '0'), +('1', '16', '17', '4309', '8225', '0'), +('1', '16', '7', '4913', '6478', '0'), +('1', '16', '7', '4833', '6478', '0'), +('1', '16', '7', '4343', '4433', '0'), +('1', '16', '7', '2986', '3926', '0'), +('1', '16', '9', '4834', '4408', '0'), +('1', '16', '9', '4914', '4408', '0'), +('1', '16', '9', '12189', '3471', '0'), +('1', '16', '9', '4177', '3032', '0'), +('1', '16', '15', '10366', '8054', '0'), +('1', '16', '15', '10151', '7200', '0'), +('1', '16', '15', '14679', '7010', '0'), +('1', '16', '15', '14678', '5708', '0'), +('1', '16', '20', '11673', '23704', '0'), +('1', '16', '20', '11601', '18297', '0'), +('1', '16', '20', '2921', '14283', '0'), +('1', '16', '20', '1365', '10500', '0'), +('1', '16', '12', '4835', '10249', '0'), +('1', '16', '12', '4915', '10249', '0'), +('1', '16', '12', '20655', '7401', '0'), +('1', '16', '12', '11624', '4341', '0'), +('1', '16', '18', '4916', '6683', '0'), +('1', '16', '18', '4836', '6683', '0'), +('1', '16', '18', '4346', '4645', '0'), +('1', '16', '18', '4179', '4393', '0'), +('1', '16', '19', '4917', '6970', '0'), +('1', '16', '19', '4837', '6970', '0'), +('1', '16', '19', '68239', '4760', '0'), +('1', '16', '19', '4180', '3654', '0'), +('1', '16', '13', '11674', '28400', '0'), +('1', '16', '13', '11667', '17409', '0'), +('1', '16', '13', '11550', '17075', '0'), +('1', '16', '13', '5401', '13799', '0'), +('1', '16', '14', '11632', '28810', '0'), +('1', '16', '14', '11674', '28400', '0'), +('1', '16', '14', '11551', '23853', '0'), +('1', '16', '14', '9428', '20353', '0'), +('1', '16', '11', '8408', '6861', '0'), +('1', '16', '11', '8325', '6668', '0'), +('1', '16', '11', '8811', '5213', '0'), +('1', '16', '11', '8810', '4798', '0'), +('1', '17', '22', '8567', '0', '0'), +('1', '17', '22', '10323', '0', '0'), +('1', '17', '22', '66166', '0', '0'), +('1', '17', '22', '10664', '0', '0'), +('1', '17', '1', '14701', '4104', '0'), +('1', '17', '1', '14702', '2500', '0'), +('1', '17', '1', '10165', '1940', '0'), +('1', '17', '1', '14658', '1146', '0'), +('1', '17', '2', '4301', '7726', '0'), +('1', '17', '2', '4831', '6040', '0'), +('1', '17', '2', '4911', '6040', '0'), +('1', '17', '2', '10142', '4824', '0'), +('1', '17', '3', '71529', '3677', '0'), +('1', '17', '3', '21026', '2114', '0'), +('1', '17', '3', '21002', '2114', '0'), +('1', '17', '3', '10144', '1628', '0'), +('1', '17', '5', '14569', '6171', '0'), +('1', '17', '5', '14703', '5500', '0'), +('1', '17', '5', '10055', '4010', '0'), +('1', '17', '5', '14700', '3906', '0'), +('1', '17', '8', '11621', '26579', '0'), +('1', '17', '8', '1546', '9983', '0'), +('1', '17', '8', '11551', '8753', '0'), +('1', '17', '8', '1409', '7747', '0'), +('1', '17', '6', '1557', '8270', '0'), +('1', '17', '6', '27701', '4682', '0'), +('1', '17', '6', '4302', '3815', '0'), +('1', '17', '6', '4175', '3775', '0'), +('1', '17', '17', '4912', '12572', '0'), +('1', '17', '17', '4832', '12572', '0'), +('1', '17', '17', '4174', '9555', '0'), +('1', '17', '17', '4309', '8225', '0'), +('1', '17', '7', '4913', '6478', '0'), +('1', '17', '7', '4833', '6478', '0'), +('1', '17', '7', '4343', '4482', '0'), +('1', '17', '7', '2986', '3926', '0'), +('1', '17', '9', '4834', '4408', '0'), +('1', '17', '9', '4914', '4408', '0'), +('1', '17', '9', '12189', '3471', '0'), +('1', '17', '9', '4177', '3032', '0'), +('1', '17', '15', '10366', '8054', '0'), +('1', '17', '15', '10151', '7200', '0'), +('1', '17', '15', '14679', '7010', '0'), +('1', '17', '15', '14678', '5708', '0'), +('1', '17', '20', '11673', '23762', '0'), +('1', '17', '20', '11601', '18345', '0'), +('1', '17', '20', '2921', '14307', '0'), +('1', '17', '20', '1365', '10500', '0'), +('1', '17', '12', '4835', '10273', '0'), +('1', '17', '12', '4915', '10273', '0'), +('1', '17', '12', '20655', '7411', '0'), +('1', '17', '12', '11624', '4374', '0'), +('1', '17', '18', '4916', '6707', '0'), +('1', '17', '18', '4836', '6707', '0'), +('1', '17', '18', '4346', '4645', '0'), +('1', '17', '18', '4179', '4393', '0'), +('1', '17', '19', '4917', '6970', '0'), +('1', '17', '19', '4837', '6970', '0'), +('1', '17', '19', '68239', '4760', '0'), +('1', '17', '19', '4180', '3654', '0'), +('1', '17', '13', '11674', '28400', '0'), +('1', '17', '13', '11667', '17430', '0'), +('1', '17', '13', '11550', '17075', '0'), +('1', '17', '13', '5401', '13799', '0'), +('1', '17', '14', '11632', '28882', '0'), +('1', '17', '14', '11674', '28400', '0'), +('1', '17', '14', '11551', '23853', '0'), +('1', '17', '14', '9428', '20353', '0'), +('1', '17', '11', '8408', '6861', '0'), +('1', '17', '11', '8325', '6668', '0'), +('1', '17', '11', '8811', '5213', '0'), +('1', '17', '11', '45137', '4993', '0'), +('1', '18', '22', '8567', '0', '0'), +('1', '18', '22', '10323', '0', '0'), +('1', '18', '22', '66166', '0', '0'), +('1', '18', '22', '10664', '0', '0'), +('1', '18', '1', '14701', '4104', '0'), +('1', '18', '1', '14702', '2500', '0'), +('1', '18', '1', '10165', '1940', '0'), +('1', '18', '1', '14658', '1146', '0'), +('1', '18', '2', '4301', '7726', '0'), +('1', '18', '2', '4911', '6040', '0'), +('1', '18', '2', '4831', '6040', '0'), +('1', '18', '2', '4620', '4856', '0'), +('1', '18', '3', '71529', '3698', '0'), +('1', '18', '3', '21026', '2114', '0'), +('1', '18', '3', '21002', '2114', '0'), +('1', '18', '3', '10144', '1628', '0'), +('1', '18', '5', '14569', '6171', '0'), +('1', '18', '5', '14703', '5500', '0'), +('1', '18', '5', '10055', '4010', '0'), +('1', '18', '5', '14700', '3906', '0'), +('1', '18', '8', '11621', '26579', '0'), +('1', '18', '8', '1546', '9983', '0'), +('1', '18', '8', '11551', '8753', '0'), +('1', '18', '8', '1409', '7747', '0'), +('1', '18', '6', '1557', '8270', '0'), +('1', '18', '6', '27701', '4720', '0'), +('1', '18', '6', '4302', '3847', '0'), +('1', '18', '6', '4175', '3775', '0'), +('1', '18', '17', '4912', '12654', '0'), +('1', '18', '17', '4832', '12654', '0'), +('1', '18', '17', '4174', '9582', '0'), +('1', '18', '17', '4309', '8225', '0'), +('1', '18', '7', '4913', '6478', '0'), +('1', '18', '7', '4833', '6478', '0'), +('1', '18', '7', '4343', '4536', '0'), +('1', '18', '7', '2986', '3926', '0'), +('1', '18', '9', '4834', '4408', '0'), +('1', '18', '9', '4914', '4408', '0'), +('1', '18', '9', '12189', '3471', '0'), +('1', '18', '9', '4177', '3032', '0'), +('1', '18', '15', '10366', '8054', '0'), +('1', '18', '15', '10151', '7200', '0'), +('1', '18', '15', '14679', '7010', '0'), +('1', '18', '15', '14678', '5708', '0'), +('1', '18', '20', '11673', '23827', '0'), +('1', '18', '20', '11601', '18399', '0'), +('1', '18', '20', '2921', '14334', '0'), +('1', '18', '20', '1365', '10500', '0'), +('1', '18', '12', '4835', '10300', '0'), +('1', '18', '12', '4915', '10300', '0'), +('1', '18', '12', '20655', '7422', '0'), +('1', '18', '12', '11624', '4412', '0'), +('1', '18', '18', '4916', '6735', '0'), +('1', '18', '18', '4836', '6735', '0'), +('1', '18', '18', '4346', '4645', '0'), +('1', '18', '18', '4179', '4393', '0'), +('1', '18', '19', '4917', '6970', '0'), +('1', '18', '19', '4837', '6970', '0'), +('1', '18', '19', '68239', '4760', '0'), +('1', '18', '19', '4180', '3654', '0'), +('1', '18', '13', '11674', '28400', '0'), +('1', '18', '13', '11667', '17455', '0'), +('1', '18', '13', '11550', '17075', '0'), +('1', '18', '13', '5401', '13799', '0'), +('1', '18', '14', '11632', '28964', '0'), +('1', '18', '14', '11674', '28400', '0'), +('1', '18', '14', '11551', '23853', '0'), +('1', '18', '14', '9428', '20353', '0'), +('1', '18', '11', '8408', '6861', '0'), +('1', '18', '11', '8325', '6668', '0'), +('1', '18', '11', '45137', '5372', '0'), +('1', '18', '11', '8811', '5213', '0'), +('1', '19', '22', '8567', '0', '0'), +('1', '19', '22', '10323', '0', '0'), +('1', '19', '22', '66166', '0', '0'), +('1', '19', '22', '10664', '0', '0'), +('1', '19', '1', '14701', '4104', '0'), +('1', '19', '1', '14702', '2500', '0'), +('1', '19', '1', '10165', '1940', '0'), +('1', '19', '1', '14658', '1146', '0'), +('1', '19', '2', '4301', '7726', '0'), +('1', '19', '2', '4911', '6040', '0'), +('1', '19', '2', '4831', '6040', '0'), +('1', '19', '2', '4620', '4894', '0'), +('1', '19', '3', '71529', '3720', '0'), +('1', '19', '3', '21026', '2114', '0'), +('1', '19', '3', '21002', '2114', '0'), +('1', '19', '3', '10144', '1628', '0'), +('1', '19', '5', '14569', '6171', '0'), +('1', '19', '5', '14703', '5500', '0'), +('1', '19', '5', '10055', '4010', '0'), +('1', '19', '5', '14700', '3906', '0'), +('1', '19', '8', '11621', '26579', '0'), +('1', '19', '8', '1546', '9983', '0'), +('1', '19', '8', '11551', '8753', '0'), +('1', '19', '8', '1409', '7747', '0'), +('1', '19', '6', '1557', '8270', '0'), +('1', '19', '6', '27701', '4758', '0'), +('1', '19', '6', '4302', '3880', '0'), +('1', '19', '6', '4175', '3775', '0'), +('1', '19', '17', '4912', '12735', '0'), +('1', '19', '17', '4832', '12735', '0'), +('1', '19', '17', '4174', '9609', '0'), +('1', '19', '17', '4309', '8225', '0'), +('1', '19', '7', '4913', '6478', '0'), +('1', '19', '7', '4833', '6478', '0'), +('1', '19', '7', '4343', '4590', '0'), +('1', '19', '7', '2986', '3926', '0'), +('1', '19', '9', '4834', '4408', '0'), +('1', '19', '9', '4914', '4408', '0'), +('1', '19', '9', '12189', '3471', '0'), +('1', '19', '9', '4177', '3032', '0'), +('1', '19', '15', '10366', '8054', '0'), +('1', '19', '15', '10151', '7200', '0'), +('1', '19', '15', '14679', '7010', '0'), +('1', '19', '15', '14678', '5708', '0'), +('1', '19', '20', '11673', '23892', '0'), +('1', '19', '20', '11601', '18454', '0'), +('1', '19', '20', '2921', '14362', '0'), +('1', '19', '20', '1365', '10500', '0'), +('1', '19', '12', '4835', '10327', '0'), +('1', '19', '12', '4915', '10327', '0'), +('1', '19', '12', '20655', '7433', '0'), +('1', '19', '12', '11624', '4450', '0'), +('1', '19', '18', '4916', '6762', '0'), +('1', '19', '18', '4836', '6762', '0'), +('1', '19', '18', '4346', '4645', '0'), +('1', '19', '18', '4179', '4393', '0'), +('1', '19', '19', '4917', '6970', '0'), +('1', '19', '19', '4837', '6970', '0'), +('1', '19', '19', '68239', '4760', '0'), +('1', '19', '19', '4180', '3654', '0'), +('1', '19', '13', '11674', '28400', '0'), +('1', '19', '13', '11667', '17479', '0'), +('1', '19', '13', '11550', '17075', '0'), +('1', '19', '13', '5401', '13799', '0'), +('1', '19', '14', '11632', '29045', '0'), +('1', '19', '14', '11674', '28400', '0'), +('1', '19', '14', '11551', '23853', '0'), +('1', '19', '14', '9428', '20353', '0'), +('1', '19', '11', '8408', '6861', '0'), +('1', '19', '11', '8325', '6668', '0'), +('1', '19', '11', '45137', '5659', '0'), +('1', '19', '11', '8811', '5213', '0'), +('1', '20', '22', '8567', '0', '0'), +('1', '20', '22', '10323', '0', '0'), +('1', '20', '22', '66166', '0', '0'), +('1', '20', '22', '10664', '0', '0'), +('1', '20', '1', '14701', '4104', '0'), +('1', '20', '1', '14702', '2500', '0'), +('1', '20', '1', '10165', '1940', '0'), +('1', '20', '1', '14658', '1146', '0'), +('1', '20', '2', '4301', '7726', '0'), +('1', '20', '2', '4911', '6040', '0'), +('1', '20', '2', '4831', '6040', '0'), +('1', '20', '2', '4620', '4932', '0'), +('1', '20', '3', '71529', '3742', '0'), +('1', '20', '3', '21026', '2114', '0'), +('1', '20', '3', '21002', '2114', '0'), +('1', '20', '3', '10144', '1628', '0'), +('1', '20', '5', '14569', '6171', '0'), +('1', '20', '5', '14703', '5500', '0'), +('1', '20', '5', '10055', '4010', '0'), +('1', '20', '5', '14700', '3906', '0'), +('1', '20', '8', '11621', '26579', '0'), +('1', '20', '8', '1546', '9983', '0'), +('1', '20', '8', '11551', '8753', '0'), +('1', '20', '8', '1409', '7747', '0'), +('1', '20', '6', '1557', '8270', '0'), +('1', '20', '6', '27701', '4796', '0'), +('1', '20', '6', '4302', '3913', '0'), +('1', '20', '6', '4175', '3775', '0'), +('1', '20', '17', '4912', '12817', '0'), +('1', '20', '17', '4832', '12817', '0'), +('1', '20', '17', '4174', '9636', '0'), +('1', '20', '17', '4309', '8225', '0'), +('1', '20', '7', '4913', '6478', '0'), +('1', '20', '7', '4833', '6478', '0'), +('1', '20', '7', '4343', '4645', '0'), +('1', '20', '7', '2986', '3926', '0'), +('1', '20', '9', '4834', '4408', '0'), +('1', '20', '9', '4914', '4408', '0'), +('1', '20', '9', '12189', '3471', '0'), +('1', '20', '9', '4177', '3032', '0'), +('1', '20', '15', '10366', '8054', '0'), +('1', '20', '15', '10151', '7200', '0'), +('1', '20', '15', '14679', '7010', '0'), +('1', '20', '15', '14678', '5708', '0'), +('1', '20', '20', '11673', '23958', '0'), +('1', '20', '20', '11601', '18508', '0'), +('1', '20', '20', '2921', '14389', '0'), +('1', '20', '20', '1365', '10500', '0'), +('1', '20', '12', '4835', '10354', '0'), +('1', '20', '12', '4915', '10354', '0'), +('1', '20', '12', '20655', '7444', '0'), +('1', '20', '12', '11624', '4489', '0'), +('1', '20', '18', '4916', '6789', '0'), +('1', '20', '18', '4836', '6789', '0'), +('1', '20', '18', '4346', '4645', '0'), +('1', '20', '18', '4179', '4393', '0'), +('1', '20', '19', '4917', '6970', '0'), +('1', '20', '19', '4837', '6970', '0'), +('1', '20', '19', '68239', '4760', '0'), +('1', '20', '19', '4180', '3654', '0'), +('1', '20', '13', '11674', '28910', '0'), +('1', '20', '13', '11667', '17815', '0'), +('1', '20', '13', '11550', '17401', '0'), +('1', '20', '13', '5401', '14040', '0'), +('1', '20', '14', '11632', '29127', '0'), +('1', '20', '14', '11674', '28910', '0'), +('1', '20', '14', '11551', '23853', '0'), +('1', '20', '14', '9428', '20353', '0'), +('1', '20', '11', '8408', '7116', '0'), +('1', '20', '11', '8325', '6932', '0'), +('1', '20', '11', '45137', '6108', '0'), +('1', '20', '11', '8811', '5421', '0'), +('1', '21', '22', '8567', '0', '0'), +('1', '21', '22', '10323', '0', '0'), +('1', '21', '22', '66166', '0', '0'), +('1', '21', '22', '10664', '0', '0'), +('1', '21', '1', '14701', '4104', '0'), +('1', '21', '1', '14702', '2500', '0'), +('1', '21', '1', '10165', '1940', '0'), +('1', '21', '1', '14658', '1146', '0'), +('1', '21', '2', '4301', '7726', '0'), +('1', '21', '2', '4911', '6040', '0'), +('1', '21', '2', '4831', '6040', '0'), +('1', '21', '2', '4620', '4970', '0'), +('1', '21', '3', '71529', '3764', '0'), +('1', '21', '3', '21026', '2114', '0'), +('1', '21', '3', '21002', '2114', '0'), +('1', '21', '3', '10144', '1628', '0'), +('1', '21', '5', '14569', '6171', '0'), +('1', '21', '5', '14703', '5500', '0'), +('1', '21', '5', '10055', '4010', '0'), +('1', '21', '5', '14700', '3906', '0'), +('1', '21', '8', '11621', '26579', '0'), +('1', '21', '8', '1546', '9983', '0'), +('1', '21', '8', '11551', '8753', '0'), +('1', '21', '8', '1409', '7747', '0'), +('1', '21', '6', '1557', '8270', '0'), +('1', '21', '6', '27701', '4834', '0'), +('1', '21', '6', '4302', '3945', '0'), +('1', '21', '6', '4175', '3775', '0'), +('1', '21', '17', '4912', '12898', '0'), +('1', '21', '17', '4832', '12898', '0'), +('1', '21', '17', '4174', '9663', '0'), +('1', '21', '17', '4309', '8225', '0'), +('1', '21', '7', '4913', '6478', '0'), +('1', '21', '7', '4833', '6478', '0'), +('1', '21', '7', '4343', '4699', '0'), +('1', '21', '7', '2986', '3926', '0'), +('1', '21', '9', '4834', '4408', '0'), +('1', '21', '9', '4914', '4408', '0'), +('1', '21', '9', '12189', '3471', '0'), +('1', '21', '9', '4177', '3032', '0'), +('1', '21', '15', '10366', '8054', '0'), +('1', '21', '15', '10151', '7200', '0'), +('1', '21', '15', '14679', '7010', '0'), +('1', '21', '15', '14678', '5708', '0'), +('1', '21', '20', '11673', '24023', '0'), +('1', '21', '20', '11601', '18562', '0'), +('1', '21', '20', '2921', '14416', '0'), +('1', '21', '20', '1365', '10500', '0'), +('1', '21', '12', '4835', '10382', '0'), +('1', '21', '12', '4915', '10382', '0'), +('1', '21', '12', '20655', '7455', '0'), +('1', '21', '12', '11624', '4527', '0'), +('1', '21', '18', '4916', '6816', '0'), +('1', '21', '18', '4836', '6816', '0'), +('1', '21', '18', '4346', '4645', '0'), +('1', '21', '18', '4179', '4393', '0'), +('1', '21', '19', '4917', '6970', '0'), +('1', '21', '19', '4837', '6970', '0'), +('1', '21', '19', '68239', '4760', '0'), +('1', '21', '19', '4180', '3654', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '21', '13', '11674', '29051', '0'), +('1', '21', '13', '11667', '17939', '0'), +('1', '21', '13', '11550', '17500', '0'), +('1', '21', '13', '5401', '14111', '0'), +('1', '21', '14', '11632', '29208', '0'), +('1', '21', '14', '11674', '29051', '0'), +('1', '21', '14', '11551', '23853', '0'), +('1', '21', '14', '9428', '20353', '0'), +('1', '21', '11', '8408', '7192', '0'), +('1', '21', '11', '8325', '7008', '0'), +('1', '21', '11', '45137', '6445', '0'), +('1', '21', '11', '8811', '5478', '0'), +('1', '22', '22', '8567', '0', '0'), +('1', '22', '22', '10323', '0', '0'), +('1', '22', '22', '66166', '0', '0'), +('1', '22', '22', '10664', '0', '0'), +('1', '22', '1', '14701', '4104', '0'), +('1', '22', '1', '14702', '2500', '0'), +('1', '22', '1', '10165', '1940', '0'), +('1', '22', '1', '14658', '1146', '0'), +('1', '22', '2', '4301', '7726', '0'), +('1', '22', '2', '4911', '6040', '0'), +('1', '22', '2', '4831', '6040', '0'), +('1', '22', '2', '4620', '5008', '0'), +('1', '22', '3', '71529', '3785', '0'), +('1', '22', '3', '21026', '2114', '0'), +('1', '22', '3', '21002', '2114', '0'), +('1', '22', '3', '10144', '1628', '0'), +('1', '22', '5', '14569', '6171', '0'), +('1', '22', '5', '14703', '5500', '0'), +('1', '22', '5', '10055', '4010', '0'), +('1', '22', '5', '14700', '3906', '0'), +('1', '22', '8', '11621', '26579', '0'), +('1', '22', '8', '1546', '9983', '0'), +('1', '22', '8', '11551', '8753', '0'), +('1', '22', '8', '1409', '7747', '0'), +('1', '22', '6', '1557', '8270', '0'), +('1', '22', '6', '27701', '4872', '0'), +('1', '22', '6', '4302', '3978', '0'), +('1', '22', '6', '4175', '3775', '0'), +('1', '22', '17', '4912', '12980', '0'), +('1', '22', '17', '4832', '12980', '0'), +('1', '22', '17', '4174', '9691', '0'), +('1', '22', '17', '4309', '8225', '0'), +('1', '22', '7', '4913', '6478', '0'), +('1', '22', '7', '4833', '6478', '0'), +('1', '22', '7', '4343', '4753', '0'), +('1', '22', '7', '2986', '3926', '0'), +('1', '22', '9', '4834', '4408', '0'), +('1', '22', '9', '4914', '4408', '0'), +('1', '22', '9', '12189', '3471', '0'), +('1', '22', '9', '4177', '3032', '0'), +('1', '22', '15', '10366', '8054', '0'), +('1', '22', '15', '10151', '7200', '0'), +('1', '22', '15', '14679', '7010', '0'), +('1', '22', '15', '14678', '5708', '0'), +('1', '22', '20', '11673', '24088', '0'), +('1', '22', '20', '11601', '18617', '0'), +('1', '22', '20', '2921', '14443', '0'), +('1', '22', '20', '1365', '10500', '0'), +('1', '22', '12', '4835', '10409', '0'), +('1', '22', '12', '4915', '10409', '0'), +('1', '22', '12', '20655', '7465', '0'), +('1', '22', '12', '11624', '4565', '0'), +('1', '22', '18', '4916', '6843', '0'), +('1', '22', '18', '4836', '6843', '0'), +('1', '22', '18', '4346', '4645', '0'), +('1', '22', '18', '4179', '4393', '0'), +('1', '22', '19', '4917', '6970', '0'), +('1', '22', '19', '4837', '6970', '0'), +('1', '22', '19', '68239', '4760', '0'), +('1', '22', '19', '4180', '3654', '0'), +('1', '22', '13', '11674', '29193', '0'), +('1', '22', '13', '11667', '18048', '0'), +('1', '22', '13', '11550', '17585', '0'), +('1', '22', '13', '5401', '14182', '0'), +('1', '22', '14', '11632', '29290', '0'), +('1', '22', '14', '11674', '29193', '0'), +('1', '22', '14', '11551', '23853', '0'), +('1', '22', '14', '9428', '20353', '0'), +('1', '22', '11', '8408', '7268', '0'), +('1', '22', '11', '8325', '7093', '0'), +('1', '22', '11', '45137', '6887', '0'), +('1', '22', '11', '8811', '5544', '0'), +('1', '23', '22', '8567', '0', '0'), +('1', '23', '22', '10323', '0', '0'), +('1', '23', '22', '66166', '0', '0'), +('1', '23', '22', '10664', '0', '0'), +('1', '23', '1', '14701', '4104', '0'), +('1', '23', '1', '14702', '2500', '0'), +('1', '23', '1', '10165', '1940', '0'), +('1', '23', '1', '14658', '1146', '0'), +('1', '23', '2', '4301', '7726', '0'), +('1', '23', '2', '4911', '6040', '0'), +('1', '23', '2', '4831', '6040', '0'), +('1', '23', '2', '4620', '5046', '0'), +('1', '23', '3', '71529', '3807', '0'), +('1', '23', '3', '21026', '2114', '0'), +('1', '23', '3', '21002', '2114', '0'), +('1', '23', '3', '10144', '1628', '0'), +('1', '23', '5', '14569', '6171', '0'), +('1', '23', '5', '14703', '5500', '0'), +('1', '23', '5', '10055', '4010', '0'), +('1', '23', '5', '14700', '3906', '0'), +('1', '23', '8', '11621', '26579', '0'), +('1', '23', '8', '1546', '9983', '0'), +('1', '23', '8', '11551', '8753', '0'), +('1', '23', '8', '1409', '7747', '0'), +('1', '23', '6', '1557', '8270', '0'), +('1', '23', '6', '27701', '4911', '0'), +('1', '23', '6', '4302', '4011', '0'), +('1', '23', '6', '4175', '3775', '0'), +('1', '23', '17', '4912', '13062', '0'), +('1', '23', '17', '4832', '13062', '0'), +('1', '23', '17', '4174', '9718', '0'), +('1', '23', '17', '4309', '8225', '0'), +('1', '23', '7', '4913', '6478', '0'), +('1', '23', '7', '4833', '6478', '0'), +('1', '23', '7', '4343', '4808', '0'), +('1', '23', '7', '2986', '3926', '0'), +('1', '23', '9', '4834', '4408', '0'), +('1', '23', '9', '4914', '4408', '0'), +('1', '23', '9', '12189', '3471', '0'), +('1', '23', '9', '4177', '3032', '0'), +('1', '23', '15', '10366', '8054', '0'), +('1', '23', '15', '10151', '7200', '0'), +('1', '23', '15', '14679', '7010', '0'), +('1', '23', '15', '14678', '5708', '0'), +('1', '23', '20', '11673', '24153', '0'), +('1', '23', '20', '11601', '18671', '0'), +('1', '23', '20', '2921', '14470', '0'), +('1', '23', '20', '1365', '10500', '0'), +('1', '23', '12', '4835', '10436', '0'), +('1', '23', '12', '4915', '10436', '0'), +('1', '23', '12', '20655', '7476', '0'), +('1', '23', '12', '11624', '4603', '0'), +('1', '23', '18', '4916', '6871', '0'), +('1', '23', '18', '4836', '6871', '0'), +('1', '23', '18', '4346', '4645', '0'), +('1', '23', '18', '4179', '4393', '0'), +('1', '23', '19', '4917', '6970', '0'), +('1', '23', '19', '4837', '6970', '0'), +('1', '23', '19', '68239', '4760', '0'), +('1', '23', '19', '4180', '3654', '0'), +('1', '23', '13', '11674', '29335', '0'), +('1', '23', '13', '11667', '18172', '0'), +('1', '23', '13', '11550', '17684', '0'), +('1', '23', '13', '5401', '14253', '0'), +('1', '23', '14', '11632', '29371', '0'), +('1', '23', '14', '11674', '29335', '0'), +('1', '23', '14', '11551', '23853', '0'), +('1', '23', '14', '9428', '20353', '0'), +('1', '23', '11', '8408', '7343', '0'), +('1', '23', '11', '45137', '7228', '0'), +('1', '23', '11', '8325', '7168', '0'), +('1', '23', '11', '8811', '5601', '0'), +('1', '24', '22', '8567', '0', '0'), +('1', '24', '22', '10323', '0', '0'), +('1', '24', '22', '66166', '0', '0'), +('1', '24', '22', '10664', '0', '0'), +('1', '24', '1', '14701', '4104', '0'), +('1', '24', '1', '14702', '2500', '0'), +('1', '24', '1', '10165', '1940', '0'), +('1', '24', '1', '14658', '1146', '0'), +('1', '24', '2', '4301', '7726', '0'), +('1', '24', '2', '4911', '6040', '0'), +('1', '24', '2', '4831', '6040', '0'), +('1', '24', '2', '4620', '5084', '0'), +('1', '24', '3', '71529', '3829', '0'), +('1', '24', '3', '21026', '2114', '0'), +('1', '24', '3', '21002', '2114', '0'), +('1', '24', '3', '10144', '1628', '0'), +('1', '24', '5', '14569', '6171', '0'), +('1', '24', '5', '14703', '5500', '0'), +('1', '24', '5', '10055', '4010', '0'), +('1', '24', '5', '14700', '3906', '0'), +('1', '24', '8', '11621', '26579', '0'), +('1', '24', '8', '1546', '9983', '0'), +('1', '24', '8', '11551', '8753', '0'), +('1', '24', '8', '1409', '7747', '0'), +('1', '24', '6', '1557', '8270', '0'), +('1', '24', '6', '27701', '4949', '0'), +('1', '24', '6', '4302', '4043', '0'), +('1', '24', '6', '4175', '3775', '0'), +('1', '24', '17', '4912', '13143', '0'), +('1', '24', '17', '4832', '13143', '0'), +('1', '24', '17', '4174', '9745', '0'), +('1', '24', '17', '4309', '8225', '0'), +('1', '24', '7', '4913', '6478', '0'), +('1', '24', '7', '4833', '6478', '0'), +('1', '24', '7', '4343', '4862', '0'), +('1', '24', '7', '2986', '3926', '0'), +('1', '24', '9', '4834', '4408', '0'), +('1', '24', '9', '4914', '4408', '0'), +('1', '24', '9', '12189', '3471', '0'), +('1', '24', '9', '4177', '3032', '0'), +('1', '24', '15', '10366', '8054', '0'), +('1', '24', '15', '10151', '7200', '0'), +('1', '24', '15', '14679', '7010', '0'), +('1', '24', '15', '14678', '5708', '0'), +('1', '24', '20', '11673', '24218', '0'), +('1', '24', '20', '11601', '18725', '0'), +('1', '24', '20', '2921', '14497', '0'), +('1', '24', '20', '1365', '10500', '0'), +('1', '24', '12', '4835', '10463', '0'), +('1', '24', '12', '4915', '10463', '0'), +('1', '24', '12', '20655', '7487', '0'), +('1', '24', '12', '11624', '4641', '0'), +('1', '24', '18', '4916', '6898', '0'), +('1', '24', '18', '4836', '6898', '0'), +('1', '24', '18', '4346', '4645', '0'), +('1', '24', '18', '4179', '4393', '0'), +('1', '24', '19', '4917', '6970', '0'), +('1', '24', '19', '4837', '6970', '0'), +('1', '24', '19', '68239', '4760', '0'), +('1', '24', '19', '4180', '3654', '0'), +('1', '24', '13', '11674', '29505', '0'), +('1', '24', '13', '11667', '18296', '0'), +('1', '24', '13', '11550', '17783', '0'), +('1', '24', '13', '5401', '14323', '0'), +('1', '24', '14', '11674', '29505', '0'), +('1', '24', '14', '11632', '29453', '0'), +('1', '24', '14', '11551', '23853', '0'), +('1', '24', '14', '9428', '20353', '0'), +('1', '24', '11', '45137', '7617', '0'), +('1', '24', '11', '8408', '7419', '0'), +('1', '24', '11', '8325', '7253', '0'), +('1', '24', '11', '8811', '5667', '0'), +('1', '25', '22', '8567', '0', '0'), +('1', '25', '22', '10323', '0', '0'), +('1', '25', '22', '66166', '0', '0'), +('1', '25', '22', '10664', '0', '0'), +('1', '25', '1', '14701', '4104', '0'), +('1', '25', '1', '14702', '2500', '0'), +('1', '25', '1', '10165', '1940', '0'), +('1', '25', '1', '14658', '1146', '0'), +('1', '25', '2', '4301', '7726', '0'), +('1', '25', '2', '4911', '6040', '0'), +('1', '25', '2', '4831', '6040', '0'), +('1', '25', '2', '4620', '5123', '0'), +('1', '25', '3', '71529', '3851', '0'), +('1', '25', '3', '21026', '2114', '0'), +('1', '25', '3', '21002', '2114', '0'), +('1', '25', '3', '10144', '1628', '0'), +('1', '25', '5', '14569', '6171', '0'), +('1', '25', '5', '14703', '5500', '0'), +('1', '25', '5', '10055', '4010', '0'), +('1', '25', '5', '14700', '3906', '0'), +('1', '25', '8', '11621', '26579', '0'), +('1', '25', '8', '1546', '9983', '0'), +('1', '25', '8', '11551', '8753', '0'), +('1', '25', '8', '1409', '7747', '0'), +('1', '25', '6', '1557', '8270', '0'), +('1', '25', '6', '27701', '4987', '0'), +('1', '25', '6', '4302', '4076', '0'), +('1', '25', '6', '4175', '3775', '0'), +('1', '25', '17', '4912', '13225', '0'), +('1', '25', '17', '4832', '13225', '0'), +('1', '25', '17', '4174', '9772', '0'), +('1', '25', '17', '4309', '8225', '0'), +('1', '25', '7', '4913', '6478', '0'), +('1', '25', '7', '4833', '6478', '0'), +('1', '25', '7', '4343', '4917', '0'), +('1', '25', '7', '2986', '3926', '0'), +('1', '25', '9', '4834', '4408', '0'), +('1', '25', '9', '4914', '4408', '0'), +('1', '25', '9', '12189', '3471', '0'), +('1', '25', '9', '4177', '3032', '0'), +('1', '25', '15', '10366', '8054', '0'), +('1', '25', '15', '10151', '7200', '0'), +('1', '25', '15', '14679', '7010', '0'), +('1', '25', '15', '14678', '5708', '0'), +('1', '25', '20', '11673', '24284', '0'), +('1', '25', '20', '11601', '18780', '0'), +('1', '25', '20', '2921', '14525', '0'), +('1', '25', '20', '1365', '10500', '0'), +('1', '25', '12', '4835', '10490', '0'), +('1', '25', '12', '4915', '10490', '0'), +('1', '25', '12', '20655', '7498', '0'), +('1', '25', '12', '11624', '4679', '0'), +('1', '25', '18', '4916', '6925', '0'), +('1', '25', '18', '4836', '6925', '0'), +('1', '25', '18', '4346', '4645', '0'), +('1', '25', '18', '4179', '4393', '0'), +('1', '25', '19', '4917', '6970', '0'), +('1', '25', '19', '4837', '6970', '0'), +('1', '25', '19', '68239', '4760', '0'), +('1', '25', '19', '4180', '3654', '0'), +('1', '25', '13', '11674', '29646', '0'), +('1', '25', '13', '11667', '18405', '0'), +('1', '25', '13', '11550', '17883', '0'), +('1', '25', '13', '5401', '14394', '0'), +('1', '25', '14', '11674', '29646', '0'), +('1', '25', '14', '11632', '29534', '0'), +('1', '25', '14', '11551', '23853', '0'), +('1', '25', '14', '9428', '20353', '0'), +('1', '25', '11', '45137', '8046', '0'), +('1', '25', '11', '8408', '7494', '0'), +('1', '25', '11', '8325', '7329', '0'), +('1', '25', '11', '8811', '5733', '0'), +('1', '26', '22', '8567', '0', '0'), +('1', '26', '22', '10323', '0', '0'), +('1', '26', '22', '66166', '0', '0'), +('1', '26', '22', '10664', '0', '0'), +('1', '26', '1', '14701', '4104', '0'), +('1', '26', '1', '14702', '2500', '0'), +('1', '26', '1', '10165', '1940', '0'), +('1', '26', '1', '14658', '1146', '0'), +('1', '26', '2', '4301', '7726', '0'), +('1', '26', '2', '4911', '6040', '0'), +('1', '26', '2', '4831', '6040', '0'), +('1', '26', '2', '4620', '5165', '0'), +('1', '26', '3', '71529', '3875', '0'), +('1', '26', '3', '21026', '2114', '0'), +('1', '26', '3', '21002', '2114', '0'), +('1', '26', '3', '10144', '1628', '0'), +('1', '26', '5', '14569', '6171', '0'), +('1', '26', '5', '14703', '5500', '0'), +('1', '26', '5', '10055', '4010', '0'), +('1', '26', '5', '14700', '3906', '0'), +('1', '26', '8', '11621', '26579', '0'), +('1', '26', '8', '1546', '9983', '0'), +('1', '26', '8', '11551', '8753', '0'), +('1', '26', '8', '1409', '7747', '0'), +('1', '26', '6', '1557', '8270', '0'), +('1', '26', '6', '27701', '5029', '0'), +('1', '26', '6', '4302', '4112', '0'), +('1', '26', '6', '4175', '3775', '0'), +('1', '26', '17', '4912', '13315', '0'), +('1', '26', '17', '4832', '13315', '0'), +('1', '26', '17', '4174', '9802', '0'), +('1', '26', '17', '4309', '8225', '0'), +('1', '26', '7', '4913', '6478', '0'), +('1', '26', '7', '4833', '6478', '0'), +('1', '26', '7', '4343', '4977', '0'), +('1', '26', '7', '2986', '3926', '0'), +('1', '26', '9', '4834', '4408', '0'), +('1', '26', '9', '4914', '4408', '0'), +('1', '26', '9', '12189', '3471', '0'), +('1', '26', '9', '4177', '3032', '0'), +('1', '26', '15', '10366', '8054', '0'), +('1', '26', '15', '10151', '7200', '0'), +('1', '26', '15', '14679', '7010', '0'), +('1', '26', '15', '14678', '5708', '0'), +('1', '26', '20', '11673', '24356', '0'), +('1', '26', '20', '11601', '18840', '0'), +('1', '26', '20', '2921', '14555', '0'), +('1', '26', '20', '1365', '10500', '0'), +('1', '26', '12', '4835', '10521', '0'), +('1', '26', '12', '4915', '10521', '0'), +('1', '26', '12', '20655', '7510', '0'), +('1', '26', '12', '11624', '4721', '0'), +('1', '26', '18', '4916', '6955', '0'), +('1', '26', '18', '4836', '6955', '0'), +('1', '26', '18', '4346', '4645', '0'), +('1', '26', '18', '4179', '4393', '0'), +('1', '26', '19', '4917', '6970', '0'), +('1', '26', '19', '4837', '6970', '0'), +('1', '26', '19', '68239', '4760', '0'), +('1', '26', '19', '4180', '3654', '0'), +('1', '26', '13', '11674', '29788', '0'), +('1', '26', '13', '11667', '18532', '0'), +('1', '26', '13', '11550', '17982', '0'), +('1', '26', '13', '5401', '14465', '0'), +('1', '26', '14', '11674', '29788', '0'), +('1', '26', '14', '11632', '29625', '0'), +('1', '26', '14', '11551', '23853', '0'), +('1', '26', '14', '9428', '20353', '0'), +('1', '26', '11', '45137', '8517', '0'), +('1', '26', '11', '8408', '7570', '0'), +('1', '26', '11', '8325', '7414', '0'), +('1', '26', '11', '8811', '5789', '0'), +('1', '27', '22', '8567', '0', '0'), +('1', '27', '22', '10323', '0', '0'), +('1', '27', '22', '66166', '0', '0'), +('1', '27', '22', '10664', '0', '0'), +('1', '27', '1', '14701', '4104', '0'), +('1', '27', '1', '14702', '2500', '0'), +('1', '27', '1', '10165', '1940', '0'), +('1', '27', '1', '14658', '1146', '0'), +('1', '27', '2', '4301', '7726', '0'), +('1', '27', '2', '4911', '6040', '0'), +('1', '27', '2', '4831', '6040', '0'), +('1', '27', '2', '4620', '5203', '0'), +('1', '27', '3', '71529', '3897', '0'), +('1', '27', '3', '21026', '2114', '0'), +('1', '27', '3', '21002', '2114', '0'), +('1', '27', '3', '10144', '1628', '0'), +('1', '27', '5', '14569', '6171', '0'), +('1', '27', '5', '14703', '5500', '0'), +('1', '27', '5', '10055', '4010', '0'), +('1', '27', '5', '14700', '3906', '0'), +('1', '27', '8', '11621', '26579', '0'), +('1', '27', '8', '1546', '9983', '0'), +('1', '27', '8', '11551', '8753', '0'), +('1', '27', '8', '1409', '7747', '0'), +('1', '27', '6', '1557', '8270', '0'), +('1', '27', '6', '27701', '5067', '0'), +('1', '27', '6', '4302', '4145', '0'), +('1', '27', '6', '4175', '3775', '0'), +('1', '27', '17', '4912', '13397', '0'), +('1', '27', '17', '4832', '13397', '0'), +('1', '27', '17', '4174', '9830', '0'), +('1', '27', '17', '4309', '8225', '0'), +('1', '27', '7', '4913', '6478', '0'), +('1', '27', '7', '4833', '6478', '0'), +('1', '27', '7', '4343', '5031', '0'), +('1', '27', '7', '2986', '3926', '0'), +('1', '27', '9', '4834', '4408', '0'), +('1', '27', '9', '4914', '4408', '0'), +('1', '27', '9', '12189', '3471', '0'), +('1', '27', '9', '4177', '3032', '0'), +('1', '27', '15', '10366', '8054', '0'), +('1', '27', '15', '10151', '7200', '0'), +('1', '27', '15', '14679', '7010', '0'), +('1', '27', '15', '14678', '5708', '0'), +('1', '27', '20', '11673', '24421', '0'), +('1', '27', '20', '11601', '18894', '0'), +('1', '27', '20', '2921', '14582', '0'), +('1', '27', '20', '1365', '10500', '0'), +('1', '27', '12', '4835', '10548', '0'), +('1', '27', '12', '4915', '10548', '0'), +('1', '27', '12', '20655', '7521', '0'), +('1', '27', '12', '11624', '4759', '0'), +('1', '27', '18', '4916', '6982', '0'), +('1', '27', '18', '4836', '6982', '0'), +('1', '27', '18', '4346', '4645', '0'), +('1', '27', '18', '4179', '4393', '0'), +('1', '27', '19', '4917', '6970', '0'), +('1', '27', '19', '4837', '6970', '0'), +('1', '27', '19', '68239', '4760', '0'), +('1', '27', '19', '4180', '3654', '0'), +('1', '27', '13', '11674', '29930', '0'), +('1', '27', '13', '11667', '18655', '0'), +('1', '27', '13', '11550', '18081', '0'), +('1', '27', '13', '5401', '14536', '0'), +('1', '27', '14', '11674', '29930', '0'), +('1', '27', '14', '11632', '29707', '0'), +('1', '27', '14', '11551', '23853', '0'), +('1', '27', '14', '9428', '20353', '0'), +('1', '27', '11', '45137', '8883', '0'), +('1', '27', '11', '8408', '7645', '0'), +('1', '27', '11', '8325', '7489', '0'), +('1', '27', '11', '8811', '5856', '0'), +('1', '28', '22', '8567', '0', '0'), +('1', '28', '22', '10323', '0', '0'), +('1', '28', '22', '66166', '0', '0'), +('1', '28', '22', '10664', '0', '0'), +('1', '28', '1', '14701', '4104', '0'), +('1', '28', '1', '14702', '2500', '0'), +('1', '28', '1', '10165', '1940', '0'), +('1', '28', '1', '14658', '1146', '0'), +('1', '28', '2', '4301', '7726', '0'), +('1', '28', '2', '4911', '6040', '0'), +('1', '28', '2', '4831', '6040', '0'), +('1', '28', '2', '4620', '5245', '0'), +('1', '28', '3', '71529', '3921', '0'), +('1', '28', '3', '21026', '2114', '0'), +('1', '28', '3', '21002', '2114', '0'), +('1', '28', '3', '10144', '1628', '0'), +('1', '28', '5', '14569', '6171', '0'), +('1', '28', '5', '14703', '5500', '0'), +('1', '28', '5', '10055', '4010', '0'), +('1', '28', '5', '14700', '3906', '0'), +('1', '28', '8', '11621', '26579', '0'), +('1', '28', '8', '1546', '9983', '0'), +('1', '28', '8', '11551', '8753', '0'), +('1', '28', '8', '1409', '7747', '0'), +('1', '28', '6', '1557', '8270', '0'), +('1', '28', '6', '27701', '5109', '0'), +('1', '28', '6', '4302', '4181', '0'), +('1', '28', '6', '4175', '3775', '0'), +('1', '28', '17', '4912', '13487', '0'), +('1', '28', '17', '4832', '13487', '0'), +('1', '28', '17', '4174', '9860', '0'), +('1', '28', '17', '4309', '8225', '0'), +('1', '28', '7', '4913', '6478', '0'), +('1', '28', '7', '4833', '6478', '0'), +('1', '28', '7', '4343', '5092', '0'), +('1', '28', '7', '2986', '3926', '0'), +('1', '28', '9', '4834', '4408', '0'), +('1', '28', '9', '4914', '4408', '0'), +('1', '28', '9', '12189', '3471', '0'), +('1', '28', '9', '4177', '3032', '0'), +('1', '28', '15', '10366', '8054', '0'), +('1', '28', '15', '10151', '7200', '0'), +('1', '28', '15', '14679', '7010', '0'), +('1', '28', '15', '14678', '5708', '0'), +('1', '28', '20', '11673', '24494', '0'), +('1', '28', '20', '11601', '18955', '0'), +('1', '28', '20', '2921', '14612', '0'), +('1', '28', '20', '1365', '10500', '0'), +('1', '28', '12', '4835', '10578', '0'), +('1', '28', '12', '4915', '10578', '0'), +('1', '28', '12', '20655', '7533', '0'), +('1', '28', '12', '11624', '4801', '0'), +('1', '28', '18', '4916', '7012', '0'), +('1', '28', '18', '4836', '7012', '0'), +('1', '28', '18', '4346', '4645', '0'), +('1', '28', '18', '4179', '4393', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '28', '19', '4917', '6970', '0'), +('1', '28', '19', '4837', '6970', '0'), +('1', '28', '19', '68239', '4760', '0'), +('1', '28', '19', '4180', '3654', '0'), +('1', '28', '13', '11674', '30071', '0'), +('1', '28', '13', '11667', '18767', '0'), +('1', '28', '13', '11550', '18180', '0'), +('1', '28', '13', '5401', '14621', '0'), +('1', '28', '14', '11674', '30071', '0'), +('1', '28', '14', '11632', '29797', '0'), +('1', '28', '14', '11551', '23853', '0'), +('1', '28', '14', '9428', '20353', '0'), +('1', '28', '11', '45137', '9253', '0'), +('1', '28', '11', '8408', '7721', '0'), +('1', '28', '11', '8325', '7574', '0'), +('1', '28', '11', '8811', '5922', '0'), +('1', '29', '22', '8567', '0', '0'), +('1', '29', '22', '10323', '0', '0'), +('1', '29', '22', '66166', '0', '0'), +('1', '29', '22', '10664', '0', '0'), +('1', '29', '1', '14701', '4104', '0'), +('1', '29', '1', '14702', '2500', '0'), +('1', '29', '1', '10165', '1940', '0'), +('1', '29', '1', '14658', '1146', '0'), +('1', '29', '2', '4301', '7726', '0'), +('1', '29', '2', '4911', '6040', '0'), +('1', '29', '2', '4831', '6040', '0'), +('1', '29', '2', '4620', '5283', '0'), +('1', '29', '3', '71529', '3942', '0'), +('1', '29', '3', '21026', '2114', '0'), +('1', '29', '3', '21002', '2114', '0'), +('1', '29', '3', '10144', '1628', '0'), +('1', '29', '5', '14569', '6171', '0'), +('1', '29', '5', '14703', '5500', '0'), +('1', '29', '5', '10055', '4010', '0'), +('1', '29', '5', '14700', '3906', '0'), +('1', '29', '8', '11621', '26579', '0'), +('1', '29', '8', '1546', '9983', '0'), +('1', '29', '8', '11551', '8753', '0'), +('1', '29', '8', '1409', '7747', '0'), +('1', '29', '6', '1557', '8270', '0'), +('1', '29', '6', '27701', '5147', '0'), +('1', '29', '6', '4302', '4214', '0'), +('1', '29', '6', '4175', '3775', '0'), +('1', '29', '17', '4912', '13569', '0'), +('1', '29', '17', '4832', '13569', '0'), +('1', '29', '17', '4174', '9887', '0'), +('1', '29', '17', '4309', '8225', '0'), +('1', '29', '7', '4913', '6478', '0'), +('1', '29', '7', '4833', '6478', '0'), +('1', '29', '7', '4343', '5146', '0'), +('1', '29', '7', '2986', '3926', '0'), +('1', '29', '9', '4914', '4408', '0'), +('1', '29', '9', '4834', '4408', '0'), +('1', '29', '9', '12189', '3471', '0'), +('1', '29', '9', '4177', '3032', '0'), +('1', '29', '15', '10366', '8054', '0'), +('1', '29', '15', '10151', '7200', '0'), +('1', '29', '15', '14679', '7010', '0'), +('1', '29', '15', '14678', '5708', '0'), +('1', '29', '20', '11673', '24559', '0'), +('1', '29', '20', '11601', '19009', '0'), +('1', '29', '20', '2921', '14639', '0'), +('1', '29', '20', '1365', '10500', '0'), +('1', '29', '12', '4835', '10605', '0'), +('1', '29', '12', '4915', '10605', '0'), +('1', '29', '12', '20655', '7544', '0'), +('1', '29', '12', '11624', '4839', '0'), +('1', '29', '18', '4916', '7040', '0'), +('1', '29', '18', '4836', '7040', '0'), +('1', '29', '18', '4346', '4645', '0'), +('1', '29', '18', '4179', '4393', '0'), +('1', '29', '19', '4917', '6970', '0'), +('1', '29', '19', '4837', '6970', '0'), +('1', '29', '19', '68239', '4760', '0'), +('1', '29', '19', '4180', '3654', '0'), +('1', '29', '13', '11674', '30213', '0'), +('1', '29', '13', '11667', '18891', '0'), +('1', '29', '13', '11550', '18265', '0'), +('1', '29', '13', '5401', '14692', '0'), +('1', '29', '14', '11674', '30213', '0'), +('1', '29', '14', '11632', '29879', '0'), +('1', '29', '14', '11551', '23853', '0'), +('1', '29', '14', '9428', '20353', '0'), +('1', '29', '11', '45137', '9670', '0'), +('1', '29', '11', '8408', '7796', '0'), +('1', '29', '11', '8325', '7650', '0'), +('1', '29', '11', '8811', '5978', '0'), +('1', '30', '22', '8567', '0', '0'), +('1', '30', '22', '10323', '0', '0'), +('1', '30', '22', '66166', '0', '0'), +('1', '30', '22', '10664', '0', '0'), +('1', '30', '1', '14701', '4104', '0'), +('1', '30', '1', '14702', '2500', '0'), +('1', '30', '1', '10165', '1940', '0'), +('1', '30', '1', '14658', '1146', '0'), +('1', '30', '2', '4301', '7726', '0'), +('1', '30', '2', '4911', '6040', '0'), +('1', '30', '2', '4831', '6040', '0'), +('1', '30', '2', '4620', '5325', '0'), +('1', '30', '3', '71529', '3967', '0'), +('1', '30', '3', '21026', '2114', '0'), +('1', '30', '3', '21002', '2114', '0'), +('1', '30', '3', '10144', '1628', '0'), +('1', '30', '5', '14569', '6171', '0'), +('1', '30', '5', '14703', '5500', '0'), +('1', '30', '5', '10055', '4010', '0'), +('1', '30', '5', '14700', '3906', '0'), +('1', '30', '8', '11621', '26579', '0'), +('1', '30', '8', '1546', '9983', '0'), +('1', '30', '8', '11551', '8753', '0'), +('1', '30', '8', '1409', '7747', '0'), +('1', '30', '6', '1557', '8270', '0'), +('1', '30', '6', '27701', '5190', '0'), +('1', '30', '6', '4302', '4250', '0'), +('1', '30', '6', '4175', '3775', '0'), +('1', '30', '17', '4912', '13659', '0'), +('1', '30', '17', '4832', '13659', '0'), +('1', '30', '17', '4174', '9917', '0'), +('1', '30', '17', '4309', '8225', '0'), +('1', '30', '7', '4913', '6478', '0'), +('1', '30', '7', '4833', '6478', '0'), +('1', '30', '7', '4343', '5206', '0'), +('1', '30', '7', '2986', '3926', '0'), +('1', '30', '9', '4914', '4408', '0'), +('1', '30', '9', '4834', '4408', '0'), +('1', '30', '9', '12189', '3471', '0'), +('1', '30', '9', '4177', '3032', '0'), +('1', '30', '15', '10366', '8054', '0'), +('1', '30', '15', '10151', '7200', '0'), +('1', '30', '15', '14679', '7010', '0'), +('1', '30', '15', '14678', '5708', '0'), +('1', '30', '20', '11673', '24632', '0'), +('1', '30', '20', '11601', '19070', '0'), +('1', '30', '20', '2921', '14670', '0'), +('1', '30', '20', '1365', '10500', '0'), +('1', '30', '12', '4835', '10635', '0'), +('1', '30', '12', '4915', '10635', '0'), +('1', '30', '12', '20655', '7556', '0'), +('1', '30', '12', '11624', '4882', '0'), +('1', '30', '18', '4916', '7070', '0'), +('1', '30', '18', '4836', '7070', '0'), +('1', '30', '18', '4346', '4645', '0'), +('1', '30', '18', '4179', '4393', '0'), +('1', '30', '19', '4917', '6970', '0'), +('1', '30', '19', '4837', '6970', '0'), +('1', '30', '19', '68239', '4760', '0'), +('1', '30', '19', '4180', '3654', '0'), +('1', '30', '13', '11674', '30383', '0'), +('1', '30', '13', '11667', '19017', '0'), +('1', '30', '13', '11550', '18364', '0'), +('1', '30', '13', '5401', '14763', '0'), +('1', '30', '14', '11674', '30383', '0'), +('1', '30', '14', '11632', '29969', '0'), +('1', '30', '14', '11551', '23853', '0'), +('1', '30', '14', '9428', '20353', '0'), +('1', '30', '11', '45137', '10053', '0'), +('1', '30', '11', '8408', '7872', '0'), +('1', '30', '11', '8325', '7735', '0'), +('1', '30', '11', '8811', '6044', '0'), +('1', '31', '22', '8567', '0', '0'), +('1', '31', '22', '10323', '0', '0'), +('1', '31', '22', '66166', '0', '0'), +('1', '31', '22', '10664', '0', '0'), +('1', '31', '1', '14701', '4104', '0'), +('1', '31', '1', '14702', '2500', '0'), +('1', '31', '1', '10165', '1940', '0'), +('1', '31', '1', '14658', '1146', '0'), +('1', '31', '2', '4301', '7726', '0'), +('1', '31', '2', '4911', '6040', '0'), +('1', '31', '2', '4831', '6040', '0'), +('1', '31', '2', '4620', '5368', '0'), +('1', '31', '3', '71529', '3991', '0'), +('1', '31', '3', '21026', '2114', '0'), +('1', '31', '3', '21002', '2114', '0'), +('1', '31', '3', '10144', '1628', '0'), +('1', '31', '5', '14569', '6171', '0'), +('1', '31', '5', '14703', '5500', '0'), +('1', '31', '5', '10055', '4010', '0'), +('1', '31', '5', '14700', '3906', '0'), +('1', '31', '8', '11621', '26579', '0'), +('1', '31', '8', '1546', '9983', '0'), +('1', '31', '8', '11551', '8753', '0'), +('1', '31', '8', '1409', '7747', '0'), +('1', '31', '6', '1557', '8270', '0'), +('1', '31', '6', '27701', '5232', '0'), +('1', '31', '6', '4302', '4286', '0'), +('1', '31', '6', '4175', '3775', '0'), +('1', '31', '17', '4912', '13750', '0'), +('1', '31', '17', '4832', '13750', '0'), +('1', '31', '17', '4174', '9947', '0'), +('1', '31', '17', '4309', '8225', '0'), +('1', '31', '7', '4913', '6478', '0'), +('1', '31', '7', '4833', '6478', '0'), +('1', '31', '7', '4343', '5267', '0'), +('1', '31', '7', '2986', '3926', '0'), +('1', '31', '9', '4914', '4408', '0'), +('1', '31', '9', '4834', '4408', '0'), +('1', '31', '9', '12189', '3471', '0'), +('1', '31', '9', '4177', '3032', '0'), +('1', '31', '15', '10366', '8054', '0'), +('1', '31', '15', '10151', '7200', '0'), +('1', '31', '15', '14679', '7010', '0'), +('1', '31', '15', '14678', '5708', '0'), +('1', '31', '20', '11673', '24704', '0'), +('1', '31', '20', '11601', '19130', '0'), +('1', '31', '20', '2921', '14700', '0'), +('1', '31', '20', '1365', '10500', '0'), +('1', '31', '12', '4835', '10666', '0'), +('1', '31', '12', '4915', '10666', '0'), +('1', '31', '12', '20655', '7568', '0'), +('1', '31', '12', '11624', '4924', '0'), +('1', '31', '18', '4916', '7100', '0'), +('1', '31', '18', '4836', '7100', '0'), +('1', '31', '18', '4346', '4645', '0'), +('1', '31', '18', '4179', '4393', '0'), +('1', '31', '19', '4917', '6970', '0'), +('1', '31', '19', '4837', '6970', '0'), +('1', '31', '19', '68239', '4760', '0'), +('1', '31', '19', '4180', '3654', '0'), +('1', '31', '13', '11674', '30525', '0'), +('1', '31', '13', '11667', '19129', '0'), +('1', '31', '13', '11550', '18463', '0'), +('1', '31', '13', '5401', '14833', '0'), +('1', '31', '14', '11674', '30525', '0'), +('1', '31', '14', '11632', '30060', '0'), +('1', '31', '14', '11551', '23853', '0'), +('1', '31', '14', '9428', '20353', '0'), +('1', '31', '11', '45137', '10562', '0'), +('1', '31', '11', '8408', '7948', '0'), +('1', '31', '11', '8325', '7811', '0'), +('1', '31', '11', '8811', '6101', '0'), +('1', '32', '22', '8567', '0', '0'), +('1', '32', '22', '10323', '0', '0'), +('1', '32', '22', '66166', '0', '0'), +('1', '32', '22', '10664', '0', '0'), +('1', '32', '1', '14701', '4104', '0'), +('1', '32', '1', '14702', '2500', '0'), +('1', '32', '1', '10165', '1940', '0'), +('1', '32', '1', '14658', '1146', '0'), +('1', '32', '2', '4301', '7726', '0'), +('1', '32', '2', '4911', '6040', '0'), +('1', '32', '2', '4831', '6040', '0'), +('1', '32', '2', '4620', '5410', '0'), +('1', '32', '3', '71529', '4015', '0'), +('1', '32', '3', '21026', '2114', '0'), +('1', '32', '3', '21002', '2114', '0'), +('1', '32', '3', '10144', '1628', '0'), +('1', '32', '5', '14569', '6171', '0'), +('1', '32', '5', '14703', '5500', '0'), +('1', '32', '5', '10055', '4010', '0'), +('1', '32', '5', '14700', '3906', '0'), +('1', '32', '8', '11621', '26579', '0'), +('1', '32', '8', '1546', '9983', '0'), +('1', '32', '8', '11551', '8753', '0'), +('1', '32', '8', '1409', '7747', '0'), +('1', '32', '6', '1557', '8270', '0'), +('1', '32', '6', '27701', '5274', '0'), +('1', '32', '6', '4302', '4322', '0'), +('1', '32', '6', '4175', '3775', '0'), +('1', '32', '17', '4912', '13841', '0'), +('1', '32', '17', '4832', '13841', '0'), +('1', '32', '17', '4174', '9978', '0'), +('1', '32', '17', '4309', '8225', '0'), +('1', '32', '7', '4913', '6478', '0'), +('1', '32', '7', '4833', '6478', '0'), +('1', '32', '7', '4343', '5327', '0'), +('1', '32', '7', '2986', '3926', '0'), +('1', '32', '9', '4914', '4408', '0'), +('1', '32', '9', '4834', '4408', '0'), +('1', '32', '9', '12189', '3471', '0'), +('1', '32', '9', '4177', '3032', '0'), +('1', '32', '15', '10366', '8054', '0'), +('1', '32', '15', '10151', '7200', '0'), +('1', '32', '15', '14679', '7010', '0'), +('1', '32', '15', '14678', '5708', '0'), +('1', '32', '20', '11673', '24777', '0'), +('1', '32', '20', '11601', '19190', '0'), +('1', '32', '20', '2921', '14730', '0'), +('1', '32', '20', '1365', '10500', '0'), +('1', '32', '12', '4835', '10696', '0'), +('1', '32', '12', '4915', '10696', '0'), +('1', '32', '12', '20655', '7580', '0'), +('1', '32', '12', '11624', '4966', '0'), +('1', '32', '18', '4916', '7130', '0'), +('1', '32', '18', '4836', '7130', '0'), +('1', '32', '18', '4346', '4645', '0'), +('1', '32', '18', '4179', '4393', '0'), +('1', '32', '19', '4917', '6970', '0'), +('1', '32', '19', '4837', '6970', '0'), +('1', '32', '19', '68239', '4760', '0'), +('1', '32', '19', '4180', '3654', '0'), +('1', '32', '13', '11674', '30666', '0'), +('1', '32', '13', '11667', '19256', '0'), +('1', '32', '13', '11550', '18563', '0'), +('1', '32', '13', '5401', '14904', '0'), +('1', '32', '14', '11674', '30666', '0'), +('1', '32', '14', '11632', '30151', '0'), +('1', '32', '14', '11551', '23853', '0'), +('1', '32', '14', '9428', '20353', '0'), +('1', '32', '11', '45137', '10949', '0'), +('1', '32', '11', '8408', '8023', '0'), +('1', '32', '11', '8325', '7886', '0'), +('1', '32', '11', '8811', '6167', '0'), +('1', '33', '22', '8567', '0', '0'), +('1', '33', '22', '10323', '0', '0'), +('1', '33', '22', '66166', '0', '0'), +('1', '33', '22', '10664', '0', '0'), +('1', '33', '1', '14701', '4104', '0'), +('1', '33', '1', '14702', '2500', '0'), +('1', '33', '1', '10165', '1940', '0'), +('1', '33', '1', '14658', '1146', '0'), +('1', '33', '2', '4301', '7726', '0'), +('1', '33', '2', '4911', '6040', '0'), +('1', '33', '2', '4831', '6040', '0'), +('1', '33', '2', '4620', '5452', '0'), +('1', '33', '3', '71529', '4039', '0'), +('1', '33', '3', '21026', '2114', '0'), +('1', '33', '3', '21002', '2114', '0'), +('1', '33', '3', '10144', '1628', '0'), +('1', '33', '5', '14569', '6171', '0'), +('1', '33', '5', '14703', '5500', '0'), +('1', '33', '5', '10055', '4010', '0'), +('1', '33', '5', '14700', '3906', '0'), +('1', '33', '8', '11621', '26579', '0'), +('1', '33', '8', '1546', '9983', '0'), +('1', '33', '8', '11551', '8753', '0'), +('1', '33', '8', '1409', '7747', '0'), +('1', '33', '6', '1557', '8270', '0'), +('1', '33', '6', '27701', '5316', '0'), +('1', '33', '6', '4302', '4358', '0'), +('1', '33', '6', '4175', '3775', '0'), +('1', '33', '17', '4912', '13931', '0'), +('1', '33', '17', '4832', '13931', '0'), +('1', '33', '17', '4174', '10008', '0'), +('1', '33', '17', '4309', '8225', '0'), +('1', '33', '7', '4913', '6478', '0'), +('1', '33', '7', '4833', '6478', '0'), +('1', '33', '7', '4343', '5388', '0'), +('1', '33', '7', '2986', '3926', '0'), +('1', '33', '9', '4914', '4408', '0'), +('1', '33', '9', '4834', '4408', '0'), +('1', '33', '9', '12189', '3471', '0'), +('1', '33', '9', '4177', '3032', '0'), +('1', '33', '15', '10366', '8054', '0'), +('1', '33', '15', '10151', '7200', '0'), +('1', '33', '15', '14679', '7010', '0'), +('1', '33', '15', '14678', '5708', '0'), +('1', '33', '20', '11673', '24849', '0'), +('1', '33', '20', '11601', '19251', '0'), +('1', '33', '20', '2921', '14760', '0'), +('1', '33', '20', '1365', '10500', '0'), +('1', '33', '12', '4835', '10726', '0'), +('1', '33', '12', '4915', '10726', '0'), +('1', '33', '12', '20655', '7592', '0'), +('1', '33', '12', '11624', '5009', '0'), +('1', '33', '18', '4916', '7160', '0'), +('1', '33', '18', '4836', '7160', '0'), +('1', '33', '18', '4346', '4645', '0'), +('1', '33', '18', '4179', '4393', '0'), +('1', '33', '19', '4917', '6970', '0'), +('1', '33', '19', '4837', '6970', '0'), +('1', '33', '19', '68239', '4760', '0'), +('1', '33', '19', '4180', '3654', '0'), +('1', '33', '13', '11674', '30808', '0'), +('1', '33', '13', '11667', '19368', '0'), +('1', '33', '13', '11550', '18662', '0'), +('1', '33', '13', '5401', '14975', '0'), +('1', '33', '14', '11674', '30808', '0'), +('1', '33', '14', '11632', '30241', '0'), +('1', '33', '14', '11551', '23853', '0'), +('1', '33', '14', '9428', '20353', '0'), +('1', '33', '11', '45137', '11394', '0'), +('1', '33', '11', '8408', '8108', '0'), +('1', '33', '11', '8325', '7971', '0'), +('1', '33', '11', '8811', '6233', '0'), +('1', '34', '22', '8567', '0', '0'), +('1', '34', '22', '10323', '0', '0'), +('1', '34', '22', '66166', '0', '0'), +('1', '34', '22', '10664', '0', '0'), +('1', '34', '1', '14701', '4104', '0'), +('1', '34', '1', '14702', '2500', '0'), +('1', '34', '1', '10165', '1940', '0'), +('1', '34', '1', '14658', '1146', '0'), +('1', '34', '2', '4301', '7726', '0'), +('1', '34', '2', '4911', '6040', '0'), +('1', '34', '2', '4831', '6040', '0'), +('1', '34', '2', '4620', '5495', '0'), +('1', '34', '3', '71529', '4063', '0'), +('1', '34', '3', '21026', '2114', '0'), +('1', '34', '3', '21002', '2114', '0'), +('1', '34', '3', '10144', '1628', '0'), +('1', '34', '5', '14569', '6171', '0'), +('1', '34', '5', '14703', '5500', '0'), +('1', '34', '5', '10055', '4010', '0'), +('1', '34', '5', '14700', '3906', '0'), +('1', '34', '8', '11621', '26579', '0'), +('1', '34', '8', '1546', '9983', '0'), +('1', '34', '8', '11551', '8753', '0'), +('1', '34', '8', '1409', '7747', '0'), +('1', '34', '6', '1557', '8270', '0'), +('1', '34', '6', '27701', '5359', '0'), +('1', '34', '6', '4302', '4395', '0'), +('1', '34', '6', '4175', '3775', '0'), +('1', '34', '17', '4912', '14022', '0'), +('1', '34', '17', '4832', '14022', '0'), +('1', '34', '17', '4174', '10038', '0'), +('1', '34', '17', '4309', '8225', '0'), +('1', '34', '7', '4913', '6478', '0'), +('1', '34', '7', '4833', '6478', '0'), +('1', '34', '7', '4343', '5448', '0'), +('1', '34', '7', '2986', '3926', '0'), +('1', '34', '9', '4914', '4408', '0'), +('1', '34', '9', '4834', '4408', '0'), +('1', '34', '9', '12189', '3471', '0'), +('1', '34', '9', '4177', '3032', '0'), +('1', '34', '15', '10366', '8054', '0'), +('1', '34', '15', '10151', '7200', '0'), +('1', '34', '15', '14679', '7010', '0'), +('1', '34', '15', '14678', '5708', '0'), +('1', '34', '20', '11673', '24921', '0'), +('1', '34', '20', '11601', '19311', '0'), +('1', '34', '20', '2921', '14790', '0'), +('1', '34', '20', '1365', '10500', '0'), +('1', '34', '12', '4835', '10756', '0'), +('1', '34', '12', '4915', '10756', '0'), +('1', '34', '12', '20655', '7604', '0'), +('1', '34', '12', '11624', '5051', '0'), +('1', '34', '18', '4916', '7191', '0'), +('1', '34', '18', '4836', '7191', '0'), +('1', '34', '18', '4346', '4645', '0'), +('1', '34', '18', '4179', '4393', '0'), +('1', '34', '19', '4917', '6970', '0'), +('1', '34', '19', '4837', '6970', '0'), +('1', '34', '19', '68239', '4760', '0'), +('1', '34', '19', '4180', '3654', '0'), +('1', '34', '13', '11674', '30950', '0'), +('1', '34', '13', '11667', '19494', '0'), +('1', '34', '13', '11550', '18761', '0'), +('1', '34', '13', '5401', '15046', '0'), +('1', '34', '14', '11674', '30950', '0'), +('1', '34', '14', '11632', '30332', '0'), +('1', '34', '14', '11551', '23853', '0'), +('1', '34', '14', '9428', '20353', '0'), +('1', '34', '11', '45137', '11795', '0'), +('1', '34', '11', '8408', '8184', '0'), +('1', '34', '11', '8325', '8047', '0'), +('1', '34', '11', '8811', '6290', '0'), +('1', '35', '22', '8567', '0', '0'), +('1', '35', '22', '10323', '0', '0'), +('1', '35', '22', '66166', '0', '0'), +('1', '35', '22', '10664', '0', '0'), +('1', '35', '1', '14701', '4104', '0'), +('1', '35', '1', '14702', '2500', '0'), +('1', '35', '1', '10165', '1940', '0'), +('1', '35', '1', '14658', '1146', '0'), +('1', '35', '2', '4301', '7726', '0'), +('1', '35', '2', '4911', '6040', '0'), +('1', '35', '2', '4831', '6040', '0'), +('1', '35', '2', '4620', '5537', '0'), +('1', '35', '3', '71529', '4087', '0'), +('1', '35', '3', '21026', '2114', '0'), +('1', '35', '3', '21002', '2114', '0'), +('1', '35', '3', '10144', '1628', '0'), +('1', '35', '5', '14569', '6171', '0'), +('1', '35', '5', '14703', '5500', '0'), +('1', '35', '5', '10055', '4010', '0'), +('1', '35', '5', '14700', '3906', '0'), +('1', '35', '8', '11621', '26579', '0'), +('1', '35', '8', '1546', '9983', '0'), +('1', '35', '8', '11551', '8753', '0'), +('1', '35', '8', '1409', '7747', '0'), +('1', '35', '6', '1557', '8270', '0'), +('1', '35', '6', '27701', '5401', '0'), +('1', '35', '6', '4302', '4431', '0'), +('1', '35', '6', '4175', '3775', '0'), +('1', '35', '17', '4912', '14112', '0'), +('1', '35', '17', '4832', '14112', '0'), +('1', '35', '17', '4174', '10068', '0'), +('1', '35', '17', '4309', '8225', '0'), +('1', '35', '7', '4913', '6478', '0'), +('1', '35', '7', '4833', '6478', '0'), +('1', '35', '7', '4343', '5508', '0'), +('1', '35', '7', '2986', '3926', '0'), +('1', '35', '9', '4914', '4408', '0'), +('1', '35', '9', '4834', '4408', '0'), +('1', '35', '9', '12189', '3471', '0'), +('1', '35', '9', '4177', '3032', '0'), +('1', '35', '15', '10366', '8054', '0'), +('1', '35', '15', '10151', '7200', '0'), +('1', '35', '15', '14679', '7010', '0'), +('1', '35', '15', '14678', '5708', '0'), +('1', '35', '20', '11673', '24994', '0'), +('1', '35', '20', '11601', '19372', '0'), +('1', '35', '20', '2921', '14821', '0'), +('1', '35', '20', '1365', '10500', '0'), +('1', '35', '12', '4835', '10786', '0'), +('1', '35', '12', '4915', '10786', '0'), +('1', '35', '12', '20655', '7616', '0'), +('1', '35', '12', '11624', '5093', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '35', '18', '4916', '7221', '0'), +('1', '35', '18', '4836', '7221', '0'), +('1', '35', '18', '4346', '4645', '0'), +('1', '35', '18', '4179', '4393', '0'), +('1', '35', '19', '4917', '6970', '0'), +('1', '35', '19', '4837', '6970', '0'), +('1', '35', '19', '68239', '4760', '0'), +('1', '35', '19', '4180', '3654', '0'), +('1', '35', '13', '11674', '31120', '0'), +('1', '35', '13', '11667', '19621', '0'), +('1', '35', '13', '11550', '18846', '0'), +('1', '35', '13', '5401', '15117', '0'), +('1', '35', '14', '11674', '31120', '0'), +('1', '35', '14', '11632', '30422', '0'), +('1', '35', '14', '11551', '23853', '0'), +('1', '35', '14', '9428', '20353', '0'), +('1', '35', '11', '45137', '12329', '0'), +('1', '35', '11', '8408', '8259', '0'), +('1', '35', '11', '8325', '8132', '0'), +('1', '35', '11', '8811', '6356', '0'), +('1', '36', '22', '8567', '0', '0'), +('1', '36', '22', '10323', '0', '0'), +('1', '36', '22', '66166', '0', '0'), +('1', '36', '22', '10664', '0', '0'), +('1', '36', '1', '14701', '4104', '0'), +('1', '36', '1', '14702', '2500', '0'), +('1', '36', '1', '10165', '1940', '0'), +('1', '36', '1', '14658', '1146', '0'), +('1', '36', '2', '4301', '7726', '0'), +('1', '36', '2', '4911', '6040', '0'), +('1', '36', '2', '4831', '6040', '0'), +('1', '36', '2', '4620', '5579', '0'), +('1', '36', '3', '71529', '4112', '0'), +('1', '36', '3', '21026', '2114', '0'), +('1', '36', '3', '21002', '2114', '0'), +('1', '36', '3', '10144', '1628', '0'), +('1', '36', '5', '14569', '6171', '0'), +('1', '36', '5', '14703', '5500', '0'), +('1', '36', '5', '10055', '4010', '0'), +('1', '36', '5', '14700', '3906', '0'), +('1', '36', '8', '11621', '26579', '0'), +('1', '36', '8', '1546', '9983', '0'), +('1', '36', '8', '11551', '8753', '0'), +('1', '36', '8', '1409', '7747', '0'), +('1', '36', '6', '1557', '8270', '0'), +('1', '36', '6', '27701', '5443', '0'), +('1', '36', '6', '4302', '4467', '0'), +('1', '36', '6', '4175', '3775', '0'), +('1', '36', '17', '4912', '14203', '0'), +('1', '36', '17', '4832', '14203', '0'), +('1', '36', '17', '4174', '10098', '0'), +('1', '36', '17', '4309', '8225', '0'), +('1', '36', '7', '4913', '6478', '0'), +('1', '36', '7', '4833', '6478', '0'), +('1', '36', '7', '4343', '5569', '0'), +('1', '36', '7', '2986', '3926', '0'), +('1', '36', '9', '4914', '4408', '0'), +('1', '36', '9', '4834', '4408', '0'), +('1', '36', '9', '12189', '3471', '0'), +('1', '36', '9', '4177', '3032', '0'), +('1', '36', '15', '10366', '8054', '0'), +('1', '36', '15', '10151', '7200', '0'), +('1', '36', '15', '14679', '7010', '0'), +('1', '36', '15', '14678', '5708', '0'), +('1', '36', '20', '11673', '25066', '0'), +('1', '36', '20', '11601', '19432', '0'), +('1', '36', '20', '2921', '14851', '0'), +('1', '36', '20', '1365', '10500', '0'), +('1', '36', '12', '4835', '10817', '0'), +('1', '36', '12', '4915', '10817', '0'), +('1', '36', '12', '20655', '7628', '0'), +('1', '36', '12', '11624', '5135', '0'), +('1', '36', '18', '4916', '7251', '0'), +('1', '36', '18', '4836', '7251', '0'), +('1', '36', '18', '4346', '4645', '0'), +('1', '36', '18', '4179', '4393', '0'), +('1', '36', '19', '4917', '6970', '0'), +('1', '36', '19', '4837', '6970', '0'), +('1', '36', '19', '68239', '4760', '0'), +('1', '36', '19', '4180', '3654', '0'), +('1', '36', '13', '11674', '31261', '0'), +('1', '36', '13', '11667', '19733', '0'), +('1', '36', '13', '11550', '18945', '0'), +('1', '36', '13', '5401', '15202', '0'), +('1', '36', '14', '11674', '31261', '0'), +('1', '36', '14', '11632', '30513', '0'), +('1', '36', '14', '11551', '23853', '0'), +('1', '36', '14', '9428', '20353', '0'), +('1', '36', '11', '45137', '12752', '0'), +('1', '36', '11', '8408', '8335', '0'), +('1', '36', '11', '8325', '8207', '0'), +('1', '36', '11', '8811', '6422', '0'), +('1', '37', '22', '8567', '0', '0'), +('1', '37', '22', '10323', '0', '0'), +('1', '37', '22', '66166', '0', '0'), +('1', '37', '22', '10664', '0', '0'), +('1', '37', '1', '14701', '4104', '0'), +('1', '37', '1', '14702', '2500', '0'), +('1', '37', '1', '10165', '1940', '0'), +('1', '37', '1', '14623', '1181', '0'), +('1', '37', '2', '4301', '7726', '0'), +('1', '37', '2', '4911', '6040', '0'), +('1', '37', '2', '4831', '6040', '0'), +('1', '37', '2', '4620', '5621', '0'), +('1', '37', '3', '71529', '4136', '0'), +('1', '37', '3', '21026', '2114', '0'), +('1', '37', '3', '21002', '2114', '0'), +('1', '37', '3', '10144', '1628', '0'), +('1', '37', '5', '14569', '6171', '0'), +('1', '37', '5', '14703', '5500', '0'), +('1', '37', '5', '10055', '4010', '0'), +('1', '37', '5', '14700', '3906', '0'), +('1', '37', '8', '11621', '26579', '0'), +('1', '37', '8', '1546', '9983', '0'), +('1', '37', '8', '11551', '8753', '0'), +('1', '37', '8', '1409', '7747', '0'), +('1', '37', '6', '1557', '8270', '0'), +('1', '37', '6', '27701', '5486', '0'), +('1', '37', '6', '4302', '4503', '0'), +('1', '37', '6', '4175', '3775', '0'), +('1', '37', '17', '4912', '14294', '0'), +('1', '37', '17', '4832', '14294', '0'), +('1', '37', '17', '4174', '10129', '0'), +('1', '37', '17', '4309', '8225', '0'), +('1', '37', '7', '4913', '6478', '0'), +('1', '37', '7', '4833', '6478', '0'), +('1', '37', '7', '4343', '5629', '0'), +('1', '37', '7', '2986', '3926', '0'), +('1', '37', '9', '4914', '4408', '0'), +('1', '37', '9', '4834', '4408', '0'), +('1', '37', '9', '12189', '3471', '0'), +('1', '37', '9', '4311', '3070', '0'), +('1', '37', '15', '10366', '8054', '0'), +('1', '37', '15', '10151', '7200', '0'), +('1', '37', '15', '14679', '7010', '0'), +('1', '37', '15', '14678', '5708', '0'), +('1', '37', '20', '11673', '25139', '0'), +('1', '37', '20', '11601', '19492', '0'), +('1', '37', '20', '2921', '14881', '0'), +('1', '37', '20', '1365', '10500', '0'), +('1', '37', '12', '4835', '10847', '0'), +('1', '37', '12', '4915', '10847', '0'), +('1', '37', '12', '20655', '7641', '0'), +('1', '37', '12', '11624', '5178', '0'), +('1', '37', '18', '4916', '7281', '0'), +('1', '37', '18', '4836', '7281', '0'), +('1', '37', '18', '4346', '4645', '0'), +('1', '37', '18', '4179', '4393', '0'), +('1', '37', '19', '4917', '6970', '0'), +('1', '37', '19', '4837', '6970', '0'), +('1', '37', '19', '68239', '4760', '0'), +('1', '37', '19', '4180', '3654', '0'), +('1', '37', '13', '11674', '31403', '0'), +('1', '37', '13', '11667', '19859', '0'), +('1', '37', '13', '11550', '19044', '0'), +('1', '37', '13', '5401', '15273', '0'), +('1', '37', '14', '11674', '31403', '0'), +('1', '37', '14', '11632', '30604', '0'), +('1', '37', '14', '11551', '23853', '0'), +('1', '37', '14', '9428', '20353', '0'), +('1', '37', '11', '45137', '13215', '0'), +('1', '37', '11', '8408', '8410', '0'), +('1', '37', '11', '8325', '8292', '0'), +('1', '37', '11', '8811', '6479', '0'), +('1', '38', '22', '8567', '0', '0'), +('1', '38', '22', '10323', '0', '0'), +('1', '38', '22', '66166', '0', '0'), +('1', '38', '22', '10664', '0', '0'), +('1', '38', '1', '14701', '4104', '0'), +('1', '38', '1', '14702', '2500', '0'), +('1', '38', '1', '10165', '1940', '0'), +('1', '38', '1', '14623', '1218', '0'), +('1', '38', '2', '4301', '7726', '0'), +('1', '38', '2', '4911', '6040', '0'), +('1', '38', '2', '4831', '6040', '0'), +('1', '38', '2', '4620', '5664', '0'), +('1', '38', '3', '71529', '4160', '0'), +('1', '38', '3', '21026', '2114', '0'), +('1', '38', '3', '21002', '2114', '0'), +('1', '38', '3', '10144', '1628', '0'), +('1', '38', '5', '14569', '6171', '0'), +('1', '38', '5', '14703', '5500', '0'), +('1', '38', '5', '10055', '4010', '0'), +('1', '38', '5', '14700', '3906', '0'), +('1', '38', '8', '11621', '26579', '0'), +('1', '38', '8', '1546', '9983', '0'), +('1', '38', '8', '11551', '8753', '0'), +('1', '38', '8', '1409', '7747', '0'), +('1', '38', '6', '1557', '8270', '0'), +('1', '38', '6', '27701', '5528', '0'), +('1', '38', '6', '4302', '4540', '0'), +('1', '38', '6', '4175', '3775', '0'), +('1', '38', '17', '4912', '14384', '0'), +('1', '38', '17', '4832', '14384', '0'), +('1', '38', '17', '4174', '10159', '0'), +('1', '38', '17', '4309', '8225', '0'), +('1', '38', '7', '4913', '6478', '0'), +('1', '38', '7', '4833', '6478', '0'), +('1', '38', '7', '4343', '5690', '0'), +('1', '38', '7', '2986', '3926', '0'), +('1', '38', '9', '4914', '4408', '0'), +('1', '38', '9', '4834', '4408', '0'), +('1', '38', '9', '12189', '3471', '0'), +('1', '38', '9', '4311', '3112', '0'), +('1', '38', '15', '10366', '8054', '0'), +('1', '38', '15', '10151', '7200', '0'), +('1', '38', '15', '14679', '7010', '0'), +('1', '38', '15', '14678', '5708', '0'), +('1', '38', '20', '11673', '25211', '0'), +('1', '38', '20', '11601', '19553', '0'), +('1', '38', '20', '2921', '14911', '0'), +('1', '38', '20', '1365', '10500', '0'), +('1', '38', '12', '4835', '10877', '0'), +('1', '38', '12', '4915', '10877', '0'), +('1', '38', '12', '20655', '7653', '0'), +('1', '38', '12', '11624', '5220', '0'), +('1', '38', '18', '4916', '7311', '0'), +('1', '38', '18', '4836', '7311', '0'), +('1', '38', '18', '4346', '4645', '0'), +('1', '38', '18', '4179', '4393', '0'), +('1', '38', '19', '4917', '6970', '0'), +('1', '38', '19', '4837', '6970', '0'), +('1', '38', '19', '68239', '4760', '0'), +('1', '38', '19', '4180', '3654', '0'), +('1', '38', '13', '11674', '31545', '0'), +('1', '38', '13', '3554', '22675', '0'), +('1', '38', '13', '11667', '19986', '0'), +('1', '38', '13', '11550', '19143', '0'), +('1', '38', '14', '11674', '31545', '0'), +('1', '38', '14', '11632', '30694', '0'), +('1', '38', '14', '11551', '23853', '0'), +('1', '38', '14', '3554', '22675', '0'), +('1', '38', '11', '45137', '13641', '0'), +('1', '38', '11', '8408', '8486', '0'), +('1', '38', '11', '8325', '8368', '0'), +('1', '38', '11', '8811', '6545', '0'), +('1', '39', '22', '8567', '0', '0'), +('1', '39', '22', '10323', '0', '0'), +('1', '39', '22', '66166', '0', '0'), +('1', '39', '22', '10664', '0', '0'), +('1', '39', '1', '14701', '4104', '0'), +('1', '39', '1', '14702', '2500', '0'), +('1', '39', '1', '10165', '1940', '0'), +('1', '39', '1', '14623', '1258', '0'), +('1', '39', '2', '4301', '7726', '0'), +('1', '39', '2', '4911', '6040', '0'), +('1', '39', '2', '4831', '6040', '0'), +('1', '39', '2', '4620', '5710', '0'), +('1', '39', '3', '71529', '4187', '0'), +('1', '39', '3', '21026', '2114', '0'), +('1', '39', '3', '21002', '2114', '0'), +('1', '39', '3', '10144', '1628', '0'), +('1', '39', '5', '14569', '6171', '0'), +('1', '39', '5', '14703', '5500', '0'), +('1', '39', '5', '10055', '4010', '0'), +('1', '39', '5', '14700', '3906', '0'), +('1', '39', '8', '11621', '26579', '0'), +('1', '39', '8', '1546', '9983', '0'), +('1', '39', '8', '11551', '8753', '0'), +('1', '39', '8', '1409', '7747', '0'), +('1', '39', '6', '1557', '8270', '0'), +('1', '39', '6', '27701', '5574', '0'), +('1', '39', '6', '4302', '4580', '0'), +('1', '39', '6', '4175', '3775', '0'), +('1', '39', '17', '4912', '14484', '0'), +('1', '39', '17', '4832', '14484', '0'), +('1', '39', '17', '4174', '10192', '0'), +('1', '39', '17', '4309', '8225', '0'), +('1', '39', '7', '4913', '6478', '0'), +('1', '39', '7', '4833', '6478', '0'), +('1', '39', '7', '4343', '5756', '0'), +('1', '39', '7', '2986', '3926', '0'), +('1', '39', '9', '4914', '4408', '0'), +('1', '39', '9', '4834', '4408', '0'), +('1', '39', '9', '12189', '3471', '0'), +('1', '39', '9', '4311', '3158', '0'), +('1', '39', '15', '10366', '8054', '0'), +('1', '39', '15', '10151', '7200', '0'), +('1', '39', '15', '14679', '7010', '0'), +('1', '39', '15', '14678', '5708', '0'), +('1', '39', '20', '11673', '25291', '0'), +('1', '39', '20', '11601', '19619', '0'), +('1', '39', '20', '2921', '14944', '0'), +('1', '39', '20', '1365', '10500', '0'), +('1', '39', '12', '4835', '10910', '0'), +('1', '39', '12', '4915', '10910', '0'), +('1', '39', '12', '20655', '7666', '0'), +('1', '39', '12', '11624', '5266', '0'), +('1', '39', '18', '4916', '7345', '0'), +('1', '39', '18', '4836', '7345', '0'), +('1', '39', '18', '4346', '4645', '0'), +('1', '39', '18', '4179', '4393', '0'), +('1', '39', '19', '4917', '6970', '0'), +('1', '39', '19', '4837', '6970', '0'), +('1', '39', '19', '68239', '4760', '0'), +('1', '39', '19', '4180', '3654', '0'), +('1', '39', '13', '11674', '31686', '0'), +('1', '39', '13', '3554', '22808', '0'), +('1', '39', '13', '11667', '20100', '0'), +('1', '39', '13', '11550', '19243', '0'), +('1', '39', '14', '11674', '31686', '0'), +('1', '39', '14', '11632', '30794', '0'), +('1', '39', '14', '11551', '23853', '0'), +('1', '39', '14', '3554', '22808', '0'), +('1', '39', '11', '45137', '14206', '0'), +('1', '39', '11', '8408', '8561', '0'), +('1', '39', '11', '8325', '8453', '0'), +('1', '39', '11', '8811', '6602', '0'), +('1', '40', '22', '8567', '0', '0'), +('1', '40', '22', '10323', '0', '0'), +('1', '40', '22', '66166', '0', '0'), +('1', '40', '22', '10664', '0', '0'), +('1', '40', '1', '14701', '4104', '0'), +('1', '40', '1', '14702', '2500', '0'), +('1', '40', '1', '10165', '1940', '0'), +('1', '40', '1', '14623', '1294', '0'), +('1', '40', '2', '4301', '7726', '0'), +('1', '40', '2', '4911', '6040', '0'), +('1', '40', '2', '4831', '6040', '0'), +('1', '40', '2', '4620', '5752', '0'), +('1', '40', '3', '71529', '4211', '0'), +('1', '40', '3', '21026', '2114', '0'), +('1', '40', '3', '21002', '2114', '0'), +('1', '40', '3', '10144', '1628', '0'), +('1', '40', '5', '14569', '6171', '0'), +('1', '40', '5', '14703', '5500', '0'), +('1', '40', '5', '10055', '4010', '0'), +('1', '40', '5', '14700', '3906', '0'), +('1', '40', '8', '11621', '26579', '0'), +('1', '40', '8', '1546', '9983', '0'), +('1', '40', '8', '11551', '8753', '0'), +('1', '40', '8', '1409', '7747', '0'), +('1', '40', '6', '1557', '8270', '0'), +('1', '40', '6', '27701', '5617', '0'), +('1', '40', '6', '4302', '4616', '0'), +('1', '40', '6', '4175', '3775', '0'), +('1', '40', '17', '4912', '14575', '0'), +('1', '40', '17', '4832', '14575', '0'), +('1', '40', '17', '4174', '10222', '0'), +('1', '40', '17', '4309', '8225', '0'), +('1', '40', '7', '4913', '6478', '0'), +('1', '40', '7', '4833', '6478', '0'), +('1', '40', '7', '4343', '5817', '0'), +('1', '40', '7', '2986', '3926', '0'), +('1', '40', '9', '4914', '4408', '0'), +('1', '40', '9', '4834', '4408', '0'), +('1', '40', '9', '12189', '3471', '0'), +('1', '40', '9', '4311', '3201', '0'), +('1', '40', '15', '10366', '8054', '0'), +('1', '40', '15', '10151', '7200', '0'), +('1', '40', '15', '14679', '7010', '0'), +('1', '40', '15', '14678', '5708', '0'), +('1', '40', '20', '11673', '25364', '0'), +('1', '40', '20', '11601', '19680', '0'), +('1', '40', '20', '2921', '14975', '0'), +('1', '40', '20', '1365', '10500', '0'), +('1', '40', '12', '4835', '10940', '0'), +('1', '40', '12', '4915', '10940', '0'), +('1', '40', '12', '20655', '7678', '0'), +('1', '40', '12', '11624', '5309', '0'), +('1', '40', '18', '4916', '7375', '0'), +('1', '40', '18', '4836', '7375', '0'), +('1', '40', '18', '4346', '4645', '0'), +('1', '40', '18', '4179', '4393', '0'), +('1', '40', '19', '4917', '6970', '0'), +('1', '40', '19', '4837', '6970', '0'), +('1', '40', '19', '68239', '4760', '0'), +('1', '40', '19', '4180', '3654', '0'), +('1', '40', '13', '11674', '31828', '0'), +('1', '40', '13', '3554', '22968', '0'), +('1', '40', '13', '11667', '20227', '0'), +('1', '40', '13', '11550', '19342', '0'), +('1', '40', '14', '11674', '31828', '0'), +('1', '40', '14', '11632', '30884', '0'), +('1', '40', '14', '11551', '23853', '0'), +('1', '40', '14', '3554', '22968', '0'), +('1', '40', '11', '45137', '14646', '0'), +('1', '40', '11', '8408', '8637', '0'), +('1', '40', '11', '8325', '8528', '0'), +('1', '40', '11', '8811', '6668', '0'), +('1', '41', '22', '8567', '0', '0'), +('1', '41', '22', '10323', '0', '0'), +('1', '41', '22', '66166', '0', '0'), +('1', '41', '22', '10664', '0', '0'), +('1', '41', '1', '14701', '4104', '0'), +('1', '41', '1', '14702', '2500', '0'), +('1', '41', '1', '10165', '1940', '0'), +('1', '41', '1', '14623', '1334', '0'), +('1', '41', '2', '4301', '7726', '0'), +('1', '41', '2', '4911', '6040', '0'), +('1', '41', '2', '4831', '6040', '0'), +('1', '41', '2', '4620', '5799', '0'), +('1', '41', '3', '71529', '4237', '0'), +('1', '41', '3', '21026', '2114', '0'), +('1', '41', '3', '21002', '2114', '0'), +('1', '41', '3', '10144', '1628', '0'), +('1', '41', '5', '14569', '6171', '0'), +('1', '41', '5', '14703', '5500', '0'), +('1', '41', '5', '10055', '4010', '0'), +('1', '41', '5', '14700', '3906', '0'), +('1', '41', '8', '11621', '26579', '0'), +('1', '41', '8', '1546', '9983', '0'), +('1', '41', '8', '11551', '8753', '0'), +('1', '41', '8', '1409', '7747', '0'), +('1', '41', '6', '1557', '8270', '0'), +('1', '41', '6', '27701', '5663', '0'), +('1', '41', '6', '4302', '4656', '0'), +('1', '41', '6', '4175', '3775', '0'), +('1', '41', '17', '4912', '14674', '0'), +('1', '41', '17', '4832', '14674', '0'), +('1', '41', '17', '4174', '10255', '0'), +('1', '41', '17', '4309', '8225', '0'), +('1', '41', '7', '4913', '6478', '0'), +('1', '41', '7', '4833', '6478', '0'), +('1', '41', '7', '4343', '5883', '0'), +('1', '41', '7', '2986', '3926', '0'), +('1', '41', '9', '4914', '4408', '0'), +('1', '41', '9', '4834', '4408', '0'), +('1', '41', '9', '12189', '3471', '0'), +('1', '41', '9', '4311', '3247', '0'), +('1', '41', '15', '10366', '8054', '0'), +('1', '41', '15', '10151', '7200', '0'), +('1', '41', '15', '14679', '7010', '0'), +('1', '41', '15', '14678', '5708', '0'), +('1', '41', '20', '11673', '25443', '0'), +('1', '41', '20', '11601', '19746', '0'), +('1', '41', '20', '2921', '15008', '0'), +('1', '41', '20', '1365', '10500', '0'), +('1', '41', '12', '4835', '10974', '0'), +('1', '41', '12', '4915', '10974', '0'), +('1', '41', '12', '20655', '7691', '0'), +('1', '41', '12', '11624', '5355', '0'), +('1', '41', '18', '4836', '7408', '0'), +('1', '41', '18', '4916', '7408', '0'), +('1', '41', '18', '4346', '4645', '0'), +('1', '41', '18', '4179', '4393', '0'), +('1', '41', '19', '4917', '6970', '0'), +('1', '41', '19', '4837', '6970', '0'), +('1', '41', '19', '68239', '4760', '0'), +('1', '41', '19', '4180', '3654', '0'), +('1', '41', '13', '11674', '31998', '0'), +('1', '41', '13', '3554', '23101', '0'), +('1', '41', '13', '11667', '20356', '0'), +('1', '41', '13', '11550', '19441', '0'), +('1', '41', '14', '11674', '31998', '0'), +('1', '41', '14', '11632', '30984', '0'), +('1', '41', '14', '11551', '23853', '0'), +('1', '41', '14', '3554', '23101', '0'), +('1', '41', '11', '45137', '15186', '0'), +('1', '41', '11', '8408', '8713', '0'), +('1', '41', '11', '8325', '8613', '0'), +('1', '41', '11', '8811', '6734', '0'), +('1', '42', '22', '8567', '0', '0'), +('1', '42', '22', '10323', '0', '0'), +('1', '42', '22', '66166', '0', '0'), +('1', '42', '22', '10664', '0', '0'), +('1', '42', '1', '14701', '4104', '0'), +('1', '42', '1', '14702', '2500', '0'), +('1', '42', '1', '10165', '1940', '0'), +('1', '42', '1', '14623', '1373', '0'), +('1', '42', '2', '4301', '7726', '0'), +('1', '42', '2', '4911', '6040', '0'), +('1', '42', '2', '4831', '6040', '0'), +('1', '42', '2', '4620', '5846', '0'), +('1', '42', '3', '71529', '4264', '0'), +('1', '42', '3', '21026', '2114', '0'), +('1', '42', '3', '21002', '2114', '0'), +('1', '42', '3', '10144', '1628', '0'), +('1', '42', '5', '14569', '6171', '0'), +('1', '42', '5', '14703', '5500', '0'), +('1', '42', '5', '10055', '4010', '0'), +('1', '42', '5', '14700', '3906', '0'), +('1', '42', '8', '11621', '26579', '0'), +('1', '42', '8', '1546', '9983', '0'), +('1', '42', '8', '11551', '8753', '0'), +('1', '42', '8', '1409', '7747', '0'), +('1', '42', '6', '1557', '8270', '0'), +('1', '42', '6', '27701', '5710', '0'), +('1', '42', '6', '4302', '4695', '0'), +('1', '42', '6', '4175', '3775', '0'), +('1', '42', '17', '4912', '14774', '0'), +('1', '42', '17', '4832', '14774', '0'), +('1', '42', '17', '4174', '10289', '0'), +('1', '42', '17', '4309', '8225', '0'), +('1', '42', '7', '4913', '6478', '0'), +('1', '42', '7', '4833', '6478', '0'), +('1', '42', '7', '4343', '5949', '0'), +('1', '42', '7', '2986', '3926', '0'), +('1', '42', '9', '4914', '4408', '0'), +('1', '42', '9', '4834', '4408', '0'), +('1', '42', '9', '12189', '3471', '0'), +('1', '42', '9', '4311', '3294', '0'), +('1', '42', '15', '10366', '8054', '0'), +('1', '42', '15', '10151', '7200', '0'), +('1', '42', '15', '14679', '7010', '0'), +('1', '42', '15', '14678', '5708', '0'), +('1', '42', '20', '11673', '25523', '0'), +('1', '42', '20', '11601', '19813', '0'), +('1', '42', '20', '2921', '15041', '0'), +('1', '42', '20', '1365', '10500', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '42', '12', '4835', '11007', '0'), +('1', '42', '12', '4915', '11007', '0'), +('1', '42', '12', '20655', '7705', '0'), +('1', '42', '12', '11624', '5402', '0'), +('1', '42', '18', '4836', '7441', '0'), +('1', '42', '18', '4916', '7441', '0'), +('1', '42', '18', '4346', '4645', '0'), +('1', '42', '18', '4179', '4393', '0'), +('1', '42', '19', '4917', '6970', '0'), +('1', '42', '19', '4837', '6970', '0'), +('1', '42', '19', '68239', '4760', '0'), +('1', '42', '19', '4180', '3654', '0'), +('1', '42', '13', '11674', '32140', '0'), +('1', '42', '13', '3554', '23263', '0'), +('1', '42', '13', '11667', '20471', '0'), +('1', '42', '13', '11550', '19526', '0'), +('1', '42', '14', '11674', '32140', '0'), +('1', '42', '14', '11632', '31084', '0'), +('1', '42', '14', '11551', '23853', '0'), +('1', '42', '14', '3554', '23263', '0'), +('1', '42', '11', '45137', '15681', '0'), +('1', '42', '11', '8408', '8788', '0'), +('1', '42', '11', '8325', '8689', '0'), +('1', '42', '11', '8811', '6791', '0'), +('1', '43', '22', '8567', '0', '0'), +('1', '43', '22', '10323', '0', '0'), +('1', '43', '22', '66166', '0', '0'), +('1', '43', '22', '10664', '0', '0'), +('1', '43', '1', '14701', '4104', '0'), +('1', '43', '1', '14702', '2500', '0'), +('1', '43', '1', '10165', '1940', '0'), +('1', '43', '1', '14623', '1410', '0'), +('1', '43', '2', '4301', '7726', '0'), +('1', '43', '2', '4911', '6040', '0'), +('1', '43', '2', '4831', '6040', '0'), +('1', '43', '2', '4620', '5888', '0'), +('1', '43', '3', '71529', '4288', '0'), +('1', '43', '3', '21026', '2114', '0'), +('1', '43', '3', '21002', '2114', '0'), +('1', '43', '3', '10144', '1628', '0'), +('1', '43', '5', '14569', '6171', '0'), +('1', '43', '5', '14703', '5500', '0'), +('1', '43', '5', '10055', '4010', '0'), +('1', '43', '5', '14700', '3906', '0'), +('1', '43', '8', '11621', '26579', '0'), +('1', '43', '8', '1546', '9983', '0'), +('1', '43', '8', '11551', '8753', '0'), +('1', '43', '8', '1409', '7747', '0'), +('1', '43', '6', '1557', '8270', '0'), +('1', '43', '6', '27701', '5752', '0'), +('1', '43', '6', '4302', '4732', '0'), +('1', '43', '6', '4175', '3775', '0'), +('1', '43', '17', '4912', '14864', '0'), +('1', '43', '17', '4832', '14864', '0'), +('1', '43', '17', '4174', '10319', '0'), +('1', '43', '17', '4309', '8225', '0'), +('1', '43', '7', '4913', '6478', '0'), +('1', '43', '7', '4833', '6478', '0'), +('1', '43', '7', '4343', '6010', '0'), +('1', '43', '7', '2986', '3926', '0'), +('1', '43', '9', '4914', '4408', '0'), +('1', '43', '9', '4834', '4408', '0'), +('1', '43', '9', '12189', '3471', '0'), +('1', '43', '9', '4311', '3336', '0'), +('1', '43', '15', '10366', '8054', '0'), +('1', '43', '15', '10151', '7200', '0'), +('1', '43', '15', '14679', '7010', '0'), +('1', '43', '15', '14678', '5708', '0'), +('1', '43', '20', '11673', '25596', '0'), +('1', '43', '20', '11601', '19873', '0'), +('1', '43', '20', '2921', '15071', '0'), +('1', '43', '20', '1365', '10500', '0'), +('1', '43', '12', '4835', '11037', '0'), +('1', '43', '12', '4915', '11037', '0'), +('1', '43', '12', '20655', '7717', '0'), +('1', '43', '12', '11624', '5444', '0'), +('1', '43', '18', '4836', '7471', '0'), +('1', '43', '18', '4916', '7471', '0'), +('1', '43', '18', '4346', '4645', '0'), +('1', '43', '18', '4179', '4393', '0'), +('1', '43', '19', '4917', '6970', '0'), +('1', '43', '19', '4837', '6970', '0'), +('1', '43', '19', '68239', '4760', '0'), +('1', '43', '19', '4180', '3654', '0'), +('1', '43', '13', '11674', '32281', '0'), +('1', '43', '13', '3554', '23394', '0'), +('1', '43', '13', '11667', '20597', '0'), +('1', '43', '13', '11550', '19625', '0'), +('1', '43', '14', '11674', '32281', '0'), +('1', '43', '14', '11632', '31174', '0'), +('1', '43', '14', '11551', '23853', '0'), +('1', '43', '14', '3554', '23394', '0'), +('1', '43', '11', '45137', '16136', '0'), +('1', '43', '11', '8408', '8864', '0'), +('1', '43', '11', '8325', '8774', '0'), +('1', '43', '11', '8811', '6857', '0'), +('1', '44', '22', '8567', '0', '0'), +('1', '44', '22', '10323', '0', '0'), +('1', '44', '22', '66166', '0', '0'), +('1', '44', '22', '10664', '0', '0'), +('1', '44', '1', '14701', '4104', '0'), +('1', '44', '1', '14702', '2500', '0'), +('1', '44', '1', '10165', '1940', '0'), +('1', '44', '1', '14623', '1450', '0'), +('1', '44', '2', '4301', '7726', '0'), +('1', '44', '2', '4911', '6040', '0'), +('1', '44', '2', '4831', '6040', '0'), +('1', '44', '2', '4620', '5934', '0'), +('1', '44', '3', '71529', '4315', '0'), +('1', '44', '3', '21026', '2114', '0'), +('1', '44', '3', '21002', '2114', '0'), +('1', '44', '3', '10144', '1628', '0'), +('1', '44', '5', '14569', '6171', '0'), +('1', '44', '5', '14703', '5500', '0'), +('1', '44', '5', '10055', '4010', '0'), +('1', '44', '5', '14700', '3906', '0'), +('1', '44', '8', '11621', '26579', '0'), +('1', '44', '8', '1546', '9983', '0'), +('1', '44', '8', '11551', '8753', '0'), +('1', '44', '8', '1409', '7747', '0'), +('1', '44', '6', '1557', '8270', '0'), +('1', '44', '6', '27701', '5798', '0'), +('1', '44', '6', '4302', '4772', '0'), +('1', '44', '6', '4175', '3775', '0'), +('1', '44', '17', '4912', '14964', '0'), +('1', '44', '17', '4832', '14964', '0'), +('1', '44', '17', '4174', '10352', '0'), +('1', '44', '17', '4309', '8225', '0'), +('1', '44', '7', '4913', '6478', '0'), +('1', '44', '7', '4833', '6478', '0'), +('1', '44', '7', '4343', '6076', '0'), +('1', '44', '7', '2986', '3926', '0'), +('1', '44', '9', '4914', '4408', '0'), +('1', '44', '9', '4834', '4408', '0'), +('1', '44', '9', '12189', '3471', '0'), +('1', '44', '9', '4311', '3382', '0'), +('1', '44', '15', '10366', '8054', '0'), +('1', '44', '15', '10151', '7200', '0'), +('1', '44', '15', '14679', '7010', '0'), +('1', '44', '15', '14678', '5708', '0'), +('1', '44', '20', '11673', '25675', '0'), +('1', '44', '20', '11601', '19939', '0'), +('1', '44', '20', '2921', '15105', '0'), +('1', '44', '20', '1365', '10500', '0'), +('1', '44', '12', '4835', '11070', '0'), +('1', '44', '12', '4915', '11070', '0'), +('1', '44', '12', '20655', '7730', '0'), +('1', '44', '12', '11624', '5491', '0'), +('1', '44', '18', '4836', '7505', '0'), +('1', '44', '18', '4916', '7505', '0'), +('1', '44', '18', '4346', '4645', '0'), +('1', '44', '18', '4179', '4393', '0'), +('1', '44', '19', '4917', '6970', '0'), +('1', '44', '19', '4837', '6970', '0'), +('1', '44', '19', '68239', '4760', '0'), +('1', '44', '19', '4180', '3654', '0'), +('1', '44', '13', '11674', '32423', '0'), +('1', '44', '13', '3554', '23556', '0'), +('1', '44', '13', '11667', '20726', '0'), +('1', '44', '13', '11550', '19724', '0'), +('1', '44', '14', '11674', '32423', '0'), +('1', '44', '14', '11632', '31274', '0'), +('1', '44', '14', '11551', '23853', '0'), +('1', '44', '14', '3554', '23556', '0'), +('1', '44', '11', '45137', '16739', '0'), +('1', '44', '11', '8408', '8939', '0'), +('1', '44', '11', '8325', '8849', '0'), +('1', '44', '11', '8811', '6923', '0'), +('1', '45', '22', '8567', '0', '0'), +('1', '45', '22', '10323', '0', '0'), +('1', '45', '22', '66166', '0', '0'), +('1', '45', '22', '10664', '0', '0'), +('1', '45', '1', '14701', '4104', '0'), +('1', '45', '1', '14702', '2500', '0'), +('1', '45', '1', '10165', '1940', '0'), +('1', '45', '1', '14623', '1489', '0'), +('1', '45', '2', '4301', '7726', '0'), +('1', '45', '2', '4911', '6040', '0'), +('1', '45', '2', '4831', '6040', '0'), +('1', '45', '2', '4620', '5981', '0'), +('1', '45', '3', '71529', '4341', '0'), +('1', '45', '3', '21026', '2114', '0'), +('1', '45', '3', '21002', '2114', '0'), +('1', '45', '3', '10144', '1628', '0'), +('1', '45', '5', '14569', '6171', '0'), +('1', '45', '5', '14703', '5500', '0'), +('1', '45', '5', '10055', '4010', '0'), +('1', '45', '5', '14700', '3906', '0'), +('1', '45', '8', '11621', '26579', '0'), +('1', '45', '8', '1546', '9983', '0'), +('1', '45', '8', '11551', '8753', '0'), +('1', '45', '8', '1409', '7747', '0'), +('1', '45', '6', '1557', '8270', '0'), +('1', '45', '6', '27701', '5845', '0'), +('1', '45', '6', '4302', '4811', '0'), +('1', '45', '6', '4175', '3775', '0'), +('1', '45', '17', '4912', '15064', '0'), +('1', '45', '17', '4832', '15064', '0'), +('1', '45', '17', '4174', '10385', '0'), +('1', '45', '17', '4309', '8225', '0'), +('1', '45', '7', '4913', '6478', '0'), +('1', '45', '7', '4833', '6478', '0'), +('1', '45', '7', '4343', '6143', '0'), +('1', '45', '7', '2986', '3926', '0'), +('1', '45', '9', '4914', '4408', '0'), +('1', '45', '9', '4834', '4408', '0'), +('1', '45', '9', '12189', '3471', '0'), +('1', '45', '9', '4311', '3429', '0'), +('1', '45', '15', '10366', '8054', '0'), +('1', '45', '15', '10151', '7200', '0'), +('1', '45', '15', '14679', '7010', '0'), +('1', '45', '15', '14678', '5708', '0'), +('1', '45', '20', '11673', '25755', '0'), +('1', '45', '20', '11601', '20006', '0'), +('1', '45', '20', '2921', '15138', '0'), +('1', '45', '20', '1365', '10500', '0'), +('1', '45', '12', '4835', '11103', '0'), +('1', '45', '12', '4915', '11103', '0'), +('1', '45', '12', '20655', '7743', '0'), +('1', '45', '12', '11624', '5537', '0'), +('1', '45', '18', '4836', '7538', '0'), +('1', '45', '18', '4916', '7538', '0'), +('1', '45', '18', '4346', '4645', '0'), +('1', '45', '18', '4179', '4393', '0'), +('1', '45', '19', '4917', '6970', '0'), +('1', '45', '19', '4837', '6970', '0'), +('1', '45', '19', '68239', '4760', '0'), +('1', '45', '19', '4180', '3654', '0'), +('1', '45', '13', '11674', '32565', '0'), +('1', '45', '13', '3554', '23689', '0'), +('1', '45', '13', '11667', '20841', '0'), +('1', '45', '13', '11550', '19823', '0'), +('1', '45', '14', '11674', '32565', '0'), +('1', '45', '14', '11632', '31374', '0'), +('1', '45', '14', '11551', '23853', '0'), +('1', '45', '14', '3554', '23689', '0'), +('1', '45', '11', '45137', '17211', '0'), +('1', '45', '11', '8408', '9015', '0'), +('1', '45', '11', '8325', '8934', '0'), +('1', '45', '11', '8811', '6979', '0'), +('1', '46', '22', '8567', '0', '0'), +('1', '46', '22', '10323', '0', '0'), +('1', '46', '22', '66166', '0', '0'), +('1', '46', '22', '10664', '0', '0'), +('1', '46', '1', '14701', '4104', '0'), +('1', '46', '1', '14702', '2500', '0'), +('1', '46', '1', '10165', '1940', '0'), +('1', '46', '1', '14623', '1529', '0'), +('1', '46', '2', '4301', '7726', '0'), +('1', '46', '2', '4911', '6040', '0'), +('1', '46', '2', '4831', '6040', '0'), +('1', '46', '2', '4620', '6027', '0'), +('1', '46', '3', '71529', '4368', '0'), +('1', '46', '3', '21026', '2114', '0'), +('1', '46', '3', '21002', '2114', '0'), +('1', '46', '3', '10144', '1628', '0'), +('1', '46', '5', '14569', '6171', '0'), +('1', '46', '5', '14703', '5500', '0'), +('1', '46', '5', '10055', '4010', '0'), +('1', '46', '5', '14700', '3906', '0'), +('1', '46', '8', '11621', '26579', '0'), +('1', '46', '8', '1546', '9983', '0'), +('1', '46', '8', '11551', '8753', '0'), +('1', '46', '8', '1409', '7747', '0'), +('1', '46', '6', '1557', '8270', '0'), +('1', '46', '6', '27701', '5891', '0'), +('1', '46', '6', '4302', '4851', '0'), +('1', '46', '6', '4175', '3775', '0'), +('1', '46', '17', '4912', '15163', '0'), +('1', '46', '17', '4832', '15163', '0'), +('1', '46', '17', '4174', '10418', '0'), +('1', '46', '17', '4309', '8225', '0'), +('1', '46', '7', '4913', '6478', '0'), +('1', '46', '7', '4833', '6478', '0'), +('1', '46', '7', '4343', '6209', '0'), +('1', '46', '7', '2986', '3926', '0'), +('1', '46', '9', '4834', '4408', '0'), +('1', '46', '9', '4914', '4408', '0'), +('1', '46', '9', '4311', '3475', '0'), +('1', '46', '9', '12189', '3471', '0'), +('1', '46', '15', '10366', '8054', '0'), +('1', '46', '15', '10151', '7200', '0'), +('1', '46', '15', '14679', '7010', '0'), +('1', '46', '15', '14678', '5708', '0'), +('1', '46', '20', '11673', '25835', '0'), +('1', '46', '20', '11601', '20072', '0'), +('1', '46', '20', '2921', '15171', '0'), +('1', '46', '20', '1365', '10500', '0'), +('1', '46', '12', '4835', '11137', '0'), +('1', '46', '12', '4915', '11137', '0'), +('1', '46', '12', '20655', '7757', '0'), +('1', '46', '12', '11624', '5584', '0'), +('1', '46', '18', '4836', '7571', '0'), +('1', '46', '18', '4916', '7571', '0'), +('1', '46', '18', '4346', '4645', '0'), +('1', '46', '18', '4179', '4393', '0'), +('1', '46', '19', '4917', '6970', '0'), +('1', '46', '19', '4837', '6970', '0'), +('1', '46', '19', '68239', '4760', '0'), +('1', '46', '19', '4180', '3654', '0'), +('1', '46', '13', '11674', '33840', '0'), +('1', '46', '13', '3554', '24814', '0'), +('1', '46', '13', '11667', '21693', '0'), +('1', '46', '13', '11550', '20659', '0'), +('1', '46', '14', '11674', '33840', '0'), +('1', '46', '14', '11632', '31473', '0'), +('1', '46', '14', '3554', '24814', '0'), +('1', '46', '14', '11551', '23853', '0'), +('1', '46', '11', '45137', '18451', '0'), +('1', '46', '11', '8408', '9676', '0'), +('1', '46', '11', '8325', '9624', '0'), +('1', '46', '11', '8811', '7527', '0'), +('1', '47', '22', '8567', '0', '0'), +('1', '47', '22', '10323', '0', '0'), +('1', '47', '22', '66166', '0', '0'), +('1', '47', '22', '10664', '0', '0'), +('1', '47', '1', '14701', '4104', '0'), +('1', '47', '1', '14702', '2500', '0'), +('1', '47', '1', '10165', '1940', '0'), +('1', '47', '1', '14623', '1569', '0'), +('1', '47', '2', '4301', '7726', '0'), +('1', '47', '2', '4620', '6074', '0'), +('1', '47', '2', '4911', '6040', '0'), +('1', '47', '2', '4831', '6040', '0'), +('1', '47', '3', '71529', '4394', '0'), +('1', '47', '3', '21026', '2114', '0'), +('1', '47', '3', '21002', '2114', '0'), +('1', '47', '3', '10144', '1628', '0'), +('1', '47', '5', '14569', '6171', '0'), +('1', '47', '5', '14703', '5500', '0'), +('1', '47', '5', '10055', '4010', '0'), +('1', '47', '5', '14700', '3906', '0'), +('1', '47', '8', '11621', '26579', '0'), +('1', '47', '8', '1546', '9983', '0'), +('1', '47', '8', '11551', '8753', '0'), +('1', '47', '8', '1409', '7747', '0'), +('1', '47', '6', '1557', '8270', '0'), +('1', '47', '6', '27701', '5938', '0'), +('1', '47', '6', '4302', '4891', '0'), +('1', '47', '6', '4175', '3775', '0'), +('1', '47', '17', '4912', '15263', '0'), +('1', '47', '17', '4832', '15263', '0'), +('1', '47', '17', '4174', '10452', '0'), +('1', '47', '17', '4309', '8225', '0'), +('1', '47', '7', '4913', '6478', '0'), +('1', '47', '7', '4833', '6478', '0'), +('1', '47', '7', '4343', '6276', '0'), +('1', '47', '7', '2986', '3926', '0'), +('1', '47', '9', '4834', '4408', '0'), +('1', '47', '9', '4914', '4408', '0'), +('1', '47', '9', '4311', '3522', '0'), +('1', '47', '9', '12189', '3471', '0'), +('1', '47', '15', '10366', '8054', '0'), +('1', '47', '15', '10151', '7200', '0'), +('1', '47', '15', '14679', '7010', '0'), +('1', '47', '15', '14678', '5708', '0'), +('1', '47', '20', '11673', '25914', '0'), +('1', '47', '20', '11601', '20139', '0'), +('1', '47', '20', '2921', '15204', '0'), +('1', '47', '20', '1365', '10500', '0'), +('1', '47', '12', '4835', '11170', '0'), +('1', '47', '12', '4915', '11170', '0'), +('1', '47', '12', '20655', '7770', '0'), +('1', '47', '12', '11624', '5630', '0'), +('1', '47', '18', '4836', '7604', '0'), +('1', '47', '18', '4916', '7604', '0'), +('1', '47', '18', '4346', '4645', '0'), +('1', '47', '18', '4179', '4393', '0'), +('1', '47', '19', '4917', '6970', '0'), +('1', '47', '19', '4837', '6970', '0'), +('1', '47', '19', '68239', '4760', '0'), +('1', '47', '19', '4180', '3654', '0'), +('1', '47', '13', '11674', '34378', '0'), +('1', '47', '13', '3554', '25287', '0'), +('1', '47', '13', '11667', '22048', '0'), +('1', '47', '13', '11550', '21013', '0'), +('1', '47', '14', '11674', '34378', '0'), +('1', '47', '14', '11632', '31573', '0'), +('1', '47', '14', '3554', '25287', '0'), +('1', '47', '14', '11551', '23853', '0'), +('1', '47', '11', '45137', '19192', '0'), +('1', '47', '11', '8408', '9950', '0'), +('1', '47', '11', '8325', '9907', '0'), +('1', '47', '11', '8811', '7744', '0'), +('1', '48', '22', '8567', '0', '0'), +('1', '48', '22', '10323', '0', '0'), +('1', '48', '22', '66166', '0', '0'), +('1', '48', '22', '10664', '0', '0'), +('1', '48', '1', '14701', '4104', '0'), +('1', '48', '1', '14702', '2500', '0'), +('1', '48', '1', '10165', '1940', '0'), +('1', '48', '1', '14623', '1609', '0'), +('1', '48', '2', '4301', '7726', '0'), +('1', '48', '2', '4620', '6120', '0'), +('1', '48', '2', '4911', '6040', '0'), +('1', '48', '2', '4831', '6040', '0'), +('1', '48', '3', '71529', '4421', '0'), +('1', '48', '3', '21026', '2114', '0'), +('1', '48', '3', '21002', '2114', '0'), +('1', '48', '3', '10144', '1628', '0'), +('1', '48', '5', '14569', '6171', '0'), +('1', '48', '5', '14703', '5500', '0'), +('1', '48', '5', '10055', '4010', '0'), +('1', '48', '5', '14700', '3906', '0'), +('1', '48', '8', '11621', '26579', '0'), +('1', '48', '8', '1546', '9983', '0'), +('1', '48', '8', '11551', '8753', '0'), +('1', '48', '8', '1409', '7747', '0'), +('1', '48', '6', '1557', '8270', '0'), +('1', '48', '6', '27701', '5984', '0'), +('1', '48', '6', '4302', '4931', '0'), +('1', '48', '6', '4175', '3775', '0'), +('1', '48', '17', '4912', '15363', '0'), +('1', '48', '17', '4832', '15363', '0'), +('1', '48', '17', '4174', '10485', '0'), +('1', '48', '17', '4309', '8225', '0'), +('1', '48', '7', '4913', '6478', '0'), +('1', '48', '7', '4833', '6478', '0'), +('1', '48', '7', '4343', '6342', '0'), +('1', '48', '7', '2986', '3926', '0'), +('1', '48', '9', '4834', '4408', '0'), +('1', '48', '9', '4914', '4408', '0'), +('1', '48', '9', '4311', '3568', '0'), +('1', '48', '9', '12189', '3471', '0'), +('1', '48', '15', '10366', '8054', '0'), +('1', '48', '15', '10151', '7200', '0'), +('1', '48', '15', '14679', '7010', '0'), +('1', '48', '15', '14678', '5708', '0'), +('1', '48', '20', '11673', '25994', '0'), +('1', '48', '20', '11601', '20205', '0'), +('1', '48', '20', '2921', '15237', '0'), +('1', '48', '20', '1365', '10500', '0'), +('1', '48', '12', '4835', '11203', '0'), +('1', '48', '12', '4915', '11203', '0'), +('1', '48', '12', '20655', '7783', '0'), +('1', '48', '12', '11624', '5677', '0'), +('1', '48', '18', '4836', '7638', '0'), +('1', '48', '18', '4916', '7638', '0'), +('1', '48', '18', '4346', '4645', '0'), +('1', '48', '18', '4179', '4393', '0'), +('1', '48', '19', '4917', '6970', '0'), +('1', '48', '19', '4837', '6970', '0'), +('1', '48', '19', '68239', '4760', '0'), +('1', '48', '19', '4180', '3654', '0'), +('1', '48', '13', '11674', '34888', '0'), +('1', '48', '13', '3554', '25732', '0'), +('1', '48', '13', '11667', '22418', '0'), +('1', '48', '13', '11550', '21353', '0'), +('1', '48', '14', '11674', '34888', '0'), +('1', '48', '14', '11632', '31673', '0'), +('1', '48', '14', '3554', '25732', '0'), +('1', '48', '14', '11551', '23853', '0'), +('1', '48', '11', '45137', '20105', '0'), +('1', '48', '11', '8408', '10224', '0'), +('1', '48', '11', '8325', '10191', '0'), +('1', '48', '11', '8811', '7971', '0'), +('1', '49', '22', '8567', '0', '0'), +('1', '49', '22', '10323', '0', '0'), +('1', '49', '22', '66166', '0', '0'), +('1', '49', '22', '10664', '0', '0'), +('1', '49', '1', '14701', '4104', '0'), +('1', '49', '1', '14702', '2500', '0'), +('1', '49', '1', '10165', '1940', '0'), +('1', '49', '1', '14623', '1649', '0'), +('1', '49', '2', '4301', '7726', '0'), +('1', '49', '2', '4620', '6167', '0'), +('1', '49', '2', '4911', '6040', '0'), +('1', '49', '2', '4831', '6040', '0'), +('1', '49', '3', '71529', '4447', '0'), +('1', '49', '3', '21026', '2114', '0'), +('1', '49', '3', '21002', '2114', '0'), +('1', '49', '3', '10144', '1628', '0'), +('1', '49', '5', '14569', '6171', '0'), +('1', '49', '5', '14703', '5500', '0'), +('1', '49', '5', '10055', '4010', '0'), +('1', '49', '5', '14700', '3906', '0'), +('1', '49', '8', '11621', '26579', '0'), +('1', '49', '8', '1546', '9983', '0'), +('1', '49', '8', '11551', '8753', '0'), +('1', '49', '8', '1409', '7747', '0'), +('1', '49', '6', '1557', '8270', '0'), +('1', '49', '6', '27701', '6031', '0'), +('1', '49', '6', '4302', '4971', '0'), +('1', '49', '6', '4175', '3775', '0'), +('1', '49', '17', '4912', '15462', '0'), +('1', '49', '17', '4832', '15462', '0'), +('1', '49', '17', '4174', '10518', '0'), +('1', '49', '17', '4309', '8225', '0'), +('1', '49', '7', '4913', '6478', '0'), +('1', '49', '7', '4833', '6478', '0'), +('1', '49', '7', '4343', '6408', '0'), +('1', '49', '7', '2986', '3926', '0'), +('1', '49', '9', '4834', '4408', '0'), +('1', '49', '9', '4914', '4408', '0'), +('1', '49', '9', '4311', '3615', '0'), +('1', '49', '9', '12189', '3471', '0'), +('1', '49', '15', '10366', '8054', '0'), +('1', '49', '15', '10151', '7200', '0'), +('1', '49', '15', '14679', '7010', '0'), +('1', '49', '15', '14678', '5708', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '49', '20', '11673', '26074', '0'), +('1', '49', '20', '11601', '20272', '0'), +('1', '49', '20', '2921', '15271', '0'), +('1', '49', '20', '1365', '10500', '0'), +('1', '49', '12', '4835', '11236', '0'), +('1', '49', '12', '4915', '11236', '0'), +('1', '49', '12', '20655', '7796', '0'), +('1', '49', '12', '11624', '5723', '0'), +('1', '49', '18', '4836', '7671', '0'), +('1', '49', '18', '4916', '7671', '0'), +('1', '49', '18', '4346', '4645', '0'), +('1', '49', '18', '4179', '4393', '0'), +('1', '49', '19', '4917', '6970', '0'), +('1', '49', '19', '4837', '6970', '0'), +('1', '49', '19', '68239', '4760', '0'), +('1', '49', '19', '4180', '3654', '0'), +('1', '49', '13', '11674', '35398', '0'), +('1', '49', '13', '3554', '26205', '0'), +('1', '49', '13', '11667', '22774', '0'), +('1', '49', '13', '11550', '21693', '0'), +('1', '49', '14', '11674', '35398', '0'), +('1', '49', '14', '11632', '31772', '0'), +('1', '49', '14', '3554', '26205', '0'), +('1', '49', '14', '11551', '23853', '0'), +('1', '49', '11', '45137', '20869', '0'), +('1', '49', '11', '8408', '10488', '0'), +('1', '49', '11', '8325', '10474', '0'), +('1', '49', '11', '8811', '8188', '0'), +('1', '50', '22', '8567', '0', '0'), +('1', '50', '22', '10323', '0', '0'), +('1', '50', '22', '66166', '0', '0'), +('1', '50', '22', '10664', '0', '0'), +('1', '50', '1', '14701', '4104', '0'), +('1', '50', '1', '14702', '2500', '0'), +('1', '50', '1', '10165', '1940', '0'), +('1', '50', '1', '14623', '1692', '0'), +('1', '50', '2', '4301', '7726', '0'), +('1', '50', '2', '4620', '6218', '0'), +('1', '50', '2', '4911', '6040', '0'), +('1', '50', '2', '4831', '6040', '0'), +('1', '50', '3', '71529', '4476', '0'), +('1', '50', '3', '21026', '2114', '0'), +('1', '50', '3', '21002', '2114', '0'), +('1', '50', '3', '10144', '1628', '0'), +('1', '50', '5', '14569', '6171', '0'), +('1', '50', '5', '14703', '5500', '0'), +('1', '50', '5', '10055', '4010', '0'), +('1', '50', '5', '14700', '3906', '0'), +('1', '50', '8', '11621', '26579', '0'), +('1', '50', '8', '1546', '9983', '0'), +('1', '50', '8', '11551', '8753', '0'), +('1', '50', '8', '1409', '7747', '0'), +('1', '50', '6', '1557', '8270', '0'), +('1', '50', '6', '27701', '6082', '0'), +('1', '50', '6', '4302', '5014', '0'), +('1', '50', '6', '4175', '3775', '0'), +('1', '50', '17', '4912', '15571', '0'), +('1', '50', '17', '4832', '15571', '0'), +('1', '50', '17', '4174', '10554', '0'), +('1', '50', '17', '4309', '8225', '0'), +('1', '50', '7', '4343', '6481', '0'), +('1', '50', '7', '4913', '6478', '0'), +('1', '50', '7', '4833', '6478', '0'), +('1', '50', '7', '2986', '3926', '0'), +('1', '50', '9', '4834', '4408', '0'), +('1', '50', '9', '4914', '4408', '0'), +('1', '50', '9', '4311', '3666', '0'), +('1', '50', '9', '12189', '3471', '0'), +('1', '50', '15', '10366', '8054', '0'), +('1', '50', '15', '10151', '7200', '0'), +('1', '50', '15', '14679', '7010', '0'), +('1', '50', '15', '14678', '5708', '0'), +('1', '50', '20', '11673', '26161', '0'), +('1', '50', '20', '11601', '20344', '0'), +('1', '50', '20', '2921', '15307', '0'), +('1', '50', '20', '1365', '10500', '0'), +('1', '50', '12', '4835', '11273', '0'), +('1', '50', '12', '4915', '11273', '0'), +('1', '50', '12', '20655', '7811', '0'), +('1', '50', '12', '11624', '5774', '0'), +('1', '50', '18', '4836', '7707', '0'), +('1', '50', '18', '4916', '7707', '0'), +('1', '50', '18', '4346', '4645', '0'), +('1', '50', '18', '4179', '4393', '0'), +('1', '50', '19', '4917', '6970', '0'), +('1', '50', '19', '4837', '6970', '0'), +('1', '50', '19', '68239', '4760', '0'), +('1', '50', '19', '4180', '3654', '0'), +('1', '50', '13', '11674', '35936', '0'), +('1', '50', '13', '3554', '26680', '0'), +('1', '50', '13', '11667', '23147', '0'), +('1', '50', '13', '11550', '22033', '0'), +('1', '50', '14', '11674', '35936', '0'), +('1', '50', '14', '11632', '31881', '0'), +('1', '50', '14', '3554', '26680', '0'), +('1', '50', '14', '11551', '23853', '0'), +('1', '50', '11', '45137', '21715', '0'), +('1', '50', '11', '8408', '10762', '0'), +('1', '50', '11', '8325', '10757', '0'), +('1', '50', '11', '8811', '8415', '0'), +('1', '51', '22', '8567', '0', '0'), +('1', '51', '22', '10323', '0', '0'), +('1', '51', '22', '66166', '0', '0'), +('1', '51', '22', '10664', '0', '0'), +('1', '51', '1', '27822', '5699', '0'), +('1', '51', '1', '14701', '4104', '0'), +('1', '51', '1', '14702', '2500', '0'), +('1', '51', '1', '10165', '1940', '0'), +('1', '51', '2', '4301', '7726', '0'), +('1', '51', '2', '4620', '6264', '0'), +('1', '51', '2', '4911', '6040', '0'), +('1', '51', '2', '4831', '6040', '0'), +('1', '51', '3', '71529', '4503', '0'), +('1', '51', '3', '21026', '2114', '0'), +('1', '51', '3', '21002', '2114', '0'), +('1', '51', '3', '10144', '1628', '0'), +('1', '51', '5', '14569', '6171', '0'), +('1', '51', '5', '14703', '5500', '0'), +('1', '51', '5', '10055', '4010', '0'), +('1', '51', '5', '14700', '3906', '0'), +('1', '51', '8', '11621', '26579', '0'), +('1', '51', '8', '1546', '9983', '0'), +('1', '51', '8', '11551', '8753', '0'), +('1', '51', '8', '1409', '7747', '0'), +('1', '51', '6', '1557', '8270', '0'), +('1', '51', '6', '27701', '6128', '0'), +('1', '51', '6', '4302', '5054', '0'), +('1', '51', '6', '4175', '3775', '0'), +('1', '51', '17', '4912', '15671', '0'), +('1', '51', '17', '4832', '15671', '0'), +('1', '51', '17', '4174', '10588', '0'), +('1', '51', '17', '4309', '8225', '0'), +('1', '51', '7', '4343', '6547', '0'), +('1', '51', '7', '4913', '6478', '0'), +('1', '51', '7', '4833', '6478', '0'), +('1', '51', '7', '2986', '3926', '0'), +('1', '51', '9', '4834', '4408', '0'), +('1', '51', '9', '4914', '4408', '0'), +('1', '51', '9', '4311', '3712', '0'), +('1', '51', '9', '12189', '3471', '0'), +('1', '51', '15', '10366', '8054', '0'), +('1', '51', '15', '10151', '7200', '0'), +('1', '51', '15', '14679', '7010', '0'), +('1', '51', '15', '14678', '5708', '0'), +('1', '51', '20', '11673', '26241', '0'), +('1', '51', '20', '11601', '20411', '0'), +('1', '51', '20', '2921', '15340', '0'), +('1', '51', '20', '1365', '10500', '0'), +('1', '51', '12', '4835', '11306', '0'), +('1', '51', '12', '4915', '11306', '0'), +('1', '51', '12', '20655', '7824', '0'), +('1', '51', '12', '11624', '5820', '0'), +('1', '51', '18', '4836', '7740', '0'), +('1', '51', '18', '4916', '7740', '0'), +('1', '51', '18', '4346', '4645', '0'), +('1', '51', '18', '4179', '4393', '0'), +('1', '51', '19', '4917', '6970', '0'), +('1', '51', '19', '4837', '6970', '0'), +('1', '51', '19', '68239', '4760', '0'), +('1', '51', '19', '4180', '3654', '0'), +('1', '51', '13', '11674', '36446', '0'), +('1', '51', '13', '3554', '27154', '0'), +('1', '51', '13', '27961', '24500', '0'), +('1', '51', '13', '11667', '23517', '0'), +('1', '51', '14', '11674', '36446', '0'), +('1', '51', '14', '11632', '31981', '0'), +('1', '51', '14', '3554', '27154', '0'), +('1', '51', '14', '11551', '23853', '0'), +('1', '51', '11', '45137', '22512', '0'), +('1', '51', '11', '8325', '11041', '0'), +('1', '51', '11', '8408', '11036', '0'), +('1', '51', '11', '8811', '8632', '0'), +('1', '52', '22', '8567', '0', '0'), +('1', '52', '22', '10323', '0', '0'), +('1', '52', '22', '66166', '0', '0'), +('1', '52', '22', '10664', '0', '0'), +('1', '52', '1', '27822', '5699', '0'), +('1', '52', '1', '14701', '4104', '0'), +('1', '52', '1', '14702', '2500', '0'), +('1', '52', '1', '10165', '1940', '0'), +('1', '52', '2', '4301', '7726', '0'), +('1', '52', '2', '4620', '6311', '0'), +('1', '52', '2', '4911', '6040', '0'), +('1', '52', '2', '4831', '6040', '0'), +('1', '52', '3', '71529', '4530', '0'), +('1', '52', '3', '21026', '2114', '0'), +('1', '52', '3', '21002', '2114', '0'), +('1', '52', '3', '10144', '1628', '0'), +('1', '52', '5', '14569', '6171', '0'), +('1', '52', '5', '14703', '5500', '0'), +('1', '52', '5', '10055', '4010', '0'), +('1', '52', '5', '14700', '3906', '0'), +('1', '52', '8', '11621', '26579', '0'), +('1', '52', '8', '1546', '9983', '0'), +('1', '52', '8', '11551', '8753', '0'), +('1', '52', '8', '1409', '7747', '0'), +('1', '52', '6', '1557', '8270', '0'), +('1', '52', '6', '27701', '6175', '0'), +('1', '52', '6', '4302', '5094', '0'), +('1', '52', '6', '4175', '3775', '0'), +('1', '52', '17', '4912', '15770', '0'), +('1', '52', '17', '4832', '15770', '0'), +('1', '52', '17', '4174', '10621', '0'), +('1', '52', '17', '4309', '8225', '0'), +('1', '52', '7', '4343', '6614', '0'), +('1', '52', '7', '4913', '6478', '0'), +('1', '52', '7', '4833', '6478', '0'), +('1', '52', '7', '2986', '3926', '0'), +('1', '52', '9', '4834', '4408', '0'), +('1', '52', '9', '4914', '4408', '0'), +('1', '52', '9', '4311', '3759', '0'), +('1', '52', '9', '12189', '3471', '0'), +('1', '52', '15', '10366', '8054', '0'), +('1', '52', '15', '10151', '7200', '0'), +('1', '52', '15', '14679', '7010', '0'), +('1', '52', '15', '14678', '5708', '0'), +('1', '52', '20', '11673', '26320', '0'), +('1', '52', '20', '11601', '20477', '0'), +('1', '52', '20', '2921', '15373', '0'), +('1', '52', '20', '1365', '10500', '0'), +('1', '52', '12', '4835', '11339', '0'), +('1', '52', '12', '4915', '11339', '0'), +('1', '52', '12', '20655', '7837', '0'), +('1', '52', '12', '11624', '5867', '0'), +('1', '52', '18', '4836', '7773', '0'), +('1', '52', '18', '4916', '7773', '0'), +('1', '52', '18', '4346', '4645', '0'), +('1', '52', '18', '4179', '4393', '0'), +('1', '52', '19', '4917', '6970', '0'), +('1', '52', '19', '4837', '6970', '0'), +('1', '52', '19', '68239', '4760', '0'), +('1', '52', '19', '4180', '3654', '0'), +('1', '52', '13', '11674', '36985', '0'), +('1', '52', '13', '3554', '27627', '0'), +('1', '52', '13', '27961', '25100', '0'), +('1', '52', '13', '11667', '23872', '0'), +('1', '52', '14', '11674', '36985', '0'), +('1', '52', '14', '11632', '32080', '0'), +('1', '52', '14', '3554', '27627', '0'), +('1', '52', '14', '11551', '23853', '0'), +('1', '52', '11', '45137', '23500', '0'), +('1', '52', '11', '8325', '11324', '0'), +('1', '52', '11', '8408', '11300', '0'), +('1', '52', '11', '8811', '8859', '0'), +('1', '53', '22', '8567', '0', '0'), +('1', '53', '22', '10323', '0', '0'), +('1', '53', '22', '66166', '0', '0'), +('1', '53', '22', '10664', '0', '0'), +('1', '53', '1', '27822', '5699', '0'), +('1', '53', '1', '14701', '4104', '0'), +('1', '53', '1', '14702', '2500', '0'), +('1', '53', '1', '10165', '1940', '0'), +('1', '53', '2', '4301', '7726', '0'), +('1', '53', '2', '4620', '6361', '0'), +('1', '53', '2', '4911', '6040', '0'), +('1', '53', '2', '4831', '6040', '0'), +('1', '53', '3', '71529', '4559', '0'), +('1', '53', '3', '21026', '2114', '0'), +('1', '53', '3', '21002', '2114', '0'), +('1', '53', '3', '10144', '1628', '0'), +('1', '53', '5', '14569', '6171', '0'), +('1', '53', '5', '14703', '5500', '0'), +('1', '53', '5', '10055', '4010', '0'), +('1', '53', '5', '14700', '3906', '0'), +('1', '53', '8', '11621', '26579', '0'), +('1', '53', '8', '1546', '9983', '0'), +('1', '53', '8', '11551', '8753', '0'), +('1', '53', '8', '1409', '7747', '0'), +('1', '53', '6', '1557', '8270', '0'), +('1', '53', '6', '27701', '6225', '0'), +('1', '53', '6', '4302', '5138', '0'), +('1', '53', '6', '4175', '3775', '0'), +('1', '53', '17', '4832', '15879', '0'), +('1', '53', '17', '4912', '15879', '0'), +('1', '53', '17', '4174', '10657', '0'), +('1', '53', '17', '4309', '8225', '0'), +('1', '53', '7', '4343', '6686', '0'), +('1', '53', '7', '4913', '6478', '0'), +('1', '53', '7', '4833', '6478', '0'), +('1', '53', '7', '2986', '3926', '0'), +('1', '53', '9', '4834', '4408', '0'), +('1', '53', '9', '4914', '4408', '0'), +('1', '53', '9', '4311', '3809', '0'), +('1', '53', '9', '12189', '3471', '0'), +('1', '53', '15', '10366', '8054', '0'), +('1', '53', '15', '10151', '7200', '0'), +('1', '53', '15', '14679', '7010', '0'), +('1', '53', '15', '14678', '5708', '0'), +('1', '53', '20', '11673', '26407', '0'), +('1', '53', '20', '11601', '20549', '0'), +('1', '53', '20', '2921', '15410', '0'), +('1', '53', '20', '1365', '10500', '0'), +('1', '53', '12', '4835', '11375', '0'), +('1', '53', '12', '4915', '11375', '0'), +('1', '53', '12', '20655', '7852', '0'), +('1', '53', '12', '11624', '5918', '0'), +('1', '53', '18', '4836', '7810', '0'), +('1', '53', '18', '4916', '7810', '0'), +('1', '53', '18', '4346', '4645', '0'), +('1', '53', '18', '4179', '4393', '0'), +('1', '53', '19', '4917', '6970', '0'), +('1', '53', '19', '4837', '6970', '0'), +('1', '53', '19', '68239', '4760', '0'), +('1', '53', '19', '4180', '3654', '0'), +('1', '53', '13', '11674', '37495', '0'), +('1', '53', '13', '3554', '28074', '0'), +('1', '53', '13', '27961', '25703', '0'), +('1', '53', '13', '11667', '24245', '0'), +('1', '53', '14', '11674', '37495', '0'), +('1', '53', '14', '11632', '32189', '0'), +('1', '53', '14', '3554', '28074', '0'), +('1', '53', '14', '11551', '23853', '0'), +('1', '53', '11', '45137', '24343', '0'), +('1', '53', '11', '8325', '11607', '0'), +('1', '53', '11', '8408', '11574', '0'), +('1', '53', '11', '8811', '9076', '0'), +('1', '54', '22', '8567', '0', '0'), +('1', '54', '22', '10323', '0', '0'), +('1', '54', '22', '66166', '0', '0'), +('1', '54', '22', '10664', '0', '0'), +('1', '54', '1', '27822', '5699', '0'), +('1', '54', '1', '14701', '4104', '0'), +('1', '54', '1', '14702', '2500', '0'), +('1', '54', '1', '10165', '1940', '0'), +('1', '54', '2', '4301', '7726', '0'), +('1', '54', '2', '4620', '6412', '0'), +('1', '54', '2', '4911', '6040', '0'), +('1', '54', '2', '4831', '6040', '0'), +('1', '54', '3', '71529', '4588', '0'), +('1', '54', '3', '21026', '2114', '0'), +('1', '54', '3', '21002', '2114', '0'), +('1', '54', '3', '10144', '1628', '0'), +('1', '54', '5', '14569', '6171', '0'), +('1', '54', '5', '14703', '5500', '0'), +('1', '54', '5', '10055', '4010', '0'), +('1', '54', '5', '14700', '3906', '0'), +('1', '54', '8', '11621', '26579', '0'), +('1', '54', '8', '1546', '9983', '0'), +('1', '54', '8', '11551', '8753', '0'), +('1', '54', '8', '1409', '7747', '0'), +('1', '54', '6', '1557', '8270', '0'), +('1', '54', '6', '27701', '6276', '0'), +('1', '54', '6', '4302', '5181', '0'), +('1', '54', '6', '4175', '3775', '0'), +('1', '54', '17', '4832', '15988', '0'), +('1', '54', '17', '4912', '15988', '0'), +('1', '54', '17', '4174', '10693', '0'), +('1', '54', '17', '4309', '8225', '0'), +('1', '54', '7', '4343', '6759', '0'), +('1', '54', '7', '4913', '6478', '0'), +('1', '54', '7', '4833', '6478', '0'), +('1', '54', '7', '2986', '3926', '0'), +('1', '54', '9', '4834', '4408', '0'), +('1', '54', '9', '4914', '4408', '0'), +('1', '54', '9', '4311', '3860', '0'), +('1', '54', '9', '12189', '3471', '0'), +('1', '54', '15', '10366', '8054', '0'), +('1', '54', '15', '10151', '7200', '0'), +('1', '54', '15', '14679', '7010', '0'), +('1', '54', '15', '14678', '5708', '0'), +('1', '54', '20', '11673', '26494', '0'), +('1', '54', '20', '11601', '20622', '0'), +('1', '54', '20', '2921', '15446', '0'), +('1', '54', '20', '1365', '10500', '0'), +('1', '54', '12', '4835', '11411', '0'), +('1', '54', '12', '4915', '11411', '0'), +('1', '54', '12', '20655', '7866', '0'), +('1', '54', '12', '11624', '5968', '0'), +('1', '54', '18', '4836', '7846', '0'), +('1', '54', '18', '4916', '7846', '0'), +('1', '54', '18', '4346', '4645', '0'), +('1', '54', '18', '4179', '4393', '0'), +('1', '54', '19', '4917', '6970', '0'), +('1', '54', '19', '4837', '6970', '0'), +('1', '54', '19', '68239', '4760', '0'), +('1', '54', '19', '4180', '3654', '0'), +('1', '54', '13', '11674', '38005', '0'), +('1', '54', '13', '3554', '28549', '0'), +('1', '54', '13', '27961', '26306', '0'), +('1', '54', '13', '11667', '24603', '0'), +('1', '54', '14', '11674', '38005', '0'), +('1', '54', '14', '11632', '32298', '0'), +('1', '54', '14', '3554', '28549', '0'), +('1', '54', '14', '11551', '23853', '0'), +('1', '54', '11', '45137', '25189', '0'), +('1', '54', '11', '8325', '11900', '0'), +('1', '54', '11', '8408', '11848', '0'), +('1', '54', '11', '8811', '9303', '0'), +('1', '55', '22', '8567', '0', '0'), +('1', '55', '22', '10323', '0', '0'), +('1', '55', '22', '66166', '0', '0'), +('1', '55', '22', '10664', '0', '0'), +('1', '55', '1', '27822', '5699', '0'), +('1', '55', '1', '14701', '4104', '0'), +('1', '55', '1', '14702', '2500', '0'), +('1', '55', '1', '10165', '1940', '0'), +('1', '55', '2', '4301', '7726', '0'), +('1', '55', '2', '4620', '6459', '0'), +('1', '55', '2', '4911', '6040', '0'), +('1', '55', '2', '4831', '6040', '0'), +('1', '55', '3', '71529', '4614', '0'), +('1', '55', '3', '21026', '2114', '0'), +('1', '55', '3', '21002', '2114', '0'), +('1', '55', '3', '10144', '1628', '0'), +('1', '55', '5', '14569', '6171', '0'), +('1', '55', '5', '14703', '5500', '0'), +('1', '55', '5', '10055', '4010', '0'), +('1', '55', '5', '14700', '3906', '0'), +('1', '55', '8', '11621', '26579', '0'), +('1', '55', '8', '1546', '9983', '0'), +('1', '55', '8', '11551', '8753', '0'), +('1', '55', '8', '1409', '7747', '0'), +('1', '55', '6', '1557', '8270', '0'), +('1', '55', '6', '27701', '6323', '0'), +('1', '55', '6', '4302', '5221', '0'), +('1', '55', '6', '4175', '3775', '0'), +('1', '55', '17', '4832', '16088', '0'), +('1', '55', '17', '4912', '16088', '0'), +('1', '55', '17', '4174', '10726', '0'), +('1', '55', '17', '4309', '8225', '0'), +('1', '55', '7', '4343', '6825', '0'), +('1', '55', '7', '4913', '6478', '0'), +('1', '55', '7', '4833', '6478', '0'), +('1', '55', '7', '2986', '3926', '0'), +('1', '55', '9', '4834', '4408', '0'), +('1', '55', '9', '4914', '4408', '0'), +('1', '55', '9', '4311', '3907', '0'), +('1', '55', '9', '12189', '3471', '0'), +('1', '55', '15', '10366', '8054', '0'), +('1', '55', '15', '10151', '7200', '0'), +('1', '55', '15', '14679', '7010', '0'), +('1', '55', '15', '14678', '5708', '0'), +('1', '55', '20', '11673', '26574', '0'), +('1', '55', '20', '11601', '20688', '0'), +('1', '55', '20', '2921', '15479', '0'), +('1', '55', '20', '1365', '10500', '0'), +('1', '55', '12', '4835', '11445', '0'), +('1', '55', '12', '4915', '11445', '0'), +('1', '55', '12', '20655', '7880', '0'), +('1', '55', '12', '11624', '6015', '0'), +('1', '55', '18', '4836', '7879', '0'), +('1', '55', '18', '4916', '7879', '0'), +('1', '55', '18', '4346', '4645', '0'), +('1', '55', '18', '4179', '4393', '0'), +('1', '55', '19', '4917', '6970', '0'), +('1', '55', '19', '4837', '6970', '0'), +('1', '55', '19', '68239', '4760', '0'), +('1', '55', '19', '4180', '3654', '0'), +('1', '55', '13', '11674', '38543', '0'), +('1', '55', '13', '3554', '29022', '0'), +('1', '55', '13', '27961', '26906', '0'), +('1', '55', '13', '11667', '24973', '0'), +('1', '55', '14', '11674', '38543', '0'), +('1', '55', '14', '11632', '32397', '0'), +('1', '55', '14', '3554', '29022', '0'), +('1', '55', '14', '11551', '23853', '0'), +('1', '55', '11', '45137', '26107', '0'), +('1', '55', '11', '8325', '12183', '0'), +('1', '55', '11', '8408', '12113', '0'), +('1', '55', '11', '8811', '9520', '0'), +('1', '56', '22', '8567', '0', '0'), +('1', '56', '22', '10323', '0', '0'), +('1', '56', '22', '66166', '0', '0'), +('1', '56', '22', '10664', '0', '0'), +('1', '56', '1', '27822', '5699', '0'), +('1', '56', '1', '14701', '4104', '0'), +('1', '56', '1', '14702', '2500', '0'), +('1', '56', '1', '14623', '1942', '0'), +('1', '56', '2', '4301', '7726', '0'), +('1', '56', '2', '4620', '6509', '0'), +('1', '56', '2', '4911', '6040', '0'), +('1', '56', '2', '4831', '6040', '0'), +('1', '56', '3', '71529', '4643', '0'), +('1', '56', '3', '21026', '2114', '0'), +('1', '56', '3', '21002', '2114', '0'), +('1', '56', '3', '10144', '1628', '0'), +('1', '56', '5', '14569', '6171', '0'), +('1', '56', '5', '14703', '5500', '0'), +('1', '56', '5', '10055', '4010', '0'), +('1', '56', '5', '14700', '3906', '0'), +('1', '56', '8', '11621', '26579', '0'), +('1', '56', '8', '1546', '9983', '0'), +('1', '56', '8', '11551', '8753', '0'), +('1', '56', '8', '1409', '7747', '0'), +('1', '56', '6', '1557', '8270', '0'), +('1', '56', '6', '27701', '6373', '0'), +('1', '56', '6', '4302', '5264', '0'), +('1', '56', '6', '4175', '3775', '0'), +('1', '56', '17', '4832', '16196', '0'), +('1', '56', '17', '4912', '16196', '0'), +('1', '56', '17', '4174', '10763', '0'), +('1', '56', '17', '4309', '8225', '0'), +('1', '56', '7', '4343', '6898', '0'), +('1', '56', '7', '4913', '6478', '0'), +('1', '56', '7', '4833', '6478', '0'), +('1', '56', '7', '2986', '3926', '0'), +('1', '56', '9', '4834', '4408', '0'), +('1', '56', '9', '4914', '4408', '0'), +('1', '56', '9', '4311', '3957', '0'), +('1', '56', '9', '12189', '3471', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '56', '15', '10366', '8054', '0'), +('1', '56', '15', '10151', '7200', '0'), +('1', '56', '15', '14679', '7010', '0'), +('1', '56', '15', '14678', '5708', '0'), +('1', '56', '20', '11673', '26661', '0'), +('1', '56', '20', '11601', '20761', '0'), +('1', '56', '20', '2921', '15515', '0'), +('1', '56', '20', '1365', '10500', '0'), +('1', '56', '12', '4835', '11481', '0'), +('1', '56', '12', '4915', '11481', '0'), +('1', '56', '12', '20655', '7894', '0'), +('1', '56', '12', '11624', '6066', '0'), +('1', '56', '18', '4836', '7915', '0'), +('1', '56', '18', '4916', '7915', '0'), +('1', '56', '18', '4346', '4645', '0'), +('1', '56', '18', '4179', '4393', '0'), +('1', '56', '19', '4917', '6970', '0'), +('1', '56', '19', '4837', '6970', '0'), +('1', '56', '19', '68239', '4760', '0'), +('1', '56', '19', '4180', '3654', '0'), +('1', '56', '13', '11674', '39053', '0'), +('1', '56', '13', '3554', '29497', '0'), +('1', '56', '13', '27961', '27509', '0'), +('1', '56', '13', '11667', '25332', '0'), +('1', '56', '14', '11674', '39053', '0'), +('1', '56', '14', '11632', '32506', '0'), +('1', '56', '14', '3554', '29497', '0'), +('1', '56', '14', '11551', '23853', '0'), +('1', '56', '11', '45137', '26985', '0'), +('1', '56', '11', '8325', '12467', '0'), +('1', '56', '11', '8408', '12386', '0'), +('1', '56', '11', '8811', '9747', '0'), +('1', '57', '22', '8567', '0', '0'), +('1', '57', '22', '10323', '0', '0'), +('1', '57', '22', '66166', '0', '0'), +('1', '57', '22', '10664', '0', '0'), +('1', '57', '1', '27822', '5699', '0'), +('1', '57', '1', '14701', '4104', '0'), +('1', '57', '1', '14702', '2500', '0'), +('1', '57', '1', '14623', '1986', '0'), +('1', '57', '2', '4301', '7726', '0'), +('1', '57', '2', '4620', '6560', '0'), +('1', '57', '2', '4911', '6040', '0'), +('1', '57', '2', '4831', '6040', '0'), +('1', '57', '3', '71529', '4672', '0'), +('1', '57', '3', '21026', '2114', '0'), +('1', '57', '3', '21002', '2114', '0'), +('1', '57', '3', '10144', '1628', '0'), +('1', '57', '5', '14569', '6171', '0'), +('1', '57', '5', '14703', '5500', '0'), +('1', '57', '5', '10055', '4010', '0'), +('1', '57', '5', '14700', '3906', '0'), +('1', '57', '8', '11621', '26579', '0'), +('1', '57', '8', '1546', '9983', '0'), +('1', '57', '8', '11551', '8753', '0'), +('1', '57', '8', '1409', '7747', '0'), +('1', '57', '6', '1557', '8270', '0'), +('1', '57', '6', '27701', '6424', '0'), +('1', '57', '6', '4302', '5308', '0'), +('1', '57', '6', '4175', '3775', '0'), +('1', '57', '17', '4832', '16305', '0'), +('1', '57', '17', '4912', '16305', '0'), +('1', '57', '17', '4174', '10799', '0'), +('1', '57', '17', '4309', '8225', '0'), +('1', '57', '7', '4343', '6970', '0'), +('1', '57', '7', '4913', '6478', '0'), +('1', '57', '7', '4833', '6478', '0'), +('1', '57', '7', '2986', '3926', '0'), +('1', '57', '9', '4834', '4408', '0'), +('1', '57', '9', '4914', '4408', '0'), +('1', '57', '9', '4311', '4008', '0'), +('1', '57', '9', '12189', '3471', '0'), +('1', '57', '15', '10366', '8054', '0'), +('1', '57', '15', '10151', '7200', '0'), +('1', '57', '15', '14679', '7010', '0'), +('1', '57', '15', '14678', '5708', '0'), +('1', '57', '20', '11673', '26748', '0'), +('1', '57', '20', '11601', '20833', '0'), +('1', '57', '20', '2921', '15551', '0'), +('1', '57', '20', '1365', '10500', '0'), +('1', '57', '12', '4835', '11517', '0'), +('1', '57', '12', '4915', '11517', '0'), +('1', '57', '12', '20655', '7909', '0'), +('1', '57', '12', '11624', '6116', '0'), +('1', '57', '18', '4836', '7952', '0'), +('1', '57', '18', '4916', '7952', '0'), +('1', '57', '18', '4346', '4645', '0'), +('1', '57', '18', '4179', '4393', '0'), +('1', '57', '19', '4917', '6970', '0'), +('1', '57', '19', '4837', '6970', '0'), +('1', '57', '19', '68239', '4760', '0'), +('1', '57', '19', '4180', '3654', '0'), +('1', '57', '13', '11674', '39591', '0'), +('1', '57', '13', '3554', '29972', '0'), +('1', '57', '13', '27961', '28112', '0'), +('1', '57', '13', '11667', '25704', '0'), +('1', '57', '14', '11674', '39591', '0'), +('1', '57', '14', '11632', '32615', '0'), +('1', '57', '14', '3554', '29972', '0'), +('1', '57', '14', '11551', '23853', '0'), +('1', '57', '11', '45137', '28206', '0'), +('1', '57', '11', '8325', '12750', '0'), +('1', '57', '11', '8408', '12660', '0'), +('1', '57', '11', '8811', '9964', '0'), +('1', '58', '22', '8567', '0', '0'), +('1', '58', '22', '10323', '0', '0'), +('1', '58', '22', '66166', '0', '0'), +('1', '58', '22', '10664', '0', '0'), +('1', '58', '1', '27822', '5699', '0'), +('1', '58', '1', '14701', '4104', '0'), +('1', '58', '1', '14702', '2500', '0'), +('1', '58', '1', '14623', '2029', '0'), +('1', '58', '2', '4301', '7726', '0'), +('1', '58', '2', '4620', '6611', '0'), +('1', '58', '2', '4911', '6040', '0'), +('1', '58', '2', '4831', '6040', '0'), +('1', '58', '3', '71529', '4701', '0'), +('1', '58', '3', '21026', '2114', '0'), +('1', '58', '3', '21002', '2114', '0'), +('1', '58', '3', '10144', '1628', '0'), +('1', '58', '5', '14569', '6171', '0'), +('1', '58', '5', '14703', '5500', '0'), +('1', '58', '5', '10055', '4010', '0'), +('1', '58', '5', '14700', '3906', '0'), +('1', '58', '8', '11621', '26579', '0'), +('1', '58', '8', '1546', '9983', '0'), +('1', '58', '8', '11551', '8753', '0'), +('1', '58', '8', '1409', '7747', '0'), +('1', '58', '6', '1557', '8270', '0'), +('1', '58', '6', '27701', '6475', '0'), +('1', '58', '6', '4302', '5351', '0'), +('1', '58', '6', '4175', '3775', '0'), +('1', '58', '17', '4832', '16414', '0'), +('1', '58', '17', '4912', '16414', '0'), +('1', '58', '17', '4174', '10835', '0'), +('1', '58', '17', '4309', '8225', '0'), +('1', '58', '7', '4343', '7043', '0'), +('1', '58', '7', '4913', '6478', '0'), +('1', '58', '7', '4833', '6478', '0'), +('1', '58', '7', '2986', '3926', '0'), +('1', '58', '9', '4834', '4408', '0'), +('1', '58', '9', '4914', '4408', '0'), +('1', '58', '9', '4311', '4059', '0'), +('1', '58', '9', '12189', '3471', '0'), +('1', '58', '15', '10366', '8054', '0'), +('1', '58', '15', '10151', '7200', '0'), +('1', '58', '15', '14679', '7010', '0'), +('1', '58', '15', '14678', '5708', '0'), +('1', '58', '20', '11673', '26835', '0'), +('1', '58', '20', '11601', '20906', '0'), +('1', '58', '20', '2921', '15588', '0'), +('1', '58', '20', '1365', '10500', '0'), +('1', '58', '12', '4835', '11553', '0'), +('1', '58', '12', '4915', '11553', '0'), +('1', '58', '12', '20655', '7923', '0'), +('1', '58', '12', '11624', '6167', '0'), +('1', '58', '18', '4836', '7988', '0'), +('1', '58', '18', '4916', '7988', '0'), +('1', '58', '18', '4346', '4645', '0'), +('1', '58', '18', '4179', '4393', '0'), +('1', '58', '19', '4917', '6970', '0'), +('1', '58', '19', '4837', '6970', '0'), +('1', '58', '19', '68239', '4760', '0'), +('1', '58', '19', '4180', '3654', '0'), +('1', '58', '13', '11674', '40101', '0'), +('1', '58', '13', '3554', '30419', '0'), +('1', '58', '13', '27961', '28715', '0'), +('1', '58', '13', '11667', '26077', '0'), +('1', '58', '14', '11674', '40101', '0'), +('1', '58', '14', '11632', '32724', '0'), +('1', '58', '14', '3554', '30419', '0'), +('1', '58', '14', '11551', '23853', '0'), +('1', '58', '11', '45137', '29117', '0'), +('1', '58', '11', '8325', '13033', '0'), +('1', '58', '11', '8408', '12925', '0'), +('1', '58', '11', '8811', '10191', '0'), +('1', '59', '22', '8567', '0', '0'), +('1', '59', '22', '10323', '0', '0'), +('1', '59', '22', '66166', '0', '0'), +('1', '59', '22', '10664', '0', '0'), +('1', '59', '1', '27822', '5699', '0'), +('1', '59', '1', '14701', '4104', '0'), +('1', '59', '1', '14702', '2500', '0'), +('1', '59', '1', '14623', '2073', '0'), +('1', '59', '2', '4301', '7726', '0'), +('1', '59', '2', '4620', '6662', '0'), +('1', '59', '2', '4911', '6040', '0'), +('1', '59', '2', '4831', '6040', '0'), +('1', '59', '3', '71529', '4730', '0'), +('1', '59', '3', '21026', '2114', '0'), +('1', '59', '3', '21002', '2114', '0'), +('1', '59', '3', '10144', '1628', '0'), +('1', '59', '5', '14569', '6171', '0'), +('1', '59', '5', '14703', '5500', '0'), +('1', '59', '5', '10055', '4010', '0'), +('1', '59', '5', '14700', '3906', '0'), +('1', '59', '8', '11621', '26579', '0'), +('1', '59', '8', '1546', '9983', '0'), +('1', '59', '8', '11551', '8753', '0'), +('1', '59', '8', '1409', '7747', '0'), +('1', '59', '6', '1557', '8270', '0'), +('1', '59', '6', '27701', '6526', '0'), +('1', '59', '6', '4302', '5395', '0'), +('1', '59', '6', '4175', '3775', '0'), +('1', '59', '17', '4832', '16522', '0'), +('1', '59', '17', '4912', '16522', '0'), +('1', '59', '17', '4174', '10871', '0'), +('1', '59', '17', '4309', '8225', '0'), +('1', '59', '7', '4343', '7115', '0'), +('1', '59', '7', '4913', '6478', '0'), +('1', '59', '7', '4833', '6478', '0'), +('1', '59', '7', '2986', '3926', '0'), +('1', '59', '9', '4834', '4408', '0'), +('1', '59', '9', '4914', '4408', '0'), +('1', '59', '9', '4311', '4110', '0'), +('1', '59', '9', '12189', '3471', '0'), +('1', '59', '15', '10366', '8054', '0'), +('1', '59', '15', '10151', '7200', '0'), +('1', '59', '15', '14679', '7010', '0'), +('1', '59', '15', '14678', '5708', '0'), +('1', '59', '20', '11673', '26922', '0'), +('1', '59', '20', '11601', '20978', '0'), +('1', '59', '20', '2921', '15624', '0'), +('1', '59', '20', '1365', '10500', '0'), +('1', '59', '12', '4835', '11590', '0'), +('1', '59', '12', '4915', '11590', '0'), +('1', '59', '12', '20655', '7938', '0'), +('1', '59', '12', '11624', '6218', '0'), +('1', '59', '18', '4836', '8024', '0'), +('1', '59', '18', '4916', '8024', '0'), +('1', '59', '18', '4346', '4645', '0'), +('1', '59', '18', '4179', '4393', '0'), +('1', '59', '19', '4917', '6970', '0'), +('1', '59', '19', '4837', '6970', '0'), +('1', '59', '19', '68239', '4760', '0'), +('1', '59', '19', '4180', '3654', '0'), +('1', '59', '13', '11674', '40611', '0'), +('1', '59', '13', '3554', '30894', '0'), +('1', '59', '13', '27961', '29318', '0'), +('1', '59', '13', '11667', '26435', '0'), +('1', '59', '14', '11674', '40611', '0'), +('1', '59', '14', '11632', '32832', '0'), +('1', '59', '14', '3554', '30894', '0'), +('1', '59', '14', '11551', '23853', '0'), +('1', '59', '11', '45137', '30115', '0'), +('1', '59', '11', '8325', '13317', '0'), +('1', '59', '11', '8408', '13199', '0'), +('1', '59', '11', '8811', '10408', '0'), +('1', '60', '22', '21807', '0', '3'), +('1', '60', '22', '21805', '0', '3'), +('1', '60', '22', '12425', '0', '3'), +('1', '60', '22', '7867', '0', '3'), +('1', '60', '1', '7945', '23485', '3'), +('1', '60', '1', '26775', '15724', '3'), +('1', '60', '1', '28945', '12105', '3'), +('1', '60', '1', '29861', '11790', '3'), +('1', '60', '2', '26025', '23584', '3'), +('1', '60', '2', '2612', '23584', '3'), +('1', '60', '2', '26759', '14475', '3'), +('1', '60', '2', '28986', '13704', '3'), +('1', '60', '3', '26773', '15309', '3'), +('1', '60', '3', '28942', '13438', '3'), +('1', '60', '3', '26751', '12440', '3'), +('1', '60', '3', '28963', '11934', '3'), +('1', '60', '5', '28885', '29879', '3'), +('1', '60', '5', '27266', '25638', '3'), +('1', '60', '5', '8364', '17327', '3'), +('1', '60', '5', '7868', '13178', '3'), +('1', '60', '8', '26765', '32509', '3'), +('1', '60', '8', '26766', '32177', '3'), +('1', '60', '8', '31471', '31272', '3'), +('1', '60', '8', '11621', '23502', '3'), +('1', '60', '6', '28902', '32664', '3'), +('1', '60', '6', '28919', '13467', '3'), +('1', '60', '6', '31472', '13263', '3'), +('1', '60', '6', '30551', '13206', '3'), +('1', '60', '17', '28937', '34361', '3'), +('1', '60', '17', '29457', '31574', '3'), +('1', '60', '17', '27261', '20017', '3'), +('1', '60', '17', '26770', '17370', '3'), +('1', '60', '7', '28926', '14886', '3'), +('1', '60', '7', '7194', '13554', '3'), +('1', '60', '7', '7868', '13178', '3'), +('1', '60', '7', '26584', '12439', '3'), +('1', '60', '9', '31461', '31506', '3'), +('1', '60', '9', '7868', '13178', '3'), +('1', '60', '9', '26584', '12439', '3'), +('1', '60', '9', '31460', '11470', '3'), +('1', '60', '15', '27950', '21619', '3'), +('1', '60', '15', '26749', '14938', '3'), +('1', '60', '15', '26757', '11670', '3'), +('1', '60', '15', '63170', '11667', '3'), +('1', '60', '20', '31235', '30791', '3'), +('1', '60', '20', '28890', '29931', '3'), +('1', '60', '20', '31334', '28583', '3'), +('1', '60', '20', '26551', '26231', '3'), +('1', '60', '12', '25857', '29507', '3'), +('1', '60', '12', '28967', '14875', '3'), +('1', '60', '12', '29177', '12759', '3'), +('1', '60', '12', '26774', '12525', '3'), +('1', '60', '18', '28965', '14512', '3'), +('1', '60', '18', '26755', '11646', '3'), +('1', '60', '18', '28932', '11418', '3'), +('1', '60', '18', '8289', '11327', '3'), +('1', '60', '19', '30569', '32343', '3'), +('1', '60', '19', '28888', '27948', '3'), +('1', '60', '19', '24616', '23667', '3'), +('1', '60', '19', '7871', '11515', '3'), +('1', '60', '13', '69416', '60035', '3'), +('1', '60', '13', '31469', '56425', '3'), +('1', '60', '13', '28855', '50774', '3'), +('1', '60', '13', '26585', '50691', '3'), +('1', '60', '14', '28809', '62364', '3'), +('1', '60', '14', '69416', '60035', '3'), +('1', '60', '14', '31379', '57301', '3'), +('1', '60', '14', '31469', '56425', '3'), +('1', '60', '11', '30539', '42740', '3'), +('1', '60', '11', '28935', '41227', '3'), +('1', '60', '11', '7904', '37826', '3'), +('1', '60', '11', '25208', '32386', '3'), +('1', '60', '22', '66166', '0', '2'), +('1', '60', '22', '10323', '0', '2'), +('1', '60', '22', '9248', '0', '2'), +('1', '60', '22', '12425', '0', '2'), +('1', '60', '1', '2748', '8187', '2'), +('1', '60', '1', '31236', '7999', '2'), +('1', '60', '1', '5716', '7342', '2'), +('1', '60', '1', '62234', '5860', '2'), +('1', '60', '2', '2612', '24908', '2'), +('1', '60', '2', '26025', '24908', '2'), +('1', '60', '2', '25209', '14541', '2'), +('1', '60', '2', '29648', '14161', '2'), +('1', '60', '3', '31233', '13575', '2'), +('1', '60', '3', '31464', '11888', '2'), +('1', '60', '3', '31378', '10704', '2'), +('1', '60', '3', '31244', '10689', '2'), +('1', '60', '5', '27266', '26504', '2'), +('1', '60', '5', '31234', '14313', '2'), +('1', '60', '5', '31460', '14144', '2'), +('1', '60', '5', '1550', '12024', '2'), +('1', '60', '8', '31471', '33468', '2'), +('1', '60', '8', '11621', '24015', '2'), +('1', '60', '8', '27261', '21172', '2'), +('1', '60', '8', '1619', '19157', '2'), +('1', '60', '6', '31472', '15862', '2'), +('1', '60', '6', '31240', '12130', '2'), +('1', '60', '6', '5723', '12022', '2'), +('1', '60', '6', '24070', '11840', '2'), +('1', '60', '17', '29457', '34284', '2'), +('1', '60', '17', '27261', '21172', '2'), +('1', '60', '17', '25044', '16257', '2'), +('1', '60', '17', '25206', '15585', '2'), +('1', '60', '7', '5723', '12022', '2'), +('1', '60', '7', '29485', '7658', '2'), +('1', '60', '7', '31325', '7289', '2'), +('1', '60', '7', '31381', '7267', '2'), +('1', '60', '9', '31461', '34039', '2'), +('1', '60', '9', '31460', '14144', '2'), +('1', '60', '9', '5723', '12022', '2'), +('1', '60', '9', '31246', '9053', '2'), +('1', '60', '15', '31231', '13135', '2'), +('1', '60', '15', '25211', '12442', '2'), +('1', '60', '15', '30385', '11563', '2'), +('1', '60', '15', '30388', '10226', '2'), +('1', '60', '20', '31235', '33667', '2'), +('1', '60', '20', '31334', '29894', '2'), +('1', '60', '20', '31353', '23039', '2'), +('1', '60', '20', '11673', '21798', '2'), +('1', '60', '12', '25857', '31059', '2'), +('1', '60', '12', '31227', '14831', '2'), +('1', '60', '12', '29177', '13834', '2'), +('1', '60', '12', '31306', '12358', '2'), +('1', '60', '18', '31332', '8594', '2'), +('1', '60', '18', '31310', '7898', '2'), +('1', '60', '18', '31386', '7835', '2'), +('1', '60', '18', '31187', '6393', '2'), +('1', '60', '19', '24616', '24328', '2'), +('1', '60', '19', '25197', '10546', '2'), +('1', '60', '19', '29455', '8773', '2'), +('1', '60', '19', '1099', '8081', '2'), +('1', '60', '13', '69416', '61818', '2'), +('1', '60', '13', '31469', '58508', '2'), +('1', '60', '13', '1154', '50730', '2'), +('1', '60', '13', '31243', '47101', '2'), +('1', '60', '14', '69416', '61818', '2'), +('1', '60', '14', '31469', '58508', '2'), +('1', '60', '14', '31379', '57376', '2'), +('1', '60', '14', '1154', '50730', '2'), +('1', '60', '11', '25208', '31208', '2'), +('1', '60', '11', '29433', '28963', '2'), +('1', '60', '11', '27326', '28963', '2'), +('1', '60', '11', '45137', '27212', '2'), +('1', '60', '22', '8567', '0', '1'), +('1', '60', '22', '10323', '0', '1'), +('1', '60', '22', '66166', '0', '1'), +('1', '60', '22', '10664', '0', '1'), +('1', '60', '1', '62234', '7131', '1'), +('1', '60', '1', '5716', '6642', '1'), +('1', '60', '1', '5704', '6238', '1'), +('1', '60', '1', '5715', '6238', '1'), +('1', '60', '2', '10913', '12387', '1'), +('1', '60', '2', '1630', '9391', '1'), +('1', '60', '2', '50036', '7546', '1'), +('1', '60', '2', '4301', '6117', '1'), +('1', '60', '3', '46184', '6981', '1'), +('1', '60', '3', '1625', '4548', '1'), +('1', '60', '3', '5712', '3370', '1'), +('1', '60', '3', '71529', '3305', '1'), +('1', '60', '5', '14703', '5500', '1'), +('1', '60', '5', '14569', '5282', '1'), +('1', '60', '5', '5794', '4076', '1'), +('1', '60', '5', '14709', '3852', '1'), +('1', '60', '8', '11621', '25297', '1'), +('1', '60', '8', '1619', '21783', '1'), +('1', '60', '8', '1627', '20060', '1'), +('1', '60', '8', '1622', '10251', '1'), +('1', '60', '6', '5723', '14230', '1'), +('1', '60', '6', '5706', '9247', '1'), +('1', '60', '6', '1557', '7033', '1'), +('1', '60', '6', '11975', '4439', '1'), +('1', '60', '17', '4516', '15883', '1'), +('1', '60', '17', '10845', '13959', '1'), +('1', '60', '17', '4832', '9816', '1'), +('1', '60', '17', '4912', '9816', '1'), +('1', '60', '7', '5723', '14230', '1'), +('1', '60', '7', '62046', '5346', '1'), +('1', '60', '7', '4295', '4590', '1'), +('1', '60', '7', '4517', '4456', '1'), +('1', '60', '9', '5723', '14230', '1'), +('1', '60', '9', '5794', '4076', '1'), +('1', '60', '9', '4294', '3594', '1'), +('1', '60', '9', '4518', '3565', '1'), +('1', '60', '15', '5727', '10432', '1'), +('1', '60', '15', '10366', '8032', '1'), +('1', '60', '15', '10151', '7200', '1'), +('1', '60', '15', '5728', '6857', '1'), +('1', '60', '20', '11673', '24403', '1'), +('1', '60', '20', '1620', '19156', '1'), +('1', '60', '20', '11601', '18776', '1'), +('1', '60', '20', '2921', '13607', '1'), +('1', '60', '12', '4835', '8911', '1'), +('1', '60', '12', '4915', '8911', '1'), +('1', '60', '12', '20655', '5636', '1'), +('1', '60', '12', '4519', '4456', '1'), +('1', '60', '18', '4520', '8147', '1'), +('1', '60', '18', '11612', '5427', '1'), +('1', '60', '18', '4916', '4757', '1'), +('1', '60', '18', '4836', '4757', '1'), +('1', '60', '19', '24616', '25981', '1'), +('1', '60', '19', '4837', '4483', '1'), +('1', '60', '19', '4917', '4483', '1'), +('1', '60', '19', '4521', '4456', '1'), +('1', '60', '13', '6287', '42513', '1'), +('1', '60', '13', '11674', '38614', '1'), +('1', '60', '13', '10910', '35490', '1'), +('1', '60', '13', '24613', '34800', '1'), +('1', '60', '14', '6287', '42513', '1'), +('1', '60', '14', '11674', '38614', '1'), +('1', '60', '14', '10910', '35490', '1'), +('1', '60', '14', '24613', '34800', '1'), +('1', '60', '11', '45137', '29135', '1'), +('1', '60', '11', '5758', '21526', '1'), +('1', '60', '11', '8325', '13600', '1'), +('1', '60', '11', '8408', '13388', '1'), +('1', '61', '22', '21807', '0', '3'), +('1', '61', '22', '21805', '0', '3'), +('1', '61', '22', '12425', '0', '3'), +('1', '61', '22', '7867', '0', '3'), +('1', '61', '1', '7945', '23486', '3'), +('1', '61', '1', '26775', '15725', '3'), +('1', '61', '1', '28945', '12106', '3'), +('1', '61', '1', '29861', '11793', '3'), +('1', '61', '2', '26025', '23585', '3'), +('1', '61', '2', '2612', '23585', '3'), +('1', '61', '2', '26759', '14475', '3'), +('1', '61', '2', '28986', '13709', '3'), +('1', '61', '3', '26773', '15312', '3'), +('1', '61', '3', '28942', '13439', '3'), +('1', '61', '3', '26751', '12440', '3'), +('1', '61', '3', '28963', '11935', '3'), +('1', '61', '5', '28885', '29880', '3'), +('1', '61', '5', '27266', '25638', '3'), +('1', '61', '5', '8364', '17329', '3'), +('1', '61', '5', '7868', '13179', '3'), +('1', '61', '8', '26765', '32510', '3'), +('1', '61', '8', '26766', '32179', '3'), +('1', '61', '8', '31471', '31274', '3'), +('1', '61', '8', '11621', '23502', '3'), +('1', '61', '6', '28902', '32665', '3'), +('1', '61', '6', '28919', '13469', '3'), +('1', '61', '6', '31472', '13264', '3'), +('1', '61', '6', '30551', '13208', '3'), +('1', '61', '17', '28937', '34363', '3'), +('1', '61', '17', '29457', '31574', '3'), +('1', '61', '17', '27261', '20018', '3'), +('1', '61', '17', '26770', '17373', '3'), +('1', '61', '7', '28926', '14886', '3'), +('1', '61', '7', '7194', '13554', '3'), +('1', '61', '7', '7868', '13179', '3'), +('1', '61', '7', '26584', '12440', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '61', '9', '31461', '31507', '3'), +('1', '61', '9', '7868', '13179', '3'), +('1', '61', '9', '26584', '12440', '3'), +('1', '61', '9', '31460', '11472', '3'), +('1', '61', '15', '27950', '21620', '3'), +('1', '61', '15', '26749', '14939', '3'), +('1', '61', '15', '26757', '11671', '3'), +('1', '61', '15', '63170', '11668', '3'), +('1', '61', '20', '31235', '30793', '3'), +('1', '61', '20', '28890', '29931', '3'), +('1', '61', '20', '31334', '28583', '3'), +('1', '61', '20', '26551', '26233', '3'), +('1', '61', '12', '25857', '29507', '3'), +('1', '61', '12', '28967', '14875', '3'), +('1', '61', '12', '29177', '12759', '3'), +('1', '61', '12', '26774', '12527', '3'), +('1', '61', '18', '28965', '14514', '3'), +('1', '61', '18', '26755', '11646', '3'), +('1', '61', '18', '28932', '11420', '3'), +('1', '61', '18', '8289', '11327', '3'), +('1', '61', '19', '30569', '32344', '3'), +('1', '61', '19', '28888', '27948', '3'), +('1', '61', '19', '24616', '23667', '3'), +('1', '61', '19', '7871', '11519', '3'), +('1', '61', '13', '69416', '60122', '3'), +('1', '61', '13', '31469', '56483', '3'), +('1', '61', '13', '28855', '50860', '3'), +('1', '61', '13', '26585', '50779', '3'), +('1', '61', '14', '28809', '62423', '3'), +('1', '61', '14', '69416', '60122', '3'), +('1', '61', '14', '31379', '57358', '3'), +('1', '61', '14', '31469', '56483', '3'), +('1', '61', '11', '30539', '42863', '3'), +('1', '61', '11', '28935', '41355', '3'), +('1', '61', '11', '7904', '37874', '3'), +('1', '61', '11', '25208', '32433', '3'), +('1', '62', '22', '21807', '0', '3'), +('1', '62', '22', '21805', '0', '3'), +('1', '62', '22', '12425', '0', '3'), +('1', '62', '22', '7867', '0', '3'), +('1', '62', '1', '7945', '23486', '3'), +('1', '62', '1', '26775', '15727', '3'), +('1', '62', '1', '28945', '12106', '3'), +('1', '62', '1', '29861', '11796', '3'), +('1', '62', '2', '26025', '23586', '3'), +('1', '62', '2', '2612', '23586', '3'), +('1', '62', '2', '26759', '14475', '3'), +('1', '62', '2', '28986', '13713', '3'), +('1', '62', '3', '26773', '15315', '3'), +('1', '62', '3', '28942', '13441', '3'), +('1', '62', '3', '26751', '12440', '3'), +('1', '62', '3', '28963', '11937', '3'), +('1', '62', '5', '28885', '29881', '3'), +('1', '62', '5', '27266', '25639', '3'), +('1', '62', '5', '8364', '17330', '3'), +('1', '62', '5', '7868', '13180', '3'), +('1', '62', '8', '26765', '32510', '3'), +('1', '62', '8', '26766', '32180', '3'), +('1', '62', '8', '31471', '31275', '3'), +('1', '62', '8', '11621', '23502', '3'), +('1', '62', '6', '28902', '32667', '3'), +('1', '62', '6', '28919', '13472', '3'), +('1', '62', '6', '31472', '13266', '3'), +('1', '62', '6', '30551', '13209', '3'), +('1', '62', '17', '28937', '34364', '3'), +('1', '62', '17', '29457', '31574', '3'), +('1', '62', '17', '27261', '20019', '3'), +('1', '62', '17', '26770', '17376', '3'), +('1', '62', '7', '28926', '14886', '3'), +('1', '62', '7', '7194', '13554', '3'), +('1', '62', '7', '7868', '13180', '3'), +('1', '62', '7', '26584', '12442', '3'), +('1', '62', '9', '31461', '31508', '3'), +('1', '62', '9', '7868', '13180', '3'), +('1', '62', '9', '26584', '12442', '3'), +('1', '62', '9', '31460', '11474', '3'), +('1', '62', '15', '27950', '21621', '3'), +('1', '62', '15', '26749', '14941', '3'), +('1', '62', '15', '26757', '11671', '3'), +('1', '62', '15', '63170', '11670', '3'), +('1', '62', '20', '31235', '30795', '3'), +('1', '62', '20', '28890', '29931', '3'), +('1', '62', '20', '31334', '28583', '3'), +('1', '62', '20', '26551', '26236', '3'), +('1', '62', '12', '25857', '29507', '3'), +('1', '62', '12', '28967', '14875', '3'), +('1', '62', '12', '29177', '12760', '3'), +('1', '62', '12', '26774', '12529', '3'), +('1', '62', '18', '28965', '14516', '3'), +('1', '62', '18', '26755', '11646', '3'), +('1', '62', '18', '28932', '11423', '3'), +('1', '62', '18', '8289', '11327', '3'), +('1', '62', '19', '30569', '32345', '3'), +('1', '62', '19', '28888', '27949', '3'), +('1', '62', '19', '24616', '23667', '3'), +('1', '62', '19', '7871', '11522', '3'), +('1', '62', '13', '69416', '60210', '3'), +('1', '62', '13', '31469', '56569', '3'), +('1', '62', '13', '28855', '50919', '3'), +('1', '62', '13', '26585', '50866', '3'), +('1', '62', '14', '28809', '62509', '3'), +('1', '62', '14', '69416', '60210', '3'), +('1', '62', '14', '31379', '57443', '3'), +('1', '62', '14', '31469', '56569', '3'), +('1', '62', '11', '30539', '42995', '3'), +('1', '62', '11', '28935', '41483', '3'), +('1', '62', '11', '7904', '37921', '3'), +('1', '62', '11', '25208', '32471', '3'), +('1', '63', '22', '21807', '0', '3'), +('1', '63', '22', '21805', '0', '3'), +('1', '63', '22', '12425', '0', '3'), +('1', '63', '22', '7867', '0', '3'), +('1', '63', '1', '7945', '23486', '3'), +('1', '63', '1', '26775', '15729', '3'), +('1', '63', '1', '28945', '12107', '3'), +('1', '63', '1', '29861', '11799', '3'), +('1', '63', '2', '26025', '23587', '3'), +('1', '63', '2', '2612', '23587', '3'), +('1', '63', '2', '26759', '14475', '3'), +('1', '63', '2', '28986', '13717', '3'), +('1', '63', '3', '26773', '15318', '3'), +('1', '63', '3', '28942', '13443', '3'), +('1', '63', '3', '26751', '12440', '3'), +('1', '63', '3', '28963', '11938', '3'), +('1', '63', '5', '28885', '29882', '3'), +('1', '63', '5', '27266', '25640', '3'), +('1', '63', '5', '8364', '17332', '3'), +('1', '63', '5', '7868', '13181', '3'), +('1', '63', '8', '26765', '32511', '3'), +('1', '63', '8', '26766', '32182', '3'), +('1', '63', '8', '31471', '31277', '3'), +('1', '63', '8', '11621', '23502', '3'), +('1', '63', '6', '28902', '32669', '3'), +('1', '63', '6', '28919', '13474', '3'), +('1', '63', '6', '31472', '13268', '3'), +('1', '63', '6', '30551', '13211', '3'), +('1', '63', '17', '28937', '34365', '3'), +('1', '63', '17', '29457', '31574', '3'), +('1', '63', '17', '27261', '20020', '3'), +('1', '63', '17', '26770', '17379', '3'), +('1', '63', '7', '28926', '14886', '3'), +('1', '63', '7', '7194', '13554', '3'), +('1', '63', '7', '7868', '13181', '3'), +('1', '63', '7', '26584', '12444', '3'), +('1', '63', '9', '31461', '31510', '3'), +('1', '63', '9', '7868', '13181', '3'), +('1', '63', '9', '26584', '12444', '3'), +('1', '63', '9', '31460', '11476', '3'), +('1', '63', '15', '27950', '21623', '3'), +('1', '63', '15', '26749', '14943', '3'), +('1', '63', '15', '63170', '11671', '3'), +('1', '63', '15', '26757', '11671', '3'), +('1', '63', '20', '31235', '30798', '3'), +('1', '63', '20', '28890', '29931', '3'), +('1', '63', '20', '31334', '28583', '3'), +('1', '63', '20', '26551', '26238', '3'), +('1', '63', '12', '25857', '29507', '3'), +('1', '63', '12', '28967', '14875', '3'), +('1', '63', '12', '29177', '12760', '3'), +('1', '63', '12', '26774', '12531', '3'), +('1', '63', '18', '28965', '14518', '3'), +('1', '63', '18', '26755', '11646', '3'), +('1', '63', '18', '28932', '11425', '3'), +('1', '63', '18', '8289', '11327', '3'), +('1', '63', '19', '30569', '32347', '3'), +('1', '63', '19', '28888', '27950', '3'), +('1', '63', '19', '24616', '23667', '3'), +('1', '63', '19', '7871', '11526', '3'), +('1', '63', '13', '69416', '60297', '3'), +('1', '63', '13', '31469', '56627', '3'), +('1', '63', '13', '28855', '51006', '3'), +('1', '63', '13', '26585', '50954', '3'), +('1', '63', '14', '28809', '62567', '3'), +('1', '63', '14', '69416', '60297', '3'), +('1', '63', '14', '31379', '57499', '3'), +('1', '63', '14', '31469', '56627', '3'), +('1', '63', '11', '30539', '43118', '3'), +('1', '63', '11', '28935', '41611', '3'), +('1', '63', '11', '7904', '37968', '3'), +('1', '63', '11', '25208', '32518', '3'), +('1', '64', '22', '21807', '0', '3'), +('1', '64', '22', '21805', '0', '3'), +('1', '64', '22', '12425', '0', '3'), +('1', '64', '22', '7867', '0', '3'), +('1', '64', '1', '7945', '23487', '3'), +('1', '64', '1', '26775', '15731', '3'), +('1', '64', '1', '28945', '12108', '3'), +('1', '64', '1', '29861', '11802', '3'), +('1', '64', '2', '26025', '23588', '3'), +('1', '64', '2', '2612', '23588', '3'), +('1', '64', '2', '26759', '14475', '3'), +('1', '64', '2', '28986', '13722', '3'), +('1', '64', '3', '26773', '15321', '3'), +('1', '64', '3', '28942', '13445', '3'), +('1', '64', '3', '26751', '12440', '3'), +('1', '64', '3', '28963', '11939', '3'), +('1', '64', '5', '28885', '29883', '3'), +('1', '64', '5', '27266', '25641', '3'), +('1', '64', '5', '8364', '17334', '3'), +('1', '64', '5', '7868', '13182', '3'), +('1', '64', '8', '26765', '32511', '3'), +('1', '64', '8', '26766', '32184', '3'), +('1', '64', '8', '31471', '31279', '3'), +('1', '64', '8', '11621', '23502', '3'), +('1', '64', '6', '28902', '32671', '3'), +('1', '64', '6', '28919', '13477', '3'), +('1', '64', '6', '31472', '13270', '3'), +('1', '64', '6', '30551', '13212', '3'), +('1', '64', '17', '28937', '34366', '3'), +('1', '64', '17', '29457', '31574', '3'), +('1', '64', '17', '27261', '20021', '3'), +('1', '64', '17', '26770', '17382', '3'), +('1', '64', '7', '28926', '14886', '3'), +('1', '64', '7', '7194', '13554', '3'), +('1', '64', '7', '7868', '13182', '3'), +('1', '64', '7', '26584', '12446', '3'), +('1', '64', '9', '31461', '31511', '3'), +('1', '64', '9', '7868', '13182', '3'), +('1', '64', '9', '26584', '12446', '3'), +('1', '64', '9', '31460', '11477', '3'), +('1', '64', '15', '27950', '21624', '3'), +('1', '64', '15', '26749', '14945', '3'), +('1', '64', '15', '63170', '11673', '3'), +('1', '64', '15', '26757', '11672', '3'), +('1', '64', '20', '31235', '30800', '3'), +('1', '64', '20', '28890', '29931', '3'), +('1', '64', '20', '31334', '28583', '3'), +('1', '64', '20', '26551', '26241', '3'), +('1', '64', '12', '25857', '29507', '3'), +('1', '64', '12', '28967', '14875', '3'), +('1', '64', '12', '29177', '12761', '3'), +('1', '64', '12', '26774', '12533', '3'), +('1', '64', '18', '28965', '14519', '3'), +('1', '64', '18', '26755', '11646', '3'), +('1', '64', '18', '28932', '11428', '3'), +('1', '64', '18', '8289', '11327', '3'), +('1', '64', '19', '30569', '32348', '3'), +('1', '64', '19', '28888', '27951', '3'), +('1', '64', '19', '24616', '23667', '3'), +('1', '64', '19', '7871', '11530', '3'), +('1', '64', '13', '69416', '60385', '3'), +('1', '64', '13', '31469', '56714', '3'), +('1', '64', '13', '1154', '51078', '3'), +('1', '64', '13', '28855', '51064', '3'), +('1', '64', '14', '28809', '62654', '3'), +('1', '64', '14', '69416', '60385', '3'), +('1', '64', '14', '31379', '57584', '3'), +('1', '64', '14', '31469', '56714', '3'), +('1', '64', '11', '30539', '43250', '3'), +('1', '64', '11', '28935', '41739', '3'), +('1', '64', '11', '7904', '38015', '3'), +('1', '64', '11', '25208', '32565', '3'), +('1', '65', '22', '21805', '0', '7'), +('1', '65', '22', '61948', '0', '7'), +('1', '65', '22', '66397', '0', '7'), +('1', '65', '22', '21807', '0', '7'), +('1', '65', '1', '68949', '48550', '7'), +('1', '65', '1', '7125', '40992', '7'), +('1', '65', '1', '32106', '38244', '7'), +('1', '65', '1', '69166', '33221', '7'), +('1', '65', '2', '28647', '41731', '7'), +('1', '65', '2', '28605', '40593', '7'), +('1', '65', '2', '28648', '40439', '7'), +('1', '65', '2', '69087', '28512', '7'), +('1', '65', '3', '69157', '30953', '7'), +('1', '65', '3', '69069', '28704', '7'), +('1', '65', '3', '69074', '27516', '7'), +('1', '65', '3', '69068', '27153', '7'), +('1', '65', '5', '67625', '33498', '7'), +('1', '65', '5', '69135', '31812', '7'), +('1', '65', '5', '28885', '29884', '7'), +('1', '65', '5', '68808', '29113', '7'), +('1', '65', '8', '69165', '55769', '7'), +('1', '65', '8', '69064', '52511', '7'), +('1', '65', '8', '69072', '50897', '7'), +('1', '65', '8', '26765', '32512', '7'), +('1', '65', '6', '68757', '47833', '7'), +('1', '65', '6', '13674', '43996', '7'), +('1', '65', '6', '19144', '35458', '7'), +('1', '65', '6', '28902', '32673', '7'), +('1', '65', '17', '69150', '36625', '7'), +('1', '65', '17', '28937', '34368', '7'), +('1', '65', '17', '68960', '33634', '7'), +('1', '65', '17', '29457', '31574', '7'), +('1', '65', '7', '16097', '36584', '7'), +('1', '65', '7', '69168', '30321', '7'), +('1', '65', '7', '69079', '28242', '7'), +('1', '65', '7', '68851', '27279', '7'), +('1', '65', '9', '68766', '40609', '7'), +('1', '65', '9', '16097', '36584', '7'), +('1', '65', '9', '11103', '36056', '7'), +('1', '65', '9', '69126', '32964', '7'), +('1', '65', '15', '68111', '35465', '7'), +('1', '65', '15', '9959', '35348', '7'), +('1', '65', '15', '69160', '31528', '7'), +('1', '65', '15', '69131', '30865', '7'), +('1', '65', '20', '16156', '48972', '7'), +('1', '65', '20', '16097', '36584', '7'), +('1', '65', '20', '69134', '34884', '7'), +('1', '65', '20', '15873', '34382', '7'), +('1', '65', '12', '69252', '32108', '7'), +('1', '65', '12', '25857', '29507', '7'), +('1', '65', '12', '69083', '27890', '7'), +('1', '65', '12', '68852', '25111', '7'), +('1', '65', '18', '69146', '34304', '7'), +('1', '65', '18', '68961', '29098', '7'), +('1', '65', '18', '68779', '26779', '7'), +('1', '65', '18', '28650', '25049', '7'), +('1', '65', '19', '19094', '35411', '7'), +('1', '65', '19', '30569', '32349', '7'), +('1', '65', '19', '69177', '31498', '7'), +('1', '65', '19', '69075', '28913', '7'), +('1', '65', '13', '69052', '113783', '7'), +('1', '65', '13', '69110', '99512', '7'), +('1', '65', '13', '69040', '92776', '7'), +('1', '65', '13', '69156', '92037', '7'), +('1', '65', '14', '69052', '113783', '7'), +('1', '65', '14', '69040', '92776', '7'), +('1', '65', '14', '69156', '92037', '7'), +('1', '65', '14', '22998', '89023', '7'), +('1', '65', '11', '69054', '62750', '7'), +('1', '65', '11', '27818', '50032', '7'), +('1', '65', '11', '68662', '48812', '7'), +('1', '65', '11', '27986', '44510', '7'), +('1', '65', '22', '21805', '0', '6'), +('1', '65', '22', '61948', '0', '6'), +('1', '65', '22', '66397', '0', '6'), +('1', '65', '22', '21807', '0', '6'), +('1', '65', '1', '7125', '40992', '6'), +('1', '65', '1', '32106', '38244', '6'), +('1', '65', '1', '7123', '25480', '6'), +('1', '65', '1', '7945', '23487', '6'), +('1', '65', '2', '28647', '41731', '6'), +('1', '65', '2', '28605', '40593', '6'), +('1', '65', '2', '28648', '40439', '6'), +('1', '65', '2', '2612', '23589', '6'), +('1', '65', '3', '26982', '23902', '6'), +('1', '65', '3', '9435', '20929', '6'), +('1', '65', '3', '26983', '20372', '6'), +('1', '65', '3', '29174', '20143', '6'), +('1', '65', '5', '28885', '29884', '6'), +('1', '65', '5', '7769', '27604', '6'), +('1', '65', '5', '8785', '26486', '6'), +('1', '65', '5', '27266', '25642', '6'), +('1', '65', '8', '26765', '32512', '6'), +('1', '65', '8', '26766', '32186', '6'), +('1', '65', '8', '31471', '31281', '6'), +('1', '65', '8', '15803', '30310', '6'), +('1', '65', '6', '13674', '43996', '6'), +('1', '65', '6', '19144', '35458', '6'), +('1', '65', '6', '28902', '32673', '6'), +('1', '65', '6', '28659', '22789', '6'), +('1', '65', '17', '28937', '34368', '6'), +('1', '65', '17', '29457', '31574', '6'), +('1', '65', '17', '47642', '28871', '6'), +('1', '65', '17', '27261', '20022', '6'), +('1', '65', '7', '16097', '36584', '6'), +('1', '65', '7', '21995', '20472', '6'), +('1', '65', '7', '11429', '19888', '6'), +('1', '65', '7', '28926', '14886', '6'), +('1', '65', '9', '16097', '36584', '6'), +('1', '65', '9', '11103', '36056', '6'), +('1', '65', '9', '31461', '31512', '6'), +('1', '65', '9', '32100', '23965', '6'), +('1', '65', '15', '68111', '35465', '6'), +('1', '65', '15', '9959', '35348', '6'), +('1', '65', '15', '26989', '24014', '6'), +('1', '65', '15', '10948', '21788', '6'), +('1', '65', '20', '16156', '48972', '6'), +('1', '65', '20', '16097', '36584', '6'), +('1', '65', '20', '15873', '34382', '6'), +('1', '65', '20', '31235', '30803', '6'), +('1', '65', '12', '25857', '29507', '6'), +('1', '65', '12', '28246', '23878', '6'), +('1', '65', '12', '27000', '22458', '6'), +('1', '65', '12', '12595', '19031', '6'), +('1', '65', '18', '28650', '25049', '6'), +('1', '65', '18', '16693', '21419', '6'), +('1', '65', '18', '28965', '14521', '6'), +('1', '65', '18', '68143', '12742', '6'), +('1', '65', '19', '19094', '35411', '6'), +('1', '65', '19', '30569', '32349', '6'), +('1', '65', '19', '28888', '27952', '6'), +('1', '65', '19', '24616', '23667', '6'), +('1', '65', '13', '22998', '89023', '6'), +('1', '65', '13', '22999', '84465', '6'), +('1', '65', '13', '22986', '74168', '6'), +('1', '65', '13', '22894', '74027', '6'), +('1', '65', '14', '22998', '89023', '6'), +('1', '65', '14', '22986', '74168', '6'), +('1', '65', '14', '22894', '74027', '6'), +('1', '65', '14', '26220', '68446', '6'), +('1', '65', '11', '27818', '50032', '6'), +('1', '65', '11', '27986', '44510', '6'), +('1', '65', '11', '29596', '44177', '6'), +('1', '65', '11', '30539', '43745', '6'), +('1', '65', '22', '61948', '0', '5'), +('1', '65', '22', '66397', '0', '5'), +('1', '65', '22', '62787', '0', '5'), +('1', '65', '22', '21805', '0', '5'), +('1', '65', '1', '7125', '40992', '5'), +('1', '65', '1', '32106', '38244', '5'), +('1', '65', '1', '7123', '25480', '5'), +('1', '65', '1', '7945', '23487', '5'), +('1', '65', '2', '28647', '41731', '5'), +('1', '65', '2', '28605', '40593', '5'), +('1', '65', '2', '28648', '40439', '5'), +('1', '65', '2', '2612', '23589', '5'), +('1', '65', '3', '26982', '23902', '5'), +('1', '65', '3', '9435', '20929', '5'), +('1', '65', '3', '26983', '20372', '5'), +('1', '65', '3', '29174', '20143', '5'), +('1', '65', '5', '28885', '29884', '5'), +('1', '65', '5', '7769', '27604', '5'), +('1', '65', '5', '8785', '26486', '5'), +('1', '65', '5', '27266', '25642', '5'), +('1', '65', '8', '26765', '32512', '5'), +('1', '65', '8', '26766', '32186', '5'), +('1', '65', '8', '31471', '31281', '5'), +('1', '65', '8', '15803', '30310', '5'), +('1', '65', '6', '13674', '43996', '5'), +('1', '65', '6', '19144', '35458', '5'), +('1', '65', '6', '28902', '32673', '5'), +('1', '65', '6', '28659', '22789', '5'), +('1', '65', '17', '28937', '34368', '5'), +('1', '65', '17', '29457', '31574', '5'), +('1', '65', '17', '47642', '28871', '5'), +('1', '65', '17', '27261', '20022', '5'), +('1', '65', '7', '16097', '36584', '5'), +('1', '65', '7', '21995', '20472', '5'), +('1', '65', '7', '11429', '19888', '5'), +('1', '65', '7', '28926', '14886', '5'), +('1', '65', '9', '16097', '36584', '5'), +('1', '65', '9', '11103', '36056', '5'), +('1', '65', '9', '31461', '31512', '5'), +('1', '65', '9', '32100', '23965', '5'), +('1', '65', '15', '9959', '35348', '5'), +('1', '65', '15', '26989', '24014', '5'), +('1', '65', '15', '10948', '21788', '5'), +('1', '65', '15', '27950', '21625', '5'), +('1', '65', '20', '16156', '48972', '5'), +('1', '65', '20', '16097', '36584', '5'), +('1', '65', '20', '15873', '34382', '5'), +('1', '65', '20', '31235', '30803', '5'), +('1', '65', '12', '25857', '29507', '5'), +('1', '65', '12', '28246', '23878', '5'), +('1', '65', '12', '27000', '22458', '5'), +('1', '65', '12', '12595', '19031', '5'), +('1', '65', '18', '28650', '25049', '5'), +('1', '65', '18', '16693', '21419', '5'), +('1', '65', '18', '28965', '14521', '5'), +('1', '65', '18', '26755', '11646', '5'), +('1', '65', '19', '19094', '35411', '5'), +('1', '65', '19', '30569', '32349', '5'), +('1', '65', '19', '28888', '27952', '5'), +('1', '65', '19', '24616', '23667', '5'), +('1', '65', '13', '22998', '89023', '5'), +('1', '65', '13', '22999', '84465', '5'), +('1', '65', '13', '22986', '74168', '5'), +('1', '65', '13', '22894', '74027', '5'), +('1', '65', '14', '22998', '89023', '5'), +('1', '65', '14', '22986', '74168', '5'), +('1', '65', '14', '22894', '74027', '5'), +('1', '65', '14', '26220', '68446', '5'), +('1', '65', '11', '27818', '50032', '5'), +('1', '65', '11', '27986', '44510', '5'), +('1', '65', '11', '29596', '44177', '5'), +('1', '65', '11', '30539', '43745', '5'), +('1', '65', '22', '61948', '0', '4'), +('1', '65', '22', '66397', '0', '4'), +('1', '65', '22', '62787', '0', '4'), +('1', '65', '22', '21805', '0', '4'), +('1', '65', '1', '7125', '40992', '4'), +('1', '65', '1', '32106', '38244', '4'), +('1', '65', '1', '7123', '25480', '4'), +('1', '65', '1', '7945', '23487', '4'), +('1', '65', '2', '28647', '41731', '4'), +('1', '65', '2', '28605', '40593', '4'), +('1', '65', '2', '28648', '40439', '4'), +('1', '65', '2', '26025', '23589', '4'), +('1', '65', '3', '26982', '23902', '4'), +('1', '65', '3', '9435', '20929', '4'), +('1', '65', '3', '26983', '20372', '4'), +('1', '65', '3', '29174', '20143', '4'), +('1', '65', '5', '28885', '29884', '4'), +('1', '65', '5', '7769', '27604', '4'), +('1', '65', '5', '8785', '26486', '4'), +('1', '65', '5', '27266', '25642', '4'), +('1', '65', '8', '26765', '32512', '4'), +('1', '65', '8', '26766', '32186', '4'), +('1', '65', '8', '31471', '31281', '4'), +('1', '65', '8', '15803', '30310', '4'), +('1', '65', '6', '13674', '43996', '4'), +('1', '65', '6', '19144', '35458', '4'), +('1', '65', '6', '28902', '32673', '4'), +('1', '65', '6', '28659', '22789', '4'), +('1', '65', '17', '28937', '34368', '4'), +('1', '65', '17', '29457', '31574', '4'), +('1', '65', '17', '47642', '28871', '4'), +('1', '65', '17', '27261', '20022', '4'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '65', '7', '16097', '36584', '4'), +('1', '65', '7', '21995', '20472', '4'), +('1', '65', '7', '11429', '19888', '4'), +('1', '65', '7', '28926', '14886', '4'), +('1', '65', '9', '16097', '36584', '4'), +('1', '65', '9', '11103', '36056', '4'), +('1', '65', '9', '31461', '31512', '4'), +('1', '65', '9', '32100', '23965', '4'), +('1', '65', '15', '9959', '35348', '4'), +('1', '65', '15', '26989', '24014', '4'), +('1', '65', '15', '10948', '21788', '4'), +('1', '65', '15', '27950', '21625', '4'), +('1', '65', '20', '16156', '48972', '4'), +('1', '65', '20', '16097', '36584', '4'), +('1', '65', '20', '15873', '34382', '4'), +('1', '65', '20', '31235', '30803', '4'), +('1', '65', '12', '25857', '29507', '4'), +('1', '65', '12', '28246', '23878', '4'), +('1', '65', '12', '27000', '22458', '4'), +('1', '65', '12', '12595', '19031', '4'), +('1', '65', '18', '28650', '25049', '4'), +('1', '65', '18', '16693', '21419', '4'), +('1', '65', '18', '28965', '14521', '4'), +('1', '65', '18', '26755', '11646', '4'), +('1', '65', '19', '19094', '35411', '4'), +('1', '65', '19', '30569', '32349', '4'), +('1', '65', '19', '28888', '27952', '4'), +('1', '65', '19', '24616', '23667', '4'), +('1', '65', '13', '22998', '89023', '4'), +('1', '65', '13', '22999', '84465', '4'), +('1', '65', '13', '22986', '74168', '4'), +('1', '65', '13', '22894', '74027', '4'), +('1', '65', '14', '22998', '89023', '4'), +('1', '65', '14', '22986', '74168', '4'), +('1', '65', '14', '22894', '74027', '4'), +('1', '65', '14', '26220', '68446', '4'), +('1', '65', '11', '27818', '50032', '4'), +('1', '65', '11', '27986', '44510', '4'), +('1', '65', '11', '29596', '44177', '4'), +('1', '65', '11', '30539', '43745', '4'), +('1', '66', '22', '21805', '0', '7'), +('1', '66', '22', '61948', '0', '7'), +('1', '66', '22', '66397', '0', '7'), +('1', '66', '22', '21807', '0', '7'), +('1', '66', '1', '68949', '48553', '7'), +('1', '66', '1', '7125', '40993', '7'), +('1', '66', '1', '32106', '38247', '7'), +('1', '66', '1', '69166', '33224', '7'), +('1', '66', '2', '28647', '41733', '7'), +('1', '66', '2', '28605', '40594', '7'), +('1', '66', '2', '28648', '40439', '7'), +('1', '66', '2', '69087', '28515', '7'), +('1', '66', '3', '69157', '30956', '7'), +('1', '66', '3', '69069', '28708', '7'), +('1', '66', '3', '69074', '27519', '7'), +('1', '66', '3', '69068', '27156', '7'), +('1', '66', '5', '67625', '33500', '7'), +('1', '66', '5', '69135', '31815', '7'), +('1', '66', '5', '28885', '29885', '7'), +('1', '66', '5', '68808', '29115', '7'), +('1', '66', '8', '69165', '55772', '7'), +('1', '66', '8', '69064', '52513', '7'), +('1', '66', '8', '69072', '50900', '7'), +('1', '66', '8', '26765', '32513', '7'), +('1', '66', '6', '68757', '47835', '7'), +('1', '66', '6', '13674', '43998', '7'), +('1', '66', '6', '19144', '35460', '7'), +('1', '66', '6', '28902', '32675', '7'), +('1', '66', '17', '69150', '36627', '7'), +('1', '66', '17', '28937', '34369', '7'), +('1', '66', '17', '68960', '33637', '7'), +('1', '66', '17', '29457', '31574', '7'), +('1', '66', '7', '16097', '36587', '7'), +('1', '66', '7', '69168', '30324', '7'), +('1', '66', '7', '69079', '28244', '7'), +('1', '66', '7', '68851', '27282', '7'), +('1', '66', '9', '68766', '40612', '7'), +('1', '66', '9', '16097', '36587', '7'), +('1', '66', '9', '11103', '36057', '7'), +('1', '66', '9', '69126', '32967', '7'), +('1', '66', '15', '68111', '35465', '7'), +('1', '66', '15', '9959', '35350', '7'), +('1', '66', '15', '69160', '31531', '7'), +('1', '66', '15', '69131', '30865', '7'), +('1', '66', '20', '16156', '48974', '7'), +('1', '66', '20', '16097', '36587', '7'), +('1', '66', '20', '69134', '34887', '7'), +('1', '66', '20', '15873', '34384', '7'), +('1', '66', '12', '69252', '32111', '7'), +('1', '66', '12', '25857', '29507', '7'), +('1', '66', '12', '69083', '27890', '7'), +('1', '66', '12', '68852', '25114', '7'), +('1', '66', '18', '69146', '34304', '7'), +('1', '66', '18', '68961', '29099', '7'), +('1', '66', '18', '68779', '26782', '7'), +('1', '66', '18', '28650', '25051', '7'), +('1', '66', '19', '19094', '35413', '7'), +('1', '66', '19', '30569', '32350', '7'), +('1', '66', '19', '69177', '31500', '7'), +('1', '66', '19', '69075', '28916', '7'), +('1', '66', '13', '69052', '114402', '7'), +('1', '66', '13', '69110', '99696', '7'), +('1', '66', '13', '69040', '93034', '7'), +('1', '66', '13', '69156', '92152', '7'), +('1', '66', '14', '69052', '114402', '7'), +('1', '66', '14', '69040', '93034', '7'), +('1', '66', '14', '69156', '92152', '7'), +('1', '66', '14', '22998', '89562', '7'), +('1', '66', '11', '69054', '62950', '7'), +('1', '66', '11', '27818', '50092', '7'), +('1', '66', '11', '68662', '48871', '7'), +('1', '66', '11', '27986', '44569', '7'), +('1', '67', '22', '21805', '0', '7'), +('1', '67', '22', '61948', '0', '7'), +('1', '67', '22', '66397', '0', '7'), +('1', '67', '22', '21807', '0', '7'), +('1', '67', '1', '68949', '48556', '7'), +('1', '67', '1', '7125', '40995', '7'), +('1', '67', '1', '32106', '38249', '7'), +('1', '67', '1', '69166', '33226', '7'), +('1', '67', '2', '28647', '41736', '7'), +('1', '67', '2', '28605', '40595', '7'), +('1', '67', '2', '28648', '40439', '7'), +('1', '67', '2', '69087', '28519', '7'), +('1', '67', '3', '69157', '30958', '7'), +('1', '67', '3', '69069', '28712', '7'), +('1', '67', '3', '69074', '27521', '7'), +('1', '67', '3', '69068', '27158', '7'), +('1', '67', '5', '67625', '33502', '7'), +('1', '67', '5', '69135', '31819', '7'), +('1', '67', '5', '28885', '29886', '7'), +('1', '67', '5', '68808', '29117', '7'), +('1', '67', '8', '69165', '55775', '7'), +('1', '67', '8', '69064', '52515', '7'), +('1', '67', '8', '69072', '50902', '7'), +('1', '67', '8', '26765', '32513', '7'), +('1', '67', '6', '68757', '47838', '7'), +('1', '67', '6', '13674', '44001', '7'), +('1', '67', '6', '19144', '35463', '7'), +('1', '67', '6', '28902', '32677', '7'), +('1', '67', '17', '69150', '36630', '7'), +('1', '67', '17', '28937', '34370', '7'), +('1', '67', '17', '68960', '33640', '7'), +('1', '67', '17', '29457', '31574', '7'), +('1', '67', '7', '16097', '36590', '7'), +('1', '67', '7', '69168', '30326', '7'), +('1', '67', '7', '69079', '28246', '7'), +('1', '67', '7', '68851', '27286', '7'), +('1', '67', '9', '68766', '40614', '7'), +('1', '67', '9', '16097', '36590', '7'), +('1', '67', '9', '11103', '36058', '7'), +('1', '67', '9', '69126', '32970', '7'), +('1', '67', '15', '68111', '35465', '7'), +('1', '67', '15', '9959', '35352', '7'), +('1', '67', '15', '69160', '31533', '7'), +('1', '67', '15', '69131', '30865', '7'), +('1', '67', '20', '16156', '48977', '7'), +('1', '67', '20', '16097', '36590', '7'), +('1', '67', '20', '69134', '34889', '7'), +('1', '67', '20', '15873', '34386', '7'), +('1', '67', '12', '69252', '32113', '7'), +('1', '67', '12', '25857', '29507', '7'), +('1', '67', '12', '69083', '27890', '7'), +('1', '67', '12', '68852', '25116', '7'), +('1', '67', '18', '69146', '34304', '7'), +('1', '67', '18', '68961', '29101', '7'), +('1', '67', '18', '68779', '26785', '7'), +('1', '67', '18', '28650', '25054', '7'), +('1', '67', '19', '19094', '35414', '7'), +('1', '67', '19', '30569', '32352', '7'), +('1', '67', '19', '69177', '31503', '7'), +('1', '67', '19', '69075', '28920', '7'), +('1', '67', '13', '69052', '115049', '7'), +('1', '67', '13', '69110', '99880', '7'), +('1', '67', '13', '69040', '93292', '7'), +('1', '67', '13', '69156', '92268', '7'), +('1', '67', '14', '69052', '115049', '7'), +('1', '67', '14', '69040', '93292', '7'), +('1', '67', '14', '69156', '92268', '7'), +('1', '67', '14', '22998', '90073', '7'), +('1', '67', '11', '69054', '63141', '7'), +('1', '67', '11', '27818', '50152', '7'), +('1', '67', '11', '68662', '48929', '7'), +('1', '67', '11', '27986', '44627', '7'), +('1', '68', '22', '21805', '0', '7'), +('1', '68', '22', '61948', '0', '7'), +('1', '68', '22', '66397', '0', '7'), +('1', '68', '22', '21807', '0', '7'), +('1', '68', '1', '68949', '48559', '7'), +('1', '68', '1', '7125', '40996', '7'), +('1', '68', '1', '32106', '38252', '7'), +('1', '68', '1', '69166', '33229', '7'), +('1', '68', '2', '28647', '41739', '7'), +('1', '68', '2', '28605', '40596', '7'), +('1', '68', '2', '28648', '40439', '7'), +('1', '68', '2', '69087', '28523', '7'), +('1', '68', '3', '69157', '30961', '7'), +('1', '68', '3', '69069', '28716', '7'), +('1', '68', '3', '69074', '27524', '7'), +('1', '68', '3', '69068', '27161', '7'), +('1', '68', '5', '67625', '33504', '7'), +('1', '68', '5', '69135', '31823', '7'), +('1', '68', '5', '28885', '29887', '7'), +('1', '68', '5', '68808', '29119', '7'), +('1', '68', '8', '69165', '55779', '7'), +('1', '68', '8', '69064', '52517', '7'), +('1', '68', '8', '69072', '50905', '7'), +('1', '68', '8', '26765', '32514', '7'), +('1', '68', '6', '68757', '47840', '7'), +('1', '68', '6', '13674', '44004', '7'), +('1', '68', '6', '19144', '35465', '7'), +('1', '68', '6', '28902', '32679', '7'), +('1', '68', '17', '69150', '36633', '7'), +('1', '68', '17', '28937', '34371', '7'), +('1', '68', '17', '68960', '33643', '7'), +('1', '68', '17', '29457', '31574', '7'), +('1', '68', '7', '16097', '36593', '7'), +('1', '68', '7', '69168', '30329', '7'), +('1', '68', '7', '69079', '28248', '7'), +('1', '68', '7', '68851', '27289', '7'), +('1', '68', '9', '68766', '40617', '7'), +('1', '68', '9', '16097', '36593', '7'), +('1', '68', '9', '11103', '36059', '7'), +('1', '68', '9', '69126', '32974', '7'), +('1', '68', '15', '68111', '35465', '7'), +('1', '68', '15', '9959', '35354', '7'), +('1', '68', '15', '69160', '31536', '7'), +('1', '68', '15', '69131', '30865', '7'), +('1', '68', '20', '16156', '48979', '7'), +('1', '68', '20', '16097', '36593', '7'), +('1', '68', '20', '69134', '34892', '7'), +('1', '68', '20', '15873', '34388', '7'), +('1', '68', '12', '69252', '32116', '7'), +('1', '68', '12', '25857', '29507', '7'), +('1', '68', '12', '69083', '27890', '7'), +('1', '68', '12', '68852', '25119', '7'), +('1', '68', '18', '69146', '34304', '7'), +('1', '68', '18', '68961', '29103', '7'), +('1', '68', '18', '68779', '26789', '7'), +('1', '68', '18', '28650', '25056', '7'), +('1', '68', '19', '19094', '35416', '7'), +('1', '68', '19', '30569', '32353', '7'), +('1', '68', '19', '69177', '31505', '7'), +('1', '68', '19', '69075', '28924', '7'), +('1', '68', '13', '69052', '115668', '7'), +('1', '68', '13', '69110', '100092', '7'), +('1', '68', '13', '69040', '93551', '7'), +('1', '68', '13', '69156', '92384', '7'), +('1', '68', '14', '69052', '115668', '7'), +('1', '68', '14', '69040', '93551', '7'), +('1', '68', '14', '69156', '92384', '7'), +('1', '68', '14', '22998', '90584', '7'), +('1', '68', '11', '69054', '63341', '7'), +('1', '68', '11', '27818', '50202', '7'), +('1', '68', '11', '68662', '48979', '7'), +('1', '68', '11', '27986', '44686', '7'), +('1', '69', '22', '21805', '0', '7'), +('1', '69', '22', '61948', '0', '7'), +('1', '69', '22', '66397', '0', '7'), +('1', '69', '22', '21807', '0', '7'), +('1', '69', '1', '68949', '48562', '7'), +('1', '69', '1', '7125', '40997', '7'), +('1', '69', '1', '32106', '38254', '7'), +('1', '69', '1', '69166', '33231', '7'), +('1', '69', '2', '28647', '41741', '7'), +('1', '69', '2', '28605', '40598', '7'), +('1', '69', '2', '28648', '40439', '7'), +('1', '69', '2', '69087', '28527', '7'), +('1', '69', '3', '69157', '30963', '7'), +('1', '69', '3', '69069', '28719', '7'), +('1', '69', '3', '69074', '27526', '7'), +('1', '69', '3', '69068', '27163', '7'), +('1', '69', '5', '67625', '33506', '7'), +('1', '69', '5', '69135', '31827', '7'), +('1', '69', '5', '28885', '29888', '7'), +('1', '69', '5', '68808', '29121', '7'), +('1', '69', '8', '69165', '55782', '7'), +('1', '69', '8', '69064', '52519', '7'), +('1', '69', '8', '69072', '50907', '7'), +('1', '69', '8', '26765', '32515', '7'), +('1', '69', '6', '68757', '47843', '7'), +('1', '69', '6', '13674', '44006', '7'), +('1', '69', '6', '19144', '35468', '7'), +('1', '69', '6', '28902', '32680', '7'), +('1', '69', '17', '69150', '36635', '7'), +('1', '69', '17', '28937', '34373', '7'), +('1', '69', '17', '68960', '33646', '7'), +('1', '69', '17', '29457', '31574', '7'), +('1', '69', '7', '16097', '36596', '7'), +('1', '69', '7', '69168', '30331', '7'), +('1', '69', '7', '69079', '28249', '7'), +('1', '69', '7', '68851', '27293', '7'), +('1', '69', '9', '68766', '40619', '7'), +('1', '69', '9', '16097', '36596', '7'), +('1', '69', '9', '11103', '36061', '7'), +('1', '69', '9', '69126', '32977', '7'), +('1', '69', '15', '68111', '35465', '7'), +('1', '69', '15', '9959', '35355', '7'), +('1', '69', '15', '69160', '31538', '7'), +('1', '69', '15', '69131', '30865', '7'), +('1', '69', '20', '16156', '48982', '7'), +('1', '69', '20', '16097', '36596', '7'), +('1', '69', '20', '69134', '34894', '7'), +('1', '69', '20', '15873', '34390', '7'), +('1', '69', '12', '69252', '32118', '7'), +('1', '69', '12', '25857', '29507', '7'), +('1', '69', '12', '69083', '27890', '7'), +('1', '69', '12', '68852', '25122', '7'), +('1', '69', '18', '69146', '34304', '7'), +('1', '69', '18', '68961', '29105', '7'), +('1', '69', '18', '68779', '26792', '7'), +('1', '69', '18', '28650', '25059', '7'), +('1', '69', '19', '19094', '35417', '7'), +('1', '69', '19', '30569', '32354', '7'), +('1', '69', '19', '69177', '31508', '7'), +('1', '69', '19', '69075', '28928', '7'), +('1', '69', '13', '69052', '116286', '7'), +('1', '69', '13', '69110', '100277', '7'), +('1', '69', '13', '69040', '93780', '7'), +('1', '69', '13', '69156', '92500', '7'), +('1', '69', '14', '69052', '116286', '7'), +('1', '69', '14', '69040', '93780', '7'), +('1', '69', '14', '69156', '92500', '7'), +('1', '69', '14', '22998', '91123', '7'), +('1', '69', '11', '69054', '63542', '7'), +('1', '69', '11', '27818', '50262', '7'), +('1', '69', '11', '68662', '49037', '7'), +('1', '69', '11', '96532', '44804', '7'), +('1', '70', '22', '21807', '0', '11'), +('1', '70', '22', '21805', '0', '11'), +('1', '70', '22', '61948', '0', '11'), +('1', '70', '22', '12425', '0', '11'), +('1', '70', '1', '39276', '62345', '11'), +('1', '70', '1', '83594', '60705', '11'), +('1', '70', '1', '71624', '52791', '11'), +('1', '70', '1', '68949', '48565', '11'), +('1', '70', '2', '70853', '59683', '11'), +('1', '70', '2', '28647', '41744', '11'), +('1', '70', '2', '28605', '40599', '11'), +('1', '70', '2', '28648', '40439', '11'), +('1', '70', '3', '39218', '57186', '11'), +('1', '70', '3', '47245', '53725', '11'), +('1', '70', '3', '39347', '45029', '11'), +('1', '70', '3', '39361', '43588', '11'), +('1', '70', '5', '39349', '65043', '11'), +('1', '70', '5', '39359', '44401', '11'), +('1', '70', '5', '39262', '40229', '11'), +('1', '70', '5', '39313', '39873', '11'), +('1', '70', '8', '39330', '60957', '11'), +('1', '70', '8', '69165', '55785', '11'), +('1', '70', '8', '69064', '52521', '11'), +('1', '70', '8', '69072', '50910', '11'), +('1', '70', '6', '39337', '65556', '11'), +('1', '70', '6', '70717', '54726', '11'), +('1', '70', '6', '39367', '47918', '11'), +('1', '70', '6', '68757', '47845', '11'), +('1', '70', '17', '83603', '67934', '11'), +('1', '70', '17', '70858', '52265', '11'), +('1', '70', '17', '69150', '36638', '11'), +('1', '70', '17', '70701', '34477', '11'), +('1', '70', '7', '83564', '39616', '11'), +('1', '70', '7', '39267', '39430', '11'), +('1', '70', '7', '70854', '36700', '11'), +('1', '70', '7', '16097', '36599', '11'), +('1', '70', '9', '39335', '44801', '11'), +('1', '70', '9', '51706', '41811', '11'), +('1', '70', '9', '83652', '41666', '11'), +('1', '70', '9', '68766', '40622', '11'), +('1', '70', '15', '39373', '48284', '11'), +('1', '70', '15', '83458', '48267', '11'), +('1', '70', '15', '71117', '48190', '11'), +('1', '70', '15', '70621', '47538', '11'), +('1', '70', '20', '47283', '56931', '11'), +('1', '70', '20', '83533', '52044', '11'), +('1', '70', '20', '16156', '48984', '11'), +('1', '70', '20', '39365', '48525', '11'), +('1', '70', '12', '47212', '51555', '11'), +('1', '70', '12', '71075', '46698', '11'), +('1', '70', '12', '83568', '37269', '11'), +('1', '70', '12', '70856', '35716', '11'), +('1', '70', '18', '83607', '44053', '11'), +('1', '70', '18', '70859', '40996', '11'), +('1', '70', '18', '47200', '34357', '11'), +('1', '70', '18', '69146', '34304', '11'), +('1', '70', '19', '39355', '43669', '11'), +('1', '70', '19', '83572', '39790', '11'), +('1', '70', '19', '69439', '37575', '11'), +('1', '70', '19', '70857', '36409', '11'), +('1', '70', '13', '83639', '150702', '11'), +('1', '70', '13', '47314', '126374', '11'), +('1', '70', '13', '39323', '126291', '11'), +('1', '70', '13', '83576', '124013', '11'), +('1', '70', '14', '83639', '150702', '11'), +('1', '70', '14', '47314', '126374', '11'), +('1', '70', '14', '39323', '126291', '11'), +('1', '70', '14', '83576', '124013', '11'), +('1', '70', '11', '83582', '75632', '11'), +('1', '70', '11', '39331', '72784', '11'), +('1', '70', '11', '47325', '68394', '11'), +('1', '70', '11', '83539', '67470', '11'), +('1', '70', '22', '21805', '0', '10'), +('1', '70', '22', '61948', '0', '10'), +('1', '70', '22', '66397', '0', '10'), +('1', '70', '22', '21807', '0', '10'), +('1', '70', '1', '83594', '60705', '10'), +('1', '70', '1', '71624', '52791', '10'), +('1', '70', '1', '68949', '48565', '10'), +('1', '70', '1', '7125', '40998', '10'), +('1', '70', '2', '70853', '59683', '10'), +('1', '70', '2', '28647', '41744', '10'), +('1', '70', '2', '28605', '40599', '10'), +('1', '70', '2', '28648', '40439', '10'), +('1', '70', '3', '47245', '53725', '10'), +('1', '70', '3', '83658', '42537', '10'), +('1', '70', '3', '83636', '39716', '10'), +('1', '70', '3', '89512', '37990', '10'), +('1', '70', '5', '83599', '38865', '10'), +('1', '70', '5', '83651', '38773', '10'), +('1', '70', '5', '47275', '36651', '10'), +('1', '70', '5', '89308', '36616', '10'), +('1', '70', '8', '69165', '55785', '10'), +('1', '70', '8', '69064', '52521', '10'), +('1', '70', '8', '69072', '50910', '10'), +('1', '70', '8', '70662', '46634', '10'), +('1', '70', '6', '70717', '54726', '10'), +('1', '70', '6', '68757', '47845', '10'), +('1', '70', '6', '13674', '44009', '10'), +('1', '70', '6', '83660', '41484', '10'), +('1', '70', '17', '83603', '67934', '10'), +('1', '70', '17', '70858', '52265', '10'), +('1', '70', '17', '69150', '36638', '10'), +('1', '70', '17', '70701', '34477', '10'), +('1', '70', '7', '83564', '39616', '10'), +('1', '70', '7', '70854', '36700', '10'), +('1', '70', '7', '16097', '36599', '10'), +('1', '70', '7', '47204', '32883', '10'), +('1', '70', '9', '83652', '41666', '10'), +('1', '70', '9', '68766', '40622', '10'), +('1', '70', '9', '16097', '36599', '10'), +('1', '70', '9', '70855', '36075', '10'), +('1', '70', '15', '83458', '48267', '10'), +('1', '70', '15', '71117', '48190', '10'), +('1', '70', '15', '70621', '47538', '10'), +('1', '70', '15', '83661', '41608', '10'), +('1', '70', '20', '47283', '56931', '10'), +('1', '70', '20', '83533', '52044', '10'), +('1', '70', '20', '16156', '48984', '10'), +('1', '70', '20', '70604', '45655', '10'), +('1', '70', '12', '47212', '51555', '10'), +('1', '70', '12', '71075', '46698', '10'), +('1', '70', '12', '83568', '37269', '10'), +('1', '70', '12', '70856', '35716', '10'), +('1', '70', '18', '83607', '44053', '10'), +('1', '70', '18', '70859', '40996', '10'), +('1', '70', '18', '47200', '34357', '10'), +('1', '70', '18', '69146', '34304', '10'), +('1', '70', '19', '83572', '39790', '10'), +('1', '70', '19', '69439', '37575', '10'), +('1', '70', '19', '70857', '36409', '10'), +('1', '70', '19', '19094', '35419', '10'), +('1', '70', '13', '83639', '150702', '10'), +('1', '70', '13', '47314', '126374', '10'), +('1', '70', '13', '83576', '124013', '10'), +('1', '70', '13', '69052', '120624', '10'), +('1', '70', '14', '83639', '150702', '10'), +('1', '70', '14', '47314', '126374', '10'), +('1', '70', '14', '83576', '124013', '10'), +('1', '70', '14', '69052', '120624', '10'), +('1', '70', '11', '83582', '75632', '10'), +('1', '70', '11', '47325', '68394', '10'), +('1', '70', '11', '83539', '67470', '10'), +('1', '70', '11', '69054', '64734', '10'), +('1', '70', '22', '21805', '0', '9'), +('1', '70', '22', '61948', '0', '9'), +('1', '70', '22', '66397', '0', '9'), +('1', '70', '22', '21807', '0', '9'), +('1', '70', '1', '71624', '52791', '9'), +('1', '70', '1', '68949', '48565', '9'), +('1', '70', '1', '7125', '40998', '9'), +('1', '70', '1', '32106', '38257', '9'), +('1', '70', '2', '70853', '59683', '9'), +('1', '70', '2', '28647', '41744', '9'), +('1', '70', '2', '28605', '40599', '9'), +('1', '70', '2', '28648', '40439', '9'), +('1', '70', '3', '47245', '53725', '9'), +('1', '70', '3', '71667', '37089', '9'), +('1', '70', '3', '47299', '35224', '9'), +('1', '70', '3', '47300', '34736', '9'), +('1', '70', '5', '47275', '36651', '9'), +('1', '70', '5', '47273', '35816', '9'), +('1', '70', '5', '47274', '34369', '9'), +('1', '70', '5', '67625', '33508', '9'), +('1', '70', '8', '69165', '55785', '9'), +('1', '70', '8', '69064', '52521', '9'), +('1', '70', '8', '69072', '50910', '9'), +('1', '70', '8', '70662', '46634', '9'), +('1', '70', '6', '70717', '54726', '9'), +('1', '70', '6', '68757', '47845', '9'), +('1', '70', '6', '13674', '44009', '9'), +('1', '70', '6', '70971', '38269', '9'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '70', '17', '70858', '52265', '9'), +('1', '70', '17', '69150', '36638', '9'), +('1', '70', '17', '70701', '34477', '9'), +('1', '70', '17', '28937', '34374', '9'), +('1', '70', '7', '70854', '36700', '9'), +('1', '70', '7', '16097', '36599', '9'), +('1', '70', '7', '47204', '32883', '9'), +('1', '70', '7', '69168', '30334', '9'), +('1', '70', '9', '68766', '40622', '9'), +('1', '70', '9', '16097', '36599', '9'), +('1', '70', '9', '70855', '36075', '9'), +('1', '70', '9', '11103', '36062', '9'), +('1', '70', '15', '71117', '48190', '9'), +('1', '70', '15', '70621', '47538', '9'), +('1', '70', '15', '71608', '37305', '9'), +('1', '70', '15', '68111', '35465', '9'), +('1', '70', '20', '47283', '56931', '9'), +('1', '70', '20', '16156', '48984', '9'), +('1', '70', '20', '70604', '45655', '9'), +('1', '70', '20', '16097', '36599', '9'), +('1', '70', '12', '47212', '51555', '9'), +('1', '70', '12', '71075', '46698', '9'), +('1', '70', '12', '70856', '35716', '9'), +('1', '70', '12', '69252', '32121', '9'), +('1', '70', '18', '70859', '40996', '9'), +('1', '70', '18', '47200', '34357', '9'), +('1', '70', '18', '69146', '34304', '9'), +('1', '70', '18', '71646', '31750', '9'), +('1', '70', '19', '69439', '37575', '9'), +('1', '70', '19', '70857', '36409', '9'), +('1', '70', '19', '19094', '35419', '9'), +('1', '70', '19', '30569', '32355', '9'), +('1', '70', '13', '47314', '126374', '9'), +('1', '70', '13', '69052', '120624', '9'), +('1', '70', '13', '60332', '118743', '9'), +('1', '70', '13', '47312', '116832', '9'), +('1', '70', '14', '47314', '126374', '9'), +('1', '70', '14', '69052', '120624', '9'), +('1', '70', '14', '60332', '118743', '9'), +('1', '70', '14', '47312', '116832', '9'), +('1', '70', '11', '47325', '68394', '9'), +('1', '70', '11', '69054', '64734', '9'), +('1', '70', '11', '47265', '61270', '9'), +('1', '70', '11', '70628', '56466', '9'), +('1', '70', '22', '21805', '0', '8'), +('1', '70', '22', '61948', '0', '8'), +('1', '70', '22', '66397', '0', '8'), +('1', '70', '22', '21807', '0', '8'), +('1', '70', '1', '68949', '48565', '8'), +('1', '70', '1', '7125', '40998', '8'), +('1', '70', '1', '32106', '38257', '8'), +('1', '70', '1', '47287', '36607', '8'), +('1', '70', '2', '70853', '59683', '8'), +('1', '70', '2', '28647', '41744', '8'), +('1', '70', '2', '28605', '40599', '8'), +('1', '70', '2', '28648', '40439', '8'), +('1', '70', '3', '47245', '53725', '8'), +('1', '70', '3', '47299', '35224', '8'), +('1', '70', '3', '47300', '34736', '8'), +('1', '70', '3', '47301', '33342', '8'), +('1', '70', '5', '47275', '36651', '8'), +('1', '70', '5', '47273', '35816', '8'), +('1', '70', '5', '47274', '34369', '8'), +('1', '70', '5', '67625', '33508', '8'), +('1', '70', '8', '69165', '55785', '8'), +('1', '70', '8', '69064', '52521', '8'), +('1', '70', '8', '69072', '50910', '8'), +('1', '70', '8', '70662', '46634', '8'), +('1', '70', '6', '70717', '54726', '8'), +('1', '70', '6', '68757', '47845', '8'), +('1', '70', '6', '13674', '44009', '8'), +('1', '70', '6', '47278', '36195', '8'), +('1', '70', '17', '70858', '52265', '8'), +('1', '70', '17', '69150', '36638', '8'), +('1', '70', '17', '70701', '34477', '8'), +('1', '70', '17', '28937', '34374', '8'), +('1', '70', '7', '70854', '36700', '8'), +('1', '70', '7', '16097', '36599', '8'), +('1', '70', '7', '47204', '32883', '8'), +('1', '70', '7', '69168', '30334', '8'), +('1', '70', '9', '68766', '40622', '8'), +('1', '70', '9', '16097', '36599', '8'), +('1', '70', '9', '70855', '36075', '8'), +('1', '70', '9', '11103', '36062', '8'), +('1', '70', '15', '71117', '48190', '8'), +('1', '70', '15', '70621', '47538', '8'), +('1', '70', '15', '68111', '35465', '8'), +('1', '70', '15', '9959', '35357', '8'), +('1', '70', '20', '47283', '56931', '8'), +('1', '70', '20', '16156', '48984', '8'), +('1', '70', '20', '70604', '45655', '8'), +('1', '70', '20', '16097', '36599', '8'), +('1', '70', '12', '47212', '51555', '8'), +('1', '70', '12', '71075', '46698', '8'), +('1', '70', '12', '70856', '35716', '8'), +('1', '70', '12', '69252', '32121', '8'), +('1', '70', '18', '70859', '40996', '8'), +('1', '70', '18', '47200', '34357', '8'), +('1', '70', '18', '69146', '34304', '8'), +('1', '70', '18', '68961', '29107', '8'), +('1', '70', '19', '69439', '37575', '8'), +('1', '70', '19', '70857', '36409', '8'), +('1', '70', '19', '19094', '35419', '8'), +('1', '70', '19', '30569', '32355', '8'), +('1', '70', '13', '47314', '126055', '8'), +('1', '70', '13', '69052', '119561', '8'), +('1', '70', '13', '60332', '118743', '8'), +('1', '70', '13', '47312', '116584', '8'), +('1', '70', '14', '47314', '126055', '8'), +('1', '70', '14', '69052', '119561', '8'), +('1', '70', '14', '60332', '118743', '8'), +('1', '70', '14', '47312', '116584', '8'), +('1', '70', '11', '47325', '68394', '8'), +('1', '70', '11', '69054', '64450', '8'), +('1', '70', '11', '47265', '61270', '8'), +('1', '70', '11', '70628', '56466', '8'), +('1', '71', '22', '21807', '0', '11'), +('1', '71', '22', '21805', '0', '11'), +('1', '71', '22', '61948', '0', '11'), +('1', '71', '22', '12425', '0', '11'), +('1', '71', '1', '39276', '62348', '11'), +('1', '71', '1', '83594', '60709', '11'), +('1', '71', '1', '71624', '52793', '11'), +('1', '71', '1', '68949', '48569', '11'), +('1', '71', '2', '70853', '59687', '11'), +('1', '71', '2', '28647', '41746', '11'), +('1', '71', '2', '28605', '40600', '11'), +('1', '71', '2', '28648', '40439', '11'), +('1', '71', '3', '39218', '57188', '11'), +('1', '71', '3', '47245', '53727', '11'), +('1', '71', '3', '39347', '45033', '11'), +('1', '71', '3', '39361', '43590', '11'), +('1', '71', '5', '39349', '65046', '11'), +('1', '71', '5', '39359', '44404', '11'), +('1', '71', '5', '39262', '40231', '11'), +('1', '71', '5', '39313', '39877', '11'), +('1', '71', '8', '39330', '60957', '11'), +('1', '71', '8', '69165', '55788', '11'), +('1', '71', '8', '69064', '52523', '11'), +('1', '71', '8', '69072', '50912', '11'), +('1', '71', '6', '39337', '65559', '11'), +('1', '71', '6', '70717', '54729', '11'), +('1', '71', '6', '39367', '47922', '11'), +('1', '71', '6', '68757', '47848', '11'), +('1', '71', '17', '83603', '67939', '11'), +('1', '71', '17', '70858', '51269', '11'), +('1', '71', '17', '69150', '36640', '11'), +('1', '71', '17', '70701', '34481', '11'), +('1', '71', '7', '83564', '39621', '11'), +('1', '71', '7', '39267', '39432', '11'), +('1', '71', '7', '70854', '36705', '11'), +('1', '71', '7', '16097', '36603', '11'), +('1', '71', '9', '39335', '44805', '11'), +('1', '71', '9', '51706', '41815', '11'), +('1', '71', '9', '83652', '41669', '11'), +('1', '71', '9', '68766', '40625', '11'), +('1', '71', '15', '39373', '48288', '11'), +('1', '71', '15', '83458', '48271', '11'), +('1', '71', '15', '71117', '48194', '11'), +('1', '71', '15', '70621', '47541', '11'), +('1', '71', '20', '47283', '56933', '11'), +('1', '71', '20', '83533', '52048', '11'), +('1', '71', '20', '16156', '48987', '11'), +('1', '71', '20', '39365', '48530', '11'), +('1', '71', '12', '47212', '51558', '11'), +('1', '71', '12', '71075', '46701', '11'), +('1', '71', '12', '83568', '37274', '11'), +('1', '71', '12', '70856', '35720', '11'), +('1', '71', '18', '83607', '44057', '11'), +('1', '71', '18', '70859', '41000', '11'), +('1', '71', '18', '47200', '34360', '11'), +('1', '71', '18', '69146', '34304', '11'), +('1', '71', '19', '39355', '43673', '11'), +('1', '71', '19', '83572', '39796', '11'), +('1', '71', '19', '69439', '37577', '11'), +('1', '71', '19', '70857', '36409', '11'), +('1', '71', '13', '83639', '151444', '11'), +('1', '71', '13', '47314', '126677', '11'), +('1', '71', '13', '39323', '126595', '11'), +('1', '71', '13', '83576', '124300', '11'), +('1', '71', '14', '83639', '151444', '11'), +('1', '71', '14', '47314', '126677', '11'), +('1', '71', '14', '39323', '126595', '11'), +('1', '71', '14', '83576', '124300', '11'), +('1', '71', '11', '83582', '75710', '11'), +('1', '71', '11', '39331', '72841', '11'), +('1', '71', '11', '47325', '68462', '11'), +('1', '71', '11', '83539', '67600', '11'), +('1', '72', '22', '21807', '0', '11'), +('1', '72', '22', '21805', '0', '11'), +('1', '72', '22', '61948', '0', '11'), +('1', '72', '22', '12425', '0', '11'), +('1', '72', '1', '39276', '62351', '11'), +('1', '72', '1', '83594', '60712', '11'), +('1', '72', '1', '71624', '52796', '11'), +('1', '72', '1', '68949', '48572', '11'), +('1', '72', '2', '70853', '59691', '11'), +('1', '72', '2', '28647', '41749', '11'), +('1', '72', '2', '28605', '40602', '11'), +('1', '72', '2', '28648', '40439', '11'), +('1', '72', '3', '39218', '57190', '11'), +('1', '72', '3', '47245', '53730', '11'), +('1', '72', '3', '39347', '45038', '11'), +('1', '72', '3', '39361', '43593', '11'), +('1', '72', '5', '39349', '65049', '11'), +('1', '72', '5', '39359', '44407', '11'), +('1', '72', '5', '39262', '40233', '11'), +('1', '72', '5', '39313', '39881', '11'), +('1', '72', '8', '39330', '60957', '11'), +('1', '72', '8', '69165', '55791', '11'), +('1', '72', '8', '69064', '52525', '11'), +('1', '72', '8', '69072', '50915', '11'), +('1', '72', '6', '39337', '65562', '11'), +('1', '72', '6', '70717', '54733', '11'), +('1', '72', '6', '39367', '47926', '11'), +('1', '72', '6', '68757', '47851', '11'), +('1', '72', '17', '83603', '67944', '11'), +('1', '72', '17', '70858', '50273', '11'), +('1', '72', '17', '69150', '36643', '11'), +('1', '72', '17', '70701', '34486', '11'), +('1', '72', '7', '83564', '39627', '11'), +('1', '72', '7', '39267', '39435', '11'), +('1', '72', '7', '70854', '36710', '11'), +('1', '72', '7', '16097', '36606', '11'), +('1', '72', '9', '39335', '44810', '11'), +('1', '72', '9', '51706', '41819', '11'), +('1', '72', '9', '83652', '41672', '11'), +('1', '72', '9', '68766', '40627', '11'), +('1', '72', '15', '39373', '48293', '11'), +('1', '72', '15', '83458', '48274', '11'), +('1', '72', '15', '71117', '48199', '11'), +('1', '72', '15', '70621', '47543', '11'), +('1', '72', '20', '47283', '56935', '11'), +('1', '72', '20', '83533', '52051', '11'), +('1', '72', '20', '16156', '48990', '11'), +('1', '72', '20', '39365', '48534', '11'), +('1', '72', '12', '47212', '51560', '11'), +('1', '72', '12', '71075', '46703', '11'), +('1', '72', '12', '83568', '37279', '11'), +('1', '72', '12', '70856', '35724', '11'), +('1', '72', '18', '83607', '44062', '11'), +('1', '72', '18', '70859', '41004', '11'), +('1', '72', '18', '47200', '34362', '11'), +('1', '72', '18', '69146', '34304', '11'), +('1', '72', '19', '39355', '43678', '11'), +('1', '72', '19', '83572', '39801', '11'), +('1', '72', '19', '69439', '37579', '11'), +('1', '72', '19', '70857', '36409', '11'), +('1', '72', '13', '83639', '152186', '11'), +('1', '72', '13', '47314', '126980', '11'), +('1', '72', '13', '39323', '126899', '11'), +('1', '72', '13', '83576', '124586', '11'), +('1', '72', '14', '83639', '152186', '11'), +('1', '72', '14', '47314', '126980', '11'), +('1', '72', '14', '39323', '126899', '11'), +('1', '72', '14', '83576', '124586', '11'), +('1', '72', '11', '83582', '75789', '11'), +('1', '72', '11', '39331', '72907', '11'), +('1', '72', '11', '47325', '68530', '11'), +('1', '72', '11', '83539', '67739', '11'), +('1', '73', '22', '21807', '0', '11'), +('1', '73', '22', '21805', '0', '11'), +('1', '73', '22', '61948', '0', '11'), +('1', '73', '22', '12425', '0', '11'), +('1', '73', '1', '39276', '62354', '11'), +('1', '73', '1', '83594', '60715', '11'), +('1', '73', '1', '71624', '52799', '11'), +('1', '73', '1', '68949', '48575', '11'), +('1', '73', '2', '70853', '59695', '11'), +('1', '73', '2', '28647', '41751', '11'), +('1', '73', '2', '28605', '40603', '11'), +('1', '73', '2', '28648', '40439', '11'), +('1', '73', '3', '39218', '57192', '11'), +('1', '73', '3', '47245', '53732', '11'), +('1', '73', '3', '39347', '45043', '11'), +('1', '73', '3', '39361', '43596', '11'), +('1', '73', '5', '39349', '65053', '11'), +('1', '73', '5', '39359', '44410', '11'), +('1', '73', '5', '39262', '40236', '11'), +('1', '73', '5', '39313', '39884', '11'), +('1', '73', '8', '39330', '60957', '11'), +('1', '73', '8', '69165', '55795', '11'), +('1', '73', '8', '69064', '52526', '11'), +('1', '73', '8', '69072', '50918', '11'), +('1', '73', '6', '39337', '65565', '11'), +('1', '73', '6', '70717', '54736', '11'), +('1', '73', '6', '39367', '47930', '11'), +('1', '73', '6', '68757', '47853', '11'), +('1', '73', '17', '83603', '67948', '11'), +('1', '73', '17', '70858', '49277', '11'), +('1', '73', '17', '69150', '36645', '11'), +('1', '73', '17', '70701', '34491', '11'), +('1', '73', '7', '83564', '39632', '11'), +('1', '73', '7', '39267', '39437', '11'), +('1', '73', '7', '70854', '36715', '11'), +('1', '73', '7', '16097', '36609', '11'), +('1', '73', '9', '39335', '44815', '11'), +('1', '73', '9', '51706', '41823', '11'), +('1', '73', '9', '83652', '41675', '11'), +('1', '73', '9', '68766', '40630', '11'), +('1', '73', '15', '39373', '48297', '11'), +('1', '73', '15', '83458', '48277', '11'), +('1', '73', '15', '71117', '48203', '11'), +('1', '73', '15', '70621', '47546', '11'), +('1', '73', '20', '47283', '56937', '11'), +('1', '73', '20', '83533', '52054', '11'), +('1', '73', '20', '16156', '48992', '11'), +('1', '73', '20', '39365', '48539', '11'), +('1', '73', '12', '47212', '51563', '11'), +('1', '73', '12', '71075', '46706', '11'), +('1', '73', '12', '83568', '37284', '11'), +('1', '73', '12', '70856', '35728', '11'), +('1', '73', '18', '83607', '44067', '11'), +('1', '73', '18', '70859', '41008', '11'), +('1', '73', '18', '47200', '34365', '11'), +('1', '73', '18', '69146', '34304', '11'), +('1', '73', '19', '39355', '43683', '11'), +('1', '73', '19', '83572', '39806', '11'), +('1', '73', '19', '69439', '37580', '11'), +('1', '73', '19', '70857', '36409', '11'), +('1', '73', '13', '83639', '152928', '11'), +('1', '73', '13', '47314', '127284', '11'), +('1', '73', '13', '39323', '127204', '11'), +('1', '73', '13', '83576', '124873', '11'), +('1', '73', '14', '83639', '152928', '11'), +('1', '73', '14', '47314', '127284', '11'), +('1', '73', '14', '39323', '127204', '11'), +('1', '73', '14', '83576', '124873', '11'), +('1', '73', '11', '83582', '75868', '11'), +('1', '73', '11', '39331', '72973', '11'), +('1', '73', '11', '47325', '68598', '11'), +('1', '73', '11', '83539', '67868', '11'), +('1', '74', '22', '21807', '0', '11'), +('1', '74', '22', '21805', '0', '11'), +('1', '74', '22', '61948', '0', '11'), +('1', '74', '22', '12425', '0', '11'), +('1', '74', '1', '39276', '62357', '11'), +('1', '74', '1', '83594', '60719', '11'), +('1', '74', '1', '71624', '52802', '11'), +('1', '74', '1', '68949', '48579', '11'), +('1', '74', '2', '70853', '59699', '11'), +('1', '74', '2', '28647', '41754', '11'), +('1', '74', '2', '28605', '40604', '11'), +('1', '74', '2', '28648', '40439', '11'), +('1', '74', '3', '39218', '57194', '11'), +('1', '74', '3', '47245', '53735', '11'), +('1', '74', '3', '39347', '45047', '11'), +('1', '74', '3', '39361', '43598', '11'), +('1', '74', '5', '39349', '65056', '11'), +('1', '74', '5', '39359', '44414', '11'), +('1', '74', '5', '39262', '40238', '11'), +('1', '74', '5', '39313', '39889', '11'), +('1', '74', '8', '39330', '60957', '11'), +('1', '74', '8', '69165', '55798', '11'), +('1', '74', '8', '69064', '52529', '11'), +('1', '74', '8', '69072', '50920', '11'), +('1', '74', '6', '39337', '65569', '11'), +('1', '74', '6', '70717', '54739', '11'), +('1', '74', '6', '39367', '47934', '11'), +('1', '74', '6', '68757', '47856', '11'), +('1', '74', '17', '83603', '67953', '11'), +('1', '74', '17', '70858', '48281', '11'), +('1', '74', '17', '69150', '36648', '11'), +('1', '74', '17', '70701', '34495', '11'), +('1', '74', '7', '83564', '39637', '11'), +('1', '74', '7', '39267', '39440', '11'), +('1', '74', '7', '70854', '36721', '11'), +('1', '74', '7', '16097', '36613', '11'), +('1', '74', '9', '39335', '44819', '11'), +('1', '74', '9', '51706', '41827', '11'), +('1', '74', '9', '83652', '41679', '11'), +('1', '74', '9', '68766', '40633', '11'), +('1', '74', '15', '39373', '48302', '11'), +('1', '74', '15', '83458', '48281', '11'), +('1', '74', '15', '71117', '48208', '11'), +('1', '74', '15', '70621', '47549', '11'), +('1', '74', '20', '47283', '56939', '11'), +('1', '74', '20', '83533', '52058', '11'), +('1', '74', '20', '16156', '48995', '11'), +('1', '74', '20', '39365', '48544', '11'), +('1', '74', '12', '47212', '51566', '11'), +('1', '74', '12', '71075', '46709', '11'), +('1', '74', '12', '83568', '37290', '11'), +('1', '74', '12', '70856', '35732', '11'), +('1', '74', '18', '83607', '44071', '11'), +('1', '74', '18', '70859', '41012', '11'), +('1', '74', '18', '47200', '34368', '11'), +('1', '74', '18', '69146', '34304', '11'), +('1', '74', '19', '39355', '43687', '11'), +('1', '74', '19', '83572', '39812', '11'), +('1', '74', '19', '69439', '37583', '11'), +('1', '74', '19', '70857', '36409', '11'), +('1', '74', '13', '83639', '153670', '11'), +('1', '74', '13', '47314', '127587', '11'), +('1', '74', '13', '39323', '127508', '11'), +('1', '74', '13', '83576', '125160', '11'), +('1', '74', '14', '83639', '153670', '11'), +('1', '74', '14', '47314', '127587', '11'), +('1', '74', '14', '39323', '127508', '11'), +('1', '74', '14', '83576', '125160', '11'), +('1', '74', '11', '83582', '75947', '11'), +('1', '74', '11', '39331', '73030', '11'), +('1', '74', '11', '47325', '68666', '11'), +('1', '74', '11', '83539', '67998', '11'), +('1', '75', '22', '12425', '0', '13'), +('1', '75', '22', '21807', '0', '13'), +('1', '75', '22', '21805', '0', '13'), +('1', '75', '22', '39342', '0', '13'), +('1', '75', '1', '80659', '64662', '13'), +('1', '75', '1', '80676', '63769', '13'), +('1', '75', '1', '39276', '62360', '13'), +('1', '75', '1', '83594', '60722', '13'), +('1', '75', '2', '70853', '59703', '13'), +('1', '75', '2', '53361', '52376', '13'), +('1', '75', '2', '28647', '41757', '13'), +('1', '75', '2', '28605', '40606', '13'), +('1', '75', '3', '80636', '60835', '13'), +('1', '75', '3', '39218', '57196', '13'), +('1', '75', '3', '47245', '53737', '13'), +('1', '75', '3', '46924', '51870', '13'), +('1', '75', '5', '46867', '76199', '13'), +('1', '75', '5', '46918', '75620', '13'), +('1', '75', '5', '80669', '65723', '13'), +('1', '75', '5', '39349', '65059', '13'), +('1', '75', '8', '46885', '80890', '13'), +('1', '75', '8', '80687', '67060', '13'), +('1', '75', '8', '46814', '64069', '13'), +('1', '75', '8', '39330', '60957', '13'), +('1', '75', '6', '80638', '83508', '13'), +('1', '75', '6', '39337', '65572', '13'), +('1', '75', '6', '46884', '56727', '13'), +('1', '75', '6', '46933', '56621', '13'), +('1', '75', '17', '83603', '67958', '13'), +('1', '75', '17', '70858', '47285', '13'), +('1', '75', '17', '46809', '45663', '13'), +('1', '75', '17', '69150', '36651', '13'), +('1', '75', '7', '83564', '39643', '13'), +('1', '75', '7', '39267', '39442', '13'), +('1', '75', '7', '70854', '36726', '13'), +('1', '75', '7', '16097', '36616', '13'), +('1', '75', '9', '46887', '57135', '13'), +('1', '75', '9', '53363', '51815', '13'), +('1', '75', '9', '39335', '44824', '13'), +('1', '75', '9', '51706', '41831', '13'), +('1', '75', '15', '79909', '67961', '13'), +('1', '75', '15', '80671', '65326', '13'), +('1', '75', '15', '80686', '64440', '13'), +('1', '75', '15', '80657', '62657', '13'), +('1', '75', '20', '80688', '88770', '13'), +('1', '75', '20', '46935', '58826', '13'), +('1', '75', '20', '47283', '56941', '13'), +('1', '75', '20', '80620', '56086', '13'), +('1', '75', '12', '53364', '74436', '13'), +('1', '75', '12', '47212', '51568', '13'), +('1', '75', '12', '71075', '46711', '13'), +('1', '75', '12', '83568', '37295', '13'), +('1', '75', '18', '83607', '44076', '13'), +('1', '75', '18', '46826', '43198', '13'), +('1', '75', '18', '70859', '41016', '13'), +('1', '75', '18', '47200', '34370', '13'), +('1', '75', '19', '53365', '53411', '13'), +('1', '75', '19', '39355', '43692', '13'), +('1', '75', '19', '83572', '39817', '13'), +('1', '75', '19', '69439', '37585', '13'), +('1', '75', '13', '46856', '178642', '13'), +('1', '75', '13', '46854', '176545', '13'), +('1', '75', '13', '80674', '176203', '13'), +('1', '75', '13', '80652', '171424', '13'), +('1', '75', '14', '46856', '178642', '13'), +('1', '75', '14', '46854', '176545', '13'), +('1', '75', '14', '80674', '176203', '13'), +('1', '75', '14', '80652', '171424', '13'), +('1', '75', '11', '80655', '106141', '13'), +('1', '75', '11', '46930', '99795', '13'), +('1', '75', '11', '83582', '76026', '13'), +('1', '75', '11', '39331', '73096', '13'), +('1', '75', '22', '12425', '0', '12'), +('1', '75', '22', '21807', '0', '12'), +('1', '75', '22', '21805', '0', '12'), +('1', '75', '22', '39342', '0', '12'), +('1', '75', '1', '39276', '62360', '12'), +('1', '75', '1', '83594', '60722', '12'), +('1', '75', '1', '46931', '56770', '12'), +('1', '75', '1', '71624', '52805', '12'), +('1', '75', '2', '70853', '59703', '12'), +('1', '75', '2', '53361', '52376', '12'), +('1', '75', '2', '28647', '41757', '12'), +('1', '75', '2', '28605', '40606', '12'), +('1', '75', '3', '39218', '57196', '12'), +('1', '75', '3', '47245', '53737', '12'), +('1', '75', '3', '46924', '51870', '12'), +('1', '75', '3', '46873', '51612', '12'), +('1', '75', '5', '46867', '76199', '12'), +('1', '75', '5', '46918', '75620', '12'), +('1', '75', '5', '39349', '65059', '12'), +('1', '75', '5', '46934', '55666', '12'), +('1', '75', '8', '46885', '80890', '12'), +('1', '75', '8', '46814', '64069', '12'), +('1', '75', '8', '39330', '60957', '12'), +('1', '75', '8', '69165', '55801', '12'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '75', '6', '39337', '65572', '12'), +('1', '75', '6', '46884', '56727', '12'), +('1', '75', '6', '46933', '56621', '12'), +('1', '75', '6', '46883', '55717', '12'), +('1', '75', '17', '83603', '67958', '12'), +('1', '75', '17', '70858', '47285', '12'), +('1', '75', '17', '46809', '45663', '12'), +('1', '75', '17', '69150', '36651', '12'), +('1', '75', '7', '83564', '39643', '12'), +('1', '75', '7', '39267', '39442', '12'), +('1', '75', '7', '70854', '36726', '12'), +('1', '75', '7', '16097', '36616', '12'), +('1', '75', '9', '46887', '57135', '12'), +('1', '75', '9', '53363', '51815', '12'), +('1', '75', '9', '39335', '44824', '12'), +('1', '75', '9', '51706', '41831', '12'), +('1', '75', '15', '46881', '58057', '12'), +('1', '75', '15', '46863', '54525', '12'), +('1', '75', '15', '46916', '51678', '12'), +('1', '75', '15', '46893', '50487', '12'), +('1', '75', '20', '46935', '58826', '12'), +('1', '75', '20', '47283', '56941', '12'), +('1', '75', '20', '46919', '52302', '12'), +('1', '75', '20', '83533', '52061', '12'), +('1', '75', '12', '53364', '74436', '12'), +('1', '75', '12', '47212', '51568', '12'), +('1', '75', '12', '71075', '46711', '12'), +('1', '75', '12', '83568', '37295', '12'), +('1', '75', '18', '83607', '44076', '12'), +('1', '75', '18', '46826', '43198', '12'), +('1', '75', '18', '70859', '41016', '12'), +('1', '75', '18', '47200', '34370', '12'), +('1', '75', '19', '53365', '53411', '12'), +('1', '75', '19', '39355', '43692', '12'), +('1', '75', '19', '83572', '39817', '12'), +('1', '75', '19', '69439', '37585', '12'), +('1', '75', '13', '46856', '178642', '12'), +('1', '75', '13', '46854', '176545', '12'), +('1', '75', '13', '83639', '157536', '12'), +('1', '75', '13', '46928', '156757', '12'), +('1', '75', '14', '46856', '178642', '12'), +('1', '75', '14', '46854', '176545', '12'), +('1', '75', '14', '83639', '157536', '12'), +('1', '75', '14', '46928', '156757', '12'), +('1', '75', '11', '46930', '99795', '12'), +('1', '75', '11', '83582', '76026', '12'), +('1', '75', '11', '39331', '73096', '12'), +('1', '75', '11', '46849', '72223', '12'), +('1', '76', '22', '12425', '0', '13'), +('1', '76', '22', '21807', '0', '13'), +('1', '76', '22', '21805', '0', '13'), +('1', '76', '22', '39342', '0', '13'), +('1', '76', '1', '80659', '64667', '13'), +('1', '76', '1', '80676', '63769', '13'), +('1', '76', '1', '39276', '62363', '13'), +('1', '76', '1', '83594', '60725', '13'), +('1', '76', '2', '70853', '59707', '13'), +('1', '76', '2', '53361', '52379', '13'), +('1', '76', '2', '28647', '41759', '13'), +('1', '76', '2', '28605', '40607', '13'), +('1', '76', '3', '80636', '60835', '13'), +('1', '76', '3', '39218', '57198', '13'), +('1', '76', '3', '47245', '53739', '13'), +('1', '76', '3', '46924', '51874', '13'), +('1', '76', '5', '46867', '76203', '13'), +('1', '76', '5', '46918', '75624', '13'), +('1', '76', '5', '80669', '65728', '13'), +('1', '76', '5', '39349', '65063', '13'), +('1', '76', '8', '46885', '80895', '13'), +('1', '76', '8', '80687', '67064', '13'), +('1', '76', '8', '46814', '64071', '13'), +('1', '76', '8', '39330', '60957', '13'), +('1', '76', '6', '80638', '83513', '13'), +('1', '76', '6', '39337', '65575', '13'), +('1', '76', '6', '46884', '56732', '13'), +('1', '76', '6', '46933', '56625', '13'), +('1', '76', '17', '83603', '67962', '13'), +('1', '76', '17', '70858', '46289', '13'), +('1', '76', '17', '46809', '45665', '13'), +('1', '76', '17', '69150', '36653', '13'), +('1', '76', '7', '83564', '39648', '13'), +('1', '76', '7', '39267', '39445', '13'), +('1', '76', '7', '70854', '36731', '13'), +('1', '76', '7', '16097', '36619', '13'), +('1', '76', '9', '46887', '57139', '13'), +('1', '76', '9', '53363', '51819', '13'), +('1', '76', '9', '39335', '44829', '13'), +('1', '76', '9', '51706', '41835', '13'), +('1', '76', '15', '79909', '67965', '13'), +('1', '76', '15', '80671', '65331', '13'), +('1', '76', '15', '80686', '64444', '13'), +('1', '76', '15', '80657', '62657', '13'), +('1', '76', '20', '80688', '88774', '13'), +('1', '76', '20', '46935', '58831', '13'), +('1', '76', '20', '47283', '56943', '13'), +('1', '76', '20', '80620', '56090', '13'), +('1', '76', '12', '53364', '74439', '13'), +('1', '76', '12', '47212', '51571', '13'), +('1', '76', '12', '71075', '46714', '13'), +('1', '76', '12', '83568', '37300', '13'), +('1', '76', '18', '83607', '44081', '13'), +('1', '76', '18', '46826', '43200', '13'), +('1', '76', '18', '70859', '41020', '13'), +('1', '76', '18', '47200', '34373', '13'), +('1', '76', '19', '53365', '53416', '13'), +('1', '76', '19', '39355', '43697', '13'), +('1', '76', '19', '83572', '39822', '13'), +('1', '76', '19', '69439', '37586', '13'), +('1', '76', '13', '46856', '179412', '13'), +('1', '76', '13', '46854', '177287', '13'), +('1', '76', '13', '80674', '176432', '13'), +('1', '76', '13', '80652', '171654', '13'), +('1', '76', '14', '46856', '179412', '13'), +('1', '76', '14', '46854', '177287', '13'), +('1', '76', '14', '80674', '176432', '13'), +('1', '76', '14', '80652', '171654', '13'), +('1', '76', '11', '80655', '106239', '13'), +('1', '76', '11', '46930', '99893', '13'), +('1', '76', '11', '83582', '76105', '13'), +('1', '76', '11', '39331', '73162', '13'), +('1', '77', '22', '12425', '0', '13'), +('1', '77', '22', '21807', '0', '13'), +('1', '77', '22', '21805', '0', '13'), +('1', '77', '22', '39342', '0', '13'), +('1', '77', '1', '80659', '64672', '13'), +('1', '77', '1', '80676', '63769', '13'), +('1', '77', '1', '39276', '62366', '13'), +('1', '77', '1', '83594', '60729', '13'), +('1', '77', '2', '70853', '59711', '13'), +('1', '77', '2', '53361', '52383', '13'), +('1', '77', '2', '28647', '41762', '13'), +('1', '77', '2', '28605', '40608', '13'), +('1', '77', '3', '80636', '60835', '13'), +('1', '77', '3', '39218', '57200', '13'), +('1', '77', '3', '47245', '53742', '13'), +('1', '77', '3', '46924', '51879', '13'), +('1', '77', '5', '46867', '76207', '13'), +('1', '77', '5', '46918', '75629', '13'), +('1', '77', '5', '80669', '65733', '13'), +('1', '77', '5', '39349', '65066', '13'), +('1', '77', '8', '46885', '80900', '13'), +('1', '77', '8', '80687', '67069', '13'), +('1', '77', '8', '46814', '64073', '13'), +('1', '77', '8', '39330', '60957', '13'), +('1', '77', '6', '80638', '83517', '13'), +('1', '77', '6', '39337', '65579', '13'), +('1', '77', '6', '46884', '56737', '13'), +('1', '77', '6', '46933', '56628', '13'), +('1', '77', '17', '83603', '67967', '13'), +('1', '77', '17', '46809', '45668', '13'), +('1', '77', '17', '70858', '45293', '13'), +('1', '77', '17', '69150', '36656', '13'), +('1', '77', '7', '83564', '39653', '13'), +('1', '77', '7', '39267', '39447', '13'), +('1', '77', '7', '70854', '36737', '13'), +('1', '77', '7', '16097', '36623', '13'), +('1', '77', '9', '46887', '57143', '13'), +('1', '77', '9', '53363', '51822', '13'), +('1', '77', '9', '39335', '44833', '13'), +('1', '77', '9', '51706', '41839', '13'), +('1', '77', '15', '79909', '67969', '13'), +('1', '77', '15', '80671', '65336', '13'), +('1', '77', '15', '80686', '64449', '13'), +('1', '77', '15', '80657', '62657', '13'), +('1', '77', '20', '80688', '88779', '13'), +('1', '77', '20', '46935', '58836', '13'), +('1', '77', '20', '47283', '56946', '13'), +('1', '77', '20', '80620', '56094', '13'), +('1', '77', '12', '53364', '74444', '13'), +('1', '77', '12', '47212', '51574', '13'), +('1', '77', '12', '71075', '46717', '13'), +('1', '77', '12', '83568', '37306', '13'), +('1', '77', '18', '83607', '44085', '13'), +('1', '77', '18', '46826', '43202', '13'), +('1', '77', '18', '70859', '41024', '13'), +('1', '77', '18', '47200', '34376', '13'), +('1', '77', '19', '53365', '53420', '13'), +('1', '77', '19', '39355', '43701', '13'), +('1', '77', '19', '83572', '39828', '13'), +('1', '77', '19', '69439', '37589', '13'), +('1', '77', '13', '46856', '180182', '13'), +('1', '77', '13', '46854', '178057', '13'), +('1', '77', '13', '80674', '176634', '13'), +('1', '77', '13', '80652', '171856', '13'), +('1', '77', '14', '46856', '180182', '13'), +('1', '77', '14', '46854', '178057', '13'), +('1', '77', '14', '80674', '176634', '13'), +('1', '77', '14', '80652', '171856', '13'), +('1', '77', '11', '80655', '106336', '13'), +('1', '77', '11', '46930', '99991', '13'), +('1', '77', '11', '83582', '76184', '13'), +('1', '77', '11', '39331', '73219', '13'), +('1', '78', '22', '12425', '0', '13'), +('1', '78', '22', '21807', '0', '13'), +('1', '78', '22', '21805', '0', '13'), +('1', '78', '22', '39342', '0', '13'), +('1', '78', '1', '80659', '64676', '13'), +('1', '78', '1', '80676', '63769', '13'), +('1', '78', '1', '39276', '62369', '13'), +('1', '78', '1', '83594', '60732', '13'), +('1', '78', '2', '70853', '59715', '13'), +('1', '78', '2', '53361', '52386', '13'), +('1', '78', '2', '28647', '41765', '13'), +('1', '78', '2', '28605', '40610', '13'), +('1', '78', '3', '80636', '60835', '13'), +('1', '78', '3', '39218', '57202', '13'), +('1', '78', '3', '47245', '53744', '13'), +('1', '78', '3', '46924', '51884', '13'), +('1', '78', '5', '46867', '76210', '13'), +('1', '78', '5', '46918', '75634', '13'), +('1', '78', '5', '80669', '65738', '13'), +('1', '78', '5', '39349', '65069', '13'), +('1', '78', '8', '46885', '80905', '13'), +('1', '78', '8', '80687', '67074', '13'), +('1', '78', '8', '46814', '64075', '13'), +('1', '78', '8', '39330', '60957', '13'), +('1', '78', '6', '80638', '83521', '13'), +('1', '78', '6', '39337', '65582', '13'), +('1', '78', '6', '46884', '56743', '13'), +('1', '78', '6', '46933', '56631', '13'), +('1', '78', '17', '83603', '67972', '13'), +('1', '78', '17', '46809', '45671', '13'), +('1', '78', '17', '70858', '44297', '13'), +('1', '78', '17', '69150', '36659', '13'), +('1', '78', '7', '83564', '39659', '13'), +('1', '78', '7', '39267', '39450', '13'), +('1', '78', '7', '70854', '36742', '13'), +('1', '78', '7', '16097', '36626', '13'), +('1', '78', '9', '46887', '57146', '13'), +('1', '78', '9', '53363', '51825', '13'), +('1', '78', '9', '39335', '44838', '13'), +('1', '78', '9', '51706', '41843', '13'), +('1', '78', '15', '79909', '67973', '13'), +('1', '78', '15', '80671', '65341', '13'), +('1', '78', '15', '80686', '64454', '13'), +('1', '78', '15', '80657', '62657', '13'), +('1', '78', '20', '80688', '88784', '13'), +('1', '78', '20', '46935', '58842', '13'), +('1', '78', '20', '47283', '56948', '13'), +('1', '78', '20', '80620', '56098', '13'), +('1', '78', '12', '53364', '74448', '13'), +('1', '78', '12', '47212', '51576', '13'), +('1', '78', '12', '71075', '46719', '13'), +('1', '78', '12', '83568', '37311', '13'), +('1', '78', '18', '83607', '44090', '13'), +('1', '78', '18', '46826', '43204', '13'), +('1', '78', '18', '70859', '41028', '13'), +('1', '78', '18', '47200', '34378', '13'), +('1', '78', '19', '53365', '53425', '13'), +('1', '78', '19', '39355', '43706', '13'), +('1', '78', '19', '83572', '39833', '13'), +('1', '78', '19', '69439', '37591', '13'), +('1', '78', '13', '46856', '180952', '13'), +('1', '78', '13', '46854', '178827', '13'), +('1', '78', '13', '80674', '176864', '13'), +('1', '78', '13', '80652', '172086', '13'), +('1', '78', '14', '46856', '180952', '13'), +('1', '78', '14', '46854', '178827', '13'), +('1', '78', '14', '80674', '176864', '13'), +('1', '78', '14', '80652', '172086', '13'), +('1', '78', '11', '80655', '106434', '13'), +('1', '78', '11', '46930', '100080', '13'), +('1', '78', '11', '83582', '76263', '13'), +('1', '78', '11', '39331', '73285', '13'), +('1', '79', '22', '12425', '0', '13'), +('1', '79', '22', '21807', '0', '13'), +('1', '79', '22', '21805', '0', '13'), +('1', '79', '22', '39342', '0', '13'), +('1', '79', '1', '80659', '64681', '13'), +('1', '79', '1', '80676', '63769', '13'), +('1', '79', '1', '39276', '62372', '13'), +('1', '79', '1', '83594', '60735', '13'), +('1', '79', '2', '70853', '59719', '13'), +('1', '79', '2', '53361', '52390', '13'), +('1', '79', '2', '28647', '41768', '13'), +('1', '79', '2', '28605', '40611', '13'), +('1', '79', '3', '80636', '60835', '13'), +('1', '79', '3', '39218', '57204', '13'), +('1', '79', '3', '47245', '53747', '13'), +('1', '79', '3', '46924', '51889', '13'), +('1', '79', '5', '46867', '76214', '13'), +('1', '79', '5', '46918', '75638', '13'), +('1', '79', '5', '80669', '65743', '13'), +('1', '79', '5', '39349', '65073', '13'), +('1', '79', '8', '46885', '80910', '13'), +('1', '79', '8', '80687', '67079', '13'), +('1', '79', '8', '46814', '64077', '13'), +('1', '79', '8', '39330', '60957', '13'), +('1', '79', '6', '80638', '83526', '13'), +('1', '79', '6', '39337', '65586', '13'), +('1', '79', '6', '46884', '56748', '13'), +('1', '79', '6', '46933', '56635', '13'), +('1', '79', '17', '83603', '67976', '13'), +('1', '79', '17', '46809', '45674', '13'), +('1', '79', '17', '70858', '44301', '13'), +('1', '79', '17', '69150', '36662', '13'), +('1', '79', '7', '83564', '39664', '13'), +('1', '79', '7', '39267', '39452', '13'), +('1', '79', '7', '70854', '36748', '13'), +('1', '79', '7', '16097', '36629', '13'), +('1', '79', '9', '46887', '57150', '13'), +('1', '79', '9', '53363', '51829', '13'), +('1', '79', '9', '39335', '44843', '13'), +('1', '79', '9', '51706', '41847', '13'), +('1', '79', '15', '79909', '67977', '13'), +('1', '79', '15', '80671', '65346', '13'), +('1', '79', '15', '80686', '64459', '13'), +('1', '79', '15', '80657', '62657', '13'), +('1', '79', '20', '80688', '88789', '13'), +('1', '79', '20', '46935', '58847', '13'), +('1', '79', '20', '47283', '56950', '13'), +('1', '79', '20', '80620', '56102', '13'), +('1', '79', '12', '53364', '74452', '13'), +('1', '79', '12', '47212', '51579', '13'), +('1', '79', '12', '71075', '46722', '13'), +('1', '79', '12', '83568', '37317', '13'), +('1', '79', '18', '83607', '44095', '13'), +('1', '79', '18', '46826', '43206', '13'), +('1', '79', '18', '70859', '41032', '13'), +('1', '79', '18', '47200', '34381', '13'), +('1', '79', '19', '53365', '53430', '13'), +('1', '79', '19', '39355', '43711', '13'), +('1', '79', '19', '83572', '39838', '13'), +('1', '79', '19', '69439', '37593', '13'), +('1', '79', '13', '46856', '181694', '13'), +('1', '79', '13', '46854', '179569', '13'), +('1', '79', '13', '80674', '177094', '13'), +('1', '79', '13', '80652', '172288', '13'), +('1', '79', '14', '46856', '181694', '13'), +('1', '79', '14', '46854', '179569', '13'), +('1', '79', '14', '80674', '177094', '13'), +('1', '79', '14', '80652', '172288', '13'), +('1', '79', '11', '80655', '106532', '13'), +('1', '79', '11', '46930', '100178', '13'), +('1', '79', '11', '83582', '76342', '13'), +('1', '79', '11', '39331', '73351', '13'), +('1', '80', '22', '12425', '0', '14'), +('1', '80', '22', '21807', '0', '14'), +('1', '80', '22', '21805', '0', '14'), +('1', '80', '22', '39342', '0', '14'), +('1', '80', '1', '102618', '86821', '14'), +('1', '80', '1', '102590', '86445', '14'), +('1', '80', '1', '102641', '85531', '14'), +('1', '80', '1', '102639', '85062', '14'), +('1', '80', '2', '70853', '59723', '14'), +('1', '80', '2', '102003', '59105', '14'), +('1', '80', '2', '102255', '53288', '14'), +('1', '80', '2', '53361', '52393', '14'), +('1', '80', '3', '102726', '94912', '14'), +('1', '80', '3', '102619', '92314', '14'), +('1', '80', '3', '102591', '91618', '14'), +('1', '80', '3', '102725', '82484', '14'), +('1', '80', '5', '102620', '90528', '14'), +('1', '80', '5', '102592', '89728', '14'), +('1', '80', '5', '102745', '82273', '14'), +('1', '80', '5', '102551', '78842', '14'), +('1', '80', '8', '102552', '102380', '14'), +('1', '80', '8', '102622', '92401', '14'), +('1', '80', '8', '102594', '91349', '14'), +('1', '80', '8', '102527', '81775', '14'), +('1', '80', '6', '102621', '92222', '14'), +('1', '80', '6', '102593', '91893', '14'), +('1', '80', '6', '80638', '83530', '14'), +('1', '80', '6', '102555', '79872', '14'), +('1', '80', '17', '83603', '67981', '14'), +('1', '80', '17', '100794', '64521', '14'), +('1', '80', '17', '102006', '63254', '14'), +('1', '80', '17', '102258', '57497', '14'), +('1', '80', '7', '102004', '59831', '14'), +('1', '80', '7', '102256', '54342', '14'), +('1', '80', '7', '83564', '39670', '14'), +('1', '80', '7', '39267', '39455', '14'), +('1', '80', '9', '67098', '150015', '14'), +('1', '80', '9', '46887', '57154', '14'), +('1', '80', '9', '53363', '51832', '14'), +('1', '80', '9', '102287', '49454', '14'), +('1', '80', '15', '102595', '88219', '14'), +('1', '80', '15', '102623', '88057', '14'), +('1', '80', '15', '102636', '86838', '14'), +('1', '80', '15', '102637', '86657', '14'), +('1', '80', '20', '102624', '115278', '14'), +('1', '80', '20', '102596', '113988', '14'), +('1', '80', '20', '102553', '102037', '14'), +('1', '80', '20', '80688', '88794', '14'), +('1', '80', '12', '53364', '74456', '14'), +('1', '80', '12', '47212', '51582', '14'), +('1', '80', '12', '102253', '51035', '14'), +('1', '80', '12', '71075', '46725', '14'), +('1', '80', '18', '102005', '61325', '14'), +('1', '80', '18', '102257', '55455', '14'), +('1', '80', '18', '83607', '44100', '14'), +('1', '80', '18', '46826', '43208', '14'), +('1', '80', '19', '76131', '70585', '14'), +('1', '80', '19', '53365', '53435', '14'), +('1', '80', '19', '102254', '51510', '14'), +('1', '80', '19', '39355', '43716', '14'), +('1', '80', '13', '102720', '235785', '14'), +('1', '80', '13', '102649', '234278', '14'), +('1', '80', '13', '102660', '232206', '14'), +('1', '80', '13', '102655', '231499', '14'), +('1', '80', '14', '102720', '235785', '14'), +('1', '80', '14', '102649', '234278', '14'), +('1', '80', '14', '102661', '232531', '14'), +('1', '80', '14', '102660', '232206', '14'), +('1', '80', '11', '102667', '151720', '14'), +('1', '80', '11', '102589', '132938', '14'), +('1', '80', '11', '80655', '106630', '14'), +('1', '80', '11', '46930', '100276', '14'), +('1', '81', '22', '12425', '0', '14'), +('1', '81', '22', '21807', '0', '14'), +('1', '81', '22', '21805', '0', '14'), +('1', '81', '22', '39342', '0', '14'), +('1', '81', '1', '102618', '86825', '14'), +('1', '81', '1', '102590', '86450', '14'), +('1', '81', '1', '102641', '85534', '14'), +('1', '81', '1', '102639', '85067', '14'), +('1', '81', '2', '70853', '59727', '14'), +('1', '81', '2', '102003', '59107', '14'), +('1', '81', '2', '102255', '53291', '14'), +('1', '81', '2', '53361', '52396', '14'), +('1', '81', '3', '102726', '94917', '14'), +('1', '81', '3', '102619', '92320', '14'), +('1', '81', '3', '102591', '91622', '14'), +('1', '81', '3', '102725', '82488', '14'), +('1', '81', '5', '102620', '90530', '14'), +('1', '81', '5', '102592', '89732', '14'), +('1', '81', '5', '102745', '82277', '14'), +('1', '81', '5', '102551', '78844', '14'), +('1', '81', '8', '102552', '102384', '14'), +('1', '81', '8', '102622', '92405', '14'), +('1', '81', '8', '102594', '91350', '14'), +('1', '81', '8', '102527', '81781', '14'), +('1', '81', '6', '102621', '92224', '14'), +('1', '81', '6', '102593', '91899', '14'), +('1', '81', '6', '80638', '83534', '14'), +('1', '81', '6', '102555', '79876', '14'), +('1', '81', '17', '83603', '67986', '14'), +('1', '81', '17', '100794', '64524', '14'), +('1', '81', '17', '102006', '63257', '14'), +('1', '81', '17', '102258', '57501', '14'), +('1', '81', '7', '102004', '59835', '14'), +('1', '81', '7', '102256', '54347', '14'), +('1', '81', '7', '83564', '39675', '14'), +('1', '81', '7', '39267', '39458', '14'), +('1', '81', '9', '67098', '151894', '14'), +('1', '81', '9', '46887', '57157', '14'), +('1', '81', '9', '53363', '51836', '14'), +('1', '81', '9', '102287', '49457', '14'), +('1', '81', '15', '102595', '88223', '14'), +('1', '81', '15', '102623', '88059', '14'), +('1', '81', '15', '102636', '86842', '14'), +('1', '81', '15', '102637', '86662', '14'), +('1', '81', '20', '102624', '115284', '14'), +('1', '81', '20', '102596', '113991', '14'), +('1', '81', '20', '102553', '102042', '14'), +('1', '81', '20', '80688', '88799', '14'), +('1', '81', '12', '53364', '74460', '14'), +('1', '81', '12', '47212', '51584', '14'), +('1', '81', '12', '102253', '51037', '14'), +('1', '81', '12', '71075', '46727', '14'), +('1', '81', '18', '102005', '61330', '14'), +('1', '81', '18', '102257', '55459', '14'), +('1', '81', '18', '83607', '44104', '14'), +('1', '81', '18', '46826', '43210', '14'), +('1', '81', '19', '76131', '70585', '14'), +('1', '81', '19', '53365', '53439', '14'), +('1', '81', '19', '102254', '51512', '14'), +('1', '81', '19', '39355', '43720', '14'), +('1', '81', '13', '102720', '236151', '14'), +('1', '81', '13', '102649', '234663', '14'), +('1', '81', '13', '102660', '232589', '14'), +('1', '81', '13', '102655', '231882', '14'), +('1', '81', '14', '102720', '236151', '14'), +('1', '81', '14', '102649', '234663', '14'), +('1', '81', '14', '102661', '232913', '14'), +('1', '81', '14', '102660', '232589', '14'), +('1', '81', '11', '102667', '151836', '14'), +('1', '81', '11', '102589', '133043', '14'), +('1', '81', '11', '80655', '106728', '14'), +('1', '81', '11', '46930', '100375', '14'), +('1', '82', '22', '12425', '0', '14'), +('1', '82', '22', '21807', '0', '14'), +('1', '82', '22', '21805', '0', '14'), +('1', '82', '22', '39342', '0', '14'), +('1', '82', '1', '102618', '86830', '14'), +('1', '82', '1', '102590', '86456', '14'), +('1', '82', '1', '102641', '85537', '14'), +('1', '82', '1', '102639', '85073', '14'), +('1', '82', '2', '70853', '59732', '14'), +('1', '82', '2', '102003', '59109', '14'), +('1', '82', '2', '102255', '53294', '14'), +('1', '82', '2', '53361', '52400', '14'), +('1', '82', '3', '102726', '94923', '14'), +('1', '82', '3', '102619', '92326', '14'), +('1', '82', '3', '102591', '91626', '14'), +('1', '82', '3', '102725', '82493', '14'), +('1', '82', '5', '102620', '90533', '14'), +('1', '82', '5', '102592', '89736', '14'), +('1', '82', '5', '102745', '82282', '14'), +('1', '82', '5', '102551', '78845', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '82', '8', '102552', '102388', '14'), +('1', '82', '8', '102622', '92409', '14'), +('1', '82', '8', '102594', '91352', '14'), +('1', '82', '8', '102527', '81787', '14'), +('1', '82', '6', '102621', '92227', '14'), +('1', '82', '6', '102593', '91906', '14'), +('1', '82', '6', '80638', '83539', '14'), +('1', '82', '6', '102555', '79880', '14'), +('1', '82', '17', '83603', '67991', '14'), +('1', '82', '17', '100794', '64527', '14'), +('1', '82', '17', '102006', '63261', '14'), +('1', '82', '17', '102258', '57506', '14'), +('1', '82', '7', '102004', '59839', '14'), +('1', '82', '7', '102256', '54353', '14'), +('1', '82', '7', '83564', '39681', '14'), +('1', '82', '7', '39267', '39460', '14'), +('1', '82', '9', '67098', '153773', '14'), +('1', '82', '9', '46887', '57161', '14'), +('1', '82', '9', '53363', '51839', '14'), +('1', '82', '9', '102287', '49460', '14'), +('1', '82', '15', '102595', '88228', '14'), +('1', '82', '15', '102623', '88062', '14'), +('1', '82', '15', '102636', '86846', '14'), +('1', '82', '15', '102637', '86668', '14'), +('1', '82', '20', '102624', '115291', '14'), +('1', '82', '20', '102596', '113994', '14'), +('1', '82', '20', '102553', '102049', '14'), +('1', '82', '20', '80688', '88804', '14'), +('1', '82', '12', '53364', '74464', '14'), +('1', '82', '12', '47212', '51587', '14'), +('1', '82', '12', '102253', '51039', '14'), +('1', '82', '12', '71075', '46730', '14'), +('1', '82', '18', '102005', '61335', '14'), +('1', '82', '18', '102257', '55463', '14'), +('1', '82', '18', '83607', '44109', '14'), +('1', '82', '18', '46826', '43212', '14'), +('1', '82', '19', '76131', '70585', '14'), +('1', '82', '19', '53365', '53444', '14'), +('1', '82', '19', '102254', '51514', '14'), +('1', '82', '19', '39355', '43725', '14'), +('1', '82', '13', '102720', '236517', '14'), +('1', '82', '13', '102649', '235048', '14'), +('1', '82', '13', '102660', '232971', '14'), +('1', '82', '13', '102655', '232264', '14'), +('1', '82', '14', '102720', '236517', '14'), +('1', '82', '14', '102649', '235048', '14'), +('1', '82', '14', '102661', '233324', '14'), +('1', '82', '14', '102660', '232971', '14'), +('1', '82', '11', '102667', '151960', '14'), +('1', '82', '11', '102589', '133149', '14'), +('1', '82', '11', '80655', '106826', '14'), +('1', '82', '11', '46930', '100473', '14'), +('1', '83', '22', '12425', '0', '14'), +('1', '83', '22', '21807', '0', '14'), +('1', '83', '22', '21805', '0', '14'), +('1', '83', '22', '39342', '0', '14'), +('1', '83', '1', '102618', '86834', '14'), +('1', '83', '1', '102590', '86462', '14'), +('1', '83', '1', '102641', '85541', '14'), +('1', '83', '1', '102639', '85079', '14'), +('1', '83', '2', '70853', '59736', '14'), +('1', '83', '2', '102003', '59111', '14'), +('1', '83', '2', '102255', '53297', '14'), +('1', '83', '2', '53361', '52403', '14'), +('1', '83', '3', '102726', '94929', '14'), +('1', '83', '3', '102619', '92332', '14'), +('1', '83', '3', '102591', '91630', '14'), +('1', '83', '3', '102725', '82497', '14'), +('1', '83', '5', '102620', '90535', '14'), +('1', '83', '5', '102592', '89739', '14'), +('1', '83', '5', '102745', '82287', '14'), +('1', '83', '5', '102551', '78847', '14'), +('1', '83', '8', '102552', '102392', '14'), +('1', '83', '8', '102622', '92413', '14'), +('1', '83', '8', '102594', '91353', '14'), +('1', '83', '8', '102527', '81794', '14'), +('1', '83', '6', '102621', '92230', '14'), +('1', '83', '6', '102593', '91913', '14'), +('1', '83', '6', '80638', '83543', '14'), +('1', '83', '6', '102555', '79884', '14'), +('1', '83', '17', '83603', '67996', '14'), +('1', '83', '17', '100794', '64530', '14'), +('1', '83', '17', '102006', '63265', '14'), +('1', '83', '17', '102258', '57511', '14'), +('1', '83', '7', '102004', '59843', '14'), +('1', '83', '7', '102256', '54358', '14'), +('1', '83', '7', '83564', '39686', '14'), +('1', '83', '7', '39267', '39463', '14'), +('1', '83', '9', '67098', '155652', '14'), +('1', '83', '9', '46887', '57165', '14'), +('1', '83', '9', '53363', '51843', '14'), +('1', '83', '9', '102287', '49463', '14'), +('1', '83', '15', '102595', '88232', '14'), +('1', '83', '15', '102623', '88064', '14'), +('1', '83', '15', '102636', '86850', '14'), +('1', '83', '15', '102637', '86673', '14'), +('1', '83', '20', '102624', '115298', '14'), +('1', '83', '20', '102596', '113997', '14'), +('1', '83', '20', '102553', '102055', '14'), +('1', '83', '20', '80688', '88809', '14'), +('1', '83', '12', '53364', '74468', '14'), +('1', '83', '12', '47212', '51590', '14'), +('1', '83', '12', '102253', '51041', '14'), +('1', '83', '12', '71075', '46733', '14'), +('1', '83', '18', '102005', '61341', '14'), +('1', '83', '18', '102257', '55467', '14'), +('1', '83', '18', '83607', '44114', '14'), +('1', '83', '18', '46826', '43214', '14'), +('1', '83', '19', '76131', '70585', '14'), +('1', '83', '19', '53365', '53449', '14'), +('1', '83', '19', '102254', '51516', '14'), +('1', '83', '19', '39355', '43730', '14'), +('1', '83', '13', '102720', '236883', '14'), +('1', '83', '13', '102649', '235462', '14'), +('1', '83', '13', '102660', '233354', '14'), +('1', '83', '13', '102655', '232647', '14'), +('1', '83', '14', '102720', '236883', '14'), +('1', '83', '14', '102649', '235462', '14'), +('1', '83', '14', '102661', '233706', '14'), +('1', '83', '14', '102660', '233354', '14'), +('1', '83', '11', '102667', '152085', '14'), +('1', '83', '11', '102589', '133255', '14'), +('1', '83', '11', '80655', '106924', '14'), +('1', '83', '11', '46930', '100571', '14'), +('1', '84', '22', '12425', '0', '14'), +('1', '84', '22', '21807', '0', '14'), +('1', '84', '22', '21805', '0', '14'), +('1', '84', '22', '39342', '0', '14'), +('1', '84', '1', '102618', '86839', '14'), +('1', '84', '1', '102590', '86468', '14'), +('1', '84', '1', '102641', '85544', '14'), +('1', '84', '1', '102639', '85085', '14'), +('1', '84', '2', '70853', '59740', '14'), +('1', '84', '2', '102003', '59113', '14'), +('1', '84', '2', '102255', '53300', '14'), +('1', '84', '2', '53361', '52407', '14'), +('1', '84', '3', '102726', '94934', '14'), +('1', '84', '3', '102619', '92338', '14'), +('1', '84', '3', '102591', '91633', '14'), +('1', '84', '3', '102725', '82501', '14'), +('1', '84', '5', '102620', '90538', '14'), +('1', '84', '5', '102592', '89743', '14'), +('1', '84', '5', '102745', '82292', '14'), +('1', '84', '5', '102551', '78849', '14'), +('1', '84', '8', '102552', '102396', '14'), +('1', '84', '8', '102622', '92417', '14'), +('1', '84', '8', '102594', '91355', '14'), +('1', '84', '8', '102527', '81800', '14'), +('1', '84', '6', '102621', '92233', '14'), +('1', '84', '6', '102593', '91920', '14'), +('1', '84', '6', '80638', '83548', '14'), +('1', '84', '6', '102555', '79889', '14'), +('1', '84', '17', '83603', '68001', '14'), +('1', '84', '17', '100794', '64533', '14'), +('1', '84', '17', '102006', '63269', '14'), +('1', '84', '17', '102258', '57516', '14'), +('1', '84', '7', '102004', '59848', '14'), +('1', '84', '7', '102256', '54364', '14'), +('1', '84', '7', '83564', '39692', '14'), +('1', '84', '7', '39267', '39466', '14'), +('1', '84', '9', '67098', '157531', '14'), +('1', '84', '9', '46887', '57169', '14'), +('1', '84', '9', '53363', '51846', '14'), +('1', '84', '9', '102287', '49466', '14'), +('1', '84', '15', '102595', '88237', '14'), +('1', '84', '15', '102623', '88067', '14'), +('1', '84', '15', '102636', '86854', '14'), +('1', '84', '15', '102637', '86679', '14'), +('1', '84', '20', '102624', '115305', '14'), +('1', '84', '20', '102596', '114000', '14'), +('1', '84', '20', '102553', '102061', '14'), +('1', '84', '20', '80688', '88814', '14'), +('1', '84', '12', '53364', '74472', '14'), +('1', '84', '12', '47212', '51593', '14'), +('1', '84', '12', '102253', '51044', '14'), +('1', '84', '12', '71075', '46736', '14'), +('1', '84', '18', '102005', '61346', '14'), +('1', '84', '18', '102257', '55471', '14'), +('1', '84', '18', '83607', '44119', '14'), +('1', '84', '18', '46826', '43216', '14'), +('1', '84', '19', '76131', '70585', '14'), +('1', '84', '19', '53365', '53454', '14'), +('1', '84', '19', '102254', '51518', '14'), +('1', '84', '19', '39355', '43735', '14'), +('1', '84', '13', '102720', '237249', '14'), +('1', '84', '13', '102649', '235848', '14'), +('1', '84', '13', '102660', '233736', '14'), +('1', '84', '13', '102655', '233029', '14'), +('1', '84', '14', '102720', '237249', '14'), +('1', '84', '14', '102649', '235848', '14'), +('1', '84', '14', '102661', '234088', '14'), +('1', '84', '14', '102660', '233736', '14'), +('1', '84', '11', '102667', '152200', '14'), +('1', '84', '11', '102589', '133360', '14'), +('1', '84', '11', '80655', '107022', '14'), +('1', '84', '11', '46930', '100670', '14'), +('1', '85', '22', '39342', '0', '16'), +('1', '85', '22', '12425', '0', '16'), +('1', '85', '22', '7867', '0', '16'), +('1', '85', '22', '23597', '0', '16'), +('1', '85', '1', '111309', '166240', '16'), +('1', '85', '1', '111303', '165571', '16'), +('1', '85', '1', '111308', '165164', '16'), +('1', '85', '1', '111305', '163689', '16'), +('1', '85', '2', '94056', '104866', '16'), +('1', '85', '2', '62985', '104037', '16'), +('1', '85', '2', '89368', '99540', '16'), +('1', '85', '2', '104403', '87969', '16'), +('1', '85', '3', '111312', '165442', '16'), +('1', '85', '3', '111313', '164248', '16'), +('1', '85', '3', '111315', '164118', '16'), +('1', '85', '3', '111316', '161603', '16'), +('1', '85', '5', '111320', '163923', '16'), +('1', '85', '5', '111318', '163729', '16'), +('1', '85', '5', '111319', '161109', '16'), +('1', '85', '5', '111019', '144073', '16'), +('1', '85', '8', '111331', '166295', '16'), +('1', '85', '8', '111328', '165522', '16'), +('1', '85', '8', '111332', '161100', '16'), +('1', '85', '8', '111030', '146415', '16'), +('1', '85', '6', '111322', '164352', '16'), +('1', '85', '6', '111324', '164054', '16'), +('1', '85', '6', '111326', '161117', '16'), +('1', '85', '6', '111021', '144472', '16'), +('1', '85', '17', '56046', '110029', '16'), +('1', '85', '17', '81765', '109607', '16'), +('1', '85', '17', '56083', '108933', '16'), +('1', '85', '17', '104406', '94348', '16'), +('1', '85', '7', '94053', '105637', '16'), +('1', '85', '7', '56079', '105260', '16'), +('1', '85', '7', '89369', '100535', '16'), +('1', '85', '7', '104404', '88082', '16'), +('1', '85', '9', '67098', '159410', '16'), +('1', '85', '9', '56031', '101927', '16'), +('1', '85', '9', '62992', '101807', '16'), +('1', '85', '9', '56033', '101725', '16'), +('1', '85', '15', '111343', '165568', '16'), +('1', '85', '15', '111347', '165294', '16'), +('1', '85', '15', '111341', '165082', '16'), +('1', '85', '15', '111345', '163468', '16'), +('1', '85', '20', '111354', '190720', '16'), +('1', '85', '20', '111355', '187926', '16'), +('1', '85', '20', '111353', '187351', '16'), +('1', '85', '20', '111351', '186659', '16'), +('1', '85', '12', '81795', '103091', '16'), +('1', '85', '12', '56073', '102588', '16'), +('1', '85', '12', '89366', '97266', '16'), +('1', '85', '12', '104401', '87230', '16'), +('1', '85', '18', '62986', '107120', '16'), +('1', '85', '18', '56041', '106361', '16'), +('1', '85', '18', '62987', '106154', '16'), +('1', '85', '18', '94054', '105366', '16'), +('1', '85', '19', '62990', '105668', '16'), +('1', '85', '19', '56037', '105291', '16'), +('1', '85', '19', '56075', '104617', '16'), +('1', '85', '19', '81763', '103897', '16'), +('1', '85', '13', '111871', '384262', '16'), +('1', '85', '13', '111815', '381597', '16'), +('1', '85', '13', '111515', '363958', '16'), +('1', '85', '13', '111512', '363943', '16'), +('1', '85', '14', '111871', '384262', '16'), +('1', '85', '14', '111815', '381597', '16'), +('1', '85', '14', '111515', '363958', '16'), +('1', '85', '14', '111512', '363943', '16'), +('1', '85', '11', '111529', '237151', '16'), +('1', '85', '11', '111229', '221441', '16'), +('1', '85', '11', '106769', '168800', '16'), +('1', '85', '11', '62939', '168797', '16'), +('1', '85', '22', '12425', '0', '15'), +('1', '85', '22', '21807', '0', '15'), +('1', '85', '22', '39342', '0', '15'), +('1', '85', '22', '7867', '0', '15'), +('1', '85', '1', '107054', '121774', '15'), +('1', '85', '1', '107010', '120533', '15'), +('1', '85', '1', '107001', '120428', '15'), +('1', '85', '1', '107053', '119553', '15'), +('1', '85', '2', '94056', '104866', '15'), +('1', '85', '2', '62985', '104037', '15'), +('1', '85', '2', '89368', '99540', '15'), +('1', '85', '2', '104403', '87969', '15'), +('1', '85', '3', '107002', '123232', '15'), +('1', '85', '3', '107055', '123120', '15'), +('1', '85', '3', '107011', '122973', '15'), +('1', '85', '3', '106849', '117104', '15'), +('1', '85', '5', '107056', '121011', '15'), +('1', '85', '5', '107003', '120927', '15'), +('1', '85', '5', '107012', '120556', '15'), +('1', '85', '5', '106802', '115014', '15'), +('1', '85', '8', '106804', '139474', '15'), +('1', '85', '8', '94070', '128644', '15'), +('1', '85', '8', '106705', '126517', '15'), +('1', '85', '8', '107058', '124792', '15'), +('1', '85', '6', '106803', '137044', '15'), +('1', '85', '6', '106843', '135781', '15'), +('1', '85', '6', '107004', '123611', '15'), +('1', '85', '6', '107057', '122268', '15'), +('1', '85', '17', '56046', '110029', '15'), +('1', '85', '17', '81765', '109607', '15'), +('1', '85', '17', '56083', '108933', '15'), +('1', '85', '17', '104406', '94348', '15'), +('1', '85', '7', '94053', '105637', '15'), +('1', '85', '7', '56079', '105260', '15'), +('1', '85', '7', '89369', '100535', '15'), +('1', '85', '7', '104404', '88082', '15'), +('1', '85', '9', '67098', '159410', '15'), +('1', '85', '9', '56031', '101927', '15'), +('1', '85', '9', '62992', '101807', '15'), +('1', '85', '9', '56033', '101725', '15'), +('1', '85', '15', '107007', '122191', '15'), +('1', '85', '15', '107062', '122169', '15'), +('1', '85', '15', '107051', '120229', '15'), +('1', '85', '15', '107016', '119802', '15'), +('1', '85', '20', '107059', '146890', '15'), +('1', '85', '20', '107008', '146286', '15'), +('1', '85', '20', '107017', '145350', '15'), +('1', '85', '20', '106845', '137810', '15'), +('1', '85', '12', '81795', '103091', '15'), +('1', '85', '12', '56073', '102588', '15'), +('1', '85', '12', '89366', '97266', '15'), +('1', '85', '12', '104401', '87230', '15'), +('1', '85', '18', '62986', '107120', '15'), +('1', '85', '18', '56041', '106361', '15'), +('1', '85', '18', '62987', '106154', '15'), +('1', '85', '18', '94054', '105366', '15'), +('1', '85', '19', '62990', '105668', '15'), +('1', '85', '19', '56037', '105291', '15'), +('1', '85', '19', '56075', '104617', '15'), +('1', '85', '19', '81763', '103897', '15'), +('1', '85', '13', '106854', '289916', '15'), +('1', '85', '13', '106858', '286563', '15'), +('1', '85', '13', '106853', '285731', '15'), +('1', '85', '13', '106856', '279995', '15'), +('1', '85', '14', '106854', '289916', '15'), +('1', '85', '14', '106858', '286563', '15'), +('1', '85', '14', '106853', '285731', '15'), +('1', '85', '14', '106856', '279995', '15'), +('1', '85', '11', '106769', '168800', '15'), +('1', '85', '11', '62939', '168797', '15'), +('1', '85', '11', '102667', '152325', '15'), +('1', '85', '11', '106616', '149356', '15'), +('1', '86', '22', '39342', '0', '16'), +('1', '86', '22', '12425', '0', '16'), +('1', '86', '22', '7867', '0', '16'), +('1', '86', '22', '23597', '0', '16'), +('1', '86', '1', '111309', '166244', '16'), +('1', '86', '1', '111303', '165577', '16'), +('1', '86', '1', '111308', '165168', '16'), +('1', '86', '1', '111305', '163694', '16'), +('1', '86', '2', '94056', '104870', '16'), +('1', '86', '2', '62985', '104040', '16'), +('1', '86', '2', '89368', '99545', '16'), +('1', '86', '2', '104403', '87972', '16'), +('1', '86', '3', '111312', '165446', '16'), +('1', '86', '3', '111313', '164251', '16'), +('1', '86', '3', '111315', '164125', '16'), +('1', '86', '3', '111316', '161608', '16'), +('1', '86', '5', '111320', '163928', '16'), +('1', '86', '5', '111318', '163732', '16'), +('1', '86', '5', '111319', '161115', '16'), +('1', '86', '5', '111019', '144078', '16'), +('1', '86', '8', '111331', '166301', '16'), +('1', '86', '8', '111328', '165528', '16'), +('1', '86', '8', '111332', '161104', '16'), +('1', '86', '8', '111030', '146421', '16'), +('1', '86', '6', '111322', '164356', '16'), +('1', '86', '6', '111324', '164059', '16'), +('1', '86', '6', '111326', '161122', '16'), +('1', '86', '6', '111021', '144476', '16'), +('1', '86', '17', '56046', '110036', '16'), +('1', '86', '17', '81765', '109611', '16'), +('1', '86', '17', '56083', '108936', '16'), +('1', '86', '17', '104406', '94355', '16'), +('1', '86', '7', '94053', '105641', '16'), +('1', '86', '7', '56079', '105265', '16'), +('1', '86', '7', '89369', '100540', '16'), +('1', '86', '7', '104404', '88086', '16'), +('1', '86', '9', '67098', '161290', '16'), +('1', '86', '9', '56031', '101929', '16'), +('1', '86', '9', '62992', '101812', '16'), +('1', '86', '9', '56033', '101727', '16'), +('1', '86', '15', '111343', '165572', '16'), +('1', '86', '15', '111347', '165299', '16'), +('1', '86', '15', '111341', '165088', '16'), +('1', '86', '15', '111345', '163471', '16'), +('1', '86', '20', '111354', '190724', '16'), +('1', '86', '20', '111355', '187929', '16'), +('1', '86', '20', '111353', '187357', '16'), +('1', '86', '20', '111351', '186662', '16'), +('1', '86', '12', '81795', '103096', '16'), +('1', '86', '12', '56073', '102594', '16'), +('1', '86', '12', '89366', '97270', '16'), +('1', '86', '12', '104401', '87235', '16'), +('1', '86', '18', '62986', '107127', '16'), +('1', '86', '18', '56041', '106363', '16'), +('1', '86', '18', '62987', '106156', '16'), +('1', '86', '18', '94054', '105371', '16'), +('1', '86', '19', '62990', '105672', '16'), +('1', '86', '19', '56037', '105295', '16'), +('1', '86', '19', '56075', '104621', '16'), +('1', '86', '19', '81763', '103901', '16'), +('1', '86', '13', '111871', '384834', '16'), +('1', '86', '13', '111815', '382197', '16'), +('1', '86', '13', '111515', '364529', '16'), +('1', '86', '13', '111512', '364514', '16'), +('1', '86', '14', '111871', '384834', '16'), +('1', '86', '14', '111815', '382197', '16'), +('1', '86', '14', '111515', '364529', '16'), +('1', '86', '14', '111512', '364514', '16'), +('1', '86', '11', '111529', '237306', '16'), +('1', '86', '11', '111229', '221587', '16'), +('1', '86', '11', '106769', '168927', '16'), +('1', '86', '11', '62939', '168925', '16'), +('1', '87', '22', '39342', '0', '16'), +('1', '87', '22', '12425', '0', '16'), +('1', '87', '22', '7867', '0', '16'), +('1', '87', '22', '23597', '0', '16'), +('1', '87', '1', '111309', '166247', '16'), +('1', '87', '1', '111303', '165583', '16'), +('1', '87', '1', '111308', '165173', '16'), +('1', '87', '1', '111305', '163698', '16'), +('1', '87', '2', '94056', '104873', '16'), +('1', '87', '2', '62985', '104042', '16'), +('1', '87', '2', '89368', '99549', '16'), +('1', '87', '2', '104403', '87976', '16'), +('1', '87', '3', '111312', '165451', '16'), +('1', '87', '3', '111313', '164254', '16'), +('1', '87', '3', '111315', '164131', '16'), +('1', '87', '3', '111316', '161612', '16'), +('1', '87', '5', '111320', '163932', '16'), +('1', '87', '5', '111318', '163736', '16'), +('1', '87', '5', '111319', '161121', '16'), +('1', '87', '5', '111019', '144082', '16'), +('1', '87', '8', '111331', '166306', '16'), +('1', '87', '8', '111328', '165533', '16'), +('1', '87', '8', '111332', '161107', '16'), +('1', '87', '8', '111030', '146426', '16'), +('1', '87', '6', '111322', '164360', '16'), +('1', '87', '6', '111324', '164064', '16'), +('1', '87', '6', '111326', '161126', '16'), +('1', '87', '6', '111021', '144480', '16'), +('1', '87', '17', '56046', '110042', '16'), +('1', '87', '17', '81765', '109615', '16'), +('1', '87', '17', '56083', '108938', '16'), +('1', '87', '17', '104406', '94361', '16'), +('1', '87', '7', '94053', '105646', '16'), +('1', '87', '7', '56079', '105270', '16'), +('1', '87', '7', '89369', '100545', '16'), +('1', '87', '7', '104404', '88090', '16'), +('1', '87', '9', '67098', '163169', '16'), +('1', '87', '9', '56031', '101932', '16'), +('1', '87', '9', '62992', '101816', '16'), +('1', '87', '9', '56033', '101730', '16'), +('1', '87', '15', '111343', '165575', '16'), +('1', '87', '15', '111347', '165304', '16'), +('1', '87', '15', '111341', '165094', '16'), +('1', '87', '15', '111345', '163474', '16'), +('1', '87', '20', '111354', '190728', '16'), +('1', '87', '20', '111355', '187932', '16'), +('1', '87', '20', '111353', '187361', '16'), +('1', '87', '20', '111351', '186665', '16'), +('1', '87', '12', '81795', '103102', '16'), +('1', '87', '12', '56073', '102600', '16'), +('1', '87', '12', '89366', '97273', '16'), +('1', '87', '12', '104401', '87240', '16'), +('1', '87', '18', '62986', '107133', '16'), +('1', '87', '18', '56041', '106365', '16'), +('1', '87', '18', '62987', '106159', '16'), +('1', '87', '18', '94054', '105376', '16'), +('1', '87', '19', '62990', '105676', '16'), +('1', '87', '19', '56037', '105300', '16'), +('1', '87', '19', '56075', '104625', '16'), +('1', '87', '19', '81763', '103904', '16'), +('1', '87', '13', '111871', '385433', '16'), +('1', '87', '13', '111815', '382768', '16'), +('1', '87', '13', '111515', '365099', '16'), +('1', '87', '13', '111512', '365056', '16'), +('1', '87', '14', '111871', '385433', '16'), +('1', '87', '14', '111815', '382768', '16'), +('1', '87', '14', '111515', '365099', '16'), +('1', '87', '14', '111512', '365056', '16'), +('1', '87', '11', '111529', '237452', '16'), +('1', '87', '11', '111229', '221733', '16'), +('1', '87', '11', '62939', '169053', '16'), +('1', '87', '11', '106769', '169053', '16'), +('1', '88', '22', '39342', '0', '16'), +('1', '88', '22', '12425', '0', '16'), +('1', '88', '22', '7867', '0', '16'), +('1', '88', '22', '23597', '0', '16'), +('1', '88', '1', '111309', '166250', '16'), +('1', '88', '1', '111303', '165589', '16'), +('1', '88', '1', '111308', '165177', '16'), +('1', '88', '1', '111305', '163702', '16'), +('1', '88', '2', '94056', '104877', '16'), +('1', '88', '2', '62985', '104045', '16'), +('1', '88', '2', '89368', '99553', '16'), +('1', '88', '2', '104403', '87979', '16'), +('1', '88', '3', '111312', '165455', '16'), +('1', '88', '3', '111313', '164257', '16'), +('1', '88', '3', '111315', '164137', '16'), +('1', '88', '3', '111316', '161616', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '88', '5', '111320', '163937', '16'), +('1', '88', '5', '111318', '163739', '16'), +('1', '88', '5', '111319', '161126', '16'), +('1', '88', '5', '111019', '144087', '16'), +('1', '88', '8', '111331', '166310', '16'), +('1', '88', '8', '111328', '165538', '16'), +('1', '88', '8', '111332', '161110', '16'), +('1', '88', '8', '111030', '146430', '16'), +('1', '88', '6', '111322', '164364', '16'), +('1', '88', '6', '111324', '164068', '16'), +('1', '88', '6', '111326', '161130', '16'), +('1', '88', '6', '111021', '144484', '16'), +('1', '88', '17', '56046', '110048', '16'), +('1', '88', '17', '81765', '109619', '16'), +('1', '88', '17', '56083', '108941', '16'), +('1', '88', '17', '104406', '94368', '16'), +('1', '88', '7', '94053', '105650', '16'), +('1', '88', '7', '56079', '105275', '16'), +('1', '88', '7', '89369', '100549', '16'), +('1', '88', '7', '104404', '88094', '16'), +('1', '88', '9', '67098', '165049', '16'), +('1', '88', '9', '56031', '101935', '16'), +('1', '88', '9', '62992', '101820', '16'), +('1', '88', '9', '56033', '101732', '16'), +('1', '88', '15', '111343', '165578', '16'), +('1', '88', '15', '111347', '165309', '16'), +('1', '88', '15', '111341', '165100', '16'), +('1', '88', '15', '111345', '163478', '16'), +('1', '88', '20', '111354', '190732', '16'), +('1', '88', '20', '111355', '187935', '16'), +('1', '88', '20', '111353', '187366', '16'), +('1', '88', '20', '111351', '186667', '16'), +('1', '88', '12', '81795', '103107', '16'), +('1', '88', '12', '56073', '102606', '16'), +('1', '88', '12', '89366', '97277', '16'), +('1', '88', '12', '104401', '87244', '16'), +('1', '88', '18', '62986', '107139', '16'), +('1', '88', '18', '56041', '106367', '16'), +('1', '88', '18', '62987', '106161', '16'), +('1', '88', '18', '94054', '105381', '16'), +('1', '88', '19', '62990', '105680', '16'), +('1', '88', '19', '56037', '105304', '16'), +('1', '88', '19', '56075', '104630', '16'), +('1', '88', '19', '81763', '103908', '16'), +('1', '88', '13', '111871', '386005', '16'), +('1', '88', '13', '111815', '383340', '16'), +('1', '88', '13', '111515', '365642', '16'), +('1', '88', '13', '111512', '365627', '16'), +('1', '88', '14', '111871', '386005', '16'), +('1', '88', '14', '111815', '383340', '16'), +('1', '88', '14', '111515', '365642', '16'), +('1', '88', '14', '111512', '365627', '16'), +('1', '88', '11', '111529', '237607', '16'), +('1', '88', '11', '111229', '221879', '16'), +('1', '88', '11', '106769', '169180', '16'), +('1', '88', '11', '62939', '169170', '16'), +('1', '89', '22', '39342', '0', '16'), +('1', '89', '22', '12425', '0', '16'), +('1', '89', '22', '7867', '0', '16'), +('1', '89', '22', '23597', '0', '16'), +('1', '89', '1', '111309', '166254', '16'), +('1', '89', '1', '111303', '165595', '16'), +('1', '89', '1', '111308', '165182', '16'), +('1', '89', '1', '111305', '163707', '16'), +('1', '89', '2', '94056', '104881', '16'), +('1', '89', '2', '62985', '104047', '16'), +('1', '89', '2', '89368', '99558', '16'), +('1', '89', '2', '104403', '87983', '16'), +('1', '89', '3', '111312', '165460', '16'), +('1', '89', '3', '111313', '164261', '16'), +('1', '89', '3', '111315', '164144', '16'), +('1', '89', '3', '111316', '161621', '16'), +('1', '89', '5', '111320', '163942', '16'), +('1', '89', '5', '111318', '163742', '16'), +('1', '89', '5', '111319', '161132', '16'), +('1', '89', '5', '111019', '144092', '16'), +('1', '89', '8', '111331', '166316', '16'), +('1', '89', '8', '111328', '165543', '16'), +('1', '89', '8', '111332', '161113', '16'), +('1', '89', '8', '111030', '146436', '16'), +('1', '89', '6', '111322', '164368', '16'), +('1', '89', '6', '111324', '164074', '16'), +('1', '89', '6', '111326', '161134', '16'), +('1', '89', '6', '111021', '144488', '16'), +('1', '89', '17', '56046', '110054', '16'), +('1', '89', '17', '81765', '109623', '16'), +('1', '89', '17', '56083', '108944', '16'), +('1', '89', '17', '104406', '94374', '16'), +('1', '89', '7', '94053', '105655', '16'), +('1', '89', '7', '56079', '105280', '16'), +('1', '89', '7', '89369', '100554', '16'), +('1', '89', '7', '104404', '88098', '16'), +('1', '89', '9', '67098', '166928', '16'), +('1', '89', '9', '56031', '101938', '16'), +('1', '89', '9', '62992', '101825', '16'), +('1', '89', '9', '56033', '101735', '16'), +('1', '89', '15', '111343', '165581', '16'), +('1', '89', '15', '111347', '165315', '16'), +('1', '89', '15', '111341', '165107', '16'), +('1', '89', '15', '111345', '163481', '16'), +('1', '89', '20', '111354', '190736', '16'), +('1', '89', '20', '111355', '187938', '16'), +('1', '89', '20', '111353', '187371', '16'), +('1', '89', '20', '111351', '186670', '16'), +('1', '89', '12', '81795', '103112', '16'), +('1', '89', '12', '56073', '102613', '16'), +('1', '89', '12', '89366', '97281', '16'), +('1', '89', '12', '104401', '87249', '16'), +('1', '89', '18', '62986', '107146', '16'), +('1', '89', '18', '56041', '106369', '16'), +('1', '89', '18', '62987', '106164', '16'), +('1', '89', '18', '94054', '105386', '16'), +('1', '89', '19', '62990', '105685', '16'), +('1', '89', '19', '56037', '105308', '16'), +('1', '89', '19', '56075', '104634', '16'), +('1', '89', '19', '81763', '103911', '16'), +('1', '89', '13', '111871', '386577', '16'), +('1', '89', '13', '111815', '383939', '16'), +('1', '89', '13', '111515', '366213', '16'), +('1', '89', '13', '111512', '366198', '16'), +('1', '89', '14', '111871', '386577', '16'), +('1', '89', '14', '111815', '383939', '16'), +('1', '89', '14', '111515', '366213', '16'), +('1', '89', '14', '111512', '366198', '16'), +('1', '89', '11', '111529', '237753', '16'), +('1', '89', '11', '111229', '222015', '16'), +('1', '89', '11', '106769', '169307', '16'), +('1', '89', '11', '62939', '169298', '16'), +('1', '90', '22', '39342', '0', '17'), +('1', '90', '22', '12425', '0', '17'), +('1', '90', '22', '7867', '0', '17'), +('1', '90', '22', '23597', '0', '17'), +('1', '90', '1', '111309', '166257', '17'), +('1', '90', '1', '111303', '165600', '17'), +('1', '90', '1', '111308', '165186', '17'), +('1', '90', '1', '111305', '163711', '17'), +('1', '90', '2', '94056', '104885', '17'), +('1', '90', '2', '62985', '104050', '17'), +('1', '90', '2', '89368', '99562', '17'), +('1', '90', '2', '104403', '87986', '17'), +('1', '90', '3', '111312', '165464', '17'), +('1', '90', '3', '111313', '164264', '17'), +('1', '90', '3', '111315', '164150', '17'), +('1', '90', '3', '111316', '161625', '17'), +('1', '90', '5', '111320', '163946', '17'), +('1', '90', '5', '111318', '163746', '17'), +('1', '90', '5', '111319', '161137', '17'), +('1', '90', '5', '111019', '144096', '17'), +('1', '90', '8', '111331', '166321', '17'), +('1', '90', '8', '111328', '165548', '17'), +('1', '90', '8', '111332', '161116', '17'), +('1', '90', '8', '111030', '146441', '17'), +('1', '90', '6', '111322', '164371', '17'), +('1', '90', '6', '111324', '164078', '17'), +('1', '90', '6', '111326', '161138', '17'), +('1', '90', '6', '111021', '144491', '17'), +('1', '90', '17', '56046', '110060', '17'), +('1', '90', '17', '81765', '109626', '17'), +('1', '90', '17', '56083', '108946', '17'), +('1', '90', '17', '104406', '94381', '17'), +('1', '90', '7', '94053', '105660', '17'), +('1', '90', '7', '56079', '105285', '17'), +('1', '90', '7', '89369', '100558', '17'), +('1', '90', '7', '104404', '88101', '17'), +('1', '90', '9', '67098', '168808', '17'), +('1', '90', '9', '56031', '101940', '17'), +('1', '90', '9', '62992', '101829', '17'), +('1', '90', '9', '56033', '101737', '17'), +('1', '90', '15', '111343', '165584', '17'), +('1', '90', '15', '111347', '165320', '17'), +('1', '90', '15', '111341', '165113', '17'), +('1', '90', '15', '111345', '163484', '17'), +('1', '90', '20', '111354', '190740', '17'), +('1', '90', '20', '111355', '187941', '17'), +('1', '90', '20', '111353', '187376', '17'), +('1', '90', '20', '111351', '186673', '17'), +('1', '90', '12', '81795', '103118', '17'), +('1', '90', '12', '56073', '102619', '17'), +('1', '90', '12', '89366', '97285', '17'), +('1', '90', '12', '104401', '87254', '17'), +('1', '90', '18', '62986', '107152', '17'), +('1', '90', '18', '56041', '106371', '17'), +('1', '90', '18', '62987', '106166', '17'), +('1', '90', '18', '94054', '105390', '17'), +('1', '90', '19', '62990', '105689', '17'), +('1', '90', '19', '56037', '105312', '17'), +('1', '90', '19', '56075', '104638', '17'), +('1', '90', '19', '81763', '103915', '17'), +('1', '90', '13', '111871', '387148', '17'), +('1', '90', '13', '111815', '384510', '17'), +('1', '90', '13', '111515', '366783', '17'), +('1', '90', '13', '111512', '366769', '17'), +('1', '90', '14', '111871', '387148', '17'), +('1', '90', '14', '111815', '384510', '17'), +('1', '90', '14', '111515', '366783', '17'), +('1', '90', '14', '111512', '366769', '17'), +('1', '90', '11', '111529', '237898', '17'), +('1', '90', '11', '111229', '222161', '17'), +('1', '90', '11', '106769', '169434', '17'), +('1', '90', '11', '62939', '169426', '17'), +('1', '91', '22', '39342', '0', '17'), +('1', '91', '22', '12425', '0', '17'), +('1', '91', '22', '7867', '0', '17'), +('1', '91', '22', '23597', '0', '17'), +('1', '91', '1', '111309', '166260', '17'), +('1', '91', '1', '111303', '165606', '17'), +('1', '91', '1', '111308', '165191', '17'), +('1', '91', '1', '111305', '163716', '17'), +('1', '91', '2', '94056', '104889', '17'), +('1', '91', '2', '62985', '104053', '17'), +('1', '91', '2', '89368', '99567', '17'), +('1', '91', '2', '104403', '87990', '17'), +('1', '91', '3', '111312', '165468', '17'), +('1', '91', '3', '111313', '164268', '17'), +('1', '91', '3', '111315', '164157', '17'), +('1', '91', '3', '111316', '161629', '17'), +('1', '91', '5', '111320', '163951', '17'), +('1', '91', '5', '111318', '163749', '17'), +('1', '91', '5', '111319', '161143', '17'), +('1', '91', '5', '111019', '144101', '17'), +('1', '91', '8', '111331', '166326', '17'), +('1', '91', '8', '111328', '165553', '17'), +('1', '91', '8', '111332', '161119', '17'), +('1', '91', '8', '111030', '146446', '17'), +('1', '91', '6', '111322', '164375', '17'), +('1', '91', '6', '111324', '164083', '17'), +('1', '91', '6', '111326', '161143', '17'), +('1', '91', '6', '111021', '144495', '17'), +('1', '91', '17', '56046', '110067', '17'), +('1', '91', '17', '81765', '109630', '17'), +('1', '91', '17', '56083', '108949', '17'), +('1', '91', '17', '104406', '94387', '17'), +('1', '91', '7', '94053', '105664', '17'), +('1', '91', '7', '56079', '105290', '17'), +('1', '91', '7', '89369', '100563', '17'), +('1', '91', '7', '104404', '88105', '17'), +('1', '91', '9', '67098', '168812', '17'), +('1', '91', '9', '56031', '101943', '17'), +('1', '91', '9', '62992', '101834', '17'), +('1', '91', '9', '56033', '101740', '17'), +('1', '91', '15', '111343', '165587', '17'), +('1', '91', '15', '111347', '165325', '17'), +('1', '91', '15', '111341', '165120', '17'), +('1', '91', '15', '111345', '163488', '17'), +('1', '91', '20', '111354', '190744', '17'), +('1', '91', '20', '111355', '187944', '17'), +('1', '91', '20', '111353', '187381', '17'), +('1', '91', '20', '111351', '186676', '17'), +('1', '91', '12', '81795', '103123', '17'), +('1', '91', '12', '56073', '102625', '17'), +('1', '91', '12', '89366', '97289', '17'), +('1', '91', '12', '104401', '87259', '17'), +('1', '91', '18', '62986', '107159', '17'), +('1', '91', '18', '56041', '106373', '17'), +('1', '91', '18', '62987', '106169', '17'), +('1', '91', '18', '94054', '105395', '17'), +('1', '91', '19', '62990', '105694', '17'), +('1', '91', '19', '56037', '105317', '17'), +('1', '91', '19', '56075', '104643', '17'), +('1', '91', '19', '81763', '103918', '17'), +('1', '91', '13', '111871', '387748', '17'), +('1', '91', '13', '111815', '385082', '17'), +('1', '91', '13', '111515', '367354', '17'), +('1', '91', '13', '111512', '367340', '17'), +('1', '91', '14', '111871', '387748', '17'), +('1', '91', '14', '111815', '385082', '17'), +('1', '91', '14', '111515', '367354', '17'), +('1', '91', '14', '111512', '367340', '17'), +('1', '91', '11', '111529', '238054', '17'), +('1', '91', '11', '111229', '222307', '17'), +('1', '91', '11', '106769', '169561', '17'), +('1', '91', '11', '62939', '169553', '17'), +('1', '92', '22', '39342', '0', '17'), +('1', '92', '22', '12425', '0', '17'), +('1', '92', '22', '7867', '0', '17'), +('1', '92', '22', '23597', '0', '17'), +('1', '92', '1', '111309', '166263', '17'), +('1', '92', '1', '111303', '165612', '17'), +('1', '92', '1', '111308', '165195', '17'), +('1', '92', '1', '111305', '163720', '17'), +('1', '92', '2', '94056', '104893', '17'), +('1', '92', '2', '62985', '104055', '17'), +('1', '92', '2', '89368', '99571', '17'), +('1', '92', '2', '104403', '87993', '17'), +('1', '92', '3', '111312', '165473', '17'), +('1', '92', '3', '111313', '164271', '17'), +('1', '92', '3', '111315', '164163', '17'), +('1', '92', '3', '111316', '161633', '17'), +('1', '92', '5', '111320', '163955', '17'), +('1', '92', '5', '111318', '163752', '17'), +('1', '92', '5', '111319', '161149', '17'), +('1', '92', '5', '111019', '144105', '17'), +('1', '92', '8', '111331', '166331', '17'), +('1', '92', '8', '111328', '165558', '17'), +('1', '92', '8', '111332', '161122', '17'), +('1', '92', '8', '111030', '146451', '17'), +('1', '92', '6', '111322', '164379', '17'), +('1', '92', '6', '111324', '164088', '17'), +('1', '92', '6', '111326', '161147', '17'), +('1', '92', '6', '111021', '144499', '17'), +('1', '92', '17', '56046', '110073', '17'), +('1', '92', '17', '81765', '109634', '17'), +('1', '92', '17', '56083', '108951', '17'), +('1', '92', '17', '104406', '94394', '17'), +('1', '92', '7', '94053', '105669', '17'), +('1', '92', '7', '56079', '105295', '17'), +('1', '92', '7', '89369', '100568', '17'), +('1', '92', '7', '104404', '88109', '17'), +('1', '92', '9', '67098', '168816', '17'), +('1', '92', '9', '56031', '101946', '17'), +('1', '92', '9', '62992', '101838', '17'), +('1', '92', '9', '56033', '101742', '17'), +('1', '92', '15', '111343', '165591', '17'), +('1', '92', '15', '111347', '165330', '17'), +('1', '92', '15', '111341', '165126', '17'), +('1', '92', '15', '111345', '163491', '17'), +('1', '92', '20', '111354', '190748', '17'), +('1', '92', '20', '111355', '187947', '17'), +('1', '92', '20', '111353', '187386', '17'), +('1', '92', '20', '111351', '186678', '17'), +('1', '92', '12', '81795', '103128', '17'), +('1', '92', '12', '56073', '102631', '17'), +('1', '92', '12', '89366', '97293', '17'), +('1', '92', '12', '104401', '87264', '17'), +('1', '92', '18', '62986', '107165', '17'), +('1', '92', '18', '56041', '106374', '17'), +('1', '92', '18', '62987', '106171', '17'), +('1', '92', '18', '94054', '105400', '17'), +('1', '92', '19', '62990', '105698', '17'), +('1', '92', '19', '56037', '105321', '17'), +('1', '92', '19', '56075', '104647', '17'), +('1', '92', '19', '81763', '103921', '17'), +('1', '92', '13', '111871', '388320', '17'), +('1', '92', '13', '111815', '385681', '17'), +('1', '92', '13', '111515', '367925', '17'), +('1', '92', '13', '111512', '367882', '17'), +('1', '92', '14', '111871', '388320', '17'), +('1', '92', '14', '111815', '385681', '17'), +('1', '92', '14', '111515', '367925', '17'), +('1', '92', '14', '111512', '367882', '17'), +('1', '92', '11', '111529', '238199', '17'), +('1', '92', '11', '111229', '222453', '17'), +('1', '92', '11', '106769', '169697', '17'), +('1', '92', '11', '62939', '169671', '17'), +('1', '93', '22', '39342', '0', '17'), +('1', '93', '22', '12425', '0', '17'), +('1', '93', '22', '7867', '0', '17'), +('1', '93', '22', '23597', '0', '17'), +('1', '93', '1', '111309', '166267', '17'), +('1', '93', '1', '111303', '165618', '17'), +('1', '93', '1', '111308', '165200', '17'), +('1', '93', '1', '111305', '163724', '17'), +('1', '93', '2', '94056', '104897', '17'), +('1', '93', '2', '62985', '104058', '17'), +('1', '93', '2', '89368', '99576', '17'), +('1', '93', '2', '104403', '87997', '17'), +('1', '93', '3', '111312', '165477', '17'), +('1', '93', '3', '111313', '164274', '17'), +('1', '93', '3', '111315', '164170', '17'), +('1', '93', '3', '111316', '161638', '17'), +('1', '93', '5', '111320', '163960', '17'), +('1', '93', '5', '111318', '163756', '17'), +('1', '93', '5', '111319', '161155', '17'), +('1', '93', '5', '111019', '144110', '17'), +('1', '93', '8', '111331', '166336', '17'), +('1', '93', '8', '111328', '165563', '17'), +('1', '93', '8', '111332', '161126', '17'), +('1', '93', '8', '111030', '146456', '17'), +('1', '93', '6', '111322', '164383', '17'), +('1', '93', '6', '111324', '164093', '17'), +('1', '93', '6', '111326', '161151', '17'), +('1', '93', '6', '111021', '144503', '17'), +('1', '93', '17', '56046', '110079', '17'), +('1', '93', '17', '81765', '109638', '17'), +('1', '93', '17', '56083', '108954', '17'), +('1', '93', '17', '104406', '94400', '17'), +('1', '93', '7', '94053', '105674', '17'), +('1', '93', '7', '56079', '105301', '17'), +('1', '93', '7', '89369', '100573', '17'), +('1', '93', '7', '104404', '88113', '17'), +('1', '93', '9', '67098', '168821', '17'), +('1', '93', '9', '56031', '101949', '17'), +('1', '93', '9', '62992', '101842', '17'), +('1', '93', '9', '56033', '101745', '17'), +('1', '93', '15', '111343', '165594', '17'), +('1', '93', '15', '111347', '165336', '17'), +('1', '93', '15', '111341', '165133', '17'), +('1', '93', '15', '111345', '163494', '17'), +('1', '93', '20', '111354', '190752', '17'), +('1', '93', '20', '111355', '187951', '17'), +('1', '93', '20', '111353', '187391', '17'), +('1', '93', '20', '111351', '186681', '17'), +('1', '93', '12', '81795', '103134', '17'), +('1', '93', '12', '56073', '102638', '17'), +('1', '93', '12', '89366', '97297', '17'), +('1', '93', '12', '104401', '87269', '17'), +('1', '93', '18', '62986', '107171', '17'), +('1', '93', '18', '56041', '106376', '17'), +('1', '93', '18', '62987', '106174', '17'), +('1', '93', '18', '94054', '105405', '17'), +('1', '93', '19', '62990', '105702', '17'), +('1', '93', '19', '56037', '105326', '17'), +('1', '93', '19', '56075', '104652', '17'), +('1', '93', '19', '81763', '103925', '17'), +('1', '93', '13', '111871', '388891', '17'), +('1', '93', '13', '111815', '386253', '17'), +('1', '93', '13', '111515', '368467', '17'), +('1', '93', '13', '111512', '368453', '17'), +('1', '93', '14', '111871', '388891', '17'), +('1', '93', '14', '111815', '386253', '17'), +('1', '93', '14', '111515', '368467', '17'), +('1', '93', '14', '111512', '368453', '17'), +('1', '93', '11', '111529', '238354', '17'), +('1', '93', '11', '111229', '222599', '17'), +('1', '93', '11', '106769', '169824', '17'), +('1', '93', '11', '62939', '169799', '17'), +('1', '94', '22', '39342', '0', '17'), +('1', '94', '22', '12425', '0', '17'), +('1', '94', '22', '7867', '0', '17'), +('1', '94', '22', '23597', '0', '17'), +('1', '94', '1', '111309', '166270', '17'), +('1', '94', '1', '111303', '165624', '17'), +('1', '94', '1', '111308', '165204', '17'), +('1', '94', '1', '111305', '163729', '17'), +('1', '94', '2', '94056', '104901', '17'), +('1', '94', '2', '62985', '104060', '17'), +('1', '94', '2', '89368', '99581', '17'), +('1', '94', '2', '104403', '88000', '17'), +('1', '94', '3', '111312', '165482', '17'), +('1', '94', '3', '111313', '164278', '17'), +('1', '94', '3', '111315', '164177', '17'), +('1', '94', '3', '111316', '161642', '17'), +('1', '94', '5', '111320', '163965', '17'), +('1', '94', '5', '111318', '163759', '17'), +('1', '94', '5', '111319', '161160', '17'), +('1', '94', '5', '111019', '144115', '17'), +('1', '94', '8', '111331', '166341', '17'), +('1', '94', '8', '111328', '165568', '17'), +('1', '94', '8', '111332', '161129', '17'), +('1', '94', '8', '111030', '146461', '17'), +('1', '94', '6', '111322', '164387', '17'), +('1', '94', '6', '111324', '164098', '17'), +('1', '94', '6', '111326', '161155', '17'), +('1', '94', '6', '111021', '144507', '17'), +('1', '94', '17', '56046', '110086', '17'), +('1', '94', '17', '81765', '109642', '17'), +('1', '94', '17', '56083', '108957', '17'), +('1', '94', '17', '104406', '94407', '17'), +('1', '94', '7', '94053', '105679', '17'), +('1', '94', '7', '56079', '105306', '17'), +('1', '94', '7', '89369', '100577', '17'), +('1', '94', '7', '104404', '88117', '17'), +('1', '94', '9', '67098', '168825', '17'), +('1', '94', '9', '56031', '101952', '17'), +('1', '94', '9', '62992', '101847', '17'), +('1', '94', '9', '56033', '101747', '17'), +('1', '94', '15', '111343', '165597', '17'), +('1', '94', '15', '111347', '165341', '17'), +('1', '94', '15', '111341', '165139', '17'), +('1', '94', '15', '111345', '163498', '17'), +('1', '94', '20', '111354', '190757', '17'), +('1', '94', '20', '111355', '187954', '17'), +('1', '94', '20', '111353', '187396', '17'), +('1', '94', '20', '111351', '186684', '17'), +('1', '94', '12', '81795', '103139', '17'), +('1', '94', '12', '56073', '102644', '17'), +('1', '94', '12', '89366', '97301', '17'), +('1', '94', '12', '104401', '87273', '17'), +('1', '94', '18', '62986', '107178', '17'), +('1', '94', '18', '56041', '106378', '17'), +('1', '94', '18', '62987', '106176', '17'), +('1', '94', '18', '94054', '105410', '17'), +('1', '94', '19', '62990', '105707', '17'), +('1', '94', '19', '56037', '105330', '17'), +('1', '94', '19', '56075', '104656', '17'), +('1', '94', '19', '81763', '103929', '17'), +('1', '94', '13', '111871', '389491', '17'), +('1', '94', '13', '111815', '386824', '17'), +('1', '94', '13', '111515', '369038', '17'), +('1', '94', '13', '111512', '369024', '17'), +('1', '94', '14', '111871', '389491', '17'), +('1', '94', '14', '111815', '386824', '17'), +('1', '94', '14', '111515', '369038', '17'), +('1', '94', '14', '111512', '369024', '17'), +('1', '94', '11', '111529', '238500', '17'), +('1', '94', '11', '111229', '222736', '17'), +('1', '94', '11', '106769', '169951', '17'), +('1', '94', '11', '62939', '169927', '17'), +('1', '95', '22', '39342', '0', '18'), +('1', '95', '22', '12425', '0', '18'), +('1', '95', '22', '7867', '0', '18'), +('1', '95', '22', '23597', '0', '18'), +('1', '95', '1', '111309', '166274', '18'), +('1', '95', '1', '111303', '165630', '18'), +('1', '95', '1', '111308', '165209', '18'), +('1', '95', '1', '111305', '163733', '18'), +('1', '95', '2', '94056', '104905', '18'), +('1', '95', '2', '62985', '104063', '18'), +('1', '95', '2', '89368', '99585', '18'), +('1', '95', '2', '104403', '88004', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '95', '3', '111312', '165487', '18'), +('1', '95', '3', '111313', '164281', '18'), +('1', '95', '3', '111315', '164184', '18'), +('1', '95', '3', '111316', '161647', '18'), +('1', '95', '5', '111320', '163970', '18'), +('1', '95', '5', '111318', '163763', '18'), +('1', '95', '5', '111319', '161166', '18'), +('1', '95', '5', '111019', '144120', '18'), +('1', '95', '8', '111331', '166346', '18'), +('1', '95', '8', '111328', '165574', '18'), +('1', '95', '8', '111332', '161132', '18'), +('1', '95', '8', '111030', '146466', '18'), +('1', '95', '6', '111322', '164390', '18'), +('1', '95', '6', '111324', '164103', '18'), +('1', '95', '6', '111326', '161160', '18'), +('1', '95', '6', '111021', '144510', '18'), +('1', '95', '17', '56046', '110092', '18'), +('1', '95', '17', '81765', '109645', '18'), +('1', '95', '17', '56083', '108959', '18'), +('1', '95', '17', '104406', '94414', '18'), +('1', '95', '7', '94053', '105683', '18'), +('1', '95', '7', '56079', '105311', '18'), +('1', '95', '7', '89369', '100582', '18'), +('1', '95', '7', '104404', '88121', '18'), +('1', '95', '9', '67098', '168830', '18'), +('1', '95', '9', '56031', '101954', '18'), +('1', '95', '9', '62992', '101851', '18'), +('1', '95', '9', '56033', '101750', '18'), +('1', '95', '15', '111343', '165600', '18'), +('1', '95', '15', '111347', '165346', '18'), +('1', '95', '15', '111341', '165146', '18'), +('1', '95', '15', '111345', '163501', '18'), +('1', '95', '20', '111354', '190761', '18'), +('1', '95', '20', '111355', '187957', '18'), +('1', '95', '20', '111353', '187401', '18'), +('1', '95', '20', '111351', '186687', '18'), +('1', '95', '12', '81795', '103145', '18'), +('1', '95', '12', '56073', '102651', '18'), +('1', '95', '12', '89366', '97305', '18'), +('1', '95', '12', '104401', '87278', '18'), +('1', '95', '18', '62986', '107184', '18'), +('1', '95', '18', '56041', '106380', '18'), +('1', '95', '18', '62987', '106179', '18'), +('1', '95', '18', '94054', '105415', '18'), +('1', '95', '19', '62990', '105711', '18'), +('1', '95', '19', '56037', '105335', '18'), +('1', '95', '19', '56075', '104661', '18'), +('1', '95', '19', '81763', '103932', '18'), +('1', '95', '13', '111871', '390063', '18'), +('1', '95', '13', '111815', '387396', '18'), +('1', '95', '13', '111515', '369609', '18'), +('1', '95', '13', '111512', '369595', '18'), +('1', '95', '14', '111871', '390063', '18'), +('1', '95', '14', '111815', '387396', '18'), +('1', '95', '14', '111515', '369609', '18'), +('1', '95', '14', '111512', '369595', '18'), +('1', '95', '11', '111529', '238646', '18'), +('1', '95', '11', '111229', '222882', '18'), +('1', '95', '11', '106769', '170078', '18'), +('1', '95', '11', '62939', '170054', '18'), +('1', '96', '22', '39342', '0', '18'), +('1', '96', '22', '12425', '0', '18'), +('1', '96', '22', '7867', '0', '18'), +('1', '96', '22', '23597', '0', '18'), +('1', '96', '1', '111309', '166277', '18'), +('1', '96', '1', '111303', '165636', '18'), +('1', '96', '1', '111308', '165214', '18'), +('1', '96', '1', '111305', '163738', '18'), +('1', '96', '2', '94056', '104909', '18'), +('1', '96', '2', '62985', '104066', '18'), +('1', '96', '2', '89368', '99590', '18'), +('1', '96', '2', '104403', '88008', '18'), +('1', '96', '3', '111312', '165491', '18'), +('1', '96', '3', '111313', '164285', '18'), +('1', '96', '3', '111315', '164190', '18'), +('1', '96', '3', '111316', '161651', '18'), +('1', '96', '5', '111320', '163975', '18'), +('1', '96', '5', '111318', '163766', '18'), +('1', '96', '5', '111319', '161172', '18'), +('1', '96', '5', '111019', '144125', '18'), +('1', '96', '8', '111331', '166352', '18'), +('1', '96', '8', '111328', '165579', '18'), +('1', '96', '8', '111332', '161136', '18'), +('1', '96', '8', '111030', '146472', '18'), +('1', '96', '6', '111322', '164394', '18'), +('1', '96', '6', '111324', '164109', '18'), +('1', '96', '6', '111326', '161164', '18'), +('1', '96', '6', '111021', '144514', '18'), +('1', '96', '17', '56046', '110098', '18'), +('1', '96', '17', '81765', '109649', '18'), +('1', '96', '17', '56083', '108962', '18'), +('1', '96', '17', '104406', '94421', '18'), +('1', '96', '7', '94053', '105688', '18'), +('1', '96', '7', '56079', '105316', '18'), +('1', '96', '7', '89369', '100587', '18'), +('1', '96', '7', '104404', '88125', '18'), +('1', '96', '9', '67098', '168834', '18'), +('1', '96', '9', '56031', '101957', '18'), +('1', '96', '9', '62992', '101856', '18'), +('1', '96', '9', '56033', '101752', '18'), +('1', '96', '15', '111343', '165604', '18'), +('1', '96', '15', '111347', '165352', '18'), +('1', '96', '15', '111341', '165152', '18'), +('1', '96', '15', '111345', '163505', '18'), +('1', '96', '20', '111354', '190765', '18'), +('1', '96', '20', '111355', '187960', '18'), +('1', '96', '20', '111353', '187406', '18'), +('1', '96', '20', '111351', '186690', '18'), +('1', '96', '12', '81795', '103150', '18'), +('1', '96', '12', '56073', '102657', '18'), +('1', '96', '12', '89366', '97309', '18'), +('1', '96', '12', '104401', '87283', '18'), +('1', '96', '18', '62986', '107191', '18'), +('1', '96', '18', '56041', '106382', '18'), +('1', '96', '18', '62987', '106181', '18'), +('1', '96', '18', '94054', '105420', '18'), +('1', '96', '19', '62990', '105716', '18'), +('1', '96', '19', '56037', '105339', '18'), +('1', '96', '19', '56075', '104665', '18'), +('1', '96', '19', '81763', '103936', '18'), +('1', '96', '13', '111871', '390635', '18'), +('1', '96', '13', '111815', '387996', '18'), +('1', '96', '13', '111515', '370180', '18'), +('1', '96', '13', '111512', '370166', '18'), +('1', '96', '14', '111871', '390635', '18'), +('1', '96', '14', '111815', '387996', '18'), +('1', '96', '14', '111515', '370180', '18'), +('1', '96', '14', '111512', '370166', '18'), +('1', '96', '11', '111529', '238802', '18'), +('1', '96', '11', '111229', '223028', '18'), +('1', '96', '11', '106769', '170205', '18'), +('1', '96', '11', '62939', '170173', '18'), +('1', '97', '22', '39342', '0', '18'), +('1', '97', '22', '12425', '0', '18'), +('1', '97', '22', '7867', '0', '18'), +('1', '97', '22', '23597', '0', '18'), +('1', '97', '1', '111309', '166281', '18'), +('1', '97', '1', '111303', '165642', '18'), +('1', '97', '1', '111308', '165218', '18'), +('1', '97', '1', '111305', '163742', '18'), +('1', '97', '2', '94056', '104913', '18'), +('1', '97', '2', '62985', '104069', '18'), +('1', '97', '2', '89368', '99595', '18'), +('1', '97', '2', '104403', '88011', '18'), +('1', '97', '3', '111312', '165496', '18'), +('1', '97', '3', '111313', '164288', '18'), +('1', '97', '3', '111315', '164197', '18'), +('1', '97', '3', '111316', '161656', '18'), +('1', '97', '5', '111320', '163979', '18'), +('1', '97', '5', '111318', '163769', '18'), +('1', '97', '5', '111319', '161178', '18'), +('1', '97', '5', '111019', '144129', '18'), +('1', '97', '8', '111331', '166357', '18'), +('1', '97', '8', '111328', '165584', '18'), +('1', '97', '8', '111332', '161139', '18'), +('1', '97', '8', '111030', '146477', '18'), +('1', '97', '6', '111322', '164398', '18'), +('1', '97', '6', '111324', '164114', '18'), +('1', '97', '6', '111326', '161169', '18'), +('1', '97', '6', '111021', '144518', '18'), +('1', '97', '17', '56046', '110105', '18'), +('1', '97', '17', '81765', '109653', '18'), +('1', '97', '17', '56083', '108965', '18'), +('1', '97', '17', '104406', '94427', '18'), +('1', '97', '7', '94053', '105693', '18'), +('1', '97', '7', '56079', '105322', '18'), +('1', '97', '7', '89369', '100592', '18'), +('1', '97', '7', '104404', '88130', '18'), +('1', '97', '9', '67098', '168838', '18'), +('1', '97', '9', '56031', '101960', '18'), +('1', '97', '9', '62992', '101860', '18'), +('1', '97', '9', '56033', '101755', '18'), +('1', '97', '15', '111343', '165607', '18'), +('1', '97', '15', '111347', '165357', '18'), +('1', '97', '15', '111341', '165159', '18'), +('1', '97', '15', '111345', '163508', '18'), +('1', '97', '20', '111354', '190769', '18'), +('1', '97', '20', '111355', '187963', '18'), +('1', '97', '20', '111353', '187411', '18'), +('1', '97', '20', '111351', '186693', '18'), +('1', '97', '12', '81795', '103156', '18'), +('1', '97', '12', '56073', '102663', '18'), +('1', '97', '12', '89366', '97313', '18'), +('1', '97', '12', '104401', '87288', '18'), +('1', '97', '18', '62986', '107198', '18'), +('1', '97', '18', '56041', '106384', '18'), +('1', '97', '18', '62987', '106184', '18'), +('1', '97', '18', '94054', '105425', '18'), +('1', '97', '19', '62990', '105720', '18'), +('1', '97', '19', '56037', '105344', '18'), +('1', '97', '19', '56075', '104670', '18'), +('1', '97', '19', '81763', '103939', '18'), +('1', '97', '13', '111871', '391235', '18'), +('1', '97', '13', '111815', '388567', '18'), +('1', '97', '13', '111515', '370751', '18'), +('1', '97', '13', '111512', '370709', '18'), +('1', '97', '14', '111871', '391235', '18'), +('1', '97', '14', '111815', '388567', '18'), +('1', '97', '14', '111515', '370751', '18'), +('1', '97', '14', '111512', '370709', '18'), +('1', '97', '11', '111529', '238947', '18'), +('1', '97', '11', '111229', '223175', '18'), +('1', '97', '11', '106769', '170332', '18'), +('1', '97', '11', '62939', '170300', '18'), +('1', '98', '22', '39342', '0', '18'), +('1', '98', '22', '12425', '0', '18'), +('1', '98', '22', '7867', '0', '18'), +('1', '98', '22', '23597', '0', '18'), +('1', '98', '1', '111309', '166284', '18'), +('1', '98', '1', '111303', '165648', '18'), +('1', '98', '1', '111308', '165223', '18'), +('1', '98', '1', '111305', '163747', '18'), +('1', '98', '2', '94056', '104917', '18'), +('1', '98', '2', '62985', '104071', '18'), +('1', '98', '2', '89368', '99599', '18'), +('1', '98', '2', '104403', '88015', '18'), +('1', '98', '3', '111312', '165501', '18'), +('1', '98', '3', '111313', '164291', '18'), +('1', '98', '3', '111315', '164204', '18'), +('1', '98', '3', '111316', '161660', '18'), +('1', '98', '5', '111320', '163984', '18'), +('1', '98', '5', '111318', '163773', '18'), +('1', '98', '5', '111319', '161184', '18'), +('1', '98', '5', '111019', '144134', '18'), +('1', '98', '8', '111331', '166362', '18'), +('1', '98', '8', '111328', '165589', '18'), +('1', '98', '8', '111332', '161142', '18'), +('1', '98', '8', '111030', '146482', '18'), +('1', '98', '6', '111322', '164402', '18'), +('1', '98', '6', '111324', '164119', '18'), +('1', '98', '6', '111326', '161173', '18'), +('1', '98', '6', '111021', '144522', '18'), +('1', '98', '17', '56046', '110111', '18'), +('1', '98', '17', '81765', '109657', '18'), +('1', '98', '17', '56083', '108968', '18'), +('1', '98', '17', '104406', '94434', '18'), +('1', '98', '7', '94053', '105698', '18'), +('1', '98', '7', '56079', '105327', '18'), +('1', '98', '7', '89369', '100597', '18'), +('1', '98', '7', '104404', '88134', '18'), +('1', '98', '9', '67098', '168843', '18'), +('1', '98', '9', '56031', '101963', '18'), +('1', '98', '9', '62992', '101865', '18'), +('1', '98', '9', '56033', '101757', '18'), +('1', '98', '15', '111343', '165610', '18'), +('1', '98', '15', '111347', '165363', '18'), +('1', '98', '15', '111341', '165166', '18'), +('1', '98', '15', '111345', '163512', '18'), +('1', '98', '20', '111354', '190773', '18'), +('1', '98', '20', '111355', '187966', '18'), +('1', '98', '20', '111353', '187416', '18'), +('1', '98', '20', '111351', '186695', '18'), +('1', '98', '12', '81795', '103162', '18'), +('1', '98', '12', '56073', '102670', '18'), +('1', '98', '12', '89366', '97317', '18'), +('1', '98', '12', '104401', '87293', '18'), +('1', '98', '18', '62986', '107204', '18'), +('1', '98', '18', '56041', '106386', '18'), +('1', '98', '18', '62987', '106186', '18'), +('1', '98', '18', '94054', '105429', '18'), +('1', '98', '19', '62990', '105725', '18'), +('1', '98', '19', '56037', '105348', '18'), +('1', '98', '19', '56075', '104674', '18'), +('1', '98', '19', '81763', '103943', '18'), +('1', '98', '13', '111871', '391807', '18'), +('1', '98', '13', '111815', '389139', '18'), +('1', '98', '13', '111515', '371322', '18'), +('1', '98', '13', '111512', '371280', '18'), +('1', '98', '14', '111871', '391807', '18'), +('1', '98', '14', '111815', '389139', '18'), +('1', '98', '14', '111515', '371322', '18'), +('1', '98', '14', '111512', '371280', '18'), +('1', '98', '11', '111529', '239103', '18'), +('1', '98', '11', '111229', '223321', '18'), +('1', '98', '11', '106769', '170459', '18'), +('1', '98', '11', '62939', '170428', '18'), +('1', '99', '22', '39342', '0', '18'), +('1', '99', '22', '12425', '0', '18'), +('1', '99', '22', '7867', '0', '18'), +('1', '99', '22', '23597', '0', '18'), +('1', '99', '1', '111309', '166288', '18'), +('1', '99', '1', '111303', '165654', '18'), +('1', '99', '1', '111308', '165228', '18'), +('1', '99', '1', '111305', '163751', '18'), +('1', '99', '2', '94056', '104921', '18'), +('1', '99', '2', '62985', '104074', '18'), +('1', '99', '2', '89368', '99604', '18'), +('1', '99', '2', '104403', '88018', '18'), +('1', '99', '3', '111312', '165505', '18'), +('1', '99', '3', '111313', '164295', '18'), +('1', '99', '3', '111315', '164211', '18'), +('1', '99', '3', '111316', '161665', '18'), +('1', '99', '5', '111320', '163989', '18'), +('1', '99', '5', '111318', '163776', '18'), +('1', '99', '5', '111319', '161190', '18'), +('1', '99', '5', '111019', '144139', '18'), +('1', '99', '8', '111331', '166367', '18'), +('1', '99', '8', '111328', '165595', '18'), +('1', '99', '8', '111332', '161146', '18'), +('1', '99', '8', '111030', '146487', '18'), +('1', '99', '6', '111322', '164406', '18'), +('1', '99', '6', '111324', '164124', '18'), +('1', '99', '6', '111326', '161177', '18'), +('1', '99', '6', '111021', '144526', '18'), +('1', '99', '17', '56046', '110118', '18'), +('1', '99', '17', '81765', '109661', '18'), +('1', '99', '17', '56083', '108970', '18'), +('1', '99', '17', '104406', '94441', '18'), +('1', '99', '7', '94053', '105703', '18'), +('1', '99', '7', '56079', '105332', '18'), +('1', '99', '7', '89369', '100601', '18'), +('1', '99', '7', '104404', '88138', '18'), +('1', '99', '9', '67098', '168847', '18'), +('1', '99', '9', '56031', '101966', '18'), +('1', '99', '9', '62992', '101869', '18'), +('1', '99', '9', '56033', '101760', '18'), +('1', '99', '15', '111343', '165614', '18'), +('1', '99', '15', '111347', '165368', '18'), +('1', '99', '15', '111341', '165172', '18'), +('1', '99', '15', '111345', '163515', '18'), +('1', '99', '20', '111354', '190778', '18'), +('1', '99', '20', '111355', '187969', '18'), +('1', '99', '20', '111353', '187421', '18'), +('1', '99', '20', '111351', '186698', '18'), +('1', '99', '12', '81795', '103167', '18'), +('1', '99', '12', '56073', '102676', '18'), +('1', '99', '12', '89366', '97321', '18'), +('1', '99', '12', '104401', '87298', '18'), +('1', '99', '18', '62986', '107211', '18'), +('1', '99', '18', '56041', '106388', '18'), +('1', '99', '18', '62987', '106189', '18'), +('1', '99', '18', '94054', '105434', '18'), +('1', '99', '19', '62990', '105729', '18'), +('1', '99', '19', '56037', '105353', '18'), +('1', '99', '19', '56075', '104679', '18'), +('1', '99', '19', '81763', '103947', '18'), +('1', '99', '13', '111871', '392379', '18'), +('1', '99', '13', '111815', '389738', '18'), +('1', '99', '13', '111515', '371864', '18'), +('1', '99', '13', '111512', '371851', '18'), +('1', '99', '14', '111871', '392379', '18'), +('1', '99', '14', '111815', '389738', '18'), +('1', '99', '14', '111515', '371864', '18'), +('1', '99', '14', '111512', '371851', '18'), +('1', '99', '11', '111529', '239249', '18'), +('1', '99', '11', '111229', '223458', '18'), +('1', '99', '11', '106769', '170586', '18'), +('1', '99', '11', '62939', '170556', '18'), +('1', '100', '22', '39342', '0', '20'), +('1', '100', '22', '12425', '0', '20'), +('1', '100', '22', '7867', '0', '20'), +('1', '100', '22', '23597', '0', '20'), +('1', '100', '1', '98769', '276381', '20'), +('1', '100', '1', '111309', '166291', '20'), +('1', '100', '1', '111303', '165660', '20'), +('1', '100', '1', '111308', '165232', '20'), +('1', '100', '2', '94056', '104925', '20'), +('1', '100', '2', '62985', '104077', '20'), +('1', '100', '2', '89368', '99609', '20'), +('1', '100', '2', '104403', '88022', '20'), +('1', '100', '3', '111312', '165510', '20'), +('1', '100', '3', '111313', '164298', '20'), +('1', '100', '3', '111315', '164217', '20'), +('1', '100', '3', '111316', '161669', '20'), +('1', '100', '5', '111320', '163994', '20'), +('1', '100', '5', '111318', '163780', '20'), +('1', '100', '5', '111319', '161195', '20'), +('1', '100', '5', '111019', '144144', '20'), +('1', '100', '8', '111331', '166373', '20'), +('1', '100', '8', '111328', '165600', '20'), +('1', '100', '8', '111332', '161149', '20'), +('1', '100', '8', '111030', '146493', '20'), +('1', '100', '6', '111322', '164410', '20'), +('1', '100', '6', '111324', '164129', '20'), +('1', '100', '6', '111326', '161182', '20'), +('1', '100', '6', '111021', '144530', '20'), +('1', '100', '17', '117466', '369940', '20'), +('1', '100', '17', '56046', '110124', '20'), +('1', '100', '17', '81765', '109665', '20'), +('1', '100', '17', '56083', '108973', '20'), +('1', '100', '7', '94053', '105707', '20'), +('1', '100', '7', '56079', '105337', '20'), +('1', '100', '7', '89369', '100606', '20'), +('1', '100', '7', '104404', '88142', '20'), +('1', '100', '9', '67098', '168851', '20'), +('1', '100', '9', '56031', '101969', '20'), +('1', '100', '9', '62992', '101874', '20'), +('1', '100', '9', '56033', '101762', '20'), +('1', '100', '15', '111343', '165617', '20'), +('1', '100', '15', '111347', '165373', '20'), +('1', '100', '15', '111341', '165179', '20'), +('1', '100', '15', '111345', '163519', '20'), +('1', '100', '20', '111354', '190782', '20'), +('1', '100', '20', '111355', '187973', '20'), +('1', '100', '20', '111353', '187427', '20'), +('1', '100', '20', '111351', '186701', '20'), +('1', '100', '12', '81795', '103173', '20'), +('1', '100', '12', '56073', '102683', '20'), +('1', '100', '12', '89366', '97325', '20'), +('1', '100', '12', '104401', '87303', '20'), +('1', '100', '18', '62986', '107217', '20'), +('1', '100', '18', '56041', '106390', '20'), +('1', '100', '18', '62987', '106191', '20'), +('1', '100', '18', '94054', '105439', '20'), +('1', '100', '19', '62990', '105734', '20'), +('1', '100', '19', '56037', '105357', '20'), +('1', '100', '19', '56075', '104683', '20'), +('1', '100', '19', '81763', '103950', '20'), +('1', '100', '13', '111871', '394084', '20'), +('1', '100', '13', '111815', '391443', '20'), +('1', '100', '13', '111515', '373568', '20'), +('1', '100', '13', '111512', '373555', '20'), +('1', '100', '14', '111871', '394084', '20'), +('1', '100', '14', '111815', '391443', '20'), +('1', '100', '14', '111515', '373568', '20'), +('1', '100', '14', '111512', '373555', '20'), +('1', '100', '11', '111529', '239404', '20'), +('1', '100', '11', '111229', '223604', '20'), +('1', '100', '11', '133816', '210724', '20'), +('1', '100', '11', '106769', '170722', '20'), +('1', '100', '22', '39342', '0', '19'), +('1', '100', '22', '12425', '0', '19'), +('1', '100', '22', '7867', '0', '19'), +('1', '100', '22', '23597', '0', '19'), +('1', '100', '1', '98769', '276381', '19'), +('1', '100', '1', '111309', '166291', '19'), +('1', '100', '1', '111303', '165660', '19'), +('1', '100', '1', '111308', '165232', '19'), +('1', '100', '2', '94056', '104925', '19'), +('1', '100', '2', '62985', '104077', '19'), +('1', '100', '2', '89368', '99609', '19'), +('1', '100', '2', '104403', '88022', '19'), +('1', '100', '3', '111312', '165510', '19'), +('1', '100', '3', '111313', '164298', '19'), +('1', '100', '3', '111315', '164217', '19'), +('1', '100', '3', '111316', '161669', '19'), +('1', '100', '5', '111320', '163994', '19'), +('1', '100', '5', '111318', '163780', '19'), +('1', '100', '5', '111319', '161195', '19'), +('1', '100', '5', '111019', '144144', '19'), +('1', '100', '8', '111331', '166373', '19'), +('1', '100', '8', '111328', '165600', '19'), +('1', '100', '8', '111332', '161149', '19'), +('1', '100', '8', '111030', '146493', '19'), +('1', '100', '6', '111322', '164410', '19'), +('1', '100', '6', '111324', '164129', '19'), +('1', '100', '6', '111326', '161182', '19'), +('1', '100', '6', '111021', '144530', '19'), +('1', '100', '17', '117466', '369940', '19'), +('1', '100', '17', '56046', '110124', '19'), +('1', '100', '17', '81765', '109665', '19'), +('1', '100', '17', '56083', '108973', '19'), +('1', '100', '7', '94053', '105707', '19'), +('1', '100', '7', '56079', '105337', '19'), +('1', '100', '7', '89369', '100606', '19'), +('1', '100', '7', '104404', '88142', '19'), +('1', '100', '9', '67098', '168851', '19'), +('1', '100', '9', '56031', '101969', '19'), +('1', '100', '9', '62992', '101874', '19'), +('1', '100', '9', '56033', '101762', '19'), +('1', '100', '15', '111343', '165617', '19'), +('1', '100', '15', '111347', '165373', '19'), +('1', '100', '15', '111341', '165179', '19'), +('1', '100', '15', '111345', '163519', '19'), +('1', '100', '20', '111354', '190782', '19'), +('1', '100', '20', '111355', '187973', '19'), +('1', '100', '20', '111353', '187427', '19'), +('1', '100', '20', '111351', '186701', '19'), +('1', '100', '12', '81795', '103173', '19'), +('1', '100', '12', '56073', '102683', '19'), +('1', '100', '12', '89366', '97325', '19'), +('1', '100', '12', '104401', '87303', '19'), +('1', '100', '18', '62986', '107217', '19'), +('1', '100', '18', '56041', '106390', '19'), +('1', '100', '18', '62987', '106191', '19'), +('1', '100', '18', '94054', '105439', '19'), +('1', '100', '19', '62990', '105734', '19'), +('1', '100', '19', '56037', '105357', '19'), +('1', '100', '19', '56075', '104683', '19'), +('1', '100', '19', '81763', '103950', '19'), +('1', '100', '13', '111871', '392950', '19'), +('1', '100', '13', '111815', '390310', '19'), +('1', '100', '13', '111515', '372435', '19'), +('1', '100', '13', '111512', '372422', '19'), +('1', '100', '14', '111871', '392950', '19'), +('1', '100', '14', '111815', '390310', '19'), +('1', '100', '14', '111515', '372435', '19'), +('1', '100', '14', '111512', '372422', '19'), +('1', '100', '11', '111529', '239404', '19'), +('1', '100', '11', '111229', '223604', '19'), +('1', '100', '11', '133816', '210724', '19'), +('1', '100', '11', '106769', '170722', '19'), +('1', '101', '22', '39342', '0', '20'), +('1', '101', '22', '12425', '0', '20'), +('1', '101', '22', '7867', '0', '20'), +('1', '101', '22', '23597', '0', '20'), +('1', '101', '1', '98769', '276384', '20'), +('1', '101', '1', '111309', '166295', '20'), +('1', '101', '1', '111303', '165666', '20'), +('1', '101', '1', '111308', '165237', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '101', '2', '94056', '104930', '20'), +('1', '101', '2', '62985', '104080', '20'), +('1', '101', '2', '89368', '99614', '20'), +('1', '101', '2', '104403', '88026', '20'), +('1', '101', '3', '111312', '165515', '20'), +('1', '101', '3', '111313', '164302', '20'), +('1', '101', '3', '111315', '164225', '20'), +('1', '101', '3', '111316', '161674', '20'), +('1', '101', '5', '111320', '163999', '20'), +('1', '101', '5', '111318', '163783', '20'), +('1', '101', '5', '111319', '161202', '20'), +('1', '101', '5', '111019', '144149', '20'), +('1', '101', '8', '111331', '166378', '20'), +('1', '101', '8', '111328', '165605', '20'), +('1', '101', '8', '111332', '161152', '20'), +('1', '101', '8', '111030', '146498', '20'), +('1', '101', '6', '111322', '164414', '20'), +('1', '101', '6', '111324', '164134', '20'), +('1', '101', '6', '111326', '161186', '20'), +('1', '101', '6', '111021', '144534', '20'), +('1', '101', '17', '117466', '369945', '20'), +('1', '101', '17', '56046', '110131', '20'), +('1', '101', '17', '81765', '109669', '20'), +('1', '101', '17', '56083', '108976', '20'), +('1', '101', '7', '94053', '105712', '20'), +('1', '101', '7', '56079', '105343', '20'), +('1', '101', '7', '89369', '100611', '20'), +('1', '101', '7', '104404', '88146', '20'), +('1', '101', '9', '67098', '168856', '20'), +('1', '101', '9', '56031', '101972', '20'), +('1', '101', '9', '62992', '101879', '20'), +('1', '101', '9', '56033', '101765', '20'), +('1', '101', '15', '111343', '165620', '20'), +('1', '101', '15', '111347', '165379', '20'), +('1', '101', '15', '111341', '165186', '20'), +('1', '101', '15', '111345', '163522', '20'), +('1', '101', '20', '111354', '190786', '20'), +('1', '101', '20', '111355', '187976', '20'), +('1', '101', '20', '111353', '187432', '20'), +('1', '101', '20', '111351', '186704', '20'), +('1', '101', '12', '81795', '103179', '20'), +('1', '101', '12', '56073', '102690', '20'), +('1', '101', '12', '89366', '97330', '20'), +('1', '101', '12', '104401', '87308', '20'), +('1', '101', '18', '62986', '107225', '20'), +('1', '101', '18', '56041', '106392', '20'), +('1', '101', '18', '62987', '106194', '20'), +('1', '101', '18', '94054', '105445', '20'), +('1', '101', '19', '62990', '105739', '20'), +('1', '101', '19', '56037', '105362', '20'), +('1', '101', '19', '56075', '104688', '20'), +('1', '101', '19', '81763', '103954', '20'), +('1', '101', '13', '111871', '394684', '20'), +('1', '101', '13', '111815', '392015', '20'), +('1', '101', '13', '111515', '374139', '20'), +('1', '101', '13', '111512', '374126', '20'), +('1', '101', '14', '111871', '394684', '20'), +('1', '101', '14', '111815', '392015', '20'), +('1', '101', '14', '111515', '374139', '20'), +('1', '101', '14', '111512', '374126', '20'), +('1', '101', '11', '111529', '239550', '20'), +('1', '101', '11', '111229', '223750', '20'), +('1', '101', '11', '133816', '210728', '20'), +('1', '101', '11', '106769', '170849', '20'), +('1', '102', '22', '39342', '0', '20'), +('1', '102', '22', '12425', '0', '20'), +('1', '102', '22', '7867', '0', '20'), +('1', '102', '22', '23597', '0', '20'), +('1', '102', '1', '98769', '276388', '20'), +('1', '102', '1', '111309', '166298', '20'), +('1', '102', '1', '111303', '165672', '20'), +('1', '102', '1', '111308', '165242', '20'), +('1', '102', '2', '94056', '104934', '20'), +('1', '102', '2', '62985', '104082', '20'), +('1', '102', '2', '89368', '99618', '20'), +('1', '102', '2', '104403', '88029', '20'), +('1', '102', '3', '111312', '165520', '20'), +('1', '102', '3', '111313', '164306', '20'), +('1', '102', '3', '111315', '164231', '20'), +('1', '102', '3', '111316', '161679', '20'), +('1', '102', '5', '111320', '164004', '20'), +('1', '102', '5', '111318', '163787', '20'), +('1', '102', '5', '111319', '161208', '20'), +('1', '102', '5', '111019', '144154', '20'), +('1', '102', '8', '111331', '166384', '20'), +('1', '102', '8', '111328', '165611', '20'), +('1', '102', '8', '111332', '161156', '20'), +('1', '102', '8', '111030', '146504', '20'), +('1', '102', '6', '111322', '164418', '20'), +('1', '102', '6', '111324', '164139', '20'), +('1', '102', '6', '111326', '161191', '20'), +('1', '102', '6', '111021', '144538', '20'), +('1', '102', '17', '117466', '369951', '20'), +('1', '102', '17', '56046', '110138', '20'), +('1', '102', '17', '81765', '109673', '20'), +('1', '102', '17', '56083', '108979', '20'), +('1', '102', '7', '94053', '105717', '20'), +('1', '102', '7', '56079', '105348', '20'), +('1', '102', '7', '89369', '100616', '20'), +('1', '102', '7', '104404', '88150', '20'), +('1', '102', '9', '67098', '168860', '20'), +('1', '102', '9', '56031', '101975', '20'), +('1', '102', '9', '62992', '101883', '20'), +('1', '102', '9', '56033', '101768', '20'), +('1', '102', '15', '111343', '165624', '20'), +('1', '102', '15', '111347', '165384', '20'), +('1', '102', '15', '111341', '165192', '20'), +('1', '102', '15', '111345', '163526', '20'), +('1', '102', '20', '111354', '190790', '20'), +('1', '102', '20', '111355', '187979', '20'), +('1', '102', '20', '111353', '187437', '20'), +('1', '102', '20', '111351', '186707', '20'), +('1', '102', '12', '81795', '103184', '20'), +('1', '102', '12', '56073', '102696', '20'), +('1', '102', '12', '89366', '97334', '20'), +('1', '102', '12', '104401', '87313', '20'), +('1', '102', '18', '62986', '107231', '20'), +('1', '102', '18', '56041', '106394', '20'), +('1', '102', '18', '62987', '106197', '20'), +('1', '102', '18', '94054', '105450', '20'), +('1', '102', '19', '62990', '105743', '20'), +('1', '102', '19', '56037', '105366', '20'), +('1', '102', '19', '56075', '104692', '20'), +('1', '102', '19', '81763', '103958', '20'), +('1', '102', '13', '111871', '395256', '20'), +('1', '102', '13', '111815', '392615', '20'), +('1', '102', '13', '111515', '374710', '20'), +('1', '102', '13', '111512', '374697', '20'), +('1', '102', '14', '111871', '395256', '20'), +('1', '102', '14', '111815', '392615', '20'), +('1', '102', '14', '111515', '374710', '20'), +('1', '102', '14', '111512', '374697', '20'), +('1', '102', '11', '111529', '239696', '20'), +('1', '102', '11', '111229', '223896', '20'), +('1', '102', '11', '133816', '210732', '20'), +('1', '102', '11', '106769', '170976', '20'), +('1', '103', '22', '39342', '0', '20'), +('1', '103', '22', '12425', '0', '20'), +('1', '103', '22', '7867', '0', '20'), +('1', '103', '22', '23597', '0', '20'), +('1', '103', '1', '98769', '276392', '20'), +('1', '103', '1', '111309', '166302', '20'), +('1', '103', '1', '111303', '165679', '20'), +('1', '103', '1', '111308', '165247', '20'), +('1', '103', '2', '94056', '104938', '20'), +('1', '103', '2', '62985', '104085', '20'), +('1', '103', '2', '89368', '99623', '20'), +('1', '103', '2', '104403', '88033', '20'), +('1', '103', '3', '111312', '165525', '20'), +('1', '103', '3', '111313', '164309', '20'), +('1', '103', '3', '111315', '164239', '20'), +('1', '103', '3', '111316', '161684', '20'), +('1', '103', '5', '111320', '164009', '20'), +('1', '103', '5', '111318', '163791', '20'), +('1', '103', '5', '111319', '161214', '20'), +('1', '103', '5', '111019', '144159', '20'), +('1', '103', '8', '111331', '166389', '20'), +('1', '103', '8', '111328', '165616', '20'), +('1', '103', '8', '111332', '161159', '20'), +('1', '103', '8', '111030', '146509', '20'), +('1', '103', '6', '111322', '164422', '20'), +('1', '103', '6', '111324', '164145', '20'), +('1', '103', '6', '111326', '161195', '20'), +('1', '103', '6', '111021', '144542', '20'), +('1', '103', '17', '117466', '369957', '20'), +('1', '103', '17', '56046', '110145', '20'), +('1', '103', '17', '81765', '109677', '20'), +('1', '103', '17', '56083', '108981', '20'), +('1', '103', '7', '94053', '105722', '20'), +('1', '103', '7', '56079', '105354', '20'), +('1', '103', '7', '89369', '100621', '20'), +('1', '103', '7', '104404', '88154', '20'), +('1', '103', '9', '67098', '168865', '20'), +('1', '103', '9', '56031', '101978', '20'), +('1', '103', '9', '62992', '101888', '20'), +('1', '103', '9', '56033', '101770', '20'), +('1', '103', '15', '111343', '165627', '20'), +('1', '103', '15', '111347', '165390', '20'), +('1', '103', '15', '111341', '165199', '20'), +('1', '103', '15', '111345', '163529', '20'), +('1', '103', '20', '111354', '190795', '20'), +('1', '103', '20', '111355', '187983', '20'), +('1', '103', '20', '111353', '187443', '20'), +('1', '103', '20', '111351', '186710', '20'), +('1', '103', '12', '81795', '103190', '20'), +('1', '103', '12', '56073', '102703', '20'), +('1', '103', '12', '89366', '97338', '20'), +('1', '103', '12', '104401', '87319', '20'), +('1', '103', '18', '62986', '107238', '20'), +('1', '103', '18', '56041', '106396', '20'), +('1', '103', '18', '62987', '106199', '20'), +('1', '103', '18', '94054', '105455', '20'), +('1', '103', '19', '62990', '105748', '20'), +('1', '103', '19', '56037', '105371', '20'), +('1', '103', '19', '56075', '104697', '20'), +('1', '103', '19', '81763', '103962', '20'), +('1', '103', '13', '111871', '395828', '20'), +('1', '103', '13', '111815', '393187', '20'), +('1', '103', '13', '111515', '375281', '20'), +('1', '103', '13', '111512', '375240', '20'), +('1', '103', '14', '111871', '395828', '20'), +('1', '103', '14', '111815', '393187', '20'), +('1', '103', '14', '111515', '375281', '20'), +('1', '103', '14', '111512', '375240', '20'), +('1', '103', '11', '111529', '239851', '20'), +('1', '103', '11', '111229', '224043', '20'), +('1', '103', '11', '133816', '210736', '20'), +('1', '103', '11', '106769', '171104', '20'), +('1', '104', '22', '39342', '0', '20'), +('1', '104', '22', '12425', '0', '20'), +('1', '104', '22', '7867', '0', '20'), +('1', '104', '22', '23597', '0', '20'), +('1', '104', '1', '98769', '276395', '20'), +('1', '104', '1', '111309', '166305', '20'), +('1', '104', '1', '111303', '165685', '20'), +('1', '104', '1', '111308', '165252', '20'), +('1', '104', '2', '94056', '104942', '20'), +('1', '104', '2', '62985', '104088', '20'), +('1', '104', '2', '89368', '99628', '20'), +('1', '104', '2', '104403', '88037', '20'), +('1', '104', '3', '111312', '165529', '20'), +('1', '104', '3', '111313', '164313', '20'), +('1', '104', '3', '111315', '164245', '20'), +('1', '104', '3', '111316', '161688', '20'), +('1', '104', '5', '111320', '164014', '20'), +('1', '104', '5', '111318', '163794', '20'), +('1', '104', '5', '111319', '161220', '20'), +('1', '104', '5', '111019', '144164', '20'), +('1', '104', '8', '111331', '166394', '20'), +('1', '104', '8', '111328', '165622', '20'), +('1', '104', '8', '111332', '161163', '20'), +('1', '104', '8', '111030', '146514', '20'), +('1', '104', '6', '111322', '164426', '20'), +('1', '104', '6', '111324', '164150', '20'), +('1', '104', '6', '111326', '161200', '20'), +('1', '104', '6', '111021', '144546', '20'), +('1', '104', '17', '117466', '369962', '20'), +('1', '104', '17', '56046', '110151', '20'), +('1', '104', '17', '81765', '109681', '20'), +('1', '104', '17', '56083', '108984', '20'), +('1', '104', '7', '94053', '105727', '20'), +('1', '104', '7', '56079', '105359', '20'), +('1', '104', '7', '89369', '100626', '20'), +('1', '104', '7', '104404', '88158', '20'), +('1', '104', '9', '67098', '168869', '20'), +('1', '104', '9', '56031', '101980', '20'), +('1', '104', '9', '62992', '101892', '20'), +('1', '104', '9', '56033', '101773', '20'), +('1', '104', '15', '111343', '165631', '20'), +('1', '104', '15', '111347', '165396', '20'), +('1', '104', '15', '111341', '165206', '20'), +('1', '104', '15', '111345', '163533', '20'), +('1', '104', '20', '111354', '190799', '20'), +('1', '104', '20', '111355', '187986', '20'), +('1', '104', '20', '111353', '187448', '20'), +('1', '104', '20', '111351', '186713', '20'), +('1', '104', '12', '81795', '103196', '20'), +('1', '104', '12', '56073', '102710', '20'), +('1', '104', '12', '89366', '97342', '20'), +('1', '104', '12', '104401', '87324', '20'), +('1', '104', '18', '62986', '107245', '20'), +('1', '104', '18', '56041', '106398', '20'), +('1', '104', '18', '62987', '106202', '20'), +('1', '104', '18', '94054', '105460', '20'), +('1', '104', '19', '62990', '105752', '20'), +('1', '104', '19', '56037', '105376', '20'), +('1', '104', '19', '56075', '104702', '20'), +('1', '104', '19', '81763', '103965', '20'), +('1', '104', '13', '111871', '396428', '20'), +('1', '104', '13', '111815', '393758', '20'), +('1', '104', '13', '111515', '375852', '20'), +('1', '104', '13', '111512', '375811', '20'), +('1', '104', '14', '111871', '396428', '20'), +('1', '104', '14', '111815', '393758', '20'), +('1', '104', '14', '111515', '375852', '20'), +('1', '104', '14', '111512', '375811', '20'), +('1', '104', '11', '111529', '239997', '20'), +('1', '104', '11', '111229', '224189', '20'), +('1', '104', '11', '133816', '210740', '20'), +('1', '104', '11', '106769', '171231', '20'), +('1', '105', '22', '39342', '0', '23'), +('1', '105', '22', '12425', '0', '23'), +('1', '105', '22', '7867', '0', '23'), +('1', '105', '22', '23597', '0', '23'), +('1', '105', '1', '98769', '276399', '23'), +('1', '105', '1', '111309', '166309', '23'), +('1', '105', '1', '111303', '165691', '23'), +('1', '105', '1', '111308', '165257', '23'), +('1', '105', '2', '94056', '104946', '23'), +('1', '105', '2', '62985', '104091', '23'), +('1', '105', '2', '89368', '99633', '23'), +('1', '105', '2', '104403', '88041', '23'), +('1', '105', '3', '111312', '165534', '23'), +('1', '105', '3', '111313', '164316', '23'), +('1', '105', '3', '111315', '164252', '23'), +('1', '105', '3', '111316', '161693', '23'), +('1', '105', '5', '111320', '164019', '23'), +('1', '105', '5', '111318', '163798', '23'), +('1', '105', '5', '111319', '161226', '23'), +('1', '105', '5', '111019', '144169', '23'), +('1', '105', '8', '111331', '166400', '23'), +('1', '105', '8', '111328', '165627', '23'), +('1', '105', '8', '111332', '161166', '23'), +('1', '105', '8', '111030', '146520', '23'), +('1', '105', '6', '111322', '164430', '23'), +('1', '105', '6', '111324', '164155', '23'), +('1', '105', '6', '111326', '161204', '23'), +('1', '105', '6', '111021', '144550', '23'), +('1', '105', '17', '117466', '369968', '23'), +('1', '105', '17', '56046', '110158', '23'), +('1', '105', '17', '81765', '109685', '23'), +('1', '105', '17', '56083', '108987', '23'), +('1', '105', '7', '94053', '105732', '23'), +('1', '105', '7', '56079', '105365', '23'), +('1', '105', '7', '89369', '100631', '23'), +('1', '105', '7', '104404', '88163', '23'), +('1', '105', '9', '67098', '168874', '23'), +('1', '105', '9', '56031', '101983', '23'), +('1', '105', '9', '62992', '101897', '23'), +('1', '105', '9', '56033', '101776', '23'), +('1', '105', '15', '111343', '165634', '23'), +('1', '105', '15', '111347', '165401', '23'), +('1', '105', '15', '111341', '165213', '23'), +('1', '105', '15', '111345', '163537', '23'), +('1', '105', '20', '111354', '190804', '23'), +('1', '105', '20', '111355', '187989', '23'), +('1', '105', '20', '111353', '187453', '23'), +('1', '105', '20', '111351', '186716', '23'), +('1', '105', '12', '81795', '103202', '23'), +('1', '105', '12', '56073', '102716', '23'), +('1', '105', '12', '89366', '97346', '23'), +('1', '105', '12', '104401', '87329', '23'), +('1', '105', '18', '62986', '107252', '23'), +('1', '105', '18', '56041', '106400', '23'), +('1', '105', '18', '62987', '106205', '23'), +('1', '105', '18', '94054', '105465', '23'), +('1', '105', '19', '62990', '105757', '23'), +('1', '105', '19', '56037', '105381', '23'), +('1', '105', '19', '56075', '104706', '23'), +('1', '105', '19', '81763', '103969', '23'), +('1', '105', '13', '111871', '397000', '23'), +('1', '105', '13', '111815', '394358', '23'), +('1', '105', '13', '111515', '376395', '23'), +('1', '105', '13', '111512', '376383', '23'), +('1', '105', '14', '111871', '397000', '23'), +('1', '105', '14', '111815', '394358', '23'), +('1', '105', '14', '111515', '376395', '23'), +('1', '105', '14', '111512', '376383', '23'), +('1', '105', '11', '111529', '240153', '23'), +('1', '105', '11', '111229', '224326', '23'), +('1', '105', '11', '133816', '210744', '23'), +('1', '105', '11', '106769', '171358', '23'), +('1', '105', '22', '39342', '0', '22'), +('1', '105', '22', '12425', '0', '22'), +('1', '105', '22', '7867', '0', '22'), +('1', '105', '22', '23597', '0', '22'), +('1', '105', '1', '98769', '276399', '22'), +('1', '105', '1', '111309', '166309', '22'), +('1', '105', '1', '111303', '165691', '22'), +('1', '105', '1', '111308', '165257', '22'), +('1', '105', '2', '94056', '104946', '22'), +('1', '105', '2', '62985', '104091', '22'), +('1', '105', '2', '89368', '99633', '22'), +('1', '105', '2', '104403', '88041', '22'), +('1', '105', '3', '111312', '165534', '22'), +('1', '105', '3', '111313', '164316', '22'), +('1', '105', '3', '111315', '164252', '22'), +('1', '105', '3', '111316', '161693', '22'), +('1', '105', '5', '111320', '164019', '22'), +('1', '105', '5', '111318', '163798', '22'), +('1', '105', '5', '111319', '161226', '22'), +('1', '105', '5', '111019', '144169', '22'), +('1', '105', '8', '111331', '166400', '22'), +('1', '105', '8', '111328', '165627', '22'), +('1', '105', '8', '111332', '161166', '22'), +('1', '105', '8', '111030', '146520', '22'), +('1', '105', '6', '111322', '164430', '22'), +('1', '105', '6', '111324', '164155', '22'), +('1', '105', '6', '111326', '161204', '22'), +('1', '105', '6', '111021', '144550', '22'), +('1', '105', '17', '117466', '369968', '22'), +('1', '105', '17', '56046', '110158', '22'), +('1', '105', '17', '81765', '109685', '22'), +('1', '105', '17', '56083', '108987', '22'), +('1', '105', '7', '94053', '105732', '22'), +('1', '105', '7', '56079', '105365', '22'), +('1', '105', '7', '89369', '100631', '22'), +('1', '105', '7', '104404', '88163', '22'), +('1', '105', '9', '67098', '168874', '22'), +('1', '105', '9', '56031', '101983', '22'), +('1', '105', '9', '62992', '101897', '22'), +('1', '105', '9', '56033', '101776', '22'), +('1', '105', '15', '111343', '165634', '22'), +('1', '105', '15', '111347', '165401', '22'), +('1', '105', '15', '111341', '165213', '22'), +('1', '105', '15', '111345', '163537', '22'), +('1', '105', '20', '111354', '190804', '22'), +('1', '105', '20', '111355', '187989', '22'), +('1', '105', '20', '111353', '187453', '22'), +('1', '105', '20', '111351', '186716', '22'), +('1', '105', '12', '81795', '103202', '22'), +('1', '105', '12', '56073', '102716', '22'), +('1', '105', '12', '89366', '97346', '22'), +('1', '105', '12', '104401', '87329', '22'), +('1', '105', '18', '62986', '107252', '22'), +('1', '105', '18', '56041', '106400', '22'), +('1', '105', '18', '62987', '106205', '22'), +('1', '105', '18', '94054', '105465', '22'), +('1', '105', '19', '62990', '105757', '22'), +('1', '105', '19', '56037', '105381', '22'), +('1', '105', '19', '56075', '104706', '22'), +('1', '105', '19', '81763', '103969', '22'), +('1', '105', '13', '111871', '397000', '22'), +('1', '105', '13', '111815', '394358', '22'), +('1', '105', '13', '111515', '376395', '22'), +('1', '105', '13', '111512', '376383', '22'), +('1', '105', '14', '111871', '397000', '22'), +('1', '105', '14', '111815', '394358', '22'), +('1', '105', '14', '111515', '376395', '22'), +('1', '105', '14', '111512', '376383', '22'), +('1', '105', '11', '111529', '240153', '22'), +('1', '105', '11', '111229', '224326', '22'), +('1', '105', '11', '133816', '210744', '22'), +('1', '105', '11', '106769', '171358', '22'), +('1', '105', '22', '39342', '0', '21'), +('1', '105', '22', '12425', '0', '21'), +('1', '105', '22', '7867', '0', '21'), +('1', '105', '22', '23597', '0', '21'), +('1', '105', '1', '98769', '276399', '21'), +('1', '105', '1', '111309', '166309', '21'), +('1', '105', '1', '111303', '165691', '21'), +('1', '105', '1', '111308', '165257', '21'), +('1', '105', '2', '94056', '104946', '21'), +('1', '105', '2', '62985', '104091', '21'), +('1', '105', '2', '89368', '99633', '21'), +('1', '105', '2', '104403', '88041', '21'), +('1', '105', '3', '111312', '165534', '21'), +('1', '105', '3', '111313', '164316', '21'), +('1', '105', '3', '111315', '164252', '21'), +('1', '105', '3', '111316', '161693', '21'), +('1', '105', '5', '111320', '164019', '21'), +('1', '105', '5', '111318', '163798', '21'), +('1', '105', '5', '111319', '161226', '21'), +('1', '105', '5', '111019', '144169', '21'), +('1', '105', '8', '111331', '166400', '21'), +('1', '105', '8', '111328', '165627', '21'), +('1', '105', '8', '111332', '161166', '21'), +('1', '105', '8', '111030', '146520', '21'), +('1', '105', '6', '111322', '164430', '21'), +('1', '105', '6', '111324', '164155', '21'), +('1', '105', '6', '111326', '161204', '21'), +('1', '105', '6', '111021', '144550', '21'), +('1', '105', '17', '117466', '369968', '21'), +('1', '105', '17', '56046', '110158', '21'), +('1', '105', '17', '81765', '109685', '21'), +('1', '105', '17', '56083', '108987', '21'), +('1', '105', '7', '94053', '105732', '21'), +('1', '105', '7', '56079', '105365', '21'), +('1', '105', '7', '89369', '100631', '21'), +('1', '105', '7', '104404', '88163', '21'), +('1', '105', '9', '67098', '168874', '21'), +('1', '105', '9', '56031', '101983', '21'), +('1', '105', '9', '62992', '101897', '21'), +('1', '105', '9', '56033', '101776', '21'), +('1', '105', '15', '111343', '165634', '21'), +('1', '105', '15', '111347', '165401', '21'), +('1', '105', '15', '111341', '165213', '21'), +('1', '105', '15', '111345', '163537', '21'), +('1', '105', '20', '111354', '190804', '21'), +('1', '105', '20', '111355', '187989', '21'), +('1', '105', '20', '111353', '187453', '21'), +('1', '105', '20', '111351', '186716', '21'), +('1', '105', '12', '81795', '103202', '21'), +('1', '105', '12', '56073', '102716', '21'), +('1', '105', '12', '89366', '97346', '21'), +('1', '105', '12', '104401', '87329', '21'), +('1', '105', '18', '62986', '107252', '21'), +('1', '105', '18', '56041', '106400', '21'), +('1', '105', '18', '62987', '106205', '21'), +('1', '105', '18', '94054', '105465', '21'), +('1', '105', '19', '62990', '105757', '21'), +('1', '105', '19', '56037', '105381', '21'), +('1', '105', '19', '56075', '104706', '21'), +('1', '105', '19', '81763', '103969', '21'), +('1', '105', '13', '111871', '397000', '21'), +('1', '105', '13', '111815', '394358', '21'), +('1', '105', '13', '111515', '376395', '21'), +('1', '105', '13', '111512', '376383', '21'), +('1', '105', '14', '111871', '397000', '21'), +('1', '105', '14', '111815', '394358', '21'), +('1', '105', '14', '111515', '376395', '21'), +('1', '105', '14', '111512', '376383', '21'), +('1', '105', '11', '111529', '240153', '21'), +('1', '105', '11', '111229', '224326', '21'), +('1', '105', '11', '133816', '210744', '21'), +('1', '105', '11', '106769', '171358', '21'), +('1', '106', '22', '39342', '0', '23'), +('1', '106', '22', '12425', '0', '23'), +('1', '106', '22', '7867', '0', '23'), +('1', '106', '22', '23597', '0', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '106', '1', '98769', '276402', '23'), +('1', '106', '1', '111309', '166313', '23'), +('1', '106', '1', '111303', '165697', '23'), +('1', '106', '1', '111308', '165261', '23'), +('1', '106', '2', '94056', '104951', '23'), +('1', '106', '2', '62985', '104094', '23'), +('1', '106', '2', '89368', '99638', '23'), +('1', '106', '2', '104403', '88044', '23'), +('1', '106', '3', '111312', '165539', '23'), +('1', '106', '3', '111313', '164320', '23'), +('1', '106', '3', '111315', '164260', '23'), +('1', '106', '3', '111316', '161698', '23'), +('1', '106', '5', '111320', '164024', '23'), +('1', '106', '5', '111318', '163801', '23'), +('1', '106', '5', '111319', '161232', '23'), +('1', '106', '5', '111019', '144174', '23'), +('1', '106', '8', '111331', '166406', '23'), +('1', '106', '8', '111328', '165633', '23'), +('1', '106', '8', '111332', '161170', '23'), +('1', '106', '8', '111030', '146526', '23'), +('1', '106', '6', '111322', '164434', '23'), +('1', '106', '6', '111324', '164161', '23'), +('1', '106', '6', '111326', '161209', '23'), +('1', '106', '6', '111021', '144554', '23'), +('1', '106', '17', '117466', '369974', '23'), +('1', '106', '17', '56046', '110165', '23'), +('1', '106', '17', '81765', '109689', '23'), +('1', '106', '17', '56083', '108990', '23'), +('1', '106', '7', '94053', '105737', '23'), +('1', '106', '7', '56079', '105370', '23'), +('1', '106', '7', '89369', '100636', '23'), +('1', '106', '7', '104404', '88167', '23'), +('1', '106', '9', '67098', '168879', '23'), +('1', '106', '9', '56031', '101986', '23'), +('1', '106', '9', '62992', '101902', '23'), +('1', '106', '9', '56033', '101778', '23'), +('1', '106', '15', '111343', '165638', '23'), +('1', '106', '15', '111347', '165407', '23'), +('1', '106', '15', '111341', '165220', '23'), +('1', '106', '15', '111345', '163540', '23'), +('1', '106', '20', '111354', '190808', '23'), +('1', '106', '20', '111355', '187992', '23'), +('1', '106', '20', '111353', '187459', '23'), +('1', '106', '20', '111351', '186719', '23'), +('1', '106', '12', '81795', '103207', '23'), +('1', '106', '12', '56073', '102723', '23'), +('1', '106', '12', '89366', '97351', '23'), +('1', '106', '12', '104401', '87334', '23'), +('1', '106', '18', '62986', '107259', '23'), +('1', '106', '18', '56041', '106402', '23'), +('1', '106', '18', '62987', '106207', '23'), +('1', '106', '18', '94054', '105470', '23'), +('1', '106', '19', '62990', '105762', '23'), +('1', '106', '19', '56037', '105385', '23'), +('1', '106', '19', '56075', '104711', '23'), +('1', '106', '19', '81763', '103973', '23'), +('1', '106', '13', '111871', '397572', '23'), +('1', '106', '13', '111815', '394930', '23'), +('1', '106', '13', '111515', '376966', '23'), +('1', '106', '13', '111512', '376954', '23'), +('1', '106', '14', '111871', '397572', '23'), +('1', '106', '14', '111815', '394930', '23'), +('1', '106', '14', '111515', '376966', '23'), +('1', '106', '14', '111512', '376954', '23'), +('1', '106', '11', '111529', '240299', '23'), +('1', '106', '11', '111229', '224472', '23'), +('1', '106', '11', '133816', '210748', '23'), +('1', '106', '11', '106769', '171485', '23'), +('1', '107', '22', '39342', '0', '23'), +('1', '107', '22', '12425', '0', '23'), +('1', '107', '22', '7867', '0', '23'), +('1', '107', '22', '23597', '0', '23'), +('1', '107', '1', '98769', '276406', '23'), +('1', '107', '1', '111309', '166316', '23'), +('1', '107', '1', '111303', '165704', '23'), +('1', '107', '1', '111308', '165266', '23'), +('1', '107', '2', '94056', '104955', '23'), +('1', '107', '2', '62985', '104096', '23'), +('1', '107', '2', '89368', '99643', '23'), +('1', '107', '2', '104403', '88048', '23'), +('1', '107', '3', '111312', '165544', '23'), +('1', '107', '3', '111313', '164324', '23'), +('1', '107', '3', '111315', '164267', '23'), +('1', '107', '3', '111316', '161702', '23'), +('1', '107', '5', '111320', '164029', '23'), +('1', '107', '5', '111318', '163805', '23'), +('1', '107', '5', '111319', '161238', '23'), +('1', '107', '5', '111019', '144179', '23'), +('1', '107', '8', '111331', '166411', '23'), +('1', '107', '8', '111328', '165638', '23'), +('1', '107', '8', '111332', '161173', '23'), +('1', '107', '8', '111030', '146531', '23'), +('1', '107', '6', '111322', '164439', '23'), +('1', '107', '6', '111324', '164166', '23'), +('1', '107', '6', '111326', '161213', '23'), +('1', '107', '6', '111021', '144559', '23'), +('1', '107', '17', '117466', '369979', '23'), +('1', '107', '17', '56046', '110172', '23'), +('1', '107', '17', '81765', '109694', '23'), +('1', '107', '17', '56083', '108993', '23'), +('1', '107', '7', '94053', '105743', '23'), +('1', '107', '7', '56079', '105376', '23'), +('1', '107', '7', '89369', '100641', '23'), +('1', '107', '7', '104404', '88171', '23'), +('1', '107', '9', '67098', '168883', '23'), +('1', '107', '9', '56031', '101990', '23'), +('1', '107', '9', '62992', '101907', '23'), +('1', '107', '9', '56033', '101781', '23'), +('1', '107', '15', '111343', '165641', '23'), +('1', '107', '15', '111347', '165413', '23'), +('1', '107', '15', '111341', '165227', '23'), +('1', '107', '15', '111345', '163544', '23'), +('1', '107', '20', '111354', '190813', '23'), +('1', '107', '20', '111355', '187996', '23'), +('1', '107', '20', '111353', '187464', '23'), +('1', '107', '20', '111351', '186722', '23'), +('1', '107', '12', '81795', '103213', '23'), +('1', '107', '12', '56073', '102730', '23'), +('1', '107', '12', '89366', '97355', '23'), +('1', '107', '12', '104401', '87339', '23'), +('1', '107', '18', '62986', '107266', '23'), +('1', '107', '18', '56041', '106404', '23'), +('1', '107', '18', '62987', '106210', '23'), +('1', '107', '18', '94054', '105476', '23'), +('1', '107', '19', '62990', '105767', '23'), +('1', '107', '19', '56037', '105390', '23'), +('1', '107', '19', '56075', '104716', '23'), +('1', '107', '19', '81763', '103977', '23'), +('1', '107', '13', '111871', '398173', '23'), +('1', '107', '13', '111815', '395502', '23'), +('1', '107', '13', '111515', '377537', '23'), +('1', '107', '13', '111512', '377525', '23'), +('1', '107', '14', '111871', '398173', '23'), +('1', '107', '14', '111815', '395502', '23'), +('1', '107', '14', '111515', '377537', '23'), +('1', '107', '14', '111512', '377525', '23'), +('1', '107', '11', '111529', '240445', '23'), +('1', '107', '11', '111229', '224619', '23'), +('1', '107', '11', '133816', '210753', '23'), +('1', '107', '11', '106769', '171612', '23'), +('1', '108', '22', '39342', '0', '23'), +('1', '108', '22', '12425', '0', '23'), +('1', '108', '22', '7867', '0', '23'), +('1', '108', '22', '23597', '0', '23'), +('1', '108', '1', '98769', '276410', '23'), +('1', '108', '1', '111309', '166320', '23'), +('1', '108', '1', '111303', '165710', '23'), +('1', '108', '1', '111308', '165271', '23'), +('1', '108', '2', '94056', '104959', '23'), +('1', '108', '2', '62985', '104099', '23'), +('1', '108', '2', '89368', '99648', '23'), +('1', '108', '2', '104403', '88052', '23'), +('1', '108', '3', '111312', '165549', '23'), +('1', '108', '3', '111313', '164327', '23'), +('1', '108', '3', '111315', '164274', '23'), +('1', '108', '3', '111316', '161707', '23'), +('1', '108', '5', '111320', '164034', '23'), +('1', '108', '5', '111318', '163809', '23'), +('1', '108', '5', '111319', '161245', '23'), +('1', '108', '5', '111019', '144184', '23'), +('1', '108', '8', '111331', '166417', '23'), +('1', '108', '8', '111328', '165644', '23'), +('1', '108', '8', '111332', '161177', '23'), +('1', '108', '8', '111030', '146537', '23'), +('1', '108', '6', '111322', '164443', '23'), +('1', '108', '6', '111324', '164172', '23'), +('1', '108', '6', '111326', '161218', '23'), +('1', '108', '6', '111021', '144563', '23'), +('1', '108', '17', '117466', '369985', '23'), +('1', '108', '17', '56046', '110178', '23'), +('1', '108', '17', '81765', '109698', '23'), +('1', '108', '17', '56083', '108996', '23'), +('1', '108', '7', '94053', '105748', '23'), +('1', '108', '7', '56079', '105381', '23'), +('1', '108', '7', '89369', '100646', '23'), +('1', '108', '7', '104404', '88176', '23'), +('1', '108', '9', '67098', '168888', '23'), +('1', '108', '9', '56031', '101993', '23'), +('1', '108', '9', '62992', '101912', '23'), +('1', '108', '9', '56033', '101784', '23'), +('1', '108', '15', '111343', '165645', '23'), +('1', '108', '15', '111347', '165419', '23'), +('1', '108', '15', '111341', '165234', '23'), +('1', '108', '15', '111345', '163548', '23'), +('1', '108', '20', '111354', '190817', '23'), +('1', '108', '20', '111355', '187999', '23'), +('1', '108', '20', '111353', '187469', '23'), +('1', '108', '20', '111351', '186725', '23'), +('1', '108', '12', '81795', '103219', '23'), +('1', '108', '12', '56073', '102737', '23'), +('1', '108', '12', '89366', '97359', '23'), +('1', '108', '12', '104401', '87345', '23'), +('1', '108', '18', '62986', '107273', '23'), +('1', '108', '18', '56041', '106406', '23'), +('1', '108', '18', '62987', '106213', '23'), +('1', '108', '18', '94054', '105481', '23'), +('1', '108', '19', '62990', '105772', '23'), +('1', '108', '19', '56037', '105395', '23'), +('1', '108', '19', '56075', '104721', '23'), +('1', '108', '19', '81763', '103981', '23'), +('1', '108', '13', '111871', '398745', '23'), +('1', '108', '13', '111815', '396073', '23'), +('1', '108', '13', '111515', '378109', '23'), +('1', '108', '13', '111512', '378068', '23'), +('1', '108', '14', '111871', '398745', '23'), +('1', '108', '14', '111815', '396073', '23'), +('1', '108', '14', '111515', '378109', '23'), +('1', '108', '14', '111512', '378068', '23'), +('1', '108', '11', '111529', '240601', '23'), +('1', '108', '11', '111229', '224765', '23'), +('1', '108', '11', '133816', '210757', '23'), +('1', '108', '11', '106769', '171740', '23'), +('1', '109', '22', '39342', '0', '23'), +('1', '109', '22', '12425', '0', '23'), +('1', '109', '22', '7867', '0', '23'), +('1', '109', '22', '23597', '0', '23'), +('1', '109', '1', '98769', '276413', '23'), +('1', '109', '1', '111309', '166324', '23'), +('1', '109', '1', '111303', '165717', '23'), +('1', '109', '1', '111308', '165276', '23'), +('1', '109', '2', '94056', '104964', '23'), +('1', '109', '2', '62985', '104102', '23'), +('1', '109', '2', '89368', '99653', '23'), +('1', '109', '2', '104403', '88056', '23'), +('1', '109', '3', '111312', '165554', '23'), +('1', '109', '3', '111313', '164331', '23'), +('1', '109', '3', '111315', '164281', '23'), +('1', '109', '3', '111316', '161712', '23'), +('1', '109', '5', '111320', '164039', '23'), +('1', '109', '5', '111318', '163812', '23'), +('1', '109', '5', '111319', '161251', '23'), +('1', '109', '5', '111019', '144189', '23'), +('1', '109', '8', '111331', '166422', '23'), +('1', '109', '8', '111328', '165650', '23'), +('1', '109', '8', '111332', '161180', '23'), +('1', '109', '8', '111030', '146542', '23'), +('1', '109', '6', '111322', '164447', '23'), +('1', '109', '6', '111324', '164177', '23'), +('1', '109', '6', '111326', '161223', '23'), +('1', '109', '6', '111021', '144567', '23'), +('1', '109', '17', '117466', '369991', '23'), +('1', '109', '17', '56046', '110185', '23'), +('1', '109', '17', '81765', '109702', '23'), +('1', '109', '17', '56083', '108999', '23'), +('1', '109', '7', '94053', '105753', '23'), +('1', '109', '7', '56079', '105387', '23'), +('1', '109', '7', '89369', '100652', '23'), +('1', '109', '7', '104404', '88180', '23'), +('1', '109', '9', '67098', '168892', '23'), +('1', '109', '9', '56031', '101996', '23'), +('1', '109', '9', '62992', '101916', '23'), +('1', '109', '9', '56033', '101787', '23'), +('1', '109', '15', '111343', '165648', '23'), +('1', '109', '15', '111347', '165424', '23'), +('1', '109', '15', '111341', '165241', '23'), +('1', '109', '15', '111345', '163551', '23'), +('1', '109', '20', '111354', '190822', '23'), +('1', '109', '20', '111355', '188002', '23'), +('1', '109', '20', '111353', '187475', '23'), +('1', '109', '20', '111351', '186728', '23'), +('1', '109', '12', '81795', '103225', '23'), +('1', '109', '12', '56073', '102744', '23'), +('1', '109', '12', '89366', '97364', '23'), +('1', '109', '12', '104401', '87350', '23'), +('1', '109', '18', '62986', '107280', '23'), +('1', '109', '18', '56041', '106408', '23'), +('1', '109', '18', '62987', '106216', '23'), +('1', '109', '18', '94054', '105486', '23'), +('1', '109', '19', '62990', '105776', '23'), +('1', '109', '19', '56037', '105400', '23'), +('1', '109', '19', '56075', '104726', '23'), +('1', '109', '19', '81763', '103984', '23'), +('1', '109', '13', '111871', '399317', '23'), +('1', '109', '13', '111815', '396674', '23'), +('1', '109', '13', '111515', '378680', '23'), +('1', '109', '13', '111512', '378640', '23'), +('1', '109', '14', '111871', '399317', '23'), +('1', '109', '14', '111815', '396674', '23'), +('1', '109', '14', '111515', '378680', '23'), +('1', '109', '14', '111512', '378640', '23'), +('1', '109', '11', '111529', '240747', '23'), +('1', '109', '11', '111229', '224912', '23'), +('1', '109', '11', '133816', '210761', '23'), +('1', '109', '11', '106769', '171876', '23'), +('1', '110', '22', '7867', '0', '25'), +('1', '110', '22', '39342', '0', '25'), +('1', '110', '22', '12425', '0', '25'), +('1', '110', '22', '23597', '0', '25'), +('1', '110', '1', '98769', '276417', '25'), +('1', '110', '1', '111309', '166327', '25'), +('1', '110', '1', '111303', '165723', '25'), +('1', '110', '1', '111308', '165281', '25'), +('1', '110', '2', '94056', '104968', '25'), +('1', '110', '2', '62985', '104105', '25'), +('1', '110', '2', '89368', '99658', '25'), +('1', '110', '2', '104403', '88060', '25'), +('1', '110', '3', '111312', '165559', '25'), +('1', '110', '3', '111313', '164335', '25'), +('1', '110', '3', '111315', '164288', '25'), +('1', '110', '3', '111316', '161717', '25'), +('1', '110', '5', '111320', '164044', '25'), +('1', '110', '5', '111318', '163816', '25'), +('1', '110', '5', '111319', '161257', '25'), +('1', '110', '5', '111019', '144194', '25'), +('1', '110', '8', '111331', '166428', '25'), +('1', '110', '8', '111328', '165655', '25'), +('1', '110', '8', '111332', '161184', '25'), +('1', '110', '8', '111030', '146548', '25'), +('1', '110', '6', '111322', '164451', '25'), +('1', '110', '6', '111324', '164183', '25'), +('1', '110', '6', '111326', '161227', '25'), +('1', '110', '6', '111021', '144571', '25'), +('1', '110', '17', '117466', '369997', '25'), +('1', '110', '17', '56046', '110192', '25'), +('1', '110', '17', '81765', '109706', '25'), +('1', '110', '17', '56083', '109001', '25'), +('1', '110', '7', '94053', '105758', '25'), +('1', '110', '7', '56079', '105393', '25'), +('1', '110', '7', '89369', '100657', '25'), +('1', '110', '7', '104404', '88184', '25'), +('1', '110', '9', '67098', '168897', '25'), +('1', '110', '9', '56031', '101999', '25'), +('1', '110', '9', '62992', '101921', '25'), +('1', '110', '9', '62984', '101790', '25'), +('1', '110', '15', '111343', '165652', '25'), +('1', '110', '15', '111347', '165430', '25'), +('1', '110', '15', '111341', '165248', '25'), +('1', '110', '15', '111345', '163555', '25'), +('1', '110', '20', '111354', '190826', '25'), +('1', '110', '20', '111355', '188006', '25'), +('1', '110', '20', '111353', '187480', '25'), +('1', '110', '20', '111351', '186731', '25'), +('1', '110', '12', '81795', '103231', '25'), +('1', '110', '12', '56073', '102751', '25'), +('1', '110', '12', '89366', '97368', '25'), +('1', '110', '12', '104401', '87355', '25'), +('1', '110', '18', '62986', '107287', '25'), +('1', '110', '18', '56041', '106411', '25'), +('1', '110', '18', '62987', '106218', '25'), +('1', '110', '18', '94054', '105492', '25'), +('1', '110', '19', '62990', '105781', '25'), +('1', '110', '19', '56037', '105405', '25'), +('1', '110', '19', '56075', '104730', '25'), +('1', '110', '19', '81763', '103988', '25'), +('1', '110', '13', '111871', '401022', '25'), +('1', '110', '13', '111815', '398379', '25'), +('1', '110', '13', '111515', '380356', '25'), +('1', '110', '13', '111512', '380344', '25'), +('1', '110', '14', '111871', '401022', '25'), +('1', '110', '14', '111815', '398379', '25'), +('1', '110', '14', '111515', '380356', '25'), +('1', '110', '14', '111512', '380344', '25'), +('1', '110', '11', '85213', '245859', '25'), +('1', '110', '11', '111529', '240903', '25'), +('1', '110', '11', '111229', '225049', '25'), +('1', '110', '11', '133816', '210765', '25'), +('1', '110', '22', '7867', '0', '24'), +('1', '110', '22', '39342', '0', '24'), +('1', '110', '22', '12425', '0', '24'), +('1', '110', '22', '23597', '0', '24'), +('1', '110', '1', '98769', '276417', '24'), +('1', '110', '1', '111309', '166327', '24'), +('1', '110', '1', '111303', '165723', '24'), +('1', '110', '1', '111308', '165281', '24'), +('1', '110', '2', '94056', '104968', '24'), +('1', '110', '2', '62985', '104105', '24'), +('1', '110', '2', '89368', '99658', '24'), +('1', '110', '2', '104403', '88060', '24'), +('1', '110', '3', '111312', '165559', '24'), +('1', '110', '3', '111313', '164335', '24'), +('1', '110', '3', '111315', '164288', '24'), +('1', '110', '3', '111316', '161717', '24'), +('1', '110', '5', '111320', '164044', '24'), +('1', '110', '5', '111318', '163816', '24'), +('1', '110', '5', '111319', '161257', '24'), +('1', '110', '5', '111019', '144194', '24'), +('1', '110', '8', '111331', '166428', '24'), +('1', '110', '8', '111328', '165655', '24'), +('1', '110', '8', '111332', '161184', '24'), +('1', '110', '8', '111030', '146548', '24'), +('1', '110', '6', '111322', '164451', '24'), +('1', '110', '6', '111324', '164183', '24'), +('1', '110', '6', '111326', '161227', '24'), +('1', '110', '6', '111021', '144571', '24'), +('1', '110', '17', '117466', '369997', '24'), +('1', '110', '17', '56046', '110192', '24'), +('1', '110', '17', '81765', '109706', '24'), +('1', '110', '17', '56083', '109001', '24'), +('1', '110', '7', '94053', '105758', '24'), +('1', '110', '7', '56079', '105393', '24'), +('1', '110', '7', '89369', '100657', '24'), +('1', '110', '7', '104404', '88184', '24'), +('1', '110', '9', '67098', '168897', '24'), +('1', '110', '9', '56031', '101999', '24'), +('1', '110', '9', '62992', '101921', '24'), +('1', '110', '9', '62984', '101790', '24'), +('1', '110', '15', '111343', '165652', '24'), +('1', '110', '15', '111347', '165430', '24'), +('1', '110', '15', '111341', '165248', '24'), +('1', '110', '15', '111345', '163555', '24'), +('1', '110', '20', '111354', '190826', '24'), +('1', '110', '20', '111355', '188006', '24'), +('1', '110', '20', '111353', '187480', '24'), +('1', '110', '20', '111351', '186731', '24'), +('1', '110', '12', '81795', '103231', '24'), +('1', '110', '12', '56073', '102751', '24'), +('1', '110', '12', '89366', '97368', '24'), +('1', '110', '12', '104401', '87355', '24'), +('1', '110', '18', '62986', '107287', '24'), +('1', '110', '18', '56041', '106411', '24'), +('1', '110', '18', '62987', '106218', '24'), +('1', '110', '18', '94054', '105492', '24'), +('1', '110', '19', '62990', '105781', '24'), +('1', '110', '19', '56037', '105405', '24'), +('1', '110', '19', '56075', '104730', '24'), +('1', '110', '19', '81763', '103988', '24'), +('1', '110', '13', '111871', '401022', '24'), +('1', '110', '13', '111815', '398379', '24'), +('1', '110', '13', '111515', '380356', '24'), +('1', '110', '13', '111512', '380344', '24'), +('1', '110', '14', '111871', '401022', '24'), +('1', '110', '14', '111815', '398379', '24'), +('1', '110', '14', '111515', '380356', '24'), +('1', '110', '14', '111512', '380344', '24'), +('1', '110', '11', '85213', '245859', '24'), +('1', '110', '11', '111529', '240903', '24'), +('1', '110', '11', '111229', '225049', '24'), +('1', '110', '11', '133816', '210765', '24'), +('1', '111', '22', '7867', '0', '25'), +('1', '111', '22', '39342', '0', '25'), +('1', '111', '22', '12425', '0', '25'), +('1', '111', '22', '23597', '0', '25'), +('1', '111', '1', '98769', '276421', '25'), +('1', '111', '1', '111309', '166331', '25'), +('1', '111', '1', '111303', '165729', '25'), +('1', '111', '1', '111308', '165286', '25'), +('1', '111', '2', '94056', '104972', '25'), +('1', '111', '2', '62985', '104108', '25'), +('1', '111', '2', '89368', '99663', '25'), +('1', '111', '2', '104403', '88064', '25'), +('1', '111', '3', '111312', '165564', '25'), +('1', '111', '3', '111313', '164338', '25'), +('1', '111', '3', '111315', '164296', '25'), +('1', '111', '3', '111316', '161722', '25'), +('1', '111', '5', '111320', '164049', '25'), +('1', '111', '5', '111318', '163820', '25'), +('1', '111', '5', '111319', '161263', '25'), +('1', '111', '5', '111019', '144199', '25'), +('1', '111', '8', '111331', '166434', '25'), +('1', '111', '8', '111328', '165661', '25'), +('1', '111', '8', '111332', '161187', '25'), +('1', '111', '8', '111030', '146554', '25'), +('1', '111', '6', '111322', '164455', '25'), +('1', '111', '6', '111324', '164188', '25'), +('1', '111', '6', '111326', '161232', '25'), +('1', '111', '6', '111021', '144575', '25'), +('1', '111', '17', '117466', '370002', '25'), +('1', '111', '17', '56046', '110199', '25'), +('1', '111', '17', '81765', '109710', '25'), +('1', '111', '17', '56083', '109004', '25'), +('1', '111', '7', '94053', '105763', '25'), +('1', '111', '7', '56079', '105398', '25'), +('1', '111', '7', '89369', '100662', '25'), +('1', '111', '7', '104404', '88189', '25'), +('1', '111', '9', '67098', '168902', '25'), +('1', '111', '9', '56031', '102002', '25'), +('1', '111', '9', '62992', '101926', '25'), +('1', '111', '9', '62984', '101798', '25'), +('1', '111', '15', '111343', '165655', '25'), +('1', '111', '15', '111347', '165436', '25'), +('1', '111', '15', '111341', '165255', '25'), +('1', '111', '15', '111345', '163559', '25'), +('1', '111', '20', '111354', '190830', '25'), +('1', '111', '20', '111355', '188009', '25'), +('1', '111', '20', '111353', '187486', '25'), +('1', '111', '20', '111351', '186734', '25'), +('1', '111', '12', '81795', '103237', '25'), +('1', '111', '12', '56073', '102758', '25'), +('1', '111', '12', '89366', '97372', '25'), +('1', '111', '12', '104401', '87361', '25'), +('1', '111', '18', '62986', '107294', '25'), +('1', '111', '18', '56041', '106413', '25'), +('1', '111', '18', '62987', '106221', '25'), +('1', '111', '18', '94054', '105497', '25'), +('1', '111', '19', '62990', '105786', '25'), +('1', '111', '19', '56037', '105409', '25'), +('1', '111', '19', '56075', '104735', '25'), +('1', '111', '19', '81763', '103992', '25'), +('1', '111', '13', '111871', '401623', '25'), +('1', '111', '13', '111815', '398951', '25'), +('1', '111', '13', '111515', '380927', '25'), +('1', '111', '13', '111512', '380916', '25'), +('1', '111', '14', '111871', '401623', '25'), +('1', '111', '14', '111815', '398951', '25'), +('1', '111', '14', '111515', '380927', '25'), +('1', '111', '14', '111512', '380916', '25'), +('1', '111', '11', '85213', '245863', '25'), +('1', '111', '11', '111529', '241049', '25'), +('1', '111', '11', '111229', '225195', '25'), +('1', '111', '11', '133816', '210769', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('1', '112', '22', '7867', '0', '25'), +('1', '112', '22', '39342', '0', '25'), +('1', '112', '22', '12425', '0', '25'), +('1', '112', '22', '23597', '0', '25'), +('1', '112', '1', '98769', '276424', '25'), +('1', '112', '1', '111309', '166335', '25'), +('1', '112', '1', '111303', '165736', '25'), +('1', '112', '1', '111308', '165291', '25'), +('1', '112', '2', '94056', '104977', '25'), +('1', '112', '2', '62985', '104111', '25'), +('1', '112', '2', '89368', '99668', '25'), +('1', '112', '2', '104403', '88068', '25'), +('1', '112', '3', '111312', '165569', '25'), +('1', '112', '3', '111313', '164342', '25'), +('1', '112', '3', '111315', '164303', '25'), +('1', '112', '3', '111316', '161726', '25'), +('1', '112', '5', '111320', '164055', '25'), +('1', '112', '5', '111318', '163823', '25'), +('1', '112', '5', '111319', '161270', '25'), +('1', '112', '5', '111019', '144205', '25'), +('1', '112', '8', '111331', '166439', '25'), +('1', '112', '8', '111328', '165666', '25'), +('1', '112', '8', '111332', '161191', '25'), +('1', '112', '8', '111030', '146559', '25'), +('1', '112', '6', '111322', '164459', '25'), +('1', '112', '6', '111324', '164194', '25'), +('1', '112', '6', '111326', '161237', '25'), +('1', '112', '6', '111021', '144579', '25'), +('1', '112', '17', '117466', '370008', '25'), +('1', '112', '17', '56046', '110206', '25'), +('1', '112', '17', '81765', '109714', '25'), +('1', '112', '17', '56083', '109007', '25'), +('1', '112', '7', '94053', '105768', '25'), +('1', '112', '7', '56079', '105404', '25'), +('1', '112', '7', '89369', '100667', '25'), +('1', '112', '7', '104404', '88193', '25'), +('1', '112', '9', '67098', '168906', '25'), +('1', '112', '9', '56031', '102005', '25'), +('1', '112', '9', '62992', '101931', '25'), +('1', '112', '9', '62984', '101805', '25'), +('1', '112', '15', '111343', '165659', '25'), +('1', '112', '15', '111347', '165442', '25'), +('1', '112', '15', '111341', '165262', '25'), +('1', '112', '15', '111345', '163562', '25'), +('1', '112', '20', '111354', '190835', '25'), +('1', '112', '20', '111355', '188013', '25'), +('1', '112', '20', '111353', '187491', '25'), +('1', '112', '20', '111351', '186737', '25'), +('1', '112', '12', '81795', '103243', '25'), +('1', '112', '12', '56073', '102765', '25'), +('1', '112', '12', '89366', '97377', '25'), +('1', '112', '12', '104401', '87366', '25'), +('1', '112', '18', '62986', '107301', '25'), +('1', '112', '18', '56041', '106415', '25'), +('1', '112', '18', '62987', '106224', '25'), +('1', '112', '18', '94054', '105502', '25'), +('1', '112', '19', '62990', '105791', '25'), +('1', '112', '19', '56037', '105414', '25'), +('1', '112', '19', '56075', '104740', '25'), +('1', '112', '19', '81763', '103996', '25'), +('1', '112', '13', '111871', '402195', '25'), +('1', '112', '13', '111815', '399551', '25'), +('1', '112', '13', '111515', '381498', '25'), +('1', '112', '13', '111512', '381487', '25'), +('1', '112', '14', '111871', '402195', '25'), +('1', '112', '14', '111815', '399551', '25'), +('1', '112', '14', '111515', '381498', '25'), +('1', '112', '14', '111512', '381487', '25'), +('1', '112', '11', '85213', '245866', '25'), +('1', '112', '11', '111529', '241204', '25'), +('1', '112', '11', '111229', '225342', '25'), +('1', '112', '11', '133816', '210773', '25'), +('1', '113', '22', '7867', '0', '25'), +('1', '113', '22', '39342', '0', '25'), +('1', '113', '22', '12425', '0', '25'), +('1', '113', '22', '23597', '0', '25'), +('1', '113', '1', '98769', '276428', '25'), +('1', '113', '1', '111309', '166338', '25'), +('1', '113', '1', '111303', '165742', '25'), +('1', '113', '1', '111308', '165296', '25'), +('1', '113', '2', '94056', '104981', '25'), +('1', '113', '2', '62985', '104114', '25'), +('1', '113', '2', '89368', '99672', '25'), +('1', '113', '2', '104403', '88071', '25'), +('1', '113', '3', '111312', '165574', '25'), +('1', '113', '3', '111313', '164346', '25'), +('1', '113', '3', '111315', '164310', '25'), +('1', '113', '3', '111316', '161731', '25'), +('1', '113', '5', '111320', '164060', '25'), +('1', '113', '5', '111318', '163827', '25'), +('1', '113', '5', '111319', '161276', '25'), +('1', '113', '5', '111019', '144210', '25'), +('1', '113', '8', '111331', '166445', '25'), +('1', '113', '8', '111328', '165672', '25'), +('1', '113', '8', '111332', '161194', '25'), +('1', '113', '8', '111030', '146565', '25'), +('1', '113', '6', '111322', '164463', '25'), +('1', '113', '6', '111324', '164199', '25'), +('1', '113', '6', '111326', '161241', '25'), +('1', '113', '6', '111021', '144583', '25'), +('1', '113', '17', '117466', '370014', '25'), +('1', '113', '17', '56046', '110213', '25'), +('1', '113', '17', '81765', '109718', '25'), +('1', '113', '17', '56083', '109010', '25'), +('1', '113', '7', '94053', '105773', '25'), +('1', '113', '7', '56079', '105409', '25'), +('1', '113', '7', '89369', '100672', '25'), +('1', '113', '7', '104404', '88197', '25'), +('1', '113', '9', '67098', '168911', '25'), +('1', '113', '9', '56031', '102008', '25'), +('1', '113', '9', '62992', '101936', '25'), +('1', '113', '9', '62984', '101812', '25'), +('1', '113', '15', '111343', '165662', '25'), +('1', '113', '15', '111347', '165447', '25'), +('1', '113', '15', '111341', '165269', '25'), +('1', '113', '15', '111345', '163566', '25'), +('1', '113', '20', '111354', '190839', '25'), +('1', '113', '20', '111355', '188016', '25'), +('1', '113', '20', '111353', '187497', '25'), +('1', '113', '20', '111351', '186740', '25'), +('1', '113', '12', '81795', '103249', '25'), +('1', '113', '12', '56073', '102771', '25'), +('1', '113', '12', '89366', '97381', '25'), +('1', '113', '12', '104401', '87371', '25'), +('1', '113', '18', '62986', '107308', '25'), +('1', '113', '18', '56041', '106417', '25'), +('1', '113', '18', '62987', '106226', '25'), +('1', '113', '18', '94054', '105507', '25'), +('1', '113', '19', '62990', '105796', '25'), +('1', '113', '19', '56037', '105419', '25'), +('1', '113', '19', '56075', '104745', '25'), +('1', '113', '19', '81763', '104000', '25'), +('1', '113', '13', '111871', '402767', '25'), +('1', '113', '13', '111815', '400122', '25'), +('1', '113', '13', '111515', '382069', '25'), +('1', '113', '13', '111512', '382030', '25'), +('1', '113', '14', '111871', '402767', '25'), +('1', '113', '14', '111815', '400122', '25'), +('1', '113', '14', '111515', '382069', '25'), +('1', '113', '14', '111512', '382030', '25'), +('1', '113', '11', '85213', '245870', '25'), +('1', '113', '11', '111529', '241350', '25'), +('1', '113', '11', '111229', '225488', '25'), +('1', '113', '11', '133816', '210778', '25'), +('1', '114', '22', '7867', '0', '25'), +('1', '114', '22', '39342', '0', '25'), +('1', '114', '22', '12425', '0', '25'), +('1', '114', '22', '23597', '0', '25'), +('1', '114', '1', '98769', '276432', '25'), +('1', '114', '1', '111309', '166342', '25'), +('1', '114', '1', '111303', '165749', '25'), +('1', '114', '1', '111308', '165301', '25'), +('1', '114', '2', '94056', '104985', '25'), +('1', '114', '2', '62985', '104117', '25'), +('1', '114', '2', '89368', '99678', '25'), +('1', '114', '2', '104403', '88075', '25'), +('1', '114', '3', '111312', '165579', '25'), +('1', '114', '3', '111313', '164350', '25'), +('1', '114', '3', '111315', '164318', '25'), +('1', '114', '3', '111316', '161736', '25'), +('1', '114', '5', '111320', '164065', '25'), +('1', '114', '5', '111318', '163831', '25'), +('1', '114', '5', '111319', '161282', '25'), +('1', '114', '5', '111019', '144215', '25'), +('1', '114', '8', '111331', '166451', '25'), +('1', '114', '8', '111328', '165678', '25'), +('1', '114', '8', '111332', '161198', '25'), +('1', '114', '8', '111030', '146571', '25'), +('1', '114', '6', '111322', '164468', '25'), +('1', '114', '6', '111324', '164205', '25'), +('1', '114', '6', '111326', '161246', '25'), +('1', '114', '6', '111021', '144588', '25'), +('1', '114', '17', '117466', '370020', '25'), +('1', '114', '17', '56046', '110220', '25'), +('1', '114', '17', '81765', '109723', '25'), +('1', '114', '17', '56083', '109013', '25'), +('1', '114', '7', '94053', '105779', '25'), +('1', '114', '7', '56079', '105415', '25'), +('1', '114', '7', '89369', '100677', '25'), +('1', '114', '7', '104404', '88202', '25'), +('1', '114', '9', '67098', '168916', '25'), +('1', '114', '9', '56031', '102011', '25'), +('1', '114', '9', '62992', '101941', '25'), +('1', '114', '9', '62984', '101820', '25'), +('1', '114', '15', '111343', '165666', '25'), +('1', '114', '15', '111347', '165454', '25'), +('1', '114', '15', '111341', '165277', '25'), +('1', '114', '15', '111345', '163570', '25'), +('1', '114', '20', '111354', '190844', '25'), +('1', '114', '20', '111355', '188019', '25'), +('1', '114', '20', '111353', '187502', '25'), +('1', '114', '20', '111351', '186744', '25'), +('1', '114', '12', '81795', '103255', '25'), +('1', '114', '12', '56073', '102779', '25'), +('1', '114', '12', '89366', '97385', '25'), +('1', '114', '12', '104401', '87377', '25'), +('1', '114', '18', '62986', '107316', '25'), +('1', '114', '18', '56041', '106419', '25'), +('1', '114', '18', '62987', '106229', '25'), +('1', '114', '18', '94054', '105513', '25'), +('1', '114', '19', '62990', '105801', '25'), +('1', '114', '19', '56037', '105424', '25'), +('1', '114', '19', '56075', '104750', '25'), +('1', '114', '19', '81763', '104004', '25'), +('1', '114', '13', '111871', '403368', '25'), +('1', '114', '13', '111815', '400695', '25'), +('1', '114', '13', '111515', '382641', '25'), +('1', '114', '13', '111512', '382602', '25'), +('1', '114', '14', '111871', '403368', '25'), +('1', '114', '14', '111815', '400695', '25'), +('1', '114', '14', '111515', '382641', '25'), +('1', '114', '14', '111512', '382602', '25'), +('1', '114', '11', '85213', '245874', '25'), +('1', '114', '11', '111529', '241497', '25'), +('1', '114', '11', '111229', '225635', '25'), +('1', '114', '11', '133816', '210782', '25'), +('1', '115', '22', '7867', '0', '26'), +('1', '115', '22', '39342', '0', '26'), +('1', '115', '22', '12425', '0', '26'), +('1', '115', '22', '23597', '0', '26'), +('1', '115', '1', '98769', '276436', '26'), +('1', '115', '1', '111309', '166346', '26'), +('1', '115', '1', '111303', '165755', '26'), +('1', '115', '1', '111308', '165306', '26'), +('1', '115', '2', '94056', '104990', '26'), +('1', '115', '2', '62985', '104120', '26'), +('1', '115', '2', '89368', '99683', '26'), +('1', '115', '2', '104403', '88079', '26'), +('1', '115', '3', '111312', '165584', '26'), +('1', '115', '3', '111313', '164353', '26'), +('1', '115', '3', '111315', '164325', '26'), +('1', '115', '3', '111316', '161741', '26'), +('1', '115', '5', '111320', '164070', '26'), +('1', '115', '5', '111318', '163835', '26'), +('1', '115', '5', '111319', '161289', '26'), +('1', '115', '5', '111019', '144220', '26'), +('1', '115', '8', '111331', '166456', '26'), +('1', '115', '8', '111328', '165683', '26'), +('1', '115', '8', '111332', '161201', '26'), +('1', '115', '8', '111030', '146576', '26'), +('1', '115', '6', '111322', '164472', '26'), +('1', '115', '6', '111324', '164210', '26'), +('1', '115', '6', '111326', '161251', '26'), +('1', '115', '6', '111021', '144592', '26'), +('1', '115', '17', '117466', '370026', '26'), +('1', '115', '17', '56046', '110227', '26'), +('1', '115', '17', '81765', '109727', '26'), +('1', '115', '17', '56083', '109016', '26'), +('1', '115', '7', '94053', '105784', '26'), +('1', '115', '7', '56079', '105421', '26'), +('1', '115', '7', '89369', '100683', '26'), +('1', '115', '7', '104404', '88206', '26'), +('1', '115', '9', '67098', '168921', '26'), +('1', '115', '9', '56031', '102014', '26'), +('1', '115', '9', '62992', '101945', '26'), +('1', '115', '9', '62984', '101828', '26'), +('1', '115', '15', '111343', '165669', '26'), +('1', '115', '15', '111347', '165459', '26'), +('1', '115', '15', '111341', '165284', '26'), +('1', '115', '15', '111345', '163574', '26'), +('1', '115', '20', '111354', '190849', '26'), +('1', '115', '20', '111355', '188023', '26'), +('1', '115', '20', '111353', '187508', '26'), +('1', '115', '20', '111351', '186747', '26'), +('1', '115', '12', '81795', '103261', '26'), +('1', '115', '12', '56073', '102786', '26'), +('1', '115', '12', '89366', '97390', '26'), +('1', '115', '12', '104401', '87382', '26'), +('1', '115', '18', '62986', '107323', '26'), +('1', '115', '18', '56041', '106421', '26'), +('1', '115', '18', '62987', '106232', '26'), +('1', '115', '18', '94054', '105518', '26'), +('1', '115', '19', '62990', '105806', '26'), +('1', '115', '19', '56037', '105429', '26'), +('1', '115', '19', '56075', '104755', '26'), +('1', '115', '19', '81763', '104008', '26'), +('1', '115', '13', '111871', '403940', '26'), +('1', '115', '13', '111815', '401295', '26'), +('1', '115', '13', '111515', '383212', '26'), +('1', '115', '13', '111512', '383173', '26'), +('1', '115', '14', '111871', '403940', '26'), +('1', '115', '14', '111815', '401295', '26'), +('1', '115', '14', '111515', '383212', '26'), +('1', '115', '14', '111512', '383173', '26'), +('1', '115', '11', '85213', '245878', '26'), +('1', '115', '11', '111529', '241652', '26'), +('1', '115', '11', '111229', '225781', '26'), +('1', '115', '11', '133816', '210786', '26'), +('2', '1', '22', '9246', '0', '0'), +('2', '1', '22', '10323', '0', '0'), +('2', '1', '22', '44492', '0', '0'), +('2', '1', '22', '13101', '0', '0'), +('2', '1', '1', '14702', '3750', '0'), +('2', '1', '1', '14701', '2862', '0'), +('2', '1', '1', '30361', '2640', '0'), +('2', '1', '1', '10321', '1000', '0'), +('2', '1', '2', '10143', '5368', '0'), +('2', '1', '2', '30363', '3700', '0'), +('2', '1', '2', '3000', '2534', '0'), +('2', '1', '2', '2294', '2064', '0'), +('2', '1', '3', '2295', '1042', '0'), +('2', '1', '3', '14706', '990', '0'), +('2', '1', '3', '14705', '990', '0'), +('2', '1', '3', '2282', '318', '0'), +('2', '1', '5', '14703', '6050', '0'), +('2', '1', '5', '14700', '3318', '0'), +('2', '1', '5', '30362', '3140', '0'), +('2', '1', '5', '10055', '2780', '0'), +('2', '1', '8', '11603', '8419', '0'), +('2', '1', '8', '2349', '3554', '0'), +('2', '1', '8', '1363', '2510', '0'), +('2', '1', '8', '2287', '1539', '0'), +('2', '1', '6', '2924', '5886', '0'), +('2', '1', '6', '1557', '5310', '0'), +('2', '1', '6', '27717', '3714', '0'), +('2', '1', '6', '1401', '2174', '0'), +('2', '1', '17', '2285', '9415', '0'), +('2', '1', '17', '4882', '3105', '0'), +('2', '1', '17', '1891', '666', '0'), +('2', '1', '17', '4309', '412', '0'), +('2', '1', '7', '1362', '2624', '0'), +('2', '1', '7', '1321', '1746', '0'), +('2', '1', '7', '2289', '1379', '0'), +('2', '1', '7', '4883', '311', '0'), +('2', '1', '9', '4884', '2060', '0'), +('2', '1', '9', '4344', '2051', '0'), +('2', '1', '9', '10408', '2002', '0'), +('2', '1', '9', '14650', '1662', '0'), +('2', '1', '15', '10150', '3004', '0'), +('2', '1', '15', '10163', '2300', '0'), +('2', '1', '15', '14651', '2224', '0'), +('2', '1', '15', '30360', '1600', '0'), +('2', '1', '20', '11666', '8289', '0'), +('2', '1', '20', '2742', '5069', '0'), +('2', '1', '20', '2288', '4478', '0'), +('2', '1', '20', '2345', '1112', '0'), +('2', '1', '12', '2291', '3830', '0'), +('2', '1', '12', '2923', '3074', '0'), +('2', '1', '12', '20655', '2626', '0'), +('2', '1', '12', '2336', '1012', '0'), +('2', '1', '18', '4410', '1142', '0'), +('2', '1', '18', '2292', '889', '0'), +('2', '1', '18', '4886', '418', '0'), +('2', '1', '18', '2461', '241', '0'), +('2', '1', '19', '1368', '2016', '0'), +('2', '1', '19', '68239', '1960', '0'), +('2', '1', '19', '2293', '1271', '0'), +('2', '1', '19', '4837', '1084', '0'), +('2', '1', '13', '11691', '7844', '0'), +('2', '1', '13', '27718', '5623', '0'), +('2', '1', '13', '10333', '5300', '0'), +('2', '1', '13', '27719', '3927', '0'), +('2', '1', '14', '27716', '6862', '0'), +('2', '1', '14', '10333', '5300', '0'), +('2', '1', '14', '10334', '3503', '0'), +('2', '1', '14', '9427', '3028', '0'), +('2', '1', '11', '14762', '2204', '0'), +('2', '1', '11', '20677', '450', '0'), +('2', '1', '11', '13390', '150', '0'), +('2', '1', '11', '9246', '133', '0'), +('2', '2', '22', '9246', '0', '0'), +('2', '2', '22', '10323', '0', '0'), +('2', '2', '22', '44492', '0', '0'), +('2', '2', '22', '13101', '0', '0'), +('2', '2', '1', '14702', '3750', '0'), +('2', '2', '1', '14701', '2862', '0'), +('2', '2', '1', '30361', '2640', '0'), +('2', '2', '1', '10321', '1000', '0'), +('2', '2', '2', '10143', '5368', '0'), +('2', '2', '2', '30363', '3700', '0'), +('2', '2', '2', '3000', '2534', '0'), +('2', '2', '2', '2294', '2088', '0'), +('2', '2', '3', '2295', '1066', '0'), +('2', '2', '3', '14705', '990', '0'), +('2', '2', '3', '14706', '990', '0'), +('2', '2', '3', '11052', '362', '0'), +('2', '2', '5', '14703', '6050', '0'), +('2', '2', '5', '14700', '3318', '0'), +('2', '2', '5', '30362', '3140', '0'), +('2', '2', '5', '10055', '2780', '0'), +('2', '2', '8', '11603', '8528', '0'), +('2', '2', '8', '2349', '3554', '0'), +('2', '2', '8', '1363', '2510', '0'), +('2', '2', '8', '2287', '1541', '0'), +('2', '2', '6', '2924', '5946', '0'), +('2', '2', '6', '1557', '5310', '0'), +('2', '2', '6', '27717', '3861', '0'), +('2', '2', '6', '1401', '2174', '0'), +('2', '2', '17', '2285', '9463', '0'), +('2', '2', '17', '4882', '3291', '0'), +('2', '2', '17', '1891', '666', '0'), +('2', '2', '17', '4309', '412', '0'), +('2', '2', '7', '1362', '2624', '0'), +('2', '2', '7', '1321', '1746', '0'), +('2', '2', '7', '2289', '1427', '0'), +('2', '2', '7', '4883', '311', '0'), +('2', '2', '9', '4884', '2060', '0'), +('2', '2', '9', '4344', '2051', '0'), +('2', '2', '9', '10408', '2002', '0'), +('2', '2', '9', '14650', '1662', '0'), +('2', '2', '15', '10150', '3004', '0'), +('2', '2', '15', '10163', '2300', '0'), +('2', '2', '15', '14651', '2224', '0'), +('2', '2', '15', '30360', '1600', '0'), +('2', '2', '20', '11666', '8291', '0'), +('2', '2', '20', '2742', '5072', '0'), +('2', '2', '20', '2288', '4478', '0'), +('2', '2', '20', '2345', '1112', '0'), +('2', '2', '12', '2291', '3830', '0'), +('2', '2', '12', '2923', '3074', '0'), +('2', '2', '12', '20655', '2651', '0'), +('2', '2', '12', '2336', '1012', '0'), +('2', '2', '18', '4410', '1142', '0'), +('2', '2', '18', '2292', '938', '0'), +('2', '2', '18', '4886', '527', '0'), +('2', '2', '18', '2461', '289', '0'), +('2', '2', '19', '1368', '2016', '0'), +('2', '2', '19', '68239', '1996', '0'), +('2', '2', '19', '2293', '1308', '0'), +('2', '2', '19', '4837', '1145', '0'), +('2', '2', '13', '11691', '8025', '0'), +('2', '2', '13', '27718', '5744', '0'), +('2', '2', '13', '10333', '5300', '0'), +('2', '2', '13', '27719', '4019', '0'), +('2', '2', '14', '27716', '6970', '0'), +('2', '2', '14', '10333', '5300', '0'), +('2', '2', '14', '10334', '3503', '0'), +('2', '2', '14', '9427', '3028', '0'), +('2', '2', '11', '14762', '2204', '0'), +('2', '2', '11', '20677', '450', '0'), +('2', '2', '11', '9246', '254', '0'), +('2', '2', '11', '13390', '150', '0'), +('2', '3', '22', '9246', '0', '0'), +('2', '3', '22', '10323', '0', '0'), +('2', '3', '22', '44492', '0', '0'), +('2', '3', '22', '13101', '0', '0'), +('2', '3', '1', '14702', '3750', '0'), +('2', '3', '1', '14701', '2862', '0'), +('2', '3', '1', '30361', '2640', '0'), +('2', '3', '1', '10321', '1000', '0'), +('2', '3', '2', '10143', '5368', '0'), +('2', '3', '2', '30363', '3700', '0'), +('2', '3', '2', '3000', '2534', '0'), +('2', '3', '2', '2294', '2112', '0'), +('2', '3', '3', '2295', '1091', '0'), +('2', '3', '3', '14705', '990', '0'), +('2', '3', '3', '14706', '990', '0'), +('2', '3', '3', '11052', '544', '0'), +('2', '3', '5', '14703', '6050', '0'), +('2', '3', '5', '14700', '3318', '0'), +('2', '3', '5', '30362', '3140', '0'), +('2', '3', '5', '10055', '2780', '0'), +('2', '3', '8', '11603', '8637', '0'), +('2', '3', '8', '2349', '3554', '0'), +('2', '3', '8', '1363', '2510', '0'), +('2', '3', '8', '2287', '1543', '0'), +('2', '3', '6', '2924', '6007', '0'), +('2', '3', '6', '1557', '5310', '0'), +('2', '3', '6', '27717', '4009', '0'), +('2', '3', '6', '1401', '2174', '0'), +('2', '3', '17', '2285', '9511', '0'), +('2', '3', '17', '4882', '3476', '0'), +('2', '3', '17', '1891', '666', '0'), +('2', '3', '17', '4342', '489', '0'), +('2', '3', '7', '1362', '2624', '0'), +('2', '3', '7', '1321', '1746', '0'), +('2', '3', '7', '2289', '1475', '0'), +('2', '3', '7', '4883', '311', '0'), +('2', '3', '9', '4884', '2060', '0'), +('2', '3', '9', '4344', '2051', '0'), +('2', '3', '9', '10408', '2002', '0'), +('2', '3', '9', '14650', '1662', '0'), +('2', '3', '15', '10150', '3004', '0'), +('2', '3', '15', '10163', '2300', '0'), +('2', '3', '15', '14651', '2224', '0'), +('2', '3', '15', '30360', '1600', '0'), +('2', '3', '20', '11666', '8293', '0'), +('2', '3', '20', '2742', '5076', '0'), +('2', '3', '20', '2288', '4478', '0'), +('2', '3', '20', '2345', '1112', '0'), +('2', '3', '12', '2291', '3830', '0'), +('2', '3', '12', '2923', '3074', '0'), +('2', '3', '12', '20655', '2676', '0'), +('2', '3', '12', '2336', '1012', '0'), +('2', '3', '18', '4410', '1142', '0'), +('2', '3', '18', '2292', '986', '0'), +('2', '3', '18', '4886', '636', '0'), +('2', '3', '18', '2461', '337', '0'), +('2', '3', '19', '68239', '2032', '0'), +('2', '3', '19', '1368', '2016', '0'), +('2', '3', '19', '2293', '1344', '0'), +('2', '3', '19', '4837', '1205', '0'), +('2', '3', '13', '11691', '8207', '0'), +('2', '3', '13', '27718', '5865', '0'), +('2', '3', '13', '10333', '5300', '0'), +('2', '3', '13', '27719', '4111', '0'), +('2', '3', '14', '27716', '7079', '0'), +('2', '3', '14', '10333', '5300', '0'), +('2', '3', '14', '10334', '3503', '0'), +('2', '3', '14', '9427', '3028', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '3', '11', '14762', '2204', '0'), +('2', '3', '11', '20677', '450', '0'), +('2', '3', '11', '9246', '374', '0'), +('2', '3', '11', '13390', '150', '0'), +('2', '4', '22', '9246', '0', '0'), +('2', '4', '22', '10323', '0', '0'), +('2', '4', '22', '44492', '0', '0'), +('2', '4', '22', '13101', '0', '0'), +('2', '4', '1', '14702', '3750', '0'), +('2', '4', '1', '14701', '2862', '0'), +('2', '4', '1', '30361', '2640', '0'), +('2', '4', '1', '10321', '1000', '0'), +('2', '4', '2', '10143', '5368', '0'), +('2', '4', '2', '30363', '3700', '0'), +('2', '4', '2', '3000', '2534', '0'), +('2', '4', '2', '2294', '2137', '0'), +('2', '4', '3', '2295', '1115', '0'), +('2', '4', '3', '14706', '990', '0'), +('2', '4', '3', '14705', '990', '0'), +('2', '4', '3', '11052', '725', '0'), +('2', '4', '5', '14703', '6050', '0'), +('2', '4', '5', '14700', '3318', '0'), +('2', '4', '5', '30362', '3140', '0'), +('2', '4', '5', '10055', '2780', '0'), +('2', '4', '8', '11603', '8745', '0'), +('2', '4', '8', '2349', '3554', '0'), +('2', '4', '8', '1363', '2510', '0'), +('2', '4', '8', '2287', '1546', '0'), +('2', '4', '6', '2924', '6067', '0'), +('2', '4', '6', '1557', '5310', '0'), +('2', '4', '6', '27717', '4156', '0'), +('2', '4', '6', '1401', '2174', '0'), +('2', '4', '17', '2285', '9560', '0'), +('2', '4', '17', '4882', '3662', '0'), +('2', '4', '17', '1891', '666', '0'), +('2', '4', '17', '4342', '610', '0'), +('2', '4', '7', '1362', '2624', '0'), +('2', '4', '7', '1321', '1746', '0'), +('2', '4', '7', '2289', '1523', '0'), +('2', '4', '7', '4883', '311', '0'), +('2', '4', '9', '4884', '2060', '0'), +('2', '4', '9', '4344', '2051', '0'), +('2', '4', '9', '10408', '2002', '0'), +('2', '4', '9', '14650', '1662', '0'), +('2', '4', '15', '10150', '3004', '0'), +('2', '4', '15', '10163', '2300', '0'), +('2', '4', '15', '14651', '2224', '0'), +('2', '4', '15', '30360', '1600', '0'), +('2', '4', '20', '11666', '8295', '0'), +('2', '4', '20', '2742', '5079', '0'), +('2', '4', '20', '2288', '4478', '0'), +('2', '4', '20', '2345', '1112', '0'), +('2', '4', '12', '2291', '3830', '0'), +('2', '4', '12', '2923', '3074', '0'), +('2', '4', '12', '20655', '2701', '0'), +('2', '4', '12', '2336', '1012', '0'), +('2', '4', '18', '4410', '1142', '0'), +('2', '4', '18', '2292', '1034', '0'), +('2', '4', '18', '4886', '745', '0'), +('2', '4', '18', '2461', '386', '0'), +('2', '4', '19', '68239', '2068', '0'), +('2', '4', '19', '1368', '2016', '0'), +('2', '4', '19', '2293', '1380', '0'), +('2', '4', '19', '4837', '1265', '0'), +('2', '4', '13', '11691', '8388', '0'), +('2', '4', '13', '27718', '5986', '0'), +('2', '4', '13', '10333', '5300', '0'), +('2', '4', '13', '27719', '4203', '0'), +('2', '4', '14', '27716', '7188', '0'), +('2', '4', '14', '10333', '5300', '0'), +('2', '4', '14', '10334', '3503', '0'), +('2', '4', '14', '9427', '3028', '0'), +('2', '4', '11', '14762', '2204', '0'), +('2', '4', '11', '9246', '495', '0'), +('2', '4', '11', '20677', '450', '0'), +('2', '4', '11', '13390', '150', '0'), +('2', '5', '22', '9246', '0', '0'), +('2', '5', '22', '10323', '0', '0'), +('2', '5', '22', '44492', '0', '0'), +('2', '5', '22', '13101', '0', '0'), +('2', '5', '1', '14702', '3750', '0'), +('2', '5', '1', '14701', '2862', '0'), +('2', '5', '1', '30361', '2640', '0'), +('2', '5', '1', '10321', '1000', '0'), +('2', '5', '2', '10143', '5368', '0'), +('2', '5', '2', '30363', '3700', '0'), +('2', '5', '2', '3000', '2534', '0'), +('2', '5', '2', '2294', '2161', '0'), +('2', '5', '3', '2295', '1139', '0'), +('2', '5', '3', '14706', '990', '0'), +('2', '5', '3', '14705', '990', '0'), +('2', '5', '3', '11052', '906', '0'), +('2', '5', '5', '14703', '6050', '0'), +('2', '5', '5', '14700', '3318', '0'), +('2', '5', '5', '30362', '3140', '0'), +('2', '5', '5', '10055', '2780', '0'), +('2', '5', '8', '11603', '8854', '0'), +('2', '5', '8', '2349', '3554', '0'), +('2', '5', '8', '1363', '2510', '0'), +('2', '5', '8', '2287', '1548', '0'), +('2', '5', '6', '2924', '6128', '0'), +('2', '5', '6', '1557', '5310', '0'), +('2', '5', '6', '27717', '4303', '0'), +('2', '5', '6', '1401', '2174', '0'), +('2', '5', '17', '2285', '9608', '0'), +('2', '5', '17', '4882', '3848', '0'), +('2', '5', '17', '4342', '731', '0'), +('2', '5', '17', '1891', '666', '0'), +('2', '5', '7', '1362', '2624', '0'), +('2', '5', '7', '1321', '1746', '0'), +('2', '5', '7', '2289', '1572', '0'), +('2', '5', '7', '4883', '311', '0'), +('2', '5', '9', '4884', '2060', '0'), +('2', '5', '9', '4344', '2051', '0'), +('2', '5', '9', '10408', '2002', '0'), +('2', '5', '9', '14650', '1662', '0'), +('2', '5', '15', '10150', '3004', '0'), +('2', '5', '15', '10163', '2300', '0'), +('2', '5', '15', '14651', '2224', '0'), +('2', '5', '15', '30360', '1600', '0'), +('2', '5', '20', '11666', '8297', '0'), +('2', '5', '20', '2742', '5082', '0'), +('2', '5', '20', '2288', '4478', '0'), +('2', '5', '20', '2345', '1112', '0'), +('2', '5', '12', '2291', '3830', '0'), +('2', '5', '12', '2923', '3074', '0'), +('2', '5', '12', '20655', '2725', '0'), +('2', '5', '12', '2336', '1012', '0'), +('2', '5', '18', '4410', '1142', '0'), +('2', '5', '18', '2292', '1083', '0'), +('2', '5', '18', '4886', '853', '0'), +('2', '5', '18', '2461', '434', '0'), +('2', '5', '19', '68239', '2105', '0'), +('2', '5', '19', '1368', '2016', '0'), +('2', '5', '19', '2293', '1416', '0'), +('2', '5', '19', '4837', '1326', '0'), +('2', '5', '13', '11691', '8569', '0'), +('2', '5', '13', '27718', '6106', '0'), +('2', '5', '13', '10333', '5300', '0'), +('2', '5', '13', '27719', '4295', '0'), +('2', '5', '14', '27716', '7297', '0'), +('2', '5', '14', '10333', '5300', '0'), +('2', '5', '14', '10334', '3503', '0'), +('2', '5', '14', '9427', '3028', '0'), +('2', '5', '11', '14762', '2204', '0'), +('2', '5', '11', '9246', '616', '0'), +('2', '5', '11', '20677', '450', '0'), +('2', '5', '11', '13390', '150', '0'), +('2', '6', '22', '9246', '0', '0'), +('2', '6', '22', '10323', '0', '0'), +('2', '6', '22', '44492', '0', '0'), +('2', '6', '22', '13101', '0', '0'), +('2', '6', '1', '14702', '3750', '0'), +('2', '6', '1', '14701', '2862', '0'), +('2', '6', '1', '30361', '2640', '0'), +('2', '6', '1', '10321', '1000', '0'), +('2', '6', '2', '10143', '5368', '0'), +('2', '6', '2', '30363', '3700', '0'), +('2', '6', '2', '3000', '2534', '0'), +('2', '6', '2', '2294', '2185', '0'), +('2', '6', '3', '2295', '1163', '0'), +('2', '6', '3', '11052', '1087', '0'), +('2', '6', '3', '14705', '990', '0'), +('2', '6', '3', '14706', '990', '0'), +('2', '6', '5', '14703', '6050', '0'), +('2', '6', '5', '14700', '3318', '0'), +('2', '6', '5', '30362', '3140', '0'), +('2', '6', '5', '10055', '2780', '0'), +('2', '6', '8', '11603', '8963', '0'), +('2', '6', '8', '2349', '3554', '0'), +('2', '6', '8', '1363', '2510', '0'), +('2', '6', '8', '2287', '1551', '0'), +('2', '6', '6', '2924', '6188', '0'), +('2', '6', '6', '1557', '5310', '0'), +('2', '6', '6', '27717', '4451', '0'), +('2', '6', '6', '1401', '2174', '0'), +('2', '6', '17', '2285', '9656', '0'), +('2', '6', '17', '4882', '4034', '0'), +('2', '6', '17', '4342', '852', '0'), +('2', '6', '17', '1891', '666', '0'), +('2', '6', '7', '1362', '2624', '0'), +('2', '6', '7', '1321', '1746', '0'), +('2', '6', '7', '2289', '1620', '0'), +('2', '6', '7', '4883', '311', '0'), +('2', '6', '9', '4884', '2060', '0'), +('2', '6', '9', '4344', '2051', '0'), +('2', '6', '9', '10408', '2002', '0'), +('2', '6', '9', '14650', '1662', '0'), +('2', '6', '15', '10150', '3004', '0'), +('2', '6', '15', '10163', '2300', '0'), +('2', '6', '15', '14651', '2224', '0'), +('2', '6', '15', '30360', '1600', '0'), +('2', '6', '20', '11666', '8300', '0'), +('2', '6', '20', '2742', '5085', '0'), +('2', '6', '20', '2288', '4478', '0'), +('2', '6', '20', '2345', '1112', '0'), +('2', '6', '12', '2291', '3830', '0'), +('2', '6', '12', '2923', '3074', '0'), +('2', '6', '12', '20655', '2750', '0'), +('2', '6', '12', '2336', '1012', '0'), +('2', '6', '18', '4410', '1142', '0'), +('2', '6', '18', '2292', '1131', '0'), +('2', '6', '18', '4886', '962', '0'), +('2', '6', '18', '2461', '482', '0'), +('2', '6', '19', '68239', '2141', '0'), +('2', '6', '19', '1368', '2016', '0'), +('2', '6', '19', '2293', '1452', '0'), +('2', '6', '19', '4837', '1386', '0'), +('2', '6', '13', '11691', '8750', '0'), +('2', '6', '13', '27718', '6227', '0'), +('2', '6', '13', '10333', '5300', '0'), +('2', '6', '13', '27719', '4388', '0'), +('2', '6', '14', '27716', '7405', '0'), +('2', '6', '14', '10333', '5300', '0'), +('2', '6', '14', '10334', '3503', '0'), +('2', '6', '14', '9427', '3028', '0'), +('2', '6', '11', '14762', '2204', '0'), +('2', '6', '11', '9246', '737', '0'), +('2', '6', '11', '20677', '450', '0'), +('2', '6', '11', '13390', '150', '0'), +('2', '7', '22', '9246', '0', '0'), +('2', '7', '22', '10323', '0', '0'), +('2', '7', '22', '44492', '0', '0'), +('2', '7', '22', '13101', '0', '0'), +('2', '7', '1', '14702', '3750', '0'), +('2', '7', '1', '14701', '2862', '0'), +('2', '7', '1', '30361', '2640', '0'), +('2', '7', '1', '14563', '1064', '0'), +('2', '7', '2', '10143', '5368', '0'), +('2', '7', '2', '30363', '3700', '0'), +('2', '7', '2', '3000', '2534', '0'), +('2', '7', '2', '2294', '2209', '0'), +('2', '7', '3', '11052', '1268', '0'), +('2', '7', '3', '2295', '1187', '0'), +('2', '7', '3', '14706', '990', '0'), +('2', '7', '3', '14705', '990', '0'), +('2', '7', '5', '14703', '6050', '0'), +('2', '7', '5', '14700', '3318', '0'), +('2', '7', '5', '30362', '3140', '0'), +('2', '7', '5', '10055', '2780', '0'), +('2', '7', '8', '11603', '9071', '0'), +('2', '7', '8', '2349', '3554', '0'), +('2', '7', '8', '1363', '2510', '0'), +('2', '7', '8', '12238', '1668', '0'), +('2', '7', '6', '2924', '6248', '0'), +('2', '7', '6', '1557', '5310', '0'), +('2', '7', '6', '27717', '4598', '0'), +('2', '7', '6', '1401', '2174', '0'), +('2', '7', '17', '2285', '9705', '0'), +('2', '7', '17', '4882', '4219', '0'), +('2', '7', '17', '4342', '972', '0'), +('2', '7', '17', '1891', '666', '0'), +('2', '7', '7', '1362', '2624', '0'), +('2', '7', '7', '1321', '1746', '0'), +('2', '7', '7', '2289', '1668', '0'), +('2', '7', '7', '4883', '311', '0'), +('2', '7', '9', '4884', '2060', '0'), +('2', '7', '9', '4344', '2051', '0'), +('2', '7', '9', '10408', '2002', '0'), +('2', '7', '9', '14650', '1662', '0'), +('2', '7', '15', '10150', '3004', '0'), +('2', '7', '15', '10163', '2300', '0'), +('2', '7', '15', '14651', '2224', '0'), +('2', '7', '15', '30360', '1600', '0'), +('2', '7', '20', '11666', '8302', '0'), +('2', '7', '20', '2742', '5088', '0'), +('2', '7', '20', '2288', '4478', '0'), +('2', '7', '20', '2345', '1112', '0'), +('2', '7', '12', '2291', '3830', '0'), +('2', '7', '12', '2923', '3074', '0'), +('2', '7', '12', '20655', '2775', '0'), +('2', '7', '12', '2336', '1012', '0'), +('2', '7', '18', '2292', '1179', '0'), +('2', '7', '18', '4410', '1142', '0'), +('2', '7', '18', '4886', '1071', '0'), +('2', '7', '18', '2461', '531', '0'), +('2', '7', '19', '68239', '2177', '0'), +('2', '7', '19', '1368', '2016', '0'), +('2', '7', '19', '2293', '1489', '0'), +('2', '7', '19', '4837', '1447', '0'), +('2', '7', '13', '11691', '8931', '0'), +('2', '7', '13', '27718', '6348', '0'), +('2', '7', '13', '10333', '5300', '0'), +('2', '7', '13', '27719', '4480', '0'), +('2', '7', '14', '27716', '7514', '0'), +('2', '7', '14', '10333', '5300', '0'), +('2', '7', '14', '10334', '3503', '0'), +('2', '7', '14', '14107', '3037', '0'), +('2', '7', '11', '14762', '2204', '0'), +('2', '7', '11', '9246', '858', '0'), +('2', '7', '11', '20677', '450', '0'), +('2', '7', '11', '16941', '169', '0'), +('2', '8', '22', '9246', '0', '0'), +('2', '8', '22', '10323', '0', '0'), +('2', '8', '22', '44492', '0', '0'), +('2', '8', '22', '13101', '0', '0'), +('2', '8', '1', '14702', '3750', '0'), +('2', '8', '1', '14701', '2862', '0'), +('2', '8', '1', '30361', '2640', '0'), +('2', '8', '1', '14563', '1173', '0'), +('2', '8', '2', '10143', '5368', '0'), +('2', '8', '2', '30363', '3700', '0'), +('2', '8', '2', '3000', '2534', '0'), +('2', '8', '2', '2294', '2233', '0'), +('2', '8', '3', '11052', '1450', '0'), +('2', '8', '3', '2295', '1211', '0'), +('2', '8', '3', '14706', '990', '0'), +('2', '8', '3', '14705', '990', '0'), +('2', '8', '5', '14703', '6050', '0'), +('2', '8', '5', '14700', '3318', '0'), +('2', '8', '5', '30362', '3140', '0'), +('2', '8', '5', '10055', '2780', '0'), +('2', '8', '8', '11603', '9180', '0'), +('2', '8', '8', '2349', '3554', '0'), +('2', '8', '8', '1363', '2510', '0'), +('2', '8', '8', '12238', '1789', '0'), +('2', '8', '6', '2924', '6309', '0'), +('2', '8', '6', '1557', '5310', '0'), +('2', '8', '6', '27717', '4745', '0'), +('2', '8', '6', '1401', '2174', '0'), +('2', '8', '17', '2285', '9753', '0'), +('2', '8', '17', '4882', '4405', '0'), +('2', '8', '17', '4342', '1093', '0'), +('2', '8', '17', '1891', '666', '0'), +('2', '8', '7', '1362', '2624', '0'), +('2', '8', '7', '1321', '1746', '0'), +('2', '8', '7', '2289', '1717', '0'), +('2', '8', '7', '4883', '311', '0'), +('2', '8', '9', '4884', '2060', '0'), +('2', '8', '9', '4344', '2051', '0'), +('2', '8', '9', '10408', '2002', '0'), +('2', '8', '9', '14650', '1662', '0'), +('2', '8', '15', '10150', '3004', '0'), +('2', '8', '15', '10163', '2300', '0'), +('2', '8', '15', '14651', '2224', '0'), +('2', '8', '15', '30360', '1600', '0'), +('2', '8', '20', '11666', '8304', '0'), +('2', '8', '20', '2742', '5091', '0'), +('2', '8', '20', '2288', '4478', '0'), +('2', '8', '20', '2345', '1112', '0'), +('2', '8', '12', '2291', '3830', '0'), +('2', '8', '12', '2923', '3074', '0'), +('2', '8', '12', '20655', '2800', '0'), +('2', '8', '12', '2336', '1012', '0'), +('2', '8', '18', '2292', '1228', '0'), +('2', '8', '18', '4886', '1179', '0'), +('2', '8', '18', '4410', '1142', '0'), +('2', '8', '18', '2461', '579', '0'), +('2', '8', '19', '68239', '2213', '0'), +('2', '8', '19', '1368', '2016', '0'), +('2', '8', '19', '2293', '1525', '0'), +('2', '8', '19', '4837', '1507', '0'), +('2', '8', '13', '11691', '9113', '0'), +('2', '8', '13', '27718', '6469', '0'), +('2', '8', '13', '10333', '5300', '0'), +('2', '8', '13', '27719', '4572', '0'), +('2', '8', '14', '27716', '7623', '0'), +('2', '8', '14', '10333', '5300', '0'), +('2', '8', '14', '10334', '3503', '0'), +('2', '8', '14', '14107', '3097', '0'), +('2', '8', '11', '14762', '2204', '0'), +('2', '8', '11', '9246', '978', '0'), +('2', '8', '11', '20677', '450', '0'), +('2', '8', '11', '16941', '193', '0'), +('2', '9', '22', '9246', '0', '0'), +('2', '9', '22', '10323', '0', '0'), +('2', '9', '22', '44492', '0', '0'), +('2', '9', '22', '13101', '0', '0'), +('2', '9', '1', '14702', '3750', '0'), +('2', '9', '1', '14701', '2862', '0'), +('2', '9', '1', '30361', '2640', '0'), +('2', '9', '1', '14563', '1282', '0'), +('2', '9', '2', '10143', '5368', '0'), +('2', '9', '2', '30363', '3700', '0'), +('2', '9', '2', '3000', '2534', '0'), +('2', '9', '2', '2294', '2257', '0'), +('2', '9', '3', '11052', '1631', '0'), +('2', '9', '3', '2295', '1236', '0'), +('2', '9', '3', '14705', '990', '0'), +('2', '9', '3', '14706', '990', '0'), +('2', '9', '5', '14703', '6050', '0'), +('2', '9', '5', '14700', '3318', '0'), +('2', '9', '5', '30362', '3140', '0'), +('2', '9', '5', '10055', '2780', '0'), +('2', '9', '8', '11603', '9289', '0'), +('2', '9', '8', '2349', '3554', '0'), +('2', '9', '8', '1363', '2510', '0'), +('2', '9', '8', '12238', '1910', '0'), +('2', '9', '6', '2924', '6369', '0'), +('2', '9', '6', '1557', '5310', '0'), +('2', '9', '6', '27717', '4893', '0'), +('2', '9', '6', '1401', '2174', '0'), +('2', '9', '17', '2285', '9801', '0'), +('2', '9', '17', '4882', '4591', '0'), +('2', '9', '17', '4342', '1214', '0'), +('2', '9', '17', '1891', '666', '0'), +('2', '9', '7', '1362', '2624', '0'), +('2', '9', '7', '2289', '1765', '0'), +('2', '9', '7', '1321', '1746', '0'), +('2', '9', '7', '10336', '330', '0'), +('2', '9', '9', '4884', '2060', '0'), +('2', '9', '9', '4344', '2051', '0'), +('2', '9', '9', '10408', '2002', '0'), +('2', '9', '9', '14650', '1662', '0'), +('2', '9', '15', '10150', '3004', '0'), +('2', '9', '15', '10163', '2300', '0'), +('2', '9', '15', '14651', '2224', '0'), +('2', '9', '15', '30360', '1600', '0'), +('2', '9', '20', '11666', '8306', '0'), +('2', '9', '20', '2742', '5094', '0'), +('2', '9', '20', '2288', '4478', '0'), +('2', '9', '20', '2345', '1112', '0'), +('2', '9', '12', '2291', '3830', '0'), +('2', '9', '12', '2923', '3074', '0'), +('2', '9', '12', '20655', '2824', '0'), +('2', '9', '12', '2336', '1012', '0'), +('2', '9', '18', '4886', '1288', '0'), +('2', '9', '18', '2292', '1276', '0'), +('2', '9', '18', '4410', '1142', '0'), +('2', '9', '18', '2461', '627', '0'), +('2', '9', '19', '68239', '2250', '0'), +('2', '9', '19', '1368', '2016', '0'), +('2', '9', '19', '4837', '1567', '0'), +('2', '9', '19', '2293', '1561', '0'), +('2', '9', '13', '11691', '9294', '0'), +('2', '9', '13', '27718', '6590', '0'), +('2', '9', '13', '10333', '5300', '0'), +('2', '9', '13', '27719', '4664', '0'), +('2', '9', '14', '27716', '7731', '0'), +('2', '9', '14', '10333', '5300', '0'), +('2', '9', '14', '10334', '3503', '0'), +('2', '9', '14', '14107', '3158', '0'), +('2', '9', '11', '14762', '2204', '0'), +('2', '9', '11', '9246', '1099', '0'), +('2', '9', '11', '20677', '450', '0'), +('2', '9', '11', '16941', '217', '0'), +('2', '10', '22', '9246', '0', '0'), +('2', '10', '22', '10323', '0', '0'), +('2', '10', '22', '44492', '0', '0'), +('2', '10', '22', '13101', '0', '0'), +('2', '10', '1', '14702', '3750', '0'), +('2', '10', '1', '14701', '2862', '0'), +('2', '10', '1', '30361', '2640', '0'), +('2', '10', '1', '14563', '1390', '0'), +('2', '10', '2', '10143', '5368', '0'), +('2', '10', '2', '30363', '3700', '0'), +('2', '10', '2', '3000', '2534', '0'), +('2', '10', '2', '2294', '2281', '0'), +('2', '10', '3', '11052', '1812', '0'), +('2', '10', '3', '2295', '1260', '0'), +('2', '10', '3', '14108', '1020', '0'), +('2', '10', '3', '14705', '990', '0'), +('2', '10', '5', '14703', '6050', '0'), +('2', '10', '5', '14700', '3318', '0'), +('2', '10', '5', '30362', '3140', '0'), +('2', '10', '5', '10055', '2780', '0'), +('2', '10', '8', '11603', '9398', '0'), +('2', '10', '8', '2349', '3554', '0'), +('2', '10', '8', '1363', '2510', '0'), +('2', '10', '8', '12238', '2030', '0'), +('2', '10', '6', '2924', '6430', '0'), +('2', '10', '6', '1557', '5310', '0'), +('2', '10', '6', '27717', '5040', '0'), +('2', '10', '6', '1401', '2174', '0'), +('2', '10', '17', '2285', '9850', '0'), +('2', '10', '17', '4882', '4776', '0'), +('2', '10', '17', '4342', '1335', '0'), +('2', '10', '17', '2405', '673', '0'), +('2', '10', '7', '1362', '2624', '0'), +('2', '10', '7', '2289', '1813', '0'), +('2', '10', '7', '1321', '1746', '0'), +('2', '10', '7', '10336', '366', '0'), +('2', '10', '9', '4884', '2060', '0'), +('2', '10', '9', '4344', '2051', '0'), +('2', '10', '9', '10408', '2002', '0'), +('2', '10', '9', '14650', '1662', '0'), +('2', '10', '15', '10150', '3004', '0'), +('2', '10', '15', '10163', '2300', '0'), +('2', '10', '15', '14651', '2224', '0'), +('2', '10', '15', '30360', '1600', '0'), +('2', '10', '20', '11666', '8308', '0'), +('2', '10', '20', '2742', '5097', '0'), +('2', '10', '20', '2288', '4478', '0'), +('2', '10', '20', '2345', '1112', '0'), +('2', '10', '12', '2291', '3830', '0'), +('2', '10', '12', '2923', '3074', '0'), +('2', '10', '12', '20655', '2849', '0'), +('2', '10', '12', '2336', '1012', '0'), +('2', '10', '18', '4886', '1397', '0'), +('2', '10', '18', '2292', '1324', '0'), +('2', '10', '18', '4410', '1142', '0'), +('2', '10', '18', '2461', '675', '0'), +('2', '10', '19', '68239', '2286', '0'), +('2', '10', '19', '1368', '2016', '0'), +('2', '10', '19', '4837', '1628', '0'), +('2', '10', '19', '2293', '1597', '0'), +('2', '10', '13', '11691', '9475', '0'), +('2', '10', '13', '27718', '6710', '0'), +('2', '10', '13', '10333', '5300', '0'), +('2', '10', '13', '27719', '4756', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '10', '14', '27716', '7840', '0'), +('2', '10', '14', '10333', '5300', '0'), +('2', '10', '14', '10334', '3503', '0'), +('2', '10', '14', '9690', '3500', '0'), +('2', '10', '11', '14762', '2204', '0'), +('2', '10', '11', '9246', '1220', '0'), +('2', '10', '11', '20677', '450', '0'), +('2', '10', '11', '16941', '242', '0'), +('2', '11', '22', '9246', '0', '0'), +('2', '11', '22', '10323', '0', '0'), +('2', '11', '22', '44492', '0', '0'), +('2', '11', '22', '13101', '0', '0'), +('2', '11', '1', '14702', '3750', '0'), +('2', '11', '1', '14701', '2862', '0'), +('2', '11', '1', '30361', '2640', '0'), +('2', '11', '1', '14563', '1499', '0'), +('2', '11', '2', '10143', '5368', '0'), +('2', '11', '2', '30363', '3700', '0'), +('2', '11', '2', '3000', '2534', '0'), +('2', '11', '2', '2294', '2306', '0'), +('2', '11', '3', '11052', '1993', '0'), +('2', '11', '3', '2295', '1284', '0'), +('2', '11', '3', '14108', '1104', '0'), +('2', '11', '3', '14705', '990', '0'), +('2', '11', '5', '14703', '6050', '0'), +('2', '11', '5', '14700', '3318', '0'), +('2', '11', '5', '30362', '3140', '0'), +('2', '11', '5', '10055', '2780', '0'), +('2', '11', '8', '11603', '9506', '0'), +('2', '11', '8', '2349', '3554', '0'), +('2', '11', '8', '1363', '2510', '0'), +('2', '11', '8', '12238', '2151', '0'), +('2', '11', '6', '2924', '6490', '0'), +('2', '11', '6', '1557', '5310', '0'), +('2', '11', '6', '27717', '5188', '0'), +('2', '11', '6', '1401', '2174', '0'), +('2', '11', '17', '2285', '9898', '0'), +('2', '11', '17', '4882', '4962', '0'), +('2', '11', '17', '4342', '1456', '0'), +('2', '11', '17', '2405', '735', '0'), +('2', '11', '7', '1362', '2624', '0'), +('2', '11', '7', '2289', '1862', '0'), +('2', '11', '7', '1321', '1746', '0'), +('2', '11', '7', '10336', '402', '0'), +('2', '11', '9', '4884', '2060', '0'), +('2', '11', '9', '4344', '2051', '0'), +('2', '11', '9', '10408', '2002', '0'), +('2', '11', '9', '14650', '1662', '0'), +('2', '11', '15', '10150', '3004', '0'), +('2', '11', '15', '10163', '2300', '0'), +('2', '11', '15', '14651', '2224', '0'), +('2', '11', '15', '30360', '1600', '0'), +('2', '11', '20', '11666', '8310', '0'), +('2', '11', '20', '2742', '5100', '0'), +('2', '11', '20', '2288', '4478', '0'), +('2', '11', '20', '2345', '1112', '0'), +('2', '11', '12', '2291', '3830', '0'), +('2', '11', '12', '2923', '3074', '0'), +('2', '11', '12', '20655', '2874', '0'), +('2', '11', '12', '4345', '1037', '0'), +('2', '11', '18', '4886', '1506', '0'), +('2', '11', '18', '2292', '1373', '0'), +('2', '11', '18', '4410', '1142', '0'), +('2', '11', '18', '2461', '724', '0'), +('2', '11', '19', '68239', '2322', '0'), +('2', '11', '19', '1368', '2016', '0'), +('2', '11', '19', '4837', '1688', '0'), +('2', '11', '19', '2293', '1634', '0'), +('2', '11', '13', '11691', '9656', '0'), +('2', '11', '13', '27718', '6831', '0'), +('2', '11', '13', '10333', '5300', '0'), +('2', '11', '13', '27719', '4848', '0'), +('2', '11', '14', '27716', '7949', '0'), +('2', '11', '14', '10333', '5300', '0'), +('2', '11', '14', '10334', '3503', '0'), +('2', '11', '14', '9690', '3500', '0'), +('2', '11', '11', '14762', '2204', '0'), +('2', '11', '11', '9246', '1341', '0'), +('2', '11', '11', '20677', '450', '0'), +('2', '11', '11', '16941', '266', '0'), +('2', '12', '22', '9246', '0', '0'), +('2', '12', '22', '10323', '0', '0'), +('2', '12', '22', '44492', '0', '0'), +('2', '12', '22', '13101', '0', '0'), +('2', '12', '1', '14702', '3750', '0'), +('2', '12', '1', '14701', '2862', '0'), +('2', '12', '1', '30361', '2640', '0'), +('2', '12', '1', '14563', '1608', '0'), +('2', '12', '2', '10143', '5368', '0'), +('2', '12', '2', '30363', '3700', '0'), +('2', '12', '2', '3000', '2534', '0'), +('2', '12', '2', '2294', '2330', '0'), +('2', '12', '3', '11052', '2174', '0'), +('2', '12', '3', '2295', '1308', '0'), +('2', '12', '3', '14108', '1189', '0'), +('2', '12', '3', '4505', '1045', '0'), +('2', '12', '5', '14703', '6050', '0'), +('2', '12', '5', '14700', '3318', '0'), +('2', '12', '5', '30362', '3140', '0'), +('2', '12', '5', '14562', '2845', '0'), +('2', '12', '8', '11603', '9615', '0'), +('2', '12', '8', '2349', '3554', '0'), +('2', '12', '8', '1363', '2510', '0'), +('2', '12', '8', '12238', '2272', '0'), +('2', '12', '6', '2924', '6550', '0'), +('2', '12', '6', '27717', '5335', '0'), +('2', '12', '6', '1557', '5310', '0'), +('2', '12', '6', '1401', '2174', '0'), +('2', '12', '17', '2285', '9946', '0'), +('2', '12', '17', '4882', '5148', '0'), +('2', '12', '17', '4342', '1576', '0'), +('2', '12', '17', '2405', '796', '0'), +('2', '12', '7', '1362', '2624', '0'), +('2', '12', '7', '2289', '1910', '0'), +('2', '12', '7', '1321', '1746', '0'), +('2', '12', '7', '10336', '439', '0'), +('2', '12', '9', '4884', '2060', '0'), +('2', '12', '9', '4344', '2051', '0'), +('2', '12', '9', '10408', '2002', '0'), +('2', '12', '9', '14650', '1662', '0'), +('2', '12', '15', '10150', '3004', '0'), +('2', '12', '15', '10163', '2300', '0'), +('2', '12', '15', '14651', '2224', '0'), +('2', '12', '15', '30360', '1600', '0'), +('2', '12', '20', '11666', '8312', '0'), +('2', '12', '20', '2742', '5103', '0'), +('2', '12', '20', '2288', '4478', '0'), +('2', '12', '20', '2345', '1112', '0'), +('2', '12', '12', '2291', '3830', '0'), +('2', '12', '12', '2923', '3074', '0'), +('2', '12', '12', '20655', '2899', '0'), +('2', '12', '12', '4345', '1097', '0'), +('2', '12', '18', '4886', '1614', '0'), +('2', '12', '18', '2292', '1421', '0'), +('2', '12', '18', '4410', '1142', '0'), +('2', '12', '18', '2461', '772', '0'), +('2', '12', '19', '68239', '2358', '0'), +('2', '12', '19', '1368', '2016', '0'), +('2', '12', '19', '4837', '1749', '0'), +('2', '12', '19', '2293', '1670', '0'), +('2', '12', '13', '11691', '9837', '0'), +('2', '12', '13', '27718', '6952', '0'), +('2', '12', '13', '10333', '5300', '0'), +('2', '12', '13', '27719', '4940', '0'), +('2', '12', '14', '27716', '8058', '0'), +('2', '12', '14', '10333', '5300', '0'), +('2', '12', '14', '10334', '3503', '0'), +('2', '12', '14', '9690', '3500', '0'), +('2', '12', '11', '14762', '2204', '0'), +('2', '12', '11', '9246', '1462', '0'), +('2', '12', '11', '20677', '450', '0'), +('2', '12', '11', '16941', '290', '0'), +('2', '13', '22', '9246', '0', '0'), +('2', '13', '22', '10323', '0', '0'), +('2', '13', '22', '44492', '0', '0'), +('2', '13', '22', '13101', '0', '0'), +('2', '13', '1', '14702', '3750', '0'), +('2', '13', '1', '14701', '2862', '0'), +('2', '13', '1', '30361', '2640', '0'), +('2', '13', '1', '14563', '1716', '0'), +('2', '13', '2', '10143', '5368', '0'), +('2', '13', '2', '30363', '3700', '0'), +('2', '13', '2', '3000', '2534', '0'), +('2', '13', '2', '2294', '2354', '0'), +('2', '13', '3', '11052', '2356', '0'), +('2', '13', '3', '2295', '1332', '0'), +('2', '13', '3', '14108', '1273', '0'), +('2', '13', '3', '4505', '1129', '0'), +('2', '13', '5', '14703', '6050', '0'), +('2', '13', '5', '14700', '3318', '0'), +('2', '13', '5', '30362', '3140', '0'), +('2', '13', '5', '14562', '2929', '0'), +('2', '13', '8', '11603', '9724', '0'), +('2', '13', '8', '2349', '3554', '0'), +('2', '13', '8', '1363', '2510', '0'), +('2', '13', '8', '12238', '2393', '0'), +('2', '13', '6', '2924', '6611', '0'), +('2', '13', '6', '27717', '5482', '0'), +('2', '13', '6', '1557', '5310', '0'), +('2', '13', '6', '1401', '2174', '0'), +('2', '13', '17', '2285', '9995', '0'), +('2', '13', '17', '4882', '5334', '0'), +('2', '13', '17', '4342', '1697', '0'), +('2', '13', '17', '2405', '857', '0'), +('2', '13', '7', '1362', '2624', '0'), +('2', '13', '7', '2289', '1958', '0'), +('2', '13', '7', '1321', '1746', '0'), +('2', '13', '7', '10336', '475', '0'), +('2', '13', '9', '4884', '2060', '0'), +('2', '13', '9', '4344', '2051', '0'), +('2', '13', '9', '10408', '2002', '0'), +('2', '13', '9', '14650', '1662', '0'), +('2', '13', '15', '10150', '3004', '0'), +('2', '13', '15', '10163', '2300', '0'), +('2', '13', '15', '14651', '2224', '0'), +('2', '13', '15', '30360', '1600', '0'), +('2', '13', '20', '11666', '8314', '0'), +('2', '13', '20', '2742', '5106', '0'), +('2', '13', '20', '2288', '4478', '0'), +('2', '13', '20', '2345', '1112', '0'), +('2', '13', '12', '2291', '3830', '0'), +('2', '13', '12', '2923', '3074', '0'), +('2', '13', '12', '20655', '2923', '0'), +('2', '13', '12', '4345', '1158', '0'), +('2', '13', '18', '4886', '1723', '0'), +('2', '13', '18', '2292', '1469', '0'), +('2', '13', '18', '4410', '1142', '0'), +('2', '13', '18', '2461', '820', '0'), +('2', '13', '19', '68239', '2395', '0'), +('2', '13', '19', '1368', '2016', '0'), +('2', '13', '19', '4837', '1809', '0'), +('2', '13', '19', '2293', '1706', '0'), +('2', '13', '13', '11691', '10019', '0'), +('2', '13', '13', '27718', '7073', '0'), +('2', '13', '13', '10333', '5300', '0'), +('2', '13', '13', '27719', '5032', '0'), +('2', '13', '14', '27716', '8166', '0'), +('2', '13', '14', '10333', '5300', '0'), +('2', '13', '14', '10334', '3503', '0'), +('2', '13', '14', '9690', '3500', '0'), +('2', '13', '11', '14762', '2204', '0'), +('2', '13', '11', '9246', '1582', '0'), +('2', '13', '11', '20677', '450', '0'), +('2', '13', '11', '16941', '314', '0'), +('2', '14', '22', '9246', '0', '0'), +('2', '14', '22', '10323', '0', '0'), +('2', '14', '22', '44492', '0', '0'), +('2', '14', '22', '13101', '0', '0'), +('2', '14', '1', '14702', '3750', '0'), +('2', '14', '1', '14701', '2862', '0'), +('2', '14', '1', '30361', '2640', '0'), +('2', '14', '1', '14563', '1825', '0'), +('2', '14', '2', '10143', '5368', '0'), +('2', '14', '2', '30363', '3700', '0'), +('2', '14', '2', '3000', '2534', '0'), +('2', '14', '2', '2294', '2378', '0'), +('2', '14', '3', '11052', '2537', '0'), +('2', '14', '3', '14108', '1358', '0'), +('2', '14', '3', '2295', '1356', '0'), +('2', '14', '3', '4505', '1214', '0'), +('2', '14', '5', '14703', '6050', '0'), +('2', '14', '5', '14700', '3318', '0'), +('2', '14', '5', '30362', '3140', '0'), +('2', '14', '5', '14562', '3014', '0'), +('2', '14', '8', '11603', '9832', '0'), +('2', '14', '8', '2349', '3554', '0'), +('2', '14', '8', '12238', '2514', '0'), +('2', '14', '8', '1363', '2510', '0'), +('2', '14', '6', '2924', '6671', '0'), +('2', '14', '6', '27717', '5630', '0'), +('2', '14', '6', '1557', '5310', '0'), +('2', '14', '6', '1401', '2174', '0'), +('2', '14', '17', '2285', '10043', '0'), +('2', '14', '17', '4882', '5519', '0'), +('2', '14', '17', '4342', '1818', '0'), +('2', '14', '17', '2405', '919', '0'), +('2', '14', '7', '1362', '2624', '0'), +('2', '14', '7', '2289', '2007', '0'), +('2', '14', '7', '1321', '1746', '0'), +('2', '14', '7', '10336', '511', '0'), +('2', '14', '9', '4884', '2060', '0'), +('2', '14', '9', '4344', '2051', '0'), +('2', '14', '9', '10408', '2002', '0'), +('2', '14', '9', '14650', '1662', '0'), +('2', '14', '15', '10150', '3004', '0'), +('2', '14', '15', '10163', '2300', '0'), +('2', '14', '15', '14651', '2224', '0'), +('2', '14', '15', '30360', '1600', '0'), +('2', '14', '20', '11666', '8316', '0'), +('2', '14', '20', '2742', '5109', '0'), +('2', '14', '20', '2288', '4478', '0'), +('2', '14', '20', '2345', '1112', '0'), +('2', '14', '12', '2291', '3830', '0'), +('2', '14', '12', '2923', '3074', '0'), +('2', '14', '12', '20655', '2948', '0'), +('2', '14', '12', '4345', '1218', '0'), +('2', '14', '18', '4886', '1832', '0'), +('2', '14', '18', '2292', '1518', '0'), +('2', '14', '18', '4410', '1142', '0'), +('2', '14', '18', '2461', '869', '0'), +('2', '14', '19', '68239', '2431', '0'), +('2', '14', '19', '1368', '2016', '0'), +('2', '14', '19', '4837', '1869', '0'), +('2', '14', '19', '2293', '1742', '0'), +('2', '14', '13', '11691', '10200', '0'), +('2', '14', '13', '27718', '7194', '0'), +('2', '14', '13', '10333', '5300', '0'), +('2', '14', '13', '27719', '5124', '0'), +('2', '14', '14', '27716', '8275', '0'), +('2', '14', '14', '10333', '5300', '0'), +('2', '14', '14', '10334', '3503', '0'), +('2', '14', '14', '9690', '3500', '0'), +('2', '14', '11', '14762', '2204', '0'), +('2', '14', '11', '9246', '1703', '0'), +('2', '14', '11', '20677', '450', '0'), +('2', '14', '11', '16941', '338', '0'), +('2', '15', '22', '9246', '0', '0'), +('2', '15', '22', '10323', '0', '0'), +('2', '15', '22', '44492', '0', '0'), +('2', '15', '22', '13101', '0', '0'), +('2', '15', '1', '14702', '3750', '0'), +('2', '15', '1', '14701', '2862', '0'), +('2', '15', '1', '30361', '2640', '0'), +('2', '15', '1', '14563', '1934', '0'), +('2', '15', '2', '10143', '5368', '0'), +('2', '15', '2', '30363', '3700', '0'), +('2', '15', '2', '3000', '2534', '0'), +('2', '15', '2', '2294', '2402', '0'), +('2', '15', '3', '11052', '2718', '0'), +('2', '15', '3', '14108', '1443', '0'), +('2', '15', '3', '2295', '1381', '0'), +('2', '15', '3', '4505', '1299', '0'), +('2', '15', '5', '14703', '6050', '0'), +('2', '15', '5', '14700', '3318', '0'), +('2', '15', '5', '30362', '3140', '0'), +('2', '15', '5', '14562', '3099', '0'), +('2', '15', '8', '11603', '9941', '0'), +('2', '15', '8', '2349', '3554', '0'), +('2', '15', '8', '12238', '2634', '0'), +('2', '15', '8', '1363', '2510', '0'), +('2', '15', '6', '2924', '6732', '0'), +('2', '15', '6', '27717', '5777', '0'), +('2', '15', '6', '1557', '5310', '0'), +('2', '15', '6', '1401', '2174', '0'), +('2', '15', '17', '2285', '10091', '0'), +('2', '15', '17', '4882', '5705', '0'), +('2', '15', '17', '4342', '1939', '0'), +('2', '15', '17', '2405', '980', '0'), +('2', '15', '7', '1362', '2624', '0'), +('2', '15', '7', '2289', '2055', '0'), +('2', '15', '7', '1321', '1746', '0'), +('2', '15', '7', '10336', '547', '0'), +('2', '15', '9', '4884', '2060', '0'), +('2', '15', '9', '4344', '2051', '0'), +('2', '15', '9', '10408', '2002', '0'), +('2', '15', '9', '14650', '1662', '0'), +('2', '15', '15', '10150', '3004', '0'), +('2', '15', '15', '10163', '2300', '0'), +('2', '15', '15', '14651', '2224', '0'), +('2', '15', '15', '30360', '1600', '0'), +('2', '15', '20', '11666', '8319', '0'), +('2', '15', '20', '2742', '5112', '0'), +('2', '15', '20', '2288', '4478', '0'), +('2', '15', '20', '2345', '1112', '0'), +('2', '15', '12', '2291', '3830', '0'), +('2', '15', '12', '2923', '3074', '0'), +('2', '15', '12', '20655', '2973', '0'), +('2', '15', '12', '4345', '1278', '0'), +('2', '15', '18', '4886', '1940', '0'), +('2', '15', '18', '2292', '1566', '0'), +('2', '15', '18', '4410', '1142', '0'), +('2', '15', '18', '2461', '917', '0'), +('2', '15', '19', '68239', '2467', '0'), +('2', '15', '19', '1368', '2016', '0'), +('2', '15', '19', '4837', '1930', '0'), +('2', '15', '19', '2293', '1779', '0'), +('2', '15', '13', '11691', '10381', '0'), +('2', '15', '13', '27718', '7314', '0'), +('2', '15', '13', '10333', '5300', '0'), +('2', '15', '13', '27719', '5217', '0'), +('2', '15', '14', '27716', '8384', '0'), +('2', '15', '14', '10333', '5300', '0'), +('2', '15', '14', '14107', '3520', '0'), +('2', '15', '14', '10334', '3503', '0'), +('2', '15', '11', '14762', '2204', '0'), +('2', '15', '11', '9246', '1824', '0'), +('2', '15', '11', '20677', '450', '0'), +('2', '15', '11', '16941', '362', '0'), +('2', '16', '22', '9246', '0', '0'), +('2', '16', '22', '10323', '0', '0'), +('2', '16', '22', '44492', '0', '0'), +('2', '16', '22', '13101', '0', '0'), +('2', '16', '1', '14702', '3750', '0'), +('2', '16', '1', '14701', '2862', '0'), +('2', '16', '1', '30361', '2640', '0'), +('2', '16', '1', '14563', '2043', '0'), +('2', '16', '2', '10143', '5368', '0'), +('2', '16', '2', '30363', '3700', '0'), +('2', '16', '2', '3000', '2534', '0'), +('2', '16', '2', '2294', '2426', '0'), +('2', '16', '3', '11052', '2899', '0'), +('2', '16', '3', '14108', '1527', '0'), +('2', '16', '3', '2295', '1405', '0'), +('2', '16', '3', '4505', '1383', '0'), +('2', '16', '5', '14703', '6050', '0'), +('2', '16', '5', '14700', '3318', '0'), +('2', '16', '5', '14562', '3183', '0'), +('2', '16', '5', '30362', '3140', '0'), +('2', '16', '8', '11603', '10050', '0'), +('2', '16', '8', '2349', '3554', '0'), +('2', '16', '8', '12238', '2755', '0'), +('2', '16', '8', '1363', '2510', '0'), +('2', '16', '6', '2924', '6792', '0'), +('2', '16', '6', '27717', '5924', '0'), +('2', '16', '6', '1557', '5310', '0'), +('2', '16', '6', '1401', '2174', '0'), +('2', '16', '17', '2285', '10140', '0'), +('2', '16', '17', '4882', '5891', '0'), +('2', '16', '17', '4342', '2060', '0'), +('2', '16', '17', '2405', '1041', '0'), +('2', '16', '7', '1362', '2624', '0'), +('2', '16', '7', '2289', '2103', '0'), +('2', '16', '7', '1321', '1746', '0'), +('2', '16', '7', '10336', '583', '0'), +('2', '16', '9', '4884', '2060', '0'), +('2', '16', '9', '4344', '2051', '0'), +('2', '16', '9', '10408', '2002', '0'), +('2', '16', '9', '14650', '1662', '0'), +('2', '16', '15', '10150', '3004', '0'), +('2', '16', '15', '10163', '2300', '0'), +('2', '16', '15', '14651', '2224', '0'), +('2', '16', '15', '30360', '1600', '0'), +('2', '16', '20', '11666', '8321', '0'), +('2', '16', '20', '2742', '5115', '0'), +('2', '16', '20', '2288', '4478', '0'), +('2', '16', '20', '2345', '1112', '0'), +('2', '16', '12', '2291', '3830', '0'), +('2', '16', '12', '2923', '3074', '0'), +('2', '16', '12', '20655', '2998', '0'), +('2', '16', '12', '4345', '1339', '0'), +('2', '16', '18', '4886', '2049', '0'), +('2', '16', '18', '2292', '1614', '0'), +('2', '16', '18', '4410', '1142', '0'), +('2', '16', '18', '2461', '965', '0'), +('2', '16', '19', '68239', '2503', '0'), +('2', '16', '19', '1368', '2016', '0'), +('2', '16', '19', '4837', '1990', '0'), +('2', '16', '19', '2293', '1815', '0'), +('2', '16', '13', '11691', '10562', '0'), +('2', '16', '13', '27718', '7435', '0'), +('2', '16', '13', '27719', '5309', '0'), +('2', '16', '13', '10333', '5300', '0'), +('2', '16', '14', '27716', '8493', '0'), +('2', '16', '14', '10333', '5300', '0'), +('2', '16', '14', '14107', '3580', '0'), +('2', '16', '14', '10334', '3503', '0'), +('2', '16', '11', '14762', '2204', '0'), +('2', '16', '11', '9246', '1945', '0'), +('2', '16', '11', '20677', '450', '0'), +('2', '16', '11', '16941', '387', '0'), +('2', '17', '22', '9246', '0', '0'), +('2', '17', '22', '10323', '0', '0'), +('2', '17', '22', '44492', '0', '0'), +('2', '17', '22', '13101', '0', '0'), +('2', '17', '1', '14702', '3750', '0'), +('2', '17', '1', '14701', '2862', '0'), +('2', '17', '1', '30361', '2640', '0'), +('2', '17', '1', '14563', '2151', '0'), +('2', '17', '2', '10143', '5368', '0'), +('2', '17', '2', '30363', '3700', '0'), +('2', '17', '2', '3000', '2534', '0'), +('2', '17', '2', '2294', '2451', '0'), +('2', '17', '3', '11052', '3080', '0'), +('2', '17', '3', '14108', '1612', '0'), +('2', '17', '3', '4505', '1468', '0'), +('2', '17', '3', '14695', '1446', '0'), +('2', '17', '5', '14703', '6050', '0'), +('2', '17', '5', '14700', '3318', '0'), +('2', '17', '5', '14562', '3268', '0'), +('2', '17', '5', '30362', '3140', '0'), +('2', '17', '8', '11603', '10159', '0'), +('2', '17', '8', '2349', '3554', '0'), +('2', '17', '8', '12238', '2876', '0'), +('2', '17', '8', '1363', '2510', '0'), +('2', '17', '6', '2924', '6852', '0'), +('2', '17', '6', '27717', '6072', '0'), +('2', '17', '6', '1557', '5310', '0'), +('2', '17', '6', '1401', '2174', '0'), +('2', '17', '17', '2285', '10188', '0'), +('2', '17', '17', '4882', '6077', '0'), +('2', '17', '17', '4342', '2180', '0'), +('2', '17', '17', '2405', '1103', '0'), +('2', '17', '7', '1362', '2624', '0'), +('2', '17', '7', '2289', '2152', '0'), +('2', '17', '7', '1321', '1746', '0'), +('2', '17', '7', '10336', '620', '0'), +('2', '17', '9', '4884', '2060', '0'), +('2', '17', '9', '4344', '2051', '0'), +('2', '17', '9', '10408', '2002', '0'), +('2', '17', '9', '14650', '1662', '0'), +('2', '17', '15', '10150', '3004', '0'), +('2', '17', '15', '10163', '2300', '0'), +('2', '17', '15', '14651', '2224', '0'), +('2', '17', '15', '30360', '1600', '0'), +('2', '17', '20', '11666', '8323', '0'), +('2', '17', '20', '2742', '5118', '0'), +('2', '17', '20', '2288', '4478', '0'), +('2', '17', '20', '2407', '1163', '0'), +('2', '17', '12', '2291', '3830', '0'), +('2', '17', '12', '2923', '3074', '0'), +('2', '17', '12', '20655', '3022', '0'), +('2', '17', '12', '4345', '1399', '0'), +('2', '17', '18', '4886', '2158', '0'), +('2', '17', '18', '2292', '1663', '0'), +('2', '17', '18', '4410', '1142', '0'), +('2', '17', '18', '2461', '1014', '0'), +('2', '17', '19', '68239', '2540', '0'), +('2', '17', '19', '4837', '2051', '0'), +('2', '17', '19', '1368', '2016', '0'), +('2', '17', '19', '4407', '1908', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '17', '13', '11691', '10743', '0'), +('2', '17', '13', '27718', '7556', '0'), +('2', '17', '13', '27719', '5401', '0'), +('2', '17', '13', '10333', '5300', '0'), +('2', '17', '14', '27716', '8601', '0'), +('2', '17', '14', '10333', '5300', '0'), +('2', '17', '14', '10335', '3686', '0'), +('2', '17', '14', '14107', '3641', '0'), +('2', '17', '11', '14762', '2204', '0'), +('2', '17', '11', '9246', '2066', '0'), +('2', '17', '11', '20677', '450', '0'), +('2', '17', '11', '16941', '411', '0'), +('2', '18', '22', '9246', '0', '0'), +('2', '18', '22', '10323', '0', '0'), +('2', '18', '22', '44492', '0', '0'), +('2', '18', '22', '13101', '0', '0'), +('2', '18', '1', '14702', '3750', '0'), +('2', '18', '1', '14701', '2862', '0'), +('2', '18', '1', '30361', '2640', '0'), +('2', '18', '1', '14563', '2260', '0'), +('2', '18', '2', '10143', '5368', '0'), +('2', '18', '2', '30363', '3700', '0'), +('2', '18', '2', '3000', '2534', '0'), +('2', '18', '2', '2294', '2475', '0'), +('2', '18', '3', '11052', '3262', '0'), +('2', '18', '3', '14108', '1696', '0'), +('2', '18', '3', '4505', '1552', '0'), +('2', '18', '3', '14695', '1531', '0'), +('2', '18', '5', '14703', '6050', '0'), +('2', '18', '5', '14562', '3352', '0'), +('2', '18', '5', '14700', '3318', '0'), +('2', '18', '5', '30362', '3140', '0'), +('2', '18', '8', '11603', '10267', '0'), +('2', '18', '8', '2349', '3554', '0'), +('2', '18', '8', '12238', '2997', '0'), +('2', '18', '8', '1363', '2510', '0'), +('2', '18', '6', '2924', '6913', '0'), +('2', '18', '6', '27717', '6219', '0'), +('2', '18', '6', '1557', '5310', '0'), +('2', '18', '6', '1401', '2174', '0'), +('2', '18', '17', '2285', '10236', '0'), +('2', '18', '17', '4882', '6262', '0'), +('2', '18', '17', '4342', '2301', '0'), +('2', '18', '17', '2405', '1164', '0'), +('2', '18', '7', '1362', '2624', '0'), +('2', '18', '7', '2289', '2200', '0'), +('2', '18', '7', '1321', '1746', '0'), +('2', '18', '7', '10336', '656', '0'), +('2', '18', '9', '4884', '2060', '0'), +('2', '18', '9', '4344', '2051', '0'), +('2', '18', '9', '10408', '2002', '0'), +('2', '18', '9', '14650', '1662', '0'), +('2', '18', '15', '10150', '3004', '0'), +('2', '18', '15', '10163', '2300', '0'), +('2', '18', '15', '14651', '2224', '0'), +('2', '18', '15', '30360', '1600', '0'), +('2', '18', '20', '11666', '8325', '0'), +('2', '18', '20', '2742', '5121', '0'), +('2', '18', '20', '2288', '4478', '0'), +('2', '18', '20', '2407', '1223', '0'), +('2', '18', '12', '2291', '3830', '0'), +('2', '18', '12', '2923', '3074', '0'), +('2', '18', '12', '20655', '3047', '0'), +('2', '18', '12', '4345', '1460', '0'), +('2', '18', '18', '4886', '2267', '0'), +('2', '18', '18', '2292', '1711', '0'), +('2', '18', '18', '4410', '1142', '0'), +('2', '18', '18', '2461', '1062', '0'), +('2', '18', '19', '68239', '2576', '0'), +('2', '18', '19', '4837', '2111', '0'), +('2', '18', '19', '4407', '2017', '0'), +('2', '18', '19', '1368', '2016', '0'), +('2', '18', '13', '11691', '10925', '0'), +('2', '18', '13', '27718', '7677', '0'), +('2', '18', '13', '27719', '5493', '0'), +('2', '18', '13', '10333', '5300', '0'), +('2', '18', '14', '27716', '8710', '0'), +('2', '18', '14', '10333', '5300', '0'), +('2', '18', '14', '10335', '3903', '0'), +('2', '18', '14', '14107', '3701', '0'), +('2', '18', '11', '14762', '2204', '0'), +('2', '18', '11', '9246', '2186', '0'), +('2', '18', '11', '20677', '450', '0'), +('2', '18', '11', '16941', '435', '0'), +('2', '19', '22', '9246', '0', '0'), +('2', '19', '22', '10323', '0', '0'), +('2', '19', '22', '44492', '0', '0'), +('2', '19', '22', '13101', '0', '0'), +('2', '19', '1', '14702', '3750', '0'), +('2', '19', '1', '14701', '2862', '0'), +('2', '19', '1', '30361', '2640', '0'), +('2', '19', '1', '14563', '2369', '0'), +('2', '19', '2', '10143', '5368', '0'), +('2', '19', '2', '30363', '3700', '0'), +('2', '19', '2', '3000', '2534', '0'), +('2', '19', '2', '2294', '2499', '0'), +('2', '19', '3', '11052', '3443', '0'), +('2', '19', '3', '14108', '1781', '0'), +('2', '19', '3', '4505', '1637', '0'), +('2', '19', '3', '14695', '1615', '0'), +('2', '19', '5', '14703', '6050', '0'), +('2', '19', '5', '14562', '3437', '0'), +('2', '19', '5', '14700', '3318', '0'), +('2', '19', '5', '30362', '3140', '0'), +('2', '19', '8', '11603', '10376', '0'), +('2', '19', '8', '2349', '3554', '0'), +('2', '19', '8', '12238', '3118', '0'), +('2', '19', '8', '1363', '2510', '0'), +('2', '19', '6', '2924', '6973', '0'), +('2', '19', '6', '27717', '6367', '0'), +('2', '19', '6', '1557', '5310', '0'), +('2', '19', '6', '1401', '2174', '0'), +('2', '19', '17', '2285', '10285', '0'), +('2', '19', '17', '4882', '6448', '0'), +('2', '19', '17', '4342', '2422', '0'), +('2', '19', '17', '2405', '1225', '0'), +('2', '19', '7', '1362', '2624', '0'), +('2', '19', '7', '2289', '2248', '0'), +('2', '19', '7', '1321', '1746', '0'), +('2', '19', '7', '10336', '692', '0'), +('2', '19', '9', '4884', '2060', '0'), +('2', '19', '9', '4344', '2051', '0'), +('2', '19', '9', '10408', '2002', '0'), +('2', '19', '9', '2290', '1681', '0'), +('2', '19', '15', '10150', '3004', '0'), +('2', '19', '15', '10163', '2300', '0'), +('2', '19', '15', '14651', '2224', '0'), +('2', '19', '15', '30360', '1600', '0'), +('2', '19', '20', '11666', '8327', '0'), +('2', '19', '20', '2742', '5124', '0'), +('2', '19', '20', '2288', '4478', '0'), +('2', '19', '20', '2407', '1284', '0'), +('2', '19', '12', '2291', '3830', '0'), +('2', '19', '12', '2923', '3074', '0'), +('2', '19', '12', '20655', '3072', '0'), +('2', '19', '12', '4345', '1520', '0'), +('2', '19', '18', '4886', '2375', '0'), +('2', '19', '18', '2292', '1759', '0'), +('2', '19', '18', '4410', '1142', '0'), +('2', '19', '18', '2461', '1110', '0'), +('2', '19', '19', '68239', '2612', '0'), +('2', '19', '19', '4837', '2171', '0'), +('2', '19', '19', '4407', '2126', '0'), +('2', '19', '19', '1368', '2016', '0'), +('2', '19', '13', '11691', '11106', '0'), +('2', '19', '13', '27718', '7798', '0'), +('2', '19', '13', '27719', '5585', '0'), +('2', '19', '13', '10333', '5300', '0'), +('2', '19', '14', '27716', '8819', '0'), +('2', '19', '14', '10333', '5300', '0'), +('2', '19', '14', '10335', '4120', '0'), +('2', '19', '14', '14107', '3762', '0'), +('2', '19', '11', '9246', '2307', '0'), +('2', '19', '11', '14762', '2204', '0'), +('2', '19', '11', '16941', '459', '0'), +('2', '19', '11', '20677', '450', '0'), +('2', '20', '22', '9246', '0', '0'), +('2', '20', '22', '10323', '0', '0'), +('2', '20', '22', '44492', '0', '0'), +('2', '20', '22', '13101', '0', '0'), +('2', '20', '1', '14702', '3750', '0'), +('2', '20', '1', '14701', '2862', '0'), +('2', '20', '1', '30361', '2640', '0'), +('2', '20', '1', '14563', '2477', '0'), +('2', '20', '2', '10143', '5368', '0'), +('2', '20', '2', '30363', '3700', '0'), +('2', '20', '2', '3000', '2534', '0'), +('2', '20', '2', '2294', '2523', '0'), +('2', '20', '3', '11052', '3624', '0'), +('2', '20', '3', '14108', '1865', '0'), +('2', '20', '3', '4505', '1721', '0'), +('2', '20', '3', '14695', '1700', '0'), +('2', '20', '5', '14703', '6050', '0'), +('2', '20', '5', '14562', '3521', '0'), +('2', '20', '5', '14700', '3318', '0'), +('2', '20', '5', '30362', '3140', '0'), +('2', '20', '8', '11603', '10485', '0'), +('2', '20', '8', '2349', '3554', '0'), +('2', '20', '8', '12238', '3238', '0'), +('2', '20', '8', '1363', '2510', '0'), +('2', '20', '6', '2924', '7034', '0'), +('2', '20', '6', '27717', '6514', '0'), +('2', '20', '6', '1557', '5310', '0'), +('2', '20', '6', '1401', '2174', '0'), +('2', '20', '17', '2285', '10333', '0'), +('2', '20', '17', '4882', '6634', '0'), +('2', '20', '17', '4342', '2543', '0'), +('2', '20', '17', '2405', '1287', '0'), +('2', '20', '7', '1362', '2624', '0'), +('2', '20', '7', '2289', '2297', '0'), +('2', '20', '7', '1321', '1746', '0'), +('2', '20', '7', '10336', '728', '0'), +('2', '20', '9', '4884', '2060', '0'), +('2', '20', '9', '4344', '2051', '0'), +('2', '20', '9', '10408', '2002', '0'), +('2', '20', '9', '2290', '1742', '0'), +('2', '20', '15', '10150', '3004', '0'), +('2', '20', '15', '10163', '2300', '0'), +('2', '20', '15', '14651', '2224', '0'), +('2', '20', '15', '30360', '1600', '0'), +('2', '20', '20', '11666', '8329', '0'), +('2', '20', '20', '2742', '5127', '0'), +('2', '20', '20', '2288', '4478', '0'), +('2', '20', '20', '2407', '1344', '0'), +('2', '20', '12', '2291', '3830', '0'), +('2', '20', '12', '20655', '3097', '0'), +('2', '20', '12', '2923', '3074', '0'), +('2', '20', '12', '4345', '1580', '0'), +('2', '20', '18', '4886', '2484', '0'), +('2', '20', '18', '2292', '1807', '0'), +('2', '20', '18', '2461', '1159', '0'), +('2', '20', '18', '4410', '1142', '0'), +('2', '20', '19', '68239', '2648', '0'), +('2', '20', '19', '4407', '2235', '0'), +('2', '20', '19', '4837', '2232', '0'), +('2', '20', '19', '1368', '2016', '0'), +('2', '20', '13', '11691', '11287', '0'), +('2', '20', '13', '27718', '7918', '0'), +('2', '20', '13', '27719', '5677', '0'), +('2', '20', '13', '10333', '5300', '0'), +('2', '20', '14', '27716', '8927', '0'), +('2', '20', '14', '10333', '5300', '0'), +('2', '20', '14', '10335', '4338', '0'), +('2', '20', '14', '14107', '3822', '0'), +('2', '20', '11', '9246', '2428', '0'), +('2', '20', '11', '14762', '2204', '0'), +('2', '20', '11', '16941', '483', '0'), +('2', '20', '11', '20677', '450', '0'), +('2', '21', '22', '9246', '0', '0'), +('2', '21', '22', '10323', '0', '0'), +('2', '21', '22', '44492', '0', '0'), +('2', '21', '22', '13101', '0', '0'), +('2', '21', '1', '14702', '3750', '0'), +('2', '21', '1', '14701', '2862', '0'), +('2', '21', '1', '30361', '2640', '0'), +('2', '21', '1', '14563', '2586', '0'), +('2', '21', '2', '10143', '5368', '0'), +('2', '21', '2', '30363', '3700', '0'), +('2', '21', '2', '2294', '2547', '0'), +('2', '21', '2', '3000', '2534', '0'), +('2', '21', '3', '11052', '3805', '0'), +('2', '21', '3', '14108', '1950', '0'), +('2', '21', '3', '4505', '1806', '0'), +('2', '21', '3', '14695', '1784', '0'), +('2', '21', '5', '14703', '6050', '0'), +('2', '21', '5', '14562', '3606', '0'), +('2', '21', '5', '14700', '3318', '0'), +('2', '21', '5', '30362', '3140', '0'), +('2', '21', '8', '11603', '10594', '0'), +('2', '21', '8', '2349', '3554', '0'), +('2', '21', '8', '12238', '3359', '0'), +('2', '21', '8', '1363', '2510', '0'), +('2', '21', '6', '2924', '7094', '0'), +('2', '21', '6', '27717', '6661', '0'), +('2', '21', '6', '1557', '5310', '0'), +('2', '21', '6', '1401', '2174', '0'), +('2', '21', '17', '2285', '10381', '0'), +('2', '21', '17', '4882', '6819', '0'), +('2', '21', '17', '4342', '2664', '0'), +('2', '21', '17', '2405', '1348', '0'), +('2', '21', '7', '1362', '2624', '0'), +('2', '21', '7', '2289', '2345', '0'), +('2', '21', '7', '1321', '1746', '0'), +('2', '21', '7', '10336', '765', '0'), +('2', '21', '9', '4884', '2060', '0'), +('2', '21', '9', '4344', '2051', '0'), +('2', '21', '9', '10408', '2002', '0'), +('2', '21', '9', '2290', '1803', '0'), +('2', '21', '15', '10150', '3004', '0'), +('2', '21', '15', '10163', '2300', '0'), +('2', '21', '15', '14651', '2224', '0'), +('2', '21', '15', '30360', '1600', '0'), +('2', '21', '20', '11666', '8331', '0'), +('2', '21', '20', '2742', '5130', '0'), +('2', '21', '20', '2288', '4478', '0'), +('2', '21', '20', '2407', '1405', '0'), +('2', '21', '12', '2291', '3830', '0'), +('2', '21', '12', '20655', '3122', '0'), +('2', '21', '12', '2923', '3074', '0'), +('2', '21', '12', '4345', '1641', '0'), +('2', '21', '18', '4886', '2593', '0'), +('2', '21', '18', '2292', '1856', '0'), +('2', '21', '18', '2461', '1207', '0'), +('2', '21', '18', '4410', '1142', '0'), +('2', '21', '19', '68239', '2684', '0'), +('2', '21', '19', '4407', '2343', '0'), +('2', '21', '19', '4837', '2292', '0'), +('2', '21', '19', '1368', '2016', '0'), +('2', '21', '13', '11691', '11468', '0'), +('2', '21', '13', '27718', '8039', '0'), +('2', '21', '13', '27719', '5769', '0'), +('2', '21', '13', '10333', '5300', '0'), +('2', '21', '14', '27716', '9036', '0'), +('2', '21', '14', '10333', '5300', '0'), +('2', '21', '14', '10335', '4555', '0'), +('2', '21', '14', '14107', '3882', '0'), +('2', '21', '11', '9246', '2549', '0'), +('2', '21', '11', '14762', '2204', '0'), +('2', '21', '11', '16941', '507', '0'), +('2', '21', '11', '20677', '450', '0'), +('2', '22', '22', '9246', '0', '0'), +('2', '22', '22', '10323', '0', '0'), +('2', '22', '22', '44492', '0', '0'), +('2', '22', '22', '13101', '0', '0'), +('2', '22', '1', '14702', '3750', '0'), +('2', '22', '1', '14701', '2862', '0'), +('2', '22', '1', '14563', '2695', '0'), +('2', '22', '1', '30361', '2640', '0'), +('2', '22', '2', '10143', '5368', '0'), +('2', '22', '2', '30363', '3700', '0'), +('2', '22', '2', '2294', '2571', '0'), +('2', '22', '2', '3000', '2534', '0'), +('2', '22', '3', '11052', '3986', '0'), +('2', '22', '3', '14108', '2034', '0'), +('2', '22', '3', '4505', '1891', '0'), +('2', '22', '3', '14695', '1869', '0'), +('2', '22', '5', '14703', '6050', '0'), +('2', '22', '5', '14562', '3691', '0'), +('2', '22', '5', '14700', '3318', '0'), +('2', '22', '5', '1536', '3183', '0'), +('2', '22', '8', '11603', '10702', '0'), +('2', '22', '8', '2349', '3554', '0'), +('2', '22', '8', '12238', '3480', '0'), +('2', '22', '8', '1363', '2510', '0'), +('2', '22', '6', '2924', '7154', '0'), +('2', '22', '6', '27717', '6809', '0'), +('2', '22', '6', '1557', '5310', '0'), +('2', '22', '6', '1401', '2174', '0'), +('2', '22', '17', '2285', '10429', '0'), +('2', '22', '17', '4882', '7005', '0'), +('2', '22', '17', '4342', '2784', '0'), +('2', '22', '17', '2405', '1409', '0'), +('2', '22', '7', '1362', '2624', '0'), +('2', '22', '7', '2289', '2393', '0'), +('2', '22', '7', '1321', '1746', '0'), +('2', '22', '7', '10336', '801', '0'), +('2', '22', '9', '4884', '2060', '0'), +('2', '22', '9', '4344', '2051', '0'), +('2', '22', '9', '10408', '2002', '0'), +('2', '22', '9', '2290', '1864', '0'), +('2', '22', '15', '10150', '3004', '0'), +('2', '22', '15', '10163', '2300', '0'), +('2', '22', '15', '14651', '2224', '0'), +('2', '22', '15', '30360', '1600', '0'), +('2', '22', '20', '11666', '8333', '0'), +('2', '22', '20', '2742', '5133', '0'), +('2', '22', '20', '2288', '4478', '0'), +('2', '22', '20', '2407', '1465', '0'), +('2', '22', '12', '2291', '3830', '0'), +('2', '22', '12', '20655', '3146', '0'), +('2', '22', '12', '2923', '3074', '0'), +('2', '22', '12', '4345', '1701', '0'), +('2', '22', '18', '4886', '2702', '0'), +('2', '22', '18', '2292', '1904', '0'), +('2', '22', '18', '2461', '1255', '0'), +('2', '22', '18', '4410', '1142', '0'), +('2', '22', '19', '68239', '2721', '0'), +('2', '22', '19', '4407', '2452', '0'), +('2', '22', '19', '4837', '2353', '0'), +('2', '22', '19', '2293', '2032', '0'), +('2', '22', '13', '11691', '11649', '0'), +('2', '22', '13', '27718', '8160', '0'), +('2', '22', '13', '27719', '5861', '0'), +('2', '22', '13', '10333', '5300', '0'), +('2', '22', '14', '27716', '9145', '0'), +('2', '22', '14', '10333', '5300', '0'), +('2', '22', '14', '10335', '4773', '0'), +('2', '22', '14', '14107', '3943', '0'), +('2', '22', '11', '9246', '2670', '0'), +('2', '22', '11', '14762', '2204', '0'), +('2', '22', '11', '16941', '532', '0'), +('2', '22', '11', '20677', '450', '0'), +('2', '23', '22', '9246', '0', '0'), +('2', '23', '22', '10323', '0', '0'), +('2', '23', '22', '44492', '0', '0'), +('2', '23', '22', '13101', '0', '0'), +('2', '23', '1', '14702', '3750', '0'), +('2', '23', '1', '14701', '2862', '0'), +('2', '23', '1', '14563', '2804', '0'), +('2', '23', '1', '30361', '2640', '0'), +('2', '23', '2', '10143', '5368', '0'), +('2', '23', '2', '30363', '3700', '0'), +('2', '23', '2', '2294', '2596', '0'), +('2', '23', '2', '3000', '2534', '0'), +('2', '23', '3', '11052', '4168', '0'), +('2', '23', '3', '14108', '2119', '0'), +('2', '23', '3', '4505', '1975', '0'), +('2', '23', '3', '14695', '1953', '0'), +('2', '23', '5', '14703', '6050', '0'), +('2', '23', '5', '14562', '3775', '0'), +('2', '23', '5', '14700', '3318', '0'), +('2', '23', '5', '1536', '3292', '0'), +('2', '23', '8', '11603', '10811', '0'), +('2', '23', '8', '12238', '3601', '0'), +('2', '23', '8', '2349', '3554', '0'), +('2', '23', '8', '1363', '2510', '0'), +('2', '23', '6', '2924', '7215', '0'), +('2', '23', '6', '27717', '6956', '0'), +('2', '23', '6', '1557', '5310', '0'), +('2', '23', '6', '1904', '2253', '0'), +('2', '23', '17', '2285', '10478', '0'), +('2', '23', '17', '4882', '7191', '0'), +('2', '23', '17', '4342', '2905', '0'), +('2', '23', '17', '2405', '1470', '0'), +('2', '23', '7', '1362', '2624', '0'), +('2', '23', '7', '2289', '2442', '0'), +('2', '23', '7', '1321', '1746', '0'), +('2', '23', '7', '10336', '837', '0'), +('2', '23', '9', '4884', '2060', '0'), +('2', '23', '9', '4344', '2051', '0'), +('2', '23', '9', '10408', '2002', '0'), +('2', '23', '9', '2290', '1925', '0'), +('2', '23', '15', '10150', '3004', '0'), +('2', '23', '15', '10163', '2300', '0'), +('2', '23', '15', '14651', '2224', '0'), +('2', '23', '15', '14631', '1667', '0'), +('2', '23', '20', '11666', '8335', '0'), +('2', '23', '20', '2742', '5136', '0'), +('2', '23', '20', '2288', '4478', '0'), +('2', '23', '20', '2407', '1525', '0'), +('2', '23', '12', '2291', '3830', '0'), +('2', '23', '12', '20655', '3171', '0'), +('2', '23', '12', '2923', '3074', '0'), +('2', '23', '12', '4345', '1762', '0'), +('2', '23', '18', '4886', '2810', '0'), +('2', '23', '18', '2292', '1952', '0'), +('2', '23', '18', '2461', '1304', '0'), +('2', '23', '18', '4410', '1142', '0'), +('2', '23', '19', '68239', '2757', '0'), +('2', '23', '19', '4407', '2561', '0'), +('2', '23', '19', '4837', '2413', '0'), +('2', '23', '19', '2293', '2069', '0'), +('2', '23', '13', '11691', '11831', '0'), +('2', '23', '13', '27718', '8281', '0'), +('2', '23', '13', '27719', '5953', '0'), +('2', '23', '13', '10333', '5300', '0'), +('2', '23', '14', '27716', '9254', '0'), +('2', '23', '14', '10333', '5300', '0'), +('2', '23', '14', '10335', '4990', '0'), +('2', '23', '14', '14107', '4003', '0'), +('2', '23', '11', '9246', '2790', '0'), +('2', '23', '11', '14762', '2204', '0'), +('2', '23', '11', '16941', '556', '0'), +('2', '23', '11', '20677', '450', '0'), +('2', '24', '22', '9246', '0', '0'), +('2', '24', '22', '10323', '0', '0'), +('2', '24', '22', '44492', '0', '0'), +('2', '24', '22', '13101', '0', '0'), +('2', '24', '1', '14702', '3750', '0'), +('2', '24', '1', '14563', '2912', '0'), +('2', '24', '1', '14701', '2862', '0'), +('2', '24', '1', '30361', '2640', '0'), +('2', '24', '2', '10143', '5368', '0'), +('2', '24', '2', '30363', '3700', '0'), +('2', '24', '2', '2294', '2620', '0'), +('2', '24', '2', '3000', '2534', '0'), +('2', '24', '3', '11052', '4349', '0'), +('2', '24', '3', '14108', '2204', '0'), +('2', '24', '3', '4505', '2060', '0'), +('2', '24', '3', '14695', '2038', '0'), +('2', '24', '5', '14703', '6050', '0'), +('2', '24', '5', '14562', '3860', '0'), +('2', '24', '5', '1536', '3400', '0'), +('2', '24', '5', '14700', '3318', '0'), +('2', '24', '8', '11603', '10920', '0'), +('2', '24', '8', '12238', '3722', '0'), +('2', '24', '8', '2349', '3554', '0'), +('2', '24', '8', '1363', '2510', '0'), +('2', '24', '6', '2924', '7275', '0'), +('2', '24', '6', '27717', '7103', '0'), +('2', '24', '6', '1557', '5310', '0'), +('2', '24', '6', '1904', '2350', '0'), +('2', '24', '17', '2285', '10526', '0'), +('2', '24', '17', '4882', '7377', '0'), +('2', '24', '17', '4342', '3026', '0'), +('2', '24', '17', '2405', '1532', '0'), +('2', '24', '7', '1362', '2624', '0'), +('2', '24', '7', '2289', '2490', '0'), +('2', '24', '7', '1321', '1746', '0'), +('2', '24', '7', '10336', '873', '0'), +('2', '24', '9', '4884', '2060', '0'), +('2', '24', '9', '4344', '2051', '0'), +('2', '24', '9', '10408', '2002', '0'), +('2', '24', '9', '2290', '1986', '0'), +('2', '24', '15', '10150', '3004', '0'), +('2', '24', '15', '10163', '2300', '0'), +('2', '24', '15', '14651', '2224', '0'), +('2', '24', '15', '14631', '1740', '0'), +('2', '24', '20', '11666', '8338', '0'), +('2', '24', '20', '2742', '5139', '0'), +('2', '24', '20', '2288', '4478', '0'), +('2', '24', '20', '2407', '1586', '0'), +('2', '24', '12', '2291', '3830', '0'), +('2', '24', '12', '20655', '3196', '0'), +('2', '24', '12', '2923', '3074', '0'), +('2', '24', '12', '4345', '1822', '0'), +('2', '24', '18', '4886', '2919', '0'), +('2', '24', '18', '2292', '2001', '0'), +('2', '24', '18', '2461', '1352', '0'), +('2', '24', '18', '4410', '1142', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '24', '19', '68239', '2793', '0'), +('2', '24', '19', '4407', '2669', '0'), +('2', '24', '19', '4837', '2473', '0'), +('2', '24', '19', '2293', '2105', '0'), +('2', '24', '13', '11691', '12012', '0'), +('2', '24', '13', '27718', '8402', '0'), +('2', '24', '13', '27719', '6046', '0'), +('2', '24', '13', '10333', '5300', '0'), +('2', '24', '14', '27716', '9362', '0'), +('2', '24', '14', '10333', '5300', '0'), +('2', '24', '14', '10335', '5208', '0'), +('2', '24', '14', '14107', '4064', '0'), +('2', '24', '11', '9246', '2911', '0'), +('2', '24', '11', '14762', '2204', '0'), +('2', '24', '11', '16941', '580', '0'), +('2', '24', '11', '20677', '450', '0'), +('2', '25', '22', '9246', '0', '0'), +('2', '25', '22', '10323', '0', '0'), +('2', '25', '22', '44492', '0', '0'), +('2', '25', '22', '13101', '0', '0'), +('2', '25', '1', '14702', '3750', '0'), +('2', '25', '1', '14563', '3021', '0'), +('2', '25', '1', '14701', '2862', '0'), +('2', '25', '1', '30361', '2640', '0'), +('2', '25', '2', '10143', '5368', '0'), +('2', '25', '2', '30363', '3700', '0'), +('2', '25', '2', '2294', '2644', '0'), +('2', '25', '2', '3000', '2534', '0'), +('2', '25', '3', '11052', '4530', '0'), +('2', '25', '3', '14108', '2288', '0'), +('2', '25', '3', '4505', '2144', '0'), +('2', '25', '3', '14695', '2122', '0'), +('2', '25', '5', '14703', '6050', '0'), +('2', '25', '5', '14562', '3944', '0'), +('2', '25', '5', '1536', '3509', '0'), +('2', '25', '5', '14700', '3318', '0'), +('2', '25', '8', '11603', '11028', '0'), +('2', '25', '8', '12238', '3842', '0'), +('2', '25', '8', '2349', '3554', '0'), +('2', '25', '8', '1363', '2510', '0'), +('2', '25', '6', '2924', '7336', '0'), +('2', '25', '6', '27717', '7251', '0'), +('2', '25', '6', '1557', '5310', '0'), +('2', '25', '6', '1904', '2446', '0'), +('2', '25', '17', '2285', '10574', '0'), +('2', '25', '17', '4882', '7562', '0'), +('2', '25', '17', '4342', '3147', '0'), +('2', '25', '17', '2405', '1593', '0'), +('2', '25', '7', '1362', '2624', '0'), +('2', '25', '7', '2289', '2538', '0'), +('2', '25', '7', '1321', '1746', '0'), +('2', '25', '7', '10336', '910', '0'), +('2', '25', '9', '4884', '2060', '0'), +('2', '25', '9', '4344', '2051', '0'), +('2', '25', '9', '2290', '2047', '0'), +('2', '25', '9', '10408', '2002', '0'), +('2', '25', '15', '10150', '3004', '0'), +('2', '25', '15', '10163', '2300', '0'), +('2', '25', '15', '14651', '2224', '0'), +('2', '25', '15', '14631', '1812', '0'), +('2', '25', '20', '11666', '8340', '0'), +('2', '25', '20', '2742', '5142', '0'), +('2', '25', '20', '2288', '4478', '0'), +('2', '25', '20', '2407', '1646', '0'), +('2', '25', '12', '2291', '3830', '0'), +('2', '25', '12', '20655', '3221', '0'), +('2', '25', '12', '2923', '3074', '0'), +('2', '25', '12', '4345', '1882', '0'), +('2', '25', '18', '4886', '3028', '0'), +('2', '25', '18', '2292', '2049', '0'), +('2', '25', '18', '2461', '1400', '0'), +('2', '25', '18', '4410', '1142', '0'), +('2', '25', '19', '68239', '2829', '0'), +('2', '25', '19', '4407', '2778', '0'), +('2', '25', '19', '4837', '2534', '0'), +('2', '25', '19', '2293', '2141', '0'), +('2', '25', '13', '11691', '12193', '0'), +('2', '25', '13', '27718', '8522', '0'), +('2', '25', '13', '27719', '6138', '0'), +('2', '25', '13', '10333', '5300', '0'), +('2', '25', '14', '27716', '9471', '0'), +('2', '25', '14', '10335', '5425', '0'), +('2', '25', '14', '10333', '5300', '0'), +('2', '25', '14', '14107', '4124', '0'), +('2', '25', '11', '9246', '3032', '0'), +('2', '25', '11', '14762', '2204', '0'), +('2', '25', '11', '16941', '604', '0'), +('2', '25', '11', '20677', '450', '0'), +('2', '26', '22', '9246', '0', '0'), +('2', '26', '22', '10323', '0', '0'), +('2', '26', '22', '44492', '0', '0'), +('2', '26', '22', '13101', '0', '0'), +('2', '26', '1', '14702', '3750', '0'), +('2', '26', '1', '14563', '3130', '0'), +('2', '26', '1', '14701', '2862', '0'), +('2', '26', '1', '30361', '2640', '0'), +('2', '26', '2', '10143', '5368', '0'), +('2', '26', '2', '30363', '3700', '0'), +('2', '26', '2', '2294', '2668', '0'), +('2', '26', '2', '3000', '2534', '0'), +('2', '26', '3', '11052', '4711', '0'), +('2', '26', '3', '14108', '2373', '0'), +('2', '26', '3', '4505', '2229', '0'), +('2', '26', '3', '14695', '2207', '0'), +('2', '26', '5', '14703', '6050', '0'), +('2', '26', '5', '14562', '4029', '0'), +('2', '26', '5', '1536', '3618', '0'), +('2', '26', '5', '14700', '3318', '0'), +('2', '26', '8', '11603', '11137', '0'), +('2', '26', '8', '12238', '3963', '0'), +('2', '26', '8', '2349', '3554', '0'), +('2', '26', '8', '1363', '2510', '0'), +('2', '26', '6', '27717', '7398', '0'), +('2', '26', '6', '2924', '7396', '0'), +('2', '26', '6', '1557', '5310', '0'), +('2', '26', '6', '1904', '2543', '0'), +('2', '26', '17', '2285', '10623', '0'), +('2', '26', '17', '4882', '7748', '0'), +('2', '26', '17', '4342', '3268', '0'), +('2', '26', '17', '2405', '1654', '0'), +('2', '26', '7', '1362', '2624', '0'), +('2', '26', '7', '2289', '2587', '0'), +('2', '26', '7', '1321', '1746', '0'), +('2', '26', '7', '10336', '946', '0'), +('2', '26', '9', '2290', '2108', '0'), +('2', '26', '9', '4884', '2060', '0'), +('2', '26', '9', '4344', '2051', '0'), +('2', '26', '9', '10408', '2002', '0'), +('2', '26', '15', '10150', '3004', '0'), +('2', '26', '15', '10163', '2300', '0'), +('2', '26', '15', '14651', '2224', '0'), +('2', '26', '15', '14631', '1884', '0'), +('2', '26', '20', '11666', '8342', '0'), +('2', '26', '20', '2742', '5145', '0'), +('2', '26', '20', '2288', '4478', '0'), +('2', '26', '20', '2407', '1707', '0'), +('2', '26', '12', '2291', '3830', '0'), +('2', '26', '12', '20655', '3245', '0'), +('2', '26', '12', '2923', '3074', '0'), +('2', '26', '12', '4345', '1943', '0'), +('2', '26', '18', '4886', '3136', '0'), +('2', '26', '18', '2292', '2097', '0'), +('2', '26', '18', '2461', '1449', '0'), +('2', '26', '18', '4410', '1142', '0'), +('2', '26', '19', '4407', '2887', '0'), +('2', '26', '19', '68239', '2866', '0'), +('2', '26', '19', '4837', '2594', '0'), +('2', '26', '19', '2293', '2177', '0'), +('2', '26', '13', '11691', '12374', '0'), +('2', '26', '13', '27718', '8643', '0'), +('2', '26', '13', '27719', '6230', '0'), +('2', '26', '13', '10333', '5300', '0'), +('2', '26', '14', '27716', '9580', '0'), +('2', '26', '14', '10335', '5643', '0'), +('2', '26', '14', '10333', '5300', '0'), +('2', '26', '14', '14107', '4184', '0'), +('2', '26', '11', '9246', '3153', '0'), +('2', '26', '11', '14762', '2204', '0'), +('2', '26', '11', '16941', '628', '0'), +('2', '26', '11', '20677', '450', '0'), +('2', '27', '22', '9246', '0', '0'), +('2', '27', '22', '10323', '0', '0'), +('2', '27', '22', '44492', '0', '0'), +('2', '27', '22', '13101', '0', '0'), +('2', '27', '1', '14702', '3750', '0'), +('2', '27', '1', '14563', '3238', '0'), +('2', '27', '1', '14701', '2862', '0'), +('2', '27', '1', '30361', '2640', '0'), +('2', '27', '2', '10143', '5368', '0'), +('2', '27', '2', '30363', '3700', '0'), +('2', '27', '2', '2294', '2692', '0'), +('2', '27', '2', '3000', '2534', '0'), +('2', '27', '3', '11052', '4892', '0'), +('2', '27', '3', '14108', '2457', '0'), +('2', '27', '3', '4505', '2313', '0'), +('2', '27', '3', '14695', '2292', '0'), +('2', '27', '5', '14703', '6050', '0'), +('2', '27', '5', '14562', '4113', '0'), +('2', '27', '5', '1536', '3727', '0'), +('2', '27', '5', '14700', '3318', '0'), +('2', '27', '8', '11603', '11246', '0'), +('2', '27', '8', '12238', '4084', '0'), +('2', '27', '8', '2349', '3554', '0'), +('2', '27', '8', '1363', '2510', '0'), +('2', '27', '6', '27717', '7546', '0'), +('2', '27', '6', '2924', '7456', '0'), +('2', '27', '6', '1557', '5310', '0'), +('2', '27', '6', '1904', '2639', '0'), +('2', '27', '17', '2285', '10671', '0'), +('2', '27', '17', '4882', '7934', '0'), +('2', '27', '17', '4342', '3388', '0'), +('2', '27', '17', '2405', '1716', '0'), +('2', '27', '7', '2289', '2635', '0'), +('2', '27', '7', '1362', '2624', '0'), +('2', '27', '7', '1321', '1746', '0'), +('2', '27', '7', '10336', '982', '0'), +('2', '27', '9', '2290', '2169', '0'), +('2', '27', '9', '4884', '2060', '0'), +('2', '27', '9', '4344', '2051', '0'), +('2', '27', '9', '10408', '2002', '0'), +('2', '27', '15', '10150', '3004', '0'), +('2', '27', '15', '10163', '2300', '0'), +('2', '27', '15', '14651', '2224', '0'), +('2', '27', '15', '14631', '1957', '0'), +('2', '27', '20', '11666', '8344', '0'), +('2', '27', '20', '2742', '5148', '0'), +('2', '27', '20', '2288', '4478', '0'), +('2', '27', '20', '2407', '1767', '0'), +('2', '27', '12', '2291', '3830', '0'), +('2', '27', '12', '20655', '3270', '0'), +('2', '27', '12', '2923', '3074', '0'), +('2', '27', '12', '4345', '2003', '0'), +('2', '27', '18', '4886', '3245', '0'), +('2', '27', '18', '2292', '2146', '0'), +('2', '27', '18', '2461', '1497', '0'), +('2', '27', '18', '4410', '1142', '0'), +('2', '27', '19', '4407', '2996', '0'), +('2', '27', '19', '68239', '2902', '0'), +('2', '27', '19', '4837', '2655', '0'), +('2', '27', '19', '2293', '2214', '0'), +('2', '27', '13', '11691', '12555', '0'), +('2', '27', '13', '27718', '8764', '0'), +('2', '27', '13', '27719', '6322', '0'), +('2', '27', '13', '10333', '5300', '0'), +('2', '27', '14', '27716', '9688', '0'), +('2', '27', '14', '10335', '5860', '0'), +('2', '27', '14', '10333', '5300', '0'), +('2', '27', '14', '13991', '4262', '0'), +('2', '27', '11', '9246', '3274', '0'), +('2', '27', '11', '14762', '2204', '0'), +('2', '27', '11', '16941', '652', '0'), +('2', '27', '11', '20677', '450', '0'), +('2', '28', '22', '9246', '0', '0'), +('2', '28', '22', '10323', '0', '0'), +('2', '28', '22', '44492', '0', '0'), +('2', '28', '22', '13101', '0', '0'), +('2', '28', '1', '14702', '3750', '0'), +('2', '28', '1', '14563', '3347', '0'), +('2', '28', '1', '14701', '2862', '0'), +('2', '28', '1', '30361', '2640', '0'), +('2', '28', '2', '10143', '5368', '0'), +('2', '28', '2', '30363', '3700', '0'), +('2', '28', '2', '2294', '2716', '0'), +('2', '28', '2', '3000', '2534', '0'), +('2', '28', '3', '11052', '5074', '0'), +('2', '28', '3', '14108', '2542', '0'), +('2', '28', '3', '4505', '2398', '0'), +('2', '28', '3', '14695', '2376', '0'), +('2', '28', '5', '14703', '6050', '0'), +('2', '28', '5', '14562', '4198', '0'), +('2', '28', '5', '1536', '3835', '0'), +('2', '28', '5', '14700', '3318', '0'), +('2', '28', '8', '11603', '11355', '0'), +('2', '28', '8', '12238', '4205', '0'), +('2', '28', '8', '2349', '3554', '0'), +('2', '28', '8', '1363', '2510', '0'), +('2', '28', '6', '27717', '7693', '0'), +('2', '28', '6', '2924', '7517', '0'), +('2', '28', '6', '1557', '5310', '0'), +('2', '28', '6', '1904', '2736', '0'), +('2', '28', '17', '2285', '10719', '0'), +('2', '28', '17', '4882', '8120', '0'), +('2', '28', '17', '4342', '3509', '0'), +('2', '28', '17', '2405', '1777', '0'), +('2', '28', '7', '2289', '2683', '0'), +('2', '28', '7', '1362', '2624', '0'), +('2', '28', '7', '1321', '1746', '0'), +('2', '28', '7', '10336', '1018', '0'), +('2', '28', '9', '2290', '2230', '0'), +('2', '28', '9', '4884', '2060', '0'), +('2', '28', '9', '4344', '2051', '0'), +('2', '28', '9', '10408', '2002', '0'), +('2', '28', '15', '10150', '3004', '0'), +('2', '28', '15', '10163', '2300', '0'), +('2', '28', '15', '14651', '2224', '0'), +('2', '28', '15', '14631', '2029', '0'), +('2', '28', '20', '11666', '8346', '0'), +('2', '28', '20', '2742', '5151', '0'), +('2', '28', '20', '2288', '4478', '0'), +('2', '28', '20', '2407', '1827', '0'), +('2', '28', '12', '2291', '3830', '0'), +('2', '28', '12', '20655', '3295', '0'), +('2', '28', '12', '2923', '3074', '0'), +('2', '28', '12', '4345', '2064', '0'), +('2', '28', '18', '4886', '3354', '0'), +('2', '28', '18', '2292', '2194', '0'), +('2', '28', '18', '2461', '1545', '0'), +('2', '28', '18', '4410', '1142', '0'), +('2', '28', '19', '4407', '3104', '0'), +('2', '28', '19', '68239', '2938', '0'), +('2', '28', '19', '4837', '2715', '0'), +('2', '28', '19', '2293', '2250', '0'), +('2', '28', '13', '11691', '12737', '0'), +('2', '28', '13', '27718', '8885', '0'), +('2', '28', '13', '27719', '6414', '0'), +('2', '28', '13', '10333', '5300', '0'), +('2', '28', '14', '27716', '9797', '0'), +('2', '28', '14', '10335', '6077', '0'), +('2', '28', '14', '10333', '5300', '0'), +('2', '28', '14', '13991', '4382', '0'), +('2', '28', '11', '9246', '3394', '0'), +('2', '28', '11', '14762', '2204', '0'), +('2', '28', '11', '16941', '676', '0'), +('2', '28', '11', '20677', '450', '0'), +('2', '29', '22', '9246', '0', '0'), +('2', '29', '22', '10323', '0', '0'), +('2', '29', '22', '44492', '0', '0'), +('2', '29', '22', '13101', '0', '0'), +('2', '29', '1', '14702', '3750', '0'), +('2', '29', '1', '14563', '3456', '0'), +('2', '29', '1', '14701', '2862', '0'), +('2', '29', '1', '30361', '2640', '0'), +('2', '29', '2', '10143', '5368', '0'), +('2', '29', '2', '30363', '3700', '0'), +('2', '29', '2', '2294', '2741', '0'), +('2', '29', '2', '3000', '2534', '0'), +('2', '29', '3', '11052', '5255', '0'), +('2', '29', '3', '14108', '2626', '0'), +('2', '29', '3', '4505', '2482', '0'), +('2', '29', '3', '14695', '2461', '0'), +('2', '29', '5', '14703', '6050', '0'), +('2', '29', '5', '14562', '4282', '0'), +('2', '29', '5', '1536', '3944', '0'), +('2', '29', '5', '14700', '3318', '0'), +('2', '29', '8', '11603', '11463', '0'), +('2', '29', '8', '12238', '4326', '0'), +('2', '29', '8', '2349', '3554', '0'), +('2', '29', '8', '1363', '2510', '0'), +('2', '29', '6', '27717', '7840', '0'), +('2', '29', '6', '2924', '7577', '0'), +('2', '29', '6', '1557', '5310', '0'), +('2', '29', '6', '1904', '2833', '0'), +('2', '29', '17', '2285', '10768', '0'), +('2', '29', '17', '4882', '8305', '0'), +('2', '29', '17', '4342', '3630', '0'), +('2', '29', '17', '2405', '1838', '0'), +('2', '29', '7', '2289', '2731', '0'), +('2', '29', '7', '1362', '2624', '0'), +('2', '29', '7', '1321', '1746', '0'), +('2', '29', '7', '10336', '1055', '0'), +('2', '29', '9', '2290', '2291', '0'), +('2', '29', '9', '4884', '2060', '0'), +('2', '29', '9', '4344', '2051', '0'), +('2', '29', '9', '10408', '2002', '0'), +('2', '29', '15', '10150', '3004', '0'), +('2', '29', '15', '10163', '2300', '0'), +('2', '29', '15', '14651', '2224', '0'), +('2', '29', '15', '14631', '2102', '0'), +('2', '29', '20', '11666', '8348', '0'), +('2', '29', '20', '2742', '5154', '0'), +('2', '29', '20', '2288', '4478', '0'), +('2', '29', '20', '2407', '1888', '0'), +('2', '29', '12', '2291', '3830', '0'), +('2', '29', '12', '20655', '3320', '0'), +('2', '29', '12', '2923', '3074', '0'), +('2', '29', '12', '4345', '2124', '0'), +('2', '29', '18', '4886', '3463', '0'), +('2', '29', '18', '2292', '2242', '0'), +('2', '29', '18', '2461', '1594', '0'), +('2', '29', '18', '4410', '1142', '0'), +('2', '29', '19', '4407', '3213', '0'), +('2', '29', '19', '68239', '2974', '0'), +('2', '29', '19', '4837', '2775', '0'), +('2', '29', '19', '2293', '2286', '0'), +('2', '29', '13', '11691', '12918', '0'), +('2', '29', '13', '27718', '9006', '0'), +('2', '29', '13', '27719', '6506', '0'), +('2', '29', '13', '10333', '5300', '0'), +('2', '29', '14', '27716', '9906', '0'), +('2', '29', '14', '10335', '6295', '0'), +('2', '29', '14', '10333', '5300', '0'), +('2', '29', '14', '13991', '4503', '0'), +('2', '29', '11', '9246', '3515', '0'), +('2', '29', '11', '14762', '2204', '0'), +('2', '29', '11', '16941', '701', '0'), +('2', '29', '11', '20677', '450', '0'), +('2', '30', '22', '9246', '0', '0'), +('2', '30', '22', '10323', '0', '0'), +('2', '30', '22', '44492', '0', '0'), +('2', '30', '22', '13101', '0', '0'), +('2', '30', '1', '14702', '3750', '0'), +('2', '30', '1', '14563', '3565', '0'), +('2', '30', '1', '14701', '2862', '0'), +('2', '30', '1', '30361', '2640', '0'), +('2', '30', '2', '10143', '5368', '0'), +('2', '30', '2', '30363', '3700', '0'), +('2', '30', '2', '2294', '2765', '0'), +('2', '30', '2', '3000', '2534', '0'), +('2', '30', '3', '11052', '5436', '0'), +('2', '30', '3', '14108', '2711', '0'), +('2', '30', '3', '4505', '2567', '0'), +('2', '30', '3', '14695', '2545', '0'), +('2', '30', '5', '14703', '6050', '0'), +('2', '30', '5', '14562', '4367', '0'), +('2', '30', '5', '1536', '4053', '0'), +('2', '30', '5', '14700', '3318', '0'), +('2', '30', '8', '11603', '11572', '0'), +('2', '30', '8', '12238', '4446', '0'), +('2', '30', '8', '2349', '3554', '0'), +('2', '30', '8', '1363', '2510', '0'), +('2', '30', '6', '27717', '7988', '0'), +('2', '30', '6', '2924', '7638', '0'), +('2', '30', '6', '1557', '5310', '0'), +('2', '30', '6', '1904', '2929', '0'), +('2', '30', '17', '2285', '10816', '0'), +('2', '30', '17', '4882', '8491', '0'), +('2', '30', '17', '4342', '3751', '0'), +('2', '30', '17', '2405', '1900', '0'), +('2', '30', '7', '2289', '2780', '0'), +('2', '30', '7', '1362', '2624', '0'), +('2', '30', '7', '1321', '1746', '0'), +('2', '30', '7', '10336', '1091', '0'), +('2', '30', '9', '2290', '2352', '0'), +('2', '30', '9', '4884', '2060', '0'), +('2', '30', '9', '4344', '2051', '0'), +('2', '30', '9', '10408', '2002', '0'), +('2', '30', '15', '10150', '3004', '0'), +('2', '30', '15', '10163', '2300', '0'), +('2', '30', '15', '14651', '2224', '0'), +('2', '30', '15', '14631', '2174', '0'), +('2', '30', '20', '11666', '8350', '0'), +('2', '30', '20', '2742', '5157', '0'), +('2', '30', '20', '2288', '4478', '0'), +('2', '30', '20', '2407', '1948', '0'), +('2', '30', '12', '2291', '3830', '0'), +('2', '30', '12', '20655', '3344', '0'), +('2', '30', '12', '2923', '3074', '0'), +('2', '30', '12', '4345', '2184', '0'), +('2', '30', '18', '4886', '3571', '0'), +('2', '30', '18', '2292', '2291', '0'), +('2', '30', '18', '2461', '1642', '0'), +('2', '30', '18', '4410', '1142', '0'), +('2', '30', '19', '4407', '3322', '0'), +('2', '30', '19', '68239', '3011', '0'), +('2', '30', '19', '4837', '2836', '0'), +('2', '30', '19', '2293', '2322', '0'), +('2', '30', '13', '11691', '13099', '0'), +('2', '30', '13', '27718', '9126', '0'), +('2', '30', '13', '27719', '6598', '0'), +('2', '30', '13', '10333', '5300', '0'), +('2', '30', '14', '27716', '10015', '0'), +('2', '30', '14', '10335', '6512', '0'), +('2', '30', '14', '10333', '5300', '0'), +('2', '30', '14', '13991', '4624', '0'), +('2', '30', '11', '9246', '3636', '0'), +('2', '30', '11', '14762', '2204', '0'), +('2', '30', '11', '16941', '725', '0'), +('2', '30', '11', '20677', '450', '0'), +('2', '31', '22', '9246', '0', '0'), +('2', '31', '22', '10323', '0', '0'), +('2', '31', '22', '44492', '0', '0'), +('2', '31', '22', '13101', '0', '0'), +('2', '31', '1', '14702', '3750', '0'), +('2', '31', '1', '14563', '3673', '0'), +('2', '31', '1', '14701', '2862', '0'), +('2', '31', '1', '30361', '2640', '0'), +('2', '31', '2', '10143', '5368', '0'), +('2', '31', '2', '30363', '3700', '0'), +('2', '31', '2', '2294', '2789', '0'), +('2', '31', '2', '3000', '2534', '0'), +('2', '31', '3', '11052', '5617', '0'), +('2', '31', '3', '14108', '2796', '0'), +('2', '31', '3', '4505', '2652', '0'), +('2', '31', '3', '14695', '2630', '0'), +('2', '31', '5', '14703', '6050', '0'), +('2', '31', '5', '14562', '4452', '0'), +('2', '31', '5', '1536', '4161', '0'), +('2', '31', '5', '4413', '3419', '0'), +('2', '31', '8', '11603', '11681', '0'), +('2', '31', '8', '12238', '4567', '0'), +('2', '31', '8', '2349', '3554', '0'), +('2', '31', '8', '1363', '2510', '0'), +('2', '31', '6', '27717', '8135', '0'), +('2', '31', '6', '2924', '7698', '0'), +('2', '31', '6', '1557', '5310', '0'), +('2', '31', '6', '1904', '3026', '0'), +('2', '31', '17', '2285', '10864', '0'), +('2', '31', '17', '4882', '8677', '0'), +('2', '31', '17', '4342', '3872', '0'), +('2', '31', '17', '2405', '1961', '0'), +('2', '31', '7', '2289', '2828', '0'), +('2', '31', '7', '1362', '2624', '0'), +('2', '31', '7', '1321', '1746', '0'), +('2', '31', '7', '10336', '1127', '0'), +('2', '31', '9', '2290', '2413', '0'), +('2', '31', '9', '4884', '2060', '0'), +('2', '31', '9', '4344', '2051', '0'), +('2', '31', '9', '10408', '2002', '0'), +('2', '31', '15', '10150', '3004', '0'), +('2', '31', '15', '10163', '2300', '0'), +('2', '31', '15', '14631', '2247', '0'), +('2', '31', '15', '14651', '2224', '0'), +('2', '31', '20', '11666', '8352', '0'), +('2', '31', '20', '2742', '5160', '0'), +('2', '31', '20', '2288', '4478', '0'), +('2', '31', '20', '2407', '2009', '0'), +('2', '31', '12', '2291', '3830', '0'), +('2', '31', '12', '20655', '3369', '0'), +('2', '31', '12', '2923', '3074', '0'), +('2', '31', '12', '4345', '2245', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '31', '18', '4886', '3680', '0'), +('2', '31', '18', '2292', '2339', '0'), +('2', '31', '18', '2461', '1690', '0'), +('2', '31', '18', '4410', '1142', '0'), +('2', '31', '19', '4407', '3431', '0'), +('2', '31', '19', '68239', '3047', '0'), +('2', '31', '19', '4837', '2896', '0'), +('2', '31', '19', '2293', '2358', '0'), +('2', '31', '13', '11691', '13280', '0'), +('2', '31', '13', '27718', '9247', '0'), +('2', '31', '13', '27719', '6690', '0'), +('2', '31', '13', '10333', '5300', '0'), +('2', '31', '14', '27716', '10123', '0'), +('2', '31', '14', '10335', '6730', '0'), +('2', '31', '14', '10333', '5300', '0'), +('2', '31', '14', '13991', '4745', '0'), +('2', '31', '11', '9246', '3757', '0'), +('2', '31', '11', '14762', '2204', '0'), +('2', '31', '11', '16941', '749', '0'), +('2', '31', '11', '20677', '450', '0'), +('2', '32', '22', '9246', '0', '0'), +('2', '32', '22', '10323', '0', '0'), +('2', '32', '22', '44492', '0', '0'), +('2', '32', '22', '13101', '0', '0'), +('2', '32', '1', '14563', '3782', '0'), +('2', '32', '1', '14702', '3750', '0'), +('2', '32', '1', '14701', '2862', '0'), +('2', '32', '1', '30361', '2640', '0'), +('2', '32', '2', '10143', '5368', '0'), +('2', '32', '2', '30363', '3700', '0'), +('2', '32', '2', '2294', '2813', '0'), +('2', '32', '2', '3000', '2534', '0'), +('2', '32', '3', '11052', '5798', '0'), +('2', '32', '3', '14108', '2880', '0'), +('2', '32', '3', '4505', '2736', '0'), +('2', '32', '3', '14695', '2714', '0'), +('2', '32', '5', '14703', '6050', '0'), +('2', '32', '5', '14562', '4536', '0'), +('2', '32', '5', '1536', '4270', '0'), +('2', '32', '5', '4413', '3527', '0'), +('2', '32', '8', '11603', '11789', '0'), +('2', '32', '8', '12238', '4688', '0'), +('2', '32', '8', '2349', '3554', '0'), +('2', '32', '8', '1363', '2510', '0'), +('2', '32', '6', '27717', '8282', '0'), +('2', '32', '6', '2924', '7758', '0'), +('2', '32', '6', '1557', '5310', '0'), +('2', '32', '6', '1904', '3123', '0'), +('2', '32', '17', '2285', '10913', '0'), +('2', '32', '17', '4882', '8862', '0'), +('2', '32', '17', '4342', '3992', '0'), +('2', '32', '17', '2405', '2022', '0'), +('2', '32', '7', '2289', '2876', '0'), +('2', '32', '7', '1362', '2624', '0'), +('2', '32', '7', '1321', '1746', '0'), +('2', '32', '7', '10336', '1163', '0'), +('2', '32', '9', '2290', '2474', '0'), +('2', '32', '9', '4884', '2060', '0'), +('2', '32', '9', '4344', '2051', '0'), +('2', '32', '9', '10408', '2002', '0'), +('2', '32', '15', '10150', '3004', '0'), +('2', '32', '15', '14631', '2319', '0'), +('2', '32', '15', '10163', '2300', '0'), +('2', '32', '15', '14651', '2224', '0'), +('2', '32', '20', '11666', '8354', '0'), +('2', '32', '20', '2742', '5163', '0'), +('2', '32', '20', '2288', '4478', '0'), +('2', '32', '20', '2407', '2069', '0'), +('2', '32', '12', '2291', '3830', '0'), +('2', '32', '12', '20655', '3394', '0'), +('2', '32', '12', '2923', '3074', '0'), +('2', '32', '12', '4345', '2305', '0'), +('2', '32', '18', '4886', '3789', '0'), +('2', '32', '18', '2292', '2387', '0'), +('2', '32', '18', '2461', '1739', '0'), +('2', '32', '18', '4410', '1142', '0'), +('2', '32', '19', '4407', '3539', '0'), +('2', '32', '19', '68239', '3083', '0'), +('2', '32', '19', '4837', '2957', '0'), +('2', '32', '19', '2293', '2395', '0'), +('2', '32', '13', '11691', '13461', '0'), +('2', '32', '13', '27718', '9368', '0'), +('2', '32', '13', '27719', '6782', '0'), +('2', '32', '13', '10333', '5300', '0'), +('2', '32', '14', '27716', '10232', '0'), +('2', '32', '14', '10335', '6947', '0'), +('2', '32', '14', '10333', '5300', '0'), +('2', '32', '14', '13991', '4866', '0'), +('2', '32', '11', '9246', '3878', '0'), +('2', '32', '11', '14762', '2204', '0'), +('2', '32', '11', '16941', '773', '0'), +('2', '32', '11', '20677', '450', '0'), +('2', '33', '22', '9246', '0', '0'), +('2', '33', '22', '10323', '0', '0'), +('2', '33', '22', '44492', '0', '0'), +('2', '33', '22', '13101', '0', '0'), +('2', '33', '1', '14563', '3891', '0'), +('2', '33', '1', '14702', '3750', '0'), +('2', '33', '1', '14701', '2862', '0'), +('2', '33', '1', '30361', '2640', '0'), +('2', '33', '2', '10143', '5368', '0'), +('2', '33', '2', '30363', '3700', '0'), +('2', '33', '2', '2294', '2837', '0'), +('2', '33', '2', '3000', '2534', '0'), +('2', '33', '3', '11052', '5980', '0'), +('2', '33', '3', '14108', '2965', '0'), +('2', '33', '3', '4505', '2821', '0'), +('2', '33', '3', '14695', '2799', '0'), +('2', '33', '5', '14703', '6050', '0'), +('2', '33', '5', '14562', '4621', '0'), +('2', '33', '5', '1536', '4379', '0'), +('2', '33', '5', '4413', '3636', '0'), +('2', '33', '8', '11603', '11898', '0'), +('2', '33', '8', '12238', '4809', '0'), +('2', '33', '8', '2349', '3554', '0'), +('2', '33', '8', '1363', '2510', '0'), +('2', '33', '6', '27717', '8430', '0'), +('2', '33', '6', '2924', '7819', '0'), +('2', '33', '6', '1557', '5310', '0'), +('2', '33', '6', '1904', '3219', '0'), +('2', '33', '17', '2285', '10961', '0'), +('2', '33', '17', '4882', '9048', '0'), +('2', '33', '17', '4342', '4113', '0'), +('2', '33', '17', '2405', '2083', '0'), +('2', '33', '7', '2289', '2925', '0'), +('2', '33', '7', '1362', '2624', '0'), +('2', '33', '7', '1321', '1746', '0'), +('2', '33', '7', '10336', '1200', '0'), +('2', '33', '9', '2290', '2535', '0'), +('2', '33', '9', '4884', '2060', '0'), +('2', '33', '9', '4344', '2051', '0'), +('2', '33', '9', '4925', '2048', '0'), +('2', '33', '15', '10150', '3004', '0'), +('2', '33', '15', '14631', '2392', '0'), +('2', '33', '15', '10163', '2300', '0'), +('2', '33', '15', '14651', '2224', '0'), +('2', '33', '20', '11666', '8357', '0'), +('2', '33', '20', '2742', '5166', '0'), +('2', '33', '20', '2288', '4478', '0'), +('2', '33', '20', '2407', '2129', '0'), +('2', '33', '12', '2291', '3830', '0'), +('2', '33', '12', '20655', '3419', '0'), +('2', '33', '12', '2923', '3074', '0'), +('2', '33', '12', '4345', '2366', '0'), +('2', '33', '18', '4886', '3897', '0'), +('2', '33', '18', '2292', '2436', '0'), +('2', '33', '18', '2461', '1787', '0'), +('2', '33', '18', '4410', '1142', '0'), +('2', '33', '19', '4407', '3648', '0'), +('2', '33', '19', '68239', '3119', '0'), +('2', '33', '19', '4837', '3017', '0'), +('2', '33', '19', '2293', '2431', '0'), +('2', '33', '13', '11691', '13643', '0'), +('2', '33', '13', '27718', '9489', '0'), +('2', '33', '13', '27719', '6875', '0'), +('2', '33', '13', '10333', '5300', '0'), +('2', '33', '14', '27716', '10341', '0'), +('2', '33', '14', '10335', '7165', '0'), +('2', '33', '14', '10333', '5300', '0'), +('2', '33', '14', '13991', '4986', '0'), +('2', '33', '11', '9246', '3998', '0'), +('2', '33', '11', '14762', '2204', '0'), +('2', '33', '11', '16941', '797', '0'), +('2', '33', '11', '20677', '450', '0'), +('2', '34', '22', '9246', '0', '0'), +('2', '34', '22', '10323', '0', '0'), +('2', '34', '22', '44492', '0', '0'), +('2', '34', '22', '13101', '0', '0'), +('2', '34', '1', '14563', '4000', '0'), +('2', '34', '1', '14702', '3750', '0'), +('2', '34', '1', '14701', '2862', '0'), +('2', '34', '1', '30361', '2640', '0'), +('2', '34', '2', '10143', '5368', '0'), +('2', '34', '2', '30363', '3700', '0'), +('2', '34', '2', '2294', '2861', '0'), +('2', '34', '2', '4881', '2546', '0'), +('2', '34', '3', '11052', '6161', '0'), +('2', '34', '3', '14108', '3049', '0'), +('2', '34', '3', '4505', '2905', '0'), +('2', '34', '3', '14695', '2883', '0'), +('2', '34', '5', '14703', '6050', '0'), +('2', '34', '5', '14562', '4705', '0'), +('2', '34', '5', '1536', '4488', '0'), +('2', '34', '5', '4413', '3745', '0'), +('2', '34', '8', '11603', '12007', '0'), +('2', '34', '8', '12238', '4930', '0'), +('2', '34', '8', '2349', '3554', '0'), +('2', '34', '8', '1363', '2510', '0'), +('2', '34', '6', '27717', '8577', '0'), +('2', '34', '6', '2924', '7879', '0'), +('2', '34', '6', '1557', '5310', '0'), +('2', '34', '6', '1904', '3316', '0'), +('2', '34', '17', '2285', '11009', '0'), +('2', '34', '17', '4882', '9234', '0'), +('2', '34', '17', '4342', '4234', '0'), +('2', '34', '17', '2405', '2145', '0'), +('2', '34', '7', '2289', '2973', '0'), +('2', '34', '7', '1362', '2624', '0'), +('2', '34', '7', '1321', '1746', '0'), +('2', '34', '7', '10336', '1236', '0'), +('2', '34', '9', '2290', '2596', '0'), +('2', '34', '9', '4925', '2108', '0'), +('2', '34', '9', '4406', '2081', '0'), +('2', '34', '9', '10105', '2078', '0'), +('2', '34', '15', '10150', '3004', '0'), +('2', '34', '15', '14631', '2464', '0'), +('2', '34', '15', '10163', '2300', '0'), +('2', '34', '15', '14651', '2224', '0'), +('2', '34', '20', '11666', '8359', '0'), +('2', '34', '20', '2742', '5169', '0'), +('2', '34', '20', '2288', '4478', '0'), +('2', '34', '20', '2407', '2190', '0'), +('2', '34', '12', '2291', '3830', '0'), +('2', '34', '12', '20655', '3443', '0'), +('2', '34', '12', '2923', '3074', '0'), +('2', '34', '12', '4345', '2426', '0'), +('2', '34', '18', '4886', '4006', '0'), +('2', '34', '18', '2292', '2484', '0'), +('2', '34', '18', '2461', '1835', '0'), +('2', '34', '18', '4410', '1142', '0'), +('2', '34', '19', '4407', '3757', '0'), +('2', '34', '19', '68239', '3156', '0'), +('2', '34', '19', '4837', '3077', '0'), +('2', '34', '19', '2293', '2467', '0'), +('2', '34', '13', '11691', '13824', '0'), +('2', '34', '13', '27718', '9610', '0'), +('2', '34', '13', '27719', '6967', '0'), +('2', '34', '13', '10333', '5300', '0'), +('2', '34', '14', '27716', '10449', '0'), +('2', '34', '14', '10335', '7382', '0'), +('2', '34', '14', '10333', '5300', '0'), +('2', '34', '14', '13991', '5107', '0'), +('2', '34', '11', '9246', '4119', '0'), +('2', '34', '11', '14762', '2204', '0'), +('2', '34', '11', '16941', '821', '0'), +('2', '34', '11', '20677', '450', '0'), +('2', '35', '22', '9246', '0', '0'), +('2', '35', '22', '10323', '0', '0'), +('2', '35', '22', '44492', '0', '0'), +('2', '35', '22', '13101', '0', '0'), +('2', '35', '1', '14563', '4108', '0'), +('2', '35', '1', '14702', '3750', '0'), +('2', '35', '1', '14701', '2862', '0'), +('2', '35', '1', '30361', '2640', '0'), +('2', '35', '2', '10143', '5368', '0'), +('2', '35', '2', '30363', '3700', '0'), +('2', '35', '2', '2294', '2885', '0'), +('2', '35', '2', '2191', '2608', '0'), +('2', '35', '3', '11052', '6342', '0'), +('2', '35', '3', '14108', '3134', '0'), +('2', '35', '3', '4505', '2990', '0'), +('2', '35', '3', '14695', '2968', '0'), +('2', '35', '5', '14703', '6050', '0'), +('2', '35', '5', '14562', '4790', '0'), +('2', '35', '5', '1536', '4596', '0'), +('2', '35', '5', '4413', '3854', '0'), +('2', '35', '8', '11603', '12116', '0'), +('2', '35', '8', '12238', '5050', '0'), +('2', '35', '8', '2349', '3554', '0'), +('2', '35', '8', '1363', '2510', '0'), +('2', '35', '6', '27717', '8725', '0'), +('2', '35', '6', '2924', '7940', '0'), +('2', '35', '6', '1557', '5310', '0'), +('2', '35', '6', '1904', '3413', '0'), +('2', '35', '17', '2285', '11058', '0'), +('2', '35', '17', '4882', '9420', '0'), +('2', '35', '17', '4342', '4355', '0'), +('2', '35', '17', '2405', '2206', '0'), +('2', '35', '7', '2289', '3021', '0'), +('2', '35', '7', '1362', '2624', '0'), +('2', '35', '7', '1321', '1746', '0'), +('2', '35', '7', '10336', '1272', '0'), +('2', '35', '9', '2290', '2657', '0'), +('2', '35', '9', '4925', '2168', '0'), +('2', '35', '9', '4406', '2142', '0'), +('2', '35', '9', '10105', '2138', '0'), +('2', '35', '15', '10150', '3004', '0'), +('2', '35', '15', '14631', '2537', '0'), +('2', '35', '15', '10163', '2300', '0'), +('2', '35', '15', '14651', '2224', '0'), +('2', '35', '20', '11666', '8361', '0'), +('2', '35', '20', '2742', '5172', '0'), +('2', '35', '20', '2288', '4478', '0'), +('2', '35', '20', '2407', '2250', '0'), +('2', '35', '12', '2291', '3830', '0'), +('2', '35', '12', '20655', '3468', '0'), +('2', '35', '12', '2923', '3074', '0'), +('2', '35', '12', '4345', '2486', '0'), +('2', '35', '18', '4886', '4115', '0'), +('2', '35', '18', '2292', '2532', '0'), +('2', '35', '18', '2461', '1883', '0'), +('2', '35', '18', '4410', '1142', '0'), +('2', '35', '19', '4407', '3865', '0'), +('2', '35', '19', '68239', '3192', '0'), +('2', '35', '19', '4837', '3138', '0'), +('2', '35', '19', '2293', '2503', '0'), +('2', '35', '13', '11691', '14005', '0'), +('2', '35', '13', '27718', '9730', '0'), +('2', '35', '13', '27719', '7059', '0'), +('2', '35', '13', '10333', '5300', '0'), +('2', '35', '14', '27716', '10558', '0'), +('2', '35', '14', '10335', '7600', '0'), +('2', '35', '14', '10333', '5300', '0'), +('2', '35', '14', '13991', '5228', '0'), +('2', '35', '11', '9246', '4240', '0'), +('2', '35', '11', '14762', '2204', '0'), +('2', '35', '11', '16941', '846', '0'), +('2', '35', '11', '60396', '453', '0'), +('2', '36', '22', '9246', '0', '0'), +('2', '36', '22', '10323', '0', '0'), +('2', '36', '22', '44492', '0', '0'), +('2', '36', '22', '13101', '0', '0'), +('2', '36', '1', '14563', '4217', '0'), +('2', '36', '1', '14702', '3750', '0'), +('2', '36', '1', '14701', '2862', '0'), +('2', '36', '1', '10082', '2706', '0'), +('2', '36', '2', '10143', '5368', '0'), +('2', '36', '2', '30363', '3700', '0'), +('2', '36', '2', '2294', '2910', '0'), +('2', '36', '2', '2191', '2681', '0'), +('2', '36', '3', '11052', '6523', '0'), +('2', '36', '3', '14108', '3218', '0'), +('2', '36', '3', '4505', '3074', '0'), +('2', '36', '3', '14695', '3053', '0'), +('2', '36', '5', '14703', '6050', '0'), +('2', '36', '5', '14562', '4874', '0'), +('2', '36', '5', '1536', '4705', '0'), +('2', '36', '5', '4413', '3962', '0'), +('2', '36', '8', '11603', '12224', '0'), +('2', '36', '8', '12238', '5171', '0'), +('2', '36', '8', '2349', '3554', '0'), +('2', '36', '8', '1363', '2510', '0'), +('2', '36', '6', '27717', '8872', '0'), +('2', '36', '6', '2924', '8000', '0'), +('2', '36', '6', '1557', '5310', '0'), +('2', '36', '6', '1904', '3509', '0'), +('2', '36', '17', '2285', '11106', '0'), +('2', '36', '17', '4882', '9605', '0'), +('2', '36', '17', '4342', '4476', '0'), +('2', '36', '17', '2405', '2267', '0'), +('2', '36', '7', '2289', '3070', '0'), +('2', '36', '7', '1362', '2624', '0'), +('2', '36', '7', '1321', '1746', '0'), +('2', '36', '7', '10336', '1308', '0'), +('2', '36', '9', '2290', '2718', '0'), +('2', '36', '9', '4925', '2229', '0'), +('2', '36', '9', '4406', '2202', '0'), +('2', '36', '9', '10105', '2199', '0'), +('2', '36', '15', '10150', '3004', '0'), +('2', '36', '15', '14631', '2609', '0'), +('2', '36', '15', '10163', '2300', '0'), +('2', '36', '15', '14651', '2224', '0'), +('2', '36', '20', '11666', '8363', '0'), +('2', '36', '20', '2742', '5175', '0'), +('2', '36', '20', '2288', '4478', '0'), +('2', '36', '20', '2407', '2311', '0'), +('2', '36', '12', '2291', '3830', '0'), +('2', '36', '12', '20655', '3493', '0'), +('2', '36', '12', '2923', '3074', '0'), +('2', '36', '12', '4345', '2547', '0'), +('2', '36', '18', '4886', '4224', '0'), +('2', '36', '18', '2292', '2581', '0'), +('2', '36', '18', '2461', '1932', '0'), +('2', '36', '18', '4410', '1142', '0'), +('2', '36', '19', '4407', '3974', '0'), +('2', '36', '19', '68239', '3228', '0'), +('2', '36', '19', '4837', '3198', '0'), +('2', '36', '19', '2293', '2540', '0'), +('2', '36', '13', '11691', '14186', '0'), +('2', '36', '13', '27718', '9851', '0'), +('2', '36', '13', '27719', '7151', '0'), +('2', '36', '13', '10333', '5300', '0'), +('2', '36', '14', '27716', '10667', '0'), +('2', '36', '14', '10335', '7817', '0'), +('2', '36', '14', '13991', '5349', '0'), +('2', '36', '14', '12238', '5316', '0'), +('2', '36', '11', '9246', '4361', '0'), +('2', '36', '11', '14762', '2204', '0'), +('2', '36', '11', '16941', '870', '0'), +('2', '36', '11', '60396', '465', '0'), +('2', '37', '22', '9246', '0', '0'), +('2', '37', '22', '10323', '0', '0'), +('2', '37', '22', '44492', '0', '0'), +('2', '37', '22', '13101', '0', '0'), +('2', '37', '1', '14563', '4326', '0'), +('2', '37', '1', '14702', '3750', '0'), +('2', '37', '1', '14701', '2862', '0'), +('2', '37', '1', '10082', '2778', '0'), +('2', '37', '2', '10143', '5368', '0'), +('2', '37', '2', '30363', '3700', '0'), +('2', '37', '2', '2294', '2934', '0'), +('2', '37', '2', '2191', '2753', '0'), +('2', '37', '3', '11052', '6704', '0'), +('2', '37', '3', '14108', '3303', '0'), +('2', '37', '3', '4505', '3159', '0'), +('2', '37', '3', '14695', '3137', '0'), +('2', '37', '5', '14703', '6050', '0'), +('2', '37', '5', '14562', '4959', '0'), +('2', '37', '5', '1536', '4814', '0'), +('2', '37', '5', '4413', '4071', '0'), +('2', '37', '8', '11603', '12333', '0'), +('2', '37', '8', '12238', '5292', '0'), +('2', '37', '8', '2349', '3554', '0'), +('2', '37', '8', '1363', '2510', '0'), +('2', '37', '6', '27717', '9019', '0'), +('2', '37', '6', '2924', '8060', '0'), +('2', '37', '6', '1557', '5310', '0'), +('2', '37', '6', '1904', '3606', '0'), +('2', '37', '17', '2285', '11154', '0'), +('2', '37', '17', '4882', '9791', '0'), +('2', '37', '17', '4342', '4596', '0'), +('2', '37', '17', '2405', '2329', '0'), +('2', '37', '7', '2289', '3118', '0'), +('2', '37', '7', '1362', '2624', '0'), +('2', '37', '7', '1321', '1746', '0'), +('2', '37', '7', '10336', '1345', '0'), +('2', '37', '9', '2290', '2779', '0'), +('2', '37', '9', '4925', '2289', '0'), +('2', '37', '9', '4406', '2263', '0'), +('2', '37', '9', '10105', '2259', '0'), +('2', '37', '15', '10150', '3004', '0'), +('2', '37', '15', '14631', '2682', '0'), +('2', '37', '15', '10163', '2300', '0'), +('2', '37', '15', '14651', '2224', '0'), +('2', '37', '20', '11666', '8365', '0'), +('2', '37', '20', '2742', '5178', '0'), +('2', '37', '20', '2288', '4478', '0'), +('2', '37', '20', '2407', '2371', '0'), +('2', '37', '12', '2291', '3830', '0'), +('2', '37', '12', '20655', '3518', '0'), +('2', '37', '12', '2923', '3074', '0'), +('2', '37', '12', '4345', '2607', '0'), +('2', '37', '18', '4886', '4332', '0'), +('2', '37', '18', '2292', '2629', '0'), +('2', '37', '18', '2461', '1980', '0'), +('2', '37', '18', '4410', '1142', '0'), +('2', '37', '19', '4407', '4083', '0'), +('2', '37', '19', '68239', '3264', '0'), +('2', '37', '19', '4837', '3259', '0'), +('2', '37', '19', '2293', '2576', '0'), +('2', '37', '13', '11691', '14367', '0'), +('2', '37', '13', '27718', '9972', '0'), +('2', '37', '13', '27719', '7243', '0'), +('2', '37', '13', '10333', '5300', '0'), +('2', '37', '14', '27716', '10776', '0'), +('2', '37', '14', '10335', '8034', '0'), +('2', '37', '14', '13991', '5470', '0'), +('2', '37', '14', '12238', '5437', '0'), +('2', '37', '11', '9246', '4482', '0'), +('2', '37', '11', '14762', '2204', '0'), +('2', '37', '11', '16941', '894', '0'), +('2', '37', '11', '60396', '477', '0'), +('2', '38', '22', '9246', '0', '0'), +('2', '38', '22', '10323', '0', '0'), +('2', '38', '22', '44492', '0', '0'), +('2', '38', '22', '13101', '0', '0'), +('2', '38', '1', '14563', '4434', '0'), +('2', '38', '1', '14702', '3750', '0'), +('2', '38', '1', '14701', '2862', '0'), +('2', '38', '1', '10082', '2850', '0'), +('2', '38', '2', '10143', '5368', '0'), +('2', '38', '2', '30363', '3700', '0'), +('2', '38', '2', '2294', '2958', '0'), +('2', '38', '2', '2191', '2826', '0'), +('2', '38', '3', '11052', '6886', '0'), +('2', '38', '3', '14108', '3387', '0'), +('2', '38', '3', '4505', '3243', '0'), +('2', '38', '3', '14695', '3222', '0'), +('2', '38', '5', '14703', '6050', '0'), +('2', '38', '5', '14562', '5043', '0'), +('2', '38', '5', '1536', '4922', '0'), +('2', '38', '5', '4413', '4180', '0'), +('2', '38', '8', '11603', '12442', '0'), +('2', '38', '8', '12238', '5413', '0'), +('2', '38', '8', '2349', '3554', '0'), +('2', '38', '8', '1363', '2510', '0'), +('2', '38', '6', '27717', '9167', '0'), +('2', '38', '6', '2924', '8121', '0'), +('2', '38', '6', '1557', '5310', '0'), +('2', '38', '6', '1904', '3703', '0'), +('2', '38', '17', '2285', '11203', '0'), +('2', '38', '17', '4882', '9977', '0'), +('2', '38', '17', '4342', '4717', '0'), +('2', '38', '17', '2405', '2390', '0'), +('2', '38', '7', '2289', '3166', '0'), +('2', '38', '7', '1362', '2624', '0'), +('2', '38', '7', '1321', '1746', '0'), +('2', '38', '7', '10336', '1381', '0'), +('2', '38', '9', '2290', '2840', '0'), +('2', '38', '9', '4925', '2350', '0'), +('2', '38', '9', '4406', '2323', '0'), +('2', '38', '9', '10105', '2319', '0'), +('2', '38', '15', '10150', '3004', '0'), +('2', '38', '15', '14631', '2754', '0'), +('2', '38', '15', '10163', '2300', '0'), +('2', '38', '15', '14651', '2224', '0'), +('2', '38', '20', '11666', '8367', '0'), +('2', '38', '20', '2742', '5181', '0'), +('2', '38', '20', '2288', '4478', '0'), +('2', '38', '20', '2407', '2431', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '38', '12', '2291', '3830', '0'), +('2', '38', '12', '20655', '3543', '0'), +('2', '38', '12', '2923', '3074', '0'), +('2', '38', '12', '4345', '2668', '0'), +('2', '38', '18', '4886', '4441', '0'), +('2', '38', '18', '2292', '2677', '0'), +('2', '38', '18', '2461', '2028', '0'), +('2', '38', '18', '4410', '1142', '0'), +('2', '38', '19', '4407', '4192', '0'), +('2', '38', '19', '4837', '3319', '0'), +('2', '38', '19', '68239', '3301', '0'), +('2', '38', '19', '2293', '2612', '0'), +('2', '38', '13', '11691', '14549', '0'), +('2', '38', '13', '27718', '10093', '0'), +('2', '38', '13', '27719', '7335', '0'), +('2', '38', '13', '10333', '5300', '0'), +('2', '38', '14', '27716', '10884', '0'), +('2', '38', '14', '10335', '8252', '0'), +('2', '38', '14', '13991', '5590', '0'), +('2', '38', '14', '12238', '5558', '0'), +('2', '38', '11', '9246', '4602', '0'), +('2', '38', '11', '14762', '2204', '0'), +('2', '38', '11', '16941', '918', '0'), +('2', '38', '11', '60396', '489', '0'), +('2', '39', '22', '9246', '0', '0'), +('2', '39', '22', '10323', '0', '0'), +('2', '39', '22', '44492', '0', '0'), +('2', '39', '22', '13101', '0', '0'), +('2', '39', '1', '14563', '4543', '0'), +('2', '39', '1', '14702', '3750', '0'), +('2', '39', '1', '10082', '2923', '0'), +('2', '39', '1', '14701', '2862', '0'), +('2', '39', '2', '10143', '5368', '0'), +('2', '39', '2', '30363', '3700', '0'), +('2', '39', '2', '2294', '2982', '0'), +('2', '39', '2', '2191', '2898', '0'), +('2', '39', '3', '11052', '7067', '0'), +('2', '39', '3', '14108', '3472', '0'), +('2', '39', '3', '4505', '3328', '0'), +('2', '39', '3', '14695', '3306', '0'), +('2', '39', '5', '14703', '6050', '0'), +('2', '39', '5', '14562', '5128', '0'), +('2', '39', '5', '1536', '5031', '0'), +('2', '39', '5', '4413', '4288', '0'), +('2', '39', '8', '11603', '12550', '0'), +('2', '39', '8', '12238', '5534', '0'), +('2', '39', '8', '2349', '3554', '0'), +('2', '39', '8', '1363', '2510', '0'), +('2', '39', '6', '27717', '9314', '0'), +('2', '39', '6', '2924', '8181', '0'), +('2', '39', '6', '1557', '5310', '0'), +('2', '39', '6', '1904', '3799', '0'), +('2', '39', '17', '2285', '11251', '0'), +('2', '39', '17', '4882', '10163', '0'), +('2', '39', '17', '4342', '4838', '0'), +('2', '39', '17', '2405', '2451', '0'), +('2', '39', '7', '2289', '3215', '0'), +('2', '39', '7', '1362', '2624', '0'), +('2', '39', '7', '1321', '1746', '0'), +('2', '39', '7', '10336', '1417', '0'), +('2', '39', '9', '2290', '2901', '0'), +('2', '39', '9', '4925', '2410', '0'), +('2', '39', '9', '4406', '2383', '0'), +('2', '39', '9', '10105', '2380', '0'), +('2', '39', '15', '10150', '3004', '0'), +('2', '39', '15', '14631', '2827', '0'), +('2', '39', '15', '10163', '2300', '0'), +('2', '39', '15', '14651', '2224', '0'), +('2', '39', '20', '11666', '8369', '0'), +('2', '39', '20', '2742', '5184', '0'), +('2', '39', '20', '2288', '4478', '0'), +('2', '39', '20', '2407', '2492', '0'), +('2', '39', '12', '2291', '3830', '0'), +('2', '39', '12', '20655', '3567', '0'), +('2', '39', '12', '2923', '3074', '0'), +('2', '39', '12', '4345', '2728', '0'), +('2', '39', '18', '4886', '4550', '0'), +('2', '39', '18', '2292', '2726', '0'), +('2', '39', '18', '2461', '2077', '0'), +('2', '39', '18', '4410', '1142', '0'), +('2', '39', '19', '4407', '4300', '0'), +('2', '39', '19', '4837', '3379', '0'), +('2', '39', '19', '68239', '3337', '0'), +('2', '39', '19', '2293', '2648', '0'), +('2', '39', '13', '11691', '14730', '0'), +('2', '39', '13', '27718', '10214', '0'), +('2', '39', '13', '27719', '7427', '0'), +('2', '39', '13', '10333', '5300', '0'), +('2', '39', '14', '27716', '10993', '0'), +('2', '39', '14', '10335', '8469', '0'), +('2', '39', '14', '13991', '5711', '0'), +('2', '39', '14', '12238', '5679', '0'), +('2', '39', '11', '9246', '4723', '0'), +('2', '39', '11', '14762', '2204', '0'), +('2', '39', '11', '16941', '942', '0'), +('2', '39', '11', '60396', '501', '0'), +('2', '40', '22', '9246', '0', '0'), +('2', '40', '22', '10323', '0', '0'), +('2', '40', '22', '44492', '0', '0'), +('2', '40', '22', '13101', '0', '0'), +('2', '40', '1', '14563', '4652', '0'), +('2', '40', '1', '14702', '3750', '0'), +('2', '40', '1', '10082', '2995', '0'), +('2', '40', '1', '14701', '2862', '0'), +('2', '40', '2', '10143', '5368', '0'), +('2', '40', '2', '30363', '3700', '0'), +('2', '40', '2', '2294', '3006', '0'), +('2', '40', '2', '2191', '2970', '0'), +('2', '40', '3', '11052', '7248', '0'), +('2', '40', '3', '14108', '3557', '0'), +('2', '40', '3', '4505', '3413', '0'), +('2', '40', '3', '14695', '3391', '0'), +('2', '40', '5', '14703', '6050', '0'), +('2', '40', '5', '14562', '5213', '0'), +('2', '40', '5', '1536', '5140', '0'), +('2', '40', '5', '4413', '4397', '0'), +('2', '40', '8', '11603', '12659', '0'), +('2', '40', '8', '12238', '5654', '0'), +('2', '40', '8', '2349', '3554', '0'), +('2', '40', '8', '1363', '2510', '0'), +('2', '40', '6', '27717', '9461', '0'), +('2', '40', '6', '2924', '8242', '0'), +('2', '40', '6', '1557', '5310', '0'), +('2', '40', '6', '1904', '3896', '0'), +('2', '40', '17', '2285', '11299', '0'), +('2', '40', '17', '4882', '10348', '0'), +('2', '40', '17', '4342', '4959', '0'), +('2', '40', '17', '2405', '2513', '0'), +('2', '40', '7', '2289', '3263', '0'), +('2', '40', '7', '1362', '2624', '0'), +('2', '40', '7', '1321', '1746', '0'), +('2', '40', '7', '10336', '1453', '0'), +('2', '40', '9', '2290', '2962', '0'), +('2', '40', '9', '4925', '2470', '0'), +('2', '40', '9', '4406', '2444', '0'), +('2', '40', '9', '10105', '2440', '0'), +('2', '40', '15', '10150', '3004', '0'), +('2', '40', '15', '14631', '2899', '0'), +('2', '40', '15', '10163', '2300', '0'), +('2', '40', '15', '14651', '2224', '0'), +('2', '40', '20', '11666', '8371', '0'), +('2', '40', '20', '2742', '5187', '0'), +('2', '40', '20', '2288', '4478', '0'), +('2', '40', '20', '2407', '2552', '0'), +('2', '40', '12', '2291', '3830', '0'), +('2', '40', '12', '20655', '3592', '0'), +('2', '40', '12', '2923', '3074', '0'), +('2', '40', '12', '4345', '2788', '0'), +('2', '40', '18', '4886', '4658', '0'), +('2', '40', '18', '2292', '2774', '0'), +('2', '40', '18', '2461', '2125', '0'), +('2', '40', '18', '4410', '1142', '0'), +('2', '40', '19', '4407', '4409', '0'), +('2', '40', '19', '4837', '3440', '0'), +('2', '40', '19', '68239', '3373', '0'), +('2', '40', '19', '2293', '2685', '0'), +('2', '40', '13', '11691', '14911', '0'), +('2', '40', '13', '27718', '10334', '0'), +('2', '40', '13', '27719', '7519', '0'), +('2', '40', '13', '10333', '5300', '0'), +('2', '40', '14', '27716', '11102', '0'), +('2', '40', '14', '10335', '8687', '0'), +('2', '40', '14', '13991', '5832', '0'), +('2', '40', '14', '12238', '5799', '0'), +('2', '40', '11', '9246', '4844', '0'), +('2', '40', '11', '14762', '2204', '0'), +('2', '40', '11', '16941', '966', '0'), +('2', '40', '11', '60396', '513', '0'), +('2', '41', '22', '9246', '0', '0'), +('2', '41', '22', '10323', '0', '0'), +('2', '41', '22', '44492', '0', '0'), +('2', '41', '22', '13101', '0', '0'), +('2', '41', '1', '14563', '4761', '0'), +('2', '41', '1', '14702', '3750', '0'), +('2', '41', '1', '10082', '3068', '0'), +('2', '41', '1', '14701', '2862', '0'), +('2', '41', '2', '10143', '5368', '0'), +('2', '41', '2', '30363', '3700', '0'), +('2', '41', '2', '2191', '3043', '0'), +('2', '41', '2', '2294', '3030', '0'), +('2', '41', '3', '11052', '7429', '0'), +('2', '41', '3', '14108', '3641', '0'), +('2', '41', '3', '4505', '3497', '0'), +('2', '41', '3', '14695', '3475', '0'), +('2', '41', '5', '14703', '6050', '0'), +('2', '41', '5', '14562', '5297', '0'), +('2', '41', '5', '1536', '5249', '0'), +('2', '41', '5', '4413', '4506', '0'), +('2', '41', '8', '11603', '12768', '0'), +('2', '41', '8', '12238', '5775', '0'), +('2', '41', '8', '2349', '3554', '0'), +('2', '41', '8', '1363', '2510', '0'), +('2', '41', '6', '27717', '9609', '0'), +('2', '41', '6', '2924', '8302', '0'), +('2', '41', '6', '1557', '5310', '0'), +('2', '41', '6', '1904', '3992', '0'), +('2', '41', '17', '2285', '11348', '0'), +('2', '41', '17', '4882', '10534', '0'), +('2', '41', '17', '4342', '5080', '0'), +('2', '41', '17', '2405', '2574', '0'), +('2', '41', '7', '2289', '3311', '0'), +('2', '41', '7', '1362', '2624', '0'), +('2', '41', '7', '1321', '1746', '0'), +('2', '41', '7', '10336', '1489', '0'), +('2', '41', '9', '2290', '3023', '0'), +('2', '41', '9', '4925', '2531', '0'), +('2', '41', '9', '4406', '2504', '0'), +('2', '41', '9', '10105', '2501', '0'), +('2', '41', '15', '10150', '3004', '0'), +('2', '41', '15', '14631', '2972', '0'), +('2', '41', '15', '10163', '2300', '0'), +('2', '41', '15', '14651', '2224', '0'), +('2', '41', '20', '11666', '8374', '0'), +('2', '41', '20', '2742', '5190', '0'), +('2', '41', '20', '2288', '4478', '0'), +('2', '41', '20', '2407', '2613', '0'), +('2', '41', '12', '2291', '3830', '0'), +('2', '41', '12', '20655', '3617', '0'), +('2', '41', '12', '2923', '3074', '0'), +('2', '41', '12', '4345', '2849', '0'), +('2', '41', '18', '4886', '4767', '0'), +('2', '41', '18', '2292', '2822', '0'), +('2', '41', '18', '2461', '2173', '0'), +('2', '41', '18', '4410', '1142', '0'), +('2', '41', '19', '4407', '4518', '0'), +('2', '41', '19', '4837', '3500', '0'), +('2', '41', '19', '68239', '3409', '0'), +('2', '41', '19', '2293', '2721', '0'), +('2', '41', '13', '11691', '15092', '0'), +('2', '41', '13', '27718', '10455', '0'), +('2', '41', '13', '27719', '7611', '0'), +('2', '41', '13', '10333', '5300', '0'), +('2', '41', '14', '27716', '11211', '0'), +('2', '41', '14', '10335', '8904', '0'), +('2', '41', '14', '13991', '5953', '0'), +('2', '41', '14', '12238', '5920', '0'), +('2', '41', '11', '9246', '4965', '0'), +('2', '41', '11', '14762', '2204', '0'), +('2', '41', '11', '16941', '991', '0'), +('2', '41', '11', '60396', '525', '0'), +('2', '42', '22', '9246', '0', '0'), +('2', '42', '22', '10323', '0', '0'), +('2', '42', '22', '44492', '0', '0'), +('2', '42', '22', '13101', '0', '0'), +('2', '42', '1', '14563', '4869', '0'), +('2', '42', '1', '14702', '3750', '0'), +('2', '42', '1', '10082', '3140', '0'), +('2', '42', '1', '14701', '2862', '0'), +('2', '42', '2', '10143', '5368', '0'), +('2', '42', '2', '30363', '3700', '0'), +('2', '42', '2', '2191', '3115', '0'), +('2', '42', '2', '2294', '3055', '0'), +('2', '42', '3', '11052', '7610', '0'), +('2', '42', '3', '14108', '3726', '0'), +('2', '42', '3', '4505', '3582', '0'), +('2', '42', '3', '14695', '3560', '0'), +('2', '42', '5', '14703', '6050', '0'), +('2', '42', '5', '14562', '5382', '0'), +('2', '42', '5', '1536', '5357', '0'), +('2', '42', '5', '4413', '4615', '0'), +('2', '42', '8', '11603', '12877', '0'), +('2', '42', '8', '12238', '5896', '0'), +('2', '42', '8', '2349', '3554', '0'), +('2', '42', '8', '1363', '2510', '0'), +('2', '42', '6', '27717', '9756', '0'), +('2', '42', '6', '2924', '8362', '0'), +('2', '42', '6', '1557', '5310', '0'), +('2', '42', '6', '1904', '4089', '0'), +('2', '42', '17', '2285', '11396', '0'), +('2', '42', '17', '4882', '10720', '0'), +('2', '42', '17', '4342', '5200', '0'), +('2', '42', '17', '2405', '2635', '0'), +('2', '42', '7', '2289', '3360', '0'), +('2', '42', '7', '1362', '2624', '0'), +('2', '42', '7', '1321', '1746', '0'), +('2', '42', '7', '10336', '1526', '0'), +('2', '42', '9', '2290', '3084', '0'), +('2', '42', '9', '4925', '2591', '0'), +('2', '42', '9', '4406', '2565', '0'), +('2', '42', '9', '10105', '2561', '0'), +('2', '42', '15', '14631', '3044', '0'), +('2', '42', '15', '10150', '3004', '0'), +('2', '42', '15', '10163', '2300', '0'), +('2', '42', '15', '14651', '2224', '0'), +('2', '42', '20', '11666', '8376', '0'), +('2', '42', '20', '2742', '5193', '0'), +('2', '42', '20', '2288', '4478', '0'), +('2', '42', '20', '2407', '2673', '0'), +('2', '42', '12', '2291', '3830', '0'), +('2', '42', '12', '20655', '3642', '0'), +('2', '42', '12', '2923', '3074', '0'), +('2', '42', '12', '4345', '2909', '0'), +('2', '42', '18', '4886', '4876', '0'), +('2', '42', '18', '2292', '2871', '0'), +('2', '42', '18', '2461', '2222', '0'), +('2', '42', '18', '4410', '1142', '0'), +('2', '42', '19', '4407', '4626', '0'), +('2', '42', '19', '4837', '3561', '0'), +('2', '42', '19', '68239', '3446', '0'), +('2', '42', '19', '2293', '2757', '0'), +('2', '42', '13', '11691', '15273', '0'), +('2', '42', '13', '27718', '10576', '0'), +('2', '42', '13', '27719', '7704', '0'), +('2', '42', '13', '10333', '5300', '0'), +('2', '42', '14', '27716', '11319', '0'), +('2', '42', '14', '10335', '9122', '0'), +('2', '42', '14', '13991', '6074', '0'), +('2', '42', '14', '12238', '6041', '0'), +('2', '42', '11', '9246', '5086', '0'), +('2', '42', '11', '14762', '2204', '0'), +('2', '42', '11', '16941', '1015', '0'), +('2', '42', '11', '60396', '537', '0'), +('2', '43', '22', '9246', '0', '0'), +('2', '43', '22', '10323', '0', '0'), +('2', '43', '22', '44492', '0', '0'), +('2', '43', '22', '13101', '0', '0'), +('2', '43', '1', '14563', '4978', '0'), +('2', '43', '1', '14702', '3750', '0'), +('2', '43', '1', '10082', '3213', '0'), +('2', '43', '1', '14701', '2862', '0'), +('2', '43', '2', '10143', '5368', '0'), +('2', '43', '2', '30363', '3700', '0'), +('2', '43', '2', '2191', '3188', '0'), +('2', '43', '2', '4881', '3090', '0'), +('2', '43', '3', '11052', '7792', '0'), +('2', '43', '3', '14108', '3810', '0'), +('2', '43', '3', '4505', '3666', '0'), +('2', '43', '3', '14695', '3645', '0'), +('2', '43', '5', '14703', '6050', '0'), +('2', '43', '5', '1536', '5466', '0'), +('2', '43', '5', '14562', '5466', '0'), +('2', '43', '5', '4413', '4723', '0'), +('2', '43', '8', '11603', '12985', '0'), +('2', '43', '8', '12238', '6017', '0'), +('2', '43', '8', '2349', '3554', '0'), +('2', '43', '8', '1363', '2510', '0'), +('2', '43', '6', '27717', '9904', '0'), +('2', '43', '6', '2924', '8423', '0'), +('2', '43', '6', '1557', '5310', '0'), +('2', '43', '6', '1904', '4186', '0'), +('2', '43', '17', '2285', '11444', '0'), +('2', '43', '17', '4882', '10906', '0'), +('2', '43', '17', '4342', '5321', '0'), +('2', '43', '17', '2405', '2697', '0'), +('2', '43', '7', '2289', '3408', '0'), +('2', '43', '7', '1362', '2624', '0'), +('2', '43', '7', '1321', '1746', '0'), +('2', '43', '7', '10336', '1562', '0'), +('2', '43', '9', '2290', '3145', '0'), +('2', '43', '9', '4925', '2652', '0'), +('2', '43', '9', '4406', '2625', '0'), +('2', '43', '9', '10105', '2621', '0'), +('2', '43', '15', '14631', '3117', '0'), +('2', '43', '15', '10150', '3004', '0'), +('2', '43', '15', '10163', '2300', '0'), +('2', '43', '15', '14651', '2224', '0'), +('2', '43', '20', '11666', '8378', '0'), +('2', '43', '20', '2742', '5196', '0'), +('2', '43', '20', '2288', '4478', '0'), +('2', '43', '20', '2407', '2733', '0'), +('2', '43', '12', '2291', '3830', '0'), +('2', '43', '12', '20655', '3666', '0'), +('2', '43', '12', '2923', '3074', '0'), +('2', '43', '12', '4345', '2970', '0'), +('2', '43', '18', '4886', '4985', '0'), +('2', '43', '18', '2292', '2919', '0'), +('2', '43', '18', '2461', '2270', '0'), +('2', '43', '18', '4410', '1142', '0'), +('2', '43', '19', '4407', '4735', '0'), +('2', '43', '19', '4837', '3621', '0'), +('2', '43', '19', '68239', '3482', '0'), +('2', '43', '19', '2293', '2793', '0'), +('2', '43', '13', '11691', '15455', '0'), +('2', '43', '13', '27718', '10697', '0'), +('2', '43', '13', '27719', '7796', '0'), +('2', '43', '13', '10333', '5300', '0'), +('2', '43', '14', '27716', '11428', '0'), +('2', '43', '14', '10335', '9339', '0'), +('2', '43', '14', '13991', '6194', '0'), +('2', '43', '14', '12238', '6162', '0'), +('2', '43', '11', '9246', '5206', '0'), +('2', '43', '11', '14762', '2204', '0'), +('2', '43', '11', '16941', '1039', '0'), +('2', '43', '11', '60396', '549', '0'), +('2', '44', '22', '9246', '0', '0'), +('2', '44', '22', '10323', '0', '0'), +('2', '44', '22', '44492', '0', '0'), +('2', '44', '22', '13101', '0', '0'), +('2', '44', '1', '14563', '5087', '0'), +('2', '44', '1', '14702', '3750', '0'), +('2', '44', '1', '10082', '3285', '0'), +('2', '44', '1', '14701', '2862', '0'), +('2', '44', '2', '10143', '5368', '0'), +('2', '44', '2', '30363', '3700', '0'), +('2', '44', '2', '2191', '3260', '0'), +('2', '44', '2', '4881', '3150', '0'), +('2', '44', '3', '11052', '7973', '0'), +('2', '44', '3', '14108', '3895', '0'), +('2', '44', '3', '4505', '3751', '0'), +('2', '44', '3', '14695', '3729', '0'), +('2', '44', '5', '14703', '6050', '0'), +('2', '44', '5', '1536', '5575', '0'), +('2', '44', '5', '14562', '5551', '0'), +('2', '44', '5', '4413', '4832', '0'), +('2', '44', '8', '11603', '13094', '0'), +('2', '44', '8', '12238', '6138', '0'), +('2', '44', '8', '2349', '3554', '0'), +('2', '44', '8', '1363', '2510', '0'), +('2', '44', '6', '27717', '10051', '0'), +('2', '44', '6', '2924', '8483', '0'), +('2', '44', '6', '1557', '5310', '0'), +('2', '44', '6', '1904', '4282', '0'), +('2', '44', '17', '2285', '11493', '0'), +('2', '44', '17', '4882', '11091', '0'), +('2', '44', '17', '4342', '5442', '0'), +('2', '44', '17', '2405', '2758', '0'), +('2', '44', '7', '2289', '3456', '0'), +('2', '44', '7', '1362', '2624', '0'), +('2', '44', '7', '1321', '1746', '0'), +('2', '44', '7', '10336', '1598', '0'), +('2', '44', '9', '2290', '3206', '0'), +('2', '44', '9', '4925', '2712', '0'), +('2', '44', '9', '4406', '2685', '0'), +('2', '44', '9', '10105', '2682', '0'), +('2', '44', '15', '14631', '3189', '0'), +('2', '44', '15', '10150', '3004', '0'), +('2', '44', '15', '10163', '2300', '0'), +('2', '44', '15', '14651', '2224', '0'), +('2', '44', '20', '11666', '8380', '0'), +('2', '44', '20', '2742', '5199', '0'), +('2', '44', '20', '2288', '4478', '0'), +('2', '44', '20', '2407', '2794', '0'), +('2', '44', '12', '2291', '3830', '0'), +('2', '44', '12', '20655', '3691', '0'), +('2', '44', '12', '2923', '3074', '0'), +('2', '44', '12', '4345', '3030', '0'), +('2', '44', '18', '4886', '5093', '0'), +('2', '44', '18', '2292', '2967', '0'), +('2', '44', '18', '2461', '2318', '0'), +('2', '44', '18', '4410', '1142', '0'), +('2', '44', '19', '4407', '4844', '0'), +('2', '44', '19', '4837', '3681', '0'), +('2', '44', '19', '68239', '3518', '0'), +('2', '44', '19', '2293', '2830', '0'), +('2', '44', '13', '11691', '15636', '0'), +('2', '44', '13', '27718', '10818', '0'), +('2', '44', '13', '27719', '7888', '0'), +('2', '44', '13', '9246', '5327', '0'), +('2', '44', '14', '27716', '11537', '0'), +('2', '44', '14', '10335', '9556', '0'), +('2', '44', '14', '13991', '6315', '0'), +('2', '44', '14', '12238', '6283', '0'), +('2', '44', '11', '9246', '5327', '0'), +('2', '44', '11', '14762', '2204', '0'), +('2', '44', '11', '16941', '1063', '0'), +('2', '44', '11', '60396', '562', '0'), +('2', '45', '22', '9246', '0', '0'), +('2', '45', '22', '10323', '0', '0'), +('2', '45', '22', '44492', '0', '0'), +('2', '45', '22', '13101', '0', '0'), +('2', '45', '1', '14563', '5195', '0'), +('2', '45', '1', '14702', '3750', '0'), +('2', '45', '1', '10082', '3358', '0'), +('2', '45', '1', '14701', '2862', '0'), +('2', '45', '2', '10143', '5368', '0'), +('2', '45', '2', '30363', '3700', '0'), +('2', '45', '2', '2191', '3333', '0'), +('2', '45', '2', '4881', '3211', '0'), +('2', '45', '3', '11052', '8154', '0'), +('2', '45', '3', '14108', '3979', '0'), +('2', '45', '3', '4505', '3835', '0'), +('2', '45', '3', '14695', '3814', '0'), +('2', '45', '5', '14703', '6050', '0'), +('2', '45', '5', '1536', '5683', '0'), +('2', '45', '5', '14562', '5635', '0'), +('2', '45', '5', '4413', '4941', '0'), +('2', '45', '8', '11603', '13203', '0'), +('2', '45', '8', '12238', '6258', '0'), +('2', '45', '8', '2349', '3554', '0'), +('2', '45', '8', '1363', '2510', '0'), +('2', '45', '6', '27717', '10198', '0'), +('2', '45', '6', '2924', '8544', '0'), +('2', '45', '6', '1557', '5310', '0'), +('2', '45', '6', '1904', '4379', '0'), +('2', '45', '17', '2285', '11541', '0'), +('2', '45', '17', '4882', '11277', '0'), +('2', '45', '17', '4342', '5563', '0'), +('2', '45', '17', '2405', '2819', '0'), +('2', '45', '7', '2289', '3505', '0'), +('2', '45', '7', '1362', '2624', '0'), +('2', '45', '7', '1321', '1746', '0'), +('2', '45', '7', '10336', '1634', '0'), +('2', '45', '9', '2290', '3267', '0'), +('2', '45', '9', '4925', '2772', '0'), +('2', '45', '9', '4406', '2746', '0'), +('2', '45', '9', '10105', '2742', '0'), +('2', '45', '15', '14631', '3262', '0'), +('2', '45', '15', '10150', '3004', '0'), +('2', '45', '15', '10163', '2300', '0'), +('2', '45', '15', '14651', '2224', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '45', '20', '11666', '8382', '0'), +('2', '45', '20', '2742', '5202', '0'), +('2', '45', '20', '2288', '4478', '0'), +('2', '45', '20', '2407', '2854', '0'), +('2', '45', '12', '2291', '3830', '0'), +('2', '45', '12', '20655', '3716', '0'), +('2', '45', '12', '4345', '3090', '0'), +('2', '45', '12', '2923', '3074', '0'), +('2', '45', '18', '4886', '5202', '0'), +('2', '45', '18', '2292', '3015', '0'), +('2', '45', '18', '2461', '2367', '0'), +('2', '45', '18', '4410', '1142', '0'), +('2', '45', '19', '4407', '4953', '0'), +('2', '45', '19', '4837', '3742', '0'), +('2', '45', '19', '68239', '3554', '0'), +('2', '45', '19', '2293', '2866', '0'), +('2', '45', '13', '11691', '15817', '0'), +('2', '45', '13', '27718', '10938', '0'), +('2', '45', '13', '27719', '7980', '0'), +('2', '45', '13', '9246', '5448', '0'), +('2', '45', '14', '27716', '11645', '0'), +('2', '45', '14', '10335', '9774', '0'), +('2', '45', '14', '13991', '6436', '0'), +('2', '45', '14', '12238', '6403', '0'), +('2', '45', '11', '9246', '5448', '0'), +('2', '45', '11', '14762', '2204', '0'), +('2', '45', '11', '16941', '1087', '0'), +('2', '45', '11', '60396', '574', '0'), +('2', '46', '22', '9246', '0', '0'), +('2', '46', '22', '10323', '0', '0'), +('2', '46', '22', '44492', '0', '0'), +('2', '46', '22', '13101', '0', '0'), +('2', '46', '1', '14563', '5304', '0'), +('2', '46', '1', '14702', '3750', '0'), +('2', '46', '1', '10082', '3430', '0'), +('2', '46', '1', '14701', '2862', '0'), +('2', '46', '2', '10143', '5368', '0'), +('2', '46', '2', '30363', '3700', '0'), +('2', '46', '2', '2191', '3405', '0'), +('2', '46', '2', '4881', '3271', '0'), +('2', '46', '3', '11052', '8335', '0'), +('2', '46', '3', '14108', '4064', '0'), +('2', '46', '3', '4505', '3920', '0'), +('2', '46', '3', '14695', '3898', '0'), +('2', '46', '5', '14703', '6050', '0'), +('2', '46', '5', '1536', '5792', '0'), +('2', '46', '5', '14562', '5720', '0'), +('2', '46', '5', '4413', '5049', '0'), +('2', '46', '8', '11603', '13312', '0'), +('2', '46', '8', '12238', '6379', '0'), +('2', '46', '8', '2349', '3554', '0'), +('2', '46', '8', '1363', '2510', '0'), +('2', '46', '6', '27717', '10346', '0'), +('2', '46', '6', '2924', '8604', '0'), +('2', '46', '6', '1557', '5310', '0'), +('2', '46', '6', '1904', '4476', '0'), +('2', '46', '17', '2285', '11589', '0'), +('2', '46', '17', '4882', '11463', '0'), +('2', '46', '17', '4342', '5684', '0'), +('2', '46', '17', '2405', '2880', '0'), +('2', '46', '7', '2289', '3553', '0'), +('2', '46', '7', '1362', '2624', '0'), +('2', '46', '7', '1321', '1746', '0'), +('2', '46', '7', '10336', '1671', '0'), +('2', '46', '9', '2290', '3328', '0'), +('2', '46', '9', '4925', '2833', '0'), +('2', '46', '9', '4406', '2806', '0'), +('2', '46', '9', '10105', '2803', '0'), +('2', '46', '15', '14631', '3334', '0'), +('2', '46', '15', '10150', '3004', '0'), +('2', '46', '15', '10163', '2300', '0'), +('2', '46', '15', '14694', '2225', '0'), +('2', '46', '20', '11666', '8384', '0'), +('2', '46', '20', '2742', '5205', '0'), +('2', '46', '20', '2288', '4478', '0'), +('2', '46', '20', '2407', '2915', '0'), +('2', '46', '12', '2291', '3830', '0'), +('2', '46', '12', '20655', '3741', '0'), +('2', '46', '12', '4345', '3151', '0'), +('2', '46', '12', '2923', '3074', '0'), +('2', '46', '18', '4886', '5311', '0'), +('2', '46', '18', '2292', '3064', '0'), +('2', '46', '18', '2461', '2415', '0'), +('2', '46', '18', '4410', '1142', '0'), +('2', '46', '19', '4407', '5061', '0'), +('2', '46', '19', '4837', '3802', '0'), +('2', '46', '19', '68239', '3590', '0'), +('2', '46', '19', '2293', '2902', '0'), +('2', '46', '13', '11691', '15998', '0'), +('2', '46', '13', '27718', '11059', '0'), +('2', '46', '13', '27719', '8072', '0'), +('2', '46', '13', '9246', '5569', '0'), +('2', '46', '14', '27716', '11754', '0'), +('2', '46', '14', '10335', '9991', '0'), +('2', '46', '14', '13991', '6557', '0'), +('2', '46', '14', '12238', '6524', '0'), +('2', '46', '11', '9246', '5569', '0'), +('2', '46', '11', '14762', '2204', '0'), +('2', '46', '11', '16941', '1111', '0'), +('2', '46', '11', '60396', '586', '0'), +('2', '47', '22', '9246', '0', '0'), +('2', '47', '22', '10323', '0', '0'), +('2', '47', '22', '44492', '0', '0'), +('2', '47', '22', '13101', '0', '0'), +('2', '47', '1', '14563', '5413', '0'), +('2', '47', '1', '14702', '3750', '0'), +('2', '47', '1', '10082', '3503', '0'), +('2', '47', '1', '14701', '2862', '0'), +('2', '47', '2', '10143', '5368', '0'), +('2', '47', '2', '30363', '3700', '0'), +('2', '47', '2', '2191', '3478', '0'), +('2', '47', '2', '4881', '3331', '0'), +('2', '47', '3', '11052', '8516', '0'), +('2', '47', '3', '14108', '4148', '0'), +('2', '47', '3', '4505', '4005', '0'), +('2', '47', '3', '14695', '3983', '0'), +('2', '47', '5', '14703', '6050', '0'), +('2', '47', '5', '1536', '5901', '0'), +('2', '47', '5', '14562', '5805', '0'), +('2', '47', '5', '4413', '5158', '0'), +('2', '47', '8', '11603', '13420', '0'), +('2', '47', '8', '12238', '6500', '0'), +('2', '47', '8', '2349', '3554', '0'), +('2', '47', '8', '1363', '2510', '0'), +('2', '47', '6', '27717', '10493', '0'), +('2', '47', '6', '2924', '8664', '0'), +('2', '47', '6', '1557', '5310', '0'), +('2', '47', '6', '1904', '4572', '0'), +('2', '47', '17', '4882', '11648', '0'), +('2', '47', '17', '2285', '11637', '0'), +('2', '47', '17', '4342', '5804', '0'), +('2', '47', '17', '2405', '2942', '0'), +('2', '47', '7', '2289', '3601', '0'), +('2', '47', '7', '1362', '2624', '0'), +('2', '47', '7', '1321', '1746', '0'), +('2', '47', '7', '10336', '1707', '0'), +('2', '47', '9', '2290', '3389', '0'), +('2', '47', '9', '4925', '2893', '0'), +('2', '47', '9', '4406', '2867', '0'), +('2', '47', '9', '10105', '2863', '0'), +('2', '47', '15', '14631', '3407', '0'), +('2', '47', '15', '10150', '3004', '0'), +('2', '47', '15', '10163', '2300', '0'), +('2', '47', '15', '14694', '2273', '0'), +('2', '47', '20', '11666', '8386', '0'), +('2', '47', '20', '2742', '5208', '0'), +('2', '47', '20', '2288', '4478', '0'), +('2', '47', '20', '2407', '2975', '0'), +('2', '47', '12', '2291', '3830', '0'), +('2', '47', '12', '20655', '3765', '0'), +('2', '47', '12', '4345', '3211', '0'), +('2', '47', '12', '2923', '3074', '0'), +('2', '47', '18', '4886', '5420', '0'), +('2', '47', '18', '2292', '3112', '0'), +('2', '47', '18', '2461', '2463', '0'), +('2', '47', '18', '4410', '1142', '0'), +('2', '47', '19', '4407', '5170', '0'), +('2', '47', '19', '4837', '3863', '0'), +('2', '47', '19', '68239', '3627', '0'), +('2', '47', '19', '2293', '2938', '0'), +('2', '47', '13', '11691', '16179', '0'), +('2', '47', '13', '27718', '11180', '0'), +('2', '47', '13', '27719', '8164', '0'), +('2', '47', '13', '9246', '5690', '0'), +('2', '47', '14', '27716', '11863', '0'), +('2', '47', '14', '10335', '10209', '0'), +('2', '47', '14', '13991', '6678', '0'), +('2', '47', '14', '12238', '6645', '0'), +('2', '47', '11', '9246', '5690', '0'), +('2', '47', '11', '14762', '2204', '0'), +('2', '47', '11', '16941', '1136', '0'), +('2', '47', '11', '60396', '598', '0'), +('2', '48', '22', '9246', '0', '0'), +('2', '48', '22', '10323', '0', '0'), +('2', '48', '22', '44492', '0', '0'), +('2', '48', '22', '13101', '0', '0'), +('2', '48', '1', '14563', '5522', '0'), +('2', '48', '1', '14702', '3750', '0'), +('2', '48', '1', '10082', '3575', '0'), +('2', '48', '1', '14701', '2862', '0'), +('2', '48', '2', '10143', '5368', '0'), +('2', '48', '2', '30363', '3700', '0'), +('2', '48', '2', '2191', '3550', '0'), +('2', '48', '2', '4881', '3392', '0'), +('2', '48', '3', '11052', '8698', '0'), +('2', '48', '3', '14108', '4233', '0'), +('2', '48', '3', '4505', '4089', '0'), +('2', '48', '3', '14695', '4067', '0'), +('2', '48', '5', '14703', '6050', '0'), +('2', '48', '5', '1536', '6010', '0'), +('2', '48', '5', '14562', '5889', '0'), +('2', '48', '5', '4413', '5267', '0'), +('2', '48', '8', '11603', '13529', '0'), +('2', '48', '8', '12238', '6621', '0'), +('2', '48', '8', '2349', '3554', '0'), +('2', '48', '8', '2913', '2512', '0'), +('2', '48', '6', '27717', '10640', '0'), +('2', '48', '6', '2924', '8725', '0'), +('2', '48', '6', '1557', '5310', '0'), +('2', '48', '6', '1904', '4669', '0'), +('2', '48', '17', '4882', '11834', '0'), +('2', '48', '17', '2285', '11686', '0'), +('2', '48', '17', '4342', '5925', '0'), +('2', '48', '17', '2405', '3003', '0'), +('2', '48', '7', '2289', '3650', '0'), +('2', '48', '7', '1362', '2624', '0'), +('2', '48', '7', '1321', '1746', '0'), +('2', '48', '7', '10336', '1743', '0'), +('2', '48', '9', '2290', '3450', '0'), +('2', '48', '9', '4925', '2954', '0'), +('2', '48', '9', '4406', '2927', '0'), +('2', '48', '9', '10105', '2923', '0'), +('2', '48', '15', '14631', '3479', '0'), +('2', '48', '15', '10150', '3004', '0'), +('2', '48', '15', '14694', '2322', '0'), +('2', '48', '15', '10163', '2300', '0'), +('2', '48', '20', '11666', '8388', '0'), +('2', '48', '20', '2742', '5211', '0'), +('2', '48', '20', '2288', '4478', '0'), +('2', '48', '20', '2407', '3035', '0'), +('2', '48', '12', '2291', '3830', '0'), +('2', '48', '12', '20655', '3790', '0'), +('2', '48', '12', '4345', '3272', '0'), +('2', '48', '12', '2923', '3074', '0'), +('2', '48', '18', '4886', '5528', '0'), +('2', '48', '18', '2292', '3160', '0'), +('2', '48', '18', '2461', '2512', '0'), +('2', '48', '18', '4410', '1142', '0'), +('2', '48', '19', '4407', '5279', '0'), +('2', '48', '19', '4837', '3923', '0'), +('2', '48', '19', '68239', '3663', '0'), +('2', '48', '19', '2293', '2975', '0'), +('2', '48', '13', '11691', '16361', '0'), +('2', '48', '13', '27718', '11301', '0'), +('2', '48', '13', '27719', '8256', '0'), +('2', '48', '13', '9246', '5810', '0'), +('2', '48', '14', '27716', '11972', '0'), +('2', '48', '14', '10335', '10426', '0'), +('2', '48', '14', '13991', '6798', '0'), +('2', '48', '14', '12238', '6766', '0'), +('2', '48', '11', '9246', '5810', '0'), +('2', '48', '11', '14762', '2204', '0'), +('2', '48', '11', '16941', '1160', '0'), +('2', '48', '11', '60396', '610', '0'), +('2', '49', '22', '9246', '0', '0'), +('2', '49', '22', '10323', '0', '0'), +('2', '49', '22', '44492', '0', '0'), +('2', '49', '22', '13101', '0', '0'), +('2', '49', '1', '14563', '5630', '0'), +('2', '49', '1', '14702', '3750', '0'), +('2', '49', '1', '10082', '3648', '0'), +('2', '49', '1', '14701', '2862', '0'), +('2', '49', '2', '10143', '5368', '0'), +('2', '49', '2', '30363', '3700', '0'), +('2', '49', '2', '2191', '3623', '0'), +('2', '49', '2', '4881', '3452', '0'), +('2', '49', '3', '11052', '8879', '0'), +('2', '49', '3', '14108', '4318', '0'), +('2', '49', '3', '4505', '4174', '0'), +('2', '49', '3', '14695', '4152', '0'), +('2', '49', '5', '1536', '6118', '0'), +('2', '49', '5', '14703', '6050', '0'), +('2', '49', '5', '14562', '5974', '0'), +('2', '49', '5', '4413', '5376', '0'), +('2', '49', '8', '11603', '13638', '0'), +('2', '49', '8', '12238', '6742', '0'), +('2', '49', '8', '2349', '3554', '0'), +('2', '49', '8', '2913', '2560', '0'), +('2', '49', '6', '27717', '10788', '0'), +('2', '49', '6', '2924', '8785', '0'), +('2', '49', '6', '1557', '5310', '0'), +('2', '49', '6', '1904', '4766', '0'), +('2', '49', '17', '4882', '12020', '0'), +('2', '49', '17', '2285', '11734', '0'), +('2', '49', '17', '4342', '6046', '0'), +('2', '49', '17', '2405', '3064', '0'), +('2', '49', '7', '2289', '3698', '0'), +('2', '49', '7', '1362', '2624', '0'), +('2', '49', '7', '10336', '1779', '0'), +('2', '49', '7', '1321', '1746', '0'), +('2', '49', '9', '2290', '3511', '0'), +('2', '49', '9', '4925', '3014', '0'), +('2', '49', '9', '4406', '2987', '0'), +('2', '49', '9', '10105', '2984', '0'), +('2', '49', '15', '14631', '3552', '0'), +('2', '49', '15', '10150', '3004', '0'), +('2', '49', '15', '14694', '2370', '0'), +('2', '49', '15', '10163', '2300', '0'), +('2', '49', '20', '11666', '8390', '0'), +('2', '49', '20', '2742', '5214', '0'), +('2', '49', '20', '2288', '4478', '0'), +('2', '49', '20', '2407', '3096', '0'), +('2', '49', '12', '2291', '3830', '0'), +('2', '49', '12', '20655', '3815', '0'), +('2', '49', '12', '4345', '3332', '0'), +('2', '49', '12', '2923', '3074', '0'), +('2', '49', '18', '4886', '5637', '0'), +('2', '49', '18', '2292', '3209', '0'), +('2', '49', '18', '2461', '2560', '0'), +('2', '49', '18', '4410', '1142', '0'), +('2', '49', '19', '4407', '5387', '0'), +('2', '49', '19', '4837', '3983', '0'), +('2', '49', '19', '68239', '3699', '0'), +('2', '49', '19', '2293', '3011', '0'), +('2', '49', '13', '11691', '16542', '0'), +('2', '49', '13', '27718', '11422', '0'), +('2', '49', '13', '27719', '8348', '0'), +('2', '49', '13', '9246', '5931', '0'), +('2', '49', '14', '27716', '12080', '0'), +('2', '49', '14', '10335', '10644', '0'), +('2', '49', '14', '13991', '6919', '0'), +('2', '49', '14', '12238', '6887', '0'), +('2', '49', '11', '9246', '5931', '0'), +('2', '49', '11', '14762', '2204', '0'), +('2', '49', '11', '16941', '1184', '0'), +('2', '49', '11', '60396', '622', '0'), +('2', '50', '22', '9246', '0', '0'), +('2', '50', '22', '10323', '0', '0'), +('2', '50', '22', '44492', '0', '0'), +('2', '50', '22', '13101', '0', '0'), +('2', '50', '1', '14563', '5739', '0'), +('2', '50', '1', '14702', '3750', '0'), +('2', '50', '1', '10082', '3720', '0'), +('2', '50', '1', '14701', '2862', '0'), +('2', '50', '2', '10143', '5368', '0'), +('2', '50', '2', '30363', '3700', '0'), +('2', '50', '2', '2191', '3695', '0'), +('2', '50', '2', '4881', '3513', '0'), +('2', '50', '3', '11052', '9060', '0'), +('2', '50', '3', '14108', '4402', '0'), +('2', '50', '3', '4505', '4258', '0'), +('2', '50', '3', '14695', '4236', '0'), +('2', '50', '5', '1536', '6227', '0'), +('2', '50', '5', '14562', '6058', '0'), +('2', '50', '5', '14703', '6050', '0'), +('2', '50', '5', '4413', '5484', '0'), +('2', '50', '8', '11603', '13746', '0'), +('2', '50', '8', '12238', '6862', '0'), +('2', '50', '8', '2349', '3554', '0'), +('2', '50', '8', '2913', '2608', '0'), +('2', '50', '6', '27717', '10935', '0'), +('2', '50', '6', '2924', '8846', '0'), +('2', '50', '6', '1557', '5310', '0'), +('2', '50', '6', '1904', '4862', '0'), +('2', '50', '17', '4882', '12206', '0'), +('2', '50', '17', '2285', '11782', '0'), +('2', '50', '17', '4342', '6167', '0'), +('2', '50', '17', '2405', '3126', '0'), +('2', '50', '7', '2289', '3746', '0'), +('2', '50', '7', '1362', '2624', '0'), +('2', '50', '7', '10336', '1816', '0'), +('2', '50', '7', '1321', '1746', '0'), +('2', '50', '9', '2290', '3572', '0'), +('2', '50', '9', '4925', '3074', '0'), +('2', '50', '9', '4406', '3048', '0'), +('2', '50', '9', '10105', '3044', '0'), +('2', '50', '15', '14631', '3624', '0'), +('2', '50', '15', '10150', '3004', '0'), +('2', '50', '15', '14694', '2418', '0'), +('2', '50', '15', '10163', '2300', '0'), +('2', '50', '20', '11666', '8393', '0'), +('2', '50', '20', '2742', '5217', '0'), +('2', '50', '20', '2288', '4478', '0'), +('2', '50', '20', '2500', '3156', '0'), +('2', '50', '12', '20655', '3840', '0'), +('2', '50', '12', '2291', '3830', '0'), +('2', '50', '12', '4345', '3392', '0'), +('2', '50', '12', '2923', '3074', '0'), +('2', '50', '18', '4886', '5746', '0'), +('2', '50', '18', '2292', '3257', '0'), +('2', '50', '18', '2461', '2608', '0'), +('2', '50', '18', '4410', '1142', '0'), +('2', '50', '19', '4407', '5496', '0'), +('2', '50', '19', '4837', '4044', '0'), +('2', '50', '19', '68239', '3735', '0'), +('2', '50', '19', '2293', '3047', '0'), +('2', '50', '13', '11691', '16723', '0'), +('2', '50', '13', '27718', '11542', '0'), +('2', '50', '13', '27719', '8440', '0'), +('2', '50', '13', '9246', '6052', '0'), +('2', '50', '14', '27716', '12189', '0'), +('2', '50', '14', '10335', '10861', '0'), +('2', '50', '14', '13991', '7040', '0'), +('2', '50', '14', '12238', '7007', '0'), +('2', '50', '11', '9246', '6052', '0'), +('2', '50', '11', '14762', '2204', '0'), +('2', '50', '11', '16941', '1208', '0'), +('2', '50', '11', '60396', '634', '0'), +('2', '51', '22', '9246', '0', '0'), +('2', '51', '22', '10323', '0', '0'), +('2', '51', '22', '44492', '0', '0'), +('2', '51', '22', '13101', '0', '0'), +('2', '51', '1', '14563', '5848', '0'), +('2', '51', '1', '10082', '3793', '0'), +('2', '51', '1', '14702', '3750', '0'), +('2', '51', '1', '14701', '2862', '0'), +('2', '51', '2', '10143', '5368', '0'), +('2', '51', '2', '2191', '3768', '0'), +('2', '51', '2', '30363', '3700', '0'), +('2', '51', '2', '4881', '3573', '0'), +('2', '51', '3', '11052', '9241', '0'), +('2', '51', '3', '14108', '4487', '0'), +('2', '51', '3', '4505', '4343', '0'), +('2', '51', '3', '14695', '4321', '0'), +('2', '51', '5', '1536', '6336', '0'), +('2', '51', '5', '14562', '6143', '0'), +('2', '51', '5', '14703', '6050', '0'), +('2', '51', '5', '4413', '5593', '0'), +('2', '51', '8', '11603', '13855', '0'), +('2', '51', '8', '12238', '6983', '0'), +('2', '51', '8', '2349', '3554', '0'), +('2', '51', '8', '2913', '2657', '0'), +('2', '51', '6', '27717', '11083', '0'), +('2', '51', '6', '2924', '8906', '0'), +('2', '51', '6', '1557', '5310', '0'), +('2', '51', '6', '1904', '4959', '0'), +('2', '51', '17', '4882', '12391', '0'), +('2', '51', '17', '2285', '11831', '0'), +('2', '51', '17', '4342', '6288', '0'), +('2', '51', '17', '2405', '3187', '0'), +('2', '51', '7', '2289', '3795', '0'), +('2', '51', '7', '1362', '2624', '0'), +('2', '51', '7', '10336', '1852', '0'), +('2', '51', '7', '1321', '1746', '0'), +('2', '51', '9', '2290', '3633', '0'), +('2', '51', '9', '4925', '3135', '0'), +('2', '51', '9', '4406', '3108', '0'), +('2', '51', '9', '10105', '3105', '0'), +('2', '51', '15', '14631', '3696', '0'), +('2', '51', '15', '10150', '3004', '0'), +('2', '51', '15', '14694', '2467', '0'), +('2', '51', '15', '10163', '2300', '0'), +('2', '51', '20', '11666', '8395', '0'), +('2', '51', '20', '2742', '5220', '0'), +('2', '51', '20', '2288', '4478', '0'), +('2', '51', '20', '2500', '3218', '0'), +('2', '51', '12', '20655', '3864', '0'), +('2', '51', '12', '2291', '3830', '0'), +('2', '51', '12', '4345', '3453', '0'), +('2', '51', '12', '2923', '3074', '0'), +('2', '51', '18', '4886', '5854', '0'), +('2', '51', '18', '2292', '3305', '0'), +('2', '51', '18', '2461', '2657', '0'), +('2', '51', '18', '4410', '1142', '0'), +('2', '51', '19', '4407', '5605', '0'), +('2', '51', '19', '4837', '4104', '0'), +('2', '51', '19', '68239', '3772', '0'), +('2', '51', '19', '2293', '3083', '0'), +('2', '51', '13', '11691', '16904', '0'), +('2', '51', '13', '27718', '11663', '0'), +('2', '51', '13', '27719', '8533', '0'), +('2', '51', '13', '9246', '6173', '0'), +('2', '51', '14', '27716', '12298', '0'), +('2', '51', '14', '10335', '11079', '0'), +('2', '51', '14', '13991', '7161', '0'), +('2', '51', '14', '12238', '7128', '0'), +('2', '51', '11', '9246', '6173', '0'), +('2', '51', '11', '14762', '2204', '0'), +('2', '51', '11', '16941', '1232', '0'), +('2', '51', '11', '60396', '646', '0'), +('2', '52', '22', '9246', '0', '0'), +('2', '52', '22', '10323', '0', '0'), +('2', '52', '22', '44492', '0', '0'), +('2', '52', '22', '13101', '0', '0'), +('2', '52', '1', '14563', '5956', '0'), +('2', '52', '1', '10082', '3865', '0'), +('2', '52', '1', '14702', '3750', '0'), +('2', '52', '1', '14701', '2862', '0'), +('2', '52', '2', '10143', '5368', '0'), +('2', '52', '2', '2191', '3840', '0'), +('2', '52', '2', '30363', '3700', '0'), +('2', '52', '2', '4881', '3633', '0'), +('2', '52', '3', '11052', '9422', '0'), +('2', '52', '3', '14108', '4571', '0'), +('2', '52', '3', '4505', '4427', '0'), +('2', '52', '3', '14695', '4406', '0'), +('2', '52', '5', '1536', '6445', '0'), +('2', '52', '5', '14562', '6227', '0'), +('2', '52', '5', '14703', '6050', '0'), +('2', '52', '5', '4413', '5702', '0'), +('2', '52', '8', '11603', '13964', '0'), +('2', '52', '8', '12238', '7104', '0'), +('2', '52', '8', '2349', '3554', '0'), +('2', '52', '8', '2913', '2705', '0'), +('2', '52', '6', '27717', '11230', '0'), +('2', '52', '6', '2924', '8966', '0'), +('2', '52', '6', '1557', '5310', '0'), +('2', '52', '6', '1904', '5055', '0'), +('2', '52', '17', '4882', '12577', '0'), +('2', '52', '17', '2285', '11879', '0'), +('2', '52', '17', '4342', '6408', '0'), +('2', '52', '17', '2405', '3248', '0'), +('2', '52', '7', '2289', '3843', '0'), +('2', '52', '7', '1362', '2624', '0'), +('2', '52', '7', '10336', '1888', '0'), +('2', '52', '7', '1321', '1746', '0'), +('2', '52', '9', '2290', '3694', '0'), +('2', '52', '9', '4925', '3195', '0'), +('2', '52', '9', '4406', '3169', '0'), +('2', '52', '9', '10105', '3165', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '52', '15', '14631', '3769', '0'), +('2', '52', '15', '10150', '3004', '0'), +('2', '52', '15', '14694', '2515', '0'), +('2', '52', '15', '10163', '2300', '0'), +('2', '52', '20', '11666', '8397', '0'), +('2', '52', '20', '2742', '5223', '0'), +('2', '52', '20', '2288', '4478', '0'), +('2', '52', '20', '2500', '3280', '0'), +('2', '52', '12', '20655', '3889', '0'), +('2', '52', '12', '2291', '3830', '0'), +('2', '52', '12', '4345', '3513', '0'), +('2', '52', '12', '2923', '3074', '0'), +('2', '52', '18', '4886', '5963', '0'), +('2', '52', '18', '2292', '3354', '0'), +('2', '52', '18', '2461', '2705', '0'), +('2', '52', '18', '4410', '1142', '0'), +('2', '52', '19', '4407', '5714', '0'), +('2', '52', '19', '4837', '4165', '0'), +('2', '52', '19', '68239', '3808', '0'), +('2', '52', '19', '2293', '3120', '0'), +('2', '52', '13', '11691', '17085', '0'), +('2', '52', '13', '27718', '11784', '0'), +('2', '52', '13', '27719', '8625', '0'), +('2', '52', '13', '9246', '6294', '0'), +('2', '52', '14', '27716', '12406', '0'), +('2', '52', '14', '10335', '11296', '0'), +('2', '52', '14', '13991', '7282', '0'), +('2', '52', '14', '12238', '7249', '0'), +('2', '52', '11', '9246', '6294', '0'), +('2', '52', '11', '14762', '2204', '0'), +('2', '52', '11', '16941', '1256', '0'), +('2', '52', '11', '60396', '658', '0'), +('2', '53', '22', '9246', '0', '0'), +('2', '53', '22', '10323', '0', '0'), +('2', '53', '22', '44492', '0', '0'), +('2', '53', '22', '13101', '0', '0'), +('2', '53', '1', '14563', '6065', '0'), +('2', '53', '1', '10082', '3938', '0'), +('2', '53', '1', '14702', '3750', '0'), +('2', '53', '1', '14701', '2862', '0'), +('2', '53', '2', '10143', '5368', '0'), +('2', '53', '2', '2191', '3913', '0'), +('2', '53', '2', '30363', '3700', '0'), +('2', '53', '2', '4881', '3694', '0'), +('2', '53', '3', '11052', '9604', '0'), +('2', '53', '3', '14108', '4656', '0'), +('2', '53', '3', '4505', '4512', '0'), +('2', '53', '3', '14695', '4490', '0'), +('2', '53', '5', '1536', '6553', '0'), +('2', '53', '5', '14562', '6312', '0'), +('2', '53', '5', '14703', '6050', '0'), +('2', '53', '5', '4413', '5810', '0'), +('2', '53', '8', '11603', '14073', '0'), +('2', '53', '8', '12238', '7225', '0'), +('2', '53', '8', '2349', '3554', '0'), +('2', '53', '8', '2913', '2753', '0'), +('2', '53', '6', '27717', '11377', '0'), +('2', '53', '6', '2924', '9027', '0'), +('2', '53', '6', '1557', '5310', '0'), +('2', '53', '6', '1904', '5152', '0'), +('2', '53', '17', '4882', '12763', '0'), +('2', '53', '17', '2285', '11927', '0'), +('2', '53', '17', '4342', '6529', '0'), +('2', '53', '17', '2405', '3310', '0'), +('2', '53', '7', '2289', '3891', '0'), +('2', '53', '7', '1362', '2624', '0'), +('2', '53', '7', '10336', '1924', '0'), +('2', '53', '7', '1321', '1746', '0'), +('2', '53', '9', '2290', '3755', '0'), +('2', '53', '9', '4925', '3256', '0'), +('2', '53', '9', '4406', '3229', '0'), +('2', '53', '9', '10105', '3225', '0'), +('2', '53', '15', '14631', '3841', '0'), +('2', '53', '15', '10150', '3004', '0'), +('2', '53', '15', '14694', '2563', '0'), +('2', '53', '15', '10163', '2300', '0'), +('2', '53', '20', '11666', '8399', '0'), +('2', '53', '20', '2742', '5227', '0'), +('2', '53', '20', '2288', '4478', '0'), +('2', '53', '20', '2500', '3342', '0'), +('2', '53', '12', '20655', '3914', '0'), +('2', '53', '12', '2291', '3830', '0'), +('2', '53', '12', '4345', '3574', '0'), +('2', '53', '12', '2923', '3074', '0'), +('2', '53', '18', '4886', '6072', '0'), +('2', '53', '18', '2292', '3402', '0'), +('2', '53', '18', '2461', '2753', '0'), +('2', '53', '18', '4410', '1142', '0'), +('2', '53', '19', '4407', '5822', '0'), +('2', '53', '19', '4837', '4225', '0'), +('2', '53', '19', '68239', '3844', '0'), +('2', '53', '19', '2293', '3156', '0'), +('2', '53', '13', '11691', '17267', '0'), +('2', '53', '13', '27718', '11905', '0'), +('2', '53', '13', '27719', '8717', '0'), +('2', '53', '13', '9246', '6414', '0'), +('2', '53', '14', '27716', '12515', '0'), +('2', '53', '14', '10335', '11513', '0'), +('2', '53', '14', '13991', '7402', '0'), +('2', '53', '14', '12238', '7370', '0'), +('2', '53', '11', '9246', '6414', '0'), +('2', '53', '11', '14762', '2204', '0'), +('2', '53', '11', '16941', '1280', '0'), +('2', '53', '11', '60396', '670', '0'), +('2', '54', '22', '9246', '0', '0'), +('2', '54', '22', '10323', '0', '0'), +('2', '54', '22', '44492', '0', '0'), +('2', '54', '22', '13101', '0', '0'), +('2', '54', '1', '14563', '6174', '0'), +('2', '54', '1', '10082', '4010', '0'), +('2', '54', '1', '14702', '3750', '0'), +('2', '54', '1', '14701', '2862', '0'), +('2', '54', '2', '10143', '5368', '0'), +('2', '54', '2', '2191', '3985', '0'), +('2', '54', '2', '4881', '3754', '0'), +('2', '54', '2', '30363', '3700', '0'), +('2', '54', '3', '11052', '9785', '0'), +('2', '54', '3', '14108', '4740', '0'), +('2', '54', '3', '4505', '4596', '0'), +('2', '54', '3', '14695', '4575', '0'), +('2', '54', '5', '1536', '6662', '0'), +('2', '54', '5', '14562', '6396', '0'), +('2', '54', '5', '14703', '6050', '0'), +('2', '54', '5', '4413', '5919', '0'), +('2', '54', '8', '11603', '14181', '0'), +('2', '54', '8', '12238', '7346', '0'), +('2', '54', '8', '2349', '3554', '0'), +('2', '54', '8', '2913', '2802', '0'), +('2', '54', '6', '27717', '11525', '0'), +('2', '54', '6', '2924', '9087', '0'), +('2', '54', '6', '1557', '5310', '0'), +('2', '54', '6', '1904', '5249', '0'), +('2', '54', '17', '4882', '12949', '0'), +('2', '54', '17', '2285', '11976', '0'), +('2', '54', '17', '4342', '6650', '0'), +('2', '54', '17', '2405', '3371', '0'), +('2', '54', '7', '2289', '3939', '0'), +('2', '54', '7', '1362', '2624', '0'), +('2', '54', '7', '10336', '1961', '0'), +('2', '54', '7', '1321', '1746', '0'), +('2', '54', '9', '2290', '3816', '0'), +('2', '54', '9', '4925', '3316', '0'), +('2', '54', '9', '4406', '3289', '0'), +('2', '54', '9', '10105', '3286', '0'), +('2', '54', '15', '14631', '3914', '0'), +('2', '54', '15', '10150', '3004', '0'), +('2', '54', '15', '14694', '2612', '0'), +('2', '54', '15', '10163', '2300', '0'), +('2', '54', '20', '11666', '8401', '0'), +('2', '54', '20', '2742', '5230', '0'), +('2', '54', '20', '2288', '4478', '0'), +('2', '54', '20', '2500', '3404', '0'), +('2', '54', '12', '20655', '3939', '0'), +('2', '54', '12', '2291', '3830', '0'), +('2', '54', '12', '4345', '3634', '0'), +('2', '54', '12', '2923', '3074', '0'), +('2', '54', '18', '4886', '6181', '0'), +('2', '54', '18', '2292', '3450', '0'), +('2', '54', '18', '2461', '2802', '0'), +('2', '54', '18', '4410', '1142', '0'), +('2', '54', '19', '4407', '5931', '0'), +('2', '54', '19', '4837', '4285', '0'), +('2', '54', '19', '68239', '3880', '0'), +('2', '54', '19', '2293', '3192', '0'), +('2', '54', '13', '11691', '17448', '0'), +('2', '54', '13', '27718', '12026', '0'), +('2', '54', '13', '27719', '8809', '0'), +('2', '54', '13', '9246', '6535', '0'), +('2', '54', '14', '27716', '12624', '0'), +('2', '54', '14', '10335', '11731', '0'), +('2', '54', '14', '13991', '7523', '0'), +('2', '54', '14', '12238', '7491', '0'), +('2', '54', '11', '9246', '6535', '0'), +('2', '54', '11', '14762', '2204', '0'), +('2', '54', '11', '16941', '1305', '0'), +('2', '54', '11', '60396', '682', '0'), +('2', '55', '22', '9246', '0', '0'), +('2', '55', '22', '10323', '0', '0'), +('2', '55', '22', '44492', '0', '0'), +('2', '55', '22', '13101', '0', '0'), +('2', '55', '1', '14563', '6283', '0'), +('2', '55', '1', '10082', '4083', '0'), +('2', '55', '1', '14702', '3750', '0'), +('2', '55', '1', '14701', '2862', '0'), +('2', '55', '2', '10143', '5368', '0'), +('2', '55', '2', '2191', '4058', '0'), +('2', '55', '2', '4881', '3815', '0'), +('2', '55', '2', '30363', '3700', '0'), +('2', '55', '3', '11052', '9966', '0'), +('2', '55', '3', '14108', '4825', '0'), +('2', '55', '3', '4505', '4681', '0'), +('2', '55', '3', '14695', '4659', '0'), +('2', '55', '5', '1536', '6771', '0'), +('2', '55', '5', '14562', '6481', '0'), +('2', '55', '5', '14703', '6050', '0'), +('2', '55', '5', '4413', '6028', '0'), +('2', '55', '8', '11603', '14290', '0'), +('2', '55', '8', '12238', '7466', '0'), +('2', '55', '8', '2349', '3554', '0'), +('2', '55', '8', '2913', '2850', '0'), +('2', '55', '6', '27717', '11672', '0'), +('2', '55', '6', '2924', '9148', '0'), +('2', '55', '6', '1904', '5345', '0'), +('2', '55', '6', '1557', '5310', '0'), +('2', '55', '17', '4882', '13134', '0'), +('2', '55', '17', '2285', '12024', '0'), +('2', '55', '17', '4342', '6771', '0'), +('2', '55', '17', '2405', '3432', '0'), +('2', '55', '7', '2289', '3988', '0'), +('2', '55', '7', '1362', '2624', '0'), +('2', '55', '7', '10336', '1997', '0'), +('2', '55', '7', '1321', '1746', '0'), +('2', '55', '9', '2290', '3877', '0'), +('2', '55', '9', '4925', '3376', '0'), +('2', '55', '9', '4406', '3350', '0'), +('2', '55', '9', '10105', '3346', '0'), +('2', '55', '15', '14631', '3986', '0'), +('2', '55', '15', '10150', '3004', '0'), +('2', '55', '15', '14694', '2660', '0'), +('2', '55', '15', '10163', '2300', '0'), +('2', '55', '20', '11666', '8403', '0'), +('2', '55', '20', '2742', '5233', '0'), +('2', '55', '20', '2288', '4478', '0'), +('2', '55', '20', '2500', '3465', '0'), +('2', '55', '12', '20655', '3963', '0'), +('2', '55', '12', '2291', '3830', '0'), +('2', '55', '12', '4345', '3694', '0'), +('2', '55', '12', '2923', '3074', '0'), +('2', '55', '18', '4886', '6289', '0'), +('2', '55', '18', '2292', '3499', '0'), +('2', '55', '18', '2461', '2850', '0'), +('2', '55', '18', '4410', '1142', '0'), +('2', '55', '19', '4407', '6040', '0'), +('2', '55', '19', '4837', '4346', '0'), +('2', '55', '19', '68239', '3917', '0'), +('2', '55', '19', '2293', '3228', '0'), +('2', '55', '13', '11691', '17629', '0'), +('2', '55', '13', '27718', '12146', '0'), +('2', '55', '13', '27719', '8901', '0'), +('2', '55', '13', '9246', '6656', '0'), +('2', '55', '14', '27716', '12733', '0'), +('2', '55', '14', '10335', '11948', '0'), +('2', '55', '14', '13991', '7644', '0'), +('2', '55', '14', '12238', '7611', '0'), +('2', '55', '11', '9246', '6656', '0'), +('2', '55', '11', '14762', '2204', '0'), +('2', '55', '11', '16941', '1329', '0'), +('2', '55', '11', '60396', '694', '0'), +('2', '56', '22', '9246', '0', '0'), +('2', '56', '22', '10323', '0', '0'), +('2', '56', '22', '44492', '0', '0'), +('2', '56', '22', '13101', '0', '0'), +('2', '56', '1', '14563', '6391', '0'), +('2', '56', '1', '10082', '4155', '0'), +('2', '56', '1', '14702', '3750', '0'), +('2', '56', '1', '14701', '2862', '0'), +('2', '56', '2', '10143', '5368', '0'), +('2', '56', '2', '2191', '4130', '0'), +('2', '56', '2', '4881', '3875', '0'), +('2', '56', '2', '30363', '3700', '0'), +('2', '56', '3', '11052', '10147', '0'), +('2', '56', '3', '14108', '4910', '0'), +('2', '56', '3', '4505', '4766', '0'), +('2', '56', '3', '14695', '4744', '0'), +('2', '56', '5', '1536', '6879', '0'), +('2', '56', '5', '14562', '6566', '0'), +('2', '56', '5', '4413', '6137', '0'), +('2', '56', '5', '14703', '6050', '0'), +('2', '56', '8', '11603', '14399', '0'), +('2', '56', '8', '12238', '7587', '0'), +('2', '56', '8', '2349', '3554', '0'), +('2', '56', '8', '2913', '2898', '0'), +('2', '56', '6', '27717', '11819', '0'), +('2', '56', '6', '2924', '9208', '0'), +('2', '56', '6', '1904', '5442', '0'), +('2', '56', '6', '1557', '5310', '0'), +('2', '56', '17', '4882', '13320', '0'), +('2', '56', '17', '2285', '12072', '0'), +('2', '56', '17', '4342', '6892', '0'), +('2', '56', '17', '2405', '3494', '0'), +('2', '56', '7', '2289', '4036', '0'), +('2', '56', '7', '1362', '2624', '0'), +('2', '56', '7', '10336', '2033', '0'), +('2', '56', '7', '1321', '1746', '0'), +('2', '56', '9', '2290', '3938', '0'), +('2', '56', '9', '4925', '3437', '0'), +('2', '56', '9', '4406', '3410', '0'), +('2', '56', '9', '10105', '3407', '0'), +('2', '56', '15', '14631', '4059', '0'), +('2', '56', '15', '10150', '3004', '0'), +('2', '56', '15', '14694', '2708', '0'), +('2', '56', '15', '10163', '2300', '0'), +('2', '56', '20', '11666', '8405', '0'), +('2', '56', '20', '2742', '5236', '0'), +('2', '56', '20', '2288', '4478', '0'), +('2', '56', '20', '2500', '3527', '0'), +('2', '56', '12', '20655', '3988', '0'), +('2', '56', '12', '2291', '3830', '0'), +('2', '56', '12', '4345', '3755', '0'), +('2', '56', '12', '2923', '3074', '0'), +('2', '56', '18', '4886', '6398', '0'), +('2', '56', '18', '2292', '3547', '0'), +('2', '56', '18', '2461', '2898', '0'), +('2', '56', '18', '4410', '1142', '0'), +('2', '56', '19', '4407', '6149', '0'), +('2', '56', '19', '4837', '4406', '0'), +('2', '56', '19', '68239', '3953', '0'), +('2', '56', '19', '2293', '3264', '0'), +('2', '56', '13', '11691', '17810', '0'), +('2', '56', '13', '27718', '12267', '0'), +('2', '56', '13', '27719', '8993', '0'), +('2', '56', '13', '9246', '6777', '0'), +('2', '56', '14', '27716', '12841', '0'), +('2', '56', '14', '10335', '12166', '0'), +('2', '56', '14', '13991', '7765', '0'), +('2', '56', '14', '12238', '7732', '0'), +('2', '56', '11', '9246', '6777', '0'), +('2', '56', '11', '14762', '2204', '0'), +('2', '56', '11', '16941', '1353', '0'), +('2', '56', '11', '60396', '706', '0'), +('2', '57', '22', '9246', '0', '0'), +('2', '57', '22', '10323', '0', '0'), +('2', '57', '22', '44492', '0', '0'), +('2', '57', '22', '13101', '0', '0'), +('2', '57', '1', '14563', '6500', '0'), +('2', '57', '1', '10082', '4228', '0'), +('2', '57', '1', '14702', '3750', '0'), +('2', '57', '1', '14701', '2862', '0'), +('2', '57', '2', '10143', '5368', '0'), +('2', '57', '2', '2191', '4203', '0'), +('2', '57', '2', '4881', '3935', '0'), +('2', '57', '2', '30363', '3700', '0'), +('2', '57', '3', '11052', '10328', '0'), +('2', '57', '3', '14108', '4994', '0'), +('2', '57', '3', '4505', '4850', '0'), +('2', '57', '3', '14695', '4828', '0'), +('2', '57', '5', '1536', '6988', '0'), +('2', '57', '5', '14562', '6650', '0'), +('2', '57', '5', '4413', '6245', '0'), +('2', '57', '5', '14703', '6050', '0'), +('2', '57', '8', '11603', '14507', '0'), +('2', '57', '8', '12238', '7708', '0'), +('2', '57', '8', '2349', '3554', '0'), +('2', '57', '8', '2913', '2947', '0'), +('2', '57', '6', '27717', '11967', '0'), +('2', '57', '6', '2924', '9268', '0'), +('2', '57', '6', '1904', '5539', '0'), +('2', '57', '6', '1557', '5310', '0'), +('2', '57', '17', '4882', '13506', '0'), +('2', '57', '17', '2285', '12121', '0'), +('2', '57', '17', '4342', '7012', '0'), +('2', '57', '17', '2405', '3555', '0'), +('2', '57', '7', '2289', '4084', '0'), +('2', '57', '7', '1362', '2624', '0'), +('2', '57', '7', '10336', '2069', '0'), +('2', '57', '7', '1321', '1746', '0'), +('2', '57', '9', '2290', '3999', '0'), +('2', '57', '9', '4925', '3497', '0'), +('2', '57', '9', '4406', '3471', '0'), +('2', '57', '9', '10105', '3467', '0'), +('2', '57', '15', '14631', '4131', '0'), +('2', '57', '15', '10150', '3004', '0'), +('2', '57', '15', '14694', '2757', '0'), +('2', '57', '15', '10163', '2300', '0'), +('2', '57', '20', '11666', '8407', '0'), +('2', '57', '20', '2742', '5239', '0'), +('2', '57', '20', '2288', '4478', '0'), +('2', '57', '20', '2500', '3589', '0'), +('2', '57', '12', '20655', '4013', '0'), +('2', '57', '12', '2291', '3830', '0'), +('2', '57', '12', '4345', '3815', '0'), +('2', '57', '12', '2923', '3074', '0'), +('2', '57', '18', '4886', '6507', '0'), +('2', '57', '18', '2292', '3595', '0'), +('2', '57', '18', '2461', '2947', '0'), +('2', '57', '18', '4410', '1142', '0'), +('2', '57', '19', '4407', '6257', '0'), +('2', '57', '19', '4837', '4467', '0'), +('2', '57', '19', '68239', '3989', '0'), +('2', '57', '19', '2293', '3301', '0'), +('2', '57', '13', '11691', '17991', '0'), +('2', '57', '13', '27718', '12388', '0'), +('2', '57', '13', '27719', '9085', '0'), +('2', '57', '13', '9246', '6898', '0'), +('2', '57', '14', '27716', '12950', '0'), +('2', '57', '14', '10335', '12383', '0'), +('2', '57', '14', '13991', '7886', '0'), +('2', '57', '14', '12238', '7853', '0'), +('2', '57', '11', '9246', '6898', '0'), +('2', '57', '11', '14762', '2204', '0'), +('2', '57', '11', '16941', '1377', '0'), +('2', '57', '11', '60396', '719', '0'), +('2', '58', '22', '9246', '0', '0'), +('2', '58', '22', '10323', '0', '0'), +('2', '58', '22', '44492', '0', '0'), +('2', '58', '22', '13101', '0', '0'), +('2', '58', '1', '14563', '6609', '0'), +('2', '58', '1', '10082', '4300', '0'), +('2', '58', '1', '14702', '3750', '0'), +('2', '58', '1', '14701', '2862', '0'), +('2', '58', '2', '10143', '5368', '0'), +('2', '58', '2', '2191', '4275', '0'), +('2', '58', '2', '4881', '3996', '0'), +('2', '58', '2', '30363', '3700', '0'), +('2', '58', '3', '11052', '10510', '0'), +('2', '58', '3', '14108', '5079', '0'), +('2', '58', '3', '4505', '4935', '0'), +('2', '58', '3', '14695', '4913', '0'), +('2', '58', '5', '1536', '7097', '0'), +('2', '58', '5', '14562', '6735', '0'), +('2', '58', '5', '4413', '6354', '0'), +('2', '58', '5', '14703', '6050', '0'), +('2', '58', '8', '11603', '14616', '0'), +('2', '58', '8', '12238', '7829', '0'), +('2', '58', '8', '2349', '3554', '0'), +('2', '58', '8', '2913', '2995', '0'), +('2', '58', '6', '27717', '12114', '0'), +('2', '58', '6', '2924', '9329', '0'), +('2', '58', '6', '1904', '5635', '0'), +('2', '58', '6', '1557', '5310', '0'), +('2', '58', '17', '4882', '13691', '0'), +('2', '58', '17', '2285', '12169', '0'), +('2', '58', '17', '4342', '7133', '0'), +('2', '58', '17', '2405', '3616', '0'), +('2', '58', '7', '2289', '4133', '0'), +('2', '58', '7', '1362', '2624', '0'), +('2', '58', '7', '10336', '2106', '0'), +('2', '58', '7', '1321', '1746', '0'), +('2', '58', '9', '2290', '4060', '0'), +('2', '58', '9', '4925', '3558', '0'), +('2', '58', '9', '4406', '3531', '0'), +('2', '58', '9', '10105', '3527', '0'), +('2', '58', '15', '14631', '4204', '0'), +('2', '58', '15', '10150', '3004', '0'), +('2', '58', '15', '14694', '2805', '0'), +('2', '58', '15', '10163', '2300', '0'), +('2', '58', '20', '11666', '8409', '0'), +('2', '58', '20', '2742', '5242', '0'), +('2', '58', '20', '2288', '4478', '0'), +('2', '58', '20', '2500', '3651', '0'), +('2', '58', '12', '20655', '4038', '0'), +('2', '58', '12', '4345', '3876', '0'), +('2', '58', '12', '2291', '3830', '0'), +('2', '58', '12', '2923', '3074', '0'), +('2', '58', '18', '4886', '6615', '0'), +('2', '58', '18', '2292', '3644', '0'), +('2', '58', '18', '2461', '2995', '0'), +('2', '58', '18', '4410', '1142', '0'), +('2', '58', '19', '4407', '6366', '0'), +('2', '58', '19', '4837', '4527', '0'), +('2', '58', '19', '68239', '4025', '0'), +('2', '58', '19', '2293', '3337', '0'), +('2', '58', '13', '11691', '18173', '0'), +('2', '58', '13', '27718', '12509', '0'), +('2', '58', '13', '27719', '9177', '0'), +('2', '58', '13', '9246', '7018', '0'), +('2', '58', '14', '27716', '13059', '0'), +('2', '58', '14', '10335', '12601', '0'), +('2', '58', '14', '13991', '8006', '0'), +('2', '58', '14', '12238', '7974', '0'), +('2', '58', '11', '9246', '7018', '0'), +('2', '58', '11', '14762', '2204', '0'), +('2', '58', '11', '16941', '1401', '0'), +('2', '58', '11', '60396', '731', '0'), +('2', '59', '22', '9246', '0', '0'), +('2', '59', '22', '10323', '0', '0'), +('2', '59', '22', '44492', '0', '0'), +('2', '59', '22', '13101', '0', '0'), +('2', '59', '1', '14563', '6718', '0'), +('2', '59', '1', '10082', '4373', '0'), +('2', '59', '1', '14702', '3750', '0'), +('2', '59', '1', '14701', '2862', '0'), +('2', '59', '2', '10143', '5368', '0'), +('2', '59', '2', '2191', '4348', '0'), +('2', '59', '2', '4881', '4056', '0'), +('2', '59', '2', '30363', '3700', '0'), +('2', '59', '3', '11052', '10691', '0'), +('2', '59', '3', '14108', '5163', '0'), +('2', '59', '3', '4505', '5019', '0'), +('2', '59', '3', '14695', '4997', '0'), +('2', '59', '5', '1536', '7206', '0'), +('2', '59', '5', '14562', '6819', '0'), +('2', '59', '5', '4413', '6463', '0'), +('2', '59', '5', '14703', '6050', '0'), +('2', '59', '8', '11603', '14725', '0'), +('2', '59', '8', '12238', '7950', '0'), +('2', '59', '8', '2349', '3554', '0'), +('2', '59', '8', '2913', '3043', '0'), +('2', '59', '6', '27717', '12262', '0'), +('2', '59', '6', '2924', '9389', '0'), +('2', '59', '6', '1904', '5732', '0'), +('2', '59', '6', '1557', '5310', '0'), +('2', '59', '17', '4882', '13877', '0'), +('2', '59', '17', '2285', '12217', '0'), +('2', '59', '17', '4342', '7254', '0'), +('2', '59', '17', '2405', '3677', '0'), +('2', '59', '7', '2289', '4181', '0'), +('2', '59', '7', '1362', '2624', '0'), +('2', '59', '7', '10336', '2142', '0'), +('2', '59', '7', '1321', '1746', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '59', '9', '2290', '4121', '0'), +('2', '59', '9', '4925', '3618', '0'), +('2', '59', '9', '4406', '3591', '0'), +('2', '59', '9', '10105', '3588', '0'), +('2', '59', '15', '14631', '4276', '0'), +('2', '59', '15', '10150', '3004', '0'), +('2', '59', '15', '14694', '2853', '0'), +('2', '59', '15', '10163', '2300', '0'), +('2', '59', '20', '11666', '8412', '0'), +('2', '59', '20', '2742', '5245', '0'), +('2', '59', '20', '2288', '4478', '0'), +('2', '59', '20', '2500', '3713', '0'), +('2', '59', '12', '20655', '4063', '0'), +('2', '59', '12', '4345', '3936', '0'), +('2', '59', '12', '2291', '3830', '0'), +('2', '59', '12', '2923', '3074', '0'), +('2', '59', '18', '4886', '6724', '0'), +('2', '59', '18', '2292', '3692', '0'), +('2', '59', '18', '2461', '3043', '0'), +('2', '59', '18', '4410', '1142', '0'), +('2', '59', '19', '4407', '6475', '0'), +('2', '59', '19', '4837', '4587', '0'), +('2', '59', '19', '68239', '4062', '0'), +('2', '59', '19', '2293', '3373', '0'), +('2', '59', '13', '11691', '18354', '0'), +('2', '59', '13', '27718', '12630', '0'), +('2', '59', '13', '27719', '9269', '0'), +('2', '59', '13', '9246', '7139', '0'), +('2', '59', '14', '27716', '13167', '0'), +('2', '59', '14', '10335', '12818', '0'), +('2', '59', '14', '13991', '8127', '0'), +('2', '59', '14', '12238', '8095', '0'), +('2', '59', '11', '9246', '7139', '0'), +('2', '59', '11', '14762', '2204', '0'), +('2', '59', '11', '16941', '1425', '0'), +('2', '59', '11', '60396', '743', '0'), +('2', '60', '22', '66397', '0', '3'), +('2', '60', '22', '61948', '0', '3'), +('2', '60', '22', '21805', '0', '3'), +('2', '60', '22', '21807', '0', '3'), +('2', '60', '1', '63170', '22602', '3'), +('2', '60', '1', '30552', '19371', '3'), +('2', '60', '1', '28944', '13921', '3'), +('2', '60', '1', '29861', '12811', '3'), +('2', '60', '2', '26763', '32337', '3'), +('2', '60', '2', '26762', '13234', '3'), +('2', '60', '2', '28909', '12324', '3'), +('2', '60', '2', '1549', '12236', '3'), +('2', '60', '3', '26785', '36509', '3'), +('2', '60', '3', '26756', '34407', '3'), +('2', '60', '3', '28963', '29175', '3'), +('2', '60', '3', '31323', '26102', '3'), +('2', '60', '5', '28900', '39743', '3'), +('2', '60', '5', '51229', '24651', '3'), +('2', '60', '5', '28911', '23597', '3'), +('2', '60', '5', '31234', '18254', '3'), +('2', '60', '8', '51240', '36835', '3'), +('2', '60', '8', '1628', '31698', '3'), +('2', '60', '8', '30505', '20998', '3'), +('2', '60', '8', '28992', '16236', '3'), +('2', '60', '6', '1200', '31949', '3'), +('2', '60', '6', '28920', '14492', '3'), +('2', '60', '6', '30566', '14152', '3'), +('2', '60', '6', '28991', '13153', '3'), +('2', '60', '17', '26782', '17414', '3'), +('2', '60', '17', '7869', '17154', '3'), +('2', '60', '17', '31239', '13714', '3'), +('2', '60', '17', '10845', '13342', '3'), +('2', '60', '7', '28925', '15288', '3'), +('2', '60', '7', '7868', '14101', '3'), +('2', '60', '7', '28146', '13488', '3'), +('2', '60', '7', '26584', '13377', '3'), +('2', '60', '9', '26787', '26127', '3'), +('2', '60', '9', '30552', '19371', '3'), +('2', '60', '9', '28891', '18002', '3'), +('2', '60', '9', '7868', '14101', '3'), +('2', '60', '15', '51242', '28174', '3'), +('2', '60', '15', '63170', '22602', '3'), +('2', '60', '15', '23511', '17201', '3'), +('2', '60', '15', '28994', '15375', '3'), +('2', '60', '20', '28916', '16298', '3'), +('2', '60', '20', '26761', '15315', '3'), +('2', '60', '20', '30534', '13699', '3'), +('2', '60', '20', '26549', '13050', '3'), +('2', '60', '12', '30534', '13699', '3'), +('2', '60', '12', '28991', '13153', '3'), +('2', '60', '12', '31227', '12689', '3'), +('2', '60', '12', '28967', '12003', '3'), +('2', '60', '18', '26783', '42031', '3'), +('2', '60', '18', '26755', '16003', '3'), +('2', '60', '18', '28932', '12328', '3'), +('2', '60', '18', '8289', '12323', '3'), +('2', '60', '19', '30570', '15600', '3'), +('2', '60', '19', '29645', '13506', '3'), +('2', '60', '19', '31245', '12674', '3'), +('2', '60', '19', '7871', '12212', '3'), +('2', '60', '13', '14762', '22200', '3'), +('2', '60', '13', '26784', '16673', '3'), +('2', '60', '13', '28981', '15450', '3'), +('2', '60', '13', '26588', '14010', '3'), +('2', '60', '14', '28915', '33445', '3'), +('2', '60', '14', '14762', '22200', '3'), +('2', '60', '14', '61223', '19626', '3'), +('2', '60', '14', '26784', '16673', '3'), +('2', '60', '11', '2698', '25502', '3'), +('2', '60', '11', '14762', '22200', '3'), +('2', '60', '11', '31321', '18556', '3'), +('2', '60', '11', '26784', '16673', '3'), +('2', '60', '22', '10323', '0', '2'), +('2', '60', '22', '9248', '0', '2'), +('2', '60', '22', '12425', '0', '2'), +('2', '60', '22', '9254', '0', '2'), +('2', '60', '1', '2581', '14038', '2'), +('2', '60', '1', '2065', '9440', '2'), +('2', '60', '1', '10912', '7764', '2'), +('2', '60', '1', '62234', '6604', '2'), +('2', '60', '2', '1549', '14074', '2'), +('2', '60', '2', '10913', '12388', '2'), +('2', '60', '2', '31226', '10265', '2'), +('2', '60', '2', '31322', '9785', '2'), +('2', '60', '3', '31233', '13578', '2'), +('2', '60', '3', '1547', '11987', '2'), +('2', '60', '3', '31244', '11452', '2'), +('2', '60', '3', '31463', '10636', '2'), +('2', '60', '5', '31460', '12289', '2'), +('2', '60', '5', '30390', '10626', '2'), +('2', '60', '5', '31318', '10438', '2'), +('2', '60', '5', '29459', '9688', '2'), +('2', '60', '8', '1628', '13166', '2'), +('2', '60', '8', '31376', '12991', '2'), +('2', '60', '8', '11603', '9438', '2'), +('2', '60', '8', '5779', '9161', '2'), +('2', '60', '6', '27151', '7166', '2'), +('2', '60', '6', '2924', '6418', '2'), +('2', '60', '6', '29472', '6370', '2'), +('2', '60', '6', '27140', '6065', '2'), +('2', '60', '17', '31239', '16825', '2'), +('2', '60', '17', '10845', '15736', '2'), +('2', '60', '17', '6881', '12806', '2'), +('2', '60', '17', '25392', '12078', '2'), +('2', '60', '7', '31229', '11762', '2'), +('2', '60', '7', '29485', '7513', '2'), +('2', '60', '7', '31381', '5879', '2'), +('2', '60', '7', '62361', '5506', '2'), +('2', '60', '9', '31460', '12289', '2'), +('2', '60', '9', '31246', '8319', '2'), +('2', '60', '9', '31314', '4477', '2'), +('2', '60', '9', '30298', '4410', '2'), +('2', '60', '15', '25211', '12700', '2'), +('2', '60', '15', '31231', '12533', '2'), +('2', '60', '15', '62373', '7600', '2'), +('2', '60', '15', '62356', '6527', '2'), +('2', '60', '20', '25199', '13823', '2'), +('2', '60', '20', '25858', '13737', '2'), +('2', '60', '20', '2510', '12424', '2'), +('2', '60', '20', '1556', '12317', '2'), +('2', '60', '12', '31227', '14562', '2'), +('2', '60', '12', '25857', '10812', '2'), +('2', '60', '12', '31306', '8988', '2'), +('2', '60', '12', '11668', '8426', '2'), +('2', '60', '18', '31145', '9428', '2'), +('2', '60', '18', '31374', '8659', '2'), +('2', '60', '18', '25396', '7547', '2'), +('2', '60', '18', '62164', '7159', '2'), +('2', '60', '19', '29645', '15540', '2'), +('2', '60', '19', '31245', '14399', '2'), +('2', '60', '19', '31355', '9550', '2'), +('2', '60', '19', '31327', '8716', '2'), +('2', '60', '13', '31348', '15954', '2'), +('2', '60', '13', '5532', '14805', '2'), +('2', '60', '13', '31373', '13238', '2'), +('2', '60', '13', '29449', '10978', '2'), +('2', '60', '14', '31230', '15510', '2'), +('2', '60', '14', '31462', '11535', '2'), +('2', '60', '14', '31215', '11393', '2'), +('2', '60', '14', '29449', '10978', '2'), +('2', '60', '11', '31465', '14332', '2'), +('2', '60', '11', '1554', '13904', '2'), +('2', '60', '11', '2698', '10516', '2'), +('2', '60', '11', '31302', '10130', '2'), +('2', '60', '22', '10323', '0', '1'), +('2', '60', '22', '9246', '0', '1'), +('2', '60', '22', '12425', '0', '1'), +('2', '60', '22', '44492', '0', '1'), +('2', '60', '1', '10912', '12224', '1'), +('2', '60', '1', '62234', '8430', '1'), +('2', '60', '1', '5815', '4285', '1'), +('2', '60', '1', '5814', '4285', '1'), +('2', '60', '2', '10913', '18377', '1'), +('2', '60', '2', '50036', '5575', '1'), +('2', '60', '2', '10143', '5361', '1'), +('2', '60', '2', '62138', '3821', '1'), +('2', '60', '3', '5780', '7309', '1'), +('2', '60', '3', '11052', '6417', '1'), +('2', '60', '3', '46184', '5262', '1'), +('2', '60', '3', '1625', '4481', '1'), +('2', '60', '5', '14703', '6050', '1'), +('2', '60', '5', '14562', '4812', '1'), +('2', '60', '5', '1536', '4624', '1'), +('2', '60', '5', '8285', '4483', '1'), +('2', '60', '8', '1628', '16834', '1'), +('2', '60', '8', '11603', '12136', '1'), +('2', '60', '8', '1622', '10045', '1'), +('2', '60', '8', '5779', '9186', '1'), +('2', '60', '6', '27717', '8758', '1'), +('2', '60', '6', '2924', '7934', '1'), +('2', '60', '6', '1557', '5286', '1'), +('2', '60', '6', '4315', '4025', '1'), +('2', '60', '17', '10845', '21720', '1'), +('2', '60', '17', '4565', '13285', '1'), +('2', '60', '17', '2285', '11050', '1'), +('2', '60', '17', '4882', '9427', '1'), +('2', '60', '7', '62046', '4107', '1'), +('2', '60', '7', '2289', '3029', '1'), +('2', '60', '7', '1362', '2614', '1'), +('2', '60', '7', '5718', '1863', '1'), +('2', '60', '9', '1618', '4950', '1'), +('2', '60', '9', '2290', '2673', '1'), +('2', '60', '9', '4925', '2171', '1'), +('2', '60', '9', '4406', '2155', '1'), +('2', '60', '15', '5727', '6777', '1'), +('2', '60', '15', '5728', '5585', '1'), +('2', '60', '15', '5807', '5271', '1'), +('2', '60', '15', '10346', '4489', '1'), +('2', '60', '20', '1556', '15307', '1'), +('2', '60', '20', '11666', '8347', '1'), +('2', '60', '20', '5765', '8016', '1'), +('2', '60', '20', '5753', '6529', '1'), +('2', '60', '12', '11668', '14502', '1'), +('2', '60', '12', '2291', '3818', '1'), +('2', '60', '12', '20655', '3437', '1'), +('2', '60', '12', '2923', '3064', '1'), +('2', '60', '18', '62164', '9017', '1'), +('2', '60', '18', '4569', '6906', '1'), +('2', '60', '18', '4886', '4119', '1'), +('2', '60', '18', '2292', '2535', '1'), +('2', '60', '19', '5749', '4659', '1'), +('2', '60', '19', '4407', '3898', '1'), +('2', '60', '19', '68239', '3181', '1'), +('2', '60', '19', '4837', '3112', '1'), +('2', '60', '13', '5532', '22305', '1'), +('2', '60', '13', '11691', '14013', '1'), +('2', '60', '13', '24629', '13134', '1'), +('2', '60', '13', '24609', '11679', '1'), +('2', '60', '14', '24629', '13134', '1'), +('2', '60', '14', '24609', '11679', '1'), +('2', '60', '14', '27716', '10418', '1'), +('2', '60', '14', '14745', '8222', '1'), +('2', '60', '11', '46178', '7361', '1'), +('2', '60', '11', '5805', '5300', '1'), +('2', '60', '11', '5763', '5118', '1'), +('2', '60', '11', '79631', '4427', '1'), +('2', '61', '22', '66397', '0', '3'), +('2', '61', '22', '61948', '0', '3'), +('2', '61', '22', '21805', '0', '3'), +('2', '61', '22', '21807', '0', '3'), +('2', '61', '1', '63170', '22103', '3'), +('2', '61', '1', '30552', '19073', '3'), +('2', '61', '1', '28944', '13923', '3'), +('2', '61', '1', '29861', '12816', '3'), +('2', '61', '2', '26763', '31590', '3'), +('2', '61', '2', '26762', '13236', '3'), +('2', '61', '2', '28909', '12326', '3'), +('2', '61', '2', '1549', '12239', '3'), +('2', '61', '3', '26785', '35614', '3'), +('2', '61', '3', '26756', '33507', '3'), +('2', '61', '3', '28963', '28427', '3'), +('2', '61', '3', '31323', '25102', '3'), +('2', '61', '5', '28900', '38747', '3'), +('2', '61', '5', '51229', '24153', '3'), +('2', '61', '5', '28911', '23099', '3'), +('2', '61', '5', '31234', '17504', '3'), +('2', '61', '8', '51240', '35835', '3'), +('2', '61', '8', '1628', '30701', '3'), +('2', '61', '8', '30505', '20249', '3'), +('2', '61', '8', '28992', '16239', '3'), +('2', '61', '6', '1200', '30951', '3'), +('2', '61', '6', '28920', '14496', '3'), +('2', '61', '6', '30566', '14153', '3'), +('2', '61', '6', '28991', '13158', '3'), +('2', '61', '17', '26782', '17419', '3'), +('2', '61', '17', '7869', '17158', '3'), +('2', '61', '17', '31239', '13719', '3'), +('2', '61', '17', '10845', '13346', '3'), +('2', '61', '7', '28925', '15291', '3'), +('2', '61', '7', '7868', '14103', '3'), +('2', '61', '7', '28146', '13491', '3'), +('2', '61', '7', '26584', '13379', '3'), +('2', '61', '9', '26787', '25729', '3'), +('2', '61', '9', '30552', '19073', '3'), +('2', '61', '9', '28891', '17702', '3'), +('2', '61', '9', '7868', '14103', '3'), +('2', '61', '15', '51242', '27426', '3'), +('2', '61', '15', '63170', '22103', '3'), +('2', '61', '15', '23511', '16451', '3'), +('2', '61', '15', '28994', '15377', '3'), +('2', '61', '20', '28916', '16300', '3'), +('2', '61', '20', '26761', '15316', '3'), +('2', '61', '20', '30534', '13701', '3'), +('2', '61', '20', '26549', '13054', '3'), +('2', '61', '12', '30534', '13701', '3'), +('2', '61', '12', '28991', '13158', '3'), +('2', '61', '12', '31227', '12692', '3'), +('2', '61', '12', '28967', '12003', '3'), +('2', '61', '18', '26783', '40883', '3'), +('2', '61', '18', '26755', '15703', '3'), +('2', '61', '18', '28932', '12330', '3'), +('2', '61', '18', '8289', '12325', '3'), +('2', '61', '19', '30570', '15602', '3'), +('2', '61', '19', '29645', '13509', '3'), +('2', '61', '19', '31245', '12677', '3'), +('2', '61', '19', '7871', '12212', '3'), +('2', '61', '13', '14762', '21200', '3'), +('2', '61', '13', '26784', '16679', '3'), +('2', '61', '13', '28981', '15452', '3'), +('2', '61', '13', '26588', '14010', '3'), +('2', '61', '14', '28915', '32698', '3'), +('2', '61', '14', '14762', '21200', '3'), +('2', '61', '14', '61223', '18878', '3'), +('2', '61', '14', '26784', '16679', '3'), +('2', '61', '11', '2698', '24752', '3'), +('2', '61', '11', '14762', '21200', '3'), +('2', '61', '11', '31321', '17806', '3'), +('2', '61', '11', '26784', '16679', '3'), +('2', '62', '22', '66397', '0', '3'), +('2', '62', '22', '61948', '0', '3'), +('2', '62', '22', '21805', '0', '3'), +('2', '62', '22', '21807', '0', '3'), +('2', '62', '1', '63170', '21605', '3'), +('2', '62', '1', '30552', '18775', '3'), +('2', '62', '1', '28944', '13925', '3'), +('2', '62', '1', '29861', '12821', '3'), +('2', '62', '2', '26763', '30843', '3'), +('2', '62', '2', '26762', '13238', '3'), +('2', '62', '2', '28909', '12328', '3'), +('2', '62', '2', '1549', '12242', '3'), +('2', '62', '3', '26785', '34719', '3'), +('2', '62', '3', '26756', '32607', '3'), +('2', '62', '3', '28963', '27679', '3'), +('2', '62', '3', '31323', '24102', '3'), +('2', '62', '5', '28900', '37751', '3'), +('2', '62', '5', '51229', '23654', '3'), +('2', '62', '5', '28911', '22601', '3'), +('2', '62', '5', '8364', '17345', '3'), +('2', '62', '8', '51240', '34835', '3'), +('2', '62', '8', '1628', '29703', '3'), +('2', '62', '8', '30505', '19501', '3'), +('2', '62', '8', '28992', '16242', '3'), +('2', '62', '6', '1200', '29952', '3'), +('2', '62', '6', '28920', '14500', '3'), +('2', '62', '6', '30566', '14155', '3'), +('2', '62', '6', '28991', '13163', '3'), +('2', '62', '17', '26782', '17425', '3'), +('2', '62', '17', '7869', '17162', '3'), +('2', '62', '17', '31239', '13724', '3'), +('2', '62', '17', '10845', '13350', '3'), +('2', '62', '7', '28925', '15294', '3'), +('2', '62', '7', '7868', '14104', '3'), +('2', '62', '7', '28146', '13494', '3'), +('2', '62', '7', '26584', '13381', '3'), +('2', '62', '9', '26787', '25331', '3'), +('2', '62', '9', '30552', '18775', '3'), +('2', '62', '9', '28891', '17402', '3'), +('2', '62', '9', '7868', '14104', '3'), +('2', '62', '15', '51242', '26677', '3'), +('2', '62', '15', '63170', '21605', '3'), +('2', '62', '15', '23511', '15701', '3'), +('2', '62', '15', '28994', '15379', '3'), +('2', '62', '20', '28916', '16301', '3'), +('2', '62', '20', '26761', '15317', '3'), +('2', '62', '20', '30534', '13703', '3'), +('2', '62', '20', '26549', '13058', '3'), +('2', '62', '12', '30534', '13703', '3'), +('2', '62', '12', '28991', '13163', '3'), +('2', '62', '12', '31227', '12695', '3'), +('2', '62', '12', '28967', '12003', '3'), +('2', '62', '18', '26783', '39735', '3'), +('2', '62', '18', '26755', '15403', '3'), +('2', '62', '18', '28932', '12332', '3'), +('2', '62', '18', '8289', '12327', '3'), +('2', '62', '19', '30570', '15603', '3'), +('2', '62', '19', '29645', '13512', '3'), +('2', '62', '19', '31245', '12680', '3'), +('2', '62', '19', '7871', '12212', '3'), +('2', '62', '13', '14762', '20200', '3'), +('2', '62', '13', '26784', '16685', '3'), +('2', '62', '13', '28981', '15455', '3'), +('2', '62', '13', '26588', '14010', '3'), +('2', '62', '14', '28915', '31951', '3'), +('2', '62', '14', '14762', '20200', '3'), +('2', '62', '14', '61223', '18130', '3'), +('2', '62', '14', '26784', '16685', '3'), +('2', '62', '11', '2698', '24002', '3'), +('2', '62', '11', '14762', '20200', '3'), +('2', '62', '11', '31321', '17056', '3'), +('2', '62', '11', '26784', '16685', '3'), +('2', '63', '22', '66397', '0', '3'), +('2', '63', '22', '61948', '0', '3'), +('2', '63', '22', '21805', '0', '3'), +('2', '63', '22', '21807', '0', '3'), +('2', '63', '1', '63170', '21107', '3'), +('2', '63', '1', '30552', '18477', '3'), +('2', '63', '1', '28944', '13927', '3'), +('2', '63', '1', '29861', '12826', '3'), +('2', '63', '2', '26763', '30096', '3'), +('2', '63', '2', '26762', '13240', '3'), +('2', '63', '2', '28909', '12330', '3'), +('2', '63', '2', '1549', '12245', '3'), +('2', '63', '3', '26785', '33824', '3'), +('2', '63', '3', '26756', '31707', '3'), +('2', '63', '3', '28963', '26931', '3'), +('2', '63', '3', '31323', '23102', '3'), +('2', '63', '5', '28900', '36755', '3'), +('2', '63', '5', '51229', '23156', '3'), +('2', '63', '5', '28911', '22103', '3'), +('2', '63', '5', '8364', '17348', '3'), +('2', '63', '8', '51240', '33835', '3'), +('2', '63', '8', '1628', '28706', '3'), +('2', '63', '8', '30505', '18752', '3'), +('2', '63', '8', '28992', '16245', '3'), +('2', '63', '6', '1200', '28954', '3'), +('2', '63', '6', '28920', '14504', '3'), +('2', '63', '6', '30566', '14157', '3'), +('2', '63', '6', '28991', '13168', '3'), +('2', '63', '17', '26782', '17430', '3'), +('2', '63', '17', '7869', '17166', '3'), +('2', '63', '17', '31239', '13730', '3'), +('2', '63', '17', '10845', '13354', '3'), +('2', '63', '7', '28925', '15297', '3'), +('2', '63', '7', '7868', '14106', '3'), +('2', '63', '7', '28146', '13498', '3'), +('2', '63', '7', '26584', '13383', '3'), +('2', '63', '9', '26787', '24933', '3'), +('2', '63', '9', '30552', '18477', '3'), +('2', '63', '9', '28891', '17102', '3'), +('2', '63', '9', '7868', '14106', '3'), +('2', '63', '15', '51242', '25928', '3'), +('2', '63', '15', '63170', '21107', '3'), +('2', '63', '15', '28994', '15381', '3'), +('2', '63', '15', '23511', '14951', '3'), +('2', '63', '20', '28916', '16303', '3'), +('2', '63', '20', '26761', '15318', '3'), +('2', '63', '20', '30534', '13706', '3'), +('2', '63', '20', '26549', '13062', '3'), +('2', '63', '12', '30534', '13706', '3'), +('2', '63', '12', '28991', '13168', '3'), +('2', '63', '12', '31227', '12698', '3'), +('2', '63', '12', '28967', '12003', '3'), +('2', '63', '18', '26783', '38587', '3'), +('2', '63', '18', '26755', '15103', '3'), +('2', '63', '18', '28932', '12334', '3'), +('2', '63', '18', '8289', '12329', '3'), +('2', '63', '19', '30570', '15605', '3'), +('2', '63', '19', '29645', '13516', '3'), +('2', '63', '19', '31245', '12683', '3'), +('2', '63', '19', '7871', '12212', '3'), +('2', '63', '13', '14762', '19200', '3'), +('2', '63', '13', '26784', '16691', '3'), +('2', '63', '13', '28981', '15457', '3'), +('2', '63', '13', '26588', '14010', '3'), +('2', '63', '14', '28915', '31204', '3'), +('2', '63', '14', '14762', '19200', '3'), +('2', '63', '14', '61223', '17382', '3'), +('2', '63', '14', '26784', '16691', '3'), +('2', '63', '11', '2698', '23252', '3'), +('2', '63', '11', '14762', '19200', '3'), +('2', '63', '11', '26784', '16691', '3'), +('2', '63', '11', '31321', '16306', '3'), +('2', '64', '22', '66397', '0', '3'), +('2', '64', '22', '61948', '0', '3'), +('2', '64', '22', '21805', '0', '3'), +('2', '64', '22', '21807', '0', '3'), +('2', '64', '1', '63170', '20608', '3'), +('2', '64', '1', '30552', '18179', '3'), +('2', '64', '1', '28944', '13929', '3'), +('2', '64', '1', '29861', '12831', '3'), +('2', '64', '2', '26763', '29349', '3'), +('2', '64', '2', '26762', '13242', '3'), +('2', '64', '2', '28909', '12332', '3'), +('2', '64', '2', '1549', '12248', '3'), +('2', '64', '3', '26785', '32929', '3'), +('2', '64', '3', '26756', '30807', '3'), +('2', '64', '3', '28963', '26183', '3'), +('2', '64', '3', '31323', '22102', '3'), +('2', '64', '5', '28900', '35759', '3'), +('2', '64', '5', '51229', '22658', '3'), +('2', '64', '5', '28911', '21605', '3'), +('2', '64', '5', '8364', '17351', '3'), +('2', '64', '8', '51240', '32836', '3'), +('2', '64', '8', '1628', '27708', '3'), +('2', '64', '8', '30505', '18004', '3'), +('2', '64', '8', '28992', '16248', '3'), +('2', '64', '6', '1200', '27956', '3'), +('2', '64', '6', '28920', '14508', '3'), +('2', '64', '6', '30566', '14158', '3'), +('2', '64', '6', '28991', '13173', '3'), +('2', '64', '17', '26782', '17435', '3'), +('2', '64', '17', '7869', '17170', '3'), +('2', '64', '17', '31239', '13735', '3'), +('2', '64', '17', '10845', '13358', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '64', '7', '28925', '15300', '3'), +('2', '64', '7', '7868', '14108', '3'), +('2', '64', '7', '28146', '13501', '3'), +('2', '64', '7', '26584', '13385', '3'), +('2', '64', '9', '26787', '24535', '3'), +('2', '64', '9', '30552', '18179', '3'), +('2', '64', '9', '28891', '16802', '3'), +('2', '64', '9', '7868', '14108', '3'), +('2', '64', '15', '51242', '25179', '3'), +('2', '64', '15', '63170', '20608', '3'), +('2', '64', '15', '28994', '15383', '3'), +('2', '64', '15', '23511', '14201', '3'), +('2', '64', '20', '28916', '16304', '3'), +('2', '64', '20', '26761', '15319', '3'), +('2', '64', '20', '30534', '13708', '3'), +('2', '64', '20', '26549', '13066', '3'), +('2', '64', '12', '30534', '13708', '3'), +('2', '64', '12', '28991', '13173', '3'), +('2', '64', '12', '31227', '12702', '3'), +('2', '64', '12', '28967', '12003', '3'), +('2', '64', '18', '26783', '37439', '3'), +('2', '64', '18', '26755', '14803', '3'), +('2', '64', '18', '28932', '12337', '3'), +('2', '64', '18', '8289', '12331', '3'), +('2', '64', '19', '30570', '15607', '3'), +('2', '64', '19', '29645', '13519', '3'), +('2', '64', '19', '31245', '12686', '3'), +('2', '64', '19', '7871', '12213', '3'), +('2', '64', '13', '14762', '18200', '3'), +('2', '64', '13', '26784', '16697', '3'), +('2', '64', '13', '28981', '15460', '3'), +('2', '64', '13', '26588', '14010', '3'), +('2', '64', '14', '28915', '30457', '3'), +('2', '64', '14', '14762', '18200', '3'), +('2', '64', '14', '26784', '16697', '3'), +('2', '64', '14', '61223', '16634', '3'), +('2', '64', '11', '2698', '22502', '3'), +('2', '64', '11', '14762', '18200', '3'), +('2', '64', '11', '26784', '16697', '3'), +('2', '64', '11', '31321', '15556', '3'), +('2', '65', '22', '66397', '0', '7'), +('2', '65', '22', '61948', '0', '7'), +('2', '65', '22', '21805', '0', '7'), +('2', '65', '22', '21807', '0', '7'), +('2', '65', '1', '68949', '51136', '7'), +('2', '65', '1', '69166', '40345', '7'), +('2', '65', '1', '10242', '40267', '7'), +('2', '65', '1', '7130', '37984', '7'), +('2', '65', '2', '16158', '37368', '7'), +('2', '65', '2', '26763', '28603', '7'), +('2', '65', '2', '15929', '28461', '7'), +('2', '65', '2', '9496', '27858', '7'), +('2', '65', '3', '69068', '81635', '7'), +('2', '65', '3', '69132', '66029', '7'), +('2', '65', '3', '68651', '48779', '7'), +('2', '65', '3', '26984', '45535', '7'), +('2', '65', '5', '69097', '82184', '7'), +('2', '65', '5', '68950', '81868', '7'), +('2', '65', '5', '7769', '47163', '7'), +('2', '65', '5', '50414', '45506', '7'), +('2', '65', '8', '69064', '81033', '7'), +('2', '65', '8', '15823', '43090', '7'), +('2', '65', '8', '69164', '34535', '7'), +('2', '65', '8', '51240', '31836', '7'), +('2', '65', '6', '69066', '62405', '7'), +('2', '65', '6', '13647', '56834', '7'), +('2', '65', '6', '69073', '50429', '7'), +('2', '65', '6', '68841', '49968', '7'), +('2', '65', '17', '68962', '61942', '7'), +('2', '65', '17', '47646', '58257', '7'), +('2', '65', '17', '69150', '55243', '7'), +('2', '65', '17', '68748', '47577', '7'), +('2', '65', '7', '68856', '45775', '7'), +('2', '65', '7', '32012', '45370', '7'), +('2', '65', '7', '69079', '33458', '7'), +('2', '65', '7', '69168', '30774', '7'), +('2', '65', '9', '69126', '80964', '7'), +('2', '65', '9', '69100', '57133', '7'), +('2', '65', '9', '32100', '49890', '7'), +('2', '65', '9', '68603', '42774', '7'), +('2', '65', '15', '69160', '82711', '7'), +('2', '65', '15', '69070', '62018', '7'), +('2', '65', '15', '26993', '49789', '7'), +('2', '65', '15', '10234', '46753', '7'), +('2', '65', '20', '68951', '49036', '7'), +('2', '65', '20', '68821', '39247', '7'), +('2', '65', '20', '69386', '38954', '7'), +('2', '65', '20', '15871', '38738', '7'), +('2', '65', '12', '13563', '41643', '7'), +('2', '65', '12', '69083', '35432', '7'), +('2', '65', '12', '69252', '32447', '7'), +('2', '65', '12', '68189', '27500', '7'), +('2', '65', '18', '69146', '39800', '7'), +('2', '65', '18', '26783', '36292', '7'), +('2', '65', '18', '68963', '32076', '7'), +('2', '65', '18', '68189', '27500', '7'), +('2', '65', '19', '20074', '33020', '7'), +('2', '65', '19', '69177', '31989', '7'), +('2', '65', '19', '69075', '28327', '7'), +('2', '65', '19', '68189', '27500', '7'), +('2', '65', '13', '69098', '62850', '7'), +('2', '65', '13', '71241', '39703', '7'), +('2', '65', '13', '69159', '33353', '7'), +('2', '65', '13', '68444', '32249', '7'), +('2', '65', '14', '69155', '82831', '7'), +('2', '65', '14', '69098', '62850', '7'), +('2', '65', '14', '27280', '57050', '7'), +('2', '65', '14', '71241', '39703', '7'), +('2', '65', '11', '67606', '32121', '7'), +('2', '65', '11', '68116', '31533', '7'), +('2', '65', '11', '68952', '29970', '7'), +('2', '65', '11', '68848', '28703', '7'), +('2', '65', '22', '66397', '0', '6'), +('2', '65', '22', '61948', '0', '6'), +('2', '65', '22', '21805', '0', '6'), +('2', '65', '22', '21807', '0', '6'), +('2', '65', '1', '10242', '40267', '6'), +('2', '65', '1', '7130', '37984', '6'), +('2', '65', '1', '16257', '35537', '6'), +('2', '65', '1', '4139', '30782', '6'), +('2', '65', '2', '16158', '37368', '6'), +('2', '65', '2', '26763', '28603', '6'), +('2', '65', '2', '15929', '28461', '6'), +('2', '65', '2', '9496', '27858', '6'), +('2', '65', '3', '26984', '45535', '6'), +('2', '65', '3', '26985', '40233', '6'), +('2', '65', '3', '26982', '32946', '6'), +('2', '65', '3', '26785', '32034', '6'), +('2', '65', '5', '7769', '47163', '6'), +('2', '65', '5', '9289', '44395', '6'), +('2', '65', '5', '16158', '37368', '6'), +('2', '65', '5', '28900', '34763', '6'), +('2', '65', '8', '15823', '43090', '6'), +('2', '65', '8', '51240', '31836', '6'), +('2', '65', '8', '15804', '30652', '6'), +('2', '65', '8', '68189', '27500', '6'), +('2', '65', '6', '13647', '56834', '6'), +('2', '65', '6', '28660', '40967', '6'), +('2', '65', '6', '13644', '30011', '6'), +('2', '65', '6', '68189', '27500', '6'), +('2', '65', '17', '47646', '58257', '6'), +('2', '65', '17', '15002', '35141', '6'), +('2', '65', '17', '68189', '27500', '6'), +('2', '65', '17', '69403', '27406', '6'), +('2', '65', '7', '32012', '45370', '6'), +('2', '65', '7', '68189', '27500', '6'), +('2', '65', '7', '68052', '26400', '6'), +('2', '65', '7', '11499', '25433', '6'), +('2', '65', '9', '32100', '49890', '6'), +('2', '65', '9', '68189', '27500', '6'), +('2', '65', '9', '68052', '26400', '6'), +('2', '65', '9', '28668', '26001', '6'), +('2', '65', '15', '26993', '49789', '6'), +('2', '65', '15', '10234', '46753', '6'), +('2', '65', '15', '69382', '43903', '6'), +('2', '65', '15', '32109', '28384', '6'), +('2', '65', '20', '15871', '38738', '6'), +('2', '65', '20', '16158', '37368', '6'), +('2', '65', '20', '15929', '28461', '6'), +('2', '65', '20', '68189', '27500', '6'), +('2', '65', '12', '13563', '41643', '6'), +('2', '65', '12', '68189', '27500', '6'), +('2', '65', '12', '68052', '26400', '6'), +('2', '65', '12', '13557', '21995', '6'), +('2', '65', '18', '26783', '36292', '6'), +('2', '65', '18', '68189', '27500', '6'), +('2', '65', '18', '68052', '26400', '6'), +('2', '65', '18', '28650', '22150', '6'), +('2', '65', '19', '20074', '33020', '6'), +('2', '65', '19', '68189', '27500', '6'), +('2', '65', '19', '68052', '26400', '6'), +('2', '65', '19', '25995', '22416', '6'), +('2', '65', '13', '71241', '39703', '6'), +('2', '65', '13', '29033', '27755', '6'), +('2', '65', '13', '68052', '26400', '6'), +('2', '65', '13', '46192', '23517', '6'), +('2', '65', '14', '27280', '57050', '6'), +('2', '65', '14', '71241', '39703', '6'), +('2', '65', '14', '28915', '29710', '6'), +('2', '65', '14', '29033', '27755', '6'), +('2', '65', '11', '68116', '31533', '6'), +('2', '65', '11', '54039', '28069', '6'), +('2', '65', '11', '29033', '27755', '6'), +('2', '65', '11', '68189', '27500', '6'), +('2', '65', '22', '66397', '0', '5'), +('2', '65', '22', '61948', '0', '5'), +('2', '65', '22', '21805', '0', '5'), +('2', '65', '22', '21807', '0', '5'), +('2', '65', '1', '10242', '40267', '5'), +('2', '65', '1', '7130', '37984', '5'), +('2', '65', '1', '16257', '35537', '5'), +('2', '65', '1', '4139', '30782', '5'), +('2', '65', '2', '16158', '37368', '5'), +('2', '65', '2', '26763', '28603', '5'), +('2', '65', '2', '15929', '28461', '5'), +('2', '65', '2', '9496', '27858', '5'), +('2', '65', '3', '26984', '45535', '5'), +('2', '65', '3', '26985', '40233', '5'), +('2', '65', '3', '26982', '32946', '5'), +('2', '65', '3', '26785', '32034', '5'), +('2', '65', '5', '7769', '47163', '5'), +('2', '65', '5', '9289', '44395', '5'), +('2', '65', '5', '16158', '37368', '5'), +('2', '65', '5', '28900', '34763', '5'), +('2', '65', '8', '15823', '43090', '5'), +('2', '65', '8', '51240', '31836', '5'), +('2', '65', '8', '15804', '30652', '5'), +('2', '65', '8', '1628', '26710', '5'), +('2', '65', '6', '13647', '56834', '5'), +('2', '65', '6', '28660', '40967', '5'), +('2', '65', '6', '13644', '30011', '5'), +('2', '65', '6', '1200', '26957', '5'), +('2', '65', '17', '47646', '58257', '5'), +('2', '65', '17', '15002', '35141', '5'), +('2', '65', '17', '26782', '17440', '5'), +('2', '65', '17', '7869', '17174', '5'), +('2', '65', '7', '32012', '45370', '5'), +('2', '65', '7', '11499', '25433', '5'), +('2', '65', '7', '21995', '21070', '5'), +('2', '65', '7', '8781', '17417', '5'), +('2', '65', '9', '32100', '49890', '5'), +('2', '65', '9', '28668', '26001', '5'), +('2', '65', '9', '11103', '24587', '5'), +('2', '65', '9', '26787', '24137', '5'), +('2', '65', '15', '26993', '49789', '5'), +('2', '65', '15', '10234', '46753', '5'), +('2', '65', '15', '32109', '28384', '5'), +('2', '65', '15', '26989', '26571', '5'), +('2', '65', '20', '15871', '38738', '5'), +('2', '65', '20', '16158', '37368', '5'), +('2', '65', '20', '15929', '28461', '5'), +('2', '65', '20', '12510', '25385', '5'), +('2', '65', '12', '13563', '41643', '5'), +('2', '65', '12', '13557', '21995', '5'), +('2', '65', '12', '28246', '21968', '5'), +('2', '65', '12', '27000', '21813', '5'), +('2', '65', '18', '26783', '36292', '5'), +('2', '65', '18', '28650', '22150', '5'), +('2', '65', '18', '16797', '19010', '5'), +('2', '65', '18', '26755', '14503', '5'), +('2', '65', '19', '20074', '33020', '5'), +('2', '65', '19', '25995', '22416', '5'), +('2', '65', '19', '19094', '16213', '5'), +('2', '65', '19', '30570', '15608', '5'), +('2', '65', '13', '29033', '27755', '5'), +('2', '65', '13', '29037', '22665', '5'), +('2', '65', '13', '20627', '22522', '5'), +('2', '65', '13', '21886', '21548', '5'), +('2', '65', '14', '27280', '57050', '5'), +('2', '65', '14', '28915', '29710', '5'), +('2', '65', '14', '29033', '27755', '5'), +('2', '65', '14', '52059', '24545', '5'), +('2', '65', '11', '54039', '28069', '5'), +('2', '65', '11', '29033', '27755', '5'), +('2', '65', '11', '20496', '25871', '5'), +('2', '65', '11', '20604', '24905', '5'), +('2', '65', '22', '66397', '0', '4'), +('2', '65', '22', '61948', '0', '4'), +('2', '65', '22', '21805', '0', '4'), +('2', '65', '22', '21807', '0', '4'), +('2', '65', '1', '10242', '40267', '4'), +('2', '65', '1', '7130', '37984', '4'), +('2', '65', '1', '16257', '35537', '4'), +('2', '65', '1', '4139', '30782', '4'), +('2', '65', '2', '16158', '37368', '4'), +('2', '65', '2', '26763', '28603', '4'), +('2', '65', '2', '15929', '28461', '4'), +('2', '65', '2', '9496', '27858', '4'), +('2', '65', '3', '26984', '45535', '4'), +('2', '65', '3', '26985', '40233', '4'), +('2', '65', '3', '26982', '32946', '4'), +('2', '65', '3', '26785', '32034', '4'), +('2', '65', '5', '7769', '47163', '4'), +('2', '65', '5', '9289', '44395', '4'), +('2', '65', '5', '16158', '37368', '4'), +('2', '65', '5', '28900', '34763', '4'), +('2', '65', '8', '15823', '43090', '4'), +('2', '65', '8', '51240', '31836', '4'), +('2', '65', '8', '15804', '30652', '4'), +('2', '65', '8', '1628', '26710', '4'), +('2', '65', '6', '13647', '56834', '4'), +('2', '65', '6', '28660', '40967', '4'), +('2', '65', '6', '13644', '30011', '4'), +('2', '65', '6', '1200', '26957', '4'), +('2', '65', '17', '47646', '58257', '4'), +('2', '65', '17', '15002', '35141', '4'), +('2', '65', '17', '26782', '17440', '4'), +('2', '65', '17', '7869', '17174', '4'), +('2', '65', '7', '32012', '45370', '4'), +('2', '65', '7', '11499', '25433', '4'), +('2', '65', '7', '21995', '21070', '4'), +('2', '65', '7', '8781', '17417', '4'), +('2', '65', '9', '32100', '49890', '4'), +('2', '65', '9', '28668', '26001', '4'), +('2', '65', '9', '11103', '24587', '4'), +('2', '65', '9', '26787', '24137', '4'), +('2', '65', '15', '26993', '49789', '4'), +('2', '65', '15', '10234', '46753', '4'), +('2', '65', '15', '32109', '28384', '4'), +('2', '65', '15', '26989', '26571', '4'), +('2', '65', '20', '15871', '38738', '4'), +('2', '65', '20', '16158', '37368', '4'), +('2', '65', '20', '15929', '28461', '4'), +('2', '65', '20', '12510', '25385', '4'), +('2', '65', '12', '13563', '41643', '4'), +('2', '65', '12', '13557', '21995', '4'), +('2', '65', '12', '28246', '21968', '4'), +('2', '65', '12', '27000', '21813', '4'), +('2', '65', '18', '26783', '36292', '4'), +('2', '65', '18', '28650', '22150', '4'), +('2', '65', '18', '16797', '19010', '4'), +('2', '65', '18', '26755', '14503', '4'), +('2', '65', '19', '20074', '33020', '4'), +('2', '65', '19', '25995', '22416', '4'), +('2', '65', '19', '19094', '16213', '4'), +('2', '65', '19', '30570', '15608', '4'), +('2', '65', '13', '29033', '27755', '4'), +('2', '65', '13', '29037', '22665', '4'), +('2', '65', '13', '20627', '22522', '4'), +('2', '65', '13', '21886', '21548', '4'), +('2', '65', '14', '27280', '57050', '4'), +('2', '65', '14', '28915', '29710', '4'), +('2', '65', '14', '29033', '27755', '4'), +('2', '65', '14', '29037', '22665', '4'), +('2', '65', '11', '29033', '27755', '4'), +('2', '65', '11', '20496', '25871', '4'), +('2', '65', '11', '20604', '24905', '4'), +('2', '65', '11', '26987', '23649', '4'), +('2', '66', '22', '66397', '0', '7'), +('2', '66', '22', '61948', '0', '7'), +('2', '66', '22', '21805', '0', '7'), +('2', '66', '22', '21807', '0', '7'), +('2', '66', '1', '68949', '50141', '7'), +('2', '66', '1', '69166', '40048', '7'), +('2', '66', '1', '10242', '39271', '7'), +('2', '66', '1', '7130', '37489', '7'), +('2', '66', '2', '16158', '36472', '7'), +('2', '66', '2', '26763', '27856', '7'), +('2', '66', '2', '15929', '27713', '7'), +('2', '66', '2', '69087', '27481', '7'), +('2', '66', '3', '69068', '79390', '7'), +('2', '66', '3', '69132', '64784', '7'), +('2', '66', '3', '68651', '47532', '7'), +('2', '66', '3', '26984', '44540', '7'), +('2', '66', '5', '69097', '79940', '7'), +('2', '66', '5', '68950', '79622', '7'), +('2', '66', '5', '7769', '46167', '7'), +('2', '66', '5', '50414', '44259', '7'), +('2', '66', '8', '69064', '79039', '7'), +('2', '66', '8', '15823', '41844', '7'), +('2', '66', '8', '69164', '34540', '7'), +('2', '66', '8', '51240', '30836', '7'), +('2', '66', '6', '69066', '61158', '7'), +('2', '66', '6', '13647', '55339', '7'), +('2', '66', '6', '69073', '49534', '7'), +('2', '66', '6', '68841', '48973', '7'), +('2', '66', '17', '68962', '60447', '7'), +('2', '66', '17', '47646', '56764', '7'), +('2', '66', '17', '69150', '54348', '7'), +('2', '66', '17', '68748', '46581', '7'), +('2', '66', '7', '68856', '44880', '7'), +('2', '66', '7', '32012', '44124', '7'), +('2', '66', '7', '69079', '33161', '7'), +('2', '66', '7', '69168', '30778', '7'), +('2', '66', '9', '69126', '78964', '7'), +('2', '66', '9', '69100', '55988', '7'), +('2', '66', '9', '32100', '48743', '7'), +('2', '66', '9', '68603', '41526', '7'), +('2', '66', '15', '69160', '80711', '7'), +('2', '66', '15', '69070', '60772', '7'), +('2', '66', '15', '26993', '48544', '7'), +('2', '66', '15', '10234', '45506', '7'), +('2', '66', '20', '68951', '48141', '7'), +('2', '66', '20', '68821', '38250', '7'), +('2', '66', '20', '69386', '37957', '7'), +('2', '66', '20', '15871', '37743', '7'), +('2', '66', '12', '13563', '40396', '7'), +('2', '66', '12', '69083', '35137', '7'), +('2', '66', '12', '69252', '32451', '7'), +('2', '66', '12', '68857', '26398', '7'), +('2', '66', '18', '69146', '39556', '7'), +('2', '66', '18', '26783', '35144', '7'), +('2', '66', '18', '68963', '31780', '7'), +('2', '66', '18', '68189', '26250', '7'), +('2', '66', '19', '20074', '32274', '7'), +('2', '66', '19', '69177', '31994', '7'), +('2', '66', '19', '69075', '28331', '7'), +('2', '66', '19', '68189', '26250', '7'), +('2', '66', '13', '69098', '61356', '7'), +('2', '66', '13', '71241', '38455', '7'), +('2', '66', '13', '69159', '33359', '7'), +('2', '66', '13', '68444', '31252', '7'), +('2', '66', '14', '69155', '80831', '7'), +('2', '66', '14', '69098', '61356', '7'), +('2', '66', '14', '27280', '55555', '7'), +('2', '66', '14', '71241', '38455', '7'), +('2', '66', '11', '67606', '32125', '7'), +('2', '66', '11', '68116', '30786', '7'), +('2', '66', '11', '68952', '29974', '7'), +('2', '66', '11', '68848', '28707', '7'), +('2', '67', '22', '66397', '0', '7'), +('2', '67', '22', '61948', '0', '7'), +('2', '67', '22', '21805', '0', '7'), +('2', '67', '22', '21807', '0', '7'), +('2', '67', '1', '68949', '49146', '7'), +('2', '67', '1', '69166', '39752', '7'), +('2', '67', '1', '10242', '38275', '7'), +('2', '67', '1', '7130', '36994', '7'), +('2', '67', '2', '16158', '35576', '7'), +('2', '67', '2', '69087', '27485', '7'), +('2', '67', '2', '26763', '27109', '7'), +('2', '67', '2', '15929', '26966', '7'), +('2', '67', '3', '69068', '77146', '7'), +('2', '67', '3', '69132', '63539', '7'), +('2', '67', '3', '68651', '46286', '7'), +('2', '67', '3', '26984', '43545', '7'), +('2', '67', '5', '69097', '77695', '7'), +('2', '67', '5', '68950', '77376', '7'), +('2', '67', '5', '7769', '45171', '7'), +('2', '67', '5', '50414', '43012', '7'), +('2', '67', '8', '69064', '77044', '7'), +('2', '67', '8', '15823', '40597', '7'), +('2', '67', '8', '69164', '34546', '7'), +('2', '67', '8', '69072', '30228', '7'), +('2', '67', '6', '69066', '59911', '7'), +('2', '67', '6', '13647', '53844', '7'), +('2', '67', '6', '69073', '48639', '7'), +('2', '67', '6', '68841', '47977', '7'), +('2', '67', '17', '68962', '58952', '7'), +('2', '67', '17', '47646', '55270', '7'), +('2', '67', '17', '69150', '53453', '7'), +('2', '67', '17', '68748', '45585', '7'), +('2', '67', '7', '68856', '43984', '7'), +('2', '67', '7', '32012', '42878', '7'), +('2', '67', '7', '69079', '32864', '7'), +('2', '67', '7', '69168', '30782', '7'), +('2', '67', '9', '69126', '76964', '7'), +('2', '67', '9', '69100', '54843', '7'), +('2', '67', '9', '32100', '47597', '7'), +('2', '67', '9', '68603', '40277', '7'), +('2', '67', '15', '69160', '78711', '7'), +('2', '67', '15', '69070', '59526', '7'), +('2', '67', '15', '26993', '47298', '7'), +('2', '67', '15', '10234', '44259', '7'), +('2', '67', '20', '68951', '47246', '7'), +('2', '67', '20', '68821', '37253', '7'), +('2', '67', '20', '69386', '36960', '7'), +('2', '67', '20', '15871', '36747', '7'), +('2', '67', '12', '13563', '39150', '7'), +('2', '67', '12', '69083', '34842', '7'), +('2', '67', '12', '69252', '32455', '7'), +('2', '67', '12', '68857', '26351', '7'), +('2', '67', '18', '69146', '39312', '7'), +('2', '67', '18', '26783', '33996', '7'), +('2', '67', '18', '68963', '31484', '7'), +('2', '67', '18', '68189', '25000', '7'), +('2', '67', '19', '69177', '31999', '7'), +('2', '67', '19', '20074', '31528', '7'), +('2', '67', '19', '69075', '28336', '7'), +('2', '67', '19', '68858', '25431', '7'), +('2', '67', '13', '69098', '59862', '7'), +('2', '67', '13', '71241', '37207', '7'), +('2', '67', '13', '69159', '33365', '7'), +('2', '67', '13', '69111', '31150', '7'), +('2', '67', '14', '69155', '78832', '7'), +('2', '67', '14', '69098', '59862', '7'), +('2', '67', '14', '27280', '54060', '7'), +('2', '67', '14', '71241', '37207', '7'), +('2', '67', '11', '67606', '32129', '7'), +('2', '67', '11', '68116', '30039', '7'), +('2', '67', '11', '68952', '29978', '7'), +('2', '67', '11', '68848', '28710', '7'), +('2', '68', '22', '66397', '0', '7'), +('2', '68', '22', '61948', '0', '7'), +('2', '68', '22', '21805', '0', '7'), +('2', '68', '22', '21807', '0', '7'), +('2', '68', '1', '68949', '48152', '7'), +('2', '68', '1', '69166', '39456', '7'), +('2', '68', '1', '10242', '37280', '7'), +('2', '68', '1', '7130', '36499', '7'), +('2', '68', '2', '16158', '34680', '7'), +('2', '68', '2', '69087', '27489', '7'), +('2', '68', '2', '26763', '26362', '7'), +('2', '68', '2', '15929', '26218', '7'), +('2', '68', '3', '69068', '74901', '7'), +('2', '68', '3', '69132', '62294', '7'), +('2', '68', '3', '68651', '45039', '7'), +('2', '68', '3', '26984', '42550', '7'), +('2', '68', '5', '69097', '75450', '7'), +('2', '68', '5', '68950', '75130', '7'), +('2', '68', '5', '7769', '44175', '7'), +('2', '68', '5', '50414', '41766', '7'), +('2', '68', '8', '69064', '75049', '7'), +('2', '68', '8', '15823', '39351', '7'), +('2', '68', '8', '69164', '34551', '7'), +('2', '68', '8', '69072', '30232', '7'), +('2', '68', '6', '69066', '58664', '7'), +('2', '68', '6', '13647', '52350', '7'), +('2', '68', '6', '69073', '47744', '7'), +('2', '68', '6', '68841', '46981', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '68', '17', '68962', '57457', '7'), +('2', '68', '17', '47646', '53776', '7'), +('2', '68', '17', '69150', '52558', '7'), +('2', '68', '17', '68748', '44590', '7'), +('2', '68', '7', '68856', '43088', '7'), +('2', '68', '7', '32012', '41632', '7'), +('2', '68', '7', '69079', '32567', '7'), +('2', '68', '7', '69168', '30786', '7'), +('2', '68', '9', '69126', '74964', '7'), +('2', '68', '9', '69100', '53698', '7'), +('2', '68', '9', '32100', '46451', '7'), +('2', '68', '9', '68603', '39028', '7'), +('2', '68', '15', '69160', '76711', '7'), +('2', '68', '15', '69070', '58280', '7'), +('2', '68', '15', '26993', '46052', '7'), +('2', '68', '15', '10234', '43012', '7'), +('2', '68', '20', '68951', '46351', '7'), +('2', '68', '20', '68821', '36256', '7'), +('2', '68', '20', '69386', '35963', '7'), +('2', '68', '20', '15871', '35751', '7'), +('2', '68', '12', '13563', '37903', '7'), +('2', '68', '12', '69083', '34547', '7'), +('2', '68', '12', '69252', '32459', '7'), +('2', '68', '12', '68857', '26305', '7'), +('2', '68', '18', '69146', '39068', '7'), +('2', '68', '18', '26783', '32848', '7'), +('2', '68', '18', '68963', '31188', '7'), +('2', '68', '18', '68189', '23750', '7'), +('2', '68', '19', '69177', '32005', '7'), +('2', '68', '19', '20074', '30783', '7'), +('2', '68', '19', '69075', '28340', '7'), +('2', '68', '19', '68858', '25435', '7'), +('2', '68', '13', '69098', '58368', '7'), +('2', '68', '13', '71241', '35959', '7'), +('2', '68', '13', '69159', '33371', '7'), +('2', '68', '13', '69111', '31155', '7'), +('2', '68', '14', '69155', '76832', '7'), +('2', '68', '14', '69098', '58368', '7'), +('2', '68', '14', '27280', '52565', '7'), +('2', '68', '14', '71241', '35959', '7'), +('2', '68', '11', '67606', '32133', '7'), +('2', '68', '11', '68952', '29982', '7'), +('2', '68', '11', '68116', '29293', '7'), +('2', '68', '11', '68848', '28713', '7'), +('2', '69', '22', '66397', '0', '7'), +('2', '69', '22', '61948', '0', '7'), +('2', '69', '22', '21805', '0', '7'), +('2', '69', '22', '21807', '0', '7'), +('2', '69', '1', '68949', '47157', '7'), +('2', '69', '1', '69166', '39160', '7'), +('2', '69', '1', '10242', '36284', '7'), +('2', '69', '1', '7130', '36005', '7'), +('2', '69', '2', '16158', '33784', '7'), +('2', '69', '2', '69087', '27494', '7'), +('2', '69', '2', '26763', '25615', '7'), +('2', '69', '2', '15929', '25470', '7'), +('2', '69', '3', '69068', '72656', '7'), +('2', '69', '3', '69132', '61049', '7'), +('2', '69', '3', '68651', '43793', '7'), +('2', '69', '3', '26984', '41555', '7'), +('2', '69', '5', '69097', '73205', '7'), +('2', '69', '5', '68950', '72884', '7'), +('2', '69', '5', '7769', '43179', '7'), +('2', '69', '5', '50414', '40519', '7'), +('2', '69', '8', '69064', '73054', '7'), +('2', '69', '8', '15823', '38104', '7'), +('2', '69', '8', '69164', '34556', '7'), +('2', '69', '8', '69072', '30237', '7'), +('2', '69', '6', '69066', '57417', '7'), +('2', '69', '6', '13647', '50855', '7'), +('2', '69', '6', '69073', '46849', '7'), +('2', '69', '6', '68841', '45985', '7'), +('2', '69', '17', '68962', '55962', '7'), +('2', '69', '17', '47646', '52282', '7'), +('2', '69', '17', '69150', '51663', '7'), +('2', '69', '17', '68748', '43594', '7'), +('2', '69', '7', '68856', '42192', '7'), +('2', '69', '7', '32012', '40386', '7'), +('2', '69', '7', '69079', '32270', '7'), +('2', '69', '7', '69168', '30791', '7'), +('2', '69', '9', '69126', '72964', '7'), +('2', '69', '9', '69100', '52553', '7'), +('2', '69', '9', '32100', '45304', '7'), +('2', '69', '9', '68603', '37779', '7'), +('2', '69', '15', '69160', '74711', '7'), +('2', '69', '15', '69070', '57034', '7'), +('2', '69', '15', '26993', '44807', '7'), +('2', '69', '15', '10234', '41765', '7'), +('2', '69', '20', '68951', '45456', '7'), +('2', '69', '20', '68821', '35259', '7'), +('2', '69', '20', '67625', '35255', '7'), +('2', '69', '20', '69386', '34966', '7'), +('2', '69', '12', '13563', '36657', '7'), +('2', '69', '12', '69083', '34252', '7'), +('2', '69', '12', '69252', '32462', '7'), +('2', '69', '12', '68857', '26259', '7'), +('2', '69', '18', '69146', '38824', '7'), +('2', '69', '18', '26783', '31700', '7'), +('2', '69', '18', '68963', '30893', '7'), +('2', '69', '18', '68779', '23473', '7'), +('2', '69', '19', '69177', '32010', '7'), +('2', '69', '19', '20074', '30037', '7'), +('2', '69', '19', '69075', '28344', '7'), +('2', '69', '19', '68858', '25439', '7'), +('2', '69', '13', '69098', '56874', '7'), +('2', '69', '13', '71241', '34711', '7'), +('2', '69', '13', '69159', '33377', '7'), +('2', '69', '13', '69111', '31160', '7'), +('2', '69', '14', '69155', '74832', '7'), +('2', '69', '14', '69098', '56874', '7'), +('2', '69', '14', '27280', '51070', '7'), +('2', '69', '14', '71241', '34711', '7'), +('2', '69', '11', '67606', '32137', '7'), +('2', '69', '11', '68952', '29986', '7'), +('2', '69', '11', '68848', '28716', '7'), +('2', '69', '11', '68116', '28546', '7'), +('2', '70', '22', '21805', '0', '11'), +('2', '70', '22', '61948', '0', '11'), +('2', '70', '22', '21807', '0', '11'), +('2', '70', '22', '12425', '0', '11'), +('2', '70', '1', '39329', '108055', '11'), +('2', '70', '1', '71668', '59390', '11'), +('2', '70', '1', '83662', '52524', '11'), +('2', '70', '1', '83630', '48944', '11'), +('2', '70', '2', '83560', '39392', '11'), +('2', '70', '2', '70860', '38289', '11'), +('2', '70', '2', '39222', '37047', '11'), +('2', '70', '2', '83494', '33697', '11'), +('2', '70', '3', '69068', '70411', '11'), +('2', '70', '3', '70620', '62793', '11'), +('2', '70', '3', '69132', '59804', '11'), +('2', '70', '3', '39368', '50802', '11'), +('2', '70', '5', '69097', '70960', '11'), +('2', '70', '5', '68950', '70638', '11'), +('2', '70', '5', '70705', '62814', '11'), +('2', '70', '5', '39366', '50354', '11'), +('2', '70', '8', '39293', '108213', '11'), +('2', '70', '8', '83532', '73659', '11'), +('2', '70', '8', '69064', '71059', '11'), +('2', '70', '8', '83659', '66515', '11'), +('2', '70', '6', '71666', '90091', '11'), +('2', '70', '6', '83660', '82266', '11'), +('2', '70', '6', '39269', '80412', '11'), +('2', '70', '6', '47280', '68327', '11'), +('2', '70', '17', '70701', '73524', '11'), +('2', '70', '17', '83603', '67727', '11'), +('2', '70', '17', '68962', '54467', '11'), +('2', '70', '17', '47646', '50788', '11'), +('2', '70', '7', '39267', '41415', '11'), +('2', '70', '7', '68856', '41296', '11'), +('2', '70', '7', '83564', '40942', '11'), +('2', '70', '7', '32012', '39140', '11'), +('2', '70', '9', '51706', '110276', '11'), +('2', '70', '9', '39216', '74595', '11'), +('2', '70', '9', '69126', '70965', '11'), +('2', '70', '9', '69100', '51409', '11'), +('2', '70', '15', '83629', '107381', '11'), +('2', '70', '15', '69160', '72711', '11'), +('2', '70', '15', '47238', '69305', '11'), +('2', '70', '15', '39277', '61678', '11'), +('2', '70', '20', '47282', '57488', '11'), +('2', '70', '20', '83600', '48882', '11'), +('2', '70', '20', '39350', '46313', '11'), +('2', '70', '20', '39360', '45254', '11'), +('2', '70', '12', '83568', '41843', '11'), +('2', '70', '12', '70863', '37638', '11'), +('2', '70', '12', '13563', '35411', '11'), +('2', '70', '12', '83540', '34797', '11'), +('2', '70', '18', '83607', '111023', '11'), +('2', '70', '18', '70866', '85621', '11'), +('2', '70', '18', '39894', '58903', '11'), +('2', '70', '18', '69146', '38580', '11'), +('2', '70', '19', '83572', '78743', '11'), +('2', '70', '19', '70864', '67617', '11'), +('2', '70', '19', '71076', '56006', '11'), +('2', '70', '19', '47216', '51248', '11'), +('2', '70', '13', '83631', '79691', '11'), +('2', '70', '13', '83460', '64457', '11'), +('2', '70', '13', '39211', '59760', '11'), +('2', '70', '13', '69098', '55380', '11'), +('2', '70', '14', '69155', '72832', '11'), +('2', '70', '14', '83460', '64457', '11'), +('2', '70', '14', '39211', '59760', '11'), +('2', '70', '14', '69098', '55380', '11'), +('2', '70', '11', '39287', '108333', '11'), +('2', '70', '11', '39371', '50096', '11'), +('2', '70', '11', '39281', '49678', '11'), +('2', '70', '11', '83665', '45468', '11'), +('2', '70', '22', '61948', '0', '10'), +('2', '70', '22', '66397', '0', '10'), +('2', '70', '22', '21805', '0', '10'), +('2', '70', '22', '21807', '0', '10'), +('2', '70', '1', '71668', '59390', '10'), +('2', '70', '1', '83662', '52524', '10'), +('2', '70', '1', '83630', '48944', '10'), +('2', '70', '1', '68949', '46162', '10'), +('2', '70', '2', '83560', '39392', '10'), +('2', '70', '2', '70860', '38289', '10'), +('2', '70', '2', '83494', '33697', '10'), +('2', '70', '2', '16158', '32889', '10'), +('2', '70', '3', '69068', '70411', '10'), +('2', '70', '3', '70620', '62793', '10'), +('2', '70', '3', '69132', '59804', '10'), +('2', '70', '3', '83636', '49415', '10'), +('2', '70', '5', '69097', '70960', '10'), +('2', '70', '5', '68950', '70638', '10'), +('2', '70', '5', '70705', '62814', '10'), +('2', '70', '5', '83612', '42281', '10'), +('2', '70', '8', '83532', '73659', '10'), +('2', '70', '8', '69064', '71059', '10'), +('2', '70', '8', '83659', '66515', '10'), +('2', '70', '8', '71656', '56297', '10'), +('2', '70', '6', '71666', '90091', '10'), +('2', '70', '6', '83660', '82266', '10'), +('2', '70', '6', '47280', '68327', '10'), +('2', '70', '6', '47229', '58517', '10'), +('2', '70', '17', '70701', '73524', '10'), +('2', '70', '17', '83603', '67727', '10'), +('2', '70', '17', '68962', '54467', '10'), +('2', '70', '17', '47646', '50788', '10'), +('2', '70', '7', '68856', '41296', '10'), +('2', '70', '7', '83564', '40942', '10'), +('2', '70', '7', '32012', '39140', '10'), +('2', '70', '7', '70861', '37652', '10'), +('2', '70', '9', '69126', '70965', '10'), +('2', '70', '9', '69100', '51409', '10'), +('2', '70', '9', '32100', '44158', '10'), +('2', '70', '9', '83652', '43846', '10'), +('2', '70', '15', '83629', '107381', '10'), +('2', '70', '15', '69160', '72711', '10'), +('2', '70', '15', '47238', '69305', '10'), +('2', '70', '15', '47291', '56384', '10'), +('2', '70', '20', '47282', '57488', '10'), +('2', '70', '20', '83600', '48882', '10'), +('2', '70', '20', '68951', '44561', '10'), +('2', '70', '20', '83650', '42163', '10'), +('2', '70', '12', '83568', '41843', '10'), +('2', '70', '12', '70863', '37638', '10'), +('2', '70', '12', '13563', '35411', '10'), +('2', '70', '12', '83540', '34797', '10'), +('2', '70', '18', '83607', '111023', '10'), +('2', '70', '18', '70866', '85621', '10'), +('2', '70', '18', '69146', '38580', '10'), +('2', '70', '18', '47200', '32817', '10'), +('2', '70', '19', '83572', '78743', '10'), +('2', '70', '19', '70864', '67617', '10'), +('2', '70', '19', '71076', '56006', '10'), +('2', '70', '19', '47216', '51248', '10'), +('2', '70', '13', '83631', '79691', '10'), +('2', '70', '13', '83460', '64457', '10'), +('2', '70', '13', '69098', '55380', '10'), +('2', '70', '13', '83508', '54490', '10'), +('2', '70', '14', '69155', '72832', '10'), +('2', '70', '14', '83460', '64457', '10'), +('2', '70', '14', '69098', '55380', '10'), +('2', '70', '14', '83508', '54490', '10'), +('2', '70', '11', '83665', '45468', '10'), +('2', '70', '11', '83657', '42918', '10'), +('2', '70', '11', '83642', '42145', '10'), +('2', '70', '11', '47298', '37058', '10'), +('2', '70', '22', '66397', '0', '9'), +('2', '70', '22', '61948', '0', '9'), +('2', '70', '22', '21805', '0', '9'), +('2', '70', '22', '21807', '0', '9'), +('2', '70', '1', '71668', '59390', '9'), +('2', '70', '1', '68949', '46162', '9'), +('2', '70', '1', '47289', '41973', '9'), +('2', '70', '1', '47235', '39707', '9'), +('2', '70', '2', '70860', '38289', '9'), +('2', '70', '2', '16158', '32889', '9'), +('2', '70', '2', '47208', '32348', '9'), +('2', '70', '2', '69087', '27498', '9'), +('2', '70', '3', '69068', '70411', '9'), +('2', '70', '3', '70620', '62793', '9'), +('2', '70', '3', '69132', '59804', '9'), +('2', '70', '3', '71626', '46364', '9'), +('2', '70', '5', '69097', '70960', '9'), +('2', '70', '5', '68950', '70638', '9'), +('2', '70', '5', '70705', '62814', '9'), +('2', '70', '5', '7769', '42183', '9'), +('2', '70', '8', '69064', '71059', '9'), +('2', '70', '8', '71656', '56297', '9'), +('2', '70', '8', '71665', '40591', '9'), +('2', '70', '8', '47306', '38997', '9'), +('2', '70', '6', '71666', '90091', '9'), +('2', '70', '6', '47280', '68327', '9'), +('2', '70', '6', '47229', '58517', '9'), +('2', '70', '6', '69066', '56171', '9'), +('2', '70', '17', '70701', '73524', '9'), +('2', '70', '17', '68962', '54467', '9'), +('2', '70', '17', '47646', '50788', '9'), +('2', '70', '17', '69150', '50768', '9'), +('2', '70', '7', '68856', '41296', '9'), +('2', '70', '7', '32012', '39140', '9'), +('2', '70', '7', '70861', '37652', '9'), +('2', '70', '7', '47204', '32223', '9'), +('2', '70', '9', '69126', '70965', '9'), +('2', '70', '9', '69100', '51409', '9'), +('2', '70', '9', '32100', '44158', '9'), +('2', '70', '9', '70862', '36740', '9'), +('2', '70', '15', '69160', '72711', '9'), +('2', '70', '15', '47238', '69305', '9'), +('2', '70', '15', '47291', '56384', '9'), +('2', '70', '15', '69070', '55788', '9'), +('2', '70', '20', '47282', '57488', '9'), +('2', '70', '20', '68951', '44561', '9'), +('2', '70', '20', '47284', '37519', '9'), +('2', '70', '20', '47281', '37010', '9'), +('2', '70', '12', '70863', '37638', '9'), +('2', '70', '12', '13563', '35411', '9'), +('2', '70', '12', '69083', '33957', '9'), +('2', '70', '12', '47212', '33215', '9'), +('2', '70', '18', '70866', '85621', '9'), +('2', '70', '18', '69146', '38580', '9'), +('2', '70', '18', '47200', '32817', '9'), +('2', '70', '18', '71646', '31654', '9'), +('2', '70', '19', '70864', '67617', '9'), +('2', '70', '19', '71076', '56006', '9'), +('2', '70', '19', '47216', '51248', '9'), +('2', '70', '19', '69177', '32015', '9'), +('2', '70', '13', '69098', '55380', '9'), +('2', '70', '13', '71610', '43370', '9'), +('2', '70', '13', '71671', '40490', '9'), +('2', '70', '13', '47308', '38231', '9'), +('2', '70', '14', '69155', '72832', '9'), +('2', '70', '14', '69098', '55380', '9'), +('2', '70', '14', '39315', '50763', '9'), +('2', '70', '14', '27280', '49575', '9'), +('2', '70', '11', '47298', '37058', '9'), +('2', '70', '11', '71659', '35655', '9'), +('2', '70', '11', '47296', '35300', '9'), +('2', '70', '11', '47241', '34902', '9'), +('2', '70', '22', '66397', '0', '8'), +('2', '70', '22', '61948', '0', '8'), +('2', '70', '22', '21805', '0', '8'), +('2', '70', '22', '21807', '0', '8'), +('2', '70', '1', '68949', '46162', '8'), +('2', '70', '1', '47289', '41973', '8'), +('2', '70', '1', '47235', '39707', '8'), +('2', '70', '1', '47288', '39670', '8'), +('2', '70', '2', '70860', '38289', '8'), +('2', '70', '2', '16158', '32889', '8'), +('2', '70', '2', '47208', '32348', '8'), +('2', '70', '2', '69087', '27498', '8'), +('2', '70', '3', '69068', '70411', '8'), +('2', '70', '3', '70620', '62793', '8'), +('2', '70', '3', '69132', '59804', '8'), +('2', '70', '3', '68651', '42546', '8'), +('2', '70', '5', '69097', '70960', '8'), +('2', '70', '5', '68950', '70638', '8'), +('2', '70', '5', '70705', '62814', '8'), +('2', '70', '5', '7769', '42183', '8'), +('2', '70', '8', '69064', '71059', '8'), +('2', '70', '8', '47306', '38997', '8'), +('2', '70', '8', '15823', '36858', '8'), +('2', '70', '8', '47304', '34954', '8'), +('2', '70', '6', '47280', '68327', '8'), +('2', '70', '6', '47229', '58517', '8'), +('2', '70', '6', '69066', '56171', '8'), +('2', '70', '6', '13647', '49360', '8'), +('2', '70', '17', '70701', '73524', '8'), +('2', '70', '17', '68962', '54467', '8'), +('2', '70', '17', '47646', '50788', '8'), +('2', '70', '17', '69150', '50768', '8'), +('2', '70', '7', '68856', '41296', '8'), +('2', '70', '7', '32012', '39140', '8'), +('2', '70', '7', '70861', '37652', '8'), +('2', '70', '7', '47204', '32223', '8'), +('2', '70', '9', '69126', '70965', '8'), +('2', '70', '9', '69100', '51409', '8'), +('2', '70', '9', '32100', '44158', '8'), +('2', '70', '9', '70862', '36740', '8'), +('2', '70', '15', '69160', '72711', '8'), +('2', '70', '15', '47238', '69305', '8'), +('2', '70', '15', '47291', '56384', '8'), +('2', '70', '15', '69070', '55788', '8'), +('2', '70', '20', '47282', '57488', '8'), +('2', '70', '20', '68951', '44561', '8'), +('2', '70', '20', '47284', '37519', '8'), +('2', '70', '20', '47281', '37010', '8'), +('2', '70', '12', '70863', '37638', '8'), +('2', '70', '12', '13563', '35411', '8'), +('2', '70', '12', '69083', '33957', '8'), +('2', '70', '12', '47212', '33215', '8'), +('2', '70', '18', '70866', '85621', '8'), +('2', '70', '18', '69146', '38580', '8'), +('2', '70', '18', '47200', '32817', '8'), +('2', '70', '18', '68963', '30597', '8'), +('2', '70', '19', '70864', '67617', '8'), +('2', '70', '19', '71076', '56006', '8'), +('2', '70', '19', '47216', '51248', '8'), +('2', '70', '19', '69177', '32015', '8'), +('2', '70', '13', '69098', '55380', '8'), +('2', '70', '13', '47308', '38231', '8'), +('2', '70', '13', '47307', '36862', '8'), +('2', '70', '13', '47250', '34952', '8'), +('2', '70', '14', '69155', '72832', '8'), +('2', '70', '14', '69098', '55380', '8'), +('2', '70', '14', '39315', '50763', '8'), +('2', '70', '14', '27280', '49575', '8'), +('2', '70', '11', '47298', '37058', '8'), +('2', '70', '11', '47296', '35300', '8'), +('2', '70', '11', '47241', '34902', '8'), +('2', '70', '11', '70706', '33841', '8'), +('2', '71', '22', '21805', '0', '11'), +('2', '71', '22', '61948', '0', '11'), +('2', '71', '22', '21807', '0', '11'), +('2', '71', '22', '12425', '0', '11'), +('2', '71', '1', '39329', '105060', '11'), +('2', '71', '1', '71668', '58396', '11'), +('2', '71', '1', '83662', '52180', '11'), +('2', '71', '1', '83630', '48598', '11'), +('2', '71', '2', '83560', '39399', '11'), +('2', '71', '2', '70860', '38295', '11'), +('2', '71', '2', '39222', '37051', '11'), +('2', '71', '2', '83494', '33701', '11'), +('2', '71', '3', '69068', '68166', '11'), +('2', '71', '3', '70620', '61047', '11'), +('2', '71', '3', '69132', '58559', '11'), +('2', '71', '3', '39368', '50809', '11'), +('2', '71', '5', '69097', '68715', '11'), +('2', '71', '5', '68950', '68392', '11'), +('2', '71', '5', '70705', '61319', '11'), +('2', '71', '5', '39366', '50361', '11'), +('2', '71', '8', '39293', '105217', '11'), +('2', '71', '8', '83532', '71664', '11'), +('2', '71', '8', '69064', '69064', '11'), +('2', '71', '8', '83659', '65515', '11'), +('2', '71', '6', '71666', '87597', '11'), +('2', '71', '6', '83660', '80516', '11'), +('2', '71', '6', '39269', '78667', '11'), +('2', '71', '6', '47280', '66832', '11'), +('2', '71', '17', '70701', '71529', '11'), +('2', '71', '17', '83603', '66732', '11'), +('2', '71', '17', '68962', '52972', '11'), +('2', '71', '17', '69150', '49873', '11'), +('2', '71', '7', '39267', '41420', '11'), +('2', '71', '7', '83564', '40949', '11'), +('2', '71', '7', '68856', '40400', '11'), +('2', '71', '7', '84113', '37895', '11'), +('2', '71', '9', '51706', '107281', '11'), +('2', '71', '9', '39216', '72849', '11'), +('2', '71', '9', '69126', '68965', '11'), +('2', '71', '9', '69100', '50264', '11'), +('2', '71', '15', '83629', '104387', '11'), +('2', '71', '15', '69160', '70712', '11'), +('2', '71', '15', '47238', '67560', '11'), +('2', '71', '15', '39277', '60682', '11'), +('2', '71', '20', '47282', '56492', '11'), +('2', '71', '20', '83600', '48538', '11'), +('2', '71', '20', '39350', '46318', '11'), +('2', '71', '20', '39360', '45261', '11'), +('2', '71', '12', '83568', '41849', '11'), +('2', '71', '12', '70863', '37645', '11'), +('2', '71', '12', '83540', '34801', '11'), +('2', '71', '12', '84110', '34164', '11'), +('2', '71', '18', '83607', '108029', '11'), +('2', '71', '18', '70866', '83376', '11'), +('2', '71', '18', '39894', '57405', '11'), +('2', '71', '18', '69146', '38336', '11'), +('2', '71', '19', '83572', '76999', '11'), +('2', '71', '19', '70864', '66125', '11'), +('2', '71', '19', '71076', '54506', '11'), +('2', '71', '19', '47216', '50352', '11'), +('2', '71', '13', '83631', '77947', '11'), +('2', '71', '13', '83460', '62712', '11'), +('2', '71', '13', '39211', '58765', '11'), +('2', '71', '13', '69098', '53887', '11'), +('2', '71', '14', '69155', '70832', '11'), +('2', '71', '14', '83460', '62712', '11'), +('2', '71', '14', '39211', '58765', '11'), +('2', '71', '14', '69098', '53887', '11'), +('2', '71', '11', '39287', '105338', '11'), +('2', '71', '11', '39371', '50100', '11'), +('2', '71', '11', '39281', '49332', '11'), +('2', '71', '11', '83665', '45476', '11'), +('2', '72', '22', '21805', '0', '11'), +('2', '72', '22', '61948', '0', '11'), +('2', '72', '22', '21807', '0', '11'), +('2', '72', '22', '12425', '0', '11'), +('2', '72', '1', '39329', '102065', '11'), +('2', '72', '1', '71668', '57401', '11'), +('2', '72', '1', '83662', '51837', '11'), +('2', '72', '1', '83630', '48252', '11'), +('2', '72', '2', '83560', '39405', '11'), +('2', '72', '2', '70860', '38301', '11'), +('2', '72', '2', '39222', '37055', '11'), +('2', '72', '2', '83494', '33705', '11'), +('2', '72', '3', '69068', '65921', '11'), +('2', '72', '3', '70620', '59301', '11'), +('2', '72', '3', '69132', '57314', '11'), +('2', '72', '3', '39368', '50816', '11'), +('2', '72', '5', '69097', '66470', '11'), +('2', '72', '5', '68950', '66146', '11'), +('2', '72', '5', '70705', '59824', '11'), +('2', '72', '5', '39366', '50369', '11'), +('2', '72', '8', '39293', '102222', '11'), +('2', '72', '8', '83532', '69669', '11'), +('2', '72', '8', '69064', '67069', '11'), +('2', '72', '8', '83659', '64515', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '72', '6', '71666', '85102', '11'), +('2', '72', '6', '83660', '78766', '11'), +('2', '72', '6', '39269', '76922', '11'), +('2', '72', '6', '47280', '65336', '11'), +('2', '72', '17', '70701', '69535', '11'), +('2', '72', '17', '83603', '65738', '11'), +('2', '72', '17', '68962', '51477', '11'), +('2', '72', '17', '69150', '48978', '11'), +('2', '72', '7', '39267', '41426', '11'), +('2', '72', '7', '83564', '40955', '11'), +('2', '72', '7', '68856', '39504', '11'), +('2', '72', '7', '70861', '37661', '11'), +('2', '72', '9', '51706', '104285', '11'), +('2', '72', '9', '39216', '71103', '11'), +('2', '72', '9', '69126', '66965', '11'), +('2', '72', '9', '69100', '49119', '11'), +('2', '72', '15', '83629', '101394', '11'), +('2', '72', '15', '69160', '68712', '11'), +('2', '72', '15', '47238', '65814', '11'), +('2', '72', '15', '39277', '59686', '11'), +('2', '72', '20', '47282', '55495', '11'), +('2', '72', '20', '83600', '48194', '11'), +('2', '72', '20', '39350', '46323', '11'), +('2', '72', '20', '39360', '45268', '11'), +('2', '72', '12', '83568', '41855', '11'), +('2', '72', '12', '70863', '37651', '11'), +('2', '72', '12', '83540', '34805', '11'), +('2', '72', '12', '69083', '33367', '11'), +('2', '72', '18', '83607', '105034', '11'), +('2', '72', '18', '70866', '81132', '11'), +('2', '72', '18', '39894', '55907', '11'), +('2', '72', '18', '69146', '38092', '11'), +('2', '72', '19', '83572', '75255', '11'), +('2', '72', '19', '70864', '64633', '11'), +('2', '72', '19', '71076', '53006', '11'), +('2', '72', '19', '47216', '49457', '11'), +('2', '72', '13', '83631', '76203', '11'), +('2', '72', '13', '83460', '60967', '11'), +('2', '72', '13', '39211', '57770', '11'), +('2', '72', '13', '83508', '52498', '11'), +('2', '72', '14', '69155', '68832', '11'), +('2', '72', '14', '83460', '60967', '11'), +('2', '72', '14', '39211', '57770', '11'), +('2', '72', '14', '83508', '52498', '11'), +('2', '72', '11', '39287', '102343', '11'), +('2', '72', '11', '39371', '50104', '11'), +('2', '72', '11', '39281', '48986', '11'), +('2', '72', '11', '83665', '45483', '11'), +('2', '73', '22', '21805', '0', '11'), +('2', '73', '22', '61948', '0', '11'), +('2', '73', '22', '21807', '0', '11'), +('2', '73', '22', '12425', '0', '11'), +('2', '73', '1', '39329', '99070', '11'), +('2', '73', '1', '71668', '56407', '11'), +('2', '73', '1', '83662', '51494', '11'), +('2', '73', '1', '83630', '47907', '11'), +('2', '73', '2', '83560', '39411', '11'), +('2', '73', '2', '70860', '38307', '11'), +('2', '73', '2', '39222', '37059', '11'), +('2', '73', '2', '83494', '33710', '11'), +('2', '73', '3', '69068', '63676', '11'), +('2', '73', '3', '70620', '57556', '11'), +('2', '73', '3', '69132', '56069', '11'), +('2', '73', '3', '39368', '50823', '11'), +('2', '73', '5', '69097', '64225', '11'), +('2', '73', '5', '68950', '63900', '11'), +('2', '73', '5', '70705', '58329', '11'), +('2', '73', '5', '39366', '50376', '11'), +('2', '73', '8', '39293', '99226', '11'), +('2', '73', '8', '83532', '67674', '11'), +('2', '73', '8', '69064', '65074', '11'), +('2', '73', '8', '83659', '63515', '11'), +('2', '73', '6', '71666', '82608', '11'), +('2', '73', '6', '83660', '77016', '11'), +('2', '73', '6', '39269', '75177', '11'), +('2', '73', '6', '47280', '63841', '11'), +('2', '73', '17', '70701', '67540', '11'), +('2', '73', '17', '83603', '64743', '11'), +('2', '73', '17', '68962', '49983', '11'), +('2', '73', '17', '69150', '48084', '11'), +('2', '73', '7', '39267', '41431', '11'), +('2', '73', '7', '83564', '40961', '11'), +('2', '73', '7', '68856', '38609', '11'), +('2', '73', '7', '70861', '37665', '11'), +('2', '73', '9', '51706', '101290', '11'), +('2', '73', '9', '39216', '69357', '11'), +('2', '73', '9', '69126', '64965', '11'), +('2', '73', '9', '69100', '47974', '11'), +('2', '73', '15', '83629', '98400', '11'), +('2', '73', '15', '69160', '66712', '11'), +('2', '73', '15', '47238', '64068', '11'), +('2', '73', '15', '39277', '58690', '11'), +('2', '73', '20', '47282', '54498', '11'), +('2', '73', '20', '83600', '47850', '11'), +('2', '73', '20', '39350', '46328', '11'), +('2', '73', '20', '39360', '45275', '11'), +('2', '73', '12', '83568', '41861', '11'), +('2', '73', '12', '70863', '37657', '11'), +('2', '73', '12', '83540', '34809', '11'), +('2', '73', '12', '47212', '33230', '11'), +('2', '73', '18', '83607', '102039', '11'), +('2', '73', '18', '70866', '78887', '11'), +('2', '73', '18', '39894', '54409', '11'), +('2', '73', '18', '69146', '37848', '11'), +('2', '73', '19', '83572', '73511', '11'), +('2', '73', '19', '70864', '63141', '11'), +('2', '73', '19', '71076', '51506', '11'), +('2', '73', '19', '47216', '48561', '11'), +('2', '73', '13', '83631', '74459', '11'), +('2', '73', '13', '83460', '59222', '11'), +('2', '73', '13', '39211', '56775', '11'), +('2', '73', '13', '83508', '51502', '11'), +('2', '73', '14', '69155', '66832', '11'), +('2', '73', '14', '83460', '59222', '11'), +('2', '73', '14', '39211', '56775', '11'), +('2', '73', '14', '83508', '51502', '11'), +('2', '73', '11', '39287', '99349', '11'), +('2', '73', '11', '39371', '50108', '11'), +('2', '73', '11', '39281', '48640', '11'), +('2', '73', '11', '83665', '45490', '11'), +('2', '74', '22', '21805', '0', '11'), +('2', '74', '22', '61948', '0', '11'), +('2', '74', '22', '21807', '0', '11'), +('2', '74', '22', '12425', '0', '11'), +('2', '74', '1', '39329', '96075', '11'), +('2', '74', '1', '71668', '55412', '11'), +('2', '74', '1', '83662', '51151', '11'), +('2', '74', '1', '83630', '47561', '11'), +('2', '74', '2', '83560', '39417', '11'), +('2', '74', '2', '70860', '38313', '11'), +('2', '74', '2', '39222', '37063', '11'), +('2', '74', '2', '83494', '33714', '11'), +('2', '74', '3', '69068', '61431', '11'), +('2', '74', '3', '70620', '55810', '11'), +('2', '74', '3', '69132', '54824', '11'), +('2', '74', '3', '39368', '50831', '11'), +('2', '74', '5', '69097', '61980', '11'), +('2', '74', '5', '68950', '61654', '11'), +('2', '74', '5', '70705', '56834', '11'), +('2', '74', '5', '39366', '50383', '11'), +('2', '74', '8', '39293', '96231', '11'), +('2', '74', '8', '83532', '65679', '11'), +('2', '74', '8', '69064', '63079', '11'), +('2', '74', '8', '83659', '62515', '11'), +('2', '74', '6', '71666', '80113', '11'), +('2', '74', '6', '83660', '75266', '11'), +('2', '74', '6', '39269', '73432', '11'), +('2', '74', '6', '47280', '62345', '11'), +('2', '74', '17', '70701', '65545', '11'), +('2', '74', '17', '83603', '63748', '11'), +('2', '74', '17', '68962', '48488', '11'), +('2', '74', '17', '69150', '47189', '11'), +('2', '74', '7', '39267', '41436', '11'), +('2', '74', '7', '83564', '40967', '11'), +('2', '74', '7', '68856', '37713', '11'), +('2', '74', '7', '70861', '37669', '11'), +('2', '74', '9', '51706', '98294', '11'), +('2', '74', '9', '39216', '67611', '11'), +('2', '74', '9', '69126', '62965', '11'), +('2', '74', '9', '69100', '46829', '11'), +('2', '74', '15', '83629', '95406', '11'), +('2', '74', '15', '69160', '64712', '11'), +('2', '74', '15', '47238', '62323', '11'), +('2', '74', '15', '39277', '57694', '11'), +('2', '74', '20', '47282', '53502', '11'), +('2', '74', '20', '83600', '47506', '11'), +('2', '74', '20', '39350', '46333', '11'), +('2', '74', '20', '39360', '45283', '11'), +('2', '74', '12', '83568', '41867', '11'), +('2', '74', '12', '70863', '37663', '11'), +('2', '74', '12', '83540', '34813', '11'), +('2', '74', '12', '47212', '33235', '11'), +('2', '74', '18', '83607', '99044', '11'), +('2', '74', '18', '70866', '76642', '11'), +('2', '74', '18', '39894', '52911', '11'), +('2', '74', '18', '69146', '37604', '11'), +('2', '74', '19', '83572', '71767', '11'), +('2', '74', '19', '70864', '61649', '11'), +('2', '74', '19', '71076', '50006', '11'), +('2', '74', '19', '47216', '47665', '11'), +('2', '74', '13', '83631', '72715', '11'), +('2', '74', '13', '83460', '57478', '11'), +('2', '74', '13', '39211', '55780', '11'), +('2', '74', '13', '83508', '50506', '11'), +('2', '74', '14', '69155', '64832', '11'), +('2', '74', '14', '83460', '57478', '11'), +('2', '74', '14', '39211', '55780', '11'), +('2', '74', '14', '83508', '50506', '11'), +('2', '74', '11', '39287', '96354', '11'), +('2', '74', '11', '39371', '50113', '11'), +('2', '74', '11', '39281', '48294', '11'), +('2', '74', '11', '83665', '45498', '11'), +('2', '75', '22', '21807', '0', '13'), +('2', '75', '22', '21805', '0', '13'), +('2', '75', '22', '12425', '0', '13'), +('2', '75', '22', '39342', '0', '13'), +('2', '75', '1', '39329', '93080', '13'), +('2', '75', '1', '80676', '69837', '13'), +('2', '75', '1', '80660', '66709', '13'), +('2', '75', '1', '80639', '63588', '13'), +('2', '75', '2', '53368', '54796', '13'), +('2', '75', '2', '83560', '39423', '13'), +('2', '75', '2', '70860', '38319', '13'), +('2', '75', '2', '39222', '37068', '13'), +('2', '75', '3', '80647', '63889', '13'), +('2', '75', '3', '69068', '59186', '13'), +('2', '75', '3', '46923', '56018', '13'), +('2', '75', '3', '70620', '54064', '13'), +('2', '75', '5', '80661', '67709', '13'), +('2', '75', '5', '46934', '60596', '13'), +('2', '75', '5', '80626', '60468', '13'), +('2', '75', '5', '69097', '59735', '13'), +('2', '75', '8', '39293', '93235', '13'), +('2', '75', '8', '80689', '70001', '13'), +('2', '75', '8', '83532', '63684', '13'), +('2', '75', '8', '80649', '63639', '13'), +('2', '75', '6', '71666', '77619', '13'), +('2', '75', '6', '83660', '73516', '13'), +('2', '75', '6', '39269', '71687', '13'), +('2', '75', '6', '80645', '63938', '13'), +('2', '75', '17', '70701', '63550', '13'), +('2', '75', '17', '83603', '62753', '13'), +('2', '75', '17', '53373', '56992', '13'), +('2', '75', '17', '68962', '46993', '13'), +('2', '75', '7', '53369', '54619', '13'), +('2', '75', '7', '39267', '41441', '13'), +('2', '75', '7', '83564', '40973', '13'), +('2', '75', '7', '70861', '37673', '13'), +('2', '75', '9', '51706', '95299', '13'), +('2', '75', '9', '39216', '65865', '13'), +('2', '75', '9', '69126', '60965', '13'), +('2', '75', '9', '46887', '60243', '13'), +('2', '75', '15', '83629', '92412', '13'), +('2', '75', '15', '79909', '73465', '13'), +('2', '75', '15', '80686', '69750', '13'), +('2', '75', '15', '79908', '67034', '13'), +('2', '75', '20', '80690', '70001', '13'), +('2', '75', '20', '46886', '61168', '13'), +('2', '75', '20', '80620', '59968', '13'), +('2', '75', '20', '46869', '56345', '13'), +('2', '75', '12', '53371', '54419', '13'), +('2', '75', '12', '83568', '41874', '13'), +('2', '75', '12', '70863', '37669', '13'), +('2', '75', '12', '83540', '34817', '13'), +('2', '75', '18', '83607', '96049', '13'), +('2', '75', '18', '70866', '74397', '13'), +('2', '75', '18', '53374', '56198', '13'), +('2', '75', '18', '39894', '51413', '13'), +('2', '75', '19', '83572', '70024', '13'), +('2', '75', '19', '70864', '60157', '13'), +('2', '75', '19', '53372', '54723', '13'), +('2', '75', '19', '71076', '48506', '13'), +('2', '75', '13', '83631', '70972', '13'), +('2', '75', '13', '80663', '63748', '13'), +('2', '75', '13', '83460', '55733', '13'), +('2', '75', '13', '39211', '54785', '13'), +('2', '75', '14', '80682', '65085', '13'), +('2', '75', '14', '80665', '64833', '13'), +('2', '75', '14', '69155', '62832', '13'), +('2', '75', '14', '80625', '59530', '13'), +('2', '75', '11', '39287', '93360', '13'), +('2', '75', '11', '80668', '69850', '13'), +('2', '75', '11', '46939', '61492', '13'), +('2', '75', '11', '80619', '60868', '13'), +('2', '75', '22', '21807', '0', '12'), +('2', '75', '22', '21805', '0', '12'), +('2', '75', '22', '12425', '0', '12'), +('2', '75', '22', '39342', '0', '12'), +('2', '75', '1', '39329', '93080', '12'), +('2', '75', '1', '46882', '61236', '12'), +('2', '75', '1', '46865', '56917', '12'), +('2', '75', '1', '71668', '54418', '12'), +('2', '75', '2', '53368', '54796', '12'), +('2', '75', '2', '83560', '39423', '12'), +('2', '75', '2', '70860', '38319', '12'), +('2', '75', '2', '39222', '37068', '12'), +('2', '75', '3', '69068', '59186', '12'), +('2', '75', '3', '46923', '56018', '12'), +('2', '75', '3', '70620', '54064', '12'), +('2', '75', '3', '69132', '53579', '12'), +('2', '75', '5', '46934', '60596', '12'), +('2', '75', '5', '69097', '59735', '12'), +('2', '75', '5', '68950', '59408', '12'), +('2', '75', '5', '46917', '56749', '12'), +('2', '75', '8', '39293', '93235', '12'), +('2', '75', '8', '83532', '63684', '12'), +('2', '75', '8', '83659', '61515', '12'), +('2', '75', '8', '69064', '61084', '12'), +('2', '75', '6', '71666', '77619', '12'), +('2', '75', '6', '83660', '73516', '12'), +('2', '75', '6', '39269', '71687', '12'), +('2', '75', '6', '47280', '60850', '12'), +('2', '75', '17', '70701', '63550', '12'), +('2', '75', '17', '83603', '62753', '12'), +('2', '75', '17', '53373', '56992', '12'), +('2', '75', '17', '68962', '46993', '12'), +('2', '75', '7', '53369', '54619', '12'), +('2', '75', '7', '39267', '41441', '12'), +('2', '75', '7', '83564', '40973', '12'), +('2', '75', '7', '70861', '37673', '12'), +('2', '75', '9', '51706', '95299', '12'), +('2', '75', '9', '39216', '65865', '12'), +('2', '75', '9', '69126', '60965', '12'), +('2', '75', '9', '46887', '60243', '12'), +('2', '75', '15', '83629', '92412', '12'), +('2', '75', '15', '69160', '62712', '12'), +('2', '75', '15', '46932', '61317', '12'), +('2', '75', '15', '47238', '60577', '12'), +('2', '75', '20', '46886', '61168', '12'), +('2', '75', '20', '46869', '56345', '12'), +('2', '75', '20', '47282', '52505', '12'), +('2', '75', '20', '83600', '47162', '12'), +('2', '75', '12', '53371', '54419', '12'), +('2', '75', '12', '83568', '41874', '12'), +('2', '75', '12', '70863', '37669', '12'), +('2', '75', '12', '83540', '34817', '12'), +('2', '75', '18', '83607', '96049', '12'), +('2', '75', '18', '70866', '74397', '12'), +('2', '75', '18', '53374', '56198', '12'), +('2', '75', '18', '39894', '51413', '12'), +('2', '75', '19', '83572', '70024', '12'), +('2', '75', '19', '70864', '60157', '12'), +('2', '75', '19', '53372', '54723', '12'), +('2', '75', '19', '71076', '48506', '12'), +('2', '75', '13', '83631', '70972', '12'), +('2', '75', '13', '83460', '55733', '12'), +('2', '75', '13', '39211', '54785', '12'), +('2', '75', '13', '46991', '49883', '12'), +('2', '75', '14', '69155', '62832', '12'), +('2', '75', '14', '46925', '56307', '12'), +('2', '75', '14', '83460', '55733', '12'), +('2', '75', '14', '46875', '55086', '12'), +('2', '75', '11', '39287', '93360', '12'), +('2', '75', '11', '46939', '61492', '12'), +('2', '75', '11', '46889', '59394', '12'), +('2', '75', '11', '46899', '51336', '12'), +('2', '76', '22', '21807', '0', '13'), +('2', '76', '22', '21805', '0', '13'), +('2', '76', '22', '12425', '0', '13'), +('2', '76', '22', '39342', '0', '13'), +('2', '76', '1', '39329', '90085', '13'), +('2', '76', '1', '80676', '69844', '13'), +('2', '76', '1', '80660', '66716', '13'), +('2', '76', '1', '80639', '63594', '13'), +('2', '76', '2', '53368', '54803', '13'), +('2', '76', '2', '83560', '39430', '13'), +('2', '76', '2', '70860', '38325', '13'), +('2', '76', '2', '39222', '37072', '13'), +('2', '76', '3', '80647', '63895', '13'), +('2', '76', '3', '69068', '56941', '13'), +('2', '76', '3', '46923', '56024', '13'), +('2', '76', '3', '69132', '52334', '13'), +('2', '76', '5', '80661', '67716', '13'), +('2', '76', '5', '46934', '60603', '13'), +('2', '76', '5', '80626', '60474', '13'), +('2', '76', '5', '69097', '57491', '13'), +('2', '76', '8', '39293', '90239', '13'), +('2', '76', '8', '80689', '70008', '13'), +('2', '76', '8', '80649', '63645', '13'), +('2', '76', '8', '83532', '61689', '13'), +('2', '76', '6', '71666', '75124', '13'), +('2', '76', '6', '83660', '71767', '13'), +('2', '76', '6', '39269', '69942', '13'), +('2', '76', '6', '80645', '63945', '13'), +('2', '76', '17', '83603', '61758', '13'), +('2', '76', '17', '70701', '61555', '13'), +('2', '76', '17', '53373', '56999', '13'), +('2', '76', '17', '68962', '45498', '13'), +('2', '76', '7', '53369', '54626', '13'), +('2', '76', '7', '39267', '41446', '13'), +('2', '76', '7', '83564', '40980', '13'), +('2', '76', '7', '70861', '37677', '13'), +('2', '76', '9', '51706', '92303', '13'), +('2', '76', '9', '39216', '64119', '13'), +('2', '76', '9', '46887', '60250', '13'), +('2', '76', '9', '69126', '58965', '13'), +('2', '76', '15', '83629', '89418', '13'), +('2', '76', '15', '79909', '73471', '13'), +('2', '76', '15', '80686', '69758', '13'), +('2', '76', '15', '79908', '67040', '13'), +('2', '76', '20', '80690', '70008', '13'), +('2', '76', '20', '46886', '61176', '13'), +('2', '76', '20', '80620', '59969', '13'), +('2', '76', '20', '46869', '56352', '13'), +('2', '76', '12', '53371', '54423', '13'), +('2', '76', '12', '83568', '41880', '13'), +('2', '76', '12', '70863', '37675', '13'), +('2', '76', '12', '83540', '34821', '13'), +('2', '76', '18', '83607', '93055', '13'), +('2', '76', '18', '70866', '72152', '13'), +('2', '76', '18', '53374', '56205', '13'), +('2', '76', '18', '39894', '49915', '13'), +('2', '76', '19', '83572', '68280', '13'), +('2', '76', '19', '70864', '58665', '13'), +('2', '76', '19', '53372', '54723', '13'), +('2', '76', '19', '71076', '47006', '13'), +('2', '76', '13', '83631', '69228', '13'), +('2', '76', '13', '80663', '63753', '13'), +('2', '76', '13', '83460', '53988', '13'), +('2', '76', '13', '39211', '53790', '13'), +('2', '76', '14', '80682', '65090', '13'), +('2', '76', '14', '80665', '64839', '13'), +('2', '76', '14', '69155', '60832', '13'), +('2', '76', '14', '80625', '59536', '13'), +('2', '76', '11', '39287', '90365', '13'), +('2', '76', '11', '80668', '69857', '13'), +('2', '76', '11', '46939', '61499', '13'), +('2', '76', '11', '80619', '60874', '13'), +('2', '77', '22', '21807', '0', '13'), +('2', '77', '22', '21805', '0', '13'), +('2', '77', '22', '12425', '0', '13'), +('2', '77', '22', '39342', '0', '13'), +('2', '77', '1', '39329', '87090', '13'), +('2', '77', '1', '80676', '69851', '13'), +('2', '77', '1', '80660', '66723', '13'), +('2', '77', '1', '80639', '63601', '13'), +('2', '77', '2', '53368', '54810', '13'), +('2', '77', '2', '83560', '39436', '13'), +('2', '77', '2', '70860', '38332', '13'), +('2', '77', '2', '39222', '37076', '13'), +('2', '77', '3', '80647', '63902', '13'), +('2', '77', '3', '46923', '56030', '13'), +('2', '77', '3', '69068', '54697', '13'), +('2', '77', '3', '46852', '51255', '13'), +('2', '77', '5', '80661', '67722', '13'), +('2', '77', '5', '46934', '60610', '13'), +('2', '77', '5', '80626', '60480', '13'), +('2', '77', '5', '46917', '56762', '13'), +('2', '77', '8', '39293', '87244', '13'), +('2', '77', '8', '80689', '70015', '13'), +('2', '77', '8', '80649', '63652', '13'), +('2', '77', '8', '46936', '60851', '13'), +('2', '77', '6', '71666', '72630', '13'), +('2', '77', '6', '83660', '70017', '13'), +('2', '77', '6', '39269', '68197', '13'), +('2', '77', '6', '80645', '63951', '13'), +('2', '77', '17', '83603', '60764', '13'), +('2', '77', '17', '70701', '59560', '13'), +('2', '77', '17', '53373', '57006', '13'), +('2', '77', '17', '69150', '44504', '13'), +('2', '77', '7', '53369', '54632', '13'), +('2', '77', '7', '39267', '41451', '13'), +('2', '77', '7', '83564', '40986', '13'), +('2', '77', '7', '70861', '37682', '13'), +('2', '77', '9', '51706', '89308', '13'), +('2', '77', '9', '39216', '62374', '13'), +('2', '77', '9', '46887', '60258', '13'), +('2', '77', '9', '69126', '56965', '13'), +('2', '77', '15', '83629', '86424', '13'), +('2', '77', '15', '79909', '73477', '13'), +('2', '77', '15', '80686', '69765', '13'), +('2', '77', '15', '79908', '67046', '13'), +('2', '77', '20', '80690', '70015', '13'), +('2', '77', '20', '46886', '61184', '13'), +('2', '77', '20', '80620', '59969', '13'), +('2', '77', '20', '46869', '56359', '13'), +('2', '77', '12', '53371', '54427', '13'), +('2', '77', '12', '83568', '41886', '13'), +('2', '77', '12', '70863', '37681', '13'), +('2', '77', '12', '83540', '34825', '13'), +('2', '77', '18', '83607', '90060', '13'), +('2', '77', '18', '70866', '69907', '13'), +('2', '77', '18', '53374', '56212', '13'), +('2', '77', '18', '39894', '48417', '13'), +('2', '77', '19', '83572', '66536', '13'), +('2', '77', '19', '70864', '57173', '13'), +('2', '77', '19', '53372', '54723', '13'), +('2', '77', '19', '71076', '45506', '13'), +('2', '77', '13', '83631', '67484', '13'), +('2', '77', '13', '80663', '63758', '13'), +('2', '77', '13', '39211', '52795', '13'), +('2', '77', '13', '83460', '52243', '13'), +('2', '77', '14', '80682', '65095', '13'), +('2', '77', '14', '80665', '64844', '13'), +('2', '77', '14', '80625', '59541', '13'), +('2', '77', '14', '69155', '58833', '13'), +('2', '77', '11', '39287', '87370', '13'), +('2', '77', '11', '80668', '69865', '13'), +('2', '77', '11', '46939', '61506', '13'), +('2', '77', '11', '80619', '60880', '13'), +('2', '78', '22', '21807', '0', '13'), +('2', '78', '22', '21805', '0', '13'), +('2', '78', '22', '12425', '0', '13'), +('2', '78', '22', '39342', '0', '13'), +('2', '78', '1', '39329', '84095', '13'), +('2', '78', '1', '80676', '69858', '13'), +('2', '78', '1', '80660', '66730', '13'), +('2', '78', '1', '80639', '63607', '13'), +('2', '78', '2', '53368', '54818', '13'), +('2', '78', '2', '83560', '39442', '13'), +('2', '78', '2', '70860', '38338', '13'), +('2', '78', '2', '39222', '37080', '13'), +('2', '78', '3', '80647', '63908', '13'), +('2', '78', '3', '46923', '56037', '13'), +('2', '78', '3', '69068', '52452', '13'), +('2', '78', '3', '46852', '51262', '13'), +('2', '78', '5', '80661', '67729', '13'), +('2', '78', '5', '46934', '60617', '13'), +('2', '78', '5', '80626', '60486', '13'), +('2', '78', '5', '46917', '56769', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '78', '8', '39293', '84248', '13'), +('2', '78', '8', '80689', '70023', '13'), +('2', '78', '8', '80649', '63658', '13'), +('2', '78', '8', '46936', '60859', '13'), +('2', '78', '6', '71666', '70135', '13'), +('2', '78', '6', '83660', '68267', '13'), +('2', '78', '6', '39269', '66452', '13'), +('2', '78', '6', '80645', '63958', '13'), +('2', '78', '17', '83603', '59769', '13'), +('2', '78', '17', '70701', '57566', '13'), +('2', '78', '17', '53373', '57013', '13'), +('2', '78', '17', '69150', '43609', '13'), +('2', '78', '7', '53369', '54638', '13'), +('2', '78', '7', '39267', '41456', '13'), +('2', '78', '7', '83564', '40992', '13'), +('2', '78', '7', '70861', '37686', '13'), +('2', '78', '9', '51706', '86312', '13'), +('2', '78', '9', '39216', '60628', '13'), +('2', '78', '9', '46887', '60265', '13'), +('2', '78', '9', '69126', '54966', '13'), +('2', '78', '15', '83629', '83430', '13'), +('2', '78', '15', '79909', '73483', '13'), +('2', '78', '15', '80686', '69773', '13'), +('2', '78', '15', '79908', '67051', '13'), +('2', '78', '20', '80690', '70023', '13'), +('2', '78', '20', '46886', '61192', '13'), +('2', '78', '20', '80620', '59969', '13'), +('2', '78', '20', '46869', '56366', '13'), +('2', '78', '12', '53371', '54432', '13'), +('2', '78', '12', '83568', '41892', '13'), +('2', '78', '12', '70863', '37688', '13'), +('2', '78', '12', '83540', '34830', '13'), +('2', '78', '18', '83607', '87065', '13'), +('2', '78', '18', '70866', '67662', '13'), +('2', '78', '18', '53374', '56220', '13'), +('2', '78', '18', '39894', '46919', '13'), +('2', '78', '19', '83572', '64792', '13'), +('2', '78', '19', '70864', '55681', '13'), +('2', '78', '19', '53372', '54723', '13'), +('2', '78', '19', '39355', '44934', '13'), +('2', '78', '13', '83631', '65740', '13'), +('2', '78', '13', '80663', '63763', '13'), +('2', '78', '13', '39211', '51800', '13'), +('2', '78', '13', '83460', '50498', '13'), +('2', '78', '14', '80682', '65100', '13'), +('2', '78', '14', '80665', '64849', '13'), +('2', '78', '14', '80625', '59546', '13'), +('2', '78', '14', '69155', '56833', '13'), +('2', '78', '11', '39287', '84376', '13'), +('2', '78', '11', '80668', '69872', '13'), +('2', '78', '11', '46939', '61514', '13'), +('2', '78', '11', '80619', '60886', '13'), +('2', '79', '22', '21807', '0', '13'), +('2', '79', '22', '21805', '0', '13'), +('2', '79', '22', '12425', '0', '13'), +('2', '79', '22', '39342', '0', '13'), +('2', '79', '1', '39329', '81100', '13'), +('2', '79', '1', '80676', '69866', '13'), +('2', '79', '1', '80660', '66737', '13'), +('2', '79', '1', '80639', '63614', '13'), +('2', '79', '2', '53368', '54825', '13'), +('2', '79', '2', '83560', '39448', '13'), +('2', '79', '2', '70860', '38344', '13'), +('2', '79', '2', '39222', '37084', '13'), +('2', '79', '3', '80647', '63915', '13'), +('2', '79', '3', '46923', '56043', '13'), +('2', '79', '3', '46852', '51270', '13'), +('2', '79', '3', '39368', '50866', '13'), +('2', '79', '5', '80661', '67736', '13'), +('2', '79', '5', '46934', '60624', '13'), +('2', '79', '5', '80626', '60492', '13'), +('2', '79', '5', '46917', '56775', '13'), +('2', '79', '8', '39293', '81253', '13'), +('2', '79', '8', '80689', '70030', '13'), +('2', '79', '8', '80649', '63665', '13'), +('2', '79', '8', '46936', '60867', '13'), +('2', '79', '6', '71666', '67641', '13'), +('2', '79', '6', '83660', '66517', '13'), +('2', '79', '6', '39269', '64708', '13'), +('2', '79', '6', '80645', '63965', '13'), +('2', '79', '17', '83603', '58774', '13'), +('2', '79', '17', '53373', '57020', '13'), +('2', '79', '17', '70701', '55571', '13'), +('2', '79', '17', '70865', '43475', '13'), +('2', '79', '7', '53369', '54644', '13'), +('2', '79', '7', '39267', '41461', '13'), +('2', '79', '7', '83564', '40998', '13'), +('2', '79', '7', '70861', '37690', '13'), +('2', '79', '9', '51706', '83317', '13'), +('2', '79', '9', '46887', '60272', '13'), +('2', '79', '9', '39216', '58882', '13'), +('2', '79', '9', '53370', '54143', '13'), +('2', '79', '15', '83629', '80436', '13'), +('2', '79', '15', '79909', '73490', '13'), +('2', '79', '15', '80686', '69780', '13'), +('2', '79', '15', '79908', '67057', '13'), +('2', '79', '20', '80690', '70030', '13'), +('2', '79', '20', '46886', '61201', '13'), +('2', '79', '20', '80620', '59969', '13'), +('2', '79', '20', '46869', '56373', '13'), +('2', '79', '12', '53371', '54436', '13'), +('2', '79', '12', '83568', '41898', '13'), +('2', '79', '12', '70863', '37694', '13'), +('2', '79', '12', '83540', '34834', '13'), +('2', '79', '18', '83607', '84070', '13'), +('2', '79', '18', '70866', '65418', '13'), +('2', '79', '18', '53374', '56227', '13'), +('2', '79', '18', '39894', '45422', '13'), +('2', '79', '19', '83572', '63048', '13'), +('2', '79', '19', '53372', '54723', '13'), +('2', '79', '19', '70864', '54189', '13'), +('2', '79', '19', '39355', '44939', '13'), +('2', '79', '13', '83631', '63997', '13'), +('2', '79', '13', '80663', '63768', '13'), +('2', '79', '13', '39211', '50805', '13'), +('2', '79', '13', '46991', '49910', '13'), +('2', '79', '14', '80682', '65105', '13'), +('2', '79', '14', '80665', '64854', '13'), +('2', '79', '14', '80625', '59551', '13'), +('2', '79', '14', '46925', '56332', '13'), +('2', '79', '11', '39287', '81381', '13'), +('2', '79', '11', '80668', '69879', '13'), +('2', '79', '11', '46939', '61521', '13'), +('2', '79', '11', '80619', '60893', '13'), +('2', '80', '22', '21807', '0', '14'), +('2', '80', '22', '21805', '0', '14'), +('2', '80', '22', '12425', '0', '14'), +('2', '80', '22', '39342', '0', '14'), +('2', '80', '1', '102611', '91338', '14'), +('2', '80', '1', '102640', '90651', '14'), +('2', '80', '1', '102639', '90576', '14'), +('2', '80', '1', '102641', '90496', '14'), +('2', '80', '2', '102003', '60766', '14'), +('2', '80', '2', '53368', '54832', '14'), +('2', '80', '2', '102255', '54703', '14'), +('2', '80', '2', '83560', '39454', '14'), +('2', '80', '3', '102612', '97077', '14'), +('2', '80', '3', '102626', '95174', '14'), +('2', '80', '3', '102742', '87957', '14'), +('2', '80', '3', '102560', '84724', '14'), +('2', '80', '5', '102731', '101451', '14'), +('2', '80', '5', '102613', '95206', '14'), +('2', '80', '5', '102627', '93481', '14'), +('2', '80', '5', '102730', '87888', '14'), +('2', '80', '8', '102728', '99782', '14'), +('2', '80', '8', '102615', '97032', '14'), +('2', '80', '8', '102629', '95570', '14'), +('2', '80', '8', '102569', '84816', '14'), +('2', '80', '6', '102614', '97795', '14'), +('2', '80', '6', '102628', '95731', '14'), +('2', '80', '6', '102561', '84912', '14'), +('2', '80', '6', '71666', '65147', '14'), +('2', '80', '17', '102006', '64440', '14'), +('2', '80', '17', '102258', '58559', '14'), +('2', '80', '17', '83603', '57779', '14'), +('2', '80', '17', '53373', '57027', '14'), +('2', '80', '7', '102004', '61492', '14'), +('2', '80', '7', '102256', '55108', '14'), +('2', '80', '7', '53369', '54650', '14'), +('2', '80', '7', '39267', '41466', '14'), +('2', '80', '9', '67098', '159947', '14'), +('2', '80', '9', '51706', '80321', '14'), +('2', '80', '9', '46887', '60279', '14'), +('2', '80', '9', '39216', '57136', '14'), +('2', '80', '15', '102723', '100581', '14'), +('2', '80', '15', '102616', '92907', '14'), +('2', '80', '15', '102636', '91860', '14'), +('2', '80', '15', '102635', '91664', '14'), +('2', '80', '20', '102617', '97391', '14'), +('2', '80', '20', '102631', '95913', '14'), +('2', '80', '20', '102563', '84526', '14'), +('2', '80', '20', '80690', '70038', '14'), +('2', '80', '12', '53371', '54440', '14'), +('2', '80', '12', '102253', '52318', '14'), +('2', '80', '12', '83568', '41905', '14'), +('2', '80', '12', '70863', '37700', '14'), +('2', '80', '18', '83607', '81075', '14'), +('2', '80', '18', '70866', '63173', '14'), +('2', '80', '18', '102005', '62321', '14'), +('2', '80', '18', '102257', '56242', '14'), +('2', '80', '19', '83572', '61305', '14'), +('2', '80', '19', '53372', '54723', '14'), +('2', '80', '19', '102254', '53327', '14'), +('2', '80', '19', '70864', '52697', '14'), +('2', '80', '13', '93856', '97138', '14'), +('2', '80', '13', '102735', '87782', '14'), +('2', '80', '13', '102734', '80948', '14'), +('2', '80', '13', '102582', '77531', '14'), +('2', '80', '14', '102633', '96197', '14'), +('2', '80', '14', '102632', '96180', '14'), +('2', '80', '14', '102570', '83406', '14'), +('2', '80', '14', '80682', '65111', '14'), +('2', '80', '11', '102643', '92601', '14'), +('2', '80', '11', '39287', '78387', '14'), +('2', '80', '11', '80668', '69887', '14'), +('2', '80', '11', '46939', '61528', '14'), +('2', '81', '22', '21807', '0', '14'), +('2', '81', '22', '21805', '0', '14'), +('2', '81', '22', '12425', '0', '14'), +('2', '81', '22', '39342', '0', '14'), +('2', '81', '1', '102611', '91345', '14'), +('2', '81', '1', '102640', '90657', '14'), +('2', '81', '1', '102639', '90581', '14'), +('2', '81', '1', '102641', '90502', '14'), +('2', '81', '2', '102003', '60772', '14'), +('2', '81', '2', '53368', '54839', '14'), +('2', '81', '2', '102255', '54707', '14'), +('2', '81', '2', '83560', '39461', '14'), +('2', '81', '3', '102612', '97083', '14'), +('2', '81', '3', '102626', '95179', '14'), +('2', '81', '3', '102742', '87966', '14'), +('2', '81', '3', '102560', '84730', '14'), +('2', '81', '5', '102731', '101460', '14'), +('2', '81', '5', '102613', '95211', '14'), +('2', '81', '5', '102627', '93486', '14'), +('2', '81', '5', '102730', '87895', '14'), +('2', '81', '8', '102728', '99789', '14'), +('2', '81', '8', '102615', '97040', '14'), +('2', '81', '8', '102629', '95575', '14'), +('2', '81', '8', '102569', '84825', '14'), +('2', '81', '6', '102614', '97803', '14'), +('2', '81', '6', '102628', '95738', '14'), +('2', '81', '6', '102561', '84921', '14'), +('2', '81', '6', '80645', '63978', '14'), +('2', '81', '17', '102006', '64442', '14'), +('2', '81', '17', '102258', '58566', '14'), +('2', '81', '17', '53373', '57034', '14'), +('2', '81', '17', '83603', '56784', '14'), +('2', '81', '7', '102004', '61497', '14'), +('2', '81', '7', '102256', '55114', '14'), +('2', '81', '7', '53369', '54656', '14'), +('2', '81', '7', '39267', '41471', '14'), +('2', '81', '9', '67098', '161951', '14'), +('2', '81', '9', '51706', '77326', '14'), +('2', '81', '9', '46887', '60286', '14'), +('2', '81', '9', '39216', '55390', '14'), +('2', '81', '15', '102723', '100588', '14'), +('2', '81', '15', '102616', '92916', '14'), +('2', '81', '15', '102636', '91868', '14'), +('2', '81', '15', '102635', '91669', '14'), +('2', '81', '20', '102617', '97393', '14'), +('2', '81', '20', '102631', '95922', '14'), +('2', '81', '20', '102563', '84532', '14'), +('2', '81', '20', '80690', '70045', '14'), +('2', '81', '12', '53371', '54444', '14'), +('2', '81', '12', '102253', '52322', '14'), +('2', '81', '12', '83568', '41911', '14'), +('2', '81', '12', '70863', '37706', '14'), +('2', '81', '18', '83607', '78080', '14'), +('2', '81', '18', '102005', '62328', '14'), +('2', '81', '18', '70866', '60928', '14'), +('2', '81', '18', '102257', '56247', '14'), +('2', '81', '19', '83572', '59561', '14'), +('2', '81', '19', '53372', '54724', '14'), +('2', '81', '19', '102254', '53333', '14'), +('2', '81', '19', '76131', '51298', '14'), +('2', '81', '13', '93856', '98358', '14'), +('2', '81', '13', '102735', '87789', '14'), +('2', '81', '13', '102734', '80955', '14'), +('2', '81', '13', '102582', '77539', '14'), +('2', '81', '14', '102633', '96203', '14'), +('2', '81', '14', '102632', '96188', '14'), +('2', '81', '14', '102570', '83408', '14'), +('2', '81', '14', '80682', '65116', '14'), +('2', '81', '11', '102643', '92605', '14'), +('2', '81', '11', '39287', '75392', '14'), +('2', '81', '11', '80668', '69894', '14'), +('2', '81', '11', '46939', '61535', '14'), +('2', '82', '22', '21807', '0', '14'), +('2', '82', '22', '21805', '0', '14'), +('2', '82', '22', '12425', '0', '14'), +('2', '82', '22', '39342', '0', '14'), +('2', '82', '1', '102611', '91352', '14'), +('2', '82', '1', '102640', '90662', '14'), +('2', '82', '1', '102639', '90585', '14'), +('2', '82', '1', '102641', '90508', '14'), +('2', '82', '2', '102003', '60778', '14'), +('2', '82', '2', '53368', '54846', '14'), +('2', '82', '2', '102255', '54712', '14'), +('2', '82', '2', '83560', '39467', '14'), +('2', '82', '3', '102612', '97089', '14'), +('2', '82', '3', '102626', '95185', '14'), +('2', '82', '3', '102742', '87974', '14'), +('2', '82', '3', '102560', '84737', '14'), +('2', '82', '5', '102731', '101469', '14'), +('2', '82', '5', '102613', '95215', '14'), +('2', '82', '5', '102627', '93491', '14'), +('2', '82', '5', '102730', '87902', '14'), +('2', '82', '8', '102728', '99796', '14'), +('2', '82', '8', '102615', '97047', '14'), +('2', '82', '8', '102629', '95579', '14'), +('2', '82', '8', '102569', '84835', '14'), +('2', '82', '6', '102614', '97810', '14'), +('2', '82', '6', '102628', '95745', '14'), +('2', '82', '6', '102561', '84930', '14'), +('2', '82', '6', '80645', '63984', '14'), +('2', '82', '17', '102006', '64444', '14'), +('2', '82', '17', '102258', '58573', '14'), +('2', '82', '17', '53373', '57041', '14'), +('2', '82', '17', '83603', '55789', '14'), +('2', '82', '7', '102004', '61501', '14'), +('2', '82', '7', '102256', '55119', '14'), +('2', '82', '7', '53369', '54662', '14'), +('2', '82', '7', '39267', '41476', '14'), +('2', '82', '9', '67098', '163955', '14'), +('2', '82', '9', '51706', '74331', '14'), +('2', '82', '9', '46887', '60293', '14'), +('2', '82', '9', '53370', '54162', '14'), +('2', '82', '15', '102723', '100595', '14'), +('2', '82', '15', '102616', '92924', '14'), +('2', '82', '15', '102636', '91876', '14'), +('2', '82', '15', '102635', '91675', '14'), +('2', '82', '20', '102617', '97396', '14'), +('2', '82', '20', '102631', '95931', '14'), +('2', '82', '20', '102563', '84538', '14'), +('2', '82', '20', '80690', '70052', '14'), +('2', '82', '12', '53371', '54448', '14'), +('2', '82', '12', '102253', '52327', '14'), +('2', '82', '12', '83568', '41917', '14'), +('2', '82', '12', '70863', '37712', '14'), +('2', '82', '18', '83607', '75086', '14'), +('2', '82', '18', '102005', '62336', '14'), +('2', '82', '18', '70866', '58683', '14'), +('2', '82', '18', '102257', '56252', '14'), +('2', '82', '19', '83572', '57817', '14'), +('2', '82', '19', '53372', '54724', '14'), +('2', '82', '19', '102254', '53340', '14'), +('2', '82', '19', '76131', '51301', '14'), +('2', '82', '13', '93856', '99578', '14'), +('2', '82', '13', '102735', '87796', '14'), +('2', '82', '13', '102734', '80961', '14'), +('2', '82', '13', '102582', '77548', '14'), +('2', '82', '14', '102633', '96209', '14'), +('2', '82', '14', '102632', '96196', '14'), +('2', '82', '14', '102570', '83410', '14'), +('2', '82', '14', '80682', '65121', '14'), +('2', '82', '11', '102643', '92609', '14'), +('2', '82', '11', '39287', '72397', '14'), +('2', '82', '11', '80668', '69901', '14'), +('2', '82', '11', '46939', '61542', '14'), +('2', '83', '22', '21807', '0', '14'), +('2', '83', '22', '21805', '0', '14'), +('2', '83', '22', '12425', '0', '14'), +('2', '83', '22', '39342', '0', '14'), +('2', '83', '1', '102611', '91358', '14'), +('2', '83', '1', '102640', '90668', '14'), +('2', '83', '1', '102639', '90590', '14'), +('2', '83', '1', '102641', '90515', '14'), +('2', '83', '2', '102003', '60784', '14'), +('2', '83', '2', '53368', '54853', '14'), +('2', '83', '2', '102255', '54717', '14'), +('2', '83', '2', '83560', '39473', '14'), +('2', '83', '3', '102612', '97095', '14'), +('2', '83', '3', '102626', '95190', '14'), +('2', '83', '3', '102742', '87982', '14'), +('2', '83', '3', '102560', '84743', '14'), +('2', '83', '5', '102731', '101478', '14'), +('2', '83', '5', '102613', '95219', '14'), +('2', '83', '5', '102627', '93495', '14'), +('2', '83', '5', '102730', '87909', '14'), +('2', '83', '8', '102728', '99803', '14'), +('2', '83', '8', '102615', '97055', '14'), +('2', '83', '8', '102629', '95584', '14'), +('2', '83', '8', '102569', '84844', '14'), +('2', '83', '6', '102614', '97818', '14'), +('2', '83', '6', '102628', '95751', '14'), +('2', '83', '6', '102561', '84940', '14'), +('2', '83', '6', '80645', '63991', '14'), +('2', '83', '17', '102006', '64446', '14'), +('2', '83', '17', '102258', '58579', '14'), +('2', '83', '17', '53373', '57048', '14'), +('2', '83', '17', '83603', '54795', '14'), +('2', '83', '7', '102004', '61506', '14'), +('2', '83', '7', '102256', '55125', '14'), +('2', '83', '7', '53369', '54668', '14'), +('2', '83', '7', '39267', '41482', '14'), +('2', '83', '9', '67098', '165960', '14'), +('2', '83', '9', '51706', '71335', '14'), +('2', '83', '9', '46887', '60300', '14'), +('2', '83', '9', '53370', '54168', '14'), +('2', '83', '15', '102723', '100602', '14'), +('2', '83', '15', '102616', '92933', '14'), +('2', '83', '15', '102636', '91883', '14'), +('2', '83', '15', '102635', '91680', '14'), +('2', '83', '20', '102617', '97398', '14'), +('2', '83', '20', '102631', '95940', '14'), +('2', '83', '20', '102563', '84544', '14'), +('2', '83', '20', '80690', '70060', '14'), +('2', '83', '12', '53371', '54452', '14'), +('2', '83', '12', '102253', '52331', '14'), +('2', '83', '12', '83568', '41923', '14'), +('2', '83', '12', '70863', '37718', '14'), +('2', '83', '18', '83607', '72091', '14'), +('2', '83', '18', '102005', '62343', '14'), +('2', '83', '18', '70866', '56438', '14'), +('2', '83', '18', '102257', '56257', '14'), +('2', '83', '19', '83572', '56073', '14'), +('2', '83', '19', '53372', '54724', '14'), +('2', '83', '19', '102254', '53346', '14'), +('2', '83', '19', '76131', '51304', '14'), +('2', '83', '13', '93856', '100799', '14'), +('2', '83', '13', '102735', '87803', '14'), +('2', '83', '13', '102734', '80967', '14'), +('2', '83', '13', '102582', '77556', '14'), +('2', '83', '14', '102633', '96215', '14'), +('2', '83', '14', '102632', '96203', '14'), +('2', '83', '14', '102570', '83412', '14'), +('2', '83', '14', '80682', '65126', '14'), +('2', '83', '11', '102643', '92612', '14'), +('2', '83', '11', '80668', '69909', '14'), +('2', '83', '11', '39287', '69403', '14'), +('2', '83', '11', '46939', '61549', '14'), +('2', '84', '22', '21807', '0', '14'), +('2', '84', '22', '21805', '0', '14'), +('2', '84', '22', '12425', '0', '14'), +('2', '84', '22', '39342', '0', '14'), +('2', '84', '1', '102611', '91365', '14'), +('2', '84', '1', '102640', '90673', '14'), +('2', '84', '1', '102639', '90595', '14'), +('2', '84', '1', '102641', '90521', '14'), +('2', '84', '2', '102003', '60789', '14'), +('2', '84', '2', '53368', '54860', '14'), +('2', '84', '2', '102255', '54722', '14'), +('2', '84', '2', '83560', '39479', '14'), +('2', '84', '3', '102612', '97100', '14'), +('2', '84', '3', '102626', '95195', '14'), +('2', '84', '3', '102742', '87990', '14'), +('2', '84', '3', '102560', '84750', '14'), +('2', '84', '5', '102731', '101487', '14'), +('2', '84', '5', '102613', '95224', '14'), +('2', '84', '5', '102627', '93500', '14'), +('2', '84', '5', '102730', '87916', '14'), +('2', '84', '8', '102728', '99810', '14'), +('2', '84', '8', '102615', '97063', '14'), +('2', '84', '8', '102629', '95588', '14'), +('2', '84', '8', '102569', '84854', '14'), +('2', '84', '6', '102614', '97825', '14'), +('2', '84', '6', '102628', '95758', '14'), +('2', '84', '6', '102561', '84949', '14'), +('2', '84', '6', '80645', '63997', '14'), +('2', '84', '17', '102006', '64448', '14'), +('2', '84', '17', '102258', '58586', '14'), +('2', '84', '17', '53373', '57055', '14'), +('2', '84', '17', '83603', '53800', '14'), +('2', '84', '7', '102004', '61511', '14'), +('2', '84', '7', '102256', '55131', '14'), +('2', '84', '7', '53369', '54675', '14'), +('2', '84', '7', '39267', '41487', '14'), +('2', '84', '9', '67098', '167964', '14'), +('2', '84', '9', '51706', '68340', '14'), +('2', '84', '9', '46887', '60308', '14'), +('2', '84', '9', '53370', '54174', '14'), +('2', '84', '15', '102723', '100609', '14'), +('2', '84', '15', '102616', '92942', '14'), +('2', '84', '15', '102636', '91891', '14'), +('2', '84', '15', '102635', '91685', '14'), +('2', '84', '20', '102617', '97400', '14'), +('2', '84', '20', '102631', '95949', '14'), +('2', '84', '20', '102563', '84550', '14'), +('2', '84', '20', '80690', '70067', '14'), +('2', '84', '12', '53371', '54456', '14'), +('2', '84', '12', '102253', '52336', '14'), +('2', '84', '12', '83568', '41929', '14'), +('2', '84', '12', '70863', '37725', '14'), +('2', '84', '18', '83607', '69096', '14'), +('2', '84', '18', '102005', '62351', '14'), +('2', '84', '18', '53374', '56262', '14'), +('2', '84', '18', '102257', '56261', '14'), +('2', '84', '19', '53372', '54724', '14'), +('2', '84', '19', '83572', '54329', '14'), +('2', '84', '19', '102254', '53353', '14'), +('2', '84', '19', '76131', '51308', '14'), +('2', '84', '13', '93856', '102019', '14'), +('2', '84', '13', '102735', '87810', '14'), +('2', '84', '13', '102734', '80973', '14'), +('2', '84', '13', '102582', '77564', '14'), +('2', '84', '14', '102633', '96221', '14'), +('2', '84', '14', '102632', '96211', '14'), +('2', '84', '14', '102570', '83414', '14'), +('2', '84', '14', '80682', '65131', '14'), +('2', '84', '11', '102643', '92616', '14'), +('2', '84', '11', '80668', '69916', '14'), +('2', '84', '11', '39287', '66408', '14'), +('2', '84', '11', '46939', '61556', '14'), +('2', '85', '22', '12425', '0', '16'), +('2', '85', '22', '39342', '0', '16'), +('2', '85', '22', '7867', '0', '16'), +('2', '85', '22', '23597', '0', '16'), +('2', '85', '1', '111304', '176358', '16'), +('2', '85', '1', '111307', '176217', '16'), +('2', '85', '1', '111310', '174919', '16'), +('2', '85', '1', '111301', '174906', '16'), +('2', '85', '2', '62988', '110463', '16'), +('2', '85', '2', '62985', '110199', '16'), +('2', '85', '2', '94056', '109897', '16'), +('2', '85', '2', '89368', '102725', '16'), +('2', '85', '3', '111314', '177076', '16'), +('2', '85', '3', '111316', '175364', '16'), +('2', '85', '3', '111315', '174481', '16'), +('2', '85', '3', '111013', '155225', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '85', '5', '111319', '176439', '16'), +('2', '85', '5', '111318', '173715', '16'), +('2', '85', '5', '111317', '173430', '16'), +('2', '85', '5', '111320', '173059', '16'), +('2', '85', '8', '111332', '177256', '16'), +('2', '85', '8', '111330', '175102', '16'), +('2', '85', '8', '111331', '172795', '16'), +('2', '85', '8', '111328', '172617', '16'), +('2', '85', '6', '111323', '177160', '16'), +('2', '85', '6', '111326', '175721', '16'), +('2', '85', '6', '111324', '174164', '16'), +('2', '85', '6', '111022', '155309', '16'), +('2', '85', '17', '56046', '114200', '16'), +('2', '85', '17', '56083', '114169', '16'), +('2', '85', '17', '81765', '114137', '16'), +('2', '85', '17', '104406', '96451', '16'), +('2', '85', '7', '56080', '109963', '16'), +('2', '85', '7', '94053', '109030', '16'), +('2', '85', '7', '89369', '103833', '16'), +('2', '85', '7', '104404', '92337', '16'), +('2', '85', '9', '67098', '169969', '16'), +('2', '85', '9', '81764', '106488', '16'), +('2', '85', '9', '56070', '106376', '16'), +('2', '85', '9', '62984', '106172', '16'), +('2', '85', '15', '111350', '178547', '16'), +('2', '85', '15', '111344', '177651', '16'), +('2', '85', '15', '111340', '177028', '16'), +('2', '85', '15', '111342', '174803', '16'), +('2', '85', '20', '111356', '177093', '16'), +('2', '85', '20', '111352', '176409', '16'), +('2', '85', '20', '111351', '173687', '16'), +('2', '85', '20', '111054', '155242', '16'), +('2', '85', '12', '105332', '128954', '16'), +('2', '85', '12', '56035', '108248', '16'), +('2', '85', '12', '56073', '107142', '16'), +('2', '85', '12', '89366', '100764', '16'), +('2', '85', '18', '56041', '113901', '16'), +('2', '85', '18', '94054', '112704', '16'), +('2', '85', '18', '62986', '112405', '16'), +('2', '85', '18', '62987', '110803', '16'), +('2', '85', '19', '81763', '110615', '16'), +('2', '85', '19', '62990', '110360', '16'), +('2', '85', '19', '56037', '110300', '16'), +('2', '85', '19', '56075', '110169', '16'), +('2', '85', '13', '111518', '170524', '16'), +('2', '85', '13', '111517', '168797', '16'), +('2', '85', '13', '111217', '154140', '16'), +('2', '85', '13', '111218', '154085', '16'), +('2', '85', '14', '111537', '177367', '16'), +('2', '85', '14', '111539', '175570', '16'), +('2', '85', '14', '111535', '175199', '16'), +('2', '85', '14', '111237', '155515', '16'), +('2', '85', '11', '111334', '176643', '16'), +('2', '85', '11', '111337', '176437', '16'), +('2', '85', '11', '111338', '172544', '16'), +('2', '85', '11', '111033', '154892', '16'), +('2', '85', '22', '12425', '0', '15'), +('2', '85', '22', '21807', '0', '15'), +('2', '85', '22', '39342', '0', '15'), +('2', '85', '22', '7867', '0', '15'), +('2', '85', '1', '107053', '129234', '15'), +('2', '85', '1', '107028', '128672', '15'), +('2', '85', '1', '107029', '128352', '15'), +('2', '85', '1', '107052', '128045', '15'), +('2', '85', '2', '62988', '110463', '15'), +('2', '85', '2', '62985', '110199', '15'), +('2', '85', '2', '94056', '109897', '15'), +('2', '85', '2', '89368', '102725', '15'), +('2', '85', '3', '107030', '130637', '15'), +('2', '85', '3', '107055', '128774', '15'), +('2', '85', '3', '106819', '122572', '15'), +('2', '85', '3', '106841', '121153', '15'), +('2', '85', '5', '107056', '128309', '15'), +('2', '85', '5', '107031', '128155', '15'), +('2', '85', '5', '106820', '123178', '15'), +('2', '85', '5', '106747', '109372', '15'), +('2', '85', '8', '107033', '130785', '15'), +('2', '85', '8', '107058', '130630', '15'), +('2', '85', '8', '106822', '125195', '15'), +('2', '85', '8', '106844', '121692', '15'), +('2', '85', '6', '107032', '130838', '15'), +('2', '85', '6', '107057', '129718', '15'), +('2', '85', '6', '106821', '123481', '15'), +('2', '85', '6', '106843', '122006', '15'), +('2', '85', '17', '56046', '114200', '15'), +('2', '85', '17', '56083', '114169', '15'), +('2', '85', '17', '81765', '114137', '15'), +('2', '85', '17', '104406', '96451', '15'), +('2', '85', '7', '56080', '109963', '15'), +('2', '85', '7', '94053', '109030', '15'), +('2', '85', '7', '89369', '103833', '15'), +('2', '85', '7', '104404', '92337', '15'), +('2', '85', '9', '67098', '169969', '15'), +('2', '85', '9', '81764', '106488', '15'), +('2', '85', '9', '56070', '106376', '15'), +('2', '85', '9', '62984', '106172', '15'), +('2', '85', '15', '107035', '130255', '15'), +('2', '85', '15', '107036', '129172', '15'), +('2', '85', '15', '107061', '127928', '15'), +('2', '85', '15', '107051', '127613', '15'), +('2', '85', '20', '107037', '132838', '15'), +('2', '85', '20', '107059', '131341', '15'), +('2', '85', '20', '106825', '125285', '15'), +('2', '85', '20', '106845', '122817', '15'), +('2', '85', '12', '105332', '128954', '15'), +('2', '85', '12', '56035', '108248', '15'), +('2', '85', '12', '56073', '107142', '15'), +('2', '85', '12', '89366', '100764', '15'), +('2', '85', '18', '56041', '113901', '15'), +('2', '85', '18', '94054', '112704', '15'), +('2', '85', '18', '62986', '112405', '15'), +('2', '85', '18', '62987', '110803', '15'), +('2', '85', '19', '81763', '110615', '15'), +('2', '85', '19', '62990', '110360', '15'), +('2', '85', '19', '56037', '110300', '15'), +('2', '85', '19', '56075', '110169', '15'), +('2', '85', '13', '62966', '109230', '15'), +('2', '85', '13', '106761', '108555', '15'), +('2', '85', '13', '93856', '103240', '15'), +('2', '85', '13', '62998', '90749', '15'), +('2', '85', '14', '107063', '132014', '15'), +('2', '85', '14', '107065', '129964', '15'), +('2', '85', '14', '106850', '124807', '15'), +('2', '85', '14', '106852', '122448', '15'), +('2', '85', '11', '107034', '130985', '15'), +('2', '85', '11', '106823', '123332', '15'), +('2', '85', '11', '56099', '108639', '15'), +('2', '85', '11', '62965', '108563', '15'), +('2', '86', '22', '12425', '0', '16'), +('2', '86', '22', '39342', '0', '16'), +('2', '86', '22', '7867', '0', '16'), +('2', '86', '22', '23597', '0', '16'), +('2', '86', '1', '111304', '176366', '16'), +('2', '86', '1', '111307', '176220', '16'), +('2', '86', '1', '111310', '174925', '16'), +('2', '86', '1', '111301', '174912', '16'), +('2', '86', '2', '62988', '110467', '16'), +('2', '86', '2', '62985', '110208', '16'), +('2', '86', '2', '94056', '109902', '16'), +('2', '86', '2', '89368', '102731', '16'), +('2', '86', '3', '111314', '177082', '16'), +('2', '86', '3', '111316', '175371', '16'), +('2', '86', '3', '111315', '174487', '16'), +('2', '86', '3', '111013', '155231', '16'), +('2', '86', '5', '111319', '176444', '16'), +('2', '86', '5', '111318', '173720', '16'), +('2', '86', '5', '111317', '173436', '16'), +('2', '86', '5', '111320', '173065', '16'), +('2', '86', '8', '111332', '177263', '16'), +('2', '86', '8', '111330', '175108', '16'), +('2', '86', '8', '111331', '172803', '16'), +('2', '86', '8', '111328', '172621', '16'), +('2', '86', '6', '111323', '177167', '16'), +('2', '86', '6', '111326', '175730', '16'), +('2', '86', '6', '111324', '174169', '16'), +('2', '86', '6', '111022', '155316', '16'), +('2', '86', '17', '56046', '114206', '16'), +('2', '86', '17', '56083', '114173', '16'), +('2', '86', '17', '81765', '114142', '16'), +('2', '86', '17', '104406', '96457', '16'), +('2', '86', '7', '56080', '109970', '16'), +('2', '86', '7', '94053', '109034', '16'), +('2', '86', '7', '89369', '103838', '16'), +('2', '86', '7', '104404', '92344', '16'), +('2', '86', '9', '67098', '171974', '16'), +('2', '86', '9', '81764', '106498', '16'), +('2', '86', '9', '56070', '106382', '16'), +('2', '86', '9', '62984', '106178', '16'), +('2', '86', '15', '111350', '178555', '16'), +('2', '86', '15', '111344', '177659', '16'), +('2', '86', '15', '111340', '177034', '16'), +('2', '86', '15', '111342', '174809', '16'), +('2', '86', '20', '111356', '177098', '16'), +('2', '86', '20', '111352', '176416', '16'), +('2', '86', '20', '111351', '173694', '16'), +('2', '86', '20', '111054', '155247', '16'), +('2', '86', '12', '105332', '128956', '16'), +('2', '86', '12', '56035', '108258', '16'), +('2', '86', '12', '56073', '107149', '16'), +('2', '86', '12', '89366', '100769', '16'), +('2', '86', '18', '56041', '113907', '16'), +('2', '86', '18', '94054', '112709', '16'), +('2', '86', '18', '62986', '112413', '16'), +('2', '86', '18', '62987', '110808', '16'), +('2', '86', '19', '81763', '110625', '16'), +('2', '86', '19', '62990', '110364', '16'), +('2', '86', '19', '56037', '110307', '16'), +('2', '86', '19', '56075', '110177', '16'), +('2', '86', '13', '111518', '170531', '16'), +('2', '86', '13', '111517', '168803', '16'), +('2', '86', '13', '111217', '154146', '16'), +('2', '86', '13', '111218', '154091', '16'), +('2', '86', '14', '111537', '177374', '16'), +('2', '86', '14', '111539', '175577', '16'), +('2', '86', '14', '111535', '175205', '16'), +('2', '86', '14', '111237', '155522', '16'), +('2', '86', '11', '111334', '176649', '16'), +('2', '86', '11', '111337', '176446', '16'), +('2', '86', '11', '111338', '172549', '16'), +('2', '86', '11', '111033', '154899', '16'), +('2', '87', '22', '12425', '0', '16'), +('2', '87', '22', '39342', '0', '16'), +('2', '87', '22', '7867', '0', '16'), +('2', '87', '22', '23597', '0', '16'), +('2', '87', '1', '111304', '176373', '16'), +('2', '87', '1', '111307', '176224', '16'), +('2', '87', '1', '111310', '174931', '16'), +('2', '87', '1', '111301', '174919', '16'), +('2', '87', '2', '62988', '110471', '16'), +('2', '87', '2', '62985', '110216', '16'), +('2', '87', '2', '94056', '109908', '16'), +('2', '87', '2', '89368', '102737', '16'), +('2', '87', '3', '111314', '177088', '16'), +('2', '87', '3', '111316', '175377', '16'), +('2', '87', '3', '111315', '174493', '16'), +('2', '87', '3', '111013', '155238', '16'), +('2', '87', '5', '111319', '176450', '16'), +('2', '87', '5', '111318', '173726', '16'), +('2', '87', '5', '111317', '173442', '16'), +('2', '87', '5', '111320', '173070', '16'), +('2', '87', '8', '111332', '177270', '16'), +('2', '87', '8', '111330', '175114', '16'), +('2', '87', '8', '111331', '172811', '16'), +('2', '87', '8', '111328', '172625', '16'), +('2', '87', '6', '111323', '177173', '16'), +('2', '87', '6', '111326', '175739', '16'), +('2', '87', '6', '111324', '174174', '16'), +('2', '87', '6', '111022', '155323', '16'), +('2', '87', '17', '56046', '114212', '16'), +('2', '87', '17', '56083', '114176', '16'), +('2', '87', '17', '81765', '114147', '16'), +('2', '87', '17', '104406', '96464', '16'), +('2', '87', '7', '56080', '109978', '16'), +('2', '87', '7', '94053', '109039', '16'), +('2', '87', '7', '89369', '103844', '16'), +('2', '87', '7', '104404', '92352', '16'), +('2', '87', '9', '67098', '173978', '16'), +('2', '87', '9', '81764', '106508', '16'), +('2', '87', '9', '56070', '106388', '16'), +('2', '87', '9', '62984', '106184', '16'), +('2', '87', '15', '111350', '178563', '16'), +('2', '87', '15', '111344', '177667', '16'), +('2', '87', '15', '111340', '177041', '16'), +('2', '87', '15', '111342', '174816', '16'), +('2', '87', '20', '111356', '177103', '16'), +('2', '87', '20', '111352', '176422', '16'), +('2', '87', '20', '111351', '173701', '16'), +('2', '87', '20', '111054', '155252', '16'), +('2', '87', '12', '105332', '128958', '16'), +('2', '87', '12', '56035', '108267', '16'), +('2', '87', '12', '56073', '107155', '16'), +('2', '87', '12', '89366', '100774', '16'), +('2', '87', '18', '56041', '113913', '16'), +('2', '87', '18', '94054', '112714', '16'), +('2', '87', '18', '62986', '112420', '16'), +('2', '87', '18', '62987', '110813', '16'), +('2', '87', '19', '81763', '110635', '16'), +('2', '87', '19', '62990', '110369', '16'), +('2', '87', '19', '56037', '110315', '16'), +('2', '87', '19', '56075', '110185', '16'), +('2', '87', '13', '111518', '170537', '16'), +('2', '87', '13', '111517', '168809', '16'), +('2', '87', '13', '111217', '154152', '16'), +('2', '87', '13', '111218', '154098', '16'), +('2', '87', '14', '111537', '177380', '16'), +('2', '87', '14', '111539', '175585', '16'), +('2', '87', '14', '111535', '175211', '16'), +('2', '87', '14', '111237', '155529', '16'), +('2', '87', '11', '111334', '176655', '16'), +('2', '87', '11', '111337', '176455', '16'), +('2', '87', '11', '111338', '172554', '16'), +('2', '87', '11', '111033', '154905', '16'), +('2', '88', '22', '12425', '0', '16'), +('2', '88', '22', '39342', '0', '16'), +('2', '88', '22', '7867', '0', '16'), +('2', '88', '22', '23597', '0', '16'), +('2', '88', '1', '111304', '176381', '16'), +('2', '88', '1', '111307', '176228', '16'), +('2', '88', '1', '111310', '174937', '16'), +('2', '88', '1', '111301', '174925', '16'), +('2', '88', '2', '62988', '110475', '16'), +('2', '88', '2', '62985', '110224', '16'), +('2', '88', '2', '94056', '109913', '16'), +('2', '88', '2', '89368', '102742', '16'), +('2', '88', '3', '111314', '177094', '16'), +('2', '88', '3', '111316', '175383', '16'), +('2', '88', '3', '111315', '174500', '16'), +('2', '88', '3', '111013', '155244', '16'), +('2', '88', '5', '111319', '176455', '16'), +('2', '88', '5', '111318', '173731', '16'), +('2', '88', '5', '111317', '173448', '16'), +('2', '88', '5', '111320', '173075', '16'), +('2', '88', '8', '111332', '177277', '16'), +('2', '88', '8', '111330', '175120', '16'), +('2', '88', '8', '111331', '172818', '16'), +('2', '88', '8', '111328', '172629', '16'), +('2', '88', '6', '111323', '177180', '16'), +('2', '88', '6', '111326', '175748', '16'), +('2', '88', '6', '111324', '174179', '16'), +('2', '88', '6', '111022', '155329', '16'), +('2', '88', '17', '56046', '114218', '16'), +('2', '88', '17', '56083', '114180', '16'), +('2', '88', '17', '81765', '114153', '16'), +('2', '88', '17', '104406', '96470', '16'), +('2', '88', '7', '56080', '109985', '16'), +('2', '88', '7', '94053', '109044', '16'), +('2', '88', '7', '89369', '103850', '16'), +('2', '88', '7', '104404', '92359', '16'), +('2', '88', '9', '67098', '175983', '16'), +('2', '88', '9', '81764', '106519', '16'), +('2', '88', '9', '56070', '106395', '16'), +('2', '88', '9', '62984', '106190', '16'), +('2', '88', '15', '111350', '178571', '16'), +('2', '88', '15', '111344', '177675', '16'), +('2', '88', '15', '111340', '177047', '16'), +('2', '88', '15', '111342', '174823', '16'), +('2', '88', '20', '111356', '177107', '16'), +('2', '88', '20', '111352', '176429', '16'), +('2', '88', '20', '111351', '173708', '16'), +('2', '88', '20', '111054', '155257', '16'), +('2', '88', '12', '105332', '128960', '16'), +('2', '88', '12', '56035', '108277', '16'), +('2', '88', '12', '56073', '107161', '16'), +('2', '88', '12', '89366', '100779', '16'), +('2', '88', '18', '56041', '113919', '16'), +('2', '88', '18', '94054', '112718', '16'), +('2', '88', '18', '62986', '112427', '16'), +('2', '88', '18', '62987', '110818', '16'), +('2', '88', '19', '81763', '110645', '16'), +('2', '88', '19', '62990', '110373', '16'), +('2', '88', '19', '56037', '110322', '16'), +('2', '88', '19', '56075', '110193', '16'), +('2', '88', '13', '111518', '170544', '16'), +('2', '88', '13', '111517', '168815', '16'), +('2', '88', '13', '111217', '154158', '16'), +('2', '88', '13', '111218', '154104', '16'), +('2', '88', '14', '111537', '177387', '16'), +('2', '88', '14', '111539', '175592', '16'), +('2', '88', '14', '111535', '175217', '16'), +('2', '88', '14', '111237', '155535', '16'), +('2', '88', '11', '111334', '176661', '16'), +('2', '88', '11', '111337', '176464', '16'), +('2', '88', '11', '111338', '172559', '16'), +('2', '88', '11', '111033', '154911', '16'), +('2', '89', '22', '12425', '0', '16'), +('2', '89', '22', '39342', '0', '16'), +('2', '89', '22', '7867', '0', '16'), +('2', '89', '22', '23597', '0', '16'), +('2', '89', '1', '111304', '176388', '16'), +('2', '89', '1', '111307', '176231', '16'), +('2', '89', '1', '111310', '174943', '16'), +('2', '89', '1', '111301', '174932', '16'), +('2', '89', '2', '62988', '110479', '16'), +('2', '89', '2', '62985', '110233', '16'), +('2', '89', '2', '94056', '109918', '16'), +('2', '89', '2', '89368', '102748', '16'), +('2', '89', '3', '111314', '177101', '16'), +('2', '89', '3', '111316', '175389', '16'), +('2', '89', '3', '111315', '174506', '16'), +('2', '89', '3', '111013', '155250', '16'), +('2', '89', '5', '111319', '176460', '16'), +('2', '89', '5', '111318', '173736', '16'), +('2', '89', '5', '111317', '173454', '16'), +('2', '89', '5', '111320', '173080', '16'), +('2', '89', '8', '111332', '177284', '16'), +('2', '89', '8', '111330', '175127', '16'), +('2', '89', '8', '111331', '172826', '16'), +('2', '89', '8', '111328', '172633', '16'), +('2', '89', '6', '111323', '177186', '16'), +('2', '89', '6', '111326', '175757', '16'), +('2', '89', '6', '111324', '174184', '16'), +('2', '89', '6', '111022', '155336', '16'), +('2', '89', '17', '56046', '114224', '16'), +('2', '89', '17', '56083', '114183', '16'), +('2', '89', '17', '81765', '114158', '16'), +('2', '89', '17', '104406', '96476', '16'), +('2', '89', '7', '56080', '109993', '16'), +('2', '89', '7', '94053', '109049', '16'), +('2', '89', '7', '89369', '103856', '16'), +('2', '89', '7', '104404', '92366', '16'), +('2', '89', '9', '67098', '177988', '16'), +('2', '89', '9', '81764', '106529', '16'), +('2', '89', '9', '56070', '106401', '16'), +('2', '89', '9', '62984', '106196', '16'), +('2', '89', '15', '111350', '178579', '16'), +('2', '89', '15', '111344', '177683', '16'), +('2', '89', '15', '111340', '177053', '16'), +('2', '89', '15', '111342', '174830', '16'), +('2', '89', '20', '111356', '177112', '16'), +('2', '89', '20', '111352', '176436', '16'), +('2', '89', '20', '111351', '173715', '16'), +('2', '89', '20', '111054', '155262', '16'), +('2', '89', '12', '105332', '128962', '16'), +('2', '89', '12', '56035', '108286', '16'), +('2', '89', '12', '56073', '107167', '16'), +('2', '89', '12', '89366', '100783', '16'), +('2', '89', '18', '56041', '113925', '16'), +('2', '89', '18', '94054', '112723', '16'), +('2', '89', '18', '62986', '112435', '16'), +('2', '89', '18', '62987', '110822', '16'), +('2', '89', '19', '81763', '110655', '16'), +('2', '89', '19', '62990', '110377', '16'), +('2', '89', '19', '56037', '110329', '16'), +('2', '89', '19', '56075', '110201', '16'), +('2', '89', '13', '111518', '170550', '16'), +('2', '89', '13', '111517', '168821', '16'), +('2', '89', '13', '111217', '154164', '16'), +('2', '89', '13', '111218', '154110', '16'), +('2', '89', '14', '111537', '177393', '16'), +('2', '89', '14', '111539', '175600', '16'), +('2', '89', '14', '111535', '175223', '16'), +('2', '89', '14', '111237', '155542', '16'), +('2', '89', '11', '111334', '176668', '16'), +('2', '89', '11', '111337', '176473', '16'), +('2', '89', '11', '111338', '172564', '16'), +('2', '89', '11', '111033', '154917', '16'), +('2', '90', '22', '12425', '0', '17'), +('2', '90', '22', '39342', '0', '17'), +('2', '90', '22', '7867', '0', '17'), +('2', '90', '22', '23597', '0', '17'), +('2', '90', '1', '111304', '176396', '17'), +('2', '90', '1', '111307', '176235', '17'), +('2', '90', '1', '111310', '174950', '17'), +('2', '90', '1', '111301', '174938', '17'), +('2', '90', '2', '62988', '110484', '17'), +('2', '90', '2', '62985', '110241', '17'), +('2', '90', '2', '94056', '109924', '17'), +('2', '90', '2', '89368', '102753', '17'), +('2', '90', '3', '111314', '177107', '17'), +('2', '90', '3', '111316', '175395', '17'), +('2', '90', '3', '111315', '174512', '17'), +('2', '90', '3', '111013', '155256', '17'), +('2', '90', '5', '111319', '176466', '17'), +('2', '90', '5', '111318', '173741', '17'), +('2', '90', '5', '111317', '173460', '17'), +('2', '90', '5', '111320', '173085', '17'), +('2', '90', '8', '111332', '177292', '17'), +('2', '90', '8', '111330', '175133', '17'), +('2', '90', '8', '111331', '172833', '17'), +('2', '90', '8', '111328', '172637', '17'), +('2', '90', '6', '111323', '177193', '17'), +('2', '90', '6', '111326', '175766', '17'), +('2', '90', '6', '111324', '174189', '17'), +('2', '90', '6', '111022', '155342', '17'), +('2', '90', '17', '56046', '114231', '17'), +('2', '90', '17', '56083', '114187', '17'), +('2', '90', '17', '81765', '114163', '17'), +('2', '90', '17', '104406', '96482', '17'), +('2', '90', '7', '56080', '110001', '17'), +('2', '90', '7', '94053', '109053', '17'), +('2', '90', '7', '89369', '103861', '17'), +('2', '90', '7', '104404', '92374', '17'), +('2', '90', '9', '67098', '179994', '17'), +('2', '90', '9', '81764', '106539', '17'), +('2', '90', '9', '56070', '106407', '17'), +('2', '90', '9', '62984', '106203', '17'), +('2', '90', '15', '111350', '178587', '17'), +('2', '90', '15', '111344', '177692', '17'), +('2', '90', '15', '111340', '177060', '17'), +('2', '90', '15', '111342', '174837', '17'), +('2', '90', '20', '111356', '177117', '17'), +('2', '90', '20', '111352', '176442', '17'), +('2', '90', '20', '111351', '173722', '17'), +('2', '90', '20', '111054', '155267', '17'), +('2', '90', '12', '105332', '128964', '17'), +('2', '90', '12', '56035', '108296', '17'), +('2', '90', '12', '56073', '107173', '17'), +('2', '90', '12', '89366', '100788', '17'), +('2', '90', '18', '56041', '113931', '17'), +('2', '90', '18', '94054', '112727', '17'), +('2', '90', '18', '62986', '112442', '17'), +('2', '90', '18', '62987', '110827', '17'), +('2', '90', '19', '81763', '110665', '17'), +('2', '90', '19', '62990', '110382', '17'), +('2', '90', '19', '56037', '110336', '17'), +('2', '90', '19', '56075', '110209', '17'), +('2', '90', '13', '111518', '170557', '17'), +('2', '90', '13', '111517', '168827', '17'), +('2', '90', '13', '111217', '154170', '17'), +('2', '90', '13', '111218', '154116', '17'), +('2', '90', '14', '111537', '177400', '17'), +('2', '90', '14', '111539', '175607', '17'), +('2', '90', '14', '111535', '175229', '17'), +('2', '90', '14', '111237', '155548', '17'), +('2', '90', '11', '111334', '176674', '17'), +('2', '90', '11', '111337', '176483', '17'), +('2', '90', '11', '111338', '172569', '17'), +('2', '90', '11', '111033', '154923', '17'), +('2', '91', '22', '12425', '0', '17'), +('2', '91', '22', '39342', '0', '17'), +('2', '91', '22', '7867', '0', '17'), +('2', '91', '22', '23597', '0', '17'), +('2', '91', '1', '111304', '176403', '17'), +('2', '91', '1', '111307', '176238', '17'), +('2', '91', '1', '111310', '174956', '17'), +('2', '91', '1', '111301', '174945', '17'), +('2', '91', '2', '62988', '110488', '17'), +('2', '91', '2', '62985', '110249', '17'), +('2', '91', '2', '94056', '109929', '17'), +('2', '91', '2', '89368', '102759', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '91', '3', '111314', '177113', '17'), +('2', '91', '3', '111316', '175401', '17'), +('2', '91', '3', '111315', '174518', '17'), +('2', '91', '3', '111013', '155262', '17'), +('2', '91', '5', '111319', '176471', '17'), +('2', '91', '5', '111318', '173746', '17'), +('2', '91', '5', '111317', '173466', '17'), +('2', '91', '5', '111320', '173090', '17'), +('2', '91', '8', '111332', '177299', '17'), +('2', '91', '8', '111330', '175139', '17'), +('2', '91', '8', '111331', '172841', '17'), +('2', '91', '8', '111328', '172642', '17'), +('2', '91', '6', '111323', '177199', '17'), +('2', '91', '6', '111326', '175775', '17'), +('2', '91', '6', '111324', '174194', '17'), +('2', '91', '6', '111022', '155349', '17'), +('2', '91', '17', '56046', '114237', '17'), +('2', '91', '17', '56083', '114190', '17'), +('2', '91', '17', '81765', '114168', '17'), +('2', '91', '17', '104406', '96488', '17'), +('2', '91', '7', '56080', '110008', '17'), +('2', '91', '7', '94053', '109058', '17'), +('2', '91', '7', '89369', '103867', '17'), +('2', '91', '7', '104404', '92381', '17'), +('2', '91', '9', '67098', '179999', '17'), +('2', '91', '9', '81764', '106549', '17'), +('2', '91', '9', '56070', '106413', '17'), +('2', '91', '9', '62984', '106209', '17'), +('2', '91', '15', '111350', '178595', '17'), +('2', '91', '15', '111344', '177700', '17'), +('2', '91', '15', '111340', '177066', '17'), +('2', '91', '15', '111342', '174844', '17'), +('2', '91', '20', '111356', '177122', '17'), +('2', '91', '20', '111352', '176449', '17'), +('2', '91', '20', '111351', '173729', '17'), +('2', '91', '20', '111054', '155271', '17'), +('2', '91', '12', '105332', '128966', '17'), +('2', '91', '12', '56035', '108305', '17'), +('2', '91', '12', '56073', '107180', '17'), +('2', '91', '12', '89366', '100793', '17'), +('2', '91', '18', '56041', '113937', '17'), +('2', '91', '18', '94054', '112732', '17'), +('2', '91', '18', '62986', '112450', '17'), +('2', '91', '18', '62987', '110832', '17'), +('2', '91', '19', '81763', '110675', '17'), +('2', '91', '19', '62990', '110386', '17'), +('2', '91', '19', '56037', '110343', '17'), +('2', '91', '19', '56075', '110217', '17'), +('2', '91', '13', '111518', '170563', '17'), +('2', '91', '13', '111517', '168833', '17'), +('2', '91', '13', '111217', '154176', '17'), +('2', '91', '13', '111218', '154123', '17'), +('2', '91', '14', '111537', '177406', '17'), +('2', '91', '14', '111539', '175615', '17'), +('2', '91', '14', '111535', '175235', '17'), +('2', '91', '14', '111237', '155555', '17'), +('2', '91', '11', '111334', '176680', '17'), +('2', '91', '11', '111337', '176492', '17'), +('2', '91', '11', '111338', '172573', '17'), +('2', '91', '11', '111033', '154929', '17'), +('2', '92', '22', '12425', '0', '17'), +('2', '92', '22', '39342', '0', '17'), +('2', '92', '22', '7867', '0', '17'), +('2', '92', '22', '23597', '0', '17'), +('2', '92', '1', '111304', '176411', '17'), +('2', '92', '1', '111307', '176242', '17'), +('2', '92', '1', '111310', '174962', '17'), +('2', '92', '1', '111301', '174951', '17'), +('2', '92', '2', '62988', '110492', '17'), +('2', '92', '2', '62985', '110257', '17'), +('2', '92', '2', '94056', '109934', '17'), +('2', '92', '2', '89368', '102764', '17'), +('2', '92', '3', '111314', '177119', '17'), +('2', '92', '3', '111316', '175408', '17'), +('2', '92', '3', '111315', '174524', '17'), +('2', '92', '3', '111013', '155268', '17'), +('2', '92', '5', '111319', '176476', '17'), +('2', '92', '5', '111318', '173751', '17'), +('2', '92', '5', '111317', '173472', '17'), +('2', '92', '5', '111320', '173096', '17'), +('2', '92', '8', '111332', '177306', '17'), +('2', '92', '8', '111330', '175145', '17'), +('2', '92', '8', '111331', '172848', '17'), +('2', '92', '8', '111328', '172646', '17'), +('2', '92', '6', '111323', '177206', '17'), +('2', '92', '6', '111326', '175784', '17'), +('2', '92', '6', '111324', '174199', '17'), +('2', '92', '6', '111022', '155356', '17'), +('2', '92', '17', '56046', '114243', '17'), +('2', '92', '17', '56083', '114194', '17'), +('2', '92', '17', '81765', '114173', '17'), +('2', '92', '17', '104406', '96495', '17'), +('2', '92', '7', '56080', '110016', '17'), +('2', '92', '7', '94053', '109063', '17'), +('2', '92', '7', '89369', '103873', '17'), +('2', '92', '7', '104404', '92388', '17'), +('2', '92', '9', '67098', '180004', '17'), +('2', '92', '9', '81764', '106560', '17'), +('2', '92', '9', '56070', '106419', '17'), +('2', '92', '9', '62984', '106215', '17'), +('2', '92', '15', '111350', '178603', '17'), +('2', '92', '15', '111344', '177708', '17'), +('2', '92', '15', '111340', '177072', '17'), +('2', '92', '15', '111342', '174851', '17'), +('2', '92', '20', '111356', '177127', '17'), +('2', '92', '20', '111352', '176455', '17'), +('2', '92', '20', '111351', '173736', '17'), +('2', '92', '20', '111054', '155276', '17'), +('2', '92', '12', '105332', '128968', '17'), +('2', '92', '12', '56035', '108315', '17'), +('2', '92', '12', '56073', '107186', '17'), +('2', '92', '12', '89366', '100798', '17'), +('2', '92', '18', '56041', '113943', '17'), +('2', '92', '18', '94054', '112736', '17'), +('2', '92', '18', '62986', '112457', '17'), +('2', '92', '18', '62987', '110837', '17'), +('2', '92', '19', '81763', '110685', '17'), +('2', '92', '19', '62990', '110390', '17'), +('2', '92', '19', '56037', '110350', '17'), +('2', '92', '19', '56075', '110225', '17'), +('2', '92', '13', '111518', '170570', '17'), +('2', '92', '13', '111517', '168840', '17'), +('2', '92', '13', '111217', '154182', '17'), +('2', '92', '13', '111218', '154129', '17'), +('2', '92', '14', '111537', '177413', '17'), +('2', '92', '14', '111539', '175623', '17'), +('2', '92', '14', '111535', '175241', '17'), +('2', '92', '14', '111237', '155561', '17'), +('2', '92', '11', '111334', '176686', '17'), +('2', '92', '11', '111337', '176501', '17'), +('2', '92', '11', '111338', '172578', '17'), +('2', '92', '11', '111033', '154936', '17'), +('2', '93', '22', '12425', '0', '17'), +('2', '93', '22', '39342', '0', '17'), +('2', '93', '22', '7867', '0', '17'), +('2', '93', '22', '23597', '0', '17'), +('2', '93', '1', '111304', '176418', '17'), +('2', '93', '1', '111307', '176246', '17'), +('2', '93', '1', '111310', '174968', '17'), +('2', '93', '1', '111301', '174958', '17'), +('2', '93', '2', '62988', '110496', '17'), +('2', '93', '2', '62985', '110266', '17'), +('2', '93', '2', '94056', '109940', '17'), +('2', '93', '2', '89368', '102770', '17'), +('2', '93', '3', '111314', '177125', '17'), +('2', '93', '3', '111316', '175414', '17'), +('2', '93', '3', '111315', '174531', '17'), +('2', '93', '3', '111013', '155275', '17'), +('2', '93', '5', '111319', '176482', '17'), +('2', '93', '5', '111318', '173756', '17'), +('2', '93', '5', '111317', '173478', '17'), +('2', '93', '5', '111320', '173101', '17'), +('2', '93', '8', '111332', '177313', '17'), +('2', '93', '8', '111330', '175151', '17'), +('2', '93', '8', '111331', '172856', '17'), +('2', '93', '8', '111328', '172650', '17'), +('2', '93', '6', '111323', '177213', '17'), +('2', '93', '6', '111326', '175793', '17'), +('2', '93', '6', '111324', '174204', '17'), +('2', '93', '6', '111022', '155362', '17'), +('2', '93', '17', '56046', '114249', '17'), +('2', '93', '17', '56083', '114197', '17'), +('2', '93', '17', '81765', '114178', '17'), +('2', '93', '17', '104406', '96501', '17'), +('2', '93', '7', '56080', '110023', '17'), +('2', '93', '7', '94053', '109068', '17'), +('2', '93', '7', '89369', '103879', '17'), +('2', '93', '7', '104404', '92396', '17'), +('2', '93', '9', '67098', '180010', '17'), +('2', '93', '9', '81764', '106570', '17'), +('2', '93', '9', '56070', '106425', '17'), +('2', '93', '9', '62984', '106221', '17'), +('2', '93', '15', '111350', '178611', '17'), +('2', '93', '15', '111344', '177716', '17'), +('2', '93', '15', '111340', '177079', '17'), +('2', '93', '15', '111342', '174858', '17'), +('2', '93', '20', '111356', '177132', '17'), +('2', '93', '20', '111352', '176462', '17'), +('2', '93', '20', '111351', '173743', '17'), +('2', '93', '20', '111054', '155281', '17'), +('2', '93', '12', '105332', '128971', '17'), +('2', '93', '12', '56035', '108324', '17'), +('2', '93', '12', '56073', '107192', '17'), +('2', '93', '12', '89366', '100802', '17'), +('2', '93', '18', '56041', '113949', '17'), +('2', '93', '18', '94054', '112741', '17'), +('2', '93', '18', '62986', '112465', '17'), +('2', '93', '18', '62987', '110842', '17'), +('2', '93', '19', '81763', '110695', '17'), +('2', '93', '19', '62990', '110395', '17'), +('2', '93', '19', '56037', '110358', '17'), +('2', '93', '19', '56075', '110233', '17'), +('2', '93', '13', '111518', '170576', '17'), +('2', '93', '13', '111517', '168846', '17'), +('2', '93', '13', '111217', '154188', '17'), +('2', '93', '13', '111218', '154135', '17'), +('2', '93', '14', '111537', '177420', '17'), +('2', '93', '14', '111539', '175630', '17'), +('2', '93', '14', '111535', '175247', '17'), +('2', '93', '14', '111237', '155568', '17'), +('2', '93', '11', '111334', '176692', '17'), +('2', '93', '11', '111337', '176510', '17'), +('2', '93', '11', '111338', '172583', '17'), +('2', '93', '11', '111033', '154942', '17'), +('2', '94', '22', '12425', '0', '17'), +('2', '94', '22', '39342', '0', '17'), +('2', '94', '22', '7867', '0', '17'), +('2', '94', '22', '23597', '0', '17'), +('2', '94', '1', '111304', '176426', '17'), +('2', '94', '1', '111307', '176249', '17'), +('2', '94', '1', '111310', '174975', '17'), +('2', '94', '1', '111301', '174964', '17'), +('2', '94', '2', '62988', '110500', '17'), +('2', '94', '2', '62985', '110274', '17'), +('2', '94', '2', '94056', '109945', '17'), +('2', '94', '2', '89368', '102775', '17'), +('2', '94', '3', '111314', '177131', '17'), +('2', '94', '3', '111316', '175420', '17'), +('2', '94', '3', '111315', '174537', '17'), +('2', '94', '3', '111013', '155281', '17'), +('2', '94', '5', '111319', '176487', '17'), +('2', '94', '5', '111318', '173761', '17'), +('2', '94', '5', '111317', '173484', '17'), +('2', '94', '5', '111320', '173106', '17'), +('2', '94', '8', '111332', '177320', '17'), +('2', '94', '8', '111330', '175157', '17'), +('2', '94', '8', '111331', '172864', '17'), +('2', '94', '8', '111328', '172654', '17'), +('2', '94', '6', '111323', '177219', '17'), +('2', '94', '6', '111326', '175802', '17'), +('2', '94', '6', '111324', '174209', '17'), +('2', '94', '6', '111022', '155369', '17'), +('2', '94', '17', '56046', '114256', '17'), +('2', '94', '17', '56083', '114201', '17'), +('2', '94', '17', '81765', '114183', '17'), +('2', '94', '17', '104406', '96507', '17'), +('2', '94', '7', '56080', '110031', '17'), +('2', '94', '7', '94053', '109072', '17'), +('2', '94', '7', '89369', '103885', '17'), +('2', '94', '7', '104404', '92403', '17'), +('2', '94', '9', '67098', '180015', '17'), +('2', '94', '9', '81764', '106580', '17'), +('2', '94', '9', '56070', '106431', '17'), +('2', '94', '9', '62984', '106228', '17'), +('2', '94', '15', '111350', '178619', '17'), +('2', '94', '15', '111344', '177724', '17'), +('2', '94', '15', '111340', '177085', '17'), +('2', '94', '15', '111342', '174865', '17'), +('2', '94', '20', '111356', '177136', '17'), +('2', '94', '20', '111352', '176468', '17'), +('2', '94', '20', '111351', '173749', '17'), +('2', '94', '20', '111054', '155286', '17'), +('2', '94', '12', '105332', '128973', '17'), +('2', '94', '12', '56035', '108334', '17'), +('2', '94', '12', '56073', '107198', '17'), +('2', '94', '12', '89366', '100807', '17'), +('2', '94', '18', '56041', '113955', '17'), +('2', '94', '18', '94054', '112746', '17'), +('2', '94', '18', '62986', '112472', '17'), +('2', '94', '18', '62987', '110847', '17'), +('2', '94', '19', '81763', '110704', '17'), +('2', '94', '19', '62990', '110399', '17'), +('2', '94', '19', '56037', '110365', '17'), +('2', '94', '19', '56075', '110241', '17'), +('2', '94', '13', '111518', '170583', '17'), +('2', '94', '13', '111517', '168852', '17'), +('2', '94', '13', '111217', '154194', '17'), +('2', '94', '13', '111218', '154141', '17'), +('2', '94', '14', '111537', '177426', '17'), +('2', '94', '14', '111539', '175638', '17'), +('2', '94', '14', '111535', '175253', '17'), +('2', '94', '14', '111237', '155575', '17'), +('2', '94', '11', '111334', '176698', '17'), +('2', '94', '11', '111337', '176519', '17'), +('2', '94', '11', '111338', '172588', '17'), +('2', '94', '11', '111033', '154948', '17'), +('2', '95', '22', '12425', '0', '18'), +('2', '95', '22', '39342', '0', '18'), +('2', '95', '22', '7867', '0', '18'), +('2', '95', '22', '23597', '0', '18'), +('2', '95', '1', '111304', '176433', '18'), +('2', '95', '1', '111307', '176253', '18'), +('2', '95', '1', '111310', '174981', '18'), +('2', '95', '1', '111301', '174971', '18'), +('2', '95', '2', '62988', '110504', '18'), +('2', '95', '2', '62985', '110282', '18'), +('2', '95', '2', '94056', '109950', '18'), +('2', '95', '2', '89368', '102781', '18'), +('2', '95', '3', '111314', '177138', '18'), +('2', '95', '3', '111316', '175426', '18'), +('2', '95', '3', '111315', '174543', '18'), +('2', '95', '3', '111013', '155287', '18'), +('2', '95', '5', '111319', '176493', '18'), +('2', '95', '5', '111318', '173766', '18'), +('2', '95', '5', '111317', '173490', '18'), +('2', '95', '5', '111320', '173111', '18'), +('2', '95', '8', '111332', '177327', '18'), +('2', '95', '8', '111330', '175163', '18'), +('2', '95', '8', '111331', '172871', '18'), +('2', '95', '8', '111328', '172658', '18'), +('2', '95', '6', '111323', '177226', '18'), +('2', '95', '6', '111326', '175811', '18'), +('2', '95', '6', '111324', '174214', '18'), +('2', '95', '6', '111022', '155375', '18'), +('2', '95', '17', '56046', '114262', '18'), +('2', '95', '17', '56083', '114204', '18'), +('2', '95', '17', '81765', '114188', '18'), +('2', '95', '17', '104406', '96513', '18'), +('2', '95', '7', '56080', '110038', '18'), +('2', '95', '7', '94053', '109077', '18'), +('2', '95', '7', '89369', '103890', '18'), +('2', '95', '7', '104404', '92410', '18'), +('2', '95', '9', '67098', '180020', '18'), +('2', '95', '9', '81764', '106591', '18'), +('2', '95', '9', '56070', '106437', '18'), +('2', '95', '9', '62984', '106234', '18'), +('2', '95', '15', '111350', '178627', '18'), +('2', '95', '15', '111344', '177732', '18'), +('2', '95', '15', '111340', '177091', '18'), +('2', '95', '15', '111342', '174872', '18'), +('2', '95', '20', '111356', '177141', '18'), +('2', '95', '20', '111352', '176475', '18'), +('2', '95', '20', '111351', '173756', '18'), +('2', '95', '20', '111054', '155291', '18'), +('2', '95', '12', '105332', '128975', '18'), +('2', '95', '12', '56035', '108343', '18'), +('2', '95', '12', '56073', '107204', '18'), +('2', '95', '12', '89366', '100812', '18'), +('2', '95', '18', '56041', '113961', '18'), +('2', '95', '18', '94054', '112750', '18'), +('2', '95', '18', '62986', '112479', '18'), +('2', '95', '18', '62987', '110852', '18'), +('2', '95', '19', '81763', '110714', '18'), +('2', '95', '19', '62990', '110403', '18'), +('2', '95', '19', '56037', '110372', '18'), +('2', '95', '19', '56075', '110249', '18'), +('2', '95', '13', '111518', '170589', '18'), +('2', '95', '13', '111517', '168858', '18'), +('2', '95', '13', '111217', '154200', '18'), +('2', '95', '13', '111218', '154148', '18'), +('2', '95', '14', '111537', '177433', '18'), +('2', '95', '14', '111539', '175645', '18'), +('2', '95', '14', '111535', '175259', '18'), +('2', '95', '14', '111237', '155581', '18'), +('2', '95', '11', '111334', '176704', '18'), +('2', '95', '11', '111337', '176528', '18'), +('2', '95', '11', '111338', '172593', '18'), +('2', '95', '11', '111033', '154954', '18'), +('2', '96', '22', '12425', '0', '18'), +('2', '96', '22', '39342', '0', '18'), +('2', '96', '22', '7867', '0', '18'), +('2', '96', '22', '23597', '0', '18'), +('2', '96', '1', '111304', '176441', '18'), +('2', '96', '1', '111307', '176256', '18'), +('2', '96', '1', '111310', '174987', '18'), +('2', '96', '1', '111301', '174978', '18'), +('2', '96', '2', '62988', '110508', '18'), +('2', '96', '2', '62985', '110291', '18'), +('2', '96', '2', '94056', '109956', '18'), +('2', '96', '2', '89368', '102787', '18'), +('2', '96', '3', '111314', '177144', '18'), +('2', '96', '3', '111316', '175432', '18'), +('2', '96', '3', '111315', '174549', '18'), +('2', '96', '3', '111013', '155293', '18'), +('2', '96', '5', '111319', '176498', '18'), +('2', '96', '5', '111318', '173772', '18'), +('2', '96', '5', '111317', '173496', '18'), +('2', '96', '5', '111320', '173116', '18'), +('2', '96', '8', '111332', '177334', '18'), +('2', '96', '8', '111330', '175169', '18'), +('2', '96', '8', '111331', '172879', '18'), +('2', '96', '8', '111328', '172662', '18'), +('2', '96', '6', '111323', '177232', '18'), +('2', '96', '6', '111326', '175820', '18'), +('2', '96', '6', '111324', '174219', '18'), +('2', '96', '6', '111022', '155382', '18'), +('2', '96', '17', '56046', '114268', '18'), +('2', '96', '17', '56083', '114208', '18'), +('2', '96', '17', '81765', '114194', '18'), +('2', '96', '17', '104406', '96520', '18'), +('2', '96', '7', '56080', '110046', '18'), +('2', '96', '7', '94053', '109082', '18'), +('2', '96', '7', '89369', '103896', '18'), +('2', '96', '7', '104404', '92418', '18'), +('2', '96', '9', '67098', '180026', '18'), +('2', '96', '9', '81764', '106601', '18'), +('2', '96', '9', '56070', '106443', '18'), +('2', '96', '9', '62984', '106240', '18'), +('2', '96', '15', '111350', '178635', '18'), +('2', '96', '15', '111344', '177740', '18'), +('2', '96', '15', '111340', '177098', '18'), +('2', '96', '15', '111342', '174879', '18'), +('2', '96', '20', '111356', '177146', '18'), +('2', '96', '20', '111352', '176481', '18'), +('2', '96', '20', '111351', '173763', '18'), +('2', '96', '20', '111054', '155296', '18'), +('2', '96', '12', '105332', '128977', '18'), +('2', '96', '12', '56035', '108353', '18'), +('2', '96', '12', '56073', '107211', '18'), +('2', '96', '12', '89366', '100817', '18'), +('2', '96', '18', '56041', '113967', '18'), +('2', '96', '18', '94054', '112755', '18'), +('2', '96', '18', '62986', '112487', '18'), +('2', '96', '18', '62987', '110857', '18'), +('2', '96', '19', '81763', '110724', '18'), +('2', '96', '19', '62990', '110408', '18'), +('2', '96', '19', '56037', '110379', '18'), +('2', '96', '19', '56075', '110257', '18'), +('2', '96', '13', '111518', '170596', '18'), +('2', '96', '13', '111517', '168864', '18'), +('2', '96', '13', '111217', '154206', '18'), +('2', '96', '13', '111218', '154154', '18'), +('2', '96', '14', '111537', '177439', '18'), +('2', '96', '14', '111539', '175653', '18'), +('2', '96', '14', '111535', '175265', '18'), +('2', '96', '14', '111237', '155588', '18'), +('2', '96', '11', '111334', '176711', '18'), +('2', '96', '11', '111337', '176537', '18'), +('2', '96', '11', '111338', '172598', '18'), +('2', '96', '11', '111033', '154960', '18'), +('2', '97', '22', '12425', '0', '18'), +('2', '97', '22', '39342', '0', '18'), +('2', '97', '22', '7867', '0', '18'), +('2', '97', '22', '23597', '0', '18'), +('2', '97', '1', '111304', '176449', '18'), +('2', '97', '1', '111307', '176260', '18'), +('2', '97', '1', '111310', '174993', '18'), +('2', '97', '1', '111301', '174984', '18'), +('2', '97', '2', '62988', '110512', '18'), +('2', '97', '2', '62985', '110299', '18'), +('2', '97', '2', '94056', '109961', '18'), +('2', '97', '2', '89368', '102792', '18'), +('2', '97', '3', '111314', '177150', '18'), +('2', '97', '3', '111316', '175438', '18'), +('2', '97', '3', '111315', '174556', '18'), +('2', '97', '3', '111013', '155299', '18'), +('2', '97', '5', '111319', '176503', '18'), +('2', '97', '5', '111318', '173777', '18'), +('2', '97', '5', '111317', '173502', '18'), +('2', '97', '5', '111320', '173121', '18'), +('2', '97', '8', '111332', '177341', '18'), +('2', '97', '8', '111330', '175176', '18'), +('2', '97', '8', '111331', '172886', '18'), +('2', '97', '8', '111328', '172667', '18'), +('2', '97', '6', '111323', '177239', '18'), +('2', '97', '6', '111326', '175829', '18'), +('2', '97', '6', '111324', '174224', '18'), +('2', '97', '6', '111022', '155388', '18'), +('2', '97', '17', '56046', '114274', '18'), +('2', '97', '17', '56083', '114211', '18'), +('2', '97', '17', '81765', '114199', '18'), +('2', '97', '17', '104406', '96526', '18'), +('2', '97', '7', '56080', '110053', '18'), +('2', '97', '7', '94053', '109087', '18'), +('2', '97', '7', '89369', '103902', '18'), +('2', '97', '7', '104404', '92425', '18'), +('2', '97', '9', '67098', '180031', '18'), +('2', '97', '9', '81764', '106611', '18'), +('2', '97', '9', '56070', '106449', '18'), +('2', '97', '9', '62984', '106246', '18'), +('2', '97', '15', '111350', '178643', '18'), +('2', '97', '15', '111344', '177748', '18'), +('2', '97', '15', '111340', '177104', '18'), +('2', '97', '15', '111342', '174886', '18'), +('2', '97', '20', '111356', '177151', '18'), +('2', '97', '20', '111352', '176488', '18'), +('2', '97', '20', '111351', '173770', '18'), +('2', '97', '20', '111054', '155300', '18'), +('2', '97', '12', '105332', '128979', '18'), +('2', '97', '12', '56035', '108362', '18'), +('2', '97', '12', '56073', '107217', '18'), +('2', '97', '12', '89366', '100821', '18'), +('2', '97', '18', '56041', '113973', '18'), +('2', '97', '18', '94054', '112759', '18'), +('2', '97', '18', '62986', '112494', '18'), +('2', '97', '18', '62987', '110862', '18'), +('2', '97', '19', '81763', '110734', '18'), +('2', '97', '19', '62990', '110412', '18'), +('2', '97', '19', '56037', '110386', '18'), +('2', '97', '19', '56075', '110265', '18'), +('2', '97', '13', '111518', '170602', '18'), +('2', '97', '13', '111517', '168870', '18'), +('2', '97', '13', '111217', '154212', '18'), +('2', '97', '13', '111218', '154160', '18'), +('2', '97', '14', '111537', '177446', '18'), +('2', '97', '14', '111539', '175660', '18'), +('2', '97', '14', '111535', '175270', '18'), +('2', '97', '14', '111237', '155594', '18'), +('2', '97', '11', '111334', '176717', '18'), +('2', '97', '11', '111337', '176547', '18'), +('2', '97', '11', '111338', '172603', '18'), +('2', '97', '11', '111033', '154966', '18'), +('2', '98', '22', '12425', '0', '18'), +('2', '98', '22', '39342', '0', '18'), +('2', '98', '22', '7867', '0', '18'), +('2', '98', '22', '23597', '0', '18'), +('2', '98', '1', '111304', '176456', '18'), +('2', '98', '1', '111307', '176264', '18'), +('2', '98', '1', '111310', '174999', '18'), +('2', '98', '1', '111301', '174991', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '98', '2', '62988', '110516', '18'), +('2', '98', '2', '62985', '110307', '18'), +('2', '98', '2', '94056', '109966', '18'), +('2', '98', '2', '89368', '102798', '18'), +('2', '98', '3', '111314', '177156', '18'), +('2', '98', '3', '111316', '175444', '18'), +('2', '98', '3', '111315', '174562', '18'), +('2', '98', '3', '111013', '155305', '18'), +('2', '98', '5', '111319', '176509', '18'), +('2', '98', '5', '111318', '173782', '18'), +('2', '98', '5', '111317', '173508', '18'), +('2', '98', '5', '111320', '173126', '18'), +('2', '98', '8', '111332', '177348', '18'), +('2', '98', '8', '111330', '175182', '18'), +('2', '98', '8', '111331', '172894', '18'), +('2', '98', '8', '111328', '172671', '18'), +('2', '98', '6', '111323', '177246', '18'), +('2', '98', '6', '111326', '175838', '18'), +('2', '98', '6', '111324', '174229', '18'), +('2', '98', '6', '111022', '155395', '18'), +('2', '98', '17', '56046', '114280', '18'), +('2', '98', '17', '56083', '114215', '18'), +('2', '98', '17', '81765', '114204', '18'), +('2', '98', '17', '104406', '96532', '18'), +('2', '98', '7', '56080', '110061', '18'), +('2', '98', '7', '94053', '109091', '18'), +('2', '98', '7', '89369', '103908', '18'), +('2', '98', '7', '104404', '92432', '18'), +('2', '98', '9', '67098', '180036', '18'), +('2', '98', '9', '81764', '106622', '18'), +('2', '98', '9', '56070', '106455', '18'), +('2', '98', '9', '62984', '106253', '18'), +('2', '98', '15', '111350', '178651', '18'), +('2', '98', '15', '111344', '177757', '18'), +('2', '98', '15', '111340', '177110', '18'), +('2', '98', '15', '111342', '174893', '18'), +('2', '98', '20', '111356', '177156', '18'), +('2', '98', '20', '111352', '176495', '18'), +('2', '98', '20', '111351', '173777', '18'), +('2', '98', '20', '111054', '155305', '18'), +('2', '98', '12', '105332', '128981', '18'), +('2', '98', '12', '56035', '108372', '18'), +('2', '98', '12', '56073', '107223', '18'), +('2', '98', '12', '89366', '100826', '18'), +('2', '98', '18', '56041', '113979', '18'), +('2', '98', '18', '94054', '112764', '18'), +('2', '98', '18', '62986', '112502', '18'), +('2', '98', '18', '62987', '110866', '18'), +('2', '98', '19', '81763', '110744', '18'), +('2', '98', '19', '62990', '110416', '18'), +('2', '98', '19', '56037', '110393', '18'), +('2', '98', '19', '56075', '110272', '18'), +('2', '98', '13', '111518', '170609', '18'), +('2', '98', '13', '111517', '168876', '18'), +('2', '98', '13', '111217', '154218', '18'), +('2', '98', '13', '111218', '154166', '18'), +('2', '98', '14', '111537', '177452', '18'), +('2', '98', '14', '111539', '175668', '18'), +('2', '98', '14', '111535', '175276', '18'), +('2', '98', '14', '111237', '155601', '18'), +('2', '98', '11', '111334', '176723', '18'), +('2', '98', '11', '111337', '176556', '18'), +('2', '98', '11', '111338', '172608', '18'), +('2', '98', '11', '111033', '154972', '18'), +('2', '99', '22', '12425', '0', '18'), +('2', '99', '22', '39342', '0', '18'), +('2', '99', '22', '7867', '0', '18'), +('2', '99', '22', '23597', '0', '18'), +('2', '99', '1', '111304', '176464', '18'), +('2', '99', '1', '111307', '176267', '18'), +('2', '99', '1', '111310', '175006', '18'), +('2', '99', '1', '111301', '174997', '18'), +('2', '99', '2', '62988', '110520', '18'), +('2', '99', '2', '62985', '110315', '18'), +('2', '99', '2', '94056', '109972', '18'), +('2', '99', '2', '89368', '102803', '18'), +('2', '99', '3', '111314', '177162', '18'), +('2', '99', '3', '111316', '175451', '18'), +('2', '99', '3', '111315', '174568', '18'), +('2', '99', '3', '111013', '155312', '18'), +('2', '99', '5', '111319', '176514', '18'), +('2', '99', '5', '111318', '173787', '18'), +('2', '99', '5', '111317', '173514', '18'), +('2', '99', '5', '111320', '173132', '18'), +('2', '99', '8', '111332', '177356', '18'), +('2', '99', '8', '111330', '175188', '18'), +('2', '99', '8', '111331', '172902', '18'), +('2', '99', '8', '111328', '172675', '18'), +('2', '99', '6', '111323', '177252', '18'), +('2', '99', '6', '111326', '175847', '18'), +('2', '99', '6', '111324', '174234', '18'), +('2', '99', '6', '111022', '155402', '18'), +('2', '99', '17', '56046', '114287', '18'), +('2', '99', '17', '56083', '114218', '18'), +('2', '99', '17', '81765', '114209', '18'), +('2', '99', '17', '104406', '96538', '18'), +('2', '99', '7', '56080', '110069', '18'), +('2', '99', '7', '94053', '109096', '18'), +('2', '99', '7', '89369', '103913', '18'), +('2', '99', '7', '104404', '92440', '18'), +('2', '99', '9', '67098', '180042', '18'), +('2', '99', '9', '81764', '106632', '18'), +('2', '99', '9', '56070', '106461', '18'), +('2', '99', '9', '62984', '106259', '18'), +('2', '99', '15', '111350', '178659', '18'), +('2', '99', '15', '111344', '177765', '18'), +('2', '99', '15', '111340', '177117', '18'), +('2', '99', '15', '111342', '174900', '18'), +('2', '99', '20', '111356', '177161', '18'), +('2', '99', '20', '111352', '176501', '18'), +('2', '99', '20', '111351', '173784', '18'), +('2', '99', '20', '111054', '155310', '18'), +('2', '99', '12', '105332', '128983', '18'), +('2', '99', '12', '56035', '108381', '18'), +('2', '99', '12', '56073', '107229', '18'), +('2', '99', '12', '89366', '100831', '18'), +('2', '99', '18', '56041', '113985', '18'), +('2', '99', '18', '94054', '112768', '18'), +('2', '99', '18', '62986', '112509', '18'), +('2', '99', '18', '62987', '110871', '18'), +('2', '99', '19', '81763', '110754', '18'), +('2', '99', '19', '62990', '110421', '18'), +('2', '99', '19', '56037', '110400', '18'), +('2', '99', '19', '56075', '110280', '18'), +('2', '99', '13', '111518', '170615', '18'), +('2', '99', '13', '111517', '168882', '18'), +('2', '99', '13', '111217', '154224', '18'), +('2', '99', '13', '111218', '154173', '18'), +('2', '99', '14', '111537', '177459', '18'), +('2', '99', '14', '111539', '175675', '18'), +('2', '99', '14', '111535', '175282', '18'), +('2', '99', '14', '111237', '155607', '18'), +('2', '99', '11', '111334', '176729', '18'), +('2', '99', '11', '111337', '176565', '18'), +('2', '99', '11', '111338', '172613', '18'), +('2', '99', '11', '111033', '154979', '18'), +('2', '100', '22', '12425', '0', '20'), +('2', '100', '22', '39342', '0', '20'), +('2', '100', '22', '7867', '0', '20'), +('2', '100', '22', '23597', '0', '20'), +('2', '100', '1', '98769', '284214', '20'), +('2', '100', '1', '111304', '176471', '20'), +('2', '100', '1', '111307', '176271', '20'), +('2', '100', '1', '111310', '175012', '20'), +('2', '100', '2', '62988', '110524', '20'), +('2', '100', '2', '62985', '110324', '20'), +('2', '100', '2', '94056', '109977', '20'), +('2', '100', '2', '89368', '102809', '20'), +('2', '100', '3', '111314', '177168', '20'), +('2', '100', '3', '111316', '175457', '20'), +('2', '100', '3', '111315', '174574', '20'), +('2', '100', '3', '111013', '155318', '20'), +('2', '100', '5', '111319', '176520', '20'), +('2', '100', '5', '111318', '173792', '20'), +('2', '100', '5', '111317', '173520', '20'), +('2', '100', '5', '111320', '173137', '20'), +('2', '100', '8', '111332', '177363', '20'), +('2', '100', '8', '111330', '175194', '20'), +('2', '100', '8', '111331', '172909', '20'), +('2', '100', '8', '111328', '172679', '20'), +('2', '100', '6', '111323', '177259', '20'), +('2', '100', '6', '111326', '175856', '20'), +('2', '100', '6', '111324', '174238', '20'), +('2', '100', '6', '111022', '155408', '20'), +('2', '100', '17', '56046', '114293', '20'), +('2', '100', '17', '56083', '114222', '20'), +('2', '100', '17', '81765', '114214', '20'), +('2', '100', '17', '104406', '96544', '20'), +('2', '100', '7', '56080', '110076', '20'), +('2', '100', '7', '94053', '109101', '20'), +('2', '100', '7', '89369', '103919', '20'), +('2', '100', '7', '104404', '92447', '20'), +('2', '100', '9', '67098', '180047', '20'), +('2', '100', '9', '81764', '106642', '20'), +('2', '100', '9', '56070', '106467', '20'), +('2', '100', '9', '62984', '106265', '20'), +('2', '100', '15', '111350', '178667', '20'), +('2', '100', '15', '111344', '177773', '20'), +('2', '100', '15', '111340', '177123', '20'), +('2', '100', '15', '111342', '174907', '20'), +('2', '100', '20', '111356', '177166', '20'), +('2', '100', '20', '111352', '176508', '20'), +('2', '100', '20', '111351', '173791', '20'), +('2', '100', '20', '111054', '155315', '20'), +('2', '100', '12', '105332', '128985', '20'), +('2', '100', '12', '56035', '108391', '20'), +('2', '100', '12', '56073', '107236', '20'), +('2', '100', '12', '89366', '100835', '20'), +('2', '100', '18', '56041', '113992', '20'), +('2', '100', '18', '94054', '112773', '20'), +('2', '100', '18', '62986', '112516', '20'), +('2', '100', '18', '62987', '110876', '20'), +('2', '100', '19', '81763', '110764', '20'), +('2', '100', '19', '62990', '110425', '20'), +('2', '100', '19', '56037', '110408', '20'), +('2', '100', '19', '56075', '110288', '20'), +('2', '100', '13', '111518', '170622', '20'), +('2', '100', '13', '111517', '168889', '20'), +('2', '100', '13', '111217', '154231', '20'), +('2', '100', '13', '111218', '154179', '20'), +('2', '100', '14', '111537', '177466', '20'), +('2', '100', '14', '111539', '175683', '20'), +('2', '100', '14', '111535', '175288', '20'), +('2', '100', '14', '111237', '155614', '20'), +('2', '100', '11', '133816', '229833', '20'), +('2', '100', '11', '111334', '176735', '20'), +('2', '100', '11', '111337', '176574', '20'), +('2', '100', '11', '111338', '172618', '20'), +('2', '100', '22', '12425', '0', '19'), +('2', '100', '22', '39342', '0', '19'), +('2', '100', '22', '7867', '0', '19'), +('2', '100', '22', '23597', '0', '19'), +('2', '100', '1', '98769', '284214', '19'), +('2', '100', '1', '111304', '176471', '19'), +('2', '100', '1', '111307', '176271', '19'), +('2', '100', '1', '111310', '175012', '19'), +('2', '100', '2', '62988', '110524', '19'), +('2', '100', '2', '62985', '110324', '19'), +('2', '100', '2', '94056', '109977', '19'), +('2', '100', '2', '89368', '102809', '19'), +('2', '100', '3', '111314', '177168', '19'), +('2', '100', '3', '111316', '175457', '19'), +('2', '100', '3', '111315', '174574', '19'), +('2', '100', '3', '111013', '155318', '19'), +('2', '100', '5', '111319', '176520', '19'), +('2', '100', '5', '111318', '173792', '19'), +('2', '100', '5', '111317', '173520', '19'), +('2', '100', '5', '111320', '173137', '19'), +('2', '100', '8', '111332', '177363', '19'), +('2', '100', '8', '111330', '175194', '19'), +('2', '100', '8', '111331', '172909', '19'), +('2', '100', '8', '111328', '172679', '19'), +('2', '100', '6', '111323', '177259', '19'), +('2', '100', '6', '111326', '175856', '19'), +('2', '100', '6', '111324', '174238', '19'), +('2', '100', '6', '111022', '155408', '19'), +('2', '100', '17', '56046', '114293', '19'), +('2', '100', '17', '56083', '114222', '19'), +('2', '100', '17', '81765', '114214', '19'), +('2', '100', '17', '104406', '96544', '19'), +('2', '100', '7', '56080', '110076', '19'), +('2', '100', '7', '94053', '109101', '19'), +('2', '100', '7', '89369', '103919', '19'), +('2', '100', '7', '104404', '92447', '19'), +('2', '100', '9', '67098', '180047', '19'), +('2', '100', '9', '81764', '106642', '19'), +('2', '100', '9', '56070', '106467', '19'), +('2', '100', '9', '62984', '106265', '19'), +('2', '100', '15', '111350', '178667', '19'), +('2', '100', '15', '111344', '177773', '19'), +('2', '100', '15', '111340', '177123', '19'), +('2', '100', '15', '111342', '174907', '19'), +('2', '100', '20', '111356', '177166', '19'), +('2', '100', '20', '111352', '176508', '19'), +('2', '100', '20', '111351', '173791', '19'), +('2', '100', '20', '111054', '155315', '19'), +('2', '100', '12', '105332', '128985', '19'), +('2', '100', '12', '56035', '108391', '19'), +('2', '100', '12', '56073', '107236', '19'), +('2', '100', '12', '89366', '100835', '19'), +('2', '100', '18', '56041', '113992', '19'), +('2', '100', '18', '94054', '112773', '19'), +('2', '100', '18', '62986', '112516', '19'), +('2', '100', '18', '62987', '110876', '19'), +('2', '100', '19', '81763', '110764', '19'), +('2', '100', '19', '62990', '110425', '19'), +('2', '100', '19', '56037', '110408', '19'), +('2', '100', '19', '56075', '110288', '19'), +('2', '100', '13', '111518', '170621', '19'), +('2', '100', '13', '111517', '168888', '19'), +('2', '100', '13', '111217', '154230', '19'), +('2', '100', '13', '111218', '154179', '19'), +('2', '100', '14', '111537', '177466', '19'), +('2', '100', '14', '111539', '175683', '19'), +('2', '100', '14', '111535', '175288', '19'), +('2', '100', '14', '111237', '155614', '19'), +('2', '100', '11', '133816', '229833', '19'), +('2', '100', '11', '111334', '176735', '19'), +('2', '100', '11', '111337', '176574', '19'), +('2', '100', '11', '111338', '172618', '19'), +('2', '101', '22', '12425', '0', '20'), +('2', '101', '22', '39342', '0', '20'), +('2', '101', '22', '7867', '0', '20'), +('2', '101', '22', '23597', '0', '20'), +('2', '101', '1', '98769', '284218', '20'), +('2', '101', '1', '111304', '176479', '20'), +('2', '101', '1', '111307', '176275', '20'), +('2', '101', '1', '111310', '175018', '20'), +('2', '101', '2', '62988', '110528', '20'), +('2', '101', '2', '62985', '110332', '20'), +('2', '101', '2', '94056', '109982', '20'), +('2', '101', '2', '89368', '102814', '20'), +('2', '101', '3', '111314', '177175', '20'), +('2', '101', '3', '111316', '175463', '20'), +('2', '101', '3', '111315', '174580', '20'), +('2', '101', '3', '111013', '155324', '20'), +('2', '101', '5', '111319', '176525', '20'), +('2', '101', '5', '111318', '173797', '20'), +('2', '101', '5', '111317', '173526', '20'), +('2', '101', '5', '111320', '173142', '20'), +('2', '101', '8', '111332', '177370', '20'), +('2', '101', '8', '111330', '175200', '20'), +('2', '101', '8', '111331', '172917', '20'), +('2', '101', '8', '111328', '172683', '20'), +('2', '101', '6', '111323', '177265', '20'), +('2', '101', '6', '111326', '175865', '20'), +('2', '101', '6', '111324', '174243', '20'), +('2', '101', '6', '111022', '155415', '20'), +('2', '101', '17', '56046', '114299', '20'), +('2', '101', '17', '56083', '114225', '20'), +('2', '101', '17', '81765', '114219', '20'), +('2', '101', '17', '104406', '96551', '20'), +('2', '101', '7', '56080', '110084', '20'), +('2', '101', '7', '94053', '109106', '20'), +('2', '101', '7', '89369', '103925', '20'), +('2', '101', '7', '104404', '92454', '20'), +('2', '101', '9', '67098', '180053', '20'), +('2', '101', '9', '81764', '106653', '20'), +('2', '101', '9', '56070', '106473', '20'), +('2', '101', '9', '62984', '106271', '20'), +('2', '101', '15', '111350', '178675', '20'), +('2', '101', '15', '111344', '177781', '20'), +('2', '101', '15', '111340', '177129', '20'), +('2', '101', '15', '111342', '174914', '20'), +('2', '101', '20', '111356', '177170', '20'), +('2', '101', '20', '111352', '176514', '20'), +('2', '101', '20', '111351', '173798', '20'), +('2', '101', '20', '111054', '155320', '20'), +('2', '101', '12', '105332', '128987', '20'), +('2', '101', '12', '56035', '108400', '20'), +('2', '101', '12', '56073', '107242', '20'), +('2', '101', '12', '89366', '100840', '20'), +('2', '101', '18', '56041', '113998', '20'), +('2', '101', '18', '94054', '112778', '20'), +('2', '101', '18', '62986', '112524', '20'), +('2', '101', '18', '62987', '110881', '20'), +('2', '101', '19', '81763', '110774', '20'), +('2', '101', '19', '62990', '110429', '20'), +('2', '101', '19', '56037', '110415', '20'), +('2', '101', '19', '56075', '110296', '20'), +('2', '101', '13', '111518', '170628', '20'), +('2', '101', '13', '111517', '168895', '20'), +('2', '101', '13', '111217', '154237', '20'), +('2', '101', '13', '111218', '154186', '20'), +('2', '101', '14', '111537', '177472', '20'), +('2', '101', '14', '111539', '175690', '20'), +('2', '101', '14', '111535', '175294', '20'), +('2', '101', '14', '111237', '155621', '20'), +('2', '101', '11', '133816', '229838', '20'), +('2', '101', '11', '111334', '176741', '20'), +('2', '101', '11', '111337', '176583', '20'), +('2', '101', '11', '111338', '172623', '20'), +('2', '102', '22', '12425', '0', '20'), +('2', '102', '22', '39342', '0', '20'), +('2', '102', '22', '7867', '0', '20'), +('2', '102', '22', '23597', '0', '20'), +('2', '102', '1', '98769', '284222', '20'), +('2', '102', '1', '111304', '176486', '20'), +('2', '102', '1', '111307', '176278', '20'), +('2', '102', '1', '111310', '175024', '20'), +('2', '102', '2', '62988', '110532', '20'), +('2', '102', '2', '62985', '110340', '20'), +('2', '102', '2', '94056', '109988', '20'), +('2', '102', '2', '89368', '102820', '20'), +('2', '102', '3', '111314', '177181', '20'), +('2', '102', '3', '111316', '175469', '20'), +('2', '102', '3', '111315', '174587', '20'), +('2', '102', '3', '111013', '155330', '20'), +('2', '102', '5', '111319', '176530', '20'), +('2', '102', '5', '111318', '173802', '20'), +('2', '102', '5', '111317', '173532', '20'), +('2', '102', '5', '111320', '173147', '20'), +('2', '102', '8', '111332', '177377', '20'), +('2', '102', '8', '111330', '175206', '20'), +('2', '102', '8', '111331', '172924', '20'), +('2', '102', '8', '111328', '172688', '20'), +('2', '102', '6', '111323', '177272', '20'), +('2', '102', '6', '111326', '175874', '20'), +('2', '102', '6', '111324', '174248', '20'), +('2', '102', '6', '111022', '155421', '20'), +('2', '102', '17', '56046', '114305', '20'), +('2', '102', '17', '56083', '114229', '20'), +('2', '102', '17', '81765', '114224', '20'), +('2', '102', '17', '104406', '96557', '20'), +('2', '102', '7', '56080', '110091', '20'), +('2', '102', '7', '94053', '109110', '20'), +('2', '102', '7', '89369', '103931', '20'), +('2', '102', '7', '104404', '92462', '20'), +('2', '102', '9', '67098', '180058', '20'), +('2', '102', '9', '81764', '106663', '20'), +('2', '102', '9', '56070', '106480', '20'), +('2', '102', '9', '62984', '106277', '20'), +('2', '102', '15', '111350', '178683', '20'), +('2', '102', '15', '111344', '177789', '20'), +('2', '102', '15', '111340', '177136', '20'), +('2', '102', '15', '111342', '174921', '20'), +('2', '102', '20', '111356', '177175', '20'), +('2', '102', '20', '111352', '176521', '20'), +('2', '102', '20', '111351', '173805', '20'), +('2', '102', '20', '111054', '155325', '20'), +('2', '102', '12', '105332', '128989', '20'), +('2', '102', '12', '56035', '108410', '20'), +('2', '102', '12', '56073', '107248', '20'), +('2', '102', '12', '89366', '100845', '20'), +('2', '102', '18', '56041', '114004', '20'), +('2', '102', '18', '94054', '112782', '20'), +('2', '102', '18', '62986', '112531', '20'), +('2', '102', '18', '62987', '110886', '20'), +('2', '102', '19', '81763', '110784', '20'), +('2', '102', '19', '62990', '110434', '20'), +('2', '102', '19', '56037', '110422', '20'), +('2', '102', '19', '56075', '110304', '20'), +('2', '102', '13', '111518', '170635', '20'), +('2', '102', '13', '111517', '168901', '20'), +('2', '102', '13', '111217', '154243', '20'), +('2', '102', '13', '111218', '154192', '20'), +('2', '102', '14', '111537', '177479', '20'), +('2', '102', '14', '111539', '175698', '20'), +('2', '102', '14', '111535', '175300', '20'), +('2', '102', '14', '111237', '155627', '20'), +('2', '102', '11', '133816', '229843', '20'), +('2', '102', '11', '111334', '176748', '20'), +('2', '102', '11', '111337', '176592', '20'), +('2', '102', '11', '111338', '172628', '20'), +('2', '103', '22', '12425', '0', '20'), +('2', '103', '22', '39342', '0', '20'), +('2', '103', '22', '7867', '0', '20'), +('2', '103', '22', '23597', '0', '20'), +('2', '103', '1', '98769', '284226', '20'), +('2', '103', '1', '111304', '176494', '20'), +('2', '103', '1', '111307', '176282', '20'), +('2', '103', '1', '111310', '175031', '20'), +('2', '103', '2', '62988', '110536', '20'), +('2', '103', '2', '62985', '110349', '20'), +('2', '103', '2', '94056', '109993', '20'), +('2', '103', '2', '89368', '102825', '20'), +('2', '103', '3', '111314', '177187', '20'), +('2', '103', '3', '111316', '175475', '20'), +('2', '103', '3', '111315', '174593', '20'), +('2', '103', '3', '111013', '155336', '20'), +('2', '103', '5', '111319', '176536', '20'), +('2', '103', '5', '111318', '173807', '20'), +('2', '103', '5', '111317', '173538', '20'), +('2', '103', '5', '111320', '173152', '20'), +('2', '103', '8', '111332', '177384', '20'), +('2', '103', '8', '111330', '175212', '20'), +('2', '103', '8', '111331', '172932', '20'), +('2', '103', '8', '111328', '172692', '20'), +('2', '103', '6', '111323', '177278', '20'), +('2', '103', '6', '111326', '175882', '20'), +('2', '103', '6', '111324', '174253', '20'), +('2', '103', '6', '111022', '155428', '20'), +('2', '103', '17', '56046', '114311', '20'), +('2', '103', '17', '56083', '114232', '20'), +('2', '103', '17', '81765', '114229', '20'), +('2', '103', '17', '104406', '96563', '20'), +('2', '103', '7', '56080', '110099', '20'), +('2', '103', '7', '94053', '109115', '20'), +('2', '103', '7', '89369', '103936', '20'), +('2', '103', '7', '104404', '92469', '20'), +('2', '103', '9', '67098', '180063', '20'), +('2', '103', '9', '81764', '106673', '20'), +('2', '103', '9', '56070', '106486', '20'), +('2', '103', '9', '62984', '106284', '20'), +('2', '103', '15', '111350', '178691', '20'), +('2', '103', '15', '111344', '177797', '20'), +('2', '103', '15', '111340', '177142', '20'), +('2', '103', '15', '111342', '174928', '20'), +('2', '103', '20', '111356', '177180', '20'), +('2', '103', '20', '111352', '176527', '20'), +('2', '103', '20', '111351', '173812', '20'), +('2', '103', '20', '111054', '155329', '20'), +('2', '103', '12', '105332', '128992', '20'), +('2', '103', '12', '56035', '108419', '20'), +('2', '103', '12', '56073', '107254', '20'), +('2', '103', '12', '89366', '100850', '20'), +('2', '103', '18', '56041', '114010', '20'), +('2', '103', '18', '94054', '112787', '20'), +('2', '103', '18', '62986', '112539', '20'), +('2', '103', '18', '62987', '110891', '20'), +('2', '103', '19', '81763', '110794', '20'), +('2', '103', '19', '62990', '110438', '20'), +('2', '103', '19', '56037', '110429', '20'), +('2', '103', '19', '56075', '110312', '20'), +('2', '103', '13', '111518', '170641', '20'), +('2', '103', '13', '111517', '168907', '20'), +('2', '103', '13', '111217', '154249', '20'), +('2', '103', '13', '111218', '154198', '20'), +('2', '103', '14', '111537', '177485', '20'), +('2', '103', '14', '111539', '175705', '20'), +('2', '103', '14', '111535', '175306', '20'), +('2', '103', '14', '111237', '155634', '20'), +('2', '103', '11', '133816', '229848', '20'), +('2', '103', '11', '111334', '176754', '20'), +('2', '103', '11', '111337', '176601', '20'), +('2', '103', '11', '111338', '172633', '20'), +('2', '104', '22', '12425', '0', '20'), +('2', '104', '22', '39342', '0', '20'), +('2', '104', '22', '7867', '0', '20'), +('2', '104', '22', '23597', '0', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '104', '1', '98769', '284230', '20'), +('2', '104', '1', '111304', '176501', '20'), +('2', '104', '1', '111307', '176285', '20'), +('2', '104', '1', '111310', '175037', '20'), +('2', '104', '2', '62988', '110540', '20'), +('2', '104', '2', '62985', '110357', '20'), +('2', '104', '2', '94056', '109998', '20'), +('2', '104', '2', '89368', '102831', '20'), +('2', '104', '3', '111314', '177193', '20'), +('2', '104', '3', '111316', '175481', '20'), +('2', '104', '3', '111315', '174599', '20'), +('2', '104', '3', '111013', '155342', '20'), +('2', '104', '5', '111319', '176541', '20'), +('2', '104', '5', '111318', '173812', '20'), +('2', '104', '5', '111317', '173544', '20'), +('2', '104', '5', '111320', '173157', '20'), +('2', '104', '8', '111332', '177391', '20'), +('2', '104', '8', '111330', '175218', '20'), +('2', '104', '8', '111331', '172939', '20'), +('2', '104', '8', '111328', '172696', '20'), +('2', '104', '6', '111323', '177285', '20'), +('2', '104', '6', '111326', '175891', '20'), +('2', '104', '6', '111324', '174258', '20'), +('2', '104', '6', '111022', '155434', '20'), +('2', '104', '17', '56046', '114318', '20'), +('2', '104', '17', '56083', '114236', '20'), +('2', '104', '17', '81765', '114235', '20'), +('2', '104', '17', '104406', '96569', '20'), +('2', '104', '7', '56080', '110106', '20'), +('2', '104', '7', '94053', '109120', '20'), +('2', '104', '7', '89369', '103942', '20'), +('2', '104', '7', '104404', '92476', '20'), +('2', '104', '9', '67098', '180069', '20'), +('2', '104', '9', '81764', '106683', '20'), +('2', '104', '9', '56070', '106492', '20'), +('2', '104', '9', '62984', '106290', '20'), +('2', '104', '15', '111350', '178699', '20'), +('2', '104', '15', '111344', '177805', '20'), +('2', '104', '15', '111340', '177148', '20'), +('2', '104', '15', '111342', '174935', '20'), +('2', '104', '20', '111356', '177185', '20'), +('2', '104', '20', '111352', '176534', '20'), +('2', '104', '20', '111351', '173818', '20'), +('2', '104', '20', '111054', '155334', '20'), +('2', '104', '12', '105332', '128994', '20'), +('2', '104', '12', '56035', '108429', '20'), +('2', '104', '12', '56073', '107260', '20'), +('2', '104', '12', '89366', '100854', '20'), +('2', '104', '18', '56041', '114016', '20'), +('2', '104', '18', '94054', '112791', '20'), +('2', '104', '18', '62986', '112546', '20'), +('2', '104', '18', '62987', '110896', '20'), +('2', '104', '19', '81763', '110804', '20'), +('2', '104', '19', '62990', '110443', '20'), +('2', '104', '19', '56037', '110436', '20'), +('2', '104', '19', '56075', '110320', '20'), +('2', '104', '13', '111518', '170648', '20'), +('2', '104', '13', '111517', '168914', '20'), +('2', '104', '13', '111217', '154255', '20'), +('2', '104', '13', '111218', '154204', '20'), +('2', '104', '14', '111537', '177492', '20'), +('2', '104', '14', '111539', '175713', '20'), +('2', '104', '14', '111535', '175312', '20'), +('2', '104', '14', '111237', '155640', '20'), +('2', '104', '11', '133816', '229853', '20'), +('2', '104', '11', '111334', '176760', '20'), +('2', '104', '11', '111337', '176611', '20'), +('2', '104', '11', '111338', '172638', '20'), +('2', '105', '22', '12425', '0', '23'), +('2', '105', '22', '39342', '0', '23'), +('2', '105', '22', '7867', '0', '23'), +('2', '105', '22', '23597', '0', '23'), +('2', '105', '1', '98769', '284235', '23'), +('2', '105', '1', '111304', '176509', '23'), +('2', '105', '1', '111307', '176289', '23'), +('2', '105', '1', '111310', '175043', '23'), +('2', '105', '2', '62988', '110544', '23'), +('2', '105', '2', '62985', '110365', '23'), +('2', '105', '2', '94056', '110004', '23'), +('2', '105', '2', '89368', '102837', '23'), +('2', '105', '3', '111314', '177199', '23'), +('2', '105', '3', '111316', '175487', '23'), +('2', '105', '3', '111315', '174605', '23'), +('2', '105', '3', '111013', '155349', '23'), +('2', '105', '5', '111319', '176547', '23'), +('2', '105', '5', '111318', '173818', '23'), +('2', '105', '5', '111317', '173550', '23'), +('2', '105', '5', '111320', '173163', '23'), +('2', '105', '8', '111332', '177398', '23'), +('2', '105', '8', '111330', '175225', '23'), +('2', '105', '8', '111331', '172947', '23'), +('2', '105', '8', '111328', '172700', '23'), +('2', '105', '6', '111323', '177292', '23'), +('2', '105', '6', '111326', '175900', '23'), +('2', '105', '6', '111324', '174263', '23'), +('2', '105', '6', '111022', '155441', '23'), +('2', '105', '17', '56046', '114324', '23'), +('2', '105', '17', '81765', '114240', '23'), +('2', '105', '17', '56083', '114239', '23'), +('2', '105', '17', '104406', '96576', '23'), +('2', '105', '7', '56080', '110114', '23'), +('2', '105', '7', '94053', '109125', '23'), +('2', '105', '7', '89369', '103948', '23'), +('2', '105', '7', '104404', '92484', '23'), +('2', '105', '9', '67098', '180074', '23'), +('2', '105', '9', '81764', '106694', '23'), +('2', '105', '9', '56070', '106498', '23'), +('2', '105', '9', '62984', '106296', '23'), +('2', '105', '15', '111350', '178707', '23'), +('2', '105', '15', '111344', '177814', '23'), +('2', '105', '15', '111340', '177155', '23'), +('2', '105', '15', '111342', '174942', '23'), +('2', '105', '20', '111356', '177190', '23'), +('2', '105', '20', '111352', '176540', '23'), +('2', '105', '20', '111351', '173825', '23'), +('2', '105', '20', '111054', '155339', '23'), +('2', '105', '12', '105332', '128996', '23'), +('2', '105', '12', '56035', '108438', '23'), +('2', '105', '12', '56073', '107267', '23'), +('2', '105', '12', '89366', '100859', '23'), +('2', '105', '18', '56041', '114022', '23'), +('2', '105', '18', '94054', '112796', '23'), +('2', '105', '18', '62986', '112554', '23'), +('2', '105', '18', '62987', '110901', '23'), +('2', '105', '19', '81763', '110814', '23'), +('2', '105', '19', '62990', '110447', '23'), +('2', '105', '19', '56037', '110443', '23'), +('2', '105', '19', '56075', '110328', '23'), +('2', '105', '13', '111518', '170654', '23'), +('2', '105', '13', '111517', '168920', '23'), +('2', '105', '13', '111217', '154261', '23'), +('2', '105', '13', '111218', '154211', '23'), +('2', '105', '14', '111537', '177498', '23'), +('2', '105', '14', '111539', '175720', '23'), +('2', '105', '14', '111535', '175318', '23'), +('2', '105', '14', '111237', '155647', '23'), +('2', '105', '11', '133816', '229858', '23'), +('2', '105', '11', '111334', '176766', '23'), +('2', '105', '11', '111337', '176620', '23'), +('2', '105', '11', '111338', '172643', '23'), +('2', '105', '22', '12425', '0', '22'), +('2', '105', '22', '39342', '0', '22'), +('2', '105', '22', '7867', '0', '22'), +('2', '105', '22', '23597', '0', '22'), +('2', '105', '1', '98769', '284235', '22'), +('2', '105', '1', '111304', '176509', '22'), +('2', '105', '1', '111307', '176289', '22'), +('2', '105', '1', '111310', '175043', '22'), +('2', '105', '2', '62988', '110544', '22'), +('2', '105', '2', '62985', '110365', '22'), +('2', '105', '2', '94056', '110004', '22'), +('2', '105', '2', '89368', '102837', '22'), +('2', '105', '3', '111314', '177199', '22'), +('2', '105', '3', '111316', '175487', '22'), +('2', '105', '3', '111315', '174605', '22'), +('2', '105', '3', '111013', '155349', '22'), +('2', '105', '5', '111319', '176547', '22'), +('2', '105', '5', '111318', '173818', '22'), +('2', '105', '5', '111317', '173550', '22'), +('2', '105', '5', '111320', '173163', '22'), +('2', '105', '8', '111332', '177398', '22'), +('2', '105', '8', '111330', '175225', '22'), +('2', '105', '8', '111331', '172947', '22'), +('2', '105', '8', '111328', '172700', '22'), +('2', '105', '6', '111323', '177292', '22'), +('2', '105', '6', '111326', '175900', '22'), +('2', '105', '6', '111324', '174263', '22'), +('2', '105', '6', '111022', '155441', '22'), +('2', '105', '17', '56046', '114324', '22'), +('2', '105', '17', '81765', '114240', '22'), +('2', '105', '17', '56083', '114239', '22'), +('2', '105', '17', '104406', '96576', '22'), +('2', '105', '7', '56080', '110114', '22'), +('2', '105', '7', '94053', '109125', '22'), +('2', '105', '7', '89369', '103948', '22'), +('2', '105', '7', '104404', '92484', '22'), +('2', '105', '9', '67098', '180074', '22'), +('2', '105', '9', '81764', '106694', '22'), +('2', '105', '9', '56070', '106498', '22'), +('2', '105', '9', '62984', '106296', '22'), +('2', '105', '15', '111350', '178707', '22'), +('2', '105', '15', '111344', '177814', '22'), +('2', '105', '15', '111340', '177155', '22'), +('2', '105', '15', '111342', '174942', '22'), +('2', '105', '20', '111356', '177190', '22'), +('2', '105', '20', '111352', '176540', '22'), +('2', '105', '20', '111351', '173825', '22'), +('2', '105', '20', '111054', '155339', '22'), +('2', '105', '12', '105332', '128996', '22'), +('2', '105', '12', '56035', '108438', '22'), +('2', '105', '12', '56073', '107267', '22'), +('2', '105', '12', '89366', '100859', '22'), +('2', '105', '18', '56041', '114022', '22'), +('2', '105', '18', '94054', '112796', '22'), +('2', '105', '18', '62986', '112554', '22'), +('2', '105', '18', '62987', '110901', '22'), +('2', '105', '19', '81763', '110814', '22'), +('2', '105', '19', '62990', '110447', '22'), +('2', '105', '19', '56037', '110443', '22'), +('2', '105', '19', '56075', '110328', '22'), +('2', '105', '13', '111518', '170654', '22'), +('2', '105', '13', '111517', '168920', '22'), +('2', '105', '13', '111217', '154261', '22'), +('2', '105', '13', '111218', '154211', '22'), +('2', '105', '14', '111537', '177498', '22'), +('2', '105', '14', '111539', '175720', '22'), +('2', '105', '14', '111535', '175318', '22'), +('2', '105', '14', '111237', '155647', '22'), +('2', '105', '11', '133816', '229858', '22'), +('2', '105', '11', '111334', '176766', '22'), +('2', '105', '11', '111337', '176620', '22'), +('2', '105', '11', '111338', '172643', '22'), +('2', '105', '22', '12425', '0', '21'), +('2', '105', '22', '39342', '0', '21'), +('2', '105', '22', '7867', '0', '21'), +('2', '105', '22', '23597', '0', '21'), +('2', '105', '1', '98769', '284235', '21'), +('2', '105', '1', '111304', '176509', '21'), +('2', '105', '1', '111307', '176289', '21'), +('2', '105', '1', '111310', '175043', '21'), +('2', '105', '2', '62988', '110544', '21'), +('2', '105', '2', '62985', '110365', '21'), +('2', '105', '2', '94056', '110004', '21'), +('2', '105', '2', '89368', '102837', '21'), +('2', '105', '3', '111314', '177199', '21'), +('2', '105', '3', '111316', '175487', '21'), +('2', '105', '3', '111315', '174605', '21'), +('2', '105', '3', '111013', '155349', '21'), +('2', '105', '5', '111319', '176547', '21'), +('2', '105', '5', '111318', '173818', '21'), +('2', '105', '5', '111317', '173550', '21'), +('2', '105', '5', '111320', '173163', '21'), +('2', '105', '8', '111332', '177398', '21'), +('2', '105', '8', '111330', '175225', '21'), +('2', '105', '8', '111331', '172947', '21'), +('2', '105', '8', '111328', '172700', '21'), +('2', '105', '6', '111323', '177292', '21'), +('2', '105', '6', '111326', '175900', '21'), +('2', '105', '6', '111324', '174263', '21'), +('2', '105', '6', '111022', '155441', '21'), +('2', '105', '17', '56046', '114324', '21'), +('2', '105', '17', '81765', '114240', '21'), +('2', '105', '17', '56083', '114239', '21'), +('2', '105', '17', '104406', '96576', '21'), +('2', '105', '7', '56080', '110114', '21'), +('2', '105', '7', '94053', '109125', '21'), +('2', '105', '7', '89369', '103948', '21'), +('2', '105', '7', '104404', '92484', '21'), +('2', '105', '9', '67098', '180074', '21'), +('2', '105', '9', '81764', '106694', '21'), +('2', '105', '9', '56070', '106498', '21'), +('2', '105', '9', '62984', '106296', '21'), +('2', '105', '15', '111350', '178707', '21'), +('2', '105', '15', '111344', '177814', '21'), +('2', '105', '15', '111340', '177155', '21'), +('2', '105', '15', '111342', '174942', '21'), +('2', '105', '20', '111356', '177190', '21'), +('2', '105', '20', '111352', '176540', '21'), +('2', '105', '20', '111351', '173825', '21'), +('2', '105', '20', '111054', '155339', '21'), +('2', '105', '12', '105332', '128996', '21'), +('2', '105', '12', '56035', '108438', '21'), +('2', '105', '12', '56073', '107267', '21'), +('2', '105', '12', '89366', '100859', '21'), +('2', '105', '18', '56041', '114022', '21'), +('2', '105', '18', '94054', '112796', '21'), +('2', '105', '18', '62986', '112554', '21'), +('2', '105', '18', '62987', '110901', '21'), +('2', '105', '19', '81763', '110814', '21'), +('2', '105', '19', '62990', '110447', '21'), +('2', '105', '19', '56037', '110443', '21'), +('2', '105', '19', '56075', '110328', '21'), +('2', '105', '13', '111518', '170654', '21'), +('2', '105', '13', '111517', '168920', '21'), +('2', '105', '13', '111217', '154261', '21'), +('2', '105', '13', '111218', '154211', '21'), +('2', '105', '14', '111537', '177498', '21'), +('2', '105', '14', '111539', '175720', '21'), +('2', '105', '14', '111535', '175318', '21'), +('2', '105', '14', '111237', '155647', '21'), +('2', '105', '11', '133816', '229858', '21'), +('2', '105', '11', '111334', '176766', '21'), +('2', '105', '11', '111337', '176620', '21'), +('2', '105', '11', '111338', '172643', '21'), +('2', '106', '22', '12425', '0', '23'), +('2', '106', '22', '39342', '0', '23'), +('2', '106', '22', '7867', '0', '23'), +('2', '106', '22', '23597', '0', '23'), +('2', '106', '1', '98769', '284239', '23'), +('2', '106', '1', '111304', '176516', '23'), +('2', '106', '1', '111307', '176293', '23'), +('2', '106', '1', '111310', '175049', '23'), +('2', '106', '2', '62988', '110548', '23'), +('2', '106', '2', '62985', '110373', '23'), +('2', '106', '2', '94056', '110009', '23'), +('2', '106', '2', '89368', '102842', '23'), +('2', '106', '3', '111314', '177205', '23'), +('2', '106', '3', '111316', '175494', '23'), +('2', '106', '3', '111315', '174612', '23'), +('2', '106', '3', '111013', '155355', '23'), +('2', '106', '5', '111319', '176552', '23'), +('2', '106', '5', '111318', '173823', '23'), +('2', '106', '5', '111317', '173556', '23'), +('2', '106', '5', '111320', '173168', '23'), +('2', '106', '8', '111332', '177405', '23'), +('2', '106', '8', '111330', '175231', '23'), +('2', '106', '8', '111331', '172955', '23'), +('2', '106', '8', '111328', '172704', '23'), +('2', '106', '6', '111323', '177298', '23'), +('2', '106', '6', '111326', '175909', '23'), +('2', '106', '6', '111324', '174268', '23'), +('2', '106', '6', '111022', '155448', '23'), +('2', '106', '17', '56046', '114330', '23'), +('2', '106', '17', '81765', '114245', '23'), +('2', '106', '17', '56083', '114243', '23'), +('2', '106', '17', '104406', '96582', '23'), +('2', '106', '7', '56080', '110121', '23'), +('2', '106', '7', '94053', '109130', '23'), +('2', '106', '7', '89369', '103954', '23'), +('2', '106', '7', '104404', '92491', '23'), +('2', '106', '9', '67098', '180079', '23'), +('2', '106', '9', '81764', '106704', '23'), +('2', '106', '9', '56070', '106504', '23'), +('2', '106', '9', '62984', '106302', '23'), +('2', '106', '15', '111350', '178715', '23'), +('2', '106', '15', '111344', '177822', '23'), +('2', '106', '15', '111340', '177161', '23'), +('2', '106', '15', '111342', '174949', '23'), +('2', '106', '20', '111356', '177195', '23'), +('2', '106', '20', '111352', '176547', '23'), +('2', '106', '20', '111351', '173832', '23'), +('2', '106', '20', '111054', '155344', '23'), +('2', '106', '12', '105332', '128998', '23'), +('2', '106', '12', '56035', '108448', '23'), +('2', '106', '12', '56073', '107273', '23'), +('2', '106', '12', '89366', '100864', '23'), +('2', '106', '18', '56041', '114028', '23'), +('2', '106', '18', '94054', '112800', '23'), +('2', '106', '18', '62986', '112561', '23'), +('2', '106', '18', '62987', '110905', '23'), +('2', '106', '19', '81763', '110823', '23'), +('2', '106', '19', '62990', '110451', '23'), +('2', '106', '19', '56037', '110450', '23'), +('2', '106', '19', '56075', '110336', '23'), +('2', '106', '13', '111518', '170661', '23'), +('2', '106', '13', '111517', '168926', '23'), +('2', '106', '13', '111217', '154267', '23'), +('2', '106', '13', '111218', '154217', '23'), +('2', '106', '14', '111537', '177505', '23'), +('2', '106', '14', '111539', '175728', '23'), +('2', '106', '14', '111535', '175324', '23'), +('2', '106', '14', '111237', '155653', '23'), +('2', '106', '11', '133816', '229863', '23'), +('2', '106', '11', '111334', '176772', '23'), +('2', '106', '11', '111337', '176629', '23'), +('2', '106', '11', '111338', '172648', '23'), +('2', '107', '22', '12425', '0', '23'), +('2', '107', '22', '39342', '0', '23'), +('2', '107', '22', '7867', '0', '23'), +('2', '107', '22', '23597', '0', '23'), +('2', '107', '1', '98769', '284243', '23'), +('2', '107', '1', '111304', '176524', '23'), +('2', '107', '1', '111307', '176296', '23'), +('2', '107', '1', '111310', '175055', '23'), +('2', '107', '2', '62988', '110552', '23'), +('2', '107', '2', '62985', '110382', '23'), +('2', '107', '2', '94056', '110014', '23'), +('2', '107', '2', '89368', '102848', '23'), +('2', '107', '3', '111314', '177212', '23'), +('2', '107', '3', '111316', '175500', '23'), +('2', '107', '3', '111315', '174618', '23'), +('2', '107', '3', '111013', '155361', '23'), +('2', '107', '5', '111319', '176557', '23'), +('2', '107', '5', '111318', '173828', '23'), +('2', '107', '5', '111317', '173562', '23'), +('2', '107', '5', '111320', '173173', '23'), +('2', '107', '8', '111332', '177412', '23'), +('2', '107', '8', '111330', '175237', '23'), +('2', '107', '8', '111331', '172962', '23'), +('2', '107', '8', '111328', '172708', '23'), +('2', '107', '6', '111323', '177305', '23'), +('2', '107', '6', '111326', '175918', '23'), +('2', '107', '6', '111324', '174273', '23'), +('2', '107', '6', '111022', '155454', '23'), +('2', '107', '17', '56046', '114336', '23'), +('2', '107', '17', '81765', '114250', '23'), +('2', '107', '17', '56083', '114246', '23'), +('2', '107', '17', '104406', '96588', '23'), +('2', '107', '7', '56080', '110129', '23'), +('2', '107', '7', '94053', '109134', '23'), +('2', '107', '7', '89369', '103959', '23'), +('2', '107', '7', '104404', '92498', '23'), +('2', '107', '9', '67098', '180085', '23'), +('2', '107', '9', '81764', '106714', '23'), +('2', '107', '9', '56070', '106510', '23'), +('2', '107', '9', '62984', '106309', '23'), +('2', '107', '15', '111350', '178723', '23'), +('2', '107', '15', '111344', '177830', '23'), +('2', '107', '15', '111340', '177167', '23'), +('2', '107', '15', '111342', '174956', '23'), +('2', '107', '20', '111356', '177199', '23'), +('2', '107', '20', '111352', '176554', '23'), +('2', '107', '20', '111351', '173839', '23'), +('2', '107', '20', '111054', '155349', '23'), +('2', '107', '12', '105332', '129000', '23'), +('2', '107', '12', '56035', '108457', '23'), +('2', '107', '12', '56073', '107279', '23'), +('2', '107', '12', '89366', '100869', '23'), +('2', '107', '18', '56041', '114034', '23'), +('2', '107', '18', '94054', '112805', '23'), +('2', '107', '18', '62986', '112568', '23'), +('2', '107', '18', '62987', '110910', '23'), +('2', '107', '19', '81763', '110833', '23'), +('2', '107', '19', '56037', '110458', '23'), +('2', '107', '19', '62990', '110456', '23'), +('2', '107', '19', '56075', '110344', '23'), +('2', '107', '13', '111518', '170667', '23'), +('2', '107', '13', '111517', '168932', '23'), +('2', '107', '13', '111217', '154273', '23'), +('2', '107', '13', '111218', '154223', '23'), +('2', '107', '14', '111537', '177512', '23'), +('2', '107', '14', '111539', '175736', '23'), +('2', '107', '14', '111535', '175330', '23'), +('2', '107', '14', '111237', '155660', '23'), +('2', '107', '11', '133816', '229868', '23'), +('2', '107', '11', '111334', '176778', '23'), +('2', '107', '11', '111337', '176638', '23'), +('2', '107', '11', '111338', '172653', '23'), +('2', '108', '22', '12425', '0', '23'), +('2', '108', '22', '39342', '0', '23'), +('2', '108', '22', '7867', '0', '23'), +('2', '108', '22', '23597', '0', '23'), +('2', '108', '1', '98769', '284247', '23'), +('2', '108', '1', '111304', '176531', '23'), +('2', '108', '1', '111307', '176300', '23'), +('2', '108', '1', '111310', '175062', '23'), +('2', '108', '2', '62988', '110556', '23'), +('2', '108', '2', '62985', '110390', '23'), +('2', '108', '2', '94056', '110020', '23'), +('2', '108', '2', '89368', '102853', '23'), +('2', '108', '3', '111314', '177218', '23'), +('2', '108', '3', '111316', '175506', '23'), +('2', '108', '3', '111315', '174624', '23'), +('2', '108', '3', '111013', '155367', '23'), +('2', '108', '5', '111319', '176563', '23'), +('2', '108', '5', '111318', '173833', '23'), +('2', '108', '5', '111317', '173568', '23'), +('2', '108', '5', '111320', '173178', '23'), +('2', '108', '8', '111332', '177420', '23'), +('2', '108', '8', '111330', '175243', '23'), +('2', '108', '8', '111331', '172970', '23'), +('2', '108', '8', '111328', '172713', '23'), +('2', '108', '6', '111323', '177311', '23'), +('2', '108', '6', '111326', '175927', '23'), +('2', '108', '6', '111324', '174278', '23'), +('2', '108', '6', '111022', '155461', '23'), +('2', '108', '17', '56046', '114343', '23'), +('2', '108', '17', '81765', '114255', '23'), +('2', '108', '17', '56083', '114250', '23'), +('2', '108', '17', '104406', '96594', '23'), +('2', '108', '7', '56080', '110137', '23'), +('2', '108', '7', '94053', '109139', '23'), +('2', '108', '7', '89369', '103965', '23'), +('2', '108', '7', '104404', '92506', '23'), +('2', '108', '9', '67098', '180090', '23'), +('2', '108', '9', '81764', '106725', '23'), +('2', '108', '9', '56070', '106516', '23'), +('2', '108', '9', '62984', '106315', '23'), +('2', '108', '15', '111350', '178731', '23'), +('2', '108', '15', '111344', '177838', '23'), +('2', '108', '15', '111340', '177174', '23'), +('2', '108', '15', '111342', '174963', '23'), +('2', '108', '20', '111356', '177204', '23'), +('2', '108', '20', '111352', '176560', '23'), +('2', '108', '20', '111351', '173846', '23'), +('2', '108', '20', '111054', '155354', '23'), +('2', '108', '12', '105332', '129002', '23'), +('2', '108', '12', '56035', '108467', '23'), +('2', '108', '12', '56073', '107285', '23'), +('2', '108', '12', '89366', '100873', '23'), +('2', '108', '18', '56041', '114040', '23'), +('2', '108', '18', '94054', '112809', '23'), +('2', '108', '18', '62986', '112576', '23'), +('2', '108', '18', '62987', '110915', '23'), +('2', '108', '19', '81763', '110843', '23'), +('2', '108', '19', '56037', '110465', '23'), +('2', '108', '19', '62990', '110460', '23'), +('2', '108', '19', '56075', '110352', '23'), +('2', '108', '13', '111518', '170674', '23'), +('2', '108', '13', '111517', '168938', '23'), +('2', '108', '13', '111217', '154279', '23'), +('2', '108', '13', '111218', '154229', '23'), +('2', '108', '14', '111537', '177518', '23'), +('2', '108', '14', '111539', '175743', '23'), +('2', '108', '14', '111535', '175336', '23'), +('2', '108', '14', '111237', '155667', '23'), +('2', '108', '11', '133816', '229873', '23'), +('2', '108', '11', '111334', '176784', '23'), +('2', '108', '11', '111337', '176647', '23'), +('2', '108', '11', '111338', '172658', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '109', '22', '12425', '0', '23'), +('2', '109', '22', '39342', '0', '23'), +('2', '109', '22', '7867', '0', '23'), +('2', '109', '22', '23597', '0', '23'), +('2', '109', '1', '98769', '284251', '23'), +('2', '109', '1', '111304', '176539', '23'), +('2', '109', '1', '111307', '176303', '23'), +('2', '109', '1', '111310', '175068', '23'), +('2', '109', '2', '62988', '110560', '23'), +('2', '109', '2', '62985', '110398', '23'), +('2', '109', '2', '94056', '110025', '23'), +('2', '109', '2', '89368', '102859', '23'), +('2', '109', '3', '111314', '177224', '23'), +('2', '109', '3', '111316', '175512', '23'), +('2', '109', '3', '111315', '174630', '23'), +('2', '109', '3', '111013', '155373', '23'), +('2', '109', '5', '111319', '176568', '23'), +('2', '109', '5', '111318', '173838', '23'), +('2', '109', '5', '111317', '173574', '23'), +('2', '109', '5', '111320', '173183', '23'), +('2', '109', '8', '111332', '177427', '23'), +('2', '109', '8', '111330', '175249', '23'), +('2', '109', '8', '111331', '172977', '23'), +('2', '109', '8', '111328', '172717', '23'), +('2', '109', '6', '111323', '177318', '23'), +('2', '109', '6', '111326', '175936', '23'), +('2', '109', '6', '111324', '174283', '23'), +('2', '109', '6', '111022', '155467', '23'), +('2', '109', '17', '56046', '114349', '23'), +('2', '109', '17', '81765', '114260', '23'), +('2', '109', '17', '56083', '114253', '23'), +('2', '109', '17', '104406', '96601', '23'), +('2', '109', '7', '56080', '110144', '23'), +('2', '109', '7', '94053', '109144', '23'), +('2', '109', '7', '89369', '103971', '23'), +('2', '109', '7', '104404', '92513', '23'), +('2', '109', '9', '67098', '180095', '23'), +('2', '109', '9', '81764', '106735', '23'), +('2', '109', '9', '56070', '106522', '23'), +('2', '109', '9', '62984', '106321', '23'), +('2', '109', '15', '111350', '178739', '23'), +('2', '109', '15', '111344', '177846', '23'), +('2', '109', '15', '111340', '177180', '23'), +('2', '109', '15', '111342', '174970', '23'), +('2', '109', '20', '111356', '177209', '23'), +('2', '109', '20', '111352', '176567', '23'), +('2', '109', '20', '111351', '173853', '23'), +('2', '109', '20', '111054', '155359', '23'), +('2', '109', '12', '105332', '129004', '23'), +('2', '109', '12', '56035', '108476', '23'), +('2', '109', '12', '56073', '107291', '23'), +('2', '109', '12', '89366', '100878', '23'), +('2', '109', '18', '56041', '114046', '23'), +('2', '109', '18', '94054', '112814', '23'), +('2', '109', '18', '62986', '112583', '23'), +('2', '109', '18', '62987', '110920', '23'), +('2', '109', '19', '81763', '110853', '23'), +('2', '109', '19', '56037', '110472', '23'), +('2', '109', '19', '62990', '110464', '23'), +('2', '109', '19', '56075', '110360', '23'), +('2', '109', '13', '111518', '170680', '23'), +('2', '109', '13', '111517', '168944', '23'), +('2', '109', '13', '111217', '154285', '23'), +('2', '109', '13', '111218', '154236', '23'), +('2', '109', '14', '111537', '177525', '23'), +('2', '109', '14', '111539', '175751', '23'), +('2', '109', '14', '111535', '175342', '23'), +('2', '109', '14', '111237', '155673', '23'), +('2', '109', '11', '133816', '229877', '23'), +('2', '109', '11', '111334', '176791', '23'), +('2', '109', '11', '111337', '176656', '23'), +('2', '109', '11', '111338', '172663', '23'), +('2', '110', '22', '39342', '0', '25'), +('2', '110', '22', '7867', '0', '25'), +('2', '110', '22', '23597', '0', '25'), +('2', '110', '22', '53550', '0', '25'), +('2', '110', '1', '98769', '284255', '25'), +('2', '110', '1', '111304', '176546', '25'), +('2', '110', '1', '111307', '176307', '25'), +('2', '110', '1', '111310', '175074', '25'), +('2', '110', '2', '62988', '110564', '25'), +('2', '110', '2', '62985', '110407', '25'), +('2', '110', '2', '94056', '110030', '25'), +('2', '110', '2', '89368', '102864', '25'), +('2', '110', '3', '111314', '177230', '25'), +('2', '110', '3', '111316', '175518', '25'), +('2', '110', '3', '111315', '174637', '25'), +('2', '110', '3', '111013', '155379', '25'), +('2', '110', '5', '111319', '176574', '25'), +('2', '110', '5', '111318', '173843', '25'), +('2', '110', '5', '111317', '173580', '25'), +('2', '110', '5', '111320', '173188', '25'), +('2', '110', '8', '111332', '177434', '25'), +('2', '110', '8', '111330', '175255', '25'), +('2', '110', '8', '111331', '172985', '25'), +('2', '110', '8', '111328', '172721', '25'), +('2', '110', '6', '111323', '177324', '25'), +('2', '110', '6', '111326', '175945', '25'), +('2', '110', '6', '111324', '174288', '25'), +('2', '110', '6', '111022', '155474', '25'), +('2', '110', '17', '56046', '114355', '25'), +('2', '110', '17', '81765', '114265', '25'), +('2', '110', '17', '56083', '114256', '25'), +('2', '110', '17', '104406', '96607', '25'), +('2', '110', '7', '56080', '110152', '25'), +('2', '110', '7', '94053', '109149', '25'), +('2', '110', '7', '89369', '103977', '25'), +('2', '110', '7', '104404', '92520', '25'), +('2', '110', '9', '67098', '180101', '25'), +('2', '110', '9', '81764', '106745', '25'), +('2', '110', '9', '56070', '106528', '25'), +('2', '110', '9', '62984', '106327', '25'), +('2', '110', '15', '111350', '178747', '25'), +('2', '110', '15', '111344', '177854', '25'), +('2', '110', '15', '111340', '177186', '25'), +('2', '110', '15', '111342', '174977', '25'), +('2', '110', '20', '111356', '177214', '25'), +('2', '110', '20', '111352', '176573', '25'), +('2', '110', '20', '111351', '173860', '25'), +('2', '110', '20', '111054', '155363', '25'), +('2', '110', '12', '105332', '129006', '25'), +('2', '110', '12', '56035', '108486', '25'), +('2', '110', '12', '56073', '107298', '25'), +('2', '110', '12', '89366', '100883', '25'), +('2', '110', '18', '56041', '114052', '25'), +('2', '110', '18', '94054', '112819', '25'), +('2', '110', '18', '62986', '112591', '25'), +('2', '110', '18', '62987', '110925', '25'), +('2', '110', '19', '81763', '110863', '25'), +('2', '110', '19', '56037', '110479', '25'), +('2', '110', '19', '62990', '110469', '25'), +('2', '110', '19', '56075', '110368', '25'), +('2', '110', '13', '111518', '170687', '25'), +('2', '110', '13', '111517', '168951', '25'), +('2', '110', '13', '111217', '154292', '25'), +('2', '110', '13', '111218', '154242', '25'), +('2', '110', '14', '111537', '177531', '25'), +('2', '110', '14', '111539', '175758', '25'), +('2', '110', '14', '111535', '175348', '25'), +('2', '110', '14', '111237', '155680', '25'), +('2', '110', '11', '85213', '257050', '25'), +('2', '110', '11', '133816', '229882', '25'), +('2', '110', '11', '111334', '176797', '25'), +('2', '110', '11', '111337', '176665', '25'), +('2', '110', '22', '39342', '0', '24'), +('2', '110', '22', '7867', '0', '24'), +('2', '110', '22', '23597', '0', '24'), +('2', '110', '22', '53550', '0', '24'), +('2', '110', '1', '98769', '284255', '24'), +('2', '110', '1', '111304', '176546', '24'), +('2', '110', '1', '111307', '176307', '24'), +('2', '110', '1', '111310', '175074', '24'), +('2', '110', '2', '62988', '110564', '24'), +('2', '110', '2', '62985', '110407', '24'), +('2', '110', '2', '94056', '110030', '24'), +('2', '110', '2', '89368', '102864', '24'), +('2', '110', '3', '111314', '177230', '24'), +('2', '110', '3', '111316', '175518', '24'), +('2', '110', '3', '111315', '174637', '24'), +('2', '110', '3', '111013', '155379', '24'), +('2', '110', '5', '111319', '176574', '24'), +('2', '110', '5', '111318', '173843', '24'), +('2', '110', '5', '111317', '173580', '24'), +('2', '110', '5', '111320', '173188', '24'), +('2', '110', '8', '111332', '177434', '24'), +('2', '110', '8', '111330', '175255', '24'), +('2', '110', '8', '111331', '172985', '24'), +('2', '110', '8', '111328', '172721', '24'), +('2', '110', '6', '111323', '177324', '24'), +('2', '110', '6', '111326', '175945', '24'), +('2', '110', '6', '111324', '174288', '24'), +('2', '110', '6', '111022', '155474', '24'), +('2', '110', '17', '56046', '114355', '24'), +('2', '110', '17', '81765', '114265', '24'), +('2', '110', '17', '56083', '114256', '24'), +('2', '110', '17', '104406', '96607', '24'), +('2', '110', '7', '56080', '110152', '24'), +('2', '110', '7', '94053', '109149', '24'), +('2', '110', '7', '89369', '103977', '24'), +('2', '110', '7', '104404', '92520', '24'), +('2', '110', '9', '67098', '180101', '24'), +('2', '110', '9', '81764', '106745', '24'), +('2', '110', '9', '56070', '106528', '24'), +('2', '110', '9', '62984', '106327', '24'), +('2', '110', '15', '111350', '178747', '24'), +('2', '110', '15', '111344', '177854', '24'), +('2', '110', '15', '111340', '177186', '24'), +('2', '110', '15', '111342', '174977', '24'), +('2', '110', '20', '111356', '177214', '24'), +('2', '110', '20', '111352', '176573', '24'), +('2', '110', '20', '111351', '173860', '24'), +('2', '110', '20', '111054', '155363', '24'), +('2', '110', '12', '105332', '129006', '24'), +('2', '110', '12', '56035', '108486', '24'), +('2', '110', '12', '56073', '107298', '24'), +('2', '110', '12', '89366', '100883', '24'), +('2', '110', '18', '56041', '114052', '24'), +('2', '110', '18', '94054', '112819', '24'), +('2', '110', '18', '62986', '112591', '24'), +('2', '110', '18', '62987', '110925', '24'), +('2', '110', '19', '81763', '110863', '24'), +('2', '110', '19', '56037', '110479', '24'), +('2', '110', '19', '62990', '110469', '24'), +('2', '110', '19', '56075', '110368', '24'), +('2', '110', '13', '111518', '170687', '24'), +('2', '110', '13', '111517', '168951', '24'), +('2', '110', '13', '111217', '154292', '24'), +('2', '110', '13', '111218', '154242', '24'), +('2', '110', '14', '111537', '177531', '24'), +('2', '110', '14', '111539', '175758', '24'), +('2', '110', '14', '111535', '175348', '24'), +('2', '110', '14', '111237', '155680', '24'), +('2', '110', '11', '85213', '257050', '24'), +('2', '110', '11', '133816', '229882', '24'), +('2', '110', '11', '111334', '176797', '24'), +('2', '110', '11', '111337', '176665', '24'), +('2', '111', '22', '39342', '0', '25'), +('2', '111', '22', '7867', '0', '25'), +('2', '111', '22', '23597', '0', '25'), +('2', '111', '22', '53550', '0', '25'), +('2', '111', '1', '98769', '284259', '25'), +('2', '111', '1', '111304', '176554', '25'), +('2', '111', '1', '111307', '176311', '25'), +('2', '111', '1', '111310', '175080', '25'), +('2', '111', '2', '62988', '110568', '25'), +('2', '111', '2', '62985', '110415', '25'), +('2', '111', '2', '94056', '110036', '25'), +('2', '111', '2', '89368', '102870', '25'), +('2', '111', '3', '111314', '177236', '25'), +('2', '111', '3', '111316', '175524', '25'), +('2', '111', '3', '111315', '174643', '25'), +('2', '111', '3', '111013', '155386', '25'), +('2', '111', '5', '111319', '176579', '25'), +('2', '111', '5', '111318', '173848', '25'), +('2', '111', '5', '111317', '173586', '25'), +('2', '111', '5', '111320', '173194', '25'), +('2', '111', '8', '111332', '177441', '25'), +('2', '111', '8', '111330', '175261', '25'), +('2', '111', '8', '111331', '172992', '25'), +('2', '111', '8', '111328', '172725', '25'), +('2', '111', '6', '111323', '177331', '25'), +('2', '111', '6', '111326', '175954', '25'), +('2', '111', '6', '111324', '174293', '25'), +('2', '111', '6', '111022', '155481', '25'), +('2', '111', '17', '56046', '114361', '25'), +('2', '111', '17', '81765', '114271', '25'), +('2', '111', '17', '56083', '114260', '25'), +('2', '111', '17', '104406', '96613', '25'), +('2', '111', '7', '56080', '110159', '25'), +('2', '111', '7', '94053', '109153', '25'), +('2', '111', '7', '89369', '103982', '25'), +('2', '111', '7', '104404', '92528', '25'), +('2', '111', '9', '67098', '180106', '25'), +('2', '111', '9', '81764', '106756', '25'), +('2', '111', '9', '56070', '106534', '25'), +('2', '111', '9', '62984', '106334', '25'), +('2', '111', '15', '111350', '178755', '25'), +('2', '111', '15', '111344', '177862', '25'), +('2', '111', '15', '111340', '177193', '25'), +('2', '111', '15', '111342', '174984', '25'), +('2', '111', '20', '111356', '177219', '25'), +('2', '111', '20', '111352', '176580', '25'), +('2', '111', '20', '111351', '173867', '25'), +('2', '111', '20', '111054', '155368', '25'), +('2', '111', '12', '105332', '129008', '25'), +('2', '111', '12', '56035', '108495', '25'), +('2', '111', '12', '56073', '107304', '25'), +('2', '111', '12', '89366', '100888', '25'), +('2', '111', '18', '56041', '114058', '25'), +('2', '111', '18', '94054', '112823', '25'), +('2', '111', '18', '62986', '112598', '25'), +('2', '111', '18', '62987', '110930', '25'), +('2', '111', '19', '81763', '110873', '25'), +('2', '111', '19', '56037', '110486', '25'), +('2', '111', '19', '62990', '110473', '25'), +('2', '111', '19', '56075', '110376', '25'), +('2', '111', '13', '111518', '170694', '25'), +('2', '111', '13', '111517', '168957', '25'), +('2', '111', '13', '111217', '154298', '25'), +('2', '111', '13', '111218', '154249', '25'), +('2', '111', '14', '111537', '177538', '25'), +('2', '111', '14', '111539', '175766', '25'), +('2', '111', '14', '111535', '175354', '25'), +('2', '111', '14', '111237', '155686', '25'), +('2', '111', '11', '85213', '257054', '25'), +('2', '111', '11', '133816', '229887', '25'), +('2', '111', '11', '111334', '176803', '25'), +('2', '111', '11', '111337', '176675', '25'), +('2', '112', '22', '39342', '0', '25'), +('2', '112', '22', '7867', '0', '25'), +('2', '112', '22', '23597', '0', '25'), +('2', '112', '22', '53550', '0', '25'), +('2', '112', '1', '98769', '284263', '25'), +('2', '112', '1', '111304', '176561', '25'), +('2', '112', '1', '111307', '176314', '25'), +('2', '112', '1', '111310', '175087', '25'), +('2', '112', '2', '62988', '110572', '25'), +('2', '112', '2', '62985', '110423', '25'), +('2', '112', '2', '94056', '110041', '25'), +('2', '112', '2', '89368', '102875', '25'), +('2', '112', '3', '111314', '177242', '25'), +('2', '112', '3', '111316', '175531', '25'), +('2', '112', '3', '111315', '174649', '25'), +('2', '112', '3', '111013', '155392', '25'), +('2', '112', '5', '111319', '176584', '25'), +('2', '112', '5', '111318', '173853', '25'), +('2', '112', '5', '111317', '173592', '25'), +('2', '112', '5', '111320', '173199', '25'), +('2', '112', '8', '111332', '177448', '25'), +('2', '112', '8', '111330', '175267', '25'), +('2', '112', '8', '111331', '173000', '25'), +('2', '112', '8', '111328', '172729', '25'), +('2', '112', '6', '111323', '177338', '25'), +('2', '112', '6', '111326', '175963', '25'), +('2', '112', '6', '111324', '174298', '25'), +('2', '112', '6', '111022', '155487', '25'), +('2', '112', '17', '56046', '114367', '25'), +('2', '112', '17', '81765', '114276', '25'), +('2', '112', '17', '56083', '114263', '25'), +('2', '112', '17', '104406', '96619', '25'), +('2', '112', '7', '56080', '110167', '25'), +('2', '112', '7', '94053', '109158', '25'), +('2', '112', '7', '89369', '103988', '25'), +('2', '112', '7', '104404', '92535', '25'), +('2', '112', '9', '67098', '180111', '25'), +('2', '112', '9', '81764', '106766', '25'), +('2', '112', '9', '56070', '106540', '25'), +('2', '112', '9', '62984', '106340', '25'), +('2', '112', '15', '111350', '178763', '25'), +('2', '112', '15', '111344', '177870', '25'), +('2', '112', '15', '111340', '177199', '25'), +('2', '112', '15', '111342', '174991', '25'), +('2', '112', '20', '111356', '177224', '25'), +('2', '112', '20', '111352', '176586', '25'), +('2', '112', '20', '111351', '173874', '25'), +('2', '112', '20', '111054', '155373', '25'), +('2', '112', '12', '105332', '129010', '25'), +('2', '112', '12', '56035', '108505', '25'), +('2', '112', '12', '56073', '107310', '25'), +('2', '112', '12', '89366', '100892', '25'), +('2', '112', '18', '56041', '114064', '25'), +('2', '112', '18', '94054', '112828', '25'), +('2', '112', '18', '62986', '112606', '25'), +('2', '112', '18', '62987', '110935', '25'), +('2', '112', '19', '81763', '110883', '25'), +('2', '112', '19', '56037', '110493', '25'), +('2', '112', '19', '62990', '110477', '25'), +('2', '112', '19', '56075', '110384', '25'), +('2', '112', '13', '111518', '170700', '25'), +('2', '112', '13', '111517', '168963', '25'), +('2', '112', '13', '111217', '154304', '25'), +('2', '112', '13', '111218', '154255', '25'), +('2', '112', '14', '111537', '177544', '25'), +('2', '112', '14', '111539', '175773', '25'), +('2', '112', '14', '111535', '175360', '25'), +('2', '112', '14', '111237', '155693', '25'), +('2', '112', '11', '85213', '257058', '25'), +('2', '112', '11', '133816', '229892', '25'), +('2', '112', '11', '111334', '176809', '25'), +('2', '112', '11', '111337', '176684', '25'), +('2', '113', '22', '39342', '0', '25'), +('2', '113', '22', '7867', '0', '25'), +('2', '113', '22', '23597', '0', '25'), +('2', '113', '22', '53550', '0', '25'), +('2', '113', '1', '98769', '284267', '25'), +('2', '113', '1', '111304', '176569', '25'), +('2', '113', '1', '111307', '176318', '25'), +('2', '113', '1', '111310', '175093', '25'), +('2', '113', '2', '62988', '110576', '25'), +('2', '113', '2', '62985', '110431', '25'), +('2', '113', '2', '94056', '110046', '25'), +('2', '113', '2', '89368', '102881', '25'), +('2', '113', '3', '111314', '177249', '25'), +('2', '113', '3', '111316', '175537', '25'), +('2', '113', '3', '111315', '174655', '25'), +('2', '113', '3', '111013', '155398', '25'), +('2', '113', '5', '111319', '176590', '25'), +('2', '113', '5', '111318', '173859', '25'), +('2', '113', '5', '111317', '173597', '25'), +('2', '113', '5', '111320', '173204', '25'), +('2', '113', '8', '111332', '177455', '25'), +('2', '113', '8', '111330', '175274', '25'), +('2', '113', '8', '111331', '173008', '25'), +('2', '113', '8', '111328', '172733', '25'), +('2', '113', '6', '111323', '177344', '25'), +('2', '113', '6', '111326', '175972', '25'), +('2', '113', '6', '111324', '174303', '25'), +('2', '113', '6', '111022', '155494', '25'), +('2', '113', '17', '56046', '114374', '25'), +('2', '113', '17', '81765', '114281', '25'), +('2', '113', '17', '56083', '114267', '25'), +('2', '113', '17', '104406', '96625', '25'), +('2', '113', '7', '56080', '110174', '25'), +('2', '113', '7', '94053', '109163', '25'), +('2', '113', '7', '89369', '103994', '25'), +('2', '113', '7', '104404', '92542', '25'), +('2', '113', '9', '67098', '180117', '25'), +('2', '113', '9', '81764', '106776', '25'), +('2', '113', '9', '56070', '106546', '25'), +('2', '113', '9', '62984', '106346', '25'), +('2', '113', '15', '111350', '178771', '25'), +('2', '113', '15', '111344', '177879', '25'), +('2', '113', '15', '111340', '177205', '25'), +('2', '113', '15', '111342', '174998', '25'), +('2', '113', '20', '111356', '177229', '25'), +('2', '113', '20', '111352', '176593', '25'), +('2', '113', '20', '111351', '173880', '25'), +('2', '113', '20', '111054', '155378', '25'), +('2', '113', '12', '105332', '129013', '25'), +('2', '113', '12', '56035', '108514', '25'), +('2', '113', '12', '56073', '107316', '25'), +('2', '113', '12', '89366', '100897', '25'), +('2', '113', '18', '56041', '114070', '25'), +('2', '113', '18', '94054', '112832', '25'), +('2', '113', '18', '62986', '112613', '25'), +('2', '113', '18', '62987', '110940', '25'), +('2', '113', '19', '81763', '110893', '25'), +('2', '113', '19', '56037', '110501', '25'), +('2', '113', '19', '62990', '110482', '25'), +('2', '113', '19', '56075', '110392', '25'), +('2', '113', '13', '111518', '170707', '25'), +('2', '113', '13', '111517', '168969', '25'), +('2', '113', '13', '111217', '154310', '25'), +('2', '113', '13', '111218', '154261', '25'), +('2', '113', '14', '111537', '177551', '25'), +('2', '113', '14', '111539', '175781', '25'), +('2', '113', '14', '111535', '175366', '25'), +('2', '113', '14', '111237', '155699', '25'), +('2', '113', '11', '85213', '257062', '25'), +('2', '113', '11', '133816', '229897', '25'), +('2', '113', '11', '111334', '176815', '25'), +('2', '113', '11', '111337', '176693', '25'), +('2', '114', '22', '39342', '0', '25'), +('2', '114', '22', '7867', '0', '25'), +('2', '114', '22', '23597', '0', '25'), +('2', '114', '22', '53550', '0', '25'), +('2', '114', '1', '98769', '284272', '25'), +('2', '114', '1', '111304', '176576', '25'), +('2', '114', '1', '111307', '176322', '25'), +('2', '114', '1', '111310', '175099', '25'), +('2', '114', '2', '62988', '110580', '25'), +('2', '114', '2', '62985', '110440', '25'), +('2', '114', '2', '94056', '110052', '25'), +('2', '114', '2', '89368', '102887', '25'), +('2', '114', '3', '111314', '177255', '25'), +('2', '114', '3', '111316', '175543', '25'), +('2', '114', '3', '111315', '174661', '25'), +('2', '114', '3', '111013', '155404', '25'), +('2', '114', '5', '111319', '176595', '25'), +('2', '114', '5', '111318', '173864', '25'), +('2', '114', '5', '111317', '173603', '25'), +('2', '114', '5', '111320', '173209', '25'), +('2', '114', '8', '111332', '177462', '25'), +('2', '114', '8', '111330', '175280', '25'), +('2', '114', '8', '111331', '173015', '25'), +('2', '114', '8', '111328', '172738', '25'), +('2', '114', '6', '111323', '177351', '25'), +('2', '114', '6', '111326', '175981', '25'), +('2', '114', '6', '111324', '174308', '25'), +('2', '114', '6', '111022', '155500', '25'), +('2', '114', '17', '56046', '114380', '25'), +('2', '114', '17', '81765', '114286', '25'), +('2', '114', '17', '56083', '114270', '25'), +('2', '114', '17', '104406', '96632', '25'), +('2', '114', '7', '56080', '110182', '25'), +('2', '114', '7', '94053', '109168', '25'), +('2', '114', '7', '89369', '104000', '25'), +('2', '114', '7', '104404', '92550', '25'), +('2', '114', '9', '67098', '180122', '25'), +('2', '114', '9', '81764', '106786', '25'), +('2', '114', '9', '56070', '106552', '25'), +('2', '114', '9', '62984', '106352', '25'), +('2', '114', '15', '111350', '178779', '25'), +('2', '114', '15', '111344', '177887', '25'), +('2', '114', '15', '111340', '177212', '25'), +('2', '114', '15', '111342', '175005', '25'), +('2', '114', '20', '111356', '177233', '25'), +('2', '114', '20', '111352', '176600', '25'), +('2', '114', '20', '111351', '173887', '25'), +('2', '114', '20', '111054', '155383', '25'), +('2', '114', '12', '105332', '129015', '25'), +('2', '114', '12', '56035', '108524', '25'), +('2', '114', '12', '56073', '107323', '25'), +('2', '114', '12', '89366', '100902', '25'), +('2', '114', '18', '56041', '114076', '25'), +('2', '114', '18', '94054', '112837', '25'), +('2', '114', '18', '62986', '112620', '25'), +('2', '114', '18', '62987', '110945', '25'), +('2', '114', '19', '81763', '110903', '25'), +('2', '114', '19', '56037', '110508', '25'), +('2', '114', '19', '62990', '110486', '25'), +('2', '114', '19', '56075', '110400', '25'), +('2', '114', '13', '111518', '170713', '25'), +('2', '114', '13', '111517', '168975', '25'), +('2', '114', '13', '111217', '154316', '25'), +('2', '114', '13', '111218', '154267', '25'), +('2', '114', '14', '111537', '177558', '25'), +('2', '114', '14', '111539', '175788', '25'), +('2', '114', '14', '111535', '175372', '25'), +('2', '114', '14', '111237', '155706', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('2', '114', '11', '85213', '257066', '25'), +('2', '114', '11', '133816', '229902', '25'), +('2', '114', '11', '111334', '176821', '25'), +('2', '114', '11', '111337', '176702', '25'), +('2', '115', '22', '39342', '0', '26'), +('2', '115', '22', '7867', '0', '26'), +('2', '115', '22', '23597', '0', '26'), +('2', '115', '22', '53550', '0', '26'), +('2', '115', '1', '98769', '284276', '26'), +('2', '115', '1', '111304', '176584', '26'), +('2', '115', '1', '111307', '176325', '26'), +('2', '115', '1', '111310', '175105', '26'), +('2', '115', '2', '62988', '110584', '26'), +('2', '115', '2', '62985', '110448', '26'), +('2', '115', '2', '94056', '110057', '26'), +('2', '115', '2', '89368', '102892', '26'), +('2', '115', '3', '111314', '177261', '26'), +('2', '115', '3', '111316', '175549', '26'), +('2', '115', '3', '111315', '174668', '26'), +('2', '115', '3', '111013', '155410', '26'), +('2', '115', '5', '111319', '176601', '26'), +('2', '115', '5', '111318', '173869', '26'), +('2', '115', '5', '111317', '173609', '26'), +('2', '115', '5', '111320', '173214', '26'), +('2', '115', '8', '111332', '177469', '26'), +('2', '115', '8', '111330', '175286', '26'), +('2', '115', '8', '111331', '173023', '26'), +('2', '115', '8', '111328', '172742', '26'), +('2', '115', '6', '111323', '177357', '26'), +('2', '115', '6', '111326', '175990', '26'), +('2', '115', '6', '111324', '174313', '26'), +('2', '115', '6', '111022', '155507', '26'), +('2', '115', '17', '56046', '114386', '26'), +('2', '115', '17', '81765', '114291', '26'), +('2', '115', '17', '56083', '114274', '26'), +('2', '115', '17', '104406', '96638', '26'), +('2', '115', '7', '56080', '110189', '26'), +('2', '115', '7', '94053', '109172', '26'), +('2', '115', '7', '89369', '104005', '26'), +('2', '115', '7', '104404', '92557', '26'), +('2', '115', '9', '67098', '180127', '26'), +('2', '115', '9', '81764', '106797', '26'), +('2', '115', '9', '56070', '106558', '26'), +('2', '115', '9', '62984', '106358', '26'), +('2', '115', '15', '111350', '178787', '26'), +('2', '115', '15', '111344', '177895', '26'), +('2', '115', '15', '111340', '177218', '26'), +('2', '115', '15', '111342', '175012', '26'), +('2', '115', '20', '111356', '177238', '26'), +('2', '115', '20', '111352', '176606', '26'), +('2', '115', '20', '111351', '173894', '26'), +('2', '115', '20', '111054', '155388', '26'), +('2', '115', '12', '105332', '129017', '26'), +('2', '115', '12', '56035', '108533', '26'), +('2', '115', '12', '56073', '107329', '26'), +('2', '115', '12', '89366', '100906', '26'), +('2', '115', '18', '56041', '114082', '26'), +('2', '115', '18', '94054', '112841', '26'), +('2', '115', '18', '62986', '112628', '26'), +('2', '115', '18', '62987', '110949', '26'), +('2', '115', '19', '81763', '110913', '26'), +('2', '115', '19', '56037', '110515', '26'), +('2', '115', '19', '62990', '110490', '26'), +('2', '115', '19', '56075', '110408', '26'), +('2', '115', '13', '111518', '170719', '26'), +('2', '115', '13', '111517', '168982', '26'), +('2', '115', '13', '111217', '154322', '26'), +('2', '115', '13', '111218', '154274', '26'), +('2', '115', '14', '111537', '177564', '26'), +('2', '115', '14', '111539', '175796', '26'), +('2', '115', '14', '111535', '175378', '26'), +('2', '115', '14', '111237', '155713', '26'), +('2', '115', '11', '85213', '257071', '26'), +('2', '115', '11', '133816', '229907', '26'), +('2', '115', '11', '111334', '176827', '26'), +('2', '115', '11', '111337', '176711', '26'), +('3', '1', '22', '10323', '0', '0'), +('3', '1', '22', '66166', '0', '0'), +('3', '1', '22', '8567', '0', '0'), +('3', '1', '22', '9246', '0', '0'), +('3', '1', '1', '14701', '4854', '0'), +('3', '1', '1', '14702', '3550', '0'), +('3', '1', '1', '10082', '2434', '0'), +('3', '1', '1', '10165', '1940', '0'), +('3', '1', '2', '4301', '7726', '0'), +('3', '1', '2', '4831', '6040', '0'), +('3', '1', '2', '4851', '5999', '0'), +('3', '1', '2', '10142', '4824', '0'), +('3', '1', '3', '21002', '2114', '0'), +('3', '1', '3', '10144', '1628', '0'), +('3', '1', '3', '4505', '1535', '0'), +('3', '1', '3', '21303', '1510', '0'), +('3', '1', '5', '14703', '7150', '0'), +('3', '1', '5', '14700', '4806', '0'), +('3', '1', '5', '12800', '4775', '0'), +('3', '1', '5', '10055', '4760', '0'), +('3', '1', '8', '11621', '26579', '0'), +('3', '1', '8', '11551', '8753', '0'), +('3', '1', '8', '1409', '7747', '0'), +('3', '1', '8', '11603', '6053', '0'), +('3', '1', '6', '1557', '8270', '0'), +('3', '1', '6', '25062', '3672', '0'), +('3', '1', '6', '4302', '3347', '0'), +('3', '1', '6', '4165', '3247', '0'), +('3', '1', '17', '4832', '11404', '0'), +('3', '1', '17', '4852', '9720', '0'), +('3', '1', '17', '4309', '8225', '0'), +('3', '1', '17', '11623', '7848', '0'), +('3', '1', '7', '4833', '6478', '0'), +('3', '1', '7', '4853', '5413', '0'), +('3', '1', '7', '2986', '3926', '0'), +('3', '1', '7', '4343', '3703', '0'), +('3', '1', '9', '4834', '4408', '0'), +('3', '1', '9', '4854', '3727', '0'), +('3', '1', '9', '12189', '3471', '0'), +('3', '1', '9', '4344', '3046', '0'), +('3', '1', '15', '10366', '8054', '0'), +('3', '1', '15', '10151', '7200', '0'), +('3', '1', '15', '14679', '7010', '0'), +('3', '1', '15', '14678', '5708', '0'), +('3', '1', '20', '2716', '23850', '0'), +('3', '1', '20', '11601', '17566', '0'), +('3', '1', '20', '2919', '10811', '0'), +('3', '1', '20', '1365', '10500', '0'), +('3', '1', '12', '4835', '9883', '0'), +('3', '1', '12', '20655', '7862', '0'), +('3', '1', '12', '2923', '4758', '0'), +('3', '1', '12', '3310', '4550', '0'), +('3', '1', '18', '4836', '6318', '0'), +('3', '1', '18', '4856', '5488', '0'), +('3', '1', '18', '4346', '4645', '0'), +('3', '1', '18', '3155', '4251', '0'), +('3', '1', '19', '4837', '6988', '0'), +('3', '1', '19', '3156', '6822', '0'), +('3', '1', '19', '68239', '5221', '0'), +('3', '1', '19', '4857', '5155', '0'), +('3', '1', '13', '5401', '19848', '0'), +('3', '1', '13', '11050', '19565', '0'), +('3', '1', '13', '11682', '18417', '0'), +('3', '1', '13', '27708', '18119', '0'), +('3', '1', '14', '11632', '27713', '0'), +('3', '1', '14', '11551', '23853', '0'), +('3', '1', '14', '9428', '20353', '0'), +('3', '1', '14', '11644', '19308', '0'), +('3', '1', '11', '8408', '6861', '0'), +('3', '1', '11', '8325', '6668', '0'), +('3', '1', '11', '8811', '5213', '0'), +('3', '1', '11', '8810', '4798', '0'), +('3', '2', '22', '10323', '0', '0'), +('3', '2', '22', '66166', '0', '0'), +('3', '2', '22', '8567', '0', '0'), +('3', '2', '22', '9246', '0', '0'), +('3', '2', '1', '14701', '4854', '0'), +('3', '2', '1', '14702', '3550', '0'), +('3', '2', '1', '10082', '2455', '0'), +('3', '2', '1', '10165', '1940', '0'), +('3', '2', '2', '4301', '7726', '0'), +('3', '2', '2', '4831', '6040', '0'), +('3', '2', '2', '4851', '6025', '0'), +('3', '2', '2', '10142', '4824', '0'), +('3', '2', '3', '21002', '2114', '0'), +('3', '2', '3', '10144', '1628', '0'), +('3', '2', '3', '4505', '1561', '0'), +('3', '2', '3', '21303', '1510', '0'), +('3', '2', '5', '14703', '7150', '0'), +('3', '2', '5', '14700', '4806', '0'), +('3', '2', '5', '12800', '4793', '0'), +('3', '2', '5', '10055', '4760', '0'), +('3', '2', '8', '11621', '26579', '0'), +('3', '2', '8', '11551', '8753', '0'), +('3', '2', '8', '1409', '7747', '0'), +('3', '2', '8', '11603', '6085', '0'), +('3', '2', '6', '1557', '8270', '0'), +('3', '2', '6', '25062', '3672', '0'), +('3', '2', '6', '4302', '3373', '0'), +('3', '2', '6', '4165', '3247', '0'), +('3', '2', '17', '4832', '11467', '0'), +('3', '2', '17', '4852', '9790', '0'), +('3', '2', '17', '4309', '8225', '0'), +('3', '2', '17', '11623', '7848', '0'), +('3', '2', '7', '4833', '6478', '0'), +('3', '2', '7', '4853', '5413', '0'), +('3', '2', '7', '2986', '3926', '0'), +('3', '2', '7', '4343', '3745', '0'), +('3', '2', '9', '4834', '4408', '0'), +('3', '2', '9', '4854', '3727', '0'), +('3', '2', '9', '12189', '3471', '0'), +('3', '2', '9', '4344', '3046', '0'), +('3', '2', '15', '10366', '8054', '0'), +('3', '2', '15', '10151', '7200', '0'), +('3', '2', '15', '14679', '7010', '0'), +('3', '2', '15', '14678', '5708', '0'), +('3', '2', '20', '2716', '23872', '0'), +('3', '2', '20', '11601', '17608', '0'), +('3', '2', '20', '2919', '10829', '0'), +('3', '2', '20', '1365', '10500', '0'), +('3', '2', '12', '4835', '9904', '0'), +('3', '2', '12', '20655', '7878', '0'), +('3', '2', '12', '2923', '4758', '0'), +('3', '2', '12', '3310', '4550', '0'), +('3', '2', '18', '4836', '6339', '0'), +('3', '2', '18', '4856', '5488', '0'), +('3', '2', '18', '4346', '4645', '0'), +('3', '2', '18', '3155', '4277', '0'), +('3', '2', '19', '4837', '7006', '0'), +('3', '2', '19', '3156', '6822', '0'), +('3', '2', '19', '68239', '5232', '0'), +('3', '2', '19', '4857', '5176', '0'), +('3', '2', '13', '5401', '19848', '0'), +('3', '2', '13', '11050', '19592', '0'), +('3', '2', '13', '11682', '18417', '0'), +('3', '2', '13', '27708', '18191', '0'), +('3', '2', '14', '11632', '27777', '0'), +('3', '2', '14', '11551', '23853', '0'), +('3', '2', '14', '9428', '20353', '0'), +('3', '2', '14', '11644', '19308', '0'), +('3', '2', '11', '8408', '6861', '0'), +('3', '2', '11', '8325', '6668', '0'), +('3', '2', '11', '8811', '5213', '0'), +('3', '2', '11', '8810', '4798', '0'), +('3', '3', '22', '10323', '0', '0'), +('3', '3', '22', '66166', '0', '0'), +('3', '3', '22', '8567', '0', '0'), +('3', '3', '22', '9246', '0', '0'), +('3', '3', '1', '14701', '4854', '0'), +('3', '3', '1', '14702', '3550', '0'), +('3', '3', '1', '10082', '2477', '0'), +('3', '3', '1', '10165', '1940', '0'), +('3', '3', '2', '4301', '7726', '0'), +('3', '3', '2', '4851', '6050', '0'), +('3', '3', '2', '4831', '6040', '0'), +('3', '3', '2', '10142', '4824', '0'), +('3', '3', '3', '21002', '2114', '0'), +('3', '3', '3', '10144', '1628', '0'), +('3', '3', '3', '4505', '1586', '0'), +('3', '3', '3', '21303', '1510', '0'), +('3', '3', '5', '14703', '7150', '0'), +('3', '3', '5', '12800', '4811', '0'), +('3', '3', '5', '14700', '4806', '0'), +('3', '3', '5', '10055', '4760', '0'), +('3', '3', '8', '11621', '26579', '0'), +('3', '3', '8', '11551', '8753', '0'), +('3', '3', '8', '1409', '7747', '0'), +('3', '3', '8', '11603', '6118', '0'), +('3', '3', '6', '1557', '8270', '0'), +('3', '3', '6', '25062', '3672', '0'), +('3', '3', '6', '4302', '3398', '0'), +('3', '3', '6', '4165', '3247', '0'), +('3', '3', '17', '4832', '11530', '0'), +('3', '3', '17', '4852', '9861', '0'), +('3', '3', '17', '4309', '8225', '0'), +('3', '3', '17', '11623', '7848', '0'), +('3', '3', '7', '4833', '6478', '0'), +('3', '3', '7', '4853', '5413', '0'), +('3', '3', '7', '2986', '3926', '0'), +('3', '3', '7', '4343', '3787', '0'), +('3', '3', '9', '4834', '4408', '0'), +('3', '3', '9', '4854', '3727', '0'), +('3', '3', '9', '12189', '3471', '0'), +('3', '3', '9', '4344', '3046', '0'), +('3', '3', '15', '10366', '8054', '0'), +('3', '3', '15', '10151', '7200', '0'), +('3', '3', '15', '14679', '7010', '0'), +('3', '3', '15', '14678', '5708', '0'), +('3', '3', '20', '2716', '23893', '0'), +('3', '3', '20', '11601', '17650', '0'), +('3', '3', '20', '2919', '10847', '0'), +('3', '3', '20', '1365', '10500', '0'), +('3', '3', '12', '4835', '9926', '0'), +('3', '3', '12', '20655', '7894', '0'), +('3', '3', '12', '2923', '4758', '0'), +('3', '3', '12', '4855', '4570', '0'), +('3', '3', '18', '4836', '6360', '0'), +('3', '3', '18', '4856', '5488', '0'), +('3', '3', '18', '4346', '4645', '0'), +('3', '3', '18', '3155', '4302', '0'), +('3', '3', '19', '4837', '7025', '0'), +('3', '3', '19', '3156', '6822', '0'), +('3', '3', '19', '68239', '5243', '0'), +('3', '3', '19', '4857', '5197', '0'), +('3', '3', '13', '5401', '19848', '0'), +('3', '3', '13', '11050', '19620', '0'), +('3', '3', '13', '11682', '18417', '0'), +('3', '3', '13', '27708', '18262', '0'), +('3', '3', '14', '11632', '27840', '0'), +('3', '3', '14', '11551', '23853', '0'), +('3', '3', '14', '9428', '20353', '0'), +('3', '3', '14', '11644', '19308', '0'), +('3', '3', '11', '8408', '6861', '0'), +('3', '3', '11', '8325', '6668', '0'), +('3', '3', '11', '8811', '5213', '0'), +('3', '3', '11', '8810', '4798', '0'), +('3', '4', '22', '10323', '0', '0'), +('3', '4', '22', '66166', '0', '0'), +('3', '4', '22', '8567', '0', '0'), +('3', '4', '22', '9246', '0', '0'), +('3', '4', '1', '14701', '4854', '0'), +('3', '4', '1', '14702', '3550', '0'), +('3', '4', '1', '10082', '2499', '0'), +('3', '4', '1', '10165', '1940', '0'), +('3', '4', '2', '4301', '7726', '0'), +('3', '4', '2', '4851', '6075', '0'), +('3', '4', '2', '4831', '6040', '0'), +('3', '4', '2', '10142', '4824', '0'), +('3', '4', '3', '21002', '2114', '0'), +('3', '4', '3', '10144', '1628', '0'), +('3', '4', '3', '4505', '1611', '0'), +('3', '4', '3', '21303', '1510', '0'), +('3', '4', '5', '14703', '7150', '0'), +('3', '4', '5', '12800', '4829', '0'), +('3', '4', '5', '14700', '4806', '0'), +('3', '4', '5', '10055', '4760', '0'), +('3', '4', '8', '11621', '26579', '0'), +('3', '4', '8', '11551', '8753', '0'), +('3', '4', '8', '1409', '7747', '0'), +('3', '4', '8', '11603', '6150', '0'), +('3', '4', '6', '1557', '8270', '0'), +('3', '4', '6', '25062', '3672', '0'), +('3', '4', '6', '4302', '3423', '0'), +('3', '4', '6', '4165', '3247', '0'), +('3', '4', '17', '4832', '11594', '0'), +('3', '4', '17', '4852', '9932', '0'), +('3', '4', '17', '4309', '8225', '0'), +('3', '4', '17', '11623', '7848', '0'), +('3', '4', '7', '4833', '6478', '0'), +('3', '4', '7', '4853', '5413', '0'), +('3', '4', '7', '2986', '3926', '0'), +('3', '4', '7', '4343', '3829', '0'), +('3', '4', '9', '4834', '4408', '0'), +('3', '4', '9', '4854', '3727', '0'), +('3', '4', '9', '12189', '3471', '0'), +('3', '4', '9', '10149', '3053', '0'), +('3', '4', '15', '10366', '8054', '0'), +('3', '4', '15', '10151', '7200', '0'), +('3', '4', '15', '14679', '7010', '0'), +('3', '4', '15', '14678', '5708', '0'), +('3', '4', '20', '2716', '23915', '0'), +('3', '4', '20', '11601', '17693', '0'), +('3', '4', '20', '2919', '10865', '0'), +('3', '4', '20', '1365', '10500', '0'), +('3', '4', '12', '4835', '9947', '0'), +('3', '4', '12', '20655', '7910', '0'), +('3', '4', '12', '2923', '4758', '0'), +('3', '4', '12', '4855', '4610', '0'), +('3', '4', '18', '4836', '6381', '0'), +('3', '4', '18', '4856', '5488', '0'), +('3', '4', '18', '4346', '4645', '0'), +('3', '4', '18', '3155', '4327', '0'), +('3', '4', '19', '4837', '7043', '0'), +('3', '4', '19', '3156', '6822', '0'), +('3', '4', '19', '68239', '5254', '0'), +('3', '4', '19', '4857', '5219', '0'), +('3', '4', '13', '5401', '19848', '0'), +('3', '4', '13', '11050', '19647', '0'), +('3', '4', '13', '11682', '18417', '0'), +('3', '4', '13', '27708', '18333', '0'), +('3', '4', '14', '11632', '27904', '0'), +('3', '4', '14', '11551', '23853', '0'), +('3', '4', '14', '9428', '20353', '0'), +('3', '4', '14', '11644', '19308', '0'), +('3', '4', '11', '8408', '6861', '0'), +('3', '4', '11', '8325', '6668', '0'), +('3', '4', '11', '8811', '5213', '0'), +('3', '4', '11', '8810', '4798', '0'), +('3', '5', '22', '10323', '0', '0'), +('3', '5', '22', '66166', '0', '0'), +('3', '5', '22', '8567', '0', '0'), +('3', '5', '22', '9246', '0', '0'), +('3', '5', '1', '14701', '4854', '0'), +('3', '5', '1', '14702', '3550', '0'), +('3', '5', '1', '10082', '2521', '0'), +('3', '5', '1', '10165', '1940', '0'), +('3', '5', '2', '4301', '7726', '0'), +('3', '5', '2', '4851', '6101', '0'), +('3', '5', '2', '4831', '6040', '0'), +('3', '5', '2', '10142', '4824', '0'), +('3', '5', '3', '21002', '2114', '0'), +('3', '5', '3', '71529', '1793', '0'), +('3', '5', '3', '4505', '1637', '0'), +('3', '5', '3', '10144', '1628', '0'), +('3', '5', '5', '14703', '7150', '0'), +('3', '5', '5', '12800', '4847', '0'), +('3', '5', '5', '14700', '4806', '0'), +('3', '5', '5', '10055', '4760', '0'), +('3', '5', '8', '11621', '26579', '0'), +('3', '5', '8', '11551', '8753', '0'), +('3', '5', '8', '1409', '7747', '0'), +('3', '5', '8', '11603', '6183', '0'), +('3', '5', '6', '1557', '8270', '0'), +('3', '5', '6', '25062', '3672', '0'), +('3', '5', '6', '4302', '3452', '0'), +('3', '5', '6', '4165', '3247', '0'), +('3', '5', '17', '4832', '11666', '0'), +('3', '5', '17', '4852', '10008', '0'), +('3', '5', '17', '4309', '8225', '0'), +('3', '5', '17', '11623', '7848', '0'), +('3', '5', '7', '4833', '6478', '0'), +('3', '5', '7', '4853', '5413', '0'), +('3', '5', '7', '2986', '3926', '0'), +('3', '5', '7', '4343', '3878', '0'), +('3', '5', '9', '4834', '4408', '0'), +('3', '5', '9', '4854', '3727', '0'), +('3', '5', '9', '12189', '3471', '0'), +('3', '5', '9', '10149', '3064', '0'), +('3', '5', '15', '10366', '8054', '0'), +('3', '5', '15', '10151', '7200', '0'), +('3', '5', '15', '14679', '7010', '0'), +('3', '5', '15', '14678', '5708', '0'), +('3', '5', '20', '2716', '23937', '0'), +('3', '5', '20', '11601', '17741', '0'), +('3', '5', '20', '2919', '10883', '0'), +('3', '5', '20', '1365', '10500', '0'), +('3', '5', '12', '4835', '9971', '0'), +('3', '5', '12', '20655', '7926', '0'), +('3', '5', '12', '2923', '4758', '0'), +('3', '5', '12', '4855', '4652', '0'), +('3', '5', '18', '4836', '6405', '0'), +('3', '5', '18', '4856', '5488', '0'), +('3', '5', '18', '4346', '4645', '0'), +('3', '5', '18', '3155', '4356', '0'), +('3', '5', '19', '4837', '7061', '0'), +('3', '5', '19', '3156', '6822', '0'), +('3', '5', '19', '68239', '5265', '0'), +('3', '5', '19', '4857', '5243', '0'), +('3', '5', '13', '5401', '19848', '0'), +('3', '5', '13', '11050', '19674', '0'), +('3', '5', '13', '11682', '18417', '0'), +('3', '5', '13', '27708', '18410', '0'), +('3', '5', '14', '11632', '27976', '0'), +('3', '5', '14', '11551', '23853', '0'), +('3', '5', '14', '9428', '20353', '0'), +('3', '5', '14', '11644', '19308', '0'), +('3', '5', '11', '8408', '6861', '0'), +('3', '5', '11', '8325', '6668', '0'), +('3', '5', '11', '8811', '5213', '0'), +('3', '5', '11', '8810', '4798', '0'), +('3', '6', '22', '10323', '0', '0'), +('3', '6', '22', '66166', '0', '0'), +('3', '6', '22', '8567', '0', '0'), +('3', '6', '22', '9246', '0', '0'), +('3', '6', '1', '14701', '4854', '0'), +('3', '6', '1', '14702', '3550', '0'), +('3', '6', '1', '10082', '2542', '0'), +('3', '6', '1', '10165', '1940', '0'), +('3', '6', '2', '4301', '7726', '0'), +('3', '6', '2', '4851', '6126', '0'), +('3', '6', '2', '4831', '6040', '0'), +('3', '6', '2', '10142', '4824', '0'), +('3', '6', '3', '71529', '2161', '0'), +('3', '6', '3', '21002', '2114', '0'), +('3', '6', '3', '4505', '1662', '0'), +('3', '6', '3', '10144', '1628', '0'), +('3', '6', '5', '14703', '7150', '0'), +('3', '6', '5', '12800', '4865', '0'), +('3', '6', '5', '14700', '4806', '0'), +('3', '6', '5', '10055', '4760', '0'), +('3', '6', '8', '11621', '26579', '0'), +('3', '6', '8', '11551', '8753', '0'), +('3', '6', '8', '1409', '7747', '0'), +('3', '6', '8', '11603', '6216', '0'), +('3', '6', '6', '1557', '8270', '0'), +('3', '6', '6', '25062', '3672', '0'), +('3', '6', '6', '4302', '3478', '0'), +('3', '6', '6', '4165', '3247', '0'), +('3', '6', '17', '4832', '11730', '0'), +('3', '6', '17', '4852', '10078', '0'), +('3', '6', '17', '4309', '8225', '0'), +('3', '6', '17', '11623', '7848', '0'), +('3', '6', '7', '4833', '6478', '0'), +('3', '6', '7', '4853', '5413', '0'), +('3', '6', '7', '2986', '3926', '0'), +('3', '6', '7', '4343', '3920', '0'), +('3', '6', '9', '4834', '4408', '0'), +('3', '6', '9', '4854', '3727', '0'), +('3', '6', '9', '12189', '3471', '0'), +('3', '6', '9', '10149', '3075', '0'), +('3', '6', '15', '10366', '8054', '0'), +('3', '6', '15', '10151', '7200', '0'), +('3', '6', '15', '14679', '7010', '0'), +('3', '6', '15', '14678', '5708', '0'), +('3', '6', '20', '2716', '23959', '0'), +('3', '6', '20', '11601', '17783', '0'), +('3', '6', '20', '2919', '10901', '0'), +('3', '6', '20', '1365', '10500', '0'), +('3', '6', '12', '4835', '9992', '0'), +('3', '6', '12', '20655', '7942', '0'), +('3', '6', '12', '2923', '4758', '0'), +('3', '6', '12', '4855', '4691', '0'), +('3', '6', '18', '4836', '6427', '0'), +('3', '6', '18', '4856', '5488', '0'), +('3', '6', '18', '4346', '4645', '0'), +('3', '6', '18', '3155', '4382', '0'), +('3', '6', '19', '4837', '7079', '0'), +('3', '6', '19', '3156', '6822', '0'), +('3', '6', '19', '68239', '5275', '0'), +('3', '6', '19', '4857', '5264', '0'), +('3', '6', '13', '5401', '19848', '0'), +('3', '6', '13', '11050', '19701', '0'), +('3', '6', '13', '27708', '18482', '0'), +('3', '6', '13', '11682', '18417', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '6', '14', '11632', '28040', '0'), +('3', '6', '14', '11551', '23853', '0'), +('3', '6', '14', '9428', '20353', '0'), +('3', '6', '14', '11644', '19308', '0'), +('3', '6', '11', '8408', '6861', '0'), +('3', '6', '11', '8325', '6668', '0'), +('3', '6', '11', '8811', '5213', '0'), +('3', '6', '11', '8810', '4798', '0'), +('3', '7', '22', '10323', '0', '0'), +('3', '7', '22', '66166', '0', '0'), +('3', '7', '22', '8567', '0', '0'), +('3', '7', '22', '9246', '0', '0'), +('3', '7', '1', '14701', '4854', '0'), +('3', '7', '1', '14702', '3550', '0'), +('3', '7', '1', '10082', '2564', '0'), +('3', '7', '1', '10165', '1940', '0'), +('3', '7', '2', '4301', '7726', '0'), +('3', '7', '2', '4851', '6152', '0'), +('3', '7', '2', '4831', '6040', '0'), +('3', '7', '2', '10142', '4824', '0'), +('3', '7', '3', '71529', '2533', '0'), +('3', '7', '3', '21002', '2114', '0'), +('3', '7', '3', '4505', '1688', '0'), +('3', '7', '3', '10144', '1628', '0'), +('3', '7', '5', '14703', '7150', '0'), +('3', '7', '5', '12800', '4883', '0'), +('3', '7', '5', '14700', '4806', '0'), +('3', '7', '5', '10055', '4760', '0'), +('3', '7', '8', '11621', '26579', '0'), +('3', '7', '8', '11551', '8753', '0'), +('3', '7', '8', '1409', '7747', '0'), +('3', '7', '8', '11603', '6248', '0'), +('3', '7', '6', '1557', '8270', '0'), +('3', '7', '6', '25062', '3672', '0'), +('3', '7', '6', '4302', '3503', '0'), +('3', '7', '6', '4165', '3247', '0'), +('3', '7', '17', '4832', '11793', '0'), +('3', '7', '17', '4852', '10149', '0'), +('3', '7', '17', '4309', '8225', '0'), +('3', '7', '17', '11623', '7848', '0'), +('3', '7', '7', '4833', '6478', '0'), +('3', '7', '7', '4853', '5413', '0'), +('3', '7', '7', '4343', '3962', '0'), +('3', '7', '7', '2986', '3926', '0'), +('3', '7', '9', '4834', '4408', '0'), +('3', '7', '9', '4854', '3727', '0'), +('3', '7', '9', '12189', '3471', '0'), +('3', '7', '9', '10149', '3086', '0'), +('3', '7', '15', '10366', '8054', '0'), +('3', '7', '15', '10151', '7200', '0'), +('3', '7', '15', '14679', '7010', '0'), +('3', '7', '15', '14678', '5708', '0'), +('3', '7', '20', '2716', '23980', '0'), +('3', '7', '20', '11601', '17825', '0'), +('3', '7', '20', '2919', '10919', '0'), +('3', '7', '20', '1365', '10500', '0'), +('3', '7', '12', '4835', '10013', '0'), +('3', '7', '12', '20655', '7958', '0'), +('3', '7', '12', '2923', '4758', '0'), +('3', '7', '12', '4855', '4730', '0'), +('3', '7', '18', '4836', '6448', '0'), +('3', '7', '18', '4856', '5488', '0'), +('3', '7', '18', '4346', '4645', '0'), +('3', '7', '18', '3155', '4407', '0'), +('3', '7', '19', '4837', '7097', '0'), +('3', '7', '19', '3156', '6822', '0'), +('3', '7', '19', '68239', '5286', '0'), +('3', '7', '19', '4857', '5285', '0'), +('3', '7', '13', '5401', '19848', '0'), +('3', '7', '13', '11050', '19728', '0'), +('3', '7', '13', '27708', '18553', '0'), +('3', '7', '13', '11682', '18417', '0'), +('3', '7', '14', '11632', '28103', '0'), +('3', '7', '14', '11551', '23853', '0'), +('3', '7', '14', '9428', '20353', '0'), +('3', '7', '14', '11644', '19308', '0'), +('3', '7', '11', '8408', '6861', '0'), +('3', '7', '11', '8325', '6668', '0'), +('3', '7', '11', '8811', '5213', '0'), +('3', '7', '11', '8810', '4798', '0'), +('3', '8', '22', '10323', '0', '0'), +('3', '8', '22', '66166', '0', '0'), +('3', '8', '22', '8567', '0', '0'), +('3', '8', '22', '9246', '0', '0'), +('3', '8', '1', '14701', '4854', '0'), +('3', '8', '1', '14702', '3550', '0'), +('3', '8', '1', '10082', '2586', '0'), +('3', '8', '1', '10165', '1940', '0'), +('3', '8', '2', '4301', '7726', '0'), +('3', '8', '2', '4851', '6177', '0'), +('3', '8', '2', '4831', '6040', '0'), +('3', '8', '2', '10142', '4824', '0'), +('3', '8', '3', '71529', '2911', '0'), +('3', '8', '3', '21002', '2114', '0'), +('3', '8', '3', '4505', '1713', '0'), +('3', '8', '3', '10144', '1628', '0'), +('3', '8', '5', '14703', '7150', '0'), +('3', '8', '5', '12800', '4901', '0'), +('3', '8', '5', '14700', '4806', '0'), +('3', '8', '5', '10055', '4760', '0'), +('3', '8', '8', '11621', '26579', '0'), +('3', '8', '8', '11551', '8753', '0'), +('3', '8', '8', '1409', '7747', '0'), +('3', '8', '8', '11603', '6281', '0'), +('3', '8', '6', '1557', '8270', '0'), +('3', '8', '6', '25062', '3672', '0'), +('3', '8', '6', '4302', '3532', '0'), +('3', '8', '6', '4165', '3247', '0'), +('3', '8', '17', '4832', '11866', '0'), +('3', '8', '17', '4852', '10225', '0'), +('3', '8', '17', '4309', '8225', '0'), +('3', '8', '17', '11623', '7848', '0'), +('3', '8', '7', '4833', '6478', '0'), +('3', '8', '7', '4853', '5413', '0'), +('3', '8', '7', '4343', '4011', '0'), +('3', '8', '7', '2986', '3926', '0'), +('3', '8', '9', '4834', '4408', '0'), +('3', '8', '9', '4854', '3727', '0'), +('3', '8', '9', '12189', '3471', '0'), +('3', '8', '9', '10149', '3097', '0'), +('3', '8', '15', '10366', '8054', '0'), +('3', '8', '15', '10151', '7200', '0'), +('3', '8', '15', '14679', '7010', '0'), +('3', '8', '15', '14678', '5708', '0'), +('3', '8', '20', '2716', '24002', '0'), +('3', '8', '20', '11601', '17874', '0'), +('3', '8', '20', '2919', '10937', '0'), +('3', '8', '20', '1365', '10500', '0'), +('3', '8', '12', '4835', '10037', '0'), +('3', '8', '12', '20655', '7975', '0'), +('3', '8', '12', '4855', '4773', '0'), +('3', '8', '12', '2923', '4758', '0'), +('3', '8', '18', '4836', '6472', '0'), +('3', '8', '18', '4856', '5488', '0'), +('3', '8', '18', '4346', '4645', '0'), +('3', '8', '18', '3155', '4436', '0'), +('3', '8', '19', '4837', '7115', '0'), +('3', '8', '19', '3156', '6822', '0'), +('3', '8', '19', '4857', '5309', '0'), +('3', '8', '19', '68239', '5297', '0'), +('3', '8', '13', '5401', '19848', '0'), +('3', '8', '13', '11050', '19756', '0'), +('3', '8', '13', '27708', '18630', '0'), +('3', '8', '13', '11682', '18417', '0'), +('3', '8', '14', '11632', '28175', '0'), +('3', '8', '14', '11551', '23853', '0'), +('3', '8', '14', '9428', '20353', '0'), +('3', '8', '14', '11644', '19308', '0'), +('3', '8', '11', '8408', '6861', '0'), +('3', '8', '11', '8325', '6668', '0'), +('3', '8', '11', '8811', '5213', '0'), +('3', '8', '11', '8810', '4798', '0'), +('3', '9', '22', '10323', '0', '0'), +('3', '9', '22', '66166', '0', '0'), +('3', '9', '22', '8567', '0', '0'), +('3', '9', '22', '9246', '0', '0'), +('3', '9', '1', '14701', '4854', '0'), +('3', '9', '1', '14702', '3550', '0'), +('3', '9', '1', '10082', '2608', '0'), +('3', '9', '1', '10165', '1940', '0'), +('3', '9', '2', '4301', '7726', '0'), +('3', '9', '2', '4851', '6202', '0'), +('3', '9', '2', '4831', '6040', '0'), +('3', '9', '2', '10142', '4824', '0'), +('3', '9', '3', '71529', '3290', '0'), +('3', '9', '3', '21002', '2114', '0'), +('3', '9', '3', '4505', '1738', '0'), +('3', '9', '3', '10144', '1628', '0'), +('3', '9', '5', '14703', '7150', '0'), +('3', '9', '5', '12800', '4920', '0'), +('3', '9', '5', '14700', '4806', '0'), +('3', '9', '5', '10055', '4760', '0'), +('3', '9', '8', '11621', '26579', '0'), +('3', '9', '8', '11551', '8753', '0'), +('3', '9', '8', '1409', '7747', '0'), +('3', '9', '8', '11603', '6314', '0'), +('3', '9', '6', '1557', '8270', '0'), +('3', '9', '6', '25062', '3672', '0'), +('3', '9', '6', '4302', '3558', '0'), +('3', '9', '6', '4165', '3247', '0'), +('3', '9', '17', '4832', '11929', '0'), +('3', '9', '17', '4852', '10296', '0'), +('3', '9', '17', '4309', '8225', '0'), +('3', '9', '17', '11623', '7848', '0'), +('3', '9', '7', '4833', '6478', '0'), +('3', '9', '7', '4853', '5413', '0'), +('3', '9', '7', '4343', '4053', '0'), +('3', '9', '7', '2986', '3926', '0'), +('3', '9', '9', '4834', '4408', '0'), +('3', '9', '9', '4854', '3727', '0'), +('3', '9', '9', '12189', '3471', '0'), +('3', '9', '9', '10149', '3108', '0'), +('3', '9', '15', '10366', '8054', '0'), +('3', '9', '15', '10151', '7200', '0'), +('3', '9', '15', '14679', '7010', '0'), +('3', '9', '15', '14678', '5708', '0'), +('3', '9', '20', '2716', '24024', '0'), +('3', '9', '20', '11601', '17916', '0'), +('3', '9', '20', '2919', '10956', '0'), +('3', '9', '20', '1365', '10500', '0'), +('3', '9', '12', '4835', '10059', '0'), +('3', '9', '12', '20655', '7991', '0'), +('3', '9', '12', '4855', '4812', '0'), +('3', '9', '12', '2923', '4758', '0'), +('3', '9', '18', '4836', '6493', '0'), +('3', '9', '18', '4856', '5488', '0'), +('3', '9', '18', '4346', '4645', '0'), +('3', '9', '18', '3155', '4462', '0'), +('3', '9', '19', '4837', '7133', '0'), +('3', '9', '19', '3156', '6822', '0'), +('3', '9', '19', '4857', '5330', '0'), +('3', '9', '19', '68239', '5308', '0'), +('3', '9', '13', '5401', '19848', '0'), +('3', '9', '13', '11050', '19783', '0'), +('3', '9', '13', '27708', '18702', '0'), +('3', '9', '13', '11682', '18417', '0'), +('3', '9', '14', '11632', '28239', '0'), +('3', '9', '14', '11551', '23853', '0'), +('3', '9', '14', '9428', '20353', '0'), +('3', '9', '14', '11644', '19308', '0'), +('3', '9', '11', '8408', '6861', '0'), +('3', '9', '11', '8325', '6668', '0'), +('3', '9', '11', '8811', '5213', '0'), +('3', '9', '11', '8810', '4798', '0'), +('3', '10', '22', '10323', '0', '0'), +('3', '10', '22', '66166', '0', '0'), +('3', '10', '22', '8567', '0', '0'), +('3', '10', '22', '9246', '0', '0'), +('3', '10', '1', '14701', '4854', '0'), +('3', '10', '1', '14702', '3550', '0'), +('3', '10', '1', '10082', '2629', '0'), +('3', '10', '1', '10165', '1940', '0'), +('3', '10', '2', '4301', '7726', '0'), +('3', '10', '2', '4851', '6228', '0'), +('3', '10', '2', '4831', '6040', '0'), +('3', '10', '2', '10142', '4824', '0'), +('3', '10', '3', '71529', '3675', '0'), +('3', '10', '3', '21002', '2114', '0'), +('3', '10', '3', '4505', '1764', '0'), +('3', '10', '3', '10144', '1628', '0'), +('3', '10', '5', '14703', '7150', '0'), +('3', '10', '5', '12800', '4938', '0'), +('3', '10', '5', '14700', '4806', '0'), +('3', '10', '5', '10055', '4760', '0'), +('3', '10', '8', '11621', '26579', '0'), +('3', '10', '8', '11551', '8753', '0'), +('3', '10', '8', '1409', '7747', '0'), +('3', '10', '8', '11603', '6346', '0'), +('3', '10', '6', '1557', '8270', '0'), +('3', '10', '6', '25062', '3672', '0'), +('3', '10', '6', '4302', '3587', '0'), +('3', '10', '6', '4165', '3247', '0'), +('3', '10', '17', '4832', '12001', '0'), +('3', '10', '17', '4852', '10372', '0'), +('3', '10', '17', '4309', '8225', '0'), +('3', '10', '17', '11623', '7848', '0'), +('3', '10', '7', '4833', '6478', '0'), +('3', '10', '7', '4853', '5413', '0'), +('3', '10', '7', '4343', '4101', '0'), +('3', '10', '7', '2986', '3926', '0'), +('3', '10', '9', '4834', '4408', '0'), +('3', '10', '9', '4854', '3727', '0'), +('3', '10', '9', '12189', '3471', '0'), +('3', '10', '9', '10149', '3119', '0'), +('3', '10', '15', '10366', '8054', '0'), +('3', '10', '15', '10151', '7200', '0'), +('3', '10', '15', '14679', '7010', '0'), +('3', '10', '15', '14678', '5708', '0'), +('3', '10', '20', '2716', '24045', '0'), +('3', '10', '20', '11601', '17964', '0'), +('3', '10', '20', '2919', '10974', '0'), +('3', '10', '20', '1365', '10500', '0'), +('3', '10', '12', '4835', '10083', '0'), +('3', '10', '12', '20655', '8007', '0'), +('3', '10', '12', '4855', '4854', '0'), +('3', '10', '12', '2923', '4758', '0'), +('3', '10', '18', '4836', '6517', '0'), +('3', '10', '18', '4856', '5488', '0'), +('3', '10', '18', '4346', '4645', '0'), +('3', '10', '18', '3155', '4491', '0'), +('3', '10', '19', '4837', '7151', '0'), +('3', '10', '19', '3156', '6822', '0'), +('3', '10', '19', '4857', '5354', '0'), +('3', '10', '19', '68239', '5319', '0'), +('3', '10', '13', '5401', '19848', '0'), +('3', '10', '13', '11050', '19810', '0'), +('3', '10', '13', '27708', '18779', '0'), +('3', '10', '13', '11682', '18417', '0'), +('3', '10', '14', '11632', '28311', '0'), +('3', '10', '14', '11551', '23853', '0'), +('3', '10', '14', '9428', '20353', '0'), +('3', '10', '14', '11644', '19308', '0'), +('3', '10', '11', '8408', '6861', '0'), +('3', '10', '11', '8325', '6668', '0'), +('3', '10', '11', '8811', '5213', '0'), +('3', '10', '11', '8810', '4798', '0'), +('3', '11', '22', '10323', '0', '0'), +('3', '11', '22', '66166', '0', '0'), +('3', '11', '22', '8567', '0', '0'), +('3', '11', '22', '9246', '0', '0'), +('3', '11', '1', '14701', '4854', '0'), +('3', '11', '1', '14702', '3550', '0'), +('3', '11', '1', '10082', '2651', '0'), +('3', '11', '1', '10165', '1940', '0'), +('3', '11', '2', '4301', '7726', '0'), +('3', '11', '2', '4851', '6253', '0'), +('3', '11', '2', '4831', '6040', '0'), +('3', '11', '2', '10142', '4824', '0'), +('3', '11', '3', '71529', '3691', '0'), +('3', '11', '3', '21002', '2114', '0'), +('3', '11', '3', '4505', '1789', '0'), +('3', '11', '3', '10144', '1628', '0'), +('3', '11', '5', '14703', '7150', '0'), +('3', '11', '5', '12800', '4956', '0'), +('3', '11', '5', '14700', '4806', '0'), +('3', '11', '5', '10055', '4760', '0'), +('3', '11', '8', '11621', '26579', '0'), +('3', '11', '8', '11551', '8753', '0'), +('3', '11', '8', '1409', '7747', '0'), +('3', '11', '8', '11603', '6379', '0'), +('3', '11', '6', '1557', '8270', '0'), +('3', '11', '6', '25062', '3672', '0'), +('3', '11', '6', '4302', '3612', '0'), +('3', '11', '6', '4165', '3247', '0'), +('3', '11', '17', '4832', '12065', '0'), +('3', '11', '17', '4852', '10443', '0'), +('3', '11', '17', '4309', '8225', '0'), +('3', '11', '17', '11623', '7848', '0'), +('3', '11', '7', '4833', '6478', '0'), +('3', '11', '7', '4853', '5413', '0'), +('3', '11', '7', '4343', '4143', '0'), +('3', '11', '7', '2986', '3926', '0'), +('3', '11', '9', '4834', '4408', '0'), +('3', '11', '9', '4854', '3727', '0'), +('3', '11', '9', '12189', '3471', '0'), +('3', '11', '9', '10149', '3130', '0'), +('3', '11', '15', '10366', '8054', '0'), +('3', '11', '15', '10151', '7200', '0'), +('3', '11', '15', '14679', '7010', '0'), +('3', '11', '15', '14678', '5708', '0'), +('3', '11', '20', '2716', '24067', '0'), +('3', '11', '20', '11601', '18007', '0'), +('3', '11', '20', '2919', '10992', '0'), +('3', '11', '20', '1365', '10500', '0'), +('3', '11', '12', '4835', '10104', '0'), +('3', '11', '12', '20655', '8023', '0'), +('3', '11', '12', '4855', '4893', '0'), +('3', '11', '12', '2923', '4758', '0'), +('3', '11', '18', '4836', '6538', '0'), +('3', '11', '18', '4856', '5488', '0'), +('3', '11', '18', '4346', '4645', '0'), +('3', '11', '18', '3155', '4516', '0'), +('3', '11', '19', '4837', '7170', '0'), +('3', '11', '19', '3156', '6822', '0'), +('3', '11', '19', '4857', '5376', '0'), +('3', '11', '19', '68239', '5330', '0'), +('3', '11', '13', '5401', '19848', '0'), +('3', '11', '13', '11050', '19837', '0'), +('3', '11', '13', '27708', '18850', '0'), +('3', '11', '13', '11682', '18417', '0'), +('3', '11', '14', '11632', '28375', '0'), +('3', '11', '14', '11551', '23853', '0'), +('3', '11', '14', '9428', '20353', '0'), +('3', '11', '14', '11644', '19308', '0'), +('3', '11', '11', '8408', '6861', '0'), +('3', '11', '11', '8325', '6668', '0'), +('3', '11', '11', '8811', '5213', '0'), +('3', '11', '11', '8810', '4798', '0'), +('3', '12', '22', '10323', '0', '0'), +('3', '12', '22', '66166', '0', '0'), +('3', '12', '22', '8567', '0', '0'), +('3', '12', '22', '9246', '0', '0'), +('3', '12', '1', '14701', '4854', '0'), +('3', '12', '1', '14702', '3550', '0'), +('3', '12', '1', '10082', '2673', '0'), +('3', '12', '1', '10165', '1940', '0'), +('3', '12', '2', '4301', '7726', '0'), +('3', '12', '2', '4851', '6278', '0'), +('3', '12', '2', '4831', '6040', '0'), +('3', '12', '2', '10142', '4824', '0'), +('3', '12', '3', '71529', '3711', '0'), +('3', '12', '3', '21002', '2114', '0'), +('3', '12', '3', '4505', '1814', '0'), +('3', '12', '3', '10144', '1628', '0'), +('3', '12', '5', '14703', '7150', '0'), +('3', '12', '5', '12800', '4974', '0'), +('3', '12', '5', '14700', '4806', '0'), +('3', '12', '5', '10055', '4760', '0'), +('3', '12', '8', '11621', '26579', '0'), +('3', '12', '8', '11551', '8753', '0'), +('3', '12', '8', '1409', '7747', '0'), +('3', '12', '8', '11603', '6411', '0'), +('3', '12', '6', '1557', '8270', '0'), +('3', '12', '6', '25062', '3672', '0'), +('3', '12', '6', '4302', '3641', '0'), +('3', '12', '6', '4165', '3247', '0'), +('3', '12', '17', '4832', '12137', '0'), +('3', '12', '17', '4852', '10519', '0'), +('3', '12', '17', '4309', '8225', '0'), +('3', '12', '17', '11623', '7848', '0'), +('3', '12', '7', '4833', '6478', '0'), +('3', '12', '7', '4853', '5413', '0'), +('3', '12', '7', '4343', '4192', '0'), +('3', '12', '7', '2986', '3926', '0'), +('3', '12', '9', '4834', '4408', '0'), +('3', '12', '9', '4854', '3727', '0'), +('3', '12', '9', '12189', '3471', '0'), +('3', '12', '9', '10149', '3140', '0'), +('3', '12', '15', '10366', '8054', '0'), +('3', '12', '15', '10151', '7200', '0'), +('3', '12', '15', '14679', '7010', '0'), +('3', '12', '15', '14678', '5708', '0'), +('3', '12', '20', '2716', '24089', '0'), +('3', '12', '20', '11601', '18055', '0'), +('3', '12', '20', '2919', '11010', '0'), +('3', '12', '20', '1365', '10500', '0'), +('3', '12', '12', '4835', '10128', '0'), +('3', '12', '12', '20655', '8040', '0'), +('3', '12', '12', '4855', '4936', '0'), +('3', '12', '12', '2923', '4758', '0'), +('3', '12', '18', '4836', '6562', '0'), +('3', '12', '18', '4856', '5488', '0'), +('3', '12', '18', '4346', '4645', '0'), +('3', '12', '18', '3155', '4545', '0'), +('3', '12', '19', '4837', '7188', '0'), +('3', '12', '19', '3156', '6822', '0'), +('3', '12', '19', '4857', '5400', '0'), +('3', '12', '19', '68239', '5341', '0'), +('3', '12', '13', '11050', '19864', '0'), +('3', '12', '13', '5401', '19848', '0'), +('3', '12', '13', '27708', '18927', '0'), +('3', '12', '13', '11682', '18417', '0'), +('3', '12', '14', '11632', '28447', '0'), +('3', '12', '14', '11551', '23853', '0'), +('3', '12', '14', '9428', '20353', '0'), +('3', '12', '14', '11644', '19308', '0'), +('3', '12', '11', '8408', '6861', '0'), +('3', '12', '11', '8325', '6668', '0'), +('3', '12', '11', '8811', '5213', '0'), +('3', '12', '11', '8810', '4798', '0'), +('3', '13', '22', '10323', '0', '0'), +('3', '13', '22', '66166', '0', '0'), +('3', '13', '22', '8567', '0', '0'), +('3', '13', '22', '9246', '0', '0'), +('3', '13', '1', '14701', '4854', '0'), +('3', '13', '1', '14702', '3550', '0'), +('3', '13', '1', '10082', '2695', '0'), +('3', '13', '1', '10165', '1940', '0'), +('3', '13', '2', '4301', '7726', '0'), +('3', '13', '2', '4851', '6304', '0'), +('3', '13', '2', '4831', '6040', '0'), +('3', '13', '2', '10142', '4824', '0'), +('3', '13', '3', '71529', '3730', '0'), +('3', '13', '3', '21002', '2114', '0'), +('3', '13', '3', '4505', '1840', '0'), +('3', '13', '3', '10144', '1628', '0'), +('3', '13', '5', '14703', '7150', '0'), +('3', '13', '5', '12800', '4992', '0'), +('3', '13', '5', '14700', '4806', '0'), +('3', '13', '5', '10055', '4760', '0'), +('3', '13', '8', '11621', '26579', '0'), +('3', '13', '8', '11551', '8753', '0'), +('3', '13', '8', '1409', '7747', '0'), +('3', '13', '8', '11603', '6444', '0'), +('3', '13', '6', '1557', '8270', '0'), +('3', '13', '6', '25062', '3672', '0'), +('3', '13', '6', '4302', '3670', '0'), +('3', '13', '6', '4165', '3247', '0'), +('3', '13', '17', '4832', '12210', '0'), +('3', '13', '17', '4852', '10595', '0'), +('3', '13', '17', '4309', '8225', '0'), +('3', '13', '17', '11623', '7848', '0'), +('3', '13', '7', '4833', '6478', '0'), +('3', '13', '7', '4853', '5413', '0'), +('3', '13', '7', '4343', '4240', '0'), +('3', '13', '7', '2986', '3926', '0'), +('3', '13', '9', '4834', '4408', '0'), +('3', '13', '9', '4854', '3727', '0'), +('3', '13', '9', '12189', '3471', '0'), +('3', '13', '9', '10149', '3151', '0'), +('3', '13', '15', '10366', '8054', '0'), +('3', '13', '15', '10151', '7200', '0'), +('3', '13', '15', '14679', '7010', '0'), +('3', '13', '15', '14678', '5708', '0'), +('3', '13', '20', '2716', '24111', '0'), +('3', '13', '20', '11601', '18103', '0'), +('3', '13', '20', '2919', '11028', '0'), +('3', '13', '20', '1365', '10500', '0'), +('3', '13', '12', '4835', '10152', '0'), +('3', '13', '12', '20655', '8057', '0'), +('3', '13', '12', '4855', '4978', '0'), +('3', '13', '12', '2923', '4758', '0'), +('3', '13', '18', '4836', '6587', '0'), +('3', '13', '18', '4856', '5488', '0'), +('3', '13', '18', '4346', '4645', '0'), +('3', '13', '18', '3155', '4574', '0'), +('3', '13', '19', '4837', '7206', '0'), +('3', '13', '19', '3156', '6822', '0'), +('3', '13', '19', '4857', '5424', '0'), +('3', '13', '19', '68239', '5352', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '13', '13', '11050', '19891', '0'), +('3', '13', '13', '5401', '19848', '0'), +('3', '13', '13', '27708', '19005', '0'), +('3', '13', '13', '11682', '18417', '0'), +('3', '13', '14', '11632', '28520', '0'), +('3', '13', '14', '11551', '23853', '0'), +('3', '13', '14', '9428', '20353', '0'), +('3', '13', '14', '11644', '19308', '0'), +('3', '13', '11', '8408', '6861', '0'), +('3', '13', '11', '8325', '6668', '0'), +('3', '13', '11', '8811', '5213', '0'), +('3', '13', '11', '8810', '4798', '0'), +('3', '14', '22', '10323', '0', '0'), +('3', '14', '22', '66166', '0', '0'), +('3', '14', '22', '8567', '0', '0'), +('3', '14', '22', '9246', '0', '0'), +('3', '14', '1', '14701', '4854', '0'), +('3', '14', '1', '14702', '3550', '0'), +('3', '14', '1', '10082', '2716', '0'), +('3', '14', '1', '10165', '1940', '0'), +('3', '14', '2', '4301', '7726', '0'), +('3', '14', '2', '4851', '6329', '0'), +('3', '14', '2', '4831', '6040', '0'), +('3', '14', '2', '10142', '4824', '0'), +('3', '14', '3', '71529', '3747', '0'), +('3', '14', '3', '21002', '2114', '0'), +('3', '14', '3', '4505', '1865', '0'), +('3', '14', '3', '10144', '1628', '0'), +('3', '14', '5', '14703', '7150', '0'), +('3', '14', '5', '12800', '5010', '0'), +('3', '14', '5', '14700', '4806', '0'), +('3', '14', '5', '10055', '4760', '0'), +('3', '14', '8', '11621', '26579', '0'), +('3', '14', '8', '11551', '8753', '0'), +('3', '14', '8', '1409', '7747', '0'), +('3', '14', '8', '11603', '6477', '0'), +('3', '14', '6', '1557', '8270', '0'), +('3', '14', '6', '4302', '3695', '0'), +('3', '14', '6', '25062', '3672', '0'), +('3', '14', '6', '4165', '3247', '0'), +('3', '14', '17', '4832', '12273', '0'), +('3', '14', '17', '4852', '10665', '0'), +('3', '14', '17', '4309', '8225', '0'), +('3', '14', '17', '11623', '7848', '0'), +('3', '14', '7', '4833', '6478', '0'), +('3', '14', '7', '4853', '5413', '0'), +('3', '14', '7', '4343', '4282', '0'), +('3', '14', '7', '2986', '3926', '0'), +('3', '14', '9', '4834', '4408', '0'), +('3', '14', '9', '4854', '3727', '0'), +('3', '14', '9', '12189', '3471', '0'), +('3', '14', '9', '10149', '3162', '0'), +('3', '14', '15', '10366', '8054', '0'), +('3', '14', '15', '10151', '7200', '0'), +('3', '14', '15', '14679', '7010', '0'), +('3', '14', '15', '14678', '5708', '0'), +('3', '14', '20', '2716', '24132', '0'), +('3', '14', '20', '11601', '18146', '0'), +('3', '14', '20', '2919', '11046', '0'), +('3', '14', '20', '1365', '10500', '0'), +('3', '14', '12', '4835', '10173', '0'), +('3', '14', '12', '20655', '8073', '0'), +('3', '14', '12', '4855', '5017', '0'), +('3', '14', '12', '2923', '4758', '0'), +('3', '14', '18', '4836', '6608', '0'), +('3', '14', '18', '4856', '5488', '0'), +('3', '14', '18', '4346', '4645', '0'), +('3', '14', '18', '3155', '4599', '0'), +('3', '14', '19', '4837', '7224', '0'), +('3', '14', '19', '3156', '6822', '0'), +('3', '14', '19', '4857', '5445', '0'), +('3', '14', '19', '68239', '5362', '0'), +('3', '14', '13', '11050', '19919', '0'), +('3', '14', '13', '5401', '19848', '0'), +('3', '14', '13', '27708', '19076', '0'), +('3', '14', '13', '11682', '18417', '0'), +('3', '14', '14', '11632', '28583', '0'), +('3', '14', '14', '11551', '23853', '0'), +('3', '14', '14', '9428', '20353', '0'), +('3', '14', '14', '11644', '19308', '0'), +('3', '14', '11', '8408', '6861', '0'), +('3', '14', '11', '8325', '6668', '0'), +('3', '14', '11', '8811', '5213', '0'), +('3', '14', '11', '8810', '4798', '0'), +('3', '15', '22', '10323', '0', '0'), +('3', '15', '22', '66166', '0', '0'), +('3', '15', '22', '8567', '0', '0'), +('3', '15', '22', '9246', '0', '0'), +('3', '15', '1', '14701', '4854', '0'), +('3', '15', '1', '14702', '3550', '0'), +('3', '15', '1', '10082', '2738', '0'), +('3', '15', '1', '10165', '1940', '0'), +('3', '15', '2', '4301', '7726', '0'), +('3', '15', '2', '4851', '6355', '0'), +('3', '15', '2', '4831', '6040', '0'), +('3', '15', '2', '10142', '4824', '0'), +('3', '15', '3', '71529', '3766', '0'), +('3', '15', '3', '21002', '2114', '0'), +('3', '15', '3', '4505', '1891', '0'), +('3', '15', '3', '10144', '1628', '0'), +('3', '15', '5', '14703', '7150', '0'), +('3', '15', '5', '12800', '5028', '0'), +('3', '15', '5', '14700', '4806', '0'), +('3', '15', '5', '10055', '4760', '0'), +('3', '15', '8', '11621', '26579', '0'), +('3', '15', '8', '11551', '8753', '0'), +('3', '15', '8', '1409', '7747', '0'), +('3', '15', '8', '11603', '6509', '0'), +('3', '15', '6', '1557', '8270', '0'), +('3', '15', '6', '4302', '3724', '0'), +('3', '15', '6', '25062', '3672', '0'), +('3', '15', '6', '4165', '3247', '0'), +('3', '15', '17', '4832', '12346', '0'), +('3', '15', '17', '4852', '10742', '0'), +('3', '15', '17', '4309', '8225', '0'), +('3', '15', '17', '11623', '7848', '0'), +('3', '15', '7', '4833', '6478', '0'), +('3', '15', '7', '4853', '5413', '0'), +('3', '15', '7', '4343', '4331', '0'), +('3', '15', '7', '3152', '3948', '0'), +('3', '15', '9', '4834', '4408', '0'), +('3', '15', '9', '4854', '3727', '0'), +('3', '15', '9', '12189', '3471', '0'), +('3', '15', '9', '10149', '3173', '0'), +('3', '15', '15', '10366', '8054', '0'), +('3', '15', '15', '10151', '7200', '0'), +('3', '15', '15', '14679', '7010', '0'), +('3', '15', '15', '14678', '5708', '0'), +('3', '15', '20', '2716', '24154', '0'), +('3', '15', '20', '11601', '18194', '0'), +('3', '15', '20', '2919', '11064', '0'), +('3', '15', '20', '1365', '10500', '0'), +('3', '15', '12', '4835', '10197', '0'), +('3', '15', '12', '20655', '8090', '0'), +('3', '15', '12', '4855', '5060', '0'), +('3', '15', '12', '2923', '4758', '0'), +('3', '15', '18', '4836', '6632', '0'), +('3', '15', '18', '4856', '5488', '0'), +('3', '15', '18', '4346', '4645', '0'), +('3', '15', '18', '3155', '4628', '0'), +('3', '15', '19', '4837', '7242', '0'), +('3', '15', '19', '3156', '6822', '0'), +('3', '15', '19', '4857', '5469', '0'), +('3', '15', '19', '68239', '5373', '0'), +('3', '15', '13', '11050', '19946', '0'), +('3', '15', '13', '5401', '19848', '0'), +('3', '15', '13', '27708', '19153', '0'), +('3', '15', '13', '11682', '18417', '0'), +('3', '15', '14', '11632', '28656', '0'), +('3', '15', '14', '11551', '23853', '0'), +('3', '15', '14', '9428', '20353', '0'), +('3', '15', '14', '11644', '19308', '0'), +('3', '15', '11', '8408', '6861', '0'), +('3', '15', '11', '8325', '6668', '0'), +('3', '15', '11', '8811', '5213', '0'), +('3', '15', '11', '8810', '4798', '0'), +('3', '16', '22', '10323', '0', '0'), +('3', '16', '22', '66166', '0', '0'), +('3', '16', '22', '8567', '0', '0'), +('3', '16', '22', '9246', '0', '0'), +('3', '16', '1', '14701', '4854', '0'), +('3', '16', '1', '14702', '3550', '0'), +('3', '16', '1', '10082', '2760', '0'), +('3', '16', '1', '10165', '1940', '0'), +('3', '16', '2', '4301', '7726', '0'), +('3', '16', '2', '4851', '6380', '0'), +('3', '16', '2', '4831', '6040', '0'), +('3', '16', '2', '10142', '4824', '0'), +('3', '16', '3', '71529', '3786', '0'), +('3', '16', '3', '21002', '2114', '0'), +('3', '16', '3', '4505', '1916', '0'), +('3', '16', '3', '10144', '1628', '0'), +('3', '16', '5', '14703', '7150', '0'), +('3', '16', '5', '12800', '5046', '0'), +('3', '16', '5', '14700', '4806', '0'), +('3', '16', '5', '10055', '4760', '0'), +('3', '16', '8', '11621', '26579', '0'), +('3', '16', '8', '11551', '8753', '0'), +('3', '16', '8', '1409', '7747', '0'), +('3', '16', '8', '11603', '6542', '0'), +('3', '16', '6', '1557', '8270', '0'), +('3', '16', '6', '4302', '3753', '0'), +('3', '16', '6', '25062', '3672', '0'), +('3', '16', '6', '4165', '3247', '0'), +('3', '16', '17', '4832', '12418', '0'), +('3', '16', '17', '4852', '10818', '0'), +('3', '16', '17', '4309', '8225', '0'), +('3', '16', '17', '11623', '7848', '0'), +('3', '16', '7', '4833', '6478', '0'), +('3', '16', '7', '4853', '5413', '0'), +('3', '16', '7', '4343', '4379', '0'), +('3', '16', '7', '3152', '3970', '0'), +('3', '16', '9', '4834', '4408', '0'), +('3', '16', '9', '4854', '3727', '0'), +('3', '16', '9', '12189', '3471', '0'), +('3', '16', '9', '10149', '3184', '0'), +('3', '16', '15', '10366', '8054', '0'), +('3', '16', '15', '10151', '7200', '0'), +('3', '16', '15', '14679', '7010', '0'), +('3', '16', '15', '14678', '5708', '0'), +('3', '16', '20', '2716', '24176', '0'), +('3', '16', '20', '11601', '18242', '0'), +('3', '16', '20', '2919', '11082', '0'), +('3', '16', '20', '1365', '10500', '0'), +('3', '16', '12', '4835', '10222', '0'), +('3', '16', '12', '20655', '8106', '0'), +('3', '16', '12', '4855', '5102', '0'), +('3', '16', '12', '2923', '4758', '0'), +('3', '16', '18', '4836', '6656', '0'), +('3', '16', '18', '4856', '5488', '0'), +('3', '16', '18', '3155', '4657', '0'), +('3', '16', '18', '4346', '4645', '0'), +('3', '16', '19', '4837', '7260', '0'), +('3', '16', '19', '3156', '6822', '0'), +('3', '16', '19', '4857', '5493', '0'), +('3', '16', '19', '68239', '5384', '0'), +('3', '16', '13', '11050', '19973', '0'), +('3', '16', '13', '5401', '19848', '0'), +('3', '16', '13', '27708', '19231', '0'), +('3', '16', '13', '27709', '18465', '0'), +('3', '16', '14', '11632', '28728', '0'), +('3', '16', '14', '11551', '23853', '0'), +('3', '16', '14', '9428', '20353', '0'), +('3', '16', '14', '11644', '19308', '0'), +('3', '16', '11', '8408', '6861', '0'), +('3', '16', '11', '8325', '6668', '0'), +('3', '16', '11', '8811', '5213', '0'), +('3', '16', '11', '45137', '5003', '0'), +('3', '17', '22', '10323', '0', '0'), +('3', '17', '22', '66166', '0', '0'), +('3', '17', '22', '8567', '0', '0'), +('3', '17', '22', '9246', '0', '0'), +('3', '17', '1', '14701', '4854', '0'), +('3', '17', '1', '14702', '3550', '0'), +('3', '17', '1', '10082', '2782', '0'), +('3', '17', '1', '10165', '1940', '0'), +('3', '17', '2', '4301', '7726', '0'), +('3', '17', '2', '4851', '6405', '0'), +('3', '17', '2', '4831', '6040', '0'), +('3', '17', '2', '10142', '4824', '0'), +('3', '17', '3', '71529', '3805', '0'), +('3', '17', '3', '21002', '2114', '0'), +('3', '17', '3', '4505', '1941', '0'), +('3', '17', '3', '10144', '1628', '0'), +('3', '17', '5', '14703', '7150', '0'), +('3', '17', '5', '12800', '5065', '0'), +('3', '17', '5', '14700', '4806', '0'), +('3', '17', '5', '10055', '4760', '0'), +('3', '17', '8', '11621', '26579', '0'), +('3', '17', '8', '11551', '8753', '0'), +('3', '17', '8', '1409', '7747', '0'), +('3', '17', '8', '11603', '6574', '0'), +('3', '17', '6', '1557', '8270', '0'), +('3', '17', '6', '4302', '3782', '0'), +('3', '17', '6', '25062', '3672', '0'), +('3', '17', '6', '4165', '3247', '0'), +('3', '17', '17', '4832', '12491', '0'), +('3', '17', '17', '4852', '10894', '0'), +('3', '17', '17', '4309', '8225', '0'), +('3', '17', '17', '11623', '7848', '0'), +('3', '17', '7', '4833', '6478', '0'), +('3', '17', '7', '4853', '5413', '0'), +('3', '17', '7', '4343', '4427', '0'), +('3', '17', '7', '3152', '3992', '0'), +('3', '17', '9', '4834', '4408', '0'), +('3', '17', '9', '4854', '3727', '0'), +('3', '17', '9', '12189', '3471', '0'), +('3', '17', '9', '10149', '3195', '0'), +('3', '17', '15', '10366', '8054', '0'), +('3', '17', '15', '10151', '7200', '0'), +('3', '17', '15', '14679', '7010', '0'), +('3', '17', '15', '14678', '5708', '0'), +('3', '17', '20', '2716', '24198', '0'), +('3', '17', '20', '11601', '18290', '0'), +('3', '17', '20', '2919', '11101', '0'), +('3', '17', '20', '1365', '10500', '0'), +('3', '17', '12', '4835', '10246', '0'), +('3', '17', '12', '20655', '8123', '0'), +('3', '17', '12', '4855', '5144', '0'), +('3', '17', '12', '2923', '4758', '0'), +('3', '17', '18', '4836', '6680', '0'), +('3', '17', '18', '4856', '5488', '0'), +('3', '17', '18', '3155', '4686', '0'), +('3', '17', '18', '4346', '4645', '0'), +('3', '17', '19', '4837', '7278', '0'), +('3', '17', '19', '3156', '6822', '0'), +('3', '17', '19', '4857', '5518', '0'), +('3', '17', '19', '68239', '5395', '0'), +('3', '17', '13', '11050', '20000', '0'), +('3', '17', '13', '5401', '19848', '0'), +('3', '17', '13', '27708', '19308', '0'), +('3', '17', '13', '27709', '18519', '0'), +('3', '17', '14', '11632', '28801', '0'), +('3', '17', '14', '11551', '23853', '0'), +('3', '17', '14', '9428', '20353', '0'), +('3', '17', '14', '11644', '19308', '0'), +('3', '17', '11', '8408', '6861', '0'), +('3', '17', '11', '8325', '6668', '0'), +('3', '17', '11', '45137', '5293', '0'), +('3', '17', '11', '8811', '5213', '0'), +('3', '18', '22', '10323', '0', '0'), +('3', '18', '22', '66166', '0', '0'), +('3', '18', '22', '8567', '0', '0'), +('3', '18', '22', '9246', '0', '0'), +('3', '18', '1', '14701', '4854', '0'), +('3', '18', '1', '14702', '3550', '0'), +('3', '18', '1', '10082', '2803', '0'), +('3', '18', '1', '10165', '1940', '0'), +('3', '18', '2', '4301', '7726', '0'), +('3', '18', '2', '4851', '6431', '0'), +('3', '18', '2', '4831', '6040', '0'), +('3', '18', '2', '10142', '4824', '0'), +('3', '18', '3', '71529', '3824', '0'), +('3', '18', '3', '21002', '2114', '0'), +('3', '18', '3', '4505', '1967', '0'), +('3', '18', '3', '10144', '1628', '0'), +('3', '18', '5', '14703', '7150', '0'), +('3', '18', '5', '12800', '5083', '0'), +('3', '18', '5', '14700', '4806', '0'), +('3', '18', '5', '10055', '4760', '0'), +('3', '18', '8', '11621', '26579', '0'), +('3', '18', '8', '11551', '8753', '0'), +('3', '18', '8', '1409', '7747', '0'), +('3', '18', '8', '11603', '6607', '0'), +('3', '18', '6', '1557', '8270', '0'), +('3', '18', '6', '4302', '3811', '0'), +('3', '18', '6', '25062', '3672', '0'), +('3', '18', '6', '4165', '3247', '0'), +('3', '18', '17', '4832', '12563', '0'), +('3', '18', '17', '4852', '10970', '0'), +('3', '18', '17', '4309', '8225', '0'), +('3', '18', '17', '11623', '7848', '0'), +('3', '18', '7', '4833', '6478', '0'), +('3', '18', '7', '4853', '5413', '0'), +('3', '18', '7', '4343', '4476', '0'), +('3', '18', '7', '3152', '4013', '0'), +('3', '18', '9', '4834', '4408', '0'), +('3', '18', '9', '4854', '3727', '0'), +('3', '18', '9', '12189', '3471', '0'), +('3', '18', '9', '10149', '3206', '0'), +('3', '18', '15', '10366', '8054', '0'), +('3', '18', '15', '10151', '7200', '0'), +('3', '18', '15', '14679', '7010', '0'), +('3', '18', '15', '14678', '5708', '0'), +('3', '18', '20', '2716', '24219', '0'), +('3', '18', '20', '11601', '18339', '0'), +('3', '18', '20', '2919', '11119', '0'), +('3', '18', '20', '1365', '10500', '0'), +('3', '18', '12', '4835', '10270', '0'), +('3', '18', '12', '20655', '8140', '0'), +('3', '18', '12', '4855', '5186', '0'), +('3', '18', '12', '2923', '4758', '0'), +('3', '18', '18', '4836', '6704', '0'), +('3', '18', '18', '4856', '5488', '0'), +('3', '18', '18', '3155', '4715', '0'), +('3', '18', '18', '4346', '4645', '0'), +('3', '18', '19', '4837', '7296', '0'), +('3', '18', '19', '3156', '6822', '0'), +('3', '18', '19', '4857', '5542', '0'), +('3', '18', '19', '68239', '5406', '0'), +('3', '18', '13', '11050', '20027', '0'), +('3', '18', '13', '5401', '19848', '0'), +('3', '18', '13', '27708', '19385', '0'), +('3', '18', '13', '27709', '18573', '0'), +('3', '18', '14', '11632', '28873', '0'), +('3', '18', '14', '11551', '23853', '0'), +('3', '18', '14', '9428', '20353', '0'), +('3', '18', '14', '11644', '19308', '0'), +('3', '18', '11', '8408', '6861', '0'), +('3', '18', '11', '8325', '6668', '0'), +('3', '18', '11', '45137', '5688', '0'), +('3', '18', '11', '8811', '5213', '0'), +('3', '19', '22', '10323', '0', '0'), +('3', '19', '22', '66166', '0', '0'), +('3', '19', '22', '8567', '0', '0'), +('3', '19', '22', '9246', '0', '0'), +('3', '19', '1', '14701', '4854', '0'), +('3', '19', '1', '14702', '3550', '0'), +('3', '19', '1', '10082', '2825', '0'), +('3', '19', '1', '10165', '1940', '0'), +('3', '19', '2', '4301', '7726', '0'), +('3', '19', '2', '4851', '6456', '0'), +('3', '19', '2', '4831', '6040', '0'), +('3', '19', '2', '4620', '4848', '0'), +('3', '19', '3', '71529', '3844', '0'), +('3', '19', '3', '21002', '2114', '0'), +('3', '19', '3', '4505', '1992', '0'), +('3', '19', '3', '10144', '1628', '0'), +('3', '19', '5', '14703', '7150', '0'), +('3', '19', '5', '12800', '5101', '0'), +('3', '19', '5', '14700', '4806', '0'), +('3', '19', '5', '10055', '4760', '0'), +('3', '19', '8', '11621', '26579', '0'), +('3', '19', '8', '11551', '8753', '0'), +('3', '19', '8', '1409', '7747', '0'), +('3', '19', '8', '11603', '6640', '0'), +('3', '19', '6', '1557', '8270', '0'), +('3', '19', '6', '4302', '3840', '0'), +('3', '19', '6', '25062', '3672', '0'), +('3', '19', '6', '4165', '3247', '0'), +('3', '19', '17', '4832', '12636', '0'), +('3', '19', '17', '4852', '11046', '0'), +('3', '19', '17', '4309', '8225', '0'), +('3', '19', '17', '11623', '7848', '0'), +('3', '19', '7', '4833', '6478', '0'), +('3', '19', '7', '4853', '5413', '0'), +('3', '19', '7', '4343', '4524', '0'), +('3', '19', '7', '3152', '4035', '0'), +('3', '19', '9', '4834', '4408', '0'), +('3', '19', '9', '4854', '3727', '0'), +('3', '19', '9', '12189', '3471', '0'), +('3', '19', '9', '10149', '3217', '0'), +('3', '19', '15', '10366', '8054', '0'), +('3', '19', '15', '10151', '7200', '0'), +('3', '19', '15', '14679', '7010', '0'), +('3', '19', '15', '14678', '5708', '0'), +('3', '19', '20', '2716', '24241', '0'), +('3', '19', '20', '11601', '18387', '0'), +('3', '19', '20', '2919', '11137', '0'), +('3', '19', '20', '1365', '10500', '0'), +('3', '19', '12', '4835', '10294', '0'), +('3', '19', '12', '20655', '8157', '0'), +('3', '19', '12', '4855', '5229', '0'), +('3', '19', '12', '2923', '4758', '0'), +('3', '19', '18', '4836', '6729', '0'), +('3', '19', '18', '4856', '5488', '0'), +('3', '19', '18', '3155', '4744', '0'), +('3', '19', '18', '4346', '4645', '0'), +('3', '19', '19', '4837', '7314', '0'), +('3', '19', '19', '3156', '6822', '0'), +('3', '19', '19', '4857', '5566', '0'), +('3', '19', '19', '68239', '5417', '0'), +('3', '19', '13', '11050', '20055', '0'), +('3', '19', '13', '5401', '19848', '0'), +('3', '19', '13', '27708', '19463', '0'), +('3', '19', '13', '27709', '18628', '0'), +('3', '19', '14', '11632', '28946', '0'), +('3', '19', '14', '11551', '23853', '0'), +('3', '19', '14', '9428', '20353', '0'), +('3', '19', '14', '11644', '19308', '0'), +('3', '19', '11', '8408', '6861', '0'), +('3', '19', '11', '8325', '6668', '0'), +('3', '19', '11', '45137', '5990', '0'), +('3', '19', '11', '8811', '5213', '0'), +('3', '20', '22', '10323', '0', '0'), +('3', '20', '22', '66166', '0', '0'), +('3', '20', '22', '8567', '0', '0'), +('3', '20', '22', '9246', '0', '0'), +('3', '20', '1', '14701', '4854', '0'), +('3', '20', '1', '14702', '3550', '0'), +('3', '20', '1', '10082', '2847', '0'), +('3', '20', '1', '10165', '1940', '0'), +('3', '20', '2', '4301', '7726', '0'), +('3', '20', '2', '4851', '6481', '0'), +('3', '20', '2', '4831', '6040', '0'), +('3', '20', '2', '4620', '4882', '0'), +('3', '20', '3', '71529', '3863', '0'), +('3', '20', '3', '21002', '2114', '0'), +('3', '20', '3', '4505', '2017', '0'), +('3', '20', '3', '10144', '1628', '0'), +('3', '20', '5', '14703', '7150', '0'), +('3', '20', '5', '12800', '5119', '0'), +('3', '20', '5', '14700', '4806', '0'), +('3', '20', '5', '10055', '4760', '0'), +('3', '20', '8', '11621', '26579', '0'), +('3', '20', '8', '11551', '8753', '0'), +('3', '20', '8', '1409', '7747', '0'), +('3', '20', '8', '11603', '6672', '0'), +('3', '20', '6', '1557', '8270', '0'), +('3', '20', '6', '4302', '3869', '0'), +('3', '20', '6', '25062', '3672', '0'), +('3', '20', '6', '4165', '3247', '0'), +('3', '20', '17', '4832', '12708', '0'), +('3', '20', '17', '4852', '11122', '0'), +('3', '20', '17', '4309', '8225', '0'), +('3', '20', '17', '11623', '7848', '0'), +('3', '20', '7', '4833', '6478', '0'), +('3', '20', '7', '4853', '5413', '0'), +('3', '20', '7', '4343', '4572', '0'), +('3', '20', '7', '3152', '4057', '0'), +('3', '20', '9', '4834', '4408', '0'), +('3', '20', '9', '4854', '3727', '0'), +('3', '20', '9', '12189', '3471', '0'), +('3', '20', '9', '10149', '3227', '0'), +('3', '20', '15', '10366', '8054', '0'), +('3', '20', '15', '10151', '7200', '0'), +('3', '20', '15', '14679', '7010', '0'), +('3', '20', '15', '14678', '5708', '0'), +('3', '20', '20', '2716', '24263', '0'), +('3', '20', '20', '11601', '18435', '0'), +('3', '20', '20', '2919', '11155', '0'), +('3', '20', '20', '1365', '10500', '0'), +('3', '20', '12', '4835', '10318', '0'), +('3', '20', '12', '20655', '8174', '0'), +('3', '20', '12', '4855', '5271', '0'), +('3', '20', '12', '2923', '4758', '0'), +('3', '20', '18', '4836', '6753', '0'), +('3', '20', '18', '4856', '5488', '0'), +('3', '20', '18', '3155', '4773', '0'), +('3', '20', '18', '4346', '4645', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '20', '19', '4837', '7333', '0'), +('3', '20', '19', '3156', '6822', '0'), +('3', '20', '19', '4857', '5590', '0'), +('3', '20', '19', '68239', '5428', '0'), +('3', '20', '13', '11050', '20762', '0'), +('3', '20', '13', '5401', '20330', '0'), +('3', '20', '13', '27708', '20248', '0'), +('3', '20', '13', '27709', '19391', '0'), +('3', '20', '14', '11632', '29018', '0'), +('3', '20', '14', '11551', '23853', '0'), +('3', '20', '14', '9428', '20353', '0'), +('3', '20', '14', '11644', '19308', '0'), +('3', '20', '11', '8408', '7116', '0'), +('3', '20', '11', '8325', '6932', '0'), +('3', '20', '11', '45137', '6455', '0'), +('3', '20', '11', '8811', '5421', '0'), +('3', '21', '22', '10323', '0', '0'), +('3', '21', '22', '66166', '0', '0'), +('3', '21', '22', '8567', '0', '0'), +('3', '21', '22', '9246', '0', '0'), +('3', '21', '1', '14701', '4854', '0'), +('3', '21', '1', '14702', '3550', '0'), +('3', '21', '1', '10082', '2869', '0'), +('3', '21', '1', '10165', '1940', '0'), +('3', '21', '2', '4301', '7726', '0'), +('3', '21', '2', '4851', '6507', '0'), +('3', '21', '2', '4831', '6040', '0'), +('3', '21', '2', '4620', '4915', '0'), +('3', '21', '3', '71529', '3882', '0'), +('3', '21', '3', '21002', '2114', '0'), +('3', '21', '3', '4505', '2043', '0'), +('3', '21', '3', '10144', '1628', '0'), +('3', '21', '5', '14703', '7150', '0'), +('3', '21', '5', '12800', '5137', '0'), +('3', '21', '5', '14700', '4806', '0'), +('3', '21', '5', '10055', '4760', '0'), +('3', '21', '8', '11621', '26579', '0'), +('3', '21', '8', '11551', '8753', '0'), +('3', '21', '8', '1409', '7747', '0'), +('3', '21', '8', '11603', '6705', '0'), +('3', '21', '6', '1557', '8270', '0'), +('3', '21', '6', '4302', '3898', '0'), +('3', '21', '6', '25062', '3672', '0'), +('3', '21', '6', '4402', '3251', '0'), +('3', '21', '17', '4832', '12781', '0'), +('3', '21', '17', '4852', '11198', '0'), +('3', '21', '17', '4309', '8225', '0'), +('3', '21', '17', '11623', '7848', '0'), +('3', '21', '7', '4833', '6478', '0'), +('3', '21', '7', '4853', '5413', '0'), +('3', '21', '7', '4343', '4621', '0'), +('3', '21', '7', '3152', '4079', '0'), +('3', '21', '9', '4834', '4408', '0'), +('3', '21', '9', '4854', '3727', '0'), +('3', '21', '9', '12189', '3471', '0'), +('3', '21', '9', '10149', '3238', '0'), +('3', '21', '15', '10366', '8054', '0'), +('3', '21', '15', '10151', '7200', '0'), +('3', '21', '15', '14679', '7010', '0'), +('3', '21', '15', '14678', '5708', '0'), +('3', '21', '20', '2716', '24285', '0'), +('3', '21', '20', '11601', '18484', '0'), +('3', '21', '20', '2919', '11173', '0'), +('3', '21', '20', '1365', '10500', '0'), +('3', '21', '12', '4835', '10342', '0'), +('3', '21', '12', '20655', '8191', '0'), +('3', '21', '12', '4855', '5313', '0'), +('3', '21', '12', '2923', '4758', '0'), +('3', '21', '18', '4836', '6777', '0'), +('3', '21', '18', '4856', '5488', '0'), +('3', '21', '18', '3155', '4802', '0'), +('3', '21', '18', '4346', '4645', '0'), +('3', '21', '19', '4837', '7351', '0'), +('3', '21', '19', '3156', '6822', '0'), +('3', '21', '19', '4857', '5614', '0'), +('3', '21', '19', '68239', '5439', '0'), +('3', '21', '13', '11050', '21016', '0'), +('3', '21', '13', '27708', '20524', '0'), +('3', '21', '13', '5401', '20472', '0'), +('3', '21', '13', '27709', '19643', '0'), +('3', '21', '14', '11632', '29091', '0'), +('3', '21', '14', '11551', '23853', '0'), +('3', '21', '14', '9428', '20353', '0'), +('3', '21', '14', '11644', '19308', '0'), +('3', '21', '11', '8408', '7192', '0'), +('3', '21', '11', '8325', '7008', '0'), +('3', '21', '11', '45137', '6807', '0'), +('3', '21', '11', '8811', '5478', '0'), +('3', '22', '22', '10323', '0', '0'), +('3', '22', '22', '66166', '0', '0'), +('3', '22', '22', '8567', '0', '0'), +('3', '22', '22', '9246', '0', '0'), +('3', '22', '1', '14701', '4854', '0'), +('3', '22', '1', '14702', '3550', '0'), +('3', '22', '1', '10082', '2890', '0'), +('3', '22', '1', '10165', '1940', '0'), +('3', '22', '2', '4301', '7726', '0'), +('3', '22', '2', '4851', '6532', '0'), +('3', '22', '2', '4831', '6040', '0'), +('3', '22', '2', '4620', '4949', '0'), +('3', '22', '3', '71529', '3902', '0'), +('3', '22', '3', '21002', '2114', '0'), +('3', '22', '3', '4505', '2068', '0'), +('3', '22', '3', '10144', '1628', '0'), +('3', '22', '5', '14703', '7150', '0'), +('3', '22', '5', '12800', '5155', '0'), +('3', '22', '5', '14700', '4806', '0'), +('3', '22', '5', '10055', '4760', '0'), +('3', '22', '8', '11621', '26579', '0'), +('3', '22', '8', '11551', '8753', '0'), +('3', '22', '8', '1409', '7747', '0'), +('3', '22', '8', '11603', '6738', '0'), +('3', '22', '6', '1557', '8270', '0'), +('3', '22', '6', '4302', '3927', '0'), +('3', '22', '6', '25062', '3672', '0'), +('3', '22', '6', '4402', '3276', '0'), +('3', '22', '17', '4832', '12853', '0'), +('3', '22', '17', '4852', '11274', '0'), +('3', '22', '17', '4309', '8225', '0'), +('3', '22', '17', '11623', '7848', '0'), +('3', '22', '7', '4833', '6478', '0'), +('3', '22', '7', '4853', '5413', '0'), +('3', '22', '7', '4343', '4669', '0'), +('3', '22', '7', '3152', '4100', '0'), +('3', '22', '9', '4834', '4408', '0'), +('3', '22', '9', '4854', '3727', '0'), +('3', '22', '9', '12189', '3471', '0'), +('3', '22', '9', '10149', '3249', '0'), +('3', '22', '15', '10366', '8054', '0'), +('3', '22', '15', '10151', '7200', '0'), +('3', '22', '15', '14679', '7010', '0'), +('3', '22', '15', '14678', '5708', '0'), +('3', '22', '20', '2716', '24306', '0'), +('3', '22', '20', '11601', '18532', '0'), +('3', '22', '20', '2919', '11191', '0'), +('3', '22', '20', '1365', '10500', '0'), +('3', '22', '12', '4835', '10367', '0'), +('3', '22', '12', '20655', '8208', '0'), +('3', '22', '12', '4855', '5355', '0'), +('3', '22', '12', '2923', '4758', '0'), +('3', '22', '18', '4836', '6801', '0'), +('3', '22', '18', '4856', '5488', '0'), +('3', '22', '18', '3155', '4831', '0'), +('3', '22', '18', '4346', '4645', '0'), +('3', '22', '19', '4837', '7369', '0'), +('3', '22', '19', '3156', '6822', '0'), +('3', '22', '19', '4857', '5638', '0'), +('3', '22', '19', '68239', '5449', '0'), +('3', '22', '13', '11050', '21241', '0'), +('3', '22', '13', '27708', '20828', '0'), +('3', '22', '13', '5401', '20613', '0'), +('3', '22', '13', '27709', '19924', '0'), +('3', '22', '14', '11632', '29163', '0'), +('3', '22', '14', '11551', '23853', '0'), +('3', '22', '14', '9428', '20353', '0'), +('3', '22', '14', '11644', '19308', '0'), +('3', '22', '11', '8408', '7268', '0'), +('3', '22', '11', '45137', '7265', '0'), +('3', '22', '11', '8325', '7093', '0'), +('3', '22', '11', '8811', '5544', '0'), +('3', '23', '22', '10323', '0', '0'), +('3', '23', '22', '66166', '0', '0'), +('3', '23', '22', '8567', '0', '0'), +('3', '23', '22', '9246', '0', '0'), +('3', '23', '1', '14701', '4854', '0'), +('3', '23', '1', '14702', '3550', '0'), +('3', '23', '1', '10082', '2912', '0'), +('3', '23', '1', '10165', '1940', '0'), +('3', '23', '2', '4301', '7726', '0'), +('3', '23', '2', '4851', '6557', '0'), +('3', '23', '2', '4831', '6040', '0'), +('3', '23', '2', '4620', '4983', '0'), +('3', '23', '3', '71529', '3921', '0'), +('3', '23', '3', '21002', '2114', '0'), +('3', '23', '3', '4505', '2093', '0'), +('3', '23', '3', '10144', '1628', '0'), +('3', '23', '5', '14703', '7150', '0'), +('3', '23', '5', '12800', '5173', '0'), +('3', '23', '5', '14700', '4806', '0'), +('3', '23', '5', '10055', '4760', '0'), +('3', '23', '8', '11621', '26579', '0'), +('3', '23', '8', '11551', '8753', '0'), +('3', '23', '8', '1409', '7747', '0'), +('3', '23', '8', '11603', '6770', '0'), +('3', '23', '6', '1557', '8270', '0'), +('3', '23', '6', '4302', '3956', '0'), +('3', '23', '6', '25062', '3672', '0'), +('3', '23', '6', '4402', '3301', '0'), +('3', '23', '17', '4832', '12926', '0'), +('3', '23', '17', '4852', '11350', '0'), +('3', '23', '17', '4309', '8225', '0'), +('3', '23', '17', '11623', '7848', '0'), +('3', '23', '7', '4833', '6478', '0'), +('3', '23', '7', '4853', '5413', '0'), +('3', '23', '7', '4343', '4717', '0'), +('3', '23', '7', '3152', '4122', '0'), +('3', '23', '9', '4834', '4408', '0'), +('3', '23', '9', '4854', '3727', '0'), +('3', '23', '9', '12189', '3471', '0'), +('3', '23', '9', '10149', '3260', '0'), +('3', '23', '15', '10366', '8054', '0'), +('3', '23', '15', '10151', '7200', '0'), +('3', '23', '15', '14679', '7010', '0'), +('3', '23', '15', '14678', '5708', '0'), +('3', '23', '20', '2716', '24328', '0'), +('3', '23', '20', '11601', '18580', '0'), +('3', '23', '20', '2919', '11209', '0'), +('3', '23', '20', '1365', '10500', '0'), +('3', '23', '12', '4835', '10391', '0'), +('3', '23', '12', '20655', '8225', '0'), +('3', '23', '12', '4855', '5398', '0'), +('3', '23', '12', '2923', '4758', '0'), +('3', '23', '18', '4836', '6825', '0'), +('3', '23', '18', '4856', '5488', '0'), +('3', '23', '18', '3155', '4860', '0'), +('3', '23', '18', '4346', '4645', '0'), +('3', '23', '19', '4837', '7387', '0'), +('3', '23', '19', '3156', '6822', '0'), +('3', '23', '19', '4857', '5663', '0'), +('3', '23', '19', '68239', '5460', '0'), +('3', '23', '13', '11050', '21467', '0'), +('3', '23', '13', '27708', '21103', '0'), +('3', '23', '13', '5401', '20755', '0'), +('3', '23', '13', '27709', '20177', '0'), +('3', '23', '14', '11632', '29236', '0'), +('3', '23', '14', '11551', '23853', '0'), +('3', '23', '14', '9428', '20353', '0'), +('3', '23', '14', '11644', '19308', '0'), +('3', '23', '11', '45137', '7620', '0'), +('3', '23', '11', '8408', '7343', '0'), +('3', '23', '11', '8325', '7168', '0'), +('3', '23', '11', '8811', '5601', '0'), +('3', '24', '22', '10323', '0', '0'), +('3', '24', '22', '66166', '0', '0'), +('3', '24', '22', '8567', '0', '0'), +('3', '24', '22', '9246', '0', '0'), +('3', '24', '1', '14701', '4854', '0'), +('3', '24', '1', '14702', '3550', '0'), +('3', '24', '1', '10082', '2934', '0'), +('3', '24', '1', '10165', '1940', '0'), +('3', '24', '2', '4301', '7726', '0'), +('3', '24', '2', '4851', '6583', '0'), +('3', '24', '2', '4831', '6040', '0'), +('3', '24', '2', '4620', '5017', '0'), +('3', '24', '3', '71529', '3940', '0'), +('3', '24', '3', '4505', '2119', '0'), +('3', '24', '3', '21002', '2114', '0'), +('3', '24', '3', '10144', '1628', '0'), +('3', '24', '5', '14703', '7150', '0'), +('3', '24', '5', '12800', '5191', '0'), +('3', '24', '5', '14700', '4806', '0'), +('3', '24', '5', '10055', '4760', '0'), +('3', '24', '8', '11621', '26579', '0'), +('3', '24', '8', '11551', '8753', '0'), +('3', '24', '8', '1409', '7747', '0'), +('3', '24', '8', '11603', '6803', '0'), +('3', '24', '6', '1557', '8270', '0'), +('3', '24', '6', '4302', '3985', '0'), +('3', '24', '6', '25062', '3672', '0'), +('3', '24', '6', '4402', '3327', '0'), +('3', '24', '17', '4832', '12998', '0'), +('3', '24', '17', '4852', '11426', '0'), +('3', '24', '17', '4309', '8225', '0'), +('3', '24', '17', '11623', '7848', '0'), +('3', '24', '7', '4833', '6478', '0'), +('3', '24', '7', '4853', '5413', '0'), +('3', '24', '7', '4343', '4766', '0'), +('3', '24', '7', '3152', '4144', '0'), +('3', '24', '9', '4834', '4408', '0'), +('3', '24', '9', '4854', '3727', '0'), +('3', '24', '9', '12189', '3471', '0'), +('3', '24', '9', '10149', '3271', '0'), +('3', '24', '15', '10366', '8054', '0'), +('3', '24', '15', '10151', '7200', '0'), +('3', '24', '15', '14679', '7010', '0'), +('3', '24', '15', '14678', '5708', '0'), +('3', '24', '20', '2716', '24350', '0'), +('3', '24', '20', '11601', '18629', '0'), +('3', '24', '20', '2919', '11227', '0'), +('3', '24', '20', '1365', '10500', '0'), +('3', '24', '12', '4835', '10415', '0'), +('3', '24', '12', '20655', '8242', '0'), +('3', '24', '12', '4855', '5440', '0'), +('3', '24', '12', '2923', '4758', '0'), +('3', '24', '18', '4836', '6849', '0'), +('3', '24', '18', '4856', '5488', '0'), +('3', '24', '18', '3155', '4889', '0'), +('3', '24', '18', '4346', '4645', '0'), +('3', '24', '19', '4837', '7405', '0'), +('3', '24', '19', '3156', '6822', '0'), +('3', '24', '19', '4857', '5687', '0'), +('3', '24', '19', '68239', '5471', '0'), +('3', '24', '13', '11050', '21692', '0'), +('3', '24', '13', '27708', '21407', '0'), +('3', '24', '13', '5401', '20897', '0'), +('3', '24', '13', '27709', '20458', '0'), +('3', '24', '14', '11632', '29308', '0'), +('3', '24', '14', '11551', '23853', '0'), +('3', '24', '14', '9428', '20353', '0'), +('3', '24', '14', '11644', '19308', '0'), +('3', '24', '11', '45137', '8025', '0'), +('3', '24', '11', '8408', '7419', '0'), +('3', '24', '11', '8325', '7253', '0'), +('3', '24', '11', '8811', '5667', '0'), +('3', '25', '22', '10323', '0', '0'), +('3', '25', '22', '66166', '0', '0'), +('3', '25', '22', '8567', '0', '0'), +('3', '25', '22', '9246', '0', '0'), +('3', '25', '1', '14701', '4854', '0'), +('3', '25', '1', '14702', '3550', '0'), +('3', '25', '1', '10082', '2956', '0'), +('3', '25', '1', '10165', '1940', '0'), +('3', '25', '2', '4301', '7726', '0'), +('3', '25', '2', '4851', '6608', '0'), +('3', '25', '2', '4831', '6040', '0'), +('3', '25', '2', '4620', '5055', '0'), +('3', '25', '3', '71529', '3962', '0'), +('3', '25', '3', '4505', '2144', '0'), +('3', '25', '3', '21002', '2114', '0'), +('3', '25', '3', '10144', '1628', '0'), +('3', '25', '5', '14703', '7150', '0'), +('3', '25', '5', '12800', '5210', '0'), +('3', '25', '5', '14700', '4806', '0'), +('3', '25', '5', '10055', '4760', '0'), +('3', '25', '8', '11621', '26579', '0'), +('3', '25', '8', '11551', '8753', '0'), +('3', '25', '8', '1409', '7747', '0'), +('3', '25', '8', '11603', '6835', '0'), +('3', '25', '6', '1557', '8270', '0'), +('3', '25', '6', '4302', '4018', '0'), +('3', '25', '6', '25062', '3672', '0'), +('3', '25', '6', '4402', '3352', '0'), +('3', '25', '17', '4832', '13080', '0'), +('3', '25', '17', '4852', '11508', '0'), +('3', '25', '17', '4309', '8225', '0'), +('3', '25', '17', '11623', '7848', '0'), +('3', '25', '7', '4833', '6478', '0'), +('3', '25', '7', '4853', '5413', '0'), +('3', '25', '7', '4343', '4820', '0'), +('3', '25', '7', '3152', '4166', '0'), +('3', '25', '9', '4834', '4408', '0'), +('3', '25', '9', '4854', '3727', '0'), +('3', '25', '9', '12189', '3471', '0'), +('3', '25', '9', '10149', '3282', '0'), +('3', '25', '15', '10366', '8054', '0'), +('3', '25', '15', '10151', '7200', '0'), +('3', '25', '15', '14679', '7010', '0'), +('3', '25', '15', '14678', '5708', '0'), +('3', '25', '20', '2716', '24372', '0'), +('3', '25', '20', '11601', '18683', '0'), +('3', '25', '20', '2919', '11246', '0'), +('3', '25', '20', '1365', '10500', '0'), +('3', '25', '12', '4835', '10442', '0'), +('3', '25', '12', '20655', '8260', '0'), +('3', '25', '12', '4855', '5485', '0'), +('3', '25', '12', '2923', '4758', '0'), +('3', '25', '18', '4836', '6877', '0'), +('3', '25', '18', '4856', '5488', '0'), +('3', '25', '18', '3155', '4922', '0'), +('3', '25', '18', '4346', '4645', '0'), +('3', '25', '19', '4837', '7423', '0'), +('3', '25', '19', '3156', '6822', '0'), +('3', '25', '19', '4857', '5714', '0'), +('3', '25', '19', '68239', '5482', '0'), +('3', '25', '13', '11050', '21946', '0'), +('3', '25', '13', '27708', '21689', '0'), +('3', '25', '13', '5401', '21038', '0'), +('3', '25', '13', '27709', '20711', '0'), +('3', '25', '14', '11632', '29390', '0'), +('3', '25', '14', '11551', '23853', '0'), +('3', '25', '14', '9428', '20353', '0'), +('3', '25', '14', '11644', '19308', '0'), +('3', '25', '11', '45137', '8470', '0'), +('3', '25', '11', '8408', '7494', '0'), +('3', '25', '11', '8325', '7329', '0'), +('3', '25', '11', '8811', '5733', '0'), +('3', '26', '22', '10323', '0', '0'), +('3', '26', '22', '66166', '0', '0'), +('3', '26', '22', '8567', '0', '0'), +('3', '26', '22', '9246', '0', '0'), +('3', '26', '1', '14701', '4854', '0'), +('3', '26', '1', '14702', '3550', '0'), +('3', '26', '1', '10082', '2977', '0'), +('3', '26', '1', '10165', '1940', '0'), +('3', '26', '2', '4301', '7726', '0'), +('3', '26', '2', '4851', '6634', '0'), +('3', '26', '2', '4831', '6040', '0'), +('3', '26', '2', '4620', '5089', '0'), +('3', '26', '3', '71529', '3981', '0'), +('3', '26', '3', '4505', '2170', '0'), +('3', '26', '3', '21002', '2114', '0'), +('3', '26', '3', '10144', '1628', '0'), +('3', '26', '5', '14703', '7150', '0'), +('3', '26', '5', '12800', '5228', '0'), +('3', '26', '5', '14700', '4806', '0'), +('3', '26', '5', '10055', '4760', '0'), +('3', '26', '8', '11621', '26579', '0'), +('3', '26', '8', '11551', '8753', '0'), +('3', '26', '8', '1409', '7747', '0'), +('3', '26', '8', '11603', '6868', '0'), +('3', '26', '6', '1557', '8270', '0'), +('3', '26', '6', '4302', '4047', '0'), +('3', '26', '6', '25062', '3672', '0'), +('3', '26', '6', '4402', '3378', '0'), +('3', '26', '17', '4832', '13152', '0'), +('3', '26', '17', '4852', '11584', '0'), +('3', '26', '17', '4309', '8225', '0'), +('3', '26', '17', '11623', '7848', '0'), +('3', '26', '7', '4833', '6478', '0'), +('3', '26', '7', '4853', '5413', '0'), +('3', '26', '7', '4343', '4868', '0'), +('3', '26', '7', '3152', '4187', '0'), +('3', '26', '9', '4834', '4408', '0'), +('3', '26', '9', '4854', '3727', '0'), +('3', '26', '9', '12189', '3471', '0'), +('3', '26', '9', '10149', '3293', '0'), +('3', '26', '15', '10366', '8054', '0'), +('3', '26', '15', '10151', '7200', '0'), +('3', '26', '15', '14679', '7010', '0'), +('3', '26', '15', '14678', '5708', '0'), +('3', '26', '20', '2716', '24393', '0'), +('3', '26', '20', '11601', '18731', '0'), +('3', '26', '20', '2919', '11264', '0'), +('3', '26', '20', '1365', '10500', '0'), +('3', '26', '12', '4835', '10466', '0'), +('3', '26', '12', '20655', '8277', '0'), +('3', '26', '12', '4855', '5528', '0'), +('3', '26', '12', '2923', '4758', '0'), +('3', '26', '18', '4836', '6901', '0'), +('3', '26', '18', '4856', '5488', '0'), +('3', '26', '18', '3155', '4951', '0'), +('3', '26', '18', '4346', '4645', '0'), +('3', '26', '19', '4837', '7441', '0'), +('3', '26', '19', '3156', '6822', '0'), +('3', '26', '19', '4857', '5738', '0'), +('3', '26', '19', '68239', '5493', '0'), +('3', '26', '13', '11050', '22171', '0'), +('3', '26', '13', '27708', '21993', '0'), +('3', '26', '13', '5401', '21180', '0'), +('3', '26', '13', '27709', '20992', '0'), +('3', '26', '14', '11632', '29462', '0'), +('3', '26', '14', '11551', '23853', '0'), +('3', '26', '14', '9428', '20353', '0'), +('3', '26', '14', '11644', '19308', '0'), +('3', '26', '11', '45137', '8953', '0'), +('3', '26', '11', '8408', '7570', '0'), +('3', '26', '11', '8325', '7414', '0'), +('3', '26', '11', '8811', '5789', '0'), +('3', '27', '22', '10323', '0', '0'), +('3', '27', '22', '66166', '0', '0'), +('3', '27', '22', '8567', '0', '0'), +('3', '27', '22', '9246', '0', '0'), +('3', '27', '1', '14701', '4854', '0'), +('3', '27', '1', '14702', '3550', '0'), +('3', '27', '1', '10082', '2999', '0'), +('3', '27', '1', '10165', '1940', '0'), +('3', '27', '2', '4301', '7726', '0'), +('3', '27', '2', '4851', '6659', '0'), +('3', '27', '2', '4831', '6040', '0'), +('3', '27', '2', '4620', '5123', '0'), +('3', '27', '3', '71529', '4001', '0'), +('3', '27', '3', '4505', '2195', '0'), +('3', '27', '3', '21002', '2114', '0'), +('3', '27', '3', '10144', '1628', '0'), +('3', '27', '5', '14703', '7150', '0'), +('3', '27', '5', '12800', '5246', '0'), +('3', '27', '5', '14700', '4806', '0'), +('3', '27', '5', '10055', '4760', '0'), +('3', '27', '8', '11621', '26579', '0'), +('3', '27', '8', '11551', '8753', '0'), +('3', '27', '8', '1409', '7747', '0'), +('3', '27', '8', '11603', '6901', '0'), +('3', '27', '6', '1557', '8270', '0'), +('3', '27', '6', '4302', '4076', '0'), +('3', '27', '6', '25062', '3672', '0'), +('3', '27', '6', '4402', '3403', '0'), +('3', '27', '17', '4832', '13225', '0'), +('3', '27', '17', '4852', '11660', '0'), +('3', '27', '17', '4309', '8225', '0'), +('3', '27', '17', '11623', '7848', '0'), +('3', '27', '7', '4833', '6478', '0'), +('3', '27', '7', '4853', '5413', '0'), +('3', '27', '7', '4343', '4917', '0'), +('3', '27', '7', '3152', '4209', '0'), +('3', '27', '9', '4834', '4408', '0'), +('3', '27', '9', '4854', '3727', '0'), +('3', '27', '9', '12189', '3471', '0'), +('3', '27', '9', '10149', '3304', '0'), +('3', '27', '15', '10366', '8054', '0'), +('3', '27', '15', '10151', '7200', '0'), +('3', '27', '15', '14679', '7010', '0'), +('3', '27', '15', '14678', '5708', '0'), +('3', '27', '20', '2716', '24415', '0'), +('3', '27', '20', '11601', '18780', '0'), +('3', '27', '20', '2919', '11282', '0'), +('3', '27', '20', '1365', '10500', '0'), +('3', '27', '12', '4835', '10490', '0'), +('3', '27', '12', '20655', '8294', '0'), +('3', '27', '12', '4855', '5570', '0'), +('3', '27', '12', '2923', '4758', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '27', '18', '4836', '6925', '0'), +('3', '27', '18', '4856', '5488', '0'), +('3', '27', '18', '3155', '4980', '0'), +('3', '27', '18', '4346', '4645', '0'), +('3', '27', '19', '4837', '7459', '0'), +('3', '27', '19', '3156', '6822', '0'), +('3', '27', '19', '4857', '5762', '0'), +('3', '27', '19', '68239', '5504', '0'), +('3', '27', '13', '11050', '22397', '0'), +('3', '27', '13', '27708', '22269', '0'), +('3', '27', '13', '5401', '21322', '0'), +('3', '27', '13', '27709', '21244', '0'), +('3', '27', '14', '11632', '29534', '0'), +('3', '27', '14', '11551', '23853', '0'), +('3', '27', '14', '9428', '20353', '0'), +('3', '27', '14', '11644', '19308', '0'), +('3', '27', '11', '45137', '9334', '0'), +('3', '27', '11', '8408', '7645', '0'), +('3', '27', '11', '8325', '7489', '0'), +('3', '27', '11', '8811', '5856', '0'), +('3', '28', '22', '10323', '0', '0'), +('3', '28', '22', '66166', '0', '0'), +('3', '28', '22', '8567', '0', '0'), +('3', '28', '22', '9246', '0', '0'), +('3', '28', '1', '14701', '4854', '0'), +('3', '28', '1', '14702', '3550', '0'), +('3', '28', '1', '10082', '3021', '0'), +('3', '28', '1', '10165', '1940', '0'), +('3', '28', '2', '4301', '7726', '0'), +('3', '28', '2', '4851', '6684', '0'), +('3', '28', '2', '4831', '6040', '0'), +('3', '28', '2', '4620', '5161', '0'), +('3', '28', '3', '71529', '4022', '0'), +('3', '28', '3', '4505', '2220', '0'), +('3', '28', '3', '21002', '2114', '0'), +('3', '28', '3', '10144', '1628', '0'), +('3', '28', '5', '14703', '7150', '0'), +('3', '28', '5', '12800', '5264', '0'), +('3', '28', '5', '14700', '4806', '0'), +('3', '28', '5', '10055', '4760', '0'), +('3', '28', '8', '11621', '26579', '0'), +('3', '28', '8', '11551', '8753', '0'), +('3', '28', '8', '1409', '7747', '0'), +('3', '28', '8', '11603', '6933', '0'), +('3', '28', '6', '1557', '8270', '0'), +('3', '28', '6', '4302', '4108', '0'), +('3', '28', '6', '25062', '3672', '0'), +('3', '28', '6', '4402', '3428', '0'), +('3', '28', '17', '4832', '13306', '0'), +('3', '28', '17', '4852', '11742', '0'), +('3', '28', '17', '4309', '8225', '0'), +('3', '28', '17', '11623', '7848', '0'), +('3', '28', '7', '4833', '6478', '0'), +('3', '28', '7', '4853', '5413', '0'), +('3', '28', '7', '4343', '4971', '0'), +('3', '28', '7', '3152', '4231', '0'), +('3', '28', '9', '4834', '4408', '0'), +('3', '28', '9', '4854', '3727', '0'), +('3', '28', '9', '12189', '3471', '0'), +('3', '28', '9', '10149', '3314', '0'), +('3', '28', '15', '10366', '8054', '0'), +('3', '28', '15', '10151', '7200', '0'), +('3', '28', '15', '14679', '7010', '0'), +('3', '28', '15', '14678', '5708', '0'), +('3', '28', '20', '2716', '24437', '0'), +('3', '28', '20', '11601', '18834', '0'), +('3', '28', '20', '2919', '11300', '0'), +('3', '28', '20', '1365', '10500', '0'), +('3', '28', '12', '4835', '10518', '0'), +('3', '28', '12', '20655', '8312', '0'), +('3', '28', '12', '4855', '5615', '0'), +('3', '28', '12', '2923', '4758', '0'), +('3', '28', '18', '4836', '6952', '0'), +('3', '28', '18', '4856', '5488', '0'), +('3', '28', '18', '3155', '5012', '0'), +('3', '28', '18', '4346', '4645', '0'), +('3', '28', '19', '4837', '7478', '0'), +('3', '28', '19', '3156', '6822', '0'), +('3', '28', '19', '4857', '5789', '0'), +('3', '28', '19', '68239', '5515', '0'), +('3', '28', '13', '11050', '22651', '0'), +('3', '28', '13', '27708', '22550', '0'), +('3', '28', '13', '27709', '21497', '0'), +('3', '28', '13', '5401', '21492', '0'), +('3', '28', '14', '11632', '29616', '0'), +('3', '28', '14', '11551', '23853', '0'), +('3', '28', '14', '9428', '20353', '0'), +('3', '28', '14', '11644', '19308', '0'), +('3', '28', '11', '45137', '9718', '0'), +('3', '28', '11', '8408', '7721', '0'), +('3', '28', '11', '8325', '7574', '0'), +('3', '28', '11', '8811', '5922', '0'), +('3', '29', '22', '10323', '0', '0'), +('3', '29', '22', '66166', '0', '0'), +('3', '29', '22', '8567', '0', '0'), +('3', '29', '22', '9246', '0', '0'), +('3', '29', '1', '14701', '4854', '0'), +('3', '29', '1', '14702', '3550', '0'), +('3', '29', '1', '10082', '3043', '0'), +('3', '29', '1', '10165', '1940', '0'), +('3', '29', '2', '4301', '7726', '0'), +('3', '29', '2', '4851', '6710', '0'), +('3', '29', '2', '4831', '6040', '0'), +('3', '29', '2', '4620', '5194', '0'), +('3', '29', '3', '71529', '4042', '0'), +('3', '29', '3', '4505', '2246', '0'), +('3', '29', '3', '21002', '2114', '0'), +('3', '29', '3', '10144', '1628', '0'), +('3', '29', '5', '14703', '7150', '0'), +('3', '29', '5', '12800', '5282', '0'), +('3', '29', '5', '14700', '4806', '0'), +('3', '29', '5', '10055', '4760', '0'), +('3', '29', '8', '11621', '26579', '0'), +('3', '29', '8', '11551', '8753', '0'), +('3', '29', '8', '1409', '7747', '0'), +('3', '29', '8', '11603', '6966', '0'), +('3', '29', '6', '1557', '8270', '0'), +('3', '29', '6', '4302', '4137', '0'), +('3', '29', '6', '25062', '3672', '0'), +('3', '29', '6', '4402', '3454', '0'), +('3', '29', '17', '4832', '13379', '0'), +('3', '29', '17', '4852', '11818', '0'), +('3', '29', '17', '4309', '8225', '0'), +('3', '29', '17', '11623', '7848', '0'), +('3', '29', '7', '4833', '6478', '0'), +('3', '29', '7', '4853', '5413', '0'), +('3', '29', '7', '4343', '5019', '0'), +('3', '29', '7', '3152', '4253', '0'), +('3', '29', '9', '4834', '4408', '0'), +('3', '29', '9', '4854', '3727', '0'), +('3', '29', '9', '12189', '3471', '0'), +('3', '29', '9', '10149', '3325', '0'), +('3', '29', '15', '10366', '8054', '0'), +('3', '29', '15', '10151', '7200', '0'), +('3', '29', '15', '14679', '7010', '0'), +('3', '29', '15', '14678', '5708', '0'), +('3', '29', '20', '2716', '24459', '0'), +('3', '29', '20', '11601', '18882', '0'), +('3', '29', '20', '2919', '11318', '0'), +('3', '29', '20', '1365', '10500', '0'), +('3', '29', '12', '4835', '10542', '0'), +('3', '29', '12', '20655', '8329', '0'), +('3', '29', '12', '4855', '5657', '0'), +('3', '29', '12', '2923', '4758', '0'), +('3', '29', '18', '4836', '6976', '0'), +('3', '29', '18', '4856', '5488', '0'), +('3', '29', '18', '3155', '5041', '0'), +('3', '29', '18', '4346', '4645', '0'), +('3', '29', '19', '4837', '7496', '0'), +('3', '29', '19', '3156', '6822', '0'), +('3', '29', '19', '4857', '5814', '0'), +('3', '29', '19', '68239', '5525', '0'), +('3', '29', '13', '11050', '22876', '0'), +('3', '29', '13', '27708', '22854', '0'), +('3', '29', '13', '27709', '21778', '0'), +('3', '29', '13', '5401', '21633', '0'), +('3', '29', '14', '11632', '29689', '0'), +('3', '29', '14', '11551', '23853', '0'), +('3', '29', '14', '9428', '20353', '0'), +('3', '29', '14', '11644', '19308', '0'), +('3', '29', '11', '45137', '10149', '0'), +('3', '29', '11', '8408', '7796', '0'), +('3', '29', '11', '8325', '7650', '0'), +('3', '29', '11', '8811', '5978', '0'), +('3', '30', '22', '10323', '0', '0'), +('3', '30', '22', '66166', '0', '0'), +('3', '30', '22', '8567', '0', '0'), +('3', '30', '22', '9246', '0', '0'), +('3', '30', '1', '14701', '4854', '0'), +('3', '30', '1', '14702', '3550', '0'), +('3', '30', '1', '10082', '3064', '0'), +('3', '30', '1', '10165', '1940', '0'), +('3', '30', '2', '4301', '7726', '0'), +('3', '30', '2', '4851', '6735', '0'), +('3', '30', '2', '4831', '6040', '0'), +('3', '30', '2', '4620', '5232', '0'), +('3', '30', '3', '71529', '4064', '0'), +('3', '30', '3', '4505', '2271', '0'), +('3', '30', '3', '21002', '2114', '0'), +('3', '30', '3', '11052', '1631', '0'), +('3', '30', '5', '14703', '7150', '0'), +('3', '30', '5', '12800', '5300', '0'), +('3', '30', '5', '14700', '4806', '0'), +('3', '30', '5', '10055', '4760', '0'), +('3', '30', '8', '11621', '26579', '0'), +('3', '30', '8', '11551', '8753', '0'), +('3', '30', '8', '1409', '7747', '0'), +('3', '30', '8', '11603', '6998', '0'), +('3', '30', '6', '1557', '8270', '0'), +('3', '30', '6', '4302', '4170', '0'), +('3', '30', '6', '25062', '3672', '0'), +('3', '30', '6', '4402', '3479', '0'), +('3', '30', '17', '4832', '13460', '0'), +('3', '30', '17', '4852', '11899', '0'), +('3', '30', '17', '4309', '8225', '0'), +('3', '30', '17', '11623', '7848', '0'), +('3', '30', '7', '4833', '6478', '0'), +('3', '30', '7', '4853', '5413', '0'), +('3', '30', '7', '4343', '5074', '0'), +('3', '30', '7', '3152', '4274', '0'), +('3', '30', '9', '4834', '4408', '0'), +('3', '30', '9', '4854', '3727', '0'), +('3', '30', '9', '12189', '3471', '0'), +('3', '30', '9', '10149', '3336', '0'), +('3', '30', '15', '10366', '8054', '0'), +('3', '30', '15', '10151', '7200', '0'), +('3', '30', '15', '14679', '7010', '0'), +('3', '30', '15', '14678', '5708', '0'), +('3', '30', '20', '2716', '24480', '0'), +('3', '30', '20', '11601', '18937', '0'), +('3', '30', '20', '2919', '11336', '0'), +('3', '30', '20', '1365', '10500', '0'), +('3', '30', '12', '4835', '10569', '0'), +('3', '30', '12', '20655', '8347', '0'), +('3', '30', '12', '4855', '5703', '0'), +('3', '30', '12', '11624', '4789', '0'), +('3', '30', '18', '4836', '7003', '0'), +('3', '30', '18', '4856', '5488', '0'), +('3', '30', '18', '3155', '5074', '0'), +('3', '30', '18', '4346', '4645', '0'), +('3', '30', '19', '4837', '7514', '0'), +('3', '30', '19', '3156', '6822', '0'), +('3', '30', '19', '4857', '5841', '0'), +('3', '30', '19', '68239', '5536', '0'), +('3', '30', '13', '27708', '23136', '0'), +('3', '30', '13', '11050', '23102', '0'), +('3', '30', '13', '27709', '22031', '0'), +('3', '30', '13', '5401', '21775', '0'), +('3', '30', '14', '11632', '29770', '0'), +('3', '30', '14', '11551', '23853', '0'), +('3', '30', '14', '9428', '20353', '0'), +('3', '30', '14', '11644', '19308', '0'), +('3', '30', '11', '45137', '10546', '0'), +('3', '30', '11', '8408', '7872', '0'), +('3', '30', '11', '8325', '7735', '0'), +('3', '30', '11', '8811', '6044', '0'), +('3', '31', '22', '10323', '0', '0'), +('3', '31', '22', '66166', '0', '0'), +('3', '31', '22', '8567', '0', '0'), +('3', '31', '22', '9246', '0', '0'), +('3', '31', '1', '14701', '4854', '0'), +('3', '31', '1', '14702', '3550', '0'), +('3', '31', '1', '10082', '3086', '0'), +('3', '31', '1', '10165', '1940', '0'), +('3', '31', '2', '4301', '7726', '0'), +('3', '31', '2', '4851', '6760', '0'), +('3', '31', '2', '4831', '6040', '0'), +('3', '31', '2', '4620', '5271', '0'), +('3', '31', '3', '71529', '4085', '0'), +('3', '31', '3', '4505', '2296', '0'), +('3', '31', '3', '21002', '2114', '0'), +('3', '31', '3', '11052', '1685', '0'), +('3', '31', '5', '14703', '7150', '0'), +('3', '31', '5', '12800', '5318', '0'), +('3', '31', '5', '14700', '4806', '0'), +('3', '31', '5', '10055', '4760', '0'), +('3', '31', '8', '11621', '26579', '0'), +('3', '31', '8', '11551', '8753', '0'), +('3', '31', '8', '1409', '7747', '0'), +('3', '31', '8', '11603', '7031', '0'), +('3', '31', '6', '1557', '8270', '0'), +('3', '31', '6', '4302', '4203', '0'), +('3', '31', '6', '25062', '3672', '0'), +('3', '31', '6', '4402', '3504', '0'), +('3', '31', '17', '4832', '13542', '0'), +('3', '31', '17', '4852', '11981', '0'), +('3', '31', '17', '4309', '8225', '0'), +('3', '31', '17', '11623', '7848', '0'), +('3', '31', '7', '4833', '6478', '0'), +('3', '31', '7', '4853', '5413', '0'), +('3', '31', '7', '4343', '5128', '0'), +('3', '31', '7', '3152', '4296', '0'), +('3', '31', '9', '4834', '4408', '0'), +('3', '31', '9', '4854', '3727', '0'), +('3', '31', '9', '12189', '3471', '0'), +('3', '31', '9', '10149', '3347', '0'), +('3', '31', '15', '10366', '8054', '0'), +('3', '31', '15', '10151', '7200', '0'), +('3', '31', '15', '14679', '7010', '0'), +('3', '31', '15', '14678', '5708', '0'), +('3', '31', '20', '2716', '24502', '0'), +('3', '31', '20', '11601', '18991', '0'), +('3', '31', '20', '2919', '11354', '0'), +('3', '31', '20', '1365', '10500', '0'), +('3', '31', '12', '4835', '10596', '0'), +('3', '31', '12', '20655', '8365', '0'), +('3', '31', '12', '4855', '5748', '0'), +('3', '31', '12', '11624', '4827', '0'), +('3', '31', '18', '4836', '7031', '0'), +('3', '31', '18', '4856', '5488', '0'), +('3', '31', '18', '3155', '5107', '0'), +('3', '31', '18', '4346', '4645', '0'), +('3', '31', '19', '4837', '7532', '0'), +('3', '31', '19', '3156', '6822', '0'), +('3', '31', '19', '4857', '5868', '0'), +('3', '31', '19', '68239', '5547', '0'), +('3', '31', '13', '27708', '23446', '0'), +('3', '31', '13', '11050', '23327', '0'), +('3', '31', '13', '27709', '22312', '0'), +('3', '31', '13', '5401', '21917', '0'), +('3', '31', '14', '11632', '29852', '0'), +('3', '31', '14', '11551', '23853', '0'), +('3', '31', '14', '9428', '20353', '0'), +('3', '31', '14', '11644', '19308', '0'), +('3', '31', '11', '45137', '11068', '0'), +('3', '31', '11', '8408', '7948', '0'), +('3', '31', '11', '8325', '7811', '0'), +('3', '31', '11', '8811', '6101', '0'), +('3', '32', '22', '10323', '0', '0'), +('3', '32', '22', '66166', '0', '0'), +('3', '32', '22', '8567', '0', '0'), +('3', '32', '22', '9246', '0', '0'), +('3', '32', '1', '14701', '4854', '0'), +('3', '32', '1', '14702', '3550', '0'), +('3', '32', '1', '10082', '3108', '0'), +('3', '32', '1', '10165', '1940', '0'), +('3', '32', '2', '4301', '7726', '0'), +('3', '32', '2', '4851', '6786', '0'), +('3', '32', '2', '4831', '6040', '0'), +('3', '32', '2', '4620', '5304', '0'), +('3', '32', '3', '71529', '4105', '0'), +('3', '32', '3', '4505', '2322', '0'), +('3', '32', '3', '21002', '2114', '0'), +('3', '32', '3', '11052', '1740', '0'), +('3', '32', '5', '14703', '7150', '0'), +('3', '32', '5', '12800', '5336', '0'), +('3', '32', '5', '14700', '4806', '0'), +('3', '32', '5', '10055', '4760', '0'), +('3', '32', '8', '11621', '26579', '0'), +('3', '32', '8', '11551', '8753', '0'), +('3', '32', '8', '1409', '7747', '0'), +('3', '32', '8', '11603', '7064', '0'), +('3', '32', '6', '1557', '8270', '0'), +('3', '32', '6', '4302', '4232', '0'), +('3', '32', '6', '25062', '3672', '0'), +('3', '32', '6', '4402', '3530', '0'), +('3', '32', '17', '4832', '13614', '0'), +('3', '32', '17', '4852', '12057', '0'), +('3', '32', '17', '4309', '8225', '0'), +('3', '32', '17', '11623', '7848', '0'), +('3', '32', '7', '4833', '6478', '0'), +('3', '32', '7', '4853', '5413', '0'), +('3', '32', '7', '4343', '5176', '0'), +('3', '32', '7', '3152', '4318', '0'), +('3', '32', '9', '4834', '4408', '0'), +('3', '32', '9', '4854', '3727', '0'), +('3', '32', '9', '12189', '3471', '0'), +('3', '32', '9', '10149', '3358', '0'), +('3', '32', '15', '10366', '8054', '0'), +('3', '32', '15', '10151', '7200', '0'), +('3', '32', '15', '14679', '7010', '0'), +('3', '32', '15', '14678', '5708', '0'), +('3', '32', '20', '2716', '24524', '0'), +('3', '32', '20', '11601', '19039', '0'), +('3', '32', '20', '2919', '11372', '0'), +('3', '32', '20', '1365', '10500', '0'), +('3', '32', '12', '4835', '10620', '0'), +('3', '32', '12', '20655', '8382', '0'), +('3', '32', '12', '4855', '5790', '0'), +('3', '32', '12', '11624', '4861', '0'), +('3', '32', '18', '4836', '7055', '0'), +('3', '32', '18', '4856', '5488', '0'), +('3', '32', '18', '3155', '5136', '0'), +('3', '32', '18', '4346', '4645', '0'), +('3', '32', '19', '4837', '7550', '0'), +('3', '32', '19', '3156', '6822', '0'), +('3', '32', '19', '4857', '5892', '0'), +('3', '32', '19', '68239', '5558', '0'), +('3', '32', '13', '27708', '23722', '0'), +('3', '32', '13', '11050', '23581', '0'), +('3', '32', '13', '27709', '22565', '0'), +('3', '32', '13', '5401', '22058', '0'), +('3', '32', '14', '11632', '29924', '0'), +('3', '32', '14', '11551', '23853', '0'), +('3', '32', '14', '9428', '20353', '0'), +('3', '32', '14', '11644', '19308', '0'), +('3', '32', '11', '45137', '11465', '0'), +('3', '32', '11', '8408', '8023', '0'), +('3', '32', '11', '8325', '7886', '0'), +('3', '32', '11', '8811', '6167', '0'), +('3', '33', '22', '10323', '0', '0'), +('3', '33', '22', '66166', '0', '0'), +('3', '33', '22', '8567', '0', '0'), +('3', '33', '22', '9246', '0', '0'), +('3', '33', '1', '14701', '4854', '0'), +('3', '33', '1', '14702', '3550', '0'), +('3', '33', '1', '10082', '3130', '0'), +('3', '33', '1', '10165', '1940', '0'), +('3', '33', '2', '4301', '7726', '0'), +('3', '33', '2', '4851', '6811', '0'), +('3', '33', '2', '4831', '6040', '0'), +('3', '33', '2', '4620', '5342', '0'), +('3', '33', '3', '71529', '4126', '0'), +('3', '33', '3', '4505', '2347', '0'), +('3', '33', '3', '21002', '2114', '0'), +('3', '33', '3', '11052', '1794', '0'), +('3', '33', '5', '14703', '7150', '0'), +('3', '33', '5', '12800', '5354', '0'), +('3', '33', '5', '14700', '4806', '0'), +('3', '33', '5', '10055', '4760', '0'), +('3', '33', '8', '11621', '26579', '0'), +('3', '33', '8', '11551', '8753', '0'), +('3', '33', '8', '1409', '7747', '0'), +('3', '33', '8', '11603', '7096', '0'), +('3', '33', '6', '1557', '8270', '0'), +('3', '33', '6', '4302', '4264', '0'), +('3', '33', '6', '25062', '3672', '0'), +('3', '33', '6', '4402', '3555', '0'), +('3', '33', '17', '4832', '13696', '0'), +('3', '33', '17', '4852', '12139', '0'), +('3', '33', '17', '4309', '8225', '0'), +('3', '33', '17', '11623', '7848', '0'), +('3', '33', '7', '4833', '6478', '0'), +('3', '33', '7', '4853', '5413', '0'), +('3', '33', '7', '4343', '5231', '0'), +('3', '33', '7', '3152', '4340', '0'), +('3', '33', '9', '4834', '4408', '0'), +('3', '33', '9', '4854', '3727', '0'), +('3', '33', '9', '12189', '3471', '0'), +('3', '33', '9', '10149', '3369', '0'), +('3', '33', '15', '10366', '8054', '0'), +('3', '33', '15', '10151', '7200', '0'), +('3', '33', '15', '14679', '7010', '0'), +('3', '33', '15', '14678', '5708', '0'), +('3', '33', '20', '2716', '24546', '0'), +('3', '33', '20', '11601', '19094', '0'), +('3', '33', '20', '2919', '11390', '0'), +('3', '33', '20', '1365', '10500', '0'), +('3', '33', '12', '4835', '10647', '0'), +('3', '33', '12', '20655', '8400', '0'), +('3', '33', '12', '4855', '5836', '0'), +('3', '33', '12', '11624', '4899', '0'), +('3', '33', '18', '4836', '7082', '0'), +('3', '33', '18', '4856', '5488', '0'), +('3', '33', '18', '3155', '5168', '0'), +('3', '33', '18', '4346', '4645', '0'), +('3', '33', '19', '4837', '7568', '0'), +('3', '33', '19', '3156', '6822', '0'), +('3', '33', '19', '4857', '5919', '0'), +('3', '33', '19', '68239', '5569', '0'), +('3', '33', '13', '27708', '24032', '0'), +('3', '33', '13', '11050', '23807', '0'), +('3', '33', '13', '27709', '22846', '0'), +('3', '33', '13', '5401', '22200', '0'), +('3', '33', '14', '11632', '30006', '0'), +('3', '33', '14', '11551', '23853', '0'), +('3', '33', '14', '9428', '20353', '0'), +('3', '33', '14', '11644', '19308', '0'), +('3', '33', '11', '45137', '11924', '0'), +('3', '33', '11', '8408', '8108', '0'), +('3', '33', '11', '8325', '7971', '0'), +('3', '33', '11', '8811', '6233', '0'), +('3', '34', '22', '10323', '0', '0'), +('3', '34', '22', '66166', '0', '0'), +('3', '34', '22', '8567', '0', '0'), +('3', '34', '22', '9246', '0', '0'), +('3', '34', '1', '14701', '4854', '0'), +('3', '34', '1', '14702', '3550', '0'), +('3', '34', '1', '10082', '3151', '0'), +('3', '34', '1', '10165', '1940', '0'), +('3', '34', '2', '4301', '7726', '0'), +('3', '34', '2', '4851', '6837', '0'), +('3', '34', '2', '4831', '6040', '0'), +('3', '34', '2', '4620', '5380', '0'), +('3', '34', '3', '71529', '4148', '0'), +('3', '34', '3', '4505', '2373', '0'), +('3', '34', '3', '21002', '2114', '0'), +('3', '34', '3', '11052', '1848', '0'), +('3', '34', '5', '14703', '7150', '0'), +('3', '34', '5', '12800', '5373', '0'), +('3', '34', '5', '14700', '4806', '0'), +('3', '34', '5', '10055', '4760', '0'), +('3', '34', '8', '11621', '26579', '0'), +('3', '34', '8', '11551', '8753', '0'), +('3', '34', '8', '1409', '7747', '0'), +('3', '34', '8', '11603', '7129', '0'), +('3', '34', '6', '1557', '8270', '0'), +('3', '34', '6', '4302', '4297', '0'), +('3', '34', '6', '25062', '3672', '0'), +('3', '34', '6', '4402', '3581', '0'), +('3', '34', '17', '4832', '13777', '0'), +('3', '34', '17', '4852', '12220', '0'), +('3', '34', '17', '4309', '8225', '0'), +('3', '34', '17', '11623', '7848', '0'), +('3', '34', '7', '4833', '6478', '0'), +('3', '34', '7', '4853', '5413', '0'), +('3', '34', '7', '4343', '5285', '0'), +('3', '34', '7', '3152', '4361', '0'), +('3', '34', '9', '4834', '4408', '0'), +('3', '34', '9', '4854', '3727', '0'), +('3', '34', '9', '12189', '3471', '0'), +('3', '34', '9', '10149', '3380', '0'), +('3', '34', '15', '10366', '8054', '0'), +('3', '34', '15', '10151', '7200', '0'), +('3', '34', '15', '14679', '7010', '0'), +('3', '34', '15', '14678', '5708', '0'), +('3', '34', '20', '2716', '24567', '0'), +('3', '34', '20', '11601', '19148', '0'), +('3', '34', '20', '2919', '11409', '0'), +('3', '34', '20', '1365', '10500', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '34', '12', '4835', '10675', '0'), +('3', '34', '12', '20655', '8418', '0'), +('3', '34', '12', '4855', '5881', '0'), +('3', '34', '12', '11624', '4937', '0'), +('3', '34', '18', '4836', '7109', '0'), +('3', '34', '18', '4856', '5488', '0'), +('3', '34', '18', '3155', '5201', '0'), +('3', '34', '18', '4346', '4645', '0'), +('3', '34', '19', '4837', '7586', '0'), +('3', '34', '19', '3156', '6822', '0'), +('3', '34', '19', '4857', '5946', '0'), +('3', '34', '19', '68239', '5580', '0'), +('3', '34', '13', '27708', '24313', '0'), +('3', '34', '13', '11050', '24032', '0'), +('3', '34', '13', '27709', '23098', '0'), +('3', '34', '13', '5401', '22342', '0'), +('3', '34', '14', '11632', '30087', '0'), +('3', '34', '14', '11551', '23853', '0'), +('3', '34', '14', '9428', '20353', '0'), +('3', '34', '14', '11644', '19308', '0'), +('3', '34', '11', '45137', '12337', '0'), +('3', '34', '11', '8408', '8184', '0'), +('3', '34', '11', '8325', '8047', '0'), +('3', '34', '11', '8811', '6290', '0'), +('3', '35', '22', '10323', '0', '0'), +('3', '35', '22', '66166', '0', '0'), +('3', '35', '22', '8567', '0', '0'), +('3', '35', '22', '9246', '0', '0'), +('3', '35', '1', '14701', '4854', '0'), +('3', '35', '1', '14702', '3550', '0'), +('3', '35', '1', '10082', '3173', '0'), +('3', '35', '1', '10165', '1940', '0'), +('3', '35', '2', '4301', '7726', '0'), +('3', '35', '2', '4851', '6862', '0'), +('3', '35', '2', '4831', '6040', '0'), +('3', '35', '2', '4620', '5418', '0'), +('3', '35', '3', '71529', '4170', '0'), +('3', '35', '3', '4505', '2398', '0'), +('3', '35', '3', '21002', '2114', '0'), +('3', '35', '3', '11052', '1903', '0'), +('3', '35', '5', '14703', '7150', '0'), +('3', '35', '5', '12800', '5391', '0'), +('3', '35', '5', '14700', '4806', '0'), +('3', '35', '5', '10055', '4760', '0'), +('3', '35', '8', '11621', '26579', '0'), +('3', '35', '8', '11551', '8753', '0'), +('3', '35', '8', '1409', '7747', '0'), +('3', '35', '8', '11603', '7162', '0'), +('3', '35', '6', '1557', '8270', '0'), +('3', '35', '6', '4302', '4329', '0'), +('3', '35', '6', '25062', '3672', '0'), +('3', '35', '6', '4402', '3606', '0'), +('3', '35', '17', '4832', '13859', '0'), +('3', '35', '17', '4852', '12302', '0'), +('3', '35', '17', '4309', '8225', '0'), +('3', '35', '17', '11623', '7848', '0'), +('3', '35', '7', '4833', '6478', '0'), +('3', '35', '7', '4853', '5413', '0'), +('3', '35', '7', '4343', '5339', '0'), +('3', '35', '7', '3152', '4383', '0'), +('3', '35', '9', '4834', '4408', '0'), +('3', '35', '9', '4854', '3727', '0'), +('3', '35', '9', '12189', '3471', '0'), +('3', '35', '9', '10149', '3391', '0'), +('3', '35', '15', '10366', '8054', '0'), +('3', '35', '15', '10151', '7200', '0'), +('3', '35', '15', '14679', '7010', '0'), +('3', '35', '15', '14678', '5708', '0'), +('3', '35', '20', '2716', '24589', '0'), +('3', '35', '20', '11601', '19203', '0'), +('3', '35', '20', '2919', '11427', '0'), +('3', '35', '20', '1365', '10500', '0'), +('3', '35', '12', '4835', '10702', '0'), +('3', '35', '12', '20655', '8436', '0'), +('3', '35', '12', '4855', '5926', '0'), +('3', '35', '12', '11624', '4975', '0'), +('3', '35', '18', '4836', '7136', '0'), +('3', '35', '18', '4856', '5488', '0'), +('3', '35', '18', '3155', '5233', '0'), +('3', '35', '18', '4346', '4645', '0'), +('3', '35', '19', '4837', '7604', '0'), +('3', '35', '19', '3156', '6822', '0'), +('3', '35', '19', '4857', '5974', '0'), +('3', '35', '19', '68239', '5591', '0'), +('3', '35', '13', '27708', '24624', '0'), +('3', '35', '13', '11050', '24286', '0'), +('3', '35', '13', '27709', '23379', '0'), +('3', '35', '13', '5401', '22483', '0'), +('3', '35', '14', '11632', '30169', '0'), +('3', '35', '14', '11551', '23853', '0'), +('3', '35', '14', '9428', '20353', '0'), +('3', '35', '14', '11644', '19308', '0'), +('3', '35', '11', '45137', '12884', '0'), +('3', '35', '11', '8408', '8259', '0'), +('3', '35', '11', '8325', '8132', '0'), +('3', '35', '11', '8811', '6356', '0'), +('3', '36', '22', '10323', '0', '0'), +('3', '36', '22', '66166', '0', '0'), +('3', '36', '22', '8567', '0', '0'), +('3', '36', '22', '9246', '0', '0'), +('3', '36', '1', '14701', '4854', '0'), +('3', '36', '1', '14702', '3550', '0'), +('3', '36', '1', '10082', '3195', '0'), +('3', '36', '1', '10165', '1940', '0'), +('3', '36', '2', '4301', '7726', '0'), +('3', '36', '2', '4851', '6887', '0'), +('3', '36', '2', '4831', '6040', '0'), +('3', '36', '2', '4620', '5457', '0'), +('3', '36', '3', '71529', '4192', '0'), +('3', '36', '3', '4505', '2423', '0'), +('3', '36', '3', '21002', '2114', '0'), +('3', '36', '3', '11052', '1957', '0'), +('3', '36', '5', '14703', '7150', '0'), +('3', '36', '5', '12800', '5409', '0'), +('3', '36', '5', '14700', '4806', '0'), +('3', '36', '5', '10055', '4760', '0'), +('3', '36', '8', '11621', '26579', '0'), +('3', '36', '8', '11551', '8753', '0'), +('3', '36', '8', '1409', '7747', '0'), +('3', '36', '8', '11603', '7194', '0'), +('3', '36', '6', '1557', '8270', '0'), +('3', '36', '6', '4302', '4362', '0'), +('3', '36', '6', '25062', '3672', '0'), +('3', '36', '6', '4402', '3631', '0'), +('3', '36', '17', '4832', '13940', '0'), +('3', '36', '17', '4852', '12383', '0'), +('3', '36', '17', '4309', '8225', '0'), +('3', '36', '17', '11623', '7848', '0'), +('3', '36', '7', '4833', '6478', '0'), +('3', '36', '7', '4853', '5413', '0'), +('3', '36', '7', '4343', '5394', '0'), +('3', '36', '7', '3152', '4405', '0'), +('3', '36', '9', '4834', '4408', '0'), +('3', '36', '9', '4854', '3727', '0'), +('3', '36', '9', '12189', '3471', '0'), +('3', '36', '9', '10149', '3401', '0'), +('3', '36', '15', '10366', '8054', '0'), +('3', '36', '15', '10151', '7200', '0'), +('3', '36', '15', '14679', '7010', '0'), +('3', '36', '15', '14678', '5708', '0'), +('3', '36', '20', '2716', '24611', '0'), +('3', '36', '20', '11601', '19257', '0'), +('3', '36', '20', '2919', '11445', '0'), +('3', '36', '20', '1365', '10500', '0'), +('3', '36', '12', '4835', '10729', '0'), +('3', '36', '12', '20655', '8454', '0'), +('3', '36', '12', '4855', '5972', '0'), +('3', '36', '12', '11624', '5013', '0'), +('3', '36', '18', '4836', '7163', '0'), +('3', '36', '18', '4856', '5488', '0'), +('3', '36', '18', '3155', '5266', '0'), +('3', '36', '18', '4346', '4645', '0'), +('3', '36', '19', '4837', '7623', '0'), +('3', '36', '19', '3156', '6822', '0'), +('3', '36', '19', '4857', '6001', '0'), +('3', '36', '19', '68239', '5602', '0'), +('3', '36', '13', '27708', '24905', '0'), +('3', '36', '13', '11050', '24512', '0'), +('3', '36', '13', '27709', '23632', '0'), +('3', '36', '13', '11682', '22695', '0'), +('3', '36', '14', '11632', '30250', '0'), +('3', '36', '14', '11551', '23853', '0'), +('3', '36', '14', '9428', '20353', '0'), +('3', '36', '14', '11644', '19308', '0'), +('3', '36', '11', '45137', '13320', '0'), +('3', '36', '11', '8408', '8335', '0'), +('3', '36', '11', '8325', '8207', '0'), +('3', '36', '11', '8811', '6422', '0'), +('3', '37', '22', '10323', '0', '0'), +('3', '37', '22', '66166', '0', '0'), +('3', '37', '22', '8567', '0', '0'), +('3', '37', '22', '9246', '0', '0'), +('3', '37', '1', '14701', '4854', '0'), +('3', '37', '1', '14702', '3550', '0'), +('3', '37', '1', '10082', '3217', '0'), +('3', '37', '1', '10165', '1940', '0'), +('3', '37', '2', '4301', '7726', '0'), +('3', '37', '2', '4851', '6913', '0'), +('3', '37', '2', '4831', '6040', '0'), +('3', '37', '2', '4620', '5495', '0'), +('3', '37', '3', '71529', '4213', '0'), +('3', '37', '3', '4505', '2449', '0'), +('3', '37', '3', '21002', '2114', '0'), +('3', '37', '3', '11052', '2011', '0'), +('3', '37', '5', '14703', '7150', '0'), +('3', '37', '5', '12800', '5427', '0'), +('3', '37', '5', '14700', '4806', '0'), +('3', '37', '5', '10055', '4760', '0'), +('3', '37', '8', '11621', '26579', '0'), +('3', '37', '8', '11551', '8753', '0'), +('3', '37', '8', '1409', '7747', '0'), +('3', '37', '8', '11603', '7227', '0'), +('3', '37', '6', '1557', '8270', '0'), +('3', '37', '6', '4302', '4395', '0'), +('3', '37', '6', '25062', '3672', '0'), +('3', '37', '6', '4402', '3657', '0'), +('3', '37', '17', '4832', '14022', '0'), +('3', '37', '17', '4852', '12465', '0'), +('3', '37', '17', '4309', '8225', '0'), +('3', '37', '17', '11623', '7848', '0'), +('3', '37', '7', '4833', '6478', '0'), +('3', '37', '7', '4343', '5448', '0'), +('3', '37', '7', '4853', '5413', '0'), +('3', '37', '7', '3152', '4427', '0'), +('3', '37', '9', '4834', '4408', '0'), +('3', '37', '9', '4854', '3727', '0'), +('3', '37', '9', '12189', '3471', '0'), +('3', '37', '9', '10149', '3412', '0'), +('3', '37', '15', '10366', '8054', '0'), +('3', '37', '15', '10151', '7200', '0'), +('3', '37', '15', '14679', '7010', '0'), +('3', '37', '15', '14678', '5708', '0'), +('3', '37', '20', '2716', '24633', '0'), +('3', '37', '20', '11601', '19311', '0'), +('3', '37', '20', '2919', '11463', '0'), +('3', '37', '20', '1365', '10500', '0'), +('3', '37', '12', '4835', '10756', '0'), +('3', '37', '12', '20655', '8473', '0'), +('3', '37', '12', '4855', '6017', '0'), +('3', '37', '12', '11624', '5051', '0'), +('3', '37', '18', '4836', '7191', '0'), +('3', '37', '18', '4856', '5488', '0'), +('3', '37', '18', '3155', '5299', '0'), +('3', '37', '18', '4346', '4645', '0'), +('3', '37', '19', '4837', '7641', '0'), +('3', '37', '19', '3156', '6822', '0'), +('3', '37', '19', '4857', '6028', '0'), +('3', '37', '19', '68239', '5612', '0'), +('3', '37', '13', '27708', '25215', '0'), +('3', '37', '13', '11050', '24737', '0'), +('3', '37', '13', '27709', '23913', '0'), +('3', '37', '13', '11682', '22922', '0'), +('3', '37', '14', '11632', '30332', '0'), +('3', '37', '14', '11551', '23853', '0'), +('3', '37', '14', '9428', '20353', '0'), +('3', '37', '14', '11644', '19308', '0'), +('3', '37', '11', '45137', '13795', '0'), +('3', '37', '11', '8408', '8410', '0'), +('3', '37', '11', '8325', '8292', '0'), +('3', '37', '11', '8811', '6479', '0'), +('3', '38', '22', '10323', '0', '0'), +('3', '38', '22', '66166', '0', '0'), +('3', '38', '22', '8567', '0', '0'), +('3', '38', '22', '9246', '0', '0'), +('3', '38', '1', '14701', '4854', '0'), +('3', '38', '1', '14702', '3550', '0'), +('3', '38', '1', '10082', '3238', '0'), +('3', '38', '1', '10165', '1940', '0'), +('3', '38', '2', '4301', '7726', '0'), +('3', '38', '2', '4851', '6938', '0'), +('3', '38', '2', '4831', '6040', '0'), +('3', '38', '2', '4620', '5533', '0'), +('3', '38', '3', '71529', '4235', '0'), +('3', '38', '3', '4505', '2474', '0'), +('3', '38', '3', '21002', '2114', '0'), +('3', '38', '3', '11052', '2066', '0'), +('3', '38', '5', '14703', '7150', '0'), +('3', '38', '5', '12800', '5445', '0'), +('3', '38', '5', '14700', '4806', '0'), +('3', '38', '5', '10055', '4760', '0'), +('3', '38', '8', '11621', '26579', '0'), +('3', '38', '8', '11551', '8753', '0'), +('3', '38', '8', '1409', '7747', '0'), +('3', '38', '8', '11603', '7259', '0'), +('3', '38', '6', '1557', '8270', '0'), +('3', '38', '6', '4302', '4427', '0'), +('3', '38', '6', '4402', '3682', '0'), +('3', '38', '6', '25062', '3672', '0'), +('3', '38', '17', '4832', '14103', '0'), +('3', '38', '17', '4852', '12546', '0'), +('3', '38', '17', '4309', '8225', '0'), +('3', '38', '17', '11623', '7848', '0'), +('3', '38', '7', '4833', '6478', '0'), +('3', '38', '7', '4343', '5502', '0'), +('3', '38', '7', '4853', '5413', '0'), +('3', '38', '7', '3152', '4448', '0'), +('3', '38', '9', '4834', '4408', '0'), +('3', '38', '9', '4854', '3727', '0'), +('3', '38', '9', '12189', '3471', '0'), +('3', '38', '9', '10149', '3423', '0'), +('3', '38', '15', '10366', '8054', '0'), +('3', '38', '15', '10151', '7200', '0'), +('3', '38', '15', '14679', '7010', '0'), +('3', '38', '15', '14678', '5708', '0'), +('3', '38', '20', '2716', '24654', '0'), +('3', '38', '20', '11601', '19366', '0'), +('3', '38', '20', '2919', '11481', '0'), +('3', '38', '20', '1365', '10500', '0'), +('3', '38', '12', '4835', '10783', '0'), +('3', '38', '12', '20655', '8491', '0'), +('3', '38', '12', '4855', '6062', '0'), +('3', '38', '12', '11624', '5089', '0'), +('3', '38', '18', '4836', '7218', '0'), +('3', '38', '18', '4856', '5488', '0'), +('3', '38', '18', '3155', '5331', '0'), +('3', '38', '18', '4346', '4645', '0'), +('3', '38', '19', '4837', '7659', '0'), +('3', '38', '19', '3156', '6822', '0'), +('3', '38', '19', '4857', '6055', '0'), +('3', '38', '19', '68239', '5623', '0'), +('3', '38', '13', '27708', '25497', '0'), +('3', '38', '13', '11050', '24991', '0'), +('3', '38', '13', '27709', '24166', '0'), +('3', '38', '13', '11682', '23148', '0'), +('3', '38', '14', '11632', '30413', '0'), +('3', '38', '14', '11551', '23853', '0'), +('3', '38', '14', '9428', '20353', '0'), +('3', '38', '14', '11644', '19308', '0'), +('3', '38', '11', '45137', '14234', '0'), +('3', '38', '11', '8408', '8486', '0'), +('3', '38', '11', '8325', '8368', '0'), +('3', '38', '11', '8811', '6545', '0'), +('3', '39', '22', '10323', '0', '0'), +('3', '39', '22', '66166', '0', '0'), +('3', '39', '22', '8567', '0', '0'), +('3', '39', '22', '9246', '0', '0'), +('3', '39', '1', '14701', '4854', '0'), +('3', '39', '1', '14702', '3550', '0'), +('3', '39', '1', '10082', '3260', '0'), +('3', '39', '1', '10165', '1940', '0'), +('3', '39', '2', '4301', '7726', '0'), +('3', '39', '2', '4851', '6963', '0'), +('3', '39', '2', '4831', '6040', '0'), +('3', '39', '2', '4620', '5571', '0'), +('3', '39', '3', '71529', '4257', '0'), +('3', '39', '3', '4505', '2499', '0'), +('3', '39', '3', '11052', '2120', '0'), +('3', '39', '3', '21002', '2114', '0'), +('3', '39', '5', '14703', '7150', '0'), +('3', '39', '5', '12800', '5463', '0'), +('3', '39', '5', '14700', '4806', '0'), +('3', '39', '5', '10055', '4760', '0'), +('3', '39', '8', '11621', '26579', '0'), +('3', '39', '8', '11551', '8753', '0'), +('3', '39', '8', '1409', '7747', '0'), +('3', '39', '8', '11603', '7292', '0'), +('3', '39', '6', '1557', '8270', '0'), +('3', '39', '6', '4302', '4460', '0'), +('3', '39', '6', '4402', '3707', '0'), +('3', '39', '6', '25062', '3672', '0'), +('3', '39', '17', '4832', '14185', '0'), +('3', '39', '17', '4852', '12628', '0'), +('3', '39', '17', '4309', '8225', '0'), +('3', '39', '17', '11623', '7848', '0'), +('3', '39', '7', '4833', '6478', '0'), +('3', '39', '7', '4343', '5557', '0'), +('3', '39', '7', '4853', '5413', '0'), +('3', '39', '7', '3152', '4470', '0'), +('3', '39', '9', '4834', '4408', '0'), +('3', '39', '9', '4854', '3727', '0'), +('3', '39', '9', '12189', '3471', '0'), +('3', '39', '9', '10149', '3434', '0'), +('3', '39', '15', '10366', '8054', '0'), +('3', '39', '15', '10151', '7200', '0'), +('3', '39', '15', '14679', '7010', '0'), +('3', '39', '15', '14678', '5708', '0'), +('3', '39', '20', '2716', '24676', '0'), +('3', '39', '20', '11601', '19420', '0'), +('3', '39', '20', '2919', '11499', '0'), +('3', '39', '20', '1365', '10500', '0'), +('3', '39', '12', '4835', '10810', '0'), +('3', '39', '12', '20655', '8509', '0'), +('3', '39', '12', '4855', '6107', '0'), +('3', '39', '12', '11624', '5127', '0'), +('3', '39', '18', '4836', '7245', '0'), +('3', '39', '18', '4856', '5488', '0'), +('3', '39', '18', '3155', '5364', '0'), +('3', '39', '18', '4346', '4645', '0'), +('3', '39', '19', '4837', '7677', '0'), +('3', '39', '19', '3156', '6822', '0'), +('3', '39', '19', '4857', '6082', '0'), +('3', '39', '19', '68239', '5634', '0'), +('3', '39', '13', '27708', '25807', '0'), +('3', '39', '13', '11050', '25216', '0'), +('3', '39', '13', '27709', '24447', '0'), +('3', '39', '13', '11682', '23347', '0'), +('3', '39', '14', '11632', '30495', '0'), +('3', '39', '14', '11551', '23853', '0'), +('3', '39', '14', '9428', '20353', '0'), +('3', '39', '14', '11644', '19308', '0'), +('3', '39', '11', '45137', '14806', '0'), +('3', '39', '11', '8408', '8561', '0'), +('3', '39', '11', '8325', '8453', '0'), +('3', '39', '11', '8811', '6602', '0'), +('3', '40', '22', '10323', '0', '0'), +('3', '40', '22', '66166', '0', '0'), +('3', '40', '22', '8567', '0', '0'), +('3', '40', '22', '9246', '0', '0'), +('3', '40', '1', '14701', '4854', '0'), +('3', '40', '1', '14702', '3550', '0'), +('3', '40', '1', '10082', '3282', '0'), +('3', '40', '1', '10165', '1940', '0'), +('3', '40', '2', '4301', '7726', '0'), +('3', '40', '2', '4851', '6989', '0'), +('3', '40', '2', '4831', '6040', '0'), +('3', '40', '2', '4620', '5609', '0'), +('3', '40', '3', '71529', '4279', '0'), +('3', '40', '3', '4505', '2525', '0'), +('3', '40', '3', '11052', '2174', '0'), +('3', '40', '3', '21002', '2114', '0'), +('3', '40', '5', '14703', '7150', '0'), +('3', '40', '5', '12800', '5481', '0'), +('3', '40', '5', '14700', '4806', '0'), +('3', '40', '5', '10055', '4760', '0'), +('3', '40', '8', '11621', '26579', '0'), +('3', '40', '8', '11551', '8753', '0'), +('3', '40', '8', '1409', '7747', '0'), +('3', '40', '8', '11603', '7325', '0'), +('3', '40', '6', '1557', '8270', '0'), +('3', '40', '6', '4302', '4493', '0'), +('3', '40', '6', '4402', '3733', '0'), +('3', '40', '6', '25062', '3672', '0'), +('3', '40', '17', '4832', '14266', '0'), +('3', '40', '17', '4852', '12709', '0'), +('3', '40', '17', '4309', '8225', '0'), +('3', '40', '17', '11623', '7848', '0'), +('3', '40', '7', '4833', '6478', '0'), +('3', '40', '7', '4343', '5611', '0'), +('3', '40', '7', '4853', '5413', '0'), +('3', '40', '7', '3152', '4492', '0'), +('3', '40', '9', '4834', '4408', '0'), +('3', '40', '9', '4854', '3727', '0'), +('3', '40', '9', '12189', '3471', '0'), +('3', '40', '9', '10149', '3445', '0'), +('3', '40', '15', '10366', '8054', '0'), +('3', '40', '15', '10151', '7200', '0'), +('3', '40', '15', '14679', '7010', '0'), +('3', '40', '15', '14678', '5708', '0'), +('3', '40', '20', '2716', '24698', '0'), +('3', '40', '20', '11601', '19474', '0'), +('3', '40', '20', '2919', '11517', '0'), +('3', '40', '20', '1365', '10500', '0'), +('3', '40', '12', '4835', '10838', '0'), +('3', '40', '12', '20655', '8527', '0'), +('3', '40', '12', '4855', '6153', '0'), +('3', '40', '12', '11624', '5165', '0'), +('3', '40', '18', '4836', '7272', '0'), +('3', '40', '18', '4856', '5488', '0'), +('3', '40', '18', '3155', '5397', '0'), +('3', '40', '18', '4346', '4645', '0'), +('3', '40', '19', '4837', '7695', '0'), +('3', '40', '19', '3156', '6822', '0'), +('3', '40', '19', '4857', '6109', '0'), +('3', '40', '19', '68239', '5645', '0'), +('3', '40', '13', '27708', '26089', '0'), +('3', '40', '13', '11050', '25442', '0'), +('3', '40', '13', '27709', '24699', '0'), +('3', '40', '13', '11682', '23573', '0'), +('3', '40', '14', '11632', '30576', '0'), +('3', '40', '14', '11551', '23853', '0'), +('3', '40', '14', '9428', '20353', '0'), +('3', '40', '14', '11644', '19308', '0'), +('3', '40', '11', '45137', '15258', '0'), +('3', '40', '11', '8408', '8637', '0'), +('3', '40', '11', '8325', '8528', '0'), +('3', '40', '11', '8811', '6668', '0'), +('3', '41', '22', '10323', '0', '0'), +('3', '41', '22', '66166', '0', '0'), +('3', '41', '22', '8567', '0', '0'), +('3', '41', '22', '9246', '0', '0'), +('3', '41', '1', '14701', '4854', '0'), +('3', '41', '1', '14702', '3550', '0'), +('3', '41', '1', '10082', '3304', '0'), +('3', '41', '1', '10165', '1940', '0'), +('3', '41', '2', '4301', '7726', '0'), +('3', '41', '2', '4851', '7014', '0'), +('3', '41', '2', '4831', '6040', '0'), +('3', '41', '2', '4620', '5647', '0'), +('3', '41', '3', '71529', '4300', '0'), +('3', '41', '3', '4505', '2550', '0'), +('3', '41', '3', '11052', '2229', '0'), +('3', '41', '3', '21002', '2114', '0'), +('3', '41', '5', '14703', '7150', '0'), +('3', '41', '5', '12800', '5499', '0'), +('3', '41', '5', '14700', '4806', '0'), +('3', '41', '5', '10055', '4760', '0'), +('3', '41', '8', '11621', '26579', '0'), +('3', '41', '8', '11551', '8753', '0'), +('3', '41', '8', '1409', '7747', '0'), +('3', '41', '8', '11603', '7357', '0'), +('3', '41', '6', '1557', '8270', '0'), +('3', '41', '6', '4302', '4525', '0'), +('3', '41', '6', '4402', '3758', '0'), +('3', '41', '6', '25062', '3672', '0'), +('3', '41', '17', '4832', '14348', '0'), +('3', '41', '17', '4852', '12791', '0'), +('3', '41', '17', '4309', '8225', '0'), +('3', '41', '17', '11623', '7848', '0'), +('3', '41', '7', '4833', '6478', '0'), +('3', '41', '7', '4343', '5666', '0'), +('3', '41', '7', '4853', '5413', '0'), +('3', '41', '7', '3152', '4514', '0'), +('3', '41', '9', '4834', '4408', '0'), +('3', '41', '9', '4854', '3727', '0'), +('3', '41', '9', '12189', '3471', '0'), +('3', '41', '9', '10149', '3456', '0'), +('3', '41', '15', '10366', '8054', '0'), +('3', '41', '15', '10151', '7200', '0'), +('3', '41', '15', '14679', '7010', '0'), +('3', '41', '15', '14678', '5708', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '41', '20', '2716', '24720', '0'), +('3', '41', '20', '11601', '19529', '0'), +('3', '41', '20', '2919', '11535', '0'), +('3', '41', '20', '1365', '10500', '0'), +('3', '41', '12', '4835', '10865', '0'), +('3', '41', '12', '20655', '8545', '0'), +('3', '41', '12', '4855', '6198', '0'), +('3', '41', '12', '11624', '5203', '0'), +('3', '41', '18', '4836', '7299', '0'), +('3', '41', '18', '4856', '5488', '0'), +('3', '41', '18', '3155', '5429', '0'), +('3', '41', '18', '4346', '4645', '0'), +('3', '41', '19', '4837', '7713', '0'), +('3', '41', '19', '3156', '6822', '0'), +('3', '41', '19', '4857', '6137', '0'), +('3', '41', '19', '68239', '5656', '0'), +('3', '41', '13', '27708', '26370', '0'), +('3', '41', '13', '11050', '25667', '0'), +('3', '41', '13', '27709', '24952', '0'), +('3', '41', '13', '11682', '23800', '0'), +('3', '41', '14', '11632', '30658', '0'), +('3', '41', '14', '11551', '23853', '0'), +('3', '41', '14', '9428', '20353', '0'), +('3', '41', '14', '11644', '19308', '0'), +('3', '41', '11', '45137', '15806', '0'), +('3', '41', '11', '8408', '8713', '0'), +('3', '41', '11', '8325', '8613', '0'), +('3', '41', '11', '8811', '6734', '0'), +('3', '42', '22', '10323', '0', '0'), +('3', '42', '22', '66166', '0', '0'), +('3', '42', '22', '8567', '0', '0'), +('3', '42', '22', '9246', '0', '0'), +('3', '42', '1', '14701', '4854', '0'), +('3', '42', '1', '14702', '3550', '0'), +('3', '42', '1', '10082', '3325', '0'), +('3', '42', '1', '10165', '1940', '0'), +('3', '42', '2', '4301', '7726', '0'), +('3', '42', '2', '4851', '7039', '0'), +('3', '42', '2', '4831', '6040', '0'), +('3', '42', '2', '4620', '5685', '0'), +('3', '42', '3', '71529', '4322', '0'), +('3', '42', '3', '4505', '2575', '0'), +('3', '42', '3', '11052', '2283', '0'), +('3', '42', '3', '21002', '2114', '0'), +('3', '42', '5', '14703', '7150', '0'), +('3', '42', '5', '12800', '5518', '0'), +('3', '42', '5', '14700', '4806', '0'), +('3', '42', '5', '10055', '4760', '0'), +('3', '42', '8', '11621', '26579', '0'), +('3', '42', '8', '11551', '8753', '0'), +('3', '42', '8', '1409', '7747', '0'), +('3', '42', '8', '11603', '7390', '0'), +('3', '42', '6', '1557', '8270', '0'), +('3', '42', '6', '4302', '4558', '0'), +('3', '42', '6', '4402', '3783', '0'), +('3', '42', '6', '25062', '3672', '0'), +('3', '42', '17', '4832', '14430', '0'), +('3', '42', '17', '4852', '12872', '0'), +('3', '42', '17', '4309', '8225', '0'), +('3', '42', '17', '11623', '7848', '0'), +('3', '42', '7', '4833', '6478', '0'), +('3', '42', '7', '4343', '5720', '0'), +('3', '42', '7', '4853', '5413', '0'), +('3', '42', '7', '3152', '4535', '0'), +('3', '42', '9', '4834', '4408', '0'), +('3', '42', '9', '4854', '3727', '0'), +('3', '42', '9', '12189', '3471', '0'), +('3', '42', '9', '10149', '3467', '0'), +('3', '42', '15', '10366', '8054', '0'), +('3', '42', '15', '10151', '7200', '0'), +('3', '42', '15', '14679', '7010', '0'), +('3', '42', '15', '14678', '5708', '0'), +('3', '42', '20', '2716', '24741', '0'), +('3', '42', '20', '11601', '19583', '0'), +('3', '42', '20', '2919', '11554', '0'), +('3', '42', '20', '1365', '10500', '0'), +('3', '42', '12', '4835', '10892', '0'), +('3', '42', '12', '20655', '8563', '0'), +('3', '42', '12', '4855', '6243', '0'), +('3', '42', '12', '11624', '5241', '0'), +('3', '42', '18', '4836', '7327', '0'), +('3', '42', '18', '4856', '5488', '0'), +('3', '42', '18', '3155', '5462', '0'), +('3', '42', '18', '4346', '4645', '0'), +('3', '42', '19', '4837', '7731', '0'), +('3', '42', '19', '3156', '6822', '0'), +('3', '42', '19', '4857', '6164', '0'), +('3', '42', '19', '68239', '5667', '0'), +('3', '42', '13', '27708', '26680', '0'), +('3', '42', '13', '11050', '25921', '0'), +('3', '42', '13', '27709', '25233', '0'), +('3', '42', '13', '11682', '24027', '0'), +('3', '42', '14', '11632', '30739', '0'), +('3', '42', '14', '11551', '23853', '0'), +('3', '42', '14', '9428', '20353', '0'), +('3', '42', '14', '11644', '19308', '0'), +('3', '42', '11', '45137', '16308', '0'), +('3', '42', '11', '8408', '8788', '0'), +('3', '42', '11', '8325', '8689', '0'), +('3', '42', '11', '8811', '6791', '0'), +('3', '43', '22', '10323', '0', '0'), +('3', '43', '22', '66166', '0', '0'), +('3', '43', '22', '8567', '0', '0'), +('3', '43', '22', '9246', '0', '0'), +('3', '43', '1', '14701', '4854', '0'), +('3', '43', '1', '14702', '3550', '0'), +('3', '43', '1', '10082', '3347', '0'), +('3', '43', '1', '10165', '1940', '0'), +('3', '43', '2', '4301', '7726', '0'), +('3', '43', '2', '4851', '7065', '0'), +('3', '43', '2', '4831', '6040', '0'), +('3', '43', '2', '4620', '5723', '0'), +('3', '43', '3', '71529', '4344', '0'), +('3', '43', '3', '4505', '2601', '0'), +('3', '43', '3', '11052', '2337', '0'), +('3', '43', '3', '21002', '2114', '0'), +('3', '43', '5', '14703', '7150', '0'), +('3', '43', '5', '12800', '5536', '0'), +('3', '43', '5', '14700', '4806', '0'), +('3', '43', '5', '10055', '4760', '0'), +('3', '43', '8', '11621', '26579', '0'), +('3', '43', '8', '11551', '8753', '0'), +('3', '43', '8', '1409', '7747', '0'), +('3', '43', '8', '11603', '7422', '0'), +('3', '43', '6', '1557', '8270', '0'), +('3', '43', '6', '4302', '4590', '0'), +('3', '43', '6', '4402', '3809', '0'), +('3', '43', '6', '25062', '3672', '0'), +('3', '43', '17', '4832', '14511', '0'), +('3', '43', '17', '4852', '12954', '0'), +('3', '43', '17', '4309', '8225', '0'), +('3', '43', '17', '11623', '7848', '0'), +('3', '43', '7', '4833', '6478', '0'), +('3', '43', '7', '4343', '5774', '0'), +('3', '43', '7', '4853', '5413', '0'), +('3', '43', '7', '3152', '4557', '0'), +('3', '43', '9', '4834', '4408', '0'), +('3', '43', '9', '4854', '3727', '0'), +('3', '43', '9', '10149', '3477', '0'), +('3', '43', '9', '12189', '3471', '0'), +('3', '43', '15', '10366', '8054', '0'), +('3', '43', '15', '10151', '7200', '0'), +('3', '43', '15', '14679', '7010', '0'), +('3', '43', '15', '14678', '5708', '0'), +('3', '43', '20', '2716', '24763', '0'), +('3', '43', '20', '11601', '19637', '0'), +('3', '43', '20', '2919', '11572', '0'), +('3', '43', '20', '1365', '10500', '0'), +('3', '43', '12', '4835', '10919', '0'), +('3', '43', '12', '20655', '8581', '0'), +('3', '43', '12', '4855', '6289', '0'), +('3', '43', '12', '11624', '5279', '0'), +('3', '43', '18', '4836', '7354', '0'), +('3', '43', '18', '3155', '5494', '0'), +('3', '43', '18', '4856', '5488', '0'), +('3', '43', '18', '4346', '4645', '0'), +('3', '43', '19', '4837', '7749', '0'), +('3', '43', '19', '3156', '6822', '0'), +('3', '43', '19', '4857', '6191', '0'), +('3', '43', '19', '68239', '5678', '0'), +('3', '43', '13', '27708', '26962', '0'), +('3', '43', '13', '11050', '26147', '0'), +('3', '43', '13', '27709', '25486', '0'), +('3', '43', '13', '45120', '24555', '0'), +('3', '43', '14', '11632', '30821', '0'), +('3', '43', '14', '11551', '23853', '0'), +('3', '43', '14', '9428', '20353', '0'), +('3', '43', '14', '11644', '19308', '0'), +('3', '43', '11', '45137', '16774', '0'), +('3', '43', '11', '8408', '8864', '0'), +('3', '43', '11', '8325', '8774', '0'), +('3', '43', '11', '8811', '6857', '0'), +('3', '44', '22', '10323', '0', '0'), +('3', '44', '22', '66166', '0', '0'), +('3', '44', '22', '8567', '0', '0'), +('3', '44', '22', '9246', '0', '0'), +('3', '44', '1', '14701', '4854', '0'), +('3', '44', '1', '14702', '3550', '0'), +('3', '44', '1', '10082', '3369', '0'), +('3', '44', '1', '10165', '1940', '0'), +('3', '44', '2', '4301', '7726', '0'), +('3', '44', '2', '4851', '7090', '0'), +('3', '44', '2', '4831', '6040', '0'), +('3', '44', '2', '4620', '5765', '0'), +('3', '44', '3', '71529', '4368', '0'), +('3', '44', '3', '4505', '2626', '0'), +('3', '44', '3', '11052', '2392', '0'), +('3', '44', '3', '21002', '2114', '0'), +('3', '44', '5', '14703', '7150', '0'), +('3', '44', '5', '12800', '5554', '0'), +('3', '44', '5', '14700', '4806', '0'), +('3', '44', '5', '10055', '4760', '0'), +('3', '44', '8', '11621', '26579', '0'), +('3', '44', '8', '11551', '8753', '0'), +('3', '44', '8', '1409', '7747', '0'), +('3', '44', '8', '11603', '7455', '0'), +('3', '44', '6', '1557', '8270', '0'), +('3', '44', '6', '4302', '4627', '0'), +('3', '44', '6', '4402', '3834', '0'), +('3', '44', '6', '25062', '3672', '0'), +('3', '44', '17', '4832', '14602', '0'), +('3', '44', '17', '4852', '13041', '0'), +('3', '44', '17', '4309', '8225', '0'), +('3', '44', '17', '4342', '7861', '0'), +('3', '44', '7', '4833', '6478', '0'), +('3', '44', '7', '4343', '5835', '0'), +('3', '44', '7', '4853', '5413', '0'), +('3', '44', '7', '3152', '4579', '0'), +('3', '44', '9', '4834', '4408', '0'), +('3', '44', '9', '4854', '3727', '0'), +('3', '44', '9', '10149', '3488', '0'), +('3', '44', '9', '12189', '3471', '0'), +('3', '44', '15', '10366', '8054', '0'), +('3', '44', '15', '10151', '7200', '0'), +('3', '44', '15', '14679', '7010', '0'), +('3', '44', '15', '14678', '5708', '0'), +('3', '44', '20', '2716', '24785', '0'), +('3', '44', '20', '11601', '19698', '0'), +('3', '44', '20', '2919', '11590', '0'), +('3', '44', '20', '1365', '10500', '0'), +('3', '44', '12', '4835', '10949', '0'), +('3', '44', '12', '20655', '8601', '0'), +('3', '44', '12', '4855', '6337', '0'), +('3', '44', '12', '11624', '5321', '0'), +('3', '44', '18', '4836', '7384', '0'), +('3', '44', '18', '3155', '5531', '0'), +('3', '44', '18', '4856', '5488', '0'), +('3', '44', '18', '4346', '4645', '0'), +('3', '44', '19', '4837', '7767', '0'), +('3', '44', '19', '3156', '6822', '0'), +('3', '44', '19', '4857', '6221', '0'), +('3', '44', '19', '68239', '5689', '0'), +('3', '44', '13', '27708', '27278', '0'), +('3', '44', '13', '11050', '26372', '0'), +('3', '44', '13', '27709', '25767', '0'), +('3', '44', '13', '45120', '25410', '0'), +('3', '44', '14', '11632', '30912', '0'), +('3', '44', '14', '11551', '23853', '0'), +('3', '44', '14', '9428', '20353', '0'), +('3', '44', '14', '11644', '19308', '0'), +('3', '44', '11', '45137', '17387', '0'), +('3', '44', '11', '8408', '8939', '0'), +('3', '44', '11', '8325', '8849', '0'), +('3', '44', '11', '8811', '6923', '0'), +('3', '45', '22', '10323', '0', '0'), +('3', '45', '22', '66166', '0', '0'), +('3', '45', '22', '8567', '0', '0'), +('3', '45', '22', '9246', '0', '0'), +('3', '45', '1', '14701', '4854', '0'), +('3', '45', '1', '14702', '3550', '0'), +('3', '45', '1', '10082', '3390', '0'), +('3', '45', '1', '10165', '1940', '0'), +('3', '45', '2', '4301', '7726', '0'), +('3', '45', '2', '4851', '7116', '0'), +('3', '45', '2', '4831', '6040', '0'), +('3', '45', '2', '4620', '5803', '0'), +('3', '45', '3', '71529', '4390', '0'), +('3', '45', '3', '4505', '2652', '0'), +('3', '45', '3', '11052', '2446', '0'), +('3', '45', '3', '21002', '2114', '0'), +('3', '45', '5', '14703', '7150', '0'), +('3', '45', '5', '12800', '5572', '0'), +('3', '45', '5', '14700', '4806', '0'), +('3', '45', '5', '10055', '4760', '0'), +('3', '45', '8', '11621', '26579', '0'), +('3', '45', '8', '11551', '8753', '0'), +('3', '45', '8', '1409', '7747', '0'), +('3', '45', '8', '11603', '7488', '0'), +('3', '45', '6', '1557', '8270', '0'), +('3', '45', '6', '4302', '4659', '0'), +('3', '45', '6', '4402', '3860', '0'), +('3', '45', '6', '25062', '3672', '0'), +('3', '45', '17', '4832', '14683', '0'), +('3', '45', '17', '4852', '13123', '0'), +('3', '45', '17', '4309', '8225', '0'), +('3', '45', '17', '4342', '7897', '0'), +('3', '45', '7', '4833', '6478', '0'), +('3', '45', '7', '4343', '5889', '0'), +('3', '45', '7', '4853', '5413', '0'), +('3', '45', '7', '3152', '4600', '0'), +('3', '45', '9', '4834', '4408', '0'), +('3', '45', '9', '4854', '3727', '0'), +('3', '45', '9', '10149', '3499', '0'), +('3', '45', '9', '12189', '3471', '0'), +('3', '45', '15', '10366', '8054', '0'), +('3', '45', '15', '10151', '7200', '0'), +('3', '45', '15', '14679', '7010', '0'), +('3', '45', '15', '14678', '5708', '0'), +('3', '45', '20', '2716', '24807', '0'), +('3', '45', '20', '11601', '19752', '0'), +('3', '45', '20', '2919', '11608', '0'), +('3', '45', '20', '1365', '10500', '0'), +('3', '45', '12', '4835', '10977', '0'), +('3', '45', '12', '20655', '8619', '0'), +('3', '45', '12', '4855', '6382', '0'), +('3', '45', '12', '11624', '5360', '0'), +('3', '45', '18', '4836', '7411', '0'), +('3', '45', '18', '3155', '5563', '0'), +('3', '45', '18', '4856', '5488', '0'), +('3', '45', '18', '4346', '4645', '0'), +('3', '45', '19', '4837', '7786', '0'), +('3', '45', '19', '3156', '6822', '0'), +('3', '45', '19', '4857', '6248', '0'), +('3', '45', '19', '68239', '5699', '0'), +('3', '45', '13', '11050', '32080', '0'), +('3', '45', '13', '27708', '27560', '0'), +('3', '45', '13', '45120', '26123', '0'), +('3', '45', '13', '27709', '26020', '0'), +('3', '45', '14', '11632', '30993', '0'), +('3', '45', '14', '11551', '23853', '0'), +('3', '45', '14', '9428', '20353', '0'), +('3', '45', '14', '11644', '19308', '0'), +('3', '45', '11', '45137', '17866', '0'), +('3', '45', '11', '8408', '9015', '0'), +('3', '45', '11', '8325', '8934', '0'), +('3', '45', '11', '8811', '6979', '0'), +('3', '46', '22', '10323', '0', '0'), +('3', '46', '22', '66166', '0', '0'), +('3', '46', '22', '8567', '0', '0'), +('3', '46', '22', '9246', '0', '0'), +('3', '46', '1', '14701', '4854', '0'), +('3', '46', '1', '14702', '3550', '0'), +('3', '46', '1', '10082', '3412', '0'), +('3', '46', '1', '10165', '1940', '0'), +('3', '46', '2', '4301', '7726', '0'), +('3', '46', '2', '4851', '7141', '0'), +('3', '46', '2', '4831', '6040', '0'), +('3', '46', '2', '4620', '5841', '0'), +('3', '46', '3', '71529', '4411', '0'), +('3', '46', '3', '4505', '2677', '0'), +('3', '46', '3', '11052', '2501', '0'), +('3', '46', '3', '21002', '2114', '0'), +('3', '46', '5', '14703', '7150', '0'), +('3', '46', '5', '12800', '5590', '0'), +('3', '46', '5', '14700', '4806', '0'), +('3', '46', '5', '10055', '4760', '0'), +('3', '46', '8', '11621', '26579', '0'), +('3', '46', '8', '11551', '8753', '0'), +('3', '46', '8', '1409', '7747', '0'), +('3', '46', '8', '11603', '7520', '0'), +('3', '46', '6', '1557', '8270', '0'), +('3', '46', '6', '4302', '4692', '0'), +('3', '46', '6', '4402', '3885', '0'), +('3', '46', '6', '25062', '3672', '0'), +('3', '46', '17', '4832', '14765', '0'), +('3', '46', '17', '4852', '13204', '0'), +('3', '46', '17', '4309', '8225', '0'), +('3', '46', '17', '4342', '7934', '0'), +('3', '46', '7', '4833', '6478', '0'), +('3', '46', '7', '4343', '5943', '0'), +('3', '46', '7', '4853', '5413', '0'), +('3', '46', '7', '3152', '4622', '0'), +('3', '46', '9', '4834', '4408', '0'), +('3', '46', '9', '4854', '3727', '0'), +('3', '46', '9', '10149', '3510', '0'), +('3', '46', '9', '12189', '3471', '0'), +('3', '46', '15', '10366', '8054', '0'), +('3', '46', '15', '10151', '7200', '0'), +('3', '46', '15', '14679', '7010', '0'), +('3', '46', '15', '14678', '5708', '0'), +('3', '46', '20', '2716', '24828', '0'), +('3', '46', '20', '11601', '19807', '0'), +('3', '46', '20', '2919', '11626', '0'), +('3', '46', '20', '1365', '10500', '0'), +('3', '46', '12', '4835', '11004', '0'), +('3', '46', '12', '20655', '8637', '0'), +('3', '46', '12', '4855', '6428', '0'), +('3', '46', '12', '11624', '5398', '0'), +('3', '46', '18', '4836', '7438', '0'), +('3', '46', '18', '3155', '5596', '0'), +('3', '46', '18', '4856', '5488', '0'), +('3', '46', '18', '4346', '4645', '0'), +('3', '46', '19', '4837', '7804', '0'), +('3', '46', '19', '3156', '6822', '0'), +('3', '46', '19', '4857', '6276', '0'), +('3', '46', '19', '68239', '5710', '0'), +('3', '46', '13', '11050', '32306', '0'), +('3', '46', '13', '27708', '27870', '0'), +('3', '46', '13', '45120', '27176', '0'), +('3', '46', '13', '27709', '26301', '0'), +('3', '46', '14', '11632', '31075', '0'), +('3', '46', '14', '11551', '23853', '0'), +('3', '46', '14', '9428', '20353', '0'), +('3', '46', '14', '11644', '19308', '0'), +('3', '46', '11', '45137', '18394', '0'), +('3', '46', '11', '8408', '9100', '0'), +('3', '46', '11', '8325', '9010', '0'), +('3', '46', '11', '8811', '7046', '0'), +('3', '47', '22', '10323', '0', '0'), +('3', '47', '22', '66166', '0', '0'), +('3', '47', '22', '8567', '0', '0'), +('3', '47', '22', '9246', '0', '0'), +('3', '47', '1', '14701', '4854', '0'), +('3', '47', '1', '14702', '3550', '0'), +('3', '47', '1', '10082', '3434', '0'), +('3', '47', '1', '10165', '1940', '0'), +('3', '47', '2', '4301', '7726', '0'), +('3', '47', '2', '4851', '7166', '0'), +('3', '47', '2', '4831', '6040', '0'), +('3', '47', '2', '4620', '5884', '0'), +('3', '47', '3', '71529', '4436', '0'), +('3', '47', '3', '4505', '2702', '0'), +('3', '47', '3', '11052', '2555', '0'), +('3', '47', '3', '21002', '2114', '0'), +('3', '47', '5', '14703', '7150', '0'), +('3', '47', '5', '12800', '5608', '0'), +('3', '47', '5', '14700', '4806', '0'), +('3', '47', '5', '10055', '4760', '0'), +('3', '47', '8', '11621', '26579', '0'), +('3', '47', '8', '11551', '8753', '0'), +('3', '47', '8', '1409', '7747', '0'), +('3', '47', '8', '11603', '7553', '0'), +('3', '47', '6', '1557', '8270', '0'), +('3', '47', '6', '4302', '4728', '0'), +('3', '47', '6', '4402', '3910', '0'), +('3', '47', '6', '25062', '3672', '0'), +('3', '47', '17', '4832', '14855', '0'), +('3', '47', '17', '4852', '13291', '0'), +('3', '47', '17', '4309', '8225', '0'), +('3', '47', '17', '4342', '7970', '0'), +('3', '47', '7', '4833', '6478', '0'), +('3', '47', '7', '4343', '6004', '0'), +('3', '47', '7', '4853', '5413', '0'), +('3', '47', '7', '3152', '4644', '0'), +('3', '47', '9', '4834', '4408', '0'), +('3', '47', '9', '4854', '3727', '0'), +('3', '47', '9', '10149', '3521', '0'), +('3', '47', '9', '12189', '3471', '0'), +('3', '47', '15', '10366', '8054', '0'), +('3', '47', '15', '10151', '7200', '0'), +('3', '47', '15', '14679', '7010', '0'), +('3', '47', '15', '14678', '5708', '0'), +('3', '47', '20', '2716', '24850', '0'), +('3', '47', '20', '11601', '19867', '0'), +('3', '47', '20', '2919', '11644', '0'), +('3', '47', '20', '1365', '10500', '0'), +('3', '47', '12', '4835', '11034', '0'), +('3', '47', '12', '20655', '8656', '0'), +('3', '47', '12', '4855', '6476', '0'), +('3', '47', '12', '11624', '5440', '0'), +('3', '47', '18', '4836', '7468', '0'), +('3', '47', '18', '3155', '5632', '0'), +('3', '47', '18', '4856', '5488', '0'), +('3', '47', '18', '4346', '4645', '0'), +('3', '47', '19', '4837', '7822', '0'), +('3', '47', '19', '3156', '6822', '0'), +('3', '47', '19', '4857', '6306', '0'), +('3', '47', '19', '68239', '5721', '0'), +('3', '47', '13', '11050', '32531', '0'), +('3', '47', '13', '27708', '28157', '0'), +('3', '47', '13', '45120', '27893', '0'), +('3', '47', '13', '27709', '26553', '0'), +('3', '47', '14', '11632', '31165', '0'), +('3', '47', '14', '11551', '23853', '0'), +('3', '47', '14', '9428', '20353', '0'), +('3', '47', '14', '11644', '19308', '0'), +('3', '47', '11', '45137', '18881', '0'), +('3', '47', '11', '8408', '9175', '0'), +('3', '47', '11', '8325', '9095', '0'), +('3', '47', '11', '8811', '7102', '0'), +('3', '48', '22', '10323', '0', '0'), +('3', '48', '22', '66166', '0', '0'), +('3', '48', '22', '8567', '0', '0'), +('3', '48', '22', '9246', '0', '0'), +('3', '48', '1', '14701', '4854', '0'), +('3', '48', '1', '14702', '3550', '0'), +('3', '48', '1', '10082', '3456', '0'), +('3', '48', '1', '10165', '1940', '0'), +('3', '48', '2', '4301', '7726', '0'), +('3', '48', '2', '4851', '7192', '0'), +('3', '48', '2', '4831', '6040', '0'), +('3', '48', '2', '4620', '5922', '0'), +('3', '48', '3', '71529', '4457', '0'), +('3', '48', '3', '4505', '2728', '0'), +('3', '48', '3', '11052', '2609', '0'), +('3', '48', '3', '21002', '2114', '0'), +('3', '48', '5', '14703', '7150', '0'), +('3', '48', '5', '12800', '5626', '0'), +('3', '48', '5', '14700', '4806', '0'), +('3', '48', '5', '10055', '4760', '0'), +('3', '48', '8', '11621', '26579', '0'), +('3', '48', '8', '11551', '8753', '0'), +('3', '48', '8', '1409', '7747', '0'), +('3', '48', '8', '11603', '7586', '0'), +('3', '48', '6', '1557', '8270', '0'), +('3', '48', '6', '4302', '4761', '0'), +('3', '48', '6', '4402', '3936', '0'), +('3', '48', '6', '25062', '3672', '0'), +('3', '48', '17', '4832', '14937', '0'), +('3', '48', '17', '4852', '13373', '0'), +('3', '48', '17', '4309', '8225', '0'), +('3', '48', '17', '4342', '8006', '0'), +('3', '48', '7', '4833', '6478', '0'), +('3', '48', '7', '4343', '6058', '0'), +('3', '48', '7', '4853', '5413', '0'), +('3', '48', '7', '3152', '4666', '0'), +('3', '48', '9', '4834', '4408', '0'), +('3', '48', '9', '4854', '3727', '0'), +('3', '48', '9', '10149', '3532', '0'), +('3', '48', '9', '12189', '3471', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '48', '15', '10366', '8054', '0'), +('3', '48', '15', '10151', '7200', '0'), +('3', '48', '15', '14679', '7010', '0'), +('3', '48', '15', '14678', '5708', '0'), +('3', '48', '20', '2716', '24872', '0'), +('3', '48', '20', '11601', '19921', '0'), +('3', '48', '20', '2919', '11662', '0'), +('3', '48', '20', '1365', '10500', '0'), +('3', '48', '12', '4835', '11061', '0'), +('3', '48', '12', '20655', '8674', '0'), +('3', '48', '12', '4855', '6521', '0'), +('3', '48', '12', '11624', '5478', '0'), +('3', '48', '18', '4836', '7496', '0'), +('3', '48', '18', '3155', '5665', '0'), +('3', '48', '18', '4856', '5488', '0'), +('3', '48', '18', '4346', '4645', '0'), +('3', '48', '19', '4837', '7840', '0'), +('3', '48', '19', '3156', '6822', '0'), +('3', '48', '19', '4857', '6333', '0'), +('3', '48', '19', '68239', '5732', '0'), +('3', '48', '13', '11050', '32757', '0'), +('3', '48', '13', '45120', '28807', '0'), +('3', '48', '13', '27708', '28467', '0'), +('3', '48', '13', '27709', '26834', '0'), +('3', '48', '14', '11632', '31247', '0'), +('3', '48', '14', '11551', '23853', '0'), +('3', '48', '14', '9428', '20353', '0'), +('3', '48', '14', '11644', '19308', '0'), +('3', '48', '11', '45137', '19516', '0'), +('3', '48', '11', '8408', '9251', '0'), +('3', '48', '11', '8325', '9171', '0'), +('3', '48', '11', '8811', '7168', '0'), +('3', '49', '22', '10323', '0', '0'), +('3', '49', '22', '66166', '0', '0'), +('3', '49', '22', '8567', '0', '0'), +('3', '49', '22', '9246', '0', '0'), +('3', '49', '1', '14701', '4854', '0'), +('3', '49', '1', '14702', '3550', '0'), +('3', '49', '1', '10082', '3477', '0'), +('3', '49', '1', '10165', '1940', '0'), +('3', '49', '2', '4301', '7726', '0'), +('3', '49', '2', '4851', '7217', '0'), +('3', '49', '2', '4831', '6040', '0'), +('3', '49', '2', '4620', '5964', '0'), +('3', '49', '3', '71529', '4481', '0'), +('3', '49', '3', '4505', '2753', '0'), +('3', '49', '3', '11052', '2664', '0'), +('3', '49', '3', '21002', '2114', '0'), +('3', '49', '5', '14703', '7150', '0'), +('3', '49', '5', '12800', '5644', '0'), +('3', '49', '5', '14700', '4806', '0'), +('3', '49', '5', '10055', '4760', '0'), +('3', '49', '8', '11621', '26579', '0'), +('3', '49', '8', '11551', '8753', '0'), +('3', '49', '8', '1409', '7747', '0'), +('3', '49', '8', '11603', '7618', '0'), +('3', '49', '6', '1557', '8270', '0'), +('3', '49', '6', '4302', '4797', '0'), +('3', '49', '6', '4402', '3961', '0'), +('3', '49', '6', '25062', '3672', '0'), +('3', '49', '17', '4832', '15028', '0'), +('3', '49', '17', '4852', '13460', '0'), +('3', '49', '17', '4309', '8225', '0'), +('3', '49', '17', '4342', '8042', '0'), +('3', '49', '7', '4833', '6478', '0'), +('3', '49', '7', '4343', '6119', '0'), +('3', '49', '7', '4853', '5413', '0'), +('3', '49', '7', '3152', '4687', '0'), +('3', '49', '9', '4834', '4408', '0'), +('3', '49', '9', '4854', '3727', '0'), +('3', '49', '9', '10149', '3543', '0'), +('3', '49', '9', '12189', '3471', '0'), +('3', '49', '15', '10366', '8054', '0'), +('3', '49', '15', '10151', '7200', '0'), +('3', '49', '15', '14679', '7010', '0'), +('3', '49', '15', '14678', '5708', '0'), +('3', '49', '20', '2716', '24893', '0'), +('3', '49', '20', '11601', '19982', '0'), +('3', '49', '20', '2919', '11680', '0'), +('3', '49', '20', '1365', '10500', '0'), +('3', '49', '12', '4835', '11091', '0'), +('3', '49', '12', '20655', '8694', '0'), +('3', '49', '12', '4855', '6570', '0'), +('3', '49', '12', '11624', '5520', '0'), +('3', '49', '18', '4836', '7526', '0'), +('3', '49', '18', '3155', '5701', '0'), +('3', '49', '18', '4856', '5488', '0'), +('3', '49', '18', '4346', '4645', '0'), +('3', '49', '19', '4837', '7858', '0'), +('3', '49', '19', '3156', '6822', '0'), +('3', '49', '19', '4857', '6363', '0'), +('3', '49', '19', '68239', '5743', '0'), +('3', '49', '13', '11050', '33011', '0'), +('3', '49', '13', '45120', '29554', '0'), +('3', '49', '13', '27708', '28755', '0'), +('3', '49', '13', '27709', '27087', '0'), +('3', '49', '14', '11632', '31337', '0'), +('3', '49', '14', '11551', '23853', '0'), +('3', '49', '14', '9428', '20353', '0'), +('3', '49', '14', '11644', '19308', '0'), +('3', '49', '11', '45137', '20025', '0'), +('3', '49', '11', '8408', '9326', '0'), +('3', '49', '11', '8325', '9256', '0'), +('3', '49', '11', '8811', '7234', '0'), +('3', '50', '22', '10323', '0', '0'), +('3', '50', '22', '66166', '0', '0'), +('3', '50', '22', '8567', '0', '0'), +('3', '50', '22', '9246', '0', '0'), +('3', '50', '1', '14701', '4854', '0'), +('3', '50', '1', '14702', '3550', '0'), +('3', '50', '1', '10082', '3499', '0'), +('3', '50', '1', '10165', '1940', '0'), +('3', '50', '2', '4301', '7726', '0'), +('3', '50', '2', '4851', '7242', '0'), +('3', '50', '2', '4831', '6040', '0'), +('3', '50', '2', '4620', '6006', '0'), +('3', '50', '3', '71529', '4506', '0'), +('3', '50', '3', '4505', '2778', '0'), +('3', '50', '3', '11052', '2718', '0'), +('3', '50', '3', '21002', '2114', '0'), +('3', '50', '5', '14703', '7150', '0'), +('3', '50', '5', '12800', '5663', '0'), +('3', '50', '5', '14700', '4806', '0'), +('3', '50', '5', '10055', '4760', '0'), +('3', '50', '8', '11621', '26579', '0'), +('3', '50', '8', '11551', '8753', '0'), +('3', '50', '8', '1409', '7747', '0'), +('3', '50', '8', '11603', '7651', '0'), +('3', '50', '6', '1557', '8270', '0'), +('3', '50', '6', '4302', '4833', '0'), +('3', '50', '6', '4402', '3986', '0'), +('3', '50', '6', '25062', '3672', '0'), +('3', '50', '17', '4832', '15118', '0'), +('3', '50', '17', '4852', '13547', '0'), +('3', '50', '17', '4309', '8225', '0'), +('3', '50', '17', '4342', '8079', '0'), +('3', '50', '7', '4833', '6478', '0'), +('3', '50', '7', '4343', '6179', '0'), +('3', '50', '7', '4853', '5413', '0'), +('3', '50', '7', '3152', '4709', '0'), +('3', '50', '9', '4834', '4408', '0'), +('3', '50', '9', '4854', '3727', '0'), +('3', '50', '9', '10149', '3554', '0'), +('3', '50', '9', '12189', '3471', '0'), +('3', '50', '15', '10366', '8054', '0'), +('3', '50', '15', '10151', '7200', '0'), +('3', '50', '15', '14679', '7010', '0'), +('3', '50', '15', '14678', '5708', '0'), +('3', '50', '20', '2716', '24915', '0'), +('3', '50', '20', '11601', '20042', '0'), +('3', '50', '20', '2919', '11699', '0'), +('3', '50', '20', '1365', '10500', '0'), +('3', '50', '12', '4835', '11122', '0'), +('3', '50', '12', '20655', '8713', '0'), +('3', '50', '12', '4855', '6618', '0'), +('3', '50', '12', '11624', '5562', '0'), +('3', '50', '18', '4836', '7556', '0'), +('3', '50', '18', '3155', '5737', '0'), +('3', '50', '18', '4856', '5488', '0'), +('3', '50', '18', '4346', '4645', '0'), +('3', '50', '19', '4837', '7876', '0'), +('3', '50', '19', '3156', '6822', '0'), +('3', '50', '19', '4857', '6393', '0'), +('3', '50', '19', '68239', '5754', '0'), +('3', '50', '13', '11050', '33236', '0'), +('3', '50', '13', '45120', '30501', '0'), +('3', '50', '13', '27708', '29071', '0'), +('3', '50', '13', '27709', '27368', '0'), +('3', '50', '14', '11632', '31428', '0'), +('3', '50', '14', '11551', '23853', '0'), +('3', '50', '14', '9428', '20353', '0'), +('3', '50', '14', '11644', '19308', '0'), +('3', '50', '11', '45137', '20583', '0'), +('3', '50', '11', '8408', '9402', '0'), +('3', '50', '11', '8325', '9331', '0'), +('3', '50', '11', '8811', '7291', '0'), +('3', '51', '22', '10323', '0', '0'), +('3', '51', '22', '66166', '0', '0'), +('3', '51', '22', '8567', '0', '0'), +('3', '51', '22', '9246', '0', '0'), +('3', '51', '1', '14701', '4854', '0'), +('3', '51', '1', '14702', '3550', '0'), +('3', '51', '1', '10082', '3521', '0'), +('3', '51', '1', '10165', '1940', '0'), +('3', '51', '2', '4301', '7726', '0'), +('3', '51', '2', '4851', '7268', '0'), +('3', '51', '2', '4620', '6044', '0'), +('3', '51', '2', '4831', '6040', '0'), +('3', '51', '3', '71529', '4527', '0'), +('3', '51', '3', '4505', '2804', '0'), +('3', '51', '3', '11052', '2772', '0'), +('3', '51', '3', '21002', '2114', '0'), +('3', '51', '5', '14703', '7150', '0'), +('3', '51', '5', '12800', '5681', '0'), +('3', '51', '5', '14700', '4806', '0'), +('3', '51', '5', '10055', '4760', '0'), +('3', '51', '8', '11621', '26579', '0'), +('3', '51', '8', '11551', '8753', '0'), +('3', '51', '8', '1409', '7747', '0'), +('3', '51', '8', '11603', '7683', '0'), +('3', '51', '6', '1557', '8270', '0'), +('3', '51', '6', '4302', '4866', '0'), +('3', '51', '6', '4402', '4012', '0'), +('3', '51', '6', '25062', '3672', '0'), +('3', '51', '17', '4832', '15200', '0'), +('3', '51', '17', '4852', '13628', '0'), +('3', '51', '17', '4309', '8225', '0'), +('3', '51', '17', '4342', '8115', '0'), +('3', '51', '7', '4833', '6478', '0'), +('3', '51', '7', '4343', '6233', '0'), +('3', '51', '7', '4853', '5413', '0'), +('3', '51', '7', '3152', '4731', '0'), +('3', '51', '9', '4834', '4408', '0'), +('3', '51', '9', '4854', '3727', '0'), +('3', '51', '9', '10149', '3564', '0'), +('3', '51', '9', '4311', '3492', '0'), +('3', '51', '15', '10366', '8054', '0'), +('3', '51', '15', '10151', '7200', '0'), +('3', '51', '15', '14679', '7010', '0'), +('3', '51', '15', '14678', '5708', '0'), +('3', '51', '20', '2716', '24937', '0'), +('3', '51', '20', '11601', '20096', '0'), +('3', '51', '20', '2919', '11717', '0'), +('3', '51', '20', '1365', '10500', '0'), +('3', '51', '12', '4835', '11149', '0'), +('3', '51', '12', '20655', '8731', '0'), +('3', '51', '12', '4855', '6663', '0'), +('3', '51', '12', '11624', '5601', '0'), +('3', '51', '18', '4836', '7583', '0'), +('3', '51', '18', '3155', '5770', '0'), +('3', '51', '18', '4856', '5488', '0'), +('3', '51', '18', '4346', '4645', '0'), +('3', '51', '19', '4837', '7894', '0'), +('3', '51', '19', '3156', '6822', '0'), +('3', '51', '19', '4857', '6421', '0'), +('3', '51', '19', '68239', '5765', '0'), +('3', '51', '13', '27961', '39870', '0'), +('3', '51', '13', '11050', '33462', '0'), +('3', '51', '13', '45120', '31248', '0'), +('3', '51', '13', '27895', '30222', '0'), +('3', '51', '14', '11632', '31510', '0'), +('3', '51', '14', '11551', '23853', '0'), +('3', '51', '14', '9428', '20353', '0'), +('3', '51', '14', '11644', '19308', '0'), +('3', '51', '11', '45137', '21092', '0'), +('3', '51', '11', '8408', '9478', '0'), +('3', '51', '11', '8325', '9407', '0'), +('3', '51', '11', '8811', '7357', '0'), +('3', '52', '22', '10323', '0', '0'), +('3', '52', '22', '66166', '0', '0'), +('3', '52', '22', '8567', '0', '0'), +('3', '52', '22', '9246', '0', '0'), +('3', '52', '1', '14701', '4854', '0'), +('3', '52', '1', '14702', '3550', '0'), +('3', '52', '1', '10082', '3543', '0'), +('3', '52', '1', '10165', '1940', '0'), +('3', '52', '2', '4301', '7726', '0'), +('3', '52', '2', '4851', '7293', '0'), +('3', '52', '2', '4620', '6087', '0'), +('3', '52', '2', '4831', '6040', '0'), +('3', '52', '3', '71529', '4552', '0'), +('3', '52', '3', '4505', '2829', '0'), +('3', '52', '3', '11052', '2827', '0'), +('3', '52', '3', '21002', '2114', '0'), +('3', '52', '5', '14703', '7150', '0'), +('3', '52', '5', '12800', '5699', '0'), +('3', '52', '5', '14700', '4806', '0'), +('3', '52', '5', '10055', '4760', '0'), +('3', '52', '8', '11621', '26579', '0'), +('3', '52', '8', '11551', '8753', '0'), +('3', '52', '8', '1409', '7747', '0'), +('3', '52', '8', '11603', '7716', '0'), +('3', '52', '6', '1557', '8270', '0'), +('3', '52', '6', '4302', '4902', '0'), +('3', '52', '6', '4402', '4037', '0'), +('3', '52', '6', '25062', '3672', '0'), +('3', '52', '17', '4832', '15290', '0'), +('3', '52', '17', '4852', '13715', '0'), +('3', '52', '17', '4309', '8225', '0'), +('3', '52', '17', '4342', '8151', '0'), +('3', '52', '7', '4833', '6478', '0'), +('3', '52', '7', '4343', '6294', '0'), +('3', '52', '7', '4853', '5413', '0'), +('3', '52', '7', '3152', '4753', '0'), +('3', '52', '9', '4834', '4408', '0'), +('3', '52', '9', '4854', '3727', '0'), +('3', '52', '9', '10149', '3575', '0'), +('3', '52', '9', '4311', '3535', '0'), +('3', '52', '15', '10366', '8054', '0'), +('3', '52', '15', '10151', '7200', '0'), +('3', '52', '15', '14679', '7010', '0'), +('3', '52', '15', '14678', '5708', '0'), +('3', '52', '20', '2716', '24959', '0'), +('3', '52', '20', '11601', '20157', '0'), +('3', '52', '20', '2919', '11735', '0'), +('3', '52', '20', '1365', '10500', '0'), +('3', '52', '12', '4835', '11179', '0'), +('3', '52', '12', '20655', '8750', '0'), +('3', '52', '12', '4855', '6711', '0'), +('3', '52', '12', '11624', '5643', '0'), +('3', '52', '18', '4836', '7613', '0'), +('3', '52', '18', '3155', '5806', '0'), +('3', '52', '18', '4856', '5488', '0'), +('3', '52', '18', '4346', '4645', '0'), +('3', '52', '19', '4837', '7912', '0'), +('3', '52', '19', '3156', '6822', '0'), +('3', '52', '19', '4857', '6451', '0'), +('3', '52', '19', '68239', '5776', '0'), +('3', '52', '13', '27961', '40212', '0'), +('3', '52', '13', '11050', '33716', '0'), +('3', '52', '13', '45120', '32197', '0'), +('3', '52', '13', '27895', '30467', '0'), +('3', '52', '14', '11632', '31600', '0'), +('3', '52', '14', '11551', '23853', '0'), +('3', '52', '14', '9428', '20353', '0'), +('3', '52', '14', '9403', '19319', '0'), +('3', '52', '11', '45137', '21757', '0'), +('3', '52', '11', '8408', '9553', '0'), +('3', '52', '11', '8325', '9492', '0'), +('3', '52', '11', '8811', '7423', '0'), +('3', '53', '22', '10323', '0', '0'), +('3', '53', '22', '66166', '0', '0'), +('3', '53', '22', '8567', '0', '0'), +('3', '53', '22', '9246', '0', '0'), +('3', '53', '1', '14701', '4854', '0'), +('3', '53', '1', '10082', '3564', '0'), +('3', '53', '1', '14702', '3550', '0'), +('3', '53', '1', '10165', '1940', '0'), +('3', '53', '2', '4301', '7726', '0'), +('3', '53', '2', '4851', '7319', '0'), +('3', '53', '2', '4620', '6129', '0'), +('3', '53', '2', '4831', '6040', '0'), +('3', '53', '3', '71529', '4576', '0'), +('3', '53', '3', '11052', '2881', '0'), +('3', '53', '3', '4505', '2855', '0'), +('3', '53', '3', '21002', '2114', '0'), +('3', '53', '5', '14703', '7150', '0'), +('3', '53', '5', '12800', '5717', '0'), +('3', '53', '5', '14700', '4806', '0'), +('3', '53', '5', '10055', '4760', '0'), +('3', '53', '8', '11621', '26579', '0'), +('3', '53', '8', '11551', '8753', '0'), +('3', '53', '8', '11603', '7749', '0'), +('3', '53', '8', '1409', '7747', '0'), +('3', '53', '6', '1557', '8270', '0'), +('3', '53', '6', '4302', '4938', '0'), +('3', '53', '6', '4402', '4063', '0'), +('3', '53', '6', '25062', '3672', '0'), +('3', '53', '17', '4832', '15381', '0'), +('3', '53', '17', '4852', '13802', '0'), +('3', '53', '17', '4309', '8225', '0'), +('3', '53', '17', '4342', '8187', '0'), +('3', '53', '7', '4833', '6478', '0'), +('3', '53', '7', '4343', '6354', '0'), +('3', '53', '7', '4853', '5413', '0'), +('3', '53', '7', '3152', '4774', '0'), +('3', '53', '9', '4834', '4408', '0'), +('3', '53', '9', '4854', '3727', '0'), +('3', '53', '9', '10149', '3586', '0'), +('3', '53', '9', '4311', '3577', '0'), +('3', '53', '15', '10366', '8054', '0'), +('3', '53', '15', '10151', '7200', '0'), +('3', '53', '15', '14679', '7010', '0'), +('3', '53', '15', '14678', '5708', '0'), +('3', '53', '20', '2716', '24980', '0'), +('3', '53', '20', '11601', '20217', '0'), +('3', '53', '20', '2919', '11753', '0'), +('3', '53', '20', '1365', '10500', '0'), +('3', '53', '12', '4835', '11209', '0'), +('3', '53', '12', '20655', '8770', '0'), +('3', '53', '12', '4855', '6760', '0'), +('3', '53', '12', '11624', '5685', '0'), +('3', '53', '18', '4836', '7644', '0'), +('3', '53', '18', '3155', '5842', '0'), +('3', '53', '18', '4856', '5488', '0'), +('3', '53', '18', '4346', '4645', '0'), +('3', '53', '19', '4837', '7931', '0'), +('3', '53', '19', '3156', '6822', '0'), +('3', '53', '19', '4857', '6481', '0'), +('3', '53', '19', '68239', '5786', '0'), +('3', '53', '13', '27961', '40554', '0'), +('3', '53', '13', '11050', '33941', '0'), +('3', '53', '13', '45120', '32977', '0'), +('3', '53', '13', '27895', '30684', '0'), +('3', '53', '14', '11632', '31691', '0'), +('3', '53', '14', '11551', '23853', '0'), +('3', '53', '14', '9428', '20353', '0'), +('3', '53', '14', '9403', '19337', '0'), +('3', '53', '11', '45137', '22283', '0'), +('3', '53', '11', '8408', '9629', '0'), +('3', '53', '11', '8325', '9567', '0'), +('3', '53', '11', '8811', '7480', '0'), +('3', '54', '22', '10323', '0', '0'), +('3', '54', '22', '66166', '0', '0'), +('3', '54', '22', '8567', '0', '0'), +('3', '54', '22', '9246', '0', '0'), +('3', '54', '1', '14701', '4854', '0'), +('3', '54', '1', '10082', '3586', '0'), +('3', '54', '1', '14702', '3550', '0'), +('3', '54', '1', '10165', '1940', '0'), +('3', '54', '2', '4301', '7726', '0'), +('3', '54', '2', '4851', '7344', '0'), +('3', '54', '2', '4620', '6171', '0'), +('3', '54', '2', '4831', '6040', '0'), +('3', '54', '3', '71529', '4600', '0'), +('3', '54', '3', '11052', '2935', '0'), +('3', '54', '3', '4505', '2880', '0'), +('3', '54', '3', '21002', '2114', '0'), +('3', '54', '5', '14703', '7150', '0'), +('3', '54', '5', '12800', '5735', '0'), +('3', '54', '5', '14700', '4806', '0'), +('3', '54', '5', '10055', '4760', '0'), +('3', '54', '8', '11621', '26579', '0'), +('3', '54', '8', '11551', '8753', '0'), +('3', '54', '8', '11603', '7781', '0'), +('3', '54', '8', '1409', '7747', '0'), +('3', '54', '6', '1557', '8270', '0'), +('3', '54', '6', '4302', '4975', '0'), +('3', '54', '6', '4402', '4088', '0'), +('3', '54', '6', '25062', '3672', '0'), +('3', '54', '17', '4832', '15471', '0'), +('3', '54', '17', '4852', '13889', '0'), +('3', '54', '17', '4309', '8225', '0'), +('3', '54', '17', '4342', '8223', '0'), +('3', '54', '7', '4833', '6478', '0'), +('3', '54', '7', '4343', '6414', '0'), +('3', '54', '7', '4853', '5413', '0'), +('3', '54', '7', '3152', '4796', '0'), +('3', '54', '9', '4834', '4408', '0'), +('3', '54', '9', '4854', '3727', '0'), +('3', '54', '9', '4311', '3619', '0'), +('3', '54', '9', '10149', '3597', '0'), +('3', '54', '15', '10366', '8054', '0'), +('3', '54', '15', '10151', '7200', '0'), +('3', '54', '15', '14679', '7010', '0'), +('3', '54', '15', '14678', '5708', '0'), +('3', '54', '20', '2716', '25002', '0'), +('3', '54', '20', '11601', '20278', '0'), +('3', '54', '20', '2919', '11771', '0'), +('3', '54', '20', '1365', '10500', '0'), +('3', '54', '12', '4835', '11239', '0'), +('3', '54', '12', '20655', '8789', '0'), +('3', '54', '12', '4855', '6808', '0'), +('3', '54', '12', '11624', '5727', '0'), +('3', '54', '18', '4836', '7674', '0'), +('3', '54', '18', '3155', '5879', '0'), +('3', '54', '18', '4856', '5488', '0'), +('3', '54', '18', '4346', '4645', '0'), +('3', '54', '19', '4837', '7949', '0'), +('3', '54', '19', '3156', '6822', '0'), +('3', '54', '19', '4857', '6511', '0'), +('3', '54', '19', '68239', '5797', '0'), +('3', '54', '13', '27961', '40896', '0'), +('3', '54', '13', '11050', '34167', '0'), +('3', '54', '13', '45120', '33957', '0'), +('3', '54', '13', '27895', '30928', '0'), +('3', '54', '14', '11632', '31781', '0'), +('3', '54', '14', '11551', '23853', '0'), +('3', '54', '14', '9428', '20353', '0'), +('3', '54', '14', '9403', '19355', '0'), +('3', '54', '11', '45137', '22811', '0'), +('3', '54', '11', '8408', '9704', '0'), +('3', '54', '11', '8325', '9652', '0'), +('3', '54', '11', '8811', '7546', '0'), +('3', '55', '22', '10323', '0', '0'), +('3', '55', '22', '66166', '0', '0'), +('3', '55', '22', '8567', '0', '0'), +('3', '55', '22', '9246', '0', '0'), +('3', '55', '1', '14701', '4854', '0'), +('3', '55', '1', '10082', '3608', '0'), +('3', '55', '1', '14702', '3550', '0'), +('3', '55', '1', '10165', '1940', '0'), +('3', '55', '2', '4301', '7726', '0'), +('3', '55', '2', '4851', '7369', '0'), +('3', '55', '2', '4620', '6213', '0'), +('3', '55', '2', '4831', '6040', '0'), +('3', '55', '3', '71529', '4624', '0'), +('3', '55', '3', '11052', '2990', '0'), +('3', '55', '3', '4505', '2905', '0'), +('3', '55', '3', '21002', '2114', '0'), +('3', '55', '5', '14703', '7150', '0'), +('3', '55', '5', '12800', '5753', '0'), +('3', '55', '5', '14700', '4806', '0'), +('3', '55', '5', '10055', '4760', '0'), +('3', '55', '8', '11621', '26579', '0'), +('3', '55', '8', '11551', '8753', '0'), +('3', '55', '8', '11603', '7814', '0'), +('3', '55', '8', '1409', '7747', '0'), +('3', '55', '6', '1557', '8270', '0'), +('3', '55', '6', '4302', '5011', '0'), +('3', '55', '6', '4402', '4113', '0'), +('3', '55', '6', '25062', '3672', '0'), +('3', '55', '17', '4832', '15562', '0'), +('3', '55', '17', '4852', '13976', '0'), +('3', '55', '17', '4342', '8260', '0'), +('3', '55', '17', '4309', '8225', '0'), +('3', '55', '7', '4833', '6478', '0'), +('3', '55', '7', '4343', '6475', '0'), +('3', '55', '7', '4853', '5413', '0'), +('3', '55', '7', '3152', '4818', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '55', '9', '4834', '4408', '0'), +('3', '55', '9', '4854', '3727', '0'), +('3', '55', '9', '4311', '3661', '0'), +('3', '55', '9', '10149', '3608', '0'), +('3', '55', '15', '10366', '8054', '0'), +('3', '55', '15', '10151', '7200', '0'), +('3', '55', '15', '14679', '7010', '0'), +('3', '55', '15', '14678', '5708', '0'), +('3', '55', '20', '2716', '25024', '0'), +('3', '55', '20', '11601', '20338', '0'), +('3', '55', '20', '2919', '11789', '0'), +('3', '55', '20', '1365', '10500', '0'), +('3', '55', '12', '4835', '11270', '0'), +('3', '55', '12', '20655', '8808', '0'), +('3', '55', '12', '4855', '6856', '0'), +('3', '55', '12', '11624', '5770', '0'), +('3', '55', '18', '4836', '7704', '0'), +('3', '55', '18', '3155', '5915', '0'), +('3', '55', '18', '4856', '5488', '0'), +('3', '55', '18', '4346', '4645', '0'), +('3', '55', '19', '4837', '7967', '0'), +('3', '55', '19', '3156', '6822', '0'), +('3', '55', '19', '4857', '6541', '0'), +('3', '55', '19', '68239', '5808', '0'), +('3', '55', '13', '27961', '41266', '0'), +('3', '55', '13', '45120', '35023', '0'), +('3', '55', '13', '11050', '34392', '0'), +('3', '55', '13', '27895', '31145', '0'), +('3', '55', '14', '11632', '31872', '0'), +('3', '55', '14', '11551', '23853', '0'), +('3', '55', '14', '9428', '20353', '0'), +('3', '55', '14', '9403', '19373', '0'), +('3', '55', '11', '45137', '23397', '0'), +('3', '55', '11', '8408', '9780', '0'), +('3', '55', '11', '8325', '9728', '0'), +('3', '55', '11', '8811', '7603', '0'), +('3', '56', '22', '10323', '0', '0'), +('3', '56', '22', '66166', '0', '0'), +('3', '56', '22', '8567', '0', '0'), +('3', '56', '22', '9246', '0', '0'), +('3', '56', '1', '14701', '4854', '0'), +('3', '56', '1', '10082', '3630', '0'), +('3', '56', '1', '14702', '3550', '0'), +('3', '56', '1', '10165', '1940', '0'), +('3', '56', '2', '4301', '7726', '0'), +('3', '56', '2', '4851', '7395', '0'), +('3', '56', '2', '4620', '6256', '0'), +('3', '56', '2', '4831', '6040', '0'), +('3', '56', '3', '71529', '4648', '0'), +('3', '56', '3', '11052', '3044', '0'), +('3', '56', '3', '4505', '2931', '0'), +('3', '56', '3', '21002', '2114', '0'), +('3', '56', '5', '14703', '7150', '0'), +('3', '56', '5', '12800', '5771', '0'), +('3', '56', '5', '14700', '4806', '0'), +('3', '56', '5', '10055', '4760', '0'), +('3', '56', '8', '11621', '26579', '0'), +('3', '56', '8', '11551', '8753', '0'), +('3', '56', '8', '11603', '7846', '0'), +('3', '56', '8', '1409', '7747', '0'), +('3', '56', '6', '1557', '8270', '0'), +('3', '56', '6', '4302', '5047', '0'), +('3', '56', '6', '4402', '4139', '0'), +('3', '56', '6', '25062', '3672', '0'), +('3', '56', '17', '4832', '15653', '0'), +('3', '56', '17', '4852', '14063', '0'), +('3', '56', '17', '4342', '8296', '0'), +('3', '56', '17', '4309', '8225', '0'), +('3', '56', '7', '4343', '6535', '0'), +('3', '56', '7', '4833', '6478', '0'), +('3', '56', '7', '4853', '5413', '0'), +('3', '56', '7', '3152', '4840', '0'), +('3', '56', '9', '4834', '4408', '0'), +('3', '56', '9', '4854', '3727', '0'), +('3', '56', '9', '4311', '3704', '0'), +('3', '56', '9', '10149', '3619', '0'), +('3', '56', '15', '10366', '8054', '0'), +('3', '56', '15', '10151', '7200', '0'), +('3', '56', '15', '14679', '7010', '0'), +('3', '56', '15', '14678', '5708', '0'), +('3', '56', '20', '2716', '25046', '0'), +('3', '56', '20', '11601', '20398', '0'), +('3', '56', '20', '2919', '11807', '0'), +('3', '56', '20', '1365', '10500', '0'), +('3', '56', '12', '4835', '11300', '0'), +('3', '56', '12', '20655', '8828', '0'), +('3', '56', '12', '4855', '6905', '0'), +('3', '56', '12', '11624', '5812', '0'), +('3', '56', '18', '4836', '7734', '0'), +('3', '56', '18', '3155', '5951', '0'), +('3', '56', '18', '4856', '5488', '0'), +('3', '56', '18', '4346', '4645', '0'), +('3', '56', '19', '4837', '7985', '0'), +('3', '56', '19', '3156', '6822', '0'), +('3', '56', '19', '4857', '6572', '0'), +('3', '56', '19', '68239', '5819', '0'), +('3', '56', '13', '27961', '41608', '0'), +('3', '56', '13', '45120', '35308', '0'), +('3', '56', '13', '11050', '34646', '0'), +('3', '56', '13', '27895', '31390', '0'), +('3', '56', '14', '11632', '31963', '0'), +('3', '56', '14', '11551', '23853', '0'), +('3', '56', '14', '9428', '20353', '0'), +('3', '56', '14', '9403', '19391', '0'), +('3', '56', '11', '45137', '23938', '0'), +('3', '56', '11', '8408', '9855', '0'), +('3', '56', '11', '8325', '9813', '0'), +('3', '56', '11', '8811', '7669', '0'), +('3', '57', '22', '10323', '0', '0'), +('3', '57', '22', '66166', '0', '0'), +('3', '57', '22', '8567', '0', '0'), +('3', '57', '22', '9246', '0', '0'), +('3', '57', '1', '14701', '4854', '0'), +('3', '57', '1', '10082', '3651', '0'), +('3', '57', '1', '14702', '3550', '0'), +('3', '57', '1', '10165', '1940', '0'), +('3', '57', '2', '4301', '7726', '0'), +('3', '57', '2', '4851', '7420', '0'), +('3', '57', '2', '4620', '6298', '0'), +('3', '57', '2', '4831', '6040', '0'), +('3', '57', '3', '71529', '4672', '0'), +('3', '57', '3', '11052', '3099', '0'), +('3', '57', '3', '4505', '2956', '0'), +('3', '57', '3', '21002', '2114', '0'), +('3', '57', '5', '14703', '7150', '0'), +('3', '57', '5', '12800', '5789', '0'), +('3', '57', '5', '14700', '4806', '0'), +('3', '57', '5', '4501', '4799', '0'), +('3', '57', '8', '11621', '26579', '0'), +('3', '57', '8', '11551', '8753', '0'), +('3', '57', '8', '11603', '7879', '0'), +('3', '57', '8', '1409', '7747', '0'), +('3', '57', '6', '1557', '8270', '0'), +('3', '57', '6', '4302', '5083', '0'), +('3', '57', '6', '4402', '4164', '0'), +('3', '57', '6', '25062', '3672', '0'), +('3', '57', '17', '4832', '15743', '0'), +('3', '57', '17', '4852', '14150', '0'), +('3', '57', '17', '4342', '8332', '0'), +('3', '57', '17', '4309', '8225', '0'), +('3', '57', '7', '4343', '6596', '0'), +('3', '57', '7', '4833', '6478', '0'), +('3', '57', '7', '4853', '5413', '0'), +('3', '57', '7', '3152', '4861', '0'), +('3', '57', '9', '4834', '4408', '0'), +('3', '57', '9', '4311', '3746', '0'), +('3', '57', '9', '4854', '3727', '0'), +('3', '57', '9', '10149', '3630', '0'), +('3', '57', '15', '10366', '8054', '0'), +('3', '57', '15', '10151', '7200', '0'), +('3', '57', '15', '14679', '7010', '0'), +('3', '57', '15', '14678', '5708', '0'), +('3', '57', '20', '2716', '25067', '0'), +('3', '57', '20', '11601', '20459', '0'), +('3', '57', '20', '2919', '11825', '0'), +('3', '57', '20', '1365', '10500', '0'), +('3', '57', '12', '4835', '11330', '0'), +('3', '57', '12', '20655', '8847', '0'), +('3', '57', '12', '4855', '6953', '0'), +('3', '57', '12', '11624', '5854', '0'), +('3', '57', '18', '4836', '7764', '0'), +('3', '57', '18', '3155', '5987', '0'), +('3', '57', '18', '4856', '5488', '0'), +('3', '57', '18', '4346', '4645', '0'), +('3', '57', '19', '4837', '8003', '0'), +('3', '57', '19', '3156', '6822', '0'), +('3', '57', '19', '4857', '6602', '0'), +('3', '57', '19', '68239', '5830', '0'), +('3', '57', '13', '27961', '41950', '0'), +('3', '57', '13', '45120', '35593', '0'), +('3', '57', '13', '11050', '34872', '0'), +('3', '57', '13', '27895', '31606', '0'), +('3', '57', '14', '11632', '32053', '0'), +('3', '57', '14', '11551', '23853', '0'), +('3', '57', '14', '9428', '20353', '0'), +('3', '57', '14', '9403', '19410', '0'), +('3', '57', '11', '45137', '24736', '0'), +('3', '57', '11', '8408', '9931', '0'), +('3', '57', '11', '8325', '9888', '0'), +('3', '57', '11', '8811', '7735', '0'), +('3', '58', '22', '10323', '0', '0'), +('3', '58', '22', '66166', '0', '0'), +('3', '58', '22', '8567', '0', '0'), +('3', '58', '22', '9246', '0', '0'), +('3', '58', '1', '14701', '4854', '0'), +('3', '58', '1', '10082', '3673', '0'), +('3', '58', '1', '14702', '3550', '0'), +('3', '58', '1', '10165', '1940', '0'), +('3', '58', '2', '4301', '7726', '0'), +('3', '58', '2', '4851', '7445', '0'), +('3', '58', '2', '4620', '6340', '0'), +('3', '58', '2', '4831', '6040', '0'), +('3', '58', '3', '71529', '4696', '0'), +('3', '58', '3', '11052', '3153', '0'), +('3', '58', '3', '4505', '2981', '0'), +('3', '58', '3', '21002', '2114', '0'), +('3', '58', '5', '14703', '7150', '0'), +('3', '58', '5', '12800', '5807', '0'), +('3', '58', '5', '4501', '4846', '0'), +('3', '58', '5', '14700', '4806', '0'), +('3', '58', '8', '11621', '26579', '0'), +('3', '58', '8', '11551', '8753', '0'), +('3', '58', '8', '11603', '7912', '0'), +('3', '58', '8', '1409', '7747', '0'), +('3', '58', '6', '1557', '8270', '0'), +('3', '58', '6', '4302', '5120', '0'), +('3', '58', '6', '4402', '4189', '0'), +('3', '58', '6', '25062', '3672', '0'), +('3', '58', '17', '4832', '15834', '0'), +('3', '58', '17', '4852', '14237', '0'), +('3', '58', '17', '4342', '8368', '0'), +('3', '58', '17', '4309', '8225', '0'), +('3', '58', '7', '4343', '6656', '0'), +('3', '58', '7', '4833', '6478', '0'), +('3', '58', '7', '4853', '5413', '0'), +('3', '58', '7', '3152', '4883', '0'), +('3', '58', '9', '4834', '4408', '0'), +('3', '58', '9', '4311', '3788', '0'), +('3', '58', '9', '4854', '3727', '0'), +('3', '58', '9', '10149', '3641', '0'), +('3', '58', '15', '10366', '8054', '0'), +('3', '58', '15', '10151', '7200', '0'), +('3', '58', '15', '14679', '7010', '0'), +('3', '58', '15', '14678', '5708', '0'), +('3', '58', '20', '2716', '25089', '0'), +('3', '58', '20', '11601', '20519', '0'), +('3', '58', '20', '2919', '11843', '0'), +('3', '58', '20', '1365', '10500', '0'), +('3', '58', '12', '4835', '11360', '0'), +('3', '58', '12', '20655', '8866', '0'), +('3', '58', '12', '4855', '7001', '0'), +('3', '58', '12', '11624', '5896', '0'), +('3', '58', '18', '4836', '7795', '0'), +('3', '58', '18', '3155', '6024', '0'), +('3', '58', '18', '4856', '5488', '0'), +('3', '58', '18', '4346', '4645', '0'), +('3', '58', '19', '4837', '8021', '0'), +('3', '58', '19', '3156', '6822', '0'), +('3', '58', '19', '4857', '6632', '0'), +('3', '58', '19', '68239', '5841', '0'), +('3', '58', '13', '27961', '42291', '0'), +('3', '58', '13', '45120', '35878', '0'), +('3', '58', '13', '11050', '35097', '0'), +('3', '58', '13', '27895', '31851', '0'), +('3', '58', '14', '11632', '32144', '0'), +('3', '58', '14', '11551', '23853', '0'), +('3', '58', '14', '9428', '20353', '0'), +('3', '58', '14', '9403', '19428', '0'), +('3', '58', '11', '45137', '25290', '0'), +('3', '58', '11', '8408', '10006', '0'), +('3', '58', '11', '8325', '9973', '0'), +('3', '58', '11', '8811', '7792', '0'), +('3', '59', '22', '10323', '0', '0'), +('3', '59', '22', '66166', '0', '0'), +('3', '59', '22', '8567', '0', '0'), +('3', '59', '22', '9246', '0', '0'), +('3', '59', '1', '14701', '4854', '0'), +('3', '59', '1', '10082', '3695', '0'), +('3', '59', '1', '14702', '3550', '0'), +('3', '59', '1', '10165', '1940', '0'), +('3', '59', '2', '4301', '7726', '0'), +('3', '59', '2', '4851', '7471', '0'), +('3', '59', '2', '4620', '6382', '0'), +('3', '59', '2', '4831', '6040', '0'), +('3', '59', '3', '71529', '4721', '0'), +('3', '59', '3', '11052', '3207', '0'), +('3', '59', '3', '4505', '3007', '0'), +('3', '59', '3', '21002', '2114', '0'), +('3', '59', '5', '14703', '7150', '0'), +('3', '59', '5', '12800', '5826', '0'), +('3', '59', '5', '4501', '4894', '0'), +('3', '59', '5', '14700', '4806', '0'), +('3', '59', '8', '11621', '26579', '0'), +('3', '59', '8', '11551', '8753', '0'), +('3', '59', '8', '11603', '7944', '0'), +('3', '59', '8', '1409', '7747', '0'), +('3', '59', '6', '1557', '8270', '0'), +('3', '59', '6', '4302', '5156', '0'), +('3', '59', '6', '4402', '4215', '0'), +('3', '59', '6', '25062', '3672', '0'), +('3', '59', '17', '4832', '15924', '0'), +('3', '59', '17', '4852', '14324', '0'), +('3', '59', '17', '4342', '8405', '0'), +('3', '59', '17', '4309', '8225', '0'), +('3', '59', '7', '4343', '6716', '0'), +('3', '59', '7', '4833', '6478', '0'), +('3', '59', '7', '4853', '5413', '0'), +('3', '59', '7', '3152', '4905', '0'), +('3', '59', '9', '4834', '4408', '0'), +('3', '59', '9', '4311', '3831', '0'), +('3', '59', '9', '4854', '3727', '0'), +('3', '59', '9', '10149', '3651', '0'), +('3', '59', '15', '10366', '8054', '0'), +('3', '59', '15', '10151', '7200', '0'), +('3', '59', '15', '14679', '7010', '0'), +('3', '59', '15', '14678', '5708', '0'), +('3', '59', '20', '2716', '25111', '0'), +('3', '59', '20', '11601', '20580', '0'), +('3', '59', '20', '2919', '11862', '0'), +('3', '59', '20', '1365', '10500', '0'), +('3', '59', '12', '4835', '11390', '0'), +('3', '59', '12', '20655', '8886', '0'), +('3', '59', '12', '4855', '7050', '0'), +('3', '59', '12', '11624', '5939', '0'), +('3', '59', '18', '4836', '7825', '0'), +('3', '59', '18', '3155', '6060', '0'), +('3', '59', '18', '4856', '5488', '0'), +('3', '59', '18', '4346', '4645', '0'), +('3', '59', '19', '4837', '8039', '0'), +('3', '59', '19', '3156', '6822', '0'), +('3', '59', '19', '4857', '6662', '0'), +('3', '59', '19', '68239', '5852', '0'), +('3', '59', '13', '27961', '42662', '0'), +('3', '59', '13', '45120', '36163', '0'), +('3', '59', '13', '11050', '35351', '0'), +('3', '59', '13', '27895', '32096', '0'), +('3', '59', '14', '11632', '32234', '0'), +('3', '59', '14', '11551', '23853', '0'), +('3', '59', '14', '9428', '20353', '0'), +('3', '59', '14', '9403', '19446', '0'), +('3', '59', '11', '45137', '25903', '0'), +('3', '59', '11', '8408', '10091', '0'), +('3', '59', '11', '8325', '10049', '0'), +('3', '59', '11', '8811', '7858', '0'), +('3', '60', '22', '12425', '0', '3'), +('3', '60', '22', '21807', '0', '3'), +('3', '60', '22', '7867', '0', '3'), +('3', '60', '22', '9248', '0', '3'), +('3', '60', '1', '7945', '24244', '3'), +('3', '60', '1', '26775', '17213', '3'), +('3', '60', '1', '63170', '15188', '3'), +('3', '60', '1', '29861', '14863', '3'), +('3', '60', '2', '26025', '23578', '3'), +('3', '60', '2', '2612', '23578', '3'), +('3', '60', '2', '26759', '16725', '3'), +('3', '60', '2', '28986', '15931', '3'), +('3', '60', '3', '26773', '18328', '3'), +('3', '60', '3', '26751', '15694', '3'), +('3', '60', '3', '28942', '15677', '3'), +('3', '60', '3', '31233', '14447', '3'), +('3', '60', '5', '28885', '32303', '3'), +('3', '60', '5', '27266', '26858', '3'), +('3', '60', '5', '8364', '21521', '3'), +('3', '60', '5', '7868', '16201', '3'), +('3', '60', '8', '26765', '35824', '3'), +('3', '60', '8', '26766', '35221', '3'), +('3', '60', '8', '31471', '31262', '3'), +('3', '60', '8', '11621', '23502', '3'), +('3', '60', '6', '28902', '35353', '3'), +('3', '60', '6', '30551', '16198', '3'), +('3', '60', '6', '28919', '16003', '3'), +('3', '60', '6', '26753', '14103', '3'), +('3', '60', '17', '28937', '36633', '3'), +('3', '60', '17', '29457', '31574', '3'), +('3', '60', '17', '27261', '21544', '3'), +('3', '60', '17', '26770', '21157', '3'), +('3', '60', '7', '28926', '17157', '3'), +('3', '60', '7', '7868', '16201', '3'), +('3', '60', '7', '26584', '15464', '3'), +('3', '60', '7', '8288', '14679', '3'), +('3', '60', '9', '31461', '31535', '3'), +('3', '60', '9', '7868', '16201', '3'), +('3', '60', '9', '26584', '15464', '3'), +('3', '60', '9', '31460', '14460', '3'), +('3', '60', '15', '27950', '23112', '3'), +('3', '60', '15', '26749', '18731', '3'), +('3', '60', '15', '63170', '15188', '3'), +('3', '60', '15', '7870', '14838', '3'), +('3', '60', '20', '28890', '32481', '3'), +('3', '60', '20', '31235', '30777', '3'), +('3', '60', '20', '31334', '28637', '3'), +('3', '60', '20', '26551', '28467', '3'), +('3', '60', '12', '25857', '31789', '3'), +('3', '60', '12', '28967', '17425', '3'), +('3', '60', '12', '26774', '15515', '3'), +('3', '60', '12', '31227', '14849', '3'), +('3', '60', '18', '28965', '16777', '3'), +('3', '60', '18', '28932', '14440', '3'), +('3', '60', '18', '8289', '14363', '3'), +('3', '60', '18', '26755', '13446', '3'), +('3', '60', '19', '30569', '35336', '3'), +('3', '60', '19', '28888', '29918', '3'), +('3', '60', '19', '24616', '23667', '3'), +('3', '60', '19', '7871', '14495', '3'), +('3', '60', '13', '28824', '59097', '3'), +('3', '60', '13', '31317', '55295', '3'), +('3', '60', '13', '30530', '55185', '3'), +('3', '60', '13', '27949', '54773', '3'), +('3', '60', '14', '28915', '17804', '3'), +('3', '60', '14', '28970', '17072', '3'), +('3', '60', '14', '26754', '16539', '3'), +('3', '60', '14', '26564', '15019', '3'), +('3', '60', '11', '30539', '39113', '3'), +('3', '60', '11', '28935', '38821', '3'), +('3', '60', '11', '7904', '33938', '3'), +('3', '60', '11', '26563', '28789', '3'), +('3', '60', '22', '10323', '0', '2'), +('3', '60', '22', '66166', '0', '2'), +('3', '60', '22', '9248', '0', '2'), +('3', '60', '22', '12425', '0', '2'), +('3', '60', '1', '2748', '8505', '2'), +('3', '60', '1', '31236', '7910', '2'), +('3', '60', '1', '62234', '7566', '2'), +('3', '60', '1', '5716', '7282', '2'), +('3', '60', '2', '2612', '24841', '2'), +('3', '60', '2', '26025', '24841', '2'), +('3', '60', '2', '29648', '15872', '2'), +('3', '60', '2', '25194', '14332', '2'), +('3', '60', '3', '31233', '16893', '2'), +('3', '60', '3', '31244', '13528', '2'), +('3', '60', '3', '31464', '11799', '2'), +('3', '60', '3', '31378', '10704', '2'), +('3', '60', '5', '27266', '27927', '2'), +('3', '60', '5', '31460', '17033', '2'), +('3', '60', '5', '31234', '14313', '2'), +('3', '60', '5', '31318', '12586', '2'), +('3', '60', '8', '31471', '33357', '2'), +('3', '60', '8', '11621', '24015', '2'), +('3', '60', '8', '27261', '22966', '2'), +('3', '60', '8', '22819', '20515', '2'), +('3', '60', '6', '31472', '15751', '2'), +('3', '60', '6', '31240', '12056', '2'), +('3', '60', '6', '5723', '11985', '2'), +('3', '60', '6', '24070', '11840', '2'), +('3', '60', '17', '29457', '34284', '2'), +('3', '60', '17', '27261', '22966', '2'), +('3', '60', '17', '25044', '16146', '2'), +('3', '60', '17', '10845', '15516', '2'), +('3', '60', '7', '5723', '11985', '2'), +('3', '60', '7', '29485', '9381', '2'), +('3', '60', '7', '31381', '8594', '2'), +('3', '60', '7', '62361', '7369', '2'), +('3', '60', '9', '31461', '34358', '2'), +('3', '60', '9', '31460', '17033', '2'), +('3', '60', '9', '5723', '11985', '2'), +('3', '60', '9', '31246', '10994', '2'), +('3', '60', '15', '31231', '16135', '2'), +('3', '60', '15', '25211', '15717', '2'), +('3', '60', '15', '30388', '12552', '2'), +('3', '60', '15', '30385', '11489', '2'), +('3', '60', '20', '31235', '33519', '2'), +('3', '60', '20', '31334', '30483', '2'), +('3', '60', '20', '31353', '23039', '2'), +('3', '60', '20', '24753', '21368', '2'), +('3', '60', '12', '25857', '33662', '2'), +('3', '60', '12', '31227', '18308', '2'), +('3', '60', '12', '31306', '14608', '2'), +('3', '60', '12', '29177', '14000', '2'), +('3', '60', '18', '25375', '9767', '2'), +('3', '60', '18', '31124', '8914', '2'), +('3', '60', '18', '31332', '8519', '2'), +('3', '60', '18', '31310', '7898', '2'), +('3', '60', '19', '24616', '24328', '2'), +('3', '60', '19', '25197', '10472', '2'), +('3', '60', '19', '62371', '9344', '2'), +('3', '60', '19', '29455', '8714', '2'), +('3', '60', '13', '31317', '56800', '2'), +('3', '60', '13', '31304', '55907', '2'), +('3', '60', '13', '2580', '54951', '2'), +('3', '60', '13', '31232', '52692', '2'), +('3', '60', '14', '31462', '19461', '2'), +('3', '60', '14', '31316', '16393', '2'), +('3', '60', '14', '25098', '15669', '2'), +('3', '60', '14', '31212', '15460', '2'), +('3', '60', '11', '29433', '24937', '2'), +('3', '60', '11', '27326', '24937', '2'), +('3', '60', '11', '31469', '24519', '2'), +('3', '60', '11', '45137', '22934', '2'), +('3', '60', '22', '8567', '0', '1'), +('3', '60', '22', '10323', '0', '1'), +('3', '60', '22', '66166', '0', '1'), +('3', '60', '22', '8502', '0', '1'), +('3', '60', '1', '62234', '9304', '1'), +('3', '60', '1', '10912', '7732', '1'), +('3', '60', '1', '5716', '6448', '1'), +('3', '60', '1', '5704', '5996', '1'), +('3', '60', '2', '10913', '17204', '1'), +('3', '60', '2', '1630', '9391', '1'), +('3', '60', '2', '50036', '8701', '1'), +('3', '60', '2', '4301', '6117', '1'), +('3', '60', '3', '46184', '8234', '1'), +('3', '60', '3', '1625', '5704', '1'), +('3', '60', '3', '5712', '3970', '1'), +('3', '60', '3', '3201', '3359', '1'), +('3', '60', '5', '14703', '7150', '1'), +('3', '60', '5', '8285', '4776', '1'), +('3', '60', '5', '14709', '4672', '1'), +('3', '60', '5', '14700', '4435', '1'), +('3', '60', '8', '11621', '25297', '1'), +('3', '60', '8', '1627', '21600', '1'), +('3', '60', '8', '1619', '21565', '1'), +('3', '60', '8', '1628', '14756', '1'), +('3', '60', '6', '5723', '14109', '1'), +('3', '60', '6', '5706', '8883', '1'), +('3', '60', '6', '1557', '7033', '1'), +('3', '60', '6', '11975', '4439', '1'), +('3', '60', '17', '10845', '19525', '1'), +('3', '60', '17', '4544', '10216', '1'), +('3', '60', '17', '4832', '9453', '1'), +('3', '60', '17', '4852', '8506', '1'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '60', '7', '5723', '14109', '1'), +('3', '60', '7', '62046', '6309', '1'), +('3', '60', '7', '4295', '4590', '1'), +('3', '60', '7', '4343', '4000', '1'), +('3', '60', '9', '5723', '14109', '1'), +('3', '60', '9', '5794', '3858', '1'), +('3', '60', '9', '4294', '3594', '1'), +('3', '60', '9', '4834', '2860', '1'), +('3', '60', '15', '5727', '12068', '1'), +('3', '60', '15', '5728', '8335', '1'), +('3', '60', '15', '10366', '8032', '1'), +('3', '60', '15', '10151', '7200', '1'), +('3', '60', '20', '2716', '23234', '1'), +('3', '60', '20', '1620', '19712', '1'), +('3', '60', '20', '11601', '18534', '1'), +('3', '60', '20', '1623', '12357', '1'), +('3', '60', '12', '4835', '8790', '1'), +('3', '60', '12', '20655', '6444', '1'), +('3', '60', '12', '3255', '4383', '1'), +('3', '60', '12', '4855', '4312', '1'), +('3', '60', '18', '4548', '9902', '1'), +('3', '60', '18', '11612', '5184', '1'), +('3', '60', '18', '4836', '4636', '1'), +('3', '60', '18', '3155', '3721', '1'), +('3', '60', '19', '24616', '25981', '1'), +('3', '60', '19', '3156', '5461', '1'), +('3', '60', '19', '4837', '5125', '1'), +('3', '60', '19', '4318', '4434', '1'), +('3', '60', '13', '10099', '46642', '1'), +('3', '60', '13', '27961', '41938', '1'), +('3', '60', '13', '5603', '38904', '1'), +('3', '60', '13', '45120', '35179', '1'), +('3', '60', '14', '10851', '26399', '1'), +('3', '60', '14', '11632', '21128', '1'), +('3', '60', '14', '9205', '19322', '1'), +('3', '60', '14', '9030', '18369', '1'), +('3', '60', '11', '45137', '24702', '1'), +('3', '60', '11', '5758', '17640', '1'), +('3', '60', '11', '8325', '10134', '1'), +('3', '60', '11', '8408', '10083', '1'), +('3', '61', '22', '12425', '0', '3'), +('3', '61', '22', '21807', '0', '3'), +('3', '61', '22', '7867', '0', '3'), +('3', '61', '22', '9248', '0', '3'), +('3', '61', '1', '7945', '24245', '3'), +('3', '61', '1', '26775', '17215', '3'), +('3', '61', '1', '63170', '15139', '3'), +('3', '61', '1', '29861', '14867', '3'), +('3', '61', '2', '26025', '23579', '3'), +('3', '61', '2', '2612', '23579', '3'), +('3', '61', '2', '26759', '16725', '3'), +('3', '61', '2', '28986', '15934', '3'), +('3', '61', '3', '26773', '18331', '3'), +('3', '61', '3', '26751', '15695', '3'), +('3', '61', '3', '28942', '15679', '3'), +('3', '61', '3', '31233', '14449', '3'), +('3', '61', '5', '28885', '32304', '3'), +('3', '61', '5', '27266', '26859', '3'), +('3', '61', '5', '8364', '21523', '3'), +('3', '61', '5', '7868', '16202', '3'), +('3', '61', '8', '26765', '35824', '3'), +('3', '61', '8', '26766', '35223', '3'), +('3', '61', '8', '31471', '31263', '3'), +('3', '61', '8', '11621', '23502', '3'), +('3', '61', '6', '28902', '35355', '3'), +('3', '61', '6', '30551', '16200', '3'), +('3', '61', '6', '28919', '16005', '3'), +('3', '61', '6', '26753', '14103', '3'), +('3', '61', '17', '28937', '36635', '3'), +('3', '61', '17', '29457', '31574', '3'), +('3', '61', '17', '27261', '21545', '3'), +('3', '61', '17', '26770', '21160', '3'), +('3', '61', '7', '28926', '17157', '3'), +('3', '61', '7', '7868', '16202', '3'), +('3', '61', '7', '26584', '15467', '3'), +('3', '61', '7', '8288', '14679', '3'), +('3', '61', '9', '31461', '31537', '3'), +('3', '61', '9', '7868', '16202', '3'), +('3', '61', '9', '26584', '15467', '3'), +('3', '61', '9', '31460', '14461', '3'), +('3', '61', '15', '27950', '23113', '3'), +('3', '61', '15', '26749', '18734', '3'), +('3', '61', '15', '63170', '15139', '3'), +('3', '61', '15', '7870', '14839', '3'), +('3', '61', '20', '28890', '32481', '3'), +('3', '61', '20', '31235', '30779', '3'), +('3', '61', '20', '31334', '28637', '3'), +('3', '61', '20', '26551', '28469', '3'), +('3', '61', '12', '25857', '31790', '3'), +('3', '61', '12', '28967', '17425', '3'), +('3', '61', '12', '26774', '15517', '3'), +('3', '61', '12', '31227', '14852', '3'), +('3', '61', '18', '28965', '16779', '3'), +('3', '61', '18', '28932', '14443', '3'), +('3', '61', '18', '8289', '14364', '3'), +('3', '61', '18', '26755', '13446', '3'), +('3', '61', '19', '30569', '35337', '3'), +('3', '61', '19', '28888', '29919', '3'), +('3', '61', '19', '24616', '23667', '3'), +('3', '61', '19', '7871', '14498', '3'), +('3', '61', '13', '28824', '59296', '3'), +('3', '61', '13', '31317', '55325', '3'), +('3', '61', '13', '30530', '55243', '3'), +('3', '61', '13', '27949', '54830', '3'), +('3', '61', '14', '28915', '17805', '3'), +('3', '61', '14', '28970', '17073', '3'), +('3', '61', '14', '26754', '16541', '3'), +('3', '61', '14', '26564', '15023', '3'), +('3', '61', '11', '30539', '39217', '3'), +('3', '61', '11', '28935', '38929', '3'), +('3', '61', '11', '7904', '33966', '3'), +('3', '61', '11', '26563', '28790', '3'), +('3', '62', '22', '12425', '0', '3'), +('3', '62', '22', '21807', '0', '3'), +('3', '62', '22', '7867', '0', '3'), +('3', '62', '22', '9248', '0', '3'), +('3', '62', '1', '7945', '24245', '3'), +('3', '62', '1', '26775', '17217', '3'), +('3', '62', '1', '63170', '15091', '3'), +('3', '62', '1', '29861', '14871', '3'), +('3', '62', '2', '26025', '23580', '3'), +('3', '62', '2', '2612', '23580', '3'), +('3', '62', '2', '26759', '16725', '3'), +('3', '62', '2', '28986', '15938', '3'), +('3', '62', '3', '26773', '18334', '3'), +('3', '62', '3', '26751', '15696', '3'), +('3', '62', '3', '28942', '15681', '3'), +('3', '62', '3', '31233', '14450', '3'), +('3', '62', '5', '28885', '32305', '3'), +('3', '62', '5', '27266', '26860', '3'), +('3', '62', '5', '8364', '21526', '3'), +('3', '62', '5', '7868', '16204', '3'), +('3', '62', '8', '26765', '35825', '3'), +('3', '62', '8', '26766', '35226', '3'), +('3', '62', '8', '31471', '31265', '3'), +('3', '62', '8', '11621', '23502', '3'), +('3', '62', '6', '28902', '35357', '3'), +('3', '62', '6', '30551', '16201', '3'), +('3', '62', '6', '28919', '16007', '3'), +('3', '62', '6', '26753', '14103', '3'), +('3', '62', '17', '28937', '36636', '3'), +('3', '62', '17', '29457', '31574', '3'), +('3', '62', '17', '27261', '21546', '3'), +('3', '62', '17', '26770', '21164', '3'), +('3', '62', '7', '28926', '17158', '3'), +('3', '62', '7', '7868', '16204', '3'), +('3', '62', '7', '26584', '15469', '3'), +('3', '62', '7', '8288', '14679', '3'), +('3', '62', '9', '31461', '31538', '3'), +('3', '62', '9', '7868', '16204', '3'), +('3', '62', '9', '26584', '15469', '3'), +('3', '62', '9', '31460', '14463', '3'), +('3', '62', '15', '27950', '23114', '3'), +('3', '62', '15', '26749', '18736', '3'), +('3', '62', '15', '63170', '15091', '3'), +('3', '62', '15', '7870', '14839', '3'), +('3', '62', '20', '28890', '32481', '3'), +('3', '62', '20', '31235', '30781', '3'), +('3', '62', '20', '31334', '28638', '3'), +('3', '62', '20', '26551', '28471', '3'), +('3', '62', '12', '25857', '31790', '3'), +('3', '62', '12', '28967', '17425', '3'), +('3', '62', '12', '26774', '15518', '3'), +('3', '62', '12', '31227', '14854', '3'), +('3', '62', '18', '28965', '16781', '3'), +('3', '62', '18', '28932', '14446', '3'), +('3', '62', '18', '8289', '14364', '3'), +('3', '62', '18', '26755', '13446', '3'), +('3', '62', '19', '30569', '35338', '3'), +('3', '62', '19', '28888', '29920', '3'), +('3', '62', '19', '24616', '23667', '3'), +('3', '62', '19', '7871', '14501', '3'), +('3', '62', '13', '28824', '59495', '3'), +('3', '62', '13', '31317', '55383', '3'), +('3', '62', '13', '30530', '55301', '3'), +('3', '62', '13', '31304', '54920', '3'), +('3', '62', '14', '28915', '17806', '3'), +('3', '62', '14', '28970', '17075', '3'), +('3', '62', '14', '26754', '16544', '3'), +('3', '62', '14', '26564', '15027', '3'), +('3', '62', '11', '30539', '39320', '3'), +('3', '62', '11', '28935', '39029', '3'), +('3', '62', '11', '7904', '33985', '3'), +('3', '62', '11', '26563', '28791', '3'), +('3', '63', '22', '12425', '0', '3'), +('3', '63', '22', '21807', '0', '3'), +('3', '63', '22', '7867', '0', '3'), +('3', '63', '22', '9248', '0', '3'), +('3', '63', '1', '7945', '24246', '3'), +('3', '63', '1', '26775', '17218', '3'), +('3', '63', '1', '63170', '15043', '3'), +('3', '63', '1', '29861', '14875', '3'), +('3', '63', '2', '26025', '23580', '3'), +('3', '63', '2', '2612', '23580', '3'), +('3', '63', '2', '26759', '16725', '3'), +('3', '63', '2', '28986', '15941', '3'), +('3', '63', '3', '26773', '18337', '3'), +('3', '63', '3', '26751', '15697', '3'), +('3', '63', '3', '28942', '15682', '3'), +('3', '63', '3', '31233', '14452', '3'), +('3', '63', '5', '28885', '32307', '3'), +('3', '63', '5', '27266', '26861', '3'), +('3', '63', '5', '8364', '21528', '3'), +('3', '63', '5', '7868', '16205', '3'), +('3', '63', '8', '26765', '35826', '3'), +('3', '63', '8', '26766', '35228', '3'), +('3', '63', '8', '31471', '31266', '3'), +('3', '63', '8', '11621', '23502', '3'), +('3', '63', '6', '28902', '35358', '3'), +('3', '63', '6', '30551', '16202', '3'), +('3', '63', '6', '28919', '16009', '3'), +('3', '63', '6', '26753', '14103', '3'), +('3', '63', '17', '28937', '36638', '3'), +('3', '63', '17', '29457', '31574', '3'), +('3', '63', '17', '27261', '21548', '3'), +('3', '63', '17', '26770', '21167', '3'), +('3', '63', '7', '28926', '17158', '3'), +('3', '63', '7', '7868', '16205', '3'), +('3', '63', '7', '26584', '15471', '3'), +('3', '63', '7', '8288', '14679', '3'), +('3', '63', '9', '31461', '31540', '3'), +('3', '63', '9', '7868', '16205', '3'), +('3', '63', '9', '26584', '15471', '3'), +('3', '63', '9', '31460', '14465', '3'), +('3', '63', '15', '27950', '23115', '3'), +('3', '63', '15', '26749', '18739', '3'), +('3', '63', '15', '63170', '15043', '3'), +('3', '63', '15', '7870', '14840', '3'), +('3', '63', '20', '28890', '32481', '3'), +('3', '63', '20', '31235', '30783', '3'), +('3', '63', '20', '31334', '28639', '3'), +('3', '63', '20', '26551', '28473', '3'), +('3', '63', '12', '25857', '31791', '3'), +('3', '63', '12', '28967', '17425', '3'), +('3', '63', '12', '26774', '15520', '3'), +('3', '63', '12', '31227', '14857', '3'), +('3', '63', '18', '28965', '16783', '3'), +('3', '63', '18', '28932', '14448', '3'), +('3', '63', '18', '8289', '14365', '3'), +('3', '63', '18', '26755', '13446', '3'), +('3', '63', '19', '30569', '35339', '3'), +('3', '63', '19', '28888', '29921', '3'), +('3', '63', '19', '24616', '23667', '3'), +('3', '63', '19', '7871', '14504', '3'), +('3', '63', '13', '28824', '59693', '3'), +('3', '63', '13', '31317', '55441', '3'), +('3', '63', '13', '30530', '55359', '3'), +('3', '63', '13', '31304', '55205', '3'), +('3', '63', '14', '28915', '17807', '3'), +('3', '63', '14', '28970', '17076', '3'), +('3', '63', '14', '26754', '16547', '3'), +('3', '63', '14', '26564', '15031', '3'), +('3', '63', '11', '30539', '39415', '3'), +('3', '63', '11', '28935', '39138', '3'), +('3', '63', '11', '7904', '34013', '3'), +('3', '63', '11', '26563', '28792', '3'), +('3', '64', '22', '12425', '0', '3'), +('3', '64', '22', '21807', '0', '3'), +('3', '64', '22', '7867', '0', '3'), +('3', '64', '22', '9248', '0', '3'), +('3', '64', '1', '7945', '24246', '3'), +('3', '64', '1', '26775', '17220', '3'), +('3', '64', '1', '63170', '14994', '3'), +('3', '64', '1', '29861', '14879', '3'), +('3', '64', '2', '26025', '23581', '3'), +('3', '64', '2', '2612', '23581', '3'), +('3', '64', '2', '26759', '16725', '3'), +('3', '64', '2', '28986', '15945', '3'), +('3', '64', '3', '26773', '18340', '3'), +('3', '64', '3', '26751', '15698', '3'), +('3', '64', '3', '28942', '15684', '3'), +('3', '64', '3', '31233', '14454', '3'), +('3', '64', '5', '28885', '32308', '3'), +('3', '64', '5', '27266', '26863', '3'), +('3', '64', '5', '8364', '21530', '3'), +('3', '64', '5', '7868', '16206', '3'), +('3', '64', '8', '26765', '35827', '3'), +('3', '64', '8', '26766', '35230', '3'), +('3', '64', '8', '31471', '31268', '3'), +('3', '64', '8', '11621', '23502', '3'), +('3', '64', '6', '28902', '35360', '3'), +('3', '64', '6', '30551', '16203', '3'), +('3', '64', '6', '28919', '16011', '3'), +('3', '64', '6', '26753', '14103', '3'), +('3', '64', '17', '28937', '36639', '3'), +('3', '64', '17', '29457', '31574', '3'), +('3', '64', '17', '27261', '21549', '3'), +('3', '64', '17', '26770', '21171', '3'), +('3', '64', '7', '28926', '17159', '3'), +('3', '64', '7', '7868', '16206', '3'), +('3', '64', '7', '26584', '15473', '3'), +('3', '64', '7', '8288', '14679', '3'), +('3', '64', '9', '31461', '31542', '3'), +('3', '64', '9', '7868', '16206', '3'), +('3', '64', '9', '26584', '15473', '3'), +('3', '64', '9', '31460', '14466', '3'), +('3', '64', '15', '27950', '23116', '3'), +('3', '64', '15', '26749', '18741', '3'), +('3', '64', '15', '63170', '14994', '3'), +('3', '64', '15', '7870', '14840', '3'), +('3', '64', '20', '28890', '32481', '3'), +('3', '64', '20', '31235', '30785', '3'), +('3', '64', '20', '31334', '28640', '3'), +('3', '64', '20', '26551', '28475', '3'), +('3', '64', '12', '25857', '31791', '3'), +('3', '64', '12', '28967', '17425', '3'), +('3', '64', '12', '26774', '15521', '3'), +('3', '64', '12', '31227', '14859', '3'), +('3', '64', '18', '28965', '16785', '3'), +('3', '64', '18', '28932', '14451', '3'), +('3', '64', '18', '8289', '14365', '3'), +('3', '64', '18', '26755', '13446', '3'), +('3', '64', '19', '30569', '35340', '3'), +('3', '64', '19', '28888', '29923', '3'), +('3', '64', '19', '24616', '23667', '3'), +('3', '64', '19', '7871', '14507', '3'), +('3', '64', '13', '28824', '59892', '3'), +('3', '64', '13', '31317', '55499', '3'), +('3', '64', '13', '31304', '55462', '3'), +('3', '64', '13', '30530', '55446', '3'), +('3', '64', '14', '28915', '17808', '3'), +('3', '64', '14', '28970', '17077', '3'), +('3', '64', '14', '26754', '16549', '3'), +('3', '64', '14', '26564', '15035', '3'), +('3', '64', '11', '30539', '39518', '3'), +('3', '64', '11', '28935', '39237', '3'), +('3', '64', '11', '7904', '34032', '3'), +('3', '64', '11', '26563', '28793', '3'), +('3', '65', '22', '21807', '0', '7'), +('3', '65', '22', '21805', '0', '7'), +('3', '65', '22', '12425', '0', '7'), +('3', '65', '22', '7867', '0', '7'), +('3', '65', '1', '68949', '57893', '7'), +('3', '65', '1', '7125', '45981', '7'), +('3', '65', '1', '32106', '42957', '7'), +('3', '65', '1', '69166', '41676', '7'), +('3', '65', '2', '28647', '46586', '7'), +('3', '65', '2', '28605', '45755', '7'), +('3', '65', '2', '28648', '45617', '7'), +('3', '65', '2', '69087', '35166', '7'), +('3', '65', '3', '69068', '44795', '7'), +('3', '65', '3', '69157', '39116', '7'), +('3', '65', '3', '69069', '35731', '7'), +('3', '65', '3', '69074', '34774', '7'), +('3', '65', '5', '69097', '46301', '7'), +('3', '65', '5', '68950', '46127', '7'), +('3', '65', '5', '67625', '42249', '7'), +('3', '65', '5', '69135', '39816', '7'), +('3', '65', '8', '69064', '70107', '7'), +('3', '65', '8', '69165', '63766', '7'), +('3', '65', '8', '69072', '58310', '7'), +('3', '65', '8', '69065', '36441', '7'), +('3', '65', '6', '68757', '53726', '7'), +('3', '65', '6', '13674', '49419', '7'), +('3', '65', '6', '69073', '40486', '7'), +('3', '65', '6', '69130', '39942', '7'), +('3', '65', '17', '69150', '44527', '7'), +('3', '65', '17', '47644', '36678', '7'), +('3', '65', '17', '28937', '36641', '7'), +('3', '65', '17', '68748', '35909', '7'), +('3', '65', '7', '16097', '40973', '7'), +('3', '65', '7', '68861', '38481', '7'), +('3', '65', '7', '69168', '38034', '7'), +('3', '65', '7', '69079', '34889', '7'), +('3', '65', '9', '69126', '50595', '7'), +('3', '65', '9', '68766', '44833', '7'), +('3', '65', '9', '16097', '40973', '7'), +('3', '65', '9', '11103', '39837', '7'), +('3', '65', '15', '69160', '49628', '7'), +('3', '65', '15', '9959', '39686', '7'), +('3', '65', '15', '68111', '39404', '7'), +('3', '65', '15', '69131', '38913', '7'), +('3', '65', '20', '16156', '54726', '7'), +('3', '65', '20', '69134', '42916', '7'), +('3', '65', '20', '67625', '42249', '7'), +('3', '65', '20', '16097', '40973', '7'), +('3', '65', '12', '69252', '40113', '7'), +('3', '65', '12', '69083', '34758', '7'), +('3', '65', '12', '25857', '31792', '7'), +('3', '65', '12', '68862', '30246', '7'), +('3', '65', '18', '69146', '42536', '7'), +('3', '65', '18', '68965', '33262', '7'), +('3', '65', '18', '68779', '32368', '7'), +('3', '65', '18', '28650', '30369', '7'), +('3', '65', '19', '19094', '39499', '7'), +('3', '65', '19', '69177', '39380', '7'), +('3', '65', '19', '69075', '35737', '7'), +('3', '65', '19', '30569', '35341', '7'), +('3', '65', '13', '69053', '102744', '7'), +('3', '65', '13', '68835', '97227', '7'), +('3', '65', '13', '69112', '97108', '7'), +('3', '65', '13', '69043', '95725', '7'), +('3', '65', '14', '69155', '49228', '7'), +('3', '65', '14', '69161', '45996', '7'), +('3', '65', '14', '69049', '39748', '7'), +('3', '65', '14', '69048', '36750', '7'), +('3', '65', '11', '69054', '61441', '7'), +('3', '65', '11', '27818', '47872', '7'), +('3', '65', '11', '68662', '46451', '7'), +('3', '65', '11', '27986', '41373', '7'), +('3', '65', '22', '21807', '0', '6'), +('3', '65', '22', '21805', '0', '6'), +('3', '65', '22', '12425', '0', '6'), +('3', '65', '22', '7867', '0', '6'), +('3', '65', '1', '7125', '45981', '6'), +('3', '65', '1', '32106', '42957', '6'), +('3', '65', '1', '7123', '31250', '6'), +('3', '65', '1', '4119', '26493', '6'), +('3', '65', '2', '28647', '46586', '6'), +('3', '65', '2', '28605', '45755', '6'), +('3', '65', '2', '28648', '45617', '6'), +('3', '65', '2', '2612', '23582', '6'), +('3', '65', '3', '26982', '29207', '6'), +('3', '65', '3', '9435', '26549', '6'), +('3', '65', '3', '26983', '24781', '6'), +('3', '65', '3', '29174', '24688', '6'), +('3', '65', '5', '7769', '35882', '6'), +('3', '65', '5', '28885', '32309', '6'), +('3', '65', '5', '8977', '28686', '6'), +('3', '65', '5', '8785', '27980', '6'), +('3', '65', '8', '26765', '35828', '6'), +('3', '65', '8', '26766', '35233', '6'), +('3', '65', '8', '15803', '32856', '6'), +('3', '65', '8', '31471', '31269', '6'), +('3', '65', '6', '13674', '49419', '6'), +('3', '65', '6', '19144', '39239', '6'), +('3', '65', '6', '28902', '35361', '6'), +('3', '65', '6', '71006', '33397', '6'), +('3', '65', '17', '47644', '36678', '6'), +('3', '65', '17', '28937', '36641', '6'), +('3', '65', '17', '29457', '31574', '6'), +('3', '65', '17', '15002', '25357', '6'), +('3', '65', '7', '16097', '40973', '6'), +('3', '65', '7', '11438', '25881', '6'), +('3', '65', '7', '21995', '25513', '6'), +('3', '65', '7', '68089', '22550', '6'), +('3', '65', '9', '16097', '40973', '6'), +('3', '65', '9', '11103', '39837', '6'), +('3', '65', '9', '31461', '31543', '6'), +('3', '65', '9', '32100', '30035', '6'), +('3', '65', '15', '9959', '39686', '6'), +('3', '65', '15', '68111', '39404', '6'), +('3', '65', '15', '26989', '30398', '6'), +('3', '65', '15', '10948', '27089', '6'), +('3', '65', '20', '16156', '54726', '6'), +('3', '65', '20', '16097', '40973', '6'), +('3', '65', '20', '15873', '38167', '6'), +('3', '65', '20', '28890', '32481', '6'), +('3', '65', '12', '25857', '31792', '6'), +('3', '65', '12', '28246', '29198', '6'), +('3', '65', '12', '27000', '27936', '6'), +('3', '65', '12', '27990', '22952', '6'), +('3', '65', '18', '28650', '30369', '6'), +('3', '65', '18', '16757', '24629', '6'), +('3', '65', '18', '28965', '16787', '6'), +('3', '65', '18', '68143', '15770', '6'), +('3', '65', '19', '19094', '39499', '6'), +('3', '65', '19', '30569', '35341', '6'), +('3', '65', '19', '28888', '29924', '6'), +('3', '65', '19', '25995', '28474', '6'), +('3', '65', '13', '26092', '88496', '6'), +('3', '65', '13', '23498', '83540', '6'), +('3', '65', '13', '24879', '76830', '6'), +('3', '65', '13', '29172', '73400', '6'), +('3', '65', '14', '27298', '34264', '6'), +('3', '65', '14', '28656', '25831', '6'), +('3', '65', '14', '28657', '24520', '6'), +('3', '65', '14', '68119', '23311', '6'), +('3', '65', '11', '27818', '47872', '6'), +('3', '65', '11', '27986', '41373', '6'), +('3', '65', '11', '29596', '40320', '6'), +('3', '65', '11', '30539', '39994', '6'), +('3', '65', '22', '21805', '0', '5'), +('3', '65', '22', '61948', '0', '5'), +('3', '65', '22', '21807', '0', '5'), +('3', '65', '22', '12425', '0', '5'), +('3', '65', '1', '7125', '45981', '5'), +('3', '65', '1', '32106', '42957', '5'), +('3', '65', '1', '7123', '31250', '5'), +('3', '65', '1', '4119', '26493', '5'), +('3', '65', '2', '28647', '46586', '5'), +('3', '65', '2', '28605', '45755', '5'), +('3', '65', '2', '28648', '45617', '5'), +('3', '65', '2', '2612', '23582', '5'), +('3', '65', '3', '26982', '29207', '5'), +('3', '65', '3', '9435', '26549', '5'), +('3', '65', '3', '26983', '24781', '5'), +('3', '65', '3', '29174', '24688', '5'), +('3', '65', '5', '7769', '35882', '5'), +('3', '65', '5', '28885', '32309', '5'), +('3', '65', '5', '8977', '28686', '5'), +('3', '65', '5', '8785', '27980', '5'), +('3', '65', '8', '26765', '35828', '5'), +('3', '65', '8', '26766', '35233', '5'), +('3', '65', '8', '15803', '32856', '5'), +('3', '65', '8', '31471', '31269', '5'), +('3', '65', '6', '13674', '49419', '5'), +('3', '65', '6', '19144', '39239', '5'), +('3', '65', '6', '28902', '35361', '5'), +('3', '65', '6', '71006', '33397', '5'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '65', '17', '47644', '36678', '5'), +('3', '65', '17', '28937', '36641', '5'), +('3', '65', '17', '29457', '31574', '5'), +('3', '65', '17', '15002', '25357', '5'), +('3', '65', '7', '16097', '40973', '5'), +('3', '65', '7', '11438', '25881', '5'), +('3', '65', '7', '21995', '25513', '5'), +('3', '65', '7', '27648', '18248', '5'), +('3', '65', '9', '16097', '40973', '5'), +('3', '65', '9', '11103', '39837', '5'), +('3', '65', '9', '31461', '31543', '5'), +('3', '65', '9', '32100', '30035', '5'), +('3', '65', '15', '9959', '39686', '5'), +('3', '65', '15', '26989', '30398', '5'), +('3', '65', '15', '10948', '27089', '5'), +('3', '65', '15', '26993', '26727', '5'), +('3', '65', '20', '16156', '54726', '5'), +('3', '65', '20', '16097', '40973', '5'), +('3', '65', '20', '15873', '38167', '5'), +('3', '65', '20', '28890', '32481', '5'), +('3', '65', '12', '25857', '31792', '5'), +('3', '65', '12', '28246', '29198', '5'), +('3', '65', '12', '27000', '27936', '5'), +('3', '65', '12', '27990', '22952', '5'), +('3', '65', '18', '28650', '30369', '5'), +('3', '65', '18', '16757', '24629', '5'), +('3', '65', '18', '28965', '16787', '5'), +('3', '65', '18', '28932', '14454', '5'), +('3', '65', '19', '19094', '39499', '5'), +('3', '65', '19', '30569', '35341', '5'), +('3', '65', '19', '28888', '29924', '5'), +('3', '65', '19', '25995', '28474', '5'), +('3', '65', '13', '26092', '88496', '5'), +('3', '65', '13', '23498', '83540', '5'), +('3', '65', '13', '24879', '76830', '5'), +('3', '65', '13', '29172', '73400', '5'), +('3', '65', '14', '27298', '34264', '5'), +('3', '65', '14', '28656', '25831', '5'), +('3', '65', '14', '28657', '24520', '5'), +('3', '65', '14', '26788', '22261', '5'), +('3', '65', '11', '27818', '47872', '5'), +('3', '65', '11', '27986', '41373', '5'), +('3', '65', '11', '29596', '40320', '5'), +('3', '65', '11', '30539', '39994', '5'), +('3', '65', '22', '21805', '0', '4'), +('3', '65', '22', '61948', '0', '4'), +('3', '65', '22', '21807', '0', '4'), +('3', '65', '22', '12425', '0', '4'), +('3', '65', '1', '7125', '45981', '4'), +('3', '65', '1', '32106', '42957', '4'), +('3', '65', '1', '7123', '31250', '4'), +('3', '65', '1', '4119', '26493', '4'), +('3', '65', '2', '28647', '46586', '4'), +('3', '65', '2', '28605', '45755', '4'), +('3', '65', '2', '28648', '45617', '4'), +('3', '65', '2', '26025', '23582', '4'), +('3', '65', '3', '26982', '29207', '4'), +('3', '65', '3', '9435', '26549', '4'), +('3', '65', '3', '26983', '24781', '4'), +('3', '65', '3', '29174', '24688', '4'), +('3', '65', '5', '7769', '35882', '4'), +('3', '65', '5', '28885', '32309', '4'), +('3', '65', '5', '8977', '28686', '4'), +('3', '65', '5', '8785', '27980', '4'), +('3', '65', '8', '26765', '35828', '4'), +('3', '65', '8', '26766', '35233', '4'), +('3', '65', '8', '15803', '32856', '4'), +('3', '65', '8', '31471', '31269', '4'), +('3', '65', '6', '13674', '49419', '4'), +('3', '65', '6', '19144', '39239', '4'), +('3', '65', '6', '28902', '35361', '4'), +('3', '65', '6', '71006', '33397', '4'), +('3', '65', '17', '47644', '36678', '4'), +('3', '65', '17', '28937', '36641', '4'), +('3', '65', '17', '29457', '31574', '4'), +('3', '65', '17', '15002', '25357', '4'), +('3', '65', '7', '16097', '40973', '4'), +('3', '65', '7', '11438', '25881', '4'), +('3', '65', '7', '21995', '25513', '4'), +('3', '65', '7', '27648', '18248', '4'), +('3', '65', '9', '16097', '40973', '4'), +('3', '65', '9', '11103', '39837', '4'), +('3', '65', '9', '31461', '31543', '4'), +('3', '65', '9', '32100', '30035', '4'), +('3', '65', '15', '9959', '39686', '4'), +('3', '65', '15', '26989', '30398', '4'), +('3', '65', '15', '10948', '27089', '4'), +('3', '65', '15', '26993', '26727', '4'), +('3', '65', '20', '16156', '54726', '4'), +('3', '65', '20', '16097', '40973', '4'), +('3', '65', '20', '15873', '38167', '4'), +('3', '65', '20', '28890', '32481', '4'), +('3', '65', '12', '25857', '31792', '4'), +('3', '65', '12', '28246', '29198', '4'), +('3', '65', '12', '27000', '27936', '4'), +('3', '65', '12', '27990', '22952', '4'), +('3', '65', '18', '28650', '30369', '4'), +('3', '65', '18', '16757', '24629', '4'), +('3', '65', '18', '28965', '16787', '4'), +('3', '65', '18', '28932', '14454', '4'), +('3', '65', '19', '19094', '39499', '4'), +('3', '65', '19', '30569', '35341', '4'), +('3', '65', '19', '28888', '29924', '4'), +('3', '65', '19', '25995', '28474', '4'), +('3', '65', '13', '26092', '88496', '4'), +('3', '65', '13', '23498', '83540', '4'), +('3', '65', '13', '24879', '76830', '4'), +('3', '65', '13', '29172', '73400', '4'), +('3', '65', '14', '27298', '34264', '4'), +('3', '65', '14', '28656', '25831', '4'), +('3', '65', '14', '28657', '24520', '4'), +('3', '65', '14', '26788', '22261', '4'), +('3', '65', '11', '27818', '47872', '4'), +('3', '65', '11', '27986', '41373', '4'), +('3', '65', '11', '29596', '40320', '4'), +('3', '65', '11', '30539', '39994', '4'), +('3', '66', '22', '21807', '0', '7'), +('3', '66', '22', '21805', '0', '7'), +('3', '66', '22', '12425', '0', '7'), +('3', '66', '22', '7867', '0', '7'), +('3', '66', '1', '68949', '57797', '7'), +('3', '66', '1', '7125', '45983', '7'), +('3', '66', '1', '32106', '42960', '7'), +('3', '66', '1', '69166', '41679', '7'), +('3', '66', '2', '28647', '46589', '7'), +('3', '66', '2', '28605', '45757', '7'), +('3', '66', '2', '28648', '45618', '7'), +('3', '66', '2', '69087', '35171', '7'), +('3', '66', '3', '69068', '44349', '7'), +('3', '66', '3', '69157', '39119', '7'), +('3', '66', '3', '69069', '35734', '7'), +('3', '66', '3', '69074', '34777', '7'), +('3', '66', '5', '69097', '45855', '7'), +('3', '66', '5', '68950', '45679', '7'), +('3', '66', '5', '67625', '42252', '7'), +('3', '66', '5', '69135', '39821', '7'), +('3', '66', '8', '69064', '69710', '7'), +('3', '66', '8', '69165', '63769', '7'), +('3', '66', '8', '69072', '58313', '7'), +('3', '66', '8', '69065', '36444', '7'), +('3', '66', '6', '68757', '53729', '7'), +('3', '66', '6', '13674', '49422', '7'), +('3', '66', '6', '69073', '40308', '7'), +('3', '66', '6', '69130', '39944', '7'), +('3', '66', '17', '69150', '44530', '7'), +('3', '66', '17', '28937', '36642', '7'), +('3', '66', '17', '47644', '36382', '7'), +('3', '66', '17', '68748', '35813', '7'), +('3', '66', '7', '16097', '40976', '7'), +('3', '66', '7', '68861', '38205', '7'), +('3', '66', '7', '69168', '38037', '7'), +('3', '66', '7', '69079', '34891', '7'), +('3', '66', '9', '69126', '50197', '7'), +('3', '66', '9', '68766', '44835', '7'), +('3', '66', '9', '16097', '40976', '7'), +('3', '66', '9', '11103', '39838', '7'), +('3', '66', '15', '69160', '49230', '7'), +('3', '66', '15', '9959', '39688', '7'), +('3', '66', '15', '68111', '39404', '7'), +('3', '66', '15', '69131', '38914', '7'), +('3', '66', '20', '16156', '54729', '7'), +('3', '66', '20', '69134', '42920', '7'), +('3', '66', '20', '67625', '42252', '7'), +('3', '66', '20', '16097', '40976', '7'), +('3', '66', '12', '69252', '40116', '7'), +('3', '66', '12', '69083', '34759', '7'), +('3', '66', '12', '25857', '31792', '7'), +('3', '66', '12', '68862', '30249', '7'), +('3', '66', '18', '69146', '42538', '7'), +('3', '66', '18', '68965', '33265', '7'), +('3', '66', '18', '68779', '32371', '7'), +('3', '66', '18', '28650', '30372', '7'), +('3', '66', '19', '19094', '39500', '7'), +('3', '66', '19', '69177', '39383', '7'), +('3', '66', '19', '69075', '35741', '7'), +('3', '66', '19', '30569', '35342', '7'), +('3', '66', '13', '69053', '102832', '7'), +('3', '66', '13', '68835', '97429', '7'), +('3', '66', '13', '69112', '97196', '7'), +('3', '66', '13', '69043', '95918', '7'), +('3', '66', '14', '69155', '48830', '7'), +('3', '66', '14', '69161', '46000', '7'), +('3', '66', '14', '69049', '39751', '7'), +('3', '66', '14', '69048', '36753', '7'), +('3', '66', '11', '69054', '61613', '7'), +('3', '66', '11', '27818', '47903', '7'), +('3', '66', '11', '68662', '46481', '7'), +('3', '66', '11', '27986', '41403', '7'), +('3', '67', '22', '21807', '0', '7'), +('3', '67', '22', '21805', '0', '7'), +('3', '67', '22', '12425', '0', '7'), +('3', '67', '22', '7867', '0', '7'), +('3', '67', '1', '68949', '57701', '7'), +('3', '67', '1', '7125', '45985', '7'), +('3', '67', '1', '32106', '42963', '7'), +('3', '67', '1', '69166', '41682', '7'), +('3', '67', '2', '28647', '46592', '7'), +('3', '67', '2', '28605', '45759', '7'), +('3', '67', '2', '28648', '45619', '7'), +('3', '67', '2', '69087', '35175', '7'), +('3', '67', '3', '69068', '43903', '7'), +('3', '67', '3', '69157', '39122', '7'), +('3', '67', '3', '69069', '35737', '7'), +('3', '67', '3', '69074', '34780', '7'), +('3', '67', '5', '69097', '45408', '7'), +('3', '67', '5', '68950', '45232', '7'), +('3', '67', '5', '67625', '42255', '7'), +('3', '67', '5', '69135', '39825', '7'), +('3', '67', '8', '69064', '69313', '7'), +('3', '67', '8', '69165', '63773', '7'), +('3', '67', '8', '69072', '58316', '7'), +('3', '67', '8', '69065', '36447', '7'), +('3', '67', '6', '68757', '53732', '7'), +('3', '67', '6', '13674', '49425', '7'), +('3', '67', '6', '69073', '40129', '7'), +('3', '67', '6', '69130', '39946', '7'), +('3', '67', '17', '69150', '44534', '7'), +('3', '67', '17', '28937', '36644', '7'), +('3', '67', '17', '47644', '36087', '7'), +('3', '67', '17', '68748', '35717', '7'), +('3', '67', '7', '16097', '40980', '7'), +('3', '67', '7', '69168', '38040', '7'), +('3', '67', '7', '68861', '37929', '7'), +('3', '67', '7', '69079', '34894', '7'), +('3', '67', '9', '69126', '49800', '7'), +('3', '67', '9', '68766', '44838', '7'), +('3', '67', '9', '16097', '40980', '7'), +('3', '67', '9', '11103', '39840', '7'), +('3', '67', '15', '69160', '48832', '7'), +('3', '67', '15', '9959', '39689', '7'), +('3', '67', '15', '68111', '39405', '7'), +('3', '67', '15', '69131', '38916', '7'), +('3', '67', '20', '16156', '54733', '7'), +('3', '67', '20', '69134', '42924', '7'), +('3', '67', '20', '67625', '42255', '7'), +('3', '67', '20', '16097', '40980', '7'), +('3', '67', '12', '69252', '40119', '7'), +('3', '67', '12', '69083', '34761', '7'), +('3', '67', '12', '25857', '31793', '7'), +('3', '67', '12', '68862', '30251', '7'), +('3', '67', '18', '69146', '42540', '7'), +('3', '67', '18', '68965', '33269', '7'), +('3', '67', '18', '68779', '32375', '7'), +('3', '67', '18', '28650', '30376', '7'), +('3', '67', '19', '19094', '39503', '7'), +('3', '67', '19', '69177', '39387', '7'), +('3', '67', '19', '69075', '35746', '7'), +('3', '67', '19', '30569', '35343', '7'), +('3', '67', '13', '69053', '102921', '7'), +('3', '67', '13', '68835', '97602', '7'), +('3', '67', '13', '69112', '97283', '7'), +('3', '67', '13', '69043', '96112', '7'), +('3', '67', '14', '69155', '48432', '7'), +('3', '67', '14', '69161', '46004', '7'), +('3', '67', '14', '69049', '39754', '7'), +('3', '67', '14', '69048', '36756', '7'), +('3', '67', '11', '69054', '61776', '7'), +('3', '67', '11', '27818', '47926', '7'), +('3', '67', '11', '68662', '46511', '7'), +('3', '67', '11', '27986', '41434', '7'), +('3', '68', '22', '21807', '0', '7'), +('3', '68', '22', '21805', '0', '7'), +('3', '68', '22', '12425', '0', '7'), +('3', '68', '22', '7867', '0', '7'), +('3', '68', '1', '68949', '57605', '7'), +('3', '68', '1', '7125', '45986', '7'), +('3', '68', '1', '32106', '42966', '7'), +('3', '68', '1', '69166', '41685', '7'), +('3', '68', '2', '28647', '46595', '7'), +('3', '68', '2', '28605', '45761', '7'), +('3', '68', '2', '28648', '45620', '7'), +('3', '68', '2', '69087', '35179', '7'), +('3', '68', '3', '69068', '43456', '7'), +('3', '68', '3', '69157', '39125', '7'), +('3', '68', '3', '69069', '35740', '7'), +('3', '68', '3', '69074', '34783', '7'), +('3', '68', '5', '69097', '44962', '7'), +('3', '68', '5', '68950', '44784', '7'), +('3', '68', '5', '67625', '42258', '7'), +('3', '68', '5', '69135', '39829', '7'), +('3', '68', '8', '69064', '68916', '7'), +('3', '68', '8', '69165', '63777', '7'), +('3', '68', '8', '69072', '58319', '7'), +('3', '68', '8', '69065', '36450', '7'), +('3', '68', '6', '68757', '53735', '7'), +('3', '68', '6', '13674', '49427', '7'), +('3', '68', '6', '69073', '39951', '7'), +('3', '68', '6', '69130', '39948', '7'), +('3', '68', '17', '69150', '44538', '7'), +('3', '68', '17', '28937', '36646', '7'), +('3', '68', '17', '47644', '35792', '7'), +('3', '68', '17', '68748', '35620', '7'), +('3', '68', '7', '16097', '40983', '7'), +('3', '68', '7', '69168', '38043', '7'), +('3', '68', '7', '68861', '37653', '7'), +('3', '68', '7', '69079', '34896', '7'), +('3', '68', '9', '69126', '49402', '7'), +('3', '68', '9', '68766', '44841', '7'), +('3', '68', '9', '16097', '40983', '7'), +('3', '68', '9', '11103', '39842', '7'), +('3', '68', '15', '69160', '48434', '7'), +('3', '68', '15', '9959', '39691', '7'), +('3', '68', '15', '68111', '39405', '7'), +('3', '68', '15', '69131', '38917', '7'), +('3', '68', '20', '16156', '54736', '7'), +('3', '68', '20', '69134', '42927', '7'), +('3', '68', '20', '67625', '42258', '7'), +('3', '68', '20', '16097', '40983', '7'), +('3', '68', '12', '69252', '40122', '7'), +('3', '68', '12', '69083', '34762', '7'), +('3', '68', '12', '25857', '31793', '7'), +('3', '68', '12', '68862', '30253', '7'), +('3', '68', '18', '69146', '42541', '7'), +('3', '68', '18', '68965', '33272', '7'), +('3', '68', '18', '68779', '32378', '7'), +('3', '68', '18', '28650', '30379', '7'), +('3', '68', '19', '19094', '39504', '7'), +('3', '68', '19', '69177', '39390', '7'), +('3', '68', '19', '69075', '35750', '7'), +('3', '68', '19', '30569', '35344', '7'), +('3', '68', '13', '69053', '103009', '7'), +('3', '68', '13', '68835', '97804', '7'), +('3', '68', '13', '69112', '97399', '7'), +('3', '68', '13', '69043', '96306', '7'), +('3', '68', '14', '69155', '48034', '7'), +('3', '68', '14', '69161', '46008', '7'), +('3', '68', '14', '69049', '39756', '7'), +('3', '68', '14', '69048', '36759', '7'), +('3', '68', '11', '69054', '61949', '7'), +('3', '68', '11', '27818', '47958', '7'), +('3', '68', '11', '68662', '46541', '7'), +('3', '68', '11', '96532', '42439', '7'), +('3', '69', '22', '21807', '0', '7'), +('3', '69', '22', '21805', '0', '7'), +('3', '69', '22', '12425', '0', '7'), +('3', '69', '22', '7867', '0', '7'), +('3', '69', '1', '68949', '57509', '7'), +('3', '69', '1', '7125', '45988', '7'), +('3', '69', '1', '32106', '42970', '7'), +('3', '69', '1', '69166', '41689', '7'), +('3', '69', '2', '28647', '46598', '7'), +('3', '69', '2', '28605', '45764', '7'), +('3', '69', '2', '28648', '45621', '7'), +('3', '69', '2', '69087', '35184', '7'), +('3', '69', '3', '69068', '43010', '7'), +('3', '69', '3', '69157', '39129', '7'), +('3', '69', '3', '69069', '35744', '7'), +('3', '69', '3', '69074', '34786', '7'), +('3', '69', '5', '69097', '44516', '7'), +('3', '69', '5', '68950', '44337', '7'), +('3', '69', '5', '67625', '42261', '7'), +('3', '69', '5', '69135', '39834', '7'), +('3', '69', '8', '69064', '68519', '7'), +('3', '69', '8', '69165', '63780', '7'), +('3', '69', '8', '69072', '58323', '7'), +('3', '69', '8', '69065', '36453', '7'), +('3', '69', '6', '68757', '53738', '7'), +('3', '69', '6', '13674', '49430', '7'), +('3', '69', '6', '69130', '39951', '7'), +('3', '69', '6', '69073', '39772', '7'), +('3', '69', '17', '69150', '44541', '7'), +('3', '69', '17', '28937', '36647', '7'), +('3', '69', '17', '68748', '35524', '7'), +('3', '69', '17', '47644', '35497', '7'), +('3', '69', '7', '16097', '40987', '7'), +('3', '69', '7', '69168', '38047', '7'), +('3', '69', '7', '68861', '37377', '7'), +('3', '69', '7', '69079', '34899', '7'), +('3', '69', '9', '69126', '49005', '7'), +('3', '69', '9', '68766', '44844', '7'), +('3', '69', '9', '16097', '40987', '7'), +('3', '69', '9', '11103', '39843', '7'), +('3', '69', '15', '69160', '48036', '7'), +('3', '69', '15', '9959', '39693', '7'), +('3', '69', '15', '68111', '39406', '7'), +('3', '69', '15', '69131', '38919', '7'), +('3', '69', '20', '16156', '54739', '7'), +('3', '69', '20', '69134', '42931', '7'), +('3', '69', '20', '67625', '42261', '7'), +('3', '69', '20', '16097', '40987', '7'), +('3', '69', '12', '69252', '40126', '7'), +('3', '69', '12', '69083', '34764', '7'), +('3', '69', '12', '25857', '31794', '7'), +('3', '69', '12', '68862', '30256', '7'), +('3', '69', '18', '69146', '42543', '7'), +('3', '69', '18', '68965', '33276', '7'), +('3', '69', '18', '68779', '32382', '7'), +('3', '69', '18', '28650', '30383', '7'), +('3', '69', '19', '19094', '39506', '7'), +('3', '69', '19', '69177', '39394', '7'), +('3', '69', '19', '69075', '35755', '7'), +('3', '69', '19', '30569', '35346', '7'), +('3', '69', '13', '69053', '103098', '7'), +('3', '69', '13', '68835', '98006', '7'), +('3', '69', '13', '69112', '97487', '7'), +('3', '69', '13', '69043', '96499', '7'), +('3', '69', '14', '69155', '47636', '7'), +('3', '69', '14', '69161', '46012', '7'), +('3', '69', '14', '69049', '39759', '7'), +('3', '69', '14', '69048', '36762', '7'), +('3', '69', '11', '69054', '62121', '7'), +('3', '69', '11', '27818', '47990', '7'), +('3', '69', '11', '68662', '46571', '7'), +('3', '69', '11', '96532', '43121', '7'), +('3', '70', '22', '12425', '0', '11'), +('3', '70', '22', '21807', '0', '11'), +('3', '70', '22', '39342', '0', '11'), +('3', '70', '22', '7867', '0', '11'), +('3', '70', '1', '39276', '72706', '11'), +('3', '70', '1', '83594', '70858', '11'), +('3', '70', '1', '39329', '64289', '11'), +('3', '70', '1', '71624', '60494', '11'), +('3', '70', '2', '70867', '67982', '11'), +('3', '70', '2', '83560', '49882', '11'), +('3', '70', '2', '28647', '46602', '11'), +('3', '70', '2', '28605', '45766', '11'), +('3', '70', '3', '39218', '66427', '11'), +('3', '70', '3', '47245', '61809', '11'), +('3', '70', '3', '39368', '57952', '11'), +('3', '70', '3', '39347', '56032', '11'), +('3', '70', '5', '39366', '58357', '11'), +('3', '70', '5', '39359', '55433', '11'), +('3', '70', '5', '39313', '50551', '11'), +('3', '70', '5', '39262', '50506', '11'), +('3', '70', '8', '39330', '72153', '11'), +('3', '70', '8', '69064', '68122', '11'), +('3', '70', '8', '69165', '63784', '11'), +('3', '70', '8', '39293', '61187', '11'), +('3', '70', '6', '39337', '76418', '11'), +('3', '70', '6', '70717', '62738', '11'), +('3', '70', '6', '71666', '56365', '11'), +('3', '70', '6', '68757', '53741', '11'), +('3', '70', '17', '70872', '107616', '11'), +('3', '70', '17', '83603', '79459', '11'), +('3', '70', '17', '70701', '50651', '11'), +('3', '70', '17', '69150', '44545', '11'), +('3', '70', '7', '39267', '49968', '11'), +('3', '70', '7', '83564', '49957', '11'), +('3', '70', '7', '70868', '44796', '11'), +('3', '70', '7', '16097', '40990', '11'), +('3', '70', '9', '51706', '66147', '11'), +('3', '70', '9', '39335', '55804', '11'), +('3', '70', '9', '83652', '52778', '11'), +('3', '70', '9', '39291', '50713', '11'), +('3', '70', '15', '83629', '61775', '11'), +('3', '70', '15', '39374', '60412', '11'), +('3', '70', '15', '83458', '55358', '11'), +('3', '70', '15', '70621', '54685', '11'), +('3', '70', '20', '47283', '65767', '11'), +('3', '70', '20', '39365', '60748', '11'), +('3', '70', '20', '83533', '60122', '11'), +('3', '70', '20', '16156', '54742', '11'), +('3', '70', '12', '47212', '59767', '11'), +('3', '70', '12', '71075', '53143', '11'), +('3', '70', '12', '83568', '47719', '11'), +('3', '70', '12', '70870', '43838', '11'), +('3', '70', '18', '83607', '68497', '11'), +('3', '70', '18', '70873', '58220', '11'), +('3', '70', '18', '69146', '42545', '11'), +('3', '70', '18', '47200', '42414', '11'), +('3', '70', '19', '39355', '54942', '11'), +('3', '70', '19', '83572', '49651', '11'), +('3', '70', '19', '70871', '44584', '11'), +('3', '70', '19', '83550', '42255', '11'), +('3', '70', '13', '83639', '144704', '11'), +('3', '70', '13', '39254', '138881', '11'), +('3', '70', '13', '39294', '138707', '11'), +('3', '70', '13', '83581', '135240', '11'), +('3', '70', '14', '39341', '61661', '11'), +('3', '70', '14', '39372', '60895', '11'), +('3', '70', '14', '83640', '57345', '11'), +('3', '70', '14', '83656', '56003', '11'), +('3', '70', '11', '39331', '74906', '11'), +('3', '70', '11', '83582', '74737', '11'), +('3', '70', '11', '39311', '73491', '11'), +('3', '70', '11', '47325', '68573', '11'), +('3', '70', '22', '21807', '0', '10'), +('3', '70', '22', '21805', '0', '10'), +('3', '70', '22', '12425', '0', '10'), +('3', '70', '22', '9248', '0', '10'), +('3', '70', '1', '83594', '70858', '10'), +('3', '70', '1', '71624', '60494', '10'), +('3', '70', '1', '68949', '57413', '10'), +('3', '70', '1', '83630', '50188', '10'), +('3', '70', '2', '70867', '67982', '10'), +('3', '70', '2', '83560', '49882', '10'), +('3', '70', '2', '28647', '46602', '10'), +('3', '70', '2', '28605', '45766', '10'), +('3', '70', '3', '47245', '61809', '10'), +('3', '70', '3', '83658', '53350', '10'), +('3', '70', '3', '83636', '50164', '10'), +('3', '70', '3', '89512', '48097', '10'), +('3', '70', '5', '83651', '49500', '10'), +('3', '70', '5', '83599', '48523', '10'), +('3', '70', '5', '47275', '46487', '10'), +('3', '70', '5', '89308', '46314', '10'), +('3', '70', '8', '69064', '68122', '10'), +('3', '70', '8', '69165', '63784', '10'), +('3', '70', '8', '69072', '58326', '10'), +('3', '70', '8', '83659', '52816', '10'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '70', '6', '70717', '62738', '10'), +('3', '70', '6', '71666', '56365', '10'), +('3', '70', '6', '68757', '53741', '10'), +('3', '70', '6', '83660', '52515', '10'), +('3', '70', '17', '70872', '107616', '10'), +('3', '70', '17', '83603', '79459', '10'), +('3', '70', '17', '70701', '50651', '10'), +('3', '70', '17', '69150', '44545', '10'), +('3', '70', '7', '83564', '49957', '10'), +('3', '70', '7', '70868', '44796', '10'), +('3', '70', '7', '16097', '40990', '10'), +('3', '70', '7', '47204', '40982', '10'), +('3', '70', '9', '83652', '52778', '10'), +('3', '70', '9', '69126', '48608', '10'), +('3', '70', '9', '68766', '44846', '10'), +('3', '70', '9', '70869', '43763', '10'), +('3', '70', '15', '83629', '61775', '10'), +('3', '70', '15', '83458', '55358', '10'), +('3', '70', '15', '70621', '54685', '10'), +('3', '70', '15', '71117', '54550', '10'), +('3', '70', '20', '47283', '65767', '10'), +('3', '70', '20', '83533', '60122', '10'), +('3', '70', '20', '16156', '54742', '10'), +('3', '70', '20', '70604', '51396', '10'), +('3', '70', '12', '47212', '59767', '10'), +('3', '70', '12', '71075', '53143', '10'), +('3', '70', '12', '83568', '47719', '10'), +('3', '70', '12', '70870', '43838', '10'), +('3', '70', '18', '83607', '68497', '10'), +('3', '70', '18', '70873', '58220', '10'), +('3', '70', '18', '69146', '42545', '10'), +('3', '70', '18', '47200', '42414', '10'), +('3', '70', '19', '83572', '49651', '10'), +('3', '70', '19', '70871', '44584', '10'), +('3', '70', '19', '83550', '42255', '10'), +('3', '70', '19', '69439', '41524', '10'), +('3', '70', '13', '83639', '144704', '10'), +('3', '70', '13', '83581', '135240', '10'), +('3', '70', '13', '83579', '131906', '10'), +('3', '70', '13', '47320', '128042', '10'), +('3', '70', '14', '83640', '57345', '10'), +('3', '70', '14', '83656', '56003', '10'), +('3', '70', '14', '39315', '52331', '10'), +('3', '70', '14', '47310', '51521', '10'), +('3', '70', '11', '83582', '74737', '10'), +('3', '70', '11', '47325', '68573', '10'), +('3', '70', '11', '83539', '67510', '10'), +('3', '70', '11', '69054', '63286', '10'), +('3', '70', '22', '21805', '0', '9'), +('3', '70', '22', '61948', '0', '9'), +('3', '70', '22', '21807', '0', '9'), +('3', '70', '22', '12425', '0', '9'), +('3', '70', '1', '71624', '60494', '9'), +('3', '70', '1', '68949', '57413', '9'), +('3', '70', '1', '71668', '46527', '9'), +('3', '70', '1', '47287', '45992', '9'), +('3', '70', '2', '70867', '67982', '9'), +('3', '70', '2', '28647', '46602', '9'), +('3', '70', '2', '28605', '45766', '9'), +('3', '70', '2', '28648', '45623', '9'), +('3', '70', '3', '47245', '61809', '9'), +('3', '70', '3', '71667', '46815', '9'), +('3', '70', '3', '47299', '44736', '9'), +('3', '70', '3', '47300', '43352', '9'), +('3', '70', '5', '47275', '46487', '9'), +('3', '70', '5', '47273', '44900', '9'), +('3', '70', '5', '69097', '44069', '9'), +('3', '70', '5', '68950', '43889', '9'), +('3', '70', '8', '69064', '68122', '9'), +('3', '70', '8', '69165', '63784', '9'), +('3', '70', '8', '69072', '58326', '9'), +('3', '70', '8', '70662', '52679', '9'), +('3', '70', '6', '70717', '62738', '9'), +('3', '70', '6', '71666', '56365', '9'), +('3', '70', '6', '68757', '53741', '9'), +('3', '70', '6', '13674', '49433', '9'), +('3', '70', '17', '70872', '107616', '9'), +('3', '70', '17', '70701', '50651', '9'), +('3', '70', '17', '69150', '44545', '9'), +('3', '70', '17', '71638', '40028', '9'), +('3', '70', '7', '70868', '44796', '9'), +('3', '70', '7', '16097', '40990', '9'), +('3', '70', '7', '47204', '40982', '9'), +('3', '70', '7', '69168', '38050', '9'), +('3', '70', '9', '69126', '48608', '9'), +('3', '70', '9', '68766', '44846', '9'), +('3', '70', '9', '70869', '43763', '9'), +('3', '70', '9', '16097', '40990', '9'), +('3', '70', '15', '70621', '54685', '9'), +('3', '70', '15', '71117', '54550', '9'), +('3', '70', '15', '69160', '47638', '9'), +('3', '70', '15', '47291', '44315', '9'), +('3', '70', '20', '47283', '65767', '9'), +('3', '70', '20', '16156', '54742', '9'), +('3', '70', '20', '70604', '51396', '9'), +('3', '70', '20', '47282', '45774', '9'), +('3', '70', '12', '47212', '59767', '9'), +('3', '70', '12', '71075', '53143', '9'), +('3', '70', '12', '70870', '43838', '9'), +('3', '70', '12', '69252', '40129', '9'), +('3', '70', '18', '70873', '58220', '9'), +('3', '70', '18', '69146', '42545', '9'), +('3', '70', '18', '47200', '42414', '9'), +('3', '70', '18', '71646', '39771', '9'), +('3', '70', '19', '70871', '44584', '9'), +('3', '70', '19', '69439', '41524', '9'), +('3', '70', '19', '19094', '39509', '9'), +('3', '70', '19', '69177', '39398', '9'), +('3', '70', '13', '47320', '128042', '9'), +('3', '70', '13', '47324', '127203', '9'), +('3', '70', '13', '71663', '126157', '9'), +('3', '70', '13', '71673', '122500', '9'), +('3', '70', '14', '39315', '52331', '9'), +('3', '70', '14', '47310', '51521', '9'), +('3', '70', '14', '71669', '48317', '9'), +('3', '70', '14', '69155', '47238', '9'), +('3', '70', '11', '47325', '68573', '9'), +('3', '70', '11', '69054', '63286', '9'), +('3', '70', '11', '47265', '61480', '9'), +('3', '70', '11', '70628', '55560', '9'), +('3', '70', '22', '21805', '0', '8'), +('3', '70', '22', '61948', '0', '8'), +('3', '70', '22', '21807', '0', '8'), +('3', '70', '22', '12425', '0', '8'), +('3', '70', '1', '68949', '57413', '8'), +('3', '70', '1', '47287', '45992', '8'), +('3', '70', '1', '7125', '45990', '8'), +('3', '70', '1', '47289', '43858', '8'), +('3', '70', '2', '70867', '67982', '8'), +('3', '70', '2', '28647', '46602', '8'), +('3', '70', '2', '28605', '45766', '8'), +('3', '70', '2', '28648', '45623', '8'), +('3', '70', '3', '47245', '61809', '8'), +('3', '70', '3', '47299', '44736', '8'), +('3', '70', '3', '47300', '43352', '8'), +('3', '70', '3', '69068', '42563', '8'), +('3', '70', '5', '47275', '46487', '8'), +('3', '70', '5', '47273', '44900', '8'), +('3', '70', '5', '69097', '44069', '8'), +('3', '70', '5', '68950', '43889', '8'), +('3', '70', '8', '69064', '68122', '8'), +('3', '70', '8', '69165', '63784', '8'), +('3', '70', '8', '69072', '58326', '8'), +('3', '70', '8', '70662', '52679', '8'), +('3', '70', '6', '70717', '62738', '8'), +('3', '70', '6', '68757', '53741', '8'), +('3', '70', '6', '13674', '49433', '8'), +('3', '70', '6', '47278', '45553', '8'), +('3', '70', '17', '70872', '107616', '8'), +('3', '70', '17', '70701', '50651', '8'), +('3', '70', '17', '69150', '44545', '8'), +('3', '70', '17', '28937', '36649', '8'), +('3', '70', '7', '70868', '44796', '8'), +('3', '70', '7', '16097', '40990', '8'), +('3', '70', '7', '47204', '40982', '8'), +('3', '70', '7', '69168', '38050', '8'), +('3', '70', '9', '69126', '48608', '8'), +('3', '70', '9', '68766', '44846', '8'), +('3', '70', '9', '70869', '43763', '8'), +('3', '70', '9', '16097', '40990', '8'), +('3', '70', '15', '70621', '54685', '8'), +('3', '70', '15', '71117', '54550', '8'), +('3', '70', '15', '69160', '47638', '8'), +('3', '70', '15', '47291', '44315', '8'), +('3', '70', '20', '47283', '65767', '8'), +('3', '70', '20', '16156', '54742', '8'), +('3', '70', '20', '70604', '51396', '8'), +('3', '70', '20', '47282', '45774', '8'), +('3', '70', '12', '47212', '59767', '8'), +('3', '70', '12', '71075', '53143', '8'), +('3', '70', '12', '70870', '43838', '8'), +('3', '70', '12', '69252', '40129', '8'), +('3', '70', '18', '70873', '58220', '8'), +('3', '70', '18', '69146', '42545', '8'), +('3', '70', '18', '47200', '42414', '8'), +('3', '70', '18', '71094', '35788', '8'), +('3', '70', '19', '70871', '44584', '8'), +('3', '70', '19', '69439', '41524', '8'), +('3', '70', '19', '19094', '39509', '8'), +('3', '70', '19', '69177', '39398', '8'), +('3', '70', '13', '47320', '127617', '8'), +('3', '70', '13', '47324', '126778', '8'), +('3', '70', '13', '47315', '122480', '8'), +('3', '70', '13', '48147', '121322', '8'), +('3', '70', '14', '39315', '52331', '8'), +('3', '70', '14', '47310', '51521', '8'), +('3', '70', '14', '69155', '47238', '8'), +('3', '70', '14', '47252', '46877', '8'), +('3', '70', '11', '47325', '68573', '8'), +('3', '70', '11', '69054', '63002', '8'), +('3', '70', '11', '47265', '61480', '8'), +('3', '70', '11', '70628', '55560', '8'), +('3', '71', '22', '12425', '0', '11'), +('3', '71', '22', '21807', '0', '11'), +('3', '71', '22', '39342', '0', '11'), +('3', '71', '22', '7867', '0', '11'), +('3', '71', '1', '39276', '72709', '11'), +('3', '71', '1', '83594', '70862', '11'), +('3', '71', '1', '39329', '63690', '11'), +('3', '71', '1', '71624', '60497', '11'), +('3', '71', '2', '70867', '67985', '11'), +('3', '71', '2', '83560', '49888', '11'), +('3', '71', '2', '28647', '46605', '11'), +('3', '71', '2', '28605', '45768', '11'), +('3', '71', '3', '39218', '66430', '11'), +('3', '71', '3', '47245', '61811', '11'), +('3', '71', '3', '39368', '57956', '11'), +('3', '71', '3', '39347', '56037', '11'), +('3', '71', '5', '39366', '58362', '11'), +('3', '71', '5', '39359', '55436', '11'), +('3', '71', '5', '39313', '50556', '11'), +('3', '71', '5', '39262', '50509', '11'), +('3', '71', '8', '39330', '72155', '11'), +('3', '71', '8', '69064', '67725', '11'), +('3', '71', '8', '69165', '63788', '11'), +('3', '71', '8', '39293', '60588', '11'), +('3', '71', '6', '39337', '76421', '11'), +('3', '71', '6', '70717', '62742', '11'), +('3', '71', '6', '71666', '55869', '11'), +('3', '71', '6', '68757', '53744', '11'), +('3', '71', '17', '70872', '104871', '11'), +('3', '71', '17', '83603', '79464', '11'), +('3', '71', '17', '70701', '50256', '11'), +('3', '71', '17', '69150', '44548', '11'), +('3', '71', '7', '39267', '49971', '11'), +('3', '71', '7', '83564', '49963', '11'), +('3', '71', '7', '70868', '44802', '11'), +('3', '71', '7', '16097', '40994', '11'), +('3', '71', '9', '51706', '65551', '11'), +('3', '71', '9', '39335', '55809', '11'), +('3', '71', '9', '83652', '52781', '11'), +('3', '71', '9', '39291', '50716', '11'), +('3', '71', '15', '83629', '61179', '11'), +('3', '71', '15', '39374', '60417', '11'), +('3', '71', '15', '83458', '55362', '11'), +('3', '71', '15', '70621', '54689', '11'), +('3', '71', '20', '47283', '65768', '11'), +('3', '71', '20', '39365', '60753', '11'), +('3', '71', '20', '83533', '60125', '11'), +('3', '71', '20', '16156', '54745', '11'), +('3', '71', '12', '47212', '59771', '11'), +('3', '71', '12', '71075', '53146', '11'), +('3', '71', '12', '83568', '47725', '11'), +('3', '71', '12', '70870', '43843', '11'), +('3', '71', '18', '83607', '67902', '11'), +('3', '71', '18', '70873', '57775', '11'), +('3', '71', '18', '69146', '42547', '11'), +('3', '71', '18', '47200', '42418', '11'), +('3', '71', '19', '39355', '54947', '11'), +('3', '71', '19', '83572', '49657', '11'), +('3', '71', '19', '70871', '44584', '11'), +('3', '71', '19', '83550', '42259', '11'), +('3', '71', '13', '83639', '145388', '11'), +('3', '71', '13', '39254', '139209', '11'), +('3', '71', '13', '39294', '139035', '11'), +('3', '71', '13', '83581', '135357', '11'), +('3', '71', '14', '39341', '61663', '11'), +('3', '71', '14', '39372', '60901', '11'), +('3', '71', '14', '83640', '57350', '11'), +('3', '71', '14', '83656', '56008', '11'), +('3', '71', '11', '39331', '74934', '11'), +('3', '71', '11', '83582', '74777', '11'), +('3', '71', '11', '39311', '73496', '11'), +('3', '71', '11', '47325', '68604', '11'), +('3', '72', '22', '12425', '0', '11'), +('3', '72', '22', '21807', '0', '11'), +('3', '72', '22', '39342', '0', '11'), +('3', '72', '22', '7867', '0', '11'), +('3', '72', '1', '39276', '72713', '11'), +('3', '72', '1', '83594', '70867', '11'), +('3', '72', '1', '39329', '63092', '11'), +('3', '72', '1', '71624', '60500', '11'), +('3', '72', '2', '70867', '67988', '11'), +('3', '72', '2', '83560', '49894', '11'), +('3', '72', '2', '28647', '46608', '11'), +('3', '72', '2', '28605', '45770', '11'), +('3', '72', '3', '39218', '66434', '11'), +('3', '72', '3', '47245', '61813', '11'), +('3', '72', '3', '39368', '57960', '11'), +('3', '72', '3', '39347', '56042', '11'), +('3', '72', '5', '39366', '58367', '11'), +('3', '72', '5', '39359', '55440', '11'), +('3', '72', '5', '39313', '50561', '11'), +('3', '72', '5', '39262', '50513', '11'), +('3', '72', '8', '39330', '72157', '11'), +('3', '72', '8', '69064', '67329', '11'), +('3', '72', '8', '69165', '63791', '11'), +('3', '72', '8', '39293', '59989', '11'), +('3', '72', '6', '39337', '76425', '11'), +('3', '72', '6', '70717', '62746', '11'), +('3', '72', '6', '71666', '55373', '11'), +('3', '72', '6', '68757', '53747', '11'), +('3', '72', '17', '70872', '102126', '11'), +('3', '72', '17', '83603', '79469', '11'), +('3', '72', '17', '70701', '49861', '11'), +('3', '72', '17', '69150', '44552', '11'), +('3', '72', '7', '39267', '49975', '11'), +('3', '72', '7', '83564', '49969', '11'), +('3', '72', '7', '70868', '44807', '11'), +('3', '72', '7', '16097', '40997', '11'), +('3', '72', '9', '51706', '64956', '11'), +('3', '72', '9', '39335', '55814', '11'), +('3', '72', '9', '83652', '52785', '11'), +('3', '72', '9', '39291', '50720', '11'), +('3', '72', '15', '83629', '60583', '11'), +('3', '72', '15', '39374', '60423', '11'), +('3', '72', '15', '83458', '55365', '11'), +('3', '72', '15', '70621', '54693', '11'), +('3', '72', '20', '47283', '65770', '11'), +('3', '72', '20', '39365', '60758', '11'), +('3', '72', '20', '83533', '60128', '11'), +('3', '72', '20', '16156', '54749', '11'), +('3', '72', '12', '47212', '59775', '11'), +('3', '72', '12', '71075', '53149', '11'), +('3', '72', '12', '83568', '47731', '11'), +('3', '72', '12', '70870', '43848', '11'), +('3', '72', '18', '83607', '67307', '11'), +('3', '72', '18', '70873', '57329', '11'), +('3', '72', '18', '69146', '42549', '11'), +('3', '72', '18', '47200', '42422', '11'), +('3', '72', '19', '39355', '54952', '11'), +('3', '72', '19', '83572', '49663', '11'), +('3', '72', '19', '70871', '44584', '11'), +('3', '72', '19', '83550', '42263', '11'), +('3', '72', '13', '83639', '146073', '11'), +('3', '72', '13', '39254', '139536', '11'), +('3', '72', '13', '39294', '139363', '11'), +('3', '72', '13', '83581', '135474', '11'), +('3', '72', '14', '39341', '61666', '11'), +('3', '72', '14', '39372', '60907', '11'), +('3', '72', '14', '83640', '57354', '11'), +('3', '72', '14', '83656', '56014', '11'), +('3', '72', '11', '39331', '74972', '11'), +('3', '72', '11', '83582', '74818', '11'), +('3', '72', '11', '39311', '73501', '11'), +('3', '72', '11', '47325', '68645', '11'), +('3', '73', '22', '12425', '0', '11'), +('3', '73', '22', '21807', '0', '11'), +('3', '73', '22', '39342', '0', '11'), +('3', '73', '22', '7867', '0', '11'), +('3', '73', '1', '39276', '72716', '11'), +('3', '73', '1', '83594', '70871', '11'), +('3', '73', '1', '39329', '62493', '11'), +('3', '73', '1', '71624', '60503', '11'), +('3', '73', '2', '70867', '67991', '11'), +('3', '73', '2', '83560', '49901', '11'), +('3', '73', '2', '28647', '46611', '11'), +('3', '73', '2', '28605', '45772', '11'), +('3', '73', '3', '39218', '66437', '11'), +('3', '73', '3', '47245', '61815', '11'), +('3', '73', '3', '39368', '57964', '11'), +('3', '73', '3', '39347', '56047', '11'), +('3', '73', '5', '39366', '58372', '11'), +('3', '73', '5', '39359', '55444', '11'), +('3', '73', '5', '39313', '50565', '11'), +('3', '73', '5', '39262', '50516', '11'), +('3', '73', '8', '39330', '72158', '11'), +('3', '73', '8', '69064', '66932', '11'), +('3', '73', '8', '69165', '63795', '11'), +('3', '73', '8', '39293', '59391', '11'), +('3', '73', '6', '39337', '76429', '11'), +('3', '73', '6', '70717', '62750', '11'), +('3', '73', '6', '71666', '54878', '11'), +('3', '73', '6', '68757', '53750', '11'), +('3', '73', '17', '70872', '99380', '11'), +('3', '73', '17', '83603', '79474', '11'), +('3', '73', '17', '70701', '49467', '11'), +('3', '73', '17', '69150', '44556', '11'), +('3', '73', '7', '39267', '49979', '11'), +('3', '73', '7', '83564', '49975', '11'), +('3', '73', '7', '70868', '44813', '11'), +('3', '73', '7', '16097', '41001', '11'), +('3', '73', '9', '51706', '64361', '11'), +('3', '73', '9', '39335', '55819', '11'), +('3', '73', '9', '83652', '52789', '11'), +('3', '73', '9', '39291', '50724', '11'), +('3', '73', '15', '39374', '60428', '11'), +('3', '73', '15', '83629', '59987', '11'), +('3', '73', '15', '83458', '55369', '11'), +('3', '73', '15', '70621', '54696', '11'), +('3', '73', '20', '47283', '65772', '11'), +('3', '73', '20', '39365', '60763', '11'), +('3', '73', '20', '83533', '60130', '11'), +('3', '73', '20', '16156', '54752', '11'), +('3', '73', '12', '47212', '59778', '11'), +('3', '73', '12', '71075', '53153', '11'), +('3', '73', '12', '83568', '47738', '11'), +('3', '73', '12', '70870', '43853', '11'), +('3', '73', '18', '83607', '66713', '11'), +('3', '73', '18', '70873', '56884', '11'), +('3', '73', '18', '69146', '42550', '11'), +('3', '73', '18', '47200', '42425', '11'), +('3', '73', '19', '39355', '54957', '11'), +('3', '73', '19', '83572', '49669', '11'), +('3', '73', '19', '70871', '44584', '11'), +('3', '73', '19', '83550', '42267', '11'), +('3', '73', '13', '83639', '146758', '11'), +('3', '73', '13', '39254', '139864', '11'), +('3', '73', '13', '39294', '139691', '11'), +('3', '73', '13', '83581', '135591', '11'), +('3', '73', '14', '39341', '61669', '11'), +('3', '73', '14', '39372', '60913', '11'), +('3', '73', '14', '83640', '57359', '11'), +('3', '73', '14', '83656', '56019', '11'), +('3', '73', '11', '39331', '75000', '11'), +('3', '73', '11', '83582', '74858', '11'), +('3', '73', '11', '39311', '73505', '11'), +('3', '73', '11', '47325', '68676', '11'), +('3', '74', '22', '12425', '0', '11'), +('3', '74', '22', '21807', '0', '11'), +('3', '74', '22', '39342', '0', '11'), +('3', '74', '22', '7867', '0', '11'), +('3', '74', '1', '39276', '72720', '11'), +('3', '74', '1', '83594', '70875', '11'), +('3', '74', '1', '39329', '61895', '11'), +('3', '74', '1', '71624', '60507', '11'), +('3', '74', '2', '70867', '67995', '11'), +('3', '74', '2', '83560', '49907', '11'), +('3', '74', '2', '28647', '46615', '11'), +('3', '74', '2', '28605', '45774', '11'), +('3', '74', '3', '39218', '66440', '11'), +('3', '74', '3', '47245', '61817', '11'), +('3', '74', '3', '39368', '57969', '11'), +('3', '74', '3', '39347', '56052', '11'), +('3', '74', '5', '39366', '58376', '11'), +('3', '74', '5', '39359', '55448', '11'), +('3', '74', '5', '39313', '50570', '11'), +('3', '74', '5', '39262', '50519', '11'), +('3', '74', '8', '39330', '72160', '11'), +('3', '74', '8', '69064', '66535', '11'), +('3', '74', '8', '69165', '63799', '11'), +('3', '74', '8', '39293', '58792', '11'), +('3', '74', '6', '39337', '76433', '11'), +('3', '74', '6', '70717', '62754', '11'), +('3', '74', '6', '71666', '54382', '11'), +('3', '74', '6', '68757', '53753', '11'), +('3', '74', '17', '70872', '96635', '11'), +('3', '74', '17', '83603', '79480', '11'), +('3', '74', '17', '70701', '49072', '11'), +('3', '74', '17', '69150', '44560', '11'), +('3', '74', '7', '39267', '49982', '11'), +('3', '74', '7', '83564', '49981', '11'), +('3', '74', '7', '70868', '44818', '11'), +('3', '74', '7', '16097', '41005', '11'), +('3', '74', '9', '51706', '63765', '11'), +('3', '74', '9', '39335', '55824', '11'), +('3', '74', '9', '83652', '52793', '11'), +('3', '74', '9', '39291', '50727', '11'), +('3', '74', '15', '39374', '60433', '11'), +('3', '74', '15', '83629', '59391', '11'), +('3', '74', '15', '83458', '55373', '11'), +('3', '74', '15', '70621', '54700', '11'), +('3', '74', '20', '47283', '65774', '11'), +('3', '74', '20', '39365', '60768', '11'), +('3', '74', '20', '83533', '60133', '11'), +('3', '74', '20', '16156', '54755', '11'), +('3', '74', '12', '47212', '59782', '11'), +('3', '74', '12', '71075', '53156', '11'), +('3', '74', '12', '83568', '47744', '11'), +('3', '74', '12', '70870', '43858', '11'), +('3', '74', '18', '83607', '66118', '11'), +('3', '74', '18', '70873', '56439', '11'), +('3', '74', '18', '69146', '42552', '11'), +('3', '74', '18', '47200', '42429', '11'), +('3', '74', '19', '39355', '54962', '11'), +('3', '74', '19', '83572', '49676', '11'), +('3', '74', '19', '70871', '44584', '11'), +('3', '74', '19', '83550', '42271', '11'), +('3', '74', '13', '83639', '147442', '11'), +('3', '74', '13', '39254', '140220', '11'), +('3', '74', '13', '39294', '140019', '11'), +('3', '74', '13', '83581', '135709', '11'), +('3', '74', '14', '39341', '61671', '11'), +('3', '74', '14', '39372', '60919', '11'), +('3', '74', '14', '83640', '57363', '11'), +('3', '74', '14', '83656', '56025', '11'), +('3', '74', '11', '39331', '75029', '11'), +('3', '74', '11', '83582', '74899', '11'), +('3', '74', '11', '39311', '73510', '11'), +('3', '74', '11', '47325', '68717', '11'), +('3', '75', '22', '39342', '0', '13'), +('3', '75', '22', '12425', '0', '13'), +('3', '75', '22', '7867', '0', '13'), +('3', '75', '22', '23597', '0', '13'), +('3', '75', '1', '80676', '81201', '13'), +('3', '75', '1', '80659', '80696', '13'), +('3', '75', '1', '80660', '77865', '13'), +('3', '75', '1', '80648', '76266', '13'), +('3', '75', '2', '70867', '67998', '13'), +('3', '75', '2', '83560', '49913', '13'), +('3', '75', '2', '28647', '46618', '13'), +('3', '75', '2', '28605', '45777', '13'), +('3', '75', '3', '80637', '76396', '13'), +('3', '75', '3', '39218', '66443', '13'), +('3', '75', '3', '46873', '65378', '13'), +('3', '75', '3', '46923', '65154', '13'), +('3', '75', '5', '46867', '89793', '13'), +('3', '75', '5', '80670', '82056', '13'), +('3', '75', '5', '80616', '73119', '13'), +('3', '75', '5', '46934', '70805', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '75', '8', '46885', '95879', '13'), +('3', '75', '8', '80677', '83632', '13'), +('3', '75', '8', '80649', '74397', '13'), +('3', '75', '8', '39330', '72162', '13'), +('3', '75', '6', '80638', '99085', '13'), +('3', '75', '6', '39337', '76437', '13'), +('3', '75', '6', '46884', '71772', '13'), +('3', '75', '6', '46933', '71724', '13'), +('3', '75', '17', '70872', '93890', '13'), +('3', '75', '17', '83603', '79485', '13'), +('3', '75', '17', '46809', '56380', '13'), +('3', '75', '17', '70701', '48678', '13'), +('3', '75', '7', '53376', '66045', '13'), +('3', '75', '7', '83564', '49988', '13'), +('3', '75', '7', '39267', '49986', '13'), +('3', '75', '7', '70868', '44824', '13'), +('3', '75', '9', '46887', '72236', '13'), +('3', '75', '9', '51706', '63170', '13'), +('3', '75', '9', '39335', '55829', '13'), +('3', '75', '9', '83652', '52797', '13'), +('3', '75', '15', '79909', '85786', '13'), +('3', '75', '15', '80667', '83386', '13'), +('3', '75', '15', '80671', '82122', '13'), +('3', '75', '15', '80686', '81926', '13'), +('3', '75', '20', '80678', '106261', '13'), +('3', '75', '20', '46935', '73871', '13'), +('3', '75', '20', '80620', '71206', '13'), +('3', '75', '20', '46919', '65893', '13'), +('3', '75', '12', '47212', '59786', '13'), +('3', '75', '12', '71075', '53159', '13'), +('3', '75', '12', '83568', '47750', '13'), +('3', '75', '12', '70870', '43863', '13'), +('3', '75', '18', '83607', '65524', '13'), +('3', '75', '18', '70873', '55994', '13'), +('3', '75', '18', '46826', '54196', '13'), +('3', '75', '18', '69146', '42554', '13'), +('3', '75', '19', '80516', '77000', '13'), +('3', '75', '19', '39355', '54967', '13'), +('3', '75', '19', '83572', '49682', '13'), +('3', '75', '19', '70871', '44584', '13'), +('3', '75', '13', '46929', '185196', '13'), +('3', '75', '13', '80683', '180735', '13'), +('3', '75', '13', '80642', '178793', '13'), +('3', '75', '13', '80685', '177905', '13'), +('3', '75', '14', '80665', '78555', '13'), +('3', '75', '14', '80682', '78500', '13'), +('3', '75', '14', '80625', '71815', '13'), +('3', '75', '14', '46875', '67536', '13'), +('3', '75', '11', '80655', '108261', '13'), +('3', '75', '11', '46930', '100850', '13'), +('3', '75', '11', '46849', '84617', '13'), +('3', '75', '11', '80668', '81576', '13'), +('3', '75', '22', '39342', '0', '12'), +('3', '75', '22', '12425', '0', '12'), +('3', '75', '22', '7867', '0', '12'), +('3', '75', '22', '23597', '0', '12'), +('3', '75', '1', '39276', '72723', '12'), +('3', '75', '1', '46931', '71589', '12'), +('3', '75', '1', '83594', '70879', '12'), +('3', '75', '1', '46892', '67155', '12'), +('3', '75', '2', '70867', '67998', '12'), +('3', '75', '2', '83560', '49913', '12'), +('3', '75', '2', '28647', '46618', '12'), +('3', '75', '2', '28605', '45777', '12'), +('3', '75', '3', '39218', '66443', '12'), +('3', '75', '3', '46873', '65378', '12'), +('3', '75', '3', '46923', '65154', '12'), +('3', '75', '3', '47245', '61819', '12'), +('3', '75', '5', '46867', '89793', '12'), +('3', '75', '5', '46934', '70805', '12'), +('3', '75', '5', '46917', '64380', '12'), +('3', '75', '5', '39366', '58381', '12'), +('3', '75', '8', '46885', '95879', '12'), +('3', '75', '8', '39330', '72162', '12'), +('3', '75', '8', '69064', '66138', '12'), +('3', '75', '8', '69165', '63803', '12'), +('3', '75', '6', '39337', '76437', '12'), +('3', '75', '6', '46884', '71772', '12'), +('3', '75', '6', '46933', '71724', '12'), +('3', '75', '6', '46883', '70857', '12'), +('3', '75', '17', '70872', '93890', '12'), +('3', '75', '17', '83603', '79485', '12'), +('3', '75', '17', '46809', '56380', '12'), +('3', '75', '17', '70701', '48678', '12'), +('3', '75', '7', '53376', '66045', '12'), +('3', '75', '7', '83564', '49988', '12'), +('3', '75', '7', '39267', '49986', '12'), +('3', '75', '7', '70868', '44824', '12'), +('3', '75', '9', '46887', '72236', '12'), +('3', '75', '9', '51706', '63170', '12'), +('3', '75', '9', '39335', '55829', '12'), +('3', '75', '9', '83652', '52797', '12'), +('3', '75', '15', '46881', '72852', '12'), +('3', '75', '15', '46863', '67952', '12'), +('3', '75', '15', '46915', '64722', '12'), +('3', '75', '15', '46893', '62784', '12'), +('3', '75', '20', '46935', '73871', '12'), +('3', '75', '20', '46919', '65893', '12'), +('3', '75', '20', '47283', '65775', '12'), +('3', '75', '20', '46869', '64635', '12'), +('3', '75', '12', '47212', '59786', '12'), +('3', '75', '12', '71075', '53159', '12'), +('3', '75', '12', '83568', '47750', '12'), +('3', '75', '12', '70870', '43863', '12'), +('3', '75', '18', '83607', '65524', '12'), +('3', '75', '18', '70873', '55994', '12'), +('3', '75', '18', '46826', '54196', '12'), +('3', '75', '18', '69146', '42554', '12'), +('3', '75', '19', '39355', '54967', '12'), +('3', '75', '19', '83572', '49682', '12'), +('3', '75', '19', '70871', '44584', '12'), +('3', '75', '19', '83550', '42275', '12'), +('3', '75', '13', '46929', '185196', '12'), +('3', '75', '13', '46879', '165288', '12'), +('3', '75', '13', '46855', '154260', '12'), +('3', '75', '13', '46890', '153098', '12'), +('3', '75', '14', '46875', '67536', '12'), +('3', '75', '14', '46925', '66721', '12'), +('3', '75', '14', '39341', '61674', '12'), +('3', '75', '14', '46853', '61613', '12'), +('3', '75', '11', '46930', '100850', '12'), +('3', '75', '11', '46849', '84617', '12'), +('3', '75', '11', '39331', '75067', '12'), +('3', '75', '11', '83582', '74939', '12'), +('3', '76', '22', '39342', '0', '13'), +('3', '76', '22', '12425', '0', '13'), +('3', '76', '22', '7867', '0', '13'), +('3', '76', '22', '23597', '0', '13'), +('3', '76', '1', '80676', '81203', '13'), +('3', '76', '1', '80659', '80702', '13'), +('3', '76', '1', '80660', '77871', '13'), +('3', '76', '1', '80648', '76272', '13'), +('3', '76', '2', '70867', '68001', '13'), +('3', '76', '2', '83560', '49919', '13'), +('3', '76', '2', '28647', '46621', '13'), +('3', '76', '2', '28605', '45779', '13'), +('3', '76', '3', '80637', '76402', '13'), +('3', '76', '3', '39218', '66446', '13'), +('3', '76', '3', '46873', '65383', '13'), +('3', '76', '3', '46923', '65159', '13'), +('3', '76', '5', '46867', '89797', '13'), +('3', '76', '5', '80670', '82062', '13'), +('3', '76', '5', '80616', '73120', '13'), +('3', '76', '5', '46934', '70812', '13'), +('3', '76', '8', '46885', '95885', '13'), +('3', '76', '8', '80677', '83638', '13'), +('3', '76', '8', '80649', '74403', '13'), +('3', '76', '8', '39330', '72164', '13'), +('3', '76', '6', '80638', '99091', '13'), +('3', '76', '6', '39337', '76441', '13'), +('3', '76', '6', '46884', '71778', '13'), +('3', '76', '6', '46933', '71729', '13'), +('3', '76', '17', '70872', '91145', '13'), +('3', '76', '17', '83603', '79490', '13'), +('3', '76', '17', '46809', '56383', '13'), +('3', '76', '17', '70701', '48283', '13'), +('3', '76', '7', '53376', '66050', '13'), +('3', '76', '7', '83564', '49994', '13'), +('3', '76', '7', '39267', '49989', '13'), +('3', '76', '7', '70868', '44830', '13'), +('3', '76', '9', '46887', '72241', '13'), +('3', '76', '9', '51706', '62574', '13'), +('3', '76', '9', '39335', '55834', '13'), +('3', '76', '9', '83652', '52801', '13'), +('3', '76', '15', '79909', '85791', '13'), +('3', '76', '15', '80667', '83392', '13'), +('3', '76', '15', '80671', '82128', '13'), +('3', '76', '15', '80686', '81932', '13'), +('3', '76', '20', '80678', '106267', '13'), +('3', '76', '20', '46935', '73877', '13'), +('3', '76', '20', '80620', '71209', '13'), +('3', '76', '20', '46919', '65898', '13'), +('3', '76', '12', '47212', '59789', '13'), +('3', '76', '12', '71075', '53162', '13'), +('3', '76', '12', '83568', '47756', '13'), +('3', '76', '12', '70870', '43868', '13'), +('3', '76', '18', '83607', '64929', '13'), +('3', '76', '18', '70873', '55549', '13'), +('3', '76', '18', '46826', '54199', '13'), +('3', '76', '18', '69146', '42556', '13'), +('3', '76', '19', '80516', '77006', '13'), +('3', '76', '19', '39355', '54972', '13'), +('3', '76', '19', '83572', '49688', '13'), +('3', '76', '19', '70871', '44584', '13'), +('3', '76', '13', '46929', '185831', '13'), +('3', '76', '13', '80683', '180908', '13'), +('3', '76', '13', '80642', '178939', '13'), +('3', '76', '13', '80685', '178078', '13'), +('3', '76', '14', '80665', '78559', '13'), +('3', '76', '14', '80682', '78504', '13'), +('3', '76', '14', '80625', '71819', '13'), +('3', '76', '14', '46875', '67541', '13'), +('3', '76', '11', '80655', '108313', '13'), +('3', '76', '11', '46930', '100901', '13'), +('3', '76', '11', '46849', '84621', '13'), +('3', '76', '11', '80668', '81582', '13'), +('3', '77', '22', '39342', '0', '13'), +('3', '77', '22', '12425', '0', '13'), +('3', '77', '22', '7867', '0', '13'), +('3', '77', '22', '23597', '0', '13'), +('3', '77', '1', '80676', '81206', '13'), +('3', '77', '1', '80659', '80708', '13'), +('3', '77', '1', '80660', '77876', '13'), +('3', '77', '1', '80648', '76277', '13'), +('3', '77', '2', '70867', '68005', '13'), +('3', '77', '2', '83560', '49925', '13'), +('3', '77', '2', '28647', '46624', '13'), +('3', '77', '2', '28605', '45781', '13'), +('3', '77', '3', '80637', '76407', '13'), +('3', '77', '3', '39218', '66449', '13'), +('3', '77', '3', '46873', '65388', '13'), +('3', '77', '3', '46923', '65164', '13'), +('3', '77', '5', '46867', '89802', '13'), +('3', '77', '5', '80670', '82068', '13'), +('3', '77', '5', '80616', '73122', '13'), +('3', '77', '5', '46934', '70818', '13'), +('3', '77', '8', '46885', '95892', '13'), +('3', '77', '8', '80677', '83644', '13'), +('3', '77', '8', '80649', '74408', '13'), +('3', '77', '8', '39330', '72166', '13'), +('3', '77', '6', '80638', '99096', '13'), +('3', '77', '6', '39337', '76445', '13'), +('3', '77', '6', '46884', '71784', '13'), +('3', '77', '6', '46933', '71734', '13'), +('3', '77', '17', '70872', '88400', '13'), +('3', '77', '17', '83603', '79496', '13'), +('3', '77', '17', '46809', '56386', '13'), +('3', '77', '17', '70701', '47888', '13'), +('3', '77', '7', '53376', '66054', '13'), +('3', '77', '7', '83564', '50000', '13'), +('3', '77', '7', '39267', '49993', '13'), +('3', '77', '7', '70868', '44835', '13'), +('3', '77', '9', '46887', '72246', '13'), +('3', '77', '9', '51706', '61979', '13'), +('3', '77', '9', '39335', '55839', '13'), +('3', '77', '9', '83652', '52805', '13'), +('3', '77', '15', '79909', '85796', '13'), +('3', '77', '15', '80667', '83398', '13'), +('3', '77', '15', '80671', '82134', '13'), +('3', '77', '15', '80686', '81938', '13'), +('3', '77', '20', '80678', '106273', '13'), +('3', '77', '20', '46935', '73883', '13'), +('3', '77', '20', '80620', '71213', '13'), +('3', '77', '20', '46919', '65904', '13'), +('3', '77', '12', '47212', '59793', '13'), +('3', '77', '12', '71075', '53165', '13'), +('3', '77', '12', '83568', '47762', '13'), +('3', '77', '12', '70870', '43873', '13'), +('3', '77', '18', '83607', '64334', '13'), +('3', '77', '18', '70873', '55103', '13'), +('3', '77', '18', '46826', '54202', '13'), +('3', '77', '18', '69146', '42558', '13'), +('3', '77', '19', '80516', '77011', '13'), +('3', '77', '19', '39355', '54977', '13'), +('3', '77', '19', '83572', '49694', '13'), +('3', '77', '19', '70871', '44584', '13'), +('3', '77', '13', '46929', '186438', '13'), +('3', '77', '13', '80683', '181081', '13'), +('3', '77', '13', '80642', '179085', '13'), +('3', '77', '13', '80685', '178223', '13'), +('3', '77', '14', '80665', '78564', '13'), +('3', '77', '14', '80682', '78509', '13'), +('3', '77', '14', '80625', '71824', '13'), +('3', '77', '14', '46875', '67546', '13'), +('3', '77', '11', '80655', '108364', '13'), +('3', '77', '11', '46930', '100953', '13'), +('3', '77', '11', '46849', '84626', '13'), +('3', '77', '11', '80668', '81588', '13'), +('3', '78', '22', '39342', '0', '13'), +('3', '78', '22', '12425', '0', '13'), +('3', '78', '22', '7867', '0', '13'), +('3', '78', '22', '23597', '0', '13'), +('3', '78', '1', '80676', '81208', '13'), +('3', '78', '1', '80659', '80714', '13'), +('3', '78', '1', '80660', '77882', '13'), +('3', '78', '1', '80648', '76283', '13'), +('3', '78', '2', '70867', '68008', '13'), +('3', '78', '2', '83560', '49932', '13'), +('3', '78', '2', '28647', '46628', '13'), +('3', '78', '2', '28605', '45783', '13'), +('3', '78', '3', '80637', '76413', '13'), +('3', '78', '3', '39218', '66453', '13'), +('3', '78', '3', '46873', '65393', '13'), +('3', '78', '3', '46923', '65169', '13'), +('3', '78', '5', '46867', '89807', '13'), +('3', '78', '5', '80670', '82074', '13'), +('3', '78', '5', '80616', '73124', '13'), +('3', '78', '5', '46934', '70824', '13'), +('3', '78', '8', '46885', '95898', '13'), +('3', '78', '8', '80677', '83651', '13'), +('3', '78', '8', '80649', '74414', '13'), +('3', '78', '8', '39330', '72167', '13'), +('3', '78', '6', '80638', '99102', '13'), +('3', '78', '6', '39337', '76449', '13'), +('3', '78', '6', '46884', '71790', '13'), +('3', '78', '6', '46933', '71738', '13'), +('3', '78', '17', '70872', '85654', '13'), +('3', '78', '17', '83603', '79501', '13'), +('3', '78', '17', '46809', '56390', '13'), +('3', '78', '17', '70701', '47494', '13'), +('3', '78', '7', '53376', '66059', '13'), +('3', '78', '7', '83564', '50006', '13'), +('3', '78', '7', '39267', '49996', '13'), +('3', '78', '7', '70868', '44841', '13'), +('3', '78', '9', '46887', '72251', '13'), +('3', '78', '9', '51706', '61384', '13'), +('3', '78', '9', '39335', '55844', '13'), +('3', '78', '9', '83652', '52809', '13'), +('3', '78', '15', '79909', '85801', '13'), +('3', '78', '15', '80667', '83404', '13'), +('3', '78', '15', '80671', '82141', '13'), +('3', '78', '15', '80686', '81944', '13'), +('3', '78', '20', '80678', '106279', '13'), +('3', '78', '20', '46935', '73889', '13'), +('3', '78', '20', '80620', '71216', '13'), +('3', '78', '20', '46919', '65909', '13'), +('3', '78', '12', '47212', '59797', '13'), +('3', '78', '12', '71075', '53168', '13'), +('3', '78', '12', '83568', '47769', '13'), +('3', '78', '12', '70870', '43878', '13'), +('3', '78', '18', '83607', '63740', '13'), +('3', '78', '18', '70873', '54658', '13'), +('3', '78', '18', '46826', '54205', '13'), +('3', '78', '18', '69146', '42559', '13'), +('3', '78', '19', '80516', '77017', '13'), +('3', '78', '19', '39355', '54982', '13'), +('3', '78', '19', '83572', '49700', '13'), +('3', '78', '19', '70871', '44584', '13'), +('3', '78', '13', '46929', '187045', '13'), +('3', '78', '13', '80683', '181254', '13'), +('3', '78', '13', '80642', '179231', '13'), +('3', '78', '13', '80685', '178396', '13'), +('3', '78', '14', '80665', '78568', '13'), +('3', '78', '14', '80682', '78513', '13'), +('3', '78', '14', '80625', '71828', '13'), +('3', '78', '14', '46875', '67551', '13'), +('3', '78', '11', '80655', '108416', '13'), +('3', '78', '11', '46930', '101004', '13'), +('3', '78', '11', '46849', '84631', '13'), +('3', '78', '11', '80668', '81594', '13'), +('3', '79', '22', '39342', '0', '13'), +('3', '79', '22', '12425', '0', '13'), +('3', '79', '22', '7867', '0', '13'), +('3', '79', '22', '23597', '0', '13'), +('3', '79', '1', '80676', '81210', '13'), +('3', '79', '1', '80659', '80720', '13'), +('3', '79', '1', '80660', '77888', '13'), +('3', '79', '1', '80648', '76288', '13'), +('3', '79', '2', '70867', '68011', '13'), +('3', '79', '2', '83560', '49938', '13'), +('3', '79', '2', '28647', '46631', '13'), +('3', '79', '2', '28605', '45785', '13'), +('3', '79', '3', '80637', '76418', '13'), +('3', '79', '3', '39218', '66456', '13'), +('3', '79', '3', '46873', '65398', '13'), +('3', '79', '3', '46923', '65174', '13'), +('3', '79', '5', '46867', '89812', '13'), +('3', '79', '5', '80670', '82080', '13'), +('3', '79', '5', '80616', '73126', '13'), +('3', '79', '5', '46934', '70831', '13'), +('3', '79', '8', '46885', '95904', '13'), +('3', '79', '8', '80677', '83657', '13'), +('3', '79', '8', '80649', '74419', '13'), +('3', '79', '8', '39330', '72169', '13'), +('3', '79', '6', '80638', '99107', '13'), +('3', '79', '6', '39337', '76453', '13'), +('3', '79', '6', '46884', '71796', '13'), +('3', '79', '6', '46933', '71743', '13'), +('3', '79', '17', '70872', '82909', '13'), +('3', '79', '17', '83603', '79506', '13'), +('3', '79', '17', '46809', '56393', '13'), +('3', '79', '17', '70701', '47099', '13'), +('3', '79', '7', '53376', '66063', '13'), +('3', '79', '7', '83564', '50012', '13'), +('3', '79', '7', '39267', '50000', '13'), +('3', '79', '7', '70868', '44846', '13'), +('3', '79', '9', '46887', '72256', '13'), +('3', '79', '9', '51706', '60788', '13'), +('3', '79', '9', '39335', '55849', '13'), +('3', '79', '9', '83652', '52813', '13'), +('3', '79', '15', '79909', '85806', '13'), +('3', '79', '15', '80667', '83410', '13'), +('3', '79', '15', '80671', '82147', '13'), +('3', '79', '15', '80686', '81950', '13'), +('3', '79', '20', '80678', '106285', '13'), +('3', '79', '20', '46935', '73895', '13'), +('3', '79', '20', '80620', '71219', '13'), +('3', '79', '20', '46919', '65915', '13'), +('3', '79', '12', '47212', '59801', '13'), +('3', '79', '12', '71075', '53171', '13'), +('3', '79', '12', '83568', '47775', '13'), +('3', '79', '12', '70870', '43883', '13'), +('3', '79', '18', '83607', '63145', '13'), +('3', '79', '18', '70873', '54213', '13'), +('3', '79', '18', '46826', '54208', '13'), +('3', '79', '18', '69146', '42561', '13'), +('3', '79', '19', '80516', '77022', '13'), +('3', '79', '19', '39355', '54987', '13'), +('3', '79', '19', '83572', '49707', '13'), +('3', '79', '19', '70871', '44584', '13'), +('3', '79', '13', '46929', '187652', '13'), +('3', '79', '13', '80683', '181427', '13'), +('3', '79', '13', '80642', '179377', '13'), +('3', '79', '13', '80685', '178569', '13'), +('3', '79', '14', '80665', '78572', '13'), +('3', '79', '14', '80682', '78517', '13'), +('3', '79', '14', '80625', '71832', '13'), +('3', '79', '14', '46875', '67556', '13'), +('3', '79', '11', '80655', '108467', '13'), +('3', '79', '11', '46930', '101056', '13'), +('3', '79', '11', '46849', '84636', '13'), +('3', '79', '11', '80668', '81600', '13'), +('3', '80', '22', '39342', '0', '14'), +('3', '80', '22', '12425', '0', '14'), +('3', '80', '22', '7867', '0', '14'), +('3', '80', '22', '23597', '0', '14'), +('3', '80', '1', '102618', '109013', '14'), +('3', '80', '1', '102597', '108869', '14'), +('3', '80', '1', '102625', '108557', '14'), +('3', '80', '1', '102641', '108368', '14'), +('3', '80', '2', '102003', '74241', '14'), +('3', '80', '2', '70867', '68015', '14'), +('3', '80', '2', '102255', '66905', '14'), +('3', '80', '2', '83560', '49944', '14'), +('3', '80', '3', '102726', '119137', '14'), +('3', '80', '3', '102619', '116321', '14'), +('3', '80', '3', '102598', '116107', '14'), +('3', '80', '3', '102626', '115409', '14'), +('3', '80', '5', '102599', '114320', '14'), +('3', '80', '5', '102620', '113852', '14'), +('3', '80', '5', '102627', '112355', '14'), +('3', '80', '5', '102745', '104253', '14'), +('3', '80', '8', '102601', '138801', '14'), +('3', '80', '8', '102552', '123490', '14'), +('3', '80', '8', '102622', '116275', '14'), +('3', '80', '8', '102629', '114925', '14'), +('3', '80', '6', '102621', '115951', '14'), +('3', '80', '6', '102600', '115659', '14'), +('3', '80', '6', '102628', '114929', '14'), +('3', '80', '6', '102558', '101721', '14'), +('3', '80', '17', '70872', '80164', '14'), +('3', '80', '17', '83603', '79512', '14'), +('3', '80', '17', '102006', '79440', '14'), +('3', '80', '17', '102258', '72376', '14'), +('3', '80', '7', '102004', '75326', '14'), +('3', '80', '7', '102256', '68282', '14'), +('3', '80', '7', '53376', '66068', '14'), +('3', '80', '7', '83564', '50019', '14'), +('3', '80', '9', '67098', '192102', '14'), +('3', '80', '9', '46887', '72261', '14'), +('3', '80', '9', '102287', '62346', '14'), +('3', '80', '9', '51706', '60193', '14'), +('3', '80', '15', '102623', '110711', '14'), +('3', '80', '15', '102630', '110513', '14'), +('3', '80', '15', '102602', '110431', '14'), +('3', '80', '15', '102636', '109965', '14'), +('3', '80', '20', '102624', '138995', '14'), +('3', '80', '20', '102603', '138385', '14'), +('3', '80', '20', '102631', '138079', '14'), +('3', '80', '20', '102553', '123134', '14'), +('3', '80', '12', '102253', '64184', '14'), +('3', '80', '12', '47212', '59804', '14'), +('3', '80', '12', '71075', '53174', '14'), +('3', '80', '12', '83568', '47781', '14'), +('3', '80', '18', '102005', '77062', '14'), +('3', '80', '18', '102257', '69503', '14'), +('3', '80', '18', '83607', '62551', '14'), +('3', '80', '18', '46826', '54211', '14'), +('3', '80', '19', '76131', '83821', '14'), +('3', '80', '19', '80516', '77028', '14'), +('3', '80', '19', '102254', '64874', '14'), +('3', '80', '19', '39355', '54993', '14'), +('3', '80', '13', '102663', '247630', '14'), +('3', '80', '13', '102653', '233620', '14'), +('3', '80', '13', '102664', '233414', '14'), +('3', '80', '13', '102658', '231690', '14'), +('3', '80', '14', '102632', '117780', '14'), +('3', '80', '14', '102633', '116614', '14'), +('3', '80', '14', '102570', '102517', '14'), +('3', '80', '14', '80665', '78577', '14'), +('3', '80', '11', '102667', '158542', '14'), +('3', '80', '11', '102589', '138631', '14'), +('3', '80', '11', '102643', '110927', '14'), +('3', '80', '11', '80655', '108519', '14'), +('3', '81', '22', '39342', '0', '14'), +('3', '81', '22', '12425', '0', '14'), +('3', '81', '22', '7867', '0', '14'), +('3', '81', '22', '23597', '0', '14'), +('3', '81', '1', '102618', '109018', '14'), +('3', '81', '1', '102597', '108874', '14'), +('3', '81', '1', '102625', '108563', '14'), +('3', '81', '1', '102641', '108372', '14'), +('3', '81', '2', '102003', '74245', '14'), +('3', '81', '2', '70867', '68018', '14'), +('3', '81', '2', '102255', '66909', '14'), +('3', '81', '2', '83560', '49951', '14'), +('3', '81', '3', '102726', '119143', '14'), +('3', '81', '3', '102619', '116329', '14'), +('3', '81', '3', '102598', '116113', '14'), +('3', '81', '3', '102626', '115415', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '81', '5', '102599', '114326', '14'), +('3', '81', '5', '102620', '113855', '14'), +('3', '81', '5', '102627', '112358', '14'), +('3', '81', '5', '102745', '104259', '14'), +('3', '81', '8', '102601', '138806', '14'), +('3', '81', '8', '102552', '123495', '14'), +('3', '81', '8', '102622', '116280', '14'), +('3', '81', '8', '102629', '114929', '14'), +('3', '81', '6', '102621', '115955', '14'), +('3', '81', '6', '102600', '115664', '14'), +('3', '81', '6', '102628', '114934', '14'), +('3', '81', '6', '102558', '101728', '14'), +('3', '81', '17', '83603', '79517', '14'), +('3', '81', '17', '102006', '79444', '14'), +('3', '81', '17', '70872', '77419', '14'), +('3', '81', '17', '102258', '72382', '14'), +('3', '81', '7', '102004', '75331', '14'), +('3', '81', '7', '102256', '68288', '14'), +('3', '81', '7', '53376', '66073', '14'), +('3', '81', '7', '83564', '50025', '14'), +('3', '81', '9', '67098', '194507', '14'), +('3', '81', '9', '46887', '72266', '14'), +('3', '81', '9', '102287', '62350', '14'), +('3', '81', '9', '51706', '59598', '14'), +('3', '81', '15', '102623', '110714', '14'), +('3', '81', '15', '102630', '110517', '14'), +('3', '81', '15', '102602', '110436', '14'), +('3', '81', '15', '102636', '109970', '14'), +('3', '81', '20', '102624', '139002', '14'), +('3', '81', '20', '102603', '138390', '14'), +('3', '81', '20', '102631', '138087', '14'), +('3', '81', '20', '102553', '123140', '14'), +('3', '81', '12', '102253', '64187', '14'), +('3', '81', '12', '47212', '59808', '14'), +('3', '81', '12', '71075', '53178', '14'), +('3', '81', '12', '83568', '47788', '14'), +('3', '81', '18', '102005', '77068', '14'), +('3', '81', '18', '102257', '69508', '14'), +('3', '81', '18', '83607', '61956', '14'), +('3', '81', '18', '46826', '54215', '14'), +('3', '81', '19', '76131', '83822', '14'), +('3', '81', '19', '80516', '77033', '14'), +('3', '81', '19', '102254', '64878', '14'), +('3', '81', '19', '39355', '54998', '14'), +('3', '81', '13', '102663', '247945', '14'), +('3', '81', '13', '102653', '233822', '14'), +('3', '81', '13', '102664', '233615', '14'), +('3', '81', '13', '102658', '231864', '14'), +('3', '81', '14', '102632', '117787', '14'), +('3', '81', '14', '102633', '116618', '14'), +('3', '81', '14', '102570', '102520', '14'), +('3', '81', '14', '80665', '78581', '14'), +('3', '81', '11', '102667', '158603', '14'), +('3', '81', '11', '102589', '138681', '14'), +('3', '81', '11', '102643', '110929', '14'), +('3', '81', '11', '80655', '108570', '14'), +('3', '82', '22', '39342', '0', '14'), +('3', '82', '22', '12425', '0', '14'), +('3', '82', '22', '7867', '0', '14'), +('3', '82', '22', '23597', '0', '14'), +('3', '82', '1', '102618', '109024', '14'), +('3', '82', '1', '102597', '108879', '14'), +('3', '82', '1', '102625', '108568', '14'), +('3', '82', '1', '102641', '108377', '14'), +('3', '82', '2', '102003', '74248', '14'), +('3', '82', '2', '70867', '68021', '14'), +('3', '82', '2', '102255', '66912', '14'), +('3', '82', '2', '83560', '49957', '14'), +('3', '82', '3', '102726', '119149', '14'), +('3', '82', '3', '102619', '116336', '14'), +('3', '82', '3', '102598', '116118', '14'), +('3', '82', '3', '102626', '115421', '14'), +('3', '82', '5', '102599', '114331', '14'), +('3', '82', '5', '102620', '113857', '14'), +('3', '82', '5', '102627', '112361', '14'), +('3', '82', '5', '102745', '104264', '14'), +('3', '82', '8', '102601', '138811', '14'), +('3', '82', '8', '102552', '123500', '14'), +('3', '82', '8', '102622', '116286', '14'), +('3', '82', '8', '102629', '114933', '14'), +('3', '82', '6', '102621', '115960', '14'), +('3', '82', '6', '102600', '115669', '14'), +('3', '82', '6', '102628', '114939', '14'), +('3', '82', '6', '102558', '101734', '14'), +('3', '82', '17', '83603', '79523', '14'), +('3', '82', '17', '102006', '79448', '14'), +('3', '82', '17', '70872', '74674', '14'), +('3', '82', '17', '102258', '72388', '14'), +('3', '82', '7', '102004', '75336', '14'), +('3', '82', '7', '102256', '68294', '14'), +('3', '82', '7', '53376', '66077', '14'), +('3', '82', '7', '83564', '50031', '14'), +('3', '82', '9', '67098', '196913', '14'), +('3', '82', '9', '46887', '72272', '14'), +('3', '82', '9', '102287', '62353', '14'), +('3', '82', '9', '51706', '59002', '14'), +('3', '82', '15', '102623', '110718', '14'), +('3', '82', '15', '102630', '110522', '14'), +('3', '82', '15', '102602', '110441', '14'), +('3', '82', '15', '102636', '109975', '14'), +('3', '82', '20', '102624', '139008', '14'), +('3', '82', '20', '102603', '138395', '14'), +('3', '82', '20', '102631', '138094', '14'), +('3', '82', '20', '102553', '123146', '14'), +('3', '82', '12', '102253', '64190', '14'), +('3', '82', '12', '47212', '59812', '14'), +('3', '82', '12', '71075', '53181', '14'), +('3', '82', '12', '83568', '47794', '14'), +('3', '82', '18', '102005', '77074', '14'), +('3', '82', '18', '102257', '69512', '14'), +('3', '82', '18', '83607', '61361', '14'), +('3', '82', '18', '46826', '54218', '14'), +('3', '82', '19', '76131', '83823', '14'), +('3', '82', '19', '80516', '77039', '14'), +('3', '82', '19', '102254', '64881', '14'), +('3', '82', '19', '39355', '55003', '14'), +('3', '82', '13', '102663', '248289', '14'), +('3', '82', '13', '102653', '234023', '14'), +('3', '82', '13', '102664', '233788', '14'), +('3', '82', '13', '102658', '232067', '14'), +('3', '82', '14', '102632', '117793', '14'), +('3', '82', '14', '102633', '116622', '14'), +('3', '82', '14', '102570', '102523', '14'), +('3', '82', '14', '80665', '78585', '14'), +('3', '82', '11', '102667', '158664', '14'), +('3', '82', '11', '102589', '138740', '14'), +('3', '82', '11', '102643', '110932', '14'), +('3', '82', '11', '80655', '108622', '14'), +('3', '83', '22', '39342', '0', '14'), +('3', '83', '22', '12425', '0', '14'), +('3', '83', '22', '7867', '0', '14'), +('3', '83', '22', '23597', '0', '14'), +('3', '83', '1', '102618', '109029', '14'), +('3', '83', '1', '102597', '108884', '14'), +('3', '83', '1', '102625', '108574', '14'), +('3', '83', '1', '102641', '108381', '14'), +('3', '83', '2', '102003', '74252', '14'), +('3', '83', '2', '70867', '68025', '14'), +('3', '83', '2', '102255', '66916', '14'), +('3', '83', '2', '83560', '49963', '14'), +('3', '83', '3', '102726', '119156', '14'), +('3', '83', '3', '102619', '116345', '14'), +('3', '83', '3', '102598', '116123', '14'), +('3', '83', '3', '102626', '115428', '14'), +('3', '83', '5', '102599', '114337', '14'), +('3', '83', '5', '102620', '113860', '14'), +('3', '83', '5', '102627', '112364', '14'), +('3', '83', '5', '102745', '104270', '14'), +('3', '83', '8', '102601', '138816', '14'), +('3', '83', '8', '102552', '123506', '14'), +('3', '83', '8', '102622', '116292', '14'), +('3', '83', '8', '102629', '114937', '14'), +('3', '83', '6', '102621', '115965', '14'), +('3', '83', '6', '102600', '115675', '14'), +('3', '83', '6', '102628', '114945', '14'), +('3', '83', '6', '102558', '101741', '14'), +('3', '83', '17', '83603', '79529', '14'), +('3', '83', '17', '102006', '79452', '14'), +('3', '83', '17', '102258', '72394', '14'), +('3', '83', '17', '70872', '71929', '14'), +('3', '83', '7', '102004', '75341', '14'), +('3', '83', '7', '102256', '68300', '14'), +('3', '83', '7', '53376', '66082', '14'), +('3', '83', '7', '83564', '50038', '14'), +('3', '83', '9', '67098', '199319', '14'), +('3', '83', '9', '46887', '72277', '14'), +('3', '83', '9', '102287', '62356', '14'), +('3', '83', '9', '51706', '58407', '14'), +('3', '83', '15', '102623', '110722', '14'), +('3', '83', '15', '102630', '110527', '14'), +('3', '83', '15', '102602', '110446', '14'), +('3', '83', '15', '102636', '109981', '14'), +('3', '83', '20', '102624', '139014', '14'), +('3', '83', '20', '102603', '138401', '14'), +('3', '83', '20', '102631', '138102', '14'), +('3', '83', '20', '102553', '123152', '14'), +('3', '83', '12', '102253', '64193', '14'), +('3', '83', '12', '47212', '59816', '14'), +('3', '83', '12', '71075', '53184', '14'), +('3', '83', '12', '83568', '47800', '14'), +('3', '83', '18', '102005', '77081', '14'), +('3', '83', '18', '102257', '69517', '14'), +('3', '83', '18', '83607', '60767', '14'), +('3', '83', '18', '46826', '54221', '14'), +('3', '83', '19', '76131', '83824', '14'), +('3', '83', '19', '80516', '77045', '14'), +('3', '83', '19', '102254', '64885', '14'), +('3', '83', '19', '39355', '55008', '14'), +('3', '83', '13', '102663', '248633', '14'), +('3', '83', '13', '102653', '234196', '14'), +('3', '83', '13', '102664', '233990', '14'), +('3', '83', '13', '102658', '232241', '14'), +('3', '83', '14', '102632', '117800', '14'), +('3', '83', '14', '102633', '116626', '14'), +('3', '83', '14', '102570', '102526', '14'), +('3', '83', '14', '80665', '78590', '14'), +('3', '83', '11', '102667', '158734', '14'), +('3', '83', '11', '102589', '138790', '14'), +('3', '83', '11', '102643', '110934', '14'), +('3', '83', '11', '80655', '108673', '14'), +('3', '84', '22', '39342', '0', '14'), +('3', '84', '22', '12425', '0', '14'), +('3', '84', '22', '7867', '0', '14'), +('3', '84', '22', '23597', '0', '14'), +('3', '84', '1', '102618', '109035', '14'), +('3', '84', '1', '102597', '108889', '14'), +('3', '84', '1', '102625', '108579', '14'), +('3', '84', '1', '102641', '108386', '14'), +('3', '84', '2', '102003', '74255', '14'), +('3', '84', '2', '70867', '68028', '14'), +('3', '84', '2', '102255', '66920', '14'), +('3', '84', '2', '83560', '49970', '14'), +('3', '84', '3', '102726', '119161', '14'), +('3', '84', '3', '102619', '116352', '14'), +('3', '84', '3', '102598', '116129', '14'), +('3', '84', '3', '102626', '115434', '14'), +('3', '84', '5', '102599', '114342', '14'), +('3', '84', '5', '102620', '113862', '14'), +('3', '84', '5', '102627', '112368', '14'), +('3', '84', '5', '102745', '104275', '14'), +('3', '84', '8', '102601', '138821', '14'), +('3', '84', '8', '102552', '123511', '14'), +('3', '84', '8', '102622', '116297', '14'), +('3', '84', '8', '102629', '114941', '14'), +('3', '84', '6', '102621', '115970', '14'), +('3', '84', '6', '102600', '115680', '14'), +('3', '84', '6', '102628', '114950', '14'), +('3', '84', '6', '102558', '101747', '14'), +('3', '84', '17', '83603', '79534', '14'), +('3', '84', '17', '102006', '79455', '14'), +('3', '84', '17', '102258', '72400', '14'), +('3', '84', '17', '70872', '69184', '14'), +('3', '84', '7', '102004', '75346', '14'), +('3', '84', '7', '102256', '68306', '14'), +('3', '84', '7', '53376', '66086', '14'), +('3', '84', '7', '83564', '50044', '14'), +('3', '84', '9', '67098', '201725', '14'), +('3', '84', '9', '46887', '72282', '14'), +('3', '84', '9', '102287', '62360', '14'), +('3', '84', '9', '51706', '57812', '14'), +('3', '84', '15', '102623', '110726', '14'), +('3', '84', '15', '102630', '110531', '14'), +('3', '84', '15', '102602', '110451', '14'), +('3', '84', '15', '102636', '109986', '14'), +('3', '84', '20', '102624', '139020', '14'), +('3', '84', '20', '102603', '138406', '14'), +('3', '84', '20', '102631', '138109', '14'), +('3', '84', '20', '102553', '123158', '14'), +('3', '84', '12', '102253', '64196', '14'), +('3', '84', '12', '47212', '59819', '14'), +('3', '84', '12', '71075', '53187', '14'), +('3', '84', '12', '83568', '47807', '14'), +('3', '84', '18', '102005', '77087', '14'), +('3', '84', '18', '102257', '69522', '14'), +('3', '84', '18', '83607', '60172', '14'), +('3', '84', '18', '46826', '54224', '14'), +('3', '84', '19', '76131', '83825', '14'), +('3', '84', '19', '80516', '77050', '14'), +('3', '84', '19', '102254', '64888', '14'), +('3', '84', '19', '39355', '55013', '14'), +('3', '84', '13', '102663', '248949', '14'), +('3', '84', '13', '102653', '234398', '14'), +('3', '84', '13', '102664', '234192', '14'), +('3', '84', '13', '102658', '232443', '14'), +('3', '84', '14', '102632', '117807', '14'), +('3', '84', '14', '102633', '116631', '14'), +('3', '84', '14', '102570', '102529', '14'), +('3', '84', '14', '80665', '78594', '14'), +('3', '84', '11', '102667', '158794', '14'), +('3', '84', '11', '102589', '138850', '14'), +('3', '84', '11', '102643', '110937', '14'), +('3', '84', '11', '80655', '108725', '14'), +('3', '85', '22', '7867', '0', '16'), +('3', '85', '22', '39342', '0', '16'), +('3', '85', '22', '23597', '0', '16'), +('3', '85', '22', '66166', '0', '16'), +('3', '85', '1', '111309', '210754', '16'), +('3', '85', '1', '111303', '209969', '16'), +('3', '85', '1', '111305', '208702', '16'), +('3', '85', '1', '111300', '208626', '16'), +('3', '85', '2', '94056', '132805', '16'), +('3', '85', '2', '62985', '132114', '16'), +('3', '85', '2', '89368', '126209', '16'), +('3', '85', '2', '104403', '111511', '16'), +('3', '85', '3', '111312', '210056', '16'), +('3', '85', '3', '111315', '209180', '16'), +('3', '85', '3', '111313', '209147', '16'), +('3', '85', '3', '111316', '207089', '16'), +('3', '85', '5', '111317', '209656', '16'), +('3', '85', '5', '111318', '208733', '16'), +('3', '85', '5', '111320', '208676', '16'), +('3', '85', '5', '111319', '206724', '16'), +('3', '85', '8', '111331', '210956', '16'), +('3', '85', '8', '111328', '210031', '16'), +('3', '85', '8', '111332', '207091', '16'), +('3', '85', '8', '111030', '185176', '16'), +('3', '85', '6', '111322', '209212', '16'), +('3', '85', '6', '111324', '209114', '16'), +('3', '85', '6', '111326', '206806', '16'), +('3', '85', '6', '111021', '183482', '16'), +('3', '85', '17', '56046', '139129', '16'), +('3', '85', '17', '81765', '138578', '16'), +('3', '85', '17', '56083', '138103', '16'), +('3', '85', '17', '104406', '118760', '16'), +('3', '85', '7', '94053', '133334', '16'), +('3', '85', '7', '56079', '132704', '16'), +('3', '85', '7', '89369', '127484', '16'), +('3', '85', '7', '104404', '111402', '16'), +('3', '85', '9', '67098', '204131', '16'), +('3', '85', '9', '56031', '128741', '16'), +('3', '85', '9', '56033', '128657', '16'), +('3', '85', '9', '62992', '128563', '16'), +('3', '85', '15', '111348', '210388', '16'), +('3', '85', '15', '111343', '210144', '16'), +('3', '85', '15', '111341', '209699', '16'), +('3', '85', '15', '111342', '208950', '16'), +('3', '85', '20', '111354', '234779', '16'), +('3', '85', '20', '111355', '232647', '16'), +('3', '85', '20', '111353', '231707', '16'), +('3', '85', '20', '111351', '231404', '16'), +('3', '85', '12', '81795', '129962', '16'), +('3', '85', '12', '56073', '129767', '16'), +('3', '85', '12', '89366', '123409', '16'), +('3', '85', '12', '104401', '109993', '16'), +('3', '85', '18', '62986', '135689', '16'), +('3', '85', '18', '56041', '135518', '16'), +('3', '85', '18', '62987', '134405', '16'), +('3', '85', '18', '94054', '134158', '16'), +('3', '85', '19', '62990', '133742', '16'), +('3', '85', '19', '56037', '133327', '16'), +('3', '85', '19', '56075', '132568', '16'), +('3', '85', '19', '81763', '132062', '16'), +('3', '85', '13', '111526', '419513', '16'), +('3', '85', '13', '111514', '403118', '16'), +('3', '85', '13', '111520', '399152', '16'), +('3', '85', '13', '111525', '397627', '16'), +('3', '85', '14', '111536', '215971', '16'), +('3', '85', '14', '111539', '215032', '16'), +('3', '85', '14', '111535', '214642', '16'), +('3', '85', '14', '111538', '214163', '16'), +('3', '85', '11', '111529', '259700', '16'), +('3', '85', '11', '111229', '240504', '16'), +('3', '85', '11', '111338', '210210', '16'), +('3', '85', '11', '111336', '209926', '16'), +('3', '85', '22', '39342', '0', '15'), +('3', '85', '22', '12425', '0', '15'), +('3', '85', '22', '7867', '0', '15'), +('3', '85', '22', '23597', '0', '15'), +('3', '85', '1', '107054', '154053', '15'), +('3', '85', '1', '107019', '153286', '15'), +('3', '85', '1', '107053', '152574', '15'), +('3', '85', '1', '107001', '151964', '15'), +('3', '85', '2', '94056', '132805', '15'), +('3', '85', '2', '62985', '132114', '15'), +('3', '85', '2', '89368', '126209', '15'), +('3', '85', '2', '104403', '111511', '15'), +('3', '85', '3', '107020', '157556', '15'), +('3', '85', '3', '107055', '155895', '15'), +('3', '85', '3', '107002', '155441', '15'), +('3', '85', '3', '106849', '147260', '15'), +('3', '85', '5', '107021', '155101', '15'), +('3', '85', '5', '107056', '153765', '15'), +('3', '85', '5', '107003', '153296', '15'), +('3', '85', '5', '106811', '144642', '15'), +('3', '85', '8', '107023', '160242', '15'), +('3', '85', '8', '107058', '157946', '15'), +('3', '85', '8', '107005', '156710', '15'), +('3', '85', '8', '94070', '155880', '15'), +('3', '85', '6', '106812', '169121', '15'), +('3', '85', '6', '106843', '167011', '15'), +('3', '85', '6', '107022', '157528', '15'), +('3', '85', '6', '107004', '156123', '15'), +('3', '85', '17', '56046', '139129', '15'), +('3', '85', '17', '81765', '138578', '15'), +('3', '85', '17', '56083', '138103', '15'), +('3', '85', '17', '104406', '118760', '15'), +('3', '85', '7', '94053', '133334', '15'), +('3', '85', '7', '56079', '132704', '15'), +('3', '85', '7', '89369', '127484', '15'), +('3', '85', '7', '104404', '111402', '15'), +('3', '85', '9', '67098', '204131', '15'), +('3', '85', '9', '56031', '128741', '15'), +('3', '85', '9', '56033', '128657', '15'), +('3', '85', '9', '62992', '128563', '15'), +('3', '85', '15', '107025', '157086', '15'), +('3', '85', '15', '107062', '154338', '15'), +('3', '85', '15', '107007', '154126', '15'), +('3', '85', '15', '107051', '152799', '15'), +('3', '85', '20', '107026', '181321', '15'), +('3', '85', '20', '107059', '180478', '15'), +('3', '85', '20', '107008', '178863', '15'), +('3', '85', '20', '106816', '170583', '15'), +('3', '85', '12', '81795', '129962', '15'), +('3', '85', '12', '56073', '129767', '15'), +('3', '85', '12', '89366', '123409', '15'), +('3', '85', '12', '104401', '109993', '15'), +('3', '85', '18', '62986', '135689', '15'), +('3', '85', '18', '56041', '135518', '15'), +('3', '85', '18', '62987', '134405', '15'), +('3', '85', '18', '94054', '134158', '15'), +('3', '85', '19', '62990', '133742', '15'), +('3', '85', '19', '56037', '133327', '15'), +('3', '85', '19', '56075', '132568', '15'), +('3', '85', '19', '81763', '132062', '15'), +('3', '85', '13', '106857', '299862', '15'), +('3', '85', '13', '106866', '299366', '15'), +('3', '85', '13', '106862', '298735', '15'), +('3', '85', '13', '106865', '295319', '15'), +('3', '85', '14', '107064', '159452', '15'), +('3', '85', '14', '107065', '159087', '15'), +('3', '85', '14', '106851', '150436', '15'), +('3', '85', '14', '106852', '148773', '15'), +('3', '85', '11', '62939', '179162', '15'), +('3', '85', '11', '106769', '178654', '15'), +('3', '85', '11', '107024', '158971', '15'), +('3', '85', '11', '102667', '158855', '15'), +('3', '86', '22', '7867', '0', '16'), +('3', '86', '22', '39342', '0', '16'), +('3', '86', '22', '23597', '0', '16'), +('3', '86', '22', '66166', '0', '16'), +('3', '86', '1', '111309', '210758', '16'), +('3', '86', '1', '111303', '209975', '16'), +('3', '86', '1', '111305', '208708', '16'), +('3', '86', '1', '111300', '208631', '16'), +('3', '86', '2', '94056', '132809', '16'), +('3', '86', '2', '62985', '132118', '16'), +('3', '86', '2', '89368', '126214', '16'), +('3', '86', '2', '104403', '111515', '16'), +('3', '86', '3', '111312', '210062', '16'), +('3', '86', '3', '111315', '209187', '16'), +('3', '86', '3', '111313', '209152', '16'), +('3', '86', '3', '111316', '207094', '16'), +('3', '86', '5', '111317', '209662', '16'), +('3', '86', '5', '111318', '208737', '16'), +('3', '86', '5', '111320', '208681', '16'), +('3', '86', '5', '111319', '206729', '16'), +('3', '86', '8', '111331', '210962', '16'), +('3', '86', '8', '111328', '210036', '16'), +('3', '86', '8', '111332', '207096', '16'), +('3', '86', '8', '111030', '185182', '16'), +('3', '86', '6', '111322', '209216', '16'), +('3', '86', '6', '111324', '209119', '16'), +('3', '86', '6', '111326', '206812', '16'), +('3', '86', '6', '111021', '183486', '16'), +('3', '86', '17', '56046', '139135', '16'), +('3', '86', '17', '81765', '138582', '16'), +('3', '86', '17', '56083', '138106', '16'), +('3', '86', '17', '104406', '118767', '16'), +('3', '86', '7', '94053', '133339', '16'), +('3', '86', '7', '56079', '132710', '16'), +('3', '86', '7', '89369', '127489', '16'), +('3', '86', '7', '104404', '111407', '16'), +('3', '86', '9', '67098', '206537', '16'), +('3', '86', '9', '56031', '128744', '16'), +('3', '86', '9', '56033', '128660', '16'), +('3', '86', '9', '62992', '128568', '16'), +('3', '86', '15', '111348', '210394', '16'), +('3', '86', '15', '111343', '210149', '16'), +('3', '86', '15', '111341', '209706', '16'), +('3', '86', '15', '111342', '208956', '16'), +('3', '86', '20', '111354', '234784', '16'), +('3', '86', '20', '111355', '232651', '16'), +('3', '86', '20', '111353', '231712', '16'), +('3', '86', '20', '111351', '231408', '16'), +('3', '86', '12', '81795', '129967', '16'), +('3', '86', '12', '56073', '129774', '16'), +('3', '86', '12', '89366', '123414', '16'), +('3', '86', '12', '104401', '109999', '16'), +('3', '86', '18', '62986', '135696', '16'), +('3', '86', '18', '56041', '135521', '16'), +('3', '86', '18', '62987', '134408', '16'), +('3', '86', '18', '94054', '134163', '16'), +('3', '86', '19', '62990', '133747', '16'), +('3', '86', '19', '56037', '133333', '16'), +('3', '86', '19', '56075', '132574', '16'), +('3', '86', '19', '81763', '132068', '16'), +('3', '86', '13', '111526', '420055', '16'), +('3', '86', '13', '111514', '403633', '16'), +('3', '86', '13', '111520', '399666', '16'), +('3', '86', '13', '111525', '398141', '16'), +('3', '86', '14', '111536', '215975', '16'), +('3', '86', '14', '111539', '215037', '16'), +('3', '86', '14', '111535', '214648', '16'), +('3', '86', '14', '111538', '214167', '16'), +('3', '86', '11', '111529', '259780', '16'), +('3', '86', '11', '111229', '240576', '16'), +('3', '86', '11', '111338', '210215', '16'), +('3', '86', '11', '111336', '209932', '16'), +('3', '87', '22', '7867', '0', '16'), +('3', '87', '22', '39342', '0', '16'), +('3', '87', '22', '23597', '0', '16'), +('3', '87', '22', '66166', '0', '16'), +('3', '87', '1', '111309', '210762', '16'), +('3', '87', '1', '111303', '209981', '16'), +('3', '87', '1', '111305', '208714', '16'), +('3', '87', '1', '111300', '208635', '16'), +('3', '87', '2', '94056', '132814', '16'), +('3', '87', '2', '62985', '132123', '16'), +('3', '87', '2', '89368', '126220', '16'), +('3', '87', '2', '104403', '111519', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '87', '3', '111312', '210067', '16'), +('3', '87', '3', '111315', '209194', '16'), +('3', '87', '3', '111313', '209157', '16'), +('3', '87', '3', '111316', '207099', '16'), +('3', '87', '5', '111317', '209668', '16'), +('3', '87', '5', '111318', '208741', '16'), +('3', '87', '5', '111320', '208686', '16'), +('3', '87', '5', '111319', '206736', '16'), +('3', '87', '8', '111331', '210968', '16'), +('3', '87', '8', '111328', '210042', '16'), +('3', '87', '8', '111332', '207101', '16'), +('3', '87', '8', '111030', '185188', '16'), +('3', '87', '6', '111322', '209220', '16'), +('3', '87', '6', '111324', '209125', '16'), +('3', '87', '6', '111326', '206818', '16'), +('3', '87', '6', '111021', '183490', '16'), +('3', '87', '17', '56046', '139142', '16'), +('3', '87', '17', '81765', '138587', '16'), +('3', '87', '17', '56083', '138109', '16'), +('3', '87', '17', '104406', '118774', '16'), +('3', '87', '7', '94053', '133344', '16'), +('3', '87', '7', '56079', '132716', '16'), +('3', '87', '7', '89369', '127494', '16'), +('3', '87', '7', '104404', '111413', '16'), +('3', '87', '9', '67098', '208944', '16'), +('3', '87', '9', '56031', '128748', '16'), +('3', '87', '9', '56033', '128664', '16'), +('3', '87', '9', '62992', '128574', '16'), +('3', '87', '15', '111348', '210401', '16'), +('3', '87', '15', '111343', '210153', '16'), +('3', '87', '15', '111341', '209712', '16'), +('3', '87', '15', '111342', '208963', '16'), +('3', '87', '20', '111354', '234790', '16'), +('3', '87', '20', '111355', '232655', '16'), +('3', '87', '20', '111353', '231718', '16'), +('3', '87', '20', '111351', '231412', '16'), +('3', '87', '12', '81795', '129973', '16'), +('3', '87', '12', '56073', '129781', '16'), +('3', '87', '12', '89366', '123418', '16'), +('3', '87', '12', '104401', '110005', '16'), +('3', '87', '18', '62986', '135704', '16'), +('3', '87', '18', '56041', '135525', '16'), +('3', '87', '18', '62987', '134412', '16'), +('3', '87', '18', '94054', '134168', '16'), +('3', '87', '19', '62990', '133752', '16'), +('3', '87', '19', '56037', '133338', '16'), +('3', '87', '19', '56075', '132580', '16'), +('3', '87', '19', '81763', '132074', '16'), +('3', '87', '13', '111526', '420598', '16'), +('3', '87', '13', '111514', '404147', '16'), +('3', '87', '13', '111520', '400180', '16'), +('3', '87', '13', '111525', '398655', '16'), +('3', '87', '14', '111536', '215980', '16'), +('3', '87', '14', '111539', '215042', '16'), +('3', '87', '14', '111535', '214654', '16'), +('3', '87', '14', '111538', '214171', '16'), +('3', '87', '11', '111529', '259861', '16'), +('3', '87', '11', '111229', '240656', '16'), +('3', '87', '11', '111338', '210221', '16'), +('3', '87', '11', '111336', '209938', '16'), +('3', '88', '22', '7867', '0', '16'), +('3', '88', '22', '39342', '0', '16'), +('3', '88', '22', '23597', '0', '16'), +('3', '88', '22', '66166', '0', '16'), +('3', '88', '1', '111309', '210767', '16'), +('3', '88', '1', '111303', '209987', '16'), +('3', '88', '1', '111305', '208721', '16'), +('3', '88', '1', '111300', '208639', '16'), +('3', '88', '2', '94056', '132819', '16'), +('3', '88', '2', '62985', '132127', '16'), +('3', '88', '2', '89368', '126225', '16'), +('3', '88', '2', '104403', '111523', '16'), +('3', '88', '3', '111312', '210073', '16'), +('3', '88', '3', '111315', '209201', '16'), +('3', '88', '3', '111313', '209162', '16'), +('3', '88', '3', '111316', '207105', '16'), +('3', '88', '5', '111317', '209675', '16'), +('3', '88', '5', '111318', '208745', '16'), +('3', '88', '5', '111320', '208692', '16'), +('3', '88', '5', '111319', '206742', '16'), +('3', '88', '8', '111331', '210975', '16'), +('3', '88', '8', '111328', '210047', '16'), +('3', '88', '8', '111332', '207105', '16'), +('3', '88', '8', '111030', '185195', '16'), +('3', '88', '6', '111322', '209224', '16'), +('3', '88', '6', '111324', '209130', '16'), +('3', '88', '6', '111326', '206824', '16'), +('3', '88', '6', '111021', '183494', '16'), +('3', '88', '17', '56046', '139149', '16'), +('3', '88', '17', '81765', '138591', '16'), +('3', '88', '17', '56083', '138112', '16'), +('3', '88', '17', '104406', '118782', '16'), +('3', '88', '7', '94053', '133350', '16'), +('3', '88', '7', '56079', '132721', '16'), +('3', '88', '7', '89369', '127500', '16'), +('3', '88', '7', '104404', '111418', '16'), +('3', '88', '9', '67098', '211350', '16'), +('3', '88', '9', '56031', '128752', '16'), +('3', '88', '9', '56033', '128668', '16'), +('3', '88', '9', '62992', '128579', '16'), +('3', '88', '15', '111348', '210407', '16'), +('3', '88', '15', '111343', '210158', '16'), +('3', '88', '15', '111341', '209719', '16'), +('3', '88', '15', '111342', '208969', '16'), +('3', '88', '20', '111354', '234795', '16'), +('3', '88', '20', '111355', '232659', '16'), +('3', '88', '20', '111353', '231723', '16'), +('3', '88', '20', '111351', '231417', '16'), +('3', '88', '12', '81795', '129979', '16'), +('3', '88', '12', '56073', '129788', '16'), +('3', '88', '12', '89366', '123423', '16'), +('3', '88', '12', '104401', '110011', '16'), +('3', '88', '18', '62986', '135711', '16'), +('3', '88', '18', '56041', '135528', '16'), +('3', '88', '18', '62987', '134415', '16'), +('3', '88', '18', '94054', '134173', '16'), +('3', '88', '19', '62990', '133757', '16'), +('3', '88', '19', '56037', '133344', '16'), +('3', '88', '19', '56075', '132586', '16'), +('3', '88', '19', '81763', '132080', '16'), +('3', '88', '13', '111526', '421140', '16'), +('3', '88', '13', '111514', '404662', '16'), +('3', '88', '13', '111520', '400694', '16'), +('3', '88', '13', '111525', '399141', '16'), +('3', '88', '14', '111536', '215985', '16'), +('3', '88', '14', '111539', '215048', '16'), +('3', '88', '14', '111535', '214660', '16'), +('3', '88', '14', '111538', '214176', '16'), +('3', '88', '11', '111529', '259941', '16'), +('3', '88', '11', '111229', '240728', '16'), +('3', '88', '11', '111338', '210227', '16'), +('3', '88', '11', '111336', '209944', '16'), +('3', '89', '22', '7867', '0', '16'), +('3', '89', '22', '39342', '0', '16'), +('3', '89', '22', '23597', '0', '16'), +('3', '89', '22', '66166', '0', '16'), +('3', '89', '1', '111309', '210770', '16'), +('3', '89', '1', '111303', '209992', '16'), +('3', '89', '1', '111305', '208727', '16'), +('3', '89', '1', '111300', '208644', '16'), +('3', '89', '2', '94056', '132823', '16'), +('3', '89', '2', '62985', '132132', '16'), +('3', '89', '2', '89368', '126230', '16'), +('3', '89', '2', '104403', '111527', '16'), +('3', '89', '3', '111312', '210079', '16'), +('3', '89', '3', '111315', '209208', '16'), +('3', '89', '3', '111313', '209166', '16'), +('3', '89', '3', '111316', '207110', '16'), +('3', '89', '5', '111317', '209680', '16'), +('3', '89', '5', '111318', '208750', '16'), +('3', '89', '5', '111320', '208697', '16'), +('3', '89', '5', '111319', '206748', '16'), +('3', '89', '8', '111331', '210981', '16'), +('3', '89', '8', '111328', '210052', '16'), +('3', '89', '8', '111332', '207110', '16'), +('3', '89', '8', '111030', '185201', '16'), +('3', '89', '6', '111322', '209228', '16'), +('3', '89', '6', '111324', '209135', '16'), +('3', '89', '6', '111326', '206830', '16'), +('3', '89', '6', '111021', '183498', '16'), +('3', '89', '17', '56046', '139156', '16'), +('3', '89', '17', '81765', '138596', '16'), +('3', '89', '17', '56083', '138115', '16'), +('3', '89', '17', '104406', '118788', '16'), +('3', '89', '7', '94053', '133354', '16'), +('3', '89', '7', '56079', '132727', '16'), +('3', '89', '7', '89369', '127505', '16'), +('3', '89', '7', '104404', '111423', '16'), +('3', '89', '9', '67098', '213757', '16'), +('3', '89', '9', '56031', '128756', '16'), +('3', '89', '9', '56033', '128671', '16'), +('3', '89', '9', '62992', '128584', '16'), +('3', '89', '15', '111348', '210414', '16'), +('3', '89', '15', '111343', '210162', '16'), +('3', '89', '15', '111341', '209725', '16'), +('3', '89', '15', '111342', '208975', '16'), +('3', '89', '20', '111354', '234801', '16'), +('3', '89', '20', '111355', '232662', '16'), +('3', '89', '20', '111353', '231728', '16'), +('3', '89', '20', '111351', '231421', '16'), +('3', '89', '12', '81795', '129984', '16'), +('3', '89', '12', '56073', '129794', '16'), +('3', '89', '12', '89366', '123427', '16'), +('3', '89', '12', '104401', '110017', '16'), +('3', '89', '18', '62986', '135718', '16'), +('3', '89', '18', '56041', '135531', '16'), +('3', '89', '18', '62987', '134419', '16'), +('3', '89', '18', '94054', '134178', '16'), +('3', '89', '19', '62990', '133761', '16'), +('3', '89', '19', '56037', '133349', '16'), +('3', '89', '19', '56075', '132592', '16'), +('3', '89', '19', '81763', '132085', '16'), +('3', '89', '13', '111526', '421683', '16'), +('3', '89', '13', '111514', '405176', '16'), +('3', '89', '13', '111520', '401208', '16'), +('3', '89', '13', '111525', '399656', '16'), +('3', '89', '14', '111536', '215989', '16'), +('3', '89', '14', '111539', '215053', '16'), +('3', '89', '14', '111535', '214666', '16'), +('3', '89', '14', '111538', '214180', '16'), +('3', '89', '11', '111529', '260012', '16'), +('3', '89', '11', '111229', '240799', '16'), +('3', '89', '11', '111338', '210232', '16'), +('3', '89', '11', '111336', '209950', '16'), +('3', '90', '22', '7867', '0', '17'), +('3', '90', '22', '39342', '0', '17'), +('3', '90', '22', '23597', '0', '17'), +('3', '90', '22', '66166', '0', '17'), +('3', '90', '1', '111309', '210775', '17'), +('3', '90', '1', '111303', '209998', '17'), +('3', '90', '1', '111305', '208733', '17'), +('3', '90', '1', '111300', '208648', '17'), +('3', '90', '2', '94056', '132828', '17'), +('3', '90', '2', '62985', '132136', '17'), +('3', '90', '2', '89368', '126235', '17'), +('3', '90', '2', '104403', '111531', '17'), +('3', '90', '3', '111312', '210084', '17'), +('3', '90', '3', '111315', '209215', '17'), +('3', '90', '3', '111313', '209171', '17'), +('3', '90', '3', '111316', '207115', '17'), +('3', '90', '5', '111317', '209687', '17'), +('3', '90', '5', '111318', '208754', '17'), +('3', '90', '5', '111320', '208702', '17'), +('3', '90', '5', '111319', '206754', '17'), +('3', '90', '8', '111331', '210987', '17'), +('3', '90', '8', '111328', '210057', '17'), +('3', '90', '8', '111332', '207115', '17'), +('3', '90', '8', '111030', '185207', '17'), +('3', '90', '6', '111322', '209232', '17'), +('3', '90', '6', '111324', '209141', '17'), +('3', '90', '6', '111326', '206836', '17'), +('3', '90', '6', '111021', '183502', '17'), +('3', '90', '17', '56046', '139163', '17'), +('3', '90', '17', '81765', '138600', '17'), +('3', '90', '17', '56083', '138118', '17'), +('3', '90', '17', '104406', '118795', '17'), +('3', '90', '7', '94053', '133360', '17'), +('3', '90', '7', '56079', '132733', '17'), +('3', '90', '7', '89369', '127510', '17'), +('3', '90', '7', '104404', '111429', '17'), +('3', '90', '9', '67098', '216163', '17'), +('3', '90', '9', '56031', '128760', '17'), +('3', '90', '9', '56033', '128675', '17'), +('3', '90', '9', '62992', '128590', '17'), +('3', '90', '15', '111348', '210420', '17'), +('3', '90', '15', '111343', '210167', '17'), +('3', '90', '15', '111341', '209732', '17'), +('3', '90', '15', '111342', '208981', '17'), +('3', '90', '20', '111354', '234806', '17'), +('3', '90', '20', '111355', '232666', '17'), +('3', '90', '20', '111353', '231734', '17'), +('3', '90', '20', '111351', '231425', '17'), +('3', '90', '12', '81795', '129990', '17'), +('3', '90', '12', '56073', '129801', '17'), +('3', '90', '12', '89366', '123432', '17'), +('3', '90', '12', '104401', '110023', '17'), +('3', '90', '18', '62986', '135726', '17'), +('3', '90', '18', '56041', '135535', '17'), +('3', '90', '18', '62987', '134422', '17'), +('3', '90', '18', '94054', '134183', '17'), +('3', '90', '19', '62990', '133766', '17'), +('3', '90', '19', '56037', '133355', '17'), +('3', '90', '19', '56075', '132598', '17'), +('3', '90', '19', '81763', '132091', '17'), +('3', '90', '13', '111526', '422225', '17'), +('3', '90', '13', '111514', '405720', '17'), +('3', '90', '13', '111520', '401722', '17'), +('3', '90', '13', '111525', '400170', '17'), +('3', '90', '14', '111536', '215994', '17'), +('3', '90', '14', '111539', '215058', '17'), +('3', '90', '14', '111535', '214672', '17'), +('3', '90', '14', '111538', '214185', '17'), +('3', '90', '11', '111529', '260093', '17'), +('3', '90', '11', '111229', '240880', '17'), +('3', '90', '11', '111338', '210238', '17'), +('3', '90', '11', '111336', '209956', '17'), +('3', '91', '22', '7867', '0', '17'), +('3', '91', '22', '39342', '0', '17'), +('3', '91', '22', '23597', '0', '17'), +('3', '91', '22', '66166', '0', '17'), +('3', '91', '1', '111309', '210779', '17'), +('3', '91', '1', '111303', '210004', '17'), +('3', '91', '1', '111305', '208739', '17'), +('3', '91', '1', '111300', '208652', '17'), +('3', '91', '2', '94056', '132833', '17'), +('3', '91', '2', '62985', '132141', '17'), +('3', '91', '2', '89368', '126241', '17'), +('3', '91', '2', '104403', '111536', '17'), +('3', '91', '3', '111312', '210090', '17'), +('3', '91', '3', '111315', '209222', '17'), +('3', '91', '3', '111313', '209176', '17'), +('3', '91', '3', '111316', '207121', '17'), +('3', '91', '5', '111317', '209693', '17'), +('3', '91', '5', '111318', '208758', '17'), +('3', '91', '5', '111320', '208707', '17'), +('3', '91', '5', '111319', '206760', '17'), +('3', '91', '8', '111331', '210993', '17'), +('3', '91', '8', '111328', '210063', '17'), +('3', '91', '8', '111332', '207119', '17'), +('3', '91', '8', '111030', '185213', '17'), +('3', '91', '6', '111322', '209236', '17'), +('3', '91', '6', '111324', '209146', '17'), +('3', '91', '6', '111326', '206842', '17'), +('3', '91', '6', '111021', '183506', '17'), +('3', '91', '17', '56046', '139170', '17'), +('3', '91', '17', '81765', '138605', '17'), +('3', '91', '17', '56083', '138121', '17'), +('3', '91', '17', '104406', '118803', '17'), +('3', '91', '7', '94053', '133365', '17'), +('3', '91', '7', '56079', '132738', '17'), +('3', '91', '7', '89369', '127516', '17'), +('3', '91', '7', '104404', '111434', '17'), +('3', '91', '9', '67098', '216168', '17'), +('3', '91', '9', '56031', '128764', '17'), +('3', '91', '9', '56033', '128678', '17'), +('3', '91', '9', '62992', '128595', '17'), +('3', '91', '15', '111348', '210427', '17'), +('3', '91', '15', '111343', '210171', '17'), +('3', '91', '15', '111341', '209739', '17'), +('3', '91', '15', '111342', '208987', '17'), +('3', '91', '20', '111354', '234812', '17'), +('3', '91', '20', '111355', '232670', '17'), +('3', '91', '20', '111353', '231740', '17'), +('3', '91', '20', '111351', '231430', '17'), +('3', '91', '12', '81795', '129996', '17'), +('3', '91', '12', '56073', '129808', '17'), +('3', '91', '12', '89366', '123437', '17'), +('3', '91', '12', '104401', '110029', '17'), +('3', '91', '18', '62986', '135733', '17'), +('3', '91', '18', '56041', '135538', '17'), +('3', '91', '18', '62987', '134426', '17'), +('3', '91', '18', '94054', '134189', '17'), +('3', '91', '19', '62990', '133771', '17'), +('3', '91', '19', '56037', '133361', '17'), +('3', '91', '19', '56075', '132603', '17'), +('3', '91', '19', '81763', '132097', '17'), +('3', '91', '13', '111526', '422768', '17'), +('3', '91', '13', '111514', '406234', '17'), +('3', '91', '13', '111520', '402237', '17'), +('3', '91', '13', '111525', '400685', '17'), +('3', '91', '14', '111536', '215999', '17'), +('3', '91', '14', '111539', '215064', '17'), +('3', '91', '14', '111535', '214678', '17'), +('3', '91', '14', '111538', '214189', '17'), +('3', '91', '11', '111529', '260174', '17'), +('3', '91', '11', '111229', '240952', '17'), +('3', '91', '11', '111338', '210243', '17'), +('3', '91', '11', '111336', '209962', '17'), +('3', '92', '22', '7867', '0', '17'), +('3', '92', '22', '39342', '0', '17'), +('3', '92', '22', '23597', '0', '17'), +('3', '92', '22', '66166', '0', '17'), +('3', '92', '1', '111309', '210783', '17'), +('3', '92', '1', '111303', '210010', '17'), +('3', '92', '1', '111305', '208746', '17'), +('3', '92', '1', '111300', '208657', '17'), +('3', '92', '2', '94056', '132838', '17'), +('3', '92', '2', '62985', '132146', '17'), +('3', '92', '2', '89368', '126246', '17'), +('3', '92', '2', '104403', '111540', '17'), +('3', '92', '3', '111312', '210096', '17'), +('3', '92', '3', '111315', '209230', '17'), +('3', '92', '3', '111313', '209181', '17'), +('3', '92', '3', '111316', '207126', '17'), +('3', '92', '5', '111317', '209699', '17'), +('3', '92', '5', '111318', '208762', '17'), +('3', '92', '5', '111320', '208713', '17'), +('3', '92', '5', '111319', '206766', '17'), +('3', '92', '8', '111331', '211000', '17'), +('3', '92', '8', '111328', '210068', '17'), +('3', '92', '8', '111332', '207124', '17'), +('3', '92', '8', '111030', '185220', '17'), +('3', '92', '6', '111322', '209240', '17'), +('3', '92', '6', '111324', '209152', '17'), +('3', '92', '6', '111326', '206848', '17'), +('3', '92', '6', '111021', '183510', '17'), +('3', '92', '17', '56046', '139177', '17'), +('3', '92', '17', '81765', '138610', '17'), +('3', '92', '17', '56083', '138124', '17'), +('3', '92', '17', '104406', '118810', '17'), +('3', '92', '7', '94053', '133370', '17'), +('3', '92', '7', '56079', '132744', '17'), +('3', '92', '7', '89369', '127522', '17'), +('3', '92', '7', '104404', '111439', '17'), +('3', '92', '9', '67098', '216174', '17'), +('3', '92', '9', '56031', '128768', '17'), +('3', '92', '9', '56033', '128682', '17'), +('3', '92', '9', '62992', '128600', '17'), +('3', '92', '15', '111348', '210433', '17'), +('3', '92', '15', '111343', '210176', '17'), +('3', '92', '15', '111341', '209746', '17'), +('3', '92', '15', '111342', '208993', '17'), +('3', '92', '20', '111354', '234817', '17'), +('3', '92', '20', '111355', '232674', '17'), +('3', '92', '20', '111353', '231745', '17'), +('3', '92', '20', '111351', '231434', '17'), +('3', '92', '12', '81795', '130001', '17'), +('3', '92', '12', '56073', '129815', '17'), +('3', '92', '12', '89366', '123441', '17'), +('3', '92', '12', '104401', '110035', '17'), +('3', '92', '18', '62986', '135740', '17'), +('3', '92', '18', '56041', '135541', '17'), +('3', '92', '18', '62987', '134429', '17'), +('3', '92', '18', '94054', '134194', '17'), +('3', '92', '19', '62990', '133776', '17'), +('3', '92', '19', '56037', '133366', '17'), +('3', '92', '19', '56075', '132609', '17'), +('3', '92', '19', '81763', '132103', '17'), +('3', '92', '13', '111526', '423310', '17'), +('3', '92', '13', '111514', '406749', '17'), +('3', '92', '13', '111520', '402751', '17'), +('3', '92', '13', '111525', '401199', '17'), +('3', '92', '14', '111536', '216004', '17'), +('3', '92', '14', '111539', '215069', '17'), +('3', '92', '14', '111535', '214684', '17'), +('3', '92', '14', '111538', '214193', '17'), +('3', '92', '11', '111529', '260245', '17'), +('3', '92', '11', '111229', '241033', '17'), +('3', '92', '11', '111338', '210249', '17'), +('3', '92', '11', '111336', '209968', '17'), +('3', '93', '22', '7867', '0', '17'), +('3', '93', '22', '39342', '0', '17'), +('3', '93', '22', '23597', '0', '17'), +('3', '93', '22', '66166', '0', '17'), +('3', '93', '1', '111309', '210787', '17'), +('3', '93', '1', '111303', '210017', '17'), +('3', '93', '1', '111305', '208752', '17'), +('3', '93', '1', '111300', '208661', '17'), +('3', '93', '2', '94056', '132843', '17'), +('3', '93', '2', '62985', '132150', '17'), +('3', '93', '2', '89368', '126251', '17'), +('3', '93', '2', '104403', '111544', '17'), +('3', '93', '3', '111312', '210101', '17'), +('3', '93', '3', '111315', '209237', '17'), +('3', '93', '3', '111313', '209185', '17'), +('3', '93', '3', '111316', '207132', '17'), +('3', '93', '5', '111317', '209706', '17'), +('3', '93', '5', '111318', '208767', '17'), +('3', '93', '5', '111320', '208718', '17'), +('3', '93', '5', '111319', '206773', '17'), +('3', '93', '8', '111331', '211006', '17'), +('3', '93', '8', '111328', '210074', '17'), +('3', '93', '8', '111332', '207129', '17'), +('3', '93', '8', '111030', '185226', '17'), +('3', '93', '6', '111322', '209245', '17'), +('3', '93', '6', '111324', '209158', '17'), +('3', '93', '6', '111326', '206854', '17'), +('3', '93', '6', '111021', '183515', '17'), +('3', '93', '17', '56046', '139184', '17'), +('3', '93', '17', '81765', '138614', '17'), +('3', '93', '17', '56083', '138128', '17'), +('3', '93', '17', '104406', '118817', '17'), +('3', '93', '7', '94053', '133375', '17'), +('3', '93', '7', '56079', '132750', '17'), +('3', '93', '7', '89369', '127527', '17'), +('3', '93', '7', '104404', '111445', '17'), +('3', '93', '9', '67098', '216179', '17'), +('3', '93', '9', '56031', '128772', '17'), +('3', '93', '9', '56033', '128686', '17'), +('3', '93', '9', '62992', '128606', '17'), +('3', '93', '15', '111348', '210440', '17'), +('3', '93', '15', '111343', '210180', '17'), +('3', '93', '15', '111341', '209752', '17'), +('3', '93', '15', '111342', '209000', '17'), +('3', '93', '20', '111354', '234823', '17'), +('3', '93', '20', '111355', '232678', '17'), +('3', '93', '20', '111353', '231751', '17'), +('3', '93', '20', '111351', '231438', '17'), +('3', '93', '12', '81795', '130007', '17'), +('3', '93', '12', '56073', '129822', '17'), +('3', '93', '12', '89366', '123446', '17'), +('3', '93', '12', '104401', '110041', '17'), +('3', '93', '18', '62986', '135748', '17'), +('3', '93', '18', '56041', '135545', '17'), +('3', '93', '18', '62987', '134433', '17'), +('3', '93', '18', '94054', '134199', '17'), +('3', '93', '19', '62990', '133781', '17'), +('3', '93', '19', '56037', '133372', '17'), +('3', '93', '19', '56075', '132615', '17'), +('3', '93', '19', '81763', '132108', '17'), +('3', '93', '13', '111526', '423853', '17'), +('3', '93', '13', '111514', '407264', '17'), +('3', '93', '13', '111520', '403265', '17'), +('3', '93', '13', '111525', '401714', '17'), +('3', '93', '14', '111536', '216009', '17'), +('3', '93', '14', '111539', '215075', '17'), +('3', '93', '14', '111535', '214690', '17'), +('3', '93', '14', '111538', '214198', '17'), +('3', '93', '11', '111529', '260325', '17'), +('3', '93', '11', '111229', '241104', '17'), +('3', '93', '11', '111338', '210255', '17'), +('3', '93', '11', '111336', '209974', '17'), +('3', '94', '22', '7867', '0', '17'), +('3', '94', '22', '39342', '0', '17'), +('3', '94', '22', '23597', '0', '17'), +('3', '94', '22', '66166', '0', '17'), +('3', '94', '1', '111309', '210791', '17'), +('3', '94', '1', '111303', '210023', '17'), +('3', '94', '1', '111305', '208758', '17'), +('3', '94', '1', '111300', '208665', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '94', '2', '94056', '132847', '17'), +('3', '94', '2', '62985', '132155', '17'), +('3', '94', '2', '89368', '126257', '17'), +('3', '94', '2', '104403', '111548', '17'), +('3', '94', '3', '111312', '210107', '17'), +('3', '94', '3', '111315', '209244', '17'), +('3', '94', '3', '111313', '209190', '17'), +('3', '94', '3', '111316', '207137', '17'), +('3', '94', '5', '111317', '209712', '17'), +('3', '94', '5', '111318', '208771', '17'), +('3', '94', '5', '111320', '208723', '17'), +('3', '94', '5', '111319', '206779', '17'), +('3', '94', '8', '111331', '211013', '17'), +('3', '94', '8', '111328', '210079', '17'), +('3', '94', '8', '111332', '207134', '17'), +('3', '94', '8', '111030', '185233', '17'), +('3', '94', '6', '111322', '209249', '17'), +('3', '94', '6', '111324', '209163', '17'), +('3', '94', '6', '111326', '206860', '17'), +('3', '94', '6', '111021', '183519', '17'), +('3', '94', '17', '56046', '139191', '17'), +('3', '94', '17', '81765', '138619', '17'), +('3', '94', '17', '56083', '138131', '17'), +('3', '94', '17', '104406', '118824', '17'), +('3', '94', '7', '94053', '133381', '17'), +('3', '94', '7', '56079', '132756', '17'), +('3', '94', '7', '89369', '127533', '17'), +('3', '94', '7', '104404', '111450', '17'), +('3', '94', '9', '67098', '216184', '17'), +('3', '94', '9', '56031', '128775', '17'), +('3', '94', '9', '56033', '128690', '17'), +('3', '94', '9', '62992', '128611', '17'), +('3', '94', '15', '111348', '210447', '17'), +('3', '94', '15', '111343', '210185', '17'), +('3', '94', '15', '111341', '209759', '17'), +('3', '94', '15', '111342', '209006', '17'), +('3', '94', '20', '111354', '234829', '17'), +('3', '94', '20', '111355', '232682', '17'), +('3', '94', '20', '111353', '231756', '17'), +('3', '94', '20', '111351', '231443', '17'), +('3', '94', '12', '81795', '130013', '17'), +('3', '94', '12', '56073', '129829', '17'), +('3', '94', '12', '89366', '123450', '17'), +('3', '94', '12', '104401', '110047', '17'), +('3', '94', '18', '62986', '135755', '17'), +('3', '94', '18', '56041', '135548', '17'), +('3', '94', '18', '62987', '134436', '17'), +('3', '94', '18', '94054', '134205', '17'), +('3', '94', '19', '62990', '133786', '17'), +('3', '94', '19', '56037', '133378', '17'), +('3', '94', '19', '56075', '132621', '17'), +('3', '94', '19', '81763', '132114', '17'), +('3', '94', '13', '111526', '424367', '17'), +('3', '94', '13', '111514', '407778', '17'), +('3', '94', '13', '111520', '403779', '17'), +('3', '94', '13', '111525', '402228', '17'), +('3', '94', '14', '111536', '216013', '17'), +('3', '94', '14', '111539', '215080', '17'), +('3', '94', '14', '111535', '214697', '17'), +('3', '94', '14', '111538', '214202', '17'), +('3', '94', '11', '111529', '260406', '17'), +('3', '94', '11', '111229', '241176', '17'), +('3', '94', '11', '111338', '210261', '17'), +('3', '94', '11', '111336', '209980', '17'), +('3', '95', '22', '23597', '0', '18'), +('3', '95', '22', '7867', '0', '18'), +('3', '95', '22', '39342', '0', '18'), +('3', '95', '22', '66166', '0', '18'), +('3', '95', '1', '111309', '210796', '18'), +('3', '95', '1', '111303', '210029', '18'), +('3', '95', '1', '111305', '208765', '18'), +('3', '95', '1', '111300', '208670', '18'), +('3', '95', '2', '94056', '132852', '18'), +('3', '95', '2', '62985', '132159', '18'), +('3', '95', '2', '89368', '126262', '18'), +('3', '95', '2', '104403', '111552', '18'), +('3', '95', '3', '111312', '210113', '18'), +('3', '95', '3', '111315', '209251', '18'), +('3', '95', '3', '111313', '209195', '18'), +('3', '95', '3', '111316', '207142', '18'), +('3', '95', '5', '111317', '209718', '18'), +('3', '95', '5', '111318', '208775', '18'), +('3', '95', '5', '111320', '208729', '18'), +('3', '95', '5', '111319', '206785', '18'), +('3', '95', '8', '111331', '211019', '18'), +('3', '95', '8', '111328', '210084', '18'), +('3', '95', '8', '111332', '207138', '18'), +('3', '95', '8', '111030', '185239', '18'), +('3', '95', '6', '111322', '209253', '18'), +('3', '95', '6', '111324', '209169', '18'), +('3', '95', '6', '111326', '206867', '18'), +('3', '95', '6', '111021', '183523', '18'), +('3', '95', '17', '56046', '139198', '18'), +('3', '95', '17', '81765', '138623', '18'), +('3', '95', '17', '56083', '138134', '18'), +('3', '95', '17', '104406', '118831', '18'), +('3', '95', '7', '94053', '133386', '18'), +('3', '95', '7', '56079', '132762', '18'), +('3', '95', '7', '89369', '127538', '18'), +('3', '95', '7', '104404', '111456', '18'), +('3', '95', '9', '67098', '216189', '18'), +('3', '95', '9', '56031', '128779', '18'), +('3', '95', '9', '56033', '128693', '18'), +('3', '95', '9', '62992', '128617', '18'), +('3', '95', '15', '111348', '210453', '18'), +('3', '95', '15', '111343', '210189', '18'), +('3', '95', '15', '111341', '209766', '18'), +('3', '95', '15', '111342', '209012', '18'), +('3', '95', '20', '111354', '234834', '18'), +('3', '95', '20', '111355', '232685', '18'), +('3', '95', '20', '111353', '231762', '18'), +('3', '95', '20', '111351', '231447', '18'), +('3', '95', '12', '81795', '130018', '18'), +('3', '95', '12', '56073', '129836', '18'), +('3', '95', '12', '89366', '123455', '18'), +('3', '95', '12', '104401', '110053', '18'), +('3', '95', '18', '62986', '135763', '18'), +('3', '95', '18', '56041', '135551', '18'), +('3', '95', '18', '62987', '134440', '18'), +('3', '95', '18', '94054', '134210', '18'), +('3', '95', '19', '62990', '133790', '18'), +('3', '95', '19', '56037', '133384', '18'), +('3', '95', '19', '56075', '132627', '18'), +('3', '95', '19', '81763', '132120', '18'), +('3', '95', '13', '111526', '424909', '18'), +('3', '95', '13', '111514', '408293', '18'), +('3', '95', '13', '111520', '404293', '18'), +('3', '95', '13', '111525', '402743', '18'), +('3', '95', '14', '111536', '216018', '18'), +('3', '95', '14', '111539', '215086', '18'), +('3', '95', '14', '111535', '214703', '18'), +('3', '95', '14', '111538', '214207', '18'), +('3', '95', '11', '111529', '260487', '18'), +('3', '95', '11', '111229', '241257', '18'), +('3', '95', '11', '111338', '210266', '18'), +('3', '95', '11', '111336', '209986', '18'), +('3', '96', '22', '23597', '0', '18'), +('3', '96', '22', '7867', '0', '18'), +('3', '96', '22', '39342', '0', '18'), +('3', '96', '22', '66166', '0', '18'), +('3', '96', '1', '111309', '210800', '18'), +('3', '96', '1', '111303', '210035', '18'), +('3', '96', '1', '111305', '208771', '18'), +('3', '96', '1', '111300', '208674', '18'), +('3', '96', '2', '94056', '132857', '18'), +('3', '96', '2', '62985', '132164', '18'), +('3', '96', '2', '89368', '126268', '18'), +('3', '96', '2', '104403', '111556', '18'), +('3', '96', '3', '111312', '210118', '18'), +('3', '96', '3', '111315', '209258', '18'), +('3', '96', '3', '111313', '209200', '18'), +('3', '96', '3', '111316', '207148', '18'), +('3', '96', '5', '111317', '209725', '18'), +('3', '96', '5', '111318', '208779', '18'), +('3', '96', '5', '111320', '208734', '18'), +('3', '96', '5', '111319', '206791', '18'), +('3', '96', '8', '111331', '211026', '18'), +('3', '96', '8', '111328', '210090', '18'), +('3', '96', '8', '111332', '207143', '18'), +('3', '96', '8', '111030', '185246', '18'), +('3', '96', '6', '111322', '209257', '18'), +('3', '96', '6', '111324', '209174', '18'), +('3', '96', '6', '111326', '206873', '18'), +('3', '96', '6', '111021', '183527', '18'), +('3', '96', '17', '56046', '139205', '18'), +('3', '96', '17', '81765', '138628', '18'), +('3', '96', '17', '56083', '138137', '18'), +('3', '96', '17', '104406', '118839', '18'), +('3', '96', '7', '94053', '133391', '18'), +('3', '96', '7', '56079', '132768', '18'), +('3', '96', '7', '89369', '127544', '18'), +('3', '96', '7', '104404', '111461', '18'), +('3', '96', '9', '67098', '216194', '18'), +('3', '96', '9', '56031', '128783', '18'), +('3', '96', '9', '56033', '128697', '18'), +('3', '96', '9', '62992', '128622', '18'), +('3', '96', '15', '111348', '210460', '18'), +('3', '96', '15', '111343', '210194', '18'), +('3', '96', '15', '111341', '209772', '18'), +('3', '96', '15', '111342', '209018', '18'), +('3', '96', '20', '111354', '234840', '18'), +('3', '96', '20', '111355', '232689', '18'), +('3', '96', '20', '111353', '231767', '18'), +('3', '96', '20', '111351', '231451', '18'), +('3', '96', '12', '81795', '130024', '18'), +('3', '96', '12', '56073', '129843', '18'), +('3', '96', '12', '89366', '123460', '18'), +('3', '96', '12', '104401', '110060', '18'), +('3', '96', '18', '62986', '135770', '18'), +('3', '96', '18', '56041', '135555', '18'), +('3', '96', '18', '62987', '134443', '18'), +('3', '96', '18', '94054', '134215', '18'), +('3', '96', '19', '62990', '133795', '18'), +('3', '96', '19', '56037', '133389', '18'), +('3', '96', '19', '56075', '132633', '18'), +('3', '96', '19', '81763', '132126', '18'), +('3', '96', '13', '111526', '425452', '18'), +('3', '96', '13', '111514', '408836', '18'), +('3', '96', '13', '111520', '404807', '18'), +('3', '96', '13', '111525', '403257', '18'), +('3', '96', '14', '111536', '216023', '18'), +('3', '96', '14', '111539', '215091', '18'), +('3', '96', '14', '111535', '214709', '18'), +('3', '96', '14', '111538', '214211', '18'), +('3', '96', '11', '111529', '260558', '18'), +('3', '96', '11', '111229', '241328', '18'), +('3', '96', '11', '111338', '210272', '18'), +('3', '96', '11', '111336', '209993', '18'), +('3', '97', '22', '23597', '0', '18'), +('3', '97', '22', '7867', '0', '18'), +('3', '97', '22', '39342', '0', '18'), +('3', '97', '22', '66166', '0', '18'), +('3', '97', '1', '111309', '210804', '18'), +('3', '97', '1', '111303', '210041', '18'), +('3', '97', '1', '111305', '208778', '18'), +('3', '97', '1', '111300', '208679', '18'), +('3', '97', '2', '94056', '132862', '18'), +('3', '97', '2', '62985', '132169', '18'), +('3', '97', '2', '89368', '126273', '18'), +('3', '97', '2', '104403', '111560', '18'), +('3', '97', '3', '111312', '210124', '18'), +('3', '97', '3', '111315', '209266', '18'), +('3', '97', '3', '111313', '209205', '18'), +('3', '97', '3', '111316', '207153', '18'), +('3', '97', '5', '111317', '209731', '18'), +('3', '97', '5', '111318', '208784', '18'), +('3', '97', '5', '111320', '208739', '18'), +('3', '97', '5', '111319', '206798', '18'), +('3', '97', '8', '111331', '211032', '18'), +('3', '97', '8', '111328', '210095', '18'), +('3', '97', '8', '111332', '207148', '18'), +('3', '97', '8', '111030', '185252', '18'), +('3', '97', '6', '111322', '209261', '18'), +('3', '97', '6', '111324', '209180', '18'), +('3', '97', '6', '111326', '206879', '18'), +('3', '97', '6', '111021', '183531', '18'), +('3', '97', '17', '56046', '139212', '18'), +('3', '97', '17', '81765', '138633', '18'), +('3', '97', '17', '56083', '138140', '18'), +('3', '97', '17', '104406', '118846', '18'), +('3', '97', '7', '94053', '133396', '18'), +('3', '97', '7', '56079', '132773', '18'), +('3', '97', '7', '89369', '127549', '18'), +('3', '97', '7', '104404', '111466', '18'), +('3', '97', '9', '67098', '216199', '18'), +('3', '97', '9', '56031', '128787', '18'), +('3', '97', '9', '56033', '128701', '18'), +('3', '97', '9', '62992', '128627', '18'), +('3', '97', '15', '111348', '210466', '18'), +('3', '97', '15', '111343', '210198', '18'), +('3', '97', '15', '111341', '209779', '18'), +('3', '97', '15', '111342', '209025', '18'), +('3', '97', '20', '111354', '234845', '18'), +('3', '97', '20', '111355', '232693', '18'), +('3', '97', '20', '111353', '231773', '18'), +('3', '97', '20', '111351', '231455', '18'), +('3', '97', '12', '81795', '130030', '18'), +('3', '97', '12', '56073', '129850', '18'), +('3', '97', '12', '89366', '123464', '18'), +('3', '97', '12', '104401', '110066', '18'), +('3', '97', '18', '62986', '135778', '18'), +('3', '97', '18', '56041', '135558', '18'), +('3', '97', '18', '62987', '134447', '18'), +('3', '97', '18', '94054', '134220', '18'), +('3', '97', '19', '62990', '133800', '18'), +('3', '97', '19', '56037', '133395', '18'), +('3', '97', '19', '56075', '132639', '18'), +('3', '97', '19', '81763', '132132', '18'), +('3', '97', '13', '111526', '425995', '18'), +('3', '97', '13', '111514', '409351', '18'), +('3', '97', '13', '111520', '405321', '18'), +('3', '97', '13', '111525', '403771', '18'), +('3', '97', '14', '111536', '216028', '18'), +('3', '97', '14', '111539', '215097', '18'), +('3', '97', '14', '111535', '214715', '18'), +('3', '97', '14', '111538', '214216', '18'), +('3', '97', '11', '111529', '260639', '18'), +('3', '97', '11', '111229', '241409', '18'), +('3', '97', '11', '111338', '210278', '18'), +('3', '97', '11', '111336', '209999', '18'), +('3', '98', '22', '23597', '0', '18'), +('3', '98', '22', '7867', '0', '18'), +('3', '98', '22', '39342', '0', '18'), +('3', '98', '22', '66166', '0', '18'), +('3', '98', '1', '111309', '210808', '18'), +('3', '98', '1', '111303', '210047', '18'), +('3', '98', '1', '111305', '208784', '18'), +('3', '98', '1', '111300', '208683', '18'), +('3', '98', '2', '94056', '132867', '18'), +('3', '98', '2', '62985', '132173', '18'), +('3', '98', '2', '89368', '126278', '18'), +('3', '98', '2', '104403', '111565', '18'), +('3', '98', '3', '111312', '210130', '18'), +('3', '98', '3', '111315', '209273', '18'), +('3', '98', '3', '111313', '209209', '18'), +('3', '98', '3', '111316', '207159', '18'), +('3', '98', '5', '111317', '209737', '18'), +('3', '98', '5', '111318', '208788', '18'), +('3', '98', '5', '111320', '208745', '18'), +('3', '98', '5', '111319', '206804', '18'), +('3', '98', '8', '111331', '211038', '18'), +('3', '98', '8', '111328', '210101', '18'), +('3', '98', '8', '111332', '207153', '18'), +('3', '98', '8', '111030', '185258', '18'), +('3', '98', '6', '111322', '209265', '18'), +('3', '98', '6', '111324', '209185', '18'), +('3', '98', '6', '111326', '206885', '18'), +('3', '98', '6', '111021', '183535', '18'), +('3', '98', '17', '56046', '139219', '18'), +('3', '98', '17', '81765', '138637', '18'), +('3', '98', '17', '56083', '138144', '18'), +('3', '98', '17', '104406', '118853', '18'), +('3', '98', '7', '94053', '133401', '18'), +('3', '98', '7', '56079', '132779', '18'), +('3', '98', '7', '89369', '127555', '18'), +('3', '98', '7', '104404', '111472', '18'), +('3', '98', '9', '67098', '216204', '18'), +('3', '98', '9', '56031', '128791', '18'), +('3', '98', '9', '56033', '128705', '18'), +('3', '98', '9', '62992', '128633', '18'), +('3', '98', '15', '111348', '210473', '18'), +('3', '98', '15', '111343', '210203', '18'), +('3', '98', '15', '111341', '209786', '18'), +('3', '98', '15', '111342', '209031', '18'), +('3', '98', '20', '111354', '234851', '18'), +('3', '98', '20', '111355', '232697', '18'), +('3', '98', '20', '111353', '231779', '18'), +('3', '98', '20', '111351', '231460', '18'), +('3', '98', '12', '81795', '130035', '18'), +('3', '98', '12', '56073', '129857', '18'), +('3', '98', '12', '89366', '123469', '18'), +('3', '98', '12', '104401', '110072', '18'), +('3', '98', '18', '62986', '135785', '18'), +('3', '98', '18', '56041', '135562', '18'), +('3', '98', '18', '62987', '134450', '18'), +('3', '98', '18', '94054', '134226', '18'), +('3', '98', '19', '62990', '133805', '18'), +('3', '98', '19', '56037', '133401', '18'), +('3', '98', '19', '56075', '132645', '18'), +('3', '98', '19', '81763', '132138', '18'), +('3', '98', '13', '111526', '426537', '18'), +('3', '98', '13', '111514', '409865', '18'), +('3', '98', '13', '111520', '405836', '18'), +('3', '98', '13', '111525', '404286', '18'), +('3', '98', '14', '111536', '216033', '18'), +('3', '98', '14', '111539', '215102', '18'), +('3', '98', '14', '111535', '214721', '18'), +('3', '98', '14', '111538', '214220', '18'), +('3', '98', '11', '111529', '260719', '18'), +('3', '98', '11', '111229', '241481', '18'), +('3', '98', '11', '111338', '210284', '18'), +('3', '98', '11', '111336', '210005', '18'), +('3', '99', '22', '23597', '0', '18'), +('3', '99', '22', '7867', '0', '18'), +('3', '99', '22', '39342', '0', '18'), +('3', '99', '22', '66166', '0', '18'), +('3', '99', '1', '111309', '210812', '18'), +('3', '99', '1', '111303', '210053', '18'), +('3', '99', '1', '111305', '208790', '18'), +('3', '99', '1', '111300', '208687', '18'), +('3', '99', '2', '94056', '132871', '18'), +('3', '99', '2', '62985', '132178', '18'), +('3', '99', '2', '89368', '126284', '18'), +('3', '99', '2', '104403', '111569', '18'), +('3', '99', '3', '111312', '210136', '18'), +('3', '99', '3', '111315', '209280', '18'), +('3', '99', '3', '111313', '209214', '18'), +('3', '99', '3', '111316', '207164', '18'), +('3', '99', '5', '111317', '209743', '18'), +('3', '99', '5', '111318', '208792', '18'), +('3', '99', '5', '111320', '208750', '18'), +('3', '99', '5', '111319', '206810', '18'), +('3', '99', '8', '111331', '211045', '18'), +('3', '99', '8', '111328', '210106', '18'), +('3', '99', '8', '111332', '207157', '18'), +('3', '99', '8', '111030', '185265', '18'), +('3', '99', '6', '111322', '209269', '18'), +('3', '99', '6', '111324', '209191', '18'), +('3', '99', '6', '111326', '206891', '18'), +('3', '99', '6', '111021', '183539', '18'), +('3', '99', '17', '56046', '139226', '18'), +('3', '99', '17', '81765', '138642', '18'), +('3', '99', '17', '56083', '138147', '18'), +('3', '99', '17', '104406', '118860', '18'), +('3', '99', '7', '94053', '133407', '18'), +('3', '99', '7', '56079', '132785', '18'), +('3', '99', '7', '89369', '127560', '18'), +('3', '99', '7', '104404', '111477', '18'), +('3', '99', '9', '67098', '216209', '18'), +('3', '99', '9', '56031', '128795', '18'), +('3', '99', '9', '56033', '128708', '18'), +('3', '99', '9', '62992', '128638', '18'), +('3', '99', '15', '111348', '210480', '18'), +('3', '99', '15', '111343', '210208', '18'), +('3', '99', '15', '111341', '209793', '18'), +('3', '99', '15', '111342', '209037', '18'), +('3', '99', '20', '111354', '234856', '18'), +('3', '99', '20', '111355', '232701', '18'), +('3', '99', '20', '111353', '231784', '18'), +('3', '99', '20', '111351', '231464', '18'), +('3', '99', '12', '81795', '130041', '18'), +('3', '99', '12', '56073', '129864', '18'), +('3', '99', '12', '89366', '123474', '18'), +('3', '99', '12', '104401', '110078', '18'), +('3', '99', '18', '62986', '135793', '18'), +('3', '99', '18', '56041', '135565', '18'), +('3', '99', '18', '62987', '134454', '18'), +('3', '99', '18', '94054', '134231', '18'), +('3', '99', '19', '62990', '133810', '18'), +('3', '99', '19', '56037', '133406', '18'), +('3', '99', '19', '56075', '132651', '18'), +('3', '99', '19', '81763', '132143', '18'), +('3', '99', '13', '111526', '427080', '18'), +('3', '99', '13', '111514', '410380', '18'), +('3', '99', '13', '111520', '406350', '18'), +('3', '99', '13', '111525', '404800', '18'), +('3', '99', '14', '111536', '216037', '18'), +('3', '99', '14', '111539', '215108', '18'), +('3', '99', '14', '111535', '214727', '18'), +('3', '99', '14', '111538', '214224', '18'), +('3', '99', '11', '111529', '260790', '18'), +('3', '99', '11', '111229', '241552', '18'), +('3', '99', '11', '111338', '210290', '18'), +('3', '99', '11', '111336', '210011', '18'), +('3', '100', '22', '23597', '0', '20'), +('3', '100', '22', '7867', '0', '20'), +('3', '100', '22', '39342', '0', '20'), +('3', '100', '22', '66166', '0', '20'), +('3', '100', '1', '98769', '351508', '20'), +('3', '100', '1', '111309', '210817', '20'), +('3', '100', '1', '111303', '210059', '20'), +('3', '100', '1', '111305', '208797', '20'), +('3', '100', '2', '94056', '132876', '20'), +('3', '100', '2', '62985', '132183', '20'), +('3', '100', '2', '89368', '126289', '20'), +('3', '100', '2', '104403', '111573', '20'), +('3', '100', '3', '111312', '210142', '20'), +('3', '100', '3', '111315', '209288', '20'), +('3', '100', '3', '111313', '209219', '20'), +('3', '100', '3', '111316', '207170', '20'), +('3', '100', '5', '111317', '209750', '20'), +('3', '100', '5', '111318', '208797', '20'), +('3', '100', '5', '111320', '208756', '20'), +('3', '100', '5', '111319', '206817', '20'), +('3', '100', '8', '111331', '211052', '20'), +('3', '100', '8', '111328', '210112', '20'), +('3', '100', '8', '111332', '207162', '20'), +('3', '100', '8', '111030', '185272', '20'), +('3', '100', '6', '111322', '209274', '20'), +('3', '100', '6', '111324', '209196', '20'), +('3', '100', '6', '111326', '206897', '20'), +('3', '100', '6', '111021', '183544', '20'), +('3', '100', '17', '56046', '139233', '20'), +('3', '100', '17', '81765', '138647', '20'), +('3', '100', '17', '56083', '138150', '20'), +('3', '100', '17', '104406', '118868', '20'), +('3', '100', '7', '94053', '133412', '20'), +('3', '100', '7', '56079', '132791', '20'), +('3', '100', '7', '89369', '127566', '20'), +('3', '100', '7', '104404', '111483', '20'), +('3', '100', '9', '67098', '216214', '20'), +('3', '100', '9', '56031', '128799', '20'), +('3', '100', '9', '56033', '128712', '20'), +('3', '100', '9', '62992', '128644', '20'), +('3', '100', '15', '111348', '210487', '20'), +('3', '100', '15', '111343', '210212', '20'), +('3', '100', '15', '111341', '209800', '20'), +('3', '100', '15', '111342', '209044', '20'), +('3', '100', '20', '111354', '234862', '20'), +('3', '100', '20', '111355', '232705', '20'), +('3', '100', '20', '111353', '231790', '20'), +('3', '100', '20', '111351', '231469', '20'), +('3', '100', '12', '81795', '130047', '20'), +('3', '100', '12', '56073', '129871', '20'), +('3', '100', '12', '89366', '123478', '20'), +('3', '100', '12', '104401', '110084', '20'), +('3', '100', '18', '62986', '135800', '20'), +('3', '100', '18', '56041', '135568', '20'), +('3', '100', '18', '62987', '134457', '20'), +('3', '100', '18', '94054', '134237', '20'), +('3', '100', '19', '62990', '133815', '20'), +('3', '100', '19', '56037', '133412', '20'), +('3', '100', '19', '56075', '132657', '20'), +('3', '100', '19', '81763', '132149', '20'), +('3', '100', '13', '111526', '428897', '20'), +('3', '100', '13', '111514', '412170', '20'), +('3', '100', '13', '111520', '408139', '20'), +('3', '100', '13', '111525', '406562', '20'), +('3', '100', '14', '111536', '216043', '20'), +('3', '100', '14', '111539', '215113', '20'), +('3', '100', '14', '111535', '214734', '20'), +('3', '100', '14', '111538', '214229', '20'), +('3', '100', '11', '133816', '271495', '20'), +('3', '100', '11', '111529', '260871', '20'), +('3', '100', '11', '111229', '241633', '20'), +('3', '100', '11', '111338', '210296', '20'), +('3', '100', '22', '23597', '0', '19'), +('3', '100', '22', '7867', '0', '19'), +('3', '100', '22', '39342', '0', '19'), +('3', '100', '22', '66166', '0', '19'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '100', '1', '98769', '351508', '19'), +('3', '100', '1', '111309', '210817', '19'), +('3', '100', '1', '111303', '210059', '19'), +('3', '100', '1', '111305', '208797', '19'), +('3', '100', '2', '94056', '132876', '19'), +('3', '100', '2', '62985', '132183', '19'), +('3', '100', '2', '89368', '126289', '19'), +('3', '100', '2', '104403', '111573', '19'), +('3', '100', '3', '111312', '210142', '19'), +('3', '100', '3', '111315', '209288', '19'), +('3', '100', '3', '111313', '209219', '19'), +('3', '100', '3', '111316', '207170', '19'), +('3', '100', '5', '111317', '209750', '19'), +('3', '100', '5', '111318', '208797', '19'), +('3', '100', '5', '111320', '208756', '19'), +('3', '100', '5', '111319', '206817', '19'), +('3', '100', '8', '111331', '211052', '19'), +('3', '100', '8', '111328', '210112', '19'), +('3', '100', '8', '111332', '207162', '19'), +('3', '100', '8', '111030', '185272', '19'), +('3', '100', '6', '111322', '209274', '19'), +('3', '100', '6', '111324', '209196', '19'), +('3', '100', '6', '111326', '206897', '19'), +('3', '100', '6', '111021', '183544', '19'), +('3', '100', '17', '56046', '139233', '19'), +('3', '100', '17', '81765', '138647', '19'), +('3', '100', '17', '56083', '138150', '19'), +('3', '100', '17', '104406', '118868', '19'), +('3', '100', '7', '94053', '133412', '19'), +('3', '100', '7', '56079', '132791', '19'), +('3', '100', '7', '89369', '127566', '19'), +('3', '100', '7', '104404', '111483', '19'), +('3', '100', '9', '67098', '216214', '19'), +('3', '100', '9', '56031', '128799', '19'), +('3', '100', '9', '56033', '128712', '19'), +('3', '100', '9', '62992', '128644', '19'), +('3', '100', '15', '111348', '210487', '19'), +('3', '100', '15', '111343', '210212', '19'), +('3', '100', '15', '111341', '209800', '19'), +('3', '100', '15', '111342', '209044', '19'), +('3', '100', '20', '111354', '234862', '19'), +('3', '100', '20', '111355', '232705', '19'), +('3', '100', '20', '111353', '231790', '19'), +('3', '100', '20', '111351', '231469', '19'), +('3', '100', '12', '81795', '130047', '19'), +('3', '100', '12', '56073', '129871', '19'), +('3', '100', '12', '89366', '123478', '19'), +('3', '100', '12', '104401', '110084', '19'), +('3', '100', '18', '62986', '135800', '19'), +('3', '100', '18', '56041', '135568', '19'), +('3', '100', '18', '62987', '134457', '19'), +('3', '100', '18', '94054', '134237', '19'), +('3', '100', '19', '62990', '133815', '19'), +('3', '100', '19', '56037', '133412', '19'), +('3', '100', '19', '56075', '132657', '19'), +('3', '100', '19', '81763', '132149', '19'), +('3', '100', '13', '111526', '427622', '19'), +('3', '100', '13', '111514', '410895', '19'), +('3', '100', '13', '111520', '406864', '19'), +('3', '100', '13', '111525', '405287', '19'), +('3', '100', '14', '111536', '216043', '19'), +('3', '100', '14', '111539', '215113', '19'), +('3', '100', '14', '111535', '214734', '19'), +('3', '100', '14', '111538', '214229', '19'), +('3', '100', '11', '133816', '271495', '19'), +('3', '100', '11', '111529', '260871', '19'), +('3', '100', '11', '111229', '241633', '19'), +('3', '100', '11', '111338', '210296', '19'), +('3', '101', '22', '23597', '0', '20'), +('3', '101', '22', '7867', '0', '20'), +('3', '101', '22', '39342', '0', '20'), +('3', '101', '22', '66166', '0', '20'), +('3', '101', '1', '98769', '351512', '20'), +('3', '101', '1', '111309', '210821', '20'), +('3', '101', '1', '111303', '210065', '20'), +('3', '101', '1', '111305', '208803', '20'), +('3', '101', '2', '94056', '132881', '20'), +('3', '101', '2', '62985', '132187', '20'), +('3', '101', '2', '89368', '126295', '20'), +('3', '101', '2', '104403', '111577', '20'), +('3', '101', '3', '111312', '210147', '20'), +('3', '101', '3', '111315', '209295', '20'), +('3', '101', '3', '111313', '209224', '20'), +('3', '101', '3', '111316', '207175', '20'), +('3', '101', '5', '111317', '209756', '20'), +('3', '101', '5', '111318', '208801', '20'), +('3', '101', '5', '111320', '208761', '20'), +('3', '101', '5', '111319', '206823', '20'), +('3', '101', '8', '111331', '211058', '20'), +('3', '101', '8', '111328', '210117', '20'), +('3', '101', '8', '111332', '207167', '20'), +('3', '101', '8', '111030', '185278', '20'), +('3', '101', '6', '111322', '209278', '20'), +('3', '101', '6', '111324', '209202', '20'), +('3', '101', '6', '111326', '206904', '20'), +('3', '101', '6', '111021', '183548', '20'), +('3', '101', '17', '56046', '139240', '20'), +('3', '101', '17', '81765', '138651', '20'), +('3', '101', '17', '56083', '138153', '20'), +('3', '101', '17', '104406', '118875', '20'), +('3', '101', '7', '94053', '133417', '20'), +('3', '101', '7', '56079', '132797', '20'), +('3', '101', '7', '89369', '127572', '20'), +('3', '101', '7', '104404', '111488', '20'), +('3', '101', '9', '67098', '216219', '20'), +('3', '101', '9', '56031', '128803', '20'), +('3', '101', '9', '56033', '128716', '20'), +('3', '101', '9', '62992', '128649', '20'), +('3', '101', '15', '111348', '210493', '20'), +('3', '101', '15', '111343', '210217', '20'), +('3', '101', '15', '111341', '209806', '20'), +('3', '101', '15', '111342', '209050', '20'), +('3', '101', '20', '111354', '234868', '20'), +('3', '101', '20', '111355', '232709', '20'), +('3', '101', '20', '111353', '231796', '20'), +('3', '101', '20', '111351', '231473', '20'), +('3', '101', '12', '81795', '130053', '20'), +('3', '101', '12', '56073', '129878', '20'), +('3', '101', '12', '89366', '123483', '20'), +('3', '101', '12', '104401', '110091', '20'), +('3', '101', '18', '62986', '135808', '20'), +('3', '101', '18', '56041', '135572', '20'), +('3', '101', '18', '62987', '134461', '20'), +('3', '101', '18', '94054', '134242', '20'), +('3', '101', '19', '62990', '133820', '20'), +('3', '101', '19', '56037', '133418', '20'), +('3', '101', '19', '56075', '132663', '20'), +('3', '101', '19', '81763', '132155', '20'), +('3', '101', '13', '111526', '429440', '20'), +('3', '101', '13', '111514', '412685', '20'), +('3', '101', '13', '111520', '408653', '20'), +('3', '101', '13', '111525', '407076', '20'), +('3', '101', '14', '111536', '216047', '20'), +('3', '101', '14', '111539', '215119', '20'), +('3', '101', '14', '111535', '214740', '20'), +('3', '101', '14', '111538', '214234', '20'), +('3', '101', '11', '133816', '271499', '20'), +('3', '101', '11', '111529', '260952', '20'), +('3', '101', '11', '111229', '241705', '20'), +('3', '101', '11', '111338', '210301', '20'), +('3', '102', '22', '23597', '0', '20'), +('3', '102', '22', '7867', '0', '20'), +('3', '102', '22', '39342', '0', '20'), +('3', '102', '22', '66166', '0', '20'), +('3', '102', '1', '98769', '351516', '20'), +('3', '102', '1', '111309', '210825', '20'), +('3', '102', '1', '111303', '210071', '20'), +('3', '102', '1', '111305', '208810', '20'), +('3', '102', '2', '94056', '132886', '20'), +('3', '102', '2', '62985', '132192', '20'), +('3', '102', '2', '89368', '126300', '20'), +('3', '102', '2', '104403', '111581', '20'), +('3', '102', '3', '111312', '210153', '20'), +('3', '102', '3', '111315', '209302', '20'), +('3', '102', '3', '111313', '209229', '20'), +('3', '102', '3', '111316', '207180', '20'), +('3', '102', '5', '111317', '209763', '20'), +('3', '102', '5', '111318', '208805', '20'), +('3', '102', '5', '111320', '208766', '20'), +('3', '102', '5', '111319', '206829', '20'), +('3', '102', '8', '111331', '211064', '20'), +('3', '102', '8', '111328', '210123', '20'), +('3', '102', '8', '111332', '207172', '20'), +('3', '102', '8', '111030', '185284', '20'), +('3', '102', '6', '111322', '209282', '20'), +('3', '102', '6', '111324', '209208', '20'), +('3', '102', '6', '111326', '206910', '20'), +('3', '102', '6', '111021', '183552', '20'), +('3', '102', '17', '56046', '139247', '20'), +('3', '102', '17', '81765', '138656', '20'), +('3', '102', '17', '56083', '138156', '20'), +('3', '102', '17', '104406', '118882', '20'), +('3', '102', '7', '94053', '133423', '20'), +('3', '102', '7', '56079', '132803', '20'), +('3', '102', '7', '89369', '127577', '20'), +('3', '102', '7', '104404', '111494', '20'), +('3', '102', '9', '67098', '216224', '20'), +('3', '102', '9', '56031', '128807', '20'), +('3', '102', '9', '56033', '128720', '20'), +('3', '102', '9', '62992', '128655', '20'), +('3', '102', '15', '111348', '210500', '20'), +('3', '102', '15', '111343', '210222', '20'), +('3', '102', '15', '111341', '209813', '20'), +('3', '102', '15', '111342', '209056', '20'), +('3', '102', '20', '111354', '234873', '20'), +('3', '102', '20', '111355', '232712', '20'), +('3', '102', '20', '111353', '231801', '20'), +('3', '102', '20', '111351', '231477', '20'), +('3', '102', '12', '81795', '130059', '20'), +('3', '102', '12', '56073', '129885', '20'), +('3', '102', '12', '89366', '123488', '20'), +('3', '102', '12', '104401', '110097', '20'), +('3', '102', '18', '62986', '135815', '20'), +('3', '102', '18', '56041', '135575', '20'), +('3', '102', '18', '62987', '134464', '20'), +('3', '102', '18', '94054', '134247', '20'), +('3', '102', '19', '62990', '133825', '20'), +('3', '102', '19', '56037', '133424', '20'), +('3', '102', '19', '56075', '132669', '20'), +('3', '102', '19', '81763', '132161', '20'), +('3', '102', '13', '111526', '429982', '20'), +('3', '102', '13', '111514', '413228', '20'), +('3', '102', '13', '111520', '409167', '20'), +('3', '102', '13', '111525', '407591', '20'), +('3', '102', '14', '111536', '216052', '20'), +('3', '102', '14', '111539', '215124', '20'), +('3', '102', '14', '111535', '214746', '20'), +('3', '102', '14', '111538', '214238', '20'), +('3', '102', '11', '133816', '271504', '20'), +('3', '102', '11', '111529', '261033', '20'), +('3', '102', '11', '111229', '241786', '20'), +('3', '102', '11', '111338', '210307', '20'), +('3', '103', '22', '23597', '0', '20'), +('3', '103', '22', '7867', '0', '20'), +('3', '103', '22', '39342', '0', '20'), +('3', '103', '22', '66166', '0', '20'), +('3', '103', '1', '98769', '351520', '20'), +('3', '103', '1', '111309', '210830', '20'), +('3', '103', '1', '111303', '210078', '20'), +('3', '103', '1', '111305', '208816', '20'), +('3', '103', '2', '94056', '132891', '20'), +('3', '103', '2', '62985', '132197', '20'), +('3', '103', '2', '89368', '126306', '20'), +('3', '103', '2', '104403', '111586', '20'), +('3', '103', '3', '111312', '210159', '20'), +('3', '103', '3', '111315', '209310', '20'), +('3', '103', '3', '111313', '209234', '20'), +('3', '103', '3', '111316', '207186', '20'), +('3', '103', '5', '111317', '209769', '20'), +('3', '103', '5', '111318', '208810', '20'), +('3', '103', '5', '111320', '208772', '20'), +('3', '103', '5', '111319', '206836', '20'), +('3', '103', '8', '111331', '211071', '20'), +('3', '103', '8', '111328', '210128', '20'), +('3', '103', '8', '111332', '207177', '20'), +('3', '103', '8', '111030', '185291', '20'), +('3', '103', '6', '111322', '209286', '20'), +('3', '103', '6', '111324', '209213', '20'), +('3', '103', '6', '111326', '206916', '20'), +('3', '103', '6', '111021', '183556', '20'), +('3', '103', '17', '56046', '139254', '20'), +('3', '103', '17', '81765', '138661', '20'), +('3', '103', '17', '56083', '138160', '20'), +('3', '103', '17', '104406', '118890', '20'), +('3', '103', '7', '94053', '133428', '20'), +('3', '103', '7', '56079', '132809', '20'), +('3', '103', '7', '89369', '127583', '20'), +('3', '103', '7', '104404', '111499', '20'), +('3', '103', '9', '67098', '216230', '20'), +('3', '103', '9', '56031', '128811', '20'), +('3', '103', '9', '56033', '128723', '20'), +('3', '103', '9', '62992', '128660', '20'), +('3', '103', '15', '111348', '210507', '20'), +('3', '103', '15', '111343', '210226', '20'), +('3', '103', '15', '111341', '209820', '20'), +('3', '103', '15', '111342', '209063', '20'), +('3', '103', '20', '111354', '234879', '20'), +('3', '103', '20', '111355', '232717', '20'), +('3', '103', '20', '111353', '231807', '20'), +('3', '103', '20', '111351', '231482', '20'), +('3', '103', '12', '81795', '130065', '20'), +('3', '103', '12', '56073', '129893', '20'), +('3', '103', '12', '89366', '123493', '20'), +('3', '103', '12', '104401', '110103', '20'), +('3', '103', '18', '62986', '135823', '20'), +('3', '103', '18', '56041', '135579', '20'), +('3', '103', '18', '62987', '134468', '20'), +('3', '103', '18', '94054', '134253', '20'), +('3', '103', '19', '62990', '133830', '20'), +('3', '103', '19', '56037', '133430', '20'), +('3', '103', '19', '56075', '132675', '20'), +('3', '103', '19', '81763', '132167', '20'), +('3', '103', '13', '111526', '430525', '20'), +('3', '103', '13', '111514', '413743', '20'), +('3', '103', '13', '111520', '409682', '20'), +('3', '103', '13', '111525', '408105', '20'), +('3', '103', '14', '111536', '216057', '20'), +('3', '103', '14', '111539', '215130', '20'), +('3', '103', '14', '111535', '214753', '20'), +('3', '103', '14', '111538', '214243', '20'), +('3', '103', '11', '133816', '271509', '20'), +('3', '103', '11', '111529', '261104', '20'), +('3', '103', '11', '111229', '241858', '20'), +('3', '103', '11', '111338', '210313', '20'), +('3', '104', '22', '23597', '0', '20'), +('3', '104', '22', '7867', '0', '20'), +('3', '104', '22', '39342', '0', '20'), +('3', '104', '22', '66166', '0', '20'), +('3', '104', '1', '98769', '351524', '20'), +('3', '104', '1', '111309', '210834', '20'), +('3', '104', '1', '111303', '210084', '20'), +('3', '104', '1', '111305', '208823', '20'), +('3', '104', '2', '94056', '132896', '20'), +('3', '104', '2', '62985', '132201', '20'), +('3', '104', '2', '89368', '126311', '20'), +('3', '104', '2', '104403', '111590', '20'), +('3', '104', '3', '111312', '210165', '20'), +('3', '104', '3', '111315', '209317', '20'), +('3', '104', '3', '111313', '209239', '20'), +('3', '104', '3', '111316', '207192', '20'), +('3', '104', '5', '111317', '209776', '20'), +('3', '104', '5', '111318', '208814', '20'), +('3', '104', '5', '111320', '208777', '20'), +('3', '104', '5', '111319', '206842', '20'), +('3', '104', '8', '111331', '211078', '20'), +('3', '104', '8', '111328', '210134', '20'), +('3', '104', '8', '111332', '207182', '20'), +('3', '104', '8', '111030', '185298', '20'), +('3', '104', '6', '111322', '209291', '20'), +('3', '104', '6', '111324', '209219', '20'), +('3', '104', '6', '111326', '206922', '20'), +('3', '104', '6', '111021', '183561', '20'), +('3', '104', '17', '56046', '139261', '20'), +('3', '104', '17', '81765', '138666', '20'), +('3', '104', '17', '56083', '138163', '20'), +('3', '104', '17', '104406', '118897', '20'), +('3', '104', '7', '94053', '133433', '20'), +('3', '104', '7', '56079', '132815', '20'), +('3', '104', '7', '89369', '127588', '20'), +('3', '104', '7', '104404', '111505', '20'), +('3', '104', '9', '67098', '216235', '20'), +('3', '104', '9', '56031', '128815', '20'), +('3', '104', '9', '56033', '128727', '20'), +('3', '104', '9', '62992', '128666', '20'), +('3', '104', '15', '111348', '210513', '20'), +('3', '104', '15', '111343', '210231', '20'), +('3', '104', '15', '111341', '209827', '20'), +('3', '104', '15', '111342', '209069', '20'), +('3', '104', '20', '111354', '234885', '20'), +('3', '104', '20', '111355', '232720', '20'), +('3', '104', '20', '111353', '231813', '20'), +('3', '104', '20', '111351', '231486', '20'), +('3', '104', '12', '81795', '130070', '20'), +('3', '104', '12', '56073', '129900', '20'), +('3', '104', '12', '89366', '123497', '20'), +('3', '104', '12', '104401', '110109', '20'), +('3', '104', '18', '62986', '135831', '20'), +('3', '104', '18', '56041', '135582', '20'), +('3', '104', '18', '62987', '134471', '20'), +('3', '104', '18', '94054', '134258', '20'), +('3', '104', '19', '62990', '133835', '20'), +('3', '104', '19', '56037', '133435', '20'), +('3', '104', '19', '56075', '132681', '20'), +('3', '104', '19', '81763', '132173', '20'), +('3', '104', '13', '111526', '431068', '20'), +('3', '104', '13', '111514', '414257', '20'), +('3', '104', '13', '111520', '410196', '20'), +('3', '104', '13', '111525', '408620', '20'), +('3', '104', '14', '111536', '216062', '20'), +('3', '104', '14', '111539', '215135', '20'), +('3', '104', '14', '111535', '214759', '20'), +('3', '104', '14', '111538', '214247', '20'), +('3', '104', '11', '133816', '271513', '20'), +('3', '104', '11', '111529', '261185', '20'), +('3', '104', '11', '111229', '241939', '20'), +('3', '104', '11', '111338', '210319', '20'), +('3', '105', '22', '23597', '0', '23'), +('3', '105', '22', '7867', '0', '23'), +('3', '105', '22', '39342', '0', '23'), +('3', '105', '22', '66166', '0', '23'), +('3', '105', '1', '98769', '351528', '23'), +('3', '105', '1', '111309', '210838', '23'), +('3', '105', '1', '111303', '210090', '23'), +('3', '105', '1', '111305', '208829', '23'), +('3', '105', '2', '94056', '132901', '23'), +('3', '105', '2', '62985', '132206', '23'), +('3', '105', '2', '89368', '126316', '23'), +('3', '105', '2', '104403', '111594', '23'), +('3', '105', '3', '111312', '210171', '23'), +('3', '105', '3', '111315', '209325', '23'), +('3', '105', '3', '111313', '209244', '23'), +('3', '105', '3', '111316', '207197', '23'), +('3', '105', '5', '111317', '209782', '23'), +('3', '105', '5', '111318', '208818', '23'), +('3', '105', '5', '111320', '208783', '23'), +('3', '105', '5', '111319', '206849', '23'), +('3', '105', '8', '111331', '211084', '23'), +('3', '105', '8', '111328', '210139', '23'), +('3', '105', '8', '111332', '207186', '23'), +('3', '105', '8', '111030', '185304', '23'), +('3', '105', '6', '111322', '209295', '23'), +('3', '105', '6', '111324', '209225', '23'), +('3', '105', '6', '111326', '206929', '23'), +('3', '105', '6', '111021', '183565', '23'), +('3', '105', '17', '56046', '139269', '23'), +('3', '105', '17', '81765', '138670', '23'), +('3', '105', '17', '56083', '138166', '23'), +('3', '105', '17', '104406', '118905', '23'), +('3', '105', '7', '94053', '133439', '23'), +('3', '105', '7', '56079', '132821', '23'), +('3', '105', '7', '89369', '127594', '23'), +('3', '105', '7', '104404', '111510', '23'), +('3', '105', '9', '67098', '216240', '23'), +('3', '105', '9', '56031', '128819', '23'), +('3', '105', '9', '56033', '128731', '23'), +('3', '105', '9', '62992', '128672', '23'), +('3', '105', '15', '111348', '210520', '23'), +('3', '105', '15', '111343', '210236', '23'), +('3', '105', '15', '111341', '209834', '23'), +('3', '105', '15', '111342', '209076', '23'), +('3', '105', '20', '111354', '234891', '23'), +('3', '105', '20', '111355', '232724', '23'), +('3', '105', '20', '111353', '231819', '23'), +('3', '105', '20', '111351', '231491', '23'), +('3', '105', '12', '81795', '130076', '23'), +('3', '105', '12', '56073', '129907', '23'), +('3', '105', '12', '89366', '123502', '23'), +('3', '105', '12', '104401', '110116', '23'), +('3', '105', '18', '62986', '135839', '23'), +('3', '105', '18', '56041', '135585', '23'), +('3', '105', '18', '62987', '134475', '23'), +('3', '105', '18', '94054', '134264', '23'), +('3', '105', '19', '62990', '133840', '23'), +('3', '105', '19', '56037', '133441', '23'), +('3', '105', '19', '56075', '132688', '23'), +('3', '105', '19', '81763', '132179', '23'), +('3', '105', '13', '111526', '431611', '23'), +('3', '105', '13', '111514', '414772', '23'), +('3', '105', '13', '111520', '410710', '23'), +('3', '105', '13', '111525', '409135', '23'), +('3', '105', '14', '111536', '216067', '23'), +('3', '105', '14', '111539', '215141', '23'), +('3', '105', '14', '111535', '214766', '23'), +('3', '105', '14', '111538', '214252', '23'), +('3', '105', '11', '133816', '271518', '23'), +('3', '105', '11', '111529', '261266', '23'), +('3', '105', '11', '111229', '242010', '23'), +('3', '105', '11', '111338', '210325', '23'), +('3', '105', '22', '23597', '0', '22'), +('3', '105', '22', '7867', '0', '22'), +('3', '105', '22', '39342', '0', '22'), +('3', '105', '22', '66166', '0', '22'), +('3', '105', '1', '98769', '351528', '22'), +('3', '105', '1', '111309', '210838', '22'), +('3', '105', '1', '111303', '210090', '22'), +('3', '105', '1', '111305', '208829', '22'), +('3', '105', '2', '94056', '132901', '22'), +('3', '105', '2', '62985', '132206', '22'), +('3', '105', '2', '89368', '126316', '22'), +('3', '105', '2', '104403', '111594', '22'), +('3', '105', '3', '111312', '210171', '22'), +('3', '105', '3', '111315', '209325', '22'), +('3', '105', '3', '111313', '209244', '22'), +('3', '105', '3', '111316', '207197', '22'), +('3', '105', '5', '111317', '209782', '22'), +('3', '105', '5', '111318', '208818', '22'), +('3', '105', '5', '111320', '208783', '22'), +('3', '105', '5', '111319', '206849', '22'), +('3', '105', '8', '111331', '211084', '22'), +('3', '105', '8', '111328', '210139', '22'), +('3', '105', '8', '111332', '207186', '22'), +('3', '105', '8', '111030', '185304', '22'), +('3', '105', '6', '111322', '209295', '22'), +('3', '105', '6', '111324', '209225', '22'), +('3', '105', '6', '111326', '206929', '22'), +('3', '105', '6', '111021', '183565', '22'), +('3', '105', '17', '56046', '139269', '22'), +('3', '105', '17', '81765', '138670', '22'), +('3', '105', '17', '56083', '138166', '22'), +('3', '105', '17', '104406', '118905', '22'), +('3', '105', '7', '94053', '133439', '22'), +('3', '105', '7', '56079', '132821', '22'), +('3', '105', '7', '89369', '127594', '22'), +('3', '105', '7', '104404', '111510', '22'), +('3', '105', '9', '67098', '216240', '22'), +('3', '105', '9', '56031', '128819', '22'), +('3', '105', '9', '56033', '128731', '22'), +('3', '105', '9', '62992', '128672', '22'), +('3', '105', '15', '111348', '210520', '22'), +('3', '105', '15', '111343', '210236', '22'), +('3', '105', '15', '111341', '209834', '22'), +('3', '105', '15', '111342', '209076', '22'), +('3', '105', '20', '111354', '234891', '22'), +('3', '105', '20', '111355', '232724', '22'), +('3', '105', '20', '111353', '231819', '22'), +('3', '105', '20', '111351', '231491', '22'), +('3', '105', '12', '81795', '130076', '22'), +('3', '105', '12', '56073', '129907', '22'), +('3', '105', '12', '89366', '123502', '22'), +('3', '105', '12', '104401', '110116', '22'), +('3', '105', '18', '62986', '135839', '22'), +('3', '105', '18', '56041', '135585', '22'), +('3', '105', '18', '62987', '134475', '22'), +('3', '105', '18', '94054', '134264', '22'), +('3', '105', '19', '62990', '133840', '22'), +('3', '105', '19', '56037', '133441', '22'), +('3', '105', '19', '56075', '132688', '22'), +('3', '105', '19', '81763', '132179', '22'), +('3', '105', '13', '111526', '431611', '22'), +('3', '105', '13', '111514', '414772', '22'), +('3', '105', '13', '111520', '410710', '22'), +('3', '105', '13', '111525', '409135', '22'), +('3', '105', '14', '111536', '216067', '22'), +('3', '105', '14', '111539', '215141', '22'), +('3', '105', '14', '111535', '214766', '22'), +('3', '105', '14', '111538', '214252', '22'), +('3', '105', '11', '133816', '271518', '22'), +('3', '105', '11', '111529', '261266', '22'), +('3', '105', '11', '111229', '242010', '22'), +('3', '105', '11', '111338', '210325', '22'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '105', '22', '23597', '0', '21'), +('3', '105', '22', '7867', '0', '21'), +('3', '105', '22', '39342', '0', '21'), +('3', '105', '22', '66166', '0', '21'), +('3', '105', '1', '98769', '351528', '21'), +('3', '105', '1', '111309', '210838', '21'), +('3', '105', '1', '111303', '210090', '21'), +('3', '105', '1', '111305', '208829', '21'), +('3', '105', '2', '94056', '132901', '21'), +('3', '105', '2', '62985', '132206', '21'), +('3', '105', '2', '89368', '126316', '21'), +('3', '105', '2', '104403', '111594', '21'), +('3', '105', '3', '111312', '210171', '21'), +('3', '105', '3', '111315', '209325', '21'), +('3', '105', '3', '111313', '209244', '21'), +('3', '105', '3', '111316', '207197', '21'), +('3', '105', '5', '111317', '209782', '21'), +('3', '105', '5', '111318', '208818', '21'), +('3', '105', '5', '111320', '208783', '21'), +('3', '105', '5', '111319', '206849', '21'), +('3', '105', '8', '111331', '211084', '21'), +('3', '105', '8', '111328', '210139', '21'), +('3', '105', '8', '111332', '207186', '21'), +('3', '105', '8', '111030', '185304', '21'), +('3', '105', '6', '111322', '209295', '21'), +('3', '105', '6', '111324', '209225', '21'), +('3', '105', '6', '111326', '206929', '21'), +('3', '105', '6', '111021', '183565', '21'), +('3', '105', '17', '56046', '139269', '21'), +('3', '105', '17', '81765', '138670', '21'), +('3', '105', '17', '56083', '138166', '21'), +('3', '105', '17', '104406', '118905', '21'), +('3', '105', '7', '94053', '133439', '21'), +('3', '105', '7', '56079', '132821', '21'), +('3', '105', '7', '89369', '127594', '21'), +('3', '105', '7', '104404', '111510', '21'), +('3', '105', '9', '67098', '216240', '21'), +('3', '105', '9', '56031', '128819', '21'), +('3', '105', '9', '56033', '128731', '21'), +('3', '105', '9', '62992', '128672', '21'), +('3', '105', '15', '111348', '210520', '21'), +('3', '105', '15', '111343', '210236', '21'), +('3', '105', '15', '111341', '209834', '21'), +('3', '105', '15', '111342', '209076', '21'), +('3', '105', '20', '111354', '234891', '21'), +('3', '105', '20', '111355', '232724', '21'), +('3', '105', '20', '111353', '231819', '21'), +('3', '105', '20', '111351', '231491', '21'), +('3', '105', '12', '81795', '130076', '21'), +('3', '105', '12', '56073', '129907', '21'), +('3', '105', '12', '89366', '123502', '21'), +('3', '105', '12', '104401', '110116', '21'), +('3', '105', '18', '62986', '135839', '21'), +('3', '105', '18', '56041', '135585', '21'), +('3', '105', '18', '62987', '134475', '21'), +('3', '105', '18', '94054', '134264', '21'), +('3', '105', '19', '62990', '133840', '21'), +('3', '105', '19', '56037', '133441', '21'), +('3', '105', '19', '56075', '132688', '21'), +('3', '105', '19', '81763', '132179', '21'), +('3', '105', '13', '111526', '431611', '21'), +('3', '105', '13', '111514', '414772', '21'), +('3', '105', '13', '111520', '410710', '21'), +('3', '105', '13', '111525', '409135', '21'), +('3', '105', '14', '111536', '216067', '21'), +('3', '105', '14', '111539', '215141', '21'), +('3', '105', '14', '111535', '214766', '21'), +('3', '105', '14', '111538', '214252', '21'), +('3', '105', '11', '133816', '271518', '21'), +('3', '105', '11', '111529', '261266', '21'), +('3', '105', '11', '111229', '242010', '21'), +('3', '105', '11', '111338', '210325', '21'), +('3', '106', '22', '23597', '0', '23'), +('3', '106', '22', '7867', '0', '23'), +('3', '106', '22', '39342', '0', '23'), +('3', '106', '22', '66166', '0', '23'), +('3', '106', '1', '98769', '351532', '23'), +('3', '106', '1', '111309', '210843', '23'), +('3', '106', '1', '111303', '210097', '23'), +('3', '106', '1', '111305', '208836', '23'), +('3', '106', '2', '94056', '132906', '23'), +('3', '106', '2', '62985', '132211', '23'), +('3', '106', '2', '89368', '126322', '23'), +('3', '106', '2', '104403', '111599', '23'), +('3', '106', '3', '111312', '210177', '23'), +('3', '106', '3', '111315', '209332', '23'), +('3', '106', '3', '111313', '209249', '23'), +('3', '106', '3', '111316', '207203', '23'), +('3', '106', '5', '111317', '209789', '23'), +('3', '106', '5', '111318', '208823', '23'), +('3', '106', '5', '111320', '208789', '23'), +('3', '106', '5', '111319', '206855', '23'), +('3', '106', '8', '111331', '211091', '23'), +('3', '106', '8', '111328', '210145', '23'), +('3', '106', '8', '111332', '207191', '23'), +('3', '106', '8', '111030', '185311', '23'), +('3', '106', '6', '111322', '209299', '23'), +('3', '106', '6', '111324', '209231', '23'), +('3', '106', '6', '111326', '206935', '23'), +('3', '106', '6', '111021', '183569', '23'), +('3', '106', '17', '56046', '139276', '23'), +('3', '106', '17', '81765', '138675', '23'), +('3', '106', '17', '56083', '138170', '23'), +('3', '106', '17', '104406', '118912', '23'), +('3', '106', '7', '94053', '133444', '23'), +('3', '106', '7', '56079', '132827', '23'), +('3', '106', '7', '89369', '127600', '23'), +('3', '106', '7', '104404', '111516', '23'), +('3', '106', '9', '67098', '216245', '23'), +('3', '106', '9', '56031', '128823', '23'), +('3', '106', '9', '56033', '128735', '23'), +('3', '106', '9', '62992', '128677', '23'), +('3', '106', '15', '111348', '210527', '23'), +('3', '106', '15', '111343', '210240', '23'), +('3', '106', '15', '111341', '209841', '23'), +('3', '106', '15', '111342', '209082', '23'), +('3', '106', '20', '111354', '234897', '23'), +('3', '106', '20', '111355', '232728', '23'), +('3', '106', '20', '111353', '231825', '23'), +('3', '106', '20', '111351', '231495', '23'), +('3', '106', '12', '81795', '130083', '23'), +('3', '106', '12', '56073', '129915', '23'), +('3', '106', '12', '89366', '123507', '23'), +('3', '106', '12', '104401', '110122', '23'), +('3', '106', '18', '62986', '135846', '23'), +('3', '106', '18', '56041', '135589', '23'), +('3', '106', '18', '62987', '134479', '23'), +('3', '106', '18', '94054', '134269', '23'), +('3', '106', '19', '62990', '133845', '23'), +('3', '106', '19', '56037', '133447', '23'), +('3', '106', '19', '56075', '132694', '23'), +('3', '106', '19', '81763', '132185', '23'), +('3', '106', '13', '111526', '432153', '23'), +('3', '106', '13', '111514', '415287', '23'), +('3', '106', '13', '111520', '411225', '23'), +('3', '106', '13', '111525', '409649', '23'), +('3', '106', '14', '111536', '216072', '23'), +('3', '106', '14', '111539', '215147', '23'), +('3', '106', '14', '111535', '214772', '23'), +('3', '106', '14', '111538', '214256', '23'), +('3', '106', '11', '133816', '271523', '23'), +('3', '106', '11', '111529', '261337', '23'), +('3', '106', '11', '111229', '242082', '23'), +('3', '106', '11', '111338', '210331', '23'), +('3', '107', '22', '23597', '0', '23'), +('3', '107', '22', '7867', '0', '23'), +('3', '107', '22', '39342', '0', '23'), +('3', '107', '22', '66166', '0', '23'), +('3', '107', '1', '98769', '351536', '23'), +('3', '107', '1', '111309', '210847', '23'), +('3', '107', '1', '111303', '210103', '23'), +('3', '107', '1', '111305', '208842', '23'), +('3', '107', '2', '94056', '132911', '23'), +('3', '107', '2', '62985', '132216', '23'), +('3', '107', '2', '89368', '126327', '23'), +('3', '107', '2', '104403', '111603', '23'), +('3', '107', '3', '111312', '210182', '23'), +('3', '107', '3', '111315', '209339', '23'), +('3', '107', '3', '111313', '209254', '23'), +('3', '107', '3', '111316', '207208', '23'), +('3', '107', '5', '111317', '209795', '23'), +('3', '107', '5', '111318', '208827', '23'), +('3', '107', '5', '111320', '208794', '23'), +('3', '107', '5', '111319', '206862', '23'), +('3', '107', '8', '111331', '211098', '23'), +('3', '107', '8', '111328', '210151', '23'), +('3', '107', '8', '111332', '207196', '23'), +('3', '107', '8', '111030', '185318', '23'), +('3', '107', '6', '111322', '209304', '23'), +('3', '107', '6', '111324', '209236', '23'), +('3', '107', '6', '111326', '206941', '23'), +('3', '107', '6', '111021', '183574', '23'), +('3', '107', '17', '56046', '139283', '23'), +('3', '107', '17', '81765', '138680', '23'), +('3', '107', '17', '56083', '138173', '23'), +('3', '107', '17', '104406', '118920', '23'), +('3', '107', '7', '94053', '133450', '23'), +('3', '107', '7', '56079', '132833', '23'), +('3', '107', '7', '89369', '127606', '23'), +('3', '107', '7', '104404', '111521', '23'), +('3', '107', '9', '67098', '216250', '23'), +('3', '107', '9', '56031', '128827', '23'), +('3', '107', '9', '56033', '128739', '23'), +('3', '107', '9', '62984', '128684', '23'), +('3', '107', '15', '111348', '210534', '23'), +('3', '107', '15', '111343', '210245', '23'), +('3', '107', '15', '111341', '209848', '23'), +('3', '107', '15', '111342', '209088', '23'), +('3', '107', '20', '111354', '234902', '23'), +('3', '107', '20', '111355', '232732', '23'), +('3', '107', '20', '111353', '231830', '23'), +('3', '107', '20', '111351', '231499', '23'), +('3', '107', '12', '81795', '130088', '23'), +('3', '107', '12', '56073', '129921', '23'), +('3', '107', '12', '89366', '123512', '23'), +('3', '107', '12', '104401', '110128', '23'), +('3', '107', '18', '62986', '135854', '23'), +('3', '107', '18', '56041', '135592', '23'), +('3', '107', '18', '62987', '134482', '23'), +('3', '107', '18', '94054', '134275', '23'), +('3', '107', '19', '62990', '133850', '23'), +('3', '107', '19', '56037', '133453', '23'), +('3', '107', '19', '56075', '132700', '23'), +('3', '107', '19', '81763', '132191', '23'), +('3', '107', '13', '111526', '432696', '23'), +('3', '107', '13', '111514', '415802', '23'), +('3', '107', '13', '111520', '411739', '23'), +('3', '107', '13', '111525', '410164', '23'), +('3', '107', '14', '111536', '216077', '23'), +('3', '107', '14', '111539', '215152', '23'), +('3', '107', '14', '111535', '214778', '23'), +('3', '107', '14', '111538', '214261', '23'), +('3', '107', '11', '133816', '271528', '23'), +('3', '107', '11', '111529', '261418', '23'), +('3', '107', '11', '111229', '242163', '23'), +('3', '107', '11', '111338', '210337', '23'), +('3', '108', '22', '23597', '0', '23'), +('3', '108', '22', '7867', '0', '23'), +('3', '108', '22', '39342', '0', '23'), +('3', '108', '22', '66166', '0', '23'), +('3', '108', '1', '98769', '351540', '23'), +('3', '108', '1', '111309', '210851', '23'), +('3', '108', '1', '111303', '210109', '23'), +('3', '108', '1', '111305', '208849', '23'), +('3', '108', '2', '94056', '132916', '23'), +('3', '108', '2', '62985', '132220', '23'), +('3', '108', '2', '89368', '126333', '23'), +('3', '108', '2', '104403', '111607', '23'), +('3', '108', '3', '111312', '210188', '23'), +('3', '108', '3', '111315', '209347', '23'), +('3', '108', '3', '111313', '209259', '23'), +('3', '108', '3', '111316', '207214', '23'), +('3', '108', '5', '111317', '209802', '23'), +('3', '108', '5', '111318', '208832', '23'), +('3', '108', '5', '111320', '208800', '23'), +('3', '108', '5', '111319', '206868', '23'), +('3', '108', '8', '111331', '211104', '23'), +('3', '108', '8', '111328', '210156', '23'), +('3', '108', '8', '111332', '207201', '23'), +('3', '108', '8', '111030', '185324', '23'), +('3', '108', '6', '111322', '209308', '23'), +('3', '108', '6', '111324', '209242', '23'), +('3', '108', '6', '111326', '206948', '23'), +('3', '108', '6', '111021', '183578', '23'), +('3', '108', '17', '56046', '139290', '23'), +('3', '108', '17', '81765', '138685', '23'), +('3', '108', '17', '56083', '138176', '23'), +('3', '108', '17', '104406', '118927', '23'), +('3', '108', '7', '94053', '133455', '23'), +('3', '108', '7', '56079', '132839', '23'), +('3', '108', '7', '89369', '127611', '23'), +('3', '108', '7', '104404', '111527', '23'), +('3', '108', '9', '67098', '216256', '23'), +('3', '108', '9', '56031', '128831', '23'), +('3', '108', '9', '56033', '128743', '23'), +('3', '108', '9', '62984', '128692', '23'), +('3', '108', '15', '111348', '210541', '23'), +('3', '108', '15', '111343', '210250', '23'), +('3', '108', '15', '111341', '209855', '23'), +('3', '108', '15', '111342', '209095', '23'), +('3', '108', '20', '111354', '234908', '23'), +('3', '108', '20', '111355', '232736', '23'), +('3', '108', '20', '111353', '231836', '23'), +('3', '108', '20', '111351', '231504', '23'), +('3', '108', '12', '81795', '130094', '23'), +('3', '108', '12', '56073', '129929', '23'), +('3', '108', '12', '89366', '123516', '23'), +('3', '108', '12', '104401', '110135', '23'), +('3', '108', '18', '62986', '135862', '23'), +('3', '108', '18', '56041', '135596', '23'), +('3', '108', '18', '62987', '134486', '23'), +('3', '108', '18', '94054', '134280', '23'), +('3', '108', '19', '62990', '133855', '23'), +('3', '108', '19', '56037', '133459', '23'), +('3', '108', '19', '56075', '132706', '23'), +('3', '108', '19', '81763', '132197', '23'), +('3', '108', '13', '111526', '433239', '23'), +('3', '108', '13', '111514', '416317', '23'), +('3', '108', '13', '111520', '412253', '23'), +('3', '108', '13', '111525', '410679', '23'), +('3', '108', '14', '111536', '216082', '23'), +('3', '108', '14', '111539', '215158', '23'), +('3', '108', '14', '111535', '214785', '23'), +('3', '108', '14', '111538', '214266', '23'), +('3', '108', '11', '133816', '271532', '23'), +('3', '108', '11', '111529', '261499', '23'), +('3', '108', '11', '111229', '242235', '23'), +('3', '108', '11', '111338', '210343', '23'), +('3', '109', '22', '23597', '0', '23'), +('3', '109', '22', '7867', '0', '23'), +('3', '109', '22', '39342', '0', '23'), +('3', '109', '22', '66166', '0', '23'), +('3', '109', '1', '98769', '351544', '23'), +('3', '109', '1', '111309', '210856', '23'), +('3', '109', '1', '111303', '210116', '23'), +('3', '109', '1', '111305', '208856', '23'), +('3', '109', '2', '94056', '132921', '23'), +('3', '109', '2', '62985', '132225', '23'), +('3', '109', '2', '89368', '126339', '23'), +('3', '109', '2', '104403', '111612', '23'), +('3', '109', '3', '111312', '210194', '23'), +('3', '109', '3', '111315', '209355', '23'), +('3', '109', '3', '111313', '209264', '23'), +('3', '109', '3', '111316', '207220', '23'), +('3', '109', '5', '111317', '209809', '23'), +('3', '109', '5', '111318', '208836', '23'), +('3', '109', '5', '111320', '208805', '23'), +('3', '109', '5', '111319', '206875', '23'), +('3', '109', '8', '111331', '211111', '23'), +('3', '109', '8', '111328', '210162', '23'), +('3', '109', '8', '111332', '207206', '23'), +('3', '109', '8', '111030', '185331', '23'), +('3', '109', '6', '111322', '209312', '23'), +('3', '109', '6', '111324', '209248', '23'), +('3', '109', '6', '111326', '206954', '23'), +('3', '109', '6', '111021', '183582', '23'), +('3', '109', '17', '56046', '139298', '23'), +('3', '109', '17', '81765', '138690', '23'), +('3', '109', '17', '56083', '138180', '23'), +('3', '109', '17', '104406', '118935', '23'), +('3', '109', '7', '94053', '133461', '23'), +('3', '109', '7', '56079', '132845', '23'), +('3', '109', '7', '89369', '127617', '23'), +('3', '109', '7', '104404', '111533', '23'), +('3', '109', '9', '67098', '216261', '23'), +('3', '109', '9', '56031', '128835', '23'), +('3', '109', '9', '56033', '128746', '23'), +('3', '109', '9', '62984', '128700', '23'), +('3', '109', '15', '111348', '210548', '23'), +('3', '109', '15', '111343', '210255', '23'), +('3', '109', '15', '111341', '209862', '23'), +('3', '109', '15', '111342', '209102', '23'), +('3', '109', '20', '111354', '234914', '23'), +('3', '109', '20', '111355', '232740', '23'), +('3', '109', '20', '111353', '231842', '23'), +('3', '109', '20', '111351', '231508', '23'), +('3', '109', '12', '81795', '130100', '23'), +('3', '109', '12', '56073', '129936', '23'), +('3', '109', '12', '89366', '123521', '23'), +('3', '109', '12', '104401', '110141', '23'), +('3', '109', '18', '62986', '135870', '23'), +('3', '109', '18', '56041', '135599', '23'), +('3', '109', '18', '62987', '134489', '23'), +('3', '109', '18', '94054', '134286', '23'), +('3', '109', '19', '62990', '133860', '23'), +('3', '109', '19', '56037', '133465', '23'), +('3', '109', '19', '56075', '132712', '23'), +('3', '109', '19', '81763', '132203', '23'), +('3', '109', '13', '111526', '433781', '23'), +('3', '109', '13', '111514', '416860', '23'), +('3', '109', '13', '111520', '412767', '23'), +('3', '109', '13', '111525', '411193', '23'), +('3', '109', '14', '111536', '216087', '23'), +('3', '109', '14', '111539', '215164', '23'), +('3', '109', '14', '111535', '214792', '23'), +('3', '109', '14', '111538', '214270', '23'), +('3', '109', '11', '133816', '271537', '23'), +('3', '109', '11', '111529', '261570', '23'), +('3', '109', '11', '111229', '242316', '23'), +('3', '109', '11', '111338', '210349', '23'), +('3', '110', '22', '23597', '0', '25'), +('3', '110', '22', '7867', '0', '25'), +('3', '110', '22', '39342', '0', '25'), +('3', '110', '22', '66166', '0', '25'), +('3', '110', '1', '98769', '351549', '25'), +('3', '110', '1', '111309', '210860', '25'), +('3', '110', '1', '111303', '210122', '25'), +('3', '110', '1', '111305', '208862', '25'), +('3', '110', '2', '94056', '132926', '25'), +('3', '110', '2', '62985', '132230', '25'), +('3', '110', '2', '89368', '126344', '25'), +('3', '110', '2', '104403', '111616', '25'), +('3', '110', '3', '111312', '210200', '25'), +('3', '110', '3', '111315', '209362', '25'), +('3', '110', '3', '111313', '209269', '25'), +('3', '110', '3', '111316', '207225', '25'), +('3', '110', '5', '111317', '209815', '25'), +('3', '110', '5', '111318', '208841', '25'), +('3', '110', '5', '111320', '208811', '25'), +('3', '110', '5', '111319', '206881', '25'), +('3', '110', '8', '111331', '211118', '25'), +('3', '110', '8', '111328', '210168', '25'), +('3', '110', '8', '111332', '207211', '25'), +('3', '110', '8', '111030', '185338', '25'), +('3', '110', '6', '111322', '209317', '25'), +('3', '110', '6', '111324', '209254', '25'), +('3', '110', '6', '111326', '206960', '25'), +('3', '110', '6', '111021', '183587', '25'), +('3', '110', '17', '56046', '139305', '25'), +('3', '110', '17', '81765', '138695', '25'), +('3', '110', '17', '56083', '138183', '25'), +('3', '110', '17', '104406', '118943', '25'), +('3', '110', '7', '94053', '133466', '25'), +('3', '110', '7', '56079', '132852', '25'), +('3', '110', '7', '89369', '127623', '25'), +('3', '110', '7', '104404', '111538', '25'), +('3', '110', '9', '67098', '216266', '25'), +('3', '110', '9', '56031', '128839', '25'), +('3', '110', '9', '56033', '128750', '25'), +('3', '110', '9', '62984', '128707', '25'), +('3', '110', '15', '111348', '210555', '25'), +('3', '110', '15', '111343', '210259', '25'), +('3', '110', '15', '111341', '209870', '25'), +('3', '110', '15', '111342', '209108', '25'), +('3', '110', '20', '111354', '234920', '25'), +('3', '110', '20', '111355', '232744', '25'), +('3', '110', '20', '111353', '231848', '25'), +('3', '110', '20', '111351', '231513', '25'), +('3', '110', '12', '81795', '130106', '25'), +('3', '110', '12', '56073', '129944', '25'), +('3', '110', '12', '89366', '123526', '25'), +('3', '110', '12', '104401', '110148', '25'), +('3', '110', '18', '62986', '135877', '25'), +('3', '110', '18', '56041', '135603', '25'), +('3', '110', '18', '62987', '134493', '25'), +('3', '110', '18', '94054', '134291', '25'), +('3', '110', '19', '62990', '133865', '25'), +('3', '110', '19', '56037', '133471', '25'), +('3', '110', '19', '56075', '132718', '25'), +('3', '110', '19', '81763', '132209', '25'), +('3', '110', '13', '111526', '435599', '25'), +('3', '110', '13', '111514', '418650', '25'), +('3', '110', '13', '111520', '414557', '25'), +('3', '110', '13', '111525', '412983', '25'), +('3', '110', '14', '111536', '216092', '25'), +('3', '110', '14', '111539', '215169', '25'), +('3', '110', '14', '111535', '214798', '25'), +('3', '110', '14', '111538', '214275', '25'), +('3', '110', '11', '85213', '313730', '25'), +('3', '110', '11', '133816', '271542', '25'), +('3', '110', '11', '111529', '261651', '25'), +('3', '110', '11', '111229', '242388', '25'), +('3', '110', '22', '23597', '0', '24'), +('3', '110', '22', '7867', '0', '24'), +('3', '110', '22', '39342', '0', '24'), +('3', '110', '22', '66166', '0', '24'), +('3', '110', '1', '98769', '351549', '24'), +('3', '110', '1', '111309', '210860', '24'), +('3', '110', '1', '111303', '210122', '24'), +('3', '110', '1', '111305', '208862', '24'), +('3', '110', '2', '94056', '132926', '24'), +('3', '110', '2', '62985', '132230', '24'), +('3', '110', '2', '89368', '126344', '24'), +('3', '110', '2', '104403', '111616', '24'), +('3', '110', '3', '111312', '210200', '24'), +('3', '110', '3', '111315', '209362', '24'), +('3', '110', '3', '111313', '209269', '24'), +('3', '110', '3', '111316', '207225', '24'), +('3', '110', '5', '111317', '209815', '24'), +('3', '110', '5', '111318', '208841', '24'), +('3', '110', '5', '111320', '208811', '24'), +('3', '110', '5', '111319', '206881', '24'), +('3', '110', '8', '111331', '211118', '24'), +('3', '110', '8', '111328', '210168', '24'), +('3', '110', '8', '111332', '207211', '24'), +('3', '110', '8', '111030', '185338', '24'), +('3', '110', '6', '111322', '209317', '24'), +('3', '110', '6', '111324', '209254', '24'), +('3', '110', '6', '111326', '206960', '24'), +('3', '110', '6', '111021', '183587', '24'), +('3', '110', '17', '56046', '139305', '24'), +('3', '110', '17', '81765', '138695', '24'), +('3', '110', '17', '56083', '138183', '24'), +('3', '110', '17', '104406', '118943', '24'), +('3', '110', '7', '94053', '133466', '24'), +('3', '110', '7', '56079', '132852', '24'), +('3', '110', '7', '89369', '127623', '24'), +('3', '110', '7', '104404', '111538', '24'), +('3', '110', '9', '67098', '216266', '24'), +('3', '110', '9', '56031', '128839', '24'), +('3', '110', '9', '56033', '128750', '24'), +('3', '110', '9', '62984', '128707', '24'), +('3', '110', '15', '111348', '210555', '24'), +('3', '110', '15', '111343', '210259', '24'), +('3', '110', '15', '111341', '209870', '24'), +('3', '110', '15', '111342', '209108', '24'), +('3', '110', '20', '111354', '234920', '24'), +('3', '110', '20', '111355', '232744', '24'), +('3', '110', '20', '111353', '231848', '24'), +('3', '110', '20', '111351', '231513', '24'), +('3', '110', '12', '81795', '130106', '24'), +('3', '110', '12', '56073', '129944', '24'), +('3', '110', '12', '89366', '123526', '24'), +('3', '110', '12', '104401', '110148', '24'), +('3', '110', '18', '62986', '135877', '24'), +('3', '110', '18', '56041', '135603', '24'), +('3', '110', '18', '62987', '134493', '24'), +('3', '110', '18', '94054', '134291', '24'), +('3', '110', '19', '62990', '133865', '24'), +('3', '110', '19', '56037', '133471', '24'), +('3', '110', '19', '56075', '132718', '24'), +('3', '110', '19', '81763', '132209', '24'), +('3', '110', '13', '111526', '435599', '24'), +('3', '110', '13', '111514', '418650', '24'), +('3', '110', '13', '111520', '414557', '24'), +('3', '110', '13', '111525', '412983', '24'), +('3', '110', '14', '111536', '216092', '24'), +('3', '110', '14', '111539', '215169', '24'), +('3', '110', '14', '111535', '214798', '24'), +('3', '110', '14', '111538', '214275', '24'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('3', '110', '11', '85213', '313730', '24'), +('3', '110', '11', '133816', '271542', '24'), +('3', '110', '11', '111529', '261651', '24'), +('3', '110', '11', '111229', '242388', '24'), +('3', '111', '22', '23597', '0', '25'), +('3', '111', '22', '7867', '0', '25'), +('3', '111', '22', '39342', '0', '25'), +('3', '111', '22', '66166', '0', '25'), +('3', '111', '1', '98769', '351553', '25'), +('3', '111', '1', '111309', '210865', '25'), +('3', '111', '1', '111303', '210129', '25'), +('3', '111', '1', '111305', '208869', '25'), +('3', '111', '2', '94056', '132931', '25'), +('3', '111', '2', '62985', '132235', '25'), +('3', '111', '2', '89368', '126350', '25'), +('3', '111', '2', '104403', '111620', '25'), +('3', '111', '3', '111312', '210206', '25'), +('3', '111', '3', '111315', '209370', '25'), +('3', '111', '3', '111313', '209274', '25'), +('3', '111', '3', '111316', '207231', '25'), +('3', '111', '5', '111317', '209822', '25'), +('3', '111', '5', '111318', '208845', '25'), +('3', '111', '5', '111320', '208817', '25'), +('3', '111', '5', '111319', '206888', '25'), +('3', '111', '8', '111331', '211125', '25'), +('3', '111', '8', '111328', '210174', '25'), +('3', '111', '8', '111332', '207216', '25'), +('3', '111', '8', '111030', '185345', '25'), +('3', '111', '6', '111322', '209321', '25'), +('3', '111', '6', '111324', '209260', '25'), +('3', '111', '6', '111326', '206967', '25'), +('3', '111', '6', '111021', '183591', '25'), +('3', '111', '17', '56046', '139312', '25'), +('3', '111', '17', '81765', '138699', '25'), +('3', '111', '17', '56083', '138186', '25'), +('3', '111', '17', '104406', '118950', '25'), +('3', '111', '7', '94053', '133472', '25'), +('3', '111', '7', '56079', '132858', '25'), +('3', '111', '7', '89369', '127629', '25'), +('3', '111', '7', '104404', '111544', '25'), +('3', '111', '9', '67098', '216272', '25'), +('3', '111', '9', '56031', '128843', '25'), +('3', '111', '9', '56033', '128754', '25'), +('3', '111', '9', '62984', '128715', '25'), +('3', '111', '15', '111348', '210562', '25'), +('3', '111', '15', '111343', '210264', '25'), +('3', '111', '15', '111341', '209877', '25'), +('3', '111', '15', '111342', '209115', '25'), +('3', '111', '20', '111354', '234926', '25'), +('3', '111', '20', '111355', '232748', '25'), +('3', '111', '20', '111353', '231854', '25'), +('3', '111', '20', '111351', '231517', '25'), +('3', '111', '12', '81795', '130113', '25'), +('3', '111', '12', '56073', '129951', '25'), +('3', '111', '12', '89366', '123531', '25'), +('3', '111', '12', '104401', '110154', '25'), +('3', '111', '18', '62986', '135885', '25'), +('3', '111', '18', '56041', '135606', '25'), +('3', '111', '18', '62987', '134497', '25'), +('3', '111', '18', '94054', '134297', '25'), +('3', '111', '19', '62990', '133871', '25'), +('3', '111', '19', '56037', '133477', '25'), +('3', '111', '19', '56075', '132725', '25'), +('3', '111', '19', '81763', '132215', '25'), +('3', '111', '13', '111526', '436142', '25'), +('3', '111', '13', '111514', '419165', '25'), +('3', '111', '13', '111520', '415071', '25'), +('3', '111', '13', '111525', '413469', '25'), +('3', '111', '14', '111536', '216097', '25'), +('3', '111', '14', '111539', '215175', '25'), +('3', '111', '14', '111535', '214805', '25'), +('3', '111', '14', '111538', '214280', '25'), +('3', '111', '11', '85213', '313735', '25'), +('3', '111', '11', '133816', '271547', '25'), +('3', '111', '11', '111529', '261732', '25'), +('3', '111', '11', '111229', '242460', '25'), +('3', '112', '22', '23597', '0', '25'), +('3', '112', '22', '7867', '0', '25'), +('3', '112', '22', '39342', '0', '25'), +('3', '112', '22', '66166', '0', '25'), +('3', '112', '1', '98769', '351557', '25'), +('3', '112', '1', '111309', '210869', '25'), +('3', '112', '1', '111303', '210135', '25'), +('3', '112', '1', '111305', '208876', '25'), +('3', '112', '2', '94056', '132936', '25'), +('3', '112', '2', '62985', '132240', '25'), +('3', '112', '2', '89368', '126356', '25'), +('3', '112', '2', '104403', '111625', '25'), +('3', '112', '3', '111312', '210212', '25'), +('3', '112', '3', '111315', '209378', '25'), +('3', '112', '3', '111313', '209279', '25'), +('3', '112', '3', '111316', '207237', '25'), +('3', '112', '5', '111317', '209829', '25'), +('3', '112', '5', '111318', '208850', '25'), +('3', '112', '5', '111320', '208822', '25'), +('3', '112', '5', '111319', '206895', '25'), +('3', '112', '8', '111331', '211131', '25'), +('3', '112', '8', '111328', '210179', '25'), +('3', '112', '8', '111332', '207221', '25'), +('3', '112', '8', '111030', '185351', '25'), +('3', '112', '6', '111322', '209326', '25'), +('3', '112', '6', '111324', '209265', '25'), +('3', '112', '6', '111326', '206973', '25'), +('3', '112', '6', '111021', '183596', '25'), +('3', '112', '17', '56046', '139320', '25'), +('3', '112', '17', '81765', '138704', '25'), +('3', '112', '17', '56083', '138190', '25'), +('3', '112', '17', '104406', '118958', '25'), +('3', '112', '7', '94053', '133477', '25'), +('3', '112', '7', '56079', '132864', '25'), +('3', '112', '7', '89369', '127635', '25'), +('3', '112', '7', '104404', '111550', '25'), +('3', '112', '9', '67098', '216277', '25'), +('3', '112', '9', '56031', '128847', '25'), +('3', '112', '9', '56033', '128758', '25'), +('3', '112', '9', '62984', '128723', '25'), +('3', '112', '15', '111348', '210569', '25'), +('3', '112', '15', '111343', '210269', '25'), +('3', '112', '15', '111341', '209884', '25'), +('3', '112', '15', '111342', '209121', '25'), +('3', '112', '20', '111354', '234931', '25'), +('3', '112', '20', '111355', '232753', '25'), +('3', '112', '20', '111353', '231860', '25'), +('3', '112', '20', '111351', '231522', '25'), +('3', '112', '12', '81795', '130119', '25'), +('3', '112', '12', '56073', '129958', '25'), +('3', '112', '12', '89366', '123536', '25'), +('3', '112', '12', '104401', '110160', '25'), +('3', '112', '18', '62986', '135893', '25'), +('3', '112', '18', '56041', '135610', '25'), +('3', '112', '18', '62987', '134500', '25'), +('3', '112', '18', '94054', '134303', '25'), +('3', '112', '19', '62990', '133876', '25'), +('3', '112', '19', '56037', '133483', '25'), +('3', '112', '19', '56075', '132731', '25'), +('3', '112', '19', '81763', '132221', '25'), +('3', '112', '13', '111526', '436685', '25'), +('3', '112', '13', '111514', '419680', '25'), +('3', '112', '13', '111520', '415585', '25'), +('3', '112', '13', '111525', '413984', '25'), +('3', '112', '14', '111536', '216102', '25'), +('3', '112', '14', '111539', '215181', '25'), +('3', '112', '14', '111535', '214811', '25'), +('3', '112', '14', '111538', '214284', '25'), +('3', '112', '11', '85213', '313739', '25'), +('3', '112', '11', '133816', '271552', '25'), +('3', '112', '11', '111529', '261813', '25'), +('3', '112', '11', '111229', '242541', '25'), +('3', '113', '22', '23597', '0', '25'), +('3', '113', '22', '7867', '0', '25'), +('3', '113', '22', '39342', '0', '25'), +('3', '113', '22', '66166', '0', '25'), +('3', '113', '1', '98769', '351561', '25'), +('3', '113', '1', '111309', '210874', '25'), +('3', '113', '1', '111303', '210142', '25'), +('3', '113', '1', '111305', '208882', '25'), +('3', '113', '2', '94056', '132941', '25'), +('3', '113', '2', '62985', '132244', '25'), +('3', '113', '2', '89368', '126361', '25'), +('3', '113', '2', '104403', '111629', '25'), +('3', '113', '3', '111312', '210218', '25'), +('3', '113', '3', '111315', '209385', '25'), +('3', '113', '3', '111313', '209284', '25'), +('3', '113', '3', '111316', '207243', '25'), +('3', '113', '5', '111317', '209835', '25'), +('3', '113', '5', '111318', '208854', '25'), +('3', '113', '5', '111320', '208828', '25'), +('3', '113', '5', '111319', '206901', '25'), +('3', '113', '8', '111331', '211138', '25'), +('3', '113', '8', '111328', '210185', '25'), +('3', '113', '8', '111332', '207226', '25'), +('3', '113', '8', '111030', '185358', '25'), +('3', '113', '6', '111322', '209330', '25'), +('3', '113', '6', '111324', '209271', '25'), +('3', '113', '6', '111326', '206980', '25'), +('3', '113', '6', '111021', '183600', '25'), +('3', '113', '17', '56046', '139327', '25'), +('3', '113', '17', '81765', '138709', '25'), +('3', '113', '17', '56083', '138193', '25'), +('3', '113', '17', '104406', '118966', '25'), +('3', '113', '7', '94053', '133483', '25'), +('3', '113', '7', '56079', '132870', '25'), +('3', '113', '7', '89369', '127641', '25'), +('3', '113', '7', '104404', '111555', '25'), +('3', '113', '9', '67098', '216282', '25'), +('3', '113', '9', '56031', '128851', '25'), +('3', '113', '9', '56033', '128762', '25'), +('3', '113', '9', '62984', '128731', '25'), +('3', '113', '15', '111348', '210576', '25'), +('3', '113', '15', '111343', '210274', '25'), +('3', '113', '15', '111341', '209891', '25'), +('3', '113', '15', '111342', '209128', '25'), +('3', '113', '20', '111354', '234937', '25'), +('3', '113', '20', '111355', '232757', '25'), +('3', '113', '20', '111353', '231866', '25'), +('3', '113', '20', '111351', '231527', '25'), +('3', '113', '12', '81795', '130125', '25'), +('3', '113', '12', '56073', '129966', '25'), +('3', '113', '12', '89366', '123541', '25'), +('3', '113', '12', '104401', '110167', '25'), +('3', '113', '18', '62986', '135901', '25'), +('3', '113', '18', '56041', '135613', '25'), +('3', '113', '18', '62987', '134504', '25'), +('3', '113', '18', '94054', '134308', '25'), +('3', '113', '19', '62990', '133881', '25'), +('3', '113', '19', '56037', '133489', '25'), +('3', '113', '19', '56075', '132737', '25'), +('3', '113', '19', '81763', '132227', '25'), +('3', '113', '13', '111526', '437199', '25'), +('3', '113', '13', '111514', '420195', '25'), +('3', '113', '13', '111520', '416100', '25'), +('3', '113', '13', '111525', '414499', '25'), +('3', '113', '14', '111536', '216107', '25'), +('3', '113', '14', '111539', '215187', '25'), +('3', '113', '14', '111535', '214818', '25'), +('3', '113', '14', '111538', '214289', '25'), +('3', '113', '11', '85213', '313743', '25'), +('3', '113', '11', '133816', '271556', '25'), +('3', '113', '11', '111529', '261885', '25'), +('3', '113', '11', '111229', '242613', '25'), +('3', '114', '22', '23597', '0', '25'), +('3', '114', '22', '7867', '0', '25'), +('3', '114', '22', '39342', '0', '25'), +('3', '114', '22', '66166', '0', '25'), +('3', '114', '1', '98769', '351565', '25'), +('3', '114', '1', '111309', '210878', '25'), +('3', '114', '1', '111303', '210148', '25'), +('3', '114', '1', '111305', '208889', '25'), +('3', '114', '2', '94056', '132946', '25'), +('3', '114', '2', '62985', '132249', '25'), +('3', '114', '2', '89368', '126367', '25'), +('3', '114', '2', '104403', '111633', '25'), +('3', '114', '3', '111312', '210224', '25'), +('3', '114', '3', '111315', '209393', '25'), +('3', '114', '3', '111313', '209289', '25'), +('3', '114', '3', '111316', '207248', '25'), +('3', '114', '5', '111317', '209842', '25'), +('3', '114', '5', '111318', '208859', '25'), +('3', '114', '5', '111320', '208834', '25'), +('3', '114', '5', '111319', '206908', '25'), +('3', '114', '8', '111331', '211145', '25'), +('3', '114', '8', '111328', '210191', '25'), +('3', '114', '8', '111332', '207231', '25'), +('3', '114', '8', '111030', '185365', '25'), +('3', '114', '6', '111322', '209334', '25'), +('3', '114', '6', '111324', '209277', '25'), +('3', '114', '6', '111326', '206986', '25'), +('3', '114', '6', '111021', '183604', '25'), +('3', '114', '17', '56046', '139335', '25'), +('3', '114', '17', '81765', '138714', '25'), +('3', '114', '17', '56083', '138196', '25'), +('3', '114', '17', '104406', '118973', '25'), +('3', '114', '7', '94053', '133488', '25'), +('3', '114', '7', '56079', '132876', '25'), +('3', '114', '7', '89369', '127646', '25'), +('3', '114', '7', '104404', '111561', '25'), +('3', '114', '9', '67098', '216288', '25'), +('3', '114', '9', '56031', '128856', '25'), +('3', '114', '9', '56033', '128766', '25'), +('3', '114', '9', '62984', '128738', '25'), +('3', '114', '15', '111348', '210583', '25'), +('3', '114', '15', '111343', '210278', '25'), +('3', '114', '15', '111341', '209898', '25'), +('3', '114', '15', '111342', '209135', '25'), +('3', '114', '20', '111354', '234943', '25'), +('3', '114', '20', '111355', '232761', '25'), +('3', '114', '20', '111353', '231872', '25'), +('3', '114', '20', '111351', '231531', '25'), +('3', '114', '12', '81795', '130131', '25'), +('3', '114', '12', '56073', '129973', '25'), +('3', '114', '12', '89366', '123546', '25'), +('3', '114', '12', '104401', '110173', '25'), +('3', '114', '18', '62986', '135909', '25'), +('3', '114', '18', '56041', '135617', '25'), +('3', '114', '18', '62987', '134508', '25'), +('3', '114', '18', '94054', '134314', '25'), +('3', '114', '19', '62990', '133886', '25'), +('3', '114', '19', '56037', '133495', '25'), +('3', '114', '19', '56075', '132743', '25'), +('3', '114', '19', '81763', '132233', '25'), +('3', '114', '13', '111526', '437742', '25'), +('3', '114', '13', '111514', '420710', '25'), +('3', '114', '13', '111520', '416614', '25'), +('3', '114', '13', '111525', '415014', '25'), +('3', '114', '14', '111536', '216113', '25'), +('3', '114', '14', '111539', '215192', '25'), +('3', '114', '14', '111535', '214824', '25'), +('3', '114', '14', '111538', '214294', '25'), +('3', '114', '11', '85213', '313747', '25'), +('3', '114', '11', '133816', '271561', '25'), +('3', '114', '11', '111529', '261966', '25'), +('3', '114', '11', '111229', '242694', '25'), +('3', '115', '22', '23597', '0', '26'), +('3', '115', '22', '7867', '0', '26'), +('3', '115', '22', '39342', '0', '26'), +('3', '115', '22', '66166', '0', '26'), +('3', '115', '1', '98769', '351570', '26'), +('3', '115', '1', '111309', '210882', '26'), +('3', '115', '1', '111303', '210155', '26'), +('3', '115', '1', '111305', '208896', '26'), +('3', '115', '2', '94056', '132951', '26'), +('3', '115', '2', '62985', '132254', '26'), +('3', '115', '2', '89368', '126373', '26'), +('3', '115', '2', '104403', '111638', '26'), +('3', '115', '3', '111312', '210230', '26'), +('3', '115', '3', '111315', '209401', '26'), +('3', '115', '3', '111313', '209294', '26'), +('3', '115', '3', '111316', '207254', '26'), +('3', '115', '5', '111317', '209849', '26'), +('3', '115', '5', '111318', '208863', '26'), +('3', '115', '5', '111320', '208839', '26'), +('3', '115', '5', '111319', '206915', '26'), +('3', '115', '8', '111331', '211152', '26'), +('3', '115', '8', '111328', '210197', '26'), +('3', '115', '8', '111332', '207236', '26'), +('3', '115', '8', '111030', '185372', '26'), +('3', '115', '6', '111322', '209339', '26'), +('3', '115', '6', '111324', '209283', '26'), +('3', '115', '6', '111326', '206992', '26'), +('3', '115', '6', '111021', '183609', '26'), +('3', '115', '17', '56046', '139342', '26'), +('3', '115', '17', '81765', '138719', '26'), +('3', '115', '17', '56083', '138200', '26'), +('3', '115', '17', '104406', '118981', '26'), +('3', '115', '7', '94053', '133494', '26'), +('3', '115', '7', '56079', '132882', '26'), +('3', '115', '7', '89369', '127652', '26'), +('3', '115', '7', '104404', '111567', '26'), +('3', '115', '9', '67098', '216293', '26'), +('3', '115', '9', '56031', '128860', '26'), +('3', '115', '9', '56033', '128770', '26'), +('3', '115', '9', '62984', '128746', '26'), +('3', '115', '15', '111348', '210590', '26'), +('3', '115', '15', '111343', '210283', '26'), +('3', '115', '15', '111341', '209905', '26'), +('3', '115', '15', '111342', '209141', '26'), +('3', '115', '20', '111354', '234949', '26'), +('3', '115', '20', '111355', '232765', '26'), +('3', '115', '20', '111353', '231878', '26'), +('3', '115', '20', '111351', '231536', '26'), +('3', '115', '12', '81795', '130137', '26'), +('3', '115', '12', '56073', '129981', '26'), +('3', '115', '12', '89366', '123551', '26'), +('3', '115', '12', '104401', '110180', '26'), +('3', '115', '18', '62986', '135917', '26'), +('3', '115', '18', '56041', '135620', '26'), +('3', '115', '18', '62987', '134511', '26'), +('3', '115', '18', '94054', '134319', '26'), +('3', '115', '19', '62990', '133891', '26'), +('3', '115', '19', '56037', '133501', '26'), +('3', '115', '19', '56075', '132750', '26'), +('3', '115', '19', '81763', '132239', '26'), +('3', '115', '13', '111526', '438285', '26'), +('3', '115', '13', '111514', '421253', '26'), +('3', '115', '13', '111520', '417128', '26'), +('3', '115', '13', '111525', '415528', '26'), +('3', '115', '14', '111536', '216118', '26'), +('3', '115', '14', '111539', '215198', '26'), +('3', '115', '14', '111535', '214831', '26'), +('3', '115', '14', '111538', '214298', '26'), +('3', '115', '11', '85213', '313751', '26'), +('3', '115', '11', '133816', '271566', '26'), +('3', '115', '11', '111529', '262047', '26'), +('3', '115', '11', '111229', '242766', '26'), +('4', '1', '22', '8567', '0', '0'), +('4', '1', '22', '10323', '0', '0'), +('4', '1', '22', '66166', '0', '0'), +('4', '1', '22', '10664', '0', '0'), +('4', '1', '1', '30361', '1290', '0'), +('4', '1', '1', '14701', '624', '0'), +('4', '1', '1', '14702', '600', '0'), +('4', '1', '1', '14568', '477', '0'), +('4', '1', '2', '30363', '1450', '0'), +('4', '1', '2', '10142', '1345', '0'), +('4', '1', '2', '4341', '1323', '0'), +('4', '1', '2', '3040', '1112', '0'), +('4', '1', '3', '14705', '990', '0'), +('4', '1', '3', '14706', '990', '0'), +('4', '1', '3', '14695', '431', '0'), +('4', '1', '3', '2282', '336', '0'), +('4', '1', '5', '30362', '1340', '0'), +('4', '1', '5', '14703', '1100', '0'), +('4', '1', '5', '14700', '636', '0'), +('4', '1', '5', '10147', '630', '0'), +('4', '1', '8', '11621', '8407', '0'), +('4', '1', '8', '11551', '1656', '0'), +('4', '1', '8', '11603', '1632', '0'), +('4', '1', '8', '3403', '1219', '0'), +('4', '1', '6', '1557', '5371', '0'), +('4', '1', '6', '2714', '1298', '0'), +('4', '1', '6', '3309', '554', '0'), +('4', '1', '6', '4165', '423', '0'), +('4', '1', '17', '11623', '2062', '0'), +('4', '1', '17', '4832', '1516', '0'), +('4', '1', '17', '4892', '1373', '0'), +('4', '1', '17', '3301', '865', '0'), +('4', '1', '7', '4833', '846', '0'), +('4', '1', '7', '4411', '694', '0'), +('4', '1', '7', '4893', '476', '0'), +('4', '1', '7', '71303', '377', '0'), +('4', '1', '9', '1541', '1637', '0'), +('4', '1', '9', '12189', '1013', '0'), +('4', '1', '9', '4834', '992', '0'), +('4', '1', '9', '13280', '505', '0'), +('4', '1', '15', '14707', '1050', '0'), +('4', '1', '15', '10366', '827', '0'), +('4', '1', '15', '30360', '700', '0'), +('4', '1', '15', '14679', '610', '0'), +('4', '1', '20', '11601', '6989', '0'), +('4', '1', '20', '1365', '4200', '0'), +('4', '1', '20', '2916', '3731', '0'), +('4', '1', '20', '2471', '3248', '0'), +('4', '1', '12', '11624', '1051', '0'), +('4', '1', '12', '20655', '1048', '0'), +('4', '1', '12', '4895', '995', '0'), +('4', '1', '12', '2923', '848', '0'), +('4', '1', '18', '4412', '694', '0'), +('4', '1', '18', '4896', '562', '0'), +('4', '1', '18', '4836', '561', '0'), +('4', '1', '18', '3191', '460', '0'), +('4', '1', '19', '4837', '1163', '0'), +('4', '1', '19', '4897', '710', '0'), +('4', '1', '19', '68239', '695', '0'), +('4', '1', '19', '3312', '338', '0'), +('4', '1', '13', '27732', '29193', '0'), +('4', '1', '13', '11663', '23580', '0'), +('4', '1', '13', '7257', '23041', '0'), +('4', '1', '13', '6692', '21631', '0'), +('4', '1', '14', '27732', '29193', '0'), +('4', '1', '14', '7257', '23041', '0'), +('4', '1', '14', '6692', '21631', '0'), +('4', '1', '14', '20679', '19800', '0'), +('4', '1', '11', '11696', '51098', '0'), +('4', '1', '11', '8325', '42360', '0'), +('4', '1', '11', '8408', '40970', '0'), +('4', '1', '11', '8402', '40395', '0'), +('4', '2', '22', '8567', '0', '0'), +('4', '2', '22', '10323', '0', '0'), +('4', '2', '22', '66166', '0', '0'), +('4', '2', '22', '10664', '0', '0'), +('4', '2', '1', '30361', '1290', '0'), +('4', '2', '1', '14701', '624', '0'), +('4', '2', '1', '14702', '600', '0'), +('4', '2', '1', '14568', '487', '0'), +('4', '2', '2', '30363', '1450', '0'), +('4', '2', '2', '10142', '1345', '0'), +('4', '2', '2', '4341', '1323', '0'), +('4', '2', '2', '3040', '1112', '0'), +('4', '2', '3', '14705', '990', '0'), +('4', '2', '3', '14706', '990', '0'), +('4', '2', '3', '14695', '440', '0'), +('4', '2', '3', '2282', '336', '0'), +('4', '2', '5', '30362', '1340', '0'), +('4', '2', '5', '14703', '1100', '0'), +('4', '2', '5', '14700', '636', '0'), +('4', '2', '5', '10147', '630', '0'), +('4', '2', '8', '11621', '8407', '0'), +('4', '2', '8', '11551', '1656', '0'), +('4', '2', '8', '11603', '1643', '0'), +('4', '2', '8', '3403', '1219', '0'), +('4', '2', '6', '1557', '5371', '0'), +('4', '2', '6', '2714', '1308', '0'), +('4', '2', '6', '3309', '554', '0'), +('4', '2', '6', '4165', '423', '0'), +('4', '2', '17', '11623', '2062', '0'), +('4', '2', '17', '4832', '1522', '0'), +('4', '2', '17', '4892', '1389', '0'), +('4', '2', '17', '3301', '865', '0'), +('4', '2', '7', '4833', '846', '0'), +('4', '2', '7', '4411', '694', '0'), +('4', '2', '7', '4893', '476', '0'), +('4', '2', '7', '71303', '381', '0'), +('4', '2', '9', '1541', '1649', '0'), +('4', '2', '9', '12189', '1013', '0'), +('4', '2', '9', '4834', '992', '0'), +('4', '2', '9', '13280', '505', '0'), +('4', '2', '15', '14707', '1050', '0'), +('4', '2', '15', '10366', '827', '0'), +('4', '2', '15', '30360', '700', '0'), +('4', '2', '15', '14679', '610', '0'), +('4', '2', '20', '11601', '6993', '0'), +('4', '2', '20', '1365', '4200', '0'), +('4', '2', '20', '2916', '3737', '0'), +('4', '2', '20', '2471', '3248', '0'), +('4', '2', '12', '11624', '1054', '0'), +('4', '2', '12', '20655', '1051', '0'), +('4', '2', '12', '4895', '995', '0'), +('4', '2', '12', '2923', '848', '0'), +('4', '2', '18', '4412', '694', '0'), +('4', '2', '18', '4896', '568', '0'), +('4', '2', '18', '4836', '563', '0'), +('4', '2', '18', '3191', '460', '0'), +('4', '2', '19', '4837', '1169', '0'), +('4', '2', '19', '4897', '712', '0'), +('4', '2', '19', '68239', '698', '0'), +('4', '2', '19', '3312', '338', '0'), +('4', '2', '13', '27732', '29203', '0'), +('4', '2', '13', '11663', '23580', '0'), +('4', '2', '13', '7257', '23041', '0'), +('4', '2', '13', '6692', '21631', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '2', '14', '27732', '29203', '0'), +('4', '2', '14', '7257', '23041', '0'), +('4', '2', '14', '6692', '21631', '0'), +('4', '2', '14', '20679', '19800', '0'), +('4', '2', '11', '11696', '51098', '0'), +('4', '2', '11', '8325', '42360', '0'), +('4', '2', '11', '8408', '40970', '0'), +('4', '2', '11', '8402', '40395', '0'), +('4', '3', '22', '8567', '0', '0'), +('4', '3', '22', '10323', '0', '0'), +('4', '3', '22', '66166', '0', '0'), +('4', '3', '22', '10664', '0', '0'), +('4', '3', '1', '30361', '1290', '0'), +('4', '3', '1', '14701', '624', '0'), +('4', '3', '1', '14702', '600', '0'), +('4', '3', '1', '14568', '496', '0'), +('4', '3', '2', '30363', '1450', '0'), +('4', '3', '2', '10142', '1345', '0'), +('4', '3', '2', '4341', '1323', '0'), +('4', '3', '2', '3040', '1112', '0'), +('4', '3', '3', '14706', '990', '0'), +('4', '3', '3', '14705', '990', '0'), +('4', '3', '3', '14695', '448', '0'), +('4', '3', '3', '2282', '336', '0'), +('4', '3', '5', '30362', '1340', '0'), +('4', '3', '5', '14703', '1100', '0'), +('4', '3', '5', '14700', '636', '0'), +('4', '3', '5', '10147', '630', '0'), +('4', '3', '8', '11621', '8407', '0'), +('4', '3', '8', '11551', '1656', '0'), +('4', '3', '8', '11603', '1653', '0'), +('4', '3', '8', '3403', '1219', '0'), +('4', '3', '6', '1557', '5371', '0'), +('4', '3', '6', '2714', '1318', '0'), +('4', '3', '6', '3309', '554', '0'), +('4', '3', '6', '4165', '423', '0'), +('4', '3', '17', '11623', '2062', '0'), +('4', '3', '17', '4832', '1528', '0'), +('4', '3', '17', '4892', '1405', '0'), +('4', '3', '17', '3301', '865', '0'), +('4', '3', '7', '4833', '846', '0'), +('4', '3', '7', '4411', '694', '0'), +('4', '3', '7', '4893', '476', '0'), +('4', '3', '7', '71303', '385', '0'), +('4', '3', '9', '1541', '1661', '0'), +('4', '3', '9', '12189', '1013', '0'), +('4', '3', '9', '4834', '992', '0'), +('4', '3', '9', '13280', '505', '0'), +('4', '3', '15', '14707', '1050', '0'), +('4', '3', '15', '10366', '827', '0'), +('4', '3', '15', '30360', '700', '0'), +('4', '3', '15', '14679', '610', '0'), +('4', '3', '20', '11601', '6997', '0'), +('4', '3', '20', '1365', '4200', '0'), +('4', '3', '20', '2916', '3743', '0'), +('4', '3', '20', '2471', '3248', '0'), +('4', '3', '12', '11624', '1057', '0'), +('4', '3', '12', '20655', '1054', '0'), +('4', '3', '12', '4895', '995', '0'), +('4', '3', '12', '2923', '848', '0'), +('4', '3', '18', '4412', '694', '0'), +('4', '3', '18', '4896', '574', '0'), +('4', '3', '18', '4836', '565', '0'), +('4', '3', '18', '3191', '460', '0'), +('4', '3', '19', '4837', '1175', '0'), +('4', '3', '19', '4897', '714', '0'), +('4', '3', '19', '68239', '702', '0'), +('4', '3', '19', '3312', '338', '0'), +('4', '3', '13', '27732', '29212', '0'), +('4', '3', '13', '11663', '23580', '0'), +('4', '3', '13', '7257', '23041', '0'), +('4', '3', '13', '6692', '21631', '0'), +('4', '3', '14', '27732', '29212', '0'), +('4', '3', '14', '7257', '23041', '0'), +('4', '3', '14', '6692', '21631', '0'), +('4', '3', '14', '20679', '19800', '0'), +('4', '3', '11', '11696', '51098', '0'), +('4', '3', '11', '8325', '42360', '0'), +('4', '3', '11', '8408', '40970', '0'), +('4', '3', '11', '8402', '40395', '0'), +('4', '4', '22', '8567', '0', '0'), +('4', '4', '22', '10323', '0', '0'), +('4', '4', '22', '66166', '0', '0'), +('4', '4', '22', '10664', '0', '0'), +('4', '4', '1', '30361', '1290', '0'), +('4', '4', '1', '14701', '624', '0'), +('4', '4', '1', '14702', '600', '0'), +('4', '4', '1', '14568', '506', '0'), +('4', '4', '2', '30363', '1450', '0'), +('4', '4', '2', '10142', '1345', '0'), +('4', '4', '2', '4341', '1323', '0'), +('4', '4', '2', '3040', '1112', '0'), +('4', '4', '3', '14706', '990', '0'), +('4', '4', '3', '14705', '990', '0'), +('4', '4', '3', '14695', '457', '0'), +('4', '4', '3', '2282', '336', '0'), +('4', '4', '5', '30362', '1340', '0'), +('4', '4', '5', '14703', '1100', '0'), +('4', '4', '5', '14700', '636', '0'), +('4', '4', '5', '10147', '630', '0'), +('4', '4', '8', '11621', '8407', '0'), +('4', '4', '8', '11603', '1664', '0'), +('4', '4', '8', '11551', '1656', '0'), +('4', '4', '8', '3403', '1219', '0'), +('4', '4', '6', '1557', '5371', '0'), +('4', '4', '6', '2714', '1327', '0'), +('4', '4', '6', '3309', '554', '0'), +('4', '4', '6', '4165', '423', '0'), +('4', '4', '17', '11623', '2062', '0'), +('4', '4', '17', '4832', '1534', '0'), +('4', '4', '17', '4892', '1420', '0'), +('4', '4', '17', '3301', '865', '0'), +('4', '4', '7', '4833', '846', '0'), +('4', '4', '7', '4411', '694', '0'), +('4', '4', '7', '4893', '476', '0'), +('4', '4', '7', '71303', '388', '0'), +('4', '4', '9', '1541', '1673', '0'), +('4', '4', '9', '12189', '1013', '0'), +('4', '4', '9', '4834', '992', '0'), +('4', '4', '9', '13280', '505', '0'), +('4', '4', '15', '14707', '1050', '0'), +('4', '4', '15', '10366', '827', '0'), +('4', '4', '15', '30360', '700', '0'), +('4', '4', '15', '14679', '610', '0'), +('4', '4', '20', '11601', '7002', '0'), +('4', '4', '20', '1365', '4200', '0'), +('4', '4', '20', '2916', '3749', '0'), +('4', '4', '20', '2471', '3248', '0'), +('4', '4', '12', '11624', '1060', '0'), +('4', '4', '12', '20655', '1057', '0'), +('4', '4', '12', '4895', '995', '0'), +('4', '4', '12', '2923', '848', '0'), +('4', '4', '18', '4412', '694', '0'), +('4', '4', '18', '4896', '580', '0'), +('4', '4', '18', '4836', '567', '0'), +('4', '4', '18', '3191', '460', '0'), +('4', '4', '19', '4837', '1181', '0'), +('4', '4', '19', '4897', '716', '0'), +('4', '4', '19', '68239', '706', '0'), +('4', '4', '19', '3312', '338', '0'), +('4', '4', '13', '27732', '29222', '0'), +('4', '4', '13', '11663', '23580', '0'), +('4', '4', '13', '7257', '23041', '0'), +('4', '4', '13', '6692', '21631', '0'), +('4', '4', '14', '27732', '29222', '0'), +('4', '4', '14', '7257', '23041', '0'), +('4', '4', '14', '6692', '21631', '0'), +('4', '4', '14', '20679', '19800', '0'), +('4', '4', '11', '11696', '51098', '0'), +('4', '4', '11', '8325', '42360', '0'), +('4', '4', '11', '8408', '40970', '0'), +('4', '4', '11', '8402', '40395', '0'), +('4', '5', '22', '8567', '0', '0'), +('4', '5', '22', '10323', '0', '0'), +('4', '5', '22', '66166', '0', '0'), +('4', '5', '22', '10664', '0', '0'), +('4', '5', '1', '30361', '1290', '0'), +('4', '5', '1', '14701', '624', '0'), +('4', '5', '1', '14702', '600', '0'), +('4', '5', '1', '14568', '516', '0'), +('4', '5', '2', '30363', '1450', '0'), +('4', '5', '2', '10142', '1345', '0'), +('4', '5', '2', '4341', '1323', '0'), +('4', '5', '2', '3040', '1112', '0'), +('4', '5', '3', '14706', '990', '0'), +('4', '5', '3', '14705', '990', '0'), +('4', '5', '3', '14695', '465', '0'), +('4', '5', '3', '2282', '336', '0'), +('4', '5', '5', '30362', '1340', '0'), +('4', '5', '5', '14703', '1100', '0'), +('4', '5', '5', '14700', '636', '0'), +('4', '5', '5', '10147', '630', '0'), +('4', '5', '8', '11621', '8407', '0'), +('4', '5', '8', '11603', '1675', '0'), +('4', '5', '8', '11551', '1656', '0'), +('4', '5', '8', '3403', '1219', '0'), +('4', '5', '6', '1557', '5371', '0'), +('4', '5', '6', '2714', '1337', '0'), +('4', '5', '6', '3309', '554', '0'), +('4', '5', '6', '4165', '423', '0'), +('4', '5', '17', '11623', '2062', '0'), +('4', '5', '17', '4832', '1540', '0'), +('4', '5', '17', '4892', '1436', '0'), +('4', '5', '17', '3301', '865', '0'), +('4', '5', '7', '4833', '846', '0'), +('4', '5', '7', '4411', '694', '0'), +('4', '5', '7', '4893', '476', '0'), +('4', '5', '7', '71303', '392', '0'), +('4', '5', '9', '1541', '1685', '0'), +('4', '5', '9', '12189', '1013', '0'), +('4', '5', '9', '4834', '992', '0'), +('4', '5', '9', '13280', '505', '0'), +('4', '5', '15', '14707', '1050', '0'), +('4', '5', '15', '10366', '827', '0'), +('4', '5', '15', '30360', '700', '0'), +('4', '5', '15', '14679', '610', '0'), +('4', '5', '20', '11601', '7005', '0'), +('4', '5', '20', '1365', '4200', '0'), +('4', '5', '20', '2916', '3755', '0'), +('4', '5', '20', '2471', '3248', '0'), +('4', '5', '12', '11624', '1062', '0'), +('4', '5', '12', '20655', '1060', '0'), +('4', '5', '12', '4895', '995', '0'), +('4', '5', '12', '2923', '848', '0'), +('4', '5', '18', '4412', '694', '0'), +('4', '5', '18', '4896', '587', '0'), +('4', '5', '18', '4836', '569', '0'), +('4', '5', '18', '3191', '460', '0'), +('4', '5', '19', '4837', '1187', '0'), +('4', '5', '19', '4897', '718', '0'), +('4', '5', '19', '68239', '709', '0'), +('4', '5', '19', '3312', '338', '0'), +('4', '5', '13', '27732', '29232', '0'), +('4', '5', '13', '11663', '23580', '0'), +('4', '5', '13', '7257', '23041', '0'), +('4', '5', '13', '6692', '21631', '0'), +('4', '5', '14', '27732', '29232', '0'), +('4', '5', '14', '7257', '23041', '0'), +('4', '5', '14', '6692', '21631', '0'), +('4', '5', '14', '20679', '19800', '0'), +('4', '5', '11', '11696', '51098', '0'), +('4', '5', '11', '8325', '42360', '0'), +('4', '5', '11', '8408', '40970', '0'), +('4', '5', '11', '8402', '40395', '0'), +('4', '6', '22', '8567', '0', '0'), +('4', '6', '22', '10323', '0', '0'), +('4', '6', '22', '66166', '0', '0'), +('4', '6', '22', '10664', '0', '0'), +('4', '6', '1', '30361', '1290', '0'), +('4', '6', '1', '14701', '624', '0'), +('4', '6', '1', '14702', '600', '0'), +('4', '6', '1', '14568', '525', '0'), +('4', '6', '2', '30363', '1450', '0'), +('4', '6', '2', '10142', '1345', '0'), +('4', '6', '2', '4341', '1323', '0'), +('4', '6', '2', '3040', '1112', '0'), +('4', '6', '3', '14706', '990', '0'), +('4', '6', '3', '14705', '990', '0'), +('4', '6', '3', '14695', '474', '0'), +('4', '6', '3', '2282', '336', '0'), +('4', '6', '5', '30362', '1340', '0'), +('4', '6', '5', '14703', '1100', '0'), +('4', '6', '5', '14567', '636', '0'), +('4', '6', '5', '14700', '636', '0'), +('4', '6', '8', '11621', '8407', '0'), +('4', '6', '8', '11603', '1686', '0'), +('4', '6', '8', '11551', '1656', '0'), +('4', '6', '8', '3403', '1219', '0'), +('4', '6', '6', '1557', '5371', '0'), +('4', '6', '6', '2714', '1347', '0'), +('4', '6', '6', '3309', '554', '0'), +('4', '6', '6', '4165', '423', '0'), +('4', '6', '17', '11623', '2062', '0'), +('4', '6', '17', '4832', '1546', '0'), +('4', '6', '17', '4892', '1452', '0'), +('4', '6', '17', '3301', '865', '0'), +('4', '6', '7', '4833', '846', '0'), +('4', '6', '7', '4411', '694', '0'), +('4', '6', '7', '4893', '476', '0'), +('4', '6', '7', '71303', '395', '0'), +('4', '6', '9', '1541', '1697', '0'), +('4', '6', '9', '12189', '1013', '0'), +('4', '6', '9', '4834', '992', '0'), +('4', '6', '9', '13280', '505', '0'), +('4', '6', '15', '14707', '1050', '0'), +('4', '6', '15', '10366', '827', '0'), +('4', '6', '15', '30360', '700', '0'), +('4', '6', '15', '14679', '610', '0'), +('4', '6', '20', '11601', '7009', '0'), +('4', '6', '20', '1365', '4200', '0'), +('4', '6', '20', '2916', '3761', '0'), +('4', '6', '20', '2471', '3248', '0'), +('4', '6', '12', '11624', '1065', '0'), +('4', '6', '12', '20655', '1064', '0'), +('4', '6', '12', '4895', '995', '0'), +('4', '6', '12', '2923', '848', '0'), +('4', '6', '18', '4412', '694', '0'), +('4', '6', '18', '4896', '593', '0'), +('4', '6', '18', '4836', '571', '0'), +('4', '6', '18', '3191', '460', '0'), +('4', '6', '19', '4837', '1193', '0'), +('4', '6', '19', '4897', '720', '0'), +('4', '6', '19', '68239', '713', '0'), +('4', '6', '19', '3312', '338', '0'), +('4', '6', '13', '27732', '29241', '0'), +('4', '6', '13', '11663', '23580', '0'), +('4', '6', '13', '7257', '23041', '0'), +('4', '6', '13', '6692', '21631', '0'), +('4', '6', '14', '27732', '29241', '0'), +('4', '6', '14', '7257', '23041', '0'), +('4', '6', '14', '6692', '21631', '0'), +('4', '6', '14', '20679', '19800', '0'), +('4', '6', '11', '11696', '51098', '0'), +('4', '6', '11', '8325', '42360', '0'), +('4', '6', '11', '8408', '40970', '0'), +('4', '6', '11', '8402', '40395', '0'), +('4', '7', '22', '8567', '0', '0'), +('4', '7', '22', '10323', '0', '0'), +('4', '7', '22', '66166', '0', '0'), +('4', '7', '22', '10664', '0', '0'), +('4', '7', '1', '30361', '1290', '0'), +('4', '7', '1', '14701', '624', '0'), +('4', '7', '1', '14702', '600', '0'), +('4', '7', '1', '14568', '535', '0'), +('4', '7', '2', '30363', '1450', '0'), +('4', '7', '2', '10142', '1345', '0'), +('4', '7', '2', '4341', '1323', '0'), +('4', '7', '2', '3040', '1112', '0'), +('4', '7', '3', '14706', '990', '0'), +('4', '7', '3', '14705', '990', '0'), +('4', '7', '3', '14695', '482', '0'), +('4', '7', '3', '2282', '336', '0'), +('4', '7', '5', '30362', '1340', '0'), +('4', '7', '5', '14703', '1100', '0'), +('4', '7', '5', '14567', '644', '0'), +('4', '7', '5', '14700', '636', '0'), +('4', '7', '8', '11621', '8407', '0'), +('4', '7', '8', '11603', '1697', '0'), +('4', '7', '8', '11551', '1656', '0'), +('4', '7', '8', '3403', '1219', '0'), +('4', '7', '6', '1557', '5371', '0'), +('4', '7', '6', '2714', '1356', '0'), +('4', '7', '6', '3309', '554', '0'), +('4', '7', '6', '4165', '423', '0'), +('4', '7', '17', '11623', '2062', '0'), +('4', '7', '17', '4832', '1553', '0'), +('4', '7', '17', '4892', '1468', '0'), +('4', '7', '17', '3301', '865', '0'), +('4', '7', '7', '4833', '846', '0'), +('4', '7', '7', '4411', '694', '0'), +('4', '7', '7', '4893', '476', '0'), +('4', '7', '7', '71303', '399', '0'), +('4', '7', '9', '1541', '1709', '0'), +('4', '7', '9', '12189', '1013', '0'), +('4', '7', '9', '4834', '992', '0'), +('4', '7', '9', '13280', '505', '0'), +('4', '7', '15', '14707', '1050', '0'), +('4', '7', '15', '10366', '827', '0'), +('4', '7', '15', '30360', '700', '0'), +('4', '7', '15', '14679', '610', '0'), +('4', '7', '20', '11601', '7014', '0'), +('4', '7', '20', '1365', '4200', '0'), +('4', '7', '20', '2916', '3767', '0'), +('4', '7', '20', '2471', '3248', '0'), +('4', '7', '12', '11624', '1068', '0'), +('4', '7', '12', '20655', '1067', '0'), +('4', '7', '12', '4895', '995', '0'), +('4', '7', '12', '2923', '848', '0'), +('4', '7', '18', '4412', '694', '0'), +('4', '7', '18', '4896', '599', '0'), +('4', '7', '18', '4836', '573', '0'), +('4', '7', '18', '3191', '460', '0'), +('4', '7', '19', '4837', '1199', '0'), +('4', '7', '19', '4897', '722', '0'), +('4', '7', '19', '68239', '717', '0'), +('4', '7', '19', '3312', '338', '0'), +('4', '7', '13', '27732', '29251', '0'), +('4', '7', '13', '11663', '23580', '0'), +('4', '7', '13', '7257', '23041', '0'), +('4', '7', '13', '6692', '21631', '0'), +('4', '7', '14', '27732', '29251', '0'), +('4', '7', '14', '7257', '23041', '0'), +('4', '7', '14', '6692', '21631', '0'), +('4', '7', '14', '20679', '19800', '0'), +('4', '7', '11', '11696', '51098', '0'), +('4', '7', '11', '8325', '42360', '0'), +('4', '7', '11', '8408', '40970', '0'), +('4', '7', '11', '8402', '40395', '0'), +('4', '8', '22', '8567', '0', '0'), +('4', '8', '22', '10323', '0', '0'), +('4', '8', '22', '66166', '0', '0'), +('4', '8', '22', '10664', '0', '0'), +('4', '8', '1', '30361', '1290', '0'), +('4', '8', '1', '14701', '624', '0'), +('4', '8', '1', '14702', '600', '0'), +('4', '8', '1', '14568', '545', '0'), +('4', '8', '2', '30363', '1450', '0'), +('4', '8', '2', '10142', '1345', '0'), +('4', '8', '2', '4341', '1323', '0'), +('4', '8', '2', '3040', '1112', '0'), +('4', '8', '3', '14706', '990', '0'), +('4', '8', '3', '14705', '990', '0'), +('4', '8', '3', '14695', '490', '0'), +('4', '8', '3', '2282', '336', '0'), +('4', '8', '5', '30362', '1340', '0'), +('4', '8', '5', '14703', '1100', '0'), +('4', '8', '5', '14567', '651', '0'), +('4', '8', '5', '14700', '636', '0'), +('4', '8', '8', '11621', '8407', '0'), +('4', '8', '8', '11603', '1708', '0'), +('4', '8', '8', '11551', '1656', '0'), +('4', '8', '8', '3403', '1219', '0'), +('4', '8', '6', '1557', '5371', '0'), +('4', '8', '6', '2714', '1366', '0'), +('4', '8', '6', '3309', '554', '0'), +('4', '8', '6', '4165', '423', '0'), +('4', '8', '17', '11623', '2062', '0'), +('4', '8', '17', '4832', '1559', '0'), +('4', '8', '17', '4892', '1483', '0'), +('4', '8', '17', '3301', '865', '0'), +('4', '8', '7', '4833', '846', '0'), +('4', '8', '7', '4411', '694', '0'), +('4', '8', '7', '4893', '476', '0'), +('4', '8', '7', '71303', '403', '0'), +('4', '8', '9', '1541', '1721', '0'), +('4', '8', '9', '12189', '1013', '0'), +('4', '8', '9', '4834', '992', '0'), +('4', '8', '9', '13280', '505', '0'), +('4', '8', '15', '14707', '1050', '0'), +('4', '8', '15', '10366', '827', '0'), +('4', '8', '15', '30360', '700', '0'), +('4', '8', '15', '14679', '610', '0'), +('4', '8', '20', '11601', '7018', '0'), +('4', '8', '20', '1365', '4200', '0'), +('4', '8', '20', '2916', '3773', '0'), +('4', '8', '20', '2471', '3248', '0'), +('4', '8', '12', '11624', '1071', '0'), +('4', '8', '12', '20655', '1070', '0'), +('4', '8', '12', '4895', '995', '0'), +('4', '8', '12', '2923', '848', '0'), +('4', '8', '18', '4412', '694', '0'), +('4', '8', '18', '4896', '605', '0'), +('4', '8', '18', '4836', '575', '0'), +('4', '8', '18', '3191', '460', '0'), +('4', '8', '19', '4837', '1205', '0'), +('4', '8', '19', '4897', '725', '0'), +('4', '8', '19', '68239', '720', '0'), +('4', '8', '19', '3312', '338', '0'), +('4', '8', '13', '27732', '29261', '0'), +('4', '8', '13', '11663', '23580', '0'), +('4', '8', '13', '7257', '23041', '0'), +('4', '8', '13', '6692', '21631', '0'), +('4', '8', '14', '27732', '29261', '0'), +('4', '8', '14', '7257', '23041', '0'), +('4', '8', '14', '6692', '21631', '0'), +('4', '8', '14', '20679', '19800', '0'), +('4', '8', '11', '11696', '51098', '0'), +('4', '8', '11', '8325', '42360', '0'), +('4', '8', '11', '8408', '40970', '0'), +('4', '8', '11', '8402', '40395', '0'), +('4', '9', '22', '8567', '0', '0'), +('4', '9', '22', '10323', '0', '0'), +('4', '9', '22', '66166', '0', '0'), +('4', '9', '22', '10664', '0', '0'), +('4', '9', '1', '30361', '1290', '0'), +('4', '9', '1', '14701', '624', '0'), +('4', '9', '1', '14702', '600', '0'), +('4', '9', '1', '14568', '554', '0'), +('4', '9', '2', '30363', '1450', '0'), +('4', '9', '2', '10142', '1345', '0'), +('4', '9', '2', '4341', '1323', '0'), +('4', '9', '2', '3040', '1112', '0'), +('4', '9', '3', '14706', '990', '0'), +('4', '9', '3', '14705', '990', '0'), +('4', '9', '3', '14695', '499', '0'), +('4', '9', '3', '2282', '336', '0'), +('4', '9', '5', '30362', '1340', '0'), +('4', '9', '5', '14703', '1100', '0'), +('4', '9', '5', '14567', '659', '0'), +('4', '9', '5', '14700', '636', '0'), +('4', '9', '8', '11621', '8407', '0'), +('4', '9', '8', '11603', '1719', '0'), +('4', '9', '8', '11551', '1656', '0'), +('4', '9', '8', '27731', '1227', '0'), +('4', '9', '6', '1557', '5371', '0'), +('4', '9', '6', '2714', '1376', '0'), +('4', '9', '6', '3309', '554', '0'), +('4', '9', '6', '4165', '423', '0'), +('4', '9', '17', '11623', '2062', '0'), +('4', '9', '17', '4832', '1564', '0'), +('4', '9', '17', '4892', '1499', '0'), +('4', '9', '17', '3301', '865', '0'), +('4', '9', '7', '4833', '846', '0'), +('4', '9', '7', '4411', '694', '0'), +('4', '9', '7', '4893', '476', '0'), +('4', '9', '7', '71303', '406', '0'), +('4', '9', '9', '1541', '1734', '0'), +('4', '9', '9', '12189', '1013', '0'), +('4', '9', '9', '4834', '992', '0'), +('4', '9', '9', '13280', '505', '0'), +('4', '9', '15', '14707', '1050', '0'), +('4', '9', '15', '10366', '827', '0'), +('4', '9', '15', '30360', '700', '0'), +('4', '9', '15', '14679', '610', '0'), +('4', '9', '20', '11601', '7021', '0'), +('4', '9', '20', '1365', '4200', '0'), +('4', '9', '20', '2916', '3779', '0'), +('4', '9', '20', '2471', '3248', '0'), +('4', '9', '12', '11624', '1074', '0'), +('4', '9', '12', '20655', '1073', '0'), +('4', '9', '12', '4895', '995', '0'), +('4', '9', '12', '2923', '848', '0'), +('4', '9', '18', '4412', '694', '0'), +('4', '9', '18', '4896', '611', '0'), +('4', '9', '18', '4836', '577', '0'), +('4', '9', '18', '3191', '460', '0'), +('4', '9', '19', '4837', '1211', '0'), +('4', '9', '19', '4897', '726', '0'), +('4', '9', '19', '68239', '724', '0'), +('4', '9', '19', '3312', '338', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '9', '13', '27732', '29270', '0'), +('4', '9', '13', '11663', '23580', '0'), +('4', '9', '13', '7257', '23041', '0'), +('4', '9', '13', '6692', '21631', '0'), +('4', '9', '14', '27732', '29270', '0'), +('4', '9', '14', '7257', '23041', '0'), +('4', '9', '14', '6692', '21631', '0'), +('4', '9', '14', '20679', '19800', '0'), +('4', '9', '11', '11696', '51098', '0'), +('4', '9', '11', '8325', '42360', '0'), +('4', '9', '11', '8408', '40970', '0'), +('4', '9', '11', '8402', '40395', '0'), +('4', '10', '22', '8567', '0', '0'), +('4', '10', '22', '10323', '0', '0'), +('4', '10', '22', '66166', '0', '0'), +('4', '10', '22', '10664', '0', '0'), +('4', '10', '1', '30361', '1290', '0'), +('4', '10', '1', '14701', '624', '0'), +('4', '10', '1', '14702', '600', '0'), +('4', '10', '1', '14568', '564', '0'), +('4', '10', '2', '30363', '1450', '0'), +('4', '10', '2', '10142', '1345', '0'), +('4', '10', '2', '4341', '1323', '0'), +('4', '10', '2', '3040', '1112', '0'), +('4', '10', '3', '14706', '990', '0'), +('4', '10', '3', '14705', '990', '0'), +('4', '10', '3', '14695', '507', '0'), +('4', '10', '3', '2282', '336', '0'), +('4', '10', '5', '30362', '1340', '0'), +('4', '10', '5', '14703', '1100', '0'), +('4', '10', '5', '14567', '667', '0'), +('4', '10', '5', '14700', '636', '0'), +('4', '10', '8', '11621', '8407', '0'), +('4', '10', '8', '11603', '1730', '0'), +('4', '10', '8', '11551', '1656', '0'), +('4', '10', '8', '27731', '1236', '0'), +('4', '10', '6', '1557', '5371', '0'), +('4', '10', '6', '2714', '1385', '0'), +('4', '10', '6', '3309', '554', '0'), +('4', '10', '6', '4165', '423', '0'), +('4', '10', '17', '11623', '2062', '0'), +('4', '10', '17', '4832', '1571', '0'), +('4', '10', '17', '4892', '1515', '0'), +('4', '10', '17', '3301', '865', '0'), +('4', '10', '7', '4833', '846', '0'), +('4', '10', '7', '4411', '694', '0'), +('4', '10', '7', '4893', '476', '0'), +('4', '10', '7', '71303', '410', '0'), +('4', '10', '9', '1541', '1746', '0'), +('4', '10', '9', '12189', '1013', '0'), +('4', '10', '9', '4834', '992', '0'), +('4', '10', '9', '13280', '505', '0'), +('4', '10', '15', '14707', '1050', '0'), +('4', '10', '15', '10366', '827', '0'), +('4', '10', '15', '30360', '700', '0'), +('4', '10', '15', '14679', '610', '0'), +('4', '10', '20', '11601', '7026', '0'), +('4', '10', '20', '1365', '4200', '0'), +('4', '10', '20', '2916', '3785', '0'), +('4', '10', '20', '2471', '3248', '0'), +('4', '10', '12', '20655', '1077', '0'), +('4', '10', '12', '11624', '1076', '0'), +('4', '10', '12', '4895', '995', '0'), +('4', '10', '12', '2923', '848', '0'), +('4', '10', '18', '4412', '694', '0'), +('4', '10', '18', '4896', '617', '0'), +('4', '10', '18', '4836', '579', '0'), +('4', '10', '18', '3191', '460', '0'), +('4', '10', '19', '4837', '1217', '0'), +('4', '10', '19', '4897', '729', '0'), +('4', '10', '19', '68239', '727', '0'), +('4', '10', '19', '3312', '338', '0'), +('4', '10', '13', '27732', '29280', '0'), +('4', '10', '13', '11663', '23580', '0'), +('4', '10', '13', '7257', '23041', '0'), +('4', '10', '13', '6692', '21631', '0'), +('4', '10', '14', '27732', '29280', '0'), +('4', '10', '14', '7257', '23041', '0'), +('4', '10', '14', '6692', '21631', '0'), +('4', '10', '14', '20679', '19800', '0'), +('4', '10', '11', '11696', '51098', '0'), +('4', '10', '11', '8325', '42360', '0'), +('4', '10', '11', '8408', '40970', '0'), +('4', '10', '11', '8402', '40395', '0'), +('4', '11', '22', '8567', '0', '0'), +('4', '11', '22', '10323', '0', '0'), +('4', '11', '22', '66166', '0', '0'), +('4', '11', '22', '10664', '0', '0'), +('4', '11', '1', '30361', '1290', '0'), +('4', '11', '1', '14701', '624', '0'), +('4', '11', '1', '14702', '600', '0'), +('4', '11', '1', '14568', '574', '0'), +('4', '11', '2', '30363', '1450', '0'), +('4', '11', '2', '10142', '1345', '0'), +('4', '11', '2', '4341', '1323', '0'), +('4', '11', '2', '3040', '1112', '0'), +('4', '11', '3', '14706', '990', '0'), +('4', '11', '3', '14705', '990', '0'), +('4', '11', '3', '14695', '516', '0'), +('4', '11', '3', '2282', '336', '0'), +('4', '11', '5', '30362', '1340', '0'), +('4', '11', '5', '14703', '1100', '0'), +('4', '11', '5', '14567', '674', '0'), +('4', '11', '5', '14700', '636', '0'), +('4', '11', '8', '11621', '8407', '0'), +('4', '11', '8', '11603', '1740', '0'), +('4', '11', '8', '11551', '1656', '0'), +('4', '11', '8', '27731', '1244', '0'), +('4', '11', '6', '1557', '5371', '0'), +('4', '11', '6', '2714', '1395', '0'), +('4', '11', '6', '3309', '554', '0'), +('4', '11', '6', '4165', '423', '0'), +('4', '11', '17', '11623', '2062', '0'), +('4', '11', '17', '4832', '1577', '0'), +('4', '11', '17', '4892', '1530', '0'), +('4', '11', '17', '3301', '865', '0'), +('4', '11', '7', '4833', '846', '0'), +('4', '11', '7', '4411', '694', '0'), +('4', '11', '7', '4893', '476', '0'), +('4', '11', '7', '71303', '414', '0'), +('4', '11', '9', '1541', '1758', '0'), +('4', '11', '9', '12189', '1013', '0'), +('4', '11', '9', '4834', '992', '0'), +('4', '11', '9', '13280', '505', '0'), +('4', '11', '15', '14707', '1050', '0'), +('4', '11', '15', '10366', '827', '0'), +('4', '11', '15', '30360', '700', '0'), +('4', '11', '15', '14679', '610', '0'), +('4', '11', '20', '11601', '7030', '0'), +('4', '11', '20', '1365', '4200', '0'), +('4', '11', '20', '2916', '3791', '0'), +('4', '11', '20', '2471', '3248', '0'), +('4', '11', '12', '20655', '1080', '0'), +('4', '11', '12', '11624', '1079', '0'), +('4', '11', '12', '4895', '995', '0'), +('4', '11', '12', '2923', '848', '0'), +('4', '11', '18', '4412', '694', '0'), +('4', '11', '18', '4896', '623', '0'), +('4', '11', '18', '4836', '581', '0'), +('4', '11', '18', '3191', '460', '0'), +('4', '11', '19', '4837', '1223', '0'), +('4', '11', '19', '4897', '731', '0'), +('4', '11', '19', '68239', '731', '0'), +('4', '11', '19', '3312', '338', '0'), +('4', '11', '13', '27732', '29290', '0'), +('4', '11', '13', '11663', '23580', '0'), +('4', '11', '13', '7257', '23041', '0'), +('4', '11', '13', '6692', '21631', '0'), +('4', '11', '14', '27732', '29290', '0'), +('4', '11', '14', '7257', '23041', '0'), +('4', '11', '14', '6692', '21631', '0'), +('4', '11', '14', '20679', '19800', '0'), +('4', '11', '11', '11696', '51098', '0'), +('4', '11', '11', '8325', '42360', '0'), +('4', '11', '11', '8408', '40970', '0'), +('4', '11', '11', '8402', '40395', '0'), +('4', '12', '22', '8567', '0', '0'), +('4', '12', '22', '10323', '0', '0'), +('4', '12', '22', '66166', '0', '0'), +('4', '12', '22', '10664', '0', '0'), +('4', '12', '1', '30361', '1290', '0'), +('4', '12', '1', '14701', '624', '0'), +('4', '12', '1', '14702', '600', '0'), +('4', '12', '1', '14568', '583', '0'), +('4', '12', '2', '30363', '1450', '0'), +('4', '12', '2', '10142', '1345', '0'), +('4', '12', '2', '4341', '1323', '0'), +('4', '12', '2', '3040', '1112', '0'), +('4', '12', '3', '14706', '990', '0'), +('4', '12', '3', '14705', '990', '0'), +('4', '12', '3', '14695', '524', '0'), +('4', '12', '3', '2282', '336', '0'), +('4', '12', '5', '30362', '1340', '0'), +('4', '12', '5', '14703', '1100', '0'), +('4', '12', '5', '14567', '682', '0'), +('4', '12', '5', '14700', '636', '0'), +('4', '12', '8', '11621', '8407', '0'), +('4', '12', '8', '11603', '1751', '0'), +('4', '12', '8', '11551', '1656', '0'), +('4', '12', '8', '27731', '1252', '0'), +('4', '12', '6', '1557', '5371', '0'), +('4', '12', '6', '2714', '1405', '0'), +('4', '12', '6', '3309', '554', '0'), +('4', '12', '6', '4165', '423', '0'), +('4', '12', '17', '11623', '2062', '0'), +('4', '12', '17', '4832', '1582', '0'), +('4', '12', '17', '4892', '1546', '0'), +('4', '12', '17', '3301', '865', '0'), +('4', '12', '7', '4833', '846', '0'), +('4', '12', '7', '4411', '694', '0'), +('4', '12', '7', '4893', '476', '0'), +('4', '12', '7', '71303', '417', '0'), +('4', '12', '9', '1541', '1770', '0'), +('4', '12', '9', '12189', '1013', '0'), +('4', '12', '9', '4834', '992', '0'), +('4', '12', '9', '13280', '505', '0'), +('4', '12', '15', '14707', '1050', '0'), +('4', '12', '15', '10366', '827', '0'), +('4', '12', '15', '30360', '700', '0'), +('4', '12', '15', '14679', '610', '0'), +('4', '12', '20', '11601', '7034', '0'), +('4', '12', '20', '1365', '4200', '0'), +('4', '12', '20', '2916', '3797', '0'), +('4', '12', '20', '2471', '3248', '0'), +('4', '12', '12', '20655', '1083', '0'), +('4', '12', '12', '11624', '1082', '0'), +('4', '12', '12', '4895', '995', '0'), +('4', '12', '12', '2923', '848', '0'), +('4', '12', '18', '4412', '694', '0'), +('4', '12', '18', '4896', '629', '0'), +('4', '12', '18', '4836', '583', '0'), +('4', '12', '18', '3191', '460', '0'), +('4', '12', '19', '4837', '1229', '0'), +('4', '12', '19', '68239', '735', '0'), +('4', '12', '19', '4897', '732', '0'), +('4', '12', '19', '3312', '338', '0'), +('4', '12', '13', '27732', '29299', '0'), +('4', '12', '13', '11663', '23580', '0'), +('4', '12', '13', '7257', '23041', '0'), +('4', '12', '13', '6692', '21631', '0'), +('4', '12', '14', '27732', '29299', '0'), +('4', '12', '14', '7257', '23041', '0'), +('4', '12', '14', '6692', '21631', '0'), +('4', '12', '14', '20679', '19800', '0'), +('4', '12', '11', '11696', '51098', '0'), +('4', '12', '11', '8325', '42360', '0'), +('4', '12', '11', '8408', '40970', '0'), +('4', '12', '11', '8402', '40395', '0'), +('4', '13', '22', '8567', '0', '0'), +('4', '13', '22', '10323', '0', '0'), +('4', '13', '22', '66166', '0', '0'), +('4', '13', '22', '10664', '0', '0'), +('4', '13', '1', '30361', '1290', '0'), +('4', '13', '1', '14701', '624', '0'), +('4', '13', '1', '14702', '600', '0'), +('4', '13', '1', '14568', '593', '0'), +('4', '13', '2', '30363', '1450', '0'), +('4', '13', '2', '10142', '1345', '0'), +('4', '13', '2', '4341', '1323', '0'), +('4', '13', '2', '3040', '1112', '0'), +('4', '13', '3', '14706', '990', '0'), +('4', '13', '3', '14705', '990', '0'), +('4', '13', '3', '14695', '533', '0'), +('4', '13', '3', '2282', '336', '0'), +('4', '13', '5', '30362', '1340', '0'), +('4', '13', '5', '14703', '1100', '0'), +('4', '13', '5', '14567', '689', '0'), +('4', '13', '5', '14700', '636', '0'), +('4', '13', '8', '11621', '8407', '0'), +('4', '13', '8', '11603', '1762', '0'), +('4', '13', '8', '11551', '1656', '0'), +('4', '13', '8', '27731', '1261', '0'), +('4', '13', '6', '1557', '5371', '0'), +('4', '13', '6', '2714', '1414', '0'), +('4', '13', '6', '3309', '554', '0'), +('4', '13', '6', '4165', '423', '0'), +('4', '13', '17', '11623', '2062', '0'), +('4', '13', '17', '4832', '1589', '0'), +('4', '13', '17', '4892', '1562', '0'), +('4', '13', '17', '3301', '865', '0'), +('4', '13', '7', '4833', '846', '0'), +('4', '13', '7', '4411', '694', '0'), +('4', '13', '7', '4893', '476', '0'), +('4', '13', '7', '71303', '421', '0'), +('4', '13', '9', '1541', '1782', '0'), +('4', '13', '9', '12189', '1013', '0'), +('4', '13', '9', '4834', '992', '0'), +('4', '13', '9', '13280', '505', '0'), +('4', '13', '15', '14707', '1050', '0'), +('4', '13', '15', '10366', '827', '0'), +('4', '13', '15', '30360', '700', '0'), +('4', '13', '15', '14679', '610', '0'), +('4', '13', '20', '11601', '7038', '0'), +('4', '13', '20', '1365', '4200', '0'), +('4', '13', '20', '2916', '3803', '0'), +('4', '13', '20', '2471', '3248', '0'), +('4', '13', '12', '20655', '1086', '0'), +('4', '13', '12', '11624', '1085', '0'), +('4', '13', '12', '4895', '995', '0'), +('4', '13', '12', '2923', '848', '0'), +('4', '13', '18', '4412', '694', '0'), +('4', '13', '18', '4896', '635', '0'), +('4', '13', '18', '4836', '585', '0'), +('4', '13', '18', '3191', '460', '0'), +('4', '13', '19', '4837', '1235', '0'), +('4', '13', '19', '68239', '738', '0'), +('4', '13', '19', '4897', '735', '0'), +('4', '13', '19', '3312', '338', '0'), +('4', '13', '13', '27732', '29309', '0'), +('4', '13', '13', '11663', '23580', '0'), +('4', '13', '13', '7257', '23041', '0'), +('4', '13', '13', '6692', '21631', '0'), +('4', '13', '14', '27732', '29309', '0'), +('4', '13', '14', '7257', '23041', '0'), +('4', '13', '14', '6692', '21631', '0'), +('4', '13', '14', '20679', '19800', '0'), +('4', '13', '11', '11696', '51098', '0'), +('4', '13', '11', '8325', '42360', '0'), +('4', '13', '11', '8408', '40970', '0'), +('4', '13', '11', '8402', '40395', '0'), +('4', '14', '22', '8567', '0', '0'), +('4', '14', '22', '10323', '0', '0'), +('4', '14', '22', '66166', '0', '0'), +('4', '14', '22', '10664', '0', '0'), +('4', '14', '1', '30361', '1290', '0'), +('4', '14', '1', '14701', '624', '0'), +('4', '14', '1', '14568', '603', '0'), +('4', '14', '1', '14702', '600', '0'), +('4', '14', '2', '30363', '1450', '0'), +('4', '14', '2', '10142', '1345', '0'), +('4', '14', '2', '4341', '1323', '0'), +('4', '14', '2', '3040', '1112', '0'), +('4', '14', '3', '14706', '990', '0'), +('4', '14', '3', '14705', '990', '0'), +('4', '14', '3', '14695', '541', '0'), +('4', '14', '3', '2282', '336', '0'), +('4', '14', '5', '30362', '1340', '0'), +('4', '14', '5', '14703', '1100', '0'), +('4', '14', '5', '14567', '697', '0'), +('4', '14', '5', '14700', '636', '0'), +('4', '14', '8', '11621', '8407', '0'), +('4', '14', '8', '11603', '1773', '0'), +('4', '14', '8', '11551', '1656', '0'), +('4', '14', '8', '27731', '1269', '0'), +('4', '14', '6', '1557', '5371', '0'), +('4', '14', '6', '2714', '1424', '0'), +('4', '14', '6', '3309', '554', '0'), +('4', '14', '6', '4165', '423', '0'), +('4', '14', '17', '11623', '2062', '0'), +('4', '14', '17', '4832', '1595', '0'), +('4', '14', '17', '4892', '1578', '0'), +('4', '14', '17', '3301', '865', '0'), +('4', '14', '7', '4833', '846', '0'), +('4', '14', '7', '4411', '694', '0'), +('4', '14', '7', '4893', '476', '0'), +('4', '14', '7', '71303', '424', '0'), +('4', '14', '9', '1541', '1794', '0'), +('4', '14', '9', '12189', '1013', '0'), +('4', '14', '9', '4834', '992', '0'), +('4', '14', '9', '13280', '505', '0'), +('4', '14', '15', '14707', '1050', '0'), +('4', '14', '15', '10366', '827', '0'), +('4', '14', '15', '30360', '700', '0'), +('4', '14', '15', '14679', '610', '0'), +('4', '14', '20', '11601', '7042', '0'), +('4', '14', '20', '1365', '4200', '0'), +('4', '14', '20', '2916', '3809', '0'), +('4', '14', '20', '2471', '3248', '0'), +('4', '14', '12', '20655', '1089', '0'), +('4', '14', '12', '11624', '1088', '0'), +('4', '14', '12', '4895', '995', '0'), +('4', '14', '12', '2923', '848', '0'), +('4', '14', '18', '4412', '694', '0'), +('4', '14', '18', '4896', '641', '0'), +('4', '14', '18', '4836', '587', '0'), +('4', '14', '18', '3191', '460', '0'), +('4', '14', '19', '4837', '1241', '0'), +('4', '14', '19', '68239', '742', '0'), +('4', '14', '19', '4897', '737', '0'), +('4', '14', '19', '3312', '338', '0'), +('4', '14', '13', '27732', '29318', '0'), +('4', '14', '13', '11663', '23580', '0'), +('4', '14', '13', '7257', '23041', '0'), +('4', '14', '13', '6692', '21631', '0'), +('4', '14', '14', '27732', '29318', '0'), +('4', '14', '14', '7257', '23041', '0'), +('4', '14', '14', '6692', '21631', '0'), +('4', '14', '14', '20679', '19800', '0'), +('4', '14', '11', '11696', '51098', '0'), +('4', '14', '11', '8325', '42360', '0'), +('4', '14', '11', '8408', '40970', '0'), +('4', '14', '11', '8402', '40395', '0'), +('4', '15', '22', '8567', '0', '0'), +('4', '15', '22', '10323', '0', '0'), +('4', '15', '22', '66166', '0', '0'), +('4', '15', '22', '10664', '0', '0'), +('4', '15', '1', '30361', '1290', '0'), +('4', '15', '1', '14701', '624', '0'), +('4', '15', '1', '14568', '612', '0'), +('4', '15', '1', '14702', '600', '0'), +('4', '15', '2', '30363', '1450', '0'), +('4', '15', '2', '10142', '1345', '0'), +('4', '15', '2', '4341', '1323', '0'), +('4', '15', '2', '3040', '1112', '0'), +('4', '15', '3', '14706', '990', '0'), +('4', '15', '3', '14705', '990', '0'), +('4', '15', '3', '14695', '550', '0'), +('4', '15', '3', '2282', '336', '0'), +('4', '15', '5', '30362', '1340', '0'), +('4', '15', '5', '14703', '1100', '0'), +('4', '15', '5', '14567', '705', '0'), +('4', '15', '5', '14700', '636', '0'), +('4', '15', '8', '11621', '8407', '0'), +('4', '15', '8', '11603', '1784', '0'), +('4', '15', '8', '11551', '1656', '0'), +('4', '15', '8', '27731', '1278', '0'), +('4', '15', '6', '1557', '5371', '0'), +('4', '15', '6', '2714', '1434', '0'), +('4', '15', '6', '3309', '554', '0'), +('4', '15', '6', '4165', '423', '0'), +('4', '15', '17', '11623', '2062', '0'), +('4', '15', '17', '4832', '1602', '0'), +('4', '15', '17', '4892', '1593', '0'), +('4', '15', '17', '3301', '865', '0'), +('4', '15', '7', '4833', '846', '0'), +('4', '15', '7', '4411', '694', '0'), +('4', '15', '7', '4893', '476', '0'), +('4', '15', '7', '71303', '428', '0'), +('4', '15', '9', '1541', '1806', '0'), +('4', '15', '9', '12189', '1013', '0'), +('4', '15', '9', '4834', '992', '0'), +('4', '15', '9', '13280', '505', '0'), +('4', '15', '15', '14707', '1050', '0'), +('4', '15', '15', '10366', '827', '0'), +('4', '15', '15', '30360', '700', '0'), +('4', '15', '15', '14679', '610', '0'), +('4', '15', '20', '11601', '7046', '0'), +('4', '15', '20', '1365', '4200', '0'), +('4', '15', '20', '2916', '3815', '0'), +('4', '15', '20', '2471', '3248', '0'), +('4', '15', '12', '20655', '1093', '0'), +('4', '15', '12', '11624', '1091', '0'), +('4', '15', '12', '4895', '995', '0'), +('4', '15', '12', '2923', '848', '0'), +('4', '15', '18', '4412', '694', '0'), +('4', '15', '18', '4896', '647', '0'), +('4', '15', '18', '4836', '589', '0'), +('4', '15', '18', '3191', '460', '0'), +('4', '15', '19', '4837', '1247', '0'), +('4', '15', '19', '68239', '746', '0'), +('4', '15', '19', '4897', '739', '0'), +('4', '15', '19', '3312', '338', '0'), +('4', '15', '13', '27732', '29328', '0'), +('4', '15', '13', '11663', '23580', '0'), +('4', '15', '13', '7257', '23041', '0'), +('4', '15', '13', '6692', '21631', '0'), +('4', '15', '14', '27732', '29328', '0'), +('4', '15', '14', '7257', '23041', '0'), +('4', '15', '14', '6692', '21631', '0'), +('4', '15', '14', '20679', '19800', '0'), +('4', '15', '11', '11696', '51098', '0'), +('4', '15', '11', '8325', '42360', '0'), +('4', '15', '11', '8408', '40970', '0'), +('4', '15', '11', '8402', '40395', '0'), +('4', '16', '22', '8567', '0', '0'), +('4', '16', '22', '10323', '0', '0'), +('4', '16', '22', '66166', '0', '0'), +('4', '16', '22', '10664', '0', '0'), +('4', '16', '1', '30361', '1290', '0'), +('4', '16', '1', '14701', '624', '0'), +('4', '16', '1', '14568', '622', '0'), +('4', '16', '1', '14702', '600', '0'), +('4', '16', '2', '30363', '1450', '0'), +('4', '16', '2', '10142', '1345', '0'), +('4', '16', '2', '4341', '1323', '0'), +('4', '16', '2', '3040', '1112', '0'), +('4', '16', '3', '14706', '990', '0'), +('4', '16', '3', '14705', '990', '0'), +('4', '16', '3', '14695', '558', '0'), +('4', '16', '3', '2282', '336', '0'), +('4', '16', '5', '30362', '1340', '0'), +('4', '16', '5', '14703', '1100', '0'), +('4', '16', '5', '14567', '713', '0'), +('4', '16', '5', '14700', '636', '0'), +('4', '16', '8', '11621', '8407', '0'), +('4', '16', '8', '11603', '1795', '0'), +('4', '16', '8', '11551', '1656', '0'), +('4', '16', '8', '27731', '1286', '0'), +('4', '16', '6', '1557', '5371', '0'), +('4', '16', '6', '2714', '1443', '0'), +('4', '16', '6', '3309', '554', '0'), +('4', '16', '6', '4165', '423', '0'), +('4', '16', '17', '11623', '2062', '0'), +('4', '16', '17', '4892', '1609', '0'), +('4', '16', '17', '4832', '1608', '0'), +('4', '16', '17', '3301', '865', '0'), +('4', '16', '7', '4833', '846', '0'), +('4', '16', '7', '4411', '694', '0'), +('4', '16', '7', '4893', '476', '0'), +('4', '16', '7', '71303', '432', '0'), +('4', '16', '9', '1541', '1818', '0'), +('4', '16', '9', '12189', '1013', '0'), +('4', '16', '9', '4834', '992', '0'), +('4', '16', '9', '13280', '505', '0'), +('4', '16', '15', '14707', '1050', '0'), +('4', '16', '15', '10366', '827', '0'), +('4', '16', '15', '30360', '700', '0'), +('4', '16', '15', '14679', '610', '0'), +('4', '16', '20', '11601', '7050', '0'), +('4', '16', '20', '1365', '4200', '0'), +('4', '16', '20', '2916', '3821', '0'), +('4', '16', '20', '2471', '3248', '0'), +('4', '16', '12', '20655', '1096', '0'), +('4', '16', '12', '11624', '1094', '0'), +('4', '16', '12', '4895', '995', '0'), +('4', '16', '12', '2923', '848', '0'), +('4', '16', '18', '4412', '694', '0'), +('4', '16', '18', '4896', '653', '0'), +('4', '16', '18', '4836', '591', '0'), +('4', '16', '18', '3191', '460', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '16', '19', '4837', '1253', '0'), +('4', '16', '19', '68239', '749', '0'), +('4', '16', '19', '4897', '741', '0'), +('4', '16', '19', '3312', '338', '0'), +('4', '16', '13', '27732', '29338', '0'), +('4', '16', '13', '11663', '23580', '0'), +('4', '16', '13', '7257', '23041', '0'), +('4', '16', '13', '6692', '21631', '0'), +('4', '16', '14', '27732', '29338', '0'), +('4', '16', '14', '7257', '23041', '0'), +('4', '16', '14', '6692', '21631', '0'), +('4', '16', '14', '20679', '19800', '0'), +('4', '16', '11', '11696', '51098', '0'), +('4', '16', '11', '8325', '42360', '0'), +('4', '16', '11', '8408', '40970', '0'), +('4', '16', '11', '8402', '40395', '0'), +('4', '17', '22', '8567', '0', '0'), +('4', '17', '22', '10323', '0', '0'), +('4', '17', '22', '66166', '0', '0'), +('4', '17', '22', '10664', '0', '0'), +('4', '17', '1', '30361', '1290', '0'), +('4', '17', '1', '14568', '632', '0'), +('4', '17', '1', '14701', '624', '0'), +('4', '17', '1', '14702', '600', '0'), +('4', '17', '2', '30363', '1450', '0'), +('4', '17', '2', '10142', '1345', '0'), +('4', '17', '2', '4341', '1323', '0'), +('4', '17', '2', '3040', '1112', '0'), +('4', '17', '3', '14706', '990', '0'), +('4', '17', '3', '14705', '990', '0'), +('4', '17', '3', '14695', '567', '0'), +('4', '17', '3', '2282', '336', '0'), +('4', '17', '5', '30362', '1340', '0'), +('4', '17', '5', '14703', '1100', '0'), +('4', '17', '5', '14567', '720', '0'), +('4', '17', '5', '14700', '636', '0'), +('4', '17', '8', '11621', '8407', '0'), +('4', '17', '8', '11603', '1806', '0'), +('4', '17', '8', '11551', '1656', '0'), +('4', '17', '8', '27731', '1295', '0'), +('4', '17', '6', '1557', '5371', '0'), +('4', '17', '6', '2714', '1453', '0'), +('4', '17', '6', '3309', '554', '0'), +('4', '17', '6', '4165', '423', '0'), +('4', '17', '17', '11623', '2062', '0'), +('4', '17', '17', '4892', '1625', '0'), +('4', '17', '17', '4832', '1613', '0'), +('4', '17', '17', '3301', '865', '0'), +('4', '17', '7', '4833', '846', '0'), +('4', '17', '7', '4411', '694', '0'), +('4', '17', '7', '4893', '476', '0'), +('4', '17', '7', '71303', '435', '0'), +('4', '17', '9', '1541', '1830', '0'), +('4', '17', '9', '12189', '1013', '0'), +('4', '17', '9', '4834', '992', '0'), +('4', '17', '9', '13280', '505', '0'), +('4', '17', '15', '14707', '1050', '0'), +('4', '17', '15', '10366', '827', '0'), +('4', '17', '15', '30360', '700', '0'), +('4', '17', '15', '14679', '610', '0'), +('4', '17', '20', '11601', '7054', '0'), +('4', '17', '20', '1365', '4200', '0'), +('4', '17', '20', '2916', '3827', '0'), +('4', '17', '20', '2471', '3248', '0'), +('4', '17', '12', '20655', '1099', '0'), +('4', '17', '12', '11624', '1096', '0'), +('4', '17', '12', '4895', '995', '0'), +('4', '17', '12', '2923', '848', '0'), +('4', '17', '18', '4412', '694', '0'), +('4', '17', '18', '4896', '659', '0'), +('4', '17', '18', '4836', '593', '0'), +('4', '17', '18', '3191', '460', '0'), +('4', '17', '19', '4837', '1259', '0'), +('4', '17', '19', '68239', '753', '0'), +('4', '17', '19', '4897', '743', '0'), +('4', '17', '19', '3312', '338', '0'), +('4', '17', '13', '27732', '29347', '0'), +('4', '17', '13', '11663', '23580', '0'), +('4', '17', '13', '7257', '23041', '0'), +('4', '17', '13', '6692', '21631', '0'), +('4', '17', '14', '27732', '29347', '0'), +('4', '17', '14', '7257', '23041', '0'), +('4', '17', '14', '6692', '21631', '0'), +('4', '17', '14', '20679', '19800', '0'), +('4', '17', '11', '11696', '51098', '0'), +('4', '17', '11', '8325', '42360', '0'), +('4', '17', '11', '8408', '40970', '0'), +('4', '17', '11', '8402', '40395', '0'), +('4', '18', '22', '8567', '0', '0'), +('4', '18', '22', '10323', '0', '0'), +('4', '18', '22', '66166', '0', '0'), +('4', '18', '22', '10664', '0', '0'), +('4', '18', '1', '30361', '1290', '0'), +('4', '18', '1', '14568', '641', '0'), +('4', '18', '1', '14701', '624', '0'), +('4', '18', '1', '14702', '600', '0'), +('4', '18', '2', '30363', '1450', '0'), +('4', '18', '2', '10142', '1345', '0'), +('4', '18', '2', '4341', '1323', '0'), +('4', '18', '2', '3040', '1112', '0'), +('4', '18', '3', '14706', '990', '0'), +('4', '18', '3', '14705', '990', '0'), +('4', '18', '3', '14695', '575', '0'), +('4', '18', '3', '2282', '336', '0'), +('4', '18', '5', '30362', '1340', '0'), +('4', '18', '5', '14703', '1100', '0'), +('4', '18', '5', '14567', '728', '0'), +('4', '18', '5', '14700', '636', '0'), +('4', '18', '8', '11621', '8407', '0'), +('4', '18', '8', '11603', '1816', '0'), +('4', '18', '8', '11551', '1656', '0'), +('4', '18', '8', '27731', '1303', '0'), +('4', '18', '6', '1557', '5371', '0'), +('4', '18', '6', '2714', '1463', '0'), +('4', '18', '6', '3309', '554', '0'), +('4', '18', '6', '4165', '423', '0'), +('4', '18', '17', '11623', '2062', '0'), +('4', '18', '17', '4892', '1640', '0'), +('4', '18', '17', '4832', '1620', '0'), +('4', '18', '17', '3301', '865', '0'), +('4', '18', '7', '4833', '846', '0'), +('4', '18', '7', '4411', '694', '0'), +('4', '18', '7', '4893', '476', '0'), +('4', '18', '7', '71303', '439', '0'), +('4', '18', '9', '1541', '1842', '0'), +('4', '18', '9', '12189', '1013', '0'), +('4', '18', '9', '4834', '992', '0'), +('4', '18', '9', '13280', '505', '0'), +('4', '18', '15', '14707', '1050', '0'), +('4', '18', '15', '10366', '827', '0'), +('4', '18', '15', '30360', '700', '0'), +('4', '18', '15', '14679', '610', '0'), +('4', '18', '20', '11601', '7058', '0'), +('4', '18', '20', '1365', '4200', '0'), +('4', '18', '20', '2916', '3833', '0'), +('4', '18', '20', '2471', '3248', '0'), +('4', '18', '12', '20655', '1102', '0'), +('4', '18', '12', '11624', '1099', '0'), +('4', '18', '12', '4895', '995', '0'), +('4', '18', '12', '2923', '848', '0'), +('4', '18', '18', '4412', '694', '0'), +('4', '18', '18', '4896', '665', '0'), +('4', '18', '18', '4836', '595', '0'), +('4', '18', '18', '3191', '460', '0'), +('4', '18', '19', '4837', '1265', '0'), +('4', '18', '19', '68239', '756', '0'), +('4', '18', '19', '4897', '745', '0'), +('4', '18', '19', '3312', '338', '0'), +('4', '18', '13', '27732', '29357', '0'), +('4', '18', '13', '11663', '23580', '0'), +('4', '18', '13', '7257', '23041', '0'), +('4', '18', '13', '6692', '21631', '0'), +('4', '18', '14', '27732', '29357', '0'), +('4', '18', '14', '7257', '23041', '0'), +('4', '18', '14', '6692', '21631', '0'), +('4', '18', '14', '20679', '19800', '0'), +('4', '18', '11', '11696', '51098', '0'), +('4', '18', '11', '8325', '42360', '0'), +('4', '18', '11', '8408', '40970', '0'), +('4', '18', '11', '8402', '40395', '0'), +('4', '19', '22', '8567', '0', '0'), +('4', '19', '22', '10323', '0', '0'), +('4', '19', '22', '66166', '0', '0'), +('4', '19', '22', '10664', '0', '0'), +('4', '19', '1', '30361', '1290', '0'), +('4', '19', '1', '14568', '651', '0'), +('4', '19', '1', '14701', '624', '0'), +('4', '19', '1', '14702', '600', '0'), +('4', '19', '2', '30363', '1450', '0'), +('4', '19', '2', '10142', '1345', '0'), +('4', '19', '2', '4341', '1323', '0'), +('4', '19', '2', '3040', '1112', '0'), +('4', '19', '3', '14706', '990', '0'), +('4', '19', '3', '14705', '990', '0'), +('4', '19', '3', '14695', '583', '0'), +('4', '19', '3', '11052', '344', '0'), +('4', '19', '5', '30362', '1340', '0'), +('4', '19', '5', '14703', '1100', '0'), +('4', '19', '5', '14567', '736', '0'), +('4', '19', '5', '14700', '636', '0'), +('4', '19', '8', '11621', '8407', '0'), +('4', '19', '8', '11603', '1827', '0'), +('4', '19', '8', '11551', '1656', '0'), +('4', '19', '8', '27731', '1312', '0'), +('4', '19', '6', '1557', '5371', '0'), +('4', '19', '6', '2714', '1472', '0'), +('4', '19', '6', '3309', '554', '0'), +('4', '19', '6', '4165', '423', '0'), +('4', '19', '17', '11623', '2062', '0'), +('4', '19', '17', '4892', '1656', '0'), +('4', '19', '17', '4832', '1626', '0'), +('4', '19', '17', '3301', '865', '0'), +('4', '19', '7', '4833', '846', '0'), +('4', '19', '7', '4411', '694', '0'), +('4', '19', '7', '4893', '476', '0'), +('4', '19', '7', '71303', '443', '0'), +('4', '19', '9', '1541', '1854', '0'), +('4', '19', '9', '12189', '1013', '0'), +('4', '19', '9', '4834', '992', '0'), +('4', '19', '9', '13280', '505', '0'), +('4', '19', '15', '14707', '1050', '0'), +('4', '19', '15', '10366', '827', '0'), +('4', '19', '15', '30360', '700', '0'), +('4', '19', '15', '14679', '610', '0'), +('4', '19', '20', '11601', '7063', '0'), +('4', '19', '20', '1365', '4200', '0'), +('4', '19', '20', '2916', '3839', '0'), +('4', '19', '20', '2471', '3248', '0'), +('4', '19', '12', '20655', '1106', '0'), +('4', '19', '12', '11624', '1102', '0'), +('4', '19', '12', '4895', '995', '0'), +('4', '19', '12', '2923', '848', '0'), +('4', '19', '18', '4412', '694', '0'), +('4', '19', '18', '4896', '671', '0'), +('4', '19', '18', '4836', '597', '0'), +('4', '19', '18', '3191', '460', '0'), +('4', '19', '19', '4837', '1271', '0'), +('4', '19', '19', '68239', '760', '0'), +('4', '19', '19', '4897', '747', '0'), +('4', '19', '19', '3312', '338', '0'), +('4', '19', '13', '27732', '29367', '0'), +('4', '19', '13', '11663', '23580', '0'), +('4', '19', '13', '7257', '23041', '0'), +('4', '19', '13', '6692', '21631', '0'), +('4', '19', '14', '27732', '29367', '0'), +('4', '19', '14', '7257', '23041', '0'), +('4', '19', '14', '6692', '21631', '0'), +('4', '19', '14', '20679', '19800', '0'), +('4', '19', '11', '11696', '51098', '0'), +('4', '19', '11', '8325', '42360', '0'), +('4', '19', '11', '8408', '40970', '0'), +('4', '19', '11', '8402', '40395', '0'), +('4', '20', '22', '8567', '0', '0'), +('4', '20', '22', '10323', '0', '0'), +('4', '20', '22', '66166', '0', '0'), +('4', '20', '22', '10664', '0', '0'), +('4', '20', '1', '30361', '1290', '0'), +('4', '20', '1', '14568', '661', '0'), +('4', '20', '1', '14701', '624', '0'), +('4', '20', '1', '14702', '600', '0'), +('4', '20', '2', '30363', '1450', '0'), +('4', '20', '2', '10142', '1345', '0'), +('4', '20', '2', '4341', '1323', '0'), +('4', '20', '2', '3040', '1112', '0'), +('4', '20', '3', '14706', '990', '0'), +('4', '20', '3', '14705', '990', '0'), +('4', '20', '3', '14695', '592', '0'), +('4', '20', '3', '11052', '362', '0'), +('4', '20', '5', '30362', '1340', '0'), +('4', '20', '5', '14703', '1100', '0'), +('4', '20', '5', '14567', '743', '0'), +('4', '20', '5', '14700', '636', '0'), +('4', '20', '8', '11621', '8407', '0'), +('4', '20', '8', '11603', '1838', '0'), +('4', '20', '8', '11551', '1656', '0'), +('4', '20', '8', '27731', '1320', '0'), +('4', '20', '6', '1557', '5371', '0'), +('4', '20', '6', '2714', '1482', '0'), +('4', '20', '6', '3309', '554', '0'), +('4', '20', '6', '4165', '423', '0'), +('4', '20', '17', '11623', '2062', '0'), +('4', '20', '17', '4892', '1672', '0'), +('4', '20', '17', '4832', '1632', '0'), +('4', '20', '17', '3301', '865', '0'), +('4', '20', '7', '4833', '846', '0'), +('4', '20', '7', '4411', '694', '0'), +('4', '20', '7', '4893', '476', '0'), +('4', '20', '7', '71303', '446', '0'), +('4', '20', '9', '1541', '1866', '0'), +('4', '20', '9', '12189', '1013', '0'), +('4', '20', '9', '4834', '992', '0'), +('4', '20', '9', '13280', '505', '0'), +('4', '20', '15', '14707', '1050', '0'), +('4', '20', '15', '10366', '827', '0'), +('4', '20', '15', '30360', '700', '0'), +('4', '20', '15', '14679', '610', '0'), +('4', '20', '20', '11601', '7067', '0'), +('4', '20', '20', '1365', '4200', '0'), +('4', '20', '20', '2916', '3845', '0'), +('4', '20', '20', '2471', '3248', '0'), +('4', '20', '12', '20655', '1109', '0'), +('4', '20', '12', '11624', '1105', '0'), +('4', '20', '12', '4895', '995', '0'), +('4', '20', '12', '2923', '848', '0'), +('4', '20', '18', '4412', '694', '0'), +('4', '20', '18', '4896', '677', '0'), +('4', '20', '18', '4836', '599', '0'), +('4', '20', '18', '3191', '460', '0'), +('4', '20', '19', '4837', '1278', '0'), +('4', '20', '19', '68239', '764', '0'), +('4', '20', '19', '4897', '749', '0'), +('4', '20', '19', '3312', '338', '0'), +('4', '20', '13', '27732', '30516', '0'), +('4', '20', '13', '6952', '26325', '0'), +('4', '20', '13', '11663', '24540', '0'), +('4', '20', '13', '7257', '23941', '0'), +('4', '20', '14', '27732', '30516', '0'), +('4', '20', '14', '6952', '26325', '0'), +('4', '20', '14', '7257', '23941', '0'), +('4', '20', '14', '6692', '22411', '0'), +('4', '20', '11', '11696', '53078', '0'), +('4', '20', '11', '8325', '44040', '0'), +('4', '20', '11', '8408', '42590', '0'), +('4', '20', '11', '8402', '41955', '0'), +('4', '21', '22', '8567', '0', '0'), +('4', '21', '22', '10323', '0', '0'), +('4', '21', '22', '66166', '0', '0'), +('4', '21', '22', '10664', '0', '0'), +('4', '21', '1', '30361', '1290', '0'), +('4', '21', '1', '14568', '670', '0'), +('4', '21', '1', '14701', '624', '0'), +('4', '21', '1', '14702', '600', '0'), +('4', '21', '2', '30363', '1450', '0'), +('4', '21', '2', '10142', '1345', '0'), +('4', '21', '2', '4341', '1323', '0'), +('4', '21', '2', '3040', '1112', '0'), +('4', '21', '3', '14706', '990', '0'), +('4', '21', '3', '14705', '990', '0'), +('4', '21', '3', '14695', '600', '0'), +('4', '21', '3', '11052', '381', '0'), +('4', '21', '5', '30362', '1340', '0'), +('4', '21', '5', '14703', '1100', '0'), +('4', '21', '5', '14567', '751', '0'), +('4', '21', '5', '14700', '636', '0'), +('4', '21', '8', '11621', '8407', '0'), +('4', '21', '8', '11603', '1849', '0'), +('4', '21', '8', '11551', '1656', '0'), +('4', '21', '8', '27731', '1329', '0'), +('4', '21', '6', '1557', '5371', '0'), +('4', '21', '6', '2714', '1492', '0'), +('4', '21', '6', '3309', '554', '0'), +('4', '21', '6', '4165', '423', '0'), +('4', '21', '17', '11623', '2062', '0'), +('4', '21', '17', '4892', '1687', '0'), +('4', '21', '17', '4832', '1638', '0'), +('4', '21', '17', '3301', '865', '0'), +('4', '21', '7', '4833', '846', '0'), +('4', '21', '7', '4411', '694', '0'), +('4', '21', '7', '4893', '476', '0'), +('4', '21', '7', '71303', '450', '0'), +('4', '21', '9', '1541', '1878', '0'), +('4', '21', '9', '12189', '1013', '0'), +('4', '21', '9', '4834', '992', '0'), +('4', '21', '9', '13280', '505', '0'), +('4', '21', '15', '14707', '1050', '0'), +('4', '21', '15', '10366', '827', '0'), +('4', '21', '15', '30360', '700', '0'), +('4', '21', '15', '14679', '610', '0'), +('4', '21', '20', '11601', '7070', '0'), +('4', '21', '20', '1365', '4200', '0'), +('4', '21', '20', '2916', '3851', '0'), +('4', '21', '20', '2471', '3248', '0'), +('4', '21', '12', '20655', '1112', '0'), +('4', '21', '12', '11624', '1108', '0'), +('4', '21', '12', '4895', '995', '0'), +('4', '21', '12', '2923', '848', '0'), +('4', '21', '18', '4412', '694', '0'), +('4', '21', '18', '4896', '683', '0'), +('4', '21', '18', '4836', '601', '0'), +('4', '21', '18', '3191', '460', '0'), +('4', '21', '19', '4837', '1284', '0'), +('4', '21', '19', '68239', '767', '0'), +('4', '21', '19', '4897', '751', '0'), +('4', '21', '19', '3312', '338', '0'), +('4', '21', '13', '27732', '30826', '0'), +('4', '21', '13', '6952', '26445', '0'), +('4', '21', '13', '11663', '24840', '0'), +('4', '21', '13', '7257', '24241', '0'), +('4', '21', '14', '27732', '30826', '0'), +('4', '21', '14', '6952', '26445', '0'), +('4', '21', '14', '7257', '24241', '0'), +('4', '21', '14', '6692', '22651', '0'), +('4', '21', '11', '11696', '53678', '0'), +('4', '21', '11', '8325', '44520', '0'), +('4', '21', '11', '8408', '43070', '0'), +('4', '21', '11', '8402', '42435', '0'), +('4', '22', '22', '8567', '0', '0'), +('4', '22', '22', '10323', '0', '0'), +('4', '22', '22', '66166', '0', '0'), +('4', '22', '22', '10664', '0', '0'), +('4', '22', '1', '30361', '1290', '0'), +('4', '22', '1', '14568', '680', '0'), +('4', '22', '1', '14701', '624', '0'), +('4', '22', '1', '14702', '600', '0'), +('4', '22', '2', '30363', '1450', '0'), +('4', '22', '2', '10142', '1345', '0'), +('4', '22', '2', '4341', '1323', '0'), +('4', '22', '2', '3040', '1112', '0'), +('4', '22', '3', '14706', '990', '0'), +('4', '22', '3', '14705', '990', '0'), +('4', '22', '3', '14695', '609', '0'), +('4', '22', '3', '11052', '399', '0'), +('4', '22', '5', '30362', '1340', '0'), +('4', '22', '5', '14703', '1100', '0'), +('4', '22', '5', '14567', '759', '0'), +('4', '22', '5', '14700', '636', '0'), +('4', '22', '8', '11621', '8407', '0'), +('4', '22', '8', '11603', '1860', '0'), +('4', '22', '8', '11551', '1656', '0'), +('4', '22', '8', '27731', '1337', '0'), +('4', '22', '6', '1557', '5371', '0'), +('4', '22', '6', '2714', '1501', '0'), +('4', '22', '6', '3309', '554', '0'), +('4', '22', '6', '4165', '423', '0'), +('4', '22', '17', '11623', '2062', '0'), +('4', '22', '17', '4892', '1703', '0'), +('4', '22', '17', '4832', '1644', '0'), +('4', '22', '17', '3301', '865', '0'), +('4', '22', '7', '4833', '846', '0'), +('4', '22', '7', '4411', '694', '0'), +('4', '22', '7', '4893', '476', '0'), +('4', '22', '7', '71303', '453', '0'), +('4', '22', '9', '1541', '1891', '0'), +('4', '22', '9', '12189', '1013', '0'), +('4', '22', '9', '4834', '992', '0'), +('4', '22', '9', '13280', '505', '0'), +('4', '22', '15', '14707', '1050', '0'), +('4', '22', '15', '10366', '827', '0'), +('4', '22', '15', '30360', '700', '0'), +('4', '22', '15', '14679', '610', '0'), +('4', '22', '20', '11601', '7075', '0'), +('4', '22', '20', '1365', '4200', '0'), +('4', '22', '20', '2916', '3857', '0'), +('4', '22', '20', '2471', '3248', '0'), +('4', '22', '12', '20655', '1115', '0'), +('4', '22', '12', '11624', '1111', '0'), +('4', '22', '12', '4895', '995', '0'), +('4', '22', '12', '2923', '848', '0'), +('4', '22', '18', '4412', '694', '0'), +('4', '22', '18', '4896', '689', '0'), +('4', '22', '18', '4836', '603', '0'), +('4', '22', '18', '3191', '460', '0'), +('4', '22', '19', '4837', '1290', '0'), +('4', '22', '19', '68239', '771', '0'), +('4', '22', '19', '4897', '753', '0'), +('4', '22', '19', '3312', '338', '0'), +('4', '22', '13', '27732', '31196', '0'), +('4', '22', '13', '6952', '26625', '0'), +('4', '22', '13', '11663', '25080', '0'), +('4', '22', '13', '7257', '24541', '0'), +('4', '22', '14', '27732', '31196', '0'), +('4', '22', '14', '6952', '26625', '0'), +('4', '22', '14', '7257', '24541', '0'), +('4', '22', '14', '6692', '22891', '0'), +('4', '22', '11', '11696', '54278', '0'), +('4', '22', '11', '8325', '45060', '0'), +('4', '22', '11', '8408', '43550', '0'), +('4', '22', '11', '8402', '42915', '0'), +('4', '23', '22', '8567', '0', '0'), +('4', '23', '22', '10323', '0', '0'), +('4', '23', '22', '66166', '0', '0'), +('4', '23', '22', '10664', '0', '0'), +('4', '23', '1', '30361', '1290', '0'), +('4', '23', '1', '14568', '690', '0'), +('4', '23', '1', '14701', '624', '0'), +('4', '23', '1', '14702', '600', '0'), +('4', '23', '2', '30363', '1450', '0'), +('4', '23', '2', '10142', '1345', '0'), +('4', '23', '2', '4341', '1323', '0'), +('4', '23', '2', '3040', '1112', '0'), +('4', '23', '3', '14706', '990', '0'), +('4', '23', '3', '14705', '990', '0'), +('4', '23', '3', '14695', '617', '0'), +('4', '23', '3', '11052', '417', '0'), +('4', '23', '5', '30362', '1340', '0'), +('4', '23', '5', '14703', '1100', '0'), +('4', '23', '5', '14567', '766', '0'), +('4', '23', '5', '68291', '641', '0'), +('4', '23', '8', '11621', '8407', '0'), +('4', '23', '8', '11603', '1871', '0'), +('4', '23', '8', '11551', '1656', '0'), +('4', '23', '8', '27731', '1345', '0'), +('4', '23', '6', '1557', '5371', '0'), +('4', '23', '6', '2714', '1511', '0'), +('4', '23', '6', '3309', '554', '0'), +('4', '23', '6', '4165', '423', '0'), +('4', '23', '17', '11623', '2062', '0'), +('4', '23', '17', '4892', '1719', '0'), +('4', '23', '17', '4832', '1650', '0'), +('4', '23', '17', '3301', '865', '0'), +('4', '23', '7', '4833', '846', '0'), +('4', '23', '7', '4411', '694', '0'), +('4', '23', '7', '4893', '476', '0'), +('4', '23', '7', '71303', '457', '0'), +('4', '23', '9', '1541', '1903', '0'), +('4', '23', '9', '12189', '1013', '0'), +('4', '23', '9', '4834', '992', '0'), +('4', '23', '9', '13280', '505', '0'), +('4', '23', '15', '14707', '1050', '0'), +('4', '23', '15', '10366', '827', '0'), +('4', '23', '15', '30360', '700', '0'), +('4', '23', '15', '14679', '610', '0'), +('4', '23', '20', '11601', '7079', '0'), +('4', '23', '20', '1365', '4200', '0'), +('4', '23', '20', '2916', '3863', '0'), +('4', '23', '20', '2471', '3248', '0'), +('4', '23', '12', '20655', '1119', '0'), +('4', '23', '12', '11624', '1114', '0'), +('4', '23', '12', '4895', '995', '0'), +('4', '23', '12', '2923', '848', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '23', '18', '4896', '695', '0'), +('4', '23', '18', '4412', '694', '0'), +('4', '23', '18', '4836', '606', '0'), +('4', '23', '18', '3191', '460', '0'), +('4', '23', '19', '4837', '1296', '0'), +('4', '23', '19', '68239', '775', '0'), +('4', '23', '19', '4897', '755', '0'), +('4', '23', '19', '4407', '340', '0'), +('4', '23', '13', '27732', '31565', '0'), +('4', '23', '13', '6952', '26805', '0'), +('4', '23', '13', '11663', '25380', '0'), +('4', '23', '13', '7257', '24781', '0'), +('4', '23', '14', '27732', '31565', '0'), +('4', '23', '14', '6952', '26805', '0'), +('4', '23', '14', '7257', '24781', '0'), +('4', '23', '14', '6692', '23131', '0'), +('4', '23', '11', '11696', '54878', '0'), +('4', '23', '11', '8325', '45540', '0'), +('4', '23', '11', '8408', '44030', '0'), +('4', '23', '11', '8402', '43395', '0'), +('4', '24', '22', '8567', '0', '0'), +('4', '24', '22', '10323', '0', '0'), +('4', '24', '22', '66166', '0', '0'), +('4', '24', '22', '10664', '0', '0'), +('4', '24', '1', '30361', '1290', '0'), +('4', '24', '1', '14568', '699', '0'), +('4', '24', '1', '14701', '624', '0'), +('4', '24', '1', '14702', '600', '0'), +('4', '24', '2', '30363', '1450', '0'), +('4', '24', '2', '10142', '1345', '0'), +('4', '24', '2', '4341', '1323', '0'), +('4', '24', '2', '3040', '1112', '0'), +('4', '24', '3', '14706', '990', '0'), +('4', '24', '3', '14705', '990', '0'), +('4', '24', '3', '14695', '626', '0'), +('4', '24', '3', '11052', '435', '0'), +('4', '24', '5', '30362', '1340', '0'), +('4', '24', '5', '14703', '1100', '0'), +('4', '24', '5', '14567', '774', '0'), +('4', '24', '5', '68291', '674', '0'), +('4', '24', '8', '11621', '8407', '0'), +('4', '24', '8', '11603', '1882', '0'), +('4', '24', '8', '11551', '1656', '0'), +('4', '24', '8', '27731', '1354', '0'), +('4', '24', '6', '1557', '5371', '0'), +('4', '24', '6', '2714', '1520', '0'), +('4', '24', '6', '3309', '554', '0'), +('4', '24', '6', '4165', '423', '0'), +('4', '24', '17', '11623', '2062', '0'), +('4', '24', '17', '4892', '1735', '0'), +('4', '24', '17', '4832', '1657', '0'), +('4', '24', '17', '3301', '865', '0'), +('4', '24', '7', '4833', '846', '0'), +('4', '24', '7', '4411', '694', '0'), +('4', '24', '7', '4893', '476', '0'), +('4', '24', '7', '71303', '461', '0'), +('4', '24', '9', '1541', '1915', '0'), +('4', '24', '9', '12189', '1013', '0'), +('4', '24', '9', '4834', '992', '0'), +('4', '24', '9', '13280', '505', '0'), +('4', '24', '15', '14707', '1050', '0'), +('4', '24', '15', '10366', '827', '0'), +('4', '24', '15', '30360', '700', '0'), +('4', '24', '15', '14679', '610', '0'), +('4', '24', '20', '11601', '7083', '0'), +('4', '24', '20', '1365', '4200', '0'), +('4', '24', '20', '2916', '3869', '0'), +('4', '24', '20', '2471', '3248', '0'), +('4', '24', '12', '20655', '1122', '0'), +('4', '24', '12', '11624', '1117', '0'), +('4', '24', '12', '4895', '995', '0'), +('4', '24', '12', '2923', '848', '0'), +('4', '24', '18', '4896', '701', '0'), +('4', '24', '18', '4412', '694', '0'), +('4', '24', '18', '4836', '608', '0'), +('4', '24', '18', '3191', '460', '0'), +('4', '24', '19', '4837', '1302', '0'), +('4', '24', '19', '68239', '778', '0'), +('4', '24', '19', '4897', '757', '0'), +('4', '24', '19', '4407', '351', '0'), +('4', '24', '13', '27732', '31875', '0'), +('4', '24', '13', '6952', '26925', '0'), +('4', '24', '13', '11663', '25680', '0'), +('4', '24', '13', '7257', '25081', '0'), +('4', '24', '14', '27732', '31875', '0'), +('4', '24', '14', '6952', '26925', '0'), +('4', '24', '14', '7257', '25081', '0'), +('4', '24', '14', '6692', '23371', '0'), +('4', '24', '11', '11696', '55478', '0'), +('4', '24', '11', '8325', '46080', '0'), +('4', '24', '11', '8408', '44510', '0'), +('4', '24', '11', '8402', '43875', '0'), +('4', '25', '22', '8567', '0', '0'), +('4', '25', '22', '10323', '0', '0'), +('4', '25', '22', '66166', '0', '0'), +('4', '25', '22', '10664', '0', '0'), +('4', '25', '1', '30361', '1290', '0'), +('4', '25', '1', '14568', '709', '0'), +('4', '25', '1', '14701', '624', '0'), +('4', '25', '1', '14702', '600', '0'), +('4', '25', '2', '30363', '1450', '0'), +('4', '25', '2', '10142', '1345', '0'), +('4', '25', '2', '4341', '1323', '0'), +('4', '25', '2', '3040', '1112', '0'), +('4', '25', '3', '14706', '990', '0'), +('4', '25', '3', '14705', '990', '0'), +('4', '25', '3', '14695', '634', '0'), +('4', '25', '3', '11052', '453', '0'), +('4', '25', '5', '30362', '1340', '0'), +('4', '25', '5', '14703', '1100', '0'), +('4', '25', '5', '14567', '782', '0'), +('4', '25', '5', '68291', '707', '0'), +('4', '25', '8', '11621', '8407', '0'), +('4', '25', '8', '11603', '1893', '0'), +('4', '25', '8', '11551', '1656', '0'), +('4', '25', '8', '27731', '1362', '0'), +('4', '25', '6', '1557', '5371', '0'), +('4', '25', '6', '2714', '1530', '0'), +('4', '25', '6', '3309', '554', '0'), +('4', '25', '6', '4165', '423', '0'), +('4', '25', '17', '11623', '2062', '0'), +('4', '25', '17', '4892', '1750', '0'), +('4', '25', '17', '4832', '1663', '0'), +('4', '25', '17', '3301', '865', '0'), +('4', '25', '7', '4833', '846', '0'), +('4', '25', '7', '4411', '694', '0'), +('4', '25', '7', '4893', '476', '0'), +('4', '25', '7', '71303', '464', '0'), +('4', '25', '9', '1541', '1927', '0'), +('4', '25', '9', '12189', '1013', '0'), +('4', '25', '9', '4834', '992', '0'), +('4', '25', '9', '13280', '505', '0'), +('4', '25', '15', '14707', '1050', '0'), +('4', '25', '15', '10366', '827', '0'), +('4', '25', '15', '30360', '700', '0'), +('4', '25', '15', '14679', '610', '0'), +('4', '25', '20', '11601', '7087', '0'), +('4', '25', '20', '1365', '4200', '0'), +('4', '25', '20', '2916', '3875', '0'), +('4', '25', '20', '2471', '3248', '0'), +('4', '25', '12', '20655', '1125', '0'), +('4', '25', '12', '11624', '1120', '0'), +('4', '25', '12', '4895', '995', '0'), +('4', '25', '12', '2923', '848', '0'), +('4', '25', '18', '4896', '707', '0'), +('4', '25', '18', '4412', '694', '0'), +('4', '25', '18', '4836', '610', '0'), +('4', '25', '18', '3191', '460', '0'), +('4', '25', '19', '4837', '1308', '0'), +('4', '25', '19', '68239', '782', '0'), +('4', '25', '19', '4897', '759', '0'), +('4', '25', '19', '4407', '362', '0'), +('4', '25', '13', '27732', '32245', '0'), +('4', '25', '13', '6952', '27105', '0'), +('4', '25', '13', '11663', '25920', '0'), +('4', '25', '13', '7257', '25321', '0'), +('4', '25', '14', '27732', '32245', '0'), +('4', '25', '14', '6952', '27105', '0'), +('4', '25', '14', '7257', '25321', '0'), +('4', '25', '14', '6692', '23611', '0'), +('4', '25', '11', '11696', '56078', '0'), +('4', '25', '11', '8325', '46560', '0'), +('4', '25', '11', '8408', '44990', '0'), +('4', '25', '11', '8402', '44355', '0'), +('4', '26', '22', '8567', '0', '0'), +('4', '26', '22', '10323', '0', '0'), +('4', '26', '22', '66166', '0', '0'), +('4', '26', '22', '10664', '0', '0'), +('4', '26', '1', '30361', '1290', '0'), +('4', '26', '1', '14568', '719', '0'), +('4', '26', '1', '14701', '624', '0'), +('4', '26', '1', '14702', '600', '0'), +('4', '26', '2', '30363', '1450', '0'), +('4', '26', '2', '10142', '1345', '0'), +('4', '26', '2', '4341', '1323', '0'), +('4', '26', '2', '3040', '1112', '0'), +('4', '26', '3', '14706', '990', '0'), +('4', '26', '3', '14705', '990', '0'), +('4', '26', '3', '14695', '643', '0'), +('4', '26', '3', '11052', '471', '0'), +('4', '26', '5', '30362', '1340', '0'), +('4', '26', '5', '14703', '1100', '0'), +('4', '26', '5', '14567', '789', '0'), +('4', '26', '5', '68291', '712', '0'), +('4', '26', '8', '11621', '8407', '0'), +('4', '26', '8', '11603', '1903', '0'), +('4', '26', '8', '11551', '1656', '0'), +('4', '26', '8', '27731', '1371', '0'), +('4', '26', '6', '1557', '5371', '0'), +('4', '26', '6', '2714', '1540', '0'), +('4', '26', '6', '3309', '554', '0'), +('4', '26', '6', '4165', '423', '0'), +('4', '26', '17', '11623', '2062', '0'), +('4', '26', '17', '4892', '1766', '0'), +('4', '26', '17', '4832', '1669', '0'), +('4', '26', '17', '3301', '865', '0'), +('4', '26', '7', '4833', '846', '0'), +('4', '26', '7', '4411', '694', '0'), +('4', '26', '7', '4893', '476', '0'), +('4', '26', '7', '71303', '468', '0'), +('4', '26', '9', '1541', '1939', '0'), +('4', '26', '9', '12189', '1013', '0'), +('4', '26', '9', '4834', '992', '0'), +('4', '26', '9', '13280', '505', '0'), +('4', '26', '15', '14707', '1050', '0'), +('4', '26', '15', '10366', '827', '0'), +('4', '26', '15', '30360', '700', '0'), +('4', '26', '15', '14679', '610', '0'), +('4', '26', '20', '11601', '7092', '0'), +('4', '26', '20', '1365', '4200', '0'), +('4', '26', '20', '2916', '3882', '0'), +('4', '26', '20', '2471', '3248', '0'), +('4', '26', '12', '20655', '1128', '0'), +('4', '26', '12', '11624', '1123', '0'), +('4', '26', '12', '4895', '995', '0'), +('4', '26', '12', '2923', '848', '0'), +('4', '26', '18', '4896', '713', '0'), +('4', '26', '18', '4412', '694', '0'), +('4', '26', '18', '4836', '612', '0'), +('4', '26', '18', '3191', '460', '0'), +('4', '26', '19', '4837', '1314', '0'), +('4', '26', '19', '68239', '785', '0'), +('4', '26', '19', '4897', '761', '0'), +('4', '26', '19', '4407', '373', '0'), +('4', '26', '13', '27732', '32614', '0'), +('4', '26', '13', '6952', '27285', '0'), +('4', '26', '13', '11663', '26220', '0'), +('4', '26', '13', '7257', '25621', '0'), +('4', '26', '14', '27732', '32614', '0'), +('4', '26', '14', '6952', '27285', '0'), +('4', '26', '14', '7257', '25621', '0'), +('4', '26', '14', '6692', '23851', '0'), +('4', '26', '11', '11696', '56678', '0'), +('4', '26', '11', '8325', '47100', '0'), +('4', '26', '11', '8408', '45470', '0'), +('4', '26', '11', '8402', '44835', '0'), +('4', '27', '22', '8567', '0', '0'), +('4', '27', '22', '10323', '0', '0'), +('4', '27', '22', '66166', '0', '0'), +('4', '27', '22', '10664', '0', '0'), +('4', '27', '1', '30361', '1290', '0'), +('4', '27', '1', '14568', '728', '0'), +('4', '27', '1', '14701', '624', '0'), +('4', '27', '1', '14702', '600', '0'), +('4', '27', '2', '30363', '1450', '0'), +('4', '27', '2', '10142', '1345', '0'), +('4', '27', '2', '4341', '1323', '0'), +('4', '27', '2', '3040', '1112', '0'), +('4', '27', '3', '14706', '990', '0'), +('4', '27', '3', '14705', '990', '0'), +('4', '27', '3', '14695', '651', '0'), +('4', '27', '3', '11052', '489', '0'), +('4', '27', '5', '30362', '1340', '0'), +('4', '27', '5', '14703', '1100', '0'), +('4', '27', '5', '14567', '797', '0'), +('4', '27', '5', '68291', '716', '0'), +('4', '27', '8', '11621', '8407', '0'), +('4', '27', '8', '11603', '1914', '0'), +('4', '27', '8', '11551', '1656', '0'), +('4', '27', '8', '27731', '1379', '0'), +('4', '27', '6', '1557', '5371', '0'), +('4', '27', '6', '2714', '1549', '0'), +('4', '27', '6', '3309', '554', '0'), +('4', '27', '6', '4165', '423', '0'), +('4', '27', '17', '11623', '2062', '0'), +('4', '27', '17', '4892', '1782', '0'), +('4', '27', '17', '4832', '1675', '0'), +('4', '27', '17', '4342', '870', '0'), +('4', '27', '7', '4833', '846', '0'), +('4', '27', '7', '4411', '694', '0'), +('4', '27', '7', '4893', '476', '0'), +('4', '27', '7', '71303', '472', '0'), +('4', '27', '9', '1541', '1951', '0'), +('4', '27', '9', '12189', '1013', '0'), +('4', '27', '9', '4834', '992', '0'), +('4', '27', '9', '13280', '505', '0'), +('4', '27', '15', '14707', '1050', '0'), +('4', '27', '15', '10366', '827', '0'), +('4', '27', '15', '30360', '700', '0'), +('4', '27', '15', '14679', '610', '0'), +('4', '27', '20', '11601', '7095', '0'), +('4', '27', '20', '1365', '4200', '0'), +('4', '27', '20', '2916', '3888', '0'), +('4', '27', '20', '2471', '3248', '0'), +('4', '27', '12', '20655', '1131', '0'), +('4', '27', '12', '11624', '1125', '0'), +('4', '27', '12', '4895', '995', '0'), +('4', '27', '12', '2923', '848', '0'), +('4', '27', '18', '4896', '719', '0'), +('4', '27', '18', '4412', '694', '0'), +('4', '27', '18', '4836', '614', '0'), +('4', '27', '18', '3191', '460', '0'), +('4', '27', '19', '4837', '1320', '0'), +('4', '27', '19', '68239', '789', '0'), +('4', '27', '19', '4897', '763', '0'), +('4', '27', '19', '4407', '384', '0'), +('4', '27', '13', '27732', '32924', '0'), +('4', '27', '13', '6952', '27405', '0'), +('4', '27', '13', '11663', '26520', '0'), +('4', '27', '13', '7257', '25861', '0'), +('4', '27', '14', '27732', '32924', '0'), +('4', '27', '14', '6952', '27405', '0'), +('4', '27', '14', '7257', '25861', '0'), +('4', '27', '14', '6692', '24091', '0'), +('4', '27', '11', '11696', '57338', '0'), +('4', '27', '11', '8325', '47580', '0'), +('4', '27', '11', '8408', '45950', '0'), +('4', '27', '11', '8402', '45315', '0'), +('4', '28', '22', '8567', '0', '0'), +('4', '28', '22', '10323', '0', '0'), +('4', '28', '22', '66166', '0', '0'), +('4', '28', '22', '10664', '0', '0'), +('4', '28', '1', '30361', '1290', '0'), +('4', '28', '1', '14568', '738', '0'), +('4', '28', '1', '14701', '624', '0'), +('4', '28', '1', '14702', '600', '0'), +('4', '28', '2', '30363', '1450', '0'), +('4', '28', '2', '10142', '1345', '0'), +('4', '28', '2', '4341', '1323', '0'), +('4', '28', '2', '3040', '1112', '0'), +('4', '28', '3', '14706', '990', '0'), +('4', '28', '3', '14705', '990', '0'), +('4', '28', '3', '14695', '660', '0'), +('4', '28', '3', '11052', '507', '0'), +('4', '28', '5', '30362', '1340', '0'), +('4', '28', '5', '14703', '1100', '0'), +('4', '28', '5', '14567', '805', '0'), +('4', '28', '5', '68291', '721', '0'), +('4', '28', '8', '11621', '8407', '0'), +('4', '28', '8', '11603', '1925', '0'), +('4', '28', '8', '11551', '1656', '0'), +('4', '28', '8', '27731', '1388', '0'), +('4', '28', '6', '1557', '5371', '0'), +('4', '28', '6', '2714', '1559', '0'), +('4', '28', '6', '3309', '554', '0'), +('4', '28', '6', '4165', '423', '0'), +('4', '28', '17', '11623', '2062', '0'), +('4', '28', '17', '4892', '1797', '0'), +('4', '28', '17', '4832', '1681', '0'), +('4', '28', '17', '4342', '882', '0'), +('4', '28', '7', '4833', '846', '0'), +('4', '28', '7', '4411', '694', '0'), +('4', '28', '7', '4893', '476', '0'), +('4', '28', '7', '71303', '475', '0'), +('4', '28', '9', '1541', '1963', '0'), +('4', '28', '9', '12189', '1013', '0'), +('4', '28', '9', '4834', '992', '0'), +('4', '28', '9', '13280', '505', '0'), +('4', '28', '15', '14707', '1050', '0'), +('4', '28', '15', '10366', '827', '0'), +('4', '28', '15', '30360', '700', '0'), +('4', '28', '15', '14679', '610', '0'), +('4', '28', '20', '11601', '7099', '0'), +('4', '28', '20', '1365', '4200', '0'), +('4', '28', '20', '2916', '3894', '0'), +('4', '28', '20', '2471', '3248', '0'), +('4', '28', '12', '20655', '1135', '0'), +('4', '28', '12', '11624', '1128', '0'), +('4', '28', '12', '4895', '995', '0'), +('4', '28', '12', '2923', '848', '0'), +('4', '28', '18', '4896', '725', '0'), +('4', '28', '18', '4412', '694', '0'), +('4', '28', '18', '4836', '616', '0'), +('4', '28', '18', '3191', '460', '0'), +('4', '28', '19', '4837', '1326', '0'), +('4', '28', '19', '68239', '793', '0'), +('4', '28', '19', '4897', '765', '0'), +('4', '28', '19', '4407', '395', '0'), +('4', '28', '13', '27732', '33294', '0'), +('4', '28', '13', '6952', '27585', '0'), +('4', '28', '13', '11663', '26820', '0'), +('4', '28', '13', '7257', '26161', '0'), +('4', '28', '14', '27732', '33294', '0'), +('4', '28', '14', '6952', '27585', '0'), +('4', '28', '14', '7257', '26161', '0'), +('4', '28', '14', '6692', '24331', '0'), +('4', '28', '11', '11696', '57938', '0'), +('4', '28', '11', '8325', '48120', '0'), +('4', '28', '11', '8408', '46430', '0'), +('4', '28', '11', '8402', '45795', '0'), +('4', '29', '22', '8567', '0', '0'), +('4', '29', '22', '10323', '0', '0'), +('4', '29', '22', '66166', '0', '0'), +('4', '29', '22', '10664', '0', '0'), +('4', '29', '1', '30361', '1290', '0'), +('4', '29', '1', '14568', '748', '0'), +('4', '29', '1', '14701', '624', '0'), +('4', '29', '1', '14702', '600', '0'), +('4', '29', '2', '30363', '1450', '0'), +('4', '29', '2', '10142', '1345', '0'), +('4', '29', '2', '4341', '1323', '0'), +('4', '29', '2', '3040', '1112', '0'), +('4', '29', '3', '14706', '990', '0'), +('4', '29', '3', '14705', '990', '0'), +('4', '29', '3', '14695', '668', '0'), +('4', '29', '3', '11052', '525', '0'), +('4', '29', '5', '30362', '1340', '0'), +('4', '29', '5', '14703', '1100', '0'), +('4', '29', '5', '14567', '812', '0'), +('4', '29', '5', '68291', '726', '0'), +('4', '29', '8', '11621', '8407', '0'), +('4', '29', '8', '11603', '1936', '0'), +('4', '29', '8', '11551', '1656', '0'), +('4', '29', '8', '27731', '1396', '0'), +('4', '29', '6', '1557', '5371', '0'), +('4', '29', '6', '2714', '1569', '0'), +('4', '29', '6', '3309', '554', '0'), +('4', '29', '6', '4165', '423', '0'), +('4', '29', '17', '11623', '2062', '0'), +('4', '29', '17', '4892', '1813', '0'), +('4', '29', '17', '4832', '1688', '0'), +('4', '29', '17', '4342', '894', '0'), +('4', '29', '7', '4833', '846', '0'), +('4', '29', '7', '4411', '694', '0'), +('4', '29', '7', '71303', '479', '0'), +('4', '29', '7', '4893', '476', '0'), +('4', '29', '9', '1541', '1975', '0'), +('4', '29', '9', '12189', '1013', '0'), +('4', '29', '9', '4834', '992', '0'), +('4', '29', '9', '13280', '505', '0'), +('4', '29', '15', '14707', '1050', '0'), +('4', '29', '15', '10366', '827', '0'), +('4', '29', '15', '30360', '700', '0'), +('4', '29', '15', '14679', '610', '0'), +('4', '29', '20', '11601', '7104', '0'), +('4', '29', '20', '1365', '4200', '0'), +('4', '29', '20', '2916', '3900', '0'), +('4', '29', '20', '2471', '3248', '0'), +('4', '29', '12', '20655', '1138', '0'), +('4', '29', '12', '11624', '1131', '0'), +('4', '29', '12', '4895', '995', '0'), +('4', '29', '12', '2923', '848', '0'), +('4', '29', '18', '4896', '731', '0'), +('4', '29', '18', '4412', '694', '0'), +('4', '29', '18', '4836', '618', '0'), +('4', '29', '18', '3191', '460', '0'), +('4', '29', '19', '4837', '1332', '0'), +('4', '29', '19', '68239', '796', '0'), +('4', '29', '19', '4897', '767', '0'), +('4', '29', '19', '4407', '406', '0'), +('4', '29', '13', '27732', '33663', '0'), +('4', '29', '13', '6952', '27765', '0'), +('4', '29', '13', '11663', '27060', '0'), +('4', '29', '13', '7257', '26461', '0'), +('4', '29', '14', '27732', '33663', '0'), +('4', '29', '14', '6952', '27765', '0'), +('4', '29', '14', '7257', '26461', '0'), +('4', '29', '14', '6692', '24571', '0'), +('4', '29', '11', '11696', '58538', '0'), +('4', '29', '11', '8325', '48600', '0'), +('4', '29', '11', '8408', '46910', '0'), +('4', '29', '11', '8402', '46275', '0'), +('4', '30', '22', '8567', '0', '0'), +('4', '30', '22', '10323', '0', '0'), +('4', '30', '22', '66166', '0', '0'), +('4', '30', '22', '10664', '0', '0'), +('4', '30', '1', '30361', '1290', '0'), +('4', '30', '1', '14568', '757', '0'), +('4', '30', '1', '14701', '624', '0'), +('4', '30', '1', '14702', '600', '0'), +('4', '30', '2', '30363', '1450', '0'), +('4', '30', '2', '10142', '1345', '0'), +('4', '30', '2', '4341', '1323', '0'), +('4', '30', '2', '3040', '1112', '0'), +('4', '30', '3', '14706', '990', '0'), +('4', '30', '3', '14705', '990', '0'), +('4', '30', '3', '14695', '676', '0'), +('4', '30', '3', '11052', '544', '0'), +('4', '30', '5', '30362', '1340', '0'), +('4', '30', '5', '14703', '1100', '0'), +('4', '30', '5', '14567', '820', '0'), +('4', '30', '5', '68291', '731', '0'), +('4', '30', '8', '11621', '8407', '0'), +('4', '30', '8', '11603', '1947', '0'), +('4', '30', '8', '11551', '1656', '0'), +('4', '30', '8', '27731', '1405', '0'), +('4', '30', '6', '1557', '5371', '0'), +('4', '30', '6', '2714', '1578', '0'), +('4', '30', '6', '3309', '554', '0'), +('4', '30', '6', '4165', '423', '0'), +('4', '30', '17', '11623', '2062', '0'), +('4', '30', '17', '4892', '1829', '0'), +('4', '30', '17', '4832', '1694', '0'), +('4', '30', '17', '4342', '906', '0'), +('4', '30', '7', '4833', '846', '0'), +('4', '30', '7', '4411', '694', '0'), +('4', '30', '7', '71303', '482', '0'), +('4', '30', '7', '4893', '476', '0'), +('4', '30', '9', '1541', '1987', '0'), +('4', '30', '9', '12189', '1013', '0'), +('4', '30', '9', '4834', '992', '0'), +('4', '30', '9', '13280', '505', '0'), +('4', '30', '15', '14707', '1050', '0'), +('4', '30', '15', '10366', '827', '0'), +('4', '30', '15', '30360', '700', '0'), +('4', '30', '15', '14679', '610', '0'), +('4', '30', '20', '11601', '7108', '0'), +('4', '30', '20', '1365', '4200', '0'), +('4', '30', '20', '2916', '3906', '0'), +('4', '30', '20', '2471', '3248', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '30', '12', '20655', '1141', '0'), +('4', '30', '12', '11624', '1134', '0'), +('4', '30', '12', '4895', '995', '0'), +('4', '30', '12', '2923', '848', '0'), +('4', '30', '18', '4896', '738', '0'), +('4', '30', '18', '4412', '694', '0'), +('4', '30', '18', '4836', '620', '0'), +('4', '30', '18', '3191', '460', '0'), +('4', '30', '19', '4837', '1338', '0'), +('4', '30', '19', '68239', '800', '0'), +('4', '30', '19', '4897', '770', '0'), +('4', '30', '19', '4407', '417', '0'), +('4', '30', '13', '27732', '33973', '0'), +('4', '30', '13', '6952', '27945', '0'), +('4', '30', '13', '11663', '27360', '0'), +('4', '30', '13', '7257', '26701', '0'), +('4', '30', '14', '27732', '33973', '0'), +('4', '30', '14', '6952', '27945', '0'), +('4', '30', '14', '7257', '26701', '0'), +('4', '30', '14', '6692', '24811', '0'), +('4', '30', '11', '11696', '59138', '0'), +('4', '30', '11', '8325', '49140', '0'), +('4', '30', '11', '8408', '47390', '0'), +('4', '30', '11', '8402', '46755', '0'), +('4', '31', '22', '8567', '0', '0'), +('4', '31', '22', '10323', '0', '0'), +('4', '31', '22', '66166', '0', '0'), +('4', '31', '22', '10664', '0', '0'), +('4', '31', '1', '30361', '1290', '0'), +('4', '31', '1', '14568', '767', '0'), +('4', '31', '1', '14701', '624', '0'), +('4', '31', '1', '14702', '600', '0'), +('4', '31', '2', '30363', '1450', '0'), +('4', '31', '2', '10142', '1345', '0'), +('4', '31', '2', '4341', '1323', '0'), +('4', '31', '2', '3040', '1112', '0'), +('4', '31', '3', '14706', '990', '0'), +('4', '31', '3', '14705', '990', '0'), +('4', '31', '3', '14695', '685', '0'), +('4', '31', '3', '11052', '562', '0'), +('4', '31', '5', '30362', '1340', '0'), +('4', '31', '5', '14703', '1100', '0'), +('4', '31', '5', '14567', '828', '0'), +('4', '31', '5', '68291', '736', '0'), +('4', '31', '8', '11621', '8407', '0'), +('4', '31', '8', '11603', '1958', '0'), +('4', '31', '8', '11551', '1656', '0'), +('4', '31', '8', '27731', '1413', '0'), +('4', '31', '6', '1557', '5371', '0'), +('4', '31', '6', '2714', '1588', '0'), +('4', '31', '6', '3309', '554', '0'), +('4', '31', '6', '4165', '423', '0'), +('4', '31', '17', '11623', '2062', '0'), +('4', '31', '17', '4892', '1845', '0'), +('4', '31', '17', '4832', '1700', '0'), +('4', '31', '17', '4342', '918', '0'), +('4', '31', '7', '4833', '846', '0'), +('4', '31', '7', '4411', '694', '0'), +('4', '31', '7', '71303', '486', '0'), +('4', '31', '7', '4893', '476', '0'), +('4', '31', '9', '1541', '1999', '0'), +('4', '31', '9', '12189', '1013', '0'), +('4', '31', '9', '4834', '992', '0'), +('4', '31', '9', '13280', '505', '0'), +('4', '31', '15', '14707', '1050', '0'), +('4', '31', '15', '10366', '827', '0'), +('4', '31', '15', '30360', '700', '0'), +('4', '31', '15', '14679', '610', '0'), +('4', '31', '20', '11601', '7112', '0'), +('4', '31', '20', '1365', '4200', '0'), +('4', '31', '20', '2916', '3912', '0'), +('4', '31', '20', '2471', '3248', '0'), +('4', '31', '12', '20655', '1145', '0'), +('4', '31', '12', '11624', '1137', '0'), +('4', '31', '12', '4895', '995', '0'), +('4', '31', '12', '2923', '848', '0'), +('4', '31', '18', '4896', '744', '0'), +('4', '31', '18', '4412', '694', '0'), +('4', '31', '18', '4836', '622', '0'), +('4', '31', '18', '3191', '460', '0'), +('4', '31', '19', '4837', '1344', '0'), +('4', '31', '19', '68239', '804', '0'), +('4', '31', '19', '4897', '772', '0'), +('4', '31', '19', '4407', '427', '0'), +('4', '31', '13', '27732', '34343', '0'), +('4', '31', '13', '6952', '28065', '0'), +('4', '31', '13', '11663', '27660', '0'), +('4', '31', '13', '7257', '27001', '0'), +('4', '31', '14', '27732', '34343', '0'), +('4', '31', '14', '6952', '28065', '0'), +('4', '31', '14', '7257', '27001', '0'), +('4', '31', '14', '6692', '25051', '0'), +('4', '31', '11', '11696', '59738', '0'), +('4', '31', '11', '8325', '49620', '0'), +('4', '31', '11', '8408', '47870', '0'), +('4', '31', '11', '8402', '47235', '0'), +('4', '32', '22', '8567', '0', '0'), +('4', '32', '22', '10323', '0', '0'), +('4', '32', '22', '66166', '0', '0'), +('4', '32', '22', '10664', '0', '0'), +('4', '32', '1', '30361', '1290', '0'), +('4', '32', '1', '14568', '777', '0'), +('4', '32', '1', '14701', '624', '0'), +('4', '32', '1', '14702', '600', '0'), +('4', '32', '2', '30363', '1450', '0'), +('4', '32', '2', '10142', '1345', '0'), +('4', '32', '2', '4341', '1323', '0'), +('4', '32', '2', '3040', '1112', '0'), +('4', '32', '3', '14706', '990', '0'), +('4', '32', '3', '14705', '990', '0'), +('4', '32', '3', '14695', '693', '0'), +('4', '32', '3', '11052', '580', '0'), +('4', '32', '5', '30362', '1340', '0'), +('4', '32', '5', '14703', '1100', '0'), +('4', '32', '5', '14567', '836', '0'), +('4', '32', '5', '68291', '741', '0'), +('4', '32', '8', '11621', '8407', '0'), +('4', '32', '8', '11603', '1969', '0'), +('4', '32', '8', '11551', '1656', '0'), +('4', '32', '8', '27731', '1422', '0'), +('4', '32', '6', '1557', '5371', '0'), +('4', '32', '6', '2714', '1598', '0'), +('4', '32', '6', '3309', '554', '0'), +('4', '32', '6', '4165', '423', '0'), +('4', '32', '17', '11623', '2062', '0'), +('4', '32', '17', '4892', '1860', '0'), +('4', '32', '17', '4832', '1707', '0'), +('4', '32', '17', '4342', '930', '0'), +('4', '32', '7', '4833', '846', '0'), +('4', '32', '7', '4411', '694', '0'), +('4', '32', '7', '71303', '490', '0'), +('4', '32', '7', '4893', '476', '0'), +('4', '32', '9', '1541', '2011', '0'), +('4', '32', '9', '12189', '1013', '0'), +('4', '32', '9', '4834', '992', '0'), +('4', '32', '9', '13280', '505', '0'), +('4', '32', '15', '14707', '1050', '0'), +('4', '32', '15', '10366', '827', '0'), +('4', '32', '15', '30360', '700', '0'), +('4', '32', '15', '14679', '610', '0'), +('4', '32', '20', '11601', '7116', '0'), +('4', '32', '20', '1365', '4200', '0'), +('4', '32', '20', '2916', '3918', '0'), +('4', '32', '20', '2471', '3248', '0'), +('4', '32', '12', '20655', '1148', '0'), +('4', '32', '12', '11624', '1140', '0'), +('4', '32', '12', '4895', '995', '0'), +('4', '32', '12', '2923', '848', '0'), +('4', '32', '18', '4896', '750', '0'), +('4', '32', '18', '4412', '694', '0'), +('4', '32', '18', '4836', '624', '0'), +('4', '32', '18', '3191', '460', '0'), +('4', '32', '19', '4837', '1350', '0'), +('4', '32', '19', '68239', '807', '0'), +('4', '32', '19', '4897', '774', '0'), +('4', '32', '19', '4407', '438', '0'), +('4', '32', '13', '27732', '34652', '0'), +('4', '32', '13', '6952', '28245', '0'), +('4', '32', '13', '11663', '27960', '0'), +('4', '32', '13', '7257', '27241', '0'), +('4', '32', '14', '27732', '34652', '0'), +('4', '32', '14', '6952', '28245', '0'), +('4', '32', '14', '7257', '27241', '0'), +('4', '32', '14', '6692', '25291', '0'), +('4', '32', '11', '11696', '60338', '0'), +('4', '32', '11', '8325', '50100', '0'), +('4', '32', '11', '8408', '48350', '0'), +('4', '32', '11', '8402', '47715', '0'), +('4', '33', '22', '8567', '0', '0'), +('4', '33', '22', '10323', '0', '0'), +('4', '33', '22', '66166', '0', '0'), +('4', '33', '22', '10664', '0', '0'), +('4', '33', '1', '30361', '1290', '0'), +('4', '33', '1', '14568', '786', '0'), +('4', '33', '1', '14701', '624', '0'), +('4', '33', '1', '14702', '600', '0'), +('4', '33', '2', '30363', '1450', '0'), +('4', '33', '2', '10142', '1345', '0'), +('4', '33', '2', '4341', '1323', '0'), +('4', '33', '2', '3040', '1112', '0'), +('4', '33', '3', '14705', '990', '0'), +('4', '33', '3', '14706', '990', '0'), +('4', '33', '3', '14695', '702', '0'), +('4', '33', '3', '11052', '598', '0'), +('4', '33', '5', '30362', '1340', '0'), +('4', '33', '5', '14703', '1100', '0'), +('4', '33', '5', '14567', '843', '0'), +('4', '33', '5', '68291', '745', '0'), +('4', '33', '8', '11621', '8407', '0'), +('4', '33', '8', '11603', '1980', '0'), +('4', '33', '8', '11551', '1656', '0'), +('4', '33', '8', '27731', '1430', '0'), +('4', '33', '6', '1557', '5371', '0'), +('4', '33', '6', '2714', '1607', '0'), +('4', '33', '6', '3309', '554', '0'), +('4', '33', '6', '4165', '423', '0'), +('4', '33', '17', '11623', '2062', '0'), +('4', '33', '17', '4892', '1876', '0'), +('4', '33', '17', '4832', '1713', '0'), +('4', '33', '17', '4342', '942', '0'), +('4', '33', '7', '4833', '846', '0'), +('4', '33', '7', '4411', '694', '0'), +('4', '33', '7', '71303', '493', '0'), +('4', '33', '7', '4893', '476', '0'), +('4', '33', '9', '1541', '2023', '0'), +('4', '33', '9', '12189', '1013', '0'), +('4', '33', '9', '4834', '992', '0'), +('4', '33', '9', '13280', '505', '0'), +('4', '33', '15', '14707', '1050', '0'), +('4', '33', '15', '10366', '827', '0'), +('4', '33', '15', '30360', '700', '0'), +('4', '33', '15', '14679', '610', '0'), +('4', '33', '20', '11601', '7120', '0'), +('4', '33', '20', '1365', '4200', '0'), +('4', '33', '20', '2916', '3924', '0'), +('4', '33', '20', '2471', '3248', '0'), +('4', '33', '12', '20655', '1151', '0'), +('4', '33', '12', '11624', '1143', '0'), +('4', '33', '12', '4895', '995', '0'), +('4', '33', '12', '2923', '848', '0'), +('4', '33', '18', '4896', '756', '0'), +('4', '33', '18', '4412', '694', '0'), +('4', '33', '18', '4836', '626', '0'), +('4', '33', '18', '3191', '460', '0'), +('4', '33', '19', '4837', '1356', '0'), +('4', '33', '19', '68239', '811', '0'), +('4', '33', '19', '4897', '776', '0'), +('4', '33', '19', '4407', '449', '0'), +('4', '33', '13', '27732', '35022', '0'), +('4', '33', '13', '6952', '28425', '0'), +('4', '33', '13', '11663', '28200', '0'), +('4', '33', '13', '7257', '27541', '0'), +('4', '33', '14', '27732', '35022', '0'), +('4', '33', '14', '6952', '28425', '0'), +('4', '33', '14', '7257', '27541', '0'), +('4', '33', '14', '6692', '25531', '0'), +('4', '33', '11', '11696', '60938', '0'), +('4', '33', '11', '8325', '50640', '0'), +('4', '33', '11', '8408', '48890', '0'), +('4', '33', '11', '8402', '48195', '0'), +('4', '34', '22', '8567', '0', '0'), +('4', '34', '22', '10323', '0', '0'), +('4', '34', '22', '66166', '0', '0'), +('4', '34', '22', '10664', '0', '0'), +('4', '34', '1', '30361', '1290', '0'), +('4', '34', '1', '14568', '796', '0'), +('4', '34', '1', '14701', '624', '0'), +('4', '34', '1', '14702', '600', '0'), +('4', '34', '2', '30363', '1450', '0'), +('4', '34', '2', '10142', '1345', '0'), +('4', '34', '2', '4341', '1323', '0'), +('4', '34', '2', '3040', '1112', '0'), +('4', '34', '3', '14705', '990', '0'), +('4', '34', '3', '14706', '990', '0'), +('4', '34', '3', '14695', '710', '0'), +('4', '34', '3', '11052', '616', '0'), +('4', '34', '5', '30362', '1340', '0'), +('4', '34', '5', '14703', '1100', '0'), +('4', '34', '5', '14567', '851', '0'), +('4', '34', '5', '68291', '750', '0'), +('4', '34', '8', '11621', '8407', '0'), +('4', '34', '8', '11603', '1990', '0'), +('4', '34', '8', '11551', '1656', '0'), +('4', '34', '8', '27731', '1438', '0'), +('4', '34', '6', '1557', '5371', '0'), +('4', '34', '6', '2714', '1617', '0'), +('4', '34', '6', '3309', '554', '0'), +('4', '34', '6', '4165', '423', '0'), +('4', '34', '17', '11623', '2062', '0'), +('4', '34', '17', '4892', '1892', '0'), +('4', '34', '17', '4832', '1719', '0'), +('4', '34', '17', '4342', '954', '0'), +('4', '34', '7', '4833', '846', '0'), +('4', '34', '7', '4411', '694', '0'), +('4', '34', '7', '71303', '497', '0'), +('4', '34', '7', '4893', '476', '0'), +('4', '34', '9', '1541', '2036', '0'), +('4', '34', '9', '12189', '1013', '0'), +('4', '34', '9', '4834', '992', '0'), +('4', '34', '9', '13280', '505', '0'), +('4', '34', '15', '14707', '1050', '0'), +('4', '34', '15', '10366', '827', '0'), +('4', '34', '15', '30360', '700', '0'), +('4', '34', '15', '14679', '610', '0'), +('4', '34', '20', '11601', '7125', '0'), +('4', '34', '20', '1365', '4200', '0'), +('4', '34', '20', '2916', '3930', '0'), +('4', '34', '20', '2471', '3248', '0'), +('4', '34', '12', '20655', '1154', '0'), +('4', '34', '12', '11624', '1146', '0'), +('4', '34', '12', '4895', '995', '0'), +('4', '34', '12', '2923', '848', '0'), +('4', '34', '18', '4896', '762', '0'), +('4', '34', '18', '4412', '694', '0'), +('4', '34', '18', '4836', '628', '0'), +('4', '34', '18', '3191', '460', '0'), +('4', '34', '19', '4837', '1362', '0'), +('4', '34', '19', '68239', '814', '0'), +('4', '34', '19', '4897', '778', '0'), +('4', '34', '19', '4407', '460', '0'), +('4', '34', '13', '27732', '35392', '0'), +('4', '34', '13', '6952', '28545', '0'), +('4', '34', '13', '11663', '28500', '0'), +('4', '34', '13', '7257', '27781', '0'), +('4', '34', '14', '27732', '35392', '0'), +('4', '34', '14', '6952', '28545', '0'), +('4', '34', '14', '7257', '27781', '0'), +('4', '34', '14', '6692', '25771', '0'), +('4', '34', '11', '11696', '61538', '0'), +('4', '34', '11', '8325', '51120', '0'), +('4', '34', '11', '8408', '49370', '0'), +('4', '34', '11', '8402', '48675', '0'), +('4', '35', '22', '8567', '0', '0'), +('4', '35', '22', '10323', '0', '0'), +('4', '35', '22', '66166', '0', '0'), +('4', '35', '22', '10664', '0', '0'), +('4', '35', '1', '30361', '1290', '0'), +('4', '35', '1', '14568', '806', '0'), +('4', '35', '1', '14701', '624', '0'), +('4', '35', '1', '14702', '600', '0'), +('4', '35', '2', '30363', '1450', '0'), +('4', '35', '2', '10142', '1345', '0'), +('4', '35', '2', '4341', '1323', '0'), +('4', '35', '2', '3040', '1112', '0'), +('4', '35', '3', '14705', '990', '0'), +('4', '35', '3', '14706', '990', '0'), +('4', '35', '3', '14695', '719', '0'), +('4', '35', '3', '11052', '634', '0'), +('4', '35', '5', '30362', '1340', '0'), +('4', '35', '5', '14703', '1100', '0'), +('4', '35', '5', '14567', '859', '0'), +('4', '35', '5', '68291', '755', '0'), +('4', '35', '8', '11621', '8407', '0'), +('4', '35', '8', '11603', '2001', '0'), +('4', '35', '8', '11551', '1656', '0'), +('4', '35', '8', '27731', '1447', '0'), +('4', '35', '6', '1557', '5371', '0'), +('4', '35', '6', '2714', '1627', '0'), +('4', '35', '6', '3309', '554', '0'), +('4', '35', '6', '4165', '423', '0'), +('4', '35', '17', '11623', '2062', '0'), +('4', '35', '17', '4892', '1907', '0'), +('4', '35', '17', '4832', '1725', '0'), +('4', '35', '17', '4342', '966', '0'), +('4', '35', '7', '4833', '846', '0'), +('4', '35', '7', '4411', '694', '0'), +('4', '35', '7', '71303', '501', '0'), +('4', '35', '7', '4893', '476', '0'), +('4', '35', '9', '1541', '2048', '0'), +('4', '35', '9', '12189', '1013', '0'), +('4', '35', '9', '4834', '992', '0'), +('4', '35', '9', '4894', '507', '0'), +('4', '35', '15', '14707', '1050', '0'), +('4', '35', '15', '10366', '827', '0'), +('4', '35', '15', '30360', '700', '0'), +('4', '35', '15', '14679', '610', '0'), +('4', '35', '20', '11601', '7128', '0'), +('4', '35', '20', '1365', '4200', '0'), +('4', '35', '20', '2916', '3936', '0'), +('4', '35', '20', '2471', '3248', '0'), +('4', '35', '12', '20655', '1157', '0'), +('4', '35', '12', '11624', '1148', '0'), +('4', '35', '12', '4895', '995', '0'), +('4', '35', '12', '2923', '848', '0'), +('4', '35', '18', '4896', '768', '0'), +('4', '35', '18', '4412', '694', '0'), +('4', '35', '18', '4836', '630', '0'), +('4', '35', '18', '3191', '460', '0'), +('4', '35', '19', '4837', '1368', '0'), +('4', '35', '19', '68239', '818', '0'), +('4', '35', '19', '4897', '780', '0'), +('4', '35', '19', '4407', '471', '0'), +('4', '35', '13', '27732', '35701', '0'), +('4', '35', '13', '11663', '28800', '0'), +('4', '35', '13', '6952', '28725', '0'), +('4', '35', '13', '7257', '28081', '0'), +('4', '35', '14', '27732', '35701', '0'), +('4', '35', '14', '6952', '28725', '0'), +('4', '35', '14', '7257', '28081', '0'), +('4', '35', '14', '6692', '26011', '0'), +('4', '35', '11', '11696', '62138', '0'), +('4', '35', '11', '8325', '51660', '0'), +('4', '35', '11', '8408', '49850', '0'), +('4', '35', '11', '8402', '49155', '0'), +('4', '36', '22', '8567', '0', '0'), +('4', '36', '22', '10323', '0', '0'), +('4', '36', '22', '66166', '0', '0'), +('4', '36', '22', '10664', '0', '0'), +('4', '36', '1', '30361', '1290', '0'), +('4', '36', '1', '14568', '815', '0'), +('4', '36', '1', '14701', '624', '0'), +('4', '36', '1', '14702', '600', '0'), +('4', '36', '2', '30363', '1450', '0'), +('4', '36', '2', '10142', '1345', '0'), +('4', '36', '2', '4341', '1323', '0'), +('4', '36', '2', '3040', '1112', '0'), +('4', '36', '3', '14705', '990', '0'), +('4', '36', '3', '14706', '990', '0'), +('4', '36', '3', '14695', '727', '0'), +('4', '36', '3', '11052', '652', '0'), +('4', '36', '5', '30362', '1340', '0'), +('4', '36', '5', '14703', '1100', '0'), +('4', '36', '5', '14567', '866', '0'), +('4', '36', '5', '68291', '760', '0'), +('4', '36', '8', '11621', '8407', '0'), +('4', '36', '8', '11603', '2012', '0'), +('4', '36', '8', '11551', '1656', '0'), +('4', '36', '8', '27731', '1455', '0'), +('4', '36', '6', '1557', '5371', '0'), +('4', '36', '6', '2714', '1636', '0'), +('4', '36', '6', '3309', '554', '0'), +('4', '36', '6', '4165', '423', '0'), +('4', '36', '17', '11623', '2062', '0'), +('4', '36', '17', '4892', '1923', '0'), +('4', '36', '17', '4832', '1731', '0'), +('4', '36', '17', '4342', '978', '0'), +('4', '36', '7', '4833', '846', '0'), +('4', '36', '7', '4411', '694', '0'), +('4', '36', '7', '71303', '504', '0'), +('4', '36', '7', '4893', '476', '0'), +('4', '36', '9', '1541', '2060', '0'), +('4', '36', '9', '12189', '1013', '0'), +('4', '36', '9', '4834', '992', '0'), +('4', '36', '9', '4894', '515', '0'), +('4', '36', '15', '14707', '1050', '0'), +('4', '36', '15', '10366', '827', '0'), +('4', '36', '15', '30360', '700', '0'), +('4', '36', '15', '14679', '610', '0'), +('4', '36', '20', '11601', '7133', '0'), +('4', '36', '20', '1365', '4200', '0'), +('4', '36', '20', '2916', '3942', '0'), +('4', '36', '20', '2471', '3248', '0'), +('4', '36', '12', '20655', '1161', '0'), +('4', '36', '12', '11624', '1151', '0'), +('4', '36', '12', '4895', '995', '0'), +('4', '36', '12', '2923', '848', '0'), +('4', '36', '18', '4896', '774', '0'), +('4', '36', '18', '4412', '694', '0'), +('4', '36', '18', '4836', '632', '0'), +('4', '36', '18', '3191', '460', '0'), +('4', '36', '19', '4837', '1374', '0'), +('4', '36', '19', '68239', '822', '0'), +('4', '36', '19', '4897', '782', '0'), +('4', '36', '19', '4407', '482', '0'), +('4', '36', '13', '27732', '36071', '0'), +('4', '36', '13', '11663', '29040', '0'), +('4', '36', '13', '6952', '28905', '0'), +('4', '36', '13', '7257', '28381', '0'), +('4', '36', '14', '27732', '36071', '0'), +('4', '36', '14', '6952', '28905', '0'), +('4', '36', '14', '7257', '28381', '0'), +('4', '36', '14', '6692', '26251', '0'), +('4', '36', '11', '11696', '62738', '0'), +('4', '36', '11', '8325', '52140', '0'), +('4', '36', '11', '8408', '50330', '0'), +('4', '36', '11', '8402', '49635', '0'), +('4', '37', '22', '8567', '0', '0'), +('4', '37', '22', '10323', '0', '0'), +('4', '37', '22', '66166', '0', '0'), +('4', '37', '22', '10664', '0', '0'), +('4', '37', '1', '30361', '1290', '0'), +('4', '37', '1', '14568', '825', '0'), +('4', '37', '1', '14701', '624', '0'), +('4', '37', '1', '14702', '600', '0'), +('4', '37', '2', '30363', '1450', '0'), +('4', '37', '2', '10142', '1345', '0'), +('4', '37', '2', '4341', '1323', '0'), +('4', '37', '2', '3040', '1112', '0'), +('4', '37', '3', '14705', '990', '0'), +('4', '37', '3', '14706', '990', '0'), +('4', '37', '3', '14695', '736', '0'), +('4', '37', '3', '11052', '670', '0'), +('4', '37', '5', '30362', '1340', '0'), +('4', '37', '5', '14703', '1100', '0'), +('4', '37', '5', '14567', '874', '0'), +('4', '37', '5', '68291', '765', '0'), +('4', '37', '8', '11621', '8407', '0'), +('4', '37', '8', '11603', '2023', '0'), +('4', '37', '8', '11551', '1656', '0'), +('4', '37', '8', '27731', '1464', '0'), +('4', '37', '6', '1557', '5371', '0'), +('4', '37', '6', '2714', '1646', '0'), +('4', '37', '6', '3309', '554', '0'), +('4', '37', '6', '4165', '423', '0'), +('4', '37', '17', '11623', '2062', '0'), +('4', '37', '17', '4892', '1939', '0'), +('4', '37', '17', '4832', '1737', '0'), +('4', '37', '17', '4342', '991', '0'), +('4', '37', '7', '4833', '846', '0'), +('4', '37', '7', '4411', '694', '0'), +('4', '37', '7', '71303', '508', '0'), +('4', '37', '7', '4893', '476', '0'), +('4', '37', '9', '1541', '2072', '0'), +('4', '37', '9', '12189', '1013', '0'), +('4', '37', '9', '4834', '992', '0'), +('4', '37', '9', '4894', '523', '0'), +('4', '37', '15', '14707', '1050', '0'), +('4', '37', '15', '10366', '827', '0'), +('4', '37', '15', '30360', '700', '0'), +('4', '37', '15', '14679', '610', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '37', '20', '11601', '7137', '0'), +('4', '37', '20', '1365', '4200', '0'), +('4', '37', '20', '2916', '3948', '0'), +('4', '37', '20', '2471', '3248', '0'), +('4', '37', '12', '20655', '1164', '0'), +('4', '37', '12', '11624', '1154', '0'), +('4', '37', '12', '4895', '995', '0'), +('4', '37', '12', '2923', '848', '0'), +('4', '37', '18', '4896', '780', '0'), +('4', '37', '18', '4412', '694', '0'), +('4', '37', '18', '4836', '635', '0'), +('4', '37', '18', '3191', '460', '0'), +('4', '37', '19', '4837', '1380', '0'), +('4', '37', '19', '68239', '825', '0'), +('4', '37', '19', '4897', '784', '0'), +('4', '37', '19', '4407', '493', '0'), +('4', '37', '13', '27732', '36441', '0'), +('4', '37', '13', '11663', '29340', '0'), +('4', '37', '13', '6952', '29025', '0'), +('4', '37', '13', '7257', '28621', '0'), +('4', '37', '14', '27732', '36441', '0'), +('4', '37', '14', '6952', '29025', '0'), +('4', '37', '14', '7257', '28621', '0'), +('4', '37', '14', '5500', '27555', '0'), +('4', '37', '11', '11696', '63338', '0'), +('4', '37', '11', '8325', '52680', '0'), +('4', '37', '11', '8408', '50810', '0'), +('4', '37', '11', '45137', '50611', '0'), +('4', '38', '22', '8567', '0', '0'), +('4', '38', '22', '10323', '0', '0'), +('4', '38', '22', '66166', '0', '0'), +('4', '38', '22', '10664', '0', '0'), +('4', '38', '1', '30361', '1290', '0'), +('4', '38', '1', '14568', '835', '0'), +('4', '38', '1', '14701', '624', '0'), +('4', '38', '1', '14702', '600', '0'), +('4', '38', '2', '30363', '1450', '0'), +('4', '38', '2', '10142', '1345', '0'), +('4', '38', '2', '4341', '1323', '0'), +('4', '38', '2', '3040', '1112', '0'), +('4', '38', '3', '14705', '990', '0'), +('4', '38', '3', '14706', '990', '0'), +('4', '38', '3', '14695', '744', '0'), +('4', '38', '3', '11052', '689', '0'), +('4', '38', '5', '30362', '1340', '0'), +('4', '38', '5', '14703', '1100', '0'), +('4', '38', '5', '14567', '882', '0'), +('4', '38', '5', '68291', '770', '0'), +('4', '38', '8', '11621', '8407', '0'), +('4', '38', '8', '11603', '2034', '0'), +('4', '38', '8', '11551', '1656', '0'), +('4', '38', '8', '27731', '1472', '0'), +('4', '38', '6', '1557', '5371', '0'), +('4', '38', '6', '2714', '1656', '0'), +('4', '38', '6', '3309', '554', '0'), +('4', '38', '6', '4165', '423', '0'), +('4', '38', '17', '11623', '2062', '0'), +('4', '38', '17', '4892', '1954', '0'), +('4', '38', '17', '4832', '1744', '0'), +('4', '38', '17', '4342', '1003', '0'), +('4', '38', '7', '4833', '846', '0'), +('4', '38', '7', '4411', '694', '0'), +('4', '38', '7', '71303', '511', '0'), +('4', '38', '7', '4893', '476', '0'), +('4', '38', '9', '1541', '2084', '0'), +('4', '38', '9', '12189', '1013', '0'), +('4', '38', '9', '4834', '992', '0'), +('4', '38', '9', '4894', '531', '0'), +('4', '38', '15', '14707', '1050', '0'), +('4', '38', '15', '10366', '827', '0'), +('4', '38', '15', '30360', '700', '0'), +('4', '38', '15', '14679', '610', '0'), +('4', '38', '20', '11601', '7141', '0'), +('4', '38', '20', '1365', '4200', '0'), +('4', '38', '20', '2916', '3954', '0'), +('4', '38', '20', '2471', '3248', '0'), +('4', '38', '12', '20655', '1167', '0'), +('4', '38', '12', '11624', '1157', '0'), +('4', '38', '12', '4895', '995', '0'), +('4', '38', '12', '2923', '848', '0'), +('4', '38', '18', '4896', '786', '0'), +('4', '38', '18', '4412', '694', '0'), +('4', '38', '18', '4836', '637', '0'), +('4', '38', '18', '3191', '460', '0'), +('4', '38', '19', '4837', '1386', '0'), +('4', '38', '19', '68239', '829', '0'), +('4', '38', '19', '4897', '786', '0'), +('4', '38', '19', '4407', '504', '0'), +('4', '38', '13', '27732', '36750', '0'), +('4', '38', '13', '11663', '29640', '0'), +('4', '38', '13', '6952', '29205', '0'), +('4', '38', '13', '7257', '28921', '0'), +('4', '38', '14', '27732', '36750', '0'), +('4', '38', '14', '6952', '29205', '0'), +('4', '38', '14', '7257', '28921', '0'), +('4', '38', '14', '5500', '27735', '0'), +('4', '38', '11', '11696', '63938', '0'), +('4', '38', '11', '8325', '53160', '0'), +('4', '38', '11', '45137', '52199', '0'), +('4', '38', '11', '8408', '51290', '0'), +('4', '39', '22', '8567', '0', '0'), +('4', '39', '22', '10323', '0', '0'), +('4', '39', '22', '66166', '0', '0'), +('4', '39', '22', '10664', '0', '0'), +('4', '39', '1', '30361', '1290', '0'), +('4', '39', '1', '14568', '844', '0'), +('4', '39', '1', '14701', '624', '0'), +('4', '39', '1', '14702', '600', '0'), +('4', '39', '2', '30363', '1450', '0'), +('4', '39', '2', '10142', '1345', '0'), +('4', '39', '2', '4341', '1323', '0'), +('4', '39', '2', '3040', '1112', '0'), +('4', '39', '3', '14705', '990', '0'), +('4', '39', '3', '14706', '990', '0'), +('4', '39', '3', '14695', '753', '0'), +('4', '39', '3', '11052', '707', '0'), +('4', '39', '5', '30362', '1340', '0'), +('4', '39', '5', '14703', '1100', '0'), +('4', '39', '5', '14567', '890', '0'), +('4', '39', '5', '68291', '774', '0'), +('4', '39', '8', '11621', '8407', '0'), +('4', '39', '8', '11603', '2045', '0'), +('4', '39', '8', '11551', '1656', '0'), +('4', '39', '8', '27731', '1481', '0'), +('4', '39', '6', '1557', '5371', '0'), +('4', '39', '6', '2714', '1665', '0'), +('4', '39', '6', '3309', '554', '0'), +('4', '39', '6', '4165', '423', '0'), +('4', '39', '17', '11623', '2062', '0'), +('4', '39', '17', '4892', '1970', '0'), +('4', '39', '17', '4832', '1750', '0'), +('4', '39', '17', '4342', '1015', '0'), +('4', '39', '7', '4833', '846', '0'), +('4', '39', '7', '4411', '694', '0'), +('4', '39', '7', '71303', '515', '0'), +('4', '39', '7', '4893', '476', '0'), +('4', '39', '9', '1541', '2096', '0'), +('4', '39', '9', '12189', '1013', '0'), +('4', '39', '9', '4834', '992', '0'), +('4', '39', '9', '4894', '539', '0'), +('4', '39', '15', '14707', '1050', '0'), +('4', '39', '15', '10366', '827', '0'), +('4', '39', '15', '30360', '700', '0'), +('4', '39', '15', '14679', '610', '0'), +('4', '39', '20', '11601', '7145', '0'), +('4', '39', '20', '1365', '4200', '0'), +('4', '39', '20', '2916', '3960', '0'), +('4', '39', '20', '2471', '3248', '0'), +('4', '39', '12', '20655', '1171', '0'), +('4', '39', '12', '11624', '1160', '0'), +('4', '39', '12', '4895', '995', '0'), +('4', '39', '12', '2923', '848', '0'), +('4', '39', '18', '4896', '792', '0'), +('4', '39', '18', '4412', '694', '0'), +('4', '39', '18', '4836', '639', '0'), +('4', '39', '18', '3191', '460', '0'), +('4', '39', '19', '4837', '1392', '0'), +('4', '39', '19', '68239', '833', '0'), +('4', '39', '19', '4897', '788', '0'), +('4', '39', '19', '4407', '514', '0'), +('4', '39', '13', '27732', '37120', '0'), +('4', '39', '13', '11663', '29940', '0'), +('4', '39', '13', '6952', '29385', '0'), +('4', '39', '13', '7257', '29161', '0'), +('4', '39', '14', '27732', '37120', '0'), +('4', '39', '14', '6952', '29385', '0'), +('4', '39', '14', '7257', '29161', '0'), +('4', '39', '14', '5500', '27915', '0'), +('4', '39', '11', '11696', '64538', '0'), +('4', '39', '11', '45137', '54627', '0'), +('4', '39', '11', '8325', '53700', '0'), +('4', '39', '11', '8408', '51770', '0'), +('4', '40', '22', '8567', '0', '0'), +('4', '40', '22', '10323', '0', '0'), +('4', '40', '22', '66166', '0', '0'), +('4', '40', '22', '10664', '0', '0'), +('4', '40', '1', '30361', '1290', '0'), +('4', '40', '1', '14568', '854', '0'), +('4', '40', '1', '14701', '624', '0'), +('4', '40', '1', '14702', '600', '0'), +('4', '40', '2', '30363', '1450', '0'), +('4', '40', '2', '10142', '1345', '0'), +('4', '40', '2', '4341', '1323', '0'), +('4', '40', '2', '3040', '1112', '0'), +('4', '40', '3', '14705', '990', '0'), +('4', '40', '3', '14706', '990', '0'), +('4', '40', '3', '14695', '761', '0'), +('4', '40', '3', '11052', '725', '0'), +('4', '40', '5', '30362', '1340', '0'), +('4', '40', '5', '14703', '1100', '0'), +('4', '40', '5', '14567', '897', '0'), +('4', '40', '5', '68291', '779', '0'), +('4', '40', '8', '11621', '8407', '0'), +('4', '40', '8', '11603', '2056', '0'), +('4', '40', '8', '11551', '1656', '0'), +('4', '40', '8', '27731', '1489', '0'), +('4', '40', '6', '1557', '5371', '0'), +('4', '40', '6', '2714', '1675', '0'), +('4', '40', '6', '3309', '554', '0'), +('4', '40', '6', '4165', '423', '0'), +('4', '40', '17', '11623', '2062', '0'), +('4', '40', '17', '4892', '1986', '0'), +('4', '40', '17', '4832', '1756', '0'), +('4', '40', '17', '4342', '1027', '0'), +('4', '40', '7', '4833', '846', '0'), +('4', '40', '7', '4411', '694', '0'), +('4', '40', '7', '71303', '519', '0'), +('4', '40', '7', '4893', '476', '0'), +('4', '40', '9', '1541', '2108', '0'), +('4', '40', '9', '12189', '1013', '0'), +('4', '40', '9', '4834', '992', '0'), +('4', '40', '9', '4894', '548', '0'), +('4', '40', '15', '14707', '1050', '0'), +('4', '40', '15', '10366', '827', '0'), +('4', '40', '15', '30360', '700', '0'), +('4', '40', '15', '14679', '610', '0'), +('4', '40', '20', '11601', '7149', '0'), +('4', '40', '20', '1365', '4200', '0'), +('4', '40', '20', '2916', '3966', '0'), +('4', '40', '20', '2471', '3248', '0'), +('4', '40', '12', '20655', '1174', '0'), +('4', '40', '12', '11624', '1163', '0'), +('4', '40', '12', '4895', '995', '0'), +('4', '40', '12', '2923', '848', '0'), +('4', '40', '18', '4896', '798', '0'), +('4', '40', '18', '4412', '694', '0'), +('4', '40', '18', '4836', '641', '0'), +('4', '40', '18', '3191', '460', '0'), +('4', '40', '19', '4837', '1398', '0'), +('4', '40', '19', '68239', '836', '0'), +('4', '40', '19', '4897', '790', '0'), +('4', '40', '19', '4407', '525', '0'), +('4', '40', '13', '27732', '37490', '0'), +('4', '40', '13', '11663', '30180', '0'), +('4', '40', '13', '6952', '29565', '0'), +('4', '40', '13', '7257', '29461', '0'), +('4', '40', '14', '27732', '37490', '0'), +('4', '40', '14', '6952', '29565', '0'), +('4', '40', '14', '7257', '29461', '0'), +('4', '40', '14', '5500', '28095', '0'), +('4', '40', '11', '11696', '65138', '0'), +('4', '40', '11', '45137', '56275', '0'), +('4', '40', '11', '8325', '54180', '0'), +('4', '40', '11', '8408', '52250', '0'), +('4', '41', '22', '8567', '0', '0'), +('4', '41', '22', '10323', '0', '0'), +('4', '41', '22', '66166', '0', '0'), +('4', '41', '22', '10664', '0', '0'), +('4', '41', '1', '30361', '1290', '0'), +('4', '41', '1', '14568', '864', '0'), +('4', '41', '1', '14701', '624', '0'), +('4', '41', '1', '14702', '600', '0'), +('4', '41', '2', '30363', '1450', '0'), +('4', '41', '2', '10142', '1345', '0'), +('4', '41', '2', '4341', '1323', '0'), +('4', '41', '2', '3040', '1112', '0'), +('4', '41', '3', '14705', '990', '0'), +('4', '41', '3', '14706', '990', '0'), +('4', '41', '3', '14695', '769', '0'), +('4', '41', '3', '11052', '743', '0'), +('4', '41', '5', '30362', '1340', '0'), +('4', '41', '5', '14703', '1100', '0'), +('4', '41', '5', '14567', '905', '0'), +('4', '41', '5', '68291', '784', '0'), +('4', '41', '8', '11621', '8407', '0'), +('4', '41', '8', '11603', '2067', '0'), +('4', '41', '8', '11551', '1656', '0'), +('4', '41', '8', '27731', '1498', '0'), +('4', '41', '6', '1557', '5371', '0'), +('4', '41', '6', '2714', '1685', '0'), +('4', '41', '6', '3309', '554', '0'), +('4', '41', '6', '4165', '423', '0'), +('4', '41', '17', '11623', '2062', '0'), +('4', '41', '17', '4892', '2002', '0'), +('4', '41', '17', '4832', '1763', '0'), +('4', '41', '17', '4342', '1039', '0'), +('4', '41', '7', '4833', '846', '0'), +('4', '41', '7', '4411', '694', '0'), +('4', '41', '7', '71303', '522', '0'), +('4', '41', '7', '4893', '476', '0'), +('4', '41', '9', '1541', '2120', '0'), +('4', '41', '9', '12189', '1013', '0'), +('4', '41', '9', '4834', '992', '0'), +('4', '41', '9', '4894', '556', '0'), +('4', '41', '15', '14707', '1050', '0'), +('4', '41', '15', '10366', '827', '0'), +('4', '41', '15', '30360', '700', '0'), +('4', '41', '15', '14679', '610', '0'), +('4', '41', '20', '11601', '7154', '0'), +('4', '41', '20', '1365', '4200', '0'), +('4', '41', '20', '2916', '3972', '0'), +('4', '41', '20', '2471', '3248', '0'), +('4', '41', '12', '20655', '1177', '0'), +('4', '41', '12', '11624', '1166', '0'), +('4', '41', '12', '4895', '995', '0'), +('4', '41', '12', '2923', '848', '0'), +('4', '41', '18', '4896', '804', '0'), +('4', '41', '18', '4412', '694', '0'), +('4', '41', '18', '4836', '643', '0'), +('4', '41', '18', '3191', '460', '0'), +('4', '41', '19', '4837', '1404', '0'), +('4', '41', '19', '68239', '840', '0'), +('4', '41', '19', '4897', '793', '0'), +('4', '41', '19', '4407', '536', '0'), +('4', '41', '13', '27732', '37799', '0'), +('4', '41', '13', '11663', '30480', '0'), +('4', '41', '13', '7257', '29761', '0'), +('4', '41', '13', '6952', '29685', '0'), +('4', '41', '14', '27732', '37799', '0'), +('4', '41', '14', '7257', '29761', '0'), +('4', '41', '14', '6952', '29685', '0'), +('4', '41', '14', '5500', '28335', '0'), +('4', '41', '11', '11696', '65738', '0'), +('4', '41', '11', '45137', '58523', '0'), +('4', '41', '11', '8325', '54720', '0'), +('4', '41', '11', '8408', '52730', '0'), +('4', '42', '22', '8567', '0', '0'), +('4', '42', '22', '10323', '0', '0'), +('4', '42', '22', '66166', '0', '0'), +('4', '42', '22', '10664', '0', '0'), +('4', '42', '1', '30361', '1290', '0'), +('4', '42', '1', '14568', '873', '0'), +('4', '42', '1', '14701', '624', '0'), +('4', '42', '1', '14702', '600', '0'), +('4', '42', '2', '30363', '1450', '0'), +('4', '42', '2', '10142', '1345', '0'), +('4', '42', '2', '4341', '1323', '0'), +('4', '42', '2', '3040', '1112', '0'), +('4', '42', '3', '14705', '990', '0'), +('4', '42', '3', '14706', '990', '0'), +('4', '42', '3', '14695', '778', '0'), +('4', '42', '3', '11052', '761', '0'), +('4', '42', '5', '30362', '1340', '0'), +('4', '42', '5', '14703', '1100', '0'), +('4', '42', '5', '14567', '913', '0'), +('4', '42', '5', '68291', '789', '0'), +('4', '42', '8', '11621', '8407', '0'), +('4', '42', '8', '11603', '2077', '0'), +('4', '42', '8', '11551', '1656', '0'), +('4', '42', '8', '27731', '1506', '0'), +('4', '42', '6', '1557', '5371', '0'), +('4', '42', '6', '2714', '1694', '0'), +('4', '42', '6', '3309', '554', '0'), +('4', '42', '6', '4165', '423', '0'), +('4', '42', '17', '11623', '2062', '0'), +('4', '42', '17', '4892', '2017', '0'), +('4', '42', '17', '4832', '1769', '0'), +('4', '42', '17', '4342', '1051', '0'), +('4', '42', '7', '4833', '846', '0'), +('4', '42', '7', '4411', '694', '0'), +('4', '42', '7', '71303', '526', '0'), +('4', '42', '7', '4893', '476', '0'), +('4', '42', '9', '1541', '2132', '0'), +('4', '42', '9', '12189', '1013', '0'), +('4', '42', '9', '4834', '992', '0'), +('4', '42', '9', '4894', '564', '0'), +('4', '42', '15', '14707', '1050', '0'), +('4', '42', '15', '10366', '827', '0'), +('4', '42', '15', '30360', '700', '0'), +('4', '42', '15', '14679', '610', '0'), +('4', '42', '20', '11601', '7158', '0'), +('4', '42', '20', '1365', '4200', '0'), +('4', '42', '20', '2916', '3978', '0'), +('4', '42', '20', '2471', '3248', '0'), +('4', '42', '12', '20655', '1180', '0'), +('4', '42', '12', '11624', '1169', '0'), +('4', '42', '12', '4895', '995', '0'), +('4', '42', '12', '2923', '848', '0'), +('4', '42', '18', '4896', '810', '0'), +('4', '42', '18', '4412', '694', '0'), +('4', '42', '18', '4836', '645', '0'), +('4', '42', '18', '3191', '460', '0'), +('4', '42', '19', '4837', '1410', '0'), +('4', '42', '19', '68239', '843', '0'), +('4', '42', '19', '4897', '795', '0'), +('4', '42', '19', '4407', '547', '0'), +('4', '42', '13', '27732', '38169', '0'), +('4', '42', '13', '11663', '30780', '0'), +('4', '42', '13', '7257', '30001', '0'), +('4', '42', '13', '6952', '29865', '0'), +('4', '42', '14', '27732', '38169', '0'), +('4', '42', '14', '7257', '30001', '0'), +('4', '42', '14', '6952', '29865', '0'), +('4', '42', '14', '5500', '28515', '0'), +('4', '42', '11', '11696', '66338', '0'), +('4', '42', '11', '45137', '60471', '0'), +('4', '42', '11', '8325', '55200', '0'), +('4', '42', '11', '8408', '53210', '0'), +('4', '43', '22', '8567', '0', '0'), +('4', '43', '22', '10323', '0', '0'), +('4', '43', '22', '66166', '0', '0'), +('4', '43', '22', '10664', '0', '0'), +('4', '43', '1', '30361', '1290', '0'), +('4', '43', '1', '14568', '883', '0'), +('4', '43', '1', '14701', '624', '0'), +('4', '43', '1', '14702', '600', '0'), +('4', '43', '2', '30363', '1450', '0'), +('4', '43', '2', '10142', '1345', '0'), +('4', '43', '2', '4341', '1323', '0'), +('4', '43', '2', '3040', '1112', '0'), +('4', '43', '3', '14705', '990', '0'), +('4', '43', '3', '14706', '990', '0'), +('4', '43', '3', '14695', '786', '0'), +('4', '43', '3', '11052', '779', '0'), +('4', '43', '5', '30362', '1340', '0'), +('4', '43', '5', '14703', '1100', '0'), +('4', '43', '5', '14567', '920', '0'), +('4', '43', '5', '68291', '794', '0'), +('4', '43', '8', '11621', '8407', '0'), +('4', '43', '8', '11603', '2088', '0'), +('4', '43', '8', '11551', '1656', '0'), +('4', '43', '8', '27731', '1515', '0'), +('4', '43', '6', '1557', '5371', '0'), +('4', '43', '6', '2714', '1704', '0'), +('4', '43', '6', '3309', '554', '0'), +('4', '43', '6', '4165', '423', '0'), +('4', '43', '17', '11623', '2062', '0'), +('4', '43', '17', '4892', '2033', '0'), +('4', '43', '17', '4832', '1775', '0'), +('4', '43', '17', '4342', '1063', '0'), +('4', '43', '7', '4833', '846', '0'), +('4', '43', '7', '4411', '694', '0'), +('4', '43', '7', '71303', '530', '0'), +('4', '43', '7', '4893', '476', '0'), +('4', '43', '9', '1541', '2144', '0'), +('4', '43', '9', '12189', '1013', '0'), +('4', '43', '9', '4834', '992', '0'), +('4', '43', '9', '4894', '572', '0'), +('4', '43', '15', '14707', '1050', '0'), +('4', '43', '15', '10366', '827', '0'), +('4', '43', '15', '30360', '700', '0'), +('4', '43', '15', '14679', '610', '0'), +('4', '43', '20', '11601', '7162', '0'), +('4', '43', '20', '1365', '4200', '0'), +('4', '43', '20', '2916', '3984', '0'), +('4', '43', '20', '2471', '3248', '0'), +('4', '43', '12', '20655', '1184', '0'), +('4', '43', '12', '11624', '1172', '0'), +('4', '43', '12', '4895', '995', '0'), +('4', '43', '12', '2923', '848', '0'), +('4', '43', '18', '4896', '816', '0'), +('4', '43', '18', '4412', '694', '0'), +('4', '43', '18', '4836', '647', '0'), +('4', '43', '18', '3191', '460', '0'), +('4', '43', '19', '4837', '1416', '0'), +('4', '43', '19', '68239', '847', '0'), +('4', '43', '19', '4897', '797', '0'), +('4', '43', '19', '4407', '558', '0'), +('4', '43', '13', '27732', '38539', '0'), +('4', '43', '13', '11663', '31020', '0'), +('4', '43', '13', '7257', '30301', '0'), +('4', '43', '13', '6952', '30045', '0'), +('4', '43', '14', '27732', '38539', '0'), +('4', '43', '14', '7257', '30301', '0'), +('4', '43', '14', '6952', '30045', '0'), +('4', '43', '14', '5500', '28695', '0'), +('4', '43', '11', '11696', '66938', '0'), +('4', '43', '11', '45137', '62179', '0'), +('4', '43', '11', '8325', '55740', '0'), +('4', '43', '11', '8408', '53690', '0'), +('4', '44', '22', '8567', '0', '0'), +('4', '44', '22', '10323', '0', '0'), +('4', '44', '22', '66166', '0', '0'), +('4', '44', '22', '10664', '0', '0'), +('4', '44', '1', '30361', '1290', '0'), +('4', '44', '1', '14568', '893', '0'), +('4', '44', '1', '14701', '624', '0'), +('4', '44', '1', '14702', '600', '0'), +('4', '44', '2', '30363', '1450', '0'), +('4', '44', '2', '10142', '1345', '0'), +('4', '44', '2', '4341', '1323', '0'), +('4', '44', '2', '3040', '1112', '0'), +('4', '44', '3', '14705', '990', '0'), +('4', '44', '3', '14706', '990', '0'), +('4', '44', '3', '11052', '797', '0'), +('4', '44', '3', '14695', '795', '0'), +('4', '44', '5', '30362', '1340', '0'), +('4', '44', '5', '14703', '1100', '0'), +('4', '44', '5', '14567', '928', '0'), +('4', '44', '5', '68291', '799', '0'), +('4', '44', '8', '11621', '8407', '0'), +('4', '44', '8', '11603', '2099', '0'), +('4', '44', '8', '11551', '1656', '0'), +('4', '44', '8', '27731', '1523', '0'), +('4', '44', '6', '1557', '5371', '0'), +('4', '44', '6', '2714', '1714', '0'), +('4', '44', '6', '3309', '554', '0'), +('4', '44', '6', '4165', '423', '0'), +('4', '44', '17', '11623', '2062', '0'), +('4', '44', '17', '4892', '2049', '0'), +('4', '44', '17', '4832', '1782', '0'), +('4', '44', '17', '4342', '1075', '0'), +('4', '44', '7', '4833', '846', '0'), +('4', '44', '7', '4411', '694', '0'), +('4', '44', '7', '71303', '533', '0'), +('4', '44', '7', '4893', '476', '0'), +('4', '44', '9', '1541', '2156', '0'), +('4', '44', '9', '12189', '1013', '0'), +('4', '44', '9', '4834', '992', '0'), +('4', '44', '9', '4894', '580', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '44', '15', '14707', '1050', '0'), +('4', '44', '15', '10366', '827', '0'), +('4', '44', '15', '30360', '700', '0'), +('4', '44', '15', '14679', '610', '0'), +('4', '44', '20', '11601', '7166', '0'), +('4', '44', '20', '1365', '4200', '0'), +('4', '44', '20', '2916', '3990', '0'), +('4', '44', '20', '2471', '3248', '0'), +('4', '44', '12', '20655', '1187', '0'), +('4', '44', '12', '11624', '1175', '0'), +('4', '44', '12', '4895', '995', '0'), +('4', '44', '12', '2923', '848', '0'), +('4', '44', '18', '4896', '822', '0'), +('4', '44', '18', '4412', '694', '0'), +('4', '44', '18', '4836', '649', '0'), +('4', '44', '18', '3191', '460', '0'), +('4', '44', '19', '4837', '1422', '0'), +('4', '44', '19', '68239', '851', '0'), +('4', '44', '19', '4897', '799', '0'), +('4', '44', '19', '4407', '569', '0'), +('4', '44', '13', '27732', '38848', '0'), +('4', '44', '13', '11663', '31320', '0'), +('4', '44', '13', '7257', '30541', '0'), +('4', '44', '13', '6952', '30165', '0'), +('4', '44', '14', '27732', '38848', '0'), +('4', '44', '14', '7257', '30541', '0'), +('4', '44', '14', '6952', '30165', '0'), +('4', '44', '14', '5500', '28875', '0'), +('4', '44', '11', '11696', '67538', '0'), +('4', '44', '11', '45137', '64788', '0'), +('4', '44', '11', '8325', '56220', '0'), +('4', '44', '11', '8408', '54170', '0'), +('4', '45', '22', '8567', '0', '0'), +('4', '45', '22', '10323', '0', '0'), +('4', '45', '22', '66166', '0', '0'), +('4', '45', '22', '10664', '0', '0'), +('4', '45', '1', '30361', '1290', '0'), +('4', '45', '1', '14568', '902', '0'), +('4', '45', '1', '14701', '624', '0'), +('4', '45', '1', '14702', '600', '0'), +('4', '45', '2', '30363', '1450', '0'), +('4', '45', '2', '10142', '1345', '0'), +('4', '45', '2', '4341', '1323', '0'), +('4', '45', '2', '3040', '1112', '0'), +('4', '45', '3', '14705', '990', '0'), +('4', '45', '3', '14706', '990', '0'), +('4', '45', '3', '11052', '815', '0'), +('4', '45', '3', '14695', '803', '0'), +('4', '45', '5', '30362', '1340', '0'), +('4', '45', '5', '14703', '1100', '0'), +('4', '45', '5', '14567', '936', '0'), +('4', '45', '5', '68291', '803', '0'), +('4', '45', '8', '11621', '8407', '0'), +('4', '45', '8', '11603', '2110', '0'), +('4', '45', '8', '11551', '1656', '0'), +('4', '45', '8', '27731', '1532', '0'), +('4', '45', '6', '1557', '5371', '0'), +('4', '45', '6', '2714', '1723', '0'), +('4', '45', '6', '3309', '554', '0'), +('4', '45', '6', '4165', '423', '0'), +('4', '45', '17', '4892', '2064', '0'), +('4', '45', '17', '11623', '2062', '0'), +('4', '45', '17', '4832', '1788', '0'), +('4', '45', '17', '4342', '1087', '0'), +('4', '45', '7', '4833', '846', '0'), +('4', '45', '7', '4411', '694', '0'), +('4', '45', '7', '71303', '537', '0'), +('4', '45', '7', '4893', '476', '0'), +('4', '45', '9', '1541', '2168', '0'), +('4', '45', '9', '12189', '1013', '0'), +('4', '45', '9', '4834', '992', '0'), +('4', '45', '9', '4894', '588', '0'), +('4', '45', '15', '14707', '1050', '0'), +('4', '45', '15', '10366', '827', '0'), +('4', '45', '15', '30360', '700', '0'), +('4', '45', '15', '14679', '610', '0'), +('4', '45', '20', '11601', '7171', '0'), +('4', '45', '20', '1365', '4200', '0'), +('4', '45', '20', '2916', '3996', '0'), +('4', '45', '20', '2471', '3248', '0'), +('4', '45', '12', '20655', '1190', '0'), +('4', '45', '12', '11624', '1178', '0'), +('4', '45', '12', '4895', '995', '0'), +('4', '45', '12', '2923', '848', '0'), +('4', '45', '18', '4896', '828', '0'), +('4', '45', '18', '4412', '694', '0'), +('4', '45', '18', '4836', '651', '0'), +('4', '45', '18', '3191', '460', '0'), +('4', '45', '19', '4837', '1429', '0'), +('4', '45', '19', '68239', '854', '0'), +('4', '45', '19', '4897', '801', '0'), +('4', '45', '19', '4407', '580', '0'), +('4', '45', '13', '27732', '39218', '0'), +('4', '45', '13', '11663', '31620', '0'), +('4', '45', '13', '7257', '30841', '0'), +('4', '45', '13', '6952', '30345', '0'), +('4', '45', '14', '27732', '39218', '0'), +('4', '45', '14', '7257', '30841', '0'), +('4', '45', '14', '6952', '30345', '0'), +('4', '45', '14', '5500', '29055', '0'), +('4', '45', '11', '11696', '68138', '0'), +('4', '45', '11', '45137', '66556', '0'), +('4', '45', '11', '8325', '56760', '0'), +('4', '45', '11', '8408', '54650', '0'), +('4', '46', '22', '8567', '0', '0'), +('4', '46', '22', '10323', '0', '0'), +('4', '46', '22', '66166', '0', '0'), +('4', '46', '22', '10664', '0', '0'), +('4', '46', '1', '30361', '1290', '0'), +('4', '46', '1', '14568', '912', '0'), +('4', '46', '1', '14701', '624', '0'), +('4', '46', '1', '14702', '600', '0'), +('4', '46', '2', '30363', '1450', '0'), +('4', '46', '2', '10142', '1345', '0'), +('4', '46', '2', '4341', '1323', '0'), +('4', '46', '2', '3040', '1112', '0'), +('4', '46', '3', '14705', '990', '0'), +('4', '46', '3', '14706', '990', '0'), +('4', '46', '3', '11052', '834', '0'), +('4', '46', '3', '14695', '812', '0'), +('4', '46', '5', '30362', '1340', '0'), +('4', '46', '5', '14703', '1100', '0'), +('4', '46', '5', '14567', '944', '0'), +('4', '46', '5', '68291', '808', '0'), +('4', '46', '8', '11621', '8407', '0'), +('4', '46', '8', '11603', '2121', '0'), +('4', '46', '8', '11551', '1656', '0'), +('4', '46', '8', '27731', '1540', '0'), +('4', '46', '6', '1557', '5371', '0'), +('4', '46', '6', '2714', '1733', '0'), +('4', '46', '6', '3309', '554', '0'), +('4', '46', '6', '4165', '423', '0'), +('4', '46', '17', '4892', '2080', '0'), +('4', '46', '17', '11623', '2062', '0'), +('4', '46', '17', '4832', '1794', '0'), +('4', '46', '17', '4342', '1099', '0'), +('4', '46', '7', '4833', '846', '0'), +('4', '46', '7', '4411', '694', '0'), +('4', '46', '7', '71303', '540', '0'), +('4', '46', '7', '4893', '476', '0'), +('4', '46', '9', '1541', '2180', '0'), +('4', '46', '9', '12189', '1013', '0'), +('4', '46', '9', '4834', '992', '0'), +('4', '46', '9', '4894', '596', '0'), +('4', '46', '15', '14707', '1050', '0'), +('4', '46', '15', '10366', '827', '0'), +('4', '46', '15', '30360', '700', '0'), +('4', '46', '15', '14679', '610', '0'), +('4', '46', '20', '11601', '7175', '0'), +('4', '46', '20', '1365', '4200', '0'), +('4', '46', '20', '2916', '4002', '0'), +('4', '46', '20', '2471', '3248', '0'), +('4', '46', '12', '20655', '1193', '0'), +('4', '46', '12', '11624', '1181', '0'), +('4', '46', '12', '4895', '995', '0'), +('4', '46', '12', '4835', '849', '0'), +('4', '46', '18', '4896', '834', '0'), +('4', '46', '18', '4412', '694', '0'), +('4', '46', '18', '4836', '654', '0'), +('4', '46', '18', '3191', '460', '0'), +('4', '46', '19', '4837', '1435', '0'), +('4', '46', '19', '68239', '858', '0'), +('4', '46', '19', '4897', '803', '0'), +('4', '46', '19', '4407', '591', '0'), +('4', '46', '13', '27732', '42168', '0'), +('4', '46', '13', '5523', '38688', '0'), +('4', '46', '13', '11663', '34080', '0'), +('4', '46', '13', '7257', '33241', '0'), +('4', '46', '14', '27732', '42168', '0'), +('4', '46', '14', '5523', '38688', '0'), +('4', '46', '14', '7257', '33241', '0'), +('4', '46', '14', '6952', '31725', '0'), +('4', '46', '11', '11696', '73358', '0'), +('4', '46', '11', '45137', '73185', '0'), +('4', '46', '11', '8325', '61140', '0'), +('4', '46', '11', '8408', '58850', '0'), +('4', '47', '22', '8567', '0', '0'), +('4', '47', '22', '10323', '0', '0'), +('4', '47', '22', '66166', '0', '0'), +('4', '47', '22', '10664', '0', '0'), +('4', '47', '1', '30361', '1290', '0'), +('4', '47', '1', '14568', '922', '0'), +('4', '47', '1', '14701', '624', '0'), +('4', '47', '1', '14702', '600', '0'), +('4', '47', '2', '30363', '1450', '0'), +('4', '47', '2', '10142', '1345', '0'), +('4', '47', '2', '4341', '1323', '0'), +('4', '47', '2', '3040', '1112', '0'), +('4', '47', '3', '14705', '990', '0'), +('4', '47', '3', '14706', '990', '0'), +('4', '47', '3', '11052', '852', '0'), +('4', '47', '3', '14695', '820', '0'), +('4', '47', '5', '30362', '1340', '0'), +('4', '47', '5', '14703', '1100', '0'), +('4', '47', '5', '14567', '951', '0'), +('4', '47', '5', '4501', '823', '0'), +('4', '47', '8', '11621', '8407', '0'), +('4', '47', '8', '11603', '2132', '0'), +('4', '47', '8', '11551', '1656', '0'), +('4', '47', '8', '27731', '1548', '0'), +('4', '47', '6', '1557', '5371', '0'), +('4', '47', '6', '2714', '1743', '0'), +('4', '47', '6', '3309', '554', '0'), +('4', '47', '6', '4165', '423', '0'), +('4', '47', '17', '4892', '2096', '0'), +('4', '47', '17', '11623', '2062', '0'), +('4', '47', '17', '4832', '1801', '0'), +('4', '47', '17', '4342', '1111', '0'), +('4', '47', '7', '4833', '846', '0'), +('4', '47', '7', '4411', '694', '0'), +('4', '47', '7', '71303', '544', '0'), +('4', '47', '7', '4893', '476', '0'), +('4', '47', '9', '1541', '2193', '0'), +('4', '47', '9', '12189', '1013', '0'), +('4', '47', '9', '4834', '992', '0'), +('4', '47', '9', '4894', '605', '0'), +('4', '47', '15', '14707', '1050', '0'), +('4', '47', '15', '10366', '827', '0'), +('4', '47', '15', '30360', '700', '0'), +('4', '47', '15', '14679', '610', '0'), +('4', '47', '20', '11601', '7179', '0'), +('4', '47', '20', '1365', '4200', '0'), +('4', '47', '20', '2916', '4008', '0'), +('4', '47', '20', '2471', '3248', '0'), +('4', '47', '12', '20655', '1197', '0'), +('4', '47', '12', '11624', '1184', '0'), +('4', '47', '12', '4895', '995', '0'), +('4', '47', '12', '4835', '851', '0'), +('4', '47', '18', '4896', '840', '0'), +('4', '47', '18', '4412', '694', '0'), +('4', '47', '18', '4836', '656', '0'), +('4', '47', '18', '2461', '462', '0'), +('4', '47', '19', '4837', '1441', '0'), +('4', '47', '19', '68239', '862', '0'), +('4', '47', '19', '4897', '805', '0'), +('4', '47', '19', '4407', '601', '0'), +('4', '47', '13', '27732', '43377', '0'), +('4', '47', '13', '5523', '39350', '0'), +('4', '47', '13', '11663', '35100', '0'), +('4', '47', '13', '7257', '34201', '0'), +('4', '47', '14', '27732', '43377', '0'), +('4', '47', '14', '5523', '39350', '0'), +('4', '47', '14', '7257', '34201', '0'), +('4', '47', '14', '6952', '32325', '0'), +('4', '47', '11', '45137', '76634', '0'), +('4', '47', '11', '11696', '75518', '0'), +('4', '47', '11', '8325', '62940', '0'), +('4', '47', '11', '8408', '60590', '0'), +('4', '48', '22', '8567', '0', '0'), +('4', '48', '22', '10323', '0', '0'), +('4', '48', '22', '66166', '0', '0'), +('4', '48', '22', '10664', '0', '0'), +('4', '48', '1', '30361', '1290', '0'), +('4', '48', '1', '14568', '931', '0'), +('4', '48', '1', '14701', '624', '0'), +('4', '48', '1', '14702', '600', '0'), +('4', '48', '2', '30363', '1450', '0'), +('4', '48', '2', '10142', '1345', '0'), +('4', '48', '2', '4341', '1323', '0'), +('4', '48', '2', '3040', '1112', '0'), +('4', '48', '3', '14705', '990', '0'), +('4', '48', '3', '14706', '990', '0'), +('4', '48', '3', '11052', '870', '0'), +('4', '48', '3', '14695', '829', '0'), +('4', '48', '5', '30362', '1340', '0'), +('4', '48', '5', '14703', '1100', '0'), +('4', '48', '5', '14567', '959', '0'), +('4', '48', '5', '4501', '838', '0'), +('4', '48', '8', '11621', '8407', '0'), +('4', '48', '8', '11603', '2143', '0'), +('4', '48', '8', '11551', '1656', '0'), +('4', '48', '8', '27731', '1557', '0'), +('4', '48', '6', '1557', '5371', '0'), +('4', '48', '6', '2714', '1752', '0'), +('4', '48', '6', '3309', '554', '0'), +('4', '48', '6', '4165', '423', '0'), +('4', '48', '17', '4892', '2111', '0'), +('4', '48', '17', '11623', '2062', '0'), +('4', '48', '17', '4832', '1807', '0'), +('4', '48', '17', '4342', '1123', '0'), +('4', '48', '7', '4833', '846', '0'), +('4', '48', '7', '4411', '694', '0'), +('4', '48', '7', '71303', '548', '0'), +('4', '48', '7', '4893', '476', '0'), +('4', '48', '9', '1541', '2205', '0'), +('4', '48', '9', '12189', '1013', '0'), +('4', '48', '9', '4834', '992', '0'), +('4', '48', '9', '4894', '613', '0'), +('4', '48', '15', '14707', '1050', '0'), +('4', '48', '15', '10366', '827', '0'), +('4', '48', '15', '30360', '700', '0'), +('4', '48', '15', '14679', '610', '0'), +('4', '48', '20', '11601', '7183', '0'), +('4', '48', '20', '1365', '4200', '0'), +('4', '48', '20', '2916', '4014', '0'), +('4', '48', '20', '2471', '3248', '0'), +('4', '48', '12', '20655', '1200', '0'), +('4', '48', '12', '11624', '1187', '0'), +('4', '48', '12', '4895', '995', '0'), +('4', '48', '12', '4835', '853', '0'), +('4', '48', '18', '4896', '846', '0'), +('4', '48', '18', '4412', '694', '0'), +('4', '48', '18', '4836', '658', '0'), +('4', '48', '18', '2461', '466', '0'), +('4', '48', '19', '4837', '1447', '0'), +('4', '48', '19', '68239', '865', '0'), +('4', '48', '19', '4897', '807', '0'), +('4', '48', '19', '4407', '612', '0'), +('4', '48', '13', '27732', '44587', '0'), +('4', '48', '13', '5523', '40071', '0'), +('4', '48', '13', '11663', '36060', '0'), +('4', '48', '13', '7257', '35161', '0'), +('4', '48', '14', '27732', '44587', '0'), +('4', '48', '14', '5523', '40071', '0'), +('4', '48', '14', '7257', '35161', '0'), +('4', '48', '14', '6952', '32925', '0'), +('4', '48', '11', '45137', '81163', '0'), +('4', '48', '11', '11696', '77678', '0'), +('4', '48', '11', '8325', '64740', '0'), +('4', '48', '11', '8408', '62330', '0'), +('4', '49', '22', '8567', '0', '0'), +('4', '49', '22', '10323', '0', '0'), +('4', '49', '22', '66166', '0', '0'), +('4', '49', '22', '10664', '0', '0'), +('4', '49', '1', '30361', '1290', '0'), +('4', '49', '1', '14568', '941', '0'), +('4', '49', '1', '14701', '624', '0'), +('4', '49', '1', '14702', '600', '0'), +('4', '49', '2', '30363', '1450', '0'), +('4', '49', '2', '10142', '1345', '0'), +('4', '49', '2', '4341', '1323', '0'), +('4', '49', '2', '3040', '1112', '0'), +('4', '49', '3', '14705', '990', '0'), +('4', '49', '3', '14706', '990', '0'), +('4', '49', '3', '11052', '888', '0'), +('4', '49', '3', '14695', '837', '0'), +('4', '49', '5', '30362', '1340', '0'), +('4', '49', '5', '14703', '1100', '0'), +('4', '49', '5', '14567', '967', '0'), +('4', '49', '5', '4501', '854', '0'), +('4', '49', '8', '11621', '8407', '0'), +('4', '49', '8', '11603', '2154', '0'), +('4', '49', '8', '11551', '1656', '0'), +('4', '49', '8', '27731', '1565', '0'), +('4', '49', '6', '1557', '5371', '0'), +('4', '49', '6', '2714', '1762', '0'), +('4', '49', '6', '3309', '554', '0'), +('4', '49', '6', '4165', '423', '0'), +('4', '49', '17', '4892', '2127', '0'), +('4', '49', '17', '11623', '2062', '0'), +('4', '49', '17', '4832', '1814', '0'), +('4', '49', '17', '4342', '1136', '0'), +('4', '49', '7', '4833', '846', '0'), +('4', '49', '7', '4411', '694', '0'), +('4', '49', '7', '71303', '551', '0'), +('4', '49', '7', '4893', '476', '0'), +('4', '49', '9', '1541', '2217', '0'), +('4', '49', '9', '12189', '1013', '0'), +('4', '49', '9', '4834', '992', '0'), +('4', '49', '9', '4894', '621', '0'), +('4', '49', '15', '14707', '1050', '0'), +('4', '49', '15', '10366', '827', '0'), +('4', '49', '15', '30360', '700', '0'), +('4', '49', '15', '14679', '610', '0'), +('4', '49', '20', '11601', '7188', '0'), +('4', '49', '20', '1365', '4200', '0'), +('4', '49', '20', '2916', '4020', '0'), +('4', '49', '20', '2471', '3248', '0'), +('4', '49', '12', '20655', '1203', '0'), +('4', '49', '12', '11624', '1190', '0'), +('4', '49', '12', '4895', '995', '0'), +('4', '49', '12', '4835', '855', '0'), +('4', '49', '18', '4896', '852', '0'), +('4', '49', '18', '4412', '694', '0'), +('4', '49', '18', '4836', '660', '0'), +('4', '49', '18', '2461', '471', '0'), +('4', '49', '19', '4837', '1453', '0'), +('4', '49', '19', '68239', '869', '0'), +('4', '49', '19', '4897', '809', '0'), +('4', '49', '19', '4407', '623', '0'), +('4', '49', '13', '27732', '45797', '0'), +('4', '49', '13', '5523', '40733', '0'), +('4', '49', '13', '11663', '37080', '0'), +('4', '49', '13', '7257', '36121', '0'), +('4', '49', '14', '27732', '45797', '0'), +('4', '49', '14', '5523', '40733', '0'), +('4', '49', '14', '7257', '36121', '0'), +('4', '49', '14', '6952', '33465', '0'), +('4', '49', '11', '45137', '84732', '0'), +('4', '49', '11', '11696', '79778', '0'), +('4', '49', '11', '8325', '66540', '0'), +('4', '49', '11', '8408', '64010', '0'), +('4', '50', '22', '8567', '0', '0'), +('4', '50', '22', '10323', '0', '0'), +('4', '50', '22', '66166', '0', '0'), +('4', '50', '22', '10664', '0', '0'), +('4', '50', '1', '30361', '1290', '0'), +('4', '50', '1', '14568', '951', '0'), +('4', '50', '1', '14701', '624', '0'), +('4', '50', '1', '14702', '600', '0'), +('4', '50', '2', '30363', '1450', '0'), +('4', '50', '2', '10142', '1345', '0'), +('4', '50', '2', '4341', '1323', '0'), +('4', '50', '2', '3040', '1112', '0'), +('4', '50', '3', '14705', '990', '0'), +('4', '50', '3', '14706', '990', '0'), +('4', '50', '3', '11052', '906', '0'), +('4', '50', '3', '14695', '846', '0'), +('4', '50', '5', '30362', '1340', '0'), +('4', '50', '5', '14703', '1100', '0'), +('4', '50', '5', '14567', '975', '0'), +('4', '50', '5', '4501', '870', '0'), +('4', '50', '8', '11621', '8407', '0'), +('4', '50', '8', '11603', '2164', '0'), +('4', '50', '8', '11551', '1656', '0'), +('4', '50', '8', '27731', '1574', '0'), +('4', '50', '6', '1557', '5371', '0'), +('4', '50', '6', '2714', '1772', '0'), +('4', '50', '6', '3309', '554', '0'), +('4', '50', '6', '4165', '423', '0'), +('4', '50', '17', '4892', '2143', '0'), +('4', '50', '17', '11623', '2062', '0'), +('4', '50', '17', '4832', '1820', '0'), +('4', '50', '17', '4342', '1148', '0'), +('4', '50', '7', '4833', '846', '0'), +('4', '50', '7', '4411', '694', '0'), +('4', '50', '7', '71303', '555', '0'), +('4', '50', '7', '4893', '476', '0'), +('4', '50', '9', '1541', '2229', '0'), +('4', '50', '9', '12189', '1013', '0'), +('4', '50', '9', '4834', '992', '0'), +('4', '50', '9', '4894', '629', '0'), +('4', '50', '15', '14707', '1050', '0'), +('4', '50', '15', '10366', '827', '0'), +('4', '50', '15', '30360', '700', '0'), +('4', '50', '15', '14679', '610', '0'), +('4', '50', '20', '11601', '7192', '0'), +('4', '50', '20', '1365', '4200', '0'), +('4', '50', '20', '2916', '4026', '0'), +('4', '50', '20', '2471', '3248', '0'), +('4', '50', '12', '20655', '1206', '0'), +('4', '50', '12', '11624', '1193', '0'), +('4', '50', '12', '4895', '995', '0'), +('4', '50', '12', '4835', '857', '0'), +('4', '50', '18', '4896', '858', '0'), +('4', '50', '18', '4412', '694', '0'), +('4', '50', '18', '4836', '662', '0'), +('4', '50', '18', '2461', '476', '0'), +('4', '50', '19', '4837', '1459', '0'), +('4', '50', '19', '68239', '872', '0'), +('4', '50', '19', '4897', '812', '0'), +('4', '50', '19', '4407', '634', '0'), +('4', '50', '13', '27732', '47006', '0'), +('4', '50', '13', '5523', '41395', '0'), +('4', '50', '13', '11663', '38100', '0'), +('4', '50', '13', '7257', '37141', '0'), +('4', '50', '14', '27732', '47006', '0'), +('4', '50', '14', '5523', '41395', '0'), +('4', '50', '14', '7257', '37141', '0'), +('4', '50', '14', '6952', '34065', '0'), +('4', '50', '11', '45137', '88781', '0'), +('4', '50', '11', '11696', '81938', '0'), +('4', '50', '11', '8325', '68340', '0'), +('4', '50', '11', '8408', '65750', '0'), +('4', '51', '22', '8567', '0', '0'), +('4', '51', '22', '10323', '0', '0'), +('4', '51', '22', '66166', '0', '0'), +('4', '51', '22', '10664', '0', '0'), +('4', '51', '1', '30361', '1290', '0'), +('4', '51', '1', '14568', '960', '0'), +('4', '51', '1', '14701', '624', '0'), +('4', '51', '1', '14702', '600', '0'), +('4', '51', '2', '30363', '1450', '0'), +('4', '51', '2', '10142', '1345', '0'), +('4', '51', '2', '4341', '1323', '0'), +('4', '51', '2', '3040', '1112', '0'), +('4', '51', '3', '14705', '990', '0'), +('4', '51', '3', '14706', '990', '0'), +('4', '51', '3', '11052', '924', '0'), +('4', '51', '3', '14695', '854', '0'), +('4', '51', '5', '30362', '1340', '0'), +('4', '51', '5', '14703', '1100', '0'), +('4', '51', '5', '14567', '982', '0'), +('4', '51', '5', '4501', '885', '0'), +('4', '51', '8', '11621', '8407', '0'), +('4', '51', '8', '11603', '2175', '0'), +('4', '51', '8', '11551', '1656', '0'), +('4', '51', '8', '27731', '1582', '0'), +('4', '51', '6', '1557', '5371', '0'), +('4', '51', '6', '2714', '1781', '0'), +('4', '51', '6', '3309', '554', '0'), +('4', '51', '6', '4165', '423', '0'), +('4', '51', '17', '4892', '2159', '0'), +('4', '51', '17', '11623', '2062', '0'), +('4', '51', '17', '4832', '1826', '0'), +('4', '51', '17', '4342', '1160', '0'), +('4', '51', '7', '4833', '846', '0'), +('4', '51', '7', '4411', '694', '0'), +('4', '51', '7', '71303', '559', '0'), +('4', '51', '7', '4893', '476', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '51', '9', '1541', '2241', '0'), +('4', '51', '9', '12189', '1013', '0'), +('4', '51', '9', '4834', '992', '0'), +('4', '51', '9', '4894', '637', '0'), +('4', '51', '15', '14707', '1050', '0'), +('4', '51', '15', '10366', '827', '0'), +('4', '51', '15', '30360', '700', '0'), +('4', '51', '15', '14679', '610', '0'), +('4', '51', '20', '11601', '7196', '0'), +('4', '51', '20', '1365', '4200', '0'), +('4', '51', '20', '2916', '4033', '0'), +('4', '51', '20', '2471', '3248', '0'), +('4', '51', '12', '20655', '1210', '0'), +('4', '51', '12', '11624', '1196', '0'), +('4', '51', '12', '4895', '995', '0'), +('4', '51', '12', '4835', '859', '0'), +('4', '51', '18', '4896', '864', '0'), +('4', '51', '18', '4412', '694', '0'), +('4', '51', '18', '4836', '664', '0'), +('4', '51', '18', '2461', '481', '0'), +('4', '51', '19', '4837', '1465', '0'), +('4', '51', '19', '68239', '876', '0'), +('4', '51', '19', '4897', '814', '0'), +('4', '51', '19', '4407', '645', '0'), +('4', '51', '13', '27732', '48216', '0'), +('4', '51', '13', '27961', '47088', '0'), +('4', '51', '13', '5523', '42056', '0'), +('4', '51', '13', '11663', '39120', '0'), +('4', '51', '14', '27732', '48216', '0'), +('4', '51', '14', '5523', '42056', '0'), +('4', '51', '14', '7257', '38101', '0'), +('4', '51', '14', '6692', '34711', '0'), +('4', '51', '11', '45137', '92530', '0'), +('4', '51', '11', '11696', '84098', '0'), +('4', '51', '11', '8325', '70140', '0'), +('4', '51', '11', '8408', '67490', '0'), +('4', '52', '22', '8567', '0', '0'), +('4', '52', '22', '10323', '0', '0'), +('4', '52', '22', '66166', '0', '0'), +('4', '52', '22', '10664', '0', '0'), +('4', '52', '1', '30361', '1290', '0'), +('4', '52', '1', '14568', '970', '0'), +('4', '52', '1', '14701', '624', '0'), +('4', '52', '1', '14702', '600', '0'), +('4', '52', '2', '30363', '1450', '0'), +('4', '52', '2', '10142', '1345', '0'), +('4', '52', '2', '4341', '1323', '0'), +('4', '52', '2', '3040', '1112', '0'), +('4', '52', '3', '14705', '990', '0'), +('4', '52', '3', '14706', '990', '0'), +('4', '52', '3', '11052', '942', '0'), +('4', '52', '3', '14695', '863', '0'), +('4', '52', '5', '30362', '1340', '0'), +('4', '52', '5', '14703', '1100', '0'), +('4', '52', '5', '14567', '990', '0'), +('4', '52', '5', '4501', '901', '0'), +('4', '52', '8', '11621', '8407', '0'), +('4', '52', '8', '11603', '2186', '0'), +('4', '52', '8', '11551', '1656', '0'), +('4', '52', '8', '27731', '1591', '0'), +('4', '52', '6', '1557', '5371', '0'), +('4', '52', '6', '2714', '1791', '0'), +('4', '52', '6', '3309', '554', '0'), +('4', '52', '6', '4165', '423', '0'), +('4', '52', '17', '4892', '2174', '0'), +('4', '52', '17', '11623', '2062', '0'), +('4', '52', '17', '4832', '1833', '0'), +('4', '52', '17', '4342', '1172', '0'), +('4', '52', '7', '4833', '846', '0'), +('4', '52', '7', '4411', '694', '0'), +('4', '52', '7', '71303', '562', '0'), +('4', '52', '7', '4893', '476', '0'), +('4', '52', '9', '1541', '2253', '0'), +('4', '52', '9', '12189', '1013', '0'), +('4', '52', '9', '4834', '992', '0'), +('4', '52', '9', '4894', '645', '0'), +('4', '52', '15', '14707', '1050', '0'), +('4', '52', '15', '10366', '827', '0'), +('4', '52', '15', '30360', '700', '0'), +('4', '52', '15', '14679', '610', '0'), +('4', '52', '20', '11601', '7200', '0'), +('4', '52', '20', '1365', '4200', '0'), +('4', '52', '20', '2916', '4039', '0'), +('4', '52', '20', '2471', '3248', '0'), +('4', '52', '12', '20655', '1213', '0'), +('4', '52', '12', '11624', '1199', '0'), +('4', '52', '12', '4895', '995', '0'), +('4', '52', '12', '4835', '861', '0'), +('4', '52', '18', '4896', '870', '0'), +('4', '52', '18', '4412', '694', '0'), +('4', '52', '18', '4836', '666', '0'), +('4', '52', '18', '2461', '486', '0'), +('4', '52', '19', '4837', '1471', '0'), +('4', '52', '19', '68239', '880', '0'), +('4', '52', '19', '4897', '816', '0'), +('4', '52', '19', '4407', '656', '0'), +('4', '52', '13', '27732', '49426', '0'), +('4', '52', '13', '27961', '48290', '0'), +('4', '52', '13', '5523', '42718', '0'), +('4', '52', '13', '11663', '40080', '0'), +('4', '52', '14', '27732', '49426', '0'), +('4', '52', '14', '5523', '42718', '0'), +('4', '52', '14', '7257', '39061', '0'), +('4', '52', '14', '6692', '35551', '0'), +('4', '52', '11', '45137', '97480', '0'), +('4', '52', '11', '11696', '86198', '0'), +('4', '52', '11', '8325', '71940', '0'), +('4', '52', '11', '8408', '69170', '0'), +('4', '53', '22', '8567', '0', '0'), +('4', '53', '22', '10323', '0', '0'), +('4', '53', '22', '66166', '0', '0'), +('4', '53', '22', '10664', '0', '0'), +('4', '53', '1', '30361', '1290', '0'), +('4', '53', '1', '14568', '980', '0'), +('4', '53', '1', '14701', '624', '0'), +('4', '53', '1', '14702', '600', '0'), +('4', '53', '2', '30363', '1450', '0'), +('4', '53', '2', '10142', '1345', '0'), +('4', '53', '2', '4341', '1323', '0'), +('4', '53', '2', '3040', '1112', '0'), +('4', '53', '3', '14705', '990', '0'), +('4', '53', '3', '14706', '990', '0'), +('4', '53', '3', '11052', '960', '0'), +('4', '53', '3', '14695', '871', '0'), +('4', '53', '5', '30362', '1340', '0'), +('4', '53', '5', '14703', '1100', '0'), +('4', '53', '5', '14567', '998', '0'), +('4', '53', '5', '4501', '917', '0'), +('4', '53', '8', '11621', '8407', '0'), +('4', '53', '8', '11603', '2197', '0'), +('4', '53', '8', '11551', '1656', '0'), +('4', '53', '8', '27731', '1599', '0'), +('4', '53', '6', '1557', '5371', '0'), +('4', '53', '6', '2714', '1801', '0'), +('4', '53', '6', '3309', '554', '0'), +('4', '53', '6', '4165', '423', '0'), +('4', '53', '17', '4892', '2190', '0'), +('4', '53', '17', '11623', '2062', '0'), +('4', '53', '17', '4832', '1839', '0'), +('4', '53', '17', '4342', '1184', '0'), +('4', '53', '7', '4833', '846', '0'), +('4', '53', '7', '4411', '694', '0'), +('4', '53', '7', '71303', '566', '0'), +('4', '53', '7', '4893', '476', '0'), +('4', '53', '9', '1541', '2265', '0'), +('4', '53', '9', '12189', '1013', '0'), +('4', '53', '9', '4834', '992', '0'), +('4', '53', '9', '4894', '654', '0'), +('4', '53', '15', '14707', '1050', '0'), +('4', '53', '15', '10366', '827', '0'), +('4', '53', '15', '30360', '700', '0'), +('4', '53', '15', '14679', '610', '0'), +('4', '53', '20', '11601', '7204', '0'), +('4', '53', '20', '1365', '4200', '0'), +('4', '53', '20', '2916', '4045', '0'), +('4', '53', '20', '2471', '3248', '0'), +('4', '53', '12', '20655', '1216', '0'), +('4', '53', '12', '11624', '1202', '0'), +('4', '53', '12', '4895', '995', '0'), +('4', '53', '12', '4835', '863', '0'), +('4', '53', '18', '4896', '876', '0'), +('4', '53', '18', '4412', '694', '0'), +('4', '53', '18', '4836', '668', '0'), +('4', '53', '18', '2461', '491', '0'), +('4', '53', '19', '4837', '1477', '0'), +('4', '53', '19', '68239', '883', '0'), +('4', '53', '19', '4897', '818', '0'), +('4', '53', '19', '4407', '667', '0'), +('4', '53', '13', '27732', '50635', '0'), +('4', '53', '13', '27961', '49492', '0'), +('4', '53', '13', '5523', '43380', '0'), +('4', '53', '13', '11663', '41100', '0'), +('4', '53', '14', '27732', '50635', '0'), +('4', '53', '14', '5523', '43380', '0'), +('4', '53', '14', '7257', '40021', '0'), +('4', '53', '14', '6692', '36451', '0'), +('4', '53', '11', '45137', '101469', '0'), +('4', '53', '11', '11696', '88358', '0'), +('4', '53', '11', '8325', '73740', '0'), +('4', '53', '11', '8408', '70910', '0'), +('4', '54', '22', '8567', '0', '0'), +('4', '54', '22', '10323', '0', '0'), +('4', '54', '22', '66166', '0', '0'), +('4', '54', '22', '10664', '0', '0'), +('4', '54', '1', '30361', '1290', '0'), +('4', '54', '1', '14568', '989', '0'), +('4', '54', '1', '14701', '624', '0'), +('4', '54', '1', '14702', '600', '0'), +('4', '54', '2', '30363', '1450', '0'), +('4', '54', '2', '10142', '1345', '0'), +('4', '54', '2', '4341', '1323', '0'), +('4', '54', '2', '3040', '1112', '0'), +('4', '54', '3', '14705', '990', '0'), +('4', '54', '3', '14706', '990', '0'), +('4', '54', '3', '11052', '978', '0'), +('4', '54', '3', '14695', '879', '0'), +('4', '54', '5', '30362', '1340', '0'), +('4', '54', '5', '14703', '1100', '0'), +('4', '54', '5', '14567', '1005', '0'), +('4', '54', '5', '4501', '933', '0'), +('4', '54', '8', '11621', '8407', '0'), +('4', '54', '8', '11603', '2208', '0'), +('4', '54', '8', '11551', '1656', '0'), +('4', '54', '8', '27731', '1608', '0'), +('4', '54', '6', '1557', '5371', '0'), +('4', '54', '6', '2714', '1810', '0'), +('4', '54', '6', '3309', '554', '0'), +('4', '54', '6', '4165', '423', '0'), +('4', '54', '17', '4892', '2206', '0'), +('4', '54', '17', '11623', '2062', '0'), +('4', '54', '17', '4832', '1845', '0'), +('4', '54', '17', '4342', '1196', '0'), +('4', '54', '7', '4833', '846', '0'), +('4', '54', '7', '4411', '694', '0'), +('4', '54', '7', '71303', '569', '0'), +('4', '54', '7', '4893', '476', '0'), +('4', '54', '9', '1541', '2277', '0'), +('4', '54', '9', '12189', '1013', '0'), +('4', '54', '9', '4834', '992', '0'), +('4', '54', '9', '4894', '662', '0'), +('4', '54', '15', '14707', '1050', '0'), +('4', '54', '15', '10366', '827', '0'), +('4', '54', '15', '30360', '700', '0'), +('4', '54', '15', '14679', '610', '0'), +('4', '54', '20', '11601', '7209', '0'), +('4', '54', '20', '1365', '4200', '0'), +('4', '54', '20', '2916', '4051', '0'), +('4', '54', '20', '2471', '3248', '0'), +('4', '54', '12', '20655', '1219', '0'), +('4', '54', '12', '11624', '1205', '0'), +('4', '54', '12', '4895', '995', '0'), +('4', '54', '12', '4835', '865', '0'), +('4', '54', '18', '4896', '882', '0'), +('4', '54', '18', '4412', '694', '0'), +('4', '54', '18', '4836', '670', '0'), +('4', '54', '18', '2461', '495', '0'), +('4', '54', '19', '4837', '1483', '0'), +('4', '54', '19', '68239', '887', '0'), +('4', '54', '19', '4897', '820', '0'), +('4', '54', '19', '4407', '677', '0'), +('4', '54', '13', '27732', '51845', '0'), +('4', '54', '13', '27961', '50694', '0'), +('4', '54', '13', '5523', '44041', '0'), +('4', '54', '13', '11663', '42120', '0'), +('4', '54', '14', '27732', '51845', '0'), +('4', '54', '14', '5523', '44041', '0'), +('4', '54', '14', '7257', '40981', '0'), +('4', '54', '14', '6692', '37291', '0'), +('4', '54', '11', '45137', '105459', '0'), +('4', '54', '11', '11696', '90518', '0'), +('4', '54', '11', '8325', '75600', '0'), +('4', '54', '11', '8408', '72650', '0'), +('4', '55', '22', '8567', '0', '0'), +('4', '55', '22', '10323', '0', '0'), +('4', '55', '22', '66166', '0', '0'), +('4', '55', '22', '10664', '0', '0'), +('4', '55', '1', '30361', '1290', '0'), +('4', '55', '1', '14568', '999', '0'), +('4', '55', '1', '14701', '624', '0'), +('4', '55', '1', '14702', '600', '0'), +('4', '55', '2', '30363', '1450', '0'), +('4', '55', '2', '10142', '1345', '0'), +('4', '55', '2', '4341', '1323', '0'), +('4', '55', '2', '3040', '1112', '0'), +('4', '55', '3', '11052', '997', '0'), +('4', '55', '3', '14705', '990', '0'), +('4', '55', '3', '14706', '990', '0'), +('4', '55', '3', '14695', '888', '0'), +('4', '55', '5', '30362', '1340', '0'), +('4', '55', '5', '14703', '1100', '0'), +('4', '55', '5', '14567', '1013', '0'), +('4', '55', '5', '4501', '948', '0'), +('4', '55', '8', '11621', '8407', '0'), +('4', '55', '8', '11603', '2219', '0'), +('4', '55', '8', '11551', '1656', '0'), +('4', '55', '8', '27731', '1616', '0'), +('4', '55', '6', '1557', '5371', '0'), +('4', '55', '6', '2714', '1820', '0'), +('4', '55', '6', '3309', '554', '0'), +('4', '55', '6', '4165', '423', '0'), +('4', '55', '17', '4892', '2221', '0'), +('4', '55', '17', '11623', '2062', '0'), +('4', '55', '17', '4832', '1852', '0'), +('4', '55', '17', '4342', '1208', '0'), +('4', '55', '7', '4833', '846', '0'), +('4', '55', '7', '4411', '694', '0'), +('4', '55', '7', '71303', '573', '0'), +('4', '55', '7', '4893', '476', '0'), +('4', '55', '9', '1541', '2289', '0'), +('4', '55', '9', '12189', '1013', '0'), +('4', '55', '9', '4834', '992', '0'), +('4', '55', '9', '4894', '670', '0'), +('4', '55', '15', '14707', '1050', '0'), +('4', '55', '15', '10366', '827', '0'), +('4', '55', '15', '30360', '700', '0'), +('4', '55', '15', '14679', '610', '0'), +('4', '55', '20', '11601', '7213', '0'), +('4', '55', '20', '1365', '4200', '0'), +('4', '55', '20', '2916', '4057', '0'), +('4', '55', '20', '2471', '3248', '0'), +('4', '55', '12', '20655', '1223', '0'), +('4', '55', '12', '11624', '1208', '0'), +('4', '55', '12', '4895', '995', '0'), +('4', '55', '12', '4835', '868', '0'), +('4', '55', '18', '4896', '889', '0'), +('4', '55', '18', '4412', '694', '0'), +('4', '55', '18', '4836', '673', '0'), +('4', '55', '18', '2461', '500', '0'), +('4', '55', '19', '4837', '1489', '0'), +('4', '55', '19', '68239', '891', '0'), +('4', '55', '19', '4897', '822', '0'), +('4', '55', '19', '4407', '688', '0'), +('4', '55', '13', '27732', '53055', '0'), +('4', '55', '13', '27961', '51896', '0'), +('4', '55', '13', '5523', '44703', '0'), +('4', '55', '13', '11663', '43140', '0'), +('4', '55', '14', '27732', '53055', '0'), +('4', '55', '14', '5523', '44703', '0'), +('4', '55', '14', '7257', '42001', '0'), +('4', '55', '14', '6692', '38131', '0'), +('4', '55', '11', '45137', '109929', '0'), +('4', '55', '11', '11696', '92618', '0'), +('4', '55', '11', '8325', '77400', '0'), +('4', '55', '11', '8408', '74330', '0'), +('4', '56', '22', '8567', '0', '0'), +('4', '56', '22', '10323', '0', '0'), +('4', '56', '22', '66166', '0', '0'), +('4', '56', '22', '10664', '0', '0'), +('4', '56', '1', '30361', '1290', '0'), +('4', '56', '1', '14568', '1009', '0'), +('4', '56', '1', '14701', '624', '0'), +('4', '56', '1', '14702', '600', '0'), +('4', '56', '2', '30363', '1450', '0'), +('4', '56', '2', '10142', '1345', '0'), +('4', '56', '2', '4341', '1323', '0'), +('4', '56', '2', '3040', '1112', '0'), +('4', '56', '3', '11052', '1015', '0'), +('4', '56', '3', '14705', '990', '0'), +('4', '56', '3', '14706', '990', '0'), +('4', '56', '3', '14695', '896', '0'), +('4', '56', '5', '30362', '1340', '0'), +('4', '56', '5', '14703', '1100', '0'), +('4', '56', '5', '14567', '1021', '0'), +('4', '56', '5', '4501', '964', '0'), +('4', '56', '8', '11621', '8407', '0'), +('4', '56', '8', '11603', '2230', '0'), +('4', '56', '8', '11551', '1656', '0'), +('4', '56', '8', '27731', '1625', '0'), +('4', '56', '6', '1557', '5371', '0'), +('4', '56', '6', '2714', '1830', '0'), +('4', '56', '6', '3309', '554', '0'), +('4', '56', '6', '4165', '423', '0'), +('4', '56', '17', '4892', '2237', '0'), +('4', '56', '17', '11623', '2062', '0'), +('4', '56', '17', '4832', '1858', '0'), +('4', '56', '17', '4342', '1220', '0'), +('4', '56', '7', '4833', '846', '0'), +('4', '56', '7', '4411', '694', '0'), +('4', '56', '7', '71303', '577', '0'), +('4', '56', '7', '4893', '476', '0'), +('4', '56', '9', '1541', '2301', '0'), +('4', '56', '9', '12189', '1013', '0'), +('4', '56', '9', '4834', '992', '0'), +('4', '56', '9', '4894', '678', '0'), +('4', '56', '15', '14707', '1050', '0'), +('4', '56', '15', '10366', '827', '0'), +('4', '56', '15', '30360', '700', '0'), +('4', '56', '15', '14679', '610', '0'), +('4', '56', '20', '11601', '7217', '0'), +('4', '56', '20', '1365', '4200', '0'), +('4', '56', '20', '2916', '4063', '0'), +('4', '56', '20', '2471', '3248', '0'), +('4', '56', '12', '20655', '1226', '0'), +('4', '56', '12', '11624', '1211', '0'), +('4', '56', '12', '4895', '995', '0'), +('4', '56', '12', '4835', '870', '0'), +('4', '56', '18', '4896', '895', '0'), +('4', '56', '18', '4412', '694', '0'), +('4', '56', '18', '4836', '675', '0'), +('4', '56', '18', '2461', '505', '0'), +('4', '56', '19', '4837', '1495', '0'), +('4', '56', '19', '68239', '894', '0'), +('4', '56', '19', '4897', '824', '0'), +('4', '56', '19', '4407', '699', '0'), +('4', '56', '13', '27732', '54264', '0'), +('4', '56', '13', '27961', '53098', '0'), +('4', '56', '13', '5523', '45365', '0'), +('4', '56', '13', '11663', '44100', '0'), +('4', '56', '14', '27732', '54264', '0'), +('4', '56', '14', '5523', '45365', '0'), +('4', '56', '14', '7257', '42961', '0'), +('4', '56', '14', '6692', '38971', '0'), +('4', '56', '11', '45137', '114099', '0'), +('4', '56', '11', '11696', '94778', '0'), +('4', '56', '11', '8325', '79200', '0'), +('4', '56', '11', '8408', '76070', '0'), +('4', '57', '22', '8567', '0', '0'), +('4', '57', '22', '10323', '0', '0'), +('4', '57', '22', '66166', '0', '0'), +('4', '57', '22', '10664', '0', '0'), +('4', '57', '1', '30361', '1290', '0'), +('4', '57', '1', '14568', '1018', '0'), +('4', '57', '1', '14701', '624', '0'), +('4', '57', '1', '14702', '600', '0'), +('4', '57', '2', '30363', '1450', '0'), +('4', '57', '2', '10142', '1345', '0'), +('4', '57', '2', '4341', '1323', '0'), +('4', '57', '2', '3040', '1112', '0'), +('4', '57', '3', '11052', '1033', '0'), +('4', '57', '3', '14705', '990', '0'), +('4', '57', '3', '14706', '990', '0'), +('4', '57', '3', '14695', '905', '0'), +('4', '57', '5', '30362', '1340', '0'), +('4', '57', '5', '14703', '1100', '0'), +('4', '57', '5', '14567', '1029', '0'), +('4', '57', '5', '4501', '980', '0'), +('4', '57', '8', '11621', '8407', '0'), +('4', '57', '8', '11603', '2241', '0'), +('4', '57', '8', '11551', '1656', '0'), +('4', '57', '8', '27731', '1633', '0'), +('4', '57', '6', '1557', '5371', '0'), +('4', '57', '6', '2714', '1839', '0'), +('4', '57', '6', '3309', '554', '0'), +('4', '57', '6', '4165', '423', '0'), +('4', '57', '17', '4892', '2253', '0'), +('4', '57', '17', '11623', '2062', '0'), +('4', '57', '17', '4832', '1864', '0'), +('4', '57', '17', '4342', '1232', '0'), +('4', '57', '7', '4833', '846', '0'), +('4', '57', '7', '4411', '694', '0'), +('4', '57', '7', '71303', '580', '0'), +('4', '57', '7', '4893', '476', '0'), +('4', '57', '9', '1541', '2313', '0'), +('4', '57', '9', '12189', '1013', '0'), +('4', '57', '9', '4834', '992', '0'), +('4', '57', '9', '4894', '686', '0'), +('4', '57', '15', '14707', '1050', '0'), +('4', '57', '15', '10366', '827', '0'), +('4', '57', '15', '30360', '700', '0'), +('4', '57', '15', '14679', '610', '0'), +('4', '57', '20', '11601', '7221', '0'), +('4', '57', '20', '1365', '4200', '0'), +('4', '57', '20', '2916', '4069', '0'), +('4', '57', '20', '2471', '3248', '0'), +('4', '57', '12', '20655', '1229', '0'), +('4', '57', '12', '11624', '1213', '0'), +('4', '57', '12', '4895', '995', '0'), +('4', '57', '12', '4835', '872', '0'), +('4', '57', '18', '4896', '901', '0'), +('4', '57', '18', '4412', '694', '0'), +('4', '57', '18', '4836', '677', '0'), +('4', '57', '18', '2461', '510', '0'), +('4', '57', '19', '4837', '1501', '0'), +('4', '57', '19', '68239', '898', '0'), +('4', '57', '19', '4897', '826', '0'), +('4', '57', '19', '4407', '710', '0'), +('4', '57', '13', '27732', '55474', '0'), +('4', '57', '13', '27961', '54300', '0'), +('4', '57', '13', '5523', '46086', '0'), +('4', '57', '13', '11663', '45120', '0'), +('4', '57', '14', '27732', '55474', '0'), +('4', '57', '14', '5523', '46086', '0'), +('4', '57', '14', '7257', '43921', '0'), +('4', '57', '14', '6692', '39811', '0'), +('4', '57', '11', '45137', '120429', '0'), +('4', '57', '11', '11696', '96878', '0'), +('4', '57', '11', '8325', '81000', '0'), +('4', '57', '11', '8408', '77810', '0'), +('4', '58', '22', '8567', '0', '0'), +('4', '58', '22', '10323', '0', '0'), +('4', '58', '22', '66166', '0', '0'), +('4', '58', '22', '10664', '0', '0'), +('4', '58', '1', '30361', '1290', '0'), +('4', '58', '1', '14568', '1028', '0'), +('4', '58', '1', '14701', '624', '0'), +('4', '58', '1', '14702', '600', '0'), +('4', '58', '2', '30363', '1450', '0'), +('4', '58', '2', '10142', '1345', '0'), +('4', '58', '2', '4341', '1323', '0'), +('4', '58', '2', '3040', '1112', '0'), +('4', '58', '3', '11052', '1051', '0'), +('4', '58', '3', '14705', '990', '0'), +('4', '58', '3', '14706', '990', '0'), +('4', '58', '3', '14695', '913', '0'), +('4', '58', '5', '30362', '1340', '0'), +('4', '58', '5', '14703', '1100', '0'), +('4', '58', '5', '14567', '1036', '0'), +('4', '58', '5', '4501', '995', '0'), +('4', '58', '8', '11621', '8407', '0'), +('4', '58', '8', '11603', '2251', '0'), +('4', '58', '8', '11551', '1656', '0'), +('4', '58', '8', '27731', '1641', '0'), +('4', '58', '6', '1557', '5371', '0'), +('4', '58', '6', '2714', '1849', '0'), +('4', '58', '6', '3309', '554', '0'), +('4', '58', '6', '4165', '423', '0'), +('4', '58', '17', '4892', '2269', '0'), +('4', '58', '17', '11623', '2062', '0'), +('4', '58', '17', '4832', '1871', '0'), +('4', '58', '17', '4342', '1244', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '58', '7', '4833', '846', '0'), +('4', '58', '7', '4411', '694', '0'), +('4', '58', '7', '71303', '584', '0'), +('4', '58', '7', '4893', '476', '0'), +('4', '58', '9', '1541', '2325', '0'), +('4', '58', '9', '12189', '1013', '0'), +('4', '58', '9', '4834', '992', '0'), +('4', '58', '9', '4894', '694', '0'), +('4', '58', '15', '14707', '1050', '0'), +('4', '58', '15', '10366', '827', '0'), +('4', '58', '15', '30360', '700', '0'), +('4', '58', '15', '14679', '610', '0'), +('4', '58', '20', '11601', '7226', '0'), +('4', '58', '20', '1365', '4200', '0'), +('4', '58', '20', '2916', '4075', '0'), +('4', '58', '20', '2471', '3248', '0'), +('4', '58', '12', '20655', '1232', '0'), +('4', '58', '12', '11624', '1216', '0'), +('4', '58', '12', '4895', '995', '0'), +('4', '58', '12', '4835', '874', '0'), +('4', '58', '18', '4896', '907', '0'), +('4', '58', '18', '4412', '694', '0'), +('4', '58', '18', '4836', '679', '0'), +('4', '58', '18', '2461', '515', '0'), +('4', '58', '19', '4837', '1507', '0'), +('4', '58', '19', '68239', '901', '0'), +('4', '58', '19', '4897', '828', '0'), +('4', '58', '19', '4407', '721', '0'), +('4', '58', '13', '27732', '56684', '0'), +('4', '58', '13', '27961', '55503', '0'), +('4', '58', '13', '5523', '46748', '0'), +('4', '58', '13', '11663', '46140', '0'), +('4', '58', '14', '27732', '56684', '0'), +('4', '58', '14', '5523', '46748', '0'), +('4', '58', '14', '7257', '44881', '0'), +('4', '58', '14', '6692', '40651', '0'), +('4', '58', '11', '45137', '124779', '0'), +('4', '58', '11', '11696', '99038', '0'), +('4', '58', '11', '8325', '82800', '0'), +('4', '58', '11', '8408', '79490', '0'), +('4', '59', '22', '8567', '0', '0'), +('4', '59', '22', '10323', '0', '0'), +('4', '59', '22', '66166', '0', '0'), +('4', '59', '22', '10664', '0', '0'), +('4', '59', '1', '30361', '1290', '0'), +('4', '59', '1', '14568', '1038', '0'), +('4', '59', '1', '14701', '624', '0'), +('4', '59', '1', '14702', '600', '0'), +('4', '59', '2', '30363', '1450', '0'), +('4', '59', '2', '10142', '1345', '0'), +('4', '59', '2', '4341', '1323', '0'), +('4', '59', '2', '3040', '1112', '0'), +('4', '59', '3', '11052', '1069', '0'), +('4', '59', '3', '14705', '990', '0'), +('4', '59', '3', '14706', '990', '0'), +('4', '59', '3', '14695', '922', '0'), +('4', '59', '5', '30362', '1340', '0'), +('4', '59', '5', '14703', '1100', '0'), +('4', '59', '5', '14567', '1044', '0'), +('4', '59', '5', '4501', '1011', '0'), +('4', '59', '8', '11621', '8407', '0'), +('4', '59', '8', '11603', '2262', '0'), +('4', '59', '8', '11551', '1656', '0'), +('4', '59', '8', '27731', '1650', '0'), +('4', '59', '6', '1557', '5371', '0'), +('4', '59', '6', '2714', '1859', '0'), +('4', '59', '6', '3309', '554', '0'), +('4', '59', '6', '4165', '423', '0'), +('4', '59', '17', '4892', '2284', '0'), +('4', '59', '17', '11623', '2062', '0'), +('4', '59', '17', '4832', '1877', '0'), +('4', '59', '17', '4342', '1256', '0'), +('4', '59', '7', '4833', '846', '0'), +('4', '59', '7', '4411', '694', '0'), +('4', '59', '7', '71303', '587', '0'), +('4', '59', '7', '4893', '476', '0'), +('4', '59', '9', '1541', '2338', '0'), +('4', '59', '9', '12189', '1013', '0'), +('4', '59', '9', '4834', '992', '0'), +('4', '59', '9', '4894', '702', '0'), +('4', '59', '15', '14707', '1050', '0'), +('4', '59', '15', '10366', '827', '0'), +('4', '59', '15', '30360', '700', '0'), +('4', '59', '15', '14679', '610', '0'), +('4', '59', '20', '11601', '7230', '0'), +('4', '59', '20', '1365', '4200', '0'), +('4', '59', '20', '2916', '4081', '0'), +('4', '59', '20', '2471', '3248', '0'), +('4', '59', '12', '20655', '1236', '0'), +('4', '59', '12', '11624', '1219', '0'), +('4', '59', '12', '4895', '995', '0'), +('4', '59', '12', '4835', '876', '0'), +('4', '59', '18', '4896', '913', '0'), +('4', '59', '18', '4412', '694', '0'), +('4', '59', '18', '4836', '681', '0'), +('4', '59', '18', '2461', '520', '0'), +('4', '59', '19', '4837', '1513', '0'), +('4', '59', '19', '68239', '905', '0'), +('4', '59', '19', '4897', '831', '0'), +('4', '59', '19', '4407', '732', '0'), +('4', '59', '13', '27732', '57893', '0'), +('4', '59', '13', '27961', '56705', '0'), +('4', '59', '13', '5523', '47410', '0'), +('4', '59', '13', '11663', '47160', '0'), +('4', '59', '14', '27732', '57893', '0'), +('4', '59', '14', '5523', '47410', '0'), +('4', '59', '14', '7257', '45901', '0'), +('4', '59', '14', '6692', '41551', '0'), +('4', '59', '11', '45137', '129670', '0'), +('4', '59', '11', '11696', '101198', '0'), +('4', '59', '11', '8325', '84600', '0'), +('4', '59', '11', '8408', '81230', '0'), +('4', '60', '22', '21807', '0', '3'), +('4', '60', '22', '21805', '0', '3'), +('4', '60', '22', '12425', '0', '3'), +('4', '60', '22', '7867', '0', '3'), +('4', '60', '1', '7945', '9159', '3'), +('4', '60', '1', '26775', '5527', '3'), +('4', '60', '1', '28962', '4283', '3'), +('4', '60', '1', '28945', '4262', '3'), +('4', '60', '2', '2612', '8158', '3'), +('4', '60', '2', '26025', '8158', '3'), +('4', '60', '2', '28995', '4775', '3'), +('4', '60', '2', '26759', '3807', '3'), +('4', '60', '3', '26773', '6200', '3'), +('4', '60', '3', '28963', '3571', '3'), +('4', '60', '3', '31233', '3235', '3'), +('4', '60', '3', '26560', '3017', '3'), +('4', '60', '5', '28885', '11028', '3'), +('4', '60', '5', '27266', '10072', '3'), +('4', '60', '5', '8364', '7900', '3'), +('4', '60', '5', '7868', '5026', '3'), +('4', '60', '8', '26766', '11746', '3'), +('4', '60', '8', '26765', '11173', '3'), +('4', '60', '8', '31471', '10080', '3'), +('4', '60', '8', '27261', '8417', '3'), +('4', '60', '6', '28902', '13010', '3'), +('4', '60', '6', '1557', '5252', '3'), +('4', '60', '6', '30551', '5025', '3'), +('4', '60', '6', '26753', '4810', '3'), +('4', '60', '17', '27261', '8417', '3'), +('4', '60', '17', '10845', '4128', '3'), +('4', '60', '17', '28951', '3505', '3'), +('4', '60', '17', '7926', '3046', '3'), +('4', '60', '7', '26771', '8536', '3'), +('4', '60', '7', '7868', '5026', '3'), +('4', '60', '7', '5854', '4531', '3'), +('4', '60', '7', '7194', '4507', '3'), +('4', '60', '9', '31461', '9984', '3'), +('4', '60', '9', '7868', '5026', '3'), +('4', '60', '9', '26584', '4273', '3'), +('4', '60', '9', '28943', '3775', '3'), +('4', '60', '15', '27950', '7608', '3'), +('4', '60', '15', '26757', '5211', '3'), +('4', '60', '15', '26749', '4778', '3'), +('4', '60', '15', '7870', '3642', '3'), +('4', '60', '20', '28890', '10662', '3'), +('4', '60', '20', '31334', '9433', '3'), +('4', '60', '20', '27963', '9259', '3'), +('4', '60', '20', '31235', '9245', '3'), +('4', '60', '12', '25857', '11076', '3'), +('4', '60', '12', '29177', '5168', '3'), +('4', '60', '12', '2746', '4856', '3'), +('4', '60', '12', '28967', '4355', '3'), +('4', '60', '18', '26750', '3777', '3'), +('4', '60', '18', '28965', '3774', '3'), +('4', '60', '18', '28932', '3226', '3'), +('4', '60', '18', '8289', '3220', '3'), +('4', '60', '19', '30569', '11872', '3'), +('4', '60', '19', '51226', '10536', '3'), +('4', '60', '19', '28888', '10276', '3'), +('4', '60', '19', '24616', '9061', '3'), +('4', '60', '13', '1158', '100699', '3'), +('4', '60', '13', '69416', '99569', '3'), +('4', '60', '13', '1154', '96311', '3'), +('4', '60', '13', '27899', '85700', '3'), +('4', '60', '14', '1158', '100699', '3'), +('4', '60', '14', '69416', '99569', '3'), +('4', '60', '14', '1154', '96311', '3'), +('4', '60', '14', '28811', '90642', '3'), +('4', '60', '11', '30539', '179487', '3'), +('4', '60', '11', '28935', '168257', '3'), +('4', '60', '11', '31335', '167996', '3'), +('4', '60', '11', '7904', '156146', '3'), +('4', '60', '22', '66166', '0', '2'), +('4', '60', '22', '10323', '0', '2'), +('4', '60', '22', '9248', '0', '2'), +('4', '60', '22', '12425', '0', '2'), +('4', '60', '1', '2748', '1876', '2'), +('4', '60', '1', '31236', '1522', '2'), +('4', '60', '1', '10912', '1501', '2'), +('4', '60', '1', '62234', '1451', '2'), +('4', '60', '2', '2612', '8232', '2'), +('4', '60', '2', '26025', '8232', '2'), +('4', '60', '2', '29648', '3944', '2'), +('4', '60', '2', '10913', '3514', '2'), +('4', '60', '3', '31233', '3577', '2'), +('4', '60', '3', '31464', '3115', '2'), +('4', '60', '3', '31244', '3082', '2'), +('4', '60', '3', '1547', '2396', '2'), +('4', '60', '5', '27266', '10286', '2'), +('4', '60', '5', '31234', '3531', '2'), +('4', '60', '5', '31460', '3453', '2'), +('4', '60', '5', '31318', '3175', '2'), +('4', '60', '8', '31471', '10374', '2'), +('4', '60', '8', '27261', '8584', '2'), +('4', '60', '8', '11621', '8196', '2'), +('4', '60', '8', '22819', '8196', '2'), +('4', '60', '6', '1557', '5272', '2'), +('4', '60', '6', '31472', '4144', '2'), +('4', '60', '6', '31240', '2841', '2'), +('4', '60', '6', '5723', '2499', '2'), +('4', '60', '17', '27261', '8584', '2'), +('4', '60', '17', '10845', '4401', '2'), +('4', '60', '17', '27159', '3145', '2'), +('4', '60', '17', '27148', '2761', '2'), +('4', '60', '7', '5723', '2499', '2'), +('4', '60', '7', '29485', '2312', '2'), +('4', '60', '7', '31381', '1908', '2'), +('4', '60', '7', '31371', '1712', '2'), +('4', '60', '9', '31461', '10318', '2'), +('4', '60', '9', '31460', '3453', '2'), +('4', '60', '9', '5723', '2499', '2'), +('4', '60', '9', '31246', '2276', '2'), +('4', '60', '15', '31231', '3565', '2'), +('4', '60', '15', '25211', '2983', '2'), +('4', '60', '15', '62373', '1901', '2'), +('4', '60', '15', '31222', '1684', '2'), +('4', '60', '20', '31334', '9760', '2'), +('4', '60', '20', '31235', '9696', '2'), +('4', '60', '20', '31353', '9235', '2'), +('4', '60', '20', '24753', '7597', '2'), +('4', '60', '12', '25857', '11331', '2'), +('4', '60', '12', '29177', '5345', '2'), +('4', '60', '12', '2746', '4913', '2'), +('4', '60', '12', '31227', '4110', '2'), +('4', '60', '18', '31371', '1712', '2'), +('4', '60', '18', '31117', '1378', '2'), +('4', '60', '18', '31374', '1338', '2'), +('4', '60', '18', '31386', '1140', '2'), +('4', '60', '19', '24616', '9168', '2'), +('4', '60', '19', '31238', '1873', '2'), +('4', '60', '19', '29455', '1434', '2'), +('4', '60', '19', '31327', '1177', '2'), +('4', '60', '13', '1158', '100839', '2'), +('4', '60', '13', '69416', '99859', '2'), +('4', '60', '13', '1154', '96471', '2'), +('4', '60', '13', '5838', '83626', '2'), +('4', '60', '14', '1158', '100839', '2'), +('4', '60', '14', '69416', '99859', '2'), +('4', '60', '14', '1154', '96471', '2'), +('4', '60', '14', '31379', '85889', '2'), +('4', '60', '11', '31335', '146338', '2'), +('4', '60', '11', '29433', '143588', '2'), +('4', '60', '11', '27326', '143588', '2'), +('4', '60', '11', '27306', '143077', '2'), +('4', '60', '22', '8567', '0', '1'), +('4', '60', '22', '10323', '0', '1'), +('4', '60', '22', '66166', '0', '1'), +('4', '60', '22', '10664', '0', '1'), +('4', '60', '1', '10912', '1956', '1'), +('4', '60', '1', '62234', '1794', '1'), +('4', '60', '1', '30361', '1290', '1'), +('4', '60', '1', '5716', '911', '1'), +('4', '60', '2', '10913', '4683', '1'), +('4', '60', '2', '1630', '3436', '1'), +('4', '60', '2', '30363', '1450', '1'), +('4', '60', '2', '11276', '1286', '1'), +('4', '60', '3', '46184', '1463', '1'), +('4', '60', '3', '1625', '1035', '1'), +('4', '60', '3', '14705', '990', '1'), +('4', '60', '3', '14706', '990', '1'), +('4', '60', '5', '14709', '1496', '1'), +('4', '60', '5', '30362', '1340', '1'), +('4', '60', '5', '30996', '1180', '1'), +('4', '60', '5', '14703', '1100', '1'), +('4', '60', '8', '1627', '8427', '1'), +('4', '60', '8', '11621', '8302', '1'), +('4', '60', '8', '1619', '6297', '1'), +('4', '60', '8', '1628', '2744', '1'), +('4', '60', '6', '1557', '5321', '1'), +('4', '60', '6', '5723', '2609', '1'), +('4', '60', '6', '5739', '1886', '1'), +('4', '60', '6', '2714', '1349', '1'), +('4', '60', '17', '10845', '5084', '1'), +('4', '60', '17', '4892', '1562', '1'), +('4', '60', '17', '11623', '1463', '1'), +('4', '60', '17', '4537', '1123', '1'), +('4', '60', '7', '5723', '2609', '1'), +('4', '60', '7', '62046', '1399', '1'), +('4', '60', '7', '5703', '756', '1'), +('4', '60', '7', '28407', '593', '1'), +('4', '60', '9', '5723', '2609', '1'), +('4', '60', '9', '1541', '1756', '1'), +('4', '60', '9', '11584', '1044', '1'), +('4', '60', '9', '4834', '844', '1'), +('4', '60', '15', '5727', '1545', '1'), +('4', '60', '15', '5728', '1157', '1'), +('4', '60', '15', '14707', '1050', '1'), +('4', '60', '15', '62237', '962', '1'), +('4', '60', '20', '11601', '6810', '1'), +('4', '60', '20', '1620', '6410', '1'), +('4', '60', '20', '1623', '4814', '1'), +('4', '60', '20', '1365', '4200', '1'), +('4', '60', '12', '20655', '1018', '1'), +('4', '60', '12', '11624', '894', '1'), +('4', '60', '12', '2923', '829', '1'), +('4', '60', '12', '4835', '723', '1'), +('4', '60', '18', '4541', '870', '1'), +('4', '60', '18', '4317', '756', '1'), +('4', '60', '18', '4896', '690', '1'), +('4', '60', '18', '3210', '548', '1'), +('4', '60', '19', '24616', '9435', '1'), +('4', '60', '19', '4837', '1265', '1'), +('4', '60', '19', '4920', '1101', '1'), +('4', '60', '19', '68239', '745', '1'), +('4', '60', '13', '6287', '81961', '1'), +('4', '60', '13', '7207', '79725', '1'), +('4', '60', '13', '24613', '73695', '1'), +('4', '60', '13', '10821', '70635', '1'), +('4', '60', '14', '6287', '81961', '1'), +('4', '60', '14', '7207', '79725', '1'), +('4', '60', '14', '20487', '75187', '1'), +('4', '60', '14', '24613', '73695', '1'), +('4', '60', '11', '45137', '134074', '1'), +('4', '60', '11', '8407', '131598', '1'), +('4', '60', '11', '5758', '113490', '1'), +('4', '60', '11', '11696', '103143', '1'), +('4', '61', '22', '21807', '0', '3'), +('4', '61', '22', '21805', '0', '3'), +('4', '61', '22', '12425', '0', '3'), +('4', '61', '22', '7867', '0', '3'), +('4', '61', '1', '7945', '9159', '3'), +('4', '61', '1', '26775', '5527', '3'), +('4', '61', '1', '28962', '4283', '3'), +('4', '61', '1', '28945', '4262', '3'), +('4', '61', '2', '2612', '8158', '3'), +('4', '61', '2', '26025', '8158', '3'), +('4', '61', '2', '28995', '4775', '3'), +('4', '61', '2', '26759', '3807', '3'), +('4', '61', '3', '26773', '6201', '3'), +('4', '61', '3', '28963', '3571', '3'), +('4', '61', '3', '31233', '3235', '3'), +('4', '61', '3', '26560', '3017', '3'), +('4', '61', '5', '28885', '11028', '3'), +('4', '61', '5', '27266', '10072', '3'), +('4', '61', '5', '8364', '7900', '3'), +('4', '61', '5', '7868', '5026', '3'), +('4', '61', '8', '26766', '11746', '3'), +('4', '61', '8', '26765', '11173', '3'), +('4', '61', '8', '31471', '10080', '3'), +('4', '61', '8', '27261', '8417', '3'), +('4', '61', '6', '28902', '13010', '3'), +('4', '61', '6', '1557', '5252', '3'), +('4', '61', '6', '30551', '5025', '3'), +('4', '61', '6', '26753', '4810', '3'), +('4', '61', '17', '27261', '8417', '3'), +('4', '61', '17', '10845', '4128', '3'), +('4', '61', '17', '28951', '3505', '3'), +('4', '61', '17', '7926', '3047', '3'), +('4', '61', '7', '26771', '8536', '3'), +('4', '61', '7', '7868', '5026', '3'), +('4', '61', '7', '5854', '4532', '3'), +('4', '61', '7', '7194', '4507', '3'), +('4', '61', '9', '31461', '9984', '3'), +('4', '61', '9', '7868', '5026', '3'), +('4', '61', '9', '26584', '4273', '3'), +('4', '61', '9', '28943', '3775', '3'), +('4', '61', '15', '27950', '7608', '3'), +('4', '61', '15', '26757', '5211', '3'), +('4', '61', '15', '26749', '4779', '3'), +('4', '61', '15', '7870', '3642', '3'), +('4', '61', '20', '28890', '10662', '3'), +('4', '61', '20', '31334', '9433', '3'), +('4', '61', '20', '27963', '9259', '3'), +('4', '61', '20', '31235', '9246', '3'), +('4', '61', '12', '25857', '11076', '3'), +('4', '61', '12', '29177', '5168', '3'), +('4', '61', '12', '2746', '4856', '3'), +('4', '61', '12', '28967', '4355', '3'), +('4', '61', '18', '26750', '3778', '3'), +('4', '61', '18', '28965', '3774', '3'), +('4', '61', '18', '28932', '3227', '3'), +('4', '61', '18', '8289', '3220', '3'), +('4', '61', '19', '30569', '11872', '3'), +('4', '61', '19', '51226', '10536', '3'), +('4', '61', '19', '28888', '10276', '3'), +('4', '61', '19', '24616', '9061', '3'), +('4', '61', '13', '1158', '101214', '3'), +('4', '61', '13', '69416', '99749', '3'), +('4', '61', '13', '1154', '96844', '3'), +('4', '61', '13', '27899', '86000', '3'), +('4', '61', '14', '1158', '101214', '3'), +('4', '61', '14', '69416', '99749', '3'), +('4', '61', '14', '1154', '96844', '3'), +('4', '61', '14', '28811', '90942', '3'), +('4', '61', '11', '30539', '179945', '3'), +('4', '61', '11', '28935', '168722', '3'), +('4', '61', '11', '31335', '168296', '3'), +('4', '61', '11', '7904', '156446', '3'), +('4', '62', '22', '21807', '0', '3'), +('4', '62', '22', '21805', '0', '3'), +('4', '62', '22', '12425', '0', '3'), +('4', '62', '22', '7867', '0', '3'), +('4', '62', '1', '7945', '9159', '3'), +('4', '62', '1', '26775', '5527', '3'), +('4', '62', '1', '28962', '4283', '3'), +('4', '62', '1', '28945', '4263', '3'), +('4', '62', '2', '2612', '8158', '3'), +('4', '62', '2', '26025', '8158', '3'), +('4', '62', '2', '28995', '4776', '3'), +('4', '62', '2', '26759', '3807', '3'), +('4', '62', '3', '26773', '6201', '3'), +('4', '62', '3', '28963', '3571', '3'), +('4', '62', '3', '31233', '3235', '3'), +('4', '62', '3', '26560', '3017', '3'), +('4', '62', '5', '28885', '11028', '3'), +('4', '62', '5', '27266', '10072', '3'), +('4', '62', '5', '8364', '7901', '3'), +('4', '62', '5', '7868', '5026', '3'), +('4', '62', '8', '26766', '11747', '3'), +('4', '62', '8', '26765', '11174', '3'), +('4', '62', '8', '31471', '10080', '3'), +('4', '62', '8', '27261', '8417', '3'), +('4', '62', '6', '28902', '13010', '3'), +('4', '62', '6', '1557', '5252', '3'), +('4', '62', '6', '30551', '5025', '3'), +('4', '62', '6', '26753', '4810', '3'), +('4', '62', '17', '27261', '8417', '3'), +('4', '62', '17', '10845', '4128', '3'), +('4', '62', '17', '28951', '3505', '3'), +('4', '62', '17', '7926', '3047', '3'), +('4', '62', '7', '26771', '8536', '3'), +('4', '62', '7', '7868', '5026', '3'), +('4', '62', '7', '5854', '4532', '3'), +('4', '62', '7', '7194', '4507', '3'), +('4', '62', '9', '31461', '9984', '3'), +('4', '62', '9', '7868', '5026', '3'), +('4', '62', '9', '26584', '4273', '3'), +('4', '62', '9', '28943', '3775', '3'), +('4', '62', '15', '27950', '7608', '3'), +('4', '62', '15', '26757', '5211', '3'), +('4', '62', '15', '26749', '4779', '3'), +('4', '62', '15', '7870', '3642', '3'), +('4', '62', '20', '28890', '10662', '3'), +('4', '62', '20', '31334', '9434', '3'), +('4', '62', '20', '27963', '9259', '3'), +('4', '62', '20', '31235', '9246', '3'), +('4', '62', '12', '25857', '11076', '3'), +('4', '62', '12', '29177', '5168', '3'), +('4', '62', '12', '2746', '4856', '3'), +('4', '62', '12', '28967', '4355', '3'), +('4', '62', '18', '26750', '3778', '3'), +('4', '62', '18', '28965', '3775', '3'), +('4', '62', '18', '28932', '3227', '3'), +('4', '62', '18', '8289', '3220', '3'), +('4', '62', '19', '30569', '11872', '3'), +('4', '62', '19', '51226', '10536', '3'), +('4', '62', '19', '28888', '10276', '3'), +('4', '62', '19', '24616', '9061', '3'), +('4', '62', '13', '1158', '101788', '3'), +('4', '62', '13', '69416', '99930', '3'), +('4', '62', '13', '1154', '97376', '3'), +('4', '62', '13', '27899', '86360', '3'), +('4', '62', '14', '1158', '101788', '3'), +('4', '62', '14', '69416', '99930', '3'), +('4', '62', '14', '1154', '97376', '3'), +('4', '62', '14', '28811', '91302', '3'), +('4', '62', '11', '30539', '180462', '3'), +('4', '62', '11', '28935', '169188', '3'), +('4', '62', '11', '31335', '168656', '3'), +('4', '62', '11', '7904', '156746', '3'), +('4', '63', '22', '21807', '0', '3'), +('4', '63', '22', '21805', '0', '3'), +('4', '63', '22', '12425', '0', '3'), +('4', '63', '22', '7867', '0', '3'), +('4', '63', '1', '7945', '9159', '3'), +('4', '63', '1', '26775', '5527', '3'), +('4', '63', '1', '28962', '4283', '3'), +('4', '63', '1', '28945', '4263', '3'), +('4', '63', '2', '2612', '8158', '3'), +('4', '63', '2', '26025', '8158', '3'), +('4', '63', '2', '28995', '4776', '3'), +('4', '63', '2', '26759', '3807', '3'), +('4', '63', '3', '26773', '6201', '3'), +('4', '63', '3', '28963', '3572', '3'), +('4', '63', '3', '31233', '3235', '3'), +('4', '63', '3', '26560', '3018', '3'), +('4', '63', '5', '28885', '11029', '3'), +('4', '63', '5', '27266', '10072', '3'), +('4', '63', '5', '8364', '7901', '3'), +('4', '63', '5', '7868', '5027', '3'), +('4', '63', '8', '26766', '11747', '3'), +('4', '63', '8', '26765', '11174', '3'), +('4', '63', '8', '31471', '10080', '3'), +('4', '63', '8', '27261', '8418', '3'), +('4', '63', '6', '28902', '13010', '3'), +('4', '63', '6', '1557', '5252', '3'), +('4', '63', '6', '30551', '5025', '3'), +('4', '63', '6', '26753', '4810', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '63', '17', '27261', '8418', '3'), +('4', '63', '17', '10845', '4129', '3'), +('4', '63', '17', '28951', '3505', '3'), +('4', '63', '17', '7926', '3048', '3'), +('4', '63', '7', '26771', '8537', '3'), +('4', '63', '7', '7868', '5027', '3'), +('4', '63', '7', '5854', '4532', '3'), +('4', '63', '7', '7194', '4507', '3'), +('4', '63', '9', '31461', '9985', '3'), +('4', '63', '9', '7868', '5027', '3'), +('4', '63', '9', '26584', '4274', '3'), +('4', '63', '9', '28943', '3775', '3'), +('4', '63', '15', '27950', '7608', '3'), +('4', '63', '15', '26757', '5211', '3'), +('4', '63', '15', '26749', '4779', '3'), +('4', '63', '15', '7870', '3642', '3'), +('4', '63', '20', '28890', '10662', '3'), +('4', '63', '20', '31334', '9434', '3'), +('4', '63', '20', '27963', '9259', '3'), +('4', '63', '20', '31235', '9246', '3'), +('4', '63', '12', '25857', '11076', '3'), +('4', '63', '12', '29177', '5168', '3'), +('4', '63', '12', '2746', '4856', '3'), +('4', '63', '12', '28967', '4355', '3'), +('4', '63', '18', '26750', '3778', '3'), +('4', '63', '18', '28965', '3775', '3'), +('4', '63', '18', '28932', '3227', '3'), +('4', '63', '18', '8289', '3220', '3'), +('4', '63', '19', '30569', '11872', '3'), +('4', '63', '19', '51226', '10536', '3'), +('4', '63', '19', '28888', '10277', '3'), +('4', '63', '19', '24616', '9061', '3'), +('4', '63', '13', '1158', '102303', '3'), +('4', '63', '13', '69416', '100110', '3'), +('4', '63', '13', '1154', '97909', '3'), +('4', '63', '13', '27899', '86660', '3'), +('4', '63', '14', '1158', '102303', '3'), +('4', '63', '14', '69416', '100110', '3'), +('4', '63', '14', '1154', '97909', '3'), +('4', '63', '14', '28811', '91602', '3'), +('4', '63', '11', '30539', '180920', '3'), +('4', '63', '11', '28935', '169653', '3'), +('4', '63', '11', '31335', '168956', '3'), +('4', '63', '11', '7904', '157046', '3'), +('4', '64', '22', '21807', '0', '3'), +('4', '64', '22', '21805', '0', '3'), +('4', '64', '22', '12425', '0', '3'), +('4', '64', '22', '7867', '0', '3'), +('4', '64', '1', '7945', '9160', '3'), +('4', '64', '1', '26775', '5527', '3'), +('4', '64', '1', '28962', '4284', '3'), +('4', '64', '1', '28945', '4263', '3'), +('4', '64', '2', '2612', '8158', '3'), +('4', '64', '2', '26025', '8158', '3'), +('4', '64', '2', '28995', '4776', '3'), +('4', '64', '2', '26759', '3807', '3'), +('4', '64', '3', '26773', '6202', '3'), +('4', '64', '3', '28963', '3572', '3'), +('4', '64', '3', '31233', '3236', '3'), +('4', '64', '3', '26560', '3018', '3'), +('4', '64', '5', '28885', '11029', '3'), +('4', '64', '5', '27266', '10072', '3'), +('4', '64', '5', '8364', '7902', '3'), +('4', '64', '5', '7868', '5027', '3'), +('4', '64', '8', '26766', '11748', '3'), +('4', '64', '8', '26765', '11174', '3'), +('4', '64', '8', '31471', '10080', '3'), +('4', '64', '8', '27261', '8418', '3'), +('4', '64', '6', '28902', '13010', '3'), +('4', '64', '6', '1557', '5252', '3'), +('4', '64', '6', '30551', '5025', '3'), +('4', '64', '6', '26753', '4810', '3'), +('4', '64', '17', '27261', '8418', '3'), +('4', '64', '17', '10845', '4129', '3'), +('4', '64', '17', '28951', '3505', '3'), +('4', '64', '17', '7926', '3048', '3'), +('4', '64', '7', '26771', '8537', '3'), +('4', '64', '7', '7868', '5027', '3'), +('4', '64', '7', '5854', '4532', '3'), +('4', '64', '7', '7194', '4507', '3'), +('4', '64', '9', '31461', '9985', '3'), +('4', '64', '9', '7868', '5027', '3'), +('4', '64', '9', '26584', '4274', '3'), +('4', '64', '9', '28943', '3776', '3'), +('4', '64', '15', '27950', '7608', '3'), +('4', '64', '15', '26757', '5211', '3'), +('4', '64', '15', '26749', '4780', '3'), +('4', '64', '15', '7870', '3642', '3'), +('4', '64', '20', '28890', '10662', '3'), +('4', '64', '20', '31334', '9434', '3'), +('4', '64', '20', '27963', '9260', '3'), +('4', '64', '20', '31235', '9246', '3'), +('4', '64', '12', '25857', '11077', '3'), +('4', '64', '12', '29177', '5168', '3'), +('4', '64', '12', '2746', '4856', '3'), +('4', '64', '12', '28967', '4355', '3'), +('4', '64', '18', '26750', '3778', '3'), +('4', '64', '18', '28965', '3775', '3'), +('4', '64', '18', '28932', '3228', '3'), +('4', '64', '18', '8289', '3220', '3'), +('4', '64', '19', '30569', '11872', '3'), +('4', '64', '19', '51226', '10537', '3'), +('4', '64', '19', '28888', '10277', '3'), +('4', '64', '19', '24616', '9061', '3'), +('4', '64', '13', '1158', '102877', '3'), +('4', '64', '13', '69416', '100290', '3'), +('4', '64', '13', '1154', '98441', '3'), +('4', '64', '13', '27899', '87021', '3'), +('4', '64', '14', '1158', '102877', '3'), +('4', '64', '14', '69416', '100290', '3'), +('4', '64', '14', '1154', '98441', '3'), +('4', '64', '14', '28811', '91963', '3'), +('4', '64', '11', '30539', '181437', '3'), +('4', '64', '11', '28935', '170118', '3'), +('4', '64', '11', '31335', '169316', '3'), +('4', '64', '11', '45137', '158104', '3'), +('4', '65', '22', '21807', '0', '7'), +('4', '65', '22', '21805', '0', '7'), +('4', '65', '22', '61948', '0', '7'), +('4', '65', '22', '12425', '0', '7'), +('4', '65', '1', '68949', '17618', '7'), +('4', '65', '1', '7125', '15280', '7'), +('4', '65', '1', '32106', '12909', '7'), +('4', '65', '1', '69166', '12362', '7'), +('4', '65', '2', '28605', '15305', '7'), +('4', '65', '2', '28648', '15286', '7'), +('4', '65', '2', '2612', '8158', '7'), +('4', '65', '2', '26025', '8158', '7'), +('4', '65', '3', '69157', '10773', '7'), +('4', '65', '3', '68753', '10057', '7'), +('4', '65', '3', '69069', '10007', '7'), +('4', '65', '3', '68752', '9551', '7'), +('4', '65', '5', '68808', '12116', '7'), +('4', '65', '5', '7769', '11937', '7'), +('4', '65', '5', '67625', '11334', '7'), +('4', '65', '5', '28885', '11029', '7'), +('4', '65', '8', '69064', '20574', '7'), +('4', '65', '8', '69165', '20464', '7'), +('4', '65', '8', '69072', '17195', '7'), +('4', '65', '8', '26766', '11748', '7'), +('4', '65', '6', '68757', '18889', '7'), +('4', '65', '6', '13674', '14629', '7'), +('4', '65', '6', '28902', '13010', '7'), +('4', '65', '6', '19144', '12034', '7'), +('4', '65', '17', '69151', '13848', '7'), +('4', '65', '17', '68780', '10251', '7'), +('4', '65', '17', '27261', '8418', '7'), +('4', '65', '17', '14961', '8383', '7'), +('4', '65', '7', '68706', '15339', '7'), +('4', '65', '7', '16097', '12459', '7'), +('4', '65', '7', '69080', '9441', '7'), +('4', '65', '7', '68881', '9041', '7'), +('4', '65', '9', '68766', '13583', '7'), +('4', '65', '9', '11096', '12625', '7'), +('4', '65', '9', '16097', '12459', '7'), +('4', '65', '9', '69127', '11012', '7'), +('4', '65', '15', '9959', '12216', '7'), +('4', '65', '15', '68111', '11849', '7'), +('4', '65', '15', '69160', '11156', '7'), +('4', '65', '15', '69070', '10861', '7'), +('4', '65', '20', '16156', '19085', '7'), +('4', '65', '20', '69134', '13519', '7'), +('4', '65', '20', '16097', '12459', '7'), +('4', '65', '20', '15873', '11940', '7'), +('4', '65', '12', '25857', '11077', '7'), +('4', '65', '12', '28246', '9180', '7'), +('4', '65', '12', '69253', '8700', '7'), +('4', '65', '12', '27000', '8072', '7'), +('4', '65', '18', '69147', '12837', '7'), +('4', '65', '18', '68749', '9392', '7'), +('4', '65', '18', '16777', '9261', '7'), +('4', '65', '18', '68973', '8758', '7'), +('4', '65', '19', '19094', '12150', '7'), +('4', '65', '19', '30569', '11872', '7'), +('4', '65', '19', '51226', '10537', '7'), +('4', '65', '19', '28888', '10277', '7'), +('4', '65', '13', '69052', '190863', '7'), +('4', '65', '13', '69116', '159509', '7'), +('4', '65', '13', '22998', '154564', '7'), +('4', '65', '13', '69040', '145320', '7'), +('4', '65', '14', '69052', '190863', '7'), +('4', '65', '14', '69116', '159509', '7'), +('4', '65', '14', '22998', '154564', '7'), +('4', '65', '14', '69040', '145320', '7'), +('4', '65', '11', '69054', '208174', '7'), +('4', '65', '11', '27989', '193735', '7'), +('4', '65', '11', '29598', '190037', '7'), +('4', '65', '11', '29596', '186791', '7'), +('4', '65', '22', '21807', '0', '6'), +('4', '65', '22', '21805', '0', '6'), +('4', '65', '22', '61948', '0', '6'), +('4', '65', '22', '12425', '0', '6'), +('4', '65', '1', '7125', '15280', '6'), +('4', '65', '1', '32106', '12909', '6'), +('4', '65', '1', '7945', '9160', '6'), +('4', '65', '1', '16255', '8080', '6'), +('4', '65', '2', '28605', '15305', '6'), +('4', '65', '2', '28648', '15286', '6'), +('4', '65', '2', '2612', '8158', '6'), +('4', '65', '2', '26025', '8158', '6'), +('4', '65', '3', '26982', '9508', '6'), +('4', '65', '3', '29174', '7805', '6'), +('4', '65', '3', '12592', '7607', '6'), +('4', '65', '3', '9480', '6942', '6'), +('4', '65', '5', '7769', '11937', '6'), +('4', '65', '5', '28885', '11029', '6'), +('4', '65', '5', '8785', '10106', '6'), +('4', '65', '5', '27266', '10073', '6'), +('4', '65', '8', '26766', '11748', '6'), +('4', '65', '8', '26765', '11174', '6'), +('4', '65', '8', '15803', '11109', '6'), +('4', '65', '8', '31471', '10080', '6'), +('4', '65', '6', '13674', '14629', '6'), +('4', '65', '6', '28902', '13010', '6'), +('4', '65', '6', '19144', '12034', '6'), +('4', '65', '6', '71006', '10638', '6'), +('4', '65', '17', '27261', '8418', '6'), +('4', '65', '17', '14961', '8383', '6'), +('4', '65', '17', '47647', '7215', '6'), +('4', '65', '17', '69403', '6906', '6'), +('4', '65', '7', '16097', '12459', '6'), +('4', '65', '7', '26771', '8537', '6'), +('4', '65', '7', '68197', '8105', '6'), +('4', '65', '7', '11447', '7110', '6'), +('4', '65', '9', '11096', '12625', '6'), +('4', '65', '9', '16097', '12459', '6'), +('4', '65', '9', '31461', '9985', '6'), +('4', '65', '9', '28666', '8160', '6'), +('4', '65', '15', '9959', '12216', '6'), +('4', '65', '15', '68111', '11849', '6'), +('4', '65', '15', '69389', '7819', '6'), +('4', '65', '15', '27950', '7608', '6'), +('4', '65', '20', '16156', '19085', '6'), +('4', '65', '20', '16097', '12459', '6'), +('4', '65', '20', '15873', '11940', '6'), +('4', '65', '20', '28890', '10662', '6'), +('4', '65', '12', '25857', '11077', '6'), +('4', '65', '12', '28246', '9180', '6'), +('4', '65', '12', '27000', '8072', '6'), +('4', '65', '12', '12816', '7286', '6'), +('4', '65', '18', '16777', '9261', '6'), +('4', '65', '18', '28651', '8299', '6'), +('4', '65', '18', '26750', '3778', '6'), +('4', '65', '18', '28965', '3775', '6'), +('4', '65', '19', '19094', '12150', '6'), +('4', '65', '19', '30569', '11872', '6'), +('4', '65', '19', '51226', '10537', '6'), +('4', '65', '19', '28888', '10277', '6'), +('4', '65', '13', '22998', '154564', '6'), +('4', '65', '13', '22986', '120373', '6'), +('4', '65', '13', '26220', '113752', '6'), +('4', '65', '13', '22894', '111842', '6'), +('4', '65', '14', '22998', '154564', '6'), +('4', '65', '14', '22986', '120373', '6'), +('4', '65', '14', '26220', '113752', '6'), +('4', '65', '14', '22894', '111842', '6'), +('4', '65', '11', '27989', '193735', '6'), +('4', '65', '11', '29598', '190037', '6'), +('4', '65', '11', '29596', '186791', '6'), +('4', '65', '11', '27818', '185353', '6'), +('4', '65', '22', '21805', '0', '5'), +('4', '65', '22', '61948', '0', '5'), +('4', '65', '22', '66397', '0', '5'), +('4', '65', '22', '21807', '0', '5'), +('4', '65', '1', '7125', '15280', '5'), +('4', '65', '1', '32106', '12909', '5'), +('4', '65', '1', '7945', '9160', '5'), +('4', '65', '1', '16255', '8080', '5'), +('4', '65', '2', '28605', '15305', '5'), +('4', '65', '2', '28648', '15286', '5'), +('4', '65', '2', '2612', '8158', '5'), +('4', '65', '2', '26025', '8158', '5'), +('4', '65', '3', '26982', '9508', '5'), +('4', '65', '3', '29174', '7805', '5'), +('4', '65', '3', '12592', '7607', '5'), +('4', '65', '3', '9480', '6942', '5'), +('4', '65', '5', '7769', '11937', '5'), +('4', '65', '5', '28885', '11029', '5'), +('4', '65', '5', '8785', '10106', '5'), +('4', '65', '5', '27266', '10073', '5'), +('4', '65', '8', '26766', '11748', '5'), +('4', '65', '8', '26765', '11174', '5'), +('4', '65', '8', '15803', '11109', '5'), +('4', '65', '8', '31471', '10080', '5'), +('4', '65', '6', '13674', '14629', '5'), +('4', '65', '6', '28902', '13010', '5'), +('4', '65', '6', '19144', '12034', '5'), +('4', '65', '6', '71006', '10638', '5'), +('4', '65', '17', '27261', '8418', '5'), +('4', '65', '17', '14961', '8383', '5'), +('4', '65', '17', '47647', '7215', '5'), +('4', '65', '17', '14962', '4290', '5'), +('4', '65', '7', '16097', '12459', '5'), +('4', '65', '7', '26771', '8537', '5'), +('4', '65', '7', '68197', '8105', '5'), +('4', '65', '7', '11447', '7110', '5'), +('4', '65', '9', '11096', '12625', '5'), +('4', '65', '9', '16097', '12459', '5'), +('4', '65', '9', '31461', '9985', '5'), +('4', '65', '9', '28666', '8160', '5'), +('4', '65', '15', '9959', '12216', '5'), +('4', '65', '15', '69389', '7819', '5'), +('4', '65', '15', '27950', '7608', '5'), +('4', '65', '15', '26989', '6973', '5'), +('4', '65', '20', '16156', '19085', '5'), +('4', '65', '20', '16097', '12459', '5'), +('4', '65', '20', '15873', '11940', '5'), +('4', '65', '20', '28890', '10662', '5'), +('4', '65', '12', '25857', '11077', '5'), +('4', '65', '12', '28246', '9180', '5'), +('4', '65', '12', '27000', '8072', '5'), +('4', '65', '12', '12816', '7286', '5'), +('4', '65', '18', '16777', '9261', '5'), +('4', '65', '18', '28651', '8299', '5'), +('4', '65', '18', '26750', '3778', '5'), +('4', '65', '18', '28965', '3775', '5'), +('4', '65', '19', '19094', '12150', '5'), +('4', '65', '19', '30569', '11872', '5'), +('4', '65', '19', '51226', '10537', '5'), +('4', '65', '19', '28888', '10277', '5'), +('4', '65', '13', '22998', '154564', '5'), +('4', '65', '13', '22986', '120373', '5'), +('4', '65', '13', '26220', '113752', '5'), +('4', '65', '13', '22894', '111842', '5'), +('4', '65', '14', '22998', '154564', '5'), +('4', '65', '14', '22986', '120373', '5'), +('4', '65', '14', '26220', '113752', '5'), +('4', '65', '14', '22894', '111842', '5'), +('4', '65', '11', '27989', '193735', '5'), +('4', '65', '11', '29598', '190037', '5'), +('4', '65', '11', '29596', '186791', '5'), +('4', '65', '11', '27818', '185353', '5'), +('4', '65', '22', '21805', '0', '4'), +('4', '65', '22', '61948', '0', '4'), +('4', '65', '22', '66397', '0', '4'), +('4', '65', '22', '21807', '0', '4'), +('4', '65', '1', '7125', '15280', '4'), +('4', '65', '1', '32106', '12909', '4'), +('4', '65', '1', '7945', '9160', '4'), +('4', '65', '1', '16255', '8080', '4'), +('4', '65', '2', '28605', '15305', '4'), +('4', '65', '2', '28648', '15286', '4'), +('4', '65', '2', '26025', '8158', '4'), +('4', '65', '2', '2612', '8158', '4'), +('4', '65', '3', '26982', '9508', '4'), +('4', '65', '3', '29174', '7805', '4'), +('4', '65', '3', '12592', '7607', '4'), +('4', '65', '3', '9480', '6942', '4'), +('4', '65', '5', '7769', '11937', '4'), +('4', '65', '5', '28885', '11029', '4'), +('4', '65', '5', '8785', '10106', '4'), +('4', '65', '5', '27266', '10073', '4'), +('4', '65', '8', '26766', '11748', '4'), +('4', '65', '8', '26765', '11174', '4'), +('4', '65', '8', '15803', '11109', '4'), +('4', '65', '8', '31471', '10080', '4'), +('4', '65', '6', '13674', '14629', '4'), +('4', '65', '6', '28902', '13010', '4'), +('4', '65', '6', '19144', '12034', '4'), +('4', '65', '6', '71006', '10638', '4'), +('4', '65', '17', '27261', '8418', '4'), +('4', '65', '17', '14961', '8383', '4'), +('4', '65', '17', '47647', '7215', '4'), +('4', '65', '17', '14962', '4290', '4'), +('4', '65', '7', '16097', '12459', '4'), +('4', '65', '7', '26771', '8537', '4'), +('4', '65', '7', '68197', '8105', '4'), +('4', '65', '7', '11447', '7110', '4'), +('4', '65', '9', '11096', '12625', '4'), +('4', '65', '9', '16097', '12459', '4'), +('4', '65', '9', '31461', '9985', '4'), +('4', '65', '9', '28666', '8160', '4'), +('4', '65', '15', '9959', '12216', '4'), +('4', '65', '15', '69389', '7819', '4'), +('4', '65', '15', '27950', '7608', '4'), +('4', '65', '15', '26989', '6973', '4'), +('4', '65', '20', '16156', '19085', '4'), +('4', '65', '20', '16097', '12459', '4'), +('4', '65', '20', '15873', '11940', '4'), +('4', '65', '20', '28890', '10662', '4'), +('4', '65', '12', '25857', '11077', '4'), +('4', '65', '12', '28246', '9180', '4'), +('4', '65', '12', '27000', '8072', '4'), +('4', '65', '12', '12816', '7286', '4'), +('4', '65', '18', '16777', '9261', '4'), +('4', '65', '18', '28651', '8299', '4'), +('4', '65', '18', '26750', '3778', '4'), +('4', '65', '18', '28965', '3775', '4'), +('4', '65', '19', '19094', '12150', '4'), +('4', '65', '19', '30569', '11872', '4'), +('4', '65', '19', '51226', '10537', '4'), +('4', '65', '19', '28888', '10277', '4'), +('4', '65', '13', '22998', '154564', '4'), +('4', '65', '13', '22986', '120373', '4'), +('4', '65', '13', '26220', '113752', '4'), +('4', '65', '13', '22894', '111842', '4'), +('4', '65', '14', '22998', '154564', '4'), +('4', '65', '14', '22986', '120373', '4'), +('4', '65', '14', '26220', '113752', '4'), +('4', '65', '14', '22894', '111842', '4'), +('4', '65', '11', '27989', '193735', '4'), +('4', '65', '11', '29598', '190037', '4'), +('4', '65', '11', '29596', '186791', '4'), +('4', '65', '11', '27818', '185353', '4'), +('4', '66', '22', '21807', '0', '7'), +('4', '66', '22', '21805', '0', '7'), +('4', '66', '22', '61948', '0', '7'), +('4', '66', '22', '12425', '0', '7'), +('4', '66', '1', '68949', '17619', '7'), +('4', '66', '1', '7125', '15280', '7'), +('4', '66', '1', '32106', '12910', '7'), +('4', '66', '1', '69166', '12363', '7'), +('4', '66', '2', '28605', '15306', '7'), +('4', '66', '2', '28648', '15287', '7'), +('4', '66', '2', '2612', '8158', '7'), +('4', '66', '2', '26025', '8158', '7'), +('4', '66', '3', '69157', '10773', '7'), +('4', '66', '3', '68753', '10058', '7'), +('4', '66', '3', '69069', '10007', '7'), +('4', '66', '3', '68752', '9552', '7'), +('4', '66', '5', '68808', '12117', '7'), +('4', '66', '5', '7769', '11937', '7'), +('4', '66', '5', '67625', '11334', '7'), +('4', '66', '5', '28885', '11029', '7'), +('4', '66', '8', '69064', '20575', '7'), +('4', '66', '8', '69165', '20464', '7'), +('4', '66', '8', '69072', '17196', '7'), +('4', '66', '8', '26766', '11748', '7'), +('4', '66', '6', '68757', '18890', '7'), +('4', '66', '6', '13674', '14630', '7'), +('4', '66', '6', '28902', '13010', '7'), +('4', '66', '6', '19144', '12034', '7'), +('4', '66', '17', '69151', '13848', '7'), +('4', '66', '17', '68780', '10251', '7'), +('4', '66', '17', '27261', '8418', '7'), +('4', '66', '17', '14961', '8384', '7'), +('4', '66', '7', '68706', '15339', '7'), +('4', '66', '7', '16097', '12459', '7'), +('4', '66', '7', '69080', '9442', '7'), +('4', '66', '7', '68881', '9042', '7'), +('4', '66', '9', '68766', '13583', '7'), +('4', '66', '9', '11096', '12626', '7'), +('4', '66', '9', '16097', '12459', '7'), +('4', '66', '9', '69127', '11013', '7'), +('4', '66', '15', '9959', '12216', '7'), +('4', '66', '15', '68111', '11849', '7'), +('4', '66', '15', '69160', '11156', '7'), +('4', '66', '15', '69070', '10861', '7'), +('4', '66', '20', '16156', '19085', '7'), +('4', '66', '20', '69134', '13520', '7'), +('4', '66', '20', '16097', '12459', '7'), +('4', '66', '20', '15873', '11940', '7'), +('4', '66', '12', '25857', '11077', '7'), +('4', '66', '12', '28246', '9181', '7'), +('4', '66', '12', '69253', '8700', '7'), +('4', '66', '12', '27000', '8072', '7'), +('4', '66', '18', '69147', '12838', '7'), +('4', '66', '18', '68749', '9393', '7'), +('4', '66', '18', '16777', '9262', '7'), +('4', '66', '18', '68973', '8759', '7'), +('4', '66', '19', '19094', '12150', '7'), +('4', '66', '19', '30569', '11872', '7'), +('4', '66', '19', '51226', '10537', '7'), +('4', '66', '19', '28888', '10277', '7'), +('4', '66', '13', '69052', '192168', '7'), +('4', '66', '13', '69116', '159937', '7'), +('4', '66', '13', '22998', '155701', '7'), +('4', '66', '13', '69040', '145861', '7'), +('4', '66', '14', '69052', '192168', '7'), +('4', '66', '14', '69116', '159937', '7'), +('4', '66', '14', '22998', '155701', '7'), +('4', '66', '14', '69040', '145861', '7'), +('4', '66', '11', '69054', '208834', '7'), +('4', '66', '11', '27989', '194283', '7'), +('4', '66', '11', '29598', '190510', '7'), +('4', '66', '11', '29596', '187316', '7'), +('4', '67', '22', '21807', '0', '7'), +('4', '67', '22', '21805', '0', '7'), +('4', '67', '22', '61948', '0', '7'), +('4', '67', '22', '12425', '0', '7'), +('4', '67', '1', '68949', '17619', '7'), +('4', '67', '1', '7125', '15281', '7'), +('4', '67', '1', '32106', '12910', '7'), +('4', '67', '1', '69166', '12363', '7'), +('4', '67', '2', '28605', '15306', '7'), +('4', '67', '2', '28648', '15287', '7'), +('4', '67', '2', '2612', '8158', '7'), +('4', '67', '2', '26025', '8158', '7'), +('4', '67', '3', '69157', '10774', '7'), +('4', '67', '3', '68753', '10058', '7'), +('4', '67', '3', '69069', '10007', '7'), +('4', '67', '3', '68752', '9552', '7'), +('4', '67', '5', '68808', '12117', '7'), +('4', '67', '5', '7769', '11937', '7'), +('4', '67', '5', '67625', '11335', '7'), +('4', '67', '5', '28885', '11029', '7'), +('4', '67', '8', '69064', '20575', '7'), +('4', '67', '8', '69165', '20465', '7'), +('4', '67', '8', '69072', '17196', '7'), +('4', '67', '8', '26766', '11749', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '67', '6', '68757', '18890', '7'), +('4', '67', '6', '13674', '14630', '7'), +('4', '67', '6', '28902', '13010', '7'), +('4', '67', '6', '19144', '12035', '7'), +('4', '67', '17', '69151', '13849', '7'), +('4', '67', '17', '68780', '10252', '7'), +('4', '67', '17', '27261', '8419', '7'), +('4', '67', '17', '14961', '8385', '7'), +('4', '67', '7', '68706', '15340', '7'), +('4', '67', '7', '16097', '12460', '7'), +('4', '67', '7', '69080', '9442', '7'), +('4', '67', '7', '68881', '9043', '7'), +('4', '67', '9', '68766', '13583', '7'), +('4', '67', '9', '11096', '12626', '7'), +('4', '67', '9', '16097', '12460', '7'), +('4', '67', '9', '69127', '11013', '7'), +('4', '67', '15', '9959', '12216', '7'), +('4', '67', '15', '68111', '11849', '7'), +('4', '67', '15', '69160', '11156', '7'), +('4', '67', '15', '69070', '10862', '7'), +('4', '67', '20', '16156', '19086', '7'), +('4', '67', '20', '69134', '13520', '7'), +('4', '67', '20', '16097', '12460', '7'), +('4', '67', '20', '15873', '11940', '7'), +('4', '67', '12', '25857', '11077', '7'), +('4', '67', '12', '28246', '9181', '7'), +('4', '67', '12', '69253', '8701', '7'), +('4', '67', '12', '27000', '8073', '7'), +('4', '67', '18', '69147', '12838', '7'), +('4', '67', '18', '68749', '9393', '7'), +('4', '67', '18', '16777', '9262', '7'), +('4', '67', '18', '68973', '8759', '7'), +('4', '67', '19', '19094', '12151', '7'), +('4', '67', '19', '30569', '11872', '7'), +('4', '67', '19', '51226', '10537', '7'), +('4', '67', '19', '28888', '10277', '7'), +('4', '67', '13', '69052', '193533', '7'), +('4', '67', '13', '69116', '160425', '7'), +('4', '67', '13', '22998', '156777', '7'), +('4', '67', '13', '69040', '146401', '7'), +('4', '67', '14', '69052', '193533', '7'), +('4', '67', '14', '69116', '160425', '7'), +('4', '67', '14', '22998', '156777', '7'), +('4', '67', '14', '69040', '146401', '7'), +('4', '67', '11', '69054', '209434', '7'), +('4', '67', '11', '27989', '194831', '7'), +('4', '67', '11', '29598', '190922', '7'), +('4', '67', '11', '29596', '187781', '7'), +('4', '68', '22', '21807', '0', '7'), +('4', '68', '22', '21805', '0', '7'), +('4', '68', '22', '61948', '0', '7'), +('4', '68', '22', '12425', '0', '7'), +('4', '68', '1', '68949', '17620', '7'), +('4', '68', '1', '7125', '15281', '7'), +('4', '68', '1', '32106', '12911', '7'), +('4', '68', '1', '69166', '12364', '7'), +('4', '68', '2', '28605', '15306', '7'), +('4', '68', '2', '28648', '15287', '7'), +('4', '68', '2', '2612', '8158', '7'), +('4', '68', '2', '26025', '8158', '7'), +('4', '68', '3', '69157', '10774', '7'), +('4', '68', '3', '68753', '10059', '7'), +('4', '68', '3', '69069', '10007', '7'), +('4', '68', '3', '68752', '9553', '7'), +('4', '68', '5', '68808', '12118', '7'), +('4', '68', '5', '7769', '11938', '7'), +('4', '68', '5', '67625', '11336', '7'), +('4', '68', '5', '28885', '11030', '7'), +('4', '68', '8', '69064', '20576', '7'), +('4', '68', '8', '69165', '20465', '7'), +('4', '68', '8', '69072', '17197', '7'), +('4', '68', '8', '26766', '11749', '7'), +('4', '68', '6', '68757', '18891', '7'), +('4', '68', '6', '13674', '14630', '7'), +('4', '68', '6', '28902', '13011', '7'), +('4', '68', '6', '19144', '12035', '7'), +('4', '68', '17', '69151', '13849', '7'), +('4', '68', '17', '68780', '10252', '7'), +('4', '68', '17', '27261', '8419', '7'), +('4', '68', '17', '14961', '8385', '7'), +('4', '68', '7', '68706', '15340', '7'), +('4', '68', '7', '16097', '12460', '7'), +('4', '68', '7', '69080', '9443', '7'), +('4', '68', '7', '68881', '9043', '7'), +('4', '68', '9', '68766', '13584', '7'), +('4', '68', '9', '11096', '12626', '7'), +('4', '68', '9', '16097', '12460', '7'), +('4', '68', '9', '69127', '11014', '7'), +('4', '68', '15', '9959', '12216', '7'), +('4', '68', '15', '68111', '11849', '7'), +('4', '68', '15', '69160', '11157', '7'), +('4', '68', '15', '69070', '10862', '7'), +('4', '68', '20', '16156', '19086', '7'), +('4', '68', '20', '69134', '13521', '7'), +('4', '68', '20', '16097', '12460', '7'), +('4', '68', '20', '15873', '11941', '7'), +('4', '68', '12', '25857', '11077', '7'), +('4', '68', '12', '28246', '9182', '7'), +('4', '68', '12', '69253', '8701', '7'), +('4', '68', '12', '27000', '8073', '7'), +('4', '68', '18', '69147', '12839', '7'), +('4', '68', '18', '68749', '9394', '7'), +('4', '68', '18', '16777', '9263', '7'), +('4', '68', '18', '68973', '8760', '7'), +('4', '68', '19', '19094', '12151', '7'), +('4', '68', '19', '30569', '11872', '7'), +('4', '68', '19', '51226', '10538', '7'), +('4', '68', '19', '28888', '10278', '7'), +('4', '68', '13', '69052', '194839', '7'), +('4', '68', '13', '69116', '160853', '7'), +('4', '68', '13', '22998', '157853', '7'), +('4', '68', '13', '69040', '146942', '7'), +('4', '68', '14', '69052', '194839', '7'), +('4', '68', '14', '69116', '160853', '7'), +('4', '68', '14', '22998', '157853', '7'), +('4', '68', '14', '69040', '146942', '7'), +('4', '68', '11', '69054', '210095', '7'), +('4', '68', '11', '27989', '195318', '7'), +('4', '68', '11', '29598', '191395', '7'), +('4', '68', '11', '29596', '188306', '7'), +('4', '69', '22', '21807', '0', '7'), +('4', '69', '22', '21805', '0', '7'), +('4', '69', '22', '61948', '0', '7'), +('4', '69', '22', '12425', '0', '7'), +('4', '69', '1', '68949', '17621', '7'), +('4', '69', '1', '7125', '15281', '7'), +('4', '69', '1', '32106', '12911', '7'), +('4', '69', '1', '69166', '12364', '7'), +('4', '69', '2', '28605', '15307', '7'), +('4', '69', '2', '28648', '15288', '7'), +('4', '69', '2', '2612', '8158', '7'), +('4', '69', '2', '26025', '8158', '7'), +('4', '69', '3', '69157', '10775', '7'), +('4', '69', '3', '68753', '10059', '7'), +('4', '69', '3', '69069', '10008', '7'), +('4', '69', '3', '68752', '9553', '7'), +('4', '69', '5', '68808', '12118', '7'), +('4', '69', '5', '7769', '11938', '7'), +('4', '69', '5', '67625', '11336', '7'), +('4', '69', '5', '28885', '11030', '7'), +('4', '69', '8', '69064', '20576', '7'), +('4', '69', '8', '69165', '20466', '7'), +('4', '69', '8', '69072', '17197', '7'), +('4', '69', '8', '26766', '11750', '7'), +('4', '69', '6', '68757', '18891', '7'), +('4', '69', '6', '13674', '14631', '7'), +('4', '69', '6', '28902', '13011', '7'), +('4', '69', '6', '19144', '12036', '7'), +('4', '69', '17', '69151', '13850', '7'), +('4', '69', '17', '68780', '10253', '7'), +('4', '69', '17', '27261', '8419', '7'), +('4', '69', '17', '14961', '8386', '7'), +('4', '69', '7', '68706', '15340', '7'), +('4', '69', '7', '16097', '12461', '7'), +('4', '69', '7', '69080', '9443', '7'), +('4', '69', '7', '68881', '9044', '7'), +('4', '69', '9', '68766', '13584', '7'), +('4', '69', '9', '11096', '12627', '7'), +('4', '69', '9', '16097', '12461', '7'), +('4', '69', '9', '69127', '11014', '7'), +('4', '69', '15', '9959', '12216', '7'), +('4', '69', '15', '68111', '11849', '7'), +('4', '69', '15', '69160', '11157', '7'), +('4', '69', '15', '69070', '10863', '7'), +('4', '69', '20', '16156', '19087', '7'), +('4', '69', '20', '69134', '13522', '7'), +('4', '69', '20', '16097', '12461', '7'), +('4', '69', '20', '15873', '11941', '7'), +('4', '69', '12', '25857', '11077', '7'), +('4', '69', '12', '28246', '9182', '7'), +('4', '69', '12', '69253', '8702', '7'), +('4', '69', '12', '27000', '8073', '7'), +('4', '69', '18', '69147', '12839', '7'), +('4', '69', '18', '68749', '9394', '7'), +('4', '69', '18', '16777', '9263', '7'), +('4', '69', '18', '68973', '8760', '7'), +('4', '69', '19', '19094', '12151', '7'), +('4', '69', '19', '30569', '11872', '7'), +('4', '69', '19', '51226', '10538', '7'), +('4', '69', '19', '28888', '10278', '7'), +('4', '69', '13', '69052', '196144', '7'), +('4', '69', '13', '69116', '161281', '7'), +('4', '69', '13', '22998', '158990', '7'), +('4', '69', '13', '69040', '147422', '7'), +('4', '69', '14', '69052', '196144', '7'), +('4', '69', '14', '69116', '161281', '7'), +('4', '69', '14', '22998', '158990', '7'), +('4', '69', '14', '69040', '147422', '7'), +('4', '69', '11', '69054', '210755', '7'), +('4', '69', '11', '27989', '195866', '7'), +('4', '69', '11', '29598', '191868', '7'), +('4', '69', '11', '29596', '188772', '7'), +('4', '70', '22', '12425', '0', '11'), +('4', '70', '22', '21807', '0', '11'), +('4', '70', '22', '21805', '0', '11'), +('4', '70', '22', '39342', '0', '11'), +('4', '70', '1', '83594', '21630', '11'), +('4', '70', '1', '39276', '21400', '11'), +('4', '70', '1', '71624', '18193', '11'), +('4', '70', '1', '68949', '17621', '11'), +('4', '70', '2', '70874', '20934', '11'), +('4', '70', '2', '28605', '15307', '11'), +('4', '70', '2', '28648', '15288', '11'), +('4', '70', '2', '83561', '12785', '11'), +('4', '70', '3', '39218', '20030', '11'), +('4', '70', '3', '47245', '17397', '11'), +('4', '70', '3', '39361', '14787', '11'), +('4', '70', '3', '83636', '13283', '11'), +('4', '70', '5', '39349', '20558', '11'), +('4', '70', '5', '47273', '13906', '11'), +('4', '70', '5', '39262', '13580', '11'), +('4', '70', '5', '89308', '12481', '11'), +('4', '70', '8', '69064', '20577', '11'), +('4', '70', '8', '69165', '20466', '11'), +('4', '70', '8', '39330', '19401', '11'), +('4', '70', '8', '69072', '17198', '11'), +('4', '70', '6', '70717', '19780', '11'), +('4', '70', '6', '68757', '18891', '11'), +('4', '70', '6', '83530', '18044', '11'), +('4', '70', '6', '39367', '15184', '11'), +('4', '70', '17', '83604', '24807', '11'), +('4', '70', '17', '70879', '14755', '11'), +('4', '70', '17', '69151', '13850', '11'), +('4', '70', '17', '70713', '12140', '11'), +('4', '70', '7', '68706', '15341', '11'), +('4', '70', '7', '83565', '13896', '11'), +('4', '70', '7', '16097', '12461', '11'), +('4', '70', '7', '70875', '12447', '11'), +('4', '70', '9', '39345', '13960', '11'), +('4', '70', '9', '51707', '13607', '11'), +('4', '70', '9', '68766', '13584', '11'), +('4', '70', '9', '39291', '13546', '11'), +('4', '70', '15', '83458', '17008', '11'), +('4', '70', '15', '39374', '16386', '11'), +('4', '70', '15', '70621', '15925', '11'), +('4', '70', '15', '71117', '15742', '11'), +('4', '70', '20', '16156', '19087', '11'), +('4', '70', '20', '47283', '18315', '11'), +('4', '70', '20', '39339', '15302', '11'), +('4', '70', '20', '70604', '14855', '11'), +('4', '70', '12', '71080', '16741', '11'), +('4', '70', '12', '47213', '16495', '11'), +('4', '70', '12', '39356', '13349', '11'), +('4', '70', '12', '25857', '11078', '11'), +('4', '70', '18', '83608', '16004', '11'), +('4', '70', '18', '70880', '15641', '11'), +('4', '70', '18', '69147', '12840', '11'), +('4', '70', '18', '71096', '12078', '11'), +('4', '70', '19', '69439', '14350', '11'), +('4', '70', '19', '83573', '12246', '11'), +('4', '70', '19', '19094', '12152', '11'), +('4', '70', '19', '70878', '12059', '11'), +('4', '70', '13', '83639', '255588', '11'), +('4', '70', '13', '69052', '205324', '11'), +('4', '70', '13', '47314', '199776', '11'), +('4', '70', '13', '83576', '199349', '11'), +('4', '70', '14', '83639', '255588', '11'), +('4', '70', '14', '69052', '205324', '11'), +('4', '70', '14', '47314', '199776', '11'), +('4', '70', '14', '83576', '199349', '11'), +('4', '70', '11', '83582', '263565', '11'), +('4', '70', '11', '47325', '228128', '11'), +('4', '70', '11', '39331', '221389', '11'), +('4', '70', '11', '83539', '219189', '11'), +('4', '70', '22', '21807', '0', '10'), +('4', '70', '22', '21805', '0', '10'), +('4', '70', '22', '61948', '0', '10'), +('4', '70', '22', '12425', '0', '10'), +('4', '70', '1', '83594', '21630', '10'), +('4', '70', '1', '71624', '18193', '10'), +('4', '70', '1', '68949', '17621', '10'), +('4', '70', '1', '7125', '15282', '10'), +('4', '70', '2', '70874', '20934', '10'), +('4', '70', '2', '28605', '15307', '10'), +('4', '70', '2', '28648', '15288', '10'), +('4', '70', '2', '83561', '12785', '10'), +('4', '70', '3', '47245', '17397', '10'), +('4', '70', '3', '83636', '13283', '10'), +('4', '70', '3', '83658', '12488', '10'), +('4', '70', '3', '89512', '12330', '10'), +('4', '70', '5', '47273', '13906', '10'), +('4', '70', '5', '89308', '12481', '10'), +('4', '70', '5', '47275', '12179', '10'), +('4', '70', '5', '68808', '12119', '10'), +('4', '70', '8', '69064', '20577', '10'), +('4', '70', '8', '69165', '20466', '10'), +('4', '70', '8', '69072', '17198', '10'), +('4', '70', '8', '70662', '15560', '10'), +('4', '70', '6', '70717', '19780', '10'), +('4', '70', '6', '68757', '18891', '10'), +('4', '70', '6', '83530', '18044', '10'), +('4', '70', '6', '13674', '14631', '10'), +('4', '70', '17', '83604', '24807', '10'), +('4', '70', '17', '70879', '14755', '10'), +('4', '70', '17', '69151', '13850', '10'), +('4', '70', '17', '70713', '12140', '10'), +('4', '70', '7', '68706', '15341', '10'), +('4', '70', '7', '83565', '13896', '10'), +('4', '70', '7', '16097', '12461', '10'), +('4', '70', '7', '70875', '12447', '10'), +('4', '70', '9', '68766', '13584', '10'), +('4', '70', '9', '83653', '13131', '10'), +('4', '70', '9', '11096', '12627', '10'), +('4', '70', '9', '16097', '12461', '10'), +('4', '70', '15', '83458', '17008', '10'), +('4', '70', '15', '70621', '15925', '10'), +('4', '70', '15', '71117', '15742', '10'), +('4', '70', '15', '71588', '15288', '10'), +('4', '70', '20', '16156', '19087', '10'), +('4', '70', '20', '47283', '18315', '10'), +('4', '70', '20', '70604', '14855', '10'), +('4', '70', '20', '69134', '13522', '10'), +('4', '70', '12', '71080', '16741', '10'), +('4', '70', '12', '47213', '16495', '10'), +('4', '70', '12', '25857', '11078', '10'), +('4', '70', '12', '83569', '10708', '10'), +('4', '70', '18', '83608', '16004', '10'), +('4', '70', '18', '70880', '15641', '10'), +('4', '70', '18', '69147', '12840', '10'), +('4', '70', '18', '71096', '12078', '10'), +('4', '70', '19', '69439', '14350', '10'), +('4', '70', '19', '83573', '12246', '10'), +('4', '70', '19', '19094', '12152', '10'), +('4', '70', '19', '70878', '12059', '10'), +('4', '70', '13', '83639', '255588', '10'), +('4', '70', '13', '69052', '205324', '10'), +('4', '70', '13', '47314', '199776', '10'), +('4', '70', '13', '83576', '199349', '10'), +('4', '70', '14', '83639', '255588', '10'), +('4', '70', '14', '69052', '205324', '10'), +('4', '70', '14', '47314', '199776', '10'), +('4', '70', '14', '83576', '199349', '10'), +('4', '70', '11', '83582', '263565', '10'), +('4', '70', '11', '47325', '228128', '10'), +('4', '70', '11', '83539', '219189', '10'), +('4', '70', '11', '69054', '213516', '10'), +('4', '70', '22', '21805', '0', '9'), +('4', '70', '22', '61948', '0', '9'), +('4', '70', '22', '66397', '0', '9'), +('4', '70', '22', '21807', '0', '9'), +('4', '70', '1', '71624', '18193', '9'), +('4', '70', '1', '68949', '17621', '9'), +('4', '70', '1', '7125', '15282', '9'), +('4', '70', '1', '47287', '13280', '9'), +('4', '70', '2', '70874', '20934', '9'), +('4', '70', '2', '28605', '15307', '9'), +('4', '70', '2', '28648', '15288', '9'), +('4', '70', '2', '47209', '8569', '9'), +('4', '70', '3', '47245', '17397', '9'), +('4', '70', '3', '47299', '11087', '9'), +('4', '70', '3', '69157', '10775', '9'), +('4', '70', '3', '70718', '10596', '9'), +('4', '70', '5', '47273', '13906', '9'), +('4', '70', '5', '47275', '12179', '9'), +('4', '70', '5', '68808', '12119', '9'), +('4', '70', '5', '7769', '11939', '9'), +('4', '70', '8', '69064', '20577', '9'), +('4', '70', '8', '69165', '20466', '9'), +('4', '70', '8', '69072', '17198', '9'), +('4', '70', '8', '70662', '15560', '9'), +('4', '70', '6', '70717', '19780', '9'), +('4', '70', '6', '68757', '18891', '9'), +('4', '70', '6', '13674', '14631', '9'), +('4', '70', '6', '28902', '13011', '9'), +('4', '70', '17', '70879', '14755', '9'), +('4', '70', '17', '69151', '13850', '9'), +('4', '70', '17', '70713', '12140', '9'), +('4', '70', '17', '68780', '10253', '9'), +('4', '70', '7', '68706', '15341', '9'), +('4', '70', '7', '16097', '12461', '9'), +('4', '70', '7', '70875', '12447', '9'), +('4', '70', '7', '70711', '10763', '9'), +('4', '70', '9', '68766', '13584', '9'), +('4', '70', '9', '11096', '12627', '9'), +('4', '70', '9', '16097', '12461', '9'), +('4', '70', '9', '70876', '11296', '9'), +('4', '70', '15', '70621', '15925', '9'), +('4', '70', '15', '71117', '15742', '9'), +('4', '70', '15', '71588', '15288', '9'), +('4', '70', '15', '71608', '13583', '9'), +('4', '70', '20', '16156', '19087', '9'), +('4', '70', '20', '47283', '18315', '9'), +('4', '70', '20', '70604', '14855', '9'), +('4', '70', '20', '69134', '13522', '9'), +('4', '70', '12', '71080', '16741', '9'), +('4', '70', '12', '47213', '16495', '9'), +('4', '70', '12', '25857', '11078', '9'), +('4', '70', '12', '70877', '9599', '9'), +('4', '70', '18', '70880', '15641', '9'), +('4', '70', '18', '69147', '12840', '9'), +('4', '70', '18', '71096', '12078', '9'), +('4', '70', '18', '82717', '11760', '9'), +('4', '70', '19', '69439', '14350', '9'), +('4', '70', '19', '19094', '12152', '9'), +('4', '70', '19', '70878', '12059', '9'), +('4', '70', '19', '30569', '11872', '9'), +('4', '70', '13', '69052', '205324', '9'), +('4', '70', '13', '47314', '199776', '9'), +('4', '70', '13', '47312', '184705', '9'), +('4', '70', '13', '62649', '184183', '9'), +('4', '70', '14', '69052', '205324', '9'), +('4', '70', '14', '47314', '199776', '9'), +('4', '70', '14', '47312', '184705', '9'), +('4', '70', '14', '62649', '184183', '9'), +('4', '70', '11', '47325', '228128', '9'), +('4', '70', '11', '69054', '213516', '9'), +('4', '70', '11', '47265', '204233', '9'), +('4', '70', '11', '70628', '197855', '9'), +('4', '70', '22', '21805', '0', '8'), +('4', '70', '22', '61948', '0', '8'), +('4', '70', '22', '66397', '0', '8'), +('4', '70', '22', '21807', '0', '8'), +('4', '70', '1', '68949', '17621', '8'), +('4', '70', '1', '7125', '15282', '8'), +('4', '70', '1', '47287', '13280', '8'), +('4', '70', '1', '32106', '12912', '8'), +('4', '70', '2', '70874', '20934', '8'), +('4', '70', '2', '28605', '15307', '8'), +('4', '70', '2', '28648', '15288', '8'), +('4', '70', '2', '47209', '8569', '8'), +('4', '70', '3', '47245', '17397', '8'), +('4', '70', '3', '47299', '11087', '8'), +('4', '70', '3', '69157', '10775', '8'), +('4', '70', '3', '70718', '10596', '8'), +('4', '70', '5', '47273', '13906', '8'), +('4', '70', '5', '47275', '12179', '8'), +('4', '70', '5', '68808', '12119', '8'), +('4', '70', '5', '7769', '11939', '8'), +('4', '70', '8', '69064', '20577', '8'), +('4', '70', '8', '69165', '20466', '8'), +('4', '70', '8', '69072', '17198', '8'), +('4', '70', '8', '70662', '15560', '8'), +('4', '70', '6', '70717', '19780', '8'), +('4', '70', '6', '68757', '18891', '8'), +('4', '70', '6', '13674', '14631', '8'), +('4', '70', '6', '28902', '13011', '8'), +('4', '70', '17', '70879', '14755', '8'), +('4', '70', '17', '69151', '13850', '8'), +('4', '70', '17', '70713', '12140', '8'), +('4', '70', '17', '68780', '10253', '8'), +('4', '70', '7', '68706', '15341', '8'), +('4', '70', '7', '16097', '12461', '8'), +('4', '70', '7', '70875', '12447', '8'), +('4', '70', '7', '70711', '10763', '8'), +('4', '70', '9', '68766', '13584', '8'), +('4', '70', '9', '11096', '12627', '8'), +('4', '70', '9', '16097', '12461', '8'), +('4', '70', '9', '70876', '11296', '8'), +('4', '70', '15', '70621', '15925', '8'), +('4', '70', '15', '71117', '15742', '8'), +('4', '70', '15', '9959', '12217', '8'), +('4', '70', '15', '68111', '11850', '8'), +('4', '70', '20', '16156', '19087', '8'), +('4', '70', '20', '47283', '18315', '8'), +('4', '70', '20', '70604', '14855', '8'), +('4', '70', '20', '69134', '13522', '8'), +('4', '70', '12', '71080', '16741', '8'), +('4', '70', '12', '47213', '16495', '8'), +('4', '70', '12', '25857', '11078', '8'), +('4', '70', '12', '70877', '9599', '8'), +('4', '70', '18', '70880', '15641', '8'), +('4', '70', '18', '69147', '12840', '8'), +('4', '70', '18', '71096', '12078', '8'), +('4', '70', '18', '47201', '11410', '8'), +('4', '70', '19', '69439', '14350', '8'), +('4', '70', '19', '19094', '12152', '8'), +('4', '70', '19', '70878', '12059', '8'), +('4', '70', '19', '30569', '11872', '8'), +('4', '70', '13', '69052', '203074', '8'), +('4', '70', '13', '47314', '199101', '8'), +('4', '70', '13', '62649', '184183', '8'), +('4', '70', '13', '47312', '184180', '8'), +('4', '70', '14', '69052', '203074', '8'), +('4', '70', '14', '47314', '199101', '8'), +('4', '70', '14', '62649', '184183', '8'), +('4', '70', '14', '47312', '184180', '8'), +('4', '70', '11', '47325', '228128', '8'), +('4', '70', '11', '69054', '212916', '8'), +('4', '70', '11', '47265', '204233', '8'), +('4', '70', '11', '70628', '197855', '8'), +('4', '71', '22', '12425', '0', '11'), +('4', '71', '22', '21807', '0', '11'), +('4', '71', '22', '21805', '0', '11'), +('4', '71', '22', '39342', '0', '11'), +('4', '71', '1', '83594', '21631', '11'), +('4', '71', '1', '39276', '21401', '11'), +('4', '71', '1', '71624', '18194', '11'), +('4', '71', '1', '68949', '17622', '11'), +('4', '71', '2', '70874', '20934', '11'), +('4', '71', '2', '28605', '15308', '11'), +('4', '71', '2', '28648', '15289', '11'), +('4', '71', '2', '83561', '12786', '11'), +('4', '71', '3', '39218', '20031', '11'), +('4', '71', '3', '47245', '17397', '11'), +('4', '71', '3', '39361', '14787', '11'), +('4', '71', '3', '83636', '13284', '11'), +('4', '71', '5', '39349', '20559', '11'), +('4', '71', '5', '47273', '13907', '11'), +('4', '71', '5', '39262', '13580', '11'), +('4', '71', '5', '89308', '12482', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '71', '8', '69064', '20578', '11'), +('4', '71', '8', '69165', '20467', '11'), +('4', '71', '8', '39330', '19402', '11'), +('4', '71', '8', '69072', '17199', '11'), +('4', '71', '6', '70717', '19781', '11'), +('4', '71', '6', '68757', '18892', '11'), +('4', '71', '6', '83530', '18044', '11'), +('4', '71', '6', '39367', '15185', '11'), +('4', '71', '17', '83604', '24807', '11'), +('4', '71', '17', '70879', '14756', '11'), +('4', '71', '17', '69151', '13851', '11'), +('4', '71', '17', '70713', '12140', '11'), +('4', '71', '7', '68706', '15341', '11'), +('4', '71', '7', '83565', '13897', '11'), +('4', '71', '7', '16097', '12462', '11'), +('4', '71', '7', '70875', '12448', '11'), +('4', '71', '9', '39345', '13961', '11'), +('4', '71', '9', '51707', '13608', '11'), +('4', '71', '9', '68766', '13585', '11'), +('4', '71', '9', '39291', '13547', '11'), +('4', '71', '15', '83458', '17009', '11'), +('4', '71', '15', '39374', '16387', '11'), +('4', '71', '15', '70621', '15926', '11'), +('4', '71', '15', '71117', '15742', '11'), +('4', '71', '20', '16156', '19088', '11'), +('4', '71', '20', '47283', '18315', '11'), +('4', '71', '20', '39339', '15302', '11'), +('4', '71', '20', '70604', '14856', '11'), +('4', '71', '12', '71080', '16741', '11'), +('4', '71', '12', '47213', '16496', '11'), +('4', '71', '12', '39356', '13350', '11'), +('4', '71', '12', '25857', '11078', '11'), +('4', '71', '18', '83608', '16005', '11'), +('4', '71', '18', '70880', '15642', '11'), +('4', '71', '18', '69147', '12840', '11'), +('4', '71', '18', '71096', '12079', '11'), +('4', '71', '19', '69439', '14350', '11'), +('4', '71', '19', '83573', '12247', '11'), +('4', '71', '19', '19094', '12152', '11'), +('4', '71', '19', '70878', '12059', '11'), +('4', '71', '13', '83639', '257151', '11'), +('4', '71', '13', '69052', '206629', '11'), +('4', '71', '13', '47314', '200414', '11'), +('4', '71', '13', '83576', '199950', '11'), +('4', '71', '14', '83639', '257151', '11'), +('4', '71', '14', '69052', '206629', '11'), +('4', '71', '14', '47314', '200414', '11'), +('4', '71', '14', '83576', '199950', '11'), +('4', '71', '11', '83582', '264045', '11'), +('4', '71', '11', '47325', '228549', '11'), +('4', '71', '11', '39331', '221749', '11'), +('4', '71', '11', '83539', '219699', '11'), +('4', '72', '22', '12425', '0', '11'), +('4', '72', '22', '21807', '0', '11'), +('4', '72', '22', '21805', '0', '11'), +('4', '72', '22', '39342', '0', '11'), +('4', '72', '1', '83594', '21631', '11'), +('4', '72', '1', '39276', '21402', '11'), +('4', '72', '1', '71624', '18194', '11'), +('4', '72', '1', '68949', '17623', '11'), +('4', '72', '2', '70874', '20934', '11'), +('4', '72', '2', '28605', '15308', '11'), +('4', '72', '2', '28648', '15289', '11'), +('4', '72', '2', '83561', '12787', '11'), +('4', '72', '3', '39218', '20032', '11'), +('4', '72', '3', '47245', '17397', '11'), +('4', '72', '3', '39361', '14788', '11'), +('4', '72', '3', '83636', '13285', '11'), +('4', '72', '5', '39349', '20560', '11'), +('4', '72', '5', '47273', '13907', '11'), +('4', '72', '5', '39262', '13581', '11'), +('4', '72', '5', '89308', '12483', '11'), +('4', '72', '8', '69064', '20578', '11'), +('4', '72', '8', '69165', '20468', '11'), +('4', '72', '8', '39330', '19402', '11'), +('4', '72', '8', '69072', '17199', '11'), +('4', '72', '6', '70717', '19781', '11'), +('4', '72', '6', '68757', '18892', '11'), +('4', '72', '6', '83530', '18044', '11'), +('4', '72', '6', '39367', '15185', '11'), +('4', '72', '17', '83604', '24808', '11'), +('4', '72', '17', '70879', '14756', '11'), +('4', '72', '17', '69151', '13851', '11'), +('4', '72', '17', '70713', '12141', '11'), +('4', '72', '7', '68706', '15342', '11'), +('4', '72', '7', '83565', '13898', '11'), +('4', '72', '7', '16097', '12462', '11'), +('4', '72', '7', '70875', '12449', '11'), +('4', '72', '9', '39345', '13961', '11'), +('4', '72', '9', '51707', '13609', '11'), +('4', '72', '9', '68766', '13585', '11'), +('4', '72', '9', '39291', '13548', '11'), +('4', '72', '15', '83458', '17009', '11'), +('4', '72', '15', '39374', '16387', '11'), +('4', '72', '15', '70621', '15926', '11'), +('4', '72', '15', '71117', '15743', '11'), +('4', '72', '20', '16156', '19088', '11'), +('4', '72', '20', '47283', '18315', '11'), +('4', '72', '20', '39339', '15303', '11'), +('4', '72', '20', '70604', '14856', '11'), +('4', '72', '12', '71080', '16742', '11'), +('4', '72', '12', '47213', '16496', '11'), +('4', '72', '12', '39356', '13350', '11'), +('4', '72', '12', '25857', '11078', '11'), +('4', '72', '18', '83608', '16005', '11'), +('4', '72', '18', '70880', '15643', '11'), +('4', '72', '18', '69147', '12841', '11'), +('4', '72', '18', '71096', '12079', '11'), +('4', '72', '19', '69439', '14351', '11'), +('4', '72', '19', '83573', '12248', '11'), +('4', '72', '19', '19094', '12152', '11'), +('4', '72', '19', '70878', '12059', '11'), +('4', '72', '13', '83639', '258715', '11'), +('4', '72', '13', '69052', '207934', '11'), +('4', '72', '13', '47314', '201052', '11'), +('4', '72', '13', '83576', '200550', '11'), +('4', '72', '14', '83639', '258715', '11'), +('4', '72', '14', '69052', '207934', '11'), +('4', '72', '14', '47314', '201052', '11'), +('4', '72', '14', '83576', '200550', '11'), +('4', '72', '11', '83582', '264526', '11'), +('4', '72', '11', '47325', '228969', '11'), +('4', '72', '11', '39331', '222169', '11'), +('4', '72', '11', '83539', '220269', '11'), +('4', '73', '22', '12425', '0', '11'), +('4', '73', '22', '21807', '0', '11'), +('4', '73', '22', '21805', '0', '11'), +('4', '73', '22', '39342', '0', '11'), +('4', '73', '1', '83594', '21632', '11'), +('4', '73', '1', '39276', '21402', '11'), +('4', '73', '1', '71624', '18195', '11'), +('4', '73', '1', '68949', '17623', '11'), +('4', '73', '2', '70874', '20934', '11'), +('4', '73', '2', '28605', '15309', '11'), +('4', '73', '2', '28648', '15289', '11'), +('4', '73', '2', '83561', '12788', '11'), +('4', '73', '3', '39218', '20032', '11'), +('4', '73', '3', '47245', '17398', '11'), +('4', '73', '3', '39361', '14789', '11'), +('4', '73', '3', '83636', '13286', '11'), +('4', '73', '5', '39349', '20560', '11'), +('4', '73', '5', '47273', '13908', '11'), +('4', '73', '5', '39262', '13581', '11'), +('4', '73', '5', '89308', '12484', '11'), +('4', '73', '8', '69064', '20579', '11'), +('4', '73', '8', '69165', '20468', '11'), +('4', '73', '8', '39330', '19403', '11'), +('4', '73', '8', '69072', '17200', '11'), +('4', '73', '6', '70717', '19782', '11'), +('4', '73', '6', '68757', '18893', '11'), +('4', '73', '6', '83530', '18045', '11'), +('4', '73', '6', '39367', '15185', '11'), +('4', '73', '17', '83604', '24809', '11'), +('4', '73', '17', '70879', '14757', '11'), +('4', '73', '17', '69151', '13852', '11'), +('4', '73', '17', '70713', '12141', '11'), +('4', '73', '7', '68706', '15342', '11'), +('4', '73', '7', '83565', '13899', '11'), +('4', '73', '7', '16097', '12463', '11'), +('4', '73', '7', '70875', '12449', '11'), +('4', '73', '9', '39345', '13962', '11'), +('4', '73', '9', '51707', '13609', '11'), +('4', '73', '9', '68766', '13585', '11'), +('4', '73', '9', '39291', '13548', '11'), +('4', '73', '15', '83458', '17010', '11'), +('4', '73', '15', '39374', '16388', '11'), +('4', '73', '15', '70621', '15927', '11'), +('4', '73', '15', '71117', '15743', '11'), +('4', '73', '20', '16156', '19089', '11'), +('4', '73', '20', '47283', '18315', '11'), +('4', '73', '20', '39339', '15304', '11'), +('4', '73', '20', '70604', '14857', '11'), +('4', '73', '12', '71080', '16742', '11'), +('4', '73', '12', '47213', '16497', '11'), +('4', '73', '12', '39356', '13351', '11'), +('4', '73', '12', '25857', '11078', '11'), +('4', '73', '18', '83608', '16006', '11'), +('4', '73', '18', '70880', '15643', '11'), +('4', '73', '18', '69147', '12841', '11'), +('4', '73', '18', '71096', '12080', '11'), +('4', '73', '19', '69439', '14351', '11'), +('4', '73', '19', '83573', '12249', '11'), +('4', '73', '19', '19094', '12153', '11'), +('4', '73', '19', '70878', '12059', '11'), +('4', '73', '13', '83639', '260278', '11'), +('4', '73', '13', '69052', '209239', '11'), +('4', '73', '13', '47314', '201690', '11'), +('4', '73', '13', '83576', '201151', '11'), +('4', '73', '14', '83639', '260278', '11'), +('4', '73', '14', '69052', '209239', '11'), +('4', '73', '14', '47314', '201690', '11'), +('4', '73', '14', '83576', '201151', '11'), +('4', '73', '11', '83582', '265006', '11'), +('4', '73', '11', '47325', '229390', '11'), +('4', '73', '11', '39331', '222589', '11'), +('4', '73', '11', '83539', '220780', '11'), +('4', '74', '22', '12425', '0', '11'), +('4', '74', '22', '21807', '0', '11'), +('4', '74', '22', '21805', '0', '11'), +('4', '74', '22', '39342', '0', '11'), +('4', '74', '1', '83594', '21633', '11'), +('4', '74', '1', '39276', '21403', '11'), +('4', '74', '1', '71624', '18195', '11'), +('4', '74', '1', '68949', '17624', '11'), +('4', '74', '2', '70874', '20934', '11'), +('4', '74', '2', '28605', '15309', '11'), +('4', '74', '2', '28648', '15290', '11'), +('4', '74', '2', '83561', '12789', '11'), +('4', '74', '3', '39218', '20033', '11'), +('4', '74', '3', '47245', '17398', '11'), +('4', '74', '3', '39361', '14789', '11'), +('4', '74', '3', '83636', '13286', '11'), +('4', '74', '5', '39349', '20561', '11'), +('4', '74', '5', '47273', '13908', '11'), +('4', '74', '5', '39262', '13582', '11'), +('4', '74', '5', '89308', '12484', '11'), +('4', '74', '8', '69064', '20579', '11'), +('4', '74', '8', '69165', '20469', '11'), +('4', '74', '8', '39330', '19404', '11'), +('4', '74', '8', '69072', '17200', '11'), +('4', '74', '6', '70717', '19783', '11'), +('4', '74', '6', '68757', '18893', '11'), +('4', '74', '6', '83530', '18045', '11'), +('4', '74', '6', '39367', '15185', '11'), +('4', '74', '17', '83604', '24810', '11'), +('4', '74', '17', '70879', '14758', '11'), +('4', '74', '17', '69151', '13852', '11'), +('4', '74', '17', '70713', '12142', '11'), +('4', '74', '7', '68706', '15342', '11'), +('4', '74', '7', '83565', '13900', '11'), +('4', '74', '7', '16097', '12463', '11'), +('4', '74', '7', '70875', '12450', '11'), +('4', '74', '9', '39345', '13963', '11'), +('4', '74', '9', '51707', '13610', '11'), +('4', '74', '9', '68766', '13586', '11'), +('4', '74', '9', '39291', '13549', '11'), +('4', '74', '15', '83458', '17010', '11'), +('4', '74', '15', '39374', '16389', '11'), +('4', '74', '15', '70621', '15928', '11'), +('4', '74', '15', '71117', '15744', '11'), +('4', '74', '20', '16156', '19089', '11'), +('4', '74', '20', '47283', '18315', '11'), +('4', '74', '20', '39339', '15304', '11'), +('4', '74', '20', '70604', '14857', '11'), +('4', '74', '12', '71080', '16743', '11'), +('4', '74', '12', '47213', '16497', '11'), +('4', '74', '12', '39356', '13352', '11'), +('4', '74', '12', '25857', '11078', '11'), +('4', '74', '18', '83608', '16007', '11'), +('4', '74', '18', '70880', '15644', '11'), +('4', '74', '18', '69147', '12841', '11'), +('4', '74', '18', '71096', '12081', '11'), +('4', '74', '19', '69439', '14352', '11'), +('4', '74', '19', '83573', '12250', '11'), +('4', '74', '19', '19094', '12153', '11'), +('4', '74', '19', '70878', '12059', '11'), +('4', '74', '13', '83639', '261841', '11'), +('4', '74', '13', '69052', '210544', '11'), +('4', '74', '13', '47314', '202327', '11'), +('4', '74', '13', '83576', '201751', '11'), +('4', '74', '14', '83639', '261841', '11'), +('4', '74', '14', '69052', '210544', '11'), +('4', '74', '14', '47314', '202327', '11'), +('4', '74', '14', '83576', '201751', '11'), +('4', '74', '11', '83582', '265486', '11'), +('4', '74', '11', '47325', '229810', '11'), +('4', '74', '11', '39331', '222949', '11'), +('4', '74', '11', '83539', '221290', '11'), +('4', '75', '22', '12425', '0', '13'), +('4', '75', '22', '21807', '0', '13'), +('4', '75', '22', '39342', '0', '13'), +('4', '75', '22', '7867', '0', '13'), +('4', '75', '1', '83594', '21633', '13'), +('4', '75', '1', '39276', '21403', '13'), +('4', '75', '1', '80648', '19623', '13'), +('4', '75', '1', '71624', '18196', '13'), +('4', '75', '2', '80524', '29302', '13'), +('4', '75', '2', '70874', '20935', '13'), +('4', '75', '2', '53382', '16350', '13'), +('4', '75', '2', '28605', '15309', '13'), +('4', '75', '3', '39218', '20033', '13'), +('4', '75', '3', '80637', '19651', '13'), +('4', '75', '3', '47245', '17398', '13'), +('4', '75', '3', '39361', '14790', '13'), +('4', '75', '5', '46918', '24649', '13'), +('4', '75', '5', '39349', '20561', '13'), +('4', '75', '5', '80616', '18209', '13'), +('4', '75', '5', '80670', '17973', '13'), +('4', '75', '8', '46885', '27359', '13'), +('4', '75', '8', '80677', '21329', '13'), +('4', '75', '8', '69064', '20580', '13'), +('4', '75', '8', '69165', '20469', '13'), +('4', '75', '6', '80638', '28071', '13'), +('4', '75', '6', '70717', '19783', '13'), +('4', '75', '6', '68757', '18894', '13'), +('4', '75', '6', '83530', '18045', '13'), +('4', '75', '17', '83604', '24810', '13'), +('4', '75', '17', '53387', '18725', '13'), +('4', '75', '17', '70879', '14758', '13'), +('4', '75', '17', '46825', '14412', '13'), +('4', '75', '7', '80525', '21463', '13'), +('4', '75', '7', '53383', '16646', '13'), +('4', '75', '7', '68706', '15343', '13'), +('4', '75', '7', '83565', '13901', '13'), +('4', '75', '9', '80521', '17826', '13'), +('4', '75', '9', '46937', '17031', '13'), +('4', '75', '9', '53384', '16891', '13'), +('4', '75', '9', '39345', '13963', '13'), +('4', '75', '15', '80667', '20831', '13'), +('4', '75', '15', '79909', '20629', '13'), +('4', '75', '15', '80627', '18719', '13'), +('4', '75', '15', '79908', '18246', '13'), +('4', '75', '20', '80678', '30359', '13'), +('4', '75', '20', '46935', '19535', '13'), +('4', '75', '20', '16156', '19090', '13'), +('4', '75', '20', '47283', '18315', '13'), +('4', '75', '12', '53385', '24831', '13'), +('4', '75', '12', '71080', '16743', '13'), +('4', '75', '12', '47213', '16498', '13'), +('4', '75', '12', '39356', '13352', '13'), +('4', '75', '18', '80526', '22192', '13'), +('4', '75', '18', '53388', '17626', '13'), +('4', '75', '18', '83608', '16008', '13'), +('4', '75', '18', '70880', '15645', '13'), +('4', '75', '19', '80523', '19960', '13'), +('4', '75', '19', '53386', '16908', '13'), +('4', '75', '19', '69439', '14352', '13'), +('4', '75', '19', '83573', '12250', '13'), +('4', '75', '13', '46856', '295387', '13'), +('4', '75', '13', '46854', '290947', '13'), +('4', '75', '13', '83639', '270019', '13'), +('4', '75', '13', '80674', '261177', '13'), +('4', '75', '14', '46856', '295387', '13'), +('4', '75', '14', '46854', '290947', '13'), +('4', '75', '14', '83639', '270019', '13'), +('4', '75', '14', '80674', '261177', '13'), +('4', '75', '11', '80655', '332653', '13'), +('4', '75', '11', '46930', '324251', '13'), +('4', '75', '11', '83582', '265966', '13'), +('4', '75', '11', '47325', '230231', '13'), +('4', '75', '22', '12425', '0', '12'), +('4', '75', '22', '21807', '0', '12'), +('4', '75', '22', '39342', '0', '12'), +('4', '75', '22', '7867', '0', '12'), +('4', '75', '1', '83594', '21633', '12'), +('4', '75', '1', '39276', '21403', '12'), +('4', '75', '1', '71624', '18196', '12'), +('4', '75', '1', '68949', '17625', '12'), +('4', '75', '2', '70874', '20935', '12'), +('4', '75', '2', '53382', '16350', '12'), +('4', '75', '2', '28605', '15309', '12'), +('4', '75', '2', '28648', '15290', '12'), +('4', '75', '3', '39218', '20033', '12'), +('4', '75', '3', '47245', '17398', '12'), +('4', '75', '3', '39361', '14790', '12'), +('4', '75', '3', '46924', '14056', '12'), +('4', '75', '5', '46918', '24649', '12'), +('4', '75', '5', '39349', '20561', '12'), +('4', '75', '5', '46934', '14905', '12'), +('4', '75', '5', '47273', '13908', '12'), +('4', '75', '8', '46885', '27359', '12'), +('4', '75', '8', '69064', '20580', '12'), +('4', '75', '8', '69165', '20469', '12'), +('4', '75', '8', '39330', '19404', '12'), +('4', '75', '6', '70717', '19783', '12'), +('4', '75', '6', '68757', '18894', '12'), +('4', '75', '6', '83530', '18045', '12'), +('4', '75', '6', '46933', '16832', '12'), +('4', '75', '17', '83604', '24810', '12'), +('4', '75', '17', '53387', '18725', '12'), +('4', '75', '17', '70879', '14758', '12'), +('4', '75', '17', '46825', '14412', '12'), +('4', '75', '7', '53383', '16646', '12'), +('4', '75', '7', '68706', '15343', '12'), +('4', '75', '7', '83565', '13901', '12'), +('4', '75', '7', '16097', '12463', '12'), +('4', '75', '9', '46937', '17031', '12'), +('4', '75', '9', '53384', '16891', '12'), +('4', '75', '9', '39345', '13963', '12'), +('4', '75', '9', '51707', '13611', '12'), +('4', '75', '15', '46881', '17834', '12'), +('4', '75', '15', '83458', '17010', '12'), +('4', '75', '15', '46893', '16948', '12'), +('4', '75', '15', '39374', '16390', '12'), +('4', '75', '20', '46935', '19535', '12'), +('4', '75', '20', '16156', '19090', '12'), +('4', '75', '20', '47283', '18315', '12'), +('4', '75', '20', '39339', '15305', '12'), +('4', '75', '12', '53385', '24831', '12'), +('4', '75', '12', '71080', '16743', '12'), +('4', '75', '12', '47213', '16498', '12'), +('4', '75', '12', '39356', '13352', '12'), +('4', '75', '18', '53388', '17626', '12'), +('4', '75', '18', '83608', '16008', '12'), +('4', '75', '18', '70880', '15645', '12'), +('4', '75', '18', '69147', '12842', '12'), +('4', '75', '19', '53386', '16908', '12'), +('4', '75', '19', '69439', '14352', '12'), +('4', '75', '19', '83573', '12250', '12'), +('4', '75', '19', '19094', '12153', '12'), +('4', '75', '13', '46856', '295387', '12'), +('4', '75', '13', '46854', '290947', '12'), +('4', '75', '13', '83639', '270019', '12'), +('4', '75', '13', '46904', '245798', '12'), +('4', '75', '14', '46856', '295387', '12'), +('4', '75', '14', '46854', '290947', '12'), +('4', '75', '14', '83639', '270019', '12'), +('4', '75', '14', '46904', '245798', '12'), +('4', '75', '11', '46930', '324251', '12'), +('4', '75', '11', '83582', '265966', '12'), +('4', '75', '11', '47325', '230231', '12'), +('4', '75', '11', '39331', '223369', '12'), +('4', '76', '22', '12425', '0', '13'), +('4', '76', '22', '21807', '0', '13'), +('4', '76', '22', '39342', '0', '13'), +('4', '76', '22', '7867', '0', '13'), +('4', '76', '1', '83594', '21634', '13'), +('4', '76', '1', '39276', '21404', '13'), +('4', '76', '1', '80648', '19624', '13'), +('4', '76', '1', '71624', '18196', '13'), +('4', '76', '2', '80524', '29302', '13'), +('4', '76', '2', '70874', '20935', '13'), +('4', '76', '2', '53382', '16350', '13'), +('4', '76', '2', '28605', '15310', '13'), +('4', '76', '3', '39218', '20034', '13'), +('4', '76', '3', '80637', '19652', '13'), +('4', '76', '3', '47245', '17398', '13'), +('4', '76', '3', '39361', '14790', '13'), +('4', '76', '5', '46918', '24650', '13'), +('4', '76', '5', '39349', '20562', '13'), +('4', '76', '5', '80616', '18210', '13'), +('4', '76', '5', '80670', '17974', '13'), +('4', '76', '8', '46885', '27360', '13'), +('4', '76', '8', '80677', '21330', '13'), +('4', '76', '8', '69064', '20581', '13'), +('4', '76', '8', '69165', '20470', '13'), +('4', '76', '6', '80638', '28072', '13'), +('4', '76', '6', '70717', '19784', '13'), +('4', '76', '6', '68757', '18894', '13'), +('4', '76', '6', '83530', '18045', '13'), +('4', '76', '17', '83604', '24811', '13'), +('4', '76', '17', '53387', '18725', '13'), +('4', '76', '17', '70879', '14759', '13'), +('4', '76', '17', '46825', '14412', '13'), +('4', '76', '7', '80525', '21464', '13'), +('4', '76', '7', '53383', '16647', '13'), +('4', '76', '7', '68706', '15343', '13'), +('4', '76', '7', '83565', '13901', '13'), +('4', '76', '9', '80521', '17826', '13'), +('4', '76', '9', '46937', '17032', '13'), +('4', '76', '9', '53384', '16892', '13'), +('4', '76', '9', '39345', '13964', '13'), +('4', '76', '15', '80667', '20832', '13'), +('4', '76', '15', '79909', '20630', '13'), +('4', '76', '15', '80627', '18720', '13'), +('4', '76', '15', '79908', '18246', '13'), +('4', '76', '20', '80678', '30360', '13'), +('4', '76', '20', '46935', '19536', '13'), +('4', '76', '20', '16156', '19090', '13'), +('4', '76', '20', '47283', '18315', '13'), +('4', '76', '12', '53385', '24831', '13'), +('4', '76', '12', '71080', '16744', '13'), +('4', '76', '12', '47213', '16498', '13'), +('4', '76', '12', '39356', '13353', '13'), +('4', '76', '18', '80526', '22192', '13'), +('4', '76', '18', '53388', '17626', '13'), +('4', '76', '18', '83608', '16008', '13'), +('4', '76', '18', '70880', '15645', '13'), +('4', '76', '19', '80523', '19961', '13'), +('4', '76', '19', '53386', '16909', '13'), +('4', '76', '19', '69439', '14352', '13'), +('4', '76', '19', '83573', '12251', '13'), +('4', '76', '13', '46856', '297011', '13'), +('4', '76', '13', '46854', '292511', '13'), +('4', '76', '13', '83639', '271582', '13'), +('4', '76', '13', '80674', '261658', '13'), +('4', '76', '14', '46856', '297011', '13'), +('4', '76', '14', '46854', '292511', '13'), +('4', '76', '14', '83639', '271582', '13'), +('4', '76', '14', '80674', '261658', '13'), +('4', '76', '11', '80655', '333253', '13'), +('4', '76', '11', '46930', '324852', '13'), +('4', '76', '11', '83582', '266446', '13'), +('4', '76', '11', '47325', '230651', '13'), +('4', '77', '22', '12425', '0', '13'), +('4', '77', '22', '21807', '0', '13'), +('4', '77', '22', '39342', '0', '13'), +('4', '77', '22', '7867', '0', '13'), +('4', '77', '1', '83594', '21635', '13'), +('4', '77', '1', '39276', '21404', '13'), +('4', '77', '1', '80648', '19625', '13'), +('4', '77', '1', '71624', '18197', '13'), +('4', '77', '2', '80524', '29303', '13'), +('4', '77', '2', '70874', '20935', '13'), +('4', '77', '2', '53382', '16351', '13'), +('4', '77', '2', '28605', '15310', '13'), +('4', '77', '3', '39218', '20035', '13'), +('4', '77', '3', '80637', '19653', '13'), +('4', '77', '3', '47245', '17398', '13'), +('4', '77', '3', '39361', '14791', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '77', '5', '46918', '24651', '13'), +('4', '77', '5', '39349', '20563', '13'), +('4', '77', '5', '80616', '18210', '13'), +('4', '77', '5', '80670', '17975', '13'), +('4', '77', '8', '46885', '27361', '13'), +('4', '77', '8', '80677', '21331', '13'), +('4', '77', '8', '69064', '20581', '13'), +('4', '77', '8', '69165', '20470', '13'), +('4', '77', '6', '80638', '28073', '13'), +('4', '77', '6', '70717', '19784', '13'), +('4', '77', '6', '68757', '18895', '13'), +('4', '77', '6', '83530', '18045', '13'), +('4', '77', '17', '83604', '24812', '13'), +('4', '77', '17', '53387', '18725', '13'), +('4', '77', '17', '70879', '14760', '13'), +('4', '77', '17', '46825', '14413', '13'), +('4', '77', '7', '80525', '21465', '13'), +('4', '77', '7', '53383', '16647', '13'), +('4', '77', '7', '68706', '15344', '13'), +('4', '77', '7', '83565', '13902', '13'), +('4', '77', '9', '80521', '17827', '13'), +('4', '77', '9', '46937', '17033', '13'), +('4', '77', '9', '53384', '16892', '13'), +('4', '77', '9', '39345', '13965', '13'), +('4', '77', '15', '80667', '20833', '13'), +('4', '77', '15', '79909', '20631', '13'), +('4', '77', '15', '80627', '18721', '13'), +('4', '77', '15', '79908', '18247', '13'), +('4', '77', '20', '80678', '30361', '13'), +('4', '77', '20', '46935', '19536', '13'), +('4', '77', '20', '16156', '19091', '13'), +('4', '77', '20', '47283', '18316', '13'), +('4', '77', '12', '53385', '24832', '13'), +('4', '77', '12', '71080', '16744', '13'), +('4', '77', '12', '47213', '16499', '13'), +('4', '77', '12', '39356', '13353', '13'), +('4', '77', '18', '80526', '22193', '13'), +('4', '77', '18', '53388', '17627', '13'), +('4', '77', '18', '83608', '16009', '13'), +('4', '77', '18', '70880', '15646', '13'), +('4', '77', '19', '80523', '19962', '13'), +('4', '77', '19', '53386', '16910', '13'), +('4', '77', '19', '69439', '14353', '13'), +('4', '77', '19', '83573', '12252', '13'), +('4', '77', '13', '46856', '298634', '13'), +('4', '77', '13', '46854', '294134', '13'), +('4', '77', '13', '83639', '273146', '13'), +('4', '77', '13', '80674', '262079', '13'), +('4', '77', '14', '46856', '298634', '13'), +('4', '77', '14', '46854', '294134', '13'), +('4', '77', '14', '83639', '273146', '13'), +('4', '77', '14', '80674', '262079', '13'), +('4', '77', '11', '80655', '333854', '13'), +('4', '77', '11', '46930', '325452', '13'), +('4', '77', '11', '83582', '266927', '13'), +('4', '77', '11', '47325', '231012', '13'), +('4', '78', '22', '12425', '0', '13'), +('4', '78', '22', '21807', '0', '13'), +('4', '78', '22', '39342', '0', '13'), +('4', '78', '22', '7867', '0', '13'), +('4', '78', '1', '83594', '21636', '13'), +('4', '78', '1', '39276', '21405', '13'), +('4', '78', '1', '80648', '19626', '13'), +('4', '78', '1', '71624', '18197', '13'), +('4', '78', '2', '80524', '29304', '13'), +('4', '78', '2', '70874', '20935', '13'), +('4', '78', '2', '53382', '16351', '13'), +('4', '78', '2', '28605', '15311', '13'), +('4', '78', '3', '39218', '20035', '13'), +('4', '78', '3', '80637', '19654', '13'), +('4', '78', '3', '47245', '17398', '13'), +('4', '78', '3', '39361', '14791', '13'), +('4', '78', '5', '46918', '24651', '13'), +('4', '78', '5', '39349', '20563', '13'), +('4', '78', '5', '80616', '18211', '13'), +('4', '78', '5', '80670', '17976', '13'), +('4', '78', '8', '46885', '27362', '13'), +('4', '78', '8', '80677', '21332', '13'), +('4', '78', '8', '69064', '20582', '13'), +('4', '78', '8', '69165', '20471', '13'), +('4', '78', '6', '80638', '28074', '13'), +('4', '78', '6', '70717', '19785', '13'), +('4', '78', '6', '68757', '18895', '13'), +('4', '78', '6', '83530', '18045', '13'), +('4', '78', '17', '83604', '24813', '13'), +('4', '78', '17', '53387', '18726', '13'), +('4', '78', '17', '70879', '14761', '13'), +('4', '78', '17', '46825', '14413', '13'), +('4', '78', '7', '80525', '21466', '13'), +('4', '78', '7', '53383', '16648', '13'), +('4', '78', '7', '68706', '15344', '13'), +('4', '78', '7', '83565', '13903', '13'), +('4', '78', '9', '80521', '17828', '13'), +('4', '78', '9', '46937', '17034', '13'), +('4', '78', '9', '53384', '16893', '13'), +('4', '78', '9', '39345', '13965', '13'), +('4', '78', '15', '80667', '20834', '13'), +('4', '78', '15', '79909', '20632', '13'), +('4', '78', '15', '80627', '18722', '13'), +('4', '78', '15', '79908', '18248', '13'), +('4', '78', '20', '80678', '30362', '13'), +('4', '78', '20', '46935', '19537', '13'), +('4', '78', '20', '16156', '19091', '13'), +('4', '78', '20', '47283', '18316', '13'), +('4', '78', '12', '53385', '24832', '13'), +('4', '78', '12', '71080', '16745', '13'), +('4', '78', '12', '47213', '16499', '13'), +('4', '78', '12', '39356', '13354', '13'), +('4', '78', '18', '80526', '22194', '13'), +('4', '78', '18', '53388', '17628', '13'), +('4', '78', '18', '83608', '16010', '13'), +('4', '78', '18', '70880', '15647', '13'), +('4', '78', '19', '80523', '19962', '13'), +('4', '78', '19', '53386', '16910', '13'), +('4', '78', '19', '69439', '14353', '13'), +('4', '78', '19', '83573', '12253', '13'), +('4', '78', '13', '46856', '300258', '13'), +('4', '78', '13', '46854', '295758', '13'), +('4', '78', '13', '83639', '274709', '13'), +('4', '78', '13', '80674', '262559', '13'), +('4', '78', '14', '46856', '300258', '13'), +('4', '78', '14', '46854', '295758', '13'), +('4', '78', '14', '83639', '274709', '13'), +('4', '78', '14', '80674', '262559', '13'), +('4', '78', '11', '80655', '334455', '13'), +('4', '78', '11', '46930', '325993', '13'), +('4', '78', '11', '83582', '267407', '13'), +('4', '78', '11', '47325', '231432', '13'), +('4', '79', '22', '12425', '0', '13'), +('4', '79', '22', '21807', '0', '13'), +('4', '79', '22', '39342', '0', '13'), +('4', '79', '22', '7867', '0', '13'), +('4', '79', '1', '83594', '21636', '13'), +('4', '79', '1', '39276', '21405', '13'), +('4', '79', '1', '80648', '19626', '13'), +('4', '79', '1', '71624', '18198', '13'), +('4', '79', '2', '80524', '29305', '13'), +('4', '79', '2', '70874', '20936', '13'), +('4', '79', '2', '53382', '16352', '13'), +('4', '79', '2', '28605', '15311', '13'), +('4', '79', '3', '39218', '20036', '13'), +('4', '79', '3', '80637', '19655', '13'), +('4', '79', '3', '47245', '17398', '13'), +('4', '79', '3', '39361', '14792', '13'), +('4', '79', '5', '46918', '24652', '13'), +('4', '79', '5', '39349', '20564', '13'), +('4', '79', '5', '80616', '18212', '13'), +('4', '79', '5', '80670', '17977', '13'), +('4', '79', '8', '46885', '27363', '13'), +('4', '79', '8', '80677', '21333', '13'), +('4', '79', '8', '69064', '20582', '13'), +('4', '79', '8', '69165', '20471', '13'), +('4', '79', '6', '80638', '28075', '13'), +('4', '79', '6', '70717', '19786', '13'), +('4', '79', '6', '68757', '18895', '13'), +('4', '79', '6', '83530', '18045', '13'), +('4', '79', '17', '83604', '24813', '13'), +('4', '79', '17', '53387', '18726', '13'), +('4', '79', '17', '70879', '14761', '13'), +('4', '79', '17', '46825', '14414', '13'), +('4', '79', '7', '80525', '21467', '13'), +('4', '79', '7', '53383', '16649', '13'), +('4', '79', '7', '68706', '15344', '13'), +('4', '79', '7', '83565', '13904', '13'), +('4', '79', '9', '80521', '17829', '13'), +('4', '79', '9', '46937', '17035', '13'), +('4', '79', '9', '53384', '16894', '13'), +('4', '79', '9', '39345', '13966', '13'), +('4', '79', '15', '80667', '20835', '13'), +('4', '79', '15', '79909', '20632', '13'), +('4', '79', '15', '80627', '18723', '13'), +('4', '79', '15', '79908', '18249', '13'), +('4', '79', '20', '80678', '30363', '13'), +('4', '79', '20', '46935', '19538', '13'), +('4', '79', '20', '16156', '19092', '13'), +('4', '79', '20', '47283', '18316', '13'), +('4', '79', '12', '53385', '24833', '13'), +('4', '79', '12', '71080', '16745', '13'), +('4', '79', '12', '47213', '16500', '13'), +('4', '79', '12', '39356', '13354', '13'), +('4', '79', '18', '80526', '22195', '13'), +('4', '79', '18', '53388', '17628', '13'), +('4', '79', '18', '83608', '16011', '13'), +('4', '79', '18', '70880', '15648', '13'), +('4', '79', '19', '80523', '19963', '13'), +('4', '79', '19', '53386', '16911', '13'), +('4', '79', '19', '69439', '14354', '13'), +('4', '79', '19', '83573', '12254', '13'), +('4', '79', '13', '46856', '301822', '13'), +('4', '79', '13', '46854', '297322', '13'), +('4', '79', '13', '83639', '276272', '13'), +('4', '79', '13', '80674', '263040', '13'), +('4', '79', '14', '46856', '301822', '13'), +('4', '79', '14', '46854', '297322', '13'), +('4', '79', '14', '83639', '276272', '13'), +('4', '79', '14', '80674', '263040', '13'), +('4', '79', '11', '80655', '335055', '13'), +('4', '79', '11', '46930', '326594', '13'), +('4', '79', '11', '83582', '267887', '13'), +('4', '79', '11', '47325', '231853', '13'), +('4', '80', '22', '12425', '0', '14'), +('4', '80', '22', '21807', '0', '14'), +('4', '80', '22', '39342', '0', '14'), +('4', '80', '22', '7867', '0', '14'), +('4', '80', '1', '102641', '27259', '14'), +('4', '80', '1', '102597', '26146', '14'), +('4', '80', '1', '102625', '25945', '14'), +('4', '80', '1', '102639', '25763', '14'), +('4', '80', '2', '80524', '29306', '14'), +('4', '80', '2', '70874', '20936', '14'), +('4', '80', '2', '102010', '19210', '14'), +('4', '80', '2', '102262', '17168', '14'), +('4', '80', '3', '102726', '27650', '14'), +('4', '80', '3', '102598', '27636', '14'), +('4', '80', '3', '102626', '27313', '14'), +('4', '80', '3', '102557', '23750', '14'), +('4', '80', '5', '102599', '28088', '14'), +('4', '80', '5', '102627', '26176', '14'), +('4', '80', '5', '102745', '25822', '14'), +('4', '80', '5', '46918', '24653', '14'), +('4', '80', '8', '102601', '36898', '14'), +('4', '80', '8', '102552', '33391', '14'), +('4', '80', '8', '102527', '28711', '14'), +('4', '80', '8', '46885', '27364', '14'), +('4', '80', '6', '80638', '28076', '14'), +('4', '80', '6', '102600', '27166', '14'), +('4', '80', '6', '102628', '26526', '14'), +('4', '80', '6', '102558', '24029', '14'), +('4', '80', '17', '83604', '24814', '14'), +('4', '80', '17', '102013', '19992', '14'), +('4', '80', '17', '102265', '18903', '14'), +('4', '80', '17', '53387', '18726', '14'), +('4', '80', '7', '80525', '21468', '14'), +('4', '80', '7', '102011', '19843', '14'), +('4', '80', '7', '102263', '18323', '14'), +('4', '80', '7', '53383', '16650', '14'), +('4', '80', '9', '67098', '36440', '14'), +('4', '80', '9', '80521', '17830', '14'), +('4', '80', '9', '46937', '17036', '14'), +('4', '80', '9', '53384', '16894', '14'), +('4', '80', '15', '102636', '27674', '14'), +('4', '80', '15', '102630', '27521', '14'), +('4', '80', '15', '102637', '26947', '14'), +('4', '80', '15', '102602', '26603', '14'), +('4', '80', '20', '102631', '36880', '14'), +('4', '80', '20', '102603', '36461', '14'), +('4', '80', '20', '102553', '32350', '14'), +('4', '80', '20', '80678', '30364', '14'), +('4', '80', '12', '53385', '24834', '14'), +('4', '80', '12', '102260', '16904', '14'), +('4', '80', '12', '71080', '16745', '14'), +('4', '80', '12', '47213', '16500', '14'), +('4', '80', '18', '80526', '22196', '14'), +('4', '80', '18', '102012', '20120', '14'), +('4', '80', '18', '102264', '18206', '14'), +('4', '80', '18', '53388', '17629', '14'), +('4', '80', '19', '76131', '22545', '14'), +('4', '80', '19', '80523', '19964', '14'), +('4', '80', '19', '53386', '16911', '14'), +('4', '80', '19', '102261', '16491', '14'), +('4', '80', '13', '102649', '346495', '14'), +('4', '80', '13', '102660', '342346', '14'), +('4', '80', '13', '102655', '340809', '14'), +('4', '80', '13', '102720', '332818', '14'), +('4', '80', '14', '102649', '346495', '14'), +('4', '80', '14', '102661', '343265', '14'), +('4', '80', '14', '102660', '342346', '14'), +('4', '80', '14', '102655', '340809', '14'), +('4', '80', '11', '102667', '428143', '14'), +('4', '80', '11', '102589', '376307', '14'), +('4', '80', '11', '80655', '335656', '14'), +('4', '80', '11', '102524', '328792', '14'), +('4', '81', '22', '12425', '0', '14'), +('4', '81', '22', '21807', '0', '14'), +('4', '81', '22', '39342', '0', '14'), +('4', '81', '22', '7867', '0', '14'), +('4', '81', '1', '102641', '27259', '14'), +('4', '81', '1', '102597', '26147', '14'), +('4', '81', '1', '102625', '25946', '14'), +('4', '81', '1', '102639', '25764', '14'), +('4', '81', '2', '80524', '29307', '14'), +('4', '81', '2', '70874', '20936', '14'), +('4', '81', '2', '102010', '19211', '14'), +('4', '81', '2', '102262', '17168', '14'), +('4', '81', '3', '102726', '27651', '14'), +('4', '81', '3', '102598', '27637', '14'), +('4', '81', '3', '102626', '27313', '14'), +('4', '81', '3', '102557', '23751', '14'), +('4', '81', '5', '102599', '28089', '14'), +('4', '81', '5', '102627', '26176', '14'), +('4', '81', '5', '102745', '25823', '14'), +('4', '81', '5', '46918', '24654', '14'), +('4', '81', '8', '102601', '36899', '14'), +('4', '81', '8', '102552', '33392', '14'), +('4', '81', '8', '102527', '28712', '14'), +('4', '81', '8', '46885', '27365', '14'), +('4', '81', '6', '80638', '28076', '14'), +('4', '81', '6', '102600', '27167', '14'), +('4', '81', '6', '102628', '26527', '14'), +('4', '81', '6', '102558', '24030', '14'), +('4', '81', '17', '83604', '24815', '14'), +('4', '81', '17', '102013', '19993', '14'), +('4', '81', '17', '102265', '18904', '14'), +('4', '81', '17', '53387', '18726', '14'), +('4', '81', '7', '80525', '21468', '14'), +('4', '81', '7', '102011', '19844', '14'), +('4', '81', '7', '102263', '18324', '14'), +('4', '81', '7', '53383', '16651', '14'), +('4', '81', '9', '67098', '36896', '14'), +('4', '81', '9', '80521', '17831', '14'), +('4', '81', '9', '46937', '17037', '14'), +('4', '81', '9', '53384', '16895', '14'), +('4', '81', '15', '102636', '27675', '14'), +('4', '81', '15', '102630', '27521', '14'), +('4', '81', '15', '102637', '26948', '14'), +('4', '81', '15', '102602', '26603', '14'), +('4', '81', '20', '102631', '36882', '14'), +('4', '81', '20', '102603', '36462', '14'), +('4', '81', '20', '102553', '32351', '14'), +('4', '81', '20', '80678', '30365', '14'), +('4', '81', '12', '53385', '24834', '14'), +('4', '81', '12', '102260', '16905', '14'), +('4', '81', '12', '71080', '16746', '14'), +('4', '81', '12', '47213', '16501', '14'), +('4', '81', '18', '80526', '22197', '14'), +('4', '81', '18', '102012', '20121', '14'), +('4', '81', '18', '102264', '18207', '14'), +('4', '81', '18', '53388', '17630', '14'), +('4', '81', '19', '76131', '22545', '14'), +('4', '81', '19', '80523', '19965', '14'), +('4', '81', '19', '53386', '16912', '14'), +('4', '81', '19', '102261', '16491', '14'), +('4', '81', '13', '102649', '347298', '14'), +('4', '81', '13', '102660', '343149', '14'), +('4', '81', '13', '102655', '341613', '14'), +('4', '81', '13', '102720', '333583', '14'), +('4', '81', '14', '102649', '347298', '14'), +('4', '81', '14', '102661', '344068', '14'), +('4', '81', '14', '102660', '343149', '14'), +('4', '81', '14', '102655', '341613', '14'), +('4', '81', '11', '102667', '428863', '14'), +('4', '81', '11', '102589', '376968', '14'), +('4', '81', '11', '80655', '336257', '14'), +('4', '81', '11', '102524', '329392', '14'), +('4', '82', '22', '12425', '0', '14'), +('4', '82', '22', '21807', '0', '14'), +('4', '82', '22', '39342', '0', '14'), +('4', '82', '22', '7867', '0', '14'), +('4', '82', '1', '102641', '27260', '14'), +('4', '82', '1', '102597', '26148', '14'), +('4', '82', '1', '102625', '25947', '14'), +('4', '82', '1', '102639', '25765', '14'), +('4', '82', '2', '80524', '29308', '14'), +('4', '82', '2', '70874', '20936', '14'), +('4', '82', '2', '102010', '19211', '14'), +('4', '82', '2', '102262', '17169', '14'), +('4', '82', '3', '102726', '27652', '14'), +('4', '82', '3', '102598', '27637', '14'), +('4', '82', '3', '102626', '27314', '14'), +('4', '82', '3', '102557', '23752', '14'), +('4', '82', '5', '102599', '28090', '14'), +('4', '82', '5', '102627', '26177', '14'), +('4', '82', '5', '102745', '25824', '14'), +('4', '82', '5', '46918', '24654', '14'), +('4', '82', '8', '102601', '36901', '14'), +('4', '82', '8', '102552', '33393', '14'), +('4', '82', '8', '102527', '28712', '14'), +('4', '82', '8', '46885', '27366', '14'), +('4', '82', '6', '80638', '28077', '14'), +('4', '82', '6', '102600', '27167', '14'), +('4', '82', '6', '102628', '26527', '14'), +('4', '82', '6', '102558', '24031', '14'), +('4', '82', '17', '83604', '24816', '14'), +('4', '82', '17', '102013', '19994', '14'), +('4', '82', '17', '102265', '18905', '14'), +('4', '82', '17', '53387', '18726', '14'), +('4', '82', '7', '80525', '21469', '14'), +('4', '82', '7', '102011', '19845', '14'), +('4', '82', '7', '102263', '18324', '14'), +('4', '82', '7', '53383', '16651', '14'), +('4', '82', '9', '67098', '37353', '14'), +('4', '82', '9', '80521', '17831', '14'), +('4', '82', '9', '46937', '17038', '14'), +('4', '82', '9', '53384', '16896', '14'), +('4', '82', '15', '102636', '27676', '14'), +('4', '82', '15', '102630', '27522', '14'), +('4', '82', '15', '102637', '26948', '14'), +('4', '82', '15', '102602', '26604', '14'), +('4', '82', '20', '102631', '36883', '14'), +('4', '82', '20', '102603', '36463', '14'), +('4', '82', '20', '102553', '32351', '14'), +('4', '82', '20', '80678', '30366', '14'), +('4', '82', '12', '53385', '24835', '14'), +('4', '82', '12', '102260', '16906', '14'), +('4', '82', '12', '71080', '16746', '14'), +('4', '82', '12', '47213', '16501', '14'), +('4', '82', '18', '80526', '22198', '14'), +('4', '82', '18', '102012', '20122', '14'), +('4', '82', '18', '102264', '18208', '14'), +('4', '82', '18', '53388', '17630', '14'), +('4', '82', '19', '76131', '22545', '14'), +('4', '82', '19', '80523', '19966', '14'), +('4', '82', '19', '53386', '16913', '14'), +('4', '82', '19', '102261', '16492', '14'), +('4', '82', '13', '102649', '348101', '14'), +('4', '82', '13', '102660', '343952', '14'), +('4', '82', '13', '102655', '342416', '14'), +('4', '82', '13', '102720', '334349', '14'), +('4', '82', '14', '102649', '348101', '14'), +('4', '82', '14', '102661', '344931', '14'), +('4', '82', '14', '102660', '343952', '14'), +('4', '82', '14', '102655', '342416', '14'), +('4', '82', '11', '102667', '429644', '14'), +('4', '82', '11', '102589', '377628', '14'), +('4', '82', '11', '80655', '336857', '14'), +('4', '82', '11', '102524', '329992', '14'), +('4', '83', '22', '12425', '0', '14'), +('4', '83', '22', '21807', '0', '14'), +('4', '83', '22', '39342', '0', '14'), +('4', '83', '22', '7867', '0', '14'), +('4', '83', '1', '102641', '27261', '14'), +('4', '83', '1', '102597', '26149', '14'), +('4', '83', '1', '102625', '25948', '14'), +('4', '83', '1', '102639', '25766', '14'), +('4', '83', '2', '80524', '29309', '14'), +('4', '83', '2', '70874', '20936', '14'), +('4', '83', '2', '102010', '19212', '14'), +('4', '83', '2', '102262', '17169', '14'), +('4', '83', '3', '102726', '27652', '14'), +('4', '83', '3', '102598', '27638', '14'), +('4', '83', '3', '102626', '27315', '14'), +('4', '83', '3', '102557', '23752', '14'), +('4', '83', '5', '102599', '28091', '14'), +('4', '83', '5', '102627', '26177', '14'), +('4', '83', '5', '102745', '25824', '14'), +('4', '83', '5', '46918', '24655', '14'), +('4', '83', '8', '102601', '36902', '14'), +('4', '83', '8', '102552', '33393', '14'), +('4', '83', '8', '102527', '28713', '14'), +('4', '83', '8', '46885', '27367', '14'), +('4', '83', '6', '80638', '28078', '14'), +('4', '83', '6', '102600', '27168', '14'), +('4', '83', '6', '102628', '26528', '14'), +('4', '83', '6', '102558', '24032', '14'), +('4', '83', '17', '83604', '24816', '14'), +('4', '83', '17', '102013', '19995', '14'), +('4', '83', '17', '102265', '18906', '14'), +('4', '83', '17', '53387', '18727', '14'), +('4', '83', '7', '80525', '21470', '14'), +('4', '83', '7', '102011', '19846', '14'), +('4', '83', '7', '102263', '18324', '14'), +('4', '83', '7', '53383', '16652', '14'), +('4', '83', '9', '67098', '37809', '14'), +('4', '83', '9', '80521', '17832', '14'), +('4', '83', '9', '46937', '17039', '14'), +('4', '83', '9', '53384', '16897', '14'), +('4', '83', '15', '102636', '27677', '14'), +('4', '83', '15', '102630', '27523', '14'), +('4', '83', '15', '102637', '26949', '14'), +('4', '83', '15', '102602', '26605', '14'), +('4', '83', '20', '102631', '36884', '14'), +('4', '83', '20', '102603', '36464', '14'), +('4', '83', '20', '102553', '32352', '14'), +('4', '83', '20', '80678', '30366', '14'), +('4', '83', '12', '53385', '24835', '14'), +('4', '83', '12', '102260', '16907', '14'), +('4', '83', '12', '71080', '16747', '14'), +('4', '83', '12', '47213', '16502', '14'), +('4', '83', '18', '80526', '22199', '14'), +('4', '83', '18', '102012', '20123', '14'), +('4', '83', '18', '102264', '18209', '14'), +('4', '83', '18', '53388', '17631', '14'), +('4', '83', '19', '76131', '22546', '14'), +('4', '83', '19', '80523', '19967', '14'), +('4', '83', '19', '53386', '16913', '14'), +('4', '83', '19', '102261', '16492', '14'), +('4', '83', '13', '102649', '348965', '14'), +('4', '83', '13', '102660', '344755', '14'), +('4', '83', '13', '102655', '343220', '14'), +('4', '83', '13', '102720', '335114', '14'), +('4', '83', '14', '102649', '348965', '14'), +('4', '83', '14', '102661', '345735', '14'), +('4', '83', '14', '102660', '344755', '14'), +('4', '83', '14', '102655', '343220', '14'), +('4', '83', '11', '102667', '430425', '14'), +('4', '83', '11', '102589', '378289', '14'), +('4', '83', '11', '80655', '337458', '14'), +('4', '83', '11', '102524', '330593', '14'), +('4', '84', '22', '12425', '0', '14'), +('4', '84', '22', '21807', '0', '14'), +('4', '84', '22', '39342', '0', '14'), +('4', '84', '22', '7867', '0', '14'), +('4', '84', '1', '102641', '27262', '14'), +('4', '84', '1', '102597', '26150', '14'), +('4', '84', '1', '102625', '25949', '14'), +('4', '84', '1', '102639', '25766', '14'), +('4', '84', '2', '80524', '29309', '14'), +('4', '84', '2', '70874', '20937', '14'), +('4', '84', '2', '102010', '19213', '14'), +('4', '84', '2', '102262', '17169', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '84', '3', '102726', '27653', '14'), +('4', '84', '3', '102598', '27639', '14'), +('4', '84', '3', '102626', '27316', '14'), +('4', '84', '3', '102557', '23753', '14'), +('4', '84', '5', '102599', '28091', '14'), +('4', '84', '5', '102627', '26178', '14'), +('4', '84', '5', '102745', '25825', '14'), +('4', '84', '5', '46918', '24656', '14'), +('4', '84', '8', '102601', '36903', '14'), +('4', '84', '8', '102552', '33394', '14'), +('4', '84', '8', '102527', '28714', '14'), +('4', '84', '8', '46885', '27368', '14'), +('4', '84', '6', '80638', '28079', '14'), +('4', '84', '6', '102600', '27169', '14'), +('4', '84', '6', '102628', '26529', '14'), +('4', '84', '6', '102558', '24033', '14'), +('4', '84', '17', '83604', '24817', '14'), +('4', '84', '17', '102013', '19996', '14'), +('4', '84', '17', '102265', '18907', '14'), +('4', '84', '17', '53387', '18727', '14'), +('4', '84', '7', '80525', '21471', '14'), +('4', '84', '7', '102011', '19847', '14'), +('4', '84', '7', '102263', '18325', '14'), +('4', '84', '7', '53383', '16653', '14'), +('4', '84', '9', '67098', '38265', '14'), +('4', '84', '9', '80521', '17833', '14'), +('4', '84', '9', '46937', '17040', '14'), +('4', '84', '9', '53384', '16897', '14'), +('4', '84', '15', '102636', '27678', '14'), +('4', '84', '15', '102630', '27523', '14'), +('4', '84', '15', '102637', '26949', '14'), +('4', '84', '15', '102602', '26606', '14'), +('4', '84', '20', '102631', '36885', '14'), +('4', '84', '20', '102603', '36464', '14'), +('4', '84', '20', '102553', '32352', '14'), +('4', '84', '20', '80678', '30368', '14'), +('4', '84', '12', '53385', '24836', '14'), +('4', '84', '12', '102260', '16908', '14'), +('4', '84', '12', '71080', '16747', '14'), +('4', '84', '12', '47213', '16502', '14'), +('4', '84', '18', '80526', '22200', '14'), +('4', '84', '18', '102012', '20124', '14'), +('4', '84', '18', '102264', '18210', '14'), +('4', '84', '18', '53388', '17632', '14'), +('4', '84', '19', '76131', '22546', '14'), +('4', '84', '19', '80523', '19968', '14'), +('4', '84', '19', '53386', '16914', '14'), +('4', '84', '19', '102261', '16493', '14'), +('4', '84', '13', '102649', '349768', '14'), +('4', '84', '13', '102660', '345558', '14'), +('4', '84', '13', '102655', '344023', '14'), +('4', '84', '13', '102720', '335880', '14'), +('4', '84', '14', '102649', '349768', '14'), +('4', '84', '14', '102661', '346538', '14'), +('4', '84', '14', '102660', '345558', '14'), +('4', '84', '14', '102655', '344023', '14'), +('4', '84', '11', '102667', '431146', '14'), +('4', '84', '11', '102589', '378950', '14'), +('4', '84', '11', '80655', '338059', '14'), +('4', '84', '11', '102524', '331193', '14'), +('4', '85', '22', '39342', '0', '16'), +('4', '85', '22', '12425', '0', '16'), +('4', '85', '22', '7867', '0', '16'), +('4', '85', '22', '23597', '0', '16'), +('4', '85', '1', '111300', '44839', '16'), +('4', '85', '1', '111302', '44661', '16'), +('4', '85', '1', '111305', '44256', '16'), +('4', '85', '1', '111307', '43911', '16'), +('4', '85', '2', '94056', '31587', '16'), +('4', '85', '2', '62985', '30141', '16'), +('4', '85', '2', '80524', '29310', '16'), +('4', '85', '2', '104410', '24702', '16'), +('4', '85', '3', '111315', '44821', '16'), +('4', '85', '3', '111313', '44324', '16'), +('4', '85', '3', '111316', '43227', '16'), +('4', '85', '3', '111014', '40515', '16'), +('4', '85', '5', '111317', '44698', '16'), +('4', '85', '5', '111318', '44015', '16'), +('4', '85', '5', '111320', '42616', '16'), +('4', '85', '5', '111319', '42327', '16'), +('4', '85', '8', '111331', '45155', '16'), +('4', '85', '8', '111332', '44373', '16'), +('4', '85', '8', '111328', '43793', '16'), +('4', '85', '8', '111030', '40879', '16'), +('4', '85', '6', '111324', '44303', '16'), +('4', '85', '6', '111322', '44126', '16'), +('4', '85', '6', '106812', '44090', '16'), +('4', '85', '6', '111326', '42769', '16'), +('4', '85', '17', '56046', '32615', '16'), +('4', '85', '17', '56083', '30893', '16'), +('4', '85', '17', '81765', '29783', '16'), +('4', '85', '17', '104413', '26912', '16'), +('4', '85', '7', '94053', '32674', '16'), +('4', '85', '7', '56079', '30069', '16'), +('4', '85', '7', '104411', '29002', '16'), +('4', '85', '7', '80525', '21472', '16'), +('4', '85', '9', '67098', '38721', '16'), +('4', '85', '9', '56033', '30730', '16'), +('4', '85', '9', '56031', '30622', '16'), +('4', '85', '9', '56070', '30486', '16'), +('4', '85', '15', '111342', '45676', '16'), +('4', '85', '15', '111348', '45523', '16'), +('4', '85', '15', '111343', '45152', '16'), +('4', '85', '15', '111345', '43598', '16'), +('4', '85', '20', '111354', '54329', '16'), +('4', '85', '20', '111352', '53817', '16'), +('4', '85', '20', '111355', '53413', '16'), +('4', '85', '20', '111351', '51713', '16'), +('4', '85', '12', '56073', '29815', '16'), +('4', '85', '12', '81795', '28908', '16'), +('4', '85', '12', '104408', '26451', '16'), +('4', '85', '12', '53385', '24837', '16'), +('4', '85', '18', '62986', '30649', '16'), +('4', '85', '18', '56041', '30187', '16'), +('4', '85', '18', '94054', '29005', '16'), +('4', '85', '18', '104412', '28808', '16'), +('4', '85', '19', '62990', '31970', '16'), +('4', '85', '19', '56037', '30667', '16'), +('4', '85', '19', '56075', '28730', '16'), +('4', '85', '19', '104409', '28229', '16'), +('4', '85', '13', '111815', '494909', '16'), +('4', '85', '13', '111871', '494878', '16'), +('4', '85', '13', '111515', '477140', '16'), +('4', '85', '13', '111512', '476115', '16'), +('4', '85', '14', '111815', '494909', '16'), +('4', '85', '14', '111871', '494878', '16'), +('4', '85', '14', '111515', '477140', '16'), +('4', '85', '14', '111512', '476115', '16'), +('4', '85', '11', '111529', '537079', '16'), +('4', '85', '11', '111229', '514964', '16'), +('4', '85', '11', '106769', '450919', '16'), +('4', '85', '11', '62939', '438770', '16'), +('4', '85', '22', '12425', '0', '15'), +('4', '85', '22', '21807', '0', '15'), +('4', '85', '22', '39342', '0', '15'), +('4', '85', '22', '7867', '0', '15'), +('4', '85', '1', '107054', '37736', '15'), +('4', '85', '1', '106840', '35466', '15'), +('4', '85', '1', '107053', '35010', '15'), +('4', '85', '1', '106839', '32988', '15'), +('4', '85', '2', '94056', '31587', '15'), +('4', '85', '2', '62985', '30141', '15'), +('4', '85', '2', '80524', '29310', '15'), +('4', '85', '2', '104410', '24702', '15'), +('4', '85', '3', '107055', '35231', '15'), +('4', '85', '3', '107020', '34195', '15'), +('4', '85', '3', '106841', '33246', '15'), +('4', '85', '3', '106724', '32908', '15'), +('4', '85', '5', '107056', '34842', '15'), +('4', '85', '5', '107021', '34346', '15'), +('4', '85', '5', '106725', '32316', '15'), +('4', '85', '5', '106811', '31989', '15'), +('4', '85', '8', '94070', '40015', '15'), +('4', '85', '8', '106716', '39193', '15'), +('4', '85', '8', '102601', '36904', '15'), +('4', '85', '8', '107023', '36062', '15'), +('4', '85', '6', '106812', '44090', '15'), +('4', '85', '6', '106843', '42492', '15'), +('4', '85', '6', '107022', '36374', '15'), +('4', '85', '6', '106600', '35881', '15'), +('4', '85', '17', '56046', '32615', '15'), +('4', '85', '17', '56083', '30893', '15'), +('4', '85', '17', '81765', '29783', '15'), +('4', '85', '17', '104413', '26912', '15'), +('4', '85', '7', '94053', '32674', '15'), +('4', '85', '7', '56079', '30069', '15'), +('4', '85', '7', '104411', '29002', '15'), +('4', '85', '7', '80525', '21472', '15'), +('4', '85', '9', '67098', '38721', '15'), +('4', '85', '9', '56033', '30730', '15'), +('4', '85', '9', '56031', '30622', '15'), +('4', '85', '9', '56070', '30486', '15'), +('4', '85', '15', '107025', '37745', '15'), +('4', '85', '15', '106815', '35705', '15'), +('4', '85', '15', '107051', '34369', '15'), +('4', '85', '15', '107062', '33914', '15'), +('4', '85', '20', '107026', '43870', '15'), +('4', '85', '20', '107059', '43851', '15'), +('4', '85', '20', '106845', '41453', '15'), +('4', '85', '20', '106816', '41353', '15'), +('4', '85', '12', '56073', '29815', '15'), +('4', '85', '12', '81795', '28908', '15'), +('4', '85', '12', '104408', '26451', '15'), +('4', '85', '12', '53385', '24837', '15'), +('4', '85', '18', '62986', '30649', '15'), +('4', '85', '18', '56041', '30187', '15'), +('4', '85', '18', '94054', '29005', '15'), +('4', '85', '18', '104412', '28808', '15'), +('4', '85', '19', '62990', '31970', '15'), +('4', '85', '19', '56037', '30667', '15'), +('4', '85', '19', '56075', '28730', '15'), +('4', '85', '19', '104409', '28229', '15'), +('4', '85', '13', '106761', '405061', '15'), +('4', '85', '13', '106854', '400495', '15'), +('4', '85', '13', '106858', '393292', '15'), +('4', '85', '13', '106853', '390926', '15'), +('4', '85', '14', '106761', '405061', '15'), +('4', '85', '14', '106854', '400495', '15'), +('4', '85', '14', '106858', '393292', '15'), +('4', '85', '14', '106853', '390926', '15'), +('4', '85', '11', '106769', '450919', '15'), +('4', '85', '11', '62939', '438770', '15'), +('4', '85', '11', '102667', '431927', '15'), +('4', '85', '11', '106616', '413755', '15'), +('4', '86', '22', '39342', '0', '16'), +('4', '86', '22', '12425', '0', '16'), +('4', '86', '22', '7867', '0', '16'), +('4', '86', '22', '23597', '0', '16'), +('4', '86', '1', '111300', '44840', '16'), +('4', '86', '1', '111302', '44662', '16'), +('4', '86', '1', '111305', '44257', '16'), +('4', '86', '1', '111307', '43912', '16'), +('4', '86', '2', '94056', '31588', '16'), +('4', '86', '2', '62985', '30142', '16'), +('4', '86', '2', '80524', '29311', '16'), +('4', '86', '2', '104410', '24703', '16'), +('4', '86', '3', '111315', '44822', '16'), +('4', '86', '3', '111313', '44325', '16'), +('4', '86', '3', '111316', '43228', '16'), +('4', '86', '3', '111014', '40516', '16'), +('4', '86', '5', '111317', '44699', '16'), +('4', '86', '5', '111318', '44016', '16'), +('4', '86', '5', '111320', '42617', '16'), +('4', '86', '5', '111319', '42328', '16'), +('4', '86', '8', '111331', '45156', '16'), +('4', '86', '8', '111332', '44374', '16'), +('4', '86', '8', '111328', '43793', '16'), +('4', '86', '8', '111030', '40880', '16'), +('4', '86', '6', '111324', '44303', '16'), +('4', '86', '6', '111322', '44126', '16'), +('4', '86', '6', '106812', '44091', '16'), +('4', '86', '6', '111326', '42771', '16'), +('4', '86', '17', '56046', '32616', '16'), +('4', '86', '17', '56083', '30894', '16'), +('4', '86', '17', '81765', '29784', '16'), +('4', '86', '17', '104413', '26913', '16'), +('4', '86', '7', '94053', '32674', '16'), +('4', '86', '7', '56079', '30069', '16'), +('4', '86', '7', '104411', '29003', '16'), +('4', '86', '7', '80525', '21473', '16'), +('4', '86', '9', '67098', '39178', '16'), +('4', '86', '9', '56033', '30731', '16'), +('4', '86', '9', '56031', '30623', '16'), +('4', '86', '9', '56070', '30486', '16'), +('4', '86', '15', '111342', '45677', '16'), +('4', '86', '15', '111348', '45523', '16'), +('4', '86', '15', '111343', '45152', '16'), +('4', '86', '15', '111345', '43599', '16'), +('4', '86', '20', '111354', '54330', '16'), +('4', '86', '20', '111352', '53818', '16'), +('4', '86', '20', '111355', '53413', '16'), +('4', '86', '20', '111351', '51713', '16'), +('4', '86', '12', '56073', '29816', '16'), +('4', '86', '12', '81795', '28909', '16'), +('4', '86', '12', '104408', '26452', '16'), +('4', '86', '12', '53385', '24837', '16'), +('4', '86', '18', '62986', '30650', '16'), +('4', '86', '18', '56041', '30187', '16'), +('4', '86', '18', '94054', '29005', '16'), +('4', '86', '18', '104412', '28809', '16'), +('4', '86', '19', '62990', '31970', '16'), +('4', '86', '19', '56037', '30668', '16'), +('4', '86', '19', '56075', '28731', '16'), +('4', '86', '19', '104409', '28229', '16'), +('4', '86', '13', '111815', '496170', '16'), +('4', '86', '13', '111871', '496078', '16'), +('4', '86', '13', '111515', '478341', '16'), +('4', '86', '13', '111512', '477316', '16'), +('4', '86', '14', '111815', '496170', '16'), +('4', '86', '14', '111871', '496078', '16'), +('4', '86', '14', '111515', '478341', '16'), +('4', '86', '14', '111512', '477316', '16'), +('4', '86', '11', '111529', '538040', '16'), +('4', '86', '11', '111229', '515865', '16'), +('4', '86', '11', '106769', '451700', '16'), +('4', '86', '11', '62939', '439551', '16'), +('4', '87', '22', '39342', '0', '16'), +('4', '87', '22', '12425', '0', '16'), +('4', '87', '22', '7867', '0', '16'), +('4', '87', '22', '23597', '0', '16'), +('4', '87', '1', '111300', '44841', '16'), +('4', '87', '1', '111302', '44663', '16'), +('4', '87', '1', '111305', '44258', '16'), +('4', '87', '1', '111307', '43912', '16'), +('4', '87', '2', '94056', '31589', '16'), +('4', '87', '2', '62985', '30143', '16'), +('4', '87', '2', '80524', '29312', '16'), +('4', '87', '2', '104410', '24703', '16'), +('4', '87', '3', '111315', '44823', '16'), +('4', '87', '3', '111313', '44325', '16'), +('4', '87', '3', '111316', '43229', '16'), +('4', '87', '3', '111014', '40517', '16'), +('4', '87', '5', '111317', '44700', '16'), +('4', '87', '5', '111318', '44016', '16'), +('4', '87', '5', '111320', '42617', '16'), +('4', '87', '5', '111319', '42328', '16'), +('4', '87', '8', '111331', '45157', '16'), +('4', '87', '8', '111332', '44375', '16'), +('4', '87', '8', '111328', '43794', '16'), +('4', '87', '8', '111030', '40881', '16'), +('4', '87', '6', '111324', '44304', '16'), +('4', '87', '6', '111322', '44127', '16'), +('4', '87', '6', '106812', '44091', '16'), +('4', '87', '6', '111326', '42772', '16'), +('4', '87', '17', '56046', '32617', '16'), +('4', '87', '17', '56083', '30894', '16'), +('4', '87', '17', '81765', '29785', '16'), +('4', '87', '17', '104413', '26914', '16'), +('4', '87', '7', '94053', '32675', '16'), +('4', '87', '7', '56079', '30070', '16'), +('4', '87', '7', '104411', '29005', '16'), +('4', '87', '7', '80525', '21474', '16'), +('4', '87', '9', '67098', '39634', '16'), +('4', '87', '9', '56033', '30732', '16'), +('4', '87', '9', '56031', '30623', '16'), +('4', '87', '9', '56070', '30487', '16'), +('4', '87', '15', '111342', '45677', '16'), +('4', '87', '15', '111348', '45524', '16'), +('4', '87', '15', '111343', '45153', '16'), +('4', '87', '15', '111345', '43599', '16'), +('4', '87', '20', '111354', '54331', '16'), +('4', '87', '20', '111352', '53819', '16'), +('4', '87', '20', '111355', '53414', '16'), +('4', '87', '20', '111351', '51714', '16'), +('4', '87', '12', '56073', '29817', '16'), +('4', '87', '12', '81795', '28910', '16'), +('4', '87', '12', '104408', '26452', '16'), +('4', '87', '12', '53385', '24838', '16'), +('4', '87', '18', '62986', '30651', '16'), +('4', '87', '18', '56041', '30188', '16'), +('4', '87', '18', '94054', '29006', '16'), +('4', '87', '18', '104412', '28809', '16'), +('4', '87', '19', '62990', '31971', '16'), +('4', '87', '19', '56037', '30669', '16'), +('4', '87', '19', '56075', '28732', '16'), +('4', '87', '19', '104409', '28230', '16'), +('4', '87', '13', '111815', '497371', '16'), +('4', '87', '13', '111871', '497339', '16'), +('4', '87', '13', '111515', '479541', '16'), +('4', '87', '13', '111512', '478457', '16'), +('4', '87', '14', '111815', '497371', '16'), +('4', '87', '14', '111871', '497339', '16'), +('4', '87', '14', '111515', '479541', '16'), +('4', '87', '14', '111512', '478457', '16'), +('4', '87', '11', '111529', '538941', '16'), +('4', '87', '11', '111229', '516766', '16'), +('4', '87', '11', '106769', '452481', '16'), +('4', '87', '11', '62939', '440331', '16'), +('4', '88', '22', '39342', '0', '16'), +('4', '88', '22', '12425', '0', '16'), +('4', '88', '22', '7867', '0', '16'), +('4', '88', '22', '23597', '0', '16'), +('4', '88', '1', '111300', '44841', '16'), +('4', '88', '1', '111302', '44664', '16'), +('4', '88', '1', '111305', '44259', '16'), +('4', '88', '1', '111307', '43913', '16'), +('4', '88', '2', '94056', '31590', '16'), +('4', '88', '2', '62985', '30144', '16'), +('4', '88', '2', '80524', '29313', '16'), +('4', '88', '2', '104410', '24704', '16'), +('4', '88', '3', '111315', '44824', '16'), +('4', '88', '3', '111313', '44326', '16'), +('4', '88', '3', '111316', '43230', '16'), +('4', '88', '3', '111014', '40518', '16'), +('4', '88', '5', '111317', '44701', '16'), +('4', '88', '5', '111318', '44017', '16'), +('4', '88', '5', '111320', '42618', '16'), +('4', '88', '5', '111319', '42329', '16'), +('4', '88', '8', '111331', '45158', '16'), +('4', '88', '8', '111332', '44376', '16'), +('4', '88', '8', '111328', '43795', '16'), +('4', '88', '8', '111030', '40882', '16'), +('4', '88', '6', '111324', '44305', '16'), +('4', '88', '6', '111322', '44127', '16'), +('4', '88', '6', '106812', '44092', '16'), +('4', '88', '6', '111326', '42773', '16'), +('4', '88', '17', '56046', '32618', '16'), +('4', '88', '17', '56083', '30895', '16'), +('4', '88', '17', '81765', '29785', '16'), +('4', '88', '17', '104413', '26915', '16'), +('4', '88', '7', '94053', '32676', '16'), +('4', '88', '7', '56079', '30071', '16'), +('4', '88', '7', '104411', '29006', '16'), +('4', '88', '7', '80525', '21475', '16'), +('4', '88', '9', '67098', '40090', '16'), +('4', '88', '9', '56033', '30732', '16'), +('4', '88', '9', '56031', '30624', '16'), +('4', '88', '9', '56070', '30488', '16'), +('4', '88', '15', '111342', '45678', '16'), +('4', '88', '15', '111348', '45525', '16'), +('4', '88', '15', '111343', '45154', '16'), +('4', '88', '15', '111345', '43600', '16'), +('4', '88', '20', '111354', '54332', '16'), +('4', '88', '20', '111352', '53819', '16'), +('4', '88', '20', '111355', '53415', '16'), +('4', '88', '20', '111351', '51715', '16'), +('4', '88', '12', '56073', '29817', '16'), +('4', '88', '12', '81795', '28910', '16'), +('4', '88', '12', '104408', '26453', '16'), +('4', '88', '12', '53385', '24839', '16'), +('4', '88', '18', '62986', '30652', '16'), +('4', '88', '18', '56041', '30189', '16'), +('4', '88', '18', '94054', '29007', '16'), +('4', '88', '18', '104412', '28810', '16'), +('4', '88', '19', '62990', '31972', '16'), +('4', '88', '19', '56037', '30669', '16'), +('4', '88', '19', '56075', '28733', '16'), +('4', '88', '19', '104409', '28230', '16'), +('4', '88', '13', '111815', '498571', '16'), +('4', '88', '13', '111871', '498540', '16'), +('4', '88', '13', '111515', '480682', '16'), +('4', '88', '13', '111512', '479657', '16'), +('4', '88', '14', '111815', '498571', '16'), +('4', '88', '14', '111871', '498540', '16'), +('4', '88', '14', '111515', '480682', '16'), +('4', '88', '14', '111512', '479657', '16'), +('4', '88', '11', '111529', '539902', '16'), +('4', '88', '11', '111229', '517666', '16'), +('4', '88', '11', '106769', '453262', '16'), +('4', '88', '11', '62939', '441052', '16'), +('4', '89', '22', '39342', '0', '16'), +('4', '89', '22', '12425', '0', '16'), +('4', '89', '22', '7867', '0', '16'), +('4', '89', '22', '23597', '0', '16'), +('4', '89', '1', '111300', '44842', '16'), +('4', '89', '1', '111302', '44665', '16'), +('4', '89', '1', '111305', '44261', '16'), +('4', '89', '1', '111307', '43914', '16'), +('4', '89', '2', '94056', '31590', '16'), +('4', '89', '2', '62985', '30145', '16'), +('4', '89', '2', '80524', '29314', '16'), +('4', '89', '2', '104410', '24705', '16'), +('4', '89', '3', '111315', '44825', '16'), +('4', '89', '3', '111313', '44327', '16'), +('4', '89', '3', '111316', '43231', '16'), +('4', '89', '3', '111014', '40519', '16'), +('4', '89', '5', '111317', '44702', '16'), +('4', '89', '5', '111318', '44018', '16'), +('4', '89', '5', '111320', '42619', '16'), +('4', '89', '5', '111319', '42330', '16'), +('4', '89', '8', '111331', '45159', '16'), +('4', '89', '8', '111332', '44377', '16'), +('4', '89', '8', '111328', '43795', '16'), +('4', '89', '8', '111030', '40883', '16'), +('4', '89', '6', '111324', '44306', '16'), +('4', '89', '6', '111322', '44128', '16'), +('4', '89', '6', '106812', '44092', '16'), +('4', '89', '6', '111326', '42774', '16'), +('4', '89', '17', '56046', '32619', '16'), +('4', '89', '17', '56083', '30895', '16'), +('4', '89', '17', '81765', '29786', '16'), +('4', '89', '17', '104413', '26917', '16'), +('4', '89', '7', '94053', '32676', '16'), +('4', '89', '7', '56079', '30072', '16'), +('4', '89', '7', '104411', '29007', '16'), +('4', '89', '7', '80525', '21476', '16'), +('4', '89', '9', '67098', '40546', '16'), +('4', '89', '9', '56033', '30733', '16'), +('4', '89', '9', '56031', '30625', '16'), +('4', '89', '9', '56070', '30488', '16'), +('4', '89', '15', '111342', '45679', '16'), +('4', '89', '15', '111348', '45526', '16'), +('4', '89', '15', '111343', '45155', '16'), +('4', '89', '15', '111345', '43601', '16'), +('4', '89', '20', '111354', '54333', '16'), +('4', '89', '20', '111352', '53820', '16'), +('4', '89', '20', '111355', '53415', '16'), +('4', '89', '20', '111351', '51716', '16'), +('4', '89', '12', '56073', '29818', '16'), +('4', '89', '12', '81795', '28911', '16'), +('4', '89', '12', '104408', '26454', '16'), +('4', '89', '12', '53385', '24839', '16'), +('4', '89', '18', '62986', '30653', '16'), +('4', '89', '18', '56041', '30190', '16'), +('4', '89', '18', '94054', '29007', '16'), +('4', '89', '18', '104412', '28810', '16'), +('4', '89', '19', '62990', '31972', '16'), +('4', '89', '19', '56037', '30670', '16'), +('4', '89', '19', '56075', '28734', '16'), +('4', '89', '19', '104409', '28231', '16'), +('4', '89', '13', '111815', '499832', '16'), +('4', '89', '13', '111871', '499741', '16'), +('4', '89', '13', '111515', '481883', '16'), +('4', '89', '13', '111512', '480858', '16'), +('4', '89', '14', '111815', '499832', '16'), +('4', '89', '14', '111871', '499741', '16'), +('4', '89', '14', '111515', '481883', '16'), +('4', '89', '14', '111512', '480858', '16'), +('4', '89', '11', '111529', '540803', '16'), +('4', '89', '11', '111229', '518507', '16'), +('4', '89', '11', '106769', '454044', '16'), +('4', '89', '11', '62939', '441833', '16'), +('4', '90', '22', '39342', '0', '17'), +('4', '90', '22', '12425', '0', '17'), +('4', '90', '22', '7867', '0', '17'), +('4', '90', '22', '23597', '0', '17'), +('4', '90', '1', '111300', '44843', '17'), +('4', '90', '1', '111302', '44666', '17'), +('4', '90', '1', '111305', '44262', '17'), +('4', '90', '1', '111307', '43914', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '90', '2', '94056', '31591', '17'), +('4', '90', '2', '62985', '30146', '17'), +('4', '90', '2', '80524', '29315', '17'), +('4', '90', '2', '104410', '24706', '17'), +('4', '90', '3', '111315', '44826', '17'), +('4', '90', '3', '111313', '44328', '17'), +('4', '90', '3', '111316', '43232', '17'), +('4', '90', '3', '111014', '40520', '17'), +('4', '90', '5', '111317', '44703', '17'), +('4', '90', '5', '111318', '44018', '17'), +('4', '90', '5', '111320', '42620', '17'), +('4', '90', '5', '111319', '42331', '17'), +('4', '90', '8', '111331', '45160', '17'), +('4', '90', '8', '111332', '44377', '17'), +('4', '90', '8', '111328', '43796', '17'), +('4', '90', '8', '111030', '40884', '17'), +('4', '90', '6', '111324', '44306', '17'), +('4', '90', '6', '111322', '44128', '17'), +('4', '90', '6', '106812', '44093', '17'), +('4', '90', '6', '111326', '42775', '17'), +('4', '90', '17', '56046', '32620', '17'), +('4', '90', '17', '56083', '30896', '17'), +('4', '90', '17', '81765', '29787', '17'), +('4', '90', '17', '104413', '26918', '17'), +('4', '90', '7', '94053', '32677', '17'), +('4', '90', '7', '56079', '30073', '17'), +('4', '90', '7', '104411', '29008', '17'), +('4', '90', '7', '80525', '21477', '17'), +('4', '90', '9', '67098', '41003', '17'), +('4', '90', '9', '56033', '30734', '17'), +('4', '90', '9', '56031', '30625', '17'), +('4', '90', '9', '56070', '30489', '17'), +('4', '90', '15', '111342', '45680', '17'), +('4', '90', '15', '111348', '45527', '17'), +('4', '90', '15', '111343', '45156', '17'), +('4', '90', '15', '111345', '43601', '17'), +('4', '90', '20', '111354', '54334', '17'), +('4', '90', '20', '111352', '53821', '17'), +('4', '90', '20', '111355', '53416', '17'), +('4', '90', '20', '111351', '51717', '17'), +('4', '90', '12', '56073', '29819', '17'), +('4', '90', '12', '81795', '28912', '17'), +('4', '90', '12', '104408', '26455', '17'), +('4', '90', '12', '53385', '24840', '17'), +('4', '90', '18', '62986', '30654', '17'), +('4', '90', '18', '56041', '30190', '17'), +('4', '90', '18', '94054', '29008', '17'), +('4', '90', '18', '104412', '28811', '17'), +('4', '90', '19', '62990', '31973', '17'), +('4', '90', '19', '56037', '30671', '17'), +('4', '90', '19', '56075', '28735', '17'), +('4', '90', '19', '104409', '28231', '17'), +('4', '90', '13', '111815', '501033', '17'), +('4', '90', '13', '111871', '500942', '17'), +('4', '90', '13', '111515', '483084', '17'), +('4', '90', '13', '111512', '482059', '17'), +('4', '90', '14', '111815', '501033', '17'), +('4', '90', '14', '111871', '500942', '17'), +('4', '90', '14', '111515', '483084', '17'), +('4', '90', '14', '111512', '482059', '17'), +('4', '90', '11', '111529', '541703', '17'), +('4', '90', '11', '111229', '519408', '17'), +('4', '90', '11', '106769', '454825', '17'), +('4', '90', '11', '62939', '442613', '17'), +('4', '91', '22', '39342', '0', '17'), +('4', '91', '22', '12425', '0', '17'), +('4', '91', '22', '7867', '0', '17'), +('4', '91', '22', '23597', '0', '17'), +('4', '91', '1', '111300', '44843', '17'), +('4', '91', '1', '111302', '44666', '17'), +('4', '91', '1', '111305', '44263', '17'), +('4', '91', '1', '111307', '43915', '17'), +('4', '91', '2', '94056', '31592', '17'), +('4', '91', '2', '62985', '30147', '17'), +('4', '91', '2', '80524', '29316', '17'), +('4', '91', '2', '104410', '24706', '17'), +('4', '91', '3', '111315', '44827', '17'), +('4', '91', '3', '111313', '44329', '17'), +('4', '91', '3', '111316', '43232', '17'), +('4', '91', '3', '111014', '40520', '17'), +('4', '91', '5', '111317', '44704', '17'), +('4', '91', '5', '111318', '44019', '17'), +('4', '91', '5', '111320', '42620', '17'), +('4', '91', '5', '111319', '42332', '17'), +('4', '91', '8', '111331', '45161', '17'), +('4', '91', '8', '111332', '44378', '17'), +('4', '91', '8', '111328', '43797', '17'), +('4', '91', '8', '111030', '40885', '17'), +('4', '91', '6', '111324', '44307', '17'), +('4', '91', '6', '111322', '44129', '17'), +('4', '91', '6', '106812', '44093', '17'), +('4', '91', '6', '111326', '42776', '17'), +('4', '91', '17', '56046', '32620', '17'), +('4', '91', '17', '56083', '30896', '17'), +('4', '91', '17', '81765', '29787', '17'), +('4', '91', '17', '104413', '26919', '17'), +('4', '91', '7', '94053', '32678', '17'), +('4', '91', '7', '56079', '30073', '17'), +('4', '91', '7', '104411', '29009', '17'), +('4', '91', '7', '80525', '21478', '17'), +('4', '91', '9', '67098', '41003', '17'), +('4', '91', '9', '56033', '30734', '17'), +('4', '91', '9', '56031', '30626', '17'), +('4', '91', '9', '56070', '30490', '17'), +('4', '91', '15', '111342', '45681', '17'), +('4', '91', '15', '111348', '45528', '17'), +('4', '91', '15', '111343', '45156', '17'), +('4', '91', '15', '111345', '43602', '17'), +('4', '91', '20', '111354', '54334', '17'), +('4', '91', '20', '111352', '53822', '17'), +('4', '91', '20', '111355', '53416', '17'), +('4', '91', '20', '111351', '51717', '17'), +('4', '91', '12', '56073', '29820', '17'), +('4', '91', '12', '81795', '28912', '17'), +('4', '91', '12', '104408', '26455', '17'), +('4', '91', '12', '53385', '24840', '17'), +('4', '91', '18', '62986', '30655', '17'), +('4', '91', '18', '56041', '30191', '17'), +('4', '91', '18', '94054', '29009', '17'), +('4', '91', '18', '104412', '28811', '17'), +('4', '91', '19', '62990', '31974', '17'), +('4', '91', '19', '56037', '30672', '17'), +('4', '91', '19', '56075', '28736', '17'), +('4', '91', '19', '104409', '28232', '17'), +('4', '91', '13', '111815', '502234', '17'), +('4', '91', '13', '111871', '502202', '17'), +('4', '91', '13', '111515', '484285', '17'), +('4', '91', '13', '111512', '483259', '17'), +('4', '91', '14', '111815', '502234', '17'), +('4', '91', '14', '111871', '502202', '17'), +('4', '91', '14', '111515', '484285', '17'), +('4', '91', '14', '111512', '483259', '17'), +('4', '91', '11', '111529', '542664', '17'), +('4', '91', '11', '111229', '520309', '17'), +('4', '91', '11', '106769', '455606', '17'), +('4', '91', '11', '62939', '443394', '17'), +('4', '92', '22', '39342', '0', '17'), +('4', '92', '22', '12425', '0', '17'), +('4', '92', '22', '7867', '0', '17'), +('4', '92', '22', '23597', '0', '17'), +('4', '92', '1', '111300', '44844', '17'), +('4', '92', '1', '111302', '44667', '17'), +('4', '92', '1', '111305', '44264', '17'), +('4', '92', '1', '111307', '43916', '17'), +('4', '92', '2', '94056', '31592', '17'), +('4', '92', '2', '62985', '30147', '17'), +('4', '92', '2', '80524', '29316', '17'), +('4', '92', '2', '104410', '24707', '17'), +('4', '92', '3', '111315', '44828', '17'), +('4', '92', '3', '111313', '44330', '17'), +('4', '92', '3', '111316', '43233', '17'), +('4', '92', '3', '111014', '40521', '17'), +('4', '92', '5', '111317', '44704', '17'), +('4', '92', '5', '111318', '44020', '17'), +('4', '92', '5', '111320', '42621', '17'), +('4', '92', '5', '111319', '42332', '17'), +('4', '92', '8', '111331', '45162', '17'), +('4', '92', '8', '111332', '44379', '17'), +('4', '92', '8', '111328', '43797', '17'), +('4', '92', '8', '111030', '40886', '17'), +('4', '92', '6', '111324', '44308', '17'), +('4', '92', '6', '111322', '44130', '17'), +('4', '92', '6', '106812', '44094', '17'), +('4', '92', '6', '111326', '42777', '17'), +('4', '92', '17', '56046', '32621', '17'), +('4', '92', '17', '56083', '30897', '17'), +('4', '92', '17', '81765', '29788', '17'), +('4', '92', '17', '104413', '26920', '17'), +('4', '92', '7', '94053', '32678', '17'), +('4', '92', '7', '56079', '30074', '17'), +('4', '92', '7', '104411', '29010', '17'), +('4', '92', '7', '80525', '21479', '17'), +('4', '92', '9', '67098', '41004', '17'), +('4', '92', '9', '56033', '30735', '17'), +('4', '92', '9', '56031', '30627', '17'), +('4', '92', '9', '56070', '30490', '17'), +('4', '92', '15', '111342', '45682', '17'), +('4', '92', '15', '111348', '45529', '17'), +('4', '92', '15', '111343', '45157', '17'), +('4', '92', '15', '111345', '43602', '17'), +('4', '92', '20', '111354', '54335', '17'), +('4', '92', '20', '111352', '53823', '17'), +('4', '92', '20', '111355', '53417', '17'), +('4', '92', '20', '111351', '51718', '17'), +('4', '92', '12', '56073', '29821', '17'), +('4', '92', '12', '81795', '28913', '17'), +('4', '92', '12', '104408', '26456', '17'), +('4', '92', '12', '53385', '24841', '17'), +('4', '92', '18', '62986', '30656', '17'), +('4', '92', '18', '56041', '30192', '17'), +('4', '92', '18', '94054', '29009', '17'), +('4', '92', '18', '104412', '28811', '17'), +('4', '92', '19', '62990', '31974', '17'), +('4', '92', '19', '56037', '30673', '17'), +('4', '92', '19', '56075', '28737', '17'), +('4', '92', '19', '104409', '28233', '17'), +('4', '92', '13', '111815', '503495', '17'), +('4', '92', '13', '111871', '503403', '17'), +('4', '92', '13', '111515', '485485', '17'), +('4', '92', '13', '111512', '484400', '17'), +('4', '92', '14', '111815', '503495', '17'), +('4', '92', '14', '111871', '503403', '17'), +('4', '92', '14', '111515', '485485', '17'), +('4', '92', '14', '111512', '484400', '17'), +('4', '92', '11', '111529', '543565', '17'), +('4', '92', '11', '111229', '521210', '17'), +('4', '92', '11', '106769', '456447', '17'), +('4', '92', '11', '62939', '444115', '17'), +('4', '93', '22', '39342', '0', '17'), +('4', '93', '22', '12425', '0', '17'), +('4', '93', '22', '7867', '0', '17'), +('4', '93', '22', '23597', '0', '17'), +('4', '93', '1', '111300', '44845', '17'), +('4', '93', '1', '111302', '44668', '17'), +('4', '93', '1', '111305', '44265', '17'), +('4', '93', '1', '111307', '43916', '17'), +('4', '93', '2', '94056', '31593', '17'), +('4', '93', '2', '62985', '30148', '17'), +('4', '93', '2', '80524', '29317', '17'), +('4', '93', '2', '104410', '24708', '17'), +('4', '93', '3', '111315', '44829', '17'), +('4', '93', '3', '111313', '44331', '17'), +('4', '93', '3', '111316', '43234', '17'), +('4', '93', '3', '111014', '40522', '17'), +('4', '93', '5', '111317', '44705', '17'), +('4', '93', '5', '111318', '44020', '17'), +('4', '93', '5', '111320', '42622', '17'), +('4', '93', '5', '111319', '42333', '17'), +('4', '93', '8', '111331', '45163', '17'), +('4', '93', '8', '111332', '44380', '17'), +('4', '93', '8', '111328', '43798', '17'), +('4', '93', '8', '111030', '40887', '17'), +('4', '93', '6', '111324', '44308', '17'), +('4', '93', '6', '111322', '44130', '17'), +('4', '93', '6', '106812', '44094', '17'), +('4', '93', '6', '111326', '42778', '17'), +('4', '93', '17', '56046', '32622', '17'), +('4', '93', '17', '56083', '30897', '17'), +('4', '93', '17', '81765', '29789', '17'), +('4', '93', '17', '104413', '26921', '17'), +('4', '93', '7', '94053', '32679', '17'), +('4', '93', '7', '56079', '30075', '17'), +('4', '93', '7', '104411', '29011', '17'), +('4', '93', '7', '80525', '21480', '17'), +('4', '93', '9', '67098', '41005', '17'), +('4', '93', '9', '56033', '30736', '17'), +('4', '93', '9', '56031', '30627', '17'), +('4', '93', '9', '56070', '30491', '17'), +('4', '93', '15', '111342', '45683', '17'), +('4', '93', '15', '111348', '45530', '17'), +('4', '93', '15', '111343', '45158', '17'), +('4', '93', '15', '111345', '43603', '17'), +('4', '93', '20', '111354', '54336', '17'), +('4', '93', '20', '111352', '53824', '17'), +('4', '93', '20', '111355', '53418', '17'), +('4', '93', '20', '111351', '51719', '17'), +('4', '93', '12', '56073', '29822', '17'), +('4', '93', '12', '81795', '28914', '17'), +('4', '93', '12', '104408', '26457', '17'), +('4', '93', '12', '53385', '24842', '17'), +('4', '93', '18', '62986', '30657', '17'), +('4', '93', '18', '56041', '30192', '17'), +('4', '93', '18', '94054', '29010', '17'), +('4', '93', '18', '104412', '28812', '17'), +('4', '93', '19', '62990', '31975', '17'), +('4', '93', '19', '56037', '30674', '17'), +('4', '93', '19', '56075', '28738', '17'), +('4', '93', '19', '104409', '28233', '17'), +('4', '93', '13', '111815', '504695', '17'), +('4', '93', '13', '111871', '504604', '17'), +('4', '93', '13', '111515', '486626', '17'), +('4', '93', '13', '111512', '485601', '17'), +('4', '93', '14', '111815', '504695', '17'), +('4', '93', '14', '111871', '504604', '17'), +('4', '93', '14', '111515', '486626', '17'), +('4', '93', '14', '111512', '485601', '17'), +('4', '93', '11', '111529', '544526', '17'), +('4', '93', '11', '111229', '522111', '17'), +('4', '93', '11', '106769', '457228', '17'), +('4', '93', '11', '62939', '444895', '17'), +('4', '94', '22', '39342', '0', '17'), +('4', '94', '22', '12425', '0', '17'), +('4', '94', '22', '7867', '0', '17'), +('4', '94', '22', '23597', '0', '17'), +('4', '94', '1', '111300', '44845', '17'), +('4', '94', '1', '111302', '44669', '17'), +('4', '94', '1', '111305', '44266', '17'), +('4', '94', '1', '111307', '43917', '17'), +('4', '94', '2', '94056', '31594', '17'), +('4', '94', '2', '62985', '30149', '17'), +('4', '94', '2', '80524', '29318', '17'), +('4', '94', '2', '104410', '24709', '17'), +('4', '94', '3', '111315', '44829', '17'), +('4', '94', '3', '111313', '44331', '17'), +('4', '94', '3', '111316', '43235', '17'), +('4', '94', '3', '111014', '40523', '17'), +('4', '94', '5', '111317', '44706', '17'), +('4', '94', '5', '111318', '44021', '17'), +('4', '94', '5', '111320', '42622', '17'), +('4', '94', '5', '111319', '42334', '17'), +('4', '94', '8', '111331', '45164', '17'), +('4', '94', '8', '111332', '44381', '17'), +('4', '94', '8', '111328', '43799', '17'), +('4', '94', '8', '111030', '40888', '17'), +('4', '94', '6', '111324', '44309', '17'), +('4', '94', '6', '111322', '44131', '17'), +('4', '94', '6', '106812', '44095', '17'), +('4', '94', '6', '111326', '42779', '17'), +('4', '94', '17', '56046', '32623', '17'), +('4', '94', '17', '56083', '30897', '17'), +('4', '94', '17', '81765', '29789', '17'), +('4', '94', '17', '104413', '26922', '17'), +('4', '94', '7', '94053', '32680', '17'), +('4', '94', '7', '56079', '30076', '17'), +('4', '94', '7', '104411', '29012', '17'), +('4', '94', '7', '80525', '21481', '17'), +('4', '94', '9', '67098', '41006', '17'), +('4', '94', '9', '56033', '30737', '17'), +('4', '94', '9', '56031', '30628', '17'), +('4', '94', '9', '56070', '30492', '17'), +('4', '94', '15', '111342', '45684', '17'), +('4', '94', '15', '111348', '45531', '17'), +('4', '94', '15', '111343', '45159', '17'), +('4', '94', '15', '111345', '43604', '17'), +('4', '94', '20', '111354', '54337', '17'), +('4', '94', '20', '111352', '53825', '17'), +('4', '94', '20', '111355', '53418', '17'), +('4', '94', '20', '111351', '51720', '17'), +('4', '94', '12', '56073', '29823', '17'), +('4', '94', '12', '81795', '28914', '17'), +('4', '94', '12', '104408', '26458', '17'), +('4', '94', '12', '53385', '24842', '17'), +('4', '94', '18', '62986', '30658', '17'), +('4', '94', '18', '56041', '30193', '17'), +('4', '94', '18', '94054', '29011', '17'), +('4', '94', '18', '104412', '28812', '17'), +('4', '94', '19', '62990', '31976', '17'), +('4', '94', '19', '56037', '30675', '17'), +('4', '94', '19', '56075', '28739', '17'), +('4', '94', '19', '104409', '28234', '17'), +('4', '94', '13', '111815', '505896', '17'), +('4', '94', '13', '111871', '505865', '17'), +('4', '94', '13', '111515', '487827', '17'), +('4', '94', '13', '111512', '486802', '17'), +('4', '94', '14', '111815', '505896', '17'), +('4', '94', '14', '111871', '505865', '17'), +('4', '94', '14', '111515', '487827', '17'), +('4', '94', '14', '111512', '486802', '17'), +('4', '94', '11', '111529', '545426', '17'), +('4', '94', '11', '111229', '522951', '17'), +('4', '94', '11', '106769', '458009', '17'), +('4', '94', '11', '62939', '445676', '17'), +('4', '95', '22', '7867', '0', '18'), +('4', '95', '22', '39342', '0', '18'), +('4', '95', '22', '23597', '0', '18'), +('4', '95', '22', '66166', '0', '18'), +('4', '95', '1', '111300', '44846', '18'), +('4', '95', '1', '111302', '44670', '18'), +('4', '95', '1', '111305', '44267', '18'), +('4', '95', '1', '111307', '43917', '18'), +('4', '95', '2', '94056', '31595', '18'), +('4', '95', '2', '62985', '30150', '18'), +('4', '95', '2', '80524', '29319', '18'), +('4', '95', '2', '104410', '24709', '18'), +('4', '95', '3', '111315', '44830', '18'), +('4', '95', '3', '111313', '44332', '18'), +('4', '95', '3', '111316', '43236', '18'), +('4', '95', '3', '111014', '40524', '18'), +('4', '95', '5', '111317', '44707', '18'), +('4', '95', '5', '111318', '44021', '18'), +('4', '95', '5', '111320', '42623', '18'), +('4', '95', '5', '111319', '42335', '18'), +('4', '95', '8', '111331', '45165', '18'), +('4', '95', '8', '111332', '44382', '18'), +('4', '95', '8', '111328', '43799', '18'), +('4', '95', '8', '111030', '40889', '18'), +('4', '95', '6', '111324', '44310', '18'), +('4', '95', '6', '111322', '44131', '18'), +('4', '95', '6', '106812', '44095', '18'), +('4', '95', '6', '111326', '42780', '18'), +('4', '95', '17', '56046', '32624', '18'), +('4', '95', '17', '56083', '30898', '18'), +('4', '95', '17', '81765', '29790', '18'), +('4', '95', '17', '104413', '26923', '18'), +('4', '95', '7', '94053', '32681', '18'), +('4', '95', '7', '56079', '30077', '18'), +('4', '95', '7', '104411', '29013', '18'), +('4', '95', '7', '80525', '21481', '18'), +('4', '95', '9', '67098', '41006', '18'), +('4', '95', '9', '56033', '30737', '18'), +('4', '95', '9', '56031', '30629', '18'), +('4', '95', '9', '56070', '30493', '18'), +('4', '95', '15', '111342', '45685', '18'), +('4', '95', '15', '111348', '45532', '18'), +('4', '95', '15', '111343', '45160', '18'), +('4', '95', '15', '111345', '43604', '18'), +('4', '95', '20', '111354', '54338', '18'), +('4', '95', '20', '111352', '53826', '18'), +('4', '95', '20', '111355', '53419', '18'), +('4', '95', '20', '111351', '51721', '18'), +('4', '95', '12', '56073', '29824', '18'), +('4', '95', '12', '81795', '28915', '18'), +('4', '95', '12', '104408', '26458', '18'), +('4', '95', '12', '53385', '24843', '18'), +('4', '95', '18', '62986', '30659', '18'), +('4', '95', '18', '56041', '30194', '18'), +('4', '95', '18', '94054', '29011', '18'), +('4', '95', '18', '104412', '28813', '18'), +('4', '95', '19', '62990', '31976', '18'), +('4', '95', '19', '56037', '30676', '18'), +('4', '95', '19', '56075', '28740', '18'), +('4', '95', '19', '104409', '28234', '18'), +('4', '95', '13', '111815', '507097', '18'), +('4', '95', '13', '111871', '507066', '18'), +('4', '95', '13', '111515', '489028', '18'), +('4', '95', '13', '111512', '488002', '18'), +('4', '95', '14', '111815', '507097', '18'), +('4', '95', '14', '111871', '507066', '18'), +('4', '95', '14', '111515', '489028', '18'), +('4', '95', '14', '111512', '488002', '18'), +('4', '95', '11', '111529', '546327', '18'), +('4', '95', '11', '111229', '523852', '18'), +('4', '95', '11', '106769', '458791', '18'), +('4', '95', '11', '62939', '446457', '18'), +('4', '96', '22', '7867', '0', '18'), +('4', '96', '22', '39342', '0', '18'), +('4', '96', '22', '23597', '0', '18'), +('4', '96', '22', '66166', '0', '18'), +('4', '96', '1', '111300', '44847', '18'), +('4', '96', '1', '111302', '44671', '18'), +('4', '96', '1', '111305', '44269', '18'), +('4', '96', '1', '111307', '43918', '18'), +('4', '96', '2', '94056', '31595', '18'), +('4', '96', '2', '62985', '30151', '18'), +('4', '96', '2', '80524', '29320', '18'), +('4', '96', '2', '104410', '24710', '18'), +('4', '96', '3', '111315', '44831', '18'), +('4', '96', '3', '111313', '44333', '18'), +('4', '96', '3', '111316', '43236', '18'), +('4', '96', '3', '111014', '40525', '18'), +('4', '96', '5', '111317', '44708', '18'), +('4', '96', '5', '111318', '44022', '18'), +('4', '96', '5', '111320', '42624', '18'), +('4', '96', '5', '111319', '42336', '18'), +('4', '96', '8', '111331', '45166', '18'), +('4', '96', '8', '111332', '44383', '18'), +('4', '96', '8', '111328', '43800', '18'), +('4', '96', '8', '111030', '40890', '18'), +('4', '96', '6', '111324', '44311', '18'), +('4', '96', '6', '111322', '44132', '18'), +('4', '96', '6', '106812', '44096', '18'), +('4', '96', '6', '111326', '42781', '18'), +('4', '96', '17', '56046', '32625', '18'), +('4', '96', '17', '56083', '30898', '18'), +('4', '96', '17', '81765', '29791', '18'), +('4', '96', '17', '104413', '26925', '18'), +('4', '96', '7', '94053', '32681', '18'), +('4', '96', '7', '56079', '30077', '18'), +('4', '96', '7', '104411', '29014', '18'), +('4', '96', '7', '80525', '21482', '18'), +('4', '96', '9', '67098', '41007', '18'), +('4', '96', '9', '56033', '30738', '18'), +('4', '96', '9', '56031', '30629', '18'), +('4', '96', '9', '56070', '30493', '18'), +('4', '96', '15', '111342', '45686', '18'), +('4', '96', '15', '111348', '45533', '18'), +('4', '96', '15', '111343', '45160', '18'), +('4', '96', '15', '111345', '43605', '18'), +('4', '96', '20', '111354', '54339', '18'), +('4', '96', '20', '111352', '53826', '18'), +('4', '96', '20', '111355', '53419', '18'), +('4', '96', '20', '111351', '51722', '18'), +('4', '96', '12', '56073', '29825', '18'), +('4', '96', '12', '81795', '28916', '18'), +('4', '96', '12', '104408', '26459', '18'), +('4', '96', '12', '53385', '24843', '18'), +('4', '96', '18', '62986', '30661', '18'), +('4', '96', '18', '56041', '30194', '18'), +('4', '96', '18', '94054', '29012', '18'), +('4', '96', '18', '104412', '28813', '18'), +('4', '96', '19', '62990', '31977', '18'), +('4', '96', '19', '56037', '30677', '18'), +('4', '96', '19', '56075', '28741', '18'), +('4', '96', '19', '104409', '28235', '18'), +('4', '96', '13', '111815', '508358', '18'), +('4', '96', '13', '111871', '508266', '18'), +('4', '96', '13', '111515', '490228', '18'), +('4', '96', '13', '111512', '489203', '18'), +('4', '96', '14', '111815', '508358', '18'), +('4', '96', '14', '111871', '508266', '18'), +('4', '96', '14', '111515', '490228', '18'), +('4', '96', '14', '111512', '489203', '18'), +('4', '96', '11', '111529', '547288', '18'), +('4', '96', '11', '111229', '524753', '18'), +('4', '96', '11', '106769', '459572', '18'), +('4', '96', '11', '62939', '447177', '18'), +('4', '97', '22', '7867', '0', '18'), +('4', '97', '22', '39342', '0', '18'), +('4', '97', '22', '23597', '0', '18'), +('4', '97', '22', '66166', '0', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '97', '1', '111300', '44848', '18'), +('4', '97', '1', '111302', '44672', '18'), +('4', '97', '1', '111305', '44270', '18'), +('4', '97', '1', '111307', '43919', '18'), +('4', '97', '2', '94056', '31596', '18'), +('4', '97', '2', '62985', '30152', '18'), +('4', '97', '2', '80524', '29321', '18'), +('4', '97', '2', '104410', '24711', '18'), +('4', '97', '3', '111315', '44832', '18'), +('4', '97', '3', '111313', '44334', '18'), +('4', '97', '3', '111316', '43237', '18'), +('4', '97', '3', '111014', '40526', '18'), +('4', '97', '5', '111317', '44709', '18'), +('4', '97', '5', '111318', '44023', '18'), +('4', '97', '5', '111320', '42625', '18'), +('4', '97', '5', '111319', '42336', '18'), +('4', '97', '8', '111331', '45167', '18'), +('4', '97', '8', '111332', '44384', '18'), +('4', '97', '8', '111328', '43801', '18'), +('4', '97', '8', '111030', '40891', '18'), +('4', '97', '6', '111324', '44311', '18'), +('4', '97', '6', '111322', '44132', '18'), +('4', '97', '6', '106812', '44096', '18'), +('4', '97', '6', '111326', '42783', '18'), +('4', '97', '17', '56046', '32626', '18'), +('4', '97', '17', '56083', '30899', '18'), +('4', '97', '17', '81765', '29792', '18'), +('4', '97', '17', '104413', '26926', '18'), +('4', '97', '7', '94053', '32682', '18'), +('4', '97', '7', '56079', '30078', '18'), +('4', '97', '7', '104411', '29015', '18'), +('4', '97', '7', '80525', '21483', '18'), +('4', '97', '9', '67098', '41008', '18'), +('4', '97', '9', '56033', '30739', '18'), +('4', '97', '9', '56031', '30630', '18'), +('4', '97', '9', '56070', '30494', '18'), +('4', '97', '15', '111342', '45687', '18'), +('4', '97', '15', '111348', '45534', '18'), +('4', '97', '15', '111343', '45161', '18'), +('4', '97', '15', '111345', '43605', '18'), +('4', '97', '20', '111354', '54340', '18'), +('4', '97', '20', '111352', '53827', '18'), +('4', '97', '20', '111355', '53420', '18'), +('4', '97', '20', '111351', '51722', '18'), +('4', '97', '12', '56073', '29826', '18'), +('4', '97', '12', '81795', '28916', '18'), +('4', '97', '12', '104408', '26460', '18'), +('4', '97', '12', '53385', '24844', '18'), +('4', '97', '18', '62986', '30662', '18'), +('4', '97', '18', '56041', '30195', '18'), +('4', '97', '18', '94054', '29013', '18'), +('4', '97', '18', '104412', '28814', '18'), +('4', '97', '19', '62990', '31977', '18'), +('4', '97', '19', '56037', '30678', '18'), +('4', '97', '19', '56075', '28742', '18'), +('4', '97', '19', '104409', '28235', '18'), +('4', '97', '13', '111815', '509559', '18'), +('4', '97', '13', '111871', '509527', '18'), +('4', '97', '13', '111515', '491429', '18'), +('4', '97', '13', '111512', '490344', '18'), +('4', '97', '14', '111815', '509559', '18'), +('4', '97', '14', '111871', '509527', '18'), +('4', '97', '14', '111515', '491429', '18'), +('4', '97', '14', '111512', '490344', '18'), +('4', '97', '11', '111529', '548189', '18'), +('4', '97', '11', '111229', '525654', '18'), +('4', '97', '11', '106769', '460353', '18'), +('4', '97', '11', '62939', '447958', '18'), +('4', '98', '22', '7867', '0', '18'), +('4', '98', '22', '39342', '0', '18'), +('4', '98', '22', '23597', '0', '18'), +('4', '98', '22', '66166', '0', '18'), +('4', '98', '1', '111300', '44848', '18'), +('4', '98', '1', '111302', '44673', '18'), +('4', '98', '1', '111305', '44271', '18'), +('4', '98', '1', '111307', '43919', '18'), +('4', '98', '2', '94056', '31597', '18'), +('4', '98', '2', '62985', '30153', '18'), +('4', '98', '2', '80524', '29322', '18'), +('4', '98', '2', '104410', '24711', '18'), +('4', '98', '3', '111315', '44833', '18'), +('4', '98', '3', '111313', '44335', '18'), +('4', '98', '3', '111316', '43238', '18'), +('4', '98', '3', '111014', '40527', '18'), +('4', '98', '5', '111317', '44710', '18'), +('4', '98', '5', '111318', '44024', '18'), +('4', '98', '5', '111320', '42625', '18'), +('4', '98', '5', '111319', '42337', '18'), +('4', '98', '8', '111331', '45168', '18'), +('4', '98', '8', '111332', '44384', '18'), +('4', '98', '8', '111328', '43801', '18'), +('4', '98', '8', '111030', '40892', '18'), +('4', '98', '6', '111324', '44312', '18'), +('4', '98', '6', '111322', '44133', '18'), +('4', '98', '6', '106812', '44097', '18'), +('4', '98', '6', '111326', '42784', '18'), +('4', '98', '17', '56046', '32627', '18'), +('4', '98', '17', '56083', '30899', '18'), +('4', '98', '17', '81765', '29792', '18'), +('4', '98', '17', '104413', '26927', '18'), +('4', '98', '7', '94053', '32683', '18'), +('4', '98', '7', '56079', '30079', '18'), +('4', '98', '7', '104411', '29016', '18'), +('4', '98', '7', '80525', '21484', '18'), +('4', '98', '9', '67098', '41008', '18'), +('4', '98', '9', '56033', '30739', '18'), +('4', '98', '9', '56031', '30631', '18'), +('4', '98', '9', '56070', '30495', '18'), +('4', '98', '15', '111342', '45688', '18'), +('4', '98', '15', '111348', '45535', '18'), +('4', '98', '15', '111343', '45162', '18'), +('4', '98', '15', '111345', '43606', '18'), +('4', '98', '20', '111354', '54341', '18'), +('4', '98', '20', '111352', '53828', '18'), +('4', '98', '20', '111355', '53421', '18'), +('4', '98', '20', '111351', '51723', '18'), +('4', '98', '12', '56073', '29827', '18'), +('4', '98', '12', '81795', '28917', '18'), +('4', '98', '12', '104408', '26461', '18'), +('4', '98', '12', '53385', '24845', '18'), +('4', '98', '18', '62986', '30663', '18'), +('4', '98', '18', '56041', '30196', '18'), +('4', '98', '18', '94054', '29013', '18'), +('4', '98', '18', '104412', '28814', '18'), +('4', '98', '19', '62990', '31978', '18'), +('4', '98', '19', '56037', '30679', '18'), +('4', '98', '19', '56075', '28743', '18'), +('4', '98', '19', '104409', '28236', '18'), +('4', '98', '13', '111815', '510760', '18'), +('4', '98', '13', '111871', '510728', '18'), +('4', '98', '13', '111515', '492630', '18'), +('4', '98', '13', '111512', '491544', '18'), +('4', '98', '14', '111815', '510760', '18'), +('4', '98', '14', '111871', '510728', '18'), +('4', '98', '14', '111515', '492630', '18'), +('4', '98', '14', '111512', '491544', '18'), +('4', '98', '11', '111529', '549150', '18'), +('4', '98', '11', '111229', '526555', '18'), +('4', '98', '11', '106769', '461134', '18'), +('4', '98', '11', '62939', '448739', '18'), +('4', '99', '22', '7867', '0', '18'), +('4', '99', '22', '39342', '0', '18'), +('4', '99', '22', '23597', '0', '18'), +('4', '99', '22', '66166', '0', '18'), +('4', '99', '1', '111300', '44849', '18'), +('4', '99', '1', '111302', '44674', '18'), +('4', '99', '1', '111305', '44272', '18'), +('4', '99', '1', '111307', '43920', '18'), +('4', '99', '2', '94056', '31597', '18'), +('4', '99', '2', '62985', '30154', '18'), +('4', '99', '2', '80524', '29323', '18'), +('4', '99', '2', '104410', '24712', '18'), +('4', '99', '3', '111315', '44834', '18'), +('4', '99', '3', '111313', '44336', '18'), +('4', '99', '3', '111316', '43239', '18'), +('4', '99', '3', '111014', '40528', '18'), +('4', '99', '5', '111317', '44710', '18'), +('4', '99', '5', '111318', '44024', '18'), +('4', '99', '5', '111320', '42626', '18'), +('4', '99', '5', '111319', '42338', '18'), +('4', '99', '8', '111331', '45169', '18'), +('4', '99', '8', '111332', '44385', '18'), +('4', '99', '8', '111328', '43802', '18'), +('4', '99', '8', '111030', '40893', '18'), +('4', '99', '6', '111324', '44313', '18'), +('4', '99', '6', '111322', '44133', '18'), +('4', '99', '6', '106812', '44097', '18'), +('4', '99', '6', '111326', '42785', '18'), +('4', '99', '17', '56046', '32628', '18'), +('4', '99', '17', '56083', '30900', '18'), +('4', '99', '17', '81765', '29793', '18'), +('4', '99', '17', '104413', '26928', '18'), +('4', '99', '7', '94053', '32683', '18'), +('4', '99', '7', '56079', '30080', '18'), +('4', '99', '7', '104411', '29017', '18'), +('4', '99', '7', '80525', '21485', '18'), +('4', '99', '9', '67098', '41009', '18'), +('4', '99', '9', '56033', '30740', '18'), +('4', '99', '9', '56031', '30632', '18'), +('4', '99', '9', '56070', '30495', '18'), +('4', '99', '15', '111342', '45689', '18'), +('4', '99', '15', '111348', '45536', '18'), +('4', '99', '15', '111343', '45163', '18'), +('4', '99', '15', '111345', '43607', '18'), +('4', '99', '20', '111354', '54342', '18'), +('4', '99', '20', '111352', '53829', '18'), +('4', '99', '20', '111355', '53421', '18'), +('4', '99', '20', '111351', '51724', '18'), +('4', '99', '12', '56073', '29828', '18'), +('4', '99', '12', '81795', '28918', '18'), +('4', '99', '12', '104408', '26462', '18'), +('4', '99', '12', '53385', '24845', '18'), +('4', '99', '18', '62986', '30664', '18'), +('4', '99', '18', '56041', '30197', '18'), +('4', '99', '18', '94054', '29014', '18'), +('4', '99', '18', '104412', '28815', '18'), +('4', '99', '19', '62990', '31979', '18'), +('4', '99', '19', '56037', '30680', '18'), +('4', '99', '19', '56075', '28744', '18'), +('4', '99', '19', '104409', '28236', '18'), +('4', '99', '13', '111815', '512020', '18'), +('4', '99', '13', '111871', '511929', '18'), +('4', '99', '13', '111515', '493771', '18'), +('4', '99', '13', '111512', '492745', '18'), +('4', '99', '14', '111815', '512020', '18'), +('4', '99', '14', '111871', '511929', '18'), +('4', '99', '14', '111515', '493771', '18'), +('4', '99', '14', '111512', '492745', '18'), +('4', '99', '11', '111529', '550050', '18'), +('4', '99', '11', '111229', '527395', '18'), +('4', '99', '11', '106769', '461915', '18'), +('4', '99', '11', '62939', '449519', '18'), +('4', '100', '22', '7867', '0', '20'), +('4', '100', '22', '39342', '0', '20'), +('4', '100', '22', '23597', '0', '20'), +('4', '100', '22', '66166', '0', '20'), +('4', '100', '1', '98769', '62607', '20'), +('4', '100', '1', '111300', '44850', '20'), +('4', '100', '1', '111302', '44675', '20'), +('4', '100', '1', '111305', '44273', '20'), +('4', '100', '2', '94056', '31598', '20'), +('4', '100', '2', '62985', '30155', '20'), +('4', '100', '2', '80524', '29323', '20'), +('4', '100', '2', '104410', '24713', '20'), +('4', '100', '3', '111315', '44835', '20'), +('4', '100', '3', '111313', '44336', '20'), +('4', '100', '3', '111316', '43240', '20'), +('4', '100', '3', '111014', '40529', '20'), +('4', '100', '5', '111317', '44711', '20'), +('4', '100', '5', '111318', '44025', '20'), +('4', '100', '5', '111320', '42627', '20'), +('4', '100', '5', '111319', '42339', '20'), +('4', '100', '8', '111331', '45170', '20'), +('4', '100', '8', '111332', '44386', '20'), +('4', '100', '8', '111328', '43803', '20'), +('4', '100', '8', '111030', '40894', '20'), +('4', '100', '6', '111324', '44314', '20'), +('4', '100', '6', '111322', '44134', '20'), +('4', '100', '6', '106812', '44098', '20'), +('4', '100', '6', '111326', '42786', '20'), +('4', '100', '17', '56046', '32629', '20'), +('4', '100', '17', '56083', '30900', '20'), +('4', '100', '17', '81765', '29794', '20'), +('4', '100', '17', '104413', '26929', '20'), +('4', '100', '7', '94053', '32684', '20'), +('4', '100', '7', '56079', '30081', '20'), +('4', '100', '7', '104411', '29018', '20'), +('4', '100', '7', '80525', '21486', '20'), +('4', '100', '9', '67098', '41010', '20'), +('4', '100', '9', '56033', '30741', '20'), +('4', '100', '9', '56031', '30632', '20'), +('4', '100', '9', '56070', '30496', '20'), +('4', '100', '15', '111342', '45690', '20'), +('4', '100', '15', '111348', '45537', '20'), +('4', '100', '15', '111343', '45164', '20'), +('4', '100', '15', '111345', '43607', '20'), +('4', '100', '20', '111354', '54343', '20'), +('4', '100', '20', '111352', '53830', '20'), +('4', '100', '20', '111355', '53422', '20'), +('4', '100', '20', '111351', '51725', '20'), +('4', '100', '12', '56073', '29828', '20'), +('4', '100', '12', '81795', '28919', '20'), +('4', '100', '12', '104408', '26462', '20'), +('4', '100', '12', '53385', '24846', '20'), +('4', '100', '18', '62986', '30665', '20'), +('4', '100', '18', '56041', '30197', '20'), +('4', '100', '18', '94054', '29015', '20'), +('4', '100', '18', '104412', '28815', '20'), +('4', '100', '19', '62990', '31979', '20'), +('4', '100', '19', '56037', '30681', '20'), +('4', '100', '19', '56075', '28745', '20'), +('4', '100', '19', '104409', '28237', '20'), +('4', '100', '13', '111815', '515621', '20'), +('4', '100', '13', '111871', '515530', '20'), +('4', '100', '13', '111515', '497371', '20'), +('4', '100', '13', '111512', '496346', '20'), +('4', '100', '14', '111815', '515621', '20'), +('4', '100', '14', '111871', '515530', '20'), +('4', '100', '14', '111515', '497371', '20'), +('4', '100', '14', '111512', '496346', '20'), +('4', '100', '11', '111529', '551011', '20'), +('4', '100', '11', '111229', '528296', '20'), +('4', '100', '11', '106769', '462756', '20'), +('4', '100', '11', '62939', '450240', '20'), +('4', '100', '22', '7867', '0', '19'), +('4', '100', '22', '39342', '0', '19'), +('4', '100', '22', '23597', '0', '19'), +('4', '100', '22', '66166', '0', '19'), +('4', '100', '1', '98769', '62607', '19'), +('4', '100', '1', '111300', '44850', '19'), +('4', '100', '1', '111302', '44675', '19'), +('4', '100', '1', '111305', '44273', '19'), +('4', '100', '2', '94056', '31598', '19'), +('4', '100', '2', '62985', '30155', '19'), +('4', '100', '2', '80524', '29323', '19'), +('4', '100', '2', '104410', '24713', '19'), +('4', '100', '3', '111315', '44835', '19'), +('4', '100', '3', '111313', '44336', '19'), +('4', '100', '3', '111316', '43240', '19'), +('4', '100', '3', '111014', '40529', '19'), +('4', '100', '5', '111317', '44711', '19'), +('4', '100', '5', '111318', '44025', '19'), +('4', '100', '5', '111320', '42627', '19'), +('4', '100', '5', '111319', '42339', '19'), +('4', '100', '8', '111331', '45170', '19'), +('4', '100', '8', '111332', '44386', '19'), +('4', '100', '8', '111328', '43803', '19'), +('4', '100', '8', '111030', '40894', '19'), +('4', '100', '6', '111324', '44314', '19'), +('4', '100', '6', '111322', '44134', '19'), +('4', '100', '6', '106812', '44098', '19'), +('4', '100', '6', '111326', '42786', '19'), +('4', '100', '17', '56046', '32629', '19'), +('4', '100', '17', '56083', '30900', '19'), +('4', '100', '17', '81765', '29794', '19'), +('4', '100', '17', '104413', '26929', '19'), +('4', '100', '7', '94053', '32684', '19'), +('4', '100', '7', '56079', '30081', '19'), +('4', '100', '7', '104411', '29018', '19'), +('4', '100', '7', '80525', '21486', '19'), +('4', '100', '9', '67098', '41010', '19'), +('4', '100', '9', '56033', '30741', '19'), +('4', '100', '9', '56031', '30632', '19'), +('4', '100', '9', '56070', '30496', '19'), +('4', '100', '15', '111342', '45690', '19'), +('4', '100', '15', '111348', '45537', '19'), +('4', '100', '15', '111343', '45164', '19'), +('4', '100', '15', '111345', '43607', '19'), +('4', '100', '20', '111354', '54343', '19'), +('4', '100', '20', '111352', '53830', '19'), +('4', '100', '20', '111355', '53422', '19'), +('4', '100', '20', '111351', '51725', '19'), +('4', '100', '12', '56073', '29828', '19'), +('4', '100', '12', '81795', '28919', '19'), +('4', '100', '12', '104408', '26462', '19'), +('4', '100', '12', '53385', '24846', '19'), +('4', '100', '18', '62986', '30665', '19'), +('4', '100', '18', '56041', '30197', '19'), +('4', '100', '18', '94054', '29015', '19'), +('4', '100', '18', '104412', '28815', '19'), +('4', '100', '19', '62990', '31979', '19'), +('4', '100', '19', '56037', '30681', '19'), +('4', '100', '19', '56075', '28745', '19'), +('4', '100', '19', '104409', '28237', '19'), +('4', '100', '13', '111815', '513221', '19'), +('4', '100', '13', '111871', '513130', '19'), +('4', '100', '13', '111515', '494971', '19'), +('4', '100', '13', '111512', '493946', '19'), +('4', '100', '14', '111815', '513221', '19'), +('4', '100', '14', '111871', '513130', '19'), +('4', '100', '14', '111515', '494971', '19'), +('4', '100', '14', '111512', '493946', '19'), +('4', '100', '11', '111529', '551011', '19'), +('4', '100', '11', '111229', '528296', '19'), +('4', '100', '11', '106769', '462756', '19'), +('4', '100', '11', '62939', '450240', '19'), +('4', '101', '22', '7867', '0', '20'), +('4', '101', '22', '39342', '0', '20'), +('4', '101', '22', '23597', '0', '20'), +('4', '101', '22', '66166', '0', '20'), +('4', '101', '1', '98769', '62608', '20'), +('4', '101', '1', '111300', '44850', '20'), +('4', '101', '1', '111302', '44676', '20'), +('4', '101', '1', '111305', '44274', '20'), +('4', '101', '2', '94056', '31599', '20'), +('4', '101', '2', '62985', '30156', '20'), +('4', '101', '2', '80524', '29324', '20'), +('4', '101', '2', '104410', '24714', '20'), +('4', '101', '3', '111315', '44836', '20'), +('4', '101', '3', '111313', '44337', '20'), +('4', '101', '3', '111316', '43241', '20'), +('4', '101', '3', '111014', '40530', '20'), +('4', '101', '5', '111317', '44712', '20'), +('4', '101', '5', '111318', '44026', '20'), +('4', '101', '5', '111320', '42628', '20'), +('4', '101', '5', '111319', '42340', '20'), +('4', '101', '8', '111331', '45171', '20'), +('4', '101', '8', '111332', '44387', '20'), +('4', '101', '8', '111328', '43803', '20'), +('4', '101', '8', '111030', '40895', '20'), +('4', '101', '6', '111324', '44314', '20'), +('4', '101', '6', '111322', '44134', '20'), +('4', '101', '6', '106812', '44098', '20'), +('4', '101', '6', '111326', '42787', '20'), +('4', '101', '17', '56046', '32630', '20'), +('4', '101', '17', '56083', '30901', '20'), +('4', '101', '17', '81765', '29794', '20'), +('4', '101', '17', '104413', '26930', '20'), +('4', '101', '7', '94053', '32685', '20'), +('4', '101', '7', '56079', '30081', '20'), +('4', '101', '7', '104411', '29019', '20'), +('4', '101', '7', '80525', '21487', '20'), +('4', '101', '9', '67098', '41011', '20'), +('4', '101', '9', '56033', '30741', '20'), +('4', '101', '9', '56031', '30633', '20'), +('4', '101', '9', '56070', '30497', '20'), +('4', '101', '15', '111342', '45691', '20'), +('4', '101', '15', '111348', '45538', '20'), +('4', '101', '15', '111343', '45164', '20'), +('4', '101', '15', '111345', '43608', '20'), +('4', '101', '20', '111354', '54344', '20'), +('4', '101', '20', '111352', '53831', '20'), +('4', '101', '20', '111355', '53422', '20'), +('4', '101', '20', '111351', '51726', '20'), +('4', '101', '12', '56073', '29829', '20'), +('4', '101', '12', '81795', '28919', '20'), +('4', '101', '12', '104408', '26463', '20'), +('4', '101', '12', '53385', '24847', '20'), +('4', '101', '18', '62986', '30666', '20'), +('4', '101', '18', '56041', '30198', '20'), +('4', '101', '18', '94054', '29016', '20'), +('4', '101', '18', '104412', '28816', '20'), +('4', '101', '19', '62990', '31980', '20'), +('4', '101', '19', '56037', '30681', '20'), +('4', '101', '19', '56075', '28746', '20'), +('4', '101', '19', '104409', '28237', '20'), +('4', '101', '13', '111815', '516822', '20'), +('4', '101', '13', '111871', '516790', '20'), +('4', '101', '13', '111515', '498572', '20'), +('4', '101', '13', '111512', '497547', '20'), +('4', '101', '14', '111815', '516822', '20'), +('4', '101', '14', '111871', '516790', '20'), +('4', '101', '14', '111515', '498572', '20'), +('4', '101', '14', '111512', '497547', '20'), +('4', '101', '11', '111529', '551912', '20'), +('4', '101', '11', '111229', '529197', '20'), +('4', '101', '11', '106769', '463538', '20'), +('4', '101', '11', '62939', '451021', '20'), +('4', '102', '22', '7867', '0', '20'), +('4', '102', '22', '39342', '0', '20'), +('4', '102', '22', '23597', '0', '20'), +('4', '102', '22', '66166', '0', '20'), +('4', '102', '1', '98769', '62608', '20'), +('4', '102', '1', '111300', '44851', '20'), +('4', '102', '1', '111302', '44677', '20'), +('4', '102', '1', '111305', '44275', '20'), +('4', '102', '2', '94056', '31600', '20'), +('4', '102', '2', '62985', '30157', '20'), +('4', '102', '2', '80524', '29325', '20'), +('4', '102', '2', '104410', '24714', '20'), +('4', '102', '3', '111315', '44837', '20'), +('4', '102', '3', '111313', '44338', '20'), +('4', '102', '3', '111316', '43241', '20'), +('4', '102', '3', '111014', '40531', '20'), +('4', '102', '5', '111317', '44713', '20'), +('4', '102', '5', '111318', '44026', '20'), +('4', '102', '5', '111320', '42628', '20'), +('4', '102', '5', '111319', '42340', '20'), +('4', '102', '8', '111331', '45172', '20'), +('4', '102', '8', '111332', '44388', '20'), +('4', '102', '8', '111328', '43804', '20'), +('4', '102', '8', '111030', '40896', '20'), +('4', '102', '6', '111324', '44315', '20'), +('4', '102', '6', '111322', '44135', '20'), +('4', '102', '6', '106812', '44099', '20'), +('4', '102', '6', '111326', '42788', '20'), +('4', '102', '17', '56046', '32630', '20'), +('4', '102', '17', '56083', '30901', '20'), +('4', '102', '17', '81765', '29795', '20'), +('4', '102', '17', '104413', '26931', '20'), +('4', '102', '7', '94053', '32685', '20'), +('4', '102', '7', '56079', '30082', '20'), +('4', '102', '7', '104411', '29020', '20'), +('4', '102', '7', '80525', '21488', '20'), +('4', '102', '9', '67098', '41011', '20'), +('4', '102', '9', '56033', '30742', '20'), +('4', '102', '9', '56031', '30634', '20'), +('4', '102', '9', '56070', '30498', '20'), +('4', '102', '15', '111342', '45691', '20'), +('4', '102', '15', '111348', '45539', '20'), +('4', '102', '15', '111343', '45165', '20'), +('4', '102', '15', '111345', '43608', '20'), +('4', '102', '20', '111354', '54345', '20'), +('4', '102', '20', '111352', '53832', '20'), +('4', '102', '20', '111355', '53423', '20'), +('4', '102', '20', '111351', '51726', '20'), +('4', '102', '12', '56073', '29830', '20'), +('4', '102', '12', '81795', '28920', '20'), +('4', '102', '12', '104408', '26464', '20'), +('4', '102', '12', '53385', '24847', '20'), +('4', '102', '18', '62986', '30667', '20'), +('4', '102', '18', '56041', '30199', '20'), +('4', '102', '18', '94054', '29016', '20'), +('4', '102', '18', '104412', '28816', '20'), +('4', '102', '19', '62990', '31981', '20'), +('4', '102', '19', '56037', '30682', '20'), +('4', '102', '19', '56075', '28747', '20'), +('4', '102', '19', '104409', '28238', '20'), +('4', '102', '13', '111815', '518083', '20'), +('4', '102', '13', '111871', '517991', '20'), +('4', '102', '13', '111515', '499773', '20'), +('4', '102', '13', '111512', '498747', '20'), +('4', '102', '14', '111815', '518083', '20'), +('4', '102', '14', '111871', '517991', '20'), +('4', '102', '14', '111515', '499773', '20'), +('4', '102', '14', '111512', '498747', '20'), +('4', '102', '11', '111529', '552813', '20'), +('4', '102', '11', '111229', '530098', '20'), +('4', '102', '11', '106769', '464319', '20'), +('4', '102', '11', '62939', '451801', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '103', '22', '7867', '0', '20'), +('4', '103', '22', '39342', '0', '20'), +('4', '103', '22', '23597', '0', '20'), +('4', '103', '22', '66166', '0', '20'), +('4', '103', '1', '98769', '62609', '20'), +('4', '103', '1', '111300', '44852', '20'), +('4', '103', '1', '111302', '44678', '20'), +('4', '103', '1', '111305', '44277', '20'), +('4', '103', '2', '94056', '31600', '20'), +('4', '103', '2', '62985', '30158', '20'), +('4', '103', '2', '80524', '29326', '20'), +('4', '103', '2', '104410', '24715', '20'), +('4', '103', '3', '111315', '44838', '20'), +('4', '103', '3', '111313', '44339', '20'), +('4', '103', '3', '111316', '43242', '20'), +('4', '103', '3', '111014', '40532', '20'), +('4', '103', '5', '111317', '44714', '20'), +('4', '103', '5', '111318', '44027', '20'), +('4', '103', '5', '111320', '42629', '20'), +('4', '103', '5', '111319', '42341', '20'), +('4', '103', '8', '111331', '45173', '20'), +('4', '103', '8', '111332', '44389', '20'), +('4', '103', '8', '111328', '43805', '20'), +('4', '103', '8', '111030', '40897', '20'), +('4', '103', '6', '111324', '44316', '20'), +('4', '103', '6', '111322', '44135', '20'), +('4', '103', '6', '106812', '44099', '20'), +('4', '103', '6', '111326', '42789', '20'), +('4', '103', '17', '56046', '32631', '20'), +('4', '103', '17', '56083', '30902', '20'), +('4', '103', '17', '81765', '29796', '20'), +('4', '103', '17', '104413', '26933', '20'), +('4', '103', '7', '94053', '32686', '20'), +('4', '103', '7', '56079', '30083', '20'), +('4', '103', '7', '104411', '29021', '20'), +('4', '103', '7', '80525', '21489', '20'), +('4', '103', '9', '67098', '41012', '20'), +('4', '103', '9', '56033', '30743', '20'), +('4', '103', '9', '56031', '30634', '20'), +('4', '103', '9', '56070', '30498', '20'), +('4', '103', '15', '111342', '45692', '20'), +('4', '103', '15', '111348', '45540', '20'), +('4', '103', '15', '111343', '45166', '20'), +('4', '103', '15', '111345', '43609', '20'), +('4', '103', '20', '111354', '54346', '20'), +('4', '103', '20', '111352', '53833', '20'), +('4', '103', '20', '111355', '53424', '20'), +('4', '103', '20', '111351', '51727', '20'), +('4', '103', '12', '56073', '29831', '20'), +('4', '103', '12', '81795', '28921', '20'), +('4', '103', '12', '104408', '26465', '20'), +('4', '103', '12', '53385', '24848', '20'), +('4', '103', '18', '62986', '30668', '20'), +('4', '103', '18', '56041', '30199', '20'), +('4', '103', '18', '94054', '29017', '20'), +('4', '103', '18', '104412', '28817', '20'), +('4', '103', '19', '62990', '31981', '20'), +('4', '103', '19', '56037', '30683', '20'), +('4', '103', '19', '56075', '28748', '20'), +('4', '103', '19', '104409', '28239', '20'), +('4', '103', '13', '111815', '519284', '20'), +('4', '103', '13', '111871', '519192', '20'), +('4', '103', '13', '111515', '500974', '20'), +('4', '103', '13', '111512', '499888', '20'), +('4', '103', '14', '111815', '519284', '20'), +('4', '103', '14', '111871', '519192', '20'), +('4', '103', '14', '111515', '500974', '20'), +('4', '103', '14', '111512', '499888', '20'), +('4', '103', '11', '111529', '553774', '20'), +('4', '103', '11', '111229', '530999', '20'), +('4', '103', '11', '106769', '465100', '20'), +('4', '103', '11', '62939', '452582', '20'), +('4', '104', '22', '7867', '0', '20'), +('4', '104', '22', '39342', '0', '20'), +('4', '104', '22', '23597', '0', '20'), +('4', '104', '22', '66166', '0', '20'), +('4', '104', '1', '98769', '62610', '20'), +('4', '104', '1', '111300', '44853', '20'), +('4', '104', '1', '111302', '44679', '20'), +('4', '104', '1', '111305', '44278', '20'), +('4', '104', '2', '94056', '31601', '20'), +('4', '104', '2', '62985', '30159', '20'), +('4', '104', '2', '80524', '29327', '20'), +('4', '104', '2', '104410', '24716', '20'), +('4', '104', '3', '111315', '44839', '20'), +('4', '104', '3', '111313', '44340', '20'), +('4', '104', '3', '111316', '43243', '20'), +('4', '104', '3', '111014', '40533', '20'), +('4', '104', '5', '111317', '44715', '20'), +('4', '104', '5', '111318', '44028', '20'), +('4', '104', '5', '111320', '42630', '20'), +('4', '104', '5', '111319', '42342', '20'), +('4', '104', '8', '111331', '45174', '20'), +('4', '104', '8', '111332', '44390', '20'), +('4', '104', '8', '111328', '43805', '20'), +('4', '104', '8', '111030', '40898', '20'), +('4', '104', '6', '111324', '44316', '20'), +('4', '104', '6', '111322', '44136', '20'), +('4', '104', '6', '106812', '44100', '20'), +('4', '104', '6', '111326', '42790', '20'), +('4', '104', '17', '56046', '32632', '20'), +('4', '104', '17', '56083', '30902', '20'), +('4', '104', '17', '81765', '29796', '20'), +('4', '104', '17', '104413', '26934', '20'), +('4', '104', '7', '94053', '32687', '20'), +('4', '104', '7', '56079', '30084', '20'), +('4', '104', '7', '104411', '29022', '20'), +('4', '104', '7', '80525', '21490', '20'), +('4', '104', '9', '67098', '41013', '20'), +('4', '104', '9', '56033', '30743', '20'), +('4', '104', '9', '56031', '30635', '20'), +('4', '104', '9', '56070', '30499', '20'), +('4', '104', '15', '111342', '45693', '20'), +('4', '104', '15', '111348', '45541', '20'), +('4', '104', '15', '111343', '45167', '20'), +('4', '104', '15', '111345', '43610', '20'), +('4', '104', '20', '111354', '54347', '20'), +('4', '104', '20', '111352', '53833', '20'), +('4', '104', '20', '111355', '53424', '20'), +('4', '104', '20', '111351', '51728', '20'), +('4', '104', '12', '56073', '29832', '20'), +('4', '104', '12', '81795', '28921', '20'), +('4', '104', '12', '104408', '26465', '20'), +('4', '104', '12', '53385', '24848', '20'), +('4', '104', '18', '62986', '30669', '20'), +('4', '104', '18', '56041', '30200', '20'), +('4', '104', '18', '94054', '29018', '20'), +('4', '104', '18', '104412', '28817', '20'), +('4', '104', '19', '62990', '31982', '20'), +('4', '104', '19', '56037', '30684', '20'), +('4', '104', '19', '56075', '28749', '20'), +('4', '104', '19', '104409', '28239', '20'), +('4', '104', '13', '111815', '520484', '20'), +('4', '104', '13', '111871', '520453', '20'), +('4', '104', '13', '111515', '502174', '20'), +('4', '104', '13', '111512', '501089', '20'), +('4', '104', '14', '111815', '520484', '20'), +('4', '104', '14', '111871', '520453', '20'), +('4', '104', '14', '111515', '502174', '20'), +('4', '104', '14', '111512', '501089', '20'), +('4', '104', '11', '111529', '554674', '20'), +('4', '104', '11', '111229', '531900', '20'), +('4', '104', '11', '106769', '465881', '20'), +('4', '104', '11', '62939', '453303', '20'), +('4', '105', '22', '7867', '0', '23'), +('4', '105', '22', '39342', '0', '23'), +('4', '105', '22', '23597', '0', '23'), +('4', '105', '22', '66166', '0', '23'), +('4', '105', '1', '98769', '62610', '23'), +('4', '105', '1', '111300', '44853', '23'), +('4', '105', '1', '111302', '44680', '23'), +('4', '105', '1', '111305', '44279', '23'), +('4', '105', '2', '94056', '31602', '23'), +('4', '105', '2', '62985', '30160', '23'), +('4', '105', '2', '80524', '29328', '23'), +('4', '105', '2', '104410', '24717', '23'), +('4', '105', '3', '111315', '44840', '23'), +('4', '105', '3', '111313', '44341', '23'), +('4', '105', '3', '111316', '43244', '23'), +('4', '105', '3', '111014', '40533', '23'), +('4', '105', '5', '111317', '44716', '23'), +('4', '105', '5', '111318', '44028', '23'), +('4', '105', '5', '111320', '42631', '23'), +('4', '105', '5', '111319', '42343', '23'), +('4', '105', '8', '111331', '45175', '23'), +('4', '105', '8', '111332', '44390', '23'), +('4', '105', '8', '111328', '43806', '23'), +('4', '105', '8', '111030', '40899', '23'), +('4', '105', '6', '111324', '44317', '23'), +('4', '105', '6', '111322', '44136', '23'), +('4', '105', '6', '106812', '44100', '23'), +('4', '105', '6', '111326', '42791', '23'), +('4', '105', '17', '56046', '32633', '23'), +('4', '105', '17', '56083', '30903', '23'), +('4', '105', '17', '81765', '29797', '23'), +('4', '105', '17', '104413', '26935', '23'), +('4', '105', '7', '94053', '32687', '23'), +('4', '105', '7', '56079', '30085', '23'), +('4', '105', '7', '104411', '29023', '23'), +('4', '105', '7', '80525', '21491', '23'), +('4', '105', '9', '67098', '41014', '23'), +('4', '105', '9', '56033', '30744', '23'), +('4', '105', '9', '56031', '30636', '23'), +('4', '105', '9', '56070', '30500', '23'), +('4', '105', '15', '111342', '45694', '23'), +('4', '105', '15', '111348', '45542', '23'), +('4', '105', '15', '111343', '45168', '23'), +('4', '105', '15', '111345', '43610', '23'), +('4', '105', '20', '111354', '54348', '23'), +('4', '105', '20', '111352', '53834', '23'), +('4', '105', '20', '111355', '53425', '23'), +('4', '105', '20', '111351', '51729', '23'), +('4', '105', '12', '56073', '29833', '23'), +('4', '105', '12', '81795', '28922', '23'), +('4', '105', '12', '104408', '26466', '23'), +('4', '105', '12', '53385', '24849', '23'), +('4', '105', '18', '62986', '30670', '23'), +('4', '105', '18', '56041', '30201', '23'), +('4', '105', '18', '94054', '29018', '23'), +('4', '105', '18', '104412', '28818', '23'), +('4', '105', '19', '62990', '31983', '23'), +('4', '105', '19', '56037', '30685', '23'), +('4', '105', '19', '56075', '28750', '23'), +('4', '105', '19', '104409', '28240', '23'), +('4', '105', '13', '111815', '521745', '23'), +('4', '105', '13', '111871', '521654', '23'), +('4', '105', '13', '111515', '503315', '23'), +('4', '105', '13', '111512', '502289', '23'), +('4', '105', '14', '111815', '521745', '23'), +('4', '105', '14', '111871', '521654', '23'), +('4', '105', '14', '111515', '503315', '23'), +('4', '105', '14', '111512', '502289', '23'), +('4', '105', '11', '111529', '555635', '23'), +('4', '105', '11', '111229', '532740', '23'), +('4', '105', '11', '106769', '466662', '23'), +('4', '105', '11', '62939', '454083', '23'), +('4', '105', '22', '7867', '0', '22'), +('4', '105', '22', '39342', '0', '22'), +('4', '105', '22', '23597', '0', '22'), +('4', '105', '22', '66166', '0', '22'), +('4', '105', '1', '98769', '62610', '22'), +('4', '105', '1', '111300', '44853', '22'), +('4', '105', '1', '111302', '44680', '22'), +('4', '105', '1', '111305', '44279', '22'), +('4', '105', '2', '94056', '31602', '22'), +('4', '105', '2', '62985', '30160', '22'), +('4', '105', '2', '80524', '29328', '22'), +('4', '105', '2', '104410', '24717', '22'), +('4', '105', '3', '111315', '44840', '22'), +('4', '105', '3', '111313', '44341', '22'), +('4', '105', '3', '111316', '43244', '22'), +('4', '105', '3', '111014', '40533', '22'), +('4', '105', '5', '111317', '44716', '22'), +('4', '105', '5', '111318', '44028', '22'), +('4', '105', '5', '111320', '42631', '22'), +('4', '105', '5', '111319', '42343', '22'), +('4', '105', '8', '111331', '45175', '22'), +('4', '105', '8', '111332', '44390', '22'), +('4', '105', '8', '111328', '43806', '22'), +('4', '105', '8', '111030', '40899', '22'), +('4', '105', '6', '111324', '44317', '22'), +('4', '105', '6', '111322', '44136', '22'), +('4', '105', '6', '106812', '44100', '22'), +('4', '105', '6', '111326', '42791', '22'), +('4', '105', '17', '56046', '32633', '22'), +('4', '105', '17', '56083', '30903', '22'), +('4', '105', '17', '81765', '29797', '22'), +('4', '105', '17', '104413', '26935', '22'), +('4', '105', '7', '94053', '32687', '22'), +('4', '105', '7', '56079', '30085', '22'), +('4', '105', '7', '104411', '29023', '22'), +('4', '105', '7', '80525', '21491', '22'), +('4', '105', '9', '67098', '41014', '22'), +('4', '105', '9', '56033', '30744', '22'), +('4', '105', '9', '56031', '30636', '22'), +('4', '105', '9', '56070', '30500', '22'), +('4', '105', '15', '111342', '45694', '22'), +('4', '105', '15', '111348', '45542', '22'), +('4', '105', '15', '111343', '45168', '22'), +('4', '105', '15', '111345', '43610', '22'), +('4', '105', '20', '111354', '54348', '22'), +('4', '105', '20', '111352', '53834', '22'), +('4', '105', '20', '111355', '53425', '22'), +('4', '105', '20', '111351', '51729', '22'), +('4', '105', '12', '56073', '29833', '22'), +('4', '105', '12', '81795', '28922', '22'), +('4', '105', '12', '104408', '26466', '22'), +('4', '105', '12', '53385', '24849', '22'), +('4', '105', '18', '62986', '30670', '22'), +('4', '105', '18', '56041', '30201', '22'), +('4', '105', '18', '94054', '29018', '22'), +('4', '105', '18', '104412', '28818', '22'), +('4', '105', '19', '62990', '31983', '22'), +('4', '105', '19', '56037', '30685', '22'), +('4', '105', '19', '56075', '28750', '22'), +('4', '105', '19', '104409', '28240', '22'), +('4', '105', '13', '111815', '521745', '22'), +('4', '105', '13', '111871', '521654', '22'), +('4', '105', '13', '111515', '503315', '22'), +('4', '105', '13', '111512', '502289', '22'), +('4', '105', '14', '111815', '521745', '22'), +('4', '105', '14', '111871', '521654', '22'), +('4', '105', '14', '111515', '503315', '22'), +('4', '105', '14', '111512', '502289', '22'), +('4', '105', '11', '111529', '555635', '22'), +('4', '105', '11', '111229', '532740', '22'), +('4', '105', '11', '106769', '466662', '22'), +('4', '105', '11', '62939', '454083', '22'), +('4', '105', '22', '7867', '0', '21'), +('4', '105', '22', '39342', '0', '21'), +('4', '105', '22', '23597', '0', '21'), +('4', '105', '22', '66166', '0', '21'), +('4', '105', '1', '98769', '62610', '21'), +('4', '105', '1', '111300', '44853', '21'), +('4', '105', '1', '111302', '44680', '21'), +('4', '105', '1', '111305', '44279', '21'), +('4', '105', '2', '94056', '31602', '21'), +('4', '105', '2', '62985', '30160', '21'), +('4', '105', '2', '80524', '29328', '21'), +('4', '105', '2', '104410', '24717', '21'), +('4', '105', '3', '111315', '44840', '21'), +('4', '105', '3', '111313', '44341', '21'), +('4', '105', '3', '111316', '43244', '21'), +('4', '105', '3', '111014', '40533', '21'), +('4', '105', '5', '111317', '44716', '21'), +('4', '105', '5', '111318', '44028', '21'), +('4', '105', '5', '111320', '42631', '21'), +('4', '105', '5', '111319', '42343', '21'), +('4', '105', '8', '111331', '45175', '21'), +('4', '105', '8', '111332', '44390', '21'), +('4', '105', '8', '111328', '43806', '21'), +('4', '105', '8', '111030', '40899', '21'), +('4', '105', '6', '111324', '44317', '21'), +('4', '105', '6', '111322', '44136', '21'), +('4', '105', '6', '106812', '44100', '21'), +('4', '105', '6', '111326', '42791', '21'), +('4', '105', '17', '56046', '32633', '21'), +('4', '105', '17', '56083', '30903', '21'), +('4', '105', '17', '81765', '29797', '21'), +('4', '105', '17', '104413', '26935', '21'), +('4', '105', '7', '94053', '32687', '21'), +('4', '105', '7', '56079', '30085', '21'), +('4', '105', '7', '104411', '29023', '21'), +('4', '105', '7', '80525', '21491', '21'), +('4', '105', '9', '67098', '41014', '21'), +('4', '105', '9', '56033', '30744', '21'), +('4', '105', '9', '56031', '30636', '21'), +('4', '105', '9', '56070', '30500', '21'), +('4', '105', '15', '111342', '45694', '21'), +('4', '105', '15', '111348', '45542', '21'), +('4', '105', '15', '111343', '45168', '21'), +('4', '105', '15', '111345', '43610', '21'), +('4', '105', '20', '111354', '54348', '21'), +('4', '105', '20', '111352', '53834', '21'), +('4', '105', '20', '111355', '53425', '21'), +('4', '105', '20', '111351', '51729', '21'), +('4', '105', '12', '56073', '29833', '21'), +('4', '105', '12', '81795', '28922', '21'), +('4', '105', '12', '104408', '26466', '21'), +('4', '105', '12', '53385', '24849', '21'), +('4', '105', '18', '62986', '30670', '21'), +('4', '105', '18', '56041', '30201', '21'), +('4', '105', '18', '94054', '29018', '21'), +('4', '105', '18', '104412', '28818', '21'), +('4', '105', '19', '62990', '31983', '21'), +('4', '105', '19', '56037', '30685', '21'), +('4', '105', '19', '56075', '28750', '21'), +('4', '105', '19', '104409', '28240', '21'), +('4', '105', '13', '111815', '521745', '21'), +('4', '105', '13', '111871', '521654', '21'), +('4', '105', '13', '111515', '503315', '21'), +('4', '105', '13', '111512', '502289', '21'), +('4', '105', '14', '111815', '521745', '21'), +('4', '105', '14', '111871', '521654', '21'), +('4', '105', '14', '111515', '503315', '21'), +('4', '105', '14', '111512', '502289', '21'), +('4', '105', '11', '111529', '555635', '21'), +('4', '105', '11', '111229', '532740', '21'), +('4', '105', '11', '106769', '466662', '21'), +('4', '105', '11', '62939', '454083', '21'), +('4', '106', '22', '7867', '0', '23'), +('4', '106', '22', '39342', '0', '23'), +('4', '106', '22', '23597', '0', '23'), +('4', '106', '22', '66166', '0', '23'), +('4', '106', '1', '98769', '62611', '23'), +('4', '106', '1', '111300', '44854', '23'), +('4', '106', '1', '111302', '44681', '23'), +('4', '106', '1', '111305', '44280', '23'), +('4', '106', '2', '94056', '31602', '23'), +('4', '106', '2', '62985', '30161', '23'), +('4', '106', '2', '80524', '29329', '23'), +('4', '106', '2', '104410', '24717', '23'), +('4', '106', '3', '111315', '44841', '23'), +('4', '106', '3', '111313', '44342', '23'), +('4', '106', '3', '111316', '43245', '23'), +('4', '106', '3', '111014', '40534', '23'), +('4', '106', '5', '111317', '44716', '23'), +('4', '106', '5', '111318', '44029', '23'), +('4', '106', '5', '111320', '42631', '23'), +('4', '106', '5', '111319', '42344', '23'), +('4', '106', '8', '111331', '45176', '23'), +('4', '106', '8', '111332', '44391', '23'), +('4', '106', '8', '111328', '43806', '23'), +('4', '106', '8', '111030', '40900', '23'), +('4', '106', '6', '111324', '44318', '23'), +('4', '106', '6', '111322', '44137', '23'), +('4', '106', '6', '106812', '44101', '23'), +('4', '106', '6', '111326', '42792', '23'), +('4', '106', '17', '56046', '32634', '23'), +('4', '106', '17', '56083', '30903', '23'), +('4', '106', '17', '81765', '29798', '23'), +('4', '106', '17', '104413', '26936', '23'), +('4', '106', '7', '94053', '32688', '23'), +('4', '106', '7', '56079', '30085', '23'), +('4', '106', '7', '104411', '29024', '23'), +('4', '106', '7', '80525', '21492', '23'), +('4', '106', '9', '67098', '41014', '23'), +('4', '106', '9', '56033', '30745', '23'), +('4', '106', '9', '56031', '30636', '23'), +('4', '106', '9', '56070', '30500', '23'), +('4', '106', '15', '111342', '45695', '23'), +('4', '106', '15', '111348', '45543', '23'), +('4', '106', '15', '111343', '45168', '23'), +('4', '106', '15', '111345', '43611', '23'), +('4', '106', '20', '111354', '54349', '23'), +('4', '106', '20', '111352', '53835', '23'), +('4', '106', '20', '111355', '53425', '23'), +('4', '106', '20', '111351', '51730', '23'), +('4', '106', '12', '56073', '29834', '23'), +('4', '106', '12', '81795', '28923', '23'), +('4', '106', '12', '104408', '26467', '23'), +('4', '106', '12', '53385', '24850', '23'), +('4', '106', '18', '62986', '30671', '23'), +('4', '106', '18', '56041', '30201', '23'), +('4', '106', '18', '94054', '29019', '23'), +('4', '106', '18', '104412', '28818', '23'), +('4', '106', '19', '62990', '31983', '23'), +('4', '106', '19', '56037', '30686', '23'), +('4', '106', '19', '56075', '28751', '23'), +('4', '106', '19', '104409', '28240', '23'), +('4', '106', '13', '111815', '522946', '23'), +('4', '106', '13', '111871', '522855', '23'), +('4', '106', '13', '111515', '504516', '23'), +('4', '106', '13', '111512', '503490', '23'), +('4', '106', '14', '111815', '522946', '23'), +('4', '106', '14', '111871', '522855', '23'), +('4', '106', '14', '111515', '504516', '23'), +('4', '106', '14', '111512', '503490', '23'), +('4', '106', '11', '111529', '556536', '23'), +('4', '106', '11', '111229', '533641', '23'), +('4', '106', '11', '106769', '467443', '23'), +('4', '106', '11', '62939', '454864', '23'), +('4', '107', '22', '7867', '0', '23'), +('4', '107', '22', '39342', '0', '23'), +('4', '107', '22', '23597', '0', '23'), +('4', '107', '22', '66166', '0', '23'), +('4', '107', '1', '98769', '62611', '23'), +('4', '107', '1', '111300', '44855', '23'), +('4', '107', '1', '111302', '44682', '23'), +('4', '107', '1', '111305', '44281', '23'), +('4', '107', '2', '94056', '31603', '23'), +('4', '107', '2', '62985', '30162', '23'), +('4', '107', '2', '80524', '29330', '23'), +('4', '107', '2', '104410', '24718', '23'), +('4', '107', '3', '111315', '44841', '23'), +('4', '107', '3', '111313', '44342', '23'), +('4', '107', '3', '111316', '43245', '23'), +('4', '107', '3', '111014', '40535', '23'), +('4', '107', '5', '111317', '44717', '23'), +('4', '107', '5', '111318', '44030', '23'), +('4', '107', '5', '111320', '42632', '23'), +('4', '107', '5', '111319', '42344', '23'), +('4', '107', '8', '111331', '45177', '23'), +('4', '107', '8', '111332', '44392', '23'), +('4', '107', '8', '111328', '43807', '23'), +('4', '107', '8', '111030', '40901', '23'), +('4', '107', '6', '111324', '44319', '23'), +('4', '107', '6', '111322', '44137', '23'), +('4', '107', '6', '106812', '44101', '23'), +('4', '107', '6', '111326', '42793', '23'), +('4', '107', '17', '56046', '32635', '23'), +('4', '107', '17', '56083', '30904', '23'), +('4', '107', '17', '81765', '29798', '23'), +('4', '107', '17', '104413', '26937', '23'), +('4', '107', '7', '94053', '32689', '23'), +('4', '107', '7', '56079', '30086', '23'), +('4', '107', '7', '104411', '29025', '23'), +('4', '107', '7', '80525', '21493', '23'), +('4', '107', '9', '67098', '41015', '23'), +('4', '107', '9', '56033', '30745', '23'), +('4', '107', '9', '56031', '30637', '23'), +('4', '107', '9', '56070', '30501', '23'), +('4', '107', '15', '111342', '45696', '23'), +('4', '107', '15', '111348', '45544', '23'), +('4', '107', '15', '111343', '45169', '23'), +('4', '107', '15', '111345', '43611', '23'), +('4', '107', '20', '111354', '54350', '23'), +('4', '107', '20', '111352', '53836', '23'), +('4', '107', '20', '111355', '53426', '23'), +('4', '107', '20', '111351', '51731', '23'), +('4', '107', '12', '56073', '29835', '23'), +('4', '107', '12', '81795', '28923', '23'), +('4', '107', '12', '104408', '26468', '23'), +('4', '107', '12', '53385', '24850', '23'), +('4', '107', '18', '62986', '30672', '23'), +('4', '107', '18', '56041', '30202', '23'), +('4', '107', '18', '94054', '29020', '23'), +('4', '107', '18', '104412', '28818', '23'), +('4', '107', '19', '62990', '31984', '23'), +('4', '107', '19', '56037', '30687', '23'), +('4', '107', '19', '56075', '28752', '23'), +('4', '107', '19', '104409', '28241', '23'), +('4', '107', '13', '111815', '524147', '23'), +('4', '107', '13', '111871', '524115', '23'), +('4', '107', '13', '111515', '505717', '23'), +('4', '107', '13', '111512', '504691', '23'), +('4', '107', '14', '111815', '524147', '23'), +('4', '107', '14', '111871', '524115', '23'), +('4', '107', '14', '111515', '505717', '23'), +('4', '107', '14', '111512', '504691', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '107', '11', '111529', '557437', '23'), +('4', '107', '11', '111229', '534542', '23'), +('4', '107', '11', '106769', '468225', '23'), +('4', '107', '11', '62939', '455585', '23'), +('4', '108', '22', '7867', '0', '23'), +('4', '108', '22', '39342', '0', '23'), +('4', '108', '22', '23597', '0', '23'), +('4', '108', '22', '66166', '0', '23'), +('4', '108', '1', '98769', '62612', '23'), +('4', '108', '1', '111300', '44855', '23'), +('4', '108', '1', '111302', '44683', '23'), +('4', '108', '1', '111305', '44282', '23'), +('4', '108', '2', '94056', '31604', '23'), +('4', '108', '2', '62985', '30163', '23'), +('4', '108', '2', '80524', '29330', '23'), +('4', '108', '2', '104410', '24719', '23'), +('4', '108', '3', '111315', '44842', '23'), +('4', '108', '3', '111313', '44343', '23'), +('4', '108', '3', '111316', '43246', '23'), +('4', '108', '3', '111014', '40536', '23'), +('4', '108', '5', '111317', '44718', '23'), +('4', '108', '5', '111318', '44030', '23'), +('4', '108', '5', '111320', '42633', '23'), +('4', '108', '5', '111319', '42345', '23'), +('4', '108', '8', '111331', '45178', '23'), +('4', '108', '8', '111332', '44393', '23'), +('4', '108', '8', '111328', '43808', '23'), +('4', '108', '8', '111030', '40902', '23'), +('4', '108', '6', '111324', '44319', '23'), +('4', '108', '6', '111322', '44138', '23'), +('4', '108', '6', '106812', '44102', '23'), +('4', '108', '6', '111326', '42795', '23'), +('4', '108', '17', '56046', '32636', '23'), +('4', '108', '17', '56083', '30904', '23'), +('4', '108', '17', '81765', '29799', '23'), +('4', '108', '17', '104413', '26938', '23'), +('4', '108', '7', '94053', '32690', '23'), +('4', '108', '7', '56079', '30087', '23'), +('4', '108', '7', '104411', '29026', '23'), +('4', '108', '7', '80525', '21494', '23'), +('4', '108', '9', '67098', '41016', '23'), +('4', '108', '9', '56033', '30746', '23'), +('4', '108', '9', '56031', '30638', '23'), +('4', '108', '9', '56070', '30502', '23'), +('4', '108', '15', '111342', '45697', '23'), +('4', '108', '15', '111348', '45545', '23'), +('4', '108', '15', '111343', '45170', '23'), +('4', '108', '15', '111345', '43612', '23'), +('4', '108', '20', '111354', '54351', '23'), +('4', '108', '20', '111352', '53837', '23'), +('4', '108', '20', '111355', '53427', '23'), +('4', '108', '20', '111351', '51731', '23'), +('4', '108', '12', '56073', '29836', '23'), +('4', '108', '12', '81795', '28924', '23'), +('4', '108', '12', '104408', '26468', '23'), +('4', '108', '12', '53385', '24851', '23'), +('4', '108', '18', '62986', '30673', '23'), +('4', '108', '18', '56041', '30203', '23'), +('4', '108', '18', '94054', '29020', '23'), +('4', '108', '18', '104412', '28819', '23'), +('4', '108', '19', '62990', '31984', '23'), +('4', '108', '19', '56037', '30688', '23'), +('4', '108', '19', '56075', '28753', '23'), +('4', '108', '19', '104409', '28241', '23'), +('4', '108', '13', '111815', '525348', '23'), +('4', '108', '13', '111871', '525316', '23'), +('4', '108', '13', '111515', '506918', '23'), +('4', '108', '13', '111512', '505832', '23'), +('4', '108', '14', '111815', '525348', '23'), +('4', '108', '14', '111871', '525316', '23'), +('4', '108', '14', '111515', '506918', '23'), +('4', '108', '14', '111512', '505832', '23'), +('4', '108', '11', '111529', '558397', '23'), +('4', '108', '11', '111229', '535443', '23'), +('4', '108', '11', '106769', '469006', '23'), +('4', '108', '11', '62939', '456366', '23'), +('4', '109', '22', '7867', '0', '23'), +('4', '109', '22', '39342', '0', '23'), +('4', '109', '22', '23597', '0', '23'), +('4', '109', '22', '66166', '0', '23'), +('4', '109', '1', '98769', '62612', '23'), +('4', '109', '1', '111300', '44856', '23'), +('4', '109', '1', '111302', '44684', '23'), +('4', '109', '1', '111305', '44283', '23'), +('4', '109', '2', '94056', '31605', '23'), +('4', '109', '2', '62985', '30164', '23'), +('4', '109', '2', '80524', '29331', '23'), +('4', '109', '2', '104410', '24720', '23'), +('4', '109', '3', '111315', '44843', '23'), +('4', '109', '3', '111313', '44344', '23'), +('4', '109', '3', '111316', '43247', '23'), +('4', '109', '3', '111014', '40537', '23'), +('4', '109', '5', '111317', '44719', '23'), +('4', '109', '5', '111318', '44031', '23'), +('4', '109', '5', '111320', '42633', '23'), +('4', '109', '5', '111319', '42346', '23'), +('4', '109', '8', '111331', '45179', '23'), +('4', '109', '8', '111332', '44394', '23'), +('4', '109', '8', '111328', '43808', '23'), +('4', '109', '8', '111030', '40903', '23'), +('4', '109', '6', '111324', '44320', '23'), +('4', '109', '6', '111322', '44139', '23'), +('4', '109', '6', '106812', '44102', '23'), +('4', '109', '6', '111326', '42796', '23'), +('4', '109', '17', '56046', '32637', '23'), +('4', '109', '17', '56083', '30905', '23'), +('4', '109', '17', '81765', '29800', '23'), +('4', '109', '17', '104413', '26939', '23'), +('4', '109', '7', '94053', '32690', '23'), +('4', '109', '7', '56079', '30088', '23'), +('4', '109', '7', '104411', '29027', '23'), +('4', '109', '7', '80525', '21494', '23'), +('4', '109', '9', '67098', '41017', '23'), +('4', '109', '9', '56033', '30747', '23'), +('4', '109', '9', '56031', '30638', '23'), +('4', '109', '9', '56070', '30502', '23'), +('4', '109', '15', '111342', '45698', '23'), +('4', '109', '15', '111348', '45545', '23'), +('4', '109', '15', '111343', '45171', '23'), +('4', '109', '15', '111345', '43613', '23'), +('4', '109', '20', '111354', '54352', '23'), +('4', '109', '20', '111352', '53838', '23'), +('4', '109', '20', '111355', '53427', '23'), +('4', '109', '20', '111351', '51732', '23'), +('4', '109', '12', '56073', '29837', '23'), +('4', '109', '12', '81795', '28925', '23'), +('4', '109', '12', '104408', '26469', '23'), +('4', '109', '12', '53385', '24852', '23'), +('4', '109', '18', '62986', '30674', '23'), +('4', '109', '18', '56041', '30203', '23'), +('4', '109', '18', '94054', '29021', '23'), +('4', '109', '18', '104412', '28819', '23'), +('4', '109', '19', '62990', '31985', '23'), +('4', '109', '19', '56037', '30689', '23'), +('4', '109', '19', '56075', '28754', '23'), +('4', '109', '19', '104409', '28242', '23'), +('4', '109', '13', '111815', '526608', '23'), +('4', '109', '13', '111871', '526517', '23'), +('4', '109', '13', '111515', '508118', '23'), +('4', '109', '13', '111512', '507032', '23'), +('4', '109', '14', '111815', '526608', '23'), +('4', '109', '14', '111871', '526517', '23'), +('4', '109', '14', '111515', '508118', '23'), +('4', '109', '14', '111512', '507032', '23'), +('4', '109', '11', '111529', '559298', '23'), +('4', '109', '11', '111229', '536344', '23'), +('4', '109', '11', '106769', '469847', '23'), +('4', '109', '11', '62939', '457146', '23'), +('4', '110', '22', '7867', '0', '25'), +('4', '110', '22', '39342', '0', '25'), +('4', '110', '22', '23597', '0', '25'), +('4', '110', '22', '66166', '0', '25'), +('4', '110', '1', '98769', '62613', '25'), +('4', '110', '1', '111300', '44857', '25'), +('4', '110', '1', '111302', '44685', '25'), +('4', '110', '1', '111305', '44285', '25'), +('4', '110', '2', '94056', '31605', '25'), +('4', '110', '2', '62985', '30165', '25'), +('4', '110', '2', '80524', '29332', '25'), +('4', '110', '2', '104410', '24720', '25'), +('4', '110', '3', '111315', '44844', '25'), +('4', '110', '3', '111313', '44345', '25'), +('4', '110', '3', '111316', '43248', '25'), +('4', '110', '3', '111014', '40538', '25'), +('4', '110', '5', '111317', '44720', '25'), +('4', '110', '5', '111318', '44032', '25'), +('4', '110', '5', '111320', '42634', '25'), +('4', '110', '5', '111319', '42347', '25'), +('4', '110', '8', '111331', '45180', '25'), +('4', '110', '8', '111332', '44395', '25'), +('4', '110', '8', '111328', '43809', '25'), +('4', '110', '8', '111030', '40904', '25'), +('4', '110', '6', '111324', '44321', '25'), +('4', '110', '6', '111322', '44139', '25'), +('4', '110', '6', '106812', '44103', '25'), +('4', '110', '6', '111326', '42797', '25'), +('4', '110', '17', '56046', '32638', '25'), +('4', '110', '17', '56083', '30905', '25'), +('4', '110', '17', '81765', '29801', '25'), +('4', '110', '17', '104413', '26941', '25'), +('4', '110', '7', '94053', '32691', '25'), +('4', '110', '7', '56079', '30089', '25'), +('4', '110', '7', '104411', '29028', '25'), +('4', '110', '7', '80525', '21495', '25'), +('4', '110', '9', '67098', '41017', '25'), +('4', '110', '9', '56033', '30748', '25'), +('4', '110', '9', '56031', '30639', '25'), +('4', '110', '9', '56070', '30503', '25'), +('4', '110', '15', '111342', '45699', '25'), +('4', '110', '15', '111348', '45546', '25'), +('4', '110', '15', '111343', '45172', '25'), +('4', '110', '15', '111345', '43613', '25'), +('4', '110', '20', '111354', '54352', '25'), +('4', '110', '20', '111352', '53839', '25'), +('4', '110', '20', '111355', '53428', '25'), +('4', '110', '20', '111351', '51733', '25'), +('4', '110', '12', '56073', '29838', '25'), +('4', '110', '12', '81795', '28925', '25'), +('4', '110', '12', '104408', '26470', '25'), +('4', '110', '12', '53385', '24852', '25'), +('4', '110', '18', '62986', '30675', '25'), +('4', '110', '18', '56041', '30204', '25'), +('4', '110', '18', '94054', '29022', '25'), +('4', '110', '18', '104412', '28820', '25'), +('4', '110', '19', '62904', '37412', '25'), +('4', '110', '19', '62990', '31986', '25'), +('4', '110', '19', '56037', '30690', '25'), +('4', '110', '19', '56075', '28755', '25'), +('4', '110', '13', '111815', '530209', '25'), +('4', '110', '13', '111871', '530118', '25'), +('4', '110', '13', '111515', '511659', '25'), +('4', '110', '13', '111512', '510633', '25'), +('4', '110', '14', '111815', '530209', '25'), +('4', '110', '14', '111871', '530118', '25'), +('4', '110', '14', '111515', '511659', '25'), +('4', '110', '14', '111512', '510633', '25'), +('4', '110', '11', '111529', '560259', '25'), +('4', '110', '11', '111229', '537185', '25'), +('4', '110', '11', '106769', '470628', '25'), +('4', '110', '11', '62939', '457927', '25'), +('4', '110', '22', '7867', '0', '24'), +('4', '110', '22', '39342', '0', '24'), +('4', '110', '22', '23597', '0', '24'), +('4', '110', '22', '66166', '0', '24'), +('4', '110', '1', '98769', '62613', '24'), +('4', '110', '1', '111300', '44857', '24'), +('4', '110', '1', '111302', '44685', '24'), +('4', '110', '1', '111305', '44285', '24'), +('4', '110', '2', '94056', '31605', '24'), +('4', '110', '2', '62985', '30165', '24'), +('4', '110', '2', '80524', '29332', '24'), +('4', '110', '2', '104410', '24720', '24'), +('4', '110', '3', '111315', '44844', '24'), +('4', '110', '3', '111313', '44345', '24'), +('4', '110', '3', '111316', '43248', '24'), +('4', '110', '3', '111014', '40538', '24'), +('4', '110', '5', '111317', '44720', '24'), +('4', '110', '5', '111318', '44032', '24'), +('4', '110', '5', '111320', '42634', '24'), +('4', '110', '5', '111319', '42347', '24'), +('4', '110', '8', '111331', '45180', '24'), +('4', '110', '8', '111332', '44395', '24'), +('4', '110', '8', '111328', '43809', '24'), +('4', '110', '8', '111030', '40904', '24'), +('4', '110', '6', '111324', '44321', '24'), +('4', '110', '6', '111322', '44139', '24'), +('4', '110', '6', '106812', '44103', '24'), +('4', '110', '6', '111326', '42797', '24'), +('4', '110', '17', '56046', '32638', '24'), +('4', '110', '17', '56083', '30905', '24'), +('4', '110', '17', '81765', '29801', '24'), +('4', '110', '17', '104413', '26941', '24'), +('4', '110', '7', '94053', '32691', '24'), +('4', '110', '7', '56079', '30089', '24'), +('4', '110', '7', '104411', '29028', '24'), +('4', '110', '7', '80525', '21495', '24'), +('4', '110', '9', '67098', '41017', '24'), +('4', '110', '9', '56033', '30748', '24'), +('4', '110', '9', '56031', '30639', '24'), +('4', '110', '9', '56070', '30503', '24'), +('4', '110', '15', '111342', '45699', '24'), +('4', '110', '15', '111348', '45546', '24'), +('4', '110', '15', '111343', '45172', '24'), +('4', '110', '15', '111345', '43613', '24'), +('4', '110', '20', '111354', '54352', '24'), +('4', '110', '20', '111352', '53839', '24'), +('4', '110', '20', '111355', '53428', '24'), +('4', '110', '20', '111351', '51733', '24'), +('4', '110', '12', '56073', '29838', '24'), +('4', '110', '12', '81795', '28925', '24'), +('4', '110', '12', '104408', '26470', '24'), +('4', '110', '12', '53385', '24852', '24'), +('4', '110', '18', '62986', '30675', '24'), +('4', '110', '18', '56041', '30204', '24'), +('4', '110', '18', '94054', '29022', '24'), +('4', '110', '18', '104412', '28820', '24'), +('4', '110', '19', '62990', '31986', '24'), +('4', '110', '19', '56037', '30690', '24'), +('4', '110', '19', '56075', '28755', '24'), +('4', '110', '19', '104409', '28242', '24'), +('4', '110', '13', '111815', '530209', '24'), +('4', '110', '13', '111871', '530118', '24'), +('4', '110', '13', '111515', '511659', '24'), +('4', '110', '13', '111512', '510633', '24'), +('4', '110', '14', '111815', '530209', '24'), +('4', '110', '14', '111871', '530118', '24'), +('4', '110', '14', '111515', '511659', '24'), +('4', '110', '14', '111512', '510633', '24'), +('4', '110', '11', '111529', '560259', '24'), +('4', '110', '11', '111229', '537185', '24'), +('4', '110', '11', '106769', '470628', '24'), +('4', '110', '11', '62939', '457927', '24'), +('4', '111', '22', '7867', '0', '25'), +('4', '111', '22', '39342', '0', '25'), +('4', '111', '22', '23597', '0', '25'), +('4', '111', '22', '66166', '0', '25'), +('4', '111', '1', '98769', '62614', '25'), +('4', '111', '1', '111300', '44858', '25'), +('4', '111', '1', '111302', '44686', '25'), +('4', '111', '1', '111305', '44286', '25'), +('4', '111', '2', '94056', '31606', '25'), +('4', '111', '2', '62985', '30166', '25'), +('4', '111', '2', '80524', '29333', '25'), +('4', '111', '2', '104410', '24721', '25'), +('4', '111', '3', '111315', '44845', '25'), +('4', '111', '3', '111313', '44346', '25'), +('4', '111', '3', '111316', '43249', '25'), +('4', '111', '3', '111014', '40539', '25'), +('4', '111', '5', '111317', '44721', '25'), +('4', '111', '5', '111318', '44032', '25'), +('4', '111', '5', '111320', '42635', '25'), +('4', '111', '5', '111319', '42348', '25'), +('4', '111', '8', '111331', '45181', '25'), +('4', '111', '8', '111332', '44396', '25'), +('4', '111', '8', '111328', '43810', '25'), +('4', '111', '8', '111030', '40905', '25'), +('4', '111', '6', '111324', '44322', '25'), +('4', '111', '6', '111322', '44140', '25'), +('4', '111', '6', '106812', '44103', '25'), +('4', '111', '6', '111326', '42798', '25'), +('4', '111', '17', '56046', '32639', '25'), +('4', '111', '17', '56083', '30905', '25'), +('4', '111', '17', '81765', '29801', '25'), +('4', '111', '17', '104413', '26942', '25'), +('4', '111', '7', '94053', '32692', '25'), +('4', '111', '7', '56079', '30089', '25'), +('4', '111', '7', '104411', '29029', '25'), +('4', '111', '7', '80525', '21496', '25'), +('4', '111', '9', '67098', '41018', '25'), +('4', '111', '9', '56033', '30748', '25'), +('4', '111', '9', '56031', '30640', '25'), +('4', '111', '9', '56070', '30504', '25'), +('4', '111', '15', '111342', '45700', '25'), +('4', '111', '15', '111348', '45547', '25'), +('4', '111', '15', '111343', '45172', '25'), +('4', '111', '15', '111345', '43614', '25'), +('4', '111', '20', '111354', '54353', '25'), +('4', '111', '20', '111352', '53840', '25'), +('4', '111', '20', '111355', '53428', '25'), +('4', '111', '20', '111351', '51734', '25'), +('4', '111', '12', '56073', '29839', '25'), +('4', '111', '12', '81795', '28926', '25'), +('4', '111', '12', '104408', '26471', '25'), +('4', '111', '12', '53385', '24853', '25'), +('4', '111', '18', '62986', '30676', '25'), +('4', '111', '18', '56041', '30205', '25'), +('4', '111', '18', '94054', '29022', '25'), +('4', '111', '18', '104412', '28820', '25'), +('4', '111', '19', '62904', '37413', '25'), +('4', '111', '19', '62990', '31986', '25'), +('4', '111', '19', '56037', '30691', '25'), +('4', '111', '19', '56075', '28756', '25'), +('4', '111', '13', '111815', '531410', '25'), +('4', '111', '13', '111871', '531379', '25'), +('4', '111', '13', '111515', '512860', '25'), +('4', '111', '13', '111512', '511834', '25'), +('4', '111', '14', '111815', '531410', '25'), +('4', '111', '14', '111871', '531379', '25'), +('4', '111', '14', '111515', '512860', '25'), +('4', '111', '14', '111512', '511834', '25'), +('4', '111', '11', '111529', '561160', '25'), +('4', '111', '11', '111229', '538085', '25'), +('4', '111', '11', '106769', '471409', '25'), +('4', '111', '11', '62939', '458648', '25'), +('4', '112', '22', '7867', '0', '25'), +('4', '112', '22', '39342', '0', '25'), +('4', '112', '22', '23597', '0', '25'), +('4', '112', '22', '66166', '0', '25'), +('4', '112', '1', '98769', '62614', '25'), +('4', '112', '1', '111300', '44858', '25'), +('4', '112', '1', '111302', '44686', '25'), +('4', '112', '1', '111305', '44287', '25'), +('4', '112', '2', '94056', '31607', '25'), +('4', '112', '2', '62985', '30167', '25'), +('4', '112', '2', '80524', '29334', '25'), +('4', '112', '2', '104410', '24722', '25'), +('4', '112', '3', '111315', '44846', '25'), +('4', '112', '3', '111313', '44347', '25'), +('4', '112', '3', '111316', '43250', '25'), +('4', '112', '3', '111014', '40540', '25'), +('4', '112', '5', '111317', '44722', '25'), +('4', '112', '5', '111318', '44033', '25'), +('4', '112', '5', '111320', '42636', '25'), +('4', '112', '5', '111319', '42348', '25'), +('4', '112', '8', '111331', '45182', '25'), +('4', '112', '8', '111332', '44396', '25'), +('4', '112', '8', '111328', '43810', '25'), +('4', '112', '8', '111030', '40906', '25'), +('4', '112', '6', '111324', '44322', '25'), +('4', '112', '6', '111322', '44140', '25'), +('4', '112', '6', '106812', '44104', '25'), +('4', '112', '6', '111326', '42799', '25'), +('4', '112', '17', '56046', '32640', '25'), +('4', '112', '17', '56083', '30906', '25'), +('4', '112', '17', '81765', '29802', '25'), +('4', '112', '17', '104413', '26943', '25'), +('4', '112', '7', '94053', '32692', '25'), +('4', '112', '7', '56079', '30090', '25'), +('4', '112', '7', '104411', '29030', '25'), +('4', '112', '7', '80525', '21497', '25'), +('4', '112', '9', '67098', '41019', '25'), +('4', '112', '9', '56033', '30749', '25'), +('4', '112', '9', '56031', '30640', '25'), +('4', '112', '9', '56070', '30505', '25'), +('4', '112', '15', '111342', '45701', '25'), +('4', '112', '15', '111348', '45548', '25'), +('4', '112', '15', '111343', '45173', '25'), +('4', '112', '15', '111345', '43615', '25'), +('4', '112', '20', '111354', '54354', '25'), +('4', '112', '20', '111352', '53840', '25'), +('4', '112', '20', '111355', '53429', '25'), +('4', '112', '20', '111351', '51735', '25'), +('4', '112', '12', '56073', '29839', '25'), +('4', '112', '12', '81795', '28927', '25'), +('4', '112', '12', '104408', '26471', '25'), +('4', '112', '12', '53385', '24853', '25'), +('4', '112', '18', '62986', '30677', '25'), +('4', '112', '18', '56041', '30206', '25'), +('4', '112', '18', '94054', '29023', '25'), +('4', '112', '18', '104412', '28821', '25'), +('4', '112', '19', '62904', '37414', '25'), +('4', '112', '19', '62990', '31987', '25'), +('4', '112', '19', '56037', '30692', '25'), +('4', '112', '19', '56075', '28757', '25'), +('4', '112', '13', '111815', '532671', '25'), +('4', '112', '13', '111871', '532579', '25'), +('4', '112', '13', '111515', '514061', '25'), +('4', '112', '13', '111512', '513034', '25'), +('4', '112', '14', '111815', '532671', '25'), +('4', '112', '14', '111871', '532579', '25'), +('4', '112', '14', '111515', '514061', '25'), +('4', '112', '14', '111512', '513034', '25'), +('4', '112', '11', '111529', '562121', '25'), +('4', '112', '11', '111229', '538986', '25'), +('4', '112', '11', '106769', '472190', '25'), +('4', '112', '11', '62939', '459428', '25'), +('4', '113', '22', '7867', '0', '25'), +('4', '113', '22', '39342', '0', '25'), +('4', '113', '22', '23597', '0', '25'), +('4', '113', '22', '66166', '0', '25'), +('4', '113', '1', '98769', '62615', '25'), +('4', '113', '1', '111300', '44859', '25'), +('4', '113', '1', '111302', '44687', '25'), +('4', '113', '1', '111305', '44288', '25'), +('4', '113', '2', '94056', '31608', '25'), +('4', '113', '2', '62985', '30167', '25'), +('4', '113', '2', '80524', '29335', '25'), +('4', '113', '2', '104410', '24723', '25'), +('4', '113', '3', '111315', '44847', '25'), +('4', '113', '3', '111313', '44347', '25'), +('4', '113', '3', '111316', '43250', '25'), +('4', '113', '3', '111014', '40541', '25'), +('4', '113', '5', '111317', '44722', '25'), +('4', '113', '5', '111318', '44034', '25'), +('4', '113', '5', '111320', '42636', '25'), +('4', '113', '5', '111319', '42349', '25'), +('4', '113', '8', '111331', '45183', '25'), +('4', '113', '8', '111332', '44397', '25'), +('4', '113', '8', '111328', '43811', '25'), +('4', '113', '8', '111030', '40907', '25'), +('4', '113', '6', '111324', '44323', '25'), +('4', '113', '6', '111322', '44141', '25'), +('4', '113', '6', '106812', '44104', '25'), +('4', '113', '6', '111326', '42800', '25'), +('4', '113', '17', '56046', '32641', '25'), +('4', '113', '17', '56083', '30906', '25'), +('4', '113', '17', '81765', '29803', '25'), +('4', '113', '17', '104413', '26944', '25'), +('4', '113', '7', '94053', '32693', '25'), +('4', '113', '7', '56079', '30091', '25'), +('4', '113', '7', '104411', '29032', '25'), +('4', '113', '7', '80525', '21498', '25'), +('4', '113', '9', '67098', '41019', '25'), +('4', '113', '9', '56033', '30750', '25'), +('4', '113', '9', '56031', '30641', '25'), +('4', '113', '9', '56070', '30505', '25'), +('4', '113', '15', '111342', '45702', '25'), +('4', '113', '15', '111348', '45549', '25'), +('4', '113', '15', '111343', '45174', '25'), +('4', '113', '15', '111345', '43615', '25'), +('4', '113', '20', '111354', '54355', '25'), +('4', '113', '20', '111352', '53841', '25'), +('4', '113', '20', '111355', '53429', '25'), +('4', '113', '20', '111351', '51735', '25'), +('4', '113', '12', '56073', '29840', '25'), +('4', '113', '12', '81795', '28928', '25'), +('4', '113', '12', '104408', '26472', '25'), +('4', '113', '12', '53385', '24854', '25'), +('4', '113', '18', '62986', '30678', '25'), +('4', '113', '18', '56041', '30206', '25'), +('4', '113', '18', '94054', '29024', '25'), +('4', '113', '18', '104412', '28821', '25'), +('4', '113', '19', '62904', '37415', '25'), +('4', '113', '19', '62990', '31988', '25'), +('4', '113', '19', '56037', '30692', '25'), +('4', '113', '19', '56075', '28758', '25'), +('4', '113', '13', '111815', '533872', '25'), +('4', '113', '13', '111871', '533780', '25'), +('4', '113', '13', '111515', '515261', '25'), +('4', '113', '13', '111512', '514175', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('4', '113', '14', '111815', '533872', '25'), +('4', '113', '14', '111871', '533780', '25'), +('4', '113', '14', '111515', '515261', '25'), +('4', '113', '14', '111512', '514175', '25'), +('4', '113', '11', '111529', '563021', '25'), +('4', '113', '11', '111229', '539887', '25'), +('4', '113', '11', '106769', '472972', '25'), +('4', '113', '11', '62939', '460209', '25'), +('4', '114', '22', '7867', '0', '25'), +('4', '114', '22', '39342', '0', '25'), +('4', '114', '22', '23597', '0', '25'), +('4', '114', '22', '66166', '0', '25'), +('4', '114', '1', '98769', '62615', '25'), +('4', '114', '1', '111300', '44860', '25'), +('4', '114', '1', '111302', '44688', '25'), +('4', '114', '1', '111305', '44289', '25'), +('4', '114', '2', '94056', '31608', '25'), +('4', '114', '2', '62985', '30168', '25'), +('4', '114', '2', '80524', '29336', '25'), +('4', '114', '2', '104410', '24723', '25'), +('4', '114', '3', '111315', '44848', '25'), +('4', '114', '3', '111313', '44348', '25'), +('4', '114', '3', '111316', '43251', '25'), +('4', '114', '3', '111014', '40542', '25'), +('4', '114', '5', '111317', '44723', '25'), +('4', '114', '5', '111318', '44034', '25'), +('4', '114', '5', '111320', '42637', '25'), +('4', '114', '5', '111319', '42350', '25'), +('4', '114', '8', '111331', '45184', '25'), +('4', '114', '8', '111332', '44398', '25'), +('4', '114', '8', '111328', '43812', '25'), +('4', '114', '8', '111030', '40908', '25'), +('4', '114', '6', '111324', '44324', '25'), +('4', '114', '6', '111322', '44141', '25'), +('4', '114', '6', '106812', '44105', '25'), +('4', '114', '6', '111326', '42801', '25'), +('4', '114', '17', '56046', '32641', '25'), +('4', '114', '17', '56083', '30907', '25'), +('4', '114', '17', '81765', '29803', '25'), +('4', '114', '17', '104413', '26945', '25'), +('4', '114', '7', '94053', '32694', '25'), +('4', '114', '7', '56079', '30092', '25'), +('4', '114', '7', '104411', '29033', '25'), +('4', '114', '7', '80525', '21499', '25'), +('4', '114', '9', '67098', '41020', '25'), +('4', '114', '9', '56033', '30750', '25'), +('4', '114', '9', '56031', '30642', '25'), +('4', '114', '9', '56070', '30506', '25'), +('4', '114', '15', '111342', '45703', '25'), +('4', '114', '15', '111348', '45550', '25'), +('4', '114', '15', '111343', '45175', '25'), +('4', '114', '15', '111345', '43616', '25'), +('4', '114', '20', '111354', '54356', '25'), +('4', '114', '20', '111352', '53842', '25'), +('4', '114', '20', '111355', '53430', '25'), +('4', '114', '20', '111351', '51736', '25'), +('4', '114', '12', '56073', '29841', '25'), +('4', '114', '12', '81795', '28928', '25'), +('4', '114', '12', '104408', '26473', '25'), +('4', '114', '12', '53385', '24855', '25'), +('4', '114', '18', '62986', '30679', '25'), +('4', '114', '18', '56041', '30207', '25'), +('4', '114', '18', '94054', '29024', '25'), +('4', '114', '18', '104412', '28822', '25'), +('4', '114', '19', '62904', '37416', '25'), +('4', '114', '19', '62990', '31988', '25'), +('4', '114', '19', '56037', '30693', '25'), +('4', '114', '19', '56075', '28759', '25'), +('4', '114', '13', '111815', '535073', '25'), +('4', '114', '13', '111871', '535041', '25'), +('4', '114', '13', '111515', '516462', '25'), +('4', '114', '13', '111512', '515376', '25'), +('4', '114', '14', '111815', '535073', '25'), +('4', '114', '14', '111871', '535041', '25'), +('4', '114', '14', '111515', '516462', '25'), +('4', '114', '14', '111512', '515376', '25'), +('4', '114', '11', '111529', '563922', '25'), +('4', '114', '11', '111229', '540788', '25'), +('4', '114', '11', '106769', '473753', '25'), +('4', '114', '11', '62939', '460990', '25'), +('4', '115', '22', '7867', '0', '26'), +('4', '115', '22', '39342', '0', '26'), +('4', '115', '22', '23597', '0', '26'), +('4', '115', '22', '66166', '0', '26'), +('4', '115', '1', '98769', '62616', '26'), +('4', '115', '1', '111300', '44860', '26'), +('4', '115', '1', '111302', '44689', '26'), +('4', '115', '1', '111305', '44290', '26'), +('4', '115', '2', '94056', '31609', '26'), +('4', '115', '2', '62985', '30169', '26'), +('4', '115', '2', '80524', '29337', '26'), +('4', '115', '2', '104410', '24724', '26'), +('4', '115', '3', '111315', '44849', '26'), +('4', '115', '3', '111313', '44349', '26'), +('4', '115', '3', '111316', '43252', '26'), +('4', '115', '3', '111014', '40543', '26'), +('4', '115', '5', '111317', '44724', '26'), +('4', '115', '5', '111318', '44035', '26'), +('4', '115', '5', '111320', '42638', '26'), +('4', '115', '5', '111319', '42351', '26'), +('4', '115', '8', '111331', '45185', '26'), +('4', '115', '8', '111332', '44399', '26'), +('4', '115', '8', '111328', '43812', '26'), +('4', '115', '8', '111030', '40909', '26'), +('4', '115', '6', '111324', '44324', '26'), +('4', '115', '6', '111322', '44142', '26'), +('4', '115', '6', '106812', '44105', '26'), +('4', '115', '6', '111326', '42802', '26'), +('4', '115', '17', '56046', '32642', '26'), +('4', '115', '17', '56083', '30907', '26'), +('4', '115', '17', '81765', '29804', '26'), +('4', '115', '17', '104413', '26946', '26'), +('4', '115', '7', '94053', '32694', '26'), +('4', '115', '7', '56079', '30093', '26'), +('4', '115', '7', '104411', '29034', '26'), +('4', '115', '7', '80525', '21500', '26'), +('4', '115', '9', '67098', '41021', '26'), +('4', '115', '9', '56033', '30751', '26'), +('4', '115', '9', '56031', '30642', '26'), +('4', '115', '9', '56070', '30507', '26'), +('4', '115', '15', '111342', '45704', '26'), +('4', '115', '15', '111348', '45551', '26'), +('4', '115', '15', '111343', '45176', '26'), +('4', '115', '15', '111345', '43616', '26'), +('4', '115', '20', '111354', '54357', '26'), +('4', '115', '20', '111352', '53843', '26'), +('4', '115', '20', '111355', '53431', '26'), +('4', '115', '20', '111351', '51737', '26'), +('4', '115', '12', '56073', '29842', '26'), +('4', '115', '12', '81795', '28929', '26'), +('4', '115', '12', '104408', '26474', '26'), +('4', '115', '12', '53385', '24855', '26'), +('4', '115', '18', '62986', '30680', '26'), +('4', '115', '18', '56041', '30208', '26'), +('4', '115', '18', '94054', '29025', '26'), +('4', '115', '18', '104412', '28822', '26'), +('4', '115', '19', '62904', '37418', '26'), +('4', '115', '19', '62990', '31989', '26'), +('4', '115', '19', '56037', '30694', '26'), +('4', '115', '19', '56075', '28760', '26'), +('4', '115', '13', '111815', '536333', '26'), +('4', '115', '13', '111871', '536242', '26'), +('4', '115', '13', '111515', '517663', '26'), +('4', '115', '13', '111512', '516577', '26'), +('4', '115', '14', '111815', '536333', '26'), +('4', '115', '14', '111871', '536242', '26'), +('4', '115', '14', '111515', '517663', '26'), +('4', '115', '14', '111512', '516577', '26'), +('4', '115', '11', '111529', '564883', '26'), +('4', '115', '11', '111229', '541689', '26'), +('4', '115', '11', '106769', '474534', '26'), +('4', '115', '11', '62939', '461710', '26'), +('5', '1', '22', '8567', '0', '0'), +('5', '1', '22', '10323', '0', '0'), +('5', '1', '22', '8504', '0', '0'), +('5', '1', '22', '9246', '0', '0'), +('5', '1', '1', '14701', '4854', '0'), +('5', '1', '1', '14702', '3550', '0'), +('5', '1', '1', '10082', '2434', '0'), +('5', '1', '1', '10165', '1940', '0'), +('5', '1', '2', '4841', '8967', '0'), +('5', '1', '2', '4301', '7726', '0'), +('5', '1', '2', '4831', '6058', '0'), +('5', '1', '2', '10142', '4824', '0'), +('5', '1', '3', '4322', '5343', '0'), +('5', '1', '3', '1544', '4489', '0'), +('5', '1', '3', '21002', '2114', '0'), +('5', '1', '3', '21014', '2114', '0'), +('5', '1', '5', '14703', '7150', '0'), +('5', '1', '5', '27705', '5648', '0'), +('5', '1', '5', '14700', '4806', '0'), +('5', '1', '5', '10055', '4760', '0'), +('5', '1', '8', '11621', '26579', '0'), +('5', '1', '8', '11551', '8753', '0'), +('5', '1', '8', '1409', '7747', '0'), +('5', '1', '8', '11603', '6053', '0'), +('5', '1', '6', '1557', '8270', '0'), +('5', '1', '6', '11699', '5118', '0'), +('5', '1', '6', '25062', '3672', '0'), +('5', '1', '6', '4302', '3347', '0'), +('5', '1', '17', '4832', '11404', '0'), +('5', '1', '17', '4842', '9741', '0'), +('5', '1', '17', '4309', '8225', '0'), +('5', '1', '17', '11623', '7848', '0'), +('5', '1', '7', '4833', '6478', '0'), +('5', '1', '7', '4843', '5389', '0'), +('5', '1', '7', '4343', '3703', '0'), +('5', '1', '7', '1361', '3624', '0'), +('5', '1', '9', '4834', '4408', '0'), +('5', '1', '9', '12189', '3471', '0'), +('5', '1', '9', '4844', '3061', '0'), +('5', '1', '9', '4344', '3046', '0'), +('5', '1', '15', '10366', '8054', '0'), +('5', '1', '15', '10151', '7200', '0'), +('5', '1', '15', '14679', '7010', '0'), +('5', '1', '15', '14678', '5708', '0'), +('5', '1', '20', '2704', '23246', '0'), +('5', '1', '20', '11601', '17566', '0'), +('5', '1', '20', '2918', '10811', '0'), +('5', '1', '20', '1365', '10500', '0'), +('5', '1', '12', '4835', '9883', '0'), +('5', '1', '12', '20655', '7862', '0'), +('5', '1', '12', '4845', '5521', '0'), +('5', '1', '12', '2923', '4758', '0'), +('5', '1', '18', '4836', '6318', '0'), +('5', '1', '18', '4846', '5554', '0'), +('5', '1', '18', '4346', '4645', '0'), +('5', '1', '18', '3145', '4054', '0'), +('5', '1', '19', '4837', '6988', '0'), +('5', '1', '19', '4847', '5772', '0'), +('5', '1', '19', '68239', '5221', '0'), +('5', '1', '19', '3146', '3335', '0'), +('5', '1', '13', '5401', '19848', '0'), +('5', '1', '13', '27707', '19704', '0'), +('5', '1', '13', '5622', '16025', '0'), +('5', '1', '13', '11609', '15668', '0'), +('5', '1', '14', '11678', '32840', '0'), +('5', '1', '14', '9402', '32671', '0'), +('5', '1', '14', '11632', '27713', '0'), +('5', '1', '14', '11551', '23853', '0'), +('5', '1', '11', '8408', '6861', '0'), +('5', '1', '11', '8325', '6668', '0'), +('5', '1', '11', '8811', '5213', '0'), +('5', '1', '11', '8810', '4798', '0'), +('5', '2', '22', '8567', '0', '0'), +('5', '2', '22', '10323', '0', '0'), +('5', '2', '22', '8504', '0', '0'), +('5', '2', '22', '9246', '0', '0'), +('5', '2', '1', '14701', '4854', '0'), +('5', '2', '1', '14702', '3550', '0'), +('5', '2', '1', '10082', '2455', '0'), +('5', '2', '1', '10165', '1940', '0'), +('5', '2', '2', '4841', '8999', '0'), +('5', '2', '2', '4301', '7726', '0'), +('5', '2', '2', '4831', '6076', '0'), +('5', '2', '2', '10142', '4824', '0'), +('5', '2', '3', '4322', '5343', '0'), +('5', '2', '3', '1544', '4507', '0'), +('5', '2', '3', '21002', '2114', '0'), +('5', '2', '3', '21014', '2114', '0'), +('5', '2', '5', '14703', '7150', '0'), +('5', '2', '5', '27705', '5699', '0'), +('5', '2', '5', '14700', '4806', '0'), +('5', '2', '5', '10055', '4760', '0'), +('5', '2', '8', '11621', '26579', '0'), +('5', '2', '8', '11551', '8753', '0'), +('5', '2', '8', '1409', '7747', '0'), +('5', '2', '8', '11603', '6085', '0'), +('5', '2', '6', '1557', '8270', '0'), +('5', '2', '6', '11699', '5172', '0'), +('5', '2', '6', '25062', '3672', '0'), +('5', '2', '6', '4302', '3373', '0'), +('5', '2', '17', '4832', '11467', '0'), +('5', '2', '17', '4842', '9779', '0'), +('5', '2', '17', '4309', '8225', '0'), +('5', '2', '17', '11623', '7848', '0'), +('5', '2', '7', '4833', '6478', '0'), +('5', '2', '7', '4843', '5389', '0'), +('5', '2', '7', '4343', '3745', '0'), +('5', '2', '7', '1361', '3624', '0'), +('5', '2', '9', '4834', '4408', '0'), +('5', '2', '9', '12189', '3471', '0'), +('5', '2', '9', '4844', '3072', '0'), +('5', '2', '9', '4344', '3046', '0'), +('5', '2', '15', '10366', '8054', '0'), +('5', '2', '15', '10151', '7200', '0'), +('5', '2', '15', '14679', '7010', '0'), +('5', '2', '15', '14678', '5708', '0'), +('5', '2', '20', '2704', '23268', '0'), +('5', '2', '20', '11601', '17608', '0'), +('5', '2', '20', '2918', '10829', '0'), +('5', '2', '20', '1365', '10500', '0'), +('5', '2', '12', '4835', '9904', '0'), +('5', '2', '12', '20655', '7878', '0'), +('5', '2', '12', '4845', '5539', '0'), +('5', '2', '12', '2923', '4758', '0'), +('5', '2', '18', '4836', '6339', '0'), +('5', '2', '18', '4846', '5554', '0'), +('5', '2', '18', '4346', '4645', '0'), +('5', '2', '18', '3145', '4092', '0'), +('5', '2', '19', '4837', '7006', '0'), +('5', '2', '19', '4847', '5793', '0'), +('5', '2', '19', '68239', '5232', '0'), +('5', '2', '19', '3146', '3347', '0'), +('5', '2', '13', '5401', '19848', '0'), +('5', '2', '13', '27707', '19717', '0'), +('5', '2', '13', '5622', '16025', '0'), +('5', '2', '13', '11609', '15668', '0'), +('5', '2', '14', '11678', '32840', '0'), +('5', '2', '14', '9402', '32692', '0'), +('5', '2', '14', '11632', '27777', '0'), +('5', '2', '14', '11551', '23853', '0'), +('5', '2', '11', '8408', '6861', '0'), +('5', '2', '11', '8325', '6668', '0'), +('5', '2', '11', '8811', '5213', '0'), +('5', '2', '11', '8810', '4798', '0'), +('5', '3', '22', '8567', '0', '0'), +('5', '3', '22', '10323', '0', '0'), +('5', '3', '22', '8504', '0', '0'), +('5', '3', '22', '9246', '0', '0'), +('5', '3', '1', '14701', '4854', '0'), +('5', '3', '1', '14702', '3550', '0'), +('5', '3', '1', '10082', '2477', '0'), +('5', '3', '1', '10165', '1940', '0'), +('5', '3', '2', '4841', '9032', '0'), +('5', '3', '2', '4301', '7726', '0'), +('5', '3', '2', '4831', '6094', '0'), +('5', '3', '2', '10142', '4824', '0'), +('5', '3', '3', '4322', '5343', '0'), +('5', '3', '3', '1544', '4525', '0'), +('5', '3', '3', '21002', '2114', '0'), +('5', '3', '3', '21014', '2114', '0'), +('5', '3', '5', '14703', '7150', '0'), +('5', '3', '5', '27705', '5749', '0'), +('5', '3', '5', '14700', '4806', '0'), +('5', '3', '5', '10055', '4760', '0'), +('5', '3', '8', '11621', '26579', '0'), +('5', '3', '8', '11551', '8753', '0'), +('5', '3', '8', '1409', '7747', '0'), +('5', '3', '8', '11603', '6118', '0'), +('5', '3', '6', '1557', '8270', '0'), +('5', '3', '6', '11699', '5227', '0'), +('5', '3', '6', '25062', '3672', '0'), +('5', '3', '6', '4302', '3398', '0'), +('5', '3', '17', '4832', '11530', '0'), +('5', '3', '17', '4842', '9817', '0'), +('5', '3', '17', '4309', '8225', '0'), +('5', '3', '17', '11623', '7848', '0'), +('5', '3', '7', '4833', '6478', '0'), +('5', '3', '7', '4843', '5389', '0'), +('5', '3', '7', '4343', '3787', '0'), +('5', '3', '7', '1361', '3624', '0'), +('5', '3', '9', '4834', '4408', '0'), +('5', '3', '9', '12189', '3471', '0'), +('5', '3', '9', '4844', '3083', '0'), +('5', '3', '9', '4344', '3046', '0'), +('5', '3', '15', '10366', '8054', '0'), +('5', '3', '15', '10151', '7200', '0'), +('5', '3', '15', '14679', '7010', '0'), +('5', '3', '15', '14678', '5708', '0'), +('5', '3', '20', '2704', '23289', '0'), +('5', '3', '20', '11601', '17650', '0'), +('5', '3', '20', '2918', '10847', '0'), +('5', '3', '20', '1365', '10500', '0'), +('5', '3', '12', '4835', '9926', '0'), +('5', '3', '12', '20655', '7894', '0'), +('5', '3', '12', '4845', '5557', '0'), +('5', '3', '12', '2923', '4758', '0'), +('5', '3', '18', '4836', '6360', '0'), +('5', '3', '18', '4846', '5554', '0'), +('5', '3', '18', '4346', '4645', '0'), +('5', '3', '18', '3145', '4130', '0'), +('5', '3', '19', '4837', '7025', '0'), +('5', '3', '19', '4847', '5814', '0'), +('5', '3', '19', '68239', '5243', '0'), +('5', '3', '19', '3146', '3360', '0'), +('5', '3', '13', '5401', '19848', '0'), +('5', '3', '13', '27707', '19730', '0'), +('5', '3', '13', '5622', '16025', '0'), +('5', '3', '13', '11609', '15668', '0'), +('5', '3', '14', '11678', '32840', '0'), +('5', '3', '14', '9402', '32713', '0'), +('5', '3', '14', '11632', '27840', '0'), +('5', '3', '14', '11551', '23853', '0'), +('5', '3', '11', '8408', '6861', '0'), +('5', '3', '11', '8325', '6668', '0'), +('5', '3', '11', '8811', '5213', '0'), +('5', '3', '11', '8810', '4798', '0'), +('5', '4', '22', '8567', '0', '0'), +('5', '4', '22', '10323', '0', '0'), +('5', '4', '22', '8504', '0', '0'), +('5', '4', '22', '9246', '0', '0'), +('5', '4', '1', '14701', '4854', '0'), +('5', '4', '1', '14702', '3550', '0'), +('5', '4', '1', '10082', '2499', '0'), +('5', '4', '1', '10165', '1940', '0'), +('5', '4', '2', '4841', '9064', '0'), +('5', '4', '2', '4301', '7726', '0'), +('5', '4', '2', '4831', '6112', '0'), +('5', '4', '2', '10142', '4824', '0'), +('5', '4', '3', '4322', '5343', '0'), +('5', '4', '3', '1544', '4543', '0'), +('5', '4', '3', '21002', '2114', '0'), +('5', '4', '3', '21014', '2114', '0'), +('5', '4', '5', '14703', '7150', '0'), +('5', '4', '5', '27705', '5800', '0'), +('5', '4', '5', '14700', '4806', '0'), +('5', '4', '5', '10055', '4760', '0'), +('5', '4', '8', '11621', '26579', '0'), +('5', '4', '8', '11551', '8753', '0'), +('5', '4', '8', '1409', '7747', '0'), +('5', '4', '8', '11603', '6150', '0'), +('5', '4', '6', '1557', '8270', '0'), +('5', '4', '6', '11699', '5281', '0'), +('5', '4', '6', '25062', '3672', '0'), +('5', '4', '6', '4302', '3423', '0'), +('5', '4', '17', '4832', '11594', '0'), +('5', '4', '17', '4842', '9855', '0'), +('5', '4', '17', '4309', '8225', '0'), +('5', '4', '17', '11623', '7848', '0'), +('5', '4', '7', '4833', '6478', '0'), +('5', '4', '7', '4843', '5389', '0'), +('5', '4', '7', '4343', '3829', '0'), +('5', '4', '7', '1361', '3624', '0'), +('5', '4', '9', '4834', '4408', '0'), +('5', '4', '9', '12189', '3471', '0'), +('5', '4', '9', '4844', '3094', '0'), +('5', '4', '9', '4344', '3046', '0'), +('5', '4', '15', '10366', '8054', '0'), +('5', '4', '15', '10151', '7200', '0'), +('5', '4', '15', '14679', '7010', '0'), +('5', '4', '15', '14678', '5708', '0'), +('5', '4', '20', '2704', '23311', '0'), +('5', '4', '20', '11601', '17693', '0'), +('5', '4', '20', '2918', '10865', '0'), +('5', '4', '20', '1365', '10500', '0'), +('5', '4', '12', '4835', '9947', '0'), +('5', '4', '12', '20655', '7910', '0'), +('5', '4', '12', '4845', '5575', '0'), +('5', '4', '12', '2923', '4758', '0'), +('5', '4', '18', '4836', '6381', '0'), +('5', '4', '18', '4846', '5554', '0'), +('5', '4', '18', '4346', '4645', '0'), +('5', '4', '18', '3145', '4168', '0'), +('5', '4', '19', '4837', '7043', '0'), +('5', '4', '19', '4847', '5835', '0'), +('5', '4', '19', '68239', '5254', '0'), +('5', '4', '19', '3146', '3373', '0'), +('5', '4', '13', '5401', '19848', '0'), +('5', '4', '13', '27707', '19742', '0'), +('5', '4', '13', '5622', '16025', '0'), +('5', '4', '13', '11609', '15668', '0'), +('5', '4', '14', '11678', '32840', '0'), +('5', '4', '14', '9402', '32735', '0'), +('5', '4', '14', '11632', '27904', '0'), +('5', '4', '14', '11551', '23853', '0'), +('5', '4', '11', '8408', '6861', '0'), +('5', '4', '11', '8325', '6668', '0'), +('5', '4', '11', '8811', '5213', '0'), +('5', '4', '11', '8810', '4798', '0'), +('5', '5', '22', '8567', '0', '0'), +('5', '5', '22', '10323', '0', '0'), +('5', '5', '22', '8504', '0', '0'), +('5', '5', '22', '9246', '0', '0'), +('5', '5', '1', '14701', '4854', '0'), +('5', '5', '1', '14702', '3550', '0'), +('5', '5', '1', '10082', '2521', '0'), +('5', '5', '1', '10165', '1940', '0'), +('5', '5', '2', '4841', '9097', '0'), +('5', '5', '2', '4301', '7726', '0'), +('5', '5', '2', '4831', '6131', '0'), +('5', '5', '2', '10142', '4824', '0'), +('5', '5', '3', '4322', '5343', '0'), +('5', '5', '3', '1544', '4561', '0'), +('5', '5', '3', '21002', '2114', '0'), +('5', '5', '3', '21014', '2114', '0'), +('5', '5', '5', '14703', '7150', '0'), +('5', '5', '5', '27705', '5851', '0'), +('5', '5', '5', '14700', '4806', '0'), +('5', '5', '5', '10055', '4760', '0'), +('5', '5', '8', '11621', '26579', '0'), +('5', '5', '8', '11551', '8753', '0'), +('5', '5', '8', '1409', '7747', '0'), +('5', '5', '8', '11603', '6183', '0'), +('5', '5', '6', '1557', '8270', '0'), +('5', '5', '6', '11699', '5335', '0'), +('5', '5', '6', '25062', '3672', '0'), +('5', '5', '6', '4302', '3452', '0'), +('5', '5', '17', '4832', '11666', '0'), +('5', '5', '17', '4842', '9899', '0'), +('5', '5', '17', '4309', '8225', '0'), +('5', '5', '17', '11623', '7848', '0'), +('5', '5', '7', '4833', '6478', '0'), +('5', '5', '7', '4843', '5389', '0'), +('5', '5', '7', '4343', '3878', '0'), +('5', '5', '7', '1361', '3624', '0'), +('5', '5', '9', '4834', '4408', '0'), +('5', '5', '9', '12189', '3471', '0'), +('5', '5', '9', '4844', '3105', '0'), +('5', '5', '9', '4344', '3046', '0'), +('5', '5', '15', '10366', '8054', '0'), +('5', '5', '15', '10151', '7200', '0'), +('5', '5', '15', '14679', '7010', '0'), +('5', '5', '15', '14678', '5708', '0'), +('5', '5', '20', '2704', '23333', '0'), +('5', '5', '20', '11601', '17741', '0'), +('5', '5', '20', '2918', '10883', '0'), +('5', '5', '20', '1365', '10500', '0'), +('5', '5', '12', '4835', '9971', '0'), +('5', '5', '12', '20655', '7926', '0'), +('5', '5', '12', '4845', '5593', '0'), +('5', '5', '12', '2923', '4758', '0'), +('5', '5', '18', '4836', '6405', '0'), +('5', '5', '18', '4846', '5554', '0'), +('5', '5', '18', '4346', '4645', '0'), +('5', '5', '18', '3145', '4212', '0'), +('5', '5', '19', '4837', '7061', '0'), +('5', '5', '19', '4847', '5859', '0'), +('5', '5', '19', '68239', '5265', '0'), +('5', '5', '19', '3146', '3387', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '5', '13', '5401', '19848', '0'), +('5', '5', '13', '27707', '19755', '0'), +('5', '5', '13', '5622', '16025', '0'), +('5', '5', '13', '11609', '15668', '0'), +('5', '5', '14', '11678', '32840', '0'), +('5', '5', '14', '9402', '32759', '0'), +('5', '5', '14', '11632', '27976', '0'), +('5', '5', '14', '11551', '23853', '0'), +('5', '5', '11', '8408', '6861', '0'), +('5', '5', '11', '8325', '6668', '0'), +('5', '5', '11', '8811', '5213', '0'), +('5', '5', '11', '8810', '4798', '0'), +('5', '6', '22', '8567', '0', '0'), +('5', '6', '22', '10323', '0', '0'), +('5', '6', '22', '8504', '0', '0'), +('5', '6', '22', '9246', '0', '0'), +('5', '6', '1', '14701', '4854', '0'), +('5', '6', '1', '14702', '3550', '0'), +('5', '6', '1', '10082', '2542', '0'), +('5', '6', '1', '10165', '1940', '0'), +('5', '6', '2', '4841', '9130', '0'), +('5', '6', '2', '4301', '7726', '0'), +('5', '6', '2', '4831', '6149', '0'), +('5', '6', '2', '10142', '4824', '0'), +('5', '6', '3', '4322', '5343', '0'), +('5', '6', '3', '1544', '4579', '0'), +('5', '6', '3', '71529', '2161', '0'), +('5', '6', '3', '21002', '2114', '0'), +('5', '6', '5', '14703', '7150', '0'), +('5', '6', '5', '27705', '5902', '0'), +('5', '6', '5', '14700', '4806', '0'), +('5', '6', '5', '10055', '4760', '0'), +('5', '6', '8', '11621', '26579', '0'), +('5', '6', '8', '11551', '8753', '0'), +('5', '6', '8', '1409', '7747', '0'), +('5', '6', '8', '11603', '6216', '0'), +('5', '6', '6', '1557', '8270', '0'), +('5', '6', '6', '11699', '5390', '0'), +('5', '6', '6', '25062', '3672', '0'), +('5', '6', '6', '4302', '3478', '0'), +('5', '6', '17', '4832', '11730', '0'), +('5', '6', '17', '4842', '9937', '0'), +('5', '6', '17', '4309', '8225', '0'), +('5', '6', '17', '11623', '7848', '0'), +('5', '6', '7', '4833', '6478', '0'), +('5', '6', '7', '4843', '5389', '0'), +('5', '6', '7', '4343', '3920', '0'), +('5', '6', '7', '1361', '3624', '0'), +('5', '6', '9', '4834', '4408', '0'), +('5', '6', '9', '12189', '3471', '0'), +('5', '6', '9', '4844', '3115', '0'), +('5', '6', '9', '4344', '3046', '0'), +('5', '6', '15', '10366', '8054', '0'), +('5', '6', '15', '10151', '7200', '0'), +('5', '6', '15', '14679', '7010', '0'), +('5', '6', '15', '14678', '5708', '0'), +('5', '6', '20', '2704', '23355', '0'), +('5', '6', '20', '11601', '17783', '0'), +('5', '6', '20', '2918', '10901', '0'), +('5', '6', '20', '1365', '10500', '0'), +('5', '6', '12', '4835', '9992', '0'), +('5', '6', '12', '20655', '7942', '0'), +('5', '6', '12', '4845', '5611', '0'), +('5', '6', '12', '2923', '4758', '0'), +('5', '6', '18', '4836', '6427', '0'), +('5', '6', '18', '4846', '5554', '0'), +('5', '6', '18', '4346', '4645', '0'), +('5', '6', '18', '3145', '4250', '0'), +('5', '6', '19', '4837', '7079', '0'), +('5', '6', '19', '4847', '5880', '0'), +('5', '6', '19', '68239', '5275', '0'), +('5', '6', '19', '3146', '3400', '0'), +('5', '6', '13', '5401', '19848', '0'), +('5', '6', '13', '27707', '19768', '0'), +('5', '6', '13', '5622', '16025', '0'), +('5', '6', '13', '11609', '15668', '0'), +('5', '6', '14', '11678', '32840', '0'), +('5', '6', '14', '9402', '32780', '0'), +('5', '6', '14', '11632', '28040', '0'), +('5', '6', '14', '11551', '23853', '0'), +('5', '6', '11', '8408', '6861', '0'), +('5', '6', '11', '8325', '6668', '0'), +('5', '6', '11', '8811', '5213', '0'), +('5', '6', '11', '8810', '4798', '0'), +('5', '7', '22', '8567', '0', '0'), +('5', '7', '22', '10323', '0', '0'), +('5', '7', '22', '8504', '0', '0'), +('5', '7', '22', '9246', '0', '0'), +('5', '7', '1', '14701', '4854', '0'), +('5', '7', '1', '14702', '3550', '0'), +('5', '7', '1', '10082', '2564', '0'), +('5', '7', '1', '10165', '1940', '0'), +('5', '7', '2', '4841', '9162', '0'), +('5', '7', '2', '4301', '7726', '0'), +('5', '7', '2', '4831', '6167', '0'), +('5', '7', '2', '10142', '4824', '0'), +('5', '7', '3', '4322', '5343', '0'), +('5', '7', '3', '1544', '4598', '0'), +('5', '7', '3', '71529', '2533', '0'), +('5', '7', '3', '21002', '2114', '0'), +('5', '7', '5', '14703', '7150', '0'), +('5', '7', '5', '27705', '5952', '0'), +('5', '7', '5', '14700', '4806', '0'), +('5', '7', '5', '10055', '4760', '0'), +('5', '7', '8', '11621', '26579', '0'), +('5', '7', '8', '11551', '8753', '0'), +('5', '7', '8', '1409', '7747', '0'), +('5', '7', '8', '11603', '6248', '0'), +('5', '7', '6', '1557', '8270', '0'), +('5', '7', '6', '11699', '5444', '0'), +('5', '7', '6', '25062', '3672', '0'), +('5', '7', '6', '4302', '3503', '0'), +('5', '7', '17', '4832', '11793', '0'), +('5', '7', '17', '4842', '9975', '0'), +('5', '7', '17', '4309', '8225', '0'), +('5', '7', '17', '11623', '7848', '0'), +('5', '7', '7', '4833', '6478', '0'), +('5', '7', '7', '4843', '5389', '0'), +('5', '7', '7', '4343', '3962', '0'), +('5', '7', '7', '1361', '3624', '0'), +('5', '7', '9', '4834', '4408', '0'), +('5', '7', '9', '12189', '3471', '0'), +('5', '7', '9', '4844', '3126', '0'), +('5', '7', '9', '4344', '3046', '0'), +('5', '7', '15', '10366', '8054', '0'), +('5', '7', '15', '10151', '7200', '0'), +('5', '7', '15', '14679', '7010', '0'), +('5', '7', '15', '14678', '5708', '0'), +('5', '7', '20', '2704', '23376', '0'), +('5', '7', '20', '11601', '17825', '0'), +('5', '7', '20', '2918', '10919', '0'), +('5', '7', '20', '1365', '10500', '0'), +('5', '7', '12', '4835', '10013', '0'), +('5', '7', '12', '20655', '7958', '0'), +('5', '7', '12', '4845', '5629', '0'), +('5', '7', '12', '2923', '4758', '0'), +('5', '7', '18', '4836', '6448', '0'), +('5', '7', '18', '4846', '5554', '0'), +('5', '7', '18', '4346', '4645', '0'), +('5', '7', '18', '3145', '4288', '0'), +('5', '7', '19', '4837', '7097', '0'), +('5', '7', '19', '4847', '5902', '0'), +('5', '7', '19', '68239', '5286', '0'), +('5', '7', '19', '3146', '3413', '0'), +('5', '7', '13', '5401', '19848', '0'), +('5', '7', '13', '27707', '19780', '0'), +('5', '7', '13', '5622', '16025', '0'), +('5', '7', '13', '11609', '15668', '0'), +('5', '7', '14', '11678', '32840', '0'), +('5', '7', '14', '9402', '32801', '0'), +('5', '7', '14', '11632', '28103', '0'), +('5', '7', '14', '11551', '23853', '0'), +('5', '7', '11', '8408', '6861', '0'), +('5', '7', '11', '8325', '6668', '0'), +('5', '7', '11', '8811', '5213', '0'), +('5', '7', '11', '8810', '4798', '0'), +('5', '8', '22', '8567', '0', '0'), +('5', '8', '22', '10323', '0', '0'), +('5', '8', '22', '8504', '0', '0'), +('5', '8', '22', '9246', '0', '0'), +('5', '8', '1', '14701', '4854', '0'), +('5', '8', '1', '14702', '3550', '0'), +('5', '8', '1', '10082', '2586', '0'), +('5', '8', '1', '10165', '1940', '0'), +('5', '8', '2', '4841', '9195', '0'), +('5', '8', '2', '4301', '7726', '0'), +('5', '8', '2', '4831', '6185', '0'), +('5', '8', '2', '10142', '4824', '0'), +('5', '8', '3', '4322', '5343', '0'), +('5', '8', '3', '1544', '4616', '0'), +('5', '8', '3', '71529', '2911', '0'), +('5', '8', '3', '21002', '2114', '0'), +('5', '8', '5', '14703', '7150', '0'), +('5', '8', '5', '27705', '6003', '0'), +('5', '8', '5', '14700', '4806', '0'), +('5', '8', '5', '10055', '4760', '0'), +('5', '8', '8', '11621', '26579', '0'), +('5', '8', '8', '11551', '8753', '0'), +('5', '8', '8', '1409', '7747', '0'), +('5', '8', '8', '11603', '6281', '0'), +('5', '8', '6', '1557', '8270', '0'), +('5', '8', '6', '11699', '5498', '0'), +('5', '8', '6', '25062', '3672', '0'), +('5', '8', '6', '4302', '3532', '0'), +('5', '8', '17', '4832', '11866', '0'), +('5', '8', '17', '4842', '10019', '0'), +('5', '8', '17', '4309', '8225', '0'), +('5', '8', '17', '11623', '7848', '0'), +('5', '8', '7', '4833', '6478', '0'), +('5', '8', '7', '4843', '5389', '0'), +('5', '8', '7', '4343', '4011', '0'), +('5', '8', '7', '1361', '3624', '0'), +('5', '8', '9', '4834', '4408', '0'), +('5', '8', '9', '12189', '3471', '0'), +('5', '8', '9', '4844', '3137', '0'), +('5', '8', '9', '4344', '3046', '0'), +('5', '8', '15', '10366', '8054', '0'), +('5', '8', '15', '10151', '7200', '0'), +('5', '8', '15', '14679', '7010', '0'), +('5', '8', '15', '14678', '5708', '0'), +('5', '8', '20', '2704', '23398', '0'), +('5', '8', '20', '11601', '17874', '0'), +('5', '8', '20', '2918', '10937', '0'), +('5', '8', '20', '1365', '10500', '0'), +('5', '8', '12', '4835', '10037', '0'), +('5', '8', '12', '20655', '7975', '0'), +('5', '8', '12', '4845', '5647', '0'), +('5', '8', '12', '2923', '4758', '0'), +('5', '8', '18', '4836', '6472', '0'), +('5', '8', '18', '4846', '5554', '0'), +('5', '8', '18', '4346', '4645', '0'), +('5', '8', '18', '3145', '4331', '0'), +('5', '8', '19', '4837', '7115', '0'), +('5', '8', '19', '4847', '5926', '0'), +('5', '8', '19', '68239', '5297', '0'), +('5', '8', '19', '3146', '3427', '0'), +('5', '8', '13', '5401', '19848', '0'), +('5', '8', '13', '27707', '19793', '0'), +('5', '8', '13', '5622', '16025', '0'), +('5', '8', '13', '11609', '15668', '0'), +('5', '8', '14', '11678', '32840', '0'), +('5', '8', '14', '9402', '32825', '0'), +('5', '8', '14', '11632', '28175', '0'), +('5', '8', '14', '11551', '23853', '0'), +('5', '8', '11', '8408', '6861', '0'), +('5', '8', '11', '8325', '6668', '0'), +('5', '8', '11', '8811', '5213', '0'), +('5', '8', '11', '8810', '4798', '0'), +('5', '9', '22', '8567', '0', '0'), +('5', '9', '22', '10323', '0', '0'), +('5', '9', '22', '8504', '0', '0'), +('5', '9', '22', '9246', '0', '0'), +('5', '9', '1', '14701', '4854', '0'), +('5', '9', '1', '14702', '3550', '0'), +('5', '9', '1', '10082', '2608', '0'), +('5', '9', '1', '10165', '1940', '0'), +('5', '9', '2', '4841', '9228', '0'), +('5', '9', '2', '4301', '7726', '0'), +('5', '9', '2', '4831', '6203', '0'), +('5', '9', '2', '3140', '4839', '0'), +('5', '9', '3', '4322', '5343', '0'), +('5', '9', '3', '1544', '4634', '0'), +('5', '9', '3', '71529', '3290', '0'), +('5', '9', '3', '21002', '2114', '0'), +('5', '9', '5', '14703', '7150', '0'), +('5', '9', '5', '27705', '6054', '0'), +('5', '9', '5', '14700', '4806', '0'), +('5', '9', '5', '10055', '4760', '0'), +('5', '9', '8', '11621', '26579', '0'), +('5', '9', '8', '11551', '8753', '0'), +('5', '9', '8', '1409', '7747', '0'), +('5', '9', '8', '11603', '6314', '0'), +('5', '9', '6', '1557', '8270', '0'), +('5', '9', '6', '11699', '5553', '0'), +('5', '9', '6', '25062', '3672', '0'), +('5', '9', '6', '4302', '3558', '0'), +('5', '9', '17', '4832', '11929', '0'), +('5', '9', '17', '4842', '10057', '0'), +('5', '9', '17', '4309', '8225', '0'), +('5', '9', '17', '11623', '7848', '0'), +('5', '9', '7', '4833', '6478', '0'), +('5', '9', '7', '4843', '5389', '0'), +('5', '9', '7', '4343', '4053', '0'), +('5', '9', '7', '1361', '3624', '0'), +('5', '9', '9', '4834', '4408', '0'), +('5', '9', '9', '12189', '3471', '0'), +('5', '9', '9', '4844', '3148', '0'), +('5', '9', '9', '4344', '3046', '0'), +('5', '9', '15', '10366', '8054', '0'), +('5', '9', '15', '10151', '7200', '0'), +('5', '9', '15', '14679', '7010', '0'), +('5', '9', '15', '14678', '5708', '0'), +('5', '9', '20', '2704', '23420', '0'), +('5', '9', '20', '11601', '17916', '0'), +('5', '9', '20', '2918', '10956', '0'), +('5', '9', '20', '1365', '10500', '0'), +('5', '9', '12', '4835', '10059', '0'), +('5', '9', '12', '20655', '7991', '0'), +('5', '9', '12', '4845', '5666', '0'), +('5', '9', '12', '2923', '4758', '0'), +('5', '9', '18', '4836', '6493', '0'), +('5', '9', '18', '4846', '5554', '0'), +('5', '9', '18', '4346', '4645', '0'), +('5', '9', '18', '3145', '4369', '0'), +('5', '9', '19', '4837', '7133', '0'), +('5', '9', '19', '4847', '5947', '0'), +('5', '9', '19', '68239', '5308', '0'), +('5', '9', '19', '3146', '3440', '0'), +('5', '9', '13', '5401', '19848', '0'), +('5', '9', '13', '27707', '19806', '0'), +('5', '9', '13', '5622', '16025', '0'), +('5', '9', '13', '11609', '15668', '0'), +('5', '9', '14', '9402', '32846', '0'), +('5', '9', '14', '11678', '32840', '0'), +('5', '9', '14', '11632', '28239', '0'), +('5', '9', '14', '11551', '23853', '0'), +('5', '9', '11', '8408', '6861', '0'), +('5', '9', '11', '8325', '6668', '0'), +('5', '9', '11', '8811', '5213', '0'), +('5', '9', '11', '8810', '4798', '0'), +('5', '10', '22', '8567', '0', '0'), +('5', '10', '22', '10323', '0', '0'), +('5', '10', '22', '8504', '0', '0'), +('5', '10', '22', '9246', '0', '0'), +('5', '10', '1', '14701', '4854', '0'), +('5', '10', '1', '14702', '3550', '0'), +('5', '10', '1', '10082', '2629', '0'), +('5', '10', '1', '10165', '1940', '0'), +('5', '10', '2', '4841', '9260', '0'), +('5', '10', '2', '4301', '7726', '0'), +('5', '10', '2', '4831', '6221', '0'), +('5', '10', '2', '3140', '4857', '0'), +('5', '10', '3', '4322', '5343', '0'), +('5', '10', '3', '1544', '4652', '0'), +('5', '10', '3', '71529', '3675', '0'), +('5', '10', '3', '21002', '2114', '0'), +('5', '10', '5', '14703', '7150', '0'), +('5', '10', '5', '27705', '6104', '0'), +('5', '10', '5', '14700', '4806', '0'), +('5', '10', '5', '10055', '4760', '0'), +('5', '10', '8', '11621', '26579', '0'), +('5', '10', '8', '11551', '8753', '0'), +('5', '10', '8', '1409', '7747', '0'), +('5', '10', '8', '11603', '6346', '0'), +('5', '10', '6', '1557', '8270', '0'), +('5', '10', '6', '11699', '5607', '0'), +('5', '10', '6', '25062', '3672', '0'), +('5', '10', '6', '4302', '3587', '0'), +('5', '10', '17', '4832', '12001', '0'), +('5', '10', '17', '4842', '10100', '0'), +('5', '10', '17', '4309', '8225', '0'), +('5', '10', '17', '11623', '7848', '0'), +('5', '10', '7', '4833', '6478', '0'), +('5', '10', '7', '4843', '5389', '0'), +('5', '10', '7', '4343', '4101', '0'), +('5', '10', '7', '1361', '3624', '0'), +('5', '10', '9', '4834', '4408', '0'), +('5', '10', '9', '12189', '3471', '0'), +('5', '10', '9', '4844', '3159', '0'), +('5', '10', '9', '4344', '3046', '0'), +('5', '10', '15', '10366', '8054', '0'), +('5', '10', '15', '10151', '7200', '0'), +('5', '10', '15', '14679', '7010', '0'), +('5', '10', '15', '14678', '5708', '0'), +('5', '10', '20', '2704', '23441', '0'), +('5', '10', '20', '11601', '17964', '0'), +('5', '10', '20', '2918', '10974', '0'), +('5', '10', '20', '1365', '10500', '0'), +('5', '10', '12', '4835', '10083', '0'), +('5', '10', '12', '20655', '8007', '0'), +('5', '10', '12', '4845', '5684', '0'), +('5', '10', '12', '2923', '4758', '0'), +('5', '10', '18', '4836', '6517', '0'), +('5', '10', '18', '4846', '5554', '0'), +('5', '10', '18', '4346', '4645', '0'), +('5', '10', '18', '3145', '4413', '0'), +('5', '10', '19', '4837', '7151', '0'), +('5', '10', '19', '4847', '5971', '0'), +('5', '10', '19', '68239', '5319', '0'), +('5', '10', '19', '3146', '3454', '0'), +('5', '10', '13', '5401', '19848', '0'), +('5', '10', '13', '27707', '19818', '0'), +('5', '10', '13', '5622', '16025', '0'), +('5', '10', '13', '11609', '15668', '0'), +('5', '10', '14', '9402', '32870', '0'), +('5', '10', '14', '11678', '32840', '0'), +('5', '10', '14', '11632', '28311', '0'), +('5', '10', '14', '11551', '23853', '0'), +('5', '10', '11', '8408', '6861', '0'), +('5', '10', '11', '8325', '6668', '0'), +('5', '10', '11', '8811', '5213', '0'), +('5', '10', '11', '8810', '4798', '0'), +('5', '11', '22', '8567', '0', '0'), +('5', '11', '22', '10323', '0', '0'), +('5', '11', '22', '8504', '0', '0'), +('5', '11', '22', '9246', '0', '0'), +('5', '11', '1', '14701', '4854', '0'), +('5', '11', '1', '14702', '3550', '0'), +('5', '11', '1', '10082', '2651', '0'), +('5', '11', '1', '10165', '1940', '0'), +('5', '11', '2', '4841', '9293', '0'), +('5', '11', '2', '4301', '7726', '0'), +('5', '11', '2', '4831', '6239', '0'), +('5', '11', '2', '3140', '4875', '0'), +('5', '11', '3', '4322', '5343', '0'), +('5', '11', '3', '1544', '4670', '0'), +('5', '11', '3', '71529', '3691', '0'), +('5', '11', '3', '21002', '2114', '0'), +('5', '11', '5', '14703', '7150', '0'), +('5', '11', '5', '27705', '6155', '0'), +('5', '11', '5', '14700', '4806', '0'), +('5', '11', '5', '10055', '4760', '0'), +('5', '11', '8', '11621', '26579', '0'), +('5', '11', '8', '11551', '8753', '0'), +('5', '11', '8', '1409', '7747', '0'), +('5', '11', '8', '11603', '6379', '0'), +('5', '11', '6', '1557', '8270', '0'), +('5', '11', '6', '11699', '5662', '0'), +('5', '11', '6', '25062', '3672', '0'), +('5', '11', '6', '4302', '3612', '0'), +('5', '11', '17', '4832', '12065', '0'), +('5', '11', '17', '4842', '10138', '0'), +('5', '11', '17', '4309', '8225', '0'), +('5', '11', '17', '11623', '7848', '0'), +('5', '11', '7', '4833', '6478', '0'), +('5', '11', '7', '4843', '5389', '0'), +('5', '11', '7', '4343', '4143', '0'), +('5', '11', '7', '1361', '3624', '0'), +('5', '11', '9', '4834', '4408', '0'), +('5', '11', '9', '12189', '3471', '0'), +('5', '11', '9', '4844', '3170', '0'), +('5', '11', '9', '4344', '3046', '0'), +('5', '11', '15', '10366', '8054', '0'), +('5', '11', '15', '10151', '7200', '0'), +('5', '11', '15', '14679', '7010', '0'), +('5', '11', '15', '14678', '5708', '0'), +('5', '11', '20', '2704', '23463', '0'), +('5', '11', '20', '11601', '18007', '0'), +('5', '11', '20', '2918', '10992', '0'), +('5', '11', '20', '1365', '10500', '0'), +('5', '11', '12', '4835', '10104', '0'), +('5', '11', '12', '20655', '8023', '0'), +('5', '11', '12', '4845', '5702', '0'), +('5', '11', '12', '2923', '4758', '0'), +('5', '11', '18', '4836', '6538', '0'), +('5', '11', '18', '4846', '5554', '0'), +('5', '11', '18', '4346', '4645', '0'), +('5', '11', '18', '3145', '4451', '0'), +('5', '11', '19', '4837', '7170', '0'), +('5', '11', '19', '4847', '5992', '0'), +('5', '11', '19', '68239', '5330', '0'), +('5', '11', '19', '3146', '3467', '0'), +('5', '11', '13', '5401', '19848', '0'), +('5', '11', '13', '27707', '19831', '0'), +('5', '11', '13', '5622', '16025', '0'), +('5', '11', '13', '11609', '15668', '0'), +('5', '11', '14', '9402', '32892', '0'), +('5', '11', '14', '11678', '32840', '0'), +('5', '11', '14', '11632', '28375', '0'), +('5', '11', '14', '11551', '23853', '0'), +('5', '11', '11', '8408', '6861', '0'), +('5', '11', '11', '8325', '6668', '0'), +('5', '11', '11', '8811', '5213', '0'), +('5', '11', '11', '8810', '4798', '0'), +('5', '12', '22', '8567', '0', '0'), +('5', '12', '22', '10323', '0', '0'), +('5', '12', '22', '8504', '0', '0'), +('5', '12', '22', '9246', '0', '0'), +('5', '12', '1', '14701', '4854', '0'), +('5', '12', '1', '14702', '3550', '0'), +('5', '12', '1', '10082', '2673', '0'), +('5', '12', '1', '10165', '1940', '0'), +('5', '12', '2', '4841', '9325', '0'), +('5', '12', '2', '4301', '7726', '0'), +('5', '12', '2', '4831', '6257', '0'), +('5', '12', '2', '3140', '4893', '0'), +('5', '12', '3', '4322', '5343', '0'), +('5', '12', '3', '1544', '4688', '0'), +('5', '12', '3', '71529', '3711', '0'), +('5', '12', '3', '21002', '2114', '0'), +('5', '12', '5', '14703', '7150', '0'), +('5', '12', '5', '27705', '6206', '0'), +('5', '12', '5', '14700', '4806', '0'), +('5', '12', '5', '10055', '4760', '0'), +('5', '12', '8', '11621', '26579', '0'), +('5', '12', '8', '11551', '8753', '0'), +('5', '12', '8', '1409', '7747', '0'), +('5', '12', '8', '11603', '6411', '0'), +('5', '12', '6', '1557', '8270', '0'), +('5', '12', '6', '11699', '5716', '0'), +('5', '12', '6', '25062', '3672', '0'), +('5', '12', '6', '4302', '3641', '0'), +('5', '12', '17', '4832', '12137', '0'), +('5', '12', '17', '4842', '10182', '0'), +('5', '12', '17', '4309', '8225', '0'), +('5', '12', '17', '11623', '7848', '0'), +('5', '12', '7', '4833', '6478', '0'), +('5', '12', '7', '4843', '5389', '0'), +('5', '12', '7', '4343', '4192', '0'), +('5', '12', '7', '1361', '3624', '0'), +('5', '12', '9', '4834', '4408', '0'), +('5', '12', '9', '12189', '3471', '0'), +('5', '12', '9', '4844', '3181', '0'), +('5', '12', '9', '4344', '3046', '0'), +('5', '12', '15', '10366', '8054', '0'), +('5', '12', '15', '10151', '7200', '0'), +('5', '12', '15', '14679', '7010', '0'), +('5', '12', '15', '14678', '5708', '0'), +('5', '12', '20', '2704', '23485', '0'), +('5', '12', '20', '11601', '18055', '0'), +('5', '12', '20', '2918', '11010', '0'), +('5', '12', '20', '1365', '10500', '0'), +('5', '12', '12', '4835', '10128', '0'), +('5', '12', '12', '20655', '8040', '0'), +('5', '12', '12', '4845', '5720', '0'), +('5', '12', '12', '2923', '4758', '0'), +('5', '12', '18', '4836', '6562', '0'), +('5', '12', '18', '4846', '5554', '0'), +('5', '12', '18', '4346', '4645', '0'), +('5', '12', '18', '3145', '4494', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '12', '19', '4837', '7188', '0'), +('5', '12', '19', '4847', '6016', '0'), +('5', '12', '19', '68239', '5341', '0'), +('5', '12', '19', '3146', '3481', '0'), +('5', '12', '13', '5401', '19848', '0'), +('5', '12', '13', '27707', '19844', '0'), +('5', '12', '13', '5622', '16025', '0'), +('5', '12', '13', '11609', '15668', '0'), +('5', '12', '14', '9402', '32916', '0'), +('5', '12', '14', '11678', '32840', '0'), +('5', '12', '14', '11632', '28447', '0'), +('5', '12', '14', '11551', '23853', '0'), +('5', '12', '11', '8408', '6861', '0'), +('5', '12', '11', '8325', '6668', '0'), +('5', '12', '11', '8811', '5213', '0'), +('5', '12', '11', '8810', '4798', '0'), +('5', '13', '22', '8567', '0', '0'), +('5', '13', '22', '10323', '0', '0'), +('5', '13', '22', '8504', '0', '0'), +('5', '13', '22', '9246', '0', '0'), +('5', '13', '1', '14701', '4854', '0'), +('5', '13', '1', '14702', '3550', '0'), +('5', '13', '1', '10082', '2695', '0'), +('5', '13', '1', '10165', '1940', '0'), +('5', '13', '2', '4841', '9358', '0'), +('5', '13', '2', '4301', '7726', '0'), +('5', '13', '2', '4831', '6276', '0'), +('5', '13', '2', '3140', '4912', '0'), +('5', '13', '3', '4322', '5343', '0'), +('5', '13', '3', '1544', '4706', '0'), +('5', '13', '3', '71529', '3730', '0'), +('5', '13', '3', '21002', '2114', '0'), +('5', '13', '5', '14703', '7150', '0'), +('5', '13', '5', '27705', '6257', '0'), +('5', '13', '5', '14700', '4806', '0'), +('5', '13', '5', '10055', '4760', '0'), +('5', '13', '8', '11621', '26579', '0'), +('5', '13', '8', '11551', '8753', '0'), +('5', '13', '8', '1409', '7747', '0'), +('5', '13', '8', '11603', '6444', '0'), +('5', '13', '6', '1557', '8270', '0'), +('5', '13', '6', '11699', '5770', '0'), +('5', '13', '6', '25062', '3672', '0'), +('5', '13', '6', '4302', '3670', '0'), +('5', '13', '17', '4832', '12210', '0'), +('5', '13', '17', '4842', '10225', '0'), +('5', '13', '17', '4309', '8225', '0'), +('5', '13', '17', '11623', '7848', '0'), +('5', '13', '7', '4833', '6478', '0'), +('5', '13', '7', '4843', '5389', '0'), +('5', '13', '7', '4343', '4240', '0'), +('5', '13', '7', '1361', '3624', '0'), +('5', '13', '9', '4834', '4408', '0'), +('5', '13', '9', '12189', '3471', '0'), +('5', '13', '9', '4844', '3192', '0'), +('5', '13', '9', '4344', '3046', '0'), +('5', '13', '15', '10366', '8054', '0'), +('5', '13', '15', '10151', '7200', '0'), +('5', '13', '15', '14679', '7010', '0'), +('5', '13', '15', '14678', '5708', '0'), +('5', '13', '20', '2704', '23507', '0'), +('5', '13', '20', '11601', '18103', '0'), +('5', '13', '20', '2918', '11028', '0'), +('5', '13', '20', '1365', '10500', '0'), +('5', '13', '12', '4835', '10152', '0'), +('5', '13', '12', '20655', '8057', '0'), +('5', '13', '12', '4845', '5738', '0'), +('5', '13', '12', '2923', '4758', '0'), +('5', '13', '18', '4836', '6587', '0'), +('5', '13', '18', '4846', '5554', '0'), +('5', '13', '18', '4346', '4645', '0'), +('5', '13', '18', '3145', '4538', '0'), +('5', '13', '19', '4837', '7206', '0'), +('5', '13', '19', '4847', '6040', '0'), +('5', '13', '19', '68239', '5352', '0'), +('5', '13', '19', '3146', '3496', '0'), +('5', '13', '13', '27707', '19856', '0'), +('5', '13', '13', '5401', '19848', '0'), +('5', '13', '13', '5622', '16025', '0'), +('5', '13', '13', '11609', '15668', '0'), +('5', '13', '14', '9402', '32940', '0'), +('5', '13', '14', '11678', '32840', '0'), +('5', '13', '14', '11632', '28520', '0'), +('5', '13', '14', '11551', '23853', '0'), +('5', '13', '11', '8408', '6861', '0'), +('5', '13', '11', '8325', '6668', '0'), +('5', '13', '11', '8811', '5213', '0'), +('5', '13', '11', '8810', '4798', '0'), +('5', '14', '22', '8567', '0', '0'), +('5', '14', '22', '10323', '0', '0'), +('5', '14', '22', '8504', '0', '0'), +('5', '14', '22', '9246', '0', '0'), +('5', '14', '1', '14701', '4854', '0'), +('5', '14', '1', '14702', '3550', '0'), +('5', '14', '1', '10082', '2716', '0'), +('5', '14', '1', '10165', '1940', '0'), +('5', '14', '2', '4841', '9391', '0'), +('5', '14', '2', '4301', '7726', '0'), +('5', '14', '2', '4831', '6294', '0'), +('5', '14', '2', '3140', '4930', '0'), +('5', '14', '3', '4322', '5343', '0'), +('5', '14', '3', '1544', '4724', '0'), +('5', '14', '3', '71529', '3747', '0'), +('5', '14', '3', '21002', '2114', '0'), +('5', '14', '5', '14703', '7150', '0'), +('5', '14', '5', '27705', '6307', '0'), +('5', '14', '5', '14700', '4806', '0'), +('5', '14', '5', '10055', '4760', '0'), +('5', '14', '8', '11621', '26579', '0'), +('5', '14', '8', '11551', '8753', '0'), +('5', '14', '8', '1409', '7747', '0'), +('5', '14', '8', '11603', '6477', '0'), +('5', '14', '6', '1557', '8270', '0'), +('5', '14', '6', '11699', '5825', '0'), +('5', '14', '6', '4302', '3695', '0'), +('5', '14', '6', '25062', '3672', '0'), +('5', '14', '17', '4832', '12273', '0'), +('5', '14', '17', '4842', '10263', '0'), +('5', '14', '17', '4309', '8225', '0'), +('5', '14', '17', '11623', '7848', '0'), +('5', '14', '7', '4833', '6478', '0'), +('5', '14', '7', '4843', '5389', '0'), +('5', '14', '7', '4343', '4282', '0'), +('5', '14', '7', '1361', '3624', '0'), +('5', '14', '9', '4834', '4408', '0'), +('5', '14', '9', '12189', '3471', '0'), +('5', '14', '9', '4844', '3202', '0'), +('5', '14', '9', '4344', '3046', '0'), +('5', '14', '15', '10366', '8054', '0'), +('5', '14', '15', '10151', '7200', '0'), +('5', '14', '15', '14679', '7010', '0'), +('5', '14', '15', '14678', '5708', '0'), +('5', '14', '20', '2704', '23528', '0'), +('5', '14', '20', '11601', '18146', '0'), +('5', '14', '20', '2918', '11046', '0'), +('5', '14', '20', '1365', '10500', '0'), +('5', '14', '12', '4835', '10173', '0'), +('5', '14', '12', '20655', '8073', '0'), +('5', '14', '12', '4845', '5756', '0'), +('5', '14', '12', '2923', '4758', '0'), +('5', '14', '18', '4836', '6608', '0'), +('5', '14', '18', '4846', '5554', '0'), +('5', '14', '18', '4346', '4645', '0'), +('5', '14', '18', '3145', '4576', '0'), +('5', '14', '19', '4837', '7224', '0'), +('5', '14', '19', '4847', '6062', '0'), +('5', '14', '19', '68239', '5362', '0'), +('5', '14', '19', '3146', '3509', '0'), +('5', '14', '13', '27707', '19869', '0'), +('5', '14', '13', '5401', '19848', '0'), +('5', '14', '13', '5622', '16025', '0'), +('5', '14', '13', '11609', '15668', '0'), +('5', '14', '14', '9402', '32961', '0'), +('5', '14', '14', '11678', '32840', '0'), +('5', '14', '14', '11632', '28583', '0'), +('5', '14', '14', '11551', '23853', '0'), +('5', '14', '11', '8408', '6861', '0'), +('5', '14', '11', '8325', '6668', '0'), +('5', '14', '11', '8811', '5213', '0'), +('5', '14', '11', '8810', '4798', '0'), +('5', '15', '22', '8567', '0', '0'), +('5', '15', '22', '10323', '0', '0'), +('5', '15', '22', '8504', '0', '0'), +('5', '15', '22', '9246', '0', '0'), +('5', '15', '1', '14701', '4854', '0'), +('5', '15', '1', '14702', '3550', '0'), +('5', '15', '1', '10082', '2738', '0'), +('5', '15', '1', '10165', '1940', '0'), +('5', '15', '2', '4841', '9423', '0'), +('5', '15', '2', '4301', '7726', '0'), +('5', '15', '2', '4831', '6312', '0'), +('5', '15', '2', '3140', '4948', '0'), +('5', '15', '3', '4322', '5343', '0'), +('5', '15', '3', '1544', '4743', '0'), +('5', '15', '3', '71529', '3766', '0'), +('5', '15', '3', '21002', '2114', '0'), +('5', '15', '5', '14703', '7150', '0'), +('5', '15', '5', '27705', '6358', '0'), +('5', '15', '5', '14700', '4806', '0'), +('5', '15', '5', '10055', '4760', '0'), +('5', '15', '8', '11621', '26579', '0'), +('5', '15', '8', '11551', '8753', '0'), +('5', '15', '8', '1409', '7747', '0'), +('5', '15', '8', '11603', '6509', '0'), +('5', '15', '6', '1557', '8270', '0'), +('5', '15', '6', '11699', '5879', '0'), +('5', '15', '6', '4302', '3724', '0'), +('5', '15', '6', '25062', '3672', '0'), +('5', '15', '17', '4832', '12346', '0'), +('5', '15', '17', '4842', '10307', '0'), +('5', '15', '17', '4309', '8225', '0'), +('5', '15', '17', '11623', '7848', '0'), +('5', '15', '7', '4833', '6478', '0'), +('5', '15', '7', '4843', '5389', '0'), +('5', '15', '7', '4343', '4331', '0'), +('5', '15', '7', '1361', '3624', '0'), +('5', '15', '9', '4834', '4408', '0'), +('5', '15', '9', '12189', '3471', '0'), +('5', '15', '9', '4844', '3213', '0'), +('5', '15', '9', '4344', '3046', '0'), +('5', '15', '15', '10366', '8054', '0'), +('5', '15', '15', '10151', '7200', '0'), +('5', '15', '15', '14679', '7010', '0'), +('5', '15', '15', '14678', '5708', '0'), +('5', '15', '20', '2704', '23550', '0'), +('5', '15', '20', '11601', '18194', '0'), +('5', '15', '20', '2918', '11064', '0'), +('5', '15', '20', '1365', '10500', '0'), +('5', '15', '12', '4835', '10197', '0'), +('5', '15', '12', '20655', '8090', '0'), +('5', '15', '12', '4845', '5774', '0'), +('5', '15', '12', '2923', '4758', '0'), +('5', '15', '18', '4836', '6632', '0'), +('5', '15', '18', '4846', '5554', '0'), +('5', '15', '18', '4346', '4645', '0'), +('5', '15', '18', '3145', '4619', '0'), +('5', '15', '19', '4837', '7242', '0'), +('5', '15', '19', '4847', '6086', '0'), +('5', '15', '19', '68239', '5373', '0'), +('5', '15', '19', '3146', '3523', '0'), +('5', '15', '13', '27707', '19882', '0'), +('5', '15', '13', '5401', '19848', '0'), +('5', '15', '13', '5622', '16025', '0'), +('5', '15', '13', '11609', '15668', '0'), +('5', '15', '14', '9402', '32985', '0'), +('5', '15', '14', '11678', '32840', '0'), +('5', '15', '14', '11632', '28656', '0'), +('5', '15', '14', '11551', '23853', '0'), +('5', '15', '11', '8408', '6861', '0'), +('5', '15', '11', '8325', '6668', '0'), +('5', '15', '11', '8811', '5213', '0'), +('5', '15', '11', '8810', '4798', '0'), +('5', '16', '22', '8567', '0', '0'), +('5', '16', '22', '10323', '0', '0'), +('5', '16', '22', '8504', '0', '0'), +('5', '16', '22', '9246', '0', '0'), +('5', '16', '1', '14701', '4854', '0'), +('5', '16', '1', '14702', '3550', '0'), +('5', '16', '1', '10082', '2760', '0'), +('5', '16', '1', '10165', '1940', '0'), +('5', '16', '2', '4841', '9456', '0'), +('5', '16', '2', '4301', '7726', '0'), +('5', '16', '2', '4831', '6330', '0'), +('5', '16', '2', '3140', '4966', '0'), +('5', '16', '3', '4322', '5343', '0'), +('5', '16', '3', '1544', '4761', '0'), +('5', '16', '3', '71529', '3786', '0'), +('5', '16', '3', '21002', '2114', '0'), +('5', '16', '5', '14703', '7150', '0'), +('5', '16', '5', '27705', '6409', '0'), +('5', '16', '5', '14700', '4806', '0'), +('5', '16', '5', '10055', '4760', '0'), +('5', '16', '8', '11621', '26579', '0'), +('5', '16', '8', '11551', '8753', '0'), +('5', '16', '8', '1409', '7747', '0'), +('5', '16', '8', '11603', '6542', '0'), +('5', '16', '6', '1557', '8270', '0'), +('5', '16', '6', '11699', '5933', '0'), +('5', '16', '6', '4302', '3753', '0'), +('5', '16', '6', '25062', '3672', '0'), +('5', '16', '17', '4832', '12418', '0'), +('5', '16', '17', '4842', '10350', '0'), +('5', '16', '17', '4309', '8225', '0'), +('5', '16', '17', '11623', '7848', '0'), +('5', '16', '7', '4833', '6478', '0'), +('5', '16', '7', '4843', '5389', '0'), +('5', '16', '7', '4343', '4379', '0'), +('5', '16', '7', '1361', '3624', '0'), +('5', '16', '9', '4834', '4408', '0'), +('5', '16', '9', '12189', '3471', '0'), +('5', '16', '9', '4844', '3224', '0'), +('5', '16', '9', '4344', '3046', '0'), +('5', '16', '15', '10366', '8054', '0'), +('5', '16', '15', '10151', '7200', '0'), +('5', '16', '15', '14679', '7010', '0'), +('5', '16', '15', '14678', '5708', '0'), +('5', '16', '20', '2704', '23572', '0'), +('5', '16', '20', '11601', '18242', '0'), +('5', '16', '20', '2918', '11082', '0'), +('5', '16', '20', '1365', '10500', '0'), +('5', '16', '12', '4835', '10222', '0'), +('5', '16', '12', '20655', '8106', '0'), +('5', '16', '12', '4845', '5792', '0'), +('5', '16', '12', '2923', '4758', '0'), +('5', '16', '18', '4836', '6656', '0'), +('5', '16', '18', '4846', '5554', '0'), +('5', '16', '18', '3145', '4663', '0'), +('5', '16', '18', '4346', '4645', '0'), +('5', '16', '19', '4837', '7260', '0'), +('5', '16', '19', '4847', '6110', '0'), +('5', '16', '19', '68239', '5384', '0'), +('5', '16', '19', '3146', '3538', '0'), +('5', '16', '13', '27707', '19894', '0'), +('5', '16', '13', '5401', '19848', '0'), +('5', '16', '13', '5622', '16025', '0'), +('5', '16', '13', '11609', '15668', '0'), +('5', '16', '14', '9402', '33009', '0'), +('5', '16', '14', '11678', '32840', '0'), +('5', '16', '14', '11632', '28728', '0'), +('5', '16', '14', '11551', '23853', '0'), +('5', '16', '11', '8408', '6861', '0'), +('5', '16', '11', '8325', '6668', '0'), +('5', '16', '11', '8811', '5213', '0'), +('5', '16', '11', '45137', '5117', '0'), +('5', '17', '22', '8567', '0', '0'), +('5', '17', '22', '10323', '0', '0'), +('5', '17', '22', '8504', '0', '0'), +('5', '17', '22', '9246', '0', '0'), +('5', '17', '1', '14701', '4854', '0'), +('5', '17', '1', '14702', '3550', '0'), +('5', '17', '1', '10082', '2782', '0'), +('5', '17', '1', '10165', '1940', '0'), +('5', '17', '2', '4841', '9488', '0'), +('5', '17', '2', '4301', '7726', '0'), +('5', '17', '2', '4831', '6348', '0'), +('5', '17', '2', '3140', '4984', '0'), +('5', '17', '3', '4322', '5343', '0'), +('5', '17', '3', '1544', '4779', '0'), +('5', '17', '3', '71529', '3805', '0'), +('5', '17', '3', '21002', '2114', '0'), +('5', '17', '5', '14703', '7150', '0'), +('5', '17', '5', '27705', '6460', '0'), +('5', '17', '5', '14700', '4806', '0'), +('5', '17', '5', '10055', '4760', '0'), +('5', '17', '8', '11621', '26579', '0'), +('5', '17', '8', '11551', '8753', '0'), +('5', '17', '8', '1409', '7747', '0'), +('5', '17', '8', '11603', '6574', '0'), +('5', '17', '6', '1557', '8270', '0'), +('5', '17', '6', '11699', '5988', '0'), +('5', '17', '6', '4302', '3782', '0'), +('5', '17', '6', '25062', '3672', '0'), +('5', '17', '17', '4832', '12491', '0'), +('5', '17', '17', '4842', '10394', '0'), +('5', '17', '17', '4309', '8225', '0'), +('5', '17', '17', '11623', '7848', '0'), +('5', '17', '7', '4833', '6478', '0'), +('5', '17', '7', '4843', '5389', '0'), +('5', '17', '7', '4343', '4427', '0'), +('5', '17', '7', '1361', '3624', '0'), +('5', '17', '9', '4834', '4408', '0'), +('5', '17', '9', '12189', '3471', '0'), +('5', '17', '9', '4844', '3235', '0'), +('5', '17', '9', '4344', '3046', '0'), +('5', '17', '15', '10366', '8054', '0'), +('5', '17', '15', '10151', '7200', '0'), +('5', '17', '15', '14679', '7010', '0'), +('5', '17', '15', '14678', '5708', '0'), +('5', '17', '20', '2704', '23594', '0'), +('5', '17', '20', '11601', '18290', '0'), +('5', '17', '20', '2918', '11101', '0'), +('5', '17', '20', '1365', '10500', '0'), +('5', '17', '12', '4835', '10246', '0'), +('5', '17', '12', '20655', '8123', '0'), +('5', '17', '12', '4845', '5811', '0'), +('5', '17', '12', '2923', '4758', '0'), +('5', '17', '18', '4836', '6680', '0'), +('5', '17', '18', '4846', '5554', '0'), +('5', '17', '18', '3145', '4706', '0'), +('5', '17', '18', '4346', '4645', '0'), +('5', '17', '19', '4837', '7278', '0'), +('5', '17', '19', '4847', '6134', '0'), +('5', '17', '19', '68239', '5395', '0'), +('5', '17', '19', '3146', '3552', '0'), +('5', '17', '13', '27707', '19907', '0'), +('5', '17', '13', '5401', '19848', '0'), +('5', '17', '13', '5622', '16025', '0'), +('5', '17', '13', '11609', '15668', '0'), +('5', '17', '14', '9402', '33034', '0'), +('5', '17', '14', '11678', '32840', '0'), +('5', '17', '14', '11632', '28801', '0'), +('5', '17', '14', '11551', '23853', '0'), +('5', '17', '11', '8408', '6861', '0'), +('5', '17', '11', '8325', '6668', '0'), +('5', '17', '11', '45137', '5422', '0'), +('5', '17', '11', '8811', '5213', '0'), +('5', '18', '22', '8567', '0', '0'), +('5', '18', '22', '10323', '0', '0'), +('5', '18', '22', '8504', '0', '0'), +('5', '18', '22', '9246', '0', '0'), +('5', '18', '1', '14701', '4854', '0'), +('5', '18', '1', '14702', '3550', '0'), +('5', '18', '1', '10082', '2803', '0'), +('5', '18', '1', '10165', '1940', '0'), +('5', '18', '2', '4841', '9521', '0'), +('5', '18', '2', '4301', '7726', '0'), +('5', '18', '2', '4831', '6366', '0'), +('5', '18', '2', '3140', '5002', '0'), +('5', '18', '3', '4322', '5343', '0'), +('5', '18', '3', '1544', '4797', '0'), +('5', '18', '3', '71529', '3824', '0'), +('5', '18', '3', '21002', '2114', '0'), +('5', '18', '5', '14703', '7150', '0'), +('5', '18', '5', '27705', '6510', '0'), +('5', '18', '5', '14700', '4806', '0'), +('5', '18', '5', '10055', '4760', '0'), +('5', '18', '8', '11621', '26579', '0'), +('5', '18', '8', '11551', '8753', '0'), +('5', '18', '8', '1409', '7747', '0'), +('5', '18', '8', '11603', '6607', '0'), +('5', '18', '6', '1557', '8270', '0'), +('5', '18', '6', '11699', '6042', '0'), +('5', '18', '6', '4302', '3811', '0'), +('5', '18', '6', '25062', '3672', '0'), +('5', '18', '17', '4832', '12563', '0'), +('5', '18', '17', '4842', '10437', '0'), +('5', '18', '17', '4309', '8225', '0'), +('5', '18', '17', '11623', '7848', '0'), +('5', '18', '7', '4833', '6478', '0'), +('5', '18', '7', '4843', '5389', '0'), +('5', '18', '7', '4343', '4476', '0'), +('5', '18', '7', '1361', '3624', '0'), +('5', '18', '9', '4834', '4408', '0'), +('5', '18', '9', '12189', '3471', '0'), +('5', '18', '9', '4844', '3246', '0'), +('5', '18', '9', '4344', '3046', '0'), +('5', '18', '15', '10366', '8054', '0'), +('5', '18', '15', '10151', '7200', '0'), +('5', '18', '15', '14679', '7010', '0'), +('5', '18', '15', '14678', '5708', '0'), +('5', '18', '20', '2704', '23615', '0'), +('5', '18', '20', '11601', '18339', '0'), +('5', '18', '20', '2918', '11119', '0'), +('5', '18', '20', '1365', '10500', '0'), +('5', '18', '12', '4835', '10270', '0'), +('5', '18', '12', '20655', '8140', '0'), +('5', '18', '12', '4845', '5829', '0'), +('5', '18', '12', '2923', '4758', '0'), +('5', '18', '18', '4836', '6704', '0'), +('5', '18', '18', '4846', '5554', '0'), +('5', '18', '18', '3145', '4750', '0'), +('5', '18', '18', '4346', '4645', '0'), +('5', '18', '19', '4837', '7296', '0'), +('5', '18', '19', '4847', '6158', '0'), +('5', '18', '19', '68239', '5406', '0'), +('5', '18', '19', '3146', '3567', '0'), +('5', '18', '13', '27707', '19920', '0'), +('5', '18', '13', '5401', '19848', '0'), +('5', '18', '13', '5622', '16025', '0'), +('5', '18', '13', '11609', '15668', '0'), +('5', '18', '14', '9402', '33058', '0'), +('5', '18', '14', '11678', '32840', '0'), +('5', '18', '14', '11632', '28873', '0'), +('5', '18', '14', '11551', '23853', '0'), +('5', '18', '11', '8408', '6861', '0'), +('5', '18', '11', '8325', '6668', '0'), +('5', '18', '11', '45137', '5832', '0'), +('5', '18', '11', '8811', '5213', '0'), +('5', '19', '22', '8567', '0', '0'), +('5', '19', '22', '10323', '0', '0'), +('5', '19', '22', '8504', '0', '0'), +('5', '19', '22', '9246', '0', '0'), +('5', '19', '1', '14701', '4854', '0'), +('5', '19', '1', '14702', '3550', '0'), +('5', '19', '1', '10082', '2825', '0'), +('5', '19', '1', '10165', '1940', '0'), +('5', '19', '2', '4841', '9554', '0'), +('5', '19', '2', '4301', '7726', '0'), +('5', '19', '2', '4831', '6384', '0'), +('5', '19', '2', '3140', '5020', '0'), +('5', '19', '3', '4322', '5343', '0'), +('5', '19', '3', '1544', '4815', '0'), +('5', '19', '3', '71529', '3844', '0'), +('5', '19', '3', '21002', '2114', '0'), +('5', '19', '5', '14703', '7150', '0'), +('5', '19', '5', '27705', '6561', '0'), +('5', '19', '5', '14700', '4806', '0'), +('5', '19', '5', '10055', '4760', '0'), +('5', '19', '8', '11621', '26579', '0'), +('5', '19', '8', '11551', '8753', '0'), +('5', '19', '8', '1409', '7747', '0'), +('5', '19', '8', '11603', '6640', '0'), +('5', '19', '6', '1557', '8270', '0'), +('5', '19', '6', '11699', '6096', '0'), +('5', '19', '6', '4302', '3840', '0'), +('5', '19', '6', '25062', '3672', '0'), +('5', '19', '17', '4832', '12636', '0'), +('5', '19', '17', '4842', '10481', '0'), +('5', '19', '17', '4309', '8225', '0'), +('5', '19', '17', '11623', '7848', '0'), +('5', '19', '7', '4833', '6478', '0'), +('5', '19', '7', '4843', '5389', '0'), +('5', '19', '7', '4343', '4524', '0'), +('5', '19', '7', '1361', '3624', '0'), +('5', '19', '9', '4834', '4408', '0'), +('5', '19', '9', '12189', '3471', '0'), +('5', '19', '9', '4844', '3257', '0'), +('5', '19', '9', '4344', '3046', '0'), +('5', '19', '15', '10366', '8054', '0'), +('5', '19', '15', '10151', '7200', '0'), +('5', '19', '15', '14679', '7010', '0'), +('5', '19', '15', '14678', '5708', '0'), +('5', '19', '20', '2704', '23637', '0'), +('5', '19', '20', '11601', '18387', '0'), +('5', '19', '20', '2918', '11137', '0'), +('5', '19', '20', '1365', '10500', '0'), +('5', '19', '12', '4835', '10294', '0'), +('5', '19', '12', '20655', '8157', '0'), +('5', '19', '12', '4845', '5847', '0'), +('5', '19', '12', '2923', '4758', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '19', '18', '4836', '6729', '0'), +('5', '19', '18', '4846', '5554', '0'), +('5', '19', '18', '3145', '4793', '0'), +('5', '19', '18', '4346', '4645', '0'), +('5', '19', '19', '4837', '7314', '0'), +('5', '19', '19', '4847', '6182', '0'), +('5', '19', '19', '68239', '5417', '0'), +('5', '19', '19', '3146', '3581', '0'), +('5', '19', '13', '27707', '19932', '0'), +('5', '19', '13', '5401', '19848', '0'), +('5', '19', '13', '5622', '16025', '0'), +('5', '19', '13', '11609', '15668', '0'), +('5', '19', '14', '9402', '33082', '0'), +('5', '19', '14', '11678', '32840', '0'), +('5', '19', '14', '11632', '28946', '0'), +('5', '19', '14', '11551', '23853', '0'), +('5', '19', '11', '8408', '6861', '0'), +('5', '19', '11', '8325', '6668', '0'), +('5', '19', '11', '45137', '6151', '0'), +('5', '19', '11', '8811', '5213', '0'), +('5', '20', '22', '8567', '0', '0'), +('5', '20', '22', '10323', '0', '0'), +('5', '20', '22', '8504', '0', '0'), +('5', '20', '22', '9246', '0', '0'), +('5', '20', '1', '14701', '4854', '0'), +('5', '20', '1', '14702', '3550', '0'), +('5', '20', '1', '10082', '2847', '0'), +('5', '20', '1', '10165', '1940', '0'), +('5', '20', '2', '4841', '9586', '0'), +('5', '20', '2', '4301', '7726', '0'), +('5', '20', '2', '4831', '6402', '0'), +('5', '20', '2', '3140', '5038', '0'), +('5', '20', '3', '4322', '5343', '0'), +('5', '20', '3', '1544', '4833', '0'), +('5', '20', '3', '71529', '3863', '0'), +('5', '20', '3', '21002', '2114', '0'), +('5', '20', '5', '14703', '7150', '0'), +('5', '20', '5', '27705', '6612', '0'), +('5', '20', '5', '14700', '4806', '0'), +('5', '20', '5', '10055', '4760', '0'), +('5', '20', '8', '11621', '26579', '0'), +('5', '20', '8', '11551', '8753', '0'), +('5', '20', '8', '1409', '7747', '0'), +('5', '20', '8', '11603', '6672', '0'), +('5', '20', '6', '1557', '8270', '0'), +('5', '20', '6', '11699', '6151', '0'), +('5', '20', '6', '4302', '3869', '0'), +('5', '20', '6', '25062', '3672', '0'), +('5', '20', '17', '4832', '12708', '0'), +('5', '20', '17', '4842', '10524', '0'), +('5', '20', '17', '4309', '8225', '0'), +('5', '20', '17', '11623', '7848', '0'), +('5', '20', '7', '4833', '6478', '0'), +('5', '20', '7', '4843', '5389', '0'), +('5', '20', '7', '4343', '4572', '0'), +('5', '20', '7', '1361', '3624', '0'), +('5', '20', '9', '4834', '4408', '0'), +('5', '20', '9', '12189', '3471', '0'), +('5', '20', '9', '4844', '3268', '0'), +('5', '20', '9', '4344', '3046', '0'), +('5', '20', '15', '10366', '8054', '0'), +('5', '20', '15', '10151', '7200', '0'), +('5', '20', '15', '14679', '7010', '0'), +('5', '20', '15', '14678', '5708', '0'), +('5', '20', '20', '2704', '23659', '0'), +('5', '20', '20', '11601', '18435', '0'), +('5', '20', '20', '2918', '11155', '0'), +('5', '20', '20', '1365', '10500', '0'), +('5', '20', '12', '4835', '10318', '0'), +('5', '20', '12', '20655', '8174', '0'), +('5', '20', '12', '4845', '5865', '0'), +('5', '20', '12', '2923', '4758', '0'), +('5', '20', '18', '4836', '6753', '0'), +('5', '20', '18', '4846', '5554', '0'), +('5', '20', '18', '3145', '4837', '0'), +('5', '20', '18', '4346', '4645', '0'), +('5', '20', '19', '4837', '7333', '0'), +('5', '20', '19', '4847', '6207', '0'), +('5', '20', '19', '68239', '5428', '0'), +('5', '20', '19', '3146', '3596', '0'), +('5', '20', '13', '27707', '20710', '0'), +('5', '20', '13', '5401', '20330', '0'), +('5', '20', '13', '5622', '16648', '0'), +('5', '20', '13', '11609', '16292', '0'), +('5', '20', '14', '9402', '33106', '0'), +('5', '20', '14', '11678', '32840', '0'), +('5', '20', '14', '11632', '29018', '0'), +('5', '20', '14', '11551', '23853', '0'), +('5', '20', '11', '8408', '7116', '0'), +('5', '20', '11', '8325', '6932', '0'), +('5', '20', '11', '45137', '6633', '0'), +('5', '20', '11', '8811', '5421', '0'), +('5', '21', '22', '8567', '0', '0'), +('5', '21', '22', '10323', '0', '0'), +('5', '21', '22', '8504', '0', '0'), +('5', '21', '22', '9246', '0', '0'), +('5', '21', '1', '14701', '4854', '0'), +('5', '21', '1', '14702', '3550', '0'), +('5', '21', '1', '10082', '2869', '0'), +('5', '21', '1', '10165', '1940', '0'), +('5', '21', '2', '4841', '9619', '0'), +('5', '21', '2', '4301', '7726', '0'), +('5', '21', '2', '4831', '6421', '0'), +('5', '21', '2', '3140', '5057', '0'), +('5', '21', '3', '4322', '5343', '0'), +('5', '21', '3', '1544', '4851', '0'), +('5', '21', '3', '71529', '3882', '0'), +('5', '21', '3', '21002', '2114', '0'), +('5', '21', '5', '14703', '7150', '0'), +('5', '21', '5', '27705', '6663', '0'), +('5', '21', '5', '14700', '4806', '0'), +('5', '21', '5', '10055', '4760', '0'), +('5', '21', '8', '11621', '26579', '0'), +('5', '21', '8', '11551', '8753', '0'), +('5', '21', '8', '1409', '7747', '0'), +('5', '21', '8', '11603', '6705', '0'), +('5', '21', '6', '1557', '8270', '0'), +('5', '21', '6', '11699', '6205', '0'), +('5', '21', '6', '4302', '3898', '0'), +('5', '21', '6', '25062', '3672', '0'), +('5', '21', '17', '4832', '12781', '0'), +('5', '21', '17', '4842', '10568', '0'), +('5', '21', '17', '4309', '8225', '0'), +('5', '21', '17', '11623', '7848', '0'), +('5', '21', '7', '4833', '6478', '0'), +('5', '21', '7', '4843', '5389', '0'), +('5', '21', '7', '4343', '4621', '0'), +('5', '21', '7', '1361', '3624', '0'), +('5', '21', '9', '4834', '4408', '0'), +('5', '21', '9', '12189', '3471', '0'), +('5', '21', '9', '4844', '3279', '0'), +('5', '21', '9', '4344', '3046', '0'), +('5', '21', '15', '10366', '8054', '0'), +('5', '21', '15', '10151', '7200', '0'), +('5', '21', '15', '14679', '7010', '0'), +('5', '21', '15', '14678', '5708', '0'), +('5', '21', '20', '2704', '23681', '0'), +('5', '21', '20', '11601', '18484', '0'), +('5', '21', '20', '2918', '11173', '0'), +('5', '21', '20', '1365', '10500', '0'), +('5', '21', '12', '4835', '10342', '0'), +('5', '21', '12', '20655', '8191', '0'), +('5', '21', '12', '4845', '5883', '0'), +('5', '21', '12', '2923', '4758', '0'), +('5', '21', '18', '4836', '6777', '0'), +('5', '21', '18', '4846', '5554', '0'), +('5', '21', '18', '3145', '4880', '0'), +('5', '21', '18', '4346', '4645', '0'), +('5', '21', '19', '4837', '7351', '0'), +('5', '21', '19', '4847', '6231', '0'), +('5', '21', '19', '68239', '5439', '0'), +('5', '21', '19', '3146', '3610', '0'), +('5', '21', '13', '27707', '20978', '0'), +('5', '21', '13', '5401', '20472', '0'), +('5', '21', '13', '5622', '16847', '0'), +('5', '21', '13', '11609', '16490', '0'), +('5', '21', '14', '9402', '33130', '0'), +('5', '21', '14', '11678', '32840', '0'), +('5', '21', '14', '11632', '29091', '0'), +('5', '21', '14', '11551', '23853', '0'), +('5', '21', '11', '8408', '7192', '0'), +('5', '21', '11', '8325', '7008', '0'), +('5', '21', '11', '45137', '7004', '0'), +('5', '21', '11', '8811', '5478', '0'), +('5', '22', '22', '8567', '0', '0'), +('5', '22', '22', '10323', '0', '0'), +('5', '22', '22', '8504', '0', '0'), +('5', '22', '22', '9246', '0', '0'), +('5', '22', '1', '14701', '4854', '0'), +('5', '22', '1', '14702', '3550', '0'), +('5', '22', '1', '10082', '2890', '0'), +('5', '22', '1', '10165', '1940', '0'), +('5', '22', '2', '4841', '9652', '0'), +('5', '22', '2', '4301', '7726', '0'), +('5', '22', '2', '4831', '6439', '0'), +('5', '22', '2', '3140', '5075', '0'), +('5', '22', '3', '4322', '5343', '0'), +('5', '22', '3', '1544', '4869', '0'), +('5', '22', '3', '71529', '3902', '0'), +('5', '22', '3', '21002', '2114', '0'), +('5', '22', '5', '14703', '7150', '0'), +('5', '22', '5', '27705', '6713', '0'), +('5', '22', '5', '14700', '4806', '0'), +('5', '22', '5', '10055', '4760', '0'), +('5', '22', '8', '11621', '26579', '0'), +('5', '22', '8', '11551', '8753', '0'), +('5', '22', '8', '1409', '7747', '0'), +('5', '22', '8', '11603', '6738', '0'), +('5', '22', '6', '1557', '8270', '0'), +('5', '22', '6', '11699', '6260', '0'), +('5', '22', '6', '4302', '3927', '0'), +('5', '22', '6', '25062', '3672', '0'), +('5', '22', '17', '4832', '12853', '0'), +('5', '22', '17', '4842', '10611', '0'), +('5', '22', '17', '4309', '8225', '0'), +('5', '22', '17', '11623', '7848', '0'), +('5', '22', '7', '4833', '6478', '0'), +('5', '22', '7', '4843', '5389', '0'), +('5', '22', '7', '4343', '4669', '0'), +('5', '22', '7', '2458', '3631', '0'), +('5', '22', '9', '4834', '4408', '0'), +('5', '22', '9', '12189', '3471', '0'), +('5', '22', '9', '4844', '3289', '0'), +('5', '22', '9', '4344', '3046', '0'), +('5', '22', '15', '10366', '8054', '0'), +('5', '22', '15', '10151', '7200', '0'), +('5', '22', '15', '14679', '7010', '0'), +('5', '22', '15', '14678', '5708', '0'), +('5', '22', '20', '2704', '23702', '0'), +('5', '22', '20', '11601', '18532', '0'), +('5', '22', '20', '2918', '11191', '0'), +('5', '22', '20', '1365', '10500', '0'), +('5', '22', '12', '4835', '10367', '0'), +('5', '22', '12', '20655', '8208', '0'), +('5', '22', '12', '4845', '5901', '0'), +('5', '22', '12', '2923', '4758', '0'), +('5', '22', '18', '4836', '6801', '0'), +('5', '22', '18', '4846', '5554', '0'), +('5', '22', '18', '3145', '4924', '0'), +('5', '22', '18', '4346', '4645', '0'), +('5', '22', '19', '4837', '7369', '0'), +('5', '22', '19', '4847', '6255', '0'), +('5', '22', '19', '68239', '5449', '0'), +('5', '22', '19', '3146', '3625', '0'), +('5', '22', '13', '27707', '21217', '0'), +('5', '22', '13', '5401', '20613', '0'), +('5', '22', '13', '5622', '17017', '0'), +('5', '22', '13', '11609', '16660', '0'), +('5', '22', '14', '9402', '33154', '0'), +('5', '22', '14', '11678', '32840', '0'), +('5', '22', '14', '11632', '29163', '0'), +('5', '22', '14', '11551', '23853', '0'), +('5', '22', '11', '45137', '7481', '0'), +('5', '22', '11', '8408', '7268', '0'), +('5', '22', '11', '8325', '7093', '0'), +('5', '22', '11', '8811', '5544', '0'), +('5', '23', '22', '8567', '0', '0'), +('5', '23', '22', '10323', '0', '0'), +('5', '23', '22', '8504', '0', '0'), +('5', '23', '22', '9246', '0', '0'), +('5', '23', '1', '14701', '4854', '0'), +('5', '23', '1', '14702', '3550', '0'), +('5', '23', '1', '10082', '2912', '0'), +('5', '23', '1', '10165', '1940', '0'), +('5', '23', '2', '4841', '9684', '0'), +('5', '23', '2', '4301', '7726', '0'), +('5', '23', '2', '4831', '6457', '0'), +('5', '23', '2', '3140', '5093', '0'), +('5', '23', '3', '4322', '5343', '0'), +('5', '23', '3', '1544', '4887', '0'), +('5', '23', '3', '71529', '3921', '0'), +('5', '23', '3', '21002', '2114', '0'), +('5', '23', '5', '14703', '7150', '0'), +('5', '23', '5', '27705', '6764', '0'), +('5', '23', '5', '14700', '4806', '0'), +('5', '23', '5', '10055', '4760', '0'), +('5', '23', '8', '11621', '26579', '0'), +('5', '23', '8', '11551', '8753', '0'), +('5', '23', '8', '1409', '7747', '0'), +('5', '23', '8', '11603', '6770', '0'), +('5', '23', '6', '1557', '8270', '0'), +('5', '23', '6', '11699', '6314', '0'), +('5', '23', '6', '4302', '3956', '0'), +('5', '23', '6', '25062', '3672', '0'), +('5', '23', '17', '4832', '12926', '0'), +('5', '23', '17', '4842', '10655', '0'), +('5', '23', '17', '4309', '8225', '0'), +('5', '23', '17', '11623', '7848', '0'), +('5', '23', '7', '4833', '6478', '0'), +('5', '23', '7', '4843', '5389', '0'), +('5', '23', '7', '4343', '4717', '0'), +('5', '23', '7', '2458', '3645', '0'), +('5', '23', '9', '4834', '4408', '0'), +('5', '23', '9', '12189', '3471', '0'), +('5', '23', '9', '4844', '3300', '0'), +('5', '23', '9', '4344', '3046', '0'), +('5', '23', '15', '10366', '8054', '0'), +('5', '23', '15', '10151', '7200', '0'), +('5', '23', '15', '14679', '7010', '0'), +('5', '23', '15', '14678', '5708', '0'), +('5', '23', '20', '2704', '23724', '0'), +('5', '23', '20', '11601', '18580', '0'), +('5', '23', '20', '2918', '11209', '0'), +('5', '23', '20', '1365', '10500', '0'), +('5', '23', '12', '4835', '10391', '0'), +('5', '23', '12', '20655', '8225', '0'), +('5', '23', '12', '4845', '5919', '0'), +('5', '23', '12', '2923', '4758', '0'), +('5', '23', '18', '4836', '6825', '0'), +('5', '23', '18', '4846', '5554', '0'), +('5', '23', '18', '3145', '4967', '0'), +('5', '23', '18', '4346', '4645', '0'), +('5', '23', '19', '4837', '7387', '0'), +('5', '23', '19', '4847', '6279', '0'), +('5', '23', '19', '68239', '5460', '0'), +('5', '23', '19', '3146', '3639', '0'), +('5', '23', '13', '27707', '21457', '0'), +('5', '23', '13', '5401', '20755', '0'), +('5', '23', '13', '5622', '17215', '0'), +('5', '23', '13', '11609', '16858', '0'), +('5', '23', '14', '9402', '33179', '0'), +('5', '23', '14', '11678', '32840', '0'), +('5', '23', '14', '11632', '29236', '0'), +('5', '23', '14', '11551', '23853', '0'), +('5', '23', '11', '45137', '7856', '0'), +('5', '23', '11', '8408', '7343', '0'), +('5', '23', '11', '8325', '7168', '0'), +('5', '23', '11', '8811', '5601', '0'), +('5', '24', '22', '8567', '0', '0'), +('5', '24', '22', '10323', '0', '0'), +('5', '24', '22', '8504', '0', '0'), +('5', '24', '22', '9246', '0', '0'), +('5', '24', '1', '14701', '4854', '0'), +('5', '24', '1', '14702', '3550', '0'), +('5', '24', '1', '10082', '2934', '0'), +('5', '24', '1', '10165', '1940', '0'), +('5', '24', '2', '4841', '9717', '0'), +('5', '24', '2', '4301', '7726', '0'), +('5', '24', '2', '4831', '6475', '0'), +('5', '24', '2', '3140', '5111', '0'), +('5', '24', '3', '4322', '5343', '0'), +('5', '24', '3', '1544', '4906', '0'), +('5', '24', '3', '71529', '3940', '0'), +('5', '24', '3', '4505', '2119', '0'), +('5', '24', '5', '14703', '7150', '0'), +('5', '24', '5', '27705', '6815', '0'), +('5', '24', '5', '14700', '4806', '0'), +('5', '24', '5', '10055', '4760', '0'), +('5', '24', '8', '11621', '26579', '0'), +('5', '24', '8', '11551', '8753', '0'), +('5', '24', '8', '1409', '7747', '0'), +('5', '24', '8', '11603', '6803', '0'), +('5', '24', '6', '1557', '8270', '0'), +('5', '24', '6', '11699', '6368', '0'), +('5', '24', '6', '4302', '3985', '0'), +('5', '24', '6', '25062', '3672', '0'), +('5', '24', '17', '4832', '12998', '0'), +('5', '24', '17', '4842', '10698', '0'), +('5', '24', '17', '4309', '8225', '0'), +('5', '24', '17', '11623', '7848', '0'), +('5', '24', '7', '4833', '6478', '0'), +('5', '24', '7', '4843', '5389', '0'), +('5', '24', '7', '4343', '4766', '0'), +('5', '24', '7', '2458', '3660', '0'), +('5', '24', '9', '4834', '4408', '0'), +('5', '24', '9', '12189', '3471', '0'), +('5', '24', '9', '4844', '3311', '0'), +('5', '24', '9', '4344', '3046', '0'), +('5', '24', '15', '10366', '8054', '0'), +('5', '24', '15', '10151', '7200', '0'), +('5', '24', '15', '14679', '7010', '0'), +('5', '24', '15', '14678', '5708', '0'), +('5', '24', '20', '2704', '23746', '0'), +('5', '24', '20', '11601', '18629', '0'), +('5', '24', '20', '2918', '11227', '0'), +('5', '24', '20', '1365', '10500', '0'), +('5', '24', '12', '4835', '10415', '0'), +('5', '24', '12', '20655', '8242', '0'), +('5', '24', '12', '4845', '5937', '0'), +('5', '24', '12', '2923', '4758', '0'), +('5', '24', '18', '4836', '6849', '0'), +('5', '24', '18', '4846', '5554', '0'), +('5', '24', '18', '3145', '5011', '0'), +('5', '24', '18', '4346', '4645', '0'), +('5', '24', '19', '4837', '7405', '0'), +('5', '24', '19', '4847', '6303', '0'), +('5', '24', '19', '68239', '5471', '0'), +('5', '24', '19', '3146', '3654', '0'), +('5', '24', '13', '27707', '21696', '0'), +('5', '24', '13', '5401', '20897', '0'), +('5', '24', '13', '5622', '17413', '0'), +('5', '24', '13', '11609', '17057', '0'), +('5', '24', '14', '9402', '33203', '0'), +('5', '24', '14', '11678', '32840', '0'), +('5', '24', '14', '11632', '29308', '0'), +('5', '24', '14', '11551', '23853', '0'), +('5', '24', '11', '45137', '8282', '0'), +('5', '24', '11', '8408', '7419', '0'), +('5', '24', '11', '8325', '7253', '0'), +('5', '24', '11', '8811', '5667', '0'), +('5', '25', '22', '8567', '0', '0'), +('5', '25', '22', '10323', '0', '0'), +('5', '25', '22', '8504', '0', '0'), +('5', '25', '22', '9246', '0', '0'), +('5', '25', '1', '14701', '4854', '0'), +('5', '25', '1', '14702', '3550', '0'), +('5', '25', '1', '10082', '2956', '0'), +('5', '25', '1', '10165', '1940', '0'), +('5', '25', '2', '4841', '9749', '0'), +('5', '25', '2', '4301', '7726', '0'), +('5', '25', '2', '4831', '6493', '0'), +('5', '25', '2', '3140', '5129', '0'), +('5', '25', '3', '4322', '5343', '0'), +('5', '25', '3', '1544', '4924', '0'), +('5', '25', '3', '71529', '3962', '0'), +('5', '25', '3', '4505', '2144', '0'), +('5', '25', '5', '14703', '7150', '0'), +('5', '25', '5', '27705', '6866', '0'), +('5', '25', '5', '14700', '4806', '0'), +('5', '25', '5', '10055', '4760', '0'), +('5', '25', '8', '11621', '26579', '0'), +('5', '25', '8', '11551', '8753', '0'), +('5', '25', '8', '1409', '7747', '0'), +('5', '25', '8', '11603', '6835', '0'), +('5', '25', '6', '1557', '8270', '0'), +('5', '25', '6', '11699', '6423', '0'), +('5', '25', '6', '4302', '4018', '0'), +('5', '25', '6', '25062', '3672', '0'), +('5', '25', '17', '4832', '13080', '0'), +('5', '25', '17', '4842', '10747', '0'), +('5', '25', '17', '4309', '8225', '0'), +('5', '25', '17', '11623', '7848', '0'), +('5', '25', '7', '4833', '6478', '0'), +('5', '25', '7', '4843', '5389', '0'), +('5', '25', '7', '4343', '4820', '0'), +('5', '25', '7', '2458', '3674', '0'), +('5', '25', '9', '4834', '4408', '0'), +('5', '25', '9', '12189', '3471', '0'), +('5', '25', '9', '4844', '3322', '0'), +('5', '25', '9', '4344', '3046', '0'), +('5', '25', '15', '10366', '8054', '0'), +('5', '25', '15', '10151', '7200', '0'), +('5', '25', '15', '14679', '7010', '0'), +('5', '25', '15', '14678', '5708', '0'), +('5', '25', '20', '2704', '23768', '0'), +('5', '25', '20', '11601', '18683', '0'), +('5', '25', '20', '2918', '11246', '0'), +('5', '25', '20', '1365', '10500', '0'), +('5', '25', '12', '4835', '10442', '0'), +('5', '25', '12', '20655', '8260', '0'), +('5', '25', '12', '4845', '5956', '0'), +('5', '25', '12', '2923', '4758', '0'), +('5', '25', '18', '4836', '6877', '0'), +('5', '25', '18', '4846', '5554', '0'), +('5', '25', '18', '3145', '5060', '0'), +('5', '25', '18', '4346', '4645', '0'), +('5', '25', '19', '4837', '7423', '0'), +('5', '25', '19', '4847', '6330', '0'), +('5', '25', '19', '68239', '5482', '0'), +('5', '25', '19', '3146', '3670', '0'), +('5', '25', '13', '27707', '21964', '0'), +('5', '25', '13', '5401', '21038', '0'), +('5', '25', '13', '5622', '17583', '0'), +('5', '25', '13', '11609', '17227', '0'), +('5', '25', '14', '9402', '33230', '0'), +('5', '25', '14', '11678', '32840', '0'), +('5', '25', '14', '11632', '29390', '0'), +('5', '25', '14', '11551', '23853', '0'), +('5', '25', '11', '45137', '8749', '0'), +('5', '25', '11', '8408', '7494', '0'), +('5', '25', '11', '8325', '7329', '0'), +('5', '25', '11', '8811', '5733', '0'), +('5', '26', '22', '8567', '0', '0'), +('5', '26', '22', '10323', '0', '0'), +('5', '26', '22', '8504', '0', '0'), +('5', '26', '22', '9246', '0', '0'), +('5', '26', '1', '14701', '4854', '0'), +('5', '26', '1', '14702', '3550', '0'), +('5', '26', '1', '10082', '2977', '0'), +('5', '26', '1', '10165', '1940', '0'), +('5', '26', '2', '4841', '9782', '0'), +('5', '26', '2', '4301', '7726', '0'), +('5', '26', '2', '4831', '6511', '0'), +('5', '26', '2', '3140', '5147', '0'), +('5', '26', '3', '4322', '5343', '0'), +('5', '26', '3', '1544', '4942', '0'), +('5', '26', '3', '71529', '3981', '0'), +('5', '26', '3', '4505', '2170', '0'), +('5', '26', '5', '14703', '7150', '0'), +('5', '26', '5', '27705', '6916', '0'), +('5', '26', '5', '14700', '4806', '0'), +('5', '26', '5', '10055', '4760', '0'), +('5', '26', '8', '11621', '26579', '0'), +('5', '26', '8', '11551', '8753', '0'), +('5', '26', '8', '1409', '7747', '0'), +('5', '26', '8', '11603', '6868', '0'), +('5', '26', '6', '1557', '8270', '0'), +('5', '26', '6', '11699', '6477', '0'), +('5', '26', '6', '4302', '4047', '0'), +('5', '26', '6', '25062', '3672', '0'), +('5', '26', '17', '4832', '13152', '0'), +('5', '26', '17', '4842', '10790', '0'), +('5', '26', '17', '4309', '8225', '0'), +('5', '26', '17', '11623', '7848', '0'), +('5', '26', '7', '4833', '6478', '0'), +('5', '26', '7', '4843', '5389', '0'), +('5', '26', '7', '4343', '4868', '0'), +('5', '26', '7', '2458', '3689', '0'), +('5', '26', '9', '4834', '4408', '0'), +('5', '26', '9', '12189', '3471', '0'), +('5', '26', '9', '4844', '3333', '0'), +('5', '26', '9', '4344', '3046', '0'), +('5', '26', '15', '10366', '8054', '0'), +('5', '26', '15', '10151', '7200', '0'), +('5', '26', '15', '14679', '7010', '0'), +('5', '26', '15', '14678', '5708', '0'), +('5', '26', '20', '2704', '23789', '0'), +('5', '26', '20', '11601', '18731', '0'), +('5', '26', '20', '2918', '11264', '0'), +('5', '26', '20', '1365', '10500', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '26', '12', '4835', '10466', '0'), +('5', '26', '12', '20655', '8277', '0'), +('5', '26', '12', '4845', '5974', '0'), +('5', '26', '12', '2923', '4758', '0'), +('5', '26', '18', '4836', '6901', '0'), +('5', '26', '18', '4846', '5554', '0'), +('5', '26', '18', '3145', '5103', '0'), +('5', '26', '18', '4346', '4645', '0'), +('5', '26', '19', '4837', '7441', '0'), +('5', '26', '19', '4847', '6355', '0'), +('5', '26', '19', '68239', '5493', '0'), +('5', '26', '19', '3146', '3684', '0'), +('5', '26', '13', '27707', '22203', '0'), +('5', '26', '13', '5401', '21180', '0'), +('5', '26', '13', '5622', '17782', '0'), +('5', '26', '13', '11609', '17425', '0'), +('5', '26', '14', '9402', '33254', '0'), +('5', '26', '14', '11678', '32840', '0'), +('5', '26', '14', '11632', '29462', '0'), +('5', '26', '14', '11551', '23853', '0'), +('5', '26', '11', '45137', '9255', '0'), +('5', '26', '11', '8408', '7570', '0'), +('5', '26', '11', '8325', '7414', '0'), +('5', '26', '11', '8811', '5789', '0'), +('5', '27', '22', '8567', '0', '0'), +('5', '27', '22', '10323', '0', '0'), +('5', '27', '22', '8504', '0', '0'), +('5', '27', '22', '9246', '0', '0'), +('5', '27', '1', '14701', '4854', '0'), +('5', '27', '1', '14702', '3550', '0'), +('5', '27', '1', '10082', '2999', '0'), +('5', '27', '1', '10165', '1940', '0'), +('5', '27', '2', '4841', '9815', '0'), +('5', '27', '2', '4301', '7726', '0'), +('5', '27', '2', '4831', '6529', '0'), +('5', '27', '2', '3140', '5165', '0'), +('5', '27', '3', '4322', '5343', '0'), +('5', '27', '3', '1544', '4960', '0'), +('5', '27', '3', '71529', '4001', '0'), +('5', '27', '3', '4505', '2195', '0'), +('5', '27', '5', '14703', '7150', '0'), +('5', '27', '5', '27705', '6967', '0'), +('5', '27', '5', '14700', '4806', '0'), +('5', '27', '5', '10055', '4760', '0'), +('5', '27', '8', '11621', '26579', '0'), +('5', '27', '8', '11551', '8753', '0'), +('5', '27', '8', '1409', '7747', '0'), +('5', '27', '8', '11603', '6901', '0'), +('5', '27', '6', '1557', '8270', '0'), +('5', '27', '6', '11699', '6531', '0'), +('5', '27', '6', '4302', '4076', '0'), +('5', '27', '6', '25062', '3672', '0'), +('5', '27', '17', '4832', '13225', '0'), +('5', '27', '17', '4842', '10834', '0'), +('5', '27', '17', '4309', '8225', '0'), +('5', '27', '17', '11623', '7848', '0'), +('5', '27', '7', '4833', '6478', '0'), +('5', '27', '7', '4843', '5389', '0'), +('5', '27', '7', '4343', '4917', '0'), +('5', '27', '7', '2458', '3703', '0'), +('5', '27', '9', '4834', '4408', '0'), +('5', '27', '9', '12189', '3471', '0'), +('5', '27', '9', '4844', '3344', '0'), +('5', '27', '9', '4344', '3046', '0'), +('5', '27', '15', '10366', '8054', '0'), +('5', '27', '15', '10151', '7200', '0'), +('5', '27', '15', '14679', '7010', '0'), +('5', '27', '15', '14678', '5708', '0'), +('5', '27', '20', '2704', '23811', '0'), +('5', '27', '20', '11601', '18780', '0'), +('5', '27', '20', '2918', '11282', '0'), +('5', '27', '20', '1365', '10500', '0'), +('5', '27', '12', '4835', '10490', '0'), +('5', '27', '12', '20655', '8294', '0'), +('5', '27', '12', '4845', '5992', '0'), +('5', '27', '12', '2923', '4758', '0'), +('5', '27', '18', '4836', '6925', '0'), +('5', '27', '18', '4846', '5554', '0'), +('5', '27', '18', '3145', '5147', '0'), +('5', '27', '18', '4346', '4645', '0'), +('5', '27', '19', '4837', '7459', '0'), +('5', '27', '19', '4847', '6379', '0'), +('5', '27', '19', '68239', '5504', '0'), +('5', '27', '19', '3146', '3699', '0'), +('5', '27', '13', '27707', '22442', '0'), +('5', '27', '13', '5401', '21322', '0'), +('5', '27', '13', '5622', '17980', '0'), +('5', '27', '13', '11609', '17623', '0'), +('5', '27', '14', '9402', '33278', '0'), +('5', '27', '14', '11678', '32840', '0'), +('5', '27', '14', '11632', '29534', '0'), +('5', '27', '14', '11551', '23853', '0'), +('5', '27', '11', '45137', '9659', '0'), +('5', '27', '11', '8408', '7645', '0'), +('5', '27', '11', '8325', '7489', '0'), +('5', '27', '11', '8811', '5856', '0'), +('5', '28', '22', '8567', '0', '0'), +('5', '28', '22', '10323', '0', '0'), +('5', '28', '22', '8504', '0', '0'), +('5', '28', '22', '9246', '0', '0'), +('5', '28', '1', '14701', '4854', '0'), +('5', '28', '1', '14702', '3550', '0'), +('5', '28', '1', '10082', '3021', '0'), +('5', '28', '1', '10165', '1940', '0'), +('5', '28', '2', '4841', '9847', '0'), +('5', '28', '2', '4301', '7726', '0'), +('5', '28', '2', '4831', '6547', '0'), +('5', '28', '2', '3140', '5183', '0'), +('5', '28', '3', '4322', '5343', '0'), +('5', '28', '3', '1544', '4978', '0'), +('5', '28', '3', '71529', '4022', '0'), +('5', '28', '3', '4505', '2220', '0'), +('5', '28', '5', '14703', '7150', '0'), +('5', '28', '5', '27705', '7018', '0'), +('5', '28', '5', '14700', '4806', '0'), +('5', '28', '5', '10055', '4760', '0'), +('5', '28', '8', '11621', '26579', '0'), +('5', '28', '8', '11551', '8753', '0'), +('5', '28', '8', '1409', '7747', '0'), +('5', '28', '8', '11603', '6933', '0'), +('5', '28', '6', '1557', '8270', '0'), +('5', '28', '6', '11699', '6586', '0'), +('5', '28', '6', '4302', '4108', '0'), +('5', '28', '6', '25062', '3672', '0'), +('5', '28', '17', '4832', '13306', '0'), +('5', '28', '17', '4842', '10883', '0'), +('5', '28', '17', '4309', '8225', '0'), +('5', '28', '17', '11623', '7848', '0'), +('5', '28', '7', '4833', '6478', '0'), +('5', '28', '7', '4843', '5389', '0'), +('5', '28', '7', '4343', '4971', '0'), +('5', '28', '7', '2458', '3718', '0'), +('5', '28', '9', '4834', '4408', '0'), +('5', '28', '9', '12189', '3471', '0'), +('5', '28', '9', '4844', '3355', '0'), +('5', '28', '9', '4344', '3046', '0'), +('5', '28', '15', '10366', '8054', '0'), +('5', '28', '15', '10151', '7200', '0'), +('5', '28', '15', '14679', '7010', '0'), +('5', '28', '15', '14678', '5708', '0'), +('5', '28', '20', '2704', '23833', '0'), +('5', '28', '20', '11601', '18834', '0'), +('5', '28', '20', '2918', '11300', '0'), +('5', '28', '20', '1365', '10500', '0'), +('5', '28', '12', '4835', '10518', '0'), +('5', '28', '12', '20655', '8312', '0'), +('5', '28', '12', '4845', '6010', '0'), +('5', '28', '12', '2923', '4758', '0'), +('5', '28', '18', '4836', '6952', '0'), +('5', '28', '18', '4846', '5554', '0'), +('5', '28', '18', '3145', '5196', '0'), +('5', '28', '18', '4346', '4645', '0'), +('5', '28', '19', '4837', '7478', '0'), +('5', '28', '19', '4847', '6406', '0'), +('5', '28', '19', '68239', '5515', '0'), +('5', '28', '19', '3146', '3715', '0'), +('5', '28', '13', '27707', '22682', '0'), +('5', '28', '13', '5401', '21492', '0'), +('5', '28', '13', '5622', '18150', '0'), +('5', '28', '13', '11609', '17793', '0'), +('5', '28', '14', '9402', '33305', '0'), +('5', '28', '14', '11678', '32840', '0'), +('5', '28', '14', '11632', '29616', '0'), +('5', '28', '14', '11551', '23853', '0'), +('5', '28', '11', '45137', '10068', '0'), +('5', '28', '11', '8408', '7721', '0'), +('5', '28', '11', '8325', '7574', '0'), +('5', '28', '11', '8811', '5922', '0'), +('5', '29', '22', '8567', '0', '0'), +('5', '29', '22', '10323', '0', '0'), +('5', '29', '22', '8504', '0', '0'), +('5', '29', '22', '9246', '0', '0'), +('5', '29', '1', '14701', '4854', '0'), +('5', '29', '1', '14702', '3550', '0'), +('5', '29', '1', '10082', '3043', '0'), +('5', '29', '1', '10165', '1940', '0'), +('5', '29', '2', '4841', '9880', '0'), +('5', '29', '2', '4301', '7726', '0'), +('5', '29', '2', '4831', '6565', '0'), +('5', '29', '2', '3140', '5201', '0'), +('5', '29', '3', '4322', '5343', '0'), +('5', '29', '3', '1544', '4996', '0'), +('5', '29', '3', '71529', '4042', '0'), +('5', '29', '3', '4505', '2246', '0'), +('5', '29', '5', '14703', '7150', '0'), +('5', '29', '5', '27705', '7068', '0'), +('5', '29', '5', '14700', '4806', '0'), +('5', '29', '5', '10055', '4760', '0'), +('5', '29', '8', '11621', '26579', '0'), +('5', '29', '8', '11551', '8753', '0'), +('5', '29', '8', '1409', '7747', '0'), +('5', '29', '8', '11603', '6966', '0'), +('5', '29', '6', '1557', '8270', '0'), +('5', '29', '6', '11699', '6640', '0'), +('5', '29', '6', '4302', '4137', '0'), +('5', '29', '6', '25062', '3672', '0'), +('5', '29', '17', '4832', '13379', '0'), +('5', '29', '17', '4842', '10926', '0'), +('5', '29', '17', '4309', '8225', '0'), +('5', '29', '17', '11623', '7848', '0'), +('5', '29', '7', '4833', '6478', '0'), +('5', '29', '7', '4843', '5389', '0'), +('5', '29', '7', '4343', '5019', '0'), +('5', '29', '7', '2458', '3732', '0'), +('5', '29', '9', '4834', '4408', '0'), +('5', '29', '9', '12189', '3471', '0'), +('5', '29', '9', '4844', '3365', '0'), +('5', '29', '9', '4344', '3046', '0'), +('5', '29', '15', '10366', '8054', '0'), +('5', '29', '15', '10151', '7200', '0'), +('5', '29', '15', '14679', '7010', '0'), +('5', '29', '15', '14678', '5708', '0'), +('5', '29', '20', '2704', '23855', '0'), +('5', '29', '20', '11601', '18882', '0'), +('5', '29', '20', '2918', '11318', '0'), +('5', '29', '20', '1365', '10500', '0'), +('5', '29', '12', '4835', '10542', '0'), +('5', '29', '12', '20655', '8329', '0'), +('5', '29', '12', '4845', '6028', '0'), +('5', '29', '12', '2923', '4758', '0'), +('5', '29', '18', '4836', '6976', '0'), +('5', '29', '18', '4846', '5554', '0'), +('5', '29', '18', '3145', '5239', '0'), +('5', '29', '18', '4346', '4645', '0'), +('5', '29', '19', '4837', '7496', '0'), +('5', '29', '19', '4847', '6430', '0'), +('5', '29', '19', '68239', '5525', '0'), +('5', '29', '19', '3146', '3730', '0'), +('5', '29', '13', '27707', '22949', '0'), +('5', '29', '13', '5401', '21633', '0'), +('5', '29', '13', '5622', '18348', '0'), +('5', '29', '13', '11609', '17992', '0'), +('5', '29', '14', '9402', '33330', '0'), +('5', '29', '14', '11678', '32840', '0'), +('5', '29', '14', '11632', '29689', '0'), +('5', '29', '14', '11551', '23853', '0'), +('5', '29', '11', '45137', '10524', '0'), +('5', '29', '11', '8408', '7796', '0'), +('5', '29', '11', '8325', '7650', '0'), +('5', '29', '11', '8811', '5978', '0'), +('5', '30', '22', '8567', '0', '0'), +('5', '30', '22', '10323', '0', '0'), +('5', '30', '22', '8504', '0', '0'), +('5', '30', '22', '9246', '0', '0'), +('5', '30', '1', '14701', '4854', '0'), +('5', '30', '1', '14702', '3550', '0'), +('5', '30', '1', '10082', '3064', '0'), +('5', '30', '1', '10165', '1940', '0'), +('5', '30', '2', '4841', '9912', '0'), +('5', '30', '2', '4301', '7726', '0'), +('5', '30', '2', '4831', '6584', '0'), +('5', '30', '2', '4620', '5232', '0'), +('5', '30', '3', '4322', '5343', '0'), +('5', '30', '3', '1544', '5014', '0'), +('5', '30', '3', '71529', '4064', '0'), +('5', '30', '3', '4505', '2271', '0'), +('5', '30', '5', '14703', '7150', '0'), +('5', '30', '5', '27705', '7119', '0'), +('5', '30', '5', '14700', '4806', '0'), +('5', '30', '5', '10055', '4760', '0'), +('5', '30', '8', '11621', '26579', '0'), +('5', '30', '8', '11551', '8753', '0'), +('5', '30', '8', '1409', '7747', '0'), +('5', '30', '8', '11603', '6998', '0'), +('5', '30', '6', '1557', '8270', '0'), +('5', '30', '6', '11699', '6694', '0'), +('5', '30', '6', '4302', '4170', '0'), +('5', '30', '6', '25062', '3672', '0'), +('5', '30', '17', '4832', '13460', '0'), +('5', '30', '17', '4842', '10975', '0'), +('5', '30', '17', '4309', '8225', '0'), +('5', '30', '17', '11623', '7848', '0'), +('5', '30', '7', '4833', '6478', '0'), +('5', '30', '7', '4843', '5389', '0'), +('5', '30', '7', '4343', '5074', '0'), +('5', '30', '7', '2458', '3747', '0'), +('5', '30', '9', '4834', '4408', '0'), +('5', '30', '9', '12189', '3471', '0'), +('5', '30', '9', '4844', '3376', '0'), +('5', '30', '9', '4344', '3046', '0'), +('5', '30', '15', '10366', '8054', '0'), +('5', '30', '15', '10151', '7200', '0'), +('5', '30', '15', '14679', '7010', '0'), +('5', '30', '15', '14678', '5708', '0'), +('5', '30', '20', '2704', '23876', '0'), +('5', '30', '20', '11601', '18937', '0'), +('5', '30', '20', '2918', '11336', '0'), +('5', '30', '20', '1365', '10500', '0'), +('5', '30', '12', '4835', '10569', '0'), +('5', '30', '12', '20655', '8347', '0'), +('5', '30', '12', '4845', '6046', '0'), +('5', '30', '12', '11624', '4789', '0'), +('5', '30', '18', '4836', '7003', '0'), +('5', '30', '18', '4846', '5554', '0'), +('5', '30', '18', '3145', '5288', '0'), +('5', '30', '18', '4346', '4645', '0'), +('5', '30', '19', '4837', '7514', '0'), +('5', '30', '19', '4847', '6457', '0'), +('5', '30', '19', '68239', '5536', '0'), +('5', '30', '19', '3146', '3746', '0'), +('5', '30', '13', '27707', '23189', '0'), +('5', '30', '13', '5401', '21775', '0'), +('5', '30', '13', '5622', '18547', '0'), +('5', '30', '13', '11609', '18190', '0'), +('5', '30', '14', '9402', '33357', '0'), +('5', '30', '14', '11678', '32840', '0'), +('5', '30', '14', '11632', '29770', '0'), +('5', '30', '14', '11551', '23853', '0'), +('5', '30', '11', '45137', '10947', '0'), +('5', '30', '11', '8408', '7872', '0'), +('5', '30', '11', '8325', '7735', '0'), +('5', '30', '11', '8811', '6044', '0'), +('5', '31', '22', '8567', '0', '0'), +('5', '31', '22', '10323', '0', '0'), +('5', '31', '22', '8504', '0', '0'), +('5', '31', '22', '9246', '0', '0'), +('5', '31', '1', '14701', '4854', '0'), +('5', '31', '1', '14702', '3550', '0'), +('5', '31', '1', '10082', '3086', '0'), +('5', '31', '1', '10165', '1940', '0'), +('5', '31', '2', '4841', '9945', '0'), +('5', '31', '2', '4301', '7726', '0'), +('5', '31', '2', '4831', '6602', '0'), +('5', '31', '2', '4620', '5271', '0'), +('5', '31', '3', '4322', '5343', '0'), +('5', '31', '3', '1544', '5032', '0'), +('5', '31', '3', '71529', '4085', '0'), +('5', '31', '3', '4505', '2296', '0'), +('5', '31', '5', '27705', '7170', '0'), +('5', '31', '5', '14703', '7150', '0'), +('5', '31', '5', '14700', '4806', '0'), +('5', '31', '5', '10055', '4760', '0'), +('5', '31', '8', '11621', '26579', '0'), +('5', '31', '8', '11551', '8753', '0'), +('5', '31', '8', '1409', '7747', '0'), +('5', '31', '8', '11603', '7031', '0'), +('5', '31', '6', '1557', '8270', '0'), +('5', '31', '6', '11699', '6749', '0'), +('5', '31', '6', '4302', '4203', '0'), +('5', '31', '6', '25062', '3672', '0'), +('5', '31', '17', '4832', '13542', '0'), +('5', '31', '17', '4842', '11024', '0'), +('5', '31', '17', '4309', '8225', '0'), +('5', '31', '17', '11623', '7848', '0'), +('5', '31', '7', '4833', '6478', '0'), +('5', '31', '7', '4843', '5389', '0'), +('5', '31', '7', '4343', '5128', '0'), +('5', '31', '7', '2458', '3761', '0'), +('5', '31', '9', '4834', '4408', '0'), +('5', '31', '9', '12189', '3471', '0'), +('5', '31', '9', '4844', '3387', '0'), +('5', '31', '9', '4344', '3046', '0'), +('5', '31', '15', '10366', '8054', '0'), +('5', '31', '15', '10151', '7200', '0'), +('5', '31', '15', '14679', '7010', '0'), +('5', '31', '15', '14678', '5708', '0'), +('5', '31', '20', '2704', '23898', '0'), +('5', '31', '20', '11601', '18991', '0'), +('5', '31', '20', '2918', '11354', '0'), +('5', '31', '20', '1365', '10500', '0'), +('5', '31', '12', '4835', '10596', '0'), +('5', '31', '12', '20655', '8365', '0'), +('5', '31', '12', '4845', '6064', '0'), +('5', '31', '12', '11624', '4827', '0'), +('5', '31', '18', '4836', '7031', '0'), +('5', '31', '18', '4846', '5554', '0'), +('5', '31', '18', '3145', '5337', '0'), +('5', '31', '18', '4346', '4645', '0'), +('5', '31', '19', '4837', '7532', '0'), +('5', '31', '19', '4847', '6484', '0'), +('5', '31', '19', '68239', '5547', '0'), +('5', '31', '19', '3146', '3762', '0'), +('5', '31', '13', '27707', '23428', '0'), +('5', '31', '13', '5401', '21917', '0'), +('5', '31', '13', '5622', '18717', '0'), +('5', '31', '13', '11609', '18360', '0'), +('5', '31', '14', '9402', '33384', '0'), +('5', '31', '14', '11678', '32840', '0'), +('5', '31', '14', '11632', '29852', '0'), +('5', '31', '14', '11551', '23853', '0'), +('5', '31', '11', '45137', '11496', '0'), +('5', '31', '11', '8408', '7948', '0'), +('5', '31', '11', '8325', '7811', '0'), +('5', '31', '11', '8811', '6101', '0'), +('5', '32', '22', '8567', '0', '0'), +('5', '32', '22', '10323', '0', '0'), +('5', '32', '22', '8504', '0', '0'), +('5', '32', '22', '9246', '0', '0'), +('5', '32', '1', '14701', '4854', '0'), +('5', '32', '1', '14702', '3550', '0'), +('5', '32', '1', '10082', '3108', '0'), +('5', '32', '1', '10165', '1940', '0'), +('5', '32', '2', '4841', '9978', '0'), +('5', '32', '2', '4301', '7726', '0'), +('5', '32', '2', '4831', '6620', '0'), +('5', '32', '2', '4620', '5304', '0'), +('5', '32', '3', '4322', '5343', '0'), +('5', '32', '3', '1544', '5051', '0'), +('5', '32', '3', '71529', '4105', '0'), +('5', '32', '3', '4505', '2322', '0'), +('5', '32', '5', '27705', '7221', '0'), +('5', '32', '5', '14703', '7150', '0'), +('5', '32', '5', '14700', '4806', '0'), +('5', '32', '5', '10055', '4760', '0'), +('5', '32', '8', '11621', '26579', '0'), +('5', '32', '8', '11551', '8753', '0'), +('5', '32', '8', '1409', '7747', '0'), +('5', '32', '8', '11603', '7064', '0'), +('5', '32', '6', '1557', '8270', '0'), +('5', '32', '6', '11699', '6803', '0'), +('5', '32', '6', '4302', '4232', '0'), +('5', '32', '6', '25062', '3672', '0'), +('5', '32', '17', '4832', '13614', '0'), +('5', '32', '17', '4842', '11068', '0'), +('5', '32', '17', '4309', '8225', '0'), +('5', '32', '17', '11623', '7848', '0'), +('5', '32', '7', '4833', '6478', '0'), +('5', '32', '7', '4843', '5389', '0'), +('5', '32', '7', '4343', '5176', '0'), +('5', '32', '7', '2458', '3776', '0'), +('5', '32', '9', '4834', '4408', '0'), +('5', '32', '9', '12189', '3471', '0'), +('5', '32', '9', '4844', '3398', '0'), +('5', '32', '9', '4344', '3046', '0'), +('5', '32', '15', '10366', '8054', '0'), +('5', '32', '15', '10151', '7200', '0'), +('5', '32', '15', '14679', '7010', '0'), +('5', '32', '15', '14678', '5708', '0'), +('5', '32', '20', '2704', '23920', '0'), +('5', '32', '20', '11601', '19039', '0'), +('5', '32', '20', '2918', '11372', '0'), +('5', '32', '20', '1365', '10500', '0'), +('5', '32', '12', '4835', '10620', '0'), +('5', '32', '12', '20655', '8382', '0'), +('5', '32', '12', '4845', '6082', '0'), +('5', '32', '12', '11624', '4861', '0'), +('5', '32', '18', '4836', '7055', '0'), +('5', '32', '18', '4846', '5554', '0'), +('5', '32', '18', '3145', '5380', '0'), +('5', '32', '18', '4346', '4645', '0'), +('5', '32', '19', '4837', '7550', '0'), +('5', '32', '19', '4847', '6509', '0'), +('5', '32', '19', '68239', '5558', '0'), +('5', '32', '19', '3146', '3777', '0'), +('5', '32', '13', '27707', '23667', '0'), +('5', '32', '13', '5401', '22058', '0'), +('5', '32', '13', '5622', '18915', '0'), +('5', '32', '13', '11609', '18558', '0'), +('5', '32', '14', '9402', '33408', '0'), +('5', '32', '14', '11678', '32840', '0'), +('5', '32', '14', '11632', '29924', '0'), +('5', '32', '14', '11551', '23853', '0'), +('5', '32', '11', '45137', '11922', '0'), +('5', '32', '11', '8408', '8023', '0'), +('5', '32', '11', '8325', '7886', '0'), +('5', '32', '11', '8811', '6167', '0'), +('5', '33', '22', '8567', '0', '0'), +('5', '33', '22', '10323', '0', '0'), +('5', '33', '22', '8504', '0', '0'), +('5', '33', '22', '9246', '0', '0'), +('5', '33', '1', '14701', '4854', '0'), +('5', '33', '1', '14702', '3550', '0'), +('5', '33', '1', '10082', '3130', '0'), +('5', '33', '1', '10165', '1940', '0'), +('5', '33', '2', '4841', '10010', '0'), +('5', '33', '2', '4301', '7726', '0'), +('5', '33', '2', '4831', '6638', '0'), +('5', '33', '2', '4620', '5342', '0'), +('5', '33', '3', '4322', '5343', '0'), +('5', '33', '3', '1544', '5069', '0'), +('5', '33', '3', '71529', '4126', '0'), +('5', '33', '3', '4505', '2347', '0'), +('5', '33', '5', '27705', '7271', '0'), +('5', '33', '5', '14703', '7150', '0'), +('5', '33', '5', '14700', '4806', '0'), +('5', '33', '5', '10055', '4760', '0'), +('5', '33', '8', '11621', '26579', '0'), +('5', '33', '8', '11551', '8753', '0'), +('5', '33', '8', '1409', '7747', '0'), +('5', '33', '8', '11603', '7096', '0'), +('5', '33', '6', '1557', '8270', '0'), +('5', '33', '6', '11699', '6857', '0'), +('5', '33', '6', '4302', '4264', '0'), +('5', '33', '6', '25062', '3672', '0'), +('5', '33', '17', '4832', '13696', '0'), +('5', '33', '17', '4842', '11117', '0'), +('5', '33', '17', '4309', '8225', '0'), +('5', '33', '17', '11623', '7848', '0'), +('5', '33', '7', '4833', '6478', '0'), +('5', '33', '7', '4843', '5389', '0'), +('5', '33', '7', '4343', '5231', '0'), +('5', '33', '7', '2458', '3790', '0'), +('5', '33', '9', '4834', '4408', '0'), +('5', '33', '9', '12189', '3471', '0'), +('5', '33', '9', '4844', '3409', '0'), +('5', '33', '9', '4344', '3046', '0'), +('5', '33', '15', '10366', '8054', '0'), +('5', '33', '15', '10151', '7200', '0'), +('5', '33', '15', '14679', '7010', '0'), +('5', '33', '15', '14678', '5708', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '33', '20', '2704', '23942', '0'), +('5', '33', '20', '11601', '19094', '0'), +('5', '33', '20', '2918', '11390', '0'), +('5', '33', '20', '1365', '10500', '0'), +('5', '33', '12', '4835', '10647', '0'), +('5', '33', '12', '20655', '8400', '0'), +('5', '33', '12', '4845', '6100', '0'), +('5', '33', '12', '11624', '4899', '0'), +('5', '33', '18', '4836', '7082', '0'), +('5', '33', '18', '4846', '5554', '0'), +('5', '33', '18', '3145', '5429', '0'), +('5', '33', '18', '4346', '4645', '0'), +('5', '33', '19', '4837', '7568', '0'), +('5', '33', '19', '4847', '6536', '0'), +('5', '33', '19', '68239', '5569', '0'), +('5', '33', '19', '3146', '3793', '0'), +('5', '33', '13', '27707', '23935', '0'), +('5', '33', '13', '5401', '22200', '0'), +('5', '33', '13', '5622', '19113', '0'), +('5', '33', '13', '11609', '18728', '0'), +('5', '33', '14', '9402', '33435', '0'), +('5', '33', '14', '11678', '32840', '0'), +('5', '33', '14', '11632', '30006', '0'), +('5', '33', '14', '11551', '23853', '0'), +('5', '33', '11', '45137', '12410', '0'), +('5', '33', '11', '8408', '8108', '0'), +('5', '33', '11', '8325', '7971', '0'), +('5', '33', '11', '8811', '6233', '0'), +('5', '34', '22', '8567', '0', '0'), +('5', '34', '22', '10323', '0', '0'), +('5', '34', '22', '8504', '0', '0'), +('5', '34', '22', '9246', '0', '0'), +('5', '34', '1', '14701', '4854', '0'), +('5', '34', '1', '14702', '3550', '0'), +('5', '34', '1', '10082', '3151', '0'), +('5', '34', '1', '10165', '1940', '0'), +('5', '34', '2', '4841', '10043', '0'), +('5', '34', '2', '4301', '7726', '0'), +('5', '34', '2', '4831', '6656', '0'), +('5', '34', '2', '4620', '5380', '0'), +('5', '34', '3', '4322', '5343', '0'), +('5', '34', '3', '1544', '5087', '0'), +('5', '34', '3', '71529', '4148', '0'), +('5', '34', '3', '4505', '2373', '0'), +('5', '34', '5', '27705', '7322', '0'), +('5', '34', '5', '14703', '7150', '0'), +('5', '34', '5', '14700', '4806', '0'), +('5', '34', '5', '10055', '4760', '0'), +('5', '34', '8', '11621', '26579', '0'), +('5', '34', '8', '11551', '8753', '0'), +('5', '34', '8', '1409', '7747', '0'), +('5', '34', '8', '11603', '7129', '0'), +('5', '34', '6', '1557', '8270', '0'), +('5', '34', '6', '11699', '6912', '0'), +('5', '34', '6', '4302', '4297', '0'), +('5', '34', '6', '25062', '3672', '0'), +('5', '34', '17', '4832', '13777', '0'), +('5', '34', '17', '4842', '11166', '0'), +('5', '34', '17', '4309', '8225', '0'), +('5', '34', '17', '11623', '7848', '0'), +('5', '34', '7', '4833', '6478', '0'), +('5', '34', '7', '4843', '5389', '0'), +('5', '34', '7', '4343', '5285', '0'), +('5', '34', '7', '2458', '3805', '0'), +('5', '34', '9', '4834', '4408', '0'), +('5', '34', '9', '12189', '3471', '0'), +('5', '34', '9', '4844', '3420', '0'), +('5', '34', '9', '4344', '3046', '0'), +('5', '34', '15', '10366', '8054', '0'), +('5', '34', '15', '10151', '7200', '0'), +('5', '34', '15', '14679', '7010', '0'), +('5', '34', '15', '14678', '5708', '0'), +('5', '34', '20', '2704', '23963', '0'), +('5', '34', '20', '11601', '19148', '0'), +('5', '34', '20', '2918', '11409', '0'), +('5', '34', '20', '1365', '10500', '0'), +('5', '34', '12', '4835', '10675', '0'), +('5', '34', '12', '20655', '8418', '0'), +('5', '34', '12', '4845', '6119', '0'), +('5', '34', '12', '11624', '4937', '0'), +('5', '34', '18', '4836', '7109', '0'), +('5', '34', '18', '4846', '5554', '0'), +('5', '34', '18', '3145', '5478', '0'), +('5', '34', '18', '4346', '4645', '0'), +('5', '34', '19', '4837', '7586', '0'), +('5', '34', '19', '4847', '6563', '0'), +('5', '34', '19', '68239', '5580', '0'), +('5', '34', '19', '3146', '3809', '0'), +('5', '34', '13', '27707', '24174', '0'), +('5', '34', '13', '5401', '22342', '0'), +('5', '34', '13', '5622', '19283', '0'), +('5', '34', '13', '11609', '18927', '0'), +('5', '34', '14', '9402', '33462', '0'), +('5', '34', '14', '11678', '32840', '0'), +('5', '34', '14', '11632', '30087', '0'), +('5', '34', '14', '11551', '23853', '0'), +('5', '34', '11', '45137', '12853', '0'), +('5', '34', '11', '8408', '8184', '0'), +('5', '34', '11', '8325', '8047', '0'), +('5', '34', '11', '8811', '6290', '0'), +('5', '35', '22', '8567', '0', '0'), +('5', '35', '22', '10323', '0', '0'), +('5', '35', '22', '8504', '0', '0'), +('5', '35', '22', '9246', '0', '0'), +('5', '35', '1', '14701', '4854', '0'), +('5', '35', '1', '14702', '3550', '0'), +('5', '35', '1', '10082', '3173', '0'), +('5', '35', '1', '10165', '1940', '0'), +('5', '35', '2', '4841', '10076', '0'), +('5', '35', '2', '4301', '7726', '0'), +('5', '35', '2', '4831', '6674', '0'), +('5', '35', '2', '4620', '5418', '0'), +('5', '35', '3', '4322', '5343', '0'), +('5', '35', '3', '1544', '5105', '0'), +('5', '35', '3', '71529', '4170', '0'), +('5', '35', '3', '4505', '2398', '0'), +('5', '35', '5', '27705', '7373', '0'), +('5', '35', '5', '14703', '7150', '0'), +('5', '35', '5', '14700', '4806', '0'), +('5', '35', '5', '10055', '4760', '0'), +('5', '35', '8', '11621', '26579', '0'), +('5', '35', '8', '11551', '8753', '0'), +('5', '35', '8', '1409', '7747', '0'), +('5', '35', '8', '11603', '7162', '0'), +('5', '35', '6', '1557', '8270', '0'), +('5', '35', '6', '11699', '6966', '0'), +('5', '35', '6', '4302', '4329', '0'), +('5', '35', '6', '25062', '3672', '0'), +('5', '35', '17', '4832', '13859', '0'), +('5', '35', '17', '4842', '11214', '0'), +('5', '35', '17', '4309', '8225', '0'), +('5', '35', '17', '11623', '7848', '0'), +('5', '35', '7', '4833', '6478', '0'), +('5', '35', '7', '4843', '5389', '0'), +('5', '35', '7', '4343', '5339', '0'), +('5', '35', '7', '2458', '3819', '0'), +('5', '35', '9', '4834', '4408', '0'), +('5', '35', '9', '12189', '3471', '0'), +('5', '35', '9', '4844', '3431', '0'), +('5', '35', '9', '4344', '3046', '0'), +('5', '35', '15', '10366', '8054', '0'), +('5', '35', '15', '10151', '7200', '0'), +('5', '35', '15', '14679', '7010', '0'), +('5', '35', '15', '14678', '5708', '0'), +('5', '35', '20', '2704', '23985', '0'), +('5', '35', '20', '11601', '19203', '0'), +('5', '35', '20', '2918', '11427', '0'), +('5', '35', '20', '1365', '10500', '0'), +('5', '35', '12', '4835', '10702', '0'), +('5', '35', '12', '20655', '8436', '0'), +('5', '35', '12', '4845', '6137', '0'), +('5', '35', '12', '11624', '4975', '0'), +('5', '35', '18', '4836', '7136', '0'), +('5', '35', '18', '4846', '5554', '0'), +('5', '35', '18', '3145', '5527', '0'), +('5', '35', '18', '4346', '4645', '0'), +('5', '35', '19', '4837', '7604', '0'), +('5', '35', '19', '4847', '6590', '0'), +('5', '35', '19', '68239', '5591', '0'), +('5', '35', '19', '3146', '3826', '0'), +('5', '35', '13', '27707', '24414', '0'), +('5', '35', '13', '5401', '22483', '0'), +('5', '35', '13', '5622', '19482', '0'), +('5', '35', '13', '11609', '19125', '0'), +('5', '35', '14', '9402', '33490', '0'), +('5', '35', '14', '11678', '32840', '0'), +('5', '35', '14', '11632', '30169', '0'), +('5', '35', '14', '11551', '23853', '0'), +('5', '35', '11', '45137', '13431', '0'), +('5', '35', '11', '8408', '8259', '0'), +('5', '35', '11', '8325', '8132', '0'), +('5', '35', '11', '8811', '6356', '0'), +('5', '36', '22', '8567', '0', '0'), +('5', '36', '22', '10323', '0', '0'), +('5', '36', '22', '8504', '0', '0'), +('5', '36', '22', '9246', '0', '0'), +('5', '36', '1', '14701', '4854', '0'), +('5', '36', '1', '14702', '3550', '0'), +('5', '36', '1', '10082', '3195', '0'), +('5', '36', '1', '10165', '1940', '0'), +('5', '36', '2', '4841', '10108', '0'), +('5', '36', '2', '4301', '7726', '0'), +('5', '36', '2', '4831', '6692', '0'), +('5', '36', '2', '4620', '5457', '0'), +('5', '36', '3', '4322', '5343', '0'), +('5', '36', '3', '1544', '5123', '0'), +('5', '36', '3', '71529', '4192', '0'), +('5', '36', '3', '4505', '2423', '0'), +('5', '36', '5', '27705', '7424', '0'), +('5', '36', '5', '14703', '7150', '0'), +('5', '36', '5', '14700', '4806', '0'), +('5', '36', '5', '10055', '4760', '0'), +('5', '36', '8', '11621', '26579', '0'), +('5', '36', '8', '11551', '8753', '0'), +('5', '36', '8', '1409', '7747', '0'), +('5', '36', '8', '11603', '7194', '0'), +('5', '36', '6', '1557', '8270', '0'), +('5', '36', '6', '11699', '7021', '0'), +('5', '36', '6', '4302', '4362', '0'), +('5', '36', '6', '25062', '3672', '0'), +('5', '36', '17', '4832', '13940', '0'), +('5', '36', '17', '4842', '11263', '0'), +('5', '36', '17', '4309', '8225', '0'), +('5', '36', '17', '3141', '7863', '0'), +('5', '36', '7', '4833', '6478', '0'), +('5', '36', '7', '4343', '5394', '0'), +('5', '36', '7', '4843', '5389', '0'), +('5', '36', '7', '2458', '3834', '0'), +('5', '36', '9', '4834', '4408', '0'), +('5', '36', '9', '12189', '3471', '0'), +('5', '36', '9', '4844', '3442', '0'), +('5', '36', '9', '4344', '3046', '0'), +('5', '36', '15', '10366', '8054', '0'), +('5', '36', '15', '10151', '7200', '0'), +('5', '36', '15', '14679', '7010', '0'), +('5', '36', '15', '14678', '5708', '0'), +('5', '36', '20', '2704', '24007', '0'), +('5', '36', '20', '11601', '19257', '0'), +('5', '36', '20', '2918', '11445', '0'), +('5', '36', '20', '1365', '10500', '0'), +('5', '36', '12', '4835', '10729', '0'), +('5', '36', '12', '20655', '8454', '0'), +('5', '36', '12', '4845', '6155', '0'), +('5', '36', '12', '11624', '5013', '0'), +('5', '36', '18', '4836', '7163', '0'), +('5', '36', '18', '3145', '5576', '0'), +('5', '36', '18', '4846', '5554', '0'), +('5', '36', '18', '4346', '4645', '0'), +('5', '36', '19', '4837', '7623', '0'), +('5', '36', '19', '4847', '6617', '0'), +('5', '36', '19', '68239', '5602', '0'), +('5', '36', '19', '3146', '3842', '0'), +('5', '36', '13', '27707', '24653', '0'), +('5', '36', '13', '5401', '22653', '0'), +('5', '36', '13', '5622', '19680', '0'), +('5', '36', '13', '11609', '19295', '0'), +('5', '36', '14', '9402', '33517', '0'), +('5', '36', '14', '11678', '32840', '0'), +('5', '36', '14', '11632', '30250', '0'), +('5', '36', '14', '11551', '23853', '0'), +('5', '36', '11', '45137', '13898', '0'), +('5', '36', '11', '8408', '8335', '0'), +('5', '36', '11', '8325', '8207', '0'), +('5', '36', '11', '8811', '6422', '0'), +('5', '37', '22', '8567', '0', '0'), +('5', '37', '22', '10323', '0', '0'), +('5', '37', '22', '8504', '0', '0'), +('5', '37', '22', '9246', '0', '0'), +('5', '37', '1', '14701', '4854', '0'), +('5', '37', '1', '14702', '3550', '0'), +('5', '37', '1', '10082', '3217', '0'), +('5', '37', '1', '10165', '1940', '0'), +('5', '37', '2', '4841', '10141', '0'), +('5', '37', '2', '4301', '7726', '0'), +('5', '37', '2', '4831', '6710', '0'), +('5', '37', '2', '4620', '5495', '0'), +('5', '37', '3', '4322', '5343', '0'), +('5', '37', '3', '1544', '5141', '0'), +('5', '37', '3', '71529', '4213', '0'), +('5', '37', '3', '4505', '2449', '0'), +('5', '37', '5', '27705', '7474', '0'), +('5', '37', '5', '14703', '7150', '0'), +('5', '37', '5', '14700', '4806', '0'), +('5', '37', '5', '10055', '4760', '0'), +('5', '37', '8', '11621', '26579', '0'), +('5', '37', '8', '11551', '8753', '0'), +('5', '37', '8', '1409', '7747', '0'), +('5', '37', '8', '11603', '7227', '0'), +('5', '37', '6', '1557', '8270', '0'), +('5', '37', '6', '11699', '7075', '0'), +('5', '37', '6', '4302', '4395', '0'), +('5', '37', '6', '25062', '3672', '0'), +('5', '37', '17', '4832', '14022', '0'), +('5', '37', '17', '4842', '11312', '0'), +('5', '37', '17', '4309', '8225', '0'), +('5', '37', '17', '3141', '7918', '0'), +('5', '37', '7', '4833', '6478', '0'), +('5', '37', '7', '4343', '5448', '0'), +('5', '37', '7', '4843', '5389', '0'), +('5', '37', '7', '2458', '3848', '0'), +('5', '37', '9', '4834', '4408', '0'), +('5', '37', '9', '12189', '3471', '0'), +('5', '37', '9', '4844', '3452', '0'), +('5', '37', '9', '4344', '3046', '0'), +('5', '37', '15', '10366', '8054', '0'), +('5', '37', '15', '10151', '7200', '0'), +('5', '37', '15', '14679', '7010', '0'), +('5', '37', '15', '14678', '5708', '0'), +('5', '37', '20', '2704', '24029', '0'), +('5', '37', '20', '11601', '19311', '0'), +('5', '37', '20', '2918', '11463', '0'), +('5', '37', '20', '1365', '10500', '0'), +('5', '37', '12', '4835', '10756', '0'), +('5', '37', '12', '20655', '8473', '0'), +('5', '37', '12', '4845', '6173', '0'), +('5', '37', '12', '11624', '5051', '0'), +('5', '37', '18', '4836', '7191', '0'), +('5', '37', '18', '3145', '5625', '0'), +('5', '37', '18', '4846', '5554', '0'), +('5', '37', '18', '4346', '4645', '0'), +('5', '37', '19', '4837', '7641', '0'), +('5', '37', '19', '4847', '6644', '0'), +('5', '37', '19', '68239', '5612', '0'), +('5', '37', '19', '3146', '3858', '0'), +('5', '37', '13', '27707', '24921', '0'), +('5', '37', '13', '5401', '22795', '0'), +('5', '37', '13', '45120', '20081', '0'), +('5', '37', '13', '5622', '19850', '0'), +('5', '37', '14', '9402', '33544', '0'), +('5', '37', '14', '11678', '32840', '0'), +('5', '37', '14', '11632', '30332', '0'), +('5', '37', '14', '11551', '23853', '0'), +('5', '37', '11', '45137', '14405', '0'), +('5', '37', '11', '8408', '8410', '0'), +('5', '37', '11', '8325', '8292', '0'), +('5', '37', '11', '8811', '6479', '0'), +('5', '38', '22', '8567', '0', '0'), +('5', '38', '22', '10323', '0', '0'), +('5', '38', '22', '8504', '0', '0'), +('5', '38', '22', '9246', '0', '0'), +('5', '38', '1', '14701', '4854', '0'), +('5', '38', '1', '14702', '3550', '0'), +('5', '38', '1', '10082', '3238', '0'), +('5', '38', '1', '10165', '1940', '0'), +('5', '38', '2', '4841', '10173', '0'), +('5', '38', '2', '4301', '7726', '0'), +('5', '38', '2', '4831', '6729', '0'), +('5', '38', '2', '4620', '5533', '0'), +('5', '38', '3', '4322', '5343', '0'), +('5', '38', '3', '1544', '5159', '0'), +('5', '38', '3', '71529', '4235', '0'), +('5', '38', '3', '4505', '2474', '0'), +('5', '38', '5', '27705', '7525', '0'), +('5', '38', '5', '14703', '7150', '0'), +('5', '38', '5', '14700', '4806', '0'), +('5', '38', '5', '10055', '4760', '0'), +('5', '38', '8', '11621', '26579', '0'), +('5', '38', '8', '11551', '8753', '0'), +('5', '38', '8', '1409', '7747', '0'), +('5', '38', '8', '11603', '7259', '0'), +('5', '38', '6', '1557', '8270', '0'), +('5', '38', '6', '11699', '7129', '0'), +('5', '38', '6', '4302', '4427', '0'), +('5', '38', '6', '25062', '3672', '0'), +('5', '38', '17', '4832', '14103', '0'), +('5', '38', '17', '4842', '11361', '0'), +('5', '38', '17', '4309', '8225', '0'), +('5', '38', '17', '3141', '7972', '0'), +('5', '38', '7', '4833', '6478', '0'), +('5', '38', '7', '4343', '5502', '0'), +('5', '38', '7', '4843', '5389', '0'), +('5', '38', '7', '2458', '3863', '0'), +('5', '38', '9', '4834', '4408', '0'), +('5', '38', '9', '12189', '3471', '0'), +('5', '38', '9', '4844', '3463', '0'), +('5', '38', '9', '4344', '3046', '0'), +('5', '38', '15', '10366', '8054', '0'), +('5', '38', '15', '10151', '7200', '0'), +('5', '38', '15', '14679', '7010', '0'), +('5', '38', '15', '14678', '5708', '0'), +('5', '38', '20', '2704', '24050', '0'), +('5', '38', '20', '11601', '19366', '0'), +('5', '38', '20', '2918', '11481', '0'), +('5', '38', '20', '1365', '10500', '0'), +('5', '38', '12', '4835', '10783', '0'), +('5', '38', '12', '20655', '8491', '0'), +('5', '38', '12', '4845', '6191', '0'), +('5', '38', '12', '11624', '5089', '0'), +('5', '38', '18', '4836', '7218', '0'), +('5', '38', '18', '3145', '5674', '0'), +('5', '38', '18', '4846', '5554', '0'), +('5', '38', '18', '4346', '4645', '0'), +('5', '38', '19', '4837', '7659', '0'), +('5', '38', '19', '4847', '6672', '0'), +('5', '38', '19', '68239', '5623', '0'), +('5', '38', '19', '3146', '3875', '0'), +('5', '38', '13', '27707', '25160', '0'), +('5', '38', '13', '5401', '22937', '0'), +('5', '38', '13', '45120', '20899', '0'), +('5', '38', '13', '5622', '20048', '0'), +('5', '38', '14', '9402', '33571', '0'), +('5', '38', '14', '11678', '32840', '0'), +('5', '38', '14', '11632', '30413', '0'), +('5', '38', '14', '11551', '23853', '0'), +('5', '38', '11', '45137', '14878', '0'), +('5', '38', '11', '8408', '8486', '0'), +('5', '38', '11', '8325', '8368', '0'), +('5', '38', '11', '8811', '6545', '0'), +('5', '39', '22', '8567', '0', '0'), +('5', '39', '22', '10323', '0', '0'), +('5', '39', '22', '8504', '0', '0'), +('5', '39', '22', '9246', '0', '0'), +('5', '39', '1', '14701', '4854', '0'), +('5', '39', '1', '14702', '3550', '0'), +('5', '39', '1', '10082', '3260', '0'), +('5', '39', '1', '10165', '1940', '0'), +('5', '39', '2', '4841', '10206', '0'), +('5', '39', '2', '4301', '7726', '0'), +('5', '39', '2', '4831', '6747', '0'), +('5', '39', '2', '4620', '5571', '0'), +('5', '39', '3', '4322', '5343', '0'), +('5', '39', '3', '1544', '5177', '0'), +('5', '39', '3', '71529', '4257', '0'), +('5', '39', '3', '4505', '2499', '0'), +('5', '39', '5', '27705', '7576', '0'), +('5', '39', '5', '14703', '7150', '0'), +('5', '39', '5', '14700', '4806', '0'), +('5', '39', '5', '10055', '4760', '0'), +('5', '39', '8', '11621', '26579', '0'), +('5', '39', '8', '11551', '8753', '0'), +('5', '39', '8', '1409', '7747', '0'), +('5', '39', '8', '11603', '7292', '0'), +('5', '39', '6', '1557', '8270', '0'), +('5', '39', '6', '11699', '7184', '0'), +('5', '39', '6', '4302', '4460', '0'), +('5', '39', '6', '25062', '3672', '0'), +('5', '39', '17', '4832', '14185', '0'), +('5', '39', '17', '4842', '11410', '0'), +('5', '39', '17', '4309', '8225', '0'), +('5', '39', '17', '3141', '8027', '0'), +('5', '39', '7', '4833', '6478', '0'), +('5', '39', '7', '4343', '5557', '0'), +('5', '39', '7', '4843', '5389', '0'), +('5', '39', '7', '2458', '3877', '0'), +('5', '39', '9', '4834', '4408', '0'), +('5', '39', '9', '4844', '3474', '0'), +('5', '39', '9', '12189', '3471', '0'), +('5', '39', '9', '4344', '3046', '0'), +('5', '39', '15', '10366', '8054', '0'), +('5', '39', '15', '10151', '7200', '0'), +('5', '39', '15', '14679', '7010', '0'), +('5', '39', '15', '14678', '5708', '0'), +('5', '39', '20', '2704', '24072', '0'), +('5', '39', '20', '11601', '19420', '0'), +('5', '39', '20', '2918', '11499', '0'), +('5', '39', '20', '1365', '10500', '0'), +('5', '39', '12', '4835', '10810', '0'), +('5', '39', '12', '20655', '8509', '0'), +('5', '39', '12', '4845', '6209', '0'), +('5', '39', '12', '11624', '5127', '0'), +('5', '39', '18', '4836', '7245', '0'), +('5', '39', '18', '3145', '5723', '0'), +('5', '39', '18', '4846', '5554', '0'), +('5', '39', '18', '4346', '4645', '0'), +('5', '39', '19', '4837', '7677', '0'), +('5', '39', '19', '4847', '6699', '0'), +('5', '39', '19', '68239', '5634', '0'), +('5', '39', '19', '3146', '3891', '0'), +('5', '39', '13', '27707', '25400', '0'), +('5', '39', '13', '5401', '23078', '0'), +('5', '39', '13', '45120', '21549', '0'), +('5', '39', '13', '5622', '20247', '0'), +('5', '39', '14', '9402', '33598', '0'), +('5', '39', '14', '11678', '32840', '0'), +('5', '39', '14', '11632', '30495', '0'), +('5', '39', '14', '11551', '23853', '0'), +('5', '39', '11', '45137', '15485', '0'), +('5', '39', '11', '8408', '8561', '0'), +('5', '39', '11', '8325', '8453', '0'), +('5', '39', '11', '8811', '6602', '0'), +('5', '40', '22', '8567', '0', '0'), +('5', '40', '22', '10323', '0', '0'), +('5', '40', '22', '8504', '0', '0'), +('5', '40', '22', '9246', '0', '0'), +('5', '40', '1', '14701', '4854', '0'), +('5', '40', '1', '14702', '3550', '0'), +('5', '40', '1', '10082', '3282', '0'), +('5', '40', '1', '10165', '1940', '0'), +('5', '40', '2', '4841', '10239', '0'), +('5', '40', '2', '4301', '7726', '0'), +('5', '40', '2', '4831', '6765', '0'), +('5', '40', '2', '4620', '5609', '0'), +('5', '40', '3', '4322', '5343', '0'), +('5', '40', '3', '1544', '5196', '0'), +('5', '40', '3', '71529', '4279', '0'), +('5', '40', '3', '4505', '2525', '0'), +('5', '40', '5', '27705', '7627', '0'), +('5', '40', '5', '14703', '7150', '0'), +('5', '40', '5', '14700', '4806', '0'), +('5', '40', '5', '10055', '4760', '0'), +('5', '40', '8', '11621', '26579', '0'), +('5', '40', '8', '11551', '8753', '0'), +('5', '40', '8', '1409', '7747', '0'), +('5', '40', '8', '11603', '7325', '0'), +('5', '40', '6', '1557', '8270', '0'), +('5', '40', '6', '11699', '7238', '0'), +('5', '40', '6', '4302', '4493', '0'), +('5', '40', '6', '25062', '3672', '0'), +('5', '40', '17', '4832', '14266', '0'), +('5', '40', '17', '4842', '11459', '0'), +('5', '40', '17', '4309', '8225', '0'), +('5', '40', '17', '3141', '8081', '0'), +('5', '40', '7', '4833', '6478', '0'), +('5', '40', '7', '4343', '5611', '0'), +('5', '40', '7', '4843', '5389', '0'), +('5', '40', '7', '2458', '3892', '0'), +('5', '40', '9', '4834', '4408', '0'), +('5', '40', '9', '4844', '3485', '0'), +('5', '40', '9', '12189', '3471', '0'), +('5', '40', '9', '4311', '3057', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '40', '15', '10366', '8054', '0'), +('5', '40', '15', '10151', '7200', '0'), +('5', '40', '15', '14679', '7010', '0'), +('5', '40', '15', '14678', '5708', '0'), +('5', '40', '20', '2704', '24094', '0'), +('5', '40', '20', '11601', '19474', '0'), +('5', '40', '20', '2918', '11517', '0'), +('5', '40', '20', '1365', '10500', '0'), +('5', '40', '12', '4835', '10838', '0'), +('5', '40', '12', '20655', '8527', '0'), +('5', '40', '12', '4845', '6227', '0'), +('5', '40', '12', '11624', '5165', '0'), +('5', '40', '18', '4836', '7272', '0'), +('5', '40', '18', '3145', '5772', '0'), +('5', '40', '18', '4846', '5554', '0'), +('5', '40', '18', '4346', '4645', '0'), +('5', '40', '19', '4837', '7695', '0'), +('5', '40', '19', '4847', '6726', '0'), +('5', '40', '19', '68239', '5645', '0'), +('5', '40', '19', '3146', '3907', '0'), +('5', '40', '13', '27707', '25639', '0'), +('5', '40', '13', '5401', '23220', '0'), +('5', '40', '13', '45120', '22370', '0'), +('5', '40', '13', '5622', '20417', '0'), +('5', '40', '14', '9402', '33625', '0'), +('5', '40', '14', '11678', '32840', '0'), +('5', '40', '14', '11632', '30576', '0'), +('5', '40', '14', '11551', '23853', '0'), +('5', '40', '11', '45137', '15972', '0'), +('5', '40', '11', '8408', '8637', '0'), +('5', '40', '11', '8325', '8528', '0'), +('5', '40', '11', '8811', '6668', '0'), +('5', '41', '22', '8567', '0', '0'), +('5', '41', '22', '10323', '0', '0'), +('5', '41', '22', '8504', '0', '0'), +('5', '41', '22', '9246', '0', '0'), +('5', '41', '1', '14701', '4854', '0'), +('5', '41', '1', '14702', '3550', '0'), +('5', '41', '1', '10082', '3304', '0'), +('5', '41', '1', '10165', '1940', '0'), +('5', '41', '2', '4841', '10271', '0'), +('5', '41', '2', '4301', '7726', '0'), +('5', '41', '2', '4831', '6783', '0'), +('5', '41', '2', '4620', '5647', '0'), +('5', '41', '3', '4322', '5343', '0'), +('5', '41', '3', '1544', '5214', '0'), +('5', '41', '3', '71529', '4300', '0'), +('5', '41', '3', '4505', '2550', '0'), +('5', '41', '5', '27705', '7677', '0'), +('5', '41', '5', '14703', '7150', '0'), +('5', '41', '5', '14700', '4806', '0'), +('5', '41', '5', '10055', '4760', '0'), +('5', '41', '8', '11621', '26579', '0'), +('5', '41', '8', '11551', '8753', '0'), +('5', '41', '8', '1409', '7747', '0'), +('5', '41', '8', '11603', '7357', '0'), +('5', '41', '6', '1557', '8270', '0'), +('5', '41', '6', '11699', '7292', '0'), +('5', '41', '6', '4302', '4525', '0'), +('5', '41', '6', '25062', '3672', '0'), +('5', '41', '17', '4832', '14348', '0'), +('5', '41', '17', '4842', '11508', '0'), +('5', '41', '17', '4309', '8225', '0'), +('5', '41', '17', '3141', '8135', '0'), +('5', '41', '7', '4833', '6478', '0'), +('5', '41', '7', '4343', '5666', '0'), +('5', '41', '7', '4843', '5389', '0'), +('5', '41', '7', '2458', '3906', '0'), +('5', '41', '9', '4834', '4408', '0'), +('5', '41', '9', '4844', '3496', '0'), +('5', '41', '9', '12189', '3471', '0'), +('5', '41', '9', '4311', '3095', '0'), +('5', '41', '15', '10366', '8054', '0'), +('5', '41', '15', '10151', '7200', '0'), +('5', '41', '15', '14679', '7010', '0'), +('5', '41', '15', '14678', '5708', '0'), +('5', '41', '20', '2704', '24116', '0'), +('5', '41', '20', '11601', '19529', '0'), +('5', '41', '20', '2918', '11535', '0'), +('5', '41', '20', '1365', '10500', '0'), +('5', '41', '12', '4835', '10865', '0'), +('5', '41', '12', '20655', '8545', '0'), +('5', '41', '12', '4845', '6245', '0'), +('5', '41', '12', '11624', '5203', '0'), +('5', '41', '18', '4836', '7299', '0'), +('5', '41', '18', '3145', '5821', '0'), +('5', '41', '18', '4846', '5554', '0'), +('5', '41', '18', '4346', '4645', '0'), +('5', '41', '19', '4837', '7713', '0'), +('5', '41', '19', '4847', '6753', '0'), +('5', '41', '19', '68239', '5656', '0'), +('5', '41', '19', '3146', '3924', '0'), +('5', '41', '13', '27707', '25907', '0'), +('5', '41', '13', '5401', '23362', '0'), +('5', '41', '13', '45120', '23022', '0'), +('5', '41', '13', '5622', '20615', '0'), +('5', '41', '14', '9402', '33653', '0'), +('5', '41', '14', '11678', '32840', '0'), +('5', '41', '14', '11632', '30658', '0'), +('5', '41', '14', '11551', '23853', '0'), +('5', '41', '11', '45137', '16555', '0'), +('5', '41', '11', '8408', '8713', '0'), +('5', '41', '11', '8325', '8613', '0'), +('5', '41', '11', '8811', '6734', '0'), +('5', '42', '22', '8567', '0', '0'), +('5', '42', '22', '10323', '0', '0'), +('5', '42', '22', '8504', '0', '0'), +('5', '42', '22', '9246', '0', '0'), +('5', '42', '1', '14701', '4854', '0'), +('5', '42', '1', '14702', '3550', '0'), +('5', '42', '1', '10082', '3325', '0'), +('5', '42', '1', '10165', '1940', '0'), +('5', '42', '2', '4841', '10304', '0'), +('5', '42', '2', '4301', '7726', '0'), +('5', '42', '2', '4831', '6801', '0'), +('5', '42', '2', '4620', '5685', '0'), +('5', '42', '3', '4322', '5343', '0'), +('5', '42', '3', '1544', '5232', '0'), +('5', '42', '3', '71529', '4322', '0'), +('5', '42', '3', '4505', '2575', '0'), +('5', '42', '5', '27705', '7728', '0'), +('5', '42', '5', '14703', '7150', '0'), +('5', '42', '5', '14700', '4806', '0'), +('5', '42', '5', '10055', '4760', '0'), +('5', '42', '8', '11621', '26579', '0'), +('5', '42', '8', '11551', '8753', '0'), +('5', '42', '8', '1409', '7747', '0'), +('5', '42', '8', '11603', '7390', '0'), +('5', '42', '6', '1557', '8270', '0'), +('5', '42', '6', '11699', '7347', '0'), +('5', '42', '6', '4302', '4558', '0'), +('5', '42', '6', '25062', '3672', '0'), +('5', '42', '17', '4832', '14430', '0'), +('5', '42', '17', '4842', '11557', '0'), +('5', '42', '17', '4309', '8225', '0'), +('5', '42', '17', '3141', '8190', '0'), +('5', '42', '7', '4833', '6478', '0'), +('5', '42', '7', '4343', '5720', '0'), +('5', '42', '7', '4843', '5389', '0'), +('5', '42', '7', '2458', '3921', '0'), +('5', '42', '9', '4834', '4408', '0'), +('5', '42', '9', '4844', '3507', '0'), +('5', '42', '9', '12189', '3471', '0'), +('5', '42', '9', '4311', '3133', '0'), +('5', '42', '15', '10366', '8054', '0'), +('5', '42', '15', '10151', '7200', '0'), +('5', '42', '15', '14679', '7010', '0'), +('5', '42', '15', '14678', '5708', '0'), +('5', '42', '20', '2704', '24137', '0'), +('5', '42', '20', '11601', '19583', '0'), +('5', '42', '20', '2918', '11554', '0'), +('5', '42', '20', '1365', '10500', '0'), +('5', '42', '12', '4835', '10892', '0'), +('5', '42', '12', '20655', '8563', '0'), +('5', '42', '12', '4845', '6264', '0'), +('5', '42', '12', '11624', '5241', '0'), +('5', '42', '18', '4836', '7327', '0'), +('5', '42', '18', '3145', '5870', '0'), +('5', '42', '18', '4846', '5554', '0'), +('5', '42', '18', '4346', '4645', '0'), +('5', '42', '19', '4837', '7731', '0'), +('5', '42', '19', '4847', '6780', '0'), +('5', '42', '19', '68239', '5667', '0'), +('5', '42', '19', '3146', '3940', '0'), +('5', '42', '13', '27707', '26146', '0'), +('5', '42', '13', '45120', '23873', '0'), +('5', '42', '13', '5401', '23503', '0'), +('5', '42', '13', '5622', '20813', '0'), +('5', '42', '14', '9402', '33680', '0'), +('5', '42', '14', '11678', '32840', '0'), +('5', '42', '14', '11632', '30739', '0'), +('5', '42', '14', '11551', '23853', '0'), +('5', '42', '11', '45137', '17095', '0'), +('5', '42', '11', '8408', '8788', '0'), +('5', '42', '11', '8325', '8689', '0'), +('5', '42', '11', '8811', '6791', '0'), +('5', '43', '22', '8567', '0', '0'), +('5', '43', '22', '10323', '0', '0'), +('5', '43', '22', '8504', '0', '0'), +('5', '43', '22', '9246', '0', '0'), +('5', '43', '1', '14701', '4854', '0'), +('5', '43', '1', '14702', '3550', '0'), +('5', '43', '1', '10082', '3347', '0'), +('5', '43', '1', '10165', '1940', '0'), +('5', '43', '2', '4841', '10336', '0'), +('5', '43', '2', '4301', '7726', '0'), +('5', '43', '2', '4831', '6819', '0'), +('5', '43', '2', '4620', '5723', '0'), +('5', '43', '3', '4322', '5343', '0'), +('5', '43', '3', '1544', '5250', '0'), +('5', '43', '3', '71529', '4344', '0'), +('5', '43', '3', '4505', '2601', '0'), +('5', '43', '5', '27705', '7779', '0'), +('5', '43', '5', '14703', '7150', '0'), +('5', '43', '5', '14700', '4806', '0'), +('5', '43', '5', '10055', '4760', '0'), +('5', '43', '8', '11621', '26579', '0'), +('5', '43', '8', '11551', '8753', '0'), +('5', '43', '8', '1409', '7747', '0'), +('5', '43', '8', '11603', '7422', '0'), +('5', '43', '6', '1557', '8270', '0'), +('5', '43', '6', '11699', '7401', '0'), +('5', '43', '6', '4302', '4590', '0'), +('5', '43', '6', '25062', '3672', '0'), +('5', '43', '17', '4832', '14511', '0'), +('5', '43', '17', '4842', '11606', '0'), +('5', '43', '17', '3141', '8244', '0'), +('5', '43', '17', '4309', '8225', '0'), +('5', '43', '7', '4833', '6478', '0'), +('5', '43', '7', '4343', '5774', '0'), +('5', '43', '7', '4843', '5389', '0'), +('5', '43', '7', '2458', '3935', '0'), +('5', '43', '9', '4834', '4408', '0'), +('5', '43', '9', '4844', '3518', '0'), +('5', '43', '9', '12189', '3471', '0'), +('5', '43', '9', '4311', '3171', '0'), +('5', '43', '15', '10366', '8054', '0'), +('5', '43', '15', '10151', '7200', '0'), +('5', '43', '15', '14679', '7010', '0'), +('5', '43', '15', '14678', '5708', '0'), +('5', '43', '20', '2704', '24159', '0'), +('5', '43', '20', '11601', '19637', '0'), +('5', '43', '20', '2918', '11572', '0'), +('5', '43', '20', '1365', '10500', '0'), +('5', '43', '12', '4835', '10919', '0'), +('5', '43', '12', '20655', '8581', '0'), +('5', '43', '12', '4845', '6282', '0'), +('5', '43', '12', '11624', '5279', '0'), +('5', '43', '18', '4836', '7354', '0'), +('5', '43', '18', '3145', '5919', '0'), +('5', '43', '18', '4846', '5554', '0'), +('5', '43', '18', '4346', '4645', '0'), +('5', '43', '19', '4837', '7749', '0'), +('5', '43', '19', '4847', '6808', '0'), +('5', '43', '19', '68239', '5678', '0'), +('5', '43', '19', '3146', '3956', '0'), +('5', '43', '13', '27707', '26385', '0'), +('5', '43', '13', '45120', '24555', '0'), +('5', '43', '13', '5401', '23645', '0'), +('5', '43', '13', '5622', '20983', '0'), +('5', '43', '14', '9402', '33707', '0'), +('5', '43', '14', '11678', '32840', '0'), +('5', '43', '14', '11632', '30821', '0'), +('5', '43', '14', '11551', '23853', '0'), +('5', '43', '11', '45137', '17599', '0'), +('5', '43', '11', '8408', '8864', '0'), +('5', '43', '11', '8325', '8774', '0'), +('5', '43', '11', '8811', '6857', '0'), +('5', '44', '22', '8567', '0', '0'), +('5', '44', '22', '10323', '0', '0'), +('5', '44', '22', '8504', '0', '0'), +('5', '44', '22', '9246', '0', '0'), +('5', '44', '1', '14701', '4854', '0'), +('5', '44', '1', '14702', '3550', '0'), +('5', '44', '1', '10082', '3369', '0'), +('5', '44', '1', '10165', '1940', '0'), +('5', '44', '2', '4841', '10369', '0'), +('5', '44', '2', '4301', '7726', '0'), +('5', '44', '2', '4831', '6837', '0'), +('5', '44', '2', '4620', '5765', '0'), +('5', '44', '3', '4322', '5343', '0'), +('5', '44', '3', '1544', '5268', '0'), +('5', '44', '3', '71529', '4368', '0'), +('5', '44', '3', '4505', '2626', '0'), +('5', '44', '5', '27705', '7829', '0'), +('5', '44', '5', '14703', '7150', '0'), +('5', '44', '5', '14700', '4806', '0'), +('5', '44', '5', '10055', '4760', '0'), +('5', '44', '8', '11621', '26579', '0'), +('5', '44', '8', '11551', '8753', '0'), +('5', '44', '8', '1409', '7747', '0'), +('5', '44', '8', '11603', '7455', '0'), +('5', '44', '6', '1557', '8270', '0'), +('5', '44', '6', '11699', '7455', '0'), +('5', '44', '6', '4302', '4627', '0'), +('5', '44', '6', '25062', '3672', '0'), +('5', '44', '17', '4832', '14602', '0'), +('5', '44', '17', '4842', '11660', '0'), +('5', '44', '17', '3141', '8304', '0'), +('5', '44', '17', '4309', '8225', '0'), +('5', '44', '7', '4833', '6478', '0'), +('5', '44', '7', '4343', '5835', '0'), +('5', '44', '7', '4843', '5389', '0'), +('5', '44', '7', '2458', '3950', '0'), +('5', '44', '9', '4834', '4408', '0'), +('5', '44', '9', '4844', '3529', '0'), +('5', '44', '9', '12189', '3471', '0'), +('5', '44', '9', '4311', '3213', '0'), +('5', '44', '15', '10366', '8054', '0'), +('5', '44', '15', '10151', '7200', '0'), +('5', '44', '15', '14679', '7010', '0'), +('5', '44', '15', '14678', '5708', '0'), +('5', '44', '20', '2704', '24181', '0'), +('5', '44', '20', '11601', '19698', '0'), +('5', '44', '20', '2918', '11590', '0'), +('5', '44', '20', '1365', '10500', '0'), +('5', '44', '12', '4835', '10949', '0'), +('5', '44', '12', '20655', '8601', '0'), +('5', '44', '12', '4845', '6300', '0'), +('5', '44', '12', '11624', '5321', '0'), +('5', '44', '18', '4836', '7384', '0'), +('5', '44', '18', '3145', '5973', '0'), +('5', '44', '18', '4846', '5554', '0'), +('5', '44', '18', '4346', '4645', '0'), +('5', '44', '19', '4837', '7767', '0'), +('5', '44', '19', '4847', '6838', '0'), +('5', '44', '19', '68239', '5689', '0'), +('5', '44', '19', '3146', '3974', '0'), +('5', '44', '13', '27707', '26625', '0'), +('5', '44', '13', '45120', '25410', '0'), +('5', '44', '13', '5401', '23815', '0'), +('5', '44', '13', '5622', '21182', '0'), +('5', '44', '14', '9402', '33737', '0'), +('5', '44', '14', '11678', '32840', '0'), +('5', '44', '14', '11632', '30912', '0'), +('5', '44', '14', '11551', '23853', '0'), +('5', '44', '11', '45137', '18251', '0'), +('5', '44', '11', '8408', '8939', '0'), +('5', '44', '11', '8325', '8849', '0'), +('5', '44', '11', '8811', '6923', '0'), +('5', '45', '22', '8567', '0', '0'), +('5', '45', '22', '10323', '0', '0'), +('5', '45', '22', '8504', '0', '0'), +('5', '45', '22', '9246', '0', '0'), +('5', '45', '1', '14701', '4854', '0'), +('5', '45', '1', '14702', '3550', '0'), +('5', '45', '1', '10082', '3390', '0'), +('5', '45', '1', '10165', '1940', '0'), +('5', '45', '2', '4841', '10402', '0'), +('5', '45', '2', '4301', '7726', '0'), +('5', '45', '2', '4831', '6855', '0'), +('5', '45', '2', '4620', '5803', '0'), +('5', '45', '3', '4322', '5343', '0'), +('5', '45', '3', '1544', '5286', '0'), +('5', '45', '3', '71529', '4390', '0'), +('5', '45', '3', '4505', '2652', '0'), +('5', '45', '5', '27705', '7880', '0'), +('5', '45', '5', '14703', '7150', '0'), +('5', '45', '5', '14700', '4806', '0'), +('5', '45', '5', '10055', '4760', '0'), +('5', '45', '8', '11621', '26579', '0'), +('5', '45', '8', '11551', '8753', '0'), +('5', '45', '8', '1409', '7747', '0'), +('5', '45', '8', '11603', '7488', '0'), +('5', '45', '6', '1557', '8270', '0'), +('5', '45', '6', '11699', '7510', '0'), +('5', '45', '6', '4302', '4659', '0'), +('5', '45', '6', '25062', '3672', '0'), +('5', '45', '17', '4832', '14683', '0'), +('5', '45', '17', '4842', '11709', '0'), +('5', '45', '17', '3141', '8359', '0'), +('5', '45', '17', '4309', '8225', '0'), +('5', '45', '7', '4833', '6478', '0'), +('5', '45', '7', '4343', '5889', '0'), +('5', '45', '7', '4843', '5389', '0'), +('5', '45', '7', '2458', '3964', '0'), +('5', '45', '9', '4834', '4408', '0'), +('5', '45', '9', '4844', '3539', '0'), +('5', '45', '9', '12189', '3471', '0'), +('5', '45', '9', '4311', '3251', '0'), +('5', '45', '15', '10366', '8054', '0'), +('5', '45', '15', '10151', '7200', '0'), +('5', '45', '15', '14679', '7010', '0'), +('5', '45', '15', '14678', '5708', '0'), +('5', '45', '20', '2704', '24203', '0'), +('5', '45', '20', '11601', '19752', '0'), +('5', '45', '20', '2918', '11608', '0'), +('5', '45', '20', '1365', '10500', '0'), +('5', '45', '12', '4835', '10977', '0'), +('5', '45', '12', '20655', '8619', '0'), +('5', '45', '12', '4845', '6318', '0'), +('5', '45', '12', '11624', '5360', '0'), +('5', '45', '18', '4836', '7411', '0'), +('5', '45', '18', '3145', '6022', '0'), +('5', '45', '18', '4846', '5554', '0'), +('5', '45', '18', '4346', '4645', '0'), +('5', '45', '19', '4837', '7786', '0'), +('5', '45', '19', '4847', '6865', '0'), +('5', '45', '19', '68239', '5699', '0'), +('5', '45', '19', '3146', '3991', '0'), +('5', '45', '13', '27707', '26892', '0'), +('5', '45', '13', '45120', '26123', '0'), +('5', '45', '13', '5401', '23957', '0'), +('5', '45', '13', '5622', '21380', '0'), +('5', '45', '14', '9402', '33764', '0'), +('5', '45', '14', '11678', '32840', '0'), +('5', '45', '14', '11632', '30993', '0'), +('5', '45', '14', '11551', '23853', '0'), +('5', '45', '11', '45137', '18769', '0'), +('5', '45', '11', '8408', '9015', '0'), +('5', '45', '11', '8325', '8934', '0'), +('5', '45', '11', '8811', '6979', '0'), +('5', '46', '22', '8567', '0', '0'), +('5', '46', '22', '10323', '0', '0'), +('5', '46', '22', '8504', '0', '0'), +('5', '46', '22', '9246', '0', '0'), +('5', '46', '1', '14701', '4854', '0'), +('5', '46', '1', '14702', '3550', '0'), +('5', '46', '1', '10082', '3412', '0'), +('5', '46', '1', '10165', '1940', '0'), +('5', '46', '2', '4841', '10434', '0'), +('5', '46', '2', '4301', '7726', '0'), +('5', '46', '2', '4831', '6874', '0'), +('5', '46', '2', '4620', '5841', '0'), +('5', '46', '3', '4322', '5343', '0'), +('5', '46', '3', '1544', '5304', '0'), +('5', '46', '3', '71529', '4411', '0'), +('5', '46', '3', '4505', '2677', '0'), +('5', '46', '5', '27705', '7931', '0'), +('5', '46', '5', '14703', '7150', '0'), +('5', '46', '5', '14700', '4806', '0'), +('5', '46', '5', '10055', '4760', '0'), +('5', '46', '8', '11621', '26579', '0'), +('5', '46', '8', '11551', '8753', '0'), +('5', '46', '8', '1409', '7747', '0'), +('5', '46', '8', '11603', '7520', '0'), +('5', '46', '6', '1557', '8270', '0'), +('5', '46', '6', '11699', '7564', '0'), +('5', '46', '6', '4302', '4692', '0'), +('5', '46', '6', '25062', '3672', '0'), +('5', '46', '17', '4832', '14765', '0'), +('5', '46', '17', '4842', '11758', '0'), +('5', '46', '17', '3141', '8413', '0'), +('5', '46', '17', '4309', '8225', '0'), +('5', '46', '7', '4833', '6478', '0'), +('5', '46', '7', '4343', '5943', '0'), +('5', '46', '7', '4843', '5389', '0'), +('5', '46', '7', '2458', '3979', '0'), +('5', '46', '9', '4834', '4408', '0'), +('5', '46', '9', '4844', '3550', '0'), +('5', '46', '9', '12189', '3471', '0'), +('5', '46', '9', '4311', '3289', '0'), +('5', '46', '15', '10366', '8054', '0'), +('5', '46', '15', '10151', '7200', '0'), +('5', '46', '15', '14679', '7010', '0'), +('5', '46', '15', '14678', '5708', '0'), +('5', '46', '20', '2704', '24224', '0'), +('5', '46', '20', '11601', '19807', '0'), +('5', '46', '20', '2918', '11626', '0'), +('5', '46', '20', '1365', '10500', '0'), +('5', '46', '12', '4835', '11004', '0'), +('5', '46', '12', '20655', '8637', '0'), +('5', '46', '12', '4845', '6336', '0'), +('5', '46', '12', '11624', '5398', '0'), +('5', '46', '18', '4836', '7438', '0'), +('5', '46', '18', '3145', '6071', '0'), +('5', '46', '18', '4846', '5554', '0'), +('5', '46', '18', '4346', '4645', '0'), +('5', '46', '19', '4837', '7804', '0'), +('5', '46', '19', '4847', '6892', '0'), +('5', '46', '19', '68239', '5710', '0'), +('5', '46', '19', '3146', '4007', '0'), +('5', '46', '13', '45120', '27176', '0'), +('5', '46', '13', '27707', '27132', '0'), +('5', '46', '13', '5401', '24098', '0'), +('5', '46', '13', '5622', '21550', '0'), +('5', '46', '14', '9402', '33792', '0'), +('5', '46', '14', '11678', '32840', '0'), +('5', '46', '14', '11632', '31075', '0'), +('5', '46', '14', '11551', '23853', '0'), +('5', '46', '11', '45137', '19338', '0'), +('5', '46', '11', '8408', '9100', '0'), +('5', '46', '11', '8325', '9010', '0'), +('5', '46', '11', '8811', '7046', '0'), +('5', '47', '22', '8567', '0', '0'), +('5', '47', '22', '10323', '0', '0'), +('5', '47', '22', '8504', '0', '0'), +('5', '47', '22', '9246', '0', '0'), +('5', '47', '1', '14701', '4854', '0'), +('5', '47', '1', '14702', '3550', '0'), +('5', '47', '1', '10082', '3434', '0'), +('5', '47', '1', '10165', '1940', '0'), +('5', '47', '2', '4841', '10467', '0'), +('5', '47', '2', '4301', '7726', '0'), +('5', '47', '2', '4831', '6892', '0'), +('5', '47', '2', '4620', '5884', '0'), +('5', '47', '3', '4322', '5343', '0'), +('5', '47', '3', '1544', '5322', '0'), +('5', '47', '3', '71529', '4436', '0'), +('5', '47', '3', '4505', '2702', '0'), +('5', '47', '5', '27705', '7982', '0'), +('5', '47', '5', '14703', '7150', '0'), +('5', '47', '5', '14700', '4806', '0'), +('5', '47', '5', '10055', '4760', '0'), +('5', '47', '8', '11621', '26579', '0'), +('5', '47', '8', '11551', '8753', '0'), +('5', '47', '8', '1409', '7747', '0'), +('5', '47', '8', '11603', '7553', '0'), +('5', '47', '6', '1557', '8270', '0'), +('5', '47', '6', '11699', '7619', '0'), +('5', '47', '6', '4302', '4728', '0'), +('5', '47', '6', '25062', '3672', '0'), +('5', '47', '17', '4832', '14855', '0'), +('5', '47', '17', '4842', '11812', '0'), +('5', '47', '17', '3141', '8474', '0'), +('5', '47', '17', '4309', '8225', '0'), +('5', '47', '7', '4833', '6478', '0'), +('5', '47', '7', '4343', '6004', '0'), +('5', '47', '7', '4843', '5389', '0'), +('5', '47', '7', '2458', '3993', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '47', '9', '4834', '4408', '0'), +('5', '47', '9', '4844', '3561', '0'), +('5', '47', '9', '12189', '3471', '0'), +('5', '47', '9', '4311', '3332', '0'), +('5', '47', '15', '10366', '8054', '0'), +('5', '47', '15', '10151', '7200', '0'), +('5', '47', '15', '14679', '7010', '0'), +('5', '47', '15', '14678', '5708', '0'), +('5', '47', '20', '2704', '24246', '0'), +('5', '47', '20', '11601', '19867', '0'), +('5', '47', '20', '2918', '11644', '0'), +('5', '47', '20', '1365', '10500', '0'), +('5', '47', '12', '4835', '11034', '0'), +('5', '47', '12', '20655', '8656', '0'), +('5', '47', '12', '4845', '6354', '0'), +('5', '47', '12', '11624', '5440', '0'), +('5', '47', '18', '4836', '7468', '0'), +('5', '47', '18', '3145', '6125', '0'), +('5', '47', '18', '4846', '5554', '0'), +('5', '47', '18', '4346', '4645', '0'), +('5', '47', '19', '4837', '7822', '0'), +('5', '47', '19', '4847', '6922', '0'), +('5', '47', '19', '68239', '5721', '0'), +('5', '47', '19', '3146', '4025', '0'), +('5', '47', '13', '45120', '27893', '0'), +('5', '47', '13', '27707', '27371', '0'), +('5', '47', '13', '5401', '24240', '0'), +('5', '47', '13', '5622', '21748', '0'), +('5', '47', '14', '9402', '33822', '0'), +('5', '47', '14', '11678', '32840', '0'), +('5', '47', '14', '11632', '31165', '0'), +('5', '47', '14', '11551', '23853', '0'), +('5', '47', '11', '45137', '19866', '0'), +('5', '47', '11', '8408', '9175', '0'), +('5', '47', '11', '8325', '9095', '0'), +('5', '47', '11', '8811', '7102', '0'), +('5', '48', '22', '8567', '0', '0'), +('5', '48', '22', '10323', '0', '0'), +('5', '48', '22', '8504', '0', '0'), +('5', '48', '22', '9246', '0', '0'), +('5', '48', '1', '14701', '4854', '0'), +('5', '48', '1', '14702', '3550', '0'), +('5', '48', '1', '10082', '3456', '0'), +('5', '48', '1', '10165', '1940', '0'), +('5', '48', '2', '4841', '10500', '0'), +('5', '48', '2', '4301', '7726', '0'), +('5', '48', '2', '4831', '6910', '0'), +('5', '48', '2', '4620', '5922', '0'), +('5', '48', '3', '4322', '5343', '0'), +('5', '48', '3', '1544', '5340', '0'), +('5', '48', '3', '71529', '4457', '0'), +('5', '48', '3', '4505', '2728', '0'), +('5', '48', '5', '27705', '8032', '0'), +('5', '48', '5', '14703', '7150', '0'), +('5', '48', '5', '14700', '4806', '0'), +('5', '48', '5', '10055', '4760', '0'), +('5', '48', '8', '11621', '26579', '0'), +('5', '48', '8', '11551', '8753', '0'), +('5', '48', '8', '1409', '7747', '0'), +('5', '48', '8', '11603', '7586', '0'), +('5', '48', '6', '1557', '8270', '0'), +('5', '48', '6', '11699', '7673', '0'), +('5', '48', '6', '4302', '4761', '0'), +('5', '48', '6', '25062', '3672', '0'), +('5', '48', '17', '4832', '14937', '0'), +('5', '48', '17', '4842', '11861', '0'), +('5', '48', '17', '3141', '8528', '0'), +('5', '48', '17', '4309', '8225', '0'), +('5', '48', '7', '4833', '6478', '0'), +('5', '48', '7', '4343', '6058', '0'), +('5', '48', '7', '4843', '5389', '0'), +('5', '48', '7', '2458', '4008', '0'), +('5', '48', '9', '4834', '4408', '0'), +('5', '48', '9', '4844', '3572', '0'), +('5', '48', '9', '12189', '3471', '0'), +('5', '48', '9', '4311', '3370', '0'), +('5', '48', '15', '10366', '8054', '0'), +('5', '48', '15', '10151', '7200', '0'), +('5', '48', '15', '14679', '7010', '0'), +('5', '48', '15', '14678', '5708', '0'), +('5', '48', '20', '2704', '24268', '0'), +('5', '48', '20', '11601', '19921', '0'), +('5', '48', '20', '2918', '11662', '0'), +('5', '48', '20', '1365', '10500', '0'), +('5', '48', '12', '4835', '11061', '0'), +('5', '48', '12', '20655', '8674', '0'), +('5', '48', '12', '4845', '6372', '0'), +('5', '48', '12', '11624', '5478', '0'), +('5', '48', '18', '4836', '7496', '0'), +('5', '48', '18', '3145', '6174', '0'), +('5', '48', '18', '4846', '5554', '0'), +('5', '48', '18', '4346', '4645', '0'), +('5', '48', '19', '4837', '7840', '0'), +('5', '48', '19', '4847', '6949', '0'), +('5', '48', '19', '68239', '5732', '0'), +('5', '48', '19', '3146', '4041', '0'), +('5', '48', '13', '45120', '28807', '0'), +('5', '48', '13', '27707', '27610', '0'), +('5', '48', '13', '5401', '24382', '0'), +('5', '48', '13', '5622', '21947', '0'), +('5', '48', '14', '9402', '33849', '0'), +('5', '48', '14', '11678', '32840', '0'), +('5', '48', '14', '11632', '31247', '0'), +('5', '48', '14', '11551', '23853', '0'), +('5', '48', '11', '45137', '20544', '0'), +('5', '48', '11', '8408', '9251', '0'), +('5', '48', '11', '8325', '9171', '0'), +('5', '48', '11', '8811', '7168', '0'), +('5', '49', '22', '8567', '0', '0'), +('5', '49', '22', '10323', '0', '0'), +('5', '49', '22', '8504', '0', '0'), +('5', '49', '22', '9246', '0', '0'), +('5', '49', '1', '14701', '4854', '0'), +('5', '49', '1', '14702', '3550', '0'), +('5', '49', '1', '10082', '3477', '0'), +('5', '49', '1', '10165', '1940', '0'), +('5', '49', '2', '4841', '10532', '0'), +('5', '49', '2', '4301', '7726', '0'), +('5', '49', '2', '4831', '6928', '0'), +('5', '49', '2', '4620', '5964', '0'), +('5', '49', '3', '1544', '5359', '0'), +('5', '49', '3', '4322', '5343', '0'), +('5', '49', '3', '71529', '4481', '0'), +('5', '49', '3', '4505', '2753', '0'), +('5', '49', '5', '27705', '8083', '0'), +('5', '49', '5', '14703', '7150', '0'), +('5', '49', '5', '14700', '4806', '0'), +('5', '49', '5', '10055', '4760', '0'), +('5', '49', '8', '11621', '26579', '0'), +('5', '49', '8', '11551', '8753', '0'), +('5', '49', '8', '1409', '7747', '0'), +('5', '49', '8', '11603', '7618', '0'), +('5', '49', '6', '1557', '8270', '0'), +('5', '49', '6', '11699', '7727', '0'), +('5', '49', '6', '4302', '4797', '0'), +('5', '49', '6', '25062', '3672', '0'), +('5', '49', '17', '4832', '15028', '0'), +('5', '49', '17', '4842', '11916', '0'), +('5', '49', '17', '3141', '8588', '0'), +('5', '49', '17', '4309', '8225', '0'), +('5', '49', '7', '4833', '6478', '0'), +('5', '49', '7', '4343', '6119', '0'), +('5', '49', '7', '4843', '5389', '0'), +('5', '49', '7', '2458', '4022', '0'), +('5', '49', '9', '4834', '4408', '0'), +('5', '49', '9', '4844', '3583', '0'), +('5', '49', '9', '12189', '3471', '0'), +('5', '49', '9', '4311', '3412', '0'), +('5', '49', '15', '10366', '8054', '0'), +('5', '49', '15', '10151', '7200', '0'), +('5', '49', '15', '14679', '7010', '0'), +('5', '49', '15', '14678', '5708', '0'), +('5', '49', '20', '2704', '24289', '0'), +('5', '49', '20', '11601', '19982', '0'), +('5', '49', '20', '2918', '11680', '0'), +('5', '49', '20', '1365', '10500', '0'), +('5', '49', '12', '4835', '11091', '0'), +('5', '49', '12', '20655', '8694', '0'), +('5', '49', '12', '4845', '6390', '0'), +('5', '49', '12', '11624', '5520', '0'), +('5', '49', '18', '4836', '7526', '0'), +('5', '49', '18', '3145', '6228', '0'), +('5', '49', '18', '4846', '5554', '0'), +('5', '49', '18', '4346', '4645', '0'), +('5', '49', '19', '4837', '7858', '0'), +('5', '49', '19', '4847', '6980', '0'), +('5', '49', '19', '68239', '5743', '0'), +('5', '49', '19', '3146', '4059', '0'), +('5', '49', '13', '45120', '29554', '0'), +('5', '49', '13', '27707', '27878', '0'), +('5', '49', '13', '5401', '24523', '0'), +('5', '49', '13', '5622', '22117', '0'), +('5', '49', '14', '9402', '33879', '0'), +('5', '49', '14', '11678', '32840', '0'), +('5', '49', '14', '11632', '31337', '0'), +('5', '49', '14', '11551', '23853', '0'), +('5', '49', '11', '45137', '21096', '0'), +('5', '49', '11', '8408', '9326', '0'), +('5', '49', '11', '8325', '9256', '0'), +('5', '49', '11', '8811', '7234', '0'), +('5', '50', '22', '8567', '0', '0'), +('5', '50', '22', '10323', '0', '0'), +('5', '50', '22', '8504', '0', '0'), +('5', '50', '22', '9246', '0', '0'), +('5', '50', '1', '14701', '4854', '0'), +('5', '50', '1', '14702', '3550', '0'), +('5', '50', '1', '10082', '3499', '0'), +('5', '50', '1', '10165', '1940', '0'), +('5', '50', '2', '4841', '10565', '0'), +('5', '50', '2', '4301', '7726', '0'), +('5', '50', '2', '4831', '6946', '0'), +('5', '50', '2', '4620', '6006', '0'), +('5', '50', '3', '1544', '5377', '0'), +('5', '50', '3', '4322', '5343', '0'), +('5', '50', '3', '71529', '4506', '0'), +('5', '50', '3', '4505', '2778', '0'), +('5', '50', '5', '27705', '8134', '0'), +('5', '50', '5', '14703', '7150', '0'), +('5', '50', '5', '14700', '4806', '0'), +('5', '50', '5', '10055', '4760', '0'), +('5', '50', '8', '11621', '26579', '0'), +('5', '50', '8', '11551', '8753', '0'), +('5', '50', '8', '1409', '7747', '0'), +('5', '50', '8', '11603', '7651', '0'), +('5', '50', '6', '1557', '8270', '0'), +('5', '50', '6', '11699', '7782', '0'), +('5', '50', '6', '4302', '4833', '0'), +('5', '50', '6', '25062', '3672', '0'), +('5', '50', '17', '4832', '15118', '0'), +('5', '50', '17', '4842', '11970', '0'), +('5', '50', '17', '3141', '8649', '0'), +('5', '50', '17', '4309', '8225', '0'), +('5', '50', '7', '4833', '6478', '0'), +('5', '50', '7', '4343', '6179', '0'), +('5', '50', '7', '4843', '5389', '0'), +('5', '50', '7', '2458', '4037', '0'), +('5', '50', '9', '4834', '4408', '0'), +('5', '50', '9', '4844', '3594', '0'), +('5', '50', '9', '12189', '3471', '0'), +('5', '50', '9', '4311', '3454', '0'), +('5', '50', '15', '10366', '8054', '0'), +('5', '50', '15', '10151', '7200', '0'), +('5', '50', '15', '14679', '7010', '0'), +('5', '50', '15', '14678', '5708', '0'), +('5', '50', '20', '2704', '24311', '0'), +('5', '50', '20', '11601', '20042', '0'), +('5', '50', '20', '2918', '11699', '0'), +('5', '50', '20', '1365', '10500', '0'), +('5', '50', '12', '4835', '11122', '0'), +('5', '50', '12', '20655', '8713', '0'), +('5', '50', '12', '4845', '6409', '0'), +('5', '50', '12', '11624', '5562', '0'), +('5', '50', '18', '4836', '7556', '0'), +('5', '50', '18', '3145', '6283', '0'), +('5', '50', '18', '4846', '5554', '0'), +('5', '50', '18', '4346', '4645', '0'), +('5', '50', '19', '4837', '7876', '0'), +('5', '50', '19', '4847', '7010', '0'), +('5', '50', '19', '68239', '5754', '0'), +('5', '50', '19', '3146', '4078', '0'), +('5', '50', '13', '45120', '30501', '0'), +('5', '50', '13', '27707', '28117', '0'), +('5', '50', '13', '5401', '24665', '0'), +('5', '50', '13', '5622', '22315', '0'), +('5', '50', '14', '9402', '33909', '0'), +('5', '50', '14', '11678', '32840', '0'), +('5', '50', '14', '11632', '31428', '0'), +('5', '50', '14', '11551', '23853', '0'), +('5', '50', '11', '45137', '21698', '0'), +('5', '50', '11', '8408', '9402', '0'), +('5', '50', '11', '8325', '9331', '0'), +('5', '50', '11', '8811', '7291', '0'), +('5', '51', '22', '8567', '0', '0'), +('5', '51', '22', '10323', '0', '0'), +('5', '51', '22', '8504', '0', '0'), +('5', '51', '22', '9246', '0', '0'), +('5', '51', '1', '14701', '4854', '0'), +('5', '51', '1', '14702', '3550', '0'), +('5', '51', '1', '10082', '3521', '0'), +('5', '51', '1', '10165', '1940', '0'), +('5', '51', '2', '4841', '10597', '0'), +('5', '51', '2', '4301', '7726', '0'), +('5', '51', '2', '4831', '6964', '0'), +('5', '51', '2', '4620', '6044', '0'), +('5', '51', '3', '1544', '5395', '0'), +('5', '51', '3', '4322', '5343', '0'), +('5', '51', '3', '71529', '4527', '0'), +('5', '51', '3', '4505', '2804', '0'), +('5', '51', '5', '27705', '8185', '0'), +('5', '51', '5', '14703', '7150', '0'), +('5', '51', '5', '14700', '4806', '0'), +('5', '51', '5', '10055', '4760', '0'), +('5', '51', '8', '11621', '26579', '0'), +('5', '51', '8', '11551', '8753', '0'), +('5', '51', '8', '1409', '7747', '0'), +('5', '51', '8', '11603', '7683', '0'), +('5', '51', '6', '1557', '8270', '0'), +('5', '51', '6', '11699', '7836', '0'), +('5', '51', '6', '4302', '4866', '0'), +('5', '51', '6', '25062', '3672', '0'), +('5', '51', '17', '4832', '15200', '0'), +('5', '51', '17', '4842', '12019', '0'), +('5', '51', '17', '3141', '8703', '0'), +('5', '51', '17', '4309', '8225', '0'), +('5', '51', '7', '4833', '6478', '0'), +('5', '51', '7', '4343', '6233', '0'), +('5', '51', '7', '4843', '5389', '0'), +('5', '51', '7', '2458', '4051', '0'), +('5', '51', '9', '4834', '4408', '0'), +('5', '51', '9', '4844', '3605', '0'), +('5', '51', '9', '4311', '3492', '0'), +('5', '51', '9', '12189', '3471', '0'), +('5', '51', '15', '10366', '8054', '0'), +('5', '51', '15', '10151', '7200', '0'), +('5', '51', '15', '14679', '7010', '0'), +('5', '51', '15', '14678', '5708', '0'), +('5', '51', '20', '2704', '24333', '0'), +('5', '51', '20', '11601', '20096', '0'), +('5', '51', '20', '2918', '11717', '0'), +('5', '51', '20', '1365', '10500', '0'), +('5', '51', '12', '4835', '11149', '0'), +('5', '51', '12', '20655', '8731', '0'), +('5', '51', '12', '4845', '6427', '0'), +('5', '51', '12', '11624', '5601', '0'), +('5', '51', '18', '4836', '7583', '0'), +('5', '51', '18', '3145', '6332', '0'), +('5', '51', '18', '4846', '5554', '0'), +('5', '51', '18', '4346', '4645', '0'), +('5', '51', '19', '4837', '7894', '0'), +('5', '51', '19', '4847', '7037', '0'), +('5', '51', '19', '68239', '5765', '0'), +('5', '51', '19', '3146', '4094', '0'), +('5', '51', '13', '27961', '40794', '0'), +('5', '51', '13', '45120', '31248', '0'), +('5', '51', '13', '27895', '30222', '0'), +('5', '51', '13', '27707', '28357', '0'), +('5', '51', '14', '9402', '33937', '0'), +('5', '51', '14', '11678', '32840', '0'), +('5', '51', '14', '11632', '31510', '0'), +('5', '51', '14', '11551', '23853', '0'), +('5', '51', '11', '45137', '22252', '0'), +('5', '51', '11', '8408', '9478', '0'), +('5', '51', '11', '8325', '9407', '0'), +('5', '51', '11', '8811', '7357', '0'), +('5', '52', '22', '8567', '0', '0'), +('5', '52', '22', '10323', '0', '0'), +('5', '52', '22', '8504', '0', '0'), +('5', '52', '22', '9246', '0', '0'), +('5', '52', '1', '14701', '4854', '0'), +('5', '52', '1', '14702', '3550', '0'), +('5', '52', '1', '10082', '3543', '0'), +('5', '52', '1', '10165', '1940', '0'), +('5', '52', '2', '4841', '10630', '0'), +('5', '52', '2', '4301', '7726', '0'), +('5', '52', '2', '4831', '6982', '0'), +('5', '52', '2', '4620', '6087', '0'), +('5', '52', '3', '1544', '5413', '0'), +('5', '52', '3', '4322', '5343', '0'), +('5', '52', '3', '71529', '4552', '0'), +('5', '52', '3', '4505', '2829', '0'), +('5', '52', '5', '27705', '8235', '0'), +('5', '52', '5', '14703', '7150', '0'), +('5', '52', '5', '14700', '4806', '0'), +('5', '52', '5', '10055', '4760', '0'), +('5', '52', '8', '11621', '26579', '0'), +('5', '52', '8', '11551', '8753', '0'), +('5', '52', '8', '1409', '7747', '0'), +('5', '52', '8', '11603', '7716', '0'), +('5', '52', '6', '1557', '8270', '0'), +('5', '52', '6', '11699', '7890', '0'), +('5', '52', '6', '4302', '4902', '0'), +('5', '52', '6', '25062', '3672', '0'), +('5', '52', '17', '4832', '15290', '0'), +('5', '52', '17', '4842', '12073', '0'), +('5', '52', '17', '3141', '8763', '0'), +('5', '52', '17', '4309', '8225', '0'), +('5', '52', '7', '4833', '6478', '0'), +('5', '52', '7', '4343', '6294', '0'), +('5', '52', '7', '4843', '5389', '0'), +('5', '52', '7', '2458', '4066', '0'), +('5', '52', '9', '4834', '4408', '0'), +('5', '52', '9', '4844', '3616', '0'), +('5', '52', '9', '4311', '3535', '0'), +('5', '52', '9', '12189', '3471', '0'), +('5', '52', '15', '10366', '8054', '0'), +('5', '52', '15', '10151', '7200', '0'), +('5', '52', '15', '14679', '7010', '0'), +('5', '52', '15', '14678', '5708', '0'), +('5', '52', '20', '2704', '24355', '0'), +('5', '52', '20', '11601', '20157', '0'), +('5', '52', '20', '2918', '11735', '0'), +('5', '52', '20', '1365', '10500', '0'), +('5', '52', '12', '4835', '11179', '0'), +('5', '52', '12', '20655', '8750', '0'), +('5', '52', '12', '4845', '6445', '0'), +('5', '52', '12', '11624', '5643', '0'), +('5', '52', '18', '4836', '7613', '0'), +('5', '52', '18', '3145', '6386', '0'), +('5', '52', '18', '4846', '5554', '0'), +('5', '52', '18', '4346', '4645', '0'), +('5', '52', '19', '4837', '7912', '0'), +('5', '52', '19', '4847', '7067', '0'), +('5', '52', '19', '68239', '5776', '0'), +('5', '52', '19', '3146', '4112', '0'), +('5', '52', '13', '27961', '41154', '0'), +('5', '52', '13', '45120', '32197', '0'), +('5', '52', '13', '27895', '30467', '0'), +('5', '52', '13', '27707', '28596', '0'), +('5', '52', '14', '9402', '33967', '0'), +('5', '52', '14', '11678', '32840', '0'), +('5', '52', '14', '11632', '31600', '0'), +('5', '52', '14', '11551', '23853', '0'), +('5', '52', '11', '45137', '22963', '0'), +('5', '52', '11', '8408', '9553', '0'), +('5', '52', '11', '8325', '9492', '0'), +('5', '52', '11', '8811', '7423', '0'), +('5', '53', '22', '8567', '0', '0'), +('5', '53', '22', '10323', '0', '0'), +('5', '53', '22', '8504', '0', '0'), +('5', '53', '22', '9246', '0', '0'), +('5', '53', '1', '14701', '4854', '0'), +('5', '53', '1', '10082', '3564', '0'), +('5', '53', '1', '14702', '3550', '0'), +('5', '53', '1', '10165', '1940', '0'), +('5', '53', '2', '4841', '10663', '0'), +('5', '53', '2', '4301', '7726', '0'), +('5', '53', '2', '4831', '7000', '0'), +('5', '53', '2', '4620', '6129', '0'), +('5', '53', '3', '1544', '5431', '0'), +('5', '53', '3', '4322', '5343', '0'), +('5', '53', '3', '71529', '4576', '0'), +('5', '53', '3', '11052', '2881', '0'), +('5', '53', '5', '27705', '8286', '0'), +('5', '53', '5', '14703', '7150', '0'), +('5', '53', '5', '14700', '4806', '0'), +('5', '53', '5', '10055', '4760', '0'), +('5', '53', '8', '11621', '26579', '0'), +('5', '53', '8', '11551', '8753', '0'), +('5', '53', '8', '11603', '7749', '0'), +('5', '53', '8', '1409', '7747', '0'), +('5', '53', '6', '1557', '8270', '0'), +('5', '53', '6', '11699', '7945', '0'), +('5', '53', '6', '4302', '4938', '0'), +('5', '53', '6', '25062', '3672', '0'), +('5', '53', '17', '4832', '15381', '0'), +('5', '53', '17', '4842', '12128', '0'), +('5', '53', '17', '3141', '8824', '0'), +('5', '53', '17', '4309', '8225', '0'), +('5', '53', '7', '4833', '6478', '0'), +('5', '53', '7', '4343', '6354', '0'), +('5', '53', '7', '4843', '5389', '0'), +('5', '53', '7', '2458', '4080', '0'), +('5', '53', '9', '4834', '4408', '0'), +('5', '53', '9', '4844', '3626', '0'), +('5', '53', '9', '4311', '3577', '0'), +('5', '53', '9', '12189', '3471', '0'), +('5', '53', '15', '10366', '8054', '0'), +('5', '53', '15', '10151', '7200', '0'), +('5', '53', '15', '14679', '7010', '0'), +('5', '53', '15', '14678', '5708', '0'), +('5', '53', '20', '2704', '24376', '0'), +('5', '53', '20', '11601', '20217', '0'), +('5', '53', '20', '2918', '11753', '0'), +('5', '53', '20', '1365', '10500', '0'), +('5', '53', '12', '4835', '11209', '0'), +('5', '53', '12', '20655', '8770', '0'), +('5', '53', '12', '4845', '6463', '0'), +('5', '53', '12', '11624', '5685', '0'), +('5', '53', '18', '4836', '7644', '0'), +('5', '53', '18', '3145', '6440', '0'), +('5', '53', '18', '4846', '5554', '0'), +('5', '53', '18', '4346', '4645', '0'), +('5', '53', '19', '4837', '7931', '0'), +('5', '53', '19', '4847', '7097', '0'), +('5', '53', '19', '68239', '5786', '0'), +('5', '53', '19', '3146', '4130', '0'), +('5', '53', '13', '27961', '41514', '0'), +('5', '53', '13', '45120', '32977', '0'), +('5', '53', '13', '27895', '30684', '0'), +('5', '53', '13', '27707', '28864', '0'), +('5', '53', '14', '9402', '33997', '0'), +('5', '53', '14', '11678', '32840', '0'), +('5', '53', '14', '11632', '31691', '0'), +('5', '53', '14', '11551', '23853', '0'), +('5', '53', '11', '45137', '23536', '0'), +('5', '53', '11', '8408', '9629', '0'), +('5', '53', '11', '8325', '9567', '0'), +('5', '53', '11', '8811', '7480', '0'), +('5', '54', '22', '8567', '0', '0'), +('5', '54', '22', '10323', '0', '0'), +('5', '54', '22', '8504', '0', '0'), +('5', '54', '22', '9246', '0', '0'), +('5', '54', '1', '14701', '4854', '0'), +('5', '54', '1', '10082', '3586', '0'), +('5', '54', '1', '14702', '3550', '0'), +('5', '54', '1', '10165', '1940', '0'), +('5', '54', '2', '4841', '10695', '0'), +('5', '54', '2', '4301', '7726', '0'), +('5', '54', '2', '4831', '7018', '0'), +('5', '54', '2', '4620', '6171', '0'), +('5', '54', '3', '1544', '5449', '0'), +('5', '54', '3', '4322', '5343', '0'), +('5', '54', '3', '71529', '4600', '0'), +('5', '54', '3', '11052', '2935', '0'), +('5', '54', '5', '27705', '8337', '0'), +('5', '54', '5', '14703', '7150', '0'), +('5', '54', '5', '14700', '4806', '0'), +('5', '54', '5', '10055', '4760', '0'), +('5', '54', '8', '11621', '26579', '0'), +('5', '54', '8', '11551', '8753', '0'), +('5', '54', '8', '11603', '7781', '0'), +('5', '54', '8', '1409', '7747', '0'), +('5', '54', '6', '1557', '8270', '0'), +('5', '54', '6', '11699', '7999', '0'), +('5', '54', '6', '4302', '4975', '0'), +('5', '54', '6', '25062', '3672', '0'), +('5', '54', '17', '4832', '15471', '0'), +('5', '54', '17', '4842', '12182', '0'), +('5', '54', '17', '3141', '8884', '0'), +('5', '54', '17', '4309', '8225', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '54', '7', '4833', '6478', '0'), +('5', '54', '7', '4343', '6414', '0'), +('5', '54', '7', '4843', '5389', '0'), +('5', '54', '7', '2458', '4095', '0'), +('5', '54', '9', '4834', '4408', '0'), +('5', '54', '9', '4844', '3637', '0'), +('5', '54', '9', '4311', '3619', '0'), +('5', '54', '9', '12189', '3471', '0'), +('5', '54', '15', '10366', '8054', '0'), +('5', '54', '15', '10151', '7200', '0'), +('5', '54', '15', '14679', '7010', '0'), +('5', '54', '15', '14678', '5708', '0'), +('5', '54', '20', '2704', '24398', '0'), +('5', '54', '20', '11601', '20278', '0'), +('5', '54', '20', '2918', '11771', '0'), +('5', '54', '20', '1365', '10500', '0'), +('5', '54', '12', '4835', '11239', '0'), +('5', '54', '12', '20655', '8789', '0'), +('5', '54', '12', '4845', '6481', '0'), +('5', '54', '12', '11624', '5727', '0'), +('5', '54', '18', '4836', '7674', '0'), +('5', '54', '18', '3145', '6495', '0'), +('5', '54', '18', '4846', '5554', '0'), +('5', '54', '18', '4346', '4645', '0'), +('5', '54', '19', '4837', '7949', '0'), +('5', '54', '19', '4847', '7128', '0'), +('5', '54', '19', '68239', '5797', '0'), +('5', '54', '19', '3146', '4148', '0'), +('5', '54', '13', '27961', '41874', '0'), +('5', '54', '13', '45120', '33957', '0'), +('5', '54', '13', '27895', '30928', '0'), +('5', '54', '13', '27707', '29103', '0'), +('5', '54', '14', '9402', '34027', '0'), +('5', '54', '14', '11678', '32840', '0'), +('5', '54', '14', '11632', '31781', '0'), +('5', '54', '14', '11551', '23853', '0'), +('5', '54', '11', '45137', '24112', '0'), +('5', '54', '11', '8408', '9704', '0'), +('5', '54', '11', '8325', '9652', '0'), +('5', '54', '11', '8811', '7546', '0'), +('5', '55', '22', '8567', '0', '0'), +('5', '55', '22', '10323', '0', '0'), +('5', '55', '22', '8504', '0', '0'), +('5', '55', '22', '9246', '0', '0'), +('5', '55', '1', '14701', '4854', '0'), +('5', '55', '1', '10082', '3608', '0'), +('5', '55', '1', '14702', '3550', '0'), +('5', '55', '1', '10165', '1940', '0'), +('5', '55', '2', '4841', '10728', '0'), +('5', '55', '2', '4301', '7726', '0'), +('5', '55', '2', '4831', '7037', '0'), +('5', '55', '2', '4620', '6213', '0'), +('5', '55', '3', '1544', '5467', '0'), +('5', '55', '3', '4322', '5343', '0'), +('5', '55', '3', '71529', '4624', '0'), +('5', '55', '3', '11052', '2990', '0'), +('5', '55', '5', '27705', '8388', '0'), +('5', '55', '5', '14703', '7150', '0'), +('5', '55', '5', '14700', '4806', '0'), +('5', '55', '5', '10055', '4760', '0'), +('5', '55', '8', '11621', '26579', '0'), +('5', '55', '8', '11551', '8753', '0'), +('5', '55', '8', '11603', '7814', '0'), +('5', '55', '8', '1409', '7747', '0'), +('5', '55', '6', '1557', '8270', '0'), +('5', '55', '6', '11699', '8053', '0'), +('5', '55', '6', '4302', '5011', '0'), +('5', '55', '6', '25062', '3672', '0'), +('5', '55', '17', '4832', '15562', '0'), +('5', '55', '17', '4842', '12236', '0'), +('5', '55', '17', '3141', '8945', '0'), +('5', '55', '17', '4309', '8225', '0'), +('5', '55', '7', '4833', '6478', '0'), +('5', '55', '7', '4343', '6475', '0'), +('5', '55', '7', '4843', '5389', '0'), +('5', '55', '7', '2458', '4109', '0'), +('5', '55', '9', '4834', '4408', '0'), +('5', '55', '9', '4311', '3661', '0'), +('5', '55', '9', '4844', '3648', '0'), +('5', '55', '9', '12189', '3471', '0'), +('5', '55', '15', '10366', '8054', '0'), +('5', '55', '15', '10151', '7200', '0'), +('5', '55', '15', '14679', '7010', '0'), +('5', '55', '15', '14678', '5708', '0'), +('5', '55', '20', '2704', '24420', '0'), +('5', '55', '20', '11601', '20338', '0'), +('5', '55', '20', '2918', '11789', '0'), +('5', '55', '20', '1365', '10500', '0'), +('5', '55', '12', '4835', '11270', '0'), +('5', '55', '12', '20655', '8808', '0'), +('5', '55', '12', '4845', '6499', '0'), +('5', '55', '12', '11624', '5770', '0'), +('5', '55', '18', '4836', '7704', '0'), +('5', '55', '18', '3145', '6549', '0'), +('5', '55', '18', '4846', '5554', '0'), +('5', '55', '18', '4346', '4645', '0'), +('5', '55', '19', '4837', '7967', '0'), +('5', '55', '19', '4847', '7158', '0'), +('5', '55', '19', '68239', '5808', '0'), +('5', '55', '19', '3146', '4166', '0'), +('5', '55', '13', '27961', '42262', '0'), +('5', '55', '13', '45120', '35023', '0'), +('5', '55', '13', '27895', '31145', '0'), +('5', '55', '13', '27707', '29342', '0'), +('5', '55', '14', '9402', '34057', '0'), +('5', '55', '14', '11678', '32840', '0'), +('5', '55', '14', '11632', '31872', '0'), +('5', '55', '14', '11551', '23853', '0'), +('5', '55', '11', '45137', '24747', '0'), +('5', '55', '11', '8408', '9780', '0'), +('5', '55', '11', '8325', '9728', '0'), +('5', '55', '11', '8811', '7603', '0'), +('5', '56', '22', '8567', '0', '0'), +('5', '56', '22', '10323', '0', '0'), +('5', '56', '22', '8504', '0', '0'), +('5', '56', '22', '9246', '0', '0'), +('5', '56', '1', '14701', '4854', '0'), +('5', '56', '1', '10082', '3630', '0'), +('5', '56', '1', '14702', '3550', '0'), +('5', '56', '1', '10165', '1940', '0'), +('5', '56', '2', '4841', '10760', '0'), +('5', '56', '2', '4301', '7726', '0'), +('5', '56', '2', '4831', '7055', '0'), +('5', '56', '2', '4620', '6256', '0'), +('5', '56', '3', '1544', '5485', '0'), +('5', '56', '3', '4322', '5343', '0'), +('5', '56', '3', '71529', '4648', '0'), +('5', '56', '3', '11052', '3044', '0'), +('5', '56', '5', '27705', '8438', '0'), +('5', '56', '5', '14703', '7150', '0'), +('5', '56', '5', '14700', '4806', '0'), +('5', '56', '5', '10055', '4760', '0'), +('5', '56', '8', '11621', '26579', '0'), +('5', '56', '8', '11551', '8753', '0'), +('5', '56', '8', '11603', '7846', '0'), +('5', '56', '8', '1409', '7747', '0'), +('5', '56', '6', '1557', '8270', '0'), +('5', '56', '6', '11699', '8108', '0'), +('5', '56', '6', '4302', '5047', '0'), +('5', '56', '6', '25062', '3672', '0'), +('5', '56', '17', '4832', '15653', '0'), +('5', '56', '17', '4842', '12291', '0'), +('5', '56', '17', '3141', '9005', '0'), +('5', '56', '17', '4309', '8225', '0'), +('5', '56', '7', '4343', '6535', '0'), +('5', '56', '7', '4833', '6478', '0'), +('5', '56', '7', '4843', '5389', '0'), +('5', '56', '7', '2458', '4124', '0'), +('5', '56', '9', '4834', '4408', '0'), +('5', '56', '9', '4311', '3704', '0'), +('5', '56', '9', '4844', '3659', '0'), +('5', '56', '9', '12189', '3471', '0'), +('5', '56', '15', '10366', '8054', '0'), +('5', '56', '15', '10151', '7200', '0'), +('5', '56', '15', '14679', '7010', '0'), +('5', '56', '15', '14678', '5708', '0'), +('5', '56', '20', '2704', '24442', '0'), +('5', '56', '20', '11601', '20398', '0'), +('5', '56', '20', '2918', '11807', '0'), +('5', '56', '20', '1365', '10500', '0'), +('5', '56', '12', '4835', '11300', '0'), +('5', '56', '12', '20655', '8828', '0'), +('5', '56', '12', '4845', '6517', '0'), +('5', '56', '12', '11624', '5812', '0'), +('5', '56', '18', '4836', '7734', '0'), +('5', '56', '18', '3145', '6604', '0'), +('5', '56', '18', '4846', '5554', '0'), +('5', '56', '18', '4346', '4645', '0'), +('5', '56', '19', '4837', '7985', '0'), +('5', '56', '19', '4847', '7188', '0'), +('5', '56', '19', '68239', '5819', '0'), +('5', '56', '19', '3146', '4185', '0'), +('5', '56', '13', '27961', '42622', '0'), +('5', '56', '13', '45120', '35308', '0'), +('5', '56', '13', '27895', '31390', '0'), +('5', '56', '13', '27707', '29582', '0'), +('5', '56', '14', '9402', '34088', '0'), +('5', '56', '14', '11678', '32840', '0'), +('5', '56', '14', '11632', '31963', '0'), +('5', '56', '14', '11551', '23853', '0'), +('5', '56', '11', '45137', '25337', '0'), +('5', '56', '11', '8408', '9855', '0'), +('5', '56', '11', '8325', '9813', '0'), +('5', '56', '11', '8811', '7669', '0'), +('5', '57', '22', '8567', '0', '0'), +('5', '57', '22', '10323', '0', '0'), +('5', '57', '22', '8504', '0', '0'), +('5', '57', '22', '9246', '0', '0'), +('5', '57', '1', '14701', '4854', '0'), +('5', '57', '1', '10082', '3651', '0'), +('5', '57', '1', '14702', '3550', '0'), +('5', '57', '1', '10165', '1940', '0'), +('5', '57', '2', '4841', '10793', '0'), +('5', '57', '2', '4301', '7726', '0'), +('5', '57', '2', '4831', '7073', '0'), +('5', '57', '2', '4620', '6298', '0'), +('5', '57', '3', '1544', '5504', '0'), +('5', '57', '3', '4322', '5343', '0'), +('5', '57', '3', '71529', '4672', '0'), +('5', '57', '3', '11052', '3099', '0'), +('5', '57', '5', '27705', '8489', '0'), +('5', '57', '5', '14703', '7150', '0'), +('5', '57', '5', '14700', '4806', '0'), +('5', '57', '5', '4501', '4799', '0'), +('5', '57', '8', '11621', '26579', '0'), +('5', '57', '8', '11551', '8753', '0'), +('5', '57', '8', '11603', '7879', '0'), +('5', '57', '8', '1409', '7747', '0'), +('5', '57', '6', '1557', '8270', '0'), +('5', '57', '6', '11699', '8162', '0'), +('5', '57', '6', '4302', '5083', '0'), +('5', '57', '6', '25062', '3672', '0'), +('5', '57', '17', '4832', '15743', '0'), +('5', '57', '17', '4842', '12345', '0'), +('5', '57', '17', '3141', '9065', '0'), +('5', '57', '17', '4309', '8225', '0'), +('5', '57', '7', '4343', '6596', '0'), +('5', '57', '7', '4833', '6478', '0'), +('5', '57', '7', '4843', '5389', '0'), +('5', '57', '7', '2458', '4138', '0'), +('5', '57', '9', '4834', '4408', '0'), +('5', '57', '9', '4311', '3746', '0'), +('5', '57', '9', '4844', '3670', '0'), +('5', '57', '9', '12189', '3471', '0'), +('5', '57', '15', '10366', '8054', '0'), +('5', '57', '15', '10151', '7200', '0'), +('5', '57', '15', '14679', '7010', '0'), +('5', '57', '15', '14678', '5708', '0'), +('5', '57', '20', '2704', '24463', '0'), +('5', '57', '20', '11601', '20459', '0'), +('5', '57', '20', '2918', '11825', '0'), +('5', '57', '20', '1365', '10500', '0'), +('5', '57', '12', '4835', '11330', '0'), +('5', '57', '12', '20655', '8847', '0'), +('5', '57', '12', '4845', '6535', '0'), +('5', '57', '12', '11624', '5854', '0'), +('5', '57', '18', '4836', '7764', '0'), +('5', '57', '18', '3145', '6658', '0'), +('5', '57', '18', '4846', '5554', '0'), +('5', '57', '18', '4346', '4645', '0'), +('5', '57', '19', '4837', '8003', '0'), +('5', '57', '19', '4847', '7218', '0'), +('5', '57', '19', '68239', '5830', '0'), +('5', '57', '19', '3146', '4203', '0'), +('5', '57', '13', '27961', '42982', '0'), +('5', '57', '13', '45120', '35593', '0'), +('5', '57', '13', '27895', '31606', '0'), +('5', '57', '13', '27707', '29849', '0'), +('5', '57', '14', '9402', '34118', '0'), +('5', '57', '14', '11678', '32840', '0'), +('5', '57', '14', '11632', '32053', '0'), +('5', '57', '14', '11551', '23853', '0'), +('5', '57', '11', '45137', '26185', '0'), +('5', '57', '11', '8408', '9931', '0'), +('5', '57', '11', '8325', '9888', '0'), +('5', '57', '11', '8811', '7735', '0'), +('5', '58', '22', '8567', '0', '0'), +('5', '58', '22', '10323', '0', '0'), +('5', '58', '22', '8504', '0', '0'), +('5', '58', '22', '9246', '0', '0'), +('5', '58', '1', '14701', '4854', '0'), +('5', '58', '1', '10082', '3673', '0'), +('5', '58', '1', '14702', '3550', '0'), +('5', '58', '1', '10165', '1940', '0'), +('5', '58', '2', '4841', '10826', '0'), +('5', '58', '2', '4301', '7726', '0'), +('5', '58', '2', '4831', '7091', '0'), +('5', '58', '2', '4620', '6340', '0'), +('5', '58', '3', '1544', '5522', '0'), +('5', '58', '3', '4322', '5343', '0'), +('5', '58', '3', '71529', '4696', '0'), +('5', '58', '3', '11052', '3153', '0'), +('5', '58', '5', '27705', '8540', '0'), +('5', '58', '5', '14703', '7150', '0'), +('5', '58', '5', '4501', '4846', '0'), +('5', '58', '5', '14700', '4806', '0'), +('5', '58', '8', '11621', '26579', '0'), +('5', '58', '8', '11551', '8753', '0'), +('5', '58', '8', '11603', '7912', '0'), +('5', '58', '8', '1409', '7747', '0'), +('5', '58', '6', '1557', '8270', '0'), +('5', '58', '6', '11699', '8216', '0'), +('5', '58', '6', '4302', '5120', '0'), +('5', '58', '6', '25062', '3672', '0'), +('5', '58', '17', '4832', '15834', '0'), +('5', '58', '17', '4842', '12400', '0'), +('5', '58', '17', '3141', '9126', '0'), +('5', '58', '17', '4309', '8225', '0'), +('5', '58', '7', '4343', '6656', '0'), +('5', '58', '7', '4833', '6478', '0'), +('5', '58', '7', '4843', '5389', '0'), +('5', '58', '7', '2458', '4153', '0'), +('5', '58', '9', '4834', '4408', '0'), +('5', '58', '9', '4311', '3788', '0'), +('5', '58', '9', '4844', '3681', '0'), +('5', '58', '9', '12189', '3471', '0'), +('5', '58', '15', '10366', '8054', '0'), +('5', '58', '15', '10151', '7200', '0'), +('5', '58', '15', '14679', '7010', '0'), +('5', '58', '15', '14678', '5708', '0'), +('5', '58', '20', '2704', '24485', '0'), +('5', '58', '20', '11601', '20519', '0'), +('5', '58', '20', '2918', '11843', '0'), +('5', '58', '20', '1365', '10500', '0'), +('5', '58', '12', '4835', '11360', '0'), +('5', '58', '12', '20655', '8866', '0'), +('5', '58', '12', '4845', '6553', '0'), +('5', '58', '12', '11624', '5896', '0'), +('5', '58', '18', '4836', '7795', '0'), +('5', '58', '18', '3145', '6712', '0'), +('5', '58', '18', '4846', '5554', '0'), +('5', '58', '18', '4346', '4645', '0'), +('5', '58', '19', '4837', '8021', '0'), +('5', '58', '19', '4847', '7248', '0'), +('5', '58', '19', '68239', '5841', '0'), +('5', '58', '19', '3146', '4221', '0'), +('5', '58', '13', '27961', '43342', '0'), +('5', '58', '13', '45120', '35878', '0'), +('5', '58', '13', '27895', '31851', '0'), +('5', '58', '13', '27707', '30089', '0'), +('5', '58', '14', '9402', '34148', '0'), +('5', '58', '14', '11678', '32840', '0'), +('5', '58', '14', '11632', '32144', '0'), +('5', '58', '14', '11551', '23853', '0'), +('5', '58', '11', '45137', '26791', '0'), +('5', '58', '11', '8408', '10006', '0'), +('5', '58', '11', '8325', '9973', '0'), +('5', '58', '11', '8811', '7792', '0'), +('5', '59', '22', '8567', '0', '0'), +('5', '59', '22', '10323', '0', '0'), +('5', '59', '22', '8504', '0', '0'), +('5', '59', '22', '9246', '0', '0'), +('5', '59', '1', '14701', '4854', '0'), +('5', '59', '1', '10082', '3695', '0'), +('5', '59', '1', '14702', '3550', '0'), +('5', '59', '1', '10165', '1940', '0'), +('5', '59', '2', '4841', '10858', '0'), +('5', '59', '2', '4301', '7726', '0'), +('5', '59', '2', '4831', '7109', '0'), +('5', '59', '2', '4620', '6382', '0'), +('5', '59', '3', '1544', '5540', '0'), +('5', '59', '3', '4322', '5343', '0'), +('5', '59', '3', '71529', '4721', '0'), +('5', '59', '3', '11052', '3207', '0'), +('5', '59', '5', '27705', '8591', '0'), +('5', '59', '5', '14703', '7150', '0'), +('5', '59', '5', '4501', '4894', '0'), +('5', '59', '5', '14700', '4806', '0'), +('5', '59', '8', '11621', '26579', '0'), +('5', '59', '8', '11551', '8753', '0'), +('5', '59', '8', '11603', '7944', '0'), +('5', '59', '8', '1409', '7747', '0'), +('5', '59', '6', '11699', '8271', '0'), +('5', '59', '6', '1557', '8270', '0'), +('5', '59', '6', '4302', '5156', '0'), +('5', '59', '6', '25062', '3672', '0'), +('5', '59', '17', '4832', '15924', '0'), +('5', '59', '17', '4842', '12454', '0'), +('5', '59', '17', '3141', '9186', '0'), +('5', '59', '17', '4309', '8225', '0'), +('5', '59', '7', '4343', '6716', '0'), +('5', '59', '7', '4833', '6478', '0'), +('5', '59', '7', '4843', '5389', '0'), +('5', '59', '7', '2458', '4167', '0'), +('5', '59', '9', '4834', '4408', '0'), +('5', '59', '9', '4311', '3831', '0'), +('5', '59', '9', '4844', '3692', '0'), +('5', '59', '9', '12189', '3471', '0'), +('5', '59', '15', '10366', '8054', '0'), +('5', '59', '15', '10151', '7200', '0'), +('5', '59', '15', '14679', '7010', '0'), +('5', '59', '15', '14678', '5708', '0'), +('5', '59', '20', '2704', '24507', '0'), +('5', '59', '20', '11601', '20580', '0'), +('5', '59', '20', '2918', '11862', '0'), +('5', '59', '20', '1365', '10500', '0'), +('5', '59', '12', '4835', '11390', '0'), +('5', '59', '12', '20655', '8886', '0'), +('5', '59', '12', '4845', '6572', '0'), +('5', '59', '12', '11624', '5939', '0'), +('5', '59', '18', '4836', '7825', '0'), +('5', '59', '18', '3145', '6767', '0'), +('5', '59', '18', '4846', '5554', '0'), +('5', '59', '18', '4346', '4645', '0'), +('5', '59', '19', '4837', '8039', '0'), +('5', '59', '19', '4847', '7279', '0'), +('5', '59', '19', '68239', '5852', '0'), +('5', '59', '19', '3146', '4239', '0'), +('5', '59', '13', '27961', '43731', '0'), +('5', '59', '13', '45120', '36163', '0'), +('5', '59', '13', '27895', '32096', '0'), +('5', '59', '13', '27707', '30328', '0'), +('5', '59', '14', '9402', '34178', '0'), +('5', '59', '14', '11678', '32840', '0'), +('5', '59', '14', '11632', '32234', '0'), +('5', '59', '14', '11551', '23853', '0'), +('5', '59', '11', '45137', '27456', '0'), +('5', '59', '11', '8408', '10091', '0'), +('5', '59', '11', '8325', '10049', '0'), +('5', '59', '11', '8811', '7858', '0'), +('5', '60', '22', '21805', '0', '3'), +('5', '60', '22', '61948', '0', '3'), +('5', '60', '22', '21807', '0', '3'), +('5', '60', '22', '12425', '0', '3'), +('5', '60', '1', '7945', '24244', '3'), +('5', '60', '1', '26775', '17213', '3'), +('5', '60', '1', '63170', '15188', '3'), +('5', '60', '1', '29861', '14863', '3'), +('5', '60', '2', '26025', '23578', '3'), +('5', '60', '2', '2612', '23578', '3'), +('5', '60', '2', '26759', '16725', '3'), +('5', '60', '2', '28986', '15931', '3'), +('5', '60', '3', '26773', '18328', '3'), +('5', '60', '3', '26751', '15694', '3'), +('5', '60', '3', '28942', '15677', '3'), +('5', '60', '3', '31233', '14447', '3'), +('5', '60', '5', '28885', '32303', '3'), +('5', '60', '5', '27266', '26858', '3'), +('5', '60', '5', '8364', '21121', '3'), +('5', '60', '5', '7868', '16201', '3'), +('5', '60', '8', '26765', '35824', '3'), +('5', '60', '8', '26766', '35221', '3'), +('5', '60', '8', '31471', '31262', '3'), +('5', '60', '8', '11621', '23502', '3'), +('5', '60', '6', '28902', '35353', '3'), +('5', '60', '6', '30551', '16198', '3'), +('5', '60', '6', '28919', '16003', '3'), +('5', '60', '6', '26753', '14103', '3'), +('5', '60', '17', '28937', '36633', '3'), +('5', '60', '17', '29457', '31574', '3'), +('5', '60', '17', '27261', '21544', '3'), +('5', '60', '17', '26770', '21157', '3'), +('5', '60', '7', '28926', '17157', '3'), +('5', '60', '7', '7868', '16201', '3'), +('5', '60', '7', '26584', '15464', '3'), +('5', '60', '7', '8288', '14679', '3'), +('5', '60', '9', '31461', '31535', '3'), +('5', '60', '9', '7868', '16201', '3'), +('5', '60', '9', '26584', '15464', '3'), +('5', '60', '9', '31460', '14460', '3'), +('5', '60', '15', '27950', '23112', '3'), +('5', '60', '15', '26749', '18731', '3'), +('5', '60', '15', '63170', '15188', '3'), +('5', '60', '15', '7870', '14838', '3'), +('5', '60', '20', '28890', '32481', '3'), +('5', '60', '20', '31235', '30777', '3'), +('5', '60', '20', '31334', '28637', '3'), +('5', '60', '20', '26551', '28557', '3'), +('5', '60', '12', '25857', '31789', '3'), +('5', '60', '12', '28967', '17425', '3'), +('5', '60', '12', '26774', '15515', '3'), +('5', '60', '12', '31227', '14849', '3'), +('5', '60', '18', '28965', '16777', '3'), +('5', '60', '18', '28932', '14440', '3'), +('5', '60', '18', '8289', '14363', '3'), +('5', '60', '18', '26755', '13446', '3'), +('5', '60', '19', '30569', '35336', '3'), +('5', '60', '19', '28888', '29918', '3'), +('5', '60', '19', '24616', '23667', '3'), +('5', '60', '19', '7871', '14495', '3'), +('5', '60', '13', '28824', '59106', '3'), +('5', '60', '13', '31317', '55295', '3'), +('5', '60', '13', '30530', '55185', '3'), +('5', '60', '13', '27949', '54755', '3'), +('5', '60', '14', '28915', '17804', '3'), +('5', '60', '14', '28970', '17072', '3'), +('5', '60', '14', '26754', '16539', '3'), +('5', '60', '14', '26564', '15019', '3'), +('5', '60', '11', '30539', '39113', '3'), +('5', '60', '11', '28935', '38821', '3'), +('5', '60', '11', '7904', '33938', '3'), +('5', '60', '11', '26563', '28789', '3'), +('5', '60', '22', '8567', '0', '2'), +('5', '60', '22', '10323', '0', '2'), +('5', '60', '22', '9248', '0', '2'), +('5', '60', '22', '30014', '0', '2'), +('5', '60', '1', '2748', '8505', '2'), +('5', '60', '1', '31236', '7910', '2'), +('5', '60', '1', '62234', '7566', '2'), +('5', '60', '1', '5716', '7282', '2'), +('5', '60', '2', '2612', '24841', '2'), +('5', '60', '2', '26025', '24841', '2'), +('5', '60', '2', '29648', '15872', '2'), +('5', '60', '2', '25194', '14332', '2'), +('5', '60', '3', '31233', '16893', '2'), +('5', '60', '3', '31244', '13528', '2'), +('5', '60', '3', '31464', '11699', '2'), +('5', '60', '3', '31378', '10704', '2'), +('5', '60', '5', '27266', '27927', '2'), +('5', '60', '5', '31460', '17033', '2'), +('5', '60', '5', '31234', '14313', '2'), +('5', '60', '5', '31318', '12586', '2'), +('5', '60', '8', '31471', '33357', '2'), +('5', '60', '8', '11621', '24015', '2'), +('5', '60', '8', '27261', '22966', '2'), +('5', '60', '8', '22819', '20515', '2'), +('5', '60', '6', '31472', '15751', '2'), +('5', '60', '6', '31240', '12056', '2'), +('5', '60', '6', '5723', '11885', '2'), +('5', '60', '6', '24070', '11840', '2'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '60', '17', '29457', '34284', '2'), +('5', '60', '17', '27261', '22966', '2'), +('5', '60', '17', '25044', '16046', '2'), +('5', '60', '17', '10845', '15516', '2'), +('5', '60', '7', '5723', '11885', '2'), +('5', '60', '7', '29485', '9381', '2'), +('5', '60', '7', '31381', '8594', '2'), +('5', '60', '7', '31100', '7303', '2'), +('5', '60', '9', '31461', '34358', '2'), +('5', '60', '9', '31460', '17033', '2'), +('5', '60', '9', '5723', '11885', '2'), +('5', '60', '9', '31246', '10994', '2'), +('5', '60', '15', '31231', '16135', '2'), +('5', '60', '15', '25211', '15717', '2'), +('5', '60', '15', '30388', '12552', '2'), +('5', '60', '15', '30385', '11489', '2'), +('5', '60', '20', '31235', '33519', '2'), +('5', '60', '20', '31334', '30483', '2'), +('5', '60', '20', '31364', '30096', '2'), +('5', '60', '20', '31353', '23039', '2'), +('5', '60', '12', '25857', '33662', '2'), +('5', '60', '12', '31227', '18308', '2'), +('5', '60', '12', '31306', '14608', '2'), +('5', '60', '12', '29177', '14000', '2'), +('5', '60', '18', '31103', '10948', '2'), +('5', '60', '18', '31332', '8519', '2'), +('5', '60', '18', '25354', '8368', '2'), +('5', '60', '18', '31005', '8001', '2'), +('5', '60', '19', '24616', '24328', '2'), +('5', '60', '19', '25197', '10472', '2'), +('5', '60', '19', '62371', '9344', '2'), +('5', '60', '19', '29455', '8714', '2'), +('5', '60', '13', '31317', '56800', '2'), +('5', '60', '13', '31304', '55907', '2'), +('5', '60', '13', '2580', '54951', '2'), +('5', '60', '13', '31232', '52692', '2'), +('5', '60', '14', '31462', '19461', '2'), +('5', '60', '14', '31316', '16393', '2'), +('5', '60', '14', '25098', '15669', '2'), +('5', '60', '14', '31211', '15460', '2'), +('5', '60', '11', '29433', '24937', '2'), +('5', '60', '11', '27326', '24937', '2'), +('5', '60', '11', '31469', '24519', '2'), +('5', '60', '11', '45137', '23224', '2'), +('5', '60', '22', '8567', '0', '1'), +('5', '60', '22', '10323', '0', '1'), +('5', '60', '22', '12425', '0', '1'), +('5', '60', '22', '8504', '0', '1'), +('5', '60', '1', '62234', '9304', '1'), +('5', '60', '1', '10912', '7732', '1'), +('5', '60', '1', '5716', '6448', '1'), +('5', '60', '1', '5715', '5996', '1'), +('5', '60', '2', '10913', '17204', '1'), +('5', '60', '2', '1630', '9391', '1'), +('5', '60', '2', '50036', '8701', '1'), +('5', '60', '2', '4841', '7985', '1'), +('5', '60', '3', '46184', '8234', '1'), +('5', '60', '3', '1625', '5704', '1'), +('5', '60', '3', '1544', '4141', '1'), +('5', '60', '3', '4322', '4014', '1'), +('5', '60', '5', '14703', '7150', '1'), +('5', '60', '5', '27705', '5408', '1'), +('5', '60', '5', '8285', '4776', '1'), +('5', '60', '5', '14709', '4672', '1'), +('5', '60', '8', '11621', '25297', '1'), +('5', '60', '8', '1627', '21600', '1'), +('5', '60', '8', '1619', '21565', '1'), +('5', '60', '8', '1628', '14756', '1'), +('5', '60', '6', '5723', '14009', '1'), +('5', '60', '6', '5706', '8883', '1'), +('5', '60', '6', '1557', '7033', '1'), +('5', '60', '6', '11699', '5528', '1'), +('5', '60', '17', '10845', '19525', '1'), +('5', '60', '17', '14370', '13647', '1'), +('5', '60', '17', '4133', '9835', '1'), +('5', '60', '17', '4832', '9453', '1'), +('5', '60', '7', '5723', '14009', '1'), +('5', '60', '7', '62046', '5796', '1'), +('5', '60', '7', '4295', '4590', '1'), +('5', '60', '7', '4343', '4000', '1'), +('5', '60', '9', '5723', '14009', '1'), +('5', '60', '9', '5794', '3858', '1'), +('5', '60', '9', '4294', '3594', '1'), +('5', '60', '9', '4834', '2860', '1'), +('5', '60', '15', '5727', '12068', '1'), +('5', '60', '15', '5728', '8335', '1'), +('5', '60', '15', '10366', '8032', '1'), +('5', '60', '15', '10151', '7200', '1'), +('5', '60', '20', '2704', '22878', '1'), +('5', '60', '20', '1620', '19712', '1'), +('5', '60', '20', '11601', '18534', '1'), +('5', '60', '20', '1623', '12357', '1'), +('5', '60', '12', '4835', '8790', '1'), +('5', '60', '12', '20655', '6444', '1'), +('5', '60', '12', '4845', '4443', '1'), +('5', '60', '12', '3255', '4383', '1'), +('5', '60', '18', '4527', '8220', '1'), +('5', '60', '18', '5711', '5232', '1'), +('5', '60', '18', '11612', '5184', '1'), +('5', '60', '18', '4836', '4636', '1'), +('5', '60', '19', '24616', '25981', '1'), +('5', '60', '19', '4837', '5125', '1'), +('5', '60', '19', '4847', '4474', '1'), +('5', '60', '19', '4318', '4434', '1'), +('5', '60', '13', '27961', '42580', '1'), +('5', '60', '13', '5603', '38904', '1'), +('5', '60', '13', '14383', '37293', '1'), +('5', '60', '13', '45120', '35179', '1'), +('5', '60', '14', '10851', '25757', '1'), +('5', '60', '14', '9402', '24289', '1'), +('5', '60', '14', '9408', '23768', '1'), +('5', '60', '14', '11632', '21128', '1'), +('5', '60', '11', '45137', '25650', '1'), +('5', '60', '11', '5758', '17640', '1'), +('5', '60', '11', '8325', '10134', '1'), +('5', '60', '11', '8408', '10083', '1'), +('5', '61', '22', '21805', '0', '3'), +('5', '61', '22', '61948', '0', '3'), +('5', '61', '22', '21807', '0', '3'), +('5', '61', '22', '12425', '0', '3'), +('5', '61', '1', '7945', '24245', '3'), +('5', '61', '1', '26775', '17215', '3'), +('5', '61', '1', '63170', '15139', '3'), +('5', '61', '1', '29861', '14867', '3'), +('5', '61', '2', '26025', '23579', '3'), +('5', '61', '2', '2612', '23579', '3'), +('5', '61', '2', '26759', '16725', '3'), +('5', '61', '2', '28986', '15934', '3'), +('5', '61', '3', '26773', '18331', '3'), +('5', '61', '3', '26751', '15695', '3'), +('5', '61', '3', '28942', '15679', '3'), +('5', '61', '3', '31233', '14449', '3'), +('5', '61', '5', '28885', '32304', '3'), +('5', '61', '5', '27266', '26859', '3'), +('5', '61', '5', '8364', '21123', '3'), +('5', '61', '5', '7868', '16202', '3'), +('5', '61', '8', '26765', '35824', '3'), +('5', '61', '8', '26766', '35223', '3'), +('5', '61', '8', '31471', '31263', '3'), +('5', '61', '8', '11621', '23502', '3'), +('5', '61', '6', '28902', '35355', '3'), +('5', '61', '6', '30551', '16200', '3'), +('5', '61', '6', '28919', '16005', '3'), +('5', '61', '6', '26753', '14103', '3'), +('5', '61', '17', '28937', '36635', '3'), +('5', '61', '17', '29457', '31574', '3'), +('5', '61', '17', '27261', '21545', '3'), +('5', '61', '17', '26770', '21160', '3'), +('5', '61', '7', '28926', '17157', '3'), +('5', '61', '7', '7868', '16202', '3'), +('5', '61', '7', '26584', '15467', '3'), +('5', '61', '7', '8288', '14679', '3'), +('5', '61', '9', '31461', '31537', '3'), +('5', '61', '9', '7868', '16202', '3'), +('5', '61', '9', '26584', '15467', '3'), +('5', '61', '9', '31460', '14461', '3'), +('5', '61', '15', '27950', '23113', '3'), +('5', '61', '15', '26749', '18734', '3'), +('5', '61', '15', '63170', '15139', '3'), +('5', '61', '15', '7870', '14839', '3'), +('5', '61', '20', '28890', '32481', '3'), +('5', '61', '20', '31235', '30779', '3'), +('5', '61', '20', '31334', '28637', '3'), +('5', '61', '20', '26551', '28561', '3'), +('5', '61', '12', '25857', '31790', '3'), +('5', '61', '12', '28967', '17425', '3'), +('5', '61', '12', '26774', '15517', '3'), +('5', '61', '12', '31227', '14852', '3'), +('5', '61', '18', '28965', '16779', '3'), +('5', '61', '18', '28932', '14443', '3'), +('5', '61', '18', '8289', '14364', '3'), +('5', '61', '18', '26755', '13446', '3'), +('5', '61', '19', '30569', '35337', '3'), +('5', '61', '19', '28888', '29919', '3'), +('5', '61', '19', '24616', '23667', '3'), +('5', '61', '19', '7871', '14498', '3'), +('5', '61', '13', '28824', '59305', '3'), +('5', '61', '13', '31317', '55325', '3'), +('5', '61', '13', '30530', '55243', '3'), +('5', '61', '13', '27949', '54812', '3'), +('5', '61', '14', '28915', '17805', '3'), +('5', '61', '14', '28970', '17073', '3'), +('5', '61', '14', '26754', '16541', '3'), +('5', '61', '14', '26564', '15023', '3'), +('5', '61', '11', '30539', '39217', '3'), +('5', '61', '11', '28935', '38929', '3'), +('5', '61', '11', '7904', '33966', '3'), +('5', '61', '11', '26563', '28790', '3'), +('5', '62', '22', '21805', '0', '3'), +('5', '62', '22', '61948', '0', '3'), +('5', '62', '22', '21807', '0', '3'), +('5', '62', '22', '12425', '0', '3'), +('5', '62', '1', '7945', '24245', '3'), +('5', '62', '1', '26775', '17217', '3'), +('5', '62', '1', '63170', '15091', '3'), +('5', '62', '1', '29861', '14871', '3'), +('5', '62', '2', '26025', '23580', '3'), +('5', '62', '2', '2612', '23580', '3'), +('5', '62', '2', '26759', '16725', '3'), +('5', '62', '2', '28986', '15938', '3'), +('5', '62', '3', '26773', '18334', '3'), +('5', '62', '3', '26751', '15696', '3'), +('5', '62', '3', '28942', '15681', '3'), +('5', '62', '3', '31233', '14450', '3'), +('5', '62', '5', '28885', '32305', '3'), +('5', '62', '5', '27266', '26860', '3'), +('5', '62', '5', '8364', '21126', '3'), +('5', '62', '5', '7868', '16204', '3'), +('5', '62', '8', '26765', '35825', '3'), +('5', '62', '8', '26766', '35226', '3'), +('5', '62', '8', '31471', '31265', '3'), +('5', '62', '8', '11621', '23502', '3'), +('5', '62', '6', '28902', '35357', '3'), +('5', '62', '6', '30551', '16201', '3'), +('5', '62', '6', '28919', '16007', '3'), +('5', '62', '6', '26753', '14103', '3'), +('5', '62', '17', '28937', '36636', '3'), +('5', '62', '17', '29457', '31574', '3'), +('5', '62', '17', '27261', '21546', '3'), +('5', '62', '17', '26770', '21164', '3'), +('5', '62', '7', '28926', '17158', '3'), +('5', '62', '7', '7868', '16204', '3'), +('5', '62', '7', '26584', '15469', '3'), +('5', '62', '7', '8288', '14679', '3'), +('5', '62', '9', '31461', '31538', '3'), +('5', '62', '9', '7868', '16204', '3'), +('5', '62', '9', '26584', '15469', '3'), +('5', '62', '9', '31460', '14463', '3'), +('5', '62', '15', '27950', '23114', '3'), +('5', '62', '15', '26749', '18736', '3'), +('5', '62', '15', '63170', '15091', '3'), +('5', '62', '15', '7870', '14839', '3'), +('5', '62', '20', '28890', '32481', '3'), +('5', '62', '20', '31235', '30781', '3'), +('5', '62', '20', '31334', '28638', '3'), +('5', '62', '20', '26551', '28564', '3'), +('5', '62', '12', '25857', '31790', '3'), +('5', '62', '12', '28967', '17425', '3'), +('5', '62', '12', '26774', '15518', '3'), +('5', '62', '12', '31227', '14854', '3'), +('5', '62', '18', '28965', '16781', '3'), +('5', '62', '18', '28932', '14446', '3'), +('5', '62', '18', '8289', '14364', '3'), +('5', '62', '18', '26755', '13446', '3'), +('5', '62', '19', '30569', '35338', '3'), +('5', '62', '19', '28888', '29920', '3'), +('5', '62', '19', '24616', '23667', '3'), +('5', '62', '19', '7871', '14501', '3'), +('5', '62', '13', '28824', '59504', '3'), +('5', '62', '13', '31317', '55383', '3'), +('5', '62', '13', '30530', '55301', '3'), +('5', '62', '13', '31304', '54920', '3'), +('5', '62', '14', '28915', '17806', '3'), +('5', '62', '14', '28970', '17075', '3'), +('5', '62', '14', '26754', '16544', '3'), +('5', '62', '14', '26564', '15027', '3'), +('5', '62', '11', '30539', '39320', '3'), +('5', '62', '11', '28935', '39029', '3'), +('5', '62', '11', '7904', '33985', '3'), +('5', '62', '11', '26563', '28791', '3'), +('5', '63', '22', '21805', '0', '3'), +('5', '63', '22', '61948', '0', '3'), +('5', '63', '22', '21807', '0', '3'), +('5', '63', '22', '12425', '0', '3'), +('5', '63', '1', '7945', '24246', '3'), +('5', '63', '1', '26775', '17218', '3'), +('5', '63', '1', '63170', '15043', '3'), +('5', '63', '1', '29861', '14875', '3'), +('5', '63', '2', '26025', '23580', '3'), +('5', '63', '2', '2612', '23580', '3'), +('5', '63', '2', '26759', '16725', '3'), +('5', '63', '2', '28986', '15941', '3'), +('5', '63', '3', '26773', '18337', '3'), +('5', '63', '3', '26751', '15697', '3'), +('5', '63', '3', '28942', '15682', '3'), +('5', '63', '3', '31233', '14452', '3'), +('5', '63', '5', '28885', '32307', '3'), +('5', '63', '5', '27266', '26861', '3'), +('5', '63', '5', '8364', '21128', '3'), +('5', '63', '5', '7868', '16205', '3'), +('5', '63', '8', '26765', '35826', '3'), +('5', '63', '8', '26766', '35228', '3'), +('5', '63', '8', '31471', '31266', '3'), +('5', '63', '8', '11621', '23502', '3'), +('5', '63', '6', '28902', '35358', '3'), +('5', '63', '6', '30551', '16202', '3'), +('5', '63', '6', '28919', '16009', '3'), +('5', '63', '6', '26753', '14103', '3'), +('5', '63', '17', '28937', '36638', '3'), +('5', '63', '17', '29457', '31574', '3'), +('5', '63', '17', '27261', '21548', '3'), +('5', '63', '17', '26770', '21167', '3'), +('5', '63', '7', '28926', '17158', '3'), +('5', '63', '7', '7868', '16205', '3'), +('5', '63', '7', '26584', '15471', '3'), +('5', '63', '7', '8288', '14679', '3'), +('5', '63', '9', '31461', '31540', '3'), +('5', '63', '9', '7868', '16205', '3'), +('5', '63', '9', '26584', '15471', '3'), +('5', '63', '9', '31460', '14465', '3'), +('5', '63', '15', '27950', '23115', '3'), +('5', '63', '15', '26749', '18739', '3'), +('5', '63', '15', '63170', '15043', '3'), +('5', '63', '15', '7870', '14840', '3'), +('5', '63', '20', '28890', '32481', '3'), +('5', '63', '20', '31235', '30783', '3'), +('5', '63', '20', '31334', '28639', '3'), +('5', '63', '20', '26551', '28568', '3'), +('5', '63', '12', '25857', '31791', '3'), +('5', '63', '12', '28967', '17425', '3'), +('5', '63', '12', '26774', '15520', '3'), +('5', '63', '12', '31227', '14857', '3'), +('5', '63', '18', '28965', '16783', '3'), +('5', '63', '18', '28932', '14448', '3'), +('5', '63', '18', '8289', '14365', '3'), +('5', '63', '18', '26755', '13446', '3'), +('5', '63', '19', '30569', '35339', '3'), +('5', '63', '19', '28888', '29921', '3'), +('5', '63', '19', '24616', '23667', '3'), +('5', '63', '19', '7871', '14504', '3'), +('5', '63', '13', '28824', '59703', '3'), +('5', '63', '13', '31317', '55441', '3'), +('5', '63', '13', '30530', '55359', '3'), +('5', '63', '13', '31304', '55205', '3'), +('5', '63', '14', '28915', '17807', '3'), +('5', '63', '14', '28970', '17076', '3'), +('5', '63', '14', '26754', '16547', '3'), +('5', '63', '14', '26564', '15031', '3'), +('5', '63', '11', '30539', '39415', '3'), +('5', '63', '11', '28935', '39138', '3'), +('5', '63', '11', '7904', '34013', '3'), +('5', '63', '11', '26563', '28792', '3'), +('5', '64', '22', '21805', '0', '3'), +('5', '64', '22', '61948', '0', '3'), +('5', '64', '22', '21807', '0', '3'), +('5', '64', '22', '12425', '0', '3'), +('5', '64', '1', '7945', '24246', '3'), +('5', '64', '1', '26775', '17220', '3'), +('5', '64', '1', '63170', '14994', '3'), +('5', '64', '1', '29861', '14879', '3'), +('5', '64', '2', '26025', '23581', '3'), +('5', '64', '2', '2612', '23581', '3'), +('5', '64', '2', '26759', '16725', '3'), +('5', '64', '2', '28986', '15945', '3'), +('5', '64', '3', '26773', '18340', '3'), +('5', '64', '3', '26751', '15698', '3'), +('5', '64', '3', '28942', '15684', '3'), +('5', '64', '3', '31233', '14454', '3'), +('5', '64', '5', '28885', '32308', '3'), +('5', '64', '5', '27266', '26863', '3'), +('5', '64', '5', '8364', '21130', '3'), +('5', '64', '5', '7868', '16206', '3'), +('5', '64', '8', '26765', '35827', '3'), +('5', '64', '8', '26766', '35230', '3'), +('5', '64', '8', '31471', '31268', '3'), +('5', '64', '8', '11621', '23502', '3'), +('5', '64', '6', '28902', '35360', '3'), +('5', '64', '6', '30551', '16203', '3'), +('5', '64', '6', '28919', '16011', '3'), +('5', '64', '6', '26753', '14103', '3'), +('5', '64', '17', '28937', '36639', '3'), +('5', '64', '17', '29457', '31574', '3'), +('5', '64', '17', '27261', '21549', '3'), +('5', '64', '17', '26770', '21171', '3'), +('5', '64', '7', '28926', '17159', '3'), +('5', '64', '7', '7868', '16206', '3'), +('5', '64', '7', '26584', '15473', '3'), +('5', '64', '7', '8288', '14679', '3'), +('5', '64', '9', '31461', '31542', '3'), +('5', '64', '9', '7868', '16206', '3'), +('5', '64', '9', '26584', '15473', '3'), +('5', '64', '9', '31460', '14466', '3'), +('5', '64', '15', '27950', '23116', '3'), +('5', '64', '15', '26749', '18741', '3'), +('5', '64', '15', '63170', '14994', '3'), +('5', '64', '15', '7870', '14840', '3'), +('5', '64', '20', '28890', '32481', '3'), +('5', '64', '20', '31235', '30785', '3'), +('5', '64', '20', '31334', '28640', '3'), +('5', '64', '20', '26551', '28571', '3'), +('5', '64', '12', '25857', '31791', '3'), +('5', '64', '12', '28967', '17425', '3'), +('5', '64', '12', '26774', '15521', '3'), +('5', '64', '12', '31227', '14859', '3'), +('5', '64', '18', '28965', '16785', '3'), +('5', '64', '18', '28932', '14451', '3'), +('5', '64', '18', '8289', '14365', '3'), +('5', '64', '18', '26755', '13446', '3'), +('5', '64', '19', '30569', '35340', '3'), +('5', '64', '19', '28888', '29923', '3'), +('5', '64', '19', '24616', '23667', '3'), +('5', '64', '19', '7871', '14507', '3'), +('5', '64', '13', '28824', '59902', '3'), +('5', '64', '13', '31317', '55499', '3'), +('5', '64', '13', '31304', '55462', '3'), +('5', '64', '13', '30530', '55446', '3'), +('5', '64', '14', '28915', '17808', '3'), +('5', '64', '14', '28970', '17077', '3'), +('5', '64', '14', '26754', '16549', '3'), +('5', '64', '14', '26564', '15035', '3'), +('5', '64', '11', '30539', '39518', '3'), +('5', '64', '11', '28935', '39237', '3'), +('5', '64', '11', '7904', '34032', '3'), +('5', '64', '11', '26563', '28793', '3'), +('5', '65', '22', '21805', '0', '7'), +('5', '65', '22', '61948', '0', '7'), +('5', '65', '22', '21807', '0', '7'), +('5', '65', '22', '12425', '0', '7'), +('5', '65', '1', '68949', '57893', '7'), +('5', '65', '1', '7125', '45981', '7'), +('5', '65', '1', '32106', '42957', '7'), +('5', '65', '1', '69166', '41476', '7'), +('5', '65', '2', '28647', '46586', '7'), +('5', '65', '2', '28605', '45685', '7'), +('5', '65', '2', '28648', '45617', '7'), +('5', '65', '2', '69087', '35166', '7'), +('5', '65', '3', '69157', '39116', '7'), +('5', '65', '3', '69069', '35631', '7'), +('5', '65', '3', '69074', '34524', '7'), +('5', '65', '3', '69068', '34095', '7'), +('5', '65', '5', '67625', '42149', '7'), +('5', '65', '5', '69135', '39816', '7'), +('5', '65', '5', '7769', '35632', '7'), +('5', '65', '5', '69097', '35551', '7'), +('5', '65', '8', '69165', '63766', '7'), +('5', '65', '8', '69064', '60107', '7'), +('5', '65', '8', '69072', '58310', '7'), +('5', '65', '8', '69065', '36241', '7'), +('5', '65', '6', '68757', '53726', '7'), +('5', '65', '6', '13674', '49419', '7'), +('5', '65', '6', '69130', '40001', '7'), +('5', '65', '6', '19144', '39239', '7'), +('5', '65', '17', '69150', '44277', '7'), +('5', '65', '17', '28937', '36641', '7'), +('5', '65', '17', '68748', '35759', '7'), +('5', '65', '17', '68966', '35007', '7'), +('5', '65', '7', '16097', '40973', '7'), +('5', '65', '7', '69168', '38044', '7'), +('5', '65', '7', '69079', '34889', '7'), +('5', '65', '7', '68866', '31921', '7'), +('5', '65', '9', '68766', '44833', '7'), +('5', '65', '9', '16097', '40973', '7'), +('5', '65', '9', '69126', '40258', '7'), +('5', '65', '9', '11103', '39837', '7'), +('5', '65', '15', '9959', '39686', '7'), +('5', '65', '15', '69160', '39628', '7'), +('5', '65', '15', '68111', '39404', '7'), +('5', '65', '15', '69131', '38913', '7'), +('5', '65', '20', '16156', '54726', '7'), +('5', '65', '20', '69134', '42416', '7'), +('5', '65', '20', '67625', '42149', '7'), +('5', '65', '20', '16097', '40973', '7'), +('5', '65', '12', '69252', '40113', '7'), +('5', '65', '12', '69083', '34758', '7'), +('5', '65', '12', '25857', '31792', '7'), +('5', '65', '12', '68867', '30396', '7'), +('5', '65', '18', '69146', '42336', '7'), +('5', '65', '18', '68967', '33262', '7'), +('5', '65', '18', '68779', '32118', '7'), +('5', '65', '18', '28650', '30269', '7'), +('5', '65', '19', '19094', '39499', '7'), +('5', '65', '19', '69177', '39380', '7'), +('5', '65', '19', '69075', '35737', '7'), +('5', '65', '19', '30569', '35341', '7'), +('5', '65', '13', '69053', '102744', '7'), +('5', '65', '13', '68835', '97227', '7'), +('5', '65', '13', '69043', '95725', '7'), +('5', '65', '13', '69113', '93612', '7'), +('5', '65', '14', '69161', '45746', '7'), +('5', '65', '14', '69049', '39748', '7'), +('5', '65', '14', '69155', '39228', '7'), +('5', '65', '14', '69048', '36250', '7'), +('5', '65', '11', '69054', '61441', '7'), +('5', '65', '11', '27818', '47722', '7'), +('5', '65', '11', '68662', '46201', '7'), +('5', '65', '11', '27986', '41373', '7'), +('5', '65', '22', '21805', '0', '6'), +('5', '65', '22', '61948', '0', '6'), +('5', '65', '22', '21807', '0', '6'), +('5', '65', '22', '12425', '0', '6'), +('5', '65', '1', '7125', '45981', '6'), +('5', '65', '1', '32106', '42957', '6'), +('5', '65', '1', '7123', '31250', '6'), +('5', '65', '1', '4119', '26493', '6'), +('5', '65', '2', '28647', '46586', '6'), +('5', '65', '2', '28605', '45685', '6'), +('5', '65', '2', '28648', '45617', '6'), +('5', '65', '2', '26025', '23582', '6'), +('5', '65', '3', '26982', '29207', '6'), +('5', '65', '3', '9435', '26549', '6'), +('5', '65', '3', '26983', '24781', '6'), +('5', '65', '3', '29174', '24688', '6'), +('5', '65', '5', '7769', '35632', '6'), +('5', '65', '5', '28885', '32309', '6'), +('5', '65', '5', '8977', '28686', '6'), +('5', '65', '5', '8785', '27980', '6'), +('5', '65', '8', '26765', '35828', '6'), +('5', '65', '8', '26766', '35233', '6'), +('5', '65', '8', '15803', '32856', '6'), +('5', '65', '8', '31471', '31269', '6'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '65', '6', '13674', '49419', '6'), +('5', '65', '6', '19144', '39239', '6'), +('5', '65', '6', '28902', '35361', '6'), +('5', '65', '6', '71006', '33397', '6'), +('5', '65', '17', '28937', '36641', '6'), +('5', '65', '17', '29457', '31574', '6'), +('5', '65', '17', '47645', '30075', '6'), +('5', '65', '17', '15002', '25357', '6'), +('5', '65', '7', '16097', '40973', '6'), +('5', '65', '7', '21995', '25513', '6'), +('5', '65', '7', '68090', '22551', '6'), +('5', '65', '7', '11441', '21882', '6'), +('5', '65', '9', '16097', '40973', '6'), +('5', '65', '9', '11103', '39837', '6'), +('5', '65', '9', '31461', '31543', '6'), +('5', '65', '9', '32100', '29785', '6'), +('5', '65', '15', '9959', '39686', '6'), +('5', '65', '15', '68111', '39404', '6'), +('5', '65', '15', '26989', '30398', '6'), +('5', '65', '15', '10948', '27089', '6'), +('5', '65', '20', '16156', '54726', '6'), +('5', '65', '20', '16097', '40973', '6'), +('5', '65', '20', '15873', '38167', '6'), +('5', '65', '20', '28890', '32481', '6'), +('5', '65', '12', '25857', '31792', '6'), +('5', '65', '12', '28246', '29048', '6'), +('5', '65', '12', '27000', '27608', '6'), +('5', '65', '12', '27990', '22802', '6'), +('5', '65', '18', '28650', '30269', '6'), +('5', '65', '18', '16763', '24419', '6'), +('5', '65', '18', '28965', '16787', '6'), +('5', '65', '18', '68143', '15570', '6'), +('5', '65', '19', '19094', '39499', '6'), +('5', '65', '19', '30569', '35341', '6'), +('5', '65', '19', '28888', '29924', '6'), +('5', '65', '19', '25995', '28474', '6'), +('5', '65', '13', '26092', '88496', '6'), +('5', '65', '13', '22890', '83047', '6'), +('5', '65', '13', '24879', '76830', '6'), +('5', '65', '13', '29172', '73400', '6'), +('5', '65', '14', '27298', '34264', '6'), +('5', '65', '14', '28656', '25831', '6'), +('5', '65', '14', '28657', '24420', '6'), +('5', '65', '14', '68119', '23311', '6'), +('5', '65', '11', '27818', '47722', '6'), +('5', '65', '11', '27986', '41373', '6'), +('5', '65', '11', '29596', '40320', '6'), +('5', '65', '11', '30539', '39994', '6'), +('5', '65', '22', '61948', '0', '5'), +('5', '65', '22', '66397', '0', '5'), +('5', '65', '22', '21805', '0', '5'), +('5', '65', '22', '21807', '0', '5'), +('5', '65', '1', '7125', '45981', '5'), +('5', '65', '1', '32106', '42957', '5'), +('5', '65', '1', '7123', '31250', '5'), +('5', '65', '1', '4119', '26493', '5'), +('5', '65', '2', '28647', '46586', '5'), +('5', '65', '2', '28605', '45685', '5'), +('5', '65', '2', '28648', '45617', '5'), +('5', '65', '2', '26025', '23582', '5'), +('5', '65', '3', '26982', '29207', '5'), +('5', '65', '3', '9435', '26549', '5'), +('5', '65', '3', '26983', '24781', '5'), +('5', '65', '3', '29174', '24688', '5'), +('5', '65', '5', '7769', '35632', '5'), +('5', '65', '5', '28885', '32309', '5'), +('5', '65', '5', '8977', '28686', '5'), +('5', '65', '5', '8785', '27980', '5'), +('5', '65', '8', '26765', '35828', '5'), +('5', '65', '8', '26766', '35233', '5'), +('5', '65', '8', '15803', '32856', '5'), +('5', '65', '8', '31471', '31269', '5'), +('5', '65', '6', '13674', '49419', '5'), +('5', '65', '6', '19144', '39239', '5'), +('5', '65', '6', '28902', '35361', '5'), +('5', '65', '6', '71006', '33397', '5'), +('5', '65', '17', '28937', '36641', '5'), +('5', '65', '17', '29457', '31574', '5'), +('5', '65', '17', '47645', '30075', '5'), +('5', '65', '17', '15002', '25357', '5'), +('5', '65', '7', '16097', '40973', '5'), +('5', '65', '7', '21995', '25513', '5'), +('5', '65', '7', '11441', '21882', '5'), +('5', '65', '7', '27648', '18248', '5'), +('5', '65', '9', '16097', '40973', '5'), +('5', '65', '9', '11103', '39837', '5'), +('5', '65', '9', '31461', '31543', '5'), +('5', '65', '9', '32100', '29785', '5'), +('5', '65', '15', '9959', '39686', '5'), +('5', '65', '15', '26989', '30398', '5'), +('5', '65', '15', '10948', '27089', '5'), +('5', '65', '15', '26993', '26641', '5'), +('5', '65', '20', '16156', '54726', '5'), +('5', '65', '20', '16097', '40973', '5'), +('5', '65', '20', '15873', '38167', '5'), +('5', '65', '20', '28890', '32481', '5'), +('5', '65', '12', '25857', '31792', '5'), +('5', '65', '12', '28246', '29048', '5'), +('5', '65', '12', '27000', '27608', '5'), +('5', '65', '12', '27990', '22802', '5'), +('5', '65', '18', '28650', '30269', '5'), +('5', '65', '18', '16763', '24419', '5'), +('5', '65', '18', '28965', '16787', '5'), +('5', '65', '18', '28932', '14454', '5'), +('5', '65', '19', '19094', '39499', '5'), +('5', '65', '19', '30569', '35341', '5'), +('5', '65', '19', '28888', '29924', '5'), +('5', '65', '19', '25995', '28474', '5'), +('5', '65', '13', '26092', '88496', '5'), +('5', '65', '13', '22890', '83047', '5'), +('5', '65', '13', '24879', '76830', '5'), +('5', '65', '13', '29172', '73400', '5'), +('5', '65', '14', '27298', '34264', '5'), +('5', '65', '14', '28656', '25831', '5'), +('5', '65', '14', '28657', '24420', '5'), +('5', '65', '14', '26788', '22261', '5'), +('5', '65', '11', '27818', '47722', '5'), +('5', '65', '11', '27986', '41373', '5'), +('5', '65', '11', '29596', '40320', '5'), +('5', '65', '11', '30539', '39994', '5'), +('5', '65', '22', '61948', '0', '4'), +('5', '65', '22', '66397', '0', '4'), +('5', '65', '22', '21805', '0', '4'), +('5', '65', '22', '21807', '0', '4'), +('5', '65', '1', '7125', '45981', '4'), +('5', '65', '1', '32106', '42957', '4'), +('5', '65', '1', '7123', '31250', '4'), +('5', '65', '1', '4119', '26493', '4'), +('5', '65', '2', '28647', '46586', '4'), +('5', '65', '2', '28605', '45685', '4'), +('5', '65', '2', '28648', '45617', '4'), +('5', '65', '2', '26025', '23582', '4'), +('5', '65', '3', '26982', '29207', '4'), +('5', '65', '3', '9435', '26549', '4'), +('5', '65', '3', '26983', '24781', '4'), +('5', '65', '3', '29174', '24688', '4'), +('5', '65', '5', '7769', '35632', '4'), +('5', '65', '5', '28885', '32309', '4'), +('5', '65', '5', '8977', '28686', '4'), +('5', '65', '5', '8785', '27980', '4'), +('5', '65', '8', '26765', '35828', '4'), +('5', '65', '8', '26766', '35233', '4'), +('5', '65', '8', '15803', '32856', '4'), +('5', '65', '8', '31471', '31269', '4'), +('5', '65', '6', '13674', '49419', '4'), +('5', '65', '6', '19144', '39239', '4'), +('5', '65', '6', '28902', '35361', '4'), +('5', '65', '6', '71006', '33397', '4'), +('5', '65', '17', '28937', '36641', '4'), +('5', '65', '17', '29457', '31574', '4'), +('5', '65', '17', '47645', '30075', '4'), +('5', '65', '17', '15002', '25357', '4'), +('5', '65', '7', '16097', '40973', '4'), +('5', '65', '7', '21995', '25513', '4'), +('5', '65', '7', '11441', '21882', '4'), +('5', '65', '7', '27648', '18248', '4'), +('5', '65', '9', '16097', '40973', '4'), +('5', '65', '9', '11103', '39837', '4'), +('5', '65', '9', '31461', '31543', '4'), +('5', '65', '9', '32100', '29785', '4'), +('5', '65', '15', '9959', '39686', '4'), +('5', '65', '15', '26989', '30398', '4'), +('5', '65', '15', '10948', '27089', '4'), +('5', '65', '15', '26993', '26641', '4'), +('5', '65', '20', '16156', '54726', '4'), +('5', '65', '20', '16097', '40973', '4'), +('5', '65', '20', '15873', '38167', '4'), +('5', '65', '20', '28890', '32481', '4'), +('5', '65', '12', '25857', '31792', '4'), +('5', '65', '12', '28246', '29048', '4'), +('5', '65', '12', '27000', '27608', '4'), +('5', '65', '12', '27990', '22802', '4'), +('5', '65', '18', '28650', '30269', '4'), +('5', '65', '18', '16763', '24419', '4'), +('5', '65', '18', '28965', '16787', '4'), +('5', '65', '18', '28932', '14454', '4'), +('5', '65', '19', '19094', '39499', '4'), +('5', '65', '19', '30569', '35341', '4'), +('5', '65', '19', '28888', '29924', '4'), +('5', '65', '19', '25995', '28474', '4'), +('5', '65', '13', '26092', '88496', '4'), +('5', '65', '13', '22890', '83047', '4'), +('5', '65', '13', '24879', '76830', '4'), +('5', '65', '13', '29172', '73400', '4'), +('5', '65', '14', '27298', '34264', '4'), +('5', '65', '14', '28656', '25831', '4'), +('5', '65', '14', '28657', '24420', '4'), +('5', '65', '14', '26788', '22261', '4'), +('5', '65', '11', '27818', '47722', '4'), +('5', '65', '11', '27986', '41373', '4'), +('5', '65', '11', '29596', '40320', '4'), +('5', '65', '11', '30539', '39994', '4'), +('5', '66', '22', '21805', '0', '7'), +('5', '66', '22', '61948', '0', '7'), +('5', '66', '22', '21807', '0', '7'), +('5', '66', '22', '12425', '0', '7'), +('5', '66', '1', '68949', '57797', '7'), +('5', '66', '1', '7125', '45983', '7'), +('5', '66', '1', '32106', '42960', '7'), +('5', '66', '1', '69166', '41479', '7'), +('5', '66', '2', '28647', '46589', '7'), +('5', '66', '2', '28605', '45686', '7'), +('5', '66', '2', '28648', '45618', '7'), +('5', '66', '2', '69087', '35171', '7'), +('5', '66', '3', '69157', '39119', '7'), +('5', '66', '3', '69069', '35634', '7'), +('5', '66', '3', '69074', '34527', '7'), +('5', '66', '3', '69068', '34099', '7'), +('5', '66', '5', '67625', '42152', '7'), +('5', '66', '5', '69135', '39821', '7'), +('5', '66', '5', '69097', '35555', '7'), +('5', '66', '5', '7769', '35533', '7'), +('5', '66', '8', '69165', '63769', '7'), +('5', '66', '8', '69064', '60110', '7'), +('5', '66', '8', '69072', '58313', '7'), +('5', '66', '8', '69065', '36244', '7'), +('5', '66', '6', '68757', '53729', '7'), +('5', '66', '6', '13674', '49422', '7'), +('5', '66', '6', '69130', '40004', '7'), +('5', '66', '6', '19144', '39242', '7'), +('5', '66', '17', '69150', '44280', '7'), +('5', '66', '17', '28937', '36642', '7'), +('5', '66', '17', '68748', '35663', '7'), +('5', '66', '17', '68966', '35011', '7'), +('5', '66', '7', '16097', '40976', '7'), +('5', '66', '7', '69168', '38047', '7'), +('5', '66', '7', '69079', '34891', '7'), +('5', '66', '7', '68866', '31925', '7'), +('5', '66', '9', '68766', '44835', '7'), +('5', '66', '9', '16097', '40976', '7'), +('5', '66', '9', '69126', '40261', '7'), +('5', '66', '9', '11103', '39838', '7'), +('5', '66', '15', '9959', '39688', '7'), +('5', '66', '15', '69160', '39630', '7'), +('5', '66', '15', '68111', '39404', '7'), +('5', '66', '15', '69131', '38914', '7'), +('5', '66', '20', '16156', '54729', '7'), +('5', '66', '20', '69134', '42420', '7'), +('5', '66', '20', '67625', '42152', '7'), +('5', '66', '20', '16097', '40976', '7'), +('5', '66', '12', '69252', '40116', '7'), +('5', '66', '12', '69083', '34759', '7'), +('5', '66', '12', '25857', '31792', '7'), +('5', '66', '12', '68867', '30399', '7'), +('5', '66', '18', '69146', '42338', '7'), +('5', '66', '18', '68967', '33265', '7'), +('5', '66', '18', '68779', '32121', '7'), +('5', '66', '18', '28650', '30272', '7'), +('5', '66', '19', '19094', '39500', '7'), +('5', '66', '19', '69177', '39383', '7'), +('5', '66', '19', '69075', '35741', '7'), +('5', '66', '19', '30569', '35342', '7'), +('5', '66', '13', '69053', '102832', '7'), +('5', '66', '13', '68835', '97429', '7'), +('5', '66', '13', '69043', '95918', '7'), +('5', '66', '13', '69113', '93727', '7'), +('5', '66', '14', '69161', '45750', '7'), +('5', '66', '14', '69049', '39751', '7'), +('5', '66', '14', '69155', '39230', '7'), +('5', '66', '14', '69048', '36253', '7'), +('5', '66', '11', '69054', '61613', '7'), +('5', '66', '11', '27818', '47753', '7'), +('5', '66', '11', '68662', '46231', '7'), +('5', '66', '11', '27986', '41403', '7'), +('5', '67', '22', '21805', '0', '7'), +('5', '67', '22', '61948', '0', '7'), +('5', '67', '22', '21807', '0', '7'), +('5', '67', '22', '12425', '0', '7'), +('5', '67', '1', '68949', '57701', '7'), +('5', '67', '1', '7125', '45985', '7'), +('5', '67', '1', '32106', '42963', '7'), +('5', '67', '1', '69166', '41482', '7'), +('5', '67', '2', '28647', '46592', '7'), +('5', '67', '2', '28605', '45687', '7'), +('5', '67', '2', '28648', '45619', '7'), +('5', '67', '2', '69087', '35175', '7'), +('5', '67', '3', '69157', '39122', '7'), +('5', '67', '3', '69069', '35637', '7'), +('5', '67', '3', '69074', '34530', '7'), +('5', '67', '3', '69068', '34103', '7'), +('5', '67', '5', '67625', '42155', '7'), +('5', '67', '5', '69135', '39825', '7'), +('5', '67', '5', '69097', '35558', '7'), +('5', '67', '5', '7769', '35434', '7'), +('5', '67', '8', '69165', '63773', '7'), +('5', '67', '8', '69064', '60113', '7'), +('5', '67', '8', '69072', '58316', '7'), +('5', '67', '8', '69065', '36247', '7'), +('5', '67', '6', '68757', '53732', '7'), +('5', '67', '6', '13674', '49425', '7'), +('5', '67', '6', '69130', '40007', '7'), +('5', '67', '6', '19144', '39245', '7'), +('5', '67', '17', '69150', '44284', '7'), +('5', '67', '17', '28937', '36644', '7'), +('5', '67', '17', '68748', '35567', '7'), +('5', '67', '17', '68966', '35014', '7'), +('5', '67', '7', '16097', '40980', '7'), +('5', '67', '7', '69168', '38050', '7'), +('5', '67', '7', '69079', '34894', '7'), +('5', '67', '7', '68866', '31929', '7'), +('5', '67', '9', '68766', '44838', '7'), +('5', '67', '9', '16097', '40980', '7'), +('5', '67', '9', '69126', '40265', '7'), +('5', '67', '9', '11103', '39840', '7'), +('5', '67', '15', '9959', '39689', '7'), +('5', '67', '15', '69160', '39632', '7'), +('5', '67', '15', '68111', '39405', '7'), +('5', '67', '15', '69131', '38916', '7'), +('5', '67', '20', '16156', '54733', '7'), +('5', '67', '20', '69134', '42424', '7'), +('5', '67', '20', '67625', '42155', '7'), +('5', '67', '20', '16097', '40980', '7'), +('5', '67', '12', '69252', '40119', '7'), +('5', '67', '12', '69083', '34761', '7'), +('5', '67', '12', '25857', '31793', '7'), +('5', '67', '12', '68867', '30401', '7'), +('5', '67', '18', '69146', '42340', '7'), +('5', '67', '18', '68967', '33269', '7'), +('5', '67', '18', '68779', '32125', '7'), +('5', '67', '18', '28650', '30276', '7'), +('5', '67', '19', '19094', '39503', '7'), +('5', '67', '19', '69177', '39387', '7'), +('5', '67', '19', '69075', '35746', '7'), +('5', '67', '19', '30569', '35343', '7'), +('5', '67', '13', '69053', '102921', '7'), +('5', '67', '13', '68835', '97602', '7'), +('5', '67', '13', '69043', '96112', '7'), +('5', '67', '13', '69113', '93814', '7'), +('5', '67', '14', '69161', '45754', '7'), +('5', '67', '14', '69049', '39754', '7'), +('5', '67', '14', '69155', '39232', '7'), +('5', '67', '14', '69048', '36256', '7'), +('5', '67', '11', '69054', '61776', '7'), +('5', '67', '11', '27818', '47776', '7'), +('5', '67', '11', '68662', '46261', '7'), +('5', '67', '11', '27986', '41434', '7'), +('5', '68', '22', '21805', '0', '7'), +('5', '68', '22', '61948', '0', '7'), +('5', '68', '22', '21807', '0', '7'), +('5', '68', '22', '12425', '0', '7'), +('5', '68', '1', '68949', '57605', '7'), +('5', '68', '1', '7125', '45986', '7'), +('5', '68', '1', '32106', '42966', '7'), +('5', '68', '1', '69166', '41485', '7'), +('5', '68', '2', '28647', '46595', '7'), +('5', '68', '2', '28605', '45688', '7'), +('5', '68', '2', '28648', '45620', '7'), +('5', '68', '2', '69087', '35179', '7'), +('5', '68', '3', '69157', '39125', '7'), +('5', '68', '3', '69069', '35640', '7'), +('5', '68', '3', '69074', '34533', '7'), +('5', '68', '3', '69068', '34106', '7'), +('5', '68', '5', '67625', '42158', '7'), +('5', '68', '5', '69135', '39829', '7'), +('5', '68', '5', '69097', '35562', '7'), +('5', '68', '5', '7769', '35335', '7'), +('5', '68', '8', '69165', '63777', '7'), +('5', '68', '8', '69064', '60116', '7'), +('5', '68', '8', '69072', '58319', '7'), +('5', '68', '8', '69065', '36250', '7'), +('5', '68', '6', '68757', '53735', '7'), +('5', '68', '6', '13674', '49427', '7'), +('5', '68', '6', '69130', '40010', '7'), +('5', '68', '6', '19144', '39247', '7'), +('5', '68', '17', '69150', '44288', '7'), +('5', '68', '17', '28937', '36646', '7'), +('5', '68', '17', '68748', '35470', '7'), +('5', '68', '17', '68966', '35017', '7'), +('5', '68', '7', '16097', '40983', '7'), +('5', '68', '7', '69168', '38053', '7'), +('5', '68', '7', '69079', '34896', '7'), +('5', '68', '7', '68866', '31933', '7'), +('5', '68', '9', '68766', '44841', '7'), +('5', '68', '9', '16097', '40983', '7'), +('5', '68', '9', '69126', '40269', '7'), +('5', '68', '9', '11103', '39842', '7'), +('5', '68', '15', '9959', '39691', '7'), +('5', '68', '15', '69160', '39634', '7'), +('5', '68', '15', '68111', '39405', '7'), +('5', '68', '15', '69131', '38917', '7'), +('5', '68', '20', '16156', '54736', '7'), +('5', '68', '20', '69134', '42427', '7'), +('5', '68', '20', '67625', '42158', '7'), +('5', '68', '20', '16097', '40983', '7'), +('5', '68', '12', '69252', '40122', '7'), +('5', '68', '12', '69083', '34762', '7'), +('5', '68', '12', '25857', '31793', '7'), +('5', '68', '12', '68867', '30403', '7'), +('5', '68', '18', '69146', '42341', '7'), +('5', '68', '18', '68967', '33272', '7'), +('5', '68', '18', '68779', '32128', '7'), +('5', '68', '18', '28650', '30279', '7'), +('5', '68', '19', '19094', '39504', '7'), +('5', '68', '19', '69177', '39390', '7'), +('5', '68', '19', '69075', '35750', '7'), +('5', '68', '19', '30569', '35344', '7'), +('5', '68', '13', '69053', '103009', '7'), +('5', '68', '13', '68835', '97804', '7'), +('5', '68', '13', '69043', '96306', '7'), +('5', '68', '13', '68741', '93951', '7'), +('5', '68', '14', '69161', '45758', '7'), +('5', '68', '14', '69049', '39756', '7'), +('5', '68', '14', '69155', '39234', '7'), +('5', '68', '14', '69048', '36259', '7'), +('5', '68', '11', '69054', '61949', '7'), +('5', '68', '11', '27818', '47808', '7'), +('5', '68', '11', '68662', '46291', '7'), +('5', '68', '11', '96532', '42342', '7'), +('5', '69', '22', '21805', '0', '7'), +('5', '69', '22', '61948', '0', '7'), +('5', '69', '22', '21807', '0', '7'), +('5', '69', '22', '12425', '0', '7'), +('5', '69', '1', '68949', '57509', '7'), +('5', '69', '1', '7125', '45988', '7'), +('5', '69', '1', '32106', '42970', '7'), +('5', '69', '1', '69166', '41489', '7'), +('5', '69', '2', '28647', '46598', '7'), +('5', '69', '2', '28605', '45689', '7'), +('5', '69', '2', '28648', '45621', '7'), +('5', '69', '2', '69087', '35184', '7'), +('5', '69', '3', '69157', '39129', '7'), +('5', '69', '3', '69069', '35644', '7'), +('5', '69', '3', '69074', '34536', '7'), +('5', '69', '3', '69068', '34110', '7'), +('5', '69', '5', '67625', '42161', '7'), +('5', '69', '5', '69135', '39834', '7'), +('5', '69', '5', '69097', '35566', '7'), +('5', '69', '5', '68950', '35287', '7'), +('5', '69', '8', '69165', '63780', '7'), +('5', '69', '8', '69064', '60119', '7'), +('5', '69', '8', '69072', '58323', '7'), +('5', '69', '8', '69065', '36253', '7'), +('5', '69', '6', '68757', '53738', '7'), +('5', '69', '6', '13674', '49430', '7'), +('5', '69', '6', '69130', '40013', '7'), +('5', '69', '6', '19144', '39250', '7'), +('5', '69', '17', '69150', '44291', '7'), +('5', '69', '17', '28937', '36647', '7'), +('5', '69', '17', '68748', '35374', '7'), +('5', '69', '17', '68966', '35021', '7'), +('5', '69', '7', '16097', '40987', '7'), +('5', '69', '7', '69168', '38057', '7'), +('5', '69', '7', '69079', '34899', '7'), +('5', '69', '7', '68866', '31937', '7'), +('5', '69', '9', '68766', '44844', '7'), +('5', '69', '9', '16097', '40987', '7'), +('5', '69', '9', '69126', '40273', '7'), +('5', '69', '9', '11103', '39843', '7'), +('5', '69', '15', '9959', '39693', '7'), +('5', '69', '15', '69160', '39636', '7'), +('5', '69', '15', '68111', '39406', '7'), +('5', '69', '15', '69131', '38919', '7'), +('5', '69', '20', '16156', '54739', '7'), +('5', '69', '20', '69134', '42431', '7'), +('5', '69', '20', '67625', '42161', '7'), +('5', '69', '20', '16097', '40987', '7'), +('5', '69', '12', '69252', '40126', '7'), +('5', '69', '12', '69083', '34764', '7'), +('5', '69', '12', '25857', '31794', '7'), +('5', '69', '12', '68867', '30406', '7'), +('5', '69', '18', '69146', '42343', '7'), +('5', '69', '18', '68967', '33276', '7'), +('5', '69', '18', '68779', '32132', '7'), +('5', '69', '18', '28650', '30283', '7'), +('5', '69', '19', '19094', '39506', '7'), +('5', '69', '19', '69177', '39394', '7'), +('5', '69', '19', '69075', '35755', '7'), +('5', '69', '19', '30569', '35346', '7'), +('5', '69', '13', '69053', '103098', '7'), +('5', '69', '13', '68835', '98006', '7'), +('5', '69', '13', '69043', '96499', '7'), +('5', '69', '13', '68741', '94179', '7'), +('5', '69', '14', '69161', '45762', '7'), +('5', '69', '14', '69049', '39759', '7'), +('5', '69', '14', '69155', '39236', '7'), +('5', '69', '14', '69048', '36262', '7'), +('5', '69', '11', '69054', '62121', '7'), +('5', '69', '11', '27818', '47840', '7'), +('5', '69', '11', '68662', '46321', '7'), +('5', '69', '11', '96532', '43022', '7'), +('5', '70', '22', '12425', '0', '11'), +('5', '70', '22', '21807', '0', '11'), +('5', '70', '22', '21805', '0', '11'), +('5', '70', '22', '39342', '0', '11'), +('5', '70', '1', '39276', '72606', '11'), +('5', '70', '1', '83594', '70858', '11'), +('5', '70', '1', '71624', '60494', '11'), +('5', '70', '1', '68949', '57413', '11'), +('5', '70', '2', '70881', '67982', '11'), +('5', '70', '2', '83560', '49682', '11'), +('5', '70', '2', '28647', '46602', '11'), +('5', '70', '2', '28605', '45690', '11'), +('5', '70', '3', '39218', '66427', '11'), +('5', '70', '3', '47245', '61809', '11'), +('5', '70', '3', '39368', '57802', '11'), +('5', '70', '3', '39347', '56032', '11'), +('5', '70', '5', '39359', '55333', '11'), +('5', '70', '5', '39340', '51800', '11'), +('5', '70', '5', '39313', '50551', '11'), +('5', '70', '5', '39262', '50506', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '70', '8', '39330', '72153', '11'), +('5', '70', '8', '69165', '63784', '11'), +('5', '70', '8', '69064', '60122', '11'), +('5', '70', '8', '69072', '58326', '11'), +('5', '70', '6', '39337', '76418', '11'), +('5', '70', '6', '70717', '62738', '11'), +('5', '70', '6', '68757', '53741', '11'), +('5', '70', '6', '83660', '52265', '11'), +('5', '70', '17', '83603', '78959', '11'), +('5', '70', '17', '70886', '52113', '11'), +('5', '70', '17', '69150', '44295', '11'), +('5', '70', '17', '70701', '42501', '11'), +('5', '70', '7', '39267', '49868', '11'), +('5', '70', '7', '83564', '49757', '11'), +('5', '70', '7', '70882', '44783', '11'), +('5', '70', '7', '47204', '41003', '11'), +('5', '70', '9', '39335', '55654', '11'), +('5', '70', '9', '51706', '52747', '11'), +('5', '70', '9', '83652', '52628', '11'), +('5', '70', '9', '39291', '50563', '11'), +('5', '70', '15', '39374', '60212', '11'), +('5', '70', '15', '83458', '55358', '11'), +('5', '70', '15', '70621', '54685', '11'), +('5', '70', '15', '71117', '54550', '11'), +('5', '70', '20', '47283', '65767', '11'), +('5', '70', '20', '39365', '60598', '11'), +('5', '70', '20', '83533', '60122', '11'), +('5', '70', '20', '16156', '54742', '11'), +('5', '70', '12', '47212', '59767', '11'), +('5', '70', '12', '71075', '53143', '11'), +('5', '70', '12', '83568', '47569', '11'), +('5', '70', '12', '70884', '43652', '11'), +('5', '70', '18', '83607', '55097', '11'), +('5', '70', '18', '70887', '48943', '11'), +('5', '70', '18', '69146', '42345', '11'), +('5', '70', '18', '47200', '42264', '11'), +('5', '70', '19', '39355', '54742', '11'), +('5', '70', '19', '83572', '49501', '11'), +('5', '70', '19', '70885', '44770', '11'), +('5', '70', '19', '83550', '42155', '11'), +('5', '70', '13', '83639', '144704', '11'), +('5', '70', '13', '39254', '138881', '11'), +('5', '70', '13', '39294', '138707', '11'), +('5', '70', '13', '83581', '135240', '11'), +('5', '70', '14', '39341', '61411', '11'), +('5', '70', '14', '39372', '60645', '11'), +('5', '70', '14', '83640', '57345', '11'), +('5', '70', '14', '83656', '55503', '11'), +('5', '70', '11', '39331', '74656', '11'), +('5', '70', '11', '83582', '74502', '11'), +('5', '70', '11', '39311', '73491', '11'), +('5', '70', '11', '47325', '68373', '11'), +('5', '70', '22', '21807', '0', '10'), +('5', '70', '22', '21805', '0', '10'), +('5', '70', '22', '61948', '0', '10'), +('5', '70', '22', '12425', '0', '10'), +('5', '70', '1', '83594', '70858', '10'), +('5', '70', '1', '71624', '60494', '10'), +('5', '70', '1', '68949', '57413', '10'), +('5', '70', '1', '83630', '50188', '10'), +('5', '70', '2', '70881', '67982', '10'), +('5', '70', '2', '83560', '49682', '10'), +('5', '70', '2', '28647', '46602', '10'), +('5', '70', '2', '28605', '45690', '10'), +('5', '70', '3', '47245', '61809', '10'), +('5', '70', '3', '83658', '53250', '10'), +('5', '70', '3', '83636', '50164', '10'), +('5', '70', '3', '83617', '50045', '10'), +('5', '70', '5', '83651', '49150', '10'), +('5', '70', '5', '83599', '48523', '10'), +('5', '70', '5', '47275', '46337', '10'), +('5', '70', '5', '89308', '46164', '10'), +('5', '70', '8', '69165', '63784', '10'), +('5', '70', '8', '69064', '60122', '10'), +('5', '70', '8', '69072', '58326', '10'), +('5', '70', '8', '70662', '52679', '10'), +('5', '70', '6', '70717', '62738', '10'), +('5', '70', '6', '68757', '53741', '10'), +('5', '70', '6', '83660', '52265', '10'), +('5', '70', '6', '13674', '49433', '10'), +('5', '70', '17', '83603', '78959', '10'), +('5', '70', '17', '70886', '52113', '10'), +('5', '70', '17', '69150', '44295', '10'), +('5', '70', '17', '70701', '42501', '10'), +('5', '70', '7', '83564', '49757', '10'), +('5', '70', '7', '70882', '44783', '10'), +('5', '70', '7', '47204', '41003', '10'), +('5', '70', '7', '16097', '40990', '10'), +('5', '70', '9', '83652', '52628', '10'), +('5', '70', '9', '68766', '44846', '10'), +('5', '70', '9', '70883', '43413', '10'), +('5', '70', '9', '83462', '41531', '10'), +('5', '70', '15', '83458', '55358', '10'), +('5', '70', '15', '70621', '54685', '10'), +('5', '70', '15', '71117', '54550', '10'), +('5', '70', '15', '83661', '52186', '10'), +('5', '70', '20', '47283', '65767', '10'), +('5', '70', '20', '83533', '60122', '10'), +('5', '70', '20', '16156', '54742', '10'), +('5', '70', '20', '70604', '51396', '10'), +('5', '70', '12', '47212', '59767', '10'), +('5', '70', '12', '71075', '53143', '10'), +('5', '70', '12', '83568', '47569', '10'), +('5', '70', '12', '70884', '43652', '10'), +('5', '70', '18', '83607', '55097', '10'), +('5', '70', '18', '70887', '48943', '10'), +('5', '70', '18', '69146', '42345', '10'), +('5', '70', '18', '47200', '42264', '10'), +('5', '70', '19', '83572', '49501', '10'), +('5', '70', '19', '70885', '44770', '10'), +('5', '70', '19', '83550', '42155', '10'), +('5', '70', '19', '69439', '41524', '10'), +('5', '70', '13', '83639', '144704', '10'), +('5', '70', '13', '83581', '135240', '10'), +('5', '70', '13', '83579', '131906', '10'), +('5', '70', '13', '47316', '131203', '10'), +('5', '70', '14', '83640', '57345', '10'), +('5', '70', '14', '83656', '55503', '10'), +('5', '70', '14', '39315', '52081', '10'), +('5', '70', '14', '47310', '51521', '10'), +('5', '70', '11', '83582', '74502', '10'), +('5', '70', '11', '47325', '68373', '10'), +('5', '70', '11', '83539', '67460', '10'), +('5', '70', '11', '69054', '63286', '10'), +('5', '70', '22', '21805', '0', '9'), +('5', '70', '22', '61948', '0', '9'), +('5', '70', '22', '21807', '0', '9'), +('5', '70', '22', '12425', '0', '9'), +('5', '70', '1', '71624', '60494', '9'), +('5', '70', '1', '68949', '57413', '9'), +('5', '70', '1', '71668', '46177', '9'), +('5', '70', '1', '7125', '45990', '9'), +('5', '70', '2', '70881', '67982', '9'), +('5', '70', '2', '28647', '46602', '9'), +('5', '70', '2', '28605', '45690', '9'), +('5', '70', '2', '28648', '45623', '9'), +('5', '70', '3', '47245', '61809', '9'), +('5', '70', '3', '71667', '46815', '9'), +('5', '70', '3', '47299', '44586', '9'), +('5', '70', '3', '47300', '43352', '9'), +('5', '70', '5', '47275', '46337', '9'), +('5', '70', '5', '47273', '44650', '9'), +('5', '70', '5', '47274', '42805', '9'), +('5', '70', '5', '67625', '42164', '9'), +('5', '70', '8', '69165', '63784', '9'), +('5', '70', '8', '69064', '60122', '9'), +('5', '70', '8', '69072', '58326', '9'), +('5', '70', '8', '70662', '52679', '9'), +('5', '70', '6', '70717', '62738', '9'), +('5', '70', '6', '68757', '53741', '9'), +('5', '70', '6', '13674', '49433', '9'), +('5', '70', '6', '47278', '45553', '9'), +('5', '70', '17', '70886', '52113', '9'), +('5', '70', '17', '69150', '44295', '9'), +('5', '70', '17', '70701', '42501', '9'), +('5', '70', '17', '71638', '39778', '9'), +('5', '70', '7', '70882', '44783', '9'), +('5', '70', '7', '47204', '41003', '9'), +('5', '70', '7', '16097', '40990', '9'), +('5', '70', '7', '69168', '38060', '9'), +('5', '70', '9', '68766', '44846', '9'), +('5', '70', '9', '70883', '43413', '9'), +('5', '70', '9', '16097', '40990', '9'), +('5', '70', '9', '69126', '40277', '9'), +('5', '70', '15', '70621', '54685', '9'), +('5', '70', '15', '71117', '54550', '9'), +('5', '70', '15', '47290', '44627', '9'), +('5', '70', '15', '47291', '44065', '9'), +('5', '70', '20', '47283', '65767', '9'), +('5', '70', '20', '16156', '54742', '9'), +('5', '70', '20', '70604', '51396', '9'), +('5', '70', '20', '70975', '47215', '9'), +('5', '70', '12', '47212', '59767', '9'), +('5', '70', '12', '71075', '53143', '9'), +('5', '70', '12', '70884', '43652', '9'), +('5', '70', '12', '69252', '40129', '9'), +('5', '70', '18', '70887', '48943', '9'), +('5', '70', '18', '69146', '42345', '9'), +('5', '70', '18', '47200', '42264', '9'), +('5', '70', '18', '71646', '39621', '9'), +('5', '70', '19', '70885', '44770', '9'), +('5', '70', '19', '69439', '41524', '9'), +('5', '70', '19', '19094', '39509', '9'), +('5', '70', '19', '69177', '39398', '9'), +('5', '70', '13', '47316', '131203', '9'), +('5', '70', '13', '47320', '128042', '9'), +('5', '70', '13', '47324', '127203', '9'), +('5', '70', '13', '71663', '126157', '9'), +('5', '70', '14', '39315', '52081', '9'), +('5', '70', '14', '47310', '51521', '9'), +('5', '70', '14', '71669', '48317', '9'), +('5', '70', '14', '47252', '46627', '9'), +('5', '70', '11', '47325', '68373', '9'), +('5', '70', '11', '69054', '63286', '9'), +('5', '70', '11', '47265', '61480', '9'), +('5', '70', '11', '70628', '55310', '9'), +('5', '70', '22', '21805', '0', '8'), +('5', '70', '22', '61948', '0', '8'), +('5', '70', '22', '21807', '0', '8'), +('5', '70', '22', '12425', '0', '8'), +('5', '70', '1', '68949', '57413', '8'), +('5', '70', '1', '7125', '45990', '8'), +('5', '70', '1', '47287', '45792', '8'), +('5', '70', '1', '47289', '43708', '8'), +('5', '70', '2', '70881', '67982', '8'), +('5', '70', '2', '28647', '46602', '8'), +('5', '70', '2', '28605', '45690', '8'), +('5', '70', '2', '28648', '45623', '8'), +('5', '70', '3', '47245', '61809', '8'), +('5', '70', '3', '47299', '44586', '8'), +('5', '70', '3', '47300', '43352', '8'), +('5', '70', '3', '47301', '42328', '8'), +('5', '70', '5', '47275', '46337', '8'), +('5', '70', '5', '47273', '44650', '8'), +('5', '70', '5', '47274', '42805', '8'), +('5', '70', '5', '67625', '42164', '8'), +('5', '70', '8', '69165', '63784', '8'), +('5', '70', '8', '69064', '60122', '8'), +('5', '70', '8', '69072', '58326', '8'), +('5', '70', '8', '70662', '52679', '8'), +('5', '70', '6', '70717', '62738', '8'), +('5', '70', '6', '68757', '53741', '8'), +('5', '70', '6', '13674', '49433', '8'), +('5', '70', '6', '47278', '45553', '8'), +('5', '70', '17', '70886', '52113', '8'), +('5', '70', '17', '69150', '44295', '8'), +('5', '70', '17', '70701', '42501', '8'), +('5', '70', '17', '28937', '36649', '8'), +('5', '70', '7', '70882', '44783', '8'), +('5', '70', '7', '47204', '41003', '8'), +('5', '70', '7', '16097', '40990', '8'), +('5', '70', '7', '69168', '38060', '8'), +('5', '70', '9', '68766', '44846', '8'), +('5', '70', '9', '70883', '43413', '8'), +('5', '70', '9', '16097', '40990', '8'), +('5', '70', '9', '69126', '40277', '8'), +('5', '70', '15', '70621', '54685', '8'), +('5', '70', '15', '71117', '54550', '8'), +('5', '70', '15', '47290', '44627', '8'), +('5', '70', '15', '47291', '44065', '8'), +('5', '70', '20', '47283', '65767', '8'), +('5', '70', '20', '16156', '54742', '8'), +('5', '70', '20', '70604', '51396', '8'), +('5', '70', '20', '47282', '45524', '8'), +('5', '70', '12', '47212', '59767', '8'), +('5', '70', '12', '71075', '53143', '8'), +('5', '70', '12', '70884', '43652', '8'), +('5', '70', '12', '69252', '40129', '8'), +('5', '70', '18', '70887', '48943', '8'), +('5', '70', '18', '69146', '42345', '8'), +('5', '70', '18', '47200', '42264', '8'), +('5', '70', '18', '71094', '35538', '8'), +('5', '70', '19', '70885', '44770', '8'), +('5', '70', '19', '69439', '41524', '8'), +('5', '70', '19', '19094', '39509', '8'), +('5', '70', '19', '69177', '39398', '8'), +('5', '70', '13', '47316', '130884', '8'), +('5', '70', '13', '47320', '127617', '8'), +('5', '70', '13', '47324', '126778', '8'), +('5', '70', '13', '48136', '120308', '8'), +('5', '70', '14', '39315', '52081', '8'), +('5', '70', '14', '47310', '51521', '8'), +('5', '70', '14', '47252', '46627', '8'), +('5', '70', '14', '69161', '45766', '8'), +('5', '70', '11', '47325', '68373', '8'), +('5', '70', '11', '69054', '63002', '8'), +('5', '70', '11', '47265', '61480', '8'), +('5', '70', '11', '70628', '55310', '8'), +('5', '71', '22', '12425', '0', '11'), +('5', '71', '22', '21807', '0', '11'), +('5', '71', '22', '21805', '0', '11'), +('5', '71', '22', '39342', '0', '11'), +('5', '71', '1', '39276', '72609', '11'), +('5', '71', '1', '83594', '70862', '11'), +('5', '71', '1', '71624', '60497', '11'), +('5', '71', '1', '68949', '57317', '11'), +('5', '71', '2', '70881', '67985', '11'), +('5', '71', '2', '83560', '49688', '11'), +('5', '71', '2', '28647', '46605', '11'), +('5', '71', '2', '28605', '45691', '11'), +('5', '71', '3', '39218', '66430', '11'), +('5', '71', '3', '47245', '61811', '11'), +('5', '71', '3', '39368', '57806', '11'), +('5', '71', '3', '39347', '56037', '11'), +('5', '71', '5', '39359', '55336', '11'), +('5', '71', '5', '39340', '51804', '11'), +('5', '71', '5', '39313', '50556', '11'), +('5', '71', '5', '39262', '50509', '11'), +('5', '71', '8', '39330', '72155', '11'), +('5', '71', '8', '69165', '63788', '11'), +('5', '71', '8', '69064', '60125', '11'), +('5', '71', '8', '69072', '58329', '11'), +('5', '71', '6', '39337', '76421', '11'), +('5', '71', '6', '70717', '62742', '11'), +('5', '71', '6', '68757', '53744', '11'), +('5', '71', '6', '83660', '52268', '11'), +('5', '71', '17', '83603', '78964', '11'), +('5', '71', '17', '70886', '52118', '11'), +('5', '71', '17', '69150', '44298', '11'), +('5', '71', '17', '70701', '42506', '11'), +('5', '71', '7', '39267', '49871', '11'), +('5', '71', '7', '83564', '49763', '11'), +('5', '71', '7', '70882', '44789', '11'), +('5', '71', '7', '47204', '41006', '11'), +('5', '71', '9', '39335', '55659', '11'), +('5', '71', '9', '51706', '52751', '11'), +('5', '71', '9', '83652', '52631', '11'), +('5', '71', '9', '39291', '50566', '11'), +('5', '71', '15', '39374', '60217', '11'), +('5', '71', '15', '83458', '55362', '11'), +('5', '71', '15', '70621', '54689', '11'), +('5', '71', '15', '71117', '54555', '11'), +('5', '71', '20', '47283', '65768', '11'), +('5', '71', '20', '39365', '60603', '11'), +('5', '71', '20', '83533', '60125', '11'), +('5', '71', '20', '16156', '54745', '11'), +('5', '71', '12', '47212', '59771', '11'), +('5', '71', '12', '71075', '53146', '11'), +('5', '71', '12', '83568', '47575', '11'), +('5', '71', '12', '70884', '43653', '11'), +('5', '71', '18', '83607', '55102', '11'), +('5', '71', '18', '70887', '48947', '11'), +('5', '71', '18', '69146', '42347', '11'), +('5', '71', '18', '47200', '42268', '11'), +('5', '71', '19', '39355', '54747', '11'), +('5', '71', '19', '83572', '49507', '11'), +('5', '71', '19', '70885', '44773', '11'), +('5', '71', '19', '83550', '42159', '11'), +('5', '71', '13', '83639', '145388', '11'), +('5', '71', '13', '39254', '139209', '11'), +('5', '71', '13', '39294', '139035', '11'), +('5', '71', '13', '83581', '135357', '11'), +('5', '71', '14', '39341', '61413', '11'), +('5', '71', '14', '39372', '60651', '11'), +('5', '71', '14', '83640', '57350', '11'), +('5', '71', '14', '83656', '55508', '11'), +('5', '71', '11', '39331', '74684', '11'), +('5', '71', '11', '83582', '74542', '11'), +('5', '71', '11', '39311', '73496', '11'), +('5', '71', '11', '47325', '68404', '11'), +('5', '72', '22', '12425', '0', '11'), +('5', '72', '22', '21807', '0', '11'), +('5', '72', '22', '21805', '0', '11'), +('5', '72', '22', '39342', '0', '11'), +('5', '72', '1', '39276', '72613', '11'), +('5', '72', '1', '83594', '70867', '11'), +('5', '72', '1', '71624', '60500', '11'), +('5', '72', '1', '68949', '57222', '11'), +('5', '72', '2', '70881', '67988', '11'), +('5', '72', '2', '83560', '49694', '11'), +('5', '72', '2', '28647', '46608', '11'), +('5', '72', '2', '28605', '45692', '11'), +('5', '72', '3', '39218', '66434', '11'), +('5', '72', '3', '47245', '61813', '11'), +('5', '72', '3', '39368', '57810', '11'), +('5', '72', '3', '39347', '56042', '11'), +('5', '72', '5', '39359', '55340', '11'), +('5', '72', '5', '39340', '51809', '11'), +('5', '72', '5', '39313', '50561', '11'), +('5', '72', '5', '39262', '50513', '11'), +('5', '72', '8', '39330', '72157', '11'), +('5', '72', '8', '69165', '63791', '11'), +('5', '72', '8', '69064', '60129', '11'), +('5', '72', '8', '69072', '58333', '11'), +('5', '72', '6', '39337', '76425', '11'), +('5', '72', '6', '70717', '62746', '11'), +('5', '72', '6', '68757', '53747', '11'), +('5', '72', '6', '83660', '52272', '11'), +('5', '72', '17', '83603', '78969', '11'), +('5', '72', '17', '70886', '52122', '11'), +('5', '72', '17', '69150', '44302', '11'), +('5', '72', '17', '70701', '42511', '11'), +('5', '72', '7', '39267', '49875', '11'), +('5', '72', '7', '83564', '49769', '11'), +('5', '72', '7', '70882', '44794', '11'), +('5', '72', '7', '47204', '41009', '11'), +('5', '72', '9', '39335', '55664', '11'), +('5', '72', '9', '51706', '52756', '11'), +('5', '72', '9', '83652', '52635', '11'), +('5', '72', '9', '39291', '50570', '11'), +('5', '72', '15', '39374', '60223', '11'), +('5', '72', '15', '83458', '55365', '11'), +('5', '72', '15', '70621', '54693', '11'), +('5', '72', '15', '71117', '54560', '11'), +('5', '72', '20', '47283', '65770', '11'), +('5', '72', '20', '39365', '60608', '11'), +('5', '72', '20', '83533', '60128', '11'), +('5', '72', '20', '16156', '54749', '11'), +('5', '72', '12', '47212', '59775', '11'), +('5', '72', '12', '71075', '53149', '11'), +('5', '72', '12', '83568', '47581', '11'), +('5', '72', '12', '70884', '43655', '11'), +('5', '72', '18', '83607', '55107', '11'), +('5', '72', '18', '70887', '48951', '11'), +('5', '72', '18', '69146', '42349', '11'), +('5', '72', '18', '47200', '42272', '11'), +('5', '72', '19', '39355', '54752', '11'), +('5', '72', '19', '83572', '49513', '11'), +('5', '72', '19', '70885', '44777', '11'), +('5', '72', '19', '83550', '42163', '11'), +('5', '72', '13', '83639', '146073', '11'), +('5', '72', '13', '39254', '139536', '11'), +('5', '72', '13', '39294', '139363', '11'), +('5', '72', '13', '83581', '135474', '11'), +('5', '72', '14', '39341', '61416', '11'), +('5', '72', '14', '39372', '60657', '11'), +('5', '72', '14', '83640', '57354', '11'), +('5', '72', '14', '83656', '55514', '11'), +('5', '72', '11', '39331', '74722', '11'), +('5', '72', '11', '83582', '74583', '11'), +('5', '72', '11', '39311', '73501', '11'), +('5', '72', '11', '47325', '68445', '11'), +('5', '73', '22', '12425', '0', '11'), +('5', '73', '22', '21807', '0', '11'), +('5', '73', '22', '21805', '0', '11'), +('5', '73', '22', '39342', '0', '11'), +('5', '73', '1', '39276', '72616', '11'), +('5', '73', '1', '83594', '70871', '11'), +('5', '73', '1', '71624', '60503', '11'), +('5', '73', '1', '68949', '57126', '11'), +('5', '73', '2', '70881', '67991', '11'), +('5', '73', '2', '83560', '49701', '11'), +('5', '73', '2', '28647', '46611', '11'), +('5', '73', '2', '28605', '45693', '11'), +('5', '73', '3', '39218', '66437', '11'), +('5', '73', '3', '47245', '61815', '11'), +('5', '73', '3', '39368', '57814', '11'), +('5', '73', '3', '39347', '56047', '11'), +('5', '73', '5', '39359', '55344', '11'), +('5', '73', '5', '39340', '51813', '11'), +('5', '73', '5', '39313', '50565', '11'), +('5', '73', '5', '39262', '50516', '11'), +('5', '73', '8', '39330', '72158', '11'), +('5', '73', '8', '69165', '63795', '11'), +('5', '73', '8', '69064', '60132', '11'), +('5', '73', '8', '69072', '58336', '11'), +('5', '73', '6', '39337', '76429', '11'), +('5', '73', '6', '70717', '62750', '11'), +('5', '73', '6', '68757', '53750', '11'), +('5', '73', '6', '83660', '52275', '11'), +('5', '73', '17', '83603', '78974', '11'), +('5', '73', '17', '70886', '52127', '11'), +('5', '73', '17', '69150', '44306', '11'), +('5', '73', '17', '70701', '42517', '11'), +('5', '73', '7', '39267', '49879', '11'), +('5', '73', '7', '83564', '49775', '11'), +('5', '73', '7', '70882', '44800', '11'), +('5', '73', '7', '47204', '41012', '11'), +('5', '73', '9', '39335', '55669', '11'), +('5', '73', '9', '51706', '52761', '11'), +('5', '73', '9', '83652', '52639', '11'), +('5', '73', '9', '39291', '50574', '11'), +('5', '73', '15', '39374', '60228', '11'), +('5', '73', '15', '83458', '55369', '11'), +('5', '73', '15', '70621', '54696', '11'), +('5', '73', '15', '71117', '54565', '11'), +('5', '73', '20', '47283', '65772', '11'), +('5', '73', '20', '39365', '60613', '11'), +('5', '73', '20', '83533', '60130', '11'), +('5', '73', '20', '16156', '54752', '11'), +('5', '73', '12', '47212', '59778', '11'), +('5', '73', '12', '71075', '53153', '11'), +('5', '73', '12', '83568', '47588', '11'), +('5', '73', '12', '70884', '43657', '11'), +('5', '73', '18', '83607', '55113', '11'), +('5', '73', '18', '70887', '48955', '11'), +('5', '73', '18', '69146', '42350', '11'), +('5', '73', '18', '47200', '42275', '11'), +('5', '73', '19', '39355', '54757', '11'), +('5', '73', '19', '83572', '49519', '11'), +('5', '73', '19', '70885', '44780', '11'), +('5', '73', '19', '83550', '42167', '11'), +('5', '73', '13', '83639', '146758', '11'), +('5', '73', '13', '39254', '139864', '11'), +('5', '73', '13', '39294', '139691', '11'), +('5', '73', '13', '83581', '135591', '11'), +('5', '73', '14', '39341', '61419', '11'), +('5', '73', '14', '39372', '60663', '11'), +('5', '73', '14', '83640', '57359', '11'), +('5', '73', '14', '83656', '55519', '11'), +('5', '73', '11', '39331', '74750', '11'), +('5', '73', '11', '83582', '74623', '11'), +('5', '73', '11', '39311', '73505', '11'), +('5', '73', '11', '47325', '68476', '11'), +('5', '74', '22', '12425', '0', '11'), +('5', '74', '22', '21807', '0', '11'), +('5', '74', '22', '21805', '0', '11'), +('5', '74', '22', '39342', '0', '11'), +('5', '74', '1', '39276', '72620', '11'), +('5', '74', '1', '83594', '70875', '11'), +('5', '74', '1', '71624', '60507', '11'), +('5', '74', '1', '68949', '57030', '11'), +('5', '74', '2', '70881', '67995', '11'), +('5', '74', '2', '83560', '49707', '11'), +('5', '74', '2', '28647', '46615', '11'), +('5', '74', '2', '28605', '45694', '11'), +('5', '74', '3', '39218', '66440', '11'), +('5', '74', '3', '47245', '61817', '11'), +('5', '74', '3', '39368', '57819', '11'), +('5', '74', '3', '39347', '56052', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '74', '5', '39359', '55348', '11'), +('5', '74', '5', '39340', '51817', '11'), +('5', '74', '5', '39313', '50570', '11'), +('5', '74', '5', '39262', '50519', '11'), +('5', '74', '8', '39330', '72160', '11'), +('5', '74', '8', '69165', '63799', '11'), +('5', '74', '8', '69064', '60135', '11'), +('5', '74', '8', '69072', '58340', '11'), +('5', '74', '6', '39337', '76433', '11'), +('5', '74', '6', '70717', '62754', '11'), +('5', '74', '6', '68757', '53753', '11'), +('5', '74', '6', '83660', '52279', '11'), +('5', '74', '17', '83603', '78980', '11'), +('5', '74', '17', '70886', '52132', '11'), +('5', '74', '17', '69150', '44310', '11'), +('5', '74', '17', '70701', '42522', '11'), +('5', '74', '7', '39267', '49882', '11'), +('5', '74', '7', '83564', '49781', '11'), +('5', '74', '7', '70882', '44805', '11'), +('5', '74', '7', '47204', '41015', '11'), +('5', '74', '9', '39335', '55674', '11'), +('5', '74', '9', '51706', '52765', '11'), +('5', '74', '9', '83652', '52643', '11'), +('5', '74', '9', '39291', '50577', '11'), +('5', '74', '15', '39374', '60233', '11'), +('5', '74', '15', '83458', '55373', '11'), +('5', '74', '15', '70621', '54700', '11'), +('5', '74', '15', '71117', '54569', '11'), +('5', '74', '20', '47283', '65774', '11'), +('5', '74', '20', '39365', '60618', '11'), +('5', '74', '20', '83533', '60133', '11'), +('5', '74', '20', '16156', '54755', '11'), +('5', '74', '12', '47212', '59782', '11'), +('5', '74', '12', '71075', '53156', '11'), +('5', '74', '12', '83568', '47594', '11'), +('5', '74', '12', '70884', '43659', '11'), +('5', '74', '18', '83607', '55118', '11'), +('5', '74', '18', '70887', '48960', '11'), +('5', '74', '18', '69146', '42352', '11'), +('5', '74', '18', '47200', '42279', '11'), +('5', '74', '19', '39355', '54762', '11'), +('5', '74', '19', '83572', '49526', '11'), +('5', '74', '19', '70885', '44783', '11'), +('5', '74', '19', '83550', '42171', '11'), +('5', '74', '13', '83639', '147442', '11'), +('5', '74', '13', '39254', '140220', '11'), +('5', '74', '13', '39294', '140019', '11'), +('5', '74', '13', '83581', '135709', '11'), +('5', '74', '14', '39341', '61421', '11'), +('5', '74', '14', '39372', '60669', '11'), +('5', '74', '14', '83640', '57363', '11'), +('5', '74', '14', '83656', '55525', '11'), +('5', '74', '11', '39331', '74779', '11'), +('5', '74', '11', '83582', '74664', '11'), +('5', '74', '11', '39311', '73510', '11'), +('5', '74', '11', '47325', '68517', '11'), +('5', '75', '22', '12425', '0', '13'), +('5', '75', '22', '21807', '0', '13'), +('5', '75', '22', '39342', '0', '13'), +('5', '75', '22', '7867', '0', '13'), +('5', '75', '1', '80676', '81201', '13'), +('5', '75', '1', '80659', '80696', '13'), +('5', '75', '1', '80648', '76266', '13'), +('5', '75', '1', '80639', '74076', '13'), +('5', '75', '2', '70881', '67998', '13'), +('5', '75', '2', '53389', '65764', '13'), +('5', '75', '2', '83560', '49713', '13'), +('5', '75', '2', '28647', '46618', '13'), +('5', '75', '3', '80637', '76396', '13'), +('5', '75', '3', '39218', '66443', '13'), +('5', '75', '3', '46873', '65378', '13'), +('5', '75', '3', '46874', '64671', '13'), +('5', '75', '5', '46867', '89593', '13'), +('5', '75', '5', '80670', '82056', '13'), +('5', '75', '5', '80616', '72869', '13'), +('5', '75', '5', '46934', '70505', '13'), +('5', '75', '8', '46885', '95729', '13'), +('5', '75', '8', '80677', '83632', '13'), +('5', '75', '8', '80649', '74297', '13'), +('5', '75', '8', '39330', '72162', '13'), +('5', '75', '6', '80638', '99085', '13'), +('5', '75', '6', '39337', '76437', '13'), +('5', '75', '6', '46884', '71772', '13'), +('5', '75', '6', '46933', '71724', '13'), +('5', '75', '17', '83603', '78985', '13'), +('5', '75', '17', '53394', '69462', '13'), +('5', '75', '17', '46809', '56380', '13'), +('5', '75', '17', '70886', '52137', '13'), +('5', '75', '7', '53390', '66045', '13'), +('5', '75', '7', '39267', '49886', '13'), +('5', '75', '7', '83564', '49788', '13'), +('5', '75', '7', '70882', '44811', '13'), +('5', '75', '9', '46887', '72136', '13'), +('5', '75', '9', '53391', '65235', '13'), +('5', '75', '9', '39335', '55679', '13'), +('5', '75', '9', '51706', '52770', '13'), +('5', '75', '15', '79909', '85536', '13'), +('5', '75', '15', '80667', '83286', '13'), +('5', '75', '15', '80671', '81972', '13'), +('5', '75', '15', '80686', '81826', '13'), +('5', '75', '20', '80678', '106161', '13'), +('5', '75', '20', '46935', '73671', '13'), +('5', '75', '20', '80620', '71056', '13'), +('5', '75', '20', '46919', '65893', '13'), +('5', '75', '12', '53392', '87683', '13'), +('5', '75', '12', '47212', '59786', '13'), +('5', '75', '12', '71075', '53159', '13'), +('5', '75', '12', '83568', '47600', '13'), +('5', '75', '18', '53395', '68045', '13'), +('5', '75', '18', '83607', '55124', '13'), +('5', '75', '18', '46826', '53946', '13'), +('5', '75', '18', '70887', '48964', '13'), +('5', '75', '19', '53393', '66284', '13'), +('5', '75', '19', '39355', '54767', '13'), +('5', '75', '19', '83572', '49532', '13'), +('5', '75', '19', '70885', '44787', '13'), +('5', '75', '13', '46929', '185196', '13'), +('5', '75', '13', '80642', '178793', '13'), +('5', '75', '13', '80685', '177905', '13'), +('5', '75', '13', '80672', '177773', '13'), +('5', '75', '14', '80665', '78405', '13'), +('5', '75', '14', '80682', '78250', '13'), +('5', '75', '14', '80625', '71665', '13'), +('5', '75', '14', '46875', '67336', '13'), +('5', '75', '11', '80655', '108261', '13'), +('5', '75', '11', '46930', '100850', '13'), +('5', '75', '11', '46849', '84367', '13'), +('5', '75', '11', '80668', '81426', '13'), +('5', '75', '22', '12425', '0', '12'), +('5', '75', '22', '21807', '0', '12'), +('5', '75', '22', '39342', '0', '12'), +('5', '75', '22', '7867', '0', '12'), +('5', '75', '1', '39276', '72623', '12'), +('5', '75', '1', '46931', '71289', '12'), +('5', '75', '1', '83594', '70879', '12'), +('5', '75', '1', '46913', '65750', '12'), +('5', '75', '2', '70881', '67998', '12'), +('5', '75', '2', '53389', '65764', '12'), +('5', '75', '2', '83560', '49713', '12'), +('5', '75', '2', '28647', '46618', '12'), +('5', '75', '3', '39218', '66443', '12'), +('5', '75', '3', '46873', '65378', '12'), +('5', '75', '3', '46874', '64671', '12'), +('5', '75', '3', '47245', '61819', '12'), +('5', '75', '5', '46867', '89593', '12'), +('5', '75', '5', '46934', '70505', '12'), +('5', '75', '5', '46868', '64278', '12'), +('5', '75', '5', '39359', '55352', '12'), +('5', '75', '8', '46885', '95729', '12'), +('5', '75', '8', '39330', '72162', '12'), +('5', '75', '8', '69165', '63803', '12'), +('5', '75', '8', '69064', '60138', '12'), +('5', '75', '6', '39337', '76437', '12'), +('5', '75', '6', '46884', '71772', '12'), +('5', '75', '6', '46933', '71724', '12'), +('5', '75', '6', '46883', '70557', '12'), +('5', '75', '17', '83603', '78985', '12'), +('5', '75', '17', '53394', '69462', '12'), +('5', '75', '17', '46809', '56380', '12'), +('5', '75', '17', '70886', '52137', '12'), +('5', '75', '7', '53390', '66045', '12'), +('5', '75', '7', '39267', '49886', '12'), +('5', '75', '7', '83564', '49788', '12'), +('5', '75', '7', '70882', '44811', '12'), +('5', '75', '9', '46887', '72136', '12'), +('5', '75', '9', '53391', '65235', '12'), +('5', '75', '9', '39335', '55679', '12'), +('5', '75', '9', '51706', '52770', '12'), +('5', '75', '15', '46881', '72852', '12'), +('5', '75', '15', '46863', '67802', '12'), +('5', '75', '15', '46907', '67077', '12'), +('5', '75', '15', '46864', '63987', '12'), +('5', '75', '20', '46935', '73671', '12'), +('5', '75', '20', '46919', '65893', '12'), +('5', '75', '20', '47283', '65775', '12'), +('5', '75', '20', '46920', '64118', '12'), +('5', '75', '12', '53392', '87683', '12'), +('5', '75', '12', '47212', '59786', '12'), +('5', '75', '12', '71075', '53159', '12'), +('5', '75', '12', '83568', '47600', '12'), +('5', '75', '18', '53395', '68045', '12'), +('5', '75', '18', '83607', '55124', '12'), +('5', '75', '18', '46826', '53946', '12'), +('5', '75', '18', '70887', '48964', '12'), +('5', '75', '19', '53393', '66284', '12'), +('5', '75', '19', '39355', '54767', '12'), +('5', '75', '19', '83572', '49532', '12'), +('5', '75', '19', '70885', '44787', '12'), +('5', '75', '13', '46929', '185196', '12'), +('5', '75', '13', '46879', '165288', '12'), +('5', '75', '13', '46855', '154260', '12'), +('5', '75', '13', '46890', '153098', '12'), +('5', '75', '14', '46875', '67336', '12'), +('5', '75', '14', '46925', '66521', '12'), +('5', '75', '14', '46853', '61613', '12'), +('5', '75', '14', '39341', '61424', '12'), +('5', '75', '11', '46930', '100850', '12'), +('5', '75', '11', '46849', '84367', '12'), +('5', '75', '11', '39331', '74817', '12'), +('5', '75', '11', '83582', '74704', '12'), +('5', '76', '22', '12425', '0', '13'), +('5', '76', '22', '21807', '0', '13'), +('5', '76', '22', '39342', '0', '13'), +('5', '76', '22', '7867', '0', '13'), +('5', '76', '1', '80676', '81203', '13'), +('5', '76', '1', '80659', '80702', '13'), +('5', '76', '1', '80648', '76272', '13'), +('5', '76', '1', '80639', '74082', '13'), +('5', '76', '2', '70881', '68001', '13'), +('5', '76', '2', '53389', '65768', '13'), +('5', '76', '2', '83560', '49719', '13'), +('5', '76', '2', '28647', '46621', '13'), +('5', '76', '3', '80637', '76402', '13'), +('5', '76', '3', '39218', '66446', '13'), +('5', '76', '3', '46873', '65383', '13'), +('5', '76', '3', '46874', '64676', '13'), +('5', '76', '5', '46867', '89597', '13'), +('5', '76', '5', '80670', '82062', '13'), +('5', '76', '5', '80616', '72870', '13'), +('5', '76', '5', '46934', '70512', '13'), +('5', '76', '8', '46885', '95735', '13'), +('5', '76', '8', '80677', '83638', '13'), +('5', '76', '8', '80649', '74303', '13'), +('5', '76', '8', '39330', '72164', '13'), +('5', '76', '6', '80638', '99091', '13'), +('5', '76', '6', '39337', '76441', '13'), +('5', '76', '6', '46884', '71778', '13'), +('5', '76', '6', '46933', '71729', '13'), +('5', '76', '17', '83603', '78990', '13'), +('5', '76', '17', '53394', '69466', '13'), +('5', '76', '17', '46809', '56383', '13'), +('5', '76', '17', '70886', '52142', '13'), +('5', '76', '7', '53390', '66050', '13'), +('5', '76', '7', '39267', '49889', '13'), +('5', '76', '7', '83564', '49794', '13'), +('5', '76', '7', '70882', '44817', '13'), +('5', '76', '9', '46887', '72141', '13'), +('5', '76', '9', '53391', '65240', '13'), +('5', '76', '9', '39335', '55684', '13'), +('5', '76', '9', '51706', '52774', '13'), +('5', '76', '15', '79909', '85541', '13'), +('5', '76', '15', '80667', '83292', '13'), +('5', '76', '15', '80671', '81978', '13'), +('5', '76', '15', '80686', '81832', '13'), +('5', '76', '20', '80678', '106167', '13'), +('5', '76', '20', '46935', '73677', '13'), +('5', '76', '20', '80620', '71059', '13'), +('5', '76', '20', '46919', '65898', '13'), +('5', '76', '12', '53392', '87687', '13'), +('5', '76', '12', '47212', '59789', '13'), +('5', '76', '12', '71075', '53162', '13'), +('5', '76', '12', '83568', '47606', '13'), +('5', '76', '18', '53395', '68049', '13'), +('5', '76', '18', '83607', '55129', '13'), +('5', '76', '18', '46826', '53949', '13'), +('5', '76', '18', '70887', '48968', '13'), +('5', '76', '19', '53393', '66288', '13'), +('5', '76', '19', '39355', '54772', '13'), +('5', '76', '19', '83572', '49538', '13'), +('5', '76', '19', '70885', '44790', '13'), +('5', '76', '13', '46929', '185831', '13'), +('5', '76', '13', '80642', '178939', '13'), +('5', '76', '13', '80685', '178078', '13'), +('5', '76', '13', '80672', '177946', '13'), +('5', '76', '14', '80665', '78409', '13'), +('5', '76', '14', '80682', '78254', '13'), +('5', '76', '14', '80625', '71669', '13'), +('5', '76', '14', '46875', '67341', '13'), +('5', '76', '11', '80655', '108313', '13'), +('5', '76', '11', '46930', '100901', '13'), +('5', '76', '11', '46849', '84371', '13'), +('5', '76', '11', '80668', '81432', '13'), +('5', '77', '22', '12425', '0', '13'), +('5', '77', '22', '21807', '0', '13'), +('5', '77', '22', '39342', '0', '13'), +('5', '77', '22', '7867', '0', '13'), +('5', '77', '1', '80676', '81206', '13'), +('5', '77', '1', '80659', '80708', '13'), +('5', '77', '1', '80648', '76277', '13'), +('5', '77', '1', '80639', '74087', '13'), +('5', '77', '2', '70881', '68005', '13'), +('5', '77', '2', '53389', '65772', '13'), +('5', '77', '2', '83560', '49725', '13'), +('5', '77', '2', '28647', '46624', '13'), +('5', '77', '3', '80637', '76407', '13'), +('5', '77', '3', '39218', '66449', '13'), +('5', '77', '3', '46873', '65388', '13'), +('5', '77', '3', '46874', '64681', '13'), +('5', '77', '5', '46867', '89602', '13'), +('5', '77', '5', '80670', '82068', '13'), +('5', '77', '5', '80616', '72872', '13'), +('5', '77', '5', '46934', '70518', '13'), +('5', '77', '8', '46885', '95742', '13'), +('5', '77', '8', '80677', '83644', '13'), +('5', '77', '8', '80649', '74308', '13'), +('5', '77', '8', '39330', '72166', '13'), +('5', '77', '6', '80638', '99096', '13'), +('5', '77', '6', '39337', '76445', '13'), +('5', '77', '6', '46884', '71784', '13'), +('5', '77', '6', '46933', '71734', '13'), +('5', '77', '17', '83603', '78996', '13'), +('5', '77', '17', '53394', '69470', '13'), +('5', '77', '17', '46809', '56386', '13'), +('5', '77', '17', '70886', '52146', '13'), +('5', '77', '7', '53390', '66054', '13'), +('5', '77', '7', '39267', '49893', '13'), +('5', '77', '7', '83564', '49800', '13'), +('5', '77', '7', '70882', '44822', '13'), +('5', '77', '9', '46887', '72146', '13'), +('5', '77', '9', '53391', '65245', '13'), +('5', '77', '9', '39335', '55689', '13'), +('5', '77', '9', '51706', '52779', '13'), +('5', '77', '15', '79909', '85546', '13'), +('5', '77', '15', '80667', '83298', '13'), +('5', '77', '15', '80671', '81984', '13'), +('5', '77', '15', '80686', '81838', '13'), +('5', '77', '20', '80678', '106173', '13'), +('5', '77', '20', '46935', '73683', '13'), +('5', '77', '20', '80620', '71063', '13'), +('5', '77', '20', '46919', '65904', '13'), +('5', '77', '12', '53392', '87691', '13'), +('5', '77', '12', '47212', '59793', '13'), +('5', '77', '12', '71075', '53165', '13'), +('5', '77', '12', '83568', '47612', '13'), +('5', '77', '18', '53395', '68053', '13'), +('5', '77', '18', '83607', '55134', '13'), +('5', '77', '18', '46826', '53952', '13'), +('5', '77', '18', '70887', '48972', '13'), +('5', '77', '19', '53393', '66292', '13'), +('5', '77', '19', '39355', '54777', '13'), +('5', '77', '19', '83572', '49544', '13'), +('5', '77', '19', '70885', '44793', '13'), +('5', '77', '13', '46929', '186438', '13'), +('5', '77', '13', '80642', '179085', '13'), +('5', '77', '13', '80685', '178223', '13'), +('5', '77', '13', '80672', '178090', '13'), +('5', '77', '14', '80665', '78414', '13'), +('5', '77', '14', '80682', '78259', '13'), +('5', '77', '14', '80625', '71674', '13'), +('5', '77', '14', '46875', '67346', '13'), +('5', '77', '11', '80655', '108364', '13'), +('5', '77', '11', '46930', '100953', '13'), +('5', '77', '11', '46849', '84376', '13'), +('5', '77', '11', '80668', '81438', '13'), +('5', '78', '22', '12425', '0', '13'), +('5', '78', '22', '21807', '0', '13'), +('5', '78', '22', '39342', '0', '13'), +('5', '78', '22', '7867', '0', '13'), +('5', '78', '1', '80676', '81208', '13'), +('5', '78', '1', '80659', '80714', '13'), +('5', '78', '1', '80648', '76283', '13'), +('5', '78', '1', '80639', '74093', '13'), +('5', '78', '2', '70881', '68008', '13'), +('5', '78', '2', '53389', '65776', '13'), +('5', '78', '2', '83560', '49732', '13'), +('5', '78', '2', '28647', '46628', '13'), +('5', '78', '3', '80637', '76413', '13'), +('5', '78', '3', '39218', '66453', '13'), +('5', '78', '3', '46873', '65393', '13'), +('5', '78', '3', '46874', '64686', '13'), +('5', '78', '5', '46867', '89607', '13'), +('5', '78', '5', '80670', '82074', '13'), +('5', '78', '5', '80616', '72874', '13'), +('5', '78', '5', '46934', '70524', '13'), +('5', '78', '8', '46885', '95748', '13'), +('5', '78', '8', '80677', '83651', '13'), +('5', '78', '8', '80649', '74314', '13'), +('5', '78', '8', '39330', '72167', '13'), +('5', '78', '6', '80638', '99102', '13'), +('5', '78', '6', '39337', '76449', '13'), +('5', '78', '6', '46884', '71790', '13'), +('5', '78', '6', '46933', '71738', '13'), +('5', '78', '17', '83603', '79001', '13'), +('5', '78', '17', '53394', '69474', '13'), +('5', '78', '17', '46809', '56390', '13'), +('5', '78', '17', '70886', '52151', '13'), +('5', '78', '7', '53390', '66059', '13'), +('5', '78', '7', '39267', '49896', '13'), +('5', '78', '7', '83564', '49806', '13'), +('5', '78', '7', '70882', '44828', '13'), +('5', '78', '9', '46887', '72151', '13'), +('5', '78', '9', '53391', '65249', '13'), +('5', '78', '9', '39335', '55694', '13'), +('5', '78', '9', '51706', '52784', '13'), +('5', '78', '15', '79909', '85551', '13'), +('5', '78', '15', '80667', '83304', '13'), +('5', '78', '15', '80671', '81991', '13'), +('5', '78', '15', '80686', '81844', '13'), +('5', '78', '20', '80678', '106179', '13'), +('5', '78', '20', '46935', '73689', '13'), +('5', '78', '20', '80620', '71066', '13'), +('5', '78', '20', '46919', '65909', '13'), +('5', '78', '12', '53392', '87695', '13'), +('5', '78', '12', '47212', '59797', '13'), +('5', '78', '12', '71075', '53168', '13'), +('5', '78', '12', '83568', '47619', '13'), +('5', '78', '18', '53395', '68057', '13'), +('5', '78', '18', '83607', '55140', '13'), +('5', '78', '18', '46826', '53955', '13'), +('5', '78', '18', '70887', '48977', '13'), +('5', '78', '19', '53393', '66296', '13'), +('5', '78', '19', '39355', '54782', '13'), +('5', '78', '19', '83572', '49550', '13'), +('5', '78', '19', '70885', '44796', '13'), +('5', '78', '13', '46929', '187045', '13'), +('5', '78', '13', '80642', '179231', '13'), +('5', '78', '13', '80685', '178396', '13'), +('5', '78', '13', '80672', '178263', '13'), +('5', '78', '14', '80665', '78418', '13'), +('5', '78', '14', '80682', '78263', '13'), +('5', '78', '14', '80625', '71678', '13'), +('5', '78', '14', '46875', '67351', '13'), +('5', '78', '11', '80655', '108416', '13'), +('5', '78', '11', '46930', '101004', '13'), +('5', '78', '11', '46849', '84381', '13'), +('5', '78', '11', '80668', '81444', '13'), +('5', '79', '22', '12425', '0', '13'), +('5', '79', '22', '21807', '0', '13'), +('5', '79', '22', '39342', '0', '13'), +('5', '79', '22', '7867', '0', '13'), +('5', '79', '1', '80676', '81210', '13'), +('5', '79', '1', '80659', '80720', '13'), +('5', '79', '1', '80648', '76288', '13'), +('5', '79', '1', '80639', '74098', '13'), +('5', '79', '2', '70881', '68011', '13'), +('5', '79', '2', '53389', '65780', '13'), +('5', '79', '2', '83560', '49738', '13'), +('5', '79', '2', '28647', '46631', '13'), +('5', '79', '3', '80637', '76418', '13'), +('5', '79', '3', '39218', '66456', '13'), +('5', '79', '3', '46873', '65398', '13'), +('5', '79', '3', '46874', '64691', '13'), +('5', '79', '5', '46867', '89612', '13'), +('5', '79', '5', '80670', '82080', '13'), +('5', '79', '5', '80616', '72876', '13'), +('5', '79', '5', '46934', '70531', '13'), +('5', '79', '8', '46885', '95754', '13'), +('5', '79', '8', '80677', '83657', '13'), +('5', '79', '8', '80649', '74319', '13'), +('5', '79', '8', '39330', '72169', '13'), +('5', '79', '6', '80638', '99107', '13'), +('5', '79', '6', '39337', '76453', '13'), +('5', '79', '6', '46884', '71796', '13'), +('5', '79', '6', '46933', '71743', '13'), +('5', '79', '17', '83603', '79006', '13'), +('5', '79', '17', '53394', '69478', '13'), +('5', '79', '17', '46809', '56393', '13'), +('5', '79', '17', '70886', '52156', '13'), +('5', '79', '7', '53390', '66063', '13'), +('5', '79', '7', '39267', '49900', '13'), +('5', '79', '7', '83564', '49812', '13'), +('5', '79', '7', '70882', '44833', '13'), +('5', '79', '9', '46887', '72156', '13'), +('5', '79', '9', '53391', '65254', '13'), +('5', '79', '9', '39335', '55699', '13'), +('5', '79', '9', '51706', '52788', '13'), +('5', '79', '15', '79909', '85556', '13'), +('5', '79', '15', '80667', '83310', '13'), +('5', '79', '15', '80671', '81997', '13'), +('5', '79', '15', '80686', '81850', '13'), +('5', '79', '20', '80678', '106185', '13'), +('5', '79', '20', '46935', '73695', '13'), +('5', '79', '20', '80620', '71069', '13'), +('5', '79', '20', '46919', '65915', '13'), +('5', '79', '12', '53392', '87699', '13'), +('5', '79', '12', '47212', '59801', '13'), +('5', '79', '12', '71075', '53171', '13'), +('5', '79', '12', '83568', '47625', '13'), +('5', '79', '18', '53395', '68061', '13'), +('5', '79', '18', '83607', '55145', '13'), +('5', '79', '18', '46826', '53958', '13'), +('5', '79', '18', '70887', '48981', '13'), +('5', '79', '19', '53393', '66300', '13'), +('5', '79', '19', '39355', '54787', '13'), +('5', '79', '19', '83572', '49557', '13'), +('5', '79', '19', '70885', '44800', '13'), +('5', '79', '13', '46929', '187652', '13'), +('5', '79', '13', '80642', '179377', '13'), +('5', '79', '13', '80685', '178569', '13'), +('5', '79', '13', '80672', '178436', '13'), +('5', '79', '14', '80665', '78422', '13'), +('5', '79', '14', '80682', '78267', '13'), +('5', '79', '14', '80625', '71682', '13'), +('5', '79', '14', '46875', '67356', '13'), +('5', '79', '11', '80655', '108467', '13'), +('5', '79', '11', '46930', '101056', '13'), +('5', '79', '11', '46849', '84386', '13'), +('5', '79', '11', '80668', '81450', '13'), +('5', '80', '22', '12425', '0', '14'), +('5', '80', '22', '21807', '0', '14'), +('5', '80', '22', '39342', '0', '14'), +('5', '80', '22', '7867', '0', '14'), +('5', '80', '1', '102597', '108728', '14'), +('5', '80', '1', '102618', '108715', '14'), +('5', '80', '1', '102641', '108290', '14'), +('5', '80', '1', '102639', '107662', '14'), +('5', '80', '2', '102003', '73979', '14'), +('5', '80', '2', '70881', '68015', '14'), +('5', '80', '2', '102255', '66791', '14'), +('5', '80', '2', '53389', '65784', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '80', '3', '102726', '118887', '14'), +('5', '80', '3', '102619', '116075', '14'), +('5', '80', '3', '102598', '115933', '14'), +('5', '80', '3', '102725', '103547', '14'), +('5', '80', '5', '102599', '114063', '14'), +('5', '80', '5', '102620', '113730', '14'), +('5', '80', '5', '102745', '104103', '14'), +('5', '80', '5', '102551', '99443', '14'), +('5', '80', '8', '102601', '138428', '14'), +('5', '80', '8', '102552', '123411', '14'), +('5', '80', '8', '102622', '116061', '14'), +('5', '80', '8', '46885', '95761', '14'), +('5', '80', '6', '102621', '115755', '14'), +('5', '80', '6', '102600', '115512', '14'), +('5', '80', '6', '102558', '101434', '14'), +('5', '80', '6', '80638', '99113', '14'), +('5', '80', '17', '103586', '84511', '14'), +('5', '80', '17', '102006', '79401', '14'), +('5', '80', '17', '83603', '79012', '14'), +('5', '80', '17', '102258', '72070', '14'), +('5', '80', '7', '102004', '75379', '14'), +('5', '80', '7', '102256', '68040', '14'), +('5', '80', '7', '53390', '66068', '14'), +('5', '80', '7', '39267', '49904', '14'), +('5', '80', '9', '67098', '191992', '14'), +('5', '80', '9', '46887', '72161', '14'), +('5', '80', '9', '53391', '65259', '14'), +('5', '80', '9', '102287', '62250', '14'), +('5', '80', '15', '102623', '110481', '14'), +('5', '80', '15', '102602', '110183', '14'), +('5', '80', '15', '102636', '109598', '14'), +('5', '80', '15', '102637', '109369', '14'), +('5', '80', '20', '102624', '138851', '14'), +('5', '80', '20', '102603', '138476', '14'), +('5', '80', '20', '102553', '122996', '14'), +('5', '80', '20', '80678', '106192', '14'), +('5', '80', '12', '53392', '87703', '14'), +('5', '80', '12', '102253', '64256', '14'), +('5', '80', '12', '47212', '59804', '14'), +('5', '80', '12', '71075', '53174', '14'), +('5', '80', '18', '102005', '76793', '14'), +('5', '80', '18', '102257', '69351', '14'), +('5', '80', '18', '53395', '68065', '14'), +('5', '80', '18', '83607', '55151', '14'), +('5', '80', '19', '76131', '83621', '14'), +('5', '80', '19', '53393', '66304', '14'), +('5', '80', '19', '102254', '64611', '14'), +('5', '80', '19', '39355', '54793', '14'), +('5', '80', '13', '102663', '247479', '14'), +('5', '80', '13', '102653', '233541', '14'), +('5', '80', '13', '102664', '233416', '14'), +('5', '80', '13', '102658', '231516', '14'), +('5', '80', '14', '102632', '117542', '14'), +('5', '80', '14', '102633', '116414', '14'), +('5', '80', '14', '102570', '102486', '14'), +('5', '80', '14', '80665', '78427', '14'), +('5', '80', '11', '102667', '158426', '14'), +('5', '80', '11', '102589', '138433', '14'), +('5', '80', '11', '102643', '110836', '14'), +('5', '80', '11', '80655', '108519', '14'), +('5', '81', '22', '12425', '0', '14'), +('5', '81', '22', '21807', '0', '14'), +('5', '81', '22', '39342', '0', '14'), +('5', '81', '22', '7867', '0', '14'), +('5', '81', '1', '102597', '108733', '14'), +('5', '81', '1', '102618', '108720', '14'), +('5', '81', '1', '102641', '108295', '14'), +('5', '81', '1', '102639', '107668', '14'), +('5', '81', '2', '102003', '73981', '14'), +('5', '81', '2', '70881', '68018', '14'), +('5', '81', '2', '102255', '66796', '14'), +('5', '81', '2', '53389', '65788', '14'), +('5', '81', '3', '102726', '118893', '14'), +('5', '81', '3', '102619', '116081', '14'), +('5', '81', '3', '102598', '115940', '14'), +('5', '81', '3', '102725', '103551', '14'), +('5', '81', '5', '102599', '114067', '14'), +('5', '81', '5', '102620', '113733', '14'), +('5', '81', '5', '102745', '104109', '14'), +('5', '81', '5', '102551', '99446', '14'), +('5', '81', '8', '102601', '138431', '14'), +('5', '81', '8', '102552', '123417', '14'), +('5', '81', '8', '102622', '116066', '14'), +('5', '81', '8', '46885', '95767', '14'), +('5', '81', '6', '102621', '115760', '14'), +('5', '81', '6', '102600', '115518', '14'), +('5', '81', '6', '102558', '101439', '14'), +('5', '81', '6', '80638', '99118', '14'), +('5', '81', '17', '103586', '85571', '14'), +('5', '81', '17', '102006', '79406', '14'), +('5', '81', '17', '83603', '79017', '14'), +('5', '81', '17', '102258', '72075', '14'), +('5', '81', '7', '102004', '75385', '14'), +('5', '81', '7', '102256', '68045', '14'), +('5', '81', '7', '53390', '66073', '14'), +('5', '81', '7', '39267', '49907', '14'), +('5', '81', '9', '67098', '194395', '14'), +('5', '81', '9', '46887', '72166', '14'), +('5', '81', '9', '53391', '65264', '14'), +('5', '81', '9', '102287', '62254', '14'), +('5', '81', '15', '102623', '110484', '14'), +('5', '81', '15', '102602', '110187', '14'), +('5', '81', '15', '102636', '109602', '14'), +('5', '81', '15', '102637', '109376', '14'), +('5', '81', '20', '102624', '138858', '14'), +('5', '81', '20', '102603', '138482', '14'), +('5', '81', '20', '102553', '123003', '14'), +('5', '81', '20', '80678', '106198', '14'), +('5', '81', '12', '53392', '87707', '14'), +('5', '81', '12', '102253', '64260', '14'), +('5', '81', '12', '47212', '59808', '14'), +('5', '81', '12', '71075', '53178', '14'), +('5', '81', '18', '102005', '76799', '14'), +('5', '81', '18', '102257', '69356', '14'), +('5', '81', '18', '53395', '68069', '14'), +('5', '81', '18', '83607', '55156', '14'), +('5', '81', '19', '76131', '83622', '14'), +('5', '81', '19', '53393', '66308', '14'), +('5', '81', '19', '102254', '64614', '14'), +('5', '81', '19', '39355', '54798', '14'), +('5', '81', '13', '102663', '247794', '14'), +('5', '81', '13', '102653', '233743', '14'), +('5', '81', '13', '102664', '233619', '14'), +('5', '81', '13', '102658', '231689', '14'), +('5', '81', '14', '102632', '117548', '14'), +('5', '81', '14', '102633', '116418', '14'), +('5', '81', '14', '102570', '102490', '14'), +('5', '81', '14', '80665', '78431', '14'), +('5', '81', '11', '102667', '158487', '14'), +('5', '81', '11', '102589', '138482', '14'), +('5', '81', '11', '102643', '110839', '14'), +('5', '81', '11', '80655', '108570', '14'), +('5', '82', '22', '12425', '0', '14'), +('5', '82', '22', '21807', '0', '14'), +('5', '82', '22', '39342', '0', '14'), +('5', '82', '22', '7867', '0', '14'), +('5', '82', '1', '102597', '108738', '14'), +('5', '82', '1', '102618', '108724', '14'), +('5', '82', '1', '102641', '108300', '14'), +('5', '82', '1', '102639', '107675', '14'), +('5', '82', '2', '102003', '73984', '14'), +('5', '82', '2', '70881', '68021', '14'), +('5', '82', '2', '102255', '66801', '14'), +('5', '82', '2', '53389', '65792', '14'), +('5', '82', '3', '102726', '118899', '14'), +('5', '82', '3', '102619', '116088', '14'), +('5', '82', '3', '102598', '115946', '14'), +('5', '82', '3', '102725', '103556', '14'), +('5', '82', '5', '102599', '114072', '14'), +('5', '82', '5', '102620', '113736', '14'), +('5', '82', '5', '102745', '104114', '14'), +('5', '82', '5', '102551', '99449', '14'), +('5', '82', '8', '102601', '138434', '14'), +('5', '82', '8', '102552', '123424', '14'), +('5', '82', '8', '102622', '116071', '14'), +('5', '82', '8', '46885', '95774', '14'), +('5', '82', '6', '102621', '115765', '14'), +('5', '82', '6', '102600', '115524', '14'), +('5', '82', '6', '102558', '101445', '14'), +('5', '82', '6', '80638', '99124', '14'), +('5', '82', '17', '103586', '86631', '14'), +('5', '82', '17', '102006', '79411', '14'), +('5', '82', '17', '83603', '79023', '14'), +('5', '82', '17', '102258', '72079', '14'), +('5', '82', '7', '102004', '75390', '14'), +('5', '82', '7', '102256', '68050', '14'), +('5', '82', '7', '53390', '66077', '14'), +('5', '82', '7', '39267', '49911', '14'), +('5', '82', '9', '67098', '196799', '14'), +('5', '82', '9', '46887', '72172', '14'), +('5', '82', '9', '53391', '65269', '14'), +('5', '82', '9', '102287', '62258', '14'), +('5', '82', '15', '102623', '110488', '14'), +('5', '82', '15', '102602', '110192', '14'), +('5', '82', '15', '102636', '109607', '14'), +('5', '82', '15', '102637', '109382', '14'), +('5', '82', '20', '102624', '138866', '14'), +('5', '82', '20', '102603', '138489', '14'), +('5', '82', '20', '102553', '123010', '14'), +('5', '82', '20', '80678', '106204', '14'), +('5', '82', '12', '53392', '87711', '14'), +('5', '82', '12', '102253', '64264', '14'), +('5', '82', '12', '47212', '59812', '14'), +('5', '82', '12', '71075', '53181', '14'), +('5', '82', '18', '102005', '76805', '14'), +('5', '82', '18', '102257', '69361', '14'), +('5', '82', '18', '53395', '68073', '14'), +('5', '82', '18', '83607', '55161', '14'), +('5', '82', '19', '76131', '83623', '14'), +('5', '82', '19', '53393', '66312', '14'), +('5', '82', '19', '102254', '64617', '14'), +('5', '82', '19', '39355', '54803', '14'), +('5', '82', '13', '102663', '248138', '14'), +('5', '82', '13', '102653', '233945', '14'), +('5', '82', '13', '102664', '233794', '14'), +('5', '82', '13', '102658', '231890', '14'), +('5', '82', '14', '102632', '117554', '14'), +('5', '82', '14', '102633', '116422', '14'), +('5', '82', '14', '102570', '102495', '14'), +('5', '82', '14', '80665', '78435', '14'), +('5', '82', '11', '102667', '158548', '14'), +('5', '82', '11', '102589', '138541', '14'), +('5', '82', '11', '102643', '110841', '14'), +('5', '82', '11', '80655', '108622', '14'), +('5', '83', '22', '12425', '0', '14'), +('5', '83', '22', '21807', '0', '14'), +('5', '83', '22', '39342', '0', '14'), +('5', '83', '22', '7867', '0', '14'), +('5', '83', '1', '102597', '108744', '14'), +('5', '83', '1', '102618', '108730', '14'), +('5', '83', '1', '102641', '108306', '14'), +('5', '83', '1', '102639', '107683', '14'), +('5', '83', '2', '102003', '73987', '14'), +('5', '83', '2', '70881', '68025', '14'), +('5', '83', '2', '102255', '66806', '14'), +('5', '83', '2', '53389', '65797', '14'), +('5', '83', '3', '102726', '118906', '14'), +('5', '83', '3', '102619', '116095', '14'), +('5', '83', '3', '102598', '115953', '14'), +('5', '83', '3', '102725', '103561', '14'), +('5', '83', '5', '102599', '114077', '14'), +('5', '83', '5', '102620', '113740', '14'), +('5', '83', '5', '102745', '104120', '14'), +('5', '83', '5', '102551', '99452', '14'), +('5', '83', '8', '102601', '138437', '14'), +('5', '83', '8', '102552', '123430', '14'), +('5', '83', '8', '102622', '116077', '14'), +('5', '83', '8', '46885', '95780', '14'), +('5', '83', '6', '102621', '115770', '14'), +('5', '83', '6', '102600', '115530', '14'), +('5', '83', '6', '102558', '101451', '14'), +('5', '83', '6', '80638', '99130', '14'), +('5', '83', '17', '103586', '87691', '14'), +('5', '83', '17', '102006', '79416', '14'), +('5', '83', '17', '83603', '79029', '14'), +('5', '83', '17', '102258', '72084', '14'), +('5', '83', '7', '102004', '75396', '14'), +('5', '83', '7', '102256', '68055', '14'), +('5', '83', '7', '53390', '66082', '14'), +('5', '83', '7', '39267', '49915', '14'), +('5', '83', '9', '67098', '199204', '14'), +('5', '83', '9', '46887', '72177', '14'), +('5', '83', '9', '53391', '65274', '14'), +('5', '83', '9', '102287', '62261', '14'), +('5', '83', '15', '102623', '110492', '14'), +('5', '83', '15', '102602', '110196', '14'), +('5', '83', '15', '102636', '109611', '14'), +('5', '83', '15', '102637', '109390', '14'), +('5', '83', '20', '102624', '138874', '14'), +('5', '83', '20', '102603', '138495', '14'), +('5', '83', '20', '102553', '123017', '14'), +('5', '83', '20', '80678', '106210', '14'), +('5', '83', '12', '53392', '87715', '14'), +('5', '83', '12', '102253', '64268', '14'), +('5', '83', '12', '47212', '59816', '14'), +('5', '83', '12', '71075', '53184', '14'), +('5', '83', '18', '102005', '76811', '14'), +('5', '83', '18', '102257', '69367', '14'), +('5', '83', '18', '53395', '68077', '14'), +('5', '83', '18', '83607', '55167', '14'), +('5', '83', '19', '76131', '83624', '14'), +('5', '83', '19', '53393', '66317', '14'), +('5', '83', '19', '102254', '64620', '14'), +('5', '83', '19', '39355', '54808', '14'), +('5', '83', '13', '102663', '248481', '14'), +('5', '83', '13', '102653', '234119', '14'), +('5', '83', '13', '102664', '233997', '14'), +('5', '83', '13', '102658', '232064', '14'), +('5', '83', '14', '102632', '117560', '14'), +('5', '83', '14', '102633', '116426', '14'), +('5', '83', '14', '102570', '102501', '14'), +('5', '83', '14', '80665', '78440', '14'), +('5', '83', '11', '102667', '158619', '14'), +('5', '83', '11', '102589', '138591', '14'), +('5', '83', '11', '102643', '110844', '14'), +('5', '83', '11', '80655', '108673', '14'), +('5', '84', '22', '12425', '0', '14'), +('5', '84', '22', '21807', '0', '14'), +('5', '84', '22', '39342', '0', '14'), +('5', '84', '22', '7867', '0', '14'), +('5', '84', '1', '102597', '108749', '14'), +('5', '84', '1', '102618', '108735', '14'), +('5', '84', '1', '102641', '108311', '14'), +('5', '84', '1', '102639', '107689', '14'), +('5', '84', '2', '102003', '73989', '14'), +('5', '84', '2', '70881', '68028', '14'), +('5', '84', '2', '102255', '66811', '14'), +('5', '84', '2', '53389', '65801', '14'), +('5', '84', '3', '102726', '118911', '14'), +('5', '84', '3', '102619', '116101', '14'), +('5', '84', '3', '102598', '115959', '14'), +('5', '84', '3', '102725', '103565', '14'), +('5', '84', '5', '102599', '114082', '14'), +('5', '84', '5', '102620', '113743', '14'), +('5', '84', '5', '102745', '104125', '14'), +('5', '84', '5', '102551', '99455', '14'), +('5', '84', '8', '102601', '138440', '14'), +('5', '84', '8', '102552', '123437', '14'), +('5', '84', '8', '102622', '116082', '14'), +('5', '84', '8', '46885', '95786', '14'), +('5', '84', '6', '102621', '115775', '14'), +('5', '84', '6', '102600', '115536', '14'), +('5', '84', '6', '102558', '101457', '14'), +('5', '84', '6', '80638', '99135', '14'), +('5', '84', '17', '103586', '88750', '14'), +('5', '84', '17', '102006', '79421', '14'), +('5', '84', '17', '83603', '79034', '14'), +('5', '84', '17', '102258', '72089', '14'), +('5', '84', '7', '102004', '75401', '14'), +('5', '84', '7', '102256', '68060', '14'), +('5', '84', '7', '53390', '66086', '14'), +('5', '84', '7', '39267', '49918', '14'), +('5', '84', '9', '67098', '201608', '14'), +('5', '84', '9', '46887', '72182', '14'), +('5', '84', '9', '53391', '65279', '14'), +('5', '84', '9', '102287', '62265', '14'), +('5', '84', '15', '102623', '110496', '14'), +('5', '84', '15', '102602', '110201', '14'), +('5', '84', '15', '102636', '109615', '14'), +('5', '84', '15', '102637', '109397', '14'), +('5', '84', '20', '102624', '138881', '14'), +('5', '84', '20', '102603', '138501', '14'), +('5', '84', '20', '102553', '123023', '14'), +('5', '84', '20', '80678', '106216', '14'), +('5', '84', '12', '53392', '87719', '14'), +('5', '84', '12', '102253', '64272', '14'), +('5', '84', '12', '47212', '59819', '14'), +('5', '84', '12', '71075', '53187', '14'), +('5', '84', '18', '102005', '76817', '14'), +('5', '84', '18', '102257', '69372', '14'), +('5', '84', '18', '53395', '68081', '14'), +('5', '84', '18', '83607', '55172', '14'), +('5', '84', '19', '76131', '83625', '14'), +('5', '84', '19', '53393', '66321', '14'), +('5', '84', '19', '102254', '64623', '14'), +('5', '84', '19', '39355', '54813', '14'), +('5', '84', '13', '102663', '248796', '14'), +('5', '84', '13', '102653', '234321', '14'), +('5', '84', '13', '102664', '234200', '14'), +('5', '84', '13', '102658', '232265', '14'), +('5', '84', '14', '102632', '117567', '14'), +('5', '84', '14', '102633', '116431', '14'), +('5', '84', '14', '102570', '102506', '14'), +('5', '84', '14', '80665', '78444', '14'), +('5', '84', '11', '102667', '158679', '14'), +('5', '84', '11', '102589', '138649', '14'), +('5', '84', '11', '102643', '110847', '14'), +('5', '84', '11', '80655', '108725', '14'), +('5', '85', '22', '39342', '0', '16'), +('5', '85', '22', '12425', '0', '16'), +('5', '85', '22', '7867', '0', '16'), +('5', '85', '22', '23597', '0', '16'), +('5', '85', '1', '111309', '210756', '16'), +('5', '85', '1', '111303', '209728', '16'), +('5', '85', '1', '111300', '208507', '16'), +('5', '85', '1', '111305', '208269', '16'), +('5', '85', '2', '94056', '132504', '16'), +('5', '85', '2', '62985', '131801', '16'), +('5', '85', '2', '89368', '125999', '16'), +('5', '85', '2', '104403', '111559', '16'), +('5', '85', '3', '111312', '209871', '16'), +('5', '85', '3', '111315', '208980', '16'), +('5', '85', '3', '111313', '208922', '16'), +('5', '85', '3', '111316', '206889', '16'), +('5', '85', '5', '111318', '208644', '16'), +('5', '85', '5', '111320', '208491', '16'), +('5', '85', '5', '111319', '206469', '16'), +('5', '85', '5', '111017', '182939', '16'), +('5', '85', '8', '111331', '210650', '16'), +('5', '85', '8', '111328', '209948', '16'), +('5', '85', '8', '111332', '206881', '16'), +('5', '85', '8', '111030', '184870', '16'), +('5', '85', '6', '111322', '208968', '16'), +('5', '85', '6', '111324', '208945', '16'), +('5', '85', '6', '111326', '206575', '16'), +('5', '85', '6', '111021', '183238', '16'), +('5', '85', '17', '56046', '138978', '16'), +('5', '85', '17', '81765', '138328', '16'), +('5', '85', '17', '56083', '138169', '16'), +('5', '85', '17', '104406', '118634', '16'), +('5', '85', '7', '94053', '133294', '16'), +('5', '85', '7', '56079', '132459', '16'), +('5', '85', '7', '89369', '127273', '16'), +('5', '85', '7', '104404', '111185', '16'), +('5', '85', '9', '67098', '204013', '16'), +('5', '85', '9', '56031', '128658', '16'), +('5', '85', '9', '56033', '128410', '16'), +('5', '85', '9', '62992', '128369', '16'), +('5', '85', '15', '111348', '210067', '16'), +('5', '85', '15', '111343', '209759', '16'), +('5', '85', '15', '111341', '209646', '16'), +('5', '85', '15', '111345', '208113', '16'), +('5', '85', '20', '111354', '234408', '16'), +('5', '85', '20', '111355', '232437', '16'), +('5', '85', '20', '111353', '231723', '16'), +('5', '85', '20', '111351', '231219', '16'), +('5', '85', '12', '81795', '129622', '16'), +('5', '85', '12', '56073', '129567', '16'), +('5', '85', '12', '89366', '123199', '16'), +('5', '85', '12', '104401', '109797', '16'), +('5', '85', '18', '56041', '135529', '16'), +('5', '85', '18', '62986', '135428', '16'), +('5', '85', '18', '62987', '134266', '16'), +('5', '85', '18', '94054', '133963', '16'), +('5', '85', '19', '62990', '133774', '16'), +('5', '85', '19', '56037', '133010', '16'), +('5', '85', '19', '56075', '132137', '16'), +('5', '85', '19', '81763', '131712', '16'), +('5', '85', '13', '111526', '419365', '16'), +('5', '85', '13', '111514', '402918', '16'), +('5', '85', '13', '111520', '398975', '16'), +('5', '85', '13', '111525', '397467', '16'), +('5', '85', '14', '111536', '215732', '16'), +('5', '85', '14', '111535', '214391', '16'), +('5', '85', '14', '111538', '214109', '16'), +('5', '85', '14', '111236', '189832', '16'), +('5', '85', '11', '111529', '259389', '16'), +('5', '85', '11', '111229', '240244', '16'), +('5', '85', '11', '111338', '210040', '16'), +('5', '85', '11', '111336', '209845', '16'), +('5', '85', '22', '39342', '0', '15'), +('5', '85', '22', '12425', '0', '15'), +('5', '85', '22', '7867', '0', '15'), +('5', '85', '22', '23597', '0', '15'), +('5', '85', '1', '107054', '154037', '15'), +('5', '85', '1', '107019', '153121', '15'), +('5', '85', '1', '107053', '152449', '15'), +('5', '85', '1', '107001', '151693', '15'), +('5', '85', '2', '94056', '132504', '15'), +('5', '85', '2', '62985', '131801', '15'), +('5', '85', '2', '89368', '125999', '15'), +('5', '85', '2', '104403', '111559', '15'), +('5', '85', '3', '107020', '157272', '15'), +('5', '85', '3', '107055', '155417', '15'), +('5', '85', '3', '107002', '155151', '15'), +('5', '85', '3', '106849', '146973', '15'), +('5', '85', '5', '107021', '154938', '15'), +('5', '85', '5', '107056', '153747', '15'), +('5', '85', '5', '107003', '153055', '15'), +('5', '85', '5', '106811', '144387', '15'), +('5', '85', '8', '107023', '160146', '15'), +('5', '85', '8', '107058', '157676', '15'), +('5', '85', '8', '107005', '156470', '15'), +('5', '85', '8', '94070', '155680', '15'), +('5', '85', '6', '106812', '169112', '15'), +('5', '85', '6', '106843', '166855', '15'), +('5', '85', '6', '107022', '157493', '15'), +('5', '85', '6', '107004', '156009', '15'), +('5', '85', '17', '56046', '138978', '15'), +('5', '85', '17', '81765', '138328', '15'), +('5', '85', '17', '56083', '138169', '15'), +('5', '85', '17', '104406', '118634', '15'), +('5', '85', '7', '94053', '133294', '15'), +('5', '85', '7', '56079', '132459', '15'), +('5', '85', '7', '89369', '127273', '15'), +('5', '85', '7', '104404', '111185', '15'), +('5', '85', '9', '67098', '204013', '15'), +('5', '85', '9', '56031', '128658', '15'), +('5', '85', '9', '56033', '128410', '15'), +('5', '85', '9', '62992', '128369', '15'), +('5', '85', '15', '107025', '156816', '15'), +('5', '85', '15', '107062', '154380', '15'), +('5', '85', '15', '107007', '153935', '15'), +('5', '85', '15', '107051', '152625', '15'), +('5', '85', '20', '107026', '180930', '15'), +('5', '85', '20', '107059', '180156', '15'), +('5', '85', '20', '107008', '178558', '15'), +('5', '85', '20', '106816', '170247', '15'), +('5', '85', '12', '81795', '129622', '15'), +('5', '85', '12', '56073', '129567', '15'), +('5', '85', '12', '89366', '123199', '15'), +('5', '85', '12', '104401', '109797', '15'), +('5', '85', '18', '56041', '135529', '15'), +('5', '85', '18', '62986', '135428', '15'), +('5', '85', '18', '62987', '134266', '15'), +('5', '85', '18', '94054', '133963', '15'), +('5', '85', '19', '62990', '133774', '15'), +('5', '85', '19', '56037', '133010', '15'), +('5', '85', '19', '56075', '132137', '15'), +('5', '85', '19', '81763', '131712', '15'), +('5', '85', '13', '106857', '299525', '15'), +('5', '85', '13', '106866', '299164', '15'), +('5', '85', '13', '106862', '298634', '15'), +('5', '85', '13', '106865', '295094', '15'), +('5', '85', '14', '107064', '159136', '15'), +('5', '85', '14', '107065', '158931', '15'), +('5', '85', '14', '106851', '150360', '15'), +('5', '85', '14', '106852', '148458', '15'), +('5', '85', '11', '62939', '178977', '15'), +('5', '85', '11', '106769', '178270', '15'), +('5', '85', '11', '107024', '158932', '15'), +('5', '85', '11', '102667', '158741', '15'), +('5', '86', '22', '39342', '0', '16'), +('5', '86', '22', '12425', '0', '16'), +('5', '86', '22', '7867', '0', '16'), +('5', '86', '22', '23597', '0', '16'), +('5', '86', '1', '111309', '210761', '16'), +('5', '86', '1', '111303', '209733', '16'), +('5', '86', '1', '111300', '208512', '16'), +('5', '86', '1', '111305', '208274', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '86', '2', '94056', '132508', '16'), +('5', '86', '2', '62985', '131805', '16'), +('5', '86', '2', '89368', '126004', '16'), +('5', '86', '2', '104403', '111564', '16'), +('5', '86', '3', '111312', '209876', '16'), +('5', '86', '3', '111315', '208987', '16'), +('5', '86', '3', '111313', '208926', '16'), +('5', '86', '3', '111316', '206894', '16'), +('5', '86', '5', '111318', '208649', '16'), +('5', '86', '5', '111320', '208496', '16'), +('5', '86', '5', '111319', '206476', '16'), +('5', '86', '5', '111017', '182944', '16'), +('5', '86', '8', '111331', '210655', '16'), +('5', '86', '8', '111328', '209955', '16'), +('5', '86', '8', '111332', '206886', '16'), +('5', '86', '8', '111030', '184875', '16'), +('5', '86', '6', '111322', '208973', '16'), +('5', '86', '6', '111324', '208950', '16'), +('5', '86', '6', '111326', '206581', '16'), +('5', '86', '6', '111021', '183243', '16'), +('5', '86', '17', '56046', '138984', '16'), +('5', '86', '17', '81765', '138332', '16'), +('5', '86', '17', '56083', '138173', '16'), +('5', '86', '17', '104406', '118640', '16'), +('5', '86', '7', '94053', '133299', '16'), +('5', '86', '7', '56079', '132465', '16'), +('5', '86', '7', '89369', '127279', '16'), +('5', '86', '7', '104404', '111188', '16'), +('5', '86', '9', '67098', '206417', '16'), +('5', '86', '9', '56031', '128663', '16'), +('5', '86', '9', '56033', '128412', '16'), +('5', '86', '9', '62992', '128375', '16'), +('5', '86', '15', '111348', '210072', '16'), +('5', '86', '15', '111343', '209762', '16'), +('5', '86', '15', '111341', '209654', '16'), +('5', '86', '15', '111345', '208118', '16'), +('5', '86', '20', '111354', '234414', '16'), +('5', '86', '20', '111355', '232441', '16'), +('5', '86', '20', '111353', '231729', '16'), +('5', '86', '20', '111351', '231224', '16'), +('5', '86', '12', '81795', '129628', '16'), +('5', '86', '12', '56073', '129574', '16'), +('5', '86', '12', '89366', '123204', '16'), +('5', '86', '12', '104401', '109802', '16'), +('5', '86', '18', '56041', '135533', '16'), +('5', '86', '18', '62986', '135434', '16'), +('5', '86', '18', '62987', '134270', '16'), +('5', '86', '18', '94054', '133968', '16'), +('5', '86', '19', '62990', '133780', '16'), +('5', '86', '19', '56037', '133014', '16'), +('5', '86', '19', '56075', '132141', '16'), +('5', '86', '19', '81763', '131718', '16'), +('5', '86', '13', '111526', '419908', '16'), +('5', '86', '13', '111514', '403432', '16'), +('5', '86', '13', '111520', '399489', '16'), +('5', '86', '13', '111525', '397981', '16'), +('5', '86', '14', '111536', '215737', '16'), +('5', '86', '14', '111535', '214396', '16'), +('5', '86', '14', '111538', '214113', '16'), +('5', '86', '14', '111236', '189837', '16'), +('5', '86', '11', '111529', '259469', '16'), +('5', '86', '11', '111229', '240315', '16'), +('5', '86', '11', '111338', '210046', '16'), +('5', '86', '11', '111336', '209851', '16'), +('5', '87', '22', '39342', '0', '16'), +('5', '87', '22', '12425', '0', '16'), +('5', '87', '22', '7867', '0', '16'), +('5', '87', '22', '23597', '0', '16'), +('5', '87', '1', '111309', '210767', '16'), +('5', '87', '1', '111303', '209739', '16'), +('5', '87', '1', '111300', '208516', '16'), +('5', '87', '1', '111305', '208279', '16'), +('5', '87', '2', '94056', '132512', '16'), +('5', '87', '2', '62985', '131808', '16'), +('5', '87', '2', '89368', '126009', '16'), +('5', '87', '2', '104403', '111570', '16'), +('5', '87', '3', '111312', '209881', '16'), +('5', '87', '3', '111315', '208994', '16'), +('5', '87', '3', '111313', '208931', '16'), +('5', '87', '3', '111316', '206899', '16'), +('5', '87', '5', '111318', '208654', '16'), +('5', '87', '5', '111320', '208502', '16'), +('5', '87', '5', '111319', '206483', '16'), +('5', '87', '5', '111017', '182949', '16'), +('5', '87', '8', '111331', '210661', '16'), +('5', '87', '8', '111328', '209962', '16'), +('5', '87', '8', '111332', '206890', '16'), +('5', '87', '8', '111030', '184881', '16'), +('5', '87', '6', '111322', '208977', '16'), +('5', '87', '6', '111324', '208956', '16'), +('5', '87', '6', '111326', '206587', '16'), +('5', '87', '6', '111021', '183247', '16'), +('5', '87', '17', '56046', '138990', '16'), +('5', '87', '17', '81765', '138337', '16'), +('5', '87', '17', '56083', '138177', '16'), +('5', '87', '17', '104406', '118646', '16'), +('5', '87', '7', '94053', '133305', '16'), +('5', '87', '7', '56079', '132471', '16'), +('5', '87', '7', '89369', '127284', '16'), +('5', '87', '7', '104404', '111192', '16'), +('5', '87', '9', '67098', '208822', '16'), +('5', '87', '9', '56031', '128668', '16'), +('5', '87', '9', '56033', '128415', '16'), +('5', '87', '9', '62992', '128381', '16'), +('5', '87', '15', '111348', '210078', '16'), +('5', '87', '15', '111343', '209767', '16'), +('5', '87', '15', '111341', '209662', '16'), +('5', '87', '15', '111345', '208123', '16'), +('5', '87', '20', '111354', '234419', '16'), +('5', '87', '20', '111355', '232444', '16'), +('5', '87', '20', '111353', '231735', '16'), +('5', '87', '20', '111351', '231228', '16'), +('5', '87', '12', '81795', '129634', '16'), +('5', '87', '12', '56073', '129581', '16'), +('5', '87', '12', '89366', '123208', '16'), +('5', '87', '12', '104401', '109808', '16'), +('5', '87', '18', '56041', '135537', '16'), +('5', '87', '18', '62986', '135441', '16'), +('5', '87', '18', '62987', '134275', '16'), +('5', '87', '18', '94054', '133973', '16'), +('5', '87', '19', '62990', '133785', '16'), +('5', '87', '19', '56037', '133018', '16'), +('5', '87', '19', '56075', '132146', '16'), +('5', '87', '19', '81763', '131724', '16'), +('5', '87', '13', '111526', '420450', '16'), +('5', '87', '13', '111514', '403946', '16'), +('5', '87', '13', '111520', '400003', '16'), +('5', '87', '13', '111525', '398496', '16'), +('5', '87', '14', '111536', '215743', '16'), +('5', '87', '14', '111535', '214402', '16'), +('5', '87', '14', '111538', '214118', '16'), +('5', '87', '14', '111236', '189843', '16'), +('5', '87', '11', '111529', '259550', '16'), +('5', '87', '11', '111229', '240395', '16'), +('5', '87', '11', '111338', '210052', '16'), +('5', '87', '11', '111336', '209857', '16'), +('5', '88', '22', '39342', '0', '16'), +('5', '88', '22', '12425', '0', '16'), +('5', '88', '22', '7867', '0', '16'), +('5', '88', '22', '23597', '0', '16'), +('5', '88', '1', '111309', '210772', '16'), +('5', '88', '1', '111303', '209744', '16'), +('5', '88', '1', '111300', '208521', '16'), +('5', '88', '1', '111305', '208283', '16'), +('5', '88', '2', '94056', '132516', '16'), +('5', '88', '2', '62985', '131811', '16'), +('5', '88', '2', '89368', '126015', '16'), +('5', '88', '2', '104403', '111576', '16'), +('5', '88', '3', '111312', '209886', '16'), +('5', '88', '3', '111315', '209001', '16'), +('5', '88', '3', '111313', '208935', '16'), +('5', '88', '3', '111316', '206905', '16'), +('5', '88', '5', '111318', '208659', '16'), +('5', '88', '5', '111320', '208507', '16'), +('5', '88', '5', '111319', '206489', '16'), +('5', '88', '5', '111017', '182954', '16'), +('5', '88', '8', '111331', '210666', '16'), +('5', '88', '8', '111328', '209968', '16'), +('5', '88', '8', '111332', '206895', '16'), +('5', '88', '8', '111030', '184886', '16'), +('5', '88', '6', '111322', '208982', '16'), +('5', '88', '6', '111324', '208962', '16'), +('5', '88', '6', '111326', '206592', '16'), +('5', '88', '6', '111021', '183252', '16'), +('5', '88', '17', '56046', '138997', '16'), +('5', '88', '17', '81765', '138341', '16'), +('5', '88', '17', '56083', '138181', '16'), +('5', '88', '17', '104406', '118652', '16'), +('5', '88', '7', '94053', '133310', '16'), +('5', '88', '7', '56079', '132477', '16'), +('5', '88', '7', '89369', '127289', '16'), +('5', '88', '7', '104404', '111196', '16'), +('5', '88', '9', '67098', '211227', '16'), +('5', '88', '9', '56031', '128674', '16'), +('5', '88', '9', '56033', '128417', '16'), +('5', '88', '9', '62992', '128387', '16'), +('5', '88', '15', '111348', '210084', '16'), +('5', '88', '15', '111343', '209771', '16'), +('5', '88', '15', '111341', '209669', '16'), +('5', '88', '15', '111345', '208128', '16'), +('5', '88', '20', '111354', '234424', '16'), +('5', '88', '20', '111355', '232448', '16'), +('5', '88', '20', '111353', '231742', '16'), +('5', '88', '20', '111351', '231233', '16'), +('5', '88', '12', '81795', '129639', '16'), +('5', '88', '12', '56073', '129588', '16'), +('5', '88', '12', '89366', '123213', '16'), +('5', '88', '12', '104401', '109813', '16'), +('5', '88', '18', '56041', '135541', '16'), +('5', '88', '18', '62986', '135448', '16'), +('5', '88', '18', '62987', '134279', '16'), +('5', '88', '18', '94054', '133979', '16'), +('5', '88', '19', '62990', '133791', '16'), +('5', '88', '19', '56037', '133022', '16'), +('5', '88', '19', '56075', '132151', '16'), +('5', '88', '19', '81763', '131730', '16'), +('5', '88', '13', '111526', '420993', '16'), +('5', '88', '13', '111514', '404461', '16'), +('5', '88', '13', '111520', '400517', '16'), +('5', '88', '13', '111525', '398982', '16'), +('5', '88', '14', '111536', '215748', '16'), +('5', '88', '14', '111535', '214407', '16'), +('5', '88', '14', '111538', '214123', '16'), +('5', '88', '14', '111236', '189848', '16'), +('5', '88', '11', '111529', '259630', '16'), +('5', '88', '11', '111229', '240467', '16'), +('5', '88', '11', '111338', '210058', '16'), +('5', '88', '11', '111336', '209862', '16'), +('5', '89', '22', '39342', '0', '16'), +('5', '89', '22', '12425', '0', '16'), +('5', '89', '22', '7867', '0', '16'), +('5', '89', '22', '23597', '0', '16'), +('5', '89', '1', '111309', '210777', '16'), +('5', '89', '1', '111303', '209750', '16'), +('5', '89', '1', '111300', '208526', '16'), +('5', '89', '1', '111305', '208288', '16'), +('5', '89', '2', '94056', '132520', '16'), +('5', '89', '2', '62985', '131814', '16'), +('5', '89', '2', '89368', '126019', '16'), +('5', '89', '2', '104403', '111581', '16'), +('5', '89', '3', '111312', '209891', '16'), +('5', '89', '3', '111315', '209008', '16'), +('5', '89', '3', '111313', '208939', '16'), +('5', '89', '3', '111316', '206910', '16'), +('5', '89', '5', '111318', '208664', '16'), +('5', '89', '5', '111320', '208513', '16'), +('5', '89', '5', '111319', '206496', '16'), +('5', '89', '5', '111017', '182959', '16'), +('5', '89', '8', '111331', '210672', '16'), +('5', '89', '8', '111328', '209975', '16'), +('5', '89', '8', '111332', '206899', '16'), +('5', '89', '8', '111030', '184892', '16'), +('5', '89', '6', '111322', '208987', '16'), +('5', '89', '6', '111324', '208967', '16'), +('5', '89', '6', '111326', '206598', '16'), +('5', '89', '6', '111021', '183257', '16'), +('5', '89', '17', '56046', '139003', '16'), +('5', '89', '17', '81765', '138346', '16'), +('5', '89', '17', '56083', '138184', '16'), +('5', '89', '17', '104406', '118658', '16'), +('5', '89', '7', '94053', '133315', '16'), +('5', '89', '7', '56079', '132482', '16'), +('5', '89', '7', '89369', '127295', '16'), +('5', '89', '7', '104404', '111200', '16'), +('5', '89', '9', '67098', '213631', '16'), +('5', '89', '9', '56031', '128679', '16'), +('5', '89', '9', '56033', '128420', '16'), +('5', '89', '9', '62992', '128393', '16'), +('5', '89', '15', '111348', '210089', '16'), +('5', '89', '15', '111343', '209775', '16'), +('5', '89', '15', '111341', '209677', '16'), +('5', '89', '15', '111345', '208133', '16'), +('5', '89', '20', '111354', '234429', '16'), +('5', '89', '20', '111355', '232452', '16'), +('5', '89', '20', '111353', '231748', '16'), +('5', '89', '20', '111351', '231237', '16'), +('5', '89', '12', '81795', '129645', '16'), +('5', '89', '12', '56073', '129594', '16'), +('5', '89', '12', '89366', '123217', '16'), +('5', '89', '12', '104401', '109819', '16'), +('5', '89', '18', '56041', '135545', '16'), +('5', '89', '18', '62986', '135454', '16'), +('5', '89', '18', '62987', '134283', '16'), +('5', '89', '18', '94054', '133984', '16'), +('5', '89', '19', '62990', '133797', '16'), +('5', '89', '19', '56037', '133026', '16'), +('5', '89', '19', '56075', '132156', '16'), +('5', '89', '19', '81763', '131735', '16'), +('5', '89', '13', '111526', '421535', '16'), +('5', '89', '13', '111514', '404975', '16'), +('5', '89', '13', '111520', '401031', '16'), +('5', '89', '13', '111525', '399497', '16'), +('5', '89', '14', '111536', '215754', '16'), +('5', '89', '14', '111535', '214412', '16'), +('5', '89', '14', '111538', '214128', '16'), +('5', '89', '14', '111236', '189854', '16'), +('5', '89', '11', '111529', '259701', '16'), +('5', '89', '11', '111229', '240537', '16'), +('5', '89', '11', '111338', '210064', '16'), +('5', '89', '11', '111336', '209868', '16'), +('5', '90', '22', '39342', '0', '17'), +('5', '90', '22', '12425', '0', '17'), +('5', '90', '22', '7867', '0', '17'), +('5', '90', '22', '23597', '0', '17'), +('5', '90', '1', '111309', '210783', '17'), +('5', '90', '1', '111303', '209755', '17'), +('5', '90', '1', '111300', '208530', '17'), +('5', '90', '1', '111305', '208293', '17'), +('5', '90', '2', '94056', '132524', '17'), +('5', '90', '2', '62985', '131818', '17'), +('5', '90', '2', '89368', '126025', '17'), +('5', '90', '2', '104403', '111587', '17'), +('5', '90', '3', '111312', '209896', '17'), +('5', '90', '3', '111315', '209015', '17'), +('5', '90', '3', '111313', '208944', '17'), +('5', '90', '3', '111316', '206915', '17'), +('5', '90', '5', '111318', '208669', '17'), +('5', '90', '5', '111320', '208518', '17'), +('5', '90', '5', '111319', '206503', '17'), +('5', '90', '5', '111017', '182964', '17'), +('5', '90', '8', '111331', '210678', '17'), +('5', '90', '8', '111328', '209982', '17'), +('5', '90', '8', '111332', '206904', '17'), +('5', '90', '8', '111030', '184898', '17'), +('5', '90', '6', '111322', '208992', '17'), +('5', '90', '6', '111324', '208973', '17'), +('5', '90', '6', '111326', '206604', '17'), +('5', '90', '6', '111021', '183262', '17'), +('5', '90', '17', '56046', '139009', '17'), +('5', '90', '17', '81765', '138350', '17'), +('5', '90', '17', '56083', '138188', '17'), +('5', '90', '17', '104406', '118664', '17'), +('5', '90', '7', '94053', '133320', '17'), +('5', '90', '7', '56079', '132488', '17'), +('5', '90', '7', '89369', '127300', '17'), +('5', '90', '7', '104404', '111204', '17'), +('5', '90', '9', '67098', '216036', '17'), +('5', '90', '9', '56031', '128684', '17'), +('5', '90', '9', '56033', '128422', '17'), +('5', '90', '9', '62992', '128399', '17'), +('5', '90', '15', '111348', '210095', '17'), +('5', '90', '15', '111343', '209779', '17'), +('5', '90', '15', '111341', '209685', '17'), +('5', '90', '15', '111345', '208138', '17'), +('5', '90', '20', '111354', '234435', '17'), +('5', '90', '20', '111355', '232455', '17'), +('5', '90', '20', '111353', '231754', '17'), +('5', '90', '20', '111351', '231241', '17'), +('5', '90', '12', '81795', '129651', '17'), +('5', '90', '12', '56073', '129601', '17'), +('5', '90', '12', '89366', '123222', '17'), +('5', '90', '12', '104401', '109824', '17'), +('5', '90', '18', '56041', '135549', '17'), +('5', '90', '18', '62986', '135461', '17'), +('5', '90', '18', '62987', '134287', '17'), +('5', '90', '18', '94054', '133989', '17'), +('5', '90', '19', '62990', '133803', '17'), +('5', '90', '19', '56037', '133031', '17'), +('5', '90', '19', '56075', '132161', '17'), +('5', '90', '19', '81763', '131741', '17'), +('5', '90', '13', '111526', '422078', '17'), +('5', '90', '13', '111514', '405518', '17'), +('5', '90', '13', '111520', '401545', '17'), +('5', '90', '13', '111525', '400011', '17'), +('5', '90', '14', '111536', '215759', '17'), +('5', '90', '14', '111535', '214418', '17'), +('5', '90', '14', '111538', '214133', '17'), +('5', '90', '14', '111236', '189859', '17'), +('5', '90', '11', '111529', '259781', '17'), +('5', '90', '11', '111229', '240618', '17'), +('5', '90', '11', '111338', '210070', '17'), +('5', '90', '11', '111336', '209873', '17'), +('5', '91', '22', '39342', '0', '17'), +('5', '91', '22', '12425', '0', '17'), +('5', '91', '22', '7867', '0', '17'), +('5', '91', '22', '23597', '0', '17'), +('5', '91', '1', '111309', '210788', '17'), +('5', '91', '1', '111303', '209761', '17'), +('5', '91', '1', '111300', '208535', '17'), +('5', '91', '1', '111305', '208297', '17'), +('5', '91', '2', '94056', '132528', '17'), +('5', '91', '2', '62985', '131821', '17'), +('5', '91', '2', '89368', '126030', '17'), +('5', '91', '2', '104403', '111593', '17'), +('5', '91', '3', '111312', '209902', '17'), +('5', '91', '3', '111315', '209022', '17'), +('5', '91', '3', '111313', '208948', '17'), +('5', '91', '3', '111316', '206921', '17'), +('5', '91', '5', '111318', '208674', '17'), +('5', '91', '5', '111320', '208524', '17'), +('5', '91', '5', '111319', '206509', '17'), +('5', '91', '5', '111017', '182969', '17'), +('5', '91', '8', '111331', '210683', '17'), +('5', '91', '8', '111328', '209988', '17'), +('5', '91', '8', '111332', '206909', '17'), +('5', '91', '8', '111030', '184903', '17'), +('5', '91', '6', '111322', '208996', '17'), +('5', '91', '6', '111324', '208979', '17'), +('5', '91', '6', '111326', '206609', '17'), +('5', '91', '6', '111021', '183266', '17'), +('5', '91', '17', '56046', '139015', '17'), +('5', '91', '17', '81765', '138355', '17'), +('5', '91', '17', '56083', '138192', '17'), +('5', '91', '17', '104406', '118671', '17'), +('5', '91', '7', '94053', '133326', '17'), +('5', '91', '7', '56079', '132494', '17'), +('5', '91', '7', '89369', '127306', '17'), +('5', '91', '7', '104404', '111208', '17'), +('5', '91', '9', '67098', '216041', '17'), +('5', '91', '9', '56031', '128689', '17'), +('5', '91', '9', '56033', '128425', '17'), +('5', '91', '9', '62992', '128405', '17'), +('5', '91', '15', '111348', '210100', '17'), +('5', '91', '15', '111343', '209783', '17'), +('5', '91', '15', '111341', '209693', '17'), +('5', '91', '15', '111345', '208143', '17'), +('5', '91', '20', '111354', '234440', '17'), +('5', '91', '20', '111355', '232459', '17'), +('5', '91', '20', '111353', '231761', '17'), +('5', '91', '20', '111351', '231246', '17'), +('5', '91', '12', '81795', '129656', '17'), +('5', '91', '12', '56073', '129608', '17'), +('5', '91', '12', '89366', '123226', '17'), +('5', '91', '12', '104401', '109830', '17'), +('5', '91', '18', '56041', '135554', '17'), +('5', '91', '18', '62986', '135468', '17'), +('5', '91', '18', '62987', '134291', '17'), +('5', '91', '18', '94054', '133994', '17'), +('5', '91', '19', '62990', '133808', '17'), +('5', '91', '19', '56037', '133035', '17'), +('5', '91', '19', '56075', '132166', '17'), +('5', '91', '19', '81763', '131747', '17'), +('5', '91', '13', '111526', '422620', '17'), +('5', '91', '13', '111514', '406032', '17'), +('5', '91', '13', '111520', '402059', '17'), +('5', '91', '13', '111525', '400526', '17'), +('5', '91', '14', '111536', '215765', '17'), +('5', '91', '14', '111535', '214423', '17'), +('5', '91', '14', '111538', '214138', '17'), +('5', '91', '14', '111236', '189865', '17'), +('5', '91', '11', '111529', '259861', '17'), +('5', '91', '11', '111229', '240689', '17'), +('5', '91', '11', '111338', '210076', '17'), +('5', '91', '11', '111336', '209879', '17'), +('5', '92', '22', '39342', '0', '17'), +('5', '92', '22', '12425', '0', '17'), +('5', '92', '22', '7867', '0', '17'), +('5', '92', '22', '23597', '0', '17'), +('5', '92', '1', '111309', '210793', '17'), +('5', '92', '1', '111303', '209766', '17'), +('5', '92', '1', '111300', '208540', '17'), +('5', '92', '1', '111305', '208302', '17'), +('5', '92', '2', '94056', '132533', '17'), +('5', '92', '2', '62985', '131824', '17'), +('5', '92', '2', '89368', '126035', '17'), +('5', '92', '2', '104403', '111599', '17'), +('5', '92', '3', '111312', '209907', '17'), +('5', '92', '3', '111315', '209030', '17'), +('5', '92', '3', '111313', '208953', '17'), +('5', '92', '3', '111316', '206926', '17'), +('5', '92', '5', '111318', '208679', '17'), +('5', '92', '5', '111320', '208529', '17'), +('5', '92', '5', '111319', '206516', '17'), +('5', '92', '5', '111017', '182974', '17'), +('5', '92', '8', '111331', '210689', '17'), +('5', '92', '8', '111328', '209995', '17'), +('5', '92', '8', '111332', '206913', '17'), +('5', '92', '8', '111030', '184909', '17'), +('5', '92', '6', '111322', '209001', '17'), +('5', '92', '6', '111324', '208985', '17'), +('5', '92', '6', '111326', '206615', '17'), +('5', '92', '6', '111021', '183271', '17'), +('5', '92', '17', '56046', '139022', '17'), +('5', '92', '17', '81765', '138360', '17'), +('5', '92', '17', '56083', '138196', '17'), +('5', '92', '17', '104406', '118677', '17'), +('5', '92', '7', '94053', '133331', '17'), +('5', '92', '7', '56079', '132500', '17'), +('5', '92', '7', '89369', '127311', '17'), +('5', '92', '7', '104404', '111212', '17'), +('5', '92', '9', '67098', '216046', '17'), +('5', '92', '9', '56031', '128695', '17'), +('5', '92', '9', '56033', '128427', '17'), +('5', '92', '9', '62992', '128411', '17'), +('5', '92', '15', '111348', '210106', '17'), +('5', '92', '15', '111343', '209787', '17'), +('5', '92', '15', '111341', '209700', '17'), +('5', '92', '15', '111345', '208148', '17'), +('5', '92', '20', '111354', '234445', '17'), +('5', '92', '20', '111355', '232463', '17'), +('5', '92', '20', '111353', '231767', '17'), +('5', '92', '20', '111351', '231250', '17'), +('5', '92', '12', '81795', '129662', '17'), +('5', '92', '12', '56073', '129615', '17'), +('5', '92', '12', '89366', '123231', '17'), +('5', '92', '12', '104401', '109835', '17'), +('5', '92', '18', '56041', '135558', '17'), +('5', '92', '18', '62986', '135474', '17'), +('5', '92', '18', '62987', '134295', '17'), +('5', '92', '18', '94054', '134000', '17'), +('5', '92', '19', '62990', '133814', '17'), +('5', '92', '19', '56037', '133039', '17'), +('5', '92', '19', '56075', '132171', '17'), +('5', '92', '19', '81763', '131753', '17'), +('5', '92', '13', '111526', '423163', '17'), +('5', '92', '13', '111514', '406546', '17'), +('5', '92', '13', '111520', '402573', '17'), +('5', '92', '13', '111525', '401041', '17'), +('5', '92', '14', '111536', '215770', '17'), +('5', '92', '14', '111535', '214429', '17'), +('5', '92', '14', '111538', '214143', '17'), +('5', '92', '14', '111236', '189870', '17'), +('5', '92', '11', '111529', '259932', '17'), +('5', '92', '11', '111229', '240770', '17'), +('5', '92', '11', '111338', '210082', '17'), +('5', '92', '11', '111336', '209885', '17'), +('5', '93', '22', '39342', '0', '17'), +('5', '93', '22', '12425', '0', '17'), +('5', '93', '22', '7867', '0', '17'), +('5', '93', '22', '23597', '0', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '93', '1', '111309', '210799', '17'), +('5', '93', '1', '111303', '209772', '17'), +('5', '93', '1', '111300', '208545', '17'), +('5', '93', '1', '111305', '208307', '17'), +('5', '93', '2', '94056', '132537', '17'), +('5', '93', '2', '62985', '131827', '17'), +('5', '93', '2', '89368', '126040', '17'), +('5', '93', '2', '104403', '111605', '17'), +('5', '93', '3', '111312', '209912', '17'), +('5', '93', '3', '111315', '209037', '17'), +('5', '93', '3', '111313', '208957', '17'), +('5', '93', '3', '111316', '206932', '17'), +('5', '93', '5', '111318', '208684', '17'), +('5', '93', '5', '111320', '208535', '17'), +('5', '93', '5', '111319', '206523', '17'), +('5', '93', '5', '111017', '182979', '17'), +('5', '93', '8', '111331', '210695', '17'), +('5', '93', '8', '111328', '210002', '17'), +('5', '93', '8', '111332', '206918', '17'), +('5', '93', '8', '111030', '184915', '17'), +('5', '93', '6', '111322', '209006', '17'), +('5', '93', '6', '111324', '208991', '17'), +('5', '93', '6', '111326', '206621', '17'), +('5', '93', '6', '111021', '183276', '17'), +('5', '93', '17', '56046', '139028', '17'), +('5', '93', '17', '81765', '138364', '17'), +('5', '93', '17', '56083', '138200', '17'), +('5', '93', '17', '104406', '118683', '17'), +('5', '93', '7', '94053', '133336', '17'), +('5', '93', '7', '56079', '132506', '17'), +('5', '93', '7', '89369', '127316', '17'), +('5', '93', '7', '104404', '111216', '17'), +('5', '93', '9', '67098', '216051', '17'), +('5', '93', '9', '56031', '128700', '17'), +('5', '93', '9', '56033', '128430', '17'), +('5', '93', '9', '62992', '128417', '17'), +('5', '93', '15', '111348', '210112', '17'), +('5', '93', '15', '111343', '209791', '17'), +('5', '93', '15', '111341', '209708', '17'), +('5', '93', '15', '111345', '208153', '17'), +('5', '93', '20', '111354', '234451', '17'), +('5', '93', '20', '111355', '232467', '17'), +('5', '93', '20', '111353', '231773', '17'), +('5', '93', '20', '111351', '231255', '17'), +('5', '93', '12', '81795', '129668', '17'), +('5', '93', '12', '56073', '129622', '17'), +('5', '93', '12', '89366', '123235', '17'), +('5', '93', '12', '104401', '109841', '17'), +('5', '93', '18', '56041', '135562', '17'), +('5', '93', '18', '62986', '135481', '17'), +('5', '93', '18', '62987', '134300', '17'), +('5', '93', '18', '94054', '134005', '17'), +('5', '93', '19', '62990', '133820', '17'), +('5', '93', '19', '56037', '133044', '17'), +('5', '93', '19', '56075', '132176', '17'), +('5', '93', '19', '81763', '131758', '17'), +('5', '93', '13', '111526', '423706', '17'), +('5', '93', '13', '111514', '407061', '17'), +('5', '93', '13', '111520', '403087', '17'), +('5', '93', '13', '111525', '401555', '17'), +('5', '93', '14', '111536', '215776', '17'), +('5', '93', '14', '111535', '214435', '17'), +('5', '93', '14', '111538', '214148', '17'), +('5', '93', '14', '111236', '189876', '17'), +('5', '93', '11', '111529', '260013', '17'), +('5', '93', '11', '111229', '240841', '17'), +('5', '93', '11', '111338', '210088', '17'), +('5', '93', '11', '111336', '209891', '17'), +('5', '94', '22', '39342', '0', '17'), +('5', '94', '22', '12425', '0', '17'), +('5', '94', '22', '7867', '0', '17'), +('5', '94', '22', '23597', '0', '17'), +('5', '94', '1', '111309', '210804', '17'), +('5', '94', '1', '111303', '209777', '17'), +('5', '94', '1', '111300', '208549', '17'), +('5', '94', '1', '111305', '208312', '17'), +('5', '94', '2', '94056', '132541', '17'), +('5', '94', '2', '62985', '131831', '17'), +('5', '94', '2', '89368', '126046', '17'), +('5', '94', '2', '104403', '111610', '17'), +('5', '94', '3', '111312', '209918', '17'), +('5', '94', '3', '111315', '209044', '17'), +('5', '94', '3', '111313', '208962', '17'), +('5', '94', '3', '111316', '206937', '17'), +('5', '94', '5', '111318', '208689', '17'), +('5', '94', '5', '111320', '208540', '17'), +('5', '94', '5', '111319', '206530', '17'), +('5', '94', '5', '111017', '182984', '17'), +('5', '94', '8', '111331', '210701', '17'), +('5', '94', '8', '111328', '210009', '17'), +('5', '94', '8', '111332', '206922', '17'), +('5', '94', '8', '111030', '184921', '17'), +('5', '94', '6', '111322', '209011', '17'), +('5', '94', '6', '111324', '208997', '17'), +('5', '94', '6', '111326', '206627', '17'), +('5', '94', '6', '111021', '183281', '17'), +('5', '94', '17', '56046', '139034', '17'), +('5', '94', '17', '81765', '138369', '17'), +('5', '94', '17', '56083', '138204', '17'), +('5', '94', '17', '104406', '118690', '17'), +('5', '94', '7', '94053', '133342', '17'), +('5', '94', '7', '56079', '132512', '17'), +('5', '94', '7', '89369', '127322', '17'), +('5', '94', '7', '104404', '111220', '17'), +('5', '94', '9', '67098', '216055', '17'), +('5', '94', '9', '56031', '128705', '17'), +('5', '94', '9', '56033', '128432', '17'), +('5', '94', '9', '62992', '128423', '17'), +('5', '94', '15', '111348', '210118', '17'), +('5', '94', '15', '111343', '209795', '17'), +('5', '94', '15', '111341', '209716', '17'), +('5', '94', '15', '111345', '208158', '17'), +('5', '94', '20', '111354', '234456', '17'), +('5', '94', '20', '111355', '232470', '17'), +('5', '94', '20', '111353', '231780', '17'), +('5', '94', '20', '111351', '231259', '17'), +('5', '94', '12', '81795', '129674', '17'), +('5', '94', '12', '56073', '129629', '17'), +('5', '94', '12', '89366', '123240', '17'), +('5', '94', '12', '104401', '109847', '17'), +('5', '94', '18', '56041', '135566', '17'), +('5', '94', '18', '62986', '135488', '17'), +('5', '94', '18', '62987', '134304', '17'), +('5', '94', '18', '94054', '134010', '17'), +('5', '94', '19', '62990', '133826', '17'), +('5', '94', '19', '56037', '133048', '17'), +('5', '94', '19', '56075', '132181', '17'), +('5', '94', '19', '81763', '131764', '17'), +('5', '94', '13', '111526', '424220', '17'), +('5', '94', '13', '111514', '407575', '17'), +('5', '94', '13', '111520', '403601', '17'), +('5', '94', '13', '111525', '402070', '17'), +('5', '94', '14', '111536', '215781', '17'), +('5', '94', '14', '111535', '214440', '17'), +('5', '94', '14', '111538', '214153', '17'), +('5', '94', '14', '111236', '189881', '17'), +('5', '94', '11', '111529', '260093', '17'), +('5', '94', '11', '111229', '240912', '17'), +('5', '94', '11', '111338', '210095', '17'), +('5', '94', '11', '111336', '209897', '17'), +('5', '95', '22', '7867', '0', '18'), +('5', '95', '22', '39342', '0', '18'), +('5', '95', '22', '23597', '0', '18'), +('5', '95', '22', '53550', '0', '18'), +('5', '95', '1', '111309', '210810', '18'), +('5', '95', '1', '111303', '209783', '18'), +('5', '95', '1', '111300', '208554', '18'), +('5', '95', '1', '111305', '208317', '18'), +('5', '95', '2', '94056', '132545', '18'), +('5', '95', '2', '62985', '131834', '18'), +('5', '95', '2', '89368', '126051', '18'), +('5', '95', '2', '104403', '111616', '18'), +('5', '95', '3', '111312', '209923', '18'), +('5', '95', '3', '111315', '209051', '18'), +('5', '95', '3', '111313', '208966', '18'), +('5', '95', '3', '111316', '206942', '18'), +('5', '95', '5', '111318', '208693', '18'), +('5', '95', '5', '111320', '208546', '18'), +('5', '95', '5', '111319', '206536', '18'), +('5', '95', '5', '111017', '182988', '18'), +('5', '95', '8', '111331', '210706', '18'), +('5', '95', '8', '111328', '210015', '18'), +('5', '95', '8', '111332', '206927', '18'), +('5', '95', '8', '111030', '184926', '18'), +('5', '95', '6', '111322', '209016', '18'), +('5', '95', '6', '111324', '209003', '18'), +('5', '95', '6', '111326', '206632', '18'), +('5', '95', '6', '111021', '183286', '18'), +('5', '95', '17', '56046', '139041', '18'), +('5', '95', '17', '81765', '138373', '18'), +('5', '95', '17', '56083', '138208', '18'), +('5', '95', '17', '104406', '118696', '18'), +('5', '95', '7', '94053', '133347', '18'), +('5', '95', '7', '56079', '132517', '18'), +('5', '95', '7', '89369', '127327', '18'), +('5', '95', '7', '104404', '111224', '18'), +('5', '95', '9', '67098', '216060', '18'), +('5', '95', '9', '56031', '128710', '18'), +('5', '95', '9', '56033', '128435', '18'), +('5', '95', '9', '62992', '128429', '18'), +('5', '95', '15', '111348', '210123', '18'), +('5', '95', '15', '111343', '209799', '18'), +('5', '95', '15', '111341', '209724', '18'), +('5', '95', '15', '111345', '208163', '18'), +('5', '95', '20', '111354', '234461', '18'), +('5', '95', '20', '111355', '232474', '18'), +('5', '95', '20', '111353', '231786', '18'), +('5', '95', '20', '111351', '231264', '18'), +('5', '95', '12', '81795', '129680', '18'), +('5', '95', '12', '56073', '129636', '18'), +('5', '95', '12', '89366', '123244', '18'), +('5', '95', '12', '104401', '109852', '18'), +('5', '95', '18', '56041', '135570', '18'), +('5', '95', '18', '62986', '135494', '18'), +('5', '95', '18', '62987', '134308', '18'), +('5', '95', '18', '94054', '134016', '18'), +('5', '95', '19', '62990', '133832', '18'), +('5', '95', '19', '56037', '133052', '18'), +('5', '95', '19', '56075', '132186', '18'), +('5', '95', '19', '81763', '131770', '18'), +('5', '95', '13', '111526', '424762', '18'), +('5', '95', '13', '111514', '408089', '18'), +('5', '95', '13', '111520', '404115', '18'), +('5', '95', '13', '111525', '402585', '18'), +('5', '95', '14', '111536', '215787', '18'), +('5', '95', '14', '111535', '214446', '18'), +('5', '95', '14', '111538', '214158', '18'), +('5', '95', '14', '111236', '189887', '18'), +('5', '95', '11', '111529', '260173', '18'), +('5', '95', '11', '111229', '240993', '18'), +('5', '95', '11', '111338', '210101', '18'), +('5', '95', '11', '111336', '209902', '18'), +('5', '96', '22', '7867', '0', '18'), +('5', '96', '22', '39342', '0', '18'), +('5', '96', '22', '23597', '0', '18'), +('5', '96', '22', '53550', '0', '18'), +('5', '96', '1', '111309', '210815', '18'), +('5', '96', '1', '111303', '209789', '18'), +('5', '96', '1', '111300', '208559', '18'), +('5', '96', '1', '111305', '208321', '18'), +('5', '96', '2', '94056', '132549', '18'), +('5', '96', '2', '62985', '131837', '18'), +('5', '96', '2', '89368', '126056', '18'), +('5', '96', '2', '104403', '111622', '18'), +('5', '96', '3', '111312', '209928', '18'), +('5', '96', '3', '111315', '209058', '18'), +('5', '96', '3', '111313', '208971', '18'), +('5', '96', '3', '111316', '206948', '18'), +('5', '96', '5', '111318', '208698', '18'), +('5', '96', '5', '111320', '208551', '18'), +('5', '96', '5', '111319', '206543', '18'), +('5', '96', '5', '111017', '182993', '18'), +('5', '96', '8', '111331', '210712', '18'), +('5', '96', '8', '111328', '210022', '18'), +('5', '96', '8', '111332', '206932', '18'), +('5', '96', '8', '111030', '184932', '18'), +('5', '96', '6', '111322', '209020', '18'), +('5', '96', '6', '111324', '209009', '18'), +('5', '96', '6', '111326', '206638', '18'), +('5', '96', '6', '111021', '183290', '18'), +('5', '96', '17', '56046', '139047', '18'), +('5', '96', '17', '81765', '138378', '18'), +('5', '96', '17', '56083', '138212', '18'), +('5', '96', '17', '104406', '118702', '18'), +('5', '96', '7', '94053', '133353', '18'), +('5', '96', '7', '56079', '132523', '18'), +('5', '96', '7', '89369', '127333', '18'), +('5', '96', '7', '104404', '111228', '18'), +('5', '96', '9', '67098', '216065', '18'), +('5', '96', '9', '56031', '128716', '18'), +('5', '96', '9', '56033', '128438', '18'), +('5', '96', '9', '62992', '128435', '18'), +('5', '96', '15', '111348', '210129', '18'), +('5', '96', '15', '111343', '209804', '18'), +('5', '96', '15', '111341', '209732', '18'), +('5', '96', '15', '111345', '208168', '18'), +('5', '96', '20', '111354', '234467', '18'), +('5', '96', '20', '111355', '232478', '18'), +('5', '96', '20', '111353', '231792', '18'), +('5', '96', '20', '111351', '231268', '18'), +('5', '96', '12', '81795', '129686', '18'), +('5', '96', '12', '56073', '129643', '18'), +('5', '96', '12', '89366', '123249', '18'), +('5', '96', '12', '104401', '109858', '18'), +('5', '96', '18', '56041', '135574', '18'), +('5', '96', '18', '62986', '135501', '18'), +('5', '96', '18', '62987', '134312', '18'), +('5', '96', '18', '94054', '134021', '18'), +('5', '96', '19', '62990', '133837', '18'), +('5', '96', '19', '56037', '133057', '18'), +('5', '96', '19', '56075', '132191', '18'), +('5', '96', '19', '81763', '131776', '18'), +('5', '96', '13', '111526', '425305', '18'), +('5', '96', '13', '111514', '408632', '18'), +('5', '96', '13', '111520', '404629', '18'), +('5', '96', '13', '111525', '403099', '18'), +('5', '96', '14', '111536', '215792', '18'), +('5', '96', '14', '111535', '214451', '18'), +('5', '96', '14', '111538', '214163', '18'), +('5', '96', '14', '111236', '189892', '18'), +('5', '96', '11', '111529', '260244', '18'), +('5', '96', '11', '111229', '241064', '18'), +('5', '96', '11', '111338', '210107', '18'), +('5', '96', '11', '111336', '209908', '18'), +('5', '97', '22', '7867', '0', '18'), +('5', '97', '22', '39342', '0', '18'), +('5', '97', '22', '23597', '0', '18'), +('5', '97', '22', '53550', '0', '18'), +('5', '97', '1', '111309', '210820', '18'), +('5', '97', '1', '111303', '209794', '18'), +('5', '97', '1', '111300', '208563', '18'), +('5', '97', '1', '111305', '208326', '18'), +('5', '97', '2', '94056', '132554', '18'), +('5', '97', '2', '62985', '131841', '18'), +('5', '97', '2', '89368', '126061', '18'), +('5', '97', '2', '104403', '111628', '18'), +('5', '97', '3', '111312', '209933', '18'), +('5', '97', '3', '111315', '209066', '18'), +('5', '97', '3', '111313', '208975', '18'), +('5', '97', '3', '111316', '206953', '18'), +('5', '97', '5', '111318', '208703', '18'), +('5', '97', '5', '111320', '208557', '18'), +('5', '97', '5', '111319', '206550', '18'), +('5', '97', '5', '111017', '182998', '18'), +('5', '97', '8', '111331', '210718', '18'), +('5', '97', '8', '111328', '210029', '18'), +('5', '97', '8', '111332', '206936', '18'), +('5', '97', '8', '111030', '184938', '18'), +('5', '97', '6', '111322', '209025', '18'), +('5', '97', '6', '111324', '209015', '18'), +('5', '97', '6', '111326', '206644', '18'), +('5', '97', '6', '111021', '183295', '18'), +('5', '97', '17', '56046', '139053', '18'), +('5', '97', '17', '81765', '138383', '18'), +('5', '97', '17', '56083', '138216', '18'), +('5', '97', '17', '104406', '118709', '18'), +('5', '97', '7', '94053', '133358', '18'), +('5', '97', '7', '56079', '132529', '18'), +('5', '97', '7', '89369', '127338', '18'), +('5', '97', '7', '104404', '111232', '18'), +('5', '97', '9', '67098', '216070', '18'), +('5', '97', '9', '56031', '128721', '18'), +('5', '97', '9', '62992', '128441', '18'), +('5', '97', '9', '56033', '128440', '18'), +('5', '97', '15', '111348', '210135', '18'), +('5', '97', '15', '111343', '209808', '18'), +('5', '97', '15', '111341', '209740', '18'), +('5', '97', '15', '111345', '208173', '18'), +('5', '97', '20', '111354', '234472', '18'), +('5', '97', '20', '111355', '232481', '18'), +('5', '97', '20', '111353', '231799', '18'), +('5', '97', '20', '111351', '231273', '18'), +('5', '97', '12', '81795', '129691', '18'), +('5', '97', '12', '56073', '129650', '18'), +('5', '97', '12', '89366', '123253', '18'), +('5', '97', '12', '104401', '109863', '18'), +('5', '97', '18', '56041', '135578', '18'), +('5', '97', '18', '62986', '135508', '18'), +('5', '97', '18', '62987', '134316', '18'), +('5', '97', '18', '94054', '134026', '18'), +('5', '97', '19', '62990', '133843', '18'), +('5', '97', '19', '56037', '133061', '18'), +('5', '97', '19', '56075', '132196', '18'), +('5', '97', '19', '81763', '131782', '18'), +('5', '97', '13', '111526', '425847', '18'), +('5', '97', '13', '111514', '409147', '18'), +('5', '97', '13', '111520', '405144', '18'), +('5', '97', '13', '111525', '403614', '18'), +('5', '97', '14', '111536', '215798', '18'), +('5', '97', '14', '111535', '214457', '18'), +('5', '97', '14', '111538', '214168', '18'), +('5', '97', '14', '111236', '189898', '18'), +('5', '97', '11', '111529', '260325', '18'), +('5', '97', '11', '111229', '241145', '18'), +('5', '97', '11', '111338', '210113', '18'), +('5', '97', '11', '111336', '209914', '18'), +('5', '98', '22', '7867', '0', '18'), +('5', '98', '22', '39342', '0', '18'), +('5', '98', '22', '23597', '0', '18'), +('5', '98', '22', '53550', '0', '18'), +('5', '98', '1', '111309', '210826', '18'), +('5', '98', '1', '111303', '209800', '18'), +('5', '98', '1', '111300', '208568', '18'), +('5', '98', '1', '111305', '208331', '18'), +('5', '98', '2', '94056', '132558', '18'), +('5', '98', '2', '62985', '131844', '18'), +('5', '98', '2', '89368', '126066', '18'), +('5', '98', '2', '104403', '111633', '18'), +('5', '98', '3', '111312', '209939', '18'), +('5', '98', '3', '111315', '209073', '18'), +('5', '98', '3', '111313', '208980', '18'), +('5', '98', '3', '111316', '206959', '18'), +('5', '98', '5', '111318', '208708', '18'), +('5', '98', '5', '111320', '208562', '18'), +('5', '98', '5', '111319', '206557', '18'), +('5', '98', '5', '111017', '183003', '18'), +('5', '98', '8', '111331', '210724', '18'), +('5', '98', '8', '111328', '210036', '18'), +('5', '98', '8', '111332', '206941', '18'), +('5', '98', '8', '111030', '184944', '18'), +('5', '98', '6', '111322', '209030', '18'), +('5', '98', '6', '111324', '209020', '18'), +('5', '98', '6', '111326', '206650', '18'), +('5', '98', '6', '111021', '183300', '18'), +('5', '98', '17', '56046', '139060', '18'), +('5', '98', '17', '81765', '138387', '18'), +('5', '98', '17', '56083', '138220', '18'), +('5', '98', '17', '104406', '118715', '18'), +('5', '98', '7', '94053', '133363', '18'), +('5', '98', '7', '56079', '132535', '18'), +('5', '98', '7', '89369', '127344', '18'), +('5', '98', '7', '104404', '111236', '18'), +('5', '98', '9', '67098', '216074', '18'), +('5', '98', '9', '56031', '128726', '18'), +('5', '98', '9', '62992', '128448', '18'), +('5', '98', '9', '56033', '128443', '18'), +('5', '98', '15', '111348', '210141', '18'), +('5', '98', '15', '111343', '209812', '18'), +('5', '98', '15', '111341', '209748', '18'), +('5', '98', '15', '111345', '208178', '18'), +('5', '98', '20', '111354', '234477', '18'), +('5', '98', '20', '111355', '232485', '18'), +('5', '98', '20', '111353', '231805', '18'), +('5', '98', '20', '111351', '231277', '18'), +('5', '98', '12', '81795', '129697', '18'), +('5', '98', '12', '56073', '129657', '18'), +('5', '98', '12', '89366', '123258', '18'), +('5', '98', '12', '104401', '109869', '18'), +('5', '98', '18', '56041', '135582', '18'), +('5', '98', '18', '62986', '135515', '18'), +('5', '98', '18', '62987', '134321', '18'), +('5', '98', '18', '94054', '134032', '18'), +('5', '98', '19', '62990', '133849', '18'), +('5', '98', '19', '56037', '133065', '18'), +('5', '98', '19', '56075', '132201', '18'), +('5', '98', '19', '81763', '131788', '18'), +('5', '98', '13', '111526', '426390', '18'), +('5', '98', '13', '111514', '409661', '18'), +('5', '98', '13', '111520', '405658', '18'), +('5', '98', '13', '111525', '404129', '18'), +('5', '98', '14', '111536', '215803', '18'), +('5', '98', '14', '111535', '214463', '18'), +('5', '98', '14', '111538', '214173', '18'), +('5', '98', '14', '111236', '189903', '18'), +('5', '98', '11', '111529', '260405', '18'), +('5', '98', '11', '111229', '241216', '18'), +('5', '98', '11', '111338', '210119', '18'), +('5', '98', '11', '111336', '209920', '18'), +('5', '99', '22', '7867', '0', '18'), +('5', '99', '22', '39342', '0', '18'), +('5', '99', '22', '23597', '0', '18'), +('5', '99', '22', '53550', '0', '18'), +('5', '99', '1', '111309', '210831', '18'), +('5', '99', '1', '111303', '209805', '18'), +('5', '99', '1', '111300', '208573', '18'), +('5', '99', '1', '111305', '208336', '18'), +('5', '99', '2', '94056', '132562', '18'), +('5', '99', '2', '62985', '131847', '18'), +('5', '99', '2', '89368', '126072', '18'), +('5', '99', '2', '104403', '111639', '18'), +('5', '99', '3', '111312', '209944', '18'), +('5', '99', '3', '111315', '209080', '18'), +('5', '99', '3', '111313', '208984', '18'), +('5', '99', '3', '111316', '206964', '18'), +('5', '99', '5', '111318', '208713', '18'), +('5', '99', '5', '111320', '208568', '18'), +('5', '99', '5', '111319', '206564', '18'), +('5', '99', '5', '111017', '183008', '18'), +('5', '99', '8', '111331', '210729', '18'), +('5', '99', '8', '111328', '210043', '18'), +('5', '99', '8', '111332', '206946', '18'), +('5', '99', '8', '111030', '184949', '18'), +('5', '99', '6', '111322', '209035', '18'), +('5', '99', '6', '111324', '209026', '18'), +('5', '99', '6', '111326', '206655', '18'), +('5', '99', '6', '111021', '183305', '18'), +('5', '99', '17', '56046', '139066', '18'), +('5', '99', '17', '81765', '138392', '18'), +('5', '99', '17', '56083', '138224', '18'), +('5', '99', '17', '104406', '118721', '18'), +('5', '99', '7', '94053', '133369', '18'), +('5', '99', '7', '56079', '132541', '18'), +('5', '99', '7', '89369', '127349', '18'), +('5', '99', '7', '104404', '111240', '18'), +('5', '99', '9', '67098', '216079', '18'), +('5', '99', '9', '56031', '128732', '18'), +('5', '99', '9', '62992', '128454', '18'), +('5', '99', '9', '56033', '128445', '18'), +('5', '99', '15', '111348', '210147', '18'), +('5', '99', '15', '111343', '209816', '18'), +('5', '99', '15', '111341', '209755', '18'), +('5', '99', '15', '111345', '208183', '18'), +('5', '99', '20', '111354', '234483', '18'), +('5', '99', '20', '111355', '232489', '18'), +('5', '99', '20', '111353', '231811', '18'), +('5', '99', '20', '111351', '231282', '18'), +('5', '99', '12', '81795', '129703', '18'), +('5', '99', '12', '56073', '129664', '18'), +('5', '99', '12', '89366', '123263', '18'), +('5', '99', '12', '104401', '109875', '18'), +('5', '99', '18', '56041', '135586', '18'), +('5', '99', '18', '62986', '135521', '18'), +('5', '99', '18', '62987', '134325', '18'), +('5', '99', '18', '94054', '134037', '18'), +('5', '99', '19', '62990', '133855', '18'), +('5', '99', '19', '56037', '133070', '18'), +('5', '99', '19', '56075', '132206', '18'), +('5', '99', '19', '81763', '131793', '18'), +('5', '99', '13', '111526', '426933', '18'), +('5', '99', '13', '111514', '410175', '18'), +('5', '99', '13', '111520', '406172', '18'), +('5', '99', '13', '111525', '404643', '18'), +('5', '99', '14', '111536', '215809', '18'), +('5', '99', '14', '111535', '214468', '18'), +('5', '99', '14', '111538', '214178', '18'), +('5', '99', '14', '111236', '189909', '18'), +('5', '99', '11', '111529', '260476', '18'), +('5', '99', '11', '111229', '241287', '18'), +('5', '99', '11', '111338', '210125', '18'), +('5', '99', '11', '111336', '209925', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '100', '22', '7867', '0', '20'), +('5', '100', '22', '39342', '0', '20'), +('5', '100', '22', '23597', '0', '20'), +('5', '100', '22', '53550', '0', '20'), +('5', '100', '1', '98769', '351419', '20'), +('5', '100', '1', '111309', '210837', '20'), +('5', '100', '1', '111303', '209811', '20'), +('5', '100', '1', '111300', '208578', '20'), +('5', '100', '2', '94056', '132566', '20'), +('5', '100', '2', '62985', '131851', '20'), +('5', '100', '2', '89368', '126077', '20'), +('5', '100', '2', '104403', '111645', '20'), +('5', '100', '3', '111312', '209950', '20'), +('5', '100', '3', '111315', '209088', '20'), +('5', '100', '3', '111313', '208989', '20'), +('5', '100', '3', '111316', '206970', '20'), +('5', '100', '5', '111318', '208719', '20'), +('5', '100', '5', '111320', '208574', '20'), +('5', '100', '5', '111319', '206571', '20'), +('5', '100', '5', '111017', '183014', '20'), +('5', '100', '8', '111331', '210736', '20'), +('5', '100', '8', '111328', '210050', '20'), +('5', '100', '8', '111332', '206950', '20'), +('5', '100', '8', '111030', '184956', '20'), +('5', '100', '6', '111322', '209040', '20'), +('5', '100', '6', '111324', '209032', '20'), +('5', '100', '6', '111326', '206661', '20'), +('5', '100', '6', '111021', '183310', '20'), +('5', '100', '17', '56046', '139073', '20'), +('5', '100', '17', '81765', '138397', '20'), +('5', '100', '17', '56083', '138228', '20'), +('5', '100', '17', '104406', '118728', '20'), +('5', '100', '7', '94053', '133374', '20'), +('5', '100', '7', '56079', '132547', '20'), +('5', '100', '7', '89369', '127355', '20'), +('5', '100', '7', '104404', '111244', '20'), +('5', '100', '9', '67098', '216084', '20'), +('5', '100', '9', '56031', '128737', '20'), +('5', '100', '9', '62992', '128460', '20'), +('5', '100', '9', '56033', '128448', '20'), +('5', '100', '15', '111348', '210153', '20'), +('5', '100', '15', '111343', '209820', '20'), +('5', '100', '15', '111341', '209764', '20'), +('5', '100', '15', '111345', '208188', '20'), +('5', '100', '20', '111354', '234488', '20'), +('5', '100', '20', '111355', '232493', '20'), +('5', '100', '20', '111353', '231818', '20'), +('5', '100', '20', '111351', '231287', '20'), +('5', '100', '12', '81795', '129709', '20'), +('5', '100', '12', '56073', '129671', '20'), +('5', '100', '12', '89366', '123267', '20'), +('5', '100', '12', '104401', '109880', '20'), +('5', '100', '18', '56041', '135590', '20'), +('5', '100', '18', '62986', '135528', '20'), +('5', '100', '18', '62987', '134329', '20'), +('5', '100', '18', '94054', '134043', '20'), +('5', '100', '19', '62990', '133861', '20'), +('5', '100', '19', '56037', '133074', '20'), +('5', '100', '19', '56075', '132211', '20'), +('5', '100', '19', '81763', '131799', '20'), +('5', '100', '13', '111526', '428750', '20'), +('5', '100', '13', '111514', '411965', '20'), +('5', '100', '13', '111520', '407961', '20'), +('5', '100', '13', '111525', '406405', '20'), +('5', '100', '14', '111536', '215815', '20'), +('5', '100', '14', '111535', '214474', '20'), +('5', '100', '14', '111538', '214183', '20'), +('5', '100', '14', '111236', '189915', '20'), +('5', '100', '11', '133816', '271321', '20'), +('5', '100', '11', '111529', '260556', '20'), +('5', '100', '11', '111229', '241368', '20'), +('5', '100', '11', '111338', '210132', '20'), +('5', '100', '22', '7867', '0', '19'), +('5', '100', '22', '39342', '0', '19'), +('5', '100', '22', '23597', '0', '19'), +('5', '100', '22', '53550', '0', '19'), +('5', '100', '1', '98769', '351419', '19'), +('5', '100', '1', '111309', '210837', '19'), +('5', '100', '1', '111303', '209811', '19'), +('5', '100', '1', '111300', '208578', '19'), +('5', '100', '2', '94056', '132566', '19'), +('5', '100', '2', '62985', '131851', '19'), +('5', '100', '2', '89368', '126077', '19'), +('5', '100', '2', '104403', '111645', '19'), +('5', '100', '3', '111312', '209950', '19'), +('5', '100', '3', '111315', '209088', '19'), +('5', '100', '3', '111313', '208989', '19'), +('5', '100', '3', '111316', '206970', '19'), +('5', '100', '5', '111318', '208719', '19'), +('5', '100', '5', '111320', '208574', '19'), +('5', '100', '5', '111319', '206571', '19'), +('5', '100', '5', '111017', '183014', '19'), +('5', '100', '8', '111331', '210736', '19'), +('5', '100', '8', '111328', '210050', '19'), +('5', '100', '8', '111332', '206950', '19'), +('5', '100', '8', '111030', '184956', '19'), +('5', '100', '6', '111322', '209040', '19'), +('5', '100', '6', '111324', '209032', '19'), +('5', '100', '6', '111326', '206661', '19'), +('5', '100', '6', '111021', '183310', '19'), +('5', '100', '17', '56046', '139073', '19'), +('5', '100', '17', '81765', '138397', '19'), +('5', '100', '17', '56083', '138228', '19'), +('5', '100', '17', '104406', '118728', '19'), +('5', '100', '7', '94053', '133374', '19'), +('5', '100', '7', '56079', '132547', '19'), +('5', '100', '7', '89369', '127355', '19'), +('5', '100', '7', '104404', '111244', '19'), +('5', '100', '9', '67098', '216084', '19'), +('5', '100', '9', '56031', '128737', '19'), +('5', '100', '9', '62992', '128460', '19'), +('5', '100', '9', '56033', '128448', '19'), +('5', '100', '15', '111348', '210153', '19'), +('5', '100', '15', '111343', '209820', '19'), +('5', '100', '15', '111341', '209764', '19'), +('5', '100', '15', '111345', '208188', '19'), +('5', '100', '20', '111354', '234488', '19'), +('5', '100', '20', '111355', '232493', '19'), +('5', '100', '20', '111353', '231818', '19'), +('5', '100', '20', '111351', '231287', '19'), +('5', '100', '12', '81795', '129709', '19'), +('5', '100', '12', '56073', '129671', '19'), +('5', '100', '12', '89366', '123267', '19'), +('5', '100', '12', '104401', '109880', '19'), +('5', '100', '18', '56041', '135590', '19'), +('5', '100', '18', '62986', '135528', '19'), +('5', '100', '18', '62987', '134329', '19'), +('5', '100', '18', '94054', '134043', '19'), +('5', '100', '19', '62990', '133861', '19'), +('5', '100', '19', '56037', '133074', '19'), +('5', '100', '19', '56075', '132211', '19'), +('5', '100', '19', '81763', '131799', '19'), +('5', '100', '13', '111526', '427475', '19'), +('5', '100', '13', '111514', '410690', '19'), +('5', '100', '13', '111520', '406686', '19'), +('5', '100', '13', '111525', '405130', '19'), +('5', '100', '14', '111536', '215815', '19'), +('5', '100', '14', '111535', '214474', '19'), +('5', '100', '14', '111538', '214183', '19'), +('5', '100', '14', '111236', '189915', '19'), +('5', '100', '11', '133816', '271321', '19'), +('5', '100', '11', '111529', '260556', '19'), +('5', '100', '11', '111229', '241368', '19'), +('5', '100', '11', '111338', '210132', '19'), +('5', '101', '22', '7867', '0', '20'), +('5', '101', '22', '39342', '0', '20'), +('5', '101', '22', '23597', '0', '20'), +('5', '101', '22', '53550', '0', '20'), +('5', '101', '1', '98769', '351423', '20'), +('5', '101', '1', '111309', '210842', '20'), +('5', '101', '1', '111303', '209817', '20'), +('5', '101', '1', '111300', '208583', '20'), +('5', '101', '2', '94056', '132571', '20'), +('5', '101', '2', '62985', '131854', '20'), +('5', '101', '2', '89368', '126082', '20'), +('5', '101', '2', '104403', '111651', '20'), +('5', '101', '3', '111312', '209955', '20'), +('5', '101', '3', '111315', '209095', '20'), +('5', '101', '3', '111313', '208994', '20'), +('5', '101', '3', '111316', '206975', '20'), +('5', '101', '5', '111318', '208724', '20'), +('5', '101', '5', '111320', '208579', '20'), +('5', '101', '5', '111319', '206578', '20'), +('5', '101', '5', '111017', '183019', '20'), +('5', '101', '8', '111331', '210741', '20'), +('5', '101', '8', '111328', '210056', '20'), +('5', '101', '8', '111332', '206955', '20'), +('5', '101', '8', '111030', '184961', '20'), +('5', '101', '6', '111322', '209045', '20'), +('5', '101', '6', '111324', '209038', '20'), +('5', '101', '6', '111326', '206667', '20'), +('5', '101', '6', '111021', '183315', '20'), +('5', '101', '17', '56046', '139079', '20'), +('5', '101', '17', '81765', '138401', '20'), +('5', '101', '17', '56083', '138232', '20'), +('5', '101', '17', '104406', '118734', '20'), +('5', '101', '7', '94053', '133380', '20'), +('5', '101', '7', '56079', '132553', '20'), +('5', '101', '7', '89369', '127360', '20'), +('5', '101', '7', '104404', '111248', '20'), +('5', '101', '9', '67098', '216089', '20'), +('5', '101', '9', '56031', '128742', '20'), +('5', '101', '9', '62992', '128466', '20'), +('5', '101', '9', '56033', '128451', '20'), +('5', '101', '15', '111348', '210158', '20'), +('5', '101', '15', '111343', '209825', '20'), +('5', '101', '15', '111341', '209772', '20'), +('5', '101', '15', '111345', '208193', '20'), +('5', '101', '20', '111354', '234494', '20'), +('5', '101', '20', '111355', '232496', '20'), +('5', '101', '20', '111353', '231824', '20'), +('5', '101', '20', '111351', '231291', '20'), +('5', '101', '12', '81795', '129715', '20'), +('5', '101', '12', '56073', '129678', '20'), +('5', '101', '12', '89366', '123272', '20'), +('5', '101', '12', '104401', '109886', '20'), +('5', '101', '18', '56041', '135594', '20'), +('5', '101', '18', '62986', '135535', '20'), +('5', '101', '18', '62987', '134333', '20'), +('5', '101', '18', '94054', '134048', '20'), +('5', '101', '19', '62990', '133867', '20'), +('5', '101', '19', '56037', '133079', '20'), +('5', '101', '19', '56075', '132216', '20'), +('5', '101', '19', '81763', '131805', '20'), +('5', '101', '13', '111526', '429293', '20'), +('5', '101', '13', '111514', '412479', '20'), +('5', '101', '13', '111520', '408475', '20'), +('5', '101', '13', '111525', '406919', '20'), +('5', '101', '14', '111536', '215820', '20'), +('5', '101', '14', '111535', '214480', '20'), +('5', '101', '14', '111538', '214188', '20'), +('5', '101', '14', '111236', '189920', '20'), +('5', '101', '11', '133816', '271325', '20'), +('5', '101', '11', '111529', '260637', '20'), +('5', '101', '11', '111229', '241440', '20'), +('5', '101', '11', '111338', '210138', '20'), +('5', '102', '22', '7867', '0', '20'), +('5', '102', '22', '39342', '0', '20'), +('5', '102', '22', '23597', '0', '20'), +('5', '102', '22', '53550', '0', '20'), +('5', '102', '1', '98769', '351427', '20'), +('5', '102', '1', '111309', '210848', '20'), +('5', '102', '1', '111303', '209823', '20'), +('5', '102', '1', '111300', '208587', '20'), +('5', '102', '2', '94056', '132575', '20'), +('5', '102', '2', '62985', '131857', '20'), +('5', '102', '2', '89368', '126088', '20'), +('5', '102', '2', '104403', '111657', '20'), +('5', '102', '3', '111312', '209960', '20'), +('5', '102', '3', '111315', '209102', '20'), +('5', '102', '3', '111313', '208998', '20'), +('5', '102', '3', '111316', '206980', '20'), +('5', '102', '5', '111318', '208729', '20'), +('5', '102', '5', '111320', '208585', '20'), +('5', '102', '5', '111319', '206584', '20'), +('5', '102', '5', '111017', '183024', '20'), +('5', '102', '8', '111331', '210747', '20'), +('5', '102', '8', '111328', '210063', '20'), +('5', '102', '8', '111332', '206960', '20'), +('5', '102', '8', '111030', '184967', '20'), +('5', '102', '6', '111322', '209049', '20'), +('5', '102', '6', '111324', '209044', '20'), +('5', '102', '6', '111326', '206673', '20'), +('5', '102', '6', '111021', '183319', '20'), +('5', '102', '17', '56046', '139086', '20'), +('5', '102', '17', '81765', '138406', '20'), +('5', '102', '17', '56083', '138236', '20'), +('5', '102', '17', '104406', '118741', '20'), +('5', '102', '7', '94053', '133385', '20'), +('5', '102', '7', '56079', '132559', '20'), +('5', '102', '7', '89369', '127366', '20'), +('5', '102', '7', '104404', '111252', '20'), +('5', '102', '9', '67098', '216094', '20'), +('5', '102', '9', '56031', '128748', '20'), +('5', '102', '9', '62992', '128472', '20'), +('5', '102', '9', '56033', '128453', '20'), +('5', '102', '15', '111348', '210164', '20'), +('5', '102', '15', '111343', '209829', '20'), +('5', '102', '15', '111341', '209779', '20'), +('5', '102', '15', '111345', '208198', '20'), +('5', '102', '20', '111354', '234499', '20'), +('5', '102', '20', '111355', '232500', '20'), +('5', '102', '20', '111353', '231831', '20'), +('5', '102', '20', '111351', '231296', '20'), +('5', '102', '12', '81795', '129721', '20'), +('5', '102', '12', '56073', '129685', '20'), +('5', '102', '12', '89366', '123277', '20'), +('5', '102', '12', '104401', '109892', '20'), +('5', '102', '18', '56041', '135599', '20'), +('5', '102', '18', '62986', '135542', '20'), +('5', '102', '18', '62987', '134338', '20'), +('5', '102', '18', '94054', '134053', '20'), +('5', '102', '19', '62990', '133873', '20'), +('5', '102', '19', '56037', '133083', '20'), +('5', '102', '19', '56075', '132221', '20'), +('5', '102', '19', '81763', '131811', '20'), +('5', '102', '13', '111526', '429836', '20'), +('5', '102', '13', '111514', '413022', '20'), +('5', '102', '13', '111520', '408989', '20'), +('5', '102', '13', '111525', '407434', '20'), +('5', '102', '14', '111536', '215826', '20'), +('5', '102', '14', '111535', '214485', '20'), +('5', '102', '14', '111538', '214193', '20'), +('5', '102', '14', '111236', '189926', '20'), +('5', '102', '11', '133816', '271329', '20'), +('5', '102', '11', '111529', '260717', '20'), +('5', '102', '11', '111229', '241520', '20'), +('5', '102', '11', '111338', '210144', '20'), +('5', '103', '22', '7867', '0', '20'), +('5', '103', '22', '39342', '0', '20'), +('5', '103', '22', '23597', '0', '20'), +('5', '103', '22', '53550', '0', '20'), +('5', '103', '1', '98769', '351431', '20'), +('5', '103', '1', '111309', '210853', '20'), +('5', '103', '1', '111303', '209828', '20'), +('5', '103', '1', '111300', '208592', '20'), +('5', '103', '2', '94056', '132579', '20'), +('5', '103', '2', '62985', '131861', '20'), +('5', '103', '2', '89368', '126093', '20'), +('5', '103', '2', '104403', '111663', '20'), +('5', '103', '3', '111312', '209966', '20'), +('5', '103', '3', '111315', '209110', '20'), +('5', '103', '3', '111313', '209003', '20'), +('5', '103', '3', '111316', '206986', '20'), +('5', '103', '5', '111318', '208734', '20'), +('5', '103', '5', '111320', '208591', '20'), +('5', '103', '5', '111319', '206591', '20'), +('5', '103', '5', '111017', '183029', '20'), +('5', '103', '8', '111331', '210753', '20'), +('5', '103', '8', '111328', '210070', '20'), +('5', '103', '8', '111332', '206964', '20'), +('5', '103', '8', '111030', '184973', '20'), +('5', '103', '6', '111322', '209054', '20'), +('5', '103', '6', '111324', '209050', '20'), +('5', '103', '6', '111326', '206679', '20'), +('5', '103', '6', '111021', '183324', '20'), +('5', '103', '17', '56046', '139092', '20'), +('5', '103', '17', '81765', '138411', '20'), +('5', '103', '17', '56083', '138240', '20'), +('5', '103', '17', '104406', '118747', '20'), +('5', '103', '7', '94053', '133391', '20'), +('5', '103', '7', '56079', '132565', '20'), +('5', '103', '7', '89369', '127372', '20'), +('5', '103', '7', '104404', '111256', '20'), +('5', '103', '9', '67098', '216099', '20'), +('5', '103', '9', '56031', '128753', '20'), +('5', '103', '9', '62992', '128478', '20'), +('5', '103', '9', '56033', '128456', '20'), +('5', '103', '15', '111348', '210170', '20'), +('5', '103', '15', '111343', '209833', '20'), +('5', '103', '15', '111341', '209788', '20'), +('5', '103', '15', '111345', '208204', '20'), +('5', '103', '20', '111354', '234505', '20'), +('5', '103', '20', '111355', '232504', '20'), +('5', '103', '20', '111353', '231838', '20'), +('5', '103', '20', '111351', '231300', '20'), +('5', '103', '12', '81795', '129727', '20'), +('5', '103', '12', '56073', '129693', '20'), +('5', '103', '12', '89366', '123281', '20'), +('5', '103', '12', '104401', '109897', '20'), +('5', '103', '18', '56041', '135603', '20'), +('5', '103', '18', '62986', '135549', '20'), +('5', '103', '18', '62987', '134342', '20'), +('5', '103', '18', '94054', '134059', '20'), +('5', '103', '19', '62990', '133879', '20'), +('5', '103', '19', '56037', '133088', '20'), +('5', '103', '19', '56075', '132226', '20'), +('5', '103', '19', '81763', '131817', '20'), +('5', '103', '13', '111526', '430378', '20'), +('5', '103', '13', '111514', '413537', '20'), +('5', '103', '13', '111520', '409504', '20'), +('5', '103', '13', '111525', '407949', '20'), +('5', '103', '14', '111536', '215831', '20'), +('5', '103', '14', '111535', '214491', '20'), +('5', '103', '14', '111538', '214198', '20'), +('5', '103', '14', '111236', '189931', '20'), +('5', '103', '11', '133816', '271334', '20'), +('5', '103', '11', '111529', '260788', '20'), +('5', '103', '11', '111229', '241592', '20'), +('5', '103', '11', '111338', '210150', '20'), +('5', '104', '22', '7867', '0', '20'), +('5', '104', '22', '39342', '0', '20'), +('5', '104', '22', '23597', '0', '20'), +('5', '104', '22', '53550', '0', '20'), +('5', '104', '1', '98769', '351435', '20'), +('5', '104', '1', '111309', '210859', '20'), +('5', '104', '1', '111303', '209834', '20'), +('5', '104', '1', '111300', '208597', '20'), +('5', '104', '2', '94056', '132583', '20'), +('5', '104', '2', '62985', '131864', '20'), +('5', '104', '2', '89368', '126098', '20'), +('5', '104', '2', '104403', '111668', '20'), +('5', '104', '3', '111312', '209971', '20'), +('5', '104', '3', '111315', '209117', '20'), +('5', '104', '3', '111313', '209007', '20'), +('5', '104', '3', '111316', '206992', '20'), +('5', '104', '5', '111318', '208739', '20'), +('5', '104', '5', '111320', '208596', '20'), +('5', '104', '5', '111319', '206598', '20'), +('5', '104', '5', '111017', '183034', '20'), +('5', '104', '8', '111331', '210759', '20'), +('5', '104', '8', '111328', '210077', '20'), +('5', '104', '8', '111332', '206969', '20'), +('5', '104', '8', '111030', '184979', '20'), +('5', '104', '6', '111322', '209059', '20'), +('5', '104', '6', '111324', '209056', '20'), +('5', '104', '6', '111326', '206685', '20'), +('5', '104', '6', '111021', '183329', '20'), +('5', '104', '17', '56046', '139099', '20'), +('5', '104', '17', '81765', '138416', '20'), +('5', '104', '17', '56083', '138244', '20'), +('5', '104', '17', '104406', '118754', '20'), +('5', '104', '7', '94053', '133396', '20'), +('5', '104', '7', '56079', '132571', '20'), +('5', '104', '7', '89369', '127377', '20'), +('5', '104', '7', '104404', '111260', '20'), +('5', '104', '9', '67098', '216103', '20'), +('5', '104', '9', '56031', '128758', '20'), +('5', '104', '9', '62992', '128484', '20'), +('5', '104', '9', '56033', '128459', '20'), +('5', '104', '15', '111348', '210176', '20'), +('5', '104', '15', '111343', '209837', '20'), +('5', '104', '15', '111341', '209796', '20'), +('5', '104', '15', '111345', '208209', '20'), +('5', '104', '20', '111354', '234510', '20'), +('5', '104', '20', '111355', '232508', '20'), +('5', '104', '20', '111353', '231844', '20'), +('5', '104', '20', '111351', '231305', '20'), +('5', '104', '12', '81795', '129733', '20'), +('5', '104', '12', '56073', '129700', '20'), +('5', '104', '12', '89366', '123286', '20'), +('5', '104', '12', '104401', '109903', '20'), +('5', '104', '18', '56041', '135607', '20'), +('5', '104', '18', '62986', '135556', '20'), +('5', '104', '18', '62987', '134346', '20'), +('5', '104', '18', '94054', '134064', '20'), +('5', '104', '19', '62990', '133885', '20'), +('5', '104', '19', '56037', '133092', '20'), +('5', '104', '19', '56075', '132231', '20'), +('5', '104', '19', '81763', '131823', '20'), +('5', '104', '13', '111526', '430921', '20'), +('5', '104', '13', '111514', '414051', '20'), +('5', '104', '13', '111520', '410018', '20'), +('5', '104', '13', '111525', '408464', '20'), +('5', '104', '14', '111536', '215837', '20'), +('5', '104', '14', '111535', '214497', '20'), +('5', '104', '14', '111538', '214203', '20'), +('5', '104', '14', '111236', '189937', '20'), +('5', '104', '11', '133816', '271338', '20'), +('5', '104', '11', '111529', '260869', '20'), +('5', '104', '11', '111229', '241672', '20'), +('5', '104', '11', '111338', '210156', '20'), +('5', '105', '22', '39342', '0', '23'), +('5', '105', '22', '12425', '0', '23'), +('5', '105', '22', '7867', '0', '23'), +('5', '105', '22', '23597', '0', '23'), +('5', '105', '1', '98769', '351439', '23'), +('5', '105', '1', '111309', '210864', '23'), +('5', '105', '1', '111303', '209840', '23'), +('5', '105', '1', '111300', '208602', '23'), +('5', '105', '2', '94056', '132588', '23'), +('5', '105', '2', '62985', '131868', '23'), +('5', '105', '2', '89368', '126104', '23'), +('5', '105', '2', '104403', '111674', '23'), +('5', '105', '3', '111312', '209977', '23'), +('5', '105', '3', '111315', '209125', '23'), +('5', '105', '3', '111313', '209012', '23'), +('5', '105', '3', '111316', '206997', '23'), +('5', '105', '5', '111318', '208744', '23'), +('5', '105', '5', '111320', '208602', '23'), +('5', '105', '5', '111319', '206605', '23'), +('5', '105', '5', '111017', '183039', '23'), +('5', '105', '8', '111331', '210765', '23'), +('5', '105', '8', '111328', '210084', '23'), +('5', '105', '8', '111332', '206974', '23'), +('5', '105', '8', '111030', '184985', '23'), +('5', '105', '6', '111322', '209064', '23'), +('5', '105', '6', '111324', '209063', '23'), +('5', '105', '6', '111326', '206691', '23'), +('5', '105', '6', '111021', '183334', '23'), +('5', '105', '17', '56046', '139106', '23'), +('5', '105', '17', '81765', '138420', '23'), +('5', '105', '17', '56083', '138248', '23'), +('5', '105', '17', '104406', '118760', '23'), +('5', '105', '7', '94053', '133402', '23'), +('5', '105', '7', '56079', '132577', '23'), +('5', '105', '7', '89369', '127383', '23'), +('5', '105', '7', '104404', '111264', '23'), +('5', '105', '9', '67098', '216108', '23'), +('5', '105', '9', '56031', '128764', '23'), +('5', '105', '9', '62992', '128491', '23'), +('5', '105', '9', '56033', '128461', '23'), +('5', '105', '15', '111348', '210182', '23'), +('5', '105', '15', '111343', '209842', '23'), +('5', '105', '15', '111341', '209804', '23'), +('5', '105', '15', '111345', '208214', '23'), +('5', '105', '20', '111354', '234516', '23'), +('5', '105', '20', '111355', '232512', '23'), +('5', '105', '20', '111353', '231851', '23'), +('5', '105', '20', '111351', '231310', '23'), +('5', '105', '12', '81795', '129739', '23'), +('5', '105', '12', '56073', '129707', '23'), +('5', '105', '12', '89366', '123291', '23'), +('5', '105', '12', '104401', '109909', '23'), +('5', '105', '18', '56041', '135611', '23'), +('5', '105', '18', '62986', '135563', '23'), +('5', '105', '18', '62987', '134351', '23'), +('5', '105', '18', '94054', '134070', '23'), +('5', '105', '19', '62990', '133891', '23'), +('5', '105', '19', '56037', '133097', '23'), +('5', '105', '19', '56075', '132237', '23'), +('5', '105', '19', '81763', '131829', '23'), +('5', '105', '13', '111526', '431464', '23'), +('5', '105', '13', '111514', '414566', '23'), +('5', '105', '13', '111520', '410532', '23'), +('5', '105', '13', '111525', '408979', '23'), +('5', '105', '14', '111536', '215843', '23'), +('5', '105', '14', '111535', '214503', '23'), +('5', '105', '14', '111538', '214209', '23'), +('5', '105', '14', '111236', '189943', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '105', '11', '133816', '271343', '23'), +('5', '105', '11', '111529', '260949', '23'), +('5', '105', '11', '111229', '241744', '23'), +('5', '105', '11', '111338', '210163', '23'), +('5', '105', '22', '7867', '0', '22'), +('5', '105', '22', '39342', '0', '22'), +('5', '105', '22', '23597', '0', '22'), +('5', '105', '22', '53550', '0', '22'), +('5', '105', '1', '98769', '351439', '22'), +('5', '105', '1', '111309', '210864', '22'), +('5', '105', '1', '111303', '209840', '22'), +('5', '105', '1', '111300', '208602', '22'), +('5', '105', '2', '94056', '132588', '22'), +('5', '105', '2', '62985', '131868', '22'), +('5', '105', '2', '89368', '126104', '22'), +('5', '105', '2', '104403', '111674', '22'), +('5', '105', '3', '111312', '209977', '22'), +('5', '105', '3', '111315', '209125', '22'), +('5', '105', '3', '111313', '209012', '22'), +('5', '105', '3', '111316', '206997', '22'), +('5', '105', '5', '111318', '208744', '22'), +('5', '105', '5', '111320', '208602', '22'), +('5', '105', '5', '111319', '206605', '22'), +('5', '105', '5', '111017', '183039', '22'), +('5', '105', '8', '111331', '210765', '22'), +('5', '105', '8', '111328', '210084', '22'), +('5', '105', '8', '111332', '206974', '22'), +('5', '105', '8', '111030', '184985', '22'), +('5', '105', '6', '111322', '209064', '22'), +('5', '105', '6', '111324', '209063', '22'), +('5', '105', '6', '111326', '206691', '22'), +('5', '105', '6', '111021', '183334', '22'), +('5', '105', '17', '56046', '139106', '22'), +('5', '105', '17', '81765', '138420', '22'), +('5', '105', '17', '56083', '138248', '22'), +('5', '105', '17', '104406', '118760', '22'), +('5', '105', '7', '94053', '133402', '22'), +('5', '105', '7', '56079', '132577', '22'), +('5', '105', '7', '89369', '127383', '22'), +('5', '105', '7', '104404', '111264', '22'), +('5', '105', '9', '67098', '216108', '22'), +('5', '105', '9', '56031', '128764', '22'), +('5', '105', '9', '62992', '128491', '22'), +('5', '105', '9', '56033', '128461', '22'), +('5', '105', '15', '111348', '210182', '22'), +('5', '105', '15', '111343', '209842', '22'), +('5', '105', '15', '111341', '209804', '22'), +('5', '105', '15', '111345', '208214', '22'), +('5', '105', '20', '111354', '234516', '22'), +('5', '105', '20', '111355', '232512', '22'), +('5', '105', '20', '111353', '231851', '22'), +('5', '105', '20', '111351', '231310', '22'), +('5', '105', '12', '81795', '129739', '22'), +('5', '105', '12', '56073', '129707', '22'), +('5', '105', '12', '89366', '123291', '22'), +('5', '105', '12', '104401', '109909', '22'), +('5', '105', '18', '56041', '135611', '22'), +('5', '105', '18', '62986', '135563', '22'), +('5', '105', '18', '62987', '134351', '22'), +('5', '105', '18', '94054', '134070', '22'), +('5', '105', '19', '62990', '133891', '22'), +('5', '105', '19', '56037', '133097', '22'), +('5', '105', '19', '56075', '132237', '22'), +('5', '105', '19', '81763', '131829', '22'), +('5', '105', '13', '111526', '431464', '22'), +('5', '105', '13', '111514', '414566', '22'), +('5', '105', '13', '111520', '410532', '22'), +('5', '105', '13', '111525', '408979', '22'), +('5', '105', '14', '111536', '215843', '22'), +('5', '105', '14', '111535', '214503', '22'), +('5', '105', '14', '111538', '214209', '22'), +('5', '105', '14', '111236', '189943', '22'), +('5', '105', '11', '133816', '271343', '22'), +('5', '105', '11', '111529', '260949', '22'), +('5', '105', '11', '111229', '241744', '22'), +('5', '105', '11', '111338', '210163', '22'), +('5', '105', '22', '7867', '0', '21'), +('5', '105', '22', '39342', '0', '21'), +('5', '105', '22', '23597', '0', '21'), +('5', '105', '22', '53550', '0', '21'), +('5', '105', '1', '98769', '351439', '21'), +('5', '105', '1', '111309', '210864', '21'), +('5', '105', '1', '111303', '209840', '21'), +('5', '105', '1', '111300', '208602', '21'), +('5', '105', '2', '94056', '132588', '21'), +('5', '105', '2', '62985', '131868', '21'), +('5', '105', '2', '89368', '126104', '21'), +('5', '105', '2', '104403', '111674', '21'), +('5', '105', '3', '111312', '209977', '21'), +('5', '105', '3', '111315', '209125', '21'), +('5', '105', '3', '111313', '209012', '21'), +('5', '105', '3', '111316', '206997', '21'), +('5', '105', '5', '111318', '208744', '21'), +('5', '105', '5', '111320', '208602', '21'), +('5', '105', '5', '111319', '206605', '21'), +('5', '105', '5', '111017', '183039', '21'), +('5', '105', '8', '111331', '210765', '21'), +('5', '105', '8', '111328', '210084', '21'), +('5', '105', '8', '111332', '206974', '21'), +('5', '105', '8', '111030', '184985', '21'), +('5', '105', '6', '111322', '209064', '21'), +('5', '105', '6', '111324', '209063', '21'), +('5', '105', '6', '111326', '206691', '21'), +('5', '105', '6', '111021', '183334', '21'), +('5', '105', '17', '56046', '139106', '21'), +('5', '105', '17', '81765', '138420', '21'), +('5', '105', '17', '56083', '138248', '21'), +('5', '105', '17', '104406', '118760', '21'), +('5', '105', '7', '94053', '133402', '21'), +('5', '105', '7', '56079', '132577', '21'), +('5', '105', '7', '89369', '127383', '21'), +('5', '105', '7', '104404', '111264', '21'), +('5', '105', '9', '67098', '216108', '21'), +('5', '105', '9', '56031', '128764', '21'), +('5', '105', '9', '62992', '128491', '21'), +('5', '105', '9', '56033', '128461', '21'), +('5', '105', '15', '111348', '210182', '21'), +('5', '105', '15', '111343', '209842', '21'), +('5', '105', '15', '111341', '209804', '21'), +('5', '105', '15', '111345', '208214', '21'), +('5', '105', '20', '111354', '234516', '21'), +('5', '105', '20', '111355', '232512', '21'), +('5', '105', '20', '111353', '231851', '21'), +('5', '105', '20', '111351', '231310', '21'), +('5', '105', '12', '81795', '129739', '21'), +('5', '105', '12', '56073', '129707', '21'), +('5', '105', '12', '89366', '123291', '21'), +('5', '105', '12', '104401', '109909', '21'), +('5', '105', '18', '56041', '135611', '21'), +('5', '105', '18', '62986', '135563', '21'), +('5', '105', '18', '62987', '134351', '21'), +('5', '105', '18', '94054', '134070', '21'), +('5', '105', '19', '62990', '133891', '21'), +('5', '105', '19', '56037', '133097', '21'), +('5', '105', '19', '56075', '132237', '21'), +('5', '105', '19', '81763', '131829', '21'), +('5', '105', '13', '111526', '431464', '21'), +('5', '105', '13', '111514', '414566', '21'), +('5', '105', '13', '111520', '410532', '21'), +('5', '105', '13', '111525', '408979', '21'), +('5', '105', '14', '111536', '215843', '21'), +('5', '105', '14', '111535', '214503', '21'), +('5', '105', '14', '111538', '214209', '21'), +('5', '105', '14', '111236', '189943', '21'), +('5', '105', '11', '133816', '271343', '21'), +('5', '105', '11', '111529', '260949', '21'), +('5', '105', '11', '111229', '241744', '21'), +('5', '105', '11', '111338', '210163', '21'), +('5', '106', '22', '39342', '0', '23'), +('5', '106', '22', '12425', '0', '23'), +('5', '106', '22', '7867', '0', '23'), +('5', '106', '22', '23597', '0', '23'), +('5', '106', '1', '98769', '351443', '23'), +('5', '106', '1', '111309', '210870', '23'), +('5', '106', '1', '111303', '209846', '23'), +('5', '106', '1', '111300', '208607', '23'), +('5', '106', '2', '94056', '132592', '23'), +('5', '106', '2', '62985', '131871', '23'), +('5', '106', '2', '89368', '126109', '23'), +('5', '106', '2', '104403', '111680', '23'), +('5', '106', '3', '111312', '209982', '23'), +('5', '106', '3', '111315', '209132', '23'), +('5', '106', '3', '111313', '209017', '23'), +('5', '106', '3', '111316', '207003', '23'), +('5', '106', '5', '111318', '208749', '23'), +('5', '106', '5', '111320', '208608', '23'), +('5', '106', '5', '111319', '206613', '23'), +('5', '106', '5', '111017', '183044', '23'), +('5', '106', '8', '111331', '210771', '23'), +('5', '106', '8', '111328', '210091', '23'), +('5', '106', '8', '111332', '206979', '23'), +('5', '106', '8', '111030', '184991', '23'), +('5', '106', '6', '111324', '209069', '23'), +('5', '106', '6', '111322', '209069', '23'), +('5', '106', '6', '111326', '206697', '23'), +('5', '106', '6', '111021', '183339', '23'), +('5', '106', '17', '56046', '139112', '23'), +('5', '106', '17', '81765', '138425', '23'), +('5', '106', '17', '56083', '138252', '23'), +('5', '106', '17', '104406', '118767', '23'), +('5', '106', '7', '94053', '133407', '23'), +('5', '106', '7', '56079', '132584', '23'), +('5', '106', '7', '89369', '127389', '23'), +('5', '106', '7', '104404', '111268', '23'), +('5', '106', '9', '67098', '216113', '23'), +('5', '106', '9', '56031', '128769', '23'), +('5', '106', '9', '62992', '128497', '23'), +('5', '106', '9', '56033', '128464', '23'), +('5', '106', '15', '111348', '210188', '23'), +('5', '106', '15', '111343', '209846', '23'), +('5', '106', '15', '111341', '209812', '23'), +('5', '106', '15', '111345', '208219', '23'), +('5', '106', '20', '111354', '234521', '23'), +('5', '106', '20', '111355', '232516', '23'), +('5', '106', '20', '111353', '231857', '23'), +('5', '106', '20', '111351', '231314', '23'), +('5', '106', '12', '81795', '129745', '23'), +('5', '106', '12', '56073', '129715', '23'), +('5', '106', '12', '89366', '123296', '23'), +('5', '106', '12', '104401', '109915', '23'), +('5', '106', '18', '56041', '135615', '23'), +('5', '106', '18', '62986', '135570', '23'), +('5', '106', '18', '62987', '134355', '23'), +('5', '106', '18', '94054', '134076', '23'), +('5', '106', '19', '62990', '133897', '23'), +('5', '106', '19', '56037', '133101', '23'), +('5', '106', '19', '56075', '132242', '23'), +('5', '106', '19', '81763', '131835', '23'), +('5', '106', '13', '111526', '432006', '23'), +('5', '106', '13', '111514', '415080', '23'), +('5', '106', '13', '111520', '411046', '23'), +('5', '106', '13', '111525', '409494', '23'), +('5', '106', '14', '111536', '215848', '23'), +('5', '106', '14', '111535', '214509', '23'), +('5', '106', '14', '111538', '214214', '23'), +('5', '106', '14', '111236', '189948', '23'), +('5', '106', '11', '133816', '271348', '23'), +('5', '106', '11', '111529', '261020', '23'), +('5', '106', '11', '111229', '241815', '23'), +('5', '106', '11', '111338', '210169', '23'), +('5', '107', '22', '39342', '0', '23'), +('5', '107', '22', '12425', '0', '23'), +('5', '107', '22', '7867', '0', '23'), +('5', '107', '22', '23597', '0', '23'), +('5', '107', '1', '98769', '351447', '23'), +('5', '107', '1', '111309', '210875', '23'), +('5', '107', '1', '111303', '209852', '23'), +('5', '107', '1', '111300', '208612', '23'), +('5', '107', '2', '94056', '132597', '23'), +('5', '107', '2', '62985', '131874', '23'), +('5', '107', '2', '89368', '126115', '23'), +('5', '107', '2', '104403', '111686', '23'), +('5', '107', '3', '111312', '209987', '23'), +('5', '107', '3', '111315', '209139', '23'), +('5', '107', '3', '111313', '209021', '23'), +('5', '107', '3', '111316', '207008', '23'), +('5', '107', '5', '111318', '208754', '23'), +('5', '107', '5', '111320', '208613', '23'), +('5', '107', '5', '111319', '206619', '23'), +('5', '107', '5', '111017', '183049', '23'), +('5', '107', '8', '111331', '210777', '23'), +('5', '107', '8', '111328', '210098', '23'), +('5', '107', '8', '111332', '206983', '23'), +('5', '107', '8', '111030', '184997', '23'), +('5', '107', '6', '111324', '209075', '23'), +('5', '107', '6', '111322', '209074', '23'), +('5', '107', '6', '111326', '206703', '23'), +('5', '107', '6', '111021', '183344', '23'), +('5', '107', '17', '56046', '139119', '23'), +('5', '107', '17', '81765', '138430', '23'), +('5', '107', '17', '56083', '138256', '23'), +('5', '107', '17', '104406', '118773', '23'), +('5', '107', '7', '94053', '133413', '23'), +('5', '107', '7', '56079', '132589', '23'), +('5', '107', '7', '89369', '127394', '23'), +('5', '107', '7', '104404', '111272', '23'), +('5', '107', '9', '67098', '216118', '23'), +('5', '107', '9', '56031', '128775', '23'), +('5', '107', '9', '62992', '128503', '23'), +('5', '107', '9', '56033', '128467', '23'), +('5', '107', '15', '111348', '210194', '23'), +('5', '107', '15', '111343', '209850', '23'), +('5', '107', '15', '111341', '209820', '23'), +('5', '107', '15', '111345', '208224', '23'), +('5', '107', '20', '111354', '234526', '23'), +('5', '107', '20', '111355', '232519', '23'), +('5', '107', '20', '111353', '231864', '23'), +('5', '107', '20', '111351', '231319', '23'), +('5', '107', '12', '81795', '129751', '23'), +('5', '107', '12', '56073', '129721', '23'), +('5', '107', '12', '89366', '123300', '23'), +('5', '107', '12', '104401', '109920', '23'), +('5', '107', '18', '56041', '135619', '23'), +('5', '107', '18', '62986', '135577', '23'), +('5', '107', '18', '62987', '134359', '23'), +('5', '107', '18', '94054', '134081', '23'), +('5', '107', '19', '62990', '133903', '23'), +('5', '107', '19', '56037', '133105', '23'), +('5', '107', '19', '56075', '132247', '23'), +('5', '107', '19', '81763', '131841', '23'), +('5', '107', '13', '111526', '432549', '23'), +('5', '107', '13', '111514', '415595', '23'), +('5', '107', '13', '111520', '411560', '23'), +('5', '107', '13', '111525', '410008', '23'), +('5', '107', '14', '111536', '215854', '23'), +('5', '107', '14', '111535', '214514', '23'), +('5', '107', '14', '111538', '214219', '23'), +('5', '107', '14', '111236', '189954', '23'), +('5', '107', '11', '133816', '271352', '23'), +('5', '107', '11', '111529', '261101', '23'), +('5', '107', '11', '111229', '241896', '23'), +('5', '107', '11', '111338', '210176', '23'), +('5', '108', '22', '39342', '0', '23'), +('5', '108', '22', '12425', '0', '23'), +('5', '108', '22', '7867', '0', '23'), +('5', '108', '22', '23597', '0', '23'), +('5', '108', '1', '98769', '351452', '23'), +('5', '108', '1', '111309', '210881', '23'), +('5', '108', '1', '111303', '209858', '23'), +('5', '108', '1', '111300', '208617', '23'), +('5', '108', '2', '94056', '132601', '23'), +('5', '108', '2', '62985', '131878', '23'), +('5', '108', '2', '89368', '126120', '23'), +('5', '108', '2', '104403', '111692', '23'), +('5', '108', '3', '111312', '209993', '23'), +('5', '108', '3', '111315', '209147', '23'), +('5', '108', '3', '111313', '209026', '23'), +('5', '108', '3', '111316', '207014', '23'), +('5', '108', '5', '111318', '208759', '23'), +('5', '108', '5', '111320', '208619', '23'), +('5', '108', '5', '111319', '206627', '23'), +('5', '108', '5', '111017', '183054', '23'), +('5', '108', '8', '111331', '210783', '23'), +('5', '108', '8', '111328', '210105', '23'), +('5', '108', '8', '111332', '206988', '23'), +('5', '108', '8', '111030', '185003', '23'), +('5', '108', '6', '111324', '209081', '23'), +('5', '108', '6', '111322', '209079', '23'), +('5', '108', '6', '111326', '206709', '23'), +('5', '108', '6', '111021', '183349', '23'), +('5', '108', '17', '56046', '139126', '23'), +('5', '108', '17', '81765', '138435', '23'), +('5', '108', '17', '56083', '138260', '23'), +('5', '108', '17', '104406', '118780', '23'), +('5', '108', '7', '94053', '133418', '23'), +('5', '108', '7', '56079', '132596', '23'), +('5', '108', '7', '89369', '127400', '23'), +('5', '108', '7', '104404', '111277', '23'), +('5', '108', '9', '67098', '216123', '23'), +('5', '108', '9', '56031', '128780', '23'), +('5', '108', '9', '62992', '128510', '23'), +('5', '108', '9', '56033', '128469', '23'), +('5', '108', '15', '111348', '210200', '23'), +('5', '108', '15', '111343', '209854', '23'), +('5', '108', '15', '111341', '209828', '23'), +('5', '108', '15', '111345', '208230', '23'), +('5', '108', '20', '111354', '234532', '23'), +('5', '108', '20', '111355', '232523', '23'), +('5', '108', '20', '111353', '231870', '23'), +('5', '108', '20', '111351', '231323', '23'), +('5', '108', '12', '81795', '129757', '23'), +('5', '108', '12', '56073', '129729', '23'), +('5', '108', '12', '89366', '123305', '23'), +('5', '108', '12', '104401', '109926', '23'), +('5', '108', '18', '56041', '135624', '23'), +('5', '108', '18', '62986', '135584', '23'), +('5', '108', '18', '62987', '134363', '23'), +('5', '108', '18', '94054', '134087', '23'), +('5', '108', '19', '62990', '133909', '23'), +('5', '108', '19', '56037', '133110', '23'), +('5', '108', '19', '56075', '132252', '23'), +('5', '108', '19', '81763', '131847', '23'), +('5', '108', '13', '111526', '433092', '23'), +('5', '108', '13', '111514', '416109', '23'), +('5', '108', '13', '111520', '412075', '23'), +('5', '108', '13', '111525', '410523', '23'), +('5', '108', '14', '111536', '215860', '23'), +('5', '108', '14', '111535', '214520', '23'), +('5', '108', '14', '111538', '214224', '23'), +('5', '108', '14', '111236', '189960', '23'), +('5', '108', '11', '133816', '271356', '23'), +('5', '108', '11', '111529', '261181', '23'), +('5', '108', '11', '111229', '241968', '23'), +('5', '108', '11', '111338', '210182', '23'), +('5', '109', '22', '39342', '0', '23'), +('5', '109', '22', '12425', '0', '23'), +('5', '109', '22', '7867', '0', '23'), +('5', '109', '22', '23597', '0', '23'), +('5', '109', '1', '98769', '351456', '23'), +('5', '109', '1', '111309', '210887', '23'), +('5', '109', '1', '111303', '209864', '23'), +('5', '109', '1', '111300', '208622', '23'), +('5', '109', '2', '94056', '132606', '23'), +('5', '109', '2', '62985', '131881', '23'), +('5', '109', '2', '89368', '126126', '23'), +('5', '109', '2', '104403', '111698', '23'), +('5', '109', '3', '111312', '209999', '23'), +('5', '109', '3', '111315', '209155', '23'), +('5', '109', '3', '111313', '209031', '23'), +('5', '109', '3', '111316', '207020', '23'), +('5', '109', '5', '111318', '208765', '23'), +('5', '109', '5', '111320', '208625', '23'), +('5', '109', '5', '111319', '206634', '23'), +('5', '109', '5', '111017', '183060', '23'), +('5', '109', '8', '111331', '210789', '23'), +('5', '109', '8', '111328', '210112', '23'), +('5', '109', '8', '111332', '206993', '23'), +('5', '109', '8', '111030', '185009', '23'), +('5', '109', '6', '111324', '209087', '23'), +('5', '109', '6', '111322', '209084', '23'), +('5', '109', '6', '111326', '206715', '23'), +('5', '109', '6', '111021', '183354', '23'), +('5', '109', '17', '56046', '139132', '23'), +('5', '109', '17', '81765', '138440', '23'), +('5', '109', '17', '56083', '138265', '23'), +('5', '109', '17', '104406', '118787', '23'), +('5', '109', '7', '94053', '133424', '23'), +('5', '109', '7', '56079', '132602', '23'), +('5', '109', '7', '89369', '127406', '23'), +('5', '109', '7', '104404', '111281', '23'), +('5', '109', '9', '67098', '216128', '23'), +('5', '109', '9', '56031', '128786', '23'), +('5', '109', '9', '62992', '128516', '23'), +('5', '109', '9', '56033', '128472', '23'), +('5', '109', '15', '111348', '210206', '23'), +('5', '109', '15', '111343', '209859', '23'), +('5', '109', '15', '111341', '209837', '23'), +('5', '109', '15', '111345', '208235', '23'), +('5', '109', '20', '111354', '234538', '23'), +('5', '109', '20', '111355', '232527', '23'), +('5', '109', '20', '111353', '231877', '23'), +('5', '109', '20', '111351', '231328', '23'), +('5', '109', '12', '81795', '129763', '23'), +('5', '109', '12', '56073', '129736', '23'), +('5', '109', '12', '89366', '123310', '23'), +('5', '109', '12', '104401', '109932', '23'), +('5', '109', '18', '56041', '135628', '23'), +('5', '109', '18', '62986', '135591', '23'), +('5', '109', '18', '62987', '134368', '23'), +('5', '109', '18', '94054', '134092', '23'), +('5', '109', '19', '62990', '133915', '23'), +('5', '109', '19', '56037', '133115', '23'), +('5', '109', '19', '56075', '132258', '23'), +('5', '109', '19', '81763', '131853', '23'), +('5', '109', '13', '111526', '433635', '23'), +('5', '109', '13', '111514', '416652', '23'), +('5', '109', '13', '111520', '412589', '23'), +('5', '109', '13', '111525', '411038', '23'), +('5', '109', '14', '111536', '215866', '23'), +('5', '109', '14', '111535', '214526', '23'), +('5', '109', '14', '111538', '214229', '23'), +('5', '109', '14', '111236', '189966', '23'), +('5', '109', '11', '133816', '271361', '23'), +('5', '109', '11', '111529', '261253', '23'), +('5', '109', '11', '111229', '242049', '23'), +('5', '109', '11', '111338', '210189', '23'), +('5', '110', '22', '7867', '0', '25'), +('5', '110', '22', '39342', '0', '25'), +('5', '110', '22', '23597', '0', '25'), +('5', '110', '22', '53550', '0', '25'), +('5', '110', '1', '98769', '351460', '25'), +('5', '110', '1', '111309', '210892', '25'), +('5', '110', '1', '111303', '209870', '25'), +('5', '110', '1', '111300', '208627', '25'), +('5', '110', '2', '94056', '132610', '25'), +('5', '110', '2', '62985', '131885', '25'), +('5', '110', '2', '89368', '126131', '25'), +('5', '110', '2', '104403', '111704', '25'), +('5', '110', '3', '111312', '210004', '25'), +('5', '110', '3', '111315', '209162', '25'), +('5', '110', '3', '111313', '209036', '25'), +('5', '110', '3', '111316', '207025', '25'), +('5', '110', '5', '111318', '208770', '25'), +('5', '110', '5', '111320', '208631', '25'), +('5', '110', '5', '111319', '206641', '25'), +('5', '110', '5', '111017', '183065', '25'), +('5', '110', '8', '111331', '210795', '25'), +('5', '110', '8', '111328', '210120', '25'), +('5', '110', '8', '111332', '206998', '25'), +('5', '110', '8', '111030', '185015', '25'), +('5', '110', '6', '111324', '209093', '25'), +('5', '110', '6', '111322', '209089', '25'), +('5', '110', '6', '111326', '206721', '25'), +('5', '110', '6', '111021', '183359', '25'), +('5', '110', '17', '56046', '139139', '25'), +('5', '110', '17', '81765', '138445', '25'), +('5', '110', '17', '56083', '138269', '25'), +('5', '110', '17', '104406', '118794', '25'), +('5', '110', '7', '94053', '133430', '25'), +('5', '110', '7', '56079', '132608', '25'), +('5', '110', '7', '89369', '127412', '25'), +('5', '110', '7', '104404', '111285', '25'), +('5', '110', '9', '67098', '216133', '25'), +('5', '110', '9', '56031', '128791', '25'), +('5', '110', '9', '62992', '128522', '25'), +('5', '110', '9', '56033', '128475', '25'), +('5', '110', '15', '111348', '210213', '25'), +('5', '110', '15', '111343', '209863', '25'), +('5', '110', '15', '111341', '209845', '25'), +('5', '110', '15', '111345', '208240', '25'), +('5', '110', '20', '111354', '234543', '25'), +('5', '110', '20', '111355', '232531', '25'), +('5', '110', '20', '111353', '231884', '25'), +('5', '110', '20', '111351', '231333', '25'), +('5', '110', '12', '81795', '129770', '25'), +('5', '110', '12', '56073', '129744', '25'), +('5', '110', '12', '89366', '123315', '25'), +('5', '110', '12', '104401', '109938', '25'), +('5', '110', '18', '56041', '135632', '25'), +('5', '110', '18', '62986', '135598', '25'), +('5', '110', '18', '62987', '134372', '25'), +('5', '110', '18', '94054', '134098', '25'), +('5', '110', '19', '62990', '133921', '25'), +('5', '110', '19', '56037', '133119', '25'), +('5', '110', '19', '56075', '132263', '25'), +('5', '110', '19', '81763', '131859', '25'), +('5', '110', '13', '111526', '435452', '25'), +('5', '110', '13', '111514', '418442', '25'), +('5', '110', '13', '111520', '414378', '25'), +('5', '110', '13', '111525', '412828', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('5', '110', '14', '111536', '215871', '25'), +('5', '110', '14', '111535', '214532', '25'), +('5', '110', '14', '111538', '214234', '25'), +('5', '110', '14', '111236', '189971', '25'), +('5', '110', '11', '85213', '313630', '25'), +('5', '110', '11', '133816', '271366', '25'), +('5', '110', '11', '111529', '261333', '25'), +('5', '110', '11', '111229', '242120', '25'), +('5', '110', '22', '7867', '0', '24'), +('5', '110', '22', '39342', '0', '24'), +('5', '110', '22', '23597', '0', '24'), +('5', '110', '22', '53550', '0', '24'), +('5', '110', '1', '98769', '351460', '24'), +('5', '110', '1', '111309', '210892', '24'), +('5', '110', '1', '111303', '209870', '24'), +('5', '110', '1', '111300', '208627', '24'), +('5', '110', '2', '94056', '132610', '24'), +('5', '110', '2', '62985', '131885', '24'), +('5', '110', '2', '89368', '126131', '24'), +('5', '110', '2', '104403', '111704', '24'), +('5', '110', '3', '111312', '210004', '24'), +('5', '110', '3', '111315', '209162', '24'), +('5', '110', '3', '111313', '209036', '24'), +('5', '110', '3', '111316', '207025', '24'), +('5', '110', '5', '111318', '208770', '24'), +('5', '110', '5', '111320', '208631', '24'), +('5', '110', '5', '111319', '206641', '24'), +('5', '110', '5', '111017', '183065', '24'), +('5', '110', '8', '111331', '210795', '24'), +('5', '110', '8', '111328', '210120', '24'), +('5', '110', '8', '111332', '206998', '24'), +('5', '110', '8', '111030', '185015', '24'), +('5', '110', '6', '111324', '209093', '24'), +('5', '110', '6', '111322', '209089', '24'), +('5', '110', '6', '111326', '206721', '24'), +('5', '110', '6', '111021', '183359', '24'), +('5', '110', '17', '56046', '139139', '24'), +('5', '110', '17', '81765', '138445', '24'), +('5', '110', '17', '56083', '138269', '24'), +('5', '110', '17', '104406', '118794', '24'), +('5', '110', '7', '94053', '133430', '24'), +('5', '110', '7', '56079', '132608', '24'), +('5', '110', '7', '89369', '127412', '24'), +('5', '110', '7', '104404', '111285', '24'), +('5', '110', '9', '67098', '216133', '24'), +('5', '110', '9', '56031', '128791', '24'), +('5', '110', '9', '62992', '128522', '24'), +('5', '110', '9', '56033', '128475', '24'), +('5', '110', '15', '111348', '210213', '24'), +('5', '110', '15', '111343', '209863', '24'), +('5', '110', '15', '111341', '209845', '24'), +('5', '110', '15', '111345', '208240', '24'), +('5', '110', '20', '111354', '234543', '24'), +('5', '110', '20', '111355', '232531', '24'), +('5', '110', '20', '111353', '231884', '24'), +('5', '110', '20', '111351', '231333', '24'), +('5', '110', '12', '81795', '129770', '24'), +('5', '110', '12', '56073', '129744', '24'), +('5', '110', '12', '89366', '123315', '24'), +('5', '110', '12', '104401', '109938', '24'), +('5', '110', '18', '56041', '135632', '24'), +('5', '110', '18', '62986', '135598', '24'), +('5', '110', '18', '62987', '134372', '24'), +('5', '110', '18', '94054', '134098', '24'), +('5', '110', '19', '62990', '133921', '24'), +('5', '110', '19', '56037', '133119', '24'), +('5', '110', '19', '56075', '132263', '24'), +('5', '110', '19', '81763', '131859', '24'), +('5', '110', '13', '111526', '435452', '24'), +('5', '110', '13', '111514', '418442', '24'), +('5', '110', '13', '111520', '414378', '24'), +('5', '110', '13', '111525', '412828', '24'), +('5', '110', '14', '111536', '215871', '24'), +('5', '110', '14', '111535', '214532', '24'), +('5', '110', '14', '111538', '214234', '24'), +('5', '110', '14', '111236', '189971', '24'), +('5', '110', '11', '85213', '313630', '24'), +('5', '110', '11', '133816', '271366', '24'), +('5', '110', '11', '111529', '261333', '24'), +('5', '110', '11', '111229', '242120', '24'), +('5', '111', '22', '7867', '0', '25'), +('5', '111', '22', '39342', '0', '25'), +('5', '111', '22', '23597', '0', '25'), +('5', '111', '22', '53550', '0', '25'), +('5', '111', '1', '98769', '351464', '25'), +('5', '111', '1', '111309', '210898', '25'), +('5', '111', '1', '111303', '209876', '25'), +('5', '111', '1', '111300', '208632', '25'), +('5', '111', '2', '94056', '132614', '25'), +('5', '111', '2', '62985', '131888', '25'), +('5', '111', '2', '89368', '126137', '25'), +('5', '111', '2', '104403', '111710', '25'), +('5', '111', '3', '111312', '210010', '25'), +('5', '111', '3', '111315', '209170', '25'), +('5', '111', '3', '111313', '209040', '25'), +('5', '111', '3', '111316', '207031', '25'), +('5', '111', '5', '111318', '208775', '25'), +('5', '111', '5', '111320', '208637', '25'), +('5', '111', '5', '111319', '206648', '25'), +('5', '111', '5', '111017', '183070', '25'), +('5', '111', '8', '111331', '210801', '25'), +('5', '111', '8', '111328', '210127', '25'), +('5', '111', '8', '111332', '207003', '25'), +('5', '111', '8', '111030', '185021', '25'), +('5', '111', '6', '111324', '209100', '25'), +('5', '111', '6', '111322', '209094', '25'), +('5', '111', '6', '111326', '206727', '25'), +('5', '111', '6', '111021', '183364', '25'), +('5', '111', '17', '56046', '139146', '25'), +('5', '111', '17', '81765', '138449', '25'), +('5', '111', '17', '56083', '138273', '25'), +('5', '111', '17', '104406', '118800', '25'), +('5', '111', '7', '94053', '133435', '25'), +('5', '111', '7', '56079', '132614', '25'), +('5', '111', '7', '89369', '127417', '25'), +('5', '111', '7', '104404', '111289', '25'), +('5', '111', '9', '67098', '216138', '25'), +('5', '111', '9', '56031', '128796', '25'), +('5', '111', '9', '62992', '128529', '25'), +('5', '111', '9', '56033', '128478', '25'), +('5', '111', '15', '111348', '210219', '25'), +('5', '111', '15', '111343', '209867', '25'), +('5', '111', '15', '111341', '209853', '25'), +('5', '111', '15', '111345', '208245', '25'), +('5', '111', '20', '111354', '234549', '25'), +('5', '111', '20', '111355', '232535', '25'), +('5', '111', '20', '111353', '231890', '25'), +('5', '111', '20', '111351', '231337', '25'), +('5', '111', '12', '81795', '129776', '25'), +('5', '111', '12', '56073', '129751', '25'), +('5', '111', '12', '89366', '123319', '25'), +('5', '111', '12', '104401', '109944', '25'), +('5', '111', '18', '56041', '135636', '25'), +('5', '111', '18', '62986', '135605', '25'), +('5', '111', '18', '62987', '134377', '25'), +('5', '111', '18', '94054', '134104', '25'), +('5', '111', '19', '62990', '133927', '25'), +('5', '111', '19', '56037', '133124', '25'), +('5', '111', '19', '56075', '132268', '25'), +('5', '111', '19', '81763', '131865', '25'), +('5', '111', '13', '111526', '435995', '25'), +('5', '111', '13', '111514', '418957', '25'), +('5', '111', '13', '111520', '414893', '25'), +('5', '111', '13', '111525', '413314', '25'), +('5', '111', '14', '111536', '215877', '25'), +('5', '111', '14', '111535', '214538', '25'), +('5', '111', '14', '111538', '214240', '25'), +('5', '111', '14', '111236', '189977', '25'), +('5', '111', '11', '85213', '313635', '25'), +('5', '111', '11', '133816', '271370', '25'), +('5', '111', '11', '111529', '261414', '25'), +('5', '111', '11', '111229', '242192', '25'), +('5', '112', '22', '7867', '0', '25'), +('5', '112', '22', '39342', '0', '25'), +('5', '112', '22', '23597', '0', '25'), +('5', '112', '22', '53550', '0', '25'), +('5', '112', '1', '98769', '351469', '25'), +('5', '112', '1', '111309', '210904', '25'), +('5', '112', '1', '111303', '209882', '25'), +('5', '112', '1', '111300', '208637', '25'), +('5', '112', '2', '94056', '132619', '25'), +('5', '112', '2', '62985', '131892', '25'), +('5', '112', '2', '89368', '126142', '25'), +('5', '112', '2', '104403', '111716', '25'), +('5', '112', '3', '111312', '210015', '25'), +('5', '112', '3', '111315', '209178', '25'), +('5', '112', '3', '111313', '209045', '25'), +('5', '112', '3', '111316', '207037', '25'), +('5', '112', '5', '111318', '208780', '25'), +('5', '112', '5', '111320', '208642', '25'), +('5', '112', '5', '111319', '206655', '25'), +('5', '112', '5', '111017', '183075', '25'), +('5', '112', '8', '111331', '210808', '25'), +('5', '112', '8', '111328', '210134', '25'), +('5', '112', '8', '111332', '207008', '25'), +('5', '112', '8', '111030', '185028', '25'), +('5', '112', '6', '111324', '209106', '25'), +('5', '112', '6', '111322', '209099', '25'), +('5', '112', '6', '111326', '206733', '25'), +('5', '112', '6', '111021', '183369', '25'), +('5', '112', '17', '56046', '139153', '25'), +('5', '112', '17', '81765', '138454', '25'), +('5', '112', '17', '56083', '138277', '25'), +('5', '112', '17', '104406', '118807', '25'), +('5', '112', '7', '94053', '133441', '25'), +('5', '112', '7', '56079', '132621', '25'), +('5', '112', '7', '89369', '127423', '25'), +('5', '112', '7', '104404', '111294', '25'), +('5', '112', '9', '67098', '216143', '25'), +('5', '112', '9', '56031', '128802', '25'), +('5', '112', '9', '62992', '128535', '25'), +('5', '112', '9', '56033', '128480', '25'), +('5', '112', '15', '111348', '210225', '25'), +('5', '112', '15', '111343', '209872', '25'), +('5', '112', '15', '111341', '209862', '25'), +('5', '112', '15', '111345', '208251', '25'), +('5', '112', '20', '111354', '234555', '25'), +('5', '112', '20', '111355', '232539', '25'), +('5', '112', '20', '111353', '231897', '25'), +('5', '112', '20', '111351', '231342', '25'), +('5', '112', '12', '81795', '129782', '25'), +('5', '112', '12', '56073', '129758', '25'), +('5', '112', '12', '89366', '123324', '25'), +('5', '112', '12', '104401', '109950', '25'), +('5', '112', '18', '56041', '135640', '25'), +('5', '112', '18', '62986', '135613', '25'), +('5', '112', '18', '62987', '134381', '25'), +('5', '112', '18', '94054', '134109', '25'), +('5', '112', '19', '62990', '133933', '25'), +('5', '112', '19', '56037', '133129', '25'), +('5', '112', '19', '56075', '132273', '25'), +('5', '112', '19', '81763', '131871', '25'), +('5', '112', '13', '111526', '436538', '25'), +('5', '112', '13', '111514', '419471', '25'), +('5', '112', '13', '111520', '415407', '25'), +('5', '112', '13', '111525', '413829', '25'), +('5', '112', '14', '111536', '215883', '25'), +('5', '112', '14', '111535', '214544', '25'), +('5', '112', '14', '111538', '214245', '25'), +('5', '112', '14', '111236', '189983', '25'), +('5', '112', '11', '85213', '313639', '25'), +('5', '112', '11', '133816', '271375', '25'), +('5', '112', '11', '111529', '261495', '25'), +('5', '112', '11', '111229', '242272', '25'), +('5', '113', '22', '7867', '0', '25'), +('5', '113', '22', '39342', '0', '25'), +('5', '113', '22', '23597', '0', '25'), +('5', '113', '22', '53550', '0', '25'), +('5', '113', '1', '98769', '351473', '25'), +('5', '113', '1', '111309', '210909', '25'), +('5', '113', '1', '111303', '209887', '25'), +('5', '113', '1', '111300', '208642', '25'), +('5', '113', '2', '94056', '132623', '25'), +('5', '113', '2', '62985', '131895', '25'), +('5', '113', '2', '89368', '126148', '25'), +('5', '113', '2', '104403', '111722', '25'), +('5', '113', '3', '111312', '210021', '25'), +('5', '113', '3', '111315', '209185', '25'), +('5', '113', '3', '111313', '209050', '25'), +('5', '113', '3', '111316', '207043', '25'), +('5', '113', '5', '111318', '208785', '25'), +('5', '113', '5', '111320', '208648', '25'), +('5', '113', '5', '111319', '206662', '25'), +('5', '113', '5', '111017', '183080', '25'), +('5', '113', '8', '111331', '210814', '25'), +('5', '113', '8', '111328', '210141', '25'), +('5', '113', '8', '111332', '207012', '25'), +('5', '113', '8', '111030', '185034', '25'), +('5', '113', '6', '111324', '209112', '25'), +('5', '113', '6', '111322', '209105', '25'), +('5', '113', '6', '111326', '206739', '25'), +('5', '113', '6', '111021', '183375', '25'), +('5', '113', '17', '56046', '139159', '25'), +('5', '113', '17', '81765', '138459', '25'), +('5', '113', '17', '56083', '138281', '25'), +('5', '113', '17', '104406', '118814', '25'), +('5', '113', '7', '94053', '133446', '25'), +('5', '113', '7', '56079', '132627', '25'), +('5', '113', '7', '89369', '127429', '25'), +('5', '113', '7', '104404', '111298', '25'), +('5', '113', '9', '67098', '216148', '25'), +('5', '113', '9', '56031', '128807', '25'), +('5', '113', '9', '62992', '128541', '25'), +('5', '113', '9', '56033', '128483', '25'), +('5', '113', '15', '111348', '210231', '25'), +('5', '113', '15', '111343', '209876', '25'), +('5', '113', '15', '111341', '209870', '25'), +('5', '113', '15', '111345', '208256', '25'), +('5', '113', '20', '111354', '234560', '25'), +('5', '113', '20', '111355', '232543', '25'), +('5', '113', '20', '111353', '231904', '25'), +('5', '113', '20', '111351', '231347', '25'), +('5', '113', '12', '81795', '129788', '25'), +('5', '113', '12', '56073', '129766', '25'), +('5', '113', '12', '89366', '123329', '25'), +('5', '113', '12', '104401', '109956', '25'), +('5', '113', '18', '56041', '135645', '25'), +('5', '113', '18', '62986', '135620', '25'), +('5', '113', '18', '62987', '134385', '25'), +('5', '113', '18', '94054', '134115', '25'), +('5', '113', '19', '62990', '133939', '25'), +('5', '113', '19', '56037', '133133', '25'), +('5', '113', '19', '56075', '132279', '25'), +('5', '113', '19', '81763', '131877', '25'), +('5', '113', '13', '111526', '437052', '25'), +('5', '113', '13', '111514', '419986', '25'), +('5', '113', '13', '111520', '415921', '25'), +('5', '113', '13', '111525', '414344', '25'), +('5', '113', '14', '111536', '215889', '25'), +('5', '113', '14', '111535', '214550', '25'), +('5', '113', '14', '111538', '214250', '25'), +('5', '113', '14', '111236', '189989', '25'), +('5', '113', '11', '85213', '313643', '25'), +('5', '113', '11', '133816', '271379', '25'), +('5', '113', '11', '111529', '261566', '25'), +('5', '113', '11', '111229', '242344', '25'), +('5', '114', '22', '7867', '0', '25'), +('5', '114', '22', '39342', '0', '25'), +('5', '114', '22', '23597', '0', '25'), +('5', '114', '22', '53550', '0', '25'), +('5', '114', '1', '98769', '351477', '25'), +('5', '114', '1', '111309', '210915', '25'), +('5', '114', '1', '111303', '209893', '25'), +('5', '114', '1', '111300', '208647', '25'), +('5', '114', '2', '94056', '132628', '25'), +('5', '114', '2', '62985', '131899', '25'), +('5', '114', '2', '89368', '126153', '25'), +('5', '114', '2', '104403', '111728', '25'), +('5', '114', '3', '111312', '210027', '25'), +('5', '114', '3', '111315', '209193', '25'), +('5', '114', '3', '111313', '209055', '25'), +('5', '114', '3', '111316', '207048', '25'), +('5', '114', '5', '111318', '208791', '25'), +('5', '114', '5', '111320', '208654', '25'), +('5', '114', '5', '111319', '206670', '25'), +('5', '114', '5', '111017', '183086', '25'), +('5', '114', '8', '111331', '210820', '25'), +('5', '114', '8', '111328', '210148', '25'), +('5', '114', '8', '111332', '207017', '25'), +('5', '114', '8', '111030', '185040', '25'), +('5', '114', '6', '111324', '209118', '25'), +('5', '114', '6', '111322', '209110', '25'), +('5', '114', '6', '111326', '206745', '25'), +('5', '114', '6', '111021', '183380', '25'), +('5', '114', '17', '56046', '139166', '25'), +('5', '114', '17', '81765', '138464', '25'), +('5', '114', '17', '56083', '138285', '25'), +('5', '114', '17', '104406', '118821', '25'), +('5', '114', '7', '94053', '133452', '25'), +('5', '114', '7', '56079', '132633', '25'), +('5', '114', '7', '89369', '127435', '25'), +('5', '114', '7', '104404', '111302', '25'), +('5', '114', '9', '67098', '216153', '25'), +('5', '114', '9', '56031', '128813', '25'), +('5', '114', '9', '62992', '128548', '25'), +('5', '114', '9', '62984', '128491', '25'), +('5', '114', '15', '111348', '210237', '25'), +('5', '114', '15', '111343', '209881', '25'), +('5', '114', '15', '111341', '209878', '25'), +('5', '114', '15', '111345', '208261', '25'), +('5', '114', '20', '111354', '234566', '25'), +('5', '114', '20', '111355', '232547', '25'), +('5', '114', '20', '111353', '231911', '25'), +('5', '114', '20', '111351', '231352', '25'), +('5', '114', '12', '81795', '129794', '25'), +('5', '114', '12', '56073', '129773', '25'), +('5', '114', '12', '89366', '123334', '25'), +('5', '114', '12', '104401', '109962', '25'), +('5', '114', '18', '56041', '135649', '25'), +('5', '114', '18', '62986', '135627', '25'), +('5', '114', '18', '62987', '134390', '25'), +('5', '114', '18', '94054', '134121', '25'), +('5', '114', '19', '62990', '133945', '25'), +('5', '114', '19', '56037', '133138', '25'), +('5', '114', '19', '56075', '132284', '25'), +('5', '114', '19', '81763', '131883', '25'), +('5', '114', '13', '111526', '437595', '25'), +('5', '114', '13', '111514', '420501', '25'), +('5', '114', '13', '111520', '416436', '25'), +('5', '114', '13', '111525', '414859', '25'), +('5', '114', '14', '111536', '215895', '25'), +('5', '114', '14', '111535', '214556', '25'), +('5', '114', '14', '111538', '214255', '25'), +('5', '114', '14', '111236', '189995', '25'), +('5', '114', '11', '85213', '313647', '25'), +('5', '114', '11', '133816', '271384', '25'), +('5', '114', '11', '111529', '261646', '25'), +('5', '114', '11', '111229', '242425', '25'), +('5', '115', '22', '7867', '0', '26'), +('5', '115', '22', '39342', '0', '26'), +('5', '115', '22', '23597', '0', '26'), +('5', '115', '22', '53550', '0', '26'), +('5', '115', '1', '98769', '351481', '26'), +('5', '115', '1', '111309', '210920', '26'), +('5', '115', '1', '111303', '209899', '26'), +('5', '115', '1', '111300', '208652', '26'), +('5', '115', '2', '94056', '132632', '26'), +('5', '115', '2', '62985', '131902', '26'), +('5', '115', '2', '89368', '126159', '26'), +('5', '115', '2', '104403', '111734', '26'), +('5', '115', '3', '111312', '210032', '26'), +('5', '115', '3', '111315', '209201', '26'), +('5', '115', '3', '111313', '209059', '26'), +('5', '115', '3', '111316', '207054', '26'), +('5', '115', '5', '111318', '208796', '26'), +('5', '115', '5', '111320', '208660', '26'), +('5', '115', '5', '111319', '206677', '26'), +('5', '115', '5', '111017', '183091', '26'), +('5', '115', '8', '111331', '210826', '26'), +('5', '115', '8', '111328', '210155', '26'), +('5', '115', '8', '111332', '207022', '26'), +('5', '115', '8', '111030', '185046', '26'), +('5', '115', '6', '111324', '209124', '26'), +('5', '115', '6', '111322', '209115', '26'), +('5', '115', '6', '111326', '206751', '26'), +('5', '115', '6', '111021', '183385', '26'), +('5', '115', '17', '56046', '139173', '26'), +('5', '115', '17', '81765', '138469', '26'), +('5', '115', '17', '56083', '138289', '26'), +('5', '115', '17', '104406', '118827', '26'), +('5', '115', '7', '94053', '133458', '26'), +('5', '115', '7', '56079', '132639', '26'), +('5', '115', '7', '89369', '127440', '26'), +('5', '115', '7', '104404', '111306', '26'), +('5', '115', '9', '67098', '216158', '26'), +('5', '115', '9', '56031', '128818', '26'), +('5', '115', '9', '62992', '128554', '26'), +('5', '115', '9', '62984', '128498', '26'), +('5', '115', '15', '111348', '210243', '26'), +('5', '115', '15', '111341', '209886', '26'), +('5', '115', '15', '111343', '209885', '26'), +('5', '115', '15', '111345', '208267', '26'), +('5', '115', '20', '111354', '234571', '26'), +('5', '115', '20', '111355', '232551', '26'), +('5', '115', '20', '111353', '231917', '26'), +('5', '115', '20', '111351', '231356', '26'), +('5', '115', '12', '81795', '129801', '26'), +('5', '115', '12', '56073', '129781', '26'), +('5', '115', '12', '89366', '123339', '26'), +('5', '115', '12', '104401', '109968', '26'), +('5', '115', '18', '56041', '135653', '26'), +('5', '115', '18', '62986', '135634', '26'), +('5', '115', '18', '62987', '134394', '26'), +('5', '115', '18', '94054', '134126', '26'), +('5', '115', '19', '62990', '133952', '26'), +('5', '115', '19', '56037', '133142', '26'), +('5', '115', '19', '56075', '132289', '26'), +('5', '115', '19', '81763', '131889', '26'), +('5', '115', '13', '111526', '438138', '26'), +('5', '115', '13', '111514', '421044', '26'), +('5', '115', '13', '111520', '416950', '26'), +('5', '115', '13', '111525', '415374', '26'), +('5', '115', '14', '111536', '215900', '26'), +('5', '115', '14', '111535', '214562', '26'), +('5', '115', '14', '111538', '214260', '26'), +('5', '115', '14', '111236', '190000', '26'), +('5', '115', '11', '85213', '313651', '26'), +('5', '115', '11', '133816', '271388', '26'), +('5', '115', '11', '111529', '261727', '26'), +('5', '115', '11', '111229', '242496', '26'), +('6', '1', '22', '9246', '0', '0'), +('6', '1', '22', '10323', '0', '0'), +('6', '1', '22', '44492', '0', '0'), +('6', '1', '22', '13101', '0', '0'), +('6', '1', '1', '12801', '4762', '0'), +('6', '1', '1', '14702', '3750', '0'), +('6', '1', '1', '14701', '2862', '0'), +('6', '1', '1', '30361', '2640', '0'), +('6', '1', '2', '10143', '5368', '0'), +('6', '1', '2', '30363', '3700', '0'), +('6', '1', '2', '3000', '2534', '0'), +('6', '1', '2', '2294', '2064', '0'), +('6', '1', '3', '2706', '1379', '0'), +('6', '1', '3', '2295', '1042', '0'), +('6', '1', '3', '14706', '990', '0'), +('6', '1', '3', '14705', '990', '0'), +('6', '1', '5', '14703', '6050', '0'), +('6', '1', '5', '14700', '3318', '0'), +('6', '1', '5', '30362', '3140', '0'), +('6', '1', '5', '10055', '2780', '0'), +('6', '1', '8', '11603', '8419', '0'), +('6', '1', '8', '2349', '3554', '0'), +('6', '1', '8', '1363', '2510', '0'), +('6', '1', '8', '2287', '1539', '0'), +('6', '1', '6', '1557', '5310', '0'), +('6', '1', '6', '2705', '5089', '0'), +('6', '1', '6', '1401', '2174', '0'), +('6', '1', '6', '2286', '1982', '0'), +('6', '1', '17', '2285', '9415', '0'), +('6', '1', '17', '3802', '611', '0'), +('6', '1', '17', '3305', '403', '0'), +('6', '1', '17', '2281', '354', '0'), +('6', '1', '7', '1362', '2624', '0'), +('6', '1', '7', '31809', '2585', '0'), +('6', '1', '7', '1321', '1746', '0'), +('6', '1', '7', '2289', '1379', '0'), +('6', '1', '9', '3804', '2059', '0'), +('6', '1', '9', '4344', '2051', '0'), +('6', '1', '9', '10408', '2002', '0'), +('6', '1', '9', '14650', '1662', '0'), +('6', '1', '15', '10150', '3004', '0'), +('6', '1', '15', '10163', '2300', '0'), +('6', '1', '15', '14651', '2224', '0'), +('6', '1', '15', '30360', '1600', '0'), +('6', '1', '20', '11666', '8289', '0'), +('6', '1', '20', '11684', '7633', '0'), +('6', '1', '20', '2742', '5069', '0'), +('6', '1', '20', '2288', '4478', '0'), +('6', '1', '12', '2291', '3830', '0'), +('6', '1', '12', '2923', '3074', '0'), +('6', '1', '12', '20655', '2626', '0'), +('6', '1', '12', '2336', '1012', '0'), +('6', '1', '18', '4410', '1142', '0'), +('6', '1', '18', '2292', '889', '0'), +('6', '1', '18', '3806', '322', '0'), +('6', '1', '18', '2461', '241', '0'), +('6', '1', '19', '1368', '2016', '0'), +('6', '1', '19', '68239', '1960', '0'), +('6', '1', '19', '2293', '1271', '0'), +('6', '1', '19', '3807', '200', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '1', '13', '10333', '5300', '0'), +('6', '1', '13', '6411', '5274', '0'), +('6', '1', '13', '11683', '5116', '0'), +('6', '1', '13', '11563', '4074', '0'), +('6', '1', '14', '10333', '5300', '0'), +('6', '1', '14', '10334', '3503', '0'), +('6', '1', '14', '14762', '2204', '0'), +('6', '1', '14', '13168', '2090', '0'), +('6', '1', '11', '14762', '2204', '0'), +('6', '1', '11', '20677', '450', '0'), +('6', '1', '11', '13390', '150', '0'), +('6', '1', '11', '9246', '133', '0'), +('6', '2', '22', '9246', '0', '0'), +('6', '2', '22', '10323', '0', '0'), +('6', '2', '22', '44492', '0', '0'), +('6', '2', '22', '13101', '0', '0'), +('6', '2', '1', '12801', '4762', '0'), +('6', '2', '1', '14702', '3750', '0'), +('6', '2', '1', '14701', '2862', '0'), +('6', '2', '1', '30361', '2640', '0'), +('6', '2', '2', '10143', '5368', '0'), +('6', '2', '2', '30363', '3700', '0'), +('6', '2', '2', '3000', '2534', '0'), +('6', '2', '2', '2294', '2088', '0'), +('6', '2', '3', '2706', '1500', '0'), +('6', '2', '3', '2295', '1066', '0'), +('6', '2', '3', '14705', '990', '0'), +('6', '2', '3', '14706', '990', '0'), +('6', '2', '5', '14703', '6050', '0'), +('6', '2', '5', '14700', '3318', '0'), +('6', '2', '5', '30362', '3140', '0'), +('6', '2', '5', '10055', '2780', '0'), +('6', '2', '8', '11603', '8528', '0'), +('6', '2', '8', '2349', '3554', '0'), +('6', '2', '8', '1363', '2510', '0'), +('6', '2', '8', '2287', '1541', '0'), +('6', '2', '6', '1557', '5310', '0'), +('6', '2', '6', '2705', '5138', '0'), +('6', '2', '6', '1401', '2174', '0'), +('6', '2', '6', '2286', '1983', '0'), +('6', '2', '17', '2285', '9463', '0'), +('6', '2', '17', '3802', '771', '0'), +('6', '2', '17', '3305', '403', '0'), +('6', '2', '17', '4342', '368', '0'), +('6', '2', '7', '1362', '2624', '0'), +('6', '2', '7', '31809', '2621', '0'), +('6', '2', '7', '1321', '1746', '0'), +('6', '2', '7', '2289', '1427', '0'), +('6', '2', '9', '3804', '2168', '0'), +('6', '2', '9', '4344', '2051', '0'), +('6', '2', '9', '10408', '2002', '0'), +('6', '2', '9', '14650', '1662', '0'), +('6', '2', '15', '10150', '3004', '0'), +('6', '2', '15', '10163', '2300', '0'), +('6', '2', '15', '14651', '2224', '0'), +('6', '2', '15', '30360', '1600', '0'), +('6', '2', '20', '11666', '8291', '0'), +('6', '2', '20', '11684', '7730', '0'), +('6', '2', '20', '2742', '5072', '0'), +('6', '2', '20', '2288', '4478', '0'), +('6', '2', '12', '2291', '3830', '0'), +('6', '2', '12', '2923', '3074', '0'), +('6', '2', '12', '20655', '2651', '0'), +('6', '2', '12', '2336', '1012', '0'), +('6', '2', '18', '4410', '1142', '0'), +('6', '2', '18', '2292', '938', '0'), +('6', '2', '18', '3806', '383', '0'), +('6', '2', '18', '2461', '289', '0'), +('6', '2', '19', '1368', '2016', '0'), +('6', '2', '19', '68239', '1996', '0'), +('6', '2', '19', '2293', '1308', '0'), +('6', '2', '19', '4407', '278', '0'), +('6', '2', '13', '6411', '5382', '0'), +('6', '2', '13', '10333', '5300', '0'), +('6', '2', '13', '11683', '5225', '0'), +('6', '2', '13', '11563', '4147', '0'), +('6', '2', '14', '10333', '5300', '0'), +('6', '2', '14', '10334', '3503', '0'), +('6', '2', '14', '14762', '2204', '0'), +('6', '2', '14', '13168', '2090', '0'), +('6', '2', '11', '14762', '2204', '0'), +('6', '2', '11', '20677', '450', '0'), +('6', '2', '11', '9246', '254', '0'), +('6', '2', '11', '13390', '150', '0'), +('6', '3', '22', '9246', '0', '0'), +('6', '3', '22', '10323', '0', '0'), +('6', '3', '22', '44492', '0', '0'), +('6', '3', '22', '13101', '0', '0'), +('6', '3', '1', '12801', '4762', '0'), +('6', '3', '1', '14702', '3750', '0'), +('6', '3', '1', '14701', '2862', '0'), +('6', '3', '1', '30361', '2640', '0'), +('6', '3', '2', '10143', '5368', '0'), +('6', '3', '2', '30363', '3700', '0'), +('6', '3', '2', '3000', '2534', '0'), +('6', '3', '2', '2294', '2112', '0'), +('6', '3', '3', '2706', '1621', '0'), +('6', '3', '3', '2295', '1091', '0'), +('6', '3', '3', '14705', '990', '0'), +('6', '3', '3', '14706', '990', '0'), +('6', '3', '5', '14703', '6050', '0'), +('6', '3', '5', '14700', '3318', '0'), +('6', '3', '5', '30362', '3140', '0'), +('6', '3', '5', '10055', '2780', '0'), +('6', '3', '8', '11603', '8637', '0'), +('6', '3', '8', '2349', '3554', '0'), +('6', '3', '8', '1363', '2510', '0'), +('6', '3', '8', '2287', '1543', '0'), +('6', '3', '6', '1557', '5310', '0'), +('6', '3', '6', '2705', '5186', '0'), +('6', '3', '6', '1401', '2174', '0'), +('6', '3', '6', '2286', '1985', '0'), +('6', '3', '17', '2285', '9511', '0'), +('6', '3', '17', '3802', '931', '0'), +('6', '3', '17', '4342', '489', '0'), +('6', '3', '17', '3305', '403', '0'), +('6', '3', '7', '31809', '2657', '0'), +('6', '3', '7', '1362', '2624', '0'), +('6', '3', '7', '1321', '1746', '0'), +('6', '3', '7', '2289', '1475', '0'), +('6', '3', '9', '3804', '2276', '0'), +('6', '3', '9', '4344', '2051', '0'), +('6', '3', '9', '10408', '2002', '0'), +('6', '3', '9', '14650', '1662', '0'), +('6', '3', '15', '10150', '3004', '0'), +('6', '3', '15', '10163', '2300', '0'), +('6', '3', '15', '14651', '2224', '0'), +('6', '3', '15', '30360', '1600', '0'), +('6', '3', '20', '11666', '8293', '0'), +('6', '3', '20', '11684', '7826', '0'), +('6', '3', '20', '2742', '5076', '0'), +('6', '3', '20', '2288', '4478', '0'), +('6', '3', '12', '2291', '3830', '0'), +('6', '3', '12', '2923', '3074', '0'), +('6', '3', '12', '20655', '2676', '0'), +('6', '3', '12', '2336', '1012', '0'), +('6', '3', '18', '4410', '1142', '0'), +('6', '3', '18', '2292', '986', '0'), +('6', '3', '18', '3806', '443', '0'), +('6', '3', '18', '2461', '337', '0'), +('6', '3', '19', '68239', '2032', '0'), +('6', '3', '19', '1368', '2016', '0'), +('6', '3', '19', '2293', '1344', '0'), +('6', '3', '19', '4407', '386', '0'), +('6', '3', '13', '6411', '5491', '0'), +('6', '3', '13', '11683', '5333', '0'), +('6', '3', '13', '10333', '5300', '0'), +('6', '3', '13', '11563', '4219', '0'), +('6', '3', '14', '10333', '5300', '0'), +('6', '3', '14', '10334', '3503', '0'), +('6', '3', '14', '14762', '2204', '0'), +('6', '3', '14', '13168', '2090', '0'), +('6', '3', '11', '14762', '2204', '0'), +('6', '3', '11', '20677', '450', '0'), +('6', '3', '11', '9246', '374', '0'), +('6', '3', '11', '13390', '150', '0'), +('6', '4', '22', '9246', '0', '0'), +('6', '4', '22', '10323', '0', '0'), +('6', '4', '22', '44492', '0', '0'), +('6', '4', '22', '13101', '0', '0'), +('6', '4', '1', '12801', '4762', '0'), +('6', '4', '1', '14702', '3750', '0'), +('6', '4', '1', '14701', '2862', '0'), +('6', '4', '1', '30361', '2640', '0'), +('6', '4', '2', '10143', '5368', '0'), +('6', '4', '2', '30363', '3700', '0'), +('6', '4', '2', '3000', '2534', '0'), +('6', '4', '2', '2294', '2137', '0'), +('6', '4', '3', '2706', '1742', '0'), +('6', '4', '3', '2295', '1115', '0'), +('6', '4', '3', '14706', '990', '0'), +('6', '4', '3', '14705', '990', '0'), +('6', '4', '5', '14703', '6050', '0'), +('6', '4', '5', '14700', '3318', '0'), +('6', '4', '5', '30362', '3140', '0'), +('6', '4', '5', '10055', '2780', '0'), +('6', '4', '8', '11603', '8745', '0'), +('6', '4', '8', '2349', '3554', '0'), +('6', '4', '8', '1363', '2510', '0'), +('6', '4', '8', '2287', '1546', '0'), +('6', '4', '6', '1557', '5310', '0'), +('6', '4', '6', '2705', '5234', '0'), +('6', '4', '6', '1401', '2174', '0'), +('6', '4', '6', '2286', '1986', '0'), +('6', '4', '17', '2285', '9560', '0'), +('6', '4', '17', '3802', '1091', '0'), +('6', '4', '17', '4342', '610', '0'), +('6', '4', '17', '3305', '403', '0'), +('6', '4', '7', '31809', '2693', '0'), +('6', '4', '7', '1362', '2624', '0'), +('6', '4', '7', '1321', '1746', '0'), +('6', '4', '7', '2289', '1523', '0'), +('6', '4', '9', '3804', '2385', '0'), +('6', '4', '9', '4344', '2051', '0'), +('6', '4', '9', '10408', '2002', '0'), +('6', '4', '9', '14650', '1662', '0'), +('6', '4', '15', '10150', '3004', '0'), +('6', '4', '15', '10163', '2300', '0'), +('6', '4', '15', '14651', '2224', '0'), +('6', '4', '15', '30360', '1600', '0'), +('6', '4', '20', '11666', '8295', '0'), +('6', '4', '20', '11684', '7923', '0'), +('6', '4', '20', '2742', '5079', '0'), +('6', '4', '20', '2288', '4478', '0'), +('6', '4', '12', '2291', '3830', '0'), +('6', '4', '12', '2923', '3074', '0'), +('6', '4', '12', '20655', '2701', '0'), +('6', '4', '12', '2336', '1012', '0'), +('6', '4', '18', '4410', '1142', '0'), +('6', '4', '18', '2292', '1034', '0'), +('6', '4', '18', '3806', '504', '0'), +('6', '4', '18', '2461', '386', '0'), +('6', '4', '19', '68239', '2068', '0'), +('6', '4', '19', '1368', '2016', '0'), +('6', '4', '19', '2293', '1380', '0'), +('6', '4', '19', '4407', '495', '0'), +('6', '4', '13', '6411', '5600', '0'), +('6', '4', '13', '11683', '5442', '0'), +('6', '4', '13', '10333', '5300', '0'), +('6', '4', '13', '11563', '4292', '0'), +('6', '4', '14', '10333', '5300', '0'), +('6', '4', '14', '10334', '3503', '0'), +('6', '4', '14', '14762', '2204', '0'), +('6', '4', '14', '13168', '2090', '0'), +('6', '4', '11', '14762', '2204', '0'), +('6', '4', '11', '9246', '495', '0'), +('6', '4', '11', '20677', '450', '0'), +('6', '4', '11', '13390', '150', '0'), +('6', '5', '22', '9246', '0', '0'), +('6', '5', '22', '10323', '0', '0'), +('6', '5', '22', '44492', '0', '0'), +('6', '5', '22', '13101', '0', '0'), +('6', '5', '1', '12801', '4762', '0'), +('6', '5', '1', '14702', '3750', '0'), +('6', '5', '1', '14701', '2862', '0'), +('6', '5', '1', '30361', '2640', '0'), +('6', '5', '2', '10143', '5368', '0'), +('6', '5', '2', '30363', '3700', '0'), +('6', '5', '2', '3000', '2534', '0'), +('6', '5', '2', '2294', '2161', '0'), +('6', '5', '3', '2706', '1862', '0'), +('6', '5', '3', '2295', '1139', '0'), +('6', '5', '3', '14706', '990', '0'), +('6', '5', '3', '14705', '990', '0'), +('6', '5', '5', '14703', '6050', '0'), +('6', '5', '5', '14700', '3318', '0'), +('6', '5', '5', '30362', '3140', '0'), +('6', '5', '5', '10055', '2780', '0'), +('6', '5', '8', '11603', '8854', '0'), +('6', '5', '8', '2349', '3554', '0'), +('6', '5', '8', '1363', '2510', '0'), +('6', '5', '8', '2287', '1548', '0'), +('6', '5', '6', '1557', '5310', '0'), +('6', '5', '6', '2705', '5283', '0'), +('6', '5', '6', '1401', '2174', '0'), +('6', '5', '6', '2286', '1988', '0'), +('6', '5', '17', '2285', '9608', '0'), +('6', '5', '17', '3802', '1250', '0'), +('6', '5', '17', '4342', '731', '0'), +('6', '5', '17', '3305', '403', '0'), +('6', '5', '7', '31809', '2730', '0'), +('6', '5', '7', '1362', '2624', '0'), +('6', '5', '7', '1321', '1746', '0'), +('6', '5', '7', '2289', '1572', '0'), +('6', '5', '9', '3804', '2494', '0'), +('6', '5', '9', '4344', '2051', '0'), +('6', '5', '9', '10408', '2002', '0'), +('6', '5', '9', '14650', '1662', '0'), +('6', '5', '15', '10150', '3004', '0'), +('6', '5', '15', '10163', '2300', '0'), +('6', '5', '15', '14651', '2224', '0'), +('6', '5', '15', '30360', '1600', '0'), +('6', '5', '20', '11666', '8297', '0'), +('6', '5', '20', '11684', '8019', '0'), +('6', '5', '20', '2742', '5082', '0'), +('6', '5', '20', '2288', '4478', '0'), +('6', '5', '12', '2291', '3830', '0'), +('6', '5', '12', '2923', '3074', '0'), +('6', '5', '12', '20655', '2725', '0'), +('6', '5', '12', '2336', '1012', '0'), +('6', '5', '18', '4410', '1142', '0'), +('6', '5', '18', '2292', '1083', '0'), +('6', '5', '18', '3806', '564', '0'), +('6', '5', '18', '2461', '434', '0'), +('6', '5', '19', '68239', '2105', '0'), +('6', '5', '19', '1368', '2016', '0'), +('6', '5', '19', '2293', '1416', '0'), +('6', '5', '19', '4407', '604', '0'), +('6', '5', '13', '6411', '5709', '0'), +('6', '5', '13', '11683', '5551', '0'), +('6', '5', '13', '10333', '5300', '0'), +('6', '5', '13', '11563', '4364', '0'), +('6', '5', '14', '10333', '5300', '0'), +('6', '5', '14', '10334', '3503', '0'), +('6', '5', '14', '14762', '2204', '0'), +('6', '5', '14', '14555', '2203', '0'), +('6', '5', '11', '14762', '2204', '0'), +('6', '5', '11', '9246', '616', '0'), +('6', '5', '11', '20677', '450', '0'), +('6', '5', '11', '13390', '150', '0'), +('6', '6', '22', '9246', '0', '0'), +('6', '6', '22', '10323', '0', '0'), +('6', '6', '22', '44492', '0', '0'), +('6', '6', '22', '13101', '0', '0'), +('6', '6', '1', '12801', '4762', '0'), +('6', '6', '1', '14702', '3750', '0'), +('6', '6', '1', '14701', '2862', '0'), +('6', '6', '1', '30361', '2640', '0'), +('6', '6', '2', '10143', '5368', '0'), +('6', '6', '2', '30363', '3700', '0'), +('6', '6', '2', '3000', '2534', '0'), +('6', '6', '2', '2294', '2185', '0'), +('6', '6', '3', '2706', '1983', '0'), +('6', '6', '3', '2295', '1163', '0'), +('6', '6', '3', '11052', '1087', '0'), +('6', '6', '3', '14705', '990', '0'), +('6', '6', '5', '14703', '6050', '0'), +('6', '6', '5', '14700', '3318', '0'), +('6', '6', '5', '30362', '3140', '0'), +('6', '6', '5', '10055', '2780', '0'), +('6', '6', '8', '11603', '8963', '0'), +('6', '6', '8', '2349', '3554', '0'), +('6', '6', '8', '1363', '2510', '0'), +('6', '6', '8', '2287', '1551', '0'), +('6', '6', '6', '2705', '5331', '0'), +('6', '6', '6', '1557', '5310', '0'), +('6', '6', '6', '1401', '2174', '0'), +('6', '6', '6', '2286', '1989', '0'), +('6', '6', '17', '2285', '9656', '0'), +('6', '6', '17', '3802', '1410', '0'), +('6', '6', '17', '4342', '852', '0'), +('6', '6', '17', '2405', '428', '0'), +('6', '6', '7', '31809', '2766', '0'), +('6', '6', '7', '1362', '2624', '0'), +('6', '6', '7', '1321', '1746', '0'), +('6', '6', '7', '2289', '1620', '0'), +('6', '6', '9', '3804', '2603', '0'), +('6', '6', '9', '4344', '2051', '0'), +('6', '6', '9', '10408', '2002', '0'), +('6', '6', '9', '1541', '1697', '0'), +('6', '6', '15', '10150', '3004', '0'), +('6', '6', '15', '10163', '2300', '0'), +('6', '6', '15', '14651', '2224', '0'), +('6', '6', '15', '30360', '1600', '0'), +('6', '6', '20', '11666', '8300', '0'), +('6', '6', '20', '11684', '8116', '0'), +('6', '6', '20', '2742', '5085', '0'), +('6', '6', '20', '2288', '4478', '0'), +('6', '6', '12', '2291', '3830', '0'), +('6', '6', '12', '2923', '3074', '0'), +('6', '6', '12', '20655', '2750', '0'), +('6', '6', '12', '2336', '1012', '0'), +('6', '6', '18', '4410', '1142', '0'), +('6', '6', '18', '2292', '1131', '0'), +('6', '6', '18', '3806', '624', '0'), +('6', '6', '18', '2461', '482', '0'), +('6', '6', '19', '68239', '2141', '0'), +('6', '6', '19', '1368', '2016', '0'), +('6', '6', '19', '2293', '1452', '0'), +('6', '6', '19', '4407', '713', '0'), +('6', '6', '13', '6411', '5817', '0'), +('6', '6', '13', '11683', '5659', '0'), +('6', '6', '13', '10333', '5300', '0'), +('6', '6', '13', '11563', '4437', '0'), +('6', '6', '14', '10333', '5300', '0'), +('6', '6', '14', '10334', '3503', '0'), +('6', '6', '14', '14555', '2445', '0'), +('6', '6', '14', '14762', '2204', '0'), +('6', '6', '11', '14762', '2204', '0'), +('6', '6', '11', '9246', '737', '0'), +('6', '6', '11', '20677', '450', '0'), +('6', '6', '11', '13390', '150', '0'), +('6', '7', '22', '9246', '0', '0'), +('6', '7', '22', '10323', '0', '0'), +('6', '7', '22', '44492', '0', '0'), +('6', '7', '22', '13101', '0', '0'), +('6', '7', '1', '12801', '4762', '0'), +('6', '7', '1', '14702', '3750', '0'), +('6', '7', '1', '14701', '2862', '0'), +('6', '7', '1', '30361', '2640', '0'), +('6', '7', '2', '10143', '5368', '0'), +('6', '7', '2', '30363', '3700', '0'), +('6', '7', '2', '3000', '2534', '0'), +('6', '7', '2', '2294', '2209', '0'), +('6', '7', '3', '2706', '2104', '0'), +('6', '7', '3', '11052', '1268', '0'), +('6', '7', '3', '2295', '1187', '0'), +('6', '7', '3', '14705', '990', '0'), +('6', '7', '5', '14703', '6050', '0'), +('6', '7', '5', '14700', '3318', '0'), +('6', '7', '5', '30362', '3140', '0'), +('6', '7', '5', '10055', '2780', '0'), +('6', '7', '8', '11603', '9071', '0'), +('6', '7', '8', '2349', '3554', '0'), +('6', '7', '8', '1363', '2510', '0'), +('6', '7', '8', '2287', '1553', '0'), +('6', '7', '6', '2705', '5379', '0'), +('6', '7', '6', '1557', '5310', '0'), +('6', '7', '6', '1401', '2174', '0'), +('6', '7', '6', '2286', '1991', '0'), +('6', '7', '17', '2285', '9705', '0'), +('6', '7', '17', '3802', '1570', '0'), +('6', '7', '17', '4342', '972', '0'), +('6', '7', '17', '2405', '490', '0'), +('6', '7', '7', '31809', '2802', '0'), +('6', '7', '7', '1362', '2624', '0'), +('6', '7', '7', '1321', '1746', '0'), +('6', '7', '7', '2289', '1668', '0'), +('6', '7', '9', '3804', '2711', '0'), +('6', '7', '9', '4344', '2051', '0'), +('6', '7', '9', '10408', '2002', '0'), +('6', '7', '9', '1541', '1818', '0'), +('6', '7', '15', '10150', '3004', '0'), +('6', '7', '15', '10163', '2300', '0'), +('6', '7', '15', '14651', '2224', '0'), +('6', '7', '15', '30360', '1600', '0'), +('6', '7', '20', '11666', '8302', '0'), +('6', '7', '20', '11684', '8213', '0'), +('6', '7', '20', '2742', '5088', '0'), +('6', '7', '20', '2288', '4478', '0'), +('6', '7', '12', '2291', '3830', '0'), +('6', '7', '12', '2923', '3074', '0'), +('6', '7', '12', '20655', '2775', '0'), +('6', '7', '12', '2336', '1012', '0'), +('6', '7', '18', '2292', '1179', '0'), +('6', '7', '18', '4410', '1142', '0'), +('6', '7', '18', '3806', '685', '0'), +('6', '7', '18', '2461', '531', '0'), +('6', '7', '19', '68239', '2177', '0'), +('6', '7', '19', '1368', '2016', '0'), +('6', '7', '19', '2293', '1489', '0'), +('6', '7', '19', '4407', '821', '0'), +('6', '7', '13', '6411', '5926', '0'), +('6', '7', '13', '11683', '5768', '0'), +('6', '7', '13', '10333', '5300', '0'), +('6', '7', '13', '11563', '4509', '0'), +('6', '7', '14', '10333', '5300', '0'), +('6', '7', '14', '10334', '3503', '0'), +('6', '7', '14', '14555', '2686', '0'), +('6', '7', '14', '9690', '2450', '0'), +('6', '7', '11', '14762', '2204', '0'), +('6', '7', '11', '9246', '858', '0'), +('6', '7', '11', '20677', '450', '0'), +('6', '7', '11', '16941', '169', '0'), +('6', '8', '22', '9246', '0', '0'), +('6', '8', '22', '10323', '0', '0'), +('6', '8', '22', '44492', '0', '0'), +('6', '8', '22', '13101', '0', '0'), +('6', '8', '1', '12801', '4762', '0'), +('6', '8', '1', '14702', '3750', '0'), +('6', '8', '1', '14701', '2862', '0'), +('6', '8', '1', '30361', '2640', '0'), +('6', '8', '2', '10143', '5368', '0'), +('6', '8', '2', '30363', '3700', '0'), +('6', '8', '2', '3000', '2534', '0'), +('6', '8', '2', '2294', '2233', '0'), +('6', '8', '3', '2706', '2225', '0'), +('6', '8', '3', '11052', '1450', '0'), +('6', '8', '3', '2295', '1211', '0'), +('6', '8', '3', '14705', '990', '0'), +('6', '8', '5', '14703', '6050', '0'), +('6', '8', '5', '14700', '3318', '0'), +('6', '8', '5', '30362', '3140', '0'), +('6', '8', '5', '10055', '2780', '0'), +('6', '8', '8', '11603', '9180', '0'), +('6', '8', '8', '2349', '3554', '0'), +('6', '8', '8', '1363', '2510', '0'), +('6', '8', '8', '2287', '1556', '0'), +('6', '8', '6', '2705', '5428', '0'), +('6', '8', '6', '1557', '5310', '0'), +('6', '8', '6', '1401', '2174', '0'), +('6', '8', '6', '2286', '1992', '0'), +('6', '8', '17', '2285', '9753', '0'), +('6', '8', '17', '3802', '1730', '0'), +('6', '8', '17', '4342', '1093', '0'), +('6', '8', '17', '2405', '551', '0'), +('6', '8', '7', '31809', '2838', '0'), +('6', '8', '7', '1362', '2624', '0'), +('6', '8', '7', '1321', '1746', '0'), +('6', '8', '7', '2289', '1717', '0'), +('6', '8', '9', '3804', '2820', '0'), +('6', '8', '9', '4344', '2051', '0'), +('6', '8', '9', '10408', '2002', '0'), +('6', '8', '9', '1541', '1939', '0'), +('6', '8', '15', '10150', '3004', '0'), +('6', '8', '15', '10163', '2300', '0'), +('6', '8', '15', '14651', '2224', '0'), +('6', '8', '15', '30360', '1600', '0'), +('6', '8', '20', '11684', '8309', '0'), +('6', '8', '20', '11666', '8304', '0'), +('6', '8', '20', '2742', '5091', '0'), +('6', '8', '20', '2288', '4478', '0'), +('6', '8', '12', '2291', '3830', '0'), +('6', '8', '12', '2923', '3074', '0'), +('6', '8', '12', '20655', '2800', '0'), +('6', '8', '12', '2336', '1012', '0'), +('6', '8', '18', '2292', '1228', '0'), +('6', '8', '18', '4410', '1142', '0'), +('6', '8', '18', '3806', '745', '0'), +('6', '8', '18', '2461', '579', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '8', '19', '68239', '2213', '0'), +('6', '8', '19', '1368', '2016', '0'), +('6', '8', '19', '2293', '1525', '0'), +('6', '8', '19', '4407', '930', '0'), +('6', '8', '13', '6411', '6035', '0'), +('6', '8', '13', '11683', '5877', '0'), +('6', '8', '13', '10333', '5300', '0'), +('6', '8', '13', '11563', '4582', '0'), +('6', '8', '14', '10333', '5300', '0'), +('6', '8', '14', '10334', '3503', '0'), +('6', '8', '14', '14555', '2928', '0'), +('6', '8', '14', '9690', '2800', '0'), +('6', '8', '11', '14762', '2204', '0'), +('6', '8', '11', '9246', '978', '0'), +('6', '8', '11', '20677', '450', '0'), +('6', '8', '11', '16941', '193', '0'), +('6', '9', '22', '9246', '0', '0'), +('6', '9', '22', '10323', '0', '0'), +('6', '9', '22', '44492', '0', '0'), +('6', '9', '22', '13101', '0', '0'), +('6', '9', '1', '12801', '4762', '0'), +('6', '9', '1', '14702', '3750', '0'), +('6', '9', '1', '14701', '2862', '0'), +('6', '9', '1', '30361', '2640', '0'), +('6', '9', '2', '10143', '5368', '0'), +('6', '9', '2', '30363', '3700', '0'), +('6', '9', '2', '3000', '2534', '0'), +('6', '9', '2', '2294', '2257', '0'), +('6', '9', '3', '2706', '2346', '0'), +('6', '9', '3', '11052', '1631', '0'), +('6', '9', '3', '2295', '1236', '0'), +('6', '9', '3', '14705', '990', '0'), +('6', '9', '5', '14703', '6050', '0'), +('6', '9', '5', '14700', '3318', '0'), +('6', '9', '5', '30362', '3140', '0'), +('6', '9', '5', '10055', '2780', '0'), +('6', '9', '8', '11603', '9289', '0'), +('6', '9', '8', '2349', '3554', '0'), +('6', '9', '8', '1363', '2510', '0'), +('6', '9', '8', '2287', '1558', '0'), +('6', '9', '6', '2705', '5476', '0'), +('6', '9', '6', '1557', '5310', '0'), +('6', '9', '6', '1401', '2174', '0'), +('6', '9', '6', '2286', '1994', '0'), +('6', '9', '17', '2285', '9801', '0'), +('6', '9', '17', '3802', '1889', '0'), +('6', '9', '17', '4342', '1214', '0'), +('6', '9', '17', '2405', '612', '0'), +('6', '9', '7', '31809', '2874', '0'), +('6', '9', '7', '1362', '2624', '0'), +('6', '9', '7', '2289', '1765', '0'), +('6', '9', '7', '1321', '1746', '0'), +('6', '9', '9', '3804', '2929', '0'), +('6', '9', '9', '1541', '2060', '0'), +('6', '9', '9', '4344', '2051', '0'), +('6', '9', '9', '10408', '2002', '0'), +('6', '9', '15', '10150', '3004', '0'), +('6', '9', '15', '10163', '2300', '0'), +('6', '9', '15', '14651', '2224', '0'), +('6', '9', '15', '30360', '1600', '0'), +('6', '9', '20', '11684', '8406', '0'), +('6', '9', '20', '11666', '8306', '0'), +('6', '9', '20', '2742', '5094', '0'), +('6', '9', '20', '2288', '4478', '0'), +('6', '9', '12', '2291', '3830', '0'), +('6', '9', '12', '2923', '3074', '0'), +('6', '9', '12', '20655', '2824', '0'), +('6', '9', '12', '2336', '1012', '0'), +('6', '9', '18', '2292', '1276', '0'), +('6', '9', '18', '4410', '1142', '0'), +('6', '9', '18', '3806', '806', '0'), +('6', '9', '18', '2461', '627', '0'), +('6', '9', '19', '68239', '2250', '0'), +('6', '9', '19', '1368', '2016', '0'), +('6', '9', '19', '2293', '1561', '0'), +('6', '9', '19', '4407', '1039', '0'), +('6', '9', '13', '6411', '6143', '0'), +('6', '9', '13', '11683', '5986', '0'), +('6', '9', '13', '10333', '5300', '0'), +('6', '9', '13', '11563', '4654', '0'), +('6', '9', '14', '10333', '5300', '0'), +('6', '9', '14', '10334', '3503', '0'), +('6', '9', '14', '14555', '3170', '0'), +('6', '9', '14', '9690', '3150', '0'), +('6', '9', '11', '14762', '2204', '0'), +('6', '9', '11', '9246', '1099', '0'), +('6', '9', '11', '20677', '450', '0'), +('6', '9', '11', '16941', '217', '0'), +('6', '10', '22', '9246', '0', '0'), +('6', '10', '22', '10323', '0', '0'), +('6', '10', '22', '44492', '0', '0'), +('6', '10', '22', '13101', '0', '0'), +('6', '10', '1', '12801', '4762', '0'), +('6', '10', '1', '14702', '3750', '0'), +('6', '10', '1', '14701', '2862', '0'), +('6', '10', '1', '30361', '2640', '0'), +('6', '10', '2', '10143', '5368', '0'), +('6', '10', '2', '30363', '3700', '0'), +('6', '10', '2', '3000', '2534', '0'), +('6', '10', '2', '2294', '2281', '0'), +('6', '10', '3', '2706', '2466', '0'), +('6', '10', '3', '11052', '1812', '0'), +('6', '10', '3', '2295', '1260', '0'), +('6', '10', '3', '14705', '990', '0'), +('6', '10', '5', '14703', '6050', '0'), +('6', '10', '5', '14700', '3318', '0'), +('6', '10', '5', '30362', '3140', '0'), +('6', '10', '5', '10055', '2780', '0'), +('6', '10', '8', '11603', '9398', '0'), +('6', '10', '8', '2349', '3554', '0'), +('6', '10', '8', '1363', '2510', '0'), +('6', '10', '8', '2287', '1560', '0'), +('6', '10', '6', '2705', '5524', '0'), +('6', '10', '6', '1557', '5310', '0'), +('6', '10', '6', '1401', '2174', '0'), +('6', '10', '6', '2286', '1995', '0'), +('6', '10', '17', '2285', '9850', '0'), +('6', '10', '17', '3802', '2049', '0'), +('6', '10', '17', '4342', '1335', '0'), +('6', '10', '17', '2405', '673', '0'), +('6', '10', '7', '31809', '2911', '0'), +('6', '10', '7', '1362', '2624', '0'), +('6', '10', '7', '2289', '1813', '0'), +('6', '10', '7', '1321', '1746', '0'), +('6', '10', '9', '3804', '3037', '0'), +('6', '10', '9', '1541', '2180', '0'), +('6', '10', '9', '4344', '2051', '0'), +('6', '10', '9', '10408', '2002', '0'), +('6', '10', '15', '10150', '3004', '0'), +('6', '10', '15', '10163', '2300', '0'), +('6', '10', '15', '14651', '2224', '0'), +('6', '10', '15', '30360', '1600', '0'), +('6', '10', '20', '11684', '8503', '0'), +('6', '10', '20', '11666', '8308', '0'), +('6', '10', '20', '2742', '5097', '0'), +('6', '10', '20', '2288', '4478', '0'), +('6', '10', '12', '2291', '3830', '0'), +('6', '10', '12', '2923', '3074', '0'), +('6', '10', '12', '20655', '2849', '0'), +('6', '10', '12', '2336', '1012', '0'), +('6', '10', '18', '2292', '1324', '0'), +('6', '10', '18', '4410', '1142', '0'), +('6', '10', '18', '3806', '866', '0'), +('6', '10', '18', '2461', '675', '0'), +('6', '10', '19', '68239', '2286', '0'), +('6', '10', '19', '1368', '2016', '0'), +('6', '10', '19', '2293', '1597', '0'), +('6', '10', '19', '4407', '1147', '0'), +('6', '10', '13', '6411', '6252', '0'), +('6', '10', '13', '11683', '6094', '0'), +('6', '10', '13', '10333', '5300', '0'), +('6', '10', '13', '11563', '4726', '0'), +('6', '10', '14', '10333', '5300', '0'), +('6', '10', '14', '10334', '3503', '0'), +('6', '10', '14', '9690', '3500', '0'), +('6', '10', '14', '14555', '3411', '0'), +('6', '10', '11', '14762', '2204', '0'), +('6', '10', '11', '9246', '1220', '0'), +('6', '10', '11', '20677', '450', '0'), +('6', '10', '11', '16941', '242', '0'), +('6', '11', '22', '9246', '0', '0'), +('6', '11', '22', '10323', '0', '0'), +('6', '11', '22', '44492', '0', '0'), +('6', '11', '22', '13101', '0', '0'), +('6', '11', '1', '12801', '4762', '0'), +('6', '11', '1', '14702', '3750', '0'), +('6', '11', '1', '14701', '2862', '0'), +('6', '11', '1', '30361', '2640', '0'), +('6', '11', '2', '10143', '5368', '0'), +('6', '11', '2', '30363', '3700', '0'), +('6', '11', '2', '3000', '2534', '0'), +('6', '11', '2', '2294', '2306', '0'), +('6', '11', '3', '2706', '2587', '0'), +('6', '11', '3', '11052', '1993', '0'), +('6', '11', '3', '2295', '1284', '0'), +('6', '11', '3', '14705', '990', '0'), +('6', '11', '5', '14703', '6050', '0'), +('6', '11', '5', '14700', '3318', '0'), +('6', '11', '5', '30362', '3140', '0'), +('6', '11', '5', '10055', '2780', '0'), +('6', '11', '8', '11603', '9506', '0'), +('6', '11', '8', '2349', '3554', '0'), +('6', '11', '8', '1363', '2510', '0'), +('6', '11', '8', '2287', '1563', '0'), +('6', '11', '6', '2705', '5573', '0'), +('6', '11', '6', '1557', '5310', '0'), +('6', '11', '6', '1401', '2174', '0'), +('6', '11', '6', '2286', '1997', '0'), +('6', '11', '17', '2285', '9898', '0'), +('6', '11', '17', '3802', '2209', '0'), +('6', '11', '17', '4342', '1456', '0'), +('6', '11', '17', '2405', '735', '0'), +('6', '11', '7', '31809', '2947', '0'), +('6', '11', '7', '1362', '2624', '0'), +('6', '11', '7', '2289', '1862', '0'), +('6', '11', '7', '1321', '1746', '0'), +('6', '11', '9', '3804', '3146', '0'), +('6', '11', '9', '1541', '2301', '0'), +('6', '11', '9', '4344', '2051', '0'), +('6', '11', '9', '10408', '2002', '0'), +('6', '11', '15', '10150', '3004', '0'), +('6', '11', '15', '10163', '2300', '0'), +('6', '11', '15', '14651', '2224', '0'), +('6', '11', '15', '30360', '1600', '0'), +('6', '11', '20', '11684', '8599', '0'), +('6', '11', '20', '11666', '8310', '0'), +('6', '11', '20', '2742', '5100', '0'), +('6', '11', '20', '2288', '4478', '0'), +('6', '11', '12', '2291', '3830', '0'), +('6', '11', '12', '2923', '3074', '0'), +('6', '11', '12', '20655', '2874', '0'), +('6', '11', '12', '4345', '1037', '0'), +('6', '11', '18', '2292', '1373', '0'), +('6', '11', '18', '4410', '1142', '0'), +('6', '11', '18', '3806', '926', '0'), +('6', '11', '18', '2461', '724', '0'), +('6', '11', '19', '68239', '2322', '0'), +('6', '11', '19', '1368', '2016', '0'), +('6', '11', '19', '2293', '1634', '0'), +('6', '11', '19', '4407', '1256', '0'), +('6', '11', '13', '6411', '6361', '0'), +('6', '11', '13', '11683', '6203', '0'), +('6', '11', '13', '10333', '5300', '0'), +('6', '11', '13', '11563', '4799', '0'), +('6', '11', '14', '10333', '5300', '0'), +('6', '11', '14', '14555', '3653', '0'), +('6', '11', '14', '10334', '3503', '0'), +('6', '11', '14', '9690', '3500', '0'), +('6', '11', '11', '14762', '2204', '0'), +('6', '11', '11', '9246', '1341', '0'), +('6', '11', '11', '20677', '450', '0'), +('6', '11', '11', '16941', '266', '0'), +('6', '12', '22', '9246', '0', '0'), +('6', '12', '22', '10323', '0', '0'), +('6', '12', '22', '44492', '0', '0'), +('6', '12', '22', '13101', '0', '0'), +('6', '12', '1', '12801', '4762', '0'), +('6', '12', '1', '14702', '3750', '0'), +('6', '12', '1', '14701', '2862', '0'), +('6', '12', '1', '30361', '2640', '0'), +('6', '12', '2', '10143', '5368', '0'), +('6', '12', '2', '30363', '3700', '0'), +('6', '12', '2', '3000', '2534', '0'), +('6', '12', '2', '2294', '2330', '0'), +('6', '12', '3', '2706', '2708', '0'), +('6', '12', '3', '11052', '2174', '0'), +('6', '12', '3', '2295', '1308', '0'), +('6', '12', '3', '4505', '1045', '0'), +('6', '12', '5', '14703', '6050', '0'), +('6', '12', '5', '14700', '3318', '0'), +('6', '12', '5', '30362', '3140', '0'), +('6', '12', '5', '10055', '2780', '0'), +('6', '12', '8', '11603', '9615', '0'), +('6', '12', '8', '2349', '3554', '0'), +('6', '12', '8', '1363', '2510', '0'), +('6', '12', '8', '2287', '1565', '0'), +('6', '12', '6', '2705', '5621', '0'), +('6', '12', '6', '1557', '5310', '0'), +('6', '12', '6', '1401', '2174', '0'), +('6', '12', '6', '2286', '1998', '0'), +('6', '12', '17', '2285', '9946', '0'), +('6', '12', '17', '3802', '2369', '0'), +('6', '12', '17', '4342', '1576', '0'), +('6', '12', '17', '2405', '796', '0'), +('6', '12', '7', '31809', '2983', '0'), +('6', '12', '7', '1362', '2624', '0'), +('6', '12', '7', '2289', '1910', '0'), +('6', '12', '7', '1321', '1746', '0'), +('6', '12', '9', '3804', '3255', '0'), +('6', '12', '9', '1541', '2422', '0'), +('6', '12', '9', '4344', '2051', '0'), +('6', '12', '9', '10408', '2002', '0'), +('6', '12', '15', '10150', '3004', '0'), +('6', '12', '15', '10163', '2300', '0'), +('6', '12', '15', '14651', '2224', '0'), +('6', '12', '15', '30360', '1600', '0'), +('6', '12', '20', '11684', '8696', '0'), +('6', '12', '20', '11666', '8312', '0'), +('6', '12', '20', '2742', '5103', '0'), +('6', '12', '20', '2288', '4478', '0'), +('6', '12', '12', '2291', '3830', '0'), +('6', '12', '12', '2923', '3074', '0'), +('6', '12', '12', '20655', '2899', '0'), +('6', '12', '12', '4345', '1097', '0'), +('6', '12', '18', '2292', '1421', '0'), +('6', '12', '18', '4410', '1142', '0'), +('6', '12', '18', '3806', '987', '0'), +('6', '12', '18', '2461', '772', '0'), +('6', '12', '19', '68239', '2358', '0'), +('6', '12', '19', '1368', '2016', '0'), +('6', '12', '19', '2293', '1670', '0'), +('6', '12', '19', '4407', '1365', '0'), +('6', '12', '13', '6411', '6470', '0'), +('6', '12', '13', '11683', '6312', '0'), +('6', '12', '13', '10333', '5300', '0'), +('6', '12', '13', '11563', '4871', '0'), +('6', '12', '14', '10333', '5300', '0'), +('6', '12', '14', '14555', '3894', '0'), +('6', '12', '14', '10334', '3503', '0'), +('6', '12', '14', '9690', '3500', '0'), +('6', '12', '11', '14762', '2204', '0'), +('6', '12', '11', '9246', '1462', '0'), +('6', '12', '11', '20677', '450', '0'), +('6', '12', '11', '16941', '290', '0'), +('6', '13', '22', '9246', '0', '0'), +('6', '13', '22', '10323', '0', '0'), +('6', '13', '22', '44492', '0', '0'), +('6', '13', '22', '13101', '0', '0'), +('6', '13', '1', '12801', '4762', '0'), +('6', '13', '1', '14702', '3750', '0'), +('6', '13', '1', '14701', '2862', '0'), +('6', '13', '1', '30361', '2640', '0'), +('6', '13', '2', '10143', '5368', '0'), +('6', '13', '2', '30363', '3700', '0'), +('6', '13', '2', '3000', '2534', '0'), +('6', '13', '2', '2294', '2354', '0'), +('6', '13', '3', '2706', '2829', '0'), +('6', '13', '3', '11052', '2356', '0'), +('6', '13', '3', '2295', '1332', '0'), +('6', '13', '3', '4505', '1129', '0'), +('6', '13', '5', '14703', '6050', '0'), +('6', '13', '5', '14700', '3318', '0'), +('6', '13', '5', '30362', '3140', '0'), +('6', '13', '5', '10055', '2780', '0'), +('6', '13', '8', '11603', '9724', '0'), +('6', '13', '8', '2349', '3554', '0'), +('6', '13', '8', '1363', '2510', '0'), +('6', '13', '8', '2287', '1568', '0'), +('6', '13', '6', '2705', '5669', '0'), +('6', '13', '6', '1557', '5310', '0'), +('6', '13', '6', '1401', '2174', '0'), +('6', '13', '6', '2286', '2000', '0'), +('6', '13', '17', '2285', '9995', '0'), +('6', '13', '17', '3802', '2528', '0'), +('6', '13', '17', '4342', '1697', '0'), +('6', '13', '17', '2405', '857', '0'), +('6', '13', '7', '31809', '3019', '0'), +('6', '13', '7', '1362', '2624', '0'), +('6', '13', '7', '2289', '1958', '0'), +('6', '13', '7', '1321', '1746', '0'), +('6', '13', '9', '3804', '3364', '0'), +('6', '13', '9', '1541', '2543', '0'), +('6', '13', '9', '4344', '2051', '0'), +('6', '13', '9', '10408', '2002', '0'), +('6', '13', '15', '10150', '3004', '0'), +('6', '13', '15', '10163', '2300', '0'), +('6', '13', '15', '14651', '2224', '0'), +('6', '13', '15', '30360', '1600', '0'), +('6', '13', '20', '11684', '8793', '0'), +('6', '13', '20', '11666', '8314', '0'), +('6', '13', '20', '2742', '5106', '0'), +('6', '13', '20', '2288', '4478', '0'), +('6', '13', '12', '2291', '3830', '0'), +('6', '13', '12', '2923', '3074', '0'), +('6', '13', '12', '20655', '2923', '0'), +('6', '13', '12', '4345', '1158', '0'), +('6', '13', '18', '2292', '1469', '0'), +('6', '13', '18', '4410', '1142', '0'), +('6', '13', '18', '3806', '1047', '0'), +('6', '13', '18', '2461', '820', '0'), +('6', '13', '19', '68239', '2395', '0'), +('6', '13', '19', '1368', '2016', '0'), +('6', '13', '19', '2293', '1706', '0'), +('6', '13', '19', '4407', '1474', '0'), +('6', '13', '13', '6411', '6578', '0'), +('6', '13', '13', '11683', '6421', '0'), +('6', '13', '13', '10333', '5300', '0'), +('6', '13', '13', '11563', '4944', '0'), +('6', '13', '14', '10333', '5300', '0'), +('6', '13', '14', '14555', '4136', '0'), +('6', '13', '14', '10334', '3503', '0'), +('6', '13', '14', '9690', '3500', '0'), +('6', '13', '11', '14762', '2204', '0'), +('6', '13', '11', '9246', '1582', '0'), +('6', '13', '11', '20677', '450', '0'), +('6', '13', '11', '16941', '314', '0'), +('6', '14', '22', '9246', '0', '0'), +('6', '14', '22', '10323', '0', '0'), +('6', '14', '22', '44492', '0', '0'), +('6', '14', '22', '13101', '0', '0'), +('6', '14', '1', '12801', '4762', '0'), +('6', '14', '1', '14702', '3750', '0'), +('6', '14', '1', '14701', '2862', '0'), +('6', '14', '1', '30361', '2640', '0'), +('6', '14', '2', '10143', '5368', '0'), +('6', '14', '2', '30363', '3700', '0'), +('6', '14', '2', '3000', '2534', '0'), +('6', '14', '2', '2294', '2378', '0'), +('6', '14', '3', '2706', '2950', '0'), +('6', '14', '3', '11052', '2537', '0'), +('6', '14', '3', '2295', '1356', '0'), +('6', '14', '3', '4505', '1214', '0'), +('6', '14', '5', '14703', '6050', '0'), +('6', '14', '5', '14700', '3318', '0'), +('6', '14', '5', '30362', '3140', '0'), +('6', '14', '5', '10055', '2780', '0'), +('6', '14', '8', '11603', '9832', '0'), +('6', '14', '8', '2349', '3554', '0'), +('6', '14', '8', '1363', '2510', '0'), +('6', '14', '8', '2287', '1570', '0'), +('6', '14', '6', '2705', '5718', '0'), +('6', '14', '6', '1557', '5310', '0'), +('6', '14', '6', '1401', '2174', '0'), +('6', '14', '6', '2286', '2001', '0'), +('6', '14', '17', '2285', '10043', '0'), +('6', '14', '17', '3802', '2688', '0'), +('6', '14', '17', '4342', '1818', '0'), +('6', '14', '17', '2405', '919', '0'), +('6', '14', '7', '31809', '3056', '0'), +('6', '14', '7', '1362', '2624', '0'), +('6', '14', '7', '2289', '2007', '0'), +('6', '14', '7', '1321', '1746', '0'), +('6', '14', '9', '3804', '3472', '0'), +('6', '14', '9', '1541', '2664', '0'), +('6', '14', '9', '4344', '2051', '0'), +('6', '14', '9', '10408', '2002', '0'), +('6', '14', '15', '10150', '3004', '0'), +('6', '14', '15', '10163', '2300', '0'), +('6', '14', '15', '14651', '2224', '0'), +('6', '14', '15', '30360', '1600', '0'), +('6', '14', '20', '11684', '8889', '0'), +('6', '14', '20', '11666', '8316', '0'), +('6', '14', '20', '2742', '5109', '0'), +('6', '14', '20', '2288', '4478', '0'), +('6', '14', '12', '2291', '3830', '0'), +('6', '14', '12', '2923', '3074', '0'), +('6', '14', '12', '20655', '2948', '0'), +('6', '14', '12', '4345', '1218', '0'), +('6', '14', '18', '2292', '1518', '0'), +('6', '14', '18', '4410', '1142', '0'), +('6', '14', '18', '3806', '1108', '0'), +('6', '14', '18', '2461', '869', '0'), +('6', '14', '19', '68239', '2431', '0'), +('6', '14', '19', '1368', '2016', '0'), +('6', '14', '19', '2293', '1742', '0'), +('6', '14', '19', '4407', '1582', '0'), +('6', '14', '13', '6411', '6687', '0'), +('6', '14', '13', '11683', '6529', '0'), +('6', '14', '13', '10333', '5300', '0'), +('6', '14', '13', '11563', '5016', '0'), +('6', '14', '14', '10333', '5300', '0'), +('6', '14', '14', '14555', '4378', '0'), +('6', '14', '14', '10334', '3503', '0'), +('6', '14', '14', '9690', '3500', '0'), +('6', '14', '11', '14762', '2204', '0'), +('6', '14', '11', '9246', '1703', '0'), +('6', '14', '11', '20677', '450', '0'), +('6', '14', '11', '16941', '338', '0'), +('6', '15', '22', '9246', '0', '0'), +('6', '15', '22', '10323', '0', '0'), +('6', '15', '22', '44492', '0', '0'), +('6', '15', '22', '13101', '0', '0'), +('6', '15', '1', '12801', '4762', '0'), +('6', '15', '1', '14702', '3750', '0'), +('6', '15', '1', '14701', '2862', '0'), +('6', '15', '1', '30361', '2640', '0'), +('6', '15', '2', '10143', '5368', '0'), +('6', '15', '2', '30363', '3700', '0'), +('6', '15', '2', '3000', '2534', '0'), +('6', '15', '2', '2294', '2402', '0'), +('6', '15', '3', '2706', '3070', '0'), +('6', '15', '3', '11052', '2718', '0'), +('6', '15', '3', '2295', '1381', '0'), +('6', '15', '3', '4505', '1299', '0'), +('6', '15', '5', '14703', '6050', '0'), +('6', '15', '5', '14700', '3318', '0'), +('6', '15', '5', '30362', '3140', '0'), +('6', '15', '5', '10055', '2780', '0'), +('6', '15', '8', '11603', '9941', '0'), +('6', '15', '8', '2349', '3554', '0'), +('6', '15', '8', '1363', '2510', '0'), +('6', '15', '8', '2287', '1572', '0'), +('6', '15', '6', '2705', '5766', '0'), +('6', '15', '6', '1557', '5310', '0'), +('6', '15', '6', '1401', '2174', '0'), +('6', '15', '6', '2286', '2003', '0'), +('6', '15', '17', '2285', '10091', '0'), +('6', '15', '17', '3802', '2848', '0'), +('6', '15', '17', '4342', '1939', '0'), +('6', '15', '17', '2405', '980', '0'), +('6', '15', '7', '31809', '3092', '0'), +('6', '15', '7', '1362', '2624', '0'), +('6', '15', '7', '2289', '2055', '0'), +('6', '15', '7', '1321', '1746', '0'), +('6', '15', '9', '3804', '3581', '0'), +('6', '15', '9', '1541', '2784', '0'), +('6', '15', '9', '4344', '2051', '0'), +('6', '15', '9', '10408', '2002', '0'), +('6', '15', '15', '10150', '3004', '0'), +('6', '15', '15', '10163', '2300', '0'), +('6', '15', '15', '14651', '2224', '0'), +('6', '15', '15', '30360', '1600', '0'), +('6', '15', '20', '11684', '8986', '0'), +('6', '15', '20', '11666', '8319', '0'), +('6', '15', '20', '2742', '5112', '0'), +('6', '15', '20', '2288', '4478', '0'), +('6', '15', '12', '2291', '3830', '0'), +('6', '15', '12', '2923', '3074', '0'), +('6', '15', '12', '20655', '2973', '0'), +('6', '15', '12', '4345', '1278', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '15', '18', '2292', '1566', '0'), +('6', '15', '18', '3806', '1168', '0'), +('6', '15', '18', '4410', '1142', '0'), +('6', '15', '18', '2461', '917', '0'), +('6', '15', '19', '68239', '2467', '0'), +('6', '15', '19', '1368', '2016', '0'), +('6', '15', '19', '2293', '1779', '0'), +('6', '15', '19', '4407', '1691', '0'), +('6', '15', '13', '6411', '6796', '0'), +('6', '15', '13', '11683', '6638', '0'), +('6', '15', '13', '10333', '5300', '0'), +('6', '15', '13', '11563', '5089', '0'), +('6', '15', '14', '10333', '5300', '0'), +('6', '15', '14', '14555', '4619', '0'), +('6', '15', '14', '10334', '3503', '0'), +('6', '15', '14', '9690', '3500', '0'), +('6', '15', '11', '14762', '2204', '0'), +('6', '15', '11', '9246', '1824', '0'), +('6', '15', '11', '20677', '450', '0'), +('6', '15', '11', '16941', '362', '0'), +('6', '16', '22', '9246', '0', '0'), +('6', '16', '22', '10323', '0', '0'), +('6', '16', '22', '44492', '0', '0'), +('6', '16', '22', '13101', '0', '0'), +('6', '16', '1', '12801', '4762', '0'), +('6', '16', '1', '14702', '3750', '0'), +('6', '16', '1', '14701', '2862', '0'), +('6', '16', '1', '30361', '2640', '0'), +('6', '16', '2', '10143', '5368', '0'), +('6', '16', '2', '30363', '3700', '0'), +('6', '16', '2', '3000', '2534', '0'), +('6', '16', '2', '2294', '2426', '0'), +('6', '16', '3', '2706', '3191', '0'), +('6', '16', '3', '11052', '2899', '0'), +('6', '16', '3', '2295', '1405', '0'), +('6', '16', '3', '4505', '1383', '0'), +('6', '16', '5', '14703', '6050', '0'), +('6', '16', '5', '14700', '3318', '0'), +('6', '16', '5', '30362', '3140', '0'), +('6', '16', '5', '10055', '2780', '0'), +('6', '16', '8', '11603', '10050', '0'), +('6', '16', '8', '2349', '3554', '0'), +('6', '16', '8', '1363', '2510', '0'), +('6', '16', '8', '2287', '1575', '0'), +('6', '16', '6', '2705', '5814', '0'), +('6', '16', '6', '1557', '5310', '0'), +('6', '16', '6', '1401', '2174', '0'), +('6', '16', '6', '2286', '2004', '0'), +('6', '16', '17', '2285', '10140', '0'), +('6', '16', '17', '3802', '3008', '0'), +('6', '16', '17', '4342', '2060', '0'), +('6', '16', '17', '2405', '1041', '0'), +('6', '16', '7', '31809', '3128', '0'), +('6', '16', '7', '1362', '2624', '0'), +('6', '16', '7', '2289', '2103', '0'), +('6', '16', '7', '1321', '1746', '0'), +('6', '16', '9', '3804', '3690', '0'), +('6', '16', '9', '1541', '2905', '0'), +('6', '16', '9', '4344', '2051', '0'), +('6', '16', '9', '10408', '2002', '0'), +('6', '16', '15', '10150', '3004', '0'), +('6', '16', '15', '10163', '2300', '0'), +('6', '16', '15', '14651', '2224', '0'), +('6', '16', '15', '30360', '1600', '0'), +('6', '16', '20', '11684', '9082', '0'), +('6', '16', '20', '11666', '8321', '0'), +('6', '16', '20', '2742', '5115', '0'), +('6', '16', '20', '2288', '4478', '0'), +('6', '16', '12', '2291', '3830', '0'), +('6', '16', '12', '2923', '3074', '0'), +('6', '16', '12', '20655', '2998', '0'), +('6', '16', '12', '4345', '1339', '0'), +('6', '16', '18', '2292', '1614', '0'), +('6', '16', '18', '3806', '1228', '0'), +('6', '16', '18', '4410', '1142', '0'), +('6', '16', '18', '2461', '965', '0'), +('6', '16', '19', '68239', '2503', '0'), +('6', '16', '19', '1368', '2016', '0'), +('6', '16', '19', '2293', '1815', '0'), +('6', '16', '19', '4407', '1800', '0'), +('6', '16', '13', '6411', '6904', '0'), +('6', '16', '13', '11683', '6747', '0'), +('6', '16', '13', '10333', '5300', '0'), +('6', '16', '13', '11563', '5161', '0'), +('6', '16', '14', '10333', '5300', '0'), +('6', '16', '14', '14555', '4861', '0'), +('6', '16', '14', '10334', '3503', '0'), +('6', '16', '14', '9690', '3500', '0'), +('6', '16', '11', '14762', '2204', '0'), +('6', '16', '11', '9246', '1945', '0'), +('6', '16', '11', '20677', '450', '0'), +('6', '16', '11', '16941', '387', '0'), +('6', '17', '22', '9246', '0', '0'), +('6', '17', '22', '10323', '0', '0'), +('6', '17', '22', '44492', '0', '0'), +('6', '17', '22', '13101', '0', '0'), +('6', '17', '1', '12801', '4762', '0'), +('6', '17', '1', '14702', '3750', '0'), +('6', '17', '1', '14701', '2862', '0'), +('6', '17', '1', '30361', '2640', '0'), +('6', '17', '2', '10143', '5368', '0'), +('6', '17', '2', '30363', '3700', '0'), +('6', '17', '2', '3000', '2534', '0'), +('6', '17', '2', '2294', '2451', '0'), +('6', '17', '3', '2706', '3312', '0'), +('6', '17', '3', '11052', '3080', '0'), +('6', '17', '3', '4505', '1468', '0'), +('6', '17', '3', '14695', '1446', '0'), +('6', '17', '5', '14703', '6050', '0'), +('6', '17', '5', '14700', '3318', '0'), +('6', '17', '5', '30362', '3140', '0'), +('6', '17', '5', '10055', '2780', '0'), +('6', '17', '8', '11603', '10159', '0'), +('6', '17', '8', '2349', '3554', '0'), +('6', '17', '8', '1363', '2510', '0'), +('6', '17', '8', '2287', '1577', '0'), +('6', '17', '6', '2705', '5863', '0'), +('6', '17', '6', '1557', '5310', '0'), +('6', '17', '6', '1401', '2174', '0'), +('6', '17', '6', '2286', '2006', '0'), +('6', '17', '17', '2285', '10188', '0'), +('6', '17', '17', '3802', '3167', '0'), +('6', '17', '17', '4342', '2180', '0'), +('6', '17', '17', '2405', '1103', '0'), +('6', '17', '7', '31809', '3164', '0'), +('6', '17', '7', '1362', '2624', '0'), +('6', '17', '7', '2289', '2152', '0'), +('6', '17', '7', '1321', '1746', '0'), +('6', '17', '9', '3804', '3798', '0'), +('6', '17', '9', '1541', '3026', '0'), +('6', '17', '9', '4344', '2051', '0'), +('6', '17', '9', '10408', '2002', '0'), +('6', '17', '15', '10150', '3004', '0'), +('6', '17', '15', '10163', '2300', '0'), +('6', '17', '15', '14651', '2224', '0'), +('6', '17', '15', '30360', '1600', '0'), +('6', '17', '20', '11684', '9179', '0'), +('6', '17', '20', '11666', '8323', '0'), +('6', '17', '20', '2742', '5118', '0'), +('6', '17', '20', '2288', '4478', '0'), +('6', '17', '12', '2291', '3830', '0'), +('6', '17', '12', '2923', '3074', '0'), +('6', '17', '12', '20655', '3022', '0'), +('6', '17', '12', '4345', '1399', '0'), +('6', '17', '18', '2292', '1663', '0'), +('6', '17', '18', '3806', '1289', '0'), +('6', '17', '18', '4410', '1142', '0'), +('6', '17', '18', '2461', '1014', '0'), +('6', '17', '19', '68239', '2540', '0'), +('6', '17', '19', '1368', '2016', '0'), +('6', '17', '19', '4407', '1908', '0'), +('6', '17', '19', '2293', '1851', '0'), +('6', '17', '13', '6411', '7013', '0'), +('6', '17', '13', '11683', '6855', '0'), +('6', '17', '13', '10333', '5300', '0'), +('6', '17', '13', '11563', '5234', '0'), +('6', '17', '14', '10333', '5300', '0'), +('6', '17', '14', '14555', '5102', '0'), +('6', '17', '14', '10335', '3686', '0'), +('6', '17', '14', '10334', '3503', '0'), +('6', '17', '11', '14762', '2204', '0'), +('6', '17', '11', '9246', '2066', '0'), +('6', '17', '11', '20677', '450', '0'), +('6', '17', '11', '16941', '411', '0'), +('6', '18', '22', '9246', '0', '0'), +('6', '18', '22', '10323', '0', '0'), +('6', '18', '22', '44492', '0', '0'), +('6', '18', '22', '13101', '0', '0'), +('6', '18', '1', '12801', '4762', '0'), +('6', '18', '1', '14702', '3750', '0'), +('6', '18', '1', '14701', '2862', '0'), +('6', '18', '1', '30361', '2640', '0'), +('6', '18', '2', '10143', '5368', '0'), +('6', '18', '2', '30363', '3700', '0'), +('6', '18', '2', '3000', '2534', '0'), +('6', '18', '2', '2294', '2475', '0'), +('6', '18', '3', '2706', '3433', '0'), +('6', '18', '3', '11052', '3262', '0'), +('6', '18', '3', '4505', '1552', '0'), +('6', '18', '3', '14695', '1531', '0'), +('6', '18', '5', '14703', '6050', '0'), +('6', '18', '5', '14700', '3318', '0'), +('6', '18', '5', '30362', '3140', '0'), +('6', '18', '5', '10055', '2780', '0'), +('6', '18', '8', '11603', '10267', '0'), +('6', '18', '8', '2349', '3554', '0'), +('6', '18', '8', '1363', '2510', '0'), +('6', '18', '8', '2287', '1580', '0'), +('6', '18', '6', '2705', '5911', '0'), +('6', '18', '6', '1557', '5310', '0'), +('6', '18', '6', '1401', '2174', '0'), +('6', '18', '6', '2286', '2007', '0'), +('6', '18', '17', '2285', '10236', '0'), +('6', '18', '17', '3802', '3327', '0'), +('6', '18', '17', '4342', '2301', '0'), +('6', '18', '17', '2405', '1164', '0'), +('6', '18', '7', '31809', '3201', '0'), +('6', '18', '7', '1362', '2624', '0'), +('6', '18', '7', '2289', '2200', '0'), +('6', '18', '7', '1321', '1746', '0'), +('6', '18', '9', '3804', '3907', '0'), +('6', '18', '9', '1541', '3147', '0'), +('6', '18', '9', '4344', '2051', '0'), +('6', '18', '9', '10408', '2002', '0'), +('6', '18', '15', '10150', '3004', '0'), +('6', '18', '15', '10163', '2300', '0'), +('6', '18', '15', '14651', '2224', '0'), +('6', '18', '15', '30360', '1600', '0'), +('6', '18', '20', '11684', '9276', '0'), +('6', '18', '20', '11666', '8325', '0'), +('6', '18', '20', '2742', '5121', '0'), +('6', '18', '20', '2288', '4478', '0'), +('6', '18', '12', '2291', '3830', '0'), +('6', '18', '12', '2923', '3074', '0'), +('6', '18', '12', '20655', '3047', '0'), +('6', '18', '12', '4345', '1460', '0'), +('6', '18', '18', '2292', '1711', '0'), +('6', '18', '18', '3806', '1349', '0'), +('6', '18', '18', '4410', '1142', '0'), +('6', '18', '18', '2461', '1062', '0'), +('6', '18', '19', '68239', '2576', '0'), +('6', '18', '19', '4407', '2017', '0'), +('6', '18', '19', '1368', '2016', '0'), +('6', '18', '19', '2293', '1887', '0'), +('6', '18', '13', '6411', '7122', '0'), +('6', '18', '13', '11683', '6964', '0'), +('6', '18', '13', '14555', '5344', '0'), +('6', '18', '13', '11563', '5306', '0'), +('6', '18', '14', '14555', '5344', '0'), +('6', '18', '14', '10333', '5300', '0'), +('6', '18', '14', '10335', '3903', '0'), +('6', '18', '14', '10334', '3503', '0'), +('6', '18', '11', '14762', '2204', '0'), +('6', '18', '11', '9246', '2186', '0'), +('6', '18', '11', '20677', '450', '0'), +('6', '18', '11', '16941', '435', '0'), +('6', '19', '22', '9246', '0', '0'), +('6', '19', '22', '10323', '0', '0'), +('6', '19', '22', '44492', '0', '0'), +('6', '19', '22', '13101', '0', '0'), +('6', '19', '1', '12801', '4762', '0'), +('6', '19', '1', '14702', '3750', '0'), +('6', '19', '1', '14701', '2862', '0'), +('6', '19', '1', '30361', '2640', '0'), +('6', '19', '2', '10143', '5368', '0'), +('6', '19', '2', '30363', '3700', '0'), +('6', '19', '2', '3000', '2534', '0'), +('6', '19', '2', '2294', '2499', '0'), +('6', '19', '3', '2706', '3554', '0'), +('6', '19', '3', '11052', '3443', '0'), +('6', '19', '3', '4505', '1637', '0'), +('6', '19', '3', '14695', '1615', '0'), +('6', '19', '5', '14703', '6050', '0'), +('6', '19', '5', '14700', '3318', '0'), +('6', '19', '5', '30362', '3140', '0'), +('6', '19', '5', '10055', '2780', '0'), +('6', '19', '8', '11603', '10376', '0'), +('6', '19', '8', '2349', '3554', '0'), +('6', '19', '8', '1363', '2510', '0'), +('6', '19', '8', '2287', '1582', '0'), +('6', '19', '6', '2705', '5959', '0'), +('6', '19', '6', '1557', '5310', '0'), +('6', '19', '6', '1401', '2174', '0'), +('6', '19', '6', '2286', '2009', '0'), +('6', '19', '17', '2285', '10285', '0'), +('6', '19', '17', '3802', '3487', '0'), +('6', '19', '17', '4342', '2422', '0'), +('6', '19', '17', '2405', '1225', '0'), +('6', '19', '7', '31809', '3237', '0'), +('6', '19', '7', '1362', '2624', '0'), +('6', '19', '7', '2289', '2248', '0'), +('6', '19', '7', '1321', '1746', '0'), +('6', '19', '9', '3804', '4016', '0'), +('6', '19', '9', '1541', '3268', '0'), +('6', '19', '9', '4344', '2051', '0'), +('6', '19', '9', '10408', '2002', '0'), +('6', '19', '15', '10150', '3004', '0'), +('6', '19', '15', '10163', '2300', '0'), +('6', '19', '15', '14651', '2224', '0'), +('6', '19', '15', '30360', '1600', '0'), +('6', '19', '20', '11684', '9372', '0'), +('6', '19', '20', '11666', '8327', '0'), +('6', '19', '20', '2742', '5124', '0'), +('6', '19', '20', '2288', '4478', '0'), +('6', '19', '12', '2291', '3830', '0'), +('6', '19', '12', '2923', '3074', '0'), +('6', '19', '12', '20655', '3072', '0'), +('6', '19', '12', '4345', '1520', '0'), +('6', '19', '18', '2292', '1759', '0'), +('6', '19', '18', '3806', '1410', '0'), +('6', '19', '18', '4410', '1142', '0'), +('6', '19', '18', '2461', '1110', '0'), +('6', '19', '19', '68239', '2612', '0'), +('6', '19', '19', '4407', '2126', '0'), +('6', '19', '19', '1368', '2016', '0'), +('6', '19', '19', '2293', '1924', '0'), +('6', '19', '13', '6411', '7231', '0'), +('6', '19', '13', '11683', '7073', '0'), +('6', '19', '13', '14555', '5586', '0'), +('6', '19', '13', '11563', '5379', '0'), +('6', '19', '14', '14555', '5586', '0'), +('6', '19', '14', '10333', '5300', '0'), +('6', '19', '14', '10335', '4120', '0'), +('6', '19', '14', '10334', '3503', '0'), +('6', '19', '11', '9246', '2307', '0'), +('6', '19', '11', '14762', '2204', '0'), +('6', '19', '11', '16941', '459', '0'), +('6', '19', '11', '20677', '450', '0'), +('6', '20', '22', '9246', '0', '0'), +('6', '20', '22', '10323', '0', '0'), +('6', '20', '22', '44492', '0', '0'), +('6', '20', '22', '13101', '0', '0'), +('6', '20', '1', '12801', '4762', '0'), +('6', '20', '1', '14702', '3750', '0'), +('6', '20', '1', '14701', '2862', '0'), +('6', '20', '1', '30361', '2640', '0'), +('6', '20', '2', '10143', '5368', '0'), +('6', '20', '2', '30363', '3700', '0'), +('6', '20', '2', '3000', '2534', '0'), +('6', '20', '2', '2294', '2523', '0'), +('6', '20', '3', '2706', '3674', '0'), +('6', '20', '3', '11052', '3624', '0'), +('6', '20', '3', '4505', '1721', '0'), +('6', '20', '3', '14695', '1700', '0'), +('6', '20', '5', '14703', '6050', '0'), +('6', '20', '5', '14700', '3318', '0'), +('6', '20', '5', '30362', '3140', '0'), +('6', '20', '5', '10055', '2780', '0'), +('6', '20', '8', '11603', '10485', '0'), +('6', '20', '8', '2349', '3554', '0'), +('6', '20', '8', '1363', '2510', '0'), +('6', '20', '8', '2287', '1585', '0'), +('6', '20', '6', '2705', '6007', '0'), +('6', '20', '6', '1557', '5310', '0'), +('6', '20', '6', '1401', '2174', '0'), +('6', '20', '6', '2286', '2010', '0'), +('6', '20', '17', '2285', '10333', '0'), +('6', '20', '17', '3802', '3647', '0'), +('6', '20', '17', '4342', '2543', '0'), +('6', '20', '17', '2405', '1287', '0'), +('6', '20', '7', '31809', '3273', '0'), +('6', '20', '7', '1362', '2624', '0'), +('6', '20', '7', '2289', '2297', '0'), +('6', '20', '7', '1321', '1746', '0'), +('6', '20', '9', '3804', '4125', '0'), +('6', '20', '9', '1541', '3388', '0'), +('6', '20', '9', '4344', '2051', '0'), +('6', '20', '9', '10408', '2002', '0'), +('6', '20', '15', '10150', '3004', '0'), +('6', '20', '15', '10163', '2300', '0'), +('6', '20', '15', '14651', '2224', '0'), +('6', '20', '15', '30360', '1600', '0'), +('6', '20', '20', '11684', '9469', '0'), +('6', '20', '20', '11666', '8329', '0'), +('6', '20', '20', '2742', '5127', '0'), +('6', '20', '20', '2288', '4478', '0'), +('6', '20', '12', '2291', '3830', '0'), +('6', '20', '12', '20655', '3097', '0'), +('6', '20', '12', '2923', '3074', '0'), +('6', '20', '12', '4345', '1580', '0'), +('6', '20', '18', '2292', '1807', '0'), +('6', '20', '18', '3806', '1470', '0'), +('6', '20', '18', '2461', '1159', '0'), +('6', '20', '18', '4410', '1142', '0'), +('6', '20', '19', '68239', '2648', '0'), +('6', '20', '19', '4407', '2235', '0'), +('6', '20', '19', '1368', '2016', '0'), +('6', '20', '19', '2293', '1960', '0'), +('6', '20', '13', '6411', '7339', '0'), +('6', '20', '13', '11683', '7182', '0'), +('6', '20', '13', '14555', '5827', '0'), +('6', '20', '13', '11563', '5451', '0'), +('6', '20', '14', '14555', '5827', '0'), +('6', '20', '14', '10333', '5300', '0'), +('6', '20', '14', '10335', '4338', '0'), +('6', '20', '14', '10334', '3503', '0'), +('6', '20', '11', '9246', '2428', '0'), +('6', '20', '11', '14762', '2204', '0'), +('6', '20', '11', '16941', '483', '0'), +('6', '20', '11', '20677', '450', '0'), +('6', '21', '22', '9246', '0', '0'), +('6', '21', '22', '10323', '0', '0'), +('6', '21', '22', '44492', '0', '0'), +('6', '21', '22', '13101', '0', '0'), +('6', '21', '1', '12801', '4762', '0'), +('6', '21', '1', '14702', '3750', '0'), +('6', '21', '1', '14701', '2862', '0'), +('6', '21', '1', '30361', '2640', '0'), +('6', '21', '2', '10143', '5368', '0'), +('6', '21', '2', '30363', '3700', '0'), +('6', '21', '2', '2294', '2547', '0'), +('6', '21', '2', '3000', '2534', '0'), +('6', '21', '3', '11052', '3805', '0'), +('6', '21', '3', '2706', '3795', '0'), +('6', '21', '3', '4505', '1806', '0'), +('6', '21', '3', '14695', '1784', '0'), +('6', '21', '5', '14703', '6050', '0'), +('6', '21', '5', '14700', '3318', '0'), +('6', '21', '5', '30362', '3140', '0'), +('6', '21', '5', '10146', '2791', '0'), +('6', '21', '8', '11603', '10594', '0'), +('6', '21', '8', '2349', '3554', '0'), +('6', '21', '8', '1363', '2510', '0'), +('6', '21', '8', '2287', '1587', '0'), +('6', '21', '6', '2705', '6056', '0'), +('6', '21', '6', '1557', '5310', '0'), +('6', '21', '6', '1401', '2174', '0'), +('6', '21', '6', '1904', '2060', '0'), +('6', '21', '17', '2285', '10381', '0'), +('6', '21', '17', '3802', '3806', '0'), +('6', '21', '17', '4342', '2664', '0'), +('6', '21', '17', '2405', '1348', '0'), +('6', '21', '7', '31809', '3309', '0'), +('6', '21', '7', '1362', '2624', '0'), +('6', '21', '7', '2289', '2345', '0'), +('6', '21', '7', '1321', '1746', '0'), +('6', '21', '9', '3804', '4233', '0'), +('6', '21', '9', '1541', '3509', '0'), +('6', '21', '9', '4344', '2051', '0'), +('6', '21', '9', '10408', '2002', '0'), +('6', '21', '15', '10150', '3004', '0'), +('6', '21', '15', '10163', '2300', '0'), +('6', '21', '15', '14651', '2224', '0'), +('6', '21', '15', '30360', '1600', '0'), +('6', '21', '20', '11684', '9566', '0'), +('6', '21', '20', '11666', '8331', '0'), +('6', '21', '20', '2742', '5130', '0'), +('6', '21', '20', '2288', '4478', '0'), +('6', '21', '12', '2291', '3830', '0'), +('6', '21', '12', '20655', '3122', '0'), +('6', '21', '12', '2923', '3074', '0'), +('6', '21', '12', '4345', '1641', '0'), +('6', '21', '18', '2292', '1856', '0'), +('6', '21', '18', '3806', '1530', '0'), +('6', '21', '18', '2461', '1207', '0'), +('6', '21', '18', '4410', '1142', '0'), +('6', '21', '19', '68239', '2684', '0'), +('6', '21', '19', '4407', '2343', '0'), +('6', '21', '19', '1368', '2016', '0'), +('6', '21', '19', '2293', '1996', '0'), +('6', '21', '13', '6411', '7448', '0'), +('6', '21', '13', '11683', '7290', '0'), +('6', '21', '13', '14555', '6069', '0'), +('6', '21', '13', '11563', '5524', '0'), +('6', '21', '14', '14555', '6069', '0'), +('6', '21', '14', '10333', '5300', '0'), +('6', '21', '14', '10335', '4555', '0'), +('6', '21', '14', '13991', '3537', '0'), +('6', '21', '11', '9246', '2549', '0'), +('6', '21', '11', '14762', '2204', '0'), +('6', '21', '11', '16941', '507', '0'), +('6', '21', '11', '20677', '450', '0'), +('6', '22', '22', '9246', '0', '0'), +('6', '22', '22', '10323', '0', '0'), +('6', '22', '22', '44492', '0', '0'), +('6', '22', '22', '13101', '0', '0'), +('6', '22', '1', '12801', '4762', '0'), +('6', '22', '1', '14702', '3750', '0'), +('6', '22', '1', '14701', '2862', '0'), +('6', '22', '1', '30361', '2640', '0'), +('6', '22', '2', '10143', '5368', '0'), +('6', '22', '2', '30363', '3700', '0'), +('6', '22', '2', '2294', '2571', '0'), +('6', '22', '2', '3000', '2534', '0'), +('6', '22', '3', '11052', '3986', '0'), +('6', '22', '3', '2706', '3916', '0'), +('6', '22', '3', '4505', '1891', '0'), +('6', '22', '3', '14695', '1869', '0'), +('6', '22', '5', '14703', '6050', '0'), +('6', '22', '5', '14700', '3318', '0'), +('6', '22', '5', '30362', '3140', '0'), +('6', '22', '5', '10146', '2827', '0'), +('6', '22', '8', '11603', '10702', '0'), +('6', '22', '8', '2349', '3554', '0'), +('6', '22', '8', '1363', '2510', '0'), +('6', '22', '8', '2287', '1589', '0'), +('6', '22', '6', '2705', '6104', '0'), +('6', '22', '6', '1557', '5310', '0'), +('6', '22', '6', '1401', '2174', '0'), +('6', '22', '6', '1904', '2156', '0'), +('6', '22', '17', '2285', '10429', '0'), +('6', '22', '17', '3802', '3966', '0'), +('6', '22', '17', '4342', '2784', '0'), +('6', '22', '17', '2405', '1409', '0'), +('6', '22', '7', '31809', '3346', '0'), +('6', '22', '7', '1362', '2624', '0'), +('6', '22', '7', '2289', '2393', '0'), +('6', '22', '7', '1321', '1746', '0'), +('6', '22', '9', '3804', '4342', '0'), +('6', '22', '9', '1541', '3630', '0'), +('6', '22', '9', '4344', '2051', '0'), +('6', '22', '9', '10408', '2002', '0'), +('6', '22', '15', '10150', '3004', '0'), +('6', '22', '15', '10163', '2300', '0'), +('6', '22', '15', '14651', '2224', '0'), +('6', '22', '15', '30360', '1600', '0'), +('6', '22', '20', '11684', '9662', '0'), +('6', '22', '20', '11666', '8333', '0'), +('6', '22', '20', '2742', '5133', '0'), +('6', '22', '20', '2288', '4478', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '22', '12', '2291', '3830', '0'), +('6', '22', '12', '20655', '3146', '0'), +('6', '22', '12', '2923', '3074', '0'), +('6', '22', '12', '4345', '1701', '0'), +('6', '22', '18', '2292', '1904', '0'), +('6', '22', '18', '3806', '1591', '0'), +('6', '22', '18', '2461', '1255', '0'), +('6', '22', '18', '4410', '1142', '0'), +('6', '22', '19', '68239', '2721', '0'), +('6', '22', '19', '4407', '2452', '0'), +('6', '22', '19', '2293', '2032', '0'), +('6', '22', '19', '1368', '2016', '0'), +('6', '22', '13', '6411', '7557', '0'), +('6', '22', '13', '11683', '7399', '0'), +('6', '22', '13', '14555', '6310', '0'), +('6', '22', '13', '11563', '5596', '0'), +('6', '22', '14', '14555', '6310', '0'), +('6', '22', '14', '10333', '5300', '0'), +('6', '22', '14', '10335', '4773', '0'), +('6', '22', '14', '13991', '3658', '0'), +('6', '22', '11', '9246', '2670', '0'), +('6', '22', '11', '14762', '2204', '0'), +('6', '22', '11', '16941', '532', '0'), +('6', '22', '11', '20677', '450', '0'), +('6', '23', '22', '9246', '0', '0'), +('6', '23', '22', '10323', '0', '0'), +('6', '23', '22', '44492', '0', '0'), +('6', '23', '22', '13101', '0', '0'), +('6', '23', '1', '12801', '4762', '0'), +('6', '23', '1', '14702', '3750', '0'), +('6', '23', '1', '14701', '2862', '0'), +('6', '23', '1', '30361', '2640', '0'), +('6', '23', '2', '10143', '5368', '0'), +('6', '23', '2', '30363', '3700', '0'), +('6', '23', '2', '2294', '2596', '0'), +('6', '23', '2', '3000', '2534', '0'), +('6', '23', '3', '11052', '4168', '0'), +('6', '23', '3', '2706', '4037', '0'), +('6', '23', '3', '4505', '1975', '0'), +('6', '23', '3', '14695', '1953', '0'), +('6', '23', '5', '14703', '6050', '0'), +('6', '23', '5', '14700', '3318', '0'), +('6', '23', '5', '30362', '3140', '0'), +('6', '23', '5', '10146', '2864', '0'), +('6', '23', '8', '11603', '10811', '0'), +('6', '23', '8', '2349', '3554', '0'), +('6', '23', '8', '1363', '2510', '0'), +('6', '23', '8', '2287', '1592', '0'), +('6', '23', '6', '2705', '6152', '0'), +('6', '23', '6', '1557', '5310', '0'), +('6', '23', '6', '1904', '2253', '0'), +('6', '23', '6', '1401', '2174', '0'), +('6', '23', '17', '2285', '10478', '0'), +('6', '23', '17', '3802', '4126', '0'), +('6', '23', '17', '4342', '2905', '0'), +('6', '23', '17', '2405', '1470', '0'), +('6', '23', '7', '31809', '3382', '0'), +('6', '23', '7', '1362', '2624', '0'), +('6', '23', '7', '2289', '2442', '0'), +('6', '23', '7', '1321', '1746', '0'), +('6', '23', '9', '3804', '4451', '0'), +('6', '23', '9', '1541', '3751', '0'), +('6', '23', '9', '4344', '2051', '0'), +('6', '23', '9', '10408', '2002', '0'), +('6', '23', '15', '10150', '3004', '0'), +('6', '23', '15', '10163', '2300', '0'), +('6', '23', '15', '14651', '2224', '0'), +('6', '23', '15', '14631', '1667', '0'), +('6', '23', '20', '11684', '9759', '0'), +('6', '23', '20', '11666', '8335', '0'), +('6', '23', '20', '2742', '5136', '0'), +('6', '23', '20', '2288', '4478', '0'), +('6', '23', '12', '2291', '3830', '0'), +('6', '23', '12', '20655', '3171', '0'), +('6', '23', '12', '2923', '3074', '0'), +('6', '23', '12', '4345', '1762', '0'), +('6', '23', '18', '2292', '1952', '0'), +('6', '23', '18', '3806', '1651', '0'), +('6', '23', '18', '2461', '1304', '0'), +('6', '23', '18', '4410', '1142', '0'), +('6', '23', '19', '68239', '2757', '0'), +('6', '23', '19', '4407', '2561', '0'), +('6', '23', '19', '2293', '2069', '0'), +('6', '23', '19', '1368', '2016', '0'), +('6', '23', '13', '6411', '7665', '0'), +('6', '23', '13', '11683', '7508', '0'), +('6', '23', '13', '14555', '6552', '0'), +('6', '23', '13', '11563', '5669', '0'), +('6', '23', '14', '14555', '6552', '0'), +('6', '23', '14', '10333', '5300', '0'), +('6', '23', '14', '10335', '4990', '0'), +('6', '23', '14', '13991', '3778', '0'), +('6', '23', '11', '9246', '2790', '0'), +('6', '23', '11', '14762', '2204', '0'), +('6', '23', '11', '16941', '556', '0'), +('6', '23', '11', '20677', '450', '0'), +('6', '24', '22', '9246', '0', '0'), +('6', '24', '22', '10323', '0', '0'), +('6', '24', '22', '44492', '0', '0'), +('6', '24', '22', '13101', '0', '0'), +('6', '24', '1', '12801', '4762', '0'), +('6', '24', '1', '14702', '3750', '0'), +('6', '24', '1', '14701', '2862', '0'), +('6', '24', '1', '30361', '2640', '0'), +('6', '24', '2', '10143', '5368', '0'), +('6', '24', '2', '30363', '3700', '0'), +('6', '24', '2', '2294', '2620', '0'), +('6', '24', '2', '3000', '2534', '0'), +('6', '24', '3', '11052', '4349', '0'), +('6', '24', '3', '2706', '4158', '0'), +('6', '24', '3', '4505', '2060', '0'), +('6', '24', '3', '14695', '2038', '0'), +('6', '24', '5', '14703', '6050', '0'), +('6', '24', '5', '14700', '3318', '0'), +('6', '24', '5', '30362', '3140', '0'), +('6', '24', '5', '10146', '2900', '0'), +('6', '24', '8', '11603', '10920', '0'), +('6', '24', '8', '2349', '3554', '0'), +('6', '24', '8', '1363', '2510', '0'), +('6', '24', '8', '2287', '1594', '0'), +('6', '24', '6', '2705', '6201', '0'), +('6', '24', '6', '1557', '5310', '0'), +('6', '24', '6', '1904', '2350', '0'), +('6', '24', '6', '1401', '2174', '0'), +('6', '24', '17', '2285', '10526', '0'), +('6', '24', '17', '3802', '4286', '0'), +('6', '24', '17', '4342', '3026', '0'), +('6', '24', '17', '2405', '1532', '0'), +('6', '24', '7', '31809', '3418', '0'), +('6', '24', '7', '1362', '2624', '0'), +('6', '24', '7', '2289', '2490', '0'), +('6', '24', '7', '1321', '1746', '0'), +('6', '24', '9', '3804', '4559', '0'), +('6', '24', '9', '1541', '3872', '0'), +('6', '24', '9', '4344', '2051', '0'), +('6', '24', '9', '10408', '2002', '0'), +('6', '24', '15', '10150', '3004', '0'), +('6', '24', '15', '10163', '2300', '0'), +('6', '24', '15', '14651', '2224', '0'), +('6', '24', '15', '14631', '1740', '0'), +('6', '24', '20', '11684', '9856', '0'), +('6', '24', '20', '11666', '8338', '0'), +('6', '24', '20', '2742', '5139', '0'), +('6', '24', '20', '2288', '4478', '0'), +('6', '24', '12', '2291', '3830', '0'), +('6', '24', '12', '20655', '3196', '0'), +('6', '24', '12', '2923', '3074', '0'), +('6', '24', '12', '4345', '1822', '0'), +('6', '24', '18', '2292', '2001', '0'), +('6', '24', '18', '3806', '1712', '0'), +('6', '24', '18', '2461', '1352', '0'), +('6', '24', '18', '4410', '1142', '0'), +('6', '24', '19', '68239', '2793', '0'), +('6', '24', '19', '4407', '2669', '0'), +('6', '24', '19', '2293', '2105', '0'), +('6', '24', '19', '1368', '2016', '0'), +('6', '24', '13', '6411', '7774', '0'), +('6', '24', '13', '11683', '7616', '0'), +('6', '24', '13', '14555', '6794', '0'), +('6', '24', '13', '11563', '5741', '0'), +('6', '24', '14', '14555', '6794', '0'), +('6', '24', '14', '10333', '5300', '0'), +('6', '24', '14', '10335', '5208', '0'), +('6', '24', '14', '13991', '3899', '0'), +('6', '24', '11', '9246', '2911', '0'), +('6', '24', '11', '14762', '2204', '0'), +('6', '24', '11', '16941', '580', '0'), +('6', '24', '11', '20677', '450', '0'), +('6', '25', '22', '9246', '0', '0'), +('6', '25', '22', '10323', '0', '0'), +('6', '25', '22', '44492', '0', '0'), +('6', '25', '22', '13101', '0', '0'), +('6', '25', '1', '12801', '4762', '0'), +('6', '25', '1', '14702', '3750', '0'), +('6', '25', '1', '14701', '2862', '0'), +('6', '25', '1', '30361', '2640', '0'), +('6', '25', '2', '10143', '5368', '0'), +('6', '25', '2', '30363', '3700', '0'), +('6', '25', '2', '2294', '2644', '0'), +('6', '25', '2', '3000', '2534', '0'), +('6', '25', '3', '11052', '4530', '0'), +('6', '25', '3', '2706', '4278', '0'), +('6', '25', '3', '4505', '2144', '0'), +('6', '25', '3', '14695', '2122', '0'), +('6', '25', '5', '14703', '6050', '0'), +('6', '25', '5', '14700', '3318', '0'), +('6', '25', '5', '30362', '3140', '0'), +('6', '25', '5', '68291', '3044', '0'), +('6', '25', '8', '11603', '11028', '0'), +('6', '25', '8', '2349', '3554', '0'), +('6', '25', '8', '1363', '2510', '0'), +('6', '25', '8', '2287', '1597', '0'), +('6', '25', '6', '2705', '6249', '0'), +('6', '25', '6', '1557', '5310', '0'), +('6', '25', '6', '1904', '2446', '0'), +('6', '25', '6', '1401', '2174', '0'), +('6', '25', '17', '2285', '10574', '0'), +('6', '25', '17', '3802', '4445', '0'), +('6', '25', '17', '4342', '3147', '0'), +('6', '25', '17', '2405', '1593', '0'), +('6', '25', '7', '31809', '3454', '0'), +('6', '25', '7', '1362', '2624', '0'), +('6', '25', '7', '2289', '2538', '0'), +('6', '25', '7', '1321', '1746', '0'), +('6', '25', '9', '3804', '4668', '0'), +('6', '25', '9', '1541', '3992', '0'), +('6', '25', '9', '4344', '2051', '0'), +('6', '25', '9', '2290', '2047', '0'), +('6', '25', '15', '10150', '3004', '0'), +('6', '25', '15', '10163', '2300', '0'), +('6', '25', '15', '14651', '2224', '0'), +('6', '25', '15', '14631', '1812', '0'), +('6', '25', '20', '11684', '9952', '0'), +('6', '25', '20', '11666', '8340', '0'), +('6', '25', '20', '2742', '5142', '0'), +('6', '25', '20', '2288', '4478', '0'), +('6', '25', '12', '2291', '3830', '0'), +('6', '25', '12', '20655', '3221', '0'), +('6', '25', '12', '2923', '3074', '0'), +('6', '25', '12', '4345', '1882', '0'), +('6', '25', '18', '2292', '2049', '0'), +('6', '25', '18', '3806', '1772', '0'), +('6', '25', '18', '2461', '1400', '0'), +('6', '25', '18', '4410', '1142', '0'), +('6', '25', '19', '68239', '2829', '0'), +('6', '25', '19', '4407', '2778', '0'), +('6', '25', '19', '2293', '2141', '0'), +('6', '25', '19', '1368', '2016', '0'), +('6', '25', '13', '6411', '7883', '0'), +('6', '25', '13', '11683', '7725', '0'), +('6', '25', '13', '14555', '7035', '0'), +('6', '25', '13', '11563', '5814', '0'), +('6', '25', '14', '14555', '7035', '0'), +('6', '25', '14', '10335', '5425', '0'), +('6', '25', '14', '10333', '5300', '0'), +('6', '25', '14', '13991', '4020', '0'), +('6', '25', '11', '9246', '3032', '0'), +('6', '25', '11', '14762', '2204', '0'), +('6', '25', '11', '16941', '604', '0'), +('6', '25', '11', '20677', '450', '0'), +('6', '26', '22', '9246', '0', '0'), +('6', '26', '22', '10323', '0', '0'), +('6', '26', '22', '44492', '0', '0'), +('6', '26', '22', '13101', '0', '0'), +('6', '26', '1', '12801', '4762', '0'), +('6', '26', '1', '14702', '3750', '0'), +('6', '26', '1', '14701', '2862', '0'), +('6', '26', '1', '30361', '2640', '0'), +('6', '26', '2', '10143', '5368', '0'), +('6', '26', '2', '30363', '3700', '0'), +('6', '26', '2', '2294', '2668', '0'), +('6', '26', '2', '3000', '2534', '0'), +('6', '26', '3', '11052', '4711', '0'), +('6', '26', '3', '2706', '4399', '0'), +('6', '26', '3', '4505', '2229', '0'), +('6', '26', '3', '14695', '2207', '0'), +('6', '26', '5', '14703', '6050', '0'), +('6', '26', '5', '14700', '3318', '0'), +('6', '26', '5', '30362', '3140', '0'), +('6', '26', '5', '68291', '3093', '0'), +('6', '26', '8', '11603', '11137', '0'), +('6', '26', '8', '2349', '3554', '0'), +('6', '26', '8', '1363', '2510', '0'), +('6', '26', '8', '2287', '1599', '0'), +('6', '26', '6', '2705', '6297', '0'), +('6', '26', '6', '1557', '5310', '0'), +('6', '26', '6', '1904', '2543', '0'), +('6', '26', '6', '1401', '2174', '0'), +('6', '26', '17', '2285', '10623', '0'), +('6', '26', '17', '3802', '4605', '0'), +('6', '26', '17', '4342', '3268', '0'), +('6', '26', '17', '2405', '1654', '0'), +('6', '26', '7', '31809', '3491', '0'), +('6', '26', '7', '1362', '2624', '0'), +('6', '26', '7', '2289', '2587', '0'), +('6', '26', '7', '1321', '1746', '0'), +('6', '26', '9', '3804', '4777', '0'), +('6', '26', '9', '1541', '4113', '0'), +('6', '26', '9', '2290', '2108', '0'), +('6', '26', '9', '4344', '2051', '0'), +('6', '26', '15', '10150', '3004', '0'), +('6', '26', '15', '10163', '2300', '0'), +('6', '26', '15', '14651', '2224', '0'), +('6', '26', '15', '14631', '1884', '0'), +('6', '26', '20', '11684', '10049', '0'), +('6', '26', '20', '11666', '8342', '0'), +('6', '26', '20', '2742', '5145', '0'), +('6', '26', '20', '2288', '4478', '0'), +('6', '26', '12', '2291', '3830', '0'), +('6', '26', '12', '20655', '3245', '0'), +('6', '26', '12', '2923', '3074', '0'), +('6', '26', '12', '4345', '1943', '0'), +('6', '26', '18', '2292', '2097', '0'), +('6', '26', '18', '3806', '1832', '0'), +('6', '26', '18', '2461', '1449', '0'), +('6', '26', '18', '4410', '1142', '0'), +('6', '26', '19', '4407', '2887', '0'), +('6', '26', '19', '68239', '2866', '0'), +('6', '26', '19', '2293', '2177', '0'), +('6', '26', '19', '1368', '2016', '0'), +('6', '26', '13', '6411', '7992', '0'), +('6', '26', '13', '11683', '7834', '0'), +('6', '26', '13', '14555', '7277', '0'), +('6', '26', '13', '11563', '5886', '0'), +('6', '26', '14', '14555', '7277', '0'), +('6', '26', '14', '10335', '5643', '0'), +('6', '26', '14', '10333', '5300', '0'), +('6', '26', '14', '13991', '4141', '0'), +('6', '26', '11', '9246', '3153', '0'), +('6', '26', '11', '14762', '2204', '0'), +('6', '26', '11', '16941', '628', '0'), +('6', '26', '11', '20677', '450', '0'), +('6', '27', '22', '9246', '0', '0'), +('6', '27', '22', '10323', '0', '0'), +('6', '27', '22', '44492', '0', '0'), +('6', '27', '22', '13101', '0', '0'), +('6', '27', '1', '12801', '4762', '0'), +('6', '27', '1', '14702', '3750', '0'), +('6', '27', '1', '14701', '2862', '0'), +('6', '27', '1', '30361', '2640', '0'), +('6', '27', '2', '10143', '5368', '0'), +('6', '27', '2', '30363', '3700', '0'), +('6', '27', '2', '2294', '2692', '0'), +('6', '27', '2', '3000', '2534', '0'), +('6', '27', '3', '11052', '4892', '0'), +('6', '27', '3', '2706', '4520', '0'), +('6', '27', '3', '4505', '2313', '0'), +('6', '27', '3', '14695', '2292', '0'), +('6', '27', '5', '14703', '6050', '0'), +('6', '27', '5', '14700', '3318', '0'), +('6', '27', '5', '68291', '3141', '0'), +('6', '27', '5', '30362', '3140', '0'), +('6', '27', '8', '11603', '11246', '0'), +('6', '27', '8', '2349', '3554', '0'), +('6', '27', '8', '1363', '2510', '0'), +('6', '27', '8', '2287', '1601', '0'), +('6', '27', '6', '2705', '6346', '0'), +('6', '27', '6', '1557', '5310', '0'), +('6', '27', '6', '1904', '2639', '0'), +('6', '27', '6', '1401', '2174', '0'), +('6', '27', '17', '2285', '10671', '0'), +('6', '27', '17', '3802', '4765', '0'), +('6', '27', '17', '4342', '3388', '0'), +('6', '27', '17', '2405', '1716', '0'), +('6', '27', '7', '31809', '3527', '0'), +('6', '27', '7', '2289', '2635', '0'), +('6', '27', '7', '1362', '2624', '0'), +('6', '27', '7', '1321', '1746', '0'), +('6', '27', '9', '3804', '4886', '0'), +('6', '27', '9', '1541', '4234', '0'), +('6', '27', '9', '2290', '2169', '0'), +('6', '27', '9', '4344', '2051', '0'), +('6', '27', '15', '10150', '3004', '0'), +('6', '27', '15', '10163', '2300', '0'), +('6', '27', '15', '14651', '2224', '0'), +('6', '27', '15', '14631', '1957', '0'), +('6', '27', '20', '11684', '10146', '0'), +('6', '27', '20', '11666', '8344', '0'), +('6', '27', '20', '2742', '5148', '0'), +('6', '27', '20', '2288', '4478', '0'), +('6', '27', '12', '2291', '3830', '0'), +('6', '27', '12', '20655', '3270', '0'), +('6', '27', '12', '2923', '3074', '0'), +('6', '27', '12', '4345', '2003', '0'), +('6', '27', '18', '2292', '2146', '0'), +('6', '27', '18', '3806', '1893', '0'), +('6', '27', '18', '2461', '1497', '0'), +('6', '27', '18', '4410', '1142', '0'), +('6', '27', '19', '4407', '2996', '0'), +('6', '27', '19', '68239', '2902', '0'), +('6', '27', '19', '2293', '2214', '0'), +('6', '27', '19', '1368', '2016', '0'), +('6', '27', '13', '6411', '8100', '0'), +('6', '27', '13', '11683', '7943', '0'), +('6', '27', '13', '14555', '7518', '0'), +('6', '27', '13', '11563', '5959', '0'), +('6', '27', '14', '14555', '7518', '0'), +('6', '27', '14', '10335', '5860', '0'), +('6', '27', '14', '10333', '5300', '0'), +('6', '27', '14', '13991', '4262', '0'), +('6', '27', '11', '9246', '3274', '0'), +('6', '27', '11', '14762', '2204', '0'), +('6', '27', '11', '16941', '652', '0'), +('6', '27', '11', '20677', '450', '0'), +('6', '28', '22', '9246', '0', '0'), +('6', '28', '22', '10323', '0', '0'), +('6', '28', '22', '44492', '0', '0'), +('6', '28', '22', '13101', '0', '0'), +('6', '28', '1', '12801', '4762', '0'), +('6', '28', '1', '14702', '3750', '0'), +('6', '28', '1', '14701', '2862', '0'), +('6', '28', '1', '30361', '2640', '0'), +('6', '28', '2', '10143', '5368', '0'), +('6', '28', '2', '30363', '3700', '0'), +('6', '28', '2', '2294', '2716', '0'), +('6', '28', '2', '3000', '2534', '0'), +('6', '28', '3', '11052', '5074', '0'), +('6', '28', '3', '2706', '4641', '0'), +('6', '28', '3', '4505', '2398', '0'), +('6', '28', '3', '14695', '2376', '0'), +('6', '28', '5', '14703', '6050', '0'), +('6', '28', '5', '14700', '3318', '0'), +('6', '28', '5', '68291', '3189', '0'), +('6', '28', '5', '30362', '3140', '0'), +('6', '28', '8', '11603', '11355', '0'), +('6', '28', '8', '2349', '3554', '0'), +('6', '28', '8', '1363', '2510', '0'), +('6', '28', '8', '2287', '1604', '0'), +('6', '28', '6', '2705', '6394', '0'), +('6', '28', '6', '1557', '5310', '0'), +('6', '28', '6', '1904', '2736', '0'), +('6', '28', '6', '1401', '2174', '0'), +('6', '28', '17', '2285', '10719', '0'), +('6', '28', '17', '3802', '4925', '0'), +('6', '28', '17', '4342', '3509', '0'), +('6', '28', '17', '2405', '1777', '0'), +('6', '28', '7', '31809', '3563', '0'), +('6', '28', '7', '2289', '2683', '0'), +('6', '28', '7', '1362', '2624', '0'), +('6', '28', '7', '1321', '1746', '0'), +('6', '28', '9', '3804', '4994', '0'), +('6', '28', '9', '1541', '4355', '0'), +('6', '28', '9', '2290', '2230', '0'), +('6', '28', '9', '4344', '2051', '0'), +('6', '28', '15', '10150', '3004', '0'), +('6', '28', '15', '10163', '2300', '0'), +('6', '28', '15', '14651', '2224', '0'), +('6', '28', '15', '14631', '2029', '0'), +('6', '28', '20', '11684', '10242', '0'), +('6', '28', '20', '11666', '8346', '0'), +('6', '28', '20', '2742', '5151', '0'), +('6', '28', '20', '2288', '4478', '0'), +('6', '28', '12', '2291', '3830', '0'), +('6', '28', '12', '20655', '3295', '0'), +('6', '28', '12', '2923', '3074', '0'), +('6', '28', '12', '4345', '2064', '0'), +('6', '28', '18', '2292', '2194', '0'), +('6', '28', '18', '3806', '1953', '0'), +('6', '28', '18', '2461', '1545', '0'), +('6', '28', '18', '4410', '1142', '0'), +('6', '28', '19', '4407', '3104', '0'), +('6', '28', '19', '68239', '2938', '0'), +('6', '28', '19', '2293', '2250', '0'), +('6', '28', '19', '1368', '2016', '0'), +('6', '28', '13', '6411', '8209', '0'), +('6', '28', '13', '11683', '8051', '0'), +('6', '28', '13', '14555', '7760', '0'), +('6', '28', '13', '11563', '6031', '0'), +('6', '28', '14', '14555', '7760', '0'), +('6', '28', '14', '10335', '6077', '0'), +('6', '28', '14', '10333', '5300', '0'), +('6', '28', '14', '13991', '4382', '0'), +('6', '28', '11', '9246', '3394', '0'), +('6', '28', '11', '14762', '2204', '0'), +('6', '28', '11', '16941', '676', '0'), +('6', '28', '11', '20677', '450', '0'), +('6', '29', '22', '9246', '0', '0'), +('6', '29', '22', '10323', '0', '0'), +('6', '29', '22', '44492', '0', '0'), +('6', '29', '22', '13101', '0', '0'), +('6', '29', '1', '12801', '4762', '0'), +('6', '29', '1', '14702', '3750', '0'), +('6', '29', '1', '14701', '2862', '0'), +('6', '29', '1', '30361', '2640', '0'), +('6', '29', '2', '10143', '5368', '0'), +('6', '29', '2', '30363', '3700', '0'), +('6', '29', '2', '2294', '2741', '0'), +('6', '29', '2', '3000', '2534', '0'), +('6', '29', '3', '11052', '5255', '0'), +('6', '29', '3', '2706', '4762', '0'), +('6', '29', '3', '4505', '2482', '0'), +('6', '29', '3', '14695', '2461', '0'), +('6', '29', '5', '14703', '6050', '0'), +('6', '29', '5', '14700', '3318', '0'), +('6', '29', '5', '68291', '3238', '0'), +('6', '29', '5', '30362', '3140', '0'), +('6', '29', '8', '11603', '11463', '0'), +('6', '29', '8', '2349', '3554', '0'), +('6', '29', '8', '1363', '2510', '0'), +('6', '29', '8', '2287', '1606', '0'), +('6', '29', '6', '2705', '6442', '0'), +('6', '29', '6', '1557', '5310', '0'), +('6', '29', '6', '1904', '2833', '0'), +('6', '29', '6', '1401', '2174', '0'), +('6', '29', '17', '2285', '10768', '0'), +('6', '29', '17', '3802', '5084', '0'), +('6', '29', '17', '4342', '3630', '0'), +('6', '29', '17', '2405', '1838', '0'), +('6', '29', '7', '31809', '3599', '0'), +('6', '29', '7', '2289', '2731', '0'), +('6', '29', '7', '1362', '2624', '0'), +('6', '29', '7', '1321', '1746', '0'), +('6', '29', '9', '3804', '5103', '0'), +('6', '29', '9', '1541', '4476', '0'), +('6', '29', '9', '2290', '2291', '0'), +('6', '29', '9', '4344', '2051', '0'), +('6', '29', '15', '10150', '3004', '0'), +('6', '29', '15', '10163', '2300', '0'), +('6', '29', '15', '14651', '2224', '0'), +('6', '29', '15', '14631', '2102', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '29', '20', '11684', '10339', '0'), +('6', '29', '20', '11666', '8348', '0'), +('6', '29', '20', '2742', '5154', '0'), +('6', '29', '20', '2288', '4478', '0'), +('6', '29', '12', '2291', '3830', '0'), +('6', '29', '12', '20655', '3320', '0'), +('6', '29', '12', '2923', '3074', '0'), +('6', '29', '12', '4345', '2124', '0'), +('6', '29', '18', '2292', '2242', '0'), +('6', '29', '18', '3806', '2014', '0'), +('6', '29', '18', '2461', '1594', '0'), +('6', '29', '18', '4410', '1142', '0'), +('6', '29', '19', '4407', '3213', '0'), +('6', '29', '19', '68239', '2974', '0'), +('6', '29', '19', '2293', '2286', '0'), +('6', '29', '19', '1368', '2016', '0'), +('6', '29', '13', '6411', '8318', '0'), +('6', '29', '13', '11683', '8160', '0'), +('6', '29', '13', '14555', '8002', '0'), +('6', '29', '13', '11563', '6104', '0'), +('6', '29', '14', '14555', '8002', '0'), +('6', '29', '14', '10335', '6295', '0'), +('6', '29', '14', '10333', '5300', '0'), +('6', '29', '14', '13991', '4503', '0'), +('6', '29', '11', '9246', '3515', '0'), +('6', '29', '11', '14762', '2204', '0'), +('6', '29', '11', '16941', '701', '0'), +('6', '29', '11', '20677', '450', '0'), +('6', '30', '22', '9246', '0', '0'), +('6', '30', '22', '10323', '0', '0'), +('6', '30', '22', '44492', '0', '0'), +('6', '30', '22', '13101', '0', '0'), +('6', '30', '1', '12801', '4762', '0'), +('6', '30', '1', '14702', '3750', '0'), +('6', '30', '1', '14701', '2862', '0'), +('6', '30', '1', '30361', '2640', '0'), +('6', '30', '2', '10143', '5368', '0'), +('6', '30', '2', '30363', '3700', '0'), +('6', '30', '2', '2294', '2765', '0'), +('6', '30', '2', '3000', '2534', '0'), +('6', '30', '3', '11052', '5436', '0'), +('6', '30', '3', '2706', '4882', '0'), +('6', '30', '3', '4505', '2567', '0'), +('6', '30', '3', '14695', '2545', '0'), +('6', '30', '5', '14703', '6050', '0'), +('6', '30', '5', '14700', '3318', '0'), +('6', '30', '5', '68291', '3286', '0'), +('6', '30', '5', '30362', '3140', '0'), +('6', '30', '8', '11603', '11572', '0'), +('6', '30', '8', '2349', '3554', '0'), +('6', '30', '8', '1363', '2510', '0'), +('6', '30', '8', '2913', '1642', '0'), +('6', '30', '6', '2705', '6491', '0'), +('6', '30', '6', '1557', '5310', '0'), +('6', '30', '6', '1904', '2929', '0'), +('6', '30', '6', '1401', '2174', '0'), +('6', '30', '17', '2285', '10816', '0'), +('6', '30', '17', '3802', '5244', '0'), +('6', '30', '17', '4342', '3751', '0'), +('6', '30', '17', '2405', '1900', '0'), +('6', '30', '7', '31809', '3636', '0'), +('6', '30', '7', '2289', '2780', '0'), +('6', '30', '7', '1362', '2624', '0'), +('6', '30', '7', '1321', '1746', '0'), +('6', '30', '9', '3804', '5212', '0'), +('6', '30', '9', '1541', '4596', '0'), +('6', '30', '9', '2290', '2352', '0'), +('6', '30', '9', '4344', '2051', '0'), +('6', '30', '15', '10150', '3004', '0'), +('6', '30', '15', '10163', '2300', '0'), +('6', '30', '15', '14651', '2224', '0'), +('6', '30', '15', '14631', '2174', '0'), +('6', '30', '20', '11684', '10435', '0'), +('6', '30', '20', '11666', '8350', '0'), +('6', '30', '20', '2742', '5157', '0'), +('6', '30', '20', '2288', '4478', '0'), +('6', '30', '12', '2291', '3830', '0'), +('6', '30', '12', '20655', '3344', '0'), +('6', '30', '12', '2923', '3074', '0'), +('6', '30', '12', '4345', '2184', '0'), +('6', '30', '18', '2292', '2291', '0'), +('6', '30', '18', '3806', '2074', '0'), +('6', '30', '18', '2461', '1642', '0'), +('6', '30', '18', '4410', '1142', '0'), +('6', '30', '19', '4407', '3322', '0'), +('6', '30', '19', '68239', '3011', '0'), +('6', '30', '19', '2293', '2322', '0'), +('6', '30', '19', '1368', '2016', '0'), +('6', '30', '13', '6411', '8427', '0'), +('6', '30', '13', '11683', '8269', '0'), +('6', '30', '13', '14555', '8243', '0'), +('6', '30', '13', '11563', '6176', '0'), +('6', '30', '14', '14555', '8243', '0'), +('6', '30', '14', '10335', '6512', '0'), +('6', '30', '14', '10333', '5300', '0'), +('6', '30', '14', '13991', '4624', '0'), +('6', '30', '11', '9246', '3636', '0'), +('6', '30', '11', '14762', '2204', '0'), +('6', '30', '11', '16941', '725', '0'), +('6', '30', '11', '20677', '450', '0'), +('6', '31', '22', '9246', '0', '0'), +('6', '31', '22', '10323', '0', '0'), +('6', '31', '22', '44492', '0', '0'), +('6', '31', '22', '13101', '0', '0'), +('6', '31', '1', '12801', '4762', '0'), +('6', '31', '1', '14702', '3750', '0'), +('6', '31', '1', '14701', '2862', '0'), +('6', '31', '1', '30361', '2640', '0'), +('6', '31', '2', '10143', '5368', '0'), +('6', '31', '2', '30363', '3700', '0'), +('6', '31', '2', '2294', '2789', '0'), +('6', '31', '2', '3000', '2534', '0'), +('6', '31', '3', '11052', '5617', '0'), +('6', '31', '3', '2706', '5003', '0'), +('6', '31', '3', '4505', '2652', '0'), +('6', '31', '3', '14695', '2630', '0'), +('6', '31', '5', '14703', '6050', '0'), +('6', '31', '5', '68291', '3334', '0'), +('6', '31', '5', '14700', '3318', '0'), +('6', '31', '5', '10146', '3154', '0'), +('6', '31', '8', '11603', '11681', '0'), +('6', '31', '8', '2349', '3554', '0'), +('6', '31', '8', '1363', '2510', '0'), +('6', '31', '8', '2913', '1690', '0'), +('6', '31', '6', '2705', '6539', '0'), +('6', '31', '6', '1557', '5310', '0'), +('6', '31', '6', '1904', '3026', '0'), +('6', '31', '6', '1401', '2174', '0'), +('6', '31', '17', '2285', '10864', '0'), +('6', '31', '17', '3802', '5404', '0'), +('6', '31', '17', '4342', '3872', '0'), +('6', '31', '17', '2405', '1961', '0'), +('6', '31', '7', '31809', '3672', '0'), +('6', '31', '7', '2289', '2828', '0'), +('6', '31', '7', '1362', '2624', '0'), +('6', '31', '7', '1321', '1746', '0'), +('6', '31', '9', '3804', '5321', '0'), +('6', '31', '9', '1541', '4717', '0'), +('6', '31', '9', '2290', '2413', '0'), +('6', '31', '9', '4344', '2051', '0'), +('6', '31', '15', '10150', '3004', '0'), +('6', '31', '15', '10163', '2300', '0'), +('6', '31', '15', '14631', '2247', '0'), +('6', '31', '15', '14651', '2224', '0'), +('6', '31', '20', '11684', '10532', '0'), +('6', '31', '20', '11666', '8352', '0'), +('6', '31', '20', '2742', '5160', '0'), +('6', '31', '20', '2288', '4478', '0'), +('6', '31', '12', '2291', '3830', '0'), +('6', '31', '12', '20655', '3369', '0'), +('6', '31', '12', '2923', '3074', '0'), +('6', '31', '12', '4345', '2245', '0'), +('6', '31', '18', '2292', '2339', '0'), +('6', '31', '18', '3806', '2134', '0'), +('6', '31', '18', '2461', '1690', '0'), +('6', '31', '18', '4410', '1142', '0'), +('6', '31', '19', '4407', '3431', '0'), +('6', '31', '19', '68239', '3047', '0'), +('6', '31', '19', '2293', '2358', '0'), +('6', '31', '19', '1368', '2016', '0'), +('6', '31', '13', '6411', '8535', '0'), +('6', '31', '13', '14555', '8485', '0'), +('6', '31', '13', '11683', '8377', '0'), +('6', '31', '13', '11563', '6249', '0'), +('6', '31', '14', '14555', '8485', '0'), +('6', '31', '14', '10335', '6730', '0'), +('6', '31', '14', '10333', '5300', '0'), +('6', '31', '14', '13991', '4745', '0'), +('6', '31', '11', '9246', '3757', '0'), +('6', '31', '11', '14762', '2204', '0'), +('6', '31', '11', '16941', '749', '0'), +('6', '31', '11', '20677', '450', '0'), +('6', '32', '22', '9246', '0', '0'), +('6', '32', '22', '10323', '0', '0'), +('6', '32', '22', '44492', '0', '0'), +('6', '32', '22', '13101', '0', '0'), +('6', '32', '1', '12801', '4762', '0'), +('6', '32', '1', '14702', '3750', '0'), +('6', '32', '1', '14701', '2862', '0'), +('6', '32', '1', '30361', '2640', '0'), +('6', '32', '2', '10143', '5368', '0'), +('6', '32', '2', '30363', '3700', '0'), +('6', '32', '2', '2294', '2813', '0'), +('6', '32', '2', '3000', '2534', '0'), +('6', '32', '3', '11052', '5798', '0'), +('6', '32', '3', '2706', '5124', '0'), +('6', '32', '3', '4505', '2736', '0'), +('6', '32', '3', '14695', '2714', '0'), +('6', '32', '5', '14703', '6050', '0'), +('6', '32', '5', '68291', '3382', '0'), +('6', '32', '5', '14700', '3318', '0'), +('6', '32', '5', '10146', '3190', '0'), +('6', '32', '8', '11603', '11789', '0'), +('6', '32', '8', '2349', '3554', '0'), +('6', '32', '8', '1363', '2510', '0'), +('6', '32', '8', '2913', '1739', '0'), +('6', '32', '6', '2705', '6587', '0'), +('6', '32', '6', '1557', '5310', '0'), +('6', '32', '6', '1904', '3123', '0'), +('6', '32', '6', '1401', '2174', '0'), +('6', '32', '17', '2285', '10913', '0'), +('6', '32', '17', '3802', '5564', '0'), +('6', '32', '17', '4342', '3992', '0'), +('6', '32', '17', '2405', '2022', '0'), +('6', '32', '7', '31809', '3708', '0'), +('6', '32', '7', '2289', '2876', '0'), +('6', '32', '7', '1362', '2624', '0'), +('6', '32', '7', '1321', '1746', '0'), +('6', '32', '9', '3804', '5429', '0'), +('6', '32', '9', '1541', '4838', '0'), +('6', '32', '9', '2290', '2474', '0'), +('6', '32', '9', '4344', '2051', '0'), +('6', '32', '15', '10150', '3004', '0'), +('6', '32', '15', '14631', '2319', '0'), +('6', '32', '15', '10163', '2300', '0'), +('6', '32', '15', '14651', '2224', '0'), +('6', '32', '20', '11684', '10629', '0'), +('6', '32', '20', '11666', '8354', '0'), +('6', '32', '20', '2742', '5163', '0'), +('6', '32', '20', '2288', '4478', '0'), +('6', '32', '12', '2291', '3830', '0'), +('6', '32', '12', '20655', '3394', '0'), +('6', '32', '12', '2923', '3074', '0'), +('6', '32', '12', '4345', '2305', '0'), +('6', '32', '18', '2292', '2387', '0'), +('6', '32', '18', '3806', '2195', '0'), +('6', '32', '18', '2461', '1739', '0'), +('6', '32', '18', '4410', '1142', '0'), +('6', '32', '19', '4407', '3539', '0'), +('6', '32', '19', '68239', '3083', '0'), +('6', '32', '19', '2293', '2395', '0'), +('6', '32', '19', '1368', '2016', '0'), +('6', '32', '13', '14555', '8726', '0'), +('6', '32', '13', '6411', '8644', '0'), +('6', '32', '13', '11683', '8486', '0'), +('6', '32', '13', '11563', '6321', '0'), +('6', '32', '14', '14555', '8726', '0'), +('6', '32', '14', '10335', '6947', '0'), +('6', '32', '14', '10333', '5300', '0'), +('6', '32', '14', '13991', '4866', '0'), +('6', '32', '11', '9246', '3878', '0'), +('6', '32', '11', '14762', '2204', '0'), +('6', '32', '11', '16941', '773', '0'), +('6', '32', '11', '20677', '450', '0'), +('6', '33', '22', '9246', '0', '0'), +('6', '33', '22', '10323', '0', '0'), +('6', '33', '22', '44492', '0', '0'), +('6', '33', '22', '13101', '0', '0'), +('6', '33', '1', '12801', '4762', '0'), +('6', '33', '1', '14702', '3750', '0'), +('6', '33', '1', '14701', '2862', '0'), +('6', '33', '1', '30361', '2640', '0'), +('6', '33', '2', '10143', '5368', '0'), +('6', '33', '2', '30363', '3700', '0'), +('6', '33', '2', '2294', '2837', '0'), +('6', '33', '2', '3000', '2534', '0'), +('6', '33', '3', '11052', '5980', '0'), +('6', '33', '3', '2706', '5245', '0'), +('6', '33', '3', '4505', '2821', '0'), +('6', '33', '3', '14695', '2799', '0'), +('6', '33', '5', '14703', '6050', '0'), +('6', '33', '5', '68291', '3431', '0'), +('6', '33', '5', '14700', '3318', '0'), +('6', '33', '5', '10146', '3226', '0'), +('6', '33', '8', '11603', '11898', '0'), +('6', '33', '8', '2349', '3554', '0'), +('6', '33', '8', '1363', '2510', '0'), +('6', '33', '8', '2913', '1787', '0'), +('6', '33', '6', '2705', '6636', '0'), +('6', '33', '6', '1557', '5310', '0'), +('6', '33', '6', '1904', '3219', '0'), +('6', '33', '6', '1401', '2174', '0'), +('6', '33', '17', '2285', '10961', '0'), +('6', '33', '17', '3802', '5723', '0'), +('6', '33', '17', '4342', '4113', '0'), +('6', '33', '17', '2405', '2083', '0'), +('6', '33', '7', '31809', '3744', '0'), +('6', '33', '7', '2289', '2925', '0'), +('6', '33', '7', '1362', '2624', '0'), +('6', '33', '7', '1321', '1746', '0'), +('6', '33', '9', '3804', '5538', '0'), +('6', '33', '9', '1541', '4959', '0'), +('6', '33', '9', '2290', '2535', '0'), +('6', '33', '9', '4344', '2051', '0'), +('6', '33', '15', '10150', '3004', '0'), +('6', '33', '15', '14631', '2392', '0'), +('6', '33', '15', '10163', '2300', '0'), +('6', '33', '15', '14651', '2224', '0'), +('6', '33', '20', '11684', '10725', '0'), +('6', '33', '20', '11666', '8357', '0'), +('6', '33', '20', '2742', '5166', '0'), +('6', '33', '20', '2288', '4478', '0'), +('6', '33', '12', '2291', '3830', '0'), +('6', '33', '12', '20655', '3419', '0'), +('6', '33', '12', '2923', '3074', '0'), +('6', '33', '12', '4345', '2366', '0'), +('6', '33', '18', '2292', '2436', '0'), +('6', '33', '18', '3806', '2255', '0'), +('6', '33', '18', '2461', '1787', '0'), +('6', '33', '18', '4410', '1142', '0'), +('6', '33', '19', '4407', '3648', '0'), +('6', '33', '19', '68239', '3119', '0'), +('6', '33', '19', '2293', '2431', '0'), +('6', '33', '19', '1368', '2016', '0'), +('6', '33', '13', '14555', '8968', '0'), +('6', '33', '13', '6411', '8753', '0'), +('6', '33', '13', '11683', '8595', '0'), +('6', '33', '13', '11563', '6394', '0'), +('6', '33', '14', '14555', '8968', '0'), +('6', '33', '14', '10335', '7165', '0'), +('6', '33', '14', '10333', '5300', '0'), +('6', '33', '14', '13991', '4986', '0'), +('6', '33', '11', '9246', '3998', '0'), +('6', '33', '11', '14762', '2204', '0'), +('6', '33', '11', '16941', '797', '0'), +('6', '33', '11', '20677', '450', '0'), +('6', '34', '22', '9246', '0', '0'), +('6', '34', '22', '10323', '0', '0'), +('6', '34', '22', '44492', '0', '0'), +('6', '34', '22', '13101', '0', '0'), +('6', '34', '1', '12801', '4762', '0'), +('6', '34', '1', '14702', '3750', '0'), +('6', '34', '1', '14701', '2862', '0'), +('6', '34', '1', '30361', '2640', '0'), +('6', '34', '2', '10143', '5368', '0'), +('6', '34', '2', '30363', '3700', '0'), +('6', '34', '2', '2294', '2861', '0'), +('6', '34', '2', '2191', '2536', '0'), +('6', '34', '3', '11052', '6161', '0'), +('6', '34', '3', '2706', '5366', '0'), +('6', '34', '3', '4505', '2905', '0'), +('6', '34', '3', '14695', '2883', '0'), +('6', '34', '5', '14703', '6050', '0'), +('6', '34', '5', '68291', '3479', '0'), +('6', '34', '5', '14700', '3318', '0'), +('6', '34', '5', '10146', '3262', '0'), +('6', '34', '8', '11603', '12007', '0'), +('6', '34', '8', '2349', '3554', '0'), +('6', '34', '8', '1363', '2510', '0'), +('6', '34', '8', '2913', '1835', '0'), +('6', '34', '6', '2705', '6684', '0'), +('6', '34', '6', '1557', '5310', '0'), +('6', '34', '6', '1904', '3316', '0'), +('6', '34', '6', '1401', '2174', '0'), +('6', '34', '17', '2285', '11009', '0'), +('6', '34', '17', '3802', '5883', '0'), +('6', '34', '17', '4342', '4234', '0'), +('6', '34', '17', '2405', '2145', '0'), +('6', '34', '7', '31809', '3780', '0'), +('6', '34', '7', '2289', '2973', '0'), +('6', '34', '7', '1362', '2624', '0'), +('6', '34', '7', '1321', '1746', '0'), +('6', '34', '9', '3804', '5647', '0'), +('6', '34', '9', '1541', '5080', '0'), +('6', '34', '9', '2290', '2596', '0'), +('6', '34', '9', '4406', '2081', '0'), +('6', '34', '15', '10150', '3004', '0'), +('6', '34', '15', '14631', '2464', '0'), +('6', '34', '15', '10163', '2300', '0'), +('6', '34', '15', '14651', '2224', '0'), +('6', '34', '20', '11684', '10822', '0'), +('6', '34', '20', '11666', '8359', '0'), +('6', '34', '20', '2742', '5169', '0'), +('6', '34', '20', '2288', '4478', '0'), +('6', '34', '12', '2291', '3830', '0'), +('6', '34', '12', '20655', '3443', '0'), +('6', '34', '12', '2923', '3074', '0'), +('6', '34', '12', '4345', '2426', '0'), +('6', '34', '18', '2292', '2484', '0'), +('6', '34', '18', '3806', '2316', '0'), +('6', '34', '18', '2461', '1835', '0'), +('6', '34', '18', '4410', '1142', '0'), +('6', '34', '19', '4407', '3757', '0'), +('6', '34', '19', '68239', '3156', '0'), +('6', '34', '19', '2293', '2467', '0'), +('6', '34', '19', '1368', '2016', '0'), +('6', '34', '13', '14555', '9210', '0'), +('6', '34', '13', '6411', '8861', '0'), +('6', '34', '13', '11683', '8704', '0'), +('6', '34', '13', '11563', '6466', '0'), +('6', '34', '14', '14555', '9210', '0'), +('6', '34', '14', '10335', '7382', '0'), +('6', '34', '14', '10333', '5300', '0'), +('6', '34', '14', '13991', '5107', '0'), +('6', '34', '11', '9246', '4119', '0'), +('6', '34', '11', '14762', '2204', '0'), +('6', '34', '11', '16941', '821', '0'), +('6', '34', '11', '20677', '450', '0'), +('6', '35', '22', '9246', '0', '0'), +('6', '35', '22', '10323', '0', '0'), +('6', '35', '22', '44492', '0', '0'), +('6', '35', '22', '13101', '0', '0'), +('6', '35', '1', '12801', '4762', '0'), +('6', '35', '1', '14702', '3750', '0'), +('6', '35', '1', '14701', '2862', '0'), +('6', '35', '1', '30361', '2640', '0'), +('6', '35', '2', '10143', '5368', '0'), +('6', '35', '2', '30363', '3700', '0'), +('6', '35', '2', '2294', '2885', '0'), +('6', '35', '2', '2191', '2608', '0'), +('6', '35', '3', '11052', '6342', '0'), +('6', '35', '3', '2706', '5486', '0'), +('6', '35', '3', '4505', '2990', '0'), +('6', '35', '3', '14695', '2968', '0'), +('6', '35', '5', '14703', '6050', '0'), +('6', '35', '5', '68291', '3527', '0'), +('6', '35', '5', '14700', '3318', '0'), +('6', '35', '5', '10146', '3299', '0'), +('6', '35', '8', '11603', '12116', '0'), +('6', '35', '8', '2349', '3554', '0'), +('6', '35', '8', '1363', '2510', '0'), +('6', '35', '8', '2913', '1883', '0'), +('6', '35', '6', '2705', '6732', '0'), +('6', '35', '6', '1557', '5310', '0'), +('6', '35', '6', '1904', '3413', '0'), +('6', '35', '6', '1401', '2174', '0'), +('6', '35', '17', '2285', '11058', '0'), +('6', '35', '17', '3802', '6043', '0'), +('6', '35', '17', '4342', '4355', '0'), +('6', '35', '17', '2405', '2206', '0'), +('6', '35', '7', '31809', '3817', '0'), +('6', '35', '7', '2289', '3021', '0'), +('6', '35', '7', '1362', '2624', '0'), +('6', '35', '7', '1321', '1746', '0'), +('6', '35', '9', '3804', '5755', '0'), +('6', '35', '9', '1541', '5200', '0'), +('6', '35', '9', '2290', '2657', '0'), +('6', '35', '9', '4406', '2142', '0'), +('6', '35', '15', '10150', '3004', '0'), +('6', '35', '15', '14631', '2537', '0'), +('6', '35', '15', '10163', '2300', '0'), +('6', '35', '15', '14651', '2224', '0'), +('6', '35', '20', '11684', '10919', '0'), +('6', '35', '20', '11666', '8361', '0'), +('6', '35', '20', '2742', '5172', '0'), +('6', '35', '20', '2288', '4478', '0'), +('6', '35', '12', '2291', '3830', '0'), +('6', '35', '12', '20655', '3468', '0'), +('6', '35', '12', '2923', '3074', '0'), +('6', '35', '12', '4345', '2486', '0'), +('6', '35', '18', '2292', '2532', '0'), +('6', '35', '18', '3806', '2376', '0'), +('6', '35', '18', '2461', '1883', '0'), +('6', '35', '18', '4410', '1142', '0'), +('6', '35', '19', '4407', '3865', '0'), +('6', '35', '19', '68239', '3192', '0'), +('6', '35', '19', '2293', '2503', '0'), +('6', '35', '19', '1368', '2016', '0'), +('6', '35', '13', '14555', '9451', '0'), +('6', '35', '13', '6411', '8970', '0'), +('6', '35', '13', '11683', '8812', '0'), +('6', '35', '13', '11563', '6538', '0'), +('6', '35', '14', '14555', '9451', '0'), +('6', '35', '14', '10335', '7600', '0'), +('6', '35', '14', '10333', '5300', '0'), +('6', '35', '14', '13991', '5228', '0'), +('6', '35', '11', '9246', '4240', '0'), +('6', '35', '11', '14762', '2204', '0'), +('6', '35', '11', '16941', '846', '0'), +('6', '35', '11', '60396', '453', '0'), +('6', '36', '22', '9246', '0', '0'), +('6', '36', '22', '10323', '0', '0'), +('6', '36', '22', '44492', '0', '0'), +('6', '36', '22', '13101', '0', '0'), +('6', '36', '1', '12801', '4762', '0'), +('6', '36', '1', '14702', '3750', '0'), +('6', '36', '1', '14701', '2862', '0'), +('6', '36', '1', '30361', '2640', '0'), +('6', '36', '2', '10143', '5368', '0'), +('6', '36', '2', '30363', '3700', '0'), +('6', '36', '2', '2294', '2910', '0'), +('6', '36', '2', '2191', '2681', '0'), +('6', '36', '3', '11052', '6523', '0'), +('6', '36', '3', '2706', '5607', '0'), +('6', '36', '3', '4505', '3074', '0'), +('6', '36', '3', '14695', '3053', '0'), +('6', '36', '5', '14703', '6050', '0'), +('6', '36', '5', '68291', '3576', '0'), +('6', '36', '5', '10146', '3335', '0'), +('6', '36', '5', '14700', '3318', '0'), +('6', '36', '8', '11603', '12224', '0'), +('6', '36', '8', '2349', '3554', '0'), +('6', '36', '8', '1363', '2510', '0'), +('6', '36', '8', '2913', '1932', '0'), +('6', '36', '6', '2705', '6781', '0'), +('6', '36', '6', '1557', '5310', '0'), +('6', '36', '6', '1904', '3509', '0'), +('6', '36', '6', '1367', '2199', '0'), +('6', '36', '17', '2285', '11106', '0'), +('6', '36', '17', '3802', '6203', '0'), +('6', '36', '17', '4342', '4476', '0'), +('6', '36', '17', '2405', '2267', '0'), +('6', '36', '7', '31809', '3853', '0'), +('6', '36', '7', '2289', '3070', '0'), +('6', '36', '7', '1362', '2624', '0'), +('6', '36', '7', '1321', '1746', '0'), +('6', '36', '9', '3804', '5864', '0'), +('6', '36', '9', '1541', '5321', '0'), +('6', '36', '9', '2290', '2718', '0'), +('6', '36', '9', '4406', '2202', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '36', '15', '10150', '3004', '0'), +('6', '36', '15', '14631', '2609', '0'), +('6', '36', '15', '10163', '2300', '0'), +('6', '36', '15', '14651', '2224', '0'), +('6', '36', '20', '11684', '11015', '0'), +('6', '36', '20', '11666', '8363', '0'), +('6', '36', '20', '2742', '5175', '0'), +('6', '36', '20', '2288', '4478', '0'), +('6', '36', '12', '2291', '3830', '0'), +('6', '36', '12', '20655', '3493', '0'), +('6', '36', '12', '2923', '3074', '0'), +('6', '36', '12', '4345', '2547', '0'), +('6', '36', '18', '2292', '2581', '0'), +('6', '36', '18', '3806', '2436', '0'), +('6', '36', '18', '2461', '1932', '0'), +('6', '36', '18', '4410', '1142', '0'), +('6', '36', '19', '4407', '3974', '0'), +('6', '36', '19', '68239', '3228', '0'), +('6', '36', '19', '2293', '2540', '0'), +('6', '36', '19', '1368', '2016', '0'), +('6', '36', '13', '14555', '9693', '0'), +('6', '36', '13', '6411', '9079', '0'), +('6', '36', '13', '11683', '8921', '0'), +('6', '36', '13', '11563', '6611', '0'), +('6', '36', '14', '14555', '9693', '0'), +('6', '36', '14', '10335', '7817', '0'), +('6', '36', '14', '13991', '5349', '0'), +('6', '36', '14', '10333', '5300', '0'), +('6', '36', '11', '9246', '4361', '0'), +('6', '36', '11', '14762', '2204', '0'), +('6', '36', '11', '16941', '870', '0'), +('6', '36', '11', '60396', '465', '0'), +('6', '37', '22', '9246', '0', '0'), +('6', '37', '22', '10323', '0', '0'), +('6', '37', '22', '44492', '0', '0'), +('6', '37', '22', '13101', '0', '0'), +('6', '37', '1', '12801', '4762', '0'), +('6', '37', '1', '14702', '3750', '0'), +('6', '37', '1', '14701', '2862', '0'), +('6', '37', '1', '30361', '2640', '0'), +('6', '37', '2', '10143', '5368', '0'), +('6', '37', '2', '30363', '3700', '0'), +('6', '37', '2', '2294', '2934', '0'), +('6', '37', '2', '2191', '2753', '0'), +('6', '37', '3', '11052', '6704', '0'), +('6', '37', '3', '2706', '5728', '0'), +('6', '37', '3', '4505', '3159', '0'), +('6', '37', '3', '14695', '3137', '0'), +('6', '37', '5', '14703', '6050', '0'), +('6', '37', '5', '68291', '3624', '0'), +('6', '37', '5', '10146', '3371', '0'), +('6', '37', '5', '14700', '3318', '0'), +('6', '37', '8', '11603', '12333', '0'), +('6', '37', '8', '2349', '3554', '0'), +('6', '37', '8', '1363', '2510', '0'), +('6', '37', '8', '2913', '1980', '0'), +('6', '37', '6', '2705', '6829', '0'), +('6', '37', '6', '1557', '5310', '0'), +('6', '37', '6', '1904', '3606', '0'), +('6', '37', '6', '1367', '2259', '0'), +('6', '37', '17', '2285', '11154', '0'), +('6', '37', '17', '3802', '6363', '0'), +('6', '37', '17', '4342', '4596', '0'), +('6', '37', '17', '2405', '2329', '0'), +('6', '37', '7', '31809', '3889', '0'), +('6', '37', '7', '2289', '3118', '0'), +('6', '37', '7', '1362', '2624', '0'), +('6', '37', '7', '1321', '1746', '0'), +('6', '37', '9', '3804', '5973', '0'), +('6', '37', '9', '1541', '5442', '0'), +('6', '37', '9', '2290', '2779', '0'), +('6', '37', '9', '4406', '2263', '0'), +('6', '37', '15', '10150', '3004', '0'), +('6', '37', '15', '14631', '2682', '0'), +('6', '37', '15', '10163', '2300', '0'), +('6', '37', '15', '14651', '2224', '0'), +('6', '37', '20', '11684', '11112', '0'), +('6', '37', '20', '11666', '8365', '0'), +('6', '37', '20', '2742', '5178', '0'), +('6', '37', '20', '2288', '4478', '0'), +('6', '37', '12', '2291', '3830', '0'), +('6', '37', '12', '20655', '3518', '0'), +('6', '37', '12', '2923', '3074', '0'), +('6', '37', '12', '4345', '2607', '0'), +('6', '37', '18', '2292', '2629', '0'), +('6', '37', '18', '3806', '2497', '0'), +('6', '37', '18', '2461', '1980', '0'), +('6', '37', '18', '4410', '1142', '0'), +('6', '37', '19', '4407', '4083', '0'), +('6', '37', '19', '68239', '3264', '0'), +('6', '37', '19', '2293', '2576', '0'), +('6', '37', '19', '1368', '2016', '0'), +('6', '37', '13', '14555', '9934', '0'), +('6', '37', '13', '6411', '9188', '0'), +('6', '37', '13', '11683', '9030', '0'), +('6', '37', '13', '11563', '6683', '0'), +('6', '37', '14', '14555', '9934', '0'), +('6', '37', '14', '10335', '8034', '0'), +('6', '37', '14', '13991', '5470', '0'), +('6', '37', '14', '10333', '5300', '0'), +('6', '37', '11', '9246', '4482', '0'), +('6', '37', '11', '14762', '2204', '0'), +('6', '37', '11', '16941', '894', '0'), +('6', '37', '11', '60396', '477', '0'), +('6', '38', '22', '9246', '0', '0'), +('6', '38', '22', '10323', '0', '0'), +('6', '38', '22', '44492', '0', '0'), +('6', '38', '22', '13101', '0', '0'), +('6', '38', '1', '12801', '4762', '0'), +('6', '38', '1', '14702', '3750', '0'), +('6', '38', '1', '14701', '2862', '0'), +('6', '38', '1', '30361', '2640', '0'), +('6', '38', '2', '10143', '5368', '0'), +('6', '38', '2', '30363', '3700', '0'), +('6', '38', '2', '2294', '2958', '0'), +('6', '38', '2', '2191', '2826', '0'), +('6', '38', '3', '11052', '6886', '0'), +('6', '38', '3', '2706', '5849', '0'), +('6', '38', '3', '4505', '3243', '0'), +('6', '38', '3', '14695', '3222', '0'), +('6', '38', '5', '14703', '6050', '0'), +('6', '38', '5', '68291', '3672', '0'), +('6', '38', '5', '10146', '3407', '0'), +('6', '38', '5', '14700', '3318', '0'), +('6', '38', '8', '11603', '12442', '0'), +('6', '38', '8', '2349', '3554', '0'), +('6', '38', '8', '1363', '2510', '0'), +('6', '38', '8', '2913', '2028', '0'), +('6', '38', '6', '2705', '6877', '0'), +('6', '38', '6', '1557', '5310', '0'), +('6', '38', '6', '1904', '3703', '0'), +('6', '38', '6', '1367', '2319', '0'), +('6', '38', '17', '2285', '11203', '0'), +('6', '38', '17', '3802', '6522', '0'), +('6', '38', '17', '4342', '4717', '0'), +('6', '38', '17', '2405', '2390', '0'), +('6', '38', '7', '31809', '3925', '0'), +('6', '38', '7', '2289', '3166', '0'), +('6', '38', '7', '1362', '2624', '0'), +('6', '38', '7', '1321', '1746', '0'), +('6', '38', '9', '3804', '6082', '0'), +('6', '38', '9', '1541', '5563', '0'), +('6', '38', '9', '2290', '2840', '0'), +('6', '38', '9', '4406', '2323', '0'), +('6', '38', '15', '10150', '3004', '0'), +('6', '38', '15', '14631', '2754', '0'), +('6', '38', '15', '10163', '2300', '0'), +('6', '38', '15', '14651', '2224', '0'), +('6', '38', '20', '11684', '11209', '0'), +('6', '38', '20', '11666', '8367', '0'), +('6', '38', '20', '2742', '5181', '0'), +('6', '38', '20', '2288', '4478', '0'), +('6', '38', '12', '2291', '3830', '0'), +('6', '38', '12', '20655', '3543', '0'), +('6', '38', '12', '2923', '3074', '0'), +('6', '38', '12', '4345', '2668', '0'), +('6', '38', '18', '2292', '2677', '0'), +('6', '38', '18', '3806', '2557', '0'), +('6', '38', '18', '2461', '2028', '0'), +('6', '38', '18', '4410', '1142', '0'), +('6', '38', '19', '4407', '4192', '0'), +('6', '38', '19', '68239', '3301', '0'), +('6', '38', '19', '2293', '2612', '0'), +('6', '38', '19', '1368', '2016', '0'), +('6', '38', '13', '14555', '10176', '0'), +('6', '38', '13', '6411', '9296', '0'), +('6', '38', '13', '11683', '9139', '0'), +('6', '38', '13', '11563', '6756', '0'), +('6', '38', '14', '14555', '10176', '0'), +('6', '38', '14', '10335', '8252', '0'), +('6', '38', '14', '13991', '5590', '0'), +('6', '38', '14', '10333', '5300', '0'), +('6', '38', '11', '9246', '4602', '0'), +('6', '38', '11', '14762', '2204', '0'), +('6', '38', '11', '16941', '918', '0'), +('6', '38', '11', '60396', '489', '0'), +('6', '39', '22', '9246', '0', '0'), +('6', '39', '22', '10323', '0', '0'), +('6', '39', '22', '44492', '0', '0'), +('6', '39', '22', '13101', '0', '0'), +('6', '39', '1', '12801', '4762', '0'), +('6', '39', '1', '14702', '3750', '0'), +('6', '39', '1', '14701', '2862', '0'), +('6', '39', '1', '30361', '2640', '0'), +('6', '39', '2', '10143', '5368', '0'), +('6', '39', '2', '30363', '3700', '0'), +('6', '39', '2', '2294', '2982', '0'), +('6', '39', '2', '2191', '2898', '0'), +('6', '39', '3', '11052', '7067', '0'), +('6', '39', '3', '2706', '5970', '0'), +('6', '39', '3', '4505', '3328', '0'), +('6', '39', '3', '14695', '3306', '0'), +('6', '39', '5', '14703', '6050', '0'), +('6', '39', '5', '68291', '3721', '0'), +('6', '39', '5', '10146', '3444', '0'), +('6', '39', '5', '14700', '3318', '0'), +('6', '39', '8', '11603', '12550', '0'), +('6', '39', '8', '2349', '3554', '0'), +('6', '39', '8', '1363', '2510', '0'), +('6', '39', '8', '2913', '2077', '0'), +('6', '39', '6', '2705', '6926', '0'), +('6', '39', '6', '1557', '5310', '0'), +('6', '39', '6', '1904', '3799', '0'), +('6', '39', '6', '1367', '2380', '0'), +('6', '39', '17', '2285', '11251', '0'), +('6', '39', '17', '3802', '6682', '0'), +('6', '39', '17', '4342', '4838', '0'), +('6', '39', '17', '2405', '2451', '0'), +('6', '39', '7', '31809', '3962', '0'), +('6', '39', '7', '2289', '3215', '0'), +('6', '39', '7', '1362', '2624', '0'), +('6', '39', '7', '1321', '1746', '0'), +('6', '39', '9', '3804', '6190', '0'), +('6', '39', '9', '1541', '5684', '0'), +('6', '39', '9', '2290', '2901', '0'), +('6', '39', '9', '4406', '2383', '0'), +('6', '39', '15', '10150', '3004', '0'), +('6', '39', '15', '14631', '2827', '0'), +('6', '39', '15', '10163', '2300', '0'), +('6', '39', '15', '14651', '2224', '0'), +('6', '39', '20', '11684', '11305', '0'), +('6', '39', '20', '11666', '8369', '0'), +('6', '39', '20', '2742', '5184', '0'), +('6', '39', '20', '2288', '4478', '0'), +('6', '39', '12', '2291', '3830', '0'), +('6', '39', '12', '20655', '3567', '0'), +('6', '39', '12', '2923', '3074', '0'), +('6', '39', '12', '4345', '2728', '0'), +('6', '39', '18', '2292', '2726', '0'), +('6', '39', '18', '3806', '2618', '0'), +('6', '39', '18', '2461', '2077', '0'), +('6', '39', '18', '4410', '1142', '0'), +('6', '39', '19', '4407', '4300', '0'), +('6', '39', '19', '68239', '3337', '0'), +('6', '39', '19', '2293', '2648', '0'), +('6', '39', '19', '1368', '2016', '0'), +('6', '39', '13', '14555', '10418', '0'), +('6', '39', '13', '6411', '9405', '0'), +('6', '39', '13', '11683', '9247', '0'), +('6', '39', '13', '11563', '6828', '0'), +('6', '39', '14', '14555', '10418', '0'), +('6', '39', '14', '10335', '8469', '0'), +('6', '39', '14', '13991', '5711', '0'), +('6', '39', '14', '10333', '5300', '0'), +('6', '39', '11', '9246', '4723', '0'), +('6', '39', '11', '14762', '2204', '0'), +('6', '39', '11', '16941', '942', '0'), +('6', '39', '11', '60396', '501', '0'), +('6', '40', '22', '9246', '0', '0'), +('6', '40', '22', '10323', '0', '0'), +('6', '40', '22', '44492', '0', '0'), +('6', '40', '22', '13101', '0', '0'), +('6', '40', '1', '12801', '4762', '0'), +('6', '40', '1', '14702', '3750', '0'), +('6', '40', '1', '14701', '2862', '0'), +('6', '40', '1', '30361', '2640', '0'), +('6', '40', '2', '10143', '5368', '0'), +('6', '40', '2', '30363', '3700', '0'), +('6', '40', '2', '2294', '3006', '0'), +('6', '40', '2', '2191', '2970', '0'), +('6', '40', '3', '11052', '7248', '0'), +('6', '40', '3', '2706', '6090', '0'), +('6', '40', '3', '4505', '3413', '0'), +('6', '40', '3', '14695', '3391', '0'), +('6', '40', '5', '14703', '6050', '0'), +('6', '40', '5', '68291', '3769', '0'), +('6', '40', '5', '10146', '3480', '0'), +('6', '40', '5', '14700', '3318', '0'), +('6', '40', '8', '11603', '12659', '0'), +('6', '40', '8', '2349', '3554', '0'), +('6', '40', '8', '1363', '2510', '0'), +('6', '40', '8', '2913', '2125', '0'), +('6', '40', '6', '2705', '6974', '0'), +('6', '40', '6', '1557', '5310', '0'), +('6', '40', '6', '1904', '3896', '0'), +('6', '40', '6', '1367', '2440', '0'), +('6', '40', '17', '2285', '11299', '0'), +('6', '40', '17', '3802', '6842', '0'), +('6', '40', '17', '4342', '4959', '0'), +('6', '40', '17', '2405', '2513', '0'), +('6', '40', '7', '31809', '3998', '0'), +('6', '40', '7', '2289', '3263', '0'), +('6', '40', '7', '1362', '2624', '0'), +('6', '40', '7', '1321', '1746', '0'), +('6', '40', '9', '3804', '6299', '0'), +('6', '40', '9', '1541', '5804', '0'), +('6', '40', '9', '2290', '2962', '0'), +('6', '40', '9', '4406', '2444', '0'), +('6', '40', '15', '10150', '3004', '0'), +('6', '40', '15', '14631', '2899', '0'), +('6', '40', '15', '10163', '2300', '0'), +('6', '40', '15', '14651', '2224', '0'), +('6', '40', '20', '11684', '11402', '0'), +('6', '40', '20', '11666', '8371', '0'), +('6', '40', '20', '2742', '5187', '0'), +('6', '40', '20', '2288', '4478', '0'), +('6', '40', '12', '2291', '3830', '0'), +('6', '40', '12', '20655', '3592', '0'), +('6', '40', '12', '2923', '3074', '0'), +('6', '40', '12', '4345', '2788', '0'), +('6', '40', '18', '2292', '2774', '0'), +('6', '40', '18', '3806', '2678', '0'), +('6', '40', '18', '2461', '2125', '0'), +('6', '40', '18', '4410', '1142', '0'), +('6', '40', '19', '4407', '4409', '0'), +('6', '40', '19', '68239', '3373', '0'), +('6', '40', '19', '2293', '2685', '0'), +('6', '40', '19', '1368', '2016', '0'), +('6', '40', '13', '14555', '10659', '0'), +('6', '40', '13', '6411', '9514', '0'), +('6', '40', '13', '11683', '9356', '0'), +('6', '40', '13', '11563', '6901', '0'), +('6', '40', '14', '14555', '10659', '0'), +('6', '40', '14', '10335', '8687', '0'), +('6', '40', '14', '13991', '5832', '0'), +('6', '40', '14', '10333', '5300', '0'), +('6', '40', '11', '9246', '4844', '0'), +('6', '40', '11', '14762', '2204', '0'), +('6', '40', '11', '16941', '966', '0'), +('6', '40', '11', '60396', '513', '0'), +('6', '41', '22', '9246', '0', '0'), +('6', '41', '22', '10323', '0', '0'), +('6', '41', '22', '44492', '0', '0'), +('6', '41', '22', '13101', '0', '0'), +('6', '41', '1', '12801', '4762', '0'), +('6', '41', '1', '14702', '3750', '0'), +('6', '41', '1', '14701', '2862', '0'), +('6', '41', '1', '30361', '2640', '0'), +('6', '41', '2', '10143', '5368', '0'), +('6', '41', '2', '30363', '3700', '0'), +('6', '41', '2', '2191', '3043', '0'), +('6', '41', '2', '2294', '3030', '0'), +('6', '41', '3', '11052', '7429', '0'), +('6', '41', '3', '2706', '6211', '0'), +('6', '41', '3', '4505', '3497', '0'), +('6', '41', '3', '14695', '3475', '0'), +('6', '41', '5', '14703', '6050', '0'), +('6', '41', '5', '68291', '3817', '0'), +('6', '41', '5', '10146', '3516', '0'), +('6', '41', '5', '14700', '3318', '0'), +('6', '41', '8', '11603', '12768', '0'), +('6', '41', '8', '2349', '3554', '0'), +('6', '41', '8', '1363', '2510', '0'), +('6', '41', '8', '2913', '2173', '0'), +('6', '41', '6', '2705', '7022', '0'), +('6', '41', '6', '1557', '5310', '0'), +('6', '41', '6', '1904', '3992', '0'), +('6', '41', '6', '1367', '2501', '0'), +('6', '41', '17', '2285', '11348', '0'), +('6', '41', '17', '3802', '7002', '0'), +('6', '41', '17', '4342', '5080', '0'), +('6', '41', '17', '2405', '2574', '0'), +('6', '41', '7', '31809', '4034', '0'), +('6', '41', '7', '2289', '3311', '0'), +('6', '41', '7', '1362', '2624', '0'), +('6', '41', '7', '1321', '1746', '0'), +('6', '41', '9', '3804', '6408', '0'), +('6', '41', '9', '1541', '5925', '0'), +('6', '41', '9', '2290', '3023', '0'), +('6', '41', '9', '4406', '2504', '0'), +('6', '41', '15', '10150', '3004', '0'), +('6', '41', '15', '14631', '2972', '0'), +('6', '41', '15', '10163', '2300', '0'), +('6', '41', '15', '14651', '2224', '0'), +('6', '41', '20', '11684', '11498', '0'), +('6', '41', '20', '11666', '8374', '0'), +('6', '41', '20', '2742', '5190', '0'), +('6', '41', '20', '2288', '4478', '0'), +('6', '41', '12', '2291', '3830', '0'), +('6', '41', '12', '20655', '3617', '0'), +('6', '41', '12', '2923', '3074', '0'), +('6', '41', '12', '4345', '2849', '0'), +('6', '41', '18', '2292', '2822', '0'), +('6', '41', '18', '3806', '2738', '0'), +('6', '41', '18', '2461', '2173', '0'), +('6', '41', '18', '4410', '1142', '0'), +('6', '41', '19', '4407', '4518', '0'), +('6', '41', '19', '68239', '3409', '0'), +('6', '41', '19', '2293', '2721', '0'), +('6', '41', '19', '1368', '2016', '0'), +('6', '41', '13', '14555', '10901', '0'), +('6', '41', '13', '6411', '9622', '0'), +('6', '41', '13', '11683', '9465', '0'), +('6', '41', '13', '11563', '6973', '0'), +('6', '41', '14', '14555', '10901', '0'), +('6', '41', '14', '10335', '8904', '0'), +('6', '41', '14', '13991', '5953', '0'), +('6', '41', '14', '10333', '5300', '0'), +('6', '41', '11', '9246', '4965', '0'), +('6', '41', '11', '14762', '2204', '0'), +('6', '41', '11', '16941', '991', '0'), +('6', '41', '11', '60396', '525', '0'), +('6', '42', '22', '9246', '0', '0'), +('6', '42', '22', '10323', '0', '0'), +('6', '42', '22', '44492', '0', '0'), +('6', '42', '22', '13101', '0', '0'), +('6', '42', '1', '12801', '4762', '0'), +('6', '42', '1', '14702', '3750', '0'), +('6', '42', '1', '14701', '2862', '0'), +('6', '42', '1', '30361', '2640', '0'), +('6', '42', '2', '10143', '5368', '0'), +('6', '42', '2', '30363', '3700', '0'), +('6', '42', '2', '2191', '3115', '0'), +('6', '42', '2', '2294', '3055', '0'), +('6', '42', '3', '11052', '7610', '0'), +('6', '42', '3', '2706', '6332', '0'), +('6', '42', '3', '4505', '3582', '0'), +('6', '42', '3', '14695', '3560', '0'), +('6', '42', '5', '14703', '6050', '0'), +('6', '42', '5', '68291', '3866', '0'), +('6', '42', '5', '10146', '3552', '0'), +('6', '42', '5', '14700', '3318', '0'), +('6', '42', '8', '11603', '12877', '0'), +('6', '42', '8', '2349', '3554', '0'), +('6', '42', '8', '1363', '2510', '0'), +('6', '42', '8', '2913', '2222', '0'), +('6', '42', '6', '2705', '7071', '0'), +('6', '42', '6', '1557', '5310', '0'), +('6', '42', '6', '1904', '4089', '0'), +('6', '42', '6', '1367', '2561', '0'), +('6', '42', '17', '2285', '11396', '0'), +('6', '42', '17', '3802', '7161', '0'), +('6', '42', '17', '4342', '5200', '0'), +('6', '42', '17', '2405', '2635', '0'), +('6', '42', '7', '31809', '4070', '0'), +('6', '42', '7', '2289', '3360', '0'), +('6', '42', '7', '1362', '2624', '0'), +('6', '42', '7', '1321', '1746', '0'), +('6', '42', '9', '3804', '6516', '0'), +('6', '42', '9', '1541', '6046', '0'), +('6', '42', '9', '2290', '3084', '0'), +('6', '42', '9', '4406', '2565', '0'), +('6', '42', '15', '14631', '3044', '0'), +('6', '42', '15', '10150', '3004', '0'), +('6', '42', '15', '10163', '2300', '0'), +('6', '42', '15', '14651', '2224', '0'), +('6', '42', '20', '11684', '11595', '0'), +('6', '42', '20', '11666', '8376', '0'), +('6', '42', '20', '2742', '5193', '0'), +('6', '42', '20', '2288', '4478', '0'), +('6', '42', '12', '2291', '3830', '0'), +('6', '42', '12', '20655', '3642', '0'), +('6', '42', '12', '2923', '3074', '0'), +('6', '42', '12', '4345', '2909', '0'), +('6', '42', '18', '2292', '2871', '0'), +('6', '42', '18', '3806', '2799', '0'), +('6', '42', '18', '2461', '2222', '0'), +('6', '42', '18', '4410', '1142', '0'), +('6', '42', '19', '4407', '4626', '0'), +('6', '42', '19', '68239', '3446', '0'), +('6', '42', '19', '2293', '2757', '0'), +('6', '42', '19', '1368', '2016', '0'), +('6', '42', '13', '14555', '11142', '0'), +('6', '42', '13', '6411', '9731', '0'), +('6', '42', '13', '11683', '9573', '0'), +('6', '42', '13', '11563', '7046', '0'), +('6', '42', '14', '14555', '11142', '0'), +('6', '42', '14', '10335', '9122', '0'), +('6', '42', '14', '13991', '6074', '0'), +('6', '42', '14', '10333', '5300', '0'), +('6', '42', '11', '9246', '5086', '0'), +('6', '42', '11', '14762', '2204', '0'), +('6', '42', '11', '16941', '1015', '0'), +('6', '42', '11', '60396', '537', '0'), +('6', '43', '22', '9246', '0', '0'), +('6', '43', '22', '10323', '0', '0'), +('6', '43', '22', '44492', '0', '0'), +('6', '43', '22', '13101', '0', '0'), +('6', '43', '1', '12801', '4762', '0'), +('6', '43', '1', '14702', '3750', '0'), +('6', '43', '1', '14701', '2862', '0'), +('6', '43', '1', '30361', '2640', '0'), +('6', '43', '2', '10143', '5368', '0'), +('6', '43', '2', '30363', '3700', '0'), +('6', '43', '2', '2191', '3188', '0'), +('6', '43', '2', '2294', '3079', '0'), +('6', '43', '3', '11052', '7792', '0'), +('6', '43', '3', '2706', '6453', '0'), +('6', '43', '3', '4505', '3666', '0'), +('6', '43', '3', '14695', '3645', '0'), +('6', '43', '5', '14703', '6050', '0'), +('6', '43', '5', '68291', '3914', '0'), +('6', '43', '5', '10146', '3589', '0'), +('6', '43', '5', '14700', '3318', '0'), +('6', '43', '8', '11603', '12985', '0'), +('6', '43', '8', '2349', '3554', '0'), +('6', '43', '8', '1363', '2510', '0'), +('6', '43', '8', '2913', '2270', '0'), +('6', '43', '6', '2705', '7119', '0'), +('6', '43', '6', '1557', '5310', '0'), +('6', '43', '6', '1904', '4186', '0'), +('6', '43', '6', '1367', '2621', '0'), +('6', '43', '17', '2285', '11444', '0'), +('6', '43', '17', '3802', '7321', '0'), +('6', '43', '17', '4342', '5321', '0'), +('6', '43', '17', '2405', '2697', '0'), +('6', '43', '7', '31809', '4107', '0'), +('6', '43', '7', '2289', '3408', '0'), +('6', '43', '7', '1362', '2624', '0'), +('6', '43', '7', '1321', '1746', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '43', '9', '3804', '6625', '0'), +('6', '43', '9', '1541', '6167', '0'), +('6', '43', '9', '2290', '3145', '0'), +('6', '43', '9', '4406', '2625', '0'), +('6', '43', '15', '14631', '3117', '0'), +('6', '43', '15', '10150', '3004', '0'), +('6', '43', '15', '10163', '2300', '0'), +('6', '43', '15', '14651', '2224', '0'), +('6', '43', '20', '11684', '11692', '0'), +('6', '43', '20', '11666', '8378', '0'), +('6', '43', '20', '2742', '5196', '0'), +('6', '43', '20', '2288', '4478', '0'), +('6', '43', '12', '2291', '3830', '0'), +('6', '43', '12', '20655', '3666', '0'), +('6', '43', '12', '2923', '3074', '0'), +('6', '43', '12', '4345', '2970', '0'), +('6', '43', '18', '2292', '2919', '0'), +('6', '43', '18', '3806', '2859', '0'), +('6', '43', '18', '2461', '2270', '0'), +('6', '43', '18', '4410', '1142', '0'), +('6', '43', '19', '4407', '4735', '0'), +('6', '43', '19', '68239', '3482', '0'), +('6', '43', '19', '2293', '2793', '0'), +('6', '43', '19', '1368', '2016', '0'), +('6', '43', '13', '14555', '11384', '0'), +('6', '43', '13', '6411', '9840', '0'), +('6', '43', '13', '11683', '9682', '0'), +('6', '43', '13', '11563', '7118', '0'), +('6', '43', '14', '14555', '11384', '0'), +('6', '43', '14', '10335', '9339', '0'), +('6', '43', '14', '13991', '6194', '0'), +('6', '43', '14', '10333', '5300', '0'), +('6', '43', '11', '9246', '5206', '0'), +('6', '43', '11', '14762', '2204', '0'), +('6', '43', '11', '16941', '1039', '0'), +('6', '43', '11', '60396', '549', '0'), +('6', '44', '22', '9246', '0', '0'), +('6', '44', '22', '10323', '0', '0'), +('6', '44', '22', '44492', '0', '0'), +('6', '44', '22', '13101', '0', '0'), +('6', '44', '1', '12801', '4762', '0'), +('6', '44', '1', '14702', '3750', '0'), +('6', '44', '1', '14701', '2862', '0'), +('6', '44', '1', '30361', '2640', '0'), +('6', '44', '2', '10143', '5368', '0'), +('6', '44', '2', '30363', '3700', '0'), +('6', '44', '2', '2191', '3260', '0'), +('6', '44', '2', '2294', '3103', '0'), +('6', '44', '3', '11052', '7973', '0'), +('6', '44', '3', '2706', '6574', '0'), +('6', '44', '3', '4505', '3751', '0'), +('6', '44', '3', '14695', '3729', '0'), +('6', '44', '5', '14703', '6050', '0'), +('6', '44', '5', '68291', '3962', '0'), +('6', '44', '5', '10146', '3625', '0'), +('6', '44', '5', '14700', '3318', '0'), +('6', '44', '8', '11603', '13094', '0'), +('6', '44', '8', '2349', '3554', '0'), +('6', '44', '8', '1363', '2510', '0'), +('6', '44', '8', '2913', '2318', '0'), +('6', '44', '6', '2705', '7167', '0'), +('6', '44', '6', '1557', '5310', '0'), +('6', '44', '6', '1904', '4282', '0'), +('6', '44', '6', '1367', '2682', '0'), +('6', '44', '17', '2285', '11493', '0'), +('6', '44', '17', '3802', '7481', '0'), +('6', '44', '17', '4342', '5442', '0'), +('6', '44', '17', '2405', '2758', '0'), +('6', '44', '7', '31809', '4143', '0'), +('6', '44', '7', '2289', '3456', '0'), +('6', '44', '7', '1362', '2624', '0'), +('6', '44', '7', '1321', '1746', '0'), +('6', '44', '9', '3804', '6734', '0'), +('6', '44', '9', '1541', '6288', '0'), +('6', '44', '9', '2290', '3206', '0'), +('6', '44', '9', '4406', '2685', '0'), +('6', '44', '15', '14631', '3189', '0'), +('6', '44', '15', '10150', '3004', '0'), +('6', '44', '15', '10163', '2300', '0'), +('6', '44', '15', '14651', '2224', '0'), +('6', '44', '20', '11684', '11788', '0'), +('6', '44', '20', '11666', '8380', '0'), +('6', '44', '20', '2742', '5199', '0'), +('6', '44', '20', '2288', '4478', '0'), +('6', '44', '12', '2291', '3830', '0'), +('6', '44', '12', '20655', '3691', '0'), +('6', '44', '12', '2923', '3074', '0'), +('6', '44', '12', '4345', '3030', '0'), +('6', '44', '18', '2292', '2967', '0'), +('6', '44', '18', '3806', '2920', '0'), +('6', '44', '18', '2461', '2318', '0'), +('6', '44', '18', '4410', '1142', '0'), +('6', '44', '19', '4407', '4844', '0'), +('6', '44', '19', '68239', '3518', '0'), +('6', '44', '19', '2293', '2830', '0'), +('6', '44', '19', '1368', '2016', '0'), +('6', '44', '13', '14555', '11626', '0'), +('6', '44', '13', '6411', '9949', '0'), +('6', '44', '13', '11683', '9791', '0'), +('6', '44', '13', '11563', '7191', '0'), +('6', '44', '14', '14555', '11626', '0'), +('6', '44', '14', '10335', '9556', '0'), +('6', '44', '14', '13991', '6315', '0'), +('6', '44', '14', '9246', '5327', '0'), +('6', '44', '11', '9246', '5327', '0'), +('6', '44', '11', '14762', '2204', '0'), +('6', '44', '11', '16941', '1063', '0'), +('6', '44', '11', '60396', '562', '0'), +('6', '45', '22', '9246', '0', '0'), +('6', '45', '22', '10323', '0', '0'), +('6', '45', '22', '44492', '0', '0'), +('6', '45', '22', '13101', '0', '0'), +('6', '45', '1', '12801', '4762', '0'), +('6', '45', '1', '14702', '3750', '0'), +('6', '45', '1', '14701', '2862', '0'), +('6', '45', '1', '30361', '2640', '0'), +('6', '45', '2', '10143', '5368', '0'), +('6', '45', '2', '30363', '3700', '0'), +('6', '45', '2', '2191', '3333', '0'), +('6', '45', '2', '2294', '3127', '0'), +('6', '45', '3', '11052', '8154', '0'), +('6', '45', '3', '2706', '6694', '0'), +('6', '45', '3', '4505', '3835', '0'), +('6', '45', '3', '14695', '3814', '0'), +('6', '45', '5', '14703', '6050', '0'), +('6', '45', '5', '68291', '4011', '0'), +('6', '45', '5', '10146', '3661', '0'), +('6', '45', '5', '14700', '3318', '0'), +('6', '45', '8', '11603', '13203', '0'), +('6', '45', '8', '2349', '3554', '0'), +('6', '45', '8', '1363', '2510', '0'), +('6', '45', '8', '2913', '2367', '0'), +('6', '45', '6', '2705', '7215', '0'), +('6', '45', '6', '1557', '5310', '0'), +('6', '45', '6', '1904', '4379', '0'), +('6', '45', '6', '1367', '2742', '0'), +('6', '45', '17', '2285', '11541', '0'), +('6', '45', '17', '3802', '7641', '0'), +('6', '45', '17', '4342', '5563', '0'), +('6', '45', '17', '2405', '2819', '0'), +('6', '45', '7', '31809', '4179', '0'), +('6', '45', '7', '2289', '3505', '0'), +('6', '45', '7', '1362', '2624', '0'), +('6', '45', '7', '1321', '1746', '0'), +('6', '45', '9', '3804', '6843', '0'), +('6', '45', '9', '1541', '6408', '0'), +('6', '45', '9', '2290', '3267', '0'), +('6', '45', '9', '4406', '2746', '0'), +('6', '45', '15', '14631', '3262', '0'), +('6', '45', '15', '10150', '3004', '0'), +('6', '45', '15', '10163', '2300', '0'), +('6', '45', '15', '14651', '2224', '0'), +('6', '45', '20', '11684', '11885', '0'), +('6', '45', '20', '11666', '8382', '0'), +('6', '45', '20', '2742', '5202', '0'), +('6', '45', '20', '2288', '4478', '0'), +('6', '45', '12', '2291', '3830', '0'), +('6', '45', '12', '20655', '3716', '0'), +('6', '45', '12', '4345', '3090', '0'), +('6', '45', '12', '2923', '3074', '0'), +('6', '45', '18', '2292', '3015', '0'), +('6', '45', '18', '3806', '2980', '0'), +('6', '45', '18', '2461', '2367', '0'), +('6', '45', '18', '4410', '1142', '0'), +('6', '45', '19', '4407', '4953', '0'), +('6', '45', '19', '68239', '3554', '0'), +('6', '45', '19', '2293', '2866', '0'), +('6', '45', '19', '1368', '2016', '0'), +('6', '45', '13', '14555', '11867', '0'), +('6', '45', '13', '6411', '10057', '0'), +('6', '45', '13', '11683', '9901', '0'), +('6', '45', '13', '11563', '7263', '0'), +('6', '45', '14', '14555', '11867', '0'), +('6', '45', '14', '10335', '9774', '0'), +('6', '45', '14', '13991', '6436', '0'), +('6', '45', '14', '9246', '5448', '0'), +('6', '45', '11', '9246', '5448', '0'), +('6', '45', '11', '14762', '2204', '0'), +('6', '45', '11', '16941', '1087', '0'), +('6', '45', '11', '60396', '574', '0'), +('6', '46', '22', '9246', '0', '0'), +('6', '46', '22', '10323', '0', '0'), +('6', '46', '22', '44492', '0', '0'), +('6', '46', '22', '13101', '0', '0'), +('6', '46', '1', '12801', '4762', '0'), +('6', '46', '1', '14702', '3750', '0'), +('6', '46', '1', '14701', '2862', '0'), +('6', '46', '1', '30361', '2640', '0'), +('6', '46', '2', '10143', '5368', '0'), +('6', '46', '2', '30363', '3700', '0'), +('6', '46', '2', '2191', '3405', '0'), +('6', '46', '2', '2294', '3151', '0'), +('6', '46', '3', '11052', '8335', '0'), +('6', '46', '3', '2706', '6815', '0'), +('6', '46', '3', '4505', '3920', '0'), +('6', '46', '3', '14695', '3898', '0'), +('6', '46', '5', '14703', '6050', '0'), +('6', '46', '5', '68291', '4059', '0'), +('6', '46', '5', '10146', '3697', '0'), +('6', '46', '5', '2583', '3347', '0'), +('6', '46', '8', '11603', '13312', '0'), +('6', '46', '8', '2349', '3554', '0'), +('6', '46', '8', '1363', '2510', '0'), +('6', '46', '8', '2913', '2415', '0'), +('6', '46', '6', '2705', '7264', '0'), +('6', '46', '6', '1557', '5310', '0'), +('6', '46', '6', '1904', '4476', '0'), +('6', '46', '6', '1367', '2803', '0'), +('6', '46', '17', '2285', '11589', '0'), +('6', '46', '17', '3802', '7800', '0'), +('6', '46', '17', '4342', '5684', '0'), +('6', '46', '17', '2405', '2880', '0'), +('6', '46', '7', '31809', '4215', '0'), +('6', '46', '7', '2289', '3553', '0'), +('6', '46', '7', '1362', '2624', '0'), +('6', '46', '7', '1321', '1746', '0'), +('6', '46', '9', '3804', '6951', '0'), +('6', '46', '9', '1541', '6529', '0'), +('6', '46', '9', '2290', '3328', '0'), +('6', '46', '9', '4406', '2806', '0'), +('6', '46', '15', '14631', '3334', '0'), +('6', '46', '15', '10150', '3004', '0'), +('6', '46', '15', '10163', '2300', '0'), +('6', '46', '15', '14694', '2225', '0'), +('6', '46', '20', '11684', '11982', '0'), +('6', '46', '20', '11666', '8384', '0'), +('6', '46', '20', '2742', '5205', '0'), +('6', '46', '20', '2288', '4478', '0'), +('6', '46', '12', '2291', '3830', '0'), +('6', '46', '12', '20655', '3741', '0'), +('6', '46', '12', '4345', '3151', '0'), +('6', '46', '12', '2923', '3074', '0'), +('6', '46', '18', '2292', '3064', '0'), +('6', '46', '18', '3806', '3040', '0'), +('6', '46', '18', '2461', '2415', '0'), +('6', '46', '18', '4410', '1142', '0'), +('6', '46', '19', '4407', '5061', '0'), +('6', '46', '19', '68239', '3590', '0'), +('6', '46', '19', '2293', '2902', '0'), +('6', '46', '19', '1368', '2016', '0'), +('6', '46', '13', '14555', '12109', '0'), +('6', '46', '13', '6411', '10166', '0'), +('6', '46', '13', '11683', '10010', '0'), +('6', '46', '13', '11563', '7336', '0'), +('6', '46', '14', '14555', '12109', '0'), +('6', '46', '14', '10335', '9991', '0'), +('6', '46', '14', '13991', '6557', '0'), +('6', '46', '14', '9246', '5569', '0'), +('6', '46', '11', '9246', '5569', '0'), +('6', '46', '11', '14762', '2204', '0'), +('6', '46', '11', '16941', '1111', '0'), +('6', '46', '11', '60396', '586', '0'), +('6', '47', '22', '9246', '0', '0'), +('6', '47', '22', '10323', '0', '0'), +('6', '47', '22', '44492', '0', '0'), +('6', '47', '22', '13101', '0', '0'), +('6', '47', '1', '12801', '4762', '0'), +('6', '47', '1', '14702', '3750', '0'), +('6', '47', '1', '14701', '2862', '0'), +('6', '47', '1', '30361', '2640', '0'), +('6', '47', '2', '10143', '5368', '0'), +('6', '47', '2', '30363', '3700', '0'), +('6', '47', '2', '2191', '3478', '0'), +('6', '47', '2', '2294', '3175', '0'), +('6', '47', '3', '11052', '8516', '0'), +('6', '47', '3', '2706', '6936', '0'), +('6', '47', '3', '4505', '4005', '0'), +('6', '47', '3', '14695', '3983', '0'), +('6', '47', '5', '14703', '6050', '0'), +('6', '47', '5', '68291', '4107', '0'), +('6', '47', '5', '10146', '3733', '0'), +('6', '47', '5', '2583', '3383', '0'), +('6', '47', '8', '11603', '13420', '0'), +('6', '47', '8', '2349', '3554', '0'), +('6', '47', '8', '1363', '2510', '0'), +('6', '47', '8', '2913', '2463', '0'), +('6', '47', '6', '2705', '7312', '0'), +('6', '47', '6', '1557', '5310', '0'), +('6', '47', '6', '1904', '4572', '0'), +('6', '47', '6', '1367', '2863', '0'), +('6', '47', '17', '2285', '11637', '0'), +('6', '47', '17', '3802', '7960', '0'), +('6', '47', '17', '4342', '5804', '0'), +('6', '47', '17', '2405', '2942', '0'), +('6', '47', '7', '31809', '4252', '0'), +('6', '47', '7', '2289', '3601', '0'), +('6', '47', '7', '1362', '2624', '0'), +('6', '47', '7', '1321', '1746', '0'), +('6', '47', '9', '3804', '7060', '0'), +('6', '47', '9', '1541', '6650', '0'), +('6', '47', '9', '2290', '3389', '0'), +('6', '47', '9', '4406', '2867', '0'), +('6', '47', '15', '14631', '3407', '0'), +('6', '47', '15', '10150', '3004', '0'), +('6', '47', '15', '10163', '2300', '0'), +('6', '47', '15', '14694', '2273', '0'), +('6', '47', '20', '11684', '12078', '0'), +('6', '47', '20', '11666', '8386', '0'), +('6', '47', '20', '2742', '5208', '0'), +('6', '47', '20', '2288', '4478', '0'), +('6', '47', '12', '2291', '3830', '0'), +('6', '47', '12', '20655', '3765', '0'), +('6', '47', '12', '4345', '3211', '0'), +('6', '47', '12', '2923', '3074', '0'), +('6', '47', '18', '2292', '3112', '0'), +('6', '47', '18', '3806', '3101', '0'), +('6', '47', '18', '2461', '2463', '0'), +('6', '47', '18', '4410', '1142', '0'), +('6', '47', '19', '4407', '5170', '0'), +('6', '47', '19', '68239', '3627', '0'), +('6', '47', '19', '2293', '2938', '0'), +('6', '47', '19', '1368', '2016', '0'), +('6', '47', '13', '14555', '12350', '0'), +('6', '47', '13', '6411', '10275', '0'), +('6', '47', '13', '11683', '10119', '0'), +('6', '47', '13', '11563', '7408', '0'), +('6', '47', '14', '14555', '12350', '0'), +('6', '47', '14', '10335', '10209', '0'), +('6', '47', '14', '13991', '6678', '0'), +('6', '47', '14', '9246', '5690', '0'), +('6', '47', '11', '9246', '5690', '0'), +('6', '47', '11', '14762', '2204', '0'), +('6', '47', '11', '16941', '1136', '0'), +('6', '47', '11', '60396', '598', '0'), +('6', '48', '22', '9246', '0', '0'), +('6', '48', '22', '10323', '0', '0'), +('6', '48', '22', '44492', '0', '0'), +('6', '48', '22', '13101', '0', '0'), +('6', '48', '1', '12801', '4762', '0'), +('6', '48', '1', '14702', '3750', '0'), +('6', '48', '1', '14701', '2862', '0'), +('6', '48', '1', '30361', '2640', '0'), +('6', '48', '2', '10143', '5368', '0'), +('6', '48', '2', '30363', '3700', '0'), +('6', '48', '2', '2191', '3550', '0'), +('6', '48', '2', '2294', '3200', '0'), +('6', '48', '3', '11052', '8698', '0'), +('6', '48', '3', '2706', '7057', '0'), +('6', '48', '3', '4505', '4089', '0'), +('6', '48', '3', '14695', '4067', '0'), +('6', '48', '5', '14703', '6050', '0'), +('6', '48', '5', '68291', '4156', '0'), +('6', '48', '5', '10146', '3770', '0'), +('6', '48', '5', '2583', '3419', '0'), +('6', '48', '8', '11603', '13529', '0'), +('6', '48', '8', '2349', '3554', '0'), +('6', '48', '8', '2913', '2512', '0'), +('6', '48', '8', '1363', '2510', '0'), +('6', '48', '6', '2705', '7360', '0'), +('6', '48', '6', '1557', '5310', '0'), +('6', '48', '6', '1904', '4669', '0'), +('6', '48', '6', '1367', '2923', '0'), +('6', '48', '17', '2285', '11686', '0'), +('6', '48', '17', '3802', '8120', '0'), +('6', '48', '17', '4342', '5925', '0'), +('6', '48', '17', '2405', '3003', '0'), +('6', '48', '7', '31809', '4288', '0'), +('6', '48', '7', '2289', '3650', '0'), +('6', '48', '7', '1362', '2624', '0'), +('6', '48', '7', '1321', '1746', '0'), +('6', '48', '9', '3804', '7169', '0'), +('6', '48', '9', '1541', '6771', '0'), +('6', '48', '9', '2290', '3450', '0'), +('6', '48', '9', '4406', '2927', '0'), +('6', '48', '15', '14631', '3479', '0'), +('6', '48', '15', '10150', '3004', '0'), +('6', '48', '15', '14694', '2322', '0'), +('6', '48', '15', '10163', '2300', '0'), +('6', '48', '20', '11684', '12175', '0'), +('6', '48', '20', '11666', '8388', '0'), +('6', '48', '20', '2742', '5211', '0'), +('6', '48', '20', '2288', '4478', '0'), +('6', '48', '12', '2291', '3830', '0'), +('6', '48', '12', '20655', '3790', '0'), +('6', '48', '12', '4345', '3272', '0'), +('6', '48', '12', '2923', '3074', '0'), +('6', '48', '18', '3806', '3161', '0'), +('6', '48', '18', '2292', '3160', '0'), +('6', '48', '18', '2461', '2512', '0'), +('6', '48', '18', '4410', '1142', '0'), +('6', '48', '19', '4407', '5279', '0'), +('6', '48', '19', '68239', '3663', '0'), +('6', '48', '19', '2293', '2975', '0'), +('6', '48', '19', '1368', '2016', '0'), +('6', '48', '13', '14555', '12592', '0'), +('6', '48', '13', '6411', '10383', '0'), +('6', '48', '13', '11683', '10227', '0'), +('6', '48', '13', '11563', '7481', '0'), +('6', '48', '14', '14555', '12592', '0'), +('6', '48', '14', '10335', '10426', '0'), +('6', '48', '14', '13991', '6798', '0'), +('6', '48', '14', '9246', '5810', '0'), +('6', '48', '11', '9246', '5810', '0'), +('6', '48', '11', '14762', '2204', '0'), +('6', '48', '11', '16941', '1160', '0'), +('6', '48', '11', '60396', '610', '0'), +('6', '49', '22', '9246', '0', '0'), +('6', '49', '22', '10323', '0', '0'), +('6', '49', '22', '44492', '0', '0'), +('6', '49', '22', '13101', '0', '0'), +('6', '49', '1', '12801', '4762', '0'), +('6', '49', '1', '14702', '3750', '0'), +('6', '49', '1', '14701', '2862', '0'), +('6', '49', '1', '30361', '2640', '0'), +('6', '49', '2', '10143', '5368', '0'), +('6', '49', '2', '30363', '3700', '0'), +('6', '49', '2', '2191', '3623', '0'), +('6', '49', '2', '2294', '3224', '0'), +('6', '49', '3', '11052', '8879', '0'), +('6', '49', '3', '2706', '7178', '0'), +('6', '49', '3', '4505', '4174', '0'), +('6', '49', '3', '14695', '4152', '0'), +('6', '49', '5', '14703', '6050', '0'), +('6', '49', '5', '68291', '4204', '0'), +('6', '49', '5', '10146', '3806', '0'), +('6', '49', '5', '2583', '3455', '0'), +('6', '49', '8', '11603', '13638', '0'), +('6', '49', '8', '2349', '3554', '0'), +('6', '49', '8', '2913', '2560', '0'), +('6', '49', '8', '1363', '2510', '0'), +('6', '49', '6', '2705', '7409', '0'), +('6', '49', '6', '1557', '5310', '0'), +('6', '49', '6', '1904', '4766', '0'), +('6', '49', '6', '1367', '2984', '0'), +('6', '49', '17', '2285', '11734', '0'), +('6', '49', '17', '3802', '8280', '0'), +('6', '49', '17', '4342', '6046', '0'), +('6', '49', '17', '2405', '3064', '0'), +('6', '49', '7', '31809', '4324', '0'), +('6', '49', '7', '2289', '3698', '0'), +('6', '49', '7', '1362', '2624', '0'), +('6', '49', '7', '10336', '1779', '0'), +('6', '49', '9', '3804', '7277', '0'), +('6', '49', '9', '1541', '6892', '0'), +('6', '49', '9', '2290', '3511', '0'), +('6', '49', '9', '4406', '2987', '0'), +('6', '49', '15', '14631', '3552', '0'), +('6', '49', '15', '10150', '3004', '0'), +('6', '49', '15', '14694', '2370', '0'), +('6', '49', '15', '10163', '2300', '0'), +('6', '49', '20', '11684', '12272', '0'), +('6', '49', '20', '11666', '8390', '0'), +('6', '49', '20', '2742', '5214', '0'), +('6', '49', '20', '2288', '4478', '0'), +('6', '49', '12', '2291', '3830', '0'), +('6', '49', '12', '20655', '3815', '0'), +('6', '49', '12', '4345', '3332', '0'), +('6', '49', '12', '2923', '3074', '0'), +('6', '49', '18', '3806', '3222', '0'), +('6', '49', '18', '2292', '3209', '0'), +('6', '49', '18', '2461', '2560', '0'), +('6', '49', '18', '4410', '1142', '0'), +('6', '49', '19', '4407', '5387', '0'), +('6', '49', '19', '68239', '3699', '0'), +('6', '49', '19', '2293', '3011', '0'), +('6', '49', '19', '1368', '2016', '0'), +('6', '49', '13', '14555', '12834', '0'), +('6', '49', '13', '6411', '10492', '0'), +('6', '49', '13', '11683', '10336', '0'), +('6', '49', '13', '11563', '7553', '0'), +('6', '49', '14', '14555', '12834', '0'), +('6', '49', '14', '10335', '10644', '0'), +('6', '49', '14', '13991', '6919', '0'), +('6', '49', '14', '9246', '5931', '0'), +('6', '49', '11', '9246', '5931', '0'), +('6', '49', '11', '14762', '2204', '0'), +('6', '49', '11', '16941', '1184', '0'), +('6', '49', '11', '60396', '622', '0'), +('6', '50', '22', '9246', '0', '0'), +('6', '50', '22', '10323', '0', '0'), +('6', '50', '22', '44492', '0', '0'), +('6', '50', '22', '13101', '0', '0'), +('6', '50', '1', '12801', '4762', '0'), +('6', '50', '1', '14702', '3750', '0'), +('6', '50', '1', '14701', '2862', '0'), +('6', '50', '1', '30361', '2640', '0'), +('6', '50', '2', '10143', '5368', '0'), +('6', '50', '2', '30363', '3700', '0'), +('6', '50', '2', '2191', '3695', '0'), +('6', '50', '2', '2294', '3248', '0'), +('6', '50', '3', '11052', '9060', '0'), +('6', '50', '3', '2706', '7298', '0'), +('6', '50', '3', '4505', '4258', '0'), +('6', '50', '3', '14695', '4236', '0'), +('6', '50', '5', '14703', '6050', '0'), +('6', '50', '5', '68291', '4252', '0'), +('6', '50', '5', '10146', '3842', '0'), +('6', '50', '5', '2583', '3492', '0'), +('6', '50', '8', '11603', '13746', '0'), +('6', '50', '8', '2349', '3554', '0'), +('6', '50', '8', '2913', '2608', '0'), +('6', '50', '8', '1363', '2510', '0'), +('6', '50', '6', '2705', '7457', '0'), +('6', '50', '6', '1557', '5310', '0'), +('6', '50', '6', '1904', '4862', '0'), +('6', '50', '6', '1367', '3044', '0'), +('6', '50', '17', '2285', '11782', '0'), +('6', '50', '17', '3802', '8439', '0'), +('6', '50', '17', '4342', '6167', '0'), +('6', '50', '17', '2405', '3126', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '50', '7', '31809', '4360', '0'), +('6', '50', '7', '2289', '3746', '0'), +('6', '50', '7', '1362', '2624', '0'), +('6', '50', '7', '10336', '1816', '0'), +('6', '50', '9', '3804', '7386', '0'), +('6', '50', '9', '1541', '7012', '0'), +('6', '50', '9', '2290', '3572', '0'), +('6', '50', '9', '4406', '3048', '0'), +('6', '50', '15', '14631', '3624', '0'), +('6', '50', '15', '10150', '3004', '0'), +('6', '50', '15', '14694', '2418', '0'), +('6', '50', '15', '10163', '2300', '0'), +('6', '50', '20', '11684', '12368', '0'), +('6', '50', '20', '11666', '8393', '0'), +('6', '50', '20', '2742', '5217', '0'), +('6', '50', '20', '2288', '4478', '0'), +('6', '50', '12', '20655', '3840', '0'), +('6', '50', '12', '2291', '3830', '0'), +('6', '50', '12', '4345', '3392', '0'), +('6', '50', '12', '2923', '3074', '0'), +('6', '50', '18', '3806', '3282', '0'), +('6', '50', '18', '2292', '3257', '0'), +('6', '50', '18', '2461', '2608', '0'), +('6', '50', '18', '4410', '1142', '0'), +('6', '50', '19', '4407', '5496', '0'), +('6', '50', '19', '68239', '3735', '0'), +('6', '50', '19', '2293', '3047', '0'), +('6', '50', '19', '1368', '2016', '0'), +('6', '50', '13', '14555', '13075', '0'), +('6', '50', '13', '6411', '10601', '0'), +('6', '50', '13', '11683', '10445', '0'), +('6', '50', '13', '11563', '7626', '0'), +('6', '50', '14', '14555', '13075', '0'), +('6', '50', '14', '10335', '10861', '0'), +('6', '50', '14', '13991', '7040', '0'), +('6', '50', '14', '9246', '6052', '0'), +('6', '50', '11', '9246', '6052', '0'), +('6', '50', '11', '14762', '2204', '0'), +('6', '50', '11', '16941', '1208', '0'), +('6', '50', '11', '60396', '634', '0'), +('6', '51', '22', '9246', '0', '0'), +('6', '51', '22', '10323', '0', '0'), +('6', '51', '22', '44492', '0', '0'), +('6', '51', '22', '13101', '0', '0'), +('6', '51', '1', '12801', '4762', '0'), +('6', '51', '1', '14702', '3750', '0'), +('6', '51', '1', '14701', '2862', '0'), +('6', '51', '1', '30361', '2640', '0'), +('6', '51', '2', '10143', '5368', '0'), +('6', '51', '2', '2191', '3768', '0'), +('6', '51', '2', '30363', '3700', '0'), +('6', '51', '2', '2294', '3272', '0'), +('6', '51', '3', '11052', '9241', '0'), +('6', '51', '3', '2706', '7419', '0'), +('6', '51', '3', '4505', '4343', '0'), +('6', '51', '3', '14695', '4321', '0'), +('6', '51', '5', '14703', '6050', '0'), +('6', '51', '5', '68291', '4301', '0'), +('6', '51', '5', '10146', '3878', '0'), +('6', '51', '5', '2583', '3528', '0'), +('6', '51', '8', '11603', '13855', '0'), +('6', '51', '8', '2349', '3554', '0'), +('6', '51', '8', '2913', '2657', '0'), +('6', '51', '8', '1363', '2510', '0'), +('6', '51', '6', '2705', '7505', '0'), +('6', '51', '6', '1557', '5310', '0'), +('6', '51', '6', '1904', '4959', '0'), +('6', '51', '6', '1367', '3105', '0'), +('6', '51', '17', '2285', '11831', '0'), +('6', '51', '17', '3802', '8599', '0'), +('6', '51', '17', '4342', '6288', '0'), +('6', '51', '17', '2405', '3187', '0'), +('6', '51', '7', '31809', '4397', '0'), +('6', '51', '7', '2289', '3795', '0'), +('6', '51', '7', '1362', '2624', '0'), +('6', '51', '7', '10336', '1852', '0'), +('6', '51', '9', '3804', '7495', '0'), +('6', '51', '9', '1541', '7133', '0'), +('6', '51', '9', '2290', '3633', '0'), +('6', '51', '9', '4406', '3108', '0'), +('6', '51', '15', '14631', '3696', '0'), +('6', '51', '15', '10150', '3004', '0'), +('6', '51', '15', '14694', '2467', '0'), +('6', '51', '15', '10163', '2300', '0'), +('6', '51', '20', '11684', '12465', '0'), +('6', '51', '20', '11666', '8395', '0'), +('6', '51', '20', '2742', '5220', '0'), +('6', '51', '20', '2288', '4478', '0'), +('6', '51', '12', '20655', '3864', '0'), +('6', '51', '12', '2291', '3830', '0'), +('6', '51', '12', '4345', '3453', '0'), +('6', '51', '12', '2923', '3074', '0'), +('6', '51', '18', '3806', '3342', '0'), +('6', '51', '18', '2292', '3305', '0'), +('6', '51', '18', '2461', '2657', '0'), +('6', '51', '18', '4410', '1142', '0'), +('6', '51', '19', '4407', '5605', '0'), +('6', '51', '19', '68239', '3772', '0'), +('6', '51', '19', '2293', '3083', '0'), +('6', '51', '19', '1368', '2016', '0'), +('6', '51', '13', '14555', '13317', '0'), +('6', '51', '13', '6411', '10710', '0'), +('6', '51', '13', '11683', '10553', '0'), +('6', '51', '13', '11563', '7698', '0'), +('6', '51', '14', '14555', '13317', '0'), +('6', '51', '14', '10335', '11079', '0'), +('6', '51', '14', '13991', '7161', '0'), +('6', '51', '14', '9246', '6173', '0'), +('6', '51', '11', '9246', '6173', '0'), +('6', '51', '11', '14762', '2204', '0'), +('6', '51', '11', '16941', '1232', '0'), +('6', '51', '11', '60396', '646', '0'), +('6', '52', '22', '9246', '0', '0'), +('6', '52', '22', '10323', '0', '0'), +('6', '52', '22', '44492', '0', '0'), +('6', '52', '22', '13101', '0', '0'), +('6', '52', '1', '12801', '4762', '0'), +('6', '52', '1', '14702', '3750', '0'), +('6', '52', '1', '14701', '2862', '0'), +('6', '52', '1', '30361', '2640', '0'), +('6', '52', '2', '10143', '5368', '0'), +('6', '52', '2', '2191', '3840', '0'), +('6', '52', '2', '30363', '3700', '0'), +('6', '52', '2', '2294', '3296', '0'), +('6', '52', '3', '11052', '9422', '0'), +('6', '52', '3', '2706', '7540', '0'), +('6', '52', '3', '4505', '4427', '0'), +('6', '52', '3', '14695', '4406', '0'), +('6', '52', '5', '14703', '6050', '0'), +('6', '52', '5', '68291', '4349', '0'), +('6', '52', '5', '10146', '3915', '0'), +('6', '52', '5', '2583', '3564', '0'), +('6', '52', '8', '11603', '13964', '0'), +('6', '52', '8', '2349', '3554', '0'), +('6', '52', '8', '2913', '2705', '0'), +('6', '52', '8', '2340', '2537', '0'), +('6', '52', '6', '2705', '7554', '0'), +('6', '52', '6', '1557', '5310', '0'), +('6', '52', '6', '1904', '5055', '0'), +('6', '52', '6', '1367', '3165', '0'), +('6', '52', '17', '2285', '11879', '0'), +('6', '52', '17', '3802', '8759', '0'), +('6', '52', '17', '4342', '6408', '0'), +('6', '52', '17', '2405', '3248', '0'), +('6', '52', '7', '31809', '4433', '0'), +('6', '52', '7', '2289', '3843', '0'), +('6', '52', '7', '1362', '2624', '0'), +('6', '52', '7', '10336', '1888', '0'), +('6', '52', '9', '3804', '7604', '0'), +('6', '52', '9', '1541', '7254', '0'), +('6', '52', '9', '2290', '3694', '0'), +('6', '52', '9', '4406', '3169', '0'), +('6', '52', '15', '14631', '3769', '0'), +('6', '52', '15', '10150', '3004', '0'), +('6', '52', '15', '14694', '2515', '0'), +('6', '52', '15', '10163', '2300', '0'), +('6', '52', '20', '11684', '12562', '0'), +('6', '52', '20', '11666', '8397', '0'), +('6', '52', '20', '2742', '5223', '0'), +('6', '52', '20', '2288', '4478', '0'), +('6', '52', '12', '20655', '3889', '0'), +('6', '52', '12', '2291', '3830', '0'), +('6', '52', '12', '4345', '3513', '0'), +('6', '52', '12', '2923', '3074', '0'), +('6', '52', '18', '3806', '3403', '0'), +('6', '52', '18', '2292', '3354', '0'), +('6', '52', '18', '2461', '2705', '0'), +('6', '52', '18', '4410', '1142', '0'), +('6', '52', '19', '4407', '5714', '0'), +('6', '52', '19', '68239', '3808', '0'), +('6', '52', '19', '2293', '3120', '0'), +('6', '52', '19', '1368', '2016', '0'), +('6', '52', '13', '14555', '13558', '0'), +('6', '52', '13', '6411', '10818', '0'), +('6', '52', '13', '11683', '10662', '0'), +('6', '52', '13', '11563', '7771', '0'), +('6', '52', '14', '14555', '13558', '0'), +('6', '52', '14', '10335', '11296', '0'), +('6', '52', '14', '13991', '7282', '0'), +('6', '52', '14', '9246', '6294', '0'), +('6', '52', '11', '9246', '6294', '0'), +('6', '52', '11', '14762', '2204', '0'), +('6', '52', '11', '16941', '1256', '0'), +('6', '52', '11', '60396', '658', '0'), +('6', '53', '22', '9246', '0', '0'), +('6', '53', '22', '10323', '0', '0'), +('6', '53', '22', '44492', '0', '0'), +('6', '53', '22', '13101', '0', '0'), +('6', '53', '1', '12801', '4762', '0'), +('6', '53', '1', '14702', '3750', '0'), +('6', '53', '1', '14701', '2862', '0'), +('6', '53', '1', '30361', '2640', '0'), +('6', '53', '2', '10143', '5368', '0'), +('6', '53', '2', '2191', '3913', '0'), +('6', '53', '2', '30363', '3700', '0'), +('6', '53', '2', '2294', '3320', '0'), +('6', '53', '3', '11052', '9604', '0'), +('6', '53', '3', '2706', '7661', '0'), +('6', '53', '3', '4505', '4512', '0'), +('6', '53', '3', '14695', '4490', '0'), +('6', '53', '5', '14703', '6050', '0'), +('6', '53', '5', '68291', '4397', '0'), +('6', '53', '5', '10146', '3951', '0'), +('6', '53', '5', '2583', '3600', '0'), +('6', '53', '8', '11603', '14073', '0'), +('6', '53', '8', '2349', '3554', '0'), +('6', '53', '8', '2913', '2753', '0'), +('6', '53', '8', '2340', '2585', '0'), +('6', '53', '6', '2705', '7602', '0'), +('6', '53', '6', '1557', '5310', '0'), +('6', '53', '6', '1904', '5152', '0'), +('6', '53', '6', '1367', '3225', '0'), +('6', '53', '17', '2285', '11927', '0'), +('6', '53', '17', '3802', '8919', '0'), +('6', '53', '17', '4342', '6529', '0'), +('6', '53', '17', '2405', '3310', '0'), +('6', '53', '7', '31809', '4469', '0'), +('6', '53', '7', '2289', '3891', '0'), +('6', '53', '7', '1362', '2624', '0'), +('6', '53', '7', '10336', '1924', '0'), +('6', '53', '9', '3804', '7712', '0'), +('6', '53', '9', '1541', '7375', '0'), +('6', '53', '9', '2290', '3755', '0'), +('6', '53', '9', '4406', '3229', '0'), +('6', '53', '15', '14631', '3841', '0'), +('6', '53', '15', '10150', '3004', '0'), +('6', '53', '15', '14694', '2563', '0'), +('6', '53', '15', '10163', '2300', '0'), +('6', '53', '20', '11684', '12658', '0'), +('6', '53', '20', '11666', '8399', '0'), +('6', '53', '20', '2742', '5227', '0'), +('6', '53', '20', '2288', '4478', '0'), +('6', '53', '12', '20655', '3914', '0'), +('6', '53', '12', '2291', '3830', '0'), +('6', '53', '12', '4345', '3574', '0'), +('6', '53', '12', '2923', '3074', '0'), +('6', '53', '18', '3806', '3463', '0'), +('6', '53', '18', '2292', '3402', '0'), +('6', '53', '18', '2461', '2753', '0'), +('6', '53', '18', '4410', '1142', '0'), +('6', '53', '19', '4407', '5822', '0'), +('6', '53', '19', '68239', '3844', '0'), +('6', '53', '19', '2293', '3156', '0'), +('6', '53', '19', '1368', '2016', '0'), +('6', '53', '13', '14555', '13800', '0'), +('6', '53', '13', '6411', '10927', '0'), +('6', '53', '13', '11683', '10771', '0'), +('6', '53', '13', '11563', '7843', '0'), +('6', '53', '14', '14555', '13800', '0'), +('6', '53', '14', '10335', '11513', '0'), +('6', '53', '14', '13991', '7402', '0'), +('6', '53', '14', '9246', '6414', '0'), +('6', '53', '11', '9246', '6414', '0'), +('6', '53', '11', '14762', '2204', '0'), +('6', '53', '11', '16941', '1280', '0'), +('6', '53', '11', '60396', '670', '0'), +('6', '54', '22', '9246', '0', '0'), +('6', '54', '22', '10323', '0', '0'), +('6', '54', '22', '44492', '0', '0'), +('6', '54', '22', '13101', '0', '0'), +('6', '54', '1', '12801', '4762', '0'), +('6', '54', '1', '14702', '3750', '0'), +('6', '54', '1', '14701', '2862', '0'), +('6', '54', '1', '30361', '2640', '0'), +('6', '54', '2', '10143', '5368', '0'), +('6', '54', '2', '2191', '3985', '0'), +('6', '54', '2', '30363', '3700', '0'), +('6', '54', '2', '2294', '3345', '0'), +('6', '54', '3', '11052', '9785', '0'), +('6', '54', '3', '2706', '7782', '0'), +('6', '54', '3', '4505', '4596', '0'), +('6', '54', '3', '14695', '4575', '0'), +('6', '54', '5', '14703', '6050', '0'), +('6', '54', '5', '68291', '4446', '0'), +('6', '54', '5', '10146', '3987', '0'), +('6', '54', '5', '2583', '3637', '0'), +('6', '54', '8', '11603', '14181', '0'), +('6', '54', '8', '2349', '3554', '0'), +('6', '54', '8', '2913', '2802', '0'), +('6', '54', '8', '2340', '2633', '0'), +('6', '54', '6', '2705', '7650', '0'), +('6', '54', '6', '1557', '5310', '0'), +('6', '54', '6', '1904', '5249', '0'), +('6', '54', '6', '1367', '3286', '0'), +('6', '54', '17', '2285', '11976', '0'), +('6', '54', '17', '3802', '9078', '0'), +('6', '54', '17', '4342', '6650', '0'), +('6', '54', '17', '2405', '3371', '0'), +('6', '54', '7', '31809', '4505', '0'), +('6', '54', '7', '2289', '3939', '0'), +('6', '54', '7', '1362', '2624', '0'), +('6', '54', '7', '10336', '1961', '0'), +('6', '54', '9', '3804', '7821', '0'), +('6', '54', '9', '1541', '7496', '0'), +('6', '54', '9', '2290', '3816', '0'), +('6', '54', '9', '4406', '3289', '0'), +('6', '54', '15', '14631', '3914', '0'), +('6', '54', '15', '10150', '3004', '0'), +('6', '54', '15', '14694', '2612', '0'), +('6', '54', '15', '10163', '2300', '0'), +('6', '54', '20', '11684', '12755', '0'), +('6', '54', '20', '11666', '8401', '0'), +('6', '54', '20', '2742', '5230', '0'), +('6', '54', '20', '2288', '4478', '0'), +('6', '54', '12', '20655', '3939', '0'), +('6', '54', '12', '2291', '3830', '0'), +('6', '54', '12', '4345', '3634', '0'), +('6', '54', '12', '2923', '3074', '0'), +('6', '54', '18', '3806', '3524', '0'), +('6', '54', '18', '2292', '3450', '0'), +('6', '54', '18', '2461', '2802', '0'), +('6', '54', '18', '4410', '1142', '0'), +('6', '54', '19', '4407', '5931', '0'), +('6', '54', '19', '68239', '3880', '0'), +('6', '54', '19', '2293', '3192', '0'), +('6', '54', '19', '1368', '2016', '0'), +('6', '54', '13', '14555', '14042', '0'), +('6', '54', '13', '6411', '11036', '0'), +('6', '54', '13', '11683', '10880', '0'), +('6', '54', '13', '11563', '7916', '0'), +('6', '54', '14', '14555', '14042', '0'), +('6', '54', '14', '10335', '11731', '0'), +('6', '54', '14', '13991', '7523', '0'), +('6', '54', '14', '9246', '6535', '0'), +('6', '54', '11', '9246', '6535', '0'), +('6', '54', '11', '14762', '2204', '0'), +('6', '54', '11', '16941', '1305', '0'), +('6', '54', '11', '60396', '682', '0'), +('6', '55', '22', '9246', '0', '0'), +('6', '55', '22', '10323', '0', '0'), +('6', '55', '22', '44492', '0', '0'), +('6', '55', '22', '13101', '0', '0'), +('6', '55', '1', '12801', '4762', '0'), +('6', '55', '1', '14702', '3750', '0'), +('6', '55', '1', '14701', '2862', '0'), +('6', '55', '1', '30361', '2640', '0'), +('6', '55', '2', '10143', '5368', '0'), +('6', '55', '2', '2191', '4058', '0'), +('6', '55', '2', '30363', '3700', '0'), +('6', '55', '2', '2294', '3369', '0'), +('6', '55', '3', '11052', '9966', '0'), +('6', '55', '3', '2706', '7902', '0'), +('6', '55', '3', '4505', '4681', '0'), +('6', '55', '3', '14695', '4659', '0'), +('6', '55', '5', '14703', '6050', '0'), +('6', '55', '5', '68291', '4494', '0'), +('6', '55', '5', '10146', '4023', '0'), +('6', '55', '5', '2583', '3673', '0'), +('6', '55', '8', '11603', '14290', '0'), +('6', '55', '8', '2349', '3554', '0'), +('6', '55', '8', '2913', '2850', '0'), +('6', '55', '8', '2340', '2682', '0'), +('6', '55', '6', '2705', '7699', '0'), +('6', '55', '6', '1904', '5345', '0'), +('6', '55', '6', '1557', '5310', '0'), +('6', '55', '6', '1367', '3346', '0'), +('6', '55', '17', '2285', '12024', '0'), +('6', '55', '17', '3802', '9238', '0'), +('6', '55', '17', '4342', '6771', '0'), +('6', '55', '17', '2405', '3432', '0'), +('6', '55', '7', '31809', '4542', '0'), +('6', '55', '7', '2289', '3988', '0'), +('6', '55', '7', '1362', '2624', '0'), +('6', '55', '7', '10336', '1997', '0'), +('6', '55', '9', '3804', '7930', '0'), +('6', '55', '9', '1541', '7616', '0'), +('6', '55', '9', '2290', '3877', '0'), +('6', '55', '9', '4406', '3350', '0'), +('6', '55', '15', '14631', '3986', '0'), +('6', '55', '15', '10150', '3004', '0'), +('6', '55', '15', '14694', '2660', '0'), +('6', '55', '15', '10163', '2300', '0'), +('6', '55', '20', '11684', '12851', '0'), +('6', '55', '20', '11666', '8403', '0'), +('6', '55', '20', '2742', '5233', '0'), +('6', '55', '20', '2288', '4478', '0'), +('6', '55', '12', '20655', '3963', '0'), +('6', '55', '12', '2291', '3830', '0'), +('6', '55', '12', '4345', '3694', '0'), +('6', '55', '12', '2923', '3074', '0'), +('6', '55', '18', '3806', '3584', '0'), +('6', '55', '18', '2292', '3499', '0'), +('6', '55', '18', '2461', '2850', '0'), +('6', '55', '18', '4410', '1142', '0'), +('6', '55', '19', '4407', '6040', '0'), +('6', '55', '19', '68239', '3917', '0'), +('6', '55', '19', '2293', '3228', '0'), +('6', '55', '19', '1368', '2016', '0'), +('6', '55', '13', '14555', '14283', '0'), +('6', '55', '13', '6411', '11145', '0'), +('6', '55', '13', '11683', '10988', '0'), +('6', '55', '13', '11563', '7988', '0'), +('6', '55', '14', '14555', '14283', '0'), +('6', '55', '14', '10335', '11948', '0'), +('6', '55', '14', '13991', '7644', '0'), +('6', '55', '14', '9246', '6656', '0'), +('6', '55', '11', '9246', '6656', '0'), +('6', '55', '11', '14762', '2204', '0'), +('6', '55', '11', '16941', '1329', '0'), +('6', '55', '11', '60396', '694', '0'), +('6', '56', '22', '9246', '0', '0'), +('6', '56', '22', '10323', '0', '0'), +('6', '56', '22', '44492', '0', '0'), +('6', '56', '22', '13101', '0', '0'), +('6', '56', '1', '12801', '4762', '0'), +('6', '56', '1', '14702', '3750', '0'), +('6', '56', '1', '14701', '2862', '0'), +('6', '56', '1', '30361', '2640', '0'), +('6', '56', '2', '10143', '5368', '0'), +('6', '56', '2', '2191', '4130', '0'), +('6', '56', '2', '30363', '3700', '0'), +('6', '56', '2', '2294', '3393', '0'), +('6', '56', '3', '11052', '10147', '0'), +('6', '56', '3', '2706', '8023', '0'), +('6', '56', '3', '4505', '4766', '0'), +('6', '56', '3', '14695', '4744', '0'), +('6', '56', '5', '14703', '6050', '0'), +('6', '56', '5', '68291', '4542', '0'), +('6', '56', '5', '10146', '4060', '0'), +('6', '56', '5', '2583', '3709', '0'), +('6', '56', '8', '11603', '14399', '0'), +('6', '56', '8', '2349', '3554', '0'), +('6', '56', '8', '2913', '2898', '0'), +('6', '56', '8', '2340', '2730', '0'), +('6', '56', '6', '2705', '7747', '0'), +('6', '56', '6', '1904', '5442', '0'), +('6', '56', '6', '1557', '5310', '0'), +('6', '56', '6', '1367', '3407', '0'), +('6', '56', '17', '2285', '12072', '0'), +('6', '56', '17', '3802', '9398', '0'), +('6', '56', '17', '4342', '6892', '0'), +('6', '56', '17', '2405', '3494', '0'), +('6', '56', '7', '31809', '4578', '0'), +('6', '56', '7', '2289', '4036', '0'), +('6', '56', '7', '1362', '2624', '0'), +('6', '56', '7', '10336', '2033', '0'), +('6', '56', '9', '3804', '8039', '0'), +('6', '56', '9', '1541', '7737', '0'), +('6', '56', '9', '2290', '3938', '0'), +('6', '56', '9', '4406', '3410', '0'), +('6', '56', '15', '14631', '4059', '0'), +('6', '56', '15', '10150', '3004', '0'), +('6', '56', '15', '14694', '2708', '0'), +('6', '56', '15', '10163', '2300', '0'), +('6', '56', '20', '11684', '12948', '0'), +('6', '56', '20', '11666', '8405', '0'), +('6', '56', '20', '2742', '5236', '0'), +('6', '56', '20', '2288', '4478', '0'), +('6', '56', '12', '20655', '3988', '0'), +('6', '56', '12', '2291', '3830', '0'), +('6', '56', '12', '4345', '3755', '0'), +('6', '56', '12', '2923', '3074', '0'), +('6', '56', '18', '3806', '3644', '0'), +('6', '56', '18', '2292', '3547', '0'), +('6', '56', '18', '2461', '2898', '0'), +('6', '56', '18', '4410', '1142', '0'), +('6', '56', '19', '4407', '6149', '0'), +('6', '56', '19', '68239', '3953', '0'), +('6', '56', '19', '2293', '3264', '0'), +('6', '56', '19', '1368', '2016', '0'), +('6', '56', '13', '14555', '14525', '0'), +('6', '56', '13', '6411', '11253', '0'), +('6', '56', '13', '11683', '11097', '0'), +('6', '56', '13', '11649', '8075', '0'), +('6', '56', '14', '14555', '14525', '0'), +('6', '56', '14', '10335', '12166', '0'), +('6', '56', '14', '13991', '7765', '0'), +('6', '56', '14', '9246', '6777', '0'), +('6', '56', '11', '9246', '6777', '0'), +('6', '56', '11', '14762', '2204', '0'), +('6', '56', '11', '16941', '1353', '0'), +('6', '56', '11', '60396', '706', '0'), +('6', '57', '22', '9246', '0', '0'), +('6', '57', '22', '10323', '0', '0'), +('6', '57', '22', '44492', '0', '0'), +('6', '57', '22', '13101', '0', '0'), +('6', '57', '1', '12801', '4762', '0'), +('6', '57', '1', '14702', '3750', '0'), +('6', '57', '1', '14701', '2862', '0'), +('6', '57', '1', '30361', '2640', '0'), +('6', '57', '2', '10143', '5368', '0'), +('6', '57', '2', '2191', '4203', '0'), +('6', '57', '2', '30363', '3700', '0'), +('6', '57', '2', '1408', '3449', '0'), +('6', '57', '3', '11052', '10328', '0'), +('6', '57', '3', '2706', '8144', '0'), +('6', '57', '3', '4505', '4850', '0'), +('6', '57', '3', '14695', '4828', '0'), +('6', '57', '5', '14703', '6050', '0'), +('6', '57', '5', '68291', '4590', '0'), +('6', '57', '5', '10146', '4096', '0'), +('6', '57', '5', '2583', '3745', '0'), +('6', '57', '8', '11603', '14507', '0'), +('6', '57', '8', '2349', '3554', '0'), +('6', '57', '8', '2913', '2947', '0'), +('6', '57', '8', '2340', '2778', '0'), +('6', '57', '6', '2705', '7795', '0'), +('6', '57', '6', '1904', '5539', '0'), +('6', '57', '6', '1557', '5310', '0'), +('6', '57', '6', '1367', '3467', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '57', '17', '2285', '12121', '0'), +('6', '57', '17', '3802', '9558', '0'), +('6', '57', '17', '4342', '7012', '0'), +('6', '57', '17', '2405', '3555', '0'), +('6', '57', '7', '31809', '4614', '0'), +('6', '57', '7', '2289', '4084', '0'), +('6', '57', '7', '1362', '2624', '0'), +('6', '57', '7', '10336', '2069', '0'), +('6', '57', '9', '3804', '8147', '0'), +('6', '57', '9', '1541', '7858', '0'), +('6', '57', '9', '2290', '3999', '0'), +('6', '57', '9', '4406', '3471', '0'), +('6', '57', '15', '14631', '4131', '0'), +('6', '57', '15', '10150', '3004', '0'), +('6', '57', '15', '14694', '2757', '0'), +('6', '57', '15', '10163', '2300', '0'), +('6', '57', '20', '11684', '13045', '0'), +('6', '57', '20', '11666', '8407', '0'), +('6', '57', '20', '2742', '5239', '0'), +('6', '57', '20', '2288', '4478', '0'), +('6', '57', '12', '20655', '4013', '0'), +('6', '57', '12', '2291', '3830', '0'), +('6', '57', '12', '4345', '3815', '0'), +('6', '57', '12', '2923', '3074', '0'), +('6', '57', '18', '3806', '3705', '0'), +('6', '57', '18', '2292', '3595', '0'), +('6', '57', '18', '2461', '2947', '0'), +('6', '57', '18', '4410', '1142', '0'), +('6', '57', '19', '4407', '6257', '0'), +('6', '57', '19', '68239', '3989', '0'), +('6', '57', '19', '2293', '3301', '0'), +('6', '57', '19', '1368', '2016', '0'), +('6', '57', '13', '14555', '14766', '0'), +('6', '57', '13', '6411', '11362', '0'), +('6', '57', '13', '11683', '11206', '0'), +('6', '57', '13', '11649', '8166', '0'), +('6', '57', '14', '14555', '14766', '0'), +('6', '57', '14', '10335', '12383', '0'), +('6', '57', '14', '13991', '7886', '0'), +('6', '57', '14', '9246', '6898', '0'), +('6', '57', '11', '9246', '6898', '0'), +('6', '57', '11', '14762', '2204', '0'), +('6', '57', '11', '16941', '1377', '0'), +('6', '57', '11', '60396', '719', '0'), +('6', '58', '22', '9246', '0', '0'), +('6', '58', '22', '10323', '0', '0'), +('6', '58', '22', '44492', '0', '0'), +('6', '58', '22', '13101', '0', '0'), +('6', '58', '1', '12801', '4762', '0'), +('6', '58', '1', '14702', '3750', '0'), +('6', '58', '1', '14701', '2862', '0'), +('6', '58', '1', '30361', '2640', '0'), +('6', '58', '2', '10143', '5368', '0'), +('6', '58', '2', '2191', '4275', '0'), +('6', '58', '2', '30363', '3700', '0'), +('6', '58', '2', '1408', '3509', '0'), +('6', '58', '3', '11052', '10510', '0'), +('6', '58', '3', '2706', '8265', '0'), +('6', '58', '3', '4505', '4935', '0'), +('6', '58', '3', '14695', '4913', '0'), +('6', '58', '5', '14703', '6050', '0'), +('6', '58', '5', '68291', '4639', '0'), +('6', '58', '5', '10146', '4132', '0'), +('6', '58', '5', '2583', '3782', '0'), +('6', '58', '8', '11603', '14616', '0'), +('6', '58', '8', '2349', '3554', '0'), +('6', '58', '8', '2913', '2995', '0'), +('6', '58', '8', '2340', '2827', '0'), +('6', '58', '6', '2705', '7844', '0'), +('6', '58', '6', '1904', '5635', '0'), +('6', '58', '6', '1557', '5310', '0'), +('6', '58', '6', '1367', '3527', '0'), +('6', '58', '17', '2285', '12169', '0'), +('6', '58', '17', '3802', '9717', '0'), +('6', '58', '17', '4342', '7133', '0'), +('6', '58', '17', '2405', '3616', '0'), +('6', '58', '7', '31809', '4650', '0'), +('6', '58', '7', '2289', '4133', '0'), +('6', '58', '7', '1362', '2624', '0'), +('6', '58', '7', '10336', '2106', '0'), +('6', '58', '9', '3804', '8256', '0'), +('6', '58', '9', '1541', '7979', '0'), +('6', '58', '9', '2290', '4060', '0'), +('6', '58', '9', '4406', '3531', '0'), +('6', '58', '15', '14631', '4204', '0'), +('6', '58', '15', '10150', '3004', '0'), +('6', '58', '15', '14694', '2805', '0'), +('6', '58', '15', '10163', '2300', '0'), +('6', '58', '20', '11684', '13141', '0'), +('6', '58', '20', '11666', '8409', '0'), +('6', '58', '20', '2742', '5242', '0'), +('6', '58', '20', '2288', '4478', '0'), +('6', '58', '12', '20655', '4038', '0'), +('6', '58', '12', '4345', '3876', '0'), +('6', '58', '12', '2291', '3830', '0'), +('6', '58', '12', '2923', '3074', '0'), +('6', '58', '18', '3806', '3765', '0'), +('6', '58', '18', '2292', '3644', '0'), +('6', '58', '18', '2461', '2995', '0'), +('6', '58', '18', '4410', '1142', '0'), +('6', '58', '19', '4407', '6366', '0'), +('6', '58', '19', '68239', '4025', '0'), +('6', '58', '19', '2293', '3337', '0'), +('6', '58', '19', '1368', '2016', '0'), +('6', '58', '13', '14555', '15008', '0'), +('6', '58', '13', '6411', '11471', '0'), +('6', '58', '13', '11683', '11315', '0'), +('6', '58', '13', '11649', '8257', '0'), +('6', '58', '14', '14555', '15008', '0'), +('6', '58', '14', '10335', '12601', '0'), +('6', '58', '14', '13991', '8006', '0'), +('6', '58', '14', '9246', '7018', '0'), +('6', '58', '11', '9246', '7018', '0'), +('6', '58', '11', '14762', '2204', '0'), +('6', '58', '11', '16941', '1401', '0'), +('6', '58', '11', '60396', '731', '0'), +('6', '59', '22', '9246', '0', '0'), +('6', '59', '22', '10323', '0', '0'), +('6', '59', '22', '44492', '0', '0'), +('6', '59', '22', '13101', '0', '0'), +('6', '59', '1', '12801', '4762', '0'), +('6', '59', '1', '14702', '3750', '0'), +('6', '59', '1', '14701', '2862', '0'), +('6', '59', '1', '30361', '2640', '0'), +('6', '59', '2', '10143', '5368', '0'), +('6', '59', '2', '2191', '4348', '0'), +('6', '59', '2', '30363', '3700', '0'), +('6', '59', '2', '1408', '3570', '0'), +('6', '59', '3', '11052', '10691', '0'), +('6', '59', '3', '2706', '8386', '0'), +('6', '59', '3', '4505', '5019', '0'), +('6', '59', '3', '14695', '4997', '0'), +('6', '59', '5', '14703', '6050', '0'), +('6', '59', '5', '68291', '4687', '0'), +('6', '59', '5', '10146', '4168', '0'), +('6', '59', '5', '2583', '3818', '0'), +('6', '59', '8', '11603', '14725', '0'), +('6', '59', '8', '2349', '3554', '0'), +('6', '59', '8', '2913', '3043', '0'), +('6', '59', '8', '2340', '2875', '0'), +('6', '59', '6', '2705', '7892', '0'), +('6', '59', '6', '1904', '5732', '0'), +('6', '59', '6', '1557', '5310', '0'), +('6', '59', '6', '1367', '3588', '0'), +('6', '59', '17', '2285', '12217', '0'), +('6', '59', '17', '3802', '9877', '0'), +('6', '59', '17', '4342', '7254', '0'), +('6', '59', '17', '2405', '3677', '0'), +('6', '59', '7', '31809', '4686', '0'), +('6', '59', '7', '2289', '4181', '0'), +('6', '59', '7', '1362', '2624', '0'), +('6', '59', '7', '10336', '2142', '0'), +('6', '59', '9', '3804', '8365', '0'), +('6', '59', '9', '1541', '8100', '0'), +('6', '59', '9', '2290', '4121', '0'), +('6', '59', '9', '4406', '3591', '0'), +('6', '59', '15', '14631', '4276', '0'), +('6', '59', '15', '10150', '3004', '0'), +('6', '59', '15', '14694', '2853', '0'), +('6', '59', '15', '10163', '2300', '0'), +('6', '59', '20', '11684', '13238', '0'), +('6', '59', '20', '11666', '8412', '0'), +('6', '59', '20', '2742', '5245', '0'), +('6', '59', '20', '2288', '4478', '0'), +('6', '59', '12', '20655', '4063', '0'), +('6', '59', '12', '4345', '3936', '0'), +('6', '59', '12', '2291', '3830', '0'), +('6', '59', '12', '2923', '3074', '0'), +('6', '59', '18', '3806', '3826', '0'), +('6', '59', '18', '2292', '3692', '0'), +('6', '59', '18', '2461', '3043', '0'), +('6', '59', '18', '4410', '1142', '0'), +('6', '59', '19', '4407', '6475', '0'), +('6', '59', '19', '68239', '4062', '0'), +('6', '59', '19', '2293', '3373', '0'), +('6', '59', '19', '1368', '2016', '0'), +('6', '59', '13', '14555', '15250', '0'), +('6', '59', '13', '6411', '11579', '0'), +('6', '59', '13', '11683', '11423', '0'), +('6', '59', '13', '11649', '8347', '0'), +('6', '59', '14', '14555', '15250', '0'), +('6', '59', '14', '10335', '12818', '0'), +('6', '59', '14', '13991', '8127', '0'), +('6', '59', '14', '9246', '7139', '0'), +('6', '59', '11', '9246', '7139', '0'), +('6', '59', '11', '14762', '2204', '0'), +('6', '59', '11', '16941', '1425', '0'), +('6', '59', '11', '60396', '743', '0'), +('6', '60', '22', '66397', '0', '3'), +('6', '60', '22', '61948', '0', '3'), +('6', '60', '22', '21805', '0', '3'), +('6', '60', '22', '21807', '0', '3'), +('6', '60', '1', '63170', '22602', '3'), +('6', '60', '1', '30552', '19371', '3'), +('6', '60', '1', '23514', '17201', '3'), +('6', '60', '1', '28944', '13921', '3'), +('6', '60', '2', '26763', '32337', '3'), +('6', '60', '2', '1867', '15111', '3'), +('6', '60', '2', '26762', '13234', '3'), +('6', '60', '2', '28909', '12324', '3'), +('6', '60', '3', '26785', '36509', '3'), +('6', '60', '3', '28963', '29175', '3'), +('6', '60', '3', '31323', '26102', '3'), +('6', '60', '3', '26756', '23157', '3'), +('6', '60', '5', '28900', '39743', '3'), +('6', '60', '5', '51229', '24651', '3'), +('6', '60', '5', '26505', '24082', '3'), +('6', '60', '5', '28911', '23597', '3'), +('6', '60', '8', '51240', '36835', '3'), +('6', '60', '8', '1628', '31698', '3'), +('6', '60', '8', '28992', '16236', '3'), +('6', '60', '8', '28918', '14751', '3'), +('6', '60', '6', '1200', '16949', '3'), +('6', '60', '6', '28920', '14492', '3'), +('6', '60', '6', '30566', '14152', '3'), +('6', '60', '6', '28991', '13153', '3'), +('6', '60', '17', '26782', '17414', '3'), +('6', '60', '17', '10845', '13342', '3'), +('6', '60', '17', '28951', '12503', '3'), +('6', '60', '17', '9630', '11033', '3'), +('6', '60', '7', '28925', '15288', '3'), +('6', '60', '7', '7868', '14101', '3'), +('6', '60', '7', '28145', '13487', '3'), +('6', '60', '7', '26584', '13377', '3'), +('6', '60', '9', '26752', '49375', '3'), +('6', '60', '9', '26787', '26127', '3'), +('6', '60', '9', '31314', '24453', '3'), +('6', '60', '9', '59563', '22201', '3'), +('6', '60', '15', '51247', '35902', '3'), +('6', '60', '15', '11541', '23001', '3'), +('6', '60', '15', '63170', '22602', '3'), +('6', '60', '15', '51242', '16924', '3'), +('6', '60', '20', '11666', '28253', '3'), +('6', '60', '20', '28916', '16298', '3'), +('6', '60', '20', '30534', '13699', '3'), +('6', '60', '20', '26549', '13050', '3'), +('6', '60', '12', '30534', '13699', '3'), +('6', '60', '12', '28991', '13153', '3'), +('6', '60', '12', '31227', '12689', '3'), +('6', '60', '12', '28967', '12003', '3'), +('6', '60', '18', '26783', '42031', '3'), +('6', '60', '18', '28932', '12328', '3'), +('6', '60', '18', '8289', '12323', '3'), +('6', '60', '18', '27316', '10613', '3'), +('6', '60', '19', '28934', '36903', '3'), +('6', '60', '19', '31327', '30839', '3'), +('6', '60', '19', '31408', '23502', '3'), +('6', '60', '19', '30570', '15600', '3'), +('6', '60', '13', '28980', '38200', '3'), +('6', '60', '13', '14762', '22200', '3'), +('6', '60', '13', '26784', '16673', '3'), +('6', '60', '13', '28981', '15450', '3'), +('6', '60', '14', '28980', '38200', '3'), +('6', '60', '14', '28915', '24070', '3'), +('6', '60', '14', '14762', '22200', '3'), +('6', '60', '14', '26784', '16673', '3'), +('6', '60', '11', '14762', '22200', '3'), +('6', '60', '11', '2698', '18002', '3'), +('6', '60', '11', '26784', '16673', '3'), +('6', '60', '11', '30562', '13584', '3'), +('6', '60', '22', '10323', '0', '2'), +('6', '60', '22', '9248', '0', '2'), +('6', '60', '22', '12425', '0', '2'), +('6', '60', '22', '9254', '0', '2'), +('6', '60', '1', '2581', '14038', '2'), +('6', '60', '1', '2065', '9440', '2'), +('6', '60', '1', '10912', '7764', '2'), +('6', '60', '1', '62234', '6604', '2'), +('6', '60', '2', '10913', '12388', '2'), +('6', '60', '2', '31322', '9785', '2'), +('6', '60', '2', '29648', '9167', '2'), +('6', '60', '2', '1867', '9119', '2'), +('6', '60', '3', '31233', '13578', '2'), +('6', '60', '3', '1547', '11987', '2'), +('6', '60', '3', '31244', '11452', '2'), +('6', '60', '3', '31463', '10636', '2'), +('6', '60', '5', '31460', '12289', '2'), +('6', '60', '5', '30390', '10626', '2'), +('6', '60', '5', '31318', '10438', '2'), +('6', '60', '5', '29459', '9688', '2'), +('6', '60', '8', '1628', '13166', '2'), +('6', '60', '8', '31376', '12991', '2'), +('6', '60', '8', '11603', '9438', '2'), +('6', '60', '8', '5779', '9161', '2'), +('6', '60', '6', '29472', '6370', '2'), +('6', '60', '6', '1114', '5857', '2'), +('6', '60', '6', '2705', '5531', '2'), +('6', '60', '6', '1557', '5261', '2'), +('6', '60', '17', '10845', '15736', '2'), +('6', '60', '17', '9630', '12848', '2'), +('6', '60', '17', '31148', '11187', '2'), +('6', '60', '17', '25399', '10993', '2'), +('6', '60', '7', '31229', '11762', '2'), +('6', '60', '7', '29485', '7513', '2'), +('6', '60', '7', '31371', '4213', '2'), +('6', '60', '7', '31149', '3968', '2'), +('6', '60', '9', '31460', '12289', '2'), +('6', '60', '9', '31246', '8319', '2'), +('6', '60', '9', '31150', '4845', '2'), +('6', '60', '9', '31314', '4477', '2'), +('6', '60', '15', '25211', '12700', '2'), +('6', '60', '15', '31231', '12533', '2'), +('6', '60', '15', '62373', '7600', '2'), +('6', '60', '15', '62356', '6527', '2'), +('6', '60', '20', '25199', '13823', '2'), +('6', '60', '20', '25858', '13737', '2'), +('6', '60', '20', '2510', '12424', '2'), +('6', '60', '20', '1556', '12317', '2'), +('6', '60', '12', '31227', '14562', '2'), +('6', '60', '12', '25857', '10812', '2'), +('6', '60', '12', '31306', '8988', '2'), +('6', '60', '12', '29447', '5928', '2'), +('6', '60', '18', '31152', '10494', '2'), +('6', '60', '18', '25403', '8312', '2'), +('6', '60', '18', '31054', '8017', '2'), +('6', '60', '18', '62164', '7159', '2'), +('6', '60', '19', '29645', '15540', '2'), +('6', '60', '19', '31245', '14399', '2'), +('6', '60', '19', '31355', '9550', '2'), +('6', '60', '19', '31327', '8716', '2'), +('6', '60', '13', '20490', '13271', '2'), +('6', '60', '13', '31373', '13238', '2'), +('6', '60', '13', '22824', '11202', '2'), +('6', '60', '13', '29449', '10978', '2'), +('6', '60', '14', '31230', '15510', '2'), +('6', '60', '14', '31462', '11535', '2'), +('6', '60', '14', '22824', '11202', '2'), +('6', '60', '14', '29449', '10978', '2'), +('6', '60', '11', '31465', '14332', '2'), +('6', '60', '11', '1554', '13904', '2'), +('6', '60', '11', '2698', '10516', '2'), +('6', '60', '11', '31302', '10130', '2'), +('6', '60', '22', '10323', '0', '1'), +('6', '60', '22', '9246', '0', '1'), +('6', '60', '22', '12425', '0', '1'), +('6', '60', '22', '44492', '0', '1'), +('6', '60', '1', '10912', '12224', '1'), +('6', '60', '1', '62234', '8430', '1'), +('6', '60', '1', '12801', '4757', '1'), +('6', '60', '1', '5813', '4285', '1'), +('6', '60', '2', '10913', '18377', '1'), +('6', '60', '2', '10143', '5361', '1'), +('6', '60', '2', '62138', '3821', '1'), +('6', '60', '2', '30363', '3700', '1'), +('6', '60', '3', '5780', '7309', '1'), +('6', '60', '3', '11052', '6417', '1'), +('6', '60', '3', '2706', '5517', '1'), +('6', '60', '3', '46184', '5262', '1'), +('6', '60', '5', '14703', '6050', '1'), +('6', '60', '5', '8285', '4483', '1'), +('6', '60', '5', '14709', '4067', '1'), +('6', '60', '5', '14754', '3984', '1'), +('6', '60', '8', '1628', '16834', '1'), +('6', '60', '8', '11603', '12136', '1'), +('6', '60', '8', '1622', '10045', '1'), +('6', '60', '8', '5779', '9186', '1'), +('6', '60', '6', '2705', '6735', '1'), +('6', '60', '6', '1557', '5286', '1'), +('6', '60', '6', '4315', '4025', '1'), +('6', '60', '6', '1904', '3440', '1'), +('6', '60', '17', '10845', '21720', '1'), +('6', '60', '17', '4572', '11915', '1'), +('6', '60', '17', '2285', '11050', '1'), +('6', '60', '17', '3802', '6068', '1'), +('6', '60', '7', '62046', '4107', '1'), +('6', '60', '7', '31809', '3812', '1'), +('6', '60', '7', '2289', '3029', '1'), +('6', '60', '7', '1362', '2614', '1'), +('6', '60', '9', '3804', '5788', '1'), +('6', '60', '9', '1541', '5221', '1'), +('6', '60', '9', '1618', '4950', '1'), +('6', '60', '9', '2290', '2673', '1'), +('6', '60', '15', '5727', '6777', '1'), +('6', '60', '15', '5728', '5585', '1'), +('6', '60', '15', '5807', '5271', '1'), +('6', '60', '15', '10346', '4489', '1'), +('6', '60', '20', '1556', '15307', '1'), +('6', '60', '20', '11684', '10944', '1'), +('6', '60', '20', '11666', '8347', '1'), +('6', '60', '20', '5765', '8016', '1'), +('6', '60', '12', '2291', '3818', '1'), +('6', '60', '12', '20655', '3437', '1'), +('6', '60', '12', '2923', '3064', '1'), +('6', '60', '12', '4345', '2482', '1'), +('6', '60', '18', '62164', '9017', '1'), +('6', '60', '18', '4576', '8107', '1'), +('6', '60', '18', '2292', '2535', '1'), +('6', '60', '18', '3806', '2380', '1'), +('6', '60', '19', '5749', '4659', '1'), +('6', '60', '19', '4407', '3898', '1'), +('6', '60', '19', '68239', '3181', '1'), +('6', '60', '19', '2293', '2504', '1'), +('6', '60', '13', '20490', '19330', '1'), +('6', '60', '13', '24629', '13134', '1'), +('6', '60', '13', '24609', '11679', '1'), +('6', '60', '13', '14555', '9553', '1'), +('6', '60', '14', '24629', '13134', '1'), +('6', '60', '14', '24609', '11679', '1'), +('6', '60', '14', '14555', '9553', '1'), +('6', '60', '14', '14745', '8222', '1'), +('6', '60', '11', '46178', '7361', '1'), +('6', '60', '11', '5805', '5300', '1'), +('6', '60', '11', '5763', '5118', '1'), +('6', '60', '11', '79631', '4427', '1'), +('6', '61', '22', '66397', '0', '3'), +('6', '61', '22', '61948', '0', '3'), +('6', '61', '22', '21805', '0', '3'), +('6', '61', '22', '21807', '0', '3'), +('6', '61', '1', '63170', '22103', '3'), +('6', '61', '1', '30552', '19073', '3'), +('6', '61', '1', '23514', '16451', '3'), +('6', '61', '1', '28944', '13923', '3'), +('6', '61', '2', '26763', '31590', '3'), +('6', '61', '2', '1867', '14782', '3'), +('6', '61', '2', '26762', '13236', '3'), +('6', '61', '2', '28909', '12326', '3'), +('6', '61', '3', '26785', '35614', '3'), +('6', '61', '3', '28963', '28427', '3'), +('6', '61', '3', '31323', '25102', '3'), +('6', '61', '3', '26756', '22707', '3'), +('6', '61', '5', '28900', '38747', '3'), +('6', '61', '5', '51229', '24153', '3'), +('6', '61', '5', '28911', '23099', '3'), +('6', '61', '5', '26505', '22932', '3'), +('6', '61', '8', '51240', '35835', '3'), +('6', '61', '8', '1628', '30701', '3'), +('6', '61', '8', '28992', '16239', '3'), +('6', '61', '8', '28918', '14751', '3'), +('6', '61', '6', '1200', '16551', '3'), +('6', '61', '6', '28920', '14496', '3'), +('6', '61', '6', '30566', '14153', '3'), +('6', '61', '6', '28991', '13158', '3'), +('6', '61', '17', '26782', '17419', '3'), +('6', '61', '17', '10845', '13346', '3'), +('6', '61', '17', '28951', '12503', '3'), +('6', '61', '17', '9630', '11036', '3'), +('6', '61', '7', '28925', '15291', '3'), +('6', '61', '7', '7868', '14103', '3'), +('6', '61', '7', '28145', '13490', '3'), +('6', '61', '7', '26584', '13379', '3'), +('6', '61', '9', '26752', '47877', '3'), +('6', '61', '9', '26787', '25729', '3'), +('6', '61', '9', '31314', '23453', '3'), +('6', '61', '9', '59563', '21201', '3'), +('6', '61', '15', '51247', '34752', '3'), +('6', '61', '15', '63170', '22103', '3'), +('6', '61', '15', '11541', '21851', '3'), +('6', '61', '15', '51242', '16626', '3'), +('6', '61', '20', '11666', '27253', '3'), +('6', '61', '20', '28916', '16300', '3'), +('6', '61', '20', '30534', '13701', '3'), +('6', '61', '20', '26549', '13054', '3'), +('6', '61', '12', '30534', '13701', '3'), +('6', '61', '12', '28991', '13158', '3'), +('6', '61', '12', '31227', '12692', '3'), +('6', '61', '12', '28967', '12003', '3'), +('6', '61', '18', '26783', '40883', '3'), +('6', '61', '18', '28932', '12330', '3'), +('6', '61', '18', '8289', '12325', '3'), +('6', '61', '18', '27316', '10614', '3'), +('6', '61', '19', '28934', '35903', '3'), +('6', '61', '19', '31327', '29690', '3'), +('6', '61', '19', '31408', '22353', '3'), +('6', '61', '19', '30570', '15602', '3'), +('6', '61', '13', '28980', '37202', '3'), +('6', '61', '13', '14762', '21200', '3'), +('6', '61', '13', '26784', '16679', '3'), +('6', '61', '13', '28981', '15452', '3'), +('6', '61', '14', '28980', '37202', '3'), +('6', '61', '14', '28915', '23698', '3'), +('6', '61', '14', '14762', '21200', '3'), +('6', '61', '14', '26784', '16679', '3'), +('6', '61', '11', '14762', '21200', '3'), +('6', '61', '11', '2698', '17627', '3'), +('6', '61', '11', '26784', '16679', '3'), +('6', '61', '11', '30562', '13586', '3'), +('6', '62', '22', '66397', '0', '3'), +('6', '62', '22', '61948', '0', '3'), +('6', '62', '22', '21805', '0', '3'), +('6', '62', '22', '21807', '0', '3'), +('6', '62', '1', '63170', '21605', '3'), +('6', '62', '1', '30552', '18775', '3'), +('6', '62', '1', '23514', '15701', '3'), +('6', '62', '1', '28944', '13925', '3'), +('6', '62', '2', '26763', '30843', '3'), +('6', '62', '2', '1867', '14453', '3'), +('6', '62', '2', '26762', '13238', '3'), +('6', '62', '2', '28909', '12328', '3'), +('6', '62', '3', '26785', '34719', '3'), +('6', '62', '3', '28963', '27679', '3'), +('6', '62', '3', '31323', '24102', '3'), +('6', '62', '3', '26756', '22257', '3'), +('6', '62', '5', '28900', '37751', '3'), +('6', '62', '5', '51229', '23654', '3'), +('6', '62', '5', '28911', '22601', '3'), +('6', '62', '5', '26505', '21782', '3'), +('6', '62', '8', '51240', '34835', '3'), +('6', '62', '8', '1628', '29703', '3'), +('6', '62', '8', '28992', '16242', '3'), +('6', '62', '8', '28918', '14751', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '62', '6', '1200', '16152', '3'), +('6', '62', '6', '28920', '14500', '3'), +('6', '62', '6', '30566', '14155', '3'), +('6', '62', '6', '28991', '13163', '3'), +('6', '62', '17', '26782', '17425', '3'), +('6', '62', '17', '10845', '13350', '3'), +('6', '62', '17', '28951', '12503', '3'), +('6', '62', '17', '9630', '11039', '3'), +('6', '62', '7', '28925', '15294', '3'), +('6', '62', '7', '7868', '14104', '3'), +('6', '62', '7', '28145', '13493', '3'), +('6', '62', '7', '26584', '13381', '3'), +('6', '62', '9', '26752', '46379', '3'), +('6', '62', '9', '26787', '25331', '3'), +('6', '62', '9', '31314', '22453', '3'), +('6', '62', '9', '59563', '20201', '3'), +('6', '62', '15', '51247', '33602', '3'), +('6', '62', '15', '63170', '21605', '3'), +('6', '62', '15', '11541', '20701', '3'), +('6', '62', '15', '51242', '16327', '3'), +('6', '62', '20', '11666', '26253', '3'), +('6', '62', '20', '28916', '16301', '3'), +('6', '62', '20', '30534', '13703', '3'), +('6', '62', '20', '26549', '13058', '3'), +('6', '62', '12', '30534', '13703', '3'), +('6', '62', '12', '28991', '13163', '3'), +('6', '62', '12', '31227', '12695', '3'), +('6', '62', '12', '28967', '12003', '3'), +('6', '62', '18', '26783', '39735', '3'), +('6', '62', '18', '28932', '12332', '3'), +('6', '62', '18', '8289', '12327', '3'), +('6', '62', '18', '27316', '10615', '3'), +('6', '62', '19', '28934', '34903', '3'), +('6', '62', '19', '31327', '28541', '3'), +('6', '62', '19', '31408', '21204', '3'), +('6', '62', '19', '30570', '15603', '3'), +('6', '62', '13', '28980', '36205', '3'), +('6', '62', '13', '14762', '20200', '3'), +('6', '62', '13', '26784', '16685', '3'), +('6', '62', '13', '28981', '15455', '3'), +('6', '62', '14', '28980', '36205', '3'), +('6', '62', '14', '28915', '23326', '3'), +('6', '62', '14', '14762', '20200', '3'), +('6', '62', '14', '26784', '16685', '3'), +('6', '62', '11', '14762', '20200', '3'), +('6', '62', '11', '2698', '17252', '3'), +('6', '62', '11', '26784', '16685', '3'), +('6', '62', '11', '30562', '13588', '3'), +('6', '63', '22', '66397', '0', '3'), +('6', '63', '22', '61948', '0', '3'), +('6', '63', '22', '21805', '0', '3'), +('6', '63', '22', '21807', '0', '3'), +('6', '63', '1', '63170', '21107', '3'), +('6', '63', '1', '30552', '18477', '3'), +('6', '63', '1', '23514', '14951', '3'), +('6', '63', '1', '28944', '13927', '3'), +('6', '63', '2', '26763', '30096', '3'), +('6', '63', '2', '1867', '14124', '3'), +('6', '63', '2', '26762', '13240', '3'), +('6', '63', '2', '28909', '12330', '3'), +('6', '63', '3', '26785', '33824', '3'), +('6', '63', '3', '28963', '26931', '3'), +('6', '63', '3', '31323', '23102', '3'), +('6', '63', '3', '26756', '21807', '3'), +('6', '63', '5', '28900', '36755', '3'), +('6', '63', '5', '51229', '23156', '3'), +('6', '63', '5', '28911', '22103', '3'), +('6', '63', '5', '26505', '20632', '3'), +('6', '63', '8', '51240', '33835', '3'), +('6', '63', '8', '1628', '28706', '3'), +('6', '63', '8', '28992', '16245', '3'), +('6', '63', '8', '28918', '14751', '3'), +('6', '63', '6', '1200', '15754', '3'), +('6', '63', '6', '28920', '14504', '3'), +('6', '63', '6', '30566', '14157', '3'), +('6', '63', '6', '28991', '13168', '3'), +('6', '63', '17', '26782', '17430', '3'), +('6', '63', '17', '10845', '13354', '3'), +('6', '63', '17', '28951', '12503', '3'), +('6', '63', '17', '9630', '11042', '3'), +('6', '63', '7', '28925', '15297', '3'), +('6', '63', '7', '7868', '14106', '3'), +('6', '63', '7', '28145', '13496', '3'), +('6', '63', '7', '26584', '13383', '3'), +('6', '63', '9', '26752', '44881', '3'), +('6', '63', '9', '26787', '24933', '3'), +('6', '63', '9', '31314', '21453', '3'), +('6', '63', '9', '59563', '19201', '3'), +('6', '63', '15', '51247', '32452', '3'), +('6', '63', '15', '63170', '21107', '3'), +('6', '63', '15', '11541', '19551', '3'), +('6', '63', '15', '51242', '16028', '3'), +('6', '63', '20', '11666', '25253', '3'), +('6', '63', '20', '28916', '16303', '3'), +('6', '63', '20', '30534', '13706', '3'), +('6', '63', '20', '26549', '13062', '3'), +('6', '63', '12', '30534', '13706', '3'), +('6', '63', '12', '28991', '13168', '3'), +('6', '63', '12', '31227', '12698', '3'), +('6', '63', '12', '28967', '12003', '3'), +('6', '63', '18', '26783', '38587', '3'), +('6', '63', '18', '28932', '12334', '3'), +('6', '63', '18', '8289', '12329', '3'), +('6', '63', '18', '27316', '10616', '3'), +('6', '63', '19', '28934', '33903', '3'), +('6', '63', '19', '31327', '27393', '3'), +('6', '63', '19', '31408', '20055', '3'), +('6', '63', '19', '30570', '15605', '3'), +('6', '63', '13', '28980', '35207', '3'), +('6', '63', '13', '14762', '19200', '3'), +('6', '63', '13', '26784', '16691', '3'), +('6', '63', '13', '28981', '15457', '3'), +('6', '63', '14', '28980', '35207', '3'), +('6', '63', '14', '28915', '22954', '3'), +('6', '63', '14', '14762', '19200', '3'), +('6', '63', '14', '26784', '16691', '3'), +('6', '63', '11', '14762', '19200', '3'), +('6', '63', '11', '2698', '16877', '3'), +('6', '63', '11', '26784', '16691', '3'), +('6', '63', '11', '30562', '13590', '3'), +('6', '64', '22', '66397', '0', '3'), +('6', '64', '22', '61948', '0', '3'), +('6', '64', '22', '21805', '0', '3'), +('6', '64', '22', '21807', '0', '3'), +('6', '64', '1', '63170', '20608', '3'), +('6', '64', '1', '30552', '18179', '3'), +('6', '64', '1', '23514', '14201', '3'), +('6', '64', '1', '28944', '13929', '3'), +('6', '64', '2', '26763', '29349', '3'), +('6', '64', '2', '1867', '13795', '3'), +('6', '64', '2', '26762', '13242', '3'), +('6', '64', '2', '28909', '12332', '3'), +('6', '64', '3', '26785', '32929', '3'), +('6', '64', '3', '28963', '26183', '3'), +('6', '64', '3', '31323', '22102', '3'), +('6', '64', '3', '26756', '21357', '3'), +('6', '64', '5', '28900', '35759', '3'), +('6', '64', '5', '51229', '22658', '3'), +('6', '64', '5', '28911', '21605', '3'), +('6', '64', '5', '26505', '19482', '3'), +('6', '64', '8', '51240', '32836', '3'), +('6', '64', '8', '1628', '27708', '3'), +('6', '64', '8', '28992', '16248', '3'), +('6', '64', '8', '28918', '14751', '3'), +('6', '64', '6', '1200', '15356', '3'), +('6', '64', '6', '28920', '14508', '3'), +('6', '64', '6', '30566', '14158', '3'), +('6', '64', '6', '28991', '13173', '3'), +('6', '64', '17', '26782', '17435', '3'), +('6', '64', '17', '10845', '13358', '3'), +('6', '64', '17', '28951', '12503', '3'), +('6', '64', '17', '9630', '11045', '3'), +('6', '64', '7', '28925', '15300', '3'), +('6', '64', '7', '7868', '14108', '3'), +('6', '64', '7', '28145', '13499', '3'), +('6', '64', '7', '26584', '13385', '3'), +('6', '64', '9', '26752', '43383', '3'), +('6', '64', '9', '26787', '24535', '3'), +('6', '64', '9', '31314', '20453', '3'), +('6', '64', '9', '59563', '18201', '3'), +('6', '64', '15', '51247', '31302', '3'), +('6', '64', '15', '63170', '20608', '3'), +('6', '64', '15', '11541', '18401', '3'), +('6', '64', '15', '51242', '15729', '3'), +('6', '64', '20', '11666', '24253', '3'), +('6', '64', '20', '28916', '16304', '3'), +('6', '64', '20', '30534', '13708', '3'), +('6', '64', '20', '26549', '13066', '3'), +('6', '64', '12', '30534', '13708', '3'), +('6', '64', '12', '28991', '13173', '3'), +('6', '64', '12', '31227', '12702', '3'), +('6', '64', '12', '28967', '12003', '3'), +('6', '64', '18', '26783', '37439', '3'), +('6', '64', '18', '28932', '12337', '3'), +('6', '64', '18', '8289', '12331', '3'), +('6', '64', '18', '27316', '10617', '3'), +('6', '64', '19', '28934', '32903', '3'), +('6', '64', '19', '31327', '26244', '3'), +('6', '64', '19', '31408', '18906', '3'), +('6', '64', '19', '30570', '15607', '3'), +('6', '64', '13', '28980', '34210', '3'), +('6', '64', '13', '14762', '18200', '3'), +('6', '64', '13', '26784', '16697', '3'), +('6', '64', '13', '28981', '15460', '3'), +('6', '64', '14', '28980', '34210', '3'), +('6', '64', '14', '28915', '22582', '3'), +('6', '64', '14', '14762', '18200', '3'), +('6', '64', '14', '26784', '16697', '3'), +('6', '64', '11', '14762', '18200', '3'), +('6', '64', '11', '26784', '16697', '3'), +('6', '64', '11', '2698', '16502', '3'), +('6', '64', '11', '30562', '13592', '3'), +('6', '65', '22', '66397', '0', '7'), +('6', '65', '22', '61948', '0', '7'), +('6', '65', '22', '21805', '0', '7'), +('6', '65', '22', '21807', '0', '7'), +('6', '65', '1', '5594', '54307', '7'), +('6', '65', '1', '68949', '51136', '7'), +('6', '65', '1', '7130', '37984', '7'), +('6', '65', '1', '52121', '37904', '7'), +('6', '65', '2', '26763', '28603', '7'), +('6', '65', '2', '9496', '27858', '7'), +('6', '65', '2', '69089', '27769', '7'), +('6', '65', '2', '68189', '27500', '7'), +('6', '65', '3', '69068', '81635', '7'), +('6', '65', '3', '68819', '50203', '7'), +('6', '65', '3', '69132', '47279', '7'), +('6', '65', '3', '26984', '45535', '7'), +('6', '65', '5', '69097', '82184', '7'), +('6', '65', '5', '68950', '81868', '7'), +('6', '65', '5', '7769', '47163', '7'), +('6', '65', '5', '50414', '45506', '7'), +('6', '65', '8', '69064', '81033', '7'), +('6', '65', '8', '69164', '53285', '7'), +('6', '65', '8', '15815', '44159', '7'), +('6', '65', '8', '15823', '43090', '7'), +('6', '65', '6', '13647', '56834', '7'), +('6', '65', '6', '69073', '50429', '7'), +('6', '65', '6', '68841', '49968', '7'), +('6', '65', '6', '69066', '43655', '7'), +('6', '65', '17', '69152', '55188', '7'), +('6', '65', '17', '68750', '47472', '7'), +('6', '65', '17', '14943', '35137', '7'), +('6', '65', '17', '68189', '27500', '7'), +('6', '65', '7', '68901', '45922', '7'), +('6', '65', '7', '11575', '44919', '7'), +('6', '65', '7', '69175', '31220', '7'), +('6', '65', '7', '68007', '27500', '7'), +('6', '65', '9', '68767', '51884', '7'), +('6', '65', '9', '69100', '44483', '7'), +('6', '65', '9', '26752', '41885', '7'), +('6', '65', '9', '32110', '37243', '7'), +('6', '65', '15', '69160', '82711', '7'), +('6', '65', '15', '10234', '46753', '7'), +('6', '65', '15', '69382', '43903', '7'), +('6', '65', '15', '69070', '43268', '7'), +('6', '65', '20', '68951', '49036', '7'), +('6', '65', '20', '62446', '43334', '7'), +('6', '65', '20', '67625', '35235', '7'), +('6', '65', '20', '68556', '32597', '7'), +('6', '65', '12', '68902', '50291', '7'), +('6', '65', '12', '13603', '48340', '7'), +('6', '65', '12', '69085', '34929', '7'), +('6', '65', '12', '69254', '32894', '7'), +('6', '65', '18', '69148', '39735', '7'), +('6', '65', '18', '26783', '36292', '7'), +('6', '65', '18', '68981', '32073', '7'), +('6', '65', '18', '68007', '27500', '7'), +('6', '65', '19', '20422', '33467', '7'), +('6', '65', '19', '69179', '32735', '7'), +('6', '65', '19', '28934', '31903', '7'), +('6', '65', '19', '19079', '30099', '7'), +('6', '65', '13', '21886', '43548', '7'), +('6', '65', '13', '69098', '42150', '7'), +('6', '65', '13', '71241', '39703', '7'), +('6', '65', '13', '52054', '34949', '7'), +('6', '65', '14', '69155', '82831', '7'), +('6', '65', '14', '27280', '57050', '7'), +('6', '65', '14', '69404', '45062', '7'), +('6', '65', '14', '68117', '44464', '7'), +('6', '65', '11', '68952', '64470', '7'), +('6', '65', '11', '20898', '54198', '7'), +('6', '65', '11', '69162', '33654', '7'), +('6', '65', '11', '67606', '32121', '7'), +('6', '65', '22', '66397', '0', '6'), +('6', '65', '22', '61948', '0', '6'), +('6', '65', '22', '21805', '0', '6'), +('6', '65', '22', '21807', '0', '6'), +('6', '65', '1', '5594', '54307', '6'), +('6', '65', '1', '7130', '37984', '6'), +('6', '65', '1', '16257', '35537', '6'), +('6', '65', '1', '4118', '30805', '6'), +('6', '65', '2', '26763', '28603', '6'), +('6', '65', '2', '9496', '27858', '6'), +('6', '65', '2', '68007', '27500', '6'), +('6', '65', '2', '68189', '27500', '6'), +('6', '65', '3', '26984', '45535', '6'), +('6', '65', '3', '26785', '32034', '6'), +('6', '65', '3', '9490', '31850', '6'), +('6', '65', '3', '9463', '29257', '6'), +('6', '65', '5', '7769', '47163', '6'), +('6', '65', '5', '8774', '44757', '6'), +('6', '65', '5', '62446', '43334', '6'), +('6', '65', '5', '28900', '34763', '6'), +('6', '65', '8', '15815', '44159', '6'), +('6', '65', '8', '15823', '43090', '6'), +('6', '65', '8', '51240', '31836', '6'), +('6', '65', '8', '68189', '27500', '6'), +('6', '65', '6', '13647', '56834', '6'), +('6', '65', '6', '13634', '40792', '6'), +('6', '65', '6', '13644', '30011', '6'), +('6', '65', '6', '28660', '27767', '6'), +('6', '65', '17', '14943', '35137', '6'), +('6', '65', '17', '68007', '27500', '6'), +('6', '65', '17', '68189', '27500', '6'), +('6', '65', '17', '69403', '27406', '6'), +('6', '65', '7', '11575', '44919', '6'), +('6', '65', '7', '68007', '27500', '6'), +('6', '65', '7', '68189', '27500', '6'), +('6', '65', '7', '68052', '26400', '6'), +('6', '65', '9', '26752', '41885', '6'), +('6', '65', '9', '32110', '37243', '6'), +('6', '65', '9', '68189', '27500', '6'), +('6', '65', '9', '68007', '27500', '6'), +('6', '65', '15', '10234', '46753', '6'), +('6', '65', '15', '69382', '43903', '6'), +('6', '65', '15', '26993', '33289', '6'), +('6', '65', '15', '51247', '30152', '6'), +('6', '65', '20', '62446', '43334', '6'), +('6', '65', '20', '68189', '27500', '6'), +('6', '65', '20', '68007', '27500', '6'), +('6', '65', '20', '16158', '27468', '6'), +('6', '65', '12', '13603', '48340', '6'), +('6', '65', '12', '68007', '27500', '6'), +('6', '65', '12', '68189', '27500', '6'), +('6', '65', '12', '68052', '26400', '6'), +('6', '65', '18', '26783', '36292', '6'), +('6', '65', '18', '68007', '27500', '6'), +('6', '65', '18', '68189', '27500', '6'), +('6', '65', '18', '68052', '26400', '6'), +('6', '65', '19', '20422', '33467', '6'), +('6', '65', '19', '28934', '31903', '6'), +('6', '65', '19', '19079', '30099', '6'), +('6', '65', '19', '68007', '27500', '6'), +('6', '65', '13', '21886', '43548', '6'), +('6', '65', '13', '71241', '39703', '6'), +('6', '65', '13', '52054', '34949', '6'), +('6', '65', '13', '28980', '33212', '6'), +('6', '65', '14', '27280', '57050', '6'), +('6', '65', '14', '69404', '45062', '6'), +('6', '65', '14', '68117', '44464', '6'), +('6', '65', '14', '71241', '39703', '6'), +('6', '65', '11', '20898', '54198', '6'), +('6', '65', '11', '68116', '31533', '6'), +('6', '65', '11', '28798', '29202', '6'), +('6', '65', '11', '29033', '27755', '6'), +('6', '65', '22', '66397', '0', '5'), +('6', '65', '22', '61948', '0', '5'), +('6', '65', '22', '21805', '0', '5'), +('6', '65', '22', '21807', '0', '5'), +('6', '65', '1', '5594', '54307', '5'), +('6', '65', '1', '7130', '37984', '5'), +('6', '65', '1', '16257', '35537', '5'), +('6', '65', '1', '4118', '30805', '5'), +('6', '65', '2', '26763', '28603', '5'), +('6', '65', '2', '9496', '27858', '5'), +('6', '65', '2', '16158', '27468', '5'), +('6', '65', '2', '28648', '20813', '5'), +('6', '65', '3', '26984', '45535', '5'), +('6', '65', '3', '26785', '32034', '5'), +('6', '65', '3', '9490', '31850', '5'), +('6', '65', '3', '9463', '29257', '5'), +('6', '65', '5', '7769', '47163', '5'), +('6', '65', '5', '8774', '44757', '5'), +('6', '65', '5', '28900', '34763', '5'), +('6', '65', '5', '7756', '33759', '5'), +('6', '65', '8', '15815', '44159', '5'), +('6', '65', '8', '15823', '43090', '5'), +('6', '65', '8', '51240', '31836', '5'), +('6', '65', '8', '1628', '26710', '5'), +('6', '65', '6', '13647', '56834', '5'), +('6', '65', '6', '13634', '40792', '5'), +('6', '65', '6', '13644', '30011', '5'), +('6', '65', '6', '28660', '27767', '5'), +('6', '65', '17', '14943', '35137', '5'), +('6', '65', '17', '47651', '25253', '5'), +('6', '65', '17', '26782', '17440', '5'), +('6', '65', '17', '55297', '15468', '5'), +('6', '65', '7', '11575', '44919', '5'), +('6', '65', '7', '11549', '25431', '5'), +('6', '65', '7', '21994', '19259', '5'), +('6', '65', '7', '8781', '17417', '5'), +('6', '65', '9', '26752', '41885', '5'), +('6', '65', '9', '32110', '37243', '5'), +('6', '65', '9', '28668', '26001', '5'), +('6', '65', '9', '11054', '24585', '5'), +('6', '65', '15', '10234', '46753', '5'), +('6', '65', '15', '26993', '33289', '5'), +('6', '65', '15', '51247', '30152', '5'), +('6', '65', '15', '32109', '28384', '5'), +('6', '65', '20', '16158', '27468', '5'), +('6', '65', '20', '15871', '25538', '5'), +('6', '65', '20', '11666', '23253', '5'), +('6', '65', '20', '15927', '22754', '5'), +('6', '65', '12', '13603', '48340', '5'), +('6', '65', '12', '27000', '21813', '5'), +('6', '65', '12', '11878', '14940', '5'), +('6', '65', '12', '30534', '13711', '5'), +('6', '65', '18', '26783', '36292', '5'), +('6', '65', '18', '28652', '22992', '5'), +('6', '65', '18', '16811', '19006', '5'), +('6', '65', '18', '16605', '14753', '5'), +('6', '65', '19', '20422', '33467', '5'), +('6', '65', '19', '28934', '31903', '5'), +('6', '65', '19', '19079', '30099', '5'), +('6', '65', '19', '31327', '25096', '5'), +('6', '65', '13', '21886', '43548', '5'), +('6', '65', '13', '52054', '34949', '5'), +('6', '65', '13', '28980', '33212', '5'), +('6', '65', '13', '29033', '27755', '5'), +('6', '65', '14', '27280', '57050', '5'), +('6', '65', '14', '52054', '34949', '5'), +('6', '65', '14', '28980', '33212', '5'), +('6', '65', '14', '27285', '31415', '5'), +('6', '65', '11', '20898', '54198', '5'), +('6', '65', '11', '28798', '29202', '5'), +('6', '65', '11', '29033', '27755', '5'), +('6', '65', '11', '20496', '25871', '5'), +('6', '65', '22', '66397', '0', '4'), +('6', '65', '22', '61948', '0', '4'), +('6', '65', '22', '21805', '0', '4'), +('6', '65', '22', '21807', '0', '4'), +('6', '65', '1', '5594', '54307', '4'), +('6', '65', '1', '7130', '37984', '4'), +('6', '65', '1', '16257', '35537', '4'), +('6', '65', '1', '4118', '30805', '4'), +('6', '65', '2', '26763', '28603', '4'), +('6', '65', '2', '9496', '27858', '4'), +('6', '65', '2', '16158', '27468', '4'), +('6', '65', '2', '28648', '20813', '4'), +('6', '65', '3', '26984', '45535', '4'), +('6', '65', '3', '26785', '32034', '4'), +('6', '65', '3', '9490', '31850', '4'), +('6', '65', '3', '9463', '29257', '4'), +('6', '65', '5', '7769', '47163', '4'), +('6', '65', '5', '8774', '44757', '4'), +('6', '65', '5', '28900', '34763', '4'), +('6', '65', '5', '7756', '33759', '4'), +('6', '65', '8', '15815', '44159', '4'), +('6', '65', '8', '15823', '43090', '4'), +('6', '65', '8', '51240', '31836', '4'), +('6', '65', '8', '1628', '26710', '4'), +('6', '65', '6', '13647', '56834', '4'), +('6', '65', '6', '13634', '40792', '4'), +('6', '65', '6', '13644', '30011', '4'), +('6', '65', '6', '28660', '27767', '4'), +('6', '65', '17', '14943', '35137', '4'), +('6', '65', '17', '47651', '25253', '4'), +('6', '65', '17', '26782', '17440', '4'), +('6', '65', '17', '55297', '15468', '4'), +('6', '65', '7', '11575', '44919', '4'), +('6', '65', '7', '11549', '25431', '4'), +('6', '65', '7', '21994', '19259', '4'), +('6', '65', '7', '8781', '17417', '4'), +('6', '65', '9', '26752', '41885', '4'), +('6', '65', '9', '32110', '37243', '4'), +('6', '65', '9', '28668', '26001', '4'), +('6', '65', '9', '11054', '24585', '4'), +('6', '65', '15', '10234', '46753', '4'), +('6', '65', '15', '26993', '33289', '4'), +('6', '65', '15', '51247', '30152', '4'), +('6', '65', '15', '32109', '28384', '4'), +('6', '65', '20', '16158', '27468', '4'), +('6', '65', '20', '15871', '25538', '4'), +('6', '65', '20', '11666', '23253', '4'), +('6', '65', '20', '15927', '22754', '4'), +('6', '65', '12', '13603', '48340', '4'), +('6', '65', '12', '27000', '21813', '4'), +('6', '65', '12', '11878', '14940', '4'), +('6', '65', '12', '30534', '13711', '4'), +('6', '65', '18', '26783', '36292', '4'), +('6', '65', '18', '28652', '22992', '4'), +('6', '65', '18', '16811', '19006', '4'), +('6', '65', '18', '16605', '14753', '4'), +('6', '65', '19', '20422', '33467', '4'), +('6', '65', '19', '28934', '31903', '4'), +('6', '65', '19', '19079', '30099', '4'), +('6', '65', '19', '31327', '25096', '4'), +('6', '65', '13', '21886', '43548', '4'), +('6', '65', '13', '52054', '34949', '4'), +('6', '65', '13', '28980', '33212', '4'), +('6', '65', '13', '29033', '27755', '4'), +('6', '65', '14', '27280', '57050', '4'), +('6', '65', '14', '52054', '34949', '4'), +('6', '65', '14', '28980', '33212', '4'), +('6', '65', '14', '27285', '31415', '4'), +('6', '65', '11', '20898', '54198', '4'), +('6', '65', '11', '28798', '29202', '4'), +('6', '65', '11', '29033', '27755', '4'), +('6', '65', '11', '20496', '25871', '4'), +('6', '66', '22', '66397', '0', '7'), +('6', '66', '22', '61948', '0', '7'), +('6', '66', '22', '21805', '0', '7'), +('6', '66', '22', '21807', '0', '7'), +('6', '66', '1', '5594', '52807', '7'), +('6', '66', '1', '68949', '50141', '7'), +('6', '66', '1', '7130', '37489', '7'), +('6', '66', '1', '52121', '37408', '7'), +('6', '66', '2', '26763', '27856', '7'), +('6', '66', '2', '69089', '27773', '7'), +('6', '66', '2', '16158', '27022', '7'), +('6', '66', '2', '9496', '26859', '7'), +('6', '66', '3', '69068', '79390', '7'), +('6', '66', '3', '68819', '48706', '7'), +('6', '66', '3', '69132', '46784', '7'), +('6', '66', '3', '26984', '44540', '7'), +('6', '66', '5', '69097', '79940', '7'), +('6', '66', '5', '68950', '79622', '7'), +('6', '66', '5', '7769', '46167', '7'), +('6', '66', '5', '50414', '44259', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '66', '8', '69064', '79039', '7'), +('6', '66', '8', '69164', '52540', '7'), +('6', '66', '8', '15815', '43159', '7'), +('6', '66', '8', '15823', '41844', '7'), +('6', '66', '6', '13647', '55339', '7'), +('6', '66', '6', '69073', '49534', '7'), +('6', '66', '6', '68841', '48973', '7'), +('6', '66', '6', '69066', '43158', '7'), +('6', '66', '17', '69152', '54293', '7'), +('6', '66', '17', '68750', '46476', '7'), +('6', '66', '17', '14943', '34392', '7'), +('6', '66', '17', '68980', '27442', '7'), +('6', '66', '7', '68901', '45027', '7'), +('6', '66', '7', '11575', '43673', '7'), +('6', '66', '7', '69175', '31225', '7'), +('6', '66', '7', '69081', '27111', '7'), +('6', '66', '9', '68767', '50386', '7'), +('6', '66', '9', '69100', '43913', '7'), +('6', '66', '9', '26752', '40387', '7'), +('6', '66', '9', '32110', '36671', '7'), +('6', '66', '15', '69160', '80711', '7'), +('6', '66', '15', '10234', '45506', '7'), +('6', '66', '15', '69070', '42772', '7'), +('6', '66', '15', '69382', '42656', '7'), +('6', '66', '20', '68951', '48141', '7'), +('6', '66', '20', '62446', '42084', '7'), +('6', '66', '20', '67625', '35240', '7'), +('6', '66', '20', '69134', '32541', '7'), +('6', '66', '12', '68902', '49045', '7'), +('6', '66', '12', '13603', '47093', '7'), +('6', '66', '12', '69085', '34634', '7'), +('6', '66', '12', '69254', '32898', '7'), +('6', '66', '18', '69148', '39490', '7'), +('6', '66', '18', '26783', '35144', '7'), +('6', '66', '18', '68981', '31777', '7'), +('6', '66', '18', '68007', '26250', '7'), +('6', '66', '19', '69179', '32740', '7'), +('6', '66', '19', '20422', '32721', '7'), +('6', '66', '19', '28934', '30903', '7'), +('6', '66', '19', '19079', '29352', '7'), +('6', '66', '13', '21886', '42552', '7'), +('6', '66', '13', '69098', '41556', '7'), +('6', '66', '13', '71241', '38455', '7'), +('6', '66', '13', '69047', '34041', '7'), +('6', '66', '14', '69155', '80831', '7'), +('6', '66', '14', '27280', '55555', '7'), +('6', '66', '14', '69404', '43815', '7'), +('6', '66', '14', '68117', '43217', '7'), +('6', '66', '11', '68952', '62974', '7'), +('6', '66', '11', '20898', '52701', '7'), +('6', '66', '11', '69162', '33660', '7'), +('6', '66', '11', '67606', '32125', '7'), +('6', '67', '22', '66397', '0', '7'), +('6', '67', '22', '61948', '0', '7'), +('6', '67', '22', '21805', '0', '7'), +('6', '67', '22', '21807', '0', '7'), +('6', '67', '1', '5594', '51307', '7'), +('6', '67', '1', '68949', '49146', '7'), +('6', '67', '1', '7130', '36994', '7'), +('6', '67', '1', '52121', '36911', '7'), +('6', '67', '2', '69089', '27777', '7'), +('6', '67', '2', '26763', '27109', '7'), +('6', '67', '2', '16158', '26576', '7'), +('6', '67', '2', '9496', '25861', '7'), +('6', '67', '3', '69068', '77146', '7'), +('6', '67', '3', '68819', '47209', '7'), +('6', '67', '3', '69132', '46289', '7'), +('6', '67', '3', '26984', '43545', '7'), +('6', '67', '5', '69097', '77695', '7'), +('6', '67', '5', '68950', '77376', '7'), +('6', '67', '5', '7769', '45171', '7'), +('6', '67', '5', '50414', '43012', '7'), +('6', '67', '8', '69064', '77044', '7'), +('6', '67', '8', '69164', '51796', '7'), +('6', '67', '8', '15815', '42159', '7'), +('6', '67', '8', '15823', '40597', '7'), +('6', '67', '6', '13647', '53844', '7'), +('6', '67', '6', '69073', '48639', '7'), +('6', '67', '6', '68841', '47977', '7'), +('6', '67', '6', '69066', '42661', '7'), +('6', '67', '17', '69152', '53398', '7'), +('6', '67', '17', '68750', '45480', '7'), +('6', '67', '17', '14943', '33647', '7'), +('6', '67', '17', '68980', '27447', '7'), +('6', '67', '7', '68901', '44131', '7'), +('6', '67', '7', '11575', '42427', '7'), +('6', '67', '7', '69175', '31229', '7'), +('6', '67', '7', '69081', '27114', '7'), +('6', '67', '9', '68767', '48888', '7'), +('6', '67', '9', '69100', '43343', '7'), +('6', '67', '9', '26752', '38889', '7'), +('6', '67', '9', '32110', '36100', '7'), +('6', '67', '15', '69160', '78711', '7'), +('6', '67', '15', '10234', '44259', '7'), +('6', '67', '15', '69070', '42276', '7'), +('6', '67', '15', '69382', '41409', '7'), +('6', '67', '20', '68951', '47246', '7'), +('6', '67', '20', '62446', '40834', '7'), +('6', '67', '20', '67625', '35245', '7'), +('6', '67', '20', '69134', '32546', '7'), +('6', '67', '12', '68902', '47798', '7'), +('6', '67', '12', '13603', '45847', '7'), +('6', '67', '12', '69085', '34339', '7'), +('6', '67', '12', '69254', '32901', '7'), +('6', '67', '18', '69148', '39245', '7'), +('6', '67', '18', '26783', '33996', '7'), +('6', '67', '18', '68981', '31481', '7'), +('6', '67', '18', '68189', '25000', '7'), +('6', '67', '19', '69179', '32745', '7'), +('6', '67', '19', '20422', '31975', '7'), +('6', '67', '19', '28934', '29903', '7'), +('6', '67', '19', '19079', '28606', '7'), +('6', '67', '13', '21886', '41556', '7'), +('6', '67', '13', '69098', '40962', '7'), +('6', '67', '13', '71241', '37207', '7'), +('6', '67', '13', '69047', '33746', '7'), +('6', '67', '14', '69155', '78832', '7'), +('6', '67', '14', '27280', '54060', '7'), +('6', '67', '14', '69404', '42568', '7'), +('6', '67', '14', '68117', '41970', '7'), +('6', '67', '11', '68952', '61478', '7'), +('6', '67', '11', '20898', '51204', '7'), +('6', '67', '11', '69162', '33666', '7'), +('6', '67', '11', '67606', '32129', '7'), +('6', '68', '22', '66397', '0', '7'), +('6', '68', '22', '61948', '0', '7'), +('6', '68', '22', '21805', '0', '7'), +('6', '68', '22', '21807', '0', '7'), +('6', '68', '1', '5594', '49808', '7'), +('6', '68', '1', '68949', '48152', '7'), +('6', '68', '1', '7130', '36499', '7'), +('6', '68', '1', '52121', '36414', '7'), +('6', '68', '2', '69089', '27781', '7'), +('6', '68', '2', '26763', '26362', '7'), +('6', '68', '2', '16158', '26130', '7'), +('6', '68', '2', '9496', '24863', '7'), +('6', '68', '3', '69068', '74901', '7'), +('6', '68', '3', '69132', '45794', '7'), +('6', '68', '3', '68819', '45712', '7'), +('6', '68', '3', '26984', '42550', '7'), +('6', '68', '5', '69097', '75450', '7'), +('6', '68', '5', '68950', '75130', '7'), +('6', '68', '5', '7769', '44175', '7'), +('6', '68', '5', '50414', '41766', '7'), +('6', '68', '8', '69064', '75049', '7'), +('6', '68', '8', '69164', '51051', '7'), +('6', '68', '8', '15815', '41159', '7'), +('6', '68', '8', '15823', '39351', '7'), +('6', '68', '6', '13647', '52350', '7'), +('6', '68', '6', '69073', '47744', '7'), +('6', '68', '6', '68841', '46981', '7'), +('6', '68', '6', '69066', '42164', '7'), +('6', '68', '17', '69152', '52503', '7'), +('6', '68', '17', '68750', '44484', '7'), +('6', '68', '17', '14943', '32902', '7'), +('6', '68', '17', '68980', '27452', '7'), +('6', '68', '7', '68901', '43235', '7'), +('6', '68', '7', '11575', '41181', '7'), +('6', '68', '7', '69175', '31233', '7'), +('6', '68', '7', '69081', '27117', '7'), +('6', '68', '9', '68767', '47390', '7'), +('6', '68', '9', '69100', '42773', '7'), +('6', '68', '9', '26752', '37391', '7'), +('6', '68', '9', '32110', '35529', '7'), +('6', '68', '15', '69160', '76711', '7'), +('6', '68', '15', '10234', '43012', '7'), +('6', '68', '15', '69070', '41780', '7'), +('6', '68', '15', '69382', '40162', '7'), +('6', '68', '20', '68951', '46351', '7'), +('6', '68', '20', '62446', '39584', '7'), +('6', '68', '20', '67625', '35250', '7'), +('6', '68', '20', '69134', '32551', '7'), +('6', '68', '12', '68902', '46552', '7'), +('6', '68', '12', '13603', '44601', '7'), +('6', '68', '12', '69085', '34044', '7'), +('6', '68', '12', '69254', '32905', '7'), +('6', '68', '18', '69148', '39000', '7'), +('6', '68', '18', '26783', '32848', '7'), +('6', '68', '18', '68981', '31185', '7'), +('6', '68', '18', '68781', '24485', '7'), +('6', '68', '19', '69179', '32750', '7'), +('6', '68', '19', '20422', '31229', '7'), +('6', '68', '19', '28934', '28903', '7'), +('6', '68', '19', '69077', '28283', '7'), +('6', '68', '13', '21886', '40561', '7'), +('6', '68', '13', '69098', '40368', '7'), +('6', '68', '13', '71241', '35959', '7'), +('6', '68', '13', '69047', '33451', '7'), +('6', '68', '14', '69155', '76832', '7'), +('6', '68', '14', '27280', '52565', '7'), +('6', '68', '14', '69404', '41321', '7'), +('6', '68', '14', '68117', '40723', '7'), +('6', '68', '11', '68952', '59982', '7'), +('6', '68', '11', '20898', '49707', '7'), +('6', '68', '11', '69162', '33672', '7'), +('6', '68', '11', '67606', '32133', '7'), +('6', '69', '22', '66397', '0', '7'), +('6', '69', '22', '61948', '0', '7'), +('6', '69', '22', '21805', '0', '7'), +('6', '69', '22', '21807', '0', '7'), +('6', '69', '1', '5594', '48308', '7'), +('6', '69', '1', '68949', '47157', '7'), +('6', '69', '1', '7130', '36005', '7'), +('6', '69', '1', '52121', '35917', '7'), +('6', '69', '2', '69089', '27785', '7'), +('6', '69', '2', '16158', '25684', '7'), +('6', '69', '2', '26763', '25615', '7'), +('6', '69', '2', '67729', '24803', '7'), +('6', '69', '3', '69068', '72656', '7'), +('6', '69', '3', '69132', '45299', '7'), +('6', '69', '3', '68819', '44215', '7'), +('6', '69', '3', '26984', '41555', '7'), +('6', '69', '5', '69097', '73205', '7'), +('6', '69', '5', '68950', '72884', '7'), +('6', '69', '5', '7769', '43179', '7'), +('6', '69', '5', '8774', '40758', '7'), +('6', '69', '8', '69064', '73054', '7'), +('6', '69', '8', '69164', '50306', '7'), +('6', '69', '8', '15815', '40159', '7'), +('6', '69', '8', '15823', '38104', '7'), +('6', '69', '6', '13647', '50855', '7'), +('6', '69', '6', '69073', '46849', '7'), +('6', '69', '6', '68841', '45985', '7'), +('6', '69', '6', '69066', '41667', '7'), +('6', '69', '17', '69152', '51608', '7'), +('6', '69', '17', '68750', '43488', '7'), +('6', '69', '17', '14943', '32157', '7'), +('6', '69', '17', '68980', '27457', '7'), +('6', '69', '7', '68901', '42339', '7'), +('6', '69', '7', '11575', '39936', '7'), +('6', '69', '7', '69175', '31237', '7'), +('6', '69', '7', '69081', '27120', '7'), +('6', '69', '9', '68767', '45892', '7'), +('6', '69', '9', '69100', '42203', '7'), +('6', '69', '9', '26752', '35893', '7'), +('6', '69', '9', '32110', '34957', '7'), +('6', '69', '15', '69160', '74711', '7'), +('6', '69', '15', '10234', '41765', '7'), +('6', '69', '15', '69070', '41284', '7'), +('6', '69', '15', '69382', '38915', '7'), +('6', '69', '20', '68951', '45456', '7'), +('6', '69', '20', '62446', '38334', '7'), +('6', '69', '20', '67625', '35255', '7'), +('6', '69', '20', '69134', '32556', '7'), +('6', '69', '12', '68902', '45306', '7'), +('6', '69', '12', '13603', '43354', '7'), +('6', '69', '12', '69085', '33749', '7'), +('6', '69', '12', '69254', '32909', '7'), +('6', '69', '18', '69148', '38755', '7'), +('6', '69', '18', '26783', '31700', '7'), +('6', '69', '18', '68981', '30889', '7'), +('6', '69', '18', '68781', '24489', '7'), +('6', '69', '19', '69179', '32755', '7'), +('6', '69', '19', '20422', '30483', '7'), +('6', '69', '19', '69077', '28287', '7'), +('6', '69', '19', '28934', '27903', '7'), +('6', '69', '13', '69098', '39774', '7'), +('6', '69', '13', '21886', '39565', '7'), +('6', '69', '13', '71241', '34711', '7'), +('6', '69', '13', '69159', '33377', '7'), +('6', '69', '14', '69155', '74832', '7'), +('6', '69', '14', '27280', '51070', '7'), +('6', '69', '14', '69404', '40074', '7'), +('6', '69', '14', '69098', '39774', '7'), +('6', '69', '11', '68952', '58486', '7'), +('6', '69', '11', '20898', '48210', '7'), +('6', '69', '11', '69162', '33678', '7'), +('6', '69', '11', '67606', '32137', '7'), +('6', '70', '22', '21805', '0', '11'), +('6', '70', '22', '61948', '0', '11'), +('6', '70', '22', '21807', '0', '11'), +('6', '70', '22', '12425', '0', '11'), +('6', '70', '1', '39329', '108055', '11'), +('6', '70', '1', '71668', '59390', '11'), +('6', '70', '1', '83662', '52524', '11'), +('6', '70', '1', '83630', '48944', '11'), +('6', '70', '2', '83562', '39985', '11'), +('6', '70', '2', '70888', '38274', '11'), +('6', '70', '2', '83542', '34784', '11'), +('6', '70', '2', '47210', '32789', '11'), +('6', '70', '3', '69068', '70411', '11'), +('6', '70', '3', '83658', '64975', '11'), +('6', '70', '3', '70620', '62793', '11'), +('6', '70', '3', '39368', '50802', '11'), +('6', '70', '5', '69097', '70960', '11'), +('6', '70', '5', '68950', '70638', '11'), +('6', '70', '5', '47276', '58825', '11'), +('6', '70', '5', '51701', '50612', '11'), +('6', '70', '8', '39293', '108213', '11'), +('6', '70', '8', '83532', '73659', '11'), +('6', '70', '8', '69064', '71059', '11'), +('6', '70', '8', '83659', '66515', '11'), +('6', '70', '6', '71666', '90091', '11'), +('6', '70', '6', '39263', '61830', '11'), +('6', '70', '6', '83660', '59166', '11'), +('6', '70', '6', '39269', '57312', '11'), +('6', '70', '17', '70893', '68167', '11'), +('6', '70', '17', '83605', '67720', '11'), +('6', '70', '17', '69152', '50713', '11'), +('6', '70', '17', '68750', '42492', '11'), +('6', '70', '7', '39357', '66894', '11'), +('6', '70', '7', '68901', '41443', '11'), +('6', '70', '7', '83566', '40935', '11'), +('6', '70', '7', '11575', '38690', '11'), +('6', '70', '9', '51708', '109963', '11'), +('6', '70', '9', '68767', '44394', '11'), +('6', '70', '9', '83654', '43843', '11'), +('6', '70', '9', '39346', '43646', '11'), +('6', '70', '15', '83629', '107381', '11'), +('6', '70', '15', '69160', '72711', '11'), +('6', '70', '15', '47238', '69305', '11'), +('6', '70', '15', '39277', '61678', '11'), +('6', '70', '20', '47284', '67519', '11'), +('6', '70', '20', '47282', '57488', '11'), +('6', '70', '20', '83600', '48882', '11'), +('6', '70', '20', '39350', '46313', '11'), +('6', '70', '12', '68902', '44059', '11'), +('6', '70', '12', '13603', '42108', '11'), +('6', '70', '12', '83570', '41834', '11'), +('6', '70', '12', '83496', '39691', '11'), +('6', '70', '18', '83609', '111018', '11'), +('6', '70', '18', '70894', '40616', '11'), +('6', '70', '18', '69148', '38510', '11'), +('6', '70', '18', '71648', '36651', '11'), +('6', '70', '19', '70892', '82613', '11'), +('6', '70', '19', '83574', '55634', '11'), +('6', '70', '19', '47218', '51741', '11'), +('6', '70', '19', '39279', '41298', '11'), +('6', '70', '13', '83460', '64457', '11'), +('6', '70', '13', '39211', '59760', '11'), +('6', '70', '13', '83631', '56591', '11'), +('6', '70', '13', '83508', '54490', '11'), +('6', '70', '14', '69155', '72832', '11'), +('6', '70', '14', '83460', '64457', '11'), +('6', '70', '14', '39211', '59760', '11'), +('6', '70', '14', '83508', '54490', '11'), +('6', '70', '11', '39287', '108333', '11'), +('6', '70', '11', '68952', '56991', '11'), +('6', '70', '11', '71659', '55655', '11'), +('6', '70', '11', '39320', '50733', '11'), +('6', '70', '22', '61948', '0', '10'), +('6', '70', '22', '66397', '0', '10'), +('6', '70', '22', '21805', '0', '10'), +('6', '70', '22', '21807', '0', '10'), +('6', '70', '1', '71668', '59390', '10'), +('6', '70', '1', '83662', '52524', '10'), +('6', '70', '1', '83630', '48944', '10'), +('6', '70', '1', '5594', '46808', '10'), +('6', '70', '2', '83562', '39985', '10'), +('6', '70', '2', '70888', '38274', '10'), +('6', '70', '2', '83542', '34784', '10'), +('6', '70', '2', '47210', '32789', '10'), +('6', '70', '3', '69068', '70411', '10'), +('6', '70', '3', '83658', '64975', '10'), +('6', '70', '3', '70620', '62793', '10'), +('6', '70', '3', '70602', '49684', '10'), +('6', '70', '5', '69097', '70960', '10'), +('6', '70', '5', '68950', '70638', '10'), +('6', '70', '5', '47276', '58825', '10'), +('6', '70', '5', '70705', '44814', '10'), +('6', '70', '8', '83532', '73659', '10'), +('6', '70', '8', '69064', '71059', '10'), +('6', '70', '8', '83659', '66515', '10'), +('6', '70', '8', '47306', '58997', '10'), +('6', '70', '6', '71666', '90091', '10'), +('6', '70', '6', '83660', '59166', '10'), +('6', '70', '6', '47280', '50327', '10'), +('6', '70', '6', '13647', '49360', '10'), +('6', '70', '17', '70893', '68167', '10'), +('6', '70', '17', '83605', '67720', '10'), +('6', '70', '17', '69152', '50713', '10'), +('6', '70', '17', '68750', '42492', '10'), +('6', '70', '7', '68901', '41443', '10'), +('6', '70', '7', '83566', '40935', '10'), +('6', '70', '7', '11575', '38690', '10'), +('6', '70', '7', '70889', '37648', '10'), +('6', '70', '9', '68767', '44394', '10'), +('6', '70', '9', '83654', '43843', '10'), +('6', '70', '9', '69100', '41634', '10'), +('6', '70', '9', '70890', '36737', '10'), +('6', '70', '15', '83629', '107381', '10'), +('6', '70', '15', '69160', '72711', '10'), +('6', '70', '15', '47238', '69305', '10'), +('6', '70', '15', '47291', '56384', '10'), +('6', '70', '20', '47284', '67519', '10'), +('6', '70', '20', '47282', '57488', '10'), +('6', '70', '20', '83600', '48882', '10'), +('6', '70', '20', '68951', '44561', '10'), +('6', '70', '12', '68902', '44059', '10'), +('6', '70', '12', '13603', '42108', '10'), +('6', '70', '12', '83570', '41834', '10'), +('6', '70', '12', '83496', '39691', '10'), +('6', '70', '18', '83609', '111018', '10'), +('6', '70', '18', '70894', '40616', '10'), +('6', '70', '18', '69148', '38510', '10'), +('6', '70', '18', '71648', '36651', '10'), +('6', '70', '19', '70892', '82613', '10'), +('6', '70', '19', '83574', '55634', '10'), +('6', '70', '19', '47218', '51741', '10'), +('6', '70', '19', '83504', '34140', '10'), +('6', '70', '13', '83460', '64457', '10'), +('6', '70', '13', '83631', '56591', '10'), +('6', '70', '13', '83508', '54490', '10'), +('6', '70', '13', '71610', '43370', '10'), +('6', '70', '14', '69155', '72832', '10'), +('6', '70', '14', '83460', '64457', '10'), +('6', '70', '14', '83508', '54490', '10'), +('6', '70', '14', '39315', '50763', '10'), +('6', '70', '11', '68952', '56991', '10'), +('6', '70', '11', '71659', '55655', '10'), +('6', '70', '11', '20898', '46713', '10'), +('6', '70', '11', '83665', '45468', '10'), +('6', '70', '22', '66397', '0', '9'), +('6', '70', '22', '61948', '0', '9'), +('6', '70', '22', '21805', '0', '9'), +('6', '70', '22', '21807', '0', '9'), +('6', '70', '1', '71668', '59390', '9'), +('6', '70', '1', '5594', '46808', '9'), +('6', '70', '1', '68949', '46162', '9'), +('6', '70', '1', '47289', '41973', '9'), +('6', '70', '2', '70888', '38274', '9'), +('6', '70', '2', '47210', '32789', '9'), +('6', '70', '2', '69089', '27789', '9'), +('6', '70', '2', '71083', '26213', '9'), +('6', '70', '3', '69068', '70411', '9'), +('6', '70', '3', '70620', '62793', '9'), +('6', '70', '3', '70602', '49684', '9'), +('6', '70', '3', '71626', '46364', '9'), +('6', '70', '5', '69097', '70960', '9'), +('6', '70', '5', '68950', '70638', '9'), +('6', '70', '5', '47276', '58825', '9'), +('6', '70', '5', '70705', '44814', '9'), +('6', '70', '8', '69064', '71059', '9'), +('6', '70', '8', '47306', '58997', '9'), +('6', '70', '8', '71656', '56297', '9'), +('6', '70', '8', '69164', '49561', '9'), +('6', '70', '6', '71666', '90091', '9'), +('6', '70', '6', '47280', '50327', '9'), +('6', '70', '6', '13647', '49360', '9'), +('6', '70', '6', '69073', '45954', '9'), +('6', '70', '17', '70893', '68167', '9'), +('6', '70', '17', '69152', '50713', '9'), +('6', '70', '17', '68750', '42492', '9'), +('6', '70', '17', '71097', '41896', '9'), +('6', '70', '7', '68901', '41443', '9'), +('6', '70', '7', '11575', '38690', '9'), +('6', '70', '7', '70889', '37648', '9'), +('6', '70', '7', '47206', '33121', '9'), +('6', '70', '9', '68767', '44394', '9'), +('6', '70', '9', '69100', '41634', '9'), +('6', '70', '9', '70890', '36737', '9'), +('6', '70', '9', '26752', '34395', '9'), +('6', '70', '15', '69160', '72711', '9'), +('6', '70', '15', '47238', '69305', '9'), +('6', '70', '15', '47291', '56384', '9'), +('6', '70', '15', '47240', '51049', '9'), +('6', '70', '20', '47284', '67519', '9'), +('6', '70', '20', '47282', '57488', '9'), +('6', '70', '20', '68951', '44561', '9'), +('6', '70', '20', '62446', '37084', '9'), +('6', '70', '12', '68902', '44059', '9'), +('6', '70', '12', '13603', '42108', '9'), +('6', '70', '12', '70891', '37634', '9'), +('6', '70', '12', '69085', '33454', '9'), +('6', '70', '18', '70894', '40616', '9'), +('6', '70', '18', '69148', '38510', '9'), +('6', '70', '18', '71648', '36651', '9'), +('6', '70', '18', '47202', '33716', '9'), +('6', '70', '19', '70892', '82613', '9'), +('6', '70', '19', '47218', '51741', '9'), +('6', '70', '19', '71086', '34003', '9'), +('6', '70', '19', '69179', '32760', '9'), +('6', '70', '13', '71610', '43370', '9'), +('6', '70', '13', '62880', '41588', '9'), +('6', '70', '13', '71671', '40490', '9'), +('6', '70', '13', '69098', '39180', '9'), +('6', '70', '14', '69155', '72832', '9'), +('6', '70', '14', '39315', '50763', '9'), +('6', '70', '14', '27280', '49575', '9'), +('6', '70', '14', '71610', '43370', '9'), +('6', '70', '11', '68952', '56991', '9'), +('6', '70', '11', '71659', '55655', '9'), +('6', '70', '11', '20898', '46713', '9'), +('6', '70', '11', '47298', '37058', '9'), +('6', '70', '22', '66397', '0', '8'), +('6', '70', '22', '61948', '0', '8'), +('6', '70', '22', '21805', '0', '8'), +('6', '70', '22', '21807', '0', '8'), +('6', '70', '1', '5594', '46808', '8'), +('6', '70', '1', '68949', '46162', '8'), +('6', '70', '1', '47289', '41973', '8'), +('6', '70', '1', '47235', '39707', '8'), +('6', '70', '2', '70888', '38274', '8'), +('6', '70', '2', '47210', '32789', '8'), +('6', '70', '2', '69089', '27789', '8'), +('6', '70', '2', '71083', '26213', '8'), +('6', '70', '3', '69068', '70411', '8'), +('6', '70', '3', '70620', '62793', '8'), +('6', '70', '3', '70602', '49684', '8'), +('6', '70', '3', '69132', '44804', '8'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '70', '5', '69097', '70960', '8'), +('6', '70', '5', '68950', '70638', '8'), +('6', '70', '5', '47276', '58825', '8'), +('6', '70', '5', '70705', '44814', '8'), +('6', '70', '8', '69064', '71059', '8'), +('6', '70', '8', '47306', '58997', '8'), +('6', '70', '8', '69164', '49561', '8'), +('6', '70', '8', '15815', '39159', '8'), +('6', '70', '6', '47280', '50327', '8'), +('6', '70', '6', '13647', '49360', '8'), +('6', '70', '6', '69073', '45954', '8'), +('6', '70', '6', '68841', '44989', '8'), +('6', '70', '17', '70893', '68167', '8'), +('6', '70', '17', '69152', '50713', '8'), +('6', '70', '17', '68750', '42492', '8'), +('6', '70', '17', '71097', '41896', '8'), +('6', '70', '7', '68901', '41443', '8'), +('6', '70', '7', '11575', '38690', '8'), +('6', '70', '7', '70889', '37648', '8'), +('6', '70', '7', '47206', '33121', '8'), +('6', '70', '9', '68767', '44394', '8'), +('6', '70', '9', '69100', '41634', '8'), +('6', '70', '9', '70890', '36737', '8'), +('6', '70', '9', '26752', '34395', '8'), +('6', '70', '15', '69160', '72711', '8'), +('6', '70', '15', '47238', '69305', '8'), +('6', '70', '15', '47291', '56384', '8'), +('6', '70', '15', '47240', '51049', '8'), +('6', '70', '20', '47284', '67519', '8'), +('6', '70', '20', '47282', '57488', '8'), +('6', '70', '20', '68951', '44561', '8'), +('6', '70', '20', '62446', '37084', '8'), +('6', '70', '12', '68902', '44059', '8'), +('6', '70', '12', '13603', '42108', '8'), +('6', '70', '12', '70891', '37634', '8'), +('6', '70', '12', '69085', '33454', '8'), +('6', '70', '18', '70894', '40616', '8'), +('6', '70', '18', '69148', '38510', '8'), +('6', '70', '18', '47202', '33716', '8'), +('6', '70', '18', '68981', '30593', '8'), +('6', '70', '19', '70892', '82613', '8'), +('6', '70', '19', '47218', '51741', '8'), +('6', '70', '19', '71086', '34003', '8'), +('6', '70', '19', '69179', '32760', '8'), +('6', '70', '13', '62880', '41588', '8'), +('6', '70', '13', '69098', '39180', '8'), +('6', '70', '13', '21886', '38569', '8'), +('6', '70', '13', '47308', '38231', '8'), +('6', '70', '14', '69155', '72832', '8'), +('6', '70', '14', '39315', '50763', '8'), +('6', '70', '14', '27280', '49575', '8'), +('6', '70', '14', '69098', '39180', '8'), +('6', '70', '11', '68952', '56991', '8'), +('6', '70', '11', '20898', '46713', '8'), +('6', '70', '11', '47298', '37058', '8'), +('6', '70', '11', '47296', '35300', '8'), +('6', '71', '22', '21805', '0', '11'), +('6', '71', '22', '61948', '0', '11'), +('6', '71', '22', '21807', '0', '11'), +('6', '71', '22', '12425', '0', '11'), +('6', '71', '1', '39329', '105060', '11'), +('6', '71', '1', '71668', '58396', '11'), +('6', '71', '1', '83662', '52180', '11'), +('6', '71', '1', '83630', '48598', '11'), +('6', '71', '2', '83562', '39991', '11'), +('6', '71', '2', '70888', '38280', '11'), +('6', '71', '2', '83542', '34788', '11'), +('6', '71', '2', '47210', '32794', '11'), +('6', '71', '3', '69068', '68166', '11'), +('6', '71', '3', '83658', '63980', '11'), +('6', '71', '3', '70620', '61047', '11'), +('6', '71', '3', '39368', '50809', '11'), +('6', '71', '5', '69097', '68715', '11'), +('6', '71', '5', '68950', '68392', '11'), +('6', '71', '5', '47276', '57830', '11'), +('6', '71', '5', '39366', '50361', '11'), +('6', '71', '8', '39293', '105217', '11'), +('6', '71', '8', '83532', '71664', '11'), +('6', '71', '8', '69064', '69064', '11'), +('6', '71', '8', '83659', '65515', '11'), +('6', '71', '6', '71666', '87597', '11'), +('6', '71', '6', '39263', '60834', '11'), +('6', '71', '6', '83660', '58466', '11'), +('6', '71', '6', '39269', '56617', '11'), +('6', '71', '17', '70893', '66918', '11'), +('6', '71', '17', '83605', '66725', '11'), +('6', '71', '17', '69152', '49818', '11'), +('6', '71', '17', '68750', '41496', '11'), +('6', '71', '7', '39357', '65898', '11'), +('6', '71', '7', '83566', '40941', '11'), +('6', '71', '7', '68901', '40547', '11'), +('6', '71', '7', '70889', '37652', '11'), +('6', '71', '9', '51708', '106968', '11'), +('6', '71', '9', '83654', '43847', '11'), +('6', '71', '9', '39346', '43650', '11'), +('6', '71', '9', '68767', '42896', '11'), +('6', '71', '15', '83629', '104387', '11'), +('6', '71', '15', '69160', '70712', '11'), +('6', '71', '15', '47238', '67560', '11'), +('6', '71', '15', '39277', '60682', '11'), +('6', '71', '20', '47284', '66022', '11'), +('6', '71', '20', '47282', '56492', '11'), +('6', '71', '20', '83600', '48538', '11'), +('6', '71', '20', '39350', '46318', '11'), +('6', '71', '12', '68902', '42813', '11'), +('6', '71', '12', '83570', '41840', '11'), +('6', '71', '12', '84145', '40862', '11'), +('6', '71', '12', '83496', '39395', '11'), +('6', '71', '18', '83609', '108023', '11'), +('6', '71', '18', '70894', '40621', '11'), +('6', '71', '18', '69148', '38265', '11'), +('6', '71', '18', '71648', '36404', '11'), +('6', '71', '19', '70892', '80371', '11'), +('6', '71', '19', '83574', '54940', '11'), +('6', '71', '19', '47218', '50845', '11'), +('6', '71', '19', '39279', '41302', '11'), +('6', '71', '13', '83460', '62712', '11'), +('6', '71', '13', '39211', '58765', '11'), +('6', '71', '13', '83631', '55897', '11'), +('6', '71', '13', '83508', '53494', '11'), +('6', '71', '14', '69155', '70832', '11'), +('6', '71', '14', '83460', '62712', '11'), +('6', '71', '14', '39211', '58765', '11'), +('6', '71', '14', '83508', '53494', '11'), +('6', '71', '11', '39287', '105338', '11'), +('6', '71', '11', '68952', '55495', '11'), +('6', '71', '11', '71659', '54660', '11'), +('6', '71', '11', '39320', '50389', '11'), +('6', '72', '22', '21805', '0', '11'), +('6', '72', '22', '61948', '0', '11'), +('6', '72', '22', '21807', '0', '11'), +('6', '72', '22', '12425', '0', '11'), +('6', '72', '1', '39329', '102065', '11'), +('6', '72', '1', '71668', '57401', '11'), +('6', '72', '1', '83662', '51837', '11'), +('6', '72', '1', '83630', '48252', '11'), +('6', '72', '2', '83562', '39997', '11'), +('6', '72', '2', '70888', '38286', '11'), +('6', '72', '2', '83542', '34792', '11'), +('6', '72', '2', '47210', '32798', '11'), +('6', '72', '3', '69068', '65921', '11'), +('6', '72', '3', '83658', '62984', '11'), +('6', '72', '3', '70620', '59301', '11'), +('6', '72', '3', '39368', '50816', '11'), +('6', '72', '5', '69097', '66470', '11'), +('6', '72', '5', '68950', '66146', '11'), +('6', '72', '5', '47276', '56835', '11'), +('6', '72', '5', '39366', '50369', '11'), +('6', '72', '8', '39293', '102222', '11'), +('6', '72', '8', '83532', '69669', '11'), +('6', '72', '8', '69064', '67069', '11'), +('6', '72', '8', '83659', '64515', '11'), +('6', '72', '6', '71666', '85102', '11'), +('6', '72', '6', '39263', '59838', '11'), +('6', '72', '6', '83660', '57766', '11'), +('6', '72', '6', '39269', '55922', '11'), +('6', '72', '17', '83605', '65730', '11'), +('6', '72', '17', '70893', '65668', '11'), +('6', '72', '17', '69152', '48923', '11'), +('6', '72', '17', '68750', '40500', '11'), +('6', '72', '7', '39357', '64902', '11'), +('6', '72', '7', '83566', '40948', '11'), +('6', '72', '7', '68901', '39651', '11'), +('6', '72', '7', '70889', '37657', '11'), +('6', '72', '9', '51708', '103973', '11'), +('6', '72', '9', '83654', '43851', '11'), +('6', '72', '9', '39346', '43654', '11'), +('6', '72', '9', '39297', '41463', '11'), +('6', '72', '15', '83629', '101394', '11'), +('6', '72', '15', '69160', '68712', '11'), +('6', '72', '15', '47238', '65814', '11'), +('6', '72', '15', '39277', '59686', '11'), +('6', '72', '20', '47284', '64525', '11'), +('6', '72', '20', '47282', '55495', '11'), +('6', '72', '20', '83600', '48194', '11'), +('6', '72', '20', '39350', '46323', '11'), +('6', '72', '12', '83570', '41847', '11'), +('6', '72', '12', '68902', '41567', '11'), +('6', '72', '12', '84145', '39615', '11'), +('6', '72', '12', '83496', '39099', '11'), +('6', '72', '18', '83609', '105028', '11'), +('6', '72', '18', '70894', '40627', '11'), +('6', '72', '18', '69148', '38021', '11'), +('6', '72', '18', '71648', '36158', '11'), +('6', '72', '19', '70892', '78129', '11'), +('6', '72', '19', '83574', '54246', '11'), +('6', '72', '19', '47218', '49950', '11'), +('6', '72', '19', '39279', '41305', '11'), +('6', '72', '13', '83460', '60967', '11'), +('6', '72', '13', '39211', '57770', '11'), +('6', '72', '13', '83631', '55203', '11'), +('6', '72', '13', '83508', '52498', '11'), +('6', '72', '14', '69155', '68832', '11'), +('6', '72', '14', '83460', '60967', '11'), +('6', '72', '14', '39211', '57770', '11'), +('6', '72', '14', '83508', '52498', '11'), +('6', '72', '11', '39287', '102343', '11'), +('6', '72', '11', '68952', '53999', '11'), +('6', '72', '11', '71659', '53664', '11'), +('6', '72', '11', '39371', '50104', '11'), +('6', '73', '22', '21805', '0', '11'), +('6', '73', '22', '61948', '0', '11'), +('6', '73', '22', '21807', '0', '11'), +('6', '73', '22', '12425', '0', '11'), +('6', '73', '1', '39329', '99070', '11'), +('6', '73', '1', '71668', '56407', '11'), +('6', '73', '1', '83662', '51494', '11'), +('6', '73', '1', '83630', '47907', '11'), +('6', '73', '2', '83562', '40003', '11'), +('6', '73', '2', '70888', '38292', '11'), +('6', '73', '2', '83542', '34796', '11'), +('6', '73', '2', '47210', '32802', '11'), +('6', '73', '3', '69068', '63676', '11'), +('6', '73', '3', '83658', '61989', '11'), +('6', '73', '3', '70620', '57556', '11'), +('6', '73', '3', '39368', '50823', '11'), +('6', '73', '5', '69097', '64225', '11'), +('6', '73', '5', '68950', '63900', '11'), +('6', '73', '5', '47276', '55841', '11'), +('6', '73', '5', '39366', '50376', '11'), +('6', '73', '8', '39293', '99226', '11'), +('6', '73', '8', '83532', '67674', '11'), +('6', '73', '8', '69064', '65074', '11'), +('6', '73', '8', '83659', '63515', '11'), +('6', '73', '6', '71666', '82608', '11'), +('6', '73', '6', '39263', '58842', '11'), +('6', '73', '6', '83660', '57066', '11'), +('6', '73', '6', '39269', '55227', '11'), +('6', '73', '17', '83605', '64735', '11'), +('6', '73', '17', '70893', '64418', '11'), +('6', '73', '17', '69152', '48028', '11'), +('6', '73', '17', '71097', '39659', '11'), +('6', '73', '7', '39357', '63906', '11'), +('6', '73', '7', '83566', '40954', '11'), +('6', '73', '7', '68901', '38756', '11'), +('6', '73', '7', '70889', '37661', '11'), +('6', '73', '9', '51708', '100978', '11'), +('6', '73', '9', '83654', '43855', '11'), +('6', '73', '9', '39346', '43658', '11'), +('6', '73', '9', '39297', '41468', '11'), +('6', '73', '15', '83629', '98400', '11'), +('6', '73', '15', '69160', '66712', '11'), +('6', '73', '15', '47238', '64068', '11'), +('6', '73', '15', '39277', '58690', '11'), +('6', '73', '20', '47284', '63028', '11'), +('6', '73', '20', '47282', '54498', '11'), +('6', '73', '20', '83600', '47850', '11'), +('6', '73', '20', '39350', '46328', '11'), +('6', '73', '12', '83570', '41853', '11'), +('6', '73', '12', '68902', '40320', '11'), +('6', '73', '12', '83496', '38803', '11'), +('6', '73', '12', '84145', '38369', '11'), +('6', '73', '18', '83609', '102033', '11'), +('6', '73', '18', '70894', '40632', '11'), +('6', '73', '18', '69148', '37776', '11'), +('6', '73', '18', '71648', '35911', '11'), +('6', '73', '19', '70892', '75887', '11'), +('6', '73', '19', '83574', '53553', '11'), +('6', '73', '19', '47218', '49054', '11'), +('6', '73', '19', '39279', '41309', '11'), +('6', '73', '13', '83460', '59222', '11'), +('6', '73', '13', '39211', '56775', '11'), +('6', '73', '13', '83631', '54509', '11'), +('6', '73', '13', '83508', '51502', '11'), +('6', '73', '14', '69155', '66832', '11'), +('6', '73', '14', '83460', '59222', '11'), +('6', '73', '14', '39211', '56775', '11'), +('6', '73', '14', '83508', '51502', '11'), +('6', '73', '11', '39287', '99349', '11'), +('6', '73', '11', '71659', '52668', '11'), +('6', '73', '11', '68952', '52503', '11'), +('6', '73', '11', '39371', '50108', '11'), +('6', '74', '22', '21805', '0', '11'), +('6', '74', '22', '61948', '0', '11'), +('6', '74', '22', '21807', '0', '11'), +('6', '74', '22', '12425', '0', '11'), +('6', '74', '1', '39329', '96075', '11'), +('6', '74', '1', '71668', '55412', '11'), +('6', '74', '1', '83662', '51151', '11'), +('6', '74', '1', '83630', '47561', '11'), +('6', '74', '2', '83562', '40010', '11'), +('6', '74', '2', '70888', '38298', '11'), +('6', '74', '2', '83542', '34800', '11'), +('6', '74', '2', '47210', '32806', '11'), +('6', '74', '3', '69068', '61431', '11'), +('6', '74', '3', '83658', '60994', '11'), +('6', '74', '3', '70620', '55810', '11'), +('6', '74', '3', '39368', '50831', '11'), +('6', '74', '5', '69097', '61980', '11'), +('6', '74', '5', '68950', '61654', '11'), +('6', '74', '5', '47276', '54846', '11'), +('6', '74', '5', '39366', '50383', '11'), +('6', '74', '8', '39293', '96231', '11'), +('6', '74', '8', '83532', '65679', '11'), +('6', '74', '8', '69064', '63079', '11'), +('6', '74', '8', '83659', '62515', '11'), +('6', '74', '6', '71666', '80113', '11'), +('6', '74', '6', '39263', '57846', '11'), +('6', '74', '6', '83660', '56366', '11'), +('6', '74', '6', '39269', '54532', '11'), +('6', '74', '17', '83605', '63741', '11'), +('6', '74', '17', '70893', '63168', '11'), +('6', '74', '17', '69152', '47134', '11'), +('6', '74', '17', '71097', '38913', '11'), +('6', '74', '7', '39357', '62910', '11'), +('6', '74', '7', '83566', '40960', '11'), +('6', '74', '7', '68901', '37860', '11'), +('6', '74', '7', '70889', '37665', '11'), +('6', '74', '9', '51708', '97983', '11'), +('6', '74', '9', '83654', '43859', '11'), +('6', '74', '9', '39346', '43663', '11'), +('6', '74', '9', '39297', '41473', '11'), +('6', '74', '15', '83629', '95406', '11'), +('6', '74', '15', '69160', '64712', '11'), +('6', '74', '15', '47238', '62323', '11'), +('6', '74', '15', '39277', '57694', '11'), +('6', '74', '20', '47284', '61531', '11'), +('6', '74', '20', '47282', '53502', '11'), +('6', '74', '20', '83600', '47506', '11'), +('6', '74', '20', '39350', '46333', '11'), +('6', '74', '12', '83570', '41859', '11'), +('6', '74', '12', '68902', '39074', '11'), +('6', '74', '12', '83496', '38507', '11'), +('6', '74', '12', '70891', '37659', '11'), +('6', '74', '18', '83609', '99038', '11'), +('6', '74', '18', '70894', '40637', '11'), +('6', '74', '18', '69148', '37531', '11'), +('6', '74', '18', '71648', '35665', '11'), +('6', '74', '19', '70892', '73645', '11'), +('6', '74', '19', '83574', '52859', '11'), +('6', '74', '19', '47218', '48158', '11'), +('6', '74', '19', '39279', '41312', '11'), +('6', '74', '13', '83460', '57478', '11'), +('6', '74', '13', '39211', '55780', '11'), +('6', '74', '13', '83631', '53815', '11'), +('6', '74', '13', '83508', '50506', '11'), +('6', '74', '14', '69155', '64832', '11'), +('6', '74', '14', '83460', '57478', '11'), +('6', '74', '14', '39211', '55780', '11'), +('6', '74', '14', '83508', '50506', '11'), +('6', '74', '11', '39287', '96354', '11'), +('6', '74', '11', '71659', '51673', '11'), +('6', '74', '11', '68952', '51007', '11'), +('6', '74', '11', '39371', '50113', '11'), +('6', '75', '22', '21807', '0', '13'), +('6', '75', '22', '21805', '0', '13'), +('6', '75', '22', '12425', '0', '13'), +('6', '75', '22', '39342', '0', '13'), +('6', '75', '1', '39329', '93080', '13'), +('6', '75', '1', '80676', '69837', '13'), +('6', '75', '1', '80660', '66709', '13'), +('6', '75', '1', '80639', '63588', '13'), +('6', '75', '2', '53396', '54787', '13'), +('6', '75', '2', '83562', '40016', '13'), +('6', '75', '2', '70888', '38304', '13'), +('6', '75', '2', '83542', '34804', '13'), +('6', '75', '3', '80647', '63889', '13'), +('6', '75', '3', '83658', '59998', '13'), +('6', '75', '3', '69068', '59186', '13'), +('6', '75', '3', '46874', '56442', '13'), +('6', '75', '5', '80661', '67709', '13'), +('6', '75', '5', '46934', '60596', '13'), +('6', '75', '5', '80626', '60468', '13'), +('6', '75', '5', '69097', '59735', '13'), +('6', '75', '8', '39293', '93235', '13'), +('6', '75', '8', '80689', '70001', '13'), +('6', '75', '8', '83532', '63684', '13'), +('6', '75', '8', '80649', '63639', '13'), +('6', '75', '6', '71666', '77619', '13'), +('6', '75', '6', '80645', '63938', '13'), +('6', '75', '6', '46883', '60595', '13'), +('6', '75', '6', '46933', '60241', '13'), +('6', '75', '17', '83605', '62746', '13'), +('6', '75', '17', '70893', '61918', '13'), +('6', '75', '17', '53401', '56995', '13'), +('6', '75', '17', '69152', '46239', '13'), +('6', '75', '7', '39357', '61914', '13'), +('6', '75', '7', '53397', '54613', '13'), +('6', '75', '7', '83566', '40966', '13'), +('6', '75', '7', '70889', '37669', '13'), +('6', '75', '9', '51708', '94988', '13'), +('6', '75', '9', '46888', '60243', '13'), +('6', '75', '9', '53398', '54111', '13'), +('6', '75', '9', '83654', '43863', '13'), +('6', '75', '15', '83629', '92412', '13'), +('6', '75', '15', '79909', '73465', '13'), +('6', '75', '15', '80686', '69750', '13'), +('6', '75', '15', '79908', '67034', '13'), +('6', '75', '20', '80690', '70001', '13'), +('6', '75', '20', '46886', '61168', '13'), +('6', '75', '20', '47284', '60034', '13'), +('6', '75', '20', '80620', '59968', '13'), +('6', '75', '12', '53399', '54418', '13'), +('6', '75', '12', '83570', '41865', '13'), +('6', '75', '12', '83496', '38211', '13'), +('6', '75', '12', '68902', '37828', '13'), +('6', '75', '18', '83609', '96043', '13'), +('6', '75', '18', '53402', '56181', '13'), +('6', '75', '18', '70894', '40642', '13'), +('6', '75', '18', '69148', '37286', '13'), +('6', '75', '19', '70892', '71403', '13'), +('6', '75', '19', '53400', '54716', '13'), +('6', '75', '19', '83574', '52165', '13'), +('6', '75', '19', '47218', '47262', '13'), +('6', '75', '13', '80624', '59242', '13'), +('6', '75', '13', '83460', '55733', '13'), +('6', '75', '13', '39211', '54785', '13'), +('6', '75', '13', '83631', '53122', '13'), +('6', '75', '14', '80665', '64833', '13'), +('6', '75', '14', '69155', '62832', '13'), +('6', '75', '14', '80625', '59530', '13'), +('6', '75', '14', '46925', '56307', '13'), +('6', '75', '11', '39287', '93360', '13'), +('6', '75', '11', '80668', '69850', '13'), +('6', '75', '11', '46939', '61492', '13'), +('6', '75', '11', '80619', '60868', '13'), +('6', '75', '22', '21807', '0', '12'), +('6', '75', '22', '21805', '0', '12'), +('6', '75', '22', '12425', '0', '12'), +('6', '75', '22', '39342', '0', '12'), +('6', '75', '1', '39329', '93080', '12'), +('6', '75', '1', '46882', '61236', '12'), +('6', '75', '1', '46865', '56917', '12'), +('6', '75', '1', '46914', '56392', '12'), +('6', '75', '2', '53396', '54787', '12'), +('6', '75', '2', '83562', '40016', '12'), +('6', '75', '2', '70888', '38304', '12'), +('6', '75', '2', '83542', '34804', '12'), +('6', '75', '3', '83658', '59998', '12'), +('6', '75', '3', '69068', '59186', '12'), +('6', '75', '3', '46874', '56442', '12'), +('6', '75', '3', '46923', '56018', '12'), +('6', '75', '5', '46934', '60596', '12'), +('6', '75', '5', '69097', '59735', '12'), +('6', '75', '5', '68950', '59408', '12'), +('6', '75', '5', '46868', '56793', '12'), +('6', '75', '8', '39293', '93235', '12'), +('6', '75', '8', '83532', '63684', '12'), +('6', '75', '8', '83659', '61515', '12'), +('6', '75', '8', '69064', '61084', '12'), +('6', '75', '6', '71666', '77619', '12'), +('6', '75', '6', '46883', '60595', '12'), +('6', '75', '6', '46933', '60241', '12'), +('6', '75', '6', '46884', '59771', '12'), +('6', '75', '17', '83605', '62746', '12'), +('6', '75', '17', '70893', '61918', '12'), +('6', '75', '17', '53401', '56995', '12'), +('6', '75', '17', '69152', '46239', '12'), +('6', '75', '7', '39357', '61914', '12'), +('6', '75', '7', '53397', '54613', '12'), +('6', '75', '7', '83566', '40966', '12'), +('6', '75', '7', '70889', '37669', '12'), +('6', '75', '9', '51708', '94988', '12'), +('6', '75', '9', '46888', '60243', '12'), +('6', '75', '9', '53398', '54111', '12'), +('6', '75', '9', '83654', '43863', '12'), +('6', '75', '15', '83629', '92412', '12'), +('6', '75', '15', '69160', '62712', '12'), +('6', '75', '15', '46932', '61317', '12'), +('6', '75', '15', '47238', '60577', '12'), +('6', '75', '20', '46886', '61168', '12'), +('6', '75', '20', '47284', '60034', '12'), +('6', '75', '20', '46920', '56507', '12'), +('6', '75', '20', '46869', '56345', '12'), +('6', '75', '12', '53399', '54418', '12'), +('6', '75', '12', '83570', '41865', '12'), +('6', '75', '12', '83496', '38211', '12'), +('6', '75', '12', '68902', '37828', '12'), +('6', '75', '18', '83609', '96043', '12'), +('6', '75', '18', '53402', '56181', '12'), +('6', '75', '18', '70894', '40642', '12'), +('6', '75', '18', '69148', '37286', '12'), +('6', '75', '19', '70892', '71403', '12'), +('6', '75', '19', '53400', '54716', '12'), +('6', '75', '19', '83574', '52165', '12'), +('6', '75', '19', '47218', '47262', '12'), +('6', '75', '13', '83460', '55733', '12'), +('6', '75', '13', '39211', '54785', '12'), +('6', '75', '13', '83631', '53122', '12'), +('6', '75', '13', '46991', '49883', '12'), +('6', '75', '14', '69155', '62832', '12'), +('6', '75', '14', '46925', '56307', '12'), +('6', '75', '14', '83460', '55733', '12'), +('6', '75', '14', '46875', '55086', '12'), +('6', '75', '11', '39287', '93360', '12'), +('6', '75', '11', '46939', '61492', '12'), +('6', '75', '11', '46889', '59394', '12'), +('6', '75', '11', '46842', '56417', '12'), +('6', '76', '22', '21807', '0', '13'), +('6', '76', '22', '21805', '0', '13'), +('6', '76', '22', '12425', '0', '13'), +('6', '76', '22', '39342', '0', '13'), +('6', '76', '1', '39329', '90085', '13'), +('6', '76', '1', '80676', '69844', '13'), +('6', '76', '1', '80660', '66716', '13'), +('6', '76', '1', '80639', '63594', '13'), +('6', '76', '2', '53396', '54795', '13'), +('6', '76', '2', '83562', '40022', '13'), +('6', '76', '2', '70888', '38310', '13'), +('6', '76', '2', '83542', '34808', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '76', '3', '80647', '63895', '13'), +('6', '76', '3', '83658', '59003', '13'), +('6', '76', '3', '69068', '56941', '13'), +('6', '76', '3', '46874', '56449', '13'), +('6', '76', '5', '80661', '67716', '13'), +('6', '76', '5', '46934', '60603', '13'), +('6', '76', '5', '80626', '60474', '13'), +('6', '76', '5', '69097', '57491', '13'), +('6', '76', '8', '39293', '90239', '13'), +('6', '76', '8', '80689', '70008', '13'), +('6', '76', '8', '80649', '63645', '13'), +('6', '76', '8', '83532', '61689', '13'), +('6', '76', '6', '71666', '75124', '13'), +('6', '76', '6', '80645', '63945', '13'), +('6', '76', '6', '46883', '60602', '13'), +('6', '76', '6', '46933', '60248', '13'), +('6', '76', '17', '83605', '61751', '13'), +('6', '76', '17', '70893', '60668', '13'), +('6', '76', '17', '53401', '57002', '13'), +('6', '76', '17', '69152', '45344', '13'), +('6', '76', '7', '39357', '60918', '13'), +('6', '76', '7', '53397', '54619', '13'), +('6', '76', '7', '83566', '40972', '13'), +('6', '76', '7', '70889', '37673', '13'), +('6', '76', '9', '51708', '91993', '13'), +('6', '76', '9', '46888', '60251', '13'), +('6', '76', '9', '53398', '54118', '13'), +('6', '76', '9', '83654', '43868', '13'), +('6', '76', '15', '83629', '89418', '13'), +('6', '76', '15', '79909', '73471', '13'), +('6', '76', '15', '80686', '69758', '13'), +('6', '76', '15', '79908', '67040', '13'), +('6', '76', '20', '80690', '70008', '13'), +('6', '76', '20', '46886', '61176', '13'), +('6', '76', '20', '80620', '59969', '13'), +('6', '76', '20', '47284', '58537', '13'), +('6', '76', '12', '53399', '54422', '13'), +('6', '76', '12', '83570', '41871', '13'), +('6', '76', '12', '83496', '37915', '13'), +('6', '76', '12', '70891', '37671', '13'), +('6', '76', '18', '83609', '93049', '13'), +('6', '76', '18', '53402', '56188', '13'), +('6', '76', '18', '70894', '40647', '13'), +('6', '76', '18', '69148', '37041', '13'), +('6', '76', '19', '70892', '69161', '13'), +('6', '76', '19', '53400', '54716', '13'), +('6', '76', '19', '83574', '51471', '13'), +('6', '76', '19', '47218', '46366', '13'), +('6', '76', '13', '80624', '59248', '13'), +('6', '76', '13', '83460', '53988', '13'), +('6', '76', '13', '39211', '53790', '13'), +('6', '76', '13', '83631', '52428', '13'), +('6', '76', '14', '80665', '64839', '13'), +('6', '76', '14', '69155', '60832', '13'), +('6', '76', '14', '80625', '59536', '13'), +('6', '76', '14', '46925', '56313', '13'), +('6', '76', '11', '39287', '90365', '13'), +('6', '76', '11', '80668', '69857', '13'), +('6', '76', '11', '46939', '61499', '13'), +('6', '76', '11', '80619', '60874', '13'), +('6', '77', '22', '21807', '0', '13'), +('6', '77', '22', '21805', '0', '13'), +('6', '77', '22', '12425', '0', '13'), +('6', '77', '22', '39342', '0', '13'), +('6', '77', '1', '39329', '87090', '13'), +('6', '77', '1', '80676', '69851', '13'), +('6', '77', '1', '80660', '66723', '13'), +('6', '77', '1', '80639', '63601', '13'), +('6', '77', '2', '53396', '54802', '13'), +('6', '77', '2', '83562', '40028', '13'), +('6', '77', '2', '70888', '38316', '13'), +('6', '77', '2', '83542', '34812', '13'), +('6', '77', '3', '80647', '63902', '13'), +('6', '77', '3', '83658', '58007', '13'), +('6', '77', '3', '46874', '56456', '13'), +('6', '77', '3', '46923', '56030', '13'), +('6', '77', '5', '80661', '67722', '13'), +('6', '77', '5', '46934', '60610', '13'), +('6', '77', '5', '80626', '60480', '13'), +('6', '77', '5', '46868', '56807', '13'), +('6', '77', '8', '39293', '87244', '13'), +('6', '77', '8', '80689', '70015', '13'), +('6', '77', '8', '80649', '63652', '13'), +('6', '77', '8', '46936', '60851', '13'), +('6', '77', '6', '71666', '72630', '13'), +('6', '77', '6', '80645', '63951', '13'), +('6', '77', '6', '46883', '60609', '13'), +('6', '77', '6', '46933', '60255', '13'), +('6', '77', '17', '83605', '60756', '13'), +('6', '77', '17', '70893', '59418', '13'), +('6', '77', '17', '53401', '57009', '13'), +('6', '77', '17', '46817', '45276', '13'), +('6', '77', '7', '39357', '59922', '13'), +('6', '77', '7', '53397', '54625', '13'), +('6', '77', '7', '83566', '40978', '13'), +('6', '77', '7', '70889', '37678', '13'), +('6', '77', '9', '51708', '88999', '13'), +('6', '77', '9', '46888', '60258', '13'), +('6', '77', '9', '53398', '54124', '13'), +('6', '77', '9', '83654', '43872', '13'), +('6', '77', '15', '83629', '86424', '13'), +('6', '77', '15', '79909', '73477', '13'), +('6', '77', '15', '80686', '69765', '13'), +('6', '77', '15', '79908', '67046', '13'), +('6', '77', '20', '80690', '70015', '13'), +('6', '77', '20', '46886', '61184', '13'), +('6', '77', '20', '80620', '59969', '13'), +('6', '77', '20', '47284', '57040', '13'), +('6', '77', '12', '53399', '54427', '13'), +('6', '77', '12', '83570', '41877', '13'), +('6', '77', '12', '70891', '37677', '13'), +('6', '77', '12', '83496', '37619', '13'), +('6', '77', '18', '83609', '90054', '13'), +('6', '77', '18', '53402', '56195', '13'), +('6', '77', '18', '70894', '40652', '13'), +('6', '77', '18', '69148', '36796', '13'), +('6', '77', '19', '70892', '66919', '13'), +('6', '77', '19', '53400', '54716', '13'), +('6', '77', '19', '83574', '50777', '13'), +('6', '77', '19', '47218', '45470', '13'), +('6', '77', '13', '80624', '59253', '13'), +('6', '77', '13', '39211', '52795', '13'), +('6', '77', '13', '83460', '52243', '13'), +('6', '77', '13', '83631', '51734', '13'), +('6', '77', '14', '80665', '64844', '13'), +('6', '77', '14', '80625', '59541', '13'), +('6', '77', '14', '69155', '58833', '13'), +('6', '77', '14', '46925', '56319', '13'), +('6', '77', '11', '39287', '87370', '13'), +('6', '77', '11', '80668', '69865', '13'), +('6', '77', '11', '46939', '61506', '13'), +('6', '77', '11', '80619', '60880', '13'), +('6', '78', '22', '21807', '0', '13'), +('6', '78', '22', '21805', '0', '13'), +('6', '78', '22', '12425', '0', '13'), +('6', '78', '22', '39342', '0', '13'), +('6', '78', '1', '39329', '84095', '13'), +('6', '78', '1', '80676', '69858', '13'), +('6', '78', '1', '80660', '66730', '13'), +('6', '78', '1', '80639', '63607', '13'), +('6', '78', '2', '53396', '54809', '13'), +('6', '78', '2', '83562', '40034', '13'), +('6', '78', '2', '70888', '38322', '13'), +('6', '78', '2', '83542', '34816', '13'), +('6', '78', '3', '80647', '63908', '13'), +('6', '78', '3', '83658', '57012', '13'), +('6', '78', '3', '46874', '56463', '13'), +('6', '78', '3', '46923', '56037', '13'), +('6', '78', '5', '80661', '67729', '13'), +('6', '78', '5', '46934', '60617', '13'), +('6', '78', '5', '80626', '60486', '13'), +('6', '78', '5', '46868', '56815', '13'), +('6', '78', '8', '39293', '84248', '13'), +('6', '78', '8', '80689', '70023', '13'), +('6', '78', '8', '80649', '63658', '13'), +('6', '78', '8', '46936', '60859', '13'), +('6', '78', '6', '71666', '70135', '13'), +('6', '78', '6', '80645', '63958', '13'), +('6', '78', '6', '46883', '60617', '13'), +('6', '78', '6', '46933', '60262', '13'), +('6', '78', '17', '83605', '59761', '13'), +('6', '78', '17', '70893', '58169', '13'), +('6', '78', '17', '53401', '57016', '13'), +('6', '78', '17', '46817', '45280', '13'), +('6', '78', '7', '39357', '58927', '13'), +('6', '78', '7', '53397', '54631', '13'), +('6', '78', '7', '83566', '40984', '13'), +('6', '78', '7', '70889', '37682', '13'), +('6', '78', '9', '51708', '86004', '13'), +('6', '78', '9', '46888', '60265', '13'), +('6', '78', '9', '53398', '54130', '13'), +('6', '78', '9', '83654', '43876', '13'), +('6', '78', '15', '83629', '83430', '13'), +('6', '78', '15', '79909', '73483', '13'), +('6', '78', '15', '80686', '69773', '13'), +('6', '78', '15', '79908', '67051', '13'), +('6', '78', '20', '80690', '70023', '13'), +('6', '78', '20', '46886', '61192', '13'), +('6', '78', '20', '80620', '59969', '13'), +('6', '78', '20', '46920', '56525', '13'), +('6', '78', '12', '53399', '54431', '13'), +('6', '78', '12', '83570', '41883', '13'), +('6', '78', '12', '70891', '37684', '13'), +('6', '78', '12', '83496', '37323', '13'), +('6', '78', '18', '83609', '87059', '13'), +('6', '78', '18', '53402', '56202', '13'), +('6', '78', '18', '70894', '40658', '13'), +('6', '78', '18', '69148', '36551', '13'), +('6', '78', '19', '70892', '64677', '13'), +('6', '78', '19', '53400', '54717', '13'), +('6', '78', '19', '83574', '50083', '13'), +('6', '78', '19', '47218', '44574', '13'), +('6', '78', '13', '80624', '59258', '13'), +('6', '78', '13', '39211', '51800', '13'), +('6', '78', '13', '83631', '51040', '13'), +('6', '78', '13', '83460', '50498', '13'), +('6', '78', '14', '80665', '64849', '13'), +('6', '78', '14', '80625', '59546', '13'), +('6', '78', '14', '69155', '56833', '13'), +('6', '78', '14', '46925', '56326', '13'), +('6', '78', '11', '39287', '84376', '13'), +('6', '78', '11', '80668', '69872', '13'), +('6', '78', '11', '46939', '61514', '13'), +('6', '78', '11', '80619', '60886', '13'), +('6', '79', '22', '21807', '0', '13'), +('6', '79', '22', '21805', '0', '13'), +('6', '79', '22', '12425', '0', '13'), +('6', '79', '22', '39342', '0', '13'), +('6', '79', '1', '39329', '81100', '13'), +('6', '79', '1', '80676', '69866', '13'), +('6', '79', '1', '80660', '66737', '13'), +('6', '79', '1', '80639', '63614', '13'), +('6', '79', '2', '53396', '54816', '13'), +('6', '79', '2', '83562', '40040', '13'), +('6', '79', '2', '70888', '38328', '13'), +('6', '79', '2', '83542', '34820', '13'), +('6', '79', '3', '80647', '63915', '13'), +('6', '79', '3', '46874', '56470', '13'), +('6', '79', '3', '46923', '56043', '13'), +('6', '79', '3', '83658', '56016', '13'), +('6', '79', '5', '80661', '67736', '13'), +('6', '79', '5', '46934', '60624', '13'), +('6', '79', '5', '80626', '60492', '13'), +('6', '79', '5', '46868', '56822', '13'), +('6', '79', '8', '39293', '81253', '13'), +('6', '79', '8', '80689', '70030', '13'), +('6', '79', '8', '80649', '63665', '13'), +('6', '79', '8', '46936', '60867', '13'), +('6', '79', '6', '71666', '67641', '13'), +('6', '79', '6', '80645', '63965', '13'), +('6', '79', '6', '46883', '60624', '13'), +('6', '79', '6', '46933', '60269', '13'), +('6', '79', '17', '83605', '58766', '13'), +('6', '79', '17', '53401', '57023', '13'), +('6', '79', '17', '70893', '56919', '13'), +('6', '79', '17', '46817', '45284', '13'), +('6', '79', '7', '39357', '57931', '13'), +('6', '79', '7', '53397', '54637', '13'), +('6', '79', '7', '83566', '40991', '13'), +('6', '79', '7', '70889', '37686', '13'), +('6', '79', '9', '51708', '83009', '13'), +('6', '79', '9', '46888', '60272', '13'), +('6', '79', '9', '53398', '54136', '13'), +('6', '79', '9', '83654', '43880', '13'), +('6', '79', '15', '83629', '80436', '13'), +('6', '79', '15', '79909', '73490', '13'), +('6', '79', '15', '80686', '69780', '13'), +('6', '79', '15', '79908', '67057', '13'), +('6', '79', '20', '80690', '70030', '13'), +('6', '79', '20', '46886', '61201', '13'), +('6', '79', '20', '80620', '59969', '13'), +('6', '79', '20', '46920', '56531', '13'), +('6', '79', '12', '53399', '54435', '13'), +('6', '79', '12', '83570', '41890', '13'), +('6', '79', '12', '70891', '37690', '13'), +('6', '79', '12', '83496', '37027', '13'), +('6', '79', '18', '83609', '84064', '13'), +('6', '79', '18', '53402', '56209', '13'), +('6', '79', '18', '70894', '40663', '13'), +('6', '79', '18', '69148', '36306', '13'), +('6', '79', '19', '70892', '62435', '13'), +('6', '79', '19', '53400', '54717', '13'), +('6', '79', '19', '83574', '49389', '13'), +('6', '79', '19', '47218', '43678', '13'), +('6', '79', '13', '80624', '59263', '13'), +('6', '79', '13', '39211', '50805', '13'), +('6', '79', '13', '83631', '50347', '13'), +('6', '79', '13', '46991', '49910', '13'), +('6', '79', '14', '80665', '64854', '13'), +('6', '79', '14', '80625', '59551', '13'), +('6', '79', '14', '46925', '56332', '13'), +('6', '79', '14', '46875', '55104', '13'), +('6', '79', '11', '39287', '81381', '13'), +('6', '79', '11', '80668', '69879', '13'), +('6', '79', '11', '46939', '61521', '13'), +('6', '79', '11', '80619', '60893', '13'), +('6', '80', '22', '21807', '0', '14'), +('6', '80', '22', '21805', '0', '14'), +('6', '80', '22', '12425', '0', '14'), +('6', '80', '22', '39342', '0', '14'), +('6', '80', '1', '102611', '91338', '14'), +('6', '80', '1', '102640', '90651', '14'), +('6', '80', '1', '102639', '90576', '14'), +('6', '80', '1', '102641', '90496', '14'), +('6', '80', '2', '102017', '61092', '14'), +('6', '80', '2', '102269', '55056', '14'), +('6', '80', '2', '53396', '54823', '14'), +('6', '80', '2', '83562', '40046', '14'), +('6', '80', '3', '102612', '97077', '14'), +('6', '80', '3', '102626', '95174', '14'), +('6', '80', '3', '102742', '87957', '14'), +('6', '80', '3', '102560', '84724', '14'), +('6', '80', '5', '102731', '101451', '14'), +('6', '80', '5', '102613', '95206', '14'), +('6', '80', '5', '102627', '93481', '14'), +('6', '80', '5', '102730', '87888', '14'), +('6', '80', '8', '102728', '99782', '14'), +('6', '80', '8', '102615', '97032', '14'), +('6', '80', '8', '102629', '95570', '14'), +('6', '80', '8', '102569', '84816', '14'), +('6', '80', '6', '102614', '97795', '14'), +('6', '80', '6', '102628', '95731', '14'), +('6', '80', '6', '102561', '84912', '14'), +('6', '80', '6', '71666', '65147', '14'), +('6', '80', '17', '102020', '65167', '14'), +('6', '80', '17', '102272', '58480', '14'), +('6', '80', '17', '83605', '57772', '14'), +('6', '80', '17', '53401', '57030', '14'), +('6', '80', '7', '102018', '61856', '14'), +('6', '80', '7', '39357', '56935', '14'), +('6', '80', '7', '102270', '55717', '14'), +('6', '80', '7', '53397', '54643', '14'), +('6', '80', '9', '67098', '159947', '14'), +('6', '80', '9', '51708', '80014', '14'), +('6', '80', '9', '46888', '60279', '14'), +('6', '80', '9', '53398', '54142', '14'), +('6', '80', '15', '102723', '100581', '14'), +('6', '80', '15', '102616', '92907', '14'), +('6', '80', '15', '102636', '91860', '14'), +('6', '80', '15', '102635', '91664', '14'), +('6', '80', '20', '102617', '97391', '14'), +('6', '80', '20', '102631', '95913', '14'), +('6', '80', '20', '102563', '84526', '14'), +('6', '80', '20', '80690', '70038', '14'), +('6', '80', '12', '53399', '54439', '14'), +('6', '80', '12', '102267', '52682', '14'), +('6', '80', '12', '83570', '41896', '14'), +('6', '80', '12', '70891', '37696', '14'), +('6', '80', '18', '83609', '81069', '14'), +('6', '80', '18', '102019', '62853', '14'), +('6', '80', '18', '102271', '56719', '14'), +('6', '80', '18', '53402', '56216', '14'), +('6', '80', '19', '70892', '60193', '14'), +('6', '80', '19', '53400', '54717', '14'), +('6', '80', '19', '102268', '53666', '14'), +('6', '80', '19', '76131', '51295', '14'), +('6', '80', '13', '93856', '97138', '14'), +('6', '80', '13', '102735', '87782', '14'), +('6', '80', '13', '102734', '80948', '14'), +('6', '80', '13', '102582', '77531', '14'), +('6', '80', '14', '102633', '96197', '14'), +('6', '80', '14', '102632', '96180', '14'), +('6', '80', '14', '102570', '83406', '14'), +('6', '80', '14', '80665', '64859', '14'), +('6', '80', '11', '102643', '92601', '14'), +('6', '80', '11', '39287', '78387', '14'), +('6', '80', '11', '80668', '69887', '14'), +('6', '80', '11', '46939', '61528', '14'), +('6', '81', '22', '21807', '0', '14'), +('6', '81', '22', '21805', '0', '14'), +('6', '81', '22', '12425', '0', '14'), +('6', '81', '22', '39342', '0', '14'), +('6', '81', '1', '102611', '91345', '14'), +('6', '81', '1', '102640', '90657', '14'), +('6', '81', '1', '102639', '90581', '14'), +('6', '81', '1', '102641', '90502', '14'), +('6', '81', '2', '102017', '61096', '14'), +('6', '81', '2', '102269', '55059', '14'), +('6', '81', '2', '53396', '54830', '14'), +('6', '81', '2', '83562', '40053', '14'), +('6', '81', '3', '102612', '97083', '14'), +('6', '81', '3', '102626', '95179', '14'), +('6', '81', '3', '102742', '87966', '14'), +('6', '81', '3', '102560', '84730', '14'), +('6', '81', '5', '102731', '101460', '14'), +('6', '81', '5', '102613', '95211', '14'), +('6', '81', '5', '102627', '93486', '14'), +('6', '81', '5', '102730', '87895', '14'), +('6', '81', '8', '102728', '99789', '14'), +('6', '81', '8', '102615', '97040', '14'), +('6', '81', '8', '102629', '95575', '14'), +('6', '81', '8', '102569', '84825', '14'), +('6', '81', '6', '102614', '97803', '14'), +('6', '81', '6', '102628', '95738', '14'), +('6', '81', '6', '102561', '84921', '14'), +('6', '81', '6', '80645', '63978', '14'), +('6', '81', '17', '102020', '65173', '14'), +('6', '81', '17', '102272', '58488', '14'), +('6', '81', '17', '53401', '57038', '14'), +('6', '81', '17', '83605', '56777', '14'), +('6', '81', '7', '102018', '61862', '14'), +('6', '81', '7', '39357', '55939', '14'), +('6', '81', '7', '102270', '55723', '14'), +('6', '81', '7', '53397', '54649', '14'), +('6', '81', '9', '67098', '161951', '14'), +('6', '81', '9', '51708', '77019', '14'), +('6', '81', '9', '46888', '60287', '14'), +('6', '81', '9', '53398', '54148', '14'), +('6', '81', '15', '102723', '100588', '14'), +('6', '81', '15', '102616', '92916', '14'), +('6', '81', '15', '102636', '91868', '14'), +('6', '81', '15', '102635', '91669', '14'), +('6', '81', '20', '102617', '97393', '14'), +('6', '81', '20', '102631', '95922', '14'), +('6', '81', '20', '102563', '84532', '14'), +('6', '81', '20', '80690', '70045', '14'), +('6', '81', '12', '53399', '54443', '14'), +('6', '81', '12', '102267', '52687', '14'), +('6', '81', '12', '83570', '41902', '14'), +('6', '81', '12', '70891', '37702', '14'), +('6', '81', '18', '83609', '78074', '14'), +('6', '81', '18', '102019', '62861', '14'), +('6', '81', '18', '102271', '56725', '14'), +('6', '81', '18', '53402', '56223', '14'), +('6', '81', '19', '70892', '57951', '14'), +('6', '81', '19', '53400', '54717', '14'), +('6', '81', '19', '102268', '53671', '14'), +('6', '81', '19', '76131', '51298', '14'), +('6', '81', '13', '93856', '98358', '14'), +('6', '81', '13', '102735', '87789', '14'), +('6', '81', '13', '102734', '80955', '14'), +('6', '81', '13', '102582', '77539', '14'), +('6', '81', '14', '102633', '96203', '14'), +('6', '81', '14', '102632', '96188', '14'), +('6', '81', '14', '102570', '83408', '14'), +('6', '81', '14', '80665', '64864', '14'), +('6', '81', '11', '102643', '92605', '14'), +('6', '81', '11', '39287', '75392', '14'), +('6', '81', '11', '80668', '69894', '14'), +('6', '81', '11', '46939', '61535', '14'), +('6', '82', '22', '21807', '0', '14'), +('6', '82', '22', '21805', '0', '14'), +('6', '82', '22', '12425', '0', '14'), +('6', '82', '22', '39342', '0', '14'), +('6', '82', '1', '102611', '91352', '14'), +('6', '82', '1', '102640', '90662', '14'), +('6', '82', '1', '102639', '90585', '14'), +('6', '82', '1', '102641', '90508', '14'), +('6', '82', '2', '102017', '61100', '14'), +('6', '82', '2', '102269', '55063', '14'), +('6', '82', '2', '53396', '54837', '14'), +('6', '82', '2', '83562', '40059', '14'), +('6', '82', '3', '102612', '97089', '14'), +('6', '82', '3', '102626', '95185', '14'), +('6', '82', '3', '102742', '87974', '14'), +('6', '82', '3', '102560', '84737', '14'), +('6', '82', '5', '102731', '101469', '14'), +('6', '82', '5', '102613', '95215', '14'), +('6', '82', '5', '102627', '93491', '14'), +('6', '82', '5', '102730', '87902', '14'), +('6', '82', '8', '102728', '99796', '14'), +('6', '82', '8', '102615', '97047', '14'), +('6', '82', '8', '102629', '95579', '14'), +('6', '82', '8', '102569', '84835', '14'), +('6', '82', '6', '102614', '97810', '14'), +('6', '82', '6', '102628', '95745', '14'), +('6', '82', '6', '102561', '84930', '14'), +('6', '82', '6', '80645', '63984', '14'), +('6', '82', '17', '102020', '65178', '14'), +('6', '82', '17', '102272', '58496', '14'), +('6', '82', '17', '53401', '57045', '14'), +('6', '82', '17', '83605', '55782', '14'), +('6', '82', '7', '102018', '61868', '14'), +('6', '82', '7', '102270', '55728', '14'), +('6', '82', '7', '39357', '54943', '14'), +('6', '82', '7', '53397', '54656', '14'), +('6', '82', '9', '67098', '163955', '14'), +('6', '82', '9', '51708', '74024', '14'), +('6', '82', '9', '46888', '60294', '14'), +('6', '82', '9', '53398', '54154', '14'), +('6', '82', '15', '102723', '100595', '14'), +('6', '82', '15', '102616', '92924', '14'), +('6', '82', '15', '102636', '91876', '14'), +('6', '82', '15', '102635', '91675', '14'), +('6', '82', '20', '102617', '97396', '14'), +('6', '82', '20', '102631', '95931', '14'), +('6', '82', '20', '102563', '84538', '14'), +('6', '82', '20', '80690', '70052', '14'), +('6', '82', '12', '53399', '54447', '14'), +('6', '82', '12', '102267', '52692', '14'), +('6', '82', '12', '83570', '41908', '14'), +('6', '82', '12', '70891', '37708', '14'), +('6', '82', '18', '83609', '75080', '14'), +('6', '82', '18', '102019', '62870', '14'), +('6', '82', '18', '102271', '56731', '14'), +('6', '82', '18', '53402', '56230', '14'), +('6', '82', '19', '70892', '55709', '14'), +('6', '82', '19', '53400', '54717', '14'), +('6', '82', '19', '102268', '53676', '14'), +('6', '82', '19', '76131', '51301', '14'), +('6', '82', '13', '93856', '99578', '14'), +('6', '82', '13', '102735', '87796', '14'), +('6', '82', '13', '102734', '80961', '14'), +('6', '82', '13', '102582', '77548', '14'), +('6', '82', '14', '102633', '96209', '14'), +('6', '82', '14', '102632', '96196', '14'), +('6', '82', '14', '102570', '83410', '14'), +('6', '82', '14', '80665', '64869', '14'), +('6', '82', '11', '102643', '92609', '14'), +('6', '82', '11', '39287', '72397', '14'), +('6', '82', '11', '80668', '69901', '14'), +('6', '82', '11', '46939', '61542', '14'), +('6', '83', '22', '21807', '0', '14'), +('6', '83', '22', '21805', '0', '14'), +('6', '83', '22', '12425', '0', '14'), +('6', '83', '22', '39342', '0', '14'), +('6', '83', '1', '102611', '91358', '14'), +('6', '83', '1', '102640', '90668', '14'), +('6', '83', '1', '102639', '90590', '14'), +('6', '83', '1', '102641', '90515', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '83', '2', '102017', '61104', '14'), +('6', '83', '2', '102269', '55067', '14'), +('6', '83', '2', '53396', '54844', '14'), +('6', '83', '2', '83562', '40065', '14'), +('6', '83', '3', '102612', '97095', '14'), +('6', '83', '3', '102626', '95190', '14'), +('6', '83', '3', '102742', '87982', '14'), +('6', '83', '3', '102560', '84743', '14'), +('6', '83', '5', '102731', '101478', '14'), +('6', '83', '5', '102613', '95219', '14'), +('6', '83', '5', '102627', '93495', '14'), +('6', '83', '5', '102730', '87909', '14'), +('6', '83', '8', '102728', '99803', '14'), +('6', '83', '8', '102615', '97055', '14'), +('6', '83', '8', '102629', '95584', '14'), +('6', '83', '8', '102569', '84844', '14'), +('6', '83', '6', '102614', '97818', '14'), +('6', '83', '6', '102628', '95751', '14'), +('6', '83', '6', '102561', '84940', '14'), +('6', '83', '6', '80645', '63991', '14'), +('6', '83', '17', '102020', '65184', '14'), +('6', '83', '17', '102272', '58503', '14'), +('6', '83', '17', '53401', '57052', '14'), +('6', '83', '17', '83605', '54787', '14'), +('6', '83', '7', '102018', '61874', '14'), +('6', '83', '7', '102270', '55733', '14'), +('6', '83', '7', '53397', '54662', '14'), +('6', '83', '7', '39357', '53947', '14'), +('6', '83', '9', '67098', '165960', '14'), +('6', '83', '9', '51708', '71029', '14'), +('6', '83', '9', '46888', '60301', '14'), +('6', '83', '9', '53398', '54160', '14'), +('6', '83', '15', '102723', '100602', '14'), +('6', '83', '15', '102616', '92933', '14'), +('6', '83', '15', '102636', '91883', '14'), +('6', '83', '15', '102635', '91680', '14'), +('6', '83', '20', '102617', '97398', '14'), +('6', '83', '20', '102631', '95940', '14'), +('6', '83', '20', '102563', '84544', '14'), +('6', '83', '20', '80690', '70060', '14'), +('6', '83', '12', '53399', '54452', '14'), +('6', '83', '12', '102267', '52696', '14'), +('6', '83', '12', '83570', '41914', '14'), +('6', '83', '12', '70891', '37714', '14'), +('6', '83', '18', '83609', '72085', '14'), +('6', '83', '18', '102019', '62879', '14'), +('6', '83', '18', '102271', '56738', '14'), +('6', '83', '18', '53402', '56237', '14'), +('6', '83', '19', '53400', '54717', '14'), +('6', '83', '19', '102268', '53681', '14'), +('6', '83', '19', '70892', '53467', '14'), +('6', '83', '19', '76131', '51304', '14'), +('6', '83', '13', '93856', '100799', '14'), +('6', '83', '13', '102735', '87803', '14'), +('6', '83', '13', '102734', '80967', '14'), +('6', '83', '13', '102582', '77556', '14'), +('6', '83', '14', '102633', '96215', '14'), +('6', '83', '14', '102632', '96203', '14'), +('6', '83', '14', '102570', '83412', '14'), +('6', '83', '14', '80665', '64874', '14'), +('6', '83', '11', '102643', '92612', '14'), +('6', '83', '11', '80668', '69909', '14'), +('6', '83', '11', '39287', '69403', '14'), +('6', '83', '11', '46939', '61549', '14'), +('6', '84', '22', '21807', '0', '14'), +('6', '84', '22', '21805', '0', '14'), +('6', '84', '22', '12425', '0', '14'), +('6', '84', '22', '39342', '0', '14'), +('6', '84', '1', '102611', '91365', '14'), +('6', '84', '1', '102640', '90673', '14'), +('6', '84', '1', '102639', '90595', '14'), +('6', '84', '1', '102641', '90521', '14'), +('6', '84', '2', '102017', '61108', '14'), +('6', '84', '2', '102269', '55071', '14'), +('6', '84', '2', '53396', '54851', '14'), +('6', '84', '2', '83562', '40071', '14'), +('6', '84', '3', '102612', '97100', '14'), +('6', '84', '3', '102626', '95195', '14'), +('6', '84', '3', '102742', '87990', '14'), +('6', '84', '3', '102560', '84750', '14'), +('6', '84', '5', '102731', '101487', '14'), +('6', '84', '5', '102613', '95224', '14'), +('6', '84', '5', '102627', '93500', '14'), +('6', '84', '5', '102730', '87916', '14'), +('6', '84', '8', '102728', '99810', '14'), +('6', '84', '8', '102615', '97063', '14'), +('6', '84', '8', '102629', '95588', '14'), +('6', '84', '8', '102569', '84854', '14'), +('6', '84', '6', '102614', '97825', '14'), +('6', '84', '6', '102628', '95758', '14'), +('6', '84', '6', '102561', '84949', '14'), +('6', '84', '6', '80645', '63997', '14'), +('6', '84', '17', '102020', '65190', '14'), +('6', '84', '17', '102272', '58511', '14'), +('6', '84', '17', '53401', '57059', '14'), +('6', '84', '17', '83605', '53792', '14'), +('6', '84', '7', '102018', '61880', '14'), +('6', '84', '7', '102270', '55738', '14'), +('6', '84', '7', '53397', '54668', '14'), +('6', '84', '7', '39357', '52951', '14'), +('6', '84', '9', '67098', '167964', '14'), +('6', '84', '9', '51708', '68034', '14'), +('6', '84', '9', '46888', '60308', '14'), +('6', '84', '9', '53398', '54166', '14'), +('6', '84', '15', '102723', '100609', '14'), +('6', '84', '15', '102616', '92942', '14'), +('6', '84', '15', '102636', '91891', '14'), +('6', '84', '15', '102635', '91685', '14'), +('6', '84', '20', '102617', '97400', '14'), +('6', '84', '20', '102631', '95949', '14'), +('6', '84', '20', '102563', '84550', '14'), +('6', '84', '20', '80690', '70067', '14'), +('6', '84', '12', '53399', '54456', '14'), +('6', '84', '12', '102267', '52701', '14'), +('6', '84', '12', '83570', '41920', '14'), +('6', '84', '12', '70891', '37721', '14'), +('6', '84', '18', '83609', '69090', '14'), +('6', '84', '18', '102019', '62887', '14'), +('6', '84', '18', '102271', '56744', '14'), +('6', '84', '18', '53402', '56244', '14'), +('6', '84', '19', '53400', '54717', '14'), +('6', '84', '19', '102268', '53686', '14'), +('6', '84', '19', '76131', '51308', '14'), +('6', '84', '19', '70892', '51225', '14'), +('6', '84', '13', '93856', '102019', '14'), +('6', '84', '13', '102735', '87810', '14'), +('6', '84', '13', '102734', '80973', '14'), +('6', '84', '13', '102582', '77564', '14'), +('6', '84', '14', '102633', '96221', '14'), +('6', '84', '14', '102632', '96211', '14'), +('6', '84', '14', '102570', '83414', '14'), +('6', '84', '14', '80665', '64880', '14'), +('6', '84', '11', '102643', '92616', '14'), +('6', '84', '11', '80668', '69916', '14'), +('6', '84', '11', '39287', '66408', '14'), +('6', '84', '11', '46939', '61556', '14'), +('6', '85', '22', '12425', '0', '16'), +('6', '85', '22', '39342', '0', '16'), +('6', '85', '22', '7867', '0', '16'), +('6', '85', '22', '23597', '0', '16'), +('6', '85', '1', '111306', '176672', '16'), +('6', '85', '1', '111304', '176358', '16'), +('6', '85', '1', '111307', '176217', '16'), +('6', '85', '1', '111310', '174919', '16'), +('6', '85', '2', '62988', '110463', '16'), +('6', '85', '2', '62985', '110199', '16'), +('6', '85', '2', '94056', '109897', '16'), +('6', '85', '2', '104417', '93828', '16'), +('6', '85', '3', '111314', '177076', '16'), +('6', '85', '3', '111316', '175364', '16'), +('6', '85', '3', '111315', '174481', '16'), +('6', '85', '3', '111013', '155225', '16'), +('6', '85', '5', '111319', '176439', '16'), +('6', '85', '5', '111321', '175998', '16'), +('6', '85', '5', '111318', '173715', '16'), +('6', '85', '5', '111317', '173430', '16'), +('6', '85', '8', '111332', '177256', '16'), +('6', '85', '8', '111329', '175899', '16'), +('6', '85', '8', '111330', '175102', '16'), +('6', '85', '8', '111331', '172795', '16'), +('6', '85', '6', '111323', '177160', '16'), +('6', '85', '6', '111326', '175721', '16'), +('6', '85', '6', '111325', '175674', '16'), +('6', '85', '6', '111022', '155309', '16'), +('6', '85', '17', '56045', '114529', '16'), +('6', '85', '17', '56084', '114294', '16'), +('6', '85', '17', '104420', '97395', '16'), +('6', '85', '17', '54855', '72798', '16'), +('6', '85', '7', '56080', '109963', '16'), +('6', '85', '7', '56040', '108835', '16'), +('6', '85', '7', '104418', '93231', '16'), +('6', '85', '7', '54849', '70209', '16'), +('6', '85', '9', '67098', '169969', '16'), +('6', '85', '9', '81764', '106488', '16'), +('6', '85', '9', '56070', '106376', '16'), +('6', '85', '9', '62984', '106172', '16'), +('6', '85', '15', '111350', '178547', '16'), +('6', '85', '15', '111344', '177651', '16'), +('6', '85', '15', '111340', '177028', '16'), +('6', '85', '15', '111346', '176572', '16'), +('6', '85', '20', '111356', '177093', '16'), +('6', '85', '20', '111352', '176409', '16'), +('6', '85', '20', '111351', '173687', '16'), +('6', '85', '20', '111054', '155242', '16'), +('6', '85', '12', '56035', '108248', '16'), +('6', '85', '12', '56074', '107047', '16'), +('6', '85', '12', '104415', '91031', '16'), +('6', '85', '12', '49656', '70124', '16'), +('6', '85', '18', '56041', '113901', '16'), +('6', '85', '18', '62986', '112405', '16'), +('6', '85', '18', '104419', '96240', '16'), +('6', '85', '18', '54851', '71699', '16'), +('6', '85', '19', '81763', '110615', '16'), +('6', '85', '19', '62990', '110360', '16'), +('6', '85', '19', '56037', '110300', '16'), +('6', '85', '19', '56075', '110169', '16'), +('6', '85', '13', '111518', '170524', '16'), +('6', '85', '13', '111517', '168797', '16'), +('6', '85', '13', '111217', '154140', '16'), +('6', '85', '13', '111218', '154085', '16'), +('6', '85', '14', '111537', '177367', '16'), +('6', '85', '14', '111539', '175570', '16'), +('6', '85', '14', '111535', '175199', '16'), +('6', '85', '14', '111237', '155515', '16'), +('6', '85', '11', '111337', '176437', '16'), +('6', '85', '11', '111335', '176407', '16'), +('6', '85', '11', '111338', '172544', '16'), +('6', '85', '11', '111034', '154656', '16'), +('6', '85', '22', '12425', '0', '15'), +('6', '85', '22', '21807', '0', '15'), +('6', '85', '22', '39342', '0', '15'), +('6', '85', '22', '7867', '0', '15'), +('6', '85', '1', '107053', '129234', '15'), +('6', '85', '1', '107028', '128672', '15'), +('6', '85', '1', '107029', '128352', '15'), +('6', '85', '1', '107052', '128045', '15'), +('6', '85', '2', '62988', '110463', '15'), +('6', '85', '2', '62985', '110199', '15'), +('6', '85', '2', '94056', '109897', '15'), +('6', '85', '2', '104417', '93828', '15'), +('6', '85', '3', '107030', '130637', '15'), +('6', '85', '3', '107055', '128774', '15'), +('6', '85', '3', '106819', '122572', '15'), +('6', '85', '3', '106841', '121153', '15'), +('6', '85', '5', '107056', '128309', '15'), +('6', '85', '5', '107031', '128155', '15'), +('6', '85', '5', '106820', '123178', '15'), +('6', '85', '5', '106747', '109372', '15'), +('6', '85', '8', '107033', '130785', '15'), +('6', '85', '8', '107058', '130630', '15'), +('6', '85', '8', '106822', '125195', '15'), +('6', '85', '8', '106844', '121692', '15'), +('6', '85', '6', '107032', '130838', '15'), +('6', '85', '6', '107057', '129718', '15'), +('6', '85', '6', '106821', '123481', '15'), +('6', '85', '6', '106843', '122006', '15'), +('6', '85', '17', '56045', '114529', '15'), +('6', '85', '17', '56084', '114294', '15'), +('6', '85', '17', '104420', '97395', '15'), +('6', '85', '17', '54855', '72798', '15'), +('6', '85', '7', '56080', '109963', '15'), +('6', '85', '7', '56040', '108835', '15'), +('6', '85', '7', '104418', '93231', '15'), +('6', '85', '7', '54849', '70209', '15'), +('6', '85', '9', '67098', '169969', '15'), +('6', '85', '9', '81764', '106488', '15'), +('6', '85', '9', '56070', '106376', '15'), +('6', '85', '9', '62984', '106172', '15'), +('6', '85', '15', '107035', '130255', '15'), +('6', '85', '15', '107036', '129172', '15'), +('6', '85', '15', '107061', '127928', '15'), +('6', '85', '15', '107051', '127613', '15'), +('6', '85', '20', '107037', '132838', '15'), +('6', '85', '20', '107059', '131341', '15'), +('6', '85', '20', '106825', '125285', '15'), +('6', '85', '20', '106845', '122817', '15'), +('6', '85', '12', '56035', '108248', '15'), +('6', '85', '12', '56074', '107047', '15'), +('6', '85', '12', '104415', '91031', '15'), +('6', '85', '12', '53399', '54460', '15'), +('6', '85', '18', '56041', '113901', '15'), +('6', '85', '18', '62986', '112405', '15'), +('6', '85', '18', '104419', '96240', '15'), +('6', '85', '18', '54851', '71699', '15'), +('6', '85', '19', '81763', '110615', '15'), +('6', '85', '19', '62990', '110360', '15'), +('6', '85', '19', '56037', '110300', '15'), +('6', '85', '19', '56075', '110169', '15'), +('6', '85', '13', '56111', '111123', '15'), +('6', '85', '13', '62966', '109230', '15'), +('6', '85', '13', '106761', '108555', '15'), +('6', '85', '13', '93856', '103240', '15'), +('6', '85', '14', '107063', '132014', '15'), +('6', '85', '14', '107065', '129964', '15'), +('6', '85', '14', '106850', '124807', '15'), +('6', '85', '14', '106852', '122448', '15'), +('6', '85', '11', '107034', '130985', '15'), +('6', '85', '11', '106823', '123332', '15'), +('6', '85', '11', '56099', '108639', '15'), +('6', '85', '11', '62965', '108563', '15'), +('6', '86', '22', '12425', '0', '16'), +('6', '86', '22', '39342', '0', '16'), +('6', '86', '22', '7867', '0', '16'), +('6', '86', '22', '23597', '0', '16'), +('6', '86', '1', '111306', '176680', '16'), +('6', '86', '1', '111304', '176366', '16'), +('6', '86', '1', '111307', '176220', '16'), +('6', '86', '1', '111310', '174925', '16'), +('6', '86', '2', '62988', '110467', '16'), +('6', '86', '2', '62985', '110208', '16'), +('6', '86', '2', '94056', '109902', '16'), +('6', '86', '2', '104417', '93831', '16'), +('6', '86', '3', '111314', '177082', '16'), +('6', '86', '3', '111316', '175371', '16'), +('6', '86', '3', '111315', '174487', '16'), +('6', '86', '3', '111013', '155231', '16'), +('6', '86', '5', '111319', '176444', '16'), +('6', '86', '5', '111321', '176005', '16'), +('6', '86', '5', '111318', '173720', '16'), +('6', '86', '5', '111317', '173436', '16'), +('6', '86', '8', '111332', '177263', '16'), +('6', '86', '8', '111329', '175903', '16'), +('6', '86', '8', '111330', '175108', '16'), +('6', '86', '8', '111331', '172803', '16'), +('6', '86', '6', '111323', '177167', '16'), +('6', '86', '6', '111326', '175730', '16'), +('6', '86', '6', '111325', '175679', '16'), +('6', '86', '6', '111022', '155316', '16'), +('6', '86', '17', '56045', '114533', '16'), +('6', '86', '17', '56084', '114303', '16'), +('6', '86', '17', '104420', '97401', '16'), +('6', '86', '17', '54855', '72805', '16'), +('6', '86', '7', '56080', '109970', '16'), +('6', '86', '7', '56040', '108841', '16'), +('6', '86', '7', '104418', '93238', '16'), +('6', '86', '7', '54849', '70213', '16'), +('6', '86', '9', '67098', '171974', '16'), +('6', '86', '9', '81764', '106498', '16'), +('6', '86', '9', '56070', '106382', '16'), +('6', '86', '9', '62984', '106178', '16'), +('6', '86', '15', '111350', '178555', '16'), +('6', '86', '15', '111344', '177659', '16'), +('6', '86', '15', '111340', '177034', '16'), +('6', '86', '15', '111346', '176577', '16'), +('6', '86', '20', '111356', '177098', '16'), +('6', '86', '20', '111352', '176416', '16'), +('6', '86', '20', '111351', '173694', '16'), +('6', '86', '20', '111054', '155247', '16'), +('6', '86', '12', '56035', '108258', '16'), +('6', '86', '12', '56074', '107053', '16'), +('6', '86', '12', '104415', '91034', '16'), +('6', '86', '12', '49656', '70125', '16'), +('6', '86', '18', '56041', '113907', '16'), +('6', '86', '18', '62986', '112413', '16'), +('6', '86', '18', '104419', '96250', '16'), +('6', '86', '18', '54851', '71707', '16'), +('6', '86', '19', '81763', '110625', '16'), +('6', '86', '19', '62990', '110364', '16'), +('6', '86', '19', '56037', '110307', '16'), +('6', '86', '19', '56075', '110177', '16'), +('6', '86', '13', '111518', '170531', '16'), +('6', '86', '13', '111517', '168803', '16'), +('6', '86', '13', '111217', '154146', '16'), +('6', '86', '13', '111218', '154091', '16'), +('6', '86', '14', '111537', '177374', '16'), +('6', '86', '14', '111539', '175577', '16'), +('6', '86', '14', '111535', '175205', '16'), +('6', '86', '14', '111237', '155522', '16'), +('6', '86', '11', '111337', '176446', '16'), +('6', '86', '11', '111335', '176415', '16'), +('6', '86', '11', '111338', '172549', '16'), +('6', '86', '11', '111034', '154664', '16'), +('6', '87', '22', '12425', '0', '16'), +('6', '87', '22', '39342', '0', '16'), +('6', '87', '22', '7867', '0', '16'), +('6', '87', '22', '23597', '0', '16'), +('6', '87', '1', '111306', '176688', '16'), +('6', '87', '1', '111304', '176373', '16'), +('6', '87', '1', '111307', '176224', '16'), +('6', '87', '1', '111310', '174931', '16'), +('6', '87', '2', '62988', '110471', '16'), +('6', '87', '2', '62985', '110216', '16'), +('6', '87', '2', '94056', '109908', '16'), +('6', '87', '2', '104417', '93834', '16'), +('6', '87', '3', '111314', '177088', '16'), +('6', '87', '3', '111316', '175377', '16'), +('6', '87', '3', '111315', '174493', '16'), +('6', '87', '3', '111013', '155238', '16'), +('6', '87', '5', '111319', '176450', '16'), +('6', '87', '5', '111321', '176012', '16'), +('6', '87', '5', '111318', '173726', '16'), +('6', '87', '5', '111317', '173442', '16'), +('6', '87', '8', '111332', '177270', '16'), +('6', '87', '8', '111329', '175907', '16'), +('6', '87', '8', '111330', '175114', '16'), +('6', '87', '8', '111331', '172811', '16'), +('6', '87', '6', '111323', '177173', '16'), +('6', '87', '6', '111326', '175739', '16'), +('6', '87', '6', '111325', '175685', '16'), +('6', '87', '6', '111022', '155323', '16'), +('6', '87', '17', '56045', '114537', '16'), +('6', '87', '17', '56084', '114312', '16'), +('6', '87', '17', '104420', '97407', '16'), +('6', '87', '17', '54855', '72812', '16'), +('6', '87', '7', '56080', '109978', '16'), +('6', '87', '7', '56040', '108847', '16'), +('6', '87', '7', '104418', '93246', '16'), +('6', '87', '7', '54849', '70217', '16'), +('6', '87', '9', '67098', '173978', '16'), +('6', '87', '9', '81764', '106508', '16'), +('6', '87', '9', '56070', '106388', '16'), +('6', '87', '9', '62984', '106184', '16'), +('6', '87', '15', '111350', '178563', '16'), +('6', '87', '15', '111344', '177667', '16'), +('6', '87', '15', '111340', '177041', '16'), +('6', '87', '15', '111346', '176582', '16'), +('6', '87', '20', '111356', '177103', '16'), +('6', '87', '20', '111352', '176422', '16'), +('6', '87', '20', '111351', '173701', '16'), +('6', '87', '20', '111054', '155252', '16'), +('6', '87', '12', '56035', '108267', '16'), +('6', '87', '12', '56074', '107059', '16'), +('6', '87', '12', '104415', '91037', '16'), +('6', '87', '12', '49656', '70126', '16'), +('6', '87', '18', '56041', '113913', '16'), +('6', '87', '18', '62986', '112420', '16'), +('6', '87', '18', '104419', '96260', '16'), +('6', '87', '18', '54851', '71714', '16'), +('6', '87', '19', '81763', '110635', '16'), +('6', '87', '19', '62990', '110369', '16'), +('6', '87', '19', '56037', '110315', '16'), +('6', '87', '19', '56075', '110185', '16'), +('6', '87', '13', '111518', '170537', '16'), +('6', '87', '13', '111517', '168809', '16'), +('6', '87', '13', '111217', '154152', '16'), +('6', '87', '13', '111218', '154098', '16'), +('6', '87', '14', '111537', '177380', '16'), +('6', '87', '14', '111539', '175585', '16'), +('6', '87', '14', '111535', '175211', '16'), +('6', '87', '14', '111237', '155529', '16'), +('6', '87', '11', '111337', '176455', '16'), +('6', '87', '11', '111335', '176422', '16'), +('6', '87', '11', '111338', '172554', '16'), +('6', '87', '11', '111034', '154672', '16'), +('6', '88', '22', '12425', '0', '16'), +('6', '88', '22', '39342', '0', '16'), +('6', '88', '22', '7867', '0', '16'), +('6', '88', '22', '23597', '0', '16'), +('6', '88', '1', '111306', '176696', '16'), +('6', '88', '1', '111304', '176381', '16'), +('6', '88', '1', '111307', '176228', '16'), +('6', '88', '1', '111310', '174937', '16'), +('6', '88', '2', '62988', '110475', '16'), +('6', '88', '2', '62985', '110224', '16'), +('6', '88', '2', '94056', '109913', '16'), +('6', '88', '2', '104417', '93838', '16'), +('6', '88', '3', '111314', '177094', '16'), +('6', '88', '3', '111316', '175383', '16'), +('6', '88', '3', '111315', '174500', '16'), +('6', '88', '3', '111013', '155244', '16'), +('6', '88', '5', '111319', '176455', '16'), +('6', '88', '5', '111321', '176019', '16'), +('6', '88', '5', '111318', '173731', '16'), +('6', '88', '5', '111317', '173448', '16'), +('6', '88', '8', '111332', '177277', '16'), +('6', '88', '8', '111329', '175911', '16'), +('6', '88', '8', '111330', '175120', '16'), +('6', '88', '8', '111331', '172818', '16'), +('6', '88', '6', '111323', '177180', '16'), +('6', '88', '6', '111326', '175748', '16'), +('6', '88', '6', '111325', '175690', '16'), +('6', '88', '6', '111022', '155329', '16'), +('6', '88', '17', '56045', '114542', '16'), +('6', '88', '17', '56084', '114321', '16'), +('6', '88', '17', '104420', '97413', '16'), +('6', '88', '17', '54855', '72818', '16'), +('6', '88', '7', '56080', '109985', '16'), +('6', '88', '7', '56040', '108854', '16'), +('6', '88', '7', '104418', '93253', '16'), +('6', '88', '7', '54849', '70221', '16'), +('6', '88', '9', '67098', '175983', '16'), +('6', '88', '9', '81764', '106519', '16'), +('6', '88', '9', '56070', '106395', '16'), +('6', '88', '9', '62984', '106190', '16'), +('6', '88', '15', '111350', '178571', '16'), +('6', '88', '15', '111344', '177675', '16'), +('6', '88', '15', '111340', '177047', '16'), +('6', '88', '15', '111346', '176586', '16'), +('6', '88', '20', '111356', '177107', '16'), +('6', '88', '20', '111352', '176429', '16'), +('6', '88', '20', '111351', '173708', '16'), +('6', '88', '20', '111054', '155257', '16'), +('6', '88', '12', '56035', '108277', '16'), +('6', '88', '12', '56074', '107065', '16'), +('6', '88', '12', '104415', '91040', '16'), +('6', '88', '12', '49656', '70127', '16'), +('6', '88', '18', '56041', '113919', '16'), +('6', '88', '18', '62986', '112427', '16'), +('6', '88', '18', '104419', '96270', '16'), +('6', '88', '18', '54851', '71722', '16'), +('6', '88', '19', '81763', '110645', '16'), +('6', '88', '19', '62990', '110373', '16'), +('6', '88', '19', '56037', '110322', '16'), +('6', '88', '19', '56075', '110193', '16'), +('6', '88', '13', '111518', '170544', '16'), +('6', '88', '13', '111517', '168815', '16'), +('6', '88', '13', '111217', '154158', '16'), +('6', '88', '13', '111218', '154104', '16'), +('6', '88', '14', '111537', '177387', '16'), +('6', '88', '14', '111539', '175592', '16'), +('6', '88', '14', '111535', '175217', '16'), +('6', '88', '14', '111237', '155535', '16'), +('6', '88', '11', '111337', '176464', '16'), +('6', '88', '11', '111335', '176430', '16'), +('6', '88', '11', '111338', '172559', '16'), +('6', '88', '11', '111034', '154680', '16'), +('6', '89', '22', '12425', '0', '16'), +('6', '89', '22', '39342', '0', '16'), +('6', '89', '22', '7867', '0', '16'), +('6', '89', '22', '23597', '0', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '89', '1', '111306', '176705', '16'), +('6', '89', '1', '111304', '176388', '16'), +('6', '89', '1', '111307', '176231', '16'), +('6', '89', '1', '111310', '174943', '16'), +('6', '89', '2', '62988', '110479', '16'), +('6', '89', '2', '62985', '110233', '16'), +('6', '89', '2', '94056', '109918', '16'), +('6', '89', '2', '104417', '93841', '16'), +('6', '89', '3', '111314', '177101', '16'), +('6', '89', '3', '111316', '175389', '16'), +('6', '89', '3', '111315', '174506', '16'), +('6', '89', '3', '111013', '155250', '16'), +('6', '89', '5', '111319', '176460', '16'), +('6', '89', '5', '111321', '176027', '16'), +('6', '89', '5', '111318', '173736', '16'), +('6', '89', '5', '111317', '173454', '16'), +('6', '89', '8', '111332', '177284', '16'), +('6', '89', '8', '111329', '175915', '16'), +('6', '89', '8', '111330', '175127', '16'), +('6', '89', '8', '111331', '172826', '16'), +('6', '89', '6', '111323', '177186', '16'), +('6', '89', '6', '111326', '175757', '16'), +('6', '89', '6', '111325', '175695', '16'), +('6', '89', '6', '111022', '155336', '16'), +('6', '89', '17', '56045', '114546', '16'), +('6', '89', '17', '56084', '114330', '16'), +('6', '89', '17', '104420', '97420', '16'), +('6', '89', '17', '54855', '72825', '16'), +('6', '89', '7', '56080', '109993', '16'), +('6', '89', '7', '56040', '108860', '16'), +('6', '89', '7', '104418', '93260', '16'), +('6', '89', '7', '54849', '70224', '16'), +('6', '89', '9', '67098', '177988', '16'), +('6', '89', '9', '81764', '106529', '16'), +('6', '89', '9', '56070', '106401', '16'), +('6', '89', '9', '62984', '106196', '16'), +('6', '89', '15', '111350', '178579', '16'), +('6', '89', '15', '111344', '177683', '16'), +('6', '89', '15', '111340', '177053', '16'), +('6', '89', '15', '111346', '176591', '16'), +('6', '89', '20', '111356', '177112', '16'), +('6', '89', '20', '111352', '176436', '16'), +('6', '89', '20', '111351', '173715', '16'), +('6', '89', '20', '111054', '155262', '16'), +('6', '89', '12', '56035', '108286', '16'), +('6', '89', '12', '56074', '107072', '16'), +('6', '89', '12', '104415', '91043', '16'), +('6', '89', '12', '49656', '70127', '16'), +('6', '89', '18', '56041', '113925', '16'), +('6', '89', '18', '62986', '112435', '16'), +('6', '89', '18', '104419', '96279', '16'), +('6', '89', '18', '54851', '71729', '16'), +('6', '89', '19', '81763', '110655', '16'), +('6', '89', '19', '62990', '110377', '16'), +('6', '89', '19', '56037', '110329', '16'), +('6', '89', '19', '56075', '110201', '16'), +('6', '89', '13', '111518', '170550', '16'), +('6', '89', '13', '111517', '168821', '16'), +('6', '89', '13', '111217', '154164', '16'), +('6', '89', '13', '111218', '154110', '16'), +('6', '89', '14', '111537', '177393', '16'), +('6', '89', '14', '111539', '175600', '16'), +('6', '89', '14', '111535', '175223', '16'), +('6', '89', '14', '111237', '155542', '16'), +('6', '89', '11', '111337', '176473', '16'), +('6', '89', '11', '111335', '176438', '16'), +('6', '89', '11', '111338', '172564', '16'), +('6', '89', '11', '111034', '154687', '16'), +('6', '90', '22', '12425', '0', '17'), +('6', '90', '22', '39342', '0', '17'), +('6', '90', '22', '7867', '0', '17'), +('6', '90', '22', '23597', '0', '17'), +('6', '90', '1', '111306', '176713', '17'), +('6', '90', '1', '111304', '176396', '17'), +('6', '90', '1', '111307', '176235', '17'), +('6', '90', '1', '111310', '174950', '17'), +('6', '90', '2', '62988', '110484', '17'), +('6', '90', '2', '62985', '110241', '17'), +('6', '90', '2', '94056', '109924', '17'), +('6', '90', '2', '104417', '93844', '17'), +('6', '90', '3', '111314', '177107', '17'), +('6', '90', '3', '111316', '175395', '17'), +('6', '90', '3', '111315', '174512', '17'), +('6', '90', '3', '111013', '155256', '17'), +('6', '90', '5', '111319', '176466', '17'), +('6', '90', '5', '111321', '176034', '17'), +('6', '90', '5', '111318', '173741', '17'), +('6', '90', '5', '111317', '173460', '17'), +('6', '90', '8', '111332', '177292', '17'), +('6', '90', '8', '111329', '175919', '17'), +('6', '90', '8', '111330', '175133', '17'), +('6', '90', '8', '111331', '172833', '17'), +('6', '90', '6', '111323', '177193', '17'), +('6', '90', '6', '111326', '175766', '17'), +('6', '90', '6', '111325', '175701', '17'), +('6', '90', '6', '111022', '155342', '17'), +('6', '90', '17', '56045', '114550', '17'), +('6', '90', '17', '56084', '114339', '17'), +('6', '90', '17', '104420', '97426', '17'), +('6', '90', '17', '54855', '72832', '17'), +('6', '90', '7', '56080', '110001', '17'), +('6', '90', '7', '56040', '108866', '17'), +('6', '90', '7', '104418', '93267', '17'), +('6', '90', '7', '54849', '70228', '17'), +('6', '90', '9', '67098', '179994', '17'), +('6', '90', '9', '81764', '106539', '17'), +('6', '90', '9', '56070', '106407', '17'), +('6', '90', '9', '62984', '106203', '17'), +('6', '90', '15', '111350', '178587', '17'), +('6', '90', '15', '111344', '177692', '17'), +('6', '90', '15', '111340', '177060', '17'), +('6', '90', '15', '111346', '176596', '17'), +('6', '90', '20', '111356', '177117', '17'), +('6', '90', '20', '111352', '176442', '17'), +('6', '90', '20', '111351', '173722', '17'), +('6', '90', '20', '111054', '155267', '17'), +('6', '90', '12', '56035', '108296', '17'), +('6', '90', '12', '56074', '107078', '17'), +('6', '90', '12', '104415', '91047', '17'), +('6', '90', '12', '49656', '70128', '17'), +('6', '90', '18', '56041', '113931', '17'), +('6', '90', '18', '62986', '112442', '17'), +('6', '90', '18', '104419', '96289', '17'), +('6', '90', '18', '54851', '71737', '17'), +('6', '90', '19', '81763', '110665', '17'), +('6', '90', '19', '62990', '110382', '17'), +('6', '90', '19', '56037', '110336', '17'), +('6', '90', '19', '56075', '110209', '17'), +('6', '90', '13', '111518', '170557', '17'), +('6', '90', '13', '111517', '168827', '17'), +('6', '90', '13', '111217', '154170', '17'), +('6', '90', '13', '111218', '154116', '17'), +('6', '90', '14', '111537', '177400', '17'), +('6', '90', '14', '111539', '175607', '17'), +('6', '90', '14', '111535', '175229', '17'), +('6', '90', '14', '111237', '155548', '17'), +('6', '90', '11', '111337', '176483', '17'), +('6', '90', '11', '111335', '176446', '17'), +('6', '90', '11', '111338', '172569', '17'), +('6', '90', '11', '111034', '154695', '17'), +('6', '91', '22', '12425', '0', '17'), +('6', '91', '22', '39342', '0', '17'), +('6', '91', '22', '7867', '0', '17'), +('6', '91', '22', '23597', '0', '17'), +('6', '91', '1', '111306', '176721', '17'), +('6', '91', '1', '111304', '176403', '17'), +('6', '91', '1', '111307', '176238', '17'), +('6', '91', '1', '111310', '174956', '17'), +('6', '91', '2', '62988', '110488', '17'), +('6', '91', '2', '62985', '110249', '17'), +('6', '91', '2', '94056', '109929', '17'), +('6', '91', '2', '104417', '93847', '17'), +('6', '91', '3', '111314', '177113', '17'), +('6', '91', '3', '111316', '175401', '17'), +('6', '91', '3', '111315', '174518', '17'), +('6', '91', '3', '111013', '155262', '17'), +('6', '91', '5', '111319', '176471', '17'), +('6', '91', '5', '111321', '176041', '17'), +('6', '91', '5', '111318', '173746', '17'), +('6', '91', '5', '111317', '173466', '17'), +('6', '91', '8', '111332', '177299', '17'), +('6', '91', '8', '111329', '175923', '17'), +('6', '91', '8', '111330', '175139', '17'), +('6', '91', '8', '111331', '172841', '17'), +('6', '91', '6', '111323', '177199', '17'), +('6', '91', '6', '111326', '175775', '17'), +('6', '91', '6', '111325', '175706', '17'), +('6', '91', '6', '111022', '155349', '17'), +('6', '91', '17', '56045', '114554', '17'), +('6', '91', '17', '56084', '114348', '17'), +('6', '91', '17', '104420', '97432', '17'), +('6', '91', '17', '54855', '72839', '17'), +('6', '91', '7', '56080', '110008', '17'), +('6', '91', '7', '56040', '108872', '17'), +('6', '91', '7', '104418', '93275', '17'), +('6', '91', '7', '54849', '70232', '17'), +('6', '91', '9', '67098', '179999', '17'), +('6', '91', '9', '81764', '106549', '17'), +('6', '91', '9', '56070', '106413', '17'), +('6', '91', '9', '62984', '106209', '17'), +('6', '91', '15', '111350', '178595', '17'), +('6', '91', '15', '111344', '177700', '17'), +('6', '91', '15', '111340', '177066', '17'), +('6', '91', '15', '111346', '176601', '17'), +('6', '91', '20', '111356', '177122', '17'), +('6', '91', '20', '111352', '176449', '17'), +('6', '91', '20', '111351', '173729', '17'), +('6', '91', '20', '111054', '155271', '17'), +('6', '91', '12', '56035', '108305', '17'), +('6', '91', '12', '56074', '107084', '17'), +('6', '91', '12', '104415', '91050', '17'), +('6', '91', '12', '49656', '70129', '17'), +('6', '91', '18', '56041', '113937', '17'), +('6', '91', '18', '62986', '112450', '17'), +('6', '91', '18', '104419', '96299', '17'), +('6', '91', '18', '54851', '71744', '17'), +('6', '91', '19', '81763', '110675', '17'), +('6', '91', '19', '62990', '110386', '17'), +('6', '91', '19', '56037', '110343', '17'), +('6', '91', '19', '56075', '110217', '17'), +('6', '91', '13', '111518', '170563', '17'), +('6', '91', '13', '111517', '168833', '17'), +('6', '91', '13', '111217', '154176', '17'), +('6', '91', '13', '111218', '154123', '17'), +('6', '91', '14', '111537', '177406', '17'), +('6', '91', '14', '111539', '175615', '17'), +('6', '91', '14', '111535', '175235', '17'), +('6', '91', '14', '111237', '155555', '17'), +('6', '91', '11', '111337', '176492', '17'), +('6', '91', '11', '111335', '176453', '17'), +('6', '91', '11', '111338', '172573', '17'), +('6', '91', '11', '111034', '154703', '17'), +('6', '92', '22', '12425', '0', '17'), +('6', '92', '22', '39342', '0', '17'), +('6', '92', '22', '7867', '0', '17'), +('6', '92', '22', '23597', '0', '17'), +('6', '92', '1', '111306', '176729', '17'), +('6', '92', '1', '111304', '176411', '17'), +('6', '92', '1', '111307', '176242', '17'), +('6', '92', '1', '111310', '174962', '17'), +('6', '92', '2', '62988', '110492', '17'), +('6', '92', '2', '62985', '110257', '17'), +('6', '92', '2', '94056', '109934', '17'), +('6', '92', '2', '104417', '93850', '17'), +('6', '92', '3', '111314', '177119', '17'), +('6', '92', '3', '111316', '175408', '17'), +('6', '92', '3', '111315', '174524', '17'), +('6', '92', '3', '111013', '155268', '17'), +('6', '92', '5', '111319', '176476', '17'), +('6', '92', '5', '111321', '176048', '17'), +('6', '92', '5', '111318', '173751', '17'), +('6', '92', '5', '111317', '173472', '17'), +('6', '92', '8', '111332', '177306', '17'), +('6', '92', '8', '111329', '175927', '17'), +('6', '92', '8', '111330', '175145', '17'), +('6', '92', '8', '111331', '172848', '17'), +('6', '92', '6', '111323', '177206', '17'), +('6', '92', '6', '111326', '175784', '17'), +('6', '92', '6', '111325', '175711', '17'), +('6', '92', '6', '111022', '155356', '17'), +('6', '92', '17', '56045', '114558', '17'), +('6', '92', '17', '56084', '114357', '17'), +('6', '92', '17', '104420', '97438', '17'), +('6', '92', '17', '54855', '72846', '17'), +('6', '92', '7', '56080', '110016', '17'), +('6', '92', '7', '56040', '108878', '17'), +('6', '92', '7', '104418', '93282', '17'), +('6', '92', '7', '54849', '70236', '17'), +('6', '92', '9', '67098', '180004', '17'), +('6', '92', '9', '81764', '106560', '17'), +('6', '92', '9', '56070', '106419', '17'), +('6', '92', '9', '62984', '106215', '17'), +('6', '92', '15', '111350', '178603', '17'), +('6', '92', '15', '111344', '177708', '17'), +('6', '92', '15', '111340', '177072', '17'), +('6', '92', '15', '111346', '176605', '17'), +('6', '92', '20', '111356', '177127', '17'), +('6', '92', '20', '111352', '176455', '17'), +('6', '92', '20', '111351', '173736', '17'), +('6', '92', '20', '111054', '155276', '17'), +('6', '92', '12', '56035', '108315', '17'), +('6', '92', '12', '56074', '107090', '17'), +('6', '92', '12', '104415', '91053', '17'), +('6', '92', '12', '49656', '70130', '17'), +('6', '92', '18', '56041', '113943', '17'), +('6', '92', '18', '62986', '112457', '17'), +('6', '92', '18', '104419', '96309', '17'), +('6', '92', '18', '54851', '71752', '17'), +('6', '92', '19', '81763', '110685', '17'), +('6', '92', '19', '62990', '110390', '17'), +('6', '92', '19', '56037', '110350', '17'), +('6', '92', '19', '56075', '110225', '17'), +('6', '92', '13', '111518', '170570', '17'), +('6', '92', '13', '111517', '168840', '17'), +('6', '92', '13', '111217', '154182', '17'), +('6', '92', '13', '111218', '154129', '17'), +('6', '92', '14', '111537', '177413', '17'), +('6', '92', '14', '111539', '175623', '17'), +('6', '92', '14', '111535', '175241', '17'), +('6', '92', '14', '111237', '155561', '17'), +('6', '92', '11', '111337', '176501', '17'), +('6', '92', '11', '111335', '176461', '17'), +('6', '92', '11', '111338', '172578', '17'), +('6', '92', '11', '111034', '154711', '17'), +('6', '93', '22', '12425', '0', '17'), +('6', '93', '22', '39342', '0', '17'), +('6', '93', '22', '7867', '0', '17'), +('6', '93', '22', '23597', '0', '17'), +('6', '93', '1', '111306', '176737', '17'), +('6', '93', '1', '111304', '176418', '17'), +('6', '93', '1', '111307', '176246', '17'), +('6', '93', '1', '111310', '174968', '17'), +('6', '93', '2', '62988', '110496', '17'), +('6', '93', '2', '62985', '110266', '17'), +('6', '93', '2', '94056', '109940', '17'), +('6', '93', '2', '104417', '93853', '17'), +('6', '93', '3', '111314', '177125', '17'), +('6', '93', '3', '111316', '175414', '17'), +('6', '93', '3', '111315', '174531', '17'), +('6', '93', '3', '111013', '155275', '17'), +('6', '93', '5', '111319', '176482', '17'), +('6', '93', '5', '111321', '176055', '17'), +('6', '93', '5', '111318', '173756', '17'), +('6', '93', '5', '111317', '173478', '17'), +('6', '93', '8', '111332', '177313', '17'), +('6', '93', '8', '111329', '175931', '17'), +('6', '93', '8', '111330', '175151', '17'), +('6', '93', '8', '111331', '172856', '17'), +('6', '93', '6', '111323', '177213', '17'), +('6', '93', '6', '111326', '175793', '17'), +('6', '93', '6', '111325', '175717', '17'), +('6', '93', '6', '111022', '155362', '17'), +('6', '93', '17', '56045', '114562', '17'), +('6', '93', '17', '56084', '114366', '17'), +('6', '93', '17', '104420', '97445', '17'), +('6', '93', '17', '54855', '72853', '17'), +('6', '93', '7', '56080', '110023', '17'), +('6', '93', '7', '56040', '108884', '17'), +('6', '93', '7', '104418', '93289', '17'), +('6', '93', '7', '54849', '70239', '17'), +('6', '93', '9', '67098', '180010', '17'), +('6', '93', '9', '81764', '106570', '17'), +('6', '93', '9', '56070', '106425', '17'), +('6', '93', '9', '62984', '106221', '17'), +('6', '93', '15', '111350', '178611', '17'), +('6', '93', '15', '111344', '177716', '17'), +('6', '93', '15', '111340', '177079', '17'), +('6', '93', '15', '111346', '176610', '17'), +('6', '93', '20', '111356', '177132', '17'), +('6', '93', '20', '111352', '176462', '17'), +('6', '93', '20', '111351', '173743', '17'), +('6', '93', '20', '111054', '155281', '17'), +('6', '93', '12', '56035', '108324', '17'), +('6', '93', '12', '56074', '107096', '17'), +('6', '93', '12', '104415', '91056', '17'), +('6', '93', '12', '49656', '70131', '17'), +('6', '93', '18', '56041', '113949', '17'), +('6', '93', '18', '62986', '112465', '17'), +('6', '93', '18', '104419', '96318', '17'), +('6', '93', '18', '54851', '71759', '17'), +('6', '93', '19', '81763', '110695', '17'), +('6', '93', '19', '62990', '110395', '17'), +('6', '93', '19', '56037', '110358', '17'), +('6', '93', '19', '56075', '110233', '17'), +('6', '93', '13', '111518', '170576', '17'), +('6', '93', '13', '111517', '168846', '17'), +('6', '93', '13', '111217', '154188', '17'), +('6', '93', '13', '111218', '154135', '17'), +('6', '93', '14', '111537', '177420', '17'), +('6', '93', '14', '111539', '175630', '17'), +('6', '93', '14', '111535', '175247', '17'), +('6', '93', '14', '111237', '155568', '17'), +('6', '93', '11', '111337', '176510', '17'), +('6', '93', '11', '111335', '176469', '17'), +('6', '93', '11', '111338', '172583', '17'), +('6', '93', '11', '111034', '154718', '17'), +('6', '94', '22', '12425', '0', '17'), +('6', '94', '22', '39342', '0', '17'), +('6', '94', '22', '7867', '0', '17'), +('6', '94', '22', '23597', '0', '17'), +('6', '94', '1', '111306', '176745', '17'), +('6', '94', '1', '111304', '176426', '17'), +('6', '94', '1', '111307', '176249', '17'), +('6', '94', '1', '111310', '174975', '17'), +('6', '94', '2', '62988', '110500', '17'), +('6', '94', '2', '62985', '110274', '17'), +('6', '94', '2', '94056', '109945', '17'), +('6', '94', '2', '104417', '93856', '17'), +('6', '94', '3', '111314', '177131', '17'), +('6', '94', '3', '111316', '175420', '17'), +('6', '94', '3', '111315', '174537', '17'), +('6', '94', '3', '111013', '155281', '17'), +('6', '94', '5', '111319', '176487', '17'), +('6', '94', '5', '111321', '176062', '17'), +('6', '94', '5', '111318', '173761', '17'), +('6', '94', '5', '111317', '173484', '17'), +('6', '94', '8', '111332', '177320', '17'), +('6', '94', '8', '111329', '175935', '17'), +('6', '94', '8', '111330', '175157', '17'), +('6', '94', '8', '111331', '172864', '17'), +('6', '94', '6', '111323', '177219', '17'), +('6', '94', '6', '111326', '175802', '17'), +('6', '94', '6', '111325', '175722', '17'), +('6', '94', '6', '111022', '155369', '17'), +('6', '94', '17', '56045', '114566', '17'), +('6', '94', '17', '56084', '114375', '17'), +('6', '94', '17', '104420', '97451', '17'), +('6', '94', '17', '54855', '72860', '17'), +('6', '94', '7', '56080', '110031', '17'), +('6', '94', '7', '56040', '108891', '17'), +('6', '94', '7', '104418', '93297', '17'), +('6', '94', '7', '54849', '70243', '17'), +('6', '94', '9', '67098', '180015', '17'), +('6', '94', '9', '81764', '106580', '17'), +('6', '94', '9', '56070', '106431', '17'), +('6', '94', '9', '62984', '106228', '17'), +('6', '94', '15', '111350', '178619', '17'), +('6', '94', '15', '111344', '177724', '17'), +('6', '94', '15', '111340', '177085', '17'), +('6', '94', '15', '111346', '176615', '17'), +('6', '94', '20', '111356', '177136', '17'), +('6', '94', '20', '111352', '176468', '17'), +('6', '94', '20', '111351', '173749', '17'), +('6', '94', '20', '111054', '155286', '17'), +('6', '94', '12', '56035', '108334', '17'), +('6', '94', '12', '56074', '107102', '17'), +('6', '94', '12', '104415', '91059', '17'), +('6', '94', '12', '49656', '70132', '17'), +('6', '94', '18', '56041', '113955', '17'), +('6', '94', '18', '62986', '112472', '17'), +('6', '94', '18', '104419', '96328', '17'), +('6', '94', '18', '54851', '71767', '17'), +('6', '94', '19', '81763', '110704', '17'), +('6', '94', '19', '62990', '110399', '17'), +('6', '94', '19', '56037', '110365', '17'), +('6', '94', '19', '56075', '110241', '17'), +('6', '94', '13', '111518', '170583', '17'), +('6', '94', '13', '111517', '168852', '17'), +('6', '94', '13', '111217', '154194', '17'), +('6', '94', '13', '111218', '154141', '17'), +('6', '94', '14', '111537', '177426', '17'), +('6', '94', '14', '111539', '175638', '17'), +('6', '94', '14', '111535', '175253', '17'), +('6', '94', '14', '111237', '155575', '17'), +('6', '94', '11', '111337', '176519', '17'), +('6', '94', '11', '111335', '176477', '17'), +('6', '94', '11', '111338', '172588', '17'), +('6', '94', '11', '111034', '154726', '17'), +('6', '95', '22', '12425', '0', '18'), +('6', '95', '22', '39342', '0', '18'), +('6', '95', '22', '7867', '0', '18'), +('6', '95', '22', '23597', '0', '18'), +('6', '95', '1', '111306', '176753', '18'), +('6', '95', '1', '111304', '176433', '18'), +('6', '95', '1', '111307', '176253', '18'), +('6', '95', '1', '111310', '174981', '18'), +('6', '95', '2', '62988', '110504', '18'), +('6', '95', '2', '62985', '110282', '18'), +('6', '95', '2', '94056', '109950', '18'), +('6', '95', '2', '104417', '93860', '18'), +('6', '95', '3', '111314', '177138', '18'), +('6', '95', '3', '111316', '175426', '18'), +('6', '95', '3', '111315', '174543', '18'), +('6', '95', '3', '111013', '155287', '18'), +('6', '95', '5', '111319', '176493', '18'), +('6', '95', '5', '111321', '176069', '18'), +('6', '95', '5', '111318', '173766', '18'), +('6', '95', '5', '111317', '173490', '18'), +('6', '95', '8', '111332', '177327', '18'), +('6', '95', '8', '111329', '175939', '18'), +('6', '95', '8', '111330', '175163', '18'), +('6', '95', '8', '111331', '172871', '18'), +('6', '95', '6', '111323', '177226', '18'), +('6', '95', '6', '111326', '175811', '18'), +('6', '95', '6', '111325', '175727', '18'), +('6', '95', '6', '111022', '155375', '18'), +('6', '95', '17', '56045', '114571', '18'), +('6', '95', '17', '56084', '114384', '18'), +('6', '95', '17', '104420', '97457', '18'), +('6', '95', '17', '54855', '72866', '18'), +('6', '95', '7', '56080', '110038', '18'), +('6', '95', '7', '56040', '108897', '18'), +('6', '95', '7', '104418', '93304', '18'), +('6', '95', '7', '54849', '70247', '18'), +('6', '95', '9', '67098', '180020', '18'), +('6', '95', '9', '81764', '106591', '18'), +('6', '95', '9', '56070', '106437', '18'), +('6', '95', '9', '62984', '106234', '18'), +('6', '95', '15', '111350', '178627', '18'), +('6', '95', '15', '111344', '177732', '18'), +('6', '95', '15', '111340', '177091', '18'), +('6', '95', '15', '111346', '176620', '18'), +('6', '95', '20', '111356', '177141', '18'), +('6', '95', '20', '111352', '176475', '18'), +('6', '95', '20', '111351', '173756', '18'), +('6', '95', '20', '111054', '155291', '18'), +('6', '95', '12', '56035', '108343', '18'), +('6', '95', '12', '56074', '107108', '18'), +('6', '95', '12', '104415', '91063', '18'), +('6', '95', '12', '49656', '70132', '18'), +('6', '95', '18', '56041', '113961', '18'), +('6', '95', '18', '62986', '112479', '18'), +('6', '95', '18', '104419', '96338', '18'), +('6', '95', '18', '54851', '71775', '18'), +('6', '95', '19', '81763', '110714', '18'), +('6', '95', '19', '62990', '110403', '18'), +('6', '95', '19', '56037', '110372', '18'), +('6', '95', '19', '56075', '110249', '18'), +('6', '95', '13', '111518', '170589', '18'), +('6', '95', '13', '111517', '168858', '18'), +('6', '95', '13', '111217', '154200', '18'), +('6', '95', '13', '111218', '154148', '18'), +('6', '95', '14', '111537', '177433', '18'), +('6', '95', '14', '111539', '175645', '18'), +('6', '95', '14', '111535', '175259', '18'), +('6', '95', '14', '111237', '155581', '18'), +('6', '95', '11', '111337', '176528', '18'), +('6', '95', '11', '111335', '176484', '18'), +('6', '95', '11', '111338', '172593', '18'), +('6', '95', '11', '111034', '154734', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '96', '22', '12425', '0', '18'), +('6', '96', '22', '39342', '0', '18'), +('6', '96', '22', '7867', '0', '18'), +('6', '96', '22', '23597', '0', '18'), +('6', '96', '1', '111306', '176762', '18'), +('6', '96', '1', '111304', '176441', '18'), +('6', '96', '1', '111307', '176256', '18'), +('6', '96', '1', '111310', '174987', '18'), +('6', '96', '2', '62988', '110508', '18'), +('6', '96', '2', '62985', '110291', '18'), +('6', '96', '2', '94056', '109956', '18'), +('6', '96', '2', '104417', '93863', '18'), +('6', '96', '3', '111314', '177144', '18'), +('6', '96', '3', '111316', '175432', '18'), +('6', '96', '3', '111315', '174549', '18'), +('6', '96', '3', '111013', '155293', '18'), +('6', '96', '5', '111319', '176498', '18'), +('6', '96', '5', '111321', '176077', '18'), +('6', '96', '5', '111318', '173772', '18'), +('6', '96', '5', '111317', '173496', '18'), +('6', '96', '8', '111332', '177334', '18'), +('6', '96', '8', '111329', '175943', '18'), +('6', '96', '8', '111330', '175169', '18'), +('6', '96', '8', '111331', '172879', '18'), +('6', '96', '6', '111323', '177232', '18'), +('6', '96', '6', '111326', '175820', '18'), +('6', '96', '6', '111325', '175733', '18'), +('6', '96', '6', '111022', '155382', '18'), +('6', '96', '17', '56045', '114575', '18'), +('6', '96', '17', '56084', '114393', '18'), +('6', '96', '17', '104420', '97463', '18'), +('6', '96', '17', '54855', '72873', '18'), +('6', '96', '7', '56080', '110046', '18'), +('6', '96', '7', '56040', '108903', '18'), +('6', '96', '7', '104418', '93311', '18'), +('6', '96', '7', '54849', '70251', '18'), +('6', '96', '9', '67098', '180026', '18'), +('6', '96', '9', '81764', '106601', '18'), +('6', '96', '9', '56070', '106443', '18'), +('6', '96', '9', '62984', '106240', '18'), +('6', '96', '15', '111350', '178635', '18'), +('6', '96', '15', '111344', '177740', '18'), +('6', '96', '15', '111340', '177098', '18'), +('6', '96', '15', '111346', '176624', '18'), +('6', '96', '20', '111356', '177146', '18'), +('6', '96', '20', '111352', '176481', '18'), +('6', '96', '20', '111351', '173763', '18'), +('6', '96', '20', '111054', '155296', '18'), +('6', '96', '12', '56035', '108353', '18'), +('6', '96', '12', '56074', '107114', '18'), +('6', '96', '12', '104415', '91066', '18'), +('6', '96', '12', '49656', '70133', '18'), +('6', '96', '18', '56041', '113967', '18'), +('6', '96', '18', '62986', '112487', '18'), +('6', '96', '18', '104419', '96348', '18'), +('6', '96', '18', '54851', '71782', '18'), +('6', '96', '19', '81763', '110724', '18'), +('6', '96', '19', '62990', '110408', '18'), +('6', '96', '19', '56037', '110379', '18'), +('6', '96', '19', '56075', '110257', '18'), +('6', '96', '13', '111518', '170596', '18'), +('6', '96', '13', '111517', '168864', '18'), +('6', '96', '13', '111217', '154206', '18'), +('6', '96', '13', '111218', '154154', '18'), +('6', '96', '14', '111537', '177439', '18'), +('6', '96', '14', '111539', '175653', '18'), +('6', '96', '14', '111535', '175265', '18'), +('6', '96', '14', '111237', '155588', '18'), +('6', '96', '11', '111337', '176537', '18'), +('6', '96', '11', '111335', '176492', '18'), +('6', '96', '11', '111338', '172598', '18'), +('6', '96', '11', '111034', '154741', '18'), +('6', '97', '22', '12425', '0', '18'), +('6', '97', '22', '39342', '0', '18'), +('6', '97', '22', '7867', '0', '18'), +('6', '97', '22', '23597', '0', '18'), +('6', '97', '1', '111306', '176770', '18'), +('6', '97', '1', '111304', '176449', '18'), +('6', '97', '1', '111307', '176260', '18'), +('6', '97', '1', '111310', '174993', '18'), +('6', '97', '2', '62988', '110512', '18'), +('6', '97', '2', '62985', '110299', '18'), +('6', '97', '2', '94056', '109961', '18'), +('6', '97', '2', '104417', '93866', '18'), +('6', '97', '3', '111314', '177150', '18'), +('6', '97', '3', '111316', '175438', '18'), +('6', '97', '3', '111315', '174556', '18'), +('6', '97', '3', '111013', '155299', '18'), +('6', '97', '5', '111319', '176503', '18'), +('6', '97', '5', '111321', '176084', '18'), +('6', '97', '5', '111318', '173777', '18'), +('6', '97', '5', '111317', '173502', '18'), +('6', '97', '8', '111332', '177341', '18'), +('6', '97', '8', '111329', '175947', '18'), +('6', '97', '8', '111330', '175176', '18'), +('6', '97', '8', '111331', '172886', '18'), +('6', '97', '6', '111323', '177239', '18'), +('6', '97', '6', '111326', '175829', '18'), +('6', '97', '6', '111325', '175738', '18'), +('6', '97', '6', '111022', '155388', '18'), +('6', '97', '17', '56045', '114579', '18'), +('6', '97', '17', '56084', '114402', '18'), +('6', '97', '17', '104420', '97469', '18'), +('6', '97', '17', '54855', '72880', '18'), +('6', '97', '7', '56080', '110053', '18'), +('6', '97', '7', '56040', '108909', '18'), +('6', '97', '7', '104418', '93319', '18'), +('6', '97', '7', '54849', '70255', '18'), +('6', '97', '9', '67098', '180031', '18'), +('6', '97', '9', '81764', '106611', '18'), +('6', '97', '9', '56070', '106449', '18'), +('6', '97', '9', '62984', '106246', '18'), +('6', '97', '15', '111350', '178643', '18'), +('6', '97', '15', '111344', '177748', '18'), +('6', '97', '15', '111340', '177104', '18'), +('6', '97', '15', '111346', '176629', '18'), +('6', '97', '20', '111356', '177151', '18'), +('6', '97', '20', '111352', '176488', '18'), +('6', '97', '20', '111351', '173770', '18'), +('6', '97', '20', '111054', '155300', '18'), +('6', '97', '12', '56035', '108362', '18'), +('6', '97', '12', '56074', '107120', '18'), +('6', '97', '12', '104415', '91069', '18'), +('6', '97', '12', '49656', '70134', '18'), +('6', '97', '18', '56041', '113973', '18'), +('6', '97', '18', '62986', '112494', '18'), +('6', '97', '18', '104419', '96357', '18'), +('6', '97', '18', '54851', '71790', '18'), +('6', '97', '19', '81763', '110734', '18'), +('6', '97', '19', '62990', '110412', '18'), +('6', '97', '19', '56037', '110386', '18'), +('6', '97', '19', '56075', '110265', '18'), +('6', '97', '13', '111518', '170602', '18'), +('6', '97', '13', '111517', '168870', '18'), +('6', '97', '13', '111217', '154212', '18'), +('6', '97', '13', '111218', '154160', '18'), +('6', '97', '14', '111537', '177446', '18'), +('6', '97', '14', '111539', '175660', '18'), +('6', '97', '14', '111535', '175270', '18'), +('6', '97', '14', '111237', '155594', '18'), +('6', '97', '11', '111337', '176547', '18'), +('6', '97', '11', '111335', '176500', '18'), +('6', '97', '11', '111338', '172603', '18'), +('6', '97', '11', '111034', '154749', '18'), +('6', '98', '22', '12425', '0', '18'), +('6', '98', '22', '39342', '0', '18'), +('6', '98', '22', '7867', '0', '18'), +('6', '98', '22', '23597', '0', '18'), +('6', '98', '1', '111306', '176778', '18'), +('6', '98', '1', '111304', '176456', '18'), +('6', '98', '1', '111307', '176264', '18'), +('6', '98', '1', '111310', '174999', '18'), +('6', '98', '2', '62988', '110516', '18'), +('6', '98', '2', '62985', '110307', '18'), +('6', '98', '2', '94056', '109966', '18'), +('6', '98', '2', '104417', '93869', '18'), +('6', '98', '3', '111314', '177156', '18'), +('6', '98', '3', '111316', '175444', '18'), +('6', '98', '3', '111315', '174562', '18'), +('6', '98', '3', '111013', '155305', '18'), +('6', '98', '5', '111319', '176509', '18'), +('6', '98', '5', '111321', '176091', '18'), +('6', '98', '5', '111318', '173782', '18'), +('6', '98', '5', '111317', '173508', '18'), +('6', '98', '8', '111332', '177348', '18'), +('6', '98', '8', '111329', '175951', '18'), +('6', '98', '8', '111330', '175182', '18'), +('6', '98', '8', '111331', '172894', '18'), +('6', '98', '6', '111323', '177246', '18'), +('6', '98', '6', '111326', '175838', '18'), +('6', '98', '6', '111325', '175743', '18'), +('6', '98', '6', '111022', '155395', '18'), +('6', '98', '17', '56045', '114583', '18'), +('6', '98', '17', '56084', '114411', '18'), +('6', '98', '17', '104420', '97476', '18'), +('6', '98', '17', '54855', '72887', '18'), +('6', '98', '7', '56080', '110061', '18'), +('6', '98', '7', '56040', '108915', '18'), +('6', '98', '7', '104418', '93326', '18'), +('6', '98', '7', '54849', '70258', '18'), +('6', '98', '9', '67098', '180036', '18'), +('6', '98', '9', '81764', '106622', '18'), +('6', '98', '9', '56070', '106455', '18'), +('6', '98', '9', '62984', '106253', '18'), +('6', '98', '15', '111350', '178651', '18'), +('6', '98', '15', '111344', '177757', '18'), +('6', '98', '15', '111340', '177110', '18'), +('6', '98', '15', '111346', '176634', '18'), +('6', '98', '20', '111356', '177156', '18'), +('6', '98', '20', '111352', '176495', '18'), +('6', '98', '20', '111351', '173777', '18'), +('6', '98', '20', '111054', '155305', '18'), +('6', '98', '12', '56035', '108372', '18'), +('6', '98', '12', '56074', '107126', '18'), +('6', '98', '12', '104415', '91072', '18'), +('6', '98', '12', '49656', '70135', '18'), +('6', '98', '18', '56041', '113979', '18'), +('6', '98', '18', '62986', '112502', '18'), +('6', '98', '18', '104419', '96367', '18'), +('6', '98', '18', '54851', '71797', '18'), +('6', '98', '19', '81763', '110744', '18'), +('6', '98', '19', '62990', '110416', '18'), +('6', '98', '19', '56037', '110393', '18'), +('6', '98', '19', '56075', '110272', '18'), +('6', '98', '13', '111518', '170609', '18'), +('6', '98', '13', '111517', '168876', '18'), +('6', '98', '13', '111217', '154218', '18'), +('6', '98', '13', '111218', '154166', '18'), +('6', '98', '14', '111537', '177452', '18'), +('6', '98', '14', '111539', '175668', '18'), +('6', '98', '14', '111535', '175276', '18'), +('6', '98', '14', '111237', '155601', '18'), +('6', '98', '11', '111337', '176556', '18'), +('6', '98', '11', '111335', '176507', '18'), +('6', '98', '11', '111338', '172608', '18'), +('6', '98', '11', '111034', '154757', '18'), +('6', '99', '22', '12425', '0', '18'), +('6', '99', '22', '39342', '0', '18'), +('6', '99', '22', '7867', '0', '18'), +('6', '99', '22', '23597', '0', '18'), +('6', '99', '1', '111306', '176786', '18'), +('6', '99', '1', '111304', '176464', '18'), +('6', '99', '1', '111307', '176267', '18'), +('6', '99', '1', '111310', '175006', '18'), +('6', '99', '2', '62988', '110520', '18'), +('6', '99', '2', '62985', '110315', '18'), +('6', '99', '2', '94056', '109972', '18'), +('6', '99', '2', '104417', '93872', '18'), +('6', '99', '3', '111314', '177162', '18'), +('6', '99', '3', '111316', '175451', '18'), +('6', '99', '3', '111315', '174568', '18'), +('6', '99', '3', '111013', '155312', '18'), +('6', '99', '5', '111319', '176514', '18'), +('6', '99', '5', '111321', '176098', '18'), +('6', '99', '5', '111318', '173787', '18'), +('6', '99', '5', '111317', '173514', '18'), +('6', '99', '8', '111332', '177356', '18'), +('6', '99', '8', '111329', '175955', '18'), +('6', '99', '8', '111330', '175188', '18'), +('6', '99', '8', '111331', '172902', '18'), +('6', '99', '6', '111323', '177252', '18'), +('6', '99', '6', '111326', '175847', '18'), +('6', '99', '6', '111325', '175749', '18'), +('6', '99', '6', '111022', '155402', '18'), +('6', '99', '17', '56045', '114587', '18'), +('6', '99', '17', '56084', '114420', '18'), +('6', '99', '17', '104420', '97482', '18'), +('6', '99', '17', '54855', '72894', '18'), +('6', '99', '7', '56080', '110069', '18'), +('6', '99', '7', '56040', '108921', '18'), +('6', '99', '7', '104418', '93333', '18'), +('6', '99', '7', '54849', '70262', '18'), +('6', '99', '9', '67098', '180042', '18'), +('6', '99', '9', '81764', '106632', '18'), +('6', '99', '9', '56070', '106461', '18'), +('6', '99', '9', '62984', '106259', '18'), +('6', '99', '15', '111350', '178659', '18'), +('6', '99', '15', '111344', '177765', '18'), +('6', '99', '15', '111340', '177117', '18'), +('6', '99', '15', '111346', '176639', '18'), +('6', '99', '20', '111356', '177161', '18'), +('6', '99', '20', '111352', '176501', '18'), +('6', '99', '20', '111351', '173784', '18'), +('6', '99', '20', '111054', '155310', '18'), +('6', '99', '12', '56035', '108381', '18'), +('6', '99', '12', '56074', '107132', '18'), +('6', '99', '12', '104415', '91075', '18'), +('6', '99', '12', '49656', '70136', '18'), +('6', '99', '18', '56041', '113985', '18'), +('6', '99', '18', '62986', '112509', '18'), +('6', '99', '18', '104419', '96377', '18'), +('6', '99', '18', '54851', '71805', '18'), +('6', '99', '19', '81763', '110754', '18'), +('6', '99', '19', '62990', '110421', '18'), +('6', '99', '19', '56037', '110400', '18'), +('6', '99', '19', '56075', '110280', '18'), +('6', '99', '13', '111518', '170615', '18'), +('6', '99', '13', '111517', '168882', '18'), +('6', '99', '13', '111217', '154224', '18'), +('6', '99', '13', '111218', '154173', '18'), +('6', '99', '14', '111537', '177459', '18'), +('6', '99', '14', '111539', '175675', '18'), +('6', '99', '14', '111535', '175282', '18'), +('6', '99', '14', '111237', '155607', '18'), +('6', '99', '11', '111337', '176565', '18'), +('6', '99', '11', '111335', '176515', '18'), +('6', '99', '11', '111338', '172613', '18'), +('6', '99', '11', '111034', '154765', '18'), +('6', '100', '22', '12425', '0', '20'), +('6', '100', '22', '39342', '0', '20'), +('6', '100', '22', '7867', '0', '20'), +('6', '100', '22', '23597', '0', '20'), +('6', '100', '1', '98769', '284214', '20'), +('6', '100', '1', '111306', '176794', '20'), +('6', '100', '1', '111304', '176471', '20'), +('6', '100', '1', '111307', '176271', '20'), +('6', '100', '2', '62988', '110524', '20'), +('6', '100', '2', '62985', '110324', '20'), +('6', '100', '2', '94056', '109977', '20'), +('6', '100', '2', '104417', '93875', '20'), +('6', '100', '3', '111314', '177168', '20'), +('6', '100', '3', '111316', '175457', '20'), +('6', '100', '3', '111315', '174574', '20'), +('6', '100', '3', '111013', '155318', '20'), +('6', '100', '5', '111319', '176520', '20'), +('6', '100', '5', '111321', '176105', '20'), +('6', '100', '5', '111318', '173792', '20'), +('6', '100', '5', '111317', '173520', '20'), +('6', '100', '8', '111332', '177363', '20'), +('6', '100', '8', '111329', '175959', '20'), +('6', '100', '8', '111330', '175194', '20'), +('6', '100', '8', '111331', '172909', '20'), +('6', '100', '6', '111323', '177259', '20'), +('6', '100', '6', '111326', '175856', '20'), +('6', '100', '6', '111325', '175754', '20'), +('6', '100', '6', '111022', '155408', '20'), +('6', '100', '17', '56045', '114591', '20'), +('6', '100', '17', '56084', '114429', '20'), +('6', '100', '17', '104420', '97488', '20'), +('6', '100', '17', '54855', '72901', '20'), +('6', '100', '7', '56080', '110076', '20'), +('6', '100', '7', '56040', '108928', '20'), +('6', '100', '7', '104418', '93341', '20'), +('6', '100', '7', '54849', '70266', '20'), +('6', '100', '9', '67098', '180047', '20'), +('6', '100', '9', '81764', '106642', '20'), +('6', '100', '9', '56070', '106467', '20'), +('6', '100', '9', '62984', '106265', '20'), +('6', '100', '15', '111350', '178667', '20'), +('6', '100', '15', '111344', '177773', '20'), +('6', '100', '15', '111340', '177123', '20'), +('6', '100', '15', '111346', '176643', '20'), +('6', '100', '20', '111356', '177166', '20'), +('6', '100', '20', '111352', '176508', '20'), +('6', '100', '20', '111351', '173791', '20'), +('6', '100', '20', '111054', '155315', '20'), +('6', '100', '12', '56035', '108391', '20'), +('6', '100', '12', '56074', '107138', '20'), +('6', '100', '12', '104415', '91079', '20'), +('6', '100', '12', '49656', '70136', '20'), +('6', '100', '18', '56041', '113992', '20'), +('6', '100', '18', '62986', '112516', '20'), +('6', '100', '18', '104419', '96387', '20'), +('6', '100', '18', '54851', '71812', '20'), +('6', '100', '19', '81763', '110764', '20'), +('6', '100', '19', '62990', '110425', '20'), +('6', '100', '19', '56037', '110408', '20'), +('6', '100', '19', '56075', '110288', '20'), +('6', '100', '13', '111518', '170622', '20'), +('6', '100', '13', '111517', '168889', '20'), +('6', '100', '13', '111217', '154231', '20'), +('6', '100', '13', '111218', '154179', '20'), +('6', '100', '14', '111537', '177466', '20'), +('6', '100', '14', '111539', '175683', '20'), +('6', '100', '14', '111535', '175288', '20'), +('6', '100', '14', '111237', '155614', '20'), +('6', '100', '11', '133816', '229833', '20'), +('6', '100', '11', '111337', '176574', '20'), +('6', '100', '11', '111335', '176523', '20'), +('6', '100', '11', '111338', '172618', '20'), +('6', '100', '22', '12425', '0', '19'), +('6', '100', '22', '39342', '0', '19'), +('6', '100', '22', '7867', '0', '19'), +('6', '100', '22', '23597', '0', '19'), +('6', '100', '1', '98769', '284214', '19'), +('6', '100', '1', '111306', '176794', '19'), +('6', '100', '1', '111304', '176471', '19'), +('6', '100', '1', '111307', '176271', '19'), +('6', '100', '2', '62988', '110524', '19'), +('6', '100', '2', '62985', '110324', '19'), +('6', '100', '2', '94056', '109977', '19'), +('6', '100', '2', '104417', '93875', '19'), +('6', '100', '3', '111314', '177168', '19'), +('6', '100', '3', '111316', '175457', '19'), +('6', '100', '3', '111315', '174574', '19'), +('6', '100', '3', '111013', '155318', '19'), +('6', '100', '5', '111319', '176520', '19'), +('6', '100', '5', '111321', '176105', '19'), +('6', '100', '5', '111318', '173792', '19'), +('6', '100', '5', '111317', '173520', '19'), +('6', '100', '8', '111332', '177363', '19'), +('6', '100', '8', '111329', '175959', '19'), +('6', '100', '8', '111330', '175194', '19'), +('6', '100', '8', '111331', '172909', '19'), +('6', '100', '6', '111323', '177259', '19'), +('6', '100', '6', '111326', '175856', '19'), +('6', '100', '6', '111325', '175754', '19'), +('6', '100', '6', '111022', '155408', '19'), +('6', '100', '17', '56045', '114591', '19'), +('6', '100', '17', '56084', '114429', '19'), +('6', '100', '17', '104420', '97488', '19'), +('6', '100', '17', '54855', '72901', '19'), +('6', '100', '7', '56080', '110076', '19'), +('6', '100', '7', '56040', '108928', '19'), +('6', '100', '7', '104418', '93341', '19'), +('6', '100', '7', '54849', '70266', '19'), +('6', '100', '9', '67098', '180047', '19'), +('6', '100', '9', '81764', '106642', '19'), +('6', '100', '9', '56070', '106467', '19'), +('6', '100', '9', '62984', '106265', '19'), +('6', '100', '15', '111350', '178667', '19'), +('6', '100', '15', '111344', '177773', '19'), +('6', '100', '15', '111340', '177123', '19'), +('6', '100', '15', '111346', '176643', '19'), +('6', '100', '20', '111356', '177166', '19'), +('6', '100', '20', '111352', '176508', '19'), +('6', '100', '20', '111351', '173791', '19'), +('6', '100', '20', '111054', '155315', '19'), +('6', '100', '12', '56035', '108391', '19'), +('6', '100', '12', '56074', '107138', '19'), +('6', '100', '12', '104415', '91079', '19'), +('6', '100', '12', '49656', '70136', '19'), +('6', '100', '18', '56041', '113992', '19'), +('6', '100', '18', '62986', '112516', '19'), +('6', '100', '18', '104419', '96387', '19'), +('6', '100', '18', '54851', '71812', '19'), +('6', '100', '19', '81763', '110764', '19'), +('6', '100', '19', '62990', '110425', '19'), +('6', '100', '19', '56037', '110408', '19'), +('6', '100', '19', '56075', '110288', '19'), +('6', '100', '13', '111518', '170621', '19'), +('6', '100', '13', '111517', '168888', '19'), +('6', '100', '13', '111217', '154230', '19'), +('6', '100', '13', '111218', '154179', '19'), +('6', '100', '14', '111537', '177466', '19'), +('6', '100', '14', '111539', '175683', '19'), +('6', '100', '14', '111535', '175288', '19'), +('6', '100', '14', '111237', '155614', '19'), +('6', '100', '11', '133816', '229833', '19'), +('6', '100', '11', '111337', '176574', '19'), +('6', '100', '11', '111335', '176523', '19'), +('6', '100', '11', '111338', '172618', '19'), +('6', '101', '22', '12425', '0', '20'), +('6', '101', '22', '39342', '0', '20'), +('6', '101', '22', '7867', '0', '20'), +('6', '101', '22', '23597', '0', '20'), +('6', '101', '1', '98769', '284218', '20'), +('6', '101', '1', '111306', '176802', '20'), +('6', '101', '1', '111304', '176479', '20'), +('6', '101', '1', '111307', '176275', '20'), +('6', '101', '2', '62988', '110528', '20'), +('6', '101', '2', '62985', '110332', '20'), +('6', '101', '2', '94056', '109982', '20'), +('6', '101', '2', '104417', '93879', '20'), +('6', '101', '3', '111314', '177175', '20'), +('6', '101', '3', '111316', '175463', '20'), +('6', '101', '3', '111315', '174580', '20'), +('6', '101', '3', '111013', '155324', '20'), +('6', '101', '5', '111319', '176525', '20'), +('6', '101', '5', '111321', '176112', '20'), +('6', '101', '5', '111318', '173797', '20'), +('6', '101', '5', '111317', '173526', '20'), +('6', '101', '8', '111332', '177370', '20'), +('6', '101', '8', '111329', '175963', '20'), +('6', '101', '8', '111330', '175200', '20'), +('6', '101', '8', '111331', '172917', '20'), +('6', '101', '6', '111323', '177265', '20'), +('6', '101', '6', '111326', '175865', '20'), +('6', '101', '6', '111325', '175759', '20'), +('6', '101', '6', '111022', '155415', '20'), +('6', '101', '17', '56045', '114595', '20'), +('6', '101', '17', '56084', '114438', '20'), +('6', '101', '17', '104420', '97494', '20'), +('6', '101', '17', '54855', '72908', '20'), +('6', '101', '7', '56080', '110084', '20'), +('6', '101', '7', '56040', '108934', '20'), +('6', '101', '7', '104418', '93348', '20'), +('6', '101', '7', '54849', '70270', '20'), +('6', '101', '9', '67098', '180053', '20'), +('6', '101', '9', '81764', '106653', '20'), +('6', '101', '9', '56070', '106473', '20'), +('6', '101', '9', '62984', '106271', '20'), +('6', '101', '15', '111350', '178675', '20'), +('6', '101', '15', '111344', '177781', '20'), +('6', '101', '15', '111340', '177129', '20'), +('6', '101', '15', '111346', '176648', '20'), +('6', '101', '20', '111356', '177170', '20'), +('6', '101', '20', '111352', '176514', '20'), +('6', '101', '20', '111351', '173798', '20'), +('6', '101', '20', '111054', '155320', '20'), +('6', '101', '12', '56035', '108400', '20'), +('6', '101', '12', '56074', '107145', '20'), +('6', '101', '12', '104415', '91082', '20'), +('6', '101', '12', '49656', '70137', '20'), +('6', '101', '18', '56041', '113998', '20'), +('6', '101', '18', '62986', '112524', '20'), +('6', '101', '18', '104419', '96396', '20'), +('6', '101', '18', '54851', '71820', '20'), +('6', '101', '19', '81763', '110774', '20'), +('6', '101', '19', '62990', '110429', '20'), +('6', '101', '19', '56037', '110415', '20'), +('6', '101', '19', '56075', '110296', '20'), +('6', '101', '13', '111518', '170628', '20'), +('6', '101', '13', '111517', '168895', '20'), +('6', '101', '13', '111217', '154237', '20'), +('6', '101', '13', '111218', '154186', '20'), +('6', '101', '14', '111537', '177472', '20'), +('6', '101', '14', '111539', '175690', '20'), +('6', '101', '14', '111535', '175294', '20'), +('6', '101', '14', '111237', '155621', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '101', '11', '133816', '229838', '20'), +('6', '101', '11', '111337', '176583', '20'), +('6', '101', '11', '111335', '176531', '20'), +('6', '101', '11', '111338', '172623', '20'), +('6', '102', '22', '12425', '0', '20'), +('6', '102', '22', '39342', '0', '20'), +('6', '102', '22', '7867', '0', '20'), +('6', '102', '22', '23597', '0', '20'), +('6', '102', '1', '98769', '284222', '20'), +('6', '102', '1', '111306', '176811', '20'), +('6', '102', '1', '111304', '176486', '20'), +('6', '102', '1', '111307', '176278', '20'), +('6', '102', '2', '62988', '110532', '20'), +('6', '102', '2', '62985', '110340', '20'), +('6', '102', '2', '94056', '109988', '20'), +('6', '102', '2', '104417', '93882', '20'), +('6', '102', '3', '111314', '177181', '20'), +('6', '102', '3', '111316', '175469', '20'), +('6', '102', '3', '111315', '174587', '20'), +('6', '102', '3', '111013', '155330', '20'), +('6', '102', '5', '111319', '176530', '20'), +('6', '102', '5', '111321', '176120', '20'), +('6', '102', '5', '111318', '173802', '20'), +('6', '102', '5', '111317', '173532', '20'), +('6', '102', '8', '111332', '177377', '20'), +('6', '102', '8', '111329', '175967', '20'), +('6', '102', '8', '111330', '175206', '20'), +('6', '102', '8', '111331', '172924', '20'), +('6', '102', '6', '111323', '177272', '20'), +('6', '102', '6', '111326', '175874', '20'), +('6', '102', '6', '111325', '175765', '20'), +('6', '102', '6', '111022', '155421', '20'), +('6', '102', '17', '56045', '114600', '20'), +('6', '102', '17', '56084', '114447', '20'), +('6', '102', '17', '104420', '97501', '20'), +('6', '102', '17', '54855', '72914', '20'), +('6', '102', '7', '56080', '110091', '20'), +('6', '102', '7', '56040', '108940', '20'), +('6', '102', '7', '104418', '93355', '20'), +('6', '102', '7', '54849', '70274', '20'), +('6', '102', '9', '67098', '180058', '20'), +('6', '102', '9', '81764', '106663', '20'), +('6', '102', '9', '56070', '106480', '20'), +('6', '102', '9', '62984', '106277', '20'), +('6', '102', '15', '111350', '178683', '20'), +('6', '102', '15', '111344', '177789', '20'), +('6', '102', '15', '111340', '177136', '20'), +('6', '102', '15', '111346', '176653', '20'), +('6', '102', '20', '111356', '177175', '20'), +('6', '102', '20', '111352', '176521', '20'), +('6', '102', '20', '111351', '173805', '20'), +('6', '102', '20', '111054', '155325', '20'), +('6', '102', '12', '56035', '108410', '20'), +('6', '102', '12', '56074', '107151', '20'), +('6', '102', '12', '104415', '91085', '20'), +('6', '102', '12', '49656', '70138', '20'), +('6', '102', '18', '56041', '114004', '20'), +('6', '102', '18', '62986', '112531', '20'), +('6', '102', '18', '104419', '96406', '20'), +('6', '102', '18', '54851', '71827', '20'), +('6', '102', '19', '81763', '110784', '20'), +('6', '102', '19', '62990', '110434', '20'), +('6', '102', '19', '56037', '110422', '20'), +('6', '102', '19', '56075', '110304', '20'), +('6', '102', '13', '111518', '170635', '20'), +('6', '102', '13', '111517', '168901', '20'), +('6', '102', '13', '111217', '154243', '20'), +('6', '102', '13', '111218', '154192', '20'), +('6', '102', '14', '111537', '177479', '20'), +('6', '102', '14', '111539', '175698', '20'), +('6', '102', '14', '111535', '175300', '20'), +('6', '102', '14', '111237', '155627', '20'), +('6', '102', '11', '133816', '229843', '20'), +('6', '102', '11', '111337', '176592', '20'), +('6', '102', '11', '111335', '176538', '20'), +('6', '102', '11', '111338', '172628', '20'), +('6', '103', '22', '12425', '0', '20'), +('6', '103', '22', '39342', '0', '20'), +('6', '103', '22', '7867', '0', '20'), +('6', '103', '22', '23597', '0', '20'), +('6', '103', '1', '98769', '284226', '20'), +('6', '103', '1', '111306', '176819', '20'), +('6', '103', '1', '111304', '176494', '20'), +('6', '103', '1', '111307', '176282', '20'), +('6', '103', '2', '62988', '110536', '20'), +('6', '103', '2', '62985', '110349', '20'), +('6', '103', '2', '94056', '109993', '20'), +('6', '103', '2', '104417', '93885', '20'), +('6', '103', '3', '111314', '177187', '20'), +('6', '103', '3', '111316', '175475', '20'), +('6', '103', '3', '111315', '174593', '20'), +('6', '103', '3', '111013', '155336', '20'), +('6', '103', '5', '111319', '176536', '20'), +('6', '103', '5', '111321', '176127', '20'), +('6', '103', '5', '111318', '173807', '20'), +('6', '103', '5', '111317', '173538', '20'), +('6', '103', '8', '111332', '177384', '20'), +('6', '103', '8', '111329', '175971', '20'), +('6', '103', '8', '111330', '175212', '20'), +('6', '103', '8', '111331', '172932', '20'), +('6', '103', '6', '111323', '177278', '20'), +('6', '103', '6', '111326', '175882', '20'), +('6', '103', '6', '111325', '175770', '20'), +('6', '103', '6', '111022', '155428', '20'), +('6', '103', '17', '56045', '114604', '20'), +('6', '103', '17', '56084', '114456', '20'), +('6', '103', '17', '104420', '97507', '20'), +('6', '103', '17', '54855', '72921', '20'), +('6', '103', '7', '56080', '110099', '20'), +('6', '103', '7', '56040', '108946', '20'), +('6', '103', '7', '104418', '93362', '20'), +('6', '103', '7', '54849', '70277', '20'), +('6', '103', '9', '67098', '180063', '20'), +('6', '103', '9', '81764', '106673', '20'), +('6', '103', '9', '56070', '106486', '20'), +('6', '103', '9', '62984', '106284', '20'), +('6', '103', '15', '111350', '178691', '20'), +('6', '103', '15', '111344', '177797', '20'), +('6', '103', '15', '111340', '177142', '20'), +('6', '103', '15', '111346', '176658', '20'), +('6', '103', '20', '111356', '177180', '20'), +('6', '103', '20', '111352', '176527', '20'), +('6', '103', '20', '111351', '173812', '20'), +('6', '103', '20', '111054', '155329', '20'), +('6', '103', '12', '56035', '108419', '20'), +('6', '103', '12', '56074', '107157', '20'), +('6', '103', '12', '104415', '91088', '20'), +('6', '103', '12', '49656', '70139', '20'), +('6', '103', '18', '56041', '114010', '20'), +('6', '103', '18', '62986', '112539', '20'), +('6', '103', '18', '104419', '96416', '20'), +('6', '103', '18', '54851', '71835', '20'), +('6', '103', '19', '81763', '110794', '20'), +('6', '103', '19', '62990', '110438', '20'), +('6', '103', '19', '56037', '110429', '20'), +('6', '103', '19', '56075', '110312', '20'), +('6', '103', '13', '111518', '170641', '20'), +('6', '103', '13', '111517', '168907', '20'), +('6', '103', '13', '111217', '154249', '20'), +('6', '103', '13', '111218', '154198', '20'), +('6', '103', '14', '111537', '177485', '20'), +('6', '103', '14', '111539', '175705', '20'), +('6', '103', '14', '111535', '175306', '20'), +('6', '103', '14', '111237', '155634', '20'), +('6', '103', '11', '133816', '229848', '20'), +('6', '103', '11', '111337', '176601', '20'), +('6', '103', '11', '111335', '176546', '20'), +('6', '103', '11', '111338', '172633', '20'), +('6', '104', '22', '12425', '0', '20'), +('6', '104', '22', '39342', '0', '20'), +('6', '104', '22', '7867', '0', '20'), +('6', '104', '22', '23597', '0', '20'), +('6', '104', '1', '98769', '284230', '20'), +('6', '104', '1', '111306', '176827', '20'), +('6', '104', '1', '111304', '176501', '20'), +('6', '104', '1', '111307', '176285', '20'), +('6', '104', '2', '62988', '110540', '20'), +('6', '104', '2', '62985', '110357', '20'), +('6', '104', '2', '94056', '109998', '20'), +('6', '104', '2', '104417', '93888', '20'), +('6', '104', '3', '111314', '177193', '20'), +('6', '104', '3', '111316', '175481', '20'), +('6', '104', '3', '111315', '174599', '20'), +('6', '104', '3', '111013', '155342', '20'), +('6', '104', '5', '111319', '176541', '20'), +('6', '104', '5', '111321', '176134', '20'), +('6', '104', '5', '111318', '173812', '20'), +('6', '104', '5', '111317', '173544', '20'), +('6', '104', '8', '111332', '177391', '20'), +('6', '104', '8', '111329', '175975', '20'), +('6', '104', '8', '111330', '175218', '20'), +('6', '104', '8', '111331', '172939', '20'), +('6', '104', '6', '111323', '177285', '20'), +('6', '104', '6', '111326', '175891', '20'), +('6', '104', '6', '111325', '175775', '20'), +('6', '104', '6', '111022', '155434', '20'), +('6', '104', '17', '56045', '114608', '20'), +('6', '104', '17', '56084', '114465', '20'), +('6', '104', '17', '104420', '97513', '20'), +('6', '104', '17', '54855', '72928', '20'), +('6', '104', '7', '56080', '110106', '20'), +('6', '104', '7', '56040', '108952', '20'), +('6', '104', '7', '104418', '93370', '20'), +('6', '104', '7', '54849', '70281', '20'), +('6', '104', '9', '67098', '180069', '20'), +('6', '104', '9', '81764', '106683', '20'), +('6', '104', '9', '56070', '106492', '20'), +('6', '104', '9', '62984', '106290', '20'), +('6', '104', '15', '111350', '178699', '20'), +('6', '104', '15', '111344', '177805', '20'), +('6', '104', '15', '111340', '177148', '20'), +('6', '104', '15', '111346', '176662', '20'), +('6', '104', '20', '111356', '177185', '20'), +('6', '104', '20', '111352', '176534', '20'), +('6', '104', '20', '111351', '173818', '20'), +('6', '104', '20', '111054', '155334', '20'), +('6', '104', '12', '56035', '108429', '20'), +('6', '104', '12', '56074', '107163', '20'), +('6', '104', '12', '104415', '91091', '20'), +('6', '104', '12', '49656', '70140', '20'), +('6', '104', '18', '56041', '114016', '20'), +('6', '104', '18', '62986', '112546', '20'), +('6', '104', '18', '104419', '96426', '20'), +('6', '104', '18', '54851', '71842', '20'), +('6', '104', '19', '81763', '110804', '20'), +('6', '104', '19', '62990', '110443', '20'), +('6', '104', '19', '56037', '110436', '20'), +('6', '104', '19', '56075', '110320', '20'), +('6', '104', '13', '111518', '170648', '20'), +('6', '104', '13', '111517', '168914', '20'), +('6', '104', '13', '111217', '154255', '20'), +('6', '104', '13', '111218', '154204', '20'), +('6', '104', '14', '111537', '177492', '20'), +('6', '104', '14', '111539', '175713', '20'), +('6', '104', '14', '111535', '175312', '20'), +('6', '104', '14', '111237', '155640', '20'), +('6', '104', '11', '133816', '229853', '20'), +('6', '104', '11', '111337', '176611', '20'), +('6', '104', '11', '111335', '176554', '20'), +('6', '104', '11', '111338', '172638', '20'), +('6', '105', '22', '12425', '0', '23'), +('6', '105', '22', '39342', '0', '23'), +('6', '105', '22', '7867', '0', '23'), +('6', '105', '22', '23597', '0', '23'), +('6', '105', '1', '98769', '284235', '23'), +('6', '105', '1', '111306', '176835', '23'), +('6', '105', '1', '111304', '176509', '23'), +('6', '105', '1', '111307', '176289', '23'), +('6', '105', '2', '62988', '110544', '23'), +('6', '105', '2', '62985', '110365', '23'), +('6', '105', '2', '94056', '110004', '23'), +('6', '105', '2', '104417', '93891', '23'), +('6', '105', '3', '111314', '177199', '23'), +('6', '105', '3', '111316', '175487', '23'), +('6', '105', '3', '111315', '174605', '23'), +('6', '105', '3', '111013', '155349', '23'), +('6', '105', '5', '111319', '176547', '23'), +('6', '105', '5', '111321', '176141', '23'), +('6', '105', '5', '111318', '173818', '23'), +('6', '105', '5', '111317', '173550', '23'), +('6', '105', '8', '111332', '177398', '23'), +('6', '105', '8', '111329', '175979', '23'), +('6', '105', '8', '111330', '175225', '23'), +('6', '105', '8', '111331', '172947', '23'), +('6', '105', '6', '111323', '177292', '23'), +('6', '105', '6', '111326', '175900', '23'), +('6', '105', '6', '111325', '175781', '23'), +('6', '105', '6', '111022', '155441', '23'), +('6', '105', '17', '56045', '114612', '23'), +('6', '105', '17', '56084', '114474', '23'), +('6', '105', '17', '104420', '97519', '23'), +('6', '105', '17', '54855', '72935', '23'), +('6', '105', '7', '56080', '110114', '23'), +('6', '105', '7', '56040', '108958', '23'), +('6', '105', '7', '104418', '93377', '23'), +('6', '105', '7', '54849', '70285', '23'), +('6', '105', '9', '67098', '180074', '23'), +('6', '105', '9', '81764', '106694', '23'), +('6', '105', '9', '56070', '106498', '23'), +('6', '105', '9', '62984', '106296', '23'), +('6', '105', '15', '111350', '178707', '23'), +('6', '105', '15', '111344', '177814', '23'), +('6', '105', '15', '111340', '177155', '23'), +('6', '105', '15', '111346', '176667', '23'), +('6', '105', '20', '111356', '177190', '23'), +('6', '105', '20', '111352', '176540', '23'), +('6', '105', '20', '111351', '173825', '23'), +('6', '105', '20', '111054', '155339', '23'), +('6', '105', '12', '56035', '108438', '23'), +('6', '105', '12', '56074', '107169', '23'), +('6', '105', '12', '104415', '91095', '23'), +('6', '105', '12', '49656', '70141', '23'), +('6', '105', '18', '56041', '114022', '23'), +('6', '105', '18', '62986', '112554', '23'), +('6', '105', '18', '104419', '96435', '23'), +('6', '105', '18', '54851', '71850', '23'), +('6', '105', '19', '81763', '110814', '23'), +('6', '105', '19', '62990', '110447', '23'), +('6', '105', '19', '56037', '110443', '23'), +('6', '105', '19', '56075', '110328', '23'), +('6', '105', '13', '111518', '170654', '23'), +('6', '105', '13', '111517', '168920', '23'), +('6', '105', '13', '111217', '154261', '23'), +('6', '105', '13', '111218', '154211', '23'), +('6', '105', '14', '111537', '177498', '23'), +('6', '105', '14', '111539', '175720', '23'), +('6', '105', '14', '111535', '175318', '23'), +('6', '105', '14', '111237', '155647', '23'), +('6', '105', '11', '133816', '229858', '23'), +('6', '105', '11', '111337', '176620', '23'), +('6', '105', '11', '111335', '176562', '23'), +('6', '105', '11', '111338', '172643', '23'), +('6', '105', '22', '12425', '0', '22'), +('6', '105', '22', '39342', '0', '22'), +('6', '105', '22', '7867', '0', '22'), +('6', '105', '22', '23597', '0', '22'), +('6', '105', '1', '98769', '284235', '22'), +('6', '105', '1', '111306', '176835', '22'), +('6', '105', '1', '111304', '176509', '22'), +('6', '105', '1', '111307', '176289', '22'), +('6', '105', '2', '62988', '110544', '22'), +('6', '105', '2', '62985', '110365', '22'), +('6', '105', '2', '94056', '110004', '22'), +('6', '105', '2', '104417', '93891', '22'), +('6', '105', '3', '111314', '177199', '22'), +('6', '105', '3', '111316', '175487', '22'), +('6', '105', '3', '111315', '174605', '22'), +('6', '105', '3', '111013', '155349', '22'), +('6', '105', '5', '111319', '176547', '22'), +('6', '105', '5', '111321', '176141', '22'), +('6', '105', '5', '111318', '173818', '22'), +('6', '105', '5', '111317', '173550', '22'), +('6', '105', '8', '111332', '177398', '22'), +('6', '105', '8', '111329', '175979', '22'), +('6', '105', '8', '111330', '175225', '22'), +('6', '105', '8', '111331', '172947', '22'), +('6', '105', '6', '111323', '177292', '22'), +('6', '105', '6', '111326', '175900', '22'), +('6', '105', '6', '111325', '175781', '22'), +('6', '105', '6', '111022', '155441', '22'), +('6', '105', '17', '56045', '114612', '22'), +('6', '105', '17', '56084', '114474', '22'), +('6', '105', '17', '104420', '97519', '22'), +('6', '105', '17', '54855', '72935', '22'), +('6', '105', '7', '56080', '110114', '22'), +('6', '105', '7', '56040', '108958', '22'), +('6', '105', '7', '104418', '93377', '22'), +('6', '105', '7', '54849', '70285', '22'), +('6', '105', '9', '67098', '180074', '22'), +('6', '105', '9', '81764', '106694', '22'), +('6', '105', '9', '56070', '106498', '22'), +('6', '105', '9', '62984', '106296', '22'), +('6', '105', '15', '111350', '178707', '22'), +('6', '105', '15', '111344', '177814', '22'), +('6', '105', '15', '111340', '177155', '22'), +('6', '105', '15', '111346', '176667', '22'), +('6', '105', '20', '111356', '177190', '22'), +('6', '105', '20', '111352', '176540', '22'), +('6', '105', '20', '111351', '173825', '22'), +('6', '105', '20', '111054', '155339', '22'), +('6', '105', '12', '56035', '108438', '22'), +('6', '105', '12', '56074', '107169', '22'), +('6', '105', '12', '104415', '91095', '22'), +('6', '105', '12', '49656', '70141', '22'), +('6', '105', '18', '56041', '114022', '22'), +('6', '105', '18', '62986', '112554', '22'), +('6', '105', '18', '104419', '96435', '22'), +('6', '105', '18', '54851', '71850', '22'), +('6', '105', '19', '81763', '110814', '22'), +('6', '105', '19', '62990', '110447', '22'), +('6', '105', '19', '56037', '110443', '22'), +('6', '105', '19', '56075', '110328', '22'), +('6', '105', '13', '111518', '170654', '22'), +('6', '105', '13', '111517', '168920', '22'), +('6', '105', '13', '111217', '154261', '22'), +('6', '105', '13', '111218', '154211', '22'), +('6', '105', '14', '111537', '177498', '22'), +('6', '105', '14', '111539', '175720', '22'), +('6', '105', '14', '111535', '175318', '22'), +('6', '105', '14', '111237', '155647', '22'), +('6', '105', '11', '133816', '229858', '22'), +('6', '105', '11', '111337', '176620', '22'), +('6', '105', '11', '111335', '176562', '22'), +('6', '105', '11', '111338', '172643', '22'), +('6', '105', '22', '12425', '0', '21'), +('6', '105', '22', '39342', '0', '21'), +('6', '105', '22', '7867', '0', '21'), +('6', '105', '22', '23597', '0', '21'), +('6', '105', '1', '98769', '284235', '21'), +('6', '105', '1', '111306', '176835', '21'), +('6', '105', '1', '111304', '176509', '21'), +('6', '105', '1', '111307', '176289', '21'), +('6', '105', '2', '62988', '110544', '21'), +('6', '105', '2', '62985', '110365', '21'), +('6', '105', '2', '94056', '110004', '21'), +('6', '105', '2', '104417', '93891', '21'), +('6', '105', '3', '111314', '177199', '21'), +('6', '105', '3', '111316', '175487', '21'), +('6', '105', '3', '111315', '174605', '21'), +('6', '105', '3', '111013', '155349', '21'), +('6', '105', '5', '111319', '176547', '21'), +('6', '105', '5', '111321', '176141', '21'), +('6', '105', '5', '111318', '173818', '21'), +('6', '105', '5', '111317', '173550', '21'), +('6', '105', '8', '111332', '177398', '21'), +('6', '105', '8', '111329', '175979', '21'), +('6', '105', '8', '111330', '175225', '21'), +('6', '105', '8', '111331', '172947', '21'), +('6', '105', '6', '111323', '177292', '21'), +('6', '105', '6', '111326', '175900', '21'), +('6', '105', '6', '111325', '175781', '21'), +('6', '105', '6', '111022', '155441', '21'), +('6', '105', '17', '56045', '114612', '21'), +('6', '105', '17', '56084', '114474', '21'), +('6', '105', '17', '104420', '97519', '21'), +('6', '105', '17', '54855', '72935', '21'), +('6', '105', '7', '56080', '110114', '21'), +('6', '105', '7', '56040', '108958', '21'), +('6', '105', '7', '104418', '93377', '21'), +('6', '105', '7', '54849', '70285', '21'), +('6', '105', '9', '67098', '180074', '21'), +('6', '105', '9', '81764', '106694', '21'), +('6', '105', '9', '56070', '106498', '21'), +('6', '105', '9', '62984', '106296', '21'), +('6', '105', '15', '111350', '178707', '21'), +('6', '105', '15', '111344', '177814', '21'), +('6', '105', '15', '111340', '177155', '21'), +('6', '105', '15', '111346', '176667', '21'), +('6', '105', '20', '111356', '177190', '21'), +('6', '105', '20', '111352', '176540', '21'), +('6', '105', '20', '111351', '173825', '21'), +('6', '105', '20', '111054', '155339', '21'), +('6', '105', '12', '56035', '108438', '21'), +('6', '105', '12', '56074', '107169', '21'), +('6', '105', '12', '104415', '91095', '21'), +('6', '105', '12', '49656', '70141', '21'), +('6', '105', '18', '56041', '114022', '21'), +('6', '105', '18', '62986', '112554', '21'), +('6', '105', '18', '104419', '96435', '21'), +('6', '105', '18', '54851', '71850', '21'), +('6', '105', '19', '81763', '110814', '21'), +('6', '105', '19', '62990', '110447', '21'), +('6', '105', '19', '56037', '110443', '21'), +('6', '105', '19', '56075', '110328', '21'), +('6', '105', '13', '111518', '170654', '21'), +('6', '105', '13', '111517', '168920', '21'), +('6', '105', '13', '111217', '154261', '21'), +('6', '105', '13', '111218', '154211', '21'), +('6', '105', '14', '111537', '177498', '21'), +('6', '105', '14', '111539', '175720', '21'), +('6', '105', '14', '111535', '175318', '21'), +('6', '105', '14', '111237', '155647', '21'), +('6', '105', '11', '133816', '229858', '21'), +('6', '105', '11', '111337', '176620', '21'), +('6', '105', '11', '111335', '176562', '21'), +('6', '105', '11', '111338', '172643', '21'), +('6', '106', '22', '12425', '0', '23'), +('6', '106', '22', '39342', '0', '23'), +('6', '106', '22', '7867', '0', '23'), +('6', '106', '22', '23597', '0', '23'), +('6', '106', '1', '98769', '284239', '23'), +('6', '106', '1', '111306', '176843', '23'), +('6', '106', '1', '111304', '176516', '23'), +('6', '106', '1', '111307', '176293', '23'), +('6', '106', '2', '62988', '110548', '23'), +('6', '106', '2', '62985', '110373', '23'), +('6', '106', '2', '94056', '110009', '23'), +('6', '106', '2', '104417', '93894', '23'), +('6', '106', '3', '111314', '177205', '23'), +('6', '106', '3', '111316', '175494', '23'), +('6', '106', '3', '111315', '174612', '23'), +('6', '106', '3', '111013', '155355', '23'), +('6', '106', '5', '111319', '176552', '23'), +('6', '106', '5', '111321', '176148', '23'), +('6', '106', '5', '111318', '173823', '23'), +('6', '106', '5', '111317', '173556', '23'), +('6', '106', '8', '111332', '177405', '23'), +('6', '106', '8', '111329', '175983', '23'), +('6', '106', '8', '111330', '175231', '23'), +('6', '106', '8', '111331', '172955', '23'), +('6', '106', '6', '111323', '177298', '23'), +('6', '106', '6', '111326', '175909', '23'), +('6', '106', '6', '111325', '175786', '23'), +('6', '106', '6', '111022', '155448', '23'), +('6', '106', '17', '56045', '114616', '23'), +('6', '106', '17', '56084', '114484', '23'), +('6', '106', '17', '104420', '97525', '23'), +('6', '106', '17', '54855', '72942', '23'), +('6', '106', '7', '56080', '110121', '23'), +('6', '106', '7', '56040', '108965', '23'), +('6', '106', '7', '104418', '93384', '23'), +('6', '106', '7', '54849', '70289', '23'), +('6', '106', '9', '67098', '180079', '23'), +('6', '106', '9', '81764', '106704', '23'), +('6', '106', '9', '56070', '106504', '23'), +('6', '106', '9', '62984', '106302', '23'), +('6', '106', '15', '111350', '178715', '23'), +('6', '106', '15', '111344', '177822', '23'), +('6', '106', '15', '111340', '177161', '23'), +('6', '106', '15', '111346', '176672', '23'), +('6', '106', '20', '111356', '177195', '23'), +('6', '106', '20', '111352', '176547', '23'), +('6', '106', '20', '111351', '173832', '23'), +('6', '106', '20', '111054', '155344', '23'), +('6', '106', '12', '56035', '108448', '23'), +('6', '106', '12', '56074', '107175', '23'), +('6', '106', '12', '104415', '91098', '23'), +('6', '106', '12', '49656', '70141', '23'), +('6', '106', '18', '56041', '114028', '23'), +('6', '106', '18', '62986', '112561', '23'), +('6', '106', '18', '104419', '96445', '23'), +('6', '106', '18', '54851', '71857', '23'), +('6', '106', '19', '81763', '110823', '23'), +('6', '106', '19', '62990', '110451', '23'), +('6', '106', '19', '56037', '110450', '23'), +('6', '106', '19', '56075', '110336', '23'), +('6', '106', '13', '111518', '170661', '23'), +('6', '106', '13', '111517', '168926', '23'), +('6', '106', '13', '111217', '154267', '23'), +('6', '106', '13', '111218', '154217', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '106', '14', '111537', '177505', '23'), +('6', '106', '14', '111539', '175728', '23'), +('6', '106', '14', '111535', '175324', '23'), +('6', '106', '14', '111237', '155653', '23'), +('6', '106', '11', '133816', '229863', '23'), +('6', '106', '11', '111337', '176629', '23'), +('6', '106', '11', '111335', '176569', '23'), +('6', '106', '11', '111338', '172648', '23'), +('6', '107', '22', '12425', '0', '23'), +('6', '107', '22', '39342', '0', '23'), +('6', '107', '22', '7867', '0', '23'), +('6', '107', '22', '23597', '0', '23'), +('6', '107', '1', '98769', '284243', '23'), +('6', '107', '1', '111306', '176851', '23'), +('6', '107', '1', '111304', '176524', '23'), +('6', '107', '1', '111307', '176296', '23'), +('6', '107', '2', '62988', '110552', '23'), +('6', '107', '2', '62985', '110382', '23'), +('6', '107', '2', '94056', '110014', '23'), +('6', '107', '2', '104417', '93897', '23'), +('6', '107', '3', '111314', '177212', '23'), +('6', '107', '3', '111316', '175500', '23'), +('6', '107', '3', '111315', '174618', '23'), +('6', '107', '3', '111013', '155361', '23'), +('6', '107', '5', '111319', '176557', '23'), +('6', '107', '5', '111321', '176155', '23'), +('6', '107', '5', '111318', '173828', '23'), +('6', '107', '5', '111317', '173562', '23'), +('6', '107', '8', '111332', '177412', '23'), +('6', '107', '8', '111329', '175987', '23'), +('6', '107', '8', '111330', '175237', '23'), +('6', '107', '8', '111331', '172962', '23'), +('6', '107', '6', '111323', '177305', '23'), +('6', '107', '6', '111326', '175918', '23'), +('6', '107', '6', '111325', '175791', '23'), +('6', '107', '6', '111022', '155454', '23'), +('6', '107', '17', '56045', '114620', '23'), +('6', '107', '17', '56084', '114493', '23'), +('6', '107', '17', '104420', '97532', '23'), +('6', '107', '17', '54855', '72949', '23'), +('6', '107', '7', '56080', '110129', '23'), +('6', '107', '7', '56040', '108971', '23'), +('6', '107', '7', '104418', '93392', '23'), +('6', '107', '7', '54849', '70292', '23'), +('6', '107', '9', '67098', '180085', '23'), +('6', '107', '9', '81764', '106714', '23'), +('6', '107', '9', '56070', '106510', '23'), +('6', '107', '9', '62984', '106309', '23'), +('6', '107', '15', '111350', '178723', '23'), +('6', '107', '15', '111344', '177830', '23'), +('6', '107', '15', '111340', '177167', '23'), +('6', '107', '15', '111346', '176677', '23'), +('6', '107', '20', '111356', '177199', '23'), +('6', '107', '20', '111352', '176554', '23'), +('6', '107', '20', '111351', '173839', '23'), +('6', '107', '20', '111054', '155349', '23'), +('6', '107', '12', '56035', '108457', '23'), +('6', '107', '12', '56074', '107181', '23'), +('6', '107', '12', '104415', '91101', '23'), +('6', '107', '12', '49656', '70142', '23'), +('6', '107', '18', '56041', '114034', '23'), +('6', '107', '18', '62986', '112568', '23'), +('6', '107', '18', '104419', '96455', '23'), +('6', '107', '18', '54851', '71865', '23'), +('6', '107', '19', '81763', '110833', '23'), +('6', '107', '19', '56037', '110458', '23'), +('6', '107', '19', '62990', '110456', '23'), +('6', '107', '19', '56075', '110344', '23'), +('6', '107', '13', '111518', '170667', '23'), +('6', '107', '13', '111517', '168932', '23'), +('6', '107', '13', '111217', '154273', '23'), +('6', '107', '13', '111218', '154223', '23'), +('6', '107', '14', '111537', '177512', '23'), +('6', '107', '14', '111539', '175736', '23'), +('6', '107', '14', '111535', '175330', '23'), +('6', '107', '14', '111237', '155660', '23'), +('6', '107', '11', '133816', '229868', '23'), +('6', '107', '11', '111337', '176638', '23'), +('6', '107', '11', '111335', '176577', '23'), +('6', '107', '11', '111338', '172653', '23'), +('6', '108', '22', '12425', '0', '23'), +('6', '108', '22', '39342', '0', '23'), +('6', '108', '22', '7867', '0', '23'), +('6', '108', '22', '23597', '0', '23'), +('6', '108', '1', '98769', '284247', '23'), +('6', '108', '1', '111306', '176859', '23'), +('6', '108', '1', '111304', '176531', '23'), +('6', '108', '1', '111307', '176300', '23'), +('6', '108', '2', '62988', '110556', '23'), +('6', '108', '2', '62985', '110390', '23'), +('6', '108', '2', '94056', '110020', '23'), +('6', '108', '2', '104417', '93901', '23'), +('6', '108', '3', '111314', '177218', '23'), +('6', '108', '3', '111316', '175506', '23'), +('6', '108', '3', '111315', '174624', '23'), +('6', '108', '3', '111013', '155367', '23'), +('6', '108', '5', '111319', '176563', '23'), +('6', '108', '5', '111321', '176162', '23'), +('6', '108', '5', '111318', '173833', '23'), +('6', '108', '5', '111317', '173568', '23'), +('6', '108', '8', '111332', '177420', '23'), +('6', '108', '8', '111329', '175991', '23'), +('6', '108', '8', '111330', '175243', '23'), +('6', '108', '8', '111331', '172970', '23'), +('6', '108', '6', '111323', '177311', '23'), +('6', '108', '6', '111326', '175927', '23'), +('6', '108', '6', '111325', '175797', '23'), +('6', '108', '6', '111022', '155461', '23'), +('6', '108', '17', '56045', '114624', '23'), +('6', '108', '17', '56084', '114502', '23'), +('6', '108', '17', '104420', '97538', '23'), +('6', '108', '17', '54855', '72955', '23'), +('6', '108', '7', '56080', '110137', '23'), +('6', '108', '7', '56040', '108977', '23'), +('6', '108', '7', '104418', '93399', '23'), +('6', '108', '7', '54849', '70296', '23'), +('6', '108', '9', '67098', '180090', '23'), +('6', '108', '9', '81764', '106725', '23'), +('6', '108', '9', '56070', '106516', '23'), +('6', '108', '9', '62984', '106315', '23'), +('6', '108', '15', '111350', '178731', '23'), +('6', '108', '15', '111344', '177838', '23'), +('6', '108', '15', '111340', '177174', '23'), +('6', '108', '15', '111346', '176681', '23'), +('6', '108', '20', '111356', '177204', '23'), +('6', '108', '20', '111352', '176560', '23'), +('6', '108', '20', '111351', '173846', '23'), +('6', '108', '20', '111054', '155354', '23'), +('6', '108', '12', '56035', '108467', '23'), +('6', '108', '12', '56074', '107187', '23'), +('6', '108', '12', '104415', '91104', '23'), +('6', '108', '12', '49656', '70143', '23'), +('6', '108', '18', '56041', '114040', '23'), +('6', '108', '18', '62986', '112576', '23'), +('6', '108', '18', '104419', '96465', '23'), +('6', '108', '18', '54851', '71872', '23'), +('6', '108', '19', '81763', '110843', '23'), +('6', '108', '19', '56037', '110465', '23'), +('6', '108', '19', '62990', '110460', '23'), +('6', '108', '19', '56075', '110352', '23'), +('6', '108', '13', '111518', '170674', '23'), +('6', '108', '13', '111517', '168938', '23'), +('6', '108', '13', '111217', '154279', '23'), +('6', '108', '13', '111218', '154229', '23'), +('6', '108', '14', '111537', '177518', '23'), +('6', '108', '14', '111539', '175743', '23'), +('6', '108', '14', '111535', '175336', '23'), +('6', '108', '14', '111237', '155667', '23'), +('6', '108', '11', '133816', '229873', '23'), +('6', '108', '11', '111337', '176647', '23'), +('6', '108', '11', '111335', '176585', '23'), +('6', '108', '11', '111338', '172658', '23'), +('6', '109', '22', '12425', '0', '23'), +('6', '109', '22', '39342', '0', '23'), +('6', '109', '22', '7867', '0', '23'), +('6', '109', '22', '23597', '0', '23'), +('6', '109', '1', '98769', '284251', '23'), +('6', '109', '1', '111306', '176868', '23'), +('6', '109', '1', '111304', '176539', '23'), +('6', '109', '1', '111307', '176303', '23'), +('6', '109', '2', '62988', '110560', '23'), +('6', '109', '2', '62985', '110398', '23'), +('6', '109', '2', '94056', '110025', '23'), +('6', '109', '2', '104417', '93904', '23'), +('6', '109', '3', '111314', '177224', '23'), +('6', '109', '3', '111316', '175512', '23'), +('6', '109', '3', '111315', '174630', '23'), +('6', '109', '3', '111013', '155373', '23'), +('6', '109', '5', '111319', '176568', '23'), +('6', '109', '5', '111321', '176170', '23'), +('6', '109', '5', '111318', '173838', '23'), +('6', '109', '5', '111317', '173574', '23'), +('6', '109', '8', '111332', '177427', '23'), +('6', '109', '8', '111329', '175995', '23'), +('6', '109', '8', '111330', '175249', '23'), +('6', '109', '8', '111331', '172977', '23'), +('6', '109', '6', '111323', '177318', '23'), +('6', '109', '6', '111326', '175936', '23'), +('6', '109', '6', '111325', '175802', '23'), +('6', '109', '6', '111022', '155467', '23'), +('6', '109', '17', '56045', '114629', '23'), +('6', '109', '17', '56084', '114511', '23'), +('6', '109', '17', '104420', '97544', '23'), +('6', '109', '17', '54855', '72962', '23'), +('6', '109', '7', '56080', '110144', '23'), +('6', '109', '7', '56040', '108983', '23'), +('6', '109', '7', '104418', '93406', '23'), +('6', '109', '7', '54849', '70300', '23'), +('6', '109', '9', '67098', '180095', '23'), +('6', '109', '9', '81764', '106735', '23'), +('6', '109', '9', '56070', '106522', '23'), +('6', '109', '9', '62984', '106321', '23'), +('6', '109', '15', '111350', '178739', '23'), +('6', '109', '15', '111344', '177846', '23'), +('6', '109', '15', '111340', '177180', '23'), +('6', '109', '15', '111346', '176686', '23'), +('6', '109', '20', '111356', '177209', '23'), +('6', '109', '20', '111352', '176567', '23'), +('6', '109', '20', '111351', '173853', '23'), +('6', '109', '20', '111054', '155359', '23'), +('6', '109', '12', '56035', '108476', '23'), +('6', '109', '12', '56074', '107193', '23'), +('6', '109', '12', '104415', '91107', '23'), +('6', '109', '12', '49656', '70144', '23'), +('6', '109', '18', '56041', '114046', '23'), +('6', '109', '18', '62986', '112583', '23'), +('6', '109', '18', '104419', '96474', '23'), +('6', '109', '18', '54851', '71880', '23'), +('6', '109', '19', '81763', '110853', '23'), +('6', '109', '19', '56037', '110472', '23'), +('6', '109', '19', '62990', '110464', '23'), +('6', '109', '19', '56075', '110360', '23'), +('6', '109', '13', '111518', '170680', '23'), +('6', '109', '13', '111517', '168944', '23'), +('6', '109', '13', '111217', '154285', '23'), +('6', '109', '13', '111218', '154236', '23'), +('6', '109', '14', '111537', '177525', '23'), +('6', '109', '14', '111539', '175751', '23'), +('6', '109', '14', '111535', '175342', '23'), +('6', '109', '14', '111237', '155673', '23'), +('6', '109', '11', '133816', '229877', '23'), +('6', '109', '11', '111337', '176656', '23'), +('6', '109', '11', '111335', '176592', '23'), +('6', '109', '11', '111338', '172663', '23'), +('6', '110', '22', '39342', '0', '25'), +('6', '110', '22', '7867', '0', '25'), +('6', '110', '22', '23597', '0', '25'), +('6', '110', '22', '53550', '0', '25'), +('6', '110', '1', '98769', '284255', '25'), +('6', '110', '1', '111306', '176876', '25'), +('6', '110', '1', '111304', '176546', '25'), +('6', '110', '1', '111307', '176307', '25'), +('6', '110', '2', '62988', '110564', '25'), +('6', '110', '2', '62985', '110407', '25'), +('6', '110', '2', '94056', '110030', '25'), +('6', '110', '2', '104417', '93907', '25'), +('6', '110', '3', '111314', '177230', '25'), +('6', '110', '3', '111316', '175518', '25'), +('6', '110', '3', '111315', '174637', '25'), +('6', '110', '3', '111013', '155379', '25'), +('6', '110', '5', '111319', '176574', '25'), +('6', '110', '5', '111321', '176177', '25'), +('6', '110', '5', '111318', '173843', '25'), +('6', '110', '5', '111317', '173580', '25'), +('6', '110', '8', '111332', '177434', '25'), +('6', '110', '8', '111329', '175999', '25'), +('6', '110', '8', '111330', '175255', '25'), +('6', '110', '8', '111331', '172985', '25'), +('6', '110', '6', '111323', '177324', '25'), +('6', '110', '6', '111326', '175945', '25'), +('6', '110', '6', '111325', '175807', '25'), +('6', '110', '6', '111022', '155474', '25'), +('6', '110', '17', '56045', '114633', '25'), +('6', '110', '17', '56084', '114520', '25'), +('6', '110', '17', '104420', '97550', '25'), +('6', '110', '17', '54855', '72969', '25'), +('6', '110', '7', '56080', '110152', '25'), +('6', '110', '7', '56040', '108989', '25'), +('6', '110', '7', '104418', '93414', '25'), +('6', '110', '7', '54849', '70304', '25'), +('6', '110', '9', '67098', '180101', '25'), +('6', '110', '9', '81764', '106745', '25'), +('6', '110', '9', '56070', '106528', '25'), +('6', '110', '9', '62984', '106327', '25'), +('6', '110', '15', '111350', '178747', '25'), +('6', '110', '15', '111344', '177854', '25'), +('6', '110', '15', '111340', '177186', '25'), +('6', '110', '15', '111346', '176691', '25'), +('6', '110', '20', '111356', '177214', '25'), +('6', '110', '20', '111352', '176573', '25'), +('6', '110', '20', '111351', '173860', '25'), +('6', '110', '20', '111054', '155363', '25'), +('6', '110', '12', '56035', '108486', '25'), +('6', '110', '12', '56074', '107199', '25'), +('6', '110', '12', '104415', '91111', '25'), +('6', '110', '12', '49656', '70145', '25'), +('6', '110', '18', '56041', '114052', '25'), +('6', '110', '18', '62986', '112591', '25'), +('6', '110', '18', '104419', '96484', '25'), +('6', '110', '18', '54851', '71887', '25'), +('6', '110', '19', '81763', '110863', '25'), +('6', '110', '19', '56037', '110479', '25'), +('6', '110', '19', '62990', '110469', '25'), +('6', '110', '19', '56075', '110368', '25'), +('6', '110', '13', '111518', '170687', '25'), +('6', '110', '13', '111517', '168951', '25'), +('6', '110', '13', '111217', '154292', '25'), +('6', '110', '13', '111218', '154242', '25'), +('6', '110', '14', '111537', '177531', '25'), +('6', '110', '14', '111539', '175758', '25'), +('6', '110', '14', '111535', '175348', '25'), +('6', '110', '14', '111237', '155680', '25'), +('6', '110', '11', '85213', '257050', '25'), +('6', '110', '11', '133816', '229882', '25'), +('6', '110', '11', '111337', '176665', '25'), +('6', '110', '11', '111335', '176600', '25'), +('6', '110', '22', '39342', '0', '24'), +('6', '110', '22', '7867', '0', '24'), +('6', '110', '22', '23597', '0', '24'), +('6', '110', '22', '53550', '0', '24'), +('6', '110', '1', '98769', '284255', '24'), +('6', '110', '1', '111306', '176876', '24'), +('6', '110', '1', '111304', '176546', '24'), +('6', '110', '1', '111307', '176307', '24'), +('6', '110', '2', '62988', '110564', '24'), +('6', '110', '2', '62985', '110407', '24'), +('6', '110', '2', '94056', '110030', '24'), +('6', '110', '2', '104417', '93907', '24'), +('6', '110', '3', '111314', '177230', '24'), +('6', '110', '3', '111316', '175518', '24'), +('6', '110', '3', '111315', '174637', '24'), +('6', '110', '3', '111013', '155379', '24'), +('6', '110', '5', '111319', '176574', '24'), +('6', '110', '5', '111321', '176177', '24'), +('6', '110', '5', '111318', '173843', '24'), +('6', '110', '5', '111317', '173580', '24'), +('6', '110', '8', '111332', '177434', '24'), +('6', '110', '8', '111329', '175999', '24'), +('6', '110', '8', '111330', '175255', '24'), +('6', '110', '8', '111331', '172985', '24'), +('6', '110', '6', '111323', '177324', '24'), +('6', '110', '6', '111326', '175945', '24'), +('6', '110', '6', '111325', '175807', '24'), +('6', '110', '6', '111022', '155474', '24'), +('6', '110', '17', '56045', '114633', '24'), +('6', '110', '17', '56084', '114520', '24'), +('6', '110', '17', '104420', '97550', '24'), +('6', '110', '17', '54855', '72969', '24'), +('6', '110', '7', '56080', '110152', '24'), +('6', '110', '7', '56040', '108989', '24'), +('6', '110', '7', '104418', '93414', '24'), +('6', '110', '7', '54849', '70304', '24'), +('6', '110', '9', '67098', '180101', '24'), +('6', '110', '9', '81764', '106745', '24'), +('6', '110', '9', '56070', '106528', '24'), +('6', '110', '9', '62984', '106327', '24'), +('6', '110', '15', '111350', '178747', '24'), +('6', '110', '15', '111344', '177854', '24'), +('6', '110', '15', '111340', '177186', '24'), +('6', '110', '15', '111346', '176691', '24'), +('6', '110', '20', '111356', '177214', '24'), +('6', '110', '20', '111352', '176573', '24'), +('6', '110', '20', '111351', '173860', '24'), +('6', '110', '20', '111054', '155363', '24'), +('6', '110', '12', '56035', '108486', '24'), +('6', '110', '12', '56074', '107199', '24'), +('6', '110', '12', '104415', '91111', '24'), +('6', '110', '12', '49656', '70145', '24'), +('6', '110', '18', '56041', '114052', '24'), +('6', '110', '18', '62986', '112591', '24'), +('6', '110', '18', '104419', '96484', '24'), +('6', '110', '18', '54851', '71887', '24'), +('6', '110', '19', '81763', '110863', '24'), +('6', '110', '19', '56037', '110479', '24'), +('6', '110', '19', '62990', '110469', '24'), +('6', '110', '19', '56075', '110368', '24'), +('6', '110', '13', '111518', '170687', '24'), +('6', '110', '13', '111517', '168951', '24'), +('6', '110', '13', '111217', '154292', '24'), +('6', '110', '13', '111218', '154242', '24'), +('6', '110', '14', '111537', '177531', '24'), +('6', '110', '14', '111539', '175758', '24'), +('6', '110', '14', '111535', '175348', '24'), +('6', '110', '14', '111237', '155680', '24'), +('6', '110', '11', '85213', '257050', '24'), +('6', '110', '11', '133816', '229882', '24'), +('6', '110', '11', '111337', '176665', '24'), +('6', '110', '11', '111335', '176600', '24'), +('6', '111', '22', '39342', '0', '25'), +('6', '111', '22', '7867', '0', '25'), +('6', '111', '22', '23597', '0', '25'), +('6', '111', '22', '53550', '0', '25'), +('6', '111', '1', '98769', '284259', '25'), +('6', '111', '1', '111306', '176884', '25'), +('6', '111', '1', '111304', '176554', '25'), +('6', '111', '1', '111307', '176311', '25'), +('6', '111', '2', '62988', '110568', '25'), +('6', '111', '2', '62985', '110415', '25'), +('6', '111', '2', '94056', '110036', '25'), +('6', '111', '2', '104417', '93910', '25'), +('6', '111', '3', '111314', '177236', '25'), +('6', '111', '3', '111316', '175524', '25'), +('6', '111', '3', '111315', '174643', '25'), +('6', '111', '3', '111013', '155386', '25'), +('6', '111', '5', '111319', '176579', '25'), +('6', '111', '5', '111321', '176184', '25'), +('6', '111', '5', '111318', '173848', '25'), +('6', '111', '5', '111317', '173586', '25'), +('6', '111', '8', '111332', '177441', '25'), +('6', '111', '8', '111329', '176003', '25'), +('6', '111', '8', '111330', '175261', '25'), +('6', '111', '8', '111331', '172992', '25'), +('6', '111', '6', '111323', '177331', '25'), +('6', '111', '6', '111326', '175954', '25'), +('6', '111', '6', '111325', '175813', '25'), +('6', '111', '6', '111022', '155481', '25'), +('6', '111', '17', '56045', '114637', '25'), +('6', '111', '17', '56084', '114529', '25'), +('6', '111', '17', '104420', '97557', '25'), +('6', '111', '17', '54855', '72976', '25'), +('6', '111', '7', '56080', '110159', '25'), +('6', '111', '7', '56040', '108995', '25'), +('6', '111', '7', '104418', '93421', '25'), +('6', '111', '7', '54849', '70308', '25'), +('6', '111', '9', '67098', '180106', '25'), +('6', '111', '9', '81764', '106756', '25'), +('6', '111', '9', '56070', '106534', '25'), +('6', '111', '9', '62984', '106334', '25'), +('6', '111', '15', '111350', '178755', '25'), +('6', '111', '15', '111344', '177862', '25'), +('6', '111', '15', '111340', '177193', '25'), +('6', '111', '15', '111346', '176696', '25'), +('6', '111', '20', '111356', '177219', '25'), +('6', '111', '20', '111352', '176580', '25'), +('6', '111', '20', '111351', '173867', '25'), +('6', '111', '20', '111054', '155368', '25'), +('6', '111', '12', '56035', '108495', '25'), +('6', '111', '12', '56074', '107205', '25'), +('6', '111', '12', '104415', '91114', '25'), +('6', '111', '12', '49656', '70145', '25'), +('6', '111', '18', '56041', '114058', '25'), +('6', '111', '18', '62986', '112598', '25'), +('6', '111', '18', '104419', '96494', '25'), +('6', '111', '18', '54851', '71895', '25'), +('6', '111', '19', '81763', '110873', '25'), +('6', '111', '19', '56037', '110486', '25'), +('6', '111', '19', '62990', '110473', '25'), +('6', '111', '19', '56075', '110376', '25'), +('6', '111', '13', '111518', '170694', '25'), +('6', '111', '13', '111517', '168957', '25'), +('6', '111', '13', '111217', '154298', '25'), +('6', '111', '13', '111218', '154249', '25'), +('6', '111', '14', '111537', '177538', '25'), +('6', '111', '14', '111539', '175766', '25'), +('6', '111', '14', '111535', '175354', '25'), +('6', '111', '14', '111237', '155686', '25'), +('6', '111', '11', '85213', '257054', '25'), +('6', '111', '11', '133816', '229887', '25'), +('6', '111', '11', '111337', '176675', '25'), +('6', '111', '11', '111335', '176608', '25'), +('6', '112', '22', '39342', '0', '25'), +('6', '112', '22', '7867', '0', '25'), +('6', '112', '22', '23597', '0', '25'), +('6', '112', '22', '53550', '0', '25'), +('6', '112', '1', '98769', '284263', '25'), +('6', '112', '1', '111306', '176892', '25'), +('6', '112', '1', '111304', '176561', '25'), +('6', '112', '1', '111307', '176314', '25'), +('6', '112', '2', '62988', '110572', '25'), +('6', '112', '2', '62985', '110423', '25'), +('6', '112', '2', '94056', '110041', '25'), +('6', '112', '2', '104417', '93913', '25'), +('6', '112', '3', '111314', '177242', '25'), +('6', '112', '3', '111316', '175531', '25'), +('6', '112', '3', '111315', '174649', '25'), +('6', '112', '3', '111013', '155392', '25'), +('6', '112', '5', '111319', '176584', '25'), +('6', '112', '5', '111321', '176191', '25'), +('6', '112', '5', '111318', '173853', '25'), +('6', '112', '5', '111317', '173592', '25'), +('6', '112', '8', '111332', '177448', '25'), +('6', '112', '8', '111329', '176007', '25'), +('6', '112', '8', '111330', '175267', '25'), +('6', '112', '8', '111331', '173000', '25'), +('6', '112', '6', '111323', '177338', '25'), +('6', '112', '6', '111326', '175963', '25'), +('6', '112', '6', '111325', '175818', '25'), +('6', '112', '6', '111022', '155487', '25'), +('6', '112', '17', '56045', '114641', '25'), +('6', '112', '17', '56084', '114538', '25'), +('6', '112', '17', '104420', '97563', '25'), +('6', '112', '17', '54855', '72983', '25'), +('6', '112', '7', '56080', '110167', '25'), +('6', '112', '7', '56040', '109002', '25'), +('6', '112', '7', '104418', '93428', '25'), +('6', '112', '7', '54849', '70311', '25'), +('6', '112', '9', '67098', '180111', '25'), +('6', '112', '9', '81764', '106766', '25'), +('6', '112', '9', '56070', '106540', '25'), +('6', '112', '9', '62984', '106340', '25'), +('6', '112', '15', '111350', '178763', '25'), +('6', '112', '15', '111344', '177870', '25'), +('6', '112', '15', '111340', '177199', '25'), +('6', '112', '15', '111346', '176700', '25'), +('6', '112', '20', '111356', '177224', '25'), +('6', '112', '20', '111352', '176586', '25'), +('6', '112', '20', '111351', '173874', '25'), +('6', '112', '20', '111054', '155373', '25'), +('6', '112', '12', '56035', '108505', '25'), +('6', '112', '12', '56074', '107212', '25'), +('6', '112', '12', '104415', '91117', '25'), +('6', '112', '12', '49656', '70146', '25'), +('6', '112', '18', '56041', '114064', '25'), +('6', '112', '18', '62986', '112606', '25'), +('6', '112', '18', '104419', '96504', '25'), +('6', '112', '18', '54851', '71903', '25'), +('6', '112', '19', '81763', '110883', '25'), +('6', '112', '19', '56037', '110493', '25'), +('6', '112', '19', '62990', '110477', '25'), +('6', '112', '19', '56075', '110384', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('6', '112', '13', '111518', '170700', '25'), +('6', '112', '13', '111517', '168963', '25'), +('6', '112', '13', '111217', '154304', '25'), +('6', '112', '13', '111218', '154255', '25'), +('6', '112', '14', '111537', '177544', '25'), +('6', '112', '14', '111539', '175773', '25'), +('6', '112', '14', '111535', '175360', '25'), +('6', '112', '14', '111237', '155693', '25'), +('6', '112', '11', '85213', '257058', '25'), +('6', '112', '11', '133816', '229892', '25'), +('6', '112', '11', '111337', '176684', '25'), +('6', '112', '11', '111335', '176616', '25'), +('6', '113', '22', '39342', '0', '25'), +('6', '113', '22', '7867', '0', '25'), +('6', '113', '22', '23597', '0', '25'), +('6', '113', '22', '53550', '0', '25'), +('6', '113', '1', '98769', '284267', '25'), +('6', '113', '1', '111306', '176900', '25'), +('6', '113', '1', '111304', '176569', '25'), +('6', '113', '1', '111307', '176318', '25'), +('6', '113', '2', '62988', '110576', '25'), +('6', '113', '2', '62985', '110431', '25'), +('6', '113', '2', '94056', '110046', '25'), +('6', '113', '2', '104417', '93916', '25'), +('6', '113', '3', '111314', '177249', '25'), +('6', '113', '3', '111316', '175537', '25'), +('6', '113', '3', '111315', '174655', '25'), +('6', '113', '3', '111013', '155398', '25'), +('6', '113', '5', '111319', '176590', '25'), +('6', '113', '5', '111321', '176198', '25'), +('6', '113', '5', '111318', '173859', '25'), +('6', '113', '5', '111317', '173597', '25'), +('6', '113', '8', '111332', '177455', '25'), +('6', '113', '8', '111329', '176011', '25'), +('6', '113', '8', '111330', '175274', '25'), +('6', '113', '8', '111331', '173008', '25'), +('6', '113', '6', '111323', '177344', '25'), +('6', '113', '6', '111326', '175972', '25'), +('6', '113', '6', '111325', '175823', '25'), +('6', '113', '6', '111022', '155494', '25'), +('6', '113', '17', '56045', '114645', '25'), +('6', '113', '17', '56084', '114547', '25'), +('6', '113', '17', '104420', '97569', '25'), +('6', '113', '17', '54855', '72990', '25'), +('6', '113', '7', '56080', '110174', '25'), +('6', '113', '7', '56040', '109008', '25'), +('6', '113', '7', '104418', '93435', '25'), +('6', '113', '7', '54849', '70315', '25'), +('6', '113', '9', '67098', '180117', '25'), +('6', '113', '9', '81764', '106776', '25'), +('6', '113', '9', '56070', '106546', '25'), +('6', '113', '9', '62984', '106346', '25'), +('6', '113', '15', '111350', '178771', '25'), +('6', '113', '15', '111344', '177879', '25'), +('6', '113', '15', '111340', '177205', '25'), +('6', '113', '15', '111346', '176705', '25'), +('6', '113', '20', '111356', '177229', '25'), +('6', '113', '20', '111352', '176593', '25'), +('6', '113', '20', '111351', '173880', '25'), +('6', '113', '20', '111054', '155378', '25'), +('6', '113', '12', '56035', '108514', '25'), +('6', '113', '12', '56074', '107218', '25'), +('6', '113', '12', '104415', '91120', '25'), +('6', '113', '12', '49656', '70147', '25'), +('6', '113', '18', '56041', '114070', '25'), +('6', '113', '18', '62986', '112613', '25'), +('6', '113', '18', '104419', '96513', '25'), +('6', '113', '18', '54851', '71910', '25'), +('6', '113', '19', '81763', '110893', '25'), +('6', '113', '19', '56037', '110501', '25'), +('6', '113', '19', '62990', '110482', '25'), +('6', '113', '19', '56075', '110392', '25'), +('6', '113', '13', '111518', '170707', '25'), +('6', '113', '13', '111517', '168969', '25'), +('6', '113', '13', '111217', '154310', '25'), +('6', '113', '13', '111218', '154261', '25'), +('6', '113', '14', '111537', '177551', '25'), +('6', '113', '14', '111539', '175781', '25'), +('6', '113', '14', '111535', '175366', '25'), +('6', '113', '14', '111237', '155699', '25'), +('6', '113', '11', '85213', '257062', '25'), +('6', '113', '11', '133816', '229897', '25'), +('6', '113', '11', '111337', '176693', '25'), +('6', '113', '11', '111335', '176623', '25'), +('6', '114', '22', '39342', '0', '25'), +('6', '114', '22', '7867', '0', '25'), +('6', '114', '22', '23597', '0', '25'), +('6', '114', '22', '53550', '0', '25'), +('6', '114', '1', '98769', '284272', '25'), +('6', '114', '1', '111306', '176908', '25'), +('6', '114', '1', '111304', '176576', '25'), +('6', '114', '1', '111307', '176322', '25'), +('6', '114', '2', '62988', '110580', '25'), +('6', '114', '2', '62985', '110440', '25'), +('6', '114', '2', '94056', '110052', '25'), +('6', '114', '2', '104417', '93919', '25'), +('6', '114', '3', '111314', '177255', '25'), +('6', '114', '3', '111316', '175543', '25'), +('6', '114', '3', '111315', '174661', '25'), +('6', '114', '3', '111013', '155404', '25'), +('6', '114', '5', '111319', '176595', '25'), +('6', '114', '5', '111321', '176205', '25'), +('6', '114', '5', '111318', '173864', '25'), +('6', '114', '5', '111317', '173603', '25'), +('6', '114', '8', '111332', '177462', '25'), +('6', '114', '8', '111329', '176015', '25'), +('6', '114', '8', '111330', '175280', '25'), +('6', '114', '8', '111331', '173015', '25'), +('6', '114', '6', '111323', '177351', '25'), +('6', '114', '6', '111326', '175981', '25'), +('6', '114', '6', '111325', '175829', '25'), +('6', '114', '6', '111022', '155500', '25'), +('6', '114', '17', '56045', '114649', '25'), +('6', '114', '17', '56084', '114556', '25'), +('6', '114', '17', '104420', '97575', '25'), +('6', '114', '17', '54855', '72997', '25'), +('6', '114', '7', '56080', '110182', '25'), +('6', '114', '7', '56040', '109014', '25'), +('6', '114', '7', '104418', '93443', '25'), +('6', '114', '7', '54849', '70319', '25'), +('6', '114', '9', '67098', '180122', '25'), +('6', '114', '9', '81764', '106786', '25'), +('6', '114', '9', '56070', '106552', '25'), +('6', '114', '9', '62984', '106352', '25'), +('6', '114', '15', '111350', '178779', '25'), +('6', '114', '15', '111344', '177887', '25'), +('6', '114', '15', '111340', '177212', '25'), +('6', '114', '15', '111346', '176710', '25'), +('6', '114', '20', '111356', '177233', '25'), +('6', '114', '20', '111352', '176600', '25'), +('6', '114', '20', '111351', '173887', '25'), +('6', '114', '20', '111054', '155383', '25'), +('6', '114', '12', '56035', '108524', '25'), +('6', '114', '12', '56074', '107224', '25'), +('6', '114', '12', '104415', '91123', '25'), +('6', '114', '12', '49656', '70148', '25'), +('6', '114', '18', '56041', '114076', '25'), +('6', '114', '18', '62986', '112620', '25'), +('6', '114', '18', '104419', '96523', '25'), +('6', '114', '18', '54851', '71918', '25'), +('6', '114', '19', '81763', '110903', '25'), +('6', '114', '19', '56037', '110508', '25'), +('6', '114', '19', '62990', '110486', '25'), +('6', '114', '19', '56075', '110400', '25'), +('6', '114', '13', '111518', '170713', '25'), +('6', '114', '13', '111517', '168975', '25'), +('6', '114', '13', '111217', '154316', '25'), +('6', '114', '13', '111218', '154267', '25'), +('6', '114', '14', '111537', '177558', '25'), +('6', '114', '14', '111539', '175788', '25'), +('6', '114', '14', '111535', '175372', '25'), +('6', '114', '14', '111237', '155706', '25'), +('6', '114', '11', '85213', '257066', '25'), +('6', '114', '11', '133816', '229902', '25'), +('6', '114', '11', '111337', '176702', '25'), +('6', '114', '11', '111335', '176631', '25'), +('6', '115', '22', '39342', '0', '26'), +('6', '115', '22', '7867', '0', '26'), +('6', '115', '22', '23597', '0', '26'), +('6', '115', '22', '53550', '0', '26'), +('6', '115', '1', '98769', '284276', '26'), +('6', '115', '1', '111306', '176916', '26'), +('6', '115', '1', '111304', '176584', '26'), +('6', '115', '1', '111307', '176325', '26'), +('6', '115', '2', '62988', '110584', '26'), +('6', '115', '2', '62985', '110448', '26'), +('6', '115', '2', '94056', '110057', '26'), +('6', '115', '2', '104417', '93923', '26'), +('6', '115', '3', '111314', '177261', '26'), +('6', '115', '3', '111316', '175549', '26'), +('6', '115', '3', '111315', '174668', '26'), +('6', '115', '3', '111013', '155410', '26'), +('6', '115', '5', '111319', '176601', '26'), +('6', '115', '5', '111321', '176212', '26'), +('6', '115', '5', '111318', '173869', '26'), +('6', '115', '5', '111317', '173609', '26'), +('6', '115', '8', '111332', '177469', '26'), +('6', '115', '8', '111329', '176019', '26'), +('6', '115', '8', '111330', '175286', '26'), +('6', '115', '8', '111331', '173023', '26'), +('6', '115', '6', '111323', '177357', '26'), +('6', '115', '6', '111326', '175990', '26'), +('6', '115', '6', '111325', '175834', '26'), +('6', '115', '6', '111022', '155507', '26'), +('6', '115', '17', '56045', '114653', '26'), +('6', '115', '17', '56084', '114565', '26'), +('6', '115', '17', '104420', '97581', '26'), +('6', '115', '17', '54855', '73003', '26'), +('6', '115', '7', '56080', '110189', '26'), +('6', '115', '7', '56040', '109020', '26'), +('6', '115', '7', '104418', '93450', '26'), +('6', '115', '7', '54849', '70323', '26'), +('6', '115', '9', '67098', '180127', '26'), +('6', '115', '9', '81764', '106797', '26'), +('6', '115', '9', '56070', '106558', '26'), +('6', '115', '9', '62984', '106358', '26'), +('6', '115', '15', '111350', '178787', '26'), +('6', '115', '15', '111344', '177895', '26'), +('6', '115', '15', '111340', '177218', '26'), +('6', '115', '15', '111346', '176714', '26'), +('6', '115', '20', '111356', '177238', '26'), +('6', '115', '20', '111352', '176606', '26'), +('6', '115', '20', '111351', '173894', '26'), +('6', '115', '20', '111054', '155388', '26'), +('6', '115', '12', '56035', '108533', '26'), +('6', '115', '12', '56074', '107230', '26'), +('6', '115', '12', '104415', '91127', '26'), +('6', '115', '12', '49656', '70149', '26'), +('6', '115', '18', '56041', '114082', '26'), +('6', '115', '18', '62986', '112628', '26'), +('6', '115', '18', '104419', '96533', '26'), +('6', '115', '18', '54851', '71925', '26'), +('6', '115', '19', '81763', '110913', '26'), +('6', '115', '19', '56037', '110515', '26'), +('6', '115', '19', '62990', '110490', '26'), +('6', '115', '19', '56075', '110408', '26'), +('6', '115', '13', '111518', '170719', '26'), +('6', '115', '13', '111517', '168982', '26'), +('6', '115', '13', '111217', '154322', '26'), +('6', '115', '13', '111218', '154274', '26'), +('6', '115', '14', '111537', '177564', '26'), +('6', '115', '14', '111539', '175796', '26'), +('6', '115', '14', '111535', '175378', '26'), +('6', '115', '14', '111237', '155713', '26'), +('6', '115', '11', '85213', '257071', '26'), +('6', '115', '11', '133816', '229907', '26'), +('6', '115', '11', '111337', '176711', '26'), +('6', '115', '11', '111335', '176639', '26'), +('7', '1', '22', '9246', '0', '0'), +('7', '1', '22', '10323', '0', '0'), +('7', '1', '22', '21509', '0', '0'), +('7', '1', '22', '8332', '0', '0'), +('7', '1', '1', '14701', '4052', '0'), +('7', '1', '1', '14702', '2850', '0'), +('7', '1', '1', '10165', '1638', '0'), +('7', '1', '1', '30361', '1140', '0'), +('7', '1', '2', '10142', '3012', '0'), +('7', '1', '2', '4504', '2158', '0'), +('7', '1', '2', '1405', '1810', '0'), +('7', '1', '2', '2191', '1592', '0'), +('7', '1', '3', '10144', '1206', '0'), +('7', '1', '3', '2403', '1146', '0'), +('7', '1', '3', '14705', '990', '0'), +('7', '1', '3', '14706', '990', '0'), +('7', '1', '5', '14703', '6050', '0'), +('7', '1', '5', '14700', '3753', '0'), +('7', '1', '5', '10055', '3505', '0'), +('7', '1', '5', '2583', '2444', '0'), +('7', '1', '8', '11621', '14377', '0'), +('7', '1', '8', '11562', '9310', '0'), +('7', '1', '8', '27714', '7607', '0'), +('7', '1', '8', '1546', '6920', '0'), +('7', '1', '6', '1557', '6760', '0'), +('7', '1', '6', '1283', '2986', '0'), +('7', '1', '6', '11561', '2022', '0'), +('7', '1', '6', '25062', '768', '0'), +('7', '1', '17', '12256', '7630', '0'), +('7', '1', '17', '1201', '2467', '0'), +('7', '1', '17', '2348', '1785', '0'), +('7', '1', '17', '2341', '1646', '0'), +('7', '1', '7', '2458', '2406', '0'), +('7', '1', '7', '1361', '1764', '0'), +('7', '1', '7', '2342', '1615', '0'), +('7', '1', '7', '1202', '1374', '0'), +('7', '1', '9', '27714', '7607', '0'), +('7', '1', '9', '14650', '1952', '0'), +('7', '1', '9', '10360', '1351', '0'), +('7', '1', '9', '1203', '1143', '0'), +('7', '1', '15', '10366', '8163', '0'), +('7', '1', '15', '10151', '7200', '0'), +('7', '1', '15', '14679', '6255', '0'), +('7', '1', '15', '14678', '5104', '0'), +('7', '1', '20', '11698', '9997', '0'), +('7', '1', '20', '11601', '7505', '0'), +('7', '1', '20', '2917', '5211', '0'), +('7', '1', '20', '1365', '4200', '0'), +('7', '1', '12', '2923', '3654', '0'), +('7', '1', '12', '11624', '2315', '0'), +('7', '1', '12', '1204', '1396', '0'), +('7', '1', '12', '29682', '1143', '0'), +('7', '1', '18', '2461', '2557', '0'), +('7', '1', '18', '1205', '1056', '0'), +('7', '1', '18', '25725', '978', '0'), +('7', '1', '18', '2343', '785', '0'), +('7', '1', '19', '1280', '3540', '0'), +('7', '1', '19', '68239', '1360', '0'), +('7', '1', '19', '1206', '1328', '0'), +('7', '1', '19', '25726', '791', '0'), +('7', '1', '13', '27715', '25245', '0'), +('7', '1', '13', '6502', '17425', '0'), +('7', '1', '13', '71308', '7822', '0'), +('7', '1', '13', '6691', '7373', '0'), +('7', '1', '14', '27715', '25245', '0'), +('7', '1', '14', '6502', '17425', '0'), +('7', '1', '14', '11644', '11154', '0'), +('7', '1', '14', '71308', '7822', '0'), +('7', '1', '11', '14762', '854', '0'), +('7', '1', '11', '13748', '489', '0'), +('7', '1', '11', '9246', '453', '0'), +('7', '1', '11', '20677', '69', '0'), +('7', '2', '22', '9246', '0', '0'), +('7', '2', '22', '10323', '0', '0'), +('7', '2', '22', '21509', '0', '0'), +('7', '2', '22', '8332', '0', '0'), +('7', '2', '1', '14701', '4052', '0'), +('7', '2', '1', '14702', '2850', '0'), +('7', '2', '1', '10165', '1638', '0'), +('7', '2', '1', '30361', '1140', '0'), +('7', '2', '2', '10142', '3012', '0'), +('7', '2', '2', '4504', '2158', '0'), +('7', '2', '2', '1405', '1810', '0'), +('7', '2', '2', '2191', '1592', '0'), +('7', '2', '3', '10144', '1206', '0'), +('7', '2', '3', '2403', '1146', '0'), +('7', '2', '3', '14705', '990', '0'), +('7', '2', '3', '14706', '990', '0'), +('7', '2', '5', '14703', '6050', '0'), +('7', '2', '5', '14700', '3753', '0'), +('7', '2', '5', '10055', '3505', '0'), +('7', '2', '5', '2583', '2444', '0'), +('7', '2', '8', '11621', '14377', '0'), +('7', '2', '8', '11562', '9310', '0'), +('7', '2', '8', '27714', '7633', '0'), +('7', '2', '8', '1546', '6920', '0'), +('7', '2', '6', '1557', '6760', '0'), +('7', '2', '6', '1283', '2986', '0'), +('7', '2', '6', '11561', '2047', '0'), +('7', '2', '6', '25062', '768', '0'), +('7', '2', '17', '12256', '7649', '0'), +('7', '2', '17', '1201', '2467', '0'), +('7', '2', '17', '2348', '1803', '0'), +('7', '2', '17', '2341', '1646', '0'), +('7', '2', '7', '2458', '2406', '0'), +('7', '2', '7', '1361', '1764', '0'), +('7', '2', '7', '2342', '1626', '0'), +('7', '2', '7', '1202', '1407', '0'), +('7', '2', '9', '27714', '7633', '0'), +('7', '2', '9', '14650', '1952', '0'), +('7', '2', '9', '10360', '1351', '0'), +('7', '2', '9', '1203', '1161', '0'), +('7', '2', '15', '10366', '8163', '0'), +('7', '2', '15', '10151', '7200', '0'), +('7', '2', '15', '14679', '6255', '0'), +('7', '2', '15', '14678', '5104', '0'), +('7', '2', '20', '11698', '9997', '0'), +('7', '2', '20', '11601', '7541', '0'), +('7', '2', '20', '2917', '5211', '0'), +('7', '2', '20', '1365', '4200', '0'), +('7', '2', '12', '2923', '3654', '0'), +('7', '2', '12', '11624', '2340', '0'), +('7', '2', '12', '1204', '1396', '0'), +('7', '2', '12', '29682', '1143', '0'), +('7', '2', '18', '2461', '2557', '0'), +('7', '2', '18', '1205', '1056', '0'), +('7', '2', '18', '25725', '978', '0'), +('7', '2', '18', '2343', '785', '0'), +('7', '2', '19', '1280', '3540', '0'), +('7', '2', '19', '1206', '1361', '0'), +('7', '2', '19', '68239', '1360', '0'), +('7', '2', '19', '25726', '791', '0'), +('7', '2', '13', '27715', '25245', '0'), +('7', '2', '13', '6502', '17425', '0'), +('7', '2', '13', '71308', '7822', '0'), +('7', '2', '13', '6691', '7373', '0'), +('7', '2', '14', '27715', '25245', '0'), +('7', '2', '14', '6502', '17425', '0'), +('7', '2', '14', '11644', '11154', '0'), +('7', '2', '14', '71308', '7822', '0'), +('7', '2', '11', '14762', '854', '0'), +('7', '2', '11', '13748', '489', '0'), +('7', '2', '11', '9246', '453', '0'), +('7', '2', '11', '20677', '69', '0'), +('7', '3', '22', '9246', '0', '0'), +('7', '3', '22', '10323', '0', '0'), +('7', '3', '22', '21509', '0', '0'), +('7', '3', '22', '8332', '0', '0'), +('7', '3', '1', '14701', '4052', '0'), +('7', '3', '1', '14702', '2850', '0'), +('7', '3', '1', '10165', '1638', '0'), +('7', '3', '1', '30361', '1140', '0'), +('7', '3', '2', '10142', '3012', '0'), +('7', '3', '2', '4504', '2158', '0'), +('7', '3', '2', '1405', '1810', '0'), +('7', '3', '2', '2191', '1592', '0'), +('7', '3', '3', '10144', '1206', '0'), +('7', '3', '3', '2403', '1146', '0'), +('7', '3', '3', '14705', '990', '0'), +('7', '3', '3', '14706', '990', '0'), +('7', '3', '5', '14703', '6050', '0'), +('7', '3', '5', '14700', '3753', '0'), +('7', '3', '5', '10055', '3505', '0'), +('7', '3', '5', '2583', '2444', '0'), +('7', '3', '8', '11621', '14377', '0'), +('7', '3', '8', '11562', '9310', '0'), +('7', '3', '8', '27714', '7658', '0'), +('7', '3', '8', '1546', '6920', '0'), +('7', '3', '6', '1557', '6760', '0'), +('7', '3', '6', '1283', '2986', '0'), +('7', '3', '6', '11561', '2072', '0'), +('7', '3', '6', '25062', '768', '0'), +('7', '3', '17', '12256', '7667', '0'), +('7', '3', '17', '1201', '2467', '0'), +('7', '3', '17', '2348', '1821', '0'), +('7', '3', '17', '2341', '1646', '0'), +('7', '3', '7', '2458', '2406', '0'), +('7', '3', '7', '1361', '1764', '0'), +('7', '3', '7', '2342', '1637', '0'), +('7', '3', '7', '1202', '1439', '0'), +('7', '3', '9', '27714', '7658', '0'), +('7', '3', '9', '14650', '1952', '0'), +('7', '3', '9', '10360', '1351', '0'), +('7', '3', '9', '1203', '1179', '0'), +('7', '3', '15', '10366', '8163', '0'), +('7', '3', '15', '10151', '7200', '0'), +('7', '3', '15', '14679', '6255', '0'), +('7', '3', '15', '14678', '5104', '0'), +('7', '3', '20', '11698', '9997', '0'), +('7', '3', '20', '11601', '7577', '0'), +('7', '3', '20', '2917', '5211', '0'), +('7', '3', '20', '1365', '4200', '0'), +('7', '3', '12', '2923', '3654', '0'), +('7', '3', '12', '11624', '2365', '0'), +('7', '3', '12', '1204', '1396', '0'), +('7', '3', '12', '29682', '1143', '0'), +('7', '3', '18', '2461', '2557', '0'), +('7', '3', '18', '1205', '1056', '0'), +('7', '3', '18', '25725', '978', '0'), +('7', '3', '18', '2343', '785', '0'), +('7', '3', '19', '1280', '3540', '0'), +('7', '3', '19', '1206', '1393', '0'), +('7', '3', '19', '68239', '1360', '0'), +('7', '3', '19', '25726', '791', '0'), +('7', '3', '13', '27715', '25245', '0'), +('7', '3', '13', '6502', '17425', '0'), +('7', '3', '13', '71308', '7822', '0'), +('7', '3', '13', '6691', '7373', '0'), +('7', '3', '14', '27715', '25245', '0'), +('7', '3', '14', '6502', '17425', '0'), +('7', '3', '14', '11644', '11154', '0'), +('7', '3', '14', '71308', '7822', '0'), +('7', '3', '11', '14762', '854', '0'), +('7', '3', '11', '13748', '489', '0'), +('7', '3', '11', '9246', '453', '0'), +('7', '3', '11', '20677', '69', '0'), +('7', '4', '22', '9246', '0', '0'), +('7', '4', '22', '10323', '0', '0'), +('7', '4', '22', '21509', '0', '0'), +('7', '4', '22', '8332', '0', '0'), +('7', '4', '1', '14701', '4052', '0'), +('7', '4', '1', '14702', '2850', '0'), +('7', '4', '1', '10165', '1638', '0'), +('7', '4', '1', '30361', '1140', '0'), +('7', '4', '2', '10142', '3012', '0'), +('7', '4', '2', '4504', '2158', '0'), +('7', '4', '2', '1405', '1810', '0'), +('7', '4', '2', '2191', '1592', '0'), +('7', '4', '3', '10144', '1206', '0'), +('7', '4', '3', '2403', '1146', '0'), +('7', '4', '3', '14705', '990', '0'), +('7', '4', '3', '14706', '990', '0'), +('7', '4', '5', '14703', '6050', '0'), +('7', '4', '5', '14700', '3753', '0'), +('7', '4', '5', '10055', '3505', '0'), +('7', '4', '5', '2583', '2444', '0'), +('7', '4', '8', '11621', '14377', '0'), +('7', '4', '8', '11562', '9310', '0'), +('7', '4', '8', '27714', '7684', '0'), +('7', '4', '8', '1546', '6920', '0'), +('7', '4', '6', '1557', '6760', '0'), +('7', '4', '6', '1283', '2986', '0'), +('7', '4', '6', '11561', '2098', '0'), +('7', '4', '6', '25062', '768', '0'), +('7', '4', '17', '12256', '7685', '0'), +('7', '4', '17', '1201', '2467', '0'), +('7', '4', '17', '2348', '1839', '0'), +('7', '4', '17', '2341', '1646', '0'), +('7', '4', '7', '2458', '2406', '0'), +('7', '4', '7', '1361', '1764', '0'), +('7', '4', '7', '2342', '1647', '0'), +('7', '4', '7', '1202', '1472', '0'), +('7', '4', '9', '27714', '7684', '0'), +('7', '4', '9', '14650', '1952', '0'), +('7', '4', '9', '10360', '1351', '0'), +('7', '4', '9', '1203', '1197', '0'), +('7', '4', '15', '10366', '8163', '0'), +('7', '4', '15', '10151', '7200', '0'), +('7', '4', '15', '14679', '6255', '0'), +('7', '4', '15', '14678', '5104', '0'), +('7', '4', '20', '11698', '9997', '0'), +('7', '4', '20', '11601', '7613', '0'), +('7', '4', '20', '2917', '5211', '0'), +('7', '4', '20', '1365', '4200', '0'), +('7', '4', '12', '2923', '3654', '0'), +('7', '4', '12', '11624', '2391', '0'), +('7', '4', '12', '1204', '1396', '0'), +('7', '4', '12', '29682', '1143', '0'), +('7', '4', '18', '2461', '2557', '0'), +('7', '4', '18', '1205', '1056', '0'), +('7', '4', '18', '25725', '978', '0'), +('7', '4', '18', '2343', '785', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '4', '19', '1280', '3540', '0'), +('7', '4', '19', '1206', '1426', '0'), +('7', '4', '19', '68239', '1360', '0'), +('7', '4', '19', '25726', '791', '0'), +('7', '4', '13', '27715', '25245', '0'), +('7', '4', '13', '6502', '17425', '0'), +('7', '4', '13', '71308', '7822', '0'), +('7', '4', '13', '6691', '7373', '0'), +('7', '4', '14', '27715', '25245', '0'), +('7', '4', '14', '6502', '17425', '0'), +('7', '4', '14', '11644', '11154', '0'), +('7', '4', '14', '71308', '7822', '0'), +('7', '4', '11', '14762', '854', '0'), +('7', '4', '11', '13748', '489', '0'), +('7', '4', '11', '9246', '453', '0'), +('7', '4', '11', '20677', '69', '0'), +('7', '5', '22', '9246', '0', '0'), +('7', '5', '22', '10323', '0', '0'), +('7', '5', '22', '21509', '0', '0'), +('7', '5', '22', '8332', '0', '0'), +('7', '5', '1', '14701', '4052', '0'), +('7', '5', '1', '14702', '2850', '0'), +('7', '5', '1', '10165', '1638', '0'), +('7', '5', '1', '30361', '1140', '0'), +('7', '5', '2', '10142', '3012', '0'), +('7', '5', '2', '4504', '2158', '0'), +('7', '5', '2', '1405', '1810', '0'), +('7', '5', '2', '2191', '1592', '0'), +('7', '5', '3', '10144', '1206', '0'), +('7', '5', '3', '2403', '1146', '0'), +('7', '5', '3', '14705', '990', '0'), +('7', '5', '3', '14706', '990', '0'), +('7', '5', '5', '14703', '6050', '0'), +('7', '5', '5', '14700', '3753', '0'), +('7', '5', '5', '10055', '3505', '0'), +('7', '5', '5', '2583', '2444', '0'), +('7', '5', '8', '11621', '14377', '0'), +('7', '5', '8', '11562', '9310', '0'), +('7', '5', '8', '27714', '7709', '0'), +('7', '5', '8', '1546', '6920', '0'), +('7', '5', '6', '1557', '6760', '0'), +('7', '5', '6', '1283', '2986', '0'), +('7', '5', '6', '11561', '2123', '0'), +('7', '5', '6', '25062', '768', '0'), +('7', '5', '17', '12256', '7703', '0'), +('7', '5', '17', '1201', '2467', '0'), +('7', '5', '17', '2348', '1857', '0'), +('7', '5', '17', '2341', '1646', '0'), +('7', '5', '7', '2458', '2406', '0'), +('7', '5', '7', '1361', '1764', '0'), +('7', '5', '7', '2342', '1658', '0'), +('7', '5', '7', '1202', '1505', '0'), +('7', '5', '9', '27714', '7709', '0'), +('7', '5', '9', '14650', '1952', '0'), +('7', '5', '9', '10360', '1351', '0'), +('7', '5', '9', '1203', '1215', '0'), +('7', '5', '15', '10366', '8163', '0'), +('7', '5', '15', '10151', '7200', '0'), +('7', '5', '15', '14679', '6255', '0'), +('7', '5', '15', '14678', '5104', '0'), +('7', '5', '20', '11698', '9997', '0'), +('7', '5', '20', '11601', '7650', '0'), +('7', '5', '20', '2917', '5211', '0'), +('7', '5', '20', '1365', '4200', '0'), +('7', '5', '12', '2923', '3654', '0'), +('7', '5', '12', '11624', '2416', '0'), +('7', '5', '12', '1204', '1396', '0'), +('7', '5', '12', '29682', '1143', '0'), +('7', '5', '18', '2461', '2557', '0'), +('7', '5', '18', '1205', '1056', '0'), +('7', '5', '18', '25725', '978', '0'), +('7', '5', '18', '2343', '785', '0'), +('7', '5', '19', '1280', '3540', '0'), +('7', '5', '19', '1206', '1459', '0'), +('7', '5', '19', '68239', '1360', '0'), +('7', '5', '19', '25726', '791', '0'), +('7', '5', '13', '27715', '25245', '0'), +('7', '5', '13', '6502', '17425', '0'), +('7', '5', '13', '71308', '7822', '0'), +('7', '5', '13', '6691', '7373', '0'), +('7', '5', '14', '27715', '25245', '0'), +('7', '5', '14', '6502', '17425', '0'), +('7', '5', '14', '11644', '11154', '0'), +('7', '5', '14', '71308', '7822', '0'), +('7', '5', '11', '14762', '854', '0'), +('7', '5', '11', '13748', '489', '0'), +('7', '5', '11', '9246', '453', '0'), +('7', '5', '11', '20677', '69', '0'), +('7', '6', '22', '9246', '0', '0'), +('7', '6', '22', '10323', '0', '0'), +('7', '6', '22', '21509', '0', '0'), +('7', '6', '22', '8332', '0', '0'), +('7', '6', '1', '14701', '4052', '0'), +('7', '6', '1', '14702', '2850', '0'), +('7', '6', '1', '10165', '1638', '0'), +('7', '6', '1', '30361', '1140', '0'), +('7', '6', '2', '10142', '3012', '0'), +('7', '6', '2', '4504', '2158', '0'), +('7', '6', '2', '1405', '1810', '0'), +('7', '6', '2', '2191', '1592', '0'), +('7', '6', '3', '10144', '1206', '0'), +('7', '6', '3', '2403', '1146', '0'), +('7', '6', '3', '14705', '990', '0'), +('7', '6', '3', '14706', '990', '0'), +('7', '6', '5', '14703', '6050', '0'), +('7', '6', '5', '14700', '3753', '0'), +('7', '6', '5', '10055', '3505', '0'), +('7', '6', '5', '2583', '2444', '0'), +('7', '6', '8', '11621', '14377', '0'), +('7', '6', '8', '11562', '9310', '0'), +('7', '6', '8', '27714', '7734', '0'), +('7', '6', '8', '1546', '6920', '0'), +('7', '6', '6', '1557', '6760', '0'), +('7', '6', '6', '1283', '2986', '0'), +('7', '6', '6', '11561', '2148', '0'), +('7', '6', '6', '25062', '768', '0'), +('7', '6', '17', '12256', '7721', '0'), +('7', '6', '17', '1201', '2467', '0'), +('7', '6', '17', '2348', '1875', '0'), +('7', '6', '17', '2341', '1646', '0'), +('7', '6', '7', '2458', '2406', '0'), +('7', '6', '7', '1361', '1764', '0'), +('7', '6', '7', '2342', '1669', '0'), +('7', '6', '7', '1202', '1537', '0'), +('7', '6', '9', '27714', '7734', '0'), +('7', '6', '9', '14650', '1952', '0'), +('7', '6', '9', '10360', '1351', '0'), +('7', '6', '9', '1203', '1234', '0'), +('7', '6', '15', '10366', '8163', '0'), +('7', '6', '15', '10151', '7200', '0'), +('7', '6', '15', '14679', '6255', '0'), +('7', '6', '15', '14678', '5104', '0'), +('7', '6', '20', '11698', '9997', '0'), +('7', '6', '20', '11601', '7686', '0'), +('7', '6', '20', '2917', '5211', '0'), +('7', '6', '20', '1365', '4200', '0'), +('7', '6', '12', '2923', '3654', '0'), +('7', '6', '12', '11624', '2442', '0'), +('7', '6', '12', '1204', '1396', '0'), +('7', '6', '12', '29682', '1143', '0'), +('7', '6', '18', '2461', '2557', '0'), +('7', '6', '18', '1205', '1056', '0'), +('7', '6', '18', '25725', '978', '0'), +('7', '6', '18', '2343', '785', '0'), +('7', '6', '19', '1280', '3540', '0'), +('7', '6', '19', '1206', '1491', '0'), +('7', '6', '19', '68239', '1360', '0'), +('7', '6', '19', '25726', '791', '0'), +('7', '6', '13', '27715', '25245', '0'), +('7', '6', '13', '6502', '17425', '0'), +('7', '6', '13', '71308', '7822', '0'), +('7', '6', '13', '6691', '7373', '0'), +('7', '6', '14', '27715', '25245', '0'), +('7', '6', '14', '6502', '17425', '0'), +('7', '6', '14', '11644', '11154', '0'), +('7', '6', '14', '71308', '7822', '0'), +('7', '6', '11', '14762', '854', '0'), +('7', '6', '11', '13748', '489', '0'), +('7', '6', '11', '9246', '453', '0'), +('7', '6', '11', '20677', '69', '0'), +('7', '7', '22', '9246', '0', '0'), +('7', '7', '22', '10323', '0', '0'), +('7', '7', '22', '21509', '0', '0'), +('7', '7', '22', '8332', '0', '0'), +('7', '7', '1', '14701', '4052', '0'), +('7', '7', '1', '14702', '2850', '0'), +('7', '7', '1', '10165', '1638', '0'), +('7', '7', '1', '30361', '1140', '0'), +('7', '7', '2', '10142', '3012', '0'), +('7', '7', '2', '4504', '2158', '0'), +('7', '7', '2', '1405', '1810', '0'), +('7', '7', '2', '2191', '1592', '0'), +('7', '7', '3', '10144', '1206', '0'), +('7', '7', '3', '2403', '1146', '0'), +('7', '7', '3', '14705', '990', '0'), +('7', '7', '3', '14706', '990', '0'), +('7', '7', '5', '14703', '6050', '0'), +('7', '7', '5', '14700', '3753', '0'), +('7', '7', '5', '10055', '3505', '0'), +('7', '7', '5', '2583', '2444', '0'), +('7', '7', '8', '11621', '14377', '0'), +('7', '7', '8', '11562', '9310', '0'), +('7', '7', '8', '27714', '7764', '0'), +('7', '7', '8', '1546', '6920', '0'), +('7', '7', '6', '1557', '6760', '0'), +('7', '7', '6', '1283', '2986', '0'), +('7', '7', '6', '11561', '2178', '0'), +('7', '7', '6', '25062', '768', '0'), +('7', '7', '17', '12256', '7742', '0'), +('7', '7', '17', '1201', '2467', '0'), +('7', '7', '17', '2348', '1897', '0'), +('7', '7', '17', '2341', '1646', '0'), +('7', '7', '7', '2458', '2406', '0'), +('7', '7', '7', '1361', '1764', '0'), +('7', '7', '7', '2342', '1682', '0'), +('7', '7', '7', '1202', '1575', '0'), +('7', '7', '9', '27714', '7764', '0'), +('7', '7', '9', '14650', '1952', '0'), +('7', '7', '9', '10360', '1351', '0'), +('7', '7', '9', '1203', '1255', '0'), +('7', '7', '15', '10366', '8163', '0'), +('7', '7', '15', '10151', '7200', '0'), +('7', '7', '15', '14679', '6255', '0'), +('7', '7', '15', '14678', '5104', '0'), +('7', '7', '20', '11698', '9997', '0'), +('7', '7', '20', '11601', '7728', '0'), +('7', '7', '20', '2917', '5211', '0'), +('7', '7', '20', '1365', '4200', '0'), +('7', '7', '12', '2923', '3654', '0'), +('7', '7', '12', '11624', '2471', '0'), +('7', '7', '12', '1204', '1396', '0'), +('7', '7', '12', '29682', '1143', '0'), +('7', '7', '18', '2461', '2557', '0'), +('7', '7', '18', '1205', '1056', '0'), +('7', '7', '18', '25725', '978', '0'), +('7', '7', '18', '2343', '785', '0'), +('7', '7', '19', '1280', '3540', '0'), +('7', '7', '19', '1206', '1529', '0'), +('7', '7', '19', '68239', '1360', '0'), +('7', '7', '19', '25726', '791', '0'), +('7', '7', '13', '27715', '25245', '0'), +('7', '7', '13', '6502', '17425', '0'), +('7', '7', '13', '71308', '7822', '0'), +('7', '7', '13', '6691', '7373', '0'), +('7', '7', '14', '27715', '25245', '0'), +('7', '7', '14', '6502', '17425', '0'), +('7', '7', '14', '11644', '11154', '0'), +('7', '7', '14', '71308', '7822', '0'), +('7', '7', '11', '14762', '854', '0'), +('7', '7', '11', '13748', '489', '0'), +('7', '7', '11', '9246', '453', '0'), +('7', '7', '11', '20677', '69', '0'), +('7', '8', '22', '9246', '0', '0'), +('7', '8', '22', '10323', '0', '0'), +('7', '8', '22', '21509', '0', '0'), +('7', '8', '22', '8332', '0', '0'), +('7', '8', '1', '14701', '4052', '0'), +('7', '8', '1', '14702', '2850', '0'), +('7', '8', '1', '10165', '1638', '0'), +('7', '8', '1', '30361', '1140', '0'), +('7', '8', '2', '10142', '3012', '0'), +('7', '8', '2', '4504', '2158', '0'), +('7', '8', '2', '1405', '1810', '0'), +('7', '8', '2', '2191', '1592', '0'), +('7', '8', '3', '10144', '1206', '0'), +('7', '8', '3', '2403', '1146', '0'), +('7', '8', '3', '14705', '990', '0'), +('7', '8', '3', '14706', '990', '0'), +('7', '8', '5', '14703', '6050', '0'), +('7', '8', '5', '14700', '3753', '0'), +('7', '8', '5', '10055', '3505', '0'), +('7', '8', '5', '2583', '2444', '0'), +('7', '8', '8', '11621', '14377', '0'), +('7', '8', '8', '11562', '9310', '0'), +('7', '8', '8', '27714', '7789', '0'), +('7', '8', '8', '1546', '6920', '0'), +('7', '8', '6', '1557', '6760', '0'), +('7', '8', '6', '1283', '2986', '0'), +('7', '8', '6', '11561', '2203', '0'), +('7', '8', '6', '25062', '768', '0'), +('7', '8', '17', '12256', '7760', '0'), +('7', '8', '17', '1201', '2467', '0'), +('7', '8', '17', '2348', '1915', '0'), +('7', '8', '17', '2341', '1646', '0'), +('7', '8', '7', '2458', '2406', '0'), +('7', '8', '7', '1361', '1764', '0'), +('7', '8', '7', '2342', '1693', '0'), +('7', '8', '7', '1202', '1608', '0'), +('7', '8', '9', '27714', '7789', '0'), +('7', '8', '9', '14650', '1952', '0'), +('7', '8', '9', '10360', '1351', '0'), +('7', '8', '9', '1203', '1273', '0'), +('7', '8', '15', '10366', '8163', '0'), +('7', '8', '15', '10151', '7200', '0'), +('7', '8', '15', '14679', '6255', '0'), +('7', '8', '15', '14678', '5104', '0'), +('7', '8', '20', '11698', '9997', '0'), +('7', '8', '20', '11601', '7764', '0'), +('7', '8', '20', '2917', '5211', '0'), +('7', '8', '20', '1365', '4200', '0'), +('7', '8', '12', '2923', '3654', '0'), +('7', '8', '12', '11624', '2497', '0'), +('7', '8', '12', '1204', '1396', '0'), +('7', '8', '12', '29682', '1143', '0'), +('7', '8', '18', '2461', '2557', '0'), +('7', '8', '18', '1205', '1056', '0'), +('7', '8', '18', '25725', '978', '0'), +('7', '8', '18', '2343', '785', '0'), +('7', '8', '19', '1280', '3540', '0'), +('7', '8', '19', '1206', '1562', '0'), +('7', '8', '19', '68239', '1360', '0'), +('7', '8', '19', '25726', '791', '0'), +('7', '8', '13', '27715', '25245', '0'), +('7', '8', '13', '6502', '17425', '0'), +('7', '8', '13', '71308', '7822', '0'), +('7', '8', '13', '6691', '7373', '0'), +('7', '8', '14', '27715', '25245', '0'), +('7', '8', '14', '6502', '17425', '0'), +('7', '8', '14', '11644', '11154', '0'), +('7', '8', '14', '71308', '7822', '0'), +('7', '8', '11', '14762', '854', '0'), +('7', '8', '11', '13748', '489', '0'), +('7', '8', '11', '9246', '453', '0'), +('7', '8', '11', '20677', '69', '0'), +('7', '9', '22', '9246', '0', '0'), +('7', '9', '22', '10323', '0', '0'), +('7', '9', '22', '21509', '0', '0'), +('7', '9', '22', '8332', '0', '0'), +('7', '9', '1', '14701', '4052', '0'), +('7', '9', '1', '14702', '2850', '0'), +('7', '9', '1', '10165', '1638', '0'), +('7', '9', '1', '30361', '1140', '0'), +('7', '9', '2', '10142', '3012', '0'), +('7', '9', '2', '4504', '2158', '0'), +('7', '9', '2', '1405', '1810', '0'), +('7', '9', '2', '2191', '1592', '0'), +('7', '9', '3', '10144', '1206', '0'), +('7', '9', '3', '2403', '1146', '0'), +('7', '9', '3', '14705', '990', '0'), +('7', '9', '3', '14706', '990', '0'), +('7', '9', '5', '14703', '6050', '0'), +('7', '9', '5', '14700', '3753', '0'), +('7', '9', '5', '10055', '3505', '0'), +('7', '9', '5', '2583', '2444', '0'), +('7', '9', '8', '11621', '14377', '0'), +('7', '9', '8', '11562', '9310', '0'), +('7', '9', '8', '27714', '7815', '0'), +('7', '9', '8', '1546', '6920', '0'), +('7', '9', '6', '1557', '6760', '0'), +('7', '9', '6', '1283', '2986', '0'), +('7', '9', '6', '11561', '2229', '0'), +('7', '9', '6', '25062', '768', '0'), +('7', '9', '17', '12256', '7778', '0'), +('7', '9', '17', '1201', '2467', '0'), +('7', '9', '17', '2348', '1933', '0'), +('7', '9', '17', '2341', '1646', '0'), +('7', '9', '7', '2458', '2406', '0'), +('7', '9', '7', '1361', '1764', '0'), +('7', '9', '7', '2342', '1704', '0'), +('7', '9', '7', '1202', '1640', '0'), +('7', '9', '9', '27714', '7815', '0'), +('7', '9', '9', '14650', '1952', '0'), +('7', '9', '9', '10360', '1351', '0'), +('7', '9', '9', '1203', '1291', '0'), +('7', '9', '15', '10366', '8163', '0'), +('7', '9', '15', '10151', '7200', '0'), +('7', '9', '15', '14679', '6255', '0'), +('7', '9', '15', '14678', '5104', '0'), +('7', '9', '20', '11698', '9997', '0'), +('7', '9', '20', '11601', '7801', '0'), +('7', '9', '20', '2917', '5211', '0'), +('7', '9', '20', '1365', '4200', '0'), +('7', '9', '12', '2923', '3654', '0'), +('7', '9', '12', '11624', '2522', '0'), +('7', '9', '12', '1204', '1396', '0'), +('7', '9', '12', '29682', '1143', '0'), +('7', '9', '18', '2461', '2557', '0'), +('7', '9', '18', '1205', '1056', '0'), +('7', '9', '18', '25725', '978', '0'), +('7', '9', '18', '2343', '785', '0'), +('7', '9', '19', '1280', '3540', '0'), +('7', '9', '19', '1206', '1595', '0'), +('7', '9', '19', '68239', '1360', '0'), +('7', '9', '19', '25726', '791', '0'), +('7', '9', '13', '27715', '25245', '0'), +('7', '9', '13', '6502', '17425', '0'), +('7', '9', '13', '71308', '7822', '0'), +('7', '9', '13', '6691', '7373', '0'), +('7', '9', '14', '27715', '25245', '0'), +('7', '9', '14', '6502', '17425', '0'), +('7', '9', '14', '11644', '11154', '0'), +('7', '9', '14', '71308', '7822', '0'), +('7', '9', '11', '14762', '854', '0'), +('7', '9', '11', '13748', '489', '0'), +('7', '9', '11', '9246', '453', '0'), +('7', '9', '11', '20677', '69', '0'), +('7', '10', '22', '9246', '0', '0'), +('7', '10', '22', '10323', '0', '0'), +('7', '10', '22', '21509', '0', '0'), +('7', '10', '22', '8332', '0', '0'), +('7', '10', '1', '14701', '4052', '0'), +('7', '10', '1', '14702', '2850', '0'), +('7', '10', '1', '10165', '1638', '0'), +('7', '10', '1', '30361', '1140', '0'), +('7', '10', '2', '10142', '3012', '0'), +('7', '10', '2', '4504', '2158', '0'), +('7', '10', '2', '1405', '1810', '0'), +('7', '10', '2', '2191', '1592', '0'), +('7', '10', '3', '10144', '1206', '0'), +('7', '10', '3', '2403', '1146', '0'), +('7', '10', '3', '14705', '990', '0'), +('7', '10', '3', '14706', '990', '0'), +('7', '10', '5', '14703', '6050', '0'), +('7', '10', '5', '14700', '3753', '0'), +('7', '10', '5', '10055', '3505', '0'), +('7', '10', '5', '2583', '2444', '0'), +('7', '10', '8', '11621', '14377', '0'), +('7', '10', '8', '11562', '9310', '0'), +('7', '10', '8', '27714', '7840', '0'), +('7', '10', '8', '1546', '6920', '0'), +('7', '10', '6', '1557', '6760', '0'), +('7', '10', '6', '1283', '2986', '0'), +('7', '10', '6', '11561', '2254', '0'), +('7', '10', '6', '25062', '768', '0'), +('7', '10', '17', '12256', '7797', '0'), +('7', '10', '17', '1201', '2467', '0'), +('7', '10', '17', '2348', '1951', '0'), +('7', '10', '17', '2341', '1646', '0'), +('7', '10', '7', '2458', '2406', '0'), +('7', '10', '7', '1361', '1764', '0'), +('7', '10', '7', '2342', '1715', '0'), +('7', '10', '7', '1202', '1673', '0'), +('7', '10', '9', '27714', '7840', '0'), +('7', '10', '9', '14650', '1952', '0'), +('7', '10', '9', '10360', '1351', '0'), +('7', '10', '9', '1203', '1309', '0'), +('7', '10', '15', '10366', '8163', '0'), +('7', '10', '15', '10151', '7200', '0'), +('7', '10', '15', '14679', '6255', '0'), +('7', '10', '15', '14678', '5104', '0'), +('7', '10', '20', '11698', '9997', '0'), +('7', '10', '20', '11601', '7837', '0'), +('7', '10', '20', '2917', '5211', '0'), +('7', '10', '20', '1365', '4200', '0'), +('7', '10', '12', '2923', '3654', '0'), +('7', '10', '12', '11624', '2547', '0'), +('7', '10', '12', '1204', '1396', '0'), +('7', '10', '12', '29682', '1143', '0'), +('7', '10', '18', '2461', '2557', '0'), +('7', '10', '18', '1205', '1056', '0'), +('7', '10', '18', '25725', '978', '0'), +('7', '10', '18', '2343', '785', '0'), +('7', '10', '19', '1280', '3540', '0'), +('7', '10', '19', '1206', '1627', '0'), +('7', '10', '19', '68239', '1360', '0'), +('7', '10', '19', '25726', '791', '0'), +('7', '10', '13', '27715', '25245', '0'), +('7', '10', '13', '6502', '17425', '0'), +('7', '10', '13', '71308', '7822', '0'), +('7', '10', '13', '6691', '7373', '0'), +('7', '10', '14', '27715', '25245', '0'), +('7', '10', '14', '6502', '17425', '0'), +('7', '10', '14', '11644', '11154', '0'), +('7', '10', '14', '71308', '7822', '0'), +('7', '10', '11', '14762', '854', '0'), +('7', '10', '11', '13748', '489', '0'), +('7', '10', '11', '9246', '453', '0'), +('7', '10', '11', '20677', '69', '0'), +('7', '11', '22', '9246', '0', '0'), +('7', '11', '22', '10323', '0', '0'), +('7', '11', '22', '21509', '0', '0'), +('7', '11', '22', '8332', '0', '0'), +('7', '11', '1', '14701', '4052', '0'), +('7', '11', '1', '14702', '2850', '0'), +('7', '11', '1', '10165', '1638', '0'), +('7', '11', '1', '30361', '1140', '0'), +('7', '11', '2', '10142', '3012', '0'), +('7', '11', '2', '4504', '2158', '0'), +('7', '11', '2', '1405', '1810', '0'), +('7', '11', '2', '2191', '1592', '0'), +('7', '11', '3', '10144', '1206', '0'), +('7', '11', '3', '2403', '1146', '0'), +('7', '11', '3', '14705', '990', '0'), +('7', '11', '3', '14706', '990', '0'), +('7', '11', '5', '14703', '6050', '0'), +('7', '11', '5', '14700', '3753', '0'), +('7', '11', '5', '10055', '3505', '0'), +('7', '11', '5', '2583', '2444', '0'), +('7', '11', '8', '11621', '14377', '0'), +('7', '11', '8', '11562', '9310', '0'), +('7', '11', '8', '27714', '7870', '0'), +('7', '11', '8', '1546', '6920', '0'), +('7', '11', '6', '1557', '6760', '0'), +('7', '11', '6', '1283', '2986', '0'), +('7', '11', '6', '11561', '2284', '0'), +('7', '11', '6', '25062', '768', '0'), +('7', '11', '17', '12256', '7818', '0'), +('7', '11', '17', '1201', '2467', '0'), +('7', '11', '17', '2348', '1972', '0'), +('7', '11', '17', '2341', '1646', '0'), +('7', '11', '7', '2458', '2406', '0'), +('7', '11', '7', '1361', '1764', '0'), +('7', '11', '7', '2342', '1727', '0'), +('7', '11', '7', '1202', '1711', '0'), +('7', '11', '9', '27714', '7870', '0'), +('7', '11', '9', '14650', '1952', '0'), +('7', '11', '9', '10360', '1351', '0'), +('7', '11', '9', '1203', '1330', '0'), +('7', '11', '15', '10366', '8163', '0'), +('7', '11', '15', '10151', '7200', '0'), +('7', '11', '15', '14679', '6255', '0'), +('7', '11', '15', '14678', '5104', '0'), +('7', '11', '20', '11698', '9997', '0'), +('7', '11', '20', '11601', '7879', '0'), +('7', '11', '20', '2917', '5211', '0'), +('7', '11', '20', '1365', '4200', '0'), +('7', '11', '12', '2923', '3654', '0'), +('7', '11', '12', '11624', '2577', '0'), +('7', '11', '12', '1204', '1396', '0'), +('7', '11', '12', '29682', '1143', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '11', '18', '2461', '2557', '0'), +('7', '11', '18', '1205', '1056', '0'), +('7', '11', '18', '25725', '978', '0'), +('7', '11', '18', '2343', '785', '0'), +('7', '11', '19', '1280', '3540', '0'), +('7', '11', '19', '1206', '1665', '0'), +('7', '11', '19', '68239', '1360', '0'), +('7', '11', '19', '25726', '791', '0'), +('7', '11', '13', '27715', '25245', '0'), +('7', '11', '13', '6502', '17425', '0'), +('7', '11', '13', '71308', '7822', '0'), +('7', '11', '13', '6691', '7373', '0'), +('7', '11', '14', '27715', '25245', '0'), +('7', '11', '14', '6502', '17425', '0'), +('7', '11', '14', '11644', '11154', '0'), +('7', '11', '14', '71308', '7822', '0'), +('7', '11', '11', '14762', '854', '0'), +('7', '11', '11', '13748', '489', '0'), +('7', '11', '11', '9246', '453', '0'), +('7', '11', '11', '20677', '69', '0'), +('7', '12', '22', '9246', '0', '0'), +('7', '12', '22', '10323', '0', '0'), +('7', '12', '22', '21509', '0', '0'), +('7', '12', '22', '8332', '0', '0'), +('7', '12', '1', '14701', '4052', '0'), +('7', '12', '1', '14702', '2850', '0'), +('7', '12', '1', '10165', '1638', '0'), +('7', '12', '1', '30361', '1140', '0'), +('7', '12', '2', '10142', '3012', '0'), +('7', '12', '2', '4504', '2158', '0'), +('7', '12', '2', '1405', '1810', '0'), +('7', '12', '2', '2191', '1592', '0'), +('7', '12', '3', '10144', '1206', '0'), +('7', '12', '3', '2403', '1146', '0'), +('7', '12', '3', '14705', '990', '0'), +('7', '12', '3', '14706', '990', '0'), +('7', '12', '5', '14703', '6050', '0'), +('7', '12', '5', '14700', '3753', '0'), +('7', '12', '5', '10055', '3505', '0'), +('7', '12', '5', '2583', '2444', '0'), +('7', '12', '8', '11621', '14377', '0'), +('7', '12', '8', '11562', '9310', '0'), +('7', '12', '8', '27714', '7895', '0'), +('7', '12', '8', '1546', '6920', '0'), +('7', '12', '6', '1557', '6760', '0'), +('7', '12', '6', '1283', '2986', '0'), +('7', '12', '6', '11561', '2309', '0'), +('7', '12', '6', '25062', '768', '0'), +('7', '12', '17', '12256', '7836', '0'), +('7', '12', '17', '1201', '2467', '0'), +('7', '12', '17', '2348', '1990', '0'), +('7', '12', '17', '2341', '1646', '0'), +('7', '12', '7', '2458', '2406', '0'), +('7', '12', '7', '1361', '1764', '0'), +('7', '12', '7', '1202', '1744', '0'), +('7', '12', '7', '2342', '1738', '0'), +('7', '12', '9', '27714', '7895', '0'), +('7', '12', '9', '14650', '1952', '0'), +('7', '12', '9', '10360', '1351', '0'), +('7', '12', '9', '1203', '1348', '0'), +('7', '12', '15', '10366', '8163', '0'), +('7', '12', '15', '10151', '7200', '0'), +('7', '12', '15', '14679', '6255', '0'), +('7', '12', '15', '14678', '5104', '0'), +('7', '12', '20', '11698', '9997', '0'), +('7', '12', '20', '11601', '7915', '0'), +('7', '12', '20', '2917', '5211', '0'), +('7', '12', '20', '1365', '4200', '0'), +('7', '12', '12', '2923', '3654', '0'), +('7', '12', '12', '11624', '2602', '0'), +('7', '12', '12', '1204', '1396', '0'), +('7', '12', '12', '8909', '1145', '0'), +('7', '12', '18', '2461', '2557', '0'), +('7', '12', '18', '1205', '1056', '0'), +('7', '12', '18', '25725', '978', '0'), +('7', '12', '18', '2343', '785', '0'), +('7', '12', '19', '1280', '3540', '0'), +('7', '12', '19', '1206', '1698', '0'), +('7', '12', '19', '68239', '1360', '0'), +('7', '12', '19', '25726', '791', '0'), +('7', '12', '13', '27715', '25245', '0'), +('7', '12', '13', '6502', '17425', '0'), +('7', '12', '13', '71308', '7822', '0'), +('7', '12', '13', '6691', '7373', '0'), +('7', '12', '14', '27715', '25245', '0'), +('7', '12', '14', '6502', '17425', '0'), +('7', '12', '14', '11644', '11154', '0'), +('7', '12', '14', '71308', '7822', '0'), +('7', '12', '11', '14762', '854', '0'), +('7', '12', '11', '13748', '489', '0'), +('7', '12', '11', '9246', '453', '0'), +('7', '12', '11', '20677', '69', '0'), +('7', '13', '22', '9246', '0', '0'), +('7', '13', '22', '10323', '0', '0'), +('7', '13', '22', '21509', '0', '0'), +('7', '13', '22', '8332', '0', '0'), +('7', '13', '1', '14701', '4052', '0'), +('7', '13', '1', '14702', '2850', '0'), +('7', '13', '1', '10165', '1638', '0'), +('7', '13', '1', '30361', '1140', '0'), +('7', '13', '2', '10142', '3012', '0'), +('7', '13', '2', '4504', '2158', '0'), +('7', '13', '2', '1405', '1810', '0'), +('7', '13', '2', '2191', '1592', '0'), +('7', '13', '3', '10144', '1206', '0'), +('7', '13', '3', '2403', '1146', '0'), +('7', '13', '3', '14705', '990', '0'), +('7', '13', '3', '14706', '990', '0'), +('7', '13', '5', '14703', '6050', '0'), +('7', '13', '5', '14700', '3753', '0'), +('7', '13', '5', '10055', '3505', '0'), +('7', '13', '5', '2583', '2444', '0'), +('7', '13', '8', '11621', '14377', '0'), +('7', '13', '8', '11562', '9310', '0'), +('7', '13', '8', '27714', '7920', '0'), +('7', '13', '8', '1546', '6920', '0'), +('7', '13', '6', '1557', '6760', '0'), +('7', '13', '6', '1283', '2986', '0'), +('7', '13', '6', '11561', '2334', '0'), +('7', '13', '6', '25062', '768', '0'), +('7', '13', '17', '12256', '7854', '0'), +('7', '13', '17', '1201', '2467', '0'), +('7', '13', '17', '2348', '2008', '0'), +('7', '13', '17', '2341', '1646', '0'), +('7', '13', '7', '2458', '2406', '0'), +('7', '13', '7', '1202', '1776', '0'), +('7', '13', '7', '1361', '1764', '0'), +('7', '13', '7', '2342', '1749', '0'), +('7', '13', '9', '27714', '7920', '0'), +('7', '13', '9', '14650', '1952', '0'), +('7', '13', '9', '1203', '1366', '0'), +('7', '13', '9', '10360', '1351', '0'), +('7', '13', '15', '10366', '8163', '0'), +('7', '13', '15', '10151', '7200', '0'), +('7', '13', '15', '14679', '6255', '0'), +('7', '13', '15', '14678', '5104', '0'), +('7', '13', '20', '11698', '9997', '0'), +('7', '13', '20', '11601', '7952', '0'), +('7', '13', '20', '2917', '5211', '0'), +('7', '13', '20', '1365', '4200', '0'), +('7', '13', '12', '2923', '3654', '0'), +('7', '13', '12', '11624', '2628', '0'), +('7', '13', '12', '1204', '1396', '0'), +('7', '13', '12', '8909', '1155', '0'), +('7', '13', '18', '2461', '2557', '0'), +('7', '13', '18', '1205', '1056', '0'), +('7', '13', '18', '25725', '978', '0'), +('7', '13', '18', '2343', '785', '0'), +('7', '13', '19', '1280', '3540', '0'), +('7', '13', '19', '1206', '1730', '0'), +('7', '13', '19', '68239', '1360', '0'), +('7', '13', '19', '25726', '791', '0'), +('7', '13', '13', '27715', '25245', '0'), +('7', '13', '13', '6502', '17425', '0'), +('7', '13', '13', '71308', '7822', '0'), +('7', '13', '13', '6691', '7373', '0'), +('7', '13', '14', '27715', '25245', '0'), +('7', '13', '14', '6502', '17425', '0'), +('7', '13', '14', '11644', '11154', '0'), +('7', '13', '14', '71308', '7822', '0'), +('7', '13', '11', '14762', '854', '0'), +('7', '13', '11', '13748', '489', '0'), +('7', '13', '11', '9246', '453', '0'), +('7', '13', '11', '20677', '69', '0'), +('7', '14', '22', '9246', '0', '0'), +('7', '14', '22', '10323', '0', '0'), +('7', '14', '22', '21509', '0', '0'), +('7', '14', '22', '8332', '0', '0'), +('7', '14', '1', '14701', '4052', '0'), +('7', '14', '1', '14702', '2850', '0'), +('7', '14', '1', '10165', '1638', '0'), +('7', '14', '1', '30361', '1140', '0'), +('7', '14', '2', '10142', '3012', '0'), +('7', '14', '2', '4504', '2158', '0'), +('7', '14', '2', '1405', '1810', '0'), +('7', '14', '2', '2191', '1592', '0'), +('7', '14', '3', '10144', '1206', '0'), +('7', '14', '3', '2403', '1146', '0'), +('7', '14', '3', '14705', '990', '0'), +('7', '14', '3', '14706', '990', '0'), +('7', '14', '5', '14703', '6050', '0'), +('7', '14', '5', '14700', '3753', '0'), +('7', '14', '5', '10055', '3505', '0'), +('7', '14', '5', '2583', '2444', '0'), +('7', '14', '8', '11621', '14377', '0'), +('7', '14', '8', '11562', '9310', '0'), +('7', '14', '8', '27714', '7950', '0'), +('7', '14', '8', '1546', '6920', '0'), +('7', '14', '6', '1557', '6760', '0'), +('7', '14', '6', '1283', '2986', '0'), +('7', '14', '6', '11561', '2364', '0'), +('7', '14', '6', '25062', '768', '0'), +('7', '14', '17', '12256', '7875', '0'), +('7', '14', '17', '1201', '2467', '0'), +('7', '14', '17', '2348', '2029', '0'), +('7', '14', '17', '2341', '1646', '0'), +('7', '14', '7', '2458', '2406', '0'), +('7', '14', '7', '1202', '1814', '0'), +('7', '14', '7', '1361', '1764', '0'), +('7', '14', '7', '2342', '1762', '0'), +('7', '14', '9', '27714', '7950', '0'), +('7', '14', '9', '14650', '1952', '0'), +('7', '14', '9', '1203', '1388', '0'), +('7', '14', '9', '10360', '1351', '0'), +('7', '14', '15', '10366', '8163', '0'), +('7', '14', '15', '10151', '7200', '0'), +('7', '14', '15', '14679', '6255', '0'), +('7', '14', '15', '14678', '5104', '0'), +('7', '14', '20', '11698', '9997', '0'), +('7', '14', '20', '11601', '7994', '0'), +('7', '14', '20', '2917', '5211', '0'), +('7', '14', '20', '1365', '4200', '0'), +('7', '14', '12', '2923', '3654', '0'), +('7', '14', '12', '11624', '2657', '0'), +('7', '14', '12', '1204', '1396', '0'), +('7', '14', '12', '8909', '1165', '0'), +('7', '14', '18', '2461', '2557', '0'), +('7', '14', '18', '1205', '1056', '0'), +('7', '14', '18', '25725', '978', '0'), +('7', '14', '18', '2343', '785', '0'), +('7', '14', '19', '1280', '3540', '0'), +('7', '14', '19', '1206', '1769', '0'), +('7', '14', '19', '68239', '1360', '0'), +('7', '14', '19', '25726', '791', '0'), +('7', '14', '13', '27715', '25245', '0'), +('7', '14', '13', '6502', '17425', '0'), +('7', '14', '13', '71308', '7822', '0'), +('7', '14', '13', '6691', '7373', '0'), +('7', '14', '14', '27715', '25245', '0'), +('7', '14', '14', '6502', '17425', '0'), +('7', '14', '14', '11644', '11154', '0'), +('7', '14', '14', '71308', '7822', '0'), +('7', '14', '11', '14762', '854', '0'), +('7', '14', '11', '13748', '489', '0'), +('7', '14', '11', '9246', '453', '0'), +('7', '14', '11', '20677', '69', '0'), +('7', '15', '22', '9246', '0', '0'), +('7', '15', '22', '10323', '0', '0'), +('7', '15', '22', '21509', '0', '0'), +('7', '15', '22', '8332', '0', '0'), +('7', '15', '1', '14701', '4052', '0'), +('7', '15', '1', '14702', '2850', '0'), +('7', '15', '1', '10165', '1638', '0'), +('7', '15', '1', '30361', '1140', '0'), +('7', '15', '2', '10142', '3012', '0'), +('7', '15', '2', '4504', '2158', '0'), +('7', '15', '2', '1405', '1810', '0'), +('7', '15', '2', '2191', '1592', '0'), +('7', '15', '3', '10144', '1206', '0'), +('7', '15', '3', '2403', '1146', '0'), +('7', '15', '3', '14705', '990', '0'), +('7', '15', '3', '14706', '990', '0'), +('7', '15', '5', '14703', '6050', '0'), +('7', '15', '5', '14700', '3753', '0'), +('7', '15', '5', '10055', '3505', '0'), +('7', '15', '5', '2583', '2444', '0'), +('7', '15', '8', '11621', '14377', '0'), +('7', '15', '8', '11562', '9310', '0'), +('7', '15', '8', '27714', '7975', '0'), +('7', '15', '8', '1546', '6920', '0'), +('7', '15', '6', '1557', '6760', '0'), +('7', '15', '6', '1283', '2986', '0'), +('7', '15', '6', '11561', '2389', '0'), +('7', '15', '6', '25062', '768', '0'), +('7', '15', '17', '12256', '7893', '0'), +('7', '15', '17', '1201', '2467', '0'), +('7', '15', '17', '2348', '2048', '0'), +('7', '15', '17', '2341', '1646', '0'), +('7', '15', '7', '2458', '2406', '0'), +('7', '15', '7', '1202', '1847', '0'), +('7', '15', '7', '2342', '1773', '0'), +('7', '15', '7', '1361', '1764', '0'), +('7', '15', '9', '27714', '7975', '0'), +('7', '15', '9', '14650', '1952', '0'), +('7', '15', '9', '1203', '1406', '0'), +('7', '15', '9', '10360', '1351', '0'), +('7', '15', '15', '10366', '8163', '0'), +('7', '15', '15', '10151', '7200', '0'), +('7', '15', '15', '14679', '6255', '0'), +('7', '15', '15', '14678', '5104', '0'), +('7', '15', '20', '11698', '9997', '0'), +('7', '15', '20', '11601', '8030', '0'), +('7', '15', '20', '2917', '5211', '0'), +('7', '15', '20', '1365', '4200', '0'), +('7', '15', '12', '2923', '3654', '0'), +('7', '15', '12', '11624', '2683', '0'), +('7', '15', '12', '1204', '1396', '0'), +('7', '15', '12', '8909', '1174', '0'), +('7', '15', '18', '2461', '2557', '0'), +('7', '15', '18', '1205', '1056', '0'), +('7', '15', '18', '25725', '978', '0'), +('7', '15', '18', '2343', '785', '0'), +('7', '15', '19', '1280', '3540', '0'), +('7', '15', '19', '1206', '1801', '0'), +('7', '15', '19', '68239', '1360', '0'), +('7', '15', '19', '25726', '791', '0'), +('7', '15', '13', '27715', '25245', '0'), +('7', '15', '13', '6502', '17425', '0'), +('7', '15', '13', '71308', '7822', '0'), +('7', '15', '13', '6691', '7373', '0'), +('7', '15', '14', '27715', '25245', '0'), +('7', '15', '14', '6502', '17425', '0'), +('7', '15', '14', '11644', '11154', '0'), +('7', '15', '14', '71308', '7822', '0'), +('7', '15', '11', '14762', '854', '0'), +('7', '15', '11', '13748', '489', '0'), +('7', '15', '11', '9246', '453', '0'), +('7', '15', '11', '20677', '69', '0'), +('7', '16', '22', '9246', '0', '0'), +('7', '16', '22', '10323', '0', '0'), +('7', '16', '22', '21509', '0', '0'), +('7', '16', '22', '8332', '0', '0'), +('7', '16', '1', '14701', '4052', '0'), +('7', '16', '1', '14702', '2850', '0'), +('7', '16', '1', '10165', '1638', '0'), +('7', '16', '1', '30361', '1140', '0'), +('7', '16', '2', '10142', '3012', '0'), +('7', '16', '2', '4504', '2158', '0'), +('7', '16', '2', '1405', '1810', '0'), +('7', '16', '2', '2191', '1592', '0'), +('7', '16', '3', '10144', '1206', '0'), +('7', '16', '3', '2403', '1146', '0'), +('7', '16', '3', '14705', '990', '0'), +('7', '16', '3', '14706', '990', '0'), +('7', '16', '5', '14703', '6050', '0'), +('7', '16', '5', '14700', '3753', '0'), +('7', '16', '5', '10055', '3505', '0'), +('7', '16', '5', '2583', '2444', '0'), +('7', '16', '8', '11621', '14377', '0'), +('7', '16', '8', '11562', '9310', '0'), +('7', '16', '8', '27714', '8001', '0'), +('7', '16', '8', '1546', '6920', '0'), +('7', '16', '6', '1557', '6760', '0'), +('7', '16', '6', '1283', '2986', '0'), +('7', '16', '6', '11561', '2415', '0'), +('7', '16', '6', '25062', '768', '0'), +('7', '16', '17', '12256', '7911', '0'), +('7', '16', '17', '1201', '2467', '0'), +('7', '16', '17', '2348', '2066', '0'), +('7', '16', '17', '2341', '1646', '0'), +('7', '16', '7', '2458', '2406', '0'), +('7', '16', '7', '1202', '1880', '0'), +('7', '16', '7', '2342', '1783', '0'), +('7', '16', '7', '1361', '1764', '0'), +('7', '16', '9', '27714', '8001', '0'), +('7', '16', '9', '14650', '1952', '0'), +('7', '16', '9', '1203', '1424', '0'), +('7', '16', '9', '10360', '1351', '0'), +('7', '16', '15', '10366', '8163', '0'), +('7', '16', '15', '10151', '7200', '0'), +('7', '16', '15', '14679', '6255', '0'), +('7', '16', '15', '14678', '5104', '0'), +('7', '16', '20', '11698', '9997', '0'), +('7', '16', '20', '11601', '8066', '0'), +('7', '16', '20', '2917', '5211', '0'), +('7', '16', '20', '1365', '4200', '0'), +('7', '16', '12', '2923', '3654', '0'), +('7', '16', '12', '11624', '2708', '0'), +('7', '16', '12', '1204', '1396', '0'), +('7', '16', '12', '8909', '1184', '0'), +('7', '16', '18', '2461', '2557', '0'), +('7', '16', '18', '1205', '1056', '0'), +('7', '16', '18', '25725', '978', '0'), +('7', '16', '18', '2343', '785', '0'), +('7', '16', '19', '1280', '3540', '0'), +('7', '16', '19', '1206', '1834', '0'), +('7', '16', '19', '68239', '1360', '0'), +('7', '16', '19', '25726', '791', '0'), +('7', '16', '13', '27715', '25245', '0'), +('7', '16', '13', '6502', '17425', '0'), +('7', '16', '13', '71308', '7822', '0'), +('7', '16', '13', '6691', '7373', '0'), +('7', '16', '14', '27715', '25245', '0'), +('7', '16', '14', '6502', '17425', '0'), +('7', '16', '14', '11644', '11154', '0'), +('7', '16', '14', '71308', '7822', '0'), +('7', '16', '11', '14762', '854', '0'), +('7', '16', '11', '13748', '489', '0'), +('7', '16', '11', '9246', '453', '0'), +('7', '16', '11', '20677', '69', '0'), +('7', '17', '22', '9246', '0', '0'), +('7', '17', '22', '10323', '0', '0'), +('7', '17', '22', '21509', '0', '0'), +('7', '17', '22', '8332', '0', '0'), +('7', '17', '1', '14701', '4052', '0'), +('7', '17', '1', '14702', '2850', '0'), +('7', '17', '1', '10165', '1638', '0'), +('7', '17', '1', '30361', '1140', '0'), +('7', '17', '2', '10142', '3012', '0'), +('7', '17', '2', '4504', '2158', '0'), +('7', '17', '2', '1405', '1810', '0'), +('7', '17', '2', '2191', '1592', '0'), +('7', '17', '3', '10144', '1206', '0'), +('7', '17', '3', '2403', '1146', '0'), +('7', '17', '3', '14705', '990', '0'), +('7', '17', '3', '14706', '990', '0'), +('7', '17', '5', '14703', '6050', '0'), +('7', '17', '5', '14700', '3753', '0'), +('7', '17', '5', '10055', '3505', '0'), +('7', '17', '5', '2583', '2444', '0'), +('7', '17', '8', '11621', '14377', '0'), +('7', '17', '8', '11562', '9310', '0'), +('7', '17', '8', '27714', '8030', '0'), +('7', '17', '8', '1546', '6920', '0'), +('7', '17', '6', '1557', '6760', '0'), +('7', '17', '6', '1283', '2986', '0'), +('7', '17', '6', '11561', '2444', '0'), +('7', '17', '6', '25062', '768', '0'), +('7', '17', '17', '12256', '7932', '0'), +('7', '17', '17', '1201', '2467', '0'), +('7', '17', '17', '2348', '2087', '0'), +('7', '17', '17', '2341', '1646', '0'), +('7', '17', '7', '2458', '2406', '0'), +('7', '17', '7', '1202', '1918', '0'), +('7', '17', '7', '2342', '1796', '0'), +('7', '17', '7', '1361', '1764', '0'), +('7', '17', '9', '27714', '8030', '0'), +('7', '17', '9', '14650', '1952', '0'), +('7', '17', '9', '1203', '1445', '0'), +('7', '17', '9', '10360', '1351', '0'), +('7', '17', '15', '10366', '8163', '0'), +('7', '17', '15', '10151', '7200', '0'), +('7', '17', '15', '14679', '6255', '0'), +('7', '17', '15', '14678', '5104', '0'), +('7', '17', '20', '11698', '9997', '0'), +('7', '17', '20', '11601', '8109', '0'), +('7', '17', '20', '2917', '5211', '0'), +('7', '17', '20', '1365', '4200', '0'), +('7', '17', '12', '2923', '3654', '0'), +('7', '17', '12', '11624', '2738', '0'), +('7', '17', '12', '1204', '1396', '0'), +('7', '17', '12', '8909', '1194', '0'), +('7', '17', '18', '2461', '2557', '0'), +('7', '17', '18', '1205', '1056', '0'), +('7', '17', '18', '25725', '978', '0'), +('7', '17', '18', '2343', '785', '0'), +('7', '17', '19', '1280', '3540', '0'), +('7', '17', '19', '1206', '1872', '0'), +('7', '17', '19', '68239', '1360', '0'), +('7', '17', '19', '25726', '791', '0'), +('7', '17', '13', '27715', '25245', '0'), +('7', '17', '13', '6502', '17425', '0'), +('7', '17', '13', '71308', '7822', '0'), +('7', '17', '13', '6691', '7373', '0'), +('7', '17', '14', '27715', '25245', '0'), +('7', '17', '14', '6502', '17425', '0'), +('7', '17', '14', '11644', '11154', '0'), +('7', '17', '14', '71308', '7822', '0'), +('7', '17', '11', '14762', '854', '0'), +('7', '17', '11', '13748', '489', '0'), +('7', '17', '11', '9246', '453', '0'), +('7', '17', '11', '20677', '69', '0'), +('7', '18', '22', '9246', '0', '0'), +('7', '18', '22', '10323', '0', '0'), +('7', '18', '22', '21509', '0', '0'), +('7', '18', '22', '8332', '0', '0'), +('7', '18', '1', '14701', '4052', '0'), +('7', '18', '1', '14702', '2850', '0'), +('7', '18', '1', '10165', '1638', '0'), +('7', '18', '1', '30361', '1140', '0'), +('7', '18', '2', '10142', '3012', '0'), +('7', '18', '2', '4504', '2158', '0'), +('7', '18', '2', '1405', '1810', '0'), +('7', '18', '2', '2191', '1592', '0'), +('7', '18', '3', '10144', '1206', '0'), +('7', '18', '3', '2403', '1146', '0'), +('7', '18', '3', '14705', '990', '0'), +('7', '18', '3', '14706', '990', '0'), +('7', '18', '5', '14703', '6050', '0'), +('7', '18', '5', '14700', '3753', '0'), +('7', '18', '5', '10055', '3505', '0'), +('7', '18', '5', '2583', '2444', '0'), +('7', '18', '8', '11621', '14377', '0'), +('7', '18', '8', '11562', '9310', '0'), +('7', '18', '8', '27714', '8056', '0'), +('7', '18', '8', '1546', '6920', '0'), +('7', '18', '6', '1557', '6760', '0'), +('7', '18', '6', '1283', '2986', '0'), +('7', '18', '6', '11561', '2470', '0'), +('7', '18', '6', '25062', '768', '0'), +('7', '18', '17', '12256', '7951', '0'), +('7', '18', '17', '1201', '2467', '0'), +('7', '18', '17', '2348', '2105', '0'), +('7', '18', '17', '2341', '1646', '0'), +('7', '18', '7', '2458', '2406', '0'), +('7', '18', '7', '1202', '1950', '0'), +('7', '18', '7', '2342', '1807', '0'), +('7', '18', '7', '1361', '1764', '0'), +('7', '18', '9', '27714', '8056', '0'), +('7', '18', '9', '14650', '1952', '0'), +('7', '18', '9', '1203', '1463', '0'), +('7', '18', '9', '10360', '1351', '0'), +('7', '18', '15', '10366', '8163', '0'), +('7', '18', '15', '10151', '7200', '0'), +('7', '18', '15', '14679', '6255', '0'), +('7', '18', '15', '14678', '5104', '0'), +('7', '18', '20', '11698', '9997', '0'), +('7', '18', '20', '11601', '8145', '0'), +('7', '18', '20', '2917', '5211', '0'), +('7', '18', '20', '1365', '4200', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '18', '12', '2923', '3654', '0'), +('7', '18', '12', '11624', '2763', '0'), +('7', '18', '12', '1204', '1396', '0'), +('7', '18', '12', '8909', '1203', '0'), +('7', '18', '18', '2461', '2557', '0'), +('7', '18', '18', '1205', '1056', '0'), +('7', '18', '18', '25725', '978', '0'), +('7', '18', '18', '2343', '785', '0'), +('7', '18', '19', '1280', '3540', '0'), +('7', '18', '19', '1206', '1904', '0'), +('7', '18', '19', '68239', '1360', '0'), +('7', '18', '19', '25726', '791', '0'), +('7', '18', '13', '27715', '25245', '0'), +('7', '18', '13', '6502', '17425', '0'), +('7', '18', '13', '71308', '7822', '0'), +('7', '18', '13', '6691', '7373', '0'), +('7', '18', '14', '27715', '25245', '0'), +('7', '18', '14', '6502', '17425', '0'), +('7', '18', '14', '11644', '11154', '0'), +('7', '18', '14', '71308', '7822', '0'), +('7', '18', '11', '14762', '854', '0'), +('7', '18', '11', '13748', '489', '0'), +('7', '18', '11', '9246', '453', '0'), +('7', '18', '11', '20677', '69', '0'), +('7', '19', '22', '9246', '0', '0'), +('7', '19', '22', '10323', '0', '0'), +('7', '19', '22', '21509', '0', '0'), +('7', '19', '22', '8332', '0', '0'), +('7', '19', '1', '14701', '4052', '0'), +('7', '19', '1', '14702', '2850', '0'), +('7', '19', '1', '10165', '1638', '0'), +('7', '19', '1', '30361', '1140', '0'), +('7', '19', '2', '10142', '3012', '0'), +('7', '19', '2', '4504', '2158', '0'), +('7', '19', '2', '1405', '1810', '0'), +('7', '19', '2', '2191', '1592', '0'), +('7', '19', '3', '10144', '1206', '0'), +('7', '19', '3', '2403', '1146', '0'), +('7', '19', '3', '14705', '990', '0'), +('7', '19', '3', '14706', '990', '0'), +('7', '19', '5', '14703', '6050', '0'), +('7', '19', '5', '14700', '3753', '0'), +('7', '19', '5', '10055', '3505', '0'), +('7', '19', '5', '2583', '2444', '0'), +('7', '19', '8', '11621', '14377', '0'), +('7', '19', '8', '11562', '9310', '0'), +('7', '19', '8', '27714', '8085', '0'), +('7', '19', '8', '1546', '6920', '0'), +('7', '19', '6', '1557', '6760', '0'), +('7', '19', '6', '1283', '2986', '0'), +('7', '19', '6', '11561', '2499', '0'), +('7', '19', '6', '25062', '768', '0'), +('7', '19', '17', '12256', '7972', '0'), +('7', '19', '17', '1201', '2467', '0'), +('7', '19', '17', '2348', '2126', '0'), +('7', '19', '17', '2341', '1646', '0'), +('7', '19', '7', '2458', '2406', '0'), +('7', '19', '7', '1202', '1988', '0'), +('7', '19', '7', '2342', '1820', '0'), +('7', '19', '7', '1361', '1764', '0'), +('7', '19', '9', '27714', '8085', '0'), +('7', '19', '9', '14650', '1952', '0'), +('7', '19', '9', '1203', '1484', '0'), +('7', '19', '9', '10360', '1351', '0'), +('7', '19', '15', '10366', '8163', '0'), +('7', '19', '15', '10151', '7200', '0'), +('7', '19', '15', '14679', '6255', '0'), +('7', '19', '15', '14678', '5104', '0'), +('7', '19', '20', '11698', '9997', '0'), +('7', '19', '20', '11601', '8187', '0'), +('7', '19', '20', '2917', '5211', '0'), +('7', '19', '20', '1365', '4200', '0'), +('7', '19', '12', '2923', '3654', '0'), +('7', '19', '12', '11624', '2793', '0'), +('7', '19', '12', '1204', '1396', '0'), +('7', '19', '12', '8909', '1214', '0'), +('7', '19', '18', '2461', '2557', '0'), +('7', '19', '18', '1205', '1056', '0'), +('7', '19', '18', '25725', '978', '0'), +('7', '19', '18', '2343', '785', '0'), +('7', '19', '19', '1280', '3540', '0'), +('7', '19', '19', '1206', '1942', '0'), +('7', '19', '19', '68239', '1360', '0'), +('7', '19', '19', '25726', '791', '0'), +('7', '19', '13', '27715', '25245', '0'), +('7', '19', '13', '6502', '17425', '0'), +('7', '19', '13', '71308', '7822', '0'), +('7', '19', '13', '6691', '7373', '0'), +('7', '19', '14', '27715', '25245', '0'), +('7', '19', '14', '6502', '17425', '0'), +('7', '19', '14', '11644', '11154', '0'), +('7', '19', '14', '71308', '7822', '0'), +('7', '19', '11', '14762', '854', '0'), +('7', '19', '11', '13748', '489', '0'), +('7', '19', '11', '9246', '453', '0'), +('7', '19', '11', '20677', '69', '0'), +('7', '20', '22', '9246', '0', '0'), +('7', '20', '22', '10323', '0', '0'), +('7', '20', '22', '21509', '0', '0'), +('7', '20', '22', '8332', '0', '0'), +('7', '20', '1', '14701', '4052', '0'), +('7', '20', '1', '14702', '2850', '0'), +('7', '20', '1', '10165', '1638', '0'), +('7', '20', '1', '30361', '1140', '0'), +('7', '20', '2', '10142', '3012', '0'), +('7', '20', '2', '4504', '2158', '0'), +('7', '20', '2', '1405', '1810', '0'), +('7', '20', '2', '2191', '1592', '0'), +('7', '20', '3', '10144', '1206', '0'), +('7', '20', '3', '2403', '1146', '0'), +('7', '20', '3', '14705', '990', '0'), +('7', '20', '3', '14706', '990', '0'), +('7', '20', '5', '14703', '6050', '0'), +('7', '20', '5', '14700', '3753', '0'), +('7', '20', '5', '10055', '3505', '0'), +('7', '20', '5', '2583', '2444', '0'), +('7', '20', '8', '11621', '14377', '0'), +('7', '20', '8', '11562', '9310', '0'), +('7', '20', '8', '27714', '8111', '0'), +('7', '20', '8', '1546', '6920', '0'), +('7', '20', '6', '1557', '6760', '0'), +('7', '20', '6', '1283', '2986', '0'), +('7', '20', '6', '11561', '2525', '0'), +('7', '20', '6', '25062', '768', '0'), +('7', '20', '17', '12256', '7990', '0'), +('7', '20', '17', '1201', '2467', '0'), +('7', '20', '17', '2348', '2144', '0'), +('7', '20', '17', '2341', '1646', '0'), +('7', '20', '7', '2458', '2406', '0'), +('7', '20', '7', '1202', '2021', '0'), +('7', '20', '7', '2342', '1831', '0'), +('7', '20', '7', '1361', '1764', '0'), +('7', '20', '9', '27714', '8111', '0'), +('7', '20', '9', '14650', '1952', '0'), +('7', '20', '9', '1203', '1502', '0'), +('7', '20', '9', '10360', '1351', '0'), +('7', '20', '15', '10366', '8163', '0'), +('7', '20', '15', '10151', '7200', '0'), +('7', '20', '15', '14679', '6255', '0'), +('7', '20', '15', '14678', '5104', '0'), +('7', '20', '20', '11698', '9997', '0'), +('7', '20', '20', '11601', '8223', '0'), +('7', '20', '20', '2917', '5211', '0'), +('7', '20', '20', '1365', '4200', '0'), +('7', '20', '12', '2923', '3654', '0'), +('7', '20', '12', '11624', '2818', '0'), +('7', '20', '12', '1204', '1396', '0'), +('7', '20', '12', '8909', '1223', '0'), +('7', '20', '18', '2461', '2557', '0'), +('7', '20', '18', '1205', '1056', '0'), +('7', '20', '18', '25725', '978', '0'), +('7', '20', '18', '2343', '785', '0'), +('7', '20', '19', '1280', '3540', '0'), +('7', '20', '19', '1206', '1975', '0'), +('7', '20', '19', '68239', '1360', '0'), +('7', '20', '19', '25726', '791', '0'), +('7', '20', '13', '27715', '26223', '0'), +('7', '20', '13', '6502', '18105', '0'), +('7', '20', '13', '71308', '8134', '0'), +('7', '20', '13', '6691', '7673', '0'), +('7', '20', '14', '27715', '26223', '0'), +('7', '20', '14', '6502', '18105', '0'), +('7', '20', '14', '11644', '11154', '0'), +('7', '20', '14', '71308', '8134', '0'), +('7', '20', '11', '14762', '854', '0'), +('7', '20', '11', '13748', '489', '0'), +('7', '20', '11', '9246', '453', '0'), +('7', '20', '11', '20677', '69', '0'), +('7', '21', '22', '9246', '0', '0'), +('7', '21', '22', '10323', '0', '0'), +('7', '21', '22', '21509', '0', '0'), +('7', '21', '22', '8332', '0', '0'), +('7', '21', '1', '14701', '4052', '0'), +('7', '21', '1', '14702', '2850', '0'), +('7', '21', '1', '10165', '1638', '0'), +('7', '21', '1', '30361', '1140', '0'), +('7', '21', '2', '10142', '3012', '0'), +('7', '21', '2', '4504', '2158', '0'), +('7', '21', '2', '1405', '1810', '0'), +('7', '21', '2', '2191', '1592', '0'), +('7', '21', '3', '10144', '1206', '0'), +('7', '21', '3', '2403', '1146', '0'), +('7', '21', '3', '14705', '990', '0'), +('7', '21', '3', '14706', '990', '0'), +('7', '21', '5', '14703', '6050', '0'), +('7', '21', '5', '14700', '3753', '0'), +('7', '21', '5', '10055', '3505', '0'), +('7', '21', '5', '2583', '2444', '0'), +('7', '21', '8', '11621', '14377', '0'), +('7', '21', '8', '11562', '9310', '0'), +('7', '21', '8', '27714', '8140', '0'), +('7', '21', '8', '1546', '6920', '0'), +('7', '21', '6', '1557', '6760', '0'), +('7', '21', '6', '1283', '2986', '0'), +('7', '21', '6', '11561', '2554', '0'), +('7', '21', '6', '25062', '768', '0'), +('7', '21', '17', '12256', '8011', '0'), +('7', '21', '17', '1201', '2467', '0'), +('7', '21', '17', '2348', '2165', '0'), +('7', '21', '17', '2341', '1646', '0'), +('7', '21', '7', '2458', '2406', '0'), +('7', '21', '7', '1202', '2059', '0'), +('7', '21', '7', '2342', '1843', '0'), +('7', '21', '7', '1361', '1764', '0'), +('7', '21', '9', '27714', '8140', '0'), +('7', '21', '9', '14650', '1952', '0'), +('7', '21', '9', '1203', '1523', '0'), +('7', '21', '9', '10360', '1351', '0'), +('7', '21', '15', '10366', '8163', '0'), +('7', '21', '15', '10151', '7200', '0'), +('7', '21', '15', '14679', '6255', '0'), +('7', '21', '15', '14678', '5104', '0'), +('7', '21', '20', '11698', '9997', '0'), +('7', '21', '20', '11601', '8266', '0'), +('7', '21', '20', '2917', '5211', '0'), +('7', '21', '20', '1365', '4200', '0'), +('7', '21', '12', '2923', '3654', '0'), +('7', '21', '12', '11624', '2847', '0'), +('7', '21', '12', '1204', '1396', '0'), +('7', '21', '12', '8909', '1234', '0'), +('7', '21', '18', '2461', '2557', '0'), +('7', '21', '18', '1205', '1056', '0'), +('7', '21', '18', '25725', '978', '0'), +('7', '21', '18', '2343', '785', '0'), +('7', '21', '19', '1280', '3540', '0'), +('7', '21', '19', '1206', '2013', '0'), +('7', '21', '19', '68239', '1360', '0'), +('7', '21', '19', '25726', '791', '0'), +('7', '21', '13', '27715', '26520', '0'), +('7', '21', '13', '6502', '18318', '0'), +('7', '21', '13', '71308', '8219', '0'), +('7', '21', '13', '6691', '7765', '0'), +('7', '21', '14', '27715', '26520', '0'), +('7', '21', '14', '6502', '18318', '0'), +('7', '21', '14', '11644', '11154', '0'), +('7', '21', '14', '71308', '8219', '0'), +('7', '21', '11', '14762', '854', '0'), +('7', '21', '11', '13748', '489', '0'), +('7', '21', '11', '9246', '453', '0'), +('7', '21', '11', '20677', '69', '0'), +('7', '22', '22', '9246', '0', '0'), +('7', '22', '22', '10323', '0', '0'), +('7', '22', '22', '21509', '0', '0'), +('7', '22', '22', '8332', '0', '0'), +('7', '22', '1', '14701', '4052', '0'), +('7', '22', '1', '14702', '2850', '0'), +('7', '22', '1', '10165', '1638', '0'), +('7', '22', '1', '30361', '1140', '0'), +('7', '22', '2', '10142', '3012', '0'), +('7', '22', '2', '4504', '2158', '0'), +('7', '22', '2', '1405', '1810', '0'), +('7', '22', '2', '2191', '1592', '0'), +('7', '22', '3', '10144', '1206', '0'), +('7', '22', '3', '2403', '1146', '0'), +('7', '22', '3', '14705', '990', '0'), +('7', '22', '3', '14706', '990', '0'), +('7', '22', '5', '14703', '6050', '0'), +('7', '22', '5', '14700', '3753', '0'), +('7', '22', '5', '10055', '3505', '0'), +('7', '22', '5', '2583', '2444', '0'), +('7', '22', '8', '11621', '14377', '0'), +('7', '22', '8', '11562', '9310', '0'), +('7', '22', '8', '27714', '8166', '0'), +('7', '22', '8', '1546', '6920', '0'), +('7', '22', '6', '1557', '6760', '0'), +('7', '22', '6', '1283', '2986', '0'), +('7', '22', '6', '11561', '2580', '0'), +('7', '22', '6', '25062', '768', '0'), +('7', '22', '17', '12256', '8029', '0'), +('7', '22', '17', '1201', '2467', '0'), +('7', '22', '17', '2348', '2183', '0'), +('7', '22', '17', '2341', '1646', '0'), +('7', '22', '7', '2458', '2406', '0'), +('7', '22', '7', '1202', '2092', '0'), +('7', '22', '7', '2342', '1854', '0'), +('7', '22', '7', '1361', '1764', '0'), +('7', '22', '9', '27714', '8166', '0'), +('7', '22', '9', '14650', '1952', '0'), +('7', '22', '9', '1203', '1542', '0'), +('7', '22', '9', '10360', '1351', '0'), +('7', '22', '15', '10366', '8163', '0'), +('7', '22', '15', '10151', '7200', '0'), +('7', '22', '15', '14679', '6255', '0'), +('7', '22', '15', '14678', '5104', '0'), +('7', '22', '20', '11698', '9997', '0'), +('7', '22', '20', '11601', '8302', '0'), +('7', '22', '20', '2917', '5211', '0'), +('7', '22', '20', '1365', '4200', '0'), +('7', '22', '12', '2923', '3654', '0'), +('7', '22', '12', '11624', '2873', '0'), +('7', '22', '12', '1204', '1396', '0'), +('7', '22', '12', '8909', '1243', '0'), +('7', '22', '18', '2461', '2557', '0'), +('7', '22', '18', '1205', '1056', '0'), +('7', '22', '18', '25725', '978', '0'), +('7', '22', '18', '2343', '785', '0'), +('7', '22', '19', '1280', '3540', '0'), +('7', '22', '19', '1206', '2046', '0'), +('7', '22', '19', '68239', '1360', '0'), +('7', '22', '19', '25726', '791', '0'), +('7', '22', '13', '27715', '26860', '0'), +('7', '22', '13', '6502', '18530', '0'), +('7', '22', '13', '71308', '8304', '0'), +('7', '22', '13', '6691', '7858', '0'), +('7', '22', '14', '27715', '26860', '0'), +('7', '22', '14', '6502', '18530', '0'), +('7', '22', '14', '11644', '11154', '0'), +('7', '22', '14', '71308', '8304', '0'), +('7', '22', '11', '14762', '854', '0'), +('7', '22', '11', '13748', '489', '0'), +('7', '22', '11', '9246', '453', '0'), +('7', '22', '11', '20677', '69', '0'), +('7', '23', '22', '9246', '0', '0'), +('7', '23', '22', '10323', '0', '0'), +('7', '23', '22', '21509', '0', '0'), +('7', '23', '22', '8332', '0', '0'), +('7', '23', '1', '14701', '4052', '0'), +('7', '23', '1', '14702', '2850', '0'), +('7', '23', '1', '10165', '1638', '0'), +('7', '23', '1', '30361', '1140', '0'), +('7', '23', '2', '10142', '3012', '0'), +('7', '23', '2', '4504', '2158', '0'), +('7', '23', '2', '1405', '1810', '0'), +('7', '23', '2', '2191', '1592', '0'), +('7', '23', '3', '10144', '1206', '0'), +('7', '23', '3', '2403', '1146', '0'), +('7', '23', '3', '14705', '990', '0'), +('7', '23', '3', '14706', '990', '0'), +('7', '23', '5', '14703', '6050', '0'), +('7', '23', '5', '14700', '3753', '0'), +('7', '23', '5', '10055', '3505', '0'), +('7', '23', '5', '2583', '2444', '0'), +('7', '23', '8', '11621', '14377', '0'), +('7', '23', '8', '11562', '9310', '0'), +('7', '23', '8', '27714', '8195', '0'), +('7', '23', '8', '1546', '6920', '0'), +('7', '23', '6', '1557', '6760', '0'), +('7', '23', '6', '1283', '2986', '0'), +('7', '23', '6', '11561', '2609', '0'), +('7', '23', '6', '25062', '768', '0'), +('7', '23', '17', '12256', '8050', '0'), +('7', '23', '17', '1201', '2467', '0'), +('7', '23', '17', '2348', '2205', '0'), +('7', '23', '17', '2341', '1646', '0'), +('7', '23', '7', '2458', '2406', '0'), +('7', '23', '7', '1202', '2130', '0'), +('7', '23', '7', '2342', '1867', '0'), +('7', '23', '7', '1361', '1764', '0'), +('7', '23', '9', '27714', '8195', '0'), +('7', '23', '9', '14650', '1952', '0'), +('7', '23', '9', '1203', '1563', '0'), +('7', '23', '9', '10360', '1351', '0'), +('7', '23', '15', '10366', '8163', '0'), +('7', '23', '15', '10151', '7200', '0'), +('7', '23', '15', '14679', '6255', '0'), +('7', '23', '15', '14678', '5104', '0'), +('7', '23', '20', '11698', '9997', '0'), +('7', '23', '20', '11601', '8344', '0'), +('7', '23', '20', '2917', '5211', '0'), +('7', '23', '20', '1365', '4200', '0'), +('7', '23', '12', '2923', '3654', '0'), +('7', '23', '12', '11624', '2902', '0'), +('7', '23', '12', '1204', '1396', '0'), +('7', '23', '12', '8909', '1254', '0'), +('7', '23', '18', '2461', '2557', '0'), +('7', '23', '18', '1205', '1056', '0'), +('7', '23', '18', '25725', '978', '0'), +('7', '23', '18', '2343', '785', '0'), +('7', '23', '19', '1280', '3540', '0'), +('7', '23', '19', '1206', '2084', '0'), +('7', '23', '19', '68239', '1360', '0'), +('7', '23', '19', '25726', '791', '0'), +('7', '23', '13', '27715', '27158', '0'), +('7', '23', '13', '6502', '18743', '0'), +('7', '23', '13', '71308', '8389', '0'), +('7', '23', '13', '6691', '7927', '0'), +('7', '23', '14', '27715', '27158', '0'), +('7', '23', '14', '6502', '18743', '0'), +('7', '23', '14', '11644', '11154', '0'), +('7', '23', '14', '71308', '8389', '0'), +('7', '23', '11', '14762', '854', '0'), +('7', '23', '11', '13748', '489', '0'), +('7', '23', '11', '9246', '453', '0'), +('7', '23', '11', '20677', '69', '0'), +('7', '24', '22', '9246', '0', '0'), +('7', '24', '22', '10323', '0', '0'), +('7', '24', '22', '21509', '0', '0'), +('7', '24', '22', '8332', '0', '0'), +('7', '24', '1', '14701', '4052', '0'), +('7', '24', '1', '14702', '2850', '0'), +('7', '24', '1', '10165', '1638', '0'), +('7', '24', '1', '30361', '1140', '0'), +('7', '24', '2', '10142', '3012', '0'), +('7', '24', '2', '4504', '2158', '0'), +('7', '24', '2', '1405', '1810', '0'), +('7', '24', '2', '2191', '1592', '0'), +('7', '24', '3', '10144', '1206', '0'), +('7', '24', '3', '2403', '1146', '0'), +('7', '24', '3', '14705', '990', '0'), +('7', '24', '3', '14706', '990', '0'), +('7', '24', '5', '14703', '6050', '0'), +('7', '24', '5', '14700', '3753', '0'), +('7', '24', '5', '10055', '3505', '0'), +('7', '24', '5', '2583', '2444', '0'), +('7', '24', '8', '11621', '14377', '0'), +('7', '24', '8', '11562', '9310', '0'), +('7', '24', '8', '27714', '8225', '0'), +('7', '24', '8', '1546', '6920', '0'), +('7', '24', '6', '1557', '6760', '0'), +('7', '24', '6', '1283', '2986', '0'), +('7', '24', '6', '11561', '2639', '0'), +('7', '24', '6', '25062', '768', '0'), +('7', '24', '17', '12256', '8071', '0'), +('7', '24', '17', '1201', '2467', '0'), +('7', '24', '17', '2348', '2226', '0'), +('7', '24', '17', '2341', '1646', '0'), +('7', '24', '7', '2458', '2406', '0'), +('7', '24', '7', '1202', '2168', '0'), +('7', '24', '7', '2342', '1879', '0'), +('7', '24', '7', '1361', '1764', '0'), +('7', '24', '9', '27714', '8225', '0'), +('7', '24', '9', '14650', '1952', '0'), +('7', '24', '9', '1203', '1584', '0'), +('7', '24', '9', '10360', '1351', '0'), +('7', '24', '15', '10366', '8163', '0'), +('7', '24', '15', '10151', '7200', '0'), +('7', '24', '15', '14679', '6255', '0'), +('7', '24', '15', '14678', '5104', '0'), +('7', '24', '20', '11698', '9997', '0'), +('7', '24', '20', '11601', '8386', '0'), +('7', '24', '20', '2917', '5211', '0'), +('7', '24', '20', '1365', '4200', '0'), +('7', '24', '12', '2923', '3654', '0'), +('7', '24', '12', '11624', '2932', '0'), +('7', '24', '12', '1204', '1396', '0'), +('7', '24', '12', '8909', '1264', '0'), +('7', '24', '18', '2461', '2557', '0'), +('7', '24', '18', '1205', '1056', '0'), +('7', '24', '18', '25725', '978', '0'), +('7', '24', '18', '2343', '785', '0'), +('7', '24', '19', '1280', '3540', '0'), +('7', '24', '19', '1206', '2122', '0'), +('7', '24', '19', '68239', '1360', '0'), +('7', '24', '19', '25726', '791', '0'), +('7', '24', '13', '27715', '27455', '0'), +('7', '24', '13', '6502', '18955', '0'), +('7', '24', '13', '71308', '8474', '0'), +('7', '24', '13', '6691', '8020', '0'), +('7', '24', '14', '27715', '27455', '0'), +('7', '24', '14', '6502', '18955', '0'), +('7', '24', '14', '11644', '11154', '0'), +('7', '24', '14', '71308', '8474', '0'), +('7', '24', '11', '14762', '854', '0'), +('7', '24', '11', '13748', '489', '0'), +('7', '24', '11', '9246', '453', '0'), +('7', '24', '11', '20677', '69', '0'), +('7', '25', '22', '9246', '0', '0'), +('7', '25', '22', '10323', '0', '0'), +('7', '25', '22', '21509', '0', '0'), +('7', '25', '22', '8332', '0', '0'), +('7', '25', '1', '14701', '4052', '0'), +('7', '25', '1', '14702', '2850', '0'), +('7', '25', '1', '10165', '1638', '0'), +('7', '25', '1', '30361', '1140', '0'), +('7', '25', '2', '10142', '3012', '0'), +('7', '25', '2', '4504', '2158', '0'), +('7', '25', '2', '1405', '1810', '0'), +('7', '25', '2', '2191', '1592', '0'), +('7', '25', '3', '10144', '1206', '0'), +('7', '25', '3', '2403', '1146', '0'), +('7', '25', '3', '14705', '990', '0'), +('7', '25', '3', '14706', '990', '0'), +('7', '25', '5', '14703', '6050', '0'), +('7', '25', '5', '14700', '3753', '0'), +('7', '25', '5', '10055', '3505', '0'), +('7', '25', '5', '2583', '2444', '0'), +('7', '25', '8', '11621', '14377', '0'), +('7', '25', '8', '11562', '9310', '0'), +('7', '25', '8', '27714', '8250', '0'), +('7', '25', '8', '1546', '6920', '0'), +('7', '25', '6', '1557', '6760', '0'), +('7', '25', '6', '1283', '2986', '0'), +('7', '25', '6', '11561', '2664', '0'), +('7', '25', '6', '25062', '768', '0'), +('7', '25', '17', '12256', '8089', '0'), +('7', '25', '17', '1201', '2467', '0'), +('7', '25', '17', '2348', '2244', '0'), +('7', '25', '17', '2341', '1646', '0'), +('7', '25', '7', '2458', '2406', '0'), +('7', '25', '7', '1202', '2200', '0'), +('7', '25', '7', '2342', '1890', '0'), +('7', '25', '7', '1361', '1764', '0'), +('7', '25', '9', '27714', '8250', '0'), +('7', '25', '9', '14650', '1952', '0'), +('7', '25', '9', '1203', '1602', '0'), +('7', '25', '9', '10360', '1351', '0'), +('7', '25', '15', '10366', '8163', '0'), +('7', '25', '15', '10151', '7200', '0'), +('7', '25', '15', '14679', '6255', '0'), +('7', '25', '15', '14678', '5104', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '25', '20', '11698', '9997', '0'), +('7', '25', '20', '11601', '8423', '0'), +('7', '25', '20', '2917', '5211', '0'), +('7', '25', '20', '1365', '4200', '0'), +('7', '25', '12', '2923', '3654', '0'), +('7', '25', '12', '11624', '2957', '0'), +('7', '25', '12', '1204', '1396', '0'), +('7', '25', '12', '8909', '1274', '0'), +('7', '25', '18', '2461', '2557', '0'), +('7', '25', '18', '1205', '1056', '0'), +('7', '25', '18', '25725', '978', '0'), +('7', '25', '18', '2343', '785', '0'), +('7', '25', '19', '1280', '3540', '0'), +('7', '25', '19', '1206', '2154', '0'), +('7', '25', '19', '68239', '1360', '0'), +('7', '25', '19', '25726', '791', '0'), +('7', '25', '13', '27715', '27753', '0'), +('7', '25', '13', '6502', '19168', '0'), +('7', '25', '13', '71308', '8587', '0'), +('7', '25', '13', '6691', '8112', '0'), +('7', '25', '14', '27715', '27753', '0'), +('7', '25', '14', '6502', '19168', '0'), +('7', '25', '14', '11644', '11154', '0'), +('7', '25', '14', '71308', '8587', '0'), +('7', '25', '11', '14762', '854', '0'), +('7', '25', '11', '13748', '489', '0'), +('7', '25', '11', '9246', '453', '0'), +('7', '25', '11', '20677', '69', '0'), +('7', '26', '22', '9246', '0', '0'), +('7', '26', '22', '10323', '0', '0'), +('7', '26', '22', '21509', '0', '0'), +('7', '26', '22', '8332', '0', '0'), +('7', '26', '1', '14701', '4052', '0'), +('7', '26', '1', '14702', '2850', '0'), +('7', '26', '1', '10165', '1638', '0'), +('7', '26', '1', '30361', '1140', '0'), +('7', '26', '2', '10142', '3012', '0'), +('7', '26', '2', '4504', '2158', '0'), +('7', '26', '2', '1405', '1810', '0'), +('7', '26', '2', '2191', '1592', '0'), +('7', '26', '3', '10144', '1206', '0'), +('7', '26', '3', '2403', '1146', '0'), +('7', '26', '3', '14705', '990', '0'), +('7', '26', '3', '14706', '990', '0'), +('7', '26', '5', '14703', '6050', '0'), +('7', '26', '5', '14700', '3753', '0'), +('7', '26', '5', '10055', '3505', '0'), +('7', '26', '5', '2583', '2444', '0'), +('7', '26', '8', '11621', '14377', '0'), +('7', '26', '8', '11562', '9310', '0'), +('7', '26', '8', '27714', '8280', '0'), +('7', '26', '8', '1546', '6920', '0'), +('7', '26', '6', '1557', '6760', '0'), +('7', '26', '6', '1283', '2986', '0'), +('7', '26', '6', '11561', '2694', '0'), +('7', '26', '6', '25062', '768', '0'), +('7', '26', '17', '12256', '8111', '0'), +('7', '26', '17', '1201', '2467', '0'), +('7', '26', '17', '2348', '2265', '0'), +('7', '26', '17', '2341', '1646', '0'), +('7', '26', '7', '2458', '2406', '0'), +('7', '26', '7', '1202', '2238', '0'), +('7', '26', '7', '2342', '1903', '0'), +('7', '26', '7', '1361', '1764', '0'), +('7', '26', '9', '27714', '8280', '0'), +('7', '26', '9', '14650', '1952', '0'), +('7', '26', '9', '1203', '1623', '0'), +('7', '26', '9', '10360', '1351', '0'), +('7', '26', '15', '10366', '8163', '0'), +('7', '26', '15', '10151', '7200', '0'), +('7', '26', '15', '14679', '6255', '0'), +('7', '26', '15', '14678', '5104', '0'), +('7', '26', '20', '11698', '9997', '0'), +('7', '26', '20', '11601', '8465', '0'), +('7', '26', '20', '2917', '5211', '0'), +('7', '26', '20', '1365', '4200', '0'), +('7', '26', '12', '2923', '3654', '0'), +('7', '26', '12', '11624', '2987', '0'), +('7', '26', '12', '1204', '1396', '0'), +('7', '26', '12', '8909', '1284', '0'), +('7', '26', '18', '2461', '2557', '0'), +('7', '26', '18', '1205', '1056', '0'), +('7', '26', '18', '25725', '978', '0'), +('7', '26', '18', '2343', '785', '0'), +('7', '26', '19', '1280', '3540', '0'), +('7', '26', '19', '1206', '2193', '0'), +('7', '26', '19', '68239', '1360', '0'), +('7', '26', '19', '25726', '791', '0'), +('7', '26', '13', '27715', '28050', '0'), +('7', '26', '13', '6502', '19380', '0'), +('7', '26', '13', '71308', '8672', '0'), +('7', '26', '13', '6691', '8204', '0'), +('7', '26', '14', '27715', '28050', '0'), +('7', '26', '14', '6502', '19380', '0'), +('7', '26', '14', '11644', '11154', '0'), +('7', '26', '14', '71308', '8672', '0'), +('7', '26', '11', '14762', '854', '0'), +('7', '26', '11', '13748', '489', '0'), +('7', '26', '11', '9246', '453', '0'), +('7', '26', '11', '20677', '69', '0'), +('7', '27', '22', '9246', '0', '0'), +('7', '27', '22', '10323', '0', '0'), +('7', '27', '22', '21509', '0', '0'), +('7', '27', '22', '8332', '0', '0'), +('7', '27', '1', '14701', '4052', '0'), +('7', '27', '1', '14702', '2850', '0'), +('7', '27', '1', '10165', '1638', '0'), +('7', '27', '1', '30361', '1140', '0'), +('7', '27', '2', '10142', '3012', '0'), +('7', '27', '2', '4504', '2158', '0'), +('7', '27', '2', '1405', '1810', '0'), +('7', '27', '2', '2191', '1592', '0'), +('7', '27', '3', '10144', '1206', '0'), +('7', '27', '3', '2403', '1146', '0'), +('7', '27', '3', '14705', '990', '0'), +('7', '27', '3', '14706', '990', '0'), +('7', '27', '5', '14703', '6050', '0'), +('7', '27', '5', '14700', '3753', '0'), +('7', '27', '5', '10055', '3505', '0'), +('7', '27', '5', '2583', '2444', '0'), +('7', '27', '8', '11621', '14377', '0'), +('7', '27', '8', '11562', '9310', '0'), +('7', '27', '8', '27714', '8309', '0'), +('7', '27', '8', '1546', '6920', '0'), +('7', '27', '6', '1557', '6760', '0'), +('7', '27', '6', '1283', '2986', '0'), +('7', '27', '6', '11561', '2723', '0'), +('7', '27', '6', '25062', '768', '0'), +('7', '27', '17', '12256', '8132', '0'), +('7', '27', '17', '1201', '2467', '0'), +('7', '27', '17', '2348', '2286', '0'), +('7', '27', '17', '2341', '1646', '0'), +('7', '27', '7', '2458', '2406', '0'), +('7', '27', '7', '1202', '2276', '0'), +('7', '27', '7', '2342', '1916', '0'), +('7', '27', '7', '1361', '1764', '0'), +('7', '27', '9', '27714', '8309', '0'), +('7', '27', '9', '14650', '1952', '0'), +('7', '27', '9', '1203', '1644', '0'), +('7', '27', '9', '10360', '1351', '0'), +('7', '27', '15', '10366', '8163', '0'), +('7', '27', '15', '10151', '7200', '0'), +('7', '27', '15', '14679', '6255', '0'), +('7', '27', '15', '14678', '5104', '0'), +('7', '27', '20', '11698', '9997', '0'), +('7', '27', '20', '11601', '8507', '0'), +('7', '27', '20', '2917', '5211', '0'), +('7', '27', '20', '1365', '4200', '0'), +('7', '27', '12', '2923', '3654', '0'), +('7', '27', '12', '11624', '3017', '0'), +('7', '27', '12', '1204', '1396', '0'), +('7', '27', '12', '8909', '1295', '0'), +('7', '27', '18', '2461', '2557', '0'), +('7', '27', '18', '1205', '1056', '0'), +('7', '27', '18', '25725', '978', '0'), +('7', '27', '18', '2343', '785', '0'), +('7', '27', '19', '1280', '3540', '0'), +('7', '27', '19', '1206', '2231', '0'), +('7', '27', '19', '68239', '1360', '0'), +('7', '27', '19', '25726', '791', '0'), +('7', '27', '13', '27715', '28348', '0'), +('7', '27', '13', '6502', '19593', '0'), +('7', '27', '13', '71308', '8757', '0'), +('7', '27', '13', '6691', '8297', '0'), +('7', '27', '14', '27715', '28348', '0'), +('7', '27', '14', '6502', '19593', '0'), +('7', '27', '14', '11644', '11154', '0'), +('7', '27', '14', '71308', '8757', '0'), +('7', '27', '11', '14762', '854', '0'), +('7', '27', '11', '13748', '489', '0'), +('7', '27', '11', '9246', '453', '0'), +('7', '27', '11', '20677', '69', '0'), +('7', '28', '22', '9246', '0', '0'), +('7', '28', '22', '10323', '0', '0'), +('7', '28', '22', '21509', '0', '0'), +('7', '28', '22', '8332', '0', '0'), +('7', '28', '1', '14701', '4052', '0'), +('7', '28', '1', '14702', '2850', '0'), +('7', '28', '1', '10165', '1638', '0'), +('7', '28', '1', '30361', '1140', '0'), +('7', '28', '2', '10142', '3012', '0'), +('7', '28', '2', '4504', '2158', '0'), +('7', '28', '2', '1405', '1810', '0'), +('7', '28', '2', '2191', '1592', '0'), +('7', '28', '3', '10144', '1206', '0'), +('7', '28', '3', '2403', '1146', '0'), +('7', '28', '3', '14705', '990', '0'), +('7', '28', '3', '14706', '990', '0'), +('7', '28', '5', '14703', '6050', '0'), +('7', '28', '5', '14700', '3753', '0'), +('7', '28', '5', '10055', '3505', '0'), +('7', '28', '5', '2583', '2444', '0'), +('7', '28', '8', '11621', '14377', '0'), +('7', '28', '8', '11562', '9310', '0'), +('7', '28', '8', '27714', '8335', '0'), +('7', '28', '8', '1546', '6920', '0'), +('7', '28', '6', '1557', '6760', '0'), +('7', '28', '6', '1283', '2986', '0'), +('7', '28', '6', '11561', '2749', '0'), +('7', '28', '6', '25062', '768', '0'), +('7', '28', '17', '12256', '8150', '0'), +('7', '28', '17', '1201', '2467', '0'), +('7', '28', '17', '2348', '2304', '0'), +('7', '28', '17', '2341', '1646', '0'), +('7', '28', '7', '2458', '2406', '0'), +('7', '28', '7', '1202', '2309', '0'), +('7', '28', '7', '2342', '1927', '0'), +('7', '28', '7', '1361', '1764', '0'), +('7', '28', '9', '27714', '8335', '0'), +('7', '28', '9', '14650', '1952', '0'), +('7', '28', '9', '1203', '1662', '0'), +('7', '28', '9', '10360', '1351', '0'), +('7', '28', '15', '10366', '8163', '0'), +('7', '28', '15', '10151', '7200', '0'), +('7', '28', '15', '14679', '6255', '0'), +('7', '28', '15', '14678', '5104', '0'), +('7', '28', '20', '11698', '9997', '0'), +('7', '28', '20', '11601', '8544', '0'), +('7', '28', '20', '2917', '5211', '0'), +('7', '28', '20', '1365', '4200', '0'), +('7', '28', '12', '2923', '3654', '0'), +('7', '28', '12', '11624', '3042', '0'), +('7', '28', '12', '1204', '1396', '0'), +('7', '28', '12', '8909', '1304', '0'), +('7', '28', '18', '2461', '2557', '0'), +('7', '28', '18', '1205', '1056', '0'), +('7', '28', '18', '25725', '978', '0'), +('7', '28', '18', '2343', '785', '0'), +('7', '28', '19', '1280', '3540', '0'), +('7', '28', '19', '1206', '2263', '0'), +('7', '28', '19', '68239', '1360', '0'), +('7', '28', '19', '25726', '791', '0'), +('7', '28', '13', '27715', '28645', '0'), +('7', '28', '13', '6502', '19805', '0'), +('7', '28', '13', '71308', '8842', '0'), +('7', '28', '13', '6691', '8366', '0'), +('7', '28', '14', '27715', '28645', '0'), +('7', '28', '14', '6502', '19805', '0'), +('7', '28', '14', '11644', '11154', '0'), +('7', '28', '14', '71308', '8842', '0'), +('7', '28', '11', '14762', '854', '0'), +('7', '28', '11', '13748', '489', '0'), +('7', '28', '11', '9246', '453', '0'), +('7', '28', '11', '20677', '69', '0'), +('7', '29', '22', '9246', '0', '0'), +('7', '29', '22', '10323', '0', '0'), +('7', '29', '22', '21509', '0', '0'), +('7', '29', '22', '8332', '0', '0'), +('7', '29', '1', '14701', '4052', '0'), +('7', '29', '1', '14702', '2850', '0'), +('7', '29', '1', '10165', '1638', '0'), +('7', '29', '1', '30361', '1140', '0'), +('7', '29', '2', '10142', '3012', '0'), +('7', '29', '2', '4504', '2158', '0'), +('7', '29', '2', '1405', '1810', '0'), +('7', '29', '2', '2191', '1592', '0'), +('7', '29', '3', '10144', '1206', '0'), +('7', '29', '3', '2403', '1146', '0'), +('7', '29', '3', '14705', '990', '0'), +('7', '29', '3', '14706', '990', '0'), +('7', '29', '5', '14703', '6050', '0'), +('7', '29', '5', '14700', '3753', '0'), +('7', '29', '5', '10055', '3505', '0'), +('7', '29', '5', '2583', '2444', '0'), +('7', '29', '8', '11621', '14377', '0'), +('7', '29', '8', '11562', '9310', '0'), +('7', '29', '8', '27714', '8364', '0'), +('7', '29', '8', '1546', '6920', '0'), +('7', '29', '6', '1557', '6760', '0'), +('7', '29', '6', '1283', '2986', '0'), +('7', '29', '6', '11561', '2778', '0'), +('7', '29', '6', '25062', '768', '0'), +('7', '29', '17', '12256', '8171', '0'), +('7', '29', '17', '1201', '2467', '0'), +('7', '29', '17', '2348', '2325', '0'), +('7', '29', '17', '2341', '1646', '0'), +('7', '29', '7', '2458', '2406', '0'), +('7', '29', '7', '1202', '2347', '0'), +('7', '29', '7', '2342', '1939', '0'), +('7', '29', '7', '1361', '1764', '0'), +('7', '29', '9', '27714', '8364', '0'), +('7', '29', '9', '14650', '1952', '0'), +('7', '29', '9', '1203', '1684', '0'), +('7', '29', '9', '10360', '1351', '0'), +('7', '29', '15', '10366', '8163', '0'), +('7', '29', '15', '10151', '7200', '0'), +('7', '29', '15', '14679', '6255', '0'), +('7', '29', '15', '14678', '5104', '0'), +('7', '29', '20', '11698', '9997', '0'), +('7', '29', '20', '11601', '8586', '0'), +('7', '29', '20', '2917', '5211', '0'), +('7', '29', '20', '1365', '4200', '0'), +('7', '29', '12', '2923', '3654', '0'), +('7', '29', '12', '11624', '3072', '0'), +('7', '29', '12', '1204', '1396', '0'), +('7', '29', '12', '8909', '1315', '0'), +('7', '29', '18', '2461', '2557', '0'), +('7', '29', '18', '1205', '1056', '0'), +('7', '29', '18', '25725', '978', '0'), +('7', '29', '18', '2343', '785', '0'), +('7', '29', '19', '1280', '3540', '0'), +('7', '29', '19', '1206', '2301', '0'), +('7', '29', '19', '68239', '1360', '0'), +('7', '29', '19', '25726', '791', '0'), +('7', '29', '13', '27715', '28943', '0'), +('7', '29', '13', '6502', '20018', '0'), +('7', '29', '13', '71308', '8955', '0'), +('7', '29', '13', '6691', '8458', '0'), +('7', '29', '14', '27715', '28943', '0'), +('7', '29', '14', '6502', '20018', '0'), +('7', '29', '14', '11644', '11154', '0'), +('7', '29', '14', '71308', '8955', '0'), +('7', '29', '11', '14762', '854', '0'), +('7', '29', '11', '13748', '489', '0'), +('7', '29', '11', '9246', '453', '0'), +('7', '29', '11', '20677', '69', '0'), +('7', '30', '22', '9246', '0', '0'), +('7', '30', '22', '10323', '0', '0'), +('7', '30', '22', '21509', '0', '0'), +('7', '30', '22', '8332', '0', '0'), +('7', '30', '1', '14701', '4052', '0'), +('7', '30', '1', '14702', '2850', '0'), +('7', '30', '1', '10165', '1638', '0'), +('7', '30', '1', '30361', '1140', '0'), +('7', '30', '2', '10142', '3012', '0'), +('7', '30', '2', '4504', '2158', '0'), +('7', '30', '2', '1405', '1810', '0'), +('7', '30', '2', '2191', '1592', '0'), +('7', '30', '3', '10144', '1206', '0'), +('7', '30', '3', '2403', '1146', '0'), +('7', '30', '3', '14705', '990', '0'), +('7', '30', '3', '14706', '990', '0'), +('7', '30', '5', '14703', '6050', '0'), +('7', '30', '5', '14700', '3753', '0'), +('7', '30', '5', '10055', '3505', '0'), +('7', '30', '5', '2583', '2444', '0'), +('7', '30', '8', '11621', '14377', '0'), +('7', '30', '8', '11562', '9310', '0'), +('7', '30', '8', '27714', '8394', '0'), +('7', '30', '8', '1546', '6920', '0'), +('7', '30', '6', '1557', '6760', '0'), +('7', '30', '6', '1283', '2986', '0'), +('7', '30', '6', '11561', '2808', '0'), +('7', '30', '6', '25062', '768', '0'), +('7', '30', '17', '12256', '8192', '0'), +('7', '30', '17', '1201', '2467', '0'), +('7', '30', '17', '2348', '2347', '0'), +('7', '30', '17', '2341', '1646', '0'), +('7', '30', '7', '2458', '2406', '0'), +('7', '30', '7', '1202', '2385', '0'), +('7', '30', '7', '2342', '1952', '0'), +('7', '30', '7', '1361', '1764', '0'), +('7', '30', '9', '27714', '8394', '0'), +('7', '30', '9', '14650', '1952', '0'), +('7', '30', '9', '1203', '1705', '0'), +('7', '30', '9', '10360', '1351', '0'), +('7', '30', '15', '10366', '8163', '0'), +('7', '30', '15', '10151', '7200', '0'), +('7', '30', '15', '14679', '6255', '0'), +('7', '30', '15', '14678', '5104', '0'), +('7', '30', '20', '11698', '9997', '0'), +('7', '30', '20', '11601', '8628', '0'), +('7', '30', '20', '2917', '5211', '0'), +('7', '30', '20', '1365', '4200', '0'), +('7', '30', '12', '2923', '3654', '0'), +('7', '30', '12', '11624', '3101', '0'), +('7', '30', '12', '1204', '1396', '0'), +('7', '30', '12', '8909', '1325', '0'), +('7', '30', '18', '2461', '2557', '0'), +('7', '30', '18', '1205', '1056', '0'), +('7', '30', '18', '25725', '978', '0'), +('7', '30', '18', '2343', '785', '0'), +('7', '30', '19', '1280', '3540', '0'), +('7', '30', '19', '1206', '2339', '0'), +('7', '30', '19', '68239', '1360', '0'), +('7', '30', '19', '25726', '791', '0'), +('7', '30', '13', '27715', '29283', '0'), +('7', '30', '13', '6502', '20230', '0'), +('7', '30', '13', '71308', '9040', '0'), +('7', '30', '13', '6691', '8551', '0'), +('7', '30', '14', '27715', '29283', '0'), +('7', '30', '14', '6502', '20230', '0'), +('7', '30', '14', '11644', '11154', '0'), +('7', '30', '14', '71308', '9040', '0'), +('7', '30', '11', '14762', '854', '0'), +('7', '30', '11', '13748', '489', '0'), +('7', '30', '11', '9246', '453', '0'), +('7', '30', '11', '20677', '69', '0'), +('7', '31', '22', '9246', '0', '0'), +('7', '31', '22', '10323', '0', '0'), +('7', '31', '22', '21509', '0', '0'), +('7', '31', '22', '8332', '0', '0'), +('7', '31', '1', '14701', '4052', '0'), +('7', '31', '1', '14702', '2850', '0'), +('7', '31', '1', '10165', '1638', '0'), +('7', '31', '1', '30361', '1140', '0'), +('7', '31', '2', '10142', '3012', '0'), +('7', '31', '2', '4504', '2158', '0'), +('7', '31', '2', '1405', '1810', '0'), +('7', '31', '2', '2191', '1592', '0'), +('7', '31', '3', '10144', '1206', '0'), +('7', '31', '3', '2403', '1146', '0'), +('7', '31', '3', '14705', '990', '0'), +('7', '31', '3', '14706', '990', '0'), +('7', '31', '5', '14703', '6050', '0'), +('7', '31', '5', '14700', '3753', '0'), +('7', '31', '5', '10055', '3505', '0'), +('7', '31', '5', '2583', '2444', '0'), +('7', '31', '8', '11621', '14377', '0'), +('7', '31', '8', '11562', '9310', '0'), +('7', '31', '8', '27714', '8423', '0'), +('7', '31', '8', '1546', '6920', '0'), +('7', '31', '6', '1557', '6760', '0'), +('7', '31', '6', '1283', '2986', '0'), +('7', '31', '6', '11561', '2838', '0'), +('7', '31', '6', '25062', '768', '0'), +('7', '31', '17', '12256', '8213', '0'), +('7', '31', '17', '1201', '2467', '0'), +('7', '31', '17', '2348', '2368', '0'), +('7', '31', '17', '2341', '1646', '0'), +('7', '31', '7', '1202', '2423', '0'), +('7', '31', '7', '2458', '2406', '0'), +('7', '31', '7', '2342', '1965', '0'), +('7', '31', '7', '1361', '1764', '0'), +('7', '31', '9', '27714', '8423', '0'), +('7', '31', '9', '14650', '1952', '0'), +('7', '31', '9', '1203', '1726', '0'), +('7', '31', '9', '10360', '1351', '0'), +('7', '31', '15', '10366', '8163', '0'), +('7', '31', '15', '10151', '7200', '0'), +('7', '31', '15', '14679', '6255', '0'), +('7', '31', '15', '14678', '5104', '0'), +('7', '31', '20', '11698', '9997', '0'), +('7', '31', '20', '11601', '8670', '0'), +('7', '31', '20', '2917', '5211', '0'), +('7', '31', '20', '1365', '4200', '0'), +('7', '31', '12', '2923', '3654', '0'), +('7', '31', '12', '11624', '3131', '0'), +('7', '31', '12', '1204', '1396', '0'), +('7', '31', '12', '8909', '1336', '0'), +('7', '31', '18', '2461', '2557', '0'), +('7', '31', '18', '1205', '1056', '0'), +('7', '31', '18', '25725', '978', '0'), +('7', '31', '18', '2343', '785', '0'), +('7', '31', '19', '1280', '3540', '0'), +('7', '31', '19', '1206', '2377', '0'), +('7', '31', '19', '68239', '1360', '0'), +('7', '31', '19', '25726', '791', '0'), +('7', '31', '13', '27715', '29580', '0'), +('7', '31', '13', '6502', '20400', '0'), +('7', '31', '13', '71308', '9125', '0'), +('7', '31', '13', '6691', '8643', '0'), +('7', '31', '14', '27715', '29580', '0'), +('7', '31', '14', '6502', '20400', '0'), +('7', '31', '14', '11644', '11154', '0'), +('7', '31', '14', '71308', '9125', '0'), +('7', '31', '11', '14762', '854', '0'), +('7', '31', '11', '13748', '489', '0'), +('7', '31', '11', '9246', '453', '0'), +('7', '31', '11', '20677', '69', '0'), +('7', '32', '22', '9246', '0', '0'), +('7', '32', '22', '10323', '0', '0'), +('7', '32', '22', '21509', '0', '0'), +('7', '32', '22', '8332', '0', '0'), +('7', '32', '1', '14701', '4052', '0'), +('7', '32', '1', '14702', '2850', '0'), +('7', '32', '1', '10165', '1638', '0'), +('7', '32', '1', '30361', '1140', '0'), +('7', '32', '2', '10142', '3012', '0'), +('7', '32', '2', '4504', '2158', '0'), +('7', '32', '2', '1405', '1810', '0'), +('7', '32', '2', '2191', '1592', '0'), +('7', '32', '3', '10144', '1206', '0'), +('7', '32', '3', '2403', '1146', '0'), +('7', '32', '3', '14705', '990', '0'), +('7', '32', '3', '14706', '990', '0'), +('7', '32', '5', '14703', '6050', '0'), +('7', '32', '5', '14700', '3753', '0'), +('7', '32', '5', '10055', '3505', '0'), +('7', '32', '5', '2583', '2444', '0'), +('7', '32', '8', '11621', '14377', '0'), +('7', '32', '8', '11562', '9310', '0'), +('7', '32', '8', '27714', '8453', '0'), +('7', '32', '8', '1546', '6920', '0'), +('7', '32', '6', '1557', '6760', '0'), +('7', '32', '6', '1283', '2986', '0'), +('7', '32', '6', '11561', '2867', '0'), +('7', '32', '6', '25062', '768', '0'), +('7', '32', '17', '12256', '8234', '0'), +('7', '32', '17', '1201', '2467', '0'), +('7', '32', '17', '2348', '2389', '0'), +('7', '32', '17', '2341', '1646', '0'), +('7', '32', '7', '1202', '2461', '0'), +('7', '32', '7', '2458', '2406', '0'), +('7', '32', '7', '2342', '1977', '0'), +('7', '32', '7', '1361', '1764', '0'), +('7', '32', '9', '27714', '8453', '0'), +('7', '32', '9', '14650', '1952', '0'), +('7', '32', '9', '1203', '1747', '0'), +('7', '32', '9', '10360', '1351', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '32', '15', '10366', '8163', '0'), +('7', '32', '15', '10151', '7200', '0'), +('7', '32', '15', '14679', '6255', '0'), +('7', '32', '15', '14678', '5104', '0'), +('7', '32', '20', '11698', '9997', '0'), +('7', '32', '20', '11601', '8713', '0'), +('7', '32', '20', '2917', '5211', '0'), +('7', '32', '20', '1365', '4200', '0'), +('7', '32', '12', '2923', '3654', '0'), +('7', '32', '12', '11624', '3160', '0'), +('7', '32', '12', '1204', '1396', '0'), +('7', '32', '12', '8909', '1347', '0'), +('7', '32', '18', '2461', '2557', '0'), +('7', '32', '18', '1205', '1056', '0'), +('7', '32', '18', '25725', '978', '0'), +('7', '32', '18', '2343', '785', '0'), +('7', '32', '19', '1280', '3540', '0'), +('7', '32', '19', '1206', '2415', '0'), +('7', '32', '19', '68239', '1360', '0'), +('7', '32', '19', '25726', '791', '0'), +('7', '32', '13', '27715', '29878', '0'), +('7', '32', '13', '6502', '20613', '0'), +('7', '32', '13', '71308', '9210', '0'), +('7', '32', '13', '6691', '8736', '0'), +('7', '32', '14', '27715', '29878', '0'), +('7', '32', '14', '6502', '20613', '0'), +('7', '32', '14', '11644', '11154', '0'), +('7', '32', '14', '71308', '9210', '0'), +('7', '32', '11', '14762', '854', '0'), +('7', '32', '11', '13748', '489', '0'), +('7', '32', '11', '9246', '453', '0'), +('7', '32', '11', '20677', '69', '0'), +('7', '33', '22', '9246', '0', '0'), +('7', '33', '22', '10323', '0', '0'), +('7', '33', '22', '21509', '0', '0'), +('7', '33', '22', '8332', '0', '0'), +('7', '33', '1', '14701', '4052', '0'), +('7', '33', '1', '14702', '2850', '0'), +('7', '33', '1', '10165', '1638', '0'), +('7', '33', '1', '30361', '1140', '0'), +('7', '33', '2', '10142', '3012', '0'), +('7', '33', '2', '4504', '2158', '0'), +('7', '33', '2', '1405', '1810', '0'), +('7', '33', '2', '2191', '1592', '0'), +('7', '33', '3', '10144', '1206', '0'), +('7', '33', '3', '2403', '1146', '0'), +('7', '33', '3', '14705', '990', '0'), +('7', '33', '3', '14706', '990', '0'), +('7', '33', '5', '14703', '6050', '0'), +('7', '33', '5', '14700', '3753', '0'), +('7', '33', '5', '10055', '3505', '0'), +('7', '33', '5', '2583', '2444', '0'), +('7', '33', '8', '11621', '14377', '0'), +('7', '33', '8', '11562', '9310', '0'), +('7', '33', '8', '27714', '8483', '0'), +('7', '33', '8', '1546', '6920', '0'), +('7', '33', '6', '1557', '6760', '0'), +('7', '33', '6', '1283', '2986', '0'), +('7', '33', '6', '11561', '2897', '0'), +('7', '33', '6', '25062', '768', '0'), +('7', '33', '17', '12256', '8256', '0'), +('7', '33', '17', '1201', '2467', '0'), +('7', '33', '17', '2348', '2410', '0'), +('7', '33', '17', '2341', '1646', '0'), +('7', '33', '7', '1202', '2499', '0'), +('7', '33', '7', '2458', '2406', '0'), +('7', '33', '7', '2342', '1990', '0'), +('7', '33', '7', '1361', '1764', '0'), +('7', '33', '9', '27714', '8483', '0'), +('7', '33', '9', '14650', '1952', '0'), +('7', '33', '9', '1203', '1768', '0'), +('7', '33', '9', '10360', '1351', '0'), +('7', '33', '15', '10366', '8163', '0'), +('7', '33', '15', '10151', '7200', '0'), +('7', '33', '15', '14679', '6255', '0'), +('7', '33', '15', '14678', '5104', '0'), +('7', '33', '20', '11698', '9997', '0'), +('7', '33', '20', '11601', '8755', '0'), +('7', '33', '20', '2917', '5211', '0'), +('7', '33', '20', '1365', '4200', '0'), +('7', '33', '12', '2923', '3654', '0'), +('7', '33', '12', '11624', '3190', '0'), +('7', '33', '12', '1204', '1396', '0'), +('7', '33', '12', '8909', '1358', '0'), +('7', '33', '18', '2461', '2557', '0'), +('7', '33', '18', '1205', '1056', '0'), +('7', '33', '18', '25725', '978', '0'), +('7', '33', '18', '2343', '785', '0'), +('7', '33', '19', '1280', '3540', '0'), +('7', '33', '19', '1206', '2453', '0'), +('7', '33', '19', '68239', '1360', '0'), +('7', '33', '19', '25726', '791', '0'), +('7', '33', '13', '27715', '30175', '0'), +('7', '33', '13', '6502', '20825', '0'), +('7', '33', '13', '71308', '9295', '0'), +('7', '33', '13', '6691', '8805', '0'), +('7', '33', '14', '27715', '30175', '0'), +('7', '33', '14', '6502', '20825', '0'), +('7', '33', '14', '11644', '11154', '0'), +('7', '33', '14', '71308', '9295', '0'), +('7', '33', '11', '14762', '854', '0'), +('7', '33', '11', '13748', '489', '0'), +('7', '33', '11', '9246', '453', '0'), +('7', '33', '11', '20677', '69', '0'), +('7', '34', '22', '9246', '0', '0'), +('7', '34', '22', '10323', '0', '0'), +('7', '34', '22', '21509', '0', '0'), +('7', '34', '22', '8332', '0', '0'), +('7', '34', '1', '14701', '4052', '0'), +('7', '34', '1', '14702', '2850', '0'), +('7', '34', '1', '10165', '1638', '0'), +('7', '34', '1', '30361', '1140', '0'), +('7', '34', '2', '10142', '3012', '0'), +('7', '34', '2', '4504', '2158', '0'), +('7', '34', '2', '1405', '1810', '0'), +('7', '34', '2', '2191', '1592', '0'), +('7', '34', '3', '10144', '1206', '0'), +('7', '34', '3', '2403', '1146', '0'), +('7', '34', '3', '14705', '990', '0'), +('7', '34', '3', '14706', '990', '0'), +('7', '34', '5', '14703', '6050', '0'), +('7', '34', '5', '14700', '3753', '0'), +('7', '34', '5', '10055', '3505', '0'), +('7', '34', '5', '2583', '2444', '0'), +('7', '34', '8', '11621', '14377', '0'), +('7', '34', '8', '11562', '9310', '0'), +('7', '34', '8', '27714', '8508', '0'), +('7', '34', '8', '1546', '6920', '0'), +('7', '34', '6', '1557', '6760', '0'), +('7', '34', '6', '1283', '2986', '0'), +('7', '34', '6', '11561', '2922', '0'), +('7', '34', '6', '25062', '768', '0'), +('7', '34', '17', '12256', '8274', '0'), +('7', '34', '17', '1201', '2467', '0'), +('7', '34', '17', '2348', '2428', '0'), +('7', '34', '17', '2329', '1649', '0'), +('7', '34', '7', '1202', '2532', '0'), +('7', '34', '7', '2458', '2406', '0'), +('7', '34', '7', '2342', '2001', '0'), +('7', '34', '7', '1361', '1764', '0'), +('7', '34', '9', '27714', '8508', '0'), +('7', '34', '9', '14650', '1952', '0'), +('7', '34', '9', '1203', '1786', '0'), +('7', '34', '9', '10360', '1351', '0'), +('7', '34', '15', '10366', '8163', '0'), +('7', '34', '15', '10151', '7200', '0'), +('7', '34', '15', '14679', '6255', '0'), +('7', '34', '15', '14678', '5104', '0'), +('7', '34', '20', '11698', '9997', '0'), +('7', '34', '20', '11601', '8791', '0'), +('7', '34', '20', '2917', '5211', '0'), +('7', '34', '20', '1365', '4200', '0'), +('7', '34', '12', '2923', '3654', '0'), +('7', '34', '12', '11624', '3215', '0'), +('7', '34', '12', '1204', '1396', '0'), +('7', '34', '12', '8909', '1367', '0'), +('7', '34', '18', '2461', '2557', '0'), +('7', '34', '18', '1205', '1056', '0'), +('7', '34', '18', '25725', '978', '0'), +('7', '34', '18', '2462', '790', '0'), +('7', '34', '19', '1280', '3540', '0'), +('7', '34', '19', '1206', '2486', '0'), +('7', '34', '19', '68239', '1360', '0'), +('7', '34', '19', '25726', '791', '0'), +('7', '34', '13', '27715', '30473', '0'), +('7', '34', '13', '6502', '21038', '0'), +('7', '34', '13', '71308', '9409', '0'), +('7', '34', '13', '6691', '8897', '0'), +('7', '34', '14', '27715', '30473', '0'), +('7', '34', '14', '6502', '21038', '0'), +('7', '34', '14', '11644', '11154', '0'), +('7', '34', '14', '71308', '9409', '0'), +('7', '34', '11', '14762', '854', '0'), +('7', '34', '11', '13748', '489', '0'), +('7', '34', '11', '9246', '453', '0'), +('7', '34', '11', '20677', '69', '0'), +('7', '35', '22', '9246', '0', '0'), +('7', '35', '22', '10323', '0', '0'), +('7', '35', '22', '21509', '0', '0'), +('7', '35', '22', '8332', '0', '0'), +('7', '35', '1', '14701', '4052', '0'), +('7', '35', '1', '14702', '2850', '0'), +('7', '35', '1', '10165', '1638', '0'), +('7', '35', '1', '30361', '1140', '0'), +('7', '35', '2', '10142', '3012', '0'), +('7', '35', '2', '4504', '2158', '0'), +('7', '35', '2', '1405', '1810', '0'), +('7', '35', '2', '2191', '1592', '0'), +('7', '35', '3', '10144', '1206', '0'), +('7', '35', '3', '2403', '1146', '0'), +('7', '35', '3', '14705', '990', '0'), +('7', '35', '3', '14706', '990', '0'), +('7', '35', '5', '14703', '6050', '0'), +('7', '35', '5', '14700', '3753', '0'), +('7', '35', '5', '10055', '3505', '0'), +('7', '35', '5', '2583', '2444', '0'), +('7', '35', '8', '11621', '14377', '0'), +('7', '35', '8', '11562', '9310', '0'), +('7', '35', '8', '27714', '8538', '0'), +('7', '35', '8', '1546', '6920', '0'), +('7', '35', '6', '1557', '6760', '0'), +('7', '35', '6', '1283', '2986', '0'), +('7', '35', '6', '11561', '2952', '0'), +('7', '35', '6', '25062', '768', '0'), +('7', '35', '17', '12256', '8295', '0'), +('7', '35', '17', '1201', '2467', '0'), +('7', '35', '17', '2348', '2449', '0'), +('7', '35', '17', '2329', '1663', '0'), +('7', '35', '7', '1202', '2570', '0'), +('7', '35', '7', '2458', '2406', '0'), +('7', '35', '7', '2342', '2014', '0'), +('7', '35', '7', '1361', '1764', '0'), +('7', '35', '9', '27714', '8538', '0'), +('7', '35', '9', '14650', '1952', '0'), +('7', '35', '9', '1203', '1807', '0'), +('7', '35', '9', '10360', '1351', '0'), +('7', '35', '15', '10366', '8163', '0'), +('7', '35', '15', '10151', '7200', '0'), +('7', '35', '15', '14679', '6255', '0'), +('7', '35', '15', '14678', '5104', '0'), +('7', '35', '20', '11698', '9997', '0'), +('7', '35', '20', '11601', '8833', '0'), +('7', '35', '20', '2917', '5211', '0'), +('7', '35', '20', '1365', '4200', '0'), +('7', '35', '12', '2923', '3654', '0'), +('7', '35', '12', '11624', '3245', '0'), +('7', '35', '12', '1204', '1396', '0'), +('7', '35', '12', '8909', '1377', '0'), +('7', '35', '18', '2461', '2557', '0'), +('7', '35', '18', '1205', '1056', '0'), +('7', '35', '18', '25725', '978', '0'), +('7', '35', '18', '2462', '805', '0'), +('7', '35', '19', '1280', '3540', '0'), +('7', '35', '19', '1206', '2524', '0'), +('7', '35', '19', '68239', '1360', '0'), +('7', '35', '19', '25726', '791', '0'), +('7', '35', '13', '27715', '30770', '0'), +('7', '35', '13', '6502', '21250', '0'), +('7', '35', '13', '71308', '9494', '0'), +('7', '35', '13', '6691', '8990', '0'), +('7', '35', '14', '27715', '30770', '0'), +('7', '35', '14', '6502', '21250', '0'), +('7', '35', '14', '11644', '11154', '0'), +('7', '35', '14', '71308', '9494', '0'), +('7', '35', '11', '14762', '854', '0'), +('7', '35', '11', '13748', '489', '0'), +('7', '35', '11', '9246', '453', '0'), +('7', '35', '11', '20677', '69', '0'), +('7', '36', '22', '9246', '0', '0'), +('7', '36', '22', '10323', '0', '0'), +('7', '36', '22', '21509', '0', '0'), +('7', '36', '22', '8332', '0', '0'), +('7', '36', '1', '14701', '4052', '0'), +('7', '36', '1', '14702', '2850', '0'), +('7', '36', '1', '10165', '1638', '0'), +('7', '36', '1', '30361', '1140', '0'), +('7', '36', '2', '10142', '3012', '0'), +('7', '36', '2', '4504', '2158', '0'), +('7', '36', '2', '1405', '1810', '0'), +('7', '36', '2', '2191', '1592', '0'), +('7', '36', '3', '10144', '1206', '0'), +('7', '36', '3', '2403', '1146', '0'), +('7', '36', '3', '14705', '990', '0'), +('7', '36', '3', '14706', '990', '0'), +('7', '36', '5', '14703', '6050', '0'), +('7', '36', '5', '14700', '3753', '0'), +('7', '36', '5', '10055', '3505', '0'), +('7', '36', '5', '2583', '2444', '0'), +('7', '36', '8', '11621', '14377', '0'), +('7', '36', '8', '11562', '9310', '0'), +('7', '36', '8', '27714', '8567', '0'), +('7', '36', '8', '1546', '6920', '0'), +('7', '36', '6', '1557', '6760', '0'), +('7', '36', '6', '1283', '2986', '0'), +('7', '36', '6', '11561', '2981', '0'), +('7', '36', '6', '25062', '768', '0'), +('7', '36', '17', '12256', '8316', '0'), +('7', '36', '17', '2348', '2470', '0'), +('7', '36', '17', '1201', '2467', '0'), +('7', '36', '17', '2329', '1677', '0'), +('7', '36', '7', '1202', '2608', '0'), +('7', '36', '7', '2458', '2406', '0'), +('7', '36', '7', '2342', '2026', '0'), +('7', '36', '7', '1361', '1764', '0'), +('7', '36', '9', '27714', '8567', '0'), +('7', '36', '9', '14650', '1952', '0'), +('7', '36', '9', '1203', '1828', '0'), +('7', '36', '9', '10360', '1351', '0'), +('7', '36', '15', '10366', '8163', '0'), +('7', '36', '15', '10151', '7200', '0'), +('7', '36', '15', '14679', '6255', '0'), +('7', '36', '15', '14678', '5104', '0'), +('7', '36', '20', '11698', '9997', '0'), +('7', '36', '20', '11601', '8876', '0'), +('7', '36', '20', '2917', '5211', '0'), +('7', '36', '20', '1365', '4200', '0'), +('7', '36', '12', '2923', '3654', '0'), +('7', '36', '12', '11624', '3275', '0'), +('7', '36', '12', '1204', '1396', '0'), +('7', '36', '12', '8909', '1388', '0'), +('7', '36', '18', '2461', '2557', '0'), +('7', '36', '18', '1205', '1056', '0'), +('7', '36', '18', '25725', '978', '0'), +('7', '36', '18', '2462', '820', '0'), +('7', '36', '19', '1280', '3540', '0'), +('7', '36', '19', '1206', '2562', '0'), +('7', '36', '19', '68239', '1360', '0'), +('7', '36', '19', '25726', '791', '0'), +('7', '36', '13', '27715', '31068', '0'), +('7', '36', '13', '6502', '21463', '0'), +('7', '36', '13', '71308', '9579', '0'), +('7', '36', '13', '6691', '9082', '0'), +('7', '36', '14', '27715', '31068', '0'), +('7', '36', '14', '6502', '21463', '0'), +('7', '36', '14', '11644', '11154', '0'), +('7', '36', '14', '71308', '9579', '0'), +('7', '36', '11', '14762', '854', '0'), +('7', '36', '11', '13748', '489', '0'), +('7', '36', '11', '9246', '453', '0'), +('7', '36', '11', '20677', '69', '0'), +('7', '37', '22', '9246', '0', '0'), +('7', '37', '22', '10323', '0', '0'), +('7', '37', '22', '21509', '0', '0'), +('7', '37', '22', '8332', '0', '0'), +('7', '37', '1', '14701', '4052', '0'), +('7', '37', '1', '14702', '2850', '0'), +('7', '37', '1', '10165', '1638', '0'), +('7', '37', '1', '30361', '1140', '0'), +('7', '37', '2', '10142', '3012', '0'), +('7', '37', '2', '4504', '2158', '0'), +('7', '37', '2', '1405', '1810', '0'), +('7', '37', '2', '2191', '1592', '0'), +('7', '37', '3', '10144', '1206', '0'), +('7', '37', '3', '2403', '1146', '0'), +('7', '37', '3', '14705', '990', '0'), +('7', '37', '3', '14706', '990', '0'), +('7', '37', '5', '14703', '6050', '0'), +('7', '37', '5', '14700', '3753', '0'), +('7', '37', '5', '10055', '3505', '0'), +('7', '37', '5', '2583', '2444', '0'), +('7', '37', '8', '11621', '14377', '0'), +('7', '37', '8', '11562', '9310', '0'), +('7', '37', '8', '27714', '8597', '0'), +('7', '37', '8', '1546', '6920', '0'), +('7', '37', '6', '1557', '6760', '0'), +('7', '37', '6', '11561', '3011', '0'), +('7', '37', '6', '1283', '2986', '0'), +('7', '37', '6', '25062', '768', '0'), +('7', '37', '17', '12256', '8337', '0'), +('7', '37', '17', '2348', '2492', '0'), +('7', '37', '17', '1201', '2467', '0'), +('7', '37', '17', '2329', '1691', '0'), +('7', '37', '7', '1202', '2646', '0'), +('7', '37', '7', '2458', '2406', '0'), +('7', '37', '7', '2342', '2039', '0'), +('7', '37', '7', '1361', '1764', '0'), +('7', '37', '9', '27714', '8597', '0'), +('7', '37', '9', '14650', '1952', '0'), +('7', '37', '9', '1203', '1850', '0'), +('7', '37', '9', '10360', '1351', '0'), +('7', '37', '15', '10366', '8163', '0'), +('7', '37', '15', '10151', '7200', '0'), +('7', '37', '15', '14679', '6255', '0'), +('7', '37', '15', '14678', '5104', '0'), +('7', '37', '20', '11698', '9997', '0'), +('7', '37', '20', '11601', '8918', '0'), +('7', '37', '20', '2917', '5211', '0'), +('7', '37', '20', '1365', '4200', '0'), +('7', '37', '12', '2923', '3654', '0'), +('7', '37', '12', '11624', '3304', '0'), +('7', '37', '12', '8909', '1399', '0'), +('7', '37', '12', '1204', '1396', '0'), +('7', '37', '18', '2461', '2557', '0'), +('7', '37', '18', '1205', '1056', '0'), +('7', '37', '18', '25725', '978', '0'), +('7', '37', '18', '2462', '835', '0'), +('7', '37', '19', '1280', '3540', '0'), +('7', '37', '19', '1206', '2600', '0'), +('7', '37', '19', '68239', '1360', '0'), +('7', '37', '19', '25726', '791', '0'), +('7', '37', '13', '27715', '31365', '0'), +('7', '37', '13', '6502', '21675', '0'), +('7', '37', '13', '71308', '9664', '0'), +('7', '37', '13', '6691', '9174', '0'), +('7', '37', '14', '27715', '31365', '0'), +('7', '37', '14', '6502', '21675', '0'), +('7', '37', '14', '11644', '11154', '0'), +('7', '37', '14', '71308', '9664', '0'), +('7', '37', '11', '14762', '854', '0'), +('7', '37', '11', '13748', '489', '0'), +('7', '37', '11', '9246', '453', '0'), +('7', '37', '11', '20677', '69', '0'), +('7', '38', '22', '9246', '0', '0'), +('7', '38', '22', '10323', '0', '0'), +('7', '38', '22', '21509', '0', '0'), +('7', '38', '22', '8332', '0', '0'), +('7', '38', '1', '14701', '4052', '0'), +('7', '38', '1', '14702', '2850', '0'), +('7', '38', '1', '10165', '1638', '0'), +('7', '38', '1', '30361', '1140', '0'), +('7', '38', '2', '10142', '3012', '0'), +('7', '38', '2', '4504', '2158', '0'), +('7', '38', '2', '1405', '1810', '0'), +('7', '38', '2', '2191', '1592', '0'), +('7', '38', '3', '10144', '1206', '0'), +('7', '38', '3', '2403', '1146', '0'), +('7', '38', '3', '14705', '990', '0'), +('7', '38', '3', '14706', '990', '0'), +('7', '38', '5', '14703', '6050', '0'), +('7', '38', '5', '14700', '3753', '0'), +('7', '38', '5', '10055', '3505', '0'), +('7', '38', '5', '2583', '2444', '0'), +('7', '38', '8', '11621', '14377', '0'), +('7', '38', '8', '11562', '9310', '0'), +('7', '38', '8', '27714', '8626', '0'), +('7', '38', '8', '1546', '6920', '0'), +('7', '38', '6', '1557', '6760', '0'), +('7', '38', '6', '11561', '3041', '0'), +('7', '38', '6', '1283', '2986', '0'), +('7', '38', '6', '25062', '768', '0'), +('7', '38', '17', '12256', '8358', '0'), +('7', '38', '17', '2348', '2513', '0'), +('7', '38', '17', '1201', '2467', '0'), +('7', '38', '17', '2329', '1705', '0'), +('7', '38', '7', '1202', '2684', '0'), +('7', '38', '7', '2458', '2406', '0'), +('7', '38', '7', '2342', '2052', '0'), +('7', '38', '7', '1361', '1764', '0'), +('7', '38', '9', '27714', '8626', '0'), +('7', '38', '9', '14650', '1952', '0'), +('7', '38', '9', '1203', '1871', '0'), +('7', '38', '9', '10360', '1351', '0'), +('7', '38', '15', '10366', '8163', '0'), +('7', '38', '15', '10151', '7200', '0'), +('7', '38', '15', '14679', '6255', '0'), +('7', '38', '15', '14678', '5104', '0'), +('7', '38', '20', '11698', '9997', '0'), +('7', '38', '20', '11601', '8960', '0'), +('7', '38', '20', '2917', '5211', '0'), +('7', '38', '20', '1365', '4200', '0'), +('7', '38', '12', '2923', '3654', '0'), +('7', '38', '12', '11624', '3334', '0'), +('7', '38', '12', '8909', '1409', '0'), +('7', '38', '12', '1204', '1396', '0'), +('7', '38', '18', '2461', '2557', '0'), +('7', '38', '18', '1205', '1056', '0'), +('7', '38', '18', '25725', '978', '0'), +('7', '38', '18', '2462', '851', '0'), +('7', '38', '19', '1280', '3540', '0'), +('7', '38', '19', '1206', '2638', '0'), +('7', '38', '19', '68239', '1360', '0'), +('7', '38', '19', '25726', '791', '0'), +('7', '38', '13', '27715', '31705', '0'), +('7', '38', '13', '6502', '21888', '0'), +('7', '38', '13', '71308', '9777', '0'), +('7', '38', '13', '6691', '9244', '0'), +('7', '38', '14', '27715', '31705', '0'), +('7', '38', '14', '6502', '21888', '0'), +('7', '38', '14', '11644', '11154', '0'), +('7', '38', '14', '71308', '9777', '0'), +('7', '38', '11', '14762', '854', '0'), +('7', '38', '11', '13748', '489', '0'), +('7', '38', '11', '9246', '453', '0'), +('7', '38', '11', '20677', '69', '0'), +('7', '39', '22', '9246', '0', '0'), +('7', '39', '22', '10323', '0', '0'), +('7', '39', '22', '21509', '0', '0'), +('7', '39', '22', '8332', '0', '0'), +('7', '39', '1', '14701', '4052', '0'), +('7', '39', '1', '14702', '2850', '0'), +('7', '39', '1', '10165', '1638', '0'), +('7', '39', '1', '30361', '1140', '0'), +('7', '39', '2', '10142', '3012', '0'), +('7', '39', '2', '4504', '2158', '0'), +('7', '39', '2', '1405', '1810', '0'), +('7', '39', '2', '2191', '1592', '0'), +('7', '39', '3', '10144', '1206', '0'), +('7', '39', '3', '2403', '1146', '0'), +('7', '39', '3', '14705', '990', '0'), +('7', '39', '3', '14706', '990', '0'), +('7', '39', '5', '14703', '6050', '0'), +('7', '39', '5', '14700', '3753', '0'), +('7', '39', '5', '10055', '3505', '0'), +('7', '39', '5', '2583', '2444', '0'), +('7', '39', '8', '11621', '14377', '0'), +('7', '39', '8', '11562', '9310', '0'), +('7', '39', '8', '27714', '8656', '0'), +('7', '39', '8', '1546', '6920', '0'), +('7', '39', '6', '1557', '6760', '0'), +('7', '39', '6', '11561', '3070', '0'), +('7', '39', '6', '1283', '2986', '0'), +('7', '39', '6', '25062', '768', '0'), +('7', '39', '17', '12256', '8379', '0'), +('7', '39', '17', '2348', '2534', '0'), +('7', '39', '17', '1201', '2467', '0'), +('7', '39', '17', '2329', '1719', '0'), +('7', '39', '7', '1202', '2722', '0'), +('7', '39', '7', '2458', '2406', '0'), +('7', '39', '7', '2342', '2064', '0'), +('7', '39', '7', '1361', '1764', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '39', '9', '27714', '8656', '0'), +('7', '39', '9', '14650', '1952', '0'), +('7', '39', '9', '1203', '1892', '0'), +('7', '39', '9', '10360', '1351', '0'), +('7', '39', '15', '10366', '8163', '0'), +('7', '39', '15', '10151', '7200', '0'), +('7', '39', '15', '14679', '6255', '0'), +('7', '39', '15', '14678', '5104', '0'), +('7', '39', '20', '11698', '9997', '0'), +('7', '39', '20', '11601', '9003', '0'), +('7', '39', '20', '2917', '5211', '0'), +('7', '39', '20', '1365', '4200', '0'), +('7', '39', '12', '2923', '3654', '0'), +('7', '39', '12', '11624', '3363', '0'), +('7', '39', '12', '8909', '1420', '0'), +('7', '39', '12', '1204', '1396', '0'), +('7', '39', '18', '2461', '2557', '0'), +('7', '39', '18', '1205', '1056', '0'), +('7', '39', '18', '25725', '978', '0'), +('7', '39', '18', '2462', '866', '0'), +('7', '39', '19', '1280', '3540', '0'), +('7', '39', '19', '1206', '2676', '0'), +('7', '39', '19', '68239', '1360', '0'), +('7', '39', '19', '25726', '791', '0'), +('7', '39', '13', '27715', '32003', '0'), +('7', '39', '13', '6502', '22100', '0'), +('7', '39', '13', '71308', '9862', '0'), +('7', '39', '13', '6691', '9336', '0'), +('7', '39', '14', '27715', '32003', '0'), +('7', '39', '14', '6502', '22100', '0'), +('7', '39', '14', '11644', '11154', '0'), +('7', '39', '14', '71308', '9862', '0'), +('7', '39', '11', '14762', '854', '0'), +('7', '39', '11', '13748', '489', '0'), +('7', '39', '11', '9246', '453', '0'), +('7', '39', '11', '20677', '69', '0'), +('7', '40', '22', '9246', '0', '0'), +('7', '40', '22', '10323', '0', '0'), +('7', '40', '22', '21509', '0', '0'), +('7', '40', '22', '8332', '0', '0'), +('7', '40', '1', '14701', '4052', '0'), +('7', '40', '1', '14702', '2850', '0'), +('7', '40', '1', '10165', '1638', '0'), +('7', '40', '1', '30361', '1140', '0'), +('7', '40', '2', '10142', '3012', '0'), +('7', '40', '2', '4504', '2158', '0'), +('7', '40', '2', '1405', '1810', '0'), +('7', '40', '2', '2191', '1592', '0'), +('7', '40', '3', '10144', '1206', '0'), +('7', '40', '3', '2403', '1146', '0'), +('7', '40', '3', '14705', '990', '0'), +('7', '40', '3', '14706', '990', '0'), +('7', '40', '5', '14703', '6050', '0'), +('7', '40', '5', '14700', '3753', '0'), +('7', '40', '5', '10055', '3505', '0'), +('7', '40', '5', '2583', '2444', '0'), +('7', '40', '8', '11621', '14377', '0'), +('7', '40', '8', '11562', '9310', '0'), +('7', '40', '8', '27714', '8686', '0'), +('7', '40', '8', '1546', '6920', '0'), +('7', '40', '6', '1557', '6760', '0'), +('7', '40', '6', '11561', '3100', '0'), +('7', '40', '6', '1283', '2986', '0'), +('7', '40', '6', '25062', '768', '0'), +('7', '40', '17', '12256', '8401', '0'), +('7', '40', '17', '2348', '2555', '0'), +('7', '40', '17', '1201', '2467', '0'), +('7', '40', '17', '2329', '1733', '0'), +('7', '40', '7', '1202', '2760', '0'), +('7', '40', '7', '2458', '2406', '0'), +('7', '40', '7', '2342', '2077', '0'), +('7', '40', '7', '1361', '1764', '0'), +('7', '40', '9', '27714', '8686', '0'), +('7', '40', '9', '14650', '1952', '0'), +('7', '40', '9', '1203', '1913', '0'), +('7', '40', '9', '10360', '1351', '0'), +('7', '40', '15', '10366', '8163', '0'), +('7', '40', '15', '10151', '7200', '0'), +('7', '40', '15', '14679', '6255', '0'), +('7', '40', '15', '14678', '5104', '0'), +('7', '40', '20', '11698', '9997', '0'), +('7', '40', '20', '11601', '9045', '0'), +('7', '40', '20', '2917', '5211', '0'), +('7', '40', '20', '1365', '4200', '0'), +('7', '40', '12', '2923', '3654', '0'), +('7', '40', '12', '11624', '3393', '0'), +('7', '40', '12', '8909', '1431', '0'), +('7', '40', '12', '1204', '1396', '0'), +('7', '40', '18', '2461', '2557', '0'), +('7', '40', '18', '1205', '1056', '0'), +('7', '40', '18', '25725', '978', '0'), +('7', '40', '18', '2462', '881', '0'), +('7', '40', '19', '1280', '3540', '0'), +('7', '40', '19', '1206', '2714', '0'), +('7', '40', '19', '68239', '1360', '0'), +('7', '40', '19', '25726', '791', '0'), +('7', '40', '13', '27715', '32300', '0'), +('7', '40', '13', '6502', '22313', '0'), +('7', '40', '13', '71308', '9947', '0'), +('7', '40', '13', '6691', '9428', '0'), +('7', '40', '14', '27715', '32300', '0'), +('7', '40', '14', '6502', '22313', '0'), +('7', '40', '14', '11644', '11154', '0'), +('7', '40', '14', '71308', '9947', '0'), +('7', '40', '11', '14762', '854', '0'), +('7', '40', '11', '13748', '489', '0'), +('7', '40', '11', '9246', '453', '0'), +('7', '40', '11', '20677', '69', '0'), +('7', '41', '22', '9246', '0', '0'), +('7', '41', '22', '10323', '0', '0'), +('7', '41', '22', '21509', '0', '0'), +('7', '41', '22', '8332', '0', '0'), +('7', '41', '1', '14701', '4052', '0'), +('7', '41', '1', '14702', '2850', '0'), +('7', '41', '1', '10165', '1638', '0'), +('7', '41', '1', '30361', '1140', '0'), +('7', '41', '2', '10142', '3012', '0'), +('7', '41', '2', '4504', '2158', '0'), +('7', '41', '2', '1405', '1810', '0'), +('7', '41', '2', '2191', '1592', '0'), +('7', '41', '3', '10144', '1206', '0'), +('7', '41', '3', '2403', '1146', '0'), +('7', '41', '3', '14705', '990', '0'), +('7', '41', '3', '14706', '990', '0'), +('7', '41', '5', '14703', '6050', '0'), +('7', '41', '5', '14700', '3753', '0'), +('7', '41', '5', '10055', '3505', '0'), +('7', '41', '5', '2583', '2444', '0'), +('7', '41', '8', '11621', '14377', '0'), +('7', '41', '8', '11562', '9310', '0'), +('7', '41', '8', '27714', '8715', '0'), +('7', '41', '8', '1546', '6920', '0'), +('7', '41', '6', '1557', '6760', '0'), +('7', '41', '6', '11561', '3129', '0'), +('7', '41', '6', '1283', '2986', '0'), +('7', '41', '6', '25062', '768', '0'), +('7', '41', '17', '12256', '8422', '0'), +('7', '41', '17', '2348', '2576', '0'), +('7', '41', '17', '1201', '2467', '0'), +('7', '41', '17', '2329', '1748', '0'), +('7', '41', '7', '1202', '2798', '0'), +('7', '41', '7', '2458', '2406', '0'), +('7', '41', '7', '2342', '2090', '0'), +('7', '41', '7', '1361', '1764', '0'), +('7', '41', '9', '27714', '8715', '0'), +('7', '41', '9', '14650', '1952', '0'), +('7', '41', '9', '1203', '1934', '0'), +('7', '41', '9', '10360', '1351', '0'), +('7', '41', '15', '10366', '8163', '0'), +('7', '41', '15', '10151', '7200', '0'), +('7', '41', '15', '14679', '6255', '0'), +('7', '41', '15', '14678', '5104', '0'), +('7', '41', '20', '11698', '9997', '0'), +('7', '41', '20', '11601', '9087', '0'), +('7', '41', '20', '2917', '5211', '0'), +('7', '41', '20', '1365', '4200', '0'), +('7', '41', '12', '2923', '3654', '0'), +('7', '41', '12', '11624', '3422', '0'), +('7', '41', '12', '8909', '1441', '0'), +('7', '41', '12', '1204', '1396', '0'), +('7', '41', '18', '2461', '2557', '0'), +('7', '41', '18', '1205', '1056', '0'), +('7', '41', '18', '25725', '978', '0'), +('7', '41', '18', '2462', '897', '0'), +('7', '41', '19', '1280', '3540', '0'), +('7', '41', '19', '1206', '2752', '0'), +('7', '41', '19', '68239', '1360', '0'), +('7', '41', '19', '25726', '791', '0'), +('7', '41', '13', '27715', '32598', '0'), +('7', '41', '13', '6502', '22525', '0'), +('7', '41', '13', '71308', '10032', '0'), +('7', '41', '13', '6691', '9521', '0'), +('7', '41', '14', '27715', '32598', '0'), +('7', '41', '14', '6502', '22525', '0'), +('7', '41', '14', '11644', '11154', '0'), +('7', '41', '14', '71308', '10032', '0'), +('7', '41', '11', '14762', '854', '0'), +('7', '41', '11', '13748', '489', '0'), +('7', '41', '11', '9246', '453', '0'), +('7', '41', '11', '20677', '69', '0'), +('7', '42', '22', '9246', '0', '0'), +('7', '42', '22', '10323', '0', '0'), +('7', '42', '22', '21509', '0', '0'), +('7', '42', '22', '8332', '0', '0'), +('7', '42', '1', '14701', '4052', '0'), +('7', '42', '1', '14702', '2850', '0'), +('7', '42', '1', '10165', '1638', '0'), +('7', '42', '1', '30361', '1140', '0'), +('7', '42', '2', '10142', '3012', '0'), +('7', '42', '2', '4504', '2158', '0'), +('7', '42', '2', '1405', '1810', '0'), +('7', '42', '2', '2191', '1592', '0'), +('7', '42', '3', '10144', '1206', '0'), +('7', '42', '3', '2403', '1146', '0'), +('7', '42', '3', '14705', '990', '0'), +('7', '42', '3', '14706', '990', '0'), +('7', '42', '5', '14703', '6050', '0'), +('7', '42', '5', '14700', '3753', '0'), +('7', '42', '5', '10055', '3505', '0'), +('7', '42', '5', '2583', '2444', '0'), +('7', '42', '8', '11621', '14377', '0'), +('7', '42', '8', '11562', '9310', '0'), +('7', '42', '8', '27714', '8749', '0'), +('7', '42', '8', '1546', '6920', '0'), +('7', '42', '6', '1557', '6760', '0'), +('7', '42', '6', '11561', '3163', '0'), +('7', '42', '6', '1283', '2986', '0'), +('7', '42', '6', '25062', '768', '0'), +('7', '42', '17', '12256', '8446', '0'), +('7', '42', '17', '2348', '2600', '0'), +('7', '42', '17', '1201', '2467', '0'), +('7', '42', '17', '2329', '1764', '0'), +('7', '42', '7', '1202', '2842', '0'), +('7', '42', '7', '2458', '2406', '0'), +('7', '42', '7', '2342', '2104', '0'), +('7', '42', '7', '1361', '1764', '0'), +('7', '42', '9', '27714', '8749', '0'), +('7', '42', '9', '1203', '1958', '0'), +('7', '42', '9', '14650', '1952', '0'), +('7', '42', '9', '10360', '1351', '0'), +('7', '42', '15', '10366', '8163', '0'), +('7', '42', '15', '10151', '7200', '0'), +('7', '42', '15', '14679', '6255', '0'), +('7', '42', '15', '14678', '5104', '0'), +('7', '42', '20', '11698', '9997', '0'), +('7', '42', '20', '11601', '9135', '0'), +('7', '42', '20', '2917', '5211', '0'), +('7', '42', '20', '1365', '4200', '0'), +('7', '42', '12', '2923', '3654', '0'), +('7', '42', '12', '11624', '3456', '0'), +('7', '42', '12', '8909', '1454', '0'), +('7', '42', '12', '1204', '1396', '0'), +('7', '42', '18', '2461', '2557', '0'), +('7', '42', '18', '1205', '1056', '0'), +('7', '42', '18', '25725', '978', '0'), +('7', '42', '18', '2462', '914', '0'), +('7', '42', '19', '1280', '3540', '0'), +('7', '42', '19', '1206', '2796', '0'), +('7', '42', '19', '68239', '1360', '0'), +('7', '42', '19', '25726', '791', '0'), +('7', '42', '13', '27715', '32895', '0'), +('7', '42', '13', '6502', '22738', '0'), +('7', '42', '13', '71308', '10117', '0'), +('7', '42', '13', '6691', '9613', '0'), +('7', '42', '14', '27715', '32895', '0'), +('7', '42', '14', '6502', '22738', '0'), +('7', '42', '14', '11644', '11154', '0'), +('7', '42', '14', '71308', '10117', '0'), +('7', '42', '11', '14762', '854', '0'), +('7', '42', '11', '13748', '489', '0'), +('7', '42', '11', '9246', '453', '0'), +('7', '42', '11', '20677', '69', '0'), +('7', '43', '22', '9246', '0', '0'), +('7', '43', '22', '10323', '0', '0'), +('7', '43', '22', '21509', '0', '0'), +('7', '43', '22', '8332', '0', '0'), +('7', '43', '1', '14701', '4052', '0'), +('7', '43', '1', '14702', '2850', '0'), +('7', '43', '1', '10165', '1638', '0'), +('7', '43', '1', '30361', '1140', '0'), +('7', '43', '2', '10142', '3012', '0'), +('7', '43', '2', '4504', '2158', '0'), +('7', '43', '2', '1405', '1810', '0'), +('7', '43', '2', '2191', '1592', '0'), +('7', '43', '3', '10144', '1206', '0'), +('7', '43', '3', '2403', '1146', '0'), +('7', '43', '3', '14705', '990', '0'), +('7', '43', '3', '14706', '990', '0'), +('7', '43', '5', '14703', '6050', '0'), +('7', '43', '5', '14700', '3753', '0'), +('7', '43', '5', '10055', '3505', '0'), +('7', '43', '5', '2583', '2444', '0'), +('7', '43', '8', '11621', '14377', '0'), +('7', '43', '8', '11562', '9310', '0'), +('7', '43', '8', '27714', '8779', '0'), +('7', '43', '8', '1546', '6920', '0'), +('7', '43', '6', '1557', '6760', '0'), +('7', '43', '6', '11561', '3193', '0'), +('7', '43', '6', '1283', '2986', '0'), +('7', '43', '6', '25062', '768', '0'), +('7', '43', '17', '12256', '8467', '0'), +('7', '43', '17', '2348', '2621', '0'), +('7', '43', '17', '1201', '2467', '0'), +('7', '43', '17', '2329', '1778', '0'), +('7', '43', '7', '1202', '2880', '0'), +('7', '43', '7', '2458', '2406', '0'), +('7', '43', '7', '2342', '2117', '0'), +('7', '43', '7', '1361', '1764', '0'), +('7', '43', '9', '27714', '8779', '0'), +('7', '43', '9', '1203', '1979', '0'), +('7', '43', '9', '14650', '1952', '0'), +('7', '43', '9', '10360', '1351', '0'), +('7', '43', '15', '10366', '8163', '0'), +('7', '43', '15', '10151', '7200', '0'), +('7', '43', '15', '14679', '6255', '0'), +('7', '43', '15', '14678', '5104', '0'), +('7', '43', '20', '11698', '9997', '0'), +('7', '43', '20', '11601', '9178', '0'), +('7', '43', '20', '2917', '5211', '0'), +('7', '43', '20', '1365', '4200', '0'), +('7', '43', '12', '2923', '3654', '0'), +('7', '43', '12', '11624', '3486', '0'), +('7', '43', '12', '8909', '1464', '0'), +('7', '43', '12', '1204', '1396', '0'), +('7', '43', '18', '2461', '2557', '0'), +('7', '43', '18', '1205', '1056', '0'), +('7', '43', '18', '25725', '978', '0'), +('7', '43', '18', '2462', '929', '0'), +('7', '43', '19', '1280', '3540', '0'), +('7', '43', '19', '1206', '2834', '0'), +('7', '43', '19', '68239', '1360', '0'), +('7', '43', '19', '25726', '791', '0'), +('7', '43', '13', '27715', '33193', '0'), +('7', '43', '13', '6502', '22950', '0'), +('7', '43', '13', '71308', '10230', '0'), +('7', '43', '13', '6691', '9683', '0'), +('7', '43', '14', '27715', '33193', '0'), +('7', '43', '14', '6502', '22950', '0'), +('7', '43', '14', '11644', '11154', '0'), +('7', '43', '14', '71308', '10230', '0'), +('7', '43', '11', '14762', '854', '0'), +('7', '43', '11', '13748', '489', '0'), +('7', '43', '11', '9246', '453', '0'), +('7', '43', '11', '20677', '69', '0'), +('7', '44', '22', '9246', '0', '0'), +('7', '44', '22', '10323', '0', '0'), +('7', '44', '22', '21509', '0', '0'), +('7', '44', '22', '8332', '0', '0'), +('7', '44', '1', '14701', '4052', '0'), +('7', '44', '1', '14702', '2850', '0'), +('7', '44', '1', '10165', '1638', '0'), +('7', '44', '1', '30361', '1140', '0'), +('7', '44', '2', '10142', '3012', '0'), +('7', '44', '2', '4504', '2158', '0'), +('7', '44', '2', '1405', '1810', '0'), +('7', '44', '2', '2191', '1592', '0'), +('7', '44', '3', '10144', '1206', '0'), +('7', '44', '3', '2403', '1146', '0'), +('7', '44', '3', '14705', '990', '0'), +('7', '44', '3', '14706', '990', '0'), +('7', '44', '5', '14703', '6050', '0'), +('7', '44', '5', '14700', '3753', '0'), +('7', '44', '5', '10055', '3505', '0'), +('7', '44', '5', '2583', '2444', '0'), +('7', '44', '8', '11621', '14377', '0'), +('7', '44', '8', '11562', '9310', '0'), +('7', '44', '8', '27714', '8808', '0'), +('7', '44', '8', '1546', '6920', '0'), +('7', '44', '6', '1557', '6760', '0'), +('7', '44', '6', '11561', '3222', '0'), +('7', '44', '6', '1283', '2986', '0'), +('7', '44', '6', '25062', '768', '0'), +('7', '44', '17', '12256', '8488', '0'), +('7', '44', '17', '2348', '2643', '0'), +('7', '44', '17', '1201', '2467', '0'), +('7', '44', '17', '2329', '1792', '0'), +('7', '44', '7', '1202', '2918', '0'), +('7', '44', '7', '2458', '2406', '0'), +('7', '44', '7', '2342', '2129', '0'), +('7', '44', '7', '1361', '1764', '0'), +('7', '44', '9', '27714', '8808', '0'), +('7', '44', '9', '1203', '2001', '0'), +('7', '44', '9', '14650', '1952', '0'), +('7', '44', '9', '10360', '1351', '0'), +('7', '44', '15', '10366', '8163', '0'), +('7', '44', '15', '10151', '7200', '0'), +('7', '44', '15', '14679', '6255', '0'), +('7', '44', '15', '14678', '5104', '0'), +('7', '44', '20', '11698', '9997', '0'), +('7', '44', '20', '11601', '9220', '0'), +('7', '44', '20', '2917', '5211', '0'), +('7', '44', '20', '1365', '4200', '0'), +('7', '44', '12', '2923', '3654', '0'), +('7', '44', '12', '11624', '3516', '0'), +('7', '44', '12', '8909', '1475', '0'), +('7', '44', '12', '1204', '1396', '0'), +('7', '44', '18', '2461', '2557', '0'), +('7', '44', '18', '1205', '1056', '0'), +('7', '44', '18', '25725', '978', '0'), +('7', '44', '18', '2462', '945', '0'), +('7', '44', '19', '1280', '3540', '0'), +('7', '44', '19', '1206', '2872', '0'), +('7', '44', '19', '68239', '1360', '0'), +('7', '44', '19', '25726', '791', '0'), +('7', '44', '13', '27715', '33490', '0'), +('7', '44', '13', '6502', '23163', '0'), +('7', '44', '13', '71308', '10315', '0'), +('7', '44', '13', '6691', '9775', '0'), +('7', '44', '14', '27715', '33490', '0'), +('7', '44', '14', '6502', '23163', '0'), +('7', '44', '14', '11644', '11154', '0'), +('7', '44', '14', '71308', '10315', '0'), +('7', '44', '11', '14762', '854', '0'), +('7', '44', '11', '13748', '489', '0'), +('7', '44', '11', '9246', '453', '0'), +('7', '44', '11', '20677', '69', '0'), +('7', '45', '22', '9246', '0', '0'), +('7', '45', '22', '10323', '0', '0'), +('7', '45', '22', '21509', '0', '0'), +('7', '45', '22', '8332', '0', '0'), +('7', '45', '1', '14701', '4052', '0'), +('7', '45', '1', '14702', '2850', '0'), +('7', '45', '1', '10165', '1638', '0'), +('7', '45', '1', '30361', '1140', '0'), +('7', '45', '2', '10142', '3012', '0'), +('7', '45', '2', '4504', '2158', '0'), +('7', '45', '2', '1405', '1810', '0'), +('7', '45', '2', '2191', '1592', '0'), +('7', '45', '3', '10144', '1206', '0'), +('7', '45', '3', '2403', '1146', '0'), +('7', '45', '3', '14705', '990', '0'), +('7', '45', '3', '14706', '990', '0'), +('7', '45', '5', '14703', '6050', '0'), +('7', '45', '5', '14700', '3753', '0'), +('7', '45', '5', '10055', '3505', '0'), +('7', '45', '5', '2583', '2444', '0'), +('7', '45', '8', '11621', '14377', '0'), +('7', '45', '8', '11562', '9310', '0'), +('7', '45', '8', '27714', '8838', '0'), +('7', '45', '8', '1546', '6920', '0'), +('7', '45', '6', '1557', '6760', '0'), +('7', '45', '6', '11561', '3252', '0'), +('7', '45', '6', '1283', '2986', '0'), +('7', '45', '6', '25062', '768', '0'), +('7', '45', '17', '12256', '8509', '0'), +('7', '45', '17', '2348', '2664', '0'), +('7', '45', '17', '1201', '2467', '0'), +('7', '45', '17', '2329', '1806', '0'), +('7', '45', '7', '1202', '2956', '0'), +('7', '45', '7', '2458', '2406', '0'), +('7', '45', '7', '2342', '2142', '0'), +('7', '45', '7', '1361', '1764', '0'), +('7', '45', '9', '27714', '8838', '0'), +('7', '45', '9', '1203', '2022', '0'), +('7', '45', '9', '14650', '1952', '0'), +('7', '45', '9', '10360', '1351', '0'), +('7', '45', '15', '10366', '8163', '0'), +('7', '45', '15', '10151', '7200', '0'), +('7', '45', '15', '14679', '6255', '0'), +('7', '45', '15', '14678', '5104', '0'), +('7', '45', '20', '11698', '9997', '0'), +('7', '45', '20', '11601', '9262', '0'), +('7', '45', '20', '2917', '5211', '0'), +('7', '45', '20', '1365', '4200', '0'), +('7', '45', '12', '2923', '3654', '0'), +('7', '45', '12', '11624', '3545', '0'), +('7', '45', '12', '8909', '1486', '0'), +('7', '45', '12', '1204', '1396', '0'), +('7', '45', '18', '2461', '2557', '0'), +('7', '45', '18', '1205', '1056', '0'), +('7', '45', '18', '25725', '978', '0'), +('7', '45', '18', '2462', '960', '0'), +('7', '45', '19', '1280', '3540', '0'), +('7', '45', '19', '1206', '2910', '0'), +('7', '45', '19', '68239', '1360', '0'), +('7', '45', '19', '25726', '791', '0'), +('7', '45', '13', '27715', '33788', '0'), +('7', '45', '13', '6502', '23333', '0'), +('7', '45', '13', '71308', '10400', '0'), +('7', '45', '13', '6691', '9867', '0'), +('7', '45', '14', '27715', '33788', '0'), +('7', '45', '14', '6502', '23333', '0'), +('7', '45', '14', '11644', '11154', '0'), +('7', '45', '14', '71308', '10400', '0'), +('7', '45', '11', '14762', '854', '0'), +('7', '45', '11', '13748', '489', '0'), +('7', '45', '11', '9246', '453', '0'), +('7', '45', '11', '20677', '69', '0'), +('7', '46', '22', '9246', '0', '0'), +('7', '46', '22', '10323', '0', '0'), +('7', '46', '22', '21509', '0', '0'), +('7', '46', '22', '8332', '0', '0'), +('7', '46', '1', '14701', '4052', '0'), +('7', '46', '1', '14702', '2850', '0'), +('7', '46', '1', '10165', '1638', '0'), +('7', '46', '1', '30361', '1140', '0'), +('7', '46', '2', '10142', '3012', '0'), +('7', '46', '2', '4504', '2158', '0'), +('7', '46', '2', '1405', '1810', '0'), +('7', '46', '2', '10116', '1600', '0'), +('7', '46', '3', '10144', '1206', '0'), +('7', '46', '3', '2403', '1146', '0'), +('7', '46', '3', '14705', '990', '0'), +('7', '46', '3', '14706', '990', '0'), +('7', '46', '5', '14703', '6050', '0'), +('7', '46', '5', '14700', '3753', '0'), +('7', '46', '5', '10055', '3505', '0'), +('7', '46', '5', '2583', '2444', '0'), +('7', '46', '8', '11621', '14377', '0'), +('7', '46', '8', '11562', '9310', '0'), +('7', '46', '8', '27714', '8867', '0'), +('7', '46', '8', '1546', '6920', '0'), +('7', '46', '6', '1557', '6760', '0'), +('7', '46', '6', '11561', '3282', '0'), +('7', '46', '6', '1283', '2986', '0'), +('7', '46', '6', '25062', '768', '0'), +('7', '46', '17', '12256', '8530', '0'), +('7', '46', '17', '2348', '2685', '0'), +('7', '46', '17', '1201', '2467', '0'), +('7', '46', '17', '2329', '1820', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '46', '7', '1202', '2994', '0'), +('7', '46', '7', '2458', '2406', '0'), +('7', '46', '7', '2342', '2155', '0'), +('7', '46', '7', '1361', '1764', '0'), +('7', '46', '9', '27714', '8867', '0'), +('7', '46', '9', '1203', '2043', '0'), +('7', '46', '9', '14650', '1952', '0'), +('7', '46', '9', '10360', '1351', '0'), +('7', '46', '15', '10366', '8163', '0'), +('7', '46', '15', '10151', '7200', '0'), +('7', '46', '15', '14679', '6255', '0'), +('7', '46', '15', '14678', '5104', '0'), +('7', '46', '20', '11698', '9997', '0'), +('7', '46', '20', '11601', '9305', '0'), +('7', '46', '20', '2917', '5211', '0'), +('7', '46', '20', '1365', '4200', '0'), +('7', '46', '12', '2923', '3654', '0'), +('7', '46', '12', '11624', '3575', '0'), +('7', '46', '12', '8909', '1496', '0'), +('7', '46', '12', '1204', '1396', '0'), +('7', '46', '18', '2461', '2557', '0'), +('7', '46', '18', '1205', '1056', '0'), +('7', '46', '18', '25725', '978', '0'), +('7', '46', '18', '2462', '975', '0'), +('7', '46', '19', '1280', '3540', '0'), +('7', '46', '19', '1206', '2948', '0'), +('7', '46', '19', '68239', '1360', '0'), +('7', '46', '19', '25726', '791', '0'), +('7', '46', '13', '27715', '36423', '0'), +('7', '46', '13', '6502', '25160', '0'), +('7', '46', '13', '71308', '11194', '0'), +('7', '46', '13', '6691', '10630', '0'), +('7', '46', '14', '27715', '36423', '0'), +('7', '46', '14', '6502', '25160', '0'), +('7', '46', '14', '71308', '11194', '0'), +('7', '46', '14', '11644', '11154', '0'), +('7', '46', '11', '14762', '854', '0'), +('7', '46', '11', '13748', '489', '0'), +('7', '46', '11', '9246', '453', '0'), +('7', '46', '11', '20677', '69', '0'), +('7', '47', '22', '9246', '0', '0'), +('7', '47', '22', '10323', '0', '0'), +('7', '47', '22', '21509', '0', '0'), +('7', '47', '22', '8332', '0', '0'), +('7', '47', '1', '14701', '4052', '0'), +('7', '47', '1', '14702', '2850', '0'), +('7', '47', '1', '10165', '1638', '0'), +('7', '47', '1', '30361', '1140', '0'), +('7', '47', '2', '10142', '3012', '0'), +('7', '47', '2', '4504', '2158', '0'), +('7', '47', '2', '1405', '1810', '0'), +('7', '47', '2', '10116', '1616', '0'), +('7', '47', '3', '10144', '1206', '0'), +('7', '47', '3', '2403', '1146', '0'), +('7', '47', '3', '14705', '990', '0'), +('7', '47', '3', '14706', '990', '0'), +('7', '47', '5', '14703', '6050', '0'), +('7', '47', '5', '14700', '3753', '0'), +('7', '47', '5', '10055', '3505', '0'), +('7', '47', '5', '2583', '2444', '0'), +('7', '47', '8', '11621', '14377', '0'), +('7', '47', '8', '11562', '9310', '0'), +('7', '47', '8', '27714', '8897', '0'), +('7', '47', '8', '1546', '6920', '0'), +('7', '47', '6', '1557', '6760', '0'), +('7', '47', '6', '11561', '3311', '0'), +('7', '47', '6', '1283', '2986', '0'), +('7', '47', '6', '25062', '768', '0'), +('7', '47', '17', '12256', '8552', '0'), +('7', '47', '17', '2348', '2706', '0'), +('7', '47', '17', '1201', '2467', '0'), +('7', '47', '17', '2329', '1834', '0'), +('7', '47', '7', '1202', '3032', '0'), +('7', '47', '7', '2458', '2406', '0'), +('7', '47', '7', '2342', '2168', '0'), +('7', '47', '7', '1361', '1764', '0'), +('7', '47', '9', '27714', '8897', '0'), +('7', '47', '9', '1203', '2064', '0'), +('7', '47', '9', '14650', '1952', '0'), +('7', '47', '9', '10360', '1351', '0'), +('7', '47', '15', '10366', '8163', '0'), +('7', '47', '15', '10151', '7200', '0'), +('7', '47', '15', '14679', '6255', '0'), +('7', '47', '15', '14678', '5104', '0'), +('7', '47', '20', '11698', '9997', '0'), +('7', '47', '20', '11601', '9347', '0'), +('7', '47', '20', '2917', '5211', '0'), +('7', '47', '20', '2742', '4221', '0'), +('7', '47', '12', '2923', '3654', '0'), +('7', '47', '12', '11624', '3604', '0'), +('7', '47', '12', '8909', '1507', '0'), +('7', '47', '12', '1204', '1396', '0'), +('7', '47', '18', '2461', '2557', '0'), +('7', '47', '18', '1205', '1056', '0'), +('7', '47', '18', '2462', '990', '0'), +('7', '47', '18', '25725', '978', '0'), +('7', '47', '19', '1280', '3540', '0'), +('7', '47', '19', '1206', '2986', '0'), +('7', '47', '19', '68239', '1360', '0'), +('7', '47', '19', '25726', '791', '0'), +('7', '47', '13', '27715', '37528', '0'), +('7', '47', '13', '6502', '25925', '0'), +('7', '47', '13', '71308', '11505', '0'), +('7', '47', '13', '6691', '10930', '0'), +('7', '47', '14', '27715', '37528', '0'), +('7', '47', '14', '6502', '25925', '0'), +('7', '47', '14', '71308', '11505', '0'), +('7', '47', '14', '11644', '11154', '0'), +('7', '47', '11', '14762', '854', '0'), +('7', '47', '11', '13748', '489', '0'), +('7', '47', '11', '9246', '453', '0'), +('7', '47', '11', '20677', '69', '0'), +('7', '48', '22', '9246', '0', '0'), +('7', '48', '22', '10323', '0', '0'), +('7', '48', '22', '21509', '0', '0'), +('7', '48', '22', '8332', '0', '0'), +('7', '48', '1', '14701', '4052', '0'), +('7', '48', '1', '14702', '2850', '0'), +('7', '48', '1', '10165', '1638', '0'), +('7', '48', '1', '14623', '1156', '0'), +('7', '48', '2', '10142', '3012', '0'), +('7', '48', '2', '4504', '2158', '0'), +('7', '48', '2', '1405', '1810', '0'), +('7', '48', '2', '10116', '1636', '0'), +('7', '48', '3', '10144', '1206', '0'), +('7', '48', '3', '2403', '1146', '0'), +('7', '48', '3', '14705', '990', '0'), +('7', '48', '3', '14706', '990', '0'), +('7', '48', '5', '14703', '6050', '0'), +('7', '48', '5', '14700', '3753', '0'), +('7', '48', '5', '10055', '3505', '0'), +('7', '48', '5', '2583', '2444', '0'), +('7', '48', '8', '11621', '14377', '0'), +('7', '48', '8', '11562', '9310', '0'), +('7', '48', '8', '27714', '8931', '0'), +('7', '48', '8', '1546', '6920', '0'), +('7', '48', '6', '1557', '6760', '0'), +('7', '48', '6', '11561', '3345', '0'), +('7', '48', '6', '1283', '2986', '0'), +('7', '48', '6', '25062', '768', '0'), +('7', '48', '17', '12256', '8576', '0'), +('7', '48', '17', '2348', '2730', '0'), +('7', '48', '17', '1201', '2467', '0'), +('7', '48', '17', '2329', '1850', '0'), +('7', '48', '7', '1202', '3076', '0'), +('7', '48', '7', '2458', '2406', '0'), +('7', '48', '7', '2342', '2182', '0'), +('7', '48', '7', '1361', '1764', '0'), +('7', '48', '9', '27714', '8931', '0'), +('7', '48', '9', '1203', '2088', '0'), +('7', '48', '9', '14650', '1952', '0'), +('7', '48', '9', '10360', '1351', '0'), +('7', '48', '15', '10366', '8163', '0'), +('7', '48', '15', '10151', '7200', '0'), +('7', '48', '15', '14679', '6255', '0'), +('7', '48', '15', '14678', '5104', '0'), +('7', '48', '20', '11698', '9997', '0'), +('7', '48', '20', '11601', '9395', '0'), +('7', '48', '20', '2917', '5211', '0'), +('7', '48', '20', '2742', '4269', '0'), +('7', '48', '12', '2923', '3654', '0'), +('7', '48', '12', '11624', '3638', '0'), +('7', '48', '12', '8909', '1519', '0'), +('7', '48', '12', '1204', '1396', '0'), +('7', '48', '18', '2461', '2557', '0'), +('7', '48', '18', '1205', '1056', '0'), +('7', '48', '18', '2462', '1008', '0'), +('7', '48', '18', '25725', '978', '0'), +('7', '48', '19', '1280', '3540', '0'), +('7', '48', '19', '1206', '3030', '0'), +('7', '48', '19', '68239', '1360', '0'), +('7', '48', '19', '25726', '791', '0'), +('7', '48', '13', '27715', '38590', '0'), +('7', '48', '13', '6502', '26648', '0'), +('7', '48', '13', '71308', '11845', '0'), +('7', '48', '13', '6691', '11253', '0'), +('7', '48', '14', '27715', '38590', '0'), +('7', '48', '14', '6502', '26648', '0'), +('7', '48', '14', '71308', '11845', '0'), +('7', '48', '14', '6691', '11253', '0'), +('7', '48', '11', '14762', '854', '0'), +('7', '48', '11', '13748', '489', '0'), +('7', '48', '11', '9246', '453', '0'), +('7', '48', '11', '20677', '69', '0'), +('7', '49', '22', '9246', '0', '0'), +('7', '49', '22', '10323', '0', '0'), +('7', '49', '22', '21509', '0', '0'), +('7', '49', '22', '8332', '0', '0'), +('7', '49', '1', '14701', '4052', '0'), +('7', '49', '1', '14702', '2850', '0'), +('7', '49', '1', '10165', '1638', '0'), +('7', '49', '1', '14623', '1181', '0'), +('7', '49', '2', '10142', '3012', '0'), +('7', '49', '2', '4504', '2158', '0'), +('7', '49', '2', '1405', '1810', '0'), +('7', '49', '2', '10116', '1653', '0'), +('7', '49', '3', '10144', '1206', '0'), +('7', '49', '3', '2403', '1146', '0'), +('7', '49', '3', '14705', '990', '0'), +('7', '49', '3', '14706', '990', '0'), +('7', '49', '5', '14703', '6050', '0'), +('7', '49', '5', '14700', '3753', '0'), +('7', '49', '5', '10055', '3505', '0'), +('7', '49', '5', '2583', '2444', '0'), +('7', '49', '8', '11621', '14377', '0'), +('7', '49', '8', '11562', '9310', '0'), +('7', '49', '8', '27714', '8960', '0'), +('7', '49', '8', '1546', '6920', '0'), +('7', '49', '6', '1557', '6760', '0'), +('7', '49', '6', '11561', '3375', '0'), +('7', '49', '6', '1283', '2986', '0'), +('7', '49', '6', '25062', '768', '0'), +('7', '49', '17', '12256', '8597', '0'), +('7', '49', '17', '2348', '2751', '0'), +('7', '49', '17', '1201', '2467', '0'), +('7', '49', '17', '2329', '1864', '0'), +('7', '49', '7', '1202', '3114', '0'), +('7', '49', '7', '2458', '2406', '0'), +('7', '49', '7', '2342', '2195', '0'), +('7', '49', '7', '1361', '1764', '0'), +('7', '49', '9', '27714', '8960', '0'), +('7', '49', '9', '1203', '2109', '0'), +('7', '49', '9', '14650', '1952', '0'), +('7', '49', '9', '10360', '1351', '0'), +('7', '49', '15', '10366', '8163', '0'), +('7', '49', '15', '10151', '7200', '0'), +('7', '49', '15', '14679', '6255', '0'), +('7', '49', '15', '14678', '5104', '0'), +('7', '49', '20', '11698', '9997', '0'), +('7', '49', '20', '11601', '9437', '0'), +('7', '49', '20', '2917', '5211', '0'), +('7', '49', '20', '2742', '4311', '0'), +('7', '49', '12', '11624', '3668', '0'), +('7', '49', '12', '2923', '3654', '0'), +('7', '49', '12', '8909', '1530', '0'), +('7', '49', '12', '1204', '1396', '0'), +('7', '49', '18', '2461', '2557', '0'), +('7', '49', '18', '1205', '1056', '0'), +('7', '49', '18', '2462', '1023', '0'), +('7', '49', '18', '25725', '978', '0'), +('7', '49', '19', '1280', '3540', '0'), +('7', '49', '19', '1206', '3068', '0'), +('7', '49', '19', '68239', '1360', '0'), +('7', '49', '19', '25726', '791', '0'), +('7', '49', '13', '27715', '39653', '0'), +('7', '49', '13', '6502', '27413', '0'), +('7', '49', '13', '71308', '12157', '0'), +('7', '49', '13', '6691', '11553', '0'), +('7', '49', '14', '27715', '39653', '0'), +('7', '49', '14', '6502', '27413', '0'), +('7', '49', '14', '71308', '12157', '0'), +('7', '49', '14', '6691', '11553', '0'), +('7', '49', '11', '14762', '854', '0'), +('7', '49', '11', '13748', '489', '0'), +('7', '49', '11', '9246', '453', '0'), +('7', '49', '11', '20677', '69', '0'), +('7', '50', '22', '9246', '0', '0'), +('7', '50', '22', '10323', '0', '0'), +('7', '50', '22', '21509', '0', '0'), +('7', '50', '22', '8332', '0', '0'), +('7', '50', '1', '14701', '4052', '0'), +('7', '50', '1', '14702', '2850', '0'), +('7', '50', '1', '10165', '1638', '0'), +('7', '50', '1', '14623', '1207', '0'), +('7', '50', '2', '10142', '3012', '0'), +('7', '50', '2', '4504', '2158', '0'), +('7', '50', '2', '1405', '1810', '0'), +('7', '50', '2', '10116', '1670', '0'), +('7', '50', '3', '10144', '1206', '0'), +('7', '50', '3', '2403', '1146', '0'), +('7', '50', '3', '14705', '990', '0'), +('7', '50', '3', '14706', '990', '0'), +('7', '50', '5', '14703', '6050', '0'), +('7', '50', '5', '14700', '3753', '0'), +('7', '50', '5', '10055', '3505', '0'), +('7', '50', '5', '2583', '2444', '0'), +('7', '50', '8', '11621', '14377', '0'), +('7', '50', '8', '11562', '9310', '0'), +('7', '50', '8', '27714', '8990', '0'), +('7', '50', '8', '1546', '6920', '0'), +('7', '50', '6', '1557', '6760', '0'), +('7', '50', '6', '11561', '3404', '0'), +('7', '50', '6', '1283', '2986', '0'), +('7', '50', '6', '25062', '768', '0'), +('7', '50', '17', '12256', '8618', '0'), +('7', '50', '17', '2348', '2772', '0'), +('7', '50', '17', '1201', '2467', '0'), +('7', '50', '17', '2329', '1878', '0'), +('7', '50', '7', '1202', '3152', '0'), +('7', '50', '7', '2458', '2406', '0'), +('7', '50', '7', '2342', '2207', '0'), +('7', '50', '7', '1361', '1764', '0'), +('7', '50', '9', '27714', '8990', '0'), +('7', '50', '9', '1203', '2130', '0'), +('7', '50', '9', '14650', '1952', '0'), +('7', '50', '9', '10360', '1351', '0'), +('7', '50', '15', '10366', '8163', '0'), +('7', '50', '15', '10151', '7200', '0'), +('7', '50', '15', '14679', '6255', '0'), +('7', '50', '15', '14678', '5104', '0'), +('7', '50', '20', '11698', '9997', '0'), +('7', '50', '20', '11601', '9480', '0'), +('7', '50', '20', '2917', '5211', '0'), +('7', '50', '20', '2742', '4354', '0'), +('7', '50', '12', '11624', '3697', '0'), +('7', '50', '12', '2923', '3654', '0'), +('7', '50', '12', '8909', '1541', '0'), +('7', '50', '12', '1204', '1396', '0'), +('7', '50', '18', '2461', '2557', '0'), +('7', '50', '18', '1205', '1056', '0'), +('7', '50', '18', '2462', '1038', '0'), +('7', '50', '18', '25725', '978', '0'), +('7', '50', '19', '1280', '3540', '0'), +('7', '50', '19', '1206', '3106', '0'), +('7', '50', '19', '68239', '1360', '0'), +('7', '50', '19', '25726', '791', '0'), +('7', '50', '13', '27715', '40715', '0'), +('7', '50', '13', '6502', '28135', '0'), +('7', '50', '13', '71308', '12497', '0'), +('7', '50', '13', '6691', '11877', '0'), +('7', '50', '14', '27715', '40715', '0'), +('7', '50', '14', '6502', '28135', '0'), +('7', '50', '14', '71308', '12497', '0'), +('7', '50', '14', '6691', '11877', '0'), +('7', '50', '11', '14762', '854', '0'), +('7', '50', '11', '13748', '489', '0'), +('7', '50', '11', '9246', '453', '0'), +('7', '50', '11', '20677', '69', '0'), +('7', '51', '22', '9246', '0', '0'), +('7', '51', '22', '10323', '0', '0'), +('7', '51', '22', '21509', '0', '0'), +('7', '51', '22', '8332', '0', '0'), +('7', '51', '1', '27822', '4926', '0'), +('7', '51', '1', '14701', '4052', '0'), +('7', '51', '1', '14702', '2850', '0'), +('7', '51', '1', '10165', '1638', '0'), +('7', '51', '2', '10142', '3012', '0'), +('7', '51', '2', '4504', '2158', '0'), +('7', '51', '2', '1405', '1810', '0'), +('7', '51', '2', '10116', '1689', '0'), +('7', '51', '3', '10144', '1206', '0'), +('7', '51', '3', '2403', '1146', '0'), +('7', '51', '3', '14705', '990', '0'), +('7', '51', '3', '14706', '990', '0'), +('7', '51', '5', '14703', '6050', '0'), +('7', '51', '5', '14700', '3753', '0'), +('7', '51', '5', '10055', '3505', '0'), +('7', '51', '5', '2583', '2444', '0'), +('7', '51', '8', '11621', '14377', '0'), +('7', '51', '8', '11562', '9310', '0'), +('7', '51', '8', '27714', '9024', '0'), +('7', '51', '8', '1546', '6920', '0'), +('7', '51', '6', '1557', '6760', '0'), +('7', '51', '6', '11561', '3438', '0'), +('7', '51', '6', '1283', '2986', '0'), +('7', '51', '6', '25062', '768', '0'), +('7', '51', '17', '12256', '8642', '0'), +('7', '51', '17', '2348', '2797', '0'), +('7', '51', '17', '1201', '2467', '0'), +('7', '51', '17', '2329', '1895', '0'), +('7', '51', '7', '1202', '3195', '0'), +('7', '51', '7', '2458', '2406', '0'), +('7', '51', '7', '2342', '2222', '0'), +('7', '51', '7', '1361', '1764', '0'), +('7', '51', '9', '27714', '9024', '0'), +('7', '51', '9', '1203', '2155', '0'), +('7', '51', '9', '14650', '1952', '0'), +('7', '51', '9', '10360', '1351', '0'), +('7', '51', '15', '10366', '8163', '0'), +('7', '51', '15', '10151', '7200', '0'), +('7', '51', '15', '14679', '6255', '0'), +('7', '51', '15', '14678', '5104', '0'), +('7', '51', '20', '11698', '9997', '0'), +('7', '51', '20', '11601', '9528', '0'), +('7', '51', '20', '2917', '5211', '0'), +('7', '51', '20', '2742', '4402', '0'), +('7', '51', '12', '11624', '3731', '0'), +('7', '51', '12', '2923', '3654', '0'), +('7', '51', '12', '8909', '1553', '0'), +('7', '51', '12', '1204', '1396', '0'), +('7', '51', '18', '2461', '2557', '0'), +('7', '51', '18', '1205', '1056', '0'), +('7', '51', '18', '2462', '1056', '0'), +('7', '51', '18', '25725', '978', '0'), +('7', '51', '19', '1280', '3540', '0'), +('7', '51', '19', '1206', '3149', '0'), +('7', '51', '19', '68239', '1360', '0'), +('7', '51', '19', '25726', '791', '0'), +('7', '51', '13', '27715', '41820', '0'), +('7', '51', '13', '6502', '28858', '0'), +('7', '51', '13', '71308', '12809', '0'), +('7', '51', '13', '6691', '12177', '0'), +('7', '51', '14', '27715', '41820', '0'), +('7', '51', '14', '6502', '28858', '0'), +('7', '51', '14', '71308', '12809', '0'), +('7', '51', '14', '6691', '12177', '0'), +('7', '51', '11', '14762', '854', '0'), +('7', '51', '11', '13748', '489', '0'), +('7', '51', '11', '9246', '453', '0'), +('7', '51', '11', '20677', '69', '0'), +('7', '52', '22', '9246', '0', '0'), +('7', '52', '22', '10323', '0', '0'), +('7', '52', '22', '21509', '0', '0'), +('7', '52', '22', '8332', '0', '0'), +('7', '52', '1', '27822', '4926', '0'), +('7', '52', '1', '14701', '4052', '0'), +('7', '52', '1', '14702', '2850', '0'), +('7', '52', '1', '10165', '1638', '0'), +('7', '52', '2', '10142', '3012', '0'), +('7', '52', '2', '4504', '2158', '0'), +('7', '52', '2', '1405', '1810', '0'), +('7', '52', '2', '10116', '1706', '0'), +('7', '52', '3', '10144', '1206', '0'), +('7', '52', '3', '2403', '1146', '0'), +('7', '52', '3', '14705', '990', '0'), +('7', '52', '3', '14706', '990', '0'), +('7', '52', '5', '14703', '6050', '0'), +('7', '52', '5', '14700', '3753', '0'), +('7', '52', '5', '10055', '3505', '0'), +('7', '52', '5', '2583', '2444', '0'), +('7', '52', '8', '11621', '14377', '0'), +('7', '52', '8', '11562', '9310', '0'), +('7', '52', '8', '27714', '9053', '0'), +('7', '52', '8', '1546', '6920', '0'), +('7', '52', '6', '1557', '6760', '0'), +('7', '52', '6', '11561', '3468', '0'), +('7', '52', '6', '1283', '2986', '0'), +('7', '52', '6', '25062', '768', '0'), +('7', '52', '17', '12256', '8663', '0'), +('7', '52', '17', '2348', '2818', '0'), +('7', '52', '17', '1201', '2467', '0'), +('7', '52', '17', '2329', '1909', '0'), +('7', '52', '7', '1202', '3233', '0'), +('7', '52', '7', '2458', '2406', '0'), +('7', '52', '7', '2342', '2235', '0'), +('7', '52', '7', '1361', '1764', '0'), +('7', '52', '9', '27714', '9053', '0'), +('7', '52', '9', '1203', '2176', '0'), +('7', '52', '9', '14650', '1952', '0'), +('7', '52', '9', '10360', '1351', '0'), +('7', '52', '15', '10366', '8163', '0'), +('7', '52', '15', '10151', '7200', '0'), +('7', '52', '15', '14679', '6255', '0'), +('7', '52', '15', '14678', '5104', '0'), +('7', '52', '20', '11698', '9997', '0'), +('7', '52', '20', '11601', '9570', '0'), +('7', '52', '20', '2917', '5211', '0'), +('7', '52', '20', '2742', '4444', '0'), +('7', '52', '12', '11624', '3761', '0'), +('7', '52', '12', '2923', '3654', '0'), +('7', '52', '12', '8909', '1564', '0'), +('7', '52', '12', '1204', '1396', '0'), +('7', '52', '18', '2461', '2557', '0'), +('7', '52', '18', '2462', '1071', '0'), +('7', '52', '18', '1205', '1056', '0'), +('7', '52', '18', '25725', '978', '0'), +('7', '52', '19', '1280', '3540', '0'), +('7', '52', '19', '1206', '3187', '0'), +('7', '52', '19', '68239', '1360', '0'), +('7', '52', '19', '25726', '791', '0'), +('7', '52', '13', '27715', '42883', '0'), +('7', '52', '13', '6502', '29623', '0'), +('7', '52', '13', '71308', '13149', '0'), +('7', '52', '13', '6691', '12500', '0'), +('7', '52', '14', '27715', '42883', '0'), +('7', '52', '14', '6502', '29623', '0'), +('7', '52', '14', '71308', '13149', '0'), +('7', '52', '14', '6691', '12500', '0'), +('7', '52', '11', '14762', '854', '0'), +('7', '52', '11', '13748', '489', '0'), +('7', '52', '11', '9246', '453', '0'), +('7', '52', '11', '20677', '69', '0'), +('7', '53', '22', '9246', '0', '0'), +('7', '53', '22', '10323', '0', '0'), +('7', '53', '22', '21509', '0', '0'), +('7', '53', '22', '8332', '0', '0'), +('7', '53', '1', '27822', '4926', '0'), +('7', '53', '1', '14701', '4052', '0'), +('7', '53', '1', '14702', '2850', '0'), +('7', '53', '1', '10165', '1638', '0'), +('7', '53', '2', '10142', '3012', '0'), +('7', '53', '2', '4504', '2158', '0'), +('7', '53', '2', '1405', '1810', '0'), +('7', '53', '2', '10116', '1723', '0'), +('7', '53', '3', '10144', '1206', '0'), +('7', '53', '3', '2403', '1146', '0'), +('7', '53', '3', '14705', '990', '0'), +('7', '53', '3', '14706', '990', '0'), +('7', '53', '5', '14703', '6050', '0'), +('7', '53', '5', '14700', '3753', '0'), +('7', '53', '5', '10055', '3505', '0'), +('7', '53', '5', '2583', '2444', '0'), +('7', '53', '8', '11621', '14377', '0'), +('7', '53', '8', '11562', '9310', '0'), +('7', '53', '8', '27714', '9083', '0'), +('7', '53', '8', '1546', '6920', '0'), +('7', '53', '6', '1557', '6760', '0'), +('7', '53', '6', '11561', '3497', '0'), +('7', '53', '6', '1283', '2986', '0'), +('7', '53', '6', '25062', '768', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '53', '17', '12256', '8684', '0'), +('7', '53', '17', '2348', '2839', '0'), +('7', '53', '17', '1201', '2467', '0'), +('7', '53', '17', '2329', '1923', '0'), +('7', '53', '7', '1202', '3271', '0'), +('7', '53', '7', '2458', '2406', '0'), +('7', '53', '7', '2342', '2247', '0'), +('7', '53', '7', '1361', '1764', '0'), +('7', '53', '9', '27714', '9083', '0'), +('7', '53', '9', '1203', '2197', '0'), +('7', '53', '9', '14650', '1952', '0'), +('7', '53', '9', '10360', '1351', '0'), +('7', '53', '15', '10366', '8163', '0'), +('7', '53', '15', '10151', '7200', '0'), +('7', '53', '15', '14679', '6255', '0'), +('7', '53', '15', '14678', '5104', '0'), +('7', '53', '20', '11698', '9997', '0'), +('7', '53', '20', '11601', '9613', '0'), +('7', '53', '20', '2917', '5211', '0'), +('7', '53', '20', '2742', '4486', '0'), +('7', '53', '12', '11624', '3790', '0'), +('7', '53', '12', '2923', '3654', '0'), +('7', '53', '12', '8909', '1574', '0'), +('7', '53', '12', '1204', '1396', '0'), +('7', '53', '18', '2461', '2557', '0'), +('7', '53', '18', '2462', '1086', '0'), +('7', '53', '18', '1205', '1056', '0'), +('7', '53', '18', '25725', '978', '0'), +('7', '53', '19', '1280', '3540', '0'), +('7', '53', '19', '1206', '3225', '0'), +('7', '53', '19', '68239', '1360', '0'), +('7', '53', '19', '25726', '791', '0'), +('7', '53', '13', '27715', '43945', '0'), +('7', '53', '13', '6502', '30345', '0'), +('7', '53', '13', '71308', '13460', '0'), +('7', '53', '13', '6691', '12801', '0'), +('7', '53', '14', '27715', '43945', '0'), +('7', '53', '14', '6502', '30345', '0'), +('7', '53', '14', '71308', '13460', '0'), +('7', '53', '14', '6691', '12801', '0'), +('7', '53', '11', '14762', '854', '0'), +('7', '53', '11', '13748', '489', '0'), +('7', '53', '11', '9246', '453', '0'), +('7', '53', '11', '20677', '69', '0'), +('7', '54', '22', '9246', '0', '0'), +('7', '54', '22', '10323', '0', '0'), +('7', '54', '22', '21509', '0', '0'), +('7', '54', '22', '8332', '0', '0'), +('7', '54', '1', '27822', '4926', '0'), +('7', '54', '1', '14701', '4052', '0'), +('7', '54', '1', '14702', '2850', '0'), +('7', '54', '1', '10165', '1638', '0'), +('7', '54', '2', '10142', '3012', '0'), +('7', '54', '2', '4504', '2158', '0'), +('7', '54', '2', '1405', '1810', '0'), +('7', '54', '2', '10116', '1742', '0'), +('7', '54', '3', '10144', '1206', '0'), +('7', '54', '3', '2403', '1146', '0'), +('7', '54', '3', '14705', '990', '0'), +('7', '54', '3', '14706', '990', '0'), +('7', '54', '5', '14703', '6050', '0'), +('7', '54', '5', '14700', '3753', '0'), +('7', '54', '5', '10055', '3505', '0'), +('7', '54', '5', '2583', '2444', '0'), +('7', '54', '8', '11621', '14377', '0'), +('7', '54', '8', '11562', '9310', '0'), +('7', '54', '8', '27714', '9117', '0'), +('7', '54', '8', '1546', '6920', '0'), +('7', '54', '6', '1557', '6760', '0'), +('7', '54', '6', '11561', '3531', '0'), +('7', '54', '6', '1283', '2986', '0'), +('7', '54', '6', '25062', '768', '0'), +('7', '54', '17', '12256', '8709', '0'), +('7', '54', '17', '2348', '2863', '0'), +('7', '54', '17', '1201', '2467', '0'), +('7', '54', '17', '2329', '1939', '0'), +('7', '54', '7', '1202', '3315', '0'), +('7', '54', '7', '2458', '2406', '0'), +('7', '54', '7', '2342', '2262', '0'), +('7', '54', '7', '1361', '1764', '0'), +('7', '54', '9', '27714', '9117', '0'), +('7', '54', '9', '1203', '2221', '0'), +('7', '54', '9', '14650', '1952', '0'), +('7', '54', '9', '10360', '1351', '0'), +('7', '54', '15', '10366', '8163', '0'), +('7', '54', '15', '10151', '7200', '0'), +('7', '54', '15', '14679', '6255', '0'), +('7', '54', '15', '14678', '5104', '0'), +('7', '54', '20', '11698', '9997', '0'), +('7', '54', '20', '11601', '9661', '0'), +('7', '54', '20', '2917', '5211', '0'), +('7', '54', '20', '2742', '4535', '0'), +('7', '54', '12', '11624', '3824', '0'), +('7', '54', '12', '2923', '3654', '0'), +('7', '54', '12', '8909', '1586', '0'), +('7', '54', '12', '1204', '1396', '0'), +('7', '54', '18', '2461', '2557', '0'), +('7', '54', '18', '2462', '1104', '0'), +('7', '54', '18', '1205', '1056', '0'), +('7', '54', '18', '25725', '978', '0'), +('7', '54', '19', '1280', '3540', '0'), +('7', '54', '19', '1206', '3269', '0'), +('7', '54', '19', '68239', '1360', '0'), +('7', '54', '19', '25726', '791', '0'), +('7', '54', '13', '27715', '45050', '0'), +('7', '54', '13', '6502', '31110', '0'), +('7', '54', '13', '71308', '13772', '0'), +('7', '54', '13', '6691', '13124', '0'), +('7', '54', '14', '27715', '45050', '0'), +('7', '54', '14', '6502', '31110', '0'), +('7', '54', '14', '71308', '13772', '0'), +('7', '54', '14', '6691', '13124', '0'), +('7', '54', '11', '14762', '854', '0'), +('7', '54', '11', '13748', '489', '0'), +('7', '54', '11', '9246', '453', '0'), +('7', '54', '11', '20677', '69', '0'), +('7', '55', '22', '9246', '0', '0'), +('7', '55', '22', '10323', '0', '0'), +('7', '55', '22', '21509', '0', '0'), +('7', '55', '22', '8332', '0', '0'), +('7', '55', '1', '27822', '4926', '0'), +('7', '55', '1', '14701', '4052', '0'), +('7', '55', '1', '14702', '2850', '0'), +('7', '55', '1', '10165', '1638', '0'), +('7', '55', '2', '10142', '3012', '0'), +('7', '55', '2', '4504', '2158', '0'), +('7', '55', '2', '1405', '1810', '0'), +('7', '55', '2', '10116', '1759', '0'), +('7', '55', '3', '10144', '1206', '0'), +('7', '55', '3', '2403', '1146', '0'), +('7', '55', '3', '14705', '990', '0'), +('7', '55', '3', '14706', '990', '0'), +('7', '55', '5', '14703', '6050', '0'), +('7', '55', '5', '14700', '3753', '0'), +('7', '55', '5', '10055', '3505', '0'), +('7', '55', '5', '2583', '2444', '0'), +('7', '55', '8', '11621', '14377', '0'), +('7', '55', '8', '11562', '9310', '0'), +('7', '55', '8', '27714', '9146', '0'), +('7', '55', '8', '1546', '6920', '0'), +('7', '55', '6', '1557', '6760', '0'), +('7', '55', '6', '11561', '3561', '0'), +('7', '55', '6', '1283', '2986', '0'), +('7', '55', '6', '25062', '768', '0'), +('7', '55', '17', '12256', '8730', '0'), +('7', '55', '17', '2348', '2884', '0'), +('7', '55', '17', '1201', '2467', '0'), +('7', '55', '17', '2329', '1953', '0'), +('7', '55', '7', '1202', '3353', '0'), +('7', '55', '7', '2458', '2406', '0'), +('7', '55', '7', '2342', '2274', '0'), +('7', '55', '7', '1361', '1764', '0'), +('7', '55', '9', '27714', '9146', '0'), +('7', '55', '9', '1203', '2242', '0'), +('7', '55', '9', '14650', '1952', '0'), +('7', '55', '9', '10360', '1351', '0'), +('7', '55', '15', '10366', '8163', '0'), +('7', '55', '15', '10151', '7200', '0'), +('7', '55', '15', '14679', '6255', '0'), +('7', '55', '15', '14678', '5104', '0'), +('7', '55', '20', '11698', '9997', '0'), +('7', '55', '20', '11601', '9703', '0'), +('7', '55', '20', '2917', '5211', '0'), +('7', '55', '20', '2742', '4577', '0'), +('7', '55', '12', '11624', '3854', '0'), +('7', '55', '12', '2923', '3654', '0'), +('7', '55', '12', '8909', '1597', '0'), +('7', '55', '12', '1204', '1396', '0'), +('7', '55', '18', '2461', '2557', '0'), +('7', '55', '18', '2462', '1119', '0'), +('7', '55', '18', '1205', '1056', '0'), +('7', '55', '18', '25725', '978', '0'), +('7', '55', '19', '1280', '3540', '0'), +('7', '55', '19', '1206', '3307', '0'), +('7', '55', '19', '68239', '1360', '0'), +('7', '55', '19', '25726', '791', '0'), +('7', '55', '13', '27715', '46113', '0'), +('7', '55', '13', '6502', '31833', '0'), +('7', '55', '13', '71308', '14112', '0'), +('7', '55', '13', '6691', '13424', '0'), +('7', '55', '14', '27715', '46113', '0'), +('7', '55', '14', '6502', '31833', '0'), +('7', '55', '14', '71308', '14112', '0'), +('7', '55', '14', '6691', '13424', '0'), +('7', '55', '11', '14762', '854', '0'), +('7', '55', '11', '13748', '489', '0'), +('7', '55', '11', '9246', '453', '0'), +('7', '55', '11', '20677', '69', '0'), +('7', '56', '22', '9246', '0', '0'), +('7', '56', '22', '10323', '0', '0'), +('7', '56', '22', '21509', '0', '0'), +('7', '56', '22', '8332', '0', '0'), +('7', '56', '1', '27822', '4926', '0'), +('7', '56', '1', '14701', '4052', '0'), +('7', '56', '1', '14702', '2850', '0'), +('7', '56', '1', '10165', '1638', '0'), +('7', '56', '2', '10142', '3012', '0'), +('7', '56', '2', '4504', '2158', '0'), +('7', '56', '2', '1405', '1810', '0'), +('7', '56', '2', '10116', '1778', '0'), +('7', '56', '3', '10144', '1206', '0'), +('7', '56', '3', '2403', '1146', '0'), +('7', '56', '3', '14705', '990', '0'), +('7', '56', '3', '14706', '990', '0'), +('7', '56', '5', '14703', '6050', '0'), +('7', '56', '5', '14700', '3753', '0'), +('7', '56', '5', '10055', '3505', '0'), +('7', '56', '5', '2583', '2444', '0'), +('7', '56', '8', '11621', '14377', '0'), +('7', '56', '8', '11562', '9310', '0'), +('7', '56', '8', '27714', '9180', '0'), +('7', '56', '8', '1546', '6920', '0'), +('7', '56', '6', '1557', '6760', '0'), +('7', '56', '6', '11561', '3594', '0'), +('7', '56', '6', '1283', '2986', '0'), +('7', '56', '6', '25062', '768', '0'), +('7', '56', '17', '12256', '8754', '0'), +('7', '56', '17', '2348', '2908', '0'), +('7', '56', '17', '1201', '2467', '0'), +('7', '56', '17', '2329', '1969', '0'), +('7', '56', '7', '1202', '3396', '0'), +('7', '56', '7', '2458', '2406', '0'), +('7', '56', '7', '2342', '2289', '0'), +('7', '56', '7', '1361', '1764', '0'), +('7', '56', '9', '27714', '9180', '0'), +('7', '56', '9', '1203', '2266', '0'), +('7', '56', '9', '14650', '1952', '0'), +('7', '56', '9', '10360', '1351', '0'), +('7', '56', '15', '10366', '8163', '0'), +('7', '56', '15', '10151', '7200', '0'), +('7', '56', '15', '14679', '6255', '0'), +('7', '56', '15', '14678', '5104', '0'), +('7', '56', '20', '11698', '9997', '0'), +('7', '56', '20', '11601', '9752', '0'), +('7', '56', '20', '2917', '5211', '0'), +('7', '56', '20', '2742', '4625', '0'), +('7', '56', '12', '11624', '3888', '0'), +('7', '56', '12', '2923', '3654', '0'), +('7', '56', '12', '8909', '1609', '0'), +('7', '56', '12', '1204', '1396', '0'), +('7', '56', '18', '2461', '2557', '0'), +('7', '56', '18', '2462', '1137', '0'), +('7', '56', '18', '1205', '1056', '0'), +('7', '56', '18', '25725', '978', '0'), +('7', '56', '19', '1280', '3540', '0'), +('7', '56', '19', '1206', '3350', '0'), +('7', '56', '19', '68239', '1360', '0'), +('7', '56', '19', '25726', '791', '0'), +('7', '56', '13', '27715', '47175', '0'), +('7', '56', '13', '6502', '32598', '0'), +('7', '56', '13', '71308', '14424', '0'), +('7', '56', '13', '6691', '13748', '0'), +('7', '56', '14', '27715', '47175', '0'), +('7', '56', '14', '6502', '32598', '0'), +('7', '56', '14', '71308', '14424', '0'), +('7', '56', '14', '6691', '13748', '0'), +('7', '56', '11', '14762', '854', '0'), +('7', '56', '11', '13748', '489', '0'), +('7', '56', '11', '9246', '453', '0'), +('7', '56', '11', '20677', '69', '0'), +('7', '57', '22', '9246', '0', '0'), +('7', '57', '22', '10323', '0', '0'), +('7', '57', '22', '21509', '0', '0'), +('7', '57', '22', '8332', '0', '0'), +('7', '57', '1', '27822', '4926', '0'), +('7', '57', '1', '14701', '4052', '0'), +('7', '57', '1', '14702', '2850', '0'), +('7', '57', '1', '10165', '1638', '0'), +('7', '57', '2', '10142', '3012', '0'), +('7', '57', '2', '4504', '2158', '0'), +('7', '57', '2', '1405', '1810', '0'), +('7', '57', '2', '10116', '1795', '0'), +('7', '57', '3', '10144', '1206', '0'), +('7', '57', '3', '2403', '1146', '0'), +('7', '57', '3', '14705', '990', '0'), +('7', '57', '3', '14706', '990', '0'), +('7', '57', '5', '14703', '6050', '0'), +('7', '57', '5', '14700', '3753', '0'), +('7', '57', '5', '10055', '3505', '0'), +('7', '57', '5', '2583', '2444', '0'), +('7', '57', '8', '11621', '14377', '0'), +('7', '57', '8', '11562', '9310', '0'), +('7', '57', '8', '27714', '9210', '0'), +('7', '57', '8', '1546', '6920', '0'), +('7', '57', '6', '1557', '6760', '0'), +('7', '57', '6', '11561', '3624', '0'), +('7', '57', '6', '1283', '2986', '0'), +('7', '57', '6', '25062', '768', '0'), +('7', '57', '17', '12256', '8775', '0'), +('7', '57', '17', '2348', '2929', '0'), +('7', '57', '17', '1201', '2467', '0'), +('7', '57', '17', '2329', '1983', '0'), +('7', '57', '7', '1202', '3434', '0'), +('7', '57', '7', '2458', '2406', '0'), +('7', '57', '7', '2342', '2302', '0'), +('7', '57', '7', '1361', '1764', '0'), +('7', '57', '9', '27714', '9210', '0'), +('7', '57', '9', '1203', '2288', '0'), +('7', '57', '9', '14650', '1952', '0'), +('7', '57', '9', '10360', '1351', '0'), +('7', '57', '15', '10366', '8163', '0'), +('7', '57', '15', '10151', '7200', '0'), +('7', '57', '15', '14679', '6255', '0'), +('7', '57', '15', '14678', '5104', '0'), +('7', '57', '20', '11698', '9997', '0'), +('7', '57', '20', '11601', '9794', '0'), +('7', '57', '20', '2917', '5211', '0'), +('7', '57', '20', '2742', '4668', '0'), +('7', '57', '12', '11624', '3917', '0'), +('7', '57', '12', '2923', '3654', '0'), +('7', '57', '12', '8909', '1620', '0'), +('7', '57', '12', '1204', '1396', '0'), +('7', '57', '18', '2461', '2557', '0'), +('7', '57', '18', '2462', '1152', '0'), +('7', '57', '18', '1205', '1056', '0'), +('7', '57', '18', '25725', '978', '0'), +('7', '57', '19', '1280', '3540', '0'), +('7', '57', '19', '1206', '3388', '0'), +('7', '57', '19', '68239', '1360', '0'), +('7', '57', '19', '25726', '791', '0'), +('7', '57', '13', '27715', '48238', '0'), +('7', '57', '13', '6502', '33320', '0'), +('7', '57', '13', '71308', '14764', '0'), +('7', '57', '13', '6691', '14048', '0'), +('7', '57', '14', '27715', '48238', '0'), +('7', '57', '14', '6502', '33320', '0'), +('7', '57', '14', '71308', '14764', '0'), +('7', '57', '14', '6691', '14048', '0'), +('7', '57', '11', '14762', '854', '0'), +('7', '57', '11', '13748', '489', '0'), +('7', '57', '11', '9246', '453', '0'), +('7', '57', '11', '20677', '69', '0'), +('7', '58', '22', '9246', '0', '0'), +('7', '58', '22', '10323', '0', '0'), +('7', '58', '22', '21509', '0', '0'), +('7', '58', '22', '8332', '0', '0'), +('7', '58', '1', '27822', '4926', '0'), +('7', '58', '1', '14701', '4052', '0'), +('7', '58', '1', '14702', '2850', '0'), +('7', '58', '1', '10165', '1638', '0'), +('7', '58', '2', '10142', '3012', '0'), +('7', '58', '2', '4504', '2158', '0'), +('7', '58', '2', '10116', '1815', '0'), +('7', '58', '2', '1405', '1810', '0'), +('7', '58', '3', '10144', '1206', '0'), +('7', '58', '3', '2403', '1146', '0'), +('7', '58', '3', '14705', '990', '0'), +('7', '58', '3', '14706', '990', '0'), +('7', '58', '5', '14703', '6050', '0'), +('7', '58', '5', '14700', '3753', '0'), +('7', '58', '5', '10055', '3505', '0'), +('7', '58', '5', '2583', '2444', '0'), +('7', '58', '8', '11621', '14377', '0'), +('7', '58', '8', '11562', '9310', '0'), +('7', '58', '8', '27714', '9244', '0'), +('7', '58', '8', '1546', '6920', '0'), +('7', '58', '6', '1557', '6760', '0'), +('7', '58', '6', '11561', '3658', '0'), +('7', '58', '6', '1283', '2986', '0'), +('7', '58', '6', '25062', '768', '0'), +('7', '58', '17', '12256', '8799', '0'), +('7', '58', '17', '2348', '2954', '0'), +('7', '58', '17', '1201', '2467', '0'), +('7', '58', '17', '2329', '1999', '0'), +('7', '58', '7', '1202', '3478', '0'), +('7', '58', '7', '2458', '2406', '0'), +('7', '58', '7', '2342', '2316', '0'), +('7', '58', '7', '1361', '1764', '0'), +('7', '58', '9', '27714', '9244', '0'), +('7', '58', '9', '1203', '2312', '0'), +('7', '58', '9', '14650', '1952', '0'), +('7', '58', '9', '10360', '1351', '0'), +('7', '58', '15', '10366', '8163', '0'), +('7', '58', '15', '10151', '7200', '0'), +('7', '58', '15', '14679', '6255', '0'), +('7', '58', '15', '14678', '5104', '0'), +('7', '58', '20', '11698', '9997', '0'), +('7', '58', '20', '11601', '9842', '0'), +('7', '58', '20', '2917', '5211', '0'), +('7', '58', '20', '2742', '4716', '0'), +('7', '58', '12', '11624', '3951', '0'), +('7', '58', '12', '2923', '3654', '0'), +('7', '58', '12', '8909', '1632', '0'), +('7', '58', '12', '1204', '1396', '0'), +('7', '58', '18', '2461', '2557', '0'), +('7', '58', '18', '2462', '1169', '0'), +('7', '58', '18', '1205', '1056', '0'), +('7', '58', '18', '25725', '978', '0'), +('7', '58', '19', '1280', '3540', '0'), +('7', '58', '19', '1206', '3432', '0'), +('7', '58', '19', '68239', '1360', '0'), +('7', '58', '19', '25726', '791', '0'), +('7', '58', '13', '27715', '49343', '0'), +('7', '58', '13', '6502', '34085', '0'), +('7', '58', '13', '71308', '15075', '0'), +('7', '58', '13', '6691', '14371', '0'), +('7', '58', '14', '27715', '49343', '0'), +('7', '58', '14', '6502', '34085', '0'), +('7', '58', '14', '71308', '15075', '0'), +('7', '58', '14', '6691', '14371', '0'), +('7', '58', '11', '14762', '854', '0'), +('7', '58', '11', '13748', '489', '0'), +('7', '58', '11', '9246', '453', '0'), +('7', '58', '11', '20677', '69', '0'), +('7', '59', '22', '9246', '0', '0'), +('7', '59', '22', '10323', '0', '0'), +('7', '59', '22', '21509', '0', '0'), +('7', '59', '22', '8332', '0', '0'), +('7', '59', '1', '27822', '4926', '0'), +('7', '59', '1', '14701', '4052', '0'), +('7', '59', '1', '14702', '2850', '0'), +('7', '59', '1', '10165', '1638', '0'), +('7', '59', '2', '10142', '3012', '0'), +('7', '59', '2', '4504', '2158', '0'), +('7', '59', '2', '10116', '1831', '0'), +('7', '59', '2', '1405', '1810', '0'), +('7', '59', '3', '10144', '1206', '0'), +('7', '59', '3', '2403', '1146', '0'), +('7', '59', '3', '14705', '990', '0'), +('7', '59', '3', '14706', '990', '0'), +('7', '59', '5', '14703', '6050', '0'), +('7', '59', '5', '14700', '3753', '0'), +('7', '59', '5', '10055', '3505', '0'), +('7', '59', '5', '2583', '2444', '0'), +('7', '59', '8', '11621', '14377', '0'), +('7', '59', '8', '11562', '9310', '0'), +('7', '59', '8', '27714', '9273', '0'), +('7', '59', '8', '1546', '6920', '0'), +('7', '59', '6', '1557', '6760', '0'), +('7', '59', '6', '11561', '3687', '0'), +('7', '59', '6', '1283', '2986', '0'), +('7', '59', '6', '25062', '768', '0'), +('7', '59', '17', '12256', '8820', '0'), +('7', '59', '17', '2348', '2975', '0'), +('7', '59', '17', '1201', '2467', '0'), +('7', '59', '17', '2329', '2013', '0'), +('7', '59', '7', '1202', '3516', '0'), +('7', '59', '7', '2458', '2406', '0'), +('7', '59', '7', '2342', '2329', '0'), +('7', '59', '7', '1361', '1764', '0'), +('7', '59', '9', '27714', '9273', '0'), +('7', '59', '9', '1203', '2333', '0'), +('7', '59', '9', '14650', '1952', '0'), +('7', '59', '9', '10360', '1351', '0'), +('7', '59', '15', '10366', '8163', '0'), +('7', '59', '15', '10151', '7200', '0'), +('7', '59', '15', '14679', '6255', '0'), +('7', '59', '15', '14678', '5104', '0'), +('7', '59', '20', '11698', '9997', '0'), +('7', '59', '20', '11601', '9884', '0'), +('7', '59', '20', '2917', '5211', '0'), +('7', '59', '20', '2742', '4758', '0'), +('7', '59', '12', '11624', '3981', '0'), +('7', '59', '12', '2923', '3654', '0'), +('7', '59', '12', '8909', '1643', '0'), +('7', '59', '12', '1204', '1396', '0'), +('7', '59', '18', '2461', '2557', '0'), +('7', '59', '18', '2462', '1185', '0'), +('7', '59', '18', '1205', '1056', '0'), +('7', '59', '18', '25725', '978', '0'), +('7', '59', '19', '1280', '3540', '0'), +('7', '59', '19', '1206', '3470', '0'), +('7', '59', '19', '68239', '1360', '0'), +('7', '59', '19', '25726', '791', '0'), +('7', '59', '13', '27715', '50405', '0'), +('7', '59', '13', '6502', '34808', '0'), +('7', '59', '13', '71308', '15415', '0'), +('7', '59', '13', '6691', '14672', '0'), +('7', '59', '14', '27715', '50405', '0'), +('7', '59', '14', '6502', '34808', '0'), +('7', '59', '14', '71308', '15415', '0'), +('7', '59', '14', '6691', '14672', '0'), +('7', '59', '11', '14762', '854', '0'), +('7', '59', '11', '13748', '489', '0'), +('7', '59', '11', '9246', '453', '0'), +('7', '59', '11', '20677', '69', '0'), +('7', '60', '22', '61948', '0', '3'), +('7', '60', '22', '66397', '0', '3'), +('7', '60', '22', '21805', '0', '3'), +('7', '60', '22', '21807', '0', '3'), +('7', '60', '1', '28962', '13139', '3'), +('7', '60', '1', '29861', '12683', '3'), +('7', '60', '1', '63170', '12351', '3'), +('7', '60', '1', '7945', '11423', '3'), +('7', '60', '2', '31223', '18119', '3'), +('7', '60', '2', '26535', '13800', '3'), +('7', '60', '2', '2612', '12730', '3'), +('7', '60', '2', '26025', '12730', '3'), +('7', '60', '3', '31233', '12327', '3'), +('7', '60', '3', '26560', '11234', '3'), +('7', '60', '3', '26582', '10779', '3'), +('7', '60', '3', '31464', '10272', '3'), +('7', '60', '5', '8364', '19466', '3'), +('7', '60', '5', '27266', '13707', '3'), +('7', '60', '5', '26584', '13364', '3'), +('7', '60', '5', '31234', '12355', '3'), +('7', '60', '8', '31471', '19188', '3'), +('7', '60', '8', '26766', '13877', '3'), +('7', '60', '8', '11621', '12679', '3'), +('7', '60', '8', '28918', '12442', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '60', '6', '28902', '14134', '3'), +('7', '60', '6', '31472', '13149', '3'), +('7', '60', '6', '30551', '11895', '3'), +('7', '60', '6', '5723', '11600', '3'), +('7', '60', '17', '59949', '16564', '3'), +('7', '60', '17', '29456', '16564', '3'), +('7', '60', '17', '1137', '12397', '3'), +('7', '60', '17', '10845', '11795', '3'), +('7', '60', '7', '26584', '13364', '3'), +('7', '60', '7', '8288', '12596', '3'), +('7', '60', '7', '5723', '11600', '3'), +('7', '60', '7', '30528', '9277', '3'), +('7', '60', '9', '31461', '20093', '3'), +('7', '60', '9', '26584', '13364', '3'), +('7', '60', '9', '5723', '11600', '3'), +('7', '60', '9', '31460', '11356', '3'), +('7', '60', '15', '26749', '16111', '3'), +('7', '60', '15', '31231', '12575', '3'), +('7', '60', '15', '26757', '12441', '3'), +('7', '60', '15', '63170', '12351', '3'), +('7', '60', '20', '31235', '18385', '3'), +('7', '60', '20', '31334', '16220', '3'), +('7', '60', '20', '26551', '15795', '3'), +('7', '60', '20', '26556', '13393', '3'), +('7', '60', '12', '25857', '17882', '3'), +('7', '60', '12', '1683', '11597', '3'), +('7', '60', '12', '28967', '10442', '3'), +('7', '60', '12', '28949', '9640', '3'), +('7', '60', '18', '26772', '14824', '3'), +('7', '60', '18', '8289', '10330', '3'), +('7', '60', '18', '25212', '10202', '3'), +('7', '60', '18', '28965', '10100', '3'), +('7', '60', '19', '30569', '17655', '3'), +('7', '60', '19', '24616', '11338', '3'), +('7', '60', '19', '28888', '10808', '3'), +('7', '60', '19', '28934', '9237', '3'), +('7', '60', '13', '27315', '83476', '3'), +('7', '60', '13', '26809', '80922', '3'), +('7', '60', '13', '26849', '80649', '3'), +('7', '60', '13', '26861', '76897', '3'), +('7', '60', '14', '27315', '83476', '3'), +('7', '60', '14', '26809', '80922', '3'), +('7', '60', '14', '26849', '80649', '3'), +('7', '60', '14', '26861', '76897', '3'), +('7', '60', '11', '26563', '16416', '3'), +('7', '60', '11', '30565', '11304', '3'), +('7', '60', '11', '26562', '11117', '3'), +('7', '60', '11', '28948', '10698', '3'), +('7', '60', '22', '10323', '0', '2'), +('7', '60', '22', '9248', '0', '2'), +('7', '60', '22', '12425', '0', '2'), +('7', '60', '22', '30014', '0', '2'), +('7', '60', '1', '30391', '8045', '2'), +('7', '60', '1', '2748', '7995', '2'), +('7', '60', '1', '5716', '7597', '2'), +('7', '60', '1', '2065', '7363', '2'), +('7', '60', '2', '31223', '19787', '2'), +('7', '60', '2', '26025', '13525', '2'), +('7', '60', '2', '2612', '13525', '2'), +('7', '60', '2', '31417', '11414', '2'), +('7', '60', '3', '31233', '13588', '2'), +('7', '60', '3', '31464', '11476', '2'), +('7', '60', '3', '31244', '10486', '2'), +('7', '60', '3', '1547', '6381', '2'), +('7', '60', '5', '27266', '14267', '2'), +('7', '60', '5', '31234', '13392', '2'), +('7', '60', '5', '31460', '12903', '2'), +('7', '60', '5', '1550', '12060', '2'), +('7', '60', '8', '31471', '20559', '2'), +('7', '60', '8', '11621', '12962', '2'), +('7', '60', '8', '31376', '11730', '2'), +('7', '60', '8', '25207', '11267', '2'), +('7', '60', '6', '31472', '14621', '2'), +('7', '60', '6', '5723', '12099', '2'), +('7', '60', '6', '24070', '5900', '2'), +('7', '60', '6', '1557', '5523', '2'), +('7', '60', '17', '29456', '17150', '2'), +('7', '60', '17', '59949', '17150', '2'), +('7', '60', '17', '1137', '13856', '2'), +('7', '60', '17', '10845', '12241', '2'), +('7', '60', '7', '5723', '12099', '2'), +('7', '60', '7', '31191', '5278', '2'), +('7', '60', '7', '25442', '4226', '2'), +('7', '60', '7', '25544', '3967', '2'), +('7', '60', '9', '31461', '21512', '2'), +('7', '60', '9', '31460', '12903', '2'), +('7', '60', '9', '5723', '12099', '2'), +('7', '60', '9', '31354', '11431', '2'), +('7', '60', '15', '31231', '13318', '2'), +('7', '60', '15', '25211', '12625', '2'), +('7', '60', '15', '30385', '11099', '2'), +('7', '60', '15', '31377', '9717', '2'), +('7', '60', '20', '31235', '20220', '2'), +('7', '60', '20', '31334', '16913', '2'), +('7', '60', '20', '2510', '13627', '2'), +('7', '60', '20', '25858', '13518', '2'), +('7', '60', '12', '25857', '18691', '2'), +('7', '60', '12', '1683', '12561', '2'), +('7', '60', '12', '25201', '9484', '2'), +('7', '60', '12', '31227', '7477', '2'), +('7', '60', '18', '25212', '12205', '2'), +('7', '60', '18', '31332', '7148', '2'), +('7', '60', '18', '31194', '6843', '2'), +('7', '60', '18', '9642', '4625', '2'), +('7', '60', '19', '24616', '11719', '2'), +('7', '60', '19', '31195', '4914', '2'), +('7', '60', '19', '9643', '4643', '2'), +('7', '60', '19', '31336', '4012', '2'), +('7', '60', '13', '1154', '73538', '2'), +('7', '60', '13', '31241', '71340', '2'), +('7', '60', '13', '5776', '70053', '2'), +('7', '60', '13', '5839', '63571', '2'), +('7', '60', '14', '1154', '73538', '2'), +('7', '60', '14', '31241', '71340', '2'), +('7', '60', '14', '5776', '70053', '2'), +('7', '60', '14', '5836', '68143', '2'), +('7', '60', '11', '31469', '11306', '2'), +('7', '60', '11', '2698', '10909', '2'), +('7', '60', '11', '31303', '9345', '2'), +('7', '60', '11', '29462', '7433', '2'), +('7', '60', '22', '10323', '0', '1'), +('7', '60', '22', '12425', '0', '1'), +('7', '60', '22', '10664', '0', '1'), +('7', '60', '22', '9246', '0', '1'), +('7', '60', '1', '5716', '7477', '1'), +('7', '60', '1', '62234', '6934', '1'), +('7', '60', '1', '5704', '5433', '1'), +('7', '60', '1', '5715', '5433', '1'), +('7', '60', '2', '10913', '9444', '1'), +('7', '60', '2', '1630', '3846', '1'), +('7', '60', '2', '5799', '2856', '1'), +('7', '60', '2', '11276', '2270', '1'), +('7', '60', '3', '46184', '4821', '1'), +('7', '60', '3', '1625', '4224', '1'), +('7', '60', '3', '11477', '2196', '1'), +('7', '60', '3', '3259', '1575', '1'), +('7', '60', '5', '14703', '6050', '1'), +('7', '60', '5', '14700', '3567', '1'), +('7', '60', '5', '8285', '3345', '1'), +('7', '60', '5', '14709', '3228', '1'), +('7', '60', '8', '11621', '13670', '1'), +('7', '60', '8', '1619', '12680', '1'), +('7', '60', '8', '11562', '8691', '1'), +('7', '60', '8', '1622', '8326', '1'), +('7', '60', '6', '5723', '13347', '1'), +('7', '60', '6', '1557', '6141', '1'), +('7', '60', '6', '5706', '3144', '1'), +('7', '60', '6', '1283', '2377', '1'), +('7', '60', '17', '10845', '13354', '1'), +('7', '60', '17', '12256', '7269', '1'), +('7', '60', '17', '12970', '6637', '1'), +('7', '60', '17', '1268', '2937', '1'), +('7', '60', '7', '5723', '13347', '1'), +('7', '60', '7', '62046', '3101', '1'), +('7', '60', '7', '1202', '2248', '1'), +('7', '60', '7', '2458', '2035', '1'), +('7', '60', '9', '5723', '13347', '1'), +('7', '60', '9', '27714', '7542', '1'), +('7', '60', '9', '4199', '5948', '1'), +('7', '60', '9', '14650', '1828', '1'), +('7', '60', '15', '5727', '10173', '1'), +('7', '60', '15', '10366', '8096', '1'), +('7', '60', '15', '10151', '7200', '1'), +('7', '60', '15', '5728', '7128', '1'), +('7', '60', '20', '1620', '10180', '1'), +('7', '60', '20', '11698', '9261', '1'), +('7', '60', '20', '11601', '8403', '1'), +('7', '60', '20', '1623', '4978', '1'), +('7', '60', '12', '1683', '14969', '1'), +('7', '60', '12', '2923', '3407', '1'), +('7', '60', '12', '11624', '2542', '1'), +('7', '60', '12', '8909', '977', '1'), +('7', '60', '18', '2461', '2124', '1'), +('7', '60', '18', '5781', '1038', '1'), +('7', '60', '18', '2462', '710', '1'), +('7', '60', '18', '1205', '709', '1'), +('7', '60', '19', '24616', '12669', '1'), +('7', '60', '19', '1280', '2909', '1'), +('7', '60', '19', '1206', '2074', '1'), +('7', '60', '19', '4318', '1847', '1'), +('7', '60', '13', '27715', '51468', '1'), +('7', '60', '13', '7836', '49218', '1'), +('7', '60', '13', '6502', '35573', '1'), +('7', '60', '13', '5748', '31833', '1'), +('7', '60', '14', '27715', '51468', '1'), +('7', '60', '14', '7836', '49218', '1'), +('7', '60', '14', '6502', '35573', '1'), +('7', '60', '14', '5748', '31833', '1'), +('7', '60', '11', '62242', '4900', '1'), +('7', '60', '11', '46178', '3983', '1'), +('7', '60', '11', '79631', '3702', '1'), +('7', '60', '11', '5803', '1797', '1'), +('7', '61', '22', '61948', '0', '3'), +('7', '61', '22', '66397', '0', '3'), +('7', '61', '22', '21805', '0', '3'), +('7', '61', '22', '21807', '0', '3'), +('7', '61', '1', '28962', '13139', '3'), +('7', '61', '1', '29861', '12685', '3'), +('7', '61', '1', '63170', '12352', '3'), +('7', '61', '1', '7945', '11423', '3'), +('7', '61', '2', '31223', '18119', '3'), +('7', '61', '2', '26535', '13800', '3'), +('7', '61', '2', '2612', '12731', '3'), +('7', '61', '2', '26025', '12731', '3'), +('7', '61', '3', '31233', '12328', '3'), +('7', '61', '3', '26560', '11236', '3'), +('7', '61', '3', '26582', '10779', '3'), +('7', '61', '3', '31464', '10273', '3'), +('7', '61', '5', '8364', '19467', '3'), +('7', '61', '5', '27266', '13707', '3'), +('7', '61', '5', '26584', '13365', '3'), +('7', '61', '5', '31234', '12355', '3'), +('7', '61', '8', '31471', '19190', '3'), +('7', '61', '8', '26766', '13878', '3'), +('7', '61', '8', '11621', '12679', '3'), +('7', '61', '8', '28918', '12442', '3'), +('7', '61', '6', '28902', '14135', '3'), +('7', '61', '6', '31472', '13150', '3'), +('7', '61', '6', '30551', '11896', '3'), +('7', '61', '6', '5723', '11601', '3'), +('7', '61', '17', '59949', '16564', '3'), +('7', '61', '17', '29456', '16564', '3'), +('7', '61', '17', '1137', '12399', '3'), +('7', '61', '17', '10845', '11795', '3'), +('7', '61', '7', '26584', '13365', '3'), +('7', '61', '7', '8288', '12596', '3'), +('7', '61', '7', '5723', '11601', '3'), +('7', '61', '7', '30528', '9277', '3'), +('7', '61', '9', '31461', '20094', '3'), +('7', '61', '9', '26584', '13365', '3'), +('7', '61', '9', '5723', '11601', '3'), +('7', '61', '9', '31460', '11357', '3'), +('7', '61', '15', '26749', '16112', '3'), +('7', '61', '15', '31231', '12575', '3'), +('7', '61', '15', '26757', '12441', '3'), +('7', '61', '15', '63170', '12352', '3'), +('7', '61', '20', '31235', '18387', '3'), +('7', '61', '20', '31334', '16220', '3'), +('7', '61', '20', '26551', '15796', '3'), +('7', '61', '20', '26556', '13394', '3'), +('7', '61', '12', '25857', '17882', '3'), +('7', '61', '12', '1683', '11598', '3'), +('7', '61', '12', '28967', '10442', '3'), +('7', '61', '12', '28949', '9640', '3'), +('7', '61', '18', '26772', '14825', '3'), +('7', '61', '18', '8289', '10330', '3'), +('7', '61', '18', '25212', '10203', '3'), +('7', '61', '18', '28965', '10101', '3'), +('7', '61', '19', '30569', '17655', '3'), +('7', '61', '19', '24616', '11338', '3'), +('7', '61', '19', '28888', '10808', '3'), +('7', '61', '19', '28934', '9237', '3'), +('7', '61', '13', '27315', '83763', '3'), +('7', '61', '13', '26809', '81209', '3'), +('7', '61', '13', '26849', '80937', '3'), +('7', '61', '13', '26861', '77141', '3'), +('7', '61', '14', '27315', '83763', '3'), +('7', '61', '14', '26809', '81209', '3'), +('7', '61', '14', '26849', '80937', '3'), +('7', '61', '14', '26861', '77141', '3'), +('7', '61', '11', '26563', '16416', '3'), +('7', '61', '11', '30565', '11305', '3'), +('7', '61', '11', '26562', '11119', '3'), +('7', '61', '11', '28948', '10698', '3'), +('7', '62', '22', '61948', '0', '3'), +('7', '62', '22', '66397', '0', '3'), +('7', '62', '22', '21805', '0', '3'), +('7', '62', '22', '21807', '0', '3'), +('7', '62', '1', '28962', '13140', '3'), +('7', '62', '1', '29861', '12687', '3'), +('7', '62', '1', '63170', '12353', '3'), +('7', '62', '1', '7945', '11424', '3'), +('7', '62', '2', '31223', '18120', '3'), +('7', '62', '2', '26535', '13800', '3'), +('7', '62', '2', '2612', '12732', '3'), +('7', '62', '2', '26025', '12732', '3'), +('7', '62', '3', '31233', '12329', '3'), +('7', '62', '3', '26560', '11237', '3'), +('7', '62', '3', '26582', '10779', '3'), +('7', '62', '3', '31464', '10273', '3'), +('7', '62', '5', '8364', '19468', '3'), +('7', '62', '5', '27266', '13708', '3'), +('7', '62', '5', '26584', '13366', '3'), +('7', '62', '5', '31234', '12355', '3'), +('7', '62', '8', '31471', '19191', '3'), +('7', '62', '8', '26766', '13879', '3'), +('7', '62', '8', '11621', '12679', '3'), +('7', '62', '8', '28918', '12442', '3'), +('7', '62', '6', '28902', '14136', '3'), +('7', '62', '6', '31472', '13151', '3'), +('7', '62', '6', '30551', '11896', '3'), +('7', '62', '6', '5723', '11601', '3'), +('7', '62', '17', '59949', '16564', '3'), +('7', '62', '17', '29456', '16564', '3'), +('7', '62', '17', '1137', '12400', '3'), +('7', '62', '17', '10845', '11795', '3'), +('7', '62', '7', '26584', '13366', '3'), +('7', '62', '7', '8288', '12596', '3'), +('7', '62', '7', '5723', '11601', '3'), +('7', '62', '7', '30528', '9277', '3'), +('7', '62', '9', '31461', '20095', '3'), +('7', '62', '9', '26584', '13366', '3'), +('7', '62', '9', '5723', '11601', '3'), +('7', '62', '9', '31460', '11358', '3'), +('7', '62', '15', '26749', '16113', '3'), +('7', '62', '15', '31231', '12575', '3'), +('7', '62', '15', '26757', '12441', '3'), +('7', '62', '15', '63170', '12353', '3'), +('7', '62', '20', '31235', '18388', '3'), +('7', '62', '20', '31334', '16220', '3'), +('7', '62', '20', '26551', '15798', '3'), +('7', '62', '20', '26556', '13395', '3'), +('7', '62', '12', '25857', '17882', '3'), +('7', '62', '12', '1683', '11599', '3'), +('7', '62', '12', '28967', '10442', '3'), +('7', '62', '12', '28949', '9641', '3'), +('7', '62', '18', '26772', '14826', '3'), +('7', '62', '18', '8289', '10330', '3'), +('7', '62', '18', '25212', '10204', '3'), +('7', '62', '18', '28965', '10102', '3'), +('7', '62', '19', '30569', '17656', '3'), +('7', '62', '19', '24616', '11338', '3'), +('7', '62', '19', '28888', '10808', '3'), +('7', '62', '19', '28934', '9237', '3'), +('7', '62', '13', '27315', '84051', '3'), +('7', '62', '13', '26809', '81497', '3'), +('7', '62', '13', '26849', '81225', '3'), +('7', '62', '13', '26861', '77428', '3'), +('7', '62', '14', '27315', '84051', '3'), +('7', '62', '14', '26809', '81497', '3'), +('7', '62', '14', '26849', '81225', '3'), +('7', '62', '14', '26861', '77428', '3'), +('7', '62', '11', '26563', '16417', '3'), +('7', '62', '11', '30565', '11306', '3'), +('7', '62', '11', '26562', '11120', '3'), +('7', '62', '11', '28948', '10698', '3'), +('7', '63', '22', '61948', '0', '3'), +('7', '63', '22', '66397', '0', '3'), +('7', '63', '22', '21805', '0', '3'), +('7', '63', '22', '21807', '0', '3'), +('7', '63', '1', '28962', '13141', '3'), +('7', '63', '1', '29861', '12689', '3'), +('7', '63', '1', '63170', '12354', '3'), +('7', '63', '1', '7945', '11424', '3'), +('7', '63', '2', '31223', '18121', '3'), +('7', '63', '2', '26535', '13800', '3'), +('7', '63', '2', '2612', '12732', '3'), +('7', '63', '2', '26025', '12732', '3'), +('7', '63', '3', '31233', '12330', '3'), +('7', '63', '3', '26560', '11239', '3'), +('7', '63', '3', '26582', '10779', '3'), +('7', '63', '3', '31464', '10274', '3'), +('7', '63', '5', '8364', '19469', '3'), +('7', '63', '5', '27266', '13708', '3'), +('7', '63', '5', '26584', '13368', '3'), +('7', '63', '5', '31234', '12355', '3'), +('7', '63', '8', '31471', '19192', '3'), +('7', '63', '8', '26766', '13880', '3'), +('7', '63', '8', '11621', '12679', '3'), +('7', '63', '8', '28918', '12442', '3'), +('7', '63', '6', '28902', '14137', '3'), +('7', '63', '6', '31472', '13152', '3'), +('7', '63', '6', '30551', '11897', '3'), +('7', '63', '6', '5723', '11602', '3'), +('7', '63', '17', '59949', '16564', '3'), +('7', '63', '17', '29456', '16564', '3'), +('7', '63', '17', '1137', '12402', '3'), +('7', '63', '17', '10845', '11795', '3'), +('7', '63', '7', '26584', '13368', '3'), +('7', '63', '7', '8288', '12596', '3'), +('7', '63', '7', '5723', '11602', '3'), +('7', '63', '7', '30528', '9277', '3'), +('7', '63', '9', '31461', '20096', '3'), +('7', '63', '9', '26584', '13368', '3'), +('7', '63', '9', '5723', '11602', '3'), +('7', '63', '9', '31460', '11360', '3'), +('7', '63', '15', '26749', '16115', '3'), +('7', '63', '15', '31231', '12575', '3'), +('7', '63', '15', '26757', '12441', '3'), +('7', '63', '15', '63170', '12354', '3'), +('7', '63', '20', '31235', '18390', '3'), +('7', '63', '20', '31334', '16220', '3'), +('7', '63', '20', '26551', '15799', '3'), +('7', '63', '20', '26556', '13396', '3'), +('7', '63', '12', '25857', '17882', '3'), +('7', '63', '12', '1683', '11600', '3'), +('7', '63', '12', '28967', '10442', '3'), +('7', '63', '12', '28949', '9642', '3'), +('7', '63', '18', '26772', '14826', '3'), +('7', '63', '18', '8289', '10330', '3'), +('7', '63', '18', '25212', '10205', '3'), +('7', '63', '18', '28965', '10102', '3'), +('7', '63', '19', '30569', '17657', '3'), +('7', '63', '19', '24616', '11338', '3'), +('7', '63', '19', '28888', '10809', '3'), +('7', '63', '19', '28934', '9237', '3'), +('7', '63', '13', '27315', '84338', '3'), +('7', '63', '13', '26809', '81742', '3'), +('7', '63', '13', '26849', '81513', '3'), +('7', '63', '13', '26861', '77673', '3'), +('7', '63', '14', '27315', '84338', '3'), +('7', '63', '14', '26809', '81742', '3'), +('7', '63', '14', '26849', '81513', '3'), +('7', '63', '14', '26861', '77673', '3'), +('7', '63', '11', '26563', '16418', '3'), +('7', '63', '11', '30565', '11307', '3'), +('7', '63', '11', '26562', '11121', '3'), +('7', '63', '11', '28948', '10698', '3'), +('7', '64', '22', '61948', '0', '3'), +('7', '64', '22', '66397', '0', '3'), +('7', '64', '22', '21805', '0', '3'), +('7', '64', '22', '21807', '0', '3'), +('7', '64', '1', '28962', '13141', '3'), +('7', '64', '1', '29861', '12691', '3'), +('7', '64', '1', '63170', '12354', '3'), +('7', '64', '1', '7945', '11424', '3'), +('7', '64', '2', '31223', '18122', '3'), +('7', '64', '2', '26535', '13800', '3'), +('7', '64', '2', '2612', '12733', '3'), +('7', '64', '2', '26025', '12733', '3'), +('7', '64', '3', '31233', '12330', '3'), +('7', '64', '3', '26560', '11241', '3'), +('7', '64', '3', '26582', '10779', '3'), +('7', '64', '3', '31464', '10275', '3'), +('7', '64', '5', '8364', '19471', '3'), +('7', '64', '5', '27266', '13709', '3'), +('7', '64', '5', '26584', '13369', '3'), +('7', '64', '5', '31234', '12355', '3'), +('7', '64', '8', '31471', '19193', '3'), +('7', '64', '8', '26766', '13880', '3'), +('7', '64', '8', '11621', '12679', '3'), +('7', '64', '8', '28918', '12442', '3'), +('7', '64', '6', '28902', '14138', '3'), +('7', '64', '6', '31472', '13153', '3'), +('7', '64', '6', '30551', '11898', '3'), +('7', '64', '6', '5723', '11602', '3'), +('7', '64', '17', '59949', '16564', '3'), +('7', '64', '17', '29456', '16564', '3'), +('7', '64', '17', '1137', '12404', '3'), +('7', '64', '17', '10845', '11795', '3'), +('7', '64', '7', '26584', '13369', '3'), +('7', '64', '7', '8288', '12596', '3'), +('7', '64', '7', '5723', '11602', '3'), +('7', '64', '7', '30528', '9277', '3'), +('7', '64', '9', '31461', '20096', '3'), +('7', '64', '9', '26584', '13369', '3'), +('7', '64', '9', '5723', '11602', '3'), +('7', '64', '9', '31460', '11361', '3'), +('7', '64', '15', '26749', '16116', '3'), +('7', '64', '15', '31231', '12575', '3'), +('7', '64', '15', '26757', '12442', '3'), +('7', '64', '15', '63170', '12354', '3'), +('7', '64', '20', '31235', '18392', '3'), +('7', '64', '20', '31334', '16220', '3'), +('7', '64', '20', '26551', '15801', '3'), +('7', '64', '20', '26556', '13397', '3'), +('7', '64', '12', '25857', '17882', '3'), +('7', '64', '12', '1683', '11600', '3'), +('7', '64', '12', '28967', '10442', '3'), +('7', '64', '12', '28949', '9642', '3'), +('7', '64', '18', '26772', '14827', '3'), +('7', '64', '18', '8289', '10330', '3'), +('7', '64', '18', '25212', '10205', '3'), +('7', '64', '18', '28965', '10103', '3'), +('7', '64', '19', '30569', '17657', '3'), +('7', '64', '19', '24616', '11338', '3'), +('7', '64', '19', '28888', '10809', '3'), +('7', '64', '19', '28934', '9237', '3'), +('7', '64', '13', '27315', '84626', '3'), +('7', '64', '13', '26809', '82030', '3'), +('7', '64', '13', '26849', '81758', '3'), +('7', '64', '13', '26861', '77960', '3'), +('7', '64', '14', '27315', '84626', '3'), +('7', '64', '14', '26809', '82030', '3'), +('7', '64', '14', '26849', '81758', '3'), +('7', '64', '14', '26861', '77960', '3'), +('7', '64', '11', '26563', '16419', '3'), +('7', '64', '11', '30565', '11308', '3'), +('7', '64', '11', '26562', '11122', '3'), +('7', '64', '11', '28948', '10698', '3'), +('7', '65', '22', '66397', '0', '7'), +('7', '65', '22', '62787', '0', '7'), +('7', '65', '22', '61948', '0', '7'), +('7', '65', '22', '21805', '0', '7'), +('7', '65', '1', '68949', '39785', '7'), +('7', '65', '1', '69166', '37898', '7'), +('7', '65', '1', '7125', '31560', '7'), +('7', '65', '1', '68958', '29803', '7'), +('7', '65', '2', '67728', '25697', '7'), +('7', '65', '2', '28648', '20716', '7'), +('7', '65', '2', '31223', '18122', '7'), +('7', '65', '2', '28653', '18041', '7'), +('7', '65', '3', '69157', '30500', '7'), +('7', '65', '3', '68953', '28673', '7'), +('7', '65', '3', '68752', '24299', '7'), +('7', '65', '3', '69069', '23457', '7'), +('7', '65', '5', '67625', '32648', '7'), +('7', '65', '5', '68808', '30534', '7'), +('7', '65', '5', '7769', '29187', '7'), +('7', '65', '5', '68840', '27666', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '65', '8', '69165', '40595', '7'), +('7', '65', '8', '68844', '31071', '7'), +('7', '65', '8', '69064', '28773', '7'), +('7', '65', '8', '68787', '24902', '7'), +('7', '65', '6', '68955', '28399', '7'), +('7', '65', '6', '13674', '26844', '7'), +('7', '65', '6', '68757', '25280', '7'), +('7', '65', '6', '68789', '18731', '7'), +('7', '65', '17', '68978', '30260', '7'), +('7', '65', '17', '47650', '26105', '7'), +('7', '65', '17', '69152', '21002', '7'), +('7', '65', '17', '69403', '20607', '7'), +('7', '65', '7', '68896', '28298', '7'), +('7', '65', '7', '69175', '28210', '7'), +('7', '65', '7', '16097', '25634', '7'), +('7', '65', '7', '11435', '20893', '7'), +('7', '65', '9', '68899', '26884', '7'), +('7', '65', '9', '32110', '26064', '7'), +('7', '65', '9', '16097', '25634', '7'), +('7', '65', '9', '69128', '23706', '7'), +('7', '65', '15', '69160', '33587', '7'), +('7', '65', '15', '68948', '29473', '7'), +('7', '65', '15', '68842', '28195', '7'), +('7', '65', '15', '68784', '27219', '7'), +('7', '65', '20', '16156', '32852', '7'), +('7', '65', '20', '67625', '32648', '7'), +('7', '65', '20', '68951', '30656', '7'), +('7', '65', '20', '69134', '27953', '7'), +('7', '65', '12', '69254', '33123', '7'), +('7', '65', '12', '68643', '27089', '7'), +('7', '65', '12', '68897', '26058', '7'), +('7', '65', '12', '27000', '23191', '7'), +('7', '65', '18', '68979', '32289', '7'), +('7', '65', '18', '16727', '23514', '7'), +('7', '65', '18', '69148', '21017', '7'), +('7', '65', '18', '28652', '17680', '7'), +('7', '65', '19', '69179', '31435', '7'), +('7', '65', '19', '68898', '29282', '7'), +('7', '65', '19', '19446', '19375', '7'), +('7', '65', '19', '68711', '18778', '7'), +('7', '65', '13', '68740', '120110', '7'), +('7', '65', '13', '68837', '117028', '7'), +('7', '65', '13', '69120', '111218', '7'), +('7', '65', '13', '26740', '100232', '7'), +('7', '65', '14', '68740', '120110', '7'), +('7', '65', '14', '68837', '117028', '7'), +('7', '65', '14', '69120', '111218', '7'), +('7', '65', '14', '26740', '100232', '7'), +('7', '65', '11', '67606', '33465', '7'), +('7', '65', '11', '69158', '33261', '7'), +('7', '65', '11', '68952', '29504', '7'), +('7', '65', '11', '68848', '28259', '7'), +('7', '65', '22', '66397', '0', '6'), +('7', '65', '22', '62787', '0', '6'), +('7', '65', '22', '61948', '0', '6'), +('7', '65', '22', '21805', '0', '6'), +('7', '65', '1', '7125', '31560', '6'), +('7', '65', '1', '32106', '27404', '6'), +('7', '65', '1', '7123', '24878', '6'), +('7', '65', '1', '4119', '22672', '6'), +('7', '65', '2', '28648', '20716', '6'), +('7', '65', '2', '31223', '18122', '6'), +('7', '65', '2', '28653', '18041', '6'), +('7', '65', '2', '9809', '17457', '6'), +('7', '65', '3', '29174', '22781', '6'), +('7', '65', '3', '9435', '19118', '6'), +('7', '65', '3', '9480', '18044', '6'), +('7', '65', '3', '9481', '16208', '6'), +('7', '65', '5', '7769', '29187', '6'), +('7', '65', '5', '8977', '26322', '6'), +('7', '65', '5', '28654', '22580', '6'), +('7', '65', '5', '7767', '19475', '6'), +('7', '65', '8', '15805', '24664', '6'), +('7', '65', '8', '31471', '19194', '6'), +('7', '65', '8', '15803', '18816', '6'), +('7', '65', '8', '13672', '18107', '6'), +('7', '65', '6', '13674', '26844', '6'), +('7', '65', '6', '13672', '18107', '6'), +('7', '65', '6', '13767', '17785', '6'), +('7', '65', '6', '28658', '16200', '6'), +('7', '65', '17', '47650', '26105', '6'), +('7', '65', '17', '69403', '20607', '6'), +('7', '65', '17', '29456', '16564', '6'), +('7', '65', '17', '59949', '16564', '6'), +('7', '65', '7', '16097', '25634', '6'), +('7', '65', '7', '11435', '20893', '6'), +('7', '65', '7', '21994', '19712', '6'), +('7', '65', '7', '26584', '13370', '6'), +('7', '65', '9', '32110', '26064', '6'), +('7', '65', '9', '16097', '25634', '6'), +('7', '65', '9', '11054', '20926', '6'), +('7', '65', '9', '68198', '20910', '6'), +('7', '65', '15', '26989', '25989', '6'), +('7', '65', '15', '9959', '23797', '6'), +('7', '65', '15', '26991', '22688', '6'), +('7', '65', '15', '26990', '22305', '6'), +('7', '65', '20', '16156', '32852', '6'), +('7', '65', '20', '16097', '25634', '6'), +('7', '65', '20', '28663', '24302', '6'), +('7', '65', '20', '15873', '23265', '6'), +('7', '65', '12', '27000', '23191', '6'), +('7', '65', '12', '12624', '20573', '6'), +('7', '65', '12', '68083', '19657', '6'), +('7', '65', '12', '25857', '17882', '6'), +('7', '65', '18', '16727', '23514', '6'), +('7', '65', '18', '28652', '17680', '6'), +('7', '65', '18', '26772', '14827', '6'), +('7', '65', '18', '8289', '10330', '6'), +('7', '65', '19', '19446', '19375', '6'), +('7', '65', '19', '30569', '17658', '6'), +('7', '65', '19', '19082', '16975', '6'), +('7', '65', '19', '19094', '16255', '6'), +('7', '65', '13', '26740', '100232', '6'), +('7', '65', '13', '27315', '85711', '6'), +('7', '65', '13', '32108', '85229', '6'), +('7', '65', '13', '22894', '84968', '6'), +('7', '65', '14', '26740', '100232', '6'), +('7', '65', '14', '27315', '85711', '6'), +('7', '65', '14', '32108', '85229', '6'), +('7', '65', '14', '22894', '84968', '6'), +('7', '65', '11', '20496', '25545', '6'), +('7', '65', '11', '14733', '24990', '6'), +('7', '65', '11', '26987', '24475', '6'), +('7', '65', '11', '20625', '21122', '6'), +('7', '65', '22', '62787', '0', '5'), +('7', '65', '22', '21810', '0', '5'), +('7', '65', '22', '66397', '0', '5'), +('7', '65', '22', '61948', '0', '5'), +('7', '65', '1', '7125', '31560', '5'), +('7', '65', '1', '32106', '27404', '5'), +('7', '65', '1', '7123', '24878', '5'), +('7', '65', '1', '4119', '22672', '5'), +('7', '65', '2', '28648', '20716', '5'), +('7', '65', '2', '31223', '18122', '5'), +('7', '65', '2', '28653', '18041', '5'), +('7', '65', '2', '9809', '17457', '5'), +('7', '65', '3', '29174', '22781', '5'), +('7', '65', '3', '9435', '19118', '5'), +('7', '65', '3', '9480', '18044', '5'), +('7', '65', '3', '9481', '16208', '5'), +('7', '65', '5', '7769', '29187', '5'), +('7', '65', '5', '8977', '26322', '5'), +('7', '65', '5', '28654', '22580', '5'), +('7', '65', '5', '7767', '19475', '5'), +('7', '65', '8', '15805', '24664', '5'), +('7', '65', '8', '31471', '19194', '5'), +('7', '65', '8', '15803', '18816', '5'), +('7', '65', '8', '13672', '18107', '5'), +('7', '65', '6', '13674', '26844', '5'), +('7', '65', '6', '13672', '18107', '5'), +('7', '65', '6', '13767', '17785', '5'), +('7', '65', '6', '28658', '16200', '5'), +('7', '65', '17', '47650', '26105', '5'), +('7', '65', '17', '29456', '16564', '5'), +('7', '65', '17', '59949', '16564', '5'), +('7', '65', '17', '1137', '12405', '5'), +('7', '65', '7', '16097', '25634', '5'), +('7', '65', '7', '11435', '20893', '5'), +('7', '65', '7', '21994', '19712', '5'), +('7', '65', '7', '26584', '13370', '5'), +('7', '65', '9', '32110', '26064', '5'), +('7', '65', '9', '16097', '25634', '5'), +('7', '65', '9', '11054', '20926', '5'), +('7', '65', '9', '68198', '20910', '5'), +('7', '65', '15', '26989', '25989', '5'), +('7', '65', '15', '9959', '23797', '5'), +('7', '65', '15', '26991', '22688', '5'), +('7', '65', '15', '26990', '22305', '5'), +('7', '65', '20', '16156', '32852', '5'), +('7', '65', '20', '16097', '25634', '5'), +('7', '65', '20', '28663', '24302', '5'), +('7', '65', '20', '15873', '23265', '5'), +('7', '65', '12', '27000', '23191', '5'), +('7', '65', '12', '12624', '20573', '5'), +('7', '65', '12', '25857', '17882', '5'), +('7', '65', '12', '11879', '15307', '5'), +('7', '65', '18', '16727', '23514', '5'), +('7', '65', '18', '28652', '17680', '5'), +('7', '65', '18', '26772', '14827', '5'), +('7', '65', '18', '8289', '10330', '5'), +('7', '65', '19', '19446', '19375', '5'), +('7', '65', '19', '30569', '17658', '5'), +('7', '65', '19', '19082', '16975', '5'), +('7', '65', '19', '19094', '16255', '5'), +('7', '65', '13', '26740', '100232', '5'), +('7', '65', '13', '27315', '85711', '5'), +('7', '65', '13', '32108', '85229', '5'), +('7', '65', '13', '22894', '84968', '5'), +('7', '65', '14', '26740', '100232', '5'), +('7', '65', '14', '27315', '85711', '5'), +('7', '65', '14', '32108', '85229', '5'), +('7', '65', '14', '22894', '84968', '5'), +('7', '65', '11', '20496', '25545', '5'), +('7', '65', '11', '14733', '24990', '5'), +('7', '65', '11', '26987', '24475', '5'), +('7', '65', '11', '20625', '21122', '5'), +('7', '65', '22', '62787', '0', '4'), +('7', '65', '22', '21810', '0', '4'), +('7', '65', '22', '66397', '0', '4'), +('7', '65', '22', '61948', '0', '4'), +('7', '65', '1', '7125', '31560', '4'), +('7', '65', '1', '32106', '27404', '4'), +('7', '65', '1', '7123', '24878', '4'), +('7', '65', '1', '4119', '22672', '4'), +('7', '65', '2', '28648', '20716', '4'), +('7', '65', '2', '31223', '18122', '4'), +('7', '65', '2', '28653', '18041', '4'), +('7', '65', '2', '9809', '17457', '4'), +('7', '65', '3', '29174', '22781', '4'), +('7', '65', '3', '9435', '19118', '4'), +('7', '65', '3', '9480', '18044', '4'), +('7', '65', '3', '9481', '16208', '4'), +('7', '65', '5', '7769', '29187', '4'), +('7', '65', '5', '8977', '26322', '4'), +('7', '65', '5', '28654', '22580', '4'), +('7', '65', '5', '7767', '19475', '4'), +('7', '65', '8', '15805', '24664', '4'), +('7', '65', '8', '31471', '19194', '4'), +('7', '65', '8', '15803', '18816', '4'), +('7', '65', '8', '13672', '18107', '4'), +('7', '65', '6', '13674', '26844', '4'), +('7', '65', '6', '13672', '18107', '4'), +('7', '65', '6', '13767', '17785', '4'), +('7', '65', '6', '28658', '16200', '4'), +('7', '65', '17', '47650', '26105', '4'), +('7', '65', '17', '59949', '16564', '4'), +('7', '65', '17', '29456', '16564', '4'), +('7', '65', '17', '1137', '12405', '4'), +('7', '65', '7', '16097', '25634', '4'), +('7', '65', '7', '11435', '20893', '4'), +('7', '65', '7', '21994', '19712', '4'), +('7', '65', '7', '26584', '13370', '4'), +('7', '65', '9', '32110', '26064', '4'), +('7', '65', '9', '16097', '25634', '4'), +('7', '65', '9', '11054', '20926', '4'), +('7', '65', '9', '68198', '20910', '4'), +('7', '65', '15', '26989', '25989', '4'), +('7', '65', '15', '9959', '23797', '4'), +('7', '65', '15', '26991', '22688', '4'), +('7', '65', '15', '26990', '22305', '4'), +('7', '65', '20', '16156', '32852', '4'), +('7', '65', '20', '16097', '25634', '4'), +('7', '65', '20', '28663', '24302', '4'), +('7', '65', '20', '15873', '23265', '4'), +('7', '65', '12', '27000', '23191', '4'), +('7', '65', '12', '12624', '20573', '4'), +('7', '65', '12', '25857', '17882', '4'), +('7', '65', '12', '11879', '15307', '4'), +('7', '65', '18', '16727', '23514', '4'), +('7', '65', '18', '28652', '17680', '4'), +('7', '65', '18', '26772', '14827', '4'), +('7', '65', '18', '8289', '10330', '4'), +('7', '65', '19', '19446', '19375', '4'), +('7', '65', '19', '30569', '17658', '4'), +('7', '65', '19', '19082', '16975', '4'), +('7', '65', '19', '19094', '16255', '4'), +('7', '65', '13', '26740', '100232', '4'), +('7', '65', '13', '27315', '85711', '4'), +('7', '65', '13', '32108', '85229', '4'), +('7', '65', '13', '22894', '84968', '4'), +('7', '65', '14', '26740', '100232', '4'), +('7', '65', '14', '27315', '85711', '4'), +('7', '65', '14', '32108', '85229', '4'), +('7', '65', '14', '22894', '84968', '4'), +('7', '65', '11', '20496', '25545', '4'), +('7', '65', '11', '14733', '24990', '4'), +('7', '65', '11', '26987', '24475', '4'), +('7', '65', '11', '20625', '21122', '4'), +('7', '66', '22', '66397', '0', '7'), +('7', '66', '22', '62787', '0', '7'), +('7', '66', '22', '61948', '0', '7'), +('7', '66', '22', '21805', '0', '7'), +('7', '66', '1', '68949', '39787', '7'), +('7', '66', '1', '69166', '37900', '7'), +('7', '66', '1', '7125', '31560', '7'), +('7', '66', '1', '68958', '29804', '7'), +('7', '66', '2', '67728', '25699', '7'), +('7', '66', '2', '28648', '20716', '7'), +('7', '66', '2', '31223', '18123', '7'), +('7', '66', '2', '28653', '18042', '7'), +('7', '66', '3', '69157', '30501', '7'), +('7', '66', '3', '68953', '28675', '7'), +('7', '66', '3', '68752', '24300', '7'), +('7', '66', '3', '69069', '23459', '7'), +('7', '66', '5', '67625', '32649', '7'), +('7', '66', '5', '68808', '30535', '7'), +('7', '66', '5', '7769', '29187', '7'), +('7', '66', '5', '68840', '27668', '7'), +('7', '66', '8', '69165', '40596', '7'), +('7', '66', '8', '68844', '31073', '7'), +('7', '66', '8', '69064', '28774', '7'), +('7', '66', '8', '68787', '24902', '7'), +('7', '66', '6', '68955', '28400', '7'), +('7', '66', '6', '13674', '26845', '7'), +('7', '66', '6', '68757', '25282', '7'), +('7', '66', '6', '68789', '18732', '7'), +('7', '66', '17', '68978', '30262', '7'), +('7', '66', '17', '47650', '26107', '7'), +('7', '66', '17', '69152', '21003', '7'), +('7', '66', '17', '69403', '20609', '7'), +('7', '66', '7', '68896', '28300', '7'), +('7', '66', '7', '69175', '28212', '7'), +('7', '66', '7', '16097', '25636', '7'), +('7', '66', '7', '11435', '20894', '7'), +('7', '66', '9', '68899', '26885', '7'), +('7', '66', '9', '32110', '26066', '7'), +('7', '66', '9', '16097', '25636', '7'), +('7', '66', '9', '69128', '23707', '7'), +('7', '66', '15', '69160', '33588', '7'), +('7', '66', '15', '68948', '29474', '7'), +('7', '66', '15', '68842', '28197', '7'), +('7', '66', '15', '68784', '27220', '7'), +('7', '66', '20', '16156', '32853', '7'), +('7', '66', '20', '67625', '32649', '7'), +('7', '66', '20', '68951', '30658', '7'), +('7', '66', '20', '69134', '27955', '7'), +('7', '66', '12', '69254', '33125', '7'), +('7', '66', '12', '68643', '27090', '7'), +('7', '66', '12', '68897', '26060', '7'), +('7', '66', '12', '27000', '23191', '7'), +('7', '66', '18', '68979', '32290', '7'), +('7', '66', '18', '16727', '23515', '7'), +('7', '66', '18', '69148', '21018', '7'), +('7', '66', '18', '28652', '17680', '7'), +('7', '66', '19', '69179', '31437', '7'), +('7', '66', '19', '68898', '29283', '7'), +('7', '66', '19', '19446', '19376', '7'), +('7', '66', '19', '68711', '18779', '7'), +('7', '66', '13', '68740', '120462', '7'), +('7', '66', '13', '68837', '117200', '7'), +('7', '66', '13', '69120', '111473', '7'), +('7', '66', '13', '26740', '100402', '7'), +('7', '66', '14', '68740', '120462', '7'), +('7', '66', '14', '68837', '117200', '7'), +('7', '66', '14', '69120', '111473', '7'), +('7', '66', '14', '26740', '100402', '7'), +('7', '66', '11', '67606', '33467', '7'), +('7', '66', '11', '69158', '33262', '7'), +('7', '66', '11', '68952', '29505', '7'), +('7', '66', '11', '68848', '28260', '7'), +('7', '67', '22', '66397', '0', '7'), +('7', '67', '22', '62787', '0', '7'), +('7', '67', '22', '61948', '0', '7'), +('7', '67', '22', '21805', '0', '7'), +('7', '67', '1', '68949', '39789', '7'), +('7', '67', '1', '69166', '37901', '7'), +('7', '67', '1', '7125', '31561', '7'), +('7', '67', '1', '68958', '29805', '7'), +('7', '67', '2', '67728', '25701', '7'), +('7', '67', '2', '28648', '20716', '7'), +('7', '67', '2', '31223', '18124', '7'), +('7', '67', '2', '28653', '18043', '7'), +('7', '67', '3', '69157', '30503', '7'), +('7', '67', '3', '68953', '28676', '7'), +('7', '67', '3', '68752', '24301', '7'), +('7', '67', '3', '69069', '23461', '7'), +('7', '67', '5', '67625', '32650', '7'), +('7', '67', '5', '68808', '30536', '7'), +('7', '67', '5', '7769', '29187', '7'), +('7', '67', '5', '68840', '27670', '7'), +('7', '67', '8', '69165', '40598', '7'), +('7', '67', '8', '68844', '31075', '7'), +('7', '67', '8', '69064', '28774', '7'), +('7', '67', '8', '68787', '24902', '7'), +('7', '67', '6', '68955', '28401', '7'), +('7', '67', '6', '13674', '26847', '7'), +('7', '67', '6', '68757', '25283', '7'), +('7', '67', '6', '68789', '18733', '7'), +('7', '67', '17', '68978', '30264', '7'), +('7', '67', '17', '47650', '26109', '7'), +('7', '67', '17', '69152', '21003', '7'), +('7', '67', '17', '69403', '20610', '7'), +('7', '67', '7', '68896', '28302', '7'), +('7', '67', '7', '69175', '28213', '7'), +('7', '67', '7', '16097', '25638', '7'), +('7', '67', '7', '11435', '20895', '7'), +('7', '67', '9', '68899', '26887', '7'), +('7', '67', '9', '32110', '26067', '7'), +('7', '67', '9', '16097', '25638', '7'), +('7', '67', '9', '69128', '23708', '7'), +('7', '67', '15', '69160', '33590', '7'), +('7', '67', '15', '68948', '29476', '7'), +('7', '67', '15', '68842', '28199', '7'), +('7', '67', '15', '68784', '27221', '7'), +('7', '67', '20', '16156', '32855', '7'), +('7', '67', '20', '67625', '32650', '7'), +('7', '67', '20', '68951', '30660', '7'), +('7', '67', '20', '69134', '27956', '7'), +('7', '67', '12', '69254', '33127', '7'), +('7', '67', '12', '68643', '27091', '7'), +('7', '67', '12', '68897', '26062', '7'), +('7', '67', '12', '27000', '23191', '7'), +('7', '67', '18', '68979', '32292', '7'), +('7', '67', '18', '16727', '23517', '7'), +('7', '67', '18', '69148', '21019', '7'), +('7', '67', '18', '28652', '17681', '7'), +('7', '67', '19', '69179', '31438', '7'), +('7', '67', '19', '68898', '29284', '7'), +('7', '67', '19', '19446', '19377', '7'), +('7', '67', '19', '68711', '18780', '7'), +('7', '67', '13', '68740', '120814', '7'), +('7', '67', '13', '68837', '117372', '7'), +('7', '67', '13', '69120', '111761', '7'), +('7', '67', '13', '26740', '100572', '7'), +('7', '67', '14', '68740', '120814', '7'), +('7', '67', '14', '68837', '117372', '7'), +('7', '67', '14', '69120', '111761', '7'), +('7', '67', '14', '26740', '100572', '7'), +('7', '67', '11', '67606', '33468', '7'), +('7', '67', '11', '69158', '33264', '7'), +('7', '67', '11', '68952', '29506', '7'), +('7', '67', '11', '68848', '28262', '7'), +('7', '68', '22', '66397', '0', '7'), +('7', '68', '22', '62787', '0', '7'), +('7', '68', '22', '61948', '0', '7'), +('7', '68', '22', '21805', '0', '7'), +('7', '68', '1', '68949', '39791', '7'), +('7', '68', '1', '69166', '37903', '7'), +('7', '68', '1', '7125', '31562', '7'), +('7', '68', '1', '68958', '29807', '7'), +('7', '68', '2', '67728', '25703', '7'), +('7', '68', '2', '28648', '20716', '7'), +('7', '68', '2', '31223', '18125', '7'), +('7', '68', '2', '28653', '18044', '7'), +('7', '68', '3', '69157', '30504', '7'), +('7', '68', '3', '68953', '28678', '7'), +('7', '68', '3', '68752', '24303', '7'), +('7', '68', '3', '69069', '23463', '7'), +('7', '68', '5', '67625', '32651', '7'), +('7', '68', '5', '68808', '30538', '7'), +('7', '68', '5', '7769', '29187', '7'), +('7', '68', '5', '68840', '27672', '7'), +('7', '68', '8', '69165', '40600', '7'), +('7', '68', '8', '68844', '31077', '7'), +('7', '68', '8', '69064', '28775', '7'), +('7', '68', '8', '68787', '24902', '7'), +('7', '68', '6', '68955', '28403', '7'), +('7', '68', '6', '13674', '26848', '7'), +('7', '68', '6', '68757', '25284', '7'), +('7', '68', '6', '68789', '18733', '7'), +('7', '68', '17', '68978', '30266', '7'), +('7', '68', '17', '47650', '26111', '7'), +('7', '68', '17', '69152', '21004', '7'), +('7', '68', '17', '69403', '20612', '7'), +('7', '68', '7', '68896', '28305', '7'), +('7', '68', '7', '69175', '28214', '7'), +('7', '68', '7', '16097', '25640', '7'), +('7', '68', '7', '11435', '20896', '7'), +('7', '68', '9', '68899', '26888', '7'), +('7', '68', '9', '32110', '26068', '7'), +('7', '68', '9', '16097', '25640', '7'), +('7', '68', '9', '69128', '23710', '7'), +('7', '68', '15', '69160', '33592', '7'), +('7', '68', '15', '68948', '29478', '7'), +('7', '68', '15', '68842', '28200', '7'), +('7', '68', '15', '68784', '27223', '7'), +('7', '68', '20', '16156', '32856', '7'), +('7', '68', '20', '67625', '32651', '7'), +('7', '68', '20', '68951', '30661', '7'), +('7', '68', '20', '69134', '27957', '7'), +('7', '68', '12', '69254', '33128', '7'), +('7', '68', '12', '68643', '27092', '7'), +('7', '68', '12', '68897', '26063', '7'), +('7', '68', '12', '27000', '23191', '7'), +('7', '68', '18', '68979', '32293', '7'), +('7', '68', '18', '16727', '23518', '7'), +('7', '68', '18', '69148', '21019', '7'), +('7', '68', '18', '28652', '17681', '7'), +('7', '68', '19', '69179', '31440', '7'), +('7', '68', '19', '68898', '29285', '7'), +('7', '68', '19', '19446', '19378', '7'), +('7', '68', '19', '68711', '18782', '7'), +('7', '68', '13', '68740', '121166', '7'), +('7', '68', '13', '68837', '117587', '7'), +('7', '68', '13', '69120', '112049', '7'), +('7', '68', '13', '26740', '100700', '7'), +('7', '68', '14', '68740', '121166', '7'), +('7', '68', '14', '68837', '117587', '7'), +('7', '68', '14', '69120', '112049', '7'), +('7', '68', '14', '26740', '100700', '7'), +('7', '68', '11', '67606', '33469', '7'), +('7', '68', '11', '69158', '33265', '7'), +('7', '68', '11', '68952', '29508', '7'), +('7', '68', '11', '68848', '28263', '7'), +('7', '69', '22', '66397', '0', '7'), +('7', '69', '22', '62787', '0', '7'), +('7', '69', '22', '61948', '0', '7'), +('7', '69', '22', '21805', '0', '7'), +('7', '69', '1', '68949', '39793', '7'), +('7', '69', '1', '69166', '37904', '7'), +('7', '69', '1', '7125', '31563', '7'), +('7', '69', '1', '68958', '29808', '7'), +('7', '69', '2', '67728', '25704', '7'), +('7', '69', '2', '28648', '20716', '7'), +('7', '69', '2', '31223', '18125', '7'), +('7', '69', '2', '28653', '18045', '7'), +('7', '69', '3', '69157', '30505', '7'), +('7', '69', '3', '68953', '28679', '7'), +('7', '69', '3', '68752', '24304', '7'), +('7', '69', '3', '69069', '23464', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '69', '5', '67625', '32652', '7'), +('7', '69', '5', '68808', '30539', '7'), +('7', '69', '5', '7769', '29187', '7'), +('7', '69', '5', '68840', '27673', '7'), +('7', '69', '8', '69165', '40602', '7'), +('7', '69', '8', '68844', '31079', '7'), +('7', '69', '8', '69064', '28776', '7'), +('7', '69', '8', '68787', '24902', '7'), +('7', '69', '6', '68955', '28404', '7'), +('7', '69', '6', '13674', '26849', '7'), +('7', '69', '6', '68757', '25285', '7'), +('7', '69', '6', '68789', '18734', '7'), +('7', '69', '17', '68978', '30268', '7'), +('7', '69', '17', '47650', '26113', '7'), +('7', '69', '17', '69152', '21005', '7'), +('7', '69', '17', '69403', '20613', '7'), +('7', '69', '7', '68896', '28306', '7'), +('7', '69', '7', '69175', '28216', '7'), +('7', '69', '7', '16097', '25641', '7'), +('7', '69', '7', '11435', '20897', '7'), +('7', '69', '9', '68899', '26889', '7'), +('7', '69', '9', '32110', '26069', '7'), +('7', '69', '9', '16097', '25641', '7'), +('7', '69', '9', '69128', '23710', '7'), +('7', '69', '15', '69160', '33593', '7'), +('7', '69', '15', '68948', '29479', '7'), +('7', '69', '15', '68842', '28202', '7'), +('7', '69', '15', '68784', '27224', '7'), +('7', '69', '20', '16156', '32857', '7'), +('7', '69', '20', '67625', '32652', '7'), +('7', '69', '20', '68951', '30663', '7'), +('7', '69', '20', '69134', '27958', '7'), +('7', '69', '12', '69254', '33129', '7'), +('7', '69', '12', '68643', '27093', '7'), +('7', '69', '12', '68897', '26065', '7'), +('7', '69', '12', '27000', '23191', '7'), +('7', '69', '18', '68979', '32294', '7'), +('7', '69', '18', '16727', '23519', '7'), +('7', '69', '18', '69148', '21020', '7'), +('7', '69', '18', '28652', '17682', '7'), +('7', '69', '19', '69179', '31441', '7'), +('7', '69', '19', '68898', '29285', '7'), +('7', '69', '19', '19446', '19379', '7'), +('7', '69', '19', '68711', '18783', '7'), +('7', '69', '13', '68740', '121518', '7'), +('7', '69', '13', '68837', '117759', '7'), +('7', '69', '13', '69120', '112304', '7'), +('7', '69', '13', '26740', '100870', '7'), +('7', '69', '14', '68740', '121518', '7'), +('7', '69', '14', '68837', '117759', '7'), +('7', '69', '14', '69120', '112304', '7'), +('7', '69', '14', '26740', '100870', '7'), +('7', '69', '11', '67606', '33471', '7'), +('7', '69', '11', '69158', '33266', '7'), +('7', '69', '11', '68952', '29509', '7'), +('7', '69', '11', '68848', '28264', '7'), +('7', '70', '22', '61948', '0', '11'), +('7', '70', '22', '66397', '0', '11'), +('7', '70', '22', '21805', '0', '11'), +('7', '70', '22', '21807', '0', '11'), +('7', '70', '1', '83594', '50522', '11'), +('7', '70', '1', '39276', '50101', '11'), +('7', '70', '1', '39363', '46003', '11'), +('7', '70', '1', '39329', '43597', '11'), +('7', '70', '2', '70895', '45103', '11'), +('7', '70', '2', '83562', '42183', '11'), +('7', '70', '2', '83542', '37613', '11'), +('7', '70', '2', '47210', '28577', '11'), +('7', '70', '3', '39218', '40090', '11'), +('7', '70', '3', '89512', '39962', '11'), +('7', '70', '3', '83658', '39263', '11'), +('7', '70', '3', '39361', '37696', '11'), +('7', '70', '5', '39349', '51944', '11'), +('7', '70', '5', '47273', '37559', '11'), +('7', '70', '5', '47275', '37547', '11'), +('7', '70', '5', '83599', '36114', '11'), +('7', '70', '8', '70977', '43909', '11'), +('7', '70', '8', '39330', '41072', '11'), +('7', '70', '8', '69165', '40603', '11'), +('7', '70', '8', '39210', '37284', '11'), +('7', '70', '6', '39367', '50323', '11'), +('7', '70', '6', '83585', '43673', '11'), +('7', '70', '6', '70717', '39221', '11'), +('7', '70', '6', '83635', '35052', '11'), +('7', '70', '17', '68978', '30270', '11'), +('7', '70', '17', '47650', '26115', '11'), +('7', '70', '17', '70900', '25096', '11'), +('7', '70', '17', '83605', '23785', '11'), +('7', '70', '7', '39357', '45044', '11'), +('7', '70', '7', '83566', '43188', '11'), +('7', '70', '7', '70896', '37810', '11'), +('7', '70', '7', '39220', '35916', '11'), +('7', '70', '9', '39346', '49310', '11'), +('7', '70', '9', '51708', '46623', '11'), +('7', '70', '9', '83654', '45949', '11'), +('7', '70', '9', '70897', '39601', '11'), +('7', '70', '15', '39373', '52606', '11'), +('7', '70', '15', '39321', '41301', '11'), +('7', '70', '15', '51703', '39933', '11'), +('7', '70', '15', '83661', '39465', '11'), +('7', '70', '20', '39339', '43584', '11'), +('7', '70', '20', '47283', '41855', '11'), +('7', '70', '20', '39322', '39950', '11'), +('7', '70', '20', '47282', '33112', '11'), +('7', '70', '12', '83570', '37978', '11'), +('7', '70', '12', '47214', '37571', '11'), +('7', '70', '12', '70898', '36577', '11'), +('7', '70', '12', '71085', '36507', '11'), +('7', '70', '18', '68979', '32295', '11'), +('7', '70', '18', '70901', '30296', '11'), +('7', '70', '18', '71098', '27895', '11'), +('7', '70', '18', '83609', '25381', '11'), +('7', '70', '19', '83574', '42414', '11'), +('7', '70', '19', '70899', '40214', '11'), +('7', '70', '19', '39279', '39644', '11'), +('7', '70', '19', '83504', '33254', '11'), +('7', '70', '13', '83580', '180782', '11'), +('7', '70', '13', '39264', '176089', '11'), +('7', '70', '13', '67742', '168585', '11'), +('7', '70', '13', '83501', '167406', '11'), +('7', '70', '14', '83580', '180782', '11'), +('7', '70', '14', '39264', '176089', '11'), +('7', '70', '14', '67742', '168585', '11'), +('7', '70', '14', '83501', '167406', '11'), +('7', '70', '11', '39311', '48133', '11'), +('7', '70', '11', '83657', '45083', '11'), +('7', '70', '11', '39371', '44573', '11'), +('7', '70', '11', '39342', '43642', '11'), +('7', '70', '22', '66397', '0', '10'), +('7', '70', '22', '62787', '0', '10'), +('7', '70', '22', '61948', '0', '10'), +('7', '70', '22', '21805', '0', '10'), +('7', '70', '1', '83594', '50522', '10'), +('7', '70', '1', '71624', '42174', '10'), +('7', '70', '1', '83630', '42058', '10'), +('7', '70', '1', '47287', '41584', '10'), +('7', '70', '2', '70895', '45103', '10'), +('7', '70', '2', '83562', '42183', '10'), +('7', '70', '2', '83542', '37613', '10'), +('7', '70', '2', '47210', '28577', '10'), +('7', '70', '3', '89512', '39962', '10'), +('7', '70', '3', '83658', '39263', '10'), +('7', '70', '3', '83636', '37472', '10'), +('7', '70', '3', '56017', '36199', '10'), +('7', '70', '5', '47273', '37559', '10'), +('7', '70', '5', '47275', '37547', '10'), +('7', '70', '5', '83599', '36114', '10'), +('7', '70', '5', '67625', '32653', '10'), +('7', '70', '8', '70977', '43909', '10'), +('7', '70', '8', '69165', '40603', '10'), +('7', '70', '8', '68844', '31081', '10'), +('7', '70', '8', '83659', '31024', '10'), +('7', '70', '6', '83585', '43673', '10'), +('7', '70', '6', '70717', '39221', '10'), +('7', '70', '6', '83635', '35052', '10'), +('7', '70', '6', '71654', '34650', '10'), +('7', '70', '17', '68978', '30270', '10'), +('7', '70', '17', '47650', '26115', '10'), +('7', '70', '17', '70900', '25096', '10'), +('7', '70', '17', '83605', '23785', '10'), +('7', '70', '7', '83566', '43188', '10'), +('7', '70', '7', '70896', '37810', '10'), +('7', '70', '7', '83552', '35733', '10'), +('7', '70', '7', '47206', '29721', '10'), +('7', '70', '9', '83654', '45949', '10'), +('7', '70', '9', '70897', '39601', '10'), +('7', '70', '9', '83536', '34701', '10'), +('7', '70', '9', '83463', '34185', '10'), +('7', '70', '15', '83661', '39465', '10'), +('7', '70', '15', '47291', '38111', '10'), +('7', '70', '15', '47294', '37945', '10'), +('7', '70', '15', '83458', '36980', '10'), +('7', '70', '20', '47283', '41855', '10'), +('7', '70', '20', '47282', '33112', '10'), +('7', '70', '20', '16156', '32859', '10'), +('7', '70', '20', '83611', '32675', '10'), +('7', '70', '12', '83570', '37978', '10'), +('7', '70', '12', '47214', '37571', '10'), +('7', '70', '12', '70898', '36577', '10'), +('7', '70', '12', '71085', '36507', '10'), +('7', '70', '18', '68979', '32295', '10'), +('7', '70', '18', '70901', '30296', '10'), +('7', '70', '18', '71098', '27895', '10'), +('7', '70', '18', '83609', '25381', '10'), +('7', '70', '19', '83574', '42414', '10'), +('7', '70', '19', '70899', '40214', '10'), +('7', '70', '19', '83504', '33254', '10'), +('7', '70', '19', '70712', '33195', '10'), +('7', '70', '13', '83580', '180782', '10'), +('7', '70', '13', '67742', '168585', '10'), +('7', '70', '13', '83501', '167406', '10'), +('7', '70', '13', '47318', '166617', '10'), +('7', '70', '14', '83580', '180782', '10'), +('7', '70', '14', '67742', '168585', '10'), +('7', '70', '14', '83501', '167406', '10'), +('7', '70', '14', '47318', '166617', '10'), +('7', '70', '11', '83657', '45083', '10'), +('7', '70', '11', '83633', '43503', '10'), +('7', '70', '11', '83666', '43503', '10'), +('7', '70', '11', '83665', '39356', '10'), +('7', '70', '22', '66397', '0', '9'), +('7', '70', '22', '62787', '0', '9'), +('7', '70', '22', '61948', '0', '9'), +('7', '70', '22', '21805', '0', '9'), +('7', '70', '1', '71624', '42174', '9'), +('7', '70', '1', '47287', '41584', '9'), +('7', '70', '1', '68949', '39795', '9'), +('7', '70', '1', '71668', '39700', '9'), +('7', '70', '2', '70895', '45103', '9'), +('7', '70', '2', '47210', '28577', '9'), +('7', '70', '2', '71083', '26008', '9'), +('7', '70', '2', '67728', '25706', '9'), +('7', '70', '3', '56017', '36199', '9'), +('7', '70', '3', '47245', '36022', '9'), +('7', '70', '3', '47299', '33006', '9'), +('7', '70', '3', '70718', '32548', '9'), +('7', '70', '5', '47273', '37559', '9'), +('7', '70', '5', '47275', '37547', '9'), +('7', '70', '5', '67625', '32653', '9'), +('7', '70', '5', '68808', '30540', '9'), +('7', '70', '8', '70977', '43909', '9'), +('7', '70', '8', '69165', '40603', '9'), +('7', '70', '8', '68844', '31081', '9'), +('7', '70', '8', '70662', '30725', '9'), +('7', '70', '6', '70717', '39221', '9'), +('7', '70', '6', '71654', '34650', '9'), +('7', '70', '6', '68955', '28405', '9'), +('7', '70', '6', '13674', '26850', '9'), +('7', '70', '17', '68978', '30270', '9'), +('7', '70', '17', '47650', '26115', '9'), +('7', '70', '17', '70900', '25096', '9'), +('7', '70', '17', '69152', '21006', '9'), +('7', '70', '7', '70896', '37810', '9'), +('7', '70', '7', '47206', '29721', '9'), +('7', '70', '7', '68896', '28309', '9'), +('7', '70', '7', '69175', '28217', '9'), +('7', '70', '9', '70897', '39601', '9'), +('7', '70', '9', '47222', '34004', '9'), +('7', '70', '9', '68899', '26890', '9'), +('7', '70', '9', '71087', '26808', '9'), +('7', '70', '15', '47291', '38111', '9'), +('7', '70', '15', '47294', '37945', '9'), +('7', '70', '15', '71117', '35644', '9'), +('7', '70', '15', '47237', '35347', '9'), +('7', '70', '20', '47283', '41855', '9'), +('7', '70', '20', '47282', '33112', '9'), +('7', '70', '20', '16156', '32859', '9'), +('7', '70', '20', '67625', '32653', '9'), +('7', '70', '12', '47214', '37571', '9'), +('7', '70', '12', '70898', '36577', '9'), +('7', '70', '12', '71085', '36507', '9'), +('7', '70', '12', '69254', '33131', '9'), +('7', '70', '18', '68979', '32295', '9'), +('7', '70', '18', '70901', '30296', '9'), +('7', '70', '18', '71098', '27895', '9'), +('7', '70', '18', '83134', '25183', '9'), +('7', '70', '19', '70899', '40214', '9'), +('7', '70', '19', '70712', '33195', '9'), +('7', '70', '19', '69179', '31443', '9'), +('7', '70', '19', '47218', '30211', '9'), +('7', '70', '13', '67742', '168585', '9'), +('7', '70', '13', '47318', '166617', '9'), +('7', '70', '13', '70722', '154299', '9'), +('7', '70', '13', '47260', '152571', '9'), +('7', '70', '14', '67742', '168585', '9'), +('7', '70', '14', '47318', '166617', '9'), +('7', '70', '14', '70722', '154299', '9'), +('7', '70', '14', '47260', '152571', '9'), +('7', '70', '11', '67606', '33472', '9'), +('7', '70', '11', '69158', '33268', '9'), +('7', '70', '11', '47295', '32475', '9'), +('7', '70', '11', '71659', '31359', '9'), +('7', '70', '22', '66397', '0', '8'), +('7', '70', '22', '62787', '0', '8'), +('7', '70', '22', '61948', '0', '8'), +('7', '70', '22', '21805', '0', '8'), +('7', '70', '1', '47287', '41584', '8'), +('7', '70', '1', '68949', '39795', '8'), +('7', '70', '1', '47289', '39169', '8'), +('7', '70', '1', '69166', '37906', '8'), +('7', '70', '2', '70895', '45103', '8'), +('7', '70', '2', '47210', '28577', '8'), +('7', '70', '2', '71083', '26008', '8'), +('7', '70', '2', '67728', '25706', '8'), +('7', '70', '3', '56017', '36199', '8'), +('7', '70', '3', '47245', '36022', '8'), +('7', '70', '3', '47299', '33006', '8'), +('7', '70', '3', '70718', '32548', '8'), +('7', '70', '5', '47273', '37559', '8'), +('7', '70', '5', '47275', '37547', '8'), +('7', '70', '5', '67625', '32653', '8'), +('7', '70', '5', '68808', '30540', '8'), +('7', '70', '8', '69165', '40603', '8'), +('7', '70', '8', '68844', '31081', '8'), +('7', '70', '8', '70662', '30725', '8'), +('7', '70', '8', '69064', '28777', '8'), +('7', '70', '6', '70717', '39221', '8'), +('7', '70', '6', '68955', '28405', '8'), +('7', '70', '6', '13674', '26850', '8'), +('7', '70', '6', '71105', '26471', '8'), +('7', '70', '17', '68978', '30270', '8'), +('7', '70', '17', '47650', '26115', '8'), +('7', '70', '17', '70900', '25096', '8'), +('7', '70', '17', '69152', '21006', '8'), +('7', '70', '7', '70896', '37810', '8'), +('7', '70', '7', '47206', '29721', '8'), +('7', '70', '7', '68896', '28309', '8'), +('7', '70', '7', '69175', '28217', '8'), +('7', '70', '9', '70897', '39601', '8'), +('7', '70', '9', '47222', '34004', '8'), +('7', '70', '9', '68899', '26890', '8'), +('7', '70', '9', '71087', '26808', '8'), +('7', '70', '15', '47291', '38111', '8'), +('7', '70', '15', '47294', '37945', '8'), +('7', '70', '15', '71117', '35644', '8'), +('7', '70', '15', '47237', '35347', '8'), +('7', '70', '20', '47283', '41855', '8'), +('7', '70', '20', '47282', '33112', '8'), +('7', '70', '20', '16156', '32859', '8'), +('7', '70', '20', '67625', '32653', '8'), +('7', '70', '12', '47214', '37571', '8'), +('7', '70', '12', '70898', '36577', '8'), +('7', '70', '12', '71085', '36507', '8'), +('7', '70', '12', '69254', '33131', '8'), +('7', '70', '18', '68979', '32295', '8'), +('7', '70', '18', '70901', '30296', '8'), +('7', '70', '18', '71098', '27895', '8'), +('7', '70', '18', '16727', '23520', '8'), +('7', '70', '19', '70899', '40214', '8'), +('7', '70', '19', '70712', '33195', '8'), +('7', '70', '19', '69179', '31443', '8'), +('7', '70', '19', '47218', '30211', '8'), +('7', '70', '13', '67742', '168585', '8'), +('7', '70', '13', '47318', '166192', '8'), +('7', '70', '13', '70722', '153980', '8'), +('7', '70', '13', '47260', '152252', '8'), +('7', '70', '14', '67742', '168585', '8'), +('7', '70', '14', '47318', '166192', '8'), +('7', '70', '14', '70722', '153980', '8'), +('7', '70', '14', '47260', '152252', '8'), +('7', '70', '11', '67606', '33472', '8'), +('7', '70', '11', '69158', '33268', '8'), +('7', '70', '11', '47295', '32475', '8'), +('7', '70', '11', '68952', '29510', '8'), +('7', '71', '22', '61948', '0', '11'), +('7', '71', '22', '66397', '0', '11'), +('7', '71', '22', '21805', '0', '11'), +('7', '71', '22', '21807', '0', '11'), +('7', '71', '1', '83594', '50524', '11'), +('7', '71', '1', '39276', '50102', '11'), +('7', '71', '1', '39363', '46005', '11'), +('7', '71', '1', '39329', '43597', '11'), +('7', '71', '2', '70895', '45106', '11'), +('7', '71', '2', '83562', '42185', '11'), +('7', '71', '2', '83542', '37613', '11'), +('7', '71', '2', '47210', '28578', '11'), +('7', '71', '3', '39218', '40091', '11'), +('7', '71', '3', '89512', '39965', '11'), +('7', '71', '3', '83658', '39266', '11'), +('7', '71', '3', '39361', '37697', '11'), +('7', '71', '5', '39349', '51946', '11'), +('7', '71', '5', '47273', '37559', '11'), +('7', '71', '5', '47275', '37548', '11'), +('7', '71', '5', '83599', '36116', '11'), +('7', '71', '8', '70977', '43911', '11'), +('7', '71', '8', '39330', '41072', '11'), +('7', '71', '8', '69165', '40605', '11'), +('7', '71', '8', '39210', '37286', '11'), +('7', '71', '6', '39367', '50326', '11'), +('7', '71', '6', '83585', '43675', '11'), +('7', '71', '6', '70717', '39223', '11'), +('7', '71', '6', '83635', '35054', '11'), +('7', '71', '17', '68978', '30272', '11'), +('7', '71', '17', '47650', '26117', '11'), +('7', '71', '17', '70900', '25097', '11'), +('7', '71', '17', '83605', '23787', '11'), +('7', '71', '7', '39357', '45046', '11'), +('7', '71', '7', '83566', '43190', '11'), +('7', '71', '7', '70896', '37813', '11'), +('7', '71', '7', '39220', '35918', '11'), +('7', '71', '9', '39346', '49313', '11'), +('7', '71', '9', '51708', '46625', '11'), +('7', '71', '9', '83654', '45951', '11'), +('7', '71', '9', '70897', '39604', '11'), +('7', '71', '15', '39373', '52609', '11'), +('7', '71', '15', '39321', '41303', '11'), +('7', '71', '15', '51703', '39935', '11'), +('7', '71', '15', '83661', '39467', '11'), +('7', '71', '20', '39339', '43585', '11'), +('7', '71', '20', '47283', '41856', '11'), +('7', '71', '20', '39322', '39953', '11'), +('7', '71', '20', '47282', '33114', '11'), +('7', '71', '12', '83570', '37981', '11'), +('7', '71', '12', '47214', '37571', '11'), +('7', '71', '12', '70898', '36579', '11'), +('7', '71', '12', '71085', '36508', '11'), +('7', '71', '18', '68979', '32296', '11'), +('7', '71', '18', '70901', '30298', '11'), +('7', '71', '18', '71098', '27896', '11'), +('7', '71', '18', '83609', '25382', '11'), +('7', '71', '19', '83574', '42416', '11'), +('7', '71', '19', '70899', '40214', '11'), +('7', '71', '19', '39279', '39645', '11'), +('7', '71', '19', '83504', '33256', '11'), +('7', '71', '13', '83580', '181209', '11'), +('7', '71', '13', '39264', '176559', '11'), +('7', '71', '13', '67742', '168799', '11'), +('7', '71', '13', '83501', '167884', '11'), +('7', '71', '14', '83580', '181209', '11'), +('7', '71', '14', '39264', '176559', '11'), +('7', '71', '14', '67742', '168799', '11'), +('7', '71', '14', '83501', '167884', '11'), +('7', '71', '11', '39311', '48135', '11'), +('7', '71', '11', '83657', '45086', '11'), +('7', '71', '11', '39371', '44575', '11'), +('7', '71', '11', '39342', '43644', '11'), +('7', '72', '22', '61948', '0', '11'), +('7', '72', '22', '66397', '0', '11'), +('7', '72', '22', '21805', '0', '11'), +('7', '72', '22', '21807', '0', '11'), +('7', '72', '1', '83594', '50526', '11'), +('7', '72', '1', '39276', '50104', '11'), +('7', '72', '1', '39363', '46007', '11'), +('7', '72', '1', '39329', '43597', '11'), +('7', '72', '2', '70895', '45108', '11'), +('7', '72', '2', '83562', '42187', '11'), +('7', '72', '2', '83542', '37613', '11'), +('7', '72', '2', '47210', '28579', '11'), +('7', '72', '3', '39218', '40092', '11'), +('7', '72', '3', '89512', '39967', '11'), +('7', '72', '3', '83658', '39268', '11'), +('7', '72', '3', '39361', '37698', '11'), +('7', '72', '5', '39349', '51948', '11'), +('7', '72', '5', '47273', '37559', '11'), +('7', '72', '5', '47275', '37550', '11'), +('7', '72', '5', '83599', '36118', '11'), +('7', '72', '8', '70977', '43913', '11'), +('7', '72', '8', '39330', '41072', '11'), +('7', '72', '8', '69165', '40607', '11'), +('7', '72', '8', '39210', '37288', '11'), +('7', '72', '6', '39367', '50328', '11'), +('7', '72', '6', '83585', '43677', '11'), +('7', '72', '6', '70717', '39225', '11'), +('7', '72', '6', '83635', '35056', '11'), +('7', '72', '17', '68978', '30274', '11'), +('7', '72', '17', '47650', '26119', '11'), +('7', '72', '17', '70900', '25098', '11'), +('7', '72', '17', '83605', '23788', '11'), +('7', '72', '7', '39357', '45047', '11'), +('7', '72', '7', '83566', '43193', '11'), +('7', '72', '7', '70896', '37816', '11'), +('7', '72', '7', '39220', '35919', '11'), +('7', '72', '9', '39346', '49316', '11'), +('7', '72', '9', '51708', '46627', '11'), +('7', '72', '9', '83654', '45953', '11'), +('7', '72', '9', '70897', '39607', '11'), +('7', '72', '15', '39373', '52612', '11'), +('7', '72', '15', '39321', '41304', '11'), +('7', '72', '15', '51703', '39937', '11'), +('7', '72', '15', '83661', '39470', '11'), +('7', '72', '20', '39339', '43587', '11'), +('7', '72', '20', '47283', '41857', '11'), +('7', '72', '20', '39322', '39955', '11'), +('7', '72', '20', '47282', '33115', '11'), +('7', '72', '12', '83570', '37983', '11'), +('7', '72', '12', '47214', '37571', '11'), +('7', '72', '12', '70898', '36581', '11'), +('7', '72', '12', '71085', '36510', '11'), +('7', '72', '18', '68979', '32297', '11'), +('7', '72', '18', '70901', '30299', '11'), +('7', '72', '18', '71098', '27898', '11'), +('7', '72', '18', '83609', '25384', '11'), +('7', '72', '19', '83574', '42419', '11'), +('7', '72', '19', '70899', '40214', '11'), +('7', '72', '19', '39279', '39646', '11'), +('7', '72', '19', '83504', '33257', '11'), +('7', '72', '13', '83580', '181678', '11'), +('7', '72', '13', '39264', '176985', '11'), +('7', '72', '13', '67742', '169056', '11'), +('7', '72', '13', '83501', '168362', '11'), +('7', '72', '14', '83580', '181678', '11'), +('7', '72', '14', '39264', '176985', '11'), +('7', '72', '14', '67742', '169056', '11'), +('7', '72', '14', '83501', '168362', '11'), +('7', '72', '11', '39311', '48137', '11'), +('7', '72', '11', '83657', '45088', '11'), +('7', '72', '11', '39371', '44577', '11'), +('7', '72', '11', '39342', '43646', '11'), +('7', '73', '22', '61948', '0', '11'), +('7', '73', '22', '66397', '0', '11'), +('7', '73', '22', '21805', '0', '11'), +('7', '73', '22', '21807', '0', '11'), +('7', '73', '1', '83594', '50528', '11'), +('7', '73', '1', '39276', '50106', '11'), +('7', '73', '1', '39363', '46009', '11'), +('7', '73', '1', '39329', '43597', '11'), +('7', '73', '2', '70895', '45110', '11'), +('7', '73', '2', '83562', '42190', '11'), +('7', '73', '2', '83542', '37613', '11'), +('7', '73', '2', '47210', '28580', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '73', '3', '39218', '40093', '11'), +('7', '73', '3', '89512', '39969', '11'), +('7', '73', '3', '83658', '39270', '11'), +('7', '73', '3', '39361', '37700', '11'), +('7', '73', '5', '39349', '51950', '11'), +('7', '73', '5', '47273', '37559', '11'), +('7', '73', '5', '47275', '37551', '11'), +('7', '73', '5', '83599', '36120', '11'), +('7', '73', '8', '70977', '43915', '11'), +('7', '73', '8', '39330', '41072', '11'), +('7', '73', '8', '69165', '40609', '11'), +('7', '73', '8', '39210', '37290', '11'), +('7', '73', '6', '39367', '50330', '11'), +('7', '73', '6', '83585', '43679', '11'), +('7', '73', '6', '70717', '39227', '11'), +('7', '73', '6', '83635', '35058', '11'), +('7', '73', '17', '68978', '30276', '11'), +('7', '73', '17', '47650', '26121', '11'), +('7', '73', '17', '70900', '25099', '11'), +('7', '73', '17', '83605', '23789', '11'), +('7', '73', '7', '39357', '45049', '11'), +('7', '73', '7', '83566', '43195', '11'), +('7', '73', '7', '70896', '37819', '11'), +('7', '73', '7', '39220', '35921', '11'), +('7', '73', '9', '39346', '49319', '11'), +('7', '73', '9', '51708', '46629', '11'), +('7', '73', '9', '83654', '45955', '11'), +('7', '73', '9', '70897', '39611', '11'), +('7', '73', '15', '39373', '52614', '11'), +('7', '73', '15', '39321', '41306', '11'), +('7', '73', '15', '51703', '39939', '11'), +('7', '73', '15', '83661', '39472', '11'), +('7', '73', '20', '39339', '43588', '11'), +('7', '73', '20', '47283', '41858', '11'), +('7', '73', '20', '39322', '39958', '11'), +('7', '73', '20', '47282', '33117', '11'), +('7', '73', '12', '83570', '37985', '11'), +('7', '73', '12', '47214', '37571', '11'), +('7', '73', '12', '70898', '36584', '11'), +('7', '73', '12', '71085', '36511', '11'), +('7', '73', '18', '68979', '32299', '11'), +('7', '73', '18', '70901', '30301', '11'), +('7', '73', '18', '71098', '27900', '11'), +('7', '73', '18', '83609', '25385', '11'), +('7', '73', '19', '83574', '42421', '11'), +('7', '73', '19', '70899', '40214', '11'), +('7', '73', '19', '39279', '39648', '11'), +('7', '73', '19', '83504', '33259', '11'), +('7', '73', '13', '83580', '182104', '11'), +('7', '73', '13', '39264', '177412', '11'), +('7', '73', '13', '67742', '169313', '11'), +('7', '73', '13', '83501', '168840', '11'), +('7', '73', '14', '83580', '182104', '11'), +('7', '73', '14', '39264', '177412', '11'), +('7', '73', '14', '67742', '169313', '11'), +('7', '73', '14', '83501', '168840', '11'), +('7', '73', '11', '39311', '48139', '11'), +('7', '73', '11', '83657', '45091', '11'), +('7', '73', '11', '39371', '44579', '11'), +('7', '73', '11', '39342', '43648', '11'), +('7', '74', '22', '61948', '0', '11'), +('7', '74', '22', '66397', '0', '11'), +('7', '74', '22', '21805', '0', '11'), +('7', '74', '22', '21807', '0', '11'), +('7', '74', '1', '83594', '50530', '11'), +('7', '74', '1', '39276', '50107', '11'), +('7', '74', '1', '39363', '46011', '11'), +('7', '74', '1', '39329', '43597', '11'), +('7', '74', '2', '70895', '45112', '11'), +('7', '74', '2', '83562', '42192', '11'), +('7', '74', '2', '83542', '37613', '11'), +('7', '74', '2', '47210', '28581', '11'), +('7', '74', '3', '39218', '40094', '11'), +('7', '74', '3', '89512', '39971', '11'), +('7', '74', '3', '83658', '39272', '11'), +('7', '74', '3', '39361', '37701', '11'), +('7', '74', '5', '39349', '51952', '11'), +('7', '74', '5', '47273', '37559', '11'), +('7', '74', '5', '47275', '37553', '11'), +('7', '74', '5', '83599', '36122', '11'), +('7', '74', '8', '70977', '43917', '11'), +('7', '74', '8', '39330', '41072', '11'), +('7', '74', '8', '69165', '40610', '11'), +('7', '74', '8', '39210', '37291', '11'), +('7', '74', '6', '39367', '50332', '11'), +('7', '74', '6', '83585', '43681', '11'), +('7', '74', '6', '70717', '39229', '11'), +('7', '74', '6', '83635', '35060', '11'), +('7', '74', '17', '68978', '30278', '11'), +('7', '74', '17', '47650', '26123', '11'), +('7', '74', '17', '70900', '25101', '11'), +('7', '74', '17', '83605', '23790', '11'), +('7', '74', '7', '39357', '45051', '11'), +('7', '74', '7', '83566', '43197', '11'), +('7', '74', '7', '70896', '37822', '11'), +('7', '74', '7', '39220', '35923', '11'), +('7', '74', '9', '39346', '49321', '11'), +('7', '74', '9', '51708', '46631', '11'), +('7', '74', '9', '83654', '45957', '11'), +('7', '74', '9', '70897', '39614', '11'), +('7', '74', '15', '39373', '52617', '11'), +('7', '74', '15', '39321', '41307', '11'), +('7', '74', '15', '51703', '39941', '11'), +('7', '74', '15', '83661', '39474', '11'), +('7', '74', '20', '39339', '43589', '11'), +('7', '74', '20', '47283', '41860', '11'), +('7', '74', '20', '39322', '39960', '11'), +('7', '74', '20', '47282', '33118', '11'), +('7', '74', '12', '83570', '37987', '11'), +('7', '74', '12', '47214', '37571', '11'), +('7', '74', '12', '70898', '36586', '11'), +('7', '74', '12', '71085', '36513', '11'), +('7', '74', '18', '68979', '32300', '11'), +('7', '74', '18', '70901', '30303', '11'), +('7', '74', '18', '71098', '27901', '11'), +('7', '74', '18', '83609', '25387', '11'), +('7', '74', '19', '83574', '42423', '11'), +('7', '74', '19', '70899', '40214', '11'), +('7', '74', '19', '39279', '39649', '11'), +('7', '74', '19', '83504', '33260', '11'), +('7', '74', '13', '83580', '182573', '11'), +('7', '74', '13', '39264', '177881', '11'), +('7', '74', '13', '67742', '169528', '11'), +('7', '74', '13', '83501', '169318', '11'), +('7', '74', '14', '83580', '182573', '11'), +('7', '74', '14', '39264', '177881', '11'), +('7', '74', '14', '67742', '169528', '11'), +('7', '74', '14', '83501', '169318', '11'), +('7', '74', '11', '39311', '48141', '11'), +('7', '74', '11', '83657', '45094', '11'), +('7', '74', '11', '39371', '44581', '11'), +('7', '74', '11', '39342', '43650', '11'), +('7', '75', '22', '21805', '0', '13'), +('7', '75', '22', '61948', '0', '13'), +('7', '75', '22', '21807', '0', '13'), +('7', '75', '22', '12425', '0', '13'), +('7', '75', '1', '80676', '69391', '13'), +('7', '75', '1', '80648', '67201', '13'), +('7', '75', '1', '80639', '63498', '13'), +('7', '75', '1', '46931', '61470', '13'), +('7', '75', '2', '70895', '45114', '13'), +('7', '75', '2', '83562', '42194', '13'), +('7', '75', '2', '83542', '37613', '13'), +('7', '75', '2', '47210', '28582', '13'), +('7', '75', '3', '80636', '67372', '13'), +('7', '75', '3', '46924', '51187', '13'), +('7', '75', '3', '46902', '43692', '13'), +('7', '75', '3', '46852', '42680', '13'), +('7', '75', '5', '80669', '66041', '13'), +('7', '75', '5', '46918', '63587', '13'), +('7', '75', '5', '80616', '60877', '13'), +('7', '75', '5', '39349', '51954', '13'), +('7', '75', '8', '80687', '57435', '13'), +('7', '75', '8', '46885', '54094', '13'), +('7', '75', '8', '80649', '44420', '13'), +('7', '75', '8', '70977', '43919', '13'), +('7', '75', '6', '39367', '50335', '13'), +('7', '75', '6', '46884', '48133', '13'), +('7', '75', '6', '46933', '48085', '13'), +('7', '75', '6', '46858', '45760', '13'), +('7', '75', '17', '68978', '30280', '13'), +('7', '75', '17', '47650', '26125', '13'), +('7', '75', '17', '70900', '25102', '13'), +('7', '75', '17', '83605', '23791', '13'), +('7', '75', '7', '39357', '45053', '13'), +('7', '75', '7', '83566', '43200', '13'), +('7', '75', '7', '70896', '37825', '13'), +('7', '75', '7', '39220', '35925', '13'), +('7', '75', '9', '46888', '62712', '13'), +('7', '75', '9', '39346', '49324', '13'), +('7', '75', '9', '51708', '46633', '13'), +('7', '75', '9', '83654', '45959', '13'), +('7', '75', '15', '79909', '75105', '13'), +('7', '75', '15', '80686', '69955', '13'), +('7', '75', '15', '80657', '69529', '13'), +('7', '75', '15', '79908', '67742', '13'), +('7', '75', '20', '80688', '78091', '13'), +('7', '75', '20', '46935', '59705', '13'), +('7', '75', '20', '80620', '55460', '13'), +('7', '75', '20', '46870', '49334', '13'), +('7', '75', '12', '83570', '37990', '13'), +('7', '75', '12', '47214', '37571', '13'), +('7', '75', '12', '70898', '36588', '13'), +('7', '75', '12', '71085', '36514', '13'), +('7', '75', '18', '68979', '32301', '13'), +('7', '75', '18', '70901', '30304', '13'), +('7', '75', '18', '71098', '27903', '13'), +('7', '75', '18', '83609', '25388', '13'), +('7', '75', '19', '83574', '42426', '13'), +('7', '75', '19', '70899', '40214', '13'), +('7', '75', '19', '39279', '39651', '13'), +('7', '75', '19', '83504', '33262', '13'), +('7', '75', '13', '80684', '245665', '13'), +('7', '75', '13', '46878', '213989', '13'), +('7', '75', '13', '80643', '204667', '13'), +('7', '75', '13', '46829', '184241', '13'), +('7', '75', '14', '80684', '245665', '13'), +('7', '75', '14', '46878', '213989', '13'), +('7', '75', '14', '80643', '204667', '13'), +('7', '75', '14', '46829', '184241', '13'), +('7', '75', '11', '80668', '58623', '13'), +('7', '75', '11', '80630', '49116', '13'), +('7', '75', '11', '39311', '48144', '13'), +('7', '75', '11', '46850', '47372', '13'), +('7', '75', '22', '21805', '0', '12'), +('7', '75', '22', '61948', '0', '12'), +('7', '75', '22', '21807', '0', '12'), +('7', '75', '22', '12425', '0', '12'), +('7', '75', '1', '46931', '61470', '12'), +('7', '75', '1', '46866', '55530', '12'), +('7', '75', '1', '83594', '50532', '12'), +('7', '75', '1', '46894', '50268', '12'), +('7', '75', '2', '70895', '45114', '12'), +('7', '75', '2', '83562', '42194', '12'), +('7', '75', '2', '83542', '37613', '12'), +('7', '75', '2', '47210', '28582', '12'), +('7', '75', '3', '46924', '51187', '12'), +('7', '75', '3', '46902', '43692', '12'), +('7', '75', '3', '46852', '42680', '12'), +('7', '75', '3', '39218', '40095', '12'), +('7', '75', '5', '46918', '63587', '12'), +('7', '75', '5', '39349', '51954', '12'), +('7', '75', '5', '46934', '50896', '12'), +('7', '75', '5', '47273', '37559', '12'), +('7', '75', '8', '46885', '54094', '12'), +('7', '75', '8', '70977', '43919', '12'), +('7', '75', '8', '46848', '41934', '12'), +('7', '75', '8', '39330', '41072', '12'), +('7', '75', '6', '39367', '50335', '12'), +('7', '75', '6', '46884', '48133', '12'), +('7', '75', '6', '46933', '48085', '12'), +('7', '75', '6', '46858', '45760', '12'), +('7', '75', '17', '68978', '30280', '12'), +('7', '75', '17', '47650', '26125', '12'), +('7', '75', '17', '70900', '25102', '12'), +('7', '75', '17', '83605', '23791', '12'), +('7', '75', '7', '39357', '45053', '12'), +('7', '75', '7', '83566', '43200', '12'), +('7', '75', '7', '70896', '37825', '12'), +('7', '75', '7', '39220', '35925', '12'), +('7', '75', '9', '46888', '62712', '12'), +('7', '75', '9', '39346', '49324', '12'), +('7', '75', '9', '51708', '46633', '12'), +('7', '75', '9', '83654', '45959', '12'), +('7', '75', '15', '46881', '60370', '12'), +('7', '75', '15', '46893', '54844', '12'), +('7', '75', '15', '46916', '54532', '12'), +('7', '75', '15', '39373', '52620', '12'), +('7', '75', '20', '46935', '59705', '12'), +('7', '75', '20', '46870', '49334', '12'), +('7', '75', '20', '39339', '43591', '12'), +('7', '75', '20', '47283', '41861', '12'), +('7', '75', '12', '83570', '37990', '12'), +('7', '75', '12', '47214', '37571', '12'), +('7', '75', '12', '70898', '36588', '12'), +('7', '75', '12', '71085', '36514', '12'), +('7', '75', '18', '68979', '32301', '12'), +('7', '75', '18', '70901', '30304', '12'), +('7', '75', '18', '71098', '27903', '12'), +('7', '75', '18', '83609', '25388', '12'), +('7', '75', '19', '83574', '42426', '12'), +('7', '75', '19', '70899', '40214', '12'), +('7', '75', '19', '39279', '39651', '12'), +('7', '75', '19', '83504', '33262', '12'), +('7', '75', '13', '46878', '213989', '12'), +('7', '75', '13', '46829', '184241', '12'), +('7', '75', '13', '83580', '184105', '12'), +('7', '75', '13', '39264', '179371', '12'), +('7', '75', '14', '46878', '213989', '12'), +('7', '75', '14', '46829', '184241', '12'), +('7', '75', '14', '83580', '184105', '12'), +('7', '75', '14', '39264', '179371', '12'), +('7', '75', '11', '39311', '48144', '12'), +('7', '75', '11', '46850', '47372', '12'), +('7', '75', '11', '83657', '45096', '12'), +('7', '75', '11', '39371', '44583', '12'), +('7', '76', '22', '21805', '0', '13'), +('7', '76', '22', '61948', '0', '13'), +('7', '76', '22', '21807', '0', '13'), +('7', '76', '22', '12425', '0', '13'), +('7', '76', '1', '80676', '69391', '13'), +('7', '76', '1', '80648', '67203', '13'), +('7', '76', '1', '80639', '63501', '13'), +('7', '76', '1', '46931', '61473', '13'), +('7', '76', '2', '70895', '45117', '13'), +('7', '76', '2', '83562', '42196', '13'), +('7', '76', '2', '83542', '37613', '13'), +('7', '76', '2', '47210', '28583', '13'), +('7', '76', '3', '80636', '67372', '13'), +('7', '76', '3', '46924', '51189', '13'), +('7', '76', '3', '46902', '43694', '13'), +('7', '76', '3', '46852', '42682', '13'), +('7', '76', '5', '80669', '66044', '13'), +('7', '76', '5', '46918', '63590', '13'), +('7', '76', '5', '80616', '60877', '13'), +('7', '76', '5', '39349', '51955', '13'), +('7', '76', '8', '80687', '57437', '13'), +('7', '76', '8', '46885', '54096', '13'), +('7', '76', '8', '80649', '44421', '13'), +('7', '76', '8', '70977', '43921', '13'), +('7', '76', '6', '39367', '50337', '13'), +('7', '76', '6', '46884', '48135', '13'), +('7', '76', '6', '46933', '48087', '13'), +('7', '76', '6', '46858', '45762', '13'), +('7', '76', '17', '68978', '30282', '13'), +('7', '76', '17', '47650', '26127', '13'), +('7', '76', '17', '70900', '25103', '13'), +('7', '76', '17', '83605', '23792', '13'), +('7', '76', '7', '39357', '45055', '13'), +('7', '76', '7', '83566', '43202', '13'), +('7', '76', '7', '70896', '37828', '13'), +('7', '76', '7', '39220', '35926', '13'), +('7', '76', '9', '46888', '62715', '13'), +('7', '76', '9', '39346', '49327', '13'), +('7', '76', '9', '51708', '46635', '13'), +('7', '76', '9', '83654', '45961', '13'), +('7', '76', '15', '79909', '75107', '13'), +('7', '76', '15', '80686', '69957', '13'), +('7', '76', '15', '80657', '69529', '13'), +('7', '76', '15', '79908', '67744', '13'), +('7', '76', '20', '80688', '78094', '13'), +('7', '76', '20', '46935', '59708', '13'), +('7', '76', '20', '80620', '55462', '13'), +('7', '76', '20', '46870', '49336', '13'), +('7', '76', '12', '83570', '37992', '13'), +('7', '76', '12', '47214', '37571', '13'), +('7', '76', '12', '70898', '36591', '13'), +('7', '76', '12', '71085', '36516', '13'), +('7', '76', '18', '68979', '32302', '13'), +('7', '76', '18', '70901', '30306', '13'), +('7', '76', '18', '71098', '27905', '13'), +('7', '76', '18', '83609', '25389', '13'), +('7', '76', '19', '83574', '42428', '13'), +('7', '76', '19', '70899', '40214', '13'), +('7', '76', '19', '39279', '39652', '13'), +('7', '76', '19', '83504', '33263', '13'), +('7', '76', '13', '80684', '246007', '13'), +('7', '76', '13', '46878', '214462', '13'), +('7', '76', '13', '80643', '204979', '13'), +('7', '76', '13', '46829', '184630', '13'), +('7', '76', '14', '80684', '246007', '13'), +('7', '76', '14', '46878', '214462', '13'), +('7', '76', '14', '80643', '204979', '13'), +('7', '76', '14', '46829', '184630', '13'), +('7', '76', '11', '80668', '58625', '13'), +('7', '76', '11', '80630', '49118', '13'), +('7', '76', '11', '39311', '48146', '13'), +('7', '76', '11', '46850', '47374', '13'), +('7', '77', '22', '21805', '0', '13'), +('7', '77', '22', '61948', '0', '13'), +('7', '77', '22', '21807', '0', '13'), +('7', '77', '22', '12425', '0', '13'), +('7', '77', '1', '80676', '69391', '13'), +('7', '77', '1', '80648', '67206', '13'), +('7', '77', '1', '80639', '63503', '13'), +('7', '77', '1', '46931', '61476', '13'), +('7', '77', '2', '70895', '45119', '13'), +('7', '77', '2', '83562', '42199', '13'), +('7', '77', '2', '83542', '37613', '13'), +('7', '77', '2', '47210', '28584', '13'), +('7', '77', '3', '80636', '67372', '13'), +('7', '77', '3', '46924', '51192', '13'), +('7', '77', '3', '46902', '43696', '13'), +('7', '77', '3', '46852', '42683', '13'), +('7', '77', '5', '80669', '66047', '13'), +('7', '77', '5', '46918', '63593', '13'), +('7', '77', '5', '80616', '60877', '13'), +('7', '77', '5', '39349', '51957', '13'), +('7', '77', '8', '80687', '57439', '13'), +('7', '77', '8', '46885', '54098', '13'), +('7', '77', '8', '80649', '44423', '13'), +('7', '77', '8', '70977', '43923', '13'), +('7', '77', '6', '39367', '50339', '13'), +('7', '77', '6', '46884', '48138', '13'), +('7', '77', '6', '46933', '48088', '13'), +('7', '77', '6', '46858', '45764', '13'), +('7', '77', '17', '68978', '30284', '13'), +('7', '77', '17', '47650', '26129', '13'), +('7', '77', '17', '70900', '25104', '13'), +('7', '77', '17', '83605', '23793', '13'), +('7', '77', '7', '39357', '45057', '13'), +('7', '77', '7', '83566', '43204', '13'), +('7', '77', '7', '70896', '37832', '13'), +('7', '77', '7', '39220', '35928', '13'), +('7', '77', '9', '46888', '62718', '13'), +('7', '77', '9', '39346', '49330', '13'), +('7', '77', '9', '51708', '46637', '13'), +('7', '77', '9', '83654', '45963', '13'), +('7', '77', '15', '79909', '75109', '13'), +('7', '77', '15', '80686', '69960', '13'), +('7', '77', '15', '80657', '69529', '13'), +('7', '77', '15', '79908', '67746', '13'), +('7', '77', '20', '80688', '78097', '13'), +('7', '77', '20', '46935', '59711', '13'), +('7', '77', '20', '80620', '55464', '13'), +('7', '77', '20', '46870', '49338', '13'), +('7', '77', '12', '83570', '37994', '13'), +('7', '77', '12', '47214', '37571', '13'), +('7', '77', '12', '70898', '36593', '13'), +('7', '77', '12', '71085', '36517', '13'), +('7', '77', '18', '68979', '32303', '13'), +('7', '77', '18', '70901', '30307', '13'), +('7', '77', '18', '71098', '27907', '13'), +('7', '77', '18', '83609', '25391', '13'), +('7', '77', '19', '83574', '42430', '13'), +('7', '77', '19', '70899', '40214', '13'), +('7', '77', '19', '39279', '39653', '13'), +('7', '77', '19', '83504', '33265', '13'), +('7', '77', '13', '80684', '246349', '13'), +('7', '77', '13', '46878', '214894', '13'), +('7', '77', '13', '80643', '205252', '13'), +('7', '77', '13', '46829', '185061', '13'), +('7', '77', '14', '80684', '246349', '13'), +('7', '77', '14', '46878', '214894', '13'), +('7', '77', '14', '80643', '205252', '13'), +('7', '77', '14', '46829', '185061', '13'), +('7', '77', '11', '80668', '58628', '13'), +('7', '77', '11', '80630', '49120', '13'), +('7', '77', '11', '39311', '48148', '13'), +('7', '77', '11', '46850', '47376', '13'), +('7', '78', '22', '21805', '0', '13'), +('7', '78', '22', '61948', '0', '13'), +('7', '78', '22', '21807', '0', '13'), +('7', '78', '22', '12425', '0', '13'), +('7', '78', '1', '80676', '69391', '13'), +('7', '78', '1', '80648', '67208', '13'), +('7', '78', '1', '80639', '63506', '13'), +('7', '78', '1', '46931', '61479', '13'), +('7', '78', '2', '70895', '45121', '13'), +('7', '78', '2', '83562', '42201', '13'), +('7', '78', '2', '83542', '37613', '13'), +('7', '78', '2', '47210', '28585', '13'), +('7', '78', '3', '80636', '67372', '13'), +('7', '78', '3', '46924', '51195', '13'), +('7', '78', '3', '46902', '43698', '13'), +('7', '78', '3', '46852', '42685', '13'), +('7', '78', '5', '80669', '66049', '13'), +('7', '78', '5', '46918', '63595', '13'), +('7', '78', '5', '80616', '60877', '13'), +('7', '78', '5', '39349', '51959', '13'), +('7', '78', '8', '80687', '57442', '13'), +('7', '78', '8', '46885', '54101', '13'), +('7', '78', '8', '80649', '44425', '13'), +('7', '78', '8', '70977', '43925', '13'), +('7', '78', '6', '39367', '50341', '13'), +('7', '78', '6', '46884', '48140', '13'), +('7', '78', '6', '46933', '48090', '13'), +('7', '78', '6', '46858', '45766', '13'), +('7', '78', '17', '68978', '30286', '13'), +('7', '78', '17', '47650', '26131', '13'), +('7', '78', '17', '70900', '25106', '13'), +('7', '78', '17', '83605', '23794', '13'), +('7', '78', '7', '39357', '45059', '13'), +('7', '78', '7', '83566', '43207', '13'), +('7', '78', '7', '70896', '37835', '13'), +('7', '78', '7', '39220', '35930', '13'), +('7', '78', '9', '46888', '62721', '13'), +('7', '78', '9', '39346', '49333', '13'), +('7', '78', '9', '51708', '46639', '13'), +('7', '78', '9', '83654', '45965', '13'), +('7', '78', '15', '79909', '75112', '13'), +('7', '78', '15', '80686', '69963', '13'), +('7', '78', '15', '80657', '69529', '13'), +('7', '78', '15', '79908', '67748', '13'), +('7', '78', '20', '80688', '78099', '13'), +('7', '78', '20', '46935', '59714', '13'), +('7', '78', '20', '80620', '55466', '13'), +('7', '78', '20', '46870', '49340', '13'), +('7', '78', '12', '83570', '37996', '13'), +('7', '78', '12', '47214', '37571', '13'), +('7', '78', '12', '70898', '36595', '13'), +('7', '78', '12', '71085', '36519', '13'), +('7', '78', '18', '68979', '32305', '13'), +('7', '78', '18', '70901', '30309', '13'), +('7', '78', '18', '71098', '27908', '13'), +('7', '78', '18', '83609', '25392', '13'), +('7', '78', '19', '83574', '42433', '13'), +('7', '78', '19', '70899', '40214', '13'), +('7', '78', '19', '39279', '39655', '13'), +('7', '78', '19', '83504', '33266', '13'), +('7', '78', '13', '80684', '246691', '13'), +('7', '78', '13', '46878', '215366', '13'), +('7', '78', '13', '80643', '205564', '13'), +('7', '78', '13', '83580', '185470', '13'), +('7', '78', '14', '80684', '246691', '13'), +('7', '78', '14', '46878', '215366', '13'), +('7', '78', '14', '80643', '205564', '13'), +('7', '78', '14', '83580', '185470', '13'), +('7', '78', '11', '80668', '58630', '13'), +('7', '78', '11', '80630', '49122', '13'), +('7', '78', '11', '39311', '48150', '13'), +('7', '78', '11', '46850', '47378', '13'), +('7', '79', '22', '21805', '0', '13'), +('7', '79', '22', '61948', '0', '13'), +('7', '79', '22', '21807', '0', '13'), +('7', '79', '22', '12425', '0', '13'), +('7', '79', '1', '80676', '69391', '13'), +('7', '79', '1', '80648', '67211', '13'), +('7', '79', '1', '80639', '63509', '13'), +('7', '79', '1', '46931', '61482', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '79', '2', '70895', '45123', '13'), +('7', '79', '2', '83562', '42203', '13'), +('7', '79', '2', '83542', '37613', '13'), +('7', '79', '2', '47210', '28586', '13'), +('7', '79', '3', '80636', '67372', '13'), +('7', '79', '3', '46924', '51197', '13'), +('7', '79', '3', '46902', '43701', '13'), +('7', '79', '3', '46852', '42687', '13'), +('7', '79', '5', '80669', '66052', '13'), +('7', '79', '5', '46918', '63598', '13'), +('7', '79', '5', '80616', '60877', '13'), +('7', '79', '5', '39349', '51961', '13'), +('7', '79', '8', '80687', '57444', '13'), +('7', '79', '8', '46885', '54103', '13'), +('7', '79', '8', '80649', '44427', '13'), +('7', '79', '8', '70977', '43927', '13'), +('7', '79', '6', '39367', '50344', '13'), +('7', '79', '6', '46884', '48143', '13'), +('7', '79', '6', '46933', '48092', '13'), +('7', '79', '6', '46858', '45768', '13'), +('7', '79', '17', '68978', '30288', '13'), +('7', '79', '17', '47650', '26133', '13'), +('7', '79', '17', '70900', '25107', '13'), +('7', '79', '17', '83605', '23795', '13'), +('7', '79', '7', '39357', '45061', '13'), +('7', '79', '7', '83566', '43209', '13'), +('7', '79', '7', '70896', '37838', '13'), +('7', '79', '7', '39220', '35931', '13'), +('7', '79', '9', '46888', '62724', '13'), +('7', '79', '9', '39346', '49335', '13'), +('7', '79', '9', '51708', '46641', '13'), +('7', '79', '9', '83654', '45967', '13'), +('7', '79', '15', '79909', '75114', '13'), +('7', '79', '15', '80686', '69966', '13'), +('7', '79', '15', '80657', '69529', '13'), +('7', '79', '15', '79908', '67751', '13'), +('7', '79', '20', '80688', '78102', '13'), +('7', '79', '20', '46935', '59717', '13'), +('7', '79', '20', '80620', '55468', '13'), +('7', '79', '20', '46870', '49342', '13'), +('7', '79', '12', '83570', '37999', '13'), +('7', '79', '12', '47214', '37571', '13'), +('7', '79', '12', '70898', '36598', '13'), +('7', '79', '12', '71085', '36521', '13'), +('7', '79', '18', '68979', '32306', '13'), +('7', '79', '18', '70901', '30311', '13'), +('7', '79', '18', '71098', '27910', '13'), +('7', '79', '18', '83609', '25394', '13'), +('7', '79', '19', '83574', '42435', '13'), +('7', '79', '19', '70899', '40214', '13'), +('7', '79', '19', '39279', '39656', '13'), +('7', '79', '19', '83504', '33268', '13'), +('7', '79', '13', '80684', '247033', '13'), +('7', '79', '13', '46878', '215798', '13'), +('7', '79', '13', '80643', '205836', '13'), +('7', '79', '13', '83580', '185896', '13'), +('7', '79', '14', '80684', '247033', '13'), +('7', '79', '14', '46878', '215798', '13'), +('7', '79', '14', '80643', '205836', '13'), +('7', '79', '14', '83580', '185896', '13'), +('7', '79', '11', '80668', '58633', '13'), +('7', '79', '11', '80630', '49123', '13'), +('7', '79', '11', '39311', '48152', '13'), +('7', '79', '11', '46850', '47379', '13'), +('7', '80', '22', '21805', '0', '14'), +('7', '80', '22', '61948', '0', '14'), +('7', '80', '22', '21807', '0', '14'), +('7', '80', '22', '12425', '0', '14'), +('7', '80', '1', '102590', '95130', '14'), +('7', '80', '1', '102641', '95128', '14'), +('7', '80', '1', '102639', '93850', '14'), +('7', '80', '1', '102642', '93618', '14'), +('7', '80', '2', '102017', '57152', '14'), +('7', '80', '2', '102269', '51373', '14'), +('7', '80', '2', '70895', '45125', '14'), +('7', '80', '2', '83562', '42205', '14'), +('7', '80', '3', '102726', '104399', '14'), +('7', '80', '3', '102591', '101242', '14'), +('7', '80', '3', '102725', '90515', '14'), +('7', '80', '3', '102724', '76707', '14'), +('7', '80', '5', '102745', '91513', '14'), +('7', '80', '5', '102592', '83780', '14'), +('7', '80', '5', '102551', '82497', '14'), +('7', '80', '5', '102743', '68850', '14'), +('7', '80', '8', '102594', '74106', '14'), +('7', '80', '8', '102552', '64882', '14'), +('7', '80', '8', '80687', '57446', '14'), +('7', '80', '8', '46885', '54105', '14'), +('7', '80', '6', '102555', '68071', '14'), +('7', '80', '6', '102593', '64013', '14'), +('7', '80', '6', '39367', '50346', '14'), +('7', '80', '6', '46884', '48145', '14'), +('7', '80', '17', '102020', '33843', '14'), +('7', '80', '17', '102272', '30868', '14'), +('7', '80', '17', '68978', '30290', '14'), +('7', '80', '17', '47650', '26135', '14'), +('7', '80', '7', '102018', '50720', '14'), +('7', '80', '7', '102270', '50256', '14'), +('7', '80', '7', '39357', '45063', '14'), +('7', '80', '7', '83566', '43211', '14'), +('7', '80', '9', '46888', '62727', '14'), +('7', '80', '9', '102289', '52550', '14'), +('7', '80', '9', '39346', '49338', '14'), +('7', '80', '9', '67098', '47095', '14'), +('7', '80', '15', '102595', '97781', '14'), +('7', '80', '15', '102636', '96471', '14'), +('7', '80', '15', '102637', '96004', '14'), +('7', '80', '15', '102635', '95187', '14'), +('7', '80', '20', '102596', '96180', '14'), +('7', '80', '20', '102553', '87873', '14'), +('7', '80', '20', '80688', '78105', '14'), +('7', '80', '20', '46935', '59720', '14'), +('7', '80', '12', '102267', '55835', '14'), +('7', '80', '12', '83570', '38001', '14'), +('7', '80', '12', '47214', '37571', '14'), +('7', '80', '12', '70898', '36600', '14'), +('7', '80', '18', '102271', '47061', '14'), +('7', '80', '18', '102019', '42703', '14'), +('7', '80', '18', '68979', '32307', '14'), +('7', '80', '18', '70901', '30312', '14'), +('7', '80', '19', '102268', '49519', '14'), +('7', '80', '19', '83574', '42437', '14'), +('7', '80', '19', '76131', '41335', '14'), +('7', '80', '19', '70899', '40214', '14'), +('7', '80', '13', '102665', '325398', '14'), +('7', '80', '13', '102588', '270540', '14'), +('7', '80', '13', '102666', '268310', '14'), +('7', '80', '13', '80684', '247375', '14'), +('7', '80', '14', '102665', '325398', '14'), +('7', '80', '14', '102588', '270540', '14'), +('7', '80', '14', '102666', '268310', '14'), +('7', '80', '14', '80684', '247375', '14'), +('7', '80', '11', '102643', '74573', '14'), +('7', '80', '11', '102747', '72543', '14'), +('7', '80', '11', '80668', '58635', '14'), +('7', '80', '11', '102747', '54840', '14'), +('7', '81', '22', '21805', '0', '14'), +('7', '81', '22', '61948', '0', '14'), +('7', '81', '22', '21807', '0', '14'), +('7', '81', '22', '12425', '0', '14'), +('7', '81', '1', '102590', '95133', '14'), +('7', '81', '1', '102641', '95129', '14'), +('7', '81', '1', '102639', '93854', '14'), +('7', '81', '1', '102642', '93618', '14'), +('7', '81', '2', '102017', '57155', '14'), +('7', '81', '2', '102269', '51375', '14'), +('7', '81', '2', '70895', '45127', '14'), +('7', '81', '2', '83562', '42208', '14'), +('7', '81', '3', '102726', '104402', '14'), +('7', '81', '3', '102591', '101244', '14'), +('7', '81', '3', '102725', '90517', '14'), +('7', '81', '3', '102724', '76708', '14'), +('7', '81', '5', '102745', '91516', '14'), +('7', '81', '5', '102592', '83782', '14'), +('7', '81', '5', '102551', '82498', '14'), +('7', '81', '5', '102743', '68852', '14'), +('7', '81', '8', '102594', '74107', '14'), +('7', '81', '8', '102552', '64884', '14'), +('7', '81', '8', '80687', '57448', '14'), +('7', '81', '8', '46885', '54107', '14'), +('7', '81', '6', '102555', '68073', '14'), +('7', '81', '6', '102593', '64015', '14'), +('7', '81', '6', '39367', '50348', '14'), +('7', '81', '6', '46884', '48148', '14'), +('7', '81', '17', '102020', '33843', '14'), +('7', '81', '17', '102272', '30869', '14'), +('7', '81', '17', '68978', '30292', '14'), +('7', '81', '17', '47650', '26137', '14'), +('7', '81', '7', '102018', '50723', '14'), +('7', '81', '7', '102270', '50258', '14'), +('7', '81', '7', '39357', '45064', '14'), +('7', '81', '7', '83566', '43214', '14'), +('7', '81', '9', '46888', '62730', '14'), +('7', '81', '9', '102289', '52552', '14'), +('7', '81', '9', '39346', '49341', '14'), +('7', '81', '9', '67098', '47684', '14'), +('7', '81', '15', '102595', '97783', '14'), +('7', '81', '15', '102636', '96473', '14'), +('7', '81', '15', '102637', '96008', '14'), +('7', '81', '15', '102635', '95188', '14'), +('7', '81', '20', '102596', '96181', '14'), +('7', '81', '20', '102553', '87876', '14'), +('7', '81', '20', '80688', '78108', '14'), +('7', '81', '20', '46935', '59723', '14'), +('7', '81', '12', '102267', '55837', '14'), +('7', '81', '12', '83570', '38003', '14'), +('7', '81', '12', '47214', '37571', '14'), +('7', '81', '12', '70898', '36602', '14'), +('7', '81', '18', '102271', '47063', '14'), +('7', '81', '18', '102019', '42704', '14'), +('7', '81', '18', '68979', '32308', '14'), +('7', '81', '18', '70901', '30314', '14'), +('7', '81', '19', '102268', '49520', '14'), +('7', '81', '19', '83574', '42440', '14'), +('7', '81', '19', '76131', '41335', '14'), +('7', '81', '19', '70899', '40214', '14'), +('7', '81', '13', '102665', '326011', '14'), +('7', '81', '13', '102588', '271037', '14'), +('7', '81', '13', '102666', '268649', '14'), +('7', '81', '13', '80684', '247717', '14'), +('7', '81', '14', '102665', '326011', '14'), +('7', '81', '14', '102588', '271037', '14'), +('7', '81', '14', '102666', '268649', '14'), +('7', '81', '14', '80684', '247717', '14'), +('7', '81', '11', '102643', '74574', '14'), +('7', '81', '11', '102747', '72545', '14'), +('7', '81', '11', '80668', '58637', '14'), +('7', '81', '11', '102747', '54840', '14'), +('7', '82', '22', '21805', '0', '14'), +('7', '82', '22', '61948', '0', '14'), +('7', '82', '22', '21807', '0', '14'), +('7', '82', '22', '12425', '0', '14'), +('7', '82', '1', '102590', '95137', '14'), +('7', '82', '1', '102641', '95132', '14'), +('7', '82', '1', '102639', '93857', '14'), +('7', '82', '1', '102642', '93619', '14'), +('7', '82', '2', '102017', '57157', '14'), +('7', '82', '2', '102269', '51377', '14'), +('7', '82', '2', '70895', '45130', '14'), +('7', '82', '2', '83562', '42210', '14'), +('7', '82', '3', '102726', '104405', '14'), +('7', '82', '3', '102591', '101247', '14'), +('7', '82', '3', '102725', '90520', '14'), +('7', '82', '3', '102724', '76710', '14'), +('7', '82', '5', '102745', '91519', '14'), +('7', '82', '5', '102592', '83784', '14'), +('7', '82', '5', '102551', '82499', '14'), +('7', '82', '5', '102743', '68855', '14'), +('7', '82', '8', '102594', '74107', '14'), +('7', '82', '8', '102552', '64885', '14'), +('7', '82', '8', '80687', '57451', '14'), +('7', '82', '8', '46885', '54110', '14'), +('7', '82', '6', '102555', '68075', '14'), +('7', '82', '6', '102593', '64018', '14'), +('7', '82', '6', '39367', '50351', '14'), +('7', '82', '6', '46884', '48151', '14'), +('7', '82', '17', '102020', '33844', '14'), +('7', '82', '17', '102272', '30870', '14'), +('7', '82', '17', '68978', '30294', '14'), +('7', '82', '17', '47650', '26139', '14'), +('7', '82', '7', '102018', '50726', '14'), +('7', '82', '7', '102270', '50260', '14'), +('7', '82', '7', '39357', '45067', '14'), +('7', '82', '7', '83566', '43216', '14'), +('7', '82', '9', '46888', '62734', '14'), +('7', '82', '9', '102289', '52555', '14'), +('7', '82', '9', '39346', '49344', '14'), +('7', '82', '9', '67098', '48273', '14'), +('7', '82', '15', '102595', '97786', '14'), +('7', '82', '15', '102636', '96476', '14'), +('7', '82', '15', '102637', '96011', '14'), +('7', '82', '15', '102635', '95190', '14'), +('7', '82', '20', '102596', '96183', '14'), +('7', '82', '20', '102553', '87880', '14'), +('7', '82', '20', '80688', '78111', '14'), +('7', '82', '20', '46935', '59726', '14'), +('7', '82', '12', '102267', '55838', '14'), +('7', '82', '12', '83570', '38006', '14'), +('7', '82', '12', '47214', '37571', '14'), +('7', '82', '12', '70898', '36605', '14'), +('7', '82', '18', '102271', '47065', '14'), +('7', '82', '18', '102019', '42705', '14'), +('7', '82', '18', '68979', '32310', '14'), +('7', '82', '18', '70901', '30316', '14'), +('7', '82', '19', '102268', '49522', '14'), +('7', '82', '19', '83574', '42442', '14'), +('7', '82', '19', '76131', '41335', '14'), +('7', '82', '19', '70899', '40214', '14'), +('7', '82', '13', '102665', '326582', '14'), +('7', '82', '13', '102588', '271535', '14'), +('7', '82', '13', '102666', '269025', '14'), +('7', '82', '13', '80684', '248059', '14'), +('7', '82', '14', '102665', '326582', '14'), +('7', '82', '14', '102588', '271535', '14'), +('7', '82', '14', '102666', '269025', '14'), +('7', '82', '14', '80684', '248059', '14'), +('7', '82', '11', '102643', '74575', '14'), +('7', '82', '11', '102747', '72546', '14'), +('7', '82', '11', '80668', '58640', '14'), +('7', '82', '11', '102747', '54841', '14'), +('7', '83', '22', '21805', '0', '14'), +('7', '83', '22', '61948', '0', '14'), +('7', '83', '22', '21807', '0', '14'), +('7', '83', '22', '12425', '0', '14'), +('7', '83', '1', '102590', '95140', '14'), +('7', '83', '1', '102641', '95134', '14'), +('7', '83', '1', '102639', '93861', '14'), +('7', '83', '1', '102642', '93620', '14'), +('7', '83', '2', '102017', '57160', '14'), +('7', '83', '2', '102269', '51379', '14'), +('7', '83', '2', '70895', '45132', '14'), +('7', '83', '2', '83562', '42213', '14'), +('7', '83', '3', '102726', '104409', '14'), +('7', '83', '3', '102591', '101249', '14'), +('7', '83', '3', '102725', '90523', '14'), +('7', '83', '3', '102724', '76712', '14'), +('7', '83', '5', '102745', '91522', '14'), +('7', '83', '5', '102592', '83786', '14'), +('7', '83', '5', '102551', '82500', '14'), +('7', '83', '5', '102743', '68857', '14'), +('7', '83', '8', '102594', '74108', '14'), +('7', '83', '8', '102552', '64887', '14'), +('7', '83', '8', '80687', '57453', '14'), +('7', '83', '8', '46885', '54112', '14'), +('7', '83', '6', '102555', '68077', '14'), +('7', '83', '6', '102593', '64020', '14'), +('7', '83', '6', '39367', '50353', '14'), +('7', '83', '6', '46884', '48153', '14'), +('7', '83', '17', '102020', '33844', '14'), +('7', '83', '17', '102272', '30871', '14'), +('7', '83', '17', '68978', '30296', '14'), +('7', '83', '17', '47650', '26141', '14'), +('7', '83', '7', '102018', '50729', '14'), +('7', '83', '7', '102270', '50262', '14'), +('7', '83', '7', '39357', '45068', '14'), +('7', '83', '7', '83566', '43218', '14'), +('7', '83', '9', '46888', '62737', '14'), +('7', '83', '9', '102289', '52557', '14'), +('7', '83', '9', '39346', '49347', '14'), +('7', '83', '9', '67098', '48863', '14'), +('7', '83', '15', '102595', '97789', '14'), +('7', '83', '15', '102636', '96478', '14'), +('7', '83', '15', '102637', '96014', '14'), +('7', '83', '15', '102635', '95191', '14'), +('7', '83', '20', '102596', '96184', '14'), +('7', '83', '20', '102553', '87883', '14'), +('7', '83', '20', '80688', '78113', '14'), +('7', '83', '20', '46935', '59729', '14'), +('7', '83', '12', '102267', '55840', '14'), +('7', '83', '12', '83570', '38008', '14'), +('7', '83', '12', '47214', '37571', '14'), +('7', '83', '12', '70898', '36607', '14'), +('7', '83', '18', '102271', '47068', '14'), +('7', '83', '18', '102019', '42705', '14'), +('7', '83', '18', '68979', '32311', '14'), +('7', '83', '18', '70901', '30317', '14'), +('7', '83', '19', '102268', '49523', '14'), +('7', '83', '19', '83574', '42445', '14'), +('7', '83', '19', '76131', '41335', '14'), +('7', '83', '19', '70899', '40214', '14'), +('7', '83', '13', '102665', '327152', '14'), +('7', '83', '13', '102588', '271993', '14'), +('7', '83', '13', '102666', '269364', '14'), +('7', '83', '13', '80684', '248444', '14'), +('7', '83', '14', '102665', '327152', '14'), +('7', '83', '14', '102588', '271993', '14'), +('7', '83', '14', '102666', '269364', '14'), +('7', '83', '14', '80684', '248444', '14'), +('7', '83', '11', '102643', '74575', '14'), +('7', '83', '11', '102747', '72548', '14'), +('7', '83', '11', '80668', '58643', '14'), +('7', '83', '11', '102747', '54842', '14'), +('7', '84', '22', '21805', '0', '14'), +('7', '84', '22', '61948', '0', '14'), +('7', '84', '22', '21807', '0', '14'), +('7', '84', '22', '12425', '0', '14'), +('7', '84', '1', '102590', '95143', '14'), +('7', '84', '1', '102641', '95135', '14'), +('7', '84', '1', '102639', '93864', '14'), +('7', '84', '1', '102642', '93621', '14'), +('7', '84', '2', '102017', '57162', '14'), +('7', '84', '2', '102269', '51380', '14'), +('7', '84', '2', '70895', '45134', '14'), +('7', '84', '2', '83562', '42215', '14'), +('7', '84', '3', '102726', '104412', '14'), +('7', '84', '3', '102591', '101251', '14'), +('7', '84', '3', '102725', '90525', '14'), +('7', '84', '3', '102724', '76713', '14'), +('7', '84', '5', '102745', '91525', '14'), +('7', '84', '5', '102592', '83788', '14'), +('7', '84', '5', '102551', '82501', '14'), +('7', '84', '5', '102743', '68859', '14'), +('7', '84', '8', '102594', '74109', '14'), +('7', '84', '8', '102552', '64889', '14'), +('7', '84', '8', '80687', '57455', '14'), +('7', '84', '8', '46885', '54114', '14'), +('7', '84', '6', '102555', '68079', '14'), +('7', '84', '6', '102593', '64023', '14'), +('7', '84', '6', '39367', '50355', '14'), +('7', '84', '6', '46884', '48155', '14'), +('7', '84', '17', '102020', '33845', '14'), +('7', '84', '17', '102272', '30872', '14'), +('7', '84', '17', '68978', '30298', '14'), +('7', '84', '17', '47650', '26143', '14'), +('7', '84', '7', '102018', '50731', '14'), +('7', '84', '7', '102270', '50263', '14'), +('7', '84', '7', '39357', '45070', '14'), +('7', '84', '7', '83566', '43221', '14'), +('7', '84', '9', '46888', '62740', '14'), +('7', '84', '9', '102289', '52558', '14'), +('7', '84', '9', '67098', '49452', '14'), +('7', '84', '9', '39346', '49350', '14'), +('7', '84', '15', '102595', '97791', '14'), +('7', '84', '15', '102636', '96480', '14'), +('7', '84', '15', '102637', '96018', '14'), +('7', '84', '15', '102635', '95193', '14'), +('7', '84', '20', '102596', '96186', '14'), +('7', '84', '20', '102553', '87886', '14'), +('7', '84', '20', '80688', '78116', '14'), +('7', '84', '20', '46935', '59732', '14'), +('7', '84', '12', '102267', '55841', '14'), +('7', '84', '12', '83570', '38010', '14'), +('7', '84', '12', '47214', '37571', '14'), +('7', '84', '12', '70898', '36610', '14'), +('7', '84', '18', '102271', '47070', '14'), +('7', '84', '18', '102019', '42706', '14'), +('7', '84', '18', '68979', '32312', '14'), +('7', '84', '18', '70901', '30319', '14'), +('7', '84', '19', '102268', '49525', '14'), +('7', '84', '19', '83574', '42447', '14'), +('7', '84', '19', '76131', '41335', '14'), +('7', '84', '19', '70899', '40214', '14'), +('7', '84', '13', '102665', '327766', '14'), +('7', '84', '13', '102588', '272490', '14'), +('7', '84', '13', '102666', '269739', '14'), +('7', '84', '13', '80684', '248786', '14'), +('7', '84', '14', '102665', '327766', '14'), +('7', '84', '14', '102588', '272490', '14'), +('7', '84', '14', '102666', '269739', '14'), +('7', '84', '14', '80684', '248786', '14'), +('7', '84', '11', '102643', '74576', '14'), +('7', '84', '11', '102747', '72550', '14'), +('7', '84', '11', '80668', '58645', '14'), +('7', '84', '11', '102747', '54842', '14'), +('7', '85', '22', '12425', '0', '16'), +('7', '85', '22', '21807', '0', '16'), +('7', '85', '22', '21805', '0', '16'), +('7', '85', '22', '39342', '0', '16'), +('7', '85', '1', '111303', '181775', '16'), +('7', '85', '1', '111308', '181631', '16'), +('7', '85', '1', '111300', '180662', '16'), +('7', '85', '1', '111302', '180069', '16'), +('7', '85', '2', '104417', '94867', '16'), +('7', '85', '2', '94056', '77481', '16'), +('7', '85', '2', '49656', '72011', '16'), +('7', '85', '2', '62985', '59172', '16'), +('7', '85', '3', '111316', '177812', '16'), +('7', '85', '3', '111313', '170411', '16'), +('7', '85', '3', '111012', '158821', '16'), +('7', '85', '3', '111015', '155997', '16'), +('7', '85', '5', '111318', '169975', '16'), +('7', '85', '5', '111321', '169492', '16'), +('7', '85', '5', '111017', '158386', '16'), +('7', '85', '5', '111319', '148882', '16'), +('7', '85', '8', '111331', '166828', '16'), +('7', '85', '8', '111332', '149930', '16'), +('7', '85', '8', '111031', '137019', '16'), +('7', '85', '8', '111030', '130063', '16'), +('7', '85', '6', '111322', '152268', '16'), +('7', '85', '6', '111326', '149030', '16'), +('7', '85', '6', '111021', '133897', '16'), +('7', '85', '6', '111024', '133443', '16'), +('7', '85', '17', '49656', '72011', '16'), +('7', '85', '17', '56084', '55111', '16'), +('7', '85', '17', '56045', '53694', '16'), +('7', '85', '17', '104420', '49127', '16'), +('7', '85', '7', '56040', '95808', '16'), +('7', '85', '7', '56079', '89124', '16'), +('7', '85', '7', '104418', '84178', '16'), +('7', '85', '7', '49656', '72011', '16'), +('7', '85', '9', '62992', '111542', '16'), +('7', '85', '9', '104414', '91539', '16'), +('7', '85', '9', '49656', '72011', '16'), +('7', '85', '9', '54836', '71017', '16'), +('7', '85', '15', '111343', '182361', '16'), +('7', '85', '15', '111347', '181373', '16'), +('7', '85', '15', '111339', '178637', '16'), +('7', '85', '15', '111346', '178542', '16'), +('7', '85', '20', '111354', '188769', '16'), +('7', '85', '20', '111351', '183955', '16'), +('7', '85', '20', '111352', '182512', '16'), +('7', '85', '20', '111050', '162748', '16'), +('7', '85', '12', '56074', '104458', '16'), +('7', '85', '12', '104415', '93543', '16'), +('7', '85', '12', '81795', '83049', '16'), +('7', '85', '12', '49656', '72011', '16'), +('7', '85', '18', '62986', '82539', '16'), +('7', '85', '18', '49656', '72011', '16'), +('7', '85', '18', '104419', '67146', '16'), +('7', '85', '18', '54851', '53926', '16'), +('7', '85', '19', '62990', '102768', '16'), +('7', '85', '19', '104416', '86727', '16'), +('7', '85', '19', '49656', '72011', '16'), +('7', '85', '19', '102268', '49526', '16'), +('7', '85', '13', '111527', '504052', '16'), +('7', '85', '13', '111528', '460347', '16'), +('7', '85', '13', '111227', '440151', '16'), +('7', '85', '13', '111228', '423349', '16'), +('7', '85', '14', '111527', '504052', '16'), +('7', '85', '14', '111528', '460347', '16'), +('7', '85', '14', '111227', '440151', '16'), +('7', '85', '14', '111228', '423349', '16'), +('7', '85', '11', '111337', '143312', '16'), +('7', '85', '11', '111034', '131949', '16'), +('7', '85', '11', '111036', '131132', '16'), +('7', '85', '11', '111032', '122249', '16'), +('7', '85', '22', '21807', '0', '15'), +('7', '85', '22', '21805', '0', '15'), +('7', '85', '22', '61948', '0', '15'), +('7', '85', '22', '12425', '0', '15'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '85', '1', '107054', '135666', '15'), +('7', '85', '1', '107010', '133284', '15'), +('7', '85', '1', '107053', '132185', '15'), +('7', '85', '1', '107052', '129516', '15'), +('7', '85', '2', '104417', '94867', '15'), +('7', '85', '2', '94056', '77481', '15'), +('7', '85', '2', '62985', '59172', '15'), +('7', '85', '2', '102017', '57164', '15'), +('7', '85', '3', '107011', '136216', '15'), +('7', '85', '3', '106801', '120336', '15'), +('7', '85', '3', '106841', '114613', '15'), +('7', '85', '3', '107055', '109432', '15'), +('7', '85', '5', '107056', '129781', '15'), +('7', '85', '5', '107012', '125796', '15'), +('7', '85', '5', '62956', '112572', '15'), +('7', '85', '5', '106802', '111534', '15'), +('7', '85', '8', '106804', '115984', '15'), +('7', '85', '8', '106716', '108405', '15'), +('7', '85', '8', '107058', '106133', '15'), +('7', '85', '8', '106844', '102749', '15'), +('7', '85', '6', '107013', '113605', '15'), +('7', '85', '6', '107057', '108821', '15'), +('7', '85', '6', '106803', '104441', '15'), +('7', '85', '6', '56095', '88615', '15'), +('7', '85', '17', '56084', '55111', '15'), +('7', '85', '17', '56045', '53694', '15'), +('7', '85', '17', '104420', '49127', '15'), +('7', '85', '17', '102020', '33845', '15'), +('7', '85', '7', '56040', '95808', '15'), +('7', '85', '7', '56079', '89124', '15'), +('7', '85', '7', '104418', '84178', '15'), +('7', '85', '7', '54848', '55077', '15'), +('7', '85', '9', '62992', '111542', '15'), +('7', '85', '9', '104414', '91539', '15'), +('7', '85', '9', '54836', '71017', '15'), +('7', '85', '9', '46888', '62743', '15'), +('7', '85', '15', '107062', '133741', '15'), +('7', '85', '15', '107051', '132269', '15'), +('7', '85', '15', '107016', '131747', '15'), +('7', '85', '15', '107050', '129990', '15'), +('7', '85', '20', '107059', '127753', '15'), +('7', '85', '20', '107017', '125336', '15'), +('7', '85', '20', '62995', '122144', '15'), +('7', '85', '20', '106845', '114205', '15'), +('7', '85', '12', '56074', '104458', '15'), +('7', '85', '12', '104415', '93543', '15'), +('7', '85', '12', '81795', '83049', '15'), +('7', '85', '12', '102267', '55843', '15'), +('7', '85', '18', '62986', '82539', '15'), +('7', '85', '18', '104419', '67146', '15'), +('7', '85', '18', '54851', '53926', '15'), +('7', '85', '18', '102271', '47072', '15'), +('7', '85', '19', '62990', '102768', '15'), +('7', '85', '19', '104416', '86727', '15'), +('7', '85', '19', '102268', '49526', '15'), +('7', '85', '19', '83574', '42449', '15'), +('7', '85', '13', '106867', '387056', '15'), +('7', '85', '13', '106868', '377872', '15'), +('7', '85', '13', '102665', '328336', '15'), +('7', '85', '13', '106767', '324963', '15'), +('7', '85', '14', '106867', '387056', '15'), +('7', '85', '14', '106868', '377872', '15'), +('7', '85', '14', '102665', '328336', '15'), +('7', '85', '14', '106767', '324963', '15'), +('7', '85', '11', '62965', '102382', '15'), +('7', '85', '11', '106717', '99554', '15'), +('7', '85', '11', '56099', '94345', '15'), +('7', '85', '11', '107015', '88330', '15'), +('7', '86', '22', '12425', '0', '16'), +('7', '86', '22', '21807', '0', '16'), +('7', '86', '22', '21805', '0', '16'), +('7', '86', '22', '39342', '0', '16'), +('7', '86', '1', '111303', '181779', '16'), +('7', '86', '1', '111308', '181634', '16'), +('7', '86', '1', '111300', '180664', '16'), +('7', '86', '1', '111302', '180072', '16'), +('7', '86', '2', '104417', '94870', '16'), +('7', '86', '2', '94056', '77483', '16'), +('7', '86', '2', '49656', '72012', '16'), +('7', '86', '2', '62985', '59173', '16'), +('7', '86', '3', '111316', '177815', '16'), +('7', '86', '3', '111313', '170413', '16'), +('7', '86', '3', '111012', '158823', '16'), +('7', '86', '3', '111015', '156000', '16'), +('7', '86', '5', '111318', '169977', '16'), +('7', '86', '5', '111321', '169494', '16'), +('7', '86', '5', '111017', '158389', '16'), +('7', '86', '5', '111319', '148885', '16'), +('7', '86', '8', '111331', '166831', '16'), +('7', '86', '8', '111332', '149932', '16'), +('7', '86', '8', '111031', '137021', '16'), +('7', '86', '8', '111030', '130066', '16'), +('7', '86', '6', '111322', '152270', '16'), +('7', '86', '6', '111326', '149032', '16'), +('7', '86', '6', '111021', '133899', '16'), +('7', '86', '6', '111024', '133445', '16'), +('7', '86', '17', '49656', '72012', '16'), +('7', '86', '17', '56084', '55113', '16'), +('7', '86', '17', '56045', '53695', '16'), +('7', '86', '17', '104420', '49129', '16'), +('7', '86', '7', '56040', '95811', '16'), +('7', '86', '7', '56079', '89127', '16'), +('7', '86', '7', '104418', '84179', '16'), +('7', '86', '7', '49656', '72012', '16'), +('7', '86', '9', '62992', '111544', '16'), +('7', '86', '9', '104414', '91542', '16'), +('7', '86', '9', '49656', '72012', '16'), +('7', '86', '9', '54836', '71019', '16'), +('7', '86', '15', '111343', '182363', '16'), +('7', '86', '15', '111347', '181377', '16'), +('7', '86', '15', '111339', '178639', '16'), +('7', '86', '15', '111346', '178545', '16'), +('7', '86', '20', '111354', '188771', '16'), +('7', '86', '20', '111351', '183957', '16'), +('7', '86', '20', '111352', '182515', '16'), +('7', '86', '20', '111050', '162750', '16'), +('7', '86', '12', '56074', '104459', '16'), +('7', '86', '12', '104415', '93546', '16'), +('7', '86', '12', '81795', '83051', '16'), +('7', '86', '12', '49656', '72012', '16'), +('7', '86', '18', '62986', '82542', '16'), +('7', '86', '18', '49656', '72012', '16'), +('7', '86', '18', '104419', '67148', '16'), +('7', '86', '18', '54851', '53928', '16'), +('7', '86', '19', '62990', '102771', '16'), +('7', '86', '19', '104416', '86728', '16'), +('7', '86', '19', '49656', '72012', '16'), +('7', '86', '19', '102268', '49528', '16'), +('7', '86', '13', '111527', '504947', '16'), +('7', '86', '13', '111528', '460887', '16'), +('7', '86', '13', '111227', '440955', '16'), +('7', '86', '13', '111228', '423848', '16'), +('7', '86', '14', '111527', '504947', '16'), +('7', '86', '14', '111528', '460887', '16'), +('7', '86', '14', '111227', '440955', '16'), +('7', '86', '14', '111228', '423848', '16'), +('7', '86', '11', '111337', '143314', '16'), +('7', '86', '11', '111034', '131951', '16'), +('7', '86', '11', '111036', '131134', '16'), +('7', '86', '11', '111032', '122251', '16'), +('7', '87', '22', '12425', '0', '16'), +('7', '87', '22', '21807', '0', '16'), +('7', '87', '22', '21805', '0', '16'), +('7', '87', '22', '39342', '0', '16'), +('7', '87', '1', '111303', '181782', '16'), +('7', '87', '1', '111308', '181636', '16'), +('7', '87', '1', '111300', '180666', '16'), +('7', '87', '1', '111302', '180075', '16'), +('7', '87', '2', '104417', '94872', '16'), +('7', '87', '2', '94056', '77484', '16'), +('7', '87', '2', '49656', '72012', '16'), +('7', '87', '2', '62985', '59173', '16'), +('7', '87', '3', '111316', '177817', '16'), +('7', '87', '3', '111313', '170415', '16'), +('7', '87', '3', '111012', '158825', '16'), +('7', '87', '3', '111015', '156002', '16'), +('7', '87', '5', '111318', '169979', '16'), +('7', '87', '5', '111321', '169497', '16'), +('7', '87', '5', '111017', '158390', '16'), +('7', '87', '5', '111319', '148888', '16'), +('7', '87', '8', '111331', '166833', '16'), +('7', '87', '8', '111332', '149933', '16'), +('7', '87', '8', '111031', '137023', '16'), +('7', '87', '8', '111030', '130068', '16'), +('7', '87', '6', '111322', '152272', '16'), +('7', '87', '6', '111326', '149034', '16'), +('7', '87', '6', '111021', '133901', '16'), +('7', '87', '6', '111024', '133447', '16'), +('7', '87', '17', '49656', '72012', '16'), +('7', '87', '17', '56084', '55115', '16'), +('7', '87', '17', '56045', '53696', '16'), +('7', '87', '17', '104420', '49131', '16'), +('7', '87', '7', '56040', '95813', '16'), +('7', '87', '7', '56079', '89129', '16'), +('7', '87', '7', '104418', '84181', '16'), +('7', '87', '7', '49656', '72012', '16'), +('7', '87', '9', '62992', '111547', '16'), +('7', '87', '9', '104414', '91544', '16'), +('7', '87', '9', '49656', '72012', '16'), +('7', '87', '9', '54836', '71021', '16'), +('7', '87', '15', '111343', '182365', '16'), +('7', '87', '15', '111347', '181379', '16'), +('7', '87', '15', '111339', '178641', '16'), +('7', '87', '15', '111346', '178547', '16'), +('7', '87', '20', '111354', '188773', '16'), +('7', '87', '20', '111351', '183958', '16'), +('7', '87', '20', '111352', '182517', '16'), +('7', '87', '20', '111050', '162751', '16'), +('7', '87', '12', '56074', '104460', '16'), +('7', '87', '12', '104415', '93549', '16'), +('7', '87', '12', '81795', '83054', '16'), +('7', '87', '12', '49656', '72012', '16'), +('7', '87', '18', '62986', '82544', '16'), +('7', '87', '18', '49656', '72012', '16'), +('7', '87', '18', '104419', '67150', '16'), +('7', '87', '18', '54851', '53929', '16'), +('7', '87', '19', '62990', '102773', '16'), +('7', '87', '19', '104416', '86729', '16'), +('7', '87', '19', '49656', '72012', '16'), +('7', '87', '19', '102268', '49530', '16'), +('7', '87', '13', '111527', '505842', '16'), +('7', '87', '13', '111528', '461469', '16'), +('7', '87', '13', '111227', '441760', '16'), +('7', '87', '13', '111228', '424346', '16'), +('7', '87', '14', '111527', '505842', '16'), +('7', '87', '14', '111528', '461469', '16'), +('7', '87', '14', '111227', '441760', '16'), +('7', '87', '14', '111228', '424346', '16'), +('7', '87', '11', '111337', '143316', '16'), +('7', '87', '11', '111034', '131953', '16'), +('7', '87', '11', '111036', '131136', '16'), +('7', '87', '11', '111032', '122252', '16'), +('7', '88', '22', '12425', '0', '16'), +('7', '88', '22', '21807', '0', '16'), +('7', '88', '22', '21805', '0', '16'), +('7', '88', '22', '39342', '0', '16'), +('7', '88', '1', '111303', '181785', '16'), +('7', '88', '1', '111308', '181639', '16'), +('7', '88', '1', '111300', '180668', '16'), +('7', '88', '1', '111302', '180078', '16'), +('7', '88', '2', '104417', '94874', '16'), +('7', '88', '2', '94056', '77486', '16'), +('7', '88', '2', '49656', '72012', '16'), +('7', '88', '2', '62985', '59174', '16'), +('7', '88', '3', '111316', '177820', '16'), +('7', '88', '3', '111313', '170417', '16'), +('7', '88', '3', '111012', '158827', '16'), +('7', '88', '3', '111015', '156005', '16'), +('7', '88', '5', '111318', '169981', '16'), +('7', '88', '5', '111321', '169499', '16'), +('7', '88', '5', '111017', '158392', '16'), +('7', '88', '5', '111319', '148890', '16'), +('7', '88', '8', '111331', '166836', '16'), +('7', '88', '8', '111332', '149935', '16'), +('7', '88', '8', '111031', '137024', '16'), +('7', '88', '8', '111030', '130070', '16'), +('7', '88', '6', '111322', '152273', '16'), +('7', '88', '6', '111326', '149036', '16'), +('7', '88', '6', '111021', '133903', '16'), +('7', '88', '6', '111024', '133449', '16'), +('7', '88', '17', '49656', '72012', '16'), +('7', '88', '17', '56084', '55116', '16'), +('7', '88', '17', '56045', '53697', '16'), +('7', '88', '17', '104420', '49133', '16'), +('7', '88', '7', '56040', '95815', '16'), +('7', '88', '7', '56079', '89131', '16'), +('7', '88', '7', '104418', '84182', '16'), +('7', '88', '7', '49656', '72012', '16'), +('7', '88', '9', '62992', '111549', '16'), +('7', '88', '9', '104414', '91546', '16'), +('7', '88', '9', '49656', '72012', '16'), +('7', '88', '9', '54836', '71023', '16'), +('7', '88', '15', '111343', '182367', '16'), +('7', '88', '15', '111347', '181382', '16'), +('7', '88', '15', '111339', '178643', '16'), +('7', '88', '15', '111346', '178549', '16'), +('7', '88', '20', '111354', '188775', '16'), +('7', '88', '20', '111351', '183960', '16'), +('7', '88', '20', '111352', '182520', '16'), +('7', '88', '20', '111050', '162753', '16'), +('7', '88', '12', '56074', '104462', '16'), +('7', '88', '12', '104415', '93552', '16'), +('7', '88', '12', '81795', '83056', '16'), +('7', '88', '12', '49656', '72012', '16'), +('7', '88', '18', '62986', '82546', '16'), +('7', '88', '18', '49656', '72012', '16'), +('7', '88', '18', '104419', '67151', '16'), +('7', '88', '18', '54851', '53931', '16'), +('7', '88', '19', '62990', '102775', '16'), +('7', '88', '19', '104416', '86731', '16'), +('7', '88', '19', '49656', '72012', '16'), +('7', '88', '19', '102268', '49531', '16'), +('7', '88', '13', '111527', '506738', '16'), +('7', '88', '13', '111528', '462008', '16'), +('7', '88', '13', '111227', '442564', '16'), +('7', '88', '13', '111228', '424845', '16'), +('7', '88', '14', '111527', '506738', '16'), +('7', '88', '14', '111528', '462008', '16'), +('7', '88', '14', '111227', '442564', '16'), +('7', '88', '14', '111228', '424845', '16'), +('7', '88', '11', '111337', '143318', '16'), +('7', '88', '11', '111034', '131954', '16'), +('7', '88', '11', '111036', '131138', '16'), +('7', '88', '11', '111032', '122254', '16'), +('7', '89', '22', '12425', '0', '16'), +('7', '89', '22', '21807', '0', '16'), +('7', '89', '22', '21805', '0', '16'), +('7', '89', '22', '39342', '0', '16'), +('7', '89', '1', '111303', '181789', '16'), +('7', '89', '1', '111308', '181642', '16'), +('7', '89', '1', '111300', '180670', '16'), +('7', '89', '1', '111302', '180081', '16'), +('7', '89', '2', '104417', '94877', '16'), +('7', '89', '2', '94056', '77487', '16'), +('7', '89', '2', '49656', '72013', '16'), +('7', '89', '2', '62985', '59175', '16'), +('7', '89', '3', '111316', '177823', '16'), +('7', '89', '3', '111313', '170419', '16'), +('7', '89', '3', '111012', '158829', '16'), +('7', '89', '3', '111015', '156008', '16'), +('7', '89', '5', '111318', '169983', '16'), +('7', '89', '5', '111321', '169501', '16'), +('7', '89', '5', '111017', '158394', '16'), +('7', '89', '5', '111319', '148893', '16'), +('7', '89', '8', '111331', '166839', '16'), +('7', '89', '8', '111332', '149937', '16'), +('7', '89', '8', '111031', '137026', '16'), +('7', '89', '8', '111030', '130073', '16'), +('7', '89', '6', '111322', '152275', '16'), +('7', '89', '6', '111326', '149038', '16'), +('7', '89', '6', '111021', '133905', '16'), +('7', '89', '6', '111024', '133451', '16'), +('7', '89', '17', '49656', '72013', '16'), +('7', '89', '17', '56084', '55118', '16'), +('7', '89', '17', '56045', '53699', '16'), +('7', '89', '17', '104420', '49135', '16'), +('7', '89', '7', '56040', '95818', '16'), +('7', '89', '7', '56079', '89133', '16'), +('7', '89', '7', '104418', '84184', '16'), +('7', '89', '7', '49656', '72013', '16'), +('7', '89', '9', '62992', '111552', '16'), +('7', '89', '9', '104414', '91549', '16'), +('7', '89', '9', '49656', '72013', '16'), +('7', '89', '9', '54836', '71025', '16'), +('7', '89', '15', '111343', '182369', '16'), +('7', '89', '15', '111347', '181386', '16'), +('7', '89', '15', '111339', '178645', '16'), +('7', '89', '15', '111346', '178552', '16'), +('7', '89', '20', '111354', '188778', '16'), +('7', '89', '20', '111351', '183961', '16'), +('7', '89', '20', '111352', '182523', '16'), +('7', '89', '20', '111050', '162754', '16'), +('7', '89', '12', '56074', '104463', '16'), +('7', '89', '12', '104415', '93555', '16'), +('7', '89', '12', '81795', '83058', '16'), +('7', '89', '12', '49656', '72013', '16'), +('7', '89', '18', '62986', '82549', '16'), +('7', '89', '18', '49656', '72013', '16'), +('7', '89', '18', '104419', '67153', '16'), +('7', '89', '18', '54851', '53933', '16'), +('7', '89', '19', '62990', '102777', '16'), +('7', '89', '19', '104416', '86732', '16'), +('7', '89', '19', '49656', '72013', '16'), +('7', '89', '19', '102268', '49533', '16'), +('7', '89', '13', '111527', '507591', '16'), +('7', '89', '13', '111528', '462549', '16'), +('7', '89', '13', '111227', '443328', '16'), +('7', '89', '13', '111228', '425344', '16'), +('7', '89', '14', '111527', '507591', '16'), +('7', '89', '14', '111528', '462549', '16'), +('7', '89', '14', '111227', '443328', '16'), +('7', '89', '14', '111228', '425344', '16'), +('7', '89', '11', '111337', '143320', '16'), +('7', '89', '11', '111034', '131956', '16'), +('7', '89', '11', '111036', '131140', '16'), +('7', '89', '11', '111032', '122255', '16'), +('7', '90', '22', '12425', '0', '17'), +('7', '90', '22', '21807', '0', '17'), +('7', '90', '22', '21805', '0', '17'), +('7', '90', '22', '39342', '0', '17'), +('7', '90', '1', '111303', '181792', '17'), +('7', '90', '1', '111308', '181644', '17'), +('7', '90', '1', '111300', '180672', '17'), +('7', '90', '1', '111302', '180084', '17'), +('7', '90', '2', '104417', '94879', '17'), +('7', '90', '2', '94056', '77489', '17'), +('7', '90', '2', '49656', '72013', '17'), +('7', '90', '2', '62985', '59176', '17'), +('7', '90', '3', '111316', '177825', '17'), +('7', '90', '3', '111313', '170420', '17'), +('7', '90', '3', '111012', '158831', '17'), +('7', '90', '3', '111015', '156010', '17'), +('7', '90', '5', '111318', '169985', '17'), +('7', '90', '5', '111321', '169504', '17'), +('7', '90', '5', '111017', '158396', '17'), +('7', '90', '5', '111319', '148896', '17'), +('7', '90', '8', '111331', '166841', '17'), +('7', '90', '8', '111332', '149938', '17'), +('7', '90', '8', '111031', '137028', '17'), +('7', '90', '8', '111030', '130075', '17'), +('7', '90', '6', '111322', '152277', '17'), +('7', '90', '6', '111326', '149040', '17'), +('7', '90', '6', '111021', '133907', '17'), +('7', '90', '6', '111024', '133452', '17'), +('7', '90', '17', '49656', '72013', '17'), +('7', '90', '17', '56084', '55120', '17'), +('7', '90', '17', '56045', '53700', '17'), +('7', '90', '17', '104420', '49137', '17'), +('7', '90', '7', '56040', '95820', '17'), +('7', '90', '7', '56079', '89136', '17'), +('7', '90', '7', '104418', '84185', '17'), +('7', '90', '7', '49656', '72013', '17'), +('7', '90', '9', '62992', '111554', '17'), +('7', '90', '9', '104414', '91551', '17'), +('7', '90', '9', '49656', '72013', '17'), +('7', '90', '9', '54836', '71027', '17'), +('7', '90', '15', '111343', '182371', '17'), +('7', '90', '15', '111347', '181388', '17'), +('7', '90', '15', '111339', '178647', '17'), +('7', '90', '15', '111346', '178554', '17'), +('7', '90', '20', '111354', '188780', '17'), +('7', '90', '20', '111351', '183963', '17'), +('7', '90', '20', '111352', '182525', '17'), +('7', '90', '20', '111050', '162756', '17'), +('7', '90', '12', '56074', '104464', '17'), +('7', '90', '12', '104415', '93558', '17'), +('7', '90', '12', '81795', '83060', '17'), +('7', '90', '12', '49656', '72013', '17'), +('7', '90', '18', '62986', '82552', '17'), +('7', '90', '18', '49656', '72013', '17'), +('7', '90', '18', '104419', '67155', '17'), +('7', '90', '18', '54851', '53934', '17'), +('7', '90', '19', '62990', '102779', '17'), +('7', '90', '19', '104416', '86733', '17'), +('7', '90', '19', '49656', '72013', '17'), +('7', '90', '19', '102268', '49534', '17'), +('7', '90', '13', '111527', '508486', '17'), +('7', '90', '13', '111528', '463089', '17'), +('7', '90', '13', '111227', '444132', '17'), +('7', '90', '13', '111228', '425884', '17'), +('7', '90', '14', '111527', '508486', '17'), +('7', '90', '14', '111528', '463089', '17'), +('7', '90', '14', '111227', '444132', '17'), +('7', '90', '14', '111228', '425884', '17'), +('7', '90', '11', '111337', '143321', '17'), +('7', '90', '11', '111034', '131958', '17'), +('7', '90', '11', '111036', '131142', '17'), +('7', '90', '11', '111032', '122257', '17'), +('7', '91', '22', '12425', '0', '17'), +('7', '91', '22', '21807', '0', '17'), +('7', '91', '22', '21805', '0', '17'), +('7', '91', '22', '39342', '0', '17'), +('7', '91', '1', '111303', '181795', '17'), +('7', '91', '1', '111308', '181646', '17'), +('7', '91', '1', '111300', '180673', '17'), +('7', '91', '1', '111302', '180087', '17'), +('7', '91', '2', '104417', '94882', '17'), +('7', '91', '2', '94056', '77490', '17'), +('7', '91', '2', '49656', '72013', '17'), +('7', '91', '2', '62985', '59176', '17'), +('7', '91', '3', '111316', '177827', '17'), +('7', '91', '3', '111313', '170422', '17'), +('7', '91', '3', '111012', '158832', '17'), +('7', '91', '3', '111015', '156012', '17'), +('7', '91', '5', '111318', '169986', '17'), +('7', '91', '5', '111321', '169506', '17'), +('7', '91', '5', '111017', '158398', '17'), +('7', '91', '5', '111319', '148899', '17'), +('7', '91', '8', '111331', '166844', '17'), +('7', '91', '8', '111332', '149940', '17'), +('7', '91', '8', '111031', '137029', '17'), +('7', '91', '8', '111030', '130077', '17'), +('7', '91', '6', '111322', '152279', '17'), +('7', '91', '6', '111326', '149042', '17'), +('7', '91', '6', '111021', '133908', '17'), +('7', '91', '6', '111024', '133454', '17'), +('7', '91', '17', '49656', '72013', '17'), +('7', '91', '17', '56084', '55121', '17'), +('7', '91', '17', '56045', '53701', '17'), +('7', '91', '17', '104420', '49138', '17'), +('7', '91', '7', '56040', '95822', '17'), +('7', '91', '7', '56079', '89138', '17'), +('7', '91', '7', '104418', '84187', '17'), +('7', '91', '7', '49656', '72013', '17'), +('7', '91', '9', '62992', '111557', '17'), +('7', '91', '9', '104414', '91554', '17'), +('7', '91', '9', '49656', '72013', '17'), +('7', '91', '9', '54836', '71029', '17'), +('7', '91', '15', '111343', '182372', '17'), +('7', '91', '15', '111347', '181391', '17'), +('7', '91', '15', '111339', '178649', '17'), +('7', '91', '15', '111346', '178556', '17'), +('7', '91', '20', '111354', '188782', '17'), +('7', '91', '20', '111351', '183964', '17'), +('7', '91', '20', '111352', '182528', '17'), +('7', '91', '20', '111050', '162757', '17'), +('7', '91', '12', '56074', '104466', '17'), +('7', '91', '12', '104415', '93561', '17'), +('7', '91', '12', '81795', '83063', '17'), +('7', '91', '12', '49656', '72013', '17'), +('7', '91', '18', '62986', '82554', '17'), +('7', '91', '18', '49656', '72013', '17'), +('7', '91', '18', '104419', '67156', '17'), +('7', '91', '18', '54851', '53936', '17'), +('7', '91', '19', '62990', '102782', '17'), +('7', '91', '19', '104416', '86734', '17'), +('7', '91', '19', '49656', '72013', '17'), +('7', '91', '19', '102268', '49536', '17'), +('7', '91', '13', '111527', '509381', '17'), +('7', '91', '13', '111528', '463628', '17'), +('7', '91', '13', '111227', '444936', '17'), +('7', '91', '13', '111228', '426383', '17'), +('7', '91', '14', '111527', '509381', '17'), +('7', '91', '14', '111528', '463628', '17'), +('7', '91', '14', '111227', '444936', '17'), +('7', '91', '14', '111228', '426383', '17'), +('7', '91', '11', '111337', '143323', '17'), +('7', '91', '11', '111034', '131960', '17'), +('7', '91', '11', '111036', '131144', '17'), +('7', '91', '11', '111032', '122258', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '92', '22', '12425', '0', '17'), +('7', '92', '22', '21807', '0', '17'), +('7', '92', '22', '21805', '0', '17'), +('7', '92', '22', '39342', '0', '17'), +('7', '92', '1', '111303', '181799', '17'), +('7', '92', '1', '111308', '181649', '17'), +('7', '92', '1', '111300', '180676', '17'), +('7', '92', '1', '111302', '180091', '17'), +('7', '92', '2', '104417', '94884', '17'), +('7', '92', '2', '94056', '77492', '17'), +('7', '92', '2', '49656', '72014', '17'), +('7', '92', '2', '62985', '59177', '17'), +('7', '92', '3', '111316', '177830', '17'), +('7', '92', '3', '111313', '170424', '17'), +('7', '92', '3', '111012', '158834', '17'), +('7', '92', '3', '111015', '156015', '17'), +('7', '92', '5', '111318', '169988', '17'), +('7', '92', '5', '111321', '169508', '17'), +('7', '92', '5', '111017', '158400', '17'), +('7', '92', '5', '111319', '148902', '17'), +('7', '92', '8', '111331', '166847', '17'), +('7', '92', '8', '111332', '149941', '17'), +('7', '92', '8', '111031', '137031', '17'), +('7', '92', '8', '111030', '130080', '17'), +('7', '92', '6', '111322', '152281', '17'), +('7', '92', '6', '111326', '149045', '17'), +('7', '92', '6', '111021', '133910', '17'), +('7', '92', '6', '111024', '133456', '17'), +('7', '92', '17', '49656', '72014', '17'), +('7', '92', '17', '56084', '55123', '17'), +('7', '92', '17', '56045', '53702', '17'), +('7', '92', '17', '104420', '49140', '17'), +('7', '92', '7', '56040', '95825', '17'), +('7', '92', '7', '56079', '89140', '17'), +('7', '92', '7', '104418', '84188', '17'), +('7', '92', '7', '49656', '72014', '17'), +('7', '92', '9', '62992', '111559', '17'), +('7', '92', '9', '104414', '91556', '17'), +('7', '92', '9', '49656', '72014', '17'), +('7', '92', '9', '54836', '71031', '17'), +('7', '92', '15', '111343', '182374', '17'), +('7', '92', '15', '111347', '181395', '17'), +('7', '92', '15', '111339', '178651', '17'), +('7', '92', '15', '111346', '178559', '17'), +('7', '92', '20', '111354', '188785', '17'), +('7', '92', '20', '111351', '183966', '17'), +('7', '92', '20', '111352', '182530', '17'), +('7', '92', '20', '111050', '162759', '17'), +('7', '92', '12', '56074', '104467', '17'), +('7', '92', '12', '104415', '93565', '17'), +('7', '92', '12', '81795', '83065', '17'), +('7', '92', '12', '49656', '72014', '17'), +('7', '92', '18', '62986', '82557', '17'), +('7', '92', '18', '49656', '72014', '17'), +('7', '92', '18', '104419', '67158', '17'), +('7', '92', '18', '54851', '53937', '17'), +('7', '92', '19', '62990', '102784', '17'), +('7', '92', '19', '104416', '86735', '17'), +('7', '92', '19', '49656', '72014', '17'), +('7', '92', '19', '102268', '49537', '17'), +('7', '92', '13', '111527', '510277', '17'), +('7', '92', '13', '111528', '464169', '17'), +('7', '92', '13', '111227', '445741', '17'), +('7', '92', '13', '111228', '426882', '17'), +('7', '92', '14', '111527', '510277', '17'), +('7', '92', '14', '111528', '464169', '17'), +('7', '92', '14', '111227', '445741', '17'), +('7', '92', '14', '111228', '426882', '17'), +('7', '92', '11', '111337', '143325', '17'), +('7', '92', '11', '111034', '131962', '17'), +('7', '92', '11', '111036', '131146', '17'), +('7', '92', '11', '111032', '122260', '17'), +('7', '93', '22', '12425', '0', '17'), +('7', '93', '22', '21807', '0', '17'), +('7', '93', '22', '21805', '0', '17'), +('7', '93', '22', '39342', '0', '17'), +('7', '93', '1', '111303', '181802', '17'), +('7', '93', '1', '111308', '181652', '17'), +('7', '93', '1', '111300', '180677', '17'), +('7', '93', '1', '111302', '180094', '17'), +('7', '93', '2', '104417', '94887', '17'), +('7', '93', '2', '94056', '77493', '17'), +('7', '93', '2', '49656', '72014', '17'), +('7', '93', '2', '62985', '59178', '17'), +('7', '93', '3', '111316', '177832', '17'), +('7', '93', '3', '111313', '170426', '17'), +('7', '93', '3', '111012', '158836', '17'), +('7', '93', '3', '111015', '156017', '17'), +('7', '93', '5', '111318', '169990', '17'), +('7', '93', '5', '111321', '169511', '17'), +('7', '93', '5', '111017', '158402', '17'), +('7', '93', '5', '111319', '148904', '17'), +('7', '93', '8', '111331', '166849', '17'), +('7', '93', '8', '111332', '149943', '17'), +('7', '93', '8', '111031', '137032', '17'), +('7', '93', '8', '111030', '130082', '17'), +('7', '93', '6', '111322', '152283', '17'), +('7', '93', '6', '111326', '149047', '17'), +('7', '93', '6', '111021', '133912', '17'), +('7', '93', '6', '111024', '133458', '17'), +('7', '93', '17', '49656', '72014', '17'), +('7', '93', '17', '56084', '55125', '17'), +('7', '93', '17', '56045', '53703', '17'), +('7', '93', '17', '104420', '49142', '17'), +('7', '93', '7', '56040', '95827', '17'), +('7', '93', '7', '56079', '89142', '17'), +('7', '93', '7', '104418', '84190', '17'), +('7', '93', '7', '49656', '72014', '17'), +('7', '93', '9', '62992', '111562', '17'), +('7', '93', '9', '104414', '91558', '17'), +('7', '93', '9', '49656', '72014', '17'), +('7', '93', '9', '54836', '71033', '17'), +('7', '93', '15', '111343', '182376', '17'), +('7', '93', '15', '111347', '181397', '17'), +('7', '93', '15', '111339', '178653', '17'), +('7', '93', '15', '111346', '178561', '17'), +('7', '93', '20', '111354', '188787', '17'), +('7', '93', '20', '111351', '183967', '17'), +('7', '93', '20', '111352', '182533', '17'), +('7', '93', '20', '111050', '162760', '17'), +('7', '93', '12', '56074', '104468', '17'), +('7', '93', '12', '104415', '93568', '17'), +('7', '93', '12', '81795', '83067', '17'), +('7', '93', '12', '49656', '72014', '17'), +('7', '93', '18', '62986', '82559', '17'), +('7', '93', '18', '49656', '72014', '17'), +('7', '93', '18', '104419', '67160', '17'), +('7', '93', '18', '54851', '53939', '17'), +('7', '93', '19', '62990', '102786', '17'), +('7', '93', '19', '104416', '86736', '17'), +('7', '93', '19', '49656', '72014', '17'), +('7', '93', '19', '102268', '49539', '17'), +('7', '93', '13', '111527', '511172', '17'), +('7', '93', '13', '111528', '464708', '17'), +('7', '93', '13', '111227', '446545', '17'), +('7', '93', '13', '111228', '427380', '17'), +('7', '93', '14', '111527', '511172', '17'), +('7', '93', '14', '111528', '464708', '17'), +('7', '93', '14', '111227', '446545', '17'), +('7', '93', '14', '111228', '427380', '17'), +('7', '93', '11', '111337', '143327', '17'), +('7', '93', '11', '111034', '131963', '17'), +('7', '93', '11', '111036', '131148', '17'), +('7', '93', '11', '111032', '122262', '17'), +('7', '94', '22', '12425', '0', '17'), +('7', '94', '22', '21807', '0', '17'), +('7', '94', '22', '21805', '0', '17'), +('7', '94', '22', '39342', '0', '17'), +('7', '94', '1', '111303', '181805', '17'), +('7', '94', '1', '111308', '181655', '17'), +('7', '94', '1', '111300', '180679', '17'), +('7', '94', '1', '111302', '180097', '17'), +('7', '94', '2', '104417', '94889', '17'), +('7', '94', '2', '94056', '77495', '17'), +('7', '94', '2', '49656', '72014', '17'), +('7', '94', '2', '62985', '59179', '17'), +('7', '94', '3', '111316', '177835', '17'), +('7', '94', '3', '111313', '170428', '17'), +('7', '94', '3', '111012', '158838', '17'), +('7', '94', '3', '111015', '156020', '17'), +('7', '94', '5', '111318', '169992', '17'), +('7', '94', '5', '111321', '169513', '17'), +('7', '94', '5', '111017', '158404', '17'), +('7', '94', '5', '111319', '148907', '17'), +('7', '94', '8', '111331', '166852', '17'), +('7', '94', '8', '111332', '149944', '17'), +('7', '94', '8', '111031', '137034', '17'), +('7', '94', '8', '111030', '130085', '17'), +('7', '94', '6', '111322', '152285', '17'), +('7', '94', '6', '111326', '149049', '17'), +('7', '94', '6', '111021', '133914', '17'), +('7', '94', '6', '111024', '133460', '17'), +('7', '94', '17', '49656', '72014', '17'), +('7', '94', '17', '56084', '55126', '17'), +('7', '94', '17', '56045', '53704', '17'), +('7', '94', '17', '104420', '49144', '17'), +('7', '94', '7', '56040', '95830', '17'), +('7', '94', '7', '56079', '89145', '17'), +('7', '94', '7', '104418', '84192', '17'), +('7', '94', '7', '49656', '72014', '17'), +('7', '94', '9', '62992', '111564', '17'), +('7', '94', '9', '104414', '91561', '17'), +('7', '94', '9', '49656', '72014', '17'), +('7', '94', '9', '54836', '71035', '17'), +('7', '94', '15', '111343', '182378', '17'), +('7', '94', '15', '111347', '181401', '17'), +('7', '94', '15', '111339', '178656', '17'), +('7', '94', '15', '111346', '178563', '17'), +('7', '94', '20', '111354', '188789', '17'), +('7', '94', '20', '111351', '183969', '17'), +('7', '94', '20', '111352', '182536', '17'), +('7', '94', '20', '111050', '162762', '17'), +('7', '94', '12', '56074', '104470', '17'), +('7', '94', '12', '104415', '93571', '17'), +('7', '94', '12', '81795', '83070', '17'), +('7', '94', '12', '49656', '72014', '17'), +('7', '94', '18', '62986', '82562', '17'), +('7', '94', '18', '49656', '72014', '17'), +('7', '94', '18', '104419', '67162', '17'), +('7', '94', '18', '54851', '53941', '17'), +('7', '94', '19', '62990', '102788', '17'), +('7', '94', '19', '104416', '86737', '17'), +('7', '94', '19', '49656', '72014', '17'), +('7', '94', '19', '102268', '49540', '17'), +('7', '94', '13', '111527', '512067', '17'), +('7', '94', '13', '111528', '465249', '17'), +('7', '94', '13', '111227', '447309', '17'), +('7', '94', '13', '111228', '427879', '17'), +('7', '94', '14', '111527', '512067', '17'), +('7', '94', '14', '111528', '465249', '17'), +('7', '94', '14', '111227', '447309', '17'), +('7', '94', '14', '111228', '427879', '17'), +('7', '94', '11', '111337', '143329', '17'), +('7', '94', '11', '111034', '131965', '17'), +('7', '94', '11', '111036', '131150', '17'), +('7', '94', '11', '111032', '122263', '17'), +('7', '95', '22', '12425', '0', '18'), +('7', '95', '22', '21807', '0', '18'), +('7', '95', '22', '21805', '0', '18'), +('7', '95', '22', '39342', '0', '18'), +('7', '95', '1', '111303', '181809', '18'), +('7', '95', '1', '111308', '181657', '18'), +('7', '95', '1', '111300', '180681', '18'), +('7', '95', '1', '111302', '180100', '18'), +('7', '95', '2', '104417', '94892', '18'), +('7', '95', '2', '94056', '77496', '18'), +('7', '95', '2', '49656', '72015', '18'), +('7', '95', '2', '62985', '59180', '18'), +('7', '95', '3', '111316', '177838', '18'), +('7', '95', '3', '111313', '170429', '18'), +('7', '95', '3', '111012', '158840', '18'), +('7', '95', '3', '111015', '156023', '18'), +('7', '95', '5', '111318', '169994', '18'), +('7', '95', '5', '111321', '169516', '18'), +('7', '95', '5', '111017', '158406', '18'), +('7', '95', '5', '111319', '148910', '18'), +('7', '95', '8', '111331', '166855', '18'), +('7', '95', '8', '111332', '149946', '18'), +('7', '95', '8', '111031', '137036', '18'), +('7', '95', '8', '111030', '130087', '18'), +('7', '95', '6', '111322', '152286', '18'), +('7', '95', '6', '111326', '149051', '18'), +('7', '95', '6', '111021', '133916', '18'), +('7', '95', '6', '111024', '133462', '18'), +('7', '95', '17', '49656', '72015', '18'), +('7', '95', '17', '56084', '55128', '18'), +('7', '95', '17', '56045', '53705', '18'), +('7', '95', '17', '104420', '49146', '18'), +('7', '95', '7', '56040', '95832', '18'), +('7', '95', '7', '56079', '89147', '18'), +('7', '95', '7', '104418', '84193', '18'), +('7', '95', '7', '49656', '72015', '18'), +('7', '95', '9', '62992', '111567', '18'), +('7', '95', '9', '104414', '91563', '18'), +('7', '95', '9', '49656', '72015', '18'), +('7', '95', '9', '54836', '71036', '18'), +('7', '95', '15', '111343', '182380', '18'), +('7', '95', '15', '111347', '181404', '18'), +('7', '95', '15', '111339', '178658', '18'), +('7', '95', '15', '111346', '178566', '18'), +('7', '95', '20', '111354', '188792', '18'), +('7', '95', '20', '111351', '183970', '18'), +('7', '95', '20', '111352', '182538', '18'), +('7', '95', '20', '111050', '162764', '18'), +('7', '95', '12', '56074', '104471', '18'), +('7', '95', '12', '104415', '93574', '18'), +('7', '95', '12', '81795', '83072', '18'), +('7', '95', '12', '49656', '72015', '18'), +('7', '95', '18', '62986', '82565', '18'), +('7', '95', '18', '49656', '72015', '18'), +('7', '95', '18', '104419', '67163', '18'), +('7', '95', '18', '54851', '53942', '18'), +('7', '95', '19', '62990', '102791', '18'), +('7', '95', '19', '104416', '86738', '18'), +('7', '95', '19', '49656', '72015', '18'), +('7', '95', '19', '102268', '49542', '18'), +('7', '95', '13', '111527', '512920', '18'), +('7', '95', '13', '111528', '465789', '18'), +('7', '95', '13', '111227', '448113', '18'), +('7', '95', '13', '111228', '428378', '18'), +('7', '95', '14', '111527', '512920', '18'), +('7', '95', '14', '111528', '465789', '18'), +('7', '95', '14', '111227', '448113', '18'), +('7', '95', '14', '111228', '428378', '18'), +('7', '95', '11', '111337', '143331', '18'), +('7', '95', '11', '111034', '131967', '18'), +('7', '95', '11', '111036', '131152', '18'), +('7', '95', '11', '111032', '122265', '18'), +('7', '96', '22', '12425', '0', '18'), +('7', '96', '22', '21807', '0', '18'), +('7', '96', '22', '21805', '0', '18'), +('7', '96', '22', '39342', '0', '18'), +('7', '96', '1', '111303', '181812', '18'), +('7', '96', '1', '111308', '181660', '18'), +('7', '96', '1', '111300', '180683', '18'), +('7', '96', '1', '111302', '180103', '18'), +('7', '96', '2', '104417', '94894', '18'), +('7', '96', '2', '94056', '77498', '18'), +('7', '96', '2', '49656', '72015', '18'), +('7', '96', '2', '62985', '59180', '18'), +('7', '96', '3', '111316', '177840', '18'), +('7', '96', '3', '111313', '170431', '18'), +('7', '96', '3', '111012', '158842', '18'), +('7', '96', '3', '111015', '156025', '18'), +('7', '96', '5', '111318', '169996', '18'), +('7', '96', '5', '111321', '169518', '18'), +('7', '96', '5', '111017', '158408', '18'), +('7', '96', '5', '111319', '148913', '18'), +('7', '96', '8', '111331', '166857', '18'), +('7', '96', '8', '111332', '149948', '18'), +('7', '96', '8', '111031', '137037', '18'), +('7', '96', '8', '111030', '130090', '18'), +('7', '96', '6', '111322', '152288', '18'), +('7', '96', '6', '111326', '149053', '18'), +('7', '96', '6', '111021', '133918', '18'), +('7', '96', '6', '111024', '133464', '18'), +('7', '96', '17', '49656', '72015', '18'), +('7', '96', '17', '56084', '55130', '18'), +('7', '96', '17', '56045', '53707', '18'), +('7', '96', '17', '104420', '49148', '18'), +('7', '96', '7', '56040', '95835', '18'), +('7', '96', '7', '56079', '89149', '18'), +('7', '96', '7', '104418', '84195', '18'), +('7', '96', '7', '49656', '72015', '18'), +('7', '96', '9', '62992', '111570', '18'), +('7', '96', '9', '104414', '91566', '18'), +('7', '96', '9', '49656', '72015', '18'), +('7', '96', '9', '54836', '71039', '18'), +('7', '96', '15', '111343', '182382', '18'), +('7', '96', '15', '111347', '181407', '18'), +('7', '96', '15', '111339', '178660', '18'), +('7', '96', '15', '111346', '178568', '18'), +('7', '96', '20', '111354', '188794', '18'), +('7', '96', '20', '111351', '183972', '18'), +('7', '96', '20', '111352', '182541', '18'), +('7', '96', '20', '111050', '162765', '18'), +('7', '96', '12', '56074', '104473', '18'), +('7', '96', '12', '104415', '93578', '18'), +('7', '96', '12', '81795', '83074', '18'), +('7', '96', '12', '49656', '72015', '18'), +('7', '96', '18', '62986', '82567', '18'), +('7', '96', '18', '49656', '72015', '18'), +('7', '96', '18', '104419', '67165', '18'), +('7', '96', '18', '54851', '53944', '18'), +('7', '96', '19', '62990', '102793', '18'), +('7', '96', '19', '104416', '86739', '18'), +('7', '96', '19', '49656', '72015', '18'), +('7', '96', '19', '102268', '49544', '18'), +('7', '96', '13', '111527', '513816', '18'), +('7', '96', '13', '111528', '466329', '18'), +('7', '96', '13', '111227', '448918', '18'), +('7', '96', '13', '111228', '428877', '18'), +('7', '96', '14', '111527', '513816', '18'), +('7', '96', '14', '111528', '466329', '18'), +('7', '96', '14', '111227', '448918', '18'), +('7', '96', '14', '111228', '428877', '18'), +('7', '96', '11', '111337', '143333', '18'), +('7', '96', '11', '111034', '131969', '18'), +('7', '96', '11', '111036', '131154', '18'), +('7', '96', '11', '111032', '122266', '18'), +('7', '97', '22', '12425', '0', '18'), +('7', '97', '22', '21807', '0', '18'), +('7', '97', '22', '21805', '0', '18'), +('7', '97', '22', '39342', '0', '18'), +('7', '97', '1', '111303', '181815', '18'), +('7', '97', '1', '111308', '181662', '18'), +('7', '97', '1', '111300', '180685', '18'), +('7', '97', '1', '111302', '180106', '18'), +('7', '97', '2', '104417', '94897', '18'), +('7', '97', '2', '94056', '77500', '18'), +('7', '97', '2', '49656', '72015', '18'), +('7', '97', '2', '62985', '59181', '18'), +('7', '97', '3', '111316', '177843', '18'), +('7', '97', '3', '111313', '170433', '18'), +('7', '97', '3', '111012', '158844', '18'), +('7', '97', '3', '111015', '156028', '18'), +('7', '97', '5', '111318', '169997', '18'), +('7', '97', '5', '111321', '169520', '18'), +('7', '97', '5', '111017', '158410', '18'), +('7', '97', '5', '111319', '148915', '18'), +('7', '97', '8', '111331', '166860', '18'), +('7', '97', '8', '111332', '149949', '18'), +('7', '97', '8', '111031', '137039', '18'), +('7', '97', '8', '111030', '130092', '18'), +('7', '97', '6', '111322', '152290', '18'), +('7', '97', '6', '111326', '149055', '18'), +('7', '97', '6', '111021', '133920', '18'), +('7', '97', '6', '111024', '133465', '18'), +('7', '97', '17', '49656', '72015', '18'), +('7', '97', '17', '56084', '55131', '18'), +('7', '97', '17', '56045', '53708', '18'), +('7', '97', '17', '104420', '49150', '18'), +('7', '97', '7', '56040', '95837', '18'), +('7', '97', '7', '56079', '89151', '18'), +('7', '97', '7', '104418', '84196', '18'), +('7', '97', '7', '49656', '72015', '18'), +('7', '97', '9', '62992', '111572', '18'), +('7', '97', '9', '104414', '91568', '18'), +('7', '97', '9', '49656', '72015', '18'), +('7', '97', '9', '54836', '71040', '18'), +('7', '97', '15', '111343', '182384', '18'), +('7', '97', '15', '111347', '181410', '18'), +('7', '97', '15', '111339', '178662', '18'), +('7', '97', '15', '111346', '178570', '18'), +('7', '97', '20', '111354', '188796', '18'), +('7', '97', '20', '111351', '183974', '18'), +('7', '97', '20', '111352', '182543', '18'), +('7', '97', '20', '111050', '162767', '18'), +('7', '97', '12', '56074', '104474', '18'), +('7', '97', '12', '104415', '93581', '18'), +('7', '97', '12', '81795', '83077', '18'), +('7', '97', '12', '49656', '72015', '18'), +('7', '97', '18', '62986', '82570', '18'), +('7', '97', '18', '49656', '72015', '18'), +('7', '97', '18', '104419', '67167', '18'), +('7', '97', '18', '54851', '53945', '18'), +('7', '97', '19', '62990', '102795', '18'), +('7', '97', '19', '104416', '86741', '18'), +('7', '97', '19', '49656', '72015', '18'), +('7', '97', '19', '102268', '49545', '18'), +('7', '97', '13', '111527', '514711', '18'), +('7', '97', '13', '111528', '466869', '18'), +('7', '97', '13', '111227', '449722', '18'), +('7', '97', '13', '111228', '429417', '18'), +('7', '97', '14', '111527', '514711', '18'), +('7', '97', '14', '111528', '466869', '18'), +('7', '97', '14', '111227', '449722', '18'), +('7', '97', '14', '111228', '429417', '18'), +('7', '97', '11', '111337', '143335', '18'), +('7', '97', '11', '111034', '131971', '18'), +('7', '97', '11', '111036', '131156', '18'), +('7', '97', '11', '111032', '122268', '18'), +('7', '98', '22', '12425', '0', '18'), +('7', '98', '22', '21807', '0', '18'), +('7', '98', '22', '21805', '0', '18'), +('7', '98', '22', '39342', '0', '18'), +('7', '98', '1', '111303', '181819', '18'), +('7', '98', '1', '111308', '181665', '18'), +('7', '98', '1', '111300', '180687', '18'), +('7', '98', '1', '111302', '180110', '18'), +('7', '98', '2', '104417', '94899', '18'), +('7', '98', '2', '94056', '77501', '18'), +('7', '98', '2', '49656', '72016', '18'), +('7', '98', '2', '62985', '59182', '18'), +('7', '98', '3', '111316', '177845', '18'), +('7', '98', '3', '111313', '170435', '18'), +('7', '98', '3', '111012', '158846', '18'), +('7', '98', '3', '111015', '156030', '18'), +('7', '98', '5', '111318', '169999', '18'), +('7', '98', '5', '111321', '169523', '18'), +('7', '98', '5', '111017', '158412', '18'), +('7', '98', '5', '111319', '148918', '18'), +('7', '98', '8', '111331', '166863', '18'), +('7', '98', '8', '111332', '149951', '18'), +('7', '98', '8', '111031', '137041', '18'), +('7', '98', '8', '111030', '130094', '18'), +('7', '98', '6', '111322', '152292', '18'), +('7', '98', '6', '111326', '149057', '18'), +('7', '98', '6', '111021', '133922', '18'), +('7', '98', '6', '111024', '133467', '18'), +('7', '98', '17', '49656', '72016', '18'), +('7', '98', '17', '56084', '55133', '18'), +('7', '98', '17', '56045', '53709', '18'), +('7', '98', '17', '104420', '49152', '18'), +('7', '98', '7', '56040', '95840', '18'), +('7', '98', '7', '56079', '89154', '18'), +('7', '98', '7', '104418', '84198', '18'), +('7', '98', '7', '49656', '72016', '18'), +('7', '98', '9', '62992', '111575', '18'), +('7', '98', '9', '104414', '91571', '18'), +('7', '98', '9', '49656', '72016', '18'), +('7', '98', '9', '54836', '71042', '18'), +('7', '98', '15', '111343', '182386', '18'), +('7', '98', '15', '111347', '181413', '18'), +('7', '98', '15', '111339', '178664', '18'), +('7', '98', '15', '111346', '178573', '18'), +('7', '98', '20', '111354', '188799', '18'), +('7', '98', '20', '111351', '183975', '18'), +('7', '98', '20', '111352', '182546', '18'), +('7', '98', '20', '111050', '162768', '18'), +('7', '98', '12', '56074', '104475', '18'), +('7', '98', '12', '104415', '93584', '18'), +('7', '98', '12', '81795', '83079', '18'), +('7', '98', '12', '49656', '72016', '18'), +('7', '98', '18', '62986', '82573', '18'), +('7', '98', '18', '49656', '72016', '18'), +('7', '98', '18', '104419', '67168', '18'), +('7', '98', '18', '54851', '53947', '18'), +('7', '98', '19', '62990', '102797', '18'), +('7', '98', '19', '104416', '86742', '18'), +('7', '98', '19', '49656', '72016', '18'), +('7', '98', '19', '102268', '49547', '18'), +('7', '98', '13', '111527', '515606', '18'), +('7', '98', '13', '111528', '467409', '18'), +('7', '98', '13', '111227', '450526', '18'), +('7', '98', '13', '111228', '429916', '18'), +('7', '98', '14', '111527', '515606', '18'), +('7', '98', '14', '111528', '467409', '18'), +('7', '98', '14', '111227', '450526', '18'), +('7', '98', '14', '111228', '429916', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '98', '11', '111337', '143337', '18'), +('7', '98', '11', '111034', '131973', '18'), +('7', '98', '11', '111036', '131158', '18'), +('7', '98', '11', '111032', '122269', '18'), +('7', '99', '22', '12425', '0', '18'), +('7', '99', '22', '21807', '0', '18'), +('7', '99', '22', '21805', '0', '18'), +('7', '99', '22', '39342', '0', '18'), +('7', '99', '1', '111303', '181823', '18'), +('7', '99', '1', '111308', '181668', '18'), +('7', '99', '1', '111300', '180689', '18'), +('7', '99', '1', '111302', '180113', '18'), +('7', '99', '2', '104417', '94902', '18'), +('7', '99', '2', '94056', '77503', '18'), +('7', '99', '2', '49656', '72016', '18'), +('7', '99', '2', '62985', '59183', '18'), +('7', '99', '3', '111316', '177848', '18'), +('7', '99', '3', '111313', '170437', '18'), +('7', '99', '3', '111012', '158848', '18'), +('7', '99', '3', '111015', '156033', '18'), +('7', '99', '5', '111318', '170001', '18'), +('7', '99', '5', '111321', '169525', '18'), +('7', '99', '5', '111017', '158414', '18'), +('7', '99', '5', '111319', '148921', '18'), +('7', '99', '8', '111331', '166866', '18'), +('7', '99', '8', '111332', '149952', '18'), +('7', '99', '8', '111031', '137042', '18'), +('7', '99', '8', '111030', '130097', '18'), +('7', '99', '6', '111322', '152294', '18'), +('7', '99', '6', '111326', '149059', '18'), +('7', '99', '6', '111021', '133923', '18'), +('7', '99', '6', '111024', '133469', '18'), +('7', '99', '17', '49656', '72016', '18'), +('7', '99', '17', '56084', '55135', '18'), +('7', '99', '17', '56045', '53710', '18'), +('7', '99', '17', '104420', '49154', '18'), +('7', '99', '7', '56040', '95842', '18'), +('7', '99', '7', '56079', '89156', '18'), +('7', '99', '7', '104418', '84200', '18'), +('7', '99', '7', '49656', '72016', '18'), +('7', '99', '9', '62992', '111577', '18'), +('7', '99', '9', '104414', '91574', '18'), +('7', '99', '9', '49656', '72016', '18'), +('7', '99', '9', '54836', '71045', '18'), +('7', '99', '15', '111343', '182388', '18'), +('7', '99', '15', '111347', '181416', '18'), +('7', '99', '15', '111339', '178666', '18'), +('7', '99', '15', '111346', '178575', '18'), +('7', '99', '20', '111354', '188801', '18'), +('7', '99', '20', '111351', '183977', '18'), +('7', '99', '20', '111352', '182549', '18'), +('7', '99', '20', '111050', '162770', '18'), +('7', '99', '12', '56074', '104477', '18'), +('7', '99', '12', '104415', '93588', '18'), +('7', '99', '12', '81795', '83081', '18'), +('7', '99', '12', '49656', '72016', '18'), +('7', '99', '18', '62986', '82575', '18'), +('7', '99', '18', '49656', '72016', '18'), +('7', '99', '18', '104419', '67170', '18'), +('7', '99', '18', '54851', '53949', '18'), +('7', '99', '19', '62990', '102800', '18'), +('7', '99', '19', '104416', '86743', '18'), +('7', '99', '19', '49656', '72016', '18'), +('7', '99', '19', '102268', '49548', '18'), +('7', '99', '13', '111527', '516502', '18'), +('7', '99', '13', '111528', '467949', '18'), +('7', '99', '13', '111227', '451331', '18'), +('7', '99', '13', '111228', '430415', '18'), +('7', '99', '14', '111527', '516502', '18'), +('7', '99', '14', '111528', '467949', '18'), +('7', '99', '14', '111227', '451331', '18'), +('7', '99', '14', '111228', '430415', '18'), +('7', '99', '11', '111337', '143339', '18'), +('7', '99', '11', '111034', '131975', '18'), +('7', '99', '11', '111036', '131160', '18'), +('7', '99', '11', '111032', '122271', '18'), +('7', '100', '22', '12425', '0', '20'), +('7', '100', '22', '21807', '0', '20'), +('7', '100', '22', '21805', '0', '20'), +('7', '100', '22', '39342', '0', '20'), +('7', '100', '1', '98769', '303389', '20'), +('7', '100', '1', '111303', '181826', '20'), +('7', '100', '1', '111308', '181670', '20'), +('7', '100', '1', '111300', '180691', '20'), +('7', '100', '2', '104417', '94904', '20'), +('7', '100', '2', '94056', '77504', '20'), +('7', '100', '2', '49656', '72016', '20'), +('7', '100', '2', '62985', '59184', '20'), +('7', '100', '3', '111316', '177850', '20'), +('7', '100', '3', '111313', '170439', '20'), +('7', '100', '3', '111012', '158850', '20'), +('7', '100', '3', '111015', '156035', '20'), +('7', '100', '5', '111318', '170003', '20'), +('7', '100', '5', '111321', '169528', '20'), +('7', '100', '5', '111017', '158416', '20'), +('7', '100', '5', '111319', '148924', '20'), +('7', '100', '8', '111331', '166868', '20'), +('7', '100', '8', '111332', '149954', '20'), +('7', '100', '8', '111031', '137044', '20'), +('7', '100', '8', '111030', '130099', '20'), +('7', '100', '6', '111322', '152296', '20'), +('7', '100', '6', '111326', '149061', '20'), +('7', '100', '6', '111021', '133925', '20'), +('7', '100', '6', '111024', '133471', '20'), +('7', '100', '17', '49656', '72016', '20'), +('7', '100', '17', '56084', '55136', '20'), +('7', '100', '17', '56045', '53711', '20'), +('7', '100', '17', '104420', '49155', '20'), +('7', '100', '7', '56040', '95845', '20'), +('7', '100', '7', '56079', '89158', '20'), +('7', '100', '7', '104418', '84201', '20'), +('7', '100', '7', '49656', '72016', '20'), +('7', '100', '9', '62992', '111580', '20'), +('7', '100', '9', '104414', '91576', '20'), +('7', '100', '9', '49656', '72016', '20'), +('7', '100', '9', '54836', '71046', '20'), +('7', '100', '15', '111343', '182389', '20'), +('7', '100', '15', '111347', '181419', '20'), +('7', '100', '15', '111339', '178668', '20'), +('7', '100', '15', '111346', '178578', '20'), +('7', '100', '20', '111354', '188803', '20'), +('7', '100', '20', '111351', '183978', '20'), +('7', '100', '20', '111352', '182551', '20'), +('7', '100', '20', '111050', '162772', '20'), +('7', '100', '12', '56074', '104478', '20'), +('7', '100', '12', '104415', '93591', '20'), +('7', '100', '12', '81795', '83084', '20'), +('7', '100', '12', '49656', '72016', '20'), +('7', '100', '18', '62986', '82578', '20'), +('7', '100', '18', '49656', '72016', '20'), +('7', '100', '18', '104419', '67172', '20'), +('7', '100', '18', '54851', '53950', '20'), +('7', '100', '19', '62990', '102802', '20'), +('7', '100', '19', '104416', '86744', '20'), +('7', '100', '19', '49656', '72016', '20'), +('7', '100', '19', '102268', '49550', '20'), +('7', '100', '13', '111527', '519097', '20'), +('7', '100', '13', '111528', '468489', '20'), +('7', '100', '13', '111227', '453699', '20'), +('7', '100', '13', '111228', '430914', '20'), +('7', '100', '14', '111527', '519097', '20'), +('7', '100', '14', '111528', '468489', '20'), +('7', '100', '14', '111227', '453699', '20'), +('7', '100', '14', '111228', '430914', '20'), +('7', '100', '11', '133816', '202823', '20'), +('7', '100', '11', '111337', '143341', '20'), +('7', '100', '11', '111034', '131977', '20'), +('7', '100', '11', '111036', '131162', '20'), +('7', '100', '22', '12425', '0', '19'), +('7', '100', '22', '21807', '0', '19'), +('7', '100', '22', '21805', '0', '19'), +('7', '100', '22', '39342', '0', '19'), +('7', '100', '1', '98769', '303389', '19'), +('7', '100', '1', '111303', '181826', '19'), +('7', '100', '1', '111308', '181670', '19'), +('7', '100', '1', '111300', '180691', '19'), +('7', '100', '2', '104417', '94904', '19'), +('7', '100', '2', '94056', '77504', '19'), +('7', '100', '2', '49656', '72016', '19'), +('7', '100', '2', '62985', '59184', '19'), +('7', '100', '3', '111316', '177850', '19'), +('7', '100', '3', '111313', '170439', '19'), +('7', '100', '3', '111012', '158850', '19'), +('7', '100', '3', '111015', '156035', '19'), +('7', '100', '5', '111318', '170003', '19'), +('7', '100', '5', '111321', '169528', '19'), +('7', '100', '5', '111017', '158416', '19'), +('7', '100', '5', '111319', '148924', '19'), +('7', '100', '8', '111331', '166868', '19'), +('7', '100', '8', '111332', '149954', '19'), +('7', '100', '8', '111031', '137044', '19'), +('7', '100', '8', '111030', '130099', '19'), +('7', '100', '6', '111322', '152296', '19'), +('7', '100', '6', '111326', '149061', '19'), +('7', '100', '6', '111021', '133925', '19'), +('7', '100', '6', '111024', '133471', '19'), +('7', '100', '17', '49656', '72016', '19'), +('7', '100', '17', '56084', '55136', '19'), +('7', '100', '17', '56045', '53711', '19'), +('7', '100', '17', '104420', '49155', '19'), +('7', '100', '7', '56040', '95845', '19'), +('7', '100', '7', '56079', '89158', '19'), +('7', '100', '7', '104418', '84201', '19'), +('7', '100', '7', '49656', '72016', '19'), +('7', '100', '9', '62992', '111580', '19'), +('7', '100', '9', '104414', '91576', '19'), +('7', '100', '9', '49656', '72016', '19'), +('7', '100', '9', '54836', '71046', '19'), +('7', '100', '15', '111343', '182389', '19'), +('7', '100', '15', '111347', '181419', '19'), +('7', '100', '15', '111339', '178668', '19'), +('7', '100', '15', '111346', '178578', '19'), +('7', '100', '20', '111354', '188803', '19'), +('7', '100', '20', '111351', '183978', '19'), +('7', '100', '20', '111352', '182551', '19'), +('7', '100', '20', '111050', '162772', '19'), +('7', '100', '12', '56074', '104478', '19'), +('7', '100', '12', '104415', '93591', '19'), +('7', '100', '12', '81795', '83084', '19'), +('7', '100', '12', '49656', '72016', '19'), +('7', '100', '18', '62986', '82578', '19'), +('7', '100', '18', '49656', '72016', '19'), +('7', '100', '18', '104419', '67172', '19'), +('7', '100', '18', '54851', '53950', '19'), +('7', '100', '19', '62990', '102802', '19'), +('7', '100', '19', '104416', '86744', '19'), +('7', '100', '19', '49656', '72016', '19'), +('7', '100', '19', '102268', '49550', '19'), +('7', '100', '13', '111527', '517397', '19'), +('7', '100', '13', '111528', '468489', '19'), +('7', '100', '13', '111227', '452095', '19'), +('7', '100', '13', '111228', '430914', '19'), +('7', '100', '14', '111527', '517397', '19'), +('7', '100', '14', '111528', '468489', '19'), +('7', '100', '14', '111227', '452095', '19'), +('7', '100', '14', '111228', '430914', '19'), +('7', '100', '11', '133816', '202823', '19'), +('7', '100', '11', '111337', '143341', '19'), +('7', '100', '11', '111034', '131977', '19'), +('7', '100', '11', '111036', '131162', '19'), +('7', '101', '22', '12425', '0', '20'), +('7', '101', '22', '21807', '0', '20'), +('7', '101', '22', '21805', '0', '20'), +('7', '101', '22', '39342', '0', '20'), +('7', '101', '1', '98769', '303391', '20'), +('7', '101', '1', '111303', '181829', '20'), +('7', '101', '1', '111308', '181673', '20'), +('7', '101', '1', '111300', '180693', '20'), +('7', '101', '2', '104417', '94907', '20'), +('7', '101', '2', '94056', '77506', '20'), +('7', '101', '2', '49656', '72017', '20'), +('7', '101', '2', '62985', '59184', '20'), +('7', '101', '3', '111316', '177853', '20'), +('7', '101', '3', '111313', '170441', '20'), +('7', '101', '3', '111012', '158852', '20'), +('7', '101', '3', '111015', '156038', '20'), +('7', '101', '5', '111318', '170005', '20'), +('7', '101', '5', '111321', '169530', '20'), +('7', '101', '5', '111017', '158418', '20'), +('7', '101', '5', '111319', '148927', '20'), +('7', '101', '8', '111331', '166871', '20'), +('7', '101', '8', '111332', '149955', '20'), +('7', '101', '8', '111031', '137046', '20'), +('7', '101', '8', '111030', '130102', '20'), +('7', '101', '6', '111322', '152298', '20'), +('7', '101', '6', '111326', '149063', '20'), +('7', '101', '6', '111021', '133927', '20'), +('7', '101', '6', '111024', '133473', '20'), +('7', '101', '17', '49656', '72017', '20'), +('7', '101', '17', '56084', '55138', '20'), +('7', '101', '17', '56045', '53712', '20'), +('7', '101', '17', '104420', '49157', '20'), +('7', '101', '7', '56040', '95847', '20'), +('7', '101', '7', '56079', '89161', '20'), +('7', '101', '7', '104418', '84203', '20'), +('7', '101', '7', '49656', '72017', '20'), +('7', '101', '9', '62992', '111582', '20'), +('7', '101', '9', '104414', '91579', '20'), +('7', '101', '9', '49656', '72017', '20'), +('7', '101', '9', '54836', '71048', '20'), +('7', '101', '15', '111343', '182391', '20'), +('7', '101', '15', '111347', '181422', '20'), +('7', '101', '15', '111339', '178671', '20'), +('7', '101', '15', '111346', '178580', '20'), +('7', '101', '20', '111354', '188806', '20'), +('7', '101', '20', '111351', '183980', '20'), +('7', '101', '20', '111352', '182554', '20'), +('7', '101', '20', '111050', '162773', '20'), +('7', '101', '12', '56074', '104479', '20'), +('7', '101', '12', '104415', '93594', '20'), +('7', '101', '12', '81795', '83086', '20'), +('7', '101', '12', '49656', '72017', '20'), +('7', '101', '18', '62986', '82581', '20'), +('7', '101', '18', '49656', '72017', '20'), +('7', '101', '18', '104419', '67174', '20'), +('7', '101', '18', '54851', '53952', '20'), +('7', '101', '19', '62990', '102804', '20'), +('7', '101', '19', '104416', '86745', '20'), +('7', '101', '19', '49656', '72017', '20'), +('7', '101', '19', '102268', '49551', '20'), +('7', '101', '13', '111527', '519950', '20'), +('7', '101', '13', '111528', '469029', '20'), +('7', '101', '13', '111227', '454503', '20'), +('7', '101', '13', '111228', '431413', '20'), +('7', '101', '14', '111527', '519950', '20'), +('7', '101', '14', '111528', '469029', '20'), +('7', '101', '14', '111227', '454503', '20'), +('7', '101', '14', '111228', '431413', '20'), +('7', '101', '11', '133816', '202825', '20'), +('7', '101', '11', '111337', '143343', '20'), +('7', '101', '11', '111034', '131979', '20'), +('7', '101', '11', '111036', '131164', '20'), +('7', '102', '22', '12425', '0', '20'), +('7', '102', '22', '21807', '0', '20'), +('7', '102', '22', '21805', '0', '20'), +('7', '102', '22', '39342', '0', '20'), +('7', '102', '1', '98769', '303393', '20'), +('7', '102', '1', '111303', '181833', '20'), +('7', '102', '1', '111308', '181676', '20'), +('7', '102', '1', '111300', '180695', '20'), +('7', '102', '2', '104417', '94909', '20'), +('7', '102', '2', '94056', '77507', '20'), +('7', '102', '2', '49656', '72017', '20'), +('7', '102', '2', '62985', '59185', '20'), +('7', '102', '3', '111316', '177856', '20'), +('7', '102', '3', '111313', '170443', '20'), +('7', '102', '3', '111012', '158854', '20'), +('7', '102', '3', '111015', '156041', '20'), +('7', '102', '5', '111318', '170007', '20'), +('7', '102', '5', '111321', '169533', '20'), +('7', '102', '5', '111017', '158420', '20'), +('7', '102', '5', '111319', '148930', '20'), +('7', '102', '8', '111331', '166874', '20'), +('7', '102', '8', '111332', '149957', '20'), +('7', '102', '8', '111031', '137047', '20'), +('7', '102', '8', '111030', '130104', '20'), +('7', '102', '6', '111322', '152300', '20'), +('7', '102', '6', '111326', '149066', '20'), +('7', '102', '6', '111021', '133929', '20'), +('7', '102', '6', '111024', '133475', '20'), +('7', '102', '17', '49656', '72017', '20'), +('7', '102', '17', '56084', '55140', '20'), +('7', '102', '17', '56045', '53714', '20'), +('7', '102', '17', '104420', '49159', '20'), +('7', '102', '7', '56040', '95850', '20'), +('7', '102', '7', '56079', '89163', '20'), +('7', '102', '7', '104418', '84204', '20'), +('7', '102', '7', '49656', '72017', '20'), +('7', '102', '9', '62992', '111585', '20'), +('7', '102', '9', '104414', '91581', '20'), +('7', '102', '9', '49656', '72017', '20'), +('7', '102', '9', '54836', '71050', '20'), +('7', '102', '15', '111343', '182393', '20'), +('7', '102', '15', '111347', '181426', '20'), +('7', '102', '15', '111339', '178673', '20'), +('7', '102', '15', '111346', '178583', '20'), +('7', '102', '20', '111354', '188808', '20'), +('7', '102', '20', '111351', '183982', '20'), +('7', '102', '20', '111352', '182557', '20'), +('7', '102', '20', '111050', '162775', '20'), +('7', '102', '12', '56074', '104481', '20'), +('7', '102', '12', '104415', '93598', '20'), +('7', '102', '12', '81795', '83088', '20'), +('7', '102', '12', '49656', '72017', '20'), +('7', '102', '18', '62986', '82583', '20'), +('7', '102', '18', '49656', '72017', '20'), +('7', '102', '18', '104419', '67175', '20'), +('7', '102', '18', '54851', '53954', '20'), +('7', '102', '19', '62990', '102807', '20'), +('7', '102', '19', '104416', '86746', '20'), +('7', '102', '19', '49656', '72017', '20'), +('7', '102', '19', '102268', '49553', '20'), +('7', '102', '13', '111527', '520846', '20'), +('7', '102', '13', '111528', '469610', '20'), +('7', '102', '13', '111227', '455308', '20'), +('7', '102', '13', '111228', '431912', '20'), +('7', '102', '14', '111527', '520846', '20'), +('7', '102', '14', '111528', '469610', '20'), +('7', '102', '14', '111227', '455308', '20'), +('7', '102', '14', '111228', '431912', '20'), +('7', '102', '11', '133816', '202827', '20'), +('7', '102', '11', '111337', '143345', '20'), +('7', '102', '11', '111034', '131981', '20'), +('7', '102', '11', '111036', '131166', '20'), +('7', '103', '22', '12425', '0', '20'), +('7', '103', '22', '21807', '0', '20'), +('7', '103', '22', '21805', '0', '20'), +('7', '103', '22', '39342', '0', '20'), +('7', '103', '1', '98769', '303395', '20'), +('7', '103', '1', '111303', '181836', '20'), +('7', '103', '1', '111308', '181678', '20'), +('7', '103', '1', '111300', '180697', '20'), +('7', '103', '2', '104417', '94912', '20'), +('7', '103', '2', '94056', '77509', '20'), +('7', '103', '2', '49656', '72017', '20'), +('7', '103', '2', '62985', '59186', '20'), +('7', '103', '3', '111316', '177858', '20'), +('7', '103', '3', '111313', '170444', '20'), +('7', '103', '3', '111012', '158856', '20'), +('7', '103', '3', '111015', '156043', '20'), +('7', '103', '5', '111318', '170009', '20'), +('7', '103', '5', '111321', '169535', '20'), +('7', '103', '5', '111017', '158422', '20'), +('7', '103', '5', '111319', '148932', '20'), +('7', '103', '8', '111331', '166877', '20'), +('7', '103', '8', '111332', '149959', '20'), +('7', '103', '8', '111031', '137049', '20'), +('7', '103', '8', '111030', '130106', '20'), +('7', '103', '6', '111322', '152301', '20'), +('7', '103', '6', '111326', '149068', '20'), +('7', '103', '6', '111021', '133931', '20'), +('7', '103', '6', '111024', '133477', '20'), +('7', '103', '17', '49656', '72017', '20'), +('7', '103', '17', '56084', '55141', '20'), +('7', '103', '17', '56045', '53715', '20'), +('7', '103', '17', '104420', '49161', '20'), +('7', '103', '7', '56040', '95852', '20'), +('7', '103', '7', '56079', '89165', '20'), +('7', '103', '7', '104418', '84206', '20'), +('7', '103', '7', '49656', '72017', '20'), +('7', '103', '9', '62992', '111588', '20'), +('7', '103', '9', '104414', '91584', '20'), +('7', '103', '9', '49656', '72017', '20'), +('7', '103', '9', '54836', '71052', '20'), +('7', '103', '15', '111343', '182395', '20'), +('7', '103', '15', '111347', '181428', '20'), +('7', '103', '15', '111339', '178675', '20'), +('7', '103', '15', '111346', '178585', '20'), +('7', '103', '20', '111354', '188810', '20'), +('7', '103', '20', '111351', '183983', '20'), +('7', '103', '20', '111352', '182560', '20'), +('7', '103', '20', '111050', '162776', '20'), +('7', '103', '12', '56074', '104482', '20'), +('7', '103', '12', '104415', '93601', '20'), +('7', '103', '12', '81795', '83091', '20'), +('7', '103', '12', '49656', '72017', '20'), +('7', '103', '18', '62986', '82586', '20'), +('7', '103', '18', '49656', '72017', '20'), +('7', '103', '18', '104419', '67177', '20'), +('7', '103', '18', '54851', '53955', '20'), +('7', '103', '19', '62990', '102809', '20'), +('7', '103', '19', '104416', '86747', '20'), +('7', '103', '19', '49656', '72017', '20'), +('7', '103', '19', '102268', '49555', '20'), +('7', '103', '13', '111527', '521741', '20'), +('7', '103', '13', '111528', '470150', '20'), +('7', '103', '13', '111227', '456112', '20'), +('7', '103', '13', '111228', '432410', '20'), +('7', '103', '14', '111527', '521741', '20'), +('7', '103', '14', '111528', '470150', '20'), +('7', '103', '14', '111227', '456112', '20'), +('7', '103', '14', '111228', '432410', '20'), +('7', '103', '11', '133816', '202828', '20'), +('7', '103', '11', '111337', '143346', '20'), +('7', '103', '11', '111034', '131982', '20'), +('7', '103', '11', '111036', '131168', '20'), +('7', '104', '22', '12425', '0', '20'), +('7', '104', '22', '21807', '0', '20'), +('7', '104', '22', '21805', '0', '20'), +('7', '104', '22', '39342', '0', '20'), +('7', '104', '1', '98769', '303397', '20'), +('7', '104', '1', '111303', '181840', '20'), +('7', '104', '1', '111308', '181681', '20'), +('7', '104', '1', '111300', '180699', '20'), +('7', '104', '2', '104417', '94914', '20'), +('7', '104', '2', '94056', '77511', '20'), +('7', '104', '2', '49656', '72018', '20'), +('7', '104', '2', '62985', '59187', '20'), +('7', '104', '3', '111316', '177861', '20'), +('7', '104', '3', '111313', '170446', '20'), +('7', '104', '3', '111012', '158858', '20'), +('7', '104', '3', '111015', '156046', '20'), +('7', '104', '5', '111318', '170011', '20'), +('7', '104', '5', '111321', '169538', '20'), +('7', '104', '5', '111017', '158424', '20'), +('7', '104', '5', '111319', '148935', '20'), +('7', '104', '8', '111331', '166879', '20'), +('7', '104', '8', '111332', '149960', '20'), +('7', '104', '8', '111031', '137051', '20'), +('7', '104', '8', '111030', '130109', '20'), +('7', '104', '6', '111322', '152303', '20'), +('7', '104', '6', '111326', '149070', '20'), +('7', '104', '6', '111021', '133933', '20'), +('7', '104', '6', '111024', '133479', '20'), +('7', '104', '17', '49656', '72018', '20'), +('7', '104', '17', '56084', '55143', '20'), +('7', '104', '17', '56045', '53716', '20'), +('7', '104', '17', '104420', '49163', '20'), +('7', '104', '7', '56040', '95855', '20'), +('7', '104', '7', '56079', '89168', '20'), +('7', '104', '7', '104418', '84207', '20'), +('7', '104', '7', '49656', '72018', '20'), +('7', '104', '9', '62992', '111590', '20'), +('7', '104', '9', '104414', '91586', '20'), +('7', '104', '9', '49656', '72018', '20'), +('7', '104', '9', '54836', '71054', '20'), +('7', '104', '15', '111343', '182397', '20'), +('7', '104', '15', '111347', '181432', '20'), +('7', '104', '15', '111339', '178677', '20'), +('7', '104', '15', '111346', '178587', '20'), +('7', '104', '20', '111354', '188813', '20'), +('7', '104', '20', '111351', '183985', '20'), +('7', '104', '20', '111352', '182562', '20'), +('7', '104', '20', '111050', '162778', '20'), +('7', '104', '12', '56074', '104484', '20'), +('7', '104', '12', '104415', '93604', '20'), +('7', '104', '12', '81795', '83093', '20'), +('7', '104', '12', '49656', '72018', '20'), +('7', '104', '18', '62986', '82589', '20'), +('7', '104', '18', '49656', '72018', '20'), +('7', '104', '18', '104419', '67179', '20'), +('7', '104', '18', '54851', '53957', '20'), +('7', '104', '19', '62990', '102811', '20'), +('7', '104', '19', '104416', '86749', '20'), +('7', '104', '19', '49656', '72018', '20'), +('7', '104', '19', '102268', '49556', '20'), +('7', '104', '13', '111527', '522637', '20'), +('7', '104', '13', '111528', '470691', '20'), +('7', '104', '13', '111227', '456916', '20'), +('7', '104', '13', '111228', '432909', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '104', '14', '111527', '522637', '20'), +('7', '104', '14', '111528', '470691', '20'), +('7', '104', '14', '111227', '456916', '20'), +('7', '104', '14', '111228', '432909', '20'), +('7', '104', '11', '133816', '202831', '20'), +('7', '104', '11', '111337', '143349', '20'), +('7', '104', '11', '111034', '131984', '20'), +('7', '104', '11', '111036', '131170', '20'), +('7', '105', '22', '12425', '0', '23'), +('7', '105', '22', '21807', '0', '23'), +('7', '105', '22', '21805', '0', '23'), +('7', '105', '22', '39342', '0', '23'), +('7', '105', '1', '98769', '303399', '23'), +('7', '105', '1', '111303', '181843', '23'), +('7', '105', '1', '111308', '181684', '23'), +('7', '105', '1', '111300', '180701', '23'), +('7', '105', '2', '104417', '94917', '23'), +('7', '105', '2', '94056', '77512', '23'), +('7', '105', '2', '49656', '72018', '23'), +('7', '105', '2', '62985', '59188', '23'), +('7', '105', '3', '111316', '177864', '23'), +('7', '105', '3', '111313', '170448', '23'), +('7', '105', '3', '111012', '158860', '23'), +('7', '105', '3', '111015', '156049', '23'), +('7', '105', '5', '111318', '170013', '23'), +('7', '105', '5', '111321', '169540', '23'), +('7', '105', '5', '111017', '158426', '23'), +('7', '105', '5', '111319', '148938', '23'), +('7', '105', '8', '111331', '166882', '23'), +('7', '105', '8', '111332', '149962', '23'), +('7', '105', '8', '111031', '137052', '23'), +('7', '105', '8', '111030', '130112', '23'), +('7', '105', '6', '111322', '152305', '23'), +('7', '105', '6', '111326', '149072', '23'), +('7', '105', '6', '111021', '133935', '23'), +('7', '105', '6', '111024', '133481', '23'), +('7', '105', '17', '49656', '72018', '23'), +('7', '105', '17', '56084', '55145', '23'), +('7', '105', '17', '56045', '53717', '23'), +('7', '105', '17', '104420', '49165', '23'), +('7', '105', '7', '56040', '95857', '23'), +('7', '105', '7', '56079', '89170', '23'), +('7', '105', '7', '104418', '84209', '23'), +('7', '105', '7', '49656', '72018', '23'), +('7', '105', '9', '62992', '111593', '23'), +('7', '105', '9', '104414', '91589', '23'), +('7', '105', '9', '49656', '72018', '23'), +('7', '105', '9', '54836', '71056', '23'), +('7', '105', '15', '111343', '182399', '23'), +('7', '105', '15', '111347', '181435', '23'), +('7', '105', '15', '111339', '178679', '23'), +('7', '105', '15', '111346', '178590', '23'), +('7', '105', '20', '111354', '188815', '23'), +('7', '105', '20', '111351', '183987', '23'), +('7', '105', '20', '111352', '182565', '23'), +('7', '105', '20', '111050', '162780', '23'), +('7', '105', '12', '56074', '104485', '23'), +('7', '105', '12', '104415', '93607', '23'), +('7', '105', '12', '81795', '83096', '23'), +('7', '105', '12', '49656', '72018', '23'), +('7', '105', '18', '62986', '82591', '23'), +('7', '105', '18', '49656', '72018', '23'), +('7', '105', '18', '104419', '67181', '23'), +('7', '105', '18', '54851', '53959', '23'), +('7', '105', '19', '62990', '102813', '23'), +('7', '105', '19', '104416', '86750', '23'), +('7', '105', '19', '49656', '72018', '23'), +('7', '105', '19', '102268', '49558', '23'), +('7', '105', '13', '111527', '523532', '23'), +('7', '105', '13', '111528', '471231', '23'), +('7', '105', '13', '111227', '457721', '23'), +('7', '105', '13', '111228', '433450', '23'), +('7', '105', '14', '111527', '523532', '23'), +('7', '105', '14', '111528', '471231', '23'), +('7', '105', '14', '111227', '457721', '23'), +('7', '105', '14', '111228', '433450', '23'), +('7', '105', '11', '133816', '202833', '23'), +('7', '105', '11', '111337', '143351', '23'), +('7', '105', '11', '111034', '131986', '23'), +('7', '105', '11', '111036', '131172', '23'), +('7', '105', '22', '12425', '0', '22'), +('7', '105', '22', '21807', '0', '22'), +('7', '105', '22', '21805', '0', '22'), +('7', '105', '22', '39342', '0', '22'), +('7', '105', '1', '98769', '303399', '22'), +('7', '105', '1', '111303', '181843', '22'), +('7', '105', '1', '111308', '181684', '22'), +('7', '105', '1', '111300', '180701', '22'), +('7', '105', '2', '104417', '94917', '22'), +('7', '105', '2', '94056', '77512', '22'), +('7', '105', '2', '49656', '72018', '22'), +('7', '105', '2', '62985', '59188', '22'), +('7', '105', '3', '111316', '177864', '22'), +('7', '105', '3', '111313', '170448', '22'), +('7', '105', '3', '111012', '158860', '22'), +('7', '105', '3', '111015', '156049', '22'), +('7', '105', '5', '111318', '170013', '22'), +('7', '105', '5', '111321', '169540', '22'), +('7', '105', '5', '111017', '158426', '22'), +('7', '105', '5', '111319', '148938', '22'), +('7', '105', '8', '111331', '166882', '22'), +('7', '105', '8', '111332', '149962', '22'), +('7', '105', '8', '111031', '137052', '22'), +('7', '105', '8', '111030', '130112', '22'), +('7', '105', '6', '111322', '152305', '22'), +('7', '105', '6', '111326', '149072', '22'), +('7', '105', '6', '111021', '133935', '22'), +('7', '105', '6', '111024', '133481', '22'), +('7', '105', '17', '49656', '72018', '22'), +('7', '105', '17', '56084', '55145', '22'), +('7', '105', '17', '56045', '53717', '22'), +('7', '105', '17', '104420', '49165', '22'), +('7', '105', '7', '56040', '95857', '22'), +('7', '105', '7', '56079', '89170', '22'), +('7', '105', '7', '104418', '84209', '22'), +('7', '105', '7', '49656', '72018', '22'), +('7', '105', '9', '62992', '111593', '22'), +('7', '105', '9', '104414', '91589', '22'), +('7', '105', '9', '49656', '72018', '22'), +('7', '105', '9', '54836', '71056', '22'), +('7', '105', '15', '111343', '182399', '22'), +('7', '105', '15', '111347', '181435', '22'), +('7', '105', '15', '111339', '178679', '22'), +('7', '105', '15', '111346', '178590', '22'), +('7', '105', '20', '111354', '188815', '22'), +('7', '105', '20', '111351', '183987', '22'), +('7', '105', '20', '111352', '182565', '22'), +('7', '105', '20', '111050', '162780', '22'), +('7', '105', '12', '56074', '104485', '22'), +('7', '105', '12', '104415', '93607', '22'), +('7', '105', '12', '81795', '83096', '22'), +('7', '105', '12', '49656', '72018', '22'), +('7', '105', '18', '62986', '82591', '22'), +('7', '105', '18', '49656', '72018', '22'), +('7', '105', '18', '104419', '67181', '22'), +('7', '105', '18', '54851', '53959', '22'), +('7', '105', '19', '62990', '102813', '22'), +('7', '105', '19', '104416', '86750', '22'), +('7', '105', '19', '49656', '72018', '22'), +('7', '105', '19', '102268', '49558', '22'), +('7', '105', '13', '111527', '523532', '22'), +('7', '105', '13', '111528', '471231', '22'), +('7', '105', '13', '111227', '457721', '22'), +('7', '105', '13', '111228', '433450', '22'), +('7', '105', '14', '111527', '523532', '22'), +('7', '105', '14', '111528', '471231', '22'), +('7', '105', '14', '111227', '457721', '22'), +('7', '105', '14', '111228', '433450', '22'), +('7', '105', '11', '133816', '202833', '22'), +('7', '105', '11', '111337', '143351', '22'), +('7', '105', '11', '111034', '131986', '22'), +('7', '105', '11', '111036', '131172', '22'), +('7', '105', '22', '12425', '0', '21'), +('7', '105', '22', '21807', '0', '21'), +('7', '105', '22', '21805', '0', '21'), +('7', '105', '22', '39342', '0', '21'), +('7', '105', '1', '98769', '303399', '21'), +('7', '105', '1', '111303', '181843', '21'), +('7', '105', '1', '111308', '181684', '21'), +('7', '105', '1', '111300', '180701', '21'), +('7', '105', '2', '104417', '94917', '21'), +('7', '105', '2', '94056', '77512', '21'), +('7', '105', '2', '49656', '72018', '21'), +('7', '105', '2', '62985', '59188', '21'), +('7', '105', '3', '111316', '177864', '21'), +('7', '105', '3', '111313', '170448', '21'), +('7', '105', '3', '111012', '158860', '21'), +('7', '105', '3', '111015', '156049', '21'), +('7', '105', '5', '111318', '170013', '21'), +('7', '105', '5', '111321', '169540', '21'), +('7', '105', '5', '111017', '158426', '21'), +('7', '105', '5', '111319', '148938', '21'), +('7', '105', '8', '111331', '166882', '21'), +('7', '105', '8', '111332', '149962', '21'), +('7', '105', '8', '111031', '137052', '21'), +('7', '105', '8', '111030', '130112', '21'), +('7', '105', '6', '111322', '152305', '21'), +('7', '105', '6', '111326', '149072', '21'), +('7', '105', '6', '111021', '133935', '21'), +('7', '105', '6', '111024', '133481', '21'), +('7', '105', '17', '49656', '72018', '21'), +('7', '105', '17', '56084', '55145', '21'), +('7', '105', '17', '56045', '53717', '21'), +('7', '105', '17', '104420', '49165', '21'), +('7', '105', '7', '56040', '95857', '21'), +('7', '105', '7', '56079', '89170', '21'), +('7', '105', '7', '104418', '84209', '21'), +('7', '105', '7', '49656', '72018', '21'), +('7', '105', '9', '62992', '111593', '21'), +('7', '105', '9', '104414', '91589', '21'), +('7', '105', '9', '49656', '72018', '21'), +('7', '105', '9', '54836', '71056', '21'), +('7', '105', '15', '111343', '182399', '21'), +('7', '105', '15', '111347', '181435', '21'), +('7', '105', '15', '111339', '178679', '21'), +('7', '105', '15', '111346', '178590', '21'), +('7', '105', '20', '111354', '188815', '21'), +('7', '105', '20', '111351', '183987', '21'), +('7', '105', '20', '111352', '182565', '21'), +('7', '105', '20', '111050', '162780', '21'), +('7', '105', '12', '56074', '104485', '21'), +('7', '105', '12', '104415', '93607', '21'), +('7', '105', '12', '81795', '83096', '21'), +('7', '105', '12', '49656', '72018', '21'), +('7', '105', '18', '62986', '82591', '21'), +('7', '105', '18', '49656', '72018', '21'), +('7', '105', '18', '104419', '67181', '21'), +('7', '105', '18', '54851', '53959', '21'), +('7', '105', '19', '62990', '102813', '21'), +('7', '105', '19', '104416', '86750', '21'), +('7', '105', '19', '49656', '72018', '21'), +('7', '105', '19', '102268', '49558', '21'), +('7', '105', '13', '111527', '523532', '21'), +('7', '105', '13', '111528', '471231', '21'), +('7', '105', '13', '111227', '457721', '21'), +('7', '105', '13', '111228', '433450', '21'), +('7', '105', '14', '111527', '523532', '21'), +('7', '105', '14', '111528', '471231', '21'), +('7', '105', '14', '111227', '457721', '21'), +('7', '105', '14', '111228', '433450', '21'), +('7', '105', '11', '133816', '202833', '21'), +('7', '105', '11', '111337', '143351', '21'), +('7', '105', '11', '111034', '131986', '21'), +('7', '105', '11', '111036', '131172', '21'), +('7', '106', '22', '12425', '0', '23'), +('7', '106', '22', '21807', '0', '23'), +('7', '106', '22', '21805', '0', '23'), +('7', '106', '22', '39342', '0', '23'), +('7', '106', '1', '98769', '303401', '23'), +('7', '106', '1', '111303', '181847', '23'), +('7', '106', '1', '111308', '181687', '23'), +('7', '106', '1', '111300', '180703', '23'), +('7', '106', '2', '104417', '94920', '23'), +('7', '106', '2', '94056', '77514', '23'), +('7', '106', '2', '49656', '72019', '23'), +('7', '106', '2', '62985', '59188', '23'), +('7', '106', '3', '111316', '177866', '23'), +('7', '106', '3', '111313', '170450', '23'), +('7', '106', '3', '111012', '158862', '23'), +('7', '106', '3', '111015', '156051', '23'), +('7', '106', '5', '111318', '170015', '23'), +('7', '106', '5', '111321', '169543', '23'), +('7', '106', '5', '111017', '158428', '23'), +('7', '106', '5', '111319', '148941', '23'), +('7', '106', '8', '111331', '166885', '23'), +('7', '106', '8', '111332', '149964', '23'), +('7', '106', '8', '111031', '137054', '23'), +('7', '106', '8', '111030', '130114', '23'), +('7', '106', '6', '111322', '152307', '23'), +('7', '106', '6', '111326', '149074', '23'), +('7', '106', '6', '111021', '133937', '23'), +('7', '106', '6', '111024', '133483', '23'), +('7', '106', '17', '49656', '72019', '23'), +('7', '106', '17', '56084', '55147', '23'), +('7', '106', '17', '56045', '53718', '23'), +('7', '106', '17', '104420', '49167', '23'), +('7', '106', '7', '56040', '95860', '23'), +('7', '106', '7', '56079', '89173', '23'), +('7', '106', '7', '104418', '84211', '23'), +('7', '106', '7', '49656', '72019', '23'), +('7', '106', '9', '62992', '111596', '23'), +('7', '106', '9', '104414', '91591', '23'), +('7', '106', '9', '49656', '72019', '23'), +('7', '106', '9', '54836', '71059', '23'), +('7', '106', '15', '111343', '182401', '23'), +('7', '106', '15', '111347', '181438', '23'), +('7', '106', '15', '111339', '178682', '23'), +('7', '106', '15', '111346', '178592', '23'), +('7', '106', '20', '111354', '188818', '23'), +('7', '106', '20', '111351', '183988', '23'), +('7', '106', '20', '111352', '182568', '23'), +('7', '106', '20', '111050', '162781', '23'), +('7', '106', '12', '56074', '104486', '23'), +('7', '106', '12', '104415', '93611', '23'), +('7', '106', '12', '81795', '83098', '23'), +('7', '106', '12', '49656', '72019', '23'), +('7', '106', '18', '62986', '82594', '23'), +('7', '106', '18', '49656', '72019', '23'), +('7', '106', '18', '104419', '67182', '23'), +('7', '106', '18', '54851', '53961', '23'), +('7', '106', '19', '62990', '102816', '23'), +('7', '106', '19', '104416', '86751', '23'), +('7', '106', '19', '49656', '72019', '23'), +('7', '106', '19', '102268', '49560', '23'), +('7', '106', '13', '111527', '524428', '23'), +('7', '106', '13', '111528', '471771', '23'), +('7', '106', '13', '111227', '458485', '23'), +('7', '106', '13', '111228', '433949', '23'), +('7', '106', '14', '111527', '524428', '23'), +('7', '106', '14', '111528', '471771', '23'), +('7', '106', '14', '111227', '458485', '23'), +('7', '106', '14', '111228', '433949', '23'), +('7', '106', '11', '133816', '202835', '23'), +('7', '106', '11', '111337', '143353', '23'), +('7', '106', '11', '111034', '131988', '23'), +('7', '106', '11', '111036', '131174', '23'), +('7', '107', '22', '12425', '0', '23'), +('7', '107', '22', '21807', '0', '23'), +('7', '107', '22', '21805', '0', '23'), +('7', '107', '22', '39342', '0', '23'), +('7', '107', '1', '98769', '303403', '23'), +('7', '107', '1', '111303', '181851', '23'), +('7', '107', '1', '111308', '181690', '23'), +('7', '107', '1', '111300', '180705', '23'), +('7', '107', '2', '104417', '94922', '23'), +('7', '107', '2', '94056', '77515', '23'), +('7', '107', '2', '49656', '72019', '23'), +('7', '107', '2', '62985', '59189', '23'), +('7', '107', '3', '111316', '177869', '23'), +('7', '107', '3', '111313', '170452', '23'), +('7', '107', '3', '111012', '158864', '23'), +('7', '107', '3', '111015', '156054', '23'), +('7', '107', '5', '111318', '170016', '23'), +('7', '107', '5', '111321', '169545', '23'), +('7', '107', '5', '111017', '158430', '23'), +('7', '107', '5', '111319', '148944', '23'), +('7', '107', '8', '111331', '166888', '23'), +('7', '107', '8', '111332', '149965', '23'), +('7', '107', '8', '111031', '137056', '23'), +('7', '107', '8', '111030', '130117', '23'), +('7', '107', '6', '111322', '152309', '23'), +('7', '107', '6', '111326', '149076', '23'), +('7', '107', '6', '111021', '133939', '23'), +('7', '107', '6', '111024', '133485', '23'), +('7', '107', '17', '49656', '72019', '23'), +('7', '107', '17', '56084', '55148', '23'), +('7', '107', '17', '56045', '53720', '23'), +('7', '107', '17', '104420', '49169', '23'), +('7', '107', '7', '56040', '95862', '23'), +('7', '107', '7', '56079', '89175', '23'), +('7', '107', '7', '104418', '84212', '23'), +('7', '107', '7', '49656', '72019', '23'), +('7', '107', '9', '62992', '111598', '23'), +('7', '107', '9', '104414', '91594', '23'), +('7', '107', '9', '49656', '72019', '23'), +('7', '107', '9', '54836', '71061', '23'), +('7', '107', '15', '111343', '182403', '23'), +('7', '107', '15', '111347', '181441', '23'), +('7', '107', '15', '111339', '178684', '23'), +('7', '107', '15', '111346', '178595', '23'), +('7', '107', '20', '111354', '188820', '23'), +('7', '107', '20', '111351', '183990', '23'), +('7', '107', '20', '111352', '182571', '23'), +('7', '107', '20', '111050', '162783', '23'), +('7', '107', '12', '56074', '104488', '23'), +('7', '107', '12', '104415', '93614', '23'), +('7', '107', '12', '81795', '83100', '23'), +('7', '107', '12', '49656', '72019', '23'), +('7', '107', '18', '62986', '82597', '23'), +('7', '107', '18', '49656', '72019', '23'), +('7', '107', '18', '104419', '67184', '23'), +('7', '107', '18', '54851', '53962', '23'), +('7', '107', '19', '62990', '102818', '23'), +('7', '107', '19', '104416', '86752', '23'), +('7', '107', '19', '49656', '72019', '23'), +('7', '107', '19', '102268', '49561', '23'), +('7', '107', '13', '111527', '525281', '23'), +('7', '107', '13', '111528', '472311', '23'), +('7', '107', '13', '111227', '459289', '23'), +('7', '107', '13', '111228', '434448', '23'), +('7', '107', '14', '111527', '525281', '23'), +('7', '107', '14', '111528', '472311', '23'), +('7', '107', '14', '111227', '459289', '23'), +('7', '107', '14', '111228', '434448', '23'), +('7', '107', '11', '133816', '202837', '23'), +('7', '107', '11', '111337', '143355', '23'), +('7', '107', '11', '111034', '131990', '23'), +('7', '107', '11', '111036', '131177', '23'), +('7', '108', '22', '12425', '0', '23'), +('7', '108', '22', '21807', '0', '23'), +('7', '108', '22', '21805', '0', '23'), +('7', '108', '22', '39342', '0', '23'), +('7', '108', '1', '98769', '303406', '23'), +('7', '108', '1', '111303', '181854', '23'), +('7', '108', '1', '111308', '181692', '23'), +('7', '108', '1', '111300', '180708', '23'), +('7', '108', '2', '104417', '94925', '23'), +('7', '108', '2', '94056', '77517', '23'), +('7', '108', '2', '49656', '72019', '23'), +('7', '108', '2', '62985', '59190', '23'), +('7', '108', '3', '111316', '177872', '23'), +('7', '108', '3', '111313', '170454', '23'), +('7', '108', '3', '111012', '158866', '23'), +('7', '108', '3', '111015', '156057', '23'), +('7', '108', '5', '111318', '170018', '23'), +('7', '108', '5', '111321', '169548', '23'), +('7', '108', '5', '111017', '158432', '23'), +('7', '108', '5', '111319', '148947', '23'), +('7', '108', '8', '111331', '166891', '23'), +('7', '108', '8', '111332', '149967', '23'), +('7', '108', '8', '111031', '137058', '23'), +('7', '108', '8', '111030', '130119', '23'), +('7', '108', '6', '111322', '152311', '23'), +('7', '108', '6', '111326', '149079', '23'), +('7', '108', '6', '111021', '133941', '23'), +('7', '108', '6', '111024', '133487', '23'), +('7', '108', '17', '49656', '72019', '23'), +('7', '108', '17', '56084', '55150', '23'), +('7', '108', '17', '56045', '53721', '23'), +('7', '108', '17', '104420', '49171', '23'), +('7', '108', '7', '56040', '95865', '23'), +('7', '108', '7', '56079', '89178', '23'), +('7', '108', '7', '104418', '84214', '23'), +('7', '108', '7', '49656', '72019', '23'), +('7', '108', '9', '62992', '111601', '23'), +('7', '108', '9', '104414', '91597', '23'), +('7', '108', '9', '49656', '72019', '23'), +('7', '108', '9', '54836', '71063', '23'), +('7', '108', '15', '111343', '182405', '23'), +('7', '108', '15', '111347', '181445', '23'), +('7', '108', '15', '111339', '178686', '23'), +('7', '108', '15', '111346', '178597', '23'), +('7', '108', '20', '111354', '188823', '23'), +('7', '108', '20', '111351', '183991', '23'), +('7', '108', '20', '111352', '182574', '23'), +('7', '108', '20', '111050', '162785', '23'), +('7', '108', '12', '56074', '104489', '23'), +('7', '108', '12', '104415', '93618', '23'), +('7', '108', '12', '81795', '83103', '23'), +('7', '108', '12', '49656', '72019', '23'), +('7', '108', '18', '62986', '82600', '23'), +('7', '108', '18', '49656', '72019', '23'), +('7', '108', '18', '104419', '67186', '23'), +('7', '108', '18', '54851', '53964', '23'), +('7', '108', '19', '62990', '102821', '23'), +('7', '108', '19', '104416', '86753', '23'), +('7', '108', '19', '49656', '72019', '23'), +('7', '108', '19', '102268', '49563', '23'), +('7', '108', '13', '111527', '526176', '23'), +('7', '108', '13', '111528', '472851', '23'), +('7', '108', '13', '111227', '460094', '23'), +('7', '108', '13', '111228', '434947', '23'), +('7', '108', '14', '111527', '526176', '23'), +('7', '108', '14', '111528', '472851', '23'), +('7', '108', '14', '111227', '460094', '23'), +('7', '108', '14', '111228', '434947', '23'), +('7', '108', '11', '133816', '202839', '23'), +('7', '108', '11', '111337', '143357', '23'), +('7', '108', '11', '111034', '131992', '23'), +('7', '108', '11', '111036', '131179', '23'), +('7', '109', '22', '12425', '0', '23'), +('7', '109', '22', '21807', '0', '23'), +('7', '109', '22', '21805', '0', '23'), +('7', '109', '22', '39342', '0', '23'), +('7', '109', '1', '98769', '303407', '23'), +('7', '109', '1', '111303', '181857', '23'), +('7', '109', '1', '111308', '181695', '23'), +('7', '109', '1', '111300', '180709', '23'), +('7', '109', '2', '104417', '94927', '23'), +('7', '109', '2', '94056', '77518', '23'), +('7', '109', '2', '49656', '72020', '23'), +('7', '109', '2', '62985', '59191', '23'), +('7', '109', '3', '111316', '177874', '23'), +('7', '109', '3', '111313', '170456', '23'), +('7', '109', '3', '111012', '158868', '23'), +('7', '109', '3', '111015', '156059', '23'), +('7', '109', '5', '111318', '170020', '23'), +('7', '109', '5', '111321', '169550', '23'), +('7', '109', '5', '111017', '158434', '23'), +('7', '109', '5', '111319', '148950', '23'), +('7', '109', '8', '111331', '166893', '23'), +('7', '109', '8', '111332', '149968', '23'), +('7', '109', '8', '111031', '137059', '23'), +('7', '109', '8', '111030', '130121', '23'), +('7', '109', '6', '111322', '152313', '23'), +('7', '109', '6', '111326', '149080', '23'), +('7', '109', '6', '111021', '133943', '23'), +('7', '109', '6', '111024', '133488', '23'), +('7', '109', '17', '49656', '72020', '23'), +('7', '109', '17', '56084', '55152', '23'), +('7', '109', '17', '56045', '53722', '23'), +('7', '109', '17', '104420', '49173', '23'), +('7', '109', '7', '56040', '95867', '23'), +('7', '109', '7', '56079', '89180', '23'), +('7', '109', '7', '104418', '84216', '23'), +('7', '109', '7', '49656', '72020', '23'), +('7', '109', '9', '62992', '111603', '23'), +('7', '109', '9', '104414', '91599', '23'), +('7', '109', '9', '49656', '72020', '23'), +('7', '109', '9', '54836', '71065', '23'), +('7', '109', '15', '111343', '182407', '23'), +('7', '109', '15', '111347', '181447', '23'), +('7', '109', '15', '111339', '178688', '23'), +('7', '109', '15', '111346', '178600', '23'), +('7', '109', '20', '111354', '188825', '23'), +('7', '109', '20', '111351', '183993', '23'), +('7', '109', '20', '111352', '182576', '23'), +('7', '109', '20', '111050', '162786', '23'), +('7', '109', '12', '56074', '104491', '23'), +('7', '109', '12', '104415', '93621', '23'), +('7', '109', '12', '81795', '83105', '23'), +('7', '109', '12', '49656', '72020', '23'), +('7', '109', '18', '62986', '82602', '23'), +('7', '109', '18', '49656', '72020', '23'), +('7', '109', '18', '104419', '67188', '23'), +('7', '109', '18', '54851', '53966', '23'), +('7', '109', '19', '62990', '102823', '23'), +('7', '109', '19', '104416', '86754', '23'), +('7', '109', '19', '49656', '72020', '23'), +('7', '109', '19', '102268', '49564', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '109', '13', '111527', '527072', '23'), +('7', '109', '13', '111528', '473391', '23'), +('7', '109', '13', '111227', '460898', '23'), +('7', '109', '13', '111228', '435445', '23'), +('7', '109', '14', '111527', '527072', '23'), +('7', '109', '14', '111528', '473391', '23'), +('7', '109', '14', '111227', '460898', '23'), +('7', '109', '14', '111228', '435445', '23'), +('7', '109', '11', '133816', '202841', '23'), +('7', '109', '11', '111337', '143358', '23'), +('7', '109', '11', '111034', '131994', '23'), +('7', '109', '11', '111036', '131181', '23'), +('7', '110', '22', '12425', '0', '25'), +('7', '110', '22', '21807', '0', '25'), +('7', '110', '22', '39342', '0', '25'), +('7', '110', '22', '7867', '0', '25'), +('7', '110', '1', '98769', '303409', '25'), +('7', '110', '1', '111303', '181861', '25'), +('7', '110', '1', '111308', '181698', '25'), +('7', '110', '1', '111300', '180711', '25'), +('7', '110', '2', '104417', '94930', '25'), +('7', '110', '2', '94056', '77520', '25'), +('7', '110', '2', '49656', '72020', '25'), +('7', '110', '2', '62985', '59192', '25'), +('7', '110', '3', '111316', '177877', '25'), +('7', '110', '3', '111313', '170458', '25'), +('7', '110', '3', '111012', '158870', '25'), +('7', '110', '3', '111015', '156062', '25'), +('7', '110', '5', '111318', '170022', '25'), +('7', '110', '5', '111321', '169553', '25'), +('7', '110', '5', '111017', '158436', '25'), +('7', '110', '5', '111319', '148953', '25'), +('7', '110', '8', '111331', '166896', '25'), +('7', '110', '8', '111332', '149970', '25'), +('7', '110', '8', '111031', '137061', '25'), +('7', '110', '8', '111030', '130124', '25'), +('7', '110', '6', '111322', '152315', '25'), +('7', '110', '6', '111326', '149083', '25'), +('7', '110', '6', '111021', '133945', '25'), +('7', '110', '6', '111024', '133490', '25'), +('7', '110', '17', '49656', '72020', '25'), +('7', '110', '17', '56084', '55153', '25'), +('7', '110', '17', '56045', '53723', '25'), +('7', '110', '17', '104420', '49175', '25'), +('7', '110', '7', '56040', '95870', '25'), +('7', '110', '7', '56079', '89182', '25'), +('7', '110', '7', '104418', '84217', '25'), +('7', '110', '7', '49656', '72020', '25'), +('7', '110', '9', '62992', '111606', '25'), +('7', '110', '9', '104414', '91602', '25'), +('7', '110', '9', '49656', '72020', '25'), +('7', '110', '9', '54836', '71067', '25'), +('7', '110', '15', '111343', '182409', '25'), +('7', '110', '15', '111347', '181451', '25'), +('7', '110', '15', '111339', '178690', '25'), +('7', '110', '15', '111346', '178602', '25'), +('7', '110', '20', '111354', '188827', '25'), +('7', '110', '20', '111351', '183995', '25'), +('7', '110', '20', '111352', '182579', '25'), +('7', '110', '20', '111050', '162788', '25'), +('7', '110', '12', '56074', '104492', '25'), +('7', '110', '12', '104415', '93624', '25'), +('7', '110', '12', '81795', '83108', '25'), +('7', '110', '12', '49656', '72020', '25'), +('7', '110', '18', '62986', '82605', '25'), +('7', '110', '18', '49656', '72020', '25'), +('7', '110', '18', '104419', '67189', '25'), +('7', '110', '18', '54851', '53967', '25'), +('7', '110', '19', '62990', '102825', '25'), +('7', '110', '19', '104416', '86756', '25'), +('7', '110', '19', '49656', '72020', '25'), +('7', '110', '19', '102268', '49566', '25'), +('7', '110', '13', '111527', '529667', '25'), +('7', '110', '13', '111528', '473931', '25'), +('7', '110', '13', '111227', '463306', '25'), +('7', '110', '13', '111228', '435944', '25'), +('7', '110', '14', '111527', '529667', '25'), +('7', '110', '14', '111528', '473931', '25'), +('7', '110', '14', '111227', '463306', '25'), +('7', '110', '14', '111228', '435944', '25'), +('7', '110', '11', '85213', '270221', '25'), +('7', '110', '11', '133816', '202843', '25'), +('7', '110', '11', '111337', '143360', '25'), +('7', '110', '11', '111034', '131996', '25'), +('7', '110', '22', '12425', '0', '24'), +('7', '110', '22', '21807', '0', '24'), +('7', '110', '22', '39342', '0', '24'), +('7', '110', '22', '7867', '0', '24'), +('7', '110', '1', '98769', '303409', '24'), +('7', '110', '1', '111303', '181861', '24'), +('7', '110', '1', '111308', '181698', '24'), +('7', '110', '1', '111300', '180711', '24'), +('7', '110', '2', '104417', '94930', '24'), +('7', '110', '2', '94056', '77520', '24'), +('7', '110', '2', '49656', '72020', '24'), +('7', '110', '2', '62985', '59192', '24'), +('7', '110', '3', '111316', '177877', '24'), +('7', '110', '3', '111313', '170458', '24'), +('7', '110', '3', '111012', '158870', '24'), +('7', '110', '3', '111015', '156062', '24'), +('7', '110', '5', '111318', '170022', '24'), +('7', '110', '5', '111321', '169553', '24'), +('7', '110', '5', '111017', '158436', '24'), +('7', '110', '5', '111319', '148953', '24'), +('7', '110', '8', '111331', '166896', '24'), +('7', '110', '8', '111332', '149970', '24'), +('7', '110', '8', '111031', '137061', '24'), +('7', '110', '8', '111030', '130124', '24'), +('7', '110', '6', '111322', '152315', '24'), +('7', '110', '6', '111326', '149083', '24'), +('7', '110', '6', '111021', '133945', '24'), +('7', '110', '6', '111024', '133490', '24'), +('7', '110', '17', '49656', '72020', '24'), +('7', '110', '17', '56084', '55153', '24'), +('7', '110', '17', '56045', '53723', '24'), +('7', '110', '17', '104420', '49175', '24'), +('7', '110', '7', '56040', '95870', '24'), +('7', '110', '7', '56079', '89182', '24'), +('7', '110', '7', '104418', '84217', '24'), +('7', '110', '7', '49656', '72020', '24'), +('7', '110', '9', '62992', '111606', '24'), +('7', '110', '9', '104414', '91602', '24'), +('7', '110', '9', '49656', '72020', '24'), +('7', '110', '9', '54836', '71067', '24'), +('7', '110', '15', '111343', '182409', '24'), +('7', '110', '15', '111347', '181451', '24'), +('7', '110', '15', '111339', '178690', '24'), +('7', '110', '15', '111346', '178602', '24'), +('7', '110', '20', '111354', '188827', '24'), +('7', '110', '20', '111351', '183995', '24'), +('7', '110', '20', '111352', '182579', '24'), +('7', '110', '20', '111050', '162788', '24'), +('7', '110', '12', '56074', '104492', '24'), +('7', '110', '12', '104415', '93624', '24'), +('7', '110', '12', '81795', '83108', '24'), +('7', '110', '12', '49656', '72020', '24'), +('7', '110', '18', '62986', '82605', '24'), +('7', '110', '18', '49656', '72020', '24'), +('7', '110', '18', '104419', '67189', '24'), +('7', '110', '18', '54851', '53967', '24'), +('7', '110', '19', '62990', '102825', '24'), +('7', '110', '19', '104416', '86756', '24'), +('7', '110', '19', '49656', '72020', '24'), +('7', '110', '19', '102268', '49566', '24'), +('7', '110', '13', '111527', '529667', '24'), +('7', '110', '13', '111528', '473931', '24'), +('7', '110', '13', '111227', '463306', '24'), +('7', '110', '13', '111228', '435944', '24'), +('7', '110', '14', '111527', '529667', '24'), +('7', '110', '14', '111528', '473931', '24'), +('7', '110', '14', '111227', '463306', '24'), +('7', '110', '14', '111228', '435944', '24'), +('7', '110', '11', '85213', '270221', '24'), +('7', '110', '11', '133816', '202843', '24'), +('7', '110', '11', '111337', '143360', '24'), +('7', '110', '11', '111034', '131996', '24'), +('7', '111', '22', '12425', '0', '25'), +('7', '111', '22', '21807', '0', '25'), +('7', '111', '22', '39342', '0', '25'), +('7', '111', '22', '7867', '0', '25'), +('7', '111', '1', '98769', '303412', '25'), +('7', '111', '1', '111303', '181865', '25'), +('7', '111', '1', '111308', '181700', '25'), +('7', '111', '1', '111300', '180714', '25'), +('7', '111', '2', '104417', '94933', '25'), +('7', '111', '2', '94056', '77522', '25'), +('7', '111', '2', '49656', '72020', '25'), +('7', '111', '2', '62985', '59193', '25'), +('7', '111', '3', '111316', '177880', '25'), +('7', '111', '3', '111313', '170460', '25'), +('7', '111', '3', '111012', '158872', '25'), +('7', '111', '3', '111015', '156065', '25'), +('7', '111', '5', '111318', '170024', '25'), +('7', '111', '5', '111321', '169555', '25'), +('7', '111', '5', '111017', '158438', '25'), +('7', '111', '5', '111319', '148956', '25'), +('7', '111', '8', '111331', '166899', '25'), +('7', '111', '8', '111332', '149972', '25'), +('7', '111', '8', '111031', '137063', '25'), +('7', '111', '8', '111030', '130126', '25'), +('7', '111', '6', '111322', '152317', '25'), +('7', '111', '6', '111326', '149085', '25'), +('7', '111', '6', '111021', '133946', '25'), +('7', '111', '6', '111024', '133492', '25'), +('7', '111', '17', '49656', '72020', '25'), +('7', '111', '17', '56084', '55155', '25'), +('7', '111', '17', '56045', '53724', '25'), +('7', '111', '17', '104420', '49177', '25'), +('7', '111', '7', '56040', '95872', '25'), +('7', '111', '7', '56079', '89185', '25'), +('7', '111', '7', '104418', '84219', '25'), +('7', '111', '7', '49656', '72020', '25'), +('7', '111', '9', '62992', '111609', '25'), +('7', '111', '9', '104414', '91604', '25'), +('7', '111', '9', '49656', '72020', '25'), +('7', '111', '9', '54836', '71069', '25'), +('7', '111', '15', '111343', '182411', '25'), +('7', '111', '15', '111347', '181454', '25'), +('7', '111', '15', '111339', '178693', '25'), +('7', '111', '15', '111346', '178605', '25'), +('7', '111', '20', '111354', '188830', '25'), +('7', '111', '20', '111351', '183996', '25'), +('7', '111', '20', '111352', '182582', '25'), +('7', '111', '20', '111050', '162789', '25'), +('7', '111', '12', '56074', '104494', '25'), +('7', '111', '12', '104415', '93628', '25'), +('7', '111', '12', '81795', '83110', '25'), +('7', '111', '12', '49656', '72020', '25'), +('7', '111', '18', '62986', '82608', '25'), +('7', '111', '18', '49656', '72020', '25'), +('7', '111', '18', '104419', '67191', '25'), +('7', '111', '18', '54851', '53969', '25'), +('7', '111', '19', '62990', '102827', '25'), +('7', '111', '19', '104416', '86757', '25'), +('7', '111', '19', '49656', '72020', '25'), +('7', '111', '19', '102268', '49568', '25'), +('7', '111', '13', '111527', '530563', '25'), +('7', '111', '13', '111528', '474471', '25'), +('7', '111', '13', '111227', '464111', '25'), +('7', '111', '13', '111228', '436443', '25'), +('7', '111', '14', '111527', '530563', '25'), +('7', '111', '14', '111528', '474471', '25'), +('7', '111', '14', '111227', '464111', '25'), +('7', '111', '14', '111228', '436443', '25'), +('7', '111', '11', '85213', '270223', '25'), +('7', '111', '11', '133816', '202845', '25'), +('7', '111', '11', '111337', '143363', '25'), +('7', '111', '11', '111034', '131998', '25'), +('7', '112', '22', '12425', '0', '25'), +('7', '112', '22', '21807', '0', '25'), +('7', '112', '22', '39342', '0', '25'), +('7', '112', '22', '7867', '0', '25'), +('7', '112', '1', '98769', '303414', '25'), +('7', '112', '1', '111303', '181868', '25'), +('7', '112', '1', '111308', '181703', '25'), +('7', '112', '1', '111300', '180716', '25'), +('7', '112', '2', '104417', '94935', '25'), +('7', '112', '2', '94056', '77523', '25'), +('7', '112', '2', '49656', '72021', '25'), +('7', '112', '2', '62985', '59193', '25'), +('7', '112', '3', '111316', '177882', '25'), +('7', '112', '3', '111313', '170462', '25'), +('7', '112', '3', '111012', '158874', '25'), +('7', '112', '3', '111015', '156067', '25'), +('7', '112', '5', '111318', '170026', '25'), +('7', '112', '5', '111321', '169558', '25'), +('7', '112', '5', '111017', '158440', '25'), +('7', '112', '5', '111319', '148959', '25'), +('7', '112', '8', '111331', '166902', '25'), +('7', '112', '8', '111332', '149973', '25'), +('7', '112', '8', '111031', '137064', '25'), +('7', '112', '8', '111030', '130129', '25'), +('7', '112', '6', '111322', '152319', '25'), +('7', '112', '6', '111326', '149087', '25'), +('7', '112', '6', '111021', '133948', '25'), +('7', '112', '6', '111024', '133494', '25'), +('7', '112', '17', '49656', '72021', '25'), +('7', '112', '17', '56084', '55157', '25'), +('7', '112', '17', '56045', '53725', '25'), +('7', '112', '17', '104420', '49179', '25'), +('7', '112', '7', '56040', '95875', '25'), +('7', '112', '7', '56079', '89187', '25'), +('7', '112', '7', '104418', '84221', '25'), +('7', '112', '7', '49656', '72021', '25'), +('7', '112', '9', '62992', '111612', '25'), +('7', '112', '9', '104414', '91607', '25'), +('7', '112', '9', '49656', '72021', '25'), +('7', '112', '9', '54836', '71071', '25'), +('7', '112', '15', '111343', '182413', '25'), +('7', '112', '15', '111347', '181457', '25'), +('7', '112', '15', '111339', '178695', '25'), +('7', '112', '15', '111346', '178607', '25'), +('7', '112', '20', '111354', '188832', '25'), +('7', '112', '20', '111351', '183998', '25'), +('7', '112', '20', '111352', '182585', '25'), +('7', '112', '20', '111050', '162791', '25'), +('7', '112', '12', '56074', '104495', '25'), +('7', '112', '12', '104415', '93631', '25'), +('7', '112', '12', '81795', '83112', '25'), +('7', '112', '12', '49656', '72021', '25'), +('7', '112', '18', '62986', '82611', '25'), +('7', '112', '18', '49656', '72021', '25'), +('7', '112', '18', '104419', '67193', '25'), +('7', '112', '18', '54851', '53971', '25'), +('7', '112', '19', '62990', '102830', '25'), +('7', '112', '19', '104416', '86758', '25'), +('7', '112', '19', '49656', '72021', '25'), +('7', '112', '19', '102268', '49569', '25'), +('7', '112', '13', '111527', '531458', '25'), +('7', '112', '13', '111528', '475012', '25'), +('7', '112', '13', '111227', '464875', '25'), +('7', '112', '13', '111228', '436984', '25'), +('7', '112', '14', '111527', '531458', '25'), +('7', '112', '14', '111528', '475012', '25'), +('7', '112', '14', '111227', '464875', '25'), +('7', '112', '14', '111228', '436984', '25'), +('7', '112', '11', '85213', '270225', '25'), +('7', '112', '11', '133816', '202847', '25'), +('7', '112', '11', '111337', '143365', '25'), +('7', '112', '11', '111034', '132000', '25'), +('7', '113', '22', '12425', '0', '25'), +('7', '113', '22', '21807', '0', '25'), +('7', '113', '22', '39342', '0', '25'), +('7', '113', '22', '7867', '0', '25'), +('7', '113', '1', '98769', '303416', '25'), +('7', '113', '1', '111303', '181872', '25'), +('7', '113', '1', '111308', '181706', '25'), +('7', '113', '1', '111300', '180718', '25'), +('7', '113', '2', '104417', '94938', '25'), +('7', '113', '2', '94056', '77525', '25'), +('7', '113', '2', '49656', '72021', '25'), +('7', '113', '2', '62985', '59194', '25'), +('7', '113', '3', '111316', '177885', '25'), +('7', '113', '3', '111313', '170464', '25'), +('7', '113', '3', '111012', '158877', '25'), +('7', '113', '3', '111015', '156070', '25'), +('7', '113', '5', '111318', '170028', '25'), +('7', '113', '5', '111321', '169560', '25'), +('7', '113', '5', '111017', '158442', '25'), +('7', '113', '5', '111319', '148962', '25'), +('7', '113', '8', '111331', '166905', '25'), +('7', '113', '8', '111332', '149975', '25'), +('7', '113', '8', '111031', '137066', '25'), +('7', '113', '8', '111030', '130132', '25'), +('7', '113', '6', '111322', '152321', '25'), +('7', '113', '6', '111326', '149089', '25'), +('7', '113', '6', '111021', '133950', '25'), +('7', '113', '6', '111024', '133496', '25'), +('7', '113', '17', '49656', '72021', '25'), +('7', '113', '17', '56084', '55159', '25'), +('7', '113', '17', '56045', '53727', '25'), +('7', '113', '17', '104420', '49181', '25'), +('7', '113', '7', '56040', '95877', '25'), +('7', '113', '7', '56079', '89189', '25'), +('7', '113', '7', '104418', '84222', '25'), +('7', '113', '7', '49656', '72021', '25'), +('7', '113', '9', '62992', '111614', '25'), +('7', '113', '9', '104414', '91610', '25'), +('7', '113', '9', '49656', '72021', '25'), +('7', '113', '9', '54836', '71073', '25'), +('7', '113', '15', '111343', '182415', '25'), +('7', '113', '15', '111347', '181460', '25'), +('7', '113', '15', '111339', '178697', '25'), +('7', '113', '15', '111346', '178610', '25'), +('7', '113', '20', '111354', '188835', '25'), +('7', '113', '20', '111351', '184000', '25'), +('7', '113', '20', '111352', '182587', '25'), +('7', '113', '20', '111050', '162793', '25'), +('7', '113', '12', '56074', '104496', '25'), +('7', '113', '12', '104415', '93634', '25'), +('7', '113', '12', '81795', '83115', '25'), +('7', '113', '12', '49656', '72021', '25'), +('7', '113', '18', '62986', '82613', '25'), +('7', '113', '18', '49656', '72021', '25'), +('7', '113', '18', '104419', '67195', '25'), +('7', '113', '18', '54851', '53972', '25'), +('7', '113', '19', '62990', '102832', '25'), +('7', '113', '19', '104416', '86759', '25'), +('7', '113', '19', '49656', '72021', '25'), +('7', '113', '19', '102268', '49571', '25'), +('7', '113', '13', '111527', '532311', '25'), +('7', '113', '13', '111528', '475552', '25'), +('7', '113', '13', '111227', '465679', '25'), +('7', '113', '13', '111228', '437482', '25'), +('7', '113', '14', '111527', '532311', '25'), +('7', '113', '14', '111528', '475552', '25'), +('7', '113', '14', '111227', '465679', '25'), +('7', '113', '14', '111228', '437482', '25'), +('7', '113', '11', '85213', '270227', '25'), +('7', '113', '11', '133816', '202849', '25'), +('7', '113', '11', '111337', '143367', '25'), +('7', '113', '11', '111034', '132002', '25'), +('7', '114', '22', '12425', '0', '25'), +('7', '114', '22', '21807', '0', '25'), +('7', '114', '22', '39342', '0', '25'), +('7', '114', '22', '7867', '0', '25'), +('7', '114', '1', '98769', '303418', '25'), +('7', '114', '1', '111303', '181875', '25'), +('7', '114', '1', '111308', '181709', '25'), +('7', '114', '1', '111300', '180720', '25'), +('7', '114', '2', '104417', '94940', '25'), +('7', '114', '2', '94056', '77527', '25'), +('7', '114', '2', '49656', '72021', '25'), +('7', '114', '2', '62985', '59195', '25'), +('7', '114', '3', '111316', '177888', '25'), +('7', '114', '3', '111313', '170466', '25'), +('7', '114', '3', '111012', '158879', '25'), +('7', '114', '3', '111015', '156073', '25'), +('7', '114', '5', '111318', '170030', '25'), +('7', '114', '5', '111321', '169563', '25'), +('7', '114', '5', '111017', '158444', '25'), +('7', '114', '5', '111319', '148965', '25'), +('7', '114', '8', '111331', '166908', '25'), +('7', '114', '8', '111332', '149977', '25'), +('7', '114', '8', '111031', '137068', '25'), +('7', '114', '8', '111030', '130134', '25'), +('7', '114', '6', '111322', '152323', '25'), +('7', '114', '6', '111326', '149091', '25'), +('7', '114', '6', '111021', '133952', '25'), +('7', '114', '6', '111024', '133498', '25'), +('7', '114', '17', '49656', '72021', '25'), +('7', '114', '17', '56084', '55161', '25'), +('7', '114', '17', '56045', '53728', '25'), +('7', '114', '17', '104420', '49183', '25'), +('7', '114', '7', '56040', '95880', '25'), +('7', '114', '7', '56079', '89192', '25'), +('7', '114', '7', '104418', '84224', '25'), +('7', '114', '7', '49656', '72021', '25'), +('7', '114', '9', '62992', '111617', '25'), +('7', '114', '9', '104414', '91612', '25'), +('7', '114', '9', '49656', '72021', '25'), +('7', '114', '9', '54836', '71075', '25'), +('7', '114', '15', '111343', '182417', '25'), +('7', '114', '15', '111347', '181464', '25'), +('7', '114', '15', '111339', '178699', '25'), +('7', '114', '15', '111346', '178612', '25'), +('7', '114', '20', '111354', '188837', '25'), +('7', '114', '20', '111351', '184001', '25'), +('7', '114', '20', '111352', '182590', '25'), +('7', '114', '20', '111050', '162794', '25'), +('7', '114', '12', '56074', '104498', '25'), +('7', '114', '12', '104415', '93638', '25'), +('7', '114', '12', '81795', '83117', '25'), +('7', '114', '12', '49656', '72021', '25'), +('7', '114', '18', '62986', '82616', '25'), +('7', '114', '18', '49656', '72021', '25'), +('7', '114', '18', '104419', '67197', '25'), +('7', '114', '18', '54851', '53974', '25'), +('7', '114', '19', '62990', '102834', '25'), +('7', '114', '19', '104416', '86760', '25'), +('7', '114', '19', '49656', '72021', '25'), +('7', '114', '19', '102268', '49573', '25'), +('7', '114', '13', '111527', '533207', '25'), +('7', '114', '13', '111528', '476092', '25'), +('7', '114', '13', '111227', '466484', '25'), +('7', '114', '13', '111228', '437981', '25'), +('7', '114', '14', '111527', '533207', '25'), +('7', '114', '14', '111528', '476092', '25'), +('7', '114', '14', '111227', '466484', '25'), +('7', '114', '14', '111228', '437981', '25'), +('7', '114', '11', '85213', '270229', '25'), +('7', '114', '11', '133816', '202851', '25'), +('7', '114', '11', '111337', '143369', '25'), +('7', '114', '11', '111034', '132004', '25'), +('7', '115', '22', '12425', '0', '26'), +('7', '115', '22', '21807', '0', '26'), +('7', '115', '22', '39342', '0', '26'), +('7', '115', '22', '7867', '0', '26'), +('7', '115', '1', '98769', '303420', '26'), +('7', '115', '1', '111303', '181879', '26'), +('7', '115', '1', '111308', '181712', '26'), +('7', '115', '1', '111300', '180722', '26'), +('7', '115', '2', '104417', '94943', '26'), +('7', '115', '2', '94056', '77528', '26'), +('7', '115', '2', '49656', '72022', '26'), +('7', '115', '2', '62985', '59196', '26'), +('7', '115', '3', '111316', '177890', '26'), +('7', '115', '3', '111313', '170468', '26'), +('7', '115', '3', '111012', '158881', '26'), +('7', '115', '3', '111015', '156075', '26'), +('7', '115', '5', '111318', '170032', '26'), +('7', '115', '5', '111321', '169565', '26'), +('7', '115', '5', '111017', '158446', '26'), +('7', '115', '5', '111319', '148968', '26'), +('7', '115', '8', '111331', '166911', '26'), +('7', '115', '8', '111332', '149978', '26'), +('7', '115', '8', '111031', '137070', '26'), +('7', '115', '8', '111030', '130137', '26'), +('7', '115', '6', '111322', '152325', '26'), +('7', '115', '6', '111326', '149094', '26'), +('7', '115', '6', '111021', '133954', '26'), +('7', '115', '6', '111024', '133500', '26'), +('7', '115', '17', '49656', '72022', '26'), +('7', '115', '17', '56084', '55162', '26'), +('7', '115', '17', '56045', '53729', '26'), +('7', '115', '17', '104420', '49185', '26'), +('7', '115', '7', '56040', '95883', '26'), +('7', '115', '7', '56079', '89194', '26'), +('7', '115', '7', '104418', '84225', '26'), +('7', '115', '7', '49656', '72022', '26'), +('7', '115', '9', '62992', '111620', '26'), +('7', '115', '9', '104414', '91615', '26'), +('7', '115', '9', '49656', '72022', '26'), +('7', '115', '9', '54836', '71077', '26'), +('7', '115', '15', '111343', '182419', '26'), +('7', '115', '15', '111347', '181467', '26'), +('7', '115', '15', '111339', '178702', '26'), +('7', '115', '15', '111346', '178615', '26'), +('7', '115', '20', '111354', '188839', '26'), +('7', '115', '20', '111351', '184003', '26'), +('7', '115', '20', '111352', '182593', '26'), +('7', '115', '20', '111050', '162796', '26'), +('7', '115', '12', '56074', '104499', '26'), +('7', '115', '12', '104415', '93641', '26'), +('7', '115', '12', '81795', '83120', '26'), +('7', '115', '12', '49656', '72022', '26'), +('7', '115', '18', '62986', '82619', '26'), +('7', '115', '18', '49656', '72022', '26'), +('7', '115', '18', '104419', '67198', '26'), +('7', '115', '18', '54851', '53976', '26'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('7', '115', '19', '62990', '102837', '26'), +('7', '115', '19', '104416', '86761', '26'), +('7', '115', '19', '49656', '72022', '26'), +('7', '115', '19', '102268', '49574', '26'), +('7', '115', '13', '111527', '534102', '26'), +('7', '115', '13', '111528', '476632', '26'), +('7', '115', '13', '111227', '467288', '26'), +('7', '115', '13', '111228', '438480', '26'), +('7', '115', '14', '111527', '534102', '26'), +('7', '115', '14', '111528', '476632', '26'), +('7', '115', '14', '111227', '467288', '26'), +('7', '115', '14', '111228', '438480', '26'), +('7', '115', '11', '85213', '270231', '26'), +('7', '115', '11', '133816', '202853', '26'), +('7', '115', '11', '111337', '143371', '26'), +('7', '115', '11', '111034', '132006', '26'), +('8', '1', '22', '10323', '0', '0'), +('8', '1', '22', '10664', '0', '0'), +('8', '1', '22', '9246', '0', '0'), +('8', '1', '22', '21509', '0', '0'), +('8', '1', '1', '14701', '2452', '0'), +('8', '1', '1', '14702', '2050', '0'), +('8', '1', '1', '30361', '1440', '0'), +('8', '1', '1', '10165', '873', '0'), +('8', '1', '2', '4301', '3663', '0'), +('8', '1', '2', '4831', '3092', '0'), +('8', '1', '2', '10142', '3012', '0'), +('8', '1', '2', '10143', '2853', '0'), +('8', '1', '3', '27720', '3109', '0'), +('8', '1', '3', '2711', '1753', '0'), +('8', '1', '3', '21002', '1057', '0'), +('8', '1', '3', '21014', '1057', '0'), +('8', '1', '5', '27723', '4086', '0'), +('8', '1', '5', '14703', '3850', '0'), +('8', '1', '5', '14565', '3482', '0'), +('8', '1', '5', '14700', '2553', '0'), +('8', '1', '8', '11621', '11486', '0'), +('8', '1', '8', '11551', '4827', '0'), +('8', '1', '8', '11603', '3782', '0'), +('8', '1', '8', '1409', '3461', '0'), +('8', '1', '6', '1557', '6760', '0'), +('8', '1', '6', '27721', '2022', '0'), +('8', '1', '6', '4405', '1870', '0'), +('8', '1', '6', '25062', '1691', '0'), +('8', '1', '17', '4832', '6213', '0'), +('8', '1', '17', '4862', '5452', '0'), +('8', '1', '17', '11623', '4375', '0'), +('8', '1', '17', '4154', '4039', '0'), +('8', '1', '7', '4833', '3443', '0'), +('8', '1', '7', '4863', '2738', '0'), +('8', '1', '7', '4343', '2208', '0'), +('8', '1', '7', '4155', '1973', '0'), +('8', '1', '9', '1541', '2833', '0'), +('8', '1', '9', '4834', '2623', '0'), +('8', '1', '9', '4864', '2159', '0'), +('8', '1', '9', '12189', '1961', '0'), +('8', '1', '15', '10366', '3254', '0'), +('8', '1', '15', '14679', '2955', '0'), +('8', '1', '15', '10151', '2700', '0'), +('8', '1', '15', '14678', '2404', '0'), +('8', '1', '20', '11601', '7573', '0'), +('8', '1', '20', '11666', '5537', '0'), +('8', '1', '20', '2920', '4467', '0'), +('8', '1', '20', '1365', '4200', '0'), +('8', '1', '12', '4835', '4574', '0'), +('8', '1', '12', '20655', '4281', '0'), +('8', '1', '12', '4865', '2665', '0'), +('8', '1', '12', '3310', '2661', '0'), +('8', '1', '18', '4836', '3208', '0'), +('8', '1', '18', '4866', '2934', '0'), +('8', '1', '18', '4346', '2621', '0'), +('8', '1', '18', '4158', '2005', '0'), +('8', '1', '19', '4837', '3962', '0'), +('8', '1', '19', '68239', '2928', '0'), +('8', '1', '19', '4867', '2880', '0'), +('8', '1', '19', '4159', '1973', '0'), +('8', '1', '13', '27725', '4279', '0'), +('8', '1', '13', '5416', '3308', '0'), +('8', '1', '13', '7257', '3266', '0'), +('8', '1', '13', '6692', '3070', '0'), +('8', '1', '14', '5416', '3308', '0'), +('8', '1', '14', '7257', '3266', '0'), +('8', '1', '14', '6692', '3070', '0'), +('8', '1', '14', '7407', '3046', '0'), +('8', '1', '11', '13353', '1500', '0'), +('8', '1', '11', '14762', '1291', '0'), +('8', '1', '11', '9246', '930', '0'), +('8', '1', '11', '20677', '900', '0'), +('8', '2', '22', '10323', '0', '0'), +('8', '2', '22', '10664', '0', '0'), +('8', '2', '22', '9246', '0', '0'), +('8', '2', '22', '21509', '0', '0'), +('8', '2', '1', '14701', '2452', '0'), +('8', '2', '1', '14702', '2050', '0'), +('8', '2', '1', '30361', '1440', '0'), +('8', '2', '1', '10165', '873', '0'), +('8', '2', '2', '4301', '3663', '0'), +('8', '2', '2', '4831', '3105', '0'), +('8', '2', '2', '10142', '3012', '0'), +('8', '2', '2', '10143', '2853', '0'), +('8', '2', '3', '27720', '3121', '0'), +('8', '2', '3', '2711', '1765', '0'), +('8', '2', '3', '21002', '1057', '0'), +('8', '2', '3', '21014', '1057', '0'), +('8', '2', '5', '27723', '4091', '0'), +('8', '2', '5', '14703', '3850', '0'), +('8', '2', '5', '14565', '3487', '0'), +('8', '2', '5', '14700', '2553', '0'), +('8', '2', '8', '11621', '11486', '0'), +('8', '2', '8', '11551', '4827', '0'), +('8', '2', '8', '11603', '3803', '0'), +('8', '2', '8', '1409', '3461', '0'), +('8', '2', '6', '1557', '6760', '0'), +('8', '2', '6', '27721', '2022', '0'), +('8', '2', '6', '4405', '1870', '0'), +('8', '2', '6', '25062', '1691', '0'), +('8', '2', '17', '4832', '6234', '0'), +('8', '2', '17', '4862', '5452', '0'), +('8', '2', '17', '11623', '4375', '0'), +('8', '2', '17', '4154', '4047', '0'), +('8', '2', '7', '4833', '3443', '0'), +('8', '2', '7', '4863', '2759', '0'), +('8', '2', '7', '4343', '2222', '0'), +('8', '2', '7', '4155', '1973', '0'), +('8', '2', '9', '1541', '2833', '0'), +('8', '2', '9', '4834', '2623', '0'), +('8', '2', '9', '4864', '2166', '0'), +('8', '2', '9', '12189', '1961', '0'), +('8', '2', '15', '10366', '3254', '0'), +('8', '2', '15', '14679', '2955', '0'), +('8', '2', '15', '10151', '2700', '0'), +('8', '2', '15', '14678', '2404', '0'), +('8', '2', '20', '11601', '7588', '0'), +('8', '2', '20', '11666', '5547', '0'), +('8', '2', '20', '2920', '4467', '0'), +('8', '2', '20', '1365', '4200', '0'), +('8', '2', '12', '4835', '4581', '0'), +('8', '2', '12', '20655', '4289', '0'), +('8', '2', '12', '4865', '2665', '0'), +('8', '2', '12', '3310', '2661', '0'), +('8', '2', '18', '4836', '3216', '0'), +('8', '2', '18', '4866', '2947', '0'), +('8', '2', '18', '4346', '2621', '0'), +('8', '2', '18', '4158', '2005', '0'), +('8', '2', '19', '4837', '3974', '0'), +('8', '2', '19', '68239', '2935', '0'), +('8', '2', '19', '4867', '2893', '0'), +('8', '2', '19', '4159', '1973', '0'), +('8', '2', '13', '27725', '4279', '0'), +('8', '2', '13', '5416', '3308', '0'), +('8', '2', '13', '7257', '3266', '0'), +('8', '2', '13', '6692', '3070', '0'), +('8', '2', '14', '5416', '3308', '0'), +('8', '2', '14', '7257', '3266', '0'), +('8', '2', '14', '6692', '3070', '0'), +('8', '2', '14', '7407', '3046', '0'), +('8', '2', '11', '13353', '1500', '0'), +('8', '2', '11', '14762', '1291', '0'), +('8', '2', '11', '9246', '954', '0'), +('8', '2', '11', '20677', '900', '0'), +('8', '3', '22', '10323', '0', '0'), +('8', '3', '22', '10664', '0', '0'), +('8', '3', '22', '9246', '0', '0'), +('8', '3', '22', '21509', '0', '0'), +('8', '3', '1', '14701', '2452', '0'), +('8', '3', '1', '14702', '2050', '0'), +('8', '3', '1', '30361', '1440', '0'), +('8', '3', '1', '10165', '873', '0'), +('8', '3', '2', '4301', '3663', '0'), +('8', '3', '2', '4831', '3117', '0'), +('8', '3', '2', '10142', '3012', '0'), +('8', '3', '2', '10143', '2853', '0'), +('8', '3', '3', '27720', '3132', '0'), +('8', '3', '3', '2711', '1776', '0'), +('8', '3', '3', '21002', '1057', '0'), +('8', '3', '3', '21014', '1057', '0'), +('8', '3', '5', '27723', '4097', '0'), +('8', '3', '5', '14703', '3850', '0'), +('8', '3', '5', '14565', '3493', '0'), +('8', '3', '5', '14700', '2553', '0'), +('8', '3', '8', '11621', '11486', '0'), +('8', '3', '8', '11551', '4827', '0'), +('8', '3', '8', '11603', '3825', '0'), +('8', '3', '8', '1409', '3461', '0'), +('8', '3', '6', '1557', '6760', '0'), +('8', '3', '6', '27721', '2022', '0'), +('8', '3', '6', '4405', '1870', '0'), +('8', '3', '6', '25062', '1691', '0'), +('8', '3', '17', '4832', '6256', '0'), +('8', '3', '17', '4862', '5452', '0'), +('8', '3', '17', '11623', '4375', '0'), +('8', '3', '17', '4154', '4054', '0'), +('8', '3', '7', '4833', '3443', '0'), +('8', '3', '7', '4863', '2781', '0'), +('8', '3', '7', '4343', '2237', '0'), +('8', '3', '7', '4155', '1973', '0'), +('8', '3', '9', '1541', '2833', '0'), +('8', '3', '9', '4834', '2623', '0'), +('8', '3', '9', '4864', '2173', '0'), +('8', '3', '9', '12189', '1961', '0'), +('8', '3', '15', '10366', '3254', '0'), +('8', '3', '15', '14679', '2955', '0'), +('8', '3', '15', '10151', '2700', '0'), +('8', '3', '15', '14678', '2404', '0'), +('8', '3', '20', '11601', '7602', '0'), +('8', '3', '20', '11666', '5557', '0'), +('8', '3', '20', '2920', '4467', '0'), +('8', '3', '20', '1365', '4200', '0'), +('8', '3', '12', '4835', '4589', '0'), +('8', '3', '12', '20655', '4296', '0'), +('8', '3', '12', '4865', '2665', '0'), +('8', '3', '12', '3310', '2661', '0'), +('8', '3', '18', '4836', '3223', '0'), +('8', '3', '18', '4866', '2960', '0'), +('8', '3', '18', '4346', '2621', '0'), +('8', '3', '18', '4158', '2005', '0'), +('8', '3', '19', '4837', '3986', '0'), +('8', '3', '19', '68239', '2943', '0'), +('8', '3', '19', '4867', '2906', '0'), +('8', '3', '19', '4159', '1973', '0'), +('8', '3', '13', '27725', '4279', '0'), +('8', '3', '13', '5416', '3308', '0'), +('8', '3', '13', '7257', '3266', '0'), +('8', '3', '13', '6692', '3070', '0'), +('8', '3', '14', '5416', '3308', '0'), +('8', '3', '14', '7257', '3266', '0'), +('8', '3', '14', '6692', '3070', '0'), +('8', '3', '14', '7407', '3046', '0'), +('8', '3', '11', '13353', '1500', '0'), +('8', '3', '11', '14762', '1291', '0'), +('8', '3', '11', '9246', '978', '0'), +('8', '3', '11', '20677', '900', '0'), +('8', '4', '22', '10323', '0', '0'), +('8', '4', '22', '10664', '0', '0'), +('8', '4', '22', '9246', '0', '0'), +('8', '4', '22', '21509', '0', '0'), +('8', '4', '1', '14701', '2452', '0'), +('8', '4', '1', '14702', '2050', '0'), +('8', '4', '1', '30361', '1440', '0'), +('8', '4', '1', '10165', '873', '0'), +('8', '4', '2', '4301', '3663', '0'), +('8', '4', '2', '4831', '3129', '0'), +('8', '4', '2', '10142', '3012', '0'), +('8', '4', '2', '10143', '2853', '0'), +('8', '4', '3', '27720', '3144', '0'), +('8', '4', '3', '2711', '1788', '0'), +('8', '4', '3', '21002', '1057', '0'), +('8', '4', '3', '21014', '1057', '0'), +('8', '4', '5', '27723', '4103', '0'), +('8', '4', '5', '14703', '3850', '0'), +('8', '4', '5', '14565', '3499', '0'), +('8', '4', '5', '14700', '2553', '0'), +('8', '4', '8', '11621', '11486', '0'), +('8', '4', '8', '11551', '4827', '0'), +('8', '4', '8', '11603', '3847', '0'), +('8', '4', '8', '1409', '3461', '0'), +('8', '4', '6', '1557', '6760', '0'), +('8', '4', '6', '27721', '2022', '0'), +('8', '4', '6', '4405', '1870', '0'), +('8', '4', '6', '4302', '1696', '0'), +('8', '4', '17', '4832', '6278', '0'), +('8', '4', '17', '4862', '5452', '0'), +('8', '4', '17', '11623', '4375', '0'), +('8', '4', '17', '4154', '4061', '0'), +('8', '4', '7', '4833', '3443', '0'), +('8', '4', '7', '4863', '2803', '0'), +('8', '4', '7', '4343', '2251', '0'), +('8', '4', '7', '4155', '1973', '0'), +('8', '4', '9', '1541', '2833', '0'), +('8', '4', '9', '4834', '2623', '0'), +('8', '4', '9', '4864', '2181', '0'), +('8', '4', '9', '12189', '1961', '0'), +('8', '4', '15', '10366', '3254', '0'), +('8', '4', '15', '14679', '2955', '0'), +('8', '4', '15', '10151', '2700', '0'), +('8', '4', '15', '14678', '2404', '0'), +('8', '4', '20', '11601', '7617', '0'), +('8', '4', '20', '11666', '5567', '0'), +('8', '4', '20', '2920', '4467', '0'), +('8', '4', '20', '1365', '4200', '0'), +('8', '4', '12', '4835', '4596', '0'), +('8', '4', '12', '20655', '4304', '0'), +('8', '4', '12', '4865', '2665', '0'), +('8', '4', '12', '3310', '2661', '0'), +('8', '4', '18', '4836', '3230', '0'), +('8', '4', '18', '4866', '2974', '0'), +('8', '4', '18', '4346', '2621', '0'), +('8', '4', '18', '4158', '2005', '0'), +('8', '4', '19', '4837', '3999', '0'), +('8', '4', '19', '68239', '2950', '0'), +('8', '4', '19', '4867', '2919', '0'), +('8', '4', '19', '4159', '1973', '0'), +('8', '4', '13', '27725', '4279', '0'), +('8', '4', '13', '5416', '3308', '0'), +('8', '4', '13', '7257', '3266', '0'), +('8', '4', '13', '6692', '3070', '0'), +('8', '4', '14', '5416', '3308', '0'), +('8', '4', '14', '7257', '3266', '0'), +('8', '4', '14', '6692', '3070', '0'), +('8', '4', '14', '7407', '3046', '0'), +('8', '4', '11', '13353', '1500', '0'), +('8', '4', '11', '14762', '1291', '0'), +('8', '4', '11', '9246', '1003', '0'), +('8', '4', '11', '20677', '900', '0'), +('8', '5', '22', '10323', '0', '0'), +('8', '5', '22', '10664', '0', '0'), +('8', '5', '22', '9246', '0', '0'), +('8', '5', '22', '21509', '0', '0'), +('8', '5', '1', '14701', '2452', '0'), +('8', '5', '1', '14702', '2050', '0'), +('8', '5', '1', '30361', '1440', '0'), +('8', '5', '1', '10165', '873', '0'), +('8', '5', '2', '4301', '3663', '0'), +('8', '5', '2', '4831', '3141', '0'), +('8', '5', '2', '10142', '3012', '0'), +('8', '5', '2', '10143', '2853', '0'), +('8', '5', '3', '27720', '3156', '0'), +('8', '5', '3', '2711', '1800', '0'), +('8', '5', '3', '21014', '1057', '0'), +('8', '5', '3', '21002', '1057', '0'), +('8', '5', '5', '27723', '4109', '0'), +('8', '5', '5', '14703', '3850', '0'), +('8', '5', '5', '14565', '3505', '0'), +('8', '5', '5', '14700', '2553', '0'), +('8', '5', '8', '11621', '11486', '0'), +('8', '5', '8', '11551', '4827', '0'), +('8', '5', '8', '11603', '3869', '0'), +('8', '5', '8', '1409', '3461', '0'), +('8', '5', '6', '1557', '6760', '0'), +('8', '5', '6', '27721', '2022', '0'), +('8', '5', '6', '4405', '1870', '0'), +('8', '5', '6', '4302', '1704', '0'), +('8', '5', '17', '4832', '6300', '0'), +('8', '5', '17', '4862', '5452', '0'), +('8', '5', '17', '11623', '4375', '0'), +('8', '5', '17', '4154', '4068', '0'), +('8', '5', '7', '4833', '3443', '0'), +('8', '5', '7', '4863', '2825', '0'), +('8', '5', '7', '4343', '2266', '0'), +('8', '5', '7', '4155', '1973', '0'), +('8', '5', '9', '1541', '2833', '0'), +('8', '5', '9', '4834', '2623', '0'), +('8', '5', '9', '4864', '2188', '0'), +('8', '5', '9', '12189', '1961', '0'), +('8', '5', '15', '10366', '3254', '0'), +('8', '5', '15', '14679', '2955', '0'), +('8', '5', '15', '10151', '2700', '0'), +('8', '5', '15', '14678', '2404', '0'), +('8', '5', '20', '11601', '7631', '0'), +('8', '5', '20', '11666', '5578', '0'), +('8', '5', '20', '2920', '4467', '0'), +('8', '5', '20', '1365', '4200', '0'), +('8', '5', '12', '4835', '4603', '0'), +('8', '5', '12', '20655', '4312', '0'), +('8', '5', '12', '4865', '2665', '0'), +('8', '5', '12', '3310', '2661', '0'), +('8', '5', '18', '4836', '3237', '0'), +('8', '5', '18', '4866', '2987', '0'), +('8', '5', '18', '4346', '2621', '0'), +('8', '5', '18', '4158', '2005', '0'), +('8', '5', '19', '4837', '4011', '0'), +('8', '5', '19', '68239', '2957', '0'), +('8', '5', '19', '4867', '2932', '0'), +('8', '5', '19', '4159', '1973', '0'), +('8', '5', '13', '27725', '4279', '0'), +('8', '5', '13', '5416', '3308', '0'), +('8', '5', '13', '7257', '3266', '0'), +('8', '5', '13', '6692', '3070', '0'), +('8', '5', '14', '5416', '3308', '0'), +('8', '5', '14', '7257', '3266', '0'), +('8', '5', '14', '6692', '3070', '0'), +('8', '5', '14', '7407', '3046', '0'), +('8', '5', '11', '13353', '1500', '0'), +('8', '5', '11', '14762', '1291', '0'), +('8', '5', '11', '9246', '1027', '0'), +('8', '5', '11', '20677', '900', '0'), +('8', '6', '22', '10323', '0', '0'), +('8', '6', '22', '10664', '0', '0'), +('8', '6', '22', '9246', '0', '0'), +('8', '6', '22', '21509', '0', '0'), +('8', '6', '1', '14701', '2452', '0'), +('8', '6', '1', '14702', '2050', '0'), +('8', '6', '1', '30361', '1440', '0'), +('8', '6', '1', '10165', '873', '0'), +('8', '6', '2', '4301', '3663', '0'), +('8', '6', '2', '4831', '3153', '0'), +('8', '6', '2', '10142', '3012', '0'), +('8', '6', '2', '10143', '2853', '0'), +('8', '6', '3', '27720', '3167', '0'), +('8', '6', '3', '2711', '1811', '0'), +('8', '6', '3', '71529', '1110', '0'), +('8', '6', '3', '21014', '1057', '0'), +('8', '6', '5', '27723', '4115', '0'), +('8', '6', '5', '14703', '3850', '0'), +('8', '6', '5', '14565', '3511', '0'), +('8', '6', '5', '14700', '2553', '0'), +('8', '6', '8', '11621', '11486', '0'), +('8', '6', '8', '11551', '4827', '0'), +('8', '6', '8', '11603', '3890', '0'), +('8', '6', '8', '1409', '3461', '0'), +('8', '6', '6', '1557', '6760', '0'), +('8', '6', '6', '27721', '2022', '0'), +('8', '6', '6', '4405', '1870', '0'), +('8', '6', '6', '4302', '1713', '0'), +('8', '6', '17', '4832', '6321', '0'), +('8', '6', '17', '4862', '5452', '0'), +('8', '6', '17', '11623', '4375', '0'), +('8', '6', '17', '4154', '4076', '0'), +('8', '6', '7', '4833', '3443', '0'), +('8', '6', '7', '4863', '2846', '0'), +('8', '6', '7', '4343', '2280', '0'), +('8', '6', '7', '4155', '1973', '0'), +('8', '6', '9', '1541', '2833', '0'), +('8', '6', '9', '4834', '2623', '0'), +('8', '6', '9', '4864', '2195', '0'), +('8', '6', '9', '12189', '1961', '0'), +('8', '6', '15', '10366', '3254', '0'), +('8', '6', '15', '14679', '2955', '0'), +('8', '6', '15', '10151', '2700', '0'), +('8', '6', '15', '14678', '2404', '0'), +('8', '6', '20', '11601', '7646', '0'), +('8', '6', '20', '11666', '5588', '0'), +('8', '6', '20', '2920', '4467', '0'), +('8', '6', '20', '1365', '4200', '0'), +('8', '6', '12', '4835', '4610', '0'), +('8', '6', '12', '20655', '4319', '0'), +('8', '6', '12', '4865', '2665', '0'), +('8', '6', '12', '3310', '2661', '0'), +('8', '6', '18', '4836', '3245', '0'), +('8', '6', '18', '4866', '3000', '0'), +('8', '6', '18', '4346', '2621', '0'), +('8', '6', '18', '4158', '2005', '0'), +('8', '6', '19', '4837', '4023', '0'), +('8', '6', '19', '68239', '2964', '0'), +('8', '6', '19', '4867', '2945', '0'), +('8', '6', '19', '4159', '1973', '0'), +('8', '6', '13', '27725', '4279', '0'), +('8', '6', '13', '5416', '3308', '0'), +('8', '6', '13', '7257', '3266', '0'), +('8', '6', '13', '6692', '3070', '0'), +('8', '6', '14', '5416', '3308', '0'), +('8', '6', '14', '7257', '3266', '0'), +('8', '6', '14', '6692', '3070', '0'), +('8', '6', '14', '7407', '3046', '0'), +('8', '6', '11', '13353', '1500', '0'), +('8', '6', '11', '14762', '1291', '0'), +('8', '6', '11', '9246', '1051', '0'), +('8', '6', '11', '20677', '900', '0'), +('8', '7', '22', '10323', '0', '0'), +('8', '7', '22', '10664', '0', '0'), +('8', '7', '22', '9246', '0', '0'), +('8', '7', '22', '21509', '0', '0'), +('8', '7', '1', '14701', '2452', '0'), +('8', '7', '1', '14702', '2050', '0'), +('8', '7', '1', '30361', '1440', '0'), +('8', '7', '1', '10165', '873', '0'), +('8', '7', '2', '4301', '3663', '0'), +('8', '7', '2', '4831', '3165', '0'), +('8', '7', '2', '10142', '3012', '0'), +('8', '7', '2', '10143', '2853', '0'), +('8', '7', '3', '27720', '3179', '0'), +('8', '7', '3', '2711', '1823', '0'), +('8', '7', '3', '71529', '1300', '0'), +('8', '7', '3', '21014', '1057', '0'), +('8', '7', '5', '27723', '4121', '0'), +('8', '7', '5', '14703', '3850', '0'), +('8', '7', '5', '14565', '3517', '0'), +('8', '7', '5', '14700', '2553', '0'), +('8', '7', '8', '11621', '11486', '0'), +('8', '7', '8', '11551', '4827', '0'), +('8', '7', '8', '11603', '3912', '0'), +('8', '7', '8', '1409', '3461', '0'), +('8', '7', '6', '1557', '6760', '0'), +('8', '7', '6', '27721', '2022', '0'), +('8', '7', '6', '4405', '1870', '0'), +('8', '7', '6', '4302', '1723', '0'), +('8', '7', '17', '4832', '6347', '0'), +('8', '7', '17', '4862', '5452', '0'), +('8', '7', '17', '11623', '4375', '0'), +('8', '7', '17', '4154', '4084', '0'), +('8', '7', '7', '4833', '3443', '0'), +('8', '7', '7', '4863', '2868', '0'), +('8', '7', '7', '4343', '2297', '0'), +('8', '7', '7', '4155', '1973', '0'), +('8', '7', '9', '1541', '2833', '0'), +('8', '7', '9', '4834', '2623', '0'), +('8', '7', '9', '4864', '2202', '0'), +('8', '7', '9', '12189', '1961', '0'), +('8', '7', '15', '10366', '3254', '0'), +('8', '7', '15', '14679', '2955', '0'), +('8', '7', '15', '10151', '2700', '0'), +('8', '7', '15', '14678', '2404', '0'), +('8', '7', '20', '11601', '7663', '0'), +('8', '7', '20', '11666', '5600', '0'), +('8', '7', '20', '2920', '4467', '0'), +('8', '7', '20', '1365', '4200', '0'), +('8', '7', '12', '4835', '4619', '0'), +('8', '7', '12', '20655', '4328', '0'), +('8', '7', '12', '4865', '2665', '0'), +('8', '7', '12', '3310', '2661', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '7', '18', '4836', '3253', '0'), +('8', '7', '18', '4866', '3015', '0'), +('8', '7', '18', '4346', '2621', '0'), +('8', '7', '18', '4158', '2005', '0'), +('8', '7', '19', '4837', '4035', '0'), +('8', '7', '19', '68239', '2972', '0'), +('8', '7', '19', '4867', '2960', '0'), +('8', '7', '19', '4159', '1973', '0'), +('8', '7', '13', '27725', '4279', '0'), +('8', '7', '13', '5416', '3308', '0'), +('8', '7', '13', '7257', '3266', '0'), +('8', '7', '13', '6692', '3070', '0'), +('8', '7', '14', '5416', '3308', '0'), +('8', '7', '14', '7257', '3266', '0'), +('8', '7', '14', '6692', '3070', '0'), +('8', '7', '14', '7407', '3046', '0'), +('8', '7', '11', '13353', '1500', '0'), +('8', '7', '11', '14762', '1291', '0'), +('8', '7', '11', '9246', '1075', '0'), +('8', '7', '11', '20677', '900', '0'), +('8', '8', '22', '10323', '0', '0'), +('8', '8', '22', '10664', '0', '0'), +('8', '8', '22', '9246', '0', '0'), +('8', '8', '22', '21509', '0', '0'), +('8', '8', '1', '14701', '2452', '0'), +('8', '8', '1', '14702', '2050', '0'), +('8', '8', '1', '30361', '1440', '0'), +('8', '8', '1', '10165', '873', '0'), +('8', '8', '2', '4301', '3663', '0'), +('8', '8', '2', '4831', '3177', '0'), +('8', '8', '2', '10142', '3012', '0'), +('8', '8', '2', '10143', '2853', '0'), +('8', '8', '3', '27720', '3191', '0'), +('8', '8', '3', '2711', '1835', '0'), +('8', '8', '3', '71529', '1490', '0'), +('8', '8', '3', '21014', '1057', '0'), +('8', '8', '5', '27723', '4127', '0'), +('8', '8', '5', '14703', '3850', '0'), +('8', '8', '5', '14565', '3523', '0'), +('8', '8', '5', '14700', '2553', '0'), +('8', '8', '8', '11621', '11486', '0'), +('8', '8', '8', '11551', '4827', '0'), +('8', '8', '8', '11603', '3934', '0'), +('8', '8', '8', '1409', '3461', '0'), +('8', '8', '6', '1557', '6760', '0'), +('8', '8', '6', '27721', '2022', '0'), +('8', '8', '6', '4405', '1870', '0'), +('8', '8', '6', '4302', '1732', '0'), +('8', '8', '17', '4832', '6369', '0'), +('8', '8', '17', '4862', '5452', '0'), +('8', '8', '17', '11623', '4375', '0'), +('8', '8', '17', '4154', '4091', '0'), +('8', '8', '7', '4833', '3443', '0'), +('8', '8', '7', '4863', '2890', '0'), +('8', '8', '7', '4343', '2312', '0'), +('8', '8', '7', '4155', '1973', '0'), +('8', '8', '9', '1541', '2833', '0'), +('8', '8', '9', '4834', '2623', '0'), +('8', '8', '9', '4864', '2210', '0'), +('8', '8', '9', '12189', '1961', '0'), +('8', '8', '15', '10366', '3254', '0'), +('8', '8', '15', '14679', '2955', '0'), +('8', '8', '15', '10151', '2700', '0'), +('8', '8', '15', '14678', '2404', '0'), +('8', '8', '20', '11601', '7677', '0'), +('8', '8', '20', '11666', '5610', '0'), +('8', '8', '20', '2920', '4467', '0'), +('8', '8', '20', '1365', '4200', '0'), +('8', '8', '12', '4835', '4626', '0'), +('8', '8', '12', '20655', '4335', '0'), +('8', '8', '12', '4865', '2665', '0'), +('8', '8', '12', '3310', '2661', '0'), +('8', '8', '18', '4836', '3260', '0'), +('8', '8', '18', '4866', '3028', '0'), +('8', '8', '18', '4346', '2621', '0'), +('8', '8', '18', '4158', '2005', '0'), +('8', '8', '19', '4837', '4047', '0'), +('8', '8', '19', '68239', '2979', '0'), +('8', '8', '19', '4867', '2974', '0'), +('8', '8', '19', '4159', '1973', '0'), +('8', '8', '13', '27725', '4279', '0'), +('8', '8', '13', '5416', '3308', '0'), +('8', '8', '13', '7257', '3266', '0'), +('8', '8', '13', '6692', '3070', '0'), +('8', '8', '14', '5416', '3308', '0'), +('8', '8', '14', '7257', '3266', '0'), +('8', '8', '14', '6692', '3070', '0'), +('8', '8', '14', '7407', '3046', '0'), +('8', '8', '11', '13353', '1500', '0'), +('8', '8', '11', '14762', '1291', '0'), +('8', '8', '11', '9246', '1099', '0'), +('8', '8', '11', '20677', '900', '0'), +('8', '9', '22', '10323', '0', '0'), +('8', '9', '22', '10664', '0', '0'), +('8', '9', '22', '9246', '0', '0'), +('8', '9', '22', '21509', '0', '0'), +('8', '9', '1', '14701', '2452', '0'), +('8', '9', '1', '14702', '2050', '0'), +('8', '9', '1', '30361', '1440', '0'), +('8', '9', '1', '10165', '873', '0'), +('8', '9', '2', '4301', '3663', '0'), +('8', '9', '2', '4831', '3189', '0'), +('8', '9', '2', '10142', '3012', '0'), +('8', '9', '2', '10143', '2853', '0'), +('8', '9', '3', '27720', '3203', '0'), +('8', '9', '3', '2711', '1847', '0'), +('8', '9', '3', '71529', '1682', '0'), +('8', '9', '3', '21014', '1057', '0'), +('8', '9', '5', '27723', '4133', '0'), +('8', '9', '5', '14703', '3850', '0'), +('8', '9', '5', '14565', '3529', '0'), +('8', '9', '5', '14700', '2553', '0'), +('8', '9', '8', '11621', '11486', '0'), +('8', '9', '8', '11551', '4827', '0'), +('8', '9', '8', '11603', '3956', '0'), +('8', '9', '8', '1409', '3461', '0'), +('8', '9', '6', '1557', '6760', '0'), +('8', '9', '6', '27721', '2022', '0'), +('8', '9', '6', '4405', '1870', '0'), +('8', '9', '6', '4302', '1741', '0'), +('8', '9', '17', '4832', '6390', '0'), +('8', '9', '17', '4862', '5452', '0'), +('8', '9', '17', '11623', '4375', '0'), +('8', '9', '17', '4154', '4099', '0'), +('8', '9', '7', '4833', '3443', '0'), +('8', '9', '7', '4863', '2912', '0'), +('8', '9', '7', '4343', '2326', '0'), +('8', '9', '7', '4155', '1973', '0'), +('8', '9', '9', '1541', '2833', '0'), +('8', '9', '9', '4834', '2623', '0'), +('8', '9', '9', '4864', '2217', '0'), +('8', '9', '9', '12189', '1961', '0'), +('8', '9', '15', '10366', '3254', '0'), +('8', '9', '15', '14679', '2955', '0'), +('8', '9', '15', '10151', '2700', '0'), +('8', '9', '15', '14678', '2404', '0'), +('8', '9', '20', '11601', '7692', '0'), +('8', '9', '20', '11666', '5620', '0'), +('8', '9', '20', '2920', '4467', '0'), +('8', '9', '20', '1365', '4200', '0'), +('8', '9', '12', '4835', '4633', '0'), +('8', '9', '12', '20655', '4343', '0'), +('8', '9', '12', '4865', '2665', '0'), +('8', '9', '12', '3310', '2661', '0'), +('8', '9', '18', '4836', '3268', '0'), +('8', '9', '18', '4866', '3041', '0'), +('8', '9', '18', '4346', '2621', '0'), +('8', '9', '18', '4158', '2005', '0'), +('8', '9', '19', '4837', '4059', '0'), +('8', '9', '19', '4867', '2987', '0'), +('8', '9', '19', '68239', '2986', '0'), +('8', '9', '19', '4159', '1973', '0'), +('8', '9', '13', '27725', '4279', '0'), +('8', '9', '13', '5416', '3308', '0'), +('8', '9', '13', '7257', '3266', '0'), +('8', '9', '13', '6692', '3070', '0'), +('8', '9', '14', '5416', '3308', '0'), +('8', '9', '14', '7257', '3266', '0'), +('8', '9', '14', '6692', '3070', '0'), +('8', '9', '14', '7407', '3046', '0'), +('8', '9', '11', '13353', '1500', '0'), +('8', '9', '11', '14762', '1291', '0'), +('8', '9', '11', '9246', '1123', '0'), +('8', '9', '11', '20677', '900', '0'), +('8', '10', '22', '10323', '0', '0'), +('8', '10', '22', '10664', '0', '0'), +('8', '10', '22', '9246', '0', '0'), +('8', '10', '22', '21509', '0', '0'), +('8', '10', '1', '14701', '2452', '0'), +('8', '10', '1', '14702', '2050', '0'), +('8', '10', '1', '30361', '1440', '0'), +('8', '10', '1', '10165', '873', '0'), +('8', '10', '2', '4301', '3663', '0'), +('8', '10', '2', '4831', '3201', '0'), +('8', '10', '2', '10142', '3012', '0'), +('8', '10', '2', '10143', '2853', '0'), +('8', '10', '3', '27720', '3214', '0'), +('8', '10', '3', '71529', '1874', '0'), +('8', '10', '3', '2711', '1858', '0'), +('8', '10', '3', '21002', '1057', '0'), +('8', '10', '5', '27723', '4139', '0'), +('8', '10', '5', '14703', '3850', '0'), +('8', '10', '5', '14565', '3535', '0'), +('8', '10', '5', '14700', '2553', '0'), +('8', '10', '8', '11621', '11486', '0'), +('8', '10', '8', '11551', '4827', '0'), +('8', '10', '8', '11603', '3977', '0'), +('8', '10', '8', '1409', '3461', '0'), +('8', '10', '6', '1557', '6760', '0'), +('8', '10', '6', '27721', '2022', '0'), +('8', '10', '6', '4405', '1870', '0'), +('8', '10', '6', '4302', '1749', '0'), +('8', '10', '17', '4832', '6412', '0'), +('8', '10', '17', '4862', '5452', '0'), +('8', '10', '17', '11623', '4375', '0'), +('8', '10', '17', '4154', '4106', '0'), +('8', '10', '7', '4833', '3443', '0'), +('8', '10', '7', '4863', '2933', '0'), +('8', '10', '7', '4343', '2341', '0'), +('8', '10', '7', '4155', '1973', '0'), +('8', '10', '9', '1541', '2833', '0'), +('8', '10', '9', '4834', '2623', '0'), +('8', '10', '9', '4864', '2224', '0'), +('8', '10', '9', '12189', '1961', '0'), +('8', '10', '15', '10366', '3254', '0'), +('8', '10', '15', '14679', '2955', '0'), +('8', '10', '15', '10151', '2700', '0'), +('8', '10', '15', '14678', '2404', '0'), +('8', '10', '20', '11601', '7706', '0'), +('8', '10', '20', '11666', '5630', '0'), +('8', '10', '20', '2920', '4467', '0'), +('8', '10', '20', '1365', '4200', '0'), +('8', '10', '12', '4835', '4641', '0'), +('8', '10', '12', '20655', '4351', '0'), +('8', '10', '12', '4865', '2665', '0'), +('8', '10', '12', '3310', '2661', '0'), +('8', '10', '18', '4836', '3275', '0'), +('8', '10', '18', '4866', '3054', '0'), +('8', '10', '18', '4346', '2621', '0'), +('8', '10', '18', '4158', '2005', '0'), +('8', '10', '19', '4837', '4071', '0'), +('8', '10', '19', '4867', '3000', '0'), +('8', '10', '19', '68239', '2993', '0'), +('8', '10', '19', '4159', '1973', '0'), +('8', '10', '13', '27725', '4279', '0'), +('8', '10', '13', '5416', '3308', '0'), +('8', '10', '13', '7257', '3266', '0'), +('8', '10', '13', '6692', '3070', '0'), +('8', '10', '14', '5416', '3308', '0'), +('8', '10', '14', '7257', '3266', '0'), +('8', '10', '14', '6692', '3070', '0'), +('8', '10', '14', '7407', '3046', '0'), +('8', '10', '11', '13353', '1500', '0'), +('8', '10', '11', '14762', '1291', '0'), +('8', '10', '11', '9246', '1148', '0'), +('8', '10', '11', '20677', '900', '0'), +('8', '11', '22', '10323', '0', '0'), +('8', '11', '22', '10664', '0', '0'), +('8', '11', '22', '9246', '0', '0'), +('8', '11', '22', '21509', '0', '0'), +('8', '11', '1', '14701', '2452', '0'), +('8', '11', '1', '14702', '2050', '0'), +('8', '11', '1', '30361', '1440', '0'), +('8', '11', '1', '10165', '873', '0'), +('8', '11', '2', '4301', '3663', '0'), +('8', '11', '2', '4831', '3213', '0'), +('8', '11', '2', '10142', '3012', '0'), +('8', '11', '2', '10143', '2853', '0'), +('8', '11', '3', '27720', '3227', '0'), +('8', '11', '3', '71529', '1881', '0'), +('8', '11', '3', '2711', '1871', '0'), +('8', '11', '3', '21002', '1057', '0'), +('8', '11', '5', '27723', '4146', '0'), +('8', '11', '5', '14703', '3850', '0'), +('8', '11', '5', '14565', '3542', '0'), +('8', '11', '5', '14700', '2553', '0'), +('8', '11', '8', '11621', '11486', '0'), +('8', '11', '8', '11551', '4827', '0'), +('8', '11', '8', '11603', '3999', '0'), +('8', '11', '8', '1409', '3461', '0'), +('8', '11', '6', '1557', '6760', '0'), +('8', '11', '6', '27721', '2022', '0'), +('8', '11', '6', '4405', '1870', '0'), +('8', '11', '6', '4302', '1760', '0'), +('8', '11', '17', '4832', '6437', '0'), +('8', '11', '17', '4862', '5452', '0'), +('8', '11', '17', '11623', '4375', '0'), +('8', '11', '17', '4154', '4114', '0'), +('8', '11', '7', '4833', '3443', '0'), +('8', '11', '7', '4863', '2955', '0'), +('8', '11', '7', '4343', '2357', '0'), +('8', '11', '7', '4155', '1973', '0'), +('8', '11', '9', '1541', '2833', '0'), +('8', '11', '9', '4834', '2623', '0'), +('8', '11', '9', '4864', '2231', '0'), +('8', '11', '9', '12189', '1961', '0'), +('8', '11', '15', '10366', '3254', '0'), +('8', '11', '15', '14679', '2955', '0'), +('8', '11', '15', '10151', '2700', '0'), +('8', '11', '15', '14678', '2404', '0'), +('8', '11', '20', '11601', '7723', '0'), +('8', '11', '20', '11666', '5642', '0'), +('8', '11', '20', '2920', '4467', '0'), +('8', '11', '20', '1365', '4200', '0'), +('8', '11', '12', '4835', '4649', '0'), +('8', '11', '12', '20655', '4359', '0'), +('8', '11', '12', '4865', '2665', '0'), +('8', '11', '12', '3310', '2661', '0'), +('8', '11', '18', '4836', '3283', '0'), +('8', '11', '18', '4866', '3069', '0'), +('8', '11', '18', '4346', '2621', '0'), +('8', '11', '18', '4158', '2005', '0'), +('8', '11', '19', '4837', '4083', '0'), +('8', '11', '19', '4867', '3015', '0'), +('8', '11', '19', '68239', '3001', '0'), +('8', '11', '19', '4159', '1973', '0'), +('8', '11', '13', '27725', '4279', '0'), +('8', '11', '13', '5416', '3308', '0'), +('8', '11', '13', '7257', '3266', '0'), +('8', '11', '13', '6692', '3070', '0'), +('8', '11', '14', '5416', '3308', '0'), +('8', '11', '14', '7257', '3266', '0'), +('8', '11', '14', '6692', '3070', '0'), +('8', '11', '14', '11625', '3053', '0'), +('8', '11', '11', '13353', '1500', '0'), +('8', '11', '11', '14762', '1291', '0'), +('8', '11', '11', '9246', '1172', '0'), +('8', '11', '11', '20677', '900', '0'), +('8', '12', '22', '10323', '0', '0'), +('8', '12', '22', '10664', '0', '0'), +('8', '12', '22', '9246', '0', '0'), +('8', '12', '22', '21509', '0', '0'), +('8', '12', '1', '14701', '2452', '0'), +('8', '12', '1', '14702', '2050', '0'), +('8', '12', '1', '30361', '1440', '0'), +('8', '12', '1', '10165', '873', '0'), +('8', '12', '2', '4301', '3663', '0'), +('8', '12', '2', '4831', '3225', '0'), +('8', '12', '2', '10142', '3012', '0'), +('8', '12', '2', '10143', '2853', '0'), +('8', '12', '3', '27720', '3238', '0'), +('8', '12', '3', '71529', '1887', '0'), +('8', '12', '3', '2711', '1882', '0'), +('8', '12', '3', '21002', '1057', '0'), +('8', '12', '5', '27723', '4151', '0'), +('8', '12', '5', '14703', '3850', '0'), +('8', '12', '5', '14565', '3547', '0'), +('8', '12', '5', '14700', '2553', '0'), +('8', '12', '8', '11621', '11486', '0'), +('8', '12', '8', '11551', '4827', '0'), +('8', '12', '8', '11603', '4021', '0'), +('8', '12', '8', '1409', '3461', '0'), +('8', '12', '6', '1557', '6760', '0'), +('8', '12', '6', '27721', '2022', '0'), +('8', '12', '6', '4405', '1870', '0'), +('8', '12', '6', '4302', '1768', '0'), +('8', '12', '17', '4832', '6459', '0'), +('8', '12', '17', '4862', '5452', '0'), +('8', '12', '17', '11623', '4375', '0'), +('8', '12', '17', '4154', '4121', '0'), +('8', '12', '7', '4833', '3443', '0'), +('8', '12', '7', '4863', '2977', '0'), +('8', '12', '7', '4343', '2372', '0'), +('8', '12', '7', '4155', '1973', '0'), +('8', '12', '9', '1541', '2833', '0'), +('8', '12', '9', '4834', '2623', '0'), +('8', '12', '9', '4864', '2239', '0'), +('8', '12', '9', '12189', '1961', '0'), +('8', '12', '15', '10366', '3254', '0'), +('8', '12', '15', '14679', '2955', '0'), +('8', '12', '15', '10151', '2700', '0'), +('8', '12', '15', '14678', '2404', '0'), +('8', '12', '20', '11601', '7738', '0'), +('8', '12', '20', '11666', '5652', '0'), +('8', '12', '20', '2920', '4467', '0'), +('8', '12', '20', '1365', '4200', '0'), +('8', '12', '12', '4835', '4656', '0'), +('8', '12', '12', '20655', '4367', '0'), +('8', '12', '12', '4865', '2665', '0'), +('8', '12', '12', '3310', '2661', '0'), +('8', '12', '18', '4836', '3291', '0'), +('8', '12', '18', '4866', '3082', '0'), +('8', '12', '18', '4346', '2621', '0'), +('8', '12', '18', '4158', '2005', '0'), +('8', '12', '19', '4837', '4095', '0'), +('8', '12', '19', '4867', '3028', '0'), +('8', '12', '19', '68239', '3008', '0'), +('8', '12', '19', '4159', '1973', '0'), +('8', '12', '13', '27725', '4279', '0'), +('8', '12', '13', '5416', '3308', '0'), +('8', '12', '13', '7257', '3266', '0'), +('8', '12', '13', '6692', '3070', '0'), +('8', '12', '14', '5416', '3308', '0'), +('8', '12', '14', '7257', '3266', '0'), +('8', '12', '14', '6692', '3070', '0'), +('8', '12', '14', '11625', '3066', '0'), +('8', '12', '11', '13353', '1500', '0'), +('8', '12', '11', '14762', '1291', '0'), +('8', '12', '11', '9246', '1196', '0'), +('8', '12', '11', '20677', '900', '0'), +('8', '13', '22', '10323', '0', '0'), +('8', '13', '22', '10664', '0', '0'), +('8', '13', '22', '9246', '0', '0'), +('8', '13', '22', '21509', '0', '0'), +('8', '13', '1', '14701', '2452', '0'), +('8', '13', '1', '14702', '2050', '0'), +('8', '13', '1', '30361', '1440', '0'), +('8', '13', '1', '10165', '873', '0'), +('8', '13', '2', '4301', '3663', '0'), +('8', '13', '2', '4831', '3237', '0'), +('8', '13', '2', '10142', '3012', '0'), +('8', '13', '2', '10143', '2853', '0'), +('8', '13', '3', '27720', '3250', '0'), +('8', '13', '3', '2711', '1894', '0'), +('8', '13', '3', '71529', '1893', '0'), +('8', '13', '3', '21014', '1057', '0'), +('8', '13', '5', '27723', '4157', '0'), +('8', '13', '5', '14703', '3850', '0'), +('8', '13', '5', '14565', '3553', '0'), +('8', '13', '5', '14700', '2553', '0'), +('8', '13', '8', '11621', '11486', '0'), +('8', '13', '8', '11551', '4827', '0'), +('8', '13', '8', '11603', '4043', '0'), +('8', '13', '8', '1409', '3461', '0'), +('8', '13', '6', '1557', '6760', '0'), +('8', '13', '6', '27721', '2022', '0'), +('8', '13', '6', '4405', '1870', '0'), +('8', '13', '6', '4302', '1777', '0'), +('8', '13', '17', '4832', '6481', '0'), +('8', '13', '17', '4862', '5452', '0'), +('8', '13', '17', '11623', '4375', '0'), +('8', '13', '17', '4154', '4129', '0'), +('8', '13', '7', '4833', '3443', '0'), +('8', '13', '7', '4863', '2999', '0'), +('8', '13', '7', '4343', '2386', '0'), +('8', '13', '7', '4155', '1973', '0'), +('8', '13', '9', '1541', '2833', '0'), +('8', '13', '9', '4834', '2623', '0'), +('8', '13', '9', '4864', '2246', '0'), +('8', '13', '9', '12189', '1961', '0'), +('8', '13', '15', '10366', '3254', '0'), +('8', '13', '15', '14679', '2955', '0'), +('8', '13', '15', '10151', '2700', '0'), +('8', '13', '15', '14678', '2404', '0'), +('8', '13', '20', '11601', '7752', '0'), +('8', '13', '20', '11666', '5662', '0'), +('8', '13', '20', '2920', '4467', '0'), +('8', '13', '20', '1365', '4200', '0'), +('8', '13', '12', '4835', '4664', '0'), +('8', '13', '12', '20655', '4375', '0'), +('8', '13', '12', '4865', '2665', '0'), +('8', '13', '12', '3310', '2661', '0'), +('8', '13', '18', '4836', '3298', '0'), +('8', '13', '18', '4866', '3095', '0'), +('8', '13', '18', '4346', '2621', '0'), +('8', '13', '18', '4158', '2005', '0'), +('8', '13', '19', '4837', '4107', '0'), +('8', '13', '19', '4867', '3041', '0'), +('8', '13', '19', '68239', '3015', '0'), +('8', '13', '19', '4159', '1973', '0'), +('8', '13', '13', '27725', '4279', '0'), +('8', '13', '13', '5416', '3308', '0'), +('8', '13', '13', '7257', '3266', '0'), +('8', '13', '13', '11625', '3079', '0'), +('8', '13', '14', '5416', '3308', '0'), +('8', '13', '14', '7257', '3266', '0'), +('8', '13', '14', '11625', '3079', '0'), +('8', '13', '14', '6692', '3070', '0'), +('8', '13', '11', '13353', '1500', '0'), +('8', '13', '11', '14762', '1291', '0'), +('8', '13', '11', '9246', '1220', '0'), +('8', '13', '11', '20677', '900', '0'), +('8', '14', '22', '10323', '0', '0'), +('8', '14', '22', '10664', '0', '0'), +('8', '14', '22', '9246', '0', '0'), +('8', '14', '22', '21509', '0', '0'), +('8', '14', '1', '14701', '2452', '0'), +('8', '14', '1', '14702', '2050', '0'), +('8', '14', '1', '30361', '1440', '0'), +('8', '14', '1', '10165', '873', '0'), +('8', '14', '2', '4301', '3663', '0'), +('8', '14', '2', '4831', '3250', '0'), +('8', '14', '2', '10142', '3012', '0'), +('8', '14', '2', '10143', '2853', '0'), +('8', '14', '3', '27720', '3262', '0'), +('8', '14', '3', '2711', '1906', '0'), +('8', '14', '3', '71529', '1899', '0'), +('8', '14', '3', '21014', '1057', '0'), +('8', '14', '5', '27723', '4164', '0'), +('8', '14', '5', '14703', '3850', '0'), +('8', '14', '5', '14565', '3560', '0'), +('8', '14', '5', '14700', '2553', '0'), +('8', '14', '8', '11621', '11486', '0'), +('8', '14', '8', '11551', '4827', '0'), +('8', '14', '8', '11603', '4064', '0'), +('8', '14', '8', '1409', '3461', '0'), +('8', '14', '6', '1557', '6760', '0'), +('8', '14', '6', '27721', '2022', '0'), +('8', '14', '6', '4405', '1870', '0'), +('8', '14', '6', '4302', '1787', '0'), +('8', '14', '17', '4832', '6506', '0'), +('8', '14', '17', '4862', '5452', '0'), +('8', '14', '17', '11623', '4375', '0'), +('8', '14', '17', '4154', '4137', '0'), +('8', '14', '7', '4833', '3443', '0'), +('8', '14', '7', '4863', '3020', '0'), +('8', '14', '7', '4343', '2403', '0'), +('8', '14', '7', '4155', '1973', '0'), +('8', '14', '9', '1541', '2833', '0'), +('8', '14', '9', '4834', '2623', '0'), +('8', '14', '9', '4864', '2253', '0'), +('8', '14', '9', '12189', '1961', '0'), +('8', '14', '15', '10366', '3254', '0'), +('8', '14', '15', '14679', '2955', '0'), +('8', '14', '15', '10151', '2700', '0'), +('8', '14', '15', '14678', '2404', '0'), +('8', '14', '20', '11601', '7769', '0'), +('8', '14', '20', '11666', '5674', '0'), +('8', '14', '20', '2920', '4467', '0'), +('8', '14', '20', '1365', '4200', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '14', '12', '4835', '4672', '0'), +('8', '14', '12', '20655', '4383', '0'), +('8', '14', '12', '4865', '2665', '0'), +('8', '14', '12', '3310', '2661', '0'), +('8', '14', '18', '4836', '3306', '0'), +('8', '14', '18', '4866', '3111', '0'), +('8', '14', '18', '4346', '2621', '0'), +('8', '14', '18', '4158', '2005', '0'), +('8', '14', '19', '4837', '4119', '0'), +('8', '14', '19', '4867', '3056', '0'), +('8', '14', '19', '68239', '3022', '0'), +('8', '14', '19', '4159', '1973', '0'), +('8', '14', '13', '27725', '4279', '0'), +('8', '14', '13', '5416', '3308', '0'), +('8', '14', '13', '7257', '3266', '0'), +('8', '14', '13', '11625', '3094', '0'), +('8', '14', '14', '5416', '3308', '0'), +('8', '14', '14', '7257', '3266', '0'), +('8', '14', '14', '11625', '3094', '0'), +('8', '14', '14', '6692', '3070', '0'), +('8', '14', '11', '13353', '1500', '0'), +('8', '14', '11', '14762', '1291', '0'), +('8', '14', '11', '9246', '1244', '0'), +('8', '14', '11', '20677', '900', '0'), +('8', '15', '22', '10323', '0', '0'), +('8', '15', '22', '10664', '0', '0'), +('8', '15', '22', '9246', '0', '0'), +('8', '15', '22', '21509', '0', '0'), +('8', '15', '1', '14701', '2452', '0'), +('8', '15', '1', '14702', '2050', '0'), +('8', '15', '1', '30361', '1440', '0'), +('8', '15', '1', '10165', '873', '0'), +('8', '15', '2', '4301', '3663', '0'), +('8', '15', '2', '4831', '3262', '0'), +('8', '15', '2', '10142', '3012', '0'), +('8', '15', '2', '10143', '2853', '0'), +('8', '15', '3', '27720', '3274', '0'), +('8', '15', '3', '2711', '1918', '0'), +('8', '15', '3', '71529', '1905', '0'), +('8', '15', '3', '21014', '1057', '0'), +('8', '15', '5', '27723', '4170', '0'), +('8', '15', '5', '14703', '3850', '0'), +('8', '15', '5', '14565', '3566', '0'), +('8', '15', '5', '14700', '2553', '0'), +('8', '15', '8', '11621', '11486', '0'), +('8', '15', '8', '11551', '4827', '0'), +('8', '15', '8', '11603', '4086', '0'), +('8', '15', '8', '1409', '3461', '0'), +('8', '15', '6', '1557', '6760', '0'), +('8', '15', '6', '27721', '2022', '0'), +('8', '15', '6', '4405', '1870', '0'), +('8', '15', '6', '4302', '1796', '0'), +('8', '15', '17', '4832', '6528', '0'), +('8', '15', '17', '4862', '5452', '0'), +('8', '15', '17', '11623', '4375', '0'), +('8', '15', '17', '4154', '4144', '0'), +('8', '15', '7', '4833', '3443', '0'), +('8', '15', '7', '4863', '3042', '0'), +('8', '15', '7', '4343', '2418', '0'), +('8', '15', '7', '4155', '1973', '0'), +('8', '15', '9', '1541', '2833', '0'), +('8', '15', '9', '4834', '2623', '0'), +('8', '15', '9', '4864', '2260', '0'), +('8', '15', '9', '12189', '1961', '0'), +('8', '15', '15', '10366', '3254', '0'), +('8', '15', '15', '14679', '2955', '0'), +('8', '15', '15', '10151', '2700', '0'), +('8', '15', '15', '14678', '2404', '0'), +('8', '15', '20', '11601', '7784', '0'), +('8', '15', '20', '11666', '5684', '0'), +('8', '15', '20', '2920', '4467', '0'), +('8', '15', '20', '1365', '4200', '0'), +('8', '15', '12', '4835', '4679', '0'), +('8', '15', '12', '20655', '4390', '0'), +('8', '15', '12', '4865', '2665', '0'), +('8', '15', '12', '3310', '2661', '0'), +('8', '15', '18', '4836', '3314', '0'), +('8', '15', '18', '4866', '3124', '0'), +('8', '15', '18', '4346', '2621', '0'), +('8', '15', '18', '4158', '2005', '0'), +('8', '15', '19', '4837', '4131', '0'), +('8', '15', '19', '4867', '3069', '0'), +('8', '15', '19', '68239', '3030', '0'), +('8', '15', '19', '4159', '1973', '0'), +('8', '15', '13', '27725', '4279', '0'), +('8', '15', '13', '5416', '3308', '0'), +('8', '15', '13', '7257', '3266', '0'), +('8', '15', '13', '11625', '3107', '0'), +('8', '15', '14', '5416', '3308', '0'), +('8', '15', '14', '7257', '3266', '0'), +('8', '15', '14', '11625', '3107', '0'), +('8', '15', '14', '6692', '3070', '0'), +('8', '15', '11', '13353', '1500', '0'), +('8', '15', '11', '14762', '1291', '0'), +('8', '15', '11', '9246', '1268', '0'), +('8', '15', '11', '20677', '900', '0'), +('8', '16', '22', '10323', '0', '0'), +('8', '16', '22', '10664', '0', '0'), +('8', '16', '22', '9246', '0', '0'), +('8', '16', '22', '21509', '0', '0'), +('8', '16', '1', '14701', '2452', '0'), +('8', '16', '1', '14702', '2050', '0'), +('8', '16', '1', '30361', '1440', '0'), +('8', '16', '1', '10165', '873', '0'), +('8', '16', '2', '4301', '3663', '0'), +('8', '16', '2', '4831', '3274', '0'), +('8', '16', '2', '10142', '3012', '0'), +('8', '16', '2', '10143', '2853', '0'), +('8', '16', '3', '27720', '3285', '0'), +('8', '16', '3', '2711', '1929', '0'), +('8', '16', '3', '71529', '1911', '0'), +('8', '16', '3', '21014', '1057', '0'), +('8', '16', '5', '27723', '4175', '0'), +('8', '16', '5', '14703', '3850', '0'), +('8', '16', '5', '14565', '3571', '0'), +('8', '16', '5', '14700', '2553', '0'), +('8', '16', '8', '11621', '11486', '0'), +('8', '16', '8', '11551', '4827', '0'), +('8', '16', '8', '11603', '4108', '0'), +('8', '16', '8', '1409', '3461', '0'), +('8', '16', '6', '1557', '6760', '0'), +('8', '16', '6', '27721', '2022', '0'), +('8', '16', '6', '4405', '1870', '0'), +('8', '16', '6', '4302', '1805', '0'), +('8', '16', '17', '4832', '6550', '0'), +('8', '16', '17', '4862', '5452', '0'), +('8', '16', '17', '11623', '4375', '0'), +('8', '16', '17', '4154', '4152', '0'), +('8', '16', '7', '4833', '3443', '0'), +('8', '16', '7', '4863', '3064', '0'), +('8', '16', '7', '4343', '2432', '0'), +('8', '16', '7', '4155', '1973', '0'), +('8', '16', '9', '1541', '2833', '0'), +('8', '16', '9', '4834', '2623', '0'), +('8', '16', '9', '4864', '2268', '0'), +('8', '16', '9', '12189', '1961', '0'), +('8', '16', '15', '10366', '3254', '0'), +('8', '16', '15', '14679', '2955', '0'), +('8', '16', '15', '10151', '2700', '0'), +('8', '16', '15', '14678', '2404', '0'), +('8', '16', '20', '11601', '7798', '0'), +('8', '16', '20', '11666', '5694', '0'), +('8', '16', '20', '2920', '4467', '0'), +('8', '16', '20', '1365', '4200', '0'), +('8', '16', '12', '4835', '4687', '0'), +('8', '16', '12', '20655', '4398', '0'), +('8', '16', '12', '4865', '2665', '0'), +('8', '16', '12', '3310', '2661', '0'), +('8', '16', '18', '4836', '3321', '0'), +('8', '16', '18', '4866', '3137', '0'), +('8', '16', '18', '4346', '2621', '0'), +('8', '16', '18', '4158', '2005', '0'), +('8', '16', '19', '4837', '4143', '0'), +('8', '16', '19', '4867', '3082', '0'), +('8', '16', '19', '68239', '3037', '0'), +('8', '16', '19', '4159', '1973', '0'), +('8', '16', '13', '27725', '4279', '0'), +('8', '16', '13', '5416', '3308', '0'), +('8', '16', '13', '7257', '3266', '0'), +('8', '16', '13', '11625', '3120', '0'), +('8', '16', '14', '5416', '3308', '0'), +('8', '16', '14', '7257', '3266', '0'), +('8', '16', '14', '11625', '3120', '0'), +('8', '16', '14', '6692', '3070', '0'), +('8', '16', '11', '13353', '1500', '0'), +('8', '16', '11', '9246', '1293', '0'), +('8', '16', '11', '14762', '1291', '0'), +('8', '16', '11', '20677', '900', '0'), +('8', '17', '22', '10323', '0', '0'), +('8', '17', '22', '10664', '0', '0'), +('8', '17', '22', '9246', '0', '0'), +('8', '17', '22', '21509', '0', '0'), +('8', '17', '1', '14701', '2452', '0'), +('8', '17', '1', '14702', '2050', '0'), +('8', '17', '1', '30361', '1440', '0'), +('8', '17', '1', '10165', '873', '0'), +('8', '17', '2', '4301', '3663', '0'), +('8', '17', '2', '4831', '3286', '0'), +('8', '17', '2', '10142', '3012', '0'), +('8', '17', '2', '10143', '2853', '0'), +('8', '17', '3', '27720', '3298', '0'), +('8', '17', '3', '2711', '1942', '0'), +('8', '17', '3', '71529', '1918', '0'), +('8', '17', '3', '21014', '1057', '0'), +('8', '17', '5', '27723', '4182', '0'), +('8', '17', '5', '14703', '3850', '0'), +('8', '17', '5', '14565', '3578', '0'), +('8', '17', '5', '14700', '2553', '0'), +('8', '17', '8', '11621', '11486', '0'), +('8', '17', '8', '11551', '4827', '0'), +('8', '17', '8', '11603', '4130', '0'), +('8', '17', '8', '1409', '3461', '0'), +('8', '17', '6', '1557', '6760', '0'), +('8', '17', '6', '27721', '2022', '0'), +('8', '17', '6', '4405', '1870', '0'), +('8', '17', '6', '4302', '1815', '0'), +('8', '17', '17', '4832', '6575', '0'), +('8', '17', '17', '4862', '5452', '0'), +('8', '17', '17', '11623', '4375', '0'), +('8', '17', '17', '4154', '4160', '0'), +('8', '17', '7', '4833', '3443', '0'), +('8', '17', '7', '4863', '3086', '0'), +('8', '17', '7', '4343', '2449', '0'), +('8', '17', '7', '4155', '1973', '0'), +('8', '17', '9', '1541', '2833', '0'), +('8', '17', '9', '4834', '2623', '0'), +('8', '17', '9', '4864', '2275', '0'), +('8', '17', '9', '12189', '1961', '0'), +('8', '17', '15', '10366', '3254', '0'), +('8', '17', '15', '14679', '2955', '0'), +('8', '17', '15', '10151', '2700', '0'), +('8', '17', '15', '14678', '2404', '0'), +('8', '17', '20', '11601', '7815', '0'), +('8', '17', '20', '11666', '5706', '0'), +('8', '17', '20', '2920', '4467', '0'), +('8', '17', '20', '1365', '4200', '0'), +('8', '17', '12', '4835', '4695', '0'), +('8', '17', '12', '20655', '4406', '0'), +('8', '17', '12', '4865', '2665', '0'), +('8', '17', '12', '3310', '2661', '0'), +('8', '17', '18', '4836', '3329', '0'), +('8', '17', '18', '4866', '3152', '0'), +('8', '17', '18', '4346', '2621', '0'), +('8', '17', '18', '4158', '2005', '0'), +('8', '17', '19', '4837', '4156', '0'), +('8', '17', '19', '4867', '3097', '0'), +('8', '17', '19', '68239', '3044', '0'), +('8', '17', '19', '4159', '1973', '0'), +('8', '17', '13', '27725', '4279', '0'), +('8', '17', '13', '5416', '3308', '0'), +('8', '17', '13', '7257', '3266', '0'), +('8', '17', '13', '11625', '3136', '0'), +('8', '17', '14', '5416', '3308', '0'), +('8', '17', '14', '7257', '3266', '0'), +('8', '17', '14', '11625', '3136', '0'), +('8', '17', '14', '6692', '3070', '0'), +('8', '17', '11', '13353', '1500', '0'), +('8', '17', '11', '9246', '1317', '0'), +('8', '17', '11', '14762', '1291', '0'), +('8', '17', '11', '20677', '900', '0'), +('8', '18', '22', '10323', '0', '0'), +('8', '18', '22', '10664', '0', '0'), +('8', '18', '22', '9246', '0', '0'), +('8', '18', '22', '21509', '0', '0'), +('8', '18', '1', '14701', '2452', '0'), +('8', '18', '1', '14702', '2050', '0'), +('8', '18', '1', '30361', '1440', '0'), +('8', '18', '1', '10165', '873', '0'), +('8', '18', '2', '4301', '3663', '0'), +('8', '18', '2', '4831', '3298', '0'), +('8', '18', '2', '10142', '3012', '0'), +('8', '18', '2', '10143', '2853', '0'), +('8', '18', '3', '27720', '3309', '0'), +('8', '18', '3', '2711', '1953', '0'), +('8', '18', '3', '71529', '1924', '0'), +('8', '18', '3', '4505', '1059', '0'), +('8', '18', '5', '27723', '4188', '0'), +('8', '18', '5', '14703', '3850', '0'), +('8', '18', '5', '14565', '3584', '0'), +('8', '18', '5', '14700', '2553', '0'), +('8', '18', '8', '11621', '11486', '0'), +('8', '18', '8', '11551', '4827', '0'), +('8', '18', '8', '11603', '4151', '0'), +('8', '18', '8', '1409', '3461', '0'), +('8', '18', '6', '1557', '6760', '0'), +('8', '18', '6', '27721', '2022', '0'), +('8', '18', '6', '4405', '1870', '0'), +('8', '18', '6', '4302', '1823', '0'), +('8', '18', '17', '4832', '6597', '0'), +('8', '18', '17', '4862', '5452', '0'), +('8', '18', '17', '11623', '4375', '0'), +('8', '18', '17', '4154', '4167', '0'), +('8', '18', '7', '4833', '3443', '0'), +('8', '18', '7', '4863', '3107', '0'), +('8', '18', '7', '4343', '2464', '0'), +('8', '18', '7', '4155', '1973', '0'), +('8', '18', '9', '1541', '2833', '0'), +('8', '18', '9', '4834', '2623', '0'), +('8', '18', '9', '4864', '2282', '0'), +('8', '18', '9', '12189', '1961', '0'), +('8', '18', '15', '10366', '3254', '0'), +('8', '18', '15', '14679', '2955', '0'), +('8', '18', '15', '10151', '2700', '0'), +('8', '18', '15', '14678', '2404', '0'), +('8', '18', '20', '11601', '7830', '0'), +('8', '18', '20', '11666', '5716', '0'), +('8', '18', '20', '2920', '4467', '0'), +('8', '18', '20', '1365', '4200', '0'), +('8', '18', '12', '4835', '4702', '0'), +('8', '18', '12', '20655', '4414', '0'), +('8', '18', '12', '4865', '2665', '0'), +('8', '18', '12', '3310', '2661', '0'), +('8', '18', '18', '4836', '3336', '0'), +('8', '18', '18', '4866', '3165', '0'), +('8', '18', '18', '4346', '2621', '0'), +('8', '18', '18', '4158', '2005', '0'), +('8', '18', '19', '4837', '4168', '0'), +('8', '18', '19', '4867', '3111', '0'), +('8', '18', '19', '68239', '3051', '0'), +('8', '18', '19', '4159', '1973', '0'), +('8', '18', '13', '27725', '4279', '0'), +('8', '18', '13', '5416', '3308', '0'), +('8', '18', '13', '7257', '3266', '0'), +('8', '18', '13', '11625', '3149', '0'), +('8', '18', '14', '5416', '3308', '0'), +('8', '18', '14', '7257', '3266', '0'), +('8', '18', '14', '11625', '3149', '0'), +('8', '18', '14', '6692', '3070', '0'), +('8', '18', '11', '13353', '1500', '0'), +('8', '18', '11', '9246', '1341', '0'), +('8', '18', '11', '14762', '1291', '0'), +('8', '18', '11', '20677', '900', '0'), +('8', '19', '22', '10323', '0', '0'), +('8', '19', '22', '10664', '0', '0'), +('8', '19', '22', '9246', '0', '0'), +('8', '19', '22', '21509', '0', '0'), +('8', '19', '1', '14701', '2452', '0'), +('8', '19', '1', '14702', '2050', '0'), +('8', '19', '1', '30361', '1440', '0'), +('8', '19', '1', '10165', '873', '0'), +('8', '19', '2', '4301', '3663', '0'), +('8', '19', '2', '4831', '3310', '0'), +('8', '19', '2', '10142', '3012', '0'), +('8', '19', '2', '10143', '2853', '0'), +('8', '19', '3', '27720', '3322', '0'), +('8', '19', '3', '2711', '1966', '0'), +('8', '19', '3', '71529', '1930', '0'), +('8', '19', '3', '4505', '1076', '0'), +('8', '19', '5', '27723', '4195', '0'), +('8', '19', '5', '14703', '3850', '0'), +('8', '19', '5', '14565', '3591', '0'), +('8', '19', '5', '14700', '2553', '0'), +('8', '19', '8', '11621', '11486', '0'), +('8', '19', '8', '11551', '4827', '0'), +('8', '19', '8', '11603', '4173', '0'), +('8', '19', '8', '1409', '3461', '0'), +('8', '19', '6', '1557', '6760', '0'), +('8', '19', '6', '27721', '2022', '0'), +('8', '19', '6', '4405', '1870', '0'), +('8', '19', '6', '4302', '1834', '0'), +('8', '19', '17', '4832', '6622', '0'), +('8', '19', '17', '4862', '5452', '0'), +('8', '19', '17', '11623', '4375', '0'), +('8', '19', '17', '4154', '4176', '0'), +('8', '19', '7', '4833', '3443', '0'), +('8', '19', '7', '4863', '3129', '0'), +('8', '19', '7', '4343', '2481', '0'), +('8', '19', '7', '4155', '1973', '0'), +('8', '19', '9', '1541', '2833', '0'), +('8', '19', '9', '4834', '2623', '0'), +('8', '19', '9', '4864', '2289', '0'), +('8', '19', '9', '12189', '1961', '0'), +('8', '19', '15', '10366', '3254', '0'), +('8', '19', '15', '14679', '2955', '0'), +('8', '19', '15', '10151', '2700', '0'), +('8', '19', '15', '14678', '2404', '0'), +('8', '19', '20', '11601', '7847', '0'), +('8', '19', '20', '11666', '5728', '0'), +('8', '19', '20', '2920', '4467', '0'), +('8', '19', '20', '1365', '4200', '0'), +('8', '19', '12', '4835', '4711', '0'), +('8', '19', '12', '20655', '4422', '0'), +('8', '19', '12', '4865', '2665', '0'), +('8', '19', '12', '3310', '2661', '0'), +('8', '19', '18', '4836', '3345', '0'), +('8', '19', '18', '4866', '3180', '0'), +('8', '19', '18', '4346', '2621', '0'), +('8', '19', '18', '4158', '2005', '0'), +('8', '19', '19', '4837', '4180', '0'), +('8', '19', '19', '4867', '3126', '0'), +('8', '19', '19', '68239', '3059', '0'), +('8', '19', '19', '4159', '1973', '0'), +('8', '19', '13', '27725', '4279', '0'), +('8', '19', '13', '5416', '3308', '0'), +('8', '19', '13', '7257', '3266', '0'), +('8', '19', '13', '11625', '3164', '0'), +('8', '19', '14', '5416', '3308', '0'), +('8', '19', '14', '7257', '3266', '0'), +('8', '19', '14', '11625', '3164', '0'), +('8', '19', '14', '6692', '3070', '0'), +('8', '19', '11', '13353', '1500', '0'), +('8', '19', '11', '9246', '1365', '0'), +('8', '19', '11', '14762', '1291', '0'), +('8', '19', '11', '20677', '900', '0'), +('8', '20', '22', '10323', '0', '0'), +('8', '20', '22', '10664', '0', '0'), +('8', '20', '22', '9246', '0', '0'), +('8', '20', '22', '21509', '0', '0'), +('8', '20', '1', '14701', '2452', '0'), +('8', '20', '1', '14702', '2050', '0'), +('8', '20', '1', '30361', '1440', '0'), +('8', '20', '1', '10165', '873', '0'), +('8', '20', '2', '4301', '3663', '0'), +('8', '20', '2', '4831', '3322', '0'), +('8', '20', '2', '10142', '3012', '0'), +('8', '20', '2', '10143', '2853', '0'), +('8', '20', '3', '27720', '3333', '0'), +('8', '20', '3', '2711', '1977', '0'), +('8', '20', '3', '71529', '1936', '0'), +('8', '20', '3', '4505', '1093', '0'), +('8', '20', '5', '27723', '4201', '0'), +('8', '20', '5', '14703', '3850', '0'), +('8', '20', '5', '14565', '3597', '0'), +('8', '20', '5', '14700', '2553', '0'), +('8', '20', '8', '11621', '11486', '0'), +('8', '20', '8', '11551', '4827', '0'), +('8', '20', '8', '11603', '4195', '0'), +('8', '20', '8', '1409', '3461', '0'), +('8', '20', '6', '1557', '6760', '0'), +('8', '20', '6', '27721', '2022', '0'), +('8', '20', '6', '4405', '1870', '0'), +('8', '20', '6', '4302', '1842', '0'), +('8', '20', '17', '4832', '6644', '0'), +('8', '20', '17', '4862', '5452', '0'), +('8', '20', '17', '11623', '4375', '0'), +('8', '20', '17', '4154', '4183', '0'), +('8', '20', '7', '4833', '3443', '0'), +('8', '20', '7', '4863', '3151', '0'), +('8', '20', '7', '4343', '2495', '0'), +('8', '20', '7', '4155', '1973', '0'), +('8', '20', '9', '1541', '2833', '0'), +('8', '20', '9', '4834', '2623', '0'), +('8', '20', '9', '4864', '2297', '0'), +('8', '20', '9', '12189', '1961', '0'), +('8', '20', '15', '10366', '3254', '0'), +('8', '20', '15', '14679', '2955', '0'), +('8', '20', '15', '10151', '2700', '0'), +('8', '20', '15', '14678', '2404', '0'), +('8', '20', '20', '11601', '7861', '0'), +('8', '20', '20', '11666', '5738', '0'), +('8', '20', '20', '2920', '4467', '0'), +('8', '20', '20', '1365', '4200', '0'), +('8', '20', '12', '4835', '4718', '0'), +('8', '20', '12', '20655', '4430', '0'), +('8', '20', '12', '4865', '2665', '0'), +('8', '20', '12', '3310', '2661', '0'), +('8', '20', '18', '4836', '3352', '0'), +('8', '20', '18', '4866', '3193', '0'), +('8', '20', '18', '4346', '2621', '0'), +('8', '20', '18', '4158', '2005', '0'), +('8', '20', '19', '4837', '4192', '0'), +('8', '20', '19', '4867', '3139', '0'), +('8', '20', '19', '68239', '3066', '0'), +('8', '20', '19', '4159', '1973', '0'), +('8', '20', '13', '27725', '4279', '0'), +('8', '20', '13', '6952', '3581', '0'), +('8', '20', '13', '5416', '3308', '0'), +('8', '20', '13', '7257', '3266', '0'), +('8', '20', '14', '6952', '3581', '0'), +('8', '20', '14', '5416', '3308', '0'), +('8', '20', '14', '7257', '3266', '0'), +('8', '20', '14', '11625', '3177', '0'), +('8', '20', '11', '13353', '1500', '0'), +('8', '20', '11', '9246', '1389', '0'), +('8', '20', '11', '14762', '1291', '0'), +('8', '20', '11', '20677', '900', '0'), +('8', '21', '22', '10323', '0', '0'), +('8', '21', '22', '10664', '0', '0'), +('8', '21', '22', '9246', '0', '0'), +('8', '21', '22', '21509', '0', '0'), +('8', '21', '1', '14701', '2452', '0'), +('8', '21', '1', '14702', '2050', '0'), +('8', '21', '1', '30361', '1440', '0'), +('8', '21', '1', '10165', '873', '0'), +('8', '21', '2', '4301', '3663', '0'), +('8', '21', '2', '4831', '3334', '0'), +('8', '21', '2', '10142', '3012', '0'), +('8', '21', '2', '10143', '2853', '0'), +('8', '21', '3', '27720', '3345', '0'), +('8', '21', '3', '2711', '1989', '0'), +('8', '21', '3', '71529', '1943', '0'), +('8', '21', '3', '4505', '1110', '0'), +('8', '21', '5', '27723', '4207', '0'), +('8', '21', '5', '14703', '3850', '0'), +('8', '21', '5', '14565', '3603', '0'), +('8', '21', '5', '14700', '2553', '0'), +('8', '21', '8', '11621', '11486', '0'), +('8', '21', '8', '11551', '4827', '0'), +('8', '21', '8', '11603', '4217', '0'), +('8', '21', '8', '1409', '3461', '0'), +('8', '21', '6', '1557', '6760', '0'), +('8', '21', '6', '27721', '2022', '0'), +('8', '21', '6', '4405', '1870', '0'), +('8', '21', '6', '4302', '1852', '0'), +('8', '21', '17', '4832', '6669', '0'), +('8', '21', '17', '4862', '5452', '0'), +('8', '21', '17', '11623', '4375', '0'), +('8', '21', '17', '4154', '4192', '0'), +('8', '21', '7', '4833', '3443', '0'), +('8', '21', '7', '4863', '3173', '0'), +('8', '21', '7', '4343', '2512', '0'), +('8', '21', '7', '4155', '1973', '0'), +('8', '21', '9', '1541', '2833', '0'), +('8', '21', '9', '4834', '2623', '0'), +('8', '21', '9', '4864', '2304', '0'), +('8', '21', '9', '12189', '1961', '0'), +('8', '21', '15', '10366', '3254', '0'), +('8', '21', '15', '14679', '2955', '0'), +('8', '21', '15', '10151', '2700', '0'), +('8', '21', '15', '14678', '2404', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '21', '20', '11601', '7878', '0'), +('8', '21', '20', '11666', '5750', '0'), +('8', '21', '20', '2920', '4467', '0'), +('8', '21', '20', '1365', '4200', '0'), +('8', '21', '12', '4835', '4726', '0'), +('8', '21', '12', '20655', '4438', '0'), +('8', '21', '12', '4865', '2665', '0'), +('8', '21', '12', '3310', '2661', '0'), +('8', '21', '18', '4836', '3361', '0'), +('8', '21', '18', '4866', '3208', '0'), +('8', '21', '18', '4346', '2621', '0'), +('8', '21', '18', '4158', '2005', '0'), +('8', '21', '19', '4837', '4204', '0'), +('8', '21', '19', '4867', '3154', '0'), +('8', '21', '19', '68239', '3073', '0'), +('8', '21', '19', '4159', '1973', '0'), +('8', '21', '13', '27725', '4279', '0'), +('8', '21', '13', '6952', '3581', '0'), +('8', '21', '13', '5416', '3308', '0'), +('8', '21', '13', '7257', '3266', '0'), +('8', '21', '14', '6952', '3581', '0'), +('8', '21', '14', '5416', '3308', '0'), +('8', '21', '14', '7257', '3266', '0'), +('8', '21', '14', '11625', '3192', '0'), +('8', '21', '11', '13353', '1500', '0'), +('8', '21', '11', '9246', '1413', '0'), +('8', '21', '11', '14762', '1291', '0'), +('8', '21', '11', '20677', '900', '0'), +('8', '22', '22', '10323', '0', '0'), +('8', '22', '22', '10664', '0', '0'), +('8', '22', '22', '9246', '0', '0'), +('8', '22', '22', '21509', '0', '0'), +('8', '22', '1', '14701', '2452', '0'), +('8', '22', '1', '14702', '2050', '0'), +('8', '22', '1', '30361', '1440', '0'), +('8', '22', '1', '10165', '873', '0'), +('8', '22', '2', '4301', '3663', '0'), +('8', '22', '2', '4831', '3346', '0'), +('8', '22', '2', '10142', '3012', '0'), +('8', '22', '2', '10143', '2853', '0'), +('8', '22', '3', '27720', '3357', '0'), +('8', '22', '3', '2711', '2001', '0'), +('8', '22', '3', '71529', '1949', '0'), +('8', '22', '3', '4505', '1127', '0'), +('8', '22', '5', '27723', '4213', '0'), +('8', '22', '5', '14703', '3850', '0'), +('8', '22', '5', '14565', '3609', '0'), +('8', '22', '5', '14700', '2553', '0'), +('8', '22', '8', '11621', '11486', '0'), +('8', '22', '8', '11551', '4827', '0'), +('8', '22', '8', '11603', '4238', '0'), +('8', '22', '8', '1409', '3461', '0'), +('8', '22', '6', '1557', '6760', '0'), +('8', '22', '6', '27721', '2022', '0'), +('8', '22', '6', '4405', '1870', '0'), +('8', '22', '6', '4302', '1861', '0'), +('8', '22', '17', '4832', '6691', '0'), +('8', '22', '17', '4862', '5452', '0'), +('8', '22', '17', '11623', '4375', '0'), +('8', '22', '17', '4154', '4199', '0'), +('8', '22', '7', '4833', '3443', '0'), +('8', '22', '7', '4863', '3194', '0'), +('8', '22', '7', '4343', '2527', '0'), +('8', '22', '7', '4155', '1973', '0'), +('8', '22', '9', '1541', '2833', '0'), +('8', '22', '9', '4834', '2623', '0'), +('8', '22', '9', '4864', '2311', '0'), +('8', '22', '9', '12189', '1961', '0'), +('8', '22', '15', '10366', '3254', '0'), +('8', '22', '15', '14679', '2955', '0'), +('8', '22', '15', '10151', '2700', '0'), +('8', '22', '15', '14678', '2404', '0'), +('8', '22', '20', '11601', '7892', '0'), +('8', '22', '20', '11666', '5760', '0'), +('8', '22', '20', '2920', '4467', '0'), +('8', '22', '20', '1365', '4200', '0'), +('8', '22', '12', '4835', '4734', '0'), +('8', '22', '12', '20655', '4446', '0'), +('8', '22', '12', '4865', '2665', '0'), +('8', '22', '12', '3310', '2661', '0'), +('8', '22', '18', '4836', '3368', '0'), +('8', '22', '18', '4866', '3221', '0'), +('8', '22', '18', '4346', '2621', '0'), +('8', '22', '18', '4158', '2005', '0'), +('8', '22', '19', '4837', '4216', '0'), +('8', '22', '19', '4867', '3167', '0'), +('8', '22', '19', '68239', '3080', '0'), +('8', '22', '19', '4159', '1973', '0'), +('8', '22', '13', '27725', '4279', '0'), +('8', '22', '13', '6952', '3581', '0'), +('8', '22', '13', '5416', '3308', '0'), +('8', '22', '13', '7257', '3266', '0'), +('8', '22', '14', '6952', '3581', '0'), +('8', '22', '14', '5416', '3308', '0'), +('8', '22', '14', '7257', '3266', '0'), +('8', '22', '14', '11625', '3205', '0'), +('8', '22', '11', '13353', '1500', '0'), +('8', '22', '11', '9246', '1438', '0'), +('8', '22', '11', '14762', '1291', '0'), +('8', '22', '11', '20677', '900', '0'), +('8', '23', '22', '10323', '0', '0'), +('8', '23', '22', '10664', '0', '0'), +('8', '23', '22', '9246', '0', '0'), +('8', '23', '22', '21509', '0', '0'), +('8', '23', '1', '14701', '2452', '0'), +('8', '23', '1', '14702', '2050', '0'), +('8', '23', '1', '30361', '1440', '0'), +('8', '23', '1', '10165', '873', '0'), +('8', '23', '2', '4301', '3663', '0'), +('8', '23', '2', '4831', '3358', '0'), +('8', '23', '2', '10142', '3012', '0'), +('8', '23', '2', '10143', '2853', '0'), +('8', '23', '3', '27720', '3369', '0'), +('8', '23', '3', '2711', '2013', '0'), +('8', '23', '3', '71529', '1955', '0'), +('8', '23', '3', '4505', '1144', '0'), +('8', '23', '5', '27723', '4220', '0'), +('8', '23', '5', '14703', '3850', '0'), +('8', '23', '5', '14565', '3616', '0'), +('8', '23', '5', '14700', '2553', '0'), +('8', '23', '8', '11621', '11486', '0'), +('8', '23', '8', '11551', '4827', '0'), +('8', '23', '8', '11603', '4260', '0'), +('8', '23', '8', '1409', '3461', '0'), +('8', '23', '6', '1557', '6760', '0'), +('8', '23', '6', '27721', '2022', '0'), +('8', '23', '6', '4302', '1871', '0'), +('8', '23', '6', '4405', '1870', '0'), +('8', '23', '17', '4832', '6716', '0'), +('8', '23', '17', '4862', '5452', '0'), +('8', '23', '17', '11623', '4375', '0'), +('8', '23', '17', '4154', '4207', '0'), +('8', '23', '7', '4833', '3443', '0'), +('8', '23', '7', '4863', '3216', '0'), +('8', '23', '7', '4343', '2544', '0'), +('8', '23', '7', '4155', '1973', '0'), +('8', '23', '9', '1541', '2833', '0'), +('8', '23', '9', '4834', '2623', '0'), +('8', '23', '9', '4864', '2318', '0'), +('8', '23', '9', '12189', '1961', '0'), +('8', '23', '15', '10366', '3254', '0'), +('8', '23', '15', '14679', '2955', '0'), +('8', '23', '15', '10151', '2700', '0'), +('8', '23', '15', '14678', '2404', '0'), +('8', '23', '20', '11601', '7909', '0'), +('8', '23', '20', '11666', '5772', '0'), +('8', '23', '20', '2920', '4467', '0'), +('8', '23', '20', '1365', '4200', '0'), +('8', '23', '12', '4835', '4742', '0'), +('8', '23', '12', '20655', '4454', '0'), +('8', '23', '12', '4865', '2665', '0'), +('8', '23', '12', '3310', '2661', '0'), +('8', '23', '18', '4836', '3376', '0'), +('8', '23', '18', '4866', '3237', '0'), +('8', '23', '18', '4346', '2621', '0'), +('8', '23', '18', '4158', '2005', '0'), +('8', '23', '19', '4837', '4228', '0'), +('8', '23', '19', '4867', '3182', '0'), +('8', '23', '19', '68239', '3088', '0'), +('8', '23', '19', '4159', '1973', '0'), +('8', '23', '13', '27725', '4279', '0'), +('8', '23', '13', '6952', '3581', '0'), +('8', '23', '13', '5416', '3308', '0'), +('8', '23', '13', '7257', '3266', '0'), +('8', '23', '14', '6952', '3581', '0'), +('8', '23', '14', '5416', '3308', '0'), +('8', '23', '14', '7257', '3266', '0'), +('8', '23', '14', '11625', '3220', '0'), +('8', '23', '11', '13353', '1500', '0'), +('8', '23', '11', '9246', '1462', '0'), +('8', '23', '11', '14762', '1291', '0'), +('8', '23', '11', '20677', '900', '0'), +('8', '24', '22', '10323', '0', '0'), +('8', '24', '22', '10664', '0', '0'), +('8', '24', '22', '9246', '0', '0'), +('8', '24', '22', '21509', '0', '0'), +('8', '24', '1', '14701', '2452', '0'), +('8', '24', '1', '14702', '2050', '0'), +('8', '24', '1', '30361', '1440', '0'), +('8', '24', '1', '10165', '873', '0'), +('8', '24', '2', '4301', '3663', '0'), +('8', '24', '2', '4831', '3370', '0'), +('8', '24', '2', '10142', '3012', '0'), +('8', '24', '2', '10143', '2853', '0'), +('8', '24', '3', '27720', '3382', '0'), +('8', '24', '3', '2711', '2026', '0'), +('8', '24', '3', '71529', '1962', '0'), +('8', '24', '3', '4505', '1161', '0'), +('8', '24', '5', '27723', '4227', '0'), +('8', '24', '5', '14703', '3850', '0'), +('8', '24', '5', '14565', '3623', '0'), +('8', '24', '5', '14700', '2553', '0'), +('8', '24', '8', '11621', '11486', '0'), +('8', '24', '8', '11551', '4827', '0'), +('8', '24', '8', '11603', '4282', '0'), +('8', '24', '8', '1409', '3461', '0'), +('8', '24', '6', '1557', '6760', '0'), +('8', '24', '6', '27721', '2022', '0'), +('8', '24', '6', '4302', '1881', '0'), +('8', '24', '6', '4405', '1870', '0'), +('8', '24', '17', '4832', '6742', '0'), +('8', '24', '17', '4862', '5452', '0'), +('8', '24', '17', '11623', '4375', '0'), +('8', '24', '17', '4154', '4216', '0'), +('8', '24', '7', '4833', '3443', '0'), +('8', '24', '7', '4863', '3238', '0'), +('8', '24', '7', '4343', '2560', '0'), +('8', '24', '7', '4155', '1973', '0'), +('8', '24', '9', '1541', '2833', '0'), +('8', '24', '9', '4834', '2623', '0'), +('8', '24', '9', '4864', '2326', '0'), +('8', '24', '9', '12189', '1961', '0'), +('8', '24', '15', '10366', '3254', '0'), +('8', '24', '15', '14679', '2955', '0'), +('8', '24', '15', '10151', '2700', '0'), +('8', '24', '15', '14678', '2404', '0'), +('8', '24', '20', '11601', '7926', '0'), +('8', '24', '20', '11666', '5784', '0'), +('8', '24', '20', '2920', '4467', '0'), +('8', '24', '20', '1365', '4200', '0'), +('8', '24', '12', '4835', '4751', '0'), +('8', '24', '12', '20655', '4462', '0'), +('8', '24', '12', '4865', '2665', '0'), +('8', '24', '12', '3310', '2661', '0'), +('8', '24', '18', '4836', '3385', '0'), +('8', '24', '18', '4866', '3252', '0'), +('8', '24', '18', '4346', '2621', '0'), +('8', '24', '18', '4158', '2005', '0'), +('8', '24', '19', '4837', '4240', '0'), +('8', '24', '19', '4867', '3198', '0'), +('8', '24', '19', '68239', '3095', '0'), +('8', '24', '19', '4159', '1973', '0'), +('8', '24', '13', '27725', '4279', '0'), +('8', '24', '13', '6952', '3581', '0'), +('8', '24', '13', '5416', '3308', '0'), +('8', '24', '13', '7257', '3266', '0'), +('8', '24', '14', '6952', '3581', '0'), +('8', '24', '14', '5416', '3308', '0'), +('8', '24', '14', '7257', '3266', '0'), +('8', '24', '14', '11625', '3236', '0'), +('8', '24', '11', '13353', '1500', '0'), +('8', '24', '11', '9246', '1486', '0'), +('8', '24', '11', '14762', '1291', '0'), +('8', '24', '11', '20677', '900', '0'), +('8', '25', '22', '10323', '0', '0'), +('8', '25', '22', '10664', '0', '0'), +('8', '25', '22', '9246', '0', '0'), +('8', '25', '22', '21509', '0', '0'), +('8', '25', '1', '14701', '2452', '0'), +('8', '25', '1', '14702', '2050', '0'), +('8', '25', '1', '30361', '1440', '0'), +('8', '25', '1', '10165', '873', '0'), +('8', '25', '2', '4301', '3663', '0'), +('8', '25', '2', '4831', '3382', '0'), +('8', '25', '2', '10142', '3012', '0'), +('8', '25', '2', '10143', '2853', '0'), +('8', '25', '3', '27720', '3393', '0'), +('8', '25', '3', '2711', '2037', '0'), +('8', '25', '3', '71529', '1968', '0'), +('8', '25', '3', '4505', '1178', '0'), +('8', '25', '5', '27723', '4232', '0'), +('8', '25', '5', '14703', '3850', '0'), +('8', '25', '5', '14565', '3628', '0'), +('8', '25', '5', '14700', '2553', '0'), +('8', '25', '8', '11621', '11486', '0'), +('8', '25', '8', '11551', '4827', '0'), +('8', '25', '8', '11603', '4304', '0'), +('8', '25', '8', '1409', '3461', '0'), +('8', '25', '6', '1557', '6760', '0'), +('8', '25', '6', '27721', '2022', '0'), +('8', '25', '6', '4302', '1890', '0'), +('8', '25', '6', '4405', '1870', '0'), +('8', '25', '17', '4832', '6764', '0'), +('8', '25', '17', '4862', '5452', '0'), +('8', '25', '17', '11623', '4375', '0'), +('8', '25', '17', '4154', '4223', '0'), +('8', '25', '7', '4833', '3443', '0'), +('8', '25', '7', '4863', '3260', '0'), +('8', '25', '7', '4343', '2575', '0'), +('8', '25', '7', '4155', '1973', '0'), +('8', '25', '9', '1541', '2833', '0'), +('8', '25', '9', '4834', '2623', '0'), +('8', '25', '9', '4864', '2333', '0'), +('8', '25', '9', '12189', '1961', '0'), +('8', '25', '15', '10366', '3254', '0'), +('8', '25', '15', '14679', '2955', '0'), +('8', '25', '15', '10151', '2700', '0'), +('8', '25', '15', '14678', '2404', '0'), +('8', '25', '20', '11601', '7941', '0'), +('8', '25', '20', '11666', '5794', '0'), +('8', '25', '20', '2920', '4467', '0'), +('8', '25', '20', '1365', '4200', '0'), +('8', '25', '12', '4835', '4758', '0'), +('8', '25', '12', '20655', '4470', '0'), +('8', '25', '12', '4865', '2665', '0'), +('8', '25', '12', '3310', '2661', '0'), +('8', '25', '18', '4836', '3392', '0'), +('8', '25', '18', '4866', '3265', '0'), +('8', '25', '18', '4346', '2621', '0'), +('8', '25', '18', '4158', '2005', '0'), +('8', '25', '19', '4837', '4252', '0'), +('8', '25', '19', '4867', '3211', '0'), +('8', '25', '19', '68239', '3102', '0'), +('8', '25', '19', '4159', '1973', '0'), +('8', '25', '13', '27725', '4279', '0'), +('8', '25', '13', '6952', '3581', '0'), +('8', '25', '13', '5416', '3308', '0'), +('8', '25', '13', '7257', '3266', '0'), +('8', '25', '14', '6952', '3581', '0'), +('8', '25', '14', '5416', '3308', '0'), +('8', '25', '14', '7257', '3266', '0'), +('8', '25', '14', '11625', '3249', '0'), +('8', '25', '11', '9246', '1510', '0'), +('8', '25', '11', '13353', '1500', '0'), +('8', '25', '11', '14762', '1291', '0'), +('8', '25', '11', '20677', '900', '0'), +('8', '26', '22', '10323', '0', '0'), +('8', '26', '22', '10664', '0', '0'), +('8', '26', '22', '9246', '0', '0'), +('8', '26', '22', '21509', '0', '0'), +('8', '26', '1', '14701', '2452', '0'), +('8', '26', '1', '14702', '2050', '0'), +('8', '26', '1', '30361', '1440', '0'), +('8', '26', '1', '10165', '873', '0'), +('8', '26', '2', '4301', '3663', '0'), +('8', '26', '2', '4831', '3394', '0'), +('8', '26', '2', '10142', '3012', '0'), +('8', '26', '2', '10143', '2853', '0'), +('8', '26', '3', '27720', '3406', '0'), +('8', '26', '3', '2711', '2050', '0'), +('8', '26', '3', '71529', '1975', '0'), +('8', '26', '3', '4505', '1195', '0'), +('8', '26', '5', '27723', '4239', '0'), +('8', '26', '5', '14703', '3850', '0'), +('8', '26', '5', '14565', '3635', '0'), +('8', '26', '5', '14700', '2553', '0'), +('8', '26', '8', '11621', '11486', '0'), +('8', '26', '8', '11551', '4827', '0'), +('8', '26', '8', '11603', '4325', '0'), +('8', '26', '8', '1409', '3461', '0'), +('8', '26', '6', '1557', '6760', '0'), +('8', '26', '6', '27721', '2022', '0'), +('8', '26', '6', '4302', '1900', '0'), +('8', '26', '6', '4405', '1870', '0'), +('8', '26', '17', '4832', '6789', '0'), +('8', '26', '17', '4862', '5452', '0'), +('8', '26', '17', '11623', '4375', '0'), +('8', '26', '17', '4154', '4231', '0'), +('8', '26', '7', '4833', '3443', '0'), +('8', '26', '7', '4863', '3281', '0'), +('8', '26', '7', '4343', '2592', '0'), +('8', '26', '7', '4155', '1973', '0'), +('8', '26', '9', '1541', '2833', '0'), +('8', '26', '9', '4834', '2623', '0'), +('8', '26', '9', '4864', '2340', '0'), +('8', '26', '9', '12189', '1961', '0'), +('8', '26', '15', '10366', '3254', '0'), +('8', '26', '15', '14679', '2955', '0'), +('8', '26', '15', '10151', '2700', '0'), +('8', '26', '15', '14678', '2404', '0'), +('8', '26', '20', '11601', '7958', '0'), +('8', '26', '20', '11666', '5806', '0'), +('8', '26', '20', '2920', '4467', '0'), +('8', '26', '20', '1365', '4200', '0'), +('8', '26', '12', '4835', '4766', '0'), +('8', '26', '12', '20655', '4478', '0'), +('8', '26', '12', '4865', '2665', '0'), +('8', '26', '12', '3310', '2661', '0'), +('8', '26', '18', '4836', '3401', '0'), +('8', '26', '18', '4866', '3280', '0'), +('8', '26', '18', '4346', '2621', '0'), +('8', '26', '18', '4158', '2005', '0'), +('8', '26', '19', '4837', '4264', '0'), +('8', '26', '19', '4867', '3226', '0'), +('8', '26', '19', '68239', '3109', '0'), +('8', '26', '19', '4159', '1973', '0'), +('8', '26', '13', '27725', '4279', '0'), +('8', '26', '13', '6952', '3581', '0'), +('8', '26', '13', '5416', '3308', '0'), +('8', '26', '13', '7257', '3266', '0'), +('8', '26', '14', '6952', '3581', '0'), +('8', '26', '14', '5416', '3308', '0'), +('8', '26', '14', '7257', '3266', '0'), +('8', '26', '14', '11625', '3264', '0'), +('8', '26', '11', '9246', '1534', '0'), +('8', '26', '11', '13353', '1500', '0'), +('8', '26', '11', '14762', '1291', '0'), +('8', '26', '11', '20677', '900', '0'), +('8', '27', '22', '10323', '0', '0'), +('8', '27', '22', '10664', '0', '0'), +('8', '27', '22', '9246', '0', '0'), +('8', '27', '22', '21509', '0', '0'), +('8', '27', '1', '14701', '2452', '0'), +('8', '27', '1', '14702', '2050', '0'), +('8', '27', '1', '30361', '1440', '0'), +('8', '27', '1', '10165', '873', '0'), +('8', '27', '2', '4301', '3663', '0'), +('8', '27', '2', '4831', '3407', '0'), +('8', '27', '2', '10142', '3012', '0'), +('8', '27', '2', '10143', '2853', '0'), +('8', '27', '3', '27720', '3418', '0'), +('8', '27', '3', '2711', '2062', '0'), +('8', '27', '3', '71529', '1982', '0'), +('8', '27', '3', '4505', '1212', '0'), +('8', '27', '5', '27723', '4246', '0'), +('8', '27', '5', '14703', '3850', '0'), +('8', '27', '5', '14565', '3642', '0'), +('8', '27', '5', '14700', '2553', '0'), +('8', '27', '8', '11621', '11486', '0'), +('8', '27', '8', '11551', '4827', '0'), +('8', '27', '8', '11603', '4347', '0'), +('8', '27', '8', '1409', '3461', '0'), +('8', '27', '6', '1557', '6760', '0'), +('8', '27', '6', '27721', '2022', '0'), +('8', '27', '6', '4302', '1910', '0'), +('8', '27', '6', '4405', '1870', '0'), +('8', '27', '17', '4832', '6814', '0'), +('8', '27', '17', '4862', '5452', '0'), +('8', '27', '17', '11623', '4375', '0'), +('8', '27', '17', '4154', '4240', '0'), +('8', '27', '7', '4833', '3443', '0'), +('8', '27', '7', '4863', '3303', '0'), +('8', '27', '7', '4343', '2609', '0'), +('8', '27', '7', '4155', '1973', '0'), +('8', '27', '9', '1541', '2833', '0'), +('8', '27', '9', '4834', '2623', '0'), +('8', '27', '9', '4864', '2347', '0'), +('8', '27', '9', '12189', '1961', '0'), +('8', '27', '15', '10366', '3254', '0'), +('8', '27', '15', '14679', '2955', '0'), +('8', '27', '15', '10151', '2700', '0'), +('8', '27', '15', '14678', '2404', '0'), +('8', '27', '20', '11601', '7975', '0'), +('8', '27', '20', '11666', '5818', '0'), +('8', '27', '20', '2920', '4467', '0'), +('8', '27', '20', '1365', '4200', '0'), +('8', '27', '12', '4835', '4775', '0'), +('8', '27', '12', '20655', '4487', '0'), +('8', '27', '12', '4865', '2665', '0'), +('8', '27', '12', '3310', '2661', '0'), +('8', '27', '18', '4836', '3409', '0'), +('8', '27', '18', '4866', '3295', '0'), +('8', '27', '18', '4346', '2621', '0'), +('8', '27', '18', '4158', '2005', '0'), +('8', '27', '19', '4837', '4276', '0'), +('8', '27', '19', '4867', '3241', '0'), +('8', '27', '19', '68239', '3117', '0'), +('8', '27', '19', '4159', '1973', '0'), +('8', '27', '13', '27725', '4279', '0'), +('8', '27', '13', '6952', '3581', '0'), +('8', '27', '13', '5416', '3308', '0'), +('8', '27', '13', '11625', '3279', '0'), +('8', '27', '14', '6952', '3581', '0'), +('8', '27', '14', '5416', '3308', '0'), +('8', '27', '14', '11625', '3279', '0'), +('8', '27', '14', '7257', '3266', '0'), +('8', '27', '11', '9246', '1558', '0'), +('8', '27', '11', '13353', '1500', '0'), +('8', '27', '11', '14762', '1291', '0'), +('8', '27', '11', '20677', '900', '0'), +('8', '28', '22', '10323', '0', '0'), +('8', '28', '22', '10664', '0', '0'), +('8', '28', '22', '9246', '0', '0'), +('8', '28', '22', '21509', '0', '0'), +('8', '28', '1', '14701', '2452', '0'), +('8', '28', '1', '14702', '2050', '0'), +('8', '28', '1', '30361', '1440', '0'), +('8', '28', '1', '10165', '873', '0'), +('8', '28', '2', '4301', '3663', '0'), +('8', '28', '2', '4831', '3419', '0'), +('8', '28', '2', '10142', '3012', '0'), +('8', '28', '2', '10143', '2853', '0'), +('8', '28', '3', '27720', '3430', '0'), +('8', '28', '3', '2711', '2074', '0'), +('8', '28', '3', '71529', '1987', '0'), +('8', '28', '3', '4505', '1229', '0'), +('8', '28', '5', '27723', '4252', '0'), +('8', '28', '5', '14703', '3850', '0'), +('8', '28', '5', '14565', '3648', '0'), +('8', '28', '5', '14700', '2553', '0'), +('8', '28', '8', '11621', '11486', '0'), +('8', '28', '8', '11551', '4827', '0'), +('8', '28', '8', '11603', '4369', '0'), +('8', '28', '8', '1409', '3461', '0'), +('8', '28', '6', '1557', '6760', '0'), +('8', '28', '6', '27721', '2022', '0'), +('8', '28', '6', '4302', '1919', '0'), +('8', '28', '6', '4405', '1870', '0'), +('8', '28', '17', '4832', '6836', '0'), +('8', '28', '17', '4862', '5452', '0'), +('8', '28', '17', '11623', '4375', '0'), +('8', '28', '17', '4154', '4247', '0'), +('8', '28', '7', '4833', '3443', '0'), +('8', '28', '7', '4863', '3325', '0'), +('8', '28', '7', '4343', '2623', '0'), +('8', '28', '7', '4155', '1973', '0'), +('8', '28', '9', '1541', '2833', '0'), +('8', '28', '9', '4834', '2623', '0'), +('8', '28', '9', '4864', '2355', '0'), +('8', '28', '9', '12189', '1961', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '28', '15', '10366', '3254', '0'), +('8', '28', '15', '14679', '2955', '0'), +('8', '28', '15', '10151', '2700', '0'), +('8', '28', '15', '14678', '2404', '0'), +('8', '28', '20', '11601', '7989', '0'), +('8', '28', '20', '11666', '5828', '0'), +('8', '28', '20', '2920', '4467', '0'), +('8', '28', '20', '1365', '4200', '0'), +('8', '28', '12', '4835', '4782', '0'), +('8', '28', '12', '20655', '4494', '0'), +('8', '28', '12', '4865', '2665', '0'), +('8', '28', '12', '3310', '2661', '0'), +('8', '28', '18', '4836', '3416', '0'), +('8', '28', '18', '4866', '3308', '0'), +('8', '28', '18', '4346', '2621', '0'), +('8', '28', '18', '4158', '2005', '0'), +('8', '28', '19', '4837', '4288', '0'), +('8', '28', '19', '4867', '3254', '0'), +('8', '28', '19', '68239', '3124', '0'), +('8', '28', '19', '4159', '1973', '0'), +('8', '28', '13', '27725', '4279', '0'), +('8', '28', '13', '6952', '3581', '0'), +('8', '28', '13', '5416', '3308', '0'), +('8', '28', '13', '11625', '3292', '0'), +('8', '28', '14', '6952', '3581', '0'), +('8', '28', '14', '5416', '3308', '0'), +('8', '28', '14', '11625', '3292', '0'), +('8', '28', '14', '7257', '3266', '0'), +('8', '28', '11', '9246', '1582', '0'), +('8', '28', '11', '13353', '1500', '0'), +('8', '28', '11', '14762', '1291', '0'), +('8', '28', '11', '20677', '900', '0'), +('8', '29', '22', '10323', '0', '0'), +('8', '29', '22', '10664', '0', '0'), +('8', '29', '22', '9246', '0', '0'), +('8', '29', '22', '21509', '0', '0'), +('8', '29', '1', '14701', '2452', '0'), +('8', '29', '1', '14702', '2050', '0'), +('8', '29', '1', '30361', '1440', '0'), +('8', '29', '1', '10165', '873', '0'), +('8', '29', '2', '4301', '3663', '0'), +('8', '29', '2', '4831', '3431', '0'), +('8', '29', '2', '10142', '3012', '0'), +('8', '29', '2', '10143', '2853', '0'), +('8', '29', '3', '27720', '3442', '0'), +('8', '29', '3', '2711', '2086', '0'), +('8', '29', '3', '71529', '1994', '0'), +('8', '29', '3', '4505', '1245', '0'), +('8', '29', '5', '27723', '4259', '0'), +('8', '29', '5', '14703', '3850', '0'), +('8', '29', '5', '14565', '3655', '0'), +('8', '29', '5', '14700', '2553', '0'), +('8', '29', '8', '11621', '11486', '0'), +('8', '29', '8', '11551', '4827', '0'), +('8', '29', '8', '11603', '4391', '0'), +('8', '29', '8', '1409', '3461', '0'), +('8', '29', '6', '1557', '6760', '0'), +('8', '29', '6', '27721', '2022', '0'), +('8', '29', '6', '4302', '1929', '0'), +('8', '29', '6', '4405', '1870', '0'), +('8', '29', '17', '4832', '6861', '0'), +('8', '29', '17', '4862', '5452', '0'), +('8', '29', '17', '11623', '4375', '0'), +('8', '29', '17', '4154', '4256', '0'), +('8', '29', '7', '4833', '3443', '0'), +('8', '29', '7', '4863', '3347', '0'), +('8', '29', '7', '4343', '2640', '0'), +('8', '29', '7', '4155', '1973', '0'), +('8', '29', '9', '1541', '2833', '0'), +('8', '29', '9', '4834', '2623', '0'), +('8', '29', '9', '4864', '2362', '0'), +('8', '29', '9', '12189', '1961', '0'), +('8', '29', '15', '10366', '3254', '0'), +('8', '29', '15', '14679', '2955', '0'), +('8', '29', '15', '10151', '2700', '0'), +('8', '29', '15', '14678', '2404', '0'), +('8', '29', '20', '11601', '8006', '0'), +('8', '29', '20', '11666', '5840', '0'), +('8', '29', '20', '2920', '4467', '0'), +('8', '29', '20', '1365', '4200', '0'), +('8', '29', '12', '4835', '4790', '0'), +('8', '29', '12', '20655', '4503', '0'), +('8', '29', '12', '11624', '2666', '0'), +('8', '29', '12', '4865', '2665', '0'), +('8', '29', '18', '4836', '3425', '0'), +('8', '29', '18', '4866', '3324', '0'), +('8', '29', '18', '4346', '2621', '0'), +('8', '29', '18', '4158', '2005', '0'), +('8', '29', '19', '4837', '4301', '0'), +('8', '29', '19', '4867', '3269', '0'), +('8', '29', '19', '68239', '3131', '0'), +('8', '29', '19', '4159', '1973', '0'), +('8', '29', '13', '27725', '4279', '0'), +('8', '29', '13', '6952', '3581', '0'), +('8', '29', '13', '5416', '3308', '0'), +('8', '29', '13', '11625', '3307', '0'), +('8', '29', '14', '6952', '3581', '0'), +('8', '29', '14', '5416', '3308', '0'), +('8', '29', '14', '11625', '3307', '0'), +('8', '29', '14', '7257', '3266', '0'), +('8', '29', '11', '9246', '1607', '0'), +('8', '29', '11', '13353', '1500', '0'), +('8', '29', '11', '14762', '1291', '0'), +('8', '29', '11', '20677', '900', '0'), +('8', '30', '22', '10323', '0', '0'), +('8', '30', '22', '10664', '0', '0'), +('8', '30', '22', '9246', '0', '0'), +('8', '30', '22', '21509', '0', '0'), +('8', '30', '1', '14701', '2452', '0'), +('8', '30', '1', '14702', '2050', '0'), +('8', '30', '1', '30361', '1440', '0'), +('8', '30', '1', '10165', '873', '0'), +('8', '30', '2', '4301', '3663', '0'), +('8', '30', '2', '4831', '3443', '0'), +('8', '30', '2', '10142', '3012', '0'), +('8', '30', '2', '10143', '2853', '0'), +('8', '30', '3', '27720', '3454', '0'), +('8', '30', '3', '2711', '2098', '0'), +('8', '30', '3', '71529', '2001', '0'), +('8', '30', '3', '4505', '1262', '0'), +('8', '30', '5', '27723', '4265', '0'), +('8', '30', '5', '14703', '3850', '0'), +('8', '30', '5', '14565', '3661', '0'), +('8', '30', '5', '14700', '2553', '0'), +('8', '30', '8', '11621', '11486', '0'), +('8', '30', '8', '11551', '4827', '0'), +('8', '30', '8', '11603', '4412', '0'), +('8', '30', '8', '1409', '3461', '0'), +('8', '30', '6', '1557', '6760', '0'), +('8', '30', '6', '27721', '2022', '0'), +('8', '30', '6', '4302', '1939', '0'), +('8', '30', '6', '4405', '1870', '0'), +('8', '30', '17', '4832', '6887', '0'), +('8', '30', '17', '4862', '5452', '0'), +('8', '30', '17', '11623', '4375', '0'), +('8', '30', '17', '4154', '4264', '0'), +('8', '30', '7', '4833', '3443', '0'), +('8', '30', '7', '4863', '3368', '0'), +('8', '30', '7', '4343', '2657', '0'), +('8', '30', '7', '4155', '1973', '0'), +('8', '30', '9', '1541', '2833', '0'), +('8', '30', '9', '4834', '2623', '0'), +('8', '30', '9', '4864', '2369', '0'), +('8', '30', '9', '12189', '1961', '0'), +('8', '30', '15', '10366', '3254', '0'), +('8', '30', '15', '14679', '2955', '0'), +('8', '30', '15', '10151', '2700', '0'), +('8', '30', '15', '14678', '2404', '0'), +('8', '30', '20', '11601', '8023', '0'), +('8', '30', '20', '11666', '5852', '0'), +('8', '30', '20', '2920', '4467', '0'), +('8', '30', '20', '1365', '4200', '0'), +('8', '30', '12', '4835', '4799', '0'), +('8', '30', '12', '20655', '4511', '0'), +('8', '30', '12', '11624', '2678', '0'), +('8', '30', '12', '4865', '2665', '0'), +('8', '30', '18', '4836', '3433', '0'), +('8', '30', '18', '4866', '3339', '0'), +('8', '30', '18', '4346', '2621', '0'), +('8', '30', '18', '4158', '2005', '0'), +('8', '30', '19', '4837', '4313', '0'), +('8', '30', '19', '4867', '3284', '0'), +('8', '30', '19', '68239', '3138', '0'), +('8', '30', '19', '4159', '1973', '0'), +('8', '30', '13', '27725', '4279', '0'), +('8', '30', '13', '6952', '3581', '0'), +('8', '30', '13', '11625', '3323', '0'), +('8', '30', '13', '5416', '3308', '0'), +('8', '30', '14', '6952', '3581', '0'), +('8', '30', '14', '11625', '3323', '0'), +('8', '30', '14', '5416', '3308', '0'), +('8', '30', '14', '7257', '3266', '0'), +('8', '30', '11', '9246', '1631', '0'), +('8', '30', '11', '13353', '1500', '0'), +('8', '30', '11', '14762', '1291', '0'), +('8', '30', '11', '20677', '900', '0'), +('8', '31', '22', '10323', '0', '0'), +('8', '31', '22', '10664', '0', '0'), +('8', '31', '22', '9246', '0', '0'), +('8', '31', '22', '21509', '0', '0'), +('8', '31', '1', '14701', '2452', '0'), +('8', '31', '1', '14702', '2050', '0'), +('8', '31', '1', '30361', '1440', '0'), +('8', '31', '1', '10165', '873', '0'), +('8', '31', '2', '4301', '3663', '0'), +('8', '31', '2', '4831', '3455', '0'), +('8', '31', '2', '10142', '3012', '0'), +('8', '31', '2', '10143', '2853', '0'), +('8', '31', '3', '27720', '3466', '0'), +('8', '31', '3', '2711', '2110', '0'), +('8', '31', '3', '71529', '2008', '0'), +('8', '31', '3', '4505', '1279', '0'), +('8', '31', '5', '27723', '4272', '0'), +('8', '31', '5', '14703', '3850', '0'), +('8', '31', '5', '14565', '3668', '0'), +('8', '31', '5', '14700', '2553', '0'), +('8', '31', '8', '11621', '11486', '0'), +('8', '31', '8', '11551', '4827', '0'), +('8', '31', '8', '11603', '4434', '0'), +('8', '31', '8', '1409', '3461', '0'), +('8', '31', '6', '1557', '6760', '0'), +('8', '31', '6', '27721', '2022', '0'), +('8', '31', '6', '4302', '1949', '0'), +('8', '31', '6', '4405', '1870', '0'), +('8', '31', '17', '4832', '6912', '0'), +('8', '31', '17', '4862', '5452', '0'), +('8', '31', '17', '11623', '4375', '0'), +('8', '31', '17', '4154', '4272', '0'), +('8', '31', '7', '4833', '3443', '0'), +('8', '31', '7', '4863', '3390', '0'), +('8', '31', '7', '4343', '2674', '0'), +('8', '31', '7', '4155', '1973', '0'), +('8', '31', '9', '1541', '2833', '0'), +('8', '31', '9', '4834', '2623', '0'), +('8', '31', '9', '4864', '2376', '0'), +('8', '31', '9', '12189', '1961', '0'), +('8', '31', '15', '10366', '3254', '0'), +('8', '31', '15', '14679', '2955', '0'), +('8', '31', '15', '10151', '2700', '0'), +('8', '31', '15', '14678', '2404', '0'), +('8', '31', '20', '11601', '8040', '0'), +('8', '31', '20', '11666', '5863', '0'), +('8', '31', '20', '2920', '4467', '0'), +('8', '31', '20', '1365', '4200', '0'), +('8', '31', '12', '4835', '4807', '0'), +('8', '31', '12', '20655', '4519', '0'), +('8', '31', '12', '11624', '2689', '0'), +('8', '31', '12', '4865', '2665', '0'), +('8', '31', '18', '4836', '3442', '0'), +('8', '31', '18', '4866', '3354', '0'), +('8', '31', '18', '4346', '2621', '0'), +('8', '31', '18', '4158', '2005', '0'), +('8', '31', '19', '4837', '4325', '0'), +('8', '31', '19', '4867', '3300', '0'), +('8', '31', '19', '68239', '3146', '0'), +('8', '31', '19', '4159', '1973', '0'), +('8', '31', '13', '27725', '4279', '0'), +('8', '31', '13', '6952', '3581', '0'), +('8', '31', '13', '11625', '3338', '0'), +('8', '31', '13', '5416', '3308', '0'), +('8', '31', '14', '6952', '3581', '0'), +('8', '31', '14', '11625', '3338', '0'), +('8', '31', '14', '5416', '3308', '0'), +('8', '31', '14', '7257', '3266', '0'), +('8', '31', '11', '9246', '1655', '0'), +('8', '31', '11', '13353', '1500', '0'), +('8', '31', '11', '14762', '1291', '0'), +('8', '31', '11', '20677', '900', '0'), +('8', '32', '22', '10323', '0', '0'), +('8', '32', '22', '10664', '0', '0'), +('8', '32', '22', '9246', '0', '0'), +('8', '32', '22', '21509', '0', '0'), +('8', '32', '1', '14701', '2452', '0'), +('8', '32', '1', '14702', '2050', '0'), +('8', '32', '1', '30361', '1440', '0'), +('8', '32', '1', '10165', '873', '0'), +('8', '32', '2', '4301', '3663', '0'), +('8', '32', '2', '4831', '3467', '0'), +('8', '32', '2', '10142', '3012', '0'), +('8', '32', '2', '10143', '2853', '0'), +('8', '32', '3', '27720', '3479', '0'), +('8', '32', '3', '2711', '2123', '0'), +('8', '32', '3', '71529', '2014', '0'), +('8', '32', '3', '4505', '1296', '0'), +('8', '32', '5', '27723', '4279', '0'), +('8', '32', '5', '14703', '3850', '0'), +('8', '32', '5', '14565', '3675', '0'), +('8', '32', '5', '14700', '2553', '0'), +('8', '32', '8', '11621', '11486', '0'), +('8', '32', '8', '11551', '4827', '0'), +('8', '32', '8', '11603', '4456', '0'), +('8', '32', '8', '1409', '3461', '0'), +('8', '32', '6', '1557', '6760', '0'), +('8', '32', '6', '27721', '2022', '0'), +('8', '32', '6', '4302', '1960', '0'), +('8', '32', '6', '4405', '1870', '0'), +('8', '32', '17', '4832', '6938', '0'), +('8', '32', '17', '4862', '5452', '0'), +('8', '32', '17', '11623', '4375', '0'), +('8', '32', '17', '4154', '4281', '0'), +('8', '32', '7', '4833', '3443', '0'), +('8', '32', '7', '4863', '3412', '0'), +('8', '32', '7', '4343', '2691', '0'), +('8', '32', '7', '4155', '1973', '0'), +('8', '32', '9', '1541', '2833', '0'), +('8', '32', '9', '4834', '2623', '0'), +('8', '32', '9', '4864', '2384', '0'), +('8', '32', '9', '12189', '1961', '0'), +('8', '32', '15', '10366', '3254', '0'), +('8', '32', '15', '14679', '2955', '0'), +('8', '32', '15', '10151', '2700', '0'), +('8', '32', '15', '14678', '2404', '0'), +('8', '32', '20', '11601', '8057', '0'), +('8', '32', '20', '11666', '5875', '0'), +('8', '32', '20', '2920', '4467', '0'), +('8', '32', '20', '1365', '4200', '0'), +('8', '32', '12', '4835', '4816', '0'), +('8', '32', '12', '20655', '4527', '0'), +('8', '32', '12', '11624', '2701', '0'), +('8', '32', '12', '4865', '2665', '0'), +('8', '32', '18', '4836', '3450', '0'), +('8', '32', '18', '4866', '3369', '0'), +('8', '32', '18', '4346', '2621', '0'), +('8', '32', '18', '4158', '2005', '0'), +('8', '32', '19', '4837', '4337', '0'), +('8', '32', '19', '4867', '3315', '0'), +('8', '32', '19', '68239', '3153', '0'), +('8', '32', '19', '4159', '1973', '0'), +('8', '32', '13', '27725', '4279', '0'), +('8', '32', '13', '6952', '3581', '0'), +('8', '32', '13', '11625', '3353', '0'), +('8', '32', '13', '5416', '3308', '0'), +('8', '32', '14', '6952', '3581', '0'), +('8', '32', '14', '11625', '3353', '0'), +('8', '32', '14', '5416', '3308', '0'), +('8', '32', '14', '7257', '3266', '0'), +('8', '32', '11', '9246', '1679', '0'), +('8', '32', '11', '13353', '1500', '0'), +('8', '32', '11', '14762', '1291', '0'), +('8', '32', '11', '20677', '900', '0'), +('8', '33', '22', '10323', '0', '0'), +('8', '33', '22', '10664', '0', '0'), +('8', '33', '22', '9246', '0', '0'), +('8', '33', '22', '21509', '0', '0'), +('8', '33', '1', '14701', '2452', '0'), +('8', '33', '1', '14702', '2050', '0'), +('8', '33', '1', '30361', '1440', '0'), +('8', '33', '1', '10165', '873', '0'), +('8', '33', '2', '4301', '3663', '0'), +('8', '33', '2', '4831', '3479', '0'), +('8', '33', '2', '10142', '3012', '0'), +('8', '33', '2', '10143', '2853', '0'), +('8', '33', '3', '27720', '3491', '0'), +('8', '33', '3', '2711', '2135', '0'), +('8', '33', '3', '71529', '2021', '0'), +('8', '33', '3', '4505', '1313', '0'), +('8', '33', '5', '27723', '4286', '0'), +('8', '33', '5', '14703', '3850', '0'), +('8', '33', '5', '14565', '3682', '0'), +('8', '33', '5', '14700', '2553', '0'), +('8', '33', '8', '11621', '11486', '0'), +('8', '33', '8', '11551', '4827', '0'), +('8', '33', '8', '11603', '4478', '0'), +('8', '33', '8', '1409', '3461', '0'), +('8', '33', '6', '1557', '6760', '0'), +('8', '33', '6', '27721', '2022', '0'), +('8', '33', '6', '4302', '1970', '0'), +('8', '33', '6', '4405', '1870', '0'), +('8', '33', '17', '4832', '6963', '0'), +('8', '33', '17', '4862', '5452', '0'), +('8', '33', '17', '11623', '4375', '0'), +('8', '33', '17', '4154', '4289', '0'), +('8', '33', '7', '4833', '3443', '0'), +('8', '33', '7', '4863', '3434', '0'), +('8', '33', '7', '4343', '2708', '0'), +('8', '33', '7', '4155', '1973', '0'), +('8', '33', '9', '1541', '2833', '0'), +('8', '33', '9', '4834', '2623', '0'), +('8', '33', '9', '4864', '2391', '0'), +('8', '33', '9', '12189', '1961', '0'), +('8', '33', '15', '10366', '3254', '0'), +('8', '33', '15', '14679', '2955', '0'), +('8', '33', '15', '10151', '2700', '0'), +('8', '33', '15', '14678', '2404', '0'), +('8', '33', '20', '11601', '8074', '0'), +('8', '33', '20', '11666', '5887', '0'), +('8', '33', '20', '2920', '4467', '0'), +('8', '33', '20', '1365', '4200', '0'), +('8', '33', '12', '4835', '4824', '0'), +('8', '33', '12', '20655', '4535', '0'), +('8', '33', '12', '11624', '2713', '0'), +('8', '33', '12', '4865', '2665', '0'), +('8', '33', '18', '4836', '3459', '0'), +('8', '33', '18', '4866', '3385', '0'), +('8', '33', '18', '4346', '2621', '0'), +('8', '33', '18', '4158', '2005', '0'), +('8', '33', '19', '4837', '4349', '0'), +('8', '33', '19', '4867', '3330', '0'), +('8', '33', '19', '68239', '3160', '0'), +('8', '33', '19', '4159', '1973', '0'), +('8', '33', '13', '27725', '4279', '0'), +('8', '33', '13', '6952', '3581', '0'), +('8', '33', '13', '11625', '3368', '0'), +('8', '33', '13', '5416', '3308', '0'), +('8', '33', '14', '6952', '3581', '0'), +('8', '33', '14', '11625', '3368', '0'), +('8', '33', '14', '5416', '3308', '0'), +('8', '33', '14', '7257', '3266', '0'), +('8', '33', '11', '9246', '1703', '0'), +('8', '33', '11', '13353', '1500', '0'), +('8', '33', '11', '14762', '1291', '0'), +('8', '33', '11', '20677', '900', '0'), +('8', '34', '22', '10323', '0', '0'), +('8', '34', '22', '10664', '0', '0'), +('8', '34', '22', '9246', '0', '0'), +('8', '34', '22', '21509', '0', '0'), +('8', '34', '1', '14701', '2452', '0'), +('8', '34', '1', '14702', '2050', '0'), +('8', '34', '1', '30361', '1440', '0'), +('8', '34', '1', '10165', '873', '0'), +('8', '34', '2', '4301', '3663', '0'), +('8', '34', '2', '4831', '3491', '0'), +('8', '34', '2', '10142', '3012', '0'), +('8', '34', '2', '10143', '2853', '0'), +('8', '34', '3', '27720', '3503', '0'), +('8', '34', '3', '2711', '2147', '0'), +('8', '34', '3', '71529', '2027', '0'), +('8', '34', '3', '4505', '1330', '0'), +('8', '34', '5', '27723', '4291', '0'), +('8', '34', '5', '14703', '3850', '0'), +('8', '34', '5', '14565', '3687', '0'), +('8', '34', '5', '14700', '2553', '0'), +('8', '34', '8', '11621', '11486', '0'), +('8', '34', '8', '11551', '4827', '0'), +('8', '34', '8', '11603', '4499', '0'), +('8', '34', '8', '1409', '3461', '0'), +('8', '34', '6', '1557', '6760', '0'), +('8', '34', '6', '27721', '2022', '0'), +('8', '34', '6', '4302', '1978', '0'), +('8', '34', '6', '4405', '1870', '0'), +('8', '34', '17', '4832', '6985', '0'), +('8', '34', '17', '4862', '5452', '0'), +('8', '34', '17', '11623', '4375', '0'), +('8', '34', '17', '4154', '4297', '0'), +('8', '34', '7', '4863', '3455', '0'), +('8', '34', '7', '4833', '3443', '0'), +('8', '34', '7', '4343', '2722', '0'), +('8', '34', '7', '4155', '1973', '0'), +('8', '34', '9', '1541', '2833', '0'), +('8', '34', '9', '4834', '2623', '0'), +('8', '34', '9', '4864', '2398', '0'), +('8', '34', '9', '12189', '1961', '0'), +('8', '34', '15', '10366', '3254', '0'), +('8', '34', '15', '14679', '2955', '0'), +('8', '34', '15', '10151', '2700', '0'), +('8', '34', '15', '14678', '2404', '0'), +('8', '34', '20', '11601', '8088', '0'), +('8', '34', '20', '11666', '5897', '0'), +('8', '34', '20', '2920', '4467', '0'), +('8', '34', '20', '1365', '4200', '0'), +('8', '34', '12', '4835', '4832', '0'), +('8', '34', '12', '20655', '4543', '0'), +('8', '34', '12', '11624', '2723', '0'), +('8', '34', '12', '4865', '2665', '0'), +('8', '34', '18', '4836', '3466', '0'), +('8', '34', '18', '4866', '3398', '0'), +('8', '34', '18', '4346', '2621', '0'), +('8', '34', '18', '4158', '2005', '0'), +('8', '34', '19', '4837', '4361', '0'), +('8', '34', '19', '4867', '3343', '0'), +('8', '34', '19', '68239', '3167', '0'), +('8', '34', '19', '4159', '1973', '0'), +('8', '34', '13', '27725', '4279', '0'), +('8', '34', '13', '6952', '3581', '0'), +('8', '34', '13', '11625', '3381', '0'), +('8', '34', '13', '5416', '3308', '0'), +('8', '34', '14', '6952', '3581', '0'), +('8', '34', '14', '11625', '3381', '0'), +('8', '34', '14', '5416', '3308', '0'), +('8', '34', '14', '7257', '3266', '0'), +('8', '34', '11', '9246', '1727', '0'), +('8', '34', '11', '13353', '1500', '0'), +('8', '34', '11', '14762', '1291', '0'), +('8', '34', '11', '20677', '900', '0'), +('8', '35', '22', '10323', '0', '0'), +('8', '35', '22', '10664', '0', '0'), +('8', '35', '22', '9246', '0', '0'), +('8', '35', '22', '21509', '0', '0'), +('8', '35', '1', '14701', '2452', '0'), +('8', '35', '1', '14702', '2050', '0'), +('8', '35', '1', '30361', '1440', '0'), +('8', '35', '1', '10165', '873', '0'), +('8', '35', '2', '4301', '3663', '0'), +('8', '35', '2', '4831', '3503', '0'), +('8', '35', '2', '10142', '3012', '0'), +('8', '35', '2', '10143', '2853', '0'), +('8', '35', '3', '27720', '3515', '0'), +('8', '35', '3', '2711', '2159', '0'), +('8', '35', '3', '71529', '2034', '0'), +('8', '35', '3', '4505', '1347', '0'), +('8', '35', '5', '27723', '4298', '0'), +('8', '35', '5', '14703', '3850', '0'), +('8', '35', '5', '14565', '3694', '0'), +('8', '35', '5', '14700', '2553', '0'), +('8', '35', '8', '11621', '11486', '0'), +('8', '35', '8', '11551', '4827', '0'), +('8', '35', '8', '11603', '4521', '0'), +('8', '35', '8', '1409', '3461', '0'), +('8', '35', '6', '1557', '6760', '0'), +('8', '35', '6', '27721', '2022', '0'), +('8', '35', '6', '4302', '1989', '0'), +('8', '35', '6', '4405', '1870', '0'), +('8', '35', '17', '4832', '7010', '0'), +('8', '35', '17', '4862', '5452', '0'), +('8', '35', '17', '11623', '4375', '0'), +('8', '35', '17', '4154', '4305', '0'), +('8', '35', '7', '4863', '3477', '0'), +('8', '35', '7', '4833', '3443', '0'), +('8', '35', '7', '4343', '2739', '0'), +('8', '35', '7', '4155', '1973', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '35', '9', '1541', '2833', '0'), +('8', '35', '9', '4834', '2623', '0'), +('8', '35', '9', '4864', '2405', '0'), +('8', '35', '9', '12189', '1961', '0'), +('8', '35', '15', '10366', '3254', '0'), +('8', '35', '15', '14679', '2955', '0'), +('8', '35', '15', '10151', '2700', '0'), +('8', '35', '15', '14678', '2404', '0'), +('8', '35', '20', '11601', '8105', '0'), +('8', '35', '20', '11666', '5909', '0'), +('8', '35', '20', '2920', '4467', '0'), +('8', '35', '20', '1365', '4200', '0'), +('8', '35', '12', '4835', '4840', '0'), +('8', '35', '12', '20655', '4551', '0'), +('8', '35', '12', '11624', '2735', '0'), +('8', '35', '12', '4865', '2665', '0'), +('8', '35', '18', '4836', '3474', '0'), +('8', '35', '18', '4866', '3413', '0'), +('8', '35', '18', '4346', '2621', '0'), +('8', '35', '18', '4158', '2005', '0'), +('8', '35', '19', '4837', '4373', '0'), +('8', '35', '19', '4867', '3358', '0'), +('8', '35', '19', '68239', '3175', '0'), +('8', '35', '19', '4159', '1973', '0'), +('8', '35', '13', '27725', '4279', '0'), +('8', '35', '13', '6952', '3581', '0'), +('8', '35', '13', '11625', '3397', '0'), +('8', '35', '13', '5416', '3308', '0'), +('8', '35', '14', '6952', '3581', '0'), +('8', '35', '14', '11625', '3397', '0'), +('8', '35', '14', '5416', '3308', '0'), +('8', '35', '14', '7257', '3266', '0'), +('8', '35', '11', '9246', '1752', '0'), +('8', '35', '11', '13353', '1500', '0'), +('8', '35', '11', '14762', '1291', '0'), +('8', '35', '11', '20677', '900', '0'), +('8', '36', '22', '10323', '0', '0'), +('8', '36', '22', '10664', '0', '0'), +('8', '36', '22', '9246', '0', '0'), +('8', '36', '22', '21509', '0', '0'), +('8', '36', '1', '14701', '2452', '0'), +('8', '36', '1', '14702', '2050', '0'), +('8', '36', '1', '30361', '1440', '0'), +('8', '36', '1', '10165', '873', '0'), +('8', '36', '2', '4301', '3663', '0'), +('8', '36', '2', '4831', '3515', '0'), +('8', '36', '2', '10142', '3012', '0'), +('8', '36', '2', '10143', '2853', '0'), +('8', '36', '3', '27720', '3527', '0'), +('8', '36', '3', '2711', '2171', '0'), +('8', '36', '3', '71529', '2040', '0'), +('8', '36', '3', '4505', '1364', '0'), +('8', '36', '5', '27723', '4305', '0'), +('8', '36', '5', '14703', '3850', '0'), +('8', '36', '5', '14565', '3701', '0'), +('8', '36', '5', '14700', '2553', '0'), +('8', '36', '8', '11621', '11486', '0'), +('8', '36', '8', '11551', '4827', '0'), +('8', '36', '8', '11603', '4543', '0'), +('8', '36', '8', '1409', '3461', '0'), +('8', '36', '6', '1557', '6760', '0'), +('8', '36', '6', '27721', '2022', '0'), +('8', '36', '6', '4302', '1999', '0'), +('8', '36', '6', '4405', '1870', '0'), +('8', '36', '17', '4832', '7035', '0'), +('8', '36', '17', '4862', '5452', '0'), +('8', '36', '17', '11623', '4375', '0'), +('8', '36', '17', '4154', '4314', '0'), +('8', '36', '7', '4863', '3499', '0'), +('8', '36', '7', '4833', '3443', '0'), +('8', '36', '7', '4343', '2756', '0'), +('8', '36', '7', '4155', '1973', '0'), +('8', '36', '9', '1541', '2833', '0'), +('8', '36', '9', '4834', '2623', '0'), +('8', '36', '9', '4864', '2413', '0'), +('8', '36', '9', '12189', '1961', '0'), +('8', '36', '15', '10366', '3254', '0'), +('8', '36', '15', '14679', '2955', '0'), +('8', '36', '15', '10151', '2700', '0'), +('8', '36', '15', '14678', '2404', '0'), +('8', '36', '20', '11601', '8122', '0'), +('8', '36', '20', '11666', '5921', '0'), +('8', '36', '20', '2920', '4467', '0'), +('8', '36', '20', '1365', '4200', '0'), +('8', '36', '12', '4835', '4848', '0'), +('8', '36', '12', '20655', '4560', '0'), +('8', '36', '12', '11624', '2747', '0'), +('8', '36', '12', '4865', '2665', '0'), +('8', '36', '18', '4836', '3483', '0'), +('8', '36', '18', '4866', '3428', '0'), +('8', '36', '18', '4346', '2621', '0'), +('8', '36', '18', '4158', '2005', '0'), +('8', '36', '19', '4837', '4385', '0'), +('8', '36', '19', '4867', '3374', '0'), +('8', '36', '19', '68239', '3182', '0'), +('8', '36', '19', '4159', '1973', '0'), +('8', '36', '13', '27725', '4279', '0'), +('8', '36', '13', '6952', '3581', '0'), +('8', '36', '13', '11625', '3412', '0'), +('8', '36', '13', '5416', '3308', '0'), +('8', '36', '14', '6952', '3581', '0'), +('8', '36', '14', '11625', '3412', '0'), +('8', '36', '14', '5416', '3308', '0'), +('8', '36', '14', '7257', '3266', '0'), +('8', '36', '11', '9246', '1776', '0'), +('8', '36', '11', '13353', '1500', '0'), +('8', '36', '11', '14762', '1291', '0'), +('8', '36', '11', '20677', '900', '0'), +('8', '37', '22', '10323', '0', '0'), +('8', '37', '22', '10664', '0', '0'), +('8', '37', '22', '9246', '0', '0'), +('8', '37', '22', '21509', '0', '0'), +('8', '37', '1', '14701', '2452', '0'), +('8', '37', '1', '14702', '2050', '0'), +('8', '37', '1', '30361', '1440', '0'), +('8', '37', '1', '10165', '873', '0'), +('8', '37', '2', '4301', '3663', '0'), +('8', '37', '2', '4831', '3527', '0'), +('8', '37', '2', '10142', '3012', '0'), +('8', '37', '2', '10143', '2853', '0'), +('8', '37', '3', '27720', '3540', '0'), +('8', '37', '3', '2711', '2184', '0'), +('8', '37', '3', '71529', '2047', '0'), +('8', '37', '3', '4505', '1381', '0'), +('8', '37', '5', '27723', '4312', '0'), +('8', '37', '5', '14703', '3850', '0'), +('8', '37', '5', '14565', '3708', '0'), +('8', '37', '5', '14700', '2553', '0'), +('8', '37', '8', '11621', '11486', '0'), +('8', '37', '8', '11551', '4827', '0'), +('8', '37', '8', '11603', '4565', '0'), +('8', '37', '8', '1409', '3461', '0'), +('8', '37', '6', '1557', '6760', '0'), +('8', '37', '6', '27721', '2022', '0'), +('8', '37', '6', '4302', '2009', '0'), +('8', '37', '6', '4405', '1870', '0'), +('8', '37', '17', '4832', '7061', '0'), +('8', '37', '17', '4862', '5452', '0'), +('8', '37', '17', '11623', '4375', '0'), +('8', '37', '17', '4154', '4322', '0'), +('8', '37', '7', '4863', '3521', '0'), +('8', '37', '7', '4833', '3443', '0'), +('8', '37', '7', '4343', '2773', '0'), +('8', '37', '7', '4155', '1973', '0'), +('8', '37', '9', '1541', '2833', '0'), +('8', '37', '9', '4834', '2623', '0'), +('8', '37', '9', '4864', '2420', '0'), +('8', '37', '9', '12189', '1961', '0'), +('8', '37', '15', '10366', '3254', '0'), +('8', '37', '15', '14679', '2955', '0'), +('8', '37', '15', '10151', '2700', '0'), +('8', '37', '15', '14678', '2404', '0'), +('8', '37', '20', '11601', '8139', '0'), +('8', '37', '20', '11666', '5933', '0'), +('8', '37', '20', '2920', '4467', '0'), +('8', '37', '20', '1365', '4200', '0'), +('8', '37', '12', '4835', '4857', '0'), +('8', '37', '12', '20655', '4568', '0'), +('8', '37', '12', '11624', '2759', '0'), +('8', '37', '12', '4865', '2665', '0'), +('8', '37', '18', '4836', '3491', '0'), +('8', '37', '18', '4866', '3443', '0'), +('8', '37', '18', '4346', '2621', '0'), +('8', '37', '18', '4158', '2005', '0'), +('8', '37', '19', '4837', '4397', '0'), +('8', '37', '19', '4867', '3389', '0'), +('8', '37', '19', '68239', '3189', '0'), +('8', '37', '19', '4159', '1973', '0'), +('8', '37', '13', '27725', '4279', '0'), +('8', '37', '13', '6952', '3581', '0'), +('8', '37', '13', '11625', '3427', '0'), +('8', '37', '13', '5416', '3308', '0'), +('8', '37', '14', '6952', '3581', '0'), +('8', '37', '14', '11625', '3427', '0'), +('8', '37', '14', '5416', '3308', '0'), +('8', '37', '14', '5500', '3294', '0'), +('8', '37', '11', '9246', '1800', '0'), +('8', '37', '11', '13353', '1500', '0'), +('8', '37', '11', '14762', '1291', '0'), +('8', '37', '11', '20677', '900', '0'), +('8', '38', '22', '10323', '0', '0'), +('8', '38', '22', '10664', '0', '0'), +('8', '38', '22', '9246', '0', '0'), +('8', '38', '22', '21509', '0', '0'), +('8', '38', '1', '14701', '2452', '0'), +('8', '38', '1', '14702', '2050', '0'), +('8', '38', '1', '30361', '1440', '0'), +('8', '38', '1', '10165', '873', '0'), +('8', '38', '2', '4301', '3663', '0'), +('8', '38', '2', '4831', '3539', '0'), +('8', '38', '2', '10142', '3012', '0'), +('8', '38', '2', '10143', '2853', '0'), +('8', '38', '3', '27720', '3552', '0'), +('8', '38', '3', '2711', '2196', '0'), +('8', '38', '3', '71529', '2054', '0'), +('8', '38', '3', '4505', '1398', '0'), +('8', '38', '5', '27723', '4319', '0'), +('8', '38', '5', '14703', '3850', '0'), +('8', '38', '5', '14565', '3715', '0'), +('8', '38', '5', '14700', '2553', '0'), +('8', '38', '8', '11621', '11486', '0'), +('8', '38', '8', '11551', '4827', '0'), +('8', '38', '8', '11603', '4586', '0'), +('8', '38', '8', '1409', '3461', '0'), +('8', '38', '6', '1557', '6760', '0'), +('8', '38', '6', '27721', '2022', '0'), +('8', '38', '6', '4302', '2019', '0'), +('8', '38', '6', '4405', '1870', '0'), +('8', '38', '17', '4832', '7086', '0'), +('8', '38', '17', '4862', '5452', '0'), +('8', '38', '17', '11623', '4375', '0'), +('8', '38', '17', '4154', '4330', '0'), +('8', '38', '7', '4863', '3542', '0'), +('8', '38', '7', '4833', '3443', '0'), +('8', '38', '7', '4343', '2790', '0'), +('8', '38', '7', '4155', '1973', '0'), +('8', '38', '9', '1541', '2833', '0'), +('8', '38', '9', '4834', '2623', '0'), +('8', '38', '9', '4864', '2427', '0'), +('8', '38', '9', '12189', '1961', '0'), +('8', '38', '15', '10366', '3254', '0'), +('8', '38', '15', '14679', '2955', '0'), +('8', '38', '15', '10151', '2700', '0'), +('8', '38', '15', '14678', '2404', '0'), +('8', '38', '20', '11601', '8156', '0'), +('8', '38', '20', '11666', '5945', '0'), +('8', '38', '20', '2920', '4467', '0'), +('8', '38', '20', '1365', '4200', '0'), +('8', '38', '12', '4835', '4865', '0'), +('8', '38', '12', '20655', '4576', '0'), +('8', '38', '12', '11624', '2771', '0'), +('8', '38', '12', '4865', '2665', '0'), +('8', '38', '18', '4836', '3500', '0'), +('8', '38', '18', '4866', '3458', '0'), +('8', '38', '18', '4346', '2621', '0'), +('8', '38', '18', '4158', '2005', '0'), +('8', '38', '19', '4837', '4409', '0'), +('8', '38', '19', '4867', '3404', '0'), +('8', '38', '19', '68239', '3196', '0'), +('8', '38', '19', '4159', '1973', '0'), +('8', '38', '13', '27725', '4279', '0'), +('8', '38', '13', '6952', '3581', '0'), +('8', '38', '13', '11625', '3442', '0'), +('8', '38', '13', '5416', '3308', '0'), +('8', '38', '14', '6952', '3581', '0'), +('8', '38', '14', '11625', '3442', '0'), +('8', '38', '14', '5416', '3308', '0'), +('8', '38', '14', '5500', '3294', '0'), +('8', '38', '11', '9246', '1824', '0'), +('8', '38', '11', '13353', '1500', '0'), +('8', '38', '11', '14762', '1291', '0'), +('8', '38', '11', '20677', '900', '0'), +('8', '39', '22', '10323', '0', '0'), +('8', '39', '22', '10664', '0', '0'), +('8', '39', '22', '9246', '0', '0'), +('8', '39', '22', '21509', '0', '0'), +('8', '39', '1', '14701', '2452', '0'), +('8', '39', '1', '14702', '2050', '0'), +('8', '39', '1', '30361', '1440', '0'), +('8', '39', '1', '10165', '873', '0'), +('8', '39', '2', '4301', '3663', '0'), +('8', '39', '2', '4831', '3552', '0'), +('8', '39', '2', '10142', '3012', '0'), +('8', '39', '2', '10143', '2853', '0'), +('8', '39', '3', '27720', '3564', '0'), +('8', '39', '3', '2711', '2208', '0'), +('8', '39', '3', '71529', '2061', '0'), +('8', '39', '3', '4505', '1415', '0'), +('8', '39', '5', '27723', '4325', '0'), +('8', '39', '5', '14703', '3850', '0'), +('8', '39', '5', '14565', '3721', '0'), +('8', '39', '5', '14700', '2553', '0'), +('8', '39', '8', '11621', '11486', '0'), +('8', '39', '8', '11551', '4827', '0'), +('8', '39', '8', '11603', '4608', '0'), +('8', '39', '8', '1409', '3461', '0'), +('8', '39', '6', '1557', '6760', '0'), +('8', '39', '6', '4302', '2029', '0'), +('8', '39', '6', '27721', '2022', '0'), +('8', '39', '6', '4405', '1870', '0'), +('8', '39', '17', '4832', '7111', '0'), +('8', '39', '17', '4862', '5452', '0'), +('8', '39', '17', '11623', '4375', '0'), +('8', '39', '17', '4154', '4339', '0'), +('8', '39', '7', '4863', '3564', '0'), +('8', '39', '7', '4833', '3443', '0'), +('8', '39', '7', '4343', '2807', '0'), +('8', '39', '7', '4155', '1973', '0'), +('8', '39', '9', '1541', '2833', '0'), +('8', '39', '9', '4834', '2623', '0'), +('8', '39', '9', '4864', '2434', '0'), +('8', '39', '9', '12189', '1961', '0'), +('8', '39', '15', '10366', '3254', '0'), +('8', '39', '15', '14679', '2955', '0'), +('8', '39', '15', '10151', '2700', '0'), +('8', '39', '15', '14678', '2404', '0'), +('8', '39', '20', '11601', '8173', '0'), +('8', '39', '20', '11666', '5956', '0'), +('8', '39', '20', '2920', '4467', '0'), +('8', '39', '20', '1365', '4200', '0'), +('8', '39', '12', '4835', '4874', '0'), +('8', '39', '12', '20655', '4584', '0'), +('8', '39', '12', '11624', '2782', '0'), +('8', '39', '12', '4865', '2665', '0'), +('8', '39', '18', '4836', '3508', '0'), +('8', '39', '18', '4866', '3474', '0'), +('8', '39', '18', '4346', '2621', '0'), +('8', '39', '18', '4158', '2005', '0'), +('8', '39', '19', '4837', '4421', '0'), +('8', '39', '19', '4867', '3419', '0'), +('8', '39', '19', '68239', '3204', '0'), +('8', '39', '19', '4159', '1973', '0'), +('8', '39', '13', '27725', '4279', '0'), +('8', '39', '13', '6952', '3581', '0'), +('8', '39', '13', '11625', '3457', '0'), +('8', '39', '13', '5416', '3308', '0'), +('8', '39', '14', '6952', '3581', '0'), +('8', '39', '14', '11625', '3457', '0'), +('8', '39', '14', '5416', '3308', '0'), +('8', '39', '14', '5500', '3294', '0'), +('8', '39', '11', '9246', '1848', '0'), +('8', '39', '11', '13353', '1500', '0'), +('8', '39', '11', '14762', '1291', '0'), +('8', '39', '11', '20677', '900', '0'), +('8', '40', '22', '10323', '0', '0'), +('8', '40', '22', '10664', '0', '0'), +('8', '40', '22', '9246', '0', '0'), +('8', '40', '22', '21509', '0', '0'), +('8', '40', '1', '14701', '2452', '0'), +('8', '40', '1', '14702', '2050', '0'), +('8', '40', '1', '30361', '1440', '0'), +('8', '40', '1', '10165', '873', '0'), +('8', '40', '2', '4301', '3663', '0'), +('8', '40', '2', '4831', '3564', '0'), +('8', '40', '2', '10142', '3012', '0'), +('8', '40', '2', '10143', '2853', '0'), +('8', '40', '3', '27720', '3577', '0'), +('8', '40', '3', '2711', '2221', '0'), +('8', '40', '3', '71529', '2068', '0'), +('8', '40', '3', '11052', '1450', '0'), +('8', '40', '5', '27723', '4332', '0'), +('8', '40', '5', '14703', '3850', '0'), +('8', '40', '5', '14565', '3728', '0'), +('8', '40', '5', '14700', '2553', '0'), +('8', '40', '8', '11621', '11486', '0'), +('8', '40', '8', '11551', '4827', '0'), +('8', '40', '8', '11603', '4630', '0'), +('8', '40', '8', '1409', '3461', '0'), +('8', '40', '6', '1557', '6760', '0'), +('8', '40', '6', '4302', '2039', '0'), +('8', '40', '6', '27721', '2022', '0'), +('8', '40', '6', '4405', '1870', '0'), +('8', '40', '17', '4832', '7137', '0'), +('8', '40', '17', '4862', '5452', '0'), +('8', '40', '17', '11623', '4375', '0'), +('8', '40', '17', '4154', '4347', '0'), +('8', '40', '7', '4863', '3586', '0'), +('8', '40', '7', '4833', '3443', '0'), +('8', '40', '7', '4343', '2824', '0'), +('8', '40', '7', '4155', '1973', '0'), +('8', '40', '9', '1541', '2833', '0'), +('8', '40', '9', '4834', '2623', '0'), +('8', '40', '9', '4864', '2442', '0'), +('8', '40', '9', '12189', '1961', '0'), +('8', '40', '15', '10366', '3254', '0'), +('8', '40', '15', '14679', '2955', '0'), +('8', '40', '15', '10151', '2700', '0'), +('8', '40', '15', '14678', '2404', '0'), +('8', '40', '20', '11601', '8190', '0'), +('8', '40', '20', '11666', '5968', '0'), +('8', '40', '20', '2920', '4467', '0'), +('8', '40', '20', '1365', '4200', '0'), +('8', '40', '12', '4835', '4882', '0'), +('8', '40', '12', '20655', '4592', '0'), +('8', '40', '12', '11624', '2794', '0'), +('8', '40', '12', '4865', '2665', '0'), +('8', '40', '18', '4836', '3516', '0'), +('8', '40', '18', '4866', '3489', '0'), +('8', '40', '18', '4346', '2621', '0'), +('8', '40', '18', '4158', '2005', '0'), +('8', '40', '19', '4837', '4433', '0'), +('8', '40', '19', '4867', '3435', '0'), +('8', '40', '19', '68239', '3211', '0'), +('8', '40', '19', '4159', '1973', '0'), +('8', '40', '13', '27725', '4279', '0'), +('8', '40', '13', '6952', '3581', '0'), +('8', '40', '13', '11625', '3473', '0'), +('8', '40', '13', '5416', '3308', '0'), +('8', '40', '14', '6952', '3581', '0'), +('8', '40', '14', '11625', '3473', '0'), +('8', '40', '14', '5416', '3308', '0'), +('8', '40', '14', '5500', '3294', '0'), +('8', '40', '11', '9246', '1872', '0'), +('8', '40', '11', '13353', '1500', '0'), +('8', '40', '11', '14762', '1291', '0'), +('8', '40', '11', '20677', '900', '0'), +('8', '41', '22', '10323', '0', '0'), +('8', '41', '22', '10664', '0', '0'), +('8', '41', '22', '9246', '0', '0'), +('8', '41', '22', '21509', '0', '0'), +('8', '41', '1', '14701', '2452', '0'), +('8', '41', '1', '14702', '2050', '0'), +('8', '41', '1', '30361', '1440', '0'), +('8', '41', '1', '10165', '873', '0'), +('8', '41', '2', '4301', '3663', '0'), +('8', '41', '2', '4831', '3576', '0'), +('8', '41', '2', '10142', '3012', '0'), +('8', '41', '2', '10143', '2853', '0'), +('8', '41', '3', '27720', '3589', '0'), +('8', '41', '3', '2711', '2233', '0'), +('8', '41', '3', '71529', '2074', '0'), +('8', '41', '3', '11052', '1486', '0'), +('8', '41', '5', '27723', '4339', '0'), +('8', '41', '5', '14703', '3850', '0'), +('8', '41', '5', '14565', '3735', '0'), +('8', '41', '5', '14700', '2553', '0'), +('8', '41', '8', '11621', '11486', '0'), +('8', '41', '8', '11551', '4827', '0'), +('8', '41', '8', '11603', '4652', '0'), +('8', '41', '8', '1409', '3461', '0'), +('8', '41', '6', '1557', '6760', '0'), +('8', '41', '6', '4302', '2049', '0'), +('8', '41', '6', '27721', '2022', '0'), +('8', '41', '6', '4405', '1870', '0'), +('8', '41', '17', '4832', '7162', '0'), +('8', '41', '17', '4862', '5452', '0'), +('8', '41', '17', '11623', '4375', '0'), +('8', '41', '17', '4154', '4356', '0'), +('8', '41', '7', '4863', '3608', '0'), +('8', '41', '7', '4833', '3443', '0'), +('8', '41', '7', '4343', '2841', '0'), +('8', '41', '7', '4155', '1973', '0'), +('8', '41', '9', '1541', '2833', '0'), +('8', '41', '9', '4834', '2623', '0'), +('8', '41', '9', '4864', '2449', '0'), +('8', '41', '9', '12189', '1961', '0'), +('8', '41', '15', '10366', '3254', '0'), +('8', '41', '15', '14679', '2955', '0'), +('8', '41', '15', '10151', '2700', '0'), +('8', '41', '15', '14678', '2404', '0'), +('8', '41', '20', '11601', '8206', '0'), +('8', '41', '20', '11666', '5980', '0'), +('8', '41', '20', '2920', '4467', '0'), +('8', '41', '20', '1365', '4200', '0'), +('8', '41', '12', '4835', '4891', '0'), +('8', '41', '12', '20655', '4601', '0'), +('8', '41', '12', '11624', '2806', '0'), +('8', '41', '12', '4865', '2665', '0'), +('8', '41', '18', '4836', '3525', '0'), +('8', '41', '18', '4866', '3504', '0'), +('8', '41', '18', '4346', '2621', '0'), +('8', '41', '18', '4158', '2005', '0'), +('8', '41', '19', '4837', '4445', '0'), +('8', '41', '19', '4867', '3450', '0'), +('8', '41', '19', '68239', '3218', '0'), +('8', '41', '19', '4159', '1973', '0'), +('8', '41', '13', '27725', '4279', '0'), +('8', '41', '13', '6952', '3581', '0'), +('8', '41', '13', '11625', '3488', '0'), +('8', '41', '13', '5416', '3308', '0'), +('8', '41', '14', '6952', '3581', '0'), +('8', '41', '14', '11625', '3488', '0'), +('8', '41', '14', '5416', '3308', '0'), +('8', '41', '14', '5500', '3294', '0'), +('8', '41', '11', '9246', '1897', '0'), +('8', '41', '11', '13353', '1500', '0'), +('8', '41', '11', '14762', '1291', '0'), +('8', '41', '11', '20677', '900', '0'), +('8', '42', '22', '10323', '0', '0'), +('8', '42', '22', '10664', '0', '0'), +('8', '42', '22', '9246', '0', '0'), +('8', '42', '22', '21509', '0', '0'), +('8', '42', '1', '14701', '2452', '0'), +('8', '42', '1', '14702', '2050', '0'), +('8', '42', '1', '30361', '1440', '0'), +('8', '42', '1', '10165', '873', '0'), +('8', '42', '2', '4301', '3663', '0'), +('8', '42', '2', '4831', '3588', '0'), +('8', '42', '2', '10142', '3012', '0'), +('8', '42', '2', '10143', '2853', '0'), +('8', '42', '3', '27720', '3602', '0'), +('8', '42', '3', '2711', '2246', '0'), +('8', '42', '3', '71529', '2082', '0'), +('8', '42', '3', '11052', '1522', '0'), +('8', '42', '5', '27723', '4347', '0'), +('8', '42', '5', '14703', '3850', '0'), +('8', '42', '5', '14565', '3743', '0'), +('8', '42', '5', '14700', '2553', '0'), +('8', '42', '8', '11621', '11486', '0'), +('8', '42', '8', '11551', '4827', '0'), +('8', '42', '8', '11603', '4673', '0'), +('8', '42', '8', '1409', '3461', '0'), +('8', '42', '6', '1557', '6760', '0'), +('8', '42', '6', '4302', '2061', '0'), +('8', '42', '6', '27721', '2022', '0'), +('8', '42', '6', '4405', '1870', '0'), +('8', '42', '17', '4832', '7191', '0'), +('8', '42', '17', '4862', '5452', '0'), +('8', '42', '17', '11623', '4375', '0'), +('8', '42', '17', '4154', '4365', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '42', '7', '4863', '3629', '0'), +('8', '42', '7', '4833', '3443', '0'), +('8', '42', '7', '4343', '2860', '0'), +('8', '42', '7', '4155', '1973', '0'), +('8', '42', '9', '1541', '2833', '0'), +('8', '42', '9', '4834', '2623', '0'), +('8', '42', '9', '4864', '2456', '0'), +('8', '42', '9', '12189', '1961', '0'), +('8', '42', '15', '10366', '3254', '0'), +('8', '42', '15', '14679', '2955', '0'), +('8', '42', '15', '10151', '2700', '0'), +('8', '42', '15', '14678', '2404', '0'), +('8', '42', '20', '11601', '8226', '0'), +('8', '42', '20', '11666', '5994', '0'), +('8', '42', '20', '2920', '4467', '0'), +('8', '42', '20', '1365', '4200', '0'), +('8', '42', '12', '4835', '4900', '0'), +('8', '42', '12', '20655', '4609', '0'), +('8', '42', '12', '11624', '2820', '0'), +('8', '42', '12', '4865', '2665', '0'), +('8', '42', '18', '4836', '3535', '0'), +('8', '42', '18', '4866', '3521', '0'), +('8', '42', '18', '4346', '2621', '0'), +('8', '42', '18', '4158', '2005', '0'), +('8', '42', '19', '4837', '4458', '0'), +('8', '42', '19', '4867', '3467', '0'), +('8', '42', '19', '68239', '3225', '0'), +('8', '42', '19', '4159', '1973', '0'), +('8', '42', '13', '27725', '4279', '0'), +('8', '42', '13', '6952', '3581', '0'), +('8', '42', '13', '11625', '3505', '0'), +('8', '42', '13', '5416', '3308', '0'), +('8', '42', '14', '6952', '3581', '0'), +('8', '42', '14', '11625', '3505', '0'), +('8', '42', '14', '5416', '3308', '0'), +('8', '42', '14', '5500', '3294', '0'), +('8', '42', '11', '9246', '1921', '0'), +('8', '42', '11', '13353', '1500', '0'), +('8', '42', '11', '14762', '1291', '0'), +('8', '42', '11', '20677', '900', '0'), +('8', '43', '22', '10323', '0', '0'), +('8', '43', '22', '10664', '0', '0'), +('8', '43', '22', '9246', '0', '0'), +('8', '43', '22', '21509', '0', '0'), +('8', '43', '1', '14701', '2452', '0'), +('8', '43', '1', '14702', '2050', '0'), +('8', '43', '1', '30361', '1440', '0'), +('8', '43', '1', '10165', '873', '0'), +('8', '43', '2', '4301', '3663', '0'), +('8', '43', '2', '4831', '3600', '0'), +('8', '43', '2', '10142', '3012', '0'), +('8', '43', '2', '10143', '2853', '0'), +('8', '43', '3', '27720', '3614', '0'), +('8', '43', '3', '2711', '2258', '0'), +('8', '43', '3', '71529', '2089', '0'), +('8', '43', '3', '11052', '1558', '0'), +('8', '43', '5', '27723', '4353', '0'), +('8', '43', '5', '14703', '3850', '0'), +('8', '43', '5', '14565', '3749', '0'), +('8', '43', '5', '14700', '2553', '0'), +('8', '43', '8', '11621', '11486', '0'), +('8', '43', '8', '11551', '4827', '0'), +('8', '43', '8', '11603', '4695', '0'), +('8', '43', '8', '1409', '3461', '0'), +('8', '43', '6', '1557', '6760', '0'), +('8', '43', '6', '4302', '2071', '0'), +('8', '43', '6', '27721', '2022', '0'), +('8', '43', '6', '4405', '1870', '0'), +('8', '43', '17', '4832', '7217', '0'), +('8', '43', '17', '4862', '5452', '0'), +('8', '43', '17', '11623', '4375', '0'), +('8', '43', '17', '4154', '4374', '0'), +('8', '43', '7', '4863', '3651', '0'), +('8', '43', '7', '4833', '3443', '0'), +('8', '43', '7', '4343', '2877', '0'), +('8', '43', '7', '4155', '1973', '0'), +('8', '43', '9', '1541', '2833', '0'), +('8', '43', '9', '4834', '2623', '0'), +('8', '43', '9', '4864', '2463', '0'), +('8', '43', '9', '12189', '1961', '0'), +('8', '43', '15', '10366', '3254', '0'), +('8', '43', '15', '14679', '2955', '0'), +('8', '43', '15', '10151', '2700', '0'), +('8', '43', '15', '14678', '2404', '0'), +('8', '43', '20', '11601', '8243', '0'), +('8', '43', '20', '11666', '6005', '0'), +('8', '43', '20', '2920', '4467', '0'), +('8', '43', '20', '1365', '4200', '0'), +('8', '43', '12', '4835', '4909', '0'), +('8', '43', '12', '20655', '4618', '0'), +('8', '43', '12', '11624', '2831', '0'), +('8', '43', '12', '4865', '2665', '0'), +('8', '43', '18', '4836', '3543', '0'), +('8', '43', '18', '4866', '3537', '0'), +('8', '43', '18', '4346', '2621', '0'), +('8', '43', '18', '4158', '2005', '0'), +('8', '43', '19', '4837', '4470', '0'), +('8', '43', '19', '4867', '3482', '0'), +('8', '43', '19', '68239', '3233', '0'), +('8', '43', '19', '4159', '1973', '0'), +('8', '43', '13', '27725', '4279', '0'), +('8', '43', '13', '6952', '3581', '0'), +('8', '43', '13', '11625', '3520', '0'), +('8', '43', '13', '5416', '3308', '0'), +('8', '43', '14', '6952', '3581', '0'), +('8', '43', '14', '11625', '3520', '0'), +('8', '43', '14', '5416', '3308', '0'), +('8', '43', '14', '5500', '3294', '0'), +('8', '43', '11', '9246', '1945', '0'), +('8', '43', '11', '13353', '1500', '0'), +('8', '43', '11', '14762', '1291', '0'), +('8', '43', '11', '20677', '900', '0'), +('8', '44', '22', '10323', '0', '0'), +('8', '44', '22', '10664', '0', '0'), +('8', '44', '22', '9246', '0', '0'), +('8', '44', '22', '21509', '0', '0'), +('8', '44', '1', '14701', '2452', '0'), +('8', '44', '1', '14702', '2050', '0'), +('8', '44', '1', '30361', '1440', '0'), +('8', '44', '1', '10165', '873', '0'), +('8', '44', '2', '4301', '3663', '0'), +('8', '44', '2', '4831', '3612', '0'), +('8', '44', '2', '10142', '3012', '0'), +('8', '44', '2', '10143', '2853', '0'), +('8', '44', '3', '27720', '3627', '0'), +('8', '44', '3', '2711', '2271', '0'), +('8', '44', '3', '71529', '2096', '0'), +('8', '44', '3', '11052', '1595', '0'), +('8', '44', '5', '27723', '4360', '0'), +('8', '44', '5', '14703', '3850', '0'), +('8', '44', '5', '14565', '3756', '0'), +('8', '44', '5', '68291', '2561', '0'), +('8', '44', '8', '11621', '11486', '0'), +('8', '44', '8', '11551', '4827', '0'), +('8', '44', '8', '11603', '4717', '0'), +('8', '44', '8', '1409', '3461', '0'), +('8', '44', '6', '1557', '6760', '0'), +('8', '44', '6', '4302', '2081', '0'), +('8', '44', '6', '27721', '2022', '0'), +('8', '44', '6', '4405', '1870', '0'), +('8', '44', '17', '4832', '7242', '0'), +('8', '44', '17', '4862', '5452', '0'), +('8', '44', '17', '4154', '4382', '0'), +('8', '44', '17', '11623', '4375', '0'), +('8', '44', '7', '4863', '3673', '0'), +('8', '44', '7', '4833', '3443', '0'), +('8', '44', '7', '4343', '2894', '0'), +('8', '44', '7', '4155', '1973', '0'), +('8', '44', '9', '1541', '2833', '0'), +('8', '44', '9', '4834', '2623', '0'), +('8', '44', '9', '4864', '2471', '0'), +('8', '44', '9', '12189', '1961', '0'), +('8', '44', '15', '10366', '3254', '0'), +('8', '44', '15', '14679', '2955', '0'), +('8', '44', '15', '10151', '2700', '0'), +('8', '44', '15', '14678', '2404', '0'), +('8', '44', '20', '11601', '8260', '0'), +('8', '44', '20', '11666', '6017', '0'), +('8', '44', '20', '2920', '4467', '0'), +('8', '44', '20', '1365', '4200', '0'), +('8', '44', '12', '4835', '4917', '0'), +('8', '44', '12', '20655', '4626', '0'), +('8', '44', '12', '11624', '2843', '0'), +('8', '44', '12', '4865', '2665', '0'), +('8', '44', '18', '4866', '3552', '0'), +('8', '44', '18', '4836', '3552', '0'), +('8', '44', '18', '4346', '2621', '0'), +('8', '44', '18', '4158', '2005', '0'), +('8', '44', '19', '4837', '4482', '0'), +('8', '44', '19', '4867', '3498', '0'), +('8', '44', '19', '68239', '3240', '0'), +('8', '44', '19', '4159', '1973', '0'), +('8', '44', '13', '27725', '4279', '0'), +('8', '44', '13', '6952', '3581', '0'), +('8', '44', '13', '11625', '3536', '0'), +('8', '44', '13', '5416', '3308', '0'), +('8', '44', '14', '6952', '3581', '0'), +('8', '44', '14', '11625', '3536', '0'), +('8', '44', '14', '5416', '3308', '0'), +('8', '44', '14', '5500', '3294', '0'), +('8', '44', '11', '9246', '1969', '0'), +('8', '44', '11', '13353', '1500', '0'), +('8', '44', '11', '14762', '1291', '0'), +('8', '44', '11', '20677', '900', '0'), +('8', '45', '22', '10323', '0', '0'), +('8', '45', '22', '10664', '0', '0'), +('8', '45', '22', '9246', '0', '0'), +('8', '45', '22', '21509', '0', '0'), +('8', '45', '1', '14701', '2452', '0'), +('8', '45', '1', '14702', '2050', '0'), +('8', '45', '1', '30361', '1440', '0'), +('8', '45', '1', '10165', '873', '0'), +('8', '45', '2', '4301', '3663', '0'), +('8', '45', '2', '4831', '3624', '0'), +('8', '45', '2', '10142', '3012', '0'), +('8', '45', '2', '10143', '2853', '0'), +('8', '45', '3', '27720', '3639', '0'), +('8', '45', '3', '2711', '2283', '0'), +('8', '45', '3', '71529', '2102', '0'), +('8', '45', '3', '11052', '1631', '0'), +('8', '45', '5', '27723', '4367', '0'), +('8', '45', '5', '14703', '3850', '0'), +('8', '45', '5', '14565', '3763', '0'), +('8', '45', '5', '68291', '2571', '0'), +('8', '45', '8', '11621', '11486', '0'), +('8', '45', '8', '11551', '4827', '0'), +('8', '45', '8', '11603', '4738', '0'), +('8', '45', '8', '1409', '3461', '0'), +('8', '45', '6', '1557', '6760', '0'), +('8', '45', '6', '4302', '2092', '0'), +('8', '45', '6', '27721', '2022', '0'), +('8', '45', '6', '4405', '1870', '0'), +('8', '45', '17', '4832', '7267', '0'), +('8', '45', '17', '4862', '5452', '0'), +('8', '45', '17', '4154', '4391', '0'), +('8', '45', '17', '11623', '4375', '0'), +('8', '45', '7', '4863', '3694', '0'), +('8', '45', '7', '4833', '3443', '0'), +('8', '45', '7', '4343', '2911', '0'), +('8', '45', '7', '4155', '1973', '0'), +('8', '45', '9', '1541', '2833', '0'), +('8', '45', '9', '4834', '2623', '0'), +('8', '45', '9', '4864', '2478', '0'), +('8', '45', '9', '12189', '1961', '0'), +('8', '45', '15', '10366', '3254', '0'), +('8', '45', '15', '14679', '2955', '0'), +('8', '45', '15', '10151', '2700', '0'), +('8', '45', '15', '14678', '2404', '0'), +('8', '45', '20', '11601', '8277', '0'), +('8', '45', '20', '11666', '6029', '0'), +('8', '45', '20', '2920', '4467', '0'), +('8', '45', '20', '1365', '4200', '0'), +('8', '45', '12', '4835', '4926', '0'), +('8', '45', '12', '20655', '4634', '0'), +('8', '45', '12', '11624', '2855', '0'), +('8', '45', '12', '4865', '2665', '0'), +('8', '45', '18', '4866', '3567', '0'), +('8', '45', '18', '4836', '3560', '0'), +('8', '45', '18', '4346', '2621', '0'), +('8', '45', '18', '4158', '2005', '0'), +('8', '45', '19', '4837', '4494', '0'), +('8', '45', '19', '4867', '3513', '0'), +('8', '45', '19', '68239', '3247', '0'), +('8', '45', '19', '4159', '1973', '0'), +('8', '45', '13', '27725', '4279', '0'), +('8', '45', '13', '6952', '3581', '0'), +('8', '45', '13', '11625', '3551', '0'), +('8', '45', '13', '5416', '3308', '0'), +('8', '45', '14', '6952', '3581', '0'), +('8', '45', '14', '11625', '3551', '0'), +('8', '45', '14', '5416', '3308', '0'), +('8', '45', '14', '5500', '3294', '0'), +('8', '45', '11', '9246', '1993', '0'), +('8', '45', '11', '13353', '1500', '0'), +('8', '45', '11', '14762', '1291', '0'), +('8', '45', '11', '20677', '900', '0'), +('8', '46', '22', '10323', '0', '0'), +('8', '46', '22', '10664', '0', '0'), +('8', '46', '22', '9246', '0', '0'), +('8', '46', '22', '21509', '0', '0'), +('8', '46', '1', '14701', '2452', '0'), +('8', '46', '1', '14702', '2050', '0'), +('8', '46', '1', '30361', '1440', '0'), +('8', '46', '1', '10165', '873', '0'), +('8', '46', '2', '4301', '3663', '0'), +('8', '46', '2', '4831', '3636', '0'), +('8', '46', '2', '10142', '3012', '0'), +('8', '46', '2', '10143', '2853', '0'), +('8', '46', '3', '27720', '3651', '0'), +('8', '46', '3', '2711', '2295', '0'), +('8', '46', '3', '71529', '2109', '0'), +('8', '46', '3', '11052', '1667', '0'), +('8', '46', '5', '27723', '4374', '0'), +('8', '46', '5', '14703', '3850', '0'), +('8', '46', '5', '14565', '3770', '0'), +('8', '46', '5', '68291', '2581', '0'), +('8', '46', '8', '11621', '11486', '0'), +('8', '46', '8', '11551', '4827', '0'), +('8', '46', '8', '11603', '4760', '0'), +('8', '46', '8', '1409', '3461', '0'), +('8', '46', '6', '1557', '6760', '0'), +('8', '46', '6', '4302', '2102', '0'), +('8', '46', '6', '27721', '2022', '0'), +('8', '46', '6', '4405', '1870', '0'), +('8', '46', '17', '4832', '7293', '0'), +('8', '46', '17', '4862', '5452', '0'), +('8', '46', '17', '4154', '4399', '0'), +('8', '46', '17', '11623', '4375', '0'), +('8', '46', '7', '4863', '3716', '0'), +('8', '46', '7', '4833', '3443', '0'), +('8', '46', '7', '4343', '2928', '0'), +('8', '46', '7', '4155', '1973', '0'), +('8', '46', '9', '1541', '2833', '0'), +('8', '46', '9', '4834', '2623', '0'), +('8', '46', '9', '4864', '2485', '0'), +('8', '46', '9', '12189', '1961', '0'), +('8', '46', '15', '10366', '3254', '0'), +('8', '46', '15', '14679', '2955', '0'), +('8', '46', '15', '10151', '2700', '0'), +('8', '46', '15', '14678', '2404', '0'), +('8', '46', '20', '11601', '8293', '0'), +('8', '46', '20', '11666', '6041', '0'), +('8', '46', '20', '2920', '4467', '0'), +('8', '46', '20', '1365', '4200', '0'), +('8', '46', '12', '4835', '4934', '0'), +('8', '46', '12', '20655', '4642', '0'), +('8', '46', '12', '11624', '2867', '0'), +('8', '46', '12', '4345', '2668', '0'), +('8', '46', '18', '4866', '3582', '0'), +('8', '46', '18', '4836', '3568', '0'), +('8', '46', '18', '4346', '2621', '0'), +('8', '46', '18', '4158', '2005', '0'), +('8', '46', '19', '4837', '4506', '0'), +('8', '46', '19', '4867', '3528', '0'), +('8', '46', '19', '68239', '3254', '0'), +('8', '46', '19', '4159', '1973', '0'), +('8', '46', '13', '27725', '4279', '0'), +('8', '46', '13', '6952', '3581', '0'), +('8', '46', '13', '11625', '3566', '0'), +('8', '46', '13', '5416', '3308', '0'), +('8', '46', '14', '6952', '3581', '0'), +('8', '46', '14', '11625', '3566', '0'), +('8', '46', '14', '5416', '3308', '0'), +('8', '46', '14', '5500', '3294', '0'), +('8', '46', '11', '9246', '2017', '0'), +('8', '46', '11', '13353', '1500', '0'), +('8', '46', '11', '14762', '1291', '0'), +('8', '46', '11', '20677', '900', '0'), +('8', '47', '22', '10323', '0', '0'), +('8', '47', '22', '10664', '0', '0'), +('8', '47', '22', '9246', '0', '0'), +('8', '47', '22', '21509', '0', '0'), +('8', '47', '1', '14701', '2452', '0'), +('8', '47', '1', '14702', '2050', '0'), +('8', '47', '1', '30361', '1440', '0'), +('8', '47', '1', '10165', '873', '0'), +('8', '47', '2', '4301', '3663', '0'), +('8', '47', '2', '4831', '3648', '0'), +('8', '47', '2', '10142', '3012', '0'), +('8', '47', '2', '10143', '2853', '0'), +('8', '47', '3', '27720', '3664', '0'), +('8', '47', '3', '2711', '2308', '0'), +('8', '47', '3', '71529', '2116', '0'), +('8', '47', '3', '11052', '1703', '0'), +('8', '47', '5', '27723', '4380', '0'), +('8', '47', '5', '14703', '3850', '0'), +('8', '47', '5', '14565', '3776', '0'), +('8', '47', '5', '68291', '2590', '0'), +('8', '47', '8', '11621', '11486', '0'), +('8', '47', '8', '11551', '4827', '0'), +('8', '47', '8', '11603', '4782', '0'), +('8', '47', '8', '1409', '3461', '0'), +('8', '47', '6', '1557', '6760', '0'), +('8', '47', '6', '4302', '2112', '0'), +('8', '47', '6', '27721', '2022', '0'), +('8', '47', '6', '4405', '1870', '0'), +('8', '47', '17', '4832', '7318', '0'), +('8', '47', '17', '4862', '5452', '0'), +('8', '47', '17', '4154', '4408', '0'), +('8', '47', '17', '11623', '4375', '0'), +('8', '47', '7', '4863', '3738', '0'), +('8', '47', '7', '4833', '3443', '0'), +('8', '47', '7', '4343', '2945', '0'), +('8', '47', '7', '4155', '1973', '0'), +('8', '47', '9', '1541', '2833', '0'), +('8', '47', '9', '4834', '2623', '0'), +('8', '47', '9', '4864', '2492', '0'), +('8', '47', '9', '12189', '1961', '0'), +('8', '47', '15', '10366', '3254', '0'), +('8', '47', '15', '14679', '2955', '0'), +('8', '47', '15', '10151', '2700', '0'), +('8', '47', '15', '14678', '2404', '0'), +('8', '47', '20', '11601', '8310', '0'), +('8', '47', '20', '11666', '6053', '0'), +('8', '47', '20', '2920', '4467', '0'), +('8', '47', '20', '1365', '4200', '0'), +('8', '47', '12', '4835', '4943', '0'), +('8', '47', '12', '20655', '4650', '0'), +('8', '47', '12', '11624', '2879', '0'), +('8', '47', '12', '4345', '2680', '0'), +('8', '47', '18', '4866', '3598', '0'), +('8', '47', '18', '4836', '3577', '0'), +('8', '47', '18', '4346', '2621', '0'), +('8', '47', '18', '4158', '2005', '0'), +('8', '47', '19', '4837', '4518', '0'), +('8', '47', '19', '4867', '3543', '0'), +('8', '47', '19', '68239', '3262', '0'), +('8', '47', '19', '4159', '1973', '0'), +('8', '47', '13', '27725', '4279', '0'), +('8', '47', '13', '6952', '3581', '0'), +('8', '47', '13', '11625', '3581', '0'), +('8', '47', '13', '5416', '3308', '0'), +('8', '47', '14', '11625', '3581', '0'), +('8', '47', '14', '6952', '3581', '0'), +('8', '47', '14', '5416', '3308', '0'), +('8', '47', '14', '5500', '3294', '0'), +('8', '47', '11', '9246', '2042', '0'), +('8', '47', '11', '13353', '1500', '0'), +('8', '47', '11', '14762', '1291', '0'), +('8', '47', '11', '20677', '900', '0'), +('8', '48', '22', '10323', '0', '0'), +('8', '48', '22', '10664', '0', '0'), +('8', '48', '22', '9246', '0', '0'), +('8', '48', '22', '21509', '0', '0'), +('8', '48', '1', '14701', '2452', '0'), +('8', '48', '1', '14702', '2050', '0'), +('8', '48', '1', '30361', '1440', '0'), +('8', '48', '1', '10165', '873', '0'), +('8', '48', '2', '4301', '3663', '0'), +('8', '48', '2', '4831', '3660', '0'), +('8', '48', '2', '10142', '3012', '0'), +('8', '48', '2', '10143', '2853', '0'), +('8', '48', '3', '27720', '3677', '0'), +('8', '48', '3', '2711', '2321', '0'), +('8', '48', '3', '71529', '2124', '0'), +('8', '48', '3', '11052', '1740', '0'), +('8', '48', '5', '27723', '4388', '0'), +('8', '48', '5', '14703', '3850', '0'), +('8', '48', '5', '14565', '3784', '0'), +('8', '48', '5', '68291', '2600', '0'), +('8', '48', '8', '11621', '11486', '0'), +('8', '48', '8', '11551', '4827', '0'), +('8', '48', '8', '11603', '4804', '0'), +('8', '48', '8', '1409', '3461', '0'), +('8', '48', '6', '1557', '6760', '0'), +('8', '48', '6', '4302', '2123', '0'), +('8', '48', '6', '27721', '2022', '0'), +('8', '48', '6', '4405', '1870', '0'), +('8', '48', '17', '4832', '7347', '0'), +('8', '48', '17', '4862', '5452', '0'), +('8', '48', '17', '4154', '4417', '0'), +('8', '48', '17', '11623', '4375', '0'), +('8', '48', '7', '4863', '3760', '0'), +('8', '48', '7', '4833', '3443', '0'), +('8', '48', '7', '4343', '2964', '0'), +('8', '48', '7', '4155', '1973', '0'), +('8', '48', '9', '1541', '2833', '0'), +('8', '48', '9', '4834', '2623', '0'), +('8', '48', '9', '4864', '2500', '0'), +('8', '48', '9', '12189', '1961', '0'), +('8', '48', '15', '10366', '3254', '0'), +('8', '48', '15', '14679', '2955', '0'), +('8', '48', '15', '10151', '2700', '0'), +('8', '48', '15', '14678', '2404', '0'), +('8', '48', '20', '11601', '8330', '0'), +('8', '48', '20', '11666', '6066', '0'), +('8', '48', '20', '2920', '4467', '0'), +('8', '48', '20', '1365', '4200', '0'), +('8', '48', '12', '4835', '4952', '0'), +('8', '48', '12', '20655', '4659', '0'), +('8', '48', '12', '11624', '2892', '0'), +('8', '48', '12', '4345', '2692', '0'), +('8', '48', '18', '4866', '3615', '0'), +('8', '48', '18', '4836', '3587', '0'), +('8', '48', '18', '4346', '2621', '0'), +('8', '48', '18', '4158', '2005', '0'), +('8', '48', '19', '4837', '4530', '0'), +('8', '48', '19', '4867', '3561', '0'), +('8', '48', '19', '68239', '3269', '0'), +('8', '48', '19', '4159', '1973', '0'), +('8', '48', '13', '27725', '4279', '0'), +('8', '48', '13', '11625', '3599', '0'), +('8', '48', '13', '6952', '3581', '0'), +('8', '48', '13', '5416', '3308', '0'), +('8', '48', '14', '11625', '3599', '0'), +('8', '48', '14', '6952', '3581', '0'), +('8', '48', '14', '5416', '3308', '0'), +('8', '48', '14', '5500', '3294', '0'), +('8', '48', '11', '9246', '2066', '0'), +('8', '48', '11', '13353', '1500', '0'), +('8', '48', '11', '14762', '1291', '0'), +('8', '48', '11', '20677', '900', '0'), +('8', '49', '22', '10323', '0', '0'), +('8', '49', '22', '10664', '0', '0'), +('8', '49', '22', '9246', '0', '0'), +('8', '49', '22', '21509', '0', '0'), +('8', '49', '1', '14701', '2452', '0'), +('8', '49', '1', '14702', '2050', '0'), +('8', '49', '1', '30361', '1440', '0'), +('8', '49', '1', '10165', '873', '0'), +('8', '49', '2', '4831', '3672', '0'), +('8', '49', '2', '4301', '3663', '0'), +('8', '49', '2', '10142', '3012', '0'), +('8', '49', '2', '10143', '2853', '0'), +('8', '49', '3', '27720', '3689', '0'), +('8', '49', '3', '2711', '2333', '0'), +('8', '49', '3', '71529', '2130', '0'), +('8', '49', '3', '11052', '1776', '0'), +('8', '49', '5', '27723', '4395', '0'), +('8', '49', '5', '14703', '3850', '0'), +('8', '49', '5', '14565', '3791', '0'), +('8', '49', '5', '68291', '2610', '0'), +('8', '49', '8', '11621', '11486', '0'), +('8', '49', '8', '11551', '4827', '0'), +('8', '49', '8', '11603', '4825', '0'), +('8', '49', '8', '1409', '3461', '0'), +('8', '49', '6', '1557', '6760', '0'), +('8', '49', '6', '4302', '2134', '0'), +('8', '49', '6', '27721', '2022', '0'), +('8', '49', '6', '4405', '1870', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '49', '17', '4832', '7372', '0'), +('8', '49', '17', '4862', '5452', '0'), +('8', '49', '17', '4154', '4426', '0'), +('8', '49', '17', '11623', '4375', '0'), +('8', '49', '7', '4863', '3781', '0'), +('8', '49', '7', '4833', '3443', '0'), +('8', '49', '7', '4343', '2981', '0'), +('8', '49', '7', '2458', '1980', '0'), +('8', '49', '9', '1541', '2833', '0'), +('8', '49', '9', '4834', '2623', '0'), +('8', '49', '9', '4864', '2507', '0'), +('8', '49', '9', '12189', '1961', '0'), +('8', '49', '15', '10366', '3254', '0'), +('8', '49', '15', '14679', '2955', '0'), +('8', '49', '15', '10151', '2700', '0'), +('8', '49', '15', '14678', '2404', '0'), +('8', '49', '20', '11601', '8347', '0'), +('8', '49', '20', '11666', '6078', '0'), +('8', '49', '20', '2920', '4467', '0'), +('8', '49', '20', '1365', '4200', '0'), +('8', '49', '12', '4835', '4961', '0'), +('8', '49', '12', '20655', '4667', '0'), +('8', '49', '12', '11624', '2904', '0'), +('8', '49', '12', '4345', '2704', '0'), +('8', '49', '18', '4866', '3630', '0'), +('8', '49', '18', '4836', '3595', '0'), +('8', '49', '18', '4346', '2621', '0'), +('8', '49', '18', '4158', '2005', '0'), +('8', '49', '19', '4837', '4542', '0'), +('8', '49', '19', '4867', '3576', '0'), +('8', '49', '19', '68239', '3276', '0'), +('8', '49', '19', '4159', '1973', '0'), +('8', '49', '13', '27725', '4279', '0'), +('8', '49', '13', '11625', '3614', '0'), +('8', '49', '13', '6952', '3581', '0'), +('8', '49', '13', '5416', '3308', '0'), +('8', '49', '14', '11625', '3614', '0'), +('8', '49', '14', '6952', '3581', '0'), +('8', '49', '14', '5416', '3308', '0'), +('8', '49', '14', '5500', '3294', '0'), +('8', '49', '11', '9246', '2090', '0'), +('8', '49', '11', '13353', '1500', '0'), +('8', '49', '11', '14762', '1291', '0'), +('8', '49', '11', '20677', '900', '0'), +('8', '50', '22', '10323', '0', '0'), +('8', '50', '22', '10664', '0', '0'), +('8', '50', '22', '9246', '0', '0'), +('8', '50', '22', '21509', '0', '0'), +('8', '50', '1', '14701', '2452', '0'), +('8', '50', '1', '14702', '2050', '0'), +('8', '50', '1', '30361', '1440', '0'), +('8', '50', '1', '10165', '873', '0'), +('8', '50', '2', '4831', '3684', '0'), +('8', '50', '2', '4301', '3663', '0'), +('8', '50', '2', '10142', '3012', '0'), +('8', '50', '2', '10143', '2853', '0'), +('8', '50', '3', '27720', '3701', '0'), +('8', '50', '3', '2711', '2345', '0'), +('8', '50', '3', '71529', '2137', '0'), +('8', '50', '3', '11052', '1812', '0'), +('8', '50', '5', '27723', '4402', '0'), +('8', '50', '5', '14703', '3850', '0'), +('8', '50', '5', '14565', '3798', '0'), +('8', '50', '5', '4501', '2627', '0'), +('8', '50', '8', '11621', '11486', '0'), +('8', '50', '8', '11603', '4847', '0'), +('8', '50', '8', '11551', '4827', '0'), +('8', '50', '8', '1409', '3461', '0'), +('8', '50', '6', '1557', '6760', '0'), +('8', '50', '6', '4302', '2144', '0'), +('8', '50', '6', '27721', '2022', '0'), +('8', '50', '6', '4405', '1870', '0'), +('8', '50', '17', '4832', '7398', '0'), +('8', '50', '17', '4862', '5452', '0'), +('8', '50', '17', '4154', '4434', '0'), +('8', '50', '17', '11623', '4375', '0'), +('8', '50', '7', '4863', '3803', '0'), +('8', '50', '7', '4833', '3443', '0'), +('8', '50', '7', '4343', '2998', '0'), +('8', '50', '7', '2458', '1989', '0'), +('8', '50', '9', '1541', '2833', '0'), +('8', '50', '9', '4834', '2623', '0'), +('8', '50', '9', '4864', '2514', '0'), +('8', '50', '9', '12189', '1961', '0'), +('8', '50', '15', '10366', '3254', '0'), +('8', '50', '15', '14679', '2955', '0'), +('8', '50', '15', '10151', '2700', '0'), +('8', '50', '15', '14678', '2404', '0'), +('8', '50', '20', '11601', '8364', '0'), +('8', '50', '20', '11666', '6090', '0'), +('8', '50', '20', '2920', '4467', '0'), +('8', '50', '20', '1365', '4200', '0'), +('8', '50', '12', '4835', '4969', '0'), +('8', '50', '12', '20655', '4676', '0'), +('8', '50', '12', '11624', '2916', '0'), +('8', '50', '12', '4345', '2716', '0'), +('8', '50', '18', '4866', '3645', '0'), +('8', '50', '18', '4836', '3603', '0'), +('8', '50', '18', '4346', '2621', '0'), +('8', '50', '18', '4158', '2005', '0'), +('8', '50', '19', '4837', '4554', '0'), +('8', '50', '19', '4867', '3591', '0'), +('8', '50', '19', '68239', '3283', '0'), +('8', '50', '19', '4159', '1973', '0'), +('8', '50', '13', '27725', '4279', '0'), +('8', '50', '13', '11625', '3629', '0'), +('8', '50', '13', '6952', '3581', '0'), +('8', '50', '13', '5416', '3308', '0'), +('8', '50', '14', '11625', '3629', '0'), +('8', '50', '14', '6952', '3581', '0'), +('8', '50', '14', '5416', '3308', '0'), +('8', '50', '14', '5500', '3294', '0'), +('8', '50', '11', '9246', '2114', '0'), +('8', '50', '11', '13353', '1500', '0'), +('8', '50', '11', '14762', '1291', '0'), +('8', '50', '11', '20677', '900', '0'), +('8', '51', '22', '10323', '0', '0'), +('8', '51', '22', '10664', '0', '0'), +('8', '51', '22', '9246', '0', '0'), +('8', '51', '22', '21509', '0', '0'), +('8', '51', '1', '14701', '2452', '0'), +('8', '51', '1', '14702', '2050', '0'), +('8', '51', '1', '30361', '1440', '0'), +('8', '51', '1', '10165', '873', '0'), +('8', '51', '2', '4831', '3696', '0'), +('8', '51', '2', '4301', '3663', '0'), +('8', '51', '2', '10142', '3012', '0'), +('8', '51', '2', '10143', '2853', '0'), +('8', '51', '3', '27720', '3714', '0'), +('8', '51', '3', '2711', '2358', '0'), +('8', '51', '3', '71529', '2145', '0'), +('8', '51', '3', '11052', '1848', '0'), +('8', '51', '5', '27723', '4409', '0'), +('8', '51', '5', '14703', '3850', '0'), +('8', '51', '5', '14565', '3805', '0'), +('8', '51', '5', '4501', '2659', '0'), +('8', '51', '8', '11621', '11486', '0'), +('8', '51', '8', '11603', '4869', '0'), +('8', '51', '8', '11551', '4827', '0'), +('8', '51', '8', '1409', '3461', '0'), +('8', '51', '6', '1557', '6760', '0'), +('8', '51', '6', '4302', '2155', '0'), +('8', '51', '6', '27721', '2022', '0'), +('8', '51', '6', '4405', '1870', '0'), +('8', '51', '17', '4832', '7427', '0'), +('8', '51', '17', '4862', '5452', '0'), +('8', '51', '17', '4154', '4444', '0'), +('8', '51', '17', '11623', '4375', '0'), +('8', '51', '7', '4863', '3825', '0'), +('8', '51', '7', '4833', '3443', '0'), +('8', '51', '7', '4343', '3017', '0'), +('8', '51', '7', '2458', '1999', '0'), +('8', '51', '9', '1541', '2833', '0'), +('8', '51', '9', '4834', '2623', '0'), +('8', '51', '9', '4864', '2521', '0'), +('8', '51', '9', '12189', '1961', '0'), +('8', '51', '15', '10366', '3254', '0'), +('8', '51', '15', '14679', '2955', '0'), +('8', '51', '15', '10151', '2700', '0'), +('8', '51', '15', '14678', '2404', '0'), +('8', '51', '20', '11601', '8383', '0'), +('8', '51', '20', '11666', '6103', '0'), +('8', '51', '20', '2920', '4467', '0'), +('8', '51', '20', '1365', '4200', '0'), +('8', '51', '12', '4835', '4979', '0'), +('8', '51', '12', '20655', '4684', '0'), +('8', '51', '12', '11624', '2929', '0'), +('8', '51', '12', '4345', '2728', '0'), +('8', '51', '18', '4866', '3663', '0'), +('8', '51', '18', '4836', '3613', '0'), +('8', '51', '18', '4346', '2621', '0'), +('8', '51', '18', '4158', '2005', '0'), +('8', '51', '19', '4837', '4566', '0'), +('8', '51', '19', '4867', '3608', '0'), +('8', '51', '19', '68239', '3291', '0'), +('8', '51', '19', '4159', '1973', '0'), +('8', '51', '13', '27725', '4279', '0'), +('8', '51', '13', '11625', '3647', '0'), +('8', '51', '13', '6952', '3581', '0'), +('8', '51', '13', '5416', '3308', '0'), +('8', '51', '14', '11625', '3647', '0'), +('8', '51', '14', '6952', '3581', '0'), +('8', '51', '14', '5416', '3308', '0'), +('8', '51', '14', '5500', '3294', '0'), +('8', '51', '11', '9246', '2138', '0'), +('8', '51', '11', '13353', '1500', '0'), +('8', '51', '11', '14762', '1291', '0'), +('8', '51', '11', '20677', '900', '0'), +('8', '52', '22', '10323', '0', '0'), +('8', '52', '22', '10664', '0', '0'), +('8', '52', '22', '9246', '0', '0'), +('8', '52', '22', '21509', '0', '0'), +('8', '52', '1', '14701', '2452', '0'), +('8', '52', '1', '14702', '2050', '0'), +('8', '52', '1', '30361', '1440', '0'), +('8', '52', '1', '10165', '873', '0'), +('8', '52', '2', '4831', '3709', '0'), +('8', '52', '2', '4301', '3663', '0'), +('8', '52', '2', '10142', '3012', '0'), +('8', '52', '2', '10143', '2853', '0'), +('8', '52', '3', '27720', '3727', '0'), +('8', '52', '3', '2711', '2371', '0'), +('8', '52', '3', '71529', '2152', '0'), +('8', '52', '3', '11052', '1884', '0'), +('8', '52', '5', '27723', '4416', '0'), +('8', '52', '5', '14703', '3850', '0'), +('8', '52', '5', '14565', '3812', '0'), +('8', '52', '5', '4501', '2690', '0'), +('8', '52', '8', '11621', '11486', '0'), +('8', '52', '8', '11603', '4891', '0'), +('8', '52', '8', '11551', '4827', '0'), +('8', '52', '8', '1409', '3461', '0'), +('8', '52', '6', '1557', '6760', '0'), +('8', '52', '6', '4302', '2165', '0'), +('8', '52', '6', '27721', '2022', '0'), +('8', '52', '6', '4405', '1870', '0'), +('8', '52', '17', '4832', '7452', '0'), +('8', '52', '17', '4862', '5452', '0'), +('8', '52', '17', '4154', '4452', '0'), +('8', '52', '17', '11623', '4375', '0'), +('8', '52', '7', '4863', '3847', '0'), +('8', '52', '7', '4833', '3443', '0'), +('8', '52', '7', '4343', '3034', '0'), +('8', '52', '7', '2458', '2009', '0'), +('8', '52', '9', '1541', '2833', '0'), +('8', '52', '9', '4834', '2623', '0'), +('8', '52', '9', '4864', '2528', '0'), +('8', '52', '9', '12189', '1961', '0'), +('8', '52', '15', '10366', '3254', '0'), +('8', '52', '15', '14679', '2955', '0'), +('8', '52', '15', '10151', '2700', '0'), +('8', '52', '15', '14678', '2404', '0'), +('8', '52', '20', '11601', '8400', '0'), +('8', '52', '20', '11666', '6115', '0'), +('8', '52', '20', '2920', '4467', '0'), +('8', '52', '20', '1365', '4200', '0'), +('8', '52', '12', '4835', '4987', '0'), +('8', '52', '12', '20655', '4692', '0'), +('8', '52', '12', '11624', '2941', '0'), +('8', '52', '12', '4345', '2740', '0'), +('8', '52', '18', '4866', '3678', '0'), +('8', '52', '18', '4836', '3622', '0'), +('8', '52', '18', '4346', '2621', '0'), +('8', '52', '18', '4158', '2005', '0'), +('8', '52', '19', '4837', '4578', '0'), +('8', '52', '19', '4867', '3624', '0'), +('8', '52', '19', '68239', '3298', '0'), +('8', '52', '19', '4159', '1973', '0'), +('8', '52', '13', '27725', '4279', '0'), +('8', '52', '13', '11625', '3662', '0'), +('8', '52', '13', '6952', '3581', '0'), +('8', '52', '13', '5416', '3308', '0'), +('8', '52', '14', '11625', '3662', '0'), +('8', '52', '14', '6952', '3581', '0'), +('8', '52', '14', '5416', '3308', '0'), +('8', '52', '14', '5500', '3294', '0'), +('8', '52', '11', '9246', '2162', '0'), +('8', '52', '11', '13353', '1500', '0'), +('8', '52', '11', '14762', '1291', '0'), +('8', '52', '11', '20677', '900', '0'), +('8', '53', '22', '10323', '0', '0'), +('8', '53', '22', '10664', '0', '0'), +('8', '53', '22', '9246', '0', '0'), +('8', '53', '22', '21509', '0', '0'), +('8', '53', '1', '14701', '2452', '0'), +('8', '53', '1', '14702', '2050', '0'), +('8', '53', '1', '30361', '1440', '0'), +('8', '53', '1', '10165', '873', '0'), +('8', '53', '2', '4831', '3721', '0'), +('8', '53', '2', '4301', '3663', '0'), +('8', '53', '2', '10142', '3012', '0'), +('8', '53', '2', '10143', '2853', '0'), +('8', '53', '3', '27720', '3739', '0'), +('8', '53', '3', '2711', '2383', '0'), +('8', '53', '3', '71529', '2158', '0'), +('8', '53', '3', '11052', '1921', '0'), +('8', '53', '5', '27723', '4423', '0'), +('8', '53', '5', '14703', '3850', '0'), +('8', '53', '5', '14565', '3819', '0'), +('8', '53', '5', '4501', '2722', '0'), +('8', '53', '8', '11621', '11486', '0'), +('8', '53', '8', '11603', '4912', '0'), +('8', '53', '8', '11551', '4827', '0'), +('8', '53', '8', '1409', '3461', '0'), +('8', '53', '6', '1557', '6760', '0'), +('8', '53', '6', '4302', '2176', '0'), +('8', '53', '6', '27721', '2022', '0'), +('8', '53', '6', '4405', '1870', '0'), +('8', '53', '17', '4832', '7478', '0'), +('8', '53', '17', '4862', '5452', '0'), +('8', '53', '17', '4154', '4461', '0'), +('8', '53', '17', '11623', '4375', '0'), +('8', '53', '7', '4863', '3868', '0'), +('8', '53', '7', '4833', '3443', '0'), +('8', '53', '7', '4343', '3051', '0'), +('8', '53', '7', '2458', '2018', '0'), +('8', '53', '9', '1541', '2833', '0'), +('8', '53', '9', '4834', '2623', '0'), +('8', '53', '9', '4864', '2536', '0'), +('8', '53', '9', '12189', '1961', '0'), +('8', '53', '15', '10366', '3254', '0'), +('8', '53', '15', '14679', '2955', '0'), +('8', '53', '15', '10151', '2700', '0'), +('8', '53', '15', '14678', '2404', '0'), +('8', '53', '20', '11601', '8417', '0'), +('8', '53', '20', '11666', '6127', '0'), +('8', '53', '20', '2920', '4467', '0'), +('8', '53', '20', '1365', '4200', '0'), +('8', '53', '12', '4835', '4996', '0'), +('8', '53', '12', '20655', '4701', '0'), +('8', '53', '12', '11624', '2953', '0'), +('8', '53', '12', '4345', '2752', '0'), +('8', '53', '18', '4866', '3693', '0'), +('8', '53', '18', '4836', '3630', '0'), +('8', '53', '18', '4346', '2621', '0'), +('8', '53', '18', '4158', '2005', '0'), +('8', '53', '19', '4837', '4590', '0'), +('8', '53', '19', '4867', '3639', '0'), +('8', '53', '19', '68239', '3305', '0'), +('8', '53', '19', '4159', '1973', '0'), +('8', '53', '13', '27725', '4279', '0'), +('8', '53', '13', '11625', '3677', '0'), +('8', '53', '13', '6952', '3581', '0'), +('8', '53', '13', '5416', '3308', '0'), +('8', '53', '14', '11625', '3677', '0'), +('8', '53', '14', '6952', '3581', '0'), +('8', '53', '14', '5416', '3308', '0'), +('8', '53', '14', '5500', '3294', '0'), +('8', '53', '11', '9246', '2186', '0'), +('8', '53', '11', '13353', '1500', '0'), +('8', '53', '11', '14762', '1291', '0'), +('8', '53', '11', '20677', '900', '0'), +('8', '54', '22', '10323', '0', '0'), +('8', '54', '22', '10664', '0', '0'), +('8', '54', '22', '9246', '0', '0'), +('8', '54', '22', '21509', '0', '0'), +('8', '54', '1', '14701', '2452', '0'), +('8', '54', '1', '14702', '2050', '0'), +('8', '54', '1', '30361', '1440', '0'), +('8', '54', '1', '10165', '873', '0'), +('8', '54', '2', '4831', '3733', '0'), +('8', '54', '2', '4301', '3663', '0'), +('8', '54', '2', '10142', '3012', '0'), +('8', '54', '2', '10143', '2853', '0'), +('8', '54', '3', '27720', '3752', '0'), +('8', '54', '3', '2711', '2396', '0'), +('8', '54', '3', '71529', '2166', '0'), +('8', '54', '3', '11052', '1957', '0'), +('8', '54', '5', '27723', '4431', '0'), +('8', '54', '5', '14703', '3850', '0'), +('8', '54', '5', '14565', '3827', '0'), +('8', '54', '5', '4501', '2753', '0'), +('8', '54', '8', '11621', '11486', '0'), +('8', '54', '8', '11603', '4934', '0'), +('8', '54', '8', '11551', '4827', '0'), +('8', '54', '8', '1409', '3461', '0'), +('8', '54', '6', '1557', '6760', '0'), +('8', '54', '6', '4302', '2187', '0'), +('8', '54', '6', '27721', '2022', '0'), +('8', '54', '6', '4405', '1870', '0'), +('8', '54', '17', '4832', '7507', '0'), +('8', '54', '17', '4862', '5452', '0'), +('8', '54', '17', '4154', '4471', '0'), +('8', '54', '17', '11623', '4375', '0'), +('8', '54', '7', '4863', '3890', '0'), +('8', '54', '7', '4833', '3443', '0'), +('8', '54', '7', '4343', '3070', '0'), +('8', '54', '7', '2458', '2028', '0'), +('8', '54', '9', '1541', '2833', '0'), +('8', '54', '9', '4834', '2623', '0'), +('8', '54', '9', '4864', '2543', '0'), +('8', '54', '9', '12189', '1961', '0'), +('8', '54', '15', '10366', '3254', '0'), +('8', '54', '15', '14679', '2955', '0'), +('8', '54', '15', '10151', '2700', '0'), +('8', '54', '15', '14678', '2404', '0'), +('8', '54', '20', '11601', '8436', '0'), +('8', '54', '20', '11666', '6141', '0'), +('8', '54', '20', '2920', '4467', '0'), +('8', '54', '20', '1365', '4200', '0'), +('8', '54', '12', '4835', '5006', '0'), +('8', '54', '12', '20655', '4709', '0'), +('8', '54', '12', '11624', '2967', '0'), +('8', '54', '12', '4345', '2764', '0'), +('8', '54', '18', '4866', '3711', '0'), +('8', '54', '18', '4836', '3640', '0'), +('8', '54', '18', '4346', '2621', '0'), +('8', '54', '18', '4158', '2005', '0'), +('8', '54', '19', '4837', '4603', '0'), +('8', '54', '19', '4867', '3656', '0'), +('8', '54', '19', '68239', '3312', '0'), +('8', '54', '19', '4159', '1973', '0'), +('8', '54', '13', '27725', '4279', '0'), +('8', '54', '13', '11625', '3694', '0'), +('8', '54', '13', '6952', '3581', '0'), +('8', '54', '13', '5416', '3308', '0'), +('8', '54', '14', '11625', '3694', '0'), +('8', '54', '14', '6952', '3581', '0'), +('8', '54', '14', '5416', '3308', '0'), +('8', '54', '14', '5500', '3294', '0'), +('8', '54', '11', '9246', '2211', '0'), +('8', '54', '11', '13353', '1500', '0'), +('8', '54', '11', '14762', '1291', '0'), +('8', '54', '11', '20677', '900', '0'), +('8', '55', '22', '10323', '0', '0'), +('8', '55', '22', '10664', '0', '0'), +('8', '55', '22', '9246', '0', '0'), +('8', '55', '22', '21509', '0', '0'), +('8', '55', '1', '14701', '2452', '0'), +('8', '55', '1', '14702', '2050', '0'), +('8', '55', '1', '30361', '1440', '0'), +('8', '55', '1', '10165', '873', '0'), +('8', '55', '2', '4831', '3745', '0'), +('8', '55', '2', '4301', '3663', '0'), +('8', '55', '2', '10142', '3012', '0'), +('8', '55', '2', '10143', '2853', '0'), +('8', '55', '3', '27720', '3764', '0'), +('8', '55', '3', '2711', '2408', '0'), +('8', '55', '3', '71529', '2173', '0'), +('8', '55', '3', '11052', '1993', '0'), +('8', '55', '5', '27723', '4437', '0'), +('8', '55', '5', '14703', '3850', '0'), +('8', '55', '5', '14565', '3833', '0'), +('8', '55', '5', '4501', '2784', '0'), +('8', '55', '8', '11621', '11486', '0'), +('8', '55', '8', '11603', '4956', '0'), +('8', '55', '8', '11551', '4827', '0'), +('8', '55', '8', '1409', '3461', '0'), +('8', '55', '6', '1557', '6760', '0'), +('8', '55', '6', '4302', '2197', '0'), +('8', '55', '6', '27721', '2022', '0'), +('8', '55', '6', '4405', '1870', '0'), +('8', '55', '17', '4832', '7532', '0'), +('8', '55', '17', '4862', '5452', '0'), +('8', '55', '17', '4154', '4479', '0'), +('8', '55', '17', '11623', '4375', '0'), +('8', '55', '7', '4863', '3912', '0'), +('8', '55', '7', '4833', '3443', '0'), +('8', '55', '7', '4343', '3087', '0'), +('8', '55', '7', '2458', '2038', '0'), +('8', '55', '9', '1541', '2833', '0'), +('8', '55', '9', '4834', '2623', '0'), +('8', '55', '9', '4864', '2550', '0'), +('8', '55', '9', '12189', '1961', '0'), +('8', '55', '15', '10366', '3254', '0'), +('8', '55', '15', '14679', '2955', '0'), +('8', '55', '15', '10151', '2700', '0'), +('8', '55', '15', '14678', '2404', '0'), +('8', '55', '20', '11601', '8453', '0'), +('8', '55', '20', '11666', '6153', '0'), +('8', '55', '20', '2920', '4467', '0'), +('8', '55', '20', '1365', '4200', '0'), +('8', '55', '12', '4835', '5014', '0'), +('8', '55', '12', '20655', '4718', '0'), +('8', '55', '12', '11624', '2979', '0'), +('8', '55', '12', '4345', '2776', '0'), +('8', '55', '18', '4866', '3726', '0'), +('8', '55', '18', '4836', '3648', '0'), +('8', '55', '18', '4346', '2621', '0'), +('8', '55', '18', '4158', '2005', '0'), +('8', '55', '19', '4837', '4615', '0'), +('8', '55', '19', '4867', '3672', '0'), +('8', '55', '19', '68239', '3320', '0'), +('8', '55', '19', '4407', '1981', '0'), +('8', '55', '13', '27725', '4279', '0'), +('8', '55', '13', '11625', '3710', '0'), +('8', '55', '13', '6952', '3581', '0'), +('8', '55', '13', '5416', '3308', '0'), +('8', '55', '14', '11625', '3710', '0'), +('8', '55', '14', '6952', '3581', '0'), +('8', '55', '14', '5416', '3308', '0'), +('8', '55', '14', '5500', '3294', '0'), +('8', '55', '11', '9246', '2235', '0'), +('8', '55', '11', '13353', '1500', '0'), +('8', '55', '11', '14762', '1291', '0'), +('8', '55', '11', '20677', '900', '0'), +('8', '56', '22', '10323', '0', '0'), +('8', '56', '22', '10664', '0', '0'), +('8', '56', '22', '9246', '0', '0'), +('8', '56', '22', '21509', '0', '0'), +('8', '56', '1', '14701', '2452', '0'), +('8', '56', '1', '14702', '2050', '0'), +('8', '56', '1', '30361', '1440', '0'), +('8', '56', '1', '10165', '873', '0'), +('8', '56', '2', '4831', '3757', '0'), +('8', '56', '2', '4301', '3663', '0'), +('8', '56', '2', '10142', '3012', '0'), +('8', '56', '2', '10143', '2853', '0'), +('8', '56', '3', '27720', '3777', '0'), +('8', '56', '3', '2711', '2421', '0'), +('8', '56', '3', '71529', '2181', '0'), +('8', '56', '3', '11052', '2029', '0'), +('8', '56', '5', '27723', '4445', '0'), +('8', '56', '5', '14703', '3850', '0'), +('8', '56', '5', '14565', '3841', '0'), +('8', '56', '5', '4501', '2816', '0'), +('8', '56', '8', '11621', '11486', '0'), +('8', '56', '8', '11603', '4978', '0'), +('8', '56', '8', '11551', '4827', '0'), +('8', '56', '8', '1409', '3461', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '56', '6', '1557', '6760', '0'), +('8', '56', '6', '4302', '2209', '0'), +('8', '56', '6', '27721', '2022', '0'), +('8', '56', '6', '4405', '1870', '0'), +('8', '56', '17', '4832', '7561', '0'), +('8', '56', '17', '4862', '5452', '0'), +('8', '56', '17', '4154', '4489', '0'), +('8', '56', '17', '11623', '4375', '0'), +('8', '56', '7', '4863', '3934', '0'), +('8', '56', '7', '4833', '3443', '0'), +('8', '56', '7', '4343', '3106', '0'), +('8', '56', '7', '2458', '2047', '0'), +('8', '56', '9', '1541', '2833', '0'), +('8', '56', '9', '4834', '2623', '0'), +('8', '56', '9', '4864', '2557', '0'), +('8', '56', '9', '12189', '1961', '0'), +('8', '56', '15', '10366', '3254', '0'), +('8', '56', '15', '14679', '2955', '0'), +('8', '56', '15', '10151', '2700', '0'), +('8', '56', '15', '14678', '2404', '0'), +('8', '56', '20', '11601', '8472', '0'), +('8', '56', '20', '11666', '6166', '0'), +('8', '56', '20', '2920', '4467', '0'), +('8', '56', '20', '1365', '4200', '0'), +('8', '56', '12', '4835', '5024', '0'), +('8', '56', '12', '20655', '4726', '0'), +('8', '56', '12', '11624', '2992', '0'), +('8', '56', '12', '4345', '2788', '0'), +('8', '56', '18', '4866', '3743', '0'), +('8', '56', '18', '4836', '3658', '0'), +('8', '56', '18', '4346', '2621', '0'), +('8', '56', '18', '4158', '2005', '0'), +('8', '56', '19', '4837', '4627', '0'), +('8', '56', '19', '4867', '3689', '0'), +('8', '56', '19', '68239', '3327', '0'), +('8', '56', '19', '4407', '2003', '0'), +('8', '56', '13', '27725', '4279', '0'), +('8', '56', '13', '11625', '3727', '0'), +('8', '56', '13', '6952', '3581', '0'), +('8', '56', '13', '5416', '3308', '0'), +('8', '56', '14', '11625', '3727', '0'), +('8', '56', '14', '6952', '3581', '0'), +('8', '56', '14', '5416', '3308', '0'), +('8', '56', '14', '5500', '3294', '0'), +('8', '56', '11', '9246', '2259', '0'), +('8', '56', '11', '13353', '1500', '0'), +('8', '56', '11', '14762', '1291', '0'), +('8', '56', '11', '20677', '900', '0'), +('8', '57', '22', '10323', '0', '0'), +('8', '57', '22', '10664', '0', '0'), +('8', '57', '22', '9246', '0', '0'), +('8', '57', '22', '21509', '0', '0'), +('8', '57', '1', '14701', '2452', '0'), +('8', '57', '1', '14702', '2050', '0'), +('8', '57', '1', '30361', '1440', '0'), +('8', '57', '1', '10165', '873', '0'), +('8', '57', '2', '4831', '3769', '0'), +('8', '57', '2', '4301', '3663', '0'), +('8', '57', '2', '10142', '3012', '0'), +('8', '57', '2', '10143', '2853', '0'), +('8', '57', '3', '27720', '3790', '0'), +('8', '57', '3', '2711', '2434', '0'), +('8', '57', '3', '71529', '2187', '0'), +('8', '57', '3', '11052', '2066', '0'), +('8', '57', '5', '27723', '4452', '0'), +('8', '57', '5', '14703', '3850', '0'), +('8', '57', '5', '14565', '3848', '0'), +('8', '57', '5', '4501', '2847', '0'), +('8', '57', '8', '11621', '11486', '0'), +('8', '57', '8', '11603', '4999', '0'), +('8', '57', '8', '11551', '4827', '0'), +('8', '57', '8', '1409', '3461', '0'), +('8', '57', '6', '1557', '6760', '0'), +('8', '57', '6', '4302', '2219', '0'), +('8', '57', '6', '27721', '2022', '0'), +('8', '57', '6', '4405', '1870', '0'), +('8', '57', '17', '4832', '7586', '0'), +('8', '57', '17', '4862', '5452', '0'), +('8', '57', '17', '4154', '4497', '0'), +('8', '57', '17', '11623', '4375', '0'), +('8', '57', '7', '4863', '3955', '0'), +('8', '57', '7', '4833', '3443', '0'), +('8', '57', '7', '4343', '3123', '0'), +('8', '57', '7', '2458', '2057', '0'), +('8', '57', '9', '1541', '2833', '0'), +('8', '57', '9', '4834', '2623', '0'), +('8', '57', '9', '4864', '2565', '0'), +('8', '57', '9', '12189', '1961', '0'), +('8', '57', '15', '10366', '3254', '0'), +('8', '57', '15', '14679', '2955', '0'), +('8', '57', '15', '10151', '2700', '0'), +('8', '57', '15', '14678', '2404', '0'), +('8', '57', '20', '11601', '8489', '0'), +('8', '57', '20', '11666', '6178', '0'), +('8', '57', '20', '2920', '4467', '0'), +('8', '57', '20', '1365', '4200', '0'), +('8', '57', '12', '4835', '5032', '0'), +('8', '57', '12', '20655', '4734', '0'), +('8', '57', '12', '11624', '3004', '0'), +('8', '57', '12', '4345', '2801', '0'), +('8', '57', '18', '4866', '3759', '0'), +('8', '57', '18', '4836', '3666', '0'), +('8', '57', '18', '4346', '2621', '0'), +('8', '57', '18', '4158', '2005', '0'), +('8', '57', '19', '4837', '4639', '0'), +('8', '57', '19', '4867', '3704', '0'), +('8', '57', '19', '68239', '3334', '0'), +('8', '57', '19', '4407', '2024', '0'), +('8', '57', '13', '27725', '4279', '0'), +('8', '57', '13', '11625', '3742', '0'), +('8', '57', '13', '6952', '3581', '0'), +('8', '57', '13', '5416', '3308', '0'), +('8', '57', '14', '11625', '3742', '0'), +('8', '57', '14', '6952', '3581', '0'), +('8', '57', '14', '5416', '3308', '0'), +('8', '57', '14', '5500', '3294', '0'), +('8', '57', '11', '9246', '2283', '0'), +('8', '57', '11', '13353', '1500', '0'), +('8', '57', '11', '14762', '1291', '0'), +('8', '57', '11', '20677', '900', '0'), +('8', '58', '22', '10323', '0', '0'), +('8', '58', '22', '10664', '0', '0'), +('8', '58', '22', '9246', '0', '0'), +('8', '58', '22', '21509', '0', '0'), +('8', '58', '1', '14701', '2452', '0'), +('8', '58', '1', '14702', '2050', '0'), +('8', '58', '1', '30361', '1440', '0'), +('8', '58', '1', '10165', '873', '0'), +('8', '58', '2', '4831', '3781', '0'), +('8', '58', '2', '4301', '3663', '0'), +('8', '58', '2', '10142', '3012', '0'), +('8', '58', '2', '10143', '2853', '0'), +('8', '58', '3', '27720', '3803', '0'), +('8', '58', '3', '2711', '2447', '0'), +('8', '58', '3', '71529', '2195', '0'), +('8', '58', '3', '11052', '2102', '0'), +('8', '58', '5', '27723', '4460', '0'), +('8', '58', '5', '14565', '3856', '0'), +('8', '58', '5', '14703', '3850', '0'), +('8', '58', '5', '4501', '2879', '0'), +('8', '58', '8', '11621', '11486', '0'), +('8', '58', '8', '11603', '5021', '0'), +('8', '58', '8', '11551', '4827', '0'), +('8', '58', '8', '1409', '3461', '0'), +('8', '58', '6', '1557', '6760', '0'), +('8', '58', '6', '4302', '2231', '0'), +('8', '58', '6', '27721', '2022', '0'), +('8', '58', '6', '4405', '1870', '0'), +('8', '58', '17', '4832', '7615', '0'), +('8', '58', '17', '4862', '5452', '0'), +('8', '58', '17', '4154', '4507', '0'), +('8', '58', '17', '11623', '4375', '0'), +('8', '58', '7', '4863', '3977', '0'), +('8', '58', '7', '4833', '3443', '0'), +('8', '58', '7', '4343', '3143', '0'), +('8', '58', '7', '2458', '2067', '0'), +('8', '58', '9', '1541', '2833', '0'), +('8', '58', '9', '4834', '2623', '0'), +('8', '58', '9', '4864', '2572', '0'), +('8', '58', '9', '12189', '1961', '0'), +('8', '58', '15', '10366', '3254', '0'), +('8', '58', '15', '14679', '2955', '0'), +('8', '58', '15', '10151', '2700', '0'), +('8', '58', '15', '14678', '2404', '0'), +('8', '58', '20', '11601', '8508', '0'), +('8', '58', '20', '11666', '6191', '0'), +('8', '58', '20', '2920', '4467', '0'), +('8', '58', '20', '1365', '4200', '0'), +('8', '58', '12', '4835', '5042', '0'), +('8', '58', '12', '20655', '4743', '0'), +('8', '58', '12', '11624', '3017', '0'), +('8', '58', '12', '4345', '2813', '0'), +('8', '58', '18', '4866', '3776', '0'), +('8', '58', '18', '4836', '3676', '0'), +('8', '58', '18', '4346', '2621', '0'), +('8', '58', '18', '4158', '2005', '0'), +('8', '58', '19', '4837', '4651', '0'), +('8', '58', '19', '4867', '3722', '0'), +('8', '58', '19', '68239', '3341', '0'), +('8', '58', '19', '4407', '2046', '0'), +('8', '58', '13', '27725', '4279', '0'), +('8', '58', '13', '11625', '3760', '0'), +('8', '58', '13', '6952', '3581', '0'), +('8', '58', '13', '5416', '3308', '0'), +('8', '58', '14', '11625', '3760', '0'), +('8', '58', '14', '6952', '3581', '0'), +('8', '58', '14', '5416', '3308', '0'), +('8', '58', '14', '5500', '3294', '0'), +('8', '58', '11', '9246', '2307', '0'), +('8', '58', '11', '13353', '1500', '0'), +('8', '58', '11', '14762', '1291', '0'), +('8', '58', '11', '20677', '900', '0'), +('8', '59', '22', '10323', '0', '0'), +('8', '59', '22', '10664', '0', '0'), +('8', '59', '22', '9246', '0', '0'), +('8', '59', '22', '21509', '0', '0'), +('8', '59', '1', '14701', '2452', '0'), +('8', '59', '1', '14702', '2050', '0'), +('8', '59', '1', '30361', '1440', '0'), +('8', '59', '1', '10165', '873', '0'), +('8', '59', '2', '4831', '3793', '0'), +('8', '59', '2', '4301', '3663', '0'), +('8', '59', '2', '10142', '3012', '0'), +('8', '59', '2', '10143', '2853', '0'), +('8', '59', '3', '27720', '3815', '0'), +('8', '59', '3', '2711', '2459', '0'), +('8', '59', '3', '71529', '2202', '0'), +('8', '59', '3', '11052', '2138', '0'), +('8', '59', '5', '27723', '4466', '0'), +('8', '59', '5', '14565', '3862', '0'), +('8', '59', '5', '14703', '3850', '0'), +('8', '59', '5', '4501', '2910', '0'), +('8', '59', '8', '11621', '11486', '0'), +('8', '59', '8', '11603', '5043', '0'), +('8', '59', '8', '11551', '4827', '0'), +('8', '59', '8', '1409', '3461', '0'), +('8', '59', '6', '1557', '6760', '0'), +('8', '59', '6', '4302', '2241', '0'), +('8', '59', '6', '27721', '2022', '0'), +('8', '59', '6', '4405', '1870', '0'), +('8', '59', '17', '4832', '7641', '0'), +('8', '59', '17', '4862', '5452', '0'), +('8', '59', '17', '4154', '4515', '0'), +('8', '59', '17', '11623', '4375', '0'), +('8', '59', '7', '4863', '3999', '0'), +('8', '59', '7', '4833', '3443', '0'), +('8', '59', '7', '4343', '3160', '0'), +('8', '59', '7', '2458', '2076', '0'), +('8', '59', '9', '1541', '2833', '0'), +('8', '59', '9', '4834', '2623', '0'), +('8', '59', '9', '4864', '2579', '0'), +('8', '59', '9', '12189', '1961', '0'), +('8', '59', '15', '10366', '3254', '0'), +('8', '59', '15', '14679', '2955', '0'), +('8', '59', '15', '10151', '2700', '0'), +('8', '59', '15', '14678', '2404', '0'), +('8', '59', '20', '11601', '8525', '0'), +('8', '59', '20', '11666', '6203', '0'), +('8', '59', '20', '2920', '4467', '0'), +('8', '59', '20', '1365', '4200', '0'), +('8', '59', '12', '4835', '5050', '0'), +('8', '59', '12', '20655', '4751', '0'), +('8', '59', '12', '11624', '3029', '0'), +('8', '59', '12', '4345', '2825', '0'), +('8', '59', '18', '4866', '3791', '0'), +('8', '59', '18', '4836', '3684', '0'), +('8', '59', '18', '4346', '2621', '0'), +('8', '59', '18', '4158', '2005', '0'), +('8', '59', '19', '4837', '4663', '0'), +('8', '59', '19', '4867', '3737', '0'), +('8', '59', '19', '68239', '3349', '0'), +('8', '59', '19', '4407', '2068', '0'), +('8', '59', '13', '27725', '4279', '0'), +('8', '59', '13', '11625', '3775', '0'), +('8', '59', '13', '6952', '3581', '0'), +('8', '59', '13', '5416', '3308', '0'), +('8', '59', '14', '11625', '3775', '0'), +('8', '59', '14', '6952', '3581', '0'), +('8', '59', '14', '5416', '3308', '0'), +('8', '59', '14', '5500', '3294', '0'), +('8', '59', '11', '9246', '2331', '0'), +('8', '59', '11', '13353', '1500', '0'), +('8', '59', '11', '14762', '1291', '0'), +('8', '59', '11', '20677', '900', '0'), +('8', '60', '22', '66397', '0', '3'), +('8', '60', '22', '62787', '0', '3'), +('8', '60', '22', '61948', '0', '3'), +('8', '60', '22', '21805', '0', '3'), +('8', '60', '1', '7945', '10423', '3'), +('8', '60', '1', '26775', '9230', '3'), +('8', '60', '1', '29861', '8676', '3'), +('8', '60', '1', '28962', '8324', '3'), +('8', '60', '2', '2612', '9706', '3'), +('8', '60', '2', '26025', '9706', '3'), +('8', '60', '2', '26759', '9138', '3'), +('8', '60', '2', '28909', '8318', '3'), +('8', '60', '3', '26773', '9855', '3'), +('8', '60', '3', '26751', '8481', '3'), +('8', '60', '3', '31233', '8328', '3'), +('8', '60', '3', '28942', '8074', '3'), +('8', '60', '5', '28885', '15105', '3'), +('8', '60', '5', '8364', '12967', '3'), +('8', '60', '5', '27266', '12107', '3'), +('8', '60', '5', '7868', '10099', '3'), +('8', '60', '8', '26766', '16816', '3'), +('8', '60', '8', '26765', '16789', '3'), +('8', '60', '8', '31471', '13151', '3'), +('8', '60', '8', '28918', '10775', '3'), +('8', '60', '6', '28902', '17563', '3'), +('8', '60', '6', '30551', '10095', '3'), +('8', '60', '6', '28919', '8383', '3'), +('8', '60', '6', '26753', '8262', '3'), +('8', '60', '17', '28937', '16195', '3'), +('8', '60', '17', '29457', '13746', '3'), +('8', '60', '17', '7869', '12653', '3'), +('8', '60', '17', '26770', '12104', '3'), +('8', '60', '7', '7868', '10099', '3'), +('8', '60', '7', '28926', '9591', '3'), +('8', '60', '7', '26584', '9351', '3'), +('8', '60', '7', '8288', '8600', '3'), +('8', '60', '9', '31461', '14090', '3'), +('8', '60', '9', '7868', '10099', '3'), +('8', '60', '9', '26584', '9351', '3'), +('8', '60', '9', '26752', '7841', '3'), +('8', '60', '15', '26749', '11110', '3'), +('8', '60', '15', '27950', '10149', '3'), +('8', '60', '15', '26757', '9241', '3'), +('8', '60', '15', '31231', '8575', '3'), +('8', '60', '20', '28890', '15000', '3'), +('8', '60', '20', '26551', '12810', '3'), +('8', '60', '20', '31364', '12569', '3'), +('8', '60', '20', '31235', '12335', '3'), +('8', '60', '12', '25857', '14901', '3'), +('8', '60', '12', '28967', '9863', '3'), +('8', '60', '12', '26774', '9371', '3'), +('8', '60', '12', '31227', '8682', '3'), +('8', '60', '18', '28965', '9130', '3'), +('8', '60', '18', '28932', '8312', '3'), +('8', '60', '18', '8289', '8293', '3'), +('8', '60', '18', '26760', '7439', '3'), +('8', '60', '19', '30569', '16940', '3'), +('8', '60', '19', '28888', '13612', '3'), +('8', '60', '19', '24616', '9835', '3'), +('8', '60', '19', '7871', '8321', '3'), +('8', '60', '13', '69416', '16658', '3'), +('8', '60', '13', '31469', '14989', '3'), +('8', '60', '13', '26603', '13492', '3'), +('8', '60', '13', '28833', '13206', '3'), +('8', '60', '14', '28809', '17305', '3'), +('8', '60', '14', '69416', '16658', '3'), +('8', '60', '14', '31469', '14989', '3'), +('8', '60', '14', '26603', '13492', '3'), +('8', '60', '11', '28149', '12284', '3'), +('8', '60', '11', '26563', '11891', '3'), +('8', '60', '11', '28933', '10724', '3'), +('8', '60', '11', '31469', '10097', '3'), +('8', '60', '22', '9248', '0', '2'), +('8', '60', '22', '10323', '0', '2'), +('8', '60', '22', '12425', '0', '2'), +('8', '60', '22', '30014', '0', '2'), +('8', '60', '1', '62234', '4186', '2'), +('8', '60', '1', '2748', '4089', '2'), +('8', '60', '1', '31236', '3726', '2'), +('8', '60', '1', '62348', '3685', '2'), +('8', '60', '2', '2612', '10259', '2'), +('8', '60', '2', '26025', '10259', '2'), +('8', '60', '2', '29648', '8849', '2'), +('8', '60', '2', '10913', '7818', '2'), +('8', '60', '3', '31233', '9599', '2'), +('8', '60', '3', '31244', '7851', '2'), +('8', '60', '3', '25213', '6345', '2'), +('8', '60', '3', '31464', '5576', '2'), +('8', '60', '5', '27266', '12675', '2'), +('8', '60', '5', '31460', '8475', '2'), +('8', '60', '5', '31318', '7406', '2'), +('8', '60', '5', '31234', '7384', '2'), +('8', '60', '8', '31471', '14151', '2'), +('8', '60', '8', '27261', '10759', '2'), +('8', '60', '8', '11621', '9981', '2'), +('8', '60', '8', '22819', '8981', '2'), +('8', '60', '6', '31472', '8221', '2'), +('8', '60', '6', '31240', '6095', '2'), +('8', '60', '6', '1557', '5523', '2'), +('8', '60', '6', '24070', '5391', '2'), +('8', '60', '17', '29457', '15191', '2'), +('8', '60', '17', '27261', '10759', '2'), +('8', '60', '17', '10845', '9664', '2'), +('8', '60', '17', '27159', '8711', '2'), +('8', '60', '7', '29485', '5502', '2'), +('8', '60', '7', '5723', '5166', '2'), +('8', '60', '7', '31381', '4968', '2'), +('8', '60', '7', '62361', '4028', '2'), +('8', '60', '9', '31461', '15479', '2'), +('8', '60', '9', '31460', '8475', '2'), +('8', '60', '9', '31246', '6034', '2'), +('8', '60', '9', '5723', '5166', '2'), +('8', '60', '15', '31231', '9318', '2'), +('8', '60', '15', '25211', '8789', '2'), +('8', '60', '15', '30388', '7002', '2'), +('8', '60', '15', '5727', '5182', '2'), +('8', '60', '20', '31364', '13742', '2'), +('8', '60', '20', '31235', '13673', '2'), +('8', '60', '20', '31334', '12778', '2'), +('8', '60', '20', '31353', '10058', '2'), +('8', '60', '12', '25857', '15902', '2'), +('8', '60', '12', '31227', '10489', '2'), +('8', '60', '12', '31306', '7654', '2'), +('8', '60', '12', '29177', '5826', '2'), +('8', '60', '18', '31374', '3942', '2'), +('8', '60', '18', '31138', '3914', '2'), +('8', '60', '18', '31332', '3881', '2'), +('8', '60', '18', '25389', '3866', '2'), +('8', '60', '19', '24616', '10179', '2'), +('8', '60', '19', '62371', '5296', '2'), +('8', '60', '19', '25197', '4606', '2'), +('8', '60', '19', '29455', '3975', '2'), +('8', '60', '13', '69416', '17402', '2'), +('8', '60', '13', '31469', '15952', '2'), +('8', '60', '13', '1154', '12314', '2'), +('8', '60', '13', '1158', '11959', '2'), +('8', '60', '14', '69416', '17402', '2'), +('8', '60', '14', '31469', '15952', '2'), +('8', '60', '14', '1154', '12314', '2'), +('8', '60', '14', '1158', '11959', '2'), +('8', '60', '11', '31469', '11061', '2'), +('8', '60', '11', '1554', '8237', '2'), +('8', '60', '11', '2698', '7909', '2'), +('8', '60', '11', '31303', '5607', '2'), +('8', '60', '22', '10323', '0', '1'), +('8', '60', '22', '12425', '0', '1'), +('8', '60', '22', '10664', '0', '1'), +('8', '60', '22', '9246', '0', '1'), +('8', '60', '1', '62234', '5063', '1'), +('8', '60', '1', '10912', '4312', '1'), +('8', '60', '1', '5704', '2460', '1'), +('8', '60', '1', '5715', '2460', '1'), +('8', '60', '2', '10913', '10244', '1'), +('8', '60', '2', '50036', '4580', '1'), +('8', '60', '2', '1630', '3846', '1'), +('8', '60', '2', '4301', '2859', '1'), +('8', '60', '3', '46184', '4389', '1'), +('8', '60', '3', '1625', '3195', '1'), +('8', '60', '3', '27720', '2690', '1'), +('8', '60', '3', '5712', '2263', '1'), +('8', '60', '5', '14703', '3850', '1'), +('8', '60', '5', '27723', '3706', '1'), +('8', '60', '5', '14565', '3350', '1'), +('8', '60', '5', '14709', '2846', '1'), +('8', '60', '8', '11621', '10734', '1'), +('8', '60', '8', '1627', '9710', '1'), +('8', '60', '8', '1619', '8879', '1'), +('8', '60', '8', '1628', '7600', '1'), +('8', '60', '6', '1557', '6141', '1'), +('8', '60', '6', '5723', '6110', '1'), +('8', '60', '6', '5706', '3340', '1'), +('8', '60', '6', '5739', '2870', '1'), +('8', '60', '17', '10845', '11965', '1'), +('8', '60', '17', '4832', '4527', '1'), +('8', '60', '17', '4558', '4028', '1'), +('8', '60', '17', '4862', '3341', '1'), +('8', '60', '7', '5723', '6110', '1'), +('8', '60', '7', '62046', '3191', '1'), +('8', '60', '7', '4863', '2496', '1'), +('8', '60', '7', '4299', '2144', '1'), +('8', '60', '9', '5723', '6110', '1'), +('8', '60', '9', '1541', '2041', '1'), +('8', '60', '9', '5794', '1835', '1'), +('8', '60', '9', '4834', '1806', '1'), +('8', '60', '15', '5727', '5822', '1'), +('8', '60', '15', '5728', '4221', '1'), +('8', '60', '15', '10366', '3232', '1'), +('8', '60', '15', '5807', '3035', '1'), +('8', '60', '20', '1620', '8525', '1'), +('8', '60', '20', '11601', '7584', '1'), +('8', '60', '20', '11666', '5513', '1'), +('8', '60', '20', '1623', '4978', '1'), +('8', '60', '12', '4835', '3806', '1'), +('8', '60', '12', '20655', '3506', '1'), +('8', '60', '12', '2923', '2407', '1'), +('8', '60', '12', '11613', '2034', '1'), +('8', '60', '18', '11612', '2707', '1'), +('8', '60', '18', '4562', '2688', '1'), +('8', '60', '18', '4866', '2371', '1'), +('8', '60', '18', '4836', '2180', '1'), +('8', '60', '19', '24616', '11041', '1'), +('8', '60', '19', '4837', '3128', '1'), +('8', '60', '19', '68239', '2497', '1'), +('8', '60', '19', '4920', '2433', '1'), +('8', '60', '13', '20542', '10546', '1'), +('8', '60', '13', '24609', '9485', '1'), +('8', '60', '13', '6287', '9323', '1'), +('8', '60', '13', '24613', '6344', '1'), +('8', '60', '14', '20542', '10546', '1'), +('8', '60', '14', '24609', '9485', '1'), +('8', '60', '14', '6287', '9323', '1'), +('8', '60', '14', '24613', '6344', '1'), +('8', '60', '11', '46178', '4638', '1'), +('8', '60', '11', '79631', '4046', '1'), +('8', '60', '11', '62242', '3290', '1'), +('8', '60', '11', '5721', '2399', '1'), +('8', '61', '22', '66397', '0', '3'), +('8', '61', '22', '62787', '0', '3'), +('8', '61', '22', '61948', '0', '3'), +('8', '61', '22', '21805', '0', '3'), +('8', '61', '1', '7945', '10424', '3'), +('8', '61', '1', '26775', '9231', '3'), +('8', '61', '1', '29861', '8678', '3'), +('8', '61', '1', '28962', '8324', '3'), +('8', '61', '2', '2612', '9706', '3'), +('8', '61', '2', '26025', '9706', '3'), +('8', '61', '2', '26759', '9138', '3'), +('8', '61', '2', '28909', '8318', '3'), +('8', '61', '3', '26773', '9856', '3'), +('8', '61', '3', '26751', '8482', '3'), +('8', '61', '3', '31233', '8329', '3'), +('8', '61', '3', '28942', '8075', '3'), +('8', '61', '5', '28885', '15106', '3'), +('8', '61', '5', '8364', '12969', '3'), +('8', '61', '5', '27266', '12108', '3'), +('8', '61', '5', '7868', '10099', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '61', '8', '26766', '16818', '3'), +('8', '61', '8', '26765', '16790', '3'), +('8', '61', '8', '31471', '13151', '3'), +('8', '61', '8', '28918', '10775', '3'), +('8', '61', '6', '28902', '17563', '3'), +('8', '61', '6', '30551', '10096', '3'), +('8', '61', '6', '28919', '8383', '3'), +('8', '61', '6', '26753', '8262', '3'), +('8', '61', '17', '28937', '16195', '3'), +('8', '61', '17', '29457', '13746', '3'), +('8', '61', '17', '7869', '12655', '3'), +('8', '61', '17', '26770', '12106', '3'), +('8', '61', '7', '7868', '10099', '3'), +('8', '61', '7', '28926', '9591', '3'), +('8', '61', '7', '26584', '9352', '3'), +('8', '61', '7', '8288', '8600', '3'), +('8', '61', '9', '31461', '14091', '3'), +('8', '61', '9', '7868', '10099', '3'), +('8', '61', '9', '26584', '9352', '3'), +('8', '61', '9', '26752', '7842', '3'), +('8', '61', '15', '26749', '11112', '3'), +('8', '61', '15', '27950', '10149', '3'), +('8', '61', '15', '26757', '9241', '3'), +('8', '61', '15', '31231', '8575', '3'), +('8', '61', '20', '28890', '15000', '3'), +('8', '61', '20', '26551', '12811', '3'), +('8', '61', '20', '31364', '12569', '3'), +('8', '61', '20', '31235', '12336', '3'), +('8', '61', '12', '25857', '14901', '3'), +('8', '61', '12', '28967', '9863', '3'), +('8', '61', '12', '26774', '9371', '3'), +('8', '61', '12', '31227', '8684', '3'), +('8', '61', '18', '28965', '9131', '3'), +('8', '61', '18', '28932', '8313', '3'), +('8', '61', '18', '8289', '8293', '3'), +('8', '61', '18', '26760', '7440', '3'), +('8', '61', '19', '30569', '16940', '3'), +('8', '61', '19', '28888', '13613', '3'), +('8', '61', '19', '24616', '9835', '3'), +('8', '61', '19', '7871', '8322', '3'), +('8', '61', '13', '69416', '16659', '3'), +('8', '61', '13', '31469', '14989', '3'), +('8', '61', '13', '26603', '13524', '3'), +('8', '61', '13', '28833', '13240', '3'), +('8', '61', '14', '28809', '17306', '3'), +('8', '61', '14', '69416', '16659', '3'), +('8', '61', '14', '31469', '14989', '3'), +('8', '61', '14', '26603', '13524', '3'), +('8', '61', '11', '28149', '12284', '3'), +('8', '61', '11', '26563', '11892', '3'), +('8', '61', '11', '28933', '10725', '3'), +('8', '61', '11', '31469', '10098', '3'), +('8', '62', '22', '66397', '0', '3'), +('8', '62', '22', '62787', '0', '3'), +('8', '62', '22', '61948', '0', '3'), +('8', '62', '22', '21805', '0', '3'), +('8', '62', '1', '7945', '10424', '3'), +('8', '62', '1', '26775', '9231', '3'), +('8', '62', '1', '29861', '8679', '3'), +('8', '62', '1', '28962', '8324', '3'), +('8', '62', '2', '2612', '9706', '3'), +('8', '62', '2', '26025', '9706', '3'), +('8', '62', '2', '26759', '9138', '3'), +('8', '62', '2', '28909', '8319', '3'), +('8', '62', '3', '26773', '9857', '3'), +('8', '62', '3', '26751', '8482', '3'), +('8', '62', '3', '31233', '8330', '3'), +('8', '62', '3', '28942', '8075', '3'), +('8', '62', '5', '28885', '15106', '3'), +('8', '62', '5', '8364', '12970', '3'), +('8', '62', '5', '27266', '12108', '3'), +('8', '62', '5', '7868', '10100', '3'), +('8', '62', '8', '26766', '16819', '3'), +('8', '62', '8', '26765', '16790', '3'), +('8', '62', '8', '31471', '13152', '3'), +('8', '62', '8', '28918', '10775', '3'), +('8', '62', '6', '28902', '17564', '3'), +('8', '62', '6', '30551', '10096', '3'), +('8', '62', '6', '28919', '8384', '3'), +('8', '62', '6', '26753', '8262', '3'), +('8', '62', '17', '28937', '16196', '3'), +('8', '62', '17', '29457', '13746', '3'), +('8', '62', '17', '7869', '12656', '3'), +('8', '62', '17', '26770', '12107', '3'), +('8', '62', '7', '7868', '10100', '3'), +('8', '62', '7', '28926', '9591', '3'), +('8', '62', '7', '26584', '9353', '3'), +('8', '62', '7', '8288', '8600', '3'), +('8', '62', '9', '31461', '14092', '3'), +('8', '62', '9', '7868', '10100', '3'), +('8', '62', '9', '26584', '9353', '3'), +('8', '62', '9', '26752', '7842', '3'), +('8', '62', '15', '26749', '11113', '3'), +('8', '62', '15', '27950', '10149', '3'), +('8', '62', '15', '26757', '9241', '3'), +('8', '62', '15', '31231', '8575', '3'), +('8', '62', '20', '28890', '15000', '3'), +('8', '62', '20', '26551', '12813', '3'), +('8', '62', '20', '31364', '12570', '3'), +('8', '62', '20', '31235', '12336', '3'), +('8', '62', '12', '25857', '14902', '3'), +('8', '62', '12', '28967', '9863', '3'), +('8', '62', '12', '26774', '9372', '3'), +('8', '62', '12', '31227', '8685', '3'), +('8', '62', '18', '28965', '9131', '3'), +('8', '62', '18', '28932', '8314', '3'), +('8', '62', '18', '8289', '8293', '3'), +('8', '62', '18', '26760', '7441', '3'), +('8', '62', '19', '30569', '16940', '3'), +('8', '62', '19', '28888', '13613', '3'), +('8', '62', '19', '24616', '9835', '3'), +('8', '62', '19', '7871', '8323', '3'), +('8', '62', '13', '69416', '16660', '3'), +('8', '62', '13', '31469', '14990', '3'), +('8', '62', '13', '26603', '13555', '3'), +('8', '62', '13', '28833', '13273', '3'), +('8', '62', '14', '28809', '17306', '3'), +('8', '62', '14', '69416', '16660', '3'), +('8', '62', '14', '31469', '14990', '3'), +('8', '62', '14', '26603', '13555', '3'), +('8', '62', '11', '28149', '12285', '3'), +('8', '62', '11', '26563', '11892', '3'), +('8', '62', '11', '28933', '10725', '3'), +('8', '62', '11', '31469', '10098', '3'), +('8', '63', '22', '66397', '0', '3'), +('8', '63', '22', '62787', '0', '3'), +('8', '63', '22', '61948', '0', '3'), +('8', '63', '22', '21805', '0', '3'), +('8', '63', '1', '7945', '10424', '3'), +('8', '63', '1', '26775', '9232', '3'), +('8', '63', '1', '29861', '8681', '3'), +('8', '63', '1', '28962', '8325', '3'), +('8', '63', '2', '2612', '9707', '3'), +('8', '63', '2', '26025', '9707', '3'), +('8', '63', '2', '26759', '9138', '3'), +('8', '63', '2', '28909', '8319', '3'), +('8', '63', '3', '26773', '9858', '3'), +('8', '63', '3', '26751', '8483', '3'), +('8', '63', '3', '31233', '8330', '3'), +('8', '63', '3', '28942', '8076', '3'), +('8', '63', '5', '28885', '15107', '3'), +('8', '63', '5', '8364', '12971', '3'), +('8', '63', '5', '27266', '12109', '3'), +('8', '63', '5', '7868', '10100', '3'), +('8', '63', '8', '26766', '16820', '3'), +('8', '63', '8', '26765', '16790', '3'), +('8', '63', '8', '31471', '13152', '3'), +('8', '63', '8', '28918', '10775', '3'), +('8', '63', '6', '28902', '17564', '3'), +('8', '63', '6', '30551', '10096', '3'), +('8', '63', '6', '28919', '8384', '3'), +('8', '63', '6', '26753', '8262', '3'), +('8', '63', '17', '28937', '16196', '3'), +('8', '63', '17', '29457', '13746', '3'), +('8', '63', '17', '7869', '12657', '3'), +('8', '63', '17', '26770', '12108', '3'), +('8', '63', '7', '7868', '10100', '3'), +('8', '63', '7', '28926', '9592', '3'), +('8', '63', '7', '26584', '9354', '3'), +('8', '63', '7', '8288', '8600', '3'), +('8', '63', '9', '31461', '14092', '3'), +('8', '63', '9', '7868', '10100', '3'), +('8', '63', '9', '26584', '9354', '3'), +('8', '63', '9', '26752', '7843', '3'), +('8', '63', '15', '26749', '11114', '3'), +('8', '63', '15', '27950', '10150', '3'), +('8', '63', '15', '26757', '9242', '3'), +('8', '63', '15', '31231', '8575', '3'), +('8', '63', '20', '28890', '15000', '3'), +('8', '63', '20', '26551', '12814', '3'), +('8', '63', '20', '31364', '12570', '3'), +('8', '63', '20', '31235', '12337', '3'), +('8', '63', '12', '25857', '14902', '3'), +('8', '63', '12', '28967', '9863', '3'), +('8', '63', '12', '26774', '9372', '3'), +('8', '63', '12', '31227', '8686', '3'), +('8', '63', '18', '28965', '9132', '3'), +('8', '63', '18', '28932', '8315', '3'), +('8', '63', '18', '8289', '8294', '3'), +('8', '63', '18', '26760', '7441', '3'), +('8', '63', '19', '30569', '16941', '3'), +('8', '63', '19', '28888', '13614', '3'), +('8', '63', '19', '24616', '9835', '3'), +('8', '63', '19', '7871', '8324', '3'), +('8', '63', '13', '69416', '16660', '3'), +('8', '63', '13', '31469', '14990', '3'), +('8', '63', '13', '26603', '13587', '3'), +('8', '63', '13', '28833', '13307', '3'), +('8', '63', '14', '28809', '17307', '3'), +('8', '63', '14', '69416', '16660', '3'), +('8', '63', '14', '31469', '14990', '3'), +('8', '63', '14', '26603', '13587', '3'), +('8', '63', '11', '28149', '12285', '3'), +('8', '63', '11', '26563', '11892', '3'), +('8', '63', '11', '28933', '10726', '3'), +('8', '63', '11', '31469', '10098', '3'), +('8', '64', '22', '66397', '0', '3'), +('8', '64', '22', '62787', '0', '3'), +('8', '64', '22', '61948', '0', '3'), +('8', '64', '22', '21805', '0', '3'), +('8', '64', '1', '7945', '10424', '3'), +('8', '64', '1', '26775', '9232', '3'), +('8', '64', '1', '29861', '8683', '3'), +('8', '64', '1', '28962', '8325', '3'), +('8', '64', '2', '2612', '9707', '3'), +('8', '64', '2', '26025', '9707', '3'), +('8', '64', '2', '26759', '9138', '3'), +('8', '64', '2', '28909', '8320', '3'), +('8', '64', '3', '26773', '9860', '3'), +('8', '64', '3', '26751', '8483', '3'), +('8', '64', '3', '31233', '8331', '3'), +('8', '64', '3', '28942', '8076', '3'), +('8', '64', '5', '28885', '15107', '3'), +('8', '64', '5', '8364', '12972', '3'), +('8', '64', '5', '27266', '12109', '3'), +('8', '64', '5', '7868', '10101', '3'), +('8', '64', '8', '26766', '16821', '3'), +('8', '64', '8', '26765', '16791', '3'), +('8', '64', '8', '31471', '13153', '3'), +('8', '64', '8', '28918', '10775', '3'), +('8', '64', '6', '28902', '17565', '3'), +('8', '64', '6', '30551', '10097', '3'), +('8', '64', '6', '28919', '8385', '3'), +('8', '64', '6', '26753', '8262', '3'), +('8', '64', '17', '28937', '16197', '3'), +('8', '64', '17', '29457', '13746', '3'), +('8', '64', '17', '7869', '12659', '3'), +('8', '64', '17', '26770', '12110', '3'), +('8', '64', '7', '7868', '10101', '3'), +('8', '64', '7', '28926', '9592', '3'), +('8', '64', '7', '26584', '9355', '3'), +('8', '64', '7', '8288', '8600', '3'), +('8', '64', '9', '31461', '14093', '3'), +('8', '64', '9', '7868', '10101', '3'), +('8', '64', '9', '26584', '9355', '3'), +('8', '64', '9', '26752', '7844', '3'), +('8', '64', '15', '26749', '11115', '3'), +('8', '64', '15', '27950', '10150', '3'), +('8', '64', '15', '26757', '9242', '3'), +('8', '64', '15', '31231', '8575', '3'), +('8', '64', '20', '28890', '15000', '3'), +('8', '64', '20', '26551', '12816', '3'), +('8', '64', '20', '31364', '12571', '3'), +('8', '64', '20', '31235', '12338', '3'), +('8', '64', '12', '25857', '14903', '3'), +('8', '64', '12', '28967', '9863', '3'), +('8', '64', '12', '26774', '9373', '3'), +('8', '64', '12', '31227', '8687', '3'), +('8', '64', '18', '28965', '9133', '3'), +('8', '64', '18', '28932', '8316', '3'), +('8', '64', '18', '8289', '8294', '3'), +('8', '64', '18', '26760', '7442', '3'), +('8', '64', '19', '30569', '16941', '3'), +('8', '64', '19', '28888', '13614', '3'), +('8', '64', '19', '24616', '9835', '3'), +('8', '64', '19', '7871', '8325', '3'), +('8', '64', '13', '69416', '16661', '3'), +('8', '64', '13', '31469', '14990', '3'), +('8', '64', '13', '26603', '13618', '3'), +('8', '64', '13', '28833', '13340', '3'), +('8', '64', '14', '28809', '17308', '3'), +('8', '64', '14', '69416', '16661', '3'), +('8', '64', '14', '31469', '14990', '3'), +('8', '64', '14', '26603', '13618', '3'), +('8', '64', '11', '28149', '12285', '3'), +('8', '64', '11', '26563', '11893', '3'), +('8', '64', '11', '28933', '10726', '3'), +('8', '64', '11', '31469', '10099', '3'), +('8', '65', '22', '21810', '0', '7'), +('8', '65', '22', '62787', '0', '7'), +('8', '65', '22', '66397', '0', '7'), +('8', '65', '22', '21805', '0', '7'), +('8', '65', '1', '68949', '28439', '7'), +('8', '65', '1', '68958', '25923', '7'), +('8', '65', '1', '69166', '23593', '7'), +('8', '65', '1', '7125', '22577', '7'), +('8', '65', '2', '28647', '22738', '7'), +('8', '65', '2', '28605', '22546', '7'), +('8', '65', '2', '28648', '22534', '7'), +('8', '65', '2', '69087', '19856', '7'), +('8', '65', '3', '69157', '29601', '7'), +('8', '65', '3', '26982', '21199', '7'), +('8', '65', '3', '69069', '20576', '7'), +('8', '65', '3', '69074', '20230', '7'), +('8', '65', '5', '67625', '24422', '7'), +('8', '65', '5', '69135', '22369', '7'), +('8', '65', '5', '69097', '20828', '7'), +('8', '65', '5', '68950', '20520', '7'), +('8', '65', '8', '69165', '32205', '7'), +('8', '65', '8', '69064', '30658', '7'), +('8', '65', '8', '69072', '29583', '7'), +('8', '65', '8', '69065', '26937', '7'), +('8', '65', '6', '68757', '26586', '7'), +('8', '65', '6', '13674', '24050', '7'), +('8', '65', '6', '69130', '23015', '7'), +('8', '65', '6', '69066', '20937', '7'), +('8', '65', '17', '68748', '25351', '7'), +('8', '65', '17', '69150', '24856', '7'), +('8', '65', '17', '68968', '24825', '7'), +('8', '65', '17', '47643', '21769', '7'), +('8', '65', '7', '69168', '28154', '7'), +('8', '65', '7', '68871', '22265', '7'), +('8', '65', '7', '16097', '19814', '7'), +('8', '65', '7', '69079', '19516', '7'), +('8', '65', '9', '69126', '23193', '7'), +('8', '65', '9', '32100', '22669', '7'), +('8', '65', '9', '68766', '21278', '7'), +('8', '65', '9', '69099', '20760', '7'), +('8', '65', '15', '69131', '29126', '7'), +('8', '65', '15', '68956', '25534', '7'), +('8', '65', '15', '68785', '23394', '7'), +('8', '65', '15', '69160', '22652', '7'), +('8', '65', '20', '16156', '26970', '7'), +('8', '65', '20', '67625', '24422', '7'), +('8', '65', '20', '69134', '24015', '7'), +('8', '65', '20', '68951', '20011', '7'), +('8', '65', '12', '69252', '22763', '7'), +('8', '65', '12', '68872', '20833', '7'), +('8', '65', '12', '69083', '20051', '7'), +('8', '65', '12', '28246', '16495', '7'), +('8', '65', '18', '69146', '24147', '7'), +('8', '65', '18', '68779', '18021', '7'), +('8', '65', '18', '68969', '16838', '7'), +('8', '65', '18', '28650', '16834', '7'), +('8', '65', '19', '69075', '27123', '7'), +('8', '65', '19', '69177', '22296', '7'), +('8', '65', '19', '68873', '21397', '7'), +('8', '65', '19', '19094', '18981', '7'), +('8', '65', '13', '69052', '37626', '7'), +('8', '65', '13', '69040', '37422', '7'), +('8', '65', '13', '69114', '35334', '7'), +('8', '65', '13', '69156', '30729', '7'), +('8', '65', '14', '69052', '37626', '7'), +('8', '65', '14', '69040', '37422', '7'), +('8', '65', '14', '69114', '35334', '7'), +('8', '65', '14', '69156', '30729', '7'), +('8', '65', '11', '67606', '22850', '7'), +('8', '65', '11', '68952', '21421', '7'), +('8', '65', '11', '9574', '20076', '7'), +('8', '65', '11', '68848', '19060', '7'), +('8', '65', '22', '21810', '0', '6'), +('8', '65', '22', '62787', '0', '6'), +('8', '65', '22', '66397', '0', '6'), +('8', '65', '22', '21805', '0', '6'), +('8', '65', '1', '7125', '22577', '6'), +('8', '65', '1', '32106', '20898', '6'), +('8', '65', '1', '7123', '17645', '6'), +('8', '65', '1', '4119', '15315', '6'), +('8', '65', '2', '28647', '22738', '6'), +('8', '65', '2', '28605', '22546', '6'), +('8', '65', '2', '28648', '22534', '6'), +('8', '65', '2', '28653', '12239', '6'), +('8', '65', '3', '26982', '21199', '6'), +('8', '65', '3', '9435', '15350', '6'), +('8', '65', '3', '9488', '14139', '6'), +('8', '65', '3', '29174', '13988', '6'), +('8', '65', '5', '28654', '20391', '6'), +('8', '65', '5', '7769', '19017', '6'), +('8', '65', '5', '8977', '16626', '6'), +('8', '65', '5', '9289', '15510', '6'), +('8', '65', '8', '15805', '18041', '6'), +('8', '65', '8', '26766', '16822', '6'), +('8', '65', '8', '26765', '16791', '6'), +('8', '65', '8', '15824', '15816', '6'), +('8', '65', '6', '13674', '24050', '6'), +('8', '65', '6', '19144', '18690', '6'), +('8', '65', '6', '28902', '17565', '6'), +('8', '65', '6', '13673', '17264', '6'), +('8', '65', '17', '47643', '21769', '6'), +('8', '65', '17', '28937', '16198', '6'), +('8', '65', '17', '29457', '13746', '6'), +('8', '65', '17', '15002', '13513', '6'), +('8', '65', '7', '16097', '19814', '6'), +('8', '65', '7', '21995', '14686', '6'), +('8', '65', '7', '11444', '14246', '6'), +('8', '65', '7', '27648', '10278', '6'), +('8', '65', '9', '32100', '22669', '6'), +('8', '65', '9', '16097', '19814', '6'), +('8', '65', '9', '11103', '19296', '6'), +('8', '65', '9', '28666', '15653', '6'), +('8', '65', '15', '9959', '19217', '6'), +('8', '65', '15', '26989', '17836', '6'), +('8', '65', '15', '69389', '17596', '6'), +('8', '65', '15', '68111', '17375', '6'), +('8', '65', '20', '16156', '26970', '6'), +('8', '65', '20', '16097', '19814', '6'), +('8', '65', '20', '15873', '18257', '6'), +('8', '65', '20', '22880', '15912', '6'), +('8', '65', '12', '28246', '16495', '6'), +('8', '65', '12', '27000', '15648', '6'), +('8', '65', '12', '25857', '14903', '6'), +('8', '65', '12', '27990', '12977', '6'), +('8', '65', '18', '28650', '16834', '6'), +('8', '65', '18', '16771', '12587', '6'), +('8', '65', '18', '28965', '9133', '6'), +('8', '65', '18', '68143', '8490', '6'), +('8', '65', '19', '19094', '18981', '6'), +('8', '65', '19', '30569', '16941', '6'), +('8', '65', '19', '25995', '16183', '6'), +('8', '65', '19', '19549', '13649', '6'), +('8', '65', '13', '22986', '28929', '6'), +('8', '65', '13', '22998', '28273', '6'), +('8', '65', '13', '24570', '25867', '6'), +('8', '65', '13', '24695', '25238', '6'), +('8', '65', '14', '22986', '28929', '6'), +('8', '65', '14', '22998', '28273', '6'), +('8', '65', '14', '24570', '25867', '6'), +('8', '65', '14', '24695', '25238', '6'), +('8', '65', '11', '9574', '20076', '6'), +('8', '65', '11', '26987', '18397', '6'), +('8', '65', '11', '20496', '17872', '6'), +('8', '65', '11', '20625', '15000', '6'), +('8', '65', '22', '21810', '0', '5'), +('8', '65', '22', '62787', '0', '5'), +('8', '65', '22', '66397', '0', '5'), +('8', '65', '22', '21805', '0', '5'), +('8', '65', '1', '7125', '22577', '5'), +('8', '65', '1', '32106', '20898', '5'), +('8', '65', '1', '7123', '17645', '5'), +('8', '65', '1', '4119', '15315', '5'), +('8', '65', '2', '28647', '22738', '5'), +('8', '65', '2', '28605', '22546', '5'), +('8', '65', '2', '28648', '22534', '5'), +('8', '65', '2', '28653', '12239', '5'), +('8', '65', '3', '26982', '21199', '5'), +('8', '65', '3', '9435', '15350', '5'), +('8', '65', '3', '9488', '14139', '5'), +('8', '65', '3', '29174', '13988', '5'), +('8', '65', '5', '28654', '20391', '5'), +('8', '65', '5', '7769', '19017', '5'), +('8', '65', '5', '8977', '16626', '5'), +('8', '65', '5', '9289', '15510', '5'), +('8', '65', '8', '15805', '18041', '5'), +('8', '65', '8', '26766', '16822', '5'), +('8', '65', '8', '26765', '16791', '5'), +('8', '65', '8', '15824', '15816', '5'), +('8', '65', '6', '13674', '24050', '5'), +('8', '65', '6', '19144', '18690', '5'), +('8', '65', '6', '28902', '17565', '5'), +('8', '65', '6', '13673', '17264', '5'), +('8', '65', '17', '47643', '21769', '5'), +('8', '65', '17', '28937', '16198', '5'), +('8', '65', '17', '29457', '13746', '5'), +('8', '65', '17', '15002', '13513', '5'), +('8', '65', '7', '16097', '19814', '5'), +('8', '65', '7', '21995', '14686', '5'), +('8', '65', '7', '11444', '14246', '5'), +('8', '65', '7', '27648', '10278', '5'), +('8', '65', '9', '32100', '22669', '5'), +('8', '65', '9', '16097', '19814', '5'), +('8', '65', '9', '11103', '19296', '5'), +('8', '65', '9', '28666', '15653', '5'), +('8', '65', '15', '9959', '19217', '5'), +('8', '65', '15', '26989', '17836', '5'), +('8', '65', '15', '69389', '17596', '5'), +('8', '65', '15', '32109', '16958', '5'), +('8', '65', '20', '16156', '26970', '5'), +('8', '65', '20', '16097', '19814', '5'), +('8', '65', '20', '15873', '18257', '5'), +('8', '65', '20', '22880', '15912', '5'), +('8', '65', '12', '28246', '16495', '5'), +('8', '65', '12', '27000', '15648', '5'), +('8', '65', '12', '25857', '14903', '5'), +('8', '65', '12', '27990', '12977', '5'), +('8', '65', '18', '28650', '16834', '5'), +('8', '65', '18', '16771', '12587', '5'), +('8', '65', '18', '28965', '9133', '5'), +('8', '65', '18', '28932', '8317', '5'), +('8', '65', '19', '19094', '18981', '5'), +('8', '65', '19', '30569', '16941', '5'), +('8', '65', '19', '25995', '16183', '5'), +('8', '65', '19', '19549', '13649', '5'), +('8', '65', '13', '22986', '28929', '5'), +('8', '65', '13', '22998', '28273', '5'), +('8', '65', '13', '24570', '25867', '5'), +('8', '65', '13', '24695', '25238', '5'), +('8', '65', '14', '22986', '28929', '5'), +('8', '65', '14', '22998', '28273', '5'), +('8', '65', '14', '24570', '25867', '5'), +('8', '65', '14', '24695', '25238', '5'), +('8', '65', '11', '9574', '20076', '5'), +('8', '65', '11', '26987', '18397', '5'), +('8', '65', '11', '20496', '17872', '5'), +('8', '65', '11', '20625', '15000', '5'), +('8', '65', '22', '21810', '0', '4'), +('8', '65', '22', '62787', '0', '4'), +('8', '65', '22', '66397', '0', '4'), +('8', '65', '22', '21805', '0', '4'), +('8', '65', '1', '7125', '22577', '4'), +('8', '65', '1', '32106', '20898', '4'), +('8', '65', '1', '7123', '17645', '4'), +('8', '65', '1', '4119', '15315', '4'), +('8', '65', '2', '28647', '22738', '4'), +('8', '65', '2', '28605', '22546', '4'), +('8', '65', '2', '28648', '22534', '4'), +('8', '65', '2', '28653', '12239', '4'), +('8', '65', '3', '26982', '21199', '4'), +('8', '65', '3', '9435', '15350', '4'), +('8', '65', '3', '9488', '14139', '4'), +('8', '65', '3', '29174', '13988', '4'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '65', '5', '28654', '20391', '4'), +('8', '65', '5', '7769', '19017', '4'), +('8', '65', '5', '8977', '16626', '4'), +('8', '65', '5', '9289', '15510', '4'), +('8', '65', '8', '15805', '18041', '4'), +('8', '65', '8', '26766', '16822', '4'), +('8', '65', '8', '26765', '16791', '4'), +('8', '65', '8', '15824', '15816', '4'), +('8', '65', '6', '13674', '24050', '4'), +('8', '65', '6', '19144', '18690', '4'), +('8', '65', '6', '28902', '17565', '4'), +('8', '65', '6', '13673', '17264', '4'), +('8', '65', '17', '47643', '21769', '4'), +('8', '65', '17', '28937', '16198', '4'), +('8', '65', '17', '29457', '13746', '4'), +('8', '65', '17', '15002', '13513', '4'), +('8', '65', '7', '16097', '19814', '4'), +('8', '65', '7', '21995', '14686', '4'), +('8', '65', '7', '11444', '14246', '4'), +('8', '65', '7', '27648', '10278', '4'), +('8', '65', '9', '32100', '22669', '4'), +('8', '65', '9', '16097', '19814', '4'), +('8', '65', '9', '11103', '19296', '4'), +('8', '65', '9', '28666', '15653', '4'), +('8', '65', '15', '9959', '19217', '4'), +('8', '65', '15', '26989', '17836', '4'), +('8', '65', '15', '69389', '17596', '4'), +('8', '65', '15', '32109', '16958', '4'), +('8', '65', '20', '16156', '26970', '4'), +('8', '65', '20', '16097', '19814', '4'), +('8', '65', '20', '15873', '18257', '4'), +('8', '65', '20', '22880', '15912', '4'), +('8', '65', '12', '28246', '16495', '4'), +('8', '65', '12', '27000', '15648', '4'), +('8', '65', '12', '25857', '14903', '4'), +('8', '65', '12', '27990', '12977', '4'), +('8', '65', '18', '28650', '16834', '4'), +('8', '65', '18', '16771', '12587', '4'), +('8', '65', '18', '28965', '9133', '4'), +('8', '65', '18', '28932', '8317', '4'), +('8', '65', '19', '19094', '18981', '4'), +('8', '65', '19', '30569', '16941', '4'), +('8', '65', '19', '25995', '16183', '4'), +('8', '65', '19', '19549', '13649', '4'), +('8', '65', '13', '22986', '28929', '4'), +('8', '65', '13', '22998', '28273', '4'), +('8', '65', '13', '24570', '25867', '4'), +('8', '65', '13', '24695', '25238', '4'), +('8', '65', '14', '22986', '28929', '4'), +('8', '65', '14', '22998', '28273', '4'), +('8', '65', '14', '24570', '25867', '4'), +('8', '65', '14', '24695', '25238', '4'), +('8', '65', '11', '9574', '20076', '4'), +('8', '65', '11', '26987', '18397', '4'), +('8', '65', '11', '20496', '17872', '4'), +('8', '65', '11', '20625', '15000', '4'), +('8', '66', '22', '21810', '0', '7'), +('8', '66', '22', '62787', '0', '7'), +('8', '66', '22', '66397', '0', '7'), +('8', '66', '22', '21805', '0', '7'), +('8', '66', '1', '68949', '28441', '7'), +('8', '66', '1', '68958', '25924', '7'), +('8', '66', '1', '69166', '23594', '7'), +('8', '66', '1', '7125', '22578', '7'), +('8', '66', '2', '28647', '22740', '7'), +('8', '66', '2', '28605', '22546', '7'), +('8', '66', '2', '28648', '22535', '7'), +('8', '66', '2', '69087', '19858', '7'), +('8', '66', '3', '69157', '29603', '7'), +('8', '66', '3', '26982', '21201', '7'), +('8', '66', '3', '69069', '20577', '7'), +('8', '66', '3', '69074', '20231', '7'), +('8', '66', '5', '67625', '24424', '7'), +('8', '66', '5', '69135', '22370', '7'), +('8', '66', '5', '69097', '20830', '7'), +('8', '66', '5', '68950', '20522', '7'), +('8', '66', '8', '69165', '32206', '7'), +('8', '66', '8', '69064', '30660', '7'), +('8', '66', '8', '69072', '29585', '7'), +('8', '66', '8', '69065', '26938', '7'), +('8', '66', '6', '68757', '26587', '7'), +('8', '66', '6', '13674', '24051', '7'), +('8', '66', '6', '69130', '23016', '7'), +('8', '66', '6', '69066', '20938', '7'), +('8', '66', '17', '68748', '25353', '7'), +('8', '66', '17', '69150', '24857', '7'), +('8', '66', '17', '68968', '24826', '7'), +('8', '66', '17', '47643', '21771', '7'), +('8', '66', '7', '69168', '28155', '7'), +('8', '66', '7', '68871', '22267', '7'), +('8', '66', '7', '16097', '19815', '7'), +('8', '66', '7', '69079', '19517', '7'), +('8', '66', '9', '69126', '23194', '7'), +('8', '66', '9', '32100', '22670', '7'), +('8', '66', '9', '68766', '21279', '7'), +('8', '66', '9', '69099', '20761', '7'), +('8', '66', '15', '69131', '29127', '7'), +('8', '66', '15', '68956', '25535', '7'), +('8', '66', '15', '68785', '23395', '7'), +('8', '66', '15', '69160', '22652', '7'), +('8', '66', '20', '16156', '26971', '7'), +('8', '66', '20', '67625', '24424', '7'), +('8', '66', '20', '69134', '24017', '7'), +('8', '66', '20', '68951', '20013', '7'), +('8', '66', '12', '69252', '22765', '7'), +('8', '66', '12', '68872', '20834', '7'), +('8', '66', '12', '69083', '20052', '7'), +('8', '66', '12', '28246', '16496', '7'), +('8', '66', '18', '69146', '24148', '7'), +('8', '66', '18', '68779', '18023', '7'), +('8', '66', '18', '68969', '16839', '7'), +('8', '66', '18', '28650', '16836', '7'), +('8', '66', '19', '69075', '27125', '7'), +('8', '66', '19', '69177', '22298', '7'), +('8', '66', '19', '68873', '21399', '7'), +('8', '66', '19', '19094', '18982', '7'), +('8', '66', '13', '69052', '37783', '7'), +('8', '66', '13', '69040', '37465', '7'), +('8', '66', '13', '69114', '35335', '7'), +('8', '66', '13', '69156', '30730', '7'), +('8', '66', '14', '69052', '37783', '7'), +('8', '66', '14', '69040', '37465', '7'), +('8', '66', '14', '69114', '35335', '7'), +('8', '66', '14', '69156', '30730', '7'), +('8', '66', '11', '67606', '22852', '7'), +('8', '66', '11', '68952', '21422', '7'), +('8', '66', '11', '9574', '20076', '7'), +('8', '66', '11', '68848', '19061', '7'), +('8', '67', '22', '21810', '0', '7'), +('8', '67', '22', '62787', '0', '7'), +('8', '67', '22', '66397', '0', '7'), +('8', '67', '22', '21805', '0', '7'), +('8', '67', '1', '68949', '28443', '7'), +('8', '67', '1', '68958', '25926', '7'), +('8', '67', '1', '69166', '23596', '7'), +('8', '67', '1', '7125', '22579', '7'), +('8', '67', '2', '28647', '22741', '7'), +('8', '67', '2', '28605', '22546', '7'), +('8', '67', '2', '28648', '22536', '7'), +('8', '67', '2', '69087', '19860', '7'), +('8', '67', '3', '69157', '29604', '7'), +('8', '67', '3', '26982', '21202', '7'), +('8', '67', '3', '69069', '20578', '7'), +('8', '67', '3', '69074', '20232', '7'), +('8', '67', '5', '67625', '24425', '7'), +('8', '67', '5', '69135', '22372', '7'), +('8', '67', '5', '69097', '20831', '7'), +('8', '67', '5', '68950', '20523', '7'), +('8', '67', '8', '69165', '32208', '7'), +('8', '67', '8', '69064', '30661', '7'), +('8', '67', '8', '69072', '29586', '7'), +('8', '67', '8', '69065', '26940', '7'), +('8', '67', '6', '68757', '26589', '7'), +('8', '67', '6', '13674', '24052', '7'), +('8', '67', '6', '69130', '23018', '7'), +('8', '67', '6', '69066', '20940', '7'), +('8', '67', '17', '68748', '25354', '7'), +('8', '67', '17', '69150', '24859', '7'), +('8', '67', '17', '68968', '24828', '7'), +('8', '67', '17', '47643', '21772', '7'), +('8', '67', '7', '69168', '28157', '7'), +('8', '67', '7', '68871', '22268', '7'), +('8', '67', '7', '16097', '19816', '7'), +('8', '67', '7', '69079', '19518', '7'), +('8', '67', '9', '69126', '23196', '7'), +('8', '67', '9', '32100', '22671', '7'), +('8', '67', '9', '68766', '21280', '7'), +('8', '67', '9', '69099', '20762', '7'), +('8', '67', '15', '69131', '29128', '7'), +('8', '67', '15', '68956', '25537', '7'), +('8', '67', '15', '68785', '23397', '7'), +('8', '67', '15', '69160', '22653', '7'), +('8', '67', '20', '16156', '26973', '7'), +('8', '67', '20', '67625', '24425', '7'), +('8', '67', '20', '69134', '24018', '7'), +('8', '67', '20', '68951', '20015', '7'), +('8', '67', '12', '69252', '22766', '7'), +('8', '67', '12', '68872', '20835', '7'), +('8', '67', '12', '69083', '20053', '7'), +('8', '67', '12', '28246', '16497', '7'), +('8', '67', '18', '69146', '24149', '7'), +('8', '67', '18', '68779', '18024', '7'), +('8', '67', '18', '68969', '16840', '7'), +('8', '67', '18', '28650', '16837', '7'), +('8', '67', '19', '69075', '27127', '7'), +('8', '67', '19', '69177', '22300', '7'), +('8', '67', '19', '68873', '21400', '7'), +('8', '67', '19', '19094', '18983', '7'), +('8', '67', '13', '69052', '37940', '7'), +('8', '67', '13', '69040', '37508', '7'), +('8', '67', '13', '69114', '35336', '7'), +('8', '67', '13', '69156', '30730', '7'), +('8', '67', '14', '69052', '37940', '7'), +('8', '67', '14', '69040', '37508', '7'), +('8', '67', '14', '69114', '35336', '7'), +('8', '67', '14', '69156', '30730', '7'), +('8', '67', '11', '67606', '22853', '7'), +('8', '67', '11', '68952', '21423', '7'), +('8', '67', '11', '9574', '20077', '7'), +('8', '67', '11', '68848', '19062', '7'), +('8', '68', '22', '21810', '0', '7'), +('8', '68', '22', '62787', '0', '7'), +('8', '68', '22', '66397', '0', '7'), +('8', '68', '22', '21805', '0', '7'), +('8', '68', '1', '68949', '28445', '7'), +('8', '68', '1', '68958', '25928', '7'), +('8', '68', '1', '69166', '23597', '7'), +('8', '68', '1', '7125', '22579', '7'), +('8', '68', '2', '28647', '22742', '7'), +('8', '68', '2', '28605', '22547', '7'), +('8', '68', '2', '28648', '22536', '7'), +('8', '68', '2', '69087', '19861', '7'), +('8', '68', '3', '69157', '29606', '7'), +('8', '68', '3', '26982', '21204', '7'), +('8', '68', '3', '69069', '20579', '7'), +('8', '68', '3', '69074', '20233', '7'), +('8', '68', '5', '67625', '24427', '7'), +('8', '68', '5', '69135', '22374', '7'), +('8', '68', '5', '69097', '20833', '7'), +('8', '68', '5', '68950', '20524', '7'), +('8', '68', '8', '69165', '32209', '7'), +('8', '68', '8', '69064', '30663', '7'), +('8', '68', '8', '69072', '29588', '7'), +('8', '68', '8', '69065', '26941', '7'), +('8', '68', '6', '68757', '26590', '7'), +('8', '68', '6', '13674', '24053', '7'), +('8', '68', '6', '69130', '23019', '7'), +('8', '68', '6', '69066', '20941', '7'), +('8', '68', '17', '68748', '25356', '7'), +('8', '68', '17', '69150', '24861', '7'), +('8', '68', '17', '68968', '24829', '7'), +('8', '68', '17', '47643', '21774', '7'), +('8', '68', '7', '69168', '28158', '7'), +('8', '68', '7', '68871', '22270', '7'), +('8', '68', '7', '16097', '19818', '7'), +('8', '68', '7', '69079', '19519', '7'), +('8', '68', '9', '69126', '23197', '7'), +('8', '68', '9', '32100', '22671', '7'), +('8', '68', '9', '68766', '21281', '7'), +('8', '68', '9', '69099', '20764', '7'), +('8', '68', '15', '69131', '29129', '7'), +('8', '68', '15', '68956', '25538', '7'), +('8', '68', '15', '68785', '23398', '7'), +('8', '68', '15', '69160', '22654', '7'), +('8', '68', '20', '16156', '26974', '7'), +('8', '68', '20', '67625', '24427', '7'), +('8', '68', '20', '69134', '24020', '7'), +('8', '68', '20', '68951', '20016', '7'), +('8', '68', '12', '69252', '22767', '7'), +('8', '68', '12', '68872', '20836', '7'), +('8', '68', '12', '69083', '20054', '7'), +('8', '68', '12', '28246', '16498', '7'), +('8', '68', '18', '69146', '24150', '7'), +('8', '68', '18', '68779', '18025', '7'), +('8', '68', '18', '68969', '16842', '7'), +('8', '68', '18', '28650', '16839', '7'), +('8', '68', '19', '69075', '27128', '7'), +('8', '68', '19', '69177', '22301', '7'), +('8', '68', '19', '68873', '21402', '7'), +('8', '68', '19', '19094', '18984', '7'), +('8', '68', '13', '69052', '38097', '7'), +('8', '68', '13', '69040', '37551', '7'), +('8', '68', '13', '69114', '35338', '7'), +('8', '68', '13', '69156', '30731', '7'), +('8', '68', '14', '69052', '38097', '7'), +('8', '68', '14', '69040', '37551', '7'), +('8', '68', '14', '69114', '35338', '7'), +('8', '68', '14', '69156', '30731', '7'), +('8', '68', '11', '67606', '22855', '7'), +('8', '68', '11', '68952', '21425', '7'), +('8', '68', '11', '9574', '20077', '7'), +('8', '68', '11', '68848', '19064', '7'), +('8', '69', '22', '21810', '0', '7'), +('8', '69', '22', '62787', '0', '7'), +('8', '69', '22', '66397', '0', '7'), +('8', '69', '22', '21805', '0', '7'), +('8', '69', '1', '68949', '28446', '7'), +('8', '69', '1', '68958', '25929', '7'), +('8', '69', '1', '69166', '23598', '7'), +('8', '69', '1', '7125', '22580', '7'), +('8', '69', '2', '28647', '22744', '7'), +('8', '69', '2', '28605', '22547', '7'), +('8', '69', '2', '28648', '22537', '7'), +('8', '69', '2', '69087', '19863', '7'), +('8', '69', '3', '69157', '29607', '7'), +('8', '69', '3', '26982', '21205', '7'), +('8', '69', '3', '69069', '20580', '7'), +('8', '69', '3', '69074', '20235', '7'), +('8', '69', '5', '67625', '24428', '7'), +('8', '69', '5', '69135', '22375', '7'), +('8', '69', '5', '69097', '20835', '7'), +('8', '69', '5', '68950', '20525', '7'), +('8', '69', '8', '69165', '32211', '7'), +('8', '69', '8', '69064', '30664', '7'), +('8', '69', '8', '69072', '29589', '7'), +('8', '69', '8', '69065', '26942', '7'), +('8', '69', '6', '68757', '26591', '7'), +('8', '69', '6', '13674', '24054', '7'), +('8', '69', '6', '69130', '23020', '7'), +('8', '69', '6', '69066', '20942', '7'), +('8', '69', '17', '68748', '25357', '7'), +('8', '69', '17', '69150', '24862', '7'), +('8', '69', '17', '68968', '24830', '7'), +('8', '69', '17', '47643', '21775', '7'), +('8', '69', '7', '69168', '28159', '7'), +('8', '69', '7', '68871', '22272', '7'), +('8', '69', '7', '16097', '19819', '7'), +('8', '69', '7', '69079', '19520', '7'), +('8', '69', '9', '69126', '23199', '7'), +('8', '69', '9', '32100', '22672', '7'), +('8', '69', '9', '68766', '21282', '7'), +('8', '69', '9', '69099', '20765', '7'), +('8', '69', '15', '69131', '29130', '7'), +('8', '69', '15', '68956', '25540', '7'), +('8', '69', '15', '68785', '23399', '7'), +('8', '69', '15', '69160', '22654', '7'), +('8', '69', '20', '16156', '26975', '7'), +('8', '69', '20', '67625', '24428', '7'), +('8', '69', '20', '69134', '24022', '7'), +('8', '69', '20', '68951', '20018', '7'), +('8', '69', '12', '69252', '22769', '7'), +('8', '69', '12', '68872', '20837', '7'), +('8', '69', '12', '69083', '20055', '7'), +('8', '69', '12', '28246', '16499', '7'), +('8', '69', '18', '69146', '24151', '7'), +('8', '69', '18', '68779', '18027', '7'), +('8', '69', '18', '68969', '16843', '7'), +('8', '69', '18', '28650', '16840', '7'), +('8', '69', '19', '69075', '27130', '7'), +('8', '69', '19', '69177', '22303', '7'), +('8', '69', '19', '68873', '21403', '7'), +('8', '69', '19', '19094', '18984', '7'), +('8', '69', '13', '69052', '38254', '7'), +('8', '69', '13', '69040', '37594', '7'), +('8', '69', '13', '69114', '35339', '7'), +('8', '69', '13', '69156', '30732', '7'), +('8', '69', '14', '69052', '38254', '7'), +('8', '69', '14', '69040', '37594', '7'), +('8', '69', '14', '69114', '35339', '7'), +('8', '69', '14', '69156', '30732', '7'), +('8', '69', '11', '67606', '22856', '7'), +('8', '69', '11', '68952', '21426', '7'), +('8', '69', '11', '9574', '20078', '7'), +('8', '69', '11', '68848', '19065', '7'), +('8', '70', '22', '66397', '0', '11'), +('8', '70', '22', '62787', '0', '11'), +('8', '70', '22', '61948', '0', '11'), +('8', '70', '22', '21805', '0', '11'), +('8', '70', '1', '39276', '37403', '11'), +('8', '70', '1', '83594', '36475', '11'), +('8', '70', '1', '39282', '35664', '11'), +('8', '70', '1', '39343', '30490', '11'), +('8', '70', '2', '83560', '34184', '11'), +('8', '70', '2', '70902', '31692', '11'), +('8', '70', '2', '39222', '25415', '11'), +('8', '70', '2', '83494', '23262', '11'), +('8', '70', '3', '39347', '39210', '11'), +('8', '70', '3', '47245', '38523', '11'), +('8', '70', '3', '71667', '34042', '11'), +('8', '70', '3', '39218', '33940', '11'), +('8', '70', '5', '39349', '39558', '11'), +('8', '70', '5', '39359', '31326', '11'), +('8', '70', '5', '39313', '28613', '11'), +('8', '70', '5', '39262', '28418', '11'), +('8', '70', '8', '39330', '37447', '11'), +('8', '70', '8', '47305', '32734', '11'), +('8', '70', '8', '69165', '32212', '11'), +('8', '70', '8', '69064', '30666', '11'), +('8', '70', '6', '39337', '39153', '11'), +('8', '70', '6', '39327', '35773', '11'), +('8', '70', '6', '83635', '34270', '11'), +('8', '70', '6', '39367', '34132', '11'), +('8', '70', '17', '83603', '49592', '11'), +('8', '70', '17', '70907', '34123', '11'), +('8', '70', '17', '70701', '31768', '11'), +('8', '70', '17', '39935', '26047', '11'), +('8', '70', '7', '47204', '29313', '11'), +('8', '70', '7', '83564', '28433', '11'), +('8', '70', '7', '39267', '28248', '11'), +('8', '70', '7', '69168', '28161', '11'), +('8', '70', '9', '39335', '39288', '11'), +('8', '70', '9', '51706', '30134', '11'), +('8', '70', '9', '83652', '29862', '11'), +('8', '70', '9', '39291', '28783', '11'), +('8', '70', '15', '83458', '34066', '11'), +('8', '70', '15', '39374', '30262', '11'), +('8', '70', '15', '51703', '29669', '11'), +('8', '70', '15', '83661', '29517', '11'), +('8', '70', '20', '39365', '34276', '11'), +('8', '70', '20', '47283', '33493', '11'), +('8', '70', '20', '39339', '31287', '11'), +('8', '70', '20', '71657', '31021', '11'), +('8', '70', '12', '47212', '36605', '11'), +('8', '70', '12', '83568', '34222', '11'), +('8', '70', '12', '70905', '27907', '11'), +('8', '70', '12', '71075', '26544', '11'), +('8', '70', '18', '70908', '32307', '11'), +('8', '70', '18', '83607', '31848', '11'), +('8', '70', '18', '71646', '29173', '11'), +('8', '70', '18', '69146', '24153', '11'), +('8', '70', '19', '39355', '31292', '11'), +('8', '70', '19', '83550', '30459', '11'), +('8', '70', '19', '70906', '28907', '11'), +('8', '70', '19', '47216', '28762', '11'), +('8', '70', '13', '83639', '50088', '11'), +('8', '70', '13', '47312', '45899', '11'), +('8', '70', '13', '39323', '42088', '11'), +('8', '70', '13', '47314', '40224', '11'), +('8', '70', '14', '83639', '50088', '11'), +('8', '70', '14', '47312', '45899', '11'), +('8', '70', '14', '39323', '42088', '11'), +('8', '70', '14', '47314', '40224', '11'), +('8', '70', '11', '39371', '42334', '11'), +('8', '70', '11', '39311', '37796', '11'), +('8', '70', '11', '83657', '37632', '11'), +('8', '70', '11', '47297', '32318', '11'), +('8', '70', '22', '62787', '0', '10'), +('8', '70', '22', '21810', '0', '10'), +('8', '70', '22', '66397', '0', '10'), +('8', '70', '22', '61948', '0', '10'), +('8', '70', '1', '83594', '36475', '10'), +('8', '70', '1', '71624', '30246', '10'), +('8', '70', '1', '83546', '30000', '10'), +('8', '70', '1', '83630', '28517', '10'), +('8', '70', '2', '83560', '34184', '10'), +('8', '70', '2', '70902', '31692', '10'), +('8', '70', '2', '83494', '23262', '10'), +('8', '70', '2', '28647', '22745', '10'), +('8', '70', '3', '47245', '38523', '10'), +('8', '70', '3', '71667', '34042', '10'), +('8', '70', '3', '83658', '29983', '10'), +('8', '70', '3', '69157', '29608', '10'), +('8', '70', '5', '83651', '28144', '10'), +('8', '70', '5', '83599', '27369', '10'), +('8', '70', '5', '89308', '26423', '10'), +('8', '70', '5', '47275', '26168', '10'), +('8', '70', '8', '47305', '32734', '10'), +('8', '70', '8', '69165', '32212', '10'), +('8', '70', '8', '69064', '30666', '10'), +('8', '70', '8', '83659', '30408', '10'), +('8', '70', '6', '83635', '34270', '10'), +('8', '70', '6', '47278', '32714', '10'), +('8', '70', '6', '70717', '31995', '10'), +('8', '70', '6', '83660', '29789', '10'), +('8', '70', '17', '83603', '49592', '10'), +('8', '70', '17', '70907', '34123', '10'), +('8', '70', '17', '70701', '31768', '10'), +('8', '70', '17', '68748', '25359', '10'), +('8', '70', '7', '47204', '29313', '10'), +('8', '70', '7', '83564', '28433', '10'), +('8', '70', '7', '69168', '28161', '10'), +('8', '70', '7', '71074', '24800', '10'), +('8', '70', '9', '83652', '29862', '10'), +('8', '70', '9', '83534', '28251', '10'), +('8', '70', '9', '70619', '24163', '10'), +('8', '70', '9', '83462', '23411', '10'), +('8', '70', '15', '83458', '34066', '10'), +('8', '70', '15', '83661', '29517', '10'), +('8', '70', '15', '47237', '29486', '10'), +('8', '70', '15', '69131', '29131', '10'), +('8', '70', '20', '47283', '33493', '10'), +('8', '70', '20', '71657', '31021', '10'), +('8', '70', '20', '83533', '30339', '10'), +('8', '70', '20', '83650', '28837', '10'), +('8', '70', '12', '47212', '36605', '10'), +('8', '70', '12', '83568', '34222', '10'), +('8', '70', '12', '70905', '27907', '10'), +('8', '70', '12', '71075', '26544', '10'), +('8', '70', '18', '70908', '32307', '10'), +('8', '70', '18', '83607', '31848', '10'), +('8', '70', '18', '71646', '29173', '10'), +('8', '70', '18', '69146', '24153', '10'), +('8', '70', '19', '83550', '30459', '10'), +('8', '70', '19', '70906', '28907', '10'), +('8', '70', '19', '47216', '28762', '10'), +('8', '70', '19', '83572', '28145', '10'), +('8', '70', '13', '83639', '50088', '10'), +('8', '70', '13', '47312', '45899', '10'), +('8', '70', '13', '47314', '40224', '10'), +('8', '70', '13', '69052', '39504', '10'), +('8', '70', '14', '83639', '50088', '10'), +('8', '70', '14', '47312', '45899', '10'), +('8', '70', '14', '47314', '40224', '10'), +('8', '70', '14', '69052', '39504', '10'), +('8', '70', '11', '83657', '37632', '10'), +('8', '70', '11', '47297', '32318', '10'), +('8', '70', '11', '83619', '31843', '10'), +('8', '70', '11', '47296', '31456', '10'), +('8', '70', '22', '21810', '0', '9'), +('8', '70', '22', '62787', '0', '9'), +('8', '70', '22', '66397', '0', '9'), +('8', '70', '22', '21805', '0', '9'), +('8', '70', '1', '71624', '30246', '9'), +('8', '70', '1', '68949', '28448', '9'), +('8', '70', '1', '71668', '26322', '9'), +('8', '70', '1', '47287', '26029', '9'), +('8', '70', '2', '70902', '31692', '9'), +('8', '70', '2', '28647', '22745', '9'), +('8', '70', '2', '28605', '22547', '9'), +('8', '70', '2', '47208', '22539', '9'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '70', '3', '47245', '38523', '9'), +('8', '70', '3', '71667', '34042', '9'), +('8', '70', '3', '69157', '29608', '9'), +('8', '70', '3', '47299', '25295', '9'), +('8', '70', '5', '47275', '26168', '9'), +('8', '70', '5', '47273', '25403', '9'), +('8', '70', '5', '67625', '24430', '9'), +('8', '70', '5', '47274', '24053', '9'), +('8', '70', '8', '47305', '32734', '9'), +('8', '70', '8', '69165', '32212', '9'), +('8', '70', '8', '69064', '30666', '9'), +('8', '70', '8', '69072', '29590', '9'), +('8', '70', '6', '47278', '32714', '9'), +('8', '70', '6', '70717', '31995', '9'), +('8', '70', '6', '68757', '26592', '9'), +('8', '70', '6', '47279', '24444', '9'), +('8', '70', '17', '70907', '34123', '9'), +('8', '70', '17', '70701', '31768', '9'), +('8', '70', '17', '68748', '25359', '9'), +('8', '70', '17', '71093', '25149', '9'), +('8', '70', '7', '47204', '29313', '9'), +('8', '70', '7', '69168', '28161', '9'), +('8', '70', '7', '71074', '24800', '9'), +('8', '70', '7', '70903', '22683', '9'), +('8', '70', '9', '70619', '24163', '9'), +('8', '70', '9', '69126', '23201', '9'), +('8', '70', '9', '32100', '22673', '9'), +('8', '70', '9', '47220', '22388', '9'), +('8', '70', '15', '47237', '29486', '9'), +('8', '70', '15', '69131', '29131', '9'), +('8', '70', '15', '70621', '27589', '9'), +('8', '70', '15', '71117', '27177', '9'), +('8', '70', '20', '47283', '33493', '9'), +('8', '70', '20', '71657', '31021', '9'), +('8', '70', '20', '16156', '26977', '9'), +('8', '70', '20', '47282', '25696', '9'), +('8', '70', '12', '47212', '36605', '9'), +('8', '70', '12', '70905', '27907', '9'), +('8', '70', '12', '71075', '26544', '9'), +('8', '70', '12', '69252', '22770', '9'), +('8', '70', '18', '70908', '32307', '9'), +('8', '70', '18', '71646', '29173', '9'), +('8', '70', '18', '69146', '24153', '9'), +('8', '70', '18', '47200', '24005', '9'), +('8', '70', '19', '70906', '28907', '9'), +('8', '70', '19', '47216', '28762', '9'), +('8', '70', '19', '69075', '27132', '9'), +('8', '70', '19', '71076', '25581', '9'), +('8', '70', '13', '47312', '45899', '9'), +('8', '70', '13', '47314', '40224', '9'), +('8', '70', '13', '69052', '39504', '9'), +('8', '70', '13', '69040', '37929', '9'), +('8', '70', '14', '47312', '45899', '9'), +('8', '70', '14', '47314', '40224', '9'), +('8', '70', '14', '69052', '39504', '9'), +('8', '70', '14', '69040', '37929', '9'), +('8', '70', '11', '47297', '32318', '9'), +('8', '70', '11', '47296', '31456', '9'), +('8', '70', '11', '47295', '25751', '9'), +('8', '70', '11', '71659', '24091', '9'), +('8', '70', '22', '21810', '0', '8'), +('8', '70', '22', '62787', '0', '8'), +('8', '70', '22', '66397', '0', '8'), +('8', '70', '22', '21805', '0', '8'), +('8', '70', '1', '68949', '28448', '8'), +('8', '70', '1', '47287', '26029', '8'), +('8', '70', '1', '68958', '25931', '8'), +('8', '70', '1', '47289', '24918', '8'), +('8', '70', '2', '70902', '31692', '8'), +('8', '70', '2', '28647', '22745', '8'), +('8', '70', '2', '28605', '22547', '8'), +('8', '70', '2', '47208', '22539', '8'), +('8', '70', '3', '47245', '38523', '8'), +('8', '70', '3', '69157', '29608', '8'), +('8', '70', '3', '47299', '25295', '8'), +('8', '70', '3', '47300', '24266', '8'), +('8', '70', '5', '47275', '26168', '8'), +('8', '70', '5', '47273', '25403', '8'), +('8', '70', '5', '67625', '24430', '8'), +('8', '70', '5', '47274', '24053', '8'), +('8', '70', '8', '47305', '32734', '8'), +('8', '70', '8', '69165', '32212', '8'), +('8', '70', '8', '69064', '30666', '8'), +('8', '70', '8', '69072', '29590', '8'), +('8', '70', '6', '47278', '32714', '8'), +('8', '70', '6', '70717', '31995', '8'), +('8', '70', '6', '68757', '26592', '8'), +('8', '70', '6', '47279', '24444', '8'), +('8', '70', '17', '70907', '34123', '8'), +('8', '70', '17', '70701', '31768', '8'), +('8', '70', '17', '68748', '25359', '8'), +('8', '70', '17', '71093', '25149', '8'), +('8', '70', '7', '47204', '29313', '8'), +('8', '70', '7', '69168', '28161', '8'), +('8', '70', '7', '71074', '24800', '8'), +('8', '70', '7', '70903', '22683', '8'), +('8', '70', '9', '70619', '24163', '8'), +('8', '70', '9', '69126', '23201', '8'), +('8', '70', '9', '32100', '22673', '8'), +('8', '70', '9', '47220', '22388', '8'), +('8', '70', '15', '47237', '29486', '8'), +('8', '70', '15', '69131', '29131', '8'), +('8', '70', '15', '70621', '27589', '8'), +('8', '70', '15', '71117', '27177', '8'), +('8', '70', '20', '47283', '33493', '8'), +('8', '70', '20', '16156', '26977', '8'), +('8', '70', '20', '47282', '25696', '8'), +('8', '70', '20', '70604', '25082', '8'), +('8', '70', '12', '47212', '36605', '8'), +('8', '70', '12', '70905', '27907', '8'), +('8', '70', '12', '71075', '26544', '8'), +('8', '70', '12', '69252', '22770', '8'), +('8', '70', '18', '70908', '32307', '8'), +('8', '70', '18', '69146', '24153', '8'), +('8', '70', '18', '47200', '24005', '8'), +('8', '70', '18', '71094', '20079', '8'), +('8', '70', '19', '70906', '28907', '8'), +('8', '70', '19', '47216', '28762', '8'), +('8', '70', '19', '69075', '27132', '8'), +('8', '70', '19', '71076', '25581', '8'), +('8', '70', '13', '47312', '45826', '8'), +('8', '70', '13', '47314', '40130', '8'), +('8', '70', '13', '69052', '39192', '8'), +('8', '70', '13', '69040', '37846', '8'), +('8', '70', '14', '47312', '45826', '8'), +('8', '70', '14', '47314', '40130', '8'), +('8', '70', '14', '69052', '39192', '8'), +('8', '70', '14', '69040', '37846', '8'), +('8', '70', '11', '47297', '32318', '8'), +('8', '70', '11', '47296', '31456', '8'), +('8', '70', '11', '47295', '25751', '8'), +('8', '70', '11', '67606', '22857', '8'), +('8', '71', '22', '66397', '0', '11'), +('8', '71', '22', '62787', '0', '11'), +('8', '71', '22', '61948', '0', '11'), +('8', '71', '22', '21805', '0', '11'), +('8', '71', '1', '39276', '37404', '11'), +('8', '71', '1', '83594', '36477', '11'), +('8', '71', '1', '39282', '35665', '11'), +('8', '71', '1', '39343', '30492', '11'), +('8', '71', '2', '83560', '34187', '11'), +('8', '71', '2', '70902', '31693', '11'), +('8', '71', '2', '39222', '25417', '11'), +('8', '71', '2', '83494', '23263', '11'), +('8', '71', '3', '39347', '39212', '11'), +('8', '71', '3', '47245', '38523', '11'), +('8', '71', '3', '71667', '34043', '11'), +('8', '71', '3', '39218', '33941', '11'), +('8', '71', '5', '39349', '39560', '11'), +('8', '71', '5', '39359', '31327', '11'), +('8', '71', '5', '39313', '28615', '11'), +('8', '71', '5', '39262', '28420', '11'), +('8', '71', '8', '39330', '37448', '11'), +('8', '71', '8', '47305', '32735', '11'), +('8', '71', '8', '69165', '32214', '11'), +('8', '71', '8', '69064', '30667', '11'), +('8', '71', '6', '39337', '39155', '11'), +('8', '71', '6', '39327', '35774', '11'), +('8', '71', '6', '83635', '34272', '11'), +('8', '71', '6', '39367', '34133', '11'), +('8', '71', '17', '83603', '49595', '11'), +('8', '71', '17', '70907', '34125', '11'), +('8', '71', '17', '70701', '31770', '11'), +('8', '71', '17', '39935', '26047', '11'), +('8', '71', '7', '47204', '29314', '11'), +('8', '71', '7', '83564', '28435', '11'), +('8', '71', '7', '39267', '28250', '11'), +('8', '71', '7', '69168', '28162', '11'), +('8', '71', '9', '39335', '39290', '11'), +('8', '71', '9', '51706', '30136', '11'), +('8', '71', '9', '83652', '29864', '11'), +('8', '71', '9', '39291', '28785', '11'), +('8', '71', '15', '83458', '34067', '11'), +('8', '71', '15', '39374', '30265', '11'), +('8', '71', '15', '51703', '29671', '11'), +('8', '71', '15', '83661', '29519', '11'), +('8', '71', '20', '39365', '34278', '11'), +('8', '71', '20', '47283', '33494', '11'), +('8', '71', '20', '39339', '31289', '11'), +('8', '71', '20', '71657', '31022', '11'), +('8', '71', '12', '47212', '36607', '11'), +('8', '71', '12', '83568', '34224', '11'), +('8', '71', '12', '70905', '27908', '11'), +('8', '71', '12', '71075', '26546', '11'), +('8', '71', '18', '70908', '32309', '11'), +('8', '71', '18', '83607', '31850', '11'), +('8', '71', '18', '71646', '29175', '11'), +('8', '71', '18', '69146', '24154', '11'), +('8', '71', '19', '39355', '31294', '11'), +('8', '71', '19', '83550', '30461', '11'), +('8', '71', '19', '70906', '28908', '11'), +('8', '71', '19', '47216', '28763', '11'), +('8', '71', '13', '83639', '50272', '11'), +('8', '71', '13', '47312', '45937', '11'), +('8', '71', '13', '39323', '42135', '11'), +('8', '71', '13', '47314', '40272', '11'), +('8', '71', '14', '83639', '50272', '11'), +('8', '71', '14', '47312', '45937', '11'), +('8', '71', '14', '39323', '42135', '11'), +('8', '71', '14', '47314', '40272', '11'), +('8', '71', '11', '39371', '42335', '11'), +('8', '71', '11', '39311', '37798', '11'), +('8', '71', '11', '83657', '37634', '11'), +('8', '71', '11', '47297', '32320', '11'), +('8', '72', '22', '66397', '0', '11'), +('8', '72', '22', '62787', '0', '11'), +('8', '72', '22', '61948', '0', '11'), +('8', '72', '22', '21805', '0', '11'), +('8', '72', '1', '39276', '37406', '11'), +('8', '72', '1', '83594', '36479', '11'), +('8', '72', '1', '39282', '35667', '11'), +('8', '72', '1', '39343', '30494', '11'), +('8', '72', '2', '83560', '34189', '11'), +('8', '72', '2', '70902', '31694', '11'), +('8', '72', '2', '39222', '25418', '11'), +('8', '72', '2', '83494', '23265', '11'), +('8', '72', '3', '39347', '39214', '11'), +('8', '72', '3', '47245', '38524', '11'), +('8', '72', '3', '71667', '34044', '11'), +('8', '72', '3', '39218', '33943', '11'), +('8', '72', '5', '39349', '39561', '11'), +('8', '72', '5', '39359', '31329', '11'), +('8', '72', '5', '39313', '28617', '11'), +('8', '72', '5', '39262', '28421', '11'), +('8', '72', '8', '39330', '37449', '11'), +('8', '72', '8', '47305', '32735', '11'), +('8', '72', '8', '69165', '32215', '11'), +('8', '72', '8', '69064', '30669', '11'), +('8', '72', '6', '39337', '39156', '11'), +('8', '72', '6', '39327', '35775', '11'), +('8', '72', '6', '83635', '34274', '11'), +('8', '72', '6', '39367', '34134', '11'), +('8', '72', '17', '83603', '49597', '11'), +('8', '72', '17', '70907', '34127', '11'), +('8', '72', '17', '70701', '31772', '11'), +('8', '72', '17', '39935', '26048', '11'), +('8', '72', '7', '47204', '29315', '11'), +('8', '72', '7', '83564', '28438', '11'), +('8', '72', '7', '39267', '28252', '11'), +('8', '72', '7', '69168', '28164', '11'), +('8', '72', '9', '39335', '39292', '11'), +('8', '72', '9', '51706', '30138', '11'), +('8', '72', '9', '83652', '29865', '11'), +('8', '72', '9', '39291', '28787', '11'), +('8', '72', '15', '83458', '34069', '11'), +('8', '72', '15', '39374', '30267', '11'), +('8', '72', '15', '51703', '29673', '11'), +('8', '72', '15', '83661', '29521', '11'), +('8', '72', '20', '39365', '34280', '11'), +('8', '72', '20', '47283', '33494', '11'), +('8', '72', '20', '39339', '31290', '11'), +('8', '72', '20', '71657', '31022', '11'), +('8', '72', '12', '47212', '36609', '11'), +('8', '72', '12', '83568', '34227', '11'), +('8', '72', '12', '70905', '27909', '11'), +('8', '72', '12', '71075', '26547', '11'), +('8', '72', '18', '70908', '32311', '11'), +('8', '72', '18', '83607', '31852', '11'), +('8', '72', '18', '71646', '29176', '11'), +('8', '72', '18', '69146', '24155', '11'), +('8', '72', '19', '39355', '31296', '11'), +('8', '72', '19', '83550', '30462', '11'), +('8', '72', '19', '70906', '28909', '11'), +('8', '72', '19', '47216', '28765', '11'), +('8', '72', '13', '83639', '50457', '11'), +('8', '72', '13', '47312', '45975', '11'), +('8', '72', '13', '39323', '42183', '11'), +('8', '72', '13', '47314', '40320', '11'), +('8', '72', '14', '83639', '50457', '11'), +('8', '72', '14', '47312', '45975', '11'), +('8', '72', '14', '39323', '42183', '11'), +('8', '72', '14', '47314', '40320', '11'), +('8', '72', '11', '39371', '42337', '11'), +('8', '72', '11', '39311', '37800', '11'), +('8', '72', '11', '83657', '37636', '11'), +('8', '72', '11', '47297', '32321', '11'), +('8', '73', '22', '66397', '0', '11'), +('8', '73', '22', '62787', '0', '11'), +('8', '73', '22', '61948', '0', '11'), +('8', '73', '22', '21805', '0', '11'), +('8', '73', '1', '39276', '37407', '11'), +('8', '73', '1', '83594', '36480', '11'), +('8', '73', '1', '39282', '35668', '11'), +('8', '73', '1', '39343', '30496', '11'), +('8', '73', '2', '83560', '34192', '11'), +('8', '73', '2', '70902', '31695', '11'), +('8', '73', '2', '39222', '25420', '11'), +('8', '73', '2', '83494', '23266', '11'), +('8', '73', '3', '39347', '39216', '11'), +('8', '73', '3', '47245', '38525', '11'), +('8', '73', '3', '71667', '34044', '11'), +('8', '73', '3', '39218', '33944', '11'), +('8', '73', '5', '39349', '39563', '11'), +('8', '73', '5', '39359', '31330', '11'), +('8', '73', '5', '39313', '28619', '11'), +('8', '73', '5', '39262', '28423', '11'), +('8', '73', '8', '39330', '37450', '11'), +('8', '73', '8', '47305', '32736', '11'), +('8', '73', '8', '69165', '32217', '11'), +('8', '73', '8', '69064', '30670', '11'), +('8', '73', '6', '39337', '39158', '11'), +('8', '73', '6', '39327', '35776', '11'), +('8', '73', '6', '83635', '34276', '11'), +('8', '73', '6', '39367', '34135', '11'), +('8', '73', '17', '83603', '49599', '11'), +('8', '73', '17', '70907', '34129', '11'), +('8', '73', '17', '70701', '31774', '11'), +('8', '73', '17', '39935', '26049', '11'), +('8', '73', '7', '47204', '29316', '11'), +('8', '73', '7', '83564', '28440', '11'), +('8', '73', '7', '39267', '28253', '11'), +('8', '73', '7', '69168', '28165', '11'), +('8', '73', '9', '39335', '39294', '11'), +('8', '73', '9', '51706', '30140', '11'), +('8', '73', '9', '83652', '29867', '11'), +('8', '73', '9', '39291', '28788', '11'), +('8', '73', '15', '83458', '34070', '11'), +('8', '73', '15', '39374', '30269', '11'), +('8', '73', '15', '51703', '29675', '11'), +('8', '73', '15', '83661', '29523', '11'), +('8', '73', '20', '39365', '34282', '11'), +('8', '73', '20', '47283', '33495', '11'), +('8', '73', '20', '39339', '31292', '11'), +('8', '73', '20', '71657', '31023', '11'), +('8', '73', '12', '47212', '36610', '11'), +('8', '73', '12', '83568', '34229', '11'), +('8', '73', '12', '70905', '27910', '11'), +('8', '73', '12', '71075', '26548', '11'), +('8', '73', '18', '70908', '32312', '11'), +('8', '73', '18', '83607', '31854', '11'), +('8', '73', '18', '71646', '29177', '11'), +('8', '73', '18', '69146', '24156', '11'), +('8', '73', '19', '39355', '31298', '11'), +('8', '73', '19', '83550', '30464', '11'), +('8', '73', '19', '70906', '28910', '11'), +('8', '73', '19', '47216', '28767', '11'), +('8', '73', '13', '83639', '50642', '11'), +('8', '73', '13', '47312', '46013', '11'), +('8', '73', '13', '39323', '42231', '11'), +('8', '73', '13', '47314', '40368', '11'), +('8', '73', '14', '83639', '50642', '11'), +('8', '73', '14', '47312', '46013', '11'), +('8', '73', '14', '39323', '42231', '11'), +('8', '73', '14', '47314', '40368', '11'), +('8', '73', '11', '39371', '42339', '11'), +('8', '73', '11', '39311', '37802', '11'), +('8', '73', '11', '83657', '37638', '11'), +('8', '73', '11', '47297', '32322', '11'), +('8', '74', '22', '66397', '0', '11'), +('8', '74', '22', '62787', '0', '11'), +('8', '74', '22', '61948', '0', '11'), +('8', '74', '22', '21805', '0', '11'), +('8', '74', '1', '39276', '37408', '11'), +('8', '74', '1', '83594', '36482', '11'), +('8', '74', '1', '39282', '35670', '11'), +('8', '74', '1', '39343', '30498', '11'), +('8', '74', '2', '83560', '34194', '11'), +('8', '74', '2', '70902', '31696', '11'), +('8', '74', '2', '39222', '25421', '11'), +('8', '74', '2', '83494', '23268', '11'), +('8', '74', '3', '39347', '39218', '11'), +('8', '74', '3', '47245', '38525', '11'), +('8', '74', '3', '71667', '34045', '11'), +('8', '74', '3', '39218', '33946', '11'), +('8', '74', '5', '39349', '39564', '11'), +('8', '74', '5', '39359', '31332', '11'), +('8', '74', '5', '39313', '28621', '11'), +('8', '74', '5', '39262', '28424', '11'), +('8', '74', '8', '39330', '37451', '11'), +('8', '74', '8', '47305', '32737', '11'), +('8', '74', '8', '69165', '32218', '11'), +('8', '74', '8', '69064', '30672', '11'), +('8', '74', '6', '39337', '39159', '11'), +('8', '74', '6', '39327', '35777', '11'), +('8', '74', '6', '83635', '34278', '11'), +('8', '74', '6', '39367', '34136', '11'), +('8', '74', '17', '83603', '49601', '11'), +('8', '74', '17', '70907', '34131', '11'), +('8', '74', '17', '70701', '31776', '11'), +('8', '74', '17', '39935', '26050', '11'), +('8', '74', '7', '47204', '29318', '11'), +('8', '74', '7', '83564', '28443', '11'), +('8', '74', '7', '39267', '28255', '11'), +('8', '74', '7', '69168', '28167', '11'), +('8', '74', '9', '39335', '39296', '11'), +('8', '74', '9', '51706', '30142', '11'), +('8', '74', '9', '83652', '29868', '11'), +('8', '74', '9', '39291', '28790', '11'), +('8', '74', '15', '83458', '34072', '11'), +('8', '74', '15', '39374', '30271', '11'), +('8', '74', '15', '51703', '29677', '11'), +('8', '74', '15', '83661', '29525', '11'), +('8', '74', '20', '39365', '34284', '11'), +('8', '74', '20', '47283', '33495', '11'), +('8', '74', '20', '39339', '31293', '11'), +('8', '74', '20', '71657', '31024', '11'), +('8', '74', '12', '47212', '36612', '11'), +('8', '74', '12', '83568', '34232', '11'), +('8', '74', '12', '70905', '27911', '11'), +('8', '74', '12', '71075', '26549', '11'), +('8', '74', '18', '70908', '32314', '11'), +('8', '74', '18', '83607', '31856', '11'), +('8', '74', '18', '71646', '29179', '11'), +('8', '74', '18', '69146', '24157', '11'), +('8', '74', '19', '39355', '31300', '11'), +('8', '74', '19', '83550', '30465', '11'), +('8', '74', '19', '70906', '28911', '11'), +('8', '74', '19', '47216', '28769', '11'), +('8', '74', '13', '83639', '50827', '11'), +('8', '74', '13', '47312', '46051', '11'), +('8', '74', '13', '39323', '42278', '11'), +('8', '74', '13', '47314', '40416', '11'), +('8', '74', '14', '83639', '50827', '11'), +('8', '74', '14', '47312', '46051', '11'), +('8', '74', '14', '39323', '42278', '11'), +('8', '74', '14', '47314', '40416', '11'), +('8', '74', '11', '39371', '42341', '11'), +('8', '74', '11', '39311', '37804', '11'), +('8', '74', '11', '83657', '37640', '11'), +('8', '74', '11', '47297', '32324', '11'), +('8', '75', '22', '61948', '0', '13'), +('8', '75', '22', '66397', '0', '13'), +('8', '75', '22', '62787', '0', '13'), +('8', '75', '22', '21805', '0', '13'), +('8', '75', '1', '80676', '46605', '13'), +('8', '75', '1', '80659', '45626', '13'), +('8', '75', '1', '80648', '43484', '13'), +('8', '75', '1', '80639', '42456', '13'), +('8', '75', '2', '80552', '47770', '13'), +('8', '75', '2', '83560', '34197', '13'), +('8', '75', '2', '53410', '32668', '13'), +('8', '75', '2', '70902', '31697', '13'), +('8', '75', '3', '80637', '43549', '13'), +('8', '75', '3', '39347', '39220', '13'), +('8', '75', '3', '47245', '38526', '13'), +('8', '75', '3', '46924', '37343', '13'), +('8', '75', '5', '46867', '47175', '13'), +('8', '75', '5', '80670', '47062', '13'), +('8', '75', '5', '46918', '46557', '13'), +('8', '75', '5', '80616', '41499', '13'), +('8', '75', '8', '46885', '50715', '13'), +('8', '75', '8', '80677', '47907', '13'), +('8', '75', '8', '80649', '42471', '13'), +('8', '75', '8', '46908', '41530', '13'), +('8', '75', '6', '80638', '52533', '13'), +('8', '75', '6', '46933', '40769', '13'), +('8', '75', '6', '46884', '40580', '13'), +('8', '75', '6', '46883', '40433', '13'), +('8', '75', '17', '83603', '49603', '13'), +('8', '75', '17', '80555', '43360', '13'), +('8', '75', '17', '53415', '34376', '13'), +('8', '75', '17', '70907', '34133', '13'), +('8', '75', '7', '80553', '40573', '13'), +('8', '75', '7', '53411', '32570', '13'), +('8', '75', '7', '47204', '29319', '13'), +('8', '75', '7', '83564', '28445', '13'), +('8', '75', '9', '46887', '41072', '13'), +('8', '75', '9', '39335', '39298', '13'), +('8', '75', '9', '80549', '36492', '13'), +('8', '75', '9', '53412', '32723', '13'), +('8', '75', '15', '79909', '48605', '13'), +('8', '75', '15', '80667', '47785', '13'), +('8', '75', '15', '80686', '46987', '13'), +('8', '75', '15', '80671', '46702', '13'), +('8', '75', '20', '80678', '56927', '13'), +('8', '75', '20', '46935', '41952', '13'), +('8', '75', '20', '80620', '40677', '13'), +('8', '75', '20', '46870', '37428', '13'), +('8', '75', '12', '80550', '44710', '13'), +('8', '75', '12', '53413', '41206', '13'), +('8', '75', '12', '47212', '36614', '13'), +('8', '75', '12', '83568', '34234', '13'), +('8', '75', '18', '80554', '40983', '13'), +('8', '75', '18', '53416', '33692', '13'), +('8', '75', '18', '70908', '32316', '13'), +('8', '75', '18', '83607', '31859', '13'), +('8', '75', '19', '53414', '40651', '13'), +('8', '75', '19', '80551', '38815', '13'), +('8', '75', '19', '39355', '31302', '13'), +('8', '75', '19', '83550', '30467', '13'), +('8', '75', '13', '46856', '60727', '13'), +('8', '75', '13', '46854', '60427', '13'), +('8', '75', '13', '80674', '59143', '13'), +('8', '75', '13', '80652', '56991', '13'), +('8', '75', '14', '46856', '60727', '13'), +('8', '75', '14', '46854', '60427', '13'), +('8', '75', '14', '80674', '59143', '13'), +('8', '75', '14', '80675', '58350', '13'), +('8', '75', '11', '80668', '46672', '13'), +('8', '75', '11', '46850', '44073', '13'), +('8', '75', '11', '46849', '44035', '13'), +('8', '75', '11', '46930', '43725', '13'), +('8', '75', '22', '61948', '0', '12'), +('8', '75', '22', '66397', '0', '12'), +('8', '75', '22', '62787', '0', '12'), +('8', '75', '22', '21805', '0', '12'), +('8', '75', '1', '46931', '40517', '12'), +('8', '75', '1', '46866', '37570', '12'), +('8', '75', '1', '46913', '37498', '12'), +('8', '75', '1', '39276', '37410', '12'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '75', '2', '83560', '34197', '12'), +('8', '75', '2', '53410', '32668', '12'), +('8', '75', '2', '70902', '31697', '12'), +('8', '75', '2', '39222', '25423', '12'), +('8', '75', '3', '39347', '39220', '12'), +('8', '75', '3', '47245', '38526', '12'), +('8', '75', '3', '46924', '37343', '12'), +('8', '75', '3', '46873', '37235', '12'), +('8', '75', '5', '46867', '47175', '12'), +('8', '75', '5', '46918', '46557', '12'), +('8', '75', '5', '46934', '40470', '12'), +('8', '75', '5', '39349', '39566', '12'), +('8', '75', '8', '46885', '50715', '12'), +('8', '75', '8', '46908', '41530', '12'), +('8', '75', '8', '39330', '37453', '12'), +('8', '75', '8', '46848', '34374', '12'), +('8', '75', '6', '46933', '40769', '12'), +('8', '75', '6', '46884', '40580', '12'), +('8', '75', '6', '46883', '40433', '12'), +('8', '75', '6', '39337', '39161', '12'), +('8', '75', '17', '83603', '49603', '12'), +('8', '75', '17', '53415', '34376', '12'), +('8', '75', '17', '70907', '34133', '12'), +('8', '75', '17', '70701', '31779', '12'), +('8', '75', '7', '53411', '32570', '12'), +('8', '75', '7', '47204', '29319', '12'), +('8', '75', '7', '83564', '28445', '12'), +('8', '75', '7', '39267', '28257', '12'), +('8', '75', '9', '46887', '41072', '12'), +('8', '75', '9', '39335', '39298', '12'), +('8', '75', '9', '53412', '32723', '12'), +('8', '75', '9', '51706', '30144', '12'), +('8', '75', '15', '46881', '41295', '12'), +('8', '75', '15', '46863', '38308', '12'), +('8', '75', '15', '46916', '37095', '12'), +('8', '75', '15', '46893', '35488', '12'), +('8', '75', '20', '46935', '41952', '12'), +('8', '75', '20', '46870', '37428', '12'), +('8', '75', '20', '46919', '37220', '12'), +('8', '75', '20', '39365', '34286', '12'), +('8', '75', '12', '53413', '41206', '12'), +('8', '75', '12', '47212', '36614', '12'), +('8', '75', '12', '83568', '34234', '12'), +('8', '75', '12', '70905', '27912', '12'), +('8', '75', '18', '53416', '33692', '12'), +('8', '75', '18', '70908', '32316', '12'), +('8', '75', '18', '83607', '31859', '12'), +('8', '75', '18', '46826', '30487', '12'), +('8', '75', '19', '53414', '40651', '12'), +('8', '75', '19', '39355', '31302', '12'), +('8', '75', '19', '83550', '30467', '12'), +('8', '75', '19', '70906', '28912', '12'), +('8', '75', '13', '46856', '60727', '12'), +('8', '75', '13', '46854', '60427', '12'), +('8', '75', '13', '46940', '53022', '12'), +('8', '75', '13', '46927', '52261', '12'), +('8', '75', '14', '46856', '60727', '12'), +('8', '75', '14', '46854', '60427', '12'), +('8', '75', '14', '46940', '53022', '12'), +('8', '75', '14', '46927', '52261', '12'), +('8', '75', '11', '46850', '44073', '12'), +('8', '75', '11', '46849', '44035', '12'), +('8', '75', '11', '46930', '43725', '12'), +('8', '75', '11', '39371', '42343', '12'), +('8', '76', '22', '61948', '0', '13'), +('8', '76', '22', '66397', '0', '13'), +('8', '76', '22', '62787', '0', '13'), +('8', '76', '22', '21805', '0', '13'), +('8', '76', '1', '80676', '46606', '13'), +('8', '76', '1', '80659', '45628', '13'), +('8', '76', '1', '80648', '43486', '13'), +('8', '76', '1', '80639', '42459', '13'), +('8', '76', '2', '80552', '47772', '13'), +('8', '76', '2', '83560', '34199', '13'), +('8', '76', '2', '53410', '32670', '13'), +('8', '76', '2', '70902', '31698', '13'), +('8', '76', '3', '80637', '43551', '13'), +('8', '76', '3', '39347', '39221', '13'), +('8', '76', '3', '47245', '38526', '13'), +('8', '76', '3', '46924', '37345', '13'), +('8', '76', '5', '46867', '47177', '13'), +('8', '76', '5', '80670', '47065', '13'), +('8', '76', '5', '46918', '46559', '13'), +('8', '76', '5', '80616', '41500', '13'), +('8', '76', '8', '46885', '50717', '13'), +('8', '76', '8', '80677', '47910', '13'), +('8', '76', '8', '80649', '42474', '13'), +('8', '76', '8', '46908', '41532', '13'), +('8', '76', '6', '80638', '52536', '13'), +('8', '76', '6', '46933', '40771', '13'), +('8', '76', '6', '46884', '40582', '13'), +('8', '76', '6', '46883', '40435', '13'), +('8', '76', '17', '83603', '49605', '13'), +('8', '76', '17', '80555', '43363', '13'), +('8', '76', '17', '53415', '34376', '13'), +('8', '76', '17', '70907', '34135', '13'), +('8', '76', '7', '80553', '40575', '13'), +('8', '76', '7', '53411', '32571', '13'), +('8', '76', '7', '47204', '29320', '13'), +('8', '76', '7', '83564', '28447', '13'), +('8', '76', '9', '46887', '41074', '13'), +('8', '76', '9', '39335', '39300', '13'), +('8', '76', '9', '80549', '36494', '13'), +('8', '76', '9', '53412', '32725', '13'), +('8', '76', '15', '79909', '48607', '13'), +('8', '76', '15', '80667', '47787', '13'), +('8', '76', '15', '80686', '46989', '13'), +('8', '76', '15', '80671', '46705', '13'), +('8', '76', '20', '80678', '56929', '13'), +('8', '76', '20', '46935', '41954', '13'), +('8', '76', '20', '80620', '40678', '13'), +('8', '76', '20', '46870', '37429', '13'), +('8', '76', '12', '80550', '44712', '13'), +('8', '76', '12', '53413', '41207', '13'), +('8', '76', '12', '47212', '36615', '13'), +('8', '76', '12', '83568', '34236', '13'), +('8', '76', '18', '80554', '40985', '13'), +('8', '76', '18', '53416', '33693', '13'), +('8', '76', '18', '70908', '32318', '13'), +('8', '76', '18', '83607', '31861', '13'), +('8', '76', '19', '53414', '40653', '13'), +('8', '76', '19', '80551', '38817', '13'), +('8', '76', '19', '39355', '31304', '13'), +('8', '76', '19', '83550', '30469', '13'), +('8', '76', '13', '46856', '60913', '13'), +('8', '76', '13', '46854', '60613', '13'), +('8', '76', '13', '80674', '59144', '13'), +('8', '76', '13', '80652', '56993', '13'), +('8', '76', '14', '46856', '60913', '13'), +('8', '76', '14', '46854', '60613', '13'), +('8', '76', '14', '80674', '59144', '13'), +('8', '76', '14', '80675', '58352', '13'), +('8', '76', '11', '80668', '46674', '13'), +('8', '76', '11', '46850', '44075', '13'), +('8', '76', '11', '46849', '44037', '13'), +('8', '76', '11', '46930', '43727', '13'), +('8', '77', '22', '61948', '0', '13'), +('8', '77', '22', '66397', '0', '13'), +('8', '77', '22', '62787', '0', '13'), +('8', '77', '22', '21805', '0', '13'), +('8', '77', '1', '80676', '46608', '13'), +('8', '77', '1', '80659', '45630', '13'), +('8', '77', '1', '80648', '43488', '13'), +('8', '77', '1', '80639', '42461', '13'), +('8', '77', '2', '80552', '47774', '13'), +('8', '77', '2', '83560', '34201', '13'), +('8', '77', '2', '53410', '32672', '13'), +('8', '77', '2', '70902', '31699', '13'), +('8', '77', '3', '80637', '43553', '13'), +('8', '77', '3', '39347', '39223', '13'), +('8', '77', '3', '47245', '38527', '13'), +('8', '77', '3', '46924', '37347', '13'), +('8', '77', '5', '46867', '47179', '13'), +('8', '77', '5', '80670', '47068', '13'), +('8', '77', '5', '46918', '46561', '13'), +('8', '77', '5', '80616', '41501', '13'), +('8', '77', '8', '46885', '50720', '13'), +('8', '77', '8', '80677', '47913', '13'), +('8', '77', '8', '80649', '42476', '13'), +('8', '77', '8', '46908', '41533', '13'), +('8', '77', '6', '80638', '52538', '13'), +('8', '77', '6', '46933', '40773', '13'), +('8', '77', '6', '46884', '40584', '13'), +('8', '77', '6', '46883', '40438', '13'), +('8', '77', '17', '83603', '49607', '13'), +('8', '77', '17', '80555', '43366', '13'), +('8', '77', '17', '53415', '34377', '13'), +('8', '77', '17', '70907', '34137', '13'), +('8', '77', '7', '80553', '40577', '13'), +('8', '77', '7', '53411', '32572', '13'), +('8', '77', '7', '47204', '29322', '13'), +('8', '77', '7', '83564', '28450', '13'), +('8', '77', '9', '46887', '41076', '13'), +('8', '77', '9', '39335', '39302', '13'), +('8', '77', '9', '80549', '36496', '13'), +('8', '77', '9', '53412', '32727', '13'), +('8', '77', '15', '79909', '48609', '13'), +('8', '77', '15', '80667', '47790', '13'), +('8', '77', '15', '80686', '46992', '13'), +('8', '77', '15', '80671', '46708', '13'), +('8', '77', '20', '80678', '56932', '13'), +('8', '77', '20', '46935', '41956', '13'), +('8', '77', '20', '80620', '40679', '13'), +('8', '77', '20', '46870', '37431', '13'), +('8', '77', '12', '80550', '44714', '13'), +('8', '77', '12', '53413', '41208', '13'), +('8', '77', '12', '47212', '36617', '13'), +('8', '77', '12', '83568', '34239', '13'), +('8', '77', '18', '80554', '40987', '13'), +('8', '77', '18', '53416', '33695', '13'), +('8', '77', '18', '70908', '32320', '13'), +('8', '77', '18', '83607', '31863', '13'), +('8', '77', '19', '53414', '40655', '13'), +('8', '77', '19', '80551', '38819', '13'), +('8', '77', '19', '39355', '31306', '13'), +('8', '77', '19', '83550', '30470', '13'), +('8', '77', '13', '46856', '61098', '13'), +('8', '77', '13', '46854', '60798', '13'), +('8', '77', '13', '80674', '59146', '13'), +('8', '77', '13', '80652', '56994', '13'), +('8', '77', '14', '46856', '61098', '13'), +('8', '77', '14', '46854', '60798', '13'), +('8', '77', '14', '80674', '59146', '13'), +('8', '77', '14', '80675', '58354', '13'), +('8', '77', '11', '80668', '46677', '13'), +('8', '77', '11', '46850', '44077', '13'), +('8', '77', '11', '46849', '44039', '13'), +('8', '77', '11', '46930', '43729', '13'), +('8', '78', '22', '61948', '0', '13'), +('8', '78', '22', '66397', '0', '13'), +('8', '78', '22', '62787', '0', '13'), +('8', '78', '22', '21805', '0', '13'), +('8', '78', '1', '80676', '46609', '13'), +('8', '78', '1', '80659', '45633', '13'), +('8', '78', '1', '80648', '43491', '13'), +('8', '78', '1', '80639', '42463', '13'), +('8', '78', '2', '80552', '47777', '13'), +('8', '78', '2', '83560', '34204', '13'), +('8', '78', '2', '53410', '32674', '13'), +('8', '78', '2', '70902', '31700', '13'), +('8', '78', '3', '80637', '43556', '13'), +('8', '78', '3', '39347', '39225', '13'), +('8', '78', '3', '47245', '38528', '13'), +('8', '78', '3', '46924', '37349', '13'), +('8', '78', '5', '46867', '47181', '13'), +('8', '78', '5', '80670', '47070', '13'), +('8', '78', '5', '46918', '46563', '13'), +('8', '78', '5', '80616', '41503', '13'), +('8', '78', '8', '46885', '50722', '13'), +('8', '78', '8', '80677', '47915', '13'), +('8', '78', '8', '80649', '42478', '13'), +('8', '78', '8', '46908', '41535', '13'), +('8', '78', '6', '80638', '52540', '13'), +('8', '78', '6', '46933', '40775', '13'), +('8', '78', '6', '46884', '40587', '13'), +('8', '78', '6', '46883', '40441', '13'), +('8', '78', '17', '83603', '49609', '13'), +('8', '78', '17', '80555', '43368', '13'), +('8', '78', '17', '53415', '34378', '13'), +('8', '78', '17', '70907', '34139', '13'), +('8', '78', '7', '80553', '40580', '13'), +('8', '78', '7', '53411', '32573', '13'), +('8', '78', '7', '47204', '29323', '13'), +('8', '78', '7', '83564', '28452', '13'), +('8', '78', '9', '46887', '41078', '13'), +('8', '78', '9', '39335', '39304', '13'), +('8', '78', '9', '80549', '36498', '13'), +('8', '78', '9', '53412', '32729', '13'), +('8', '78', '15', '79909', '48611', '13'), +('8', '78', '15', '80667', '47793', '13'), +('8', '78', '15', '80686', '46995', '13'), +('8', '78', '15', '80671', '46710', '13'), +('8', '78', '20', '80678', '56935', '13'), +('8', '78', '20', '46935', '41959', '13'), +('8', '78', '20', '80620', '40680', '13'), +('8', '78', '20', '46870', '37433', '13'), +('8', '78', '12', '80550', '44716', '13'), +('8', '78', '12', '53413', '41208', '13'), +('8', '78', '12', '47212', '36618', '13'), +('8', '78', '12', '83568', '34241', '13'), +('8', '78', '18', '80554', '40990', '13'), +('8', '78', '18', '53416', '33697', '13'), +('8', '78', '18', '70908', '32321', '13'), +('8', '78', '18', '83607', '31865', '13'), +('8', '78', '19', '53414', '40657', '13'), +('8', '78', '19', '80551', '38822', '13'), +('8', '78', '19', '39355', '31308', '13'), +('8', '78', '19', '83550', '30472', '13'), +('8', '78', '13', '46856', '61284', '13'), +('8', '78', '13', '46854', '60984', '13'), +('8', '78', '13', '80674', '59148', '13'), +('8', '78', '13', '80652', '56996', '13'), +('8', '78', '14', '46856', '61284', '13'), +('8', '78', '14', '46854', '60984', '13'), +('8', '78', '14', '80674', '59148', '13'), +('8', '78', '14', '80675', '58355', '13'), +('8', '78', '11', '80668', '46680', '13'), +('8', '78', '11', '46850', '44079', '13'), +('8', '78', '11', '46849', '44041', '13'), +('8', '78', '11', '46930', '43730', '13'), +('8', '79', '22', '61948', '0', '13'), +('8', '79', '22', '66397', '0', '13'), +('8', '79', '22', '62787', '0', '13'), +('8', '79', '22', '21805', '0', '13'), +('8', '79', '1', '80676', '46611', '13'), +('8', '79', '1', '80659', '45635', '13'), +('8', '79', '1', '80648', '43493', '13'), +('8', '79', '1', '80639', '42466', '13'), +('8', '79', '2', '80552', '47779', '13'), +('8', '79', '2', '83560', '34206', '13'), +('8', '79', '2', '53410', '32676', '13'), +('8', '79', '2', '70902', '31701', '13'), +('8', '79', '3', '80637', '43558', '13'), +('8', '79', '3', '39347', '39227', '13'), +('8', '79', '3', '47245', '38528', '13'), +('8', '79', '3', '46924', '37351', '13'), +('8', '79', '5', '46867', '47183', '13'), +('8', '79', '5', '80670', '47073', '13'), +('8', '79', '5', '46918', '46565', '13'), +('8', '79', '5', '80616', '41504', '13'), +('8', '79', '8', '46885', '50725', '13'), +('8', '79', '8', '80677', '47918', '13'), +('8', '79', '8', '80649', '42481', '13'), +('8', '79', '8', '46908', '41537', '13'), +('8', '79', '6', '80638', '52543', '13'), +('8', '79', '6', '46933', '40777', '13'), +('8', '79', '6', '46884', '40589', '13'), +('8', '79', '6', '46883', '40443', '13'), +('8', '79', '17', '83603', '49611', '13'), +('8', '79', '17', '80555', '43371', '13'), +('8', '79', '17', '53415', '34379', '13'), +('8', '79', '17', '70907', '34141', '13'), +('8', '79', '7', '80553', '40582', '13'), +('8', '79', '7', '53411', '32574', '13'), +('8', '79', '7', '47204', '29324', '13'), +('8', '79', '7', '83564', '28455', '13'), +('8', '79', '9', '46887', '41081', '13'), +('8', '79', '9', '39335', '39306', '13'), +('8', '79', '9', '80549', '36501', '13'), +('8', '79', '9', '53412', '32731', '13'), +('8', '79', '15', '79909', '48613', '13'), +('8', '79', '15', '80667', '47795', '13'), +('8', '79', '15', '80686', '46997', '13'), +('8', '79', '15', '80671', '46713', '13'), +('8', '79', '20', '80678', '56937', '13'), +('8', '79', '20', '46935', '41961', '13'), +('8', '79', '20', '80620', '40681', '13'), +('8', '79', '20', '46870', '37435', '13'), +('8', '79', '12', '80550', '44718', '13'), +('8', '79', '12', '53413', '41209', '13'), +('8', '79', '12', '47212', '36620', '13'), +('8', '79', '12', '83568', '34244', '13'), +('8', '79', '18', '80554', '40992', '13'), +('8', '79', '18', '53416', '33699', '13'), +('8', '79', '18', '70908', '32323', '13'), +('8', '79', '18', '83607', '31867', '13'), +('8', '79', '19', '53414', '40659', '13'), +('8', '79', '19', '80551', '38824', '13'), +('8', '79', '19', '39355', '31310', '13'), +('8', '79', '19', '83550', '30473', '13'), +('8', '79', '13', '46856', '61470', '13'), +('8', '79', '13', '46854', '61170', '13'), +('8', '79', '13', '80674', '59150', '13'), +('8', '79', '13', '80652', '56998', '13'), +('8', '79', '14', '46856', '61470', '13'), +('8', '79', '14', '46854', '61170', '13'), +('8', '79', '14', '80674', '59150', '13'), +('8', '79', '14', '80675', '58357', '13'), +('8', '79', '11', '80668', '46682', '13'), +('8', '79', '11', '46850', '44081', '13'), +('8', '79', '11', '46849', '44043', '13'), +('8', '79', '11', '46930', '43732', '13'), +('8', '80', '22', '61948', '0', '14'), +('8', '80', '22', '66397', '0', '14'), +('8', '80', '22', '62787', '0', '14'), +('8', '80', '22', '21805', '0', '14'), +('8', '80', '1', '102641', '62121', '14'), +('8', '80', '1', '102597', '62027', '14'), +('8', '80', '1', '102618', '61952', '14'), +('8', '80', '1', '102639', '61890', '14'), +('8', '80', '2', '102192', '77396', '14'), +('8', '80', '2', '102080', '68287', '14'), +('8', '80', '2', '80552', '47781', '14'), +('8', '80', '2', '102003', '42396', '14'), +('8', '80', '3', '102726', '66995', '14'), +('8', '80', '3', '102619', '65757', '14'), +('8', '80', '3', '102598', '65614', '14'), +('8', '80', '3', '102725', '57929', '14'), +('8', '80', '5', '102620', '64727', '14'), +('8', '80', '5', '102599', '64706', '14'), +('8', '80', '5', '102745', '59025', '14'), +('8', '80', '5', '102551', '56611', '14'), +('8', '80', '8', '102601', '74867', '14'), +('8', '80', '8', '102552', '66544', '14'), +('8', '80', '8', '102622', '65602', '14'), +('8', '80', '8', '102527', '51405', '14'), +('8', '80', '6', '102621', '65879', '14'), +('8', '80', '6', '102600', '65666', '14'), +('8', '80', '6', '102558', '57441', '14'), +('8', '80', '6', '80638', '52545', '14'), +('8', '80', '17', '102195', '71069', '14'), +('8', '80', '17', '102083', '62297', '14'), +('8', '80', '17', '83603', '49614', '14'), +('8', '80', '17', '102006', '45263', '14'), +('8', '80', '7', '102193', '78466', '14'), +('8', '80', '7', '102081', '59329', '14'), +('8', '80', '7', '102004', '52721', '14'), +('8', '80', '7', '80553', '40585', '14'), +('8', '80', '9', '67098', '105903', '14'), +('8', '80', '9', '102189', '62670', '14'), +('8', '80', '9', '102077', '54857', '14'), +('8', '80', '9', '46887', '41083', '14'), +('8', '80', '15', '102602', '62849', '14'), +('8', '80', '15', '102623', '62694', '14'), +('8', '80', '15', '102637', '62583', '14'), +('8', '80', '15', '102636', '62567', '14'), +('8', '80', '20', '102624', '75020', '14'), +('8', '80', '20', '102603', '74874', '14'), +('8', '80', '20', '102553', '66265', '14'), +('8', '80', '20', '80678', '56940', '14'), +('8', '80', '12', '102078', '66663', '14'), +('8', '80', '12', '102190', '64657', '14'), +('8', '80', '12', '80550', '44720', '14'), +('8', '80', '12', '53413', '41210', '14'), +('8', '80', '18', '102194', '79285', '14'), +('8', '80', '18', '102082', '60107', '14'), +('8', '80', '18', '102005', '43823', '14'), +('8', '80', '18', '80554', '40995', '14'), +('8', '80', '19', '102191', '64839', '14'), +('8', '80', '19', '102079', '56646', '14'), +('8', '80', '19', '76131', '43552', '14'), +('8', '80', '19', '53414', '40661', '14'), +('8', '80', '13', '102720', '86656', '14'), +('8', '80', '13', '102649', '82545', '14'), +('8', '80', '13', '102719', '82110', '14'), +('8', '80', '13', '102660', '82104', '14'), +('8', '80', '14', '102720', '86656', '14'), +('8', '80', '14', '102649', '82545', '14'), +('8', '80', '14', '102661', '82155', '14'), +('8', '80', '14', '102719', '82110', '14'), +('8', '80', '11', '102643', '63521', '14'), +('8', '80', '11', '102747', '58151', '14'), +('8', '80', '11', '80668', '46685', '14'), +('8', '80', '11', '46850', '44082', '14'), +('8', '81', '22', '61948', '0', '14'), +('8', '81', '22', '66397', '0', '14'), +('8', '81', '22', '62787', '0', '14'), +('8', '81', '22', '21805', '0', '14'), +('8', '81', '1', '102641', '62124', '14'), +('8', '81', '1', '102597', '62029', '14'), +('8', '81', '1', '102618', '61954', '14'), +('8', '81', '1', '102639', '61893', '14'), +('8', '81', '2', '102192', '77398', '14'), +('8', '81', '2', '102080', '68288', '14'), +('8', '81', '2', '80552', '47784', '14'), +('8', '81', '2', '102003', '42397', '14'), +('8', '81', '3', '102726', '66997', '14'), +('8', '81', '3', '102619', '65760', '14'), +('8', '81', '3', '102598', '65617', '14'), +('8', '81', '3', '102725', '57931', '14'), +('8', '81', '5', '102620', '64728', '14'), +('8', '81', '5', '102599', '64707', '14'), +('8', '81', '5', '102745', '59027', '14'), +('8', '81', '5', '102551', '56612', '14'), +('8', '81', '8', '102601', '74868', '14'), +('8', '81', '8', '102552', '66547', '14'), +('8', '81', '8', '102622', '65604', '14'), +('8', '81', '8', '102527', '51407', '14'), +('8', '81', '6', '102621', '65882', '14'), +('8', '81', '6', '102600', '65669', '14'), +('8', '81', '6', '102558', '57443', '14'), +('8', '81', '6', '80638', '52547', '14'), +('8', '81', '17', '102195', '71071', '14'), +('8', '81', '17', '102083', '62299', '14'), +('8', '81', '17', '83603', '49616', '14'), +('8', '81', '17', '102006', '45265', '14'), +('8', '81', '7', '102193', '78467', '14'), +('8', '81', '7', '102081', '59331', '14'), +('8', '81', '7', '102004', '52724', '14'), +('8', '81', '7', '80553', '40587', '14'), +('8', '81', '9', '67098', '107228', '14'), +('8', '81', '9', '102189', '62672', '14'), +('8', '81', '9', '102077', '54858', '14'), +('8', '81', '9', '46887', '41085', '14'), +('8', '81', '15', '102602', '62851', '14'), +('8', '81', '15', '102623', '62695', '14'), +('8', '81', '15', '102637', '62586', '14'), +('8', '81', '15', '102636', '62569', '14'), +('8', '81', '20', '102624', '75022', '14'), +('8', '81', '20', '102603', '74877', '14'), +('8', '81', '20', '102553', '66267', '14'), +('8', '81', '20', '80678', '56942', '14'), +('8', '81', '12', '102078', '66665', '14'), +('8', '81', '12', '102190', '64659', '14'), +('8', '81', '12', '80550', '44722', '14'), +('8', '81', '12', '53413', '41211', '14'), +('8', '81', '18', '102194', '79286', '14'), +('8', '81', '18', '102082', '60108', '14'), +('8', '81', '18', '102005', '43826', '14'), +('8', '81', '18', '80554', '40997', '14'), +('8', '81', '19', '102191', '64841', '14'), +('8', '81', '19', '102079', '56646', '14'), +('8', '81', '19', '76131', '43552', '14'), +('8', '81', '19', '53414', '40663', '14'), +('8', '81', '13', '102720', '86689', '14'), +('8', '81', '13', '102649', '82584', '14'), +('8', '81', '13', '102660', '82142', '14'), +('8', '81', '13', '102719', '82142', '14'), +('8', '81', '14', '102720', '86689', '14'), +('8', '81', '14', '102649', '82584', '14'), +('8', '81', '14', '102661', '82193', '14'), +('8', '81', '14', '102660', '82142', '14'), +('8', '81', '11', '102643', '63523', '14'), +('8', '81', '11', '102747', '58153', '14'), +('8', '81', '11', '80668', '46687', '14'), +('8', '81', '11', '46850', '44084', '14'), +('8', '82', '22', '61948', '0', '14'), +('8', '82', '22', '66397', '0', '14'), +('8', '82', '22', '62787', '0', '14'), +('8', '82', '22', '21805', '0', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '82', '1', '102641', '62126', '14'), +('8', '82', '1', '102597', '62032', '14'), +('8', '82', '1', '102618', '61956', '14'), +('8', '82', '1', '102639', '61896', '14'), +('8', '82', '2', '102192', '77400', '14'), +('8', '82', '2', '102080', '68290', '14'), +('8', '82', '2', '80552', '47786', '14'), +('8', '82', '2', '102003', '42398', '14'), +('8', '82', '3', '102726', '67000', '14'), +('8', '82', '3', '102619', '65762', '14'), +('8', '82', '3', '102598', '65620', '14'), +('8', '82', '3', '102725', '57932', '14'), +('8', '82', '5', '102620', '64729', '14'), +('8', '82', '5', '102599', '64709', '14'), +('8', '82', '5', '102745', '59029', '14'), +('8', '82', '5', '102551', '56614', '14'), +('8', '82', '8', '102601', '74869', '14'), +('8', '82', '8', '102552', '66550', '14'), +('8', '82', '8', '102622', '65607', '14'), +('8', '82', '8', '102527', '51409', '14'), +('8', '82', '6', '102621', '65884', '14'), +('8', '82', '6', '102600', '65672', '14'), +('8', '82', '6', '102558', '57446', '14'), +('8', '82', '6', '80638', '52550', '14'), +('8', '82', '17', '102195', '71072', '14'), +('8', '82', '17', '102083', '62301', '14'), +('8', '82', '17', '83603', '49618', '14'), +('8', '82', '17', '102006', '45267', '14'), +('8', '82', '7', '102193', '78469', '14'), +('8', '82', '7', '102081', '59333', '14'), +('8', '82', '7', '102004', '52726', '14'), +('8', '82', '7', '80553', '40590', '14'), +('8', '82', '9', '67098', '108553', '14'), +('8', '82', '9', '102189', '62673', '14'), +('8', '82', '9', '102077', '54860', '14'), +('8', '82', '9', '46887', '41088', '14'), +('8', '82', '15', '102602', '62852', '14'), +('8', '82', '15', '102623', '62697', '14'), +('8', '82', '15', '102637', '62589', '14'), +('8', '82', '15', '102636', '62571', '14'), +('8', '82', '20', '102624', '75026', '14'), +('8', '82', '20', '102603', '74880', '14'), +('8', '82', '20', '102553', '66270', '14'), +('8', '82', '20', '80678', '56945', '14'), +('8', '82', '12', '102078', '66667', '14'), +('8', '82', '12', '102190', '64660', '14'), +('8', '82', '12', '80550', '44725', '14'), +('8', '82', '12', '53413', '41212', '14'), +('8', '82', '18', '102194', '79288', '14'), +('8', '82', '18', '102082', '60110', '14'), +('8', '82', '18', '102005', '43828', '14'), +('8', '82', '18', '80554', '41000', '14'), +('8', '82', '19', '102191', '64843', '14'), +('8', '82', '19', '102079', '56647', '14'), +('8', '82', '19', '76131', '43553', '14'), +('8', '82', '19', '53414', '40665', '14'), +('8', '82', '13', '102720', '86722', '14'), +('8', '82', '13', '102649', '82623', '14'), +('8', '82', '13', '102660', '82180', '14'), +('8', '82', '13', '102719', '82175', '14'), +('8', '82', '14', '102720', '86722', '14'), +('8', '82', '14', '102649', '82623', '14'), +('8', '82', '14', '102661', '82231', '14'), +('8', '82', '14', '102660', '82180', '14'), +('8', '82', '11', '102643', '63524', '14'), +('8', '82', '11', '102747', '58155', '14'), +('8', '82', '11', '80668', '46690', '14'), +('8', '82', '11', '46850', '44086', '14'), +('8', '83', '22', '61948', '0', '14'), +('8', '83', '22', '66397', '0', '14'), +('8', '83', '22', '62787', '0', '14'), +('8', '83', '22', '21805', '0', '14'), +('8', '83', '1', '102641', '62129', '14'), +('8', '83', '1', '102597', '62034', '14'), +('8', '83', '1', '102618', '61958', '14'), +('8', '83', '1', '102639', '61898', '14'), +('8', '83', '2', '102192', '77402', '14'), +('8', '83', '2', '102080', '68291', '14'), +('8', '83', '2', '80552', '47788', '14'), +('8', '83', '2', '102003', '42399', '14'), +('8', '83', '3', '102726', '67002', '14'), +('8', '83', '3', '102619', '65765', '14'), +('8', '83', '3', '102598', '65622', '14'), +('8', '83', '3', '102725', '57934', '14'), +('8', '83', '5', '102620', '64731', '14'), +('8', '83', '5', '102599', '64711', '14'), +('8', '83', '5', '102745', '59031', '14'), +('8', '83', '5', '102551', '56616', '14'), +('8', '83', '8', '102601', '74870', '14'), +('8', '83', '8', '102552', '66553', '14'), +('8', '83', '8', '102622', '65609', '14'), +('8', '83', '8', '102527', '51411', '14'), +('8', '83', '6', '102621', '65887', '14'), +('8', '83', '6', '102600', '65674', '14'), +('8', '83', '6', '102558', '57448', '14'), +('8', '83', '6', '80638', '52552', '14'), +('8', '83', '17', '102195', '71074', '14'), +('8', '83', '17', '102083', '62303', '14'), +('8', '83', '17', '83603', '49620', '14'), +('8', '83', '17', '102006', '45270', '14'), +('8', '83', '7', '102193', '78471', '14'), +('8', '83', '7', '102081', '59335', '14'), +('8', '83', '7', '102004', '52729', '14'), +('8', '83', '7', '80553', '40592', '14'), +('8', '83', '9', '67098', '109879', '14'), +('8', '83', '9', '102189', '62675', '14'), +('8', '83', '9', '102077', '54861', '14'), +('8', '83', '9', '46887', '41090', '14'), +('8', '83', '15', '102602', '62854', '14'), +('8', '83', '15', '102623', '62699', '14'), +('8', '83', '15', '102637', '62592', '14'), +('8', '83', '15', '102636', '62572', '14'), +('8', '83', '20', '102624', '75028', '14'), +('8', '83', '20', '102603', '74883', '14'), +('8', '83', '20', '102553', '66273', '14'), +('8', '83', '20', '80678', '56948', '14'), +('8', '83', '12', '102078', '66669', '14'), +('8', '83', '12', '102190', '64661', '14'), +('8', '83', '12', '80550', '44727', '14'), +('8', '83', '12', '53413', '41212', '14'), +('8', '83', '18', '102194', '79289', '14'), +('8', '83', '18', '102082', '60111', '14'), +('8', '83', '18', '102005', '43830', '14'), +('8', '83', '18', '80554', '41002', '14'), +('8', '83', '19', '102191', '64845', '14'), +('8', '83', '19', '102079', '56648', '14'), +('8', '83', '19', '76131', '43553', '14'), +('8', '83', '19', '53414', '40667', '14'), +('8', '83', '13', '102720', '86755', '14'), +('8', '83', '13', '102649', '82662', '14'), +('8', '83', '13', '102660', '82217', '14'), +('8', '83', '13', '102719', '82208', '14'), +('8', '83', '14', '102720', '86755', '14'), +('8', '83', '14', '102649', '82662', '14'), +('8', '83', '14', '102661', '82268', '14'), +('8', '83', '14', '102660', '82217', '14'), +('8', '83', '11', '102643', '63526', '14'), +('8', '83', '11', '102747', '58156', '14'), +('8', '83', '11', '80668', '46693', '14'), +('8', '83', '11', '46850', '44088', '14'), +('8', '84', '22', '61948', '0', '14'), +('8', '84', '22', '66397', '0', '14'), +('8', '84', '22', '62787', '0', '14'), +('8', '84', '22', '21805', '0', '14'), +('8', '84', '1', '102641', '62132', '14'), +('8', '84', '1', '102597', '62037', '14'), +('8', '84', '1', '102618', '61960', '14'), +('8', '84', '1', '102639', '61901', '14'), +('8', '84', '2', '102192', '77404', '14'), +('8', '84', '2', '102080', '68292', '14'), +('8', '84', '2', '80552', '47791', '14'), +('8', '84', '2', '102003', '42400', '14'), +('8', '84', '3', '102726', '67004', '14'), +('8', '84', '3', '102619', '65767', '14'), +('8', '84', '3', '102598', '65625', '14'), +('8', '84', '3', '102725', '57936', '14'), +('8', '84', '5', '102620', '64732', '14'), +('8', '84', '5', '102599', '64712', '14'), +('8', '84', '5', '102745', '59033', '14'), +('8', '84', '5', '102551', '56617', '14'), +('8', '84', '8', '102601', '74871', '14'), +('8', '84', '8', '102552', '66556', '14'), +('8', '84', '8', '102622', '65611', '14'), +('8', '84', '8', '102527', '51413', '14'), +('8', '84', '6', '102621', '65889', '14'), +('8', '84', '6', '102600', '65677', '14'), +('8', '84', '6', '102558', '57450', '14'), +('8', '84', '6', '80638', '52554', '14'), +('8', '84', '17', '102195', '71076', '14'), +('8', '84', '17', '102083', '62305', '14'), +('8', '84', '17', '83603', '49622', '14'), +('8', '84', '17', '102006', '45272', '14'), +('8', '84', '7', '102193', '78472', '14'), +('8', '84', '7', '102081', '59337', '14'), +('8', '84', '7', '102004', '52731', '14'), +('8', '84', '7', '80553', '40595', '14'), +('8', '84', '9', '67098', '111204', '14'), +('8', '84', '9', '102189', '62676', '14'), +('8', '84', '9', '102077', '54863', '14'), +('8', '84', '9', '46887', '41092', '14'), +('8', '84', '15', '102602', '62856', '14'), +('8', '84', '15', '102623', '62701', '14'), +('8', '84', '15', '102637', '62595', '14'), +('8', '84', '15', '102636', '62574', '14'), +('8', '84', '20', '102624', '75031', '14'), +('8', '84', '20', '102603', '74886', '14'), +('8', '84', '20', '102553', '66275', '14'), +('8', '84', '20', '80678', '56950', '14'), +('8', '84', '12', '102078', '66670', '14'), +('8', '84', '12', '102190', '64662', '14'), +('8', '84', '12', '80550', '44729', '14'), +('8', '84', '12', '53413', '41213', '14'), +('8', '84', '18', '102194', '79291', '14'), +('8', '84', '18', '102082', '60113', '14'), +('8', '84', '18', '102005', '43833', '14'), +('8', '84', '18', '80554', '41005', '14'), +('8', '84', '19', '102191', '64847', '14'), +('8', '84', '19', '102079', '56649', '14'), +('8', '84', '19', '76131', '43554', '14'), +('8', '84', '19', '53414', '40669', '14'), +('8', '84', '13', '102720', '86788', '14'), +('8', '84', '13', '102649', '82700', '14'), +('8', '84', '13', '102660', '82255', '14'), +('8', '84', '13', '102719', '82240', '14'), +('8', '84', '14', '102720', '86788', '14'), +('8', '84', '14', '102649', '82700', '14'), +('8', '84', '14', '102661', '82306', '14'), +('8', '84', '14', '102660', '82255', '14'), +('8', '84', '11', '102643', '63527', '14'), +('8', '84', '11', '102747', '58158', '14'), +('8', '84', '11', '80668', '46695', '14'), +('8', '84', '11', '46850', '44090', '14'), +('8', '85', '22', '21805', '0', '16'), +('8', '85', '22', '61948', '0', '16'), +('8', '85', '22', '66397', '0', '16'), +('8', '85', '22', '21807', '0', '16'), +('8', '85', '1', '111309', '117779', '16'), +('8', '85', '1', '111300', '117395', '16'), +('8', '85', '1', '111307', '117283', '16'), +('8', '85', '1', '111303', '117230', '16'), +('8', '85', '2', '111732', '128445', '16'), +('8', '85', '2', '111432', '117315', '16'), +('8', '85', '2', '111132', '103065', '16'), +('8', '85', '2', '104704', '94201', '16'), +('8', '85', '3', '111315', '117645', '16'), +('8', '85', '3', '111313', '117564', '16'), +('8', '85', '3', '111312', '117311', '16'), +('8', '85', '3', '111316', '116803', '16'), +('8', '85', '5', '111318', '117254', '16'), +('8', '85', '5', '111319', '117002', '16'), +('8', '85', '5', '111320', '116960', '16'), +('8', '85', '5', '111017', '103192', '16'), +('8', '85', '8', '111331', '117810', '16'), +('8', '85', '8', '111328', '117470', '16'), +('8', '85', '8', '111332', '117328', '16'), +('8', '85', '8', '111330', '117172', '16'), +('8', '85', '6', '111324', '117470', '16'), +('8', '85', '6', '111322', '117312', '16'), +('8', '85', '6', '111326', '116856', '16'), +('8', '85', '6', '111023', '103355', '16'), +('8', '85', '17', '111735', '134489', '16'), +('8', '85', '17', '111435', '123499', '16'), +('8', '85', '17', '111135', '109552', '16'), +('8', '85', '17', '105379', '95001', '16'), +('8', '85', '7', '111733', '128497', '16'), +('8', '85', '7', '111433', '117157', '16'), +('8', '85', '7', '111133', '102959', '16'), +('8', '85', '7', '104929', '93993', '16'), +('8', '85', '9', '111729', '124234', '16'), +('8', '85', '9', '111429', '113399', '16'), +('8', '85', '9', '67098', '112530', '16'), +('8', '85', '9', '111129', '99326', '16'), +('8', '85', '15', '111348', '117809', '16'), +('8', '85', '15', '111343', '117556', '16'), +('8', '85', '15', '111345', '117301', '16'), +('8', '85', '15', '111341', '117270', '16'), +('8', '85', '20', '111354', '127088', '16'), +('8', '85', '20', '111355', '126568', '16'), +('8', '85', '20', '111351', '126228', '16'), +('8', '85', '20', '111352', '126069', '16'), +('8', '85', '12', '111730', '126230', '16'), +('8', '85', '12', '111430', '115222', '16'), +('8', '85', '12', '111130', '100885', '16'), +('8', '85', '12', '104814', '92999', '16'), +('8', '85', '18', '111734', '130744', '16'), +('8', '85', '18', '111434', '119439', '16'), +('8', '85', '18', '111134', '105381', '16'), +('8', '85', '18', '105378', '91396', '16'), +('8', '85', '19', '111731', '127340', '16'), +('8', '85', '19', '111431', '116267', '16'), +('8', '85', '19', '111131', '102185', '16'), +('8', '85', '19', '105263', '88180', '16'), +('8', '85', '13', '111871', '154250', '16'), +('8', '85', '13', '111815', '152257', '16'), +('8', '85', '13', '111512', '144726', '16'), +('8', '85', '13', '111515', '144697', '16'), +('8', '85', '14', '111871', '154250', '16'), +('8', '85', '14', '111815', '152257', '16'), +('8', '85', '14', '111512', '144726', '16'), +('8', '85', '14', '111515', '144697', '16'), +('8', '85', '11', '111336', '117497', '16'), +('8', '85', '11', '111338', '117441', '16'), +('8', '85', '11', '111333', '117177', '16'), +('8', '85', '11', '111337', '116965', '16'), +('8', '85', '22', '21805', '0', '15'), +('8', '85', '22', '61948', '0', '15'), +('8', '85', '22', '66397', '0', '15'), +('8', '85', '22', '21807', '0', '15'), +('8', '85', '1', '107054', '87378', '15'), +('8', '85', '1', '107053', '86970', '15'), +('8', '85', '1', '107019', '86353', '15'), +('8', '85', '1', '107052', '86267', '15'), +('8', '85', '2', '104704', '94201', '15'), +('8', '85', '2', '104816', '94116', '15'), +('8', '85', '2', '104928', '94001', '15'), +('8', '85', '2', '105040', '89246', '15'), +('8', '85', '3', '107020', '88654', '15'), +('8', '85', '3', '107055', '88359', '15'), +('8', '85', '3', '107002', '87384', '15'), +('8', '85', '3', '106841', '82654', '15'), +('8', '85', '5', '107021', '87703', '15'), +('8', '85', '5', '107056', '87570', '15'), +('8', '85', '5', '107003', '87052', '15'), +('8', '85', '5', '106811', '81667', '15'), +('8', '85', '8', '107023', '89667', '15'), +('8', '85', '8', '107058', '89132', '15'), +('8', '85', '8', '107005', '88356', '15'), +('8', '85', '8', '94070', '83924', '15'), +('8', '85', '6', '106812', '91933', '15'), +('8', '85', '6', '106843', '91302', '15'), +('8', '85', '6', '107022', '88384', '15'), +('8', '85', '6', '107057', '88312', '15'), +('8', '85', '17', '105379', '95001', '15'), +('8', '85', '17', '105043', '94901', '15'), +('8', '85', '17', '105155', '94816', '15'), +('8', '85', '17', '105267', '94491', '15'), +('8', '85', '7', '104929', '93993', '15'), +('8', '85', '7', '104705', '93843', '15'), +('8', '85', '7', '104817', '93473', '15'), +('8', '85', '7', '105377', '88628', '15'), +('8', '85', '9', '67098', '112530', '15'), +('8', '85', '9', '105373', '85228', '15'), +('8', '85', '9', '105149', '85168', '15'), +('8', '85', '9', '105261', '85118', '15'), +('8', '85', '15', '107025', '88593', '15'), +('8', '85', '15', '107062', '87176', '15'), +('8', '85', '15', '107007', '87004', '15'), +('8', '85', '15', '107051', '86736', '15'), +('8', '85', '20', '107059', '98481', '15'), +('8', '85', '20', '107026', '98260', '15'), +('8', '85', '20', '107008', '97263', '15'), +('8', '85', '20', '106845', '92557', '15'), +('8', '85', '12', '104814', '92999', '15'), +('8', '85', '12', '104702', '92909', '15'), +('8', '85', '12', '104926', '92859', '15'), +('8', '85', '12', '105374', '87042', '15'), +('8', '85', '18', '105378', '91396', '15'), +('8', '85', '18', '105042', '91396', '15'), +('8', '85', '18', '105154', '91361', '15'), +('8', '85', '18', '105266', '91336', '15'), +('8', '85', '19', '105263', '88180', '15'), +('8', '85', '19', '105039', '88090', '15'), +('8', '85', '19', '105151', '87855', '15'), +('8', '85', '19', '105375', '87690', '15'), +('8', '85', '13', '106854', '109510', '15'), +('8', '85', '13', '106853', '108431', '15'), +('8', '85', '13', '106858', '108171', '15'), +('8', '85', '13', '106859', '104314', '15'), +('8', '85', '14', '106854', '109510', '15'), +('8', '85', '14', '106853', '108431', '15'), +('8', '85', '14', '106858', '108171', '15'), +('8', '85', '14', '106859', '104314', '15'), +('8', '85', '11', '107024', '89276', '15'), +('8', '85', '11', '107006', '87674', '15'), +('8', '85', '11', '106814', '82965', '15'), +('8', '85', '11', '62965', '74553', '15'), +('8', '86', '22', '21805', '0', '16'), +('8', '86', '22', '61948', '0', '16'), +('8', '86', '22', '66397', '0', '16'), +('8', '86', '22', '21807', '0', '16'), +('8', '86', '1', '111309', '117781', '16'), +('8', '86', '1', '111300', '117397', '16'), +('8', '86', '1', '111307', '117286', '16'), +('8', '86', '1', '111303', '117232', '16'), +('8', '86', '2', '111732', '128447', '16'), +('8', '86', '2', '111432', '117317', '16'), +('8', '86', '2', '111132', '103067', '16'), +('8', '86', '2', '104704', '94204', '16'), +('8', '86', '3', '111315', '117648', '16'), +('8', '86', '3', '111313', '117566', '16'), +('8', '86', '3', '111312', '117314', '16'), +('8', '86', '3', '111316', '116806', '16'), +('8', '86', '5', '111318', '117257', '16'), +('8', '86', '5', '111319', '117004', '16'), +('8', '86', '5', '111320', '116962', '16'), +('8', '86', '5', '111017', '103194', '16'), +('8', '86', '8', '111331', '117813', '16'), +('8', '86', '8', '111328', '117473', '16'), +('8', '86', '8', '111332', '117330', '16'), +('8', '86', '8', '111330', '117174', '16'), +('8', '86', '6', '111324', '117473', '16'), +('8', '86', '6', '111322', '117314', '16'), +('8', '86', '6', '111326', '116858', '16'), +('8', '86', '6', '111023', '103358', '16'), +('8', '86', '17', '111735', '134491', '16'), +('8', '86', '17', '111435', '123501', '16'), +('8', '86', '17', '111135', '109554', '16'), +('8', '86', '17', '105379', '95003', '16'), +('8', '86', '7', '111733', '128499', '16'), +('8', '86', '7', '111433', '117159', '16'), +('8', '86', '7', '111133', '102961', '16'), +('8', '86', '7', '104929', '93995', '16'), +('8', '86', '9', '111729', '124235', '16'), +('8', '86', '9', '67098', '113856', '16'), +('8', '86', '9', '111429', '113400', '16'), +('8', '86', '9', '111129', '99328', '16'), +('8', '86', '15', '111348', '117812', '16'), +('8', '86', '15', '111343', '117558', '16'), +('8', '86', '15', '111345', '117303', '16'), +('8', '86', '15', '111341', '117273', '16'), +('8', '86', '20', '111354', '127090', '16'), +('8', '86', '20', '111355', '126570', '16'), +('8', '86', '20', '111351', '126230', '16'), +('8', '86', '20', '111352', '126071', '16'), +('8', '86', '12', '111730', '126231', '16'), +('8', '86', '12', '111430', '115224', '16'), +('8', '86', '12', '111130', '100886', '16'), +('8', '86', '12', '104814', '93001', '16'), +('8', '86', '18', '111734', '130745', '16'), +('8', '86', '18', '111434', '119440', '16'), +('8', '86', '18', '111134', '105382', '16'), +('8', '86', '18', '105378', '91397', '16'), +('8', '86', '19', '111731', '127341', '16'), +('8', '86', '19', '111431', '116269', '16'), +('8', '86', '19', '111131', '102186', '16'), +('8', '86', '19', '105263', '88181', '16'), +('8', '86', '13', '111871', '154319', '16'), +('8', '86', '13', '111815', '152326', '16'), +('8', '86', '13', '111512', '144794', '16'), +('8', '86', '13', '111515', '144766', '16'), +('8', '86', '14', '111871', '154319', '16'), +('8', '86', '14', '111815', '152326', '16'), +('8', '86', '14', '111512', '144794', '16'), +('8', '86', '14', '111515', '144766', '16'), +('8', '86', '11', '111336', '117499', '16'), +('8', '86', '11', '111338', '117443', '16'), +('8', '86', '11', '111333', '117179', '16'), +('8', '86', '11', '111337', '116967', '16'), +('8', '87', '22', '21805', '0', '16'), +('8', '87', '22', '61948', '0', '16'), +('8', '87', '22', '66397', '0', '16'), +('8', '87', '22', '21807', '0', '16'), +('8', '87', '1', '111309', '117784', '16'), +('8', '87', '1', '111300', '117399', '16'), +('8', '87', '1', '111307', '117289', '16'), +('8', '87', '1', '111303', '117234', '16'), +('8', '87', '2', '111732', '128449', '16'), +('8', '87', '2', '111432', '117319', '16'), +('8', '87', '2', '111132', '103069', '16'), +('8', '87', '2', '104704', '94206', '16'), +('8', '87', '3', '111315', '117650', '16'), +('8', '87', '3', '111313', '117568', '16'), +('8', '87', '3', '111312', '117316', '16'), +('8', '87', '3', '111316', '116808', '16'), +('8', '87', '5', '111318', '117259', '16'), +('8', '87', '5', '111319', '117007', '16'), +('8', '87', '5', '111320', '116964', '16'), +('8', '87', '5', '111017', '103196', '16'), +('8', '87', '8', '111331', '117815', '16'), +('8', '87', '8', '111328', '117476', '16'), +('8', '87', '8', '111332', '117332', '16'), +('8', '87', '8', '111330', '117175', '16'), +('8', '87', '6', '111324', '117475', '16'), +('8', '87', '6', '111322', '117316', '16'), +('8', '87', '6', '111326', '116861', '16'), +('8', '87', '6', '111023', '103360', '16'), +('8', '87', '17', '111735', '134493', '16'), +('8', '87', '17', '111435', '123503', '16'), +('8', '87', '17', '111135', '109555', '16'), +('8', '87', '17', '105379', '95004', '16'), +('8', '87', '7', '111733', '128500', '16'), +('8', '87', '7', '111433', '117160', '16'), +('8', '87', '7', '111133', '102963', '16'), +('8', '87', '7', '104929', '93997', '16'), +('8', '87', '9', '111729', '124237', '16'), +('8', '87', '9', '67098', '115181', '16'), +('8', '87', '9', '111429', '113402', '16'), +('8', '87', '9', '111129', '99330', '16'), +('8', '87', '15', '111348', '117814', '16'), +('8', '87', '15', '111343', '117559', '16'), +('8', '87', '15', '111345', '117306', '16'), +('8', '87', '15', '111341', '117276', '16'), +('8', '87', '20', '111354', '127093', '16'), +('8', '87', '20', '111355', '126571', '16'), +('8', '87', '20', '111351', '126232', '16'), +('8', '87', '20', '111352', '126073', '16'), +('8', '87', '12', '111730', '126233', '16'), +('8', '87', '12', '111430', '115225', '16'), +('8', '87', '12', '111130', '100888', '16'), +('8', '87', '12', '104814', '93002', '16'), +('8', '87', '18', '111734', '130745', '16'), +('8', '87', '18', '111434', '119440', '16'), +('8', '87', '18', '111134', '105383', '16'), +('8', '87', '18', '105378', '91398', '16'), +('8', '87', '19', '111731', '127343', '16'), +('8', '87', '19', '111431', '116270', '16'), +('8', '87', '19', '111131', '102188', '16'), +('8', '87', '19', '105263', '88183', '16'), +('8', '87', '13', '111871', '154387', '16'), +('8', '87', '13', '111815', '152394', '16'), +('8', '87', '13', '111512', '144862', '16'), +('8', '87', '13', '111515', '144834', '16'), +('8', '87', '14', '111871', '154387', '16'), +('8', '87', '14', '111815', '152394', '16'), +('8', '87', '14', '111512', '144862', '16'), +('8', '87', '14', '111515', '144834', '16'), +('8', '87', '11', '111336', '117501', '16'), +('8', '87', '11', '111338', '117446', '16'), +('8', '87', '11', '111333', '117181', '16'), +('8', '87', '11', '111337', '116969', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '88', '22', '21805', '0', '16'), +('8', '88', '22', '61948', '0', '16'), +('8', '88', '22', '66397', '0', '16'), +('8', '88', '22', '21807', '0', '16'), +('8', '88', '1', '111309', '117786', '16'), +('8', '88', '1', '111300', '117401', '16'), +('8', '88', '1', '111307', '117292', '16'), +('8', '88', '1', '111303', '117236', '16'), +('8', '88', '2', '111732', '128451', '16'), +('8', '88', '2', '111432', '117321', '16'), +('8', '88', '2', '111132', '103071', '16'), +('8', '88', '2', '104704', '94208', '16'), +('8', '88', '3', '111315', '117653', '16'), +('8', '88', '3', '111313', '117570', '16'), +('8', '88', '3', '111312', '117318', '16'), +('8', '88', '3', '111316', '116810', '16'), +('8', '88', '5', '111318', '117261', '16'), +('8', '88', '5', '111319', '117010', '16'), +('8', '88', '5', '111320', '116966', '16'), +('8', '88', '5', '111017', '103198', '16'), +('8', '88', '8', '111331', '117817', '16'), +('8', '88', '8', '111328', '117479', '16'), +('8', '88', '8', '111332', '117334', '16'), +('8', '88', '8', '111330', '117177', '16'), +('8', '88', '6', '111324', '117477', '16'), +('8', '88', '6', '111322', '117318', '16'), +('8', '88', '6', '111326', '116863', '16'), +('8', '88', '6', '111023', '103362', '16'), +('8', '88', '17', '111735', '134494', '16'), +('8', '88', '17', '111435', '123504', '16'), +('8', '88', '17', '111135', '109557', '16'), +('8', '88', '17', '105379', '95006', '16'), +('8', '88', '7', '111733', '128502', '16'), +('8', '88', '7', '111433', '117162', '16'), +('8', '88', '7', '111133', '102965', '16'), +('8', '88', '7', '104929', '93999', '16'), +('8', '88', '9', '111729', '124239', '16'), +('8', '88', '9', '67098', '116507', '16'), +('8', '88', '9', '111429', '113404', '16'), +('8', '88', '9', '111129', '99332', '16'), +('8', '88', '15', '111348', '117816', '16'), +('8', '88', '15', '111343', '117561', '16'), +('8', '88', '15', '111345', '117308', '16'), +('8', '88', '15', '111341', '117279', '16'), +('8', '88', '20', '111354', '127095', '16'), +('8', '88', '20', '111355', '126573', '16'), +('8', '88', '20', '111351', '126234', '16'), +('8', '88', '20', '111352', '126075', '16'), +('8', '88', '12', '111730', '126235', '16'), +('8', '88', '12', '111430', '115227', '16'), +('8', '88', '12', '111130', '100890', '16'), +('8', '88', '12', '104814', '93004', '16'), +('8', '88', '18', '111734', '130746', '16'), +('8', '88', '18', '111434', '119441', '16'), +('8', '88', '18', '111134', '105383', '16'), +('8', '88', '18', '105378', '91398', '16'), +('8', '88', '19', '111731', '127344', '16'), +('8', '88', '19', '111431', '116272', '16'), +('8', '88', '19', '111131', '102189', '16'), +('8', '88', '19', '105263', '88184', '16'), +('8', '88', '13', '111871', '154456', '16'), +('8', '88', '13', '111815', '152462', '16'), +('8', '88', '13', '111512', '144930', '16'), +('8', '88', '13', '111515', '144902', '16'), +('8', '88', '14', '111871', '154456', '16'), +('8', '88', '14', '111815', '152462', '16'), +('8', '88', '14', '111512', '144930', '16'), +('8', '88', '14', '111515', '144902', '16'), +('8', '88', '11', '111336', '117503', '16'), +('8', '88', '11', '111338', '117448', '16'), +('8', '88', '11', '111333', '117183', '16'), +('8', '88', '11', '111337', '116972', '16'), +('8', '89', '22', '21805', '0', '16'), +('8', '89', '22', '61948', '0', '16'), +('8', '89', '22', '66397', '0', '16'), +('8', '89', '22', '21807', '0', '16'), +('8', '89', '1', '111309', '117789', '16'), +('8', '89', '1', '111300', '117403', '16'), +('8', '89', '1', '111307', '117295', '16'), +('8', '89', '1', '111303', '117237', '16'), +('8', '89', '2', '111732', '128453', '16'), +('8', '89', '2', '111432', '117323', '16'), +('8', '89', '2', '111132', '103073', '16'), +('8', '89', '2', '104704', '94210', '16'), +('8', '89', '3', '111315', '117656', '16'), +('8', '89', '3', '111313', '117572', '16'), +('8', '89', '3', '111312', '117320', '16'), +('8', '89', '3', '111316', '116812', '16'), +('8', '89', '5', '111318', '117263', '16'), +('8', '89', '5', '111319', '117013', '16'), +('8', '89', '5', '111320', '116969', '16'), +('8', '89', '5', '111017', '103201', '16'), +('8', '89', '8', '111331', '117819', '16'), +('8', '89', '8', '111328', '117482', '16'), +('8', '89', '8', '111332', '117336', '16'), +('8', '89', '8', '111330', '117179', '16'), +('8', '89', '6', '111324', '117480', '16'), +('8', '89', '6', '111322', '117320', '16'), +('8', '89', '6', '111326', '116866', '16'), +('8', '89', '6', '111023', '103365', '16'), +('8', '89', '17', '111735', '134496', '16'), +('8', '89', '17', '111435', '123506', '16'), +('8', '89', '17', '111135', '109558', '16'), +('8', '89', '17', '105379', '95008', '16'), +('8', '89', '7', '111733', '128504', '16'), +('8', '89', '7', '111433', '117164', '16'), +('8', '89', '7', '111133', '102967', '16'), +('8', '89', '7', '104929', '94001', '16'), +('8', '89', '9', '111729', '124241', '16'), +('8', '89', '9', '67098', '117833', '16'), +('8', '89', '9', '111429', '113406', '16'), +('8', '89', '9', '111129', '99333', '16'), +('8', '89', '15', '111348', '117818', '16'), +('8', '89', '15', '111343', '117563', '16'), +('8', '89', '15', '111345', '117310', '16'), +('8', '89', '15', '111341', '117283', '16'), +('8', '89', '20', '111354', '127097', '16'), +('8', '89', '20', '111355', '126574', '16'), +('8', '89', '20', '111351', '126236', '16'), +('8', '89', '20', '111352', '126077', '16'), +('8', '89', '12', '111730', '126236', '16'), +('8', '89', '12', '111430', '115229', '16'), +('8', '89', '12', '111130', '100891', '16'), +('8', '89', '12', '104814', '93006', '16'), +('8', '89', '18', '111734', '130747', '16'), +('8', '89', '18', '111434', '119442', '16'), +('8', '89', '18', '111134', '105384', '16'), +('8', '89', '18', '105378', '91399', '16'), +('8', '89', '19', '111731', '127346', '16'), +('8', '89', '19', '111431', '116273', '16'), +('8', '89', '19', '111131', '102191', '16'), +('8', '89', '19', '105263', '88185', '16'), +('8', '89', '13', '111871', '154524', '16'), +('8', '89', '13', '111815', '152531', '16'), +('8', '89', '13', '111512', '144999', '16'), +('8', '89', '13', '111515', '144970', '16'), +('8', '89', '14', '111871', '154524', '16'), +('8', '89', '14', '111815', '152531', '16'), +('8', '89', '14', '111512', '144999', '16'), +('8', '89', '14', '111515', '144970', '16'), +('8', '89', '11', '111336', '117505', '16'), +('8', '89', '11', '111338', '117450', '16'), +('8', '89', '11', '111333', '117185', '16'), +('8', '89', '11', '111337', '116974', '16'), +('8', '90', '22', '21805', '0', '17'), +('8', '90', '22', '61948', '0', '17'), +('8', '90', '22', '66397', '0', '17'), +('8', '90', '22', '21807', '0', '17'), +('8', '90', '1', '111309', '117791', '17'), +('8', '90', '1', '111300', '117405', '17'), +('8', '90', '1', '111307', '117298', '17'), +('8', '90', '1', '111303', '117239', '17'), +('8', '90', '2', '111732', '128456', '17'), +('8', '90', '2', '111432', '117326', '17'), +('8', '90', '2', '111132', '103076', '17'), +('8', '90', '2', '104704', '94212', '17'), +('8', '90', '3', '111315', '117658', '17'), +('8', '90', '3', '111313', '117574', '17'), +('8', '90', '3', '111312', '117322', '17'), +('8', '90', '3', '111316', '116814', '17'), +('8', '90', '5', '111318', '117266', '17'), +('8', '90', '5', '111319', '117015', '17'), +('8', '90', '5', '111320', '116971', '17'), +('8', '90', '5', '111017', '103203', '17'), +('8', '90', '8', '111331', '117822', '17'), +('8', '90', '8', '111328', '117484', '17'), +('8', '90', '8', '111332', '117338', '17'), +('8', '90', '8', '111330', '117181', '17'), +('8', '90', '6', '111324', '117482', '17'), +('8', '90', '6', '111322', '117322', '17'), +('8', '90', '6', '111326', '116868', '17'), +('8', '90', '6', '111023', '103367', '17'), +('8', '90', '17', '111735', '134497', '17'), +('8', '90', '17', '111435', '123507', '17'), +('8', '90', '17', '111135', '109560', '17'), +('8', '90', '17', '105379', '95009', '17'), +('8', '90', '7', '111733', '128506', '17'), +('8', '90', '7', '111433', '117166', '17'), +('8', '90', '7', '111133', '102968', '17'), +('8', '90', '7', '104929', '94002', '17'), +('8', '90', '9', '111729', '124243', '17'), +('8', '90', '9', '67098', '119158', '17'), +('8', '90', '9', '111429', '113408', '17'), +('8', '90', '9', '111129', '99335', '17'), +('8', '90', '15', '111348', '117820', '17'), +('8', '90', '15', '111343', '117564', '17'), +('8', '90', '15', '111345', '117313', '17'), +('8', '90', '15', '111341', '117286', '17'), +('8', '90', '20', '111354', '127099', '17'), +('8', '90', '20', '111355', '126576', '17'), +('8', '90', '20', '111351', '126238', '17'), +('8', '90', '20', '111352', '126079', '17'), +('8', '90', '12', '111730', '126238', '17'), +('8', '90', '12', '111430', '115230', '17'), +('8', '90', '12', '111130', '100893', '17'), +('8', '90', '12', '104814', '93007', '17'), +('8', '90', '18', '111734', '130747', '17'), +('8', '90', '18', '111434', '119442', '17'), +('8', '90', '18', '111134', '105385', '17'), +('8', '90', '18', '105378', '91400', '17'), +('8', '90', '19', '111731', '127347', '17'), +('8', '90', '19', '111431', '116274', '17'), +('8', '90', '19', '111131', '102192', '17'), +('8', '90', '19', '105263', '88187', '17'), +('8', '90', '13', '111871', '154593', '17'), +('8', '90', '13', '111815', '152599', '17'), +('8', '90', '13', '111512', '145067', '17'), +('8', '90', '13', '111515', '145038', '17'), +('8', '90', '14', '111871', '154593', '17'), +('8', '90', '14', '111815', '152599', '17'), +('8', '90', '14', '111512', '145067', '17'), +('8', '90', '14', '111515', '145038', '17'), +('8', '90', '11', '111336', '117507', '17'), +('8', '90', '11', '111338', '117453', '17'), +('8', '90', '11', '111333', '117187', '17'), +('8', '90', '11', '111337', '116976', '17'), +('8', '91', '22', '21805', '0', '17'), +('8', '91', '22', '61948', '0', '17'), +('8', '91', '22', '66397', '0', '17'), +('8', '91', '22', '21807', '0', '17'), +('8', '91', '1', '111309', '117794', '17'), +('8', '91', '1', '111300', '117407', '17'), +('8', '91', '1', '111307', '117301', '17'), +('8', '91', '1', '111303', '117241', '17'), +('8', '91', '2', '111732', '128458', '17'), +('8', '91', '2', '111432', '117328', '17'), +('8', '91', '2', '111132', '103078', '17'), +('8', '91', '2', '104704', '94214', '17'), +('8', '91', '3', '111315', '117661', '17'), +('8', '91', '3', '111313', '117576', '17'), +('8', '91', '3', '111312', '117324', '17'), +('8', '91', '3', '111316', '116817', '17'), +('8', '91', '5', '111318', '117268', '17'), +('8', '91', '5', '111319', '117018', '17'), +('8', '91', '5', '111320', '116973', '17'), +('8', '91', '5', '111017', '103205', '17'), +('8', '91', '8', '111331', '117824', '17'), +('8', '91', '8', '111328', '117487', '17'), +('8', '91', '8', '111332', '117340', '17'), +('8', '91', '8', '111330', '117183', '17'), +('8', '91', '6', '111324', '117484', '17'), +('8', '91', '6', '111322', '117324', '17'), +('8', '91', '6', '111326', '116871', '17'), +('8', '91', '6', '111023', '103369', '17'), +('8', '91', '17', '111735', '134499', '17'), +('8', '91', '17', '111435', '123509', '17'), +('8', '91', '17', '111135', '109561', '17'), +('8', '91', '17', '105379', '95011', '17'), +('8', '91', '7', '111733', '128508', '17'), +('8', '91', '7', '111433', '117168', '17'), +('8', '91', '7', '111133', '102970', '17'), +('8', '91', '7', '104929', '94004', '17'), +('8', '91', '9', '111729', '124245', '17'), +('8', '91', '9', '67098', '119160', '17'), +('8', '91', '9', '111429', '113410', '17'), +('8', '91', '9', '111129', '99337', '17'), +('8', '91', '15', '111348', '117822', '17'), +('8', '91', '15', '111343', '117566', '17'), +('8', '91', '15', '111345', '117315', '17'), +('8', '91', '15', '111341', '117289', '17'), +('8', '91', '20', '111354', '127101', '17'), +('8', '91', '20', '111355', '126577', '17'), +('8', '91', '20', '111351', '126240', '17'), +('8', '91', '20', '111352', '126081', '17'), +('8', '91', '12', '111730', '126239', '17'), +('8', '91', '12', '111430', '115232', '17'), +('8', '91', '12', '111130', '100894', '17'), +('8', '91', '12', '104814', '93009', '17'), +('8', '91', '18', '111734', '130748', '17'), +('8', '91', '18', '111434', '119443', '17'), +('8', '91', '18', '111134', '105386', '17'), +('8', '91', '18', '105378', '91401', '17'), +('8', '91', '19', '111731', '127348', '17'), +('8', '91', '19', '111431', '116276', '17'), +('8', '91', '19', '111131', '102193', '17'), +('8', '91', '19', '105263', '88188', '17'), +('8', '91', '13', '111871', '154661', '17'), +('8', '91', '13', '111815', '152667', '17'), +('8', '91', '13', '111512', '145135', '17'), +('8', '91', '13', '111515', '145106', '17'), +('8', '91', '14', '111871', '154661', '17'), +('8', '91', '14', '111815', '152667', '17'), +('8', '91', '14', '111512', '145135', '17'), +('8', '91', '14', '111515', '145106', '17'), +('8', '91', '11', '111336', '117510', '17'), +('8', '91', '11', '111338', '117455', '17'), +('8', '91', '11', '111333', '117188', '17'), +('8', '91', '11', '111337', '116978', '17'), +('8', '92', '22', '21805', '0', '17'), +('8', '92', '22', '61948', '0', '17'), +('8', '92', '22', '66397', '0', '17'), +('8', '92', '22', '21807', '0', '17'), +('8', '92', '1', '111309', '117796', '17'), +('8', '92', '1', '111300', '117409', '17'), +('8', '92', '1', '111307', '117304', '17'), +('8', '92', '1', '111303', '117243', '17'), +('8', '92', '2', '111732', '128460', '17'), +('8', '92', '2', '111432', '117330', '17'), +('8', '92', '2', '111132', '103080', '17'), +('8', '92', '2', '104704', '94217', '17'), +('8', '92', '3', '111315', '117664', '17'), +('8', '92', '3', '111313', '117578', '17'), +('8', '92', '3', '111312', '117326', '17'), +('8', '92', '3', '111316', '116819', '17'), +('8', '92', '5', '111318', '117270', '17'), +('8', '92', '5', '111319', '117021', '17'), +('8', '92', '5', '111320', '116975', '17'), +('8', '92', '5', '111017', '103208', '17'), +('8', '92', '8', '111331', '117826', '17'), +('8', '92', '8', '111328', '117490', '17'), +('8', '92', '8', '111332', '117343', '17'), +('8', '92', '8', '111330', '117185', '17'), +('8', '92', '6', '111324', '117487', '17'), +('8', '92', '6', '111322', '117326', '17'), +('8', '92', '6', '111326', '116873', '17'), +('8', '92', '6', '111023', '103372', '17'), +('8', '92', '17', '111735', '134501', '17'), +('8', '92', '17', '111435', '123511', '17'), +('8', '92', '17', '111135', '109563', '17'), +('8', '92', '17', '105379', '95013', '17'), +('8', '92', '7', '111733', '128510', '17'), +('8', '92', '7', '111433', '117170', '17'), +('8', '92', '7', '111133', '102972', '17'), +('8', '92', '7', '104929', '94006', '17'), +('8', '92', '9', '111729', '124246', '17'), +('8', '92', '9', '67098', '119162', '17'), +('8', '92', '9', '111429', '113411', '17'), +('8', '92', '9', '111129', '99339', '17'), +('8', '92', '15', '111348', '117824', '17'), +('8', '92', '15', '111343', '117568', '17'), +('8', '92', '15', '111345', '117317', '17'), +('8', '92', '15', '111341', '117292', '17'), +('8', '92', '20', '111354', '127104', '17'), +('8', '92', '20', '111355', '126579', '17'), +('8', '92', '20', '111351', '126243', '17'), +('8', '92', '20', '111352', '126084', '17'), +('8', '92', '12', '111730', '126241', '17'), +('8', '92', '12', '111430', '115234', '17'), +('8', '92', '12', '111130', '100896', '17'), +('8', '92', '12', '104814', '93011', '17'), +('8', '92', '18', '111734', '130749', '17'), +('8', '92', '18', '111434', '119444', '17'), +('8', '92', '18', '111134', '105386', '17'), +('8', '92', '18', '105378', '91401', '17'), +('8', '92', '19', '111731', '127350', '17'), +('8', '92', '19', '111431', '116277', '17'), +('8', '92', '19', '111131', '102195', '17'), +('8', '92', '19', '105263', '88190', '17'), +('8', '92', '13', '111871', '154730', '17'), +('8', '92', '13', '111815', '152735', '17'), +('8', '92', '13', '111512', '145203', '17'), +('8', '92', '13', '111515', '145174', '17'), +('8', '92', '14', '111871', '154730', '17'), +('8', '92', '14', '111815', '152735', '17'), +('8', '92', '14', '111512', '145203', '17'), +('8', '92', '14', '111515', '145174', '17'), +('8', '92', '11', '111336', '117512', '17'), +('8', '92', '11', '111338', '117458', '17'), +('8', '92', '11', '111333', '117190', '17'), +('8', '92', '11', '111337', '116980', '17'), +('8', '93', '22', '21805', '0', '17'), +('8', '93', '22', '61948', '0', '17'), +('8', '93', '22', '66397', '0', '17'), +('8', '93', '22', '21807', '0', '17'), +('8', '93', '1', '111309', '117799', '17'), +('8', '93', '1', '111300', '117411', '17'), +('8', '93', '1', '111307', '117307', '17'), +('8', '93', '1', '111303', '117245', '17'), +('8', '93', '2', '111732', '128462', '17'), +('8', '93', '2', '111432', '117332', '17'), +('8', '93', '2', '111132', '103082', '17'), +('8', '93', '2', '104704', '94219', '17'), +('8', '93', '3', '111315', '117667', '17'), +('8', '93', '3', '111313', '117580', '17'), +('8', '93', '3', '111312', '117328', '17'), +('8', '93', '3', '111316', '116821', '17'), +('8', '93', '5', '111318', '117272', '17'), +('8', '93', '5', '111319', '117023', '17'), +('8', '93', '5', '111320', '116977', '17'), +('8', '93', '5', '111017', '103210', '17'), +('8', '93', '8', '111331', '117828', '17'), +('8', '93', '8', '111328', '117493', '17'), +('8', '93', '8', '111332', '117345', '17'), +('8', '93', '8', '111330', '117187', '17'), +('8', '93', '6', '111324', '117489', '17'), +('8', '93', '6', '111322', '117328', '17'), +('8', '93', '6', '111326', '116876', '17'), +('8', '93', '6', '111023', '103374', '17'), +('8', '93', '17', '111735', '134502', '17'), +('8', '93', '17', '111435', '123512', '17'), +('8', '93', '17', '111135', '109565', '17'), +('8', '93', '17', '105379', '95014', '17'), +('8', '93', '7', '111733', '128511', '17'), +('8', '93', '7', '111433', '117171', '17'), +('8', '93', '7', '111133', '102974', '17'), +('8', '93', '7', '104929', '94008', '17'), +('8', '93', '9', '111729', '124248', '17'), +('8', '93', '9', '67098', '119164', '17'), +('8', '93', '9', '111429', '113413', '17'), +('8', '93', '9', '111129', '99341', '17'), +('8', '93', '15', '111348', '117826', '17'), +('8', '93', '15', '111343', '117570', '17'), +('8', '93', '15', '111345', '117319', '17'), +('8', '93', '15', '111341', '117295', '17'), +('8', '93', '20', '111354', '127106', '17'), +('8', '93', '20', '111355', '126580', '17'), +('8', '93', '20', '111351', '126245', '17'), +('8', '93', '20', '111352', '126086', '17'), +('8', '93', '12', '111730', '126243', '17'), +('8', '93', '12', '111430', '115235', '17'), +('8', '93', '12', '111130', '100898', '17'), +('8', '93', '12', '104814', '93012', '17'), +('8', '93', '18', '111734', '130750', '17'), +('8', '93', '18', '111434', '119445', '17'), +('8', '93', '18', '111134', '105387', '17'), +('8', '93', '18', '105378', '91402', '17'), +('8', '93', '19', '111731', '127351', '17'), +('8', '93', '19', '111431', '116279', '17'), +('8', '93', '19', '111131', '102196', '17'), +('8', '93', '19', '105263', '88191', '17'), +('8', '93', '13', '111871', '154798', '17'), +('8', '93', '13', '111815', '152804', '17'), +('8', '93', '13', '111512', '145271', '17'), +('8', '93', '13', '111515', '145242', '17'), +('8', '93', '14', '111871', '154798', '17'), +('8', '93', '14', '111815', '152804', '17'), +('8', '93', '14', '111512', '145271', '17'), +('8', '93', '14', '111515', '145242', '17'), +('8', '93', '11', '111336', '117514', '17'), +('8', '93', '11', '111338', '117460', '17'), +('8', '93', '11', '111333', '117192', '17'), +('8', '93', '11', '111337', '116982', '17'), +('8', '94', '22', '21805', '0', '17'), +('8', '94', '22', '61948', '0', '17'), +('8', '94', '22', '66397', '0', '17'), +('8', '94', '22', '21807', '0', '17'), +('8', '94', '1', '111309', '117801', '17'), +('8', '94', '1', '111300', '117414', '17'), +('8', '94', '1', '111307', '117311', '17'), +('8', '94', '1', '111303', '117247', '17'), +('8', '94', '2', '111732', '128464', '17'), +('8', '94', '2', '111432', '117334', '17'), +('8', '94', '2', '111132', '103084', '17'), +('8', '94', '2', '104704', '94221', '17'), +('8', '94', '3', '111315', '117669', '17'), +('8', '94', '3', '111313', '117582', '17'), +('8', '94', '3', '111312', '117330', '17'), +('8', '94', '3', '111316', '116823', '17'), +('8', '94', '5', '111318', '117275', '17'), +('8', '94', '5', '111319', '117026', '17'), +('8', '94', '5', '111320', '116980', '17'), +('8', '94', '5', '111017', '103212', '17'), +('8', '94', '8', '111331', '117830', '17'), +('8', '94', '8', '111328', '117496', '17'), +('8', '94', '8', '111332', '117347', '17'), +('8', '94', '8', '111330', '117189', '17'), +('8', '94', '6', '111324', '117491', '17'), +('8', '94', '6', '111322', '117330', '17'), +('8', '94', '6', '111326', '116878', '17'), +('8', '94', '6', '111023', '103376', '17'), +('8', '94', '17', '111735', '134504', '17'), +('8', '94', '17', '111435', '123514', '17'), +('8', '94', '17', '111135', '109566', '17'), +('8', '94', '17', '105379', '95016', '17'), +('8', '94', '7', '111733', '128513', '17'), +('8', '94', '7', '111433', '117173', '17'), +('8', '94', '7', '111133', '102976', '17'), +('8', '94', '7', '104929', '94010', '17'), +('8', '94', '9', '111729', '124250', '17'), +('8', '94', '9', '67098', '119166', '17'), +('8', '94', '9', '111429', '113415', '17'), +('8', '94', '9', '111129', '99343', '17'), +('8', '94', '15', '111348', '117828', '17'), +('8', '94', '15', '111343', '117571', '17'), +('8', '94', '15', '111345', '117322', '17'), +('8', '94', '15', '111341', '117299', '17'), +('8', '94', '20', '111354', '127108', '17'), +('8', '94', '20', '111355', '126582', '17'), +('8', '94', '20', '111351', '126247', '17'), +('8', '94', '20', '111352', '126088', '17'), +('8', '94', '12', '111730', '126244', '17'), +('8', '94', '12', '111430', '115237', '17'), +('8', '94', '12', '111130', '100899', '17'), +('8', '94', '12', '104814', '93014', '17'), +('8', '94', '18', '111734', '130750', '17'), +('8', '94', '18', '111434', '119445', '17'), +('8', '94', '18', '111134', '105388', '17'), +('8', '94', '18', '105378', '91403', '17'), +('8', '94', '19', '111731', '127353', '17'), +('8', '94', '19', '111431', '116280', '17'), +('8', '94', '19', '111131', '102198', '17'), +('8', '94', '19', '105263', '88192', '17'), +('8', '94', '13', '111871', '154867', '17'), +('8', '94', '13', '111815', '152872', '17'), +('8', '94', '13', '111512', '145340', '17'), +('8', '94', '13', '111515', '145310', '17'), +('8', '94', '14', '111871', '154867', '17'), +('8', '94', '14', '111815', '152872', '17'), +('8', '94', '14', '111512', '145340', '17'), +('8', '94', '14', '111515', '145310', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '94', '11', '111336', '117516', '17'), +('8', '94', '11', '111338', '117463', '17'), +('8', '94', '11', '111333', '117194', '17'), +('8', '94', '11', '111337', '116984', '17'), +('8', '95', '22', '21807', '0', '18'), +('8', '95', '22', '21805', '0', '18'), +('8', '95', '22', '61948', '0', '18'), +('8', '95', '22', '12425', '0', '18'), +('8', '95', '1', '111309', '117804', '18'), +('8', '95', '1', '111300', '117416', '18'), +('8', '95', '1', '111307', '117314', '18'), +('8', '95', '1', '111303', '117249', '18'), +('8', '95', '2', '111732', '128466', '18'), +('8', '95', '2', '111432', '117336', '18'), +('8', '95', '2', '111132', '103086', '18'), +('8', '95', '2', '104704', '94223', '18'), +('8', '95', '3', '111315', '117672', '18'), +('8', '95', '3', '111313', '117583', '18'), +('8', '95', '3', '111312', '117332', '18'), +('8', '95', '3', '111316', '116826', '18'), +('8', '95', '5', '111318', '117277', '18'), +('8', '95', '5', '111319', '117029', '18'), +('8', '95', '5', '111320', '116982', '18'), +('8', '95', '5', '111017', '103214', '18'), +('8', '95', '8', '111331', '117833', '18'), +('8', '95', '8', '111328', '117499', '18'), +('8', '95', '8', '111332', '117349', '18'), +('8', '95', '8', '111330', '117191', '18'), +('8', '95', '6', '111324', '117494', '18'), +('8', '95', '6', '111322', '117332', '18'), +('8', '95', '6', '111326', '116881', '18'), +('8', '95', '6', '111023', '103379', '18'), +('8', '95', '17', '111735', '134505', '18'), +('8', '95', '17', '111435', '123515', '18'), +('8', '95', '17', '111135', '109568', '18'), +('8', '95', '17', '105379', '95017', '18'), +('8', '95', '7', '111733', '128515', '18'), +('8', '95', '7', '111433', '117175', '18'), +('8', '95', '7', '111133', '102977', '18'), +('8', '95', '7', '104929', '94011', '18'), +('8', '95', '9', '111729', '124252', '18'), +('8', '95', '9', '67098', '119167', '18'), +('8', '95', '9', '111429', '113417', '18'), +('8', '95', '9', '111129', '99344', '18'), +('8', '95', '15', '111348', '117830', '18'), +('8', '95', '15', '111343', '117573', '18'), +('8', '95', '15', '111345', '117324', '18'), +('8', '95', '15', '111341', '117302', '18'), +('8', '95', '20', '111354', '127111', '18'), +('8', '95', '20', '111355', '126583', '18'), +('8', '95', '20', '111351', '126249', '18'), +('8', '95', '20', '111352', '126090', '18'), +('8', '95', '12', '111730', '126246', '18'), +('8', '95', '12', '111430', '115239', '18'), +('8', '95', '12', '111130', '100901', '18'), +('8', '95', '12', '104814', '93015', '18'), +('8', '95', '18', '111734', '130751', '18'), +('8', '95', '18', '111434', '119446', '18'), +('8', '95', '18', '111134', '105389', '18'), +('8', '95', '18', '105378', '91403', '18'), +('8', '95', '19', '111731', '127354', '18'), +('8', '95', '19', '111431', '116282', '18'), +('8', '95', '19', '111131', '102199', '18'), +('8', '95', '19', '105263', '88194', '18'), +('8', '95', '13', '111871', '154935', '18'), +('8', '95', '13', '111815', '152940', '18'), +('8', '95', '13', '111512', '145408', '18'), +('8', '95', '13', '111515', '145378', '18'), +('8', '95', '14', '111871', '154935', '18'), +('8', '95', '14', '111815', '152940', '18'), +('8', '95', '14', '111512', '145408', '18'), +('8', '95', '14', '111515', '145378', '18'), +('8', '95', '11', '111336', '117518', '18'), +('8', '95', '11', '111338', '117465', '18'), +('8', '95', '11', '111333', '117196', '18'), +('8', '95', '11', '111337', '116987', '18'), +('8', '96', '22', '21807', '0', '18'), +('8', '96', '22', '21805', '0', '18'), +('8', '96', '22', '61948', '0', '18'), +('8', '96', '22', '12425', '0', '18'), +('8', '96', '1', '111309', '117807', '18'), +('8', '96', '1', '111300', '117418', '18'), +('8', '96', '1', '111307', '117317', '18'), +('8', '96', '1', '111303', '117251', '18'), +('8', '96', '2', '111732', '128469', '18'), +('8', '96', '2', '111432', '117339', '18'), +('8', '96', '2', '111132', '103089', '18'), +('8', '96', '2', '104704', '94225', '18'), +('8', '96', '3', '111315', '117675', '18'), +('8', '96', '3', '111313', '117585', '18'), +('8', '96', '3', '111312', '117334', '18'), +('8', '96', '3', '111316', '116828', '18'), +('8', '96', '5', '111318', '117279', '18'), +('8', '96', '5', '111319', '117032', '18'), +('8', '96', '5', '111320', '116984', '18'), +('8', '96', '5', '111017', '103217', '18'), +('8', '96', '8', '111331', '117835', '18'), +('8', '96', '8', '111328', '117502', '18'), +('8', '96', '8', '111332', '117351', '18'), +('8', '96', '8', '111330', '117193', '18'), +('8', '96', '6', '111324', '117496', '18'), +('8', '96', '6', '111322', '117334', '18'), +('8', '96', '6', '111326', '116883', '18'), +('8', '96', '6', '111023', '103381', '18'), +('8', '96', '17', '111735', '134507', '18'), +('8', '96', '17', '111435', '123517', '18'), +('8', '96', '17', '111135', '109570', '18'), +('8', '96', '17', '105379', '95019', '18'), +('8', '96', '7', '111733', '128517', '18'), +('8', '96', '7', '111433', '117177', '18'), +('8', '96', '7', '111133', '102979', '18'), +('8', '96', '7', '104929', '94013', '18'), +('8', '96', '9', '111729', '124254', '18'), +('8', '96', '9', '67098', '119169', '18'), +('8', '96', '9', '111429', '113419', '18'), +('8', '96', '9', '111129', '99346', '18'), +('8', '96', '15', '111348', '117832', '18'), +('8', '96', '15', '111343', '117575', '18'), +('8', '96', '15', '111345', '117326', '18'), +('8', '96', '15', '111341', '117305', '18'), +('8', '96', '20', '111354', '127113', '18'), +('8', '96', '20', '111355', '126585', '18'), +('8', '96', '20', '111351', '126251', '18'), +('8', '96', '20', '111352', '126092', '18'), +('8', '96', '12', '111730', '126248', '18'), +('8', '96', '12', '111430', '115240', '18'), +('8', '96', '12', '111130', '100903', '18'), +('8', '96', '12', '104814', '93017', '18'), +('8', '96', '18', '111734', '130752', '18'), +('8', '96', '18', '111434', '119447', '18'), +('8', '96', '18', '111134', '105389', '18'), +('8', '96', '18', '105378', '91404', '18'), +('8', '96', '19', '111731', '127355', '18'), +('8', '96', '19', '111431', '116283', '18'), +('8', '96', '19', '111131', '102200', '18'), +('8', '96', '19', '105263', '88195', '18'), +('8', '96', '13', '111871', '155004', '18'), +('8', '96', '13', '111815', '153008', '18'), +('8', '96', '13', '111512', '145476', '18'), +('8', '96', '13', '111515', '145446', '18'), +('8', '96', '14', '111871', '155004', '18'), +('8', '96', '14', '111815', '153008', '18'), +('8', '96', '14', '111512', '145476', '18'), +('8', '96', '14', '111515', '145446', '18'), +('8', '96', '11', '111336', '117521', '18'), +('8', '96', '11', '111338', '117467', '18'), +('8', '96', '11', '111333', '117198', '18'), +('8', '96', '11', '111337', '116989', '18'), +('8', '97', '22', '21807', '0', '18'), +('8', '97', '22', '21805', '0', '18'), +('8', '97', '22', '61948', '0', '18'), +('8', '97', '22', '12425', '0', '18'), +('8', '97', '1', '111309', '117809', '18'), +('8', '97', '1', '111300', '117420', '18'), +('8', '97', '1', '111307', '117320', '18'), +('8', '97', '1', '111303', '117252', '18'), +('8', '97', '2', '111732', '128471', '18'), +('8', '97', '2', '111432', '117341', '18'), +('8', '97', '2', '111132', '103091', '18'), +('8', '97', '2', '104704', '94227', '18'), +('8', '97', '3', '111315', '117677', '18'), +('8', '97', '3', '111313', '117587', '18'), +('8', '97', '3', '111312', '117336', '18'), +('8', '97', '3', '111316', '116830', '18'), +('8', '97', '5', '111318', '117281', '18'), +('8', '97', '5', '111319', '117034', '18'), +('8', '97', '5', '111320', '116986', '18'), +('8', '97', '5', '111017', '103219', '18'), +('8', '97', '8', '111331', '117837', '18'), +('8', '97', '8', '111328', '117505', '18'), +('8', '97', '8', '111332', '117353', '18'), +('8', '97', '8', '111330', '117195', '18'), +('8', '97', '6', '111324', '117498', '18'), +('8', '97', '6', '111322', '117336', '18'), +('8', '97', '6', '111326', '116886', '18'), +('8', '97', '6', '111023', '103383', '18'), +('8', '97', '17', '111735', '134509', '18'), +('8', '97', '17', '111435', '123519', '18'), +('8', '97', '17', '111135', '109571', '18'), +('8', '97', '17', '105379', '95021', '18'), +('8', '97', '7', '111733', '128519', '18'), +('8', '97', '7', '111433', '117179', '18'), +('8', '97', '7', '111133', '102981', '18'), +('8', '97', '7', '104929', '94015', '18'), +('8', '97', '9', '111729', '124256', '18'), +('8', '97', '9', '67098', '119171', '18'), +('8', '97', '9', '111429', '113421', '18'), +('8', '97', '9', '111129', '99348', '18'), +('8', '97', '15', '111348', '117834', '18'), +('8', '97', '15', '111343', '117577', '18'), +('8', '97', '15', '111345', '117329', '18'), +('8', '97', '15', '111341', '117308', '18'), +('8', '97', '20', '111354', '127115', '18'), +('8', '97', '20', '111355', '126586', '18'), +('8', '97', '20', '111351', '126253', '18'), +('8', '97', '20', '111352', '126094', '18'), +('8', '97', '12', '111730', '126249', '18'), +('8', '97', '12', '111430', '115242', '18'), +('8', '97', '12', '111130', '100904', '18'), +('8', '97', '12', '104814', '93019', '18'), +('8', '97', '18', '111734', '130753', '18'), +('8', '97', '18', '111434', '119448', '18'), +('8', '97', '18', '111134', '105390', '18'), +('8', '97', '18', '105378', '91405', '18'), +('8', '97', '19', '111731', '127357', '18'), +('8', '97', '19', '111431', '116284', '18'), +('8', '97', '19', '111131', '102202', '18'), +('8', '97', '19', '105263', '88197', '18'), +('8', '97', '13', '111871', '155072', '18'), +('8', '97', '13', '111815', '153077', '18'), +('8', '97', '13', '111512', '145544', '18'), +('8', '97', '13', '111515', '145514', '18'), +('8', '97', '14', '111871', '155072', '18'), +('8', '97', '14', '111815', '153077', '18'), +('8', '97', '14', '111512', '145544', '18'), +('8', '97', '14', '111515', '145514', '18'), +('8', '97', '11', '111336', '117523', '18'), +('8', '97', '11', '111338', '117470', '18'), +('8', '97', '11', '111333', '117200', '18'), +('8', '97', '11', '111337', '116991', '18'), +('8', '98', '22', '21807', '0', '18'), +('8', '98', '22', '21805', '0', '18'), +('8', '98', '22', '61948', '0', '18'), +('8', '98', '22', '12425', '0', '18'), +('8', '98', '1', '111309', '117812', '18'), +('8', '98', '1', '111300', '117422', '18'), +('8', '98', '1', '111307', '117323', '18'), +('8', '98', '1', '111303', '117254', '18'), +('8', '98', '2', '111732', '128473', '18'), +('8', '98', '2', '111432', '117343', '18'), +('8', '98', '2', '111132', '103093', '18'), +('8', '98', '2', '104704', '94229', '18'), +('8', '98', '3', '111315', '117680', '18'), +('8', '98', '3', '111313', '117589', '18'), +('8', '98', '3', '111312', '117339', '18'), +('8', '98', '3', '111316', '116832', '18'), +('8', '98', '5', '111318', '117284', '18'), +('8', '98', '5', '111319', '117037', '18'), +('8', '98', '5', '111320', '116989', '18'), +('8', '98', '5', '111017', '103221', '18'), +('8', '98', '8', '111331', '117839', '18'), +('8', '98', '8', '111328', '117508', '18'), +('8', '98', '8', '111332', '117355', '18'), +('8', '98', '8', '111330', '117197', '18'), +('8', '98', '6', '111324', '117501', '18'), +('8', '98', '6', '111322', '117338', '18'), +('8', '98', '6', '111326', '116888', '18'), +('8', '98', '6', '111023', '103386', '18'), +('8', '98', '17', '111735', '134510', '18'), +('8', '98', '17', '111435', '123520', '18'), +('8', '98', '17', '111135', '109573', '18'), +('8', '98', '17', '105379', '95022', '18'), +('8', '98', '7', '111733', '128520', '18'), +('8', '98', '7', '111433', '117180', '18'), +('8', '98', '7', '111133', '102983', '18'), +('8', '98', '7', '104929', '94017', '18'), +('8', '98', '9', '111729', '124258', '18'), +('8', '98', '9', '67098', '119173', '18'), +('8', '98', '9', '111429', '113423', '18'), +('8', '98', '9', '111129', '99350', '18'), +('8', '98', '15', '111348', '117837', '18'), +('8', '98', '15', '111343', '117578', '18'), +('8', '98', '15', '111345', '117331', '18'), +('8', '98', '15', '111341', '117311', '18'), +('8', '98', '20', '111354', '127117', '18'), +('8', '98', '20', '111355', '126588', '18'), +('8', '98', '20', '111351', '126255', '18'), +('8', '98', '20', '111352', '126096', '18'), +('8', '98', '12', '111730', '126251', '18'), +('8', '98', '12', '111430', '115244', '18'), +('8', '98', '12', '111130', '100906', '18'), +('8', '98', '12', '104814', '93020', '18'), +('8', '98', '18', '111734', '130753', '18'), +('8', '98', '18', '111434', '119448', '18'), +('8', '98', '18', '111134', '105391', '18'), +('8', '98', '18', '105378', '91406', '18'), +('8', '98', '19', '111731', '127358', '18'), +('8', '98', '19', '111431', '116286', '18'), +('8', '98', '19', '111131', '102203', '18'), +('8', '98', '19', '105263', '88198', '18'), +('8', '98', '13', '111871', '155141', '18'), +('8', '98', '13', '111815', '153145', '18'), +('8', '98', '13', '111512', '145613', '18'), +('8', '98', '13', '111515', '145583', '18'), +('8', '98', '14', '111871', '155141', '18'), +('8', '98', '14', '111815', '153145', '18'), +('8', '98', '14', '111512', '145613', '18'), +('8', '98', '14', '111515', '145583', '18'), +('8', '98', '11', '111336', '117525', '18'), +('8', '98', '11', '111338', '117472', '18'), +('8', '98', '11', '111333', '117201', '18'), +('8', '98', '11', '111337', '116993', '18'), +('8', '99', '22', '21807', '0', '18'), +('8', '99', '22', '21805', '0', '18'), +('8', '99', '22', '61948', '0', '18'), +('8', '99', '22', '12425', '0', '18'), +('8', '99', '1', '111309', '117814', '18'), +('8', '99', '1', '111300', '117424', '18'), +('8', '99', '1', '111307', '117326', '18'), +('8', '99', '1', '111303', '117256', '18'), +('8', '99', '2', '111732', '128475', '18'), +('8', '99', '2', '111432', '117345', '18'), +('8', '99', '2', '111132', '103095', '18'), +('8', '99', '2', '104704', '94232', '18'), +('8', '99', '3', '111315', '117683', '18'), +('8', '99', '3', '111313', '117591', '18'), +('8', '99', '3', '111312', '117341', '18'), +('8', '99', '3', '111316', '116835', '18'), +('8', '99', '5', '111318', '117286', '18'), +('8', '99', '5', '111319', '117040', '18'), +('8', '99', '5', '111320', '116991', '18'), +('8', '99', '5', '111017', '103223', '18'), +('8', '99', '8', '111331', '117842', '18'), +('8', '99', '8', '111328', '117511', '18'), +('8', '99', '8', '111332', '117357', '18'), +('8', '99', '8', '111330', '117199', '18'), +('8', '99', '6', '111324', '117503', '18'), +('8', '99', '6', '111322', '117340', '18'), +('8', '99', '6', '111326', '116891', '18'), +('8', '99', '6', '111023', '103388', '18'), +('8', '99', '17', '111735', '134512', '18'), +('8', '99', '17', '111435', '123522', '18'), +('8', '99', '17', '111135', '109575', '18'), +('8', '99', '17', '105379', '95024', '18'), +('8', '99', '7', '111733', '128522', '18'), +('8', '99', '7', '111433', '117182', '18'), +('8', '99', '7', '111133', '102985', '18'), +('8', '99', '7', '104929', '94019', '18'), +('8', '99', '9', '111729', '124260', '18'), +('8', '99', '9', '67098', '119175', '18'), +('8', '99', '9', '111429', '113425', '18'), +('8', '99', '9', '111129', '99352', '18'), +('8', '99', '15', '111348', '117839', '18'), +('8', '99', '15', '111343', '117580', '18'), +('8', '99', '15', '111345', '117333', '18'), +('8', '99', '15', '111341', '117315', '18'), +('8', '99', '20', '111354', '127120', '18'), +('8', '99', '20', '111355', '126589', '18'), +('8', '99', '20', '111351', '126257', '18'), +('8', '99', '20', '111352', '126099', '18'), +('8', '99', '12', '111730', '126253', '18'), +('8', '99', '12', '111430', '115245', '18'), +('8', '99', '12', '111130', '100908', '18'), +('8', '99', '12', '104814', '93022', '18'), +('8', '99', '18', '111734', '130754', '18'), +('8', '99', '18', '111434', '119449', '18'), +('8', '99', '18', '111134', '105392', '18'), +('8', '99', '18', '105378', '91406', '18'), +('8', '99', '19', '111731', '127360', '18'), +('8', '99', '19', '111431', '116287', '18'), +('8', '99', '19', '111131', '102205', '18'), +('8', '99', '19', '105263', '88200', '18'), +('8', '99', '13', '111871', '155210', '18'), +('8', '99', '13', '111815', '153213', '18'), +('8', '99', '13', '111512', '145681', '18'), +('8', '99', '13', '111515', '145651', '18'), +('8', '99', '14', '111871', '155210', '18'), +('8', '99', '14', '111815', '153213', '18'), +('8', '99', '14', '111512', '145681', '18'), +('8', '99', '14', '111515', '145651', '18'), +('8', '99', '11', '111336', '117527', '18'), +('8', '99', '11', '111338', '117475', '18'), +('8', '99', '11', '111333', '117203', '18'), +('8', '99', '11', '111337', '116995', '18'), +('8', '100', '22', '21807', '0', '20'), +('8', '100', '22', '21805', '0', '20'), +('8', '100', '22', '61948', '0', '20'), +('8', '100', '22', '12425', '0', '20'), +('8', '100', '1', '98769', '192827', '20'), +('8', '100', '1', '111309', '117817', '20'), +('8', '100', '1', '111300', '117426', '20'), +('8', '100', '1', '111307', '117329', '20'), +('8', '100', '2', '111732', '128478', '20'), +('8', '100', '2', '111432', '117348', '20'), +('8', '100', '2', '111132', '103098', '20'), +('8', '100', '2', '104704', '94234', '20'), +('8', '100', '3', '111315', '117686', '20'), +('8', '100', '3', '111313', '117593', '20'), +('8', '100', '3', '111312', '117343', '20'), +('8', '100', '3', '111316', '116837', '20'), +('8', '100', '5', '111318', '117288', '20'), +('8', '100', '5', '111319', '117042', '20'), +('8', '100', '5', '111320', '116993', '20'), +('8', '100', '5', '111017', '103226', '20'), +('8', '100', '8', '111331', '117844', '20'), +('8', '100', '8', '111328', '117514', '20'), +('8', '100', '8', '111332', '117359', '20'), +('8', '100', '8', '111330', '117201', '20'), +('8', '100', '6', '111324', '117505', '20'), +('8', '100', '6', '111322', '117342', '20'), +('8', '100', '6', '111326', '116893', '20'), +('8', '100', '6', '111023', '103390', '20'), +('8', '100', '17', '111735', '134514', '20'), +('8', '100', '17', '111435', '123524', '20'), +('8', '100', '17', '111135', '109576', '20'), +('8', '100', '17', '105379', '95025', '20'), +('8', '100', '7', '111733', '128524', '20'), +('8', '100', '7', '111433', '117184', '20'), +('8', '100', '7', '111133', '102987', '20'), +('8', '100', '7', '104929', '94020', '20'), +('8', '100', '9', '111729', '124261', '20'), +('8', '100', '9', '67098', '119177', '20'), +('8', '100', '9', '111429', '113426', '20'), +('8', '100', '9', '111129', '99354', '20'), +('8', '100', '15', '111348', '117841', '20'), +('8', '100', '15', '111343', '117582', '20'), +('8', '100', '15', '111345', '117336', '20'), +('8', '100', '15', '111341', '117318', '20'), +('8', '100', '20', '111354', '127122', '20'), +('8', '100', '20', '111355', '126591', '20'), +('8', '100', '20', '111351', '126260', '20'), +('8', '100', '20', '111352', '126101', '20'), +('8', '100', '12', '111730', '126254', '20'), +('8', '100', '12', '111430', '115247', '20'), +('8', '100', '12', '111130', '100909', '20'), +('8', '100', '12', '104814', '93023', '20'), +('8', '100', '18', '111734', '130755', '20'), +('8', '100', '18', '111434', '119450', '20'), +('8', '100', '18', '111134', '105392', '20'), +('8', '100', '18', '105378', '91407', '20'), +('8', '100', '19', '111731', '127361', '20'), +('8', '100', '19', '111431', '116289', '20'), +('8', '100', '19', '111131', '102206', '20'), +('8', '100', '19', '105263', '88201', '20'), +('8', '100', '13', '111871', '155612', '20'), +('8', '100', '13', '111815', '153615', '20'), +('8', '100', '13', '111512', '146083', '20'), +('8', '100', '13', '111515', '146052', '20'), +('8', '100', '14', '111871', '155612', '20'), +('8', '100', '14', '111815', '153615', '20'), +('8', '100', '14', '111512', '146083', '20'), +('8', '100', '14', '111515', '146052', '20'), +('8', '100', '11', '133816', '149765', '20'), +('8', '100', '11', '111336', '117529', '20'), +('8', '100', '11', '111338', '117477', '20'), +('8', '100', '11', '111333', '117205', '20'), +('8', '100', '22', '21807', '0', '19'), +('8', '100', '22', '21805', '0', '19'), +('8', '100', '22', '61948', '0', '19'), +('8', '100', '22', '12425', '0', '19'), +('8', '100', '1', '98769', '192827', '19'), +('8', '100', '1', '111309', '117817', '19'), +('8', '100', '1', '111300', '117426', '19'), +('8', '100', '1', '111307', '117329', '19'), +('8', '100', '2', '111732', '128478', '19'), +('8', '100', '2', '111432', '117348', '19'), +('8', '100', '2', '111132', '103098', '19'), +('8', '100', '2', '104704', '94234', '19'), +('8', '100', '3', '111315', '117686', '19'), +('8', '100', '3', '111313', '117593', '19'), +('8', '100', '3', '111312', '117343', '19'), +('8', '100', '3', '111316', '116837', '19'), +('8', '100', '5', '111318', '117288', '19'), +('8', '100', '5', '111319', '117042', '19'), +('8', '100', '5', '111320', '116993', '19'), +('8', '100', '5', '111017', '103226', '19'), +('8', '100', '8', '111331', '117844', '19'), +('8', '100', '8', '111328', '117514', '19'), +('8', '100', '8', '111332', '117359', '19'), +('8', '100', '8', '111330', '117201', '19'), +('8', '100', '6', '111324', '117505', '19'), +('8', '100', '6', '111322', '117342', '19'), +('8', '100', '6', '111326', '116893', '19'), +('8', '100', '6', '111023', '103390', '19'), +('8', '100', '17', '111735', '134514', '19'), +('8', '100', '17', '111435', '123524', '19'), +('8', '100', '17', '111135', '109576', '19'), +('8', '100', '17', '105379', '95025', '19'), +('8', '100', '7', '111733', '128524', '19'), +('8', '100', '7', '111433', '117184', '19'), +('8', '100', '7', '111133', '102987', '19'), +('8', '100', '7', '104929', '94020', '19'), +('8', '100', '9', '111729', '124261', '19'), +('8', '100', '9', '67098', '119177', '19'), +('8', '100', '9', '111429', '113426', '19'), +('8', '100', '9', '111129', '99354', '19'), +('8', '100', '15', '111348', '117841', '19'), +('8', '100', '15', '111343', '117582', '19'), +('8', '100', '15', '111345', '117336', '19'), +('8', '100', '15', '111341', '117318', '19'), +('8', '100', '20', '111354', '127122', '19'), +('8', '100', '20', '111355', '126591', '19'), +('8', '100', '20', '111351', '126260', '19'), +('8', '100', '20', '111352', '126101', '19'), +('8', '100', '12', '111730', '126254', '19'), +('8', '100', '12', '111430', '115247', '19'), +('8', '100', '12', '111130', '100909', '19'), +('8', '100', '12', '104814', '93023', '19'), +('8', '100', '18', '111734', '130755', '19'), +('8', '100', '18', '111434', '119450', '19'), +('8', '100', '18', '111134', '105392', '19'), +('8', '100', '18', '105378', '91407', '19'), +('8', '100', '19', '111731', '127361', '19'), +('8', '100', '19', '111431', '116289', '19'), +('8', '100', '19', '111131', '102206', '19'), +('8', '100', '19', '105263', '88201', '19'), +('8', '100', '13', '111871', '155278', '19'), +('8', '100', '13', '111815', '153281', '19'), +('8', '100', '13', '111512', '145749', '19'), +('8', '100', '13', '111515', '145719', '19'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '100', '14', '111871', '155278', '19'), +('8', '100', '14', '111815', '153281', '19'), +('8', '100', '14', '111512', '145749', '19'), +('8', '100', '14', '111515', '145719', '19'), +('8', '100', '11', '133816', '149765', '19'), +('8', '100', '11', '111336', '117529', '19'), +('8', '100', '11', '111338', '117477', '19'), +('8', '100', '11', '111333', '117205', '19'), +('8', '101', '22', '21807', '0', '20'), +('8', '101', '22', '21805', '0', '20'), +('8', '101', '22', '61948', '0', '20'), +('8', '101', '22', '12425', '0', '20'), +('8', '101', '1', '98769', '192828', '20'), +('8', '101', '1', '111309', '117819', '20'), +('8', '101', '1', '111300', '117428', '20'), +('8', '101', '1', '111307', '117332', '20'), +('8', '101', '2', '111732', '128480', '20'), +('8', '101', '2', '111432', '117350', '20'), +('8', '101', '2', '111132', '103100', '20'), +('8', '101', '2', '104704', '94236', '20'), +('8', '101', '3', '111315', '117689', '20'), +('8', '101', '3', '111313', '117595', '20'), +('8', '101', '3', '111312', '117345', '20'), +('8', '101', '3', '111316', '116839', '20'), +('8', '101', '5', '111318', '117290', '20'), +('8', '101', '5', '111319', '117045', '20'), +('8', '101', '5', '111320', '116995', '20'), +('8', '101', '5', '111017', '103228', '20'), +('8', '101', '8', '111331', '117846', '20'), +('8', '101', '8', '111328', '117517', '20'), +('8', '101', '8', '111332', '117361', '20'), +('8', '101', '8', '111330', '117202', '20'), +('8', '101', '6', '111324', '117508', '20'), +('8', '101', '6', '111322', '117344', '20'), +('8', '101', '6', '111326', '116896', '20'), +('8', '101', '6', '111023', '103393', '20'), +('8', '101', '17', '111735', '134515', '20'), +('8', '101', '17', '111435', '123525', '20'), +('8', '101', '17', '111135', '109578', '20'), +('8', '101', '17', '105379', '95027', '20'), +('8', '101', '7', '111733', '128526', '20'), +('8', '101', '7', '111433', '117186', '20'), +('8', '101', '7', '111133', '102988', '20'), +('8', '101', '7', '104929', '94022', '20'), +('8', '101', '9', '111729', '124263', '20'), +('8', '101', '9', '67098', '119179', '20'), +('8', '101', '9', '111429', '113428', '20'), +('8', '101', '9', '111129', '99356', '20'), +('8', '101', '15', '111348', '117843', '20'), +('8', '101', '15', '111343', '117584', '20'), +('8', '101', '15', '111345', '117338', '20'), +('8', '101', '15', '111341', '117321', '20'), +('8', '101', '20', '111354', '127124', '20'), +('8', '101', '20', '111355', '126592', '20'), +('8', '101', '20', '111351', '126262', '20'), +('8', '101', '20', '111352', '126103', '20'), +('8', '101', '12', '111730', '126256', '20'), +('8', '101', '12', '111430', '115249', '20'), +('8', '101', '12', '111130', '100911', '20'), +('8', '101', '12', '104814', '93025', '20'), +('8', '101', '18', '111734', '130756', '20'), +('8', '101', '18', '111434', '119451', '20'), +('8', '101', '18', '111134', '105393', '20'), +('8', '101', '18', '105378', '91408', '20'), +('8', '101', '19', '111731', '127363', '20'), +('8', '101', '19', '111431', '116290', '20'), +('8', '101', '19', '111131', '102208', '20'), +('8', '101', '19', '105263', '88202', '20'), +('8', '101', '13', '111871', '155680', '20'), +('8', '101', '13', '111815', '153683', '20'), +('8', '101', '13', '111512', '146151', '20'), +('8', '101', '13', '111515', '146120', '20'), +('8', '101', '14', '111871', '155680', '20'), +('8', '101', '14', '111815', '153683', '20'), +('8', '101', '14', '111512', '146151', '20'), +('8', '101', '14', '111515', '146120', '20'), +('8', '101', '11', '133816', '149767', '20'), +('8', '101', '11', '111336', '117532', '20'), +('8', '101', '11', '111338', '117480', '20'), +('8', '101', '11', '111333', '117207', '20'), +('8', '102', '22', '21807', '0', '20'), +('8', '102', '22', '21805', '0', '20'), +('8', '102', '22', '61948', '0', '20'), +('8', '102', '22', '12425', '0', '20'), +('8', '102', '1', '98769', '192830', '20'), +('8', '102', '1', '111309', '117822', '20'), +('8', '102', '1', '111300', '117430', '20'), +('8', '102', '1', '111307', '117335', '20'), +('8', '102', '2', '111732', '128482', '20'), +('8', '102', '2', '111432', '117352', '20'), +('8', '102', '2', '111132', '103102', '20'), +('8', '102', '2', '104704', '94238', '20'), +('8', '102', '3', '111315', '117691', '20'), +('8', '102', '3', '111313', '117597', '20'), +('8', '102', '3', '111312', '117347', '20'), +('8', '102', '3', '111316', '116841', '20'), +('8', '102', '5', '111318', '117293', '20'), +('8', '102', '5', '111319', '117048', '20'), +('8', '102', '5', '111320', '116997', '20'), +('8', '102', '5', '111017', '103230', '20'), +('8', '102', '8', '111331', '117848', '20'), +('8', '102', '8', '111328', '117519', '20'), +('8', '102', '8', '111332', '117363', '20'), +('8', '102', '8', '111330', '117204', '20'), +('8', '102', '6', '111324', '117510', '20'), +('8', '102', '6', '111322', '117346', '20'), +('8', '102', '6', '111326', '116898', '20'), +('8', '102', '6', '111023', '103395', '20'), +('8', '102', '17', '111735', '134517', '20'), +('8', '102', '17', '111435', '123527', '20'), +('8', '102', '17', '111135', '109579', '20'), +('8', '102', '17', '105379', '95029', '20'), +('8', '102', '7', '111733', '128528', '20'), +('8', '102', '7', '111433', '117188', '20'), +('8', '102', '7', '111133', '102990', '20'), +('8', '102', '7', '104929', '94024', '20'), +('8', '102', '9', '111729', '124265', '20'), +('8', '102', '9', '67098', '119180', '20'), +('8', '102', '9', '111429', '113430', '20'), +('8', '102', '9', '111129', '99358', '20'), +('8', '102', '15', '111348', '117845', '20'), +('8', '102', '15', '111343', '117585', '20'), +('8', '102', '15', '111345', '117340', '20'), +('8', '102', '15', '111341', '117324', '20'), +('8', '102', '20', '111354', '127127', '20'), +('8', '102', '20', '111355', '126594', '20'), +('8', '102', '20', '111351', '126264', '20'), +('8', '102', '20', '111352', '126105', '20'), +('8', '102', '12', '111730', '126258', '20'), +('8', '102', '12', '111430', '115250', '20'), +('8', '102', '12', '111130', '100913', '20'), +('8', '102', '12', '104814', '93027', '20'), +('8', '102', '18', '111734', '130756', '20'), +('8', '102', '18', '111434', '119451', '20'), +('8', '102', '18', '111134', '105394', '20'), +('8', '102', '18', '105378', '91408', '20'), +('8', '102', '19', '111731', '127364', '20'), +('8', '102', '19', '111431', '116292', '20'), +('8', '102', '19', '111131', '102209', '20'), +('8', '102', '19', '105263', '88204', '20'), +('8', '102', '13', '111871', '155749', '20'), +('8', '102', '13', '111815', '153752', '20'), +('8', '102', '13', '111512', '146219', '20'), +('8', '102', '13', '111515', '146188', '20'), +('8', '102', '14', '111871', '155749', '20'), +('8', '102', '14', '111815', '153752', '20'), +('8', '102', '14', '111512', '146219', '20'), +('8', '102', '14', '111515', '146188', '20'), +('8', '102', '11', '133816', '149769', '20'), +('8', '102', '11', '111336', '117534', '20'), +('8', '102', '11', '111338', '117482', '20'), +('8', '102', '11', '111333', '117209', '20'), +('8', '103', '22', '21807', '0', '20'), +('8', '103', '22', '21805', '0', '20'), +('8', '103', '22', '61948', '0', '20'), +('8', '103', '22', '12425', '0', '20'), +('8', '103', '1', '98769', '192832', '20'), +('8', '103', '1', '111309', '117824', '20'), +('8', '103', '1', '111300', '117432', '20'), +('8', '103', '1', '111307', '117338', '20'), +('8', '103', '2', '111732', '128484', '20'), +('8', '103', '2', '111432', '117354', '20'), +('8', '103', '2', '111132', '103104', '20'), +('8', '103', '2', '104704', '94240', '20'), +('8', '103', '3', '111315', '117694', '20'), +('8', '103', '3', '111313', '117599', '20'), +('8', '103', '3', '111312', '117349', '20'), +('8', '103', '3', '111316', '116843', '20'), +('8', '103', '5', '111318', '117295', '20'), +('8', '103', '5', '111319', '117051', '20'), +('8', '103', '5', '111320', '117000', '20'), +('8', '103', '5', '111017', '103232', '20'), +('8', '103', '8', '111331', '117851', '20'), +('8', '103', '8', '111328', '117522', '20'), +('8', '103', '8', '111332', '117365', '20'), +('8', '103', '8', '111330', '117206', '20'), +('8', '103', '6', '111324', '117513', '20'), +('8', '103', '6', '111322', '117348', '20'), +('8', '103', '6', '111326', '116901', '20'), +('8', '103', '6', '111023', '103398', '20'), +('8', '103', '17', '111735', '134518', '20'), +('8', '103', '17', '111435', '123528', '20'), +('8', '103', '17', '111135', '109581', '20'), +('8', '103', '17', '105379', '95030', '20'), +('8', '103', '7', '111733', '128530', '20'), +('8', '103', '7', '111433', '117190', '20'), +('8', '103', '7', '111133', '102992', '20'), +('8', '103', '7', '104929', '94026', '20'), +('8', '103', '9', '111729', '124267', '20'), +('8', '103', '9', '67098', '119182', '20'), +('8', '103', '9', '111429', '113432', '20'), +('8', '103', '9', '111129', '99359', '20'), +('8', '103', '15', '111348', '117847', '20'), +('8', '103', '15', '111343', '117587', '20'), +('8', '103', '15', '111345', '117342', '20'), +('8', '103', '15', '111341', '117328', '20'), +('8', '103', '20', '111354', '127129', '20'), +('8', '103', '20', '111355', '126595', '20'), +('8', '103', '20', '111351', '126266', '20'), +('8', '103', '20', '111352', '126107', '20'), +('8', '103', '12', '111730', '126259', '20'), +('8', '103', '12', '111430', '115252', '20'), +('8', '103', '12', '111130', '100914', '20'), +('8', '103', '12', '104814', '93028', '20'), +('8', '103', '18', '111734', '130757', '20'), +('8', '103', '18', '111434', '119452', '20'), +('8', '103', '18', '111134', '105395', '20'), +('8', '103', '18', '105378', '91409', '20'), +('8', '103', '19', '111731', '127365', '20'), +('8', '103', '19', '111431', '116293', '20'), +('8', '103', '19', '111131', '102210', '20'), +('8', '103', '19', '105263', '88205', '20'), +('8', '103', '13', '111871', '155817', '20'), +('8', '103', '13', '111815', '153820', '20'), +('8', '103', '13', '111512', '146287', '20'), +('8', '103', '13', '111515', '146256', '20'), +('8', '103', '14', '111871', '155817', '20'), +('8', '103', '14', '111815', '153820', '20'), +('8', '103', '14', '111512', '146287', '20'), +('8', '103', '14', '111515', '146256', '20'), +('8', '103', '11', '133816', '149771', '20'), +('8', '103', '11', '111336', '117536', '20'), +('8', '103', '11', '111338', '117484', '20'), +('8', '103', '11', '111333', '117211', '20'), +('8', '104', '22', '21807', '0', '20'), +('8', '104', '22', '21805', '0', '20'), +('8', '104', '22', '61948', '0', '20'), +('8', '104', '22', '12425', '0', '20'), +('8', '104', '1', '98769', '192833', '20'), +('8', '104', '1', '111309', '117827', '20'), +('8', '104', '1', '111300', '117435', '20'), +('8', '104', '1', '111307', '117341', '20'), +('8', '104', '2', '111732', '128486', '20'), +('8', '104', '2', '111432', '117356', '20'), +('8', '104', '2', '111132', '103106', '20'), +('8', '104', '2', '104704', '94243', '20'), +('8', '104', '3', '111315', '117697', '20'), +('8', '104', '3', '111313', '117601', '20'), +('8', '104', '3', '111312', '117351', '20'), +('8', '104', '3', '111316', '116846', '20'), +('8', '104', '5', '111318', '117297', '20'), +('8', '104', '5', '111319', '117054', '20'), +('8', '104', '5', '111320', '117002', '20'), +('8', '104', '5', '111017', '103235', '20'), +('8', '104', '8', '111331', '117853', '20'), +('8', '104', '8', '111328', '117525', '20'), +('8', '104', '8', '111332', '117367', '20'), +('8', '104', '8', '111330', '117208', '20'), +('8', '104', '6', '111324', '117515', '20'), +('8', '104', '6', '111322', '117350', '20'), +('8', '104', '6', '111326', '116903', '20'), +('8', '104', '6', '111023', '103400', '20'), +('8', '104', '17', '111735', '134520', '20'), +('8', '104', '17', '111435', '123530', '20'), +('8', '104', '17', '111135', '109583', '20'), +('8', '104', '17', '105379', '95032', '20'), +('8', '104', '7', '111733', '128531', '20'), +('8', '104', '7', '111433', '117191', '20'), +('8', '104', '7', '111133', '102994', '20'), +('8', '104', '7', '104929', '94028', '20'), +('8', '104', '9', '111729', '124269', '20'), +('8', '104', '9', '67098', '119184', '20'), +('8', '104', '9', '111429', '113434', '20'), +('8', '104', '9', '111129', '99361', '20'), +('8', '104', '15', '111348', '117849', '20'), +('8', '104', '15', '111343', '117589', '20'), +('8', '104', '15', '111345', '117345', '20'), +('8', '104', '15', '111341', '117331', '20'), +('8', '104', '20', '111354', '127131', '20'), +('8', '104', '20', '111355', '126597', '20'), +('8', '104', '20', '111351', '126268', '20'), +('8', '104', '20', '111352', '126109', '20'), +('8', '104', '12', '111730', '126261', '20'), +('8', '104', '12', '111430', '115254', '20'), +('8', '104', '12', '111130', '100916', '20'), +('8', '104', '12', '104814', '93030', '20'), +('8', '104', '18', '111734', '130758', '20'), +('8', '104', '18', '111434', '119453', '20'), +('8', '104', '18', '111134', '105395', '20'), +('8', '104', '18', '105378', '91410', '20'), +('8', '104', '19', '111731', '127367', '20'), +('8', '104', '19', '111431', '116294', '20'), +('8', '104', '19', '111131', '102212', '20'), +('8', '104', '19', '105263', '88207', '20'), +('8', '104', '13', '111871', '155886', '20'), +('8', '104', '13', '111815', '153888', '20'), +('8', '104', '13', '111512', '146356', '20'), +('8', '104', '13', '111515', '146325', '20'), +('8', '104', '14', '111871', '155886', '20'), +('8', '104', '14', '111815', '153888', '20'), +('8', '104', '14', '111512', '146356', '20'), +('8', '104', '14', '111515', '146325', '20'), +('8', '104', '11', '133816', '149772', '20'), +('8', '104', '11', '111336', '117538', '20'), +('8', '104', '11', '111338', '117487', '20'), +('8', '104', '11', '111333', '117213', '20'), +('8', '105', '22', '21807', '0', '23'), +('8', '105', '22', '21805', '0', '23'), +('8', '105', '22', '61948', '0', '23'), +('8', '105', '22', '12425', '0', '23'), +('8', '105', '1', '98769', '192835', '23'), +('8', '105', '1', '111309', '117830', '23'), +('8', '105', '1', '111300', '117437', '23'), +('8', '105', '1', '111307', '117345', '23'), +('8', '105', '2', '111732', '128489', '23'), +('8', '105', '2', '111432', '117359', '23'), +('8', '105', '2', '111132', '103109', '23'), +('8', '105', '2', '104704', '94245', '23'), +('8', '105', '3', '111315', '117700', '23'), +('8', '105', '3', '111313', '117603', '23'), +('8', '105', '3', '111312', '117353', '23'), +('8', '105', '3', '111316', '116848', '23'), +('8', '105', '5', '111318', '117300', '23'), +('8', '105', '5', '111319', '117056', '23'), +('8', '105', '5', '111320', '117004', '23'), +('8', '105', '5', '111017', '103237', '23'), +('8', '105', '8', '111331', '117855', '23'), +('8', '105', '8', '111328', '117528', '23'), +('8', '105', '8', '111332', '117370', '23'), +('8', '105', '8', '111330', '117210', '23'), +('8', '105', '6', '111324', '117517', '23'), +('8', '105', '6', '111322', '117352', '23'), +('8', '105', '6', '111326', '116906', '23'), +('8', '105', '6', '111023', '103402', '23'), +('8', '105', '17', '111735', '134522', '23'), +('8', '105', '17', '111435', '123532', '23'), +('8', '105', '17', '111135', '109584', '23'), +('8', '105', '17', '105379', '95034', '23'), +('8', '105', '7', '111733', '128533', '23'), +('8', '105', '7', '111433', '117193', '23'), +('8', '105', '7', '111133', '102996', '23'), +('8', '105', '7', '104929', '94030', '23'), +('8', '105', '9', '111729', '124271', '23'), +('8', '105', '9', '67098', '119186', '23'), +('8', '105', '9', '111429', '113436', '23'), +('8', '105', '9', '111129', '99363', '23'), +('8', '105', '15', '111348', '117851', '23'), +('8', '105', '15', '111343', '117591', '23'), +('8', '105', '15', '111345', '117347', '23'), +('8', '105', '15', '111341', '117334', '23'), +('8', '105', '20', '111354', '127134', '23'), +('8', '105', '20', '111355', '126598', '23'), +('8', '105', '20', '111351', '126270', '23'), +('8', '105', '20', '111352', '126111', '23'), +('8', '105', '12', '111730', '126263', '23'), +('8', '105', '12', '111430', '115255', '23'), +('8', '105', '12', '111130', '100918', '23'), +('8', '105', '12', '104814', '93032', '23'), +('8', '105', '18', '111734', '130759', '23'), +('8', '105', '18', '111434', '119454', '23'), +('8', '105', '18', '111134', '105396', '23'), +('8', '105', '18', '105378', '91411', '23'), +('8', '105', '19', '111731', '127368', '23'), +('8', '105', '19', '111431', '116296', '23'), +('8', '105', '19', '111131', '102213', '23'), +('8', '105', '19', '105263', '88208', '23'), +('8', '105', '13', '111871', '155954', '23'), +('8', '105', '13', '111815', '153956', '23'), +('8', '105', '13', '111512', '146424', '23'), +('8', '105', '13', '111515', '146393', '23'), +('8', '105', '14', '111871', '155954', '23'), +('8', '105', '14', '111815', '153956', '23'), +('8', '105', '14', '111512', '146424', '23'), +('8', '105', '14', '111515', '146393', '23'), +('8', '105', '11', '133816', '149774', '23'), +('8', '105', '11', '111336', '117540', '23'), +('8', '105', '11', '111338', '117489', '23'), +('8', '105', '11', '111333', '117215', '23'), +('8', '105', '22', '21807', '0', '22'), +('8', '105', '22', '21805', '0', '22'), +('8', '105', '22', '61948', '0', '22'), +('8', '105', '22', '12425', '0', '22'), +('8', '105', '1', '98769', '192835', '22'), +('8', '105', '1', '111309', '117830', '22'), +('8', '105', '1', '111300', '117437', '22'), +('8', '105', '1', '111307', '117345', '22'), +('8', '105', '2', '111732', '128489', '22'), +('8', '105', '2', '111432', '117359', '22'), +('8', '105', '2', '111132', '103109', '22'), +('8', '105', '2', '104704', '94245', '22'), +('8', '105', '3', '111315', '117700', '22'), +('8', '105', '3', '111313', '117603', '22'), +('8', '105', '3', '111312', '117353', '22'), +('8', '105', '3', '111316', '116848', '22'), +('8', '105', '5', '111318', '117300', '22'), +('8', '105', '5', '111319', '117056', '22'), +('8', '105', '5', '111320', '117004', '22'), +('8', '105', '5', '111017', '103237', '22'), +('8', '105', '8', '111331', '117855', '22'), +('8', '105', '8', '111328', '117528', '22'), +('8', '105', '8', '111332', '117370', '22'), +('8', '105', '8', '111330', '117210', '22'), +('8', '105', '6', '111324', '117517', '22'), +('8', '105', '6', '111322', '117352', '22'), +('8', '105', '6', '111326', '116906', '22'), +('8', '105', '6', '111023', '103402', '22'), +('8', '105', '17', '111735', '134522', '22'), +('8', '105', '17', '111435', '123532', '22'), +('8', '105', '17', '111135', '109584', '22'), +('8', '105', '17', '105379', '95034', '22'), +('8', '105', '7', '111733', '128533', '22'), +('8', '105', '7', '111433', '117193', '22'), +('8', '105', '7', '111133', '102996', '22'), +('8', '105', '7', '104929', '94030', '22'), +('8', '105', '9', '111729', '124271', '22'), +('8', '105', '9', '67098', '119186', '22'), +('8', '105', '9', '111429', '113436', '22'), +('8', '105', '9', '111129', '99363', '22'), +('8', '105', '15', '111348', '117851', '22'), +('8', '105', '15', '111343', '117591', '22'), +('8', '105', '15', '111345', '117347', '22'), +('8', '105', '15', '111341', '117334', '22'), +('8', '105', '20', '111354', '127134', '22'), +('8', '105', '20', '111355', '126598', '22'), +('8', '105', '20', '111351', '126270', '22'), +('8', '105', '20', '111352', '126111', '22'), +('8', '105', '12', '111730', '126263', '22'), +('8', '105', '12', '111430', '115255', '22'), +('8', '105', '12', '111130', '100918', '22'), +('8', '105', '12', '104814', '93032', '22'), +('8', '105', '18', '111734', '130759', '22'), +('8', '105', '18', '111434', '119454', '22'), +('8', '105', '18', '111134', '105396', '22'), +('8', '105', '18', '105378', '91411', '22'), +('8', '105', '19', '111731', '127368', '22'), +('8', '105', '19', '111431', '116296', '22'), +('8', '105', '19', '111131', '102213', '22'), +('8', '105', '19', '105263', '88208', '22'), +('8', '105', '13', '111871', '155954', '22'), +('8', '105', '13', '111815', '153956', '22'), +('8', '105', '13', '111512', '146424', '22'), +('8', '105', '13', '111515', '146393', '22'), +('8', '105', '14', '111871', '155954', '22'), +('8', '105', '14', '111815', '153956', '22'), +('8', '105', '14', '111512', '146424', '22'), +('8', '105', '14', '111515', '146393', '22'), +('8', '105', '11', '133816', '149774', '22'), +('8', '105', '11', '111336', '117540', '22'), +('8', '105', '11', '111338', '117489', '22'), +('8', '105', '11', '111333', '117215', '22'), +('8', '105', '22', '21807', '0', '21'), +('8', '105', '22', '21805', '0', '21'), +('8', '105', '22', '61948', '0', '21'), +('8', '105', '22', '12425', '0', '21'), +('8', '105', '1', '98769', '192835', '21'), +('8', '105', '1', '111309', '117830', '21'), +('8', '105', '1', '111300', '117437', '21'), +('8', '105', '1', '111307', '117345', '21'), +('8', '105', '2', '111732', '128489', '21'), +('8', '105', '2', '111432', '117359', '21'), +('8', '105', '2', '111132', '103109', '21'), +('8', '105', '2', '104704', '94245', '21'), +('8', '105', '3', '111315', '117700', '21'), +('8', '105', '3', '111313', '117603', '21'), +('8', '105', '3', '111312', '117353', '21'), +('8', '105', '3', '111316', '116848', '21'), +('8', '105', '5', '111318', '117300', '21'), +('8', '105', '5', '111319', '117056', '21'), +('8', '105', '5', '111320', '117004', '21'), +('8', '105', '5', '111017', '103237', '21'), +('8', '105', '8', '111331', '117855', '21'), +('8', '105', '8', '111328', '117528', '21'), +('8', '105', '8', '111332', '117370', '21'), +('8', '105', '8', '111330', '117210', '21'), +('8', '105', '6', '111324', '117517', '21'), +('8', '105', '6', '111322', '117352', '21'), +('8', '105', '6', '111326', '116906', '21'), +('8', '105', '6', '111023', '103402', '21'), +('8', '105', '17', '111735', '134522', '21'), +('8', '105', '17', '111435', '123532', '21'), +('8', '105', '17', '111135', '109584', '21'), +('8', '105', '17', '105379', '95034', '21'), +('8', '105', '7', '111733', '128533', '21'), +('8', '105', '7', '111433', '117193', '21'), +('8', '105', '7', '111133', '102996', '21'), +('8', '105', '7', '104929', '94030', '21'), +('8', '105', '9', '111729', '124271', '21'), +('8', '105', '9', '67098', '119186', '21'), +('8', '105', '9', '111429', '113436', '21'), +('8', '105', '9', '111129', '99363', '21'), +('8', '105', '15', '111348', '117851', '21'), +('8', '105', '15', '111343', '117591', '21'), +('8', '105', '15', '111345', '117347', '21'), +('8', '105', '15', '111341', '117334', '21'), +('8', '105', '20', '111354', '127134', '21'), +('8', '105', '20', '111355', '126598', '21'), +('8', '105', '20', '111351', '126270', '21'), +('8', '105', '20', '111352', '126111', '21'), +('8', '105', '12', '111730', '126263', '21'), +('8', '105', '12', '111430', '115255', '21'), +('8', '105', '12', '111130', '100918', '21'), +('8', '105', '12', '104814', '93032', '21'), +('8', '105', '18', '111734', '130759', '21'), +('8', '105', '18', '111434', '119454', '21'), +('8', '105', '18', '111134', '105396', '21'), +('8', '105', '18', '105378', '91411', '21'), +('8', '105', '19', '111731', '127368', '21'), +('8', '105', '19', '111431', '116296', '21'), +('8', '105', '19', '111131', '102213', '21'), +('8', '105', '19', '105263', '88208', '21'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '105', '13', '111871', '155954', '21'), +('8', '105', '13', '111815', '153956', '21'), +('8', '105', '13', '111512', '146424', '21'), +('8', '105', '13', '111515', '146393', '21'), +('8', '105', '14', '111871', '155954', '21'), +('8', '105', '14', '111815', '153956', '21'), +('8', '105', '14', '111512', '146424', '21'), +('8', '105', '14', '111515', '146393', '21'), +('8', '105', '11', '133816', '149774', '21'), +('8', '105', '11', '111336', '117540', '21'), +('8', '105', '11', '111338', '117489', '21'), +('8', '105', '11', '111333', '117215', '21'), +('8', '106', '22', '21807', '0', '23'), +('8', '106', '22', '21805', '0', '23'), +('8', '106', '22', '61948', '0', '23'), +('8', '106', '22', '12425', '0', '23'), +('8', '106', '1', '98769', '192837', '23'), +('8', '106', '1', '111309', '117832', '23'), +('8', '106', '1', '111300', '117439', '23'), +('8', '106', '1', '111307', '117348', '23'), +('8', '106', '2', '111732', '128491', '23'), +('8', '106', '2', '111432', '117361', '23'), +('8', '106', '2', '111132', '103111', '23'), +('8', '106', '2', '104704', '94247', '23'), +('8', '106', '3', '111315', '117702', '23'), +('8', '106', '3', '111313', '117605', '23'), +('8', '106', '3', '111312', '117356', '23'), +('8', '106', '3', '111316', '116850', '23'), +('8', '106', '5', '111318', '117302', '23'), +('8', '106', '5', '111319', '117059', '23'), +('8', '106', '5', '111320', '117006', '23'), +('8', '106', '5', '111017', '103239', '23'), +('8', '106', '8', '111331', '117857', '23'), +('8', '106', '8', '111328', '117531', '23'), +('8', '106', '8', '111332', '117372', '23'), +('8', '106', '8', '111330', '117212', '23'), +('8', '106', '6', '111324', '117520', '23'), +('8', '106', '6', '111322', '117354', '23'), +('8', '106', '6', '111326', '116908', '23'), +('8', '106', '6', '111023', '103405', '23'), +('8', '106', '17', '111735', '134524', '23'), +('8', '106', '17', '111435', '123534', '23'), +('8', '106', '17', '111135', '109586', '23'), +('8', '106', '17', '105379', '95035', '23'), +('8', '106', '7', '111733', '128535', '23'), +('8', '106', '7', '111433', '117195', '23'), +('8', '106', '7', '111133', '102998', '23'), +('8', '106', '7', '104929', '94032', '23'), +('8', '106', '9', '111729', '124273', '23'), +('8', '106', '9', '67098', '119188', '23'), +('8', '106', '9', '111429', '113438', '23'), +('8', '106', '9', '111129', '99365', '23'), +('8', '106', '15', '111348', '117854', '23'), +('8', '106', '15', '111343', '117593', '23'), +('8', '106', '15', '111345', '117350', '23'), +('8', '106', '15', '111341', '117337', '23'), +('8', '106', '20', '111354', '127136', '23'), +('8', '106', '20', '111355', '126600', '23'), +('8', '106', '20', '111351', '126272', '23'), +('8', '106', '20', '111352', '126114', '23'), +('8', '106', '12', '111730', '126265', '23'), +('8', '106', '12', '111430', '115257', '23'), +('8', '106', '12', '111130', '100920', '23'), +('8', '106', '12', '104814', '93033', '23'), +('8', '106', '18', '111734', '130760', '23'), +('8', '106', '18', '111434', '119455', '23'), +('8', '106', '18', '111134', '105397', '23'), +('8', '106', '18', '105378', '91411', '23'), +('8', '106', '19', '111731', '127370', '23'), +('8', '106', '19', '111431', '116297', '23'), +('8', '106', '19', '111131', '102215', '23'), +('8', '106', '19', '105263', '88210', '23'), +('8', '106', '13', '111871', '156023', '23'), +('8', '106', '13', '111815', '154025', '23'), +('8', '106', '13', '111512', '146492', '23'), +('8', '106', '13', '111515', '146461', '23'), +('8', '106', '14', '111871', '156023', '23'), +('8', '106', '14', '111815', '154025', '23'), +('8', '106', '14', '111512', '146492', '23'), +('8', '106', '14', '111515', '146461', '23'), +('8', '106', '11', '133816', '149776', '23'), +('8', '106', '11', '111336', '117543', '23'), +('8', '106', '11', '111338', '117492', '23'), +('8', '106', '11', '111333', '117216', '23'), +('8', '107', '22', '21807', '0', '23'), +('8', '107', '22', '21805', '0', '23'), +('8', '107', '22', '61948', '0', '23'), +('8', '107', '22', '12425', '0', '23'), +('8', '107', '1', '98769', '192838', '23'), +('8', '107', '1', '111309', '117835', '23'), +('8', '107', '1', '111300', '117441', '23'), +('8', '107', '1', '111307', '117351', '23'), +('8', '107', '2', '111732', '128493', '23'), +('8', '107', '2', '111432', '117363', '23'), +('8', '107', '2', '111132', '103113', '23'), +('8', '107', '2', '104704', '94249', '23'), +('8', '107', '3', '111315', '117705', '23'), +('8', '107', '3', '111313', '117607', '23'), +('8', '107', '3', '111312', '117358', '23'), +('8', '107', '3', '111316', '116853', '23'), +('8', '107', '5', '111318', '117304', '23'), +('8', '107', '5', '111319', '117062', '23'), +('8', '107', '5', '111320', '117009', '23'), +('8', '107', '5', '111017', '103242', '23'), +('8', '107', '8', '111331', '117860', '23'), +('8', '107', '8', '111328', '117534', '23'), +('8', '107', '8', '111332', '117374', '23'), +('8', '107', '8', '111330', '117214', '23'), +('8', '107', '6', '111324', '117522', '23'), +('8', '107', '6', '111322', '117356', '23'), +('8', '107', '6', '111326', '116911', '23'), +('8', '107', '6', '111023', '103407', '23'), +('8', '107', '17', '111735', '134525', '23'), +('8', '107', '17', '111435', '123535', '23'), +('8', '107', '17', '111135', '109588', '23'), +('8', '107', '17', '105379', '95037', '23'), +('8', '107', '7', '111733', '128537', '23'), +('8', '107', '7', '111433', '117197', '23'), +('8', '107', '7', '111133', '103000', '23'), +('8', '107', '7', '104929', '94034', '23'), +('8', '107', '9', '111729', '124275', '23'), +('8', '107', '9', '67098', '119190', '23'), +('8', '107', '9', '111429', '113440', '23'), +('8', '107', '9', '111129', '99367', '23'), +('8', '107', '15', '111348', '117856', '23'), +('8', '107', '15', '111343', '117594', '23'), +('8', '107', '15', '111345', '117352', '23'), +('8', '107', '15', '111341', '117341', '23'), +('8', '107', '20', '111354', '127138', '23'), +('8', '107', '20', '111355', '126602', '23'), +('8', '107', '20', '111351', '126275', '23'), +('8', '107', '20', '111352', '126116', '23'), +('8', '107', '12', '111730', '126266', '23'), +('8', '107', '12', '111430', '115259', '23'), +('8', '107', '12', '111130', '100921', '23'), +('8', '107', '12', '104814', '93035', '23'), +('8', '107', '18', '111734', '130760', '23'), +('8', '107', '18', '111434', '119455', '23'), +('8', '107', '18', '111134', '105398', '23'), +('8', '107', '18', '105378', '91412', '23'), +('8', '107', '19', '111731', '127371', '23'), +('8', '107', '19', '111431', '116299', '23'), +('8', '107', '19', '111131', '102216', '23'), +('8', '107', '19', '105263', '88211', '23'), +('8', '107', '13', '111871', '156092', '23'), +('8', '107', '13', '111815', '154093', '23'), +('8', '107', '13', '111512', '146561', '23'), +('8', '107', '13', '111515', '146529', '23'), +('8', '107', '14', '111871', '156092', '23'), +('8', '107', '14', '111815', '154093', '23'), +('8', '107', '14', '111512', '146561', '23'), +('8', '107', '14', '111515', '146529', '23'), +('8', '107', '11', '133816', '149777', '23'), +('8', '107', '11', '111336', '117545', '23'), +('8', '107', '11', '111338', '117494', '23'), +('8', '107', '11', '111333', '117218', '23'), +('8', '108', '22', '21807', '0', '23'), +('8', '108', '22', '21805', '0', '23'), +('8', '108', '22', '61948', '0', '23'), +('8', '108', '22', '12425', '0', '23'), +('8', '108', '1', '98769', '192840', '23'), +('8', '108', '1', '111309', '117837', '23'), +('8', '108', '1', '111300', '117443', '23'), +('8', '108', '1', '111307', '117354', '23'), +('8', '108', '2', '111732', '128496', '23'), +('8', '108', '2', '111432', '117366', '23'), +('8', '108', '2', '111132', '103116', '23'), +('8', '108', '2', '104704', '94252', '23'), +('8', '108', '3', '111315', '117708', '23'), +('8', '108', '3', '111313', '117609', '23'), +('8', '108', '3', '111312', '117360', '23'), +('8', '108', '3', '111316', '116855', '23'), +('8', '108', '5', '111318', '117307', '23'), +('8', '108', '5', '111319', '117065', '23'), +('8', '108', '5', '111320', '117011', '23'), +('8', '108', '5', '111017', '103244', '23'), +('8', '108', '8', '111331', '117862', '23'), +('8', '108', '8', '111328', '117537', '23'), +('8', '108', '8', '111332', '117376', '23'), +('8', '108', '8', '111330', '117216', '23'), +('8', '108', '6', '111324', '117525', '23'), +('8', '108', '6', '111322', '117358', '23'), +('8', '108', '6', '111326', '116914', '23'), +('8', '108', '6', '111023', '103410', '23'), +('8', '108', '17', '111735', '134527', '23'), +('8', '108', '17', '111435', '123537', '23'), +('8', '108', '17', '111135', '109589', '23'), +('8', '108', '17', '105379', '95039', '23'), +('8', '108', '7', '111733', '128539', '23'), +('8', '108', '7', '111433', '117199', '23'), +('8', '108', '7', '111133', '103001', '23'), +('8', '108', '7', '104929', '94035', '23'), +('8', '108', '9', '111729', '124276', '23'), +('8', '108', '9', '67098', '119192', '23'), +('8', '108', '9', '111429', '113441', '23'), +('8', '108', '9', '111129', '99369', '23'), +('8', '108', '15', '111348', '117858', '23'), +('8', '108', '15', '111343', '117596', '23'), +('8', '108', '15', '111345', '117354', '23'), +('8', '108', '15', '111341', '117344', '23'), +('8', '108', '20', '111354', '127141', '23'), +('8', '108', '20', '111355', '126603', '23'), +('8', '108', '20', '111351', '126277', '23'), +('8', '108', '20', '111352', '126118', '23'), +('8', '108', '12', '111730', '126268', '23'), +('8', '108', '12', '111430', '115260', '23'), +('8', '108', '12', '111130', '100923', '23'), +('8', '108', '12', '104814', '93037', '23'), +('8', '108', '18', '111734', '130761', '23'), +('8', '108', '18', '111434', '119456', '23'), +('8', '108', '18', '111134', '105399', '23'), +('8', '108', '18', '105042', '91413', '23'), +('8', '108', '19', '111731', '127373', '23'), +('8', '108', '19', '111431', '116300', '23'), +('8', '108', '19', '111131', '102218', '23'), +('8', '108', '19', '105263', '88213', '23'), +('8', '108', '13', '111871', '156160', '23'), +('8', '108', '13', '111815', '154161', '23'), +('8', '108', '13', '111512', '146629', '23'), +('8', '108', '13', '111515', '146597', '23'), +('8', '108', '14', '111871', '156160', '23'), +('8', '108', '14', '111815', '154161', '23'), +('8', '108', '14', '111512', '146629', '23'), +('8', '108', '14', '111515', '146597', '23'), +('8', '108', '11', '133816', '149779', '23'), +('8', '108', '11', '111336', '117547', '23'), +('8', '108', '11', '111338', '117497', '23'), +('8', '108', '11', '111333', '117220', '23'), +('8', '109', '22', '21807', '0', '23'), +('8', '109', '22', '21805', '0', '23'), +('8', '109', '22', '61948', '0', '23'), +('8', '109', '22', '12425', '0', '23'), +('8', '109', '1', '98769', '192842', '23'), +('8', '109', '1', '111309', '117840', '23'), +('8', '109', '1', '111300', '117445', '23'), +('8', '109', '1', '111307', '117357', '23'), +('8', '109', '2', '111732', '128498', '23'), +('8', '109', '2', '111432', '117368', '23'), +('8', '109', '2', '111132', '103118', '23'), +('8', '109', '2', '104704', '94254', '23'), +('8', '109', '3', '111315', '117711', '23'), +('8', '109', '3', '111313', '117611', '23'), +('8', '109', '3', '111312', '117362', '23'), +('8', '109', '3', '111316', '116857', '23'), +('8', '109', '5', '111318', '117309', '23'), +('8', '109', '5', '111319', '117067', '23'), +('8', '109', '5', '111320', '117013', '23'), +('8', '109', '5', '111017', '103246', '23'), +('8', '109', '8', '111331', '117864', '23'), +('8', '109', '8', '111328', '117540', '23'), +('8', '109', '8', '111332', '117378', '23'), +('8', '109', '8', '111330', '117218', '23'), +('8', '109', '6', '111324', '117527', '23'), +('8', '109', '6', '111322', '117360', '23'), +('8', '109', '6', '111326', '116916', '23'), +('8', '109', '6', '111023', '103412', '23'), +('8', '109', '17', '111735', '134528', '23'), +('8', '109', '17', '111435', '123538', '23'), +('8', '109', '17', '111135', '109591', '23'), +('8', '109', '17', '105379', '95040', '23'), +('8', '109', '7', '111733', '128541', '23'), +('8', '109', '7', '111433', '117201', '23'), +('8', '109', '7', '111133', '103003', '23'), +('8', '109', '7', '104929', '94037', '23'), +('8', '109', '9', '111729', '124278', '23'), +('8', '109', '9', '67098', '119193', '23'), +('8', '109', '9', '111429', '113443', '23'), +('8', '109', '9', '111129', '99371', '23'), +('8', '109', '15', '111348', '117860', '23'), +('8', '109', '15', '111343', '117598', '23'), +('8', '109', '15', '111345', '117356', '23'), +('8', '109', '15', '111341', '117347', '23'), +('8', '109', '20', '111354', '127143', '23'), +('8', '109', '20', '111355', '126605', '23'), +('8', '109', '20', '111351', '126279', '23'), +('8', '109', '20', '111352', '126120', '23'), +('8', '109', '12', '111730', '126270', '23'), +('8', '109', '12', '111430', '115262', '23'), +('8', '109', '12', '111130', '100925', '23'), +('8', '109', '12', '104814', '93038', '23'), +('8', '109', '18', '111734', '130762', '23'), +('8', '109', '18', '111434', '119457', '23'), +('8', '109', '18', '111134', '105399', '23'), +('8', '109', '18', '105042', '91414', '23'), +('8', '109', '19', '111731', '127374', '23'), +('8', '109', '19', '111431', '116302', '23'), +('8', '109', '19', '111131', '102219', '23'), +('8', '109', '19', '105263', '88214', '23'), +('8', '109', '13', '111871', '156229', '23'), +('8', '109', '13', '111815', '154230', '23'), +('8', '109', '13', '111512', '146697', '23'), +('8', '109', '13', '111515', '146665', '23'), +('8', '109', '14', '111871', '156229', '23'), +('8', '109', '14', '111815', '154230', '23'), +('8', '109', '14', '111512', '146697', '23'), +('8', '109', '14', '111515', '146665', '23'), +('8', '109', '11', '133816', '149781', '23'), +('8', '109', '11', '111336', '117549', '23'), +('8', '109', '11', '111338', '117499', '23'), +('8', '109', '11', '111333', '117222', '23'), +('8', '110', '22', '12425', '0', '25'), +('8', '110', '22', '21807', '0', '25'), +('8', '110', '22', '21805', '0', '25'), +('8', '110', '22', '39342', '0', '25'), +('8', '110', '1', '98769', '192843', '25'), +('8', '110', '1', '111309', '117842', '25'), +('8', '110', '1', '111300', '117447', '25'), +('8', '110', '1', '111307', '117360', '25'), +('8', '110', '2', '111732', '128500', '25'), +('8', '110', '2', '111432', '117370', '25'), +('8', '110', '2', '111132', '103120', '25'), +('8', '110', '2', '104704', '94256', '25'), +('8', '110', '3', '111315', '117714', '25'), +('8', '110', '3', '111313', '117613', '25'), +('8', '110', '3', '111312', '117364', '25'), +('8', '110', '3', '111316', '116859', '25'), +('8', '110', '5', '111318', '117311', '25'), +('8', '110', '5', '111319', '117070', '25'), +('8', '110', '5', '111320', '117015', '25'), +('8', '110', '5', '111017', '103249', '25'), +('8', '110', '8', '111331', '117867', '25'), +('8', '110', '8', '111328', '117543', '25'), +('8', '110', '8', '111332', '117380', '25'), +('8', '110', '8', '111330', '117220', '25'), +('8', '110', '6', '111324', '117529', '25'), +('8', '110', '6', '111322', '117362', '25'), +('8', '110', '6', '111326', '116919', '25'), +('8', '110', '6', '111023', '103414', '25'), +('8', '110', '17', '111735', '134530', '25'), +('8', '110', '17', '111435', '123540', '25'), +('8', '110', '17', '111135', '109593', '25'), +('8', '110', '17', '105379', '95042', '25'), +('8', '110', '7', '111733', '128543', '25'), +('8', '110', '7', '111433', '117203', '25'), +('8', '110', '7', '111133', '103005', '25'), +('8', '110', '7', '104929', '94039', '25'), +('8', '110', '9', '111729', '124280', '25'), +('8', '110', '9', '67098', '119195', '25'), +('8', '110', '9', '111429', '113445', '25'), +('8', '110', '9', '111129', '99373', '25'), +('8', '110', '15', '111348', '117862', '25'), +('8', '110', '15', '111343', '117600', '25'), +('8', '110', '15', '111345', '117359', '25'), +('8', '110', '15', '111341', '117350', '25'), +('8', '110', '20', '111354', '127145', '25'), +('8', '110', '20', '111355', '126606', '25'), +('8', '110', '20', '111351', '126281', '25'), +('8', '110', '20', '111352', '126122', '25'), +('8', '110', '12', '111730', '126271', '25'), +('8', '110', '12', '111430', '115264', '25'), +('8', '110', '12', '111130', '100926', '25'), +('8', '110', '12', '104814', '93040', '25'), +('8', '110', '18', '111734', '130763', '25'), +('8', '110', '18', '111434', '119458', '25'), +('8', '110', '18', '111134', '105400', '25'), +('8', '110', '18', '105378', '91414', '25'), +('8', '110', '19', '111731', '127376', '25'), +('8', '110', '19', '111431', '116303', '25'), +('8', '110', '19', '111131', '102221', '25'), +('8', '110', '19', '105263', '88216', '25'), +('8', '110', '13', '111871', '156631', '25'), +('8', '110', '13', '111815', '154631', '25'), +('8', '110', '13', '111512', '147099', '25'), +('8', '110', '13', '111515', '147067', '25'), +('8', '110', '14', '111871', '156631', '25'), +('8', '110', '14', '111815', '154631', '25'), +('8', '110', '14', '111512', '147099', '25'), +('8', '110', '14', '111515', '147067', '25'), +('8', '110', '11', '85213', '172609', '25'), +('8', '110', '11', '133816', '149783', '25'), +('8', '110', '11', '111336', '117552', '25'), +('8', '110', '11', '111338', '117502', '25'), +('8', '110', '22', '12425', '0', '24'), +('8', '110', '22', '21807', '0', '24'), +('8', '110', '22', '21805', '0', '24'), +('8', '110', '22', '39342', '0', '24'), +('8', '110', '1', '98769', '192843', '24'), +('8', '110', '1', '111309', '117842', '24'), +('8', '110', '1', '111300', '117447', '24'), +('8', '110', '1', '111307', '117360', '24'), +('8', '110', '2', '111732', '128500', '24'), +('8', '110', '2', '111432', '117370', '24'), +('8', '110', '2', '111132', '103120', '24'), +('8', '110', '2', '104704', '94256', '24'), +('8', '110', '3', '111315', '117714', '24'), +('8', '110', '3', '111313', '117613', '24'), +('8', '110', '3', '111312', '117364', '24'), +('8', '110', '3', '111316', '116859', '24'), +('8', '110', '5', '111318', '117311', '24'), +('8', '110', '5', '111319', '117070', '24'), +('8', '110', '5', '111320', '117015', '24'), +('8', '110', '5', '111017', '103249', '24'), +('8', '110', '8', '111331', '117867', '24'), +('8', '110', '8', '111328', '117543', '24'), +('8', '110', '8', '111332', '117380', '24'), +('8', '110', '8', '111330', '117220', '24'), +('8', '110', '6', '111324', '117529', '24'), +('8', '110', '6', '111322', '117362', '24'), +('8', '110', '6', '111326', '116919', '24'), +('8', '110', '6', '111023', '103414', '24'), +('8', '110', '17', '111735', '134530', '24'), +('8', '110', '17', '111435', '123540', '24'), +('8', '110', '17', '111135', '109593', '24'), +('8', '110', '17', '105379', '95042', '24'), +('8', '110', '7', '111733', '128543', '24'), +('8', '110', '7', '111433', '117203', '24'), +('8', '110', '7', '111133', '103005', '24'), +('8', '110', '7', '104929', '94039', '24'), +('8', '110', '9', '111729', '124280', '24'), +('8', '110', '9', '67098', '119195', '24'), +('8', '110', '9', '111429', '113445', '24'), +('8', '110', '9', '111129', '99373', '24'), +('8', '110', '15', '111348', '117862', '24'), +('8', '110', '15', '111343', '117600', '24'), +('8', '110', '15', '111345', '117359', '24'), +('8', '110', '15', '111341', '117350', '24'), +('8', '110', '20', '111354', '127145', '24'), +('8', '110', '20', '111355', '126606', '24'), +('8', '110', '20', '111351', '126281', '24'), +('8', '110', '20', '111352', '126122', '24'), +('8', '110', '12', '111730', '126271', '24'), +('8', '110', '12', '111430', '115264', '24'), +('8', '110', '12', '111130', '100926', '24'), +('8', '110', '12', '104814', '93040', '24'), +('8', '110', '18', '111734', '130763', '24'), +('8', '110', '18', '111434', '119458', '24'), +('8', '110', '18', '111134', '105400', '24'), +('8', '110', '18', '105378', '91414', '24'), +('8', '110', '19', '111731', '127376', '24'), +('8', '110', '19', '111431', '116303', '24'), +('8', '110', '19', '111131', '102221', '24'), +('8', '110', '19', '105263', '88216', '24'), +('8', '110', '13', '111871', '156631', '24'), +('8', '110', '13', '111815', '154631', '24'), +('8', '110', '13', '111512', '147099', '24'), +('8', '110', '13', '111515', '147067', '24'), +('8', '110', '14', '111871', '156631', '24'), +('8', '110', '14', '111815', '154631', '24'), +('8', '110', '14', '111512', '147099', '24'), +('8', '110', '14', '111515', '147067', '24'), +('8', '110', '11', '85213', '172609', '24'), +('8', '110', '11', '133816', '149783', '24'), +('8', '110', '11', '111336', '117552', '24'), +('8', '110', '11', '111338', '117502', '24'), +('8', '111', '22', '12425', '0', '25'), +('8', '111', '22', '21807', '0', '25'), +('8', '111', '22', '21805', '0', '25'), +('8', '111', '22', '39342', '0', '25'), +('8', '111', '1', '98769', '192845', '25'), +('8', '111', '1', '111309', '117845', '25'), +('8', '111', '1', '111300', '117450', '25'), +('8', '111', '1', '111307', '117363', '25'), +('8', '111', '2', '111732', '128502', '25'), +('8', '111', '2', '111432', '117372', '25'), +('8', '111', '2', '111132', '103122', '25'), +('8', '111', '2', '104704', '94258', '25'), +('8', '111', '3', '111315', '117716', '25'), +('8', '111', '3', '111313', '117615', '25'), +('8', '111', '3', '111312', '117366', '25'), +('8', '111', '3', '111316', '116862', '25'), +('8', '111', '5', '111318', '117313', '25'), +('8', '111', '5', '111319', '117073', '25'), +('8', '111', '5', '111320', '117018', '25'), +('8', '111', '5', '111017', '103251', '25'), +('8', '111', '8', '111331', '117869', '25'), +('8', '111', '8', '111328', '117546', '25'), +('8', '111', '8', '111332', '117382', '25'), +('8', '111', '8', '111330', '117222', '25'), +('8', '111', '6', '111324', '117532', '25'), +('8', '111', '6', '111322', '117364', '25'), +('8', '111', '6', '111326', '116921', '25'), +('8', '111', '6', '111023', '103417', '25'), +('8', '111', '17', '111735', '134532', '25'), +('8', '111', '17', '111435', '123542', '25'), +('8', '111', '17', '111135', '109594', '25'), +('8', '111', '17', '105379', '95044', '25'), +('8', '111', '7', '111733', '128545', '25'), +('8', '111', '7', '111433', '117205', '25'), +('8', '111', '7', '111133', '103007', '25'), +('8', '111', '7', '104929', '94041', '25'), +('8', '111', '9', '111729', '124282', '25'), +('8', '111', '9', '67098', '119197', '25'), +('8', '111', '9', '111429', '113447', '25'), +('8', '111', '9', '111129', '99375', '25'), +('8', '111', '15', '111348', '117864', '25'), +('8', '111', '15', '111343', '117601', '25'), +('8', '111', '15', '111345', '117361', '25'), +('8', '111', '15', '111341', '117354', '25'), +('8', '111', '20', '111354', '127147', '25'), +('8', '111', '20', '111355', '126608', '25'), +('8', '111', '20', '111351', '126283', '25'), +('8', '111', '20', '111352', '126124', '25'), +('8', '111', '12', '111730', '126273', '25'), +('8', '111', '12', '111430', '115266', '25'), +('8', '111', '12', '111130', '100928', '25'), +('8', '111', '12', '104814', '93042', '25'), +('8', '111', '18', '111734', '130763', '25'), +('8', '111', '18', '111434', '119458', '25'), +('8', '111', '18', '111134', '105401', '25'), +('8', '111', '18', '105378', '91415', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('8', '111', '19', '111731', '127377', '25'), +('8', '111', '19', '111431', '116305', '25'), +('8', '111', '19', '111131', '102222', '25'), +('8', '111', '19', '105263', '88217', '25'), +('8', '111', '13', '111871', '156699', '25'), +('8', '111', '13', '111815', '154700', '25'), +('8', '111', '13', '111512', '147167', '25'), +('8', '111', '13', '111515', '147135', '25'), +('8', '111', '14', '111871', '156699', '25'), +('8', '111', '14', '111815', '154700', '25'), +('8', '111', '14', '111512', '147167', '25'), +('8', '111', '14', '111515', '147135', '25'), +('8', '111', '11', '85213', '172610', '25'), +('8', '111', '11', '133816', '149784', '25'), +('8', '111', '11', '111336', '117554', '25'), +('8', '111', '11', '111338', '117504', '25'), +('8', '112', '22', '12425', '0', '25'), +('8', '112', '22', '21807', '0', '25'), +('8', '112', '22', '21805', '0', '25'), +('8', '112', '22', '39342', '0', '25'), +('8', '112', '1', '98769', '192847', '25'), +('8', '112', '1', '111309', '117848', '25'), +('8', '112', '1', '111300', '117452', '25'), +('8', '112', '1', '111307', '117366', '25'), +('8', '112', '2', '111732', '128504', '25'), +('8', '112', '2', '111432', '117374', '25'), +('8', '112', '2', '111132', '103124', '25'), +('8', '112', '2', '104704', '94260', '25'), +('8', '112', '3', '111315', '117719', '25'), +('8', '112', '3', '111313', '117617', '25'), +('8', '112', '3', '111312', '117368', '25'), +('8', '112', '3', '111316', '116864', '25'), +('8', '112', '5', '111318', '117316', '25'), +('8', '112', '5', '111319', '117076', '25'), +('8', '112', '5', '111320', '117020', '25'), +('8', '112', '5', '111017', '103253', '25'), +('8', '112', '8', '111331', '117871', '25'), +('8', '112', '8', '111328', '117549', '25'), +('8', '112', '8', '111332', '117384', '25'), +('8', '112', '8', '111330', '117224', '25'), +('8', '112', '6', '111324', '117534', '25'), +('8', '112', '6', '111322', '117366', '25'), +('8', '112', '6', '111326', '116924', '25'), +('8', '112', '6', '111023', '103419', '25'), +('8', '112', '17', '111735', '134533', '25'), +('8', '112', '17', '111435', '123543', '25'), +('8', '112', '17', '111135', '109596', '25'), +('8', '112', '17', '105379', '95045', '25'), +('8', '112', '7', '111733', '128546', '25'), +('8', '112', '7', '111433', '117206', '25'), +('8', '112', '7', '111133', '103009', '25'), +('8', '112', '7', '104929', '94043', '25'), +('8', '112', '9', '111729', '124284', '25'), +('8', '112', '9', '67098', '119199', '25'), +('8', '112', '9', '111429', '113449', '25'), +('8', '112', '9', '111129', '99377', '25'), +('8', '112', '15', '111348', '117866', '25'), +('8', '112', '15', '111343', '117603', '25'), +('8', '112', '15', '111345', '117364', '25'), +('8', '112', '15', '111341', '117357', '25'), +('8', '112', '20', '111354', '127150', '25'), +('8', '112', '20', '111355', '126609', '25'), +('8', '112', '20', '111351', '126285', '25'), +('8', '112', '20', '111352', '126127', '25'), +('8', '112', '12', '111730', '126275', '25'), +('8', '112', '12', '111430', '115267', '25'), +('8', '112', '12', '111130', '100930', '25'), +('8', '112', '12', '104814', '93043', '25'), +('8', '112', '18', '111734', '130764', '25'), +('8', '112', '18', '111434', '119459', '25'), +('8', '112', '18', '111134', '105402', '25'), +('8', '112', '18', '105378', '91416', '25'), +('8', '112', '19', '111731', '127379', '25'), +('8', '112', '19', '111431', '116306', '25'), +('8', '112', '19', '111131', '102224', '25'), +('8', '112', '19', '105263', '88218', '25'), +('8', '112', '13', '111871', '156768', '25'), +('8', '112', '13', '111815', '154768', '25'), +('8', '112', '13', '111512', '147235', '25'), +('8', '112', '13', '111515', '147203', '25'), +('8', '112', '14', '111871', '156768', '25'), +('8', '112', '14', '111815', '154768', '25'), +('8', '112', '14', '111512', '147235', '25'), +('8', '112', '14', '111515', '147203', '25'), +('8', '112', '11', '85213', '172612', '25'), +('8', '112', '11', '133816', '149786', '25'), +('8', '112', '11', '111336', '117556', '25'), +('8', '112', '11', '111338', '117507', '25'), +('8', '113', '22', '12425', '0', '25'), +('8', '113', '22', '21807', '0', '25'), +('8', '113', '22', '21805', '0', '25'), +('8', '113', '22', '39342', '0', '25'), +('8', '113', '1', '98769', '192848', '25'), +('8', '113', '1', '111309', '117850', '25'), +('8', '113', '1', '111300', '117454', '25'), +('8', '113', '1', '111307', '117370', '25'), +('8', '113', '2', '111732', '128507', '25'), +('8', '113', '2', '111432', '117377', '25'), +('8', '113', '2', '111132', '103127', '25'), +('8', '113', '2', '104704', '94263', '25'), +('8', '113', '3', '111315', '117722', '25'), +('8', '113', '3', '111313', '117619', '25'), +('8', '113', '3', '111312', '117370', '25'), +('8', '113', '3', '111316', '116866', '25'), +('8', '113', '5', '111318', '117318', '25'), +('8', '113', '5', '111319', '117079', '25'), +('8', '113', '5', '111320', '117022', '25'), +('8', '113', '5', '111017', '103255', '25'), +('8', '113', '8', '111331', '117873', '25'), +('8', '113', '8', '111328', '117552', '25'), +('8', '113', '8', '111332', '117386', '25'), +('8', '113', '8', '111330', '117226', '25'), +('8', '113', '6', '111324', '117537', '25'), +('8', '113', '6', '111322', '117368', '25'), +('8', '113', '6', '111326', '116926', '25'), +('8', '113', '6', '111023', '103422', '25'), +('8', '113', '17', '111735', '134535', '25'), +('8', '113', '17', '111435', '123545', '25'), +('8', '113', '17', '111135', '109598', '25'), +('8', '113', '17', '105379', '95047', '25'), +('8', '113', '7', '111733', '128548', '25'), +('8', '113', '7', '111433', '117208', '25'), +('8', '113', '7', '111133', '103011', '25'), +('8', '113', '7', '104929', '94045', '25'), +('8', '113', '9', '111729', '124286', '25'), +('8', '113', '9', '67098', '119201', '25'), +('8', '113', '9', '111429', '113451', '25'), +('8', '113', '9', '111129', '99378', '25'), +('8', '113', '15', '111348', '117869', '25'), +('8', '113', '15', '111343', '117605', '25'), +('8', '113', '15', '111345', '117366', '25'), +('8', '113', '15', '111341', '117360', '25'), +('8', '113', '20', '111354', '127152', '25'), +('8', '113', '20', '111355', '126611', '25'), +('8', '113', '20', '111351', '126287', '25'), +('8', '113', '20', '111352', '126129', '25'), +('8', '113', '12', '111730', '126276', '25'), +('8', '113', '12', '111430', '115269', '25'), +('8', '113', '12', '111130', '100931', '25'), +('8', '113', '12', '104814', '93045', '25'), +('8', '113', '18', '111734', '130765', '25'), +('8', '113', '18', '111434', '119460', '25'), +('8', '113', '18', '111134', '105402', '25'), +('8', '113', '18', '105378', '91416', '25'), +('8', '113', '19', '111731', '127380', '25'), +('8', '113', '19', '111431', '116308', '25'), +('8', '113', '19', '111131', '102225', '25'), +('8', '113', '19', '105263', '88220', '25'), +('8', '113', '13', '111871', '156837', '25'), +('8', '113', '13', '111815', '154836', '25'), +('8', '113', '13', '111512', '147304', '25'), +('8', '113', '13', '111515', '147271', '25'), +('8', '113', '14', '111871', '156837', '25'), +('8', '113', '14', '111815', '154836', '25'), +('8', '113', '14', '111512', '147304', '25'), +('8', '113', '14', '111515', '147271', '25'), +('8', '113', '11', '85213', '172614', '25'), +('8', '113', '11', '133816', '149788', '25'), +('8', '113', '11', '111336', '117558', '25'), +('8', '113', '11', '111338', '117509', '25'), +('8', '114', '22', '12425', '0', '25'), +('8', '114', '22', '21807', '0', '25'), +('8', '114', '22', '21805', '0', '25'), +('8', '114', '22', '39342', '0', '25'), +('8', '114', '1', '98769', '192850', '25'), +('8', '114', '1', '111309', '117853', '25'), +('8', '114', '1', '111300', '117456', '25'), +('8', '114', '1', '111307', '117373', '25'), +('8', '114', '2', '111732', '128509', '25'), +('8', '114', '2', '111432', '117379', '25'), +('8', '114', '2', '111132', '103129', '25'), +('8', '114', '2', '104704', '94265', '25'), +('8', '114', '3', '111315', '117725', '25'), +('8', '114', '3', '111313', '117621', '25'), +('8', '114', '3', '111312', '117373', '25'), +('8', '114', '3', '111316', '116868', '25'), +('8', '114', '5', '111318', '117320', '25'), +('8', '114', '5', '111319', '117081', '25'), +('8', '114', '5', '111320', '117024', '25'), +('8', '114', '5', '111017', '103258', '25'), +('8', '114', '8', '111331', '117876', '25'), +('8', '114', '8', '111328', '117555', '25'), +('8', '114', '8', '111332', '117388', '25'), +('8', '114', '8', '111330', '117228', '25'), +('8', '114', '6', '111324', '117539', '25'), +('8', '114', '6', '111322', '117370', '25'), +('8', '114', '6', '111326', '116929', '25'), +('8', '114', '6', '111023', '103424', '25'), +('8', '114', '17', '111735', '134537', '25'), +('8', '114', '17', '111435', '123547', '25'), +('8', '114', '17', '111135', '109599', '25'), +('8', '114', '17', '105379', '95049', '25'), +('8', '114', '7', '111733', '128550', '25'), +('8', '114', '7', '111433', '117210', '25'), +('8', '114', '7', '111133', '103013', '25'), +('8', '114', '7', '104929', '94047', '25'), +('8', '114', '9', '111729', '124288', '25'), +('8', '114', '9', '67098', '119203', '25'), +('8', '114', '9', '111429', '113453', '25'), +('8', '114', '9', '111129', '99380', '25'), +('8', '114', '15', '111348', '117871', '25'), +('8', '114', '15', '111343', '117607', '25'), +('8', '114', '15', '111345', '117368', '25'), +('8', '114', '15', '111341', '117364', '25'), +('8', '114', '20', '111354', '127154', '25'), +('8', '114', '20', '111355', '126612', '25'), +('8', '114', '20', '111351', '126290', '25'), +('8', '114', '20', '111352', '126131', '25'), +('8', '114', '12', '111730', '126278', '25'), +('8', '114', '12', '111430', '115271', '25'), +('8', '114', '12', '111130', '100933', '25'), +('8', '114', '12', '104814', '93047', '25'), +('8', '114', '18', '111734', '130766', '25'), +('8', '114', '18', '111434', '119461', '25'), +('8', '114', '18', '111134', '105403', '25'), +('8', '114', '18', '105378', '91417', '25'), +('8', '114', '19', '111731', '127382', '25'), +('8', '114', '19', '111431', '116309', '25'), +('8', '114', '19', '111131', '102227', '25'), +('8', '114', '19', '105263', '88221', '25'), +('8', '114', '13', '111871', '156905', '25'), +('8', '114', '13', '111815', '154905', '25'), +('8', '114', '13', '111512', '147372', '25'), +('8', '114', '13', '111515', '147339', '25'), +('8', '114', '14', '111871', '156905', '25'), +('8', '114', '14', '111815', '154905', '25'), +('8', '114', '14', '111512', '147372', '25'), +('8', '114', '14', '111515', '147339', '25'), +('8', '114', '11', '85213', '172615', '25'), +('8', '114', '11', '133816', '149790', '25'), +('8', '114', '11', '111336', '117561', '25'), +('8', '114', '11', '111338', '117512', '25'), +('8', '115', '22', '12425', '0', '26'), +('8', '115', '22', '21807', '0', '26'), +('8', '115', '22', '21805', '0', '26'), +('8', '115', '22', '39342', '0', '26'), +('8', '115', '1', '98769', '192852', '26'), +('8', '115', '1', '111309', '117855', '26'), +('8', '115', '1', '111300', '117458', '26'), +('8', '115', '1', '111307', '117376', '26'), +('8', '115', '2', '111732', '128511', '26'), +('8', '115', '2', '111432', '117381', '26'), +('8', '115', '2', '111132', '103131', '26'), +('8', '115', '2', '104704', '94267', '26'), +('8', '115', '3', '111315', '117728', '26'), +('8', '115', '3', '111313', '117623', '26'), +('8', '115', '3', '111312', '117375', '26'), +('8', '115', '3', '111316', '116871', '26'), +('8', '115', '5', '111318', '117323', '26'), +('8', '115', '5', '111319', '117084', '26'), +('8', '115', '5', '111320', '117027', '26'), +('8', '115', '5', '111017', '103260', '26'), +('8', '115', '8', '111331', '117878', '26'), +('8', '115', '8', '111328', '117558', '26'), +('8', '115', '8', '111332', '117391', '26'), +('8', '115', '8', '111330', '117230', '26'), +('8', '115', '6', '111324', '117542', '26'), +('8', '115', '6', '111322', '117372', '26'), +('8', '115', '6', '111326', '116931', '26'), +('8', '115', '6', '111023', '103427', '26'), +('8', '115', '17', '111735', '134539', '26'), +('8', '115', '17', '111435', '123549', '26'), +('8', '115', '17', '111135', '109601', '26'), +('8', '115', '17', '105379', '95050', '26'), +('8', '115', '7', '111733', '128552', '26'), +('8', '115', '7', '111433', '117212', '26'), +('8', '115', '7', '111133', '103015', '26'), +('8', '115', '7', '104929', '94048', '26'), +('8', '115', '9', '111729', '124290', '26'), +('8', '115', '9', '67098', '119205', '26'), +('8', '115', '9', '111429', '113455', '26'), +('8', '115', '9', '111129', '99382', '26'), +('8', '115', '15', '111348', '117873', '26'), +('8', '115', '15', '111343', '117609', '26'), +('8', '115', '15', '111345', '117371', '26'), +('8', '115', '15', '111341', '117367', '26'), +('8', '115', '20', '111354', '127157', '26'), +('8', '115', '20', '111355', '126614', '26'), +('8', '115', '20', '111351', '126292', '26'), +('8', '115', '20', '111352', '126133', '26'), +('8', '115', '12', '111730', '126280', '26'), +('8', '115', '12', '111430', '115272', '26'), +('8', '115', '12', '111130', '100935', '26'), +('8', '115', '12', '104814', '93048', '26'), +('8', '115', '18', '111734', '130766', '26'), +('8', '115', '18', '111434', '119461', '26'), +('8', '115', '18', '111134', '105404', '26'), +('8', '115', '18', '105378', '91418', '26'), +('8', '115', '19', '111731', '127383', '26'), +('8', '115', '19', '111431', '116311', '26'), +('8', '115', '19', '111131', '102228', '26'), +('8', '115', '19', '105263', '88223', '26'), +('8', '115', '13', '111871', '156974', '26'), +('8', '115', '13', '111815', '154973', '26'), +('8', '115', '13', '111512', '147440', '26'), +('8', '115', '13', '111515', '147408', '26'), +('8', '115', '14', '111871', '156974', '26'), +('8', '115', '14', '111815', '154973', '26'), +('8', '115', '14', '111512', '147440', '26'), +('8', '115', '14', '111515', '147408', '26'), +('8', '115', '11', '85213', '172617', '26'), +('8', '115', '11', '133816', '149791', '26'), +('8', '115', '11', '111336', '117563', '26'), +('8', '115', '11', '111338', '117514', '26'), +('9', '1', '22', '8567', '0', '0'), +('9', '1', '22', '10323', '0', '0'), +('9', '1', '22', '66166', '0', '0'), +('9', '1', '22', '10664', '0', '0'), +('9', '1', '1', '30361', '1140', '0'), +('9', '1', '1', '14701', '362', '0'), +('9', '1', '1', '10165', '313', '0'), +('9', '1', '1', '14658', '258', '0'), +('9', '1', '2', '10142', '1272', '0'), +('9', '1', '2', '4341', '1262', '0'), +('9', '1', '2', '30363', '1200', '0'), +('9', '1', '2', '3040', '1082', '0'), +('9', '1', '3', '14706', '990', '0'), +('9', '1', '3', '14705', '990', '0'), +('9', '1', '3', '27702', '807', '0'), +('9', '1', '3', '14695', '423', '0'), +('9', '1', '5', '30362', '1140', '0'), +('9', '1', '5', '14552', '884', '0'), +('9', '1', '5', '10147', '630', '0'), +('9', '1', '5', '14703', '550', '0'), +('9', '1', '8', '11621', '8325', '0'), +('9', '1', '8', '11551', '1505', '0'), +('9', '1', '8', '3403', '1171', '0'), +('9', '1', '8', '1409', '812', '0'), +('9', '1', '6', '1557', '5310', '0'), +('9', '1', '6', '3309', '517', '0'), +('9', '1', '6', '3165', '512', '0'), +('9', '1', '6', '4165', '362', '0'), +('9', '1', '17', '11623', '1935', '0'), +('9', '1', '17', '4832', '1304', '0'), +('9', '1', '17', '4902', '1107', '0'), +('9', '1', '17', '3164', '867', '0'), +('9', '1', '7', '4833', '725', '0'), +('9', '1', '7', '4411', '633', '0'), +('9', '1', '7', '10104', '284', '0'), +('9', '1', '7', '3168', '271', '0'), +('9', '1', '9', '27703', '1840', '0'), +('9', '1', '9', '4834', '920', '0'), +('9', '1', '9', '4904', '574', '0'), +('9', '1', '9', '13280', '493', '0'), +('9', '1', '15', '14707', '1050', '0'), +('9', '1', '15', '10366', '805', '0'), +('9', '1', '15', '30360', '600', '0'), +('9', '1', '15', '14679', '580', '0'), +('9', '1', '20', '11676', '8690', '0'), +('9', '1', '20', '11601', '6959', '0'), +('9', '1', '20', '2922', '4899', '0'), +('9', '1', '20', '1365', '4200', '0'), +('9', '1', '12', '11624', '990', '0'), +('9', '1', '12', '20655', '744', '0'), +('9', '1', '12', '4905', '729', '0'), +('9', '1', '12', '4835', '659', '0'), +('9', '1', '18', '4412', '633', '0'), +('9', '1', '18', '4836', '428', '0'), +('9', '1', '18', '4906', '388', '0'), +('9', '1', '18', '2374', '266', '0'), +('9', '1', '19', '1534', '1276', '0'), +('9', '1', '19', '4837', '1024', '0'), +('9', '1', '19', '68239', '481', '0'), +('9', '1', '19', '4907', '392', '0'), +('9', '1', '13', '27704', '25288', '0'), +('9', '1', '13', '6692', '21631', '0'), +('9', '1', '13', '20858', '19380', '0'), +('9', '1', '13', '5416', '19170', '0'), +('9', '1', '14', '7257', '23041', '0'), +('9', '1', '14', '11557', '22800', '0'), +('9', '1', '14', '11661', '22080', '0'), +('9', '1', '14', '6692', '21631', '0'), +('9', '1', '11', '8325', '14120', '0'), +('9', '1', '11', '8408', '14050', '0'), +('9', '1', '11', '8811', '11040', '0'), +('9', '1', '11', '8810', '10160', '0'), +('9', '2', '22', '8567', '0', '0'), +('9', '2', '22', '10323', '0', '0'), +('9', '2', '22', '66166', '0', '0'), +('9', '2', '22', '10664', '0', '0'), +('9', '2', '1', '30361', '1140', '0'), +('9', '2', '1', '14701', '362', '0'), +('9', '2', '1', '10165', '313', '0'), +('9', '2', '1', '14658', '258', '0'), +('9', '2', '2', '10142', '1272', '0'), +('9', '2', '2', '4341', '1262', '0'), +('9', '2', '2', '30363', '1200', '0'), +('9', '2', '2', '3040', '1082', '0'), +('9', '2', '3', '14706', '990', '0'), +('9', '2', '3', '14705', '990', '0'), +('9', '2', '3', '27702', '807', '0'), +('9', '2', '3', '14695', '423', '0'), +('9', '2', '5', '30362', '1140', '0'), +('9', '2', '5', '14552', '884', '0'), +('9', '2', '5', '10147', '630', '0'), +('9', '2', '5', '14703', '550', '0'), +('9', '2', '8', '11621', '8325', '0'), +('9', '2', '8', '11551', '1505', '0'), +('9', '2', '8', '3403', '1171', '0'), +('9', '2', '8', '1409', '812', '0'), +('9', '2', '6', '1557', '5310', '0'), +('9', '2', '6', '3309', '517', '0'), +('9', '2', '6', '3165', '512', '0'), +('9', '2', '6', '4165', '362', '0'), +('9', '2', '17', '11623', '1935', '0'), +('9', '2', '17', '4832', '1309', '0'), +('9', '2', '17', '4902', '1107', '0'), +('9', '2', '17', '3164', '867', '0'), +('9', '2', '7', '4833', '725', '0'), +('9', '2', '7', '4411', '633', '0'), +('9', '2', '7', '10104', '284', '0'), +('9', '2', '7', '71303', '271', '0'), +('9', '2', '9', '27703', '1840', '0'), +('9', '2', '9', '4834', '920', '0'), +('9', '2', '9', '4904', '574', '0'), +('9', '2', '9', '13280', '493', '0'), +('9', '2', '15', '14707', '1050', '0'), +('9', '2', '15', '10366', '805', '0'), +('9', '2', '15', '30360', '600', '0'), +('9', '2', '15', '14679', '580', '0'), +('9', '2', '20', '11676', '8690', '0'), +('9', '2', '20', '11601', '6962', '0'), +('9', '2', '20', '2922', '4899', '0'), +('9', '2', '20', '1365', '4200', '0'), +('9', '2', '12', '11624', '993', '0'), +('9', '2', '12', '20655', '744', '0'), +('9', '2', '12', '4905', '729', '0'), +('9', '2', '12', '4835', '661', '0'), +('9', '2', '18', '4412', '633', '0'), +('9', '2', '18', '4836', '429', '0'), +('9', '2', '18', '4906', '388', '0'), +('9', '2', '18', '2374', '266', '0'), +('9', '2', '19', '1534', '1276', '0'), +('9', '2', '19', '4837', '1024', '0'), +('9', '2', '19', '68239', '481', '0'), +('9', '2', '19', '4907', '392', '0'), +('9', '2', '13', '27704', '25671', '0'), +('9', '2', '13', '6692', '21631', '0'), +('9', '2', '13', '20858', '19380', '0'), +('9', '2', '13', '5416', '19170', '0'), +('9', '2', '14', '7257', '23041', '0'), +('9', '2', '14', '11557', '22800', '0'), +('9', '2', '14', '11661', '22080', '0'), +('9', '2', '14', '6692', '21631', '0'), +('9', '2', '11', '8325', '14120', '0'), +('9', '2', '11', '8408', '14050', '0'), +('9', '2', '11', '8811', '11040', '0'), +('9', '2', '11', '8810', '10160', '0'), +('9', '3', '22', '8567', '0', '0'), +('9', '3', '22', '10323', '0', '0'), +('9', '3', '22', '66166', '0', '0'), +('9', '3', '22', '10664', '0', '0'), +('9', '3', '1', '30361', '1140', '0'), +('9', '3', '1', '14701', '362', '0'), +('9', '3', '1', '10165', '313', '0'), +('9', '3', '1', '14658', '258', '0'), +('9', '3', '2', '10142', '1272', '0'), +('9', '3', '2', '4341', '1262', '0'), +('9', '3', '2', '30363', '1200', '0'), +('9', '3', '2', '3040', '1082', '0'), +('9', '3', '3', '14706', '990', '0'), +('9', '3', '3', '14705', '990', '0'), +('9', '3', '3', '27702', '807', '0'), +('9', '3', '3', '14695', '423', '0'), +('9', '3', '5', '30362', '1140', '0'), +('9', '3', '5', '14552', '884', '0'), +('9', '3', '5', '10147', '630', '0'), +('9', '3', '5', '14703', '550', '0'), +('9', '3', '8', '11621', '8325', '0'), +('9', '3', '8', '11551', '1505', '0'), +('9', '3', '8', '3403', '1171', '0'), +('9', '3', '8', '1409', '812', '0'), +('9', '3', '6', '1557', '5310', '0'), +('9', '3', '6', '3309', '517', '0'), +('9', '3', '6', '3165', '512', '0'), +('9', '3', '6', '4165', '362', '0'), +('9', '3', '17', '11623', '1935', '0'), +('9', '3', '17', '4832', '1315', '0'), +('9', '3', '17', '4902', '1107', '0'), +('9', '3', '17', '3164', '867', '0'), +('9', '3', '7', '4833', '725', '0'), +('9', '3', '7', '4411', '633', '0'), +('9', '3', '7', '10104', '284', '0'), +('9', '3', '7', '71303', '271', '0'), +('9', '3', '9', '27703', '1840', '0'), +('9', '3', '9', '4834', '920', '0'), +('9', '3', '9', '4904', '574', '0'), +('9', '3', '9', '13280', '493', '0'), +('9', '3', '15', '14707', '1050', '0'), +('9', '3', '15', '10366', '805', '0'), +('9', '3', '15', '30360', '600', '0'), +('9', '3', '15', '14679', '580', '0'), +('9', '3', '20', '11676', '8690', '0'), +('9', '3', '20', '11601', '6966', '0'), +('9', '3', '20', '2922', '4899', '0'), +('9', '3', '20', '1365', '4200', '0'), +('9', '3', '12', '11624', '995', '0'), +('9', '3', '12', '20655', '745', '0'), +('9', '3', '12', '4905', '729', '0'), +('9', '3', '12', '4835', '662', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '3', '18', '4412', '633', '0'), +('9', '3', '18', '4836', '431', '0'), +('9', '3', '18', '4906', '388', '0'), +('9', '3', '18', '2374', '266', '0'), +('9', '3', '19', '1534', '1276', '0'), +('9', '3', '19', '4837', '1024', '0'), +('9', '3', '19', '68239', '481', '0'), +('9', '3', '19', '4907', '392', '0'), +('9', '3', '13', '27704', '26063', '0'), +('9', '3', '13', '6692', '21631', '0'), +('9', '3', '13', '20858', '19380', '0'), +('9', '3', '13', '11557', '19203', '0'), +('9', '3', '14', '7257', '23041', '0'), +('9', '3', '14', '11557', '22800', '0'), +('9', '3', '14', '11661', '22080', '0'), +('9', '3', '14', '6692', '21631', '0'), +('9', '3', '11', '8325', '14120', '0'), +('9', '3', '11', '8408', '14050', '0'), +('9', '3', '11', '8811', '11040', '0'), +('9', '3', '11', '8810', '10160', '0'), +('9', '4', '22', '8567', '0', '0'), +('9', '4', '22', '10323', '0', '0'), +('9', '4', '22', '66166', '0', '0'), +('9', '4', '22', '10664', '0', '0'), +('9', '4', '1', '30361', '1140', '0'), +('9', '4', '1', '14701', '362', '0'), +('9', '4', '1', '10165', '313', '0'), +('9', '4', '1', '14658', '258', '0'), +('9', '4', '2', '10142', '1272', '0'), +('9', '4', '2', '4341', '1262', '0'), +('9', '4', '2', '30363', '1200', '0'), +('9', '4', '2', '3040', '1082', '0'), +('9', '4', '3', '14706', '990', '0'), +('9', '4', '3', '14705', '990', '0'), +('9', '4', '3', '27702', '807', '0'), +('9', '4', '3', '14695', '423', '0'), +('9', '4', '5', '30362', '1140', '0'), +('9', '4', '5', '14552', '884', '0'), +('9', '4', '5', '10147', '630', '0'), +('9', '4', '5', '14703', '550', '0'), +('9', '4', '8', '11621', '8325', '0'), +('9', '4', '8', '11551', '1505', '0'), +('9', '4', '8', '3403', '1171', '0'), +('9', '4', '8', '1409', '812', '0'), +('9', '4', '6', '1557', '5310', '0'), +('9', '4', '6', '3309', '517', '0'), +('9', '4', '6', '3165', '512', '0'), +('9', '4', '6', '4165', '362', '0'), +('9', '4', '17', '11623', '1935', '0'), +('9', '4', '17', '4832', '1320', '0'), +('9', '4', '17', '4902', '1107', '0'), +('9', '4', '17', '3164', '867', '0'), +('9', '4', '7', '4833', '725', '0'), +('9', '4', '7', '4411', '633', '0'), +('9', '4', '7', '10104', '284', '0'), +('9', '4', '7', '71303', '271', '0'), +('9', '4', '9', '27703', '1840', '0'), +('9', '4', '9', '4834', '920', '0'), +('9', '4', '9', '4904', '574', '0'), +('9', '4', '9', '13280', '493', '0'), +('9', '4', '15', '14707', '1050', '0'), +('9', '4', '15', '10366', '805', '0'), +('9', '4', '15', '30360', '600', '0'), +('9', '4', '15', '14679', '580', '0'), +('9', '4', '20', '11676', '8690', '0'), +('9', '4', '20', '11601', '6969', '0'), +('9', '4', '20', '2922', '4899', '0'), +('9', '4', '20', '1365', '4200', '0'), +('9', '4', '12', '11624', '998', '0'), +('9', '4', '12', '20655', '746', '0'), +('9', '4', '12', '4905', '729', '0'), +('9', '4', '12', '4835', '664', '0'), +('9', '4', '18', '4412', '633', '0'), +('9', '4', '18', '4836', '433', '0'), +('9', '4', '18', '4906', '388', '0'), +('9', '4', '18', '2374', '266', '0'), +('9', '4', '19', '1534', '1276', '0'), +('9', '4', '19', '4837', '1024', '0'), +('9', '4', '19', '68239', '481', '0'), +('9', '4', '19', '4907', '392', '0'), +('9', '4', '13', '27704', '26463', '0'), +('9', '4', '13', '6692', '21631', '0'), +('9', '4', '13', '11557', '19505', '0'), +('9', '4', '13', '20858', '19380', '0'), +('9', '4', '14', '7257', '23041', '0'), +('9', '4', '14', '11557', '22800', '0'), +('9', '4', '14', '11661', '22080', '0'), +('9', '4', '14', '6692', '21631', '0'), +('9', '4', '11', '8325', '14120', '0'), +('9', '4', '11', '8408', '14050', '0'), +('9', '4', '11', '8811', '11040', '0'), +('9', '4', '11', '8810', '10160', '0'), +('9', '5', '22', '8567', '0', '0'), +('9', '5', '22', '10323', '0', '0'), +('9', '5', '22', '66166', '0', '0'), +('9', '5', '22', '10664', '0', '0'), +('9', '5', '1', '30361', '1140', '0'), +('9', '5', '1', '14701', '362', '0'), +('9', '5', '1', '10165', '313', '0'), +('9', '5', '1', '14658', '258', '0'), +('9', '5', '2', '10142', '1272', '0'), +('9', '5', '2', '4341', '1262', '0'), +('9', '5', '2', '30363', '1200', '0'), +('9', '5', '2', '3040', '1082', '0'), +('9', '5', '3', '14706', '990', '0'), +('9', '5', '3', '14705', '990', '0'), +('9', '5', '3', '27702', '807', '0'), +('9', '5', '3', '14695', '423', '0'), +('9', '5', '5', '30362', '1140', '0'), +('9', '5', '5', '14552', '884', '0'), +('9', '5', '5', '10147', '630', '0'), +('9', '5', '5', '14703', '550', '0'), +('9', '5', '8', '11621', '8325', '0'), +('9', '5', '8', '11551', '1505', '0'), +('9', '5', '8', '3403', '1171', '0'), +('9', '5', '8', '1409', '812', '0'), +('9', '5', '6', '1557', '5310', '0'), +('9', '5', '6', '3309', '517', '0'), +('9', '5', '6', '3165', '512', '0'), +('9', '5', '6', '4165', '362', '0'), +('9', '5', '17', '11623', '1935', '0'), +('9', '5', '17', '4832', '1326', '0'), +('9', '5', '17', '4902', '1107', '0'), +('9', '5', '17', '3164', '867', '0'), +('9', '5', '7', '4833', '725', '0'), +('9', '5', '7', '4411', '633', '0'), +('9', '5', '7', '10104', '284', '0'), +('9', '5', '7', '71303', '271', '0'), +('9', '5', '9', '27703', '1840', '0'), +('9', '5', '9', '4834', '920', '0'), +('9', '5', '9', '4904', '574', '0'), +('9', '5', '9', '13280', '493', '0'), +('9', '5', '15', '14707', '1050', '0'), +('9', '5', '15', '10366', '805', '0'), +('9', '5', '15', '30360', '600', '0'), +('9', '5', '15', '14679', '580', '0'), +('9', '5', '20', '11676', '8690', '0'), +('9', '5', '20', '11601', '6973', '0'), +('9', '5', '20', '2922', '4899', '0'), +('9', '5', '20', '1365', '4200', '0'), +('9', '5', '12', '11624', '1000', '0'), +('9', '5', '12', '20655', '746', '0'), +('9', '5', '12', '4905', '729', '0'), +('9', '5', '12', '4835', '666', '0'), +('9', '5', '18', '4412', '633', '0'), +('9', '5', '18', '4836', '435', '0'), +('9', '5', '18', '4906', '388', '0'), +('9', '5', '18', '2374', '266', '0'), +('9', '5', '19', '1534', '1276', '0'), +('9', '5', '19', '4837', '1024', '0'), +('9', '5', '19', '68239', '481', '0'), +('9', '5', '19', '4907', '392', '0'), +('9', '5', '13', '27704', '26872', '0'), +('9', '5', '13', '6692', '21631', '0'), +('9', '5', '13', '11557', '19814', '0'), +('9', '5', '13', '20858', '19380', '0'), +('9', '5', '14', '7257', '23041', '0'), +('9', '5', '14', '11557', '22800', '0'), +('9', '5', '14', '11661', '22080', '0'), +('9', '5', '14', '6692', '21631', '0'), +('9', '5', '11', '8325', '14120', '0'), +('9', '5', '11', '8408', '14050', '0'), +('9', '5', '11', '8811', '11040', '0'), +('9', '5', '11', '8810', '10160', '0'), +('9', '6', '22', '8567', '0', '0'), +('9', '6', '22', '10323', '0', '0'), +('9', '6', '22', '66166', '0', '0'), +('9', '6', '22', '10664', '0', '0'), +('9', '6', '1', '30361', '1140', '0'), +('9', '6', '1', '14701', '362', '0'), +('9', '6', '1', '10165', '313', '0'), +('9', '6', '1', '14658', '258', '0'), +('9', '6', '2', '10142', '1272', '0'), +('9', '6', '2', '4341', '1262', '0'), +('9', '6', '2', '30363', '1200', '0'), +('9', '6', '2', '3040', '1082', '0'), +('9', '6', '3', '14706', '990', '0'), +('9', '6', '3', '14705', '990', '0'), +('9', '6', '3', '27702', '807', '0'), +('9', '6', '3', '14695', '423', '0'), +('9', '6', '5', '30362', '1140', '0'), +('9', '6', '5', '14552', '884', '0'), +('9', '6', '5', '10147', '630', '0'), +('9', '6', '5', '14703', '550', '0'), +('9', '6', '8', '11621', '8325', '0'), +('9', '6', '8', '11551', '1505', '0'), +('9', '6', '8', '3403', '1171', '0'), +('9', '6', '8', '1409', '812', '0'), +('9', '6', '6', '1557', '5310', '0'), +('9', '6', '6', '3309', '517', '0'), +('9', '6', '6', '3165', '512', '0'), +('9', '6', '6', '4165', '362', '0'), +('9', '6', '17', '11623', '1935', '0'), +('9', '6', '17', '4832', '1331', '0'), +('9', '6', '17', '4902', '1107', '0'), +('9', '6', '17', '3164', '867', '0'), +('9', '6', '7', '4833', '725', '0'), +('9', '6', '7', '4411', '633', '0'), +('9', '6', '7', '10104', '284', '0'), +('9', '6', '7', '71303', '271', '0'), +('9', '6', '9', '27703', '1840', '0'), +('9', '6', '9', '4834', '920', '0'), +('9', '6', '9', '4904', '574', '0'), +('9', '6', '9', '13280', '493', '0'), +('9', '6', '15', '14707', '1050', '0'), +('9', '6', '15', '10366', '805', '0'), +('9', '6', '15', '30360', '600', '0'), +('9', '6', '15', '14679', '580', '0'), +('9', '6', '20', '11676', '8690', '0'), +('9', '6', '20', '11601', '6977', '0'), +('9', '6', '20', '2922', '4899', '0'), +('9', '6', '20', '1365', '4200', '0'), +('9', '6', '12', '11624', '1003', '0'), +('9', '6', '12', '20655', '747', '0'), +('9', '6', '12', '4905', '729', '0'), +('9', '6', '12', '4835', '668', '0'), +('9', '6', '18', '4412', '633', '0'), +('9', '6', '18', '4836', '437', '0'), +('9', '6', '18', '4906', '388', '0'), +('9', '6', '18', '2374', '266', '0'), +('9', '6', '19', '1534', '1276', '0'), +('9', '6', '19', '4837', '1024', '0'), +('9', '6', '19', '68239', '481', '0'), +('9', '6', '19', '4907', '392', '0'), +('9', '6', '13', '27704', '27289', '0'), +('9', '6', '13', '6692', '21631', '0'), +('9', '6', '13', '11557', '20129', '0'), +('9', '6', '13', '20858', '19380', '0'), +('9', '6', '14', '7257', '23041', '0'), +('9', '6', '14', '11557', '22800', '0'), +('9', '6', '14', '11661', '22080', '0'), +('9', '6', '14', '6692', '21631', '0'), +('9', '6', '11', '8325', '14120', '0'), +('9', '6', '11', '8408', '14050', '0'), +('9', '6', '11', '8811', '11040', '0'), +('9', '6', '11', '8810', '10160', '0'), +('9', '7', '22', '8567', '0', '0'), +('9', '7', '22', '10323', '0', '0'), +('9', '7', '22', '66166', '0', '0'), +('9', '7', '22', '10664', '0', '0'), +('9', '7', '1', '30361', '1140', '0'), +('9', '7', '1', '14701', '362', '0'), +('9', '7', '1', '10165', '313', '0'), +('9', '7', '1', '14658', '258', '0'), +('9', '7', '2', '10142', '1272', '0'), +('9', '7', '2', '4341', '1262', '0'), +('9', '7', '2', '30363', '1200', '0'), +('9', '7', '2', '3040', '1082', '0'), +('9', '7', '3', '14706', '990', '0'), +('9', '7', '3', '14705', '990', '0'), +('9', '7', '3', '27702', '807', '0'), +('9', '7', '3', '14695', '423', '0'), +('9', '7', '5', '30362', '1140', '0'), +('9', '7', '5', '14552', '884', '0'), +('9', '7', '5', '10147', '630', '0'), +('9', '7', '5', '14703', '550', '0'), +('9', '7', '8', '11621', '8325', '0'), +('9', '7', '8', '11551', '1505', '0'), +('9', '7', '8', '3403', '1171', '0'), +('9', '7', '8', '1409', '812', '0'), +('9', '7', '6', '1557', '5310', '0'), +('9', '7', '6', '3309', '517', '0'), +('9', '7', '6', '3165', '512', '0'), +('9', '7', '6', '4165', '362', '0'), +('9', '7', '17', '11623', '1935', '0'), +('9', '7', '17', '4832', '1338', '0'), +('9', '7', '17', '4902', '1107', '0'), +('9', '7', '17', '3164', '867', '0'), +('9', '7', '7', '4833', '725', '0'), +('9', '7', '7', '4411', '633', '0'), +('9', '7', '7', '10104', '284', '0'), +('9', '7', '7', '71303', '271', '0'), +('9', '7', '9', '27703', '1840', '0'), +('9', '7', '9', '4834', '920', '0'), +('9', '7', '9', '4904', '574', '0'), +('9', '7', '9', '13280', '493', '0'), +('9', '7', '15', '14707', '1050', '0'), +('9', '7', '15', '10366', '805', '0'), +('9', '7', '15', '30360', '600', '0'), +('9', '7', '15', '14679', '580', '0'), +('9', '7', '20', '11676', '8690', '0'), +('9', '7', '20', '11601', '6981', '0'), +('9', '7', '20', '2922', '4899', '0'), +('9', '7', '20', '1365', '4200', '0'), +('9', '7', '12', '11624', '1006', '0'), +('9', '7', '12', '20655', '748', '0'), +('9', '7', '12', '4905', '729', '0'), +('9', '7', '12', '4835', '670', '0'), +('9', '7', '18', '4412', '633', '0'), +('9', '7', '18', '4836', '439', '0'), +('9', '7', '18', '4906', '388', '0'), +('9', '7', '18', '2374', '266', '0'), +('9', '7', '19', '1534', '1276', '0'), +('9', '7', '19', '4837', '1024', '0'), +('9', '7', '19', '68239', '481', '0'), +('9', '7', '19', '4907', '392', '0'), +('9', '7', '13', '27704', '27716', '0'), +('9', '7', '13', '6692', '21631', '0'), +('9', '7', '13', '11557', '20450', '0'), +('9', '7', '13', '11661', '19384', '0'), +('9', '7', '14', '7257', '23041', '0'), +('9', '7', '14', '11557', '22800', '0'), +('9', '7', '14', '11661', '22080', '0'), +('9', '7', '14', '6692', '21631', '0'), +('9', '7', '11', '8325', '14120', '0'), +('9', '7', '11', '8408', '14050', '0'), +('9', '7', '11', '8811', '11040', '0'), +('9', '7', '11', '8810', '10160', '0'), +('9', '8', '22', '8567', '0', '0'), +('9', '8', '22', '10323', '0', '0'), +('9', '8', '22', '66166', '0', '0'), +('9', '8', '22', '10664', '0', '0'), +('9', '8', '1', '30361', '1140', '0'), +('9', '8', '1', '14701', '362', '0'), +('9', '8', '1', '10165', '313', '0'), +('9', '8', '1', '14658', '258', '0'), +('9', '8', '2', '10142', '1272', '0'), +('9', '8', '2', '4341', '1262', '0'), +('9', '8', '2', '30363', '1200', '0'), +('9', '8', '2', '3040', '1082', '0'), +('9', '8', '3', '14706', '990', '0'), +('9', '8', '3', '14705', '990', '0'), +('9', '8', '3', '27702', '807', '0'), +('9', '8', '3', '14695', '423', '0'), +('9', '8', '5', '30362', '1140', '0'), +('9', '8', '5', '14552', '884', '0'), +('9', '8', '5', '10147', '630', '0'), +('9', '8', '5', '14703', '550', '0'), +('9', '8', '8', '11621', '8325', '0'), +('9', '8', '8', '11551', '1505', '0'), +('9', '8', '8', '3403', '1171', '0'), +('9', '8', '8', '1409', '812', '0'), +('9', '8', '6', '1557', '5310', '0'), +('9', '8', '6', '3309', '517', '0'), +('9', '8', '6', '3165', '512', '0'), +('9', '8', '6', '4165', '362', '0'), +('9', '8', '17', '11623', '1935', '0'), +('9', '8', '17', '4832', '1343', '0'), +('9', '8', '17', '4902', '1107', '0'), +('9', '8', '17', '3164', '867', '0'), +('9', '8', '7', '4833', '725', '0'), +('9', '8', '7', '4411', '633', '0'), +('9', '8', '7', '10104', '284', '0'), +('9', '8', '7', '71303', '271', '0'), +('9', '8', '9', '27703', '1840', '0'), +('9', '8', '9', '4834', '920', '0'), +('9', '8', '9', '4904', '574', '0'), +('9', '8', '9', '13280', '493', '0'), +('9', '8', '15', '14707', '1050', '0'), +('9', '8', '15', '10366', '805', '0'), +('9', '8', '15', '30360', '600', '0'), +('9', '8', '15', '14679', '580', '0'), +('9', '8', '20', '11676', '8690', '0'), +('9', '8', '20', '11601', '6985', '0'), +('9', '8', '20', '2922', '4899', '0'), +('9', '8', '20', '1365', '4200', '0'), +('9', '8', '12', '11624', '1008', '0'), +('9', '8', '12', '20655', '749', '0'), +('9', '8', '12', '4905', '729', '0'), +('9', '8', '12', '4835', '672', '0'), +('9', '8', '18', '4412', '633', '0'), +('9', '8', '18', '4836', '441', '0'), +('9', '8', '18', '4906', '388', '0'), +('9', '8', '18', '2374', '266', '0'), +('9', '8', '19', '1534', '1276', '0'), +('9', '8', '19', '4837', '1024', '0'), +('9', '8', '19', '68239', '481', '0'), +('9', '8', '19', '4907', '392', '0'), +('9', '8', '13', '27704', '28151', '0'), +('9', '8', '13', '6692', '21631', '0'), +('9', '8', '13', '11557', '20778', '0'), +('9', '8', '13', '7257', '19775', '0'), +('9', '8', '14', '7257', '23041', '0'), +('9', '8', '14', '11557', '22800', '0'), +('9', '8', '14', '11661', '22080', '0'), +('9', '8', '14', '6692', '21631', '0'), +('9', '8', '11', '8325', '14120', '0'), +('9', '8', '11', '8408', '14050', '0'), +('9', '8', '11', '8811', '11040', '0'), +('9', '8', '11', '8810', '10160', '0'), +('9', '9', '22', '8567', '0', '0'), +('9', '9', '22', '10323', '0', '0'), +('9', '9', '22', '66166', '0', '0'), +('9', '9', '22', '10664', '0', '0'), +('9', '9', '1', '30361', '1140', '0'), +('9', '9', '1', '14701', '362', '0'), +('9', '9', '1', '10165', '313', '0'), +('9', '9', '1', '14658', '258', '0'), +('9', '9', '2', '10142', '1272', '0'), +('9', '9', '2', '4341', '1262', '0'), +('9', '9', '2', '30363', '1200', '0'), +('9', '9', '2', '3040', '1082', '0'), +('9', '9', '3', '14706', '990', '0'), +('9', '9', '3', '14705', '990', '0'), +('9', '9', '3', '27702', '807', '0'), +('9', '9', '3', '14695', '423', '0'), +('9', '9', '5', '30362', '1140', '0'), +('9', '9', '5', '14552', '884', '0'), +('9', '9', '5', '10147', '630', '0'), +('9', '9', '5', '14703', '550', '0'), +('9', '9', '8', '11621', '8325', '0'), +('9', '9', '8', '11551', '1505', '0'), +('9', '9', '8', '3403', '1171', '0'), +('9', '9', '8', '1409', '812', '0'), +('9', '9', '6', '1557', '5310', '0'), +('9', '9', '6', '3309', '517', '0'), +('9', '9', '6', '3165', '512', '0'), +('9', '9', '6', '4165', '362', '0'), +('9', '9', '17', '11623', '1935', '0'), +('9', '9', '17', '4832', '1348', '0'), +('9', '9', '17', '4902', '1107', '0'), +('9', '9', '17', '3164', '867', '0'), +('9', '9', '7', '4833', '725', '0'), +('9', '9', '7', '4411', '633', '0'), +('9', '9', '7', '10104', '284', '0'), +('9', '9', '7', '71303', '271', '0'), +('9', '9', '9', '27703', '1840', '0'), +('9', '9', '9', '4834', '920', '0'), +('9', '9', '9', '4904', '574', '0'), +('9', '9', '9', '13280', '493', '0'), +('9', '9', '15', '14707', '1050', '0'), +('9', '9', '15', '10366', '805', '0'), +('9', '9', '15', '30360', '600', '0'), +('9', '9', '15', '14679', '580', '0'), +('9', '9', '20', '11676', '8690', '0'), +('9', '9', '20', '11601', '6988', '0'), +('9', '9', '20', '2922', '4899', '0'), +('9', '9', '20', '1365', '4200', '0'), +('9', '9', '12', '11624', '1011', '0'), +('9', '9', '12', '20655', '749', '0'), +('9', '9', '12', '4905', '729', '0'), +('9', '9', '12', '4835', '674', '0'), +('9', '9', '18', '4412', '633', '0'), +('9', '9', '18', '4836', '442', '0'), +('9', '9', '18', '4906', '388', '0'), +('9', '9', '18', '2374', '266', '0'), +('9', '9', '19', '1534', '1276', '0'), +('9', '9', '19', '4837', '1024', '0'), +('9', '9', '19', '68239', '481', '0'), +('9', '9', '19', '4907', '392', '0'), +('9', '9', '13', '27704', '28594', '0'), +('9', '9', '13', '6692', '21631', '0'), +('9', '9', '13', '11557', '21113', '0'), +('9', '9', '13', '7257', '20255', '0'), +('9', '9', '14', '7257', '23041', '0'), +('9', '9', '14', '11557', '22800', '0'), +('9', '9', '14', '11661', '22080', '0'), +('9', '9', '14', '6692', '21631', '0'), +('9', '9', '11', '8325', '14120', '0'), +('9', '9', '11', '8408', '14050', '0'), +('9', '9', '11', '8811', '11040', '0'), +('9', '9', '11', '8810', '10160', '0'), +('9', '10', '22', '8567', '0', '0'), +('9', '10', '22', '10323', '0', '0'), +('9', '10', '22', '66166', '0', '0'), +('9', '10', '22', '10664', '0', '0'), +('9', '10', '1', '30361', '1140', '0'), +('9', '10', '1', '14701', '362', '0'), +('9', '10', '1', '10165', '313', '0'), +('9', '10', '1', '14658', '258', '0'), +('9', '10', '2', '10142', '1272', '0'), +('9', '10', '2', '4341', '1262', '0'), +('9', '10', '2', '30363', '1200', '0'), +('9', '10', '2', '3040', '1082', '0'), +('9', '10', '3', '14706', '990', '0'), +('9', '10', '3', '14705', '990', '0'), +('9', '10', '3', '27702', '807', '0'), +('9', '10', '3', '14695', '423', '0'), +('9', '10', '5', '30362', '1140', '0'), +('9', '10', '5', '14552', '884', '0'), +('9', '10', '5', '10147', '630', '0'), +('9', '10', '5', '14703', '550', '0'), +('9', '10', '8', '11621', '8325', '0'), +('9', '10', '8', '11551', '1505', '0'), +('9', '10', '8', '3403', '1171', '0'), +('9', '10', '8', '1409', '812', '0'), +('9', '10', '6', '1557', '5310', '0'), +('9', '10', '6', '3309', '517', '0'), +('9', '10', '6', '3165', '512', '0'), +('9', '10', '6', '4165', '362', '0'), +('9', '10', '17', '11623', '1935', '0'), +('9', '10', '17', '4832', '1354', '0'), +('9', '10', '17', '4902', '1107', '0'), +('9', '10', '17', '3164', '867', '0'), +('9', '10', '7', '4833', '725', '0'), +('9', '10', '7', '4411', '633', '0'), +('9', '10', '7', '10104', '284', '0'), +('9', '10', '7', '3168', '271', '0'), +('9', '10', '9', '27703', '1840', '0'), +('9', '10', '9', '4834', '920', '0'), +('9', '10', '9', '4904', '574', '0'), +('9', '10', '9', '13280', '493', '0'), +('9', '10', '15', '14707', '1050', '0'), +('9', '10', '15', '10366', '805', '0'), +('9', '10', '15', '30360', '600', '0'), +('9', '10', '15', '14679', '580', '0'), +('9', '10', '20', '11676', '8690', '0'), +('9', '10', '20', '11601', '6992', '0'), +('9', '10', '20', '2922', '4899', '0'), +('9', '10', '20', '1365', '4200', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '10', '12', '11624', '1014', '0'), +('9', '10', '12', '20655', '750', '0'), +('9', '10', '12', '4905', '729', '0'), +('9', '10', '12', '4835', '675', '0'), +('9', '10', '18', '4412', '633', '0'), +('9', '10', '18', '4836', '444', '0'), +('9', '10', '18', '4906', '388', '0'), +('9', '10', '18', '2374', '266', '0'), +('9', '10', '19', '1534', '1276', '0'), +('9', '10', '19', '4837', '1024', '0'), +('9', '10', '19', '68239', '481', '0'), +('9', '10', '19', '4907', '392', '0'), +('9', '10', '13', '27704', '29046', '0'), +('9', '10', '13', '6692', '21631', '0'), +('9', '10', '13', '11557', '21454', '0'), +('9', '10', '13', '7257', '20744', '0'), +('9', '10', '14', '7257', '23041', '0'), +('9', '10', '14', '11557', '22800', '0'), +('9', '10', '14', '11661', '22080', '0'), +('9', '10', '14', '6692', '21631', '0'), +('9', '10', '11', '8325', '14120', '0'), +('9', '10', '11', '8408', '14050', '0'), +('9', '10', '11', '8811', '11040', '0'), +('9', '10', '11', '8810', '10160', '0'), +('9', '11', '22', '8567', '0', '0'), +('9', '11', '22', '10323', '0', '0'), +('9', '11', '22', '66166', '0', '0'), +('9', '11', '22', '10664', '0', '0'), +('9', '11', '1', '30361', '1140', '0'), +('9', '11', '1', '14701', '362', '0'), +('9', '11', '1', '10165', '313', '0'), +('9', '11', '1', '14658', '258', '0'), +('9', '11', '2', '10142', '1272', '0'), +('9', '11', '2', '4341', '1262', '0'), +('9', '11', '2', '30363', '1200', '0'), +('9', '11', '2', '3040', '1082', '0'), +('9', '11', '3', '14706', '990', '0'), +('9', '11', '3', '14705', '990', '0'), +('9', '11', '3', '27702', '807', '0'), +('9', '11', '3', '14695', '423', '0'), +('9', '11', '5', '30362', '1140', '0'), +('9', '11', '5', '14552', '884', '0'), +('9', '11', '5', '10147', '630', '0'), +('9', '11', '5', '14703', '550', '0'), +('9', '11', '8', '11621', '8325', '0'), +('9', '11', '8', '11551', '1505', '0'), +('9', '11', '8', '3403', '1171', '0'), +('9', '11', '8', '1409', '812', '0'), +('9', '11', '6', '1557', '5310', '0'), +('9', '11', '6', '3309', '517', '0'), +('9', '11', '6', '3165', '512', '0'), +('9', '11', '6', '4165', '362', '0'), +('9', '11', '17', '11623', '1935', '0'), +('9', '11', '17', '4832', '1360', '0'), +('9', '11', '17', '4902', '1107', '0'), +('9', '11', '17', '3164', '867', '0'), +('9', '11', '7', '4833', '725', '0'), +('9', '11', '7', '4411', '633', '0'), +('9', '11', '7', '10104', '284', '0'), +('9', '11', '7', '71303', '271', '0'), +('9', '11', '9', '27703', '1840', '0'), +('9', '11', '9', '4834', '920', '0'), +('9', '11', '9', '4904', '574', '0'), +('9', '11', '9', '13280', '493', '0'), +('9', '11', '15', '14707', '1050', '0'), +('9', '11', '15', '10366', '805', '0'), +('9', '11', '15', '30360', '600', '0'), +('9', '11', '15', '14679', '580', '0'), +('9', '11', '20', '11676', '8690', '0'), +('9', '11', '20', '11601', '6996', '0'), +('9', '11', '20', '2922', '4899', '0'), +('9', '11', '20', '1365', '4200', '0'), +('9', '11', '12', '11624', '1017', '0'), +('9', '11', '12', '20655', '751', '0'), +('9', '11', '12', '4905', '729', '0'), +('9', '11', '12', '4835', '678', '0'), +('9', '11', '18', '4412', '633', '0'), +('9', '11', '18', '4836', '446', '0'), +('9', '11', '18', '4906', '388', '0'), +('9', '11', '18', '2374', '266', '0'), +('9', '11', '19', '1534', '1276', '0'), +('9', '11', '19', '4837', '1024', '0'), +('9', '11', '19', '68239', '481', '0'), +('9', '11', '19', '4907', '392', '0'), +('9', '11', '13', '27704', '29507', '0'), +('9', '11', '13', '11557', '21801', '0'), +('9', '11', '13', '6692', '21631', '0'), +('9', '11', '13', '7257', '21243', '0'), +('9', '11', '14', '7257', '23041', '0'), +('9', '11', '14', '11557', '22800', '0'), +('9', '11', '14', '11661', '22080', '0'), +('9', '11', '14', '6692', '21631', '0'), +('9', '11', '11', '8325', '14120', '0'), +('9', '11', '11', '8408', '14050', '0'), +('9', '11', '11', '8811', '11040', '0'), +('9', '11', '11', '8810', '10160', '0'), +('9', '12', '22', '8567', '0', '0'), +('9', '12', '22', '10323', '0', '0'), +('9', '12', '22', '66166', '0', '0'), +('9', '12', '22', '10664', '0', '0'), +('9', '12', '1', '30361', '1140', '0'), +('9', '12', '1', '14701', '362', '0'), +('9', '12', '1', '10165', '313', '0'), +('9', '12', '1', '14658', '258', '0'), +('9', '12', '2', '10142', '1272', '0'), +('9', '12', '2', '4341', '1262', '0'), +('9', '12', '2', '30363', '1200', '0'), +('9', '12', '2', '3040', '1082', '0'), +('9', '12', '3', '14706', '990', '0'), +('9', '12', '3', '14705', '990', '0'), +('9', '12', '3', '27702', '807', '0'), +('9', '12', '3', '14695', '423', '0'), +('9', '12', '5', '30362', '1140', '0'), +('9', '12', '5', '14552', '884', '0'), +('9', '12', '5', '10147', '630', '0'), +('9', '12', '5', '14703', '550', '0'), +('9', '12', '8', '11621', '8325', '0'), +('9', '12', '8', '11551', '1505', '0'), +('9', '12', '8', '3403', '1171', '0'), +('9', '12', '8', '1409', '812', '0'), +('9', '12', '6', '1557', '5310', '0'), +('9', '12', '6', '3309', '517', '0'), +('9', '12', '6', '3165', '512', '0'), +('9', '12', '6', '4165', '362', '0'), +('9', '12', '17', '11623', '1935', '0'), +('9', '12', '17', '4832', '1366', '0'), +('9', '12', '17', '4902', '1107', '0'), +('9', '12', '17', '3164', '867', '0'), +('9', '12', '7', '4833', '725', '0'), +('9', '12', '7', '4411', '633', '0'), +('9', '12', '7', '10104', '284', '0'), +('9', '12', '7', '71303', '271', '0'), +('9', '12', '9', '27703', '1840', '0'), +('9', '12', '9', '4834', '920', '0'), +('9', '12', '9', '4904', '574', '0'), +('9', '12', '9', '13280', '493', '0'), +('9', '12', '15', '14707', '1050', '0'), +('9', '12', '15', '10366', '805', '0'), +('9', '12', '15', '30360', '600', '0'), +('9', '12', '15', '14679', '580', '0'), +('9', '12', '20', '11676', '8690', '0'), +('9', '12', '20', '11601', '7000', '0'), +('9', '12', '20', '2922', '4899', '0'), +('9', '12', '20', '1365', '4200', '0'), +('9', '12', '12', '11624', '1019', '0'), +('9', '12', '12', '20655', '752', '0'), +('9', '12', '12', '4905', '729', '0'), +('9', '12', '12', '4835', '679', '0'), +('9', '12', '18', '4412', '633', '0'), +('9', '12', '18', '4836', '448', '0'), +('9', '12', '18', '4906', '388', '0'), +('9', '12', '18', '2374', '266', '0'), +('9', '12', '19', '1534', '1276', '0'), +('9', '12', '19', '4837', '1024', '0'), +('9', '12', '19', '68239', '481', '0'), +('9', '12', '19', '4907', '392', '0'), +('9', '12', '13', '27704', '29976', '0'), +('9', '12', '13', '11557', '22155', '0'), +('9', '12', '13', '7257', '21751', '0'), +('9', '12', '13', '6692', '21631', '0'), +('9', '12', '14', '7257', '23041', '0'), +('9', '12', '14', '11557', '22800', '0'), +('9', '12', '14', '11661', '22080', '0'), +('9', '12', '14', '6692', '21631', '0'), +('9', '12', '11', '8325', '14120', '0'), +('9', '12', '11', '8408', '14050', '0'), +('9', '12', '11', '8811', '11040', '0'), +('9', '12', '11', '8810', '10160', '0'), +('9', '13', '22', '8567', '0', '0'), +('9', '13', '22', '10323', '0', '0'), +('9', '13', '22', '66166', '0', '0'), +('9', '13', '22', '10664', '0', '0'), +('9', '13', '1', '30361', '1140', '0'), +('9', '13', '1', '14701', '362', '0'), +('9', '13', '1', '10165', '313', '0'), +('9', '13', '1', '14658', '258', '0'), +('9', '13', '2', '10142', '1272', '0'), +('9', '13', '2', '4341', '1262', '0'), +('9', '13', '2', '30363', '1200', '0'), +('9', '13', '2', '3040', '1082', '0'), +('9', '13', '3', '14706', '990', '0'), +('9', '13', '3', '14705', '990', '0'), +('9', '13', '3', '27702', '807', '0'), +('9', '13', '3', '14695', '423', '0'), +('9', '13', '5', '30362', '1140', '0'), +('9', '13', '5', '14552', '884', '0'), +('9', '13', '5', '10147', '630', '0'), +('9', '13', '5', '14703', '550', '0'), +('9', '13', '8', '11621', '8325', '0'), +('9', '13', '8', '11551', '1505', '0'), +('9', '13', '8', '3403', '1171', '0'), +('9', '13', '8', '1409', '812', '0'), +('9', '13', '6', '1557', '5310', '0'), +('9', '13', '6', '3309', '517', '0'), +('9', '13', '6', '3165', '512', '0'), +('9', '13', '6', '4165', '362', '0'), +('9', '13', '17', '11623', '1935', '0'), +('9', '13', '17', '4832', '1371', '0'), +('9', '13', '17', '4902', '1107', '0'), +('9', '13', '17', '3164', '867', '0'), +('9', '13', '7', '4833', '725', '0'), +('9', '13', '7', '4411', '633', '0'), +('9', '13', '7', '10104', '284', '0'), +('9', '13', '7', '71303', '271', '0'), +('9', '13', '9', '27703', '1840', '0'), +('9', '13', '9', '4834', '920', '0'), +('9', '13', '9', '4904', '574', '0'), +('9', '13', '9', '13280', '493', '0'), +('9', '13', '15', '14707', '1050', '0'), +('9', '13', '15', '10366', '805', '0'), +('9', '13', '15', '30360', '600', '0'), +('9', '13', '15', '14679', '580', '0'), +('9', '13', '20', '11676', '8690', '0'), +('9', '13', '20', '11601', '7003', '0'), +('9', '13', '20', '2922', '4899', '0'), +('9', '13', '20', '1365', '4200', '0'), +('9', '13', '12', '11624', '1022', '0'), +('9', '13', '12', '20655', '752', '0'), +('9', '13', '12', '4905', '729', '0'), +('9', '13', '12', '4835', '681', '0'), +('9', '13', '18', '4412', '633', '0'), +('9', '13', '18', '4836', '450', '0'), +('9', '13', '18', '4906', '388', '0'), +('9', '13', '18', '2374', '266', '0'), +('9', '13', '19', '1534', '1276', '0'), +('9', '13', '19', '4837', '1024', '0'), +('9', '13', '19', '68239', '481', '0'), +('9', '13', '19', '4907', '392', '0'), +('9', '13', '13', '27704', '30455', '0'), +('9', '13', '13', '11557', '22515', '0'), +('9', '13', '13', '7257', '22268', '0'), +('9', '13', '13', '11661', '21673', '0'), +('9', '13', '14', '7257', '23041', '0'), +('9', '13', '14', '11557', '22800', '0'), +('9', '13', '14', '11661', '22080', '0'), +('9', '13', '14', '6692', '21631', '0'), +('9', '13', '11', '8325', '14120', '0'), +('9', '13', '11', '8408', '14050', '0'), +('9', '13', '11', '8811', '11040', '0'), +('9', '13', '11', '8810', '10160', '0'), +('9', '14', '22', '8567', '0', '0'), +('9', '14', '22', '10323', '0', '0'), +('9', '14', '22', '66166', '0', '0'), +('9', '14', '22', '10664', '0', '0'), +('9', '14', '1', '30361', '1140', '0'), +('9', '14', '1', '14701', '362', '0'), +('9', '14', '1', '10165', '313', '0'), +('9', '14', '1', '14658', '258', '0'), +('9', '14', '2', '10142', '1272', '0'), +('9', '14', '2', '4341', '1262', '0'), +('9', '14', '2', '30363', '1200', '0'), +('9', '14', '2', '3040', '1082', '0'), +('9', '14', '3', '14706', '990', '0'), +('9', '14', '3', '14705', '990', '0'), +('9', '14', '3', '27702', '807', '0'), +('9', '14', '3', '14695', '423', '0'), +('9', '14', '5', '30362', '1140', '0'), +('9', '14', '5', '14552', '884', '0'), +('9', '14', '5', '10147', '630', '0'), +('9', '14', '5', '14703', '550', '0'), +('9', '14', '8', '11621', '8325', '0'), +('9', '14', '8', '11551', '1505', '0'), +('9', '14', '8', '3403', '1171', '0'), +('9', '14', '8', '1409', '812', '0'), +('9', '14', '6', '1557', '5310', '0'), +('9', '14', '6', '3309', '517', '0'), +('9', '14', '6', '3165', '512', '0'), +('9', '14', '6', '4165', '362', '0'), +('9', '14', '17', '11623', '1935', '0'), +('9', '14', '17', '4832', '1377', '0'), +('9', '14', '17', '4902', '1107', '0'), +('9', '14', '17', '3164', '867', '0'), +('9', '14', '7', '4833', '725', '0'), +('9', '14', '7', '4411', '633', '0'), +('9', '14', '7', '10104', '284', '0'), +('9', '14', '7', '71303', '271', '0'), +('9', '14', '9', '27703', '1840', '0'), +('9', '14', '9', '4834', '920', '0'), +('9', '14', '9', '4904', '574', '0'), +('9', '14', '9', '13280', '493', '0'), +('9', '14', '15', '14707', '1050', '0'), +('9', '14', '15', '10366', '805', '0'), +('9', '14', '15', '30360', '600', '0'), +('9', '14', '15', '14679', '580', '0'), +('9', '14', '20', '11676', '8690', '0'), +('9', '14', '20', '11601', '7008', '0'), +('9', '14', '20', '2922', '4899', '0'), +('9', '14', '20', '1365', '4200', '0'), +('9', '14', '12', '11624', '1025', '0'), +('9', '14', '12', '20655', '753', '0'), +('9', '14', '12', '4905', '729', '0'), +('9', '14', '12', '4835', '683', '0'), +('9', '14', '18', '4412', '633', '0'), +('9', '14', '18', '4836', '452', '0'), +('9', '14', '18', '4906', '388', '0'), +('9', '14', '18', '2374', '266', '0'), +('9', '14', '19', '1534', '1276', '0'), +('9', '14', '19', '4837', '1024', '0'), +('9', '14', '19', '68239', '481', '0'), +('9', '14', '19', '4907', '392', '0'), +('9', '14', '13', '27704', '30941', '0'), +('9', '14', '13', '11557', '22882', '0'), +('9', '14', '13', '7257', '22795', '0'), +('9', '14', '13', '11661', '22080', '0'), +('9', '14', '14', '7257', '23041', '0'), +('9', '14', '14', '11557', '22800', '0'), +('9', '14', '14', '11661', '22080', '0'), +('9', '14', '14', '6692', '21631', '0'), +('9', '14', '11', '8325', '14120', '0'), +('9', '14', '11', '8408', '14050', '0'), +('9', '14', '11', '8811', '11040', '0'), +('9', '14', '11', '8810', '10160', '0'), +('9', '15', '22', '8567', '0', '0'), +('9', '15', '22', '10323', '0', '0'), +('9', '15', '22', '66166', '0', '0'), +('9', '15', '22', '10664', '0', '0'), +('9', '15', '1', '30361', '1140', '0'), +('9', '15', '1', '14701', '362', '0'), +('9', '15', '1', '10165', '313', '0'), +('9', '15', '1', '14658', '258', '0'), +('9', '15', '2', '10142', '1272', '0'), +('9', '15', '2', '4341', '1262', '0'), +('9', '15', '2', '30363', '1200', '0'), +('9', '15', '2', '3040', '1082', '0'), +('9', '15', '3', '14706', '990', '0'), +('9', '15', '3', '14705', '990', '0'), +('9', '15', '3', '27702', '807', '0'), +('9', '15', '3', '14695', '423', '0'), +('9', '15', '5', '30362', '1140', '0'), +('9', '15', '5', '14552', '884', '0'), +('9', '15', '5', '10147', '630', '0'), +('9', '15', '5', '14703', '550', '0'), +('9', '15', '8', '11621', '8325', '0'), +('9', '15', '8', '11551', '1505', '0'), +('9', '15', '8', '3403', '1171', '0'), +('9', '15', '8', '1409', '812', '0'), +('9', '15', '6', '1557', '5310', '0'), +('9', '15', '6', '3309', '517', '0'), +('9', '15', '6', '3165', '512', '0'), +('9', '15', '6', '4165', '362', '0'), +('9', '15', '17', '11623', '1935', '0'), +('9', '15', '17', '4832', '1383', '0'), +('9', '15', '17', '4902', '1107', '0'), +('9', '15', '17', '3164', '867', '0'), +('9', '15', '7', '4833', '725', '0'), +('9', '15', '7', '4411', '633', '0'), +('9', '15', '7', '10104', '284', '0'), +('9', '15', '7', '71303', '271', '0'), +('9', '15', '9', '27703', '1840', '0'), +('9', '15', '9', '4834', '920', '0'), +('9', '15', '9', '4904', '574', '0'), +('9', '15', '9', '13280', '493', '0'), +('9', '15', '15', '14707', '1050', '0'), +('9', '15', '15', '10366', '805', '0'), +('9', '15', '15', '30360', '600', '0'), +('9', '15', '15', '14679', '580', '0'), +('9', '15', '20', '11676', '8690', '0'), +('9', '15', '20', '11601', '7011', '0'), +('9', '15', '20', '2922', '4899', '0'), +('9', '15', '20', '1365', '4200', '0'), +('9', '15', '12', '11624', '1027', '0'), +('9', '15', '12', '20655', '754', '0'), +('9', '15', '12', '4905', '729', '0'), +('9', '15', '12', '4835', '685', '0'), +('9', '15', '18', '4412', '633', '0'), +('9', '15', '18', '4836', '454', '0'), +('9', '15', '18', '4906', '388', '0'), +('9', '15', '18', '2374', '266', '0'), +('9', '15', '19', '1534', '1276', '0'), +('9', '15', '19', '4837', '1024', '0'), +('9', '15', '19', '68239', '481', '0'), +('9', '15', '19', '4907', '392', '0'), +('9', '15', '13', '27704', '31437', '0'), +('9', '15', '13', '7257', '23331', '0'), +('9', '15', '13', '11557', '23255', '0'), +('9', '15', '13', '11661', '22494', '0'), +('9', '15', '14', '7257', '23041', '0'), +('9', '15', '14', '11557', '22800', '0'), +('9', '15', '14', '11661', '22080', '0'), +('9', '15', '14', '6692', '21631', '0'), +('9', '15', '11', '8325', '14120', '0'), +('9', '15', '11', '8408', '14050', '0'), +('9', '15', '11', '8811', '11040', '0'), +('9', '15', '11', '8810', '10160', '0'), +('9', '16', '22', '8567', '0', '0'), +('9', '16', '22', '10323', '0', '0'), +('9', '16', '22', '66166', '0', '0'), +('9', '16', '22', '10664', '0', '0'), +('9', '16', '1', '30361', '1140', '0'), +('9', '16', '1', '14701', '362', '0'), +('9', '16', '1', '10165', '313', '0'), +('9', '16', '1', '14658', '258', '0'), +('9', '16', '2', '10142', '1272', '0'), +('9', '16', '2', '4341', '1262', '0'), +('9', '16', '2', '30363', '1200', '0'), +('9', '16', '2', '3040', '1082', '0'), +('9', '16', '3', '14706', '990', '0'), +('9', '16', '3', '14705', '990', '0'), +('9', '16', '3', '27702', '807', '0'), +('9', '16', '3', '14695', '423', '0'), +('9', '16', '5', '30362', '1140', '0'), +('9', '16', '5', '14552', '884', '0'), +('9', '16', '5', '10147', '630', '0'), +('9', '16', '5', '14703', '550', '0'), +('9', '16', '8', '11621', '8325', '0'), +('9', '16', '8', '11551', '1505', '0'), +('9', '16', '8', '3403', '1171', '0'), +('9', '16', '8', '1409', '812', '0'), +('9', '16', '6', '1557', '5310', '0'), +('9', '16', '6', '3309', '517', '0'), +('9', '16', '6', '3165', '512', '0'), +('9', '16', '6', '4165', '362', '0'), +('9', '16', '17', '11623', '1935', '0'), +('9', '16', '17', '4832', '1388', '0'), +('9', '16', '17', '4902', '1107', '0'), +('9', '16', '17', '3164', '867', '0'), +('9', '16', '7', '4833', '725', '0'), +('9', '16', '7', '4411', '633', '0'), +('9', '16', '7', '10104', '284', '0'), +('9', '16', '7', '71303', '271', '0'), +('9', '16', '9', '27703', '1840', '0'), +('9', '16', '9', '4834', '920', '0'), +('9', '16', '9', '4904', '574', '0'), +('9', '16', '9', '13280', '493', '0'), +('9', '16', '15', '14707', '1050', '0'), +('9', '16', '15', '10366', '805', '0'), +('9', '16', '15', '30360', '600', '0'), +('9', '16', '15', '14679', '580', '0'), +('9', '16', '20', '11676', '8690', '0'), +('9', '16', '20', '11601', '7015', '0'), +('9', '16', '20', '2922', '4899', '0'), +('9', '16', '20', '1365', '4200', '0'), +('9', '16', '12', '11624', '1030', '0'), +('9', '16', '12', '20655', '755', '0'), +('9', '16', '12', '4905', '729', '0'), +('9', '16', '12', '4835', '687', '0'), +('9', '16', '18', '4412', '633', '0'), +('9', '16', '18', '4836', '456', '0'), +('9', '16', '18', '4906', '388', '0'), +('9', '16', '18', '2374', '266', '0'), +('9', '16', '19', '1534', '1276', '0'), +('9', '16', '19', '4837', '1024', '0'), +('9', '16', '19', '68239', '481', '0'), +('9', '16', '19', '4907', '392', '0'), +('9', '16', '13', '27704', '31941', '0'), +('9', '16', '13', '7257', '23876', '0'), +('9', '16', '13', '11557', '23635', '0'), +('9', '16', '13', '11661', '22915', '0'), +('9', '16', '14', '7257', '23041', '0'), +('9', '16', '14', '11557', '22800', '0'), +('9', '16', '14', '11661', '22080', '0'), +('9', '16', '14', '6692', '21631', '0'), +('9', '16', '11', '8325', '14120', '0'), +('9', '16', '11', '8408', '14050', '0'), +('9', '16', '11', '8811', '11040', '0'), +('9', '16', '11', '8810', '10160', '0'), +('9', '17', '22', '8567', '0', '0'), +('9', '17', '22', '10323', '0', '0'), +('9', '17', '22', '66166', '0', '0'), +('9', '17', '22', '10664', '0', '0'), +('9', '17', '1', '30361', '1140', '0'), +('9', '17', '1', '14701', '362', '0'), +('9', '17', '1', '10165', '313', '0'), +('9', '17', '1', '14658', '258', '0'), +('9', '17', '2', '10142', '1272', '0'), +('9', '17', '2', '4341', '1262', '0'), +('9', '17', '2', '30363', '1200', '0'), +('9', '17', '2', '3040', '1082', '0'), +('9', '17', '3', '14706', '990', '0'), +('9', '17', '3', '14705', '990', '0'), +('9', '17', '3', '27702', '807', '0'), +('9', '17', '3', '14695', '423', '0'), +('9', '17', '5', '30362', '1140', '0'), +('9', '17', '5', '14552', '884', '0'), +('9', '17', '5', '10147', '630', '0'), +('9', '17', '5', '14703', '550', '0'), +('9', '17', '8', '11621', '8325', '0'), +('9', '17', '8', '11551', '1505', '0'), +('9', '17', '8', '3403', '1171', '0'), +('9', '17', '8', '1409', '812', '0'), +('9', '17', '6', '1557', '5310', '0'), +('9', '17', '6', '3309', '517', '0'), +('9', '17', '6', '3165', '512', '0'), +('9', '17', '6', '4165', '362', '0'), +('9', '17', '17', '11623', '1935', '0'), +('9', '17', '17', '4832', '1395', '0'), +('9', '17', '17', '4902', '1107', '0'), +('9', '17', '17', '3164', '867', '0'), +('9', '17', '7', '4833', '725', '0'), +('9', '17', '7', '4411', '633', '0'), +('9', '17', '7', '10104', '284', '0'), +('9', '17', '7', '71303', '271', '0'), +('9', '17', '9', '27703', '1840', '0'), +('9', '17', '9', '4834', '920', '0'), +('9', '17', '9', '4904', '574', '0'), +('9', '17', '9', '13280', '493', '0'), +('9', '17', '15', '14707', '1050', '0'), +('9', '17', '15', '10366', '805', '0'), +('9', '17', '15', '30360', '600', '0'), +('9', '17', '15', '14679', '580', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '17', '20', '11676', '8690', '0'), +('9', '17', '20', '11601', '7019', '0'), +('9', '17', '20', '2922', '4899', '0'), +('9', '17', '20', '1365', '4200', '0'), +('9', '17', '12', '11624', '1033', '0'), +('9', '17', '12', '20655', '756', '0'), +('9', '17', '12', '4905', '729', '0'), +('9', '17', '12', '4835', '689', '0'), +('9', '17', '18', '4412', '633', '0'), +('9', '17', '18', '4836', '458', '0'), +('9', '17', '18', '4906', '388', '0'), +('9', '17', '18', '2374', '266', '0'), +('9', '17', '19', '1534', '1276', '0'), +('9', '17', '19', '4837', '1024', '0'), +('9', '17', '19', '68239', '481', '0'), +('9', '17', '19', '4907', '392', '0'), +('9', '17', '13', '27704', '32453', '0'), +('9', '17', '13', '7257', '24431', '0'), +('9', '17', '13', '11557', '24021', '0'), +('9', '17', '13', '11661', '23344', '0'), +('9', '17', '14', '7257', '23041', '0'), +('9', '17', '14', '11557', '22800', '0'), +('9', '17', '14', '11661', '22080', '0'), +('9', '17', '14', '6692', '21631', '0'), +('9', '17', '11', '8325', '14120', '0'), +('9', '17', '11', '8408', '14050', '0'), +('9', '17', '11', '8811', '11040', '0'), +('9', '17', '11', '8810', '10160', '0'), +('9', '18', '22', '8567', '0', '0'), +('9', '18', '22', '10323', '0', '0'), +('9', '18', '22', '66166', '0', '0'), +('9', '18', '22', '10664', '0', '0'), +('9', '18', '1', '30361', '1140', '0'), +('9', '18', '1', '14701', '362', '0'), +('9', '18', '1', '10165', '313', '0'), +('9', '18', '1', '14658', '258', '0'), +('9', '18', '2', '10142', '1272', '0'), +('9', '18', '2', '4341', '1262', '0'), +('9', '18', '2', '30363', '1200', '0'), +('9', '18', '2', '3040', '1082', '0'), +('9', '18', '3', '14706', '990', '0'), +('9', '18', '3', '14705', '990', '0'), +('9', '18', '3', '27702', '807', '0'), +('9', '18', '3', '14695', '423', '0'), +('9', '18', '5', '30362', '1140', '0'), +('9', '18', '5', '14552', '884', '0'), +('9', '18', '5', '10147', '630', '0'), +('9', '18', '5', '14703', '550', '0'), +('9', '18', '8', '11621', '8325', '0'), +('9', '18', '8', '11551', '1505', '0'), +('9', '18', '8', '3403', '1171', '0'), +('9', '18', '8', '1409', '812', '0'), +('9', '18', '6', '1557', '5310', '0'), +('9', '18', '6', '3309', '517', '0'), +('9', '18', '6', '3165', '512', '0'), +('9', '18', '6', '4165', '362', '0'), +('9', '18', '17', '11623', '1935', '0'), +('9', '18', '17', '4832', '1400', '0'), +('9', '18', '17', '4902', '1107', '0'), +('9', '18', '17', '3164', '867', '0'), +('9', '18', '7', '4833', '725', '0'), +('9', '18', '7', '4411', '633', '0'), +('9', '18', '7', '10104', '284', '0'), +('9', '18', '7', '71303', '271', '0'), +('9', '18', '9', '27703', '1840', '0'), +('9', '18', '9', '4834', '920', '0'), +('9', '18', '9', '4904', '574', '0'), +('9', '18', '9', '13280', '493', '0'), +('9', '18', '15', '14707', '1050', '0'), +('9', '18', '15', '10366', '805', '0'), +('9', '18', '15', '30360', '600', '0'), +('9', '18', '15', '14679', '580', '0'), +('9', '18', '20', '11676', '8690', '0'), +('9', '18', '20', '11601', '7023', '0'), +('9', '18', '20', '2922', '4899', '0'), +('9', '18', '20', '1365', '4200', '0'), +('9', '18', '12', '11624', '1035', '0'), +('9', '18', '12', '20655', '756', '0'), +('9', '18', '12', '4905', '729', '0'), +('9', '18', '12', '4835', '691', '0'), +('9', '18', '18', '4412', '633', '0'), +('9', '18', '18', '4836', '460', '0'), +('9', '18', '18', '4906', '388', '0'), +('9', '18', '18', '2374', '266', '0'), +('9', '18', '19', '1534', '1276', '0'), +('9', '18', '19', '4837', '1024', '0'), +('9', '18', '19', '68239', '481', '0'), +('9', '18', '19', '4907', '392', '0'), +('9', '18', '13', '27704', '32975', '0'), +('9', '18', '13', '7257', '24995', '0'), +('9', '18', '13', '11557', '24414', '0'), +('9', '18', '13', '11661', '23779', '0'), +('9', '18', '14', '7257', '23041', '0'), +('9', '18', '14', '11557', '22800', '0'), +('9', '18', '14', '11661', '22080', '0'), +('9', '18', '14', '6692', '21631', '0'), +('9', '18', '11', '8325', '14120', '0'), +('9', '18', '11', '8408', '14050', '0'), +('9', '18', '11', '8811', '11040', '0'), +('9', '18', '11', '8810', '10160', '0'), +('9', '19', '22', '8567', '0', '0'), +('9', '19', '22', '10323', '0', '0'), +('9', '19', '22', '66166', '0', '0'), +('9', '19', '22', '10664', '0', '0'), +('9', '19', '1', '30361', '1140', '0'), +('9', '19', '1', '14701', '362', '0'), +('9', '19', '1', '10165', '313', '0'), +('9', '19', '1', '14658', '258', '0'), +('9', '19', '2', '10142', '1272', '0'), +('9', '19', '2', '4341', '1262', '0'), +('9', '19', '2', '30363', '1200', '0'), +('9', '19', '2', '3040', '1082', '0'), +('9', '19', '3', '14706', '990', '0'), +('9', '19', '3', '14705', '990', '0'), +('9', '19', '3', '27702', '807', '0'), +('9', '19', '3', '14695', '423', '0'), +('9', '19', '5', '30362', '1140', '0'), +('9', '19', '5', '14552', '884', '0'), +('9', '19', '5', '10147', '630', '0'), +('9', '19', '5', '14703', '550', '0'), +('9', '19', '8', '11621', '8325', '0'), +('9', '19', '8', '11551', '1505', '0'), +('9', '19', '8', '3403', '1171', '0'), +('9', '19', '8', '1409', '812', '0'), +('9', '19', '6', '1557', '5310', '0'), +('9', '19', '6', '3309', '517', '0'), +('9', '19', '6', '3165', '512', '0'), +('9', '19', '6', '4165', '362', '0'), +('9', '19', '17', '11623', '1935', '0'), +('9', '19', '17', '4832', '1406', '0'), +('9', '19', '17', '4902', '1107', '0'), +('9', '19', '17', '3164', '867', '0'), +('9', '19', '7', '4833', '725', '0'), +('9', '19', '7', '4411', '633', '0'), +('9', '19', '7', '10104', '284', '0'), +('9', '19', '7', '71303', '271', '0'), +('9', '19', '9', '27703', '1840', '0'), +('9', '19', '9', '4834', '920', '0'), +('9', '19', '9', '4904', '574', '0'), +('9', '19', '9', '13280', '493', '0'), +('9', '19', '15', '14707', '1050', '0'), +('9', '19', '15', '10366', '805', '0'), +('9', '19', '15', '30360', '600', '0'), +('9', '19', '15', '14679', '580', '0'), +('9', '19', '20', '11676', '8690', '0'), +('9', '19', '20', '11601', '7027', '0'), +('9', '19', '20', '2922', '4899', '0'), +('9', '19', '20', '1365', '4200', '0'), +('9', '19', '12', '11624', '1038', '0'), +('9', '19', '12', '20655', '757', '0'), +('9', '19', '12', '4905', '729', '0'), +('9', '19', '12', '4835', '693', '0'), +('9', '19', '18', '4412', '633', '0'), +('9', '19', '18', '4836', '462', '0'), +('9', '19', '18', '4906', '388', '0'), +('9', '19', '18', '2374', '266', '0'), +('9', '19', '19', '1534', '1276', '0'), +('9', '19', '19', '4837', '1024', '0'), +('9', '19', '19', '68239', '481', '0'), +('9', '19', '19', '4907', '392', '0'), +('9', '19', '13', '27704', '33504', '0'), +('9', '19', '13', '7257', '25569', '0'), +('9', '19', '13', '11557', '24813', '0'), +('9', '19', '13', '11661', '24222', '0'), +('9', '19', '14', '7257', '23041', '0'), +('9', '19', '14', '11557', '22800', '0'), +('9', '19', '14', '11661', '22080', '0'), +('9', '19', '14', '6692', '21631', '0'), +('9', '19', '11', '8325', '14120', '0'), +('9', '19', '11', '8408', '14050', '0'), +('9', '19', '11', '8811', '11040', '0'), +('9', '19', '11', '8810', '10160', '0'), +('9', '20', '22', '8567', '0', '0'), +('9', '20', '22', '10323', '0', '0'), +('9', '20', '22', '66166', '0', '0'), +('9', '20', '22', '10664', '0', '0'), +('9', '20', '1', '30361', '1140', '0'), +('9', '20', '1', '14701', '362', '0'), +('9', '20', '1', '10165', '313', '0'), +('9', '20', '1', '14658', '258', '0'), +('9', '20', '2', '10142', '1272', '0'), +('9', '20', '2', '4341', '1262', '0'), +('9', '20', '2', '30363', '1200', '0'), +('9', '20', '2', '3040', '1082', '0'), +('9', '20', '3', '14706', '990', '0'), +('9', '20', '3', '14705', '990', '0'), +('9', '20', '3', '27702', '807', '0'), +('9', '20', '3', '14695', '423', '0'), +('9', '20', '5', '30362', '1140', '0'), +('9', '20', '5', '14552', '884', '0'), +('9', '20', '5', '10147', '630', '0'), +('9', '20', '5', '14703', '550', '0'), +('9', '20', '8', '11621', '8325', '0'), +('9', '20', '8', '11551', '1505', '0'), +('9', '20', '8', '3403', '1171', '0'), +('9', '20', '8', '1409', '812', '0'), +('9', '20', '6', '1557', '5310', '0'), +('9', '20', '6', '3309', '517', '0'), +('9', '20', '6', '3165', '512', '0'), +('9', '20', '6', '4165', '362', '0'), +('9', '20', '17', '11623', '1935', '0'), +('9', '20', '17', '4832', '1412', '0'), +('9', '20', '17', '4902', '1107', '0'), +('9', '20', '17', '3164', '867', '0'), +('9', '20', '7', '4833', '725', '0'), +('9', '20', '7', '4411', '633', '0'), +('9', '20', '7', '10104', '284', '0'), +('9', '20', '7', '71303', '271', '0'), +('9', '20', '9', '27703', '1840', '0'), +('9', '20', '9', '4834', '920', '0'), +('9', '20', '9', '4904', '574', '0'), +('9', '20', '9', '13280', '493', '0'), +('9', '20', '15', '14707', '1050', '0'), +('9', '20', '15', '10366', '805', '0'), +('9', '20', '15', '30360', '600', '0'), +('9', '20', '15', '14679', '580', '0'), +('9', '20', '20', '11676', '8690', '0'), +('9', '20', '20', '11601', '7031', '0'), +('9', '20', '20', '2922', '4899', '0'), +('9', '20', '20', '1365', '4200', '0'), +('9', '20', '12', '11624', '1041', '0'), +('9', '20', '12', '20655', '758', '0'), +('9', '20', '12', '4905', '729', '0'), +('9', '20', '12', '4835', '695', '0'), +('9', '20', '18', '4412', '633', '0'), +('9', '20', '18', '4836', '464', '0'), +('9', '20', '18', '4906', '388', '0'), +('9', '20', '18', '2374', '266', '0'), +('9', '20', '19', '1534', '1276', '0'), +('9', '20', '19', '4837', '1024', '0'), +('9', '20', '19', '68239', '481', '0'), +('9', '20', '19', '4907', '392', '0'), +('9', '20', '13', '27704', '34043', '0'), +('9', '20', '13', '7257', '26152', '0'), +('9', '20', '13', '6952', '25785', '0'), +('9', '20', '13', '11557', '25219', '0'), +('9', '20', '14', '6952', '25785', '0'), +('9', '20', '14', '7257', '23041', '0'), +('9', '20', '14', '11557', '22800', '0'), +('9', '20', '14', '11661', '22080', '0'), +('9', '20', '11', '8325', '14120', '0'), +('9', '20', '11', '8408', '14050', '0'), +('9', '20', '11', '8811', '11040', '0'), +('9', '20', '11', '8810', '10160', '0'), +('9', '21', '22', '8567', '0', '0'), +('9', '21', '22', '10323', '0', '0'), +('9', '21', '22', '66166', '0', '0'), +('9', '21', '22', '10664', '0', '0'), +('9', '21', '1', '30361', '1140', '0'), +('9', '21', '1', '14701', '362', '0'), +('9', '21', '1', '10165', '313', '0'), +('9', '21', '1', '14658', '258', '0'), +('9', '21', '2', '10142', '1272', '0'), +('9', '21', '2', '4341', '1262', '0'), +('9', '21', '2', '30363', '1200', '0'), +('9', '21', '2', '3040', '1082', '0'), +('9', '21', '3', '14706', '990', '0'), +('9', '21', '3', '14705', '990', '0'), +('9', '21', '3', '27702', '807', '0'), +('9', '21', '3', '14695', '423', '0'), +('9', '21', '5', '30362', '1140', '0'), +('9', '21', '5', '14552', '884', '0'), +('9', '21', '5', '10147', '630', '0'), +('9', '21', '5', '14703', '550', '0'), +('9', '21', '8', '11621', '8325', '0'), +('9', '21', '8', '11551', '1505', '0'), +('9', '21', '8', '3403', '1171', '0'), +('9', '21', '8', '1409', '812', '0'), +('9', '21', '6', '1557', '5310', '0'), +('9', '21', '6', '3309', '517', '0'), +('9', '21', '6', '3165', '512', '0'), +('9', '21', '6', '4165', '362', '0'), +('9', '21', '17', '11623', '1935', '0'), +('9', '21', '17', '4832', '1418', '0'), +('9', '21', '17', '4902', '1107', '0'), +('9', '21', '17', '3164', '867', '0'), +('9', '21', '7', '4833', '725', '0'), +('9', '21', '7', '4411', '633', '0'), +('9', '21', '7', '10104', '284', '0'), +('9', '21', '7', '71303', '271', '0'), +('9', '21', '9', '27703', '1840', '0'), +('9', '21', '9', '4834', '920', '0'), +('9', '21', '9', '4904', '574', '0'), +('9', '21', '9', '13280', '493', '0'), +('9', '21', '15', '14707', '1050', '0'), +('9', '21', '15', '10366', '805', '0'), +('9', '21', '15', '30360', '600', '0'), +('9', '21', '15', '14679', '580', '0'), +('9', '21', '20', '11676', '8690', '0'), +('9', '21', '20', '11601', '7035', '0'), +('9', '21', '20', '2922', '4899', '0'), +('9', '21', '20', '1365', '4200', '0'), +('9', '21', '12', '11624', '1044', '0'), +('9', '21', '12', '20655', '759', '0'), +('9', '21', '12', '4905', '729', '0'), +('9', '21', '12', '4835', '697', '0'), +('9', '21', '18', '4412', '633', '0'), +('9', '21', '18', '4836', '466', '0'), +('9', '21', '18', '4906', '388', '0'), +('9', '21', '18', '2374', '266', '0'), +('9', '21', '19', '1534', '1276', '0'), +('9', '21', '19', '4837', '1024', '0'), +('9', '21', '19', '68239', '481', '0'), +('9', '21', '19', '4907', '392', '0'), +('9', '21', '13', '27704', '34590', '0'), +('9', '21', '13', '7257', '26744', '0'), +('9', '21', '13', '6952', '25785', '0'), +('9', '21', '13', '11557', '25631', '0'), +('9', '21', '14', '6952', '25785', '0'), +('9', '21', '14', '7257', '23041', '0'), +('9', '21', '14', '11557', '22800', '0'), +('9', '21', '14', '11661', '22080', '0'), +('9', '21', '11', '8325', '14120', '0'), +('9', '21', '11', '8408', '14050', '0'), +('9', '21', '11', '8811', '11040', '0'), +('9', '21', '11', '8810', '10160', '0'), +('9', '22', '22', '8567', '0', '0'), +('9', '22', '22', '10323', '0', '0'), +('9', '22', '22', '66166', '0', '0'), +('9', '22', '22', '10664', '0', '0'), +('9', '22', '1', '30361', '1140', '0'), +('9', '22', '1', '14701', '362', '0'), +('9', '22', '1', '10165', '313', '0'), +('9', '22', '1', '14658', '258', '0'), +('9', '22', '2', '10142', '1272', '0'), +('9', '22', '2', '4341', '1262', '0'), +('9', '22', '2', '30363', '1200', '0'), +('9', '22', '2', '3040', '1082', '0'), +('9', '22', '3', '14706', '990', '0'), +('9', '22', '3', '14705', '990', '0'), +('9', '22', '3', '27702', '807', '0'), +('9', '22', '3', '14695', '423', '0'), +('9', '22', '5', '30362', '1140', '0'), +('9', '22', '5', '14552', '884', '0'), +('9', '22', '5', '10147', '630', '0'), +('9', '22', '5', '14703', '550', '0'), +('9', '22', '8', '11621', '8325', '0'), +('9', '22', '8', '11551', '1505', '0'), +('9', '22', '8', '3403', '1171', '0'), +('9', '22', '8', '1409', '812', '0'), +('9', '22', '6', '1557', '5310', '0'), +('9', '22', '6', '3309', '517', '0'), +('9', '22', '6', '3165', '512', '0'), +('9', '22', '6', '4165', '362', '0'), +('9', '22', '17', '11623', '1935', '0'), +('9', '22', '17', '4832', '1424', '0'), +('9', '22', '17', '4902', '1107', '0'), +('9', '22', '17', '3164', '867', '0'), +('9', '22', '7', '4833', '725', '0'), +('9', '22', '7', '4411', '633', '0'), +('9', '22', '7', '10104', '284', '0'), +('9', '22', '7', '71303', '271', '0'), +('9', '22', '9', '27703', '1840', '0'), +('9', '22', '9', '4834', '920', '0'), +('9', '22', '9', '4904', '574', '0'), +('9', '22', '9', '13280', '493', '0'), +('9', '22', '15', '14707', '1050', '0'), +('9', '22', '15', '10366', '805', '0'), +('9', '22', '15', '30360', '600', '0'), +('9', '22', '15', '14679', '580', '0'), +('9', '22', '20', '11676', '8690', '0'), +('9', '22', '20', '11601', '7038', '0'), +('9', '22', '20', '2922', '4899', '0'), +('9', '22', '20', '1365', '4200', '0'), +('9', '22', '12', '11624', '1046', '0'), +('9', '22', '12', '20655', '759', '0'), +('9', '22', '12', '4905', '729', '0'), +('9', '22', '12', '4835', '699', '0'), +('9', '22', '18', '4412', '633', '0'), +('9', '22', '18', '4836', '467', '0'), +('9', '22', '18', '4906', '388', '0'), +('9', '22', '18', '2374', '266', '0'), +('9', '22', '19', '1534', '1276', '0'), +('9', '22', '19', '4837', '1024', '0'), +('9', '22', '19', '68239', '481', '0'), +('9', '22', '19', '4907', '392', '0'), +('9', '22', '13', '27704', '35146', '0'), +('9', '22', '13', '7257', '27345', '0'), +('9', '22', '13', '11557', '26050', '0'), +('9', '22', '13', '6952', '25785', '0'), +('9', '22', '14', '6952', '25785', '0'), +('9', '22', '14', '7257', '23041', '0'), +('9', '22', '14', '11557', '22800', '0'), +('9', '22', '14', '11661', '22080', '0'), +('9', '22', '11', '8325', '14120', '0'), +('9', '22', '11', '8408', '14050', '0'), +('9', '22', '11', '8811', '11040', '0'), +('9', '22', '11', '8810', '10160', '0'), +('9', '23', '22', '8567', '0', '0'), +('9', '23', '22', '10323', '0', '0'), +('9', '23', '22', '66166', '0', '0'), +('9', '23', '22', '10664', '0', '0'), +('9', '23', '1', '30361', '1140', '0'), +('9', '23', '1', '14701', '362', '0'), +('9', '23', '1', '10165', '313', '0'), +('9', '23', '1', '14658', '258', '0'), +('9', '23', '2', '10142', '1272', '0'), +('9', '23', '2', '4341', '1262', '0'), +('9', '23', '2', '30363', '1200', '0'), +('9', '23', '2', '3040', '1082', '0'), +('9', '23', '3', '14706', '990', '0'), +('9', '23', '3', '14705', '990', '0'), +('9', '23', '3', '27702', '807', '0'), +('9', '23', '3', '14695', '423', '0'), +('9', '23', '5', '30362', '1140', '0'), +('9', '23', '5', '14552', '884', '0'), +('9', '23', '5', '10147', '630', '0'), +('9', '23', '5', '14703', '550', '0'), +('9', '23', '8', '11621', '8325', '0'), +('9', '23', '8', '11551', '1505', '0'), +('9', '23', '8', '3403', '1171', '0'), +('9', '23', '8', '1409', '812', '0'), +('9', '23', '6', '1557', '5310', '0'), +('9', '23', '6', '3309', '517', '0'), +('9', '23', '6', '3165', '512', '0'), +('9', '23', '6', '4165', '362', '0'), +('9', '23', '17', '11623', '1935', '0'), +('9', '23', '17', '4832', '1430', '0'), +('9', '23', '17', '4902', '1107', '0'), +('9', '23', '17', '3164', '867', '0'), +('9', '23', '7', '4833', '725', '0'), +('9', '23', '7', '4411', '633', '0'), +('9', '23', '7', '10104', '284', '0'), +('9', '23', '7', '71303', '271', '0'), +('9', '23', '9', '27703', '1840', '0'), +('9', '23', '9', '4834', '920', '0'), +('9', '23', '9', '4904', '574', '0'), +('9', '23', '9', '13280', '493', '0'), +('9', '23', '15', '14707', '1050', '0'), +('9', '23', '15', '10366', '805', '0'), +('9', '23', '15', '30360', '600', '0'), +('9', '23', '15', '14679', '580', '0'), +('9', '23', '20', '11676', '8690', '0'), +('9', '23', '20', '11601', '7043', '0'), +('9', '23', '20', '2922', '4899', '0'), +('9', '23', '20', '1365', '4200', '0'), +('9', '23', '12', '11624', '1049', '0'), +('9', '23', '12', '20655', '760', '0'), +('9', '23', '12', '4905', '729', '0'), +('9', '23', '12', '4835', '701', '0'), +('9', '23', '18', '4412', '633', '0'), +('9', '23', '18', '4836', '470', '0'), +('9', '23', '18', '4906', '388', '0'), +('9', '23', '18', '3171', '266', '0'), +('9', '23', '19', '1534', '1276', '0'), +('9', '23', '19', '4837', '1024', '0'), +('9', '23', '19', '68239', '481', '0'), +('9', '23', '19', '4907', '392', '0'), +('9', '23', '13', '27704', '35711', '0'), +('9', '23', '13', '7257', '27956', '0'), +('9', '23', '13', '11557', '26475', '0'), +('9', '23', '13', '11661', '26065', '0'), +('9', '23', '14', '6952', '25785', '0'), +('9', '23', '14', '7257', '23041', '0'), +('9', '23', '14', '11557', '22800', '0'), +('9', '23', '14', '11661', '22080', '0'), +('9', '23', '11', '8325', '14120', '0'), +('9', '23', '11', '8408', '14050', '0'), +('9', '23', '11', '8811', '11040', '0'), +('9', '23', '11', '8810', '10160', '0'), +('9', '24', '22', '8567', '0', '0'), +('9', '24', '22', '10323', '0', '0'), +('9', '24', '22', '66166', '0', '0'), +('9', '24', '22', '10664', '0', '0'), +('9', '24', '1', '30361', '1140', '0'), +('9', '24', '1', '14701', '362', '0'), +('9', '24', '1', '10165', '313', '0'), +('9', '24', '1', '14658', '258', '0'), +('9', '24', '2', '10142', '1272', '0'), +('9', '24', '2', '4341', '1262', '0'), +('9', '24', '2', '30363', '1200', '0'), +('9', '24', '2', '3040', '1082', '0'), +('9', '24', '3', '14706', '990', '0'), +('9', '24', '3', '14705', '990', '0'), +('9', '24', '3', '27702', '807', '0'), +('9', '24', '3', '14695', '423', '0'), +('9', '24', '5', '30362', '1140', '0'), +('9', '24', '5', '14552', '884', '0'), +('9', '24', '5', '10147', '630', '0'), +('9', '24', '5', '14703', '550', '0'), +('9', '24', '8', '11621', '8325', '0'), +('9', '24', '8', '11551', '1505', '0'), +('9', '24', '8', '3403', '1171', '0'), +('9', '24', '8', '1409', '812', '0'), +('9', '24', '6', '1557', '5310', '0'), +('9', '24', '6', '3309', '517', '0'), +('9', '24', '6', '3165', '512', '0'), +('9', '24', '6', '4165', '362', '0'), +('9', '24', '17', '11623', '1935', '0'), +('9', '24', '17', '4832', '1436', '0'), +('9', '24', '17', '4902', '1107', '0'), +('9', '24', '17', '3164', '867', '0'), +('9', '24', '7', '4833', '725', '0'), +('9', '24', '7', '4411', '633', '0'), +('9', '24', '7', '10104', '284', '0'), +('9', '24', '7', '71303', '271', '0'), +('9', '24', '9', '27703', '1840', '0'), +('9', '24', '9', '4834', '920', '0'), +('9', '24', '9', '4904', '574', '0'), +('9', '24', '9', '13280', '493', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '24', '15', '14707', '1050', '0'), +('9', '24', '15', '10366', '805', '0'), +('9', '24', '15', '30360', '600', '0'), +('9', '24', '15', '14679', '580', '0'), +('9', '24', '20', '11676', '8690', '0'), +('9', '24', '20', '11601', '7047', '0'), +('9', '24', '20', '2922', '4899', '0'), +('9', '24', '20', '1365', '4200', '0'), +('9', '24', '12', '11624', '1052', '0'), +('9', '24', '12', '20655', '761', '0'), +('9', '24', '12', '4905', '729', '0'), +('9', '24', '12', '4835', '703', '0'), +('9', '24', '18', '4412', '633', '0'), +('9', '24', '18', '4836', '472', '0'), +('9', '24', '18', '4906', '388', '0'), +('9', '24', '18', '3171', '268', '0'), +('9', '24', '19', '1534', '1276', '0'), +('9', '24', '19', '4837', '1024', '0'), +('9', '24', '19', '68239', '481', '0'), +('9', '24', '19', '4907', '392', '0'), +('9', '24', '13', '27704', '36284', '0'), +('9', '24', '13', '7257', '28577', '0'), +('9', '24', '13', '11557', '26907', '0'), +('9', '24', '13', '11661', '26544', '0'), +('9', '24', '14', '6952', '25785', '0'), +('9', '24', '14', '7257', '23041', '0'), +('9', '24', '14', '11557', '22800', '0'), +('9', '24', '14', '11661', '22080', '0'), +('9', '24', '11', '8325', '14120', '0'), +('9', '24', '11', '8408', '14050', '0'), +('9', '24', '11', '8811', '11040', '0'), +('9', '24', '11', '8810', '10160', '0'), +('9', '25', '22', '8567', '0', '0'), +('9', '25', '22', '10323', '0', '0'), +('9', '25', '22', '66166', '0', '0'), +('9', '25', '22', '10664', '0', '0'), +('9', '25', '1', '30361', '1140', '0'), +('9', '25', '1', '14701', '362', '0'), +('9', '25', '1', '10165', '313', '0'), +('9', '25', '1', '14658', '258', '0'), +('9', '25', '2', '10142', '1272', '0'), +('9', '25', '2', '4341', '1262', '0'), +('9', '25', '2', '30363', '1200', '0'), +('9', '25', '2', '3040', '1082', '0'), +('9', '25', '3', '14706', '990', '0'), +('9', '25', '3', '14705', '990', '0'), +('9', '25', '3', '27702', '807', '0'), +('9', '25', '3', '14695', '423', '0'), +('9', '25', '5', '30362', '1140', '0'), +('9', '25', '5', '14552', '884', '0'), +('9', '25', '5', '10147', '630', '0'), +('9', '25', '5', '14703', '550', '0'), +('9', '25', '8', '11621', '8325', '0'), +('9', '25', '8', '11551', '1505', '0'), +('9', '25', '8', '3403', '1171', '0'), +('9', '25', '8', '1409', '812', '0'), +('9', '25', '6', '1557', '5310', '0'), +('9', '25', '6', '3309', '517', '0'), +('9', '25', '6', '3165', '512', '0'), +('9', '25', '6', '4165', '362', '0'), +('9', '25', '17', '11623', '1935', '0'), +('9', '25', '17', '4832', '1442', '0'), +('9', '25', '17', '4902', '1107', '0'), +('9', '25', '17', '3164', '867', '0'), +('9', '25', '7', '4833', '725', '0'), +('9', '25', '7', '4411', '633', '0'), +('9', '25', '7', '10104', '284', '0'), +('9', '25', '7', '71303', '271', '0'), +('9', '25', '9', '27703', '1840', '0'), +('9', '25', '9', '4834', '920', '0'), +('9', '25', '9', '4904', '574', '0'), +('9', '25', '9', '13280', '493', '0'), +('9', '25', '15', '14707', '1050', '0'), +('9', '25', '15', '10366', '805', '0'), +('9', '25', '15', '30360', '600', '0'), +('9', '25', '15', '14679', '580', '0'), +('9', '25', '20', '11676', '8690', '0'), +('9', '25', '20', '11601', '7050', '0'), +('9', '25', '20', '2922', '4899', '0'), +('9', '25', '20', '1365', '4200', '0'), +('9', '25', '12', '11624', '1055', '0'), +('9', '25', '12', '20655', '762', '0'), +('9', '25', '12', '4905', '729', '0'), +('9', '25', '12', '4835', '705', '0'), +('9', '25', '18', '4412', '633', '0'), +('9', '25', '18', '4836', '474', '0'), +('9', '25', '18', '4906', '388', '0'), +('9', '25', '18', '3171', '270', '0'), +('9', '25', '19', '1534', '1276', '0'), +('9', '25', '19', '4837', '1024', '0'), +('9', '25', '19', '68239', '481', '0'), +('9', '25', '19', '4907', '392', '0'), +('9', '25', '13', '27704', '36865', '0'), +('9', '25', '13', '7257', '29206', '0'), +('9', '25', '13', '11557', '27345', '0'), +('9', '25', '13', '11661', '27030', '0'), +('9', '25', '14', '6952', '25785', '0'), +('9', '25', '14', '7257', '23041', '0'), +('9', '25', '14', '11557', '22800', '0'), +('9', '25', '14', '11661', '22080', '0'), +('9', '25', '11', '8325', '14120', '0'), +('9', '25', '11', '8408', '14050', '0'), +('9', '25', '11', '8811', '11040', '0'), +('9', '25', '11', '8810', '10160', '0'), +('9', '26', '22', '8567', '0', '0'), +('9', '26', '22', '10323', '0', '0'), +('9', '26', '22', '66166', '0', '0'), +('9', '26', '22', '10664', '0', '0'), +('9', '26', '1', '30361', '1140', '0'), +('9', '26', '1', '14701', '362', '0'), +('9', '26', '1', '10165', '313', '0'), +('9', '26', '1', '14658', '258', '0'), +('9', '26', '2', '10142', '1272', '0'), +('9', '26', '2', '4341', '1262', '0'), +('9', '26', '2', '30363', '1200', '0'), +('9', '26', '2', '3040', '1082', '0'), +('9', '26', '3', '14706', '990', '0'), +('9', '26', '3', '14705', '990', '0'), +('9', '26', '3', '27702', '807', '0'), +('9', '26', '3', '14695', '423', '0'), +('9', '26', '5', '30362', '1140', '0'), +('9', '26', '5', '14552', '884', '0'), +('9', '26', '5', '10147', '630', '0'), +('9', '26', '5', '14703', '550', '0'), +('9', '26', '8', '11621', '8325', '0'), +('9', '26', '8', '11551', '1505', '0'), +('9', '26', '8', '3403', '1171', '0'), +('9', '26', '8', '1409', '812', '0'), +('9', '26', '6', '1557', '5310', '0'), +('9', '26', '6', '3309', '517', '0'), +('9', '26', '6', '3165', '512', '0'), +('9', '26', '6', '4165', '362', '0'), +('9', '26', '17', '11623', '1935', '0'), +('9', '26', '17', '4832', '1448', '0'), +('9', '26', '17', '4902', '1107', '0'), +('9', '26', '17', '3164', '867', '0'), +('9', '26', '7', '4833', '725', '0'), +('9', '26', '7', '4411', '633', '0'), +('9', '26', '7', '10104', '284', '0'), +('9', '26', '7', '71303', '271', '0'), +('9', '26', '9', '27703', '1840', '0'), +('9', '26', '9', '4834', '920', '0'), +('9', '26', '9', '4904', '574', '0'), +('9', '26', '9', '13280', '493', '0'), +('9', '26', '15', '14707', '1050', '0'), +('9', '26', '15', '10366', '805', '0'), +('9', '26', '15', '30360', '600', '0'), +('9', '26', '15', '14679', '580', '0'), +('9', '26', '20', '11676', '8690', '0'), +('9', '26', '20', '11601', '7055', '0'), +('9', '26', '20', '2922', '4899', '0'), +('9', '26', '20', '1365', '4200', '0'), +('9', '26', '12', '11624', '1058', '0'), +('9', '26', '12', '20655', '763', '0'), +('9', '26', '12', '4905', '729', '0'), +('9', '26', '12', '4835', '707', '0'), +('9', '26', '18', '4412', '633', '0'), +('9', '26', '18', '4836', '476', '0'), +('9', '26', '18', '4906', '388', '0'), +('9', '26', '18', '3171', '272', '0'), +('9', '26', '19', '1534', '1276', '0'), +('9', '26', '19', '4837', '1024', '0'), +('9', '26', '19', '68239', '481', '0'), +('9', '26', '19', '4907', '392', '0'), +('9', '26', '13', '27704', '37456', '0'), +('9', '26', '13', '7257', '29845', '0'), +('9', '26', '13', '11557', '27790', '0'), +('9', '26', '13', '11610', '27564', '0'), +('9', '26', '14', '6952', '25785', '0'), +('9', '26', '14', '7257', '23041', '0'), +('9', '26', '14', '11557', '22800', '0'), +('9', '26', '14', '11661', '22080', '0'), +('9', '26', '11', '8325', '14120', '0'), +('9', '26', '11', '8408', '14050', '0'), +('9', '26', '11', '8811', '11040', '0'), +('9', '26', '11', '8810', '10160', '0'), +('9', '27', '22', '8567', '0', '0'), +('9', '27', '22', '10323', '0', '0'), +('9', '27', '22', '66166', '0', '0'), +('9', '27', '22', '10664', '0', '0'), +('9', '27', '1', '30361', '1140', '0'), +('9', '27', '1', '14701', '362', '0'), +('9', '27', '1', '10165', '313', '0'), +('9', '27', '1', '14658', '258', '0'), +('9', '27', '2', '10142', '1272', '0'), +('9', '27', '2', '4341', '1262', '0'), +('9', '27', '2', '30363', '1200', '0'), +('9', '27', '2', '3040', '1082', '0'), +('9', '27', '3', '14706', '990', '0'), +('9', '27', '3', '14705', '990', '0'), +('9', '27', '3', '27702', '807', '0'), +('9', '27', '3', '14695', '423', '0'), +('9', '27', '5', '30362', '1140', '0'), +('9', '27', '5', '14552', '884', '0'), +('9', '27', '5', '10147', '630', '0'), +('9', '27', '5', '14703', '550', '0'), +('9', '27', '8', '11621', '8325', '0'), +('9', '27', '8', '11551', '1505', '0'), +('9', '27', '8', '3403', '1171', '0'), +('9', '27', '8', '1409', '812', '0'), +('9', '27', '6', '1557', '5310', '0'), +('9', '27', '6', '3309', '517', '0'), +('9', '27', '6', '3165', '512', '0'), +('9', '27', '6', '4165', '362', '0'), +('9', '27', '17', '11623', '1935', '0'), +('9', '27', '17', '4832', '1454', '0'), +('9', '27', '17', '4902', '1107', '0'), +('9', '27', '17', '3164', '867', '0'), +('9', '27', '7', '4833', '725', '0'), +('9', '27', '7', '4411', '633', '0'), +('9', '27', '7', '10104', '284', '0'), +('9', '27', '7', '71303', '271', '0'), +('9', '27', '9', '27703', '1840', '0'), +('9', '27', '9', '4834', '920', '0'), +('9', '27', '9', '4904', '574', '0'), +('9', '27', '9', '13280', '493', '0'), +('9', '27', '15', '14707', '1050', '0'), +('9', '27', '15', '10366', '805', '0'), +('9', '27', '15', '30360', '600', '0'), +('9', '27', '15', '14679', '580', '0'), +('9', '27', '20', '11676', '8690', '0'), +('9', '27', '20', '11601', '7059', '0'), +('9', '27', '20', '2922', '4899', '0'), +('9', '27', '20', '1365', '4200', '0'), +('9', '27', '12', '11624', '1060', '0'), +('9', '27', '12', '20655', '764', '0'), +('9', '27', '12', '4905', '729', '0'), +('9', '27', '12', '4835', '709', '0'), +('9', '27', '18', '4412', '633', '0'), +('9', '27', '18', '4836', '478', '0'), +('9', '27', '18', '4906', '388', '0'), +('9', '27', '18', '3171', '274', '0'), +('9', '27', '19', '1534', '1276', '0'), +('9', '27', '19', '4837', '1024', '0'), +('9', '27', '19', '68239', '481', '0'), +('9', '27', '19', '4907', '392', '0'), +('9', '27', '13', '27704', '38055', '0'), +('9', '27', '13', '7257', '30494', '0'), +('9', '27', '13', '11557', '28241', '0'), +('9', '27', '13', '11610', '28212', '0'), +('9', '27', '14', '6952', '25785', '0'), +('9', '27', '14', '7257', '23041', '0'), +('9', '27', '14', '11557', '22800', '0'), +('9', '27', '14', '11661', '22080', '0'), +('9', '27', '11', '8325', '14120', '0'), +('9', '27', '11', '8408', '14050', '0'), +('9', '27', '11', '8811', '11040', '0'), +('9', '27', '11', '45137', '10253', '0'), +('9', '28', '22', '8567', '0', '0'), +('9', '28', '22', '10323', '0', '0'), +('9', '28', '22', '66166', '0', '0'), +('9', '28', '22', '10664', '0', '0'), +('9', '28', '1', '30361', '1140', '0'), +('9', '28', '1', '14701', '362', '0'), +('9', '28', '1', '10165', '313', '0'), +('9', '28', '1', '14658', '258', '0'), +('9', '28', '2', '10142', '1272', '0'), +('9', '28', '2', '4341', '1262', '0'), +('9', '28', '2', '30363', '1200', '0'), +('9', '28', '2', '3040', '1082', '0'), +('9', '28', '3', '14706', '990', '0'), +('9', '28', '3', '14705', '990', '0'), +('9', '28', '3', '27702', '807', '0'), +('9', '28', '3', '14695', '423', '0'), +('9', '28', '5', '30362', '1140', '0'), +('9', '28', '5', '14552', '884', '0'), +('9', '28', '5', '10147', '630', '0'), +('9', '28', '5', '14703', '550', '0'), +('9', '28', '8', '11621', '8325', '0'), +('9', '28', '8', '11551', '1505', '0'), +('9', '28', '8', '3403', '1171', '0'), +('9', '28', '8', '1409', '812', '0'), +('9', '28', '6', '1557', '5310', '0'), +('9', '28', '6', '3309', '517', '0'), +('9', '28', '6', '3165', '512', '0'), +('9', '28', '6', '4165', '362', '0'), +('9', '28', '17', '11623', '1935', '0'), +('9', '28', '17', '4832', '1460', '0'), +('9', '28', '17', '4902', '1107', '0'), +('9', '28', '17', '3164', '867', '0'), +('9', '28', '7', '4833', '725', '0'), +('9', '28', '7', '4411', '633', '0'), +('9', '28', '7', '10104', '284', '0'), +('9', '28', '7', '71303', '271', '0'), +('9', '28', '9', '27703', '1840', '0'), +('9', '28', '9', '4834', '920', '0'), +('9', '28', '9', '4904', '574', '0'), +('9', '28', '9', '13280', '493', '0'), +('9', '28', '15', '14707', '1050', '0'), +('9', '28', '15', '10366', '805', '0'), +('9', '28', '15', '30360', '600', '0'), +('9', '28', '15', '14679', '580', '0'), +('9', '28', '20', '11676', '8690', '0'), +('9', '28', '20', '11601', '7063', '0'), +('9', '28', '20', '2922', '4899', '0'), +('9', '28', '20', '1365', '4200', '0'), +('9', '28', '12', '11624', '1063', '0'), +('9', '28', '12', '20655', '764', '0'), +('9', '28', '12', '4905', '729', '0'), +('9', '28', '12', '4835', '711', '0'), +('9', '28', '18', '4412', '633', '0'), +('9', '28', '18', '4836', '480', '0'), +('9', '28', '18', '4906', '388', '0'), +('9', '28', '18', '3171', '276', '0'), +('9', '28', '19', '1534', '1276', '0'), +('9', '28', '19', '4837', '1024', '0'), +('9', '28', '19', '68239', '481', '0'), +('9', '28', '19', '4907', '392', '0'), +('9', '28', '13', '27704', '38663', '0'), +('9', '28', '13', '7257', '31151', '0'), +('9', '28', '13', '11610', '28870', '0'), +('9', '28', '13', '11557', '28698', '0'), +('9', '28', '14', '6952', '25785', '0'), +('9', '28', '14', '7257', '23041', '0'), +('9', '28', '14', '11557', '22800', '0'), +('9', '28', '14', '11661', '22080', '0'), +('9', '28', '11', '8325', '14120', '0'), +('9', '28', '11', '8408', '14050', '0'), +('9', '28', '11', '8811', '11040', '0'), +('9', '28', '11', '45137', '10572', '0'), +('9', '29', '22', '8567', '0', '0'), +('9', '29', '22', '10323', '0', '0'), +('9', '29', '22', '66166', '0', '0'), +('9', '29', '22', '10664', '0', '0'), +('9', '29', '1', '30361', '1140', '0'), +('9', '29', '1', '14701', '362', '0'), +('9', '29', '1', '10165', '313', '0'), +('9', '29', '1', '14658', '258', '0'), +('9', '29', '2', '10142', '1272', '0'), +('9', '29', '2', '4341', '1262', '0'), +('9', '29', '2', '30363', '1200', '0'), +('9', '29', '2', '3040', '1082', '0'), +('9', '29', '3', '14706', '990', '0'), +('9', '29', '3', '14705', '990', '0'), +('9', '29', '3', '27702', '807', '0'), +('9', '29', '3', '14695', '423', '0'), +('9', '29', '5', '30362', '1140', '0'), +('9', '29', '5', '14552', '884', '0'), +('9', '29', '5', '10147', '630', '0'), +('9', '29', '5', '14703', '550', '0'), +('9', '29', '8', '11621', '8325', '0'), +('9', '29', '8', '11551', '1505', '0'), +('9', '29', '8', '3403', '1171', '0'), +('9', '29', '8', '1409', '812', '0'), +('9', '29', '6', '1557', '5310', '0'), +('9', '29', '6', '3309', '517', '0'), +('9', '29', '6', '3165', '512', '0'), +('9', '29', '6', '4165', '362', '0'), +('9', '29', '17', '11623', '1935', '0'), +('9', '29', '17', '4832', '1466', '0'), +('9', '29', '17', '4902', '1107', '0'), +('9', '29', '17', '3164', '867', '0'), +('9', '29', '7', '4833', '725', '0'), +('9', '29', '7', '4411', '633', '0'), +('9', '29', '7', '10104', '284', '0'), +('9', '29', '7', '71303', '271', '0'), +('9', '29', '9', '27703', '1840', '0'), +('9', '29', '9', '4834', '920', '0'), +('9', '29', '9', '4904', '574', '0'), +('9', '29', '9', '13280', '493', '0'), +('9', '29', '15', '14707', '1050', '0'), +('9', '29', '15', '10366', '805', '0'), +('9', '29', '15', '30360', '600', '0'), +('9', '29', '15', '14679', '580', '0'), +('9', '29', '20', '11676', '8690', '0'), +('9', '29', '20', '11601', '7067', '0'), +('9', '29', '20', '2922', '4899', '0'), +('9', '29', '20', '1365', '4200', '0'), +('9', '29', '12', '11624', '1066', '0'), +('9', '29', '12', '20655', '765', '0'), +('9', '29', '12', '4905', '729', '0'), +('9', '29', '12', '4835', '713', '0'), +('9', '29', '18', '4412', '633', '0'), +('9', '29', '18', '4836', '482', '0'), +('9', '29', '18', '4906', '388', '0'), +('9', '29', '18', '3171', '278', '0'), +('9', '29', '19', '1534', '1276', '0'), +('9', '29', '19', '4837', '1024', '0'), +('9', '29', '19', '68239', '481', '0'), +('9', '29', '19', '4907', '392', '0'), +('9', '29', '13', '27704', '39279', '0'), +('9', '29', '13', '7257', '31818', '0'), +('9', '29', '13', '11610', '29537', '0'), +('9', '29', '13', '11557', '29162', '0'), +('9', '29', '14', '6952', '25785', '0'), +('9', '29', '14', '7257', '23041', '0'), +('9', '29', '14', '11557', '22800', '0'), +('9', '29', '14', '11661', '22080', '0'), +('9', '29', '11', '8325', '14120', '0'), +('9', '29', '11', '8408', '14050', '0'), +('9', '29', '11', '8811', '11040', '0'), +('9', '29', '11', '45137', '10952', '0'), +('9', '30', '22', '8567', '0', '0'), +('9', '30', '22', '10323', '0', '0'), +('9', '30', '22', '66166', '0', '0'), +('9', '30', '22', '10664', '0', '0'), +('9', '30', '1', '30361', '1140', '0'), +('9', '30', '1', '14701', '362', '0'), +('9', '30', '1', '10165', '313', '0'), +('9', '30', '1', '14658', '258', '0'), +('9', '30', '2', '10142', '1272', '0'), +('9', '30', '2', '4341', '1262', '0'), +('9', '30', '2', '30363', '1200', '0'), +('9', '30', '2', '3040', '1082', '0'), +('9', '30', '3', '14706', '990', '0'), +('9', '30', '3', '14705', '990', '0'), +('9', '30', '3', '27702', '807', '0'), +('9', '30', '3', '14695', '423', '0'), +('9', '30', '5', '30362', '1140', '0'), +('9', '30', '5', '14552', '884', '0'), +('9', '30', '5', '10147', '630', '0'), +('9', '30', '5', '14703', '550', '0'), +('9', '30', '8', '11621', '8325', '0'), +('9', '30', '8', '11551', '1505', '0'), +('9', '30', '8', '3403', '1171', '0'), +('9', '30', '8', '1409', '812', '0'), +('9', '30', '6', '1557', '5310', '0'), +('9', '30', '6', '3309', '517', '0'), +('9', '30', '6', '3165', '512', '0'), +('9', '30', '6', '4165', '362', '0'), +('9', '30', '17', '11623', '1935', '0'), +('9', '30', '17', '4832', '1473', '0'), +('9', '30', '17', '4902', '1107', '0'), +('9', '30', '17', '3164', '867', '0'), +('9', '30', '7', '4833', '725', '0'), +('9', '30', '7', '4411', '633', '0'), +('9', '30', '7', '10104', '284', '0'), +('9', '30', '7', '71303', '271', '0'), +('9', '30', '9', '27703', '1840', '0'), +('9', '30', '9', '4834', '920', '0'), +('9', '30', '9', '4904', '574', '0'), +('9', '30', '9', '13280', '493', '0'), +('9', '30', '15', '14707', '1050', '0'), +('9', '30', '15', '10366', '805', '0'), +('9', '30', '15', '30360', '600', '0'), +('9', '30', '15', '14679', '580', '0'), +('9', '30', '20', '11676', '8690', '0'), +('9', '30', '20', '11601', '7071', '0'), +('9', '30', '20', '2922', '4899', '0'), +('9', '30', '20', '1365', '4200', '0'), +('9', '30', '12', '11624', '1069', '0'), +('9', '30', '12', '20655', '766', '0'), +('9', '30', '12', '4905', '729', '0'), +('9', '30', '12', '4835', '715', '0'), +('9', '30', '18', '4412', '633', '0'), +('9', '30', '18', '4836', '484', '0'), +('9', '30', '18', '4906', '388', '0'), +('9', '30', '18', '3171', '280', '0'), +('9', '30', '19', '1534', '1276', '0'), +('9', '30', '19', '4837', '1024', '0'), +('9', '30', '19', '68239', '481', '0'), +('9', '30', '19', '4907', '392', '0'), +('9', '30', '13', '27704', '39904', '0'), +('9', '30', '13', '7257', '32495', '0'), +('9', '30', '13', '11610', '30214', '0'), +('9', '30', '13', '11557', '29633', '0'), +('9', '30', '14', '6952', '25785', '0'), +('9', '30', '14', '7257', '23041', '0'), +('9', '30', '14', '11557', '22800', '0'), +('9', '30', '14', '11661', '22080', '0'), +('9', '30', '11', '8325', '14120', '0'), +('9', '30', '11', '8408', '14050', '0'), +('9', '30', '11', '45137', '11251', '0'), +('9', '30', '11', '8811', '11040', '0'), +('9', '31', '22', '8567', '0', '0'), +('9', '31', '22', '10323', '0', '0'), +('9', '31', '22', '66166', '0', '0'), +('9', '31', '22', '10664', '0', '0'), +('9', '31', '1', '30361', '1140', '0'), +('9', '31', '1', '14701', '362', '0'), +('9', '31', '1', '10165', '313', '0'), +('9', '31', '1', '14658', '258', '0'), +('9', '31', '2', '10142', '1272', '0'), +('9', '31', '2', '4341', '1262', '0'), +('9', '31', '2', '30363', '1200', '0'), +('9', '31', '2', '3040', '1082', '0'), +('9', '31', '3', '14706', '990', '0'), +('9', '31', '3', '14705', '990', '0'), +('9', '31', '3', '27702', '807', '0'), +('9', '31', '3', '14695', '423', '0'), +('9', '31', '5', '30362', '1140', '0'), +('9', '31', '5', '14552', '884', '0'), +('9', '31', '5', '10147', '630', '0'), +('9', '31', '5', '14703', '550', '0'), +('9', '31', '8', '11621', '8325', '0'), +('9', '31', '8', '11551', '1505', '0'), +('9', '31', '8', '3403', '1171', '0'), +('9', '31', '8', '1409', '812', '0'), +('9', '31', '6', '1557', '5310', '0'), +('9', '31', '6', '3309', '517', '0'), +('9', '31', '6', '3165', '512', '0'), +('9', '31', '6', '4165', '362', '0'), +('9', '31', '17', '11623', '1935', '0'), +('9', '31', '17', '4832', '1479', '0'), +('9', '31', '17', '4902', '1107', '0'), +('9', '31', '17', '3164', '867', '0'), +('9', '31', '7', '4833', '725', '0'), +('9', '31', '7', '4411', '633', '0'), +('9', '31', '7', '10104', '284', '0'), +('9', '31', '7', '71303', '271', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '31', '9', '27703', '1840', '0'), +('9', '31', '9', '4834', '920', '0'), +('9', '31', '9', '4904', '574', '0'), +('9', '31', '9', '13280', '493', '0'), +('9', '31', '15', '14707', '1050', '0'), +('9', '31', '15', '10366', '805', '0'), +('9', '31', '15', '30360', '600', '0'), +('9', '31', '15', '14679', '580', '0'), +('9', '31', '20', '11676', '8690', '0'), +('9', '31', '20', '11601', '7075', '0'), +('9', '31', '20', '2922', '4899', '0'), +('9', '31', '20', '1365', '4200', '0'), +('9', '31', '12', '11624', '1072', '0'), +('9', '31', '12', '20655', '767', '0'), +('9', '31', '12', '4905', '729', '0'), +('9', '31', '12', '4835', '717', '0'), +('9', '31', '18', '4412', '633', '0'), +('9', '31', '18', '4836', '486', '0'), +('9', '31', '18', '4906', '388', '0'), +('9', '31', '18', '3171', '283', '0'), +('9', '31', '19', '1534', '1276', '0'), +('9', '31', '19', '4837', '1024', '0'), +('9', '31', '19', '68239', '481', '0'), +('9', '31', '19', '4907', '392', '0'), +('9', '31', '13', '27704', '40537', '0'), +('9', '31', '13', '7257', '33181', '0'), +('9', '31', '13', '11610', '30899', '0'), +('9', '31', '13', '11557', '30110', '0'), +('9', '31', '14', '6952', '25785', '0'), +('9', '31', '14', '7257', '23041', '0'), +('9', '31', '14', '11557', '22800', '0'), +('9', '31', '14', '11661', '22080', '0'), +('9', '31', '11', '8325', '14120', '0'), +('9', '31', '11', '8408', '14050', '0'), +('9', '31', '11', '45137', '11771', '0'), +('9', '31', '11', '8811', '11040', '0'), +('9', '32', '22', '8567', '0', '0'), +('9', '32', '22', '10323', '0', '0'), +('9', '32', '22', '66166', '0', '0'), +('9', '32', '22', '10664', '0', '0'), +('9', '32', '1', '30361', '1140', '0'), +('9', '32', '1', '14701', '362', '0'), +('9', '32', '1', '10165', '313', '0'), +('9', '32', '1', '14658', '258', '0'), +('9', '32', '2', '10142', '1272', '0'), +('9', '32', '2', '4341', '1262', '0'), +('9', '32', '2', '30363', '1200', '0'), +('9', '32', '2', '3040', '1082', '0'), +('9', '32', '3', '14706', '990', '0'), +('9', '32', '3', '14705', '990', '0'), +('9', '32', '3', '27702', '807', '0'), +('9', '32', '3', '14695', '423', '0'), +('9', '32', '5', '30362', '1140', '0'), +('9', '32', '5', '14552', '884', '0'), +('9', '32', '5', '10147', '630', '0'), +('9', '32', '5', '14703', '550', '0'), +('9', '32', '8', '11621', '8325', '0'), +('9', '32', '8', '11551', '1505', '0'), +('9', '32', '8', '3403', '1171', '0'), +('9', '32', '8', '1409', '812', '0'), +('9', '32', '6', '1557', '5310', '0'), +('9', '32', '6', '3309', '517', '0'), +('9', '32', '6', '3165', '512', '0'), +('9', '32', '6', '4165', '362', '0'), +('9', '32', '17', '11623', '1935', '0'), +('9', '32', '17', '4832', '1485', '0'), +('9', '32', '17', '4902', '1107', '0'), +('9', '32', '17', '3164', '867', '0'), +('9', '32', '7', '4833', '725', '0'), +('9', '32', '7', '4411', '633', '0'), +('9', '32', '7', '10104', '284', '0'), +('9', '32', '7', '71303', '271', '0'), +('9', '32', '9', '27703', '1840', '0'), +('9', '32', '9', '4834', '920', '0'), +('9', '32', '9', '4904', '574', '0'), +('9', '32', '9', '13280', '493', '0'), +('9', '32', '15', '14707', '1050', '0'), +('9', '32', '15', '10366', '805', '0'), +('9', '32', '15', '30360', '600', '0'), +('9', '32', '15', '14679', '580', '0'), +('9', '32', '20', '11676', '8690', '0'), +('9', '32', '20', '11601', '7079', '0'), +('9', '32', '20', '2922', '4899', '0'), +('9', '32', '20', '1365', '4200', '0'), +('9', '32', '12', '11624', '1075', '0'), +('9', '32', '12', '20655', '768', '0'), +('9', '32', '12', '4905', '729', '0'), +('9', '32', '12', '4835', '719', '0'), +('9', '32', '18', '4412', '633', '0'), +('9', '32', '18', '4836', '488', '0'), +('9', '32', '18', '4906', '388', '0'), +('9', '32', '18', '3171', '285', '0'), +('9', '32', '19', '1534', '1276', '0'), +('9', '32', '19', '4837', '1024', '0'), +('9', '32', '19', '68239', '481', '0'), +('9', '32', '19', '4907', '392', '0'), +('9', '32', '13', '27704', '41180', '0'), +('9', '32', '13', '7257', '33876', '0'), +('9', '32', '13', '11610', '31595', '0'), +('9', '32', '13', '11661', '30634', '0'), +('9', '32', '14', '6952', '25785', '0'), +('9', '32', '14', '7257', '23041', '0'), +('9', '32', '14', '11557', '22800', '0'), +('9', '32', '14', '11661', '22080', '0'), +('9', '32', '11', '8325', '14120', '0'), +('9', '32', '11', '8408', '14050', '0'), +('9', '32', '11', '45137', '12091', '0'), +('9', '32', '11', '8811', '11040', '0'), +('9', '33', '22', '8567', '0', '0'), +('9', '33', '22', '10323', '0', '0'), +('9', '33', '22', '66166', '0', '0'), +('9', '33', '22', '10664', '0', '0'), +('9', '33', '1', '30361', '1140', '0'), +('9', '33', '1', '14701', '362', '0'), +('9', '33', '1', '10165', '313', '0'), +('9', '33', '1', '14658', '258', '0'), +('9', '33', '2', '10142', '1272', '0'), +('9', '33', '2', '4341', '1262', '0'), +('9', '33', '2', '30363', '1200', '0'), +('9', '33', '2', '3040', '1082', '0'), +('9', '33', '3', '14706', '990', '0'), +('9', '33', '3', '14705', '990', '0'), +('9', '33', '3', '27702', '807', '0'), +('9', '33', '3', '14695', '423', '0'), +('9', '33', '5', '30362', '1140', '0'), +('9', '33', '5', '14552', '884', '0'), +('9', '33', '5', '10147', '630', '0'), +('9', '33', '5', '14703', '550', '0'), +('9', '33', '8', '11621', '8325', '0'), +('9', '33', '8', '11551', '1505', '0'), +('9', '33', '8', '3403', '1171', '0'), +('9', '33', '8', '1409', '812', '0'), +('9', '33', '6', '1557', '5310', '0'), +('9', '33', '6', '3309', '517', '0'), +('9', '33', '6', '3165', '512', '0'), +('9', '33', '6', '4165', '362', '0'), +('9', '33', '17', '11623', '1935', '0'), +('9', '33', '17', '4832', '1492', '0'), +('9', '33', '17', '4902', '1107', '0'), +('9', '33', '17', '3164', '867', '0'), +('9', '33', '7', '4833', '725', '0'), +('9', '33', '7', '4411', '633', '0'), +('9', '33', '7', '10104', '284', '0'), +('9', '33', '7', '4343', '274', '0'), +('9', '33', '9', '27703', '1840', '0'), +('9', '33', '9', '4834', '920', '0'), +('9', '33', '9', '4904', '574', '0'), +('9', '33', '9', '13280', '493', '0'), +('9', '33', '15', '14707', '1050', '0'), +('9', '33', '15', '10366', '805', '0'), +('9', '33', '15', '30360', '600', '0'), +('9', '33', '15', '14679', '580', '0'), +('9', '33', '20', '11676', '8690', '0'), +('9', '33', '20', '11601', '7084', '0'), +('9', '33', '20', '2922', '4899', '0'), +('9', '33', '20', '1365', '4200', '0'), +('9', '33', '12', '11624', '1078', '0'), +('9', '33', '12', '20655', '769', '0'), +('9', '33', '12', '4905', '729', '0'), +('9', '33', '12', '4835', '721', '0'), +('9', '33', '18', '4412', '633', '0'), +('9', '33', '18', '4836', '490', '0'), +('9', '33', '18', '4906', '388', '0'), +('9', '33', '18', '3171', '287', '0'), +('9', '33', '19', '1534', '1276', '0'), +('9', '33', '19', '4837', '1024', '0'), +('9', '33', '19', '68239', '481', '0'), +('9', '33', '19', '4907', '392', '0'), +('9', '33', '13', '27704', '41831', '0'), +('9', '33', '13', '7257', '34580', '0'), +('9', '33', '13', '11610', '32299', '0'), +('9', '33', '13', '11661', '31177', '0'), +('9', '33', '14', '6952', '25785', '0'), +('9', '33', '14', '7257', '23041', '0'), +('9', '33', '14', '11557', '22800', '0'), +('9', '33', '14', '11661', '22080', '0'), +('9', '33', '11', '8325', '14120', '0'), +('9', '33', '11', '8408', '14050', '0'), +('9', '33', '11', '45137', '12471', '0'), +('9', '33', '11', '8811', '11040', '0'), +('9', '34', '22', '8567', '0', '0'), +('9', '34', '22', '10323', '0', '0'), +('9', '34', '22', '66166', '0', '0'), +('9', '34', '22', '10664', '0', '0'), +('9', '34', '1', '30361', '1140', '0'), +('9', '34', '1', '14701', '362', '0'), +('9', '34', '1', '10165', '313', '0'), +('9', '34', '1', '14658', '258', '0'), +('9', '34', '2', '10142', '1272', '0'), +('9', '34', '2', '4341', '1262', '0'), +('9', '34', '2', '30363', '1200', '0'), +('9', '34', '2', '3040', '1082', '0'), +('9', '34', '3', '14706', '990', '0'), +('9', '34', '3', '14705', '990', '0'), +('9', '34', '3', '27702', '807', '0'), +('9', '34', '3', '14695', '423', '0'), +('9', '34', '5', '30362', '1140', '0'), +('9', '34', '5', '14552', '884', '0'), +('9', '34', '5', '10147', '630', '0'), +('9', '34', '5', '14703', '550', '0'), +('9', '34', '8', '11621', '8325', '0'), +('9', '34', '8', '11551', '1505', '0'), +('9', '34', '8', '3403', '1171', '0'), +('9', '34', '8', '1409', '812', '0'), +('9', '34', '6', '1557', '5310', '0'), +('9', '34', '6', '3309', '517', '0'), +('9', '34', '6', '3165', '512', '0'), +('9', '34', '6', '4165', '362', '0'), +('9', '34', '17', '11623', '1935', '0'), +('9', '34', '17', '4832', '1497', '0'), +('9', '34', '17', '4902', '1107', '0'), +('9', '34', '17', '3164', '867', '0'), +('9', '34', '7', '4833', '725', '0'), +('9', '34', '7', '4411', '633', '0'), +('9', '34', '7', '10104', '284', '0'), +('9', '34', '7', '4343', '277', '0'), +('9', '34', '9', '27703', '1840', '0'), +('9', '34', '9', '4834', '920', '0'), +('9', '34', '9', '4904', '574', '0'), +('9', '34', '9', '13280', '493', '0'), +('9', '34', '15', '14707', '1050', '0'), +('9', '34', '15', '10366', '805', '0'), +('9', '34', '15', '30360', '600', '0'), +('9', '34', '15', '14679', '580', '0'), +('9', '34', '20', '11676', '8690', '0'), +('9', '34', '20', '11601', '7087', '0'), +('9', '34', '20', '2922', '4899', '0'), +('9', '34', '20', '1365', '4200', '0'), +('9', '34', '12', '11624', '1080', '0'), +('9', '34', '12', '20655', '769', '0'), +('9', '34', '12', '4905', '729', '0'), +('9', '34', '12', '4835', '723', '0'), +('9', '34', '18', '4412', '633', '0'), +('9', '34', '18', '4836', '492', '0'), +('9', '34', '18', '4906', '388', '0'), +('9', '34', '18', '3171', '289', '0'), +('9', '34', '19', '1534', '1276', '0'), +('9', '34', '19', '4837', '1024', '0'), +('9', '34', '19', '68239', '481', '0'), +('9', '34', '19', '4907', '392', '0'), +('9', '34', '13', '27704', '42490', '0'), +('9', '34', '13', '7257', '35294', '0'), +('9', '34', '13', '11610', '33013', '0'), +('9', '34', '13', '11661', '31728', '0'), +('9', '34', '14', '6952', '25785', '0'), +('9', '34', '14', '7257', '23041', '0'), +('9', '34', '14', '11557', '22800', '0'), +('9', '34', '14', '11661', '22080', '0'), +('9', '34', '11', '8325', '14120', '0'), +('9', '34', '11', '8408', '14050', '0'), +('9', '34', '11', '45137', '12771', '0'), +('9', '34', '11', '8811', '11040', '0'), +('9', '35', '22', '8567', '0', '0'), +('9', '35', '22', '10323', '0', '0'), +('9', '35', '22', '66166', '0', '0'), +('9', '35', '22', '10664', '0', '0'), +('9', '35', '1', '30361', '1140', '0'), +('9', '35', '1', '14701', '362', '0'), +('9', '35', '1', '10165', '313', '0'), +('9', '35', '1', '14658', '258', '0'), +('9', '35', '2', '10142', '1272', '0'), +('9', '35', '2', '4341', '1262', '0'), +('9', '35', '2', '30363', '1200', '0'), +('9', '35', '2', '3040', '1082', '0'), +('9', '35', '3', '14706', '990', '0'), +('9', '35', '3', '14705', '990', '0'), +('9', '35', '3', '27702', '807', '0'), +('9', '35', '3', '14695', '423', '0'), +('9', '35', '5', '30362', '1140', '0'), +('9', '35', '5', '14552', '884', '0'), +('9', '35', '5', '10147', '630', '0'), +('9', '35', '5', '14703', '550', '0'), +('9', '35', '8', '11621', '8325', '0'), +('9', '35', '8', '11551', '1505', '0'), +('9', '35', '8', '3403', '1171', '0'), +('9', '35', '8', '1409', '812', '0'), +('9', '35', '6', '1557', '5310', '0'), +('9', '35', '6', '3309', '517', '0'), +('9', '35', '6', '3165', '512', '0'), +('9', '35', '6', '4165', '362', '0'), +('9', '35', '17', '11623', '1935', '0'), +('9', '35', '17', '4832', '1503', '0'), +('9', '35', '17', '4902', '1107', '0'), +('9', '35', '17', '3164', '867', '0'), +('9', '35', '7', '4833', '725', '0'), +('9', '35', '7', '4411', '633', '0'), +('9', '35', '7', '10104', '284', '0'), +('9', '35', '7', '4343', '281', '0'), +('9', '35', '9', '27703', '1840', '0'), +('9', '35', '9', '4834', '920', '0'), +('9', '35', '9', '4904', '574', '0'), +('9', '35', '9', '13280', '493', '0'), +('9', '35', '15', '14707', '1050', '0'), +('9', '35', '15', '10366', '805', '0'), +('9', '35', '15', '30360', '600', '0'), +('9', '35', '15', '14679', '580', '0'), +('9', '35', '20', '11676', '8690', '0'), +('9', '35', '20', '11601', '7092', '0'), +('9', '35', '20', '2922', '4899', '0'), +('9', '35', '20', '1365', '4200', '0'), +('9', '35', '12', '11624', '1083', '0'), +('9', '35', '12', '20655', '770', '0'), +('9', '35', '12', '4905', '729', '0'), +('9', '35', '12', '4835', '725', '0'), +('9', '35', '18', '4412', '633', '0'), +('9', '35', '18', '4836', '494', '0'), +('9', '35', '18', '4906', '388', '0'), +('9', '35', '18', '3171', '291', '0'), +('9', '35', '19', '1534', '1276', '0'), +('9', '35', '19', '4837', '1024', '0'), +('9', '35', '19', '68239', '481', '0'), +('9', '35', '19', '4907', '392', '0'), +('9', '35', '13', '27704', '43158', '0'), +('9', '35', '13', '7257', '36017', '0'), +('9', '35', '13', '11610', '33736', '0'), +('9', '35', '13', '11661', '32286', '0'), +('9', '35', '14', '6952', '25785', '0'), +('9', '35', '14', '7257', '23041', '0'), +('9', '35', '14', '11557', '22800', '0'), +('9', '35', '14', '11661', '22080', '0'), +('9', '35', '11', '8325', '14120', '0'), +('9', '35', '11', '8408', '14050', '0'), +('9', '35', '11', '45137', '13291', '0'), +('9', '35', '11', '8811', '11040', '0'), +('9', '36', '22', '8567', '0', '0'), +('9', '36', '22', '10323', '0', '0'), +('9', '36', '22', '66166', '0', '0'), +('9', '36', '22', '10664', '0', '0'), +('9', '36', '1', '30361', '1140', '0'), +('9', '36', '1', '14701', '362', '0'), +('9', '36', '1', '10165', '313', '0'), +('9', '36', '1', '14658', '258', '0'), +('9', '36', '2', '10142', '1272', '0'), +('9', '36', '2', '4341', '1262', '0'), +('9', '36', '2', '30363', '1200', '0'), +('9', '36', '2', '3040', '1082', '0'), +('9', '36', '3', '14706', '990', '0'), +('9', '36', '3', '14705', '990', '0'), +('9', '36', '3', '27702', '807', '0'), +('9', '36', '3', '14695', '423', '0'), +('9', '36', '5', '30362', '1140', '0'), +('9', '36', '5', '14552', '884', '0'), +('9', '36', '5', '10147', '630', '0'), +('9', '36', '5', '14703', '550', '0'), +('9', '36', '8', '11621', '8325', '0'), +('9', '36', '8', '11551', '1505', '0'), +('9', '36', '8', '3403', '1171', '0'), +('9', '36', '8', '1409', '812', '0'), +('9', '36', '6', '1557', '5310', '0'), +('9', '36', '6', '3309', '517', '0'), +('9', '36', '6', '3165', '512', '0'), +('9', '36', '6', '4165', '362', '0'), +('9', '36', '17', '11623', '1935', '0'), +('9', '36', '17', '4832', '1510', '0'), +('9', '36', '17', '4902', '1107', '0'), +('9', '36', '17', '3164', '867', '0'), +('9', '36', '7', '4833', '725', '0'), +('9', '36', '7', '4411', '633', '0'), +('9', '36', '7', '4343', '286', '0'), +('9', '36', '7', '10104', '284', '0'), +('9', '36', '9', '27703', '1840', '0'), +('9', '36', '9', '4834', '920', '0'), +('9', '36', '9', '4904', '574', '0'), +('9', '36', '9', '13280', '493', '0'), +('9', '36', '15', '14707', '1050', '0'), +('9', '36', '15', '10366', '805', '0'), +('9', '36', '15', '30360', '600', '0'), +('9', '36', '15', '14679', '580', '0'), +('9', '36', '20', '11676', '8690', '0'), +('9', '36', '20', '11601', '7096', '0'), +('9', '36', '20', '2922', '4899', '0'), +('9', '36', '20', '1365', '4200', '0'), +('9', '36', '12', '11624', '1086', '0'), +('9', '36', '12', '20655', '771', '0'), +('9', '36', '12', '4905', '729', '0'), +('9', '36', '12', '4835', '727', '0'), +('9', '36', '18', '4412', '633', '0'), +('9', '36', '18', '4836', '496', '0'), +('9', '36', '18', '4906', '388', '0'), +('9', '36', '18', '3171', '293', '0'), +('9', '36', '19', '1534', '1276', '0'), +('9', '36', '19', '4837', '1024', '0'), +('9', '36', '19', '68239', '481', '0'), +('9', '36', '19', '4907', '392', '0'), +('9', '36', '13', '27704', '43835', '0'), +('9', '36', '13', '7257', '36750', '0'), +('9', '36', '13', '11610', '34469', '0'), +('9', '36', '13', '11661', '32851', '0'), +('9', '36', '14', '6952', '25785', '0'), +('9', '36', '14', '7257', '23041', '0'), +('9', '36', '14', '11557', '22800', '0'), +('9', '36', '14', '11661', '22080', '0'), +('9', '36', '11', '8325', '14120', '0'), +('9', '36', '11', '8408', '14050', '0'), +('9', '36', '11', '45137', '13591', '0'), +('9', '36', '11', '8811', '11040', '0'), +('9', '37', '22', '8567', '0', '0'), +('9', '37', '22', '10323', '0', '0'), +('9', '37', '22', '66166', '0', '0'), +('9', '37', '22', '10664', '0', '0'), +('9', '37', '1', '30361', '1140', '0'), +('9', '37', '1', '14701', '362', '0'), +('9', '37', '1', '10165', '313', '0'), +('9', '37', '1', '14658', '258', '0'), +('9', '37', '2', '10142', '1272', '0'), +('9', '37', '2', '4341', '1262', '0'), +('9', '37', '2', '30363', '1200', '0'), +('9', '37', '2', '3040', '1082', '0'), +('9', '37', '3', '14706', '990', '0'), +('9', '37', '3', '14705', '990', '0'), +('9', '37', '3', '27702', '807', '0'), +('9', '37', '3', '14695', '423', '0'), +('9', '37', '5', '30362', '1140', '0'), +('9', '37', '5', '14552', '884', '0'), +('9', '37', '5', '10147', '630', '0'), +('9', '37', '5', '14703', '550', '0'), +('9', '37', '8', '11621', '8325', '0'), +('9', '37', '8', '11551', '1505', '0'), +('9', '37', '8', '3403', '1171', '0'), +('9', '37', '8', '1409', '812', '0'), +('9', '37', '6', '1557', '5310', '0'), +('9', '37', '6', '3309', '517', '0'), +('9', '37', '6', '3165', '512', '0'), +('9', '37', '6', '4165', '362', '0'), +('9', '37', '17', '11623', '1935', '0'), +('9', '37', '17', '4832', '1516', '0'), +('9', '37', '17', '4902', '1107', '0'), +('9', '37', '17', '3164', '867', '0'), +('9', '37', '7', '4833', '725', '0'), +('9', '37', '7', '4411', '633', '0'), +('9', '37', '7', '4343', '290', '0'), +('9', '37', '7', '10104', '284', '0'), +('9', '37', '9', '27703', '1840', '0'), +('9', '37', '9', '4834', '920', '0'), +('9', '37', '9', '4904', '574', '0'), +('9', '37', '9', '13280', '493', '0'), +('9', '37', '15', '14707', '1050', '0'), +('9', '37', '15', '10366', '805', '0'), +('9', '37', '15', '30360', '600', '0'), +('9', '37', '15', '14679', '580', '0'), +('9', '37', '20', '11676', '8690', '0'), +('9', '37', '20', '11601', '7100', '0'), +('9', '37', '20', '2922', '4899', '0'), +('9', '37', '20', '1365', '4200', '0'), +('9', '37', '12', '11624', '1089', '0'), +('9', '37', '12', '20655', '772', '0'), +('9', '37', '12', '4835', '730', '0'), +('9', '37', '12', '4905', '729', '0'), +('9', '37', '18', '4412', '633', '0'), +('9', '37', '18', '4836', '498', '0'), +('9', '37', '18', '4906', '388', '0'), +('9', '37', '18', '3171', '295', '0'), +('9', '37', '19', '1534', '1276', '0'), +('9', '37', '19', '4837', '1024', '0'), +('9', '37', '19', '68239', '481', '0'), +('9', '37', '19', '4907', '392', '0'), +('9', '37', '13', '27704', '44520', '0'), +('9', '37', '13', '7257', '37492', '0'), +('9', '37', '13', '11610', '35211', '0'), +('9', '37', '13', '11661', '33424', '0'), +('9', '37', '14', '6952', '25785', '0'), +('9', '37', '14', '5500', '23715', '0'), +('9', '37', '14', '7257', '23041', '0'), +('9', '37', '14', '11557', '22800', '0'), +('9', '37', '11', '8325', '14120', '0'), +('9', '37', '11', '8408', '14050', '0'), +('9', '37', '11', '45137', '13992', '0'), +('9', '37', '11', '8811', '11040', '0'), +('9', '38', '22', '8567', '0', '0'), +('9', '38', '22', '10323', '0', '0'), +('9', '38', '22', '66166', '0', '0'), +('9', '38', '22', '10664', '0', '0'), +('9', '38', '1', '30361', '1140', '0'), +('9', '38', '1', '14701', '362', '0'), +('9', '38', '1', '10165', '313', '0'), +('9', '38', '1', '14658', '258', '0'), +('9', '38', '2', '10142', '1272', '0'), +('9', '38', '2', '4341', '1262', '0'), +('9', '38', '2', '30363', '1200', '0'), +('9', '38', '2', '3040', '1082', '0'), +('9', '38', '3', '14706', '990', '0'), +('9', '38', '3', '14705', '990', '0'), +('9', '38', '3', '27702', '807', '0'), +('9', '38', '3', '14695', '423', '0'), +('9', '38', '5', '30362', '1140', '0'), +('9', '38', '5', '14552', '884', '0'), +('9', '38', '5', '10147', '630', '0'), +('9', '38', '5', '14703', '550', '0'), +('9', '38', '8', '11621', '8325', '0'), +('9', '38', '8', '11551', '1505', '0'), +('9', '38', '8', '3403', '1171', '0'), +('9', '38', '8', '1409', '812', '0'), +('9', '38', '6', '1557', '5310', '0'), +('9', '38', '6', '3309', '517', '0'), +('9', '38', '6', '3165', '512', '0'), +('9', '38', '6', '4165', '362', '0'), +('9', '38', '17', '11623', '1935', '0'), +('9', '38', '17', '4832', '1522', '0'), +('9', '38', '17', '4902', '1107', '0'), +('9', '38', '17', '3164', '867', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '38', '7', '4833', '725', '0'), +('9', '38', '7', '4411', '633', '0'), +('9', '38', '7', '4343', '294', '0'), +('9', '38', '7', '10104', '284', '0'), +('9', '38', '9', '27703', '1840', '0'), +('9', '38', '9', '4834', '920', '0'), +('9', '38', '9', '4904', '574', '0'), +('9', '38', '9', '13280', '493', '0'), +('9', '38', '15', '14707', '1050', '0'), +('9', '38', '15', '10366', '805', '0'), +('9', '38', '15', '30360', '600', '0'), +('9', '38', '15', '14679', '580', '0'), +('9', '38', '20', '11676', '8690', '0'), +('9', '38', '20', '11601', '7104', '0'), +('9', '38', '20', '2922', '4899', '0'), +('9', '38', '20', '1365', '4200', '0'), +('9', '38', '12', '11624', '1092', '0'), +('9', '38', '12', '20655', '773', '0'), +('9', '38', '12', '4835', '732', '0'), +('9', '38', '12', '4905', '729', '0'), +('9', '38', '18', '4412', '633', '0'), +('9', '38', '18', '4836', '500', '0'), +('9', '38', '18', '4906', '388', '0'), +('9', '38', '18', '3171', '297', '0'), +('9', '38', '19', '1534', '1276', '0'), +('9', '38', '19', '4837', '1024', '0'), +('9', '38', '19', '68239', '481', '0'), +('9', '38', '19', '4907', '392', '0'), +('9', '38', '13', '27704', '45215', '0'), +('9', '38', '13', '7257', '38243', '0'), +('9', '38', '13', '11610', '35962', '0'), +('9', '38', '13', '11661', '34003', '0'), +('9', '38', '14', '6952', '25785', '0'), +('9', '38', '14', '5500', '23715', '0'), +('9', '38', '14', '7257', '23041', '0'), +('9', '38', '14', '11557', '22800', '0'), +('9', '38', '11', '45137', '14292', '0'), +('9', '38', '11', '8325', '14120', '0'), +('9', '38', '11', '8408', '14050', '0'), +('9', '38', '11', '8811', '11040', '0'), +('9', '39', '22', '8567', '0', '0'), +('9', '39', '22', '10323', '0', '0'), +('9', '39', '22', '66166', '0', '0'), +('9', '39', '22', '10664', '0', '0'), +('9', '39', '1', '30361', '1140', '0'), +('9', '39', '1', '14701', '362', '0'), +('9', '39', '1', '10165', '313', '0'), +('9', '39', '1', '14658', '258', '0'), +('9', '39', '2', '10142', '1272', '0'), +('9', '39', '2', '4341', '1262', '0'), +('9', '39', '2', '30363', '1200', '0'), +('9', '39', '2', '3040', '1082', '0'), +('9', '39', '3', '14706', '990', '0'), +('9', '39', '3', '14705', '990', '0'), +('9', '39', '3', '27702', '807', '0'), +('9', '39', '3', '14695', '423', '0'), +('9', '39', '5', '30362', '1140', '0'), +('9', '39', '5', '14552', '884', '0'), +('9', '39', '5', '10147', '630', '0'), +('9', '39', '5', '14703', '550', '0'), +('9', '39', '8', '11621', '8325', '0'), +('9', '39', '8', '11551', '1505', '0'), +('9', '39', '8', '3403', '1171', '0'), +('9', '39', '8', '1409', '812', '0'), +('9', '39', '6', '1557', '5310', '0'), +('9', '39', '6', '3309', '517', '0'), +('9', '39', '6', '3165', '512', '0'), +('9', '39', '6', '4165', '362', '0'), +('9', '39', '17', '11623', '1935', '0'), +('9', '39', '17', '4832', '1529', '0'), +('9', '39', '17', '4902', '1107', '0'), +('9', '39', '17', '3164', '867', '0'), +('9', '39', '7', '4833', '725', '0'), +('9', '39', '7', '4411', '633', '0'), +('9', '39', '7', '4343', '298', '0'), +('9', '39', '7', '10104', '284', '0'), +('9', '39', '9', '27703', '1840', '0'), +('9', '39', '9', '4834', '920', '0'), +('9', '39', '9', '4904', '574', '0'), +('9', '39', '9', '13280', '493', '0'), +('9', '39', '15', '14707', '1050', '0'), +('9', '39', '15', '10366', '805', '0'), +('9', '39', '15', '30360', '600', '0'), +('9', '39', '15', '14679', '580', '0'), +('9', '39', '20', '11676', '8690', '0'), +('9', '39', '20', '11601', '7108', '0'), +('9', '39', '20', '2922', '4899', '0'), +('9', '39', '20', '1365', '4200', '0'), +('9', '39', '12', '11624', '1095', '0'), +('9', '39', '12', '20655', '773', '0'), +('9', '39', '12', '4835', '734', '0'), +('9', '39', '12', '4905', '729', '0'), +('9', '39', '18', '4412', '633', '0'), +('9', '39', '18', '4836', '503', '0'), +('9', '39', '18', '4906', '388', '0'), +('9', '39', '18', '3171', '299', '0'), +('9', '39', '19', '1534', '1276', '0'), +('9', '39', '19', '4837', '1024', '0'), +('9', '39', '19', '68239', '481', '0'), +('9', '39', '19', '4907', '392', '0'), +('9', '39', '13', '27704', '45917', '0'), +('9', '39', '13', '7257', '39004', '0'), +('9', '39', '13', '11610', '36723', '0'), +('9', '39', '13', '11661', '34590', '0'), +('9', '39', '14', '6952', '25785', '0'), +('9', '39', '14', '5500', '23715', '0'), +('9', '39', '14', '7257', '23041', '0'), +('9', '39', '14', '11557', '22800', '0'), +('9', '39', '11', '45137', '14813', '0'), +('9', '39', '11', '8325', '14120', '0'), +('9', '39', '11', '8408', '14050', '0'), +('9', '39', '11', '8811', '11040', '0'), +('9', '40', '22', '8567', '0', '0'), +('9', '40', '22', '10323', '0', '0'), +('9', '40', '22', '66166', '0', '0'), +('9', '40', '22', '10664', '0', '0'), +('9', '40', '1', '30361', '1140', '0'), +('9', '40', '1', '14701', '362', '0'), +('9', '40', '1', '10165', '313', '0'), +('9', '40', '1', '14658', '258', '0'), +('9', '40', '2', '10142', '1272', '0'), +('9', '40', '2', '4341', '1262', '0'), +('9', '40', '2', '30363', '1200', '0'), +('9', '40', '2', '3040', '1082', '0'), +('9', '40', '3', '14706', '990', '0'), +('9', '40', '3', '14705', '990', '0'), +('9', '40', '3', '27702', '807', '0'), +('9', '40', '3', '14695', '423', '0'), +('9', '40', '5', '30362', '1140', '0'), +('9', '40', '5', '14552', '884', '0'), +('9', '40', '5', '10147', '630', '0'), +('9', '40', '5', '14703', '550', '0'), +('9', '40', '8', '11621', '8325', '0'), +('9', '40', '8', '11551', '1505', '0'), +('9', '40', '8', '3403', '1171', '0'), +('9', '40', '8', '1409', '812', '0'), +('9', '40', '6', '1557', '5310', '0'), +('9', '40', '6', '3309', '517', '0'), +('9', '40', '6', '3165', '512', '0'), +('9', '40', '6', '4165', '362', '0'), +('9', '40', '17', '11623', '1935', '0'), +('9', '40', '17', '4832', '1535', '0'), +('9', '40', '17', '4902', '1107', '0'), +('9', '40', '17', '3164', '867', '0'), +('9', '40', '7', '4833', '725', '0'), +('9', '40', '7', '4411', '633', '0'), +('9', '40', '7', '4343', '303', '0'), +('9', '40', '7', '10104', '284', '0'), +('9', '40', '9', '27703', '1840', '0'), +('9', '40', '9', '4834', '920', '0'), +('9', '40', '9', '4904', '574', '0'), +('9', '40', '9', '13280', '493', '0'), +('9', '40', '15', '14707', '1050', '0'), +('9', '40', '15', '10366', '805', '0'), +('9', '40', '15', '30360', '600', '0'), +('9', '40', '15', '14679', '580', '0'), +('9', '40', '20', '11676', '8690', '0'), +('9', '40', '20', '11601', '7113', '0'), +('9', '40', '20', '2922', '4899', '0'), +('9', '40', '20', '1365', '4200', '0'), +('9', '40', '12', '11624', '1098', '0'), +('9', '40', '12', '20655', '774', '0'), +('9', '40', '12', '4835', '736', '0'), +('9', '40', '12', '4905', '729', '0'), +('9', '40', '18', '4412', '633', '0'), +('9', '40', '18', '4836', '505', '0'), +('9', '40', '18', '4906', '388', '0'), +('9', '40', '18', '3171', '301', '0'), +('9', '40', '19', '1534', '1276', '0'), +('9', '40', '19', '4837', '1024', '0'), +('9', '40', '19', '68239', '481', '0'), +('9', '40', '19', '4907', '392', '0'), +('9', '40', '13', '27704', '46629', '0'), +('9', '40', '13', '7257', '39774', '0'), +('9', '40', '13', '11610', '37493', '0'), +('9', '40', '13', '11661', '35184', '0'), +('9', '40', '14', '6952', '25785', '0'), +('9', '40', '14', '5500', '23715', '0'), +('9', '40', '14', '7257', '23041', '0'), +('9', '40', '14', '11557', '22800', '0'), +('9', '40', '11', '45137', '15134', '0'), +('9', '40', '11', '8325', '14120', '0'), +('9', '40', '11', '8408', '14050', '0'), +('9', '40', '11', '8811', '11040', '0'), +('9', '41', '22', '8567', '0', '0'), +('9', '41', '22', '10323', '0', '0'), +('9', '41', '22', '66166', '0', '0'), +('9', '41', '22', '10664', '0', '0'), +('9', '41', '1', '30361', '1140', '0'), +('9', '41', '1', '14701', '362', '0'), +('9', '41', '1', '10165', '313', '0'), +('9', '41', '1', '14658', '258', '0'), +('9', '41', '2', '10142', '1272', '0'), +('9', '41', '2', '4341', '1262', '0'), +('9', '41', '2', '30363', '1200', '0'), +('9', '41', '2', '3040', '1082', '0'), +('9', '41', '3', '14706', '990', '0'), +('9', '41', '3', '14705', '990', '0'), +('9', '41', '3', '27702', '807', '0'), +('9', '41', '3', '14695', '423', '0'), +('9', '41', '5', '30362', '1140', '0'), +('9', '41', '5', '14552', '884', '0'), +('9', '41', '5', '10147', '630', '0'), +('9', '41', '5', '14703', '550', '0'), +('9', '41', '8', '11621', '8325', '0'), +('9', '41', '8', '11551', '1505', '0'), +('9', '41', '8', '3403', '1171', '0'), +('9', '41', '8', '1409', '812', '0'), +('9', '41', '6', '1557', '5310', '0'), +('9', '41', '6', '3309', '517', '0'), +('9', '41', '6', '3165', '512', '0'), +('9', '41', '6', '4165', '362', '0'), +('9', '41', '17', '11623', '1935', '0'), +('9', '41', '17', '4832', '1541', '0'), +('9', '41', '17', '4902', '1107', '0'), +('9', '41', '17', '3164', '867', '0'), +('9', '41', '7', '4833', '725', '0'), +('9', '41', '7', '4411', '633', '0'), +('9', '41', '7', '4343', '307', '0'), +('9', '41', '7', '10104', '284', '0'), +('9', '41', '9', '27703', '1840', '0'), +('9', '41', '9', '4834', '920', '0'), +('9', '41', '9', '4904', '574', '0'), +('9', '41', '9', '13280', '493', '0'), +('9', '41', '15', '14707', '1050', '0'), +('9', '41', '15', '10366', '805', '0'), +('9', '41', '15', '30360', '600', '0'), +('9', '41', '15', '14679', '580', '0'), +('9', '41', '20', '11676', '8690', '0'), +('9', '41', '20', '11601', '7117', '0'), +('9', '41', '20', '2922', '4899', '0'), +('9', '41', '20', '1365', '4200', '0'), +('9', '41', '12', '11624', '1101', '0'), +('9', '41', '12', '20655', '775', '0'), +('9', '41', '12', '4835', '738', '0'), +('9', '41', '12', '4905', '729', '0'), +('9', '41', '18', '4412', '633', '0'), +('9', '41', '18', '4836', '507', '0'), +('9', '41', '18', '4906', '388', '0'), +('9', '41', '18', '3171', '303', '0'), +('9', '41', '19', '1534', '1276', '0'), +('9', '41', '19', '4837', '1024', '0'), +('9', '41', '19', '68239', '481', '0'), +('9', '41', '19', '4907', '392', '0'), +('9', '41', '13', '27704', '47349', '0'), +('9', '41', '13', '7257', '40553', '0'), +('9', '41', '13', '11610', '38272', '0'), +('9', '41', '13', '11661', '35785', '0'), +('9', '41', '14', '6952', '25785', '0'), +('9', '41', '14', '5500', '23715', '0'), +('9', '41', '14', '7257', '23041', '0'), +('9', '41', '14', '11557', '22800', '0'), +('9', '41', '11', '45137', '15575', '0'), +('9', '41', '11', '8325', '14120', '0'), +('9', '41', '11', '8408', '14050', '0'), +('9', '41', '11', '8811', '11040', '0'), +('9', '42', '22', '8567', '0', '0'), +('9', '42', '22', '10323', '0', '0'), +('9', '42', '22', '66166', '0', '0'), +('9', '42', '22', '10664', '0', '0'), +('9', '42', '1', '30361', '1140', '0'), +('9', '42', '1', '14701', '362', '0'), +('9', '42', '1', '10165', '313', '0'), +('9', '42', '1', '14658', '258', '0'), +('9', '42', '2', '10142', '1272', '0'), +('9', '42', '2', '4341', '1262', '0'), +('9', '42', '2', '30363', '1200', '0'), +('9', '42', '2', '3040', '1082', '0'), +('9', '42', '3', '14706', '990', '0'), +('9', '42', '3', '14705', '990', '0'), +('9', '42', '3', '27702', '807', '0'), +('9', '42', '3', '14695', '423', '0'), +('9', '42', '5', '30362', '1140', '0'), +('9', '42', '5', '14552', '884', '0'), +('9', '42', '5', '10147', '630', '0'), +('9', '42', '5', '14703', '550', '0'), +('9', '42', '8', '11621', '8325', '0'), +('9', '42', '8', '11551', '1505', '0'), +('9', '42', '8', '3403', '1171', '0'), +('9', '42', '8', '1409', '812', '0'), +('9', '42', '6', '1557', '5310', '0'), +('9', '42', '6', '3309', '517', '0'), +('9', '42', '6', '3165', '512', '0'), +('9', '42', '6', '4165', '362', '0'), +('9', '42', '17', '11623', '1935', '0'), +('9', '42', '17', '4832', '1549', '0'), +('9', '42', '17', '4902', '1107', '0'), +('9', '42', '17', '3164', '867', '0'), +('9', '42', '7', '4833', '725', '0'), +('9', '42', '7', '4411', '633', '0'), +('9', '42', '7', '4343', '312', '0'), +('9', '42', '7', '10104', '284', '0'), +('9', '42', '9', '27703', '1840', '0'), +('9', '42', '9', '4834', '920', '0'), +('9', '42', '9', '4904', '574', '0'), +('9', '42', '9', '13280', '493', '0'), +('9', '42', '15', '14707', '1050', '0'), +('9', '42', '15', '10366', '805', '0'), +('9', '42', '15', '30360', '600', '0'), +('9', '42', '15', '14679', '580', '0'), +('9', '42', '20', '11676', '8690', '0'), +('9', '42', '20', '11601', '7122', '0'), +('9', '42', '20', '2922', '4899', '0'), +('9', '42', '20', '1365', '4200', '0'), +('9', '42', '12', '11624', '1104', '0'), +('9', '42', '12', '20655', '776', '0'), +('9', '42', '12', '4835', '740', '0'), +('9', '42', '12', '4905', '729', '0'), +('9', '42', '18', '4412', '633', '0'), +('9', '42', '18', '4836', '509', '0'), +('9', '42', '18', '4906', '388', '0'), +('9', '42', '18', '3171', '306', '0'), +('9', '42', '19', '1534', '1276', '0'), +('9', '42', '19', '4837', '1024', '0'), +('9', '42', '19', '68239', '481', '0'), +('9', '42', '19', '4907', '392', '0'), +('9', '42', '13', '27704', '48077', '0'), +('9', '42', '13', '7257', '41342', '0'), +('9', '42', '13', '11610', '39061', '0'), +('9', '42', '13', '11661', '36394', '0'), +('9', '42', '14', '6952', '25785', '0'), +('9', '42', '14', '5500', '23715', '0'), +('9', '42', '14', '7257', '23041', '0'), +('9', '42', '14', '11557', '22800', '0'), +('9', '42', '11', '45137', '15957', '0'), +('9', '42', '11', '8325', '14120', '0'), +('9', '42', '11', '8408', '14050', '0'), +('9', '42', '11', '8811', '11040', '0'), +('9', '43', '22', '8567', '0', '0'), +('9', '43', '22', '10323', '0', '0'), +('9', '43', '22', '66166', '0', '0'), +('9', '43', '22', '10664', '0', '0'), +('9', '43', '1', '30361', '1140', '0'), +('9', '43', '1', '14701', '362', '0'), +('9', '43', '1', '10165', '313', '0'), +('9', '43', '1', '14658', '258', '0'), +('9', '43', '2', '10142', '1272', '0'), +('9', '43', '2', '4341', '1262', '0'), +('9', '43', '2', '30363', '1200', '0'), +('9', '43', '2', '3040', '1082', '0'), +('9', '43', '3', '14706', '990', '0'), +('9', '43', '3', '14705', '990', '0'), +('9', '43', '3', '27702', '807', '0'), +('9', '43', '3', '14695', '423', '0'), +('9', '43', '5', '30362', '1140', '0'), +('9', '43', '5', '14552', '884', '0'), +('9', '43', '5', '10147', '630', '0'), +('9', '43', '5', '14703', '550', '0'), +('9', '43', '8', '11621', '8325', '0'), +('9', '43', '8', '11551', '1505', '0'), +('9', '43', '8', '3403', '1171', '0'), +('9', '43', '8', '1409', '812', '0'), +('9', '43', '6', '1557', '5310', '0'), +('9', '43', '6', '3309', '517', '0'), +('9', '43', '6', '3165', '512', '0'), +('9', '43', '6', '4165', '362', '0'), +('9', '43', '17', '11623', '1935', '0'), +('9', '43', '17', '4832', '1555', '0'), +('9', '43', '17', '4902', '1107', '0'), +('9', '43', '17', '3164', '867', '0'), +('9', '43', '7', '4833', '725', '0'), +('9', '43', '7', '4411', '633', '0'), +('9', '43', '7', '4343', '316', '0'), +('9', '43', '7', '10104', '284', '0'), +('9', '43', '9', '27703', '1840', '0'), +('9', '43', '9', '4834', '920', '0'), +('9', '43', '9', '4904', '574', '0'), +('9', '43', '9', '13280', '493', '0'), +('9', '43', '15', '14707', '1050', '0'), +('9', '43', '15', '10366', '805', '0'), +('9', '43', '15', '30360', '600', '0'), +('9', '43', '15', '14679', '580', '0'), +('9', '43', '20', '11676', '8690', '0'), +('9', '43', '20', '11601', '7126', '0'), +('9', '43', '20', '2922', '4899', '0'), +('9', '43', '20', '1365', '4200', '0'), +('9', '43', '12', '11624', '1107', '0'), +('9', '43', '12', '20655', '777', '0'), +('9', '43', '12', '4835', '743', '0'), +('9', '43', '12', '4905', '729', '0'), +('9', '43', '18', '4412', '633', '0'), +('9', '43', '18', '4836', '511', '0'), +('9', '43', '18', '4906', '388', '0'), +('9', '43', '18', '3171', '308', '0'), +('9', '43', '19', '1534', '1276', '0'), +('9', '43', '19', '4837', '1024', '0'), +('9', '43', '19', '68239', '481', '0'), +('9', '43', '19', '4907', '392', '0'), +('9', '43', '13', '27704', '48815', '0'), +('9', '43', '13', '7257', '42140', '0'), +('9', '43', '13', '11610', '39859', '0'), +('9', '43', '13', '11661', '37009', '0'), +('9', '43', '14', '6952', '25785', '0'), +('9', '43', '14', '5500', '23715', '0'), +('9', '43', '14', '7257', '23041', '0'), +('9', '43', '14', '11557', '22800', '0'), +('9', '43', '11', '45137', '16278', '0'), +('9', '43', '11', '8325', '14120', '0'), +('9', '43', '11', '8408', '14050', '0'), +('9', '43', '11', '8811', '11040', '0'), +('9', '44', '22', '8567', '0', '0'), +('9', '44', '22', '10323', '0', '0'), +('9', '44', '22', '66166', '0', '0'), +('9', '44', '22', '10664', '0', '0'), +('9', '44', '1', '30361', '1140', '0'), +('9', '44', '1', '14701', '362', '0'), +('9', '44', '1', '10165', '313', '0'), +('9', '44', '1', '14658', '258', '0'), +('9', '44', '2', '10142', '1272', '0'), +('9', '44', '2', '4341', '1262', '0'), +('9', '44', '2', '30363', '1200', '0'), +('9', '44', '2', '3040', '1082', '0'), +('9', '44', '3', '14706', '990', '0'), +('9', '44', '3', '14705', '990', '0'), +('9', '44', '3', '27702', '807', '0'), +('9', '44', '3', '14695', '423', '0'), +('9', '44', '5', '30362', '1140', '0'), +('9', '44', '5', '14552', '884', '0'), +('9', '44', '5', '10147', '630', '0'), +('9', '44', '5', '14703', '550', '0'), +('9', '44', '8', '11621', '8325', '0'), +('9', '44', '8', '11551', '1505', '0'), +('9', '44', '8', '3403', '1171', '0'), +('9', '44', '8', '1409', '812', '0'), +('9', '44', '6', '1557', '5310', '0'), +('9', '44', '6', '3309', '517', '0'), +('9', '44', '6', '3165', '512', '0'), +('9', '44', '6', '4165', '362', '0'), +('9', '44', '17', '11623', '1935', '0'), +('9', '44', '17', '4832', '1561', '0'), +('9', '44', '17', '4902', '1107', '0'), +('9', '44', '17', '3164', '867', '0'), +('9', '44', '7', '4833', '725', '0'), +('9', '44', '7', '4411', '633', '0'), +('9', '44', '7', '4343', '320', '0'), +('9', '44', '7', '10104', '284', '0'), +('9', '44', '9', '27703', '1840', '0'), +('9', '44', '9', '4834', '920', '0'), +('9', '44', '9', '4904', '574', '0'), +('9', '44', '9', '13280', '493', '0'), +('9', '44', '15', '14707', '1050', '0'), +('9', '44', '15', '10366', '805', '0'), +('9', '44', '15', '30360', '600', '0'), +('9', '44', '15', '14679', '580', '0'), +('9', '44', '20', '11676', '8690', '0'), +('9', '44', '20', '11601', '7130', '0'), +('9', '44', '20', '2922', '4899', '0'), +('9', '44', '20', '1365', '4200', '0'), +('9', '44', '12', '11624', '1110', '0'), +('9', '44', '12', '20655', '778', '0'), +('9', '44', '12', '4835', '745', '0'), +('9', '44', '12', '4905', '729', '0'), +('9', '44', '18', '4412', '633', '0'), +('9', '44', '18', '4836', '513', '0'), +('9', '44', '18', '4906', '388', '0'), +('9', '44', '18', '3171', '310', '0'), +('9', '44', '19', '1534', '1276', '0'), +('9', '44', '19', '4837', '1024', '0'), +('9', '44', '19', '68239', '481', '0'), +('9', '44', '19', '4907', '392', '0'), +('9', '44', '13', '27704', '49560', '0'), +('9', '44', '13', '7257', '42948', '0'), +('9', '44', '13', '11610', '40667', '0'), +('9', '44', '13', '11661', '37632', '0'), +('9', '44', '14', '6952', '25785', '0'), +('9', '44', '14', '5500', '23715', '0'), +('9', '44', '14', '7257', '23041', '0'), +('9', '44', '14', '11557', '22800', '0'), +('9', '44', '11', '45137', '16799', '0'), +('9', '44', '11', '8325', '14120', '0'), +('9', '44', '11', '8408', '14050', '0'), +('9', '44', '11', '8811', '11040', '0'), +('9', '45', '22', '8567', '0', '0'), +('9', '45', '22', '10323', '0', '0'), +('9', '45', '22', '66166', '0', '0'), +('9', '45', '22', '10664', '0', '0'), +('9', '45', '1', '30361', '1140', '0'), +('9', '45', '1', '14701', '362', '0'), +('9', '45', '1', '10165', '313', '0'), +('9', '45', '1', '14658', '258', '0'), +('9', '45', '2', '10142', '1272', '0'), +('9', '45', '2', '4341', '1262', '0'), +('9', '45', '2', '30363', '1200', '0'), +('9', '45', '2', '3040', '1082', '0'), +('9', '45', '3', '14706', '990', '0'), +('9', '45', '3', '14705', '990', '0'), +('9', '45', '3', '27702', '807', '0'), +('9', '45', '3', '14695', '423', '0'), +('9', '45', '5', '30362', '1140', '0'), +('9', '45', '5', '14552', '884', '0'), +('9', '45', '5', '10147', '630', '0'), +('9', '45', '5', '14703', '550', '0'), +('9', '45', '8', '11621', '8325', '0'), +('9', '45', '8', '11551', '1505', '0'), +('9', '45', '8', '3403', '1171', '0'), +('9', '45', '8', '1409', '812', '0'), +('9', '45', '6', '1557', '5310', '0'), +('9', '45', '6', '3309', '517', '0'), +('9', '45', '6', '3165', '512', '0'), +('9', '45', '6', '4165', '362', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '45', '17', '11623', '1935', '0'), +('9', '45', '17', '4832', '1568', '0'), +('9', '45', '17', '4902', '1107', '0'), +('9', '45', '17', '3164', '867', '0'), +('9', '45', '7', '4833', '725', '0'), +('9', '45', '7', '4411', '633', '0'), +('9', '45', '7', '4343', '324', '0'), +('9', '45', '7', '10104', '284', '0'), +('9', '45', '9', '27703', '1840', '0'), +('9', '45', '9', '4834', '920', '0'), +('9', '45', '9', '4904', '574', '0'), +('9', '45', '9', '13280', '493', '0'), +('9', '45', '15', '14707', '1050', '0'), +('9', '45', '15', '10366', '805', '0'), +('9', '45', '15', '30360', '600', '0'), +('9', '45', '15', '14679', '580', '0'), +('9', '45', '20', '11676', '8690', '0'), +('9', '45', '20', '11601', '7134', '0'), +('9', '45', '20', '2922', '4899', '0'), +('9', '45', '20', '1365', '4200', '0'), +('9', '45', '12', '11624', '1113', '0'), +('9', '45', '12', '20655', '779', '0'), +('9', '45', '12', '4835', '747', '0'), +('9', '45', '12', '4905', '729', '0'), +('9', '45', '18', '4412', '633', '0'), +('9', '45', '18', '4836', '516', '0'), +('9', '45', '18', '4906', '388', '0'), +('9', '45', '18', '3171', '312', '0'), +('9', '45', '19', '1534', '1276', '0'), +('9', '45', '19', '4837', '1024', '0'), +('9', '45', '19', '68239', '481', '0'), +('9', '45', '19', '4907', '392', '0'), +('9', '45', '13', '7510', '54375', '0'), +('9', '45', '13', '27704', '50315', '0'), +('9', '45', '13', '7257', '43765', '0'), +('9', '45', '13', '11610', '41483', '0'), +('9', '45', '14', '6952', '25785', '0'), +('9', '45', '14', '5500', '23715', '0'), +('9', '45', '14', '7257', '23041', '0'), +('9', '45', '14', '11557', '22800', '0'), +('9', '45', '11', '45137', '17101', '0'), +('9', '45', '11', '8325', '14120', '0'), +('9', '45', '11', '8408', '14050', '0'), +('9', '45', '11', '8811', '11040', '0'), +('9', '46', '22', '8567', '0', '0'), +('9', '46', '22', '10323', '0', '0'), +('9', '46', '22', '66166', '0', '0'), +('9', '46', '22', '10664', '0', '0'), +('9', '46', '1', '30361', '1140', '0'), +('9', '46', '1', '14701', '362', '0'), +('9', '46', '1', '10165', '313', '0'), +('9', '46', '1', '14658', '258', '0'), +('9', '46', '2', '10142', '1272', '0'), +('9', '46', '2', '4341', '1262', '0'), +('9', '46', '2', '30363', '1200', '0'), +('9', '46', '2', '3040', '1082', '0'), +('9', '46', '3', '14706', '990', '0'), +('9', '46', '3', '14705', '990', '0'), +('9', '46', '3', '27702', '807', '0'), +('9', '46', '3', '14695', '423', '0'), +('9', '46', '5', '30362', '1140', '0'), +('9', '46', '5', '14552', '884', '0'), +('9', '46', '5', '10147', '630', '0'), +('9', '46', '5', '14703', '550', '0'), +('9', '46', '8', '11621', '8325', '0'), +('9', '46', '8', '11551', '1505', '0'), +('9', '46', '8', '3403', '1171', '0'), +('9', '46', '8', '1409', '812', '0'), +('9', '46', '6', '1557', '5310', '0'), +('9', '46', '6', '3309', '517', '0'), +('9', '46', '6', '3165', '512', '0'), +('9', '46', '6', '4165', '362', '0'), +('9', '46', '17', '11623', '1935', '0'), +('9', '46', '17', '4832', '1574', '0'), +('9', '46', '17', '4902', '1107', '0'), +('9', '46', '17', '3164', '867', '0'), +('9', '46', '7', '4833', '725', '0'), +('9', '46', '7', '4411', '633', '0'), +('9', '46', '7', '4343', '329', '0'), +('9', '46', '7', '10104', '284', '0'), +('9', '46', '9', '27703', '1840', '0'), +('9', '46', '9', '4834', '920', '0'), +('9', '46', '9', '4904', '574', '0'), +('9', '46', '9', '13280', '493', '0'), +('9', '46', '15', '14707', '1050', '0'), +('9', '46', '15', '10366', '805', '0'), +('9', '46', '15', '30360', '600', '0'), +('9', '46', '15', '14679', '580', '0'), +('9', '46', '20', '11676', '8690', '0'), +('9', '46', '20', '11601', '7139', '0'), +('9', '46', '20', '2922', '4899', '0'), +('9', '46', '20', '1365', '4200', '0'), +('9', '46', '12', '11624', '1116', '0'), +('9', '46', '12', '20655', '780', '0'), +('9', '46', '12', '4835', '749', '0'), +('9', '46', '12', '4905', '729', '0'), +('9', '46', '18', '4412', '633', '0'), +('9', '46', '18', '4836', '518', '0'), +('9', '46', '18', '4906', '388', '0'), +('9', '46', '18', '3171', '314', '0'), +('9', '46', '19', '1534', '1276', '0'), +('9', '46', '19', '4837', '1024', '0'), +('9', '46', '19', '68239', '481', '0'), +('9', '46', '19', '4907', '392', '0'), +('9', '46', '13', '7510', '55012', '0'), +('9', '46', '13', '27704', '51078', '0'), +('9', '46', '13', '7257', '44591', '0'), +('9', '46', '13', '11610', '42310', '0'), +('9', '46', '14', '6952', '25785', '0'), +('9', '46', '14', '5500', '23715', '0'), +('9', '46', '14', '7257', '23041', '0'), +('9', '46', '14', '11557', '22800', '0'), +('9', '46', '11', '45137', '17482', '0'), +('9', '46', '11', '8325', '14120', '0'), +('9', '46', '11', '8408', '14050', '0'), +('9', '46', '11', '8811', '11040', '0'), +('9', '47', '22', '8567', '0', '0'), +('9', '47', '22', '10323', '0', '0'), +('9', '47', '22', '66166', '0', '0'), +('9', '47', '22', '10664', '0', '0'), +('9', '47', '1', '30361', '1140', '0'), +('9', '47', '1', '14701', '362', '0'), +('9', '47', '1', '10165', '313', '0'), +('9', '47', '1', '14658', '258', '0'), +('9', '47', '2', '10142', '1272', '0'), +('9', '47', '2', '4341', '1262', '0'), +('9', '47', '2', '30363', '1200', '0'), +('9', '47', '2', '3040', '1082', '0'), +('9', '47', '3', '14706', '990', '0'), +('9', '47', '3', '14705', '990', '0'), +('9', '47', '3', '27702', '807', '0'), +('9', '47', '3', '14695', '423', '0'), +('9', '47', '5', '30362', '1140', '0'), +('9', '47', '5', '14552', '884', '0'), +('9', '47', '5', '10147', '630', '0'), +('9', '47', '5', '14703', '550', '0'), +('9', '47', '8', '11621', '8325', '0'), +('9', '47', '8', '11551', '1505', '0'), +('9', '47', '8', '3403', '1171', '0'), +('9', '47', '8', '1409', '812', '0'), +('9', '47', '6', '1557', '5310', '0'), +('9', '47', '6', '3309', '517', '0'), +('9', '47', '6', '3165', '512', '0'), +('9', '47', '6', '4165', '362', '0'), +('9', '47', '17', '11623', '1935', '0'), +('9', '47', '17', '4832', '1580', '0'), +('9', '47', '17', '4902', '1107', '0'), +('9', '47', '17', '3164', '867', '0'), +('9', '47', '7', '4833', '725', '0'), +('9', '47', '7', '4411', '633', '0'), +('9', '47', '7', '4343', '333', '0'), +('9', '47', '7', '10104', '284', '0'), +('9', '47', '9', '27703', '1840', '0'), +('9', '47', '9', '4834', '920', '0'), +('9', '47', '9', '4904', '574', '0'), +('9', '47', '9', '13280', '493', '0'), +('9', '47', '15', '14707', '1050', '0'), +('9', '47', '15', '10366', '805', '0'), +('9', '47', '15', '30360', '600', '0'), +('9', '47', '15', '14679', '580', '0'), +('9', '47', '20', '11676', '8690', '0'), +('9', '47', '20', '11601', '7143', '0'), +('9', '47', '20', '2922', '4899', '0'), +('9', '47', '20', '1365', '4200', '0'), +('9', '47', '12', '11624', '1119', '0'), +('9', '47', '12', '20655', '780', '0'), +('9', '47', '12', '4835', '751', '0'), +('9', '47', '12', '4905', '729', '0'), +('9', '47', '18', '4412', '633', '0'), +('9', '47', '18', '4836', '520', '0'), +('9', '47', '18', '4906', '388', '0'), +('9', '47', '18', '3171', '316', '0'), +('9', '47', '19', '1534', '1276', '0'), +('9', '47', '19', '4837', '1024', '0'), +('9', '47', '19', '68239', '481', '0'), +('9', '47', '19', '4907', '392', '0'), +('9', '47', '13', '7510', '55657', '0'), +('9', '47', '13', '27704', '51850', '0'), +('9', '47', '13', '7257', '45426', '0'), +('9', '47', '13', '11610', '43145', '0'), +('9', '47', '14', '6952', '25785', '0'), +('9', '47', '14', '5500', '23715', '0'), +('9', '47', '14', '7257', '23041', '0'), +('9', '47', '14', '11557', '22800', '0'), +('9', '47', '11', '45137', '17804', '0'), +('9', '47', '11', '8325', '14120', '0'), +('9', '47', '11', '8408', '14050', '0'), +('9', '47', '11', '8811', '11040', '0'), +('9', '48', '22', '8567', '0', '0'), +('9', '48', '22', '10323', '0', '0'), +('9', '48', '22', '66166', '0', '0'), +('9', '48', '22', '10664', '0', '0'), +('9', '48', '1', '30361', '1140', '0'), +('9', '48', '1', '14701', '362', '0'), +('9', '48', '1', '10165', '313', '0'), +('9', '48', '1', '14658', '258', '0'), +('9', '48', '2', '10142', '1272', '0'), +('9', '48', '2', '4341', '1262', '0'), +('9', '48', '2', '30363', '1200', '0'), +('9', '48', '2', '3040', '1082', '0'), +('9', '48', '3', '14706', '990', '0'), +('9', '48', '3', '14705', '990', '0'), +('9', '48', '3', '27702', '807', '0'), +('9', '48', '3', '14695', '423', '0'), +('9', '48', '5', '30362', '1140', '0'), +('9', '48', '5', '14552', '884', '0'), +('9', '48', '5', '10147', '630', '0'), +('9', '48', '5', '14703', '550', '0'), +('9', '48', '8', '11621', '8325', '0'), +('9', '48', '8', '11551', '1505', '0'), +('9', '48', '8', '3403', '1171', '0'), +('9', '48', '8', '1409', '812', '0'), +('9', '48', '6', '1557', '5310', '0'), +('9', '48', '6', '3309', '517', '0'), +('9', '48', '6', '3165', '512', '0'), +('9', '48', '6', '4165', '362', '0'), +('9', '48', '17', '11623', '1935', '0'), +('9', '48', '17', '4832', '1588', '0'), +('9', '48', '17', '4902', '1107', '0'), +('9', '48', '17', '3164', '867', '0'), +('9', '48', '7', '4833', '725', '0'), +('9', '48', '7', '4411', '633', '0'), +('9', '48', '7', '4343', '338', '0'), +('9', '48', '7', '10104', '284', '0'), +('9', '48', '9', '27703', '1840', '0'), +('9', '48', '9', '4834', '920', '0'), +('9', '48', '9', '4904', '574', '0'), +('9', '48', '9', '13280', '493', '0'), +('9', '48', '15', '14707', '1050', '0'), +('9', '48', '15', '10366', '805', '0'), +('9', '48', '15', '30360', '600', '0'), +('9', '48', '15', '14679', '580', '0'), +('9', '48', '20', '11676', '8690', '0'), +('9', '48', '20', '11601', '7148', '0'), +('9', '48', '20', '2922', '4899', '0'), +('9', '48', '20', '1365', '4200', '0'), +('9', '48', '12', '11624', '1123', '0'), +('9', '48', '12', '20655', '781', '0'), +('9', '48', '12', '4835', '753', '0'), +('9', '48', '12', '4905', '729', '0'), +('9', '48', '18', '4412', '633', '0'), +('9', '48', '18', '4836', '522', '0'), +('9', '48', '18', '4906', '388', '0'), +('9', '48', '18', '3171', '319', '0'), +('9', '48', '19', '1534', '1276', '0'), +('9', '48', '19', '4837', '1024', '0'), +('9', '48', '19', '68239', '481', '0'), +('9', '48', '19', '4907', '392', '0'), +('9', '48', '13', '7510', '56308', '0'), +('9', '48', '13', '27704', '52631', '0'), +('9', '48', '13', '7257', '46271', '0'), +('9', '48', '13', '11610', '43990', '0'), +('9', '48', '14', '6952', '25785', '0'), +('9', '48', '14', '5500', '23715', '0'), +('9', '48', '14', '7257', '23041', '0'), +('9', '48', '14', '11557', '22800', '0'), +('9', '48', '11', '45137', '18327', '0'), +('9', '48', '11', '8325', '14120', '0'), +('9', '48', '11', '8408', '14050', '0'), +('9', '48', '11', '8811', '11040', '0'), +('9', '49', '22', '8567', '0', '0'), +('9', '49', '22', '10323', '0', '0'), +('9', '49', '22', '66166', '0', '0'), +('9', '49', '22', '10664', '0', '0'), +('9', '49', '1', '30361', '1140', '0'), +('9', '49', '1', '14701', '362', '0'), +('9', '49', '1', '10165', '313', '0'), +('9', '49', '1', '14658', '258', '0'), +('9', '49', '2', '10142', '1272', '0'), +('9', '49', '2', '4341', '1262', '0'), +('9', '49', '2', '30363', '1200', '0'), +('9', '49', '2', '3040', '1082', '0'), +('9', '49', '3', '14706', '990', '0'), +('9', '49', '3', '14705', '990', '0'), +('9', '49', '3', '27702', '807', '0'), +('9', '49', '3', '14695', '423', '0'), +('9', '49', '5', '30362', '1140', '0'), +('9', '49', '5', '14552', '884', '0'), +('9', '49', '5', '10147', '630', '0'), +('9', '49', '5', '14703', '550', '0'), +('9', '49', '8', '11621', '8325', '0'), +('9', '49', '8', '11551', '1505', '0'), +('9', '49', '8', '3403', '1171', '0'), +('9', '49', '8', '1409', '812', '0'), +('9', '49', '6', '1557', '5310', '0'), +('9', '49', '6', '3309', '517', '0'), +('9', '49', '6', '3165', '512', '0'), +('9', '49', '6', '4165', '362', '0'), +('9', '49', '17', '11623', '1935', '0'), +('9', '49', '17', '4832', '1594', '0'), +('9', '49', '17', '4902', '1107', '0'), +('9', '49', '17', '3164', '867', '0'), +('9', '49', '7', '4833', '725', '0'), +('9', '49', '7', '4411', '633', '0'), +('9', '49', '7', '4343', '342', '0'), +('9', '49', '7', '10104', '284', '0'), +('9', '49', '9', '27703', '1840', '0'), +('9', '49', '9', '4834', '920', '0'), +('9', '49', '9', '4904', '574', '0'), +('9', '49', '9', '13280', '493', '0'), +('9', '49', '15', '14707', '1050', '0'), +('9', '49', '15', '10366', '805', '0'), +('9', '49', '15', '30360', '600', '0'), +('9', '49', '15', '14679', '580', '0'), +('9', '49', '20', '11676', '8690', '0'), +('9', '49', '20', '11601', '7152', '0'), +('9', '49', '20', '2922', '4899', '0'), +('9', '49', '20', '1365', '4200', '0'), +('9', '49', '12', '11624', '1126', '0'), +('9', '49', '12', '20655', '782', '0'), +('9', '49', '12', '4835', '755', '0'), +('9', '49', '12', '4905', '729', '0'), +('9', '49', '18', '4412', '633', '0'), +('9', '49', '18', '4836', '524', '0'), +('9', '49', '18', '4906', '388', '0'), +('9', '49', '18', '3171', '321', '0'), +('9', '49', '19', '1534', '1276', '0'), +('9', '49', '19', '4837', '1024', '0'), +('9', '49', '19', '68239', '481', '0'), +('9', '49', '19', '4907', '392', '0'), +('9', '49', '13', '7510', '56967', '0'), +('9', '49', '13', '27704', '53420', '0'), +('9', '49', '13', '7257', '47126', '0'), +('9', '49', '13', '11610', '44844', '0'), +('9', '49', '14', '6952', '25785', '0'), +('9', '49', '14', '5500', '23715', '0'), +('9', '49', '14', '7257', '23041', '0'), +('9', '49', '14', '11557', '22800', '0'), +('9', '49', '11', '45137', '18629', '0'), +('9', '49', '11', '8325', '14120', '0'), +('9', '49', '11', '8408', '14050', '0'), +('9', '49', '11', '8811', '11040', '0'), +('9', '50', '22', '8567', '0', '0'), +('9', '50', '22', '10323', '0', '0'), +('9', '50', '22', '66166', '0', '0'), +('9', '50', '22', '10664', '0', '0'), +('9', '50', '1', '30361', '1140', '0'), +('9', '50', '1', '14701', '362', '0'), +('9', '50', '1', '10165', '313', '0'), +('9', '50', '1', '14658', '258', '0'), +('9', '50', '2', '10142', '1272', '0'), +('9', '50', '2', '4341', '1262', '0'), +('9', '50', '2', '30363', '1200', '0'), +('9', '50', '2', '3040', '1082', '0'), +('9', '50', '3', '14706', '990', '0'), +('9', '50', '3', '14705', '990', '0'), +('9', '50', '3', '27702', '807', '0'), +('9', '50', '3', '14695', '423', '0'), +('9', '50', '5', '30362', '1140', '0'), +('9', '50', '5', '14552', '884', '0'), +('9', '50', '5', '10147', '630', '0'), +('9', '50', '5', '14703', '550', '0'), +('9', '50', '8', '11621', '8325', '0'), +('9', '50', '8', '11551', '1505', '0'), +('9', '50', '8', '3403', '1171', '0'), +('9', '50', '8', '1409', '812', '0'), +('9', '50', '6', '1557', '5310', '0'), +('9', '50', '6', '3309', '517', '0'), +('9', '50', '6', '3165', '512', '0'), +('9', '50', '6', '4165', '362', '0'), +('9', '50', '17', '11623', '1935', '0'), +('9', '50', '17', '4832', '1600', '0'), +('9', '50', '17', '4902', '1107', '0'), +('9', '50', '17', '3164', '867', '0'), +('9', '50', '7', '4833', '725', '0'), +('9', '50', '7', '4411', '633', '0'), +('9', '50', '7', '4343', '346', '0'), +('9', '50', '7', '10104', '284', '0'), +('9', '50', '9', '27703', '1840', '0'), +('9', '50', '9', '4834', '920', '0'), +('9', '50', '9', '4904', '574', '0'), +('9', '50', '9', '13280', '493', '0'), +('9', '50', '15', '14707', '1050', '0'), +('9', '50', '15', '10366', '805', '0'), +('9', '50', '15', '30360', '600', '0'), +('9', '50', '15', '14679', '580', '0'), +('9', '50', '20', '11676', '8690', '0'), +('9', '50', '20', '11601', '7156', '0'), +('9', '50', '20', '2922', '4899', '0'), +('9', '50', '20', '1365', '4200', '0'), +('9', '50', '12', '11624', '1129', '0'), +('9', '50', '12', '20655', '783', '0'), +('9', '50', '12', '4835', '758', '0'), +('9', '50', '12', '4905', '729', '0'), +('9', '50', '18', '4412', '633', '0'), +('9', '50', '18', '4836', '526', '0'), +('9', '50', '18', '4906', '388', '0'), +('9', '50', '18', '3171', '323', '0'), +('9', '50', '19', '1534', '1276', '0'), +('9', '50', '19', '4837', '1024', '0'), +('9', '50', '19', '68239', '481', '0'), +('9', '50', '19', '4907', '392', '0'), +('9', '50', '13', '7510', '57633', '0'), +('9', '50', '13', '27704', '54217', '0'), +('9', '50', '13', '7257', '47989', '0'), +('9', '50', '13', '11610', '45708', '0'), +('9', '50', '14', '6952', '25785', '0'), +('9', '50', '14', '5500', '23715', '0'), +('9', '50', '14', '7257', '23041', '0'), +('9', '50', '14', '11557', '22800', '0'), +('9', '50', '11', '45137', '19011', '0'), +('9', '50', '11', '8325', '14120', '0'), +('9', '50', '11', '8408', '14050', '0'), +('9', '50', '11', '8811', '11040', '0'), +('9', '51', '22', '8567', '0', '0'), +('9', '51', '22', '10323', '0', '0'), +('9', '51', '22', '66166', '0', '0'), +('9', '51', '22', '10664', '0', '0'), +('9', '51', '1', '30361', '1140', '0'), +('9', '51', '1', '27822', '481', '0'), +('9', '51', '1', '14701', '362', '0'), +('9', '51', '1', '10165', '313', '0'), +('9', '51', '2', '10142', '1272', '0'), +('9', '51', '2', '4341', '1262', '0'), +('9', '51', '2', '30363', '1200', '0'), +('9', '51', '2', '3040', '1082', '0'), +('9', '51', '3', '14706', '990', '0'), +('9', '51', '3', '14705', '990', '0'), +('9', '51', '3', '27702', '807', '0'), +('9', '51', '3', '14695', '423', '0'), +('9', '51', '5', '30362', '1140', '0'), +('9', '51', '5', '14552', '884', '0'), +('9', '51', '5', '10147', '630', '0'), +('9', '51', '5', '14703', '550', '0'), +('9', '51', '8', '11621', '8325', '0'), +('9', '51', '8', '11551', '1505', '0'), +('9', '51', '8', '3403', '1171', '0'), +('9', '51', '8', '1409', '812', '0'), +('9', '51', '6', '1557', '5310', '0'), +('9', '51', '6', '3309', '517', '0'), +('9', '51', '6', '3165', '512', '0'), +('9', '51', '6', '4165', '362', '0'), +('9', '51', '17', '11623', '1935', '0'), +('9', '51', '17', '4832', '1608', '0'), +('9', '51', '17', '4902', '1107', '0'), +('9', '51', '17', '3164', '867', '0'), +('9', '51', '7', '4833', '725', '0'), +('9', '51', '7', '4411', '633', '0'), +('9', '51', '7', '4343', '351', '0'), +('9', '51', '7', '10104', '284', '0'), +('9', '51', '9', '27703', '1840', '0'), +('9', '51', '9', '4834', '920', '0'), +('9', '51', '9', '4904', '574', '0'), +('9', '51', '9', '13280', '493', '0'), +('9', '51', '15', '14707', '1050', '0'), +('9', '51', '15', '10366', '805', '0'), +('9', '51', '15', '30360', '600', '0'), +('9', '51', '15', '14679', '580', '0'), +('9', '51', '20', '11676', '8690', '0'), +('9', '51', '20', '11601', '7161', '0'), +('9', '51', '20', '2922', '4899', '0'), +('9', '51', '20', '1365', '4200', '0'), +('9', '51', '12', '11624', '1132', '0'), +('9', '51', '12', '20655', '784', '0'), +('9', '51', '12', '4835', '760', '0'), +('9', '51', '12', '4905', '729', '0'), +('9', '51', '18', '4412', '633', '0'), +('9', '51', '18', '4836', '529', '0'), +('9', '51', '18', '4906', '388', '0'), +('9', '51', '18', '3171', '325', '0'), +('9', '51', '19', '1534', '1276', '0'), +('9', '51', '19', '4837', '1024', '0'), +('9', '51', '19', '68239', '481', '0'), +('9', '51', '19', '4907', '392', '0'), +('9', '51', '13', '7510', '58306', '0'), +('9', '51', '13', '27704', '55024', '0'), +('9', '51', '13', '7257', '48862', '0'), +('9', '51', '13', '11610', '46581', '0'), +('9', '51', '14', '6952', '25785', '0'), +('9', '51', '14', '5500', '23715', '0'), +('9', '51', '14', '7257', '23041', '0'), +('9', '51', '14', '11557', '22800', '0'), +('9', '51', '11', '45137', '19314', '0'), +('9', '51', '11', '8325', '14120', '0'), +('9', '51', '11', '8408', '14050', '0'), +('9', '51', '11', '8811', '11040', '0'), +('9', '52', '22', '8567', '0', '0'), +('9', '52', '22', '10323', '0', '0'), +('9', '52', '22', '66166', '0', '0'), +('9', '52', '22', '10664', '0', '0'), +('9', '52', '1', '30361', '1140', '0'), +('9', '52', '1', '27822', '481', '0'), +('9', '52', '1', '14701', '362', '0'), +('9', '52', '1', '10165', '313', '0'), +('9', '52', '2', '10142', '1272', '0'), +('9', '52', '2', '4341', '1262', '0'), +('9', '52', '2', '30363', '1200', '0'), +('9', '52', '2', '3040', '1082', '0'), +('9', '52', '3', '14706', '990', '0'), +('9', '52', '3', '14705', '990', '0'), +('9', '52', '3', '27702', '807', '0'), +('9', '52', '3', '14695', '423', '0'), +('9', '52', '5', '30362', '1140', '0'), +('9', '52', '5', '14552', '884', '0'), +('9', '52', '5', '10147', '630', '0'), +('9', '52', '5', '14703', '550', '0'), +('9', '52', '8', '11621', '8325', '0'), +('9', '52', '8', '11551', '1505', '0'), +('9', '52', '8', '3403', '1171', '0'), +('9', '52', '8', '1409', '812', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '52', '6', '1557', '5310', '0'), +('9', '52', '6', '3309', '517', '0'), +('9', '52', '6', '3165', '512', '0'), +('9', '52', '6', '4165', '362', '0'), +('9', '52', '17', '11623', '1935', '0'), +('9', '52', '17', '4832', '1614', '0'), +('9', '52', '17', '4902', '1107', '0'), +('9', '52', '17', '3164', '867', '0'), +('9', '52', '7', '4833', '725', '0'), +('9', '52', '7', '4411', '633', '0'), +('9', '52', '7', '4343', '355', '0'), +('9', '52', '7', '10104', '284', '0'), +('9', '52', '9', '27703', '1840', '0'), +('9', '52', '9', '4834', '920', '0'), +('9', '52', '9', '4904', '574', '0'), +('9', '52', '9', '13280', '493', '0'), +('9', '52', '15', '14707', '1050', '0'), +('9', '52', '15', '10366', '805', '0'), +('9', '52', '15', '30360', '600', '0'), +('9', '52', '15', '14679', '580', '0'), +('9', '52', '20', '11676', '8690', '0'), +('9', '52', '20', '11601', '7165', '0'), +('9', '52', '20', '2922', '4899', '0'), +('9', '52', '20', '1365', '4200', '0'), +('9', '52', '12', '11624', '1135', '0'), +('9', '52', '12', '20655', '785', '0'), +('9', '52', '12', '4835', '762', '0'), +('9', '52', '12', '4905', '729', '0'), +('9', '52', '18', '4412', '633', '0'), +('9', '52', '18', '4836', '531', '0'), +('9', '52', '18', '4906', '388', '0'), +('9', '52', '18', '3171', '328', '0'), +('9', '52', '19', '1534', '1276', '0'), +('9', '52', '19', '4837', '1024', '0'), +('9', '52', '19', '68239', '481', '0'), +('9', '52', '19', '4907', '392', '0'), +('9', '52', '13', '7510', '58987', '0'), +('9', '52', '13', '27704', '55839', '0'), +('9', '52', '13', '7257', '49745', '0'), +('9', '52', '13', '11610', '47463', '0'), +('9', '52', '14', '6952', '25785', '0'), +('9', '52', '14', '5500', '23715', '0'), +('9', '52', '14', '7257', '23041', '0'), +('9', '52', '14', '11557', '22800', '0'), +('9', '52', '11', '45137', '19856', '0'), +('9', '52', '11', '8325', '14120', '0'), +('9', '52', '11', '8408', '14050', '0'), +('9', '52', '11', '8811', '11040', '0'), +('9', '53', '22', '8567', '0', '0'), +('9', '53', '22', '10323', '0', '0'), +('9', '53', '22', '66166', '0', '0'), +('9', '53', '22', '10664', '0', '0'), +('9', '53', '1', '30361', '1140', '0'), +('9', '53', '1', '27822', '481', '0'), +('9', '53', '1', '14701', '362', '0'), +('9', '53', '1', '10165', '313', '0'), +('9', '53', '2', '10142', '1272', '0'), +('9', '53', '2', '4341', '1262', '0'), +('9', '53', '2', '30363', '1200', '0'), +('9', '53', '2', '3040', '1082', '0'), +('9', '53', '3', '14706', '990', '0'), +('9', '53', '3', '14705', '990', '0'), +('9', '53', '3', '27702', '807', '0'), +('9', '53', '3', '14695', '423', '0'), +('9', '53', '5', '30362', '1140', '0'), +('9', '53', '5', '14552', '884', '0'), +('9', '53', '5', '10147', '630', '0'), +('9', '53', '5', '14703', '550', '0'), +('9', '53', '8', '11621', '8325', '0'), +('9', '53', '8', '11551', '1505', '0'), +('9', '53', '8', '3403', '1171', '0'), +('9', '53', '8', '1409', '812', '0'), +('9', '53', '6', '1557', '5310', '0'), +('9', '53', '6', '3309', '517', '0'), +('9', '53', '6', '3165', '512', '0'), +('9', '53', '6', '4165', '362', '0'), +('9', '53', '17', '11623', '1935', '0'), +('9', '53', '17', '4832', '1620', '0'), +('9', '53', '17', '4902', '1107', '0'), +('9', '53', '17', '3164', '867', '0'), +('9', '53', '7', '4833', '725', '0'), +('9', '53', '7', '4411', '633', '0'), +('9', '53', '7', '4343', '359', '0'), +('9', '53', '7', '10104', '284', '0'), +('9', '53', '9', '27703', '1840', '0'), +('9', '53', '9', '4834', '920', '0'), +('9', '53', '9', '4904', '574', '0'), +('9', '53', '9', '13280', '493', '0'), +('9', '53', '15', '14707', '1050', '0'), +('9', '53', '15', '10366', '805', '0'), +('9', '53', '15', '30360', '600', '0'), +('9', '53', '15', '14679', '580', '0'), +('9', '53', '20', '11676', '8690', '0'), +('9', '53', '20', '11601', '7169', '0'), +('9', '53', '20', '2922', '4899', '0'), +('9', '53', '20', '1365', '4200', '0'), +('9', '53', '12', '11624', '1138', '0'), +('9', '53', '12', '20655', '786', '0'), +('9', '53', '12', '4835', '764', '0'), +('9', '53', '12', '4905', '729', '0'), +('9', '53', '18', '4412', '633', '0'), +('9', '53', '18', '4836', '533', '0'), +('9', '53', '18', '4906', '388', '0'), +('9', '53', '18', '3171', '330', '0'), +('9', '53', '19', '1534', '1276', '0'), +('9', '53', '19', '4837', '1024', '0'), +('9', '53', '19', '68239', '481', '0'), +('9', '53', '19', '4907', '392', '0'), +('9', '53', '13', '7510', '59674', '0'), +('9', '53', '13', '27704', '56663', '0'), +('9', '53', '13', '7257', '50636', '0'), +('9', '53', '13', '11610', '48355', '0'), +('9', '53', '14', '6952', '25785', '0'), +('9', '53', '14', '5500', '23715', '0'), +('9', '53', '14', '7257', '23041', '0'), +('9', '53', '14', '11557', '22800', '0'), +('9', '53', '11', '45137', '20159', '0'), +('9', '53', '11', '8325', '14120', '0'), +('9', '53', '11', '8408', '14050', '0'), +('9', '53', '11', '8811', '11040', '0'), +('9', '54', '22', '8567', '0', '0'), +('9', '54', '22', '10323', '0', '0'), +('9', '54', '22', '66166', '0', '0'), +('9', '54', '22', '10664', '0', '0'), +('9', '54', '1', '30361', '1140', '0'), +('9', '54', '1', '27822', '481', '0'), +('9', '54', '1', '14701', '362', '0'), +('9', '54', '1', '10165', '313', '0'), +('9', '54', '2', '10142', '1272', '0'), +('9', '54', '2', '4341', '1262', '0'), +('9', '54', '2', '30363', '1200', '0'), +('9', '54', '2', '3040', '1082', '0'), +('9', '54', '3', '14706', '990', '0'), +('9', '54', '3', '14705', '990', '0'), +('9', '54', '3', '27702', '807', '0'), +('9', '54', '3', '14695', '423', '0'), +('9', '54', '5', '30362', '1140', '0'), +('9', '54', '5', '14552', '884', '0'), +('9', '54', '5', '10147', '630', '0'), +('9', '54', '5', '14703', '550', '0'), +('9', '54', '8', '11621', '8325', '0'), +('9', '54', '8', '11551', '1505', '0'), +('9', '54', '8', '3403', '1171', '0'), +('9', '54', '8', '1409', '812', '0'), +('9', '54', '6', '1557', '5310', '0'), +('9', '54', '6', '3309', '517', '0'), +('9', '54', '6', '3165', '512', '0'), +('9', '54', '6', '4165', '362', '0'), +('9', '54', '17', '11623', '1935', '0'), +('9', '54', '17', '4832', '1627', '0'), +('9', '54', '17', '4902', '1107', '0'), +('9', '54', '17', '3164', '867', '0'), +('9', '54', '7', '4833', '725', '0'), +('9', '54', '7', '4411', '633', '0'), +('9', '54', '7', '4343', '364', '0'), +('9', '54', '7', '10104', '284', '0'), +('9', '54', '9', '27703', '1840', '0'), +('9', '54', '9', '4834', '920', '0'), +('9', '54', '9', '4904', '574', '0'), +('9', '54', '9', '13280', '493', '0'), +('9', '54', '15', '14707', '1050', '0'), +('9', '54', '15', '10366', '805', '0'), +('9', '54', '15', '30360', '600', '0'), +('9', '54', '15', '14679', '580', '0'), +('9', '54', '20', '11676', '8690', '0'), +('9', '54', '20', '11601', '7174', '0'), +('9', '54', '20', '2922', '4899', '0'), +('9', '54', '20', '1365', '4200', '0'), +('9', '54', '12', '11624', '1141', '0'), +('9', '54', '12', '20655', '787', '0'), +('9', '54', '12', '4835', '767', '0'), +('9', '54', '12', '4905', '729', '0'), +('9', '54', '18', '4412', '633', '0'), +('9', '54', '18', '4836', '535', '0'), +('9', '54', '18', '4906', '388', '0'), +('9', '54', '18', '3171', '332', '0'), +('9', '54', '19', '1534', '1276', '0'), +('9', '54', '19', '4837', '1024', '0'), +('9', '54', '19', '68239', '481', '0'), +('9', '54', '19', '4907', '392', '0'), +('9', '54', '13', '7510', '60369', '0'), +('9', '54', '13', '27704', '57495', '0'), +('9', '54', '13', '7257', '51537', '0'), +('9', '54', '13', '11610', '49256', '0'), +('9', '54', '14', '6952', '25785', '0'), +('9', '54', '14', '5500', '23715', '0'), +('9', '54', '14', '7257', '23041', '0'), +('9', '54', '14', '11557', '22800', '0'), +('9', '54', '11', '45137', '20482', '0'), +('9', '54', '11', '8325', '14120', '0'), +('9', '54', '11', '8408', '14050', '0'), +('9', '54', '11', '8811', '11040', '0'), +('9', '55', '22', '8567', '0', '0'), +('9', '55', '22', '10323', '0', '0'), +('9', '55', '22', '66166', '0', '0'), +('9', '55', '22', '10664', '0', '0'), +('9', '55', '1', '30361', '1140', '0'), +('9', '55', '1', '27822', '481', '0'), +('9', '55', '1', '14701', '362', '0'), +('9', '55', '1', '10165', '313', '0'), +('9', '55', '2', '10142', '1272', '0'), +('9', '55', '2', '4341', '1262', '0'), +('9', '55', '2', '30363', '1200', '0'), +('9', '55', '2', '3040', '1082', '0'), +('9', '55', '3', '14706', '990', '0'), +('9', '55', '3', '14705', '990', '0'), +('9', '55', '3', '27702', '807', '0'), +('9', '55', '3', '14695', '423', '0'), +('9', '55', '5', '30362', '1140', '0'), +('9', '55', '5', '14552', '884', '0'), +('9', '55', '5', '10147', '630', '0'), +('9', '55', '5', '14703', '550', '0'), +('9', '55', '8', '11621', '8325', '0'), +('9', '55', '8', '11551', '1505', '0'), +('9', '55', '8', '3403', '1171', '0'), +('9', '55', '8', '1409', '812', '0'), +('9', '55', '6', '1557', '5310', '0'), +('9', '55', '6', '3309', '517', '0'), +('9', '55', '6', '3165', '512', '0'), +('9', '55', '6', '4165', '362', '0'), +('9', '55', '17', '11623', '1935', '0'), +('9', '55', '17', '4832', '1634', '0'), +('9', '55', '17', '4902', '1107', '0'), +('9', '55', '17', '3164', '867', '0'), +('9', '55', '7', '4833', '725', '0'), +('9', '55', '7', '4411', '633', '0'), +('9', '55', '7', '4343', '368', '0'), +('9', '55', '7', '10104', '284', '0'), +('9', '55', '9', '27703', '1840', '0'), +('9', '55', '9', '4834', '920', '0'), +('9', '55', '9', '4904', '574', '0'), +('9', '55', '9', '13280', '493', '0'), +('9', '55', '15', '14707', '1050', '0'), +('9', '55', '15', '10366', '805', '0'), +('9', '55', '15', '30360', '600', '0'), +('9', '55', '15', '14679', '580', '0'), +('9', '55', '20', '11676', '8690', '0'), +('9', '55', '20', '11601', '7178', '0'), +('9', '55', '20', '2922', '4899', '0'), +('9', '55', '20', '1365', '4200', '0'), +('9', '55', '12', '11624', '1144', '0'), +('9', '55', '12', '20655', '788', '0'), +('9', '55', '12', '4835', '769', '0'), +('9', '55', '12', '4905', '729', '0'), +('9', '55', '18', '4412', '633', '0'), +('9', '55', '18', '4836', '538', '0'), +('9', '55', '18', '4906', '388', '0'), +('9', '55', '18', '3171', '334', '0'), +('9', '55', '19', '1534', '1276', '0'), +('9', '55', '19', '4837', '1024', '0'), +('9', '55', '19', '68239', '481', '0'), +('9', '55', '19', '4907', '392', '0'), +('9', '55', '13', '7510', '61071', '0'), +('9', '55', '13', '27704', '58336', '0'), +('9', '55', '13', '7257', '52448', '0'), +('9', '55', '13', '11610', '50167', '0'), +('9', '55', '14', '6952', '25785', '0'), +('9', '55', '14', '5500', '23715', '0'), +('9', '55', '14', '7257', '23041', '0'), +('9', '55', '14', '11557', '22800', '0'), +('9', '55', '11', '45137', '20865', '0'), +('9', '55', '11', '8325', '14120', '0'), +('9', '55', '11', '8408', '14050', '0'), +('9', '55', '11', '8811', '11040', '0'), +('9', '56', '22', '8567', '0', '0'), +('9', '56', '22', '10323', '0', '0'), +('9', '56', '22', '66166', '0', '0'), +('9', '56', '22', '10664', '0', '0'), +('9', '56', '1', '30361', '1140', '0'), +('9', '56', '1', '27822', '481', '0'), +('9', '56', '1', '14701', '362', '0'), +('9', '56', '1', '10165', '313', '0'), +('9', '56', '2', '10142', '1272', '0'), +('9', '56', '2', '4341', '1262', '0'), +('9', '56', '2', '30363', '1200', '0'), +('9', '56', '2', '3040', '1082', '0'), +('9', '56', '3', '14706', '990', '0'), +('9', '56', '3', '14705', '990', '0'), +('9', '56', '3', '27702', '807', '0'), +('9', '56', '3', '14695', '423', '0'), +('9', '56', '5', '30362', '1140', '0'), +('9', '56', '5', '14552', '884', '0'), +('9', '56', '5', '10147', '630', '0'), +('9', '56', '5', '14703', '550', '0'), +('9', '56', '8', '11621', '8325', '0'), +('9', '56', '8', '11551', '1505', '0'), +('9', '56', '8', '3403', '1171', '0'), +('9', '56', '8', '1409', '812', '0'), +('9', '56', '6', '1557', '5310', '0'), +('9', '56', '6', '3309', '517', '0'), +('9', '56', '6', '3165', '512', '0'), +('9', '56', '6', '4165', '362', '0'), +('9', '56', '17', '11623', '1935', '0'), +('9', '56', '17', '4832', '1641', '0'), +('9', '56', '17', '4902', '1107', '0'), +('9', '56', '17', '3164', '867', '0'), +('9', '56', '7', '4833', '725', '0'), +('9', '56', '7', '4411', '633', '0'), +('9', '56', '7', '4343', '373', '0'), +('9', '56', '7', '10104', '284', '0'), +('9', '56', '9', '27703', '1840', '0'), +('9', '56', '9', '4834', '920', '0'), +('9', '56', '9', '4904', '574', '0'), +('9', '56', '9', '13280', '493', '0'), +('9', '56', '15', '14707', '1050', '0'), +('9', '56', '15', '10366', '805', '0'), +('9', '56', '15', '30360', '600', '0'), +('9', '56', '15', '14679', '580', '0'), +('9', '56', '20', '11676', '8690', '0'), +('9', '56', '20', '11601', '7183', '0'), +('9', '56', '20', '2922', '4899', '0'), +('9', '56', '20', '1365', '4200', '0'), +('9', '56', '12', '11624', '1148', '0'), +('9', '56', '12', '20655', '788', '0'), +('9', '56', '12', '4835', '771', '0'), +('9', '56', '12', '4905', '729', '0'), +('9', '56', '18', '4412', '633', '0'), +('9', '56', '18', '4836', '540', '0'), +('9', '56', '18', '4906', '388', '0'), +('9', '56', '18', '3171', '337', '0'), +('9', '56', '19', '1534', '1276', '0'), +('9', '56', '19', '4837', '1024', '0'), +('9', '56', '19', '68239', '481', '0'), +('9', '56', '19', '4907', '392', '0'), +('9', '56', '13', '7510', '61780', '0'), +('9', '56', '13', '27704', '59185', '0'), +('9', '56', '13', '7257', '53368', '0'), +('9', '56', '13', '11610', '51086', '0'), +('9', '56', '14', '6952', '25785', '0'), +('9', '56', '14', '5500', '23715', '0'), +('9', '56', '14', '7257', '23041', '0'), +('9', '56', '14', '11557', '22800', '0'), +('9', '56', '11', '45137', '21168', '0'), +('9', '56', '11', '8325', '14120', '0'), +('9', '56', '11', '8408', '14050', '0'), +('9', '56', '11', '8811', '11040', '0'), +('9', '57', '22', '8567', '0', '0'), +('9', '57', '22', '10323', '0', '0'), +('9', '57', '22', '66166', '0', '0'), +('9', '57', '22', '10664', '0', '0'), +('9', '57', '1', '30361', '1140', '0'), +('9', '57', '1', '27822', '481', '0'), +('9', '57', '1', '14701', '362', '0'), +('9', '57', '1', '10165', '313', '0'), +('9', '57', '2', '10142', '1272', '0'), +('9', '57', '2', '4341', '1262', '0'), +('9', '57', '2', '30363', '1200', '0'), +('9', '57', '2', '3040', '1082', '0'), +('9', '57', '3', '14706', '990', '0'), +('9', '57', '3', '14705', '990', '0'), +('9', '57', '3', '27702', '807', '0'), +('9', '57', '3', '14695', '423', '0'), +('9', '57', '5', '30362', '1140', '0'), +('9', '57', '5', '14552', '884', '0'), +('9', '57', '5', '10147', '630', '0'), +('9', '57', '5', '14703', '550', '0'), +('9', '57', '8', '11621', '8325', '0'), +('9', '57', '8', '11551', '1505', '0'), +('9', '57', '8', '3403', '1171', '0'), +('9', '57', '8', '1409', '812', '0'), +('9', '57', '6', '1557', '5310', '0'), +('9', '57', '6', '3309', '517', '0'), +('9', '57', '6', '3165', '512', '0'), +('9', '57', '6', '4165', '362', '0'), +('9', '57', '17', '11623', '1935', '0'), +('9', '57', '17', '4832', '1647', '0'), +('9', '57', '17', '4902', '1107', '0'), +('9', '57', '17', '3164', '867', '0'), +('9', '57', '7', '4833', '725', '0'), +('9', '57', '7', '4411', '633', '0'), +('9', '57', '7', '4343', '378', '0'), +('9', '57', '7', '10104', '284', '0'), +('9', '57', '9', '27703', '1840', '0'), +('9', '57', '9', '4834', '920', '0'), +('9', '57', '9', '4904', '574', '0'), +('9', '57', '9', '13280', '493', '0'), +('9', '57', '15', '14707', '1050', '0'), +('9', '57', '15', '10366', '805', '0'), +('9', '57', '15', '30360', '600', '0'), +('9', '57', '15', '14679', '580', '0'), +('9', '57', '20', '11676', '8690', '0'), +('9', '57', '20', '11601', '7188', '0'), +('9', '57', '20', '2922', '4899', '0'), +('9', '57', '20', '1365', '4200', '0'), +('9', '57', '12', '11624', '1151', '0'), +('9', '57', '12', '20655', '789', '0'), +('9', '57', '12', '4835', '773', '0'), +('9', '57', '12', '4905', '729', '0'), +('9', '57', '18', '4412', '633', '0'), +('9', '57', '18', '4836', '542', '0'), +('9', '57', '18', '4906', '388', '0'), +('9', '57', '18', '3171', '339', '0'), +('9', '57', '19', '1534', '1276', '0'), +('9', '57', '19', '4837', '1024', '0'), +('9', '57', '19', '68239', '481', '0'), +('9', '57', '19', '4907', '392', '0'), +('9', '57', '13', '7510', '62497', '0'), +('9', '57', '13', '27704', '60044', '0'), +('9', '57', '13', '7257', '54297', '0'), +('9', '57', '13', '11610', '52016', '0'), +('9', '57', '14', '6952', '25785', '0'), +('9', '57', '14', '5500', '23715', '0'), +('9', '57', '14', '7257', '23041', '0'), +('9', '57', '14', '11557', '22800', '0'), +('9', '57', '11', '45137', '21832', '0'), +('9', '57', '11', '8325', '14120', '0'), +('9', '57', '11', '8408', '14050', '0'), +('9', '57', '11', '8811', '11040', '0'), +('9', '58', '22', '8567', '0', '0'), +('9', '58', '22', '10323', '0', '0'), +('9', '58', '22', '66166', '0', '0'), +('9', '58', '22', '10664', '0', '0'), +('9', '58', '1', '30361', '1140', '0'), +('9', '58', '1', '27822', '481', '0'), +('9', '58', '1', '14701', '362', '0'), +('9', '58', '1', '10165', '313', '0'), +('9', '58', '2', '10142', '1272', '0'), +('9', '58', '2', '4341', '1262', '0'), +('9', '58', '2', '30363', '1200', '0'), +('9', '58', '2', '3040', '1082', '0'), +('9', '58', '3', '14706', '990', '0'), +('9', '58', '3', '14705', '990', '0'), +('9', '58', '3', '27702', '807', '0'), +('9', '58', '3', '14695', '423', '0'), +('9', '58', '5', '30362', '1140', '0'), +('9', '58', '5', '14552', '884', '0'), +('9', '58', '5', '10147', '630', '0'), +('9', '58', '5', '14703', '550', '0'), +('9', '58', '8', '11621', '8325', '0'), +('9', '58', '8', '11551', '1505', '0'), +('9', '58', '8', '3403', '1171', '0'), +('9', '58', '8', '1409', '812', '0'), +('9', '58', '6', '1557', '5310', '0'), +('9', '58', '6', '3309', '517', '0'), +('9', '58', '6', '3165', '512', '0'), +('9', '58', '6', '4165', '362', '0'), +('9', '58', '17', '11623', '1935', '0'), +('9', '58', '17', '4832', '1655', '0'), +('9', '58', '17', '4902', '1107', '0'), +('9', '58', '17', '3164', '867', '0'), +('9', '58', '7', '4833', '725', '0'), +('9', '58', '7', '4411', '633', '0'), +('9', '58', '7', '4343', '382', '0'), +('9', '58', '7', '10104', '284', '0'), +('9', '58', '9', '27703', '1840', '0'), +('9', '58', '9', '4834', '920', '0'), +('9', '58', '9', '4904', '574', '0'), +('9', '58', '9', '13280', '493', '0'), +('9', '58', '15', '14707', '1050', '0'), +('9', '58', '15', '10366', '805', '0'), +('9', '58', '15', '30360', '600', '0'), +('9', '58', '15', '14679', '580', '0'), +('9', '58', '20', '11676', '8690', '0'), +('9', '58', '20', '11601', '7192', '0'), +('9', '58', '20', '2922', '4899', '0'), +('9', '58', '20', '1365', '4200', '0'), +('9', '58', '12', '11624', '1154', '0'), +('9', '58', '12', '20655', '790', '0'), +('9', '58', '12', '4835', '776', '0'), +('9', '58', '12', '4905', '729', '0'), +('9', '58', '18', '4412', '633', '0'), +('9', '58', '18', '4836', '545', '0'), +('9', '58', '18', '4906', '388', '0'), +('9', '58', '18', '3171', '341', '0'), +('9', '58', '19', '1534', '1276', '0'), +('9', '58', '19', '4837', '1024', '0'), +('9', '58', '19', '68239', '481', '0'), +('9', '58', '19', '4907', '392', '0'), +('9', '58', '13', '7510', '63220', '0'), +('9', '58', '13', '27704', '60911', '0'), +('9', '58', '13', '7257', '55235', '0'), +('9', '58', '13', '11610', '52954', '0'), +('9', '58', '14', '6952', '25785', '0'), +('9', '58', '14', '5500', '23715', '0'), +('9', '58', '14', '7257', '23041', '0'), +('9', '58', '14', '11557', '22800', '0'), +('9', '58', '11', '45137', '22155', '0'), +('9', '58', '11', '8325', '14120', '0'), +('9', '58', '11', '8408', '14050', '0'), +('9', '58', '11', '8811', '11040', '0'), +('9', '59', '22', '8567', '0', '0'), +('9', '59', '22', '10323', '0', '0'), +('9', '59', '22', '66166', '0', '0'), +('9', '59', '22', '10664', '0', '0'), +('9', '59', '1', '30361', '1140', '0'), +('9', '59', '1', '27822', '481', '0'), +('9', '59', '1', '14701', '362', '0'), +('9', '59', '1', '10165', '313', '0'), +('9', '59', '2', '10142', '1272', '0'), +('9', '59', '2', '4341', '1262', '0'), +('9', '59', '2', '30363', '1200', '0'), +('9', '59', '2', '3040', '1082', '0'), +('9', '59', '3', '14706', '990', '0'), +('9', '59', '3', '14705', '990', '0'), +('9', '59', '3', '27702', '807', '0'), +('9', '59', '3', '14695', '423', '0'), +('9', '59', '5', '30362', '1140', '0'), +('9', '59', '5', '14552', '884', '0'), +('9', '59', '5', '10147', '630', '0'), +('9', '59', '5', '14703', '550', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '59', '8', '11621', '8325', '0'), +('9', '59', '8', '11551', '1505', '0'), +('9', '59', '8', '3403', '1171', '0'), +('9', '59', '8', '1409', '812', '0'), +('9', '59', '6', '1557', '5310', '0'), +('9', '59', '6', '3309', '517', '0'), +('9', '59', '6', '3165', '512', '0'), +('9', '59', '6', '4165', '362', '0'), +('9', '59', '17', '11623', '1935', '0'), +('9', '59', '17', '4832', '1661', '0'), +('9', '59', '17', '4902', '1107', '0'), +('9', '59', '17', '3164', '867', '0'), +('9', '59', '7', '4833', '725', '0'), +('9', '59', '7', '4411', '633', '0'), +('9', '59', '7', '4343', '387', '0'), +('9', '59', '7', '10104', '284', '0'), +('9', '59', '9', '27703', '1840', '0'), +('9', '59', '9', '4834', '920', '0'), +('9', '59', '9', '4904', '574', '0'), +('9', '59', '9', '13280', '493', '0'), +('9', '59', '15', '14707', '1050', '0'), +('9', '59', '15', '10366', '805', '0'), +('9', '59', '15', '30360', '600', '0'), +('9', '59', '15', '14679', '580', '0'), +('9', '59', '20', '11676', '8690', '0'), +('9', '59', '20', '11601', '7197', '0'), +('9', '59', '20', '2922', '4899', '0'), +('9', '59', '20', '1365', '4200', '0'), +('9', '59', '12', '11624', '1157', '0'), +('9', '59', '12', '20655', '791', '0'), +('9', '59', '12', '4835', '778', '0'), +('9', '59', '12', '4905', '729', '0'), +('9', '59', '18', '4412', '633', '0'), +('9', '59', '18', '4836', '547', '0'), +('9', '59', '18', '4906', '388', '0'), +('9', '59', '18', '3171', '343', '0'), +('9', '59', '19', '1534', '1276', '0'), +('9', '59', '19', '4837', '1024', '0'), +('9', '59', '19', '68239', '481', '0'), +('9', '59', '19', '4907', '392', '0'), +('9', '59', '13', '7510', '63951', '0'), +('9', '59', '13', '27704', '61786', '0'), +('9', '59', '13', '7257', '56183', '0'), +('9', '59', '13', '11610', '53902', '0'), +('9', '59', '14', '6952', '25785', '0'), +('9', '59', '14', '5500', '23715', '0'), +('9', '59', '14', '7257', '23041', '0'), +('9', '59', '14', '11557', '22800', '0'), +('9', '59', '11', '45137', '22539', '0'), +('9', '59', '11', '8325', '14120', '0'), +('9', '59', '11', '8408', '14050', '0'), +('9', '59', '11', '8811', '11040', '0'), +('9', '60', '22', '21805', '0', '3'), +('9', '60', '22', '61948', '0', '3'), +('9', '60', '22', '21807', '0', '3'), +('9', '60', '22', '12425', '0', '3'), +('9', '60', '1', '7945', '8905', '3'), +('9', '60', '1', '26775', '5024', '3'), +('9', '60', '1', '28962', '3771', '3'), +('9', '60', '1', '28945', '3505', '3'), +('9', '60', '2', '26025', '8155', '3'), +('9', '60', '2', '2612', '8155', '3'), +('9', '60', '2', '28995', '3910', '3'), +('9', '60', '2', '1630', '3401', '3'), +('9', '60', '3', '26773', '5183', '3'), +('9', '60', '3', '31464', '2872', '3'), +('9', '60', '3', '28963', '2807', '3'), +('9', '60', '3', '51239', '2313', '3'), +('9', '60', '5', '28885', '10215', '3'), +('9', '60', '5', '27266', '9662', '3'), +('9', '60', '5', '8364', '6428', '3'), +('9', '60', '5', '7868', '4014', '3'), +('9', '60', '8', '26766', '10726', '3'), +('9', '60', '8', '31471', '10077', '3'), +('9', '60', '8', '26765', '10063', '3'), +('9', '60', '8', '11621', '8153', '3'), +('9', '60', '6', '28902', '12108', '3'), +('9', '60', '6', '1557', '5251', '3'), +('9', '60', '6', '30551', '4022', '3'), +('9', '60', '6', '31472', '4010', '3'), +('9', '60', '17', '27261', '7905', '3'), +('9', '60', '17', '28951', '2503', '3'), +('9', '60', '17', '7926', '2275', '3'), +('9', '60', '17', '30564', '2199', '3'), +('9', '60', '7', '26771', '7520', '3'), +('9', '60', '7', '7194', '4506', '3'), +('9', '60', '7', '7868', '4014', '3'), +('9', '60', '7', '5854', '3727', '3'), +('9', '60', '9', '31461', '9968', '3'), +('9', '60', '9', '7868', '4014', '3'), +('9', '60', '9', '26584', '3258', '3'), +('9', '60', '9', '28943', '2916', '3'), +('9', '60', '15', '27950', '7106', '3'), +('9', '60', '15', '26757', '4406', '3'), +('9', '60', '15', '26749', '3508', '3'), +('9', '60', '15', '28939', '2662', '3'), +('9', '60', '20', '28890', '9806', '3'), +('9', '60', '20', '31364', '9468', '3'), +('9', '60', '20', '31334', '9413', '3'), +('9', '60', '20', '27963', '9257', '3'), +('9', '60', '12', '25857', '10312', '3'), +('9', '60', '12', '29177', '5160', '3'), +('9', '60', '12', '2746', '4855', '3'), +('9', '60', '12', '28958', '3574', '3'), +('9', '60', '18', '28965', '3012', '3'), +('9', '60', '18', '26750', '2918', '3'), +('9', '60', '18', '26755', '2510', '3'), +('9', '60', '18', '28932', '2212', '3'), +('9', '60', '19', '30569', '10869', '3'), +('9', '60', '19', '51226', '9671', '3'), +('9', '60', '19', '28888', '9614', '3'), +('9', '60', '19', '24616', '9059', '3'), +('9', '60', '13', '1158', '98198', '3'), +('9', '60', '13', '2509', '95638', '3'), +('9', '60', '13', '28805', '83801', '3'), +('9', '60', '13', '51231', '83665', '3'), +('9', '60', '14', '1158', '64099', '3'), +('9', '60', '14', '1154', '61911', '3'), +('9', '60', '14', '2509', '56470', '3'), +('9', '60', '14', '1136', '54544', '3'), +('9', '60', '11', '30539', '40487', '3'), +('9', '60', '11', '28935', '39046', '3'), +('9', '60', '11', '31335', '27996', '3'), +('9', '60', '11', '7904', '27434', '3'), +('9', '60', '22', '66166', '0', '2'), +('9', '60', '22', '10323', '0', '2'), +('9', '60', '22', '9248', '0', '2'), +('9', '60', '22', '12425', '0', '2'), +('9', '60', '1', '2748', '1744', '2'), +('9', '60', '1', '31236', '1494', '2'), +('9', '60', '1', '30361', '1140', '2'), +('9', '60', '1', '5716', '919', '2'), +('9', '60', '2', '2612', '8209', '2'), +('9', '60', '2', '26025', '8209', '2'), +('9', '60', '2', '1630', '3405', '2'), +('9', '60', '2', '29648', '3319', '2'), +('9', '60', '3', '31464', '3088', '2'), +('9', '60', '3', '31233', '2409', '2'), +('9', '60', '3', '25213', '2329', '2'), +('9', '60', '3', '31244', '2097', '2'), +('9', '60', '5', '27266', '9782', '2'), +('9', '60', '5', '31234', '3486', '2'), +('9', '60', '5', '31460', '2414', '2'), +('9', '60', '5', '31318', '2343', '2'), +('9', '60', '8', '31471', '10341', '2'), +('9', '60', '8', '11621', '8182', '2'), +('9', '60', '8', '27261', '7951', '2'), +('9', '60', '8', '22819', '7682', '2'), +('9', '60', '6', '1557', '5261', '2'), +('9', '60', '6', '31472', '4105', '2'), +('9', '60', '6', '31240', '2799', '2'), +('9', '60', '6', '5723', '2485', '2'), +('9', '60', '17', '27261', '7951', '2'), +('9', '60', '17', '27159', '2112', '2'), +('9', '60', '17', '27148', '1843', '2'), +('9', '60', '17', '27137', '1574', '2'), +('9', '60', '7', '5723', '2485', '2'), +('9', '60', '7', '29485', '1695', '2'), +('9', '60', '7', '31381', '1412', '2'), +('9', '60', '7', '31371', '1395', '2'), +('9', '60', '9', '31461', '10145', '2'), +('9', '60', '9', '5723', '2485', '2'), +('9', '60', '9', '31460', '2414', '2'), +('9', '60', '9', '1172', '2234', '2'), +('9', '60', '15', '31231', '2533', '2'), +('9', '60', '15', '25211', '1859', '2'), +('9', '60', '15', '30385', '1464', '2'), +('9', '60', '15', '62373', '1246', '2'), +('9', '60', '20', '31235', '9651', '2'), +('9', '60', '20', '31364', '9646', '2'), +('9', '60', '20', '31334', '9536', '2'), +('9', '60', '20', '31353', '9197', '2'), +('9', '60', '12', '25857', '10431', '2'), +('9', '60', '12', '29177', '5262', '2'), +('9', '60', '12', '2746', '4900', '2'), +('9', '60', '12', '31227', '2863', '2'), +('9', '60', '18', '31371', '1395', '2'), +('9', '60', '18', '31131', '1327', '2'), +('9', '60', '18', '31386', '1101', '2'), +('9', '60', '18', '31332', '1045', '2'), +('9', '60', '19', '24616', '9151', '2'), +('9', '60', '19', '31238', '1828', '2'), +('9', '60', '19', '29455', '1412', '2'), +('9', '60', '19', '1099', '1104', '2'), +('9', '60', '13', '1158', '98338', '2'), +('9', '60', '13', '2509', '95740', '2'), +('9', '60', '13', '11057', '83713', '2'), +('9', '60', '13', '31224', '80113', '2'), +('9', '60', '14', '1158', '64238', '2'), +('9', '60', '14', '1154', '62070', '2'), +('9', '60', '14', '2509', '56572', '2'), +('9', '60', '14', '1136', '54685', '2'), +('9', '60', '11', '31335', '24516', '2'), +('9', '60', '11', '27326', '24489', '2'), +('9', '60', '11', '29433', '24489', '2'), +('9', '60', '11', '27306', '24234', '2'), +('9', '60', '22', '8567', '0', '1'), +('9', '60', '22', '10323', '0', '1'), +('9', '60', '22', '66166', '0', '1'), +('9', '60', '22', '10664', '0', '1'), +('9', '60', '1', '30361', '1140', '1'), +('9', '60', '1', '62234', '1019', '1'), +('9', '60', '1', '5716', '963', '1'), +('9', '60', '1', '10912', '807', '1'), +('9', '60', '2', '1630', '3418', '1'), +('9', '60', '2', '10913', '3020', '1'), +('9', '60', '2', '10142', '1243', '1'), +('9', '60', '2', '11276', '1243', '1'), +('9', '60', '3', '14706', '990', '1'), +('9', '60', '3', '14705', '990', '1'), +('9', '60', '3', '46184', '987', '1'), +('9', '60', '3', '1625', '625', '1'), +('9', '60', '5', '14709', '1156', '1'), +('9', '60', '5', '30362', '1140', '1'), +('9', '60', '5', '30996', '991', '1'), +('9', '60', '5', '10147', '630', '1'), +('9', '60', '8', '11621', '8253', '1'), +('9', '60', '8', '1627', '7871', '1'), +('9', '60', '8', '1619', '6251', '1'), +('9', '60', '8', '5779', '1686', '1'), +('9', '60', '6', '1557', '5286', '1'), +('9', '60', '6', '5723', '2566', '1'), +('9', '60', '6', '5739', '1843', '1'), +('9', '60', '6', '5804', '1382', '1'), +('9', '60', '17', '11623', '1388', '1'), +('9', '60', '17', '4551', '1202', '1'), +('9', '60', '17', '4832', '985', '1'), +('9', '60', '17', '3301', '763', '1'), +('9', '60', '7', '5723', '2566', '1'), +('9', '60', '7', '62046', '1035', '1'), +('9', '60', '7', '5703', '706', '1'), +('9', '60', '7', '28407', '454', '1'), +('9', '60', '9', '5723', '2566', '1'), +('9', '60', '9', '27703', '1578', '1'), +('9', '60', '9', '11584', '997', '1'), +('9', '60', '9', '4834', '801', '1'), +('9', '60', '15', '14707', '1050', '1'), +('9', '60', '15', '5727', '941', '1'), +('9', '60', '15', '62237', '929', '1'), +('9', '60', '15', '10366', '803', '1'), +('9', '60', '20', '11676', '8489', '1'), +('9', '60', '20', '11601', '6791', '1'), +('9', '60', '20', '1620', '6134', '1'), +('9', '60', '20', '1623', '4807', '1'), +('9', '60', '12', '11624', '857', '1'), +('9', '60', '12', '20655', '672', '1'), +('9', '60', '12', '4835', '665', '1'), +('9', '60', '12', '2923', '564', '1'), +('9', '60', '18', '4555', '839', '1'), +('9', '60', '18', '4317', '706', '1'), +('9', '60', '18', '4412', '435', '1'), +('9', '60', '18', '4906', '352', '1'), +('9', '60', '19', '24616', '9381', '1'), +('9', '60', '19', '1534', '999', '1'), +('9', '60', '19', '4837', '973', '1'), +('9', '60', '19', '4920', '923', '1'), +('9', '60', '13', '11057', '84361', '1'), +('9', '60', '13', '62190', '69801', '1'), +('9', '60', '13', '7510', '64689', '1'), +('9', '60', '13', '27704', '62520', '1'), +('9', '60', '14', '6287', '54119', '1'), +('9', '60', '14', '24613', '45675', '1'), +('9', '60', '14', '11057', '45193', '1'), +('9', '60', '14', '10821', '44235', '1'), +('9', '60', '11', '45137', '22736', '1'), +('9', '60', '11', '8325', '14120', '1'), +('9', '60', '11', '8408', '13931', '1'), +('9', '60', '11', '8811', '11040', '1'), +('9', '61', '22', '21805', '0', '3'), +('9', '61', '22', '61948', '0', '3'), +('9', '61', '22', '21807', '0', '3'), +('9', '61', '22', '12425', '0', '3'), +('9', '61', '1', '7945', '8905', '3'), +('9', '61', '1', '26775', '5024', '3'), +('9', '61', '1', '28962', '3771', '3'), +('9', '61', '1', '28945', '3505', '3'), +('9', '61', '2', '26025', '8155', '3'), +('9', '61', '2', '2612', '8155', '3'), +('9', '61', '2', '28995', '3910', '3'), +('9', '61', '2', '1630', '3401', '3'), +('9', '61', '3', '26773', '5183', '3'), +('9', '61', '3', '31464', '2872', '3'), +('9', '61', '3', '28963', '2807', '3'), +('9', '61', '3', '51239', '2313', '3'), +('9', '61', '5', '28885', '10216', '3'), +('9', '61', '5', '27266', '9662', '3'), +('9', '61', '5', '8364', '6428', '3'), +('9', '61', '5', '7868', '4014', '3'), +('9', '61', '8', '26766', '10726', '3'), +('9', '61', '8', '31471', '10077', '3'), +('9', '61', '8', '26765', '10063', '3'), +('9', '61', '8', '11621', '8153', '3'), +('9', '61', '6', '28902', '12108', '3'), +('9', '61', '6', '1557', '5251', '3'), +('9', '61', '6', '30551', '4022', '3'), +('9', '61', '6', '31472', '4010', '3'), +('9', '61', '17', '27261', '7905', '3'), +('9', '61', '17', '28951', '2503', '3'), +('9', '61', '17', '7926', '2275', '3'), +('9', '61', '17', '30564', '2199', '3'), +('9', '61', '7', '26771', '7520', '3'), +('9', '61', '7', '7194', '4506', '3'), +('9', '61', '7', '7868', '4014', '3'), +('9', '61', '7', '5854', '3727', '3'), +('9', '61', '9', '31461', '9968', '3'), +('9', '61', '9', '7868', '4014', '3'), +('9', '61', '9', '26584', '3258', '3'), +('9', '61', '9', '28943', '2916', '3'), +('9', '61', '15', '27950', '7106', '3'), +('9', '61', '15', '26757', '4406', '3'), +('9', '61', '15', '26749', '3508', '3'), +('9', '61', '15', '28939', '2662', '3'), +('9', '61', '20', '28890', '9806', '3'), +('9', '61', '20', '31364', '9468', '3'), +('9', '61', '20', '31334', '9413', '3'), +('9', '61', '20', '27963', '9257', '3'), +('9', '61', '12', '25857', '10312', '3'), +('9', '61', '12', '29177', '5160', '3'), +('9', '61', '12', '2746', '4855', '3'), +('9', '61', '12', '28958', '3574', '3'), +('9', '61', '18', '28965', '3012', '3'), +('9', '61', '18', '26750', '2918', '3'), +('9', '61', '18', '26755', '2510', '3'), +('9', '61', '18', '28932', '2212', '3'), +('9', '61', '19', '30569', '10869', '3'), +('9', '61', '19', '51226', '9671', '3'), +('9', '61', '19', '28888', '9614', '3'), +('9', '61', '19', '24616', '9059', '3'), +('9', '61', '13', '1158', '99559', '3'), +('9', '61', '13', '2509', '97026', '3'), +('9', '61', '13', '28805', '84989', '3'), +('9', '61', '13', '51231', '84927', '3'), +('9', '61', '14', '1158', '64494', '3'), +('9', '61', '14', '1154', '62324', '3'), +('9', '61', '14', '2509', '56743', '3'), +('9', '61', '14', '1136', '54919', '3'), +('9', '61', '11', '30539', '40645', '3'), +('9', '61', '11', '28935', '39211', '3'), +('9', '61', '11', '31335', '27996', '3'), +('9', '61', '11', '7904', '27434', '3'), +('9', '62', '22', '21805', '0', '3'), +('9', '62', '22', '61948', '0', '3'), +('9', '62', '22', '21807', '0', '3'), +('9', '62', '22', '12425', '0', '3'), +('9', '62', '1', '7945', '8905', '3'), +('9', '62', '1', '26775', '5024', '3'), +('9', '62', '1', '28962', '3771', '3'), +('9', '62', '1', '28945', '3505', '3'), +('9', '62', '2', '26025', '8156', '3'), +('9', '62', '2', '2612', '8156', '3'), +('9', '62', '2', '28995', '3910', '3'), +('9', '62', '2', '1630', '3401', '3'), +('9', '62', '3', '26773', '5184', '3'), +('9', '62', '3', '31464', '2872', '3'), +('9', '62', '3', '28963', '2807', '3'), +('9', '62', '3', '51239', '2313', '3'), +('9', '62', '5', '28885', '10216', '3'), +('9', '62', '5', '27266', '9662', '3'), +('9', '62', '5', '8364', '6428', '3'), +('9', '62', '5', '7868', '4014', '3'), +('9', '62', '8', '26766', '10726', '3'), +('9', '62', '8', '31471', '10077', '3'), +('9', '62', '8', '26765', '10063', '3'), +('9', '62', '8', '11621', '8153', '3'), +('9', '62', '6', '28902', '12108', '3'), +('9', '62', '6', '1557', '5251', '3'), +('9', '62', '6', '30551', '4022', '3'), +('9', '62', '6', '31472', '4010', '3'), +('9', '62', '17', '27261', '7905', '3'), +('9', '62', '17', '28951', '2503', '3'), +('9', '62', '17', '7926', '2275', '3'), +('9', '62', '17', '30564', '2199', '3'), +('9', '62', '7', '26771', '7520', '3'), +('9', '62', '7', '7194', '4506', '3'), +('9', '62', '7', '7868', '4014', '3'), +('9', '62', '7', '5854', '3728', '3'), +('9', '62', '9', '31461', '9968', '3'), +('9', '62', '9', '7868', '4014', '3'), +('9', '62', '9', '26584', '3258', '3'), +('9', '62', '9', '28943', '2916', '3'), +('9', '62', '15', '27950', '7106', '3'), +('9', '62', '15', '26757', '4406', '3'), +('9', '62', '15', '26749', '3508', '3'), +('9', '62', '15', '28939', '2662', '3'), +('9', '62', '20', '28890', '9806', '3'), +('9', '62', '20', '31364', '9468', '3'), +('9', '62', '20', '31334', '9413', '3'), +('9', '62', '20', '27963', '9257', '3'), +('9', '62', '12', '25857', '10312', '3'), +('9', '62', '12', '29177', '5160', '3'), +('9', '62', '12', '2746', '4855', '3'), +('9', '62', '12', '28958', '3574', '3'), +('9', '62', '18', '28965', '3012', '3'), +('9', '62', '18', '26750', '2918', '3'), +('9', '62', '18', '26755', '2510', '3'), +('9', '62', '18', '28932', '2212', '3'), +('9', '62', '19', '30569', '10869', '3'), +('9', '62', '19', '51226', '9671', '3'), +('9', '62', '19', '28888', '9614', '3'), +('9', '62', '19', '24616', '9059', '3'), +('9', '62', '13', '1158', '100930', '3'), +('9', '62', '13', '2509', '98424', '3'), +('9', '62', '13', '51231', '86201', '3'), +('9', '62', '13', '28805', '86189', '3'), +('9', '62', '14', '1158', '64888', '3'), +('9', '62', '14', '1154', '62736', '3'), +('9', '62', '14', '2509', '57016', '3'), +('9', '62', '14', '1136', '55294', '3'), +('9', '62', '11', '30539', '40802', '3'), +('9', '62', '11', '28935', '39377', '3'), +('9', '62', '11', '31335', '27996', '3'), +('9', '62', '11', '7904', '27434', '3'), +('9', '63', '22', '21805', '0', '3'), +('9', '63', '22', '61948', '0', '3'), +('9', '63', '22', '21807', '0', '3'), +('9', '63', '22', '12425', '0', '3'), +('9', '63', '1', '7945', '8905', '3'), +('9', '63', '1', '26775', '5024', '3'), +('9', '63', '1', '28962', '3771', '3'), +('9', '63', '1', '28945', '3505', '3'), +('9', '63', '2', '26025', '8156', '3'), +('9', '63', '2', '2612', '8156', '3'), +('9', '63', '2', '28995', '3910', '3'), +('9', '63', '2', '1630', '3401', '3'), +('9', '63', '3', '26773', '5184', '3'), +('9', '63', '3', '31464', '2872', '3'), +('9', '63', '3', '28963', '2807', '3'), +('9', '63', '3', '51239', '2313', '3'), +('9', '63', '5', '28885', '10216', '3'), +('9', '63', '5', '27266', '9662', '3'), +('9', '63', '5', '8364', '6428', '3'), +('9', '63', '5', '7868', '4014', '3'), +('9', '63', '8', '26766', '10726', '3'), +('9', '63', '8', '31471', '10077', '3'), +('9', '63', '8', '26765', '10063', '3'), +('9', '63', '8', '11621', '8153', '3'), +('9', '63', '6', '28902', '12108', '3'), +('9', '63', '6', '1557', '5251', '3'), +('9', '63', '6', '30551', '4022', '3'), +('9', '63', '6', '31472', '4010', '3'), +('9', '63', '17', '27261', '7905', '3'), +('9', '63', '17', '28951', '2503', '3'), +('9', '63', '17', '7926', '2275', '3'), +('9', '63', '17', '30564', '2199', '3'), +('9', '63', '7', '26771', '7520', '3'), +('9', '63', '7', '7194', '4506', '3'), +('9', '63', '7', '7868', '4014', '3'), +('9', '63', '7', '5854', '3728', '3'), +('9', '63', '9', '31461', '9968', '3'), +('9', '63', '9', '7868', '4014', '3'), +('9', '63', '9', '26584', '3259', '3'), +('9', '63', '9', '28943', '2916', '3'), +('9', '63', '15', '27950', '7107', '3'), +('9', '63', '15', '26757', '4406', '3'), +('9', '63', '15', '26749', '3508', '3'), +('9', '63', '15', '28939', '2662', '3'), +('9', '63', '20', '28890', '9806', '3'), +('9', '63', '20', '31364', '9468', '3'), +('9', '63', '20', '31334', '9413', '3'), +('9', '63', '20', '27963', '9257', '3'), +('9', '63', '12', '25857', '10312', '3'), +('9', '63', '12', '29177', '5160', '3'), +('9', '63', '12', '2746', '4855', '3'), +('9', '63', '12', '28958', '3574', '3'), +('9', '63', '18', '28965', '3012', '3'), +('9', '63', '18', '26750', '2918', '3'), +('9', '63', '18', '26755', '2510', '3'), +('9', '63', '18', '28932', '2213', '3'), +('9', '63', '19', '30569', '10869', '3'), +('9', '63', '19', '51226', '9671', '3'), +('9', '63', '19', '28888', '9614', '3'), +('9', '63', '19', '24616', '9059', '3'), +('9', '63', '13', '1158', '102310', '3'), +('9', '63', '13', '2509', '99833', '3'), +('9', '63', '13', '51231', '87487', '3'), +('9', '63', '13', '28805', '87400', '3'), +('9', '63', '14', '1158', '65283', '3'), +('9', '63', '14', '1154', '63149', '3'), +('9', '63', '14', '2509', '57290', '3'), +('9', '63', '14', '1136', '55669', '3'), +('9', '63', '11', '30539', '40960', '3'), +('9', '63', '11', '28935', '39542', '3'), +('9', '63', '11', '31335', '27996', '3'), +('9', '63', '11', '7904', '27434', '3'), +('9', '64', '22', '21805', '0', '3'), +('9', '64', '22', '61948', '0', '3'), +('9', '64', '22', '21807', '0', '3'), +('9', '64', '22', '12425', '0', '3'), +('9', '64', '1', '7945', '8905', '3'), +('9', '64', '1', '26775', '5024', '3'), +('9', '64', '1', '28962', '3771', '3'), +('9', '64', '1', '28945', '3505', '3'), +('9', '64', '2', '26025', '8156', '3'), +('9', '64', '2', '2612', '8156', '3'), +('9', '64', '2', '28995', '3910', '3'), +('9', '64', '2', '1630', '3401', '3'), +('9', '64', '3', '26773', '5184', '3'), +('9', '64', '3', '31464', '2872', '3'), +('9', '64', '3', '28963', '2807', '3'), +('9', '64', '3', '51239', '2313', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '64', '5', '28885', '10216', '3'), +('9', '64', '5', '27266', '9662', '3'), +('9', '64', '5', '8364', '6428', '3'), +('9', '64', '5', '7868', '4014', '3'), +('9', '64', '8', '26766', '10726', '3'), +('9', '64', '8', '31471', '10077', '3'), +('9', '64', '8', '26765', '10063', '3'), +('9', '64', '8', '11621', '8153', '3'), +('9', '64', '6', '28902', '12108', '3'), +('9', '64', '6', '1557', '5251', '3'), +('9', '64', '6', '30551', '4022', '3'), +('9', '64', '6', '31472', '4010', '3'), +('9', '64', '17', '27261', '7905', '3'), +('9', '64', '17', '28951', '2503', '3'), +('9', '64', '17', '7926', '2275', '3'), +('9', '64', '17', '30564', '2200', '3'), +('9', '64', '7', '26771', '7521', '3'), +('9', '64', '7', '7194', '4506', '3'), +('9', '64', '7', '7868', '4014', '3'), +('9', '64', '7', '5854', '3728', '3'), +('9', '64', '9', '31461', '9968', '3'), +('9', '64', '9', '7868', '4014', '3'), +('9', '64', '9', '26584', '3259', '3'), +('9', '64', '9', '28943', '2916', '3'), +('9', '64', '15', '27950', '7107', '3'), +('9', '64', '15', '26757', '4406', '3'), +('9', '64', '15', '26749', '3509', '3'), +('9', '64', '15', '28939', '2662', '3'), +('9', '64', '20', '28890', '9806', '3'), +('9', '64', '20', '31364', '9468', '3'), +('9', '64', '20', '31334', '9413', '3'), +('9', '64', '20', '27963', '9257', '3'), +('9', '64', '12', '25857', '10312', '3'), +('9', '64', '12', '29177', '5160', '3'), +('9', '64', '12', '2746', '4855', '3'), +('9', '64', '12', '28958', '3574', '3'), +('9', '64', '18', '28965', '3012', '3'), +('9', '64', '18', '26750', '2918', '3'), +('9', '64', '18', '26755', '2510', '3'), +('9', '64', '18', '28932', '2213', '3'), +('9', '64', '19', '30569', '10869', '3'), +('9', '64', '19', '51226', '9671', '3'), +('9', '64', '19', '28888', '9615', '3'), +('9', '64', '19', '24616', '9059', '3'), +('9', '64', '13', '1158', '103699', '3'), +('9', '64', '13', '2509', '101252', '3'), +('9', '64', '13', '51231', '88786', '3'), +('9', '64', '13', '28805', '88623', '3'), +('9', '64', '14', '1158', '65677', '3'), +('9', '64', '14', '1154', '63561', '3'), +('9', '64', '14', '2509', '57563', '3'), +('9', '64', '14', '1136', '56044', '3'), +('9', '64', '11', '30539', '41117', '3'), +('9', '64', '11', '28935', '39707', '3'), +('9', '64', '11', '31335', '27996', '3'), +('9', '64', '11', '7904', '27434', '3'), +('9', '65', '22', '21805', '0', '7'), +('9', '65', '22', '61948', '0', '7'), +('9', '65', '22', '66397', '0', '7'), +('9', '65', '22', '21807', '0', '7'), +('9', '65', '1', '68949', '15217', '7'), +('9', '65', '1', '7125', '13612', '7'), +('9', '65', '1', '32106', '11331', '7'), +('9', '65', '1', '69166', '9535', '7'), +('9', '65', '2', '28605', '13577', '7'), +('9', '65', '2', '28648', '13557', '7'), +('9', '65', '2', '26025', '8156', '7'), +('9', '65', '2', '2612', '8156', '7'), +('9', '65', '3', '68753', '8077', '7'), +('9', '65', '3', '69157', '8042', '7'), +('9', '65', '3', '26982', '7729', '7'), +('9', '65', '3', '69069', '7653', '7'), +('9', '65', '5', '28885', '10216', '7'), +('9', '65', '5', '68808', '10080', '7'), +('9', '65', '5', '7769', '9907', '7'), +('9', '65', '5', '27266', '9662', '7'), +('9', '65', '8', '69064', '18028', '7'), +('9', '65', '8', '69165', '17787', '7'), +('9', '65', '8', '69072', '14715', '7'), +('9', '65', '8', '26766', '10726', '7'), +('9', '65', '6', '68757', '16916', '7'), +('9', '65', '6', '13674', '12812', '7'), +('9', '65', '6', '28902', '12108', '7'), +('9', '65', '6', '19144', '10765', '7'), +('9', '65', '17', '69151', '11199', '7'), +('9', '65', '17', '68780', '8173', '7'), +('9', '65', '17', '27261', '7905', '7'), +('9', '65', '17', '14961', '6844', '7'), +('9', '65', '7', '68706', '13614', '7'), +('9', '65', '7', '16097', '10987', '7'), +('9', '65', '7', '26771', '7521', '7'), +('9', '65', '7', '69080', '7217', '7'), +('9', '65', '9', '68766', '12167', '7'), +('9', '65', '9', '11096', '11359', '7'), +('9', '65', '9', '16097', '10987', '7'), +('9', '65', '9', '31461', '9968', '7'), +('9', '65', '15', '9959', '10764', '7'), +('9', '65', '15', '68111', '10535', '7'), +('9', '65', '15', '69160', '8437', '7'), +('9', '65', '15', '69070', '8332', '7'), +('9', '65', '20', '16156', '17157', '7'), +('9', '65', '20', '16097', '10987', '7'), +('9', '65', '20', '69134', '10832', '7'), +('9', '65', '20', '15873', '10673', '7'), +('9', '65', '12', '25857', '10312', '7'), +('9', '65', '12', '28246', '7399', '7'), +('9', '65', '12', '27000', '6243', '7'), +('9', '65', '12', '12598', '5988', '7'), +('9', '65', '18', '69147', '10096', '7'), +('9', '65', '18', '68971', '9183', '7'), +('9', '65', '18', '16717', '7833', '7'), +('9', '65', '18', '68749', '7410', '7'), +('9', '65', '19', '30569', '10869', '7'), +('9', '65', '19', '19094', '10781', '7'), +('9', '65', '19', '51226', '9671', '7'), +('9', '65', '19', '28888', '9615', '7'), +('9', '65', '13', '69115', '159978', '7'), +('9', '65', '13', '69052', '140250', '7'), +('9', '65', '13', '68943', '121685', '7'), +('9', '65', '13', '68770', '115637', '7'), +('9', '65', '14', '69052', '140250', '7'), +('9', '65', '14', '22998', '115321', '7'), +('9', '65', '14', '68419', '97411', '7'), +('9', '65', '14', '69115', '86025', '7'), +('9', '65', '11', '69054', '57040', '7'), +('9', '65', '11', '29596', '42854', '7'), +('9', '65', '11', '30539', '42062', '7'), +('9', '65', '11', '28935', '40697', '7'), +('9', '65', '22', '21805', '0', '6'), +('9', '65', '22', '61948', '0', '6'), +('9', '65', '22', '66397', '0', '6'), +('9', '65', '22', '21807', '0', '6'), +('9', '65', '1', '7125', '13612', '6'), +('9', '65', '1', '32106', '11331', '6'), +('9', '65', '1', '7945', '8905', '6'), +('9', '65', '1', '16255', '6744', '6'), +('9', '65', '2', '28605', '13577', '6'), +('9', '65', '2', '28648', '13557', '6'), +('9', '65', '2', '26025', '8156', '6'), +('9', '65', '2', '2612', '8156', '6'), +('9', '65', '3', '26982', '7729', '6'), +('9', '65', '3', '29174', '6281', '6'), +('9', '65', '3', '12592', '6186', '6'), +('9', '65', '3', '9480', '5926', '6'), +('9', '65', '5', '28885', '10216', '6'), +('9', '65', '5', '7769', '9907', '6'), +('9', '65', '5', '27266', '9662', '6'), +('9', '65', '5', '8785', '9605', '6'), +('9', '65', '8', '26766', '10726', '6'), +('9', '65', '8', '15803', '10257', '6'), +('9', '65', '8', '31471', '10077', '6'), +('9', '65', '8', '26765', '10063', '6'), +('9', '65', '6', '13674', '12812', '6'), +('9', '65', '6', '28902', '12108', '6'), +('9', '65', '6', '19144', '10765', '6'), +('9', '65', '6', '13672', '6199', '6'), +('9', '65', '17', '27261', '7905', '6'), +('9', '65', '17', '14961', '6844', '6'), +('9', '65', '17', '47648', '5454', '6'), +('9', '65', '17', '69403', '5332', '6'), +('9', '65', '7', '16097', '10987', '6'), +('9', '65', '7', '26771', '7521', '6'), +('9', '65', '7', '68197', '6373', '6'), +('9', '65', '7', '11432', '6280', '6'), +('9', '65', '9', '11096', '11359', '6'), +('9', '65', '9', '16097', '10987', '6'), +('9', '65', '9', '31461', '9968', '6'), +('9', '65', '9', '28666', '6208', '6'), +('9', '65', '15', '9959', '10764', '6'), +('9', '65', '15', '68111', '10535', '6'), +('9', '65', '15', '27950', '7107', '6'), +('9', '65', '15', '69389', '6385', '6'), +('9', '65', '20', '16156', '17157', '6'), +('9', '65', '20', '16097', '10987', '6'), +('9', '65', '20', '15873', '10673', '6'), +('9', '65', '20', '28890', '9806', '6'), +('9', '65', '12', '25857', '10312', '6'), +('9', '65', '12', '28246', '7399', '6'), +('9', '65', '12', '27000', '6243', '6'), +('9', '65', '12', '12598', '5988', '6'), +('9', '65', '18', '16717', '7833', '6'), +('9', '65', '18', '28651', '6414', '6'), +('9', '65', '18', '28965', '3012', '6'), +('9', '65', '18', '26750', '2918', '6'), +('9', '65', '19', '30569', '10869', '6'), +('9', '65', '19', '19094', '10781', '6'), +('9', '65', '19', '51226', '9671', '6'), +('9', '65', '19', '28888', '9615', '6'), +('9', '65', '13', '22998', '115321', '6'), +('9', '65', '13', '24695', '114920', '6'), +('9', '65', '13', '24602', '114623', '6'), +('9', '65', '13', '24692', '113619', '6'), +('9', '65', '14', '22998', '115321', '6'), +('9', '65', '14', '22986', '68667', '6'), +('9', '65', '14', '1158', '68044', '6'), +('9', '65', '14', '1154', '66036', '6'), +('9', '65', '11', '29596', '42854', '6'), +('9', '65', '11', '30539', '42062', '6'), +('9', '65', '11', '28935', '40697', '6'), +('9', '65', '11', '55224', '40406', '6'), +('9', '65', '22', '61948', '0', '5'), +('9', '65', '22', '66397', '0', '5'), +('9', '65', '22', '62787', '0', '5'), +('9', '65', '22', '21805', '0', '5'), +('9', '65', '1', '7125', '13612', '5'), +('9', '65', '1', '32106', '11331', '5'), +('9', '65', '1', '7945', '8905', '5'), +('9', '65', '1', '16255', '6744', '5'), +('9', '65', '2', '28605', '13577', '5'), +('9', '65', '2', '28648', '13557', '5'), +('9', '65', '2', '2612', '8156', '5'), +('9', '65', '2', '26025', '8156', '5'), +('9', '65', '3', '26982', '7729', '5'), +('9', '65', '3', '29174', '6281', '5'), +('9', '65', '3', '12592', '6186', '5'), +('9', '65', '3', '9480', '5926', '5'), +('9', '65', '5', '28885', '10216', '5'), +('9', '65', '5', '7769', '9907', '5'), +('9', '65', '5', '27266', '9662', '5'), +('9', '65', '5', '8785', '9605', '5'), +('9', '65', '8', '26766', '10726', '5'), +('9', '65', '8', '15803', '10257', '5'), +('9', '65', '8', '31471', '10077', '5'), +('9', '65', '8', '26765', '10063', '5'), +('9', '65', '6', '13674', '12812', '5'), +('9', '65', '6', '28902', '12108', '5'), +('9', '65', '6', '19144', '10765', '5'), +('9', '65', '6', '13672', '6199', '5'), +('9', '65', '17', '27261', '7905', '5'), +('9', '65', '17', '14961', '6844', '5'), +('9', '65', '17', '47648', '5454', '5'), +('9', '65', '17', '14962', '3264', '5'), +('9', '65', '7', '16097', '10987', '5'), +('9', '65', '7', '26771', '7521', '5'), +('9', '65', '7', '68197', '6373', '5'), +('9', '65', '7', '11432', '6280', '5'), +('9', '65', '9', '11096', '11359', '5'), +('9', '65', '9', '16097', '10987', '5'), +('9', '65', '9', '31461', '9968', '5'), +('9', '65', '9', '28666', '6208', '5'), +('9', '65', '15', '9959', '10764', '5'), +('9', '65', '15', '27950', '7107', '5'), +('9', '65', '15', '69389', '6385', '5'), +('9', '65', '15', '10654', '5191', '5'), +('9', '65', '20', '16156', '17157', '5'), +('9', '65', '20', '16097', '10987', '5'), +('9', '65', '20', '15873', '10673', '5'), +('9', '65', '20', '28890', '9806', '5'), +('9', '65', '12', '25857', '10312', '5'), +('9', '65', '12', '28246', '7399', '5'), +('9', '65', '12', '27000', '6243', '5'), +('9', '65', '12', '12598', '5988', '5'), +('9', '65', '18', '16717', '7833', '5'), +('9', '65', '18', '28651', '6414', '5'), +('9', '65', '18', '28965', '3012', '5'), +('9', '65', '18', '26750', '2918', '5'), +('9', '65', '19', '30569', '10869', '5'), +('9', '65', '19', '19094', '10781', '5'), +('9', '65', '19', '51226', '9671', '5'), +('9', '65', '19', '28888', '9615', '5'), +('9', '65', '13', '22998', '115321', '5'), +('9', '65', '13', '24695', '114920', '5'), +('9', '65', '13', '24602', '114623', '5'), +('9', '65', '13', '24692', '113619', '5'), +('9', '65', '14', '22998', '115321', '5'), +('9', '65', '14', '22986', '68667', '5'), +('9', '65', '14', '1158', '68044', '5'), +('9', '65', '14', '1154', '66036', '5'), +('9', '65', '11', '29596', '42854', '5'), +('9', '65', '11', '30539', '42062', '5'), +('9', '65', '11', '28935', '40697', '5'), +('9', '65', '11', '55224', '40406', '5'), +('9', '65', '22', '61948', '0', '4'), +('9', '65', '22', '66397', '0', '4'), +('9', '65', '22', '62787', '0', '4'), +('9', '65', '22', '21805', '0', '4'), +('9', '65', '1', '7125', '13612', '4'), +('9', '65', '1', '32106', '11331', '4'), +('9', '65', '1', '7945', '8905', '4'), +('9', '65', '1', '16255', '6744', '4'), +('9', '65', '2', '28605', '13577', '4'), +('9', '65', '2', '28648', '13557', '4'), +('9', '65', '2', '2612', '8156', '4'), +('9', '65', '2', '26025', '8156', '4'), +('9', '65', '3', '26982', '7729', '4'), +('9', '65', '3', '29174', '6281', '4'), +('9', '65', '3', '12592', '6186', '4'), +('9', '65', '3', '9480', '5926', '4'), +('9', '65', '5', '28885', '10216', '4'), +('9', '65', '5', '7769', '9907', '4'), +('9', '65', '5', '27266', '9662', '4'), +('9', '65', '5', '8785', '9605', '4'), +('9', '65', '8', '26766', '10726', '4'), +('9', '65', '8', '15803', '10257', '4'), +('9', '65', '8', '31471', '10077', '4'), +('9', '65', '8', '26765', '10063', '4'), +('9', '65', '6', '13674', '12812', '4'), +('9', '65', '6', '28902', '12108', '4'), +('9', '65', '6', '19144', '10765', '4'), +('9', '65', '6', '13672', '6199', '4'), +('9', '65', '17', '27261', '7905', '4'), +('9', '65', '17', '14961', '6844', '4'), +('9', '65', '17', '47648', '5454', '4'), +('9', '65', '17', '14962', '3264', '4'), +('9', '65', '7', '16097', '10987', '4'), +('9', '65', '7', '26771', '7521', '4'), +('9', '65', '7', '68197', '6373', '4'), +('9', '65', '7', '11432', '6280', '4'), +('9', '65', '9', '11096', '11359', '4'), +('9', '65', '9', '16097', '10987', '4'), +('9', '65', '9', '31461', '9968', '4'), +('9', '65', '9', '28666', '6208', '4'), +('9', '65', '15', '9959', '10764', '4'), +('9', '65', '15', '27950', '7107', '4'), +('9', '65', '15', '69389', '6385', '4'), +('9', '65', '15', '10654', '5191', '4'), +('9', '65', '20', '16156', '17157', '4'), +('9', '65', '20', '16097', '10987', '4'), +('9', '65', '20', '15873', '10673', '4'), +('9', '65', '20', '28890', '9806', '4'), +('9', '65', '12', '25857', '10312', '4'), +('9', '65', '12', '28246', '7399', '4'), +('9', '65', '12', '27000', '6243', '4'), +('9', '65', '12', '12598', '5988', '4'), +('9', '65', '18', '16717', '7833', '4'), +('9', '65', '18', '28651', '6414', '4'), +('9', '65', '18', '28965', '3012', '4'), +('9', '65', '18', '26750', '2918', '4'), +('9', '65', '19', '30569', '10869', '4'), +('9', '65', '19', '19094', '10781', '4'), +('9', '65', '19', '51226', '9671', '4'), +('9', '65', '19', '28888', '9615', '4'), +('9', '65', '13', '22998', '115321', '4'), +('9', '65', '13', '24695', '114920', '4'), +('9', '65', '13', '24602', '114623', '4'), +('9', '65', '13', '24692', '113619', '4'), +('9', '65', '14', '22998', '115321', '4'), +('9', '65', '14', '22986', '68667', '4'), +('9', '65', '14', '1158', '68044', '4'), +('9', '65', '14', '1154', '66036', '4'), +('9', '65', '11', '29596', '42854', '4'), +('9', '65', '11', '30539', '42062', '4'), +('9', '65', '11', '28935', '40697', '4'), +('9', '65', '11', '29598', '39856', '4'), +('9', '66', '22', '21805', '0', '7'), +('9', '66', '22', '61948', '0', '7'), +('9', '66', '22', '66397', '0', '7'), +('9', '66', '22', '21807', '0', '7'), +('9', '66', '1', '68949', '15217', '7'), +('9', '66', '1', '7125', '13612', '7'), +('9', '66', '1', '32106', '11331', '7'), +('9', '66', '1', '69166', '9535', '7'), +('9', '66', '2', '28605', '13577', '7'), +('9', '66', '2', '28648', '13557', '7'), +('9', '66', '2', '26025', '8156', '7'), +('9', '66', '2', '2612', '8156', '7'), +('9', '66', '3', '68753', '8077', '7'), +('9', '66', '3', '69157', '8042', '7'), +('9', '66', '3', '26982', '7729', '7'), +('9', '66', '3', '69069', '7653', '7'), +('9', '66', '5', '28885', '10216', '7'), +('9', '66', '5', '68808', '10080', '7'), +('9', '66', '5', '7769', '9907', '7'), +('9', '66', '5', '27266', '9662', '7'), +('9', '66', '8', '69064', '18028', '7'), +('9', '66', '8', '69165', '17787', '7'), +('9', '66', '8', '69072', '14716', '7'), +('9', '66', '8', '26766', '10726', '7'), +('9', '66', '6', '68757', '16916', '7'), +('9', '66', '6', '13674', '12813', '7'), +('9', '66', '6', '28902', '12108', '7'), +('9', '66', '6', '19144', '10765', '7'), +('9', '66', '17', '69151', '11200', '7'), +('9', '66', '17', '68780', '8174', '7'), +('9', '66', '17', '27261', '7905', '7'), +('9', '66', '17', '14961', '6845', '7'), +('9', '66', '7', '68706', '13614', '7'), +('9', '66', '7', '16097', '10987', '7'), +('9', '66', '7', '26771', '7521', '7'), +('9', '66', '7', '69080', '7217', '7'), +('9', '66', '9', '68766', '12167', '7'), +('9', '66', '9', '11096', '11360', '7'), +('9', '66', '9', '16097', '10987', '7'), +('9', '66', '9', '31461', '9968', '7'), +('9', '66', '15', '9959', '10764', '7'), +('9', '66', '15', '68111', '10535', '7'), +('9', '66', '15', '69160', '8437', '7'), +('9', '66', '15', '69070', '8332', '7'), +('9', '66', '20', '16156', '17157', '7'), +('9', '66', '20', '16097', '10987', '7'), +('9', '66', '20', '69134', '10832', '7'), +('9', '66', '20', '15873', '10673', '7'), +('9', '66', '12', '25857', '10312', '7'), +('9', '66', '12', '28246', '7399', '7'), +('9', '66', '12', '27000', '6243', '7'), +('9', '66', '12', '12598', '5988', '7'), +('9', '66', '18', '69147', '10097', '7'), +('9', '66', '18', '68971', '9183', '7'), +('9', '66', '18', '16717', '7833', '7'), +('9', '66', '18', '68749', '7410', '7'), +('9', '66', '19', '30569', '10869', '7'), +('9', '66', '19', '19094', '10782', '7'), +('9', '66', '19', '51226', '9671', '7'), +('9', '66', '19', '28888', '9615', '7'), +('9', '66', '13', '69115', '162182', '7'), +('9', '66', '13', '69052', '141375', '7'), +('9', '66', '13', '68943', '123395', '7'), +('9', '66', '13', '68770', '117269', '7'), +('9', '66', '14', '69052', '141375', '7'), +('9', '66', '14', '22998', '116278', '7'), +('9', '66', '14', '68419', '98349', '7'), +('9', '66', '14', '69115', '86287', '7'), +('9', '66', '11', '69054', '57340', '7'), +('9', '66', '11', '29596', '43019', '7'), +('9', '66', '11', '30539', '42220', '7'), +('9', '66', '11', '28935', '40862', '7'), +('9', '67', '22', '21805', '0', '7'), +('9', '67', '22', '61948', '0', '7'), +('9', '67', '22', '66397', '0', '7'), +('9', '67', '22', '21807', '0', '7'), +('9', '67', '1', '68949', '15217', '7'), +('9', '67', '1', '7125', '13612', '7'), +('9', '67', '1', '32106', '11331', '7'), +('9', '67', '1', '69166', '9535', '7'), +('9', '67', '2', '28605', '13578', '7'), +('9', '67', '2', '28648', '13557', '7'), +('9', '67', '2', '26025', '8156', '7'), +('9', '67', '2', '2612', '8156', '7'), +('9', '67', '3', '68753', '8078', '7'), +('9', '67', '3', '69157', '8042', '7'), +('9', '67', '3', '26982', '7730', '7'), +('9', '67', '3', '69069', '7654', '7'), +('9', '67', '5', '28885', '10216', '7'), +('9', '67', '5', '68808', '10080', '7'), +('9', '67', '5', '7769', '9907', '7'), +('9', '67', '5', '27266', '9663', '7'), +('9', '67', '8', '69064', '18028', '7'), +('9', '67', '8', '69165', '17788', '7'), +('9', '67', '8', '69072', '14716', '7'), +('9', '67', '8', '26766', '10727', '7'), +('9', '67', '6', '68757', '16916', '7'), +('9', '67', '6', '13674', '12813', '7'), +('9', '67', '6', '28902', '12109', '7'), +('9', '67', '6', '19144', '10766', '7'), +('9', '67', '17', '69151', '11200', '7'), +('9', '67', '17', '68780', '8174', '7'), +('9', '67', '17', '27261', '7905', '7'), +('9', '67', '17', '14961', '6845', '7'), +('9', '67', '7', '68706', '13614', '7'), +('9', '67', '7', '16097', '10988', '7'), +('9', '67', '7', '26771', '7521', '7'), +('9', '67', '7', '69080', '7217', '7'), +('9', '67', '9', '68766', '12167', '7'), +('9', '67', '9', '11096', '11360', '7'), +('9', '67', '9', '16097', '10988', '7'), +('9', '67', '9', '31461', '9968', '7'), +('9', '67', '15', '9959', '10764', '7'), +('9', '67', '15', '68111', '10535', '7'), +('9', '67', '15', '69160', '8437', '7'), +('9', '67', '15', '69070', '8332', '7'), +('9', '67', '20', '16156', '17157', '7'), +('9', '67', '20', '16097', '10988', '7'), +('9', '67', '20', '69134', '10832', '7'), +('9', '67', '20', '15873', '10673', '7'), +('9', '67', '12', '25857', '10312', '7'), +('9', '67', '12', '28246', '7399', '7'), +('9', '67', '12', '27000', '6243', '7'), +('9', '67', '12', '12598', '5988', '7'), +('9', '67', '18', '69147', '10097', '7'), +('9', '67', '18', '68971', '9183', '7'), +('9', '67', '18', '16717', '7833', '7'), +('9', '67', '18', '68749', '7410', '7'), +('9', '67', '19', '30569', '10869', '7'), +('9', '67', '19', '19094', '10782', '7'), +('9', '67', '19', '51226', '9671', '7'), +('9', '67', '19', '28888', '9615', '7'), +('9', '67', '13', '69115', '164405', '7'), +('9', '67', '13', '69052', '142500', '7'), +('9', '67', '13', '68943', '125121', '7'), +('9', '67', '13', '68770', '118917', '7'), +('9', '67', '14', '69052', '142500', '7'), +('9', '67', '14', '22998', '117234', '7'), +('9', '67', '14', '68419', '99286', '7'), +('9', '67', '14', '69115', '86550', '7'), +('9', '67', '11', '69054', '57640', '7'), +('9', '67', '11', '29596', '43184', '7'), +('9', '67', '11', '30539', '42378', '7'), +('9', '67', '11', '28935', '41028', '7'), +('9', '68', '22', '21805', '0', '7'), +('9', '68', '22', '61948', '0', '7'), +('9', '68', '22', '66397', '0', '7'), +('9', '68', '22', '21807', '0', '7'), +('9', '68', '1', '68949', '15218', '7'), +('9', '68', '1', '7125', '13612', '7'), +('9', '68', '1', '32106', '11331', '7'), +('9', '68', '1', '69166', '9535', '7'), +('9', '68', '2', '28605', '13578', '7'), +('9', '68', '2', '28648', '13557', '7'), +('9', '68', '2', '26025', '8156', '7'), +('9', '68', '2', '2612', '8156', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '68', '3', '68753', '8078', '7'), +('9', '68', '3', '69157', '8043', '7'), +('9', '68', '3', '26982', '7730', '7'), +('9', '68', '3', '69069', '7654', '7'), +('9', '68', '5', '28885', '10216', '7'), +('9', '68', '5', '68808', '10080', '7'), +('9', '68', '5', '7769', '9907', '7'), +('9', '68', '5', '27266', '9663', '7'), +('9', '68', '8', '69064', '18028', '7'), +('9', '68', '8', '69165', '17788', '7'), +('9', '68', '8', '69072', '14716', '7'), +('9', '68', '8', '26766', '10727', '7'), +('9', '68', '6', '68757', '16917', '7'), +('9', '68', '6', '13674', '12813', '7'), +('9', '68', '6', '28902', '12109', '7'), +('9', '68', '6', '19144', '10766', '7'), +('9', '68', '17', '69151', '11200', '7'), +('9', '68', '17', '68780', '8174', '7'), +('9', '68', '17', '27261', '7905', '7'), +('9', '68', '17', '14961', '6845', '7'), +('9', '68', '7', '68706', '13615', '7'), +('9', '68', '7', '16097', '10988', '7'), +('9', '68', '7', '26771', '7521', '7'), +('9', '68', '7', '69080', '7217', '7'), +('9', '68', '9', '68766', '12167', '7'), +('9', '68', '9', '11096', '11360', '7'), +('9', '68', '9', '16097', '10988', '7'), +('9', '68', '9', '31461', '9969', '7'), +('9', '68', '15', '9959', '10764', '7'), +('9', '68', '15', '68111', '10535', '7'), +('9', '68', '15', '69160', '8437', '7'), +('9', '68', '15', '69070', '8332', '7'), +('9', '68', '20', '16156', '17158', '7'), +('9', '68', '20', '16097', '10988', '7'), +('9', '68', '20', '69134', '10832', '7'), +('9', '68', '20', '15873', '10673', '7'), +('9', '68', '12', '25857', '10312', '7'), +('9', '68', '12', '28246', '7399', '7'), +('9', '68', '12', '27000', '6243', '7'), +('9', '68', '12', '12598', '5988', '7'), +('9', '68', '18', '69147', '10097', '7'), +('9', '68', '18', '68971', '9183', '7'), +('9', '68', '18', '16717', '7833', '7'), +('9', '68', '18', '68749', '7410', '7'), +('9', '68', '19', '30569', '10869', '7'), +('9', '68', '19', '19094', '10782', '7'), +('9', '68', '19', '51226', '9671', '7'), +('9', '68', '19', '28888', '9615', '7'), +('9', '68', '13', '69115', '166646', '7'), +('9', '68', '13', '69052', '143625', '7'), +('9', '68', '13', '68943', '126863', '7'), +('9', '68', '13', '68770', '120580', '7'), +('9', '68', '14', '69052', '143625', '7'), +('9', '68', '14', '22998', '118190', '7'), +('9', '68', '14', '68419', '100224', '7'), +('9', '68', '14', '69115', '86813', '7'), +('9', '68', '11', '69054', '57940', '7'), +('9', '68', '11', '29596', '43349', '7'), +('9', '68', '11', '30539', '42535', '7'), +('9', '68', '11', '28935', '41193', '7'), +('9', '69', '22', '21805', '0', '7'), +('9', '69', '22', '61948', '0', '7'), +('9', '69', '22', '66397', '0', '7'), +('9', '69', '22', '21807', '0', '7'), +('9', '69', '1', '68949', '15218', '7'), +('9', '69', '1', '7125', '13612', '7'), +('9', '69', '1', '32106', '11332', '7'), +('9', '69', '1', '69166', '9535', '7'), +('9', '69', '2', '28605', '13578', '7'), +('9', '69', '2', '28648', '13557', '7'), +('9', '69', '2', '26025', '8156', '7'), +('9', '69', '2', '2612', '8156', '7'), +('9', '69', '3', '68753', '8078', '7'), +('9', '69', '3', '69157', '8043', '7'), +('9', '69', '3', '26982', '7730', '7'), +('9', '69', '3', '69069', '7654', '7'), +('9', '69', '5', '28885', '10216', '7'), +('9', '69', '5', '68808', '10080', '7'), +('9', '69', '5', '7769', '9907', '7'), +('9', '69', '5', '27266', '9663', '7'), +('9', '69', '8', '69064', '18028', '7'), +('9', '69', '8', '69165', '17788', '7'), +('9', '69', '8', '69072', '14716', '7'), +('9', '69', '8', '26766', '10727', '7'), +('9', '69', '6', '68757', '16917', '7'), +('9', '69', '6', '13674', '12813', '7'), +('9', '69', '6', '28902', '12109', '7'), +('9', '69', '6', '19144', '10766', '7'), +('9', '69', '17', '69151', '11200', '7'), +('9', '69', '17', '68780', '8174', '7'), +('9', '69', '17', '27261', '7905', '7'), +('9', '69', '17', '14961', '6845', '7'), +('9', '69', '7', '68706', '13615', '7'), +('9', '69', '7', '16097', '10988', '7'), +('9', '69', '7', '26771', '7521', '7'), +('9', '69', '7', '69080', '7218', '7'), +('9', '69', '9', '68766', '12167', '7'), +('9', '69', '9', '11096', '11360', '7'), +('9', '69', '9', '16097', '10988', '7'), +('9', '69', '9', '31461', '9969', '7'), +('9', '69', '15', '9959', '10764', '7'), +('9', '69', '15', '68111', '10535', '7'), +('9', '69', '15', '69160', '8437', '7'), +('9', '69', '15', '69070', '8332', '7'), +('9', '69', '20', '16156', '17158', '7'), +('9', '69', '20', '16097', '10988', '7'), +('9', '69', '20', '69134', '10833', '7'), +('9', '69', '20', '15873', '10673', '7'), +('9', '69', '12', '25857', '10312', '7'), +('9', '69', '12', '28246', '7399', '7'), +('9', '69', '12', '27000', '6243', '7'), +('9', '69', '12', '12598', '5988', '7'), +('9', '69', '18', '69147', '10097', '7'), +('9', '69', '18', '68971', '9183', '7'), +('9', '69', '18', '16717', '7833', '7'), +('9', '69', '18', '68749', '7410', '7'), +('9', '69', '19', '30569', '10869', '7'), +('9', '69', '19', '19094', '10782', '7'), +('9', '69', '19', '51226', '9671', '7'), +('9', '69', '19', '28888', '9615', '7'), +('9', '69', '13', '69115', '168905', '7'), +('9', '69', '13', '69052', '144750', '7'), +('9', '69', '13', '68943', '128620', '7'), +('9', '69', '13', '68770', '122258', '7'), +('9', '69', '14', '69052', '144750', '7'), +('9', '69', '14', '22998', '119147', '7'), +('9', '69', '14', '68419', '101161', '7'), +('9', '69', '14', '69115', '87075', '7'), +('9', '69', '11', '69054', '58240', '7'), +('9', '69', '11', '29596', '43514', '7'), +('9', '69', '11', '30539', '42693', '7'), +('9', '69', '11', '28935', '41358', '7'), +('9', '70', '22', '12425', '0', '11'), +('9', '70', '22', '21807', '0', '11'), +('9', '70', '22', '21805', '0', '11'), +('9', '70', '22', '24071', '0', '11'), +('9', '70', '1', '83594', '18222', '11'), +('9', '70', '1', '39276', '17920', '11'), +('9', '70', '1', '71624', '15617', '11'), +('9', '70', '1', '68949', '15218', '11'), +('9', '70', '2', '70909', '18006', '11'), +('9', '70', '2', '28605', '13578', '11'), +('9', '70', '2', '28648', '13557', '11'), +('9', '70', '2', '83561', '9411', '11'), +('9', '70', '3', '39218', '16941', '11'), +('9', '70', '3', '47245', '14692', '11'), +('9', '70', '3', '39361', '10992', '11'), +('9', '70', '3', '70979', '9966', '11'), +('9', '70', '5', '39349', '16825', '11'), +('9', '70', '5', '47273', '10873', '11'), +('9', '70', '5', '28885', '10216', '11'), +('9', '70', '5', '39262', '10144', '11'), +('9', '70', '8', '69064', '18028', '11'), +('9', '70', '8', '69165', '17788', '11'), +('9', '70', '8', '39330', '15609', '11'), +('9', '70', '8', '69072', '14716', '11'), +('9', '70', '6', '70717', '17097', '11'), +('9', '70', '6', '68757', '16917', '11'), +('9', '70', '6', '83530', '15290', '11'), +('9', '70', '6', '13674', '12813', '11'), +('9', '70', '17', '83604', '20909', '11'), +('9', '70', '17', '70914', '12980', '11'), +('9', '70', '17', '69151', '11200', '11'), +('9', '70', '17', '70713', '9403', '11'), +('9', '70', '7', '68706', '13615', '11'), +('9', '70', '7', '16097', '10988', '11'), +('9', '70', '7', '83565', '10396', '11'), +('9', '70', '7', '70910', '9521', '11'), +('9', '70', '9', '68766', '12167', '11'), +('9', '70', '9', '11096', '11360', '11'), +('9', '70', '9', '16097', '10988', '11'), +('9', '70', '9', '39345', '10251', '11'), +('9', '70', '15', '83458', '14635', '11'), +('9', '70', '15', '71117', '13594', '11'), +('9', '70', '15', '70621', '13527', '11'), +('9', '70', '15', '71588', '13185', '11'), +('9', '70', '20', '16156', '17158', '11'), +('9', '70', '20', '47283', '15360', '11'), +('9', '70', '20', '70604', '12931', '11'), +('9', '70', '20', '39339', '11567', '11'), +('9', '70', '12', '71080', '14564', '11'), +('9', '70', '12', '47213', '13704', '11'), +('9', '70', '12', '25857', '10312', '11'), +('9', '70', '12', '39356', '9545', '11'), +('9', '70', '18', '70915', '12703', '11'), +('9', '70', '18', '83608', '12190', '11'), +('9', '70', '18', '69147', '10097', '11'), +('9', '70', '18', '71096', '9668', '11'), +('9', '70', '19', '69439', '13026', '11'), +('9', '70', '19', '30569', '10869', '11'), +('9', '70', '19', '19094', '10782', '11'), +('9', '70', '19', '51226', '9671', '11'), +('9', '70', '13', '83578', '201443', '11'), +('9', '70', '13', '83639', '187805', '11'), +('9', '70', '13', '47317', '185380', '11'), +('9', '70', '13', '83547', '174388', '11'), +('9', '70', '14', '83639', '187805', '11'), +('9', '70', '14', '69052', '153751', '11'), +('9', '70', '14', '22998', '126797', '11'), +('9', '70', '14', '47314', '113782', '11'), +('9', '70', '11', '69054', '60640', '11'), +('9', '70', '11', '83539', '51225', '11'), +('9', '70', '11', '83582', '48330', '11'), +('9', '70', '11', '29596', '44834', '11'), +('9', '70', '22', '21805', '0', '10'), +('9', '70', '22', '61948', '0', '10'), +('9', '70', '22', '66397', '0', '10'), +('9', '70', '22', '21807', '0', '10'), +('9', '70', '1', '83594', '18222', '10'), +('9', '70', '1', '71624', '15617', '10'), +('9', '70', '1', '68949', '15218', '10'), +('9', '70', '1', '7125', '13612', '10'), +('9', '70', '2', '70909', '18006', '10'), +('9', '70', '2', '28605', '13578', '10'), +('9', '70', '2', '28648', '13557', '10'), +('9', '70', '2', '83561', '9411', '10'), +('9', '70', '3', '47245', '14692', '10'), +('9', '70', '3', '70979', '9966', '10'), +('9', '70', '3', '83636', '9775', '10'), +('9', '70', '3', '89512', '8923', '10'), +('9', '70', '5', '47273', '10873', '10'), +('9', '70', '5', '28885', '10216', '10'), +('9', '70', '5', '68808', '10080', '10'), +('9', '70', '5', '7769', '9907', '10'), +('9', '70', '8', '69064', '18028', '10'), +('9', '70', '8', '69165', '17788', '10'), +('9', '70', '8', '69072', '14716', '10'), +('9', '70', '8', '70662', '13536', '10'), +('9', '70', '6', '70717', '17097', '10'), +('9', '70', '6', '68757', '16917', '10'), +('9', '70', '6', '83530', '15290', '10'), +('9', '70', '6', '13674', '12813', '10'), +('9', '70', '17', '83604', '20909', '10'), +('9', '70', '17', '70914', '12980', '10'), +('9', '70', '17', '69151', '11200', '10'), +('9', '70', '17', '70713', '9403', '10'), +('9', '70', '7', '68706', '13615', '10'), +('9', '70', '7', '16097', '10988', '10'), +('9', '70', '7', '83565', '10396', '10'), +('9', '70', '7', '70910', '9521', '10'), +('9', '70', '9', '68766', '12167', '10'), +('9', '70', '9', '11096', '11360', '10'), +('9', '70', '9', '16097', '10988', '10'), +('9', '70', '9', '31461', '9969', '10'), +('9', '70', '15', '83458', '14635', '10'), +('9', '70', '15', '71117', '13594', '10'), +('9', '70', '15', '70621', '13527', '10'), +('9', '70', '15', '71588', '13185', '10'), +('9', '70', '20', '16156', '17158', '10'), +('9', '70', '20', '47283', '15360', '10'), +('9', '70', '20', '70604', '12931', '10'), +('9', '70', '20', '16097', '10988', '10'), +('9', '70', '12', '71080', '14564', '10'), +('9', '70', '12', '47213', '13704', '10'), +('9', '70', '12', '25857', '10312', '10'), +('9', '70', '12', '86611', '7600', '10'), +('9', '70', '18', '70915', '12703', '10'), +('9', '70', '18', '83608', '12190', '10'), +('9', '70', '18', '69147', '10097', '10'), +('9', '70', '18', '71096', '9668', '10'), +('9', '70', '19', '69439', '13026', '10'), +('9', '70', '19', '30569', '10869', '10'), +('9', '70', '19', '19094', '10782', '10'), +('9', '70', '19', '51226', '9671', '10'), +('9', '70', '13', '83578', '201443', '10'), +('9', '70', '13', '83639', '187805', '10'), +('9', '70', '13', '47317', '185380', '10'), +('9', '70', '13', '83547', '174388', '10'), +('9', '70', '14', '83639', '187805', '10'), +('9', '70', '14', '69052', '153751', '10'), +('9', '70', '14', '22998', '126797', '10'), +('9', '70', '14', '47314', '113782', '10'), +('9', '70', '11', '69054', '60640', '10'), +('9', '70', '11', '83539', '51225', '10'), +('9', '70', '11', '83582', '48330', '10'), +('9', '70', '11', '29596', '44834', '10'), +('9', '70', '22', '21805', '0', '9'), +('9', '70', '22', '61948', '0', '9'), +('9', '70', '22', '66397', '0', '9'), +('9', '70', '22', '21807', '0', '9'), +('9', '70', '1', '71624', '15617', '9'), +('9', '70', '1', '68949', '15218', '9'), +('9', '70', '1', '7125', '13612', '9'), +('9', '70', '1', '32106', '11332', '9'), +('9', '70', '2', '70909', '18006', '9'), +('9', '70', '2', '28605', '13578', '9'), +('9', '70', '2', '28648', '13557', '9'), +('9', '70', '2', '2612', '8156', '9'), +('9', '70', '3', '47245', '14692', '9'), +('9', '70', '3', '70979', '9966', '9'), +('9', '70', '3', '68753', '8078', '9'), +('9', '70', '3', '69157', '8043', '9'), +('9', '70', '5', '47273', '10873', '9'), +('9', '70', '5', '28885', '10216', '9'), +('9', '70', '5', '68808', '10080', '9'), +('9', '70', '5', '7769', '9907', '9'), +('9', '70', '8', '69064', '18028', '9'), +('9', '70', '8', '69165', '17788', '9'), +('9', '70', '8', '69072', '14716', '9'), +('9', '70', '8', '70662', '13536', '9'), +('9', '70', '6', '70717', '17097', '9'), +('9', '70', '6', '68757', '16917', '9'), +('9', '70', '6', '13674', '12813', '9'), +('9', '70', '6', '28902', '12109', '9'), +('9', '70', '17', '70914', '12980', '9'), +('9', '70', '17', '69151', '11200', '9'), +('9', '70', '17', '70713', '9403', '9'), +('9', '70', '17', '68780', '8174', '9'), +('9', '70', '7', '68706', '13615', '9'), +('9', '70', '7', '16097', '10988', '9'), +('9', '70', '7', '70910', '9521', '9'), +('9', '70', '7', '70711', '8048', '9'), +('9', '70', '9', '68766', '12167', '9'), +('9', '70', '9', '11096', '11360', '9'), +('9', '70', '9', '16097', '10988', '9'), +('9', '70', '9', '31461', '9969', '9'), +('9', '70', '15', '71117', '13594', '9'), +('9', '70', '15', '70621', '13527', '9'), +('9', '70', '15', '71588', '13185', '9'), +('9', '70', '15', '71608', '12115', '9'), +('9', '70', '20', '16156', '17158', '9'), +('9', '70', '20', '47283', '15360', '9'), +('9', '70', '20', '70604', '12931', '9'), +('9', '70', '20', '16097', '10988', '9'), +('9', '70', '12', '71080', '14564', '9'), +('9', '70', '12', '47213', '13704', '9'), +('9', '70', '12', '25857', '10312', '9'), +('9', '70', '12', '28246', '7400', '9'), +('9', '70', '18', '70915', '12703', '9'), +('9', '70', '18', '69147', '10097', '9'), +('9', '70', '18', '71096', '9668', '9'), +('9', '70', '18', '82717', '9354', '9'), +('9', '70', '19', '69439', '13026', '9'), +('9', '70', '19', '30569', '10869', '9'), +('9', '70', '19', '19094', '10782', '9'), +('9', '70', '19', '51226', '9671', '9'), +('9', '70', '13', '47317', '185380', '9'), +('9', '70', '13', '69115', '173020', '9'), +('9', '70', '13', '70710', '171735', '9'), +('9', '70', '13', '71645', '168599', '9'), +('9', '70', '14', '69052', '153751', '9'), +('9', '70', '14', '22998', '126797', '9'), +('9', '70', '14', '47314', '113782', '9'), +('9', '70', '14', '68419', '108661', '9'), +('9', '70', '11', '69054', '60640', '9'), +('9', '70', '11', '29596', '44834', '9'), +('9', '70', '11', '70317', '44242', '9'), +('9', '70', '11', '30539', '43953', '9'), +('9', '70', '22', '21805', '0', '8'), +('9', '70', '22', '61948', '0', '8'), +('9', '70', '22', '66397', '0', '8'), +('9', '70', '22', '21807', '0', '8'), +('9', '70', '1', '68949', '15218', '8'), +('9', '70', '1', '7125', '13612', '8'), +('9', '70', '1', '32106', '11332', '8'), +('9', '70', '1', '47287', '10142', '8'), +('9', '70', '2', '70909', '18006', '8'), +('9', '70', '2', '28605', '13578', '8'), +('9', '70', '2', '28648', '13557', '8'), +('9', '70', '2', '2612', '8156', '8'), +('9', '70', '3', '47245', '14692', '8'), +('9', '70', '3', '68753', '8078', '8'), +('9', '70', '3', '69157', '8043', '8'), +('9', '70', '3', '71109', '7924', '8'), +('9', '70', '5', '47273', '10873', '8'), +('9', '70', '5', '28885', '10216', '8'), +('9', '70', '5', '68808', '10080', '8'), +('9', '70', '5', '7769', '9907', '8'), +('9', '70', '8', '69064', '18028', '8'), +('9', '70', '8', '69165', '17788', '8'), +('9', '70', '8', '69072', '14716', '8'), +('9', '70', '8', '70662', '13536', '8'), +('9', '70', '6', '70717', '17097', '8'), +('9', '70', '6', '68757', '16917', '8'), +('9', '70', '6', '13674', '12813', '8'), +('9', '70', '6', '28902', '12109', '8'), +('9', '70', '17', '70914', '12980', '8'), +('9', '70', '17', '69151', '11200', '8'), +('9', '70', '17', '70713', '9403', '8'), +('9', '70', '17', '68780', '8174', '8'), +('9', '70', '7', '68706', '13615', '8'), +('9', '70', '7', '16097', '10988', '8'), +('9', '70', '7', '70910', '9521', '8'), +('9', '70', '7', '70711', '8048', '8'), +('9', '70', '9', '68766', '12167', '8'), +('9', '70', '9', '11096', '11360', '8'), +('9', '70', '9', '16097', '10988', '8'), +('9', '70', '9', '31461', '9969', '8'), +('9', '70', '15', '71117', '13594', '8'), +('9', '70', '15', '70621', '13527', '8'), +('9', '70', '15', '9959', '10764', '8'), +('9', '70', '15', '68111', '10535', '8'), +('9', '70', '20', '16156', '17158', '8'), +('9', '70', '20', '47283', '15360', '8'), +('9', '70', '20', '70604', '12931', '8'), +('9', '70', '20', '16097', '10988', '8'), +('9', '70', '12', '71080', '14564', '8'), +('9', '70', '12', '47213', '13704', '8'), +('9', '70', '12', '25857', '10312', '8'), +('9', '70', '12', '28246', '7400', '8'), +('9', '70', '18', '70915', '12703', '8'), +('9', '70', '18', '69147', '10097', '8'), +('9', '70', '18', '71096', '9668', '8'), +('9', '70', '18', '68971', '9183', '8'), +('9', '70', '19', '69439', '13026', '8'), +('9', '70', '19', '30569', '10869', '8'), +('9', '70', '19', '19094', '10782', '8'), +('9', '70', '19', '51226', '9671', '8'), +('9', '70', '13', '47317', '184780', '8'), +('9', '70', '13', '69115', '172495', '8'), +('9', '70', '13', '70710', '171285', '8'), +('9', '70', '13', '52348', '167809', '8'), +('9', '70', '14', '69052', '151501', '8'), +('9', '70', '14', '22998', '124884', '8'), +('9', '70', '14', '47314', '113107', '8'), +('9', '70', '14', '68419', '106786', '8'), +('9', '70', '11', '69054', '60040', '8'), +('9', '70', '11', '29596', '44504', '8'), +('9', '70', '11', '70317', '43942', '8'), +('9', '70', '11', '30539', '43638', '8'), +('9', '71', '22', '12425', '0', '11'), +('9', '71', '22', '21807', '0', '11'), +('9', '71', '22', '21805', '0', '11'), +('9', '71', '22', '24071', '0', '11'), +('9', '71', '1', '83594', '18222', '11'), +('9', '71', '1', '39276', '17920', '11'), +('9', '71', '1', '71624', '15617', '11'), +('9', '71', '1', '68949', '15218', '11'), +('9', '71', '2', '70909', '18007', '11'), +('9', '71', '2', '28605', '13578', '11'), +('9', '71', '2', '28648', '13557', '11'), +('9', '71', '2', '83561', '9411', '11'), +('9', '71', '3', '39218', '16941', '11'), +('9', '71', '3', '47245', '14692', '11'), +('9', '71', '3', '39361', '10993', '11'), +('9', '71', '3', '70979', '9966', '11'), +('9', '71', '5', '39349', '16825', '11'), +('9', '71', '5', '47273', '10873', '11'), +('9', '71', '5', '28885', '10216', '11'), +('9', '71', '5', '39262', '10144', '11'), +('9', '71', '8', '69064', '18029', '11'), +('9', '71', '8', '69165', '17788', '11'), +('9', '71', '8', '39330', '15609', '11'), +('9', '71', '8', '69072', '14716', '11'), +('9', '71', '6', '70717', '17097', '11'), +('9', '71', '6', '68757', '16917', '11'), +('9', '71', '6', '83530', '15290', '11'), +('9', '71', '6', '13674', '12813', '11'), +('9', '71', '17', '83604', '20909', '11'), +('9', '71', '17', '70914', '12980', '11'), +('9', '71', '17', '69151', '11201', '11'), +('9', '71', '17', '70713', '9403', '11'), +('9', '71', '7', '68706', '13615', '11'), +('9', '71', '7', '16097', '10988', '11'), +('9', '71', '7', '83565', '10397', '11'), +('9', '71', '7', '70910', '9521', '11'), +('9', '71', '9', '68766', '12168', '11'), +('9', '71', '9', '11096', '11360', '11'), +('9', '71', '9', '16097', '10988', '11'), +('9', '71', '9', '39345', '10252', '11'), +('9', '71', '15', '83458', '14635', '11'), +('9', '71', '15', '71117', '13595', '11'), +('9', '71', '15', '70621', '13528', '11'), +('9', '71', '15', '71588', '13185', '11'), +('9', '71', '20', '16156', '17158', '11'), +('9', '71', '20', '47283', '15360', '11'), +('9', '71', '20', '70604', '12931', '11'), +('9', '71', '20', '39339', '11568', '11'), +('9', '71', '12', '71080', '14565', '11'), +('9', '71', '12', '47213', '13704', '11'), +('9', '71', '12', '25857', '10312', '11'), +('9', '71', '12', '39356', '9545', '11'), +('9', '71', '18', '70915', '12703', '11'), +('9', '71', '18', '83608', '12190', '11'), +('9', '71', '18', '69147', '10097', '11'), +('9', '71', '18', '71096', '9668', '11'), +('9', '71', '19', '69439', '13027', '11'), +('9', '71', '19', '30569', '10870', '11'), +('9', '71', '19', '19094', '10782', '11'), +('9', '71', '19', '51226', '9671', '11'), +('9', '71', '13', '83578', '204087', '11'), +('9', '71', '13', '83639', '189128', '11'), +('9', '71', '13', '47317', '187956', '11'), +('9', '71', '13', '83547', '176726', '11'), +('9', '71', '14', '83639', '189128', '11'), +('9', '71', '14', '69052', '154876', '11'), +('9', '71', '14', '22998', '127753', '11'), +('9', '71', '14', '47314', '114120', '11'), +('9', '71', '11', '69054', '60940', '11'), +('9', '71', '11', '83539', '51376', '11'), +('9', '71', '11', '83582', '48331', '11'), +('9', '71', '11', '29596', '44999', '11'), +('9', '72', '22', '12425', '0', '11'), +('9', '72', '22', '21807', '0', '11'), +('9', '72', '22', '21805', '0', '11'), +('9', '72', '22', '24071', '0', '11'), +('9', '72', '1', '83594', '18222', '11'), +('9', '72', '1', '39276', '17920', '11'), +('9', '72', '1', '71624', '15617', '11'), +('9', '72', '1', '68949', '15218', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '72', '2', '70909', '18007', '11'), +('9', '72', '2', '28605', '13578', '11'), +('9', '72', '2', '28648', '13557', '11'), +('9', '72', '2', '83561', '9412', '11'), +('9', '72', '3', '39218', '16941', '11'), +('9', '72', '3', '47245', '14692', '11'), +('9', '72', '3', '39361', '10993', '11'), +('9', '72', '3', '70979', '9966', '11'), +('9', '72', '5', '39349', '16825', '11'), +('9', '72', '5', '47273', '10873', '11'), +('9', '72', '5', '28885', '10216', '11'), +('9', '72', '5', '39262', '10144', '11'), +('9', '72', '8', '69064', '18029', '11'), +('9', '72', '8', '69165', '17789', '11'), +('9', '72', '8', '39330', '15609', '11'), +('9', '72', '8', '69072', '14716', '11'), +('9', '72', '6', '70717', '17097', '11'), +('9', '72', '6', '68757', '16917', '11'), +('9', '72', '6', '83530', '15290', '11'), +('9', '72', '6', '13674', '12814', '11'), +('9', '72', '17', '83604', '20909', '11'), +('9', '72', '17', '70914', '12981', '11'), +('9', '72', '17', '69151', '11201', '11'), +('9', '72', '17', '70713', '9403', '11'), +('9', '72', '7', '68706', '13615', '11'), +('9', '72', '7', '16097', '10989', '11'), +('9', '72', '7', '83565', '10397', '11'), +('9', '72', '7', '70910', '9521', '11'), +('9', '72', '9', '68766', '12168', '11'), +('9', '72', '9', '11096', '11360', '11'), +('9', '72', '9', '16097', '10989', '11'), +('9', '72', '9', '39345', '10252', '11'), +('9', '72', '15', '83458', '14635', '11'), +('9', '72', '15', '71117', '13595', '11'), +('9', '72', '15', '70621', '13528', '11'), +('9', '72', '15', '71588', '13185', '11'), +('9', '72', '20', '16156', '17158', '11'), +('9', '72', '20', '47283', '15360', '11'), +('9', '72', '20', '70604', '12931', '11'), +('9', '72', '20', '39339', '11568', '11'), +('9', '72', '12', '71080', '14565', '11'), +('9', '72', '12', '47213', '13704', '11'), +('9', '72', '12', '25857', '10312', '11'), +('9', '72', '12', '39356', '9546', '11'), +('9', '72', '18', '70915', '12703', '11'), +('9', '72', '18', '83608', '12191', '11'), +('9', '72', '18', '69147', '10098', '11'), +('9', '72', '18', '71096', '9669', '11'), +('9', '72', '19', '69439', '13027', '11'), +('9', '72', '19', '30569', '10870', '11'), +('9', '72', '19', '19094', '10782', '11'), +('9', '72', '19', '51226', '9671', '11'), +('9', '72', '13', '83578', '206751', '11'), +('9', '72', '13', '47317', '190551', '11'), +('9', '72', '13', '83639', '190451', '11'), +('9', '72', '13', '83547', '179084', '11'), +('9', '72', '14', '83639', '190451', '11'), +('9', '72', '14', '69052', '156001', '11'), +('9', '72', '14', '22998', '128710', '11'), +('9', '72', '14', '47314', '114457', '11'), +('9', '72', '11', '69054', '61240', '11'), +('9', '72', '11', '83539', '51526', '11'), +('9', '72', '11', '83582', '48331', '11'), +('9', '72', '11', '29596', '45164', '11'), +('9', '73', '22', '12425', '0', '11'), +('9', '73', '22', '21807', '0', '11'), +('9', '73', '22', '21805', '0', '11'), +('9', '73', '22', '24071', '0', '11'), +('9', '73', '1', '83594', '18222', '11'), +('9', '73', '1', '39276', '17920', '11'), +('9', '73', '1', '71624', '15617', '11'), +('9', '73', '1', '68949', '15219', '11'), +('9', '73', '2', '70909', '18007', '11'), +('9', '73', '2', '28605', '13578', '11'), +('9', '73', '2', '28648', '13557', '11'), +('9', '73', '2', '83561', '9412', '11'), +('9', '73', '3', '39218', '16941', '11'), +('9', '73', '3', '47245', '14692', '11'), +('9', '73', '3', '39361', '10993', '11'), +('9', '73', '3', '70979', '9966', '11'), +('9', '73', '5', '39349', '16825', '11'), +('9', '73', '5', '47273', '10873', '11'), +('9', '73', '5', '28885', '10216', '11'), +('9', '73', '5', '39262', '10144', '11'), +('9', '73', '8', '69064', '18029', '11'), +('9', '73', '8', '69165', '17789', '11'), +('9', '73', '8', '39330', '15609', '11'), +('9', '73', '8', '69072', '14717', '11'), +('9', '73', '6', '70717', '17097', '11'), +('9', '73', '6', '68757', '16917', '11'), +('9', '73', '6', '83530', '15290', '11'), +('9', '73', '6', '13674', '12814', '11'), +('9', '73', '17', '83604', '20910', '11'), +('9', '73', '17', '70914', '12981', '11'), +('9', '73', '17', '69151', '11201', '11'), +('9', '73', '17', '70713', '9403', '11'), +('9', '73', '7', '68706', '13615', '11'), +('9', '73', '7', '16097', '10989', '11'), +('9', '73', '7', '83565', '10397', '11'), +('9', '73', '7', '70910', '9522', '11'), +('9', '73', '9', '68766', '12168', '11'), +('9', '73', '9', '11096', '11360', '11'), +('9', '73', '9', '16097', '10989', '11'), +('9', '73', '9', '39345', '10252', '11'), +('9', '73', '15', '83458', '14635', '11'), +('9', '73', '15', '71117', '13595', '11'), +('9', '73', '15', '70621', '13528', '11'), +('9', '73', '15', '71588', '13185', '11'), +('9', '73', '20', '16156', '17158', '11'), +('9', '73', '20', '47283', '15360', '11'), +('9', '73', '20', '70604', '12931', '11'), +('9', '73', '20', '39339', '11568', '11'), +('9', '73', '12', '71080', '14565', '11'), +('9', '73', '12', '47213', '13704', '11'), +('9', '73', '12', '25857', '10312', '11'), +('9', '73', '12', '39356', '9546', '11'), +('9', '73', '18', '70915', '12703', '11'), +('9', '73', '18', '83608', '12191', '11'), +('9', '73', '18', '69147', '10098', '11'), +('9', '73', '18', '71096', '9669', '11'), +('9', '73', '19', '69439', '13027', '11'), +('9', '73', '19', '30569', '10870', '11'), +('9', '73', '19', '19094', '10782', '11'), +('9', '73', '19', '51226', '9671', '11'), +('9', '73', '13', '83578', '209434', '11'), +('9', '73', '13', '47317', '193167', '11'), +('9', '73', '13', '83639', '191774', '11'), +('9', '73', '13', '83547', '181459', '11'), +('9', '73', '14', '83639', '191774', '11'), +('9', '73', '14', '69052', '157126', '11'), +('9', '73', '14', '22998', '129666', '11'), +('9', '73', '14', '47314', '114795', '11'), +('9', '73', '11', '69054', '61541', '11'), +('9', '73', '11', '83539', '51676', '11'), +('9', '73', '11', '83582', '48331', '11'), +('9', '73', '11', '29596', '45329', '11'), +('9', '74', '22', '12425', '0', '11'), +('9', '74', '22', '21807', '0', '11'), +('9', '74', '22', '21805', '0', '11'), +('9', '74', '22', '24071', '0', '11'), +('9', '74', '1', '83594', '18222', '11'), +('9', '74', '1', '39276', '17920', '11'), +('9', '74', '1', '71624', '15617', '11'), +('9', '74', '1', '68949', '15219', '11'), +('9', '74', '2', '70909', '18007', '11'), +('9', '74', '2', '28605', '13578', '11'), +('9', '74', '2', '28648', '13557', '11'), +('9', '74', '2', '83561', '9412', '11'), +('9', '74', '3', '39218', '16941', '11'), +('9', '74', '3', '47245', '14693', '11'), +('9', '74', '3', '39361', '10993', '11'), +('9', '74', '3', '70979', '9967', '11'), +('9', '74', '5', '39349', '16825', '11'), +('9', '74', '5', '47273', '10873', '11'), +('9', '74', '5', '28885', '10216', '11'), +('9', '74', '5', '39262', '10144', '11'), +('9', '74', '8', '69064', '18029', '11'), +('9', '74', '8', '69165', '17789', '11'), +('9', '74', '8', '39330', '15609', '11'), +('9', '74', '8', '69072', '14717', '11'), +('9', '74', '6', '70717', '17098', '11'), +('9', '74', '6', '68757', '16917', '11'), +('9', '74', '6', '83530', '15290', '11'), +('9', '74', '6', '13674', '12814', '11'), +('9', '74', '17', '83604', '20910', '11'), +('9', '74', '17', '70914', '12981', '11'), +('9', '74', '17', '69151', '11201', '11'), +('9', '74', '17', '70713', '9403', '11'), +('9', '74', '7', '68706', '13615', '11'), +('9', '74', '7', '16097', '10989', '11'), +('9', '74', '7', '83565', '10397', '11'), +('9', '74', '7', '70910', '9522', '11'), +('9', '74', '9', '68766', '12168', '11'), +('9', '74', '9', '11096', '11360', '11'), +('9', '74', '9', '16097', '10989', '11'), +('9', '74', '9', '39345', '10252', '11'), +('9', '74', '15', '83458', '14635', '11'), +('9', '74', '15', '71117', '13596', '11'), +('9', '74', '15', '70621', '13528', '11'), +('9', '74', '15', '71588', '13185', '11'), +('9', '74', '20', '16156', '17159', '11'), +('9', '74', '20', '47283', '15360', '11'), +('9', '74', '20', '70604', '12931', '11'), +('9', '74', '20', '39339', '11568', '11'), +('9', '74', '12', '71080', '14565', '11'), +('9', '74', '12', '47213', '13704', '11'), +('9', '74', '12', '25857', '10312', '11'), +('9', '74', '12', '39356', '9546', '11'), +('9', '74', '18', '70915', '12703', '11'), +('9', '74', '18', '83608', '12191', '11'), +('9', '74', '18', '69147', '10098', '11'), +('9', '74', '18', '71096', '9669', '11'), +('9', '74', '19', '69439', '13027', '11'), +('9', '74', '19', '30569', '10870', '11'), +('9', '74', '19', '19094', '10782', '11'), +('9', '74', '19', '51226', '9672', '11'), +('9', '74', '13', '83578', '212137', '11'), +('9', '74', '13', '47317', '195802', '11'), +('9', '74', '13', '83639', '193098', '11'), +('9', '74', '13', '83547', '183854', '11'), +('9', '74', '14', '83639', '193098', '11'), +('9', '74', '14', '69052', '158251', '11'), +('9', '74', '14', '22998', '130623', '11'), +('9', '74', '14', '47314', '115132', '11'), +('9', '74', '11', '69054', '61841', '11'), +('9', '74', '11', '83539', '51826', '11'), +('9', '74', '11', '83582', '48331', '11'), +('9', '74', '11', '29596', '45494', '11'), +('9', '75', '22', '12425', '0', '13'), +('9', '75', '22', '21807', '0', '13'), +('9', '75', '22', '24071', '0', '13'), +('9', '75', '22', '39342', '0', '13'), +('9', '75', '1', '83594', '18223', '13'), +('9', '75', '1', '39276', '17920', '13'), +('9', '75', '1', '71624', '15617', '13'), +('9', '75', '1', '68949', '15219', '13'), +('9', '75', '2', '70909', '18008', '13'), +('9', '75', '2', '28605', '13578', '13'), +('9', '75', '2', '28648', '13557', '13'), +('9', '75', '2', '53417', '11813', '13'), +('9', '75', '3', '39218', '16941', '13'), +('9', '75', '3', '47245', '14693', '13'), +('9', '75', '3', '80636', '14011', '13'), +('9', '75', '3', '39361', '10993', '13'), +('9', '75', '5', '46918', '20110', '13'), +('9', '75', '5', '39349', '16826', '13'), +('9', '75', '5', '80669', '14359', '13'), +('9', '75', '5', '80616', '13242', '13'), +('9', '75', '8', '46885', '22306', '13'), +('9', '75', '8', '69064', '18029', '13'), +('9', '75', '8', '69165', '17789', '13'), +('9', '75', '8', '46814', '16498', '13'), +('9', '75', '6', '80638', '22851', '13'), +('9', '75', '6', '70717', '17098', '13'), +('9', '75', '6', '68757', '16918', '13'), +('9', '75', '6', '83530', '15291', '13'), +('9', '75', '17', '83604', '20910', '13'), +('9', '75', '17', '53422', '14166', '13'), +('9', '75', '17', '70914', '12981', '13'), +('9', '75', '17', '69151', '11201', '13'), +('9', '75', '7', '68706', '13615', '13'), +('9', '75', '7', '53418', '12205', '13'), +('9', '75', '7', '16097', '10989', '13'), +('9', '75', '7', '83565', '10398', '13'), +('9', '75', '9', '53419', '12274', '13'), +('9', '75', '9', '68766', '12168', '13'), +('9', '75', '9', '46937', '11953', '13'), +('9', '75', '9', '11096', '11360', '13'), +('9', '75', '15', '83458', '14636', '13'), +('9', '75', '15', '79909', '14633', '13'), +('9', '75', '15', '80657', '14302', '13'), +('9', '75', '15', '80627', '13658', '13'), +('9', '75', '20', '80688', '24752', '13'), +('9', '75', '20', '16156', '17159', '13'), +('9', '75', '20', '47283', '15360', '13'), +('9', '75', '20', '46935', '14483', '13'), +('9', '75', '12', '53420', '20356', '13'), +('9', '75', '12', '71080', '14565', '13'), +('9', '75', '12', '47213', '13704', '13'), +('9', '75', '12', '25857', '10312', '13'), +('9', '75', '18', '53423', '13086', '13'), +('9', '75', '18', '70915', '12704', '13'), +('9', '75', '18', '83608', '12192', '13'), +('9', '75', '18', '69147', '10098', '13'), +('9', '75', '19', '69439', '13027', '13'), +('9', '75', '19', '53421', '12454', '13'), +('9', '75', '19', '30569', '10870', '13'), +('9', '75', '19', '19094', '10782', '13'), +('9', '75', '13', '80653', '274605', '13'), +('9', '75', '13', '80613', '265531', '13'), +('9', '75', '13', '46927', '259025', '13'), +('9', '75', '13', '46831', '229137', '13'), +('9', '75', '14', '46856', '213638', '13'), +('9', '75', '14', '46854', '211478', '13'), +('9', '75', '14', '83639', '201036', '13'), +('9', '75', '14', '69052', '165001', '13'), +('9', '75', '11', '69054', '63641', '13'), +('9', '75', '11', '80655', '63069', '13'), +('9', '75', '11', '46930', '58335', '13'), +('9', '75', '11', '83539', '52726', '13'), +('9', '75', '22', '12425', '0', '12'), +('9', '75', '22', '21807', '0', '12'), +('9', '75', '22', '24071', '0', '12'), +('9', '75', '22', '39342', '0', '12'), +('9', '75', '1', '83594', '18223', '12'), +('9', '75', '1', '39276', '17920', '12'), +('9', '75', '1', '71624', '15617', '12'), +('9', '75', '1', '68949', '15219', '12'), +('9', '75', '2', '70909', '18008', '12'), +('9', '75', '2', '28605', '13578', '12'), +('9', '75', '2', '28648', '13557', '12'), +('9', '75', '2', '53417', '11813', '12'), +('9', '75', '3', '39218', '16941', '12'), +('9', '75', '3', '47245', '14693', '12'), +('9', '75', '3', '39361', '10993', '12'), +('9', '75', '3', '70979', '9967', '12'), +('9', '75', '5', '46918', '20110', '12'), +('9', '75', '5', '39349', '16826', '12'), +('9', '75', '5', '47273', '10873', '12'), +('9', '75', '5', '28885', '10216', '12'), +('9', '75', '8', '46885', '22306', '12'), +('9', '75', '8', '69064', '18029', '12'), +('9', '75', '8', '69165', '17789', '12'), +('9', '75', '8', '46814', '16498', '12'), +('9', '75', '6', '70717', '17098', '12'), +('9', '75', '6', '68757', '16918', '12'), +('9', '75', '6', '83530', '15291', '12'), +('9', '75', '6', '13674', '12814', '12'), +('9', '75', '17', '83604', '20910', '12'), +('9', '75', '17', '53422', '14166', '12'), +('9', '75', '17', '70914', '12981', '12'), +('9', '75', '17', '69151', '11201', '12'), +('9', '75', '7', '68706', '13615', '12'), +('9', '75', '7', '53418', '12205', '12'), +('9', '75', '7', '16097', '10989', '12'), +('9', '75', '7', '83565', '10398', '12'), +('9', '75', '9', '53419', '12274', '12'), +('9', '75', '9', '68766', '12168', '12'), +('9', '75', '9', '46937', '11953', '12'), +('9', '75', '9', '11096', '11360', '12'), +('9', '75', '15', '83458', '14636', '12'), +('9', '75', '15', '71117', '13596', '12'), +('9', '75', '15', '70621', '13528', '12'), +('9', '75', '15', '71588', '13185', '12'), +('9', '75', '20', '16156', '17159', '12'), +('9', '75', '20', '47283', '15360', '12'), +('9', '75', '20', '46935', '14483', '12'), +('9', '75', '20', '70604', '12932', '12'), +('9', '75', '12', '53420', '20356', '12'), +('9', '75', '12', '71080', '14565', '12'), +('9', '75', '12', '47213', '13704', '12'), +('9', '75', '12', '25857', '10312', '12'), +('9', '75', '18', '53423', '13086', '12'), +('9', '75', '18', '70915', '12704', '12'), +('9', '75', '18', '83608', '12192', '12'), +('9', '75', '18', '69147', '10098', '12'), +('9', '75', '19', '69439', '13027', '12'), +('9', '75', '19', '53421', '12454', '12'), +('9', '75', '19', '30569', '10870', '12'), +('9', '75', '19', '19094', '10782', '12'), +('9', '75', '13', '46927', '259025', '12'), +('9', '75', '13', '46831', '229137', '12'), +('9', '75', '13', '83578', '217109', '12'), +('9', '75', '13', '46856', '213638', '12'), +('9', '75', '14', '46856', '213638', '12'), +('9', '75', '14', '46854', '211478', '12'), +('9', '75', '14', '83639', '201036', '12'), +('9', '75', '14', '69052', '165001', '12'), +('9', '75', '11', '69054', '63641', '12'), +('9', '75', '11', '46930', '58335', '12'), +('9', '75', '11', '83539', '52726', '12'), +('9', '75', '11', '83582', '48331', '12'), +('9', '76', '22', '12425', '0', '13'), +('9', '76', '22', '21807', '0', '13'), +('9', '76', '22', '24071', '0', '13'), +('9', '76', '22', '39342', '0', '13'), +('9', '76', '1', '83594', '18223', '13'), +('9', '76', '1', '39276', '17921', '13'), +('9', '76', '1', '71624', '15618', '13'), +('9', '76', '1', '68949', '15219', '13'), +('9', '76', '2', '70909', '18008', '13'), +('9', '76', '2', '28605', '13578', '13'), +('9', '76', '2', '28648', '13557', '13'), +('9', '76', '2', '53417', '11813', '13'), +('9', '76', '3', '39218', '16941', '13'), +('9', '76', '3', '47245', '14693', '13'), +('9', '76', '3', '80636', '14011', '13'), +('9', '76', '3', '39361', '10993', '13'), +('9', '76', '5', '46918', '20110', '13'), +('9', '76', '5', '39349', '16826', '13'), +('9', '76', '5', '80669', '14359', '13'), +('9', '76', '5', '80616', '13242', '13'), +('9', '76', '8', '46885', '22306', '13'), +('9', '76', '8', '69064', '18029', '13'), +('9', '76', '8', '69165', '17789', '13'), +('9', '76', '8', '46814', '16498', '13'), +('9', '76', '6', '80638', '22852', '13'), +('9', '76', '6', '70717', '17098', '13'), +('9', '76', '6', '68757', '16918', '13'), +('9', '76', '6', '83530', '15291', '13'), +('9', '76', '17', '83604', '20911', '13'), +('9', '76', '17', '53422', '14166', '13'), +('9', '76', '17', '70914', '12981', '13'), +('9', '76', '17', '69151', '11202', '13'), +('9', '76', '7', '68706', '13616', '13'), +('9', '76', '7', '53418', '12205', '13'), +('9', '76', '7', '16097', '10989', '13'), +('9', '76', '7', '83565', '10398', '13'), +('9', '76', '9', '53419', '12274', '13'), +('9', '76', '9', '68766', '12168', '13'), +('9', '76', '9', '46937', '11953', '13'), +('9', '76', '9', '11096', '11360', '13'), +('9', '76', '15', '83458', '14636', '13'), +('9', '76', '15', '79909', '14633', '13'), +('9', '76', '15', '80657', '14302', '13'), +('9', '76', '15', '80627', '13658', '13'), +('9', '76', '20', '80688', '24752', '13'), +('9', '76', '20', '16156', '17159', '13'), +('9', '76', '20', '47283', '15360', '13'), +('9', '76', '20', '46935', '14483', '13'), +('9', '76', '12', '53420', '20356', '13'), +('9', '76', '12', '71080', '14565', '13'), +('9', '76', '12', '47213', '13704', '13'), +('9', '76', '12', '25857', '10312', '13'), +('9', '76', '18', '53423', '13086', '13'), +('9', '76', '18', '70915', '12704', '13'), +('9', '76', '18', '83608', '12192', '13'), +('9', '76', '18', '69147', '10098', '13'), +('9', '76', '19', '69439', '13027', '13'), +('9', '76', '19', '53421', '12455', '13'), +('9', '76', '19', '30569', '10870', '13'), +('9', '76', '19', '19094', '10782', '13'), +('9', '76', '13', '80653', '278081', '13'), +('9', '76', '13', '80613', '269091', '13'), +('9', '76', '13', '46927', '262208', '13'), +('9', '76', '13', '46831', '232030', '13'), +('9', '76', '14', '46856', '214961', '13'), +('9', '76', '14', '46854', '212801', '13'), +('9', '76', '14', '83639', '202359', '13'), +('9', '76', '14', '69052', '166127', '13'), +('9', '76', '11', '69054', '63941', '13'), +('9', '76', '11', '80655', '63069', '13'), +('9', '76', '11', '46930', '58335', '13'), +('9', '76', '11', '83539', '52876', '13'), +('9', '77', '22', '12425', '0', '13'), +('9', '77', '22', '21807', '0', '13'), +('9', '77', '22', '24071', '0', '13'), +('9', '77', '22', '39342', '0', '13'), +('9', '77', '1', '83594', '18223', '13'), +('9', '77', '1', '39276', '17921', '13'), +('9', '77', '1', '71624', '15618', '13'), +('9', '77', '1', '68949', '15219', '13'), +('9', '77', '2', '70909', '18008', '13'), +('9', '77', '2', '28605', '13578', '13'), +('9', '77', '2', '28648', '13557', '13'), +('9', '77', '2', '53417', '11814', '13'), +('9', '77', '3', '39218', '16941', '13'), +('9', '77', '3', '47245', '14693', '13'), +('9', '77', '3', '80636', '14011', '13'), +('9', '77', '3', '39361', '10994', '13'), +('9', '77', '5', '46918', '20111', '13'), +('9', '77', '5', '39349', '16826', '13'), +('9', '77', '5', '80669', '14359', '13'), +('9', '77', '5', '80616', '13242', '13'), +('9', '77', '8', '46885', '22306', '13'), +('9', '77', '8', '69064', '18029', '13'), +('9', '77', '8', '69165', '17790', '13'), +('9', '77', '8', '46814', '16498', '13'), +('9', '77', '6', '80638', '22852', '13'), +('9', '77', '6', '70717', '17098', '13'), +('9', '77', '6', '68757', '16918', '13'), +('9', '77', '6', '83530', '15291', '13'), +('9', '77', '17', '83604', '20911', '13'), +('9', '77', '17', '53422', '14166', '13'), +('9', '77', '17', '70914', '12982', '13'), +('9', '77', '17', '69151', '11202', '13'), +('9', '77', '7', '68706', '13616', '13'), +('9', '77', '7', '53418', '12205', '13'), +('9', '77', '7', '16097', '10990', '13'), +('9', '77', '7', '83565', '10398', '13'), +('9', '77', '9', '53419', '12275', '13'), +('9', '77', '9', '68766', '12168', '13'), +('9', '77', '9', '46937', '11953', '13'), +('9', '77', '9', '11096', '11360', '13'), +('9', '77', '15', '83458', '14636', '13'), +('9', '77', '15', '79909', '14633', '13'), +('9', '77', '15', '80657', '14302', '13'), +('9', '77', '15', '80627', '13658', '13'), +('9', '77', '20', '80688', '24752', '13'), +('9', '77', '20', '16156', '17159', '13'), +('9', '77', '20', '47283', '15361', '13'), +('9', '77', '20', '46935', '14483', '13'), +('9', '77', '12', '53420', '20356', '13'), +('9', '77', '12', '71080', '14565', '13'), +('9', '77', '12', '47213', '13704', '13'), +('9', '77', '12', '25857', '10312', '13'), +('9', '77', '18', '53423', '13086', '13'), +('9', '77', '18', '70915', '12704', '13'), +('9', '77', '18', '83608', '12192', '13'), +('9', '77', '18', '69147', '10098', '13'), +('9', '77', '19', '69439', '13027', '13'), +('9', '77', '19', '53421', '12455', '13'), +('9', '77', '19', '30569', '10870', '13'), +('9', '77', '19', '19094', '10783', '13'), +('9', '77', '13', '80653', '281586', '13'), +('9', '77', '13', '80613', '272682', '13'), +('9', '77', '13', '46927', '265417', '13'), +('9', '77', '13', '46831', '234944', '13'), +('9', '77', '14', '46856', '216284', '13'), +('9', '77', '14', '46854', '214124', '13'), +('9', '77', '14', '83639', '203682', '13'), +('9', '77', '14', '69052', '167252', '13'), +('9', '77', '11', '69054', '64241', '13'), +('9', '77', '11', '80655', '63069', '13'), +('9', '77', '11', '46930', '58335', '13'), +('9', '77', '11', '83539', '53026', '13'), +('9', '78', '22', '12425', '0', '13'), +('9', '78', '22', '21807', '0', '13'), +('9', '78', '22', '24071', '0', '13'), +('9', '78', '22', '39342', '0', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '78', '1', '83594', '18223', '13'), +('9', '78', '1', '39276', '17921', '13'), +('9', '78', '1', '71624', '15618', '13'), +('9', '78', '1', '68949', '15220', '13'), +('9', '78', '2', '70909', '18008', '13'), +('9', '78', '2', '28605', '13578', '13'), +('9', '78', '2', '28648', '13557', '13'), +('9', '78', '2', '53417', '11814', '13'), +('9', '78', '3', '39218', '16941', '13'), +('9', '78', '3', '47245', '14693', '13'), +('9', '78', '3', '80636', '14011', '13'), +('9', '78', '3', '39361', '10994', '13'), +('9', '78', '5', '46918', '20111', '13'), +('9', '78', '5', '39349', '16826', '13'), +('9', '78', '5', '80669', '14360', '13'), +('9', '78', '5', '80616', '13242', '13'), +('9', '78', '8', '46885', '22306', '13'), +('9', '78', '8', '69064', '18029', '13'), +('9', '78', '8', '69165', '17790', '13'), +('9', '78', '8', '46814', '16498', '13'), +('9', '78', '6', '80638', '22852', '13'), +('9', '78', '6', '70717', '17098', '13'), +('9', '78', '6', '68757', '16918', '13'), +('9', '78', '6', '83530', '15291', '13'), +('9', '78', '17', '83604', '20911', '13'), +('9', '78', '17', '53422', '14167', '13'), +('9', '78', '17', '70914', '12982', '13'), +('9', '78', '17', '69151', '11202', '13'), +('9', '78', '7', '68706', '13616', '13'), +('9', '78', '7', '53418', '12205', '13'), +('9', '78', '7', '16097', '10990', '13'), +('9', '78', '7', '83565', '10398', '13'), +('9', '78', '9', '53419', '12275', '13'), +('9', '78', '9', '68766', '12169', '13'), +('9', '78', '9', '46937', '11954', '13'), +('9', '78', '9', '11096', '11360', '13'), +('9', '78', '15', '83458', '14636', '13'), +('9', '78', '15', '79909', '14633', '13'), +('9', '78', '15', '80657', '14302', '13'), +('9', '78', '15', '80627', '13658', '13'), +('9', '78', '20', '80688', '24753', '13'), +('9', '78', '20', '16156', '17159', '13'), +('9', '78', '20', '47283', '15361', '13'), +('9', '78', '20', '46935', '14483', '13'), +('9', '78', '12', '53420', '20357', '13'), +('9', '78', '12', '71080', '14566', '13'), +('9', '78', '12', '47213', '13704', '13'), +('9', '78', '12', '25857', '10312', '13'), +('9', '78', '18', '53423', '13086', '13'), +('9', '78', '18', '70915', '12704', '13'), +('9', '78', '18', '83608', '12192', '13'), +('9', '78', '18', '69147', '10098', '13'), +('9', '78', '19', '69439', '13027', '13'), +('9', '78', '19', '53421', '12455', '13'), +('9', '78', '19', '30569', '10870', '13'), +('9', '78', '19', '19094', '10783', '13'), +('9', '78', '13', '80653', '285121', '13'), +('9', '78', '13', '80613', '276303', '13'), +('9', '78', '13', '46927', '268649', '13'), +('9', '78', '13', '46831', '237881', '13'), +('9', '78', '14', '46856', '217607', '13'), +('9', '78', '14', '46854', '215447', '13'), +('9', '78', '14', '83639', '205005', '13'), +('9', '78', '14', '69052', '168377', '13'), +('9', '78', '11', '69054', '64541', '13'), +('9', '78', '11', '80655', '63069', '13'), +('9', '78', '11', '46930', '58335', '13'), +('9', '78', '11', '83539', '53176', '13'), +('9', '79', '22', '12425', '0', '13'), +('9', '79', '22', '21807', '0', '13'), +('9', '79', '22', '24071', '0', '13'), +('9', '79', '22', '39342', '0', '13'), +('9', '79', '1', '83594', '18223', '13'), +('9', '79', '1', '39276', '17921', '13'), +('9', '79', '1', '71624', '15618', '13'), +('9', '79', '1', '68949', '15220', '13'), +('9', '79', '2', '70909', '18009', '13'), +('9', '79', '2', '28605', '13578', '13'), +('9', '79', '2', '28648', '13557', '13'), +('9', '79', '2', '53417', '11814', '13'), +('9', '79', '3', '39218', '16942', '13'), +('9', '79', '3', '47245', '14693', '13'), +('9', '79', '3', '80636', '14011', '13'), +('9', '79', '3', '39361', '10994', '13'), +('9', '79', '5', '46918', '20111', '13'), +('9', '79', '5', '39349', '16826', '13'), +('9', '79', '5', '80669', '14360', '13'), +('9', '79', '5', '80616', '13242', '13'), +('9', '79', '8', '46885', '22307', '13'), +('9', '79', '8', '69064', '18030', '13'), +('9', '79', '8', '69165', '17790', '13'), +('9', '79', '8', '46814', '16498', '13'), +('9', '79', '6', '80638', '22852', '13'), +('9', '79', '6', '70717', '17099', '13'), +('9', '79', '6', '68757', '16918', '13'), +('9', '79', '6', '83530', '15291', '13'), +('9', '79', '17', '83604', '20911', '13'), +('9', '79', '17', '53422', '14167', '13'), +('9', '79', '17', '70914', '12982', '13'), +('9', '79', '17', '69151', '11202', '13'), +('9', '79', '7', '68706', '13616', '13'), +('9', '79', '7', '53418', '12205', '13'), +('9', '79', '7', '16097', '10990', '13'), +('9', '79', '7', '83565', '10399', '13'), +('9', '79', '9', '53419', '12275', '13'), +('9', '79', '9', '68766', '12169', '13'), +('9', '79', '9', '46937', '11954', '13'), +('9', '79', '9', '11096', '11361', '13'), +('9', '79', '15', '83458', '14636', '13'), +('9', '79', '15', '79909', '14634', '13'), +('9', '79', '15', '80657', '14302', '13'), +('9', '79', '15', '80627', '13659', '13'), +('9', '79', '20', '80688', '24753', '13'), +('9', '79', '20', '16156', '17159', '13'), +('9', '79', '20', '47283', '15361', '13'), +('9', '79', '20', '46935', '14484', '13'), +('9', '79', '12', '53420', '20357', '13'), +('9', '79', '12', '71080', '14566', '13'), +('9', '79', '12', '47213', '13704', '13'), +('9', '79', '12', '25857', '10312', '13'), +('9', '79', '18', '53423', '13086', '13'), +('9', '79', '18', '70915', '12705', '13'), +('9', '79', '18', '83608', '12193', '13'), +('9', '79', '18', '69147', '10099', '13'), +('9', '79', '19', '69439', '13028', '13'), +('9', '79', '19', '53421', '12455', '13'), +('9', '79', '19', '30569', '10870', '13'), +('9', '79', '19', '19094', '10783', '13'), +('9', '79', '13', '80653', '288686', '13'), +('9', '79', '13', '80613', '279955', '13'), +('9', '79', '13', '46927', '271907', '13'), +('9', '79', '13', '46831', '240840', '13'), +('9', '79', '14', '46856', '218930', '13'), +('9', '79', '14', '46854', '216770', '13'), +('9', '79', '14', '83639', '206329', '13'), +('9', '79', '14', '69052', '169502', '13'), +('9', '79', '11', '69054', '64841', '13'), +('9', '79', '11', '80655', '63070', '13'), +('9', '79', '11', '46930', '58336', '13'), +('9', '79', '11', '83539', '53327', '13'), +('9', '80', '22', '12425', '0', '14'), +('9', '80', '22', '21807', '0', '14'), +('9', '80', '22', '24071', '0', '14'), +('9', '80', '22', '39342', '0', '14'), +('9', '80', '1', '102641', '19583', '14'), +('9', '80', '1', '102590', '18557', '14'), +('9', '80', '1', '83594', '18224', '14'), +('9', '80', '1', '102639', '18092', '14'), +('9', '80', '2', '70909', '18009', '14'), +('9', '80', '2', '102010', '14099', '14'), +('9', '80', '2', '28605', '13579', '14'), +('9', '80', '2', '28648', '13557', '14'), +('9', '80', '3', '102591', '19951', '14'), +('9', '80', '3', '102726', '19551', '14'), +('9', '80', '3', '102554', '18340', '14'), +('9', '80', '3', '39218', '16942', '14'), +('9', '80', '5', '46918', '20111', '14'), +('9', '80', '5', '102592', '19985', '14'), +('9', '80', '5', '102745', '18449', '14'), +('9', '80', '5', '102551', '17604', '14'), +('9', '80', '8', '102552', '26311', '14'), +('9', '80', '8', '102527', '23612', '14'), +('9', '80', '8', '46885', '22307', '14'), +('9', '80', '8', '102504', '21627', '14'), +('9', '80', '6', '80638', '22853', '14'), +('9', '80', '6', '102593', '19201', '14'), +('9', '80', '6', '102555', '17355', '14'), +('9', '80', '6', '70717', '17099', '14'), +('9', '80', '17', '83604', '20912', '14'), +('9', '80', '17', '102013', '14448', '14'), +('9', '80', '17', '53422', '14167', '14'), +('9', '80', '17', '102265', '13865', '14'), +('9', '80', '7', '102011', '14534', '14'), +('9', '80', '7', '68706', '13616', '14'), +('9', '80', '7', '102263', '13584', '14'), +('9', '80', '7', '53418', '12206', '14'), +('9', '80', '9', '67098', '22361', '14'), +('9', '80', '9', '53419', '12275', '14'), +('9', '80', '9', '68766', '12169', '14'), +('9', '80', '9', '46937', '11954', '14'), +('9', '80', '15', '102595', '20075', '14'), +('9', '80', '15', '102636', '19904', '14'), +('9', '80', '15', '102637', '19317', '14'), +('9', '80', '15', '102635', '18659', '14'), +('9', '80', '20', '102596', '28148', '14'), +('9', '80', '20', '102553', '25246', '14'), +('9', '80', '20', '80688', '24753', '14'), +('9', '80', '20', '102506', '18308', '14'), +('9', '80', '12', '53420', '20357', '14'), +('9', '80', '12', '71080', '14566', '14'), +('9', '80', '12', '47213', '13704', '14'), +('9', '80', '12', '102260', '12412', '14'), +('9', '80', '18', '102012', '14790', '14'), +('9', '80', '18', '102264', '13415', '14'), +('9', '80', '18', '53423', '13086', '14'), +('9', '80', '18', '70915', '12705', '14'), +('9', '80', '19', '76131', '18100', '14'), +('9', '80', '19', '69439', '13028', '14'), +('9', '80', '19', '53421', '12456', '14'), +('9', '80', '19', '102261', '11942', '14'), +('9', '80', '13', '102660', '391221', '14'), +('9', '80', '13', '102584', '373632', '14'), +('9', '80', '13', '102548', '297279', '14'), +('9', '80', '13', '80653', '292280', '14'), +('9', '80', '14', '46856', '220254', '14'), +('9', '80', '14', '46854', '218094', '14'), +('9', '80', '14', '83639', '207652', '14'), +('9', '80', '14', '102649', '184985', '14'), +('9', '80', '11', '102667', '82372', '14'), +('9', '80', '11', '102589', '72336', '14'), +('9', '80', '11', '69054', '65141', '14'), +('9', '80', '11', '80655', '63070', '14'), +('9', '81', '22', '12425', '0', '14'), +('9', '81', '22', '21807', '0', '14'), +('9', '81', '22', '24071', '0', '14'), +('9', '81', '22', '39342', '0', '14'), +('9', '81', '1', '102641', '19584', '14'), +('9', '81', '1', '102590', '18557', '14'), +('9', '81', '1', '83594', '18224', '14'), +('9', '81', '1', '102639', '18092', '14'), +('9', '81', '2', '70909', '18009', '14'), +('9', '81', '2', '102010', '14099', '14'), +('9', '81', '2', '28605', '13579', '14'), +('9', '81', '2', '28648', '13557', '14'), +('9', '81', '3', '102591', '19952', '14'), +('9', '81', '3', '102726', '19551', '14'), +('9', '81', '3', '102554', '18340', '14'), +('9', '81', '3', '39218', '16942', '14'), +('9', '81', '5', '46918', '20112', '14'), +('9', '81', '5', '102592', '19985', '14'), +('9', '81', '5', '102745', '18449', '14'), +('9', '81', '5', '102551', '17604', '14'), +('9', '81', '8', '102552', '26311', '14'), +('9', '81', '8', '102527', '23613', '14'), +('9', '81', '8', '46885', '22307', '14'), +('9', '81', '8', '102504', '21627', '14'), +('9', '81', '6', '80638', '22853', '14'), +('9', '81', '6', '102593', '19202', '14'), +('9', '81', '6', '102555', '17355', '14'), +('9', '81', '6', '70717', '17099', '14'), +('9', '81', '17', '83604', '20912', '14'), +('9', '81', '17', '102013', '14448', '14'), +('9', '81', '17', '53422', '14167', '14'), +('9', '81', '17', '102265', '13866', '14'), +('9', '81', '7', '102011', '14534', '14'), +('9', '81', '7', '68706', '13616', '14'), +('9', '81', '7', '102263', '13584', '14'), +('9', '81', '7', '53418', '12206', '14'), +('9', '81', '9', '67098', '22641', '14'), +('9', '81', '9', '53419', '12276', '14'), +('9', '81', '9', '68766', '12169', '14'), +('9', '81', '9', '46937', '11954', '14'), +('9', '81', '15', '102595', '20075', '14'), +('9', '81', '15', '102636', '19904', '14'), +('9', '81', '15', '102637', '19317', '14'), +('9', '81', '15', '102635', '18659', '14'), +('9', '81', '20', '102596', '28148', '14'), +('9', '81', '20', '102553', '25247', '14'), +('9', '81', '20', '80688', '24753', '14'), +('9', '81', '20', '102506', '18308', '14'), +('9', '81', '12', '53420', '20357', '14'), +('9', '81', '12', '71080', '14566', '14'), +('9', '81', '12', '47213', '13704', '14'), +('9', '81', '12', '102260', '12412', '14'), +('9', '81', '18', '102012', '14790', '14'), +('9', '81', '18', '102264', '13415', '14'), +('9', '81', '18', '53423', '13087', '14'), +('9', '81', '18', '70915', '12705', '14'), +('9', '81', '19', '76131', '18100', '14'), +('9', '81', '19', '69439', '13028', '14'), +('9', '81', '19', '53421', '12456', '14'), +('9', '81', '19', '102261', '11942', '14'), +('9', '81', '13', '102660', '395901', '14'), +('9', '81', '13', '102584', '378362', '14'), +('9', '81', '13', '102548', '300902', '14'), +('9', '81', '13', '80653', '295903', '14'), +('9', '81', '14', '46856', '221577', '14'), +('9', '81', '14', '46854', '219417', '14'), +('9', '81', '14', '83639', '208975', '14'), +('9', '81', '14', '102649', '185248', '14'), +('9', '81', '11', '102667', '82372', '14'), +('9', '81', '11', '102589', '72336', '14'), +('9', '81', '11', '69054', '65441', '14'), +('9', '81', '11', '80655', '63070', '14'), +('9', '82', '22', '12425', '0', '14'), +('9', '82', '22', '21807', '0', '14'), +('9', '82', '22', '24071', '0', '14'), +('9', '82', '22', '39342', '0', '14'), +('9', '82', '1', '102641', '19584', '14'), +('9', '82', '1', '102590', '18557', '14'), +('9', '82', '1', '83594', '18224', '14'), +('9', '82', '1', '102639', '18092', '14'), +('9', '82', '2', '70909', '18009', '14'), +('9', '82', '2', '102010', '14099', '14'), +('9', '82', '2', '28605', '13579', '14'), +('9', '82', '2', '28648', '13557', '14'), +('9', '82', '3', '102591', '19952', '14'), +('9', '82', '3', '102726', '19552', '14'), +('9', '82', '3', '102554', '18341', '14'), +('9', '82', '3', '39218', '16942', '14'), +('9', '82', '5', '46918', '20112', '14'), +('9', '82', '5', '102592', '19986', '14'), +('9', '82', '5', '102745', '18450', '14'), +('9', '82', '5', '102551', '17604', '14'), +('9', '82', '8', '102552', '26311', '14'), +('9', '82', '8', '102527', '23613', '14'), +('9', '82', '8', '46885', '22308', '14'), +('9', '82', '8', '102504', '21627', '14'), +('9', '82', '6', '80638', '22853', '14'), +('9', '82', '6', '102593', '19202', '14'), +('9', '82', '6', '102555', '17355', '14'), +('9', '82', '6', '70717', '17099', '14'), +('9', '82', '17', '83604', '20912', '14'), +('9', '82', '17', '102013', '14448', '14'), +('9', '82', '17', '53422', '14168', '14'), +('9', '82', '17', '102265', '13866', '14'), +('9', '82', '7', '102011', '14535', '14'), +('9', '82', '7', '68706', '13616', '14'), +('9', '82', '7', '102263', '13584', '14'), +('9', '82', '7', '53418', '12206', '14'), +('9', '82', '9', '67098', '22920', '14'), +('9', '82', '9', '53419', '12276', '14'), +('9', '82', '9', '68766', '12169', '14'), +('9', '82', '9', '46937', '11955', '14'), +('9', '82', '15', '102595', '20075', '14'), +('9', '82', '15', '102636', '19904', '14'), +('9', '82', '15', '102637', '19318', '14'), +('9', '82', '15', '102635', '18659', '14'), +('9', '82', '20', '102596', '28148', '14'), +('9', '82', '20', '102553', '25247', '14'), +('9', '82', '20', '80688', '24754', '14'), +('9', '82', '20', '102506', '18308', '14'), +('9', '82', '12', '53420', '20357', '14'), +('9', '82', '12', '71080', '14566', '14'), +('9', '82', '12', '47213', '13704', '14'), +('9', '82', '12', '102260', '12412', '14'), +('9', '82', '18', '102012', '14790', '14'), +('9', '82', '18', '102264', '13416', '14'), +('9', '82', '18', '53423', '13087', '14'), +('9', '82', '18', '70915', '12705', '14'), +('9', '82', '19', '76131', '18100', '14'), +('9', '82', '19', '69439', '13028', '14'), +('9', '82', '19', '53421', '12456', '14'), +('9', '82', '19', '102261', '11943', '14'), +('9', '82', '13', '102660', '400617', '14'), +('9', '82', '13', '102584', '383130', '14'), +('9', '82', '13', '102548', '304555', '14'), +('9', '82', '13', '80653', '299557', '14'), +('9', '82', '14', '46856', '222900', '14'), +('9', '82', '14', '46854', '220740', '14'), +('9', '82', '14', '83639', '210298', '14'), +('9', '82', '14', '102649', '185511', '14'), +('9', '82', '11', '102667', '82373', '14'), +('9', '82', '11', '102589', '72336', '14'), +('9', '82', '11', '69054', '65742', '14'), +('9', '82', '11', '80655', '63070', '14'), +('9', '83', '22', '12425', '0', '14'), +('9', '83', '22', '21807', '0', '14'), +('9', '83', '22', '24071', '0', '14'), +('9', '83', '22', '39342', '0', '14'), +('9', '83', '1', '102641', '19584', '14'), +('9', '83', '1', '102590', '18558', '14'), +('9', '83', '1', '83594', '18224', '14'), +('9', '83', '1', '102639', '18093', '14'), +('9', '83', '2', '70909', '18010', '14'), +('9', '83', '2', '102010', '14100', '14'), +('9', '83', '2', '28605', '13579', '14'), +('9', '83', '2', '28648', '13557', '14'), +('9', '83', '3', '102591', '19952', '14'), +('9', '83', '3', '102726', '19552', '14'), +('9', '83', '3', '102554', '18341', '14'), +('9', '83', '3', '39218', '16942', '14'), +('9', '83', '5', '46918', '20112', '14'), +('9', '83', '5', '102592', '19986', '14'), +('9', '83', '5', '102745', '18450', '14'), +('9', '83', '5', '102551', '17604', '14'), +('9', '83', '8', '102552', '26312', '14'), +('9', '83', '8', '102527', '23614', '14'), +('9', '83', '8', '46885', '22308', '14'), +('9', '83', '8', '102504', '21628', '14'), +('9', '83', '6', '80638', '22853', '14'), +('9', '83', '6', '102593', '19203', '14'), +('9', '83', '6', '102555', '17356', '14'), +('9', '83', '6', '70717', '17100', '14'), +('9', '83', '17', '83604', '20913', '14'), +('9', '83', '17', '102013', '14448', '14'), +('9', '83', '17', '53422', '14168', '14'), +('9', '83', '17', '102265', '13866', '14'), +('9', '83', '7', '102011', '14535', '14'), +('9', '83', '7', '68706', '13616', '14'), +('9', '83', '7', '102263', '13584', '14'), +('9', '83', '7', '53418', '12206', '14'), +('9', '83', '9', '67098', '23200', '14'), +('9', '83', '9', '53419', '12276', '14'), +('9', '83', '9', '68766', '12169', '14'), +('9', '83', '9', '46937', '11955', '14'), +('9', '83', '15', '102595', '20076', '14'), +('9', '83', '15', '102636', '19904', '14'), +('9', '83', '15', '102637', '19318', '14'), +('9', '83', '15', '102635', '18659', '14'), +('9', '83', '20', '102596', '28148', '14'), +('9', '83', '20', '102553', '25247', '14'), +('9', '83', '20', '80688', '24754', '14'), +('9', '83', '20', '102506', '18309', '14'), +('9', '83', '12', '53420', '20358', '14'), +('9', '83', '12', '71080', '14566', '14'), +('9', '83', '12', '47213', '13704', '14'), +('9', '83', '12', '102260', '12412', '14'), +('9', '83', '18', '102012', '14791', '14'), +('9', '83', '18', '102264', '13416', '14'), +('9', '83', '18', '53423', '13087', '14'), +('9', '83', '18', '70915', '12706', '14'), +('9', '83', '19', '76131', '18100', '14'), +('9', '83', '19', '69439', '13028', '14'), +('9', '83', '19', '53421', '12456', '14'), +('9', '83', '19', '102261', '11943', '14'), +('9', '83', '13', '102660', '405369', '14'), +('9', '83', '13', '102584', '387934', '14'), +('9', '83', '13', '102548', '308238', '14'), +('9', '83', '13', '80653', '303239', '14'), +('9', '83', '14', '46856', '224223', '14'), +('9', '83', '14', '46854', '222063', '14'), +('9', '83', '14', '83639', '211622', '14'), +('9', '83', '14', '102649', '185774', '14'), +('9', '83', '11', '102667', '82373', '14'), +('9', '83', '11', '102589', '72336', '14'), +('9', '83', '11', '69054', '66042', '14'), +('9', '83', '11', '80655', '63071', '14'), +('9', '84', '22', '12425', '0', '14'), +('9', '84', '22', '21807', '0', '14'), +('9', '84', '22', '24071', '0', '14'), +('9', '84', '22', '39342', '0', '14'), +('9', '84', '1', '102641', '19584', '14'), +('9', '84', '1', '102590', '18558', '14'), +('9', '84', '1', '83594', '18224', '14'), +('9', '84', '1', '102639', '18093', '14'), +('9', '84', '2', '70909', '18010', '14'), +('9', '84', '2', '102010', '14100', '14'), +('9', '84', '2', '28605', '13579', '14'), +('9', '84', '2', '28648', '13557', '14'), +('9', '84', '3', '102591', '19952', '14'), +('9', '84', '3', '102726', '19552', '14'), +('9', '84', '3', '102554', '18341', '14'), +('9', '84', '3', '39218', '16942', '14'), +('9', '84', '5', '46918', '20113', '14'), +('9', '84', '5', '102592', '19986', '14'), +('9', '84', '5', '102745', '18450', '14'), +('9', '84', '5', '102551', '17604', '14'), +('9', '84', '8', '102552', '26312', '14'), +('9', '84', '8', '102527', '23614', '14'), +('9', '84', '8', '46885', '22308', '14'), +('9', '84', '8', '102504', '21628', '14'), +('9', '84', '6', '80638', '22854', '14'), +('9', '84', '6', '102593', '19203', '14'), +('9', '84', '6', '102555', '17356', '14'), +('9', '84', '6', '70717', '17100', '14'), +('9', '84', '17', '83604', '20913', '14'), +('9', '84', '17', '102013', '14448', '14'), +('9', '84', '17', '53422', '14168', '14'), +('9', '84', '17', '102265', '13866', '14'), +('9', '84', '7', '102011', '14535', '14'), +('9', '84', '7', '68706', '13617', '14'), +('9', '84', '7', '102263', '13584', '14'), +('9', '84', '7', '53418', '12206', '14'), +('9', '84', '9', '67098', '23480', '14'), +('9', '84', '9', '53419', '12277', '14'), +('9', '84', '9', '68766', '12170', '14'), +('9', '84', '9', '46937', '11955', '14'), +('9', '84', '15', '102595', '20076', '14'), +('9', '84', '15', '102636', '19905', '14'), +('9', '84', '15', '102637', '19318', '14'), +('9', '84', '15', '102635', '18660', '14'), +('9', '84', '20', '102596', '28148', '14'), +('9', '84', '20', '102553', '25248', '14'), +('9', '84', '20', '80688', '24754', '14'), +('9', '84', '20', '102506', '18309', '14'), +('9', '84', '12', '53420', '20358', '14'), +('9', '84', '12', '71080', '14567', '14'), +('9', '84', '12', '47213', '13704', '14'), +('9', '84', '12', '102260', '12412', '14'), +('9', '84', '18', '102012', '14791', '14'), +('9', '84', '18', '102264', '13416', '14'), +('9', '84', '18', '53423', '13087', '14'), +('9', '84', '18', '70915', '12706', '14'), +('9', '84', '19', '76131', '18100', '14'), +('9', '84', '19', '69439', '13028', '14'), +('9', '84', '19', '53421', '12457', '14'), +('9', '84', '19', '102261', '11943', '14'), +('9', '84', '13', '102660', '410157', '14'), +('9', '84', '13', '102584', '392775', '14'), +('9', '84', '13', '102548', '311950', '14'), +('9', '84', '13', '80653', '306951', '14'), +('9', '84', '14', '46856', '225547', '14'), +('9', '84', '14', '46854', '223387', '14'), +('9', '84', '14', '83639', '212945', '14'), +('9', '84', '14', '102649', '186036', '14'), +('9', '84', '11', '102667', '82373', '14'), +('9', '84', '11', '102589', '72336', '14'), +('9', '84', '11', '69054', '66342', '14'), +('9', '84', '11', '80655', '63071', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '85', '22', '24071', '0', '16'), +('9', '85', '22', '12425', '0', '16'), +('9', '85', '22', '39342', '0', '16'), +('9', '85', '22', '7867', '0', '16'), +('9', '85', '1', '111300', '29765', '16'), +('9', '85', '1', '111308', '29611', '16'), +('9', '85', '1', '111302', '29544', '16'), +('9', '85', '1', '111305', '29199', '16'), +('9', '85', '2', '94056', '22220', '16'), +('9', '85', '2', '62985', '20722', '16'), +('9', '85', '2', '70909', '18010', '16'), +('9', '85', '2', '104410', '16669', '16'), +('9', '85', '3', '111315', '29694', '16'), +('9', '85', '3', '111313', '29289', '16'), +('9', '85', '3', '111316', '27990', '16'), +('9', '85', '3', '111014', '27343', '16'), +('9', '85', '5', '111318', '28937', '16'), +('9', '85', '5', '111320', '27603', '16'), +('9', '85', '5', '111319', '27033', '16'), +('9', '85', '5', '111017', '26662', '16'), +('9', '85', '8', '106804', '32488', '16'), +('9', '85', '8', '94070', '30885', '16'), +('9', '85', '8', '111331', '30186', '16'), +('9', '85', '8', '106716', '29874', '16'), +('9', '85', '6', '106803', '32070', '16'), +('9', '85', '6', '106843', '32016', '16'), +('9', '85', '6', '111324', '29207', '16'), +('9', '85', '6', '111322', '29111', '16'), +('9', '85', '17', '56046', '22839', '16'), +('9', '85', '17', '56083', '21082', '16'), +('9', '85', '17', '83604', '20913', '16'), +('9', '85', '17', '81765', '20069', '16'), +('9', '85', '7', '94053', '23375', '16'), +('9', '85', '7', '104411', '21125', '16'), +('9', '85', '7', '56079', '20854', '16'), +('9', '85', '7', '102011', '14535', '16'), +('9', '85', '9', '67098', '23760', '16'), +('9', '85', '9', '56033', '21696', '16'), +('9', '85', '9', '56031', '21649', '16'), +('9', '85', '9', '56070', '21504', '16'), +('9', '85', '15', '111343', '30237', '16'), +('9', '85', '15', '111347', '28597', '16'), +('9', '85', '15', '111345', '28556', '16'), +('9', '85', '15', '111042', '27937', '16'), +('9', '85', '20', '111354', '39579', '16'), +('9', '85', '20', '111352', '38456', '16'), +('9', '85', '20', '111355', '38444', '16'), +('9', '85', '20', '111052', '37279', '16'), +('9', '85', '12', '56073', '20686', '16'), +('9', '85', '12', '53420', '20358', '16'), +('9', '85', '12', '81795', '19885', '16'), +('9', '85', '12', '104408', '18679', '16'), +('9', '85', '18', '62986', '21049', '16'), +('9', '85', '18', '104412', '20674', '16'), +('9', '85', '18', '56041', '20401', '16'), +('9', '85', '18', '94054', '19332', '16'), +('9', '85', '19', '62990', '22524', '16'), +('9', '85', '19', '56037', '21254', '16'), +('9', '85', '19', '104409', '20303', '16'), +('9', '85', '19', '56075', '19366', '16'), +('9', '85', '13', '111523', '634016', '16'), +('9', '85', '13', '111871', '605640', '16'), +('9', '85', '13', '111522', '591389', '16'), +('9', '85', '13', '111223', '559846', '16'), +('9', '85', '14', '111523', '269647', '16'), +('9', '85', '14', '111815', '269093', '16'), +('9', '85', '14', '111871', '268844', '16'), +('9', '85', '14', '111515', '260346', '16'), +('9', '85', '11', '111529', '104846', '16'), +('9', '85', '11', '111229', '100415', '16'), +('9', '85', '11', '106769', '86159', '16'), +('9', '85', '11', '62939', '84446', '16'), +('9', '85', '22', '12425', '0', '15'), +('9', '85', '22', '21807', '0', '15'), +('9', '85', '22', '24071', '0', '15'), +('9', '85', '22', '39342', '0', '15'), +('9', '85', '1', '107054', '26906', '15'), +('9', '85', '1', '107010', '25631', '15'), +('9', '85', '1', '106840', '25156', '15'), +('9', '85', '1', '106800', '24677', '15'), +('9', '85', '2', '94056', '22220', '15'), +('9', '85', '2', '62985', '20722', '15'), +('9', '85', '2', '70909', '18010', '15'), +('9', '85', '2', '104410', '16669', '15'), +('9', '85', '3', '107011', '26365', '15'), +('9', '85', '3', '106801', '24561', '15'), +('9', '85', '3', '107055', '24244', '15'), +('9', '85', '3', '106841', '22916', '15'), +('9', '85', '5', '107012', '25192', '15'), +('9', '85', '5', '106802', '24296', '15'), +('9', '85', '5', '107056', '23865', '15'), +('9', '85', '5', '106714', '22376', '15'), +('9', '85', '8', '106804', '32488', '15'), +('9', '85', '8', '94070', '30885', '15'), +('9', '85', '8', '106716', '29874', '15'), +('9', '85', '8', '106601', '28045', '15'), +('9', '85', '6', '106803', '32070', '15'), +('9', '85', '6', '106843', '32016', '15'), +('9', '85', '6', '106504', '28106', '15'), +('9', '85', '6', '106600', '28021', '15'), +('9', '85', '17', '56046', '22839', '15'), +('9', '85', '17', '56083', '21082', '15'), +('9', '85', '17', '83604', '20913', '15'), +('9', '85', '17', '81765', '20069', '15'), +('9', '85', '7', '94053', '23375', '15'), +('9', '85', '7', '104411', '21125', '15'), +('9', '85', '7', '56079', '20854', '15'), +('9', '85', '7', '102011', '14535', '15'), +('9', '85', '9', '67098', '23760', '15'), +('9', '85', '9', '56033', '21696', '15'), +('9', '85', '9', '56031', '21649', '15'), +('9', '85', '9', '56070', '21504', '15'), +('9', '85', '15', '107016', '23505', '15'), +('9', '85', '15', '107051', '23472', '15'), +('9', '85', '15', '107062', '23104', '15'), +('9', '85', '15', '106837', '22477', '15'), +('9', '85', '20', '107059', '32585', '15'), +('9', '85', '20', '107017', '31212', '15'), +('9', '85', '20', '106845', '30920', '15'), +('9', '85', '20', '62995', '30046', '15'), +('9', '85', '12', '56073', '20686', '15'), +('9', '85', '12', '53420', '20358', '15'), +('9', '85', '12', '81795', '19885', '15'), +('9', '85', '12', '104408', '18679', '15'), +('9', '85', '18', '62986', '21049', '15'), +('9', '85', '18', '104412', '20674', '15'), +('9', '85', '18', '56041', '20401', '15'), +('9', '85', '18', '94054', '19332', '15'), +('9', '85', '19', '62990', '22524', '15'), +('9', '85', '19', '56037', '21254', '15'), +('9', '85', '19', '104409', '20303', '15'), +('9', '85', '19', '56075', '19366', '15'), +('9', '85', '13', '106863', '461353', '15'), +('9', '85', '13', '106763', '425451', '15'), +('9', '85', '13', '62996', '421425', '15'), +('9', '85', '13', '102660', '414980', '15'), +('9', '85', '14', '46856', '226870', '15'), +('9', '85', '14', '46854', '224710', '15'), +('9', '85', '14', '83639', '214268', '15'), +('9', '85', '14', '106854', '213454', '15'), +('9', '85', '11', '106769', '86159', '15'), +('9', '85', '11', '62939', '84446', '15'), +('9', '85', '11', '102667', '82373', '15'), +('9', '85', '11', '106616', '78963', '15'), +('9', '86', '22', '24071', '0', '16'), +('9', '86', '22', '12425', '0', '16'), +('9', '86', '22', '39342', '0', '16'), +('9', '86', '22', '7867', '0', '16'), +('9', '86', '1', '111300', '29765', '16'), +('9', '86', '1', '111308', '29611', '16'), +('9', '86', '1', '111302', '29544', '16'), +('9', '86', '1', '111305', '29199', '16'), +('9', '86', '2', '94056', '22220', '16'), +('9', '86', '2', '62985', '20722', '16'), +('9', '86', '2', '70909', '18010', '16'), +('9', '86', '2', '104410', '16669', '16'), +('9', '86', '3', '111315', '29694', '16'), +('9', '86', '3', '111313', '29290', '16'), +('9', '86', '3', '111316', '27990', '16'), +('9', '86', '3', '111014', '27344', '16'), +('9', '86', '5', '111318', '28938', '16'), +('9', '86', '5', '111320', '27603', '16'), +('9', '86', '5', '111319', '27033', '16'), +('9', '86', '5', '111017', '26662', '16'), +('9', '86', '8', '106804', '32488', '16'), +('9', '86', '8', '94070', '30885', '16'), +('9', '86', '8', '111331', '30187', '16'), +('9', '86', '8', '106716', '29875', '16'), +('9', '86', '6', '106803', '32071', '16'), +('9', '86', '6', '106843', '32017', '16'), +('9', '86', '6', '111324', '29207', '16'), +('9', '86', '6', '111322', '29111', '16'), +('9', '86', '17', '56046', '22839', '16'), +('9', '86', '17', '56083', '21082', '16'), +('9', '86', '17', '83604', '20913', '16'), +('9', '86', '17', '81765', '20069', '16'), +('9', '86', '7', '94053', '23376', '16'), +('9', '86', '7', '104411', '21126', '16'), +('9', '86', '7', '56079', '20854', '16'), +('9', '86', '7', '102011', '14536', '16'), +('9', '86', '9', '67098', '24039', '16'), +('9', '86', '9', '56033', '21696', '16'), +('9', '86', '9', '56031', '21649', '16'), +('9', '86', '9', '56070', '21504', '16'), +('9', '86', '15', '111343', '30237', '16'), +('9', '86', '15', '111347', '28597', '16'), +('9', '86', '15', '111345', '28556', '16'), +('9', '86', '15', '111042', '27937', '16'), +('9', '86', '20', '111354', '39580', '16'), +('9', '86', '20', '111352', '38456', '16'), +('9', '86', '20', '111355', '38444', '16'), +('9', '86', '20', '111052', '37279', '16'), +('9', '86', '12', '56073', '20686', '16'), +('9', '86', '12', '53420', '20358', '16'), +('9', '86', '12', '81795', '19885', '16'), +('9', '86', '12', '104408', '18680', '16'), +('9', '86', '18', '62986', '21049', '16'), +('9', '86', '18', '104412', '20674', '16'), +('9', '86', '18', '56041', '20401', '16'), +('9', '86', '18', '94054', '19332', '16'), +('9', '86', '19', '62990', '22525', '16'), +('9', '86', '19', '56037', '21255', '16'), +('9', '86', '19', '104409', '20304', '16'), +('9', '86', '19', '56075', '19366', '16'), +('9', '86', '13', '111523', '641756', '16'), +('9', '86', '13', '111871', '612829', '16'), +('9', '86', '13', '111522', '598577', '16'), +('9', '86', '13', '111223', '566484', '16'), +('9', '86', '14', '111523', '270128', '16'), +('9', '86', '14', '111815', '269573', '16'), +('9', '86', '14', '111871', '269324', '16'), +('9', '86', '14', '111515', '260826', '16'), +('9', '86', '11', '111529', '104847', '16'), +('9', '86', '11', '111229', '100415', '16'), +('9', '86', '11', '106769', '86160', '16'), +('9', '86', '11', '62939', '84446', '16'), +('9', '87', '22', '24071', '0', '16'), +('9', '87', '22', '12425', '0', '16'), +('9', '87', '22', '39342', '0', '16'), +('9', '87', '22', '7867', '0', '16'), +('9', '87', '1', '111300', '29765', '16'), +('9', '87', '1', '111308', '29611', '16'), +('9', '87', '1', '111302', '29544', '16'), +('9', '87', '1', '111305', '29199', '16'), +('9', '87', '2', '94056', '22220', '16'), +('9', '87', '2', '62985', '20722', '16'), +('9', '87', '2', '70909', '18010', '16'), +('9', '87', '2', '104410', '16669', '16'), +('9', '87', '3', '111315', '29695', '16'), +('9', '87', '3', '111313', '29290', '16'), +('9', '87', '3', '111316', '27991', '16'), +('9', '87', '3', '111014', '27344', '16'), +('9', '87', '5', '111318', '28938', '16'), +('9', '87', '5', '111320', '27603', '16'), +('9', '87', '5', '111319', '27034', '16'), +('9', '87', '5', '111017', '26662', '16'), +('9', '87', '8', '106804', '32489', '16'), +('9', '87', '8', '94070', '30885', '16'), +('9', '87', '8', '111331', '30187', '16'), +('9', '87', '8', '106716', '29875', '16'), +('9', '87', '6', '106803', '32071', '16'), +('9', '87', '6', '106843', '32017', '16'), +('9', '87', '6', '111324', '29207', '16'), +('9', '87', '6', '111322', '29111', '16'), +('9', '87', '17', '56046', '22839', '16'), +('9', '87', '17', '56083', '21083', '16'), +('9', '87', '17', '83604', '20914', '16'), +('9', '87', '17', '81765', '20070', '16'), +('9', '87', '7', '94053', '23376', '16'), +('9', '87', '7', '104411', '21126', '16'), +('9', '87', '7', '56079', '20854', '16'), +('9', '87', '7', '102011', '14536', '16'), +('9', '87', '9', '67098', '24319', '16'), +('9', '87', '9', '56033', '21696', '16'), +('9', '87', '9', '56031', '21649', '16'), +('9', '87', '9', '56070', '21504', '16'), +('9', '87', '15', '111343', '30238', '16'), +('9', '87', '15', '111347', '28597', '16'), +('9', '87', '15', '111345', '28556', '16'), +('9', '87', '15', '111042', '27937', '16'), +('9', '87', '20', '111354', '39580', '16'), +('9', '87', '20', '111352', '38457', '16'), +('9', '87', '20', '111355', '38444', '16'), +('9', '87', '20', '111052', '37279', '16'), +('9', '87', '12', '56073', '20687', '16'), +('9', '87', '12', '53420', '20358', '16'), +('9', '87', '12', '81795', '19885', '16'), +('9', '87', '12', '104408', '18680', '16'), +('9', '87', '18', '62986', '21050', '16'), +('9', '87', '18', '104412', '20674', '16'), +('9', '87', '18', '56041', '20401', '16'), +('9', '87', '18', '94054', '19332', '16'), +('9', '87', '19', '62990', '22525', '16'), +('9', '87', '19', '56037', '21255', '16'), +('9', '87', '19', '104409', '20304', '16'), +('9', '87', '19', '56075', '19366', '16'), +('9', '87', '13', '111523', '649552', '16'), +('9', '87', '13', '111871', '620070', '16'), +('9', '87', '13', '111522', '605819', '16'), +('9', '87', '13', '111223', '573170', '16'), +('9', '87', '14', '111523', '270608', '16'), +('9', '87', '14', '111815', '270053', '16'), +('9', '87', '14', '111871', '269804', '16'), +('9', '87', '14', '111515', '261306', '16'), +('9', '87', '11', '111529', '104847', '16'), +('9', '87', '11', '111229', '100415', '16'), +('9', '87', '11', '106769', '86160', '16'), +('9', '87', '11', '62939', '84446', '16'), +('9', '88', '22', '24071', '0', '16'), +('9', '88', '22', '12425', '0', '16'), +('9', '88', '22', '39342', '0', '16'), +('9', '88', '22', '7867', '0', '16'), +('9', '88', '1', '111300', '29765', '16'), +('9', '88', '1', '111308', '29612', '16'), +('9', '88', '1', '111302', '29545', '16'), +('9', '88', '1', '111305', '29200', '16'), +('9', '88', '2', '94056', '22221', '16'), +('9', '88', '2', '62985', '20722', '16'), +('9', '88', '2', '70909', '18011', '16'), +('9', '88', '2', '104410', '16669', '16'), +('9', '88', '3', '111315', '29695', '16'), +('9', '88', '3', '111313', '29290', '16'), +('9', '88', '3', '111316', '27991', '16'), +('9', '88', '3', '111014', '27345', '16'), +('9', '88', '5', '111318', '28938', '16'), +('9', '88', '5', '111320', '27604', '16'), +('9', '88', '5', '111319', '27034', '16'), +('9', '88', '5', '111017', '26662', '16'), +('9', '88', '8', '106804', '32489', '16'), +('9', '88', '8', '94070', '30886', '16'), +('9', '88', '8', '111331', '30187', '16'), +('9', '88', '8', '106716', '29875', '16'), +('9', '88', '6', '106803', '32071', '16'), +('9', '88', '6', '106843', '32017', '16'), +('9', '88', '6', '111324', '29207', '16'), +('9', '88', '6', '111322', '29111', '16'), +('9', '88', '17', '56046', '22840', '16'), +('9', '88', '17', '56083', '21083', '16'), +('9', '88', '17', '83604', '20914', '16'), +('9', '88', '17', '81765', '20070', '16'), +('9', '88', '7', '94053', '23376', '16'), +('9', '88', '7', '104411', '21126', '16'), +('9', '88', '7', '56079', '20855', '16'), +('9', '88', '7', '102011', '14536', '16'), +('9', '88', '9', '67098', '24599', '16'), +('9', '88', '9', '56033', '21696', '16'), +('9', '88', '9', '56031', '21649', '16'), +('9', '88', '9', '56070', '21504', '16'), +('9', '88', '15', '111343', '30238', '16'), +('9', '88', '15', '111347', '28598', '16'), +('9', '88', '15', '111345', '28556', '16'), +('9', '88', '15', '111042', '27937', '16'), +('9', '88', '20', '111354', '39580', '16'), +('9', '88', '20', '111352', '38457', '16'), +('9', '88', '20', '111355', '38445', '16'), +('9', '88', '20', '111052', '37280', '16'), +('9', '88', '12', '56073', '20687', '16'), +('9', '88', '12', '53420', '20359', '16'), +('9', '88', '12', '81795', '19886', '16'), +('9', '88', '12', '104408', '18680', '16'), +('9', '88', '18', '62986', '21050', '16'), +('9', '88', '18', '104412', '20674', '16'), +('9', '88', '18', '56041', '20401', '16'), +('9', '88', '18', '94054', '19333', '16'), +('9', '88', '19', '62990', '22525', '16'), +('9', '88', '19', '56037', '21255', '16'), +('9', '88', '19', '104409', '20304', '16'), +('9', '88', '19', '56075', '19367', '16'), +('9', '88', '13', '111523', '657406', '16'), +('9', '88', '13', '111871', '627364', '16'), +('9', '88', '13', '111522', '613113', '16'), +('9', '88', '13', '111223', '579905', '16'), +('9', '88', '14', '111523', '271088', '16'), +('9', '88', '14', '111815', '270534', '16'), +('9', '88', '14', '111871', '270284', '16'), +('9', '88', '14', '111515', '261786', '16'), +('9', '88', '11', '111529', '104847', '16'), +('9', '88', '11', '111229', '100415', '16'), +('9', '88', '11', '106769', '86160', '16'), +('9', '88', '11', '62939', '84446', '16'), +('9', '89', '22', '24071', '0', '16'), +('9', '89', '22', '12425', '0', '16'), +('9', '89', '22', '39342', '0', '16'), +('9', '89', '22', '7867', '0', '16'), +('9', '89', '1', '111300', '29766', '16'), +('9', '89', '1', '111308', '29612', '16'), +('9', '89', '1', '111302', '29545', '16'), +('9', '89', '1', '111305', '29200', '16'), +('9', '89', '2', '94056', '22221', '16'), +('9', '89', '2', '62985', '20723', '16'), +('9', '89', '2', '70909', '18011', '16'), +('9', '89', '2', '104410', '16670', '16'), +('9', '89', '3', '111315', '29696', '16'), +('9', '89', '3', '111313', '29290', '16'), +('9', '89', '3', '111316', '27991', '16'), +('9', '89', '3', '111014', '27345', '16'), +('9', '89', '5', '111318', '28938', '16'), +('9', '89', '5', '111320', '27604', '16'), +('9', '89', '5', '111319', '27034', '16'), +('9', '89', '5', '111017', '26663', '16'), +('9', '89', '8', '106804', '32489', '16'), +('9', '89', '8', '94070', '30886', '16'), +('9', '89', '8', '111331', '30188', '16'), +('9', '89', '8', '106716', '29876', '16'), +('9', '89', '6', '106803', '32071', '16'), +('9', '89', '6', '106843', '32018', '16'), +('9', '89', '6', '111324', '29208', '16'), +('9', '89', '6', '111322', '29112', '16'), +('9', '89', '17', '56046', '22840', '16'), +('9', '89', '17', '56083', '21083', '16'), +('9', '89', '17', '83604', '20914', '16'), +('9', '89', '17', '81765', '20070', '16'), +('9', '89', '7', '94053', '23377', '16'), +('9', '89', '7', '104411', '21126', '16'), +('9', '89', '7', '56079', '20855', '16'), +('9', '89', '7', '102011', '14536', '16'), +('9', '89', '9', '67098', '24879', '16'), +('9', '89', '9', '56033', '21696', '16'), +('9', '89', '9', '56031', '21649', '16'), +('9', '89', '9', '56070', '21504', '16'), +('9', '89', '15', '111343', '30238', '16'), +('9', '89', '15', '111347', '28598', '16'), +('9', '89', '15', '111345', '28556', '16'), +('9', '89', '15', '111042', '27937', '16'), +('9', '89', '20', '111354', '39580', '16'), +('9', '89', '20', '111352', '38457', '16'), +('9', '89', '20', '111355', '38445', '16'), +('9', '89', '20', '111052', '37280', '16'), +('9', '89', '12', '56073', '20687', '16'), +('9', '89', '12', '53420', '20359', '16'), +('9', '89', '12', '81795', '19886', '16'), +('9', '89', '12', '104408', '18680', '16'), +('9', '89', '18', '62986', '21050', '16'), +('9', '89', '18', '104412', '20674', '16'), +('9', '89', '18', '56041', '20401', '16'), +('9', '89', '18', '94054', '19333', '16'), +('9', '89', '19', '62990', '22525', '16'), +('9', '89', '19', '56037', '21255', '16'), +('9', '89', '19', '104409', '20305', '16'), +('9', '89', '19', '56075', '19367', '16'), +('9', '89', '13', '111523', '665316', '16'), +('9', '89', '13', '111871', '634711', '16'), +('9', '89', '13', '111522', '620459', '16'), +('9', '89', '13', '111223', '586687', '16'), +('9', '89', '14', '111523', '271568', '16'), +('9', '89', '14', '111815', '271014', '16'), +('9', '89', '14', '111871', '270765', '16'), +('9', '89', '14', '111515', '262267', '16'), +('9', '89', '11', '111529', '104847', '16'), +('9', '89', '11', '111229', '100416', '16'), +('9', '89', '11', '106769', '86160', '16'), +('9', '89', '11', '62939', '84447', '16'), +('9', '90', '22', '24071', '0', '17'), +('9', '90', '22', '12425', '0', '17'), +('9', '90', '22', '39342', '0', '17'), +('9', '90', '22', '7867', '0', '17'), +('9', '90', '1', '111300', '29766', '17'), +('9', '90', '1', '111308', '29612', '17'), +('9', '90', '1', '111302', '29545', '17'), +('9', '90', '1', '111305', '29200', '17'), +('9', '90', '2', '94056', '22221', '17'), +('9', '90', '2', '62985', '20723', '17'), +('9', '90', '2', '70909', '18011', '17'), +('9', '90', '2', '104410', '16670', '17'), +('9', '90', '3', '111315', '29696', '17'), +('9', '90', '3', '111313', '29290', '17'), +('9', '90', '3', '111316', '27991', '17'), +('9', '90', '3', '111014', '27345', '17'), +('9', '90', '5', '111318', '28938', '17'), +('9', '90', '5', '111320', '27604', '17'), +('9', '90', '5', '111319', '27035', '17'), +('9', '90', '5', '111017', '26663', '17'), +('9', '90', '8', '106804', '32489', '17'), +('9', '90', '8', '94070', '30886', '17'), +('9', '90', '8', '111331', '30188', '17'), +('9', '90', '8', '106716', '29876', '17'), +('9', '90', '6', '106803', '32071', '17'), +('9', '90', '6', '106843', '32018', '17'), +('9', '90', '6', '111324', '29208', '17'), +('9', '90', '6', '111322', '29112', '17'), +('9', '90', '17', '56046', '22841', '17'), +('9', '90', '17', '56083', '21083', '17'), +('9', '90', '17', '83604', '20915', '17'), +('9', '90', '17', '81765', '20070', '17'), +('9', '90', '7', '94053', '23377', '17'), +('9', '90', '7', '104411', '21127', '17'), +('9', '90', '7', '56079', '20855', '17'), +('9', '90', '7', '102011', '14537', '17'), +('9', '90', '9', '67098', '25159', '17'), +('9', '90', '9', '56033', '21696', '17'), +('9', '90', '9', '56031', '21650', '17'), +('9', '90', '9', '56070', '21505', '17'), +('9', '90', '15', '111343', '30238', '17'), +('9', '90', '15', '111347', '28598', '17'), +('9', '90', '15', '111345', '28557', '17'), +('9', '90', '15', '111042', '27938', '17'), +('9', '90', '20', '111354', '39581', '17'), +('9', '90', '20', '111352', '38457', '17'), +('9', '90', '20', '111355', '38445', '17'), +('9', '90', '20', '111052', '37280', '17'), +('9', '90', '12', '56073', '20688', '17'), +('9', '90', '12', '53420', '20359', '17'), +('9', '90', '12', '81795', '19886', '17'), +('9', '90', '12', '104408', '18681', '17'), +('9', '90', '18', '62986', '21051', '17'), +('9', '90', '18', '104412', '20674', '17'), +('9', '90', '18', '56041', '20401', '17'), +('9', '90', '18', '94054', '19333', '17'), +('9', '90', '19', '62990', '22526', '17'), +('9', '90', '19', '56037', '21256', '17'), +('9', '90', '19', '104409', '20305', '17'), +('9', '90', '19', '56075', '19367', '17'), +('9', '90', '13', '111523', '673283', '17'), +('9', '90', '13', '111871', '642110', '17'), +('9', '90', '13', '111522', '627858', '17'), +('9', '90', '13', '111223', '593518', '17'), +('9', '90', '14', '111523', '272049', '17'), +('9', '90', '14', '111815', '271494', '17'), +('9', '90', '14', '111871', '271245', '17'), +('9', '90', '14', '111515', '262747', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '90', '11', '111529', '104847', '17'), +('9', '90', '11', '111229', '100416', '17'), +('9', '90', '11', '106769', '86161', '17'), +('9', '90', '11', '62939', '84447', '17'), +('9', '91', '22', '24071', '0', '17'), +('9', '91', '22', '12425', '0', '17'), +('9', '91', '22', '39342', '0', '17'), +('9', '91', '22', '7867', '0', '17'), +('9', '91', '1', '111300', '29766', '17'), +('9', '91', '1', '111308', '29612', '17'), +('9', '91', '1', '111302', '29545', '17'), +('9', '91', '1', '111305', '29200', '17'), +('9', '91', '2', '94056', '22221', '17'), +('9', '91', '2', '62985', '20723', '17'), +('9', '91', '2', '70909', '18011', '17'), +('9', '91', '2', '104410', '16670', '17'), +('9', '91', '3', '111315', '29696', '17'), +('9', '91', '3', '111313', '29290', '17'), +('9', '91', '3', '111316', '27992', '17'), +('9', '91', '3', '111014', '27346', '17'), +('9', '91', '5', '111318', '28939', '17'), +('9', '91', '5', '111320', '27604', '17'), +('9', '91', '5', '111319', '27035', '17'), +('9', '91', '5', '111017', '26663', '17'), +('9', '91', '8', '106804', '32490', '17'), +('9', '91', '8', '94070', '30886', '17'), +('9', '91', '8', '111331', '30188', '17'), +('9', '91', '8', '106716', '29876', '17'), +('9', '91', '6', '106803', '32071', '17'), +('9', '91', '6', '106843', '32018', '17'), +('9', '91', '6', '111324', '29208', '17'), +('9', '91', '6', '111322', '29112', '17'), +('9', '91', '17', '56046', '22841', '17'), +('9', '91', '17', '56083', '21083', '17'), +('9', '91', '17', '83604', '20915', '17'), +('9', '91', '17', '81765', '20070', '17'), +('9', '91', '7', '94053', '23377', '17'), +('9', '91', '7', '104411', '21127', '17'), +('9', '91', '7', '56079', '20856', '17'), +('9', '91', '7', '102011', '14537', '17'), +('9', '91', '9', '67098', '25159', '17'), +('9', '91', '9', '56033', '21697', '17'), +('9', '91', '9', '56031', '21650', '17'), +('9', '91', '9', '56070', '21505', '17'), +('9', '91', '15', '111343', '30238', '17'), +('9', '91', '15', '111347', '28598', '17'), +('9', '91', '15', '111345', '28557', '17'), +('9', '91', '15', '111042', '27938', '17'), +('9', '91', '20', '111354', '39581', '17'), +('9', '91', '20', '111352', '38458', '17'), +('9', '91', '20', '111355', '38445', '17'), +('9', '91', '20', '111052', '37280', '17'), +('9', '91', '12', '56073', '20688', '17'), +('9', '91', '12', '53420', '20359', '17'), +('9', '91', '12', '81795', '19886', '17'), +('9', '91', '12', '104408', '18681', '17'), +('9', '91', '18', '62986', '21051', '17'), +('9', '91', '18', '104412', '20675', '17'), +('9', '91', '18', '56041', '20401', '17'), +('9', '91', '18', '94054', '19333', '17'), +('9', '91', '19', '62990', '22526', '17'), +('9', '91', '19', '56037', '21256', '17'), +('9', '91', '19', '104409', '20305', '17'), +('9', '91', '19', '56075', '19367', '17'), +('9', '91', '13', '111523', '681307', '17'), +('9', '91', '13', '111871', '649561', '17'), +('9', '91', '13', '111522', '635310', '17'), +('9', '91', '13', '111223', '600398', '17'), +('9', '91', '14', '111523', '272529', '17'), +('9', '91', '14', '111815', '271974', '17'), +('9', '91', '14', '111871', '271725', '17'), +('9', '91', '14', '111515', '263227', '17'), +('9', '91', '11', '111529', '104848', '17'), +('9', '91', '11', '111229', '100416', '17'), +('9', '91', '11', '106769', '86161', '17'), +('9', '91', '11', '62939', '84447', '17'), +('9', '92', '22', '24071', '0', '17'), +('9', '92', '22', '12425', '0', '17'), +('9', '92', '22', '39342', '0', '17'), +('9', '92', '22', '7867', '0', '17'), +('9', '92', '1', '111300', '29766', '17'), +('9', '92', '1', '111308', '29613', '17'), +('9', '92', '1', '111302', '29546', '17'), +('9', '92', '1', '111305', '29201', '17'), +('9', '92', '2', '94056', '22222', '17'), +('9', '92', '2', '62985', '20723', '17'), +('9', '92', '2', '70909', '18012', '17'), +('9', '92', '2', '104410', '16670', '17'), +('9', '92', '3', '111315', '29697', '17'), +('9', '92', '3', '111313', '29291', '17'), +('9', '92', '3', '111316', '27992', '17'), +('9', '92', '3', '111014', '27346', '17'), +('9', '92', '5', '111318', '28939', '17'), +('9', '92', '5', '111320', '27605', '17'), +('9', '92', '5', '111319', '27035', '17'), +('9', '92', '5', '111017', '26663', '17'), +('9', '92', '8', '106804', '32490', '17'), +('9', '92', '8', '94070', '30887', '17'), +('9', '92', '8', '111331', '30189', '17'), +('9', '92', '8', '106716', '29877', '17'), +('9', '92', '6', '106803', '32071', '17'), +('9', '92', '6', '106843', '32019', '17'), +('9', '92', '6', '111324', '29209', '17'), +('9', '92', '6', '111322', '29112', '17'), +('9', '92', '17', '56046', '22841', '17'), +('9', '92', '17', '56083', '21083', '17'), +('9', '92', '17', '83604', '20915', '17'), +('9', '92', '17', '81765', '20071', '17'), +('9', '92', '7', '94053', '23377', '17'), +('9', '92', '7', '104411', '21127', '17'), +('9', '92', '7', '56079', '20856', '17'), +('9', '92', '7', '102011', '14537', '17'), +('9', '92', '9', '67098', '25159', '17'), +('9', '92', '9', '56033', '21697', '17'), +('9', '92', '9', '56031', '21650', '17'), +('9', '92', '9', '56070', '21505', '17'), +('9', '92', '15', '111343', '30239', '17'), +('9', '92', '15', '111347', '28599', '17'), +('9', '92', '15', '111345', '28557', '17'), +('9', '92', '15', '111042', '27938', '17'), +('9', '92', '20', '111354', '39581', '17'), +('9', '92', '20', '111352', '38458', '17'), +('9', '92', '20', '111355', '38445', '17'), +('9', '92', '20', '111052', '37281', '17'), +('9', '92', '12', '56073', '20688', '17'), +('9', '92', '12', '53420', '20360', '17'), +('9', '92', '12', '81795', '19887', '17'), +('9', '92', '12', '104408', '18681', '17'), +('9', '92', '18', '62986', '21051', '17'), +('9', '92', '18', '104412', '20675', '17'), +('9', '92', '18', '56041', '20401', '17'), +('9', '92', '18', '94054', '19334', '17'), +('9', '92', '19', '62990', '22526', '17'), +('9', '92', '19', '56037', '21256', '17'), +('9', '92', '19', '104409', '20306', '17'), +('9', '92', '19', '56075', '19368', '17'), +('9', '92', '13', '111523', '689388', '17'), +('9', '92', '13', '111871', '657066', '17'), +('9', '92', '13', '111522', '642814', '17'), +('9', '92', '13', '111223', '607325', '17'), +('9', '92', '14', '111523', '273009', '17'), +('9', '92', '14', '111815', '272455', '17'), +('9', '92', '14', '111871', '272206', '17'), +('9', '92', '14', '111515', '263707', '17'), +('9', '92', '11', '111529', '104848', '17'), +('9', '92', '11', '111229', '100416', '17'), +('9', '92', '11', '106769', '86161', '17'), +('9', '92', '11', '62939', '84448', '17'), +('9', '93', '22', '24071', '0', '17'), +('9', '93', '22', '12425', '0', '17'), +('9', '93', '22', '39342', '0', '17'), +('9', '93', '22', '7867', '0', '17'), +('9', '93', '1', '111300', '29766', '17'), +('9', '93', '1', '111308', '29613', '17'), +('9', '93', '1', '111302', '29546', '17'), +('9', '93', '1', '111305', '29201', '17'), +('9', '93', '2', '94056', '22222', '17'), +('9', '93', '2', '62985', '20723', '17'), +('9', '93', '2', '70909', '18012', '17'), +('9', '93', '2', '104410', '16671', '17'), +('9', '93', '3', '111315', '29697', '17'), +('9', '93', '3', '111313', '29291', '17'), +('9', '93', '3', '111316', '27992', '17'), +('9', '93', '3', '111014', '27346', '17'), +('9', '93', '5', '111318', '28939', '17'), +('9', '93', '5', '111320', '27605', '17'), +('9', '93', '5', '111319', '27036', '17'), +('9', '93', '5', '111017', '26663', '17'), +('9', '93', '8', '106804', '32490', '17'), +('9', '93', '8', '94070', '30887', '17'), +('9', '93', '8', '111331', '30189', '17'), +('9', '93', '8', '106716', '29877', '17'), +('9', '93', '6', '106803', '32071', '17'), +('9', '93', '6', '106843', '32019', '17'), +('9', '93', '6', '111324', '29209', '17'), +('9', '93', '6', '111322', '29112', '17'), +('9', '93', '17', '56046', '22842', '17'), +('9', '93', '17', '56083', '21084', '17'), +('9', '93', '17', '83604', '20916', '17'), +('9', '93', '17', '81765', '20071', '17'), +('9', '93', '7', '94053', '23378', '17'), +('9', '93', '7', '104411', '21127', '17'), +('9', '93', '7', '56079', '20856', '17'), +('9', '93', '7', '102011', '14537', '17'), +('9', '93', '9', '67098', '25159', '17'), +('9', '93', '9', '56033', '21697', '17'), +('9', '93', '9', '56031', '21650', '17'), +('9', '93', '9', '56070', '21505', '17'), +('9', '93', '15', '111343', '30239', '17'), +('9', '93', '15', '111347', '28599', '17'), +('9', '93', '15', '111345', '28557', '17'), +('9', '93', '15', '111042', '27938', '17'), +('9', '93', '20', '111354', '39581', '17'), +('9', '93', '20', '111352', '38458', '17'), +('9', '93', '20', '111355', '38446', '17'), +('9', '93', '20', '111052', '37281', '17'), +('9', '93', '12', '56073', '20689', '17'), +('9', '93', '12', '53420', '20360', '17'), +('9', '93', '12', '81795', '19887', '17'), +('9', '93', '12', '104408', '18681', '17'), +('9', '93', '18', '62986', '21052', '17'), +('9', '93', '18', '104412', '20675', '17'), +('9', '93', '18', '56041', '20402', '17'), +('9', '93', '18', '94054', '19334', '17'), +('9', '93', '19', '62990', '22526', '17'), +('9', '93', '19', '56037', '21256', '17'), +('9', '93', '19', '104409', '20306', '17'), +('9', '93', '19', '56075', '19368', '17'), +('9', '93', '13', '111523', '697526', '17'), +('9', '93', '13', '111871', '664623', '17'), +('9', '93', '13', '111522', '650371', '17'), +('9', '93', '13', '111223', '614301', '17'), +('9', '93', '14', '111523', '273489', '17'), +('9', '93', '14', '111815', '272935', '17'), +('9', '93', '14', '111871', '272686', '17'), +('9', '93', '14', '111515', '264188', '17'), +('9', '93', '11', '111529', '104848', '17'), +('9', '93', '11', '111229', '100417', '17'), +('9', '93', '11', '106769', '86161', '17'), +('9', '93', '11', '62939', '84448', '17'), +('9', '94', '22', '24071', '0', '17'), +('9', '94', '22', '12425', '0', '17'), +('9', '94', '22', '39342', '0', '17'), +('9', '94', '22', '7867', '0', '17'), +('9', '94', '1', '111300', '29767', '17'), +('9', '94', '1', '111308', '29613', '17'), +('9', '94', '1', '111302', '29546', '17'), +('9', '94', '1', '111305', '29201', '17'), +('9', '94', '2', '94056', '22222', '17'), +('9', '94', '2', '62985', '20723', '17'), +('9', '94', '2', '70909', '18012', '17'), +('9', '94', '2', '104410', '16671', '17'), +('9', '94', '3', '111315', '29697', '17'), +('9', '94', '3', '111313', '29291', '17'), +('9', '94', '3', '111316', '27992', '17'), +('9', '94', '3', '111014', '27347', '17'), +('9', '94', '5', '111318', '28939', '17'), +('9', '94', '5', '111320', '27605', '17'), +('9', '94', '5', '111319', '27036', '17'), +('9', '94', '5', '111017', '26664', '17'), +('9', '94', '8', '106804', '32490', '17'), +('9', '94', '8', '94070', '30887', '17'), +('9', '94', '8', '111331', '30189', '17'), +('9', '94', '8', '106716', '29877', '17'), +('9', '94', '6', '106803', '32071', '17'), +('9', '94', '6', '106843', '32019', '17'), +('9', '94', '6', '111324', '29209', '17'), +('9', '94', '6', '111322', '29113', '17'), +('9', '94', '17', '56046', '22842', '17'), +('9', '94', '17', '56083', '21084', '17'), +('9', '94', '17', '83604', '20916', '17'), +('9', '94', '17', '81765', '20071', '17'), +('9', '94', '7', '94053', '23378', '17'), +('9', '94', '7', '104411', '21127', '17'), +('9', '94', '7', '56079', '20857', '17'), +('9', '94', '7', '102011', '14538', '17'), +('9', '94', '9', '67098', '25160', '17'), +('9', '94', '9', '56033', '21697', '17'), +('9', '94', '9', '56031', '21650', '17'), +('9', '94', '9', '56070', '21505', '17'), +('9', '94', '15', '111343', '30239', '17'), +('9', '94', '15', '111347', '28599', '17'), +('9', '94', '15', '111345', '28557', '17'), +('9', '94', '15', '111042', '27938', '17'), +('9', '94', '20', '111354', '39582', '17'), +('9', '94', '20', '111352', '38458', '17'), +('9', '94', '20', '111355', '38446', '17'), +('9', '94', '20', '111052', '37281', '17'), +('9', '94', '12', '56073', '20689', '17'), +('9', '94', '12', '53420', '20360', '17'), +('9', '94', '12', '81795', '19887', '17'), +('9', '94', '12', '104408', '18682', '17'), +('9', '94', '18', '62986', '21052', '17'), +('9', '94', '18', '104412', '20675', '17'), +('9', '94', '18', '56041', '20402', '17'), +('9', '94', '18', '94054', '19334', '17'), +('9', '94', '19', '62990', '22527', '17'), +('9', '94', '19', '56037', '21257', '17'), +('9', '94', '19', '104409', '20306', '17'), +('9', '94', '19', '56075', '19368', '17'), +('9', '94', '13', '111523', '705721', '17'), +('9', '94', '13', '111871', '672232', '17'), +('9', '94', '13', '111522', '657980', '17'), +('9', '94', '13', '111223', '621325', '17'), +('9', '94', '14', '111523', '273970', '17'), +('9', '94', '14', '111815', '273415', '17'), +('9', '94', '14', '111871', '273166', '17'), +('9', '94', '14', '111515', '264668', '17'), +('9', '94', '11', '111529', '104848', '17'), +('9', '94', '11', '111229', '100417', '17'), +('9', '94', '11', '106769', '86162', '17'), +('9', '94', '11', '62939', '84448', '17'), +('9', '95', '22', '39342', '0', '18'), +('9', '95', '22', '24071', '0', '18'), +('9', '95', '22', '12425', '0', '18'), +('9', '95', '22', '7867', '0', '18'), +('9', '95', '1', '111300', '29767', '18'), +('9', '95', '1', '111308', '29614', '18'), +('9', '95', '1', '111302', '29547', '18'), +('9', '95', '1', '111305', '29201', '18'), +('9', '95', '2', '94056', '22222', '18'), +('9', '95', '2', '62985', '20723', '18'), +('9', '95', '2', '70909', '18013', '18'), +('9', '95', '2', '104410', '16671', '18'), +('9', '95', '3', '111315', '29698', '18'), +('9', '95', '3', '111313', '29291', '18'), +('9', '95', '3', '111316', '27993', '18'), +('9', '95', '3', '111014', '27347', '18'), +('9', '95', '5', '111318', '28939', '18'), +('9', '95', '5', '111320', '27606', '18'), +('9', '95', '5', '111319', '27036', '18'), +('9', '95', '5', '111017', '26664', '18'), +('9', '95', '8', '106804', '32491', '18'), +('9', '95', '8', '94070', '30887', '18'), +('9', '95', '8', '111331', '30189', '18'), +('9', '95', '8', '106716', '29878', '18'), +('9', '95', '6', '106803', '32071', '18'), +('9', '95', '6', '106843', '32020', '18'), +('9', '95', '6', '111324', '29209', '18'), +('9', '95', '6', '111322', '29113', '18'), +('9', '95', '17', '56046', '22842', '18'), +('9', '95', '17', '56083', '21084', '18'), +('9', '95', '17', '83604', '20916', '18'), +('9', '95', '17', '81765', '20071', '18'), +('9', '95', '7', '94053', '23378', '18'), +('9', '95', '7', '104411', '21128', '18'), +('9', '95', '7', '56079', '20857', '18'), +('9', '95', '7', '102011', '14538', '18'), +('9', '95', '9', '67098', '25160', '18'), +('9', '95', '9', '56033', '21697', '18'), +('9', '95', '9', '56031', '21650', '18'), +('9', '95', '9', '56070', '21505', '18'), +('9', '95', '15', '111343', '30239', '18'), +('9', '95', '15', '111347', '28600', '18'), +('9', '95', '15', '111345', '28558', '18'), +('9', '95', '15', '111042', '27939', '18'), +('9', '95', '20', '111354', '39582', '18'), +('9', '95', '20', '111352', '38459', '18'), +('9', '95', '20', '111355', '38446', '18'), +('9', '95', '20', '111052', '37281', '18'), +('9', '95', '12', '56073', '20690', '18'), +('9', '95', '12', '53420', '20360', '18'), +('9', '95', '12', '81795', '19888', '18'), +('9', '95', '12', '104408', '18682', '18'), +('9', '95', '18', '62986', '21053', '18'), +('9', '95', '18', '104412', '20675', '18'), +('9', '95', '18', '56041', '20402', '18'), +('9', '95', '18', '94054', '19335', '18'), +('9', '95', '19', '62990', '22527', '18'), +('9', '95', '19', '56037', '21257', '18'), +('9', '95', '19', '104409', '20307', '18'), +('9', '95', '19', '56075', '19368', '18'), +('9', '95', '13', '111523', '713972', '18'), +('9', '95', '13', '111871', '679894', '18'), +('9', '95', '13', '111522', '665642', '18'), +('9', '95', '13', '111223', '628397', '18'), +('9', '95', '14', '111523', '274450', '18'), +('9', '95', '14', '111815', '273896', '18'), +('9', '95', '14', '111871', '273646', '18'), +('9', '95', '14', '111515', '265148', '18'), +('9', '95', '11', '111529', '104849', '18'), +('9', '95', '11', '111229', '100417', '18'), +('9', '95', '11', '106769', '86162', '18'), +('9', '95', '11', '62939', '84448', '18'), +('9', '96', '22', '39342', '0', '18'), +('9', '96', '22', '24071', '0', '18'), +('9', '96', '22', '12425', '0', '18'), +('9', '96', '22', '7867', '0', '18'), +('9', '96', '1', '111300', '29767', '18'), +('9', '96', '1', '111308', '29614', '18'), +('9', '96', '1', '111302', '29547', '18'), +('9', '96', '1', '111305', '29202', '18'), +('9', '96', '2', '94056', '22223', '18'), +('9', '96', '2', '62985', '20724', '18'), +('9', '96', '2', '70909', '18013', '18'), +('9', '96', '2', '104410', '16671', '18'), +('9', '96', '3', '111315', '29698', '18'), +('9', '96', '3', '111313', '29291', '18'), +('9', '96', '3', '111316', '27993', '18'), +('9', '96', '3', '111014', '27348', '18'), +('9', '96', '5', '111318', '28940', '18'), +('9', '96', '5', '111320', '27606', '18'), +('9', '96', '5', '111319', '27037', '18'), +('9', '96', '5', '111017', '26664', '18'), +('9', '96', '8', '106804', '32491', '18'), +('9', '96', '8', '94070', '30888', '18'), +('9', '96', '8', '111331', '30190', '18'), +('9', '96', '8', '106716', '29878', '18'), +('9', '96', '6', '106803', '32071', '18'), +('9', '96', '6', '106843', '32020', '18'), +('9', '96', '6', '111324', '29210', '18'), +('9', '96', '6', '111322', '29113', '18'), +('9', '96', '17', '56046', '22843', '18'), +('9', '96', '17', '56083', '21084', '18'), +('9', '96', '17', '83604', '20916', '18'), +('9', '96', '17', '81765', '20072', '18'), +('9', '96', '7', '94053', '23378', '18'), +('9', '96', '7', '104411', '21128', '18'), +('9', '96', '7', '56079', '20857', '18'), +('9', '96', '7', '102011', '14538', '18'), +('9', '96', '9', '67098', '25160', '18'), +('9', '96', '9', '56033', '21697', '18'), +('9', '96', '9', '56031', '21651', '18'), +('9', '96', '9', '56070', '21505', '18'), +('9', '96', '15', '111343', '30239', '18'), +('9', '96', '15', '111347', '28600', '18'), +('9', '96', '15', '111345', '28558', '18'), +('9', '96', '15', '111042', '27939', '18'), +('9', '96', '20', '111354', '39582', '18'), +('9', '96', '20', '111352', '38459', '18'), +('9', '96', '20', '111355', '38446', '18'), +('9', '96', '20', '111052', '37281', '18'), +('9', '96', '12', '56073', '20690', '18'), +('9', '96', '12', '53420', '20360', '18'), +('9', '96', '12', '81795', '19888', '18'), +('9', '96', '12', '104408', '18682', '18'), +('9', '96', '18', '62986', '21053', '18'), +('9', '96', '18', '104412', '20675', '18'), +('9', '96', '18', '56041', '20402', '18'), +('9', '96', '18', '94054', '19335', '18'), +('9', '96', '19', '62990', '22527', '18'), +('9', '96', '19', '56037', '21257', '18'), +('9', '96', '19', '104409', '20307', '18'), +('9', '96', '19', '56075', '19369', '18'), +('9', '96', '13', '111523', '722281', '18'), +('9', '96', '13', '111871', '687608', '18'), +('9', '96', '13', '111522', '673356', '18'), +('9', '96', '13', '111223', '635518', '18'), +('9', '96', '14', '111523', '274930', '18'), +('9', '96', '14', '111815', '274376', '18'), +('9', '96', '14', '111871', '274127', '18'), +('9', '96', '14', '111515', '265628', '18'), +('9', '96', '11', '111529', '104849', '18'), +('9', '96', '11', '111229', '100417', '18'), +('9', '96', '11', '106769', '86162', '18'), +('9', '96', '11', '62939', '84449', '18'), +('9', '97', '22', '39342', '0', '18'), +('9', '97', '22', '24071', '0', '18'), +('9', '97', '22', '12425', '0', '18'), +('9', '97', '22', '7867', '0', '18'), +('9', '97', '1', '111300', '29767', '18'), +('9', '97', '1', '111308', '29614', '18'), +('9', '97', '1', '111302', '29547', '18'), +('9', '97', '1', '111305', '29202', '18'), +('9', '97', '2', '94056', '22223', '18'), +('9', '97', '2', '62985', '20724', '18'), +('9', '97', '2', '70909', '18013', '18'), +('9', '97', '2', '104410', '16672', '18'), +('9', '97', '3', '111315', '29699', '18'), +('9', '97', '3', '111313', '29292', '18'), +('9', '97', '3', '111316', '27993', '18'), +('9', '97', '3', '111014', '27348', '18'), +('9', '97', '5', '111318', '28940', '18'), +('9', '97', '5', '111320', '27606', '18'), +('9', '97', '5', '111319', '27037', '18'), +('9', '97', '5', '111017', '26664', '18'), +('9', '97', '8', '106804', '32491', '18'), +('9', '97', '8', '94070', '30888', '18'), +('9', '97', '8', '111331', '30190', '18'), +('9', '97', '8', '106716', '29878', '18'), +('9', '97', '6', '106803', '32071', '18'), +('9', '97', '6', '106843', '32020', '18'), +('9', '97', '6', '111324', '29210', '18'), +('9', '97', '6', '111322', '29113', '18'), +('9', '97', '17', '56046', '22843', '18'), +('9', '97', '17', '56083', '21084', '18'), +('9', '97', '17', '83604', '20917', '18'), +('9', '97', '17', '81765', '20072', '18'), +('9', '97', '7', '94053', '23379', '18'), +('9', '97', '7', '104411', '21128', '18'), +('9', '97', '7', '56079', '20857', '18'), +('9', '97', '7', '102011', '14538', '18'), +('9', '97', '9', '67098', '25160', '18'), +('9', '97', '9', '56033', '21697', '18'), +('9', '97', '9', '56031', '21651', '18'), +('9', '97', '9', '56070', '21505', '18'), +('9', '97', '15', '111343', '30239', '18'), +('9', '97', '15', '111347', '28600', '18'), +('9', '97', '15', '111345', '28558', '18'), +('9', '97', '15', '111042', '27939', '18'), +('9', '97', '20', '111354', '39582', '18'), +('9', '97', '20', '111352', '38459', '18'), +('9', '97', '20', '111355', '38446', '18'), +('9', '97', '20', '111052', '37282', '18'), +('9', '97', '12', '56073', '20690', '18'), +('9', '97', '12', '53420', '20361', '18'), +('9', '97', '12', '81795', '19888', '18'), +('9', '97', '12', '104408', '18682', '18'), +('9', '97', '18', '62986', '21053', '18'), +('9', '97', '18', '104412', '20675', '18'), +('9', '97', '18', '56041', '20402', '18'), +('9', '97', '18', '94054', '19335', '18'), +('9', '97', '19', '62990', '22527', '18'), +('9', '97', '19', '56037', '21257', '18'), +('9', '97', '19', '104409', '20307', '18'), +('9', '97', '19', '56075', '19369', '18'), +('9', '97', '13', '111523', '730646', '18'), +('9', '97', '13', '111871', '695375', '18'), +('9', '97', '13', '111522', '681123', '18'), +('9', '97', '13', '111223', '642686', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '97', '14', '111523', '275411', '18'), +('9', '97', '14', '111815', '274856', '18'), +('9', '97', '14', '111871', '274607', '18'), +('9', '97', '14', '111515', '266109', '18'), +('9', '97', '11', '111529', '104849', '18'), +('9', '97', '11', '111229', '100418', '18'), +('9', '97', '11', '106769', '86162', '18'), +('9', '97', '11', '62939', '84449', '18'), +('9', '98', '22', '39342', '0', '18'), +('9', '98', '22', '24071', '0', '18'), +('9', '98', '22', '12425', '0', '18'), +('9', '98', '22', '7867', '0', '18'), +('9', '98', '1', '111300', '29767', '18'), +('9', '98', '1', '111308', '29614', '18'), +('9', '98', '1', '111302', '29548', '18'), +('9', '98', '1', '111305', '29202', '18'), +('9', '98', '2', '94056', '22223', '18'), +('9', '98', '2', '62985', '20724', '18'), +('9', '98', '2', '70909', '18013', '18'), +('9', '98', '2', '104410', '16672', '18'), +('9', '98', '3', '111315', '29699', '18'), +('9', '98', '3', '111313', '29292', '18'), +('9', '98', '3', '111316', '27993', '18'), +('9', '98', '3', '111014', '27348', '18'), +('9', '98', '5', '111318', '28940', '18'), +('9', '98', '5', '111320', '27606', '18'), +('9', '98', '5', '111319', '27037', '18'), +('9', '98', '5', '111017', '26664', '18'), +('9', '98', '8', '106804', '32491', '18'), +('9', '98', '8', '94070', '30888', '18'), +('9', '98', '8', '111331', '30190', '18'), +('9', '98', '8', '106716', '29879', '18'), +('9', '98', '6', '106803', '32072', '18'), +('9', '98', '6', '106843', '32021', '18'), +('9', '98', '6', '111324', '29210', '18'), +('9', '98', '6', '111322', '29114', '18'), +('9', '98', '17', '56046', '22843', '18'), +('9', '98', '17', '56083', '21084', '18'), +('9', '98', '17', '83604', '20917', '18'), +('9', '98', '17', '81765', '20072', '18'), +('9', '98', '7', '94053', '23379', '18'), +('9', '98', '7', '104411', '21128', '18'), +('9', '98', '7', '56079', '20858', '18'), +('9', '98', '7', '102011', '14539', '18'), +('9', '98', '9', '67098', '25160', '18'), +('9', '98', '9', '56033', '21698', '18'), +('9', '98', '9', '56031', '21651', '18'), +('9', '98', '9', '56070', '21505', '18'), +('9', '98', '15', '111343', '30240', '18'), +('9', '98', '15', '111347', '28601', '18'), +('9', '98', '15', '111345', '28558', '18'), +('9', '98', '15', '111042', '27939', '18'), +('9', '98', '20', '111354', '39583', '18'), +('9', '98', '20', '111352', '38460', '18'), +('9', '98', '20', '111355', '38446', '18'), +('9', '98', '20', '111052', '37282', '18'), +('9', '98', '12', '56073', '20691', '18'), +('9', '98', '12', '53420', '20361', '18'), +('9', '98', '12', '81795', '19889', '18'), +('9', '98', '12', '104408', '18683', '18'), +('9', '98', '18', '62986', '21054', '18'), +('9', '98', '18', '104412', '20675', '18'), +('9', '98', '18', '56041', '20402', '18'), +('9', '98', '18', '94054', '19335', '18'), +('9', '98', '19', '62990', '22528', '18'), +('9', '98', '19', '56037', '21258', '18'), +('9', '98', '19', '104409', '20308', '18'), +('9', '98', '19', '56075', '19369', '18'), +('9', '98', '13', '111523', '739068', '18'), +('9', '98', '13', '111871', '703195', '18'), +('9', '98', '13', '111522', '688943', '18'), +('9', '98', '13', '111223', '649903', '18'), +('9', '98', '14', '111523', '275891', '18'), +('9', '98', '14', '111815', '275336', '18'), +('9', '98', '14', '111871', '275087', '18'), +('9', '98', '14', '111515', '266589', '18'), +('9', '98', '11', '111529', '104849', '18'), +('9', '98', '11', '111229', '100418', '18'), +('9', '98', '11', '106769', '86163', '18'), +('9', '98', '11', '62939', '84449', '18'), +('9', '99', '22', '39342', '0', '18'), +('9', '99', '22', '24071', '0', '18'), +('9', '99', '22', '12425', '0', '18'), +('9', '99', '22', '7867', '0', '18'), +('9', '99', '1', '111300', '29768', '18'), +('9', '99', '1', '111308', '29615', '18'), +('9', '99', '1', '111302', '29548', '18'), +('9', '99', '1', '111305', '29202', '18'), +('9', '99', '2', '94056', '22223', '18'), +('9', '99', '2', '62985', '20724', '18'), +('9', '99', '2', '70909', '18014', '18'), +('9', '99', '2', '104410', '16672', '18'), +('9', '99', '3', '111315', '29699', '18'), +('9', '99', '3', '111313', '29292', '18'), +('9', '99', '3', '111316', '27994', '18'), +('9', '99', '3', '111014', '27349', '18'), +('9', '99', '5', '111318', '28940', '18'), +('9', '99', '5', '111320', '27607', '18'), +('9', '99', '5', '111319', '27038', '18'), +('9', '99', '5', '111017', '26665', '18'), +('9', '99', '8', '106804', '32492', '18'), +('9', '99', '8', '94070', '30888', '18'), +('9', '99', '8', '111331', '30191', '18'), +('9', '99', '8', '106716', '29879', '18'), +('9', '99', '6', '106803', '32072', '18'), +('9', '99', '6', '106843', '32021', '18'), +('9', '99', '6', '111324', '29211', '18'), +('9', '99', '6', '111322', '29114', '18'), +('9', '99', '17', '56046', '22844', '18'), +('9', '99', '17', '56083', '21084', '18'), +('9', '99', '17', '83604', '20917', '18'), +('9', '99', '17', '81765', '20072', '18'), +('9', '99', '7', '94053', '23379', '18'), +('9', '99', '7', '104411', '21129', '18'), +('9', '99', '7', '56079', '20858', '18'), +('9', '99', '7', '102011', '14539', '18'), +('9', '99', '9', '67098', '25161', '18'), +('9', '99', '9', '56033', '21698', '18'), +('9', '99', '9', '56031', '21651', '18'), +('9', '99', '9', '56070', '21506', '18'), +('9', '99', '15', '111343', '30240', '18'), +('9', '99', '15', '111347', '28601', '18'), +('9', '99', '15', '111345', '28558', '18'), +('9', '99', '15', '111042', '27939', '18'), +('9', '99', '20', '111354', '39583', '18'), +('9', '99', '20', '111352', '38460', '18'), +('9', '99', '20', '111355', '38447', '18'), +('9', '99', '20', '111052', '37282', '18'), +('9', '99', '12', '56073', '20691', '18'), +('9', '99', '12', '53420', '20361', '18'), +('9', '99', '12', '81795', '19889', '18'), +('9', '99', '12', '104408', '18683', '18'), +('9', '99', '18', '62986', '21054', '18'), +('9', '99', '18', '104412', '20676', '18'), +('9', '99', '18', '56041', '20402', '18'), +('9', '99', '18', '94054', '19336', '18'), +('9', '99', '19', '62990', '22528', '18'), +('9', '99', '19', '56037', '21258', '18'), +('9', '99', '19', '104409', '20308', '18'), +('9', '99', '19', '56075', '19369', '18'), +('9', '99', '13', '111523', '747548', '18'), +('9', '99', '13', '111871', '711067', '18'), +('9', '99', '13', '111522', '696815', '18'), +('9', '99', '13', '111223', '657169', '18'), +('9', '99', '14', '111523', '276371', '18'), +('9', '99', '14', '111815', '275817', '18'), +('9', '99', '14', '111871', '275568', '18'), +('9', '99', '14', '111515', '267069', '18'), +('9', '99', '11', '111529', '104850', '18'), +('9', '99', '11', '111229', '100418', '18'), +('9', '99', '11', '106769', '86163', '18'), +('9', '99', '11', '62939', '84450', '18'), +('9', '100', '22', '39342', '0', '20'), +('9', '100', '22', '24071', '0', '20'), +('9', '100', '22', '12425', '0', '20'), +('9', '100', '22', '7867', '0', '20'), +('9', '100', '1', '98769', '37501', '20'), +('9', '100', '1', '111300', '29768', '20'), +('9', '100', '1', '111308', '29615', '20'), +('9', '100', '1', '111302', '29548', '20'), +('9', '100', '2', '94056', '22223', '20'), +('9', '100', '2', '62985', '20724', '20'), +('9', '100', '2', '70909', '18014', '20'), +('9', '100', '2', '104410', '16672', '20'), +('9', '100', '3', '111315', '29700', '20'), +('9', '100', '3', '111313', '29292', '20'), +('9', '100', '3', '111316', '27994', '20'), +('9', '100', '3', '111014', '27349', '20'), +('9', '100', '5', '111318', '28940', '20'), +('9', '100', '5', '111320', '27607', '20'), +('9', '100', '5', '111319', '27038', '20'), +('9', '100', '5', '111017', '26665', '20'), +('9', '100', '8', '106804', '32492', '20'), +('9', '100', '8', '94070', '30889', '20'), +('9', '100', '8', '111331', '30191', '20'), +('9', '100', '8', '106716', '29879', '20'), +('9', '100', '6', '106803', '32072', '20'), +('9', '100', '6', '106843', '32021', '20'), +('9', '100', '6', '111324', '29211', '20'), +('9', '100', '6', '111322', '29114', '20'), +('9', '100', '17', '56046', '22844', '20'), +('9', '100', '17', '56083', '21085', '20'), +('9', '100', '17', '83604', '20918', '20'), +('9', '100', '17', '81765', '20072', '20'), +('9', '100', '7', '94053', '23380', '20'), +('9', '100', '7', '104411', '21129', '20'), +('9', '100', '7', '56079', '20858', '20'), +('9', '100', '7', '102011', '14539', '20'), +('9', '100', '9', '67098', '25161', '20'), +('9', '100', '9', '56033', '21698', '20'), +('9', '100', '9', '56031', '21651', '20'), +('9', '100', '9', '56070', '21506', '20'), +('9', '100', '15', '111343', '30240', '20'), +('9', '100', '15', '111347', '28601', '20'), +('9', '100', '15', '111345', '28559', '20'), +('9', '100', '15', '111042', '27940', '20'), +('9', '100', '20', '111354', '39583', '20'), +('9', '100', '20', '111352', '38460', '20'), +('9', '100', '20', '111355', '38447', '20'), +('9', '100', '20', '111052', '37282', '20'), +('9', '100', '12', '56073', '20691', '20'), +('9', '100', '12', '53420', '20361', '20'), +('9', '100', '12', '81795', '19889', '20'), +('9', '100', '12', '104408', '18683', '20'), +('9', '100', '18', '62986', '21054', '20'), +('9', '100', '18', '104412', '20676', '20'), +('9', '100', '18', '56041', '20402', '20'), +('9', '100', '18', '94054', '19336', '20'), +('9', '100', '19', '62990', '22528', '20'), +('9', '100', '19', '56037', '21258', '20'), +('9', '100', '19', '104409', '20309', '20'), +('9', '100', '19', '56075', '19370', '20'), +('9', '100', '13', '111523', '758484', '20'), +('9', '100', '13', '111871', '721392', '20'), +('9', '100', '13', '111522', '707140', '20'), +('9', '100', '13', '111223', '666882', '20'), +('9', '100', '14', '111523', '279252', '20'), +('9', '100', '14', '111815', '278697', '20'), +('9', '100', '14', '111871', '278448', '20'), +('9', '100', '14', '111515', '269949', '20'), +('9', '100', '11', '111529', '104850', '20'), +('9', '100', '11', '111229', '100418', '20'), +('9', '100', '11', '106769', '86163', '20'), +('9', '100', '11', '62939', '84450', '20'), +('9', '100', '22', '39342', '0', '19'), +('9', '100', '22', '24071', '0', '19'), +('9', '100', '22', '12425', '0', '19'), +('9', '100', '22', '7867', '0', '19'), +('9', '100', '1', '98769', '37501', '19'), +('9', '100', '1', '111300', '29768', '19'), +('9', '100', '1', '111308', '29615', '19'), +('9', '100', '1', '111302', '29548', '19'), +('9', '100', '2', '94056', '22223', '19'), +('9', '100', '2', '62985', '20724', '19'), +('9', '100', '2', '70909', '18014', '19'), +('9', '100', '2', '104410', '16672', '19'), +('9', '100', '3', '111315', '29700', '19'), +('9', '100', '3', '111313', '29292', '19'), +('9', '100', '3', '111316', '27994', '19'), +('9', '100', '3', '111014', '27349', '19'), +('9', '100', '5', '111318', '28940', '19'), +('9', '100', '5', '111320', '27607', '19'), +('9', '100', '5', '111319', '27038', '19'), +('9', '100', '5', '111017', '26665', '19'), +('9', '100', '8', '106804', '32492', '19'), +('9', '100', '8', '94070', '30889', '19'), +('9', '100', '8', '111331', '30191', '19'), +('9', '100', '8', '106716', '29879', '19'), +('9', '100', '6', '106803', '32072', '19'), +('9', '100', '6', '106843', '32021', '19'), +('9', '100', '6', '111324', '29211', '19'), +('9', '100', '6', '111322', '29114', '19'), +('9', '100', '17', '56046', '22844', '19'), +('9', '100', '17', '56083', '21085', '19'), +('9', '100', '17', '83604', '20918', '19'), +('9', '100', '17', '81765', '20072', '19'), +('9', '100', '7', '94053', '23380', '19'), +('9', '100', '7', '104411', '21129', '19'), +('9', '100', '7', '56079', '20858', '19'), +('9', '100', '7', '102011', '14539', '19'), +('9', '100', '9', '67098', '25161', '19'), +('9', '100', '9', '56033', '21698', '19'), +('9', '100', '9', '56031', '21651', '19'), +('9', '100', '9', '56070', '21506', '19'), +('9', '100', '15', '111343', '30240', '19'), +('9', '100', '15', '111347', '28601', '19'), +('9', '100', '15', '111345', '28559', '19'), +('9', '100', '15', '111042', '27940', '19'), +('9', '100', '20', '111354', '39583', '19'), +('9', '100', '20', '111352', '38460', '19'), +('9', '100', '20', '111355', '38447', '19'), +('9', '100', '20', '111052', '37282', '19'), +('9', '100', '12', '56073', '20691', '19'), +('9', '100', '12', '53420', '20361', '19'), +('9', '100', '12', '81795', '19889', '19'), +('9', '100', '12', '104408', '18683', '19'), +('9', '100', '18', '62986', '21054', '19'), +('9', '100', '18', '104412', '20676', '19'), +('9', '100', '18', '56041', '20402', '19'), +('9', '100', '18', '94054', '19336', '19'), +('9', '100', '19', '62990', '22528', '19'), +('9', '100', '19', '56037', '21258', '19'), +('9', '100', '19', '104409', '20309', '19'), +('9', '100', '19', '56075', '19370', '19'), +('9', '100', '13', '111523', '756084', '19'), +('9', '100', '13', '111871', '718992', '19'), +('9', '100', '13', '111522', '704740', '19'), +('9', '100', '13', '111223', '664482', '19'), +('9', '100', '14', '111523', '276852', '19'), +('9', '100', '14', '111815', '276297', '19'), +('9', '100', '14', '111871', '276048', '19'), +('9', '100', '14', '111515', '267549', '19'), +('9', '100', '11', '111529', '104850', '19'), +('9', '100', '11', '111229', '100418', '19'), +('9', '100', '11', '106769', '86163', '19'), +('9', '100', '11', '62939', '84450', '19'), +('9', '101', '22', '39342', '0', '20'), +('9', '101', '22', '24071', '0', '20'), +('9', '101', '22', '12425', '0', '20'), +('9', '101', '22', '7867', '0', '20'), +('9', '101', '1', '98769', '37501', '20'), +('9', '101', '1', '111300', '29768', '20'), +('9', '101', '1', '111308', '29615', '20'), +('9', '101', '1', '111302', '29549', '20'), +('9', '101', '2', '94056', '22224', '20'), +('9', '101', '2', '62985', '20724', '20'), +('9', '101', '2', '70909', '18014', '20'), +('9', '101', '2', '104410', '16672', '20'), +('9', '101', '3', '111315', '29700', '20'), +('9', '101', '3', '111313', '29292', '20'), +('9', '101', '3', '111316', '27994', '20'), +('9', '101', '3', '111014', '27350', '20'), +('9', '101', '5', '111318', '28941', '20'), +('9', '101', '5', '111320', '27607', '20'), +('9', '101', '5', '111319', '27038', '20'), +('9', '101', '5', '111017', '26665', '20'), +('9', '101', '8', '106804', '32492', '20'), +('9', '101', '8', '94070', '30889', '20'), +('9', '101', '8', '111331', '30191', '20'), +('9', '101', '8', '106716', '29880', '20'), +('9', '101', '6', '106803', '32072', '20'), +('9', '101', '6', '106843', '32022', '20'), +('9', '101', '6', '111324', '29211', '20'), +('9', '101', '6', '111322', '29114', '20'), +('9', '101', '17', '56046', '22845', '20'), +('9', '101', '17', '56083', '21085', '20'), +('9', '101', '17', '83604', '20918', '20'), +('9', '101', '17', '81765', '20073', '20'), +('9', '101', '7', '94053', '23380', '20'), +('9', '101', '7', '104411', '21129', '20'), +('9', '101', '7', '56079', '20859', '20'), +('9', '101', '7', '102011', '14540', '20'), +('9', '101', '9', '67098', '25161', '20'), +('9', '101', '9', '56033', '21698', '20'), +('9', '101', '9', '56031', '21651', '20'), +('9', '101', '9', '56070', '21506', '20'), +('9', '101', '15', '111343', '30240', '20'), +('9', '101', '15', '111347', '28602', '20'), +('9', '101', '15', '111345', '28559', '20'), +('9', '101', '15', '111042', '27940', '20'), +('9', '101', '20', '111354', '39583', '20'), +('9', '101', '20', '111352', '38460', '20'), +('9', '101', '20', '111355', '38447', '20'), +('9', '101', '20', '111052', '37283', '20'), +('9', '101', '12', '56073', '20692', '20'), +('9', '101', '12', '53420', '20361', '20'), +('9', '101', '12', '81795', '19890', '20'), +('9', '101', '12', '104408', '18683', '20'), +('9', '101', '18', '62986', '21055', '20'), +('9', '101', '18', '104412', '20676', '20'), +('9', '101', '18', '56041', '20402', '20'), +('9', '101', '18', '94054', '19336', '20'), +('9', '101', '19', '62990', '22528', '20'), +('9', '101', '19', '56037', '21258', '20'), +('9', '101', '19', '104409', '20309', '20'), +('9', '101', '19', '56075', '19370', '20'), +('9', '101', '13', '111523', '767076', '20'), +('9', '101', '13', '111871', '729369', '20'), +('9', '101', '13', '111522', '715117', '20'), +('9', '101', '13', '111223', '674244', '20'), +('9', '101', '14', '111523', '279732', '20'), +('9', '101', '14', '111815', '279177', '20'), +('9', '101', '14', '111871', '278928', '20'), +('9', '101', '14', '111515', '270430', '20'), +('9', '101', '11', '111529', '104850', '20'), +('9', '101', '11', '111229', '100419', '20'), +('9', '101', '11', '106769', '86163', '20'), +('9', '101', '11', '62939', '84450', '20'), +('9', '102', '22', '39342', '0', '20'), +('9', '102', '22', '24071', '0', '20'), +('9', '102', '22', '12425', '0', '20'), +('9', '102', '22', '7867', '0', '20'), +('9', '102', '1', '98769', '37501', '20'), +('9', '102', '1', '111300', '29768', '20'), +('9', '102', '1', '111308', '29615', '20'), +('9', '102', '1', '111302', '29549', '20'), +('9', '102', '2', '94056', '22224', '20'), +('9', '102', '2', '62985', '20725', '20'), +('9', '102', '2', '70909', '18014', '20'), +('9', '102', '2', '104410', '16673', '20'), +('9', '102', '3', '111315', '29701', '20'), +('9', '102', '3', '111313', '29293', '20'), +('9', '102', '3', '111316', '27994', '20'), +('9', '102', '3', '111014', '27350', '20'), +('9', '102', '5', '111318', '28941', '20'), +('9', '102', '5', '111320', '27608', '20'), +('9', '102', '5', '111319', '27039', '20'), +('9', '102', '5', '111017', '26665', '20'), +('9', '102', '8', '106804', '32492', '20'), +('9', '102', '8', '94070', '30889', '20'), +('9', '102', '8', '111331', '30192', '20'), +('9', '102', '8', '106716', '29880', '20'), +('9', '102', '6', '106803', '32072', '20'), +('9', '102', '6', '106843', '32022', '20'), +('9', '102', '6', '111324', '29211', '20'), +('9', '102', '6', '111322', '29114', '20'), +('9', '102', '17', '56046', '22845', '20'), +('9', '102', '17', '56083', '21085', '20'), +('9', '102', '17', '83604', '20918', '20'), +('9', '102', '17', '81765', '20073', '20'), +('9', '102', '7', '94053', '23380', '20'), +('9', '102', '7', '104411', '21129', '20'), +('9', '102', '7', '56079', '20859', '20'), +('9', '102', '7', '102011', '14540', '20'), +('9', '102', '9', '67098', '25162', '20'), +('9', '102', '9', '56033', '21698', '20'), +('9', '102', '9', '56031', '21652', '20'), +('9', '102', '9', '56070', '21506', '20'), +('9', '102', '15', '111343', '30240', '20'), +('9', '102', '15', '111347', '28602', '20'), +('9', '102', '15', '111345', '28559', '20'), +('9', '102', '15', '111042', '27940', '20'), +('9', '102', '20', '111354', '39584', '20'), +('9', '102', '20', '111352', '38461', '20'), +('9', '102', '20', '111355', '38447', '20'), +('9', '102', '20', '111052', '37283', '20'), +('9', '102', '12', '56073', '20692', '20'), +('9', '102', '12', '53420', '20362', '20'), +('9', '102', '12', '81795', '19890', '20'), +('9', '102', '12', '104408', '18684', '20'), +('9', '102', '18', '62986', '21055', '20'), +('9', '102', '18', '104412', '20676', '20'), +('9', '102', '18', '56041', '20403', '20'), +('9', '102', '18', '94054', '19337', '20'), +('9', '102', '19', '62990', '22529', '20'), +('9', '102', '19', '56037', '21259', '20'), +('9', '102', '19', '104409', '20309', '20'), +('9', '102', '19', '56075', '19370', '20'), +('9', '102', '13', '111523', '775726', '20'), +('9', '102', '13', '111871', '737399', '20'), +('9', '102', '13', '111522', '723147', '20'), +('9', '102', '13', '111223', '681654', '20'), +('9', '102', '14', '111523', '280212', '20'), +('9', '102', '14', '111815', '279658', '20'), +('9', '102', '14', '111871', '279408', '20'), +('9', '102', '14', '111515', '270910', '20'), +('9', '102', '11', '111529', '104850', '20'), +('9', '102', '11', '111229', '100419', '20'), +('9', '102', '11', '106769', '86164', '20'), +('9', '102', '11', '62939', '84450', '20'), +('9', '103', '22', '39342', '0', '20'), +('9', '103', '22', '24071', '0', '20'), +('9', '103', '22', '12425', '0', '20'), +('9', '103', '22', '7867', '0', '20'), +('9', '103', '1', '98769', '37501', '20'), +('9', '103', '1', '111300', '29768', '20'), +('9', '103', '1', '111308', '29616', '20'), +('9', '103', '1', '111302', '29549', '20'), +('9', '103', '2', '94056', '22224', '20'), +('9', '103', '2', '62985', '20725', '20'), +('9', '103', '2', '70909', '18015', '20'), +('9', '103', '2', '104410', '16673', '20'), +('9', '103', '3', '111315', '29701', '20'), +('9', '103', '3', '111313', '29293', '20'), +('9', '103', '3', '111316', '27995', '20'), +('9', '103', '3', '111014', '27350', '20'), +('9', '103', '5', '111318', '28941', '20'), +('9', '103', '5', '111320', '27608', '20'), +('9', '103', '5', '111319', '27039', '20'), +('9', '103', '5', '111017', '26665', '20'), +('9', '103', '8', '106804', '32493', '20'), +('9', '103', '8', '94070', '30889', '20'), +('9', '103', '8', '111331', '30192', '20'), +('9', '103', '8', '106716', '29880', '20'), +('9', '103', '6', '106803', '32072', '20'), +('9', '103', '6', '106843', '32022', '20'), +('9', '103', '6', '111324', '29212', '20'), +('9', '103', '6', '111322', '29115', '20'), +('9', '103', '17', '56046', '22845', '20'), +('9', '103', '17', '56083', '21085', '20'), +('9', '103', '17', '83604', '20919', '20'), +('9', '103', '17', '81765', '20073', '20'), +('9', '103', '7', '94053', '23380', '20'), +('9', '103', '7', '104411', '21130', '20'), +('9', '103', '7', '56079', '20859', '20'), +('9', '103', '7', '102011', '14540', '20'), +('9', '103', '9', '67098', '25162', '20'), +('9', '103', '9', '56033', '21698', '20'), +('9', '103', '9', '56031', '21652', '20'), +('9', '103', '9', '56070', '21506', '20'), +('9', '103', '15', '111343', '30241', '20'), +('9', '103', '15', '111347', '28602', '20'), +('9', '103', '15', '111345', '28559', '20'), +('9', '103', '15', '111042', '27940', '20'), +('9', '103', '20', '111354', '39584', '20'), +('9', '103', '20', '111352', '38461', '20'), +('9', '103', '20', '111355', '38447', '20'), +('9', '103', '20', '111052', '37283', '20'), +('9', '103', '12', '56073', '20693', '20'), +('9', '103', '12', '53420', '20362', '20'), +('9', '103', '12', '81795', '19890', '20'), +('9', '103', '12', '104408', '18684', '20'), +('9', '103', '18', '62986', '21056', '20'), +('9', '103', '18', '104412', '20676', '20'), +('9', '103', '18', '56041', '20403', '20'), +('9', '103', '18', '94054', '19337', '20'), +('9', '103', '19', '62990', '22529', '20'), +('9', '103', '19', '56037', '21259', '20'), +('9', '103', '19', '104409', '20310', '20'), +('9', '103', '19', '56075', '19370', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '103', '13', '111523', '784433', '20'), +('9', '103', '13', '111871', '745481', '20'), +('9', '103', '13', '111522', '731229', '20'), +('9', '103', '13', '111223', '689112', '20'), +('9', '103', '14', '111523', '280692', '20'), +('9', '103', '14', '111815', '280138', '20'), +('9', '103', '14', '111871', '279889', '20'), +('9', '103', '14', '111515', '271390', '20'), +('9', '103', '11', '111529', '104851', '20'), +('9', '103', '11', '111229', '100419', '20'), +('9', '103', '11', '106769', '86164', '20'), +('9', '103', '11', '62939', '84451', '20'), +('9', '104', '22', '39342', '0', '20'), +('9', '104', '22', '24071', '0', '20'), +('9', '104', '22', '12425', '0', '20'), +('9', '104', '22', '7867', '0', '20'), +('9', '104', '1', '98769', '37501', '20'), +('9', '104', '1', '111300', '29768', '20'), +('9', '104', '1', '111308', '29616', '20'), +('9', '104', '1', '111302', '29550', '20'), +('9', '104', '2', '94056', '22224', '20'), +('9', '104', '2', '62985', '20725', '20'), +('9', '104', '2', '70909', '18015', '20'), +('9', '104', '2', '104410', '16673', '20'), +('9', '104', '3', '111315', '29701', '20'), +('9', '104', '3', '111313', '29293', '20'), +('9', '104', '3', '111316', '27995', '20'), +('9', '104', '3', '111014', '27351', '20'), +('9', '104', '5', '111318', '28941', '20'), +('9', '104', '5', '111320', '27608', '20'), +('9', '104', '5', '111319', '27039', '20'), +('9', '104', '5', '111017', '26666', '20'), +('9', '104', '8', '106804', '32493', '20'), +('9', '104', '8', '94070', '30890', '20'), +('9', '104', '8', '111331', '30192', '20'), +('9', '104', '8', '106716', '29881', '20'), +('9', '104', '6', '106803', '32072', '20'), +('9', '104', '6', '106843', '32023', '20'), +('9', '104', '6', '111324', '29212', '20'), +('9', '104', '6', '111322', '29115', '20'), +('9', '104', '17', '56046', '22846', '20'), +('9', '104', '17', '56083', '21085', '20'), +('9', '104', '17', '83604', '20919', '20'), +('9', '104', '17', '81765', '20073', '20'), +('9', '104', '7', '94053', '23381', '20'), +('9', '104', '7', '104411', '21130', '20'), +('9', '104', '7', '56079', '20860', '20'), +('9', '104', '7', '102011', '14540', '20'), +('9', '104', '9', '67098', '25162', '20'), +('9', '104', '9', '56033', '21698', '20'), +('9', '104', '9', '56031', '21652', '20'), +('9', '104', '9', '56070', '21506', '20'), +('9', '104', '15', '111343', '30241', '20'), +('9', '104', '15', '111347', '28603', '20'), +('9', '104', '15', '111345', '28559', '20'), +('9', '104', '15', '111042', '27940', '20'), +('9', '104', '20', '111354', '39584', '20'), +('9', '104', '20', '111352', '38461', '20'), +('9', '104', '20', '111355', '38448', '20'), +('9', '104', '20', '111052', '37283', '20'), +('9', '104', '12', '56073', '20693', '20'), +('9', '104', '12', '53420', '20362', '20'), +('9', '104', '12', '81795', '19891', '20'), +('9', '104', '12', '104408', '18684', '20'), +('9', '104', '18', '62986', '21056', '20'), +('9', '104', '18', '104412', '20676', '20'), +('9', '104', '18', '56041', '20403', '20'), +('9', '104', '18', '94054', '19337', '20'), +('9', '104', '19', '62990', '22529', '20'), +('9', '104', '19', '56037', '21259', '20'), +('9', '104', '19', '104409', '20310', '20'), +('9', '104', '19', '56075', '19371', '20'), +('9', '104', '13', '111523', '793196', '20'), +('9', '104', '13', '111871', '753616', '20'), +('9', '104', '13', '111522', '739364', '20'), +('9', '104', '13', '111223', '696618', '20'), +('9', '104', '14', '111523', '281173', '20'), +('9', '104', '14', '111815', '280618', '20'), +('9', '104', '14', '111871', '280369', '20'), +('9', '104', '14', '111515', '271870', '20'), +('9', '104', '11', '111529', '104851', '20'), +('9', '104', '11', '111229', '100419', '20'), +('9', '104', '11', '106769', '86164', '20'), +('9', '104', '11', '62939', '84451', '20'), +('9', '105', '22', '39342', '0', '23'), +('9', '105', '22', '24071', '0', '23'), +('9', '105', '22', '12425', '0', '23'), +('9', '105', '22', '7867', '0', '23'), +('9', '105', '1', '98769', '37502', '23'), +('9', '105', '1', '111300', '29769', '23'), +('9', '105', '1', '111308', '29616', '23'), +('9', '105', '1', '111302', '29550', '23'), +('9', '105', '2', '94056', '22225', '23'), +('9', '105', '2', '62985', '20725', '23'), +('9', '105', '2', '70909', '18015', '23'), +('9', '105', '2', '104410', '16673', '23'), +('9', '105', '3', '111315', '29702', '23'), +('9', '105', '3', '111313', '29293', '23'), +('9', '105', '3', '111316', '27995', '23'), +('9', '105', '3', '111014', '27351', '23'), +('9', '105', '5', '111318', '28941', '23'), +('9', '105', '5', '111320', '27608', '23'), +('9', '105', '5', '111319', '27040', '23'), +('9', '105', '5', '111017', '26666', '23'), +('9', '105', '8', '106804', '32493', '23'), +('9', '105', '8', '94070', '30890', '23'), +('9', '105', '8', '111331', '30192', '23'), +('9', '105', '8', '106716', '29881', '23'), +('9', '105', '6', '106803', '32072', '23'), +('9', '105', '6', '106843', '32023', '23'), +('9', '105', '6', '111324', '29212', '23'), +('9', '105', '6', '111322', '29115', '23'), +('9', '105', '17', '56046', '22846', '23'), +('9', '105', '17', '56083', '21085', '23'), +('9', '105', '17', '83604', '20919', '23'), +('9', '105', '17', '81765', '20074', '23'), +('9', '105', '7', '94053', '23381', '23'), +('9', '105', '7', '104411', '21130', '23'), +('9', '105', '7', '56079', '20860', '23'), +('9', '105', '7', '102011', '14541', '23'), +('9', '105', '9', '67098', '25162', '23'), +('9', '105', '9', '56033', '21699', '23'), +('9', '105', '9', '56031', '21652', '23'), +('9', '105', '9', '56070', '21506', '23'), +('9', '105', '15', '111343', '30241', '23'), +('9', '105', '15', '111347', '28603', '23'), +('9', '105', '15', '111345', '28560', '23'), +('9', '105', '15', '111042', '27940', '23'), +('9', '105', '20', '111354', '39584', '23'), +('9', '105', '20', '111352', '38461', '23'), +('9', '105', '20', '111355', '38448', '23'), +('9', '105', '20', '111052', '37284', '23'), +('9', '105', '12', '56073', '20693', '23'), +('9', '105', '12', '53420', '20362', '23'), +('9', '105', '12', '81795', '19891', '23'), +('9', '105', '12', '104408', '18685', '23'), +('9', '105', '18', '62986', '21056', '23'), +('9', '105', '18', '104412', '20676', '23'), +('9', '105', '18', '56041', '20403', '23'), +('9', '105', '18', '94054', '19337', '23'), +('9', '105', '19', '62990', '22529', '23'), +('9', '105', '19', '56037', '21259', '23'), +('9', '105', '19', '104409', '20310', '23'), +('9', '105', '19', '56075', '19371', '23'), +('9', '105', '13', '111523', '802017', '23'), +('9', '105', '13', '111871', '761804', '23'), +('9', '105', '13', '111522', '747551', '23'), +('9', '105', '13', '111223', '704173', '23'), +('9', '105', '14', '111523', '281653', '23'), +('9', '105', '14', '111815', '281098', '23'), +('9', '105', '14', '111871', '280849', '23'), +('9', '105', '14', '111515', '272351', '23'), +('9', '105', '11', '111529', '104851', '23'), +('9', '105', '11', '111229', '100420', '23'), +('9', '105', '11', '106769', '86164', '23'), +('9', '105', '11', '62939', '84451', '23'), +('9', '105', '22', '39342', '0', '22'), +('9', '105', '22', '24071', '0', '22'), +('9', '105', '22', '12425', '0', '22'), +('9', '105', '22', '7867', '0', '22'), +('9', '105', '1', '98769', '37502', '22'), +('9', '105', '1', '111300', '29769', '22'), +('9', '105', '1', '111308', '29616', '22'), +('9', '105', '1', '111302', '29550', '22'), +('9', '105', '2', '94056', '22225', '22'), +('9', '105', '2', '62985', '20725', '22'), +('9', '105', '2', '70909', '18015', '22'), +('9', '105', '2', '104410', '16673', '22'), +('9', '105', '3', '111315', '29702', '22'), +('9', '105', '3', '111313', '29293', '22'), +('9', '105', '3', '111316', '27995', '22'), +('9', '105', '3', '111014', '27351', '22'), +('9', '105', '5', '111318', '28941', '22'), +('9', '105', '5', '111320', '27608', '22'), +('9', '105', '5', '111319', '27040', '22'), +('9', '105', '5', '111017', '26666', '22'), +('9', '105', '8', '106804', '32493', '22'), +('9', '105', '8', '94070', '30890', '22'), +('9', '105', '8', '111331', '30192', '22'), +('9', '105', '8', '106716', '29881', '22'), +('9', '105', '6', '106803', '32072', '22'), +('9', '105', '6', '106843', '32023', '22'), +('9', '105', '6', '111324', '29212', '22'), +('9', '105', '6', '111322', '29115', '22'), +('9', '105', '17', '56046', '22846', '22'), +('9', '105', '17', '56083', '21085', '22'), +('9', '105', '17', '83604', '20919', '22'), +('9', '105', '17', '81765', '20074', '22'), +('9', '105', '7', '94053', '23381', '22'), +('9', '105', '7', '104411', '21130', '22'), +('9', '105', '7', '56079', '20860', '22'), +('9', '105', '7', '102011', '14541', '22'), +('9', '105', '9', '67098', '25162', '22'), +('9', '105', '9', '56033', '21699', '22'), +('9', '105', '9', '56031', '21652', '22'), +('9', '105', '9', '56070', '21506', '22'), +('9', '105', '15', '111343', '30241', '22'), +('9', '105', '15', '111347', '28603', '22'), +('9', '105', '15', '111345', '28560', '22'), +('9', '105', '15', '111042', '27940', '22'), +('9', '105', '20', '111354', '39584', '22'), +('9', '105', '20', '111352', '38461', '22'), +('9', '105', '20', '111355', '38448', '22'), +('9', '105', '20', '111052', '37284', '22'), +('9', '105', '12', '56073', '20693', '22'), +('9', '105', '12', '53420', '20362', '22'), +('9', '105', '12', '81795', '19891', '22'), +('9', '105', '12', '104408', '18685', '22'), +('9', '105', '18', '62986', '21056', '22'), +('9', '105', '18', '104412', '20676', '22'), +('9', '105', '18', '56041', '20403', '22'), +('9', '105', '18', '94054', '19337', '22'), +('9', '105', '19', '62990', '22529', '22'), +('9', '105', '19', '56037', '21259', '22'), +('9', '105', '19', '104409', '20310', '22'), +('9', '105', '19', '56075', '19371', '22'), +('9', '105', '13', '111523', '802017', '22'), +('9', '105', '13', '111871', '761804', '22'), +('9', '105', '13', '111522', '747551', '22'), +('9', '105', '13', '111223', '704173', '22'), +('9', '105', '14', '111523', '281653', '22'), +('9', '105', '14', '111815', '281098', '22'), +('9', '105', '14', '111871', '280849', '22'), +('9', '105', '14', '111515', '272351', '22'), +('9', '105', '11', '111529', '104851', '22'), +('9', '105', '11', '111229', '100420', '22'), +('9', '105', '11', '106769', '86164', '22'), +('9', '105', '11', '62939', '84451', '22'), +('9', '105', '22', '39342', '0', '21'), +('9', '105', '22', '24071', '0', '21'), +('9', '105', '22', '12425', '0', '21'), +('9', '105', '22', '7867', '0', '21'), +('9', '105', '1', '98769', '37502', '21'), +('9', '105', '1', '111300', '29769', '21'), +('9', '105', '1', '111308', '29616', '21'), +('9', '105', '1', '111302', '29550', '21'), +('9', '105', '2', '94056', '22225', '21'), +('9', '105', '2', '62985', '20725', '21'), +('9', '105', '2', '70909', '18015', '21'), +('9', '105', '2', '104410', '16673', '21'), +('9', '105', '3', '111315', '29702', '21'), +('9', '105', '3', '111313', '29293', '21'), +('9', '105', '3', '111316', '27995', '21'), +('9', '105', '3', '111014', '27351', '21'), +('9', '105', '5', '111318', '28941', '21'), +('9', '105', '5', '111320', '27608', '21'), +('9', '105', '5', '111319', '27040', '21'), +('9', '105', '5', '111017', '26666', '21'), +('9', '105', '8', '106804', '32493', '21'), +('9', '105', '8', '94070', '30890', '21'), +('9', '105', '8', '111331', '30192', '21'), +('9', '105', '8', '106716', '29881', '21'), +('9', '105', '6', '106803', '32072', '21'), +('9', '105', '6', '106843', '32023', '21'), +('9', '105', '6', '111324', '29212', '21'), +('9', '105', '6', '111322', '29115', '21'), +('9', '105', '17', '56046', '22846', '21'), +('9', '105', '17', '56083', '21085', '21'), +('9', '105', '17', '83604', '20919', '21'), +('9', '105', '17', '81765', '20074', '21'), +('9', '105', '7', '94053', '23381', '21'), +('9', '105', '7', '104411', '21130', '21'), +('9', '105', '7', '56079', '20860', '21'), +('9', '105', '7', '102011', '14541', '21'), +('9', '105', '9', '67098', '25162', '21'), +('9', '105', '9', '56033', '21699', '21'), +('9', '105', '9', '56031', '21652', '21'), +('9', '105', '9', '56070', '21506', '21'), +('9', '105', '15', '111343', '30241', '21'), +('9', '105', '15', '111347', '28603', '21'), +('9', '105', '15', '111345', '28560', '21'), +('9', '105', '15', '111042', '27940', '21'), +('9', '105', '20', '111354', '39584', '21'), +('9', '105', '20', '111352', '38461', '21'), +('9', '105', '20', '111355', '38448', '21'), +('9', '105', '20', '111052', '37284', '21'), +('9', '105', '12', '56073', '20693', '21'), +('9', '105', '12', '53420', '20362', '21'), +('9', '105', '12', '81795', '19891', '21'), +('9', '105', '12', '104408', '18685', '21'), +('9', '105', '18', '62986', '21056', '21'), +('9', '105', '18', '104412', '20676', '21'), +('9', '105', '18', '56041', '20403', '21'), +('9', '105', '18', '94054', '19337', '21'), +('9', '105', '19', '62990', '22529', '21'), +('9', '105', '19', '56037', '21259', '21'), +('9', '105', '19', '104409', '20310', '21'), +('9', '105', '19', '56075', '19371', '21'), +('9', '105', '13', '111523', '802017', '21'), +('9', '105', '13', '111871', '761804', '21'), +('9', '105', '13', '111522', '747551', '21'), +('9', '105', '13', '111223', '704173', '21'), +('9', '105', '14', '111523', '281653', '21'), +('9', '105', '14', '111815', '281098', '21'), +('9', '105', '14', '111871', '280849', '21'), +('9', '105', '14', '111515', '272351', '21'), +('9', '105', '11', '111529', '104851', '21'), +('9', '105', '11', '111229', '100420', '21'), +('9', '105', '11', '106769', '86164', '21'), +('9', '105', '11', '62939', '84451', '21'), +('9', '106', '22', '39342', '0', '23'), +('9', '106', '22', '24071', '0', '23'), +('9', '106', '22', '12425', '0', '23'), +('9', '106', '22', '7867', '0', '23'), +('9', '106', '1', '98769', '37502', '23'), +('9', '106', '1', '111300', '29769', '23'), +('9', '106', '1', '111308', '29617', '23'), +('9', '106', '1', '111302', '29550', '23'), +('9', '106', '2', '94056', '22225', '23'), +('9', '106', '2', '62985', '20725', '23'), +('9', '106', '2', '70909', '18015', '23'), +('9', '106', '2', '104410', '16674', '23'), +('9', '106', '3', '111315', '29702', '23'), +('9', '106', '3', '111313', '29293', '23'), +('9', '106', '3', '111316', '27995', '23'), +('9', '106', '3', '111014', '27352', '23'), +('9', '106', '5', '111318', '28942', '23'), +('9', '106', '5', '111320', '27609', '23'), +('9', '106', '5', '111319', '27040', '23'), +('9', '106', '5', '111017', '26666', '23'), +('9', '106', '8', '106804', '32493', '23'), +('9', '106', '8', '94070', '30890', '23'), +('9', '106', '8', '111331', '30193', '23'), +('9', '106', '8', '106716', '29881', '23'), +('9', '106', '6', '106803', '32072', '23'), +('9', '106', '6', '106843', '32023', '23'), +('9', '106', '6', '111324', '29213', '23'), +('9', '106', '6', '111322', '29115', '23'), +('9', '106', '17', '56046', '22846', '23'), +('9', '106', '17', '56083', '21086', '23'), +('9', '106', '17', '83604', '20919', '23'), +('9', '106', '17', '81765', '20074', '23'), +('9', '106', '7', '94053', '23381', '23'), +('9', '106', '7', '104411', '21130', '23'), +('9', '106', '7', '56079', '20860', '23'), +('9', '106', '7', '102011', '14541', '23'), +('9', '106', '9', '67098', '25163', '23'), +('9', '106', '9', '56033', '21699', '23'), +('9', '106', '9', '56031', '21652', '23'), +('9', '106', '9', '56070', '21506', '23'), +('9', '106', '15', '111343', '30241', '23'), +('9', '106', '15', '111347', '28603', '23'), +('9', '106', '15', '111345', '28560', '23'), +('9', '106', '15', '111042', '27941', '23'), +('9', '106', '20', '111354', '39584', '23'), +('9', '106', '20', '111352', '38462', '23'), +('9', '106', '20', '111355', '38448', '23'), +('9', '106', '20', '111052', '37284', '23'), +('9', '106', '12', '56073', '20694', '23'), +('9', '106', '12', '53420', '20363', '23'), +('9', '106', '12', '81795', '19891', '23'), +('9', '106', '12', '104408', '18685', '23'), +('9', '106', '18', '62986', '21057', '23'), +('9', '106', '18', '104412', '20676', '23'), +('9', '106', '18', '56041', '20403', '23'), +('9', '106', '18', '94054', '19338', '23'), +('9', '106', '19', '62990', '22530', '23'), +('9', '106', '19', '56037', '21260', '23'), +('9', '106', '19', '104409', '20311', '23'), +('9', '106', '19', '56075', '19371', '23'), +('9', '106', '13', '111523', '810894', '23'), +('9', '106', '13', '111871', '770044', '23'), +('9', '106', '13', '111522', '755791', '23'), +('9', '106', '13', '111223', '711776', '23'), +('9', '106', '14', '111523', '282133', '23'), +('9', '106', '14', '111815', '281579', '23'), +('9', '106', '14', '111871', '281330', '23'), +('9', '106', '14', '111515', '272831', '23'), +('9', '106', '11', '111529', '104851', '23'), +('9', '106', '11', '111229', '100420', '23'), +('9', '106', '11', '106769', '86165', '23'), +('9', '106', '11', '62939', '84452', '23'), +('9', '107', '22', '39342', '0', '23'), +('9', '107', '22', '24071', '0', '23'), +('9', '107', '22', '12425', '0', '23'), +('9', '107', '22', '7867', '0', '23'), +('9', '107', '1', '98769', '37502', '23'), +('9', '107', '1', '111300', '29769', '23'), +('9', '107', '1', '111308', '29617', '23'), +('9', '107', '1', '111302', '29551', '23'), +('9', '107', '2', '94056', '22225', '23'), +('9', '107', '2', '62985', '20725', '23'), +('9', '107', '2', '70909', '18016', '23'), +('9', '107', '2', '104410', '16674', '23'), +('9', '107', '3', '111315', '29703', '23'), +('9', '107', '3', '111313', '29294', '23'), +('9', '107', '3', '111316', '27996', '23'), +('9', '107', '3', '111014', '27352', '23'), +('9', '107', '5', '111318', '28942', '23'), +('9', '107', '5', '111320', '27609', '23'), +('9', '107', '5', '111319', '27040', '23'), +('9', '107', '5', '111017', '26666', '23'), +('9', '107', '8', '106804', '32494', '23'), +('9', '107', '8', '94070', '30890', '23'), +('9', '107', '8', '111331', '30193', '23'), +('9', '107', '8', '106716', '29882', '23'), +('9', '107', '6', '106803', '32072', '23'), +('9', '107', '6', '106843', '32024', '23'), +('9', '107', '6', '111324', '29213', '23'), +('9', '107', '6', '111322', '29116', '23'), +('9', '107', '17', '56046', '22847', '23'), +('9', '107', '17', '56083', '21086', '23'), +('9', '107', '17', '83604', '20920', '23'), +('9', '107', '17', '81765', '20074', '23'), +('9', '107', '7', '94053', '23382', '23'), +('9', '107', '7', '104411', '21131', '23'), +('9', '107', '7', '56079', '20861', '23'), +('9', '107', '7', '102011', '14541', '23'), +('9', '107', '9', '67098', '25163', '23'), +('9', '107', '9', '56033', '21699', '23'), +('9', '107', '9', '56031', '21652', '23'), +('9', '107', '9', '56070', '21507', '23'), +('9', '107', '15', '111343', '30241', '23'), +('9', '107', '15', '111347', '28603', '23'), +('9', '107', '15', '111345', '28560', '23'), +('9', '107', '15', '111042', '27941', '23'), +('9', '107', '20', '111354', '39585', '23'), +('9', '107', '20', '111352', '38462', '23'), +('9', '107', '20', '111355', '38448', '23'), +('9', '107', '20', '111052', '37284', '23'), +('9', '107', '12', '56073', '20694', '23'), +('9', '107', '12', '53420', '20363', '23'), +('9', '107', '12', '81795', '19892', '23'), +('9', '107', '12', '104408', '18685', '23'), +('9', '107', '18', '62986', '21057', '23'), +('9', '107', '18', '104412', '20677', '23'), +('9', '107', '18', '56041', '20403', '23'), +('9', '107', '18', '94054', '19338', '23'), +('9', '107', '19', '62990', '22530', '23'), +('9', '107', '19', '56037', '21260', '23'), +('9', '107', '19', '104409', '20311', '23'), +('9', '107', '19', '56075', '19371', '23'), +('9', '107', '13', '111523', '819828', '23'), +('9', '107', '13', '111871', '778337', '23'), +('9', '107', '13', '111522', '764084', '23'), +('9', '107', '13', '111223', '719427', '23'), +('9', '107', '14', '111523', '282614', '23'), +('9', '107', '14', '111815', '282059', '23'), +('9', '107', '14', '111871', '281810', '23'), +('9', '107', '14', '111515', '273311', '23'), +('9', '107', '11', '111529', '104852', '23'), +('9', '107', '11', '111229', '100420', '23'), +('9', '107', '11', '106769', '86165', '23'), +('9', '107', '11', '62939', '84452', '23'), +('9', '108', '22', '39342', '0', '23'), +('9', '108', '22', '24071', '0', '23'), +('9', '108', '22', '12425', '0', '23'), +('9', '108', '22', '7867', '0', '23'), +('9', '108', '1', '98769', '37502', '23'), +('9', '108', '1', '111300', '29769', '23'), +('9', '108', '1', '111308', '29617', '23'), +('9', '108', '1', '111302', '29551', '23'), +('9', '108', '2', '94056', '22225', '23'), +('9', '108', '2', '62985', '20725', '23'), +('9', '108', '2', '70909', '18016', '23'), +('9', '108', '2', '104410', '16674', '23'), +('9', '108', '3', '111315', '29703', '23'), +('9', '108', '3', '111313', '29294', '23'), +('9', '108', '3', '111316', '27996', '23'), +('9', '108', '3', '111014', '27352', '23'), +('9', '108', '5', '111318', '28942', '23'), +('9', '108', '5', '111320', '27609', '23'), +('9', '108', '5', '111319', '27041', '23'), +('9', '108', '5', '111017', '26666', '23'), +('9', '108', '8', '106804', '32494', '23'), +('9', '108', '8', '94070', '30891', '23'), +('9', '108', '8', '111331', '30193', '23'), +('9', '108', '8', '106716', '29882', '23'), +('9', '108', '6', '106803', '32072', '23'), +('9', '108', '6', '106843', '32024', '23'), +('9', '108', '6', '111324', '29213', '23'), +('9', '108', '6', '111322', '29116', '23'), +('9', '108', '17', '56046', '22847', '23'), +('9', '108', '17', '56083', '21086', '23'), +('9', '108', '17', '83604', '20920', '23'), +('9', '108', '17', '81765', '20074', '23'), +('9', '108', '7', '94053', '23382', '23'), +('9', '108', '7', '104411', '21131', '23'), +('9', '108', '7', '56079', '20861', '23'), +('9', '108', '7', '102011', '14541', '23'), +('9', '108', '9', '67098', '25163', '23'), +('9', '108', '9', '56033', '21699', '23'), +('9', '108', '9', '56031', '21653', '23'), +('9', '108', '9', '56070', '21507', '23'), +('9', '108', '15', '111343', '30242', '23'), +('9', '108', '15', '111347', '28604', '23'), +('9', '108', '15', '111345', '28560', '23'), +('9', '108', '15', '111042', '27941', '23'), +('9', '108', '20', '111354', '39585', '23'), +('9', '108', '20', '111352', '38462', '23'), +('9', '108', '20', '111355', '38448', '23'), +('9', '108', '20', '111052', '37284', '23'), +('9', '108', '12', '56073', '20694', '23'), +('9', '108', '12', '53420', '20363', '23'), +('9', '108', '12', '81795', '19892', '23'), +('9', '108', '12', '104408', '18685', '23'), +('9', '108', '18', '62986', '21058', '23'), +('9', '108', '18', '104412', '20677', '23'), +('9', '108', '18', '56041', '20403', '23'), +('9', '108', '18', '94054', '19338', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '108', '19', '62990', '22530', '23'), +('9', '108', '19', '56037', '21260', '23'), +('9', '108', '19', '104409', '20312', '23'), +('9', '108', '19', '56075', '19372', '23'), +('9', '108', '13', '111523', '828819', '23'), +('9', '108', '13', '111871', '786682', '23'), +('9', '108', '13', '111522', '772429', '23'), +('9', '108', '13', '111223', '727126', '23'), +('9', '108', '14', '111523', '283094', '23'), +('9', '108', '14', '111815', '282539', '23'), +('9', '108', '14', '111871', '282290', '23'), +('9', '108', '14', '111515', '273791', '23'), +('9', '108', '11', '111529', '104852', '23'), +('9', '108', '11', '111229', '100421', '23'), +('9', '108', '11', '106769', '86165', '23'), +('9', '108', '11', '62939', '84452', '23'), +('9', '109', '22', '39342', '0', '23'), +('9', '109', '22', '24071', '0', '23'), +('9', '109', '22', '12425', '0', '23'), +('9', '109', '22', '7867', '0', '23'), +('9', '109', '1', '98769', '37502', '23'), +('9', '109', '1', '111300', '29770', '23'), +('9', '109', '1', '111308', '29617', '23'), +('9', '109', '1', '111302', '29551', '23'), +('9', '109', '2', '94056', '22226', '23'), +('9', '109', '2', '62985', '20726', '23'), +('9', '109', '2', '70909', '18016', '23'), +('9', '109', '2', '104410', '16674', '23'), +('9', '109', '3', '111315', '29703', '23'), +('9', '109', '3', '111313', '29294', '23'), +('9', '109', '3', '111316', '27996', '23'), +('9', '109', '3', '111014', '27353', '23'), +('9', '109', '5', '111318', '28942', '23'), +('9', '109', '5', '111320', '27609', '23'), +('9', '109', '5', '111319', '27041', '23'), +('9', '109', '5', '111017', '26667', '23'), +('9', '109', '8', '106804', '32494', '23'), +('9', '109', '8', '94070', '30891', '23'), +('9', '109', '8', '111331', '30194', '23'), +('9', '109', '8', '106716', '29882', '23'), +('9', '109', '6', '106803', '32073', '23'), +('9', '109', '6', '106843', '32024', '23'), +('9', '109', '6', '111324', '29214', '23'), +('9', '109', '6', '111322', '29116', '23'), +('9', '109', '17', '56046', '22848', '23'), +('9', '109', '17', '56083', '21086', '23'), +('9', '109', '17', '83604', '20920', '23'), +('9', '109', '17', '81765', '20074', '23'), +('9', '109', '7', '94053', '23382', '23'), +('9', '109', '7', '104411', '21131', '23'), +('9', '109', '7', '56079', '20861', '23'), +('9', '109', '7', '102011', '14542', '23'), +('9', '109', '9', '67098', '25163', '23'), +('9', '109', '9', '56033', '21699', '23'), +('9', '109', '9', '56031', '21653', '23'), +('9', '109', '9', '56070', '21507', '23'), +('9', '109', '15', '111343', '30242', '23'), +('9', '109', '15', '111347', '28604', '23'), +('9', '109', '15', '111345', '28560', '23'), +('9', '109', '15', '111042', '27941', '23'), +('9', '109', '20', '111354', '39585', '23'), +('9', '109', '20', '111352', '38463', '23'), +('9', '109', '20', '111355', '38448', '23'), +('9', '109', '20', '111052', '37285', '23'), +('9', '109', '12', '56073', '20695', '23'), +('9', '109', '12', '53420', '20363', '23'), +('9', '109', '12', '81795', '19892', '23'), +('9', '109', '12', '104408', '18686', '23'), +('9', '109', '18', '62986', '21058', '23'), +('9', '109', '18', '104412', '20677', '23'), +('9', '109', '18', '56041', '20403', '23'), +('9', '109', '18', '94054', '19339', '23'), +('9', '109', '19', '62990', '22530', '23'), +('9', '109', '19', '56037', '21261', '23'), +('9', '109', '19', '104409', '20312', '23'), +('9', '109', '19', '56075', '19372', '23'), +('9', '109', '13', '111523', '837867', '23'), +('9', '109', '13', '111871', '795080', '23'), +('9', '109', '13', '111522', '780827', '23'), +('9', '109', '13', '111223', '734874', '23'), +('9', '109', '14', '111523', '283574', '23'), +('9', '109', '14', '111815', '283019', '23'), +('9', '109', '14', '111871', '282771', '23'), +('9', '109', '14', '111515', '274272', '23'), +('9', '109', '11', '111529', '104852', '23'), +('9', '109', '11', '111229', '100421', '23'), +('9', '109', '11', '106769', '86165', '23'), +('9', '109', '11', '62939', '84452', '23'), +('9', '110', '22', '39342', '0', '25'), +('9', '110', '22', '24071', '0', '25'), +('9', '110', '22', '12425', '0', '25'), +('9', '110', '22', '7867', '0', '25'), +('9', '110', '1', '98769', '37503', '25'), +('9', '110', '1', '111300', '29770', '25'), +('9', '110', '1', '111308', '29618', '25'), +('9', '110', '1', '111302', '29552', '25'), +('9', '110', '2', '94056', '22226', '25'), +('9', '110', '2', '62985', '20726', '25'), +('9', '110', '2', '70909', '18016', '25'), +('9', '110', '2', '104410', '16675', '25'), +('9', '110', '3', '111315', '29704', '25'), +('9', '110', '3', '111313', '29294', '25'), +('9', '110', '3', '111316', '27997', '25'), +('9', '110', '3', '111014', '27353', '25'), +('9', '110', '5', '111318', '28942', '25'), +('9', '110', '5', '111320', '27610', '25'), +('9', '110', '5', '111319', '27041', '25'), +('9', '110', '5', '111017', '26667', '25'), +('9', '110', '8', '106804', '32494', '25'), +('9', '110', '8', '94070', '30891', '25'), +('9', '110', '8', '111331', '30194', '25'), +('9', '110', '8', '106716', '29883', '25'), +('9', '110', '6', '106803', '32073', '25'), +('9', '110', '6', '106843', '32025', '25'), +('9', '110', '6', '111324', '29214', '25'), +('9', '110', '6', '111322', '29116', '25'), +('9', '110', '17', '56046', '22848', '25'), +('9', '110', '17', '56083', '21086', '25'), +('9', '110', '17', '83604', '20921', '25'), +('9', '110', '17', '81765', '20075', '25'), +('9', '110', '7', '94053', '23382', '25'), +('9', '110', '7', '104411', '21131', '25'), +('9', '110', '7', '56079', '20861', '25'), +('9', '110', '7', '102011', '14542', '25'), +('9', '110', '9', '67098', '25164', '25'), +('9', '110', '9', '56033', '21699', '25'), +('9', '110', '9', '56031', '21653', '25'), +('9', '110', '9', '56070', '21507', '25'), +('9', '110', '15', '111343', '30242', '25'), +('9', '110', '15', '111347', '28604', '25'), +('9', '110', '15', '111345', '28561', '25'), +('9', '110', '15', '111042', '27941', '25'), +('9', '110', '20', '111354', '39585', '25'), +('9', '110', '20', '111352', '38463', '25'), +('9', '110', '20', '111355', '38449', '25'), +('9', '110', '20', '111052', '37285', '25'), +('9', '110', '12', '56073', '20695', '25'), +('9', '110', '12', '53420', '20363', '25'), +('9', '110', '12', '81795', '19893', '25'), +('9', '110', '12', '104408', '18686', '25'), +('9', '110', '18', '62986', '21058', '25'), +('9', '110', '18', '104412', '20677', '25'), +('9', '110', '18', '56041', '20404', '25'), +('9', '110', '18', '94054', '19339', '25'), +('9', '110', '19', '62904', '24498', '25'), +('9', '110', '19', '62990', '22531', '25'), +('9', '110', '19', '56037', '21261', '25'), +('9', '110', '19', '104409', '20312', '25'), +('9', '110', '13', '111523', '849372', '25'), +('9', '110', '13', '111871', '805930', '25'), +('9', '110', '13', '111522', '791677', '25'), +('9', '110', '13', '111223', '745070', '25'), +('9', '110', '14', '111523', '286455', '25'), +('9', '110', '14', '111815', '285900', '25'), +('9', '110', '14', '111871', '285651', '25'), +('9', '110', '14', '46856', '279796', '25'), +('9', '110', '11', '111529', '104852', '25'), +('9', '110', '11', '111229', '100421', '25'), +('9', '110', '11', '106769', '86166', '25'), +('9', '110', '11', '62939', '84453', '25'), +('9', '110', '22', '39342', '0', '24'), +('9', '110', '22', '24071', '0', '24'), +('9', '110', '22', '12425', '0', '24'), +('9', '110', '22', '7867', '0', '24'), +('9', '110', '1', '98769', '37503', '24'), +('9', '110', '1', '111300', '29770', '24'), +('9', '110', '1', '111308', '29618', '24'), +('9', '110', '1', '111302', '29552', '24'), +('9', '110', '2', '94056', '22226', '24'), +('9', '110', '2', '62985', '20726', '24'), +('9', '110', '2', '70909', '18016', '24'), +('9', '110', '2', '104410', '16675', '24'), +('9', '110', '3', '111315', '29704', '24'), +('9', '110', '3', '111313', '29294', '24'), +('9', '110', '3', '111316', '27997', '24'), +('9', '110', '3', '111014', '27353', '24'), +('9', '110', '5', '111318', '28942', '24'), +('9', '110', '5', '111320', '27610', '24'), +('9', '110', '5', '111319', '27041', '24'), +('9', '110', '5', '111017', '26667', '24'), +('9', '110', '8', '106804', '32494', '24'), +('9', '110', '8', '94070', '30891', '24'), +('9', '110', '8', '111331', '30194', '24'), +('9', '110', '8', '106716', '29883', '24'), +('9', '110', '6', '106803', '32073', '24'), +('9', '110', '6', '106843', '32025', '24'), +('9', '110', '6', '111324', '29214', '24'), +('9', '110', '6', '111322', '29116', '24'), +('9', '110', '17', '56046', '22848', '24'), +('9', '110', '17', '56083', '21086', '24'), +('9', '110', '17', '83604', '20921', '24'), +('9', '110', '17', '81765', '20075', '24'), +('9', '110', '7', '94053', '23382', '24'), +('9', '110', '7', '104411', '21131', '24'), +('9', '110', '7', '56079', '20861', '24'), +('9', '110', '7', '102011', '14542', '24'), +('9', '110', '9', '67098', '25164', '24'), +('9', '110', '9', '56033', '21699', '24'), +('9', '110', '9', '56031', '21653', '24'), +('9', '110', '9', '56070', '21507', '24'), +('9', '110', '15', '111343', '30242', '24'), +('9', '110', '15', '111347', '28604', '24'), +('9', '110', '15', '111345', '28561', '24'), +('9', '110', '15', '111042', '27941', '24'), +('9', '110', '20', '111354', '39585', '24'), +('9', '110', '20', '111352', '38463', '24'), +('9', '110', '20', '111355', '38449', '24'), +('9', '110', '20', '111052', '37285', '24'), +('9', '110', '12', '56073', '20695', '24'), +('9', '110', '12', '53420', '20363', '24'), +('9', '110', '12', '81795', '19893', '24'), +('9', '110', '12', '104408', '18686', '24'), +('9', '110', '18', '62986', '21058', '24'), +('9', '110', '18', '104412', '20677', '24'), +('9', '110', '18', '56041', '20404', '24'), +('9', '110', '18', '94054', '19339', '24'), +('9', '110', '19', '62990', '22531', '24'), +('9', '110', '19', '56037', '21261', '24'), +('9', '110', '19', '104409', '20312', '24'), +('9', '110', '19', '56075', '19372', '24'), +('9', '110', '13', '111523', '849372', '24'), +('9', '110', '13', '111871', '805930', '24'), +('9', '110', '13', '111522', '791677', '24'), +('9', '110', '13', '111223', '745070', '24'), +('9', '110', '14', '111523', '286455', '24'), +('9', '110', '14', '111815', '285900', '24'), +('9', '110', '14', '111871', '285651', '24'), +('9', '110', '14', '46856', '279796', '24'), +('9', '110', '11', '111529', '104852', '24'), +('9', '110', '11', '111229', '100421', '24'), +('9', '110', '11', '106769', '86166', '24'), +('9', '110', '11', '62939', '84453', '24'), +('9', '111', '22', '39342', '0', '25'), +('9', '111', '22', '24071', '0', '25'), +('9', '111', '22', '12425', '0', '25'), +('9', '111', '22', '7867', '0', '25'), +('9', '111', '1', '98769', '37503', '25'), +('9', '111', '1', '111300', '29770', '25'), +('9', '111', '1', '111308', '29618', '25'), +('9', '111', '1', '111302', '29552', '25'), +('9', '111', '2', '94056', '22226', '25'), +('9', '111', '2', '62985', '20726', '25'), +('9', '111', '2', '70909', '18017', '25'), +('9', '111', '2', '104410', '16675', '25'), +('9', '111', '3', '111315', '29704', '25'), +('9', '111', '3', '111313', '29295', '25'), +('9', '111', '3', '111316', '27997', '25'), +('9', '111', '3', '111014', '27354', '25'), +('9', '111', '5', '111318', '28943', '25'), +('9', '111', '5', '111320', '27610', '25'), +('9', '111', '5', '111319', '27042', '25'), +('9', '111', '5', '111017', '26667', '25'), +('9', '111', '8', '106804', '32495', '25'), +('9', '111', '8', '94070', '30891', '25'), +('9', '111', '8', '111331', '30194', '25'), +('9', '111', '8', '106716', '29883', '25'), +('9', '111', '6', '106803', '32073', '25'), +('9', '111', '6', '106843', '32025', '25'), +('9', '111', '6', '111324', '29214', '25'), +('9', '111', '6', '111322', '29116', '25'), +('9', '111', '17', '56046', '22848', '25'), +('9', '111', '17', '56083', '21086', '25'), +('9', '111', '17', '83604', '20921', '25'), +('9', '111', '17', '81765', '20075', '25'), +('9', '111', '7', '94053', '23383', '25'), +('9', '111', '7', '104411', '21131', '25'), +('9', '111', '7', '56079', '20862', '25'), +('9', '111', '7', '102011', '14542', '25'), +('9', '111', '9', '67098', '25164', '25'), +('9', '111', '9', '56033', '21700', '25'), +('9', '111', '9', '56031', '21653', '25'), +('9', '111', '9', '56070', '21507', '25'), +('9', '111', '15', '111343', '30242', '25'), +('9', '111', '15', '111347', '28605', '25'), +('9', '111', '15', '111345', '28561', '25'), +('9', '111', '15', '111042', '27942', '25'), +('9', '111', '20', '111354', '39586', '25'), +('9', '111', '20', '111352', '38463', '25'), +('9', '111', '20', '111355', '38449', '25'), +('9', '111', '20', '111052', '37285', '25'), +('9', '111', '12', '56073', '20696', '25'), +('9', '111', '12', '53420', '20364', '25'), +('9', '111', '12', '81795', '19893', '25'), +('9', '111', '12', '104408', '18686', '25'), +('9', '111', '18', '62986', '21059', '25'), +('9', '111', '18', '104412', '20677', '25'), +('9', '111', '18', '56041', '20404', '25'), +('9', '111', '18', '94054', '19339', '25'), +('9', '111', '19', '62904', '24499', '25'), +('9', '111', '19', '62990', '22531', '25'), +('9', '111', '19', '56037', '21261', '25'), +('9', '111', '19', '104409', '20313', '25'), +('9', '111', '13', '111523', '858534', '25'), +('9', '111', '13', '111871', '814433', '25'), +('9', '111', '13', '111522', '800180', '25'), +('9', '111', '13', '111223', '752914', '25'), +('9', '111', '14', '111523', '286935', '25'), +('9', '111', '14', '111815', '286380', '25'), +('9', '111', '14', '111871', '286131', '25'), +('9', '111', '14', '46856', '281119', '25'), +('9', '111', '11', '111529', '104853', '25'), +('9', '111', '11', '111229', '100421', '25'), +('9', '111', '11', '106769', '86166', '25'), +('9', '111', '11', '62939', '84453', '25'), +('9', '112', '22', '39342', '0', '25'), +('9', '112', '22', '24071', '0', '25'), +('9', '112', '22', '12425', '0', '25'), +('9', '112', '22', '7867', '0', '25'), +('9', '112', '1', '98769', '37503', '25'), +('9', '112', '1', '111300', '29770', '25'), +('9', '112', '1', '111308', '29618', '25'), +('9', '112', '1', '111302', '29552', '25'), +('9', '112', '2', '94056', '22226', '25'), +('9', '112', '2', '62985', '20726', '25'), +('9', '112', '2', '70909', '18017', '25'), +('9', '112', '2', '104410', '16675', '25'), +('9', '112', '3', '111315', '29705', '25'), +('9', '112', '3', '111313', '29295', '25'), +('9', '112', '3', '111316', '27997', '25'), +('9', '112', '3', '111014', '27354', '25'), +('9', '112', '5', '111318', '28943', '25'), +('9', '112', '5', '111320', '27610', '25'), +('9', '112', '5', '111319', '27042', '25'), +('9', '112', '5', '111017', '26667', '25'), +('9', '112', '8', '106804', '32495', '25'), +('9', '112', '8', '94070', '30892', '25'), +('9', '112', '8', '111331', '30195', '25'), +('9', '112', '8', '106716', '29883', '25'), +('9', '112', '6', '106803', '32073', '25'), +('9', '112', '6', '106843', '32026', '25'), +('9', '112', '6', '111324', '29214', '25'), +('9', '112', '6', '111322', '29117', '25'), +('9', '112', '17', '56046', '22849', '25'), +('9', '112', '17', '56083', '21087', '25'), +('9', '112', '17', '83604', '20921', '25'), +('9', '112', '17', '81765', '20075', '25'), +('9', '112', '7', '94053', '23383', '25'), +('9', '112', '7', '104411', '21132', '25'), +('9', '112', '7', '56079', '20862', '25'), +('9', '112', '7', '102011', '14542', '25'), +('9', '112', '9', '67098', '25164', '25'), +('9', '112', '9', '56033', '21700', '25'), +('9', '112', '9', '56031', '21653', '25'), +('9', '112', '9', '56070', '21507', '25'), +('9', '112', '15', '111343', '30242', '25'), +('9', '112', '15', '111347', '28605', '25'), +('9', '112', '15', '111345', '28561', '25'), +('9', '112', '15', '111042', '27942', '25'), +('9', '112', '20', '111354', '39586', '25'), +('9', '112', '20', '111352', '38463', '25'), +('9', '112', '20', '111355', '38449', '25'), +('9', '112', '20', '111052', '37285', '25'), +('9', '112', '12', '56073', '20696', '25'), +('9', '112', '12', '53420', '20364', '25'), +('9', '112', '12', '81795', '19893', '25'), +('9', '112', '12', '104408', '18686', '25'), +('9', '112', '18', '62986', '21059', '25'), +('9', '112', '18', '104412', '20677', '25'), +('9', '112', '18', '56041', '20404', '25'), +('9', '112', '18', '94054', '19339', '25'), +('9', '112', '19', '62904', '24499', '25'), +('9', '112', '19', '62990', '22531', '25'), +('9', '112', '19', '56037', '21261', '25'), +('9', '112', '19', '104409', '20313', '25'), +('9', '112', '13', '111523', '867752', '25'), +('9', '112', '13', '111871', '822988', '25'), +('9', '112', '13', '111522', '808735', '25'), +('9', '112', '13', '111223', '760806', '25'), +('9', '112', '14', '111523', '287415', '25'), +('9', '112', '14', '111815', '286860', '25'), +('9', '112', '14', '111871', '286611', '25'), +('9', '112', '14', '46856', '282442', '25'), +('9', '112', '11', '111529', '104853', '25'), +('9', '112', '11', '111229', '100422', '25'), +('9', '112', '11', '106769', '86166', '25'), +('9', '112', '11', '62939', '84453', '25'), +('9', '113', '22', '39342', '0', '25'), +('9', '113', '22', '24071', '0', '25'), +('9', '113', '22', '12425', '0', '25'), +('9', '113', '22', '7867', '0', '25'), +('9', '113', '1', '98769', '37503', '25'), +('9', '113', '1', '111300', '29770', '25'), +('9', '113', '1', '111308', '29618', '25'), +('9', '113', '1', '111302', '29553', '25'), +('9', '113', '2', '94056', '22227', '25'), +('9', '113', '2', '62985', '20726', '25'), +('9', '113', '2', '70909', '18017', '25'), +('9', '113', '2', '104410', '16675', '25'), +('9', '113', '3', '111315', '29705', '25'), +('9', '113', '3', '111313', '29295', '25'), +('9', '113', '3', '111316', '27997', '25'), +('9', '113', '3', '111014', '27354', '25'), +('9', '113', '5', '111318', '28943', '25'), +('9', '113', '5', '111320', '27611', '25'), +('9', '113', '5', '111319', '27042', '25'), +('9', '113', '5', '111017', '26667', '25'), +('9', '113', '8', '106804', '32495', '25'), +('9', '113', '8', '94070', '30892', '25'), +('9', '113', '8', '111331', '30195', '25'), +('9', '113', '8', '106716', '29884', '25'), +('9', '113', '6', '106803', '32073', '25'), +('9', '113', '6', '106843', '32026', '25'), +('9', '113', '6', '111324', '29215', '25'), +('9', '113', '6', '111322', '29117', '25'), +('9', '113', '17', '56046', '22849', '25'), +('9', '113', '17', '56083', '21087', '25'), +('9', '113', '17', '83604', '20922', '25'), +('9', '113', '17', '81765', '20075', '25'), +('9', '113', '7', '94053', '23383', '25'), +('9', '113', '7', '104411', '21132', '25'), +('9', '113', '7', '56079', '20862', '25'), +('9', '113', '7', '102011', '14543', '25'), +('9', '113', '9', '67098', '25164', '25'), +('9', '113', '9', '56033', '21700', '25'), +('9', '113', '9', '56031', '21653', '25'), +('9', '113', '9', '56070', '21507', '25'), +('9', '113', '15', '111343', '30243', '25'), +('9', '113', '15', '111347', '28605', '25'), +('9', '113', '15', '111345', '28561', '25'), +('9', '113', '15', '111042', '27942', '25'), +('9', '113', '20', '111354', '39586', '25'), +('9', '113', '20', '111352', '38464', '25'), +('9', '113', '20', '111355', '38449', '25'), +('9', '113', '20', '111052', '37286', '25'), +('9', '113', '12', '56073', '20696', '25'), +('9', '113', '12', '53420', '20364', '25'), +('9', '113', '12', '81795', '19894', '25'), +('9', '113', '12', '104408', '18687', '25'), +('9', '113', '18', '62986', '21060', '25'), +('9', '113', '18', '104412', '20677', '25'), +('9', '113', '18', '56041', '20404', '25'), +('9', '113', '18', '94054', '19340', '25'), +('9', '113', '19', '62904', '24499', '25'), +('9', '113', '19', '62990', '22532', '25'), +('9', '113', '19', '56037', '21262', '25'), +('9', '113', '19', '104409', '20313', '25'), +('9', '113', '13', '111523', '877028', '25'), +('9', '113', '13', '111871', '831596', '25'), +('9', '113', '13', '111522', '817343', '25'), +('9', '113', '13', '111223', '768747', '25'), +('9', '113', '14', '111523', '287895', '25'), +('9', '113', '14', '111815', '287341', '25'), +('9', '113', '14', '111871', '287092', '25'), +('9', '113', '14', '46856', '283766', '25'), +('9', '113', '11', '111529', '104853', '25'), +('9', '113', '11', '111229', '100422', '25'), +('9', '113', '11', '106769', '86166', '25'), +('9', '113', '11', '62939', '84454', '25'), +('9', '114', '22', '39342', '0', '25'), +('9', '114', '22', '24071', '0', '25'), +('9', '114', '22', '12425', '0', '25'), +('9', '114', '22', '7867', '0', '25'), +('9', '114', '1', '98769', '37503', '25'), +('9', '114', '1', '111300', '29771', '25'), +('9', '114', '1', '111308', '29619', '25'), +('9', '114', '1', '111302', '29553', '25'), +('9', '114', '2', '94056', '22227', '25'), +('9', '114', '2', '62985', '20726', '25'), +('9', '114', '2', '70909', '18018', '25'), +('9', '114', '2', '104410', '16676', '25'), +('9', '114', '3', '111315', '29705', '25'), +('9', '114', '3', '111313', '29295', '25'), +('9', '114', '3', '111316', '27998', '25'), +('9', '114', '3', '111014', '27355', '25'), +('9', '114', '5', '111318', '28943', '25'), +('9', '114', '5', '111320', '27611', '25'), +('9', '114', '5', '111319', '27043', '25'), +('9', '114', '5', '111017', '26668', '25'), +('9', '114', '8', '106804', '32496', '25'), +('9', '114', '8', '94070', '30892', '25'), +('9', '114', '8', '111331', '30195', '25'), +('9', '114', '8', '106716', '29884', '25'), +('9', '114', '6', '106803', '32073', '25'), +('9', '114', '6', '106843', '32026', '25'), +('9', '114', '6', '111324', '29215', '25'), +('9', '114', '6', '111322', '29117', '25'), +('9', '114', '17', '56046', '22850', '25'), +('9', '114', '17', '56083', '21087', '25'), +('9', '114', '17', '83604', '20922', '25'), +('9', '114', '17', '81765', '20076', '25'), +('9', '114', '7', '94053', '23384', '25'), +('9', '114', '7', '104411', '21132', '25'), +('9', '114', '7', '56079', '20863', '25'), +('9', '114', '7', '102011', '14543', '25'), +('9', '114', '9', '67098', '25165', '25'), +('9', '114', '9', '56033', '21700', '25'), +('9', '114', '9', '56031', '21654', '25'), +('9', '114', '9', '56070', '21507', '25'), +('9', '114', '15', '111343', '30243', '25'), +('9', '114', '15', '111347', '28606', '25'), +('9', '114', '15', '111345', '28561', '25'), +('9', '114', '15', '111042', '27942', '25'), +('9', '114', '20', '111354', '39586', '25'), +('9', '114', '20', '111352', '38464', '25'), +('9', '114', '20', '111355', '38449', '25'), +('9', '114', '20', '111052', '37286', '25'), +('9', '114', '12', '56073', '20697', '25'), +('9', '114', '12', '53420', '20364', '25'), +('9', '114', '12', '81795', '19894', '25'), +('9', '114', '12', '104408', '18687', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('9', '114', '18', '62986', '21060', '25'), +('9', '114', '18', '104412', '20678', '25'), +('9', '114', '18', '56041', '20404', '25'), +('9', '114', '18', '94054', '19340', '25'), +('9', '114', '19', '62904', '24499', '25'), +('9', '114', '19', '62990', '22532', '25'), +('9', '114', '19', '56037', '21262', '25'), +('9', '114', '19', '104409', '20314', '25'), +('9', '114', '13', '111523', '886360', '25'), +('9', '114', '13', '111871', '840257', '25'), +('9', '114', '13', '111522', '826004', '25'), +('9', '114', '13', '111222', '776739', '25'), +('9', '114', '14', '111523', '288376', '25'), +('9', '114', '14', '111815', '287821', '25'), +('9', '114', '14', '111871', '287572', '25'), +('9', '114', '14', '46856', '285089', '25'), +('9', '114', '11', '111529', '104853', '25'), +('9', '114', '11', '111229', '100422', '25'), +('9', '114', '11', '106769', '86167', '25'), +('9', '114', '11', '62939', '84454', '25'), +('9', '115', '22', '39342', '0', '26'), +('9', '115', '22', '24071', '0', '26'), +('9', '115', '22', '12425', '0', '26'), +('9', '115', '22', '7867', '0', '26'), +('9', '115', '1', '98769', '37504', '26'), +('9', '115', '1', '111300', '29771', '26'), +('9', '115', '1', '111308', '29619', '26'), +('9', '115', '1', '111302', '29553', '26'), +('9', '115', '2', '94056', '22227', '26'), +('9', '115', '2', '62985', '20727', '26'), +('9', '115', '2', '70909', '18018', '26'), +('9', '115', '2', '104410', '16676', '26'), +('9', '115', '3', '111315', '29706', '26'), +('9', '115', '3', '111313', '29295', '26'), +('9', '115', '3', '111316', '27998', '26'), +('9', '115', '3', '111014', '27355', '26'), +('9', '115', '5', '111318', '28943', '26'), +('9', '115', '5', '111320', '27611', '26'), +('9', '115', '5', '111319', '27043', '26'), +('9', '115', '5', '111017', '26668', '26'), +('9', '115', '8', '106804', '32496', '26'), +('9', '115', '8', '94070', '30893', '26'), +('9', '115', '8', '111331', '30196', '26'), +('9', '115', '8', '106716', '29885', '26'), +('9', '115', '6', '106803', '32073', '26'), +('9', '115', '6', '106843', '32027', '26'), +('9', '115', '6', '111324', '29215', '26'), +('9', '115', '6', '111322', '29117', '26'), +('9', '115', '17', '56046', '22850', '26'), +('9', '115', '17', '56083', '21087', '26'), +('9', '115', '17', '83604', '20922', '26'), +('9', '115', '17', '81765', '20076', '26'), +('9', '115', '7', '94053', '23384', '26'), +('9', '115', '7', '104411', '21132', '26'), +('9', '115', '7', '56079', '20863', '26'), +('9', '115', '7', '102011', '14543', '26'), +('9', '115', '9', '67098', '25165', '26'), +('9', '115', '9', '56033', '21700', '26'), +('9', '115', '9', '56031', '21654', '26'), +('9', '115', '9', '56070', '21508', '26'), +('9', '115', '15', '111343', '30243', '26'), +('9', '115', '15', '111347', '28606', '26'), +('9', '115', '15', '111345', '28562', '26'), +('9', '115', '15', '111042', '27942', '26'), +('9', '115', '20', '111354', '39587', '26'), +('9', '115', '20', '111352', '38464', '26'), +('9', '115', '20', '111355', '38450', '26'), +('9', '115', '20', '111052', '37286', '26'), +('9', '115', '12', '56073', '20697', '26'), +('9', '115', '12', '53420', '20365', '26'), +('9', '115', '12', '81795', '19894', '26'), +('9', '115', '12', '104408', '18687', '26'), +('9', '115', '18', '62986', '21060', '26'), +('9', '115', '18', '104412', '20678', '26'), +('9', '115', '18', '56041', '20404', '26'), +('9', '115', '18', '94054', '19340', '26'), +('9', '115', '19', '62904', '24500', '26'), +('9', '115', '19', '62990', '22532', '26'), +('9', '115', '19', '56037', '21262', '26'), +('9', '115', '19', '104409', '20314', '26'), +('9', '115', '13', '111523', '895749', '26'), +('9', '115', '13', '111871', '848970', '26'), +('9', '115', '13', '111522', '834717', '26'), +('9', '115', '13', '111222', '784889', '26'), +('9', '115', '14', '111523', '288856', '26'), +('9', '115', '14', '111815', '288301', '26'), +('9', '115', '14', '111871', '288052', '26'), +('9', '115', '14', '46856', '286412', '26'), +('9', '115', '11', '111529', '104854', '26'), +('9', '115', '11', '111229', '100422', '26'), +('9', '115', '11', '106769', '86167', '26'), +('9', '115', '11', '62939', '84454', '26'), +('10', '1', '22', '9246', '0', '0'), +('10', '1', '22', '21518', '0', '0'), +('10', '1', '22', '10323', '0', '0'), +('10', '1', '22', '44492', '0', '0'), +('10', '1', '1', '14702', '5000', '0'), +('10', '1', '1', '14701', '4612', '0'), +('10', '1', '1', '30361', '2640', '0'), +('10', '1', '1', '10321', '1000', '0'), +('10', '1', '2', '10143', '7118', '0'), +('10', '1', '2', '30363', '3700', '0'), +('10', '1', '2', '3000', '2534', '0'), +('10', '1', '2', '2294', '2064', '0'), +('10', '1', '3', '2295', '1042', '0'), +('10', '1', '3', '14705', '990', '0'), +('10', '1', '3', '14706', '990', '0'), +('10', '1', '3', '10144', '614', '0'), +('10', '1', '5', '14703', '8800', '0'), +('10', '1', '5', '14700', '4818', '0'), +('10', '1', '5', '10055', '4030', '0'), +('10', '1', '5', '30362', '3140', '0'), +('10', '1', '8', '11603', '8419', '0'), +('10', '1', '8', '1546', '8223', '0'), +('10', '1', '8', '2349', '3554', '0'), +('10', '1', '8', '11621', '3521', '0'), +('10', '1', '6', '1557', '5310', '0'), +('10', '1', '6', '1401', '2924', '0'), +('10', '1', '6', '2286', '1989', '0'), +('10', '1', '6', '27728', '1105', '0'), +('10', '1', '17', '2285', '9415', '0'), +('10', '1', '17', '4872', '2830', '0'), +('10', '1', '17', '4946', '565', '0'), +('10', '1', '17', '3305', '403', '0'), +('10', '1', '7', '1362', '3124', '0'), +('10', '1', '7', '1321', '1746', '0'), +('10', '1', '7', '2289', '1379', '0'), +('10', '1', '7', '2458', '936', '0'), +('10', '1', '9', '27727', '5103', '0'), +('10', '1', '9', '14650', '2412', '0'), +('10', '1', '9', '4344', '2051', '0'), +('10', '1', '9', '10408', '2002', '0'), +('10', '1', '15', '10366', '4805', '0'), +('10', '1', '15', '10151', '4200', '0'), +('10', '1', '15', '10163', '3800', '0'), +('10', '1', '15', '14679', '3330', '0'), +('10', '1', '20', '11666', '12050', '0'), +('10', '1', '20', '27727', '5103', '0'), +('10', '1', '20', '2742', '5085', '0'), +('10', '1', '20', '2288', '4478', '0'), +('10', '1', '12', '2923', '4324', '0'), +('10', '1', '12', '2291', '3830', '0'), +('10', '1', '12', '20655', '3629', '0'), +('10', '1', '12', '4835', '3109', '0'), +('10', '1', '18', '4410', '1642', '0'), +('10', '1', '18', '2461', '991', '0'), +('10', '1', '18', '2292', '889', '0'), +('10', '1', '18', '1366', '747', '0'), +('10', '1', '19', '2293', '3271', '0'), +('10', '1', '19', '68239', '2710', '0'), +('10', '1', '19', '1368', '2016', '0'), +('10', '1', '19', '4877', '1500', '0'), +('10', '1', '13', '27729', '8171', '0'), +('10', '1', '13', '11694', '7684', '0'), +('10', '1', '13', '10333', '6800', '0'), +('10', '1', '13', '10334', '3503', '0'), +('10', '1', '14', '10333', '6800', '0'), +('10', '1', '14', '12802', '5139', '0'), +('10', '1', '14', '10334', '3503', '0'), +('10', '1', '14', '11632', '3480', '0'), +('10', '1', '11', '14762', '3204', '0'), +('10', '1', '11', '7051', '2216', '0'), +('10', '1', '11', '20677', '1200', '0'), +('10', '1', '11', '7048', '191', '0'), +('10', '2', '22', '9246', '0', '0'), +('10', '2', '22', '21518', '0', '0'), +('10', '2', '22', '10323', '0', '0'), +('10', '2', '22', '44492', '0', '0'), +('10', '2', '1', '14702', '5000', '0'), +('10', '2', '1', '14701', '4612', '0'), +('10', '2', '1', '30361', '2640', '0'), +('10', '2', '1', '10321', '1000', '0'), +('10', '2', '2', '10143', '7118', '0'), +('10', '2', '2', '30363', '3700', '0'), +('10', '2', '2', '3000', '2534', '0'), +('10', '2', '2', '2294', '2088', '0'), +('10', '2', '3', '2295', '1066', '0'), +('10', '2', '3', '14705', '990', '0'), +('10', '2', '3', '14706', '990', '0'), +('10', '2', '3', '10144', '614', '0'), +('10', '2', '5', '14703', '8800', '0'), +('10', '2', '5', '14700', '4818', '0'), +('10', '2', '5', '10055', '4030', '0'), +('10', '2', '5', '30362', '3140', '0'), +('10', '2', '8', '11603', '8528', '0'), +('10', '2', '8', '1546', '8344', '0'), +('10', '2', '8', '2349', '3554', '0'), +('10', '2', '8', '11621', '3521', '0'), +('10', '2', '6', '1557', '5310', '0'), +('10', '2', '6', '1401', '2924', '0'), +('10', '2', '6', '2286', '1998', '0'), +('10', '2', '6', '27728', '1250', '0'), +('10', '2', '17', '2285', '9463', '0'), +('10', '2', '17', '4872', '3004', '0'), +('10', '2', '17', '4946', '565', '0'), +('10', '2', '17', '3305', '403', '0'), +('10', '2', '7', '1362', '3124', '0'), +('10', '2', '7', '1321', '1746', '0'), +('10', '2', '7', '2289', '1427', '0'), +('10', '2', '7', '2458', '936', '0'), +('10', '2', '9', '27727', '5163', '0'), +('10', '2', '9', '14650', '2412', '0'), +('10', '2', '9', '4344', '2051', '0'), +('10', '2', '9', '10408', '2002', '0'), +('10', '2', '15', '10366', '4805', '0'), +('10', '2', '15', '10151', '4200', '0'), +('10', '2', '15', '10163', '3800', '0'), +('10', '2', '15', '14679', '3330', '0'), +('10', '2', '20', '11666', '12062', '0'), +('10', '2', '20', '27727', '5163', '0'), +('10', '2', '20', '2742', '5103', '0'), +('10', '2', '20', '2288', '4478', '0'), +('10', '2', '12', '2923', '4324', '0'), +('10', '2', '12', '2291', '3830', '0'), +('10', '2', '12', '20655', '3657', '0'), +('10', '2', '12', '4835', '3118', '0'), +('10', '2', '18', '4410', '1642', '0'), +('10', '2', '18', '2461', '1039', '0'), +('10', '2', '18', '2292', '938', '0'), +('10', '2', '18', '1366', '747', '0'), +('10', '2', '19', '2293', '3308', '0'), +('10', '2', '19', '68239', '2746', '0'), +('10', '2', '19', '1368', '2016', '0'), +('10', '2', '19', '4877', '1500', '0'), +('10', '2', '13', '27729', '8340', '0'), +('10', '2', '13', '11694', '7865', '0'), +('10', '2', '13', '10333', '6800', '0'), +('10', '2', '13', '10334', '3503', '0'), +('10', '2', '14', '10333', '6800', '0'), +('10', '2', '14', '12802', '5199', '0'), +('10', '2', '14', '11632', '3507', '0'), +('10', '2', '14', '10334', '3503', '0'), +('10', '2', '11', '14762', '3204', '0'), +('10', '2', '11', '7051', '2277', '0'), +('10', '2', '11', '20677', '1200', '0'), +('10', '2', '11', '9246', '254', '0'), +('10', '3', '22', '9246', '0', '0'), +('10', '3', '22', '21518', '0', '0'), +('10', '3', '22', '10323', '0', '0'), +('10', '3', '22', '44492', '0', '0'), +('10', '3', '1', '14702', '5000', '0'), +('10', '3', '1', '14701', '4612', '0'), +('10', '3', '1', '30361', '2640', '0'), +('10', '3', '1', '10321', '1000', '0'), +('10', '3', '2', '10143', '7118', '0'), +('10', '3', '2', '30363', '3700', '0'), +('10', '3', '2', '3000', '2534', '0'), +('10', '3', '2', '2294', '2112', '0'), +('10', '3', '3', '2295', '1091', '0'), +('10', '3', '3', '14705', '990', '0'), +('10', '3', '3', '14706', '990', '0'), +('10', '3', '3', '10144', '614', '0'), +('10', '3', '5', '14703', '8800', '0'), +('10', '3', '5', '14700', '4818', '0'), +('10', '3', '5', '10055', '4030', '0'), +('10', '3', '5', '30362', '3140', '0'), +('10', '3', '8', '11603', '8637', '0'), +('10', '3', '8', '1546', '8465', '0'), +('10', '3', '8', '2349', '3554', '0'), +('10', '3', '8', '11621', '3521', '0'), +('10', '3', '6', '1557', '5310', '0'), +('10', '3', '6', '1401', '2924', '0'), +('10', '3', '6', '2286', '2007', '0'), +('10', '3', '6', '27728', '1395', '0'), +('10', '3', '17', '2285', '9511', '0'), +('10', '3', '17', '4872', '3177', '0'), +('10', '3', '17', '4946', '565', '0'), +('10', '3', '17', '4342', '489', '0'), +('10', '3', '7', '1362', '3124', '0'), +('10', '3', '7', '1321', '1746', '0'), +('10', '3', '7', '2289', '1475', '0'), +('10', '3', '7', '2458', '936', '0'), +('10', '3', '9', '27727', '5223', '0'), +('10', '3', '9', '14650', '2412', '0'), +('10', '3', '9', '4344', '2051', '0'), +('10', '3', '9', '10408', '2002', '0'), +('10', '3', '15', '10366', '4805', '0'), +('10', '3', '15', '10151', '4200', '0'), +('10', '3', '15', '10163', '3800', '0'), +('10', '3', '15', '14679', '3330', '0'), +('10', '3', '20', '11666', '12075', '0'), +('10', '3', '20', '27727', '5223', '0'), +('10', '3', '20', '2742', '5121', '0'), +('10', '3', '20', '2288', '4478', '0'), +('10', '3', '12', '2923', '4324', '0'), +('10', '3', '12', '2291', '3830', '0'), +('10', '3', '12', '20655', '3685', '0'), +('10', '3', '12', '4835', '3127', '0'), +('10', '3', '18', '4410', '1642', '0'), +('10', '3', '18', '2461', '1087', '0'), +('10', '3', '18', '2292', '986', '0'), +('10', '3', '18', '1366', '747', '0'), +('10', '3', '19', '2293', '3344', '0'), +('10', '3', '19', '68239', '2782', '0'), +('10', '3', '19', '1368', '2016', '0'), +('10', '3', '19', '4877', '1500', '0'), +('10', '3', '13', '27729', '8509', '0'), +('10', '3', '13', '11694', '8046', '0'), +('10', '3', '13', '10333', '6800', '0'), +('10', '3', '13', '10334', '3503', '0'), +('10', '3', '14', '10333', '6800', '0'), +('10', '3', '14', '12802', '5260', '0'), +('10', '3', '14', '11632', '3535', '0'), +('10', '3', '14', '10334', '3503', '0'), +('10', '3', '11', '14762', '3204', '0'), +('10', '3', '11', '7051', '2337', '0'), +('10', '3', '11', '20677', '1200', '0'), +('10', '3', '11', '9246', '374', '0'), +('10', '4', '22', '9246', '0', '0'), +('10', '4', '22', '21518', '0', '0'), +('10', '4', '22', '10323', '0', '0'), +('10', '4', '22', '44492', '0', '0'), +('10', '4', '1', '14702', '5000', '0'), +('10', '4', '1', '14701', '4612', '0'), +('10', '4', '1', '30361', '2640', '0'), +('10', '4', '1', '10321', '1000', '0'), +('10', '4', '2', '10143', '7118', '0'), +('10', '4', '2', '30363', '3700', '0'), +('10', '4', '2', '3000', '2534', '0'), +('10', '4', '2', '2294', '2137', '0'), +('10', '4', '3', '2295', '1115', '0'), +('10', '4', '3', '14705', '990', '0'), +('10', '4', '3', '14706', '990', '0'), +('10', '4', '3', '11052', '725', '0'), +('10', '4', '5', '14703', '8800', '0'), +('10', '4', '5', '14700', '4818', '0'), +('10', '4', '5', '10055', '4030', '0'), +('10', '4', '5', '30362', '3140', '0'), +('10', '4', '8', '11603', '8745', '0'), +('10', '4', '8', '1546', '8586', '0'), +('10', '4', '8', '2349', '3554', '0'), +('10', '4', '8', '11621', '3521', '0'), +('10', '4', '6', '1557', '5310', '0'), +('10', '4', '6', '1401', '2924', '0'), +('10', '4', '6', '2286', '2016', '0'), +('10', '4', '6', '27728', '1540', '0'), +('10', '4', '17', '2285', '9560', '0'), +('10', '4', '17', '4872', '3350', '0'), +('10', '4', '17', '4342', '610', '0'), +('10', '4', '17', '4946', '565', '0'), +('10', '4', '7', '1362', '3124', '0'), +('10', '4', '7', '1321', '1746', '0'), +('10', '4', '7', '2289', '1523', '0'), +('10', '4', '7', '2458', '936', '0'), +('10', '4', '9', '27727', '5284', '0'), +('10', '4', '9', '14650', '2412', '0'), +('10', '4', '9', '4344', '2051', '0'), +('10', '4', '9', '10408', '2002', '0'), +('10', '4', '15', '10366', '4805', '0'), +('10', '4', '15', '10151', '4200', '0'), +('10', '4', '15', '10163', '3800', '0'), +('10', '4', '15', '14679', '3330', '0'), +('10', '4', '20', '11666', '12088', '0'), +('10', '4', '20', '27727', '5284', '0'), +('10', '4', '20', '2742', '5139', '0'), +('10', '4', '20', '2288', '4478', '0'), +('10', '4', '12', '2923', '4324', '0'), +('10', '4', '12', '2291', '3830', '0'), +('10', '4', '12', '20655', '3713', '0'), +('10', '4', '12', '4835', '3136', '0'), +('10', '4', '18', '4410', '1642', '0'), +('10', '4', '18', '2461', '1136', '0'), +('10', '4', '18', '2292', '1034', '0'), +('10', '4', '18', '1366', '747', '0'), +('10', '4', '19', '2293', '3380', '0'), +('10', '4', '19', '68239', '2818', '0'), +('10', '4', '19', '1368', '2016', '0'), +('10', '4', '19', '4877', '1500', '0'), +('10', '4', '13', '27729', '8678', '0'), +('10', '4', '13', '11694', '8227', '0'), +('10', '4', '13', '10333', '6800', '0'), +('10', '4', '13', '10334', '3503', '0'), +('10', '4', '14', '10333', '6800', '0'), +('10', '4', '14', '12802', '5320', '0'), +('10', '4', '14', '11632', '3562', '0'), +('10', '4', '14', '1679', '3533', '0'), +('10', '4', '11', '14762', '3204', '0'), +('10', '4', '11', '7051', '2398', '0'), +('10', '4', '11', '20677', '1200', '0'), +('10', '4', '11', '9246', '495', '0'), +('10', '5', '22', '9246', '0', '0'), +('10', '5', '22', '21518', '0', '0'), +('10', '5', '22', '10323', '0', '0'), +('10', '5', '22', '44492', '0', '0'), +('10', '5', '1', '14702', '5000', '0'), +('10', '5', '1', '14701', '4612', '0'), +('10', '5', '1', '30361', '2640', '0'), +('10', '5', '1', '10321', '1000', '0'), +('10', '5', '2', '10143', '7118', '0'), +('10', '5', '2', '30363', '3700', '0'), +('10', '5', '2', '3000', '2534', '0'), +('10', '5', '2', '2294', '2161', '0'), +('10', '5', '3', '2295', '1139', '0'), +('10', '5', '3', '14705', '990', '0'), +('10', '5', '3', '14706', '990', '0'), +('10', '5', '3', '11052', '906', '0'), +('10', '5', '5', '14703', '8800', '0'), +('10', '5', '5', '14700', '4818', '0'), +('10', '5', '5', '10055', '4030', '0'), +('10', '5', '5', '30362', '3140', '0'), +('10', '5', '8', '11603', '8854', '0'), +('10', '5', '8', '1546', '8707', '0'), +('10', '5', '8', '2349', '3554', '0'), +('10', '5', '8', '11621', '3521', '0'), +('10', '5', '6', '1557', '5310', '0'), +('10', '5', '6', '1401', '2924', '0'), +('10', '5', '6', '2286', '2026', '0'), +('10', '5', '6', '27728', '1685', '0'), +('10', '5', '17', '2285', '9608', '0'), +('10', '5', '17', '4872', '3524', '0'), +('10', '5', '17', '4342', '731', '0'), +('10', '5', '17', '4946', '565', '0'), +('10', '5', '7', '1362', '3124', '0'), +('10', '5', '7', '1321', '1746', '0'), +('10', '5', '7', '2289', '1572', '0'), +('10', '5', '7', '2458', '936', '0'), +('10', '5', '9', '27727', '5344', '0'), +('10', '5', '9', '14650', '2412', '0'), +('10', '5', '9', '4344', '2051', '0'), +('10', '5', '9', '10408', '2002', '0'), +('10', '5', '15', '10366', '4805', '0'), +('10', '5', '15', '10151', '4200', '0'), +('10', '5', '15', '10163', '3800', '0'), +('10', '5', '15', '14679', '3330', '0'), +('10', '5', '20', '11666', '12100', '0'), +('10', '5', '20', '27727', '5344', '0'), +('10', '5', '20', '2742', '5157', '0'), +('10', '5', '20', '2288', '4478', '0'), +('10', '5', '12', '2923', '4324', '0'), +('10', '5', '12', '2291', '3830', '0'), +('10', '5', '12', '20655', '3740', '0'), +('10', '5', '12', '4835', '3145', '0'), +('10', '5', '18', '4410', '1642', '0'), +('10', '5', '18', '2461', '1184', '0'), +('10', '5', '18', '2292', '1083', '0'), +('10', '5', '18', '1366', '747', '0'), +('10', '5', '19', '2293', '3416', '0'), +('10', '5', '19', '68239', '2855', '0'), +('10', '5', '19', '1368', '2016', '0'), +('10', '5', '19', '4877', '1500', '0'), +('10', '5', '13', '27729', '8848', '0'), +('10', '5', '13', '11694', '8408', '0'), +('10', '5', '13', '10333', '6800', '0'), +('10', '5', '13', '10334', '3503', '0'), +('10', '5', '14', '10333', '6800', '0'), +('10', '5', '14', '12802', '5381', '0'), +('10', '5', '14', '1679', '3594', '0'), +('10', '5', '14', '11632', '3589', '0'), +('10', '5', '11', '14762', '3204', '0'), +('10', '5', '11', '7051', '2458', '0'), +('10', '5', '11', '20677', '1200', '0'), +('10', '5', '11', '9246', '616', '0'), +('10', '6', '22', '9246', '0', '0'), +('10', '6', '22', '21518', '0', '0'), +('10', '6', '22', '10323', '0', '0'), +('10', '6', '22', '44492', '0', '0'), +('10', '6', '1', '14702', '5000', '0'), +('10', '6', '1', '14701', '4612', '0'), +('10', '6', '1', '30361', '2640', '0'), +('10', '6', '1', '10321', '1000', '0'), +('10', '6', '2', '10143', '7118', '0'), +('10', '6', '2', '30363', '3700', '0'), +('10', '6', '2', '3000', '2534', '0'), +('10', '6', '2', '2294', '2185', '0'), +('10', '6', '3', '2295', '1163', '0'), +('10', '6', '3', '11052', '1087', '0'), +('10', '6', '3', '14705', '990', '0'), +('10', '6', '3', '14706', '990', '0'), +('10', '6', '5', '14703', '8800', '0'), +('10', '6', '5', '14700', '4818', '0'), +('10', '6', '5', '10055', '4030', '0'), +('10', '6', '5', '30362', '3140', '0'), +('10', '6', '8', '11603', '8963', '0'), +('10', '6', '8', '1546', '8827', '0'), +('10', '6', '8', '2349', '3554', '0'), +('10', '6', '8', '11621', '3521', '0'), +('10', '6', '6', '1557', '5310', '0'), +('10', '6', '6', '1401', '2924', '0'), +('10', '6', '6', '2286', '2035', '0'), +('10', '6', '6', '27728', '1830', '0'), +('10', '6', '17', '2285', '9656', '0'), +('10', '6', '17', '4872', '3697', '0'), +('10', '6', '17', '4342', '852', '0'), +('10', '6', '17', '4946', '565', '0'), +('10', '6', '7', '1362', '3124', '0'), +('10', '6', '7', '1321', '1746', '0'), +('10', '6', '7', '2289', '1620', '0'), +('10', '6', '7', '2458', '936', '0'), +('10', '6', '9', '27727', '5405', '0'), +('10', '6', '9', '14650', '2412', '0'), +('10', '6', '9', '4344', '2051', '0'), +('10', '6', '9', '10408', '2002', '0'), +('10', '6', '15', '10366', '4805', '0'), +('10', '6', '15', '10151', '4200', '0'), +('10', '6', '15', '10163', '3800', '0'), +('10', '6', '15', '14679', '3330', '0'), +('10', '6', '20', '11666', '12113', '0'), +('10', '6', '20', '27727', '5405', '0'), +('10', '6', '20', '2742', '5175', '0'), +('10', '6', '20', '2288', '4478', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '6', '12', '2923', '4324', '0'), +('10', '6', '12', '2291', '3830', '0'), +('10', '6', '12', '20655', '3768', '0'), +('10', '6', '12', '4835', '3154', '0'), +('10', '6', '18', '4410', '1642', '0'), +('10', '6', '18', '2461', '1232', '0'), +('10', '6', '18', '2292', '1131', '0'), +('10', '6', '18', '1366', '747', '0'), +('10', '6', '19', '2293', '3452', '0'), +('10', '6', '19', '68239', '2891', '0'), +('10', '6', '19', '1368', '2016', '0'), +('10', '6', '19', '4877', '1500', '0'), +('10', '6', '13', '27729', '9017', '0'), +('10', '6', '13', '11694', '8590', '0'), +('10', '6', '13', '10333', '6800', '0'), +('10', '6', '13', '10334', '3503', '0'), +('10', '6', '14', '10333', '6800', '0'), +('10', '6', '14', '12802', '5441', '0'), +('10', '6', '14', '1679', '3654', '0'), +('10', '6', '14', '11632', '3616', '0'), +('10', '6', '11', '14762', '3204', '0'), +('10', '6', '11', '7051', '2518', '0'), +('10', '6', '11', '20677', '1200', '0'), +('10', '6', '11', '9246', '737', '0'), +('10', '7', '22', '9246', '0', '0'), +('10', '7', '22', '21518', '0', '0'), +('10', '7', '22', '10323', '0', '0'), +('10', '7', '22', '44492', '0', '0'), +('10', '7', '1', '14702', '5000', '0'), +('10', '7', '1', '14701', '4612', '0'), +('10', '7', '1', '30361', '2640', '0'), +('10', '7', '1', '10321', '1000', '0'), +('10', '7', '2', '10143', '7118', '0'), +('10', '7', '2', '30363', '3700', '0'), +('10', '7', '2', '3000', '2534', '0'), +('10', '7', '2', '2294', '2209', '0'), +('10', '7', '3', '11052', '1268', '0'), +('10', '7', '3', '2295', '1187', '0'), +('10', '7', '3', '14705', '990', '0'), +('10', '7', '3', '14706', '990', '0'), +('10', '7', '5', '14703', '8800', '0'), +('10', '7', '5', '14700', '4818', '0'), +('10', '7', '5', '10055', '4030', '0'), +('10', '7', '5', '30362', '3140', '0'), +('10', '7', '8', '11603', '9071', '0'), +('10', '7', '8', '1546', '8948', '0'), +('10', '7', '8', '2349', '3554', '0'), +('10', '7', '8', '11621', '3521', '0'), +('10', '7', '6', '1557', '5310', '0'), +('10', '7', '6', '1401', '2924', '0'), +('10', '7', '6', '2286', '2044', '0'), +('10', '7', '6', '27728', '1975', '0'), +('10', '7', '17', '2285', '9705', '0'), +('10', '7', '17', '4872', '3870', '0'), +('10', '7', '17', '4342', '972', '0'), +('10', '7', '17', '4946', '565', '0'), +('10', '7', '7', '1362', '3124', '0'), +('10', '7', '7', '1321', '1746', '0'), +('10', '7', '7', '2289', '1668', '0'), +('10', '7', '7', '2458', '936', '0'), +('10', '7', '9', '27727', '5465', '0'), +('10', '7', '9', '14650', '2412', '0'), +('10', '7', '9', '4344', '2051', '0'), +('10', '7', '9', '10408', '2002', '0'), +('10', '7', '15', '10366', '4805', '0'), +('10', '7', '15', '10151', '4200', '0'), +('10', '7', '15', '10163', '3800', '0'), +('10', '7', '15', '14679', '3330', '0'), +('10', '7', '20', '11666', '12126', '0'), +('10', '7', '20', '27727', '5465', '0'), +('10', '7', '20', '2742', '5193', '0'), +('10', '7', '20', '2288', '4478', '0'), +('10', '7', '12', '2923', '4324', '0'), +('10', '7', '12', '2291', '3830', '0'), +('10', '7', '12', '20655', '3796', '0'), +('10', '7', '12', '4835', '3163', '0'), +('10', '7', '18', '4410', '1642', '0'), +('10', '7', '18', '2461', '1281', '0'), +('10', '7', '18', '2292', '1179', '0'), +('10', '7', '18', '1366', '747', '0'), +('10', '7', '19', '2293', '3489', '0'), +('10', '7', '19', '68239', '2927', '0'), +('10', '7', '19', '1368', '2016', '0'), +('10', '7', '19', '4877', '1500', '0'), +('10', '7', '13', '27729', '9186', '0'), +('10', '7', '13', '11694', '8771', '0'), +('10', '7', '13', '10333', '6800', '0'), +('10', '7', '13', '10334', '3503', '0'), +('10', '7', '14', '10333', '6800', '0'), +('10', '7', '14', '12802', '5501', '0'), +('10', '7', '14', '1679', '3715', '0'), +('10', '7', '14', '11632', '3643', '0'), +('10', '7', '11', '14762', '3204', '0'), +('10', '7', '11', '7051', '2579', '0'), +('10', '7', '11', '20677', '1200', '0'), +('10', '7', '11', '9246', '858', '0'), +('10', '8', '22', '9246', '0', '0'), +('10', '8', '22', '21518', '0', '0'), +('10', '8', '22', '10323', '0', '0'), +('10', '8', '22', '44492', '0', '0'), +('10', '8', '1', '14702', '5000', '0'), +('10', '8', '1', '14701', '4612', '0'), +('10', '8', '1', '30361', '2640', '0'), +('10', '8', '1', '10321', '1000', '0'), +('10', '8', '2', '10143', '7118', '0'), +('10', '8', '2', '30363', '3700', '0'), +('10', '8', '2', '3000', '2534', '0'), +('10', '8', '2', '2294', '2233', '0'), +('10', '8', '3', '11052', '1450', '0'), +('10', '8', '3', '2295', '1211', '0'), +('10', '8', '3', '14705', '990', '0'), +('10', '8', '3', '14706', '990', '0'), +('10', '8', '5', '14703', '8800', '0'), +('10', '8', '5', '14700', '4818', '0'), +('10', '8', '5', '10055', '4030', '0'), +('10', '8', '5', '30362', '3140', '0'), +('10', '8', '8', '11603', '9180', '0'), +('10', '8', '8', '1546', '9069', '0'), +('10', '8', '8', '2349', '3554', '0'), +('10', '8', '8', '11621', '3521', '0'), +('10', '8', '6', '1557', '5310', '0'), +('10', '8', '6', '1401', '2924', '0'), +('10', '8', '6', '27728', '2120', '0'), +('10', '8', '6', '2286', '2053', '0'), +('10', '8', '17', '2285', '9753', '0'), +('10', '8', '17', '4872', '4044', '0'), +('10', '8', '17', '4342', '1093', '0'), +('10', '8', '17', '2405', '587', '0'), +('10', '8', '7', '1362', '3124', '0'), +('10', '8', '7', '1321', '1746', '0'), +('10', '8', '7', '2289', '1717', '0'), +('10', '8', '7', '2458', '936', '0'), +('10', '8', '9', '27727', '5525', '0'), +('10', '8', '9', '14650', '2412', '0'), +('10', '8', '9', '4344', '2051', '0'), +('10', '8', '9', '10408', '2002', '0'), +('10', '8', '15', '10366', '4805', '0'), +('10', '8', '15', '10151', '4200', '0'), +('10', '8', '15', '10163', '3800', '0'), +('10', '8', '15', '14679', '3330', '0'), +('10', '8', '20', '11666', '12138', '0'), +('10', '8', '20', '27727', '5525', '0'), +('10', '8', '20', '2742', '5211', '0'), +('10', '8', '20', '2288', '4478', '0'), +('10', '8', '12', '2923', '4324', '0'), +('10', '8', '12', '2291', '3830', '0'), +('10', '8', '12', '20655', '3824', '0'), +('10', '8', '12', '4835', '3172', '0'), +('10', '8', '18', '4410', '1642', '0'), +('10', '8', '18', '2461', '1329', '0'), +('10', '8', '18', '2292', '1228', '0'), +('10', '8', '18', '4876', '784', '0'), +('10', '8', '19', '2293', '3525', '0'), +('10', '8', '19', '68239', '2963', '0'), +('10', '8', '19', '1368', '2016', '0'), +('10', '8', '19', '4837', '1507', '0'), +('10', '8', '13', '27729', '9355', '0'), +('10', '8', '13', '11694', '8952', '0'), +('10', '8', '13', '10333', '6800', '0'), +('10', '8', '13', '10334', '3503', '0'), +('10', '8', '14', '10333', '6800', '0'), +('10', '8', '14', '12802', '5562', '0'), +('10', '8', '14', '1679', '3775', '0'), +('10', '8', '14', '11632', '3670', '0'), +('10', '8', '11', '14762', '3204', '0'), +('10', '8', '11', '7051', '2639', '0'), +('10', '8', '11', '20677', '1200', '0'), +('10', '8', '11', '9246', '978', '0'), +('10', '9', '22', '9246', '0', '0'), +('10', '9', '22', '21518', '0', '0'), +('10', '9', '22', '10323', '0', '0'), +('10', '9', '22', '44492', '0', '0'), +('10', '9', '1', '14702', '5000', '0'), +('10', '9', '1', '14701', '4612', '0'), +('10', '9', '1', '30361', '2640', '0'), +('10', '9', '1', '10321', '1000', '0'), +('10', '9', '2', '10143', '7118', '0'), +('10', '9', '2', '30363', '3700', '0'), +('10', '9', '2', '3000', '2534', '0'), +('10', '9', '2', '2294', '2257', '0'), +('10', '9', '3', '11052', '1631', '0'), +('10', '9', '3', '2295', '1236', '0'), +('10', '9', '3', '14706', '990', '0'), +('10', '9', '3', '14705', '990', '0'), +('10', '9', '5', '14703', '8800', '0'), +('10', '9', '5', '14700', '4818', '0'), +('10', '9', '5', '10055', '4030', '0'), +('10', '9', '5', '30362', '3140', '0'), +('10', '9', '8', '11603', '9289', '0'), +('10', '9', '8', '1546', '9190', '0'), +('10', '9', '8', '2349', '3554', '0'), +('10', '9', '8', '11621', '3521', '0'), +('10', '9', '6', '1557', '5310', '0'), +('10', '9', '6', '1401', '2924', '0'), +('10', '9', '6', '27728', '2265', '0'), +('10', '9', '6', '2286', '2062', '0'), +('10', '9', '17', '2285', '9801', '0'), +('10', '9', '17', '4872', '4217', '0'), +('10', '9', '17', '4342', '1214', '0'), +('10', '9', '17', '2405', '653', '0'), +('10', '9', '7', '1362', '3124', '0'), +('10', '9', '7', '2289', '1765', '0'), +('10', '9', '7', '1321', '1746', '0'), +('10', '9', '7', '2458', '936', '0'), +('10', '9', '9', '27727', '5586', '0'), +('10', '9', '9', '14650', '2412', '0'), +('10', '9', '9', '4344', '2051', '0'), +('10', '9', '9', '10408', '2002', '0'), +('10', '9', '15', '10366', '4805', '0'), +('10', '9', '15', '10151', '4200', '0'), +('10', '9', '15', '10163', '3800', '0'), +('10', '9', '15', '14679', '3330', '0'), +('10', '9', '20', '11666', '12151', '0'), +('10', '9', '20', '27727', '5586', '0'), +('10', '9', '20', '2742', '5230', '0'), +('10', '9', '20', '2288', '4478', '0'), +('10', '9', '12', '2923', '4324', '0'), +('10', '9', '12', '20655', '3852', '0'), +('10', '9', '12', '2291', '3830', '0'), +('10', '9', '12', '4835', '3181', '0'), +('10', '9', '18', '4410', '1642', '0'), +('10', '9', '18', '2461', '1377', '0'), +('10', '9', '18', '2292', '1276', '0'), +('10', '9', '18', '4876', '844', '0'), +('10', '9', '19', '2293', '3561', '0'), +('10', '9', '19', '68239', '3000', '0'), +('10', '9', '19', '1368', '2016', '0'), +('10', '9', '19', '4837', '1567', '0'), +('10', '9', '13', '27729', '9524', '0'), +('10', '9', '13', '11694', '9133', '0'), +('10', '9', '13', '10333', '6800', '0'), +('10', '9', '13', '10334', '3503', '0'), +('10', '9', '14', '10333', '6800', '0'), +('10', '9', '14', '12802', '5622', '0'), +('10', '9', '14', '1679', '3835', '0'), +('10', '9', '14', '11632', '3698', '0'), +('10', '9', '11', '14762', '3204', '0'), +('10', '9', '11', '7051', '2700', '0'), +('10', '9', '11', '20677', '1200', '0'), +('10', '9', '11', '9246', '1099', '0'), +('10', '10', '22', '9246', '0', '0'), +('10', '10', '22', '21518', '0', '0'), +('10', '10', '22', '10323', '0', '0'), +('10', '10', '22', '44492', '0', '0'), +('10', '10', '1', '14702', '5000', '0'), +('10', '10', '1', '14701', '4612', '0'), +('10', '10', '1', '30361', '2640', '0'), +('10', '10', '1', '10321', '1000', '0'), +('10', '10', '2', '10143', '7118', '0'), +('10', '10', '2', '30363', '3700', '0'), +('10', '10', '2', '3000', '2534', '0'), +('10', '10', '2', '2294', '2281', '0'), +('10', '10', '3', '11052', '1812', '0'), +('10', '10', '3', '2295', '1260', '0'), +('10', '10', '3', '14706', '990', '0'), +('10', '10', '3', '14705', '990', '0'), +('10', '10', '5', '14703', '8800', '0'), +('10', '10', '5', '14700', '4818', '0'), +('10', '10', '5', '10055', '4030', '0'), +('10', '10', '5', '30362', '3140', '0'), +('10', '10', '8', '11603', '9398', '0'), +('10', '10', '8', '1546', '9311', '0'), +('10', '10', '8', '2349', '3554', '0'), +('10', '10', '8', '11621', '3521', '0'), +('10', '10', '6', '1557', '5310', '0'), +('10', '10', '6', '1401', '2924', '0'), +('10', '10', '6', '27728', '2410', '0'), +('10', '10', '6', '2286', '2071', '0'), +('10', '10', '17', '2285', '9850', '0'), +('10', '10', '17', '4872', '4391', '0'), +('10', '10', '17', '4342', '1335', '0'), +('10', '10', '17', '2405', '719', '0'), +('10', '10', '7', '1362', '3124', '0'), +('10', '10', '7', '2289', '1813', '0'), +('10', '10', '7', '1321', '1746', '0'), +('10', '10', '7', '2458', '936', '0'), +('10', '10', '9', '27727', '5646', '0'), +('10', '10', '9', '14650', '2412', '0'), +('10', '10', '9', '4344', '2051', '0'), +('10', '10', '9', '10408', '2002', '0'), +('10', '10', '15', '10366', '4805', '0'), +('10', '10', '15', '10151', '4200', '0'), +('10', '10', '15', '10163', '3800', '0'), +('10', '10', '15', '14679', '3330', '0'), +('10', '10', '20', '11666', '12164', '0'), +('10', '10', '20', '27727', '5646', '0'), +('10', '10', '20', '2742', '5248', '0'), +('10', '10', '20', '2288', '4478', '0'), +('10', '10', '12', '2923', '4324', '0'), +('10', '10', '12', '20655', '3879', '0'), +('10', '10', '12', '2291', '3830', '0'), +('10', '10', '12', '4835', '3190', '0'), +('10', '10', '18', '4410', '1642', '0'), +('10', '10', '18', '2461', '1425', '0'), +('10', '10', '18', '2292', '1324', '0'), +('10', '10', '18', '4876', '905', '0'), +('10', '10', '19', '2293', '3597', '0'), +('10', '10', '19', '68239', '3036', '0'), +('10', '10', '19', '1368', '2016', '0'), +('10', '10', '19', '4837', '1628', '0'), +('10', '10', '13', '27729', '9693', '0'), +('10', '10', '13', '11694', '9314', '0'), +('10', '10', '13', '10333', '6800', '0'), +('10', '10', '13', '10334', '3503', '0'), +('10', '10', '14', '10333', '6800', '0'), +('10', '10', '14', '12802', '5683', '0'), +('10', '10', '14', '1679', '3896', '0'), +('10', '10', '14', '11632', '3725', '0'), +('10', '10', '11', '14762', '3204', '0'), +('10', '10', '11', '7051', '2760', '0'), +('10', '10', '11', '9246', '1220', '0'), +('10', '10', '11', '20677', '1200', '0'), +('10', '11', '22', '9246', '0', '0'), +('10', '11', '22', '21518', '0', '0'), +('10', '11', '22', '10323', '0', '0'), +('10', '11', '22', '44492', '0', '0'), +('10', '11', '1', '14702', '5000', '0'), +('10', '11', '1', '14701', '4612', '0'), +('10', '11', '1', '30361', '2640', '0'), +('10', '11', '1', '10321', '1000', '0'), +('10', '11', '2', '10143', '7118', '0'), +('10', '11', '2', '30363', '3700', '0'), +('10', '11', '2', '3000', '2534', '0'), +('10', '11', '2', '2294', '2306', '0'), +('10', '11', '3', '11052', '1993', '0'), +('10', '11', '3', '2295', '1284', '0'), +('10', '11', '3', '14706', '990', '0'), +('10', '11', '3', '14705', '990', '0'), +('10', '11', '5', '14703', '8800', '0'), +('10', '11', '5', '14700', '4818', '0'), +('10', '11', '5', '10055', '4030', '0'), +('10', '11', '5', '30362', '3140', '0'), +('10', '11', '8', '11603', '9506', '0'), +('10', '11', '8', '1546', '9431', '0'), +('10', '11', '8', '2349', '3554', '0'), +('10', '11', '8', '11621', '3521', '0'), +('10', '11', '6', '1557', '5310', '0'), +('10', '11', '6', '1401', '2924', '0'), +('10', '11', '6', '27728', '2555', '0'), +('10', '11', '6', '2286', '2080', '0'), +('10', '11', '17', '2285', '9898', '0'), +('10', '11', '17', '4872', '4564', '0'), +('10', '11', '17', '4342', '1456', '0'), +('10', '11', '17', '2405', '785', '0'), +('10', '11', '7', '1362', '3124', '0'), +('10', '11', '7', '2289', '1862', '0'), +('10', '11', '7', '1321', '1746', '0'), +('10', '11', '7', '2458', '936', '0'), +('10', '11', '9', '27727', '5707', '0'), +('10', '11', '9', '14650', '2412', '0'), +('10', '11', '9', '4344', '2051', '0'), +('10', '11', '9', '10408', '2002', '0'), +('10', '11', '15', '10366', '4805', '0'), +('10', '11', '15', '10151', '4200', '0'), +('10', '11', '15', '10163', '3800', '0'), +('10', '11', '15', '14679', '3330', '0'), +('10', '11', '20', '11666', '12176', '0'), +('10', '11', '20', '27727', '5707', '0'), +('10', '11', '20', '2742', '5266', '0'), +('10', '11', '20', '2288', '4478', '0'), +('10', '11', '12', '2923', '4324', '0'), +('10', '11', '12', '20655', '3907', '0'), +('10', '11', '12', '2291', '3830', '0'), +('10', '11', '12', '4835', '3199', '0'), +('10', '11', '18', '4410', '1642', '0'), +('10', '11', '18', '2461', '1474', '0'), +('10', '11', '18', '2292', '1373', '0'), +('10', '11', '18', '4876', '965', '0'), +('10', '11', '19', '2293', '3634', '0'), +('10', '11', '19', '68239', '3072', '0'), +('10', '11', '19', '1368', '2016', '0'), +('10', '11', '19', '4837', '1688', '0'), +('10', '11', '13', '27729', '9862', '0'), +('10', '11', '13', '11694', '9496', '0'), +('10', '11', '13', '10333', '6800', '0'), +('10', '11', '13', '10334', '3503', '0'), +('10', '11', '14', '10333', '6800', '0'), +('10', '11', '14', '12802', '5743', '0'), +('10', '11', '14', '1679', '3956', '0'), +('10', '11', '14', '11632', '3752', '0'), +('10', '11', '11', '14762', '3204', '0'), +('10', '11', '11', '7051', '2820', '0'), +('10', '11', '11', '9246', '1341', '0'), +('10', '11', '11', '20677', '1200', '0'), +('10', '12', '22', '9246', '0', '0'), +('10', '12', '22', '21518', '0', '0'), +('10', '12', '22', '10323', '0', '0'), +('10', '12', '22', '44492', '0', '0'), +('10', '12', '1', '14702', '5000', '0'), +('10', '12', '1', '14701', '4612', '0'), +('10', '12', '1', '30361', '2640', '0'), +('10', '12', '1', '10321', '1000', '0'), +('10', '12', '2', '10143', '7118', '0'), +('10', '12', '2', '30363', '3700', '0'), +('10', '12', '2', '3000', '2534', '0'), +('10', '12', '2', '2294', '2330', '0'), +('10', '12', '3', '11052', '2174', '0'), +('10', '12', '3', '2295', '1308', '0'), +('10', '12', '3', '4505', '1045', '0'), +('10', '12', '3', '14695', '1023', '0'), +('10', '12', '5', '14703', '8800', '0'), +('10', '12', '5', '14700', '4818', '0'), +('10', '12', '5', '10055', '4030', '0'), +('10', '12', '5', '30362', '3140', '0'), +('10', '12', '8', '11603', '9615', '0'), +('10', '12', '8', '1546', '9552', '0'), +('10', '12', '8', '2349', '3554', '0'), +('10', '12', '8', '11621', '3521', '0'), +('10', '12', '6', '1557', '5310', '0'), +('10', '12', '6', '1401', '2924', '0'), +('10', '12', '6', '27728', '2700', '0'), +('10', '12', '6', '2286', '2089', '0'), +('10', '12', '17', '2285', '9946', '0'), +('10', '12', '17', '4872', '4737', '0'), +('10', '12', '17', '4342', '1576', '0'), +('10', '12', '17', '2405', '850', '0'), +('10', '12', '7', '1362', '3124', '0'), +('10', '12', '7', '2289', '1910', '0'), +('10', '12', '7', '1321', '1746', '0'), +('10', '12', '7', '2458', '936', '0'), +('10', '12', '9', '27727', '5767', '0'), +('10', '12', '9', '14650', '2412', '0'), +('10', '12', '9', '4344', '2051', '0'), +('10', '12', '9', '10408', '2002', '0'), +('10', '12', '15', '10366', '4805', '0'), +('10', '12', '15', '10151', '4200', '0'), +('10', '12', '15', '10163', '3800', '0'), +('10', '12', '15', '14679', '3330', '0'), +('10', '12', '20', '11666', '12189', '0'), +('10', '12', '20', '27727', '5767', '0'), +('10', '12', '20', '2742', '5284', '0'), +('10', '12', '20', '2288', '4478', '0'), +('10', '12', '12', '2923', '4324', '0'), +('10', '12', '12', '20655', '3935', '0'), +('10', '12', '12', '2291', '3830', '0'), +('10', '12', '12', '4835', '3208', '0'), +('10', '12', '18', '4410', '1642', '0'), +('10', '12', '18', '2461', '1522', '0'), +('10', '12', '18', '2292', '1421', '0'), +('10', '12', '18', '4876', '1025', '0'), +('10', '12', '19', '2293', '3670', '0'), +('10', '12', '19', '68239', '3108', '0'), +('10', '12', '19', '1368', '2016', '0'), +('10', '12', '19', '4837', '1749', '0'), +('10', '12', '13', '27729', '10031', '0'), +('10', '12', '13', '11694', '9677', '0'), +('10', '12', '13', '10333', '6800', '0'), +('10', '12', '13', '10334', '3503', '0'), +('10', '12', '14', '10333', '6800', '0'), +('10', '12', '14', '12802', '5803', '0'), +('10', '12', '14', '1679', '4017', '0'), +('10', '12', '14', '11632', '3779', '0'), +('10', '12', '11', '14762', '3204', '0'), +('10', '12', '11', '7051', '2881', '0'), +('10', '12', '11', '9246', '1462', '0'), +('10', '12', '11', '20677', '1200', '0'), +('10', '13', '22', '9246', '0', '0'), +('10', '13', '22', '21518', '0', '0'), +('10', '13', '22', '10323', '0', '0'), +('10', '13', '22', '44492', '0', '0'), +('10', '13', '1', '14702', '5000', '0'), +('10', '13', '1', '14701', '4612', '0'), +('10', '13', '1', '30361', '2640', '0'), +('10', '13', '1', '10321', '1000', '0'), +('10', '13', '2', '10143', '7118', '0'), +('10', '13', '2', '30363', '3700', '0'), +('10', '13', '2', '3000', '2534', '0'), +('10', '13', '2', '2294', '2354', '0'), +('10', '13', '3', '11052', '2356', '0'), +('10', '13', '3', '2295', '1332', '0'), +('10', '13', '3', '4505', '1129', '0'), +('10', '13', '3', '14695', '1108', '0'), +('10', '13', '5', '14703', '8800', '0'), +('10', '13', '5', '14700', '4818', '0'), +('10', '13', '5', '10055', '4030', '0'), +('10', '13', '5', '30362', '3140', '0'), +('10', '13', '8', '11603', '9724', '0'), +('10', '13', '8', '1546', '9673', '0'), +('10', '13', '8', '2349', '3554', '0'), +('10', '13', '8', '11621', '3521', '0'), +('10', '13', '6', '1557', '5310', '0'), +('10', '13', '6', '1401', '2924', '0'), +('10', '13', '6', '27728', '2845', '0'), +('10', '13', '6', '2286', '2098', '0'), +('10', '13', '17', '2285', '9995', '0'), +('10', '13', '17', '4872', '4911', '0'), +('10', '13', '17', '4342', '1697', '0'), +('10', '13', '17', '2405', '916', '0'), +('10', '13', '7', '1362', '3124', '0'), +('10', '13', '7', '2289', '1958', '0'), +('10', '13', '7', '1321', '1746', '0'), +('10', '13', '7', '2458', '936', '0'), +('10', '13', '9', '27727', '5827', '0'), +('10', '13', '9', '14650', '2412', '0'), +('10', '13', '9', '4344', '2051', '0'), +('10', '13', '9', '10408', '2002', '0'), +('10', '13', '15', '10366', '4805', '0'), +('10', '13', '15', '10151', '4200', '0'), +('10', '13', '15', '10163', '3800', '0'), +('10', '13', '15', '14679', '3330', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '13', '20', '11666', '12202', '0'), +('10', '13', '20', '27727', '5827', '0'), +('10', '13', '20', '2742', '5302', '0'), +('10', '13', '20', '2288', '4478', '0'), +('10', '13', '12', '2923', '4324', '0'), +('10', '13', '12', '20655', '3963', '0'), +('10', '13', '12', '2291', '3830', '0'), +('10', '13', '12', '4835', '3217', '0'), +('10', '13', '18', '4410', '1642', '0'), +('10', '13', '18', '2461', '1570', '0'), +('10', '13', '18', '2292', '1469', '0'), +('10', '13', '18', '4876', '1086', '0'), +('10', '13', '19', '2293', '3706', '0'), +('10', '13', '19', '68239', '3145', '0'), +('10', '13', '19', '1368', '2016', '0'), +('10', '13', '19', '4837', '1809', '0'), +('10', '13', '13', '27729', '10201', '0'), +('10', '13', '13', '11694', '9858', '0'), +('10', '13', '13', '10333', '6800', '0'), +('10', '13', '13', '10334', '3503', '0'), +('10', '13', '14', '10333', '6800', '0'), +('10', '13', '14', '12802', '5864', '0'), +('10', '13', '14', '1679', '4077', '0'), +('10', '13', '14', '11632', '3806', '0'), +('10', '13', '11', '14762', '3204', '0'), +('10', '13', '11', '7051', '2941', '0'), +('10', '13', '11', '9246', '1582', '0'), +('10', '13', '11', '20677', '1200', '0'), +('10', '14', '22', '9246', '0', '0'), +('10', '14', '22', '21518', '0', '0'), +('10', '14', '22', '10323', '0', '0'), +('10', '14', '22', '44492', '0', '0'), +('10', '14', '1', '14702', '5000', '0'), +('10', '14', '1', '14701', '4612', '0'), +('10', '14', '1', '30361', '2640', '0'), +('10', '14', '1', '10321', '1000', '0'), +('10', '14', '2', '10143', '7118', '0'), +('10', '14', '2', '30363', '3700', '0'), +('10', '14', '2', '3000', '2534', '0'), +('10', '14', '2', '2294', '2378', '0'), +('10', '14', '3', '11052', '2537', '0'), +('10', '14', '3', '2295', '1356', '0'), +('10', '14', '3', '4505', '1214', '0'), +('10', '14', '3', '14695', '1192', '0'), +('10', '14', '5', '14703', '8800', '0'), +('10', '14', '5', '14700', '4818', '0'), +('10', '14', '5', '10055', '4030', '0'), +('10', '14', '5', '30362', '3140', '0'), +('10', '14', '8', '11603', '9832', '0'), +('10', '14', '8', '1546', '9794', '0'), +('10', '14', '8', '2349', '3554', '0'), +('10', '14', '8', '11621', '3521', '0'), +('10', '14', '6', '1557', '5310', '0'), +('10', '14', '6', '27728', '2990', '0'), +('10', '14', '6', '1401', '2924', '0'), +('10', '14', '6', '2286', '2107', '0'), +('10', '14', '17', '2285', '10043', '0'), +('10', '14', '17', '4872', '5084', '0'), +('10', '14', '17', '4342', '1818', '0'), +('10', '14', '17', '2405', '982', '0'), +('10', '14', '7', '1362', '3124', '0'), +('10', '14', '7', '2289', '2007', '0'), +('10', '14', '7', '1321', '1746', '0'), +('10', '14', '7', '2458', '936', '0'), +('10', '14', '9', '27727', '5888', '0'), +('10', '14', '9', '14650', '2412', '0'), +('10', '14', '9', '4344', '2051', '0'), +('10', '14', '9', '10408', '2002', '0'), +('10', '14', '15', '10366', '4805', '0'), +('10', '14', '15', '10151', '4200', '0'), +('10', '14', '15', '10163', '3800', '0'), +('10', '14', '15', '14679', '3330', '0'), +('10', '14', '20', '11666', '12214', '0'), +('10', '14', '20', '27727', '5888', '0'), +('10', '14', '20', '2742', '5320', '0'), +('10', '14', '20', '2288', '4478', '0'), +('10', '14', '12', '2923', '4324', '0'), +('10', '14', '12', '20655', '3990', '0'), +('10', '14', '12', '2291', '3830', '0'), +('10', '14', '12', '4835', '3227', '0'), +('10', '14', '18', '4410', '1642', '0'), +('10', '14', '18', '2461', '1619', '0'), +('10', '14', '18', '2292', '1518', '0'), +('10', '14', '18', '4876', '1146', '0'), +('10', '14', '19', '2293', '3742', '0'), +('10', '14', '19', '68239', '3181', '0'), +('10', '14', '19', '1368', '2016', '0'), +('10', '14', '19', '4837', '1869', '0'), +('10', '14', '13', '27729', '10370', '0'), +('10', '14', '13', '11694', '10039', '0'), +('10', '14', '13', '10333', '6800', '0'), +('10', '14', '13', '10334', '3503', '0'), +('10', '14', '14', '10333', '6800', '0'), +('10', '14', '14', '12802', '5924', '0'), +('10', '14', '14', '1679', '4137', '0'), +('10', '14', '14', '11632', '3834', '0'), +('10', '14', '11', '14762', '3204', '0'), +('10', '14', '11', '7051', '3002', '0'), +('10', '14', '11', '9246', '1703', '0'), +('10', '14', '11', '20677', '1200', '0'), +('10', '15', '22', '9246', '0', '0'), +('10', '15', '22', '21518', '0', '0'), +('10', '15', '22', '10323', '0', '0'), +('10', '15', '22', '44492', '0', '0'), +('10', '15', '1', '14702', '5000', '0'), +('10', '15', '1', '14701', '4612', '0'), +('10', '15', '1', '30361', '2640', '0'), +('10', '15', '1', '10321', '1000', '0'), +('10', '15', '2', '10143', '7118', '0'), +('10', '15', '2', '30363', '3700', '0'), +('10', '15', '2', '3000', '2534', '0'), +('10', '15', '2', '2294', '2402', '0'), +('10', '15', '3', '11052', '2718', '0'), +('10', '15', '3', '2295', '1381', '0'), +('10', '15', '3', '4505', '1299', '0'), +('10', '15', '3', '14695', '1277', '0'), +('10', '15', '5', '14703', '8800', '0'), +('10', '15', '5', '14700', '4818', '0'), +('10', '15', '5', '10055', '4030', '0'), +('10', '15', '5', '30362', '3140', '0'), +('10', '15', '8', '11603', '9941', '0'), +('10', '15', '8', '1546', '9915', '0'), +('10', '15', '8', '2349', '3554', '0'), +('10', '15', '8', '11621', '3521', '0'), +('10', '15', '6', '1557', '5310', '0'), +('10', '15', '6', '27728', '3135', '0'), +('10', '15', '6', '1401', '2924', '0'), +('10', '15', '6', '2286', '2116', '0'), +('10', '15', '17', '2285', '10091', '0'), +('10', '15', '17', '4872', '5257', '0'), +('10', '15', '17', '4342', '1939', '0'), +('10', '15', '17', '2405', '1048', '0'), +('10', '15', '7', '1362', '3124', '0'), +('10', '15', '7', '2289', '2055', '0'), +('10', '15', '7', '1321', '1746', '0'), +('10', '15', '7', '2458', '936', '0'), +('10', '15', '9', '27727', '5948', '0'), +('10', '15', '9', '14650', '2412', '0'), +('10', '15', '9', '4344', '2051', '0'), +('10', '15', '9', '10408', '2002', '0'), +('10', '15', '15', '10366', '4805', '0'), +('10', '15', '15', '10151', '4200', '0'), +('10', '15', '15', '10163', '3800', '0'), +('10', '15', '15', '14679', '3330', '0'), +('10', '15', '20', '11666', '12227', '0'), +('10', '15', '20', '27727', '5948', '0'), +('10', '15', '20', '2742', '5338', '0'), +('10', '15', '20', '2288', '4478', '0'), +('10', '15', '12', '2923', '4324', '0'), +('10', '15', '12', '20655', '4018', '0'), +('10', '15', '12', '2291', '3830', '0'), +('10', '15', '12', '4835', '3236', '0'), +('10', '15', '18', '2461', '1667', '0'), +('10', '15', '18', '4410', '1642', '0'), +('10', '15', '18', '2292', '1566', '0'), +('10', '15', '18', '4876', '1207', '0'), +('10', '15', '19', '2293', '3779', '0'), +('10', '15', '19', '68239', '3217', '0'), +('10', '15', '19', '1368', '2016', '0'), +('10', '15', '19', '4837', '1930', '0'), +('10', '15', '13', '27729', '10539', '0'), +('10', '15', '13', '11694', '10220', '0'), +('10', '15', '13', '10333', '6800', '0'), +('10', '15', '13', '10334', '3503', '0'), +('10', '15', '14', '10333', '6800', '0'), +('10', '15', '14', '12802', '5985', '0'), +('10', '15', '14', '1679', '4198', '0'), +('10', '15', '14', '11632', '3861', '0'), +('10', '15', '11', '14762', '3204', '0'), +('10', '15', '11', '7051', '3062', '0'), +('10', '15', '11', '9246', '1824', '0'), +('10', '15', '11', '20677', '1200', '0'), +('10', '16', '22', '9246', '0', '0'), +('10', '16', '22', '21518', '0', '0'), +('10', '16', '22', '10323', '0', '0'), +('10', '16', '22', '44492', '0', '0'), +('10', '16', '1', '14702', '5000', '0'), +('10', '16', '1', '14701', '4612', '0'), +('10', '16', '1', '30361', '2640', '0'), +('10', '16', '1', '10321', '1000', '0'), +('10', '16', '2', '10143', '7118', '0'), +('10', '16', '2', '30363', '3700', '0'), +('10', '16', '2', '3000', '2534', '0'), +('10', '16', '2', '2294', '2426', '0'), +('10', '16', '3', '11052', '2899', '0'), +('10', '16', '3', '2295', '1405', '0'), +('10', '16', '3', '4505', '1383', '0'), +('10', '16', '3', '14695', '1361', '0'), +('10', '16', '5', '14703', '8800', '0'), +('10', '16', '5', '14700', '4818', '0'), +('10', '16', '5', '10055', '4030', '0'), +('10', '16', '5', '30362', '3140', '0'), +('10', '16', '8', '11603', '10050', '0'), +('10', '16', '8', '1546', '10035', '0'), +('10', '16', '8', '2349', '3554', '0'), +('10', '16', '8', '11621', '3521', '0'), +('10', '16', '6', '1557', '5310', '0'), +('10', '16', '6', '27728', '3280', '0'), +('10', '16', '6', '1401', '2924', '0'), +('10', '16', '6', '2286', '2125', '0'), +('10', '16', '17', '2285', '10140', '0'), +('10', '16', '17', '4872', '5431', '0'), +('10', '16', '17', '4342', '2060', '0'), +('10', '16', '17', '2405', '1114', '0'), +('10', '16', '7', '1362', '3124', '0'), +('10', '16', '7', '2289', '2103', '0'), +('10', '16', '7', '1321', '1746', '0'), +('10', '16', '7', '2458', '936', '0'), +('10', '16', '9', '27727', '6009', '0'), +('10', '16', '9', '14650', '2412', '0'), +('10', '16', '9', '4344', '2051', '0'), +('10', '16', '9', '10408', '2002', '0'), +('10', '16', '15', '10366', '4805', '0'), +('10', '16', '15', '10151', '4200', '0'), +('10', '16', '15', '10163', '3800', '0'), +('10', '16', '15', '14679', '3330', '0'), +('10', '16', '20', '11666', '12240', '0'), +('10', '16', '20', '27727', '6009', '0'), +('10', '16', '20', '2742', '5356', '0'), +('10', '16', '20', '2288', '4478', '0'), +('10', '16', '12', '2923', '4324', '0'), +('10', '16', '12', '20655', '4046', '0'), +('10', '16', '12', '2291', '3830', '0'), +('10', '16', '12', '4835', '3245', '0'), +('10', '16', '18', '2461', '1715', '0'), +('10', '16', '18', '4410', '1642', '0'), +('10', '16', '18', '2292', '1614', '0'), +('10', '16', '18', '4876', '1267', '0'), +('10', '16', '19', '2293', '3815', '0'), +('10', '16', '19', '68239', '3253', '0'), +('10', '16', '19', '1368', '2016', '0'), +('10', '16', '19', '4837', '1990', '0'), +('10', '16', '13', '27729', '10708', '0'), +('10', '16', '13', '11694', '10402', '0'), +('10', '16', '13', '10333', '6800', '0'), +('10', '16', '13', '10334', '3503', '0'), +('10', '16', '14', '10333', '6800', '0'), +('10', '16', '14', '12802', '6045', '0'), +('10', '16', '14', '1679', '4258', '0'), +('10', '16', '14', '11632', '3888', '0'), +('10', '16', '11', '14762', '3204', '0'), +('10', '16', '11', '7051', '3122', '0'), +('10', '16', '11', '9246', '1945', '0'), +('10', '16', '11', '20677', '1200', '0'), +('10', '17', '22', '9246', '0', '0'), +('10', '17', '22', '21518', '0', '0'), +('10', '17', '22', '10323', '0', '0'), +('10', '17', '22', '44492', '0', '0'), +('10', '17', '1', '14702', '5000', '0'), +('10', '17', '1', '14701', '4612', '0'), +('10', '17', '1', '30361', '2640', '0'), +('10', '17', '1', '10321', '1000', '0'), +('10', '17', '2', '10143', '7118', '0'), +('10', '17', '2', '30363', '3700', '0'), +('10', '17', '2', '3000', '2534', '0'), +('10', '17', '2', '2294', '2451', '0'), +('10', '17', '3', '11052', '3080', '0'), +('10', '17', '3', '4505', '1468', '0'), +('10', '17', '3', '14695', '1446', '0'), +('10', '17', '3', '2295', '1429', '0'), +('10', '17', '5', '14703', '8800', '0'), +('10', '17', '5', '14700', '4818', '0'), +('10', '17', '5', '10055', '4030', '0'), +('10', '17', '5', '27726', '3141', '0'), +('10', '17', '8', '11603', '10159', '0'), +('10', '17', '8', '1546', '10156', '0'), +('10', '17', '8', '2349', '3554', '0'), +('10', '17', '8', '11621', '3521', '0'), +('10', '17', '6', '1557', '5310', '0'), +('10', '17', '6', '27728', '3425', '0'), +('10', '17', '6', '1401', '2924', '0'), +('10', '17', '6', '2286', '2134', '0'), +('10', '17', '17', '2285', '10188', '0'), +('10', '17', '17', '4872', '5604', '0'), +('10', '17', '17', '4342', '2180', '0'), +('10', '17', '17', '2405', '1180', '0'), +('10', '17', '7', '1362', '3124', '0'), +('10', '17', '7', '2289', '2152', '0'), +('10', '17', '7', '1321', '1746', '0'), +('10', '17', '7', '2458', '936', '0'), +('10', '17', '9', '27727', '6069', '0'), +('10', '17', '9', '14650', '2412', '0'), +('10', '17', '9', '4344', '2051', '0'), +('10', '17', '9', '10408', '2002', '0'), +('10', '17', '15', '10366', '4805', '0'), +('10', '17', '15', '10151', '4200', '0'), +('10', '17', '15', '10163', '3800', '0'), +('10', '17', '15', '14679', '3330', '0'), +('10', '17', '20', '11666', '12252', '0'), +('10', '17', '20', '27727', '6069', '0'), +('10', '17', '20', '2742', '5374', '0'), +('10', '17', '20', '2288', '4478', '0'), +('10', '17', '12', '2923', '4324', '0'), +('10', '17', '12', '20655', '4074', '0'), +('10', '17', '12', '2291', '3830', '0'), +('10', '17', '12', '4835', '3254', '0'), +('10', '17', '18', '2461', '1764', '0'), +('10', '17', '18', '2292', '1663', '0'), +('10', '17', '18', '4410', '1642', '0'), +('10', '17', '18', '4876', '1327', '0'), +('10', '17', '19', '2293', '3851', '0'), +('10', '17', '19', '68239', '3290', '0'), +('10', '17', '19', '4837', '2051', '0'), +('10', '17', '19', '1368', '2016', '0'), +('10', '17', '13', '27729', '10877', '0'), +('10', '17', '13', '11694', '10583', '0'), +('10', '17', '13', '10333', '6800', '0'), +('10', '17', '13', '10334', '3503', '0'), +('10', '17', '14', '10333', '6800', '0'), +('10', '17', '14', '12802', '6105', '0'), +('10', '17', '14', '1679', '4319', '0'), +('10', '17', '14', '11632', '3915', '0'), +('10', '17', '11', '14762', '3204', '0'), +('10', '17', '11', '7051', '3183', '0'), +('10', '17', '11', '9246', '2066', '0'), +('10', '17', '11', '20677', '1200', '0'), +('10', '18', '22', '9246', '0', '0'), +('10', '18', '22', '21518', '0', '0'), +('10', '18', '22', '10323', '0', '0'), +('10', '18', '22', '44492', '0', '0'), +('10', '18', '1', '14702', '5000', '0'), +('10', '18', '1', '14701', '4612', '0'), +('10', '18', '1', '30361', '2640', '0'), +('10', '18', '1', '10321', '1000', '0'), +('10', '18', '2', '10143', '7118', '0'), +('10', '18', '2', '30363', '3700', '0'), +('10', '18', '2', '3000', '2534', '0'), +('10', '18', '2', '2294', '2475', '0'), +('10', '18', '3', '11052', '3262', '0'), +('10', '18', '3', '4505', '1552', '0'), +('10', '18', '3', '14695', '1531', '0'), +('10', '18', '3', '2295', '1453', '0'), +('10', '18', '5', '14703', '8800', '0'), +('10', '18', '5', '14700', '4818', '0'), +('10', '18', '5', '10055', '4030', '0'), +('10', '18', '5', '27726', '3238', '0'), +('10', '18', '8', '1546', '10277', '0'), +('10', '18', '8', '11603', '10267', '0'), +('10', '18', '8', '2349', '3554', '0'), +('10', '18', '8', '11621', '3521', '0'), +('10', '18', '6', '1557', '5310', '0'), +('10', '18', '6', '27728', '3570', '0'), +('10', '18', '6', '1401', '2924', '0'), +('10', '18', '6', '2286', '2143', '0'), +('10', '18', '17', '2285', '10236', '0'), +('10', '18', '17', '4872', '5777', '0'), +('10', '18', '17', '4342', '2301', '0'), +('10', '18', '17', '2405', '1245', '0'), +('10', '18', '7', '1362', '3124', '0'), +('10', '18', '7', '2289', '2200', '0'), +('10', '18', '7', '1321', '1746', '0'), +('10', '18', '7', '2458', '936', '0'), +('10', '18', '9', '27727', '6129', '0'), +('10', '18', '9', '14650', '2412', '0'), +('10', '18', '9', '4344', '2051', '0'), +('10', '18', '9', '10408', '2002', '0'), +('10', '18', '15', '10366', '4805', '0'), +('10', '18', '15', '10151', '4200', '0'), +('10', '18', '15', '10163', '3800', '0'), +('10', '18', '15', '14679', '3330', '0'), +('10', '18', '20', '11666', '12265', '0'), +('10', '18', '20', '27727', '6129', '0'), +('10', '18', '20', '2742', '5393', '0'), +('10', '18', '20', '2288', '4478', '0'), +('10', '18', '12', '2923', '4324', '0'), +('10', '18', '12', '20655', '4102', '0'), +('10', '18', '12', '2291', '3830', '0'), +('10', '18', '12', '4835', '3263', '0'), +('10', '18', '18', '2461', '1812', '0'), +('10', '18', '18', '2292', '1711', '0'), +('10', '18', '18', '4410', '1642', '0'), +('10', '18', '18', '4876', '1388', '0'), +('10', '18', '19', '2293', '3887', '0'), +('10', '18', '19', '68239', '3326', '0'), +('10', '18', '19', '4837', '2111', '0'), +('10', '18', '19', '4407', '2017', '0'), +('10', '18', '13', '27729', '11046', '0'), +('10', '18', '13', '11694', '10764', '0'), +('10', '18', '13', '10333', '6800', '0'), +('10', '18', '13', '10334', '3503', '0'), +('10', '18', '14', '10333', '6800', '0'), +('10', '18', '14', '12802', '6166', '0'), +('10', '18', '14', '1679', '4379', '0'), +('10', '18', '14', '11632', '3942', '0'), +('10', '18', '11', '7051', '3243', '0'), +('10', '18', '11', '14762', '3204', '0'), +('10', '18', '11', '9246', '2186', '0'), +('10', '18', '11', '20677', '1200', '0'), +('10', '19', '22', '9246', '0', '0'), +('10', '19', '22', '21518', '0', '0'), +('10', '19', '22', '10323', '0', '0'), +('10', '19', '22', '44492', '0', '0'), +('10', '19', '1', '14702', '5000', '0'), +('10', '19', '1', '14701', '4612', '0'), +('10', '19', '1', '30361', '2640', '0'), +('10', '19', '1', '10321', '1000', '0'), +('10', '19', '2', '10143', '7118', '0'), +('10', '19', '2', '30363', '3700', '0'), +('10', '19', '2', '3000', '2534', '0'), +('10', '19', '2', '2294', '2499', '0'), +('10', '19', '3', '11052', '3443', '0'), +('10', '19', '3', '4505', '1637', '0'), +('10', '19', '3', '14695', '1615', '0'), +('10', '19', '3', '2295', '1477', '0'), +('10', '19', '5', '14703', '8800', '0'), +('10', '19', '5', '14700', '4818', '0'), +('10', '19', '5', '10055', '4030', '0'), +('10', '19', '5', '27726', '3334', '0'), +('10', '19', '8', '1546', '10398', '0'), +('10', '19', '8', '11603', '10376', '0'), +('10', '19', '8', '2349', '3554', '0'), +('10', '19', '8', '11621', '3521', '0'), +('10', '19', '6', '1557', '5310', '0'), +('10', '19', '6', '27728', '3715', '0'), +('10', '19', '6', '1401', '2924', '0'), +('10', '19', '6', '2286', '2152', '0'), +('10', '19', '17', '2285', '10285', '0'), +('10', '19', '17', '4872', '5951', '0'), +('10', '19', '17', '4342', '2422', '0'), +('10', '19', '17', '2405', '1311', '0'), +('10', '19', '7', '1362', '3124', '0'), +('10', '19', '7', '2289', '2248', '0'), +('10', '19', '7', '1321', '1746', '0'), +('10', '19', '7', '2458', '936', '0'), +('10', '19', '9', '27727', '6190', '0'), +('10', '19', '9', '14650', '2412', '0'), +('10', '19', '9', '4344', '2051', '0'), +('10', '19', '9', '10408', '2002', '0'), +('10', '19', '15', '10366', '4805', '0'), +('10', '19', '15', '10151', '4200', '0'), +('10', '19', '15', '10163', '3800', '0'), +('10', '19', '15', '14679', '3330', '0'), +('10', '19', '20', '11666', '12278', '0'), +('10', '19', '20', '27727', '6190', '0'), +('10', '19', '20', '2742', '5411', '0'), +('10', '19', '20', '2288', '4478', '0'), +('10', '19', '12', '2923', '4324', '0'), +('10', '19', '12', '20655', '4129', '0'), +('10', '19', '12', '2291', '3830', '0'), +('10', '19', '12', '4835', '3272', '0'), +('10', '19', '18', '2461', '1860', '0'), +('10', '19', '18', '2292', '1759', '0'), +('10', '19', '18', '4410', '1642', '0'), +('10', '19', '18', '4876', '1448', '0'), +('10', '19', '19', '2293', '3924', '0'), +('10', '19', '19', '68239', '3362', '0'), +('10', '19', '19', '4837', '2171', '0'), +('10', '19', '19', '4407', '2126', '0'), +('10', '19', '13', '27729', '11215', '0'), +('10', '19', '13', '11694', '10945', '0'), +('10', '19', '13', '10333', '6800', '0'), +('10', '19', '13', '10334', '3503', '0'), +('10', '19', '14', '10333', '6800', '0'), +('10', '19', '14', '12802', '6226', '0'), +('10', '19', '14', '1679', '4439', '0'), +('10', '19', '14', '10335', '4120', '0'), +('10', '19', '11', '7051', '3304', '0'), +('10', '19', '11', '14762', '3204', '0'), +('10', '19', '11', '9246', '2307', '0'), +('10', '19', '11', '20677', '1200', '0'), +('10', '20', '22', '9246', '0', '0'), +('10', '20', '22', '21518', '0', '0'), +('10', '20', '22', '10323', '0', '0'), +('10', '20', '22', '44492', '0', '0'), +('10', '20', '1', '14702', '5000', '0'), +('10', '20', '1', '14701', '4612', '0'), +('10', '20', '1', '30361', '2640', '0'), +('10', '20', '1', '10321', '1000', '0'), +('10', '20', '2', '10143', '7118', '0'), +('10', '20', '2', '30363', '3700', '0'), +('10', '20', '2', '3000', '2534', '0'), +('10', '20', '2', '2294', '2523', '0'), +('10', '20', '3', '11052', '3624', '0'), +('10', '20', '3', '4505', '1721', '0'), +('10', '20', '3', '14695', '1700', '0'), +('10', '20', '3', '2295', '1501', '0'), +('10', '20', '5', '14703', '8800', '0'), +('10', '20', '5', '14700', '4818', '0'), +('10', '20', '5', '10055', '4030', '0'), +('10', '20', '5', '27726', '3431', '0'), +('10', '20', '8', '1546', '10519', '0'), +('10', '20', '8', '11603', '10485', '0'), +('10', '20', '8', '2349', '3554', '0'), +('10', '20', '8', '11621', '3521', '0'), +('10', '20', '6', '1557', '5310', '0'), +('10', '20', '6', '27728', '3860', '0'), +('10', '20', '6', '1401', '2924', '0'), +('10', '20', '6', '2286', '2161', '0'), +('10', '20', '17', '2285', '10333', '0'), +('10', '20', '17', '4872', '6124', '0'), +('10', '20', '17', '4342', '2543', '0'), +('10', '20', '17', '2405', '1377', '0'), +('10', '20', '7', '1362', '3124', '0'), +('10', '20', '7', '2289', '2297', '0'), +('10', '20', '7', '1321', '1746', '0'), +('10', '20', '7', '71303', '950', '0'), +('10', '20', '9', '27727', '6250', '0'), +('10', '20', '9', '14650', '2412', '0'), +('10', '20', '9', '4344', '2051', '0'), +('10', '20', '9', '10408', '2002', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '20', '15', '10366', '4805', '0'), +('10', '20', '15', '10151', '4200', '0'), +('10', '20', '15', '10163', '3800', '0'), +('10', '20', '15', '14679', '3330', '0'), +('10', '20', '20', '11666', '12291', '0'), +('10', '20', '20', '27727', '6250', '0'), +('10', '20', '20', '2742', '5429', '0'), +('10', '20', '20', '2288', '4478', '0'), +('10', '20', '12', '2923', '4324', '0'), +('10', '20', '12', '20655', '4157', '0'), +('10', '20', '12', '2291', '3830', '0'), +('10', '20', '12', '4835', '3281', '0'), +('10', '20', '18', '2461', '1909', '0'), +('10', '20', '18', '2292', '1807', '0'), +('10', '20', '18', '4410', '1642', '0'), +('10', '20', '18', '4876', '1509', '0'), +('10', '20', '19', '2293', '3960', '0'), +('10', '20', '19', '68239', '3398', '0'), +('10', '20', '19', '4407', '2235', '0'), +('10', '20', '19', '4837', '2232', '0'), +('10', '20', '13', '27729', '11384', '0'), +('10', '20', '13', '11694', '11126', '0'), +('10', '20', '13', '10333', '6800', '0'), +('10', '20', '13', '10334', '3503', '0'), +('10', '20', '14', '10333', '6800', '0'), +('10', '20', '14', '12802', '6287', '0'), +('10', '20', '14', '1679', '4500', '0'), +('10', '20', '14', '10335', '4338', '0'), +('10', '20', '11', '7051', '3364', '0'), +('10', '20', '11', '14762', '3204', '0'), +('10', '20', '11', '9246', '2428', '0'), +('10', '20', '11', '20677', '1200', '0'), +('10', '21', '22', '9246', '0', '0'), +('10', '21', '22', '21518', '0', '0'), +('10', '21', '22', '10323', '0', '0'), +('10', '21', '22', '44492', '0', '0'), +('10', '21', '1', '14702', '5000', '0'), +('10', '21', '1', '14701', '4612', '0'), +('10', '21', '1', '30361', '2640', '0'), +('10', '21', '1', '10321', '1000', '0'), +('10', '21', '2', '10143', '7118', '0'), +('10', '21', '2', '30363', '3700', '0'), +('10', '21', '2', '2294', '2547', '0'), +('10', '21', '2', '3000', '2534', '0'), +('10', '21', '3', '11052', '3805', '0'), +('10', '21', '3', '4505', '1806', '0'), +('10', '21', '3', '14695', '1784', '0'), +('10', '21', '3', '2295', '1525', '0'), +('10', '21', '5', '14703', '8800', '0'), +('10', '21', '5', '14700', '4818', '0'), +('10', '21', '5', '10055', '4030', '0'), +('10', '21', '5', '27726', '3528', '0'), +('10', '21', '8', '1546', '10639', '0'), +('10', '21', '8', '11603', '10594', '0'), +('10', '21', '8', '2349', '3554', '0'), +('10', '21', '8', '11621', '3521', '0'), +('10', '21', '6', '1557', '5310', '0'), +('10', '21', '6', '27728', '4005', '0'), +('10', '21', '6', '1401', '2924', '0'), +('10', '21', '6', '2286', '2170', '0'), +('10', '21', '17', '2285', '10381', '0'), +('10', '21', '17', '4872', '6297', '0'), +('10', '21', '17', '4342', '2664', '0'), +('10', '21', '17', '2405', '1443', '0'), +('10', '21', '7', '1362', '3124', '0'), +('10', '21', '7', '2289', '2345', '0'), +('10', '21', '7', '1321', '1746', '0'), +('10', '21', '7', '71303', '986', '0'), +('10', '21', '9', '27727', '6311', '0'), +('10', '21', '9', '14650', '2412', '0'), +('10', '21', '9', '4344', '2051', '0'), +('10', '21', '9', '10408', '2002', '0'), +('10', '21', '15', '10366', '4805', '0'), +('10', '21', '15', '10151', '4200', '0'), +('10', '21', '15', '10163', '3800', '0'), +('10', '21', '15', '14679', '3330', '0'), +('10', '21', '20', '11666', '12303', '0'), +('10', '21', '20', '27727', '6311', '0'), +('10', '21', '20', '2742', '5447', '0'), +('10', '21', '20', '2288', '4478', '0'), +('10', '21', '12', '2923', '4324', '0'), +('10', '21', '12', '20655', '4185', '0'), +('10', '21', '12', '2291', '3830', '0'), +('10', '21', '12', '4835', '3290', '0'), +('10', '21', '18', '2461', '1957', '0'), +('10', '21', '18', '2292', '1856', '0'), +('10', '21', '18', '4410', '1642', '0'), +('10', '21', '18', '4876', '1569', '0'), +('10', '21', '19', '2293', '3996', '0'), +('10', '21', '19', '68239', '3434', '0'), +('10', '21', '19', '4407', '2343', '0'), +('10', '21', '19', '4837', '2292', '0'), +('10', '21', '13', '27729', '11553', '0'), +('10', '21', '13', '11694', '11308', '0'), +('10', '21', '13', '10333', '6800', '0'), +('10', '21', '13', '10334', '3503', '0'), +('10', '21', '14', '10333', '6800', '0'), +('10', '21', '14', '12802', '6347', '0'), +('10', '21', '14', '1679', '4560', '0'), +('10', '21', '14', '10335', '4555', '0'), +('10', '21', '11', '7051', '3424', '0'), +('10', '21', '11', '14762', '3204', '0'), +('10', '21', '11', '9246', '2549', '0'), +('10', '21', '11', '20677', '1200', '0'), +('10', '22', '22', '9246', '0', '0'), +('10', '22', '22', '21518', '0', '0'), +('10', '22', '22', '10323', '0', '0'), +('10', '22', '22', '44492', '0', '0'), +('10', '22', '1', '14702', '5000', '0'), +('10', '22', '1', '14701', '4612', '0'), +('10', '22', '1', '30361', '2640', '0'), +('10', '22', '1', '10321', '1000', '0'), +('10', '22', '2', '10143', '7118', '0'), +('10', '22', '2', '30363', '3700', '0'), +('10', '22', '2', '2294', '2571', '0'), +('10', '22', '2', '3000', '2534', '0'), +('10', '22', '3', '11052', '3986', '0'), +('10', '22', '3', '4505', '1891', '0'), +('10', '22', '3', '14695', '1869', '0'), +('10', '22', '3', '2295', '1550', '0'), +('10', '22', '5', '14703', '8800', '0'), +('10', '22', '5', '14700', '4818', '0'), +('10', '22', '5', '10055', '4030', '0'), +('10', '22', '5', '27726', '3624', '0'), +('10', '22', '8', '1546', '10760', '0'), +('10', '22', '8', '11603', '10702', '0'), +('10', '22', '8', '2349', '3554', '0'), +('10', '22', '8', '11621', '3521', '0'), +('10', '22', '6', '1557', '5310', '0'), +('10', '22', '6', '27728', '4150', '0'), +('10', '22', '6', '1401', '2924', '0'), +('10', '22', '6', '2286', '2180', '0'), +('10', '22', '17', '2285', '10429', '0'), +('10', '22', '17', '4872', '6471', '0'), +('10', '22', '17', '4342', '2784', '0'), +('10', '22', '17', '2405', '1509', '0'), +('10', '22', '7', '1362', '3124', '0'), +('10', '22', '7', '2289', '2393', '0'), +('10', '22', '7', '1321', '1746', '0'), +('10', '22', '7', '71303', '1022', '0'), +('10', '22', '9', '27727', '6371', '0'), +('10', '22', '9', '14650', '2412', '0'), +('10', '22', '9', '4344', '2051', '0'), +('10', '22', '9', '10408', '2002', '0'), +('10', '22', '15', '10366', '4805', '0'), +('10', '22', '15', '10151', '4200', '0'), +('10', '22', '15', '10163', '3800', '0'), +('10', '22', '15', '14679', '3330', '0'), +('10', '22', '20', '11666', '12316', '0'), +('10', '22', '20', '27727', '6371', '0'), +('10', '22', '20', '2742', '5465', '0'), +('10', '22', '20', '2288', '4478', '0'), +('10', '22', '12', '2923', '4324', '0'), +('10', '22', '12', '20655', '4213', '0'), +('10', '22', '12', '2291', '3830', '0'), +('10', '22', '12', '4835', '3299', '0'), +('10', '22', '18', '2461', '2005', '0'), +('10', '22', '18', '2292', '1904', '0'), +('10', '22', '18', '4410', '1642', '0'), +('10', '22', '18', '4876', '1629', '0'), +('10', '22', '19', '2293', '4032', '0'), +('10', '22', '19', '68239', '3471', '0'), +('10', '22', '19', '4407', '2452', '0'), +('10', '22', '19', '4837', '2353', '0'), +('10', '22', '13', '27729', '11723', '0'), +('10', '22', '13', '11694', '11489', '0'), +('10', '22', '13', '10333', '6800', '0'), +('10', '22', '13', '10334', '3503', '0'), +('10', '22', '14', '10333', '6800', '0'), +('10', '22', '14', '12802', '6407', '0'), +('10', '22', '14', '10335', '4773', '0'), +('10', '22', '14', '1679', '4621', '0'), +('10', '22', '11', '7051', '3485', '0'), +('10', '22', '11', '14762', '3204', '0'), +('10', '22', '11', '9246', '2670', '0'), +('10', '22', '11', '20677', '1200', '0'), +('10', '23', '22', '9246', '0', '0'), +('10', '23', '22', '21518', '0', '0'), +('10', '23', '22', '10323', '0', '0'), +('10', '23', '22', '44492', '0', '0'), +('10', '23', '1', '14702', '5000', '0'), +('10', '23', '1', '14701', '4612', '0'), +('10', '23', '1', '30361', '2640', '0'), +('10', '23', '1', '10321', '1000', '0'), +('10', '23', '2', '10143', '7118', '0'), +('10', '23', '2', '30363', '3700', '0'), +('10', '23', '2', '2294', '2596', '0'), +('10', '23', '2', '3000', '2534', '0'), +('10', '23', '3', '11052', '4168', '0'), +('10', '23', '3', '4505', '1975', '0'), +('10', '23', '3', '14695', '1953', '0'), +('10', '23', '3', '2295', '1574', '0'), +('10', '23', '5', '14703', '8800', '0'), +('10', '23', '5', '14700', '4818', '0'), +('10', '23', '5', '10055', '4030', '0'), +('10', '23', '5', '27726', '3721', '0'), +('10', '23', '8', '1546', '10881', '0'), +('10', '23', '8', '11603', '10811', '0'), +('10', '23', '8', '2349', '3554', '0'), +('10', '23', '8', '11621', '3521', '0'), +('10', '23', '6', '1557', '5310', '0'), +('10', '23', '6', '27728', '4294', '0'), +('10', '23', '6', '1401', '2924', '0'), +('10', '23', '6', '1904', '2253', '0'), +('10', '23', '17', '2285', '10478', '0'), +('10', '23', '17', '4872', '6644', '0'), +('10', '23', '17', '4342', '2905', '0'), +('10', '23', '17', '2405', '1575', '0'), +('10', '23', '7', '1362', '3124', '0'), +('10', '23', '7', '2289', '2442', '0'), +('10', '23', '7', '1321', '1746', '0'), +('10', '23', '7', '71303', '1059', '0'), +('10', '23', '9', '27727', '6431', '0'), +('10', '23', '9', '14650', '2412', '0'), +('10', '23', '9', '4344', '2051', '0'), +('10', '23', '9', '10408', '2002', '0'), +('10', '23', '15', '10366', '4805', '0'), +('10', '23', '15', '10151', '4200', '0'), +('10', '23', '15', '10163', '3800', '0'), +('10', '23', '15', '14679', '3330', '0'), +('10', '23', '20', '11666', '12329', '0'), +('10', '23', '20', '27727', '6431', '0'), +('10', '23', '20', '2742', '5483', '0'), +('10', '23', '20', '2288', '4478', '0'), +('10', '23', '12', '2923', '4324', '0'), +('10', '23', '12', '20655', '4241', '0'), +('10', '23', '12', '2291', '3830', '0'), +('10', '23', '12', '4835', '3308', '0'), +('10', '23', '18', '2461', '2054', '0'), +('10', '23', '18', '2292', '1952', '0'), +('10', '23', '18', '4876', '1690', '0'), +('10', '23', '18', '4410', '1642', '0'), +('10', '23', '19', '2293', '4069', '0'), +('10', '23', '19', '68239', '3507', '0'), +('10', '23', '19', '4407', '2561', '0'), +('10', '23', '19', '4837', '2413', '0'), +('10', '23', '13', '27729', '11892', '0'), +('10', '23', '13', '11694', '11670', '0'), +('10', '23', '13', '10333', '6800', '0'), +('10', '23', '13', '7051', '3547', '0'), +('10', '23', '14', '10333', '6800', '0'), +('10', '23', '14', '12802', '6468', '0'), +('10', '23', '14', '10335', '4990', '0'), +('10', '23', '14', '1679', '4681', '0'), +('10', '23', '11', '7051', '3545', '0'), +('10', '23', '11', '14762', '3204', '0'), +('10', '23', '11', '9246', '2790', '0'), +('10', '23', '11', '20677', '1200', '0'), +('10', '24', '22', '9246', '0', '0'), +('10', '24', '22', '21518', '0', '0'), +('10', '24', '22', '10323', '0', '0'), +('10', '24', '22', '44492', '0', '0'), +('10', '24', '1', '14702', '5000', '0'), +('10', '24', '1', '14701', '4612', '0'), +('10', '24', '1', '30361', '2640', '0'), +('10', '24', '1', '10321', '1000', '0'), +('10', '24', '2', '10143', '7118', '0'), +('10', '24', '2', '30363', '3700', '0'), +('10', '24', '2', '2294', '2620', '0'), +('10', '24', '2', '3000', '2534', '0'), +('10', '24', '3', '11052', '4349', '0'), +('10', '24', '3', '4505', '2060', '0'), +('10', '24', '3', '14695', '2038', '0'), +('10', '24', '3', '2295', '1598', '0'), +('10', '24', '5', '14703', '8800', '0'), +('10', '24', '5', '14700', '4818', '0'), +('10', '24', '5', '10055', '4030', '0'), +('10', '24', '5', '27726', '3818', '0'), +('10', '24', '8', '1546', '11002', '0'), +('10', '24', '8', '11603', '10920', '0'), +('10', '24', '8', '2349', '3554', '0'), +('10', '24', '8', '11621', '3521', '0'), +('10', '24', '6', '1557', '5310', '0'), +('10', '24', '6', '27728', '4439', '0'), +('10', '24', '6', '1401', '2924', '0'), +('10', '24', '6', '1904', '2350', '0'), +('10', '24', '17', '2285', '10526', '0'), +('10', '24', '17', '4872', '6817', '0'), +('10', '24', '17', '4342', '3026', '0'), +('10', '24', '17', '2405', '1640', '0'), +('10', '24', '7', '1362', '3124', '0'), +('10', '24', '7', '2289', '2490', '0'), +('10', '24', '7', '1321', '1746', '0'), +('10', '24', '7', '71303', '1095', '0'), +('10', '24', '9', '27727', '6492', '0'), +('10', '24', '9', '14650', '2412', '0'), +('10', '24', '9', '2290', '2058', '0'), +('10', '24', '9', '4344', '2051', '0'), +('10', '24', '15', '10366', '4805', '0'), +('10', '24', '15', '10151', '4200', '0'), +('10', '24', '15', '10163', '3800', '0'), +('10', '24', '15', '14679', '3330', '0'), +('10', '24', '20', '11666', '12341', '0'), +('10', '24', '20', '27727', '6492', '0'), +('10', '24', '20', '2742', '5501', '0'), +('10', '24', '20', '2288', '4478', '0'), +('10', '24', '12', '2923', '4324', '0'), +('10', '24', '12', '20655', '4268', '0'), +('10', '24', '12', '2291', '3830', '0'), +('10', '24', '12', '4835', '3317', '0'), +('10', '24', '18', '2461', '2102', '0'), +('10', '24', '18', '2292', '2001', '0'), +('10', '24', '18', '4876', '1750', '0'), +('10', '24', '18', '4410', '1642', '0'), +('10', '24', '19', '2293', '4105', '0'), +('10', '24', '19', '68239', '3543', '0'), +('10', '24', '19', '4407', '2669', '0'), +('10', '24', '19', '4837', '2473', '0'), +('10', '24', '13', '27729', '12061', '0'), +('10', '24', '13', '11694', '11851', '0'), +('10', '24', '13', '10333', '6800', '0'), +('10', '24', '13', '7051', '3607', '0'), +('10', '24', '14', '10333', '6800', '0'), +('10', '24', '14', '12802', '6528', '0'), +('10', '24', '14', '10335', '5208', '0'), +('10', '24', '14', '1679', '4741', '0'), +('10', '24', '11', '7051', '3606', '0'), +('10', '24', '11', '14762', '3204', '0'), +('10', '24', '11', '9246', '2911', '0'), +('10', '24', '11', '20677', '1200', '0'), +('10', '25', '22', '9246', '0', '0'), +('10', '25', '22', '21518', '0', '0'), +('10', '25', '22', '10323', '0', '0'), +('10', '25', '22', '44492', '0', '0'), +('10', '25', '1', '14702', '5000', '0'), +('10', '25', '1', '14701', '4612', '0'), +('10', '25', '1', '30361', '2640', '0'), +('10', '25', '1', '10321', '1000', '0'), +('10', '25', '2', '10143', '7118', '0'), +('10', '25', '2', '30363', '3700', '0'), +('10', '25', '2', '2294', '2644', '0'), +('10', '25', '2', '3000', '2534', '0'), +('10', '25', '3', '11052', '4530', '0'), +('10', '25', '3', '4505', '2144', '0'), +('10', '25', '3', '14695', '2122', '0'), +('10', '25', '3', '2295', '1622', '0'), +('10', '25', '5', '14703', '8800', '0'), +('10', '25', '5', '14700', '4818', '0'), +('10', '25', '5', '10055', '4030', '0'), +('10', '25', '5', '27726', '3914', '0'), +('10', '25', '8', '1546', '11123', '0'), +('10', '25', '8', '11603', '11028', '0'), +('10', '25', '8', '2349', '3554', '0'), +('10', '25', '8', '11621', '3521', '0'), +('10', '25', '6', '1557', '5310', '0'), +('10', '25', '6', '27728', '4584', '0'), +('10', '25', '6', '1401', '2924', '0'), +('10', '25', '6', '1904', '2446', '0'), +('10', '25', '17', '2285', '10574', '0'), +('10', '25', '17', '4872', '6991', '0'), +('10', '25', '17', '4342', '3147', '0'), +('10', '25', '17', '2405', '1706', '0'), +('10', '25', '7', '1362', '3124', '0'), +('10', '25', '7', '2289', '2538', '0'), +('10', '25', '7', '1321', '1746', '0'), +('10', '25', '7', '71303', '1131', '0'), +('10', '25', '9', '27727', '6552', '0'), +('10', '25', '9', '14650', '2412', '0'), +('10', '25', '9', '2290', '2122', '0'), +('10', '25', '9', '4344', '2051', '0'), +('10', '25', '15', '10366', '4805', '0'), +('10', '25', '15', '10151', '4200', '0'), +('10', '25', '15', '10163', '3800', '0'), +('10', '25', '15', '14679', '3330', '0'), +('10', '25', '20', '11666', '12354', '0'), +('10', '25', '20', '27727', '6552', '0'), +('10', '25', '20', '2742', '5519', '0'), +('10', '25', '20', '2288', '4478', '0'), +('10', '25', '12', '2923', '4324', '0'), +('10', '25', '12', '20655', '4296', '0'), +('10', '25', '12', '2291', '3830', '0'), +('10', '25', '12', '4835', '3326', '0'), +('10', '25', '18', '2461', '2150', '0'), +('10', '25', '18', '2292', '2049', '0'), +('10', '25', '18', '4876', '1811', '0'), +('10', '25', '18', '4410', '1642', '0'), +('10', '25', '19', '2293', '4141', '0'), +('10', '25', '19', '68239', '3579', '0'), +('10', '25', '19', '4407', '2778', '0'), +('10', '25', '19', '4837', '2534', '0'), +('10', '25', '13', '27729', '12230', '0'), +('10', '25', '13', '11694', '12032', '0'), +('10', '25', '13', '10333', '6800', '0'), +('10', '25', '13', '7051', '3668', '0'), +('10', '25', '14', '10333', '6800', '0'), +('10', '25', '14', '12802', '6589', '0'), +('10', '25', '14', '10335', '5425', '0'), +('10', '25', '14', '1679', '4802', '0'), +('10', '25', '11', '7051', '3666', '0'), +('10', '25', '11', '14762', '3204', '0'), +('10', '25', '11', '9246', '3032', '0'), +('10', '25', '11', '20677', '1200', '0'), +('10', '26', '22', '9246', '0', '0'), +('10', '26', '22', '21518', '0', '0'), +('10', '26', '22', '10323', '0', '0'), +('10', '26', '22', '44492', '0', '0'), +('10', '26', '1', '14702', '5000', '0'), +('10', '26', '1', '14701', '4612', '0'), +('10', '26', '1', '30361', '2640', '0'), +('10', '26', '1', '10321', '1000', '0'), +('10', '26', '2', '10143', '7118', '0'), +('10', '26', '2', '30363', '3700', '0'), +('10', '26', '2', '2294', '2668', '0'), +('10', '26', '2', '3000', '2534', '0'), +('10', '26', '3', '11052', '4711', '0'), +('10', '26', '3', '4505', '2229', '0'), +('10', '26', '3', '14695', '2207', '0'), +('10', '26', '3', '2295', '1646', '0'), +('10', '26', '5', '14703', '8800', '0'), +('10', '26', '5', '14700', '4818', '0'), +('10', '26', '5', '10055', '4030', '0'), +('10', '26', '5', '27726', '4011', '0'), +('10', '26', '8', '1546', '11243', '0'), +('10', '26', '8', '11603', '11137', '0'), +('10', '26', '8', '2349', '3554', '0'), +('10', '26', '8', '11621', '3521', '0'), +('10', '26', '6', '1557', '5310', '0'), +('10', '26', '6', '27728', '4729', '0'), +('10', '26', '6', '1401', '2924', '0'), +('10', '26', '6', '1904', '2543', '0'), +('10', '26', '17', '2285', '10623', '0'), +('10', '26', '17', '4872', '7164', '0'), +('10', '26', '17', '4342', '3268', '0'), +('10', '26', '17', '2405', '1772', '0'), +('10', '26', '7', '1362', '3124', '0'), +('10', '26', '7', '2289', '2587', '0'), +('10', '26', '7', '1321', '1746', '0'), +('10', '26', '7', '71303', '1167', '0'), +('10', '26', '9', '27727', '6613', '0'), +('10', '26', '9', '14650', '2412', '0'), +('10', '26', '9', '2290', '2186', '0'), +('10', '26', '9', '4344', '2051', '0'), +('10', '26', '15', '10366', '4805', '0'), +('10', '26', '15', '10151', '4200', '0'), +('10', '26', '15', '10163', '3800', '0'), +('10', '26', '15', '14679', '3330', '0'), +('10', '26', '20', '11666', '12367', '0'), +('10', '26', '20', '27727', '6613', '0'), +('10', '26', '20', '2742', '5538', '0'), +('10', '26', '20', '2288', '4478', '0'), +('10', '26', '12', '20655', '4324', '0'), +('10', '26', '12', '2923', '4324', '0'), +('10', '26', '12', '2291', '3830', '0'), +('10', '26', '12', '4835', '3335', '0'), +('10', '26', '18', '2461', '2199', '0'), +('10', '26', '18', '2292', '2097', '0'), +('10', '26', '18', '4876', '1871', '0'), +('10', '26', '18', '4410', '1642', '0'), +('10', '26', '19', '2293', '4177', '0'), +('10', '26', '19', '68239', '3616', '0'), +('10', '26', '19', '4407', '2887', '0'), +('10', '26', '19', '4837', '2594', '0'), +('10', '26', '13', '27729', '12399', '0'), +('10', '26', '13', '11694', '12214', '0'), +('10', '26', '13', '10333', '6800', '0'), +('10', '26', '13', '7051', '3728', '0'), +('10', '26', '14', '10333', '6800', '0'), +('10', '26', '14', '12802', '6649', '0'), +('10', '26', '14', '10335', '5643', '0'), +('10', '26', '14', '1679', '4862', '0'), +('10', '26', '11', '7051', '3726', '0'), +('10', '26', '11', '14762', '3204', '0'), +('10', '26', '11', '9246', '3153', '0'), +('10', '26', '11', '20677', '1200', '0'), +('10', '27', '22', '9246', '0', '0'), +('10', '27', '22', '21518', '0', '0'), +('10', '27', '22', '10323', '0', '0'), +('10', '27', '22', '44492', '0', '0'), +('10', '27', '1', '14702', '5000', '0'), +('10', '27', '1', '14701', '4612', '0'), +('10', '27', '1', '30361', '2640', '0'), +('10', '27', '1', '10321', '1000', '0'), +('10', '27', '2', '10143', '7118', '0'), +('10', '27', '2', '30363', '3700', '0'), +('10', '27', '2', '2294', '2692', '0'), +('10', '27', '2', '3000', '2534', '0'), +('10', '27', '3', '11052', '4892', '0'), +('10', '27', '3', '4505', '2313', '0'), +('10', '27', '3', '14695', '2292', '0'), +('10', '27', '3', '2295', '1670', '0'), +('10', '27', '5', '14703', '8800', '0'), +('10', '27', '5', '14700', '4818', '0'), +('10', '27', '5', '27726', '4108', '0'), +('10', '27', '5', '10055', '4030', '0'), +('10', '27', '8', '1546', '11364', '0'), +('10', '27', '8', '11603', '11246', '0'), +('10', '27', '8', '2349', '3554', '0'), +('10', '27', '8', '11621', '3521', '0'), +('10', '27', '6', '1557', '5310', '0'), +('10', '27', '6', '27728', '4874', '0'), +('10', '27', '6', '1401', '2924', '0'), +('10', '27', '6', '1904', '2639', '0'), +('10', '27', '17', '2285', '10671', '0'), +('10', '27', '17', '4872', '7337', '0'), +('10', '27', '17', '4342', '3388', '0'), +('10', '27', '17', '2405', '1838', '0'), +('10', '27', '7', '1362', '3124', '0'), +('10', '27', '7', '2289', '2635', '0'), +('10', '27', '7', '1321', '1746', '0'), +('10', '27', '7', '71303', '1204', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '27', '9', '27727', '6673', '0'), +('10', '27', '9', '14650', '2412', '0'), +('10', '27', '9', '2290', '2250', '0'), +('10', '27', '9', '4344', '2051', '0'), +('10', '27', '15', '10366', '4805', '0'), +('10', '27', '15', '10151', '4200', '0'), +('10', '27', '15', '10163', '3800', '0'), +('10', '27', '15', '14679', '3330', '0'), +('10', '27', '20', '11666', '12379', '0'), +('10', '27', '20', '27727', '6673', '0'), +('10', '27', '20', '2742', '5556', '0'), +('10', '27', '20', '2288', '4478', '0'), +('10', '27', '12', '20655', '4352', '0'), +('10', '27', '12', '2923', '4324', '0'), +('10', '27', '12', '2291', '3830', '0'), +('10', '27', '12', '4835', '3344', '0'), +('10', '27', '18', '2461', '2247', '0'), +('10', '27', '18', '2292', '2146', '0'), +('10', '27', '18', '4876', '1931', '0'), +('10', '27', '18', '4410', '1642', '0'), +('10', '27', '19', '2293', '4214', '0'), +('10', '27', '19', '68239', '3652', '0'), +('10', '27', '19', '4407', '2996', '0'), +('10', '27', '19', '4837', '2655', '0'), +('10', '27', '13', '27729', '12568', '0'), +('10', '27', '13', '11694', '12395', '0'), +('10', '27', '13', '10333', '6800', '0'), +('10', '27', '13', '7051', '3788', '0'), +('10', '27', '14', '10333', '6800', '0'), +('10', '27', '14', '12802', '6709', '0'), +('10', '27', '14', '10335', '5860', '0'), +('10', '27', '14', '1679', '4923', '0'), +('10', '27', '11', '7051', '3787', '0'), +('10', '27', '11', '9246', '3274', '0'), +('10', '27', '11', '14762', '3204', '0'), +('10', '27', '11', '20677', '1200', '0'), +('10', '28', '22', '9246', '0', '0'), +('10', '28', '22', '21518', '0', '0'), +('10', '28', '22', '10323', '0', '0'), +('10', '28', '22', '44492', '0', '0'), +('10', '28', '1', '14702', '5000', '0'), +('10', '28', '1', '14701', '4612', '0'), +('10', '28', '1', '30361', '2640', '0'), +('10', '28', '1', '14630', '1015', '0'), +('10', '28', '2', '10143', '7118', '0'), +('10', '28', '2', '30363', '3700', '0'), +('10', '28', '2', '2294', '2716', '0'), +('10', '28', '2', '3000', '2534', '0'), +('10', '28', '3', '11052', '5074', '0'), +('10', '28', '3', '4505', '2398', '0'), +('10', '28', '3', '14695', '2376', '0'), +('10', '28', '3', '2295', '1695', '0'), +('10', '28', '5', '14703', '8800', '0'), +('10', '28', '5', '14700', '4818', '0'), +('10', '28', '5', '27726', '4204', '0'), +('10', '28', '5', '10055', '4030', '0'), +('10', '28', '8', '1546', '11485', '0'), +('10', '28', '8', '11603', '11355', '0'), +('10', '28', '8', '2349', '3554', '0'), +('10', '28', '8', '11621', '3521', '0'), +('10', '28', '6', '1557', '5310', '0'), +('10', '28', '6', '27728', '5019', '0'), +('10', '28', '6', '1401', '2924', '0'), +('10', '28', '6', '1904', '2736', '0'), +('10', '28', '17', '2285', '10719', '0'), +('10', '28', '17', '4872', '7511', '0'), +('10', '28', '17', '4342', '3509', '0'), +('10', '28', '17', '2405', '1904', '0'), +('10', '28', '7', '1362', '3124', '0'), +('10', '28', '7', '2289', '2683', '0'), +('10', '28', '7', '1321', '1746', '0'), +('10', '28', '7', '71303', '1240', '0'), +('10', '28', '9', '27727', '6733', '0'), +('10', '28', '9', '14650', '2412', '0'), +('10', '28', '9', '2290', '2314', '0'), +('10', '28', '9', '4344', '2051', '0'), +('10', '28', '15', '10366', '4805', '0'), +('10', '28', '15', '10151', '4200', '0'), +('10', '28', '15', '10163', '3800', '0'), +('10', '28', '15', '14679', '3330', '0'), +('10', '28', '20', '11666', '12392', '0'), +('10', '28', '20', '27727', '6733', '0'), +('10', '28', '20', '2742', '5574', '0'), +('10', '28', '20', '2288', '4478', '0'), +('10', '28', '12', '20655', '4379', '0'), +('10', '28', '12', '2923', '4324', '0'), +('10', '28', '12', '2291', '3830', '0'), +('10', '28', '12', '4835', '3353', '0'), +('10', '28', '18', '2461', '2295', '0'), +('10', '28', '18', '2292', '2194', '0'), +('10', '28', '18', '4876', '1992', '0'), +('10', '28', '18', '4410', '1642', '0'), +('10', '28', '19', '2293', '4250', '0'), +('10', '28', '19', '68239', '3688', '0'), +('10', '28', '19', '4407', '3104', '0'), +('10', '28', '19', '4837', '2715', '0'), +('10', '28', '13', '27729', '12737', '0'), +('10', '28', '13', '11694', '12576', '0'), +('10', '28', '13', '10333', '6800', '0'), +('10', '28', '13', '7051', '3849', '0'), +('10', '28', '14', '10333', '6800', '0'), +('10', '28', '14', '12802', '6770', '0'), +('10', '28', '14', '10335', '6077', '0'), +('10', '28', '14', '1679', '4983', '0'), +('10', '28', '11', '7051', '3847', '0'), +('10', '28', '11', '9246', '3394', '0'), +('10', '28', '11', '14762', '3204', '0'), +('10', '28', '11', '20677', '1200', '0'), +('10', '29', '22', '9246', '0', '0'), +('10', '29', '22', '21518', '0', '0'), +('10', '29', '22', '10323', '0', '0'), +('10', '29', '22', '44492', '0', '0'), +('10', '29', '1', '14702', '5000', '0'), +('10', '29', '1', '14701', '4612', '0'), +('10', '29', '1', '30361', '2640', '0'), +('10', '29', '1', '14630', '1051', '0'), +('10', '29', '2', '10143', '7118', '0'), +('10', '29', '2', '30363', '3700', '0'), +('10', '29', '2', '2294', '2741', '0'), +('10', '29', '2', '3000', '2534', '0'), +('10', '29', '3', '11052', '5255', '0'), +('10', '29', '3', '4505', '2482', '0'), +('10', '29', '3', '14695', '2461', '0'), +('10', '29', '3', '2295', '1719', '0'), +('10', '29', '5', '14703', '8800', '0'), +('10', '29', '5', '14700', '4818', '0'), +('10', '29', '5', '27726', '4301', '0'), +('10', '29', '5', '10055', '4030', '0'), +('10', '29', '8', '1546', '11606', '0'), +('10', '29', '8', '11603', '11463', '0'), +('10', '29', '8', '2349', '3554', '0'), +('10', '29', '8', '11621', '3521', '0'), +('10', '29', '6', '1557', '5310', '0'), +('10', '29', '6', '27728', '5164', '0'), +('10', '29', '6', '1401', '2924', '0'), +('10', '29', '6', '1904', '2833', '0'), +('10', '29', '17', '2285', '10768', '0'), +('10', '29', '17', '4872', '7684', '0'), +('10', '29', '17', '4342', '3630', '0'), +('10', '29', '17', '2405', '1970', '0'), +('10', '29', '7', '1362', '3124', '0'), +('10', '29', '7', '2289', '2731', '0'), +('10', '29', '7', '1321', '1746', '0'), +('10', '29', '7', '71303', '1276', '0'), +('10', '29', '9', '27727', '6794', '0'), +('10', '29', '9', '14650', '2412', '0'), +('10', '29', '9', '2290', '2378', '0'), +('10', '29', '9', '4344', '2051', '0'), +('10', '29', '15', '10366', '4805', '0'), +('10', '29', '15', '10151', '4200', '0'), +('10', '29', '15', '10163', '3800', '0'), +('10', '29', '15', '14679', '3330', '0'), +('10', '29', '20', '11666', '12405', '0'), +('10', '29', '20', '27727', '6794', '0'), +('10', '29', '20', '2742', '5592', '0'), +('10', '29', '20', '2288', '4478', '0'), +('10', '29', '12', '20655', '4407', '0'), +('10', '29', '12', '2923', '4324', '0'), +('10', '29', '12', '2291', '3830', '0'), +('10', '29', '12', '4835', '3362', '0'), +('10', '29', '18', '2461', '2344', '0'), +('10', '29', '18', '2292', '2242', '0'), +('10', '29', '18', '4876', '2052', '0'), +('10', '29', '18', '4410', '1642', '0'), +('10', '29', '19', '2293', '4286', '0'), +('10', '29', '19', '68239', '3724', '0'), +('10', '29', '19', '4407', '3213', '0'), +('10', '29', '19', '4837', '2775', '0'), +('10', '29', '13', '27729', '12906', '0'), +('10', '29', '13', '11694', '12757', '0'), +('10', '29', '13', '10333', '6800', '0'), +('10', '29', '13', '7051', '3909', '0'), +('10', '29', '14', '12802', '6830', '0'), +('10', '29', '14', '10333', '6800', '0'), +('10', '29', '14', '10335', '6295', '0'), +('10', '29', '14', '1679', '5043', '0'), +('10', '29', '11', '7051', '3908', '0'), +('10', '29', '11', '9246', '3515', '0'), +('10', '29', '11', '14762', '3204', '0'), +('10', '29', '11', '7048', '1206', '0'), +('10', '30', '22', '9246', '0', '0'), +('10', '30', '22', '21518', '0', '0'), +('10', '30', '22', '10323', '0', '0'), +('10', '30', '22', '44492', '0', '0'), +('10', '30', '1', '14702', '5000', '0'), +('10', '30', '1', '14701', '4612', '0'), +('10', '30', '1', '30361', '2640', '0'), +('10', '30', '1', '14630', '1087', '0'), +('10', '30', '2', '10143', '7118', '0'), +('10', '30', '2', '30363', '3700', '0'), +('10', '30', '2', '2294', '2765', '0'), +('10', '30', '2', '3000', '2534', '0'), +('10', '30', '3', '11052', '5436', '0'), +('10', '30', '3', '4505', '2567', '0'), +('10', '30', '3', '14695', '2545', '0'), +('10', '30', '3', '2295', '1743', '0'), +('10', '30', '5', '14703', '8800', '0'), +('10', '30', '5', '14700', '4818', '0'), +('10', '30', '5', '27726', '4398', '0'), +('10', '30', '5', '68291', '4036', '0'), +('10', '30', '8', '1546', '11727', '0'), +('10', '30', '8', '11603', '11572', '0'), +('10', '30', '8', '2349', '3554', '0'), +('10', '30', '8', '11621', '3521', '0'), +('10', '30', '6', '1557', '5310', '0'), +('10', '30', '6', '27728', '5309', '0'), +('10', '30', '6', '1904', '2929', '0'), +('10', '30', '6', '1401', '2924', '0'), +('10', '30', '17', '2285', '10816', '0'), +('10', '30', '17', '4872', '7857', '0'), +('10', '30', '17', '4342', '3751', '0'), +('10', '30', '17', '2405', '2035', '0'), +('10', '30', '7', '1362', '3124', '0'), +('10', '30', '7', '2289', '2780', '0'), +('10', '30', '7', '1321', '1746', '0'), +('10', '30', '7', '71303', '1312', '0'), +('10', '30', '9', '27727', '6854', '0'), +('10', '30', '9', '2290', '2442', '0'), +('10', '30', '9', '14650', '2412', '0'), +('10', '30', '9', '4344', '2051', '0'), +('10', '30', '15', '10366', '4805', '0'), +('10', '30', '15', '10151', '4200', '0'), +('10', '30', '15', '10163', '3800', '0'), +('10', '30', '15', '14679', '3330', '0'), +('10', '30', '20', '11666', '12417', '0'), +('10', '30', '20', '27727', '6854', '0'), +('10', '30', '20', '2742', '5610', '0'), +('10', '30', '20', '2288', '4478', '0'), +('10', '30', '12', '20655', '4435', '0'), +('10', '30', '12', '2923', '4324', '0'), +('10', '30', '12', '2291', '3830', '0'), +('10', '30', '12', '4835', '3371', '0'), +('10', '30', '18', '2461', '2392', '0'), +('10', '30', '18', '2292', '2291', '0'), +('10', '30', '18', '4876', '2113', '0'), +('10', '30', '18', '4410', '1642', '0'), +('10', '30', '19', '2293', '4322', '0'), +('10', '30', '19', '68239', '3761', '0'), +('10', '30', '19', '4407', '3322', '0'), +('10', '30', '19', '4837', '2836', '0'), +('10', '30', '13', '27729', '13076', '0'), +('10', '30', '13', '11694', '12938', '0'), +('10', '30', '13', '10333', '6800', '0'), +('10', '30', '13', '7051', '3970', '0'), +('10', '30', '14', '12802', '6891', '0'), +('10', '30', '14', '10333', '6800', '0'), +('10', '30', '14', '10335', '6512', '0'), +('10', '30', '14', '1679', '5104', '0'), +('10', '30', '11', '7051', '3968', '0'), +('10', '30', '11', '9246', '3636', '0'), +('10', '30', '11', '14762', '3204', '0'), +('10', '30', '11', '7048', '1242', '0'), +('10', '31', '22', '9246', '0', '0'), +('10', '31', '22', '21518', '0', '0'), +('10', '31', '22', '10323', '0', '0'), +('10', '31', '22', '44492', '0', '0'), +('10', '31', '1', '14702', '5000', '0'), +('10', '31', '1', '14701', '4612', '0'), +('10', '31', '1', '30361', '2640', '0'), +('10', '31', '1', '14630', '1123', '0'), +('10', '31', '2', '10143', '7118', '0'), +('10', '31', '2', '30363', '3700', '0'), +('10', '31', '2', '2294', '2789', '0'), +('10', '31', '2', '3000', '2534', '0'), +('10', '31', '3', '11052', '5617', '0'), +('10', '31', '3', '4505', '2652', '0'), +('10', '31', '3', '14695', '2630', '0'), +('10', '31', '3', '2295', '1767', '0'), +('10', '31', '5', '14703', '8800', '0'), +('10', '31', '5', '14700', '4818', '0'), +('10', '31', '5', '27726', '4494', '0'), +('10', '31', '5', '68291', '4084', '0'), +('10', '31', '8', '1546', '11847', '0'), +('10', '31', '8', '11603', '11681', '0'), +('10', '31', '8', '2349', '3554', '0'), +('10', '31', '8', '11621', '3521', '0'), +('10', '31', '6', '27728', '5454', '0'), +('10', '31', '6', '1557', '5310', '0'), +('10', '31', '6', '1904', '3026', '0'), +('10', '31', '6', '1401', '2924', '0'), +('10', '31', '17', '2285', '10864', '0'), +('10', '31', '17', '4872', '8031', '0'), +('10', '31', '17', '4342', '3872', '0'), +('10', '31', '17', '2405', '2101', '0'), +('10', '31', '7', '1362', '3124', '0'), +('10', '31', '7', '2289', '2828', '0'), +('10', '31', '7', '1321', '1746', '0'), +('10', '31', '7', '71303', '1349', '0'), +('10', '31', '9', '27727', '6915', '0'), +('10', '31', '9', '2290', '2506', '0'), +('10', '31', '9', '14650', '2412', '0'), +('10', '31', '9', '10149', '2054', '0'), +('10', '31', '15', '10366', '4805', '0'), +('10', '31', '15', '10151', '4200', '0'), +('10', '31', '15', '10163', '3800', '0'), +('10', '31', '15', '14679', '3330', '0'), +('10', '31', '20', '11666', '12430', '0'), +('10', '31', '20', '27727', '6915', '0'), +('10', '31', '20', '2742', '5628', '0'), +('10', '31', '20', '1543', '4579', '0'), +('10', '31', '12', '20655', '4463', '0'), +('10', '31', '12', '2923', '4324', '0'), +('10', '31', '12', '2291', '3830', '0'), +('10', '31', '12', '4835', '3381', '0'), +('10', '31', '18', '2461', '2440', '0'), +('10', '31', '18', '2292', '2339', '0'), +('10', '31', '18', '4876', '2173', '0'), +('10', '31', '18', '4410', '1642', '0'), +('10', '31', '19', '2293', '4358', '0'), +('10', '31', '19', '68239', '3797', '0'), +('10', '31', '19', '4407', '3431', '0'), +('10', '31', '19', '4837', '2896', '0'), +('10', '31', '13', '27729', '13245', '0'), +('10', '31', '13', '11694', '13120', '0'), +('10', '31', '13', '10333', '6800', '0'), +('10', '31', '13', '13730', '4061', '0'), +('10', '31', '14', '12802', '6951', '0'), +('10', '31', '14', '10333', '6800', '0'), +('10', '31', '14', '10335', '6730', '0'), +('10', '31', '14', '1679', '5164', '0'), +('10', '31', '11', '7051', '4028', '0'), +('10', '31', '11', '9246', '3757', '0'), +('10', '31', '11', '14762', '3204', '0'), +('10', '31', '11', '7048', '1278', '0'), +('10', '32', '22', '9246', '0', '0'), +('10', '32', '22', '21518', '0', '0'), +('10', '32', '22', '10323', '0', '0'), +('10', '32', '22', '44492', '0', '0'), +('10', '32', '1', '14702', '5000', '0'), +('10', '32', '1', '14701', '4612', '0'), +('10', '32', '1', '30361', '2640', '0'), +('10', '32', '1', '14630', '1160', '0'), +('10', '32', '2', '10143', '7118', '0'), +('10', '32', '2', '30363', '3700', '0'), +('10', '32', '2', '2294', '2813', '0'), +('10', '32', '2', '3000', '2534', '0'), +('10', '32', '3', '11052', '5798', '0'), +('10', '32', '3', '4505', '2736', '0'), +('10', '32', '3', '14695', '2714', '0'), +('10', '32', '3', '2295', '1791', '0'), +('10', '32', '5', '14703', '8800', '0'), +('10', '32', '5', '14700', '4818', '0'), +('10', '32', '5', '27726', '4591', '0'), +('10', '32', '5', '68291', '4132', '0'), +('10', '32', '8', '1546', '11968', '0'), +('10', '32', '8', '11603', '11789', '0'), +('10', '32', '8', '2349', '3554', '0'), +('10', '32', '8', '11621', '3521', '0'), +('10', '32', '6', '27728', '5599', '0'), +('10', '32', '6', '1557', '5310', '0'), +('10', '32', '6', '1904', '3123', '0'), +('10', '32', '6', '1401', '2924', '0'), +('10', '32', '17', '2285', '10913', '0'), +('10', '32', '17', '4872', '8204', '0'), +('10', '32', '17', '4342', '3992', '0'), +('10', '32', '17', '2405', '2167', '0'), +('10', '32', '7', '1362', '3124', '0'), +('10', '32', '7', '2289', '2876', '0'), +('10', '32', '7', '1321', '1746', '0'), +('10', '32', '7', '71303', '1385', '0'), +('10', '32', '9', '27727', '6975', '0'), +('10', '32', '9', '2290', '2571', '0'), +('10', '32', '9', '14650', '2412', '0'), +('10', '32', '9', '10149', '2090', '0'), +('10', '32', '15', '10366', '4805', '0'), +('10', '32', '15', '10151', '4200', '0'), +('10', '32', '15', '10163', '3800', '0'), +('10', '32', '15', '27730', '3338', '0'), +('10', '32', '20', '11666', '12443', '0'), +('10', '32', '20', '27727', '6975', '0'), +('10', '32', '20', '2742', '5646', '0'), +('10', '32', '20', '1543', '4700', '0'), +('10', '32', '12', '20655', '4491', '0'), +('10', '32', '12', '2923', '4324', '0'), +('10', '32', '12', '2291', '3830', '0'), +('10', '32', '12', '4835', '3390', '0'), +('10', '32', '18', '2461', '2489', '0'), +('10', '32', '18', '2292', '2387', '0'), +('10', '32', '18', '4876', '2233', '0'), +('10', '32', '18', '4410', '1642', '0'), +('10', '32', '19', '2293', '4395', '0'), +('10', '32', '19', '68239', '3833', '0'), +('10', '32', '19', '4407', '3539', '0'), +('10', '32', '19', '4837', '2957', '0'), +('10', '32', '13', '27729', '13414', '0'), +('10', '32', '13', '11694', '13301', '0'), +('10', '32', '13', '10333', '6800', '0'), +('10', '32', '13', '13730', '4179', '0'), +('10', '32', '14', '12802', '7011', '0'), +('10', '32', '14', '10335', '6947', '0'), +('10', '32', '14', '10333', '6800', '0'), +('10', '32', '14', '1679', '5225', '0'), +('10', '32', '11', '7051', '4089', '0'), +('10', '32', '11', '9246', '3878', '0'), +('10', '32', '11', '14762', '3204', '0'), +('10', '32', '11', '7048', '1315', '0'), +('10', '33', '22', '9246', '0', '0'), +('10', '33', '22', '21518', '0', '0'), +('10', '33', '22', '10323', '0', '0'), +('10', '33', '22', '44492', '0', '0'), +('10', '33', '1', '14702', '5000', '0'), +('10', '33', '1', '14701', '4612', '0'), +('10', '33', '1', '30361', '2640', '0'), +('10', '33', '1', '14630', '1196', '0'), +('10', '33', '2', '10143', '7118', '0'), +('10', '33', '2', '30363', '3700', '0'), +('10', '33', '2', '2294', '2837', '0'), +('10', '33', '2', '3000', '2534', '0'), +('10', '33', '3', '11052', '5980', '0'), +('10', '33', '3', '4505', '2821', '0'), +('10', '33', '3', '14695', '2799', '0'), +('10', '33', '3', '2295', '1815', '0'), +('10', '33', '5', '14703', '8800', '0'), +('10', '33', '5', '14700', '4818', '0'), +('10', '33', '5', '27726', '4687', '0'), +('10', '33', '5', '68291', '4181', '0'), +('10', '33', '8', '1546', '12089', '0'), +('10', '33', '8', '11603', '11898', '0'), +('10', '33', '8', '2349', '3554', '0'), +('10', '33', '8', '11621', '3521', '0'), +('10', '33', '6', '27728', '5744', '0'), +('10', '33', '6', '1557', '5310', '0'), +('10', '33', '6', '1904', '3219', '0'), +('10', '33', '6', '1401', '2924', '0'), +('10', '33', '17', '2285', '10961', '0'), +('10', '33', '17', '4872', '8378', '0'), +('10', '33', '17', '4342', '4113', '0'), +('10', '33', '17', '2405', '2233', '0'), +('10', '33', '7', '1362', '3124', '0'), +('10', '33', '7', '2289', '2925', '0'), +('10', '33', '7', '1321', '1746', '0'), +('10', '33', '7', '71303', '1421', '0'), +('10', '33', '9', '27727', '7035', '0'), +('10', '33', '9', '2290', '2635', '0'), +('10', '33', '9', '14650', '2412', '0'), +('10', '33', '9', '10149', '2126', '0'), +('10', '33', '15', '10366', '4805', '0'), +('10', '33', '15', '10151', '4200', '0'), +('10', '33', '15', '10163', '3800', '0'), +('10', '33', '15', '27730', '3422', '0'), +('10', '33', '20', '11666', '12455', '0'), +('10', '33', '20', '27727', '7035', '0'), +('10', '33', '20', '2742', '5664', '0'), +('10', '33', '20', '1543', '4821', '0'), +('10', '33', '12', '20655', '4518', '0'), +('10', '33', '12', '2923', '4324', '0'), +('10', '33', '12', '2291', '3830', '0'), +('10', '33', '12', '4835', '3399', '0'), +('10', '33', '18', '2461', '2537', '0'), +('10', '33', '18', '2292', '2436', '0'), +('10', '33', '18', '4876', '2294', '0'), +('10', '33', '18', '4410', '1642', '0'), +('10', '33', '19', '2293', '4431', '0'), +('10', '33', '19', '68239', '3869', '0'), +('10', '33', '19', '4407', '3648', '0'), +('10', '33', '19', '4837', '3017', '0'), +('10', '33', '13', '27729', '13583', '0'), +('10', '33', '13', '11694', '13482', '0'), +('10', '33', '13', '10333', '6800', '0'), +('10', '33', '13', '13730', '4297', '0'), +('10', '33', '14', '10335', '7165', '0'), +('10', '33', '14', '12802', '7072', '0'), +('10', '33', '14', '10333', '6800', '0'), +('10', '33', '14', '1679', '5285', '0'), +('10', '33', '11', '7051', '4149', '0'), +('10', '33', '11', '9246', '3998', '0'), +('10', '33', '11', '14762', '3204', '0'), +('10', '33', '11', '7048', '1351', '0'), +('10', '34', '22', '9246', '0', '0'), +('10', '34', '22', '21518', '0', '0'), +('10', '34', '22', '10323', '0', '0'), +('10', '34', '22', '44492', '0', '0'), +('10', '34', '1', '14702', '5000', '0'), +('10', '34', '1', '14701', '4612', '0'), +('10', '34', '1', '30361', '2640', '0'), +('10', '34', '1', '14630', '1232', '0'), +('10', '34', '2', '10143', '7118', '0'), +('10', '34', '2', '30363', '3700', '0'), +('10', '34', '2', '2294', '2861', '0'), +('10', '34', '2', '2191', '2536', '0'), +('10', '34', '3', '11052', '6161', '0'), +('10', '34', '3', '4505', '2905', '0'), +('10', '34', '3', '14695', '2883', '0'), +('10', '34', '3', '2295', '1840', '0'), +('10', '34', '5', '14703', '8800', '0'), +('10', '34', '5', '14700', '4818', '0'), +('10', '34', '5', '27726', '4784', '0'), +('10', '34', '5', '68291', '4229', '0'), +('10', '34', '8', '1546', '12210', '0'), +('10', '34', '8', '11603', '12007', '0'), +('10', '34', '8', '2349', '3554', '0'), +('10', '34', '8', '11621', '3521', '0'), +('10', '34', '6', '27728', '5889', '0'), +('10', '34', '6', '1557', '5310', '0'), +('10', '34', '6', '1904', '3316', '0'), +('10', '34', '6', '1401', '2924', '0'), +('10', '34', '17', '2285', '11009', '0'), +('10', '34', '17', '4872', '8551', '0'), +('10', '34', '17', '4342', '4234', '0'), +('10', '34', '17', '2405', '2299', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '34', '7', '1362', '3124', '0'), +('10', '34', '7', '2289', '2973', '0'), +('10', '34', '7', '1321', '1746', '0'), +('10', '34', '7', '71303', '1457', '0'), +('10', '34', '9', '27727', '7096', '0'), +('10', '34', '9', '2290', '2699', '0'), +('10', '34', '9', '14650', '2412', '0'), +('10', '34', '9', '10149', '2162', '0'), +('10', '34', '15', '10366', '4805', '0'), +('10', '34', '15', '10151', '4200', '0'), +('10', '34', '15', '10163', '3800', '0'), +('10', '34', '15', '27730', '3507', '0'), +('10', '34', '20', '11666', '12468', '0'), +('10', '34', '20', '27727', '7096', '0'), +('10', '34', '20', '2742', '5683', '0'), +('10', '34', '20', '1543', '4942', '0'), +('10', '34', '12', '20655', '4546', '0'), +('10', '34', '12', '2923', '4324', '0'), +('10', '34', '12', '2291', '3830', '0'), +('10', '34', '12', '4835', '3408', '0'), +('10', '34', '18', '2461', '2585', '0'), +('10', '34', '18', '2292', '2484', '0'), +('10', '34', '18', '4876', '2354', '0'), +('10', '34', '18', '4410', '1642', '0'), +('10', '34', '19', '2293', '4467', '0'), +('10', '34', '19', '68239', '3906', '0'), +('10', '34', '19', '4407', '3757', '0'), +('10', '34', '19', '4837', '3077', '0'), +('10', '34', '13', '27729', '13752', '0'), +('10', '34', '13', '11694', '13663', '0'), +('10', '34', '13', '10333', '6800', '0'), +('10', '34', '13', '13730', '4414', '0'), +('10', '34', '14', '10335', '7382', '0'), +('10', '34', '14', '12802', '7132', '0'), +('10', '34', '14', '10333', '6800', '0'), +('10', '34', '14', '1679', '5345', '0'), +('10', '34', '11', '7051', '4210', '0'), +('10', '34', '11', '9246', '4119', '0'), +('10', '34', '11', '14762', '3204', '0'), +('10', '34', '11', '7048', '1387', '0'), +('10', '35', '22', '9246', '0', '0'), +('10', '35', '22', '21518', '0', '0'), +('10', '35', '22', '10323', '0', '0'), +('10', '35', '22', '44492', '0', '0'), +('10', '35', '1', '14702', '5000', '0'), +('10', '35', '1', '14701', '4612', '0'), +('10', '35', '1', '30361', '2640', '0'), +('10', '35', '1', '14630', '1268', '0'), +('10', '35', '2', '10143', '7118', '0'), +('10', '35', '2', '30363', '3700', '0'), +('10', '35', '2', '2294', '2885', '0'), +('10', '35', '2', '2191', '2608', '0'), +('10', '35', '3', '11052', '6342', '0'), +('10', '35', '3', '4505', '2990', '0'), +('10', '35', '3', '14695', '2968', '0'), +('10', '35', '3', '2295', '1864', '0'), +('10', '35', '5', '14703', '8800', '0'), +('10', '35', '5', '27726', '4881', '0'), +('10', '35', '5', '14700', '4818', '0'), +('10', '35', '5', '68291', '4277', '0'), +('10', '35', '8', '1546', '12331', '0'), +('10', '35', '8', '11603', '12116', '0'), +('10', '35', '8', '2349', '3554', '0'), +('10', '35', '8', '11621', '3521', '0'), +('10', '35', '6', '27728', '6034', '0'), +('10', '35', '6', '1557', '5310', '0'), +('10', '35', '6', '1904', '3413', '0'), +('10', '35', '6', '1401', '2924', '0'), +('10', '35', '17', '2285', '11058', '0'), +('10', '35', '17', '4872', '8724', '0'), +('10', '35', '17', '4342', '4355', '0'), +('10', '35', '17', '2405', '2365', '0'), +('10', '35', '7', '1362', '3124', '0'), +('10', '35', '7', '2289', '3021', '0'), +('10', '35', '7', '1321', '1746', '0'), +('10', '35', '7', '71303', '1493', '0'), +('10', '35', '9', '27727', '7156', '0'), +('10', '35', '9', '2290', '2763', '0'), +('10', '35', '9', '14650', '2412', '0'), +('10', '35', '9', '10149', '2199', '0'), +('10', '35', '15', '10366', '4805', '0'), +('10', '35', '15', '10151', '4200', '0'), +('10', '35', '15', '10163', '3800', '0'), +('10', '35', '15', '27730', '3592', '0'), +('10', '35', '20', '11666', '12481', '0'), +('10', '35', '20', '27727', '7156', '0'), +('10', '35', '20', '2742', '5701', '0'), +('10', '35', '20', '1543', '5063', '0'), +('10', '35', '12', '20655', '4574', '0'), +('10', '35', '12', '2923', '4324', '0'), +('10', '35', '12', '2291', '3830', '0'), +('10', '35', '12', '4835', '3417', '0'), +('10', '35', '18', '2461', '2633', '0'), +('10', '35', '18', '2292', '2532', '0'), +('10', '35', '18', '4876', '2415', '0'), +('10', '35', '18', '4410', '1642', '0'), +('10', '35', '19', '2293', '4503', '0'), +('10', '35', '19', '68239', '3942', '0'), +('10', '35', '19', '4407', '3865', '0'), +('10', '35', '19', '4837', '3138', '0'), +('10', '35', '13', '27729', '13921', '0'), +('10', '35', '13', '11694', '13844', '0'), +('10', '35', '13', '10333', '6800', '0'), +('10', '35', '13', '13730', '4532', '0'), +('10', '35', '14', '10335', '7600', '0'), +('10', '35', '14', '12802', '7193', '0'), +('10', '35', '14', '10333', '6800', '0'), +('10', '35', '14', '1679', '5406', '0'), +('10', '35', '11', '7051', '4270', '0'), +('10', '35', '11', '9246', '4240', '0'), +('10', '35', '11', '14762', '3204', '0'), +('10', '35', '11', '7048', '1423', '0'), +('10', '36', '22', '9246', '0', '0'), +('10', '36', '22', '21518', '0', '0'), +('10', '36', '22', '10323', '0', '0'), +('10', '36', '22', '44492', '0', '0'), +('10', '36', '1', '14702', '5000', '0'), +('10', '36', '1', '14701', '4612', '0'), +('10', '36', '1', '30361', '2640', '0'), +('10', '36', '1', '14630', '1305', '0'), +('10', '36', '2', '10143', '7118', '0'), +('10', '36', '2', '30363', '3700', '0'), +('10', '36', '2', '2294', '2910', '0'), +('10', '36', '2', '2191', '2681', '0'), +('10', '36', '3', '11052', '6523', '0'), +('10', '36', '3', '4505', '3074', '0'), +('10', '36', '3', '14695', '3053', '0'), +('10', '36', '3', '2295', '1888', '0'), +('10', '36', '5', '14703', '8800', '0'), +('10', '36', '5', '27726', '4977', '0'), +('10', '36', '5', '14700', '4818', '0'), +('10', '36', '5', '68291', '4326', '0'), +('10', '36', '8', '1546', '12451', '0'), +('10', '36', '8', '11603', '12224', '0'), +('10', '36', '8', '2349', '3554', '0'), +('10', '36', '8', '11621', '3521', '0'), +('10', '36', '6', '27728', '6179', '0'), +('10', '36', '6', '1557', '5310', '0'), +('10', '36', '6', '1904', '3509', '0'), +('10', '36', '6', '1401', '2924', '0'), +('10', '36', '17', '2285', '11106', '0'), +('10', '36', '17', '4872', '8898', '0'), +('10', '36', '17', '4342', '4476', '0'), +('10', '36', '17', '2405', '2430', '0'), +('10', '36', '7', '1362', '3124', '0'), +('10', '36', '7', '2289', '3070', '0'), +('10', '36', '7', '1321', '1746', '0'), +('10', '36', '7', '71303', '1530', '0'), +('10', '36', '9', '27727', '7217', '0'), +('10', '36', '9', '2290', '2827', '0'), +('10', '36', '9', '14650', '2412', '0'), +('10', '36', '9', '10149', '2235', '0'), +('10', '36', '15', '10366', '4805', '0'), +('10', '36', '15', '10151', '4200', '0'), +('10', '36', '15', '10163', '3800', '0'), +('10', '36', '15', '27730', '3676', '0'), +('10', '36', '20', '11666', '12493', '0'), +('10', '36', '20', '27727', '7217', '0'), +('10', '36', '20', '2742', '5719', '0'), +('10', '36', '20', '1543', '5183', '0'), +('10', '36', '12', '20655', '4602', '0'), +('10', '36', '12', '2923', '4324', '0'), +('10', '36', '12', '2291', '3830', '0'), +('10', '36', '12', '4835', '3426', '0'), +('10', '36', '18', '2461', '2682', '0'), +('10', '36', '18', '2292', '2581', '0'), +('10', '36', '18', '4876', '2475', '0'), +('10', '36', '18', '4410', '1642', '0'), +('10', '36', '19', '2293', '4540', '0'), +('10', '36', '19', '68239', '3978', '0'), +('10', '36', '19', '4407', '3974', '0'), +('10', '36', '19', '4837', '3198', '0'), +('10', '36', '13', '27729', '14090', '0'), +('10', '36', '13', '11694', '14026', '0'), +('10', '36', '13', '10333', '6800', '0'), +('10', '36', '13', '13730', '4650', '0'), +('10', '36', '14', '10335', '7817', '0'), +('10', '36', '14', '12802', '7253', '0'), +('10', '36', '14', '10333', '6800', '0'), +('10', '36', '14', '1679', '5466', '0'), +('10', '36', '11', '9246', '4361', '0'), +('10', '36', '11', '7051', '4330', '0'), +('10', '36', '11', '14762', '3204', '0'), +('10', '36', '11', '7048', '1459', '0'), +('10', '37', '22', '9246', '0', '0'), +('10', '37', '22', '21518', '0', '0'), +('10', '37', '22', '10323', '0', '0'), +('10', '37', '22', '44492', '0', '0'), +('10', '37', '1', '14702', '5000', '0'), +('10', '37', '1', '14701', '4612', '0'), +('10', '37', '1', '30361', '2640', '0'), +('10', '37', '1', '14630', '1341', '0'), +('10', '37', '2', '10143', '7118', '0'), +('10', '37', '2', '30363', '3700', '0'), +('10', '37', '2', '2294', '2934', '0'), +('10', '37', '2', '2191', '2753', '0'), +('10', '37', '3', '11052', '6704', '0'), +('10', '37', '3', '4505', '3159', '0'), +('10', '37', '3', '14695', '3137', '0'), +('10', '37', '3', '2295', '1912', '0'), +('10', '37', '5', '14703', '8800', '0'), +('10', '37', '5', '27726', '5074', '0'), +('10', '37', '5', '14700', '4818', '0'), +('10', '37', '5', '68291', '4374', '0'), +('10', '37', '8', '1546', '12572', '0'), +('10', '37', '8', '11603', '12333', '0'), +('10', '37', '8', '2349', '3554', '0'), +('10', '37', '8', '11621', '3521', '0'), +('10', '37', '6', '27728', '6324', '0'), +('10', '37', '6', '1557', '5310', '0'), +('10', '37', '6', '1904', '3606', '0'), +('10', '37', '6', '1401', '2924', '0'), +('10', '37', '17', '2285', '11154', '0'), +('10', '37', '17', '4872', '9071', '0'), +('10', '37', '17', '4342', '4596', '0'), +('10', '37', '17', '2405', '2496', '0'), +('10', '37', '7', '1362', '3124', '0'), +('10', '37', '7', '2289', '3118', '0'), +('10', '37', '7', '1321', '1746', '0'), +('10', '37', '7', '71303', '1566', '0'), +('10', '37', '9', '27727', '7277', '0'), +('10', '37', '9', '2290', '2891', '0'), +('10', '37', '9', '14650', '2412', '0'), +('10', '37', '9', '4874', '2289', '0'), +('10', '37', '15', '10366', '4805', '0'), +('10', '37', '15', '10151', '4200', '0'), +('10', '37', '15', '10163', '3800', '0'), +('10', '37', '15', '27730', '3761', '0'), +('10', '37', '20', '11666', '12506', '0'), +('10', '37', '20', '27727', '7277', '0'), +('10', '37', '20', '2742', '5737', '0'), +('10', '37', '20', '1543', '5304', '0'), +('10', '37', '12', '20655', '4629', '0'), +('10', '37', '12', '2923', '4324', '0'), +('10', '37', '12', '2291', '3830', '0'), +('10', '37', '12', '4835', '3435', '0'), +('10', '37', '18', '2461', '2730', '0'), +('10', '37', '18', '2292', '2629', '0'), +('10', '37', '18', '4876', '2535', '0'), +('10', '37', '18', '4410', '1642', '0'), +('10', '37', '19', '2293', '4576', '0'), +('10', '37', '19', '4407', '4083', '0'), +('10', '37', '19', '68239', '4014', '0'), +('10', '37', '19', '4837', '3259', '0'), +('10', '37', '13', '27729', '14259', '0'), +('10', '37', '13', '11694', '14207', '0'), +('10', '37', '13', '10333', '6800', '0'), +('10', '37', '13', '13730', '4768', '0'), +('10', '37', '14', '10335', '8034', '0'), +('10', '37', '14', '12802', '7313', '0'), +('10', '37', '14', '10333', '6800', '0'), +('10', '37', '14', '1679', '5527', '0'), +('10', '37', '11', '9246', '4482', '0'), +('10', '37', '11', '7051', '4391', '0'), +('10', '37', '11', '14762', '3204', '0'), +('10', '37', '11', '7048', '1496', '0'), +('10', '38', '22', '9246', '0', '0'), +('10', '38', '22', '21518', '0', '0'), +('10', '38', '22', '10323', '0', '0'), +('10', '38', '22', '44492', '0', '0'), +('10', '38', '1', '14702', '5000', '0'), +('10', '38', '1', '14701', '4612', '0'), +('10', '38', '1', '30361', '2640', '0'), +('10', '38', '1', '14630', '1377', '0'), +('10', '38', '2', '10143', '7118', '0'), +('10', '38', '2', '30363', '3700', '0'), +('10', '38', '2', '2294', '2958', '0'), +('10', '38', '2', '2191', '2826', '0'), +('10', '38', '3', '11052', '6886', '0'), +('10', '38', '3', '4505', '3243', '0'), +('10', '38', '3', '14695', '3222', '0'), +('10', '38', '3', '2295', '1936', '0'), +('10', '38', '5', '14703', '8800', '0'), +('10', '38', '5', '27726', '5171', '0'), +('10', '38', '5', '14700', '4818', '0'), +('10', '38', '5', '68291', '4422', '0'), +('10', '38', '8', '1546', '12693', '0'), +('10', '38', '8', '11603', '12442', '0'), +('10', '38', '8', '2349', '3554', '0'), +('10', '38', '8', '11621', '3521', '0'), +('10', '38', '6', '27728', '6469', '0'), +('10', '38', '6', '1557', '5310', '0'), +('10', '38', '6', '1904', '3703', '0'), +('10', '38', '6', '1401', '2924', '0'), +('10', '38', '17', '2285', '11203', '0'), +('10', '38', '17', '4872', '9244', '0'), +('10', '38', '17', '4342', '4717', '0'), +('10', '38', '17', '2405', '2562', '0'), +('10', '38', '7', '2289', '3166', '0'), +('10', '38', '7', '1362', '3124', '0'), +('10', '38', '7', '1321', '1746', '0'), +('10', '38', '7', '71303', '1602', '0'), +('10', '38', '9', '27727', '7337', '0'), +('10', '38', '9', '2290', '2955', '0'), +('10', '38', '9', '14650', '2412', '0'), +('10', '38', '9', '4874', '2350', '0'), +('10', '38', '15', '10366', '4805', '0'), +('10', '38', '15', '10151', '4200', '0'), +('10', '38', '15', '27730', '3845', '0'), +('10', '38', '15', '10163', '3800', '0'), +('10', '38', '20', '11666', '12519', '0'), +('10', '38', '20', '27727', '7337', '0'), +('10', '38', '20', '2742', '5755', '0'), +('10', '38', '20', '1543', '5425', '0'), +('10', '38', '12', '20655', '4657', '0'), +('10', '38', '12', '2923', '4324', '0'), +('10', '38', '12', '2291', '3830', '0'), +('10', '38', '12', '4835', '3444', '0'), +('10', '38', '18', '2461', '2778', '0'), +('10', '38', '18', '2292', '2677', '0'), +('10', '38', '18', '4876', '2596', '0'), +('10', '38', '18', '4410', '1642', '0'), +('10', '38', '19', '2293', '4612', '0'), +('10', '38', '19', '4407', '4192', '0'), +('10', '38', '19', '68239', '4051', '0'), +('10', '38', '19', '4837', '3319', '0'), +('10', '38', '13', '27729', '14429', '0'), +('10', '38', '13', '11694', '14388', '0'), +('10', '38', '13', '10333', '6800', '0'), +('10', '38', '13', '13730', '4885', '0'), +('10', '38', '14', '10335', '8252', '0'), +('10', '38', '14', '12802', '7374', '0'), +('10', '38', '14', '10333', '6800', '0'), +('10', '38', '14', '13991', '5590', '0'), +('10', '38', '11', '9246', '4602', '0'), +('10', '38', '11', '7051', '4451', '0'), +('10', '38', '11', '14762', '3204', '0'), +('10', '38', '11', '7048', '1532', '0'), +('10', '39', '22', '9246', '0', '0'), +('10', '39', '22', '21518', '0', '0'), +('10', '39', '22', '10323', '0', '0'), +('10', '39', '22', '44492', '0', '0'), +('10', '39', '1', '14702', '5000', '0'), +('10', '39', '1', '14701', '4612', '0'), +('10', '39', '1', '30361', '2640', '0'), +('10', '39', '1', '14630', '1413', '0'), +('10', '39', '2', '10143', '7118', '0'), +('10', '39', '2', '30363', '3700', '0'), +('10', '39', '2', '2294', '2982', '0'), +('10', '39', '2', '2191', '2898', '0'), +('10', '39', '3', '11052', '7067', '0'), +('10', '39', '3', '4505', '3328', '0'), +('10', '39', '3', '14695', '3306', '0'), +('10', '39', '3', '2295', '1960', '0'), +('10', '39', '5', '14703', '8800', '0'), +('10', '39', '5', '27726', '5267', '0'), +('10', '39', '5', '14700', '4818', '0'), +('10', '39', '5', '68291', '4471', '0'), +('10', '39', '8', '1546', '12814', '0'), +('10', '39', '8', '11603', '12550', '0'), +('10', '39', '8', '2349', '3554', '0'), +('10', '39', '8', '11621', '3521', '0'), +('10', '39', '6', '27728', '6614', '0'), +('10', '39', '6', '1557', '5310', '0'), +('10', '39', '6', '1904', '3799', '0'), +('10', '39', '6', '1401', '2924', '0'), +('10', '39', '17', '2285', '11251', '0'), +('10', '39', '17', '4872', '9418', '0'), +('10', '39', '17', '4342', '4838', '0'), +('10', '39', '17', '2405', '2628', '0'), +('10', '39', '7', '2289', '3215', '0'), +('10', '39', '7', '1362', '3124', '0'), +('10', '39', '7', '1321', '1746', '0'), +('10', '39', '7', '71303', '1638', '0'), +('10', '39', '9', '27727', '7398', '0'), +('10', '39', '9', '2290', '3019', '0'), +('10', '39', '9', '14650', '2412', '0'), +('10', '39', '9', '4874', '2410', '0'), +('10', '39', '15', '10366', '4805', '0'), +('10', '39', '15', '10151', '4200', '0'), +('10', '39', '15', '27730', '3930', '0'), +('10', '39', '15', '10163', '3800', '0'), +('10', '39', '20', '11666', '12532', '0'), +('10', '39', '20', '27727', '7398', '0'), +('10', '39', '20', '2742', '5773', '0'), +('10', '39', '20', '1543', '5546', '0'), +('10', '39', '12', '20655', '4685', '0'), +('10', '39', '12', '2923', '4324', '0'), +('10', '39', '12', '2291', '3830', '0'), +('10', '39', '12', '4835', '3453', '0'), +('10', '39', '18', '2461', '2827', '0'), +('10', '39', '18', '2292', '2726', '0'), +('10', '39', '18', '4876', '2656', '0'), +('10', '39', '18', '4410', '1642', '0'), +('10', '39', '19', '2293', '4648', '0'), +('10', '39', '19', '4407', '4300', '0'), +('10', '39', '19', '68239', '4087', '0'), +('10', '39', '19', '4837', '3379', '0'), +('10', '39', '13', '27729', '14598', '0'), +('10', '39', '13', '11694', '14569', '0'), +('10', '39', '13', '10333', '6800', '0'), +('10', '39', '13', '13730', '5003', '0'), +('10', '39', '14', '10335', '8469', '0'), +('10', '39', '14', '12802', '7434', '0'), +('10', '39', '14', '10333', '6800', '0'), +('10', '39', '14', '13991', '5711', '0'), +('10', '39', '11', '9246', '4723', '0'), +('10', '39', '11', '7051', '4512', '0'), +('10', '39', '11', '14762', '3204', '0'), +('10', '39', '11', '7048', '1568', '0'), +('10', '40', '22', '9246', '0', '0'), +('10', '40', '22', '21518', '0', '0'), +('10', '40', '22', '10323', '0', '0'), +('10', '40', '22', '44492', '0', '0'), +('10', '40', '1', '14702', '5000', '0'), +('10', '40', '1', '14701', '4612', '0'), +('10', '40', '1', '30361', '2640', '0'), +('10', '40', '1', '14630', '1450', '0'), +('10', '40', '2', '10143', '7118', '0'), +('10', '40', '2', '30363', '3700', '0'), +('10', '40', '2', '2294', '3006', '0'), +('10', '40', '2', '2191', '2970', '0'), +('10', '40', '3', '11052', '7248', '0'), +('10', '40', '3', '4505', '3413', '0'), +('10', '40', '3', '14695', '3391', '0'), +('10', '40', '3', '2295', '1985', '0'), +('10', '40', '5', '14703', '8800', '0'), +('10', '40', '5', '27726', '5364', '0'), +('10', '40', '5', '14700', '4818', '0'), +('10', '40', '5', '68291', '4519', '0'), +('10', '40', '8', '1546', '12935', '0'), +('10', '40', '8', '11603', '12659', '0'), +('10', '40', '8', '2349', '3554', '0'), +('10', '40', '8', '11621', '3521', '0'), +('10', '40', '6', '27728', '6759', '0'), +('10', '40', '6', '1557', '5310', '0'), +('10', '40', '6', '1904', '3896', '0'), +('10', '40', '6', '1401', '2924', '0'), +('10', '40', '17', '2285', '11299', '0'), +('10', '40', '17', '4872', '9591', '0'), +('10', '40', '17', '4342', '4959', '0'), +('10', '40', '17', '2405', '2694', '0'), +('10', '40', '7', '2289', '3263', '0'), +('10', '40', '7', '1362', '3124', '0'), +('10', '40', '7', '1321', '1746', '0'), +('10', '40', '7', '71303', '1675', '0'), +('10', '40', '9', '27727', '7458', '0'), +('10', '40', '9', '2290', '3083', '0'), +('10', '40', '9', '4874', '2470', '0'), +('10', '40', '9', '4406', '2444', '0'), +('10', '40', '15', '10366', '4805', '0'), +('10', '40', '15', '10151', '4200', '0'), +('10', '40', '15', '27730', '4014', '0'), +('10', '40', '15', '10163', '3800', '0'), +('10', '40', '20', '11666', '12544', '0'), +('10', '40', '20', '27727', '7458', '0'), +('10', '40', '20', '2742', '5791', '0'), +('10', '40', '20', '1543', '5667', '0'), +('10', '40', '12', '20655', '4713', '0'), +('10', '40', '12', '2923', '4324', '0'), +('10', '40', '12', '2291', '3830', '0'), +('10', '40', '12', '4835', '3462', '0'), +('10', '40', '18', '2461', '2875', '0'), +('10', '40', '18', '2292', '2774', '0'), +('10', '40', '18', '4876', '2717', '0'), +('10', '40', '18', '4410', '1642', '0'), +('10', '40', '19', '2293', '4685', '0'), +('10', '40', '19', '4407', '4409', '0'), +('10', '40', '19', '68239', '4123', '0'), +('10', '40', '19', '4837', '3440', '0'), +('10', '40', '13', '27729', '14767', '0'), +('10', '40', '13', '11694', '14750', '0'), +('10', '40', '13', '10333', '6800', '0'), +('10', '40', '13', '13730', '5121', '0'), +('10', '40', '14', '10335', '8687', '0'), +('10', '40', '14', '12802', '7495', '0'), +('10', '40', '14', '10333', '6800', '0'), +('10', '40', '14', '13991', '5832', '0'), +('10', '40', '11', '9246', '4844', '0'), +('10', '40', '11', '7051', '4572', '0'), +('10', '40', '11', '14762', '3204', '0'), +('10', '40', '11', '7048', '1604', '0'), +('10', '41', '22', '9246', '0', '0'), +('10', '41', '22', '21518', '0', '0'), +('10', '41', '22', '10323', '0', '0'), +('10', '41', '22', '44492', '0', '0'), +('10', '41', '1', '14702', '5000', '0'), +('10', '41', '1', '14701', '4612', '0'), +('10', '41', '1', '30361', '2640', '0'), +('10', '41', '1', '14630', '1486', '0'), +('10', '41', '2', '10143', '7118', '0'), +('10', '41', '2', '30363', '3700', '0'), +('10', '41', '2', '2191', '3043', '0'), +('10', '41', '2', '2294', '3030', '0'), +('10', '41', '3', '11052', '7429', '0'), +('10', '41', '3', '4505', '3497', '0'), +('10', '41', '3', '14695', '3475', '0'), +('10', '41', '3', '2295', '2009', '0'), +('10', '41', '5', '14703', '8800', '0'), +('10', '41', '5', '27726', '5461', '0'), +('10', '41', '5', '14700', '4818', '0'), +('10', '41', '5', '68291', '4567', '0'), +('10', '41', '8', '1546', '13055', '0'), +('10', '41', '8', '11603', '12768', '0'), +('10', '41', '8', '2349', '3554', '0'), +('10', '41', '8', '11621', '3521', '0'), +('10', '41', '6', '27728', '6904', '0'), +('10', '41', '6', '1557', '5310', '0'), +('10', '41', '6', '1904', '3992', '0'), +('10', '41', '6', '1401', '2924', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '41', '17', '2285', '11348', '0'), +('10', '41', '17', '4872', '9764', '0'), +('10', '41', '17', '4342', '5080', '0'), +('10', '41', '17', '2405', '2760', '0'), +('10', '41', '7', '2289', '3311', '0'), +('10', '41', '7', '1362', '3124', '0'), +('10', '41', '7', '1321', '1746', '0'), +('10', '41', '7', '71303', '1711', '0'), +('10', '41', '9', '27727', '7519', '0'), +('10', '41', '9', '2290', '3147', '0'), +('10', '41', '9', '4874', '2531', '0'), +('10', '41', '9', '4406', '2504', '0'), +('10', '41', '15', '10366', '4805', '0'), +('10', '41', '15', '10151', '4200', '0'), +('10', '41', '15', '27730', '4099', '0'), +('10', '41', '15', '10163', '3800', '0'), +('10', '41', '20', '11666', '12557', '0'), +('10', '41', '20', '27727', '7519', '0'), +('10', '41', '20', '2742', '5809', '0'), +('10', '41', '20', '1543', '5787', '0'), +('10', '41', '12', '20655', '4741', '0'), +('10', '41', '12', '2923', '4324', '0'), +('10', '41', '12', '2291', '3830', '0'), +('10', '41', '12', '4835', '3471', '0'), +('10', '41', '18', '2461', '2923', '0'), +('10', '41', '18', '2292', '2822', '0'), +('10', '41', '18', '4876', '2777', '0'), +('10', '41', '18', '4410', '1642', '0'), +('10', '41', '19', '2293', '4721', '0'), +('10', '41', '19', '4407', '4518', '0'), +('10', '41', '19', '68239', '4159', '0'), +('10', '41', '19', '4837', '3500', '0'), +('10', '41', '13', '27729', '14936', '0'), +('10', '41', '13', '11694', '14932', '0'), +('10', '41', '13', '10333', '6800', '0'), +('10', '41', '13', '13730', '5239', '0'), +('10', '41', '14', '10335', '8904', '0'), +('10', '41', '14', '12802', '7555', '0'), +('10', '41', '14', '10333', '6800', '0'), +('10', '41', '14', '13991', '5953', '0'), +('10', '41', '11', '9246', '4965', '0'), +('10', '41', '11', '7051', '4632', '0'), +('10', '41', '11', '14762', '3204', '0'), +('10', '41', '11', '7048', '1641', '0'), +('10', '42', '22', '9246', '0', '0'), +('10', '42', '22', '21518', '0', '0'), +('10', '42', '22', '10323', '0', '0'), +('10', '42', '22', '44492', '0', '0'), +('10', '42', '1', '14702', '5000', '0'), +('10', '42', '1', '14701', '4612', '0'), +('10', '42', '1', '30361', '2640', '0'), +('10', '42', '1', '14630', '1522', '0'), +('10', '42', '2', '10143', '7118', '0'), +('10', '42', '2', '30363', '3700', '0'), +('10', '42', '2', '2191', '3115', '0'), +('10', '42', '2', '2294', '3055', '0'), +('10', '42', '3', '11052', '7610', '0'), +('10', '42', '3', '4505', '3582', '0'), +('10', '42', '3', '14695', '3560', '0'), +('10', '42', '3', '14692', '2034', '0'), +('10', '42', '5', '14703', '8800', '0'), +('10', '42', '5', '27726', '5557', '0'), +('10', '42', '5', '14700', '4818', '0'), +('10', '42', '5', '68291', '4616', '0'), +('10', '42', '8', '1546', '13176', '0'), +('10', '42', '8', '11603', '12877', '0'), +('10', '42', '8', '2349', '3554', '0'), +('10', '42', '8', '11621', '3521', '0'), +('10', '42', '6', '27728', '7049', '0'), +('10', '42', '6', '1557', '5310', '0'), +('10', '42', '6', '1904', '4089', '0'), +('10', '42', '6', '1401', '2924', '0'), +('10', '42', '17', '2285', '11396', '0'), +('10', '42', '17', '4872', '9938', '0'), +('10', '42', '17', '4342', '5200', '0'), +('10', '42', '17', '2405', '2826', '0'), +('10', '42', '7', '2289', '3360', '0'), +('10', '42', '7', '1362', '3124', '0'), +('10', '42', '7', '71303', '1747', '0'), +('10', '42', '7', '1321', '1746', '0'), +('10', '42', '9', '27727', '7579', '0'), +('10', '42', '9', '2290', '3211', '0'), +('10', '42', '9', '4874', '2591', '0'), +('10', '42', '9', '4406', '2565', '0'), +('10', '42', '15', '10366', '4805', '0'), +('10', '42', '15', '10151', '4200', '0'), +('10', '42', '15', '27730', '4184', '0'), +('10', '42', '15', '10163', '3800', '0'), +('10', '42', '20', '11666', '12570', '0'), +('10', '42', '20', '27727', '7579', '0'), +('10', '42', '20', '1543', '5908', '0'), +('10', '42', '20', '2742', '5827', '0'), +('10', '42', '12', '20655', '4768', '0'), +('10', '42', '12', '2923', '4324', '0'), +('10', '42', '12', '2291', '3830', '0'), +('10', '42', '12', '4835', '3480', '0'), +('10', '42', '18', '2461', '2972', '0'), +('10', '42', '18', '2292', '2871', '0'), +('10', '42', '18', '4876', '2837', '0'), +('10', '42', '18', '4410', '1642', '0'), +('10', '42', '19', '2293', '4757', '0'), +('10', '42', '19', '4407', '4626', '0'), +('10', '42', '19', '68239', '4196', '0'), +('10', '42', '19', '4837', '3561', '0'), +('10', '42', '13', '11694', '15113', '0'), +('10', '42', '13', '27729', '15105', '0'), +('10', '42', '13', '10333', '6800', '0'), +('10', '42', '13', '13730', '5357', '0'), +('10', '42', '14', '10335', '9122', '0'), +('10', '42', '14', '12802', '7615', '0'), +('10', '42', '14', '10333', '6800', '0'), +('10', '42', '14', '13991', '6074', '0'), +('10', '42', '11', '9246', '5086', '0'), +('10', '42', '11', '7051', '4693', '0'), +('10', '42', '11', '14762', '3204', '0'), +('10', '42', '11', '7048', '1677', '0'), +('10', '43', '22', '9246', '0', '0'), +('10', '43', '22', '21518', '0', '0'), +('10', '43', '22', '10323', '0', '0'), +('10', '43', '22', '44492', '0', '0'), +('10', '43', '1', '14702', '5000', '0'), +('10', '43', '1', '14701', '4612', '0'), +('10', '43', '1', '30361', '2640', '0'), +('10', '43', '1', '14630', '1558', '0'), +('10', '43', '2', '10143', '7118', '0'), +('10', '43', '2', '30363', '3700', '0'), +('10', '43', '2', '2191', '3188', '0'), +('10', '43', '2', '2294', '3079', '0'), +('10', '43', '3', '11052', '7792', '0'), +('10', '43', '3', '4505', '3666', '0'), +('10', '43', '3', '14695', '3645', '0'), +('10', '43', '3', '14692', '2083', '0'), +('10', '43', '5', '14703', '8800', '0'), +('10', '43', '5', '27726', '5654', '0'), +('10', '43', '5', '14700', '4818', '0'), +('10', '43', '5', '68291', '4664', '0'), +('10', '43', '8', '1546', '13297', '0'), +('10', '43', '8', '11603', '12985', '0'), +('10', '43', '8', '2349', '3554', '0'), +('10', '43', '8', '11621', '3521', '0'), +('10', '43', '6', '27728', '7194', '0'), +('10', '43', '6', '1557', '5310', '0'), +('10', '43', '6', '1904', '4186', '0'), +('10', '43', '6', '1401', '2924', '0'), +('10', '43', '17', '2285', '11444', '0'), +('10', '43', '17', '4872', '10111', '0'), +('10', '43', '17', '4342', '5321', '0'), +('10', '43', '17', '2405', '2891', '0'), +('10', '43', '7', '2289', '3408', '0'), +('10', '43', '7', '1362', '3124', '0'), +('10', '43', '7', '71303', '1783', '0'), +('10', '43', '7', '1321', '1746', '0'), +('10', '43', '9', '27727', '7639', '0'), +('10', '43', '9', '2290', '3275', '0'), +('10', '43', '9', '4874', '2652', '0'), +('10', '43', '9', '4406', '2625', '0'), +('10', '43', '15', '10366', '4805', '0'), +('10', '43', '15', '27730', '4268', '0'), +('10', '43', '15', '10151', '4200', '0'), +('10', '43', '15', '10163', '3800', '0'), +('10', '43', '20', '11666', '12582', '0'), +('10', '43', '20', '27727', '7639', '0'), +('10', '43', '20', '1543', '6029', '0'), +('10', '43', '20', '2742', '5846', '0'), +('10', '43', '12', '20655', '4796', '0'), +('10', '43', '12', '2923', '4324', '0'), +('10', '43', '12', '2291', '3830', '0'), +('10', '43', '12', '4835', '3489', '0'), +('10', '43', '18', '2461', '3020', '0'), +('10', '43', '18', '2292', '2919', '0'), +('10', '43', '18', '4876', '2898', '0'), +('10', '43', '18', '4410', '1642', '0'), +('10', '43', '19', '2293', '4793', '0'), +('10', '43', '19', '4407', '4735', '0'), +('10', '43', '19', '68239', '4232', '0'), +('10', '43', '19', '4837', '3621', '0'), +('10', '43', '13', '11694', '15294', '0'), +('10', '43', '13', '27729', '15274', '0'), +('10', '43', '13', '10333', '6800', '0'), +('10', '43', '13', '13730', '5474', '0'), +('10', '43', '14', '10335', '9339', '0'), +('10', '43', '14', '12802', '7676', '0'), +('10', '43', '14', '10333', '6800', '0'), +('10', '43', '14', '13991', '6194', '0'), +('10', '43', '11', '9246', '5206', '0'), +('10', '43', '11', '7051', '4753', '0'), +('10', '43', '11', '14762', '3204', '0'), +('10', '43', '11', '7048', '1713', '0'), +('10', '44', '22', '9246', '0', '0'), +('10', '44', '22', '21518', '0', '0'), +('10', '44', '22', '10323', '0', '0'), +('10', '44', '22', '44492', '0', '0'), +('10', '44', '1', '14702', '5000', '0'), +('10', '44', '1', '14701', '4612', '0'), +('10', '44', '1', '30361', '2640', '0'), +('10', '44', '1', '14630', '1595', '0'), +('10', '44', '2', '10143', '7118', '0'), +('10', '44', '2', '30363', '3700', '0'), +('10', '44', '2', '2191', '3260', '0'), +('10', '44', '2', '2294', '3103', '0'), +('10', '44', '3', '11052', '7973', '0'), +('10', '44', '3', '4505', '3751', '0'), +('10', '44', '3', '14695', '3729', '0'), +('10', '44', '3', '14692', '2131', '0'), +('10', '44', '5', '14703', '8800', '0'), +('10', '44', '5', '27726', '5750', '0'), +('10', '44', '5', '14700', '4818', '0'), +('10', '44', '5', '68291', '4712', '0'), +('10', '44', '8', '1546', '13418', '0'), +('10', '44', '8', '11603', '13094', '0'), +('10', '44', '8', '2349', '3554', '0'), +('10', '44', '8', '11621', '3521', '0'), +('10', '44', '6', '27728', '7339', '0'), +('10', '44', '6', '1557', '5310', '0'), +('10', '44', '6', '1904', '4282', '0'), +('10', '44', '6', '1401', '2924', '0'), +('10', '44', '17', '2285', '11493', '0'), +('10', '44', '17', '4872', '10284', '0'), +('10', '44', '17', '4342', '5442', '0'), +('10', '44', '17', '2405', '2957', '0'), +('10', '44', '7', '2289', '3456', '0'), +('10', '44', '7', '1362', '3124', '0'), +('10', '44', '7', '71303', '1820', '0'), +('10', '44', '7', '1321', '1746', '0'), +('10', '44', '9', '27727', '7700', '0'), +('10', '44', '9', '2290', '3339', '0'), +('10', '44', '9', '4874', '2712', '0'), +('10', '44', '9', '4406', '2685', '0'), +('10', '44', '15', '10366', '4805', '0'), +('10', '44', '15', '27730', '4353', '0'), +('10', '44', '15', '10151', '4200', '0'), +('10', '44', '15', '10163', '3800', '0'), +('10', '44', '20', '11666', '12595', '0'), +('10', '44', '20', '27727', '7700', '0'), +('10', '44', '20', '1543', '6150', '0'), +('10', '44', '20', '2742', '5864', '0'), +('10', '44', '12', '20655', '4824', '0'), +('10', '44', '12', '2923', '4324', '0'), +('10', '44', '12', '2291', '3830', '0'), +('10', '44', '12', '4835', '3498', '0'), +('10', '44', '18', '2461', '3068', '0'), +('10', '44', '18', '2292', '2967', '0'), +('10', '44', '18', '4876', '2958', '0'), +('10', '44', '18', '4410', '1642', '0'), +('10', '44', '19', '4407', '4844', '0'), +('10', '44', '19', '2293', '4830', '0'), +('10', '44', '19', '68239', '4268', '0'), +('10', '44', '19', '4837', '3681', '0'), +('10', '44', '13', '11694', '15475', '0'), +('10', '44', '13', '27729', '15443', '0'), +('10', '44', '13', '10333', '6800', '0'), +('10', '44', '13', '13730', '5592', '0'), +('10', '44', '14', '10335', '9556', '0'), +('10', '44', '14', '12802', '7736', '0'), +('10', '44', '14', '10333', '6800', '0'), +('10', '44', '14', '13991', '6315', '0'), +('10', '44', '11', '9246', '5327', '0'), +('10', '44', '11', '7051', '4814', '0'), +('10', '44', '11', '14762', '3204', '0'), +('10', '44', '11', '7048', '1749', '0'), +('10', '45', '22', '9246', '0', '0'), +('10', '45', '22', '21518', '0', '0'), +('10', '45', '22', '10323', '0', '0'), +('10', '45', '22', '44492', '0', '0'), +('10', '45', '1', '14702', '5000', '0'), +('10', '45', '1', '14701', '4612', '0'), +('10', '45', '1', '30361', '2640', '0'), +('10', '45', '1', '14630', '1631', '0'), +('10', '45', '2', '10143', '7118', '0'), +('10', '45', '2', '30363', '3700', '0'), +('10', '45', '2', '2191', '3333', '0'), +('10', '45', '2', '2294', '3127', '0'), +('10', '45', '3', '11052', '8154', '0'), +('10', '45', '3', '4505', '3835', '0'), +('10', '45', '3', '14695', '3814', '0'), +('10', '45', '3', '14692', '2179', '0'), +('10', '45', '5', '14703', '8800', '0'), +('10', '45', '5', '27726', '5847', '0'), +('10', '45', '5', '14700', '4818', '0'), +('10', '45', '5', '68291', '4761', '0'), +('10', '45', '8', '1546', '13539', '0'), +('10', '45', '8', '11603', '13203', '0'), +('10', '45', '8', '2349', '3554', '0'), +('10', '45', '8', '11621', '3521', '0'), +('10', '45', '6', '27728', '7484', '0'), +('10', '45', '6', '1557', '5310', '0'), +('10', '45', '6', '1904', '4379', '0'), +('10', '45', '6', '1401', '2924', '0'), +('10', '45', '17', '2285', '11541', '0'), +('10', '45', '17', '4872', '10458', '0'), +('10', '45', '17', '4342', '5563', '0'), +('10', '45', '17', '2405', '3023', '0'), +('10', '45', '7', '2289', '3505', '0'), +('10', '45', '7', '1362', '3124', '0'), +('10', '45', '7', '71303', '1856', '0'), +('10', '45', '7', '1321', '1746', '0'), +('10', '45', '9', '27727', '7760', '0'), +('10', '45', '9', '2290', '3403', '0'), +('10', '45', '9', '4874', '2772', '0'), +('10', '45', '9', '4406', '2746', '0'), +('10', '45', '15', '10366', '4805', '0'), +('10', '45', '15', '27730', '4437', '0'), +('10', '45', '15', '10151', '4200', '0'), +('10', '45', '15', '10163', '3800', '0'), +('10', '45', '20', '11666', '12608', '0'), +('10', '45', '20', '27727', '7760', '0'), +('10', '45', '20', '1543', '6271', '0'), +('10', '45', '20', '2742', '5882', '0'), +('10', '45', '12', '20655', '4852', '0'), +('10', '45', '12', '2923', '4324', '0'), +('10', '45', '12', '2291', '3830', '0'), +('10', '45', '12', '4835', '3507', '0'), +('10', '45', '18', '2461', '3117', '0'), +('10', '45', '18', '4876', '3019', '0'), +('10', '45', '18', '2292', '3015', '0'), +('10', '45', '18', '4410', '1642', '0'), +('10', '45', '19', '4407', '4953', '0'), +('10', '45', '19', '2293', '4866', '0'), +('10', '45', '19', '68239', '4304', '0'), +('10', '45', '19', '4837', '3742', '0'), +('10', '45', '13', '11694', '15656', '0'), +('10', '45', '13', '27729', '15612', '0'), +('10', '45', '13', '10333', '6800', '0'), +('10', '45', '13', '13730', '5710', '0'), +('10', '45', '14', '10335', '9774', '0'), +('10', '45', '14', '12802', '7797', '0'), +('10', '45', '14', '10333', '6800', '0'), +('10', '45', '14', '13991', '6436', '0'), +('10', '45', '11', '9246', '5448', '0'), +('10', '45', '11', '7051', '4874', '0'), +('10', '45', '11', '14762', '3204', '0'), +('10', '45', '11', '7048', '1786', '0'), +('10', '46', '22', '9246', '0', '0'), +('10', '46', '22', '21518', '0', '0'), +('10', '46', '22', '10323', '0', '0'), +('10', '46', '22', '44492', '0', '0'), +('10', '46', '1', '14702', '5000', '0'), +('10', '46', '1', '14701', '4612', '0'), +('10', '46', '1', '30361', '2640', '0'), +('10', '46', '1', '14630', '1667', '0'), +('10', '46', '2', '10143', '7118', '0'), +('10', '46', '2', '30363', '3700', '0'), +('10', '46', '2', '2191', '3405', '0'), +('10', '46', '2', '2294', '3151', '0'), +('10', '46', '3', '11052', '8335', '0'), +('10', '46', '3', '4505', '3920', '0'), +('10', '46', '3', '14695', '3898', '0'), +('10', '46', '3', '14692', '2228', '0'), +('10', '46', '5', '14703', '8800', '0'), +('10', '46', '5', '27726', '5944', '0'), +('10', '46', '5', '14700', '4818', '0'), +('10', '46', '5', '68291', '4809', '0'), +('10', '46', '8', '1546', '13659', '0'), +('10', '46', '8', '11603', '13312', '0'), +('10', '46', '8', '2349', '3554', '0'), +('10', '46', '8', '11621', '3521', '0'), +('10', '46', '6', '27728', '7629', '0'), +('10', '46', '6', '1557', '5310', '0'), +('10', '46', '6', '1904', '4476', '0'), +('10', '46', '6', '1401', '2924', '0'), +('10', '46', '17', '2285', '11589', '0'), +('10', '46', '17', '4872', '10631', '0'), +('10', '46', '17', '4342', '5684', '0'), +('10', '46', '17', '2405', '3089', '0'), +('10', '46', '7', '2289', '3553', '0'), +('10', '46', '7', '1362', '3124', '0'), +('10', '46', '7', '71303', '1892', '0'), +('10', '46', '7', '1321', '1746', '0'), +('10', '46', '9', '27727', '7821', '0'), +('10', '46', '9', '2290', '3467', '0'), +('10', '46', '9', '4874', '2833', '0'), +('10', '46', '9', '4406', '2806', '0'), +('10', '46', '15', '10366', '4805', '0'), +('10', '46', '15', '27730', '4522', '0'), +('10', '46', '15', '10151', '4200', '0'), +('10', '46', '15', '10163', '3800', '0'), +('10', '46', '20', '11666', '12620', '0'), +('10', '46', '20', '27727', '7821', '0'), +('10', '46', '20', '1543', '6391', '0'), +('10', '46', '20', '2742', '5900', '0'), +('10', '46', '12', '20655', '4880', '0'), +('10', '46', '12', '2923', '4324', '0'), +('10', '46', '12', '2291', '3830', '0'), +('10', '46', '12', '4835', '3516', '0'), +('10', '46', '18', '2461', '3165', '0'), +('10', '46', '18', '4876', '3079', '0'), +('10', '46', '18', '2292', '3064', '0'), +('10', '46', '18', '4410', '1642', '0'), +('10', '46', '19', '4407', '5061', '0'), +('10', '46', '19', '2293', '4902', '0'), +('10', '46', '19', '68239', '4340', '0'), +('10', '46', '19', '4837', '3802', '0'), +('10', '46', '13', '11694', '15838', '0'), +('10', '46', '13', '27729', '15781', '0'), +('10', '46', '13', '10333', '6800', '0'), +('10', '46', '13', '13730', '5828', '0'), +('10', '46', '14', '10335', '9991', '0'), +('10', '46', '14', '12802', '7857', '0'), +('10', '46', '14', '10333', '6800', '0'), +('10', '46', '14', '13991', '6557', '0'), +('10', '46', '11', '9246', '5569', '0'), +('10', '46', '11', '7051', '4934', '0'), +('10', '46', '11', '14762', '3204', '0'), +('10', '46', '11', '7048', '1822', '0'), +('10', '47', '22', '9246', '0', '0'), +('10', '47', '22', '21518', '0', '0'), +('10', '47', '22', '10323', '0', '0'), +('10', '47', '22', '44492', '0', '0'), +('10', '47', '1', '14702', '5000', '0'), +('10', '47', '1', '14701', '4612', '0'), +('10', '47', '1', '30361', '2640', '0'), +('10', '47', '1', '14630', '1703', '0'), +('10', '47', '2', '10143', '7118', '0'), +('10', '47', '2', '30363', '3700', '0'), +('10', '47', '2', '2191', '3478', '0'), +('10', '47', '2', '2294', '3175', '0'), +('10', '47', '3', '11052', '8516', '0'), +('10', '47', '3', '4505', '4005', '0'), +('10', '47', '3', '14695', '3983', '0'), +('10', '47', '3', '14692', '2276', '0'), +('10', '47', '5', '14703', '8800', '0'), +('10', '47', '5', '27726', '6040', '0'), +('10', '47', '5', '68291', '4857', '0'), +('10', '47', '5', '14700', '4818', '0'), +('10', '47', '8', '1546', '13780', '0'), +('10', '47', '8', '11603', '13420', '0'), +('10', '47', '8', '2349', '3554', '0'), +('10', '47', '8', '11621', '3521', '0'), +('10', '47', '6', '27728', '7774', '0'), +('10', '47', '6', '1557', '5310', '0'), +('10', '47', '6', '1904', '4572', '0'), +('10', '47', '6', '1401', '2924', '0'), +('10', '47', '17', '2285', '11637', '0'), +('10', '47', '17', '4872', '10804', '0'), +('10', '47', '17', '4342', '5804', '0'), +('10', '47', '17', '2405', '3155', '0'), +('10', '47', '7', '2289', '3601', '0'), +('10', '47', '7', '1362', '3124', '0'), +('10', '47', '7', '71303', '1928', '0'), +('10', '47', '7', '1321', '1746', '0'), +('10', '47', '9', '27727', '7881', '0'), +('10', '47', '9', '2290', '3531', '0'), +('10', '47', '9', '4874', '2893', '0'), +('10', '47', '9', '4406', '2867', '0'), +('10', '47', '15', '10366', '4805', '0'), +('10', '47', '15', '27730', '4606', '0'), +('10', '47', '15', '10151', '4200', '0'), +('10', '47', '15', '10163', '3800', '0'), +('10', '47', '20', '11666', '12633', '0'), +('10', '47', '20', '27727', '7881', '0'), +('10', '47', '20', '1543', '6512', '0'), +('10', '47', '20', '2742', '5918', '0'), +('10', '47', '12', '20655', '4907', '0'), +('10', '47', '12', '2923', '4324', '0'), +('10', '47', '12', '2291', '3830', '0'), +('10', '47', '12', '4835', '3525', '0'), +('10', '47', '18', '2461', '3213', '0'), +('10', '47', '18', '4876', '3139', '0'), +('10', '47', '18', '2292', '3112', '0'), +('10', '47', '18', '4410', '1642', '0'), +('10', '47', '19', '4407', '5170', '0'), +('10', '47', '19', '2293', '4938', '0'), +('10', '47', '19', '68239', '4377', '0'), +('10', '47', '19', '4837', '3863', '0'), +('10', '47', '13', '11694', '16019', '0'), +('10', '47', '13', '27729', '15951', '0'), +('10', '47', '13', '10333', '6800', '0'), +('10', '47', '13', '13730', '5945', '0'), +('10', '47', '14', '10335', '10209', '0'), +('10', '47', '14', '12802', '7917', '0'), +('10', '47', '14', '10333', '6800', '0'), +('10', '47', '14', '13991', '6678', '0'), +('10', '47', '11', '9246', '5690', '0'), +('10', '47', '11', '7051', '4995', '0'), +('10', '47', '11', '14762', '3204', '0'), +('10', '47', '11', '7048', '1858', '0'), +('10', '48', '22', '9246', '0', '0'), +('10', '48', '22', '21518', '0', '0'), +('10', '48', '22', '10323', '0', '0'), +('10', '48', '22', '44492', '0', '0'), +('10', '48', '1', '14702', '5000', '0'), +('10', '48', '1', '14701', '4612', '0'), +('10', '48', '1', '30361', '2640', '0'), +('10', '48', '1', '14630', '1740', '0'), +('10', '48', '2', '10143', '7118', '0'), +('10', '48', '2', '30363', '3700', '0'), +('10', '48', '2', '2191', '3550', '0'), +('10', '48', '2', '2294', '3200', '0'), +('10', '48', '3', '11052', '8698', '0'), +('10', '48', '3', '4505', '4089', '0'), +('10', '48', '3', '14695', '4067', '0'), +('10', '48', '3', '14692', '2324', '0'), +('10', '48', '5', '14703', '8800', '0'), +('10', '48', '5', '27726', '6137', '0'), +('10', '48', '5', '68291', '4906', '0'), +('10', '48', '5', '14700', '4818', '0'), +('10', '48', '8', '1546', '13901', '0'), +('10', '48', '8', '11603', '13529', '0'), +('10', '48', '8', '2349', '3554', '0'), +('10', '48', '8', '11621', '3521', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '48', '6', '27728', '7918', '0'), +('10', '48', '6', '1557', '5310', '0'), +('10', '48', '6', '1904', '4669', '0'), +('10', '48', '6', '1401', '2924', '0'), +('10', '48', '17', '2285', '11686', '0'), +('10', '48', '17', '4872', '10978', '0'), +('10', '48', '17', '4342', '5925', '0'), +('10', '48', '17', '2405', '3221', '0'), +('10', '48', '7', '2289', '3650', '0'), +('10', '48', '7', '1362', '3124', '0'), +('10', '48', '7', '71303', '1965', '0'), +('10', '48', '7', '1321', '1746', '0'), +('10', '48', '9', '27727', '7941', '0'), +('10', '48', '9', '2290', '3595', '0'), +('10', '48', '9', '4874', '2954', '0'), +('10', '48', '9', '4406', '2927', '0'), +('10', '48', '15', '10366', '4805', '0'), +('10', '48', '15', '27730', '4691', '0'), +('10', '48', '15', '10151', '4200', '0'), +('10', '48', '15', '10163', '3800', '0'), +('10', '48', '20', '11666', '12646', '0'), +('10', '48', '20', '27727', '7941', '0'), +('10', '48', '20', '1543', '6633', '0'), +('10', '48', '20', '2742', '5936', '0'), +('10', '48', '12', '20655', '4935', '0'), +('10', '48', '12', '2923', '4324', '0'), +('10', '48', '12', '2291', '3830', '0'), +('10', '48', '12', '4835', '3535', '0'), +('10', '48', '18', '2461', '3262', '0'), +('10', '48', '18', '4876', '3200', '0'), +('10', '48', '18', '2292', '3160', '0'), +('10', '48', '18', '4410', '1642', '0'), +('10', '48', '19', '4407', '5279', '0'), +('10', '48', '19', '2293', '4975', '0'), +('10', '48', '19', '68239', '4413', '0'), +('10', '48', '19', '4837', '3923', '0'), +('10', '48', '13', '11694', '16200', '0'), +('10', '48', '13', '27729', '16120', '0'), +('10', '48', '13', '10333', '6800', '0'), +('10', '48', '13', '13730', '6063', '0'), +('10', '48', '14', '10335', '10426', '0'), +('10', '48', '14', '12802', '7978', '0'), +('10', '48', '14', '10333', '6800', '0'), +('10', '48', '14', '13991', '6798', '0'), +('10', '48', '11', '9246', '5810', '0'), +('10', '48', '11', '7051', '5055', '0'), +('10', '48', '11', '14762', '3204', '0'), +('10', '48', '11', '7048', '1894', '0'), +('10', '49', '22', '9246', '0', '0'), +('10', '49', '22', '21518', '0', '0'), +('10', '49', '22', '10323', '0', '0'), +('10', '49', '22', '44492', '0', '0'), +('10', '49', '1', '14702', '5000', '0'), +('10', '49', '1', '14701', '4612', '0'), +('10', '49', '1', '30361', '2640', '0'), +('10', '49', '1', '14630', '1776', '0'), +('10', '49', '2', '10143', '7118', '0'), +('10', '49', '2', '30363', '3700', '0'), +('10', '49', '2', '2191', '3623', '0'), +('10', '49', '2', '2294', '3224', '0'), +('10', '49', '3', '11052', '8879', '0'), +('10', '49', '3', '4505', '4174', '0'), +('10', '49', '3', '14695', '4152', '0'), +('10', '49', '3', '14692', '2373', '0'), +('10', '49', '5', '14703', '8800', '0'), +('10', '49', '5', '27726', '6234', '0'), +('10', '49', '5', '68291', '4954', '0'), +('10', '49', '5', '14700', '4818', '0'), +('10', '49', '8', '1546', '14022', '0'), +('10', '49', '8', '11603', '13638', '0'), +('10', '49', '8', '2349', '3554', '0'), +('10', '49', '8', '11621', '3521', '0'), +('10', '49', '6', '27728', '8063', '0'), +('10', '49', '6', '1557', '5310', '0'), +('10', '49', '6', '1904', '4766', '0'), +('10', '49', '6', '1401', '2924', '0'), +('10', '49', '17', '2285', '11734', '0'), +('10', '49', '17', '4872', '11151', '0'), +('10', '49', '17', '4342', '6046', '0'), +('10', '49', '17', '2405', '3286', '0'), +('10', '49', '7', '2289', '3698', '0'), +('10', '49', '7', '1362', '3124', '0'), +('10', '49', '7', '71303', '2001', '0'), +('10', '49', '7', '10336', '1779', '0'), +('10', '49', '9', '27727', '8002', '0'), +('10', '49', '9', '2290', '3659', '0'), +('10', '49', '9', '4874', '3014', '0'), +('10', '49', '9', '4406', '2987', '0'), +('10', '49', '15', '10366', '4805', '0'), +('10', '49', '15', '27730', '4775', '0'), +('10', '49', '15', '10151', '4200', '0'), +('10', '49', '15', '10163', '3800', '0'), +('10', '49', '20', '11666', '12658', '0'), +('10', '49', '20', '27727', '8002', '0'), +('10', '49', '20', '1543', '6754', '0'), +('10', '49', '20', '2742', '5954', '0'), +('10', '49', '12', '20655', '4963', '0'), +('10', '49', '12', '2923', '4324', '0'), +('10', '49', '12', '2291', '3830', '0'), +('10', '49', '12', '4835', '3544', '0'), +('10', '49', '18', '2461', '3310', '0'), +('10', '49', '18', '4876', '3260', '0'), +('10', '49', '18', '2292', '3209', '0'), +('10', '49', '18', '4410', '1642', '0'), +('10', '49', '19', '4407', '5387', '0'), +('10', '49', '19', '2293', '5011', '0'), +('10', '49', '19', '68239', '4449', '0'), +('10', '49', '19', '4837', '3983', '0'), +('10', '49', '13', '11694', '16381', '0'), +('10', '49', '13', '27729', '16289', '0'), +('10', '49', '13', '10333', '6800', '0'), +('10', '49', '13', '13730', '6181', '0'), +('10', '49', '14', '10335', '10644', '0'), +('10', '49', '14', '12802', '8038', '0'), +('10', '49', '14', '13991', '6919', '0'), +('10', '49', '14', '10333', '6800', '0'), +('10', '49', '11', '9246', '5931', '0'), +('10', '49', '11', '7051', '5116', '0'), +('10', '49', '11', '14762', '3204', '0'), +('10', '49', '11', '7048', '1931', '0'), +('10', '50', '22', '9246', '0', '0'), +('10', '50', '22', '21518', '0', '0'), +('10', '50', '22', '10323', '0', '0'), +('10', '50', '22', '44492', '0', '0'), +('10', '50', '1', '14702', '5000', '0'), +('10', '50', '1', '14701', '4612', '0'), +('10', '50', '1', '30361', '2640', '0'), +('10', '50', '1', '14630', '1812', '0'), +('10', '50', '2', '10143', '7118', '0'), +('10', '50', '2', '30363', '3700', '0'), +('10', '50', '2', '2191', '3695', '0'), +('10', '50', '2', '2294', '3248', '0'), +('10', '50', '3', '11052', '9060', '0'), +('10', '50', '3', '4505', '4258', '0'), +('10', '50', '3', '14695', '4236', '0'), +('10', '50', '3', '14692', '2421', '0'), +('10', '50', '5', '14703', '8800', '0'), +('10', '50', '5', '27726', '6330', '0'), +('10', '50', '5', '68291', '5002', '0'), +('10', '50', '5', '14700', '4818', '0'), +('10', '50', '8', '1546', '14143', '0'), +('10', '50', '8', '11603', '13746', '0'), +('10', '50', '8', '2349', '3554', '0'), +('10', '50', '8', '11621', '3521', '0'), +('10', '50', '6', '27728', '8208', '0'), +('10', '50', '6', '1557', '5310', '0'), +('10', '50', '6', '1904', '4862', '0'), +('10', '50', '6', '1401', '2924', '0'), +('10', '50', '17', '2285', '11782', '0'), +('10', '50', '17', '4872', '11324', '0'), +('10', '50', '17', '4342', '6167', '0'), +('10', '50', '17', '2405', '3352', '0'), +('10', '50', '7', '2289', '3746', '0'), +('10', '50', '7', '1362', '3124', '0'), +('10', '50', '7', '71303', '2037', '0'), +('10', '50', '7', '10336', '1816', '0'), +('10', '50', '9', '27727', '8062', '0'), +('10', '50', '9', '2290', '3723', '0'), +('10', '50', '9', '4874', '3074', '0'), +('10', '50', '9', '4406', '3048', '0'), +('10', '50', '15', '27730', '4860', '0'), +('10', '50', '15', '10366', '4805', '0'), +('10', '50', '15', '10151', '4200', '0'), +('10', '50', '15', '10163', '3800', '0'), +('10', '50', '20', '11666', '12671', '0'), +('10', '50', '20', '27727', '8062', '0'), +('10', '50', '20', '1543', '6875', '0'), +('10', '50', '20', '2742', '5972', '0'), +('10', '50', '12', '20655', '4991', '0'), +('10', '50', '12', '2923', '4324', '0'), +('10', '50', '12', '2291', '3830', '0'), +('10', '50', '12', '4835', '3553', '0'), +('10', '50', '18', '2461', '3358', '0'), +('10', '50', '18', '4876', '3321', '0'), +('10', '50', '18', '2292', '3257', '0'), +('10', '50', '18', '4410', '1642', '0'), +('10', '50', '19', '4407', '5496', '0'), +('10', '50', '19', '2293', '5047', '0'), +('10', '50', '19', '68239', '4485', '0'), +('10', '50', '19', '4837', '4044', '0'), +('10', '50', '13', '11694', '16562', '0'), +('10', '50', '13', '27729', '16458', '0'), +('10', '50', '13', '10333', '6800', '0'), +('10', '50', '13', '13730', '6299', '0'), +('10', '50', '14', '10335', '10861', '0'), +('10', '50', '14', '12802', '8099', '0'), +('10', '50', '14', '13991', '7040', '0'), +('10', '50', '14', '10333', '6800', '0'), +('10', '50', '11', '9246', '6052', '0'), +('10', '50', '11', '7051', '5176', '0'), +('10', '50', '11', '14762', '3204', '0'), +('10', '50', '11', '7048', '1967', '0'), +('10', '51', '22', '9246', '0', '0'), +('10', '51', '22', '21518', '0', '0'), +('10', '51', '22', '10323', '0', '0'), +('10', '51', '22', '44492', '0', '0'), +('10', '51', '1', '14702', '5000', '0'), +('10', '51', '1', '14701', '4612', '0'), +('10', '51', '1', '30361', '2640', '0'), +('10', '51', '1', '14630', '1848', '0'), +('10', '51', '2', '10143', '7118', '0'), +('10', '51', '2', '2191', '3768', '0'), +('10', '51', '2', '30363', '3700', '0'), +('10', '51', '2', '2294', '3272', '0'), +('10', '51', '3', '11052', '9241', '0'), +('10', '51', '3', '4505', '4343', '0'), +('10', '51', '3', '14695', '4321', '0'), +('10', '51', '3', '14692', '2469', '0'), +('10', '51', '5', '14703', '8800', '0'), +('10', '51', '5', '27726', '6427', '0'), +('10', '51', '5', '68291', '5051', '0'), +('10', '51', '5', '14700', '4818', '0'), +('10', '51', '8', '1546', '14263', '0'), +('10', '51', '8', '11603', '13855', '0'), +('10', '51', '8', '2349', '3554', '0'), +('10', '51', '8', '11621', '3521', '0'), +('10', '51', '6', '27728', '8353', '0'), +('10', '51', '6', '1557', '5310', '0'), +('10', '51', '6', '1904', '4959', '0'), +('10', '51', '6', '1401', '2924', '0'), +('10', '51', '17', '2285', '11831', '0'), +('10', '51', '17', '4872', '11498', '0'), +('10', '51', '17', '4342', '6288', '0'), +('10', '51', '17', '2405', '3418', '0'), +('10', '51', '7', '2289', '3795', '0'), +('10', '51', '7', '1362', '3124', '0'), +('10', '51', '7', '71303', '2073', '0'), +('10', '51', '7', '10336', '1852', '0'), +('10', '51', '9', '27727', '8123', '0'), +('10', '51', '9', '2290', '3787', '0'), +('10', '51', '9', '4874', '3135', '0'), +('10', '51', '9', '4406', '3108', '0'), +('10', '51', '15', '27730', '4945', '0'), +('10', '51', '15', '10366', '4805', '0'), +('10', '51', '15', '10151', '4200', '0'), +('10', '51', '15', '10163', '3800', '0'), +('10', '51', '20', '11666', '12684', '0'), +('10', '51', '20', '27727', '8123', '0'), +('10', '51', '20', '1543', '6995', '0'), +('10', '51', '20', '2742', '5991', '0'), +('10', '51', '12', '20655', '5018', '0'), +('10', '51', '12', '2923', '4324', '0'), +('10', '51', '12', '2291', '3830', '0'), +('10', '51', '12', '4835', '3562', '0'), +('10', '51', '18', '2461', '3407', '0'), +('10', '51', '18', '4876', '3381', '0'), +('10', '51', '18', '2292', '3305', '0'), +('10', '51', '18', '4410', '1642', '0'), +('10', '51', '19', '4407', '5605', '0'), +('10', '51', '19', '2293', '5083', '0'), +('10', '51', '19', '68239', '4522', '0'), +('10', '51', '19', '4837', '4104', '0'), +('10', '51', '13', '11694', '16744', '0'), +('10', '51', '13', '27729', '16627', '0'), +('10', '51', '13', '10333', '6800', '0'), +('10', '51', '13', '13730', '6417', '0'), +('10', '51', '14', '10335', '11079', '0'), +('10', '51', '14', '12802', '8159', '0'), +('10', '51', '14', '13991', '7161', '0'), +('10', '51', '14', '10333', '6800', '0'), +('10', '51', '11', '9246', '6173', '0'), +('10', '51', '11', '7051', '5236', '0'), +('10', '51', '11', '14762', '3204', '0'), +('10', '51', '11', '7048', '2003', '0'), +('10', '52', '22', '9246', '0', '0'), +('10', '52', '22', '21518', '0', '0'), +('10', '52', '22', '10323', '0', '0'), +('10', '52', '22', '44492', '0', '0'), +('10', '52', '1', '14702', '5000', '0'), +('10', '52', '1', '14701', '4612', '0'), +('10', '52', '1', '30361', '2640', '0'), +('10', '52', '1', '14630', '1884', '0'), +('10', '52', '2', '10143', '7118', '0'), +('10', '52', '2', '2191', '3840', '0'), +('10', '52', '2', '30363', '3700', '0'), +('10', '52', '2', '2294', '3296', '0'), +('10', '52', '3', '11052', '9422', '0'), +('10', '52', '3', '4505', '4427', '0'), +('10', '52', '3', '14695', '4406', '0'), +('10', '52', '3', '14692', '2517', '0'), +('10', '52', '5', '14703', '8800', '0'), +('10', '52', '5', '27726', '6524', '0'), +('10', '52', '5', '68291', '5099', '0'), +('10', '52', '5', '14700', '4818', '0'), +('10', '52', '8', '1546', '14384', '0'), +('10', '52', '8', '11603', '13964', '0'), +('10', '52', '8', '2349', '3554', '0'), +('10', '52', '8', '11621', '3521', '0'), +('10', '52', '6', '27728', '8498', '0'), +('10', '52', '6', '1557', '5310', '0'), +('10', '52', '6', '1904', '5055', '0'), +('10', '52', '6', '1401', '2924', '0'), +('10', '52', '17', '2285', '11879', '0'), +('10', '52', '17', '4872', '11671', '0'), +('10', '52', '17', '4342', '6408', '0'), +('10', '52', '17', '2405', '3484', '0'), +('10', '52', '7', '2289', '3843', '0'), +('10', '52', '7', '1362', '3124', '0'), +('10', '52', '7', '71303', '2110', '0'), +('10', '52', '7', '10336', '1888', '0'), +('10', '52', '9', '27727', '8183', '0'), +('10', '52', '9', '2290', '3851', '0'), +('10', '52', '9', '4874', '3195', '0'), +('10', '52', '9', '4406', '3169', '0'), +('10', '52', '15', '27730', '5029', '0'), +('10', '52', '15', '10366', '4805', '0'), +('10', '52', '15', '10151', '4200', '0'), +('10', '52', '15', '10163', '3800', '0'), +('10', '52', '20', '11666', '12696', '0'), +('10', '52', '20', '27727', '8183', '0'), +('10', '52', '20', '1543', '7116', '0'), +('10', '52', '20', '2742', '6009', '0'), +('10', '52', '12', '20655', '5046', '0'), +('10', '52', '12', '2923', '4324', '0'), +('10', '52', '12', '2291', '3830', '0'), +('10', '52', '12', '4835', '3571', '0'), +('10', '52', '18', '2461', '3455', '0'), +('10', '52', '18', '4876', '3441', '0'), +('10', '52', '18', '2292', '3354', '0'), +('10', '52', '18', '4410', '1642', '0'), +('10', '52', '19', '4407', '5714', '0'), +('10', '52', '19', '2293', '5120', '0'), +('10', '52', '19', '68239', '4558', '0'), +('10', '52', '19', '4837', '4165', '0'), +('10', '52', '13', '11694', '16925', '0'), +('10', '52', '13', '27729', '16796', '0'), +('10', '52', '13', '10333', '6800', '0'), +('10', '52', '13', '13730', '6534', '0'), +('10', '52', '14', '10335', '11296', '0'), +('10', '52', '14', '12802', '8219', '0'), +('10', '52', '14', '13991', '7282', '0'), +('10', '52', '14', '10333', '6800', '0'), +('10', '52', '11', '9246', '6294', '0'), +('10', '52', '11', '7051', '5297', '0'), +('10', '52', '11', '14762', '3204', '0'), +('10', '52', '11', '7048', '2039', '0'), +('10', '53', '22', '9246', '0', '0'), +('10', '53', '22', '21518', '0', '0'), +('10', '53', '22', '10323', '0', '0'), +('10', '53', '22', '44492', '0', '0'), +('10', '53', '1', '14702', '5000', '0'), +('10', '53', '1', '14701', '4612', '0'), +('10', '53', '1', '30361', '2640', '0'), +('10', '53', '1', '14630', '1921', '0'), +('10', '53', '2', '10143', '7118', '0'), +('10', '53', '2', '2191', '3913', '0'), +('10', '53', '2', '30363', '3700', '0'), +('10', '53', '2', '2294', '3320', '0'), +('10', '53', '3', '11052', '9604', '0'), +('10', '53', '3', '4505', '4512', '0'), +('10', '53', '3', '14695', '4490', '0'), +('10', '53', '3', '14692', '2566', '0'), +('10', '53', '5', '14703', '8800', '0'), +('10', '53', '5', '27726', '6620', '0'), +('10', '53', '5', '68291', '5147', '0'), +('10', '53', '5', '14700', '4818', '0'), +('10', '53', '8', '1546', '14505', '0'), +('10', '53', '8', '11603', '14073', '0'), +('10', '53', '8', '2349', '3554', '0'), +('10', '53', '8', '11621', '3521', '0'), +('10', '53', '6', '27728', '8643', '0'), +('10', '53', '6', '1557', '5310', '0'), +('10', '53', '6', '1904', '5152', '0'), +('10', '53', '6', '1401', '2924', '0'), +('10', '53', '17', '2285', '11927', '0'), +('10', '53', '17', '4872', '11844', '0'), +('10', '53', '17', '4342', '6529', '0'), +('10', '53', '17', '2405', '3550', '0'), +('10', '53', '7', '2289', '3891', '0'), +('10', '53', '7', '1362', '3124', '0'), +('10', '53', '7', '71303', '2146', '0'), +('10', '53', '7', '10336', '1924', '0'), +('10', '53', '9', '27727', '8243', '0'), +('10', '53', '9', '2290', '3915', '0'), +('10', '53', '9', '4874', '3256', '0'), +('10', '53', '9', '4406', '3229', '0'), +('10', '53', '15', '27730', '5114', '0'), +('10', '53', '15', '10366', '4805', '0'), +('10', '53', '15', '10151', '4200', '0'), +('10', '53', '15', '14631', '3841', '0'), +('10', '53', '20', '11666', '12709', '0'), +('10', '53', '20', '27727', '8243', '0'), +('10', '53', '20', '1543', '7237', '0'), +('10', '53', '20', '2742', '6027', '0'), +('10', '53', '12', '20655', '5074', '0'), +('10', '53', '12', '2923', '4324', '0'), +('10', '53', '12', '2291', '3830', '0'), +('10', '53', '12', '4835', '3580', '0'), +('10', '53', '18', '2461', '3503', '0'), +('10', '53', '18', '4876', '3502', '0'), +('10', '53', '18', '2292', '3402', '0'), +('10', '53', '18', '4410', '1642', '0'), +('10', '53', '19', '4407', '5822', '0'), +('10', '53', '19', '2293', '5156', '0'), +('10', '53', '19', '68239', '4594', '0'), +('10', '53', '19', '4837', '4225', '0'), +('10', '53', '13', '11694', '17106', '0'), +('10', '53', '13', '27729', '16965', '0'), +('10', '53', '13', '10333', '6800', '0'), +('10', '53', '13', '13730', '6652', '0'), +('10', '53', '14', '10335', '11513', '0'), +('10', '53', '14', '12802', '8280', '0'), +('10', '53', '14', '13991', '7402', '0'), +('10', '53', '14', '10333', '6800', '0'), +('10', '53', '11', '9246', '6414', '0'), +('10', '53', '11', '7051', '5357', '0'), +('10', '53', '11', '14762', '3204', '0'), +('10', '53', '11', '7048', '2076', '0'), +('10', '54', '22', '9246', '0', '0'), +('10', '54', '22', '21518', '0', '0'), +('10', '54', '22', '10323', '0', '0'), +('10', '54', '22', '44492', '0', '0'), +('10', '54', '1', '14702', '5000', '0'), +('10', '54', '1', '14701', '4612', '0'), +('10', '54', '1', '30361', '2640', '0'), +('10', '54', '1', '14630', '1957', '0'), +('10', '54', '2', '10143', '7118', '0'), +('10', '54', '2', '2191', '3985', '0'), +('10', '54', '2', '30363', '3700', '0'), +('10', '54', '2', '2294', '3345', '0'), +('10', '54', '3', '11052', '9785', '0'), +('10', '54', '3', '4505', '4596', '0'), +('10', '54', '3', '14695', '4575', '0'), +('10', '54', '3', '14692', '2614', '0'), +('10', '54', '5', '14703', '8800', '0'), +('10', '54', '5', '27726', '6717', '0'), +('10', '54', '5', '68291', '5196', '0'), +('10', '54', '5', '14700', '4818', '0'), +('10', '54', '8', '1546', '14626', '0'), +('10', '54', '8', '11603', '14181', '0'), +('10', '54', '8', '2349', '3554', '0'), +('10', '54', '8', '11621', '3521', '0'), +('10', '54', '6', '27728', '8788', '0'), +('10', '54', '6', '1557', '5310', '0'), +('10', '54', '6', '1904', '5249', '0'), +('10', '54', '6', '1401', '2924', '0'), +('10', '54', '17', '4872', '12018', '0'), +('10', '54', '17', '2285', '11976', '0'), +('10', '54', '17', '4342', '6650', '0'), +('10', '54', '17', '2405', '3616', '0'), +('10', '54', '7', '2289', '3939', '0'), +('10', '54', '7', '1362', '3124', '0'), +('10', '54', '7', '71303', '2182', '0'), +('10', '54', '7', '10336', '1961', '0'), +('10', '54', '9', '27727', '8304', '0'), +('10', '54', '9', '2290', '3979', '0'), +('10', '54', '9', '4874', '3316', '0'), +('10', '54', '9', '4406', '3289', '0'), +('10', '54', '15', '27730', '5198', '0'), +('10', '54', '15', '10366', '4805', '0'), +('10', '54', '15', '10151', '4200', '0'), +('10', '54', '15', '14631', '3914', '0'), +('10', '54', '20', '11666', '12722', '0'), +('10', '54', '20', '27727', '8304', '0'), +('10', '54', '20', '1543', '7358', '0'), +('10', '54', '20', '2742', '6045', '0'), +('10', '54', '12', '20655', '5102', '0'), +('10', '54', '12', '2923', '4324', '0'), +('10', '54', '12', '2291', '3830', '0'), +('10', '54', '12', '4345', '3634', '0'), +('10', '54', '18', '4876', '3562', '0'), +('10', '54', '18', '2461', '3552', '0'), +('10', '54', '18', '2292', '3450', '0'), +('10', '54', '18', '4410', '1642', '0'), +('10', '54', '19', '4407', '5931', '0'), +('10', '54', '19', '2293', '5192', '0'), +('10', '54', '19', '68239', '4630', '0'), +('10', '54', '19', '4837', '4285', '0'), +('10', '54', '13', '11694', '17287', '0'), +('10', '54', '13', '27729', '17134', '0'), +('10', '54', '13', '10333', '6800', '0'), +('10', '54', '13', '13730', '6770', '0'), +('10', '54', '14', '10335', '11731', '0'), +('10', '54', '14', '12802', '8340', '0'), +('10', '54', '14', '13991', '7523', '0'), +('10', '54', '14', '9407', '6831', '0'), +('10', '54', '11', '9246', '6535', '0'), +('10', '54', '11', '7051', '5418', '0'), +('10', '54', '11', '14762', '3204', '0'), +('10', '54', '11', '7048', '2112', '0'), +('10', '55', '22', '9246', '0', '0'), +('10', '55', '22', '21518', '0', '0'), +('10', '55', '22', '10323', '0', '0'), +('10', '55', '22', '44492', '0', '0'), +('10', '55', '1', '14702', '5000', '0'), +('10', '55', '1', '14701', '4612', '0'), +('10', '55', '1', '30361', '2640', '0'), +('10', '55', '1', '14630', '1993', '0'), +('10', '55', '2', '10143', '7118', '0'), +('10', '55', '2', '2191', '4058', '0'), +('10', '55', '2', '30363', '3700', '0'), +('10', '55', '2', '4947', '3394', '0'), +('10', '55', '3', '11052', '9966', '0'), +('10', '55', '3', '4505', '4681', '0'), +('10', '55', '3', '14695', '4659', '0'), +('10', '55', '3', '14692', '2662', '0'), +('10', '55', '5', '14703', '8800', '0'), +('10', '55', '5', '27726', '6814', '0'), +('10', '55', '5', '68291', '5244', '0'), +('10', '55', '5', '14700', '4818', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '55', '8', '1546', '14747', '0'), +('10', '55', '8', '11603', '14290', '0'), +('10', '55', '8', '2349', '3554', '0'), +('10', '55', '8', '11621', '3521', '0'), +('10', '55', '6', '27728', '8933', '0'), +('10', '55', '6', '1904', '5345', '0'), +('10', '55', '6', '1557', '5310', '0'), +('10', '55', '6', '1401', '2924', '0'), +('10', '55', '17', '4872', '12191', '0'), +('10', '55', '17', '2285', '12024', '0'), +('10', '55', '17', '4342', '6771', '0'), +('10', '55', '17', '2405', '3681', '0'), +('10', '55', '7', '2289', '3988', '0'), +('10', '55', '7', '1362', '3124', '0'), +('10', '55', '7', '71303', '2218', '0'), +('10', '55', '7', '10336', '1997', '0'), +('10', '55', '9', '27727', '8364', '0'), +('10', '55', '9', '2290', '4043', '0'), +('10', '55', '9', '4874', '3376', '0'), +('10', '55', '9', '4406', '3350', '0'), +('10', '55', '15', '27730', '5283', '0'), +('10', '55', '15', '10366', '4805', '0'), +('10', '55', '15', '10151', '4200', '0'), +('10', '55', '15', '14631', '3986', '0'), +('10', '55', '20', '11666', '12734', '0'), +('10', '55', '20', '27727', '8364', '0'), +('10', '55', '20', '1543', '7479', '0'), +('10', '55', '20', '2742', '6063', '0'), +('10', '55', '12', '20655', '5130', '0'), +('10', '55', '12', '2923', '4324', '0'), +('10', '55', '12', '2291', '3830', '0'), +('10', '55', '12', '4345', '3694', '0'), +('10', '55', '18', '4876', '3623', '0'), +('10', '55', '18', '2461', '3600', '0'), +('10', '55', '18', '2292', '3499', '0'), +('10', '55', '18', '4410', '1642', '0'), +('10', '55', '19', '4407', '6040', '0'), +('10', '55', '19', '2293', '5228', '0'), +('10', '55', '19', '68239', '4667', '0'), +('10', '55', '19', '4837', '4346', '0'), +('10', '55', '13', '11694', '17468', '0'), +('10', '55', '13', '27729', '17304', '0'), +('10', '55', '13', '13730', '6888', '0'), +('10', '55', '13', '10333', '6800', '0'), +('10', '55', '14', '10335', '11948', '0'), +('10', '55', '14', '12802', '8401', '0'), +('10', '55', '14', '13991', '7644', '0'), +('10', '55', '14', '9407', '6952', '0'), +('10', '55', '11', '9246', '6656', '0'), +('10', '55', '11', '7051', '5478', '0'), +('10', '55', '11', '14762', '3204', '0'), +('10', '55', '11', '7048', '2148', '0'), +('10', '56', '22', '9246', '0', '0'), +('10', '56', '22', '21518', '0', '0'), +('10', '56', '22', '10323', '0', '0'), +('10', '56', '22', '44492', '0', '0'), +('10', '56', '1', '14702', '5000', '0'), +('10', '56', '1', '14701', '4612', '0'), +('10', '56', '1', '30361', '2640', '0'), +('10', '56', '1', '14630', '2029', '0'), +('10', '56', '2', '10143', '7118', '0'), +('10', '56', '2', '2191', '4130', '0'), +('10', '56', '2', '30363', '3700', '0'), +('10', '56', '2', '4947', '3455', '0'), +('10', '56', '3', '11052', '10147', '0'), +('10', '56', '3', '4505', '4766', '0'), +('10', '56', '3', '14695', '4744', '0'), +('10', '56', '3', '14692', '2711', '0'), +('10', '56', '5', '14703', '8800', '0'), +('10', '56', '5', '27726', '6910', '0'), +('10', '56', '5', '68291', '5292', '0'), +('10', '56', '5', '14700', '4818', '0'), +('10', '56', '8', '1546', '14867', '0'), +('10', '56', '8', '11603', '14399', '0'), +('10', '56', '8', '2349', '3554', '0'), +('10', '56', '8', '11621', '3521', '0'), +('10', '56', '6', '27728', '9078', '0'), +('10', '56', '6', '1904', '5442', '0'), +('10', '56', '6', '1557', '5310', '0'), +('10', '56', '6', '1401', '2924', '0'), +('10', '56', '17', '4872', '12365', '0'), +('10', '56', '17', '2285', '12072', '0'), +('10', '56', '17', '4342', '6892', '0'), +('10', '56', '17', '2405', '3747', '0'), +('10', '56', '7', '2289', '4036', '0'), +('10', '56', '7', '1362', '3124', '0'), +('10', '56', '7', '71303', '2255', '0'), +('10', '56', '7', '10336', '2033', '0'), +('10', '56', '9', '27727', '8425', '0'), +('10', '56', '9', '2290', '4107', '0'), +('10', '56', '9', '4874', '3437', '0'), +('10', '56', '9', '4406', '3410', '0'), +('10', '56', '15', '27730', '5367', '0'), +('10', '56', '15', '10366', '4805', '0'), +('10', '56', '15', '10151', '4200', '0'), +('10', '56', '15', '14631', '4059', '0'), +('10', '56', '20', '11666', '12747', '0'), +('10', '56', '20', '27727', '8425', '0'), +('10', '56', '20', '1543', '7599', '0'), +('10', '56', '20', '2742', '6081', '0'), +('10', '56', '12', '20655', '5157', '0'), +('10', '56', '12', '2923', '4324', '0'), +('10', '56', '12', '2291', '3830', '0'), +('10', '56', '12', '4345', '3755', '0'), +('10', '56', '18', '4876', '3683', '0'), +('10', '56', '18', '2461', '3648', '0'), +('10', '56', '18', '2292', '3547', '0'), +('10', '56', '18', '4410', '1642', '0'), +('10', '56', '19', '4407', '6149', '0'), +('10', '56', '19', '2293', '5264', '0'), +('10', '56', '19', '68239', '4703', '0'), +('10', '56', '19', '4837', '4406', '0'), +('10', '56', '13', '11694', '17650', '0'), +('10', '56', '13', '27729', '17473', '0'), +('10', '56', '13', '13730', '7005', '0'), +('10', '56', '13', '10333', '6800', '0'), +('10', '56', '14', '10335', '12166', '0'), +('10', '56', '14', '12802', '8461', '0'), +('10', '56', '14', '13991', '7765', '0'), +('10', '56', '14', '9407', '7073', '0'), +('10', '56', '11', '9246', '6777', '0'), +('10', '56', '11', '7051', '5538', '0'), +('10', '56', '11', '14762', '3204', '0'), +('10', '56', '11', '7048', '2184', '0'), +('10', '57', '22', '9246', '0', '0'), +('10', '57', '22', '21518', '0', '0'), +('10', '57', '22', '10323', '0', '0'), +('10', '57', '22', '44492', '0', '0'), +('10', '57', '1', '14702', '5000', '0'), +('10', '57', '1', '14701', '4612', '0'), +('10', '57', '1', '30361', '2640', '0'), +('10', '57', '1', '14630', '2066', '0'), +('10', '57', '2', '10143', '7118', '0'), +('10', '57', '2', '2191', '4203', '0'), +('10', '57', '2', '30363', '3700', '0'), +('10', '57', '2', '4947', '3515', '0'), +('10', '57', '3', '11052', '10328', '0'), +('10', '57', '3', '4505', '4850', '0'), +('10', '57', '3', '14695', '4828', '0'), +('10', '57', '3', '14692', '2759', '0'), +('10', '57', '5', '14703', '8800', '0'), +('10', '57', '5', '27726', '7007', '0'), +('10', '57', '5', '68291', '5340', '0'), +('10', '57', '5', '14700', '4818', '0'), +('10', '57', '8', '1546', '14988', '0'), +('10', '57', '8', '11603', '14507', '0'), +('10', '57', '8', '2349', '3554', '0'), +('10', '57', '8', '11621', '3521', '0'), +('10', '57', '6', '27728', '9223', '0'), +('10', '57', '6', '1904', '5539', '0'), +('10', '57', '6', '1557', '5310', '0'), +('10', '57', '6', '1401', '2924', '0'), +('10', '57', '17', '4872', '12538', '0'), +('10', '57', '17', '2285', '12121', '0'), +('10', '57', '17', '4342', '7012', '0'), +('10', '57', '17', '2405', '3813', '0'), +('10', '57', '7', '2289', '4084', '0'), +('10', '57', '7', '1362', '3124', '0'), +('10', '57', '7', '71303', '2291', '0'), +('10', '57', '7', '10336', '2069', '0'), +('10', '57', '9', '27727', '8485', '0'), +('10', '57', '9', '2290', '4171', '0'), +('10', '57', '9', '4874', '3497', '0'), +('10', '57', '9', '4406', '3471', '0'), +('10', '57', '15', '27730', '5452', '0'), +('10', '57', '15', '10366', '4805', '0'), +('10', '57', '15', '10151', '4200', '0'), +('10', '57', '15', '14631', '4131', '0'), +('10', '57', '20', '11666', '12760', '0'), +('10', '57', '20', '27727', '8485', '0'), +('10', '57', '20', '1543', '7720', '0'), +('10', '57', '20', '2742', '6099', '0'), +('10', '57', '12', '20655', '5185', '0'), +('10', '57', '12', '2923', '4324', '0'), +('10', '57', '12', '2291', '3830', '0'), +('10', '57', '12', '4345', '3815', '0'), +('10', '57', '18', '4876', '3743', '0'), +('10', '57', '18', '2461', '3697', '0'), +('10', '57', '18', '2292', '3595', '0'), +('10', '57', '18', '4410', '1642', '0'), +('10', '57', '19', '4407', '6257', '0'), +('10', '57', '19', '2293', '5301', '0'), +('10', '57', '19', '68239', '4739', '0'), +('10', '57', '19', '4837', '4467', '0'), +('10', '57', '13', '11694', '17831', '0'), +('10', '57', '13', '27729', '17642', '0'), +('10', '57', '13', '13730', '7123', '0'), +('10', '57', '13', '9246', '6898', '0'), +('10', '57', '14', '10335', '12383', '0'), +('10', '57', '14', '12802', '8521', '0'), +('10', '57', '14', '13991', '7886', '0'), +('10', '57', '14', '9407', '7194', '0'), +('10', '57', '11', '9246', '6898', '0'), +('10', '57', '11', '7051', '5599', '0'), +('10', '57', '11', '14762', '3204', '0'), +('10', '57', '11', '7048', '2221', '0'), +('10', '58', '22', '9246', '0', '0'), +('10', '58', '22', '21518', '0', '0'), +('10', '58', '22', '10323', '0', '0'), +('10', '58', '22', '44492', '0', '0'), +('10', '58', '1', '14702', '5000', '0'), +('10', '58', '1', '14701', '4612', '0'), +('10', '58', '1', '30361', '2640', '0'), +('10', '58', '1', '14630', '2102', '0'), +('10', '58', '2', '10143', '7118', '0'), +('10', '58', '2', '2191', '4275', '0'), +('10', '58', '2', '30363', '3700', '0'), +('10', '58', '2', '4947', '3576', '0'), +('10', '58', '3', '11052', '10510', '0'), +('10', '58', '3', '4505', '4935', '0'), +('10', '58', '3', '14695', '4913', '0'), +('10', '58', '3', '14692', '2807', '0'), +('10', '58', '5', '14703', '8800', '0'), +('10', '58', '5', '27726', '7103', '0'), +('10', '58', '5', '68291', '5389', '0'), +('10', '58', '5', '14700', '4818', '0'), +('10', '58', '8', '1546', '15109', '0'), +('10', '58', '8', '11603', '14616', '0'), +('10', '58', '8', '2349', '3554', '0'), +('10', '58', '8', '11621', '3521', '0'), +('10', '58', '6', '27728', '9368', '0'), +('10', '58', '6', '1904', '5635', '0'), +('10', '58', '6', '1557', '5310', '0'), +('10', '58', '6', '1401', '2924', '0'), +('10', '58', '17', '4872', '12711', '0'), +('10', '58', '17', '2285', '12169', '0'), +('10', '58', '17', '4342', '7133', '0'), +('10', '58', '17', '2405', '3879', '0'), +('10', '58', '7', '2289', '4133', '0'), +('10', '58', '7', '1362', '3124', '0'), +('10', '58', '7', '71303', '2327', '0'), +('10', '58', '7', '10336', '2106', '0'), +('10', '58', '9', '27727', '8545', '0'), +('10', '58', '9', '2290', '4235', '0'), +('10', '58', '9', '4874', '3558', '0'), +('10', '58', '9', '4406', '3531', '0'), +('10', '58', '15', '27730', '5536', '0'), +('10', '58', '15', '10366', '4805', '0'), +('10', '58', '15', '14631', '4204', '0'), +('10', '58', '15', '10151', '4200', '0'), +('10', '58', '20', '11666', '12773', '0'), +('10', '58', '20', '27727', '8545', '0'), +('10', '58', '20', '1543', '7841', '0'), +('10', '58', '20', '2742', '6117', '0'), +('10', '58', '12', '20655', '5213', '0'), +('10', '58', '12', '2923', '4324', '0'), +('10', '58', '12', '4345', '3876', '0'), +('10', '58', '12', '2291', '3830', '0'), +('10', '58', '18', '4876', '3804', '0'), +('10', '58', '18', '2461', '3745', '0'), +('10', '58', '18', '2292', '3644', '0'), +('10', '58', '18', '4410', '1642', '0'), +('10', '58', '19', '4407', '6366', '0'), +('10', '58', '19', '2293', '5337', '0'), +('10', '58', '19', '68239', '4775', '0'), +('10', '58', '19', '4837', '4527', '0'), +('10', '58', '13', '11694', '18012', '0'), +('10', '58', '13', '27729', '17811', '0'), +('10', '58', '13', '13730', '7241', '0'), +('10', '58', '13', '9246', '7018', '0'), +('10', '58', '14', '10335', '12601', '0'), +('10', '58', '14', '12802', '8582', '0'), +('10', '58', '14', '13991', '8006', '0'), +('10', '58', '14', '9407', '7314', '0'), +('10', '58', '11', '9246', '7018', '0'), +('10', '58', '11', '7051', '5659', '0'), +('10', '58', '11', '14762', '3204', '0'), +('10', '58', '11', '7048', '2257', '0'), +('10', '59', '22', '9246', '0', '0'), +('10', '59', '22', '21518', '0', '0'), +('10', '59', '22', '10323', '0', '0'), +('10', '59', '22', '44492', '0', '0'), +('10', '59', '1', '14702', '5000', '0'), +('10', '59', '1', '14701', '4612', '0'), +('10', '59', '1', '30361', '2640', '0'), +('10', '59', '1', '14630', '2138', '0'), +('10', '59', '2', '10143', '7118', '0'), +('10', '59', '2', '2191', '4348', '0'), +('10', '59', '2', '30363', '3700', '0'), +('10', '59', '2', '4947', '3636', '0'), +('10', '59', '3', '11052', '10691', '0'), +('10', '59', '3', '4505', '5019', '0'), +('10', '59', '3', '14695', '4997', '0'), +('10', '59', '3', '14692', '2856', '0'), +('10', '59', '5', '14703', '8800', '0'), +('10', '59', '5', '27726', '7200', '0'), +('10', '59', '5', '68291', '5437', '0'), +('10', '59', '5', '14700', '4818', '0'), +('10', '59', '8', '1546', '15230', '0'), +('10', '59', '8', '11603', '14725', '0'), +('10', '59', '8', '2349', '3554', '0'), +('10', '59', '8', '11621', '3521', '0'), +('10', '59', '6', '27728', '9513', '0'), +('10', '59', '6', '1904', '5732', '0'), +('10', '59', '6', '1557', '5310', '0'), +('10', '59', '6', '1401', '2924', '0'), +('10', '59', '17', '4872', '12885', '0'), +('10', '59', '17', '2285', '12217', '0'), +('10', '59', '17', '4342', '7254', '0'), +('10', '59', '17', '2405', '3945', '0'), +('10', '59', '7', '2289', '4181', '0'), +('10', '59', '7', '1362', '3124', '0'), +('10', '59', '7', '71303', '2363', '0'), +('10', '59', '7', '10336', '2142', '0'), +('10', '59', '9', '27727', '8606', '0'), +('10', '59', '9', '2290', '4299', '0'), +('10', '59', '9', '4874', '3618', '0'), +('10', '59', '9', '4406', '3591', '0'), +('10', '59', '15', '27730', '5621', '0'), +('10', '59', '15', '10366', '4805', '0'), +('10', '59', '15', '14631', '4276', '0'), +('10', '59', '15', '10151', '4200', '0'), +('10', '59', '20', '11666', '12785', '0'), +('10', '59', '20', '27727', '8606', '0'), +('10', '59', '20', '1543', '7962', '0'), +('10', '59', '20', '2742', '6136', '0'), +('10', '59', '12', '20655', '5241', '0'), +('10', '59', '12', '2923', '4324', '0'), +('10', '59', '12', '4345', '3936', '0'), +('10', '59', '12', '2291', '3830', '0'), +('10', '59', '18', '4876', '3864', '0'), +('10', '59', '18', '2461', '3793', '0'), +('10', '59', '18', '2292', '3692', '0'), +('10', '59', '18', '4410', '1642', '0'), +('10', '59', '19', '4407', '6475', '0'), +('10', '59', '19', '2293', '5373', '0'), +('10', '59', '19', '68239', '4812', '0'), +('10', '59', '19', '4837', '4587', '0'), +('10', '59', '13', '11694', '18193', '0'), +('10', '59', '13', '27729', '17980', '0'), +('10', '59', '13', '13730', '7359', '0'), +('10', '59', '13', '9246', '7139', '0'), +('10', '59', '14', '10335', '12818', '0'), +('10', '59', '14', '12802', '8642', '0'), +('10', '59', '14', '13991', '8127', '0'), +('10', '59', '14', '9407', '7435', '0'), +('10', '59', '11', '9246', '7139', '0'), +('10', '59', '11', '7051', '5720', '0'), +('10', '59', '11', '14762', '3204', '0'), +('10', '59', '11', '7048', '2293', '0'), +('10', '60', '22', '21805', '0', '3'), +('10', '60', '22', '21807', '0', '3'), +('10', '60', '22', '12425', '0', '3'), +('10', '60', '22', '7867', '0', '3'), +('10', '60', '1', '30552', '24371', '3'), +('10', '60', '1', '29861', '17848', '3'), +('10', '60', '1', '63170', '17620', '3'), +('10', '60', '1', '28944', '16421', '3'), +('10', '60', '2', '26763', '37360', '3'), +('10', '60', '2', '1867', '17611', '3'), +('10', '60', '2', '26762', '17536', '3'), +('10', '60', '2', '28909', '17324', '3'), +('10', '60', '3', '28963', '34190', '3'), +('10', '60', '3', '31323', '26102', '3'), +('10', '60', '3', '26785', '23531', '3'), +('10', '60', '3', '30553', '18164', '3'), +('10', '60', '5', '28900', '42243', '3'), +('10', '60', '5', '26505', '24082', '3'), +('10', '60', '5', '8364', '23811', '3'), +('10', '60', '5', '51229', '19666', '3'), +('10', '60', '8', '51240', '40600', '3'), +('10', '60', '8', '1628', '34460', '3'), +('10', '60', '8', '28992', '22509', '3'), +('10', '60', '8', '28918', '19751', '3'), +('10', '60', '6', '30566', '19670', '3'), +('10', '60', '6', '28920', '19492', '3'), +('10', '60', '6', '1200', '19461', '3'), +('10', '60', '6', '28991', '18153', '3'), +('10', '60', '17', '26782', '23702', '3'), +('10', '60', '17', '28951', '17878', '3'), +('10', '60', '17', '10845', '17592', '3'), +('10', '60', '17', '27159', '15550', '3'), +('10', '60', '7', '28925', '19568', '3'), +('10', '60', '7', '7868', '19113', '3'), +('10', '60', '7', '26584', '18399', '3'), +('10', '60', '7', '28991', '18153', '3'), +('10', '60', '9', '26752', '54390', '3'), +('10', '60', '9', '26787', '32392', '3'), +('10', '60', '9', '31314', '26203', '3'), +('10', '60', '9', '30552', '24371', '3'), +('10', '60', '15', '51247', '39408', '3'), +('10', '60', '15', '11541', '23001', '3'), +('10', '60', '15', '28994', '21640', '3'), +('10', '60', '15', '51242', '19682', '3'), +('10', '60', '20', '11666', '32013', '3'), +('10', '60', '20', '28916', '22548', '3'), +('10', '60', '20', '30534', '18711', '3'), +('10', '60', '20', '26549', '18080', '3'), +('10', '60', '12', '30534', '18711', '3'), +('10', '60', '12', '28967', '18253', '3'), +('10', '60', '12', '28991', '18153', '3'), +('10', '60', '12', '31227', '17712', '3'), +('10', '60', '18', '26783', '45811', '3'), +('10', '60', '18', '28932', '17358', '3'), +('10', '60', '18', '8289', '17323', '3'), +('10', '60', '18', '28965', '16855', '3'), +('10', '60', '19', '31327', '32099', '3'), +('10', '60', '19', '31408', '23508', '3'), +('10', '60', '19', '28934', '21903', '3'), +('10', '60', '19', '30570', '20612', '3'), +('10', '60', '13', '28980', '44473', '3'), +('10', '60', '13', '14762', '23200', '3'), +('10', '60', '13', '26784', '22960', '3'), +('10', '60', '13', '28921', '21098', '3'), +('10', '60', '14', '28980', '44473', '3'), +('10', '60', '14', '14762', '23200', '3'), +('10', '60', '14', '26784', '22960', '3'), +('10', '60', '14', '26786', '22260', '3'), +('10', '60', '11', '14762', '23200', '3'), +('10', '60', '11', '26784', '22960', '3'), +('10', '60', '11', '28921', '21098', '3'), +('10', '60', '11', '30562', '18584', '3'), +('10', '60', '22', '10323', '0', '2'), +('10', '60', '22', '9248', '0', '2'), +('10', '60', '22', '9254', '0', '2'), +('10', '60', '22', '9246', '0', '2'), +('10', '60', '1', '2581', '18201', '2'), +('10', '60', '1', '2065', '12104', '2'), +('10', '60', '1', '10912', '9514', '2'), +('10', '60', '1', '62234', '9170', '2'), +('10', '60', '2', '10913', '16138', '2'), +('10', '60', '2', '29648', '14363', '2'), +('10', '60', '2', '31226', '13765', '2'), +('10', '60', '2', '31322', '13285', '2'), +('10', '60', '3', '31233', '18741', '2'), +('10', '60', '3', '31244', '15202', '2'), +('10', '60', '3', '1547', '14568', '2'), +('10', '60', '3', '31463', '11832', '2'), +('10', '60', '5', '31460', '17535', '2'), +('10', '60', '5', '30390', '14540', '2'), +('10', '60', '5', '31318', '14270', '2'), +('10', '60', '5', '29459', '13520', '2'), +('10', '60', '8', '31376', '17991', '2'), +('10', '60', '8', '1628', '16046', '2'), +('10', '60', '8', '5779', '12911', '2'), +('10', '60', '8', '1622', '12614', '2'), +('10', '60', '6', '27151', '10416', '2'), +('10', '60', '6', '29472', '8919', '2'), +('10', '60', '6', '27140', '8815', '2'), +('10', '60', '6', '1114', '7521', '2'), +('10', '60', '17', '10845', '19986', '2'), +('10', '60', '17', '27159', '16544', '2'), +('10', '60', '17', '27148', '14642', '2'), +('10', '60', '17', '31106', '14429', '2'), +('10', '60', '7', '31229', '11762', '2'), +('10', '60', '7', '29485', '10128', '2'), +('10', '60', '7', '31381', '7945', '2'), +('10', '60', '7', '5723', '6611', '2'), +('10', '60', '9', '31460', '17535', '2'), +('10', '60', '9', '31246', '11146', '2'), +('10', '60', '9', '31461', '8298', '2'), +('10', '60', '9', '5723', '6611', '2'), +('10', '60', '15', '25211', '17700', '2'), +('10', '60', '15', '31231', '17533', '2'), +('10', '60', '15', '62373', '10465', '2'), +('10', '60', '15', '5727', '10465', '2'), +('10', '60', '20', '25858', '18787', '2'), +('10', '60', '20', '25199', '18323', '2'), +('10', '60', '20', '2510', '17669', '2'), +('10', '60', '20', '1556', '17317', '2'), +('10', '60', '12', '31227', '19808', '2'), +('10', '60', '12', '25857', '14562', '2'), +('10', '60', '12', '31306', '13988', '2'), +('10', '60', '12', '31402', '5877', '2'), +('10', '60', '18', '31110', '12929', '2'), +('10', '60', '18', '25361', '11466', '2'), +('10', '60', '18', '31012', '11230', '2'), +('10', '60', '18', '25463', '11191', '2'), +('10', '60', '19', '29645', '19790', '2'), +('10', '60', '19', '31245', '19628', '2'), +('10', '60', '19', '31355', '11632', '2'), +('10', '60', '19', '31327', '10080', '2'), +('10', '60', '13', '31373', '16988', '2'), +('10', '60', '13', '5149', '13561', '2'), +('10', '60', '13', '10651', '13118', '2'), +('10', '60', '13', '24609', '13050', '2'), +('10', '60', '14', '31230', '20755', '2'), +('10', '60', '14', '31462', '15367', '2'), +('10', '60', '14', '25098', '12768', '2'), +('10', '60', '14', '31216', '11943', '2'), +('10', '60', '11', '1554', '19067', '2'), +('10', '60', '11', '31465', '16832', '2'), +('10', '60', '11', '2698', '14266', '2'), +('10', '60', '11', '5149', '13558', '2'), +('10', '60', '22', '10323', '0', '1'), +('10', '60', '22', '9246', '0', '1'), +('10', '60', '22', '21518', '0', '1'), +('10', '60', '22', '12425', '0', '1'), +('10', '60', '1', '10912', '13974', '1'), +('10', '60', '1', '62234', '11144', '1'), +('10', '60', '1', '5815', '6035', '1'), +('10', '60', '1', '5814', '6035', '1'), +('10', '60', '2', '10913', '22127', '1'), +('10', '60', '2', '10143', '7111', '1'), +('10', '60', '2', '62138', '5571', '1'), +('10', '60', '2', '5799', '4530', '1'), +('10', '60', '3', '46184', '7726', '1'), +('10', '60', '3', '5780', '7309', '1'), +('10', '60', '3', '11052', '6417', '1'), +('10', '60', '3', '1625', '5981', '1'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '60', '5', '14703', '8800', '1'), +('10', '60', '5', '8285', '5733', '1'), +('10', '60', '5', '27726', '4901', '1'), +('10', '60', '5', '14709', '4835', '1'), +('10', '60', '8', '1628', '20012', '1'), +('10', '60', '8', '1622', '14009', '1'), +('10', '60', '8', '5779', '12936', '1'), +('10', '60', '8', '1546', '12339', '1'), +('10', '60', '6', '5723', '6864', '1'), +('10', '60', '6', '27728', '6069', '1'), +('10', '60', '6', '1557', '5286', '1'), +('10', '60', '6', '4315', '4292', '1'), +('10', '60', '17', '10845', '25970', '1'), +('10', '60', '17', '4530', '13606', '1'), +('10', '60', '17', '2285', '11050', '1'), +('10', '60', '17', '4872', '8732', '1'), +('10', '60', '7', '5723', '6864', '1'), +('10', '60', '7', '62046', '5357', '1'), +('10', '60', '7', '1362', '3114', '1'), +('10', '60', '7', '2289', '3029', '1'), +('10', '60', '9', '27727', '7164', '1'), +('10', '60', '9', '5723', '6864', '1'), +('10', '60', '9', '1618', '4950', '1'), +('10', '60', '9', '2290', '2780', '1'), +('10', '60', '15', '5727', '11294', '1'), +('10', '60', '15', '5728', '8835', '1'), +('10', '60', '15', '5807', '6521', '1'), +('10', '60', '15', '5733', '5600', '1'), +('10', '60', '20', '1556', '20307', '1'), +('10', '60', '20', '11666', '12471', '1'), +('10', '60', '20', '5765', '8016', '1'), +('10', '60', '20', '27727', '7164', '1'), +('10', '60', '12', '20655', '4544', '1'), +('10', '60', '12', '2923', '4314', '1'), +('10', '60', '12', '2291', '3818', '1'), +('10', '60', '12', '4835', '3380', '1'), +('10', '60', '18', '4534', '11017', '1'), +('10', '60', '18', '62164', '10838', '1'), +('10', '60', '18', '2461', '2636', '1'), +('10', '60', '18', '2292', '2535', '1'), +('10', '60', '19', '5749', '4659', '1'), +('10', '60', '19', '2293', '4504', '1'), +('10', '60', '19', '68239', '3931', '1'), +('10', '60', '19', '4407', '3898', '1'), +('10', '60', '13', '10651', '19511', '1'), +('10', '60', '13', '5149', '18461', '1'), +('10', '60', '13', '24609', '15429', '1'), +('10', '60', '13', '27729', '13991', '1'), +('10', '60', '14', '24629', '13134', '1'), +('10', '60', '14', '14745', '8222', '1'), +('10', '60', '14', '10335', '7694', '1'), +('10', '60', '14', '12802', '7185', '1'), +('10', '60', '11', '5149', '18459', '1'), +('10', '60', '11', '7205', '10711', '1'), +('10', '60', '11', '46178', '9611', '1'), +('10', '60', '11', '5148', '9299', '1'), +('10', '61', '22', '21805', '0', '3'), +('10', '61', '22', '21807', '0', '3'), +('10', '61', '22', '12425', '0', '3'), +('10', '61', '22', '7867', '0', '3'), +('10', '61', '1', '30552', '24073', '3'), +('10', '61', '1', '29861', '17854', '3'), +('10', '61', '1', '63170', '17522', '3'), +('10', '61', '1', '28944', '16423', '3'), +('10', '61', '2', '26763', '36613', '3'), +('10', '61', '2', '26762', '17539', '3'), +('10', '61', '2', '28909', '17326', '3'), +('10', '61', '2', '1867', '17282', '3'), +('10', '61', '3', '28963', '33442', '3'), +('10', '61', '3', '31323', '25102', '3'), +('10', '61', '3', '26785', '23357', '3'), +('10', '61', '3', '30553', '18167', '3'), +('10', '61', '5', '28900', '41247', '3'), +('10', '61', '5', '8364', '23815', '3'), +('10', '61', '5', '26505', '22932', '3'), +('10', '61', '5', '51229', '19568', '3'), +('10', '61', '8', '51240', '39601', '3'), +('10', '61', '8', '1628', '33463', '3'), +('10', '61', '8', '28992', '22512', '3'), +('10', '61', '8', '28918', '19751', '3'), +('10', '61', '6', '30566', '19672', '3'), +('10', '61', '6', '28920', '19496', '3'), +('10', '61', '6', '1200', '19063', '3'), +('10', '61', '6', '28991', '18158', '3'), +('10', '61', '17', '26782', '23708', '3'), +('10', '61', '17', '28951', '17878', '3'), +('10', '61', '17', '10845', '17596', '3'), +('10', '61', '17', '27159', '15552', '3'), +('10', '61', '7', '28925', '19572', '3'), +('10', '61', '7', '7868', '19115', '3'), +('10', '61', '7', '26584', '18402', '3'), +('10', '61', '7', '28991', '18158', '3'), +('10', '61', '9', '26752', '52892', '3'), +('10', '61', '9', '26787', '31994', '3'), +('10', '61', '9', '31314', '25203', '3'), +('10', '61', '9', '30552', '24073', '3'), +('10', '61', '15', '51247', '38258', '3'), +('10', '61', '15', '11541', '21851', '3'), +('10', '61', '15', '28994', '21642', '3'), +('10', '61', '15', '51242', '19383', '3'), +('10', '61', '20', '11666', '31013', '3'), +('10', '61', '20', '28916', '22550', '3'), +('10', '61', '20', '30534', '18713', '3'), +('10', '61', '20', '26549', '18084', '3'), +('10', '61', '12', '30534', '18713', '3'), +('10', '61', '12', '28967', '18253', '3'), +('10', '61', '12', '28991', '18158', '3'), +('10', '61', '12', '31227', '17715', '3'), +('10', '61', '18', '26783', '44664', '3'), +('10', '61', '18', '28932', '17361', '3'), +('10', '61', '18', '8289', '17325', '3'), +('10', '61', '18', '28965', '16857', '3'), +('10', '61', '19', '31327', '30951', '3'), +('10', '61', '19', '31408', '22359', '3'), +('10', '61', '19', '28934', '21703', '3'), +('10', '61', '19', '30570', '20614', '3'), +('10', '61', '13', '28980', '43475', '3'), +('10', '61', '13', '26784', '22967', '3'), +('10', '61', '13', '14762', '22200', '3'), +('10', '61', '13', '28921', '21104', '3'), +('10', '61', '14', '28980', '43475', '3'), +('10', '61', '14', '26784', '22967', '3'), +('10', '61', '14', '26786', '22266', '3'), +('10', '61', '14', '14762', '22200', '3'), +('10', '61', '11', '26784', '22967', '3'), +('10', '61', '11', '14762', '22200', '3'), +('10', '61', '11', '28921', '21104', '3'), +('10', '61', '11', '30562', '18586', '3'), +('10', '62', '22', '21805', '0', '3'), +('10', '62', '22', '21807', '0', '3'), +('10', '62', '22', '12425', '0', '3'), +('10', '62', '22', '7867', '0', '3'), +('10', '62', '1', '30552', '23775', '3'), +('10', '62', '1', '29861', '17860', '3'), +('10', '62', '1', '63170', '17424', '3'), +('10', '62', '1', '28944', '16425', '3'), +('10', '62', '2', '26763', '35867', '3'), +('10', '62', '2', '26762', '17542', '3'), +('10', '62', '2', '28909', '17328', '3'), +('10', '62', '2', '7385', '16967', '3'), +('10', '62', '3', '28963', '32694', '3'), +('10', '62', '3', '31323', '24102', '3'), +('10', '62', '3', '26785', '23182', '3'), +('10', '62', '3', '30553', '18169', '3'), +('10', '62', '5', '28900', '40251', '3'), +('10', '62', '5', '8364', '23818', '3'), +('10', '62', '5', '26505', '21782', '3'), +('10', '62', '5', '51229', '19470', '3'), +('10', '62', '8', '51240', '38601', '3'), +('10', '62', '8', '1628', '32466', '3'), +('10', '62', '8', '28992', '22516', '3'), +('10', '62', '8', '28918', '19751', '3'), +('10', '62', '6', '30566', '19673', '3'), +('10', '62', '6', '28920', '19500', '3'), +('10', '62', '6', '1200', '18665', '3'), +('10', '62', '6', '28991', '18163', '3'), +('10', '62', '17', '26782', '23713', '3'), +('10', '62', '17', '28951', '17878', '3'), +('10', '62', '17', '10845', '17600', '3'), +('10', '62', '17', '27159', '15554', '3'), +('10', '62', '7', '28925', '19575', '3'), +('10', '62', '7', '7868', '19117', '3'), +('10', '62', '7', '26584', '18404', '3'), +('10', '62', '7', '28991', '18163', '3'), +('10', '62', '9', '26752', '51395', '3'), +('10', '62', '9', '26787', '31596', '3'), +('10', '62', '9', '31314', '24203', '3'), +('10', '62', '9', '30552', '23775', '3'), +('10', '62', '15', '51247', '37108', '3'), +('10', '62', '15', '28994', '21644', '3'), +('10', '62', '15', '11541', '20701', '3'), +('10', '62', '15', '51242', '19085', '3'), +('10', '62', '20', '11666', '30014', '3'), +('10', '62', '20', '28916', '22551', '3'), +('10', '62', '20', '30534', '18716', '3'), +('10', '62', '20', '26549', '18089', '3'), +('10', '62', '12', '30534', '18716', '3'), +('10', '62', '12', '28967', '18253', '3'), +('10', '62', '12', '28991', '18163', '3'), +('10', '62', '12', '31227', '17719', '3'), +('10', '62', '18', '26783', '43516', '3'), +('10', '62', '18', '28932', '17363', '3'), +('10', '62', '18', '8289', '17327', '3'), +('10', '62', '18', '28965', '16859', '3'), +('10', '62', '19', '31327', '29802', '3'), +('10', '62', '19', '28934', '21503', '3'), +('10', '62', '19', '31408', '21210', '3'), +('10', '62', '19', '30570', '20616', '3'), +('10', '62', '13', '28980', '42478', '3'), +('10', '62', '13', '26784', '22974', '3'), +('10', '62', '13', '14762', '21200', '3'), +('10', '62', '13', '28921', '21109', '3'), +('10', '62', '14', '28980', '42478', '3'), +('10', '62', '14', '26784', '22974', '3'), +('10', '62', '14', '26786', '22271', '3'), +('10', '62', '14', '14762', '21200', '3'), +('10', '62', '11', '26784', '22974', '3'), +('10', '62', '11', '14762', '21200', '3'), +('10', '62', '11', '28921', '21109', '3'), +('10', '62', '11', '30562', '18588', '3'), +('10', '63', '22', '21805', '0', '3'), +('10', '63', '22', '21807', '0', '3'), +('10', '63', '22', '12425', '0', '3'), +('10', '63', '22', '7867', '0', '3'), +('10', '63', '1', '30552', '23477', '3'), +('10', '63', '1', '29861', '17865', '3'), +('10', '63', '1', '63170', '17326', '3'), +('10', '63', '1', '28944', '16427', '3'), +('10', '63', '2', '26763', '35120', '3'), +('10', '63', '2', '26762', '17545', '3'), +('10', '63', '2', '28909', '17330', '3'), +('10', '63', '2', '7385', '16970', '3'), +('10', '63', '3', '28963', '31946', '3'), +('10', '63', '3', '31323', '23102', '3'), +('10', '63', '3', '26785', '23008', '3'), +('10', '63', '3', '30553', '18172', '3'), +('10', '63', '5', '28900', '39255', '3'), +('10', '63', '5', '8364', '23821', '3'), +('10', '63', '5', '26505', '20632', '3'), +('10', '63', '5', '51229', '19372', '3'), +('10', '63', '8', '51240', '37601', '3'), +('10', '63', '8', '1628', '31468', '3'), +('10', '63', '8', '28992', '22519', '3'), +('10', '63', '8', '28918', '19751', '3'), +('10', '63', '6', '30566', '19675', '3'), +('10', '63', '6', '28920', '19504', '3'), +('10', '63', '6', '1200', '18267', '3'), +('10', '63', '6', '28991', '18168', '3'), +('10', '63', '17', '26782', '23719', '3'), +('10', '63', '17', '28951', '17878', '3'), +('10', '63', '17', '10845', '17604', '3'), +('10', '63', '17', '27159', '15555', '3'), +('10', '63', '7', '28925', '19579', '3'), +('10', '63', '7', '7868', '19119', '3'), +('10', '63', '7', '26584', '18406', '3'), +('10', '63', '7', '28991', '18168', '3'), +('10', '63', '9', '26752', '49897', '3'), +('10', '63', '9', '26787', '31199', '3'), +('10', '63', '9', '30552', '23477', '3'), +('10', '63', '9', '31314', '23203', '3'), +('10', '63', '15', '51247', '35959', '3'), +('10', '63', '15', '28994', '21647', '3'), +('10', '63', '15', '11541', '19551', '3'), +('10', '63', '15', '51242', '18786', '3'), +('10', '63', '20', '11666', '29014', '3'), +('10', '63', '20', '28916', '22553', '3'), +('10', '63', '20', '30534', '18719', '3'), +('10', '63', '20', '26549', '18093', '3'), +('10', '63', '12', '30534', '18719', '3'), +('10', '63', '12', '28967', '18253', '3'), +('10', '63', '12', '28991', '18168', '3'), +('10', '63', '12', '31227', '17722', '3'), +('10', '63', '18', '26783', '42369', '3'), +('10', '63', '18', '28932', '17366', '3'), +('10', '63', '18', '8289', '17329', '3'), +('10', '63', '18', '28965', '16860', '3'), +('10', '63', '19', '31327', '28654', '3'), +('10', '63', '19', '28934', '21303', '3'), +('10', '63', '19', '30570', '20618', '3'), +('10', '63', '19', '31408', '20061', '3'), +('10', '63', '13', '28980', '41481', '3'), +('10', '63', '13', '26784', '22981', '3'), +('10', '63', '13', '28921', '21115', '3'), +('10', '63', '13', '28981', '20481', '3'), +('10', '63', '14', '28980', '41481', '3'), +('10', '63', '14', '26784', '22981', '3'), +('10', '63', '14', '26786', '22277', '3'), +('10', '63', '14', '28921', '21115', '3'), +('10', '63', '11', '26784', '22981', '3'), +('10', '63', '11', '28921', '21115', '3'), +('10', '63', '11', '14762', '20200', '3'), +('10', '63', '11', '30562', '18590', '3'), +('10', '64', '22', '21805', '0', '3'), +('10', '64', '22', '21807', '0', '3'), +('10', '64', '22', '12425', '0', '3'), +('10', '64', '22', '7867', '0', '3'), +('10', '64', '1', '30552', '23179', '3'), +('10', '64', '1', '29861', '17871', '3'), +('10', '64', '1', '63170', '17227', '3'), +('10', '64', '1', '28944', '16429', '3'), +('10', '64', '2', '26763', '34373', '3'), +('10', '64', '2', '26762', '17548', '3'), +('10', '64', '2', '28909', '17332', '3'), +('10', '64', '2', '7385', '16974', '3'), +('10', '64', '3', '28963', '31199', '3'), +('10', '64', '3', '26785', '22833', '3'), +('10', '64', '3', '31323', '22102', '3'), +('10', '64', '3', '30553', '18175', '3'), +('10', '64', '5', '28900', '38259', '3'), +('10', '64', '5', '8364', '23825', '3'), +('10', '64', '5', '26505', '19482', '3'), +('10', '64', '5', '51229', '19274', '3'), +('10', '64', '8', '51240', '36602', '3'), +('10', '64', '8', '1628', '30471', '3'), +('10', '64', '8', '28992', '22522', '3'), +('10', '64', '8', '28918', '19751', '3'), +('10', '64', '6', '30566', '19677', '3'), +('10', '64', '6', '28920', '19508', '3'), +('10', '64', '6', '28991', '18173', '3'), +('10', '64', '6', '1200', '17869', '3'), +('10', '64', '17', '26782', '23725', '3'), +('10', '64', '17', '28951', '17878', '3'), +('10', '64', '17', '10845', '17608', '3'), +('10', '64', '17', '27159', '15557', '3'), +('10', '64', '7', '28925', '19582', '3'), +('10', '64', '7', '7868', '19120', '3'), +('10', '64', '7', '26584', '18409', '3'), +('10', '64', '7', '28991', '18173', '3'), +('10', '64', '9', '26752', '48399', '3'), +('10', '64', '9', '26787', '30801', '3'), +('10', '64', '9', '30552', '23179', '3'), +('10', '64', '9', '31314', '22203', '3'), +('10', '64', '15', '51247', '34809', '3'), +('10', '64', '15', '28994', '21649', '3'), +('10', '64', '15', '51242', '18487', '3'), +('10', '64', '15', '11541', '18401', '3'), +('10', '64', '20', '11666', '28014', '3'), +('10', '64', '20', '28916', '22554', '3'), +('10', '64', '20', '30534', '18721', '3'), +('10', '64', '20', '26549', '18098', '3'), +('10', '64', '12', '30534', '18721', '3'), +('10', '64', '12', '28967', '18253', '3'), +('10', '64', '12', '28991', '18173', '3'), +('10', '64', '12', '31227', '17726', '3'), +('10', '64', '18', '26783', '41221', '3'), +('10', '64', '18', '28932', '17369', '3'), +('10', '64', '18', '8289', '17331', '3'), +('10', '64', '18', '28965', '16862', '3'), +('10', '64', '19', '31327', '27506', '3'), +('10', '64', '19', '28934', '21103', '3'), +('10', '64', '19', '30570', '20619', '3'), +('10', '64', '19', '31408', '18912', '3'), +('10', '64', '13', '28980', '40484', '3'), +('10', '64', '13', '26784', '22987', '3'), +('10', '64', '13', '28921', '21121', '3'), +('10', '64', '13', '28981', '20484', '3'), +('10', '64', '14', '28980', '40484', '3'), +('10', '64', '14', '26784', '22987', '3'), +('10', '64', '14', '26786', '22283', '3'), +('10', '64', '14', '28921', '21121', '3'), +('10', '64', '11', '26784', '22987', '3'), +('10', '64', '11', '28921', '21121', '3'), +('10', '64', '11', '14762', '19200', '3'), +('10', '64', '11', '30562', '18592', '3'), +('10', '65', '22', '21805', '0', '7'), +('10', '65', '22', '61948', '0', '7'), +('10', '65', '22', '21807', '0', '7'), +('10', '65', '22', '12425', '0', '7'), +('10', '65', '1', '5594', '62582', '7'), +('10', '65', '1', '52121', '49262', '7'), +('10', '65', '1', '7130', '48592', '7'), +('10', '65', '1', '68756', '47887', '7'), +('10', '65', '2', '69088', '39405', '7'), +('10', '65', '2', '67726', '35660', '7'), +('10', '65', '2', '26763', '33627', '7'), +('10', '65', '2', '9496', '31121', '7'), +('10', '65', '3', '69068', '93593', '7'), +('10', '65', '3', '69132', '60779', '7'), +('10', '65', '3', '68819', '56986', '7'), +('10', '65', '3', '26984', '54567', '7'), +('10', '65', '5', '69097', '94667', '7'), +('10', '65', '5', '68950', '94637', '7'), +('10', '65', '5', '68719', '51727', '7'), +('10', '65', '5', '50414', '50584', '7'), +('10', '65', '8', '69064', '93558', '7'), +('10', '65', '8', '69164', '51443', '7'), +('10', '65', '8', '15823', '49609', '7'), +('10', '65', '8', '69065', '42783', '7'), +('10', '65', '6', '13647', '65367', '7'), +('10', '65', '6', '69073', '62429', '7'), +('10', '65', '6', '69066', '55438', '7'), +('10', '65', '6', '13634', '47574', '7'), +('10', '65', '17', '69151', '69978', '7'), +('10', '65', '17', '47649', '62056', '7'), +('10', '65', '17', '68780', '40676', '7'), +('10', '65', '17', '68974', '39972', '7'), +('10', '65', '7', '68886', '56818', '7'), +('10', '65', '7', '11529', '51694', '7'), +('10', '65', '7', '69169', '44755', '7'), +('10', '65', '7', '69080', '38740', '7'), +('10', '65', '9', '69127', '76155', '7'), +('10', '65', '9', '68767', '58892', '7'), +('10', '65', '9', '26752', '46901', '7'), +('10', '65', '9', '69100', '43508', '7'), +('10', '65', '15', '69160', '96243', '7'), +('10', '65', '15', '69070', '55917', '7'), +('10', '65', '15', '10234', '54035', '7'), +('10', '65', '15', '69382', '50685', '7'), +('10', '65', '20', '68951', '61068', '7'), +('10', '65', '20', '62446', '49599', '7'), +('10', '65', '20', '67625', '49559', '7'), +('10', '65', '20', '69134', '47069', '7'), +('10', '65', '12', '69084', '47081', '7'), +('10', '65', '12', '69253', '46938', '7'), +('10', '65', '12', '68887', '38213', '7'), +('10', '65', '12', '28246', '31809', '7'), +('10', '65', '18', '69147', '53991', '7'), +('10', '65', '18', '68975', '43615', '7'), +('10', '65', '18', '26783', '40074', '7'), +('10', '65', '18', '68749', '35380', '7'), +('10', '65', '19', '69178', '46519', '7'), +('10', '65', '19', '69076', '39995', '7'), +('10', '65', '19', '68888', '36204', '7'), +('10', '65', '19', '26988', '29550', '7'), +('10', '65', '13', '21886', '51823', '7'), +('10', '65', '13', '69098', '51765', '7'), +('10', '65', '13', '69159', '46151', '7'), +('10', '65', '13', '69047', '44876', '7'), +('10', '65', '14', '69155', '96364', '7'), +('10', '65', '14', '27280', '68300', '7'), +('10', '65', '14', '69404', '52937', '7'), +('10', '65', '14', '69098', '51765', '7'), +('10', '65', '11', '68952', '76874', '7'), +('10', '65', '11', '20898', '62698', '7'), +('10', '65', '11', '69162', '46453', '7'), +('10', '65', '11', '67606', '45153', '7'), +('10', '65', '22', '21805', '0', '6'), +('10', '65', '22', '61948', '0', '6'), +('10', '65', '22', '21807', '0', '6'), +('10', '65', '22', '12425', '0', '6'), +('10', '65', '1', '5594', '62582', '6'), +('10', '65', '1', '7130', '48592', '6'), +('10', '65', '1', '4118', '35055', '6'), +('10', '65', '1', '10242', '34592', '6'), +('10', '65', '2', '26763', '33627', '6'), +('10', '65', '2', '9496', '31121', '6'), +('10', '65', '2', '28648', '29563', '6'), +('10', '65', '2', '28605', '29558', '6'), +('10', '65', '3', '26984', '54567', '6'), +('10', '65', '3', '26982', '42729', '6'), +('10', '65', '3', '9490', '35620', '6'), +('10', '65', '3', '9463', '34257', '6'), +('10', '65', '5', '62446', '49599', '6'), +('10', '65', '5', '7769', '40688', '6'), +('10', '65', '5', '7756', '38279', '6'), +('10', '65', '5', '7770', '37736', '6'), +('10', '65', '8', '15823', '49609', '6'), +('10', '65', '8', '15805', '36747', '6'), +('10', '65', '8', '51240', '35602', '6'), +('10', '65', '8', '15815', '34341', '6'), +('10', '65', '6', '13647', '65367', '6'), +('10', '65', '6', '13634', '47574', '6'), +('10', '65', '6', '28661', '36217', '6'), +('10', '65', '6', '28660', '34786', '6'), +('10', '65', '17', '47649', '62056', '6'), +('10', '65', '17', '69403', '34989', '6'), +('10', '65', '17', '68189', '27500', '6'), +('10', '65', '17', '68007', '27500', '6'), +('10', '65', '7', '11529', '51694', '6'), +('10', '65', '7', '68197', '30010', '6'), +('10', '65', '7', '68189', '27500', '6'), +('10', '65', '7', '68007', '27500', '6'), +('10', '65', '9', '26752', '46901', '6'), +('10', '65', '9', '21993', '35214', '6'), +('10', '65', '9', '28668', '32768', '6'), +('10', '65', '9', '28666', '31688', '6'), +('10', '65', '15', '10234', '54035', '6'), +('10', '65', '15', '69382', '50685', '6'), +('10', '65', '15', '26993', '42789', '6'), +('10', '65', '15', '26989', '37112', '6'), +('10', '65', '20', '62446', '49599', '6'), +('10', '65', '20', '15871', '32321', '6'), +('10', '65', '20', '15927', '32233', '6'), +('10', '65', '20', '15877', '31624', '6'), +('10', '65', '12', '28246', '31809', '6'), +('10', '65', '12', '27000', '31438', '6'), +('10', '65', '12', '68007', '27500', '6'), +('10', '65', '12', '68189', '27500', '6'), +('10', '65', '18', '26783', '40074', '6'), +('10', '65', '18', '28651', '33151', '6'), +('10', '65', '18', '68007', '27500', '6'), +('10', '65', '18', '68189', '27500', '6'), +('10', '65', '19', '26988', '29550', '6'), +('10', '65', '19', '68189', '27500', '6'), +('10', '65', '19', '68007', '27500', '6'), +('10', '65', '19', '20078', '27053', '6'), +('10', '65', '13', '21886', '51823', '6'), +('10', '65', '13', '71241', '42716', '6'), +('10', '65', '13', '52054', '39949', '6'), +('10', '65', '13', '28980', '39487', '6'), +('10', '65', '14', '27280', '68300', '6'), +('10', '65', '14', '69404', '52937', '6'), +('10', '65', '14', '68117', '50730', '6'), +('10', '65', '14', '71241', '42716', '6'), +('10', '65', '11', '20898', '62698', '6'), +('10', '65', '11', '20496', '36412', '6'), +('10', '65', '11', '26987', '34899', '6'), +('10', '65', '11', '9574', '31598', '6'), +('10', '65', '22', '61948', '0', '5'), +('10', '65', '22', '21805', '0', '5'), +('10', '65', '22', '21807', '0', '5'), +('10', '65', '22', '12425', '0', '5'), +('10', '65', '1', '5594', '62582', '5'), +('10', '65', '1', '7130', '48592', '5'), +('10', '65', '1', '4118', '35055', '5'), +('10', '65', '1', '10242', '34592', '5'), +('10', '65', '2', '26763', '33627', '5'), +('10', '65', '2', '9496', '31121', '5'), +('10', '65', '2', '28648', '29563', '5'), +('10', '65', '2', '28605', '29558', '5'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '65', '3', '26984', '54567', '5'), +('10', '65', '3', '26982', '42729', '5'), +('10', '65', '3', '9490', '35620', '5'), +('10', '65', '3', '9463', '34257', '5'), +('10', '65', '5', '7769', '40688', '5'), +('10', '65', '5', '7756', '38279', '5'), +('10', '65', '5', '7770', '37736', '5'), +('10', '65', '5', '28900', '37263', '5'), +('10', '65', '8', '15823', '49609', '5'), +('10', '65', '8', '15805', '36747', '5'), +('10', '65', '8', '51240', '35602', '5'), +('10', '65', '8', '15815', '34341', '5'), +('10', '65', '6', '13647', '65367', '5'), +('10', '65', '6', '13634', '47574', '5'), +('10', '65', '6', '28661', '36217', '5'), +('10', '65', '6', '28660', '34786', '5'), +('10', '65', '17', '47649', '62056', '5'), +('10', '65', '17', '14961', '26171', '5'), +('10', '65', '17', '26782', '23731', '5'), +('10', '65', '17', '55297', '20497', '5'), +('10', '65', '7', '11529', '51694', '5'), +('10', '65', '7', '68197', '30010', '5'), +('10', '65', '7', '11518', '26240', '5'), +('10', '65', '7', '8781', '24191', '5'), +('10', '65', '9', '26752', '46901', '5'), +('10', '65', '9', '21993', '35214', '5'), +('10', '65', '9', '28668', '32768', '5'), +('10', '65', '9', '28666', '31688', '5'), +('10', '65', '15', '10234', '54035', '5'), +('10', '65', '15', '26993', '42789', '5'), +('10', '65', '15', '26989', '37112', '5'), +('10', '65', '15', '32109', '36241', '5'), +('10', '65', '20', '15871', '32321', '5'), +('10', '65', '20', '15927', '32233', '5'), +('10', '65', '20', '15877', '31624', '5'), +('10', '65', '20', '22880', '31552', '5'), +('10', '65', '12', '28246', '31809', '5'), +('10', '65', '12', '27000', '31438', '5'), +('10', '65', '12', '13579', '23862', '5'), +('10', '65', '12', '11878', '19959', '5'), +('10', '65', '18', '26783', '40074', '5'), +('10', '65', '18', '28651', '33151', '5'), +('10', '65', '18', '16803', '26274', '5'), +('10', '65', '18', '28932', '17371', '5'), +('10', '65', '19', '26988', '29550', '5'), +('10', '65', '19', '20078', '27053', '5'), +('10', '65', '19', '31327', '26357', '5'), +('10', '65', '19', '19094', '22982', '5'), +('10', '65', '13', '21886', '51823', '5'), +('10', '65', '13', '52054', '39949', '5'), +('10', '65', '13', '28980', '39487', '5'), +('10', '65', '13', '29033', '31029', '5'), +('10', '65', '14', '27280', '68300', '5'), +('10', '65', '14', '52054', '39949', '5'), +('10', '65', '14', '28980', '39487', '5'), +('10', '65', '14', '27285', '34931', '5'), +('10', '65', '11', '20898', '62698', '5'), +('10', '65', '11', '20496', '36412', '5'), +('10', '65', '11', '26987', '34899', '5'), +('10', '65', '11', '9574', '31598', '5'), +('10', '65', '22', '61948', '0', '4'), +('10', '65', '22', '21805', '0', '4'), +('10', '65', '22', '21807', '0', '4'), +('10', '65', '22', '12425', '0', '4'), +('10', '65', '1', '5594', '62582', '4'), +('10', '65', '1', '7130', '48592', '4'), +('10', '65', '1', '4118', '35055', '4'), +('10', '65', '1', '10242', '34592', '4'), +('10', '65', '2', '26763', '33627', '4'), +('10', '65', '2', '9496', '31121', '4'), +('10', '65', '2', '28648', '29563', '4'), +('10', '65', '2', '28605', '29558', '4'), +('10', '65', '3', '26984', '54567', '4'), +('10', '65', '3', '26982', '42729', '4'), +('10', '65', '3', '9490', '35620', '4'), +('10', '65', '3', '9463', '34257', '4'), +('10', '65', '5', '7769', '40688', '4'), +('10', '65', '5', '7756', '38279', '4'), +('10', '65', '5', '7770', '37736', '4'), +('10', '65', '5', '28900', '37263', '4'), +('10', '65', '8', '15823', '49609', '4'), +('10', '65', '8', '15805', '36747', '4'), +('10', '65', '8', '51240', '35602', '4'), +('10', '65', '8', '15815', '34341', '4'), +('10', '65', '6', '13647', '65367', '4'), +('10', '65', '6', '13634', '47574', '4'), +('10', '65', '6', '28661', '36217', '4'), +('10', '65', '6', '28660', '34786', '4'), +('10', '65', '17', '47649', '62056', '4'), +('10', '65', '17', '14961', '26171', '4'), +('10', '65', '17', '26782', '23731', '4'), +('10', '65', '17', '55297', '20497', '4'), +('10', '65', '7', '11529', '51694', '4'), +('10', '65', '7', '68197', '30010', '4'), +('10', '65', '7', '11518', '26240', '4'), +('10', '65', '7', '8781', '24191', '4'), +('10', '65', '9', '26752', '46901', '4'), +('10', '65', '9', '21993', '35214', '4'), +('10', '65', '9', '28668', '32768', '4'), +('10', '65', '9', '28666', '31688', '4'), +('10', '65', '15', '10234', '54035', '4'), +('10', '65', '15', '26993', '42789', '4'), +('10', '65', '15', '26989', '37112', '4'), +('10', '65', '15', '32109', '36241', '4'), +('10', '65', '20', '15871', '32321', '4'), +('10', '65', '20', '15927', '32233', '4'), +('10', '65', '20', '15877', '31624', '4'), +('10', '65', '20', '22880', '31552', '4'), +('10', '65', '12', '28246', '31809', '4'), +('10', '65', '12', '27000', '31438', '4'), +('10', '65', '12', '13579', '23862', '4'), +('10', '65', '12', '11878', '19959', '4'), +('10', '65', '18', '26783', '40074', '4'), +('10', '65', '18', '28651', '33151', '4'), +('10', '65', '18', '16803', '26274', '4'), +('10', '65', '18', '28932', '17371', '4'), +('10', '65', '19', '26988', '29550', '4'), +('10', '65', '19', '20078', '27053', '4'), +('10', '65', '19', '31327', '26357', '4'), +('10', '65', '19', '19094', '22982', '4'), +('10', '65', '13', '21886', '51823', '4'), +('10', '65', '13', '52054', '39949', '4'), +('10', '65', '13', '28980', '39487', '4'), +('10', '65', '13', '29033', '31029', '4'), +('10', '65', '14', '27280', '68300', '4'), +('10', '65', '14', '52054', '39949', '4'), +('10', '65', '14', '28980', '39487', '4'), +('10', '65', '14', '27285', '34931', '4'), +('10', '65', '11', '20898', '62698', '4'), +('10', '65', '11', '20496', '36412', '4'), +('10', '65', '11', '26987', '34899', '4'), +('10', '65', '11', '9574', '31598', '4'), +('10', '66', '22', '21805', '0', '7'), +('10', '66', '22', '61948', '0', '7'), +('10', '66', '22', '21807', '0', '7'), +('10', '66', '22', '12425', '0', '7'), +('10', '66', '1', '5594', '61082', '7'), +('10', '66', '1', '52121', '48766', '7'), +('10', '66', '1', '7130', '48097', '7'), +('10', '66', '1', '69166', '47881', '7'), +('10', '66', '2', '69088', '39410', '7'), +('10', '66', '2', '67726', '35665', '7'), +('10', '66', '2', '26763', '32880', '7'), +('10', '66', '2', '9496', '30123', '7'), +('10', '66', '3', '69068', '91348', '7'), +('10', '66', '3', '69132', '60284', '7'), +('10', '66', '3', '68819', '55489', '7'), +('10', '66', '3', '26984', '53573', '7'), +('10', '66', '5', '69097', '92423', '7'), +('10', '66', '5', '68950', '92391', '7'), +('10', '66', '5', '68719', '50730', '7'), +('10', '66', '5', '67625', '49565', '7'), +('10', '66', '8', '69064', '91563', '7'), +('10', '66', '8', '69164', '51298', '7'), +('10', '66', '8', '15823', '48363', '7'), +('10', '66', '8', '69065', '42786', '7'), +('10', '66', '6', '13647', '63872', '7'), +('10', '66', '6', '69073', '61534', '7'), +('10', '66', '6', '69066', '54941', '7'), +('10', '66', '6', '69163', '47174', '7'), +('10', '66', '17', '69151', '69081', '7'), +('10', '66', '17', '47649', '60813', '7'), +('10', '66', '17', '68780', '40480', '7'), +('10', '66', '17', '68974', '39978', '7'), +('10', '66', '7', '68886', '55923', '7'), +('10', '66', '7', '11529', '50449', '7'), +('10', '66', '7', '69169', '44759', '7'), +('10', '66', '7', '69080', '38743', '7'), +('10', '66', '9', '69127', '74909', '7'), +('10', '66', '9', '68767', '57394', '7'), +('10', '66', '9', '26752', '45404', '7'), +('10', '66', '9', '69100', '43513', '7'), +('10', '66', '15', '69160', '94244', '7'), +('10', '66', '15', '69070', '55421', '7'), +('10', '66', '15', '10234', '52789', '7'), +('10', '66', '15', '69382', '49439', '7'), +('10', '66', '20', '68951', '60174', '7'), +('10', '66', '20', '67625', '49565', '7'), +('10', '66', '20', '62446', '48349', '7'), +('10', '66', '20', '69134', '47074', '7'), +('10', '66', '12', '69253', '46943', '7'), +('10', '66', '12', '69084', '46786', '7'), +('10', '66', '12', '68887', '38217', '7'), +('10', '66', '12', '28246', '31814', '7'), +('10', '66', '18', '69147', '53745', '7'), +('10', '66', '18', '68975', '43320', '7'), +('10', '66', '18', '26783', '38927', '7'), +('10', '66', '18', '68749', '35385', '7'), +('10', '66', '19', '69178', '46525', '7'), +('10', '66', '19', '69076', '39999', '7'), +('10', '66', '19', '68888', '36208', '7'), +('10', '66', '19', '26988', '29553', '7'), +('10', '66', '13', '69098', '51172', '7'), +('10', '66', '13', '21886', '50827', '7'), +('10', '66', '13', '69159', '46158', '7'), +('10', '66', '13', '69047', '44582', '7'), +('10', '66', '14', '69155', '94364', '7'), +('10', '66', '14', '27280', '66805', '7'), +('10', '66', '14', '69404', '51690', '7'), +('10', '66', '14', '69098', '51172', '7'), +('10', '66', '11', '68952', '75379', '7'), +('10', '66', '11', '20898', '61201', '7'), +('10', '66', '11', '69162', '46459', '7'), +('10', '66', '11', '67606', '45158', '7'), +('10', '67', '22', '21805', '0', '7'), +('10', '67', '22', '61948', '0', '7'), +('10', '67', '22', '21807', '0', '7'), +('10', '67', '22', '12425', '0', '7'), +('10', '67', '1', '5594', '59583', '7'), +('10', '67', '1', '52121', '48269', '7'), +('10', '67', '1', '69166', '47886', '7'), +('10', '67', '1', '7130', '47603', '7'), +('10', '67', '2', '69088', '39414', '7'), +('10', '67', '2', '67726', '35671', '7'), +('10', '67', '2', '26763', '32134', '7'), +('10', '67', '2', '28648', '29571', '7'), +('10', '67', '3', '69068', '89104', '7'), +('10', '67', '3', '69132', '59789', '7'), +('10', '67', '3', '68819', '53993', '7'), +('10', '67', '3', '26984', '52578', '7'), +('10', '67', '5', '69097', '90178', '7'), +('10', '67', '5', '68950', '90146', '7'), +('10', '67', '5', '68719', '49733', '7'), +('10', '67', '5', '67625', '49570', '7'), +('10', '67', '8', '69064', '89569', '7'), +('10', '67', '8', '69164', '51154', '7'), +('10', '67', '8', '15823', '47117', '7'), +('10', '67', '8', '69065', '42789', '7'), +('10', '67', '6', '13647', '62378', '7'), +('10', '67', '6', '69073', '60639', '7'), +('10', '67', '6', '69066', '54445', '7'), +('10', '67', '6', '69163', '47179', '7'), +('10', '67', '17', '69151', '68185', '7'), +('10', '67', '17', '47649', '59570', '7'), +('10', '67', '17', '68780', '40284', '7'), +('10', '67', '17', '68974', '39983', '7'), +('10', '67', '7', '68886', '55027', '7'), +('10', '67', '7', '11529', '49203', '7'), +('10', '67', '7', '69169', '44764', '7'), +('10', '67', '7', '69080', '38747', '7'), +('10', '67', '9', '69127', '73662', '7'), +('10', '67', '9', '68767', '55896', '7'), +('10', '67', '9', '26752', '43906', '7'), +('10', '67', '9', '69100', '43518', '7'), +('10', '67', '15', '69160', '92245', '7'), +('10', '67', '15', '69070', '54926', '7'), +('10', '67', '15', '10234', '51543', '7'), +('10', '67', '15', '52121', '48269', '7'), +('10', '67', '20', '68951', '59280', '7'), +('10', '67', '20', '67625', '49570', '7'), +('10', '67', '20', '62446', '47099', '7'), +('10', '67', '20', '69134', '47080', '7'), +('10', '67', '12', '69253', '46947', '7'), +('10', '67', '12', '69084', '46491', '7'), +('10', '67', '12', '68887', '38221', '7'), +('10', '67', '12', '28246', '31818', '7'), +('10', '67', '18', '69147', '53499', '7'), +('10', '67', '18', '68975', '43025', '7'), +('10', '67', '18', '26783', '37779', '7'), +('10', '67', '18', '68749', '35389', '7'), +('10', '67', '19', '69178', '46530', '7'), +('10', '67', '19', '69076', '40004', '7'), +('10', '67', '19', '68888', '36213', '7'), +('10', '67', '19', '26988', '29556', '7'), +('10', '67', '13', '69098', '50579', '7'), +('10', '67', '13', '21886', '49832', '7'), +('10', '67', '13', '69159', '46165', '7'), +('10', '67', '13', '69047', '44288', '7'), +('10', '67', '14', '69155', '92365', '7'), +('10', '67', '14', '27280', '65310', '7'), +('10', '67', '14', '69098', '50579', '7'), +('10', '67', '14', '69404', '50443', '7'), +('10', '67', '11', '68952', '73883', '7'), +('10', '67', '11', '20898', '59704', '7'), +('10', '67', '11', '69162', '46466', '7'), +('10', '67', '11', '67606', '45163', '7'), +('10', '68', '22', '21805', '0', '7'), +('10', '68', '22', '61948', '0', '7'), +('10', '68', '22', '21807', '0', '7'), +('10', '68', '22', '12425', '0', '7'), +('10', '68', '1', '5594', '58083', '7'), +('10', '68', '1', '69166', '47890', '7'), +('10', '68', '1', '52121', '47773', '7'), +('10', '68', '1', '7130', '47108', '7'), +('10', '68', '2', '69088', '39419', '7'), +('10', '68', '2', '67726', '35676', '7'), +('10', '68', '2', '26763', '31387', '7'), +('10', '68', '2', '28648', '29575', '7'), +('10', '68', '3', '69068', '86860', '7'), +('10', '68', '3', '69132', '59294', '7'), +('10', '68', '3', '68819', '52496', '7'), +('10', '68', '3', '26984', '51584', '7'), +('10', '68', '5', '69097', '87934', '7'), +('10', '68', '5', '68950', '87900', '7'), +('10', '68', '5', '67625', '49576', '7'), +('10', '68', '5', '68719', '48737', '7'), +('10', '68', '8', '69064', '87574', '7'), +('10', '68', '8', '69164', '51010', '7'), +('10', '68', '8', '15823', '45871', '7'), +('10', '68', '8', '69065', '42791', '7'), +('10', '68', '6', '13647', '60884', '7'), +('10', '68', '6', '69073', '59744', '7'), +('10', '68', '6', '69066', '53948', '7'), +('10', '68', '6', '69163', '47185', '7'), +('10', '68', '17', '69151', '67289', '7'), +('10', '68', '17', '47649', '58327', '7'), +('10', '68', '17', '68780', '40087', '7'), +('10', '68', '17', '68974', '39989', '7'), +('10', '68', '7', '68886', '54132', '7'), +('10', '68', '7', '11529', '47957', '7'), +('10', '68', '7', '69169', '44768', '7'), +('10', '68', '7', '69080', '38750', '7'), +('10', '68', '9', '69127', '72416', '7'), +('10', '68', '9', '68767', '54398', '7'), +('10', '68', '9', '69100', '43524', '7'), +('10', '68', '9', '26752', '42408', '7'), +('10', '68', '15', '69160', '90245', '7'), +('10', '68', '15', '69070', '54430', '7'), +('10', '68', '15', '10234', '50296', '7'), +('10', '68', '15', '52121', '47773', '7'), +('10', '68', '20', '68951', '58385', '7'), +('10', '68', '20', '67625', '49576', '7'), +('10', '68', '20', '69134', '47085', '7'), +('10', '68', '20', '62446', '45849', '7'), +('10', '68', '12', '69253', '46951', '7'), +('10', '68', '12', '69084', '46196', '7'), +('10', '68', '12', '68887', '38224', '7'), +('10', '68', '12', '28246', '31822', '7'), +('10', '68', '18', '69147', '53252', '7'), +('10', '68', '18', '68975', '42729', '7'), +('10', '68', '18', '26783', '36632', '7'), +('10', '68', '18', '68749', '35394', '7'), +('10', '68', '19', '69178', '46536', '7'), +('10', '68', '19', '69076', '40008', '7'), +('10', '68', '19', '68888', '36217', '7'), +('10', '68', '19', '26988', '29559', '7'), +('10', '68', '13', '69098', '49986', '7'), +('10', '68', '13', '21886', '48836', '7'), +('10', '68', '13', '69159', '46172', '7'), +('10', '68', '13', '69047', '43994', '7'), +('10', '68', '14', '69155', '90366', '7'), +('10', '68', '14', '27280', '63815', '7'), +('10', '68', '14', '69098', '49986', '7'), +('10', '68', '14', '69404', '49196', '7'), +('10', '68', '11', '68952', '72388', '7'), +('10', '68', '11', '20898', '58207', '7'), +('10', '68', '11', '69162', '46473', '7'), +('10', '68', '11', '67606', '45167', '7'), +('10', '69', '22', '21805', '0', '7'), +('10', '69', '22', '61948', '0', '7'), +('10', '69', '22', '21807', '0', '7'), +('10', '69', '22', '12425', '0', '7'), +('10', '69', '1', '5594', '56583', '7'), +('10', '69', '1', '69166', '47894', '7'), +('10', '69', '1', '52121', '47276', '7'), +('10', '69', '1', '7130', '46614', '7'), +('10', '69', '2', '69088', '39424', '7'), +('10', '69', '2', '67726', '35682', '7'), +('10', '69', '2', '26763', '30641', '7'), +('10', '69', '2', '28648', '29579', '7'), +('10', '69', '3', '69068', '84615', '7'), +('10', '69', '3', '69132', '58799', '7'), +('10', '69', '3', '68819', '51000', '7'), +('10', '69', '3', '26984', '50590', '7'), +('10', '69', '5', '69097', '85689', '7'), +('10', '69', '5', '68950', '85655', '7'), +('10', '69', '5', '67625', '49581', '7'), +('10', '69', '5', '68719', '47740', '7'), +('10', '69', '8', '69064', '85580', '7'), +('10', '69', '8', '69164', '50865', '7'), +('10', '69', '8', '15823', '44625', '7'), +('10', '69', '8', '69065', '42794', '7'), +('10', '69', '6', '13647', '59389', '7'), +('10', '69', '6', '69073', '58849', '7'), +('10', '69', '6', '69066', '53452', '7'), +('10', '69', '6', '69163', '47190', '7'), +('10', '69', '17', '69151', '66393', '7'), +('10', '69', '17', '47649', '57084', '7'), +('10', '69', '17', '68974', '39995', '7'), +('10', '69', '17', '68780', '39891', '7'), +('10', '69', '7', '68886', '53237', '7'), +('10', '69', '7', '11529', '46712', '7'), +('10', '69', '7', '69169', '44773', '7'), +('10', '69', '7', '69080', '38754', '7'), +('10', '69', '9', '69127', '71169', '7'), +('10', '69', '9', '68767', '52901', '7'), +('10', '69', '9', '69100', '43529', '7'), +('10', '69', '9', '26752', '40911', '7'), +('10', '69', '15', '69160', '88246', '7'), +('10', '69', '15', '69070', '53935', '7'), +('10', '69', '15', '10234', '49050', '7'), +('10', '69', '15', '52121', '47276', '7'), +('10', '69', '20', '68951', '57491', '7'), +('10', '69', '20', '67625', '49581', '7'), +('10', '69', '20', '69134', '47091', '7'), +('10', '69', '20', '62446', '44600', '7'), +('10', '69', '12', '69253', '46956', '7'), +('10', '69', '12', '69084', '45901', '7'), +('10', '69', '12', '68887', '38228', '7'), +('10', '69', '12', '28246', '31827', '7'), +('10', '69', '18', '69147', '53006', '7'), +('10', '69', '18', '68975', '42434', '7'), +('10', '69', '18', '26783', '35484', '7'), +('10', '69', '18', '68749', '35398', '7'), +('10', '69', '19', '69178', '46542', '7'), +('10', '69', '19', '69076', '40012', '7'), +('10', '69', '19', '68888', '36222', '7'), +('10', '69', '19', '26988', '29562', '7'), +('10', '69', '13', '69098', '49392', '7'), +('10', '69', '13', '21886', '47841', '7'), +('10', '69', '13', '69159', '46179', '7'), +('10', '69', '13', '69047', '43699', '7'), +('10', '69', '14', '69155', '88366', '7'), +('10', '69', '14', '27280', '62320', '7'), +('10', '69', '14', '69098', '49392', '7'), +('10', '69', '14', '69404', '47949', '7'), +('10', '69', '11', '68952', '70892', '7'), +('10', '69', '11', '20898', '56710', '7'), +('10', '69', '11', '69162', '46480', '7'), +('10', '69', '11', '67606', '45172', '7'), +('10', '70', '22', '12425', '0', '11'), +('10', '70', '22', '21807', '0', '11'), +('10', '70', '22', '39342', '0', '11'), +('10', '70', '22', '7867', '0', '11'), +('10', '70', '1', '39329', '126105', '11'), +('10', '70', '1', '71668', '76106', '11'), +('10', '70', '1', '83662', '70387', '11'), +('10', '70', '1', '83630', '66247', '11'), +('10', '70', '2', '83561', '56790', '11'), +('10', '70', '2', '70916', '53127', '11'), +('10', '70', '2', '83551', '50589', '11'), +('10', '70', '2', '47209', '46828', '11'), +('10', '70', '3', '69068', '82371', '11'), +('10', '70', '3', '70620', '74587', '11'), +('10', '70', '3', '39368', '71162', '11'), +('10', '70', '3', '83636', '66717', '11'), +('10', '70', '5', '83612', '85466', '11'), +('10', '70', '5', '69097', '83445', '11'), +('10', '70', '5', '68950', '83409', '11'), +('10', '70', '5', '39366', '70973', '11'), +('10', '70', '8', '39293', '125213', '11'), +('10', '70', '8', '83532', '87185', '11'), +('10', '70', '8', '83659', '84387', '11'), +('10', '70', '8', '69064', '83585', '11'), +('10', '70', '6', '71666', '106462', '11'), +('10', '70', '6', '83660', '77598', '11'), +('10', '70', '6', '39269', '74420', '11'), +('10', '70', '6', '47280', '65077', '11'), +('10', '70', '17', '83604', '69186', '11'), +('10', '70', '17', '69151', '65496', '11'), +('10', '70', '17', '70921', '59574', '11'), +('10', '70', '17', '47649', '55840', '11'), +('10', '70', '7', '39273', '58652', '11'), +('10', '70', '7', '83565', '57840', '11'), +('10', '70', '7', '83495', '54228', '11'), +('10', '70', '7', '68886', '52342', '11'), +('10', '70', '9', '51707', '128333', '11'), +('10', '70', '9', '39225', '90256', '11'), +('10', '70', '9', '69127', '69922', '11'), +('10', '70', '9', '39345', '63285', '11'), +('10', '70', '15', '83629', '124666', '11'), +('10', '70', '15', '69160', '86246', '11'), +('10', '70', '15', '47238', '82597', '11'), +('10', '70', '15', '39277', '78722', '11'), +('10', '70', '20', '47284', '81792', '11'), +('10', '70', '20', '47282', '74154', '11'), +('10', '70', '20', '83600', '64917', '11'), +('10', '70', '20', '39350', '64598', '11'), +('10', '70', '12', '70919', '97189', '11'), +('10', '70', '12', '39356', '86039', '11'), +('10', '70', '12', '83569', '58214', '11'), +('10', '70', '12', '39219', '52985', '11'), +('10', '70', '18', '83608', '129433', '11'), +('10', '70', '18', '70922', '84947', '11'), +('10', '70', '18', '69147', '52759', '11'), +('10', '70', '18', '71647', '50518', '11'), +('10', '70', '19', '83573', '96114', '11'), +('10', '70', '19', '47217', '65518', '11'), +('10', '70', '19', '70920', '64116', '11'), +('10', '70', '19', '83541', '50237', '11'), +('10', '70', '13', '83460', '76234', '11'), +('10', '70', '13', '39211', '76043', '11'), +('10', '70', '13', '83631', '72841', '11'), +('10', '70', '13', '83508', '68775', '11'), +('10', '70', '14', '69155', '86367', '11'), +('10', '70', '14', '83460', '76234', '11'), +('10', '70', '14', '39211', '76043', '11'), +('10', '70', '14', '39372', '71066', '11'), +('10', '70', '11', '39287', '125333', '11'), +('10', '70', '11', '39371', '70898', '11'), +('10', '70', '11', '68952', '69397', '11'), +('10', '70', '11', '39320', '68277', '11'), +('10', '70', '22', '21805', '0', '10'), +('10', '70', '22', '61948', '0', '10'), +('10', '70', '22', '21807', '0', '10'), +('10', '70', '22', '12425', '0', '10'), +('10', '70', '1', '71668', '76106', '10'), +('10', '70', '1', '83662', '70387', '10'), +('10', '70', '1', '83630', '66247', '10'), +('10', '70', '1', '83587', '58066', '10'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '70', '2', '83561', '56790', '10'), +('10', '70', '2', '70916', '53127', '10'), +('10', '70', '2', '83551', '50589', '10'), +('10', '70', '2', '47209', '46828', '10'), +('10', '70', '3', '69068', '82371', '10'), +('10', '70', '3', '70620', '74587', '10'), +('10', '70', '3', '83636', '66717', '10'), +('10', '70', '3', '83658', '66233', '10'), +('10', '70', '5', '83612', '85466', '10'), +('10', '70', '5', '69097', '83445', '10'), +('10', '70', '5', '68950', '83409', '10'), +('10', '70', '5', '83651', '59963', '10'), +('10', '70', '8', '83532', '87185', '10'), +('10', '70', '8', '83659', '84387', '10'), +('10', '70', '8', '69064', '83585', '10'), +('10', '70', '8', '71656', '70838', '10'), +('10', '70', '6', '71666', '106462', '10'), +('10', '70', '6', '83660', '77598', '10'), +('10', '70', '6', '47280', '65077', '10'), +('10', '70', '6', '83635', '58768', '10'), +('10', '70', '17', '83604', '69186', '10'), +('10', '70', '17', '69151', '65496', '10'), +('10', '70', '17', '70921', '59574', '10'), +('10', '70', '17', '47649', '55840', '10'), +('10', '70', '7', '83565', '57840', '10'), +('10', '70', '7', '83495', '54228', '10'), +('10', '70', '7', '68886', '52342', '10'), +('10', '70', '7', '70917', '51971', '10'), +('10', '70', '9', '69127', '69922', '10'), +('10', '70', '9', '83653', '62213', '10'), +('10', '70', '9', '68767', '51403', '10'), +('10', '70', '9', '70918', '51234', '10'), +('10', '70', '15', '83629', '124666', '10'), +('10', '70', '15', '69160', '86246', '10'), +('10', '70', '15', '47238', '82597', '10'), +('10', '70', '15', '47291', '72537', '10'), +('10', '70', '20', '47284', '81792', '10'), +('10', '70', '20', '47282', '74154', '10'), +('10', '70', '20', '83600', '64917', '10'), +('10', '70', '20', '83650', '59873', '10'), +('10', '70', '12', '70919', '97189', '10'), +('10', '70', '12', '83569', '58214', '10'), +('10', '70', '12', '83503', '48428', '10'), +('10', '70', '12', '69253', '46960', '10'), +('10', '70', '18', '83608', '129433', '10'), +('10', '70', '18', '70922', '84947', '10'), +('10', '70', '18', '69147', '52759', '10'), +('10', '70', '18', '71647', '50518', '10'), +('10', '70', '19', '83573', '96114', '10'), +('10', '70', '19', '47217', '65518', '10'), +('10', '70', '19', '70920', '64116', '10'), +('10', '70', '19', '83541', '50237', '10'), +('10', '70', '13', '83460', '76234', '10'), +('10', '70', '13', '83631', '72841', '10'), +('10', '70', '13', '83508', '68775', '10'), +('10', '70', '13', '57405', '57681', '10'), +('10', '70', '14', '69155', '86367', '10'), +('10', '70', '14', '83460', '76234', '10'), +('10', '70', '14', '39315', '68931', '10'), +('10', '70', '14', '83508', '68775', '10'), +('10', '70', '11', '68952', '69397', '10'), +('10', '70', '11', '83665', '63369', '10'), +('10', '70', '11', '71652', '62671', '10'), +('10', '70', '11', '83657', '61831', '10'), +('10', '70', '22', '21805', '0', '9'), +('10', '70', '22', '61948', '0', '9'), +('10', '70', '22', '21807', '0', '9'), +('10', '70', '22', '12425', '0', '9'), +('10', '70', '1', '71668', '76106', '9'), +('10', '70', '1', '47289', '57091', '9'), +('10', '70', '1', '47288', '55085', '9'), +('10', '70', '1', '5594', '55084', '9'), +('10', '70', '2', '70916', '53127', '9'), +('10', '70', '2', '47209', '46828', '9'), +('10', '70', '2', '69088', '39428', '9'), +('10', '70', '2', '71078', '37768', '9'), +('10', '70', '3', '69068', '82371', '9'), +('10', '70', '3', '70620', '74587', '9'), +('10', '70', '3', '71626', '59775', '9'), +('10', '70', '3', '70602', '59434', '9'), +('10', '70', '5', '69097', '83445', '9'), +('10', '70', '5', '68950', '83409', '9'), +('10', '70', '5', '70705', '58233', '9'), +('10', '70', '5', '47276', '57360', '9'), +('10', '70', '8', '69064', '83585', '9'), +('10', '70', '8', '71656', '70838', '9'), +('10', '70', '8', '47306', '58655', '9'), +('10', '70', '8', '71665', '56961', '9'), +('10', '70', '6', '71666', '106462', '9'), +('10', '70', '6', '47280', '65077', '9'), +('10', '70', '6', '69073', '57954', '9'), +('10', '70', '6', '13647', '57895', '9'), +('10', '70', '17', '69151', '65496', '9'), +('10', '70', '17', '70921', '59574', '9'), +('10', '70', '17', '47649', '55840', '9'), +('10', '70', '17', '71095', '53702', '9'), +('10', '70', '7', '68886', '52342', '9'), +('10', '70', '7', '70917', '51971', '9'), +('10', '70', '7', '47205', '46908', '9'), +('10', '70', '7', '70711', '45759', '9'), +('10', '70', '9', '69127', '69922', '9'), +('10', '70', '9', '68767', '51403', '9'), +('10', '70', '9', '70918', '51234', '9'), +('10', '70', '9', '47221', '46967', '9'), +('10', '70', '15', '69160', '86246', '9'), +('10', '70', '15', '47238', '82597', '9'), +('10', '70', '15', '47291', '72537', '9'), +('10', '70', '15', '47290', '54392', '9'), +('10', '70', '20', '47284', '81792', '9'), +('10', '70', '20', '47282', '74154', '9'), +('10', '70', '20', '68951', '56596', '9'), +('10', '70', '20', '47281', '51663', '9'), +('10', '70', '12', '70919', '97189', '9'), +('10', '70', '12', '69253', '46960', '9'), +('10', '70', '12', '47213', '46906', '9'), +('10', '70', '12', '69084', '45606', '9'), +('10', '70', '18', '70922', '84947', '9'), +('10', '70', '18', '69147', '52759', '9'), +('10', '70', '18', '71647', '50518', '9'), +('10', '70', '18', '47201', '47825', '9'), +('10', '70', '19', '47217', '65518', '9'), +('10', '70', '19', '70920', '64116', '9'), +('10', '70', '19', '71081', '49255', '9'), +('10', '70', '19', '69178', '46547', '9'), +('10', '70', '13', '57405', '57681', '9'), +('10', '70', '13', '71671', '57036', '9'), +('10', '70', '13', '47308', '52375', '9'), +('10', '70', '13', '47307', '51531', '9'), +('10', '70', '14', '69155', '86367', '9'), +('10', '70', '14', '39315', '68931', '9'), +('10', '70', '14', '27280', '60825', '9'), +('10', '70', '14', '71671', '57036', '9'), +('10', '70', '11', '68952', '69397', '9'), +('10', '70', '11', '71652', '62671', '9'), +('10', '70', '11', '20898', '55213', '9'), +('10', '70', '11', '71659', '54447', '9'), +('10', '70', '22', '21805', '0', '8'), +('10', '70', '22', '61948', '0', '8'), +('10', '70', '22', '21807', '0', '8'), +('10', '70', '22', '12425', '0', '8'), +('10', '70', '1', '47289', '57091', '8'), +('10', '70', '1', '47288', '55085', '8'), +('10', '70', '1', '5594', '55084', '8'), +('10', '70', '1', '47235', '52722', '8'), +('10', '70', '2', '70916', '53127', '8'), +('10', '70', '2', '47209', '46828', '8'), +('10', '70', '2', '69088', '39428', '8'), +('10', '70', '2', '71078', '37768', '8'), +('10', '70', '3', '69068', '82371', '8'), +('10', '70', '3', '70620', '74587', '8'), +('10', '70', '3', '70602', '59434', '8'), +('10', '70', '3', '47299', '58663', '8'), +('10', '70', '5', '69097', '83445', '8'), +('10', '70', '5', '68950', '83409', '8'), +('10', '70', '5', '70705', '58233', '8'), +('10', '70', '5', '47276', '57360', '8'), +('10', '70', '8', '69064', '83585', '8'), +('10', '70', '8', '47306', '58655', '8'), +('10', '70', '8', '47304', '50794', '8'), +('10', '70', '8', '69164', '50721', '8'), +('10', '70', '6', '47280', '65077', '8'), +('10', '70', '6', '69073', '57954', '8'), +('10', '70', '6', '13647', '57895', '8'), +('10', '70', '6', '47229', '57419', '8'), +('10', '70', '17', '69151', '65496', '8'), +('10', '70', '17', '70921', '59574', '8'), +('10', '70', '17', '47649', '55840', '8'), +('10', '70', '17', '71095', '53702', '8'), +('10', '70', '7', '68886', '52342', '8'), +('10', '70', '7', '70917', '51971', '8'), +('10', '70', '7', '47205', '46908', '8'), +('10', '70', '7', '70711', '45759', '8'), +('10', '70', '9', '69127', '69922', '8'), +('10', '70', '9', '68767', '51403', '8'), +('10', '70', '9', '70918', '51234', '8'), +('10', '70', '9', '47221', '46967', '8'), +('10', '70', '15', '69160', '86246', '8'), +('10', '70', '15', '47238', '82597', '8'), +('10', '70', '15', '47291', '72537', '8'), +('10', '70', '15', '47290', '54392', '8'), +('10', '70', '20', '47284', '81792', '8'), +('10', '70', '20', '47282', '74154', '8'), +('10', '70', '20', '68951', '56596', '8'), +('10', '70', '20', '47281', '51663', '8'), +('10', '70', '12', '70919', '97189', '8'), +('10', '70', '12', '69253', '46960', '8'), +('10', '70', '12', '47213', '46906', '8'), +('10', '70', '12', '69084', '45606', '8'), +('10', '70', '18', '70922', '84947', '8'), +('10', '70', '18', '69147', '52759', '8'), +('10', '70', '18', '47201', '47825', '8'), +('10', '70', '18', '68975', '42139', '8'), +('10', '70', '19', '47217', '65518', '8'), +('10', '70', '19', '70920', '64116', '8'), +('10', '70', '19', '71081', '49255', '8'), +('10', '70', '19', '69178', '46547', '8'), +('10', '70', '13', '57405', '57681', '8'), +('10', '70', '13', '47308', '52375', '8'), +('10', '70', '13', '47307', '51531', '8'), +('10', '70', '13', '69098', '48799', '8'), +('10', '70', '14', '69155', '86367', '8'), +('10', '70', '14', '39315', '68931', '8'), +('10', '70', '14', '27280', '60825', '8'), +('10', '70', '14', '47308', '52375', '8'), +('10', '70', '11', '68952', '69397', '8'), +('10', '70', '11', '20898', '55213', '8'), +('10', '70', '11', '47298', '51400', '8'), +('10', '70', '11', '47296', '50828', '8'), +('10', '71', '22', '12425', '0', '11'), +('10', '71', '22', '21807', '0', '11'), +('10', '71', '22', '39342', '0', '11'), +('10', '71', '22', '7867', '0', '11'), +('10', '71', '1', '39329', '123110', '11'), +('10', '71', '1', '71668', '75112', '11'), +('10', '71', '1', '83662', '70044', '11'), +('10', '71', '1', '83630', '65902', '11'), +('10', '71', '2', '83561', '56797', '11'), +('10', '71', '2', '70916', '53133', '11'), +('10', '71', '2', '83551', '50594', '11'), +('10', '71', '2', '47209', '46833', '11'), +('10', '71', '3', '69068', '80126', '11'), +('10', '71', '3', '70620', '72842', '11'), +('10', '71', '3', '39368', '71170', '11'), +('10', '71', '3', '83636', '66373', '11'), +('10', '71', '5', '83612', '84273', '11'), +('10', '71', '5', '69097', '81201', '11'), +('10', '71', '5', '68950', '81163', '11'), +('10', '71', '5', '39366', '70981', '11'), +('10', '71', '8', '39293', '122217', '11'), +('10', '71', '8', '83532', '85191', '11'), +('10', '71', '8', '83659', '83388', '11'), +('10', '71', '8', '69064', '81591', '11'), +('10', '71', '6', '71666', '103968', '11'), +('10', '71', '6', '83660', '76899', '11'), +('10', '71', '6', '39269', '73725', '11'), +('10', '71', '6', '39362', '64794', '11'), +('10', '71', '17', '83604', '68992', '11'), +('10', '71', '17', '69151', '64600', '11'), +('10', '71', '17', '70921', '59580', '11'), +('10', '71', '17', '47649', '54597', '11'), +('10', '71', '7', '39273', '58656', '11'), +('10', '71', '7', '83565', '57847', '11'), +('10', '71', '7', '83495', '53933', '11'), +('10', '71', '7', '70917', '51976', '11'), +('10', '71', '9', '51707', '125339', '11'), +('10', '71', '9', '39225', '88511', '11'), +('10', '71', '9', '69127', '68676', '11'), +('10', '71', '9', '39345', '63290', '11'), +('10', '71', '15', '83629', '121673', '11'), +('10', '71', '15', '69160', '84247', '11'), +('10', '71', '15', '47238', '80852', '11'), +('10', '71', '15', '39277', '77727', '11'), +('10', '71', '20', '47284', '80295', '11'), +('10', '71', '20', '47282', '73157', '11'), +('10', '71', '20', '39350', '64603', '11'), +('10', '71', '20', '83600', '64573', '11'), +('10', '71', '12', '70919', '94946', '11'), +('10', '71', '12', '39356', '85044', '11'), +('10', '71', '12', '83569', '58221', '11'), +('10', '71', '12', '39219', '52989', '11'), +('10', '71', '18', '83608', '126439', '11'), +('10', '71', '18', '70922', '83448', '11'), +('10', '71', '18', '69147', '52513', '11'), +('10', '71', '18', '71647', '50272', '11'), +('10', '71', '19', '83573', '94371', '11'), +('10', '71', '19', '47217', '64623', '11'), +('10', '71', '19', '70920', '63524', '11'), +('10', '71', '19', '83541', '50241', '11'), +('10', '71', '13', '39211', '75048', '11'), +('10', '71', '13', '83460', '74489', '11'), +('10', '71', '13', '83631', '72147', '11'), +('10', '71', '13', '83508', '67779', '11'), +('10', '71', '14', '69155', '84367', '11'), +('10', '71', '14', '39211', '75048', '11'), +('10', '71', '14', '83460', '74489', '11'), +('10', '71', '14', '39372', '71073', '11'), +('10', '71', '11', '39287', '122338', '11'), +('10', '71', '11', '39371', '70903', '11'), +('10', '71', '11', '39320', '67934', '11'), +('10', '71', '11', '68952', '67902', '11'), +('10', '72', '22', '12425', '0', '11'), +('10', '72', '22', '21807', '0', '11'), +('10', '72', '22', '39342', '0', '11'), +('10', '72', '22', '7867', '0', '11'), +('10', '72', '1', '39329', '120115', '11'), +('10', '72', '1', '71668', '74118', '11'), +('10', '72', '1', '83662', '69702', '11'), +('10', '72', '1', '83630', '65556', '11'), +('10', '72', '2', '83561', '56804', '11'), +('10', '72', '2', '70916', '53139', '11'), +('10', '72', '2', '83551', '50598', '11'), +('10', '72', '2', '47209', '46838', '11'), +('10', '72', '3', '69068', '77882', '11'), +('10', '72', '3', '39368', '71177', '11'), +('10', '72', '3', '70620', '71096', '11'), +('10', '72', '3', '83636', '66029', '11'), +('10', '72', '5', '83612', '83079', '11'), +('10', '72', '5', '69097', '78956', '11'), +('10', '72', '5', '68950', '78918', '11'), +('10', '72', '5', '39366', '70989', '11'), +('10', '72', '8', '39293', '119222', '11'), +('10', '72', '8', '83532', '83196', '11'), +('10', '72', '8', '83659', '82388', '11'), +('10', '72', '8', '69064', '79596', '11'), +('10', '72', '6', '71666', '101474', '11'), +('10', '72', '6', '83660', '76200', '11'), +('10', '72', '6', '39269', '73031', '11'), +('10', '72', '6', '39362', '64802', '11'), +('10', '72', '17', '83604', '68798', '11'), +('10', '72', '17', '69151', '63704', '11'), +('10', '72', '17', '70921', '59586', '11'), +('10', '72', '17', '47649', '53354', '11'), +('10', '72', '7', '39273', '58660', '11'), +('10', '72', '7', '83565', '57854', '11'), +('10', '72', '7', '83495', '53637', '11'), +('10', '72', '7', '70917', '51981', '11'), +('10', '72', '9', '51707', '122345', '11'), +('10', '72', '9', '39225', '86766', '11'), +('10', '72', '9', '69127', '67429', '11'), +('10', '72', '9', '39345', '63295', '11'), +('10', '72', '15', '83629', '118680', '11'), +('10', '72', '15', '69160', '82248', '11'), +('10', '72', '15', '47238', '79107', '11'), +('10', '72', '15', '39277', '76731', '11'), +('10', '72', '20', '47284', '78798', '11'), +('10', '72', '20', '47282', '72161', '11'), +('10', '72', '20', '39350', '64609', '11'), +('10', '72', '20', '83600', '64230', '11'), +('10', '72', '12', '70919', '92703', '11'), +('10', '72', '12', '39356', '84049', '11'), +('10', '72', '12', '83569', '58228', '11'), +('10', '72', '12', '39219', '52994', '11'), +('10', '72', '18', '83608', '123445', '11'), +('10', '72', '18', '70922', '81949', '11'), +('10', '72', '18', '69147', '52267', '11'), +('10', '72', '18', '71647', '50026', '11'), +('10', '72', '19', '83573', '92628', '11'), +('10', '72', '19', '47217', '63727', '11'), +('10', '72', '19', '70920', '62932', '11'), +('10', '72', '19', '83541', '50245', '11'), +('10', '72', '13', '39211', '74054', '11'), +('10', '72', '13', '83460', '72744', '11'), +('10', '72', '13', '83631', '71453', '11'), +('10', '72', '13', '83508', '66784', '11'), +('10', '72', '14', '69155', '82368', '11'), +('10', '72', '14', '39211', '74054', '11'), +('10', '72', '14', '83460', '72744', '11'), +('10', '72', '14', '39372', '71080', '11'), +('10', '72', '11', '39287', '119343', '11'), +('10', '72', '11', '39371', '70908', '11'), +('10', '72', '11', '39320', '67591', '11'), +('10', '72', '11', '68952', '66406', '11'), +('10', '73', '22', '12425', '0', '11'), +('10', '73', '22', '21807', '0', '11'), +('10', '73', '22', '39342', '0', '11'), +('10', '73', '22', '7867', '0', '11'), +('10', '73', '1', '39329', '117120', '11'), +('10', '73', '1', '71668', '73124', '11'), +('10', '73', '1', '83662', '69359', '11'), +('10', '73', '1', '83630', '65211', '11'), +('10', '73', '2', '83561', '56811', '11'), +('10', '73', '2', '70916', '53145', '11'), +('10', '73', '2', '83551', '50603', '11'), +('10', '73', '2', '47209', '46842', '11'), +('10', '73', '3', '69068', '75638', '11'), +('10', '73', '3', '39368', '71185', '11'), +('10', '73', '3', '70620', '69351', '11'), +('10', '73', '3', '83636', '65685', '11'), +('10', '73', '5', '83612', '81886', '11'), +('10', '73', '5', '69097', '76712', '11'), +('10', '73', '5', '68950', '76672', '11'), +('10', '73', '5', '39366', '70996', '11'), +('10', '73', '8', '39293', '116226', '11'), +('10', '73', '8', '83659', '81389', '11'), +('10', '73', '8', '83532', '81201', '11'), +('10', '73', '8', '69064', '77601', '11'), +('10', '73', '6', '71666', '98980', '11'), +('10', '73', '6', '83660', '75501', '11'), +('10', '73', '6', '39269', '72337', '11'), +('10', '73', '6', '39362', '64809', '11'), +('10', '73', '17', '83604', '68604', '11'), +('10', '73', '17', '69151', '62808', '11'), +('10', '73', '17', '70921', '59592', '11'), +('10', '73', '17', '47649', '52111', '11'), +('10', '73', '7', '39273', '58664', '11'), +('10', '73', '7', '83565', '57861', '11'), +('10', '73', '7', '83495', '53342', '11'), +('10', '73', '7', '70917', '51986', '11'), +('10', '73', '9', '51707', '119351', '11'), +('10', '73', '9', '39225', '85020', '11'), +('10', '73', '9', '69127', '66183', '11'), +('10', '73', '9', '39345', '63300', '11'), +('10', '73', '15', '83629', '115686', '11'), +('10', '73', '15', '69160', '80248', '11'), +('10', '73', '15', '47238', '77362', '11'), +('10', '73', '15', '39277', '75736', '11'), +('10', '73', '20', '47284', '77302', '11'), +('10', '73', '20', '47282', '71165', '11'), +('10', '73', '20', '39350', '64614', '11'), +('10', '73', '20', '39360', '64121', '11'), +('10', '73', '12', '70919', '90460', '11'), +('10', '73', '12', '39356', '83054', '11'), +('10', '73', '12', '83569', '58235', '11'), +('10', '73', '12', '39219', '52999', '11'), +('10', '73', '18', '83608', '120451', '11'), +('10', '73', '18', '70922', '80449', '11'), +('10', '73', '18', '69147', '52020', '11'), +('10', '73', '18', '71647', '49780', '11'), +('10', '73', '19', '83573', '90885', '11'), +('10', '73', '19', '47217', '62832', '11'), +('10', '73', '19', '70920', '62340', '11'), +('10', '73', '19', '83541', '50249', '11'), +('10', '73', '13', '39211', '73060', '11'), +('10', '73', '13', '83460', '71000', '11'), +('10', '73', '13', '83631', '70759', '11'), +('10', '73', '13', '83508', '65788', '11'), +('10', '73', '14', '69155', '80369', '11'), +('10', '73', '14', '39211', '73060', '11'), +('10', '73', '14', '39372', '71088', '11'), +('10', '73', '14', '83460', '71000', '11'), +('10', '73', '11', '39287', '116349', '11'), +('10', '73', '11', '39371', '70913', '11'), +('10', '73', '11', '39320', '67247', '11'), +('10', '73', '11', '39281', '65805', '11'), +('10', '74', '22', '12425', '0', '11'), +('10', '74', '22', '21807', '0', '11'), +('10', '74', '22', '39342', '0', '11'), +('10', '74', '22', '7867', '0', '11'), +('10', '74', '1', '39329', '114125', '11'), +('10', '74', '1', '71668', '72130', '11'), +('10', '74', '1', '83662', '69016', '11'), +('10', '74', '1', '83630', '64866', '11'), +('10', '74', '2', '83561', '56818', '11'), +('10', '74', '2', '70916', '53151', '11'), +('10', '74', '2', '83551', '50608', '11'), +('10', '74', '2', '47209', '46847', '11'), +('10', '74', '3', '69068', '73393', '11'), +('10', '74', '3', '39368', '71193', '11'), +('10', '74', '3', '70620', '67606', '11'), +('10', '74', '3', '83658', '65455', '11'), +('10', '74', '5', '83612', '80693', '11'), +('10', '74', '5', '69097', '74467', '11'), +('10', '74', '5', '68950', '74426', '11'), +('10', '74', '5', '39366', '71004', '11'), +('10', '74', '8', '39293', '113231', '11'), +('10', '74', '8', '83659', '80390', '11'), +('10', '74', '8', '83532', '79207', '11'), +('10', '74', '8', '69064', '75607', '11'), +('10', '74', '6', '71666', '96486', '11'), +('10', '74', '6', '83660', '74802', '11'), +('10', '74', '6', '39269', '71642', '11'), +('10', '74', '6', '39362', '64817', '11'), +('10', '74', '17', '83604', '68410', '11'), +('10', '74', '17', '69151', '61911', '11'), +('10', '74', '17', '70921', '59598', '11'), +('10', '74', '17', '47649', '50868', '11'), +('10', '74', '7', '39273', '58668', '11'), +('10', '74', '7', '83565', '57868', '11'), +('10', '74', '7', '83495', '53047', '11'), +('10', '74', '7', '70917', '51992', '11'), +('10', '74', '9', '51707', '116356', '11'), +('10', '74', '9', '39225', '83275', '11'), +('10', '74', '9', '69127', '64936', '11'), +('10', '74', '9', '39345', '63305', '11'), +('10', '74', '15', '83629', '112693', '11'), +('10', '74', '15', '69160', '78249', '11'), +('10', '74', '15', '47238', '75617', '11'), +('10', '74', '15', '39277', '74740', '11'), +('10', '74', '20', '47284', '75805', '11'), +('10', '74', '20', '47282', '70169', '11'), +('10', '74', '20', '39350', '64620', '11'), +('10', '74', '20', '39360', '64129', '11'), +('10', '74', '12', '70919', '88217', '11'), +('10', '74', '12', '39356', '82058', '11'), +('10', '74', '12', '83569', '58242', '11'), +('10', '74', '12', '39219', '53003', '11'), +('10', '74', '18', '83608', '117457', '11'), +('10', '74', '18', '70922', '78950', '11'), +('10', '74', '18', '69147', '51774', '11'), +('10', '74', '18', '71647', '49534', '11'), +('10', '74', '19', '83573', '89142', '11'), +('10', '74', '19', '47217', '61936', '11'), +('10', '74', '19', '70920', '61748', '11'), +('10', '74', '19', '83541', '50253', '11'), +('10', '74', '13', '39211', '72065', '11'), +('10', '74', '13', '83631', '70065', '11'), +('10', '74', '13', '83460', '69255', '11'), +('10', '74', '13', '39295', '65340', '11'), +('10', '74', '14', '69155', '78369', '11'), +('10', '74', '14', '39211', '72065', '11'), +('10', '74', '14', '39372', '71095', '11'), +('10', '74', '14', '83460', '69255', '11'), +('10', '74', '11', '39287', '113354', '11'), +('10', '74', '11', '39371', '70918', '11'), +('10', '74', '11', '39320', '66904', '11'), +('10', '74', '11', '39281', '65460', '11'), +('10', '75', '22', '12425', '0', '13'), +('10', '75', '22', '39342', '0', '13'), +('10', '75', '22', '7867', '0', '13'), +('10', '75', '22', '23597', '0', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '75', '1', '39329', '111130', '13'), +('10', '75', '1', '80676', '98587', '13'), +('10', '75', '1', '80660', '94273', '13'), +('10', '75', '1', '80639', '90023', '13'), +('10', '75', '2', '53424', '77033', '13'), +('10', '75', '2', '83561', '56825', '13'), +('10', '75', '2', '70916', '53157', '13'), +('10', '75', '2', '83551', '50613', '13'), +('10', '75', '3', '80647', '90199', '13'), +('10', '75', '3', '46874', '79343', '13'), +('10', '75', '3', '46923', '78999', '13'), +('10', '75', '3', '46852', '72038', '13'), +('10', '75', '5', '80661', '95322', '13'), +('10', '75', '5', '46934', '85817', '13'), +('10', '75', '5', '80626', '85624', '13'), +('10', '75', '5', '83612', '79499', '13'), +('10', '75', '8', '39293', '110235', '13'), +('10', '75', '8', '80689', '98868', '13'), +('10', '75', '8', '80649', '89999', '13'), +('10', '75', '8', '46936', '85633', '13'), +('10', '75', '6', '71666', '93993', '13'), +('10', '75', '6', '80645', '90248', '13'), +('10', '75', '6', '46883', '85816', '13'), +('10', '75', '6', '46933', '85538', '13'), +('10', '75', '17', '83604', '68216', '13'), +('10', '75', '17', '46825', '63595', '13'), +('10', '75', '17', '69151', '61015', '13'), +('10', '75', '17', '70921', '59604', '13'), +('10', '75', '7', '53425', '76676', '13'), +('10', '75', '7', '39273', '58673', '13'), +('10', '75', '7', '83565', '57875', '13'), +('10', '75', '7', '83495', '52751', '13'), +('10', '75', '9', '51707', '113362', '13'), +('10', '75', '9', '46937', '85617', '13'), +('10', '75', '9', '39225', '81530', '13'), +('10', '75', '9', '53426', '76812', '13'), +('10', '75', '15', '83629', '109699', '13'), +('10', '75', '15', '79909', '102396', '13'), +('10', '75', '15', '80686', '98618', '13'), +('10', '75', '15', '80656', '94397', '13'), +('10', '75', '20', '80690', '98868', '13'), +('10', '75', '20', '46886', '85899', '13'), +('10', '75', '20', '80620', '85100', '13'), +('10', '75', '20', '46869', '79157', '13'), +('10', '75', '12', '70919', '85974', '13'), +('10', '75', '12', '39356', '81063', '13'), +('10', '75', '12', '53427', '76725', '13'), +('10', '75', '12', '53949', '76325', '13'), +('10', '75', '18', '83608', '114463', '13'), +('10', '75', '18', '53430', '78841', '13'), +('10', '75', '18', '70922', '77451', '13'), +('10', '75', '18', '46818', '63229', '13'), +('10', '75', '19', '83573', '87399', '13'), +('10', '75', '19', '70920', '61156', '13'), +('10', '75', '19', '47217', '61040', '13'), +('10', '75', '19', '83541', '50257', '13'), +('10', '75', '13', '80633', '89591', '13'), +('10', '75', '13', '80624', '83289', '13'), +('10', '75', '13', '39211', '71071', '13'), +('10', '75', '13', '46991', '69435', '13'), +('10', '75', '14', '80665', '92455', '13'), +('10', '75', '14', '80625', '84652', '13'), +('10', '75', '14', '46925', '79223', '13'), +('10', '75', '14', '46875', '78502', '13'), +('10', '75', '11', '39287', '110360', '13'), +('10', '75', '11', '80668', '98742', '13'), +('10', '75', '11', '46939', '86223', '13'), +('10', '75', '11', '80619', '85924', '13'), +('10', '75', '22', '12425', '0', '12'), +('10', '75', '22', '39342', '0', '12'), +('10', '75', '22', '7867', '0', '12'), +('10', '75', '22', '23597', '0', '12'), +('10', '75', '1', '39329', '111130', '12'), +('10', '75', '1', '46882', '85786', '12'), +('10', '75', '1', '46865', '79473', '12'), +('10', '75', '1', '46914', '79102', '12'), +('10', '75', '2', '53424', '77033', '12'), +('10', '75', '2', '83561', '56825', '12'), +('10', '75', '2', '70916', '53157', '12'), +('10', '75', '2', '83551', '50613', '12'), +('10', '75', '3', '46874', '79343', '12'), +('10', '75', '3', '46923', '78999', '12'), +('10', '75', '3', '46852', '72038', '12'), +('10', '75', '3', '46902', '71329', '12'), +('10', '75', '5', '46934', '85817', '12'), +('10', '75', '5', '83612', '79499', '12'), +('10', '75', '5', '46868', '79353', '12'), +('10', '75', '5', '46917', '79315', '12'), +('10', '75', '8', '39293', '110235', '12'), +('10', '75', '8', '46936', '85633', '12'), +('10', '75', '8', '83659', '79391', '12'), +('10', '75', '8', '83532', '77212', '12'), +('10', '75', '6', '71666', '93993', '12'), +('10', '75', '6', '46883', '85816', '12'), +('10', '75', '6', '46933', '85538', '12'), +('10', '75', '6', '46884', '85096', '12'), +('10', '75', '17', '83604', '68216', '12'), +('10', '75', '17', '46825', '63595', '12'), +('10', '75', '17', '69151', '61015', '12'), +('10', '75', '17', '70921', '59604', '12'), +('10', '75', '7', '53425', '76676', '12'), +('10', '75', '7', '39273', '58673', '12'), +('10', '75', '7', '83565', '57875', '12'), +('10', '75', '7', '83495', '52751', '12'), +('10', '75', '9', '51707', '113362', '12'), +('10', '75', '9', '46937', '85617', '12'), +('10', '75', '9', '39225', '81530', '12'), +('10', '75', '9', '53426', '76812', '12'), +('10', '75', '15', '83629', '109699', '12'), +('10', '75', '15', '46932', '85873', '12'), +('10', '75', '15', '46864', '79627', '12'), +('10', '75', '15', '46915', '78979', '12'), +('10', '75', '20', '46886', '85899', '12'), +('10', '75', '20', '46869', '79157', '12'), +('10', '75', '20', '46920', '79107', '12'), +('10', '75', '20', '47284', '74309', '12'), +('10', '75', '12', '70919', '85974', '12'), +('10', '75', '12', '39356', '81063', '12'), +('10', '75', '12', '53427', '76725', '12'), +('10', '75', '12', '53949', '76325', '12'), +('10', '75', '18', '83608', '114463', '12'), +('10', '75', '18', '53430', '78841', '12'), +('10', '75', '18', '70922', '77451', '12'), +('10', '75', '18', '46818', '63229', '12'), +('10', '75', '19', '83573', '87399', '12'), +('10', '75', '19', '70920', '61156', '12'), +('10', '75', '19', '47217', '61040', '12'), +('10', '75', '19', '83541', '50257', '12'), +('10', '75', '13', '39211', '71071', '12'), +('10', '75', '13', '46991', '69435', '12'), +('10', '75', '13', '83631', '69372', '12'), +('10', '75', '13', '83460', '67511', '12'), +('10', '75', '14', '46925', '79223', '12'), +('10', '75', '14', '46875', '78502', '12'), +('10', '75', '14', '69155', '76370', '12'), +('10', '75', '14', '46903', '72370', '12'), +('10', '75', '11', '39287', '110360', '12'), +('10', '75', '11', '46939', '86223', '12'), +('10', '75', '11', '46889', '84960', '12'), +('10', '75', '11', '46899', '72261', '12'), +('10', '76', '22', '12425', '0', '13'), +('10', '76', '22', '39342', '0', '13'), +('10', '76', '22', '7867', '0', '13'), +('10', '76', '22', '23597', '0', '13'), +('10', '76', '1', '39329', '108135', '13'), +('10', '76', '1', '80676', '98594', '13'), +('10', '76', '1', '80660', '94281', '13'), +('10', '76', '1', '80639', '90030', '13'), +('10', '76', '2', '53424', '77040', '13'), +('10', '76', '2', '83561', '56832', '13'), +('10', '76', '2', '70916', '53163', '13'), +('10', '76', '2', '83551', '50617', '13'), +('10', '76', '3', '80647', '90206', '13'), +('10', '76', '3', '46874', '79350', '13'), +('10', '76', '3', '46923', '79006', '13'), +('10', '76', '3', '46852', '72046', '13'), +('10', '76', '5', '80661', '95330', '13'), +('10', '76', '5', '46934', '85825', '13'), +('10', '76', '5', '80626', '85631', '13'), +('10', '76', '5', '46868', '79361', '13'), +('10', '76', '8', '39293', '107239', '13'), +('10', '76', '8', '80689', '98876', '13'), +('10', '76', '8', '80649', '90006', '13'), +('10', '76', '8', '46936', '85641', '13'), +('10', '76', '6', '71666', '91499', '13'), +('10', '76', '6', '80645', '90256', '13'), +('10', '76', '6', '46883', '85824', '13'), +('10', '76', '6', '46933', '85545', '13'), +('10', '76', '17', '83604', '68022', '13'), +('10', '76', '17', '46825', '63599', '13'), +('10', '76', '17', '69151', '60119', '13'), +('10', '76', '17', '70921', '59609', '13'), +('10', '76', '7', '53425', '76683', '13'), +('10', '76', '7', '39273', '58677', '13'), +('10', '76', '7', '83565', '57882', '13'), +('10', '76', '7', '83495', '52456', '13'), +('10', '76', '9', '51707', '110368', '13'), +('10', '76', '9', '46937', '85625', '13'), +('10', '76', '9', '39225', '79784', '13'), +('10', '76', '9', '53426', '76819', '13'), +('10', '76', '15', '83629', '106706', '13'), +('10', '76', '15', '79909', '102403', '13'), +('10', '76', '15', '80686', '98626', '13'), +('10', '76', '15', '80656', '94405', '13'), +('10', '76', '20', '80690', '98876', '13'), +('10', '76', '20', '46886', '85908', '13'), +('10', '76', '20', '80620', '85101', '13'), +('10', '76', '20', '46869', '79165', '13'), +('10', '76', '12', '70919', '83731', '13'), +('10', '76', '12', '39356', '80068', '13'), +('10', '76', '12', '53427', '76730', '13'), +('10', '76', '12', '53949', '76330', '13'), +('10', '76', '18', '83608', '111469', '13'), +('10', '76', '18', '53430', '78849', '13'), +('10', '76', '18', '70922', '75952', '13'), +('10', '76', '18', '46818', '63234', '13'), +('10', '76', '19', '83573', '85656', '13'), +('10', '76', '19', '70920', '60564', '13'), +('10', '76', '19', '47217', '60145', '13'), +('10', '76', '19', '83541', '50261', '13'), +('10', '76', '13', '80633', '89597', '13'), +('10', '76', '13', '80624', '83295', '13'), +('10', '76', '13', '39211', '70076', '13'), +('10', '76', '13', '46991', '69443', '13'), +('10', '76', '14', '80665', '92461', '13'), +('10', '76', '14', '80625', '84658', '13'), +('10', '76', '14', '46925', '79230', '13'), +('10', '76', '14', '46875', '78507', '13'), +('10', '76', '11', '39287', '107365', '13'), +('10', '76', '11', '80668', '98751', '13'), +('10', '76', '11', '46939', '86231', '13'), +('10', '76', '11', '80619', '85931', '13'), +('10', '77', '22', '12425', '0', '13'), +('10', '77', '22', '39342', '0', '13'), +('10', '77', '22', '7867', '0', '13'), +('10', '77', '22', '23597', '0', '13'), +('10', '77', '1', '39329', '105140', '13'), +('10', '77', '1', '80676', '98601', '13'), +('10', '77', '1', '80660', '94289', '13'), +('10', '77', '1', '80639', '90037', '13'), +('10', '77', '2', '53424', '77047', '13'), +('10', '77', '2', '83561', '56839', '13'), +('10', '77', '2', '70916', '53169', '13'), +('10', '77', '2', '83551', '50622', '13'), +('10', '77', '3', '80647', '90213', '13'), +('10', '77', '3', '46874', '79358', '13'), +('10', '77', '3', '46923', '79013', '13'), +('10', '77', '3', '46852', '72053', '13'), +('10', '77', '5', '80661', '95338', '13'), +('10', '77', '5', '46934', '85833', '13'), +('10', '77', '5', '80626', '85638', '13'), +('10', '77', '5', '46868', '79369', '13'), +('10', '77', '8', '39293', '104244', '13'), +('10', '77', '8', '80689', '98885', '13'), +('10', '77', '8', '80649', '90013', '13'), +('10', '77', '8', '46936', '85649', '13'), +('10', '77', '6', '80645', '90263', '13'), +('10', '77', '6', '71666', '89005', '13'), +('10', '77', '6', '46883', '85833', '13'), +('10', '77', '6', '46933', '85553', '13'), +('10', '77', '17', '83604', '67828', '13'), +('10', '77', '17', '46825', '63602', '13'), +('10', '77', '17', '70921', '59615', '13'), +('10', '77', '17', '69151', '59223', '13'), +('10', '77', '7', '53425', '76690', '13'), +('10', '77', '7', '39273', '58681', '13'), +('10', '77', '7', '83565', '57889', '13'), +('10', '77', '7', '83495', '52160', '13'), +('10', '77', '9', '51707', '107374', '13'), +('10', '77', '9', '46937', '85633', '13'), +('10', '77', '9', '39225', '78039', '13'), +('10', '77', '9', '53426', '76826', '13'), +('10', '77', '15', '83629', '103713', '13'), +('10', '77', '15', '79909', '102410', '13'), +('10', '77', '15', '80686', '98634', '13'), +('10', '77', '15', '80656', '94412', '13'), +('10', '77', '20', '80690', '98885', '13'), +('10', '77', '20', '46886', '85917', '13'), +('10', '77', '20', '80620', '85102', '13'), +('10', '77', '20', '46869', '79173', '13'), +('10', '77', '12', '70919', '81488', '13'), +('10', '77', '12', '39356', '79073', '13'), +('10', '77', '12', '53427', '76735', '13'), +('10', '77', '12', '53949', '76335', '13'), +('10', '77', '18', '83608', '108475', '13'), +('10', '77', '18', '53430', '78856', '13'), +('10', '77', '18', '70922', '74453', '13'), +('10', '77', '18', '46818', '63238', '13'), +('10', '77', '19', '83573', '83913', '13'), +('10', '77', '19', '70920', '59972', '13'), +('10', '77', '19', '47217', '59249', '13'), +('10', '77', '19', '83541', '50265', '13'), +('10', '77', '13', '80633', '89603', '13'), +('10', '77', '13', '80624', '83301', '13'), +('10', '77', '13', '46991', '69450', '13'), +('10', '77', '13', '39211', '69082', '13'), +('10', '77', '14', '80665', '92467', '13'), +('10', '77', '14', '80625', '84664', '13'), +('10', '77', '14', '46925', '79237', '13'), +('10', '77', '14', '46875', '78513', '13'), +('10', '77', '11', '39287', '104370', '13'), +('10', '77', '11', '80668', '98759', '13'), +('10', '77', '11', '46939', '86239', '13'), +('10', '77', '11', '80619', '85938', '13'), +('10', '78', '22', '12425', '0', '13'), +('10', '78', '22', '39342', '0', '13'), +('10', '78', '22', '7867', '0', '13'), +('10', '78', '22', '23597', '0', '13'), +('10', '78', '1', '39329', '102145', '13'), +('10', '78', '1', '80676', '98608', '13'), +('10', '78', '1', '80660', '94297', '13'), +('10', '78', '1', '80639', '90045', '13'), +('10', '78', '2', '53424', '77054', '13'), +('10', '78', '2', '83561', '56846', '13'), +('10', '78', '2', '70916', '53175', '13'), +('10', '78', '2', '83551', '50627', '13'), +('10', '78', '3', '80647', '90221', '13'), +('10', '78', '3', '46874', '79366', '13'), +('10', '78', '3', '46923', '79020', '13'), +('10', '78', '3', '46852', '72061', '13'), +('10', '78', '5', '80661', '95346', '13'), +('10', '78', '5', '46934', '85841', '13'), +('10', '78', '5', '80626', '85645', '13'), +('10', '78', '5', '46868', '79377', '13'), +('10', '78', '8', '39293', '101248', '13'), +('10', '78', '8', '80689', '98893', '13'), +('10', '78', '8', '80649', '90021', '13'), +('10', '78', '8', '46936', '85658', '13'), +('10', '78', '6', '80645', '90270', '13'), +('10', '78', '6', '71666', '86511', '13'), +('10', '78', '6', '46883', '85841', '13'), +('10', '78', '6', '46933', '85561', '13'), +('10', '78', '17', '83604', '67634', '13'), +('10', '78', '17', '46825', '63606', '13'), +('10', '78', '17', '70921', '59621', '13'), +('10', '78', '17', '69151', '58326', '13'), +('10', '78', '7', '53425', '76696', '13'), +('10', '78', '7', '39273', '58685', '13'), +('10', '78', '7', '83565', '57896', '13'), +('10', '78', '7', '70917', '52012', '13'), +('10', '78', '9', '51707', '104379', '13'), +('10', '78', '9', '46937', '85641', '13'), +('10', '78', '9', '53426', '76832', '13'), +('10', '78', '9', '39225', '76293', '13'), +('10', '78', '15', '79909', '102417', '13'), +('10', '78', '15', '83629', '100719', '13'), +('10', '78', '15', '80686', '98643', '13'), +('10', '78', '15', '80656', '94420', '13'), +('10', '78', '20', '80690', '98893', '13'), +('10', '78', '20', '46886', '85926', '13'), +('10', '78', '20', '80620', '85102', '13'), +('10', '78', '20', '46869', '79180', '13'), +('10', '78', '12', '70919', '79245', '13'), +('10', '78', '12', '39356', '78077', '13'), +('10', '78', '12', '53427', '76740', '13'), +('10', '78', '12', '53949', '76340', '13'), +('10', '78', '18', '83608', '105481', '13'), +('10', '78', '18', '53430', '78864', '13'), +('10', '78', '18', '70922', '72954', '13'), +('10', '78', '18', '46818', '63243', '13'), +('10', '78', '19', '83573', '82170', '13'), +('10', '78', '19', '70920', '59380', '13'), +('10', '78', '19', '47217', '58354', '13'), +('10', '78', '19', '83541', '50269', '13'), +('10', '78', '13', '80633', '89608', '13'), +('10', '78', '13', '80624', '83307', '13'), +('10', '78', '13', '46991', '69458', '13'), +('10', '78', '13', '39211', '68087', '13'), +('10', '78', '14', '80665', '92473', '13'), +('10', '78', '14', '80625', '84670', '13'), +('10', '78', '14', '46925', '79244', '13'), +('10', '78', '14', '46875', '78518', '13'), +('10', '78', '11', '39287', '101376', '13'), +('10', '78', '11', '80668', '98767', '13'), +('10', '78', '11', '46939', '86247', '13'), +('10', '78', '11', '80619', '85945', '13'), +('10', '79', '22', '12425', '0', '13'), +('10', '79', '22', '39342', '0', '13'), +('10', '79', '22', '7867', '0', '13'), +('10', '79', '22', '23597', '0', '13'), +('10', '79', '1', '39329', '99150', '13'), +('10', '79', '1', '80676', '98616', '13'), +('10', '79', '1', '80660', '94304', '13'), +('10', '79', '1', '80639', '90052', '13'), +('10', '79', '2', '53424', '77061', '13'), +('10', '79', '2', '83561', '56852', '13'), +('10', '79', '2', '70916', '53181', '13'), +('10', '79', '2', '83551', '50632', '13'), +('10', '79', '3', '80647', '90228', '13'), +('10', '79', '3', '46874', '79374', '13'), +('10', '79', '3', '46923', '79027', '13'), +('10', '79', '3', '46852', '72069', '13'), +('10', '79', '5', '80661', '95354', '13'), +('10', '79', '5', '46934', '85849', '13'), +('10', '79', '5', '80626', '85652', '13'), +('10', '79', '5', '46868', '79385', '13'), +('10', '79', '8', '80689', '98901', '13'), +('10', '79', '8', '39293', '98253', '13'), +('10', '79', '8', '80649', '90028', '13'), +('10', '79', '8', '46936', '85666', '13'), +('10', '79', '6', '80645', '90278', '13'), +('10', '79', '6', '46883', '85849', '13'), +('10', '79', '6', '46933', '85569', '13'), +('10', '79', '6', '46884', '85125', '13'), +('10', '79', '17', '83604', '67440', '13'), +('10', '79', '17', '46825', '63610', '13'), +('10', '79', '17', '70921', '59627', '13'), +('10', '79', '17', '69151', '57430', '13'), +('10', '79', '7', '53425', '76703', '13'), +('10', '79', '7', '39273', '58690', '13'), +('10', '79', '7', '83565', '57903', '13'), +('10', '79', '7', '70917', '52018', '13'), +('10', '79', '9', '51707', '101385', '13'), +('10', '79', '9', '46937', '85649', '13'), +('10', '79', '9', '53426', '76839', '13'), +('10', '79', '9', '39225', '74548', '13'), +('10', '79', '15', '79909', '102424', '13'), +('10', '79', '15', '80686', '98651', '13'), +('10', '79', '15', '83629', '97726', '13'), +('10', '79', '15', '80656', '94428', '13'), +('10', '79', '20', '80690', '98901', '13'), +('10', '79', '20', '46886', '85935', '13'), +('10', '79', '20', '80620', '85103', '13'), +('10', '79', '20', '46869', '79188', '13'), +('10', '79', '12', '39356', '77082', '13'), +('10', '79', '12', '70919', '77001', '13'), +('10', '79', '12', '53427', '76745', '13'), +('10', '79', '12', '53949', '76345', '13'), +('10', '79', '18', '83608', '102487', '13'), +('10', '79', '18', '53430', '78872', '13'), +('10', '79', '18', '70922', '71455', '13'), +('10', '79', '18', '46818', '63247', '13'), +('10', '79', '19', '83573', '80426', '13'), +('10', '79', '19', '70920', '58788', '13'), +('10', '79', '19', '47217', '57458', '13'), +('10', '79', '19', '83541', '50273', '13'), +('10', '79', '13', '80633', '89614', '13'), +('10', '79', '13', '80624', '83312', '13'), +('10', '79', '13', '46991', '69466', '13'), +('10', '79', '13', '39211', '67093', '13'), +('10', '79', '14', '80665', '92478', '13'), +('10', '79', '14', '80625', '84675', '13'), +('10', '79', '14', '46925', '79251', '13'), +('10', '79', '14', '46875', '78523', '13'), +('10', '79', '11', '80668', '98775', '13'), +('10', '79', '11', '39287', '98381', '13'), +('10', '79', '11', '46939', '86255', '13'), +('10', '79', '11', '80619', '85952', '13'), +('10', '80', '22', '12425', '0', '14'), +('10', '80', '22', '39342', '0', '14'), +('10', '80', '22', '7867', '0', '14'), +('10', '80', '22', '23597', '0', '14'), +('10', '80', '1', '102611', '128784', '14'), +('10', '80', '1', '102625', '128458', '14'), +('10', '80', '1', '102639', '128287', '14'), +('10', '80', '1', '102640', '128286', '14'), +('10', '80', '2', '102010', '86536', '14'), +('10', '80', '2', '102262', '77804', '14'), +('10', '80', '2', '53424', '77068', '14'), +('10', '80', '2', '83561', '56859', '14'), +('10', '80', '3', '102612', '136701', '14'), +('10', '80', '3', '102626', '135881', '14'), +('10', '80', '3', '102742', '123832', '14'), +('10', '80', '3', '102560', '119621', '14'), +('10', '80', '5', '102731', '142346', '14'), +('10', '80', '5', '102613', '134149', '14'), +('10', '80', '5', '102627', '133111', '14'), +('10', '80', '5', '102730', '123748', '14'), +('10', '80', '8', '102728', '141202', '14'), +('10', '80', '8', '102615', '136685', '14'), +('10', '80', '8', '102629', '136245', '14'), +('10', '80', '8', '102569', '119721', '14'), +('10', '80', '6', '102614', '137480', '14'), +('10', '80', '6', '102628', '136391', '14'), +('10', '80', '6', '102561', '119831', '14'), +('10', '80', '6', '80645', '90285', '14'), +('10', '80', '17', '102013', '92288', '14'), +('10', '80', '17', '102265', '83041', '14'), +('10', '80', '17', '83604', '67246', '14'), +('10', '80', '17', '46825', '63614', '14'), +('10', '80', '7', '102011', '87676', '14'), +('10', '80', '7', '102263', '78530', '14'), +('10', '80', '7', '53425', '76710', '14'), +('10', '80', '7', '39273', '58694', '14'), +('10', '80', '9', '67098', '231065', '14'), +('10', '80', '9', '51707', '98391', '14'), +('10', '80', '9', '46937', '85657', '14'), +('10', '80', '9', '53426', '76846', '14'), +('10', '80', '15', '102723', '140901', '14'), +('10', '80', '15', '102616', '130567', '14'), +('10', '80', '15', '102636', '130041', '14'), +('10', '80', '15', '102635', '129773', '14'), +('10', '80', '20', '102617', '137050', '14'), +('10', '80', '20', '102631', '136574', '14'), +('10', '80', '20', '102563', '119478', '14'), +('10', '80', '20', '80690', '98910', '14'), +('10', '80', '12', '53427', '76750', '14'), +('10', '80', '12', '53949', '76350', '14'), +('10', '80', '12', '39356', '76087', '14'), +('10', '80', '12', '70919', '74758', '14'), +('10', '80', '18', '83608', '99493', '14'), +('10', '80', '18', '102012', '88831', '14'), +('10', '80', '18', '102264', '80548', '14'), +('10', '80', '18', '53430', '78880', '14'), +('10', '80', '19', '83573', '78683', '14'), +('10', '80', '19', '102261', '75801', '14'), +('10', '80', '19', '76131', '73145', '14'), +('10', '80', '19', '70920', '58196', '14'), +('10', '80', '13', '93856', '138176', '14'), +('10', '80', '13', '102735', '123072', '14'), +('10', '80', '13', '102734', '113728', '14'), +('10', '80', '13', '102582', '108976', '14'), +('10', '80', '14', '102632', '136358', '14'), +('10', '80', '14', '102633', '136341', '14'), +('10', '80', '14', '102570', '118550', '14'), +('10', '80', '14', '80665', '92484', '14'), +('10', '80', '11', '102643', '131452', '14'), +('10', '80', '11', '80668', '98784', '14'), +('10', '80', '11', '39287', '95387', '14'), +('10', '80', '11', '46939', '86263', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '81', '22', '12425', '0', '14'), +('10', '81', '22', '39342', '0', '14'), +('10', '81', '22', '7867', '0', '14'), +('10', '81', '22', '23597', '0', '14'), +('10', '81', '1', '102611', '128792', '14'), +('10', '81', '1', '102625', '128467', '14'), +('10', '81', '1', '102639', '128293', '14'), +('10', '81', '1', '102640', '128292', '14'), +('10', '81', '2', '102010', '86541', '14'), +('10', '81', '2', '102262', '77806', '14'), +('10', '81', '2', '53424', '77075', '14'), +('10', '81', '2', '83561', '56866', '14'), +('10', '81', '3', '102612', '136707', '14'), +('10', '81', '3', '102626', '135887', '14'), +('10', '81', '3', '102742', '123841', '14'), +('10', '81', '3', '102560', '119628', '14'), +('10', '81', '5', '102731', '142356', '14'), +('10', '81', '5', '102613', '134155', '14'), +('10', '81', '5', '102627', '133116', '14'), +('10', '81', '5', '102730', '123756', '14'), +('10', '81', '8', '102728', '141210', '14'), +('10', '81', '8', '102615', '136694', '14'), +('10', '81', '8', '102629', '136250', '14'), +('10', '81', '8', '102569', '119731', '14'), +('10', '81', '6', '102614', '137489', '14'), +('10', '81', '6', '102628', '136399', '14'), +('10', '81', '6', '102561', '119841', '14'), +('10', '81', '6', '80645', '90293', '14'), +('10', '81', '17', '102013', '92297', '14'), +('10', '81', '17', '102265', '83050', '14'), +('10', '81', '17', '83604', '67052', '14'), +('10', '81', '17', '46825', '63617', '14'), +('10', '81', '7', '102011', '87684', '14'), +('10', '81', '7', '102263', '78533', '14'), +('10', '81', '7', '53425', '76717', '14'), +('10', '81', '7', '39273', '58698', '14'), +('10', '81', '9', '67098', '233959', '14'), +('10', '81', '9', '51707', '95397', '14'), +('10', '81', '9', '46937', '85666', '14'), +('10', '81', '9', '53426', '76853', '14'), +('10', '81', '15', '102723', '140909', '14'), +('10', '81', '15', '102616', '130576', '14'), +('10', '81', '15', '102636', '130050', '14'), +('10', '81', '15', '102635', '129779', '14'), +('10', '81', '20', '102617', '137053', '14'), +('10', '81', '20', '102631', '136584', '14'), +('10', '81', '20', '102563', '119485', '14'), +('10', '81', '20', '80690', '98918', '14'), +('10', '81', '12', '53427', '76755', '14'), +('10', '81', '12', '53949', '76355', '14'), +('10', '81', '12', '39356', '75092', '14'), +('10', '81', '12', '102260', '74604', '14'), +('10', '81', '18', '83608', '96499', '14'), +('10', '81', '18', '102012', '88838', '14'), +('10', '81', '18', '102264', '80557', '14'), +('10', '81', '18', '53430', '78887', '14'), +('10', '81', '19', '83573', '76940', '14'), +('10', '81', '19', '102261', '75807', '14'), +('10', '81', '19', '76131', '73148', '14'), +('10', '81', '19', '70920', '57604', '14'), +('10', '81', '13', '93856', '139910', '14'), +('10', '81', '13', '102735', '123079', '14'), +('10', '81', '13', '102734', '113735', '14'), +('10', '81', '13', '102582', '108985', '14'), +('10', '81', '14', '102632', '136367', '14'), +('10', '81', '14', '102633', '136348', '14'), +('10', '81', '14', '102570', '118553', '14'), +('10', '81', '14', '80665', '92490', '14'), +('10', '81', '11', '102643', '131456', '14'), +('10', '81', '11', '80668', '98792', '14'), +('10', '81', '11', '39287', '92392', '14'), +('10', '81', '11', '46939', '86271', '14'), +('10', '82', '22', '12425', '0', '14'), +('10', '82', '22', '39342', '0', '14'), +('10', '82', '22', '7867', '0', '14'), +('10', '82', '22', '23597', '0', '14'), +('10', '82', '1', '102611', '128800', '14'), +('10', '82', '1', '102625', '128477', '14'), +('10', '82', '1', '102639', '128299', '14'), +('10', '82', '1', '102640', '128299', '14'), +('10', '82', '2', '102010', '86546', '14'), +('10', '82', '2', '102262', '77809', '14'), +('10', '82', '2', '53424', '77082', '14'), +('10', '82', '2', '83561', '56873', '14'), +('10', '82', '3', '102612', '136713', '14'), +('10', '82', '3', '102626', '135894', '14'), +('10', '82', '3', '102742', '123850', '14'), +('10', '82', '3', '102560', '119634', '14'), +('10', '82', '5', '102731', '142366', '14'), +('10', '82', '5', '102613', '134160', '14'), +('10', '82', '5', '102627', '133121', '14'), +('10', '82', '5', '102730', '123764', '14'), +('10', '82', '8', '102728', '141218', '14'), +('10', '82', '8', '102615', '136702', '14'), +('10', '82', '8', '102629', '136255', '14'), +('10', '82', '8', '102569', '119741', '14'), +('10', '82', '6', '102614', '137497', '14'), +('10', '82', '6', '102628', '136406', '14'), +('10', '82', '6', '102561', '119852', '14'), +('10', '82', '6', '80645', '90300', '14'), +('10', '82', '17', '102013', '92305', '14'), +('10', '82', '17', '102265', '83059', '14'), +('10', '82', '17', '83604', '66858', '14'), +('10', '82', '17', '46825', '63621', '14'), +('10', '82', '7', '102011', '87691', '14'), +('10', '82', '7', '102263', '78537', '14'), +('10', '82', '7', '53425', '76724', '14'), +('10', '82', '7', '39273', '58702', '14'), +('10', '82', '9', '67098', '236853', '14'), +('10', '82', '9', '51707', '92402', '14'), +('10', '82', '9', '46937', '85674', '14'), +('10', '82', '9', '53426', '76859', '14'), +('10', '82', '15', '102723', '140917', '14'), +('10', '82', '15', '102616', '130586', '14'), +('10', '82', '15', '102636', '130058', '14'), +('10', '82', '15', '102635', '129784', '14'), +('10', '82', '20', '102617', '137055', '14'), +('10', '82', '20', '102631', '136594', '14'), +('10', '82', '20', '102563', '119492', '14'), +('10', '82', '20', '80690', '98926', '14'), +('10', '82', '12', '53427', '76760', '14'), +('10', '82', '12', '53949', '76360', '14'), +('10', '82', '12', '102260', '74612', '14'), +('10', '82', '12', '39356', '74096', '14'), +('10', '82', '18', '83608', '93505', '14'), +('10', '82', '18', '102012', '88845', '14'), +('10', '82', '18', '102264', '80566', '14'), +('10', '82', '18', '53430', '78895', '14'), +('10', '82', '19', '102261', '75812', '14'), +('10', '82', '19', '83573', '75197', '14'), +('10', '82', '19', '76131', '73151', '14'), +('10', '82', '19', '70920', '57012', '14'), +('10', '82', '13', '93856', '141644', '14'), +('10', '82', '13', '102735', '123087', '14'), +('10', '82', '13', '102734', '113741', '14'), +('10', '82', '13', '102582', '108994', '14'), +('10', '82', '14', '102632', '136376', '14'), +('10', '82', '14', '102633', '136354', '14'), +('10', '82', '14', '102570', '118555', '14'), +('10', '82', '14', '80665', '92496', '14'), +('10', '82', '11', '102643', '131460', '14'), +('10', '82', '11', '80668', '98800', '14'), +('10', '82', '11', '39287', '89397', '14'), +('10', '82', '11', '46939', '86279', '14'), +('10', '83', '22', '12425', '0', '14'), +('10', '83', '22', '39342', '0', '14'), +('10', '83', '22', '7867', '0', '14'), +('10', '83', '22', '23597', '0', '14'), +('10', '83', '1', '102611', '128808', '14'), +('10', '83', '1', '102625', '128486', '14'), +('10', '83', '1', '102640', '128305', '14'), +('10', '83', '1', '102639', '128304', '14'), +('10', '83', '2', '102010', '86552', '14'), +('10', '83', '2', '102262', '77811', '14'), +('10', '83', '2', '53424', '77089', '14'), +('10', '83', '2', '83561', '56880', '14'), +('10', '83', '3', '102612', '136719', '14'), +('10', '83', '3', '102626', '135900', '14'), +('10', '83', '3', '102742', '123859', '14'), +('10', '83', '3', '102560', '119641', '14'), +('10', '83', '5', '102731', '142376', '14'), +('10', '83', '5', '102613', '134165', '14'), +('10', '83', '5', '102627', '133127', '14'), +('10', '83', '5', '102730', '123771', '14'), +('10', '83', '8', '102728', '141226', '14'), +('10', '83', '8', '102615', '136711', '14'), +('10', '83', '8', '102629', '136261', '14'), +('10', '83', '8', '102569', '119750', '14'), +('10', '83', '6', '102614', '137505', '14'), +('10', '83', '6', '102628', '136413', '14'), +('10', '83', '6', '102561', '119862', '14'), +('10', '83', '6', '80645', '90307', '14'), +('10', '83', '17', '102013', '92314', '14'), +('10', '83', '17', '102265', '83068', '14'), +('10', '83', '17', '83604', '66664', '14'), +('10', '83', '17', '46825', '63625', '14'), +('10', '83', '7', '102011', '87699', '14'), +('10', '83', '7', '102263', '78540', '14'), +('10', '83', '7', '53425', '76731', '14'), +('10', '83', '7', '39273', '58706', '14'), +('10', '83', '9', '67098', '239747', '14'), +('10', '83', '9', '51707', '89408', '14'), +('10', '83', '9', '46937', '85682', '14'), +('10', '83', '9', '53426', '76866', '14'), +('10', '83', '15', '102723', '140925', '14'), +('10', '83', '15', '102616', '130595', '14'), +('10', '83', '15', '102636', '130066', '14'), +('10', '83', '15', '102635', '129790', '14'), +('10', '83', '20', '102617', '137058', '14'), +('10', '83', '20', '102631', '136604', '14'), +('10', '83', '20', '102563', '119500', '14'), +('10', '83', '20', '80690', '98934', '14'), +('10', '83', '12', '53427', '76765', '14'), +('10', '83', '12', '53949', '76365', '14'), +('10', '83', '12', '102260', '74620', '14'), +('10', '83', '12', '39356', '73101', '14'), +('10', '83', '18', '83608', '90511', '14'), +('10', '83', '18', '102012', '88852', '14'), +('10', '83', '18', '102264', '80576', '14'), +('10', '83', '18', '53430', '78903', '14'), +('10', '83', '19', '102261', '75818', '14'), +('10', '83', '19', '83573', '73454', '14'), +('10', '83', '19', '76131', '73154', '14'), +('10', '83', '19', '70920', '56420', '14'), +('10', '83', '13', '93856', '143378', '14'), +('10', '83', '13', '102735', '123095', '14'), +('10', '83', '13', '102734', '113748', '14'), +('10', '83', '13', '102582', '109004', '14'), +('10', '83', '14', '102632', '136384', '14'), +('10', '83', '14', '102633', '136361', '14'), +('10', '83', '14', '102570', '118558', '14'), +('10', '83', '14', '80665', '92501', '14'), +('10', '83', '11', '102643', '131464', '14'), +('10', '83', '11', '80668', '98809', '14'), +('10', '83', '11', '39287', '86403', '14'), +('10', '83', '11', '46939', '86287', '14'), +('10', '84', '22', '12425', '0', '14'), +('10', '84', '22', '39342', '0', '14'), +('10', '84', '22', '7867', '0', '14'), +('10', '84', '22', '23597', '0', '14'), +('10', '84', '1', '102611', '128816', '14'), +('10', '84', '1', '102625', '128495', '14'), +('10', '84', '1', '102640', '128311', '14'), +('10', '84', '1', '102639', '128310', '14'), +('10', '84', '2', '102010', '86557', '14'), +('10', '84', '2', '102262', '77814', '14'), +('10', '84', '2', '53424', '77096', '14'), +('10', '84', '2', '83561', '56887', '14'), +('10', '84', '3', '102612', '136726', '14'), +('10', '84', '3', '102626', '135906', '14'), +('10', '84', '3', '102742', '123867', '14'), +('10', '84', '3', '102560', '119648', '14'), +('10', '84', '5', '102731', '142386', '14'), +('10', '84', '5', '102613', '134170', '14'), +('10', '84', '5', '102627', '133132', '14'), +('10', '84', '5', '102730', '123779', '14'), +('10', '84', '8', '102728', '141234', '14'), +('10', '84', '8', '102615', '136720', '14'), +('10', '84', '8', '102629', '136266', '14'), +('10', '84', '8', '102569', '119760', '14'), +('10', '84', '6', '102614', '137513', '14'), +('10', '84', '6', '102628', '136421', '14'), +('10', '84', '6', '102561', '119873', '14'), +('10', '84', '6', '80645', '90315', '14'), +('10', '84', '17', '102013', '92323', '14'), +('10', '84', '17', '102265', '83077', '14'), +('10', '84', '17', '83604', '66470', '14'), +('10', '84', '17', '46825', '63629', '14'), +('10', '84', '7', '102011', '87707', '14'), +('10', '84', '7', '102263', '78543', '14'), +('10', '84', '7', '53425', '76738', '14'), +('10', '84', '7', '39273', '58711', '14'), +('10', '84', '9', '67098', '242641', '14'), +('10', '84', '9', '51707', '86414', '14'), +('10', '84', '9', '46937', '85690', '14'), +('10', '84', '9', '53426', '76873', '14'), +('10', '84', '15', '102723', '140933', '14'), +('10', '84', '15', '102616', '130605', '14'), +('10', '84', '15', '102636', '130074', '14'), +('10', '84', '15', '102635', '129795', '14'), +('10', '84', '20', '102617', '137061', '14'), +('10', '84', '20', '102631', '136614', '14'), +('10', '84', '20', '102563', '119507', '14'), +('10', '84', '20', '80690', '98943', '14'), +('10', '84', '12', '53427', '76769', '14'), +('10', '84', '12', '53949', '76369', '14'), +('10', '84', '12', '102260', '74628', '14'), +('10', '84', '12', '39356', '72106', '14'), +('10', '84', '18', '102012', '88858', '14'), +('10', '84', '18', '83608', '87517', '14'), +('10', '84', '18', '102264', '80585', '14'), +('10', '84', '18', '53430', '78911', '14'), +('10', '84', '19', '102261', '75823', '14'), +('10', '84', '19', '76131', '73158', '14'), +('10', '84', '19', '83573', '71711', '14'), +('10', '84', '19', '70920', '55828', '14'), +('10', '84', '13', '93856', '145113', '14'), +('10', '84', '13', '102735', '123102', '14'), +('10', '84', '13', '102734', '113754', '14'), +('10', '84', '13', '102582', '109013', '14'), +('10', '84', '14', '102632', '136393', '14'), +('10', '84', '14', '102633', '136368', '14'), +('10', '84', '14', '102570', '118560', '14'), +('10', '84', '14', '80665', '92507', '14'), +('10', '84', '11', '102643', '131468', '14'), +('10', '84', '11', '80668', '98817', '14'), +('10', '84', '11', '46939', '86294', '14'), +('10', '84', '11', '80619', '85986', '14'), +('10', '85', '22', '39342', '0', '16'), +('10', '85', '22', '7867', '0', '16'), +('10', '85', '22', '23597', '0', '16'), +('10', '85', '22', '53550', '0', '16'), +('10', '85', '1', '111304', '250832', '16'), +('10', '85', '1', '111307', '250683', '16'), +('10', '85', '1', '111310', '250237', '16'), +('10', '85', '1', '111300', '249582', '16'), +('10', '85', '2', '62985', '156988', '16'), +('10', '85', '2', '94056', '156729', '16'), +('10', '85', '2', '62988', '155953', '16'), +('10', '85', '2', '104410', '133040', '16'), +('10', '85', '3', '111314', '251223', '16'), +('10', '85', '3', '111316', '249928', '16'), +('10', '85', '3', '111315', '249877', '16'), +('10', '85', '3', '111013', '219622', '16'), +('10', '85', '5', '111319', '251022', '16'), +('10', '85', '5', '111317', '249361', '16'), +('10', '85', '5', '111318', '249189', '16'), +('10', '85', '5', '111320', '249027', '16'), +('10', '85', '8', '111332', '251353', '16'), +('10', '85', '8', '111330', '250080', '16'), +('10', '85', '8', '111331', '249195', '16'), +('10', '85', '8', '111328', '249041', '16'), +('10', '85', '6', '111323', '251286', '16'), +('10', '85', '6', '111326', '250133', '16'), +('10', '85', '6', '111324', '249736', '16'), +('10', '85', '6', '111022', '219686', '16'), +('10', '85', '17', '81765', '163817', '16'), +('10', '85', '17', '56046', '163341', '16'), +('10', '85', '17', '56083', '163207', '16'), +('10', '85', '17', '104413', '138743', '16'), +('10', '85', '7', '94053', '155773', '16'), +('10', '85', '7', '56080', '155404', '16'), +('10', '85', '7', '104411', '131944', '16'), +('10', '85', '7', '54848', '100468', '16'), +('10', '85', '9', '67098', '245535', '16'), +('10', '85', '9', '81764', '151932', '16'), +('10', '85', '9', '56070', '151731', '16'), +('10', '85', '9', '62984', '151619', '16'), +('10', '85', '15', '111350', '251999', '16'), +('10', '85', '15', '111344', '251558', '16'), +('10', '85', '15', '111340', '251035', '16'), +('10', '85', '15', '111342', '249877', '16'), +('10', '85', '20', '111356', '251422', '16'), +('10', '85', '20', '111352', '250452', '16'), +('10', '85', '20', '111351', '249778', '16'), +('10', '85', '20', '111054', '219821', '16'), +('10', '85', '12', '56073', '153084', '16'), +('10', '85', '12', '56035', '152762', '16'), +('10', '85', '12', '104408', '129497', '16'), +('10', '85', '12', '49656', '99908', '16'), +('10', '85', '18', '56041', '161953', '16'), +('10', '85', '18', '62986', '160649', '16'), +('10', '85', '18', '94054', '160375', '16'), +('10', '85', '18', '104412', '135859', '16'), +('10', '85', '19', '81763', '157991', '16'), +('10', '85', '19', '56037', '157614', '16'), +('10', '85', '19', '62990', '157599', '16'), +('10', '85', '19', '56075', '157558', '16'), +('10', '85', '13', '111518', '242442', '16'), +('10', '85', '13', '111517', '240246', '16'), +('10', '85', '13', '111217', '219545', '16'), +('10', '85', '13', '111218', '218997', '16'), +('10', '85', '14', '111539', '252777', '16'), +('10', '85', '14', '111537', '251989', '16'), +('10', '85', '14', '111535', '251727', '16'), +('10', '85', '14', '111239', '221176', '16'), +('10', '85', '11', '111337', '250546', '16'), +('10', '85', '11', '111334', '250457', '16'), +('10', '85', '11', '111338', '248770', '16'), +('10', '85', '11', '111033', '218956', '16'), +('10', '85', '22', '12425', '0', '15'), +('10', '85', '22', '39342', '0', '15'), +('10', '85', '22', '7867', '0', '15'), +('10', '85', '22', '23597', '0', '15'), +('10', '85', '1', '107053', '183132', '15'), +('10', '85', '1', '107052', '182288', '15'), +('10', '85', '1', '107054', '181032', '15'), +('10', '85', '1', '107028', '180989', '15'), +('10', '85', '2', '62985', '156988', '15'), +('10', '85', '2', '94056', '156729', '15'), +('10', '85', '2', '62988', '155953', '15'), +('10', '85', '2', '104410', '133040', '15'), +('10', '85', '3', '107055', '184473', '15'), +('10', '85', '3', '107030', '184472', '15'), +('10', '85', '3', '106819', '173390', '15'), +('10', '85', '3', '106841', '172398', '15'), +('10', '85', '5', '107056', '182923', '15'), +('10', '85', '5', '107031', '181097', '15'), +('10', '85', '5', '106820', '173324', '15'), +('10', '85', '5', '106747', '154799', '15'), +('10', '85', '8', '107058', '187103', '15'), +('10', '85', '8', '107033', '185474', '15'), +('10', '85', '8', '106822', '176577', '15'), +('10', '85', '8', '106844', '173906', '15'), +('10', '85', '6', '107057', '184836', '15'), +('10', '85', '6', '107032', '184722', '15'), +('10', '85', '6', '106821', '174370', '15'), +('10', '85', '6', '106843', '172891', '15'), +('10', '85', '17', '81765', '163817', '15'), +('10', '85', '17', '56046', '163341', '15'), +('10', '85', '17', '56083', '163207', '15'), +('10', '85', '17', '104413', '138743', '15'), +('10', '85', '7', '94053', '155773', '15'), +('10', '85', '7', '56080', '155404', '15'), +('10', '85', '7', '104411', '131944', '15'), +('10', '85', '7', '54848', '100468', '15'), +('10', '85', '9', '67098', '245535', '15'), +('10', '85', '9', '81764', '151932', '15'), +('10', '85', '9', '56070', '151731', '15'), +('10', '85', '9', '62984', '151619', '15'), +('10', '85', '15', '107035', '183011', '15'), +('10', '85', '15', '107036', '182671', '15'), +('10', '85', '15', '107051', '181897', '15'), +('10', '85', '15', '107050', '180905', '15'), +('10', '85', '20', '107059', '187788', '15'), +('10', '85', '20', '107037', '187506', '15'), +('10', '85', '20', '106825', '176967', '15'), +('10', '85', '20', '106845', '175031', '15'), +('10', '85', '12', '56073', '153084', '15'), +('10', '85', '12', '56035', '152762', '15'), +('10', '85', '12', '104408', '129497', '15'), +('10', '85', '12', '53427', '76774', '15'), +('10', '85', '18', '56041', '161953', '15'), +('10', '85', '18', '62986', '160649', '15'), +('10', '85', '18', '94054', '160375', '15'), +('10', '85', '18', '104412', '135859', '15'), +('10', '85', '19', '81763', '157991', '15'), +('10', '85', '19', '56037', '157614', '15'), +('10', '85', '19', '62990', '157599', '15'), +('10', '85', '19', '56075', '157558', '15'), +('10', '85', '13', '62931', '157305', '15'), +('10', '85', '13', '62966', '155593', '15'), +('10', '85', '13', '106761', '155330', '15'), +('10', '85', '13', '93856', '146848', '15'), +('10', '85', '14', '107063', '186157', '15'), +('10', '85', '14', '107065', '185592', '15'), +('10', '85', '14', '106850', '176021', '15'), +('10', '85', '14', '106852', '174162', '15'), +('10', '85', '11', '107034', '185203', '15'), +('10', '85', '11', '106823', '174550', '15'), +('10', '85', '11', '56099', '155678', '15'), +('10', '85', '11', '62965', '155052', '15'), +('10', '86', '22', '39342', '0', '16'), +('10', '86', '22', '7867', '0', '16'), +('10', '86', '22', '23597', '0', '16'), +('10', '86', '22', '53550', '0', '16'), +('10', '86', '1', '111304', '250840', '16'), +('10', '86', '1', '111307', '250688', '16'), +('10', '86', '1', '111310', '250244', '16'), +('10', '86', '1', '111300', '249588', '16'), +('10', '86', '2', '62985', '156996', '16'), +('10', '86', '2', '94056', '156735', '16'), +('10', '86', '2', '62988', '155958', '16'), +('10', '86', '2', '104410', '133046', '16'), +('10', '86', '3', '111314', '251230', '16'), +('10', '86', '3', '111316', '249935', '16'), +('10', '86', '3', '111315', '249884', '16'), +('10', '86', '3', '111013', '219630', '16'), +('10', '86', '5', '111319', '251028', '16'), +('10', '86', '5', '111317', '249367', '16'), +('10', '86', '5', '111318', '249195', '16'), +('10', '86', '5', '111320', '249033', '16'), +('10', '86', '8', '111332', '251360', '16'), +('10', '86', '8', '111330', '250087', '16'), +('10', '86', '8', '111331', '249203', '16'), +('10', '86', '8', '111328', '249046', '16'), +('10', '86', '6', '111323', '251294', '16'), +('10', '86', '6', '111326', '250143', '16'), +('10', '86', '6', '111324', '249742', '16'), +('10', '86', '6', '111022', '219693', '16'), +('10', '86', '17', '81765', '163823', '16'), +('10', '86', '17', '56046', '163348', '16'), +('10', '86', '17', '56083', '163211', '16'), +('10', '86', '17', '104413', '138753', '16'), +('10', '86', '7', '94053', '155778', '16'), +('10', '86', '7', '56080', '155412', '16'), +('10', '86', '7', '104411', '131954', '16'), +('10', '86', '7', '54848', '100475', '16'), +('10', '86', '9', '67098', '248430', '16'), +('10', '86', '9', '81764', '151943', '16'), +('10', '86', '9', '56070', '151737', '16'), +('10', '86', '9', '62984', '151627', '16'), +('10', '86', '15', '111350', '252008', '16'), +('10', '86', '15', '111344', '251567', '16'), +('10', '86', '15', '111340', '251042', '16'), +('10', '86', '15', '111342', '249885', '16'), +('10', '86', '20', '111356', '251428', '16'), +('10', '86', '20', '111352', '250460', '16'), +('10', '86', '20', '111351', '249785', '16'), +('10', '86', '20', '111054', '219827', '16'), +('10', '86', '12', '56073', '153091', '16'), +('10', '86', '12', '56035', '152772', '16'), +('10', '86', '12', '104408', '129503', '16'), +('10', '86', '12', '49656', '99909', '16'), +('10', '86', '18', '56041', '161960', '16'), +('10', '86', '18', '62986', '160657', '16'), +('10', '86', '18', '94054', '160380', '16'), +('10', '86', '18', '104412', '135863', '16'), +('10', '86', '19', '81763', '158002', '16'), +('10', '86', '19', '56037', '157622', '16'), +('10', '86', '19', '62990', '157604', '16'), +('10', '86', '19', '56075', '157567', '16'), +('10', '86', '13', '111518', '242450', '16'), +('10', '86', '13', '111517', '240253', '16'), +('10', '86', '13', '111217', '219551', '16'), +('10', '86', '13', '111218', '219004', '16'), +('10', '86', '14', '111539', '252785', '16'), +('10', '86', '14', '111537', '251997', '16'), +('10', '86', '14', '111535', '251734', '16'), +('10', '86', '14', '111239', '221184', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '86', '11', '111337', '250556', '16'), +('10', '86', '11', '111334', '250464', '16'), +('10', '86', '11', '111338', '248776', '16'), +('10', '86', '11', '111033', '218963', '16'), +('10', '87', '22', '39342', '0', '16'), +('10', '87', '22', '7867', '0', '16'), +('10', '87', '22', '23597', '0', '16'), +('10', '87', '22', '53550', '0', '16'), +('10', '87', '1', '111304', '250848', '16'), +('10', '87', '1', '111307', '250692', '16'), +('10', '87', '1', '111310', '250252', '16'), +('10', '87', '1', '111300', '249594', '16'), +('10', '87', '2', '62985', '157005', '16'), +('10', '87', '2', '94056', '156741', '16'), +('10', '87', '2', '62988', '155963', '16'), +('10', '87', '2', '104410', '133052', '16'), +('10', '87', '3', '111314', '251237', '16'), +('10', '87', '3', '111316', '249942', '16'), +('10', '87', '3', '111315', '249891', '16'), +('10', '87', '3', '111013', '219637', '16'), +('10', '87', '5', '111319', '251034', '16'), +('10', '87', '5', '111317', '249374', '16'), +('10', '87', '5', '111318', '249201', '16'), +('10', '87', '5', '111320', '249039', '16'), +('10', '87', '8', '111332', '251368', '16'), +('10', '87', '8', '111330', '250094', '16'), +('10', '87', '8', '111331', '249212', '16'), +('10', '87', '8', '111328', '249051', '16'), +('10', '87', '6', '111323', '251301', '16'), +('10', '87', '6', '111326', '250152', '16'), +('10', '87', '6', '111324', '249748', '16'), +('10', '87', '6', '111022', '219701', '16'), +('10', '87', '17', '81765', '163829', '16'), +('10', '87', '17', '56046', '163356', '16'), +('10', '87', '17', '56083', '163215', '16'), +('10', '87', '17', '104413', '138763', '16'), +('10', '87', '7', '94053', '155784', '16'), +('10', '87', '7', '56080', '155420', '16'), +('10', '87', '7', '104411', '131963', '16'), +('10', '87', '7', '54848', '100481', '16'), +('10', '87', '9', '67098', '251324', '16'), +('10', '87', '9', '81764', '151954', '16'), +('10', '87', '9', '56070', '151744', '16'), +('10', '87', '9', '62984', '151634', '16'), +('10', '87', '15', '111350', '252017', '16'), +('10', '87', '15', '111344', '251576', '16'), +('10', '87', '15', '111340', '251049', '16'), +('10', '87', '15', '111342', '249893', '16'), +('10', '87', '20', '111356', '251434', '16'), +('10', '87', '20', '111352', '250467', '16'), +('10', '87', '20', '111351', '249793', '16'), +('10', '87', '20', '111054', '219834', '16'), +('10', '87', '12', '56073', '153098', '16'), +('10', '87', '12', '56035', '152782', '16'), +('10', '87', '12', '104408', '129510', '16'), +('10', '87', '12', '49656', '99910', '16'), +('10', '87', '18', '56041', '161966', '16'), +('10', '87', '18', '62986', '160666', '16'), +('10', '87', '18', '94054', '160385', '16'), +('10', '87', '18', '104412', '135867', '16'), +('10', '87', '19', '81763', '158012', '16'), +('10', '87', '19', '56037', '157630', '16'), +('10', '87', '19', '62990', '157609', '16'), +('10', '87', '19', '56075', '157575', '16'), +('10', '87', '13', '111518', '242457', '16'), +('10', '87', '13', '111517', '240260', '16'), +('10', '87', '13', '111217', '219558', '16'), +('10', '87', '13', '111218', '219011', '16'), +('10', '87', '14', '111539', '252794', '16'), +('10', '87', '14', '111537', '252004', '16'), +('10', '87', '14', '111535', '251741', '16'), +('10', '87', '14', '111239', '221192', '16'), +('10', '87', '11', '111337', '250566', '16'), +('10', '87', '11', '111334', '250471', '16'), +('10', '87', '11', '111338', '248782', '16'), +('10', '87', '11', '111033', '218970', '16'), +('10', '88', '22', '39342', '0', '16'), +('10', '88', '22', '7867', '0', '16'), +('10', '88', '22', '23597', '0', '16'), +('10', '88', '22', '53550', '0', '16'), +('10', '88', '1', '111304', '250856', '16'), +('10', '88', '1', '111307', '250697', '16'), +('10', '88', '1', '111310', '250259', '16'), +('10', '88', '1', '111300', '249600', '16'), +('10', '88', '2', '62985', '157014', '16'), +('10', '88', '2', '94056', '156747', '16'), +('10', '88', '2', '62988', '155968', '16'), +('10', '88', '2', '104410', '133058', '16'), +('10', '88', '3', '111314', '251244', '16'), +('10', '88', '3', '111316', '249949', '16'), +('10', '88', '3', '111315', '249899', '16'), +('10', '88', '3', '111013', '219644', '16'), +('10', '88', '5', '111319', '251041', '16'), +('10', '88', '5', '111317', '249381', '16'), +('10', '88', '5', '111318', '249206', '16'), +('10', '88', '5', '111320', '249045', '16'), +('10', '88', '8', '111332', '251376', '16'), +('10', '88', '8', '111330', '250100', '16'), +('10', '88', '8', '111331', '249220', '16'), +('10', '88', '8', '111328', '249056', '16'), +('10', '88', '6', '111323', '251309', '16'), +('10', '88', '6', '111326', '250162', '16'), +('10', '88', '6', '111324', '249754', '16'), +('10', '88', '6', '111022', '219708', '16'), +('10', '88', '17', '81765', '163835', '16'), +('10', '88', '17', '56046', '163363', '16'), +('10', '88', '17', '56083', '163219', '16'), +('10', '88', '17', '104413', '138773', '16'), +('10', '88', '7', '94053', '155789', '16'), +('10', '88', '7', '56080', '155429', '16'), +('10', '88', '7', '104411', '131972', '16'), +('10', '88', '7', '54848', '100487', '16'), +('10', '88', '9', '67098', '254219', '16'), +('10', '88', '9', '81764', '151965', '16'), +('10', '88', '9', '56070', '151750', '16'), +('10', '88', '9', '62984', '151641', '16'), +('10', '88', '15', '111350', '252026', '16'), +('10', '88', '15', '111344', '251585', '16'), +('10', '88', '15', '111340', '251056', '16'), +('10', '88', '15', '111342', '249900', '16'), +('10', '88', '20', '111356', '251440', '16'), +('10', '88', '20', '111352', '250474', '16'), +('10', '88', '20', '111351', '249800', '16'), +('10', '88', '20', '111054', '219840', '16'), +('10', '88', '12', '56073', '153106', '16'), +('10', '88', '12', '56035', '152791', '16'), +('10', '88', '12', '104408', '129516', '16'), +('10', '88', '12', '49656', '99910', '16'), +('10', '88', '18', '56041', '161972', '16'), +('10', '88', '18', '62986', '160674', '16'), +('10', '88', '18', '94054', '160391', '16'), +('10', '88', '18', '104412', '135871', '16'), +('10', '88', '19', '81763', '158023', '16'), +('10', '88', '19', '56037', '157638', '16'), +('10', '88', '19', '62990', '157614', '16'), +('10', '88', '19', '56075', '157584', '16'), +('10', '88', '13', '111518', '242464', '16'), +('10', '88', '13', '111517', '240267', '16'), +('10', '88', '13', '111217', '219565', '16'), +('10', '88', '13', '111218', '219018', '16'), +('10', '88', '14', '111539', '252802', '16'), +('10', '88', '14', '111537', '252011', '16'), +('10', '88', '14', '111535', '251748', '16'), +('10', '88', '14', '111239', '221200', '16'), +('10', '88', '11', '111337', '250576', '16'), +('10', '88', '11', '111334', '250477', '16'), +('10', '88', '11', '111338', '248788', '16'), +('10', '88', '11', '111033', '218977', '16'), +('10', '89', '22', '39342', '0', '16'), +('10', '89', '22', '7867', '0', '16'), +('10', '89', '22', '23597', '0', '16'), +('10', '89', '22', '53550', '0', '16'), +('10', '89', '1', '111304', '250865', '16'), +('10', '89', '1', '111307', '250702', '16'), +('10', '89', '1', '111310', '250266', '16'), +('10', '89', '1', '111305', '249609', '16'), +('10', '89', '2', '62985', '157023', '16'), +('10', '89', '2', '94056', '156753', '16'), +('10', '89', '2', '62988', '155973', '16'), +('10', '89', '2', '104410', '133064', '16'), +('10', '89', '3', '111314', '251251', '16'), +('10', '89', '3', '111316', '249956', '16'), +('10', '89', '3', '111315', '249906', '16'), +('10', '89', '3', '111013', '219651', '16'), +('10', '89', '5', '111319', '251047', '16'), +('10', '89', '5', '111317', '249388', '16'), +('10', '89', '5', '111318', '249212', '16'), +('10', '89', '5', '111320', '249051', '16'), +('10', '89', '8', '111332', '251383', '16'), +('10', '89', '8', '111330', '250107', '16'), +('10', '89', '8', '111331', '249229', '16'), +('10', '89', '8', '111328', '249061', '16'), +('10', '89', '6', '111323', '251316', '16'), +('10', '89', '6', '111326', '250172', '16'), +('10', '89', '6', '111324', '249759', '16'), +('10', '89', '6', '111022', '219716', '16'), +('10', '89', '17', '81765', '163840', '16'), +('10', '89', '17', '56046', '163370', '16'), +('10', '89', '17', '56083', '163223', '16'), +('10', '89', '17', '104413', '138783', '16'), +('10', '89', '7', '94053', '155795', '16'), +('10', '89', '7', '56080', '155437', '16'), +('10', '89', '7', '104411', '131981', '16'), +('10', '89', '7', '54848', '100494', '16'), +('10', '89', '9', '67098', '257114', '16'), +('10', '89', '9', '81764', '151976', '16'), +('10', '89', '9', '56070', '151757', '16'), +('10', '89', '9', '62984', '151649', '16'), +('10', '89', '15', '111350', '252034', '16'), +('10', '89', '15', '111344', '251593', '16'), +('10', '89', '15', '111340', '251063', '16'), +('10', '89', '15', '111342', '249908', '16'), +('10', '89', '20', '111356', '251446', '16'), +('10', '89', '20', '111352', '250482', '16'), +('10', '89', '20', '111351', '249807', '16'), +('10', '89', '20', '111054', '219846', '16'), +('10', '89', '12', '56073', '153113', '16'), +('10', '89', '12', '56035', '152801', '16'), +('10', '89', '12', '104408', '129522', '16'), +('10', '89', '12', '49656', '99911', '16'), +('10', '89', '18', '56041', '161979', '16'), +('10', '89', '18', '62986', '160683', '16'), +('10', '89', '18', '94054', '160396', '16'), +('10', '89', '18', '104412', '135875', '16'), +('10', '89', '19', '81763', '158033', '16'), +('10', '89', '19', '56037', '157646', '16'), +('10', '89', '19', '62990', '157619', '16'), +('10', '89', '19', '56075', '157593', '16'), +('10', '89', '13', '111518', '242472', '16'), +('10', '89', '13', '111517', '240274', '16'), +('10', '89', '13', '111217', '219572', '16'), +('10', '89', '13', '111218', '219025', '16'), +('10', '89', '14', '111539', '252810', '16'), +('10', '89', '14', '111537', '252019', '16'), +('10', '89', '14', '111535', '251755', '16'), +('10', '89', '14', '111239', '221208', '16'), +('10', '89', '11', '111337', '250586', '16'), +('10', '89', '11', '111334', '250484', '16'), +('10', '89', '11', '111338', '248794', '16'), +('10', '89', '11', '111033', '218984', '16'), +('10', '90', '22', '39342', '0', '17'), +('10', '90', '22', '7867', '0', '17'), +('10', '90', '22', '23597', '0', '17'), +('10', '90', '22', '53550', '0', '17'), +('10', '90', '1', '111304', '250873', '17'), +('10', '90', '1', '111307', '250707', '17'), +('10', '90', '1', '111310', '250274', '17'), +('10', '90', '1', '111305', '249619', '17'), +('10', '90', '2', '62985', '157031', '17'), +('10', '90', '2', '94056', '156759', '17'), +('10', '90', '2', '62988', '155978', '17'), +('10', '90', '2', '104410', '133071', '17'), +('10', '90', '3', '111314', '251258', '17'), +('10', '90', '3', '111316', '249963', '17'), +('10', '90', '3', '111315', '249913', '17'), +('10', '90', '3', '111013', '219658', '17'), +('10', '90', '5', '111319', '251053', '17'), +('10', '90', '5', '111317', '249395', '17'), +('10', '90', '5', '111318', '249218', '17'), +('10', '90', '5', '111320', '249057', '17'), +('10', '90', '8', '111332', '251391', '17'), +('10', '90', '8', '111330', '250114', '17'), +('10', '90', '8', '111331', '249237', '17'), +('10', '90', '8', '111328', '249066', '17'), +('10', '90', '6', '111323', '251324', '17'), +('10', '90', '6', '111326', '250181', '17'), +('10', '90', '6', '111324', '249765', '17'), +('10', '90', '6', '111022', '219723', '17'), +('10', '90', '17', '81765', '163846', '17'), +('10', '90', '17', '56046', '163377', '17'), +('10', '90', '17', '56083', '163227', '17'), +('10', '90', '17', '104413', '138793', '17'), +('10', '90', '7', '94053', '155800', '17'), +('10', '90', '7', '56080', '155445', '17'), +('10', '90', '7', '104411', '131990', '17'), +('10', '90', '7', '54848', '100500', '17'), +('10', '90', '9', '67098', '260009', '17'), +('10', '90', '9', '81764', '151986', '17'), +('10', '90', '9', '56070', '151763', '17'), +('10', '90', '9', '62984', '151656', '17'), +('10', '90', '15', '111350', '252043', '17'), +('10', '90', '15', '111344', '251602', '17'), +('10', '90', '15', '111340', '251070', '17'), +('10', '90', '15', '111342', '249916', '17'), +('10', '90', '20', '111356', '251452', '17'), +('10', '90', '20', '111352', '250489', '17'), +('10', '90', '20', '111351', '249815', '17'), +('10', '90', '20', '111054', '219852', '17'), +('10', '90', '12', '56073', '153120', '17'), +('10', '90', '12', '56035', '152811', '17'), +('10', '90', '12', '104408', '129528', '17'), +('10', '90', '12', '49656', '99912', '17'), +('10', '90', '18', '56041', '161985', '17'), +('10', '90', '18', '62986', '160691', '17'), +('10', '90', '18', '94054', '160402', '17'), +('10', '90', '18', '104412', '135879', '17'), +('10', '90', '19', '81763', '158044', '17'), +('10', '90', '19', '56037', '157654', '17'), +('10', '90', '19', '62990', '157624', '17'), +('10', '90', '19', '56075', '157601', '17'), +('10', '90', '13', '111518', '242479', '17'), +('10', '90', '13', '111517', '240281', '17'), +('10', '90', '13', '111217', '219578', '17'), +('10', '90', '13', '111218', '219032', '17'), +('10', '90', '14', '111539', '252818', '17'), +('10', '90', '14', '111537', '252026', '17'), +('10', '90', '14', '111535', '251762', '17'), +('10', '90', '14', '111239', '221217', '17'), +('10', '90', '11', '111337', '250596', '17'), +('10', '90', '11', '111334', '250491', '17'), +('10', '90', '11', '111338', '248800', '17'), +('10', '90', '11', '111033', '218991', '17'), +('10', '91', '22', '39342', '0', '17'), +('10', '91', '22', '7867', '0', '17'), +('10', '91', '22', '23597', '0', '17'), +('10', '91', '22', '53550', '0', '17'), +('10', '91', '1', '111304', '250881', '17'), +('10', '91', '1', '111307', '250711', '17'), +('10', '91', '1', '111310', '250281', '17'), +('10', '91', '1', '111305', '249629', '17'), +('10', '91', '2', '62985', '157040', '17'), +('10', '91', '2', '94056', '156765', '17'), +('10', '91', '2', '62988', '155983', '17'), +('10', '91', '2', '104410', '133077', '17'), +('10', '91', '3', '111314', '251265', '17'), +('10', '91', '3', '111316', '249970', '17'), +('10', '91', '3', '111315', '249921', '17'), +('10', '91', '3', '111013', '219665', '17'), +('10', '91', '5', '111319', '251060', '17'), +('10', '91', '5', '111317', '249402', '17'), +('10', '91', '5', '111318', '249223', '17'), +('10', '91', '5', '111320', '249063', '17'), +('10', '91', '8', '111332', '251399', '17'), +('10', '91', '8', '111330', '250121', '17'), +('10', '91', '8', '111331', '249246', '17'), +('10', '91', '8', '111328', '249071', '17'), +('10', '91', '6', '111323', '251331', '17'), +('10', '91', '6', '111326', '250191', '17'), +('10', '91', '6', '111324', '249771', '17'), +('10', '91', '6', '111022', '219731', '17'), +('10', '91', '17', '81765', '163852', '17'), +('10', '91', '17', '56046', '163385', '17'), +('10', '91', '17', '56083', '163231', '17'), +('10', '91', '17', '104413', '138803', '17'), +('10', '91', '7', '94053', '155806', '17'), +('10', '91', '7', '56080', '155454', '17'), +('10', '91', '7', '104411', '132000', '17'), +('10', '91', '7', '54848', '100506', '17'), +('10', '91', '9', '67098', '260015', '17'), +('10', '91', '9', '81764', '151997', '17'), +('10', '91', '9', '56070', '151770', '17'), +('10', '91', '9', '62984', '151664', '17'), +('10', '91', '15', '111350', '252052', '17'), +('10', '91', '15', '111344', '251611', '17'), +('10', '91', '15', '111340', '251077', '17'), +('10', '91', '15', '111342', '249924', '17'), +('10', '91', '20', '111356', '251458', '17'), +('10', '91', '20', '111352', '250496', '17'), +('10', '91', '20', '111351', '249822', '17'), +('10', '91', '20', '111054', '219858', '17'), +('10', '91', '12', '56073', '153127', '17'), +('10', '91', '12', '56035', '152821', '17'), +('10', '91', '12', '104408', '129535', '17'), +('10', '91', '12', '49656', '99913', '17'), +('10', '91', '18', '56041', '161992', '17'), +('10', '91', '18', '62986', '160700', '17'), +('10', '91', '18', '94054', '160407', '17'), +('10', '91', '18', '104412', '135883', '17'), +('10', '91', '19', '81763', '158054', '17'), +('10', '91', '19', '56037', '157661', '17'), +('10', '91', '19', '62990', '157629', '17'), +('10', '91', '19', '56075', '157610', '17'), +('10', '91', '13', '111518', '242486', '17'), +('10', '91', '13', '111517', '240288', '17'), +('10', '91', '13', '111217', '219585', '17'), +('10', '91', '13', '111218', '219039', '17'), +('10', '91', '14', '111539', '252826', '17'), +('10', '91', '14', '111537', '252034', '17'), +('10', '91', '14', '111535', '251769', '17'), +('10', '91', '14', '111239', '221225', '17'), +('10', '91', '11', '111337', '250605', '17'), +('10', '91', '11', '111334', '250498', '17'), +('10', '91', '11', '111338', '248805', '17'), +('10', '91', '11', '111033', '218998', '17'), +('10', '92', '22', '39342', '0', '17'), +('10', '92', '22', '7867', '0', '17'), +('10', '92', '22', '23597', '0', '17'), +('10', '92', '22', '53550', '0', '17'), +('10', '92', '1', '111304', '250889', '17'), +('10', '92', '1', '111307', '250716', '17'), +('10', '92', '1', '111310', '250288', '17'), +('10', '92', '1', '111305', '249639', '17'), +('10', '92', '2', '62985', '157049', '17'), +('10', '92', '2', '94056', '156771', '17'), +('10', '92', '2', '62988', '155988', '17'), +('10', '92', '2', '104410', '133083', '17'), +('10', '92', '3', '111314', '251272', '17'), +('10', '92', '3', '111316', '249977', '17'), +('10', '92', '3', '111315', '249928', '17'), +('10', '92', '3', '111013', '219672', '17'), +('10', '92', '5', '111319', '251066', '17'), +('10', '92', '5', '111317', '249409', '17'), +('10', '92', '5', '111318', '249229', '17'), +('10', '92', '5', '111320', '249069', '17'), +('10', '92', '8', '111332', '251406', '17'), +('10', '92', '8', '111330', '250127', '17'), +('10', '92', '8', '111331', '249254', '17'), +('10', '92', '8', '111328', '249076', '17'), +('10', '92', '6', '111323', '251339', '17'), +('10', '92', '6', '111326', '250201', '17'), +('10', '92', '6', '111324', '249777', '17'), +('10', '92', '6', '111022', '219738', '17'), +('10', '92', '17', '81765', '163858', '17'), +('10', '92', '17', '56046', '163392', '17'), +('10', '92', '17', '56083', '163235', '17'), +('10', '92', '17', '104413', '138813', '17'), +('10', '92', '7', '94053', '155811', '17'), +('10', '92', '7', '56080', '155462', '17'), +('10', '92', '7', '104411', '132009', '17'), +('10', '92', '7', '54848', '100512', '17'), +('10', '92', '9', '67098', '260021', '17'), +('10', '92', '9', '81764', '152008', '17'), +('10', '92', '9', '56070', '151776', '17'), +('10', '92', '9', '62984', '151671', '17'), +('10', '92', '15', '111350', '252061', '17'), +('10', '92', '15', '111344', '251620', '17'), +('10', '92', '15', '111340', '251084', '17'), +('10', '92', '15', '111342', '249932', '17'), +('10', '92', '20', '111356', '251464', '17'), +('10', '92', '20', '111352', '250504', '17'), +('10', '92', '20', '111351', '249829', '17'), +('10', '92', '20', '111054', '219864', '17'), +('10', '92', '12', '56073', '153135', '17'), +('10', '92', '12', '56035', '152831', '17'), +('10', '92', '12', '104408', '129541', '17'), +('10', '92', '12', '49656', '99914', '17'), +('10', '92', '18', '56041', '161998', '17'), +('10', '92', '18', '62986', '160708', '17'), +('10', '92', '18', '94054', '160412', '17'), +('10', '92', '18', '104412', '135887', '17'), +('10', '92', '19', '81763', '158065', '17'), +('10', '92', '19', '56037', '157669', '17'), +('10', '92', '19', '62990', '157634', '17'), +('10', '92', '19', '56075', '157619', '17'), +('10', '92', '13', '111518', '242493', '17'), +('10', '92', '13', '111517', '240295', '17'), +('10', '92', '13', '111217', '219592', '17'), +('10', '92', '13', '111218', '219045', '17'), +('10', '92', '14', '111539', '252835', '17'), +('10', '92', '14', '111537', '252041', '17'), +('10', '92', '14', '111535', '251776', '17'), +('10', '92', '14', '111239', '221233', '17'), +('10', '92', '11', '111337', '250615', '17'), +('10', '92', '11', '111334', '250505', '17'), +('10', '92', '11', '111338', '248811', '17'), +('10', '92', '11', '111033', '219005', '17'), +('10', '93', '22', '39342', '0', '17'), +('10', '93', '22', '7867', '0', '17'), +('10', '93', '22', '23597', '0', '17'), +('10', '93', '22', '53550', '0', '17'), +('10', '93', '1', '111304', '250897', '17'), +('10', '93', '1', '111307', '250721', '17'), +('10', '93', '1', '111310', '250296', '17'), +('10', '93', '1', '111305', '249649', '17'), +('10', '93', '2', '62985', '157058', '17'), +('10', '93', '2', '94056', '156777', '17'), +('10', '93', '2', '62988', '155993', '17'), +('10', '93', '2', '104410', '133089', '17'), +('10', '93', '3', '111314', '251279', '17'), +('10', '93', '3', '111316', '249983', '17'), +('10', '93', '3', '111315', '249935', '17'), +('10', '93', '3', '111013', '219679', '17'), +('10', '93', '5', '111319', '251073', '17'), +('10', '93', '5', '111317', '249416', '17'), +('10', '93', '5', '111318', '249235', '17'), +('10', '93', '5', '111320', '249075', '17'), +('10', '93', '8', '111332', '251414', '17'), +('10', '93', '8', '111330', '250134', '17'), +('10', '93', '8', '111331', '249262', '17'), +('10', '93', '8', '111328', '249081', '17'), +('10', '93', '6', '111323', '251346', '17'), +('10', '93', '6', '111326', '250210', '17'), +('10', '93', '6', '111324', '249783', '17'), +('10', '93', '6', '111022', '219746', '17'), +('10', '93', '17', '81765', '163864', '17'), +('10', '93', '17', '56046', '163399', '17'), +('10', '93', '17', '56083', '163239', '17'), +('10', '93', '17', '104413', '138823', '17'), +('10', '93', '7', '94053', '155817', '17'), +('10', '93', '7', '56080', '155470', '17'), +('10', '93', '7', '104411', '132018', '17'), +('10', '93', '7', '54848', '100519', '17'), +('10', '93', '9', '67098', '260027', '17'), +('10', '93', '9', '81764', '152019', '17'), +('10', '93', '9', '56070', '151782', '17'), +('10', '93', '9', '62984', '151678', '17'), +('10', '93', '15', '111350', '252070', '17'), +('10', '93', '15', '111344', '251629', '17'), +('10', '93', '15', '111340', '251091', '17'), +('10', '93', '15', '111342', '249940', '17'), +('10', '93', '20', '111356', '251471', '17'), +('10', '93', '20', '111352', '250511', '17'), +('10', '93', '20', '111351', '249837', '17'), +('10', '93', '20', '111054', '219870', '17'), +('10', '93', '12', '56073', '153142', '17'), +('10', '93', '12', '56035', '152841', '17'), +('10', '93', '12', '104408', '129547', '17'), +('10', '93', '12', '49656', '99915', '17'), +('10', '93', '18', '56041', '162004', '17'), +('10', '93', '18', '62986', '160717', '17'), +('10', '93', '18', '94054', '160418', '17'), +('10', '93', '18', '104412', '135891', '17'), +('10', '93', '19', '81763', '158075', '17'), +('10', '93', '19', '56037', '157677', '17'), +('10', '93', '19', '62990', '157639', '17'), +('10', '93', '19', '56075', '157627', '17'), +('10', '93', '13', '111518', '242501', '17'), +('10', '93', '13', '111517', '240302', '17'), +('10', '93', '13', '111217', '219598', '17'), +('10', '93', '13', '111218', '219052', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '93', '14', '111539', '252843', '17'), +('10', '93', '14', '111537', '252049', '17'), +('10', '93', '14', '111535', '251783', '17'), +('10', '93', '14', '111239', '221241', '17'), +('10', '93', '11', '111337', '250625', '17'), +('10', '93', '11', '111334', '250512', '17'), +('10', '93', '11', '111338', '248817', '17'), +('10', '93', '11', '111033', '219011', '17'), +('10', '94', '22', '39342', '0', '17'), +('10', '94', '22', '7867', '0', '17'), +('10', '94', '22', '23597', '0', '17'), +('10', '94', '22', '53550', '0', '17'), +('10', '94', '1', '111304', '250905', '17'), +('10', '94', '1', '111307', '250725', '17'), +('10', '94', '1', '111310', '250303', '17'), +('10', '94', '1', '111305', '249659', '17'), +('10', '94', '2', '62985', '157066', '17'), +('10', '94', '2', '94056', '156783', '17'), +('10', '94', '2', '62988', '155998', '17'), +('10', '94', '2', '104410', '133096', '17'), +('10', '94', '3', '111314', '251286', '17'), +('10', '94', '3', '111316', '249990', '17'), +('10', '94', '3', '111315', '249943', '17'), +('10', '94', '3', '111013', '219686', '17'), +('10', '94', '5', '111319', '251079', '17'), +('10', '94', '5', '111317', '249423', '17'), +('10', '94', '5', '111318', '249240', '17'), +('10', '94', '5', '111320', '249081', '17'), +('10', '94', '8', '111332', '251422', '17'), +('10', '94', '8', '111330', '250141', '17'), +('10', '94', '8', '111331', '249271', '17'), +('10', '94', '8', '111328', '249086', '17'), +('10', '94', '6', '111323', '251354', '17'), +('10', '94', '6', '111326', '250220', '17'), +('10', '94', '6', '111324', '249789', '17'), +('10', '94', '6', '111022', '219753', '17'), +('10', '94', '17', '81765', '163869', '17'), +('10', '94', '17', '56046', '163407', '17'), +('10', '94', '17', '56083', '163243', '17'), +('10', '94', '17', '104413', '138833', '17'), +('10', '94', '7', '94053', '155823', '17'), +('10', '94', '7', '56080', '155479', '17'), +('10', '94', '7', '104411', '132027', '17'), +('10', '94', '7', '54848', '100525', '17'), +('10', '94', '9', '67098', '260033', '17'), +('10', '94', '9', '81764', '152030', '17'), +('10', '94', '9', '56070', '151789', '17'), +('10', '94', '9', '62984', '151686', '17'), +('10', '94', '15', '111350', '252079', '17'), +('10', '94', '15', '111344', '251638', '17'), +('10', '94', '15', '111340', '251098', '17'), +('10', '94', '15', '111342', '249948', '17'), +('10', '94', '20', '111356', '251477', '17'), +('10', '94', '20', '111352', '250519', '17'), +('10', '94', '20', '111351', '249844', '17'), +('10', '94', '20', '111054', '219876', '17'), +('10', '94', '12', '56073', '153149', '17'), +('10', '94', '12', '56035', '152851', '17'), +('10', '94', '12', '104408', '129554', '17'), +('10', '94', '12', '49656', '99916', '17'), +('10', '94', '18', '56041', '162011', '17'), +('10', '94', '18', '62986', '160725', '17'), +('10', '94', '18', '94054', '160423', '17'), +('10', '94', '18', '104412', '135895', '17'), +('10', '94', '19', '81763', '158086', '17'), +('10', '94', '19', '56037', '157685', '17'), +('10', '94', '19', '62990', '157645', '17'), +('10', '94', '19', '56075', '157636', '17'), +('10', '94', '13', '111518', '242508', '17'), +('10', '94', '13', '111517', '240309', '17'), +('10', '94', '13', '111217', '219605', '17'), +('10', '94', '13', '111218', '219059', '17'), +('10', '94', '14', '111539', '252851', '17'), +('10', '94', '14', '111537', '252056', '17'), +('10', '94', '14', '111535', '251789', '17'), +('10', '94', '14', '111239', '221250', '17'), +('10', '94', '11', '111337', '250635', '17'), +('10', '94', '11', '111334', '250519', '17'), +('10', '94', '11', '111338', '248823', '17'), +('10', '94', '11', '111033', '219018', '17'), +('10', '95', '22', '39342', '0', '18'), +('10', '95', '22', '7867', '0', '18'), +('10', '95', '22', '23597', '0', '18'), +('10', '95', '22', '54829', '0', '18'), +('10', '95', '1', '111304', '250913', '18'), +('10', '95', '1', '111307', '250730', '18'), +('10', '95', '1', '111310', '250310', '18'), +('10', '95', '1', '111305', '249669', '18'), +('10', '95', '2', '62985', '157075', '18'), +('10', '95', '2', '94056', '156789', '18'), +('10', '95', '2', '62988', '156003', '18'), +('10', '95', '2', '104410', '133102', '18'), +('10', '95', '3', '111314', '251293', '18'), +('10', '95', '3', '111316', '249997', '18'), +('10', '95', '3', '111315', '249950', '18'), +('10', '95', '3', '111013', '219693', '18'), +('10', '95', '5', '111319', '251085', '18'), +('10', '95', '5', '111317', '249430', '18'), +('10', '95', '5', '111318', '249246', '18'), +('10', '95', '5', '111320', '249087', '18'), +('10', '95', '8', '111332', '251429', '18'), +('10', '95', '8', '111330', '250148', '18'), +('10', '95', '8', '111331', '249279', '18'), +('10', '95', '8', '111328', '249091', '18'), +('10', '95', '6', '111323', '251361', '18'), +('10', '95', '6', '111326', '250230', '18'), +('10', '95', '6', '111324', '249794', '18'), +('10', '95', '6', '111022', '219761', '18'), +('10', '95', '17', '81765', '163875', '18'), +('10', '95', '17', '56046', '163414', '18'), +('10', '95', '17', '56083', '163247', '18'), +('10', '95', '17', '104413', '138843', '18'), +('10', '95', '7', '94053', '155828', '18'), +('10', '95', '7', '56080', '155487', '18'), +('10', '95', '7', '104411', '132037', '18'), +('10', '95', '7', '54848', '100531', '18'), +('10', '95', '9', '67098', '260039', '18'), +('10', '95', '9', '81764', '152041', '18'), +('10', '95', '9', '56070', '151795', '18'), +('10', '95', '9', '62984', '151693', '18'), +('10', '95', '15', '111350', '252088', '18'), +('10', '95', '15', '111344', '251646', '18'), +('10', '95', '15', '111340', '251105', '18'), +('10', '95', '15', '111342', '249955', '18'), +('10', '95', '20', '111356', '251483', '18'), +('10', '95', '20', '111352', '250526', '18'), +('10', '95', '20', '111351', '249852', '18'), +('10', '95', '20', '111054', '219882', '18'), +('10', '95', '12', '56073', '153157', '18'), +('10', '95', '12', '56035', '152861', '18'), +('10', '95', '12', '104408', '129560', '18'), +('10', '95', '12', '49656', '99917', '18'), +('10', '95', '18', '56041', '162017', '18'), +('10', '95', '18', '62986', '160734', '18'), +('10', '95', '18', '94054', '160429', '18'), +('10', '95', '18', '104412', '135899', '18'), +('10', '95', '19', '81763', '158096', '18'), +('10', '95', '19', '56037', '157693', '18'), +('10', '95', '19', '62990', '157650', '18'), +('10', '95', '19', '56075', '157645', '18'), +('10', '95', '13', '111518', '242515', '18'), +('10', '95', '13', '111517', '240316', '18'), +('10', '95', '13', '111217', '219612', '18'), +('10', '95', '13', '111218', '219066', '18'), +('10', '95', '14', '111539', '252859', '18'), +('10', '95', '14', '111537', '252063', '18'), +('10', '95', '14', '111535', '251796', '18'), +('10', '95', '14', '111239', '221258', '18'), +('10', '95', '11', '111337', '250645', '18'), +('10', '95', '11', '111334', '250526', '18'), +('10', '95', '11', '111338', '248829', '18'), +('10', '95', '11', '111033', '219025', '18'), +('10', '96', '22', '39342', '0', '18'), +('10', '96', '22', '7867', '0', '18'), +('10', '96', '22', '23597', '0', '18'), +('10', '96', '22', '54829', '0', '18'), +('10', '96', '1', '111304', '250921', '18'), +('10', '96', '1', '111307', '250735', '18'), +('10', '96', '1', '111310', '250318', '18'), +('10', '96', '1', '111305', '249680', '18'), +('10', '96', '2', '62985', '157084', '18'), +('10', '96', '2', '94056', '156795', '18'), +('10', '96', '2', '62988', '156008', '18'), +('10', '96', '2', '104410', '133108', '18'), +('10', '96', '3', '111314', '251300', '18'), +('10', '96', '3', '111316', '250004', '18'), +('10', '96', '3', '111315', '249957', '18'), +('10', '96', '3', '111013', '219700', '18'), +('10', '96', '5', '111319', '251092', '18'), +('10', '96', '5', '111317', '249437', '18'), +('10', '96', '5', '111318', '249252', '18'), +('10', '96', '5', '111320', '249093', '18'), +('10', '96', '8', '111332', '251437', '18'), +('10', '96', '8', '111330', '250154', '18'), +('10', '96', '8', '111331', '249288', '18'), +('10', '96', '8', '111328', '249096', '18'), +('10', '96', '6', '111323', '251369', '18'), +('10', '96', '6', '111326', '250239', '18'), +('10', '96', '6', '111324', '249800', '18'), +('10', '96', '6', '111022', '219768', '18'), +('10', '96', '17', '81765', '163881', '18'), +('10', '96', '17', '56046', '163421', '18'), +('10', '96', '17', '56083', '163251', '18'), +('10', '96', '17', '104413', '138853', '18'), +('10', '96', '7', '94053', '155834', '18'), +('10', '96', '7', '56080', '155495', '18'), +('10', '96', '7', '104411', '132046', '18'), +('10', '96', '7', '54848', '100538', '18'), +('10', '96', '9', '67098', '260045', '18'), +('10', '96', '9', '81764', '152051', '18'), +('10', '96', '9', '56070', '151802', '18'), +('10', '96', '9', '62984', '151700', '18'), +('10', '96', '15', '111350', '252097', '18'), +('10', '96', '15', '111344', '251655', '18'), +('10', '96', '15', '111340', '251112', '18'), +('10', '96', '15', '111342', '249963', '18'), +('10', '96', '20', '111356', '251489', '18'), +('10', '96', '20', '111352', '250533', '18'), +('10', '96', '20', '111351', '249859', '18'), +('10', '96', '20', '111054', '219888', '18'), +('10', '96', '12', '56073', '153164', '18'), +('10', '96', '12', '56035', '152871', '18'), +('10', '96', '12', '104408', '129566', '18'), +('10', '96', '12', '49656', '99918', '18'), +('10', '96', '18', '56041', '162023', '18'), +('10', '96', '18', '62986', '160742', '18'), +('10', '96', '18', '94054', '160434', '18'), +('10', '96', '18', '104412', '135903', '18'), +('10', '96', '19', '81763', '158107', '18'), +('10', '96', '19', '56037', '157701', '18'), +('10', '96', '19', '62990', '157655', '18'), +('10', '96', '19', '56075', '157654', '18'), +('10', '96', '13', '111518', '242522', '18'), +('10', '96', '13', '111517', '240323', '18'), +('10', '96', '13', '111217', '219618', '18'), +('10', '96', '13', '111218', '219073', '18'), +('10', '96', '14', '111539', '252867', '18'), +('10', '96', '14', '111537', '252071', '18'), +('10', '96', '14', '111535', '251803', '18'), +('10', '96', '14', '111239', '221266', '18'), +('10', '96', '11', '111337', '250655', '18'), +('10', '96', '11', '111334', '250533', '18'), +('10', '96', '11', '111338', '248835', '18'), +('10', '96', '11', '111033', '219032', '18'), +('10', '97', '22', '39342', '0', '18'), +('10', '97', '22', '7867', '0', '18'), +('10', '97', '22', '23597', '0', '18'), +('10', '97', '22', '54829', '0', '18'), +('10', '97', '1', '111304', '250929', '18'), +('10', '97', '1', '111307', '250739', '18'), +('10', '97', '1', '111310', '250325', '18'), +('10', '97', '1', '111305', '249690', '18'), +('10', '97', '2', '62985', '157092', '18'), +('10', '97', '2', '94056', '156801', '18'), +('10', '97', '2', '62988', '156013', '18'), +('10', '97', '2', '104410', '133114', '18'), +('10', '97', '3', '111314', '251307', '18'), +('10', '97', '3', '111316', '250011', '18'), +('10', '97', '3', '111315', '249965', '18'), +('10', '97', '3', '111013', '219707', '18'), +('10', '97', '5', '111319', '251098', '18'), +('10', '97', '5', '111317', '249444', '18'), +('10', '97', '5', '111318', '249257', '18'), +('10', '97', '5', '111320', '249099', '18'), +('10', '97', '8', '111332', '251445', '18'), +('10', '97', '8', '111330', '250161', '18'), +('10', '97', '8', '111331', '249296', '18'), +('10', '97', '8', '111328', '249102', '18'), +('10', '97', '6', '111323', '251376', '18'), +('10', '97', '6', '111326', '250249', '18'), +('10', '97', '6', '111324', '249806', '18'), +('10', '97', '6', '111022', '219776', '18'), +('10', '97', '17', '81765', '163887', '18'), +('10', '97', '17', '56046', '163428', '18'), +('10', '97', '17', '56083', '163255', '18'), +('10', '97', '17', '104413', '138863', '18'), +('10', '97', '7', '94053', '155839', '18'), +('10', '97', '7', '56080', '155504', '18'), +('10', '97', '7', '104411', '132055', '18'), +('10', '97', '7', '54848', '100544', '18'), +('10', '97', '9', '67098', '260051', '18'), +('10', '97', '9', '81764', '152062', '18'), +('10', '97', '9', '56070', '151808', '18'), +('10', '97', '9', '62984', '151708', '18'), +('10', '97', '15', '111350', '252105', '18'), +('10', '97', '15', '111344', '251664', '18'), +('10', '97', '15', '111340', '251119', '18'), +('10', '97', '15', '111342', '249971', '18'), +('10', '97', '20', '111356', '251495', '18'), +('10', '97', '20', '111352', '250541', '18'), +('10', '97', '20', '111351', '249866', '18'), +('10', '97', '20', '111054', '219894', '18'), +('10', '97', '12', '56073', '153171', '18'), +('10', '97', '12', '56035', '152881', '18'), +('10', '97', '12', '104408', '129573', '18'), +('10', '97', '12', '49656', '99919', '18'), +('10', '97', '18', '56041', '162030', '18'), +('10', '97', '18', '62986', '160751', '18'), +('10', '97', '18', '94054', '160439', '18'), +('10', '97', '18', '104412', '135907', '18'), +('10', '97', '19', '81763', '158117', '18'), +('10', '97', '19', '56037', '157709', '18'), +('10', '97', '19', '56075', '157662', '18'), +('10', '97', '19', '62990', '157660', '18'), +('10', '97', '13', '111518', '242530', '18'), +('10', '97', '13', '111517', '240330', '18'), +('10', '97', '13', '111217', '219625', '18'), +('10', '97', '13', '111218', '219080', '18'), +('10', '97', '14', '111539', '252876', '18'), +('10', '97', '14', '111537', '252078', '18'), +('10', '97', '14', '111535', '251810', '18'), +('10', '97', '14', '111239', '221274', '18'), +('10', '97', '11', '111337', '250664', '18'), +('10', '97', '11', '111334', '250540', '18'), +('10', '97', '11', '111338', '248841', '18'), +('10', '97', '11', '111033', '219039', '18'), +('10', '98', '22', '39342', '0', '18'), +('10', '98', '22', '7867', '0', '18'), +('10', '98', '22', '23597', '0', '18'), +('10', '98', '22', '54829', '0', '18'), +('10', '98', '1', '111304', '250937', '18'), +('10', '98', '1', '111307', '250744', '18'), +('10', '98', '1', '111310', '250332', '18'), +('10', '98', '1', '111305', '249700', '18'), +('10', '98', '2', '62985', '157101', '18'), +('10', '98', '2', '94056', '156807', '18'), +('10', '98', '2', '62988', '156018', '18'), +('10', '98', '2', '104410', '133120', '18'), +('10', '98', '3', '111314', '251314', '18'), +('10', '98', '3', '111316', '250018', '18'), +('10', '98', '3', '111315', '249972', '18'), +('10', '98', '3', '111013', '219714', '18'), +('10', '98', '5', '111319', '251104', '18'), +('10', '98', '5', '111317', '249451', '18'), +('10', '98', '5', '111318', '249263', '18'), +('10', '98', '5', '111320', '249105', '18'), +('10', '98', '8', '111332', '251452', '18'), +('10', '98', '8', '111330', '250168', '18'), +('10', '98', '8', '111331', '249305', '18'), +('10', '98', '8', '111328', '249107', '18'), +('10', '98', '6', '111323', '251384', '18'), +('10', '98', '6', '111326', '250259', '18'), +('10', '98', '6', '111324', '249812', '18'), +('10', '98', '6', '111022', '219783', '18'), +('10', '98', '17', '81765', '163893', '18'), +('10', '98', '17', '56046', '163436', '18'), +('10', '98', '17', '56083', '163259', '18'), +('10', '98', '17', '104413', '138873', '18'), +('10', '98', '7', '94053', '155845', '18'), +('10', '98', '7', '56080', '155512', '18'), +('10', '98', '7', '104411', '132064', '18'), +('10', '98', '7', '54848', '100550', '18'), +('10', '98', '9', '67098', '260058', '18'), +('10', '98', '9', '81764', '152073', '18'), +('10', '98', '9', '56070', '151815', '18'), +('10', '98', '9', '62984', '151715', '18'), +('10', '98', '15', '111350', '252114', '18'), +('10', '98', '15', '111344', '251673', '18'), +('10', '98', '15', '111340', '251126', '18'), +('10', '98', '15', '111342', '249979', '18'), +('10', '98', '20', '111356', '251501', '18'), +('10', '98', '20', '111352', '250548', '18'), +('10', '98', '20', '111351', '249874', '18'), +('10', '98', '20', '111054', '219900', '18'), +('10', '98', '12', '56073', '153178', '18'), +('10', '98', '12', '56035', '152891', '18'), +('10', '98', '12', '104408', '129579', '18'), +('10', '98', '12', '49656', '99920', '18'), +('10', '98', '18', '56041', '162036', '18'), +('10', '98', '18', '62986', '160759', '18'), +('10', '98', '18', '94054', '160445', '18'), +('10', '98', '18', '104412', '135911', '18'), +('10', '98', '19', '81763', '158128', '18'), +('10', '98', '19', '56037', '157717', '18'), +('10', '98', '19', '56075', '157671', '18'), +('10', '98', '19', '62990', '157665', '18'), +('10', '98', '13', '111518', '242537', '18'), +('10', '98', '13', '111517', '240337', '18'), +('10', '98', '13', '111217', '219632', '18'), +('10', '98', '13', '111218', '219087', '18'), +('10', '98', '14', '111539', '252884', '18'), +('10', '98', '14', '111537', '252086', '18'), +('10', '98', '14', '111535', '251817', '18'), +('10', '98', '14', '111239', '221282', '18'), +('10', '98', '11', '111337', '250674', '18'), +('10', '98', '11', '111334', '250546', '18'), +('10', '98', '11', '111338', '248847', '18'), +('10', '98', '11', '111033', '219046', '18'), +('10', '99', '22', '39342', '0', '18'), +('10', '99', '22', '7867', '0', '18'), +('10', '99', '22', '23597', '0', '18'), +('10', '99', '22', '54829', '0', '18'), +('10', '99', '1', '111304', '250945', '18'), +('10', '99', '1', '111307', '250749', '18'), +('10', '99', '1', '111310', '250340', '18'), +('10', '99', '1', '111305', '249710', '18'), +('10', '99', '2', '62985', '157110', '18'), +('10', '99', '2', '94056', '156813', '18'), +('10', '99', '2', '62988', '156024', '18'), +('10', '99', '2', '104410', '133127', '18'), +('10', '99', '3', '111314', '251321', '18'), +('10', '99', '3', '111316', '250025', '18'), +('10', '99', '3', '111315', '249979', '18'), +('10', '99', '3', '111013', '219721', '18'), +('10', '99', '5', '111319', '251111', '18'), +('10', '99', '5', '111317', '249458', '18'), +('10', '99', '5', '111318', '249269', '18'), +('10', '99', '5', '111320', '249111', '18'), +('10', '99', '8', '111332', '251460', '18'), +('10', '99', '8', '111330', '250175', '18'), +('10', '99', '8', '111331', '249313', '18'), +('10', '99', '8', '111328', '249112', '18'), +('10', '99', '6', '111323', '251391', '18'), +('10', '99', '6', '111326', '250268', '18'), +('10', '99', '6', '111324', '249818', '18'), +('10', '99', '6', '111022', '219791', '18'), +('10', '99', '17', '81765', '163898', '18'), +('10', '99', '17', '56046', '163443', '18'), +('10', '99', '17', '56083', '163263', '18'), +('10', '99', '17', '104413', '138883', '18'), +('10', '99', '7', '94053', '155850', '18'), +('10', '99', '7', '56080', '155520', '18'), +('10', '99', '7', '104411', '132073', '18'), +('10', '99', '7', '54848', '100556', '18'), +('10', '99', '9', '67098', '260064', '18'), +('10', '99', '9', '81764', '152084', '18'), +('10', '99', '9', '56070', '151821', '18'), +('10', '99', '9', '62984', '151723', '18'), +('10', '99', '15', '111350', '252123', '18'), +('10', '99', '15', '111344', '251682', '18'), +('10', '99', '15', '111340', '251133', '18'), +('10', '99', '15', '111342', '249987', '18'), +('10', '99', '20', '111356', '251507', '18'), +('10', '99', '20', '111352', '250555', '18'), +('10', '99', '20', '111351', '249881', '18'), +('10', '99', '20', '111054', '219906', '18'), +('10', '99', '12', '56073', '153186', '18'), +('10', '99', '12', '56035', '152901', '18'), +('10', '99', '12', '104408', '129585', '18'), +('10', '99', '12', '49656', '99921', '18'), +('10', '99', '18', '56041', '162043', '18'), +('10', '99', '18', '62986', '160768', '18'), +('10', '99', '18', '94054', '160450', '18'), +('10', '99', '18', '104412', '135915', '18'), +('10', '99', '19', '81763', '158138', '18'), +('10', '99', '19', '56037', '157725', '18'), +('10', '99', '19', '56075', '157680', '18'), +('10', '99', '19', '62990', '157670', '18'), +('10', '99', '13', '111518', '242544', '18'), +('10', '99', '13', '111517', '240344', '18'), +('10', '99', '13', '111217', '219639', '18'), +('10', '99', '13', '111218', '219094', '18'), +('10', '99', '14', '111539', '252892', '18'), +('10', '99', '14', '111537', '252093', '18'), +('10', '99', '14', '111535', '251824', '18'), +('10', '99', '14', '111239', '221291', '18'), +('10', '99', '11', '111337', '250684', '18'), +('10', '99', '11', '111334', '250553', '18'), +('10', '99', '11', '111338', '248852', '18'), +('10', '99', '11', '111033', '219053', '18'), +('10', '100', '22', '39342', '0', '20'), +('10', '100', '22', '7867', '0', '20'), +('10', '100', '22', '23597', '0', '20'), +('10', '100', '22', '54829', '0', '20'), +('10', '100', '1', '98769', '417021', '20'), +('10', '100', '1', '111304', '250954', '20'), +('10', '100', '1', '111307', '250753', '20'), +('10', '100', '1', '111310', '250347', '20'), +('10', '100', '2', '62985', '157119', '20'), +('10', '100', '2', '94056', '156819', '20'), +('10', '100', '2', '62988', '156029', '20'), +('10', '100', '2', '104410', '133133', '20'), +('10', '100', '3', '111314', '251328', '20'), +('10', '100', '3', '111316', '250032', '20'), +('10', '100', '3', '111315', '249987', '20'), +('10', '100', '3', '111013', '219728', '20'), +('10', '100', '5', '111319', '251117', '20'), +('10', '100', '5', '111317', '249465', '20'), +('10', '100', '5', '111318', '249275', '20'), +('10', '100', '5', '111320', '249117', '20'), +('10', '100', '8', '111332', '251468', '20'), +('10', '100', '8', '111330', '250181', '20'), +('10', '100', '8', '111331', '249322', '20'), +('10', '100', '8', '111328', '249117', '20'), +('10', '100', '6', '111323', '251399', '20'), +('10', '100', '6', '111326', '250278', '20'), +('10', '100', '6', '111324', '249823', '20'), +('10', '100', '6', '111022', '219798', '20'), +('10', '100', '17', '81765', '163904', '20'), +('10', '100', '17', '56046', '163450', '20'), +('10', '100', '17', '56083', '163267', '20'), +('10', '100', '17', '104413', '138893', '20'), +('10', '100', '7', '94053', '155856', '20'), +('10', '100', '7', '56080', '155529', '20'), +('10', '100', '7', '104411', '132083', '20'), +('10', '100', '7', '54848', '100563', '20'), +('10', '100', '9', '67098', '260070', '20'), +('10', '100', '9', '81764', '152095', '20'), +('10', '100', '9', '56070', '151827', '20'), +('10', '100', '9', '62984', '151730', '20'), +('10', '100', '15', '111350', '252132', '20'), +('10', '100', '15', '111344', '251690', '20'), +('10', '100', '15', '111340', '251140', '20'), +('10', '100', '15', '111342', '249995', '20'), +('10', '100', '20', '111356', '251513', '20'), +('10', '100', '20', '111352', '250563', '20'), +('10', '100', '20', '111351', '249888', '20'), +('10', '100', '20', '111054', '219912', '20'), +('10', '100', '12', '56073', '153193', '20'), +('10', '100', '12', '56035', '152911', '20'), +('10', '100', '12', '104408', '129591', '20'), +('10', '100', '12', '49656', '99921', '20'), +('10', '100', '18', '56041', '162049', '20'), +('10', '100', '18', '62986', '160776', '20'), +('10', '100', '18', '94054', '160455', '20'), +('10', '100', '18', '104412', '135919', '20'), +('10', '100', '19', '81763', '158149', '20'), +('10', '100', '19', '56037', '157733', '20'), +('10', '100', '19', '56075', '157688', '20'), +('10', '100', '19', '62990', '157675', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '100', '13', '111518', '242552', '20'), +('10', '100', '13', '111517', '240352', '20'), +('10', '100', '13', '111217', '219646', '20'), +('10', '100', '13', '111218', '219102', '20'), +('10', '100', '14', '111539', '252900', '20'), +('10', '100', '14', '111537', '252101', '20'), +('10', '100', '14', '111535', '251831', '20'), +('10', '100', '14', '111239', '221299', '20'), +('10', '100', '11', '133816', '330373', '20'), +('10', '100', '11', '111337', '250694', '20'), +('10', '100', '11', '111334', '250560', '20'), +('10', '100', '11', '111338', '248858', '20'), +('10', '100', '22', '39342', '0', '19'), +('10', '100', '22', '7867', '0', '19'), +('10', '100', '22', '23597', '0', '19'), +('10', '100', '22', '54829', '0', '19'), +('10', '100', '1', '98769', '417021', '19'), +('10', '100', '1', '111304', '250954', '19'), +('10', '100', '1', '111307', '250753', '19'), +('10', '100', '1', '111310', '250347', '19'), +('10', '100', '2', '62985', '157119', '19'), +('10', '100', '2', '94056', '156819', '19'), +('10', '100', '2', '62988', '156029', '19'), +('10', '100', '2', '104410', '133133', '19'), +('10', '100', '3', '111314', '251328', '19'), +('10', '100', '3', '111316', '250032', '19'), +('10', '100', '3', '111315', '249987', '19'), +('10', '100', '3', '111013', '219728', '19'), +('10', '100', '5', '111319', '251117', '19'), +('10', '100', '5', '111317', '249465', '19'), +('10', '100', '5', '111318', '249275', '19'), +('10', '100', '5', '111320', '249117', '19'), +('10', '100', '8', '111332', '251468', '19'), +('10', '100', '8', '111330', '250181', '19'), +('10', '100', '8', '111331', '249322', '19'), +('10', '100', '8', '111328', '249117', '19'), +('10', '100', '6', '111323', '251399', '19'), +('10', '100', '6', '111326', '250278', '19'), +('10', '100', '6', '111324', '249823', '19'), +('10', '100', '6', '111022', '219798', '19'), +('10', '100', '17', '81765', '163904', '19'), +('10', '100', '17', '56046', '163450', '19'), +('10', '100', '17', '56083', '163267', '19'), +('10', '100', '17', '104413', '138893', '19'), +('10', '100', '7', '94053', '155856', '19'), +('10', '100', '7', '56080', '155529', '19'), +('10', '100', '7', '104411', '132083', '19'), +('10', '100', '7', '54848', '100563', '19'), +('10', '100', '9', '67098', '260070', '19'), +('10', '100', '9', '81764', '152095', '19'), +('10', '100', '9', '56070', '151827', '19'), +('10', '100', '9', '62984', '151730', '19'), +('10', '100', '15', '111350', '252132', '19'), +('10', '100', '15', '111344', '251690', '19'), +('10', '100', '15', '111340', '251140', '19'), +('10', '100', '15', '111342', '249995', '19'), +('10', '100', '20', '111356', '251513', '19'), +('10', '100', '20', '111352', '250563', '19'), +('10', '100', '20', '111351', '249888', '19'), +('10', '100', '20', '111054', '219912', '19'), +('10', '100', '12', '56073', '153193', '19'), +('10', '100', '12', '56035', '152911', '19'), +('10', '100', '12', '104408', '129591', '19'), +('10', '100', '12', '49656', '99921', '19'), +('10', '100', '18', '56041', '162049', '19'), +('10', '100', '18', '62986', '160776', '19'), +('10', '100', '18', '94054', '160455', '19'), +('10', '100', '18', '104412', '135919', '19'), +('10', '100', '19', '81763', '158149', '19'), +('10', '100', '19', '56037', '157733', '19'), +('10', '100', '19', '56075', '157688', '19'), +('10', '100', '19', '62990', '157675', '19'), +('10', '100', '13', '111518', '242551', '19'), +('10', '100', '13', '111517', '240351', '19'), +('10', '100', '13', '111217', '219645', '19'), +('10', '100', '13', '111218', '219101', '19'), +('10', '100', '14', '111539', '252900', '19'), +('10', '100', '14', '111537', '252101', '19'), +('10', '100', '14', '111535', '251831', '19'), +('10', '100', '14', '111239', '221299', '19'), +('10', '100', '11', '133816', '330373', '19'), +('10', '100', '11', '111337', '250694', '19'), +('10', '100', '11', '111334', '250560', '19'), +('10', '100', '11', '111338', '248858', '19'), +('10', '101', '22', '39342', '0', '20'), +('10', '101', '22', '7867', '0', '20'), +('10', '101', '22', '23597', '0', '20'), +('10', '101', '22', '54829', '0', '20'), +('10', '101', '1', '98769', '417026', '20'), +('10', '101', '1', '111304', '250962', '20'), +('10', '101', '1', '111307', '250758', '20'), +('10', '101', '1', '111310', '250354', '20'), +('10', '101', '2', '62985', '157127', '20'), +('10', '101', '2', '94056', '156825', '20'), +('10', '101', '2', '62988', '156034', '20'), +('10', '101', '2', '104410', '133139', '20'), +('10', '101', '3', '111314', '251335', '20'), +('10', '101', '3', '111316', '250039', '20'), +('10', '101', '3', '111315', '249994', '20'), +('10', '101', '3', '111013', '219735', '20'), +('10', '101', '5', '111319', '251124', '20'), +('10', '101', '5', '111317', '249472', '20'), +('10', '101', '5', '111318', '249280', '20'), +('10', '101', '5', '111320', '249123', '20'), +('10', '101', '8', '111332', '251475', '20'), +('10', '101', '8', '111330', '250188', '20'), +('10', '101', '8', '111331', '249330', '20'), +('10', '101', '8', '111328', '249122', '20'), +('10', '101', '6', '111323', '251406', '20'), +('10', '101', '6', '111326', '250288', '20'), +('10', '101', '6', '111324', '249829', '20'), +('10', '101', '6', '111022', '219806', '20'), +('10', '101', '17', '81765', '163910', '20'), +('10', '101', '17', '56046', '163458', '20'), +('10', '101', '17', '56083', '163271', '20'), +('10', '101', '17', '104413', '138903', '20'), +('10', '101', '7', '94053', '155862', '20'), +('10', '101', '7', '56080', '155537', '20'), +('10', '101', '7', '104411', '132092', '20'), +('10', '101', '7', '54848', '100569', '20'), +('10', '101', '9', '67098', '260076', '20'), +('10', '101', '9', '81764', '152106', '20'), +('10', '101', '9', '56070', '151834', '20'), +('10', '101', '9', '62984', '151737', '20'), +('10', '101', '15', '111350', '252141', '20'), +('10', '101', '15', '111344', '251699', '20'), +('10', '101', '15', '111340', '251147', '20'), +('10', '101', '15', '111342', '250002', '20'), +('10', '101', '20', '111356', '251519', '20'), +('10', '101', '20', '111352', '250570', '20'), +('10', '101', '20', '111351', '249896', '20'), +('10', '101', '20', '111054', '219919', '20'), +('10', '101', '12', '56073', '153200', '20'), +('10', '101', '12', '56035', '152921', '20'), +('10', '101', '12', '104408', '129598', '20'), +('10', '101', '12', '49656', '99922', '20'), +('10', '101', '18', '56041', '162055', '20'), +('10', '101', '18', '62986', '160785', '20'), +('10', '101', '18', '94054', '160461', '20'), +('10', '101', '18', '104412', '135923', '20'), +('10', '101', '19', '81763', '158159', '20'), +('10', '101', '19', '56037', '157740', '20'), +('10', '101', '19', '56075', '157697', '20'), +('10', '101', '19', '62990', '157680', '20'), +('10', '101', '13', '111518', '242559', '20'), +('10', '101', '13', '111517', '240359', '20'), +('10', '101', '13', '111217', '219653', '20'), +('10', '101', '13', '111218', '219109', '20'), +('10', '101', '14', '111539', '252909', '20'), +('10', '101', '14', '111537', '252108', '20'), +('10', '101', '14', '111535', '251838', '20'), +('10', '101', '14', '111239', '221307', '20'), +('10', '101', '11', '133816', '330379', '20'), +('10', '101', '11', '111337', '250704', '20'), +('10', '101', '11', '111334', '250567', '20'), +('10', '101', '11', '111338', '248864', '20'), +('10', '102', '22', '39342', '0', '20'), +('10', '102', '22', '7867', '0', '20'), +('10', '102', '22', '23597', '0', '20'), +('10', '102', '22', '54829', '0', '20'), +('10', '102', '1', '98769', '417031', '20'), +('10', '102', '1', '111304', '250970', '20'), +('10', '102', '1', '111307', '250763', '20'), +('10', '102', '1', '111310', '250362', '20'), +('10', '102', '2', '62985', '157136', '20'), +('10', '102', '2', '94056', '156831', '20'), +('10', '102', '2', '62988', '156039', '20'), +('10', '102', '2', '104410', '133145', '20'), +('10', '102', '3', '111314', '251342', '20'), +('10', '102', '3', '111316', '250046', '20'), +('10', '102', '3', '111315', '250001', '20'), +('10', '102', '3', '111013', '219742', '20'), +('10', '102', '5', '111319', '251130', '20'), +('10', '102', '5', '111317', '249479', '20'), +('10', '102', '5', '111318', '249286', '20'), +('10', '102', '5', '111320', '249129', '20'), +('10', '102', '8', '111332', '251483', '20'), +('10', '102', '8', '111330', '250195', '20'), +('10', '102', '8', '111331', '249338', '20'), +('10', '102', '8', '111328', '249127', '20'), +('10', '102', '6', '111323', '251414', '20'), +('10', '102', '6', '111326', '250297', '20'), +('10', '102', '6', '111324', '249835', '20'), +('10', '102', '6', '111022', '219813', '20'), +('10', '102', '17', '81765', '163916', '20'), +('10', '102', '17', '56046', '163465', '20'), +('10', '102', '17', '56083', '163274', '20'), +('10', '102', '17', '104413', '138913', '20'), +('10', '102', '7', '94053', '155867', '20'), +('10', '102', '7', '56080', '155545', '20'), +('10', '102', '7', '104411', '132101', '20'), +('10', '102', '7', '54848', '100575', '20'), +('10', '102', '9', '67098', '260082', '20'), +('10', '102', '9', '81764', '152116', '20'), +('10', '102', '9', '56070', '151840', '20'), +('10', '102', '9', '62984', '151745', '20'), +('10', '102', '15', '111350', '252150', '20'), +('10', '102', '15', '111344', '251708', '20'), +('10', '102', '15', '111340', '251154', '20'), +('10', '102', '15', '111342', '250010', '20'), +('10', '102', '20', '111356', '251525', '20'), +('10', '102', '20', '111352', '250577', '20'), +('10', '102', '20', '111351', '249903', '20'), +('10', '102', '20', '111054', '219925', '20'), +('10', '102', '12', '56073', '153208', '20'), +('10', '102', '12', '56035', '152931', '20'), +('10', '102', '12', '104408', '129604', '20'), +('10', '102', '12', '49656', '99923', '20'), +('10', '102', '18', '56041', '162062', '20'), +('10', '102', '18', '62986', '160794', '20'), +('10', '102', '18', '94054', '160466', '20'), +('10', '102', '18', '104412', '135927', '20'), +('10', '102', '19', '81763', '158170', '20'), +('10', '102', '19', '56037', '157748', '20'), +('10', '102', '19', '56075', '157706', '20'), +('10', '102', '19', '62990', '157685', '20'), +('10', '102', '13', '111518', '242566', '20'), +('10', '102', '13', '111517', '240366', '20'), +('10', '102', '13', '111217', '219659', '20'), +('10', '102', '13', '111218', '219116', '20'), +('10', '102', '14', '111539', '252917', '20'), +('10', '102', '14', '111537', '252115', '20'), +('10', '102', '14', '111535', '251845', '20'), +('10', '102', '14', '111239', '221315', '20'), +('10', '102', '11', '133816', '330384', '20'), +('10', '102', '11', '111337', '250714', '20'), +('10', '102', '11', '111334', '250574', '20'), +('10', '102', '11', '111338', '248870', '20'), +('10', '103', '22', '39342', '0', '20'), +('10', '103', '22', '7867', '0', '20'), +('10', '103', '22', '23597', '0', '20'), +('10', '103', '22', '54829', '0', '20'), +('10', '103', '1', '98769', '417036', '20'), +('10', '103', '1', '111304', '250978', '20'), +('10', '103', '1', '111307', '250767', '20'), +('10', '103', '1', '111310', '250369', '20'), +('10', '103', '2', '62985', '157145', '20'), +('10', '103', '2', '94056', '156838', '20'), +('10', '103', '2', '62988', '156044', '20'), +('10', '103', '2', '104410', '133151', '20'), +('10', '103', '3', '111314', '251349', '20'), +('10', '103', '3', '111316', '250052', '20'), +('10', '103', '3', '111315', '250009', '20'), +('10', '103', '3', '111013', '219749', '20'), +('10', '103', '5', '111319', '251136', '20'), +('10', '103', '5', '111317', '249485', '20'), +('10', '103', '5', '111318', '249292', '20'), +('10', '103', '5', '111320', '249135', '20'), +('10', '103', '8', '111332', '251491', '20'), +('10', '103', '8', '111330', '250202', '20'), +('10', '103', '8', '111331', '249347', '20'), +('10', '103', '8', '111328', '249132', '20'), +('10', '103', '6', '111323', '251421', '20'), +('10', '103', '6', '111326', '250307', '20'), +('10', '103', '6', '111324', '249841', '20'), +('10', '103', '6', '111022', '219821', '20'), +('10', '103', '17', '81765', '163921', '20'), +('10', '103', '17', '56046', '163472', '20'), +('10', '103', '17', '56083', '163278', '20'), +('10', '103', '17', '104413', '138923', '20'), +('10', '103', '7', '94053', '155873', '20'), +('10', '103', '7', '56080', '155554', '20'), +('10', '103', '7', '104411', '132110', '20'), +('10', '103', '7', '54848', '100582', '20'), +('10', '103', '9', '67098', '260088', '20'), +('10', '103', '9', '81764', '152127', '20'), +('10', '103', '9', '56070', '151847', '20'), +('10', '103', '9', '62984', '151752', '20'), +('10', '103', '15', '111350', '252159', '20'), +('10', '103', '15', '111344', '251717', '20'), +('10', '103', '15', '111340', '251161', '20'), +('10', '103', '15', '111342', '250018', '20'), +('10', '103', '20', '111356', '251531', '20'), +('10', '103', '20', '111352', '250585', '20'), +('10', '103', '20', '111351', '249910', '20'), +('10', '103', '20', '111054', '219931', '20'), +('10', '103', '12', '56073', '153215', '20'), +('10', '103', '12', '56035', '152941', '20'), +('10', '103', '12', '104408', '129610', '20'), +('10', '103', '12', '49656', '99924', '20'), +('10', '103', '18', '56041', '162068', '20'), +('10', '103', '18', '62986', '160802', '20'), +('10', '103', '18', '94054', '160472', '20'), +('10', '103', '18', '104412', '135931', '20'), +('10', '103', '19', '81763', '158181', '20'), +('10', '103', '19', '56037', '157756', '20'), +('10', '103', '19', '56075', '157714', '20'), +('10', '103', '19', '62990', '157690', '20'), +('10', '103', '13', '111518', '242574', '20'), +('10', '103', '13', '111517', '240373', '20'), +('10', '103', '13', '111217', '219666', '20'), +('10', '103', '13', '111218', '219123', '20'), +('10', '103', '14', '111539', '252925', '20'), +('10', '103', '14', '111537', '252123', '20'), +('10', '103', '14', '111535', '251852', '20'), +('10', '103', '14', '111239', '221323', '20'), +('10', '103', '11', '133816', '330390', '20'), +('10', '103', '11', '111337', '250724', '20'), +('10', '103', '11', '111334', '250581', '20'), +('10', '103', '11', '111338', '248876', '20'), +('10', '104', '22', '39342', '0', '20'), +('10', '104', '22', '7867', '0', '20'), +('10', '104', '22', '23597', '0', '20'), +('10', '104', '22', '54829', '0', '20'), +('10', '104', '1', '98769', '417040', '20'), +('10', '104', '1', '111304', '250986', '20'), +('10', '104', '1', '111307', '250772', '20'), +('10', '104', '1', '111310', '250376', '20'), +('10', '104', '2', '62985', '157154', '20'), +('10', '104', '2', '94056', '156844', '20'), +('10', '104', '2', '62988', '156049', '20'), +('10', '104', '2', '104410', '133158', '20'), +('10', '104', '3', '111314', '251356', '20'), +('10', '104', '3', '111316', '250059', '20'), +('10', '104', '3', '111315', '250016', '20'), +('10', '104', '3', '111013', '219756', '20'), +('10', '104', '5', '111319', '251143', '20'), +('10', '104', '5', '111317', '249492', '20'), +('10', '104', '5', '111318', '249297', '20'), +('10', '104', '5', '111320', '249141', '20'), +('10', '104', '8', '111332', '251498', '20'), +('10', '104', '8', '111330', '250208', '20'), +('10', '104', '8', '111331', '249355', '20'), +('10', '104', '8', '111328', '249137', '20'), +('10', '104', '6', '111323', '251429', '20'), +('10', '104', '6', '111326', '250317', '20'), +('10', '104', '6', '111324', '249847', '20'), +('10', '104', '6', '111022', '219828', '20'), +('10', '104', '17', '81765', '163927', '20'), +('10', '104', '17', '56046', '163479', '20'), +('10', '104', '17', '56083', '163282', '20'), +('10', '104', '17', '104413', '138933', '20'), +('10', '104', '7', '94053', '155878', '20'), +('10', '104', '7', '56080', '155562', '20'), +('10', '104', '7', '104411', '132119', '20'), +('10', '104', '7', '54848', '100588', '20'), +('10', '104', '9', '67098', '260094', '20'), +('10', '104', '9', '81764', '152138', '20'), +('10', '104', '9', '56070', '151853', '20'), +('10', '104', '9', '62984', '151760', '20'), +('10', '104', '15', '111350', '252168', '20'), +('10', '104', '15', '111344', '251726', '20'), +('10', '104', '15', '111340', '251168', '20'), +('10', '104', '15', '111342', '250026', '20'), +('10', '104', '20', '111356', '251537', '20'), +('10', '104', '20', '111352', '250592', '20'), +('10', '104', '20', '111351', '249918', '20'), +('10', '104', '20', '111054', '219937', '20'), +('10', '104', '12', '56073', '153222', '20'), +('10', '104', '12', '56035', '152951', '20'), +('10', '104', '12', '104408', '129617', '20'), +('10', '104', '12', '49656', '99925', '20'), +('10', '104', '18', '56041', '162075', '20'), +('10', '104', '18', '62986', '160811', '20'), +('10', '104', '18', '94054', '160477', '20'), +('10', '104', '18', '104412', '135936', '20'), +('10', '104', '19', '81763', '158191', '20'), +('10', '104', '19', '56037', '157764', '20'), +('10', '104', '19', '56075', '157723', '20'), +('10', '104', '19', '62990', '157696', '20'), +('10', '104', '13', '111518', '242581', '20'), +('10', '104', '13', '111517', '240380', '20'), +('10', '104', '13', '111217', '219673', '20'), +('10', '104', '13', '111218', '219130', '20'), +('10', '104', '14', '111539', '252933', '20'), +('10', '104', '14', '111537', '252130', '20'), +('10', '104', '14', '111535', '251859', '20'), +('10', '104', '14', '111239', '221332', '20'), +('10', '104', '11', '133816', '330395', '20'), +('10', '104', '11', '111337', '250733', '20'), +('10', '104', '11', '111334', '250588', '20'), +('10', '104', '11', '111338', '248882', '20'), +('10', '105', '22', '39342', '0', '23'), +('10', '105', '22', '7867', '0', '23'), +('10', '105', '22', '23597', '0', '23'), +('10', '105', '22', '54829', '0', '23'), +('10', '105', '1', '98769', '417045', '23'), +('10', '105', '1', '111304', '250994', '23'), +('10', '105', '1', '111307', '250777', '23'), +('10', '105', '1', '111310', '250383', '23'), +('10', '105', '2', '62985', '157162', '23'), +('10', '105', '2', '94056', '156850', '23'), +('10', '105', '2', '62988', '156054', '23'), +('10', '105', '2', '104410', '133164', '23'), +('10', '105', '3', '111314', '251363', '23'), +('10', '105', '3', '111316', '250066', '23'), +('10', '105', '3', '111315', '250024', '23'), +('10', '105', '3', '111013', '219763', '23'), +('10', '105', '5', '111319', '251149', '23'), +('10', '105', '5', '111317', '249499', '23'), +('10', '105', '5', '111318', '249303', '23'), +('10', '105', '5', '111320', '249147', '23'), +('10', '105', '8', '111332', '251506', '23'), +('10', '105', '8', '111330', '250215', '23'), +('10', '105', '8', '111331', '249364', '23'), +('10', '105', '8', '111328', '249142', '23'), +('10', '105', '6', '111323', '251436', '23'), +('10', '105', '6', '111326', '250327', '23'), +('10', '105', '6', '111324', '249853', '23'), +('10', '105', '6', '111022', '219836', '23'), +('10', '105', '17', '81765', '163933', '23'), +('10', '105', '17', '56046', '163487', '23'), +('10', '105', '17', '56083', '163286', '23'), +('10', '105', '17', '104413', '138943', '23'), +('10', '105', '7', '94053', '155884', '23'), +('10', '105', '7', '56080', '155570', '23'), +('10', '105', '7', '104411', '132129', '23'), +('10', '105', '7', '54848', '100594', '23'), +('10', '105', '9', '67098', '260100', '23'), +('10', '105', '9', '81764', '152149', '23'), +('10', '105', '9', '56070', '151859', '23'), +('10', '105', '9', '62984', '151767', '23'), +('10', '105', '15', '111350', '252176', '23'), +('10', '105', '15', '111344', '251734', '23'), +('10', '105', '15', '111340', '251175', '23'), +('10', '105', '15', '111342', '250034', '23'), +('10', '105', '20', '111356', '251543', '23'), +('10', '105', '20', '111352', '250599', '23'), +('10', '105', '20', '111351', '249925', '23'), +('10', '105', '20', '111054', '219943', '23'), +('10', '105', '12', '56073', '153229', '23'), +('10', '105', '12', '56035', '152960', '23'), +('10', '105', '12', '104408', '129623', '23'), +('10', '105', '12', '49656', '99926', '23'), +('10', '105', '18', '56041', '162081', '23'), +('10', '105', '18', '62986', '160819', '23'), +('10', '105', '18', '94054', '160482', '23'), +('10', '105', '18', '104412', '135940', '23'), +('10', '105', '19', '81763', '158202', '23'), +('10', '105', '19', '56037', '157772', '23'), +('10', '105', '19', '56075', '157732', '23'), +('10', '105', '19', '62990', '157701', '23'), +('10', '105', '13', '111518', '242588', '23'), +('10', '105', '13', '111517', '240387', '23'), +('10', '105', '13', '111217', '219679', '23'), +('10', '105', '13', '111218', '219137', '23'), +('10', '105', '14', '111539', '252941', '23'), +('10', '105', '14', '111537', '252138', '23'), +('10', '105', '14', '111535', '251865', '23'), +('10', '105', '14', '111239', '221340', '23'), +('10', '105', '11', '133816', '330401', '23'), +('10', '105', '11', '111337', '250743', '23'), +('10', '105', '11', '111334', '250595', '23'), +('10', '105', '11', '111338', '248888', '23'), +('10', '105', '22', '39342', '0', '22'), +('10', '105', '22', '7867', '0', '22'), +('10', '105', '22', '23597', '0', '22'), +('10', '105', '22', '54829', '0', '22'), +('10', '105', '1', '98769', '417045', '22'), +('10', '105', '1', '111304', '250994', '22'), +('10', '105', '1', '111307', '250777', '22'), +('10', '105', '1', '111310', '250383', '22'), +('10', '105', '2', '62985', '157162', '22'), +('10', '105', '2', '94056', '156850', '22'), +('10', '105', '2', '62988', '156054', '22'), +('10', '105', '2', '104410', '133164', '22'), +('10', '105', '3', '111314', '251363', '22'), +('10', '105', '3', '111316', '250066', '22'), +('10', '105', '3', '111315', '250024', '22'), +('10', '105', '3', '111013', '219763', '22'), +('10', '105', '5', '111319', '251149', '22'), +('10', '105', '5', '111317', '249499', '22'), +('10', '105', '5', '111318', '249303', '22'), +('10', '105', '5', '111320', '249147', '22'), +('10', '105', '8', '111332', '251506', '22'), +('10', '105', '8', '111330', '250215', '22'), +('10', '105', '8', '111331', '249364', '22'), +('10', '105', '8', '111328', '249142', '22'), +('10', '105', '6', '111323', '251436', '22'), +('10', '105', '6', '111326', '250327', '22'), +('10', '105', '6', '111324', '249853', '22'), +('10', '105', '6', '111022', '219836', '22'), +('10', '105', '17', '81765', '163933', '22'), +('10', '105', '17', '56046', '163487', '22'), +('10', '105', '17', '56083', '163286', '22'), +('10', '105', '17', '104413', '138943', '22'), +('10', '105', '7', '94053', '155884', '22'), +('10', '105', '7', '56080', '155570', '22'), +('10', '105', '7', '104411', '132129', '22'), +('10', '105', '7', '54848', '100594', '22'), +('10', '105', '9', '67098', '260100', '22'), +('10', '105', '9', '81764', '152149', '22'), +('10', '105', '9', '56070', '151859', '22'), +('10', '105', '9', '62984', '151767', '22'), +('10', '105', '15', '111350', '252176', '22'), +('10', '105', '15', '111344', '251734', '22'), +('10', '105', '15', '111340', '251175', '22'), +('10', '105', '15', '111342', '250034', '22'), +('10', '105', '20', '111356', '251543', '22'), +('10', '105', '20', '111352', '250599', '22'), +('10', '105', '20', '111351', '249925', '22'), +('10', '105', '20', '111054', '219943', '22'), +('10', '105', '12', '56073', '153229', '22'), +('10', '105', '12', '56035', '152960', '22'), +('10', '105', '12', '104408', '129623', '22'), +('10', '105', '12', '49656', '99926', '22'), +('10', '105', '18', '56041', '162081', '22'), +('10', '105', '18', '62986', '160819', '22'), +('10', '105', '18', '94054', '160482', '22'), +('10', '105', '18', '104412', '135940', '22'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '105', '19', '81763', '158202', '22'), +('10', '105', '19', '56037', '157772', '22'), +('10', '105', '19', '56075', '157732', '22'), +('10', '105', '19', '62990', '157701', '22'), +('10', '105', '13', '111518', '242588', '22'), +('10', '105', '13', '111517', '240387', '22'), +('10', '105', '13', '111217', '219679', '22'), +('10', '105', '13', '111218', '219137', '22'), +('10', '105', '14', '111539', '252941', '22'), +('10', '105', '14', '111537', '252138', '22'), +('10', '105', '14', '111535', '251865', '22'), +('10', '105', '14', '111239', '221340', '22'), +('10', '105', '11', '133816', '330401', '22'), +('10', '105', '11', '111337', '250743', '22'), +('10', '105', '11', '111334', '250595', '22'), +('10', '105', '11', '111338', '248888', '22'), +('10', '105', '22', '39342', '0', '21'), +('10', '105', '22', '7867', '0', '21'), +('10', '105', '22', '23597', '0', '21'), +('10', '105', '22', '54829', '0', '21'), +('10', '105', '1', '98769', '417045', '21'), +('10', '105', '1', '111304', '250994', '21'), +('10', '105', '1', '111307', '250777', '21'), +('10', '105', '1', '111310', '250383', '21'), +('10', '105', '2', '62985', '157162', '21'), +('10', '105', '2', '94056', '156850', '21'), +('10', '105', '2', '62988', '156054', '21'), +('10', '105', '2', '104410', '133164', '21'), +('10', '105', '3', '111314', '251363', '21'), +('10', '105', '3', '111316', '250066', '21'), +('10', '105', '3', '111315', '250024', '21'), +('10', '105', '3', '111013', '219763', '21'), +('10', '105', '5', '111319', '251149', '21'), +('10', '105', '5', '111317', '249499', '21'), +('10', '105', '5', '111318', '249303', '21'), +('10', '105', '5', '111320', '249147', '21'), +('10', '105', '8', '111332', '251506', '21'), +('10', '105', '8', '111330', '250215', '21'), +('10', '105', '8', '111331', '249364', '21'), +('10', '105', '8', '111328', '249142', '21'), +('10', '105', '6', '111323', '251436', '21'), +('10', '105', '6', '111326', '250327', '21'), +('10', '105', '6', '111324', '249853', '21'), +('10', '105', '6', '111022', '219836', '21'), +('10', '105', '17', '81765', '163933', '21'), +('10', '105', '17', '56046', '163487', '21'), +('10', '105', '17', '56083', '163286', '21'), +('10', '105', '17', '104413', '138943', '21'), +('10', '105', '7', '94053', '155884', '21'), +('10', '105', '7', '56080', '155570', '21'), +('10', '105', '7', '104411', '132129', '21'), +('10', '105', '7', '54848', '100594', '21'), +('10', '105', '9', '67098', '260100', '21'), +('10', '105', '9', '81764', '152149', '21'), +('10', '105', '9', '56070', '151859', '21'), +('10', '105', '9', '62984', '151767', '21'), +('10', '105', '15', '111350', '252176', '21'), +('10', '105', '15', '111344', '251734', '21'), +('10', '105', '15', '111340', '251175', '21'), +('10', '105', '15', '111342', '250034', '21'), +('10', '105', '20', '111356', '251543', '21'), +('10', '105', '20', '111352', '250599', '21'), +('10', '105', '20', '111351', '249925', '21'), +('10', '105', '20', '111054', '219943', '21'), +('10', '105', '12', '56073', '153229', '21'), +('10', '105', '12', '56035', '152960', '21'), +('10', '105', '12', '104408', '129623', '21'), +('10', '105', '12', '49656', '99926', '21'), +('10', '105', '18', '56041', '162081', '21'), +('10', '105', '18', '62986', '160819', '21'), +('10', '105', '18', '94054', '160482', '21'), +('10', '105', '18', '104412', '135940', '21'), +('10', '105', '19', '81763', '158202', '21'), +('10', '105', '19', '56037', '157772', '21'), +('10', '105', '19', '56075', '157732', '21'), +('10', '105', '19', '62990', '157701', '21'), +('10', '105', '13', '111518', '242588', '21'), +('10', '105', '13', '111517', '240387', '21'), +('10', '105', '13', '111217', '219679', '21'), +('10', '105', '13', '111218', '219137', '21'), +('10', '105', '14', '111539', '252941', '21'), +('10', '105', '14', '111537', '252138', '21'), +('10', '105', '14', '111535', '251865', '21'), +('10', '105', '14', '111239', '221340', '21'), +('10', '105', '11', '133816', '330401', '21'), +('10', '105', '11', '111337', '250743', '21'), +('10', '105', '11', '111334', '250595', '21'), +('10', '105', '11', '111338', '248888', '21'), +('10', '106', '22', '39342', '0', '23'), +('10', '106', '22', '7867', '0', '23'), +('10', '106', '22', '23597', '0', '23'), +('10', '106', '22', '54829', '0', '23'), +('10', '106', '1', '98769', '417050', '23'), +('10', '106', '1', '111304', '251002', '23'), +('10', '106', '1', '111307', '250782', '23'), +('10', '106', '1', '111310', '250391', '23'), +('10', '106', '2', '62985', '157171', '23'), +('10', '106', '2', '94056', '156856', '23'), +('10', '106', '2', '62988', '156059', '23'), +('10', '106', '2', '104410', '133170', '23'), +('10', '106', '3', '111314', '251371', '23'), +('10', '106', '3', '111316', '250073', '23'), +('10', '106', '3', '111315', '250031', '23'), +('10', '106', '3', '111013', '219770', '23'), +('10', '106', '5', '111319', '251155', '23'), +('10', '106', '5', '111317', '249506', '23'), +('10', '106', '5', '111318', '249309', '23'), +('10', '106', '5', '111320', '249153', '23'), +('10', '106', '8', '111332', '251514', '23'), +('10', '106', '8', '111330', '250222', '23'), +('10', '106', '8', '111331', '249372', '23'), +('10', '106', '8', '111328', '249147', '23'), +('10', '106', '6', '111323', '251444', '23'), +('10', '106', '6', '111326', '250336', '23'), +('10', '106', '6', '111324', '249858', '23'), +('10', '106', '6', '111022', '219843', '23'), +('10', '106', '17', '81765', '163939', '23'), +('10', '106', '17', '56046', '163494', '23'), +('10', '106', '17', '56083', '163290', '23'), +('10', '106', '17', '104413', '138953', '23'), +('10', '106', '7', '94053', '155889', '23'), +('10', '106', '7', '56080', '155579', '23'), +('10', '106', '7', '104411', '132138', '23'), +('10', '106', '7', '54848', '100601', '23'), +('10', '106', '9', '67098', '260106', '23'), +('10', '106', '9', '81764', '152160', '23'), +('10', '106', '9', '56070', '151866', '23'), +('10', '106', '9', '62984', '151774', '23'), +('10', '106', '15', '111350', '252185', '23'), +('10', '106', '15', '111344', '251743', '23'), +('10', '106', '15', '111340', '251182', '23'), +('10', '106', '15', '111342', '250042', '23'), +('10', '106', '20', '111356', '251549', '23'), +('10', '106', '20', '111352', '250607', '23'), +('10', '106', '20', '111351', '249933', '23'), +('10', '106', '20', '111054', '219949', '23'), +('10', '106', '12', '56073', '153237', '23'), +('10', '106', '12', '56035', '152970', '23'), +('10', '106', '12', '104408', '129629', '23'), +('10', '106', '12', '49656', '99927', '23'), +('10', '106', '18', '56041', '162087', '23'), +('10', '106', '18', '62986', '160828', '23'), +('10', '106', '18', '94054', '160488', '23'), +('10', '106', '18', '104412', '135944', '23'), +('10', '106', '19', '81763', '158212', '23'), +('10', '106', '19', '56037', '157780', '23'), +('10', '106', '19', '56075', '157741', '23'), +('10', '106', '19', '62990', '157706', '23'), +('10', '106', '13', '111518', '242596', '23'), +('10', '106', '13', '111517', '240394', '23'), +('10', '106', '13', '111217', '219686', '23'), +('10', '106', '13', '111218', '219144', '23'), +('10', '106', '14', '111539', '252950', '23'), +('10', '106', '14', '111537', '252145', '23'), +('10', '106', '14', '111535', '251872', '23'), +('10', '106', '14', '111239', '221348', '23'), +('10', '106', '11', '133816', '330407', '23'), +('10', '106', '11', '111337', '250753', '23'), +('10', '106', '11', '111334', '250602', '23'), +('10', '106', '11', '111338', '248894', '23'), +('10', '107', '22', '39342', '0', '23'), +('10', '107', '22', '7867', '0', '23'), +('10', '107', '22', '23597', '0', '23'), +('10', '107', '22', '54829', '0', '23'), +('10', '107', '1', '98769', '417054', '23'), +('10', '107', '1', '111304', '251010', '23'), +('10', '107', '1', '111307', '250786', '23'), +('10', '107', '1', '111310', '250398', '23'), +('10', '107', '2', '62985', '157180', '23'), +('10', '107', '2', '94056', '156862', '23'), +('10', '107', '2', '62988', '156064', '23'), +('10', '107', '2', '104410', '133176', '23'), +('10', '107', '3', '111314', '251378', '23'), +('10', '107', '3', '111316', '250080', '23'), +('10', '107', '3', '111315', '250038', '23'), +('10', '107', '3', '111013', '219777', '23'), +('10', '107', '5', '111319', '251162', '23'), +('10', '107', '5', '111317', '249513', '23'), +('10', '107', '5', '111318', '249314', '23'), +('10', '107', '5', '111320', '249159', '23'), +('10', '107', '8', '111332', '251521', '23'), +('10', '107', '8', '111330', '250229', '23'), +('10', '107', '8', '111331', '249381', '23'), +('10', '107', '8', '111328', '249152', '23'), +('10', '107', '6', '111323', '251451', '23'), +('10', '107', '6', '111326', '250346', '23'), +('10', '107', '6', '111324', '249864', '23'), +('10', '107', '6', '111022', '219851', '23'), +('10', '107', '17', '81765', '163945', '23'), +('10', '107', '17', '56046', '163501', '23'), +('10', '107', '17', '56083', '163294', '23'), +('10', '107', '17', '104413', '138963', '23'), +('10', '107', '7', '94053', '155895', '23'), +('10', '107', '7', '56080', '155587', '23'), +('10', '107', '7', '104411', '132147', '23'), +('10', '107', '7', '54848', '100607', '23'), +('10', '107', '9', '67098', '260112', '23'), +('10', '107', '9', '81764', '152171', '23'), +('10', '107', '9', '56070', '151872', '23'), +('10', '107', '9', '62984', '151782', '23'), +('10', '107', '15', '111350', '252194', '23'), +('10', '107', '15', '111344', '251752', '23'), +('10', '107', '15', '111340', '251189', '23'), +('10', '107', '15', '111342', '250050', '23'), +('10', '107', '20', '111356', '251556', '23'), +('10', '107', '20', '111352', '250614', '23'), +('10', '107', '20', '111351', '249940', '23'), +('10', '107', '20', '111054', '219955', '23'), +('10', '107', '12', '56073', '153244', '23'), +('10', '107', '12', '56035', '152980', '23'), +('10', '107', '12', '104408', '129636', '23'), +('10', '107', '12', '49656', '99928', '23'), +('10', '107', '18', '56041', '162094', '23'), +('10', '107', '18', '62986', '160836', '23'), +('10', '107', '18', '94054', '160493', '23'), +('10', '107', '18', '104412', '135948', '23'), +('10', '107', '19', '81763', '158223', '23'), +('10', '107', '19', '56037', '157788', '23'), +('10', '107', '19', '56075', '157749', '23'), +('10', '107', '19', '62990', '157711', '23'), +('10', '107', '13', '111518', '242603', '23'), +('10', '107', '13', '111517', '240401', '23'), +('10', '107', '13', '111217', '219693', '23'), +('10', '107', '13', '111218', '219151', '23'), +('10', '107', '14', '111539', '252958', '23'), +('10', '107', '14', '111537', '252152', '23'), +('10', '107', '14', '111535', '251879', '23'), +('10', '107', '14', '111239', '221356', '23'), +('10', '107', '11', '133816', '330412', '23'), +('10', '107', '11', '111337', '250763', '23'), +('10', '107', '11', '111334', '250609', '23'), +('10', '107', '11', '111338', '248899', '23'), +('10', '108', '22', '39342', '0', '23'), +('10', '108', '22', '7867', '0', '23'), +('10', '108', '22', '23597', '0', '23'), +('10', '108', '22', '54829', '0', '23'), +('10', '108', '1', '98769', '417059', '23'), +('10', '108', '1', '111304', '251018', '23'), +('10', '108', '1', '111307', '250791', '23'), +('10', '108', '1', '111310', '250405', '23'), +('10', '108', '2', '62985', '157189', '23'), +('10', '108', '2', '94056', '156868', '23'), +('10', '108', '2', '62988', '156069', '23'), +('10', '108', '2', '104410', '133182', '23'), +('10', '108', '3', '111314', '251385', '23'), +('10', '108', '3', '111316', '250087', '23'), +('10', '108', '3', '111315', '250046', '23'), +('10', '108', '3', '111013', '219784', '23'), +('10', '108', '5', '111319', '251168', '23'), +('10', '108', '5', '111317', '249520', '23'), +('10', '108', '5', '111318', '249320', '23'), +('10', '108', '5', '111320', '249164', '23'), +('10', '108', '8', '111332', '251529', '23'), +('10', '108', '8', '111330', '250235', '23'), +('10', '108', '8', '111331', '249389', '23'), +('10', '108', '8', '111328', '249157', '23'), +('10', '108', '6', '111323', '251459', '23'), +('10', '108', '6', '111326', '250356', '23'), +('10', '108', '6', '111324', '249870', '23'), +('10', '108', '6', '111022', '219858', '23'), +('10', '108', '17', '81765', '163950', '23'), +('10', '108', '17', '56046', '163509', '23'), +('10', '108', '17', '56083', '163298', '23'), +('10', '108', '17', '104413', '138973', '23'), +('10', '108', '7', '94053', '155900', '23'), +('10', '108', '7', '56080', '155595', '23'), +('10', '108', '7', '104411', '132156', '23'), +('10', '108', '7', '54848', '100613', '23'), +('10', '108', '9', '67098', '260118', '23'), +('10', '108', '9', '81764', '152181', '23'), +('10', '108', '9', '56070', '151879', '23'), +('10', '108', '9', '62984', '151789', '23'), +('10', '108', '15', '111350', '252203', '23'), +('10', '108', '15', '111344', '251761', '23'), +('10', '108', '15', '111340', '251196', '23'), +('10', '108', '15', '111342', '250057', '23'), +('10', '108', '20', '111356', '251562', '23'), +('10', '108', '20', '111352', '250622', '23'), +('10', '108', '20', '111351', '249947', '23'), +('10', '108', '20', '111054', '219961', '23'), +('10', '108', '12', '56073', '153251', '23'), +('10', '108', '12', '56035', '152990', '23'), +('10', '108', '12', '104408', '129642', '23'), +('10', '108', '12', '49656', '99929', '23'), +('10', '108', '18', '56041', '162100', '23'), +('10', '108', '18', '62986', '160845', '23'), +('10', '108', '18', '94054', '160499', '23'), +('10', '108', '18', '104412', '135952', '23'), +('10', '108', '19', '81763', '158233', '23'), +('10', '108', '19', '56037', '157796', '23'), +('10', '108', '19', '56075', '157758', '23'), +('10', '108', '19', '62990', '157716', '23'), +('10', '108', '13', '111518', '242610', '23'), +('10', '108', '13', '111517', '240408', '23'), +('10', '108', '13', '111217', '219700', '23'), +('10', '108', '13', '111218', '219158', '23'), +('10', '108', '14', '111539', '252966', '23'), +('10', '108', '14', '111537', '252160', '23'), +('10', '108', '14', '111535', '251886', '23'), +('10', '108', '14', '111239', '221364', '23'), +('10', '108', '11', '133816', '330418', '23'), +('10', '108', '11', '111337', '250773', '23'), +('10', '108', '11', '111334', '250615', '23'), +('10', '108', '11', '111338', '248905', '23'), +('10', '109', '22', '39342', '0', '23'), +('10', '109', '22', '7867', '0', '23'), +('10', '109', '22', '23597', '0', '23'), +('10', '109', '22', '54829', '0', '23'), +('10', '109', '1', '98769', '417064', '23'), +('10', '109', '1', '111304', '251026', '23'), +('10', '109', '1', '111307', '250796', '23'), +('10', '109', '1', '111310', '250413', '23'), +('10', '109', '2', '62985', '157197', '23'), +('10', '109', '2', '94056', '156874', '23'), +('10', '109', '2', '62988', '156074', '23'), +('10', '109', '2', '104410', '133189', '23'), +('10', '109', '3', '111314', '251392', '23'), +('10', '109', '3', '111316', '250094', '23'), +('10', '109', '3', '111315', '250053', '23'), +('10', '109', '3', '111013', '219791', '23'), +('10', '109', '5', '111319', '251174', '23'), +('10', '109', '5', '111317', '249527', '23'), +('10', '109', '5', '111318', '249326', '23'), +('10', '109', '5', '111320', '249170', '23'), +('10', '109', '8', '111332', '251537', '23'), +('10', '109', '8', '111330', '250242', '23'), +('10', '109', '8', '111331', '249398', '23'), +('10', '109', '8', '111328', '249162', '23'), +('10', '109', '6', '111323', '251466', '23'), +('10', '109', '6', '111326', '250365', '23'), +('10', '109', '6', '111324', '249876', '23'), +('10', '109', '6', '111022', '219865', '23'), +('10', '109', '17', '81765', '163956', '23'), +('10', '109', '17', '56046', '163516', '23'), +('10', '109', '17', '56083', '163302', '23'), +('10', '109', '17', '104413', '138983', '23'), +('10', '109', '7', '94053', '155906', '23'), +('10', '109', '7', '56080', '155604', '23'), +('10', '109', '7', '104411', '132165', '23'), +('10', '109', '7', '54848', '100619', '23'), +('10', '109', '9', '67098', '260124', '23'), +('10', '109', '9', '81764', '152192', '23'), +('10', '109', '9', '56070', '151885', '23'), +('10', '109', '9', '62984', '151796', '23'), +('10', '109', '15', '111350', '252212', '23'), +('10', '109', '15', '111344', '251770', '23'), +('10', '109', '15', '111340', '251203', '23'), +('10', '109', '15', '111342', '250065', '23'), +('10', '109', '20', '111356', '251568', '23'), +('10', '109', '20', '111352', '250629', '23'), +('10', '109', '20', '111351', '249955', '23'), +('10', '109', '20', '111054', '219967', '23'), +('10', '109', '12', '56073', '153259', '23'), +('10', '109', '12', '56035', '153000', '23'), +('10', '109', '12', '104408', '129648', '23'), +('10', '109', '12', '49656', '99930', '23'), +('10', '109', '18', '56041', '162107', '23'), +('10', '109', '18', '62986', '160853', '23'), +('10', '109', '18', '94054', '160504', '23'), +('10', '109', '18', '104412', '135956', '23'), +('10', '109', '19', '81763', '158244', '23'), +('10', '109', '19', '56037', '157804', '23'), +('10', '109', '19', '56075', '157767', '23'), +('10', '109', '19', '62990', '157721', '23'), +('10', '109', '13', '111518', '242617', '23'), +('10', '109', '13', '111517', '240415', '23'), +('10', '109', '13', '111217', '219706', '23'), +('10', '109', '13', '111218', '219165', '23'), +('10', '109', '14', '111539', '252974', '23'), +('10', '109', '14', '111537', '252167', '23'), +('10', '109', '14', '111535', '251893', '23'), +('10', '109', '14', '111239', '221373', '23'), +('10', '109', '11', '133816', '330423', '23'), +('10', '109', '11', '111337', '250783', '23'), +('10', '109', '11', '111334', '250622', '23'), +('10', '109', '11', '111338', '248911', '23'), +('10', '110', '22', '7867', '0', '25'), +('10', '110', '22', '39342', '0', '25'), +('10', '110', '22', '23597', '0', '25'), +('10', '110', '22', '53550', '0', '25'), +('10', '110', '1', '98769', '417068', '25'), +('10', '110', '1', '111304', '251034', '25'), +('10', '110', '1', '111307', '250800', '25'), +('10', '110', '1', '111310', '250420', '25'), +('10', '110', '2', '62985', '157206', '25'), +('10', '110', '2', '94056', '156880', '25'), +('10', '110', '2', '62988', '156079', '25'), +('10', '110', '2', '104410', '133195', '25'), +('10', '110', '3', '111314', '251399', '25'), +('10', '110', '3', '111316', '250101', '25'), +('10', '110', '3', '111315', '250060', '25'), +('10', '110', '3', '111013', '219798', '25'), +('10', '110', '5', '111319', '251181', '25'), +('10', '110', '5', '111317', '249534', '25'), +('10', '110', '5', '111318', '249331', '25'), +('10', '110', '5', '111320', '249176', '25'), +('10', '110', '8', '111332', '251544', '25'), +('10', '110', '8', '111330', '250249', '25'), +('10', '110', '8', '111331', '249406', '25'), +('10', '110', '8', '111328', '249167', '25'), +('10', '110', '6', '111323', '251473', '25'), +('10', '110', '6', '111326', '250375', '25'), +('10', '110', '6', '111324', '249882', '25'), +('10', '110', '6', '111022', '219873', '25'), +('10', '110', '17', '81765', '163962', '25'), +('10', '110', '17', '56046', '163523', '25'), +('10', '110', '17', '56083', '163306', '25'), +('10', '110', '17', '104413', '138993', '25'), +('10', '110', '7', '94053', '155912', '25'), +('10', '110', '7', '56080', '155612', '25'), +('10', '110', '7', '104411', '132175', '25'), +('10', '110', '7', '54848', '100626', '25'), +('10', '110', '9', '67098', '260130', '25'), +('10', '110', '9', '81764', '152203', '25'), +('10', '110', '9', '56070', '151892', '25'), +('10', '110', '9', '62984', '151804', '25'), +('10', '110', '15', '111350', '252221', '25'), +('10', '110', '15', '111344', '251778', '25'), +('10', '110', '15', '111340', '251210', '25'), +('10', '110', '15', '111342', '250073', '25'), +('10', '110', '20', '111356', '251574', '25'), +('10', '110', '20', '111352', '250636', '25'), +('10', '110', '20', '111351', '249962', '25'), +('10', '110', '20', '111054', '219973', '25'), +('10', '110', '12', '56073', '153266', '25'), +('10', '110', '12', '56035', '153010', '25'), +('10', '110', '12', '104408', '129654', '25'), +('10', '110', '12', '49656', '99931', '25'), +('10', '110', '18', '56041', '162113', '25'), +('10', '110', '18', '62986', '160862', '25'), +('10', '110', '18', '94054', '160509', '25'), +('10', '110', '18', '104412', '135960', '25'), +('10', '110', '19', '62904', '213670', '25'), +('10', '110', '19', '81763', '158254', '25'), +('10', '110', '19', '56037', '157812', '25'), +('10', '110', '19', '56075', '157775', '25'), +('10', '110', '13', '111518', '242625', '25'), +('10', '110', '13', '111517', '240422', '25'), +('10', '110', '13', '111217', '219714', '25'), +('10', '110', '13', '111218', '219172', '25'), +('10', '110', '14', '111539', '252982', '25'), +('10', '110', '14', '111537', '252175', '25'), +('10', '110', '14', '111535', '251900', '25'), +('10', '110', '14', '111239', '221381', '25'), +('10', '110', '11', '85213', '374863', '25'), +('10', '110', '11', '133816', '330429', '25'), +('10', '110', '11', '111337', '250792', '25'), +('10', '110', '11', '111334', '250629', '25'), +('10', '110', '22', '7867', '0', '24'), +('10', '110', '22', '39342', '0', '24'), +('10', '110', '22', '23597', '0', '24'), +('10', '110', '22', '53550', '0', '24'), +('10', '110', '1', '98769', '417068', '24'), +('10', '110', '1', '111304', '251034', '24'), +('10', '110', '1', '111307', '250800', '24'), +('10', '110', '1', '111310', '250420', '24'), +('10', '110', '2', '62985', '157206', '24'), +('10', '110', '2', '94056', '156880', '24'), +('10', '110', '2', '62988', '156079', '24'), +('10', '110', '2', '104410', '133195', '24'), +('10', '110', '3', '111314', '251399', '24'), +('10', '110', '3', '111316', '250101', '24'), +('10', '110', '3', '111315', '250060', '24'), +('10', '110', '3', '111013', '219798', '24'), +('10', '110', '5', '111319', '251181', '24'), +('10', '110', '5', '111317', '249534', '24'), +('10', '110', '5', '111318', '249331', '24'), +('10', '110', '5', '111320', '249176', '24'), +('10', '110', '8', '111332', '251544', '24'), +('10', '110', '8', '111330', '250249', '24'), +('10', '110', '8', '111331', '249406', '24'), +('10', '110', '8', '111328', '249167', '24'), +('10', '110', '6', '111323', '251473', '24'), +('10', '110', '6', '111326', '250375', '24'), +('10', '110', '6', '111324', '249882', '24'), +('10', '110', '6', '111022', '219873', '24'), +('10', '110', '17', '81765', '163962', '24'), +('10', '110', '17', '56046', '163523', '24'), +('10', '110', '17', '56083', '163306', '24'), +('10', '110', '17', '104413', '138993', '24'), +('10', '110', '7', '94053', '155912', '24'), +('10', '110', '7', '56080', '155612', '24'), +('10', '110', '7', '104411', '132175', '24'), +('10', '110', '7', '54848', '100626', '24'), +('10', '110', '9', '67098', '260130', '24'), +('10', '110', '9', '81764', '152203', '24'), +('10', '110', '9', '56070', '151892', '24'), +('10', '110', '9', '62984', '151804', '24'), +('10', '110', '15', '111350', '252221', '24'), +('10', '110', '15', '111344', '251778', '24'), +('10', '110', '15', '111340', '251210', '24'), +('10', '110', '15', '111342', '250073', '24'), +('10', '110', '20', '111356', '251574', '24'), +('10', '110', '20', '111352', '250636', '24'), +('10', '110', '20', '111351', '249962', '24'), +('10', '110', '20', '111054', '219973', '24'), +('10', '110', '12', '56073', '153266', '24'), +('10', '110', '12', '56035', '153010', '24'), +('10', '110', '12', '104408', '129654', '24'), +('10', '110', '12', '49656', '99931', '24'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('10', '110', '18', '56041', '162113', '24'), +('10', '110', '18', '62986', '160862', '24'), +('10', '110', '18', '94054', '160509', '24'), +('10', '110', '18', '104412', '135960', '24'), +('10', '110', '19', '81763', '158254', '24'), +('10', '110', '19', '56037', '157812', '24'), +('10', '110', '19', '56075', '157775', '24'), +('10', '110', '19', '62990', '157726', '24'), +('10', '110', '13', '111518', '242625', '24'), +('10', '110', '13', '111517', '240422', '24'), +('10', '110', '13', '111217', '219714', '24'), +('10', '110', '13', '111218', '219172', '24'), +('10', '110', '14', '111539', '252982', '24'), +('10', '110', '14', '111537', '252175', '24'), +('10', '110', '14', '111535', '251900', '24'), +('10', '110', '14', '111239', '221381', '24'), +('10', '110', '11', '85213', '374863', '24'), +('10', '110', '11', '133816', '330429', '24'), +('10', '110', '11', '111337', '250792', '24'), +('10', '110', '11', '111334', '250629', '24'), +('10', '111', '22', '7867', '0', '25'), +('10', '111', '22', '39342', '0', '25'), +('10', '111', '22', '23597', '0', '25'), +('10', '111', '22', '53550', '0', '25'), +('10', '111', '1', '98769', '417073', '25'), +('10', '111', '1', '111304', '251043', '25'), +('10', '111', '1', '111307', '250805', '25'), +('10', '111', '1', '111310', '250427', '25'), +('10', '111', '2', '62985', '157215', '25'), +('10', '111', '2', '94056', '156886', '25'), +('10', '111', '2', '62988', '156084', '25'), +('10', '111', '2', '104410', '133201', '25'), +('10', '111', '3', '111314', '251406', '25'), +('10', '111', '3', '111316', '250108', '25'), +('10', '111', '3', '111315', '250068', '25'), +('10', '111', '3', '111013', '219805', '25'), +('10', '111', '5', '111319', '251187', '25'), +('10', '111', '5', '111317', '249541', '25'), +('10', '111', '5', '111318', '249337', '25'), +('10', '111', '5', '111320', '249182', '25'), +('10', '111', '8', '111332', '251552', '25'), +('10', '111', '8', '111330', '250256', '25'), +('10', '111', '8', '111331', '249415', '25'), +('10', '111', '8', '111328', '249172', '25'), +('10', '111', '6', '111323', '251481', '25'), +('10', '111', '6', '111326', '250385', '25'), +('10', '111', '6', '111324', '249888', '25'), +('10', '111', '6', '111022', '219880', '25'), +('10', '111', '17', '81765', '163968', '25'), +('10', '111', '17', '56046', '163531', '25'), +('10', '111', '17', '56083', '163310', '25'), +('10', '111', '17', '104413', '139003', '25'), +('10', '111', '7', '94053', '155917', '25'), +('10', '111', '7', '56080', '155620', '25'), +('10', '111', '7', '104411', '132184', '25'), +('10', '111', '7', '54848', '100632', '25'), +('10', '111', '9', '67098', '260136', '25'), +('10', '111', '9', '81764', '152214', '25'), +('10', '111', '9', '56070', '151898', '25'), +('10', '111', '9', '62984', '151811', '25'), +('10', '111', '15', '111350', '252230', '25'), +('10', '111', '15', '111344', '251787', '25'), +('10', '111', '15', '111340', '251217', '25'), +('10', '111', '15', '111342', '250081', '25'), +('10', '111', '20', '111356', '251580', '25'), +('10', '111', '20', '111352', '250644', '25'), +('10', '111', '20', '111351', '249969', '25'), +('10', '111', '20', '111054', '219979', '25'), +('10', '111', '12', '56073', '153273', '25'), +('10', '111', '12', '56035', '153020', '25'), +('10', '111', '12', '104408', '129661', '25'), +('10', '111', '12', '49656', '99932', '25'), +('10', '111', '18', '56041', '162119', '25'), +('10', '111', '18', '62986', '160870', '25'), +('10', '111', '18', '94054', '160515', '25'), +('10', '111', '18', '104412', '135964', '25'), +('10', '111', '19', '62904', '213680', '25'), +('10', '111', '19', '81763', '158265', '25'), +('10', '111', '19', '56037', '157819', '25'), +('10', '111', '19', '56075', '157784', '25'), +('10', '111', '13', '111518', '242632', '25'), +('10', '111', '13', '111517', '240429', '25'), +('10', '111', '13', '111217', '219720', '25'), +('10', '111', '13', '111218', '219179', '25'), +('10', '111', '14', '111539', '252991', '25'), +('10', '111', '14', '111537', '252182', '25'), +('10', '111', '14', '111535', '251907', '25'), +('10', '111', '14', '111239', '221389', '25'), +('10', '111', '11', '85213', '374868', '25'), +('10', '111', '11', '133816', '330434', '25'), +('10', '111', '11', '111337', '250802', '25'), +('10', '111', '11', '111334', '250636', '25'), +('10', '112', '22', '7867', '0', '25'), +('10', '112', '22', '39342', '0', '25'), +('10', '112', '22', '23597', '0', '25'), +('10', '112', '22', '53550', '0', '25'), +('10', '112', '1', '98769', '417078', '25'), +('10', '112', '1', '111304', '251051', '25'), +('10', '112', '1', '111307', '250810', '25'), +('10', '112', '1', '111310', '250435', '25'), +('10', '112', '2', '62985', '157224', '25'), +('10', '112', '2', '94056', '156892', '25'), +('10', '112', '2', '62988', '156089', '25'), +('10', '112', '2', '104410', '133207', '25'), +('10', '112', '3', '111314', '251413', '25'), +('10', '112', '3', '111316', '250115', '25'), +('10', '112', '3', '111315', '250075', '25'), +('10', '112', '3', '111013', '219812', '25'), +('10', '112', '5', '111319', '251194', '25'), +('10', '112', '5', '111317', '249548', '25'), +('10', '112', '5', '111318', '249343', '25'), +('10', '112', '5', '111320', '249188', '25'), +('10', '112', '8', '111332', '251560', '25'), +('10', '112', '8', '111330', '250262', '25'), +('10', '112', '8', '111331', '249423', '25'), +('10', '112', '8', '111328', '249177', '25'), +('10', '112', '6', '111323', '251488', '25'), +('10', '112', '6', '111326', '250394', '25'), +('10', '112', '6', '111324', '249893', '25'), +('10', '112', '6', '111022', '219888', '25'), +('10', '112', '17', '81765', '163973', '25'), +('10', '112', '17', '56046', '163538', '25'), +('10', '112', '17', '56083', '163314', '25'), +('10', '112', '17', '104413', '139013', '25'), +('10', '112', '7', '94053', '155923', '25'), +('10', '112', '7', '56080', '155629', '25'), +('10', '112', '7', '104411', '132193', '25'), +('10', '112', '7', '54848', '100638', '25'), +('10', '112', '9', '67098', '260143', '25'), +('10', '112', '9', '81764', '152225', '25'), +('10', '112', '9', '56070', '151904', '25'), +('10', '112', '9', '62984', '151819', '25'), +('10', '112', '15', '111350', '252239', '25'), +('10', '112', '15', '111344', '251796', '25'), +('10', '112', '15', '111340', '251224', '25'), +('10', '112', '15', '111342', '250089', '25'), +('10', '112', '20', '111356', '251586', '25'), +('10', '112', '20', '111352', '250651', '25'), +('10', '112', '20', '111351', '249977', '25'), +('10', '112', '20', '111054', '219985', '25'), +('10', '112', '12', '56073', '153280', '25'), +('10', '112', '12', '56035', '153030', '25'), +('10', '112', '12', '104408', '129667', '25'), +('10', '112', '12', '49656', '99933', '25'), +('10', '112', '18', '56041', '162126', '25'), +('10', '112', '18', '62986', '160879', '25'), +('10', '112', '18', '94054', '160520', '25'), +('10', '112', '18', '104412', '135968', '25'), +('10', '112', '19', '62904', '213691', '25'), +('10', '112', '19', '81763', '158275', '25'), +('10', '112', '19', '56037', '157827', '25'), +('10', '112', '19', '56075', '157793', '25'), +('10', '112', '13', '111518', '242640', '25'), +('10', '112', '13', '111517', '240436', '25'), +('10', '112', '13', '111217', '219727', '25'), +('10', '112', '13', '111218', '219186', '25'), +('10', '112', '14', '111539', '252999', '25'), +('10', '112', '14', '111537', '252190', '25'), +('10', '112', '14', '111535', '251914', '25'), +('10', '112', '14', '111239', '221397', '25'), +('10', '112', '11', '85213', '374873', '25'), +('10', '112', '11', '133816', '330440', '25'), +('10', '112', '11', '111337', '250812', '25'), +('10', '112', '11', '111334', '250643', '25'), +('10', '113', '22', '7867', '0', '25'), +('10', '113', '22', '39342', '0', '25'), +('10', '113', '22', '23597', '0', '25'), +('10', '113', '22', '53550', '0', '25'), +('10', '113', '1', '98769', '417082', '25'), +('10', '113', '1', '111304', '251059', '25'), +('10', '113', '1', '111307', '250814', '25'), +('10', '113', '1', '111310', '250442', '25'), +('10', '113', '2', '62985', '157232', '25'), +('10', '113', '2', '94056', '156898', '25'), +('10', '113', '2', '62988', '156094', '25'), +('10', '113', '2', '104410', '133214', '25'), +('10', '113', '3', '111314', '251420', '25'), +('10', '113', '3', '111316', '250121', '25'), +('10', '113', '3', '111315', '250082', '25'), +('10', '113', '3', '111013', '219819', '25'), +('10', '113', '5', '111319', '251200', '25'), +('10', '113', '5', '111317', '249555', '25'), +('10', '113', '5', '111318', '249349', '25'), +('10', '113', '5', '111320', '249194', '25'), +('10', '113', '8', '111332', '251567', '25'), +('10', '113', '8', '111330', '250269', '25'), +('10', '113', '8', '111331', '249431', '25'), +('10', '113', '8', '111328', '249182', '25'), +('10', '113', '6', '111323', '251496', '25'), +('10', '113', '6', '111326', '250404', '25'), +('10', '113', '6', '111324', '249899', '25'), +('10', '113', '6', '111022', '219895', '25'), +('10', '113', '17', '81765', '163979', '25'), +('10', '113', '17', '56046', '163545', '25'), +('10', '113', '17', '56083', '163318', '25'), +('10', '113', '17', '104413', '139023', '25'), +('10', '113', '7', '94053', '155928', '25'), +('10', '113', '7', '56080', '155637', '25'), +('10', '113', '7', '104411', '132202', '25'), +('10', '113', '7', '54848', '100645', '25'), +('10', '113', '9', '67098', '260149', '25'), +('10', '113', '9', '81764', '152236', '25'), +('10', '113', '9', '56070', '151911', '25'), +('10', '113', '9', '62984', '151826', '25'), +('10', '113', '15', '111350', '252248', '25'), +('10', '113', '15', '111344', '251805', '25'), +('10', '113', '15', '111340', '251232', '25'), +('10', '113', '15', '111342', '250097', '25'), +('10', '113', '20', '111356', '251592', '25'), +('10', '113', '20', '111352', '250658', '25'), +('10', '113', '20', '111351', '249984', '25'), +('10', '113', '20', '111054', '219991', '25'), +('10', '113', '12', '56073', '153288', '25'), +('10', '113', '12', '56035', '153040', '25'), +('10', '113', '12', '104408', '129673', '25'), +('10', '113', '12', '49656', '99933', '25'), +('10', '113', '18', '56041', '162132', '25'), +('10', '113', '18', '62986', '160887', '25'), +('10', '113', '18', '94054', '160526', '25'), +('10', '113', '18', '104412', '135972', '25'), +('10', '113', '19', '62904', '213701', '25'), +('10', '113', '19', '81763', '158286', '25'), +('10', '113', '19', '56037', '157835', '25'), +('10', '113', '19', '56075', '157801', '25'), +('10', '113', '13', '111518', '242647', '25'), +('10', '113', '13', '111517', '240443', '25'), +('10', '113', '13', '111217', '219734', '25'), +('10', '113', '13', '111218', '219193', '25'), +('10', '113', '14', '111539', '253007', '25'), +('10', '113', '14', '111537', '252197', '25'), +('10', '113', '14', '111535', '251921', '25'), +('10', '113', '14', '111239', '221406', '25'), +('10', '113', '11', '85213', '374877', '25'), +('10', '113', '11', '133816', '330446', '25'), +('10', '113', '11', '111337', '250822', '25'), +('10', '113', '11', '111334', '250650', '25'), +('10', '114', '22', '7867', '0', '25'), +('10', '114', '22', '39342', '0', '25'), +('10', '114', '22', '23597', '0', '25'), +('10', '114', '22', '53550', '0', '25'), +('10', '114', '1', '98769', '417087', '25'), +('10', '114', '1', '111304', '251067', '25'), +('10', '114', '1', '111307', '250819', '25'), +('10', '114', '1', '111310', '250449', '25'), +('10', '114', '2', '62985', '157241', '25'), +('10', '114', '2', '94056', '156904', '25'), +('10', '114', '2', '62988', '156099', '25'), +('10', '114', '2', '104410', '133220', '25'), +('10', '114', '3', '111314', '251427', '25'), +('10', '114', '3', '111316', '250128', '25'), +('10', '114', '3', '111315', '250090', '25'), +('10', '114', '3', '111013', '219826', '25'), +('10', '114', '5', '111319', '251206', '25'), +('10', '114', '5', '111317', '249562', '25'), +('10', '114', '5', '111318', '249354', '25'), +('10', '114', '5', '111320', '249200', '25'), +('10', '114', '8', '111332', '251575', '25'), +('10', '114', '8', '111330', '250276', '25'), +('10', '114', '8', '111331', '249440', '25'), +('10', '114', '8', '111328', '249187', '25'), +('10', '114', '6', '111323', '251503', '25'), +('10', '114', '6', '111326', '250414', '25'), +('10', '114', '6', '111324', '249905', '25'), +('10', '114', '6', '111022', '219903', '25'), +('10', '114', '17', '81765', '163985', '25'), +('10', '114', '17', '56046', '163552', '25'), +('10', '114', '17', '56083', '163322', '25'), +('10', '114', '17', '104413', '139033', '25'), +('10', '114', '7', '94053', '155934', '25'), +('10', '114', '7', '56080', '155645', '25'), +('10', '114', '7', '104411', '132212', '25'), +('10', '114', '7', '54848', '100651', '25'), +('10', '114', '9', '67098', '260155', '25'), +('10', '114', '9', '81764', '152246', '25'), +('10', '114', '9', '56070', '151917', '25'), +('10', '114', '9', '62984', '151833', '25'), +('10', '114', '15', '111350', '252256', '25'), +('10', '114', '15', '111344', '251814', '25'), +('10', '114', '15', '111340', '251239', '25'), +('10', '114', '15', '111342', '250105', '25'), +('10', '114', '20', '111356', '251598', '25'), +('10', '114', '20', '111352', '250666', '25'), +('10', '114', '20', '111351', '249992', '25'), +('10', '114', '20', '111054', '219997', '25'), +('10', '114', '12', '56073', '153295', '25'), +('10', '114', '12', '56035', '153050', '25'), +('10', '114', '12', '104408', '129680', '25'), +('10', '114', '12', '49656', '99934', '25'), +('10', '114', '18', '56041', '162138', '25'), +('10', '114', '18', '62986', '160896', '25'), +('10', '114', '18', '94054', '160531', '25'), +('10', '114', '18', '104412', '135976', '25'), +('10', '114', '19', '62904', '213711', '25'), +('10', '114', '19', '81763', '158296', '25'), +('10', '114', '19', '56037', '157843', '25'), +('10', '114', '19', '56075', '157810', '25'), +('10', '114', '13', '111518', '242654', '25'), +('10', '114', '13', '111517', '240450', '25'), +('10', '114', '13', '111217', '219740', '25'), +('10', '114', '13', '111218', '219200', '25'), +('10', '114', '14', '111539', '253015', '25'), +('10', '114', '14', '111537', '252204', '25'), +('10', '114', '14', '111535', '251928', '25'), +('10', '114', '14', '111239', '221414', '25'), +('10', '114', '11', '85213', '374882', '25'), +('10', '114', '11', '133816', '330451', '25'), +('10', '114', '11', '111337', '250832', '25'), +('10', '114', '11', '111334', '250657', '25'), +('10', '115', '22', '7867', '0', '26'), +('10', '115', '22', '39342', '0', '26'), +('10', '115', '22', '23597', '0', '26'), +('10', '115', '22', '53550', '0', '26'), +('10', '115', '1', '98769', '417092', '26'), +('10', '115', '1', '111304', '251075', '26'), +('10', '115', '1', '111307', '250824', '26'), +('10', '115', '1', '111310', '250457', '26'), +('10', '115', '2', '62985', '157250', '26'), +('10', '115', '2', '94056', '156910', '26'), +('10', '115', '2', '62988', '156105', '26'), +('10', '115', '2', '104410', '133226', '26'), +('10', '115', '3', '111314', '251434', '26'), +('10', '115', '3', '111316', '250135', '26'), +('10', '115', '3', '111315', '250097', '26'), +('10', '115', '3', '111013', '219833', '26'), +('10', '115', '5', '111319', '251213', '26'), +('10', '115', '5', '111317', '249569', '26'), +('10', '115', '5', '111318', '249360', '26'), +('10', '115', '5', '111320', '249206', '26'), +('10', '115', '8', '111332', '251583', '26'), +('10', '115', '8', '111330', '250283', '26'), +('10', '115', '8', '111331', '249448', '26'), +('10', '115', '8', '111328', '249192', '26'), +('10', '115', '6', '111323', '251511', '26'), +('10', '115', '6', '111326', '250423', '26'), +('10', '115', '6', '111324', '249911', '26'), +('10', '115', '6', '111022', '219910', '26'), +('10', '115', '17', '81765', '163991', '26'), +('10', '115', '17', '56046', '163560', '26'), +('10', '115', '17', '56083', '163326', '26'), +('10', '115', '17', '104413', '139043', '26'), +('10', '115', '7', '94053', '155939', '26'), +('10', '115', '7', '56080', '155654', '26'), +('10', '115', '7', '104411', '132221', '26'), +('10', '115', '7', '54848', '100657', '26'), +('10', '115', '9', '67098', '260161', '26'), +('10', '115', '9', '81764', '152257', '26'), +('10', '115', '9', '56070', '151924', '26'), +('10', '115', '9', '62984', '151841', '26'), +('10', '115', '15', '111350', '252265', '26'), +('10', '115', '15', '111344', '251823', '26'), +('10', '115', '15', '111340', '251246', '26'), +('10', '115', '15', '111342', '250112', '26'), +('10', '115', '20', '111356', '251604', '26'), +('10', '115', '20', '111352', '250673', '26'), +('10', '115', '20', '111351', '249999', '26'), +('10', '115', '20', '111054', '220004', '26'), +('10', '115', '12', '56073', '153302', '26'), +('10', '115', '12', '56035', '153060', '26'), +('10', '115', '12', '104408', '129686', '26'), +('10', '115', '12', '49656', '99935', '26'), +('10', '115', '18', '56041', '162145', '26'), +('10', '115', '18', '62986', '160904', '26'), +('10', '115', '18', '94054', '160536', '26'), +('10', '115', '18', '104412', '135980', '26'), +('10', '115', '19', '62904', '213722', '26'), +('10', '115', '19', '81763', '158307', '26'), +('10', '115', '19', '56037', '157851', '26'), +('10', '115', '19', '56075', '157819', '26'), +('10', '115', '13', '111518', '242661', '26'), +('10', '115', '13', '111517', '240457', '26'), +('10', '115', '13', '111217', '219747', '26'), +('10', '115', '13', '111218', '219207', '26'), +('10', '115', '14', '111539', '253023', '26'), +('10', '115', '14', '111537', '252212', '26'), +('10', '115', '14', '111535', '251935', '26'), +('10', '115', '14', '111239', '221422', '26'), +('10', '115', '11', '85213', '374887', '26'), +('10', '115', '11', '133816', '330457', '26'), +('10', '115', '11', '111337', '250842', '26'), +('10', '115', '11', '111334', '250664', '26'), +('11', '1', '22', '10323', '0', '0'), +('11', '1', '22', '9246', '0', '0'), +('11', '1', '22', '21509', '0', '0'), +('11', '1', '22', '8007', '0', '0'), +('11', '1', '1', '14702', '3750', '0'), +('11', '1', '1', '14701', '2862', '0'), +('11', '1', '1', '30361', '2640', '0'), +('11', '1', '1', '10321', '1000', '0'), +('11', '1', '2', '10143', '5368', '0'), +('11', '1', '2', '30363', '3700', '0'), +('11', '1', '2', '1232', '2527', '0'), +('11', '1', '2', '1211', '1485', '0'), +('11', '1', '3', '1544', '5712', '0'), +('11', '1', '3', '1212', '1330', '0'), +('11', '1', '3', '14705', '990', '0'), +('11', '1', '3', '14706', '990', '0'), +('11', '1', '5', '14703', '6050', '0'), +('11', '1', '5', '14700', '3318', '0'), +('11', '1', '5', '30362', '3140', '0'), +('11', '1', '5', '14560', '2807', '0'), +('11', '1', '8', '11603', '8419', '0'), +('11', '1', '8', '1278', '5104', '0'), +('11', '1', '8', '2349', '3554', '0'), +('11', '1', '8', '1216', '1343', '0'), +('11', '1', '6', '1279', '6886', '0'), +('11', '1', '6', '1557', '5310', '0'), +('11', '1', '6', '1905', '5031', '0'), +('11', '1', '6', '1401', '2174', '0'), +('11', '1', '17', '1253', '10051', '0'), +('11', '1', '17', '1644', '8427', '0'), +('11', '1', '17', '11641', '5763', '0'), +('11', '1', '17', '1357', '5468', '0'), +('11', '1', '7', '1362', '2624', '0'), +('11', '1', '7', '1321', '1746', '0'), +('11', '1', '7', '1648', '885', '0'), +('11', '1', '7', '1234', '565', '0'), +('11', '1', '9', '12804', '6753', '0'), +('11', '1', '9', '27712', '2597', '0'), +('11', '1', '9', '4344', '2051', '0'), +('11', '1', '9', '10408', '2002', '0'), +('11', '1', '15', '27713', '5072', '0'), +('11', '1', '15', '20659', '3136', '0'), +('11', '1', '15', '10150', '3004', '0'), +('11', '1', '15', '10163', '2300', '0'), +('11', '1', '20', '11666', '8289', '0'), +('11', '1', '20', '2742', '5069', '0'), +('11', '1', '20', '1217', '1339', '0'), +('11', '1', '20', '1647', '1334', '0'), +('11', '1', '12', '2923', '3074', '0'), +('11', '1', '12', '20655', '2626', '0'), +('11', '1', '12', '1404', '2512', '0'), +('11', '1', '12', '1236', '1627', '0'), +('11', '1', '18', '4410', '1142', '0'), +('11', '1', '18', '1651', '971', '0'), +('11', '1', '18', '1221', '454', '0'), +('11', '1', '18', '1237', '436', '0'), +('11', '1', '19', '1368', '2016', '0'), +('11', '1', '19', '68239', '1960', '0'), +('11', '1', '19', '1652', '1834', '0'), +('11', '1', '19', '3317', '1680', '0'), +('11', '1', '13', '14759', '5262', '0'), +('11', '1', '13', '10527', '4500', '0'), +('11', '1', '13', '11689', '4217', '0'), +('11', '1', '13', '11625', '3514', '0'), +('11', '1', '14', '10219', '5681', '0'), +('11', '1', '14', '14759', '5262', '0'), +('11', '1', '14', '10527', '4500', '0'), +('11', '1', '14', '11625', '3514', '0'), +('11', '1', '11', '14762', '2204', '0'), +('11', '1', '11', '13169', '1536', '0'), +('11', '1', '11', '13353', '1500', '0'), +('11', '1', '11', '20677', '450', '0'), +('11', '2', '22', '10323', '0', '0'), +('11', '2', '22', '9246', '0', '0'), +('11', '2', '22', '21509', '0', '0'), +('11', '2', '22', '8007', '0', '0'), +('11', '2', '1', '14702', '3750', '0'), +('11', '2', '1', '14701', '2862', '0'), +('11', '2', '1', '30361', '2640', '0'), +('11', '2', '1', '10321', '1000', '0'), +('11', '2', '2', '10143', '5368', '0'), +('11', '2', '2', '30363', '3700', '0'), +('11', '2', '2', '1232', '2623', '0'), +('11', '2', '2', '1211', '1569', '0'), +('11', '2', '3', '1544', '5772', '0'), +('11', '2', '3', '1212', '1342', '0'), +('11', '2', '3', '14705', '990', '0'), +('11', '2', '3', '14706', '990', '0'), +('11', '2', '5', '14703', '6050', '0'), +('11', '2', '5', '14700', '3318', '0'), +('11', '2', '5', '30362', '3140', '0'), +('11', '2', '5', '14560', '2928', '0'), +('11', '2', '8', '11603', '8528', '0'), +('11', '2', '8', '1278', '5166', '0'), +('11', '2', '8', '2349', '3554', '0'), +('11', '2', '8', '1216', '1356', '0'), +('11', '2', '6', '1279', '6947', '0'), +('11', '2', '6', '1557', '5310', '0'), +('11', '2', '6', '1905', '5033', '0'), +('11', '2', '6', '1401', '2174', '0'), +('11', '2', '17', '1253', '10053', '0'), +('11', '2', '17', '1644', '8487', '0'), +('11', '2', '17', '11641', '5944', '0'), +('11', '2', '17', '1357', '5468', '0'), +('11', '2', '7', '1362', '2624', '0'), +('11', '2', '7', '1321', '1746', '0'), +('11', '2', '7', '1648', '945', '0'), +('11', '2', '7', '1234', '649', '0'), +('11', '2', '9', '12804', '6753', '0'), +('11', '2', '9', '27712', '2657', '0'), +('11', '2', '9', '4344', '2051', '0'), +('11', '2', '9', '10408', '2002', '0'), +('11', '2', '15', '27713', '5133', '0'), +('11', '2', '15', '20659', '3172', '0'), +('11', '2', '15', '10150', '3004', '0'), +('11', '2', '15', '10163', '2300', '0'), +('11', '2', '20', '11666', '8290', '0'), +('11', '2', '20', '2742', '5071', '0'), +('11', '2', '20', '1217', '1351', '0'), +('11', '2', '20', '1647', '1334', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '2', '12', '2923', '3074', '0'), +('11', '2', '12', '20655', '2651', '0'), +('11', '2', '12', '1404', '2512', '0'), +('11', '2', '12', '1236', '1723', '0'), +('11', '2', '18', '4410', '1142', '0'), +('11', '2', '18', '1651', '1008', '0'), +('11', '2', '18', '1221', '454', '0'), +('11', '2', '18', '1237', '436', '0'), +('11', '2', '19', '1368', '2016', '0'), +('11', '2', '19', '68239', '1996', '0'), +('11', '2', '19', '1652', '1834', '0'), +('11', '2', '19', '3317', '1680', '0'), +('11', '2', '13', '14759', '5333', '0'), +('11', '2', '13', '10527', '4500', '0'), +('11', '2', '13', '11689', '4308', '0'), +('11', '2', '13', '11625', '3516', '0'), +('11', '2', '14', '10219', '5681', '0'), +('11', '2', '14', '14759', '5333', '0'), +('11', '2', '14', '10527', '4500', '0'), +('11', '2', '14', '11625', '3516', '0'), +('11', '2', '11', '14762', '2204', '0'), +('11', '2', '11', '13169', '1572', '0'), +('11', '2', '11', '13353', '1500', '0'), +('11', '2', '11', '20677', '450', '0'), +('11', '3', '22', '10323', '0', '0'), +('11', '3', '22', '9246', '0', '0'), +('11', '3', '22', '21509', '0', '0'), +('11', '3', '22', '8007', '0', '0'), +('11', '3', '1', '14702', '3750', '0'), +('11', '3', '1', '14701', '2862', '0'), +('11', '3', '1', '30361', '2640', '0'), +('11', '3', '1', '10321', '1000', '0'), +('11', '3', '2', '10143', '5368', '0'), +('11', '3', '2', '30363', '3700', '0'), +('11', '3', '2', '1232', '2720', '0'), +('11', '3', '2', '1211', '1654', '0'), +('11', '3', '3', '1544', '5833', '0'), +('11', '3', '3', '1212', '1354', '0'), +('11', '3', '3', '14705', '990', '0'), +('11', '3', '3', '14706', '990', '0'), +('11', '3', '5', '14703', '6050', '0'), +('11', '3', '5', '14700', '3318', '0'), +('11', '3', '5', '30362', '3140', '0'), +('11', '3', '5', '14560', '3049', '0'), +('11', '3', '8', '11603', '8637', '0'), +('11', '3', '8', '1278', '5228', '0'), +('11', '3', '8', '2349', '3554', '0'), +('11', '3', '8', '1216', '1368', '0'), +('11', '3', '6', '1279', '7007', '0'), +('11', '3', '6', '1557', '5310', '0'), +('11', '3', '6', '1905', '5034', '0'), +('11', '3', '6', '1401', '2174', '0'), +('11', '3', '17', '1253', '10056', '0'), +('11', '3', '17', '1644', '8548', '0'), +('11', '3', '17', '11641', '6125', '0'), +('11', '3', '17', '1357', '5468', '0'), +('11', '3', '7', '1362', '2624', '0'), +('11', '3', '7', '1321', '1746', '0'), +('11', '3', '7', '1648', '1005', '0'), +('11', '3', '7', '1234', '734', '0'), +('11', '3', '9', '12804', '6753', '0'), +('11', '3', '9', '27712', '2717', '0'), +('11', '3', '9', '4344', '2051', '0'), +('11', '3', '9', '10408', '2002', '0'), +('11', '3', '15', '27713', '5193', '0'), +('11', '3', '15', '20659', '3209', '0'), +('11', '3', '15', '10150', '3004', '0'), +('11', '3', '15', '10163', '2300', '0'), +('11', '3', '20', '11666', '8292', '0'), +('11', '3', '20', '2742', '5074', '0'), +('11', '3', '20', '1217', '1363', '0'), +('11', '3', '20', '1647', '1334', '0'), +('11', '3', '12', '2923', '3074', '0'), +('11', '3', '12', '20655', '2675', '0'), +('11', '3', '12', '1404', '2512', '0'), +('11', '3', '12', '1236', '1820', '0'), +('11', '3', '18', '4410', '1142', '0'), +('11', '3', '18', '1651', '1044', '0'), +('11', '3', '18', '1221', '454', '0'), +('11', '3', '18', '1237', '436', '0'), +('11', '3', '19', '68239', '2032', '0'), +('11', '3', '19', '1368', '2016', '0'), +('11', '3', '19', '1652', '1834', '0'), +('11', '3', '19', '3317', '1680', '0'), +('11', '3', '13', '14759', '5405', '0'), +('11', '3', '13', '10527', '4500', '0'), +('11', '3', '13', '11689', '4398', '0'), +('11', '3', '13', '11625', '3519', '0'), +('11', '3', '14', '10219', '5681', '0'), +('11', '3', '14', '14759', '5405', '0'), +('11', '3', '14', '10527', '4500', '0'), +('11', '3', '14', '11625', '3519', '0'), +('11', '3', '11', '14762', '2204', '0'), +('11', '3', '11', '13169', '1609', '0'), +('11', '3', '11', '13353', '1500', '0'), +('11', '3', '11', '20677', '450', '0'), +('11', '4', '22', '10323', '0', '0'), +('11', '4', '22', '9246', '0', '0'), +('11', '4', '22', '21509', '0', '0'), +('11', '4', '22', '8007', '0', '0'), +('11', '4', '1', '14702', '3750', '0'), +('11', '4', '1', '14701', '2862', '0'), +('11', '4', '1', '30361', '2640', '0'), +('11', '4', '1', '10321', '1000', '0'), +('11', '4', '2', '10143', '5368', '0'), +('11', '4', '2', '30363', '3700', '0'), +('11', '4', '2', '1232', '2817', '0'), +('11', '4', '2', '1211', '1738', '0'), +('11', '4', '3', '1544', '5893', '0'), +('11', '4', '3', '1212', '1366', '0'), +('11', '4', '3', '14705', '990', '0'), +('11', '4', '3', '14706', '990', '0'), +('11', '4', '5', '14703', '6050', '0'), +('11', '4', '5', '14700', '3318', '0'), +('11', '4', '5', '14560', '3169', '0'), +('11', '4', '5', '30362', '3140', '0'), +('11', '4', '8', '11603', '8745', '0'), +('11', '4', '8', '1278', '5290', '0'), +('11', '4', '8', '2349', '3554', '0'), +('11', '4', '8', '1216', '1380', '0'), +('11', '4', '6', '1279', '7068', '0'), +('11', '4', '6', '1557', '5310', '0'), +('11', '4', '6', '1905', '5035', '0'), +('11', '4', '6', '1401', '2174', '0'), +('11', '4', '17', '1253', '10058', '0'), +('11', '4', '17', '1644', '8608', '0'), +('11', '4', '17', '11641', '6306', '0'), +('11', '4', '17', '1357', '5468', '0'), +('11', '4', '7', '1362', '2624', '0'), +('11', '4', '7', '1321', '1746', '0'), +('11', '4', '7', '1648', '1066', '0'), +('11', '4', '7', '1234', '818', '0'), +('11', '4', '9', '12804', '6753', '0'), +('11', '4', '9', '27712', '2778', '0'), +('11', '4', '9', '4344', '2051', '0'), +('11', '4', '9', '10408', '2002', '0'), +('11', '4', '15', '27713', '5254', '0'), +('11', '4', '15', '20659', '3245', '0'), +('11', '4', '15', '10150', '3004', '0'), +('11', '4', '15', '10163', '2300', '0'), +('11', '4', '20', '11666', '8294', '0'), +('11', '4', '20', '2742', '5076', '0'), +('11', '4', '20', '1217', '1375', '0'), +('11', '4', '20', '1647', '1334', '0'), +('11', '4', '12', '2923', '3074', '0'), +('11', '4', '12', '20655', '2700', '0'), +('11', '4', '12', '1404', '2512', '0'), +('11', '4', '12', '1236', '1917', '0'), +('11', '4', '18', '4410', '1142', '0'), +('11', '4', '18', '1651', '1080', '0'), +('11', '4', '18', '1221', '454', '0'), +('11', '4', '18', '1237', '436', '0'), +('11', '4', '19', '68239', '2068', '0'), +('11', '4', '19', '1368', '2016', '0'), +('11', '4', '19', '1652', '1834', '0'), +('11', '4', '19', '3317', '1680', '0'), +('11', '4', '13', '14759', '5476', '0'), +('11', '4', '13', '10527', '4500', '0'), +('11', '4', '13', '11689', '4489', '0'), +('11', '4', '13', '11625', '3521', '0'), +('11', '4', '14', '10219', '5681', '0'), +('11', '4', '14', '14759', '5476', '0'), +('11', '4', '14', '10527', '4500', '0'), +('11', '4', '14', '11625', '3521', '0'), +('11', '4', '11', '14762', '2204', '0'), +('11', '4', '11', '13169', '1645', '0'), +('11', '4', '11', '13353', '1500', '0'), +('11', '4', '11', '9246', '495', '0'), +('11', '5', '22', '10323', '0', '0'), +('11', '5', '22', '9246', '0', '0'), +('11', '5', '22', '21509', '0', '0'), +('11', '5', '22', '8007', '0', '0'), +('11', '5', '1', '14702', '3750', '0'), +('11', '5', '1', '14701', '2862', '0'), +('11', '5', '1', '30361', '2640', '0'), +('11', '5', '1', '10321', '1000', '0'), +('11', '5', '2', '10143', '5368', '0'), +('11', '5', '2', '30363', '3700', '0'), +('11', '5', '2', '1232', '2913', '0'), +('11', '5', '2', '1211', '1823', '0'), +('11', '5', '3', '1544', '5953', '0'), +('11', '5', '3', '1212', '1379', '0'), +('11', '5', '3', '14705', '990', '0'), +('11', '5', '3', '14706', '990', '0'), +('11', '5', '5', '14703', '6050', '0'), +('11', '5', '5', '14700', '3318', '0'), +('11', '5', '5', '14560', '3290', '0'), +('11', '5', '5', '30362', '3140', '0'), +('11', '5', '8', '11603', '8854', '0'), +('11', '5', '8', '1278', '5352', '0'), +('11', '5', '8', '2349', '3554', '0'), +('11', '5', '8', '1216', '1392', '0'), +('11', '5', '6', '1279', '7128', '0'), +('11', '5', '6', '1557', '5310', '0'), +('11', '5', '6', '1905', '5036', '0'), +('11', '5', '6', '1401', '2174', '0'), +('11', '5', '17', '1253', '10060', '0'), +('11', '5', '17', '1644', '8668', '0'), +('11', '5', '17', '11641', '6488', '0'), +('11', '5', '17', '1357', '5468', '0'), +('11', '5', '7', '1362', '2624', '0'), +('11', '5', '7', '1321', '1746', '0'), +('11', '5', '7', '1648', '1126', '0'), +('11', '5', '7', '1234', '903', '0'), +('11', '5', '9', '12804', '6753', '0'), +('11', '5', '9', '27712', '2838', '0'), +('11', '5', '9', '4344', '2051', '0'), +('11', '5', '9', '10408', '2002', '0'), +('11', '5', '15', '27713', '5314', '0'), +('11', '5', '15', '20659', '3281', '0'), +('11', '5', '15', '10150', '3004', '0'), +('11', '5', '15', '10163', '2300', '0'), +('11', '5', '20', '11666', '8295', '0'), +('11', '5', '20', '2742', '5079', '0'), +('11', '5', '20', '1217', '1387', '0'), +('11', '5', '20', '1647', '1334', '0'), +('11', '5', '12', '2923', '3074', '0'), +('11', '5', '12', '20655', '2725', '0'), +('11', '5', '12', '1404', '2512', '0'), +('11', '5', '12', '1236', '2013', '0'), +('11', '5', '18', '4410', '1142', '0'), +('11', '5', '18', '1651', '1116', '0'), +('11', '5', '18', '1221', '454', '0'), +('11', '5', '18', '1237', '436', '0'), +('11', '5', '19', '68239', '2105', '0'), +('11', '5', '19', '1368', '2016', '0'), +('11', '5', '19', '1652', '1834', '0'), +('11', '5', '19', '3317', '1680', '0'), +('11', '5', '13', '14759', '5547', '0'), +('11', '5', '13', '11689', '4579', '0'), +('11', '5', '13', '10527', '4500', '0'), +('11', '5', '13', '11625', '3523', '0'), +('11', '5', '14', '10219', '5681', '0'), +('11', '5', '14', '14759', '5547', '0'), +('11', '5', '14', '10527', '4500', '0'), +('11', '5', '14', '11625', '3523', '0'), +('11', '5', '11', '14762', '2204', '0'), +('11', '5', '11', '13169', '1681', '0'), +('11', '5', '11', '13353', '1500', '0'), +('11', '5', '11', '9246', '616', '0'), +('11', '6', '22', '10323', '0', '0'), +('11', '6', '22', '9246', '0', '0'), +('11', '6', '22', '21509', '0', '0'), +('11', '6', '22', '8007', '0', '0'), +('11', '6', '1', '14702', '3750', '0'), +('11', '6', '1', '14701', '2862', '0'), +('11', '6', '1', '30361', '2640', '0'), +('11', '6', '1', '10321', '1000', '0'), +('11', '6', '2', '10143', '5368', '0'), +('11', '6', '2', '30363', '3700', '0'), +('11', '6', '2', '1232', '3010', '0'), +('11', '6', '2', '1211', '1908', '0'), +('11', '6', '3', '1544', '6014', '0'), +('11', '6', '3', '1212', '1391', '0'), +('11', '6', '3', '11052', '1087', '0'), +('11', '6', '3', '14706', '990', '0'), +('11', '6', '5', '14703', '6050', '0'), +('11', '6', '5', '14560', '3411', '0'), +('11', '6', '5', '14700', '3318', '0'), +('11', '6', '5', '30362', '3140', '0'), +('11', '6', '8', '11603', '8963', '0'), +('11', '6', '8', '1278', '5413', '0'), +('11', '6', '8', '2349', '3554', '0'), +('11', '6', '8', '1216', '1404', '0'), +('11', '6', '6', '1279', '7188', '0'), +('11', '6', '6', '1557', '5310', '0'), +('11', '6', '6', '1905', '5037', '0'), +('11', '6', '6', '1401', '2174', '0'), +('11', '6', '17', '1253', '10063', '0'), +('11', '6', '17', '1644', '8729', '0'), +('11', '6', '17', '11641', '6669', '0'), +('11', '6', '17', '1357', '5468', '0'), +('11', '6', '7', '1362', '2624', '0'), +('11', '6', '7', '1321', '1746', '0'), +('11', '6', '7', '1648', '1187', '0'), +('11', '6', '7', '1234', '988', '0'), +('11', '6', '9', '12804', '6753', '0'), +('11', '6', '9', '27712', '2899', '0'), +('11', '6', '9', '4344', '2051', '0'), +('11', '6', '9', '10408', '2002', '0'), +('11', '6', '15', '27713', '5374', '0'), +('11', '6', '15', '20659', '3317', '0'), +('11', '6', '15', '10150', '3004', '0'), +('11', '6', '15', '10163', '2300', '0'), +('11', '6', '20', '11666', '8297', '0'), +('11', '6', '20', '2742', '5081', '0'), +('11', '6', '20', '1217', '1399', '0'), +('11', '6', '20', '1647', '1334', '0'), +('11', '6', '12', '2923', '3074', '0'), +('11', '6', '12', '20655', '2749', '0'), +('11', '6', '12', '1404', '2512', '0'), +('11', '6', '12', '1236', '2110', '0'), +('11', '6', '18', '1651', '1152', '0'), +('11', '6', '18', '4410', '1142', '0'), +('11', '6', '18', '1221', '454', '0'), +('11', '6', '18', '1237', '436', '0'), +('11', '6', '19', '68239', '2141', '0'), +('11', '6', '19', '1368', '2016', '0'), +('11', '6', '19', '1652', '1834', '0'), +('11', '6', '19', '3317', '1680', '0'), +('11', '6', '13', '14759', '5619', '0'), +('11', '6', '13', '11689', '4670', '0'), +('11', '6', '13', '10527', '4500', '0'), +('11', '6', '13', '11625', '3525', '0'), +('11', '6', '14', '10219', '5681', '0'), +('11', '6', '14', '14759', '5619', '0'), +('11', '6', '14', '10527', '4500', '0'), +('11', '6', '14', '11625', '3525', '0'), +('11', '6', '11', '14762', '2204', '0'), +('11', '6', '11', '13169', '1717', '0'), +('11', '6', '11', '13353', '1500', '0'), +('11', '6', '11', '9246', '737', '0'), +('11', '7', '22', '10323', '0', '0'), +('11', '7', '22', '9246', '0', '0'), +('11', '7', '22', '21509', '0', '0'), +('11', '7', '22', '8007', '0', '0'), +('11', '7', '1', '14702', '3750', '0'), +('11', '7', '1', '14701', '2862', '0'), +('11', '7', '1', '30361', '2640', '0'), +('11', '7', '1', '10321', '1000', '0'), +('11', '7', '2', '10143', '5368', '0'), +('11', '7', '2', '30363', '3700', '0'), +('11', '7', '2', '1232', '3107', '0'), +('11', '7', '2', '1211', '1992', '0'), +('11', '7', '3', '1544', '6074', '0'), +('11', '7', '3', '1212', '1403', '0'), +('11', '7', '3', '11052', '1268', '0'), +('11', '7', '3', '14706', '990', '0'), +('11', '7', '5', '14703', '6050', '0'), +('11', '7', '5', '14560', '3532', '0'), +('11', '7', '5', '14700', '3318', '0'), +('11', '7', '5', '30362', '3140', '0'), +('11', '7', '8', '11603', '9071', '0'), +('11', '7', '8', '1278', '5475', '0'), +('11', '7', '8', '2349', '3554', '0'), +('11', '7', '8', '1216', '1416', '0'), +('11', '7', '6', '1279', '7249', '0'), +('11', '7', '6', '1557', '5310', '0'), +('11', '7', '6', '1905', '5039', '0'), +('11', '7', '6', '1401', '2174', '0'), +('11', '7', '17', '1253', '10065', '0'), +('11', '7', '17', '1644', '8789', '0'), +('11', '7', '17', '11641', '6850', '0'), +('11', '7', '17', '1357', '5468', '0'), +('11', '7', '7', '1362', '2624', '0'), +('11', '7', '7', '1321', '1746', '0'), +('11', '7', '7', '1648', '1247', '0'), +('11', '7', '7', '1234', '1072', '0'), +('11', '7', '9', '12804', '6753', '0'), +('11', '7', '9', '27712', '2959', '0'), +('11', '7', '9', '4344', '2051', '0'), +('11', '7', '9', '10408', '2002', '0'), +('11', '7', '15', '27713', '5435', '0'), +('11', '7', '15', '20659', '3354', '0'), +('11', '7', '15', '10150', '3004', '0'), +('11', '7', '15', '10163', '2300', '0'), +('11', '7', '20', '11666', '8299', '0'), +('11', '7', '20', '2742', '5083', '0'), +('11', '7', '20', '1217', '1411', '0'), +('11', '7', '20', '1647', '1334', '0'), +('11', '7', '12', '2923', '3074', '0'), +('11', '7', '12', '20655', '2774', '0'), +('11', '7', '12', '1404', '2512', '0'), +('11', '7', '12', '1236', '2207', '0'), +('11', '7', '18', '1651', '1189', '0'), +('11', '7', '18', '4410', '1142', '0'), +('11', '7', '18', '1221', '454', '0'), +('11', '7', '18', '1237', '436', '0'), +('11', '7', '19', '68239', '2177', '0'), +('11', '7', '19', '1368', '2016', '0'), +('11', '7', '19', '1652', '1834', '0'), +('11', '7', '19', '3317', '1680', '0'), +('11', '7', '13', '14759', '5690', '0'), +('11', '7', '13', '11689', '4761', '0'), +('11', '7', '13', '10527', '4500', '0'), +('11', '7', '13', '11625', '3527', '0'), +('11', '7', '14', '14759', '5690', '0'), +('11', '7', '14', '10219', '5681', '0'), +('11', '7', '14', '10527', '4500', '0'), +('11', '7', '14', '11625', '3527', '0'), +('11', '7', '11', '14762', '2204', '0'), +('11', '7', '11', '13169', '1754', '0'), +('11', '7', '11', '13353', '1500', '0'), +('11', '7', '11', '9246', '858', '0'), +('11', '8', '22', '10323', '0', '0'), +('11', '8', '22', '9246', '0', '0'), +('11', '8', '22', '21509', '0', '0'), +('11', '8', '22', '8007', '0', '0'), +('11', '8', '1', '14702', '3750', '0'), +('11', '8', '1', '14701', '2862', '0'), +('11', '8', '1', '30361', '2640', '0'), +('11', '8', '1', '10321', '1000', '0'), +('11', '8', '2', '10143', '5368', '0'), +('11', '8', '2', '30363', '3700', '0'), +('11', '8', '2', '1232', '3203', '0'), +('11', '8', '2', '1211', '2077', '0'), +('11', '8', '3', '1544', '6135', '0'), +('11', '8', '3', '11052', '1450', '0'), +('11', '8', '3', '1212', '1415', '0'), +('11', '8', '3', '14706', '990', '0'), +('11', '8', '5', '14703', '6050', '0'), +('11', '8', '5', '14560', '3653', '0'), +('11', '8', '5', '14700', '3318', '0'), +('11', '8', '5', '30362', '3140', '0'), +('11', '8', '8', '11603', '9180', '0'), +('11', '8', '8', '1278', '5537', '0'), +('11', '8', '8', '2349', '3554', '0'), +('11', '8', '8', '1216', '1428', '0'), +('11', '8', '6', '1279', '7309', '0'), +('11', '8', '6', '1557', '5310', '0'), +('11', '8', '6', '1905', '5040', '0'), +('11', '8', '6', '1401', '2174', '0'), +('11', '8', '17', '1253', '10068', '0'), +('11', '8', '17', '1644', '8850', '0'), +('11', '8', '17', '11641', '7031', '0'), +('11', '8', '17', '1357', '5468', '0'), +('11', '8', '7', '1362', '2624', '0'), +('11', '8', '7', '1321', '1746', '0'), +('11', '8', '7', '1648', '1307', '0'), +('11', '8', '7', '1234', '1157', '0'), +('11', '8', '9', '12804', '6753', '0'), +('11', '8', '9', '27712', '3019', '0'), +('11', '8', '9', '4344', '2051', '0'), +('11', '8', '9', '10408', '2002', '0'), +('11', '8', '15', '27713', '5495', '0'), +('11', '8', '15', '20659', '3390', '0'), +('11', '8', '15', '10150', '3004', '0'), +('11', '8', '15', '10163', '2300', '0'), +('11', '8', '20', '11666', '8300', '0'), +('11', '8', '20', '2742', '5086', '0'), +('11', '8', '20', '1217', '1423', '0'), +('11', '8', '20', '1647', '1334', '0'), +('11', '8', '12', '2923', '3074', '0'), +('11', '8', '12', '20655', '2799', '0'), +('11', '8', '12', '1404', '2512', '0'), +('11', '8', '12', '1236', '2303', '0'), +('11', '8', '18', '1651', '1225', '0'), +('11', '8', '18', '4410', '1142', '0'), +('11', '8', '18', '1221', '454', '0'), +('11', '8', '18', '1237', '436', '0'), +('11', '8', '19', '68239', '2213', '0'), +('11', '8', '19', '1368', '2016', '0'), +('11', '8', '19', '1652', '1834', '0'), +('11', '8', '19', '3317', '1680', '0'), +('11', '8', '13', '14759', '5761', '0'), +('11', '8', '13', '11689', '4851', '0'), +('11', '8', '13', '10527', '4500', '0'), +('11', '8', '13', '11625', '3529', '0'), +('11', '8', '14', '14759', '5761', '0'), +('11', '8', '14', '10219', '5681', '0'), +('11', '8', '14', '10527', '4500', '0'), +('11', '8', '14', '11625', '3529', '0'), +('11', '8', '11', '14762', '2204', '0'), +('11', '8', '11', '13169', '1790', '0'), +('11', '8', '11', '13353', '1500', '0'), +('11', '8', '11', '9246', '978', '0'), +('11', '9', '22', '10323', '0', '0'), +('11', '9', '22', '9246', '0', '0'), +('11', '9', '22', '21509', '0', '0'), +('11', '9', '22', '8007', '0', '0'), +('11', '9', '1', '14702', '3750', '0'), +('11', '9', '1', '14701', '2862', '0'), +('11', '9', '1', '30361', '2640', '0'), +('11', '9', '1', '10321', '1000', '0'), +('11', '9', '2', '10143', '5368', '0'), +('11', '9', '2', '30363', '3700', '0'), +('11', '9', '2', '1232', '3300', '0'), +('11', '9', '2', '1211', '2161', '0'), +('11', '9', '3', '1544', '6195', '0'), +('11', '9', '3', '11052', '1631', '0'), +('11', '9', '3', '1212', '1427', '0'), +('11', '9', '3', '14706', '990', '0'), +('11', '9', '5', '14703', '6050', '0'), +('11', '9', '5', '14560', '3773', '0'), +('11', '9', '5', '14700', '3318', '0'), +('11', '9', '5', '30362', '3140', '0'), +('11', '9', '8', '11603', '9289', '0'), +('11', '9', '8', '1278', '5599', '0'), +('11', '9', '8', '2349', '3554', '0'), +('11', '9', '8', '1216', '1440', '0'), +('11', '9', '6', '1279', '7370', '0'), +('11', '9', '6', '1557', '5310', '0'), +('11', '9', '6', '1905', '5041', '0'), +('11', '9', '6', '1401', '2174', '0'), +('11', '9', '17', '1253', '10070', '0'), +('11', '9', '17', '1644', '8910', '0'), +('11', '9', '17', '11641', '7212', '0'), +('11', '9', '17', '1233', '5508', '0'), +('11', '9', '7', '1362', '2624', '0'), +('11', '9', '7', '1321', '1746', '0'), +('11', '9', '7', '1648', '1368', '0'), +('11', '9', '7', '1234', '1241', '0'), +('11', '9', '9', '12804', '6753', '0'), +('11', '9', '9', '27712', '3080', '0'), +('11', '9', '9', '4344', '2051', '0'), +('11', '9', '9', '10408', '2002', '0'), +('11', '9', '15', '27713', '5556', '0'), +('11', '9', '15', '20659', '3426', '0'), +('11', '9', '15', '10150', '3004', '0'), +('11', '9', '15', '10163', '2300', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '9', '20', '11666', '8302', '0'), +('11', '9', '20', '2742', '5088', '0'), +('11', '9', '20', '1217', '1435', '0'), +('11', '9', '20', '1647', '1334', '0'), +('11', '9', '12', '2923', '3074', '0'), +('11', '9', '12', '20655', '2823', '0'), +('11', '9', '12', '1404', '2512', '0'), +('11', '9', '12', '1236', '2400', '0'), +('11', '9', '18', '1651', '1261', '0'), +('11', '9', '18', '4410', '1142', '0'), +('11', '9', '18', '1221', '454', '0'), +('11', '9', '18', '1237', '436', '0'), +('11', '9', '19', '68239', '2250', '0'), +('11', '9', '19', '1368', '2016', '0'), +('11', '9', '19', '1652', '1834', '0'), +('11', '9', '19', '3317', '1680', '0'), +('11', '9', '13', '14759', '5832', '0'), +('11', '9', '13', '11689', '4942', '0'), +('11', '9', '13', '10527', '4500', '0'), +('11', '9', '13', '11625', '3532', '0'), +('11', '9', '14', '14759', '5832', '0'), +('11', '9', '14', '10219', '5681', '0'), +('11', '9', '14', '10527', '4500', '0'), +('11', '9', '14', '11625', '3532', '0'), +('11', '9', '11', '14762', '2204', '0'), +('11', '9', '11', '13169', '1826', '0'), +('11', '9', '11', '13353', '1500', '0'), +('11', '9', '11', '9246', '1099', '0'), +('11', '10', '22', '10323', '0', '0'), +('11', '10', '22', '9246', '0', '0'), +('11', '10', '22', '21509', '0', '0'), +('11', '10', '22', '8007', '0', '0'), +('11', '10', '1', '14702', '3750', '0'), +('11', '10', '1', '14701', '2862', '0'), +('11', '10', '1', '30361', '2640', '0'), +('11', '10', '1', '10321', '1000', '0'), +('11', '10', '2', '10143', '5368', '0'), +('11', '10', '2', '30363', '3700', '0'), +('11', '10', '2', '1232', '3397', '0'), +('11', '10', '2', '1211', '2246', '0'), +('11', '10', '3', '1544', '6255', '0'), +('11', '10', '3', '11052', '1812', '0'), +('11', '10', '3', '1212', '1439', '0'), +('11', '10', '3', '14706', '990', '0'), +('11', '10', '5', '14703', '6050', '0'), +('11', '10', '5', '14560', '3894', '0'), +('11', '10', '5', '14700', '3318', '0'), +('11', '10', '5', '30362', '3140', '0'), +('11', '10', '8', '11603', '9398', '0'), +('11', '10', '8', '1278', '5661', '0'), +('11', '10', '8', '2349', '3554', '0'), +('11', '10', '8', '1216', '1452', '0'), +('11', '10', '6', '1279', '7430', '0'), +('11', '10', '6', '1557', '5310', '0'), +('11', '10', '6', '1905', '5042', '0'), +('11', '10', '6', '1401', '2174', '0'), +('11', '10', '17', '1253', '10072', '0'), +('11', '10', '17', '1644', '8970', '0'), +('11', '10', '17', '11641', '7394', '0'), +('11', '10', '17', '1233', '5667', '0'), +('11', '10', '7', '1362', '2624', '0'), +('11', '10', '7', '1321', '1746', '0'), +('11', '10', '7', '1648', '1428', '0'), +('11', '10', '7', '1234', '1326', '0'), +('11', '10', '9', '12804', '6753', '0'), +('11', '10', '9', '27712', '3140', '0'), +('11', '10', '9', '4344', '2051', '0'), +('11', '10', '9', '10408', '2002', '0'), +('11', '10', '15', '27713', '5616', '0'), +('11', '10', '15', '20659', '3462', '0'), +('11', '10', '15', '10150', '3004', '0'), +('11', '10', '15', '10163', '2300', '0'), +('11', '10', '20', '11666', '8304', '0'), +('11', '10', '20', '2742', '5091', '0'), +('11', '10', '20', '1217', '1447', '0'), +('11', '10', '20', '1647', '1334', '0'), +('11', '10', '12', '2923', '3074', '0'), +('11', '10', '12', '20655', '2848', '0'), +('11', '10', '12', '1404', '2512', '0'), +('11', '10', '12', '1236', '2497', '0'), +('11', '10', '18', '1651', '1297', '0'), +('11', '10', '18', '4410', '1142', '0'), +('11', '10', '18', '1221', '454', '0'), +('11', '10', '18', '1237', '436', '0'), +('11', '10', '19', '68239', '2286', '0'), +('11', '10', '19', '1368', '2016', '0'), +('11', '10', '19', '1652', '1834', '0'), +('11', '10', '19', '3317', '1680', '0'), +('11', '10', '13', '14759', '5904', '0'), +('11', '10', '13', '11689', '5032', '0'), +('11', '10', '13', '10527', '4500', '0'), +('11', '10', '13', '11625', '3534', '0'), +('11', '10', '14', '14759', '5904', '0'), +('11', '10', '14', '10219', '5681', '0'), +('11', '10', '14', '10527', '4500', '0'), +('11', '10', '14', '11625', '3534', '0'), +('11', '10', '11', '14762', '2204', '0'), +('11', '10', '11', '13169', '1862', '0'), +('11', '10', '11', '13353', '1500', '0'), +('11', '10', '11', '9246', '1220', '0'), +('11', '11', '22', '10323', '0', '0'), +('11', '11', '22', '9246', '0', '0'), +('11', '11', '22', '21509', '0', '0'), +('11', '11', '22', '8007', '0', '0'), +('11', '11', '1', '14702', '3750', '0'), +('11', '11', '1', '14701', '2862', '0'), +('11', '11', '1', '30361', '2640', '0'), +('11', '11', '1', '10321', '1000', '0'), +('11', '11', '2', '10143', '5368', '0'), +('11', '11', '2', '30363', '3700', '0'), +('11', '11', '2', '1232', '3493', '0'), +('11', '11', '2', '1211', '2330', '0'), +('11', '11', '3', '1544', '6316', '0'), +('11', '11', '3', '11052', '1993', '0'), +('11', '11', '3', '1212', '1451', '0'), +('11', '11', '3', '14706', '990', '0'), +('11', '11', '5', '14703', '6050', '0'), +('11', '11', '5', '14560', '4015', '0'), +('11', '11', '5', '14700', '3318', '0'), +('11', '11', '5', '30362', '3140', '0'), +('11', '11', '8', '11603', '9506', '0'), +('11', '11', '8', '1278', '5723', '0'), +('11', '11', '8', '2349', '3554', '0'), +('11', '11', '8', '1216', '1464', '0'), +('11', '11', '6', '1279', '7490', '0'), +('11', '11', '6', '1557', '5310', '0'), +('11', '11', '6', '1905', '5043', '0'), +('11', '11', '6', '1401', '2174', '0'), +('11', '11', '17', '1253', '10075', '0'), +('11', '11', '17', '1644', '9031', '0'), +('11', '11', '17', '11641', '7575', '0'), +('11', '11', '17', '1233', '5826', '0'), +('11', '11', '7', '1362', '2624', '0'), +('11', '11', '7', '1321', '1746', '0'), +('11', '11', '7', '1648', '1489', '0'), +('11', '11', '7', '1234', '1410', '0'), +('11', '11', '9', '12804', '6753', '0'), +('11', '11', '9', '27712', '3201', '0'), +('11', '11', '9', '4344', '2051', '0'), +('11', '11', '9', '10408', '2002', '0'), +('11', '11', '15', '27713', '5676', '0'), +('11', '11', '15', '20659', '3499', '0'), +('11', '11', '15', '10150', '3004', '0'), +('11', '11', '15', '10163', '2300', '0'), +('11', '11', '20', '11666', '8305', '0'), +('11', '11', '20', '2742', '5093', '0'), +('11', '11', '20', '1217', '1459', '0'), +('11', '11', '20', '1647', '1334', '0'), +('11', '11', '12', '2923', '3074', '0'), +('11', '11', '12', '20655', '2873', '0'), +('11', '11', '12', '1236', '2593', '0'), +('11', '11', '12', '1404', '2512', '0'), +('11', '11', '18', '1651', '1334', '0'), +('11', '11', '18', '4410', '1142', '0'), +('11', '11', '18', '1221', '454', '0'), +('11', '11', '18', '1237', '436', '0'), +('11', '11', '19', '68239', '2322', '0'), +('11', '11', '19', '1368', '2016', '0'), +('11', '11', '19', '1652', '1834', '0'), +('11', '11', '19', '3317', '1680', '0'), +('11', '11', '13', '14759', '5975', '0'), +('11', '11', '13', '11689', '5123', '0'), +('11', '11', '13', '10527', '4500', '0'), +('11', '11', '13', '11625', '3536', '0'), +('11', '11', '14', '14759', '5975', '0'), +('11', '11', '14', '10219', '5681', '0'), +('11', '11', '14', '10527', '4500', '0'), +('11', '11', '14', '11625', '3536', '0'), +('11', '11', '11', '14762', '2204', '0'), +('11', '11', '11', '13169', '1899', '0'), +('11', '11', '11', '13353', '1500', '0'), +('11', '11', '11', '9246', '1341', '0'), +('11', '12', '22', '10323', '0', '0'), +('11', '12', '22', '9246', '0', '0'), +('11', '12', '22', '21509', '0', '0'), +('11', '12', '22', '8007', '0', '0'), +('11', '12', '1', '14702', '3750', '0'), +('11', '12', '1', '14701', '2862', '0'), +('11', '12', '1', '30361', '2640', '0'), +('11', '12', '1', '10321', '1000', '0'), +('11', '12', '2', '10143', '5368', '0'), +('11', '12', '2', '30363', '3700', '0'), +('11', '12', '2', '1232', '3590', '0'), +('11', '12', '2', '1211', '2415', '0'), +('11', '12', '3', '1544', '6376', '0'), +('11', '12', '3', '11052', '2174', '0'), +('11', '12', '3', '1212', '1463', '0'), +('11', '12', '3', '4505', '1045', '0'), +('11', '12', '5', '14703', '6050', '0'), +('11', '12', '5', '14560', '4136', '0'), +('11', '12', '5', '14700', '3318', '0'), +('11', '12', '5', '30362', '3140', '0'), +('11', '12', '8', '11603', '9615', '0'), +('11', '12', '8', '1278', '5784', '0'), +('11', '12', '8', '2349', '3554', '0'), +('11', '12', '8', '1216', '1476', '0'), +('11', '12', '6', '1279', '7551', '0'), +('11', '12', '6', '1557', '5310', '0'), +('11', '12', '6', '1905', '5045', '0'), +('11', '12', '6', '1401', '2174', '0'), +('11', '12', '17', '1253', '10077', '0'), +('11', '12', '17', '1644', '9091', '0'), +('11', '12', '17', '11641', '7756', '0'), +('11', '12', '17', '1233', '5986', '0'), +('11', '12', '7', '1362', '2624', '0'), +('11', '12', '7', '1321', '1746', '0'), +('11', '12', '7', '1648', '1549', '0'), +('11', '12', '7', '1234', '1495', '0'), +('11', '12', '9', '12804', '6753', '0'), +('11', '12', '9', '27712', '3261', '0'), +('11', '12', '9', '4344', '2051', '0'), +('11', '12', '9', '10408', '2002', '0'), +('11', '12', '15', '27713', '5737', '0'), +('11', '12', '15', '20659', '3535', '0'), +('11', '12', '15', '10150', '3004', '0'), +('11', '12', '15', '10163', '2300', '0'), +('11', '12', '20', '11666', '8307', '0'), +('11', '12', '20', '2742', '5095', '0'), +('11', '12', '20', '1217', '1472', '0'), +('11', '12', '20', '1647', '1334', '0'), +('11', '12', '12', '2923', '3074', '0'), +('11', '12', '12', '20655', '2897', '0'), +('11', '12', '12', '1236', '2690', '0'), +('11', '12', '12', '1404', '2512', '0'), +('11', '12', '18', '1651', '1370', '0'), +('11', '12', '18', '4410', '1142', '0'), +('11', '12', '18', '1221', '454', '0'), +('11', '12', '18', '1237', '436', '0'), +('11', '12', '19', '68239', '2358', '0'), +('11', '12', '19', '1368', '2016', '0'), +('11', '12', '19', '1652', '1834', '0'), +('11', '12', '19', '3317', '1680', '0'), +('11', '12', '13', '14759', '6046', '0'), +('11', '12', '13', '11689', '5214', '0'), +('11', '12', '13', '10527', '4500', '0'), +('11', '12', '13', '13400', '3580', '0'), +('11', '12', '14', '14759', '6046', '0'), +('11', '12', '14', '10219', '5681', '0'), +('11', '12', '14', '10527', '4500', '0'), +('11', '12', '14', '11625', '3538', '0'), +('11', '12', '11', '14762', '2204', '0'), +('11', '12', '11', '13169', '1935', '0'), +('11', '12', '11', '13353', '1500', '0'), +('11', '12', '11', '9246', '1462', '0'), +('11', '13', '22', '10323', '0', '0'), +('11', '13', '22', '9246', '0', '0'), +('11', '13', '22', '21509', '0', '0'), +('11', '13', '22', '8007', '0', '0'), +('11', '13', '1', '14702', '3750', '0'), +('11', '13', '1', '14701', '2862', '0'), +('11', '13', '1', '30361', '2640', '0'), +('11', '13', '1', '10082', '1038', '0'), +('11', '13', '2', '10143', '5368', '0'), +('11', '13', '2', '30363', '3700', '0'), +('11', '13', '2', '1232', '3687', '0'), +('11', '13', '2', '1211', '2499', '0'), +('11', '13', '3', '1544', '6437', '0'), +('11', '13', '3', '11052', '2356', '0'), +('11', '13', '3', '1212', '1475', '0'), +('11', '13', '3', '4505', '1129', '0'), +('11', '13', '5', '14703', '6050', '0'), +('11', '13', '5', '14560', '4257', '0'), +('11', '13', '5', '14700', '3318', '0'), +('11', '13', '5', '30362', '3140', '0'), +('11', '13', '8', '11603', '9724', '0'), +('11', '13', '8', '1278', '5846', '0'), +('11', '13', '8', '2349', '3554', '0'), +('11', '13', '8', '1216', '1488', '0'), +('11', '13', '6', '1279', '7611', '0'), +('11', '13', '6', '1557', '5310', '0'), +('11', '13', '6', '1905', '5046', '0'), +('11', '13', '6', '1401', '2174', '0'), +('11', '13', '17', '1253', '10080', '0'), +('11', '13', '17', '1644', '9152', '0'), +('11', '13', '17', '11641', '7937', '0'), +('11', '13', '17', '1233', '6145', '0'), +('11', '13', '7', '1362', '2624', '0'), +('11', '13', '7', '1321', '1746', '0'), +('11', '13', '7', '1648', '1609', '0'), +('11', '13', '7', '1234', '1579', '0'), +('11', '13', '9', '12804', '6753', '0'), +('11', '13', '9', '27712', '3321', '0'), +('11', '13', '9', '4344', '2051', '0'), +('11', '13', '9', '10408', '2002', '0'), +('11', '13', '15', '27713', '5797', '0'), +('11', '13', '15', '20659', '3571', '0'), +('11', '13', '15', '10150', '3004', '0'), +('11', '13', '15', '10163', '2300', '0'), +('11', '13', '20', '11666', '8309', '0'), +('11', '13', '20', '2742', '5098', '0'), +('11', '13', '20', '1217', '1484', '0'), +('11', '13', '20', '1647', '1334', '0'), +('11', '13', '12', '2923', '3074', '0'), +('11', '13', '12', '20655', '2922', '0'), +('11', '13', '12', '1236', '2787', '0'), +('11', '13', '12', '1404', '2512', '0'), +('11', '13', '18', '1651', '1406', '0'), +('11', '13', '18', '4410', '1142', '0'), +('11', '13', '18', '1221', '454', '0'), +('11', '13', '18', '1237', '436', '0'), +('11', '13', '19', '68239', '2395', '0'), +('11', '13', '19', '1368', '2016', '0'), +('11', '13', '19', '1652', '1834', '0'), +('11', '13', '19', '3317', '1680', '0'), +('11', '13', '13', '14759', '6117', '0'), +('11', '13', '13', '11689', '5304', '0'), +('11', '13', '13', '10527', '4500', '0'), +('11', '13', '13', '13400', '3628', '0'), +('11', '13', '14', '14759', '6117', '0'), +('11', '13', '14', '10219', '5681', '0'), +('11', '13', '14', '10527', '4500', '0'), +('11', '13', '14', '11625', '3540', '0'), +('11', '13', '11', '14762', '2204', '0'), +('11', '13', '11', '13169', '1971', '0'), +('11', '13', '11', '9246', '1582', '0'), +('11', '13', '11', '13353', '1500', '0'), +('11', '14', '22', '10323', '0', '0'), +('11', '14', '22', '9246', '0', '0'), +('11', '14', '22', '21509', '0', '0'), +('11', '14', '22', '8007', '0', '0'), +('11', '14', '1', '14702', '3750', '0'), +('11', '14', '1', '14701', '2862', '0'), +('11', '14', '1', '30361', '2640', '0'), +('11', '14', '1', '10082', '1111', '0'), +('11', '14', '2', '10143', '5368', '0'), +('11', '14', '2', '1232', '3783', '0'), +('11', '14', '2', '30363', '3700', '0'), +('11', '14', '2', '1211', '2584', '0'), +('11', '14', '3', '1544', '6497', '0'), +('11', '14', '3', '11052', '2537', '0'), +('11', '14', '3', '1212', '1487', '0'), +('11', '14', '3', '4505', '1214', '0'), +('11', '14', '5', '14703', '6050', '0'), +('11', '14', '5', '14560', '4377', '0'), +('11', '14', '5', '14700', '3318', '0'), +('11', '14', '5', '30362', '3140', '0'), +('11', '14', '8', '11603', '9832', '0'), +('11', '14', '8', '1278', '5908', '0'), +('11', '14', '8', '2349', '3554', '0'), +('11', '14', '8', '1216', '1501', '0'), +('11', '14', '6', '1279', '7672', '0'), +('11', '14', '6', '1557', '5310', '0'), +('11', '14', '6', '1905', '5047', '0'), +('11', '14', '6', '1401', '2174', '0'), +('11', '14', '17', '1253', '10082', '0'), +('11', '14', '17', '1644', '9212', '0'), +('11', '14', '17', '11641', '8118', '0'), +('11', '14', '17', '1233', '6305', '0'), +('11', '14', '7', '1362', '2624', '0'), +('11', '14', '7', '1321', '1746', '0'), +('11', '14', '7', '1648', '1670', '0'), +('11', '14', '7', '1234', '1664', '0'), +('11', '14', '9', '12804', '6753', '0'), +('11', '14', '9', '27712', '3382', '0'), +('11', '14', '9', '4344', '2051', '0'), +('11', '14', '9', '1649', '2025', '0'), +('11', '14', '15', '27713', '5858', '0'), +('11', '14', '15', '20659', '3607', '0'), +('11', '14', '15', '10150', '3004', '0'), +('11', '14', '15', '10163', '2300', '0'), +('11', '14', '20', '11666', '8311', '0'), +('11', '14', '20', '2742', '5100', '0'), +('11', '14', '20', '1217', '1496', '0'), +('11', '14', '20', '1647', '1334', '0'), +('11', '14', '12', '2923', '3074', '0'), +('11', '14', '12', '20655', '2946', '0'), +('11', '14', '12', '1236', '2883', '0'), +('11', '14', '12', '1404', '2512', '0'), +('11', '14', '18', '1651', '1442', '0'), +('11', '14', '18', '4410', '1142', '0'), +('11', '14', '18', '1221', '454', '0'), +('11', '14', '18', '1237', '436', '0'), +('11', '14', '19', '68239', '2431', '0'), +('11', '14', '19', '1368', '2016', '0'), +('11', '14', '19', '1652', '1834', '0'), +('11', '14', '19', '3317', '1680', '0'), +('11', '14', '13', '14759', '6189', '0'), +('11', '14', '13', '11689', '5395', '0'), +('11', '14', '13', '10527', '4500', '0'), +('11', '14', '13', '13400', '3676', '0'), +('11', '14', '14', '14759', '6189', '0'), +('11', '14', '14', '10219', '5681', '0'), +('11', '14', '14', '10527', '4500', '0'), +('11', '14', '14', '11625', '3542', '0'), +('11', '14', '11', '14762', '2204', '0'), +('11', '14', '11', '13169', '2007', '0'), +('11', '14', '11', '9246', '1703', '0'), +('11', '14', '11', '13353', '1500', '0'), +('11', '15', '22', '10323', '0', '0'), +('11', '15', '22', '9246', '0', '0'), +('11', '15', '22', '21509', '0', '0'), +('11', '15', '22', '8007', '0', '0'), +('11', '15', '1', '14702', '3750', '0'), +('11', '15', '1', '14701', '2862', '0'), +('11', '15', '1', '30361', '2640', '0'), +('11', '15', '1', '10082', '1183', '0'), +('11', '15', '2', '10143', '5368', '0'), +('11', '15', '2', '1232', '3880', '0'), +('11', '15', '2', '30363', '3700', '0'), +('11', '15', '2', '1211', '2669', '0'), +('11', '15', '3', '1544', '6557', '0'), +('11', '15', '3', '11052', '2718', '0'), +('11', '15', '3', '1212', '1499', '0'), +('11', '15', '3', '4505', '1299', '0'), +('11', '15', '5', '14703', '6050', '0'), +('11', '15', '5', '14560', '4498', '0'), +('11', '15', '5', '14700', '3318', '0'), +('11', '15', '5', '30362', '3140', '0'), +('11', '15', '8', '11603', '9941', '0'), +('11', '15', '8', '1278', '5970', '0'), +('11', '15', '8', '2349', '3554', '0'), +('11', '15', '8', '1216', '1513', '0'), +('11', '15', '6', '1279', '7732', '0'), +('11', '15', '6', '1557', '5310', '0'), +('11', '15', '6', '1905', '5048', '0'), +('11', '15', '6', '1401', '2174', '0'), +('11', '15', '17', '1253', '10085', '0'), +('11', '15', '17', '1644', '9272', '0'), +('11', '15', '17', '11641', '8300', '0'), +('11', '15', '17', '1233', '6464', '0'), +('11', '15', '7', '1362', '2624', '0'), +('11', '15', '7', '1234', '1749', '0'), +('11', '15', '7', '1321', '1746', '0'), +('11', '15', '7', '1648', '1730', '0'), +('11', '15', '9', '12804', '6753', '0'), +('11', '15', '9', '27712', '3442', '0'), +('11', '15', '9', '1649', '2062', '0'), +('11', '15', '9', '4344', '2051', '0'), +('11', '15', '15', '27713', '5918', '0'), +('11', '15', '15', '20659', '3644', '0'), +('11', '15', '15', '10150', '3004', '0'), +('11', '15', '15', '10163', '2300', '0'), +('11', '15', '20', '11666', '8312', '0'), +('11', '15', '20', '2742', '5103', '0'), +('11', '15', '20', '1217', '1508', '0'), +('11', '15', '20', '1647', '1334', '0'), +('11', '15', '12', '2923', '3074', '0'), +('11', '15', '12', '1236', '2980', '0'), +('11', '15', '12', '20655', '2971', '0'), +('11', '15', '12', '1404', '2512', '0'), +('11', '15', '18', '1651', '1479', '0'), +('11', '15', '18', '4410', '1142', '0'), +('11', '15', '18', '1221', '454', '0'), +('11', '15', '18', '1237', '436', '0'), +('11', '15', '19', '68239', '2467', '0'), +('11', '15', '19', '1368', '2016', '0'), +('11', '15', '19', '1652', '1834', '0'), +('11', '15', '19', '4407', '1691', '0'), +('11', '15', '13', '14759', '6260', '0'), +('11', '15', '13', '11689', '5485', '0'), +('11', '15', '13', '10527', '4500', '0'), +('11', '15', '13', '13400', '3725', '0'), +('11', '15', '14', '14759', '6260', '0'), +('11', '15', '14', '10219', '5681', '0'), +('11', '15', '14', '10527', '4500', '0'), +('11', '15', '14', '11625', '3545', '0'), +('11', '15', '11', '14762', '2204', '0'), +('11', '15', '11', '13169', '2044', '0'), +('11', '15', '11', '9246', '1824', '0'), +('11', '15', '11', '13353', '1500', '0'), +('11', '16', '22', '10323', '0', '0'), +('11', '16', '22', '9246', '0', '0'), +('11', '16', '22', '21509', '0', '0'), +('11', '16', '22', '8007', '0', '0'), +('11', '16', '1', '14702', '3750', '0'), +('11', '16', '1', '14701', '2862', '0'), +('11', '16', '1', '30361', '2640', '0'), +('11', '16', '1', '10082', '1256', '0'), +('11', '16', '2', '10143', '5368', '0'), +('11', '16', '2', '1232', '3976', '0'), +('11', '16', '2', '30363', '3700', '0'), +('11', '16', '2', '1211', '2753', '0'), +('11', '16', '3', '1544', '6618', '0'), +('11', '16', '3', '11052', '2899', '0'), +('11', '16', '3', '1212', '1511', '0'), +('11', '16', '3', '4505', '1383', '0'), +('11', '16', '5', '14703', '6050', '0'), +('11', '16', '5', '14560', '4619', '0'), +('11', '16', '5', '14700', '3318', '0'), +('11', '16', '5', '30362', '3140', '0'), +('11', '16', '8', '11603', '10050', '0'), +('11', '16', '8', '1278', '6032', '0'), +('11', '16', '8', '2349', '3554', '0'), +('11', '16', '8', '1216', '1525', '0'), +('11', '16', '6', '1279', '7792', '0'), +('11', '16', '6', '1557', '5310', '0'), +('11', '16', '6', '1905', '5050', '0'), +('11', '16', '6', '1401', '2174', '0'), +('11', '16', '17', '1253', '10087', '0'), +('11', '16', '17', '1644', '9333', '0'), +('11', '16', '17', '11641', '8481', '0'), +('11', '16', '17', '1233', '6624', '0'), +('11', '16', '7', '1362', '2624', '0'), +('11', '16', '7', '1234', '1833', '0'), +('11', '16', '7', '1218', '1797', '0'), +('11', '16', '7', '1648', '1791', '0'), +('11', '16', '9', '12804', '6753', '0'), +('11', '16', '9', '27712', '3503', '0'), +('11', '16', '9', '1649', '2098', '0'), +('11', '16', '9', '4344', '2051', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '16', '15', '27713', '5978', '0'), +('11', '16', '15', '20659', '3680', '0'), +('11', '16', '15', '10150', '3004', '0'), +('11', '16', '15', '10163', '2300', '0'), +('11', '16', '20', '11666', '8314', '0'), +('11', '16', '20', '2742', '5105', '0'), +('11', '16', '20', '1217', '1520', '0'), +('11', '16', '20', '1647', '1334', '0'), +('11', '16', '12', '1236', '3076', '0'), +('11', '16', '12', '2923', '3074', '0'), +('11', '16', '12', '20655', '2996', '0'), +('11', '16', '12', '1404', '2512', '0'), +('11', '16', '18', '1651', '1515', '0'), +('11', '16', '18', '4410', '1142', '0'), +('11', '16', '18', '1221', '454', '0'), +('11', '16', '18', '1237', '436', '0'), +('11', '16', '19', '68239', '2503', '0'), +('11', '16', '19', '1368', '2016', '0'), +('11', '16', '19', '1652', '1834', '0'), +('11', '16', '19', '4407', '1800', '0'), +('11', '16', '13', '14759', '6331', '0'), +('11', '16', '13', '11689', '5576', '0'), +('11', '16', '13', '10527', '4500', '0'), +('11', '16', '13', '13400', '3773', '0'), +('11', '16', '14', '14759', '6331', '0'), +('11', '16', '14', '10219', '5681', '0'), +('11', '16', '14', '10527', '4500', '0'), +('11', '16', '14', '11625', '3547', '0'), +('11', '16', '11', '14762', '2204', '0'), +('11', '16', '11', '13169', '2080', '0'), +('11', '16', '11', '9246', '1945', '0'), +('11', '16', '11', '13353', '1500', '0'), +('11', '17', '22', '10323', '0', '0'), +('11', '17', '22', '9246', '0', '0'), +('11', '17', '22', '21509', '0', '0'), +('11', '17', '22', '8007', '0', '0'), +('11', '17', '1', '14702', '3750', '0'), +('11', '17', '1', '14701', '2862', '0'), +('11', '17', '1', '30361', '2640', '0'), +('11', '17', '1', '10082', '1328', '0'), +('11', '17', '2', '10143', '5368', '0'), +('11', '17', '2', '1232', '4073', '0'), +('11', '17', '2', '30363', '3700', '0'), +('11', '17', '2', '1211', '2838', '0'), +('11', '17', '3', '1544', '6678', '0'), +('11', '17', '3', '11052', '3080', '0'), +('11', '17', '3', '1212', '1523', '0'), +('11', '17', '3', '4505', '1468', '0'), +('11', '17', '5', '14703', '6050', '0'), +('11', '17', '5', '14560', '4740', '0'), +('11', '17', '5', '14700', '3318', '0'), +('11', '17', '5', '30362', '3140', '0'), +('11', '17', '8', '11603', '10159', '0'), +('11', '17', '8', '1278', '6094', '0'), +('11', '17', '8', '2349', '3554', '0'), +('11', '17', '8', '1216', '1537', '0'), +('11', '17', '6', '1279', '7853', '0'), +('11', '17', '6', '1557', '5310', '0'), +('11', '17', '6', '1905', '5051', '0'), +('11', '17', '6', '1401', '2174', '0'), +('11', '17', '17', '1253', '10089', '0'), +('11', '17', '17', '1644', '9393', '0'), +('11', '17', '17', '11641', '8662', '0'), +('11', '17', '17', '1233', '6783', '0'), +('11', '17', '7', '1362', '2624', '0'), +('11', '17', '7', '1234', '1918', '0'), +('11', '17', '7', '1218', '1882', '0'), +('11', '17', '7', '1648', '1851', '0'), +('11', '17', '9', '12804', '6753', '0'), +('11', '17', '9', '27712', '3563', '0'), +('11', '17', '9', '1649', '2134', '0'), +('11', '17', '9', '4344', '2051', '0'), +('11', '17', '15', '27713', '6039', '0'), +('11', '17', '15', '20659', '3716', '0'), +('11', '17', '15', '10150', '3004', '0'), +('11', '17', '15', '10163', '2300', '0'), +('11', '17', '20', '11666', '8316', '0'), +('11', '17', '20', '2742', '5108', '0'), +('11', '17', '20', '1217', '1532', '0'), +('11', '17', '20', '1647', '1334', '0'), +('11', '17', '12', '1236', '3173', '0'), +('11', '17', '12', '2923', '3074', '0'), +('11', '17', '12', '20655', '3020', '0'), +('11', '17', '12', '1404', '2512', '0'), +('11', '17', '18', '1651', '1551', '0'), +('11', '17', '18', '4410', '1142', '0'), +('11', '17', '18', '1221', '454', '0'), +('11', '17', '18', '1237', '436', '0'), +('11', '17', '19', '68239', '2540', '0'), +('11', '17', '19', '1368', '2016', '0'), +('11', '17', '19', '4407', '1908', '0'), +('11', '17', '19', '1652', '1834', '0'), +('11', '17', '13', '14759', '6403', '0'), +('11', '17', '13', '11689', '5667', '0'), +('11', '17', '13', '10527', '4500', '0'), +('11', '17', '13', '13400', '3821', '0'), +('11', '17', '14', '14759', '6403', '0'), +('11', '17', '14', '10219', '5681', '0'), +('11', '17', '14', '10527', '4500', '0'), +('11', '17', '14', '11625', '3549', '0'), +('11', '17', '11', '14762', '2204', '0'), +('11', '17', '11', '13169', '2116', '0'), +('11', '17', '11', '9246', '2066', '0'), +('11', '17', '11', '13353', '1500', '0'), +('11', '18', '22', '10323', '0', '0'), +('11', '18', '22', '9246', '0', '0'), +('11', '18', '22', '21509', '0', '0'), +('11', '18', '22', '8007', '0', '0'), +('11', '18', '1', '14702', '3750', '0'), +('11', '18', '1', '14701', '2862', '0'), +('11', '18', '1', '30361', '2640', '0'), +('11', '18', '1', '10082', '1401', '0'), +('11', '18', '2', '10143', '5368', '0'), +('11', '18', '2', '1232', '4170', '0'), +('11', '18', '2', '30363', '3700', '0'), +('11', '18', '2', '1211', '2922', '0'), +('11', '18', '3', '1544', '6739', '0'), +('11', '18', '3', '11052', '3262', '0'), +('11', '18', '3', '4505', '1552', '0'), +('11', '18', '3', '1212', '1536', '0'), +('11', '18', '5', '14703', '6050', '0'), +('11', '18', '5', '14560', '4861', '0'), +('11', '18', '5', '14700', '3318', '0'), +('11', '18', '5', '30362', '3140', '0'), +('11', '18', '8', '11603', '10267', '0'), +('11', '18', '8', '1278', '6156', '0'), +('11', '18', '8', '2349', '3554', '0'), +('11', '18', '8', '1216', '1549', '0'), +('11', '18', '6', '1279', '7913', '0'), +('11', '18', '6', '1557', '5310', '0'), +('11', '18', '6', '1905', '5052', '0'), +('11', '18', '6', '1401', '2174', '0'), +('11', '18', '17', '1253', '10092', '0'), +('11', '18', '17', '1644', '9454', '0'), +('11', '18', '17', '11641', '8843', '0'), +('11', '18', '17', '1233', '6943', '0'), +('11', '18', '7', '1362', '2624', '0'), +('11', '18', '7', '1234', '2002', '0'), +('11', '18', '7', '1218', '1966', '0'), +('11', '18', '7', '1648', '1911', '0'), +('11', '18', '9', '12804', '6753', '0'), +('11', '18', '9', '27712', '3623', '0'), +('11', '18', '9', '1649', '2170', '0'), +('11', '18', '9', '4344', '2051', '0'), +('11', '18', '15', '27713', '6099', '0'), +('11', '18', '15', '20659', '3752', '0'), +('11', '18', '15', '10150', '3004', '0'), +('11', '18', '15', '10163', '2300', '0'), +('11', '18', '20', '11666', '8317', '0'), +('11', '18', '20', '2742', '5110', '0'), +('11', '18', '20', '1217', '1544', '0'), +('11', '18', '20', '1647', '1334', '0'), +('11', '18', '12', '1236', '3270', '0'), +('11', '18', '12', '2923', '3074', '0'), +('11', '18', '12', '20655', '3045', '0'), +('11', '18', '12', '1404', '2512', '0'), +('11', '18', '18', '1651', '1587', '0'), +('11', '18', '18', '4410', '1142', '0'), +('11', '18', '18', '1221', '454', '0'), +('11', '18', '18', '1237', '436', '0'), +('11', '18', '19', '68239', '2576', '0'), +('11', '18', '19', '4407', '2017', '0'), +('11', '18', '19', '1368', '2016', '0'), +('11', '18', '19', '1652', '1834', '0'), +('11', '18', '13', '14759', '6474', '0'), +('11', '18', '13', '11689', '5757', '0'), +('11', '18', '13', '10527', '4500', '0'), +('11', '18', '13', '13400', '3870', '0'), +('11', '18', '14', '14759', '6474', '0'), +('11', '18', '14', '10219', '5681', '0'), +('11', '18', '14', '10527', '4500', '0'), +('11', '18', '14', '11625', '3551', '0'), +('11', '18', '11', '14762', '2204', '0'), +('11', '18', '11', '9246', '2186', '0'), +('11', '18', '11', '13169', '2152', '0'), +('11', '18', '11', '13353', '1500', '0'), +('11', '19', '22', '10323', '0', '0'), +('11', '19', '22', '9246', '0', '0'), +('11', '19', '22', '21509', '0', '0'), +('11', '19', '22', '8007', '0', '0'), +('11', '19', '1', '14702', '3750', '0'), +('11', '19', '1', '14701', '2862', '0'), +('11', '19', '1', '30361', '2640', '0'), +('11', '19', '1', '10082', '1473', '0'), +('11', '19', '2', '10143', '5368', '0'), +('11', '19', '2', '1232', '4266', '0'), +('11', '19', '2', '30363', '3700', '0'), +('11', '19', '2', '1211', '3007', '0'), +('11', '19', '3', '1544', '6799', '0'), +('11', '19', '3', '11052', '3443', '0'), +('11', '19', '3', '4505', '1637', '0'), +('11', '19', '3', '1212', '1548', '0'), +('11', '19', '5', '14703', '6050', '0'), +('11', '19', '5', '14560', '4981', '0'), +('11', '19', '5', '14700', '3318', '0'), +('11', '19', '5', '30362', '3140', '0'), +('11', '19', '8', '11603', '10376', '0'), +('11', '19', '8', '1278', '6217', '0'), +('11', '19', '8', '2349', '3554', '0'), +('11', '19', '8', '1216', '1561', '0'), +('11', '19', '6', '1279', '7974', '0'), +('11', '19', '6', '1557', '5310', '0'), +('11', '19', '6', '1905', '5053', '0'), +('11', '19', '6', '1401', '2174', '0'), +('11', '19', '17', '1253', '10094', '0'), +('11', '19', '17', '1644', '9514', '0'), +('11', '19', '17', '11641', '9024', '0'), +('11', '19', '17', '1233', '7102', '0'), +('11', '19', '7', '1362', '2624', '0'), +('11', '19', '7', '1234', '2087', '0'), +('11', '19', '7', '1218', '2051', '0'), +('11', '19', '7', '1648', '1972', '0'), +('11', '19', '9', '12804', '6753', '0'), +('11', '19', '9', '27712', '3684', '0'), +('11', '19', '9', '1649', '2207', '0'), +('11', '19', '9', '4344', '2051', '0'), +('11', '19', '15', '27713', '6160', '0'), +('11', '19', '15', '20659', '3789', '0'), +('11', '19', '15', '10150', '3004', '0'), +('11', '19', '15', '10163', '2300', '0'), +('11', '19', '20', '11666', '8319', '0'), +('11', '19', '20', '2742', '5112', '0'), +('11', '19', '20', '1217', '1556', '0'), +('11', '19', '20', '1647', '1334', '0'), +('11', '19', '12', '1236', '3366', '0'), +('11', '19', '12', '2923', '3074', '0'), +('11', '19', '12', '20655', '3070', '0'), +('11', '19', '12', '1404', '2512', '0'), +('11', '19', '18', '1651', '1624', '0'), +('11', '19', '18', '4410', '1142', '0'), +('11', '19', '18', '1221', '454', '0'), +('11', '19', '18', '1237', '436', '0'), +('11', '19', '19', '68239', '2612', '0'), +('11', '19', '19', '4407', '2126', '0'), +('11', '19', '19', '1368', '2016', '0'), +('11', '19', '19', '1652', '1834', '0'), +('11', '19', '13', '14759', '6545', '0'), +('11', '19', '13', '11689', '5848', '0'), +('11', '19', '13', '10527', '4500', '0'), +('11', '19', '13', '13400', '3918', '0'), +('11', '19', '14', '14759', '6545', '0'), +('11', '19', '14', '10219', '5681', '0'), +('11', '19', '14', '10527', '4500', '0'), +('11', '19', '14', '11625', '3553', '0'), +('11', '19', '11', '9246', '2307', '0'), +('11', '19', '11', '14762', '2204', '0'), +('11', '19', '11', '13169', '2189', '0'), +('11', '19', '11', '13353', '1500', '0'), +('11', '20', '22', '10323', '0', '0'), +('11', '20', '22', '9246', '0', '0'), +('11', '20', '22', '21509', '0', '0'), +('11', '20', '22', '8007', '0', '0'), +('11', '20', '1', '14702', '3750', '0'), +('11', '20', '1', '14701', '2862', '0'), +('11', '20', '1', '30361', '2640', '0'), +('11', '20', '1', '10082', '1546', '0'), +('11', '20', '2', '10143', '5368', '0'), +('11', '20', '2', '1232', '4363', '0'), +('11', '20', '2', '30363', '3700', '0'), +('11', '20', '2', '1211', '3091', '0'), +('11', '20', '3', '1544', '6859', '0'), +('11', '20', '3', '11052', '3624', '0'), +('11', '20', '3', '4505', '1721', '0'), +('11', '20', '3', '1212', '1560', '0'), +('11', '20', '5', '14703', '6050', '0'), +('11', '20', '5', '14560', '5102', '0'), +('11', '20', '5', '14700', '3318', '0'), +('11', '20', '5', '30362', '3140', '0'), +('11', '20', '8', '11603', '10485', '0'), +('11', '20', '8', '1278', '6279', '0'), +('11', '20', '8', '2349', '3554', '0'), +('11', '20', '8', '1216', '1573', '0'), +('11', '20', '6', '1279', '8034', '0'), +('11', '20', '6', '1557', '5310', '0'), +('11', '20', '6', '1905', '5054', '0'), +('11', '20', '6', '1401', '2174', '0'), +('11', '20', '17', '1253', '10097', '0'), +('11', '20', '17', '1644', '9574', '0'), +('11', '20', '17', '11641', '9206', '0'), +('11', '20', '17', '1233', '7262', '0'), +('11', '20', '7', '1362', '2624', '0'), +('11', '20', '7', '1234', '2171', '0'), +('11', '20', '7', '1218', '2135', '0'), +('11', '20', '7', '1648', '2032', '0'), +('11', '20', '9', '12804', '6753', '0'), +('11', '20', '9', '27712', '3744', '0'), +('11', '20', '9', '1649', '2243', '0'), +('11', '20', '9', '4344', '2051', '0'), +('11', '20', '15', '27713', '6220', '0'), +('11', '20', '15', '20659', '3825', '0'), +('11', '20', '15', '10150', '3004', '0'), +('11', '20', '15', '10163', '2300', '0'), +('11', '20', '20', '11666', '8321', '0'), +('11', '20', '20', '2742', '5115', '0'), +('11', '20', '20', '1217', '1568', '0'), +('11', '20', '20', '1647', '1334', '0'), +('11', '20', '12', '1236', '3463', '0'), +('11', '20', '12', '20655', '3094', '0'), +('11', '20', '12', '2923', '3074', '0'), +('11', '20', '12', '1404', '2512', '0'), +('11', '20', '18', '1651', '1660', '0'), +('11', '20', '18', '4410', '1142', '0'), +('11', '20', '18', '1221', '454', '0'), +('11', '20', '18', '1237', '436', '0'), +('11', '20', '19', '68239', '2648', '0'), +('11', '20', '19', '4407', '2235', '0'), +('11', '20', '19', '1368', '2016', '0'), +('11', '20', '19', '1652', '1834', '0'), +('11', '20', '13', '14759', '6616', '0'), +('11', '20', '13', '11689', '5938', '0'), +('11', '20', '13', '10527', '4500', '0'), +('11', '20', '13', '13400', '3966', '0'), +('11', '20', '14', '14759', '6616', '0'), +('11', '20', '14', '10219', '5681', '0'), +('11', '20', '14', '10527', '4500', '0'), +('11', '20', '14', '11625', '3556', '0'), +('11', '20', '11', '9246', '2428', '0'), +('11', '20', '11', '13169', '2225', '0'), +('11', '20', '11', '14762', '2204', '0'), +('11', '20', '11', '13353', '1500', '0'), +('11', '21', '22', '10323', '0', '0'), +('11', '21', '22', '9246', '0', '0'), +('11', '21', '22', '21509', '0', '0'), +('11', '21', '22', '8007', '0', '0'), +('11', '21', '1', '14702', '3750', '0'), +('11', '21', '1', '14701', '2862', '0'), +('11', '21', '1', '30361', '2640', '0'), +('11', '21', '1', '10082', '1618', '0'), +('11', '21', '2', '10143', '5368', '0'), +('11', '21', '2', '1232', '4460', '0'), +('11', '21', '2', '30363', '3700', '0'), +('11', '21', '2', '1211', '3176', '0'), +('11', '21', '3', '1544', '6920', '0'), +('11', '21', '3', '11052', '3805', '0'), +('11', '21', '3', '4505', '1806', '0'), +('11', '21', '3', '1212', '1572', '0'), +('11', '21', '5', '14703', '6050', '0'), +('11', '21', '5', '14560', '5223', '0'), +('11', '21', '5', '14700', '3318', '0'), +('11', '21', '5', '30362', '3140', '0'), +('11', '21', '8', '11603', '10594', '0'), +('11', '21', '8', '1278', '6341', '0'), +('11', '21', '8', '2349', '3554', '0'), +('11', '21', '8', '1216', '1585', '0'), +('11', '21', '6', '1279', '8094', '0'), +('11', '21', '6', '1557', '5310', '0'), +('11', '21', '6', '1905', '5056', '0'), +('11', '21', '6', '1401', '2174', '0'), +('11', '21', '17', '1253', '10099', '0'), +('11', '21', '17', '1644', '9635', '0'), +('11', '21', '17', '11641', '9387', '0'), +('11', '21', '17', '1233', '7421', '0'), +('11', '21', '7', '1362', '2624', '0'), +('11', '21', '7', '1234', '2256', '0'), +('11', '21', '7', '1218', '2220', '0'), +('11', '21', '7', '1648', '2093', '0'), +('11', '21', '9', '12804', '6753', '0'), +('11', '21', '9', '27712', '3805', '0'), +('11', '21', '9', '1649', '2279', '0'), +('11', '21', '9', '4344', '2051', '0'), +('11', '21', '15', '27713', '6280', '0'), +('11', '21', '15', '20659', '3861', '0'), +('11', '21', '15', '10150', '3004', '0'), +('11', '21', '15', '10163', '2300', '0'), +('11', '21', '20', '11666', '8322', '0'), +('11', '21', '20', '2742', '5117', '0'), +('11', '21', '20', '1217', '1580', '0'), +('11', '21', '20', '1647', '1334', '0'), +('11', '21', '12', '1236', '3560', '0'), +('11', '21', '12', '20655', '3119', '0'), +('11', '21', '12', '2923', '3074', '0'), +('11', '21', '12', '1404', '2512', '0'), +('11', '21', '18', '1651', '1696', '0'), +('11', '21', '18', '4410', '1142', '0'), +('11', '21', '18', '1221', '454', '0'), +('11', '21', '18', '1237', '436', '0'), +('11', '21', '19', '68239', '2684', '0'), +('11', '21', '19', '4407', '2343', '0'), +('11', '21', '19', '1368', '2016', '0'), +('11', '21', '19', '1652', '1834', '0'), +('11', '21', '13', '14759', '6688', '0'), +('11', '21', '13', '11689', '6029', '0'), +('11', '21', '13', '10527', '4500', '0'), +('11', '21', '13', '13400', '4015', '0'), +('11', '21', '14', '14759', '6688', '0'), +('11', '21', '14', '10219', '5681', '0'), +('11', '21', '14', '10527', '4500', '0'), +('11', '21', '14', '11625', '3558', '0'), +('11', '21', '11', '9246', '2549', '0'), +('11', '21', '11', '13169', '2261', '0'), +('11', '21', '11', '14762', '2204', '0'), +('11', '21', '11', '13353', '1500', '0'), +('11', '22', '22', '10323', '0', '0'), +('11', '22', '22', '9246', '0', '0'), +('11', '22', '22', '21509', '0', '0'), +('11', '22', '22', '8007', '0', '0'), +('11', '22', '1', '14702', '3750', '0'), +('11', '22', '1', '14701', '2862', '0'), +('11', '22', '1', '30361', '2640', '0'), +('11', '22', '1', '10082', '1691', '0'), +('11', '22', '2', '10143', '5368', '0'), +('11', '22', '2', '1232', '4556', '0'), +('11', '22', '2', '30363', '3700', '0'), +('11', '22', '2', '1211', '3261', '0'), +('11', '22', '3', '1544', '6980', '0'), +('11', '22', '3', '11052', '3986', '0'), +('11', '22', '3', '4505', '1891', '0'), +('11', '22', '3', '1212', '1584', '0'), +('11', '22', '5', '14703', '6050', '0'), +('11', '22', '5', '14560', '5344', '0'), +('11', '22', '5', '14700', '3318', '0'), +('11', '22', '5', '30362', '3140', '0'), +('11', '22', '8', '11603', '10702', '0'), +('11', '22', '8', '1278', '6403', '0'), +('11', '22', '8', '2349', '3554', '0'), +('11', '22', '8', '1216', '1597', '0'), +('11', '22', '6', '1279', '8155', '0'), +('11', '22', '6', '1557', '5310', '0'), +('11', '22', '6', '1905', '5057', '0'), +('11', '22', '6', '1401', '2174', '0'), +('11', '22', '17', '1253', '10101', '0'), +('11', '22', '17', '1644', '9695', '0'), +('11', '22', '17', '11641', '9568', '0'), +('11', '22', '17', '1233', '7581', '0'), +('11', '22', '7', '1362', '2624', '0'), +('11', '22', '7', '1234', '2341', '0'), +('11', '22', '7', '1218', '2304', '0'), +('11', '22', '7', '1648', '2153', '0'), +('11', '22', '9', '12804', '6753', '0'), +('11', '22', '9', '27712', '3865', '0'), +('11', '22', '9', '1649', '2315', '0'), +('11', '22', '9', '4344', '2051', '0'), +('11', '22', '15', '27713', '6341', '0'), +('11', '22', '15', '20659', '3897', '0'), +('11', '22', '15', '10150', '3004', '0'), +('11', '22', '15', '10163', '2300', '0'), +('11', '22', '20', '11666', '8324', '0'), +('11', '22', '20', '2742', '5120', '0'), +('11', '22', '20', '1217', '1592', '0'), +('11', '22', '20', '2467', '1341', '0'), +('11', '22', '12', '1236', '3656', '0'), +('11', '22', '12', '20655', '3144', '0'), +('11', '22', '12', '2923', '3074', '0'), +('11', '22', '12', '1404', '2512', '0'), +('11', '22', '18', '1651', '1732', '0'), +('11', '22', '18', '4410', '1142', '0'), +('11', '22', '18', '1221', '454', '0'), +('11', '22', '18', '1237', '436', '0'), +('11', '22', '19', '68239', '2721', '0'), +('11', '22', '19', '4407', '2452', '0'), +('11', '22', '19', '1368', '2016', '0'), +('11', '22', '19', '1652', '1834', '0'), +('11', '22', '13', '14759', '6759', '0'), +('11', '22', '13', '11689', '6120', '0'), +('11', '22', '13', '10527', '4500', '0'), +('11', '22', '13', '13400', '4063', '0'), +('11', '22', '14', '14759', '6759', '0'), +('11', '22', '14', '10219', '5681', '0'), +('11', '22', '14', '10527', '4500', '0'), +('11', '22', '14', '11625', '3560', '0'), +('11', '22', '11', '9246', '2670', '0'), +('11', '22', '11', '13169', '2297', '0'), +('11', '22', '11', '14762', '2204', '0'), +('11', '22', '11', '13353', '1500', '0'), +('11', '23', '22', '10323', '0', '0'), +('11', '23', '22', '9246', '0', '0'), +('11', '23', '22', '21509', '0', '0'), +('11', '23', '22', '8007', '0', '0'), +('11', '23', '1', '14702', '3750', '0'), +('11', '23', '1', '14701', '2862', '0'), +('11', '23', '1', '30361', '2640', '0'), +('11', '23', '1', '10082', '1763', '0'), +('11', '23', '2', '10143', '5368', '0'), +('11', '23', '2', '1232', '4653', '0'), +('11', '23', '2', '30363', '3700', '0'), +('11', '23', '2', '1211', '3345', '0'), +('11', '23', '3', '1544', '7041', '0'), +('11', '23', '3', '11052', '4168', '0'), +('11', '23', '3', '4505', '1975', '0'), +('11', '23', '3', '1212', '1596', '0'), +('11', '23', '5', '14703', '6050', '0'), +('11', '23', '5', '14560', '5465', '0'), +('11', '23', '5', '14700', '3318', '0'), +('11', '23', '5', '30362', '3140', '0'), +('11', '23', '8', '11603', '10811', '0'), +('11', '23', '8', '1278', '6465', '0'), +('11', '23', '8', '2349', '3554', '0'), +('11', '23', '8', '1216', '1609', '0'), +('11', '23', '6', '1279', '8215', '0'), +('11', '23', '6', '1557', '5310', '0'), +('11', '23', '6', '1905', '5058', '0'), +('11', '23', '6', '1401', '2174', '0'), +('11', '23', '17', '1253', '10104', '0'), +('11', '23', '17', '1644', '9756', '0'), +('11', '23', '17', '11641', '9749', '0'), +('11', '23', '17', '1233', '7740', '0'), +('11', '23', '7', '1362', '2624', '0'), +('11', '23', '7', '1234', '2425', '0'), +('11', '23', '7', '1218', '2389', '0'), +('11', '23', '7', '1648', '2213', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '23', '9', '12804', '6753', '0'), +('11', '23', '9', '27712', '3925', '0'), +('11', '23', '9', '1649', '2352', '0'), +('11', '23', '9', '4344', '2051', '0'), +('11', '23', '15', '27713', '6401', '0'), +('11', '23', '15', '20659', '3934', '0'), +('11', '23', '15', '10150', '3004', '0'), +('11', '23', '15', '10163', '2300', '0'), +('11', '23', '20', '11666', '8326', '0'), +('11', '23', '20', '2742', '5122', '0'), +('11', '23', '20', '1217', '1604', '0'), +('11', '23', '20', '2467', '1401', '0'), +('11', '23', '12', '1236', '3753', '0'), +('11', '23', '12', '20655', '3168', '0'), +('11', '23', '12', '2923', '3074', '0'), +('11', '23', '12', '1404', '2512', '0'), +('11', '23', '18', '1651', '1769', '0'), +('11', '23', '18', '4410', '1142', '0'), +('11', '23', '18', '1221', '454', '0'), +('11', '23', '18', '1237', '436', '0'), +('11', '23', '19', '68239', '2757', '0'), +('11', '23', '19', '4407', '2561', '0'), +('11', '23', '19', '1368', '2016', '0'), +('11', '23', '19', '1652', '1834', '0'), +('11', '23', '13', '14759', '6830', '0'), +('11', '23', '13', '11689', '6210', '0'), +('11', '23', '13', '10527', '4500', '0'), +('11', '23', '13', '13400', '4111', '0'), +('11', '23', '14', '14759', '6830', '0'), +('11', '23', '14', '10219', '5681', '0'), +('11', '23', '14', '10527', '4500', '0'), +('11', '23', '14', '6359', '3631', '0'), +('11', '23', '11', '9246', '2790', '0'), +('11', '23', '11', '13169', '2334', '0'), +('11', '23', '11', '14762', '2204', '0'), +('11', '23', '11', '13353', '1500', '0'), +('11', '24', '22', '10323', '0', '0'), +('11', '24', '22', '9246', '0', '0'), +('11', '24', '22', '21509', '0', '0'), +('11', '24', '22', '8007', '0', '0'), +('11', '24', '1', '14702', '3750', '0'), +('11', '24', '1', '14701', '2862', '0'), +('11', '24', '1', '30361', '2640', '0'), +('11', '24', '1', '10082', '1836', '0'), +('11', '24', '2', '10143', '5368', '0'), +('11', '24', '2', '1232', '4750', '0'), +('11', '24', '2', '30363', '3700', '0'), +('11', '24', '2', '1211', '3430', '0'), +('11', '24', '3', '1544', '7101', '0'), +('11', '24', '3', '11052', '4349', '0'), +('11', '24', '3', '4505', '2060', '0'), +('11', '24', '3', '1212', '1608', '0'), +('11', '24', '5', '14703', '6050', '0'), +('11', '24', '5', '14560', '5585', '0'), +('11', '24', '5', '14700', '3318', '0'), +('11', '24', '5', '30362', '3140', '0'), +('11', '24', '8', '11603', '10920', '0'), +('11', '24', '8', '1278', '6527', '0'), +('11', '24', '8', '2349', '3554', '0'), +('11', '24', '8', '1057', '1648', '0'), +('11', '24', '6', '1279', '8276', '0'), +('11', '24', '6', '1557', '5310', '0'), +('11', '24', '6', '1905', '5059', '0'), +('11', '24', '6', '1645', '2199', '0'), +('11', '24', '17', '1253', '10106', '0'), +('11', '24', '17', '11641', '9930', '0'), +('11', '24', '17', '1644', '9816', '0'), +('11', '24', '17', '1233', '7899', '0'), +('11', '24', '7', '1362', '2624', '0'), +('11', '24', '7', '1234', '2510', '0'), +('11', '24', '7', '1218', '2474', '0'), +('11', '24', '7', '1648', '2274', '0'), +('11', '24', '9', '12804', '6753', '0'), +('11', '24', '9', '27712', '3986', '0'), +('11', '24', '9', '1649', '2388', '0'), +('11', '24', '9', '4344', '2051', '0'), +('11', '24', '15', '27713', '6462', '0'), +('11', '24', '15', '20659', '3970', '0'), +('11', '24', '15', '10150', '3004', '0'), +('11', '24', '15', '10163', '2300', '0'), +('11', '24', '20', '11666', '8327', '0'), +('11', '24', '20', '2742', '5124', '0'), +('11', '24', '20', '1217', '1616', '0'), +('11', '24', '20', '2467', '1462', '0'), +('11', '24', '12', '1236', '3850', '0'), +('11', '24', '12', '20655', '3193', '0'), +('11', '24', '12', '2923', '3074', '0'), +('11', '24', '12', '1404', '2512', '0'), +('11', '24', '18', '1651', '1805', '0'), +('11', '24', '18', '4410', '1142', '0'), +('11', '24', '18', '1221', '454', '0'), +('11', '24', '18', '1237', '436', '0'), +('11', '24', '19', '68239', '2793', '0'), +('11', '24', '19', '4407', '2669', '0'), +('11', '24', '19', '1368', '2016', '0'), +('11', '24', '19', '1652', '1834', '0'), +('11', '24', '13', '14759', '6901', '0'), +('11', '24', '13', '11689', '6301', '0'), +('11', '24', '13', '10527', '4500', '0'), +('11', '24', '13', '13400', '4160', '0'), +('11', '24', '14', '14759', '6901', '0'), +('11', '24', '14', '10219', '5681', '0'), +('11', '24', '14', '10527', '4500', '0'), +('11', '24', '14', '6359', '3752', '0'), +('11', '24', '11', '9246', '2911', '0'), +('11', '24', '11', '13169', '2370', '0'), +('11', '24', '11', '14762', '2204', '0'), +('11', '24', '11', '13353', '1500', '0'), +('11', '25', '22', '10323', '0', '0'), +('11', '25', '22', '9246', '0', '0'), +('11', '25', '22', '21509', '0', '0'), +('11', '25', '22', '8007', '0', '0'), +('11', '25', '1', '14702', '3750', '0'), +('11', '25', '1', '14701', '2862', '0'), +('11', '25', '1', '30361', '2640', '0'), +('11', '25', '1', '10082', '1908', '0'), +('11', '25', '2', '10143', '5368', '0'), +('11', '25', '2', '1232', '4846', '0'), +('11', '25', '2', '30363', '3700', '0'), +('11', '25', '2', '1211', '3514', '0'), +('11', '25', '3', '1544', '7161', '0'), +('11', '25', '3', '11052', '4530', '0'), +('11', '25', '3', '4505', '2144', '0'), +('11', '25', '3', '1212', '1620', '0'), +('11', '25', '5', '14703', '6050', '0'), +('11', '25', '5', '14560', '5706', '0'), +('11', '25', '5', '14700', '3318', '0'), +('11', '25', '5', '11646', '3226', '0'), +('11', '25', '8', '11603', '11028', '0'), +('11', '25', '8', '1278', '6589', '0'), +('11', '25', '8', '2349', '3554', '0'), +('11', '25', '8', '1057', '1708', '0'), +('11', '25', '6', '1279', '8336', '0'), +('11', '25', '6', '1557', '5310', '0'), +('11', '25', '6', '1905', '5060', '0'), +('11', '25', '6', '1645', '2235', '0'), +('11', '25', '17', '11641', '10112', '0'), +('11', '25', '17', '1253', '10109', '0'), +('11', '25', '17', '1644', '9876', '0'), +('11', '25', '17', '1233', '8059', '0'), +('11', '25', '7', '1362', '2624', '0'), +('11', '25', '7', '1234', '2594', '0'), +('11', '25', '7', '1218', '2558', '0'), +('11', '25', '7', '1648', '2334', '0'), +('11', '25', '9', '12804', '6753', '0'), +('11', '25', '9', '27712', '4046', '0'), +('11', '25', '9', '1649', '2424', '0'), +('11', '25', '9', '4344', '2051', '0'), +('11', '25', '15', '27713', '6522', '0'), +('11', '25', '15', '20659', '4006', '0'), +('11', '25', '15', '10150', '3004', '0'), +('11', '25', '15', '10163', '2300', '0'), +('11', '25', '20', '11666', '8329', '0'), +('11', '25', '20', '2742', '5127', '0'), +('11', '25', '20', '1217', '1629', '0'), +('11', '25', '20', '2467', '1522', '0'), +('11', '25', '12', '1236', '3946', '0'), +('11', '25', '12', '20655', '3218', '0'), +('11', '25', '12', '2923', '3074', '0'), +('11', '25', '12', '2336', '2522', '0'), +('11', '25', '18', '1651', '1841', '0'), +('11', '25', '18', '4410', '1142', '0'), +('11', '25', '18', '1221', '454', '0'), +('11', '25', '18', '1237', '436', '0'), +('11', '25', '19', '68239', '2829', '0'), +('11', '25', '19', '4407', '2778', '0'), +('11', '25', '19', '1368', '2016', '0'), +('11', '25', '19', '1652', '1834', '0'), +('11', '25', '13', '14759', '6973', '0'), +('11', '25', '13', '11689', '6391', '0'), +('11', '25', '13', '10527', '4500', '0'), +('11', '25', '13', '13400', '4208', '0'), +('11', '25', '14', '14759', '6973', '0'), +('11', '25', '14', '10219', '5681', '0'), +('11', '25', '14', '10527', '4500', '0'), +('11', '25', '14', '6359', '3873', '0'), +('11', '25', '11', '9246', '3032', '0'), +('11', '25', '11', '13169', '2406', '0'), +('11', '25', '11', '14762', '2204', '0'), +('11', '25', '11', '13353', '1500', '0'), +('11', '26', '22', '10323', '0', '0'), +('11', '26', '22', '9246', '0', '0'), +('11', '26', '22', '21509', '0', '0'), +('11', '26', '22', '8007', '0', '0'), +('11', '26', '1', '14702', '3750', '0'), +('11', '26', '1', '14701', '2862', '0'), +('11', '26', '1', '30361', '2640', '0'), +('11', '26', '1', '10082', '1981', '0'), +('11', '26', '2', '10143', '5368', '0'), +('11', '26', '2', '1232', '4943', '0'), +('11', '26', '2', '30363', '3700', '0'), +('11', '26', '2', '1211', '3599', '0'), +('11', '26', '3', '1544', '7222', '0'), +('11', '26', '3', '11052', '4711', '0'), +('11', '26', '3', '4505', '2229', '0'), +('11', '26', '3', '1212', '1632', '0'), +('11', '26', '5', '14703', '6050', '0'), +('11', '26', '5', '14560', '5827', '0'), +('11', '26', '5', '11646', '3383', '0'), +('11', '26', '5', '14700', '3318', '0'), +('11', '26', '8', '11603', '11137', '0'), +('11', '26', '8', '1278', '6650', '0'), +('11', '26', '8', '2349', '3554', '0'), +('11', '26', '8', '1057', '1769', '0'), +('11', '26', '6', '1279', '8396', '0'), +('11', '26', '6', '1557', '5310', '0'), +('11', '26', '6', '1905', '5062', '0'), +('11', '26', '6', '1645', '2271', '0'), +('11', '26', '17', '11641', '10293', '0'), +('11', '26', '17', '1253', '10111', '0'), +('11', '26', '17', '1644', '9937', '0'), +('11', '26', '17', '1233', '8218', '0'), +('11', '26', '7', '1234', '2679', '0'), +('11', '26', '7', '1218', '2643', '0'), +('11', '26', '7', '1362', '2624', '0'), +('11', '26', '7', '1648', '2395', '0'), +('11', '26', '9', '12804', '6753', '0'), +('11', '26', '9', '27712', '4107', '0'), +('11', '26', '9', '1649', '2460', '0'), +('11', '26', '9', '4344', '2051', '0'), +('11', '26', '15', '27713', '6582', '0'), +('11', '26', '15', '20659', '4042', '0'), +('11', '26', '15', '10150', '3004', '0'), +('11', '26', '15', '10163', '2300', '0'), +('11', '26', '20', '11666', '8331', '0'), +('11', '26', '20', '2742', '5129', '0'), +('11', '26', '20', '1217', '1641', '0'), +('11', '26', '20', '2467', '1582', '0'), +('11', '26', '12', '1236', '4043', '0'), +('11', '26', '12', '20655', '3242', '0'), +('11', '26', '12', '2923', '3074', '0'), +('11', '26', '12', '2336', '2582', '0'), +('11', '26', '18', '1651', '1877', '0'), +('11', '26', '18', '4410', '1142', '0'), +('11', '26', '18', '1221', '454', '0'), +('11', '26', '18', '1237', '436', '0'), +('11', '26', '19', '4407', '2887', '0'), +('11', '26', '19', '68239', '2866', '0'), +('11', '26', '19', '1368', '2016', '0'), +('11', '26', '19', '1652', '1834', '0'), +('11', '26', '13', '14759', '7044', '0'), +('11', '26', '13', '11689', '6482', '0'), +('11', '26', '13', '10527', '4500', '0'), +('11', '26', '13', '13400', '4256', '0'), +('11', '26', '14', '14759', '7044', '0'), +('11', '26', '14', '10219', '5681', '0'), +('11', '26', '14', '10527', '4500', '0'), +('11', '26', '14', '6359', '3994', '0'), +('11', '26', '11', '9246', '3153', '0'), +('11', '26', '11', '13169', '2442', '0'), +('11', '26', '11', '14762', '2204', '0'), +('11', '26', '11', '13353', '1500', '0'), +('11', '27', '22', '10323', '0', '0'), +('11', '27', '22', '9246', '0', '0'), +('11', '27', '22', '21509', '0', '0'), +('11', '27', '22', '8007', '0', '0'), +('11', '27', '1', '14702', '3750', '0'), +('11', '27', '1', '14701', '2862', '0'), +('11', '27', '1', '30361', '2640', '0'), +('11', '27', '1', '10082', '2053', '0'), +('11', '27', '2', '10143', '5368', '0'), +('11', '27', '2', '1232', '5039', '0'), +('11', '27', '2', '30363', '3700', '0'), +('11', '27', '2', '1211', '3683', '0'), +('11', '27', '3', '1544', '7282', '0'), +('11', '27', '3', '11052', '4892', '0'), +('11', '27', '3', '4505', '2313', '0'), +('11', '27', '3', '1212', '1644', '0'), +('11', '27', '5', '14703', '6050', '0'), +('11', '27', '5', '14560', '5948', '0'), +('11', '27', '5', '11646', '3540', '0'), +('11', '27', '5', '14700', '3318', '0'), +('11', '27', '8', '11603', '11246', '0'), +('11', '27', '8', '1278', '6712', '0'), +('11', '27', '8', '2349', '3554', '0'), +('11', '27', '8', '1057', '1829', '0'), +('11', '27', '6', '1279', '8457', '0'), +('11', '27', '6', '1557', '5310', '0'), +('11', '27', '6', '1905', '5063', '0'), +('11', '27', '6', '1645', '2307', '0'), +('11', '27', '17', '11641', '10474', '0'), +('11', '27', '17', '1253', '10114', '0'), +('11', '27', '17', '1644', '9997', '0'), +('11', '27', '17', '1233', '8378', '0'), +('11', '27', '7', '1234', '2763', '0'), +('11', '27', '7', '1218', '2727', '0'), +('11', '27', '7', '1362', '2624', '0'), +('11', '27', '7', '1648', '2455', '0'), +('11', '27', '9', '12804', '6753', '0'), +('11', '27', '9', '27712', '4167', '0'), +('11', '27', '9', '1649', '2497', '0'), +('11', '27', '9', '4344', '2051', '0'), +('11', '27', '15', '27713', '6643', '0'), +('11', '27', '15', '20659', '4078', '0'), +('11', '27', '15', '10150', '3004', '0'), +('11', '27', '15', '10163', '2300', '0'), +('11', '27', '20', '11666', '8333', '0'), +('11', '27', '20', '2742', '5132', '0'), +('11', '27', '20', '1217', '1653', '0'), +('11', '27', '20', '2467', '1643', '0'), +('11', '27', '12', '1236', '4139', '0'), +('11', '27', '12', '20655', '3267', '0'), +('11', '27', '12', '2923', '3074', '0'), +('11', '27', '12', '2336', '2643', '0'), +('11', '27', '18', '1651', '1914', '0'), +('11', '27', '18', '4410', '1142', '0'), +('11', '27', '18', '1221', '454', '0'), +('11', '27', '18', '1237', '436', '0'), +('11', '27', '19', '4407', '2996', '0'), +('11', '27', '19', '68239', '2902', '0'), +('11', '27', '19', '1368', '2016', '0'), +('11', '27', '19', '1652', '1834', '0'), +('11', '27', '13', '14759', '7115', '0'), +('11', '27', '13', '11689', '6573', '0'), +('11', '27', '13', '10527', '4500', '0'), +('11', '27', '13', '13400', '4305', '0'), +('11', '27', '14', '14759', '7115', '0'), +('11', '27', '14', '10219', '5681', '0'), +('11', '27', '14', '10527', '4500', '0'), +('11', '27', '14', '6359', '4115', '0'), +('11', '27', '11', '9246', '3274', '0'), +('11', '27', '11', '13169', '2478', '0'), +('11', '27', '11', '14762', '2204', '0'), +('11', '27', '11', '13353', '1500', '0'), +('11', '28', '22', '10323', '0', '0'), +('11', '28', '22', '9246', '0', '0'), +('11', '28', '22', '21509', '0', '0'), +('11', '28', '22', '8007', '0', '0'), +('11', '28', '1', '14702', '3750', '0'), +('11', '28', '1', '14701', '2862', '0'), +('11', '28', '1', '30361', '2640', '0'), +('11', '28', '1', '10082', '2126', '0'), +('11', '28', '2', '10143', '5368', '0'), +('11', '28', '2', '1232', '5136', '0'), +('11', '28', '2', '1211', '3768', '0'), +('11', '28', '2', '30363', '3700', '0'), +('11', '28', '3', '1544', '7343', '0'), +('11', '28', '3', '11052', '5074', '0'), +('11', '28', '3', '4505', '2398', '0'), +('11', '28', '3', '1212', '1656', '0'), +('11', '28', '5', '14560', '6069', '0'), +('11', '28', '5', '14703', '6050', '0'), +('11', '28', '5', '11646', '3697', '0'), +('11', '28', '5', '14700', '3318', '0'), +('11', '28', '8', '11603', '11355', '0'), +('11', '28', '8', '1278', '6774', '0'), +('11', '28', '8', '2349', '3554', '0'), +('11', '28', '8', '1057', '1890', '0'), +('11', '28', '6', '1279', '8517', '0'), +('11', '28', '6', '1557', '5310', '0'), +('11', '28', '6', '1905', '5064', '0'), +('11', '28', '6', '1645', '2344', '0'), +('11', '28', '17', '11641', '10655', '0'), +('11', '28', '17', '1253', '10116', '0'), +('11', '28', '17', '1644', '10058', '0'), +('11', '28', '17', '1233', '8537', '0'), +('11', '28', '7', '1234', '2848', '0'), +('11', '28', '7', '1218', '2812', '0'), +('11', '28', '7', '1362', '2624', '0'), +('11', '28', '7', '1648', '2515', '0'), +('11', '28', '9', '12804', '6753', '0'), +('11', '28', '9', '27712', '4227', '0'), +('11', '28', '9', '1649', '2533', '0'), +('11', '28', '9', '4344', '2051', '0'), +('11', '28', '15', '27713', '6703', '0'), +('11', '28', '15', '20659', '4115', '0'), +('11', '28', '15', '10150', '3004', '0'), +('11', '28', '15', '10163', '2300', '0'), +('11', '28', '20', '11666', '8334', '0'), +('11', '28', '20', '2742', '5134', '0'), +('11', '28', '20', '2467', '1703', '0'), +('11', '28', '20', '1217', '1665', '0'), +('11', '28', '12', '1236', '4236', '0'), +('11', '28', '12', '20655', '3291', '0'), +('11', '28', '12', '2923', '3074', '0'), +('11', '28', '12', '2336', '2703', '0'), +('11', '28', '18', '1651', '1950', '0'), +('11', '28', '18', '4410', '1142', '0'), +('11', '28', '18', '1221', '454', '0'), +('11', '28', '18', '1237', '436', '0'), +('11', '28', '19', '4407', '3104', '0'), +('11', '28', '19', '68239', '2938', '0'), +('11', '28', '19', '1368', '2016', '0'), +('11', '28', '19', '1652', '1834', '0'), +('11', '28', '13', '14759', '7187', '0'), +('11', '28', '13', '11689', '6663', '0'), +('11', '28', '13', '10527', '4500', '0'), +('11', '28', '13', '13400', '4353', '0'), +('11', '28', '14', '14759', '7187', '0'), +('11', '28', '14', '10219', '5681', '0'), +('11', '28', '14', '10527', '4500', '0'), +('11', '28', '14', '6359', '4235', '0'), +('11', '28', '11', '9246', '3394', '0'), +('11', '28', '11', '13169', '2515', '0'), +('11', '28', '11', '14762', '2204', '0'), +('11', '28', '11', '13353', '1500', '0'), +('11', '29', '22', '10323', '0', '0'), +('11', '29', '22', '9246', '0', '0'), +('11', '29', '22', '21509', '0', '0'), +('11', '29', '22', '8007', '0', '0'), +('11', '29', '1', '14702', '3750', '0'), +('11', '29', '1', '14701', '2862', '0'), +('11', '29', '1', '30361', '2640', '0'), +('11', '29', '1', '10082', '2198', '0'), +('11', '29', '2', '10143', '5368', '0'), +('11', '29', '2', '1232', '5233', '0'), +('11', '29', '2', '1211', '3852', '0'), +('11', '29', '2', '30363', '3700', '0'), +('11', '29', '3', '1544', '7403', '0'), +('11', '29', '3', '11052', '5255', '0'), +('11', '29', '3', '4505', '2482', '0'), +('11', '29', '3', '1212', '1668', '0'), +('11', '29', '5', '14560', '6189', '0'), +('11', '29', '5', '14703', '6050', '0'), +('11', '29', '5', '11646', '3854', '0'), +('11', '29', '5', '14700', '3318', '0'), +('11', '29', '8', '11603', '11463', '0'), +('11', '29', '8', '1278', '6836', '0'), +('11', '29', '8', '2349', '3554', '0'), +('11', '29', '8', '1057', '1950', '0'), +('11', '29', '6', '1279', '8578', '0'), +('11', '29', '6', '1557', '5310', '0'), +('11', '29', '6', '1905', '5065', '0'), +('11', '29', '6', '1645', '2380', '0'), +('11', '29', '17', '11641', '10836', '0'), +('11', '29', '17', '1644', '10118', '0'), +('11', '29', '17', '1253', '10118', '0'), +('11', '29', '17', '1233', '8697', '0'), +('11', '29', '7', '1234', '2932', '0'), +('11', '29', '7', '1218', '2896', '0'), +('11', '29', '7', '1362', '2624', '0'), +('11', '29', '7', '1648', '2576', '0'), +('11', '29', '9', '12804', '6753', '0'), +('11', '29', '9', '27712', '4288', '0'), +('11', '29', '9', '1649', '2569', '0'), +('11', '29', '9', '4344', '2051', '0'), +('11', '29', '15', '27713', '6764', '0'), +('11', '29', '15', '20659', '4151', '0'), +('11', '29', '15', '10150', '3004', '0'), +('11', '29', '15', '10163', '2300', '0'), +('11', '29', '20', '11666', '8336', '0'), +('11', '29', '20', '2742', '5137', '0'), +('11', '29', '20', '2467', '1764', '0'), +('11', '29', '20', '1217', '1677', '0'), +('11', '29', '12', '1236', '4333', '0'), +('11', '29', '12', '20655', '3316', '0'), +('11', '29', '12', '2923', '3074', '0'), +('11', '29', '12', '2336', '2764', '0'), +('11', '29', '18', '1651', '1986', '0'), +('11', '29', '18', '4410', '1142', '0'), +('11', '29', '18', '1221', '454', '0'), +('11', '29', '18', '1237', '436', '0'), +('11', '29', '19', '4407', '3213', '0'), +('11', '29', '19', '68239', '2974', '0'), +('11', '29', '19', '1368', '2016', '0'), +('11', '29', '19', '1652', '1834', '0'), +('11', '29', '13', '14759', '7258', '0'), +('11', '29', '13', '11689', '6754', '0'), +('11', '29', '13', '10527', '4500', '0'), +('11', '29', '13', '13400', '4401', '0'), +('11', '29', '14', '14759', '7258', '0'), +('11', '29', '14', '10219', '5681', '0'), +('11', '29', '14', '10527', '4500', '0'), +('11', '29', '14', '6359', '4356', '0'), +('11', '29', '11', '9246', '3515', '0'), +('11', '29', '11', '13169', '2551', '0'), +('11', '29', '11', '14762', '2204', '0'), +('11', '29', '11', '13353', '1500', '0'), +('11', '30', '22', '10323', '0', '0'), +('11', '30', '22', '9246', '0', '0'), +('11', '30', '22', '21509', '0', '0'), +('11', '30', '22', '8007', '0', '0'), +('11', '30', '1', '14702', '3750', '0'), +('11', '30', '1', '14701', '2862', '0'), +('11', '30', '1', '30361', '2640', '0'), +('11', '30', '1', '10082', '2271', '0'), +('11', '30', '2', '10143', '5368', '0'), +('11', '30', '2', '1232', '5329', '0'), +('11', '30', '2', '1211', '3937', '0'), +('11', '30', '2', '30363', '3700', '0'), +('11', '30', '3', '1544', '7463', '0'), +('11', '30', '3', '11052', '5436', '0'), +('11', '30', '3', '4505', '2567', '0'), +('11', '30', '3', '1212', '1681', '0'), +('11', '30', '5', '14560', '6310', '0'), +('11', '30', '5', '14703', '6050', '0'), +('11', '30', '5', '11646', '4011', '0'), +('11', '30', '5', '10216', '3324', '0'), +('11', '30', '8', '11603', '11572', '0'), +('11', '30', '8', '1278', '6898', '0'), +('11', '30', '8', '2349', '3554', '0'), +('11', '30', '8', '1057', '2010', '0'), +('11', '30', '6', '1279', '8638', '0'), +('11', '30', '6', '1557', '5310', '0'), +('11', '30', '6', '1905', '5066', '0'), +('11', '30', '6', '1645', '2416', '0'), +('11', '30', '17', '11641', '11018', '0'), +('11', '30', '17', '1644', '10178', '0'), +('11', '30', '17', '1253', '10121', '0'), +('11', '30', '17', '1233', '8856', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '30', '7', '1234', '3017', '0'), +('11', '30', '7', '1218', '2981', '0'), +('11', '30', '7', '1648', '2636', '0'), +('11', '30', '7', '1362', '2624', '0'), +('11', '30', '9', '12804', '6753', '0'), +('11', '30', '9', '27712', '4348', '0'), +('11', '30', '9', '1649', '2605', '0'), +('11', '30', '9', '4344', '2051', '0'), +('11', '30', '15', '27713', '6824', '0'), +('11', '30', '15', '20659', '4187', '0'), +('11', '30', '15', '10150', '3004', '0'), +('11', '30', '15', '10163', '2300', '0'), +('11', '30', '20', '11666', '8338', '0'), +('11', '30', '20', '2742', '5139', '0'), +('11', '30', '20', '2467', '1824', '0'), +('11', '30', '20', '1217', '1689', '0'), +('11', '30', '12', '1236', '4429', '0'), +('11', '30', '12', '20655', '3341', '0'), +('11', '30', '12', '2923', '3074', '0'), +('11', '30', '12', '2336', '2824', '0'), +('11', '30', '18', '1651', '2022', '0'), +('11', '30', '18', '4410', '1142', '0'), +('11', '30', '18', '1221', '454', '0'), +('11', '30', '18', '1237', '436', '0'), +('11', '30', '19', '4407', '3322', '0'), +('11', '30', '19', '68239', '3011', '0'), +('11', '30', '19', '1368', '2016', '0'), +('11', '30', '19', '1652', '1834', '0'), +('11', '30', '13', '14759', '7329', '0'), +('11', '30', '13', '11689', '6844', '0'), +('11', '30', '13', '10527', '4500', '0'), +('11', '30', '13', '6359', '4477', '0'), +('11', '30', '14', '14759', '7329', '0'), +('11', '30', '14', '10219', '5681', '0'), +('11', '30', '14', '10527', '4500', '0'), +('11', '30', '14', '6359', '4477', '0'), +('11', '30', '11', '9246', '3636', '0'), +('11', '30', '11', '13169', '2587', '0'), +('11', '30', '11', '14762', '2204', '0'), +('11', '30', '11', '13353', '1500', '0'), +('11', '31', '22', '10323', '0', '0'), +('11', '31', '22', '9246', '0', '0'), +('11', '31', '22', '21509', '0', '0'), +('11', '31', '22', '8007', '0', '0'), +('11', '31', '1', '14702', '3750', '0'), +('11', '31', '1', '14701', '2862', '0'), +('11', '31', '1', '30361', '2640', '0'), +('11', '31', '1', '10082', '2343', '0'), +('11', '31', '2', '1232', '5426', '0'), +('11', '31', '2', '10143', '5368', '0'), +('11', '31', '2', '1211', '4022', '0'), +('11', '31', '2', '30363', '3700', '0'), +('11', '31', '3', '1544', '7524', '0'), +('11', '31', '3', '11052', '5617', '0'), +('11', '31', '3', '4505', '2652', '0'), +('11', '31', '3', '1212', '1693', '0'), +('11', '31', '5', '14560', '6431', '0'), +('11', '31', '5', '14703', '6050', '0'), +('11', '31', '5', '11646', '4168', '0'), +('11', '31', '5', '10216', '3384', '0'), +('11', '31', '8', '11603', '11681', '0'), +('11', '31', '8', '1278', '6960', '0'), +('11', '31', '8', '2349', '3554', '0'), +('11', '31', '8', '1057', '2071', '0'), +('11', '31', '6', '1279', '8698', '0'), +('11', '31', '6', '1557', '5310', '0'), +('11', '31', '6', '1905', '5068', '0'), +('11', '31', '6', '1645', '2452', '0'), +('11', '31', '17', '11641', '11199', '0'), +('11', '31', '17', '1644', '10239', '0'), +('11', '31', '17', '1253', '10123', '0'), +('11', '31', '17', '1233', '9016', '0'), +('11', '31', '7', '1234', '3102', '0'), +('11', '31', '7', '1218', '3066', '0'), +('11', '31', '7', '1648', '2697', '0'), +('11', '31', '7', '1362', '2624', '0'), +('11', '31', '9', '12804', '6753', '0'), +('11', '31', '9', '27712', '4409', '0'), +('11', '31', '9', '1649', '2642', '0'), +('11', '31', '9', '4344', '2051', '0'), +('11', '31', '15', '27713', '6884', '0'), +('11', '31', '15', '20659', '4223', '0'), +('11', '31', '15', '10150', '3004', '0'), +('11', '31', '15', '10163', '2300', '0'), +('11', '31', '20', '11666', '8339', '0'), +('11', '31', '20', '2742', '5141', '0'), +('11', '31', '20', '2467', '1884', '0'), +('11', '31', '20', '1217', '1701', '0'), +('11', '31', '12', '1236', '4526', '0'), +('11', '31', '12', '20655', '3365', '0'), +('11', '31', '12', '2923', '3074', '0'), +('11', '31', '12', '2336', '2884', '0'), +('11', '31', '18', '1651', '2058', '0'), +('11', '31', '18', '4410', '1142', '0'), +('11', '31', '18', '1221', '454', '0'), +('11', '31', '18', '1237', '436', '0'), +('11', '31', '19', '4407', '3431', '0'), +('11', '31', '19', '68239', '3047', '0'), +('11', '31', '19', '1368', '2016', '0'), +('11', '31', '19', '1652', '1834', '0'), +('11', '31', '13', '14759', '7400', '0'), +('11', '31', '13', '11689', '6935', '0'), +('11', '31', '13', '6359', '4598', '0'), +('11', '31', '13', '10527', '4500', '0'), +('11', '31', '14', '14759', '7400', '0'), +('11', '31', '14', '10219', '5681', '0'), +('11', '31', '14', '6359', '4598', '0'), +('11', '31', '14', '10527', '4500', '0'), +('11', '31', '11', '9246', '3757', '0'), +('11', '31', '11', '13169', '2623', '0'), +('11', '31', '11', '14762', '2204', '0'), +('11', '31', '11', '13353', '1500', '0'), +('11', '32', '22', '10323', '0', '0'), +('11', '32', '22', '9246', '0', '0'), +('11', '32', '22', '21509', '0', '0'), +('11', '32', '22', '8007', '0', '0'), +('11', '32', '1', '14702', '3750', '0'), +('11', '32', '1', '14701', '2862', '0'), +('11', '32', '1', '30361', '2640', '0'), +('11', '32', '1', '10082', '2416', '0'), +('11', '32', '2', '1232', '5523', '0'), +('11', '32', '2', '10143', '5368', '0'), +('11', '32', '2', '1211', '4106', '0'), +('11', '32', '2', '30363', '3700', '0'), +('11', '32', '3', '1544', '7584', '0'), +('11', '32', '3', '11052', '5798', '0'), +('11', '32', '3', '4505', '2736', '0'), +('11', '32', '3', '1212', '1705', '0'), +('11', '32', '5', '14560', '6552', '0'), +('11', '32', '5', '14703', '6050', '0'), +('11', '32', '5', '11646', '4325', '0'), +('11', '32', '5', '10216', '3445', '0'), +('11', '32', '8', '11603', '11789', '0'), +('11', '32', '8', '1278', '7021', '0'), +('11', '32', '8', '2349', '3554', '0'), +('11', '32', '8', '1057', '2131', '0'), +('11', '32', '6', '1279', '8759', '0'), +('11', '32', '6', '1557', '5310', '0'), +('11', '32', '6', '1905', '5069', '0'), +('11', '32', '6', '1645', '2489', '0'), +('11', '32', '17', '11641', '11380', '0'), +('11', '32', '17', '1644', '10299', '0'), +('11', '32', '17', '1253', '10126', '0'), +('11', '32', '17', '1233', '9175', '0'), +('11', '32', '7', '1234', '3186', '0'), +('11', '32', '7', '1218', '3150', '0'), +('11', '32', '7', '1648', '2757', '0'), +('11', '32', '7', '1362', '2624', '0'), +('11', '32', '9', '12804', '6753', '0'), +('11', '32', '9', '27712', '4469', '0'), +('11', '32', '9', '1649', '2678', '0'), +('11', '32', '9', '4344', '2051', '0'), +('11', '32', '15', '27713', '6945', '0'), +('11', '32', '15', '20659', '4260', '0'), +('11', '32', '15', '10150', '3004', '0'), +('11', '32', '15', '10163', '2300', '0'), +('11', '32', '20', '11666', '8341', '0'), +('11', '32', '20', '2742', '5144', '0'), +('11', '32', '20', '2467', '1945', '0'), +('11', '32', '20', '1217', '1713', '0'), +('11', '32', '12', '1236', '4623', '0'), +('11', '32', '12', '20655', '3390', '0'), +('11', '32', '12', '2923', '3074', '0'), +('11', '32', '12', '2336', '2945', '0'), +('11', '32', '18', '1651', '2095', '0'), +('11', '32', '18', '4410', '1142', '0'), +('11', '32', '18', '1221', '454', '0'), +('11', '32', '18', '1237', '436', '0'), +('11', '32', '19', '4407', '3539', '0'), +('11', '32', '19', '68239', '3083', '0'), +('11', '32', '19', '1368', '2016', '0'), +('11', '32', '19', '1652', '1834', '0'), +('11', '32', '13', '14759', '7472', '0'), +('11', '32', '13', '11689', '7026', '0'), +('11', '32', '13', '6359', '4719', '0'), +('11', '32', '13', '13400', '4546', '0'), +('11', '32', '14', '14759', '7472', '0'), +('11', '32', '14', '10219', '5681', '0'), +('11', '32', '14', '6359', '4719', '0'), +('11', '32', '14', '10527', '4500', '0'), +('11', '32', '11', '9246', '3878', '0'), +('11', '32', '11', '13169', '2660', '0'), +('11', '32', '11', '14762', '2204', '0'), +('11', '32', '11', '13353', '1500', '0'), +('11', '33', '22', '10323', '0', '0'), +('11', '33', '22', '9246', '0', '0'), +('11', '33', '22', '21509', '0', '0'), +('11', '33', '22', '8007', '0', '0'), +('11', '33', '1', '14702', '3750', '0'), +('11', '33', '1', '14701', '2862', '0'), +('11', '33', '1', '30361', '2640', '0'), +('11', '33', '1', '10082', '2488', '0'), +('11', '33', '2', '1232', '5619', '0'), +('11', '33', '2', '10143', '5368', '0'), +('11', '33', '2', '1211', '4191', '0'), +('11', '33', '2', '30363', '3700', '0'), +('11', '33', '3', '1544', '7645', '0'), +('11', '33', '3', '11052', '5980', '0'), +('11', '33', '3', '4505', '2821', '0'), +('11', '33', '3', '1212', '1717', '0'), +('11', '33', '5', '14560', '6673', '0'), +('11', '33', '5', '14703', '6050', '0'), +('11', '33', '5', '11646', '4482', '0'), +('11', '33', '5', '10216', '3505', '0'), +('11', '33', '8', '11603', '11898', '0'), +('11', '33', '8', '1278', '7083', '0'), +('11', '33', '8', '2349', '3554', '0'), +('11', '33', '8', '1057', '2192', '0'), +('11', '33', '6', '1279', '8819', '0'), +('11', '33', '6', '1557', '5310', '0'), +('11', '33', '6', '1905', '5070', '0'), +('11', '33', '6', '1645', '2525', '0'), +('11', '33', '17', '11641', '11561', '0'), +('11', '33', '17', '1644', '10360', '0'), +('11', '33', '17', '1253', '10128', '0'), +('11', '33', '17', '1233', '9335', '0'), +('11', '33', '7', '1234', '3271', '0'), +('11', '33', '7', '1218', '3235', '0'), +('11', '33', '7', '1648', '2817', '0'), +('11', '33', '7', '1362', '2624', '0'), +('11', '33', '9', '12804', '6753', '0'), +('11', '33', '9', '27712', '4529', '0'), +('11', '33', '9', '1649', '2714', '0'), +('11', '33', '9', '4344', '2051', '0'), +('11', '33', '15', '27713', '7005', '0'), +('11', '33', '15', '20659', '4296', '0'), +('11', '33', '15', '10150', '3004', '0'), +('11', '33', '15', '10163', '2300', '0'), +('11', '33', '20', '11666', '8343', '0'), +('11', '33', '20', '2742', '5146', '0'), +('11', '33', '20', '2467', '2005', '0'), +('11', '33', '20', '1217', '1725', '0'), +('11', '33', '12', '1236', '4719', '0'), +('11', '33', '12', '20655', '3415', '0'), +('11', '33', '12', '2923', '3074', '0'), +('11', '33', '12', '2336', '3005', '0'), +('11', '33', '18', '1651', '2131', '0'), +('11', '33', '18', '4410', '1142', '0'), +('11', '33', '18', '1221', '454', '0'), +('11', '33', '18', '1237', '436', '0'), +('11', '33', '19', '4407', '3648', '0'), +('11', '33', '19', '68239', '3119', '0'), +('11', '33', '19', '1368', '2016', '0'), +('11', '33', '19', '1652', '1834', '0'), +('11', '33', '13', '14759', '7543', '0'), +('11', '33', '13', '11689', '7116', '0'), +('11', '33', '13', '6359', '4839', '0'), +('11', '33', '13', '13400', '4595', '0'), +('11', '33', '14', '14759', '7543', '0'), +('11', '33', '14', '10219', '5681', '0'), +('11', '33', '14', '6359', '4839', '0'), +('11', '33', '14', '10527', '4500', '0'), +('11', '33', '11', '9246', '3998', '0'), +('11', '33', '11', '13169', '2696', '0'), +('11', '33', '11', '14762', '2204', '0'), +('11', '33', '11', '13353', '1500', '0'), +('11', '34', '22', '10323', '0', '0'), +('11', '34', '22', '9246', '0', '0'), +('11', '34', '22', '21509', '0', '0'), +('11', '34', '22', '8007', '0', '0'), +('11', '34', '1', '14702', '3750', '0'), +('11', '34', '1', '14701', '2862', '0'), +('11', '34', '1', '30361', '2640', '0'), +('11', '34', '1', '10082', '2561', '0'), +('11', '34', '2', '1232', '5716', '0'), +('11', '34', '2', '10143', '5368', '0'), +('11', '34', '2', '1211', '4275', '0'), +('11', '34', '2', '10141', '3709', '0'), +('11', '34', '3', '1544', '7705', '0'), +('11', '34', '3', '11052', '6161', '0'), +('11', '34', '3', '4505', '2905', '0'), +('11', '34', '3', '1212', '1729', '0'), +('11', '34', '5', '14560', '6793', '0'), +('11', '34', '5', '14703', '6050', '0'), +('11', '34', '5', '11646', '4639', '0'), +('11', '34', '5', '10216', '3566', '0'), +('11', '34', '8', '11603', '12007', '0'), +('11', '34', '8', '1278', '7145', '0'), +('11', '34', '8', '2349', '3554', '0'), +('11', '34', '8', '1057', '2252', '0'), +('11', '34', '6', '1279', '8880', '0'), +('11', '34', '6', '1557', '5310', '0'), +('11', '34', '6', '1905', '5071', '0'), +('11', '34', '6', '1645', '2561', '0'), +('11', '34', '17', '11641', '11742', '0'), +('11', '34', '17', '1644', '10420', '0'), +('11', '34', '17', '1253', '10130', '0'), +('11', '34', '17', '1233', '9494', '0'), +('11', '34', '7', '1234', '3355', '0'), +('11', '34', '7', '1218', '3319', '0'), +('11', '34', '7', '1648', '2878', '0'), +('11', '34', '7', '1362', '2624', '0'), +('11', '34', '9', '12804', '6753', '0'), +('11', '34', '9', '27712', '4590', '0'), +('11', '34', '9', '1649', '2750', '0'), +('11', '34', '9', '4408', '2087', '0'), +('11', '34', '15', '27713', '7066', '0'), +('11', '34', '15', '20659', '4332', '0'), +('11', '34', '15', '10150', '3004', '0'), +('11', '34', '15', '10163', '2300', '0'), +('11', '34', '20', '11666', '8344', '0'), +('11', '34', '20', '2742', '5149', '0'), +('11', '34', '20', '2467', '2066', '0'), +('11', '34', '20', '1217', '1737', '0'), +('11', '34', '12', '1236', '4816', '0'), +('11', '34', '12', '20655', '3439', '0'), +('11', '34', '12', '2923', '3074', '0'), +('11', '34', '12', '2336', '3066', '0'), +('11', '34', '18', '1651', '2167', '0'), +('11', '34', '18', '4410', '1142', '0'), +('11', '34', '18', '1221', '454', '0'), +('11', '34', '18', '1237', '436', '0'), +('11', '34', '19', '4407', '3757', '0'), +('11', '34', '19', '68239', '3156', '0'), +('11', '34', '19', '1368', '2016', '0'), +('11', '34', '19', '1652', '1834', '0'), +('11', '34', '13', '14759', '7614', '0'), +('11', '34', '13', '11689', '7207', '0'), +('11', '34', '13', '6359', '4960', '0'), +('11', '34', '13', '13400', '4643', '0'), +('11', '34', '14', '14759', '7614', '0'), +('11', '34', '14', '10219', '5681', '0'), +('11', '34', '14', '6359', '4960', '0'), +('11', '34', '14', '10527', '4500', '0'), +('11', '34', '11', '9246', '4119', '0'), +('11', '34', '11', '13169', '2732', '0'), +('11', '34', '11', '14762', '2204', '0'), +('11', '34', '11', '13353', '1500', '0'), +('11', '35', '22', '10323', '0', '0'), +('11', '35', '22', '9246', '0', '0'), +('11', '35', '22', '21509', '0', '0'), +('11', '35', '22', '8007', '0', '0'), +('11', '35', '1', '14702', '3750', '0'), +('11', '35', '1', '14701', '2862', '0'), +('11', '35', '1', '30361', '2640', '0'), +('11', '35', '1', '10082', '2633', '0'), +('11', '35', '2', '1232', '5813', '0'), +('11', '35', '2', '10143', '5368', '0'), +('11', '35', '2', '1211', '4360', '0'), +('11', '35', '2', '10141', '3817', '0'), +('11', '35', '3', '1544', '7765', '0'), +('11', '35', '3', '11052', '6342', '0'), +('11', '35', '3', '4505', '2990', '0'), +('11', '35', '3', '1212', '1741', '0'), +('11', '35', '5', '14560', '6914', '0'), +('11', '35', '5', '14703', '6050', '0'), +('11', '35', '5', '11646', '4796', '0'), +('11', '35', '5', '10216', '3626', '0'), +('11', '35', '8', '11603', '12116', '0'), +('11', '35', '8', '1278', '7207', '0'), +('11', '35', '8', '2349', '3554', '0'), +('11', '35', '8', '1057', '2312', '0'), +('11', '35', '6', '1279', '8940', '0'), +('11', '35', '6', '1557', '5310', '0'), +('11', '35', '6', '1905', '5072', '0'), +('11', '35', '6', '1645', '2597', '0'), +('11', '35', '17', '11641', '11924', '0'), +('11', '35', '17', '1644', '10480', '0'), +('11', '35', '17', '1253', '10133', '0'), +('11', '35', '17', '1233', '9653', '0'), +('11', '35', '7', '1234', '3440', '0'), +('11', '35', '7', '1218', '3404', '0'), +('11', '35', '7', '1648', '2938', '0'), +('11', '35', '7', '1362', '2624', '0'), +('11', '35', '9', '12804', '6753', '0'), +('11', '35', '9', '27712', '4650', '0'), +('11', '35', '9', '1649', '2787', '0'), +('11', '35', '9', '4408', '2147', '0'), +('11', '35', '15', '27713', '7126', '0'), +('11', '35', '15', '20659', '4368', '0'), +('11', '35', '15', '10150', '3004', '0'), +('11', '35', '15', '10163', '2300', '0'), +('11', '35', '20', '11666', '8346', '0'), +('11', '35', '20', '2742', '5151', '0'), +('11', '35', '20', '2467', '2126', '0'), +('11', '35', '20', '1364', '1783', '0'), +('11', '35', '12', '1236', '4913', '0'), +('11', '35', '12', '20655', '3464', '0'), +('11', '35', '12', '2336', '3126', '0'), +('11', '35', '12', '2923', '3074', '0'), +('11', '35', '18', '1651', '2203', '0'), +('11', '35', '18', '4410', '1142', '0'), +('11', '35', '18', '1221', '454', '0'), +('11', '35', '18', '1237', '436', '0'), +('11', '35', '19', '4407', '3865', '0'), +('11', '35', '19', '68239', '3192', '0'), +('11', '35', '19', '1368', '2016', '0'), +('11', '35', '19', '1652', '1834', '0'), +('11', '35', '13', '14759', '7685', '0'), +('11', '35', '13', '11689', '7297', '0'), +('11', '35', '13', '6359', '5081', '0'), +('11', '35', '13', '13400', '4691', '0'), +('11', '35', '14', '14759', '7685', '0'), +('11', '35', '14', '10219', '5681', '0'), +('11', '35', '14', '6359', '5081', '0'), +('11', '35', '14', '10527', '4500', '0'), +('11', '35', '11', '9246', '4240', '0'), +('11', '35', '11', '13169', '2768', '0'), +('11', '35', '11', '14762', '2204', '0'), +('11', '35', '11', '13353', '1500', '0'), +('11', '36', '22', '10323', '0', '0'), +('11', '36', '22', '9246', '0', '0'), +('11', '36', '22', '21509', '0', '0'), +('11', '36', '22', '8007', '0', '0'), +('11', '36', '1', '14702', '3750', '0'), +('11', '36', '1', '14701', '2862', '0'), +('11', '36', '1', '10082', '2706', '0'), +('11', '36', '1', '30361', '2640', '0'), +('11', '36', '2', '1232', '5909', '0'), +('11', '36', '2', '10143', '5368', '0'), +('11', '36', '2', '1211', '4444', '0'), +('11', '36', '2', '10141', '3926', '0'), +('11', '36', '3', '1544', '7826', '0'), +('11', '36', '3', '11052', '6523', '0'), +('11', '36', '3', '4505', '3074', '0'), +('11', '36', '3', '1212', '1753', '0'), +('11', '36', '5', '14560', '7035', '0'), +('11', '36', '5', '14703', '6050', '0'), +('11', '36', '5', '11646', '4953', '0'), +('11', '36', '5', '10216', '3686', '0'), +('11', '36', '8', '11603', '12224', '0'), +('11', '36', '8', '1278', '7269', '0'), +('11', '36', '8', '2349', '3554', '0'), +('11', '36', '8', '1057', '2373', '0'), +('11', '36', '6', '1279', '9000', '0'), +('11', '36', '6', '1557', '5310', '0'), +('11', '36', '6', '1905', '5074', '0'), +('11', '36', '6', '1645', '2634', '0'), +('11', '36', '17', '11641', '12105', '0'), +('11', '36', '17', '1644', '10541', '0'), +('11', '36', '17', '1253', '10135', '0'), +('11', '36', '17', '1233', '9813', '0'), +('11', '36', '7', '1234', '3524', '0'), +('11', '36', '7', '1218', '3488', '0'), +('11', '36', '7', '1648', '2999', '0'), +('11', '36', '7', '1362', '2624', '0'), +('11', '36', '9', '12804', '6753', '0'), +('11', '36', '9', '27712', '4711', '0'), +('11', '36', '9', '1649', '2823', '0'), +('11', '36', '9', '4408', '2208', '0'), +('11', '36', '15', '27713', '7186', '0'), +('11', '36', '15', '20659', '4405', '0'), +('11', '36', '15', '10150', '3004', '0'), +('11', '36', '15', '10163', '2300', '0'), +('11', '36', '20', '11666', '8348', '0'), +('11', '36', '20', '2742', '5153', '0'), +('11', '36', '20', '2467', '2186', '0'), +('11', '36', '20', '1364', '1832', '0'), +('11', '36', '12', '1236', '5009', '0'), +('11', '36', '12', '20655', '3489', '0'), +('11', '36', '12', '2336', '3186', '0'), +('11', '36', '12', '2923', '3074', '0'), +('11', '36', '18', '1651', '2240', '0'), +('11', '36', '18', '4410', '1142', '0'), +('11', '36', '18', '1221', '454', '0'), +('11', '36', '18', '1237', '436', '0'), +('11', '36', '19', '4407', '3974', '0'), +('11', '36', '19', '68239', '3228', '0'), +('11', '36', '19', '1368', '2016', '0'), +('11', '36', '19', '1652', '1834', '0'), +('11', '36', '13', '14759', '7757', '0'), +('11', '36', '13', '11689', '7388', '0'), +('11', '36', '13', '6359', '5202', '0'), +('11', '36', '13', '13500', '4787', '0'), +('11', '36', '14', '14759', '7757', '0'), +('11', '36', '14', '10219', '5681', '0'), +('11', '36', '14', '6359', '5202', '0'), +('11', '36', '14', '10527', '4500', '0'), +('11', '36', '11', '9246', '4361', '0'), +('11', '36', '11', '13169', '2805', '0'), +('11', '36', '11', '14762', '2204', '0'), +('11', '36', '11', '13353', '1500', '0'), +('11', '37', '22', '10323', '0', '0'), +('11', '37', '22', '9246', '0', '0'), +('11', '37', '22', '21509', '0', '0'), +('11', '37', '22', '8007', '0', '0'), +('11', '37', '1', '14702', '3750', '0'), +('11', '37', '1', '14701', '2862', '0'), +('11', '37', '1', '10082', '2778', '0'), +('11', '37', '1', '30361', '2640', '0'), +('11', '37', '2', '1232', '6006', '0'), +('11', '37', '2', '10143', '5368', '0'), +('11', '37', '2', '1211', '4529', '0'), +('11', '37', '2', '10141', '4035', '0'), +('11', '37', '3', '1544', '7886', '0'), +('11', '37', '3', '11052', '6704', '0'), +('11', '37', '3', '4505', '3159', '0'), +('11', '37', '3', '1212', '1765', '0'), +('11', '37', '5', '14560', '7156', '0'), +('11', '37', '5', '14703', '6050', '0'), +('11', '37', '5', '11646', '5110', '0'), +('11', '37', '5', '10216', '3747', '0'), +('11', '37', '8', '11603', '12333', '0'), +('11', '37', '8', '1278', '7331', '0'), +('11', '37', '8', '2349', '3554', '0'), +('11', '37', '8', '1057', '2433', '0'), +('11', '37', '6', '1279', '9061', '0'), +('11', '37', '6', '1557', '5310', '0'), +('11', '37', '6', '1905', '5075', '0'), +('11', '37', '6', '1645', '2670', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '37', '17', '11641', '12286', '0'), +('11', '37', '17', '1644', '10601', '0'), +('11', '37', '17', '1253', '10138', '0'), +('11', '37', '17', '1233', '9972', '0'), +('11', '37', '7', '1234', '3609', '0'), +('11', '37', '7', '1218', '3573', '0'), +('11', '37', '7', '1648', '3059', '0'), +('11', '37', '7', '1362', '2624', '0'), +('11', '37', '9', '12804', '6753', '0'), +('11', '37', '9', '27712', '4771', '0'), +('11', '37', '9', '1649', '2859', '0'), +('11', '37', '9', '4408', '2268', '0'), +('11', '37', '15', '27713', '7247', '0'), +('11', '37', '15', '20659', '4441', '0'), +('11', '37', '15', '10150', '3004', '0'), +('11', '37', '15', '10163', '2300', '0'), +('11', '37', '20', '11666', '8349', '0'), +('11', '37', '20', '2742', '5156', '0'), +('11', '37', '20', '2467', '2247', '0'), +('11', '37', '20', '1364', '1880', '0'), +('11', '37', '12', '1236', '5106', '0'), +('11', '37', '12', '20655', '3513', '0'), +('11', '37', '12', '2336', '3247', '0'), +('11', '37', '12', '2923', '3074', '0'), +('11', '37', '18', '1651', '2276', '0'), +('11', '37', '18', '4410', '1142', '0'), +('11', '37', '18', '1221', '454', '0'), +('11', '37', '18', '1237', '436', '0'), +('11', '37', '19', '4407', '4083', '0'), +('11', '37', '19', '68239', '3264', '0'), +('11', '37', '19', '1368', '2016', '0'), +('11', '37', '19', '1652', '1834', '0'), +('11', '37', '13', '14759', '7828', '0'), +('11', '37', '13', '11689', '7479', '0'), +('11', '37', '13', '6359', '5323', '0'), +('11', '37', '13', '13500', '4908', '0'), +('11', '37', '14', '14759', '7828', '0'), +('11', '37', '14', '10219', '5681', '0'), +('11', '37', '14', '6359', '5323', '0'), +('11', '37', '14', '10527', '4500', '0'), +('11', '37', '11', '9246', '4482', '0'), +('11', '37', '11', '13169', '2841', '0'), +('11', '37', '11', '14762', '2204', '0'), +('11', '37', '11', '13353', '1500', '0'), +('11', '38', '22', '10323', '0', '0'), +('11', '38', '22', '9246', '0', '0'), +('11', '38', '22', '21509', '0', '0'), +('11', '38', '22', '8007', '0', '0'), +('11', '38', '1', '14702', '3750', '0'), +('11', '38', '1', '14701', '2862', '0'), +('11', '38', '1', '10082', '2850', '0'), +('11', '38', '1', '30361', '2640', '0'), +('11', '38', '2', '1232', '6103', '0'), +('11', '38', '2', '10143', '5368', '0'), +('11', '38', '2', '1211', '4613', '0'), +('11', '38', '2', '10141', '4143', '0'), +('11', '38', '3', '1544', '7947', '0'), +('11', '38', '3', '11052', '6886', '0'), +('11', '38', '3', '4505', '3243', '0'), +('11', '38', '3', '1212', '1777', '0'), +('11', '38', '5', '14560', '7277', '0'), +('11', '38', '5', '14703', '6050', '0'), +('11', '38', '5', '11646', '5268', '0'), +('11', '38', '5', '10216', '3807', '0'), +('11', '38', '8', '11603', '12442', '0'), +('11', '38', '8', '1278', '7393', '0'), +('11', '38', '8', '2349', '3554', '0'), +('11', '38', '8', '1057', '2494', '0'), +('11', '38', '6', '1279', '9121', '0'), +('11', '38', '6', '1557', '5310', '0'), +('11', '38', '6', '1905', '5076', '0'), +('11', '38', '6', '1645', '2706', '0'), +('11', '38', '17', '11641', '12467', '0'), +('11', '38', '17', '1644', '10662', '0'), +('11', '38', '17', '1253', '10140', '0'), +('11', '38', '17', '1233', '10132', '0'), +('11', '38', '7', '1234', '3693', '0'), +('11', '38', '7', '1218', '3657', '0'), +('11', '38', '7', '1648', '3119', '0'), +('11', '38', '7', '1362', '2624', '0'), +('11', '38', '9', '12804', '6753', '0'), +('11', '38', '9', '27712', '4831', '0'), +('11', '38', '9', '1649', '2895', '0'), +('11', '38', '9', '4408', '2328', '0'), +('11', '38', '15', '27713', '7307', '0'), +('11', '38', '15', '20659', '4477', '0'), +('11', '38', '15', '10150', '3004', '0'), +('11', '38', '15', '20789', '2348', '0'), +('11', '38', '20', '11666', '8351', '0'), +('11', '38', '20', '2742', '5158', '0'), +('11', '38', '20', '2467', '2307', '0'), +('11', '38', '20', '1364', '1928', '0'), +('11', '38', '12', '1236', '5203', '0'), +('11', '38', '12', '20655', '3538', '0'), +('11', '38', '12', '2336', '3307', '0'), +('11', '38', '12', '2923', '3074', '0'), +('11', '38', '18', '1651', '2312', '0'), +('11', '38', '18', '4410', '1142', '0'), +('11', '38', '18', '1221', '454', '0'), +('11', '38', '18', '1237', '436', '0'), +('11', '38', '19', '4407', '4192', '0'), +('11', '38', '19', '68239', '3301', '0'), +('11', '38', '19', '1368', '2016', '0'), +('11', '38', '19', '1652', '1834', '0'), +('11', '38', '13', '14759', '7899', '0'), +('11', '38', '13', '11689', '7569', '0'), +('11', '38', '13', '6359', '5443', '0'), +('11', '38', '13', '13500', '5028', '0'), +('11', '38', '14', '14759', '7899', '0'), +('11', '38', '14', '10219', '5681', '0'), +('11', '38', '14', '6359', '5443', '0'), +('11', '38', '14', '9246', '4602', '0'), +('11', '38', '11', '9246', '4602', '0'), +('11', '38', '11', '13169', '2877', '0'), +('11', '38', '11', '14762', '2204', '0'), +('11', '38', '11', '13353', '1500', '0'), +('11', '39', '22', '10323', '0', '0'), +('11', '39', '22', '9246', '0', '0'), +('11', '39', '22', '21509', '0', '0'), +('11', '39', '22', '8007', '0', '0'), +('11', '39', '1', '14702', '3750', '0'), +('11', '39', '1', '10082', '2923', '0'), +('11', '39', '1', '14701', '2862', '0'), +('11', '39', '1', '30361', '2640', '0'), +('11', '39', '2', '1232', '6199', '0'), +('11', '39', '2', '10143', '5368', '0'), +('11', '39', '2', '1211', '4698', '0'), +('11', '39', '2', '10141', '4252', '0'), +('11', '39', '3', '1544', '8007', '0'), +('11', '39', '3', '11052', '7067', '0'), +('11', '39', '3', '4505', '3328', '0'), +('11', '39', '3', '1212', '1789', '0'), +('11', '39', '5', '14560', '7397', '0'), +('11', '39', '5', '14703', '6050', '0'), +('11', '39', '5', '11646', '5425', '0'), +('11', '39', '5', '10216', '3868', '0'), +('11', '39', '8', '11603', '12550', '0'), +('11', '39', '8', '1278', '7454', '0'), +('11', '39', '8', '2349', '3554', '0'), +('11', '39', '8', '1057', '2554', '0'), +('11', '39', '6', '1279', '9182', '0'), +('11', '39', '6', '1557', '5310', '0'), +('11', '39', '6', '1905', '5077', '0'), +('11', '39', '6', '1645', '2742', '0'), +('11', '39', '17', '11641', '12648', '0'), +('11', '39', '17', '1644', '10722', '0'), +('11', '39', '17', '1233', '10291', '0'), +('11', '39', '17', '1253', '10143', '0'), +('11', '39', '7', '1234', '3778', '0'), +('11', '39', '7', '1218', '3742', '0'), +('11', '39', '7', '1648', '3180', '0'), +('11', '39', '7', '1362', '2624', '0'), +('11', '39', '9', '12804', '6753', '0'), +('11', '39', '9', '27712', '4892', '0'), +('11', '39', '9', '1649', '2931', '0'), +('11', '39', '9', '4408', '2389', '0'), +('11', '39', '15', '27713', '7368', '0'), +('11', '39', '15', '20659', '4513', '0'), +('11', '39', '15', '10150', '3004', '0'), +('11', '39', '15', '20789', '2397', '0'), +('11', '39', '20', '11666', '8353', '0'), +('11', '39', '20', '2742', '5161', '0'), +('11', '39', '20', '2467', '2368', '0'), +('11', '39', '20', '1364', '1977', '0'), +('11', '39', '12', '1236', '5299', '0'), +('11', '39', '12', '20655', '3563', '0'), +('11', '39', '12', '2336', '3368', '0'), +('11', '39', '12', '2923', '3074', '0'), +('11', '39', '18', '1651', '2348', '0'), +('11', '39', '18', '4410', '1142', '0'), +('11', '39', '18', '1221', '454', '0'), +('11', '39', '18', '1237', '436', '0'), +('11', '39', '19', '4407', '4300', '0'), +('11', '39', '19', '68239', '3337', '0'), +('11', '39', '19', '1368', '2016', '0'), +('11', '39', '19', '1652', '1834', '0'), +('11', '39', '13', '14759', '7971', '0'), +('11', '39', '13', '11689', '7660', '0'), +('11', '39', '13', '6359', '5564', '0'), +('11', '39', '13', '13500', '5149', '0'), +('11', '39', '14', '14759', '7971', '0'), +('11', '39', '14', '10219', '5681', '0'), +('11', '39', '14', '6359', '5564', '0'), +('11', '39', '14', '9246', '4723', '0'), +('11', '39', '11', '9246', '4723', '0'), +('11', '39', '11', '13169', '2913', '0'), +('11', '39', '11', '14762', '2204', '0'), +('11', '39', '11', '13353', '1500', '0'), +('11', '40', '22', '10323', '0', '0'), +('11', '40', '22', '9246', '0', '0'), +('11', '40', '22', '21509', '0', '0'), +('11', '40', '22', '8007', '0', '0'), +('11', '40', '1', '14702', '3750', '0'), +('11', '40', '1', '10082', '2995', '0'), +('11', '40', '1', '14701', '2862', '0'), +('11', '40', '1', '30361', '2640', '0'), +('11', '40', '2', '1232', '6296', '0'), +('11', '40', '2', '10143', '5368', '0'), +('11', '40', '2', '1211', '4783', '0'), +('11', '40', '2', '10141', '4361', '0'), +('11', '40', '3', '1544', '8067', '0'), +('11', '40', '3', '11052', '7248', '0'), +('11', '40', '3', '4505', '3413', '0'), +('11', '40', '3', '1212', '1801', '0'), +('11', '40', '5', '14560', '7518', '0'), +('11', '40', '5', '14703', '6050', '0'), +('11', '40', '5', '11646', '5582', '0'), +('11', '40', '5', '10216', '3928', '0'), +('11', '40', '8', '11603', '12659', '0'), +('11', '40', '8', '1278', '7516', '0'), +('11', '40', '8', '2349', '3554', '0'), +('11', '40', '8', '1057', '2614', '0'), +('11', '40', '6', '1279', '9242', '0'), +('11', '40', '6', '1557', '5310', '0'), +('11', '40', '6', '1905', '5079', '0'), +('11', '40', '6', '1645', '2779', '0'), +('11', '40', '17', '11641', '12830', '0'), +('11', '40', '17', '1644', '10782', '0'), +('11', '40', '17', '1233', '10451', '0'), +('11', '40', '17', '1253', '10145', '0'), +('11', '40', '7', '1234', '3863', '0'), +('11', '40', '7', '1218', '3827', '0'), +('11', '40', '7', '1648', '3240', '0'), +('11', '40', '7', '1362', '2624', '0'), +('11', '40', '9', '12804', '6753', '0'), +('11', '40', '9', '27712', '4952', '0'), +('11', '40', '9', '1649', '2968', '0'), +('11', '40', '9', '4408', '2449', '0'), +('11', '40', '15', '27713', '7428', '0'), +('11', '40', '15', '20659', '4550', '0'), +('11', '40', '15', '10150', '3004', '0'), +('11', '40', '15', '20789', '2445', '0'), +('11', '40', '20', '11666', '8354', '0'), +('11', '40', '20', '2742', '5163', '0'), +('11', '40', '20', '2467', '2428', '0'), +('11', '40', '20', '1364', '2025', '0'), +('11', '40', '12', '1236', '5396', '0'), +('11', '40', '12', '20655', '3587', '0'), +('11', '40', '12', '2336', '3428', '0'), +('11', '40', '12', '2923', '3074', '0'), +('11', '40', '18', '1651', '2385', '0'), +('11', '40', '18', '4410', '1142', '0'), +('11', '40', '18', '1221', '454', '0'), +('11', '40', '18', '1237', '436', '0'), +('11', '40', '19', '4407', '4409', '0'), +('11', '40', '19', '68239', '3373', '0'), +('11', '40', '19', '1368', '2016', '0'), +('11', '40', '19', '1652', '1834', '0'), +('11', '40', '13', '14759', '8042', '0'), +('11', '40', '13', '11689', '7750', '0'), +('11', '40', '13', '6359', '5685', '0'), +('11', '40', '13', '13500', '5270', '0'), +('11', '40', '14', '14759', '8042', '0'), +('11', '40', '14', '6359', '5685', '0'), +('11', '40', '14', '10219', '5681', '0'), +('11', '40', '14', '9246', '4844', '0'), +('11', '40', '11', '9246', '4844', '0'), +('11', '40', '11', '13169', '2950', '0'), +('11', '40', '11', '14762', '2204', '0'), +('11', '40', '11', '13353', '1500', '0'), +('11', '41', '22', '10323', '0', '0'), +('11', '41', '22', '9246', '0', '0'), +('11', '41', '22', '21509', '0', '0'), +('11', '41', '22', '8007', '0', '0'), +('11', '41', '1', '14702', '3750', '0'), +('11', '41', '1', '10082', '3068', '0'), +('11', '41', '1', '14701', '2862', '0'), +('11', '41', '1', '30361', '2640', '0'), +('11', '41', '2', '1232', '6392', '0'), +('11', '41', '2', '10143', '5368', '0'), +('11', '41', '2', '1211', '4867', '0'), +('11', '41', '2', '10141', '4470', '0'), +('11', '41', '3', '1544', '8128', '0'), +('11', '41', '3', '11052', '7429', '0'), +('11', '41', '3', '4505', '3497', '0'), +('11', '41', '3', '1212', '1813', '0'), +('11', '41', '5', '14560', '7639', '0'), +('11', '41', '5', '14703', '6050', '0'), +('11', '41', '5', '11646', '5739', '0'), +('11', '41', '5', '10216', '3988', '0'), +('11', '41', '8', '11603', '12768', '0'), +('11', '41', '8', '1278', '7578', '0'), +('11', '41', '8', '2349', '3554', '0'), +('11', '41', '8', '1057', '2675', '0'), +('11', '41', '6', '1279', '9302', '0'), +('11', '41', '6', '1557', '5310', '0'), +('11', '41', '6', '1905', '5080', '0'), +('11', '41', '6', '1645', '2815', '0'), +('11', '41', '17', '11641', '13011', '0'), +('11', '41', '17', '1644', '10843', '0'), +('11', '41', '17', '1233', '10610', '0'), +('11', '41', '17', '1253', '10147', '0'), +('11', '41', '7', '1234', '3947', '0'), +('11', '41', '7', '1218', '3911', '0'), +('11', '41', '7', '1648', '3301', '0'), +('11', '41', '7', '1362', '2624', '0'), +('11', '41', '9', '12804', '6753', '0'), +('11', '41', '9', '27712', '5013', '0'), +('11', '41', '9', '1649', '3004', '0'), +('11', '41', '9', '4408', '2510', '0'), +('11', '41', '15', '27713', '7488', '0'), +('11', '41', '15', '20659', '4586', '0'), +('11', '41', '15', '10150', '3004', '0'), +('11', '41', '15', '20789', '2493', '0'), +('11', '41', '20', '11666', '8356', '0'), +('11', '41', '20', '2742', '5165', '0'), +('11', '41', '20', '2467', '2488', '0'), +('11', '41', '20', '1364', '2073', '0'), +('11', '41', '12', '1236', '5492', '0'), +('11', '41', '12', '20655', '3612', '0'), +('11', '41', '12', '2336', '3488', '0'), +('11', '41', '12', '2923', '3074', '0'), +('11', '41', '18', '1651', '2421', '0'), +('11', '41', '18', '4410', '1142', '0'), +('11', '41', '18', '1221', '454', '0'), +('11', '41', '18', '1237', '436', '0'), +('11', '41', '19', '4407', '4518', '0'), +('11', '41', '19', '68239', '3409', '0'), +('11', '41', '19', '1368', '2016', '0'), +('11', '41', '19', '1652', '1834', '0'), +('11', '41', '13', '14759', '8113', '0'), +('11', '41', '13', '11689', '7841', '0'), +('11', '41', '13', '6359', '5806', '0'), +('11', '41', '13', '13500', '5391', '0'), +('11', '41', '14', '14759', '8113', '0'), +('11', '41', '14', '6359', '5806', '0'), +('11', '41', '14', '10219', '5681', '0'), +('11', '41', '14', '9246', '4965', '0'), +('11', '41', '11', '9246', '4965', '0'), +('11', '41', '11', '13169', '2986', '0'), +('11', '41', '11', '14762', '2204', '0'), +('11', '41', '11', '13353', '1500', '0'), +('11', '42', '22', '10323', '0', '0'), +('11', '42', '22', '9246', '0', '0'), +('11', '42', '22', '21509', '0', '0'), +('11', '42', '22', '8007', '0', '0'), +('11', '42', '1', '14702', '3750', '0'), +('11', '42', '1', '10082', '3140', '0'), +('11', '42', '1', '14701', '2862', '0'), +('11', '42', '1', '30361', '2640', '0'), +('11', '42', '2', '1232', '6489', '0'), +('11', '42', '2', '10143', '5368', '0'), +('11', '42', '2', '1211', '4952', '0'), +('11', '42', '2', '10141', '4578', '0'), +('11', '42', '3', '1544', '8188', '0'), +('11', '42', '3', '11052', '7610', '0'), +('11', '42', '3', '4505', '3582', '0'), +('11', '42', '3', '1212', '1825', '0'), +('11', '42', '5', '14560', '7760', '0'), +('11', '42', '5', '14703', '6050', '0'), +('11', '42', '5', '11646', '5896', '0'), +('11', '42', '5', '10216', '4049', '0'), +('11', '42', '8', '11603', '12877', '0'), +('11', '42', '8', '1278', '7640', '0'), +('11', '42', '8', '2349', '3554', '0'), +('11', '42', '8', '1057', '2735', '0'), +('11', '42', '6', '1279', '9363', '0'), +('11', '42', '6', '1557', '5310', '0'), +('11', '42', '6', '1905', '5081', '0'), +('11', '42', '6', '1645', '2851', '0'), +('11', '42', '17', '11641', '13192', '0'), +('11', '42', '17', '1644', '10903', '0'), +('11', '42', '17', '1233', '10770', '0'), +('11', '42', '17', '1214', '10299', '0'), +('11', '42', '7', '1234', '4032', '0'), +('11', '42', '7', '1218', '3996', '0'), +('11', '42', '7', '1648', '3361', '0'), +('11', '42', '7', '1362', '2624', '0'), +('11', '42', '9', '12804', '6753', '0'), +('11', '42', '9', '27712', '5073', '0'), +('11', '42', '9', '1649', '3040', '0'), +('11', '42', '9', '4408', '2570', '0'), +('11', '42', '15', '27713', '7549', '0'), +('11', '42', '15', '20659', '4622', '0'), +('11', '42', '15', '10150', '3004', '0'), +('11', '42', '15', '20789', '2542', '0'), +('11', '42', '20', '11666', '8358', '0'), +('11', '42', '20', '2742', '5168', '0'), +('11', '42', '20', '2467', '2549', '0'), +('11', '42', '20', '1364', '2122', '0'), +('11', '42', '12', '1236', '5589', '0'), +('11', '42', '12', '20655', '3636', '0'), +('11', '42', '12', '2336', '3549', '0'), +('11', '42', '12', '2923', '3074', '0'), +('11', '42', '18', '1651', '2457', '0'), +('11', '42', '18', '4410', '1142', '0'), +('11', '42', '18', '1221', '454', '0'), +('11', '42', '18', '1237', '436', '0'), +('11', '42', '19', '4407', '4626', '0'), +('11', '42', '19', '68239', '3446', '0'), +('11', '42', '19', '1368', '2016', '0'), +('11', '42', '19', '1652', '1834', '0'), +('11', '42', '13', '14759', '8184', '0'), +('11', '42', '13', '11689', '7932', '0'), +('11', '42', '13', '6359', '5927', '0'), +('11', '42', '13', '13500', '5512', '0'), +('11', '42', '14', '14759', '8184', '0'), +('11', '42', '14', '6359', '5927', '0'), +('11', '42', '14', '10219', '5681', '0'), +('11', '42', '14', '9246', '5086', '0'), +('11', '42', '11', '9246', '5086', '0'), +('11', '42', '11', '13169', '3022', '0'), +('11', '42', '11', '14762', '2204', '0'), +('11', '42', '11', '13353', '1500', '0'), +('11', '43', '22', '10323', '0', '0'), +('11', '43', '22', '9246', '0', '0'), +('11', '43', '22', '21509', '0', '0'), +('11', '43', '22', '8007', '0', '0'), +('11', '43', '1', '14702', '3750', '0'), +('11', '43', '1', '10082', '3213', '0'), +('11', '43', '1', '14701', '2862', '0'), +('11', '43', '1', '30361', '2640', '0'), +('11', '43', '2', '1232', '6586', '0'), +('11', '43', '2', '10143', '5368', '0'), +('11', '43', '2', '1211', '5036', '0'), +('11', '43', '2', '10141', '4687', '0'), +('11', '43', '3', '1544', '8249', '0'), +('11', '43', '3', '11052', '7792', '0'), +('11', '43', '3', '4505', '3666', '0'), +('11', '43', '3', '1212', '1838', '0'), +('11', '43', '5', '14560', '7881', '0'), +('11', '43', '5', '11646', '6053', '0'), +('11', '43', '5', '14703', '6050', '0'), +('11', '43', '5', '10216', '4109', '0'), +('11', '43', '8', '11603', '12985', '0'), +('11', '43', '8', '1278', '7702', '0'), +('11', '43', '8', '2349', '3554', '0'), +('11', '43', '8', '1057', '2796', '0'), +('11', '43', '6', '1279', '9423', '0'), +('11', '43', '6', '1557', '5310', '0'), +('11', '43', '6', '1905', '5082', '0'), +('11', '43', '6', '1645', '2887', '0'), +('11', '43', '17', '11641', '13373', '0'), +('11', '43', '17', '1644', '10964', '0'), +('11', '43', '17', '1233', '10929', '0'), +('11', '43', '17', '1214', '10460', '0'), +('11', '43', '7', '1234', '4116', '0'), +('11', '43', '7', '1218', '4080', '0'), +('11', '43', '7', '1648', '3421', '0'), +('11', '43', '7', '1362', '2624', '0'), +('11', '43', '9', '12804', '6753', '0'), +('11', '43', '9', '27712', '5133', '0'), +('11', '43', '9', '1649', '3076', '0'), +('11', '43', '9', '4408', '2630', '0'), +('11', '43', '15', '27713', '7609', '0'), +('11', '43', '15', '20659', '4658', '0'), +('11', '43', '15', '10150', '3004', '0'), +('11', '43', '15', '20789', '2590', '0'), +('11', '43', '20', '11666', '8360', '0'), +('11', '43', '20', '2742', '5170', '0'), +('11', '43', '20', '2467', '2609', '0'), +('11', '43', '20', '1364', '2170', '0'), +('11', '43', '12', '1236', '5686', '0'), +('11', '43', '12', '20655', '3661', '0'), +('11', '43', '12', '2336', '3609', '0'), +('11', '43', '12', '2923', '3074', '0'), +('11', '43', '18', '1651', '2493', '0'), +('11', '43', '18', '4410', '1142', '0'), +('11', '43', '18', '1221', '454', '0'), +('11', '43', '18', '1237', '436', '0'), +('11', '43', '19', '4407', '4735', '0'), +('11', '43', '19', '68239', '3482', '0'), +('11', '43', '19', '1368', '2016', '0'), +('11', '43', '19', '1652', '1834', '0'), +('11', '43', '13', '14759', '8256', '0'), +('11', '43', '13', '11689', '8022', '0'), +('11', '43', '13', '6359', '6047', '0'), +('11', '43', '13', '13500', '5632', '0'), +('11', '43', '14', '14759', '8256', '0'), +('11', '43', '14', '6359', '6047', '0'), +('11', '43', '14', '10219', '5681', '0'), +('11', '43', '14', '9246', '5206', '0'), +('11', '43', '11', '9246', '5206', '0'), +('11', '43', '11', '13169', '3058', '0'), +('11', '43', '11', '14762', '2204', '0'), +('11', '43', '11', '13353', '1500', '0'), +('11', '44', '22', '10323', '0', '0'), +('11', '44', '22', '9246', '0', '0'), +('11', '44', '22', '21509', '0', '0'), +('11', '44', '22', '8007', '0', '0'), +('11', '44', '1', '14702', '3750', '0'), +('11', '44', '1', '10082', '3285', '0'), +('11', '44', '1', '14701', '2862', '0'), +('11', '44', '1', '10107', '2658', '0'), +('11', '44', '2', '1232', '6682', '0'), +('11', '44', '2', '10143', '5368', '0'), +('11', '44', '2', '1211', '5121', '0'), +('11', '44', '2', '10141', '4796', '0'), +('11', '44', '3', '1544', '8309', '0'), +('11', '44', '3', '11052', '7973', '0'), +('11', '44', '3', '4505', '3751', '0'), +('11', '44', '3', '1212', '1850', '0'), +('11', '44', '5', '14560', '8001', '0'), +('11', '44', '5', '11646', '6210', '0'), +('11', '44', '5', '14703', '6050', '0'), +('11', '44', '5', '10216', '4170', '0'), +('11', '44', '8', '11603', '13094', '0'), +('11', '44', '8', '1278', '7764', '0'), +('11', '44', '8', '2349', '3554', '0'), +('11', '44', '8', '1057', '2856', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '44', '6', '1279', '9484', '0'), +('11', '44', '6', '1557', '5310', '0'), +('11', '44', '6', '1905', '5083', '0'), +('11', '44', '6', '1645', '2924', '0'), +('11', '44', '17', '11641', '13554', '0'), +('11', '44', '17', '1233', '11089', '0'), +('11', '44', '17', '1644', '11024', '0'), +('11', '44', '17', '1214', '10620', '0'), +('11', '44', '7', '1234', '4201', '0'), +('11', '44', '7', '1218', '4165', '0'), +('11', '44', '7', '1648', '3482', '0'), +('11', '44', '7', '1362', '2624', '0'), +('11', '44', '9', '12804', '6753', '0'), +('11', '44', '9', '27712', '5194', '0'), +('11', '44', '9', '1649', '3113', '0'), +('11', '44', '9', '4408', '2691', '0'), +('11', '44', '15', '27713', '7670', '0'), +('11', '44', '15', '20659', '4695', '0'), +('11', '44', '15', '10150', '3004', '0'), +('11', '44', '15', '20789', '2638', '0'), +('11', '44', '20', '11666', '8361', '0'), +('11', '44', '20', '2742', '5173', '0'), +('11', '44', '20', '2467', '2670', '0'), +('11', '44', '20', '1364', '2218', '0'), +('11', '44', '12', '1236', '5782', '0'), +('11', '44', '12', '20655', '3686', '0'), +('11', '44', '12', '2336', '3670', '0'), +('11', '44', '12', '2923', '3074', '0'), +('11', '44', '18', '1651', '2530', '0'), +('11', '44', '18', '4410', '1142', '0'), +('11', '44', '18', '1221', '454', '0'), +('11', '44', '18', '1237', '436', '0'), +('11', '44', '19', '4407', '4844', '0'), +('11', '44', '19', '68239', '3518', '0'), +('11', '44', '19', '1368', '2016', '0'), +('11', '44', '19', '1652', '1834', '0'), +('11', '44', '13', '14759', '8327', '0'), +('11', '44', '13', '11689', '8113', '0'), +('11', '44', '13', '6359', '6168', '0'), +('11', '44', '13', '13500', '5753', '0'), +('11', '44', '14', '14759', '8327', '0'), +('11', '44', '14', '6359', '6168', '0'), +('11', '44', '14', '10219', '5681', '0'), +('11', '44', '14', '9246', '5327', '0'), +('11', '44', '11', '9246', '5327', '0'), +('11', '44', '11', '13169', '3095', '0'), +('11', '44', '11', '14762', '2204', '0'), +('11', '44', '11', '13353', '1500', '0'), +('11', '45', '22', '10323', '0', '0'), +('11', '45', '22', '9246', '0', '0'), +('11', '45', '22', '21509', '0', '0'), +('11', '45', '22', '8007', '0', '0'), +('11', '45', '1', '14702', '3750', '0'), +('11', '45', '1', '10082', '3358', '0'), +('11', '45', '1', '14701', '2862', '0'), +('11', '45', '1', '10107', '2718', '0'), +('11', '45', '2', '1232', '6779', '0'), +('11', '45', '2', '10143', '5368', '0'), +('11', '45', '2', '1211', '5205', '0'), +('11', '45', '2', '10141', '4904', '0'), +('11', '45', '3', '1544', '8369', '0'), +('11', '45', '3', '11052', '8154', '0'), +('11', '45', '3', '4505', '3835', '0'), +('11', '45', '3', '1212', '1862', '0'), +('11', '45', '5', '14560', '8122', '0'), +('11', '45', '5', '11646', '6367', '0'), +('11', '45', '5', '14703', '6050', '0'), +('11', '45', '5', '10216', '4230', '0'), +('11', '45', '8', '11603', '13203', '0'), +('11', '45', '8', '1278', '7826', '0'), +('11', '45', '8', '2349', '3554', '0'), +('11', '45', '8', '1057', '2916', '0'), +('11', '45', '6', '1279', '9544', '0'), +('11', '45', '6', '1557', '5310', '0'), +('11', '45', '6', '1905', '5085', '0'), +('11', '45', '6', '1645', '2960', '0'), +('11', '45', '17', '11641', '13736', '0'), +('11', '45', '17', '1233', '11248', '0'), +('11', '45', '17', '1644', '11084', '0'), +('11', '45', '17', '1214', '10780', '0'), +('11', '45', '7', '1234', '4285', '0'), +('11', '45', '7', '1218', '4249', '0'), +('11', '45', '7', '1648', '3542', '0'), +('11', '45', '7', '1362', '2624', '0'), +('11', '45', '9', '12804', '6753', '0'), +('11', '45', '9', '27712', '5254', '0'), +('11', '45', '9', '1649', '3149', '0'), +('11', '45', '9', '4408', '2751', '0'), +('11', '45', '15', '27713', '7730', '0'), +('11', '45', '15', '20659', '4731', '0'), +('11', '45', '15', '10150', '3004', '0'), +('11', '45', '15', '20789', '2686', '0'), +('11', '45', '20', '11666', '8363', '0'), +('11', '45', '20', '2742', '5175', '0'), +('11', '45', '20', '2467', '2730', '0'), +('11', '45', '20', '1364', '2266', '0'), +('11', '45', '12', '1236', '5879', '0'), +('11', '45', '12', '2336', '3730', '0'), +('11', '45', '12', '20655', '3710', '0'), +('11', '45', '12', '1650', '3103', '0'), +('11', '45', '18', '1651', '2566', '0'), +('11', '45', '18', '4410', '1142', '0'), +('11', '45', '18', '1221', '454', '0'), +('11', '45', '18', '1237', '436', '0'), +('11', '45', '19', '4407', '4953', '0'), +('11', '45', '19', '68239', '3554', '0'), +('11', '45', '19', '1368', '2016', '0'), +('11', '45', '19', '1652', '1834', '0'), +('11', '45', '13', '14759', '8398', '0'), +('11', '45', '13', '11689', '8203', '0'), +('11', '45', '13', '6359', '6289', '0'), +('11', '45', '13', '13500', '5874', '0'), +('11', '45', '14', '14759', '8398', '0'), +('11', '45', '14', '6359', '6289', '0'), +('11', '45', '14', '10219', '5681', '0'), +('11', '45', '14', '9246', '5448', '0'), +('11', '45', '11', '9246', '5448', '0'), +('11', '45', '11', '13169', '3131', '0'), +('11', '45', '11', '14762', '2204', '0'), +('11', '45', '11', '13353', '1500', '0'), +('11', '46', '22', '10323', '0', '0'), +('11', '46', '22', '9246', '0', '0'), +('11', '46', '22', '21509', '0', '0'), +('11', '46', '22', '8007', '0', '0'), +('11', '46', '1', '14702', '3750', '0'), +('11', '46', '1', '10082', '3430', '0'), +('11', '46', '1', '14701', '2862', '0'), +('11', '46', '1', '10107', '2778', '0'), +('11', '46', '2', '1232', '6876', '0'), +('11', '46', '2', '10143', '5368', '0'), +('11', '46', '2', '1211', '5290', '0'), +('11', '46', '2', '10141', '5013', '0'), +('11', '46', '3', '1544', '8430', '0'), +('11', '46', '3', '11052', '8335', '0'), +('11', '46', '3', '4505', '3920', '0'), +('11', '46', '3', '1212', '1874', '0'), +('11', '46', '5', '14560', '8243', '0'), +('11', '46', '5', '11646', '6524', '0'), +('11', '46', '5', '14703', '6050', '0'), +('11', '46', '5', '10216', '4290', '0'), +('11', '46', '8', '11603', '13312', '0'), +('11', '46', '8', '1278', '7887', '0'), +('11', '46', '8', '2349', '3554', '0'), +('11', '46', '8', '1057', '2977', '0'), +('11', '46', '6', '1279', '9604', '0'), +('11', '46', '6', '1557', '5310', '0'), +('11', '46', '6', '1905', '5086', '0'), +('11', '46', '6', '1645', '2996', '0'), +('11', '46', '17', '11641', '13917', '0'), +('11', '46', '17', '1233', '11407', '0'), +('11', '46', '17', '1644', '11145', '0'), +('11', '46', '17', '1214', '10940', '0'), +('11', '46', '7', '1234', '4370', '0'), +('11', '46', '7', '1218', '4334', '0'), +('11', '46', '7', '1648', '3603', '0'), +('11', '46', '7', '1362', '2624', '0'), +('11', '46', '9', '12804', '6753', '0'), +('11', '46', '9', '27712', '5315', '0'), +('11', '46', '9', '1649', '3185', '0'), +('11', '46', '9', '4408', '2812', '0'), +('11', '46', '15', '27713', '7790', '0'), +('11', '46', '15', '20659', '4767', '0'), +('11', '46', '15', '10150', '3004', '0'), +('11', '46', '15', '20789', '2735', '0'), +('11', '46', '20', '11666', '8365', '0'), +('11', '46', '20', '2742', '5178', '0'), +('11', '46', '20', '2467', '2790', '0'), +('11', '46', '20', '1364', '2315', '0'), +('11', '46', '12', '1236', '5976', '0'), +('11', '46', '12', '2336', '3790', '0'), +('11', '46', '12', '20655', '3735', '0'), +('11', '46', '12', '1650', '3152', '0'), +('11', '46', '18', '1651', '2602', '0'), +('11', '46', '18', '4410', '1142', '0'), +('11', '46', '18', '1221', '454', '0'), +('11', '46', '18', '1237', '436', '0'), +('11', '46', '19', '4407', '5061', '0'), +('11', '46', '19', '68239', '3590', '0'), +('11', '46', '19', '1368', '2016', '0'), +('11', '46', '19', '1652', '1834', '0'), +('11', '46', '13', '14759', '8469', '0'), +('11', '46', '13', '11689', '8294', '0'), +('11', '46', '13', '6359', '6410', '0'), +('11', '46', '13', '13500', '5995', '0'), +('11', '46', '14', '14759', '8469', '0'), +('11', '46', '14', '6359', '6410', '0'), +('11', '46', '14', '10219', '5681', '0'), +('11', '46', '14', '9246', '5569', '0'), +('11', '46', '11', '9246', '5569', '0'), +('11', '46', '11', '13169', '3167', '0'), +('11', '46', '11', '14762', '2204', '0'), +('11', '46', '11', '13353', '1500', '0'), +('11', '47', '22', '10323', '0', '0'), +('11', '47', '22', '9246', '0', '0'), +('11', '47', '22', '21509', '0', '0'), +('11', '47', '22', '8007', '0', '0'), +('11', '47', '1', '14702', '3750', '0'), +('11', '47', '1', '10082', '3503', '0'), +('11', '47', '1', '14701', '2862', '0'), +('11', '47', '1', '10107', '2839', '0'), +('11', '47', '2', '1232', '6972', '0'), +('11', '47', '2', '1211', '5375', '0'), +('11', '47', '2', '10143', '5368', '0'), +('11', '47', '2', '10141', '5122', '0'), +('11', '47', '3', '11052', '8516', '0'), +('11', '47', '3', '1544', '8490', '0'), +('11', '47', '3', '4505', '4005', '0'), +('11', '47', '3', '1212', '1886', '0'), +('11', '47', '5', '14560', '8364', '0'), +('11', '47', '5', '11646', '6681', '0'), +('11', '47', '5', '14703', '6050', '0'), +('11', '47', '5', '10216', '4351', '0'), +('11', '47', '8', '11603', '13420', '0'), +('11', '47', '8', '1278', '7949', '0'), +('11', '47', '8', '2349', '3554', '0'), +('11', '47', '8', '1057', '3037', '0'), +('11', '47', '6', '1279', '9665', '0'), +('11', '47', '6', '1557', '5310', '0'), +('11', '47', '6', '1905', '5087', '0'), +('11', '47', '6', '1645', '3032', '0'), +('11', '47', '17', '11641', '14098', '0'), +('11', '47', '17', '1233', '11567', '0'), +('11', '47', '17', '1644', '11205', '0'), +('11', '47', '17', '1214', '11100', '0'), +('11', '47', '7', '1234', '4455', '0'), +('11', '47', '7', '1218', '4418', '0'), +('11', '47', '7', '1648', '3663', '0'), +('11', '47', '7', '1362', '2624', '0'), +('11', '47', '9', '12804', '6753', '0'), +('11', '47', '9', '27712', '5375', '0'), +('11', '47', '9', '1649', '3221', '0'), +('11', '47', '9', '4408', '2872', '0'), +('11', '47', '15', '27713', '7851', '0'), +('11', '47', '15', '20659', '4803', '0'), +('11', '47', '15', '10150', '3004', '0'), +('11', '47', '15', '20789', '2783', '0'), +('11', '47', '20', '11666', '8366', '0'), +('11', '47', '20', '2742', '5180', '0'), +('11', '47', '20', '2467', '2851', '0'), +('11', '47', '20', '1364', '2363', '0'), +('11', '47', '12', '1236', '6072', '0'), +('11', '47', '12', '2336', '3851', '0'), +('11', '47', '12', '20655', '3760', '0'), +('11', '47', '12', '4345', '3211', '0'), +('11', '47', '18', '1651', '2638', '0'), +('11', '47', '18', '4410', '1142', '0'), +('11', '47', '18', '1221', '454', '0'), +('11', '47', '18', '1237', '436', '0'), +('11', '47', '19', '4407', '5170', '0'), +('11', '47', '19', '68239', '3627', '0'), +('11', '47', '19', '1368', '2016', '0'), +('11', '47', '19', '1652', '1834', '0'), +('11', '47', '13', '14759', '8541', '0'), +('11', '47', '13', '11689', '8385', '0'), +('11', '47', '13', '6359', '6531', '0'), +('11', '47', '13', '13500', '6116', '0'), +('11', '47', '14', '14759', '8541', '0'), +('11', '47', '14', '6359', '6531', '0'), +('11', '47', '14', '9246', '5690', '0'), +('11', '47', '14', '10219', '5681', '0'), +('11', '47', '11', '9246', '5690', '0'), +('11', '47', '11', '13169', '3203', '0'), +('11', '47', '11', '14762', '2204', '0'), +('11', '47', '11', '13353', '1500', '0'), +('11', '48', '22', '10323', '0', '0'), +('11', '48', '22', '9246', '0', '0'), +('11', '48', '22', '21509', '0', '0'), +('11', '48', '22', '8007', '0', '0'), +('11', '48', '1', '14702', '3750', '0'), +('11', '48', '1', '10082', '3575', '0'), +('11', '48', '1', '10107', '2899', '0'), +('11', '48', '1', '14701', '2862', '0'), +('11', '48', '2', '1232', '7069', '0'), +('11', '48', '2', '1211', '5459', '0'), +('11', '48', '2', '10143', '5368', '0'), +('11', '48', '2', '10141', '5231', '0'), +('11', '48', '3', '11052', '8698', '0'), +('11', '48', '3', '1544', '8551', '0'), +('11', '48', '3', '4505', '4089', '0'), +('11', '48', '3', '1212', '1898', '0'), +('11', '48', '5', '14560', '8485', '0'), +('11', '48', '5', '11646', '6838', '0'), +('11', '48', '5', '14703', '6050', '0'), +('11', '48', '5', '10216', '4411', '0'), +('11', '48', '8', '11603', '13529', '0'), +('11', '48', '8', '1278', '8011', '0'), +('11', '48', '8', '2349', '3554', '0'), +('11', '48', '8', '1057', '3098', '0'), +('11', '48', '6', '1279', '9725', '0'), +('11', '48', '6', '1557', '5310', '0'), +('11', '48', '6', '1905', '5088', '0'), +('11', '48', '6', '1645', '3069', '0'), +('11', '48', '17', '11641', '14279', '0'), +('11', '48', '17', '1233', '11726', '0'), +('11', '48', '17', '1644', '11266', '0'), +('11', '48', '17', '1214', '11261', '0'), +('11', '48', '7', '1234', '4539', '0'), +('11', '48', '7', '1218', '4503', '0'), +('11', '48', '7', '1648', '3723', '0'), +('11', '48', '7', '1362', '2624', '0'), +('11', '48', '9', '12804', '6753', '0'), +('11', '48', '9', '27712', '5435', '0'), +('11', '48', '9', '1649', '3258', '0'), +('11', '48', '9', '4408', '2932', '0'), +('11', '48', '15', '27713', '7911', '0'), +('11', '48', '15', '20659', '4840', '0'), +('11', '48', '15', '10150', '3004', '0'), +('11', '48', '15', '20789', '2831', '0'), +('11', '48', '20', '11666', '8368', '0'), +('11', '48', '20', '2742', '5182', '0'), +('11', '48', '20', '2467', '2911', '0'), +('11', '48', '20', '1364', '2411', '0'), +('11', '48', '12', '1236', '6169', '0'), +('11', '48', '12', '2336', '3911', '0'), +('11', '48', '12', '20655', '3784', '0'), +('11', '48', '12', '4345', '3272', '0'), +('11', '48', '18', '1651', '2675', '0'), +('11', '48', '18', '4410', '1142', '0'), +('11', '48', '18', '1221', '454', '0'), +('11', '48', '18', '1237', '436', '0'), +('11', '48', '19', '4407', '5279', '0'), +('11', '48', '19', '68239', '3663', '0'), +('11', '48', '19', '1368', '2016', '0'), +('11', '48', '19', '1652', '1834', '0'), +('11', '48', '13', '14759', '8612', '0'), +('11', '48', '13', '11689', '8475', '0'), +('11', '48', '13', '6359', '6651', '0'), +('11', '48', '13', '13500', '6236', '0'), +('11', '48', '14', '14759', '8612', '0'), +('11', '48', '14', '6359', '6651', '0'), +('11', '48', '14', '9246', '5810', '0'), +('11', '48', '14', '10219', '5681', '0'), +('11', '48', '11', '9246', '5810', '0'), +('11', '48', '11', '13169', '3240', '0'), +('11', '48', '11', '14762', '2204', '0'), +('11', '48', '11', '13353', '1500', '0'), +('11', '49', '22', '10323', '0', '0'), +('11', '49', '22', '9246', '0', '0'), +('11', '49', '22', '21509', '0', '0'), +('11', '49', '22', '8007', '0', '0'), +('11', '49', '1', '14702', '3750', '0'), +('11', '49', '1', '10082', '3648', '0'), +('11', '49', '1', '10107', '2960', '0'), +('11', '49', '1', '14701', '2862', '0'), +('11', '49', '2', '1232', '7166', '0'), +('11', '49', '2', '1211', '5544', '0'), +('11', '49', '2', '10143', '5368', '0'), +('11', '49', '2', '10141', '5339', '0'), +('11', '49', '3', '11052', '8879', '0'), +('11', '49', '3', '1544', '8611', '0'), +('11', '49', '3', '4505', '4174', '0'), +('11', '49', '3', '1212', '1910', '0'), +('11', '49', '5', '14560', '8605', '0'), +('11', '49', '5', '11646', '6995', '0'), +('11', '49', '5', '14703', '6050', '0'), +('11', '49', '5', '10216', '4472', '0'), +('11', '49', '8', '11603', '13638', '0'), +('11', '49', '8', '1278', '8073', '0'), +('11', '49', '8', '2349', '3554', '0'), +('11', '49', '8', '1057', '3158', '0'), +('11', '49', '6', '1279', '9786', '0'), +('11', '49', '6', '1557', '5310', '0'), +('11', '49', '6', '1905', '5089', '0'), +('11', '49', '6', '1645', '3105', '0'), +('11', '49', '17', '11641', '14460', '0'), +('11', '49', '17', '1233', '11886', '0'), +('11', '49', '17', '1214', '11421', '0'), +('11', '49', '17', '1644', '11326', '0'), +('11', '49', '7', '1234', '4624', '0'), +('11', '49', '7', '1218', '4588', '0'), +('11', '49', '7', '1648', '3784', '0'), +('11', '49', '7', '1362', '2624', '0'), +('11', '49', '9', '12804', '6753', '0'), +('11', '49', '9', '27712', '5496', '0'), +('11', '49', '9', '1649', '3294', '0'), +('11', '49', '9', '4408', '2993', '0'), +('11', '49', '15', '27713', '7972', '0'), +('11', '49', '15', '20659', '4876', '0'), +('11', '49', '15', '10150', '3004', '0'), +('11', '49', '15', '20789', '2880', '0'), +('11', '49', '20', '11666', '8370', '0'), +('11', '49', '20', '2742', '5185', '0'), +('11', '49', '20', '2467', '2972', '0'), +('11', '49', '20', '1364', '2460', '0'), +('11', '49', '12', '1236', '6266', '0'), +('11', '49', '12', '2336', '3972', '0'), +('11', '49', '12', '20655', '3809', '0'), +('11', '49', '12', '4345', '3332', '0'), +('11', '49', '18', '1651', '2711', '0'), +('11', '49', '18', '4410', '1142', '0'), +('11', '49', '18', '1221', '454', '0'), +('11', '49', '18', '1237', '436', '0'), +('11', '49', '19', '4407', '5387', '0'), +('11', '49', '19', '68239', '3699', '0'), +('11', '49', '19', '1368', '2016', '0'), +('11', '49', '19', '1652', '1834', '0'), +('11', '49', '13', '14759', '8683', '0'), +('11', '49', '13', '11689', '8566', '0'), +('11', '49', '13', '6359', '6772', '0'), +('11', '49', '13', '13500', '6357', '0'), +('11', '49', '14', '14759', '8683', '0'), +('11', '49', '14', '6359', '6772', '0'), +('11', '49', '14', '9246', '5931', '0'), +('11', '49', '14', '10219', '5681', '0'), +('11', '49', '11', '9246', '5931', '0'), +('11', '49', '11', '13169', '3276', '0'), +('11', '49', '11', '14762', '2204', '0'), +('11', '49', '11', '13353', '1500', '0'), +('11', '50', '22', '10323', '0', '0'), +('11', '50', '22', '9246', '0', '0'), +('11', '50', '22', '21509', '0', '0'), +('11', '50', '22', '8007', '0', '0'), +('11', '50', '1', '14702', '3750', '0'), +('11', '50', '1', '10082', '3720', '0'), +('11', '50', '1', '10107', '3020', '0'), +('11', '50', '1', '14701', '2862', '0'), +('11', '50', '2', '1232', '7262', '0'), +('11', '50', '2', '1211', '5628', '0'), +('11', '50', '2', '10141', '5448', '0'), +('11', '50', '2', '10143', '5368', '0'), +('11', '50', '3', '11052', '9060', '0'), +('11', '50', '3', '1544', '8671', '0'), +('11', '50', '3', '4505', '4258', '0'), +('11', '50', '3', '1212', '1922', '0'), +('11', '50', '5', '14560', '8726', '0'), +('11', '50', '5', '11646', '7152', '0'), +('11', '50', '5', '14703', '6050', '0'), +('11', '50', '5', '10216', '4532', '0'), +('11', '50', '8', '11603', '13746', '0'), +('11', '50', '8', '1278', '8135', '0'), +('11', '50', '8', '2349', '3554', '0'), +('11', '50', '8', '1057', '3218', '0'), +('11', '50', '6', '1279', '9846', '0'), +('11', '50', '6', '1557', '5310', '0'), +('11', '50', '6', '1905', '5091', '0'), +('11', '50', '6', '1645', '3141', '0'), +('11', '50', '17', '11641', '14642', '0'), +('11', '50', '17', '1233', '12045', '0'), +('11', '50', '17', '1214', '11581', '0'), +('11', '50', '17', '1644', '11386', '0'), +('11', '50', '7', '1234', '4708', '0'), +('11', '50', '7', '1218', '4672', '0'), +('11', '50', '7', '1648', '3844', '0'), +('11', '50', '7', '1362', '2624', '0'), +('11', '50', '9', '12804', '6753', '0'), +('11', '50', '9', '27712', '5556', '0'), +('11', '50', '9', '1649', '3330', '0'), +('11', '50', '9', '4408', '3053', '0'), +('11', '50', '15', '27713', '8032', '0'), +('11', '50', '15', '20659', '4912', '0'), +('11', '50', '15', '10150', '3004', '0'), +('11', '50', '15', '20789', '2928', '0'), +('11', '50', '20', '11666', '8371', '0'), +('11', '50', '20', '2742', '5187', '0'), +('11', '50', '20', '2467', '3032', '0'), +('11', '50', '20', '1364', '2508', '0'), +('11', '50', '12', '1236', '6362', '0'), +('11', '50', '12', '2336', '4032', '0'), +('11', '50', '12', '20655', '3834', '0'), +('11', '50', '12', '4345', '3392', '0'), +('11', '50', '18', '1651', '2747', '0'), +('11', '50', '18', '4410', '1142', '0'), +('11', '50', '18', '1221', '454', '0'), +('11', '50', '18', '1237', '436', '0'), +('11', '50', '19', '4407', '5496', '0'), +('11', '50', '19', '68239', '3735', '0'), +('11', '50', '19', '1368', '2016', '0'), +('11', '50', '19', '1652', '1834', '0'), +('11', '50', '13', '14759', '8755', '0'), +('11', '50', '13', '11689', '8657', '0'), +('11', '50', '13', '6359', '6893', '0'), +('11', '50', '13', '13500', '6478', '0'), +('11', '50', '14', '14759', '8755', '0'), +('11', '50', '14', '6359', '6893', '0'), +('11', '50', '14', '9246', '6052', '0'), +('11', '50', '14', '10404', '5736', '0'), +('11', '50', '11', '9246', '6052', '0'), +('11', '50', '11', '13169', '3312', '0'), +('11', '50', '11', '14762', '2204', '0'), +('11', '50', '11', '13353', '1500', '0'), +('11', '51', '22', '10323', '0', '0'), +('11', '51', '22', '9246', '0', '0'), +('11', '51', '22', '21509', '0', '0'), +('11', '51', '22', '8007', '0', '0'), +('11', '51', '1', '10082', '3793', '0'), +('11', '51', '1', '14702', '3750', '0'), +('11', '51', '1', '10107', '3080', '0'), +('11', '51', '1', '14701', '2862', '0'), +('11', '51', '2', '1232', '7359', '0'), +('11', '51', '2', '1211', '5713', '0'), +('11', '51', '2', '10141', '5557', '0'), +('11', '51', '2', '10143', '5368', '0'), +('11', '51', '3', '11052', '9241', '0'), +('11', '51', '3', '1544', '8732', '0'), +('11', '51', '3', '4505', '4343', '0'), +('11', '51', '3', '1212', '1934', '0'), +('11', '51', '5', '14560', '8847', '0'), +('11', '51', '5', '11646', '7309', '0'), +('11', '51', '5', '14703', '6050', '0'), +('11', '51', '5', '10216', '4592', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '51', '8', '11603', '13855', '0'), +('11', '51', '8', '1278', '8197', '0'), +('11', '51', '8', '2349', '3554', '0'), +('11', '51', '8', '1057', '3279', '0'), +('11', '51', '6', '1279', '9906', '0'), +('11', '51', '6', '1557', '5310', '0'), +('11', '51', '6', '1905', '5092', '0'), +('11', '51', '6', '1645', '3177', '0'), +('11', '51', '17', '11641', '14823', '0'), +('11', '51', '17', '1233', '12205', '0'), +('11', '51', '17', '1214', '11741', '0'), +('11', '51', '17', '1644', '11447', '0'), +('11', '51', '7', '27885', '6055', '0'), +('11', '51', '7', '1234', '4793', '0'), +('11', '51', '7', '1218', '4757', '0'), +('11', '51', '7', '1648', '3905', '0'), +('11', '51', '9', '12804', '6753', '0'), +('11', '51', '9', '27712', '5617', '0'), +('11', '51', '9', '1649', '3366', '0'), +('11', '51', '9', '4408', '3114', '0'), +('11', '51', '15', '27713', '8092', '0'), +('11', '51', '15', '20659', '4948', '0'), +('11', '51', '15', '10150', '3004', '0'), +('11', '51', '15', '20789', '2976', '0'), +('11', '51', '20', '11666', '8373', '0'), +('11', '51', '20', '2742', '5190', '0'), +('11', '51', '20', '2467', '3092', '0'), +('11', '51', '20', '1364', '2556', '0'), +('11', '51', '12', '1236', '6459', '0'), +('11', '51', '12', '2336', '4092', '0'), +('11', '51', '12', '20655', '3858', '0'), +('11', '51', '12', '4345', '3453', '0'), +('11', '51', '18', '1651', '2783', '0'), +('11', '51', '18', '4410', '1142', '0'), +('11', '51', '18', '1221', '454', '0'), +('11', '51', '18', '1237', '436', '0'), +('11', '51', '19', '4407', '5605', '0'), +('11', '51', '19', '68239', '3772', '0'), +('11', '51', '19', '1368', '2016', '0'), +('11', '51', '19', '1652', '1834', '0'), +('11', '51', '13', '14759', '8826', '0'), +('11', '51', '13', '11689', '8747', '0'), +('11', '51', '13', '6359', '7014', '0'), +('11', '51', '13', '13500', '6599', '0'), +('11', '51', '14', '14759', '8826', '0'), +('11', '51', '14', '6359', '7014', '0'), +('11', '51', '14', '9246', '6173', '0'), +('11', '51', '14', '10404', '5845', '0'), +('11', '51', '11', '9246', '6173', '0'), +('11', '51', '11', '13169', '3348', '0'), +('11', '51', '11', '14762', '2204', '0'), +('11', '51', '11', '13353', '1500', '0'), +('11', '52', '22', '10323', '0', '0'), +('11', '52', '22', '9246', '0', '0'), +('11', '52', '22', '21509', '0', '0'), +('11', '52', '22', '8007', '0', '0'), +('11', '52', '1', '10082', '3865', '0'), +('11', '52', '1', '14702', '3750', '0'), +('11', '52', '1', '10107', '3141', '0'), +('11', '52', '1', '14701', '2862', '0'), +('11', '52', '2', '1232', '7455', '0'), +('11', '52', '2', '1211', '5797', '0'), +('11', '52', '2', '10141', '5666', '0'), +('11', '52', '2', '10143', '5368', '0'), +('11', '52', '3', '11052', '9422', '0'), +('11', '52', '3', '1544', '8792', '0'), +('11', '52', '3', '4505', '4427', '0'), +('11', '52', '3', '1212', '1946', '0'), +('11', '52', '5', '14560', '8968', '0'), +('11', '52', '5', '11646', '7466', '0'), +('11', '52', '5', '14703', '6050', '0'), +('11', '52', '5', '10216', '4653', '0'), +('11', '52', '8', '11603', '13964', '0'), +('11', '52', '8', '1278', '8258', '0'), +('11', '52', '8', '2349', '3554', '0'), +('11', '52', '8', '1057', '3339', '0'), +('11', '52', '6', '1279', '9967', '0'), +('11', '52', '6', '1557', '5310', '0'), +('11', '52', '6', '1905', '5093', '0'), +('11', '52', '6', '1645', '3213', '0'), +('11', '52', '17', '11641', '15004', '0'), +('11', '52', '17', '1233', '12364', '0'), +('11', '52', '17', '1214', '11901', '0'), +('11', '52', '17', '1644', '11507', '0'), +('11', '52', '7', '27885', '6103', '0'), +('11', '52', '7', '1234', '4877', '0'), +('11', '52', '7', '1218', '4841', '0'), +('11', '52', '7', '1648', '3965', '0'), +('11', '52', '9', '12804', '6753', '0'), +('11', '52', '9', '27712', '5677', '0'), +('11', '52', '9', '1649', '3403', '0'), +('11', '52', '9', '4408', '3174', '0'), +('11', '52', '15', '27713', '8153', '0'), +('11', '52', '15', '20659', '4984', '0'), +('11', '52', '15', '20789', '3025', '0'), +('11', '52', '15', '10150', '3004', '0'), +('11', '52', '20', '11666', '8375', '0'), +('11', '52', '20', '2742', '5192', '0'), +('11', '52', '20', '2467', '3153', '0'), +('11', '52', '20', '1364', '2605', '0'), +('11', '52', '12', '1236', '6555', '0'), +('11', '52', '12', '2336', '4153', '0'), +('11', '52', '12', '20655', '3883', '0'), +('11', '52', '12', '4345', '3513', '0'), +('11', '52', '18', '1651', '2820', '0'), +('11', '52', '18', '4410', '1142', '0'), +('11', '52', '18', '1221', '454', '0'), +('11', '52', '18', '1237', '436', '0'), +('11', '52', '19', '4407', '5714', '0'), +('11', '52', '19', '68239', '3808', '0'), +('11', '52', '19', '1368', '2016', '0'), +('11', '52', '19', '1652', '1834', '0'), +('11', '52', '13', '14759', '8897', '0'), +('11', '52', '13', '11689', '8838', '0'), +('11', '52', '13', '6359', '7135', '0'), +('11', '52', '13', '13500', '6720', '0'), +('11', '52', '14', '14759', '8897', '0'), +('11', '52', '14', '6359', '7135', '0'), +('11', '52', '14', '9246', '6294', '0'), +('11', '52', '14', '10404', '5953', '0'), +('11', '52', '11', '9246', '6294', '0'), +('11', '52', '11', '13169', '3384', '0'), +('11', '52', '11', '14762', '2204', '0'), +('11', '52', '11', '13353', '1500', '0'), +('11', '53', '22', '10323', '0', '0'), +('11', '53', '22', '9246', '0', '0'), +('11', '53', '22', '21509', '0', '0'), +('11', '53', '22', '8007', '0', '0'), +('11', '53', '1', '10082', '3938', '0'), +('11', '53', '1', '14702', '3750', '0'), +('11', '53', '1', '10107', '3201', '0'), +('11', '53', '1', '14701', '2862', '0'), +('11', '53', '2', '1232', '7552', '0'), +('11', '53', '2', '1211', '5882', '0'), +('11', '53', '2', '10141', '5774', '0'), +('11', '53', '2', '10143', '5368', '0'), +('11', '53', '3', '11052', '9604', '0'), +('11', '53', '3', '1544', '8853', '0'), +('11', '53', '3', '4505', '4512', '0'), +('11', '53', '3', '1212', '1958', '0'), +('11', '53', '5', '14560', '9089', '0'), +('11', '53', '5', '11646', '7623', '0'), +('11', '53', '5', '14703', '6050', '0'), +('11', '53', '5', '10216', '4713', '0'), +('11', '53', '8', '11603', '14073', '0'), +('11', '53', '8', '1278', '8320', '0'), +('11', '53', '8', '2349', '3554', '0'), +('11', '53', '8', '1057', '3400', '0'), +('11', '53', '6', '1279', '10027', '0'), +('11', '53', '6', '1557', '5310', '0'), +('11', '53', '6', '1905', '5094', '0'), +('11', '53', '6', '1645', '3250', '0'), +('11', '53', '17', '11641', '15185', '0'), +('11', '53', '17', '1233', '12524', '0'), +('11', '53', '17', '1214', '12061', '0'), +('11', '53', '17', '1644', '11568', '0'), +('11', '53', '7', '27885', '6151', '0'), +('11', '53', '7', '1234', '4962', '0'), +('11', '53', '7', '1218', '4926', '0'), +('11', '53', '7', '1648', '4025', '0'), +('11', '53', '9', '12804', '6753', '0'), +('11', '53', '9', '27712', '5737', '0'), +('11', '53', '9', '1649', '3439', '0'), +('11', '53', '9', '4408', '3234', '0'), +('11', '53', '15', '27713', '8213', '0'), +('11', '53', '15', '20659', '5021', '0'), +('11', '53', '15', '20789', '3073', '0'), +('11', '53', '15', '10150', '3004', '0'), +('11', '53', '20', '11666', '8376', '0'), +('11', '53', '20', '2742', '5194', '0'), +('11', '53', '20', '2467', '3213', '0'), +('11', '53', '20', '1364', '2653', '0'), +('11', '53', '12', '1236', '6652', '0'), +('11', '53', '12', '2336', '4213', '0'), +('11', '53', '12', '20655', '3908', '0'), +('11', '53', '12', '4345', '3574', '0'), +('11', '53', '18', '1651', '2856', '0'), +('11', '53', '18', '4410', '1142', '0'), +('11', '53', '18', '1221', '454', '0'), +('11', '53', '18', '1237', '436', '0'), +('11', '53', '19', '4407', '5822', '0'), +('11', '53', '19', '68239', '3844', '0'), +('11', '53', '19', '1368', '2016', '0'), +('11', '53', '19', '1652', '1834', '0'), +('11', '53', '13', '14759', '8968', '0'), +('11', '53', '13', '11689', '8929', '0'), +('11', '53', '13', '6359', '7255', '0'), +('11', '53', '13', '13500', '6840', '0'), +('11', '53', '14', '14759', '8968', '0'), +('11', '53', '14', '6359', '7255', '0'), +('11', '53', '14', '9246', '6414', '0'), +('11', '53', '14', '10404', '6062', '0'), +('11', '53', '11', '9246', '6414', '0'), +('11', '53', '11', '13169', '3421', '0'), +('11', '53', '11', '14762', '2204', '0'), +('11', '53', '11', '13353', '1500', '0'), +('11', '54', '22', '10323', '0', '0'), +('11', '54', '22', '9246', '0', '0'), +('11', '54', '22', '21509', '0', '0'), +('11', '54', '22', '8007', '0', '0'), +('11', '54', '1', '10082', '4010', '0'), +('11', '54', '1', '14702', '3750', '0'), +('11', '54', '1', '10107', '3262', '0'), +('11', '54', '1', '14701', '2862', '0'), +('11', '54', '2', '1232', '7649', '0'), +('11', '54', '2', '1211', '5966', '0'), +('11', '54', '2', '10141', '5883', '0'), +('11', '54', '2', '10143', '5368', '0'), +('11', '54', '3', '11052', '9785', '0'), +('11', '54', '3', '1544', '8913', '0'), +('11', '54', '3', '4505', '4596', '0'), +('11', '54', '3', '10101', '1975', '0'), +('11', '54', '5', '14560', '9209', '0'), +('11', '54', '5', '11646', '7780', '0'), +('11', '54', '5', '14703', '6050', '0'), +('11', '54', '5', '10216', '4774', '0'), +('11', '54', '8', '11603', '14181', '0'), +('11', '54', '8', '1278', '8382', '0'), +('11', '54', '8', '2349', '3554', '0'), +('11', '54', '8', '1057', '3460', '0'), +('11', '54', '6', '1279', '10088', '0'), +('11', '54', '6', '1557', '5310', '0'), +('11', '54', '6', '1905', '5095', '0'), +('11', '54', '6', '1645', '3286', '0'), +('11', '54', '17', '11641', '15366', '0'), +('11', '54', '17', '1233', '12683', '0'), +('11', '54', '17', '1214', '12222', '0'), +('11', '54', '17', '1644', '11628', '0'), +('11', '54', '7', '27885', '6199', '0'), +('11', '54', '7', '1234', '5046', '0'), +('11', '54', '7', '1218', '5010', '0'), +('11', '54', '7', '1648', '4086', '0'), +('11', '54', '9', '12804', '6753', '0'), +('11', '54', '9', '27712', '5798', '0'), +('11', '54', '9', '1649', '3475', '0'), +('11', '54', '9', '4408', '3295', '0'), +('11', '54', '15', '27713', '8274', '0'), +('11', '54', '15', '20659', '5057', '0'), +('11', '54', '15', '20789', '3121', '0'), +('11', '54', '15', '10150', '3004', '0'), +('11', '54', '20', '11666', '8378', '0'), +('11', '54', '20', '2742', '5197', '0'), +('11', '54', '20', '2467', '3274', '0'), +('11', '54', '20', '1364', '2701', '0'), +('11', '54', '12', '1236', '6749', '0'), +('11', '54', '12', '2336', '4274', '0'), +('11', '54', '12', '20655', '3932', '0'), +('11', '54', '12', '4345', '3634', '0'), +('11', '54', '18', '1651', '2892', '0'), +('11', '54', '18', '4410', '1142', '0'), +('11', '54', '18', '1221', '454', '0'), +('11', '54', '18', '1237', '436', '0'), +('11', '54', '19', '4407', '5931', '0'), +('11', '54', '19', '68239', '3880', '0'), +('11', '54', '19', '1368', '2016', '0'), +('11', '54', '19', '1652', '1834', '0'), +('11', '54', '13', '14759', '9040', '0'), +('11', '54', '13', '11689', '9019', '0'), +('11', '54', '13', '6359', '7376', '0'), +('11', '54', '13', '13500', '6961', '0'), +('11', '54', '14', '14759', '9040', '0'), +('11', '54', '14', '6359', '7376', '0'), +('11', '54', '14', '9246', '6535', '0'), +('11', '54', '14', '10404', '6171', '0'), +('11', '54', '11', '9246', '6535', '0'), +('11', '54', '11', '13169', '3457', '0'), +('11', '54', '11', '14762', '2204', '0'), +('11', '54', '11', '13353', '1500', '0'), +('11', '55', '22', '10323', '0', '0'), +('11', '55', '22', '9246', '0', '0'), +('11', '55', '22', '21509', '0', '0'), +('11', '55', '22', '8007', '0', '0'), +('11', '55', '1', '10082', '4083', '0'), +('11', '55', '1', '14702', '3750', '0'), +('11', '55', '1', '10107', '3322', '0'), +('11', '55', '1', '14701', '2862', '0'), +('11', '55', '2', '1232', '7745', '0'), +('11', '55', '2', '1211', '6051', '0'), +('11', '55', '2', '10141', '5992', '0'), +('11', '55', '2', '10143', '5368', '0'), +('11', '55', '3', '11052', '9966', '0'), +('11', '55', '3', '1544', '8973', '0'), +('11', '55', '3', '4505', '4681', '0'), +('11', '55', '3', '10101', '2011', '0'), +('11', '55', '5', '14560', '9330', '0'), +('11', '55', '5', '11646', '7937', '0'), +('11', '55', '5', '14703', '6050', '0'), +('11', '55', '5', '10216', '4834', '0'), +('11', '55', '8', '11603', '14290', '0'), +('11', '55', '8', '1278', '8444', '0'), +('11', '55', '8', '2349', '3554', '0'), +('11', '55', '8', '1057', '3520', '0'), +('11', '55', '6', '1279', '10148', '0'), +('11', '55', '6', '1557', '5310', '0'), +('11', '55', '6', '1905', '5097', '0'), +('11', '55', '6', '1645', '3322', '0'), +('11', '55', '17', '11641', '15548', '0'), +('11', '55', '17', '1233', '12843', '0'), +('11', '55', '17', '1214', '12382', '0'), +('11', '55', '17', '1644', '11688', '0'), +('11', '55', '7', '27885', '6248', '0'), +('11', '55', '7', '1234', '5131', '0'), +('11', '55', '7', '1218', '5095', '0'), +('11', '55', '7', '1648', '4146', '0'), +('11', '55', '9', '12804', '6753', '0'), +('11', '55', '9', '27712', '5858', '0'), +('11', '55', '9', '1649', '3511', '0'), +('11', '55', '9', '4408', '3355', '0'), +('11', '55', '15', '27713', '8334', '0'), +('11', '55', '15', '20659', '5093', '0'), +('11', '55', '15', '20789', '3170', '0'), +('11', '55', '15', '10150', '3004', '0'), +('11', '55', '20', '11666', '8380', '0'), +('11', '55', '20', '2742', '5199', '0'), +('11', '55', '20', '2467', '3334', '0'), +('11', '55', '20', '1364', '2750', '0'), +('11', '55', '12', '1236', '6845', '0'), +('11', '55', '12', '2336', '4334', '0'), +('11', '55', '12', '20655', '3957', '0'), +('11', '55', '12', '4345', '3694', '0'), +('11', '55', '18', '1651', '2928', '0'), +('11', '55', '18', '4410', '1142', '0'), +('11', '55', '18', '1221', '454', '0'), +('11', '55', '18', '1237', '436', '0'), +('11', '55', '19', '4407', '6040', '0'), +('11', '55', '19', '68239', '3917', '0'), +('11', '55', '19', '1368', '2016', '0'), +('11', '55', '19', '1652', '1834', '0'), +('11', '55', '13', '14759', '9111', '0'), +('11', '55', '13', '11689', '9110', '0'), +('11', '55', '13', '6359', '7497', '0'), +('11', '55', '13', '13500', '7082', '0'), +('11', '55', '14', '14759', '9111', '0'), +('11', '55', '14', '6359', '7497', '0'), +('11', '55', '14', '9246', '6656', '0'), +('11', '55', '14', '10404', '6280', '0'), +('11', '55', '11', '9246', '6656', '0'), +('11', '55', '11', '13169', '3493', '0'), +('11', '55', '11', '14762', '2204', '0'), +('11', '55', '11', '13353', '1500', '0'), +('11', '56', '22', '10323', '0', '0'), +('11', '56', '22', '9246', '0', '0'), +('11', '56', '22', '21509', '0', '0'), +('11', '56', '22', '8007', '0', '0'), +('11', '56', '1', '10082', '4155', '0'), +('11', '56', '1', '14702', '3750', '0'), +('11', '56', '1', '10107', '3382', '0'), +('11', '56', '1', '14701', '2862', '0'), +('11', '56', '2', '1232', '7842', '0'), +('11', '56', '2', '1211', '6136', '0'), +('11', '56', '2', '10141', '6100', '0'), +('11', '56', '2', '10143', '5368', '0'), +('11', '56', '3', '11052', '10147', '0'), +('11', '56', '3', '1544', '9034', '0'), +('11', '56', '3', '4505', '4766', '0'), +('11', '56', '3', '10101', '2048', '0'), +('11', '56', '5', '14560', '9451', '0'), +('11', '56', '5', '11646', '8094', '0'), +('11', '56', '5', '14703', '6050', '0'), +('11', '56', '5', '10216', '4894', '0'), +('11', '56', '8', '11603', '14399', '0'), +('11', '56', '8', '1278', '8506', '0'), +('11', '56', '8', '1057', '3581', '0'), +('11', '56', '8', '2349', '3554', '0'), +('11', '56', '6', '1279', '10208', '0'), +('11', '56', '6', '1557', '5310', '0'), +('11', '56', '6', '1905', '5098', '0'), +('11', '56', '6', '1645', '3358', '0'), +('11', '56', '17', '11641', '15729', '0'), +('11', '56', '17', '1233', '13002', '0'), +('11', '56', '17', '1214', '12542', '0'), +('11', '56', '17', '1644', '11749', '0'), +('11', '56', '7', '27885', '6296', '0'), +('11', '56', '7', '1234', '5216', '0'), +('11', '56', '7', '1218', '5180', '0'), +('11', '56', '7', '1648', '4207', '0'), +('11', '56', '9', '12804', '6753', '0'), +('11', '56', '9', '27712', '5919', '0'), +('11', '56', '9', '1649', '3548', '0'), +('11', '56', '9', '4408', '3416', '0'), +('11', '56', '15', '27713', '8394', '0'), +('11', '56', '15', '20659', '5129', '0'), +('11', '56', '15', '20789', '3218', '0'), +('11', '56', '15', '10150', '3004', '0'), +('11', '56', '20', '11666', '8382', '0'), +('11', '56', '20', '2742', '5202', '0'), +('11', '56', '20', '2467', '3394', '0'), +('11', '56', '20', '1364', '2798', '0'), +('11', '56', '12', '1236', '6942', '0'), +('11', '56', '12', '2336', '4394', '0'), +('11', '56', '12', '20655', '3981', '0'), +('11', '56', '12', '4345', '3755', '0'), +('11', '56', '18', '1651', '2964', '0'), +('11', '56', '18', '4410', '1142', '0'), +('11', '56', '18', '1221', '454', '0'), +('11', '56', '18', '1237', '436', '0'), +('11', '56', '19', '4407', '6149', '0'), +('11', '56', '19', '68239', '3953', '0'), +('11', '56', '19', '1368', '2016', '0'), +('11', '56', '19', '1652', '1834', '0'), +('11', '56', '13', '11689', '9200', '0'), +('11', '56', '13', '14759', '9182', '0'), +('11', '56', '13', '6359', '7618', '0'), +('11', '56', '13', '13500', '7203', '0'), +('11', '56', '14', '14759', '9182', '0'), +('11', '56', '14', '6359', '7618', '0'), +('11', '56', '14', '9246', '6777', '0'), +('11', '56', '14', '10404', '6388', '0'), +('11', '56', '11', '9246', '6777', '0'), +('11', '56', '11', '13169', '3529', '0'), +('11', '56', '11', '14762', '2204', '0'), +('11', '56', '11', '13353', '1500', '0'), +('11', '57', '22', '10323', '0', '0'), +('11', '57', '22', '9246', '0', '0'), +('11', '57', '22', '21509', '0', '0'), +('11', '57', '22', '8007', '0', '0'), +('11', '57', '1', '10082', '4228', '0'), +('11', '57', '1', '14702', '3750', '0'), +('11', '57', '1', '10107', '3443', '0'), +('11', '57', '1', '14701', '2862', '0'), +('11', '57', '2', '1232', '7939', '0'), +('11', '57', '2', '1211', '6220', '0'), +('11', '57', '2', '10141', '6209', '0'), +('11', '57', '2', '10143', '5368', '0'), +('11', '57', '3', '11052', '10328', '0'), +('11', '57', '3', '1544', '9094', '0'), +('11', '57', '3', '4505', '4850', '0'), +('11', '57', '3', '10101', '2084', '0'), +('11', '57', '5', '14560', '9572', '0'), +('11', '57', '5', '11646', '8251', '0'), +('11', '57', '5', '14703', '6050', '0'), +('11', '57', '5', '10216', '4955', '0'), +('11', '57', '8', '11603', '14507', '0'), +('11', '57', '8', '1278', '8568', '0'), +('11', '57', '8', '1057', '3641', '0'), +('11', '57', '8', '2349', '3554', '0'), +('11', '57', '6', '1279', '10269', '0'), +('11', '57', '6', '1557', '5310', '0'), +('11', '57', '6', '1905', '5099', '0'), +('11', '57', '6', '1645', '3395', '0'), +('11', '57', '17', '11641', '15910', '0'), +('11', '57', '17', '1233', '13161', '0'), +('11', '57', '17', '1214', '12702', '0'), +('11', '57', '17', '1644', '11809', '0'), +('11', '57', '7', '27885', '6344', '0'), +('11', '57', '7', '1234', '5300', '0'), +('11', '57', '7', '1218', '5264', '0'), +('11', '57', '7', '1648', '4267', '0'), +('11', '57', '9', '12804', '6753', '0'), +('11', '57', '9', '27712', '5979', '0'), +('11', '57', '9', '1649', '3584', '0'), +('11', '57', '9', '4408', '3476', '0'), +('11', '57', '15', '27713', '8455', '0'), +('11', '57', '15', '20659', '5166', '0'), +('11', '57', '15', '20789', '3266', '0'), +('11', '57', '15', '10150', '3004', '0'), +('11', '57', '20', '11666', '8383', '0'), +('11', '57', '20', '2742', '5204', '0'), +('11', '57', '20', '2467', '3455', '0'), +('11', '57', '20', '1364', '2846', '0'), +('11', '57', '12', '1236', '7039', '0'), +('11', '57', '12', '2336', '4455', '0'), +('11', '57', '12', '20655', '4006', '0'), +('11', '57', '12', '4345', '3815', '0'), +('11', '57', '18', '1651', '3001', '0'), +('11', '57', '18', '4410', '1142', '0'), +('11', '57', '18', '1221', '454', '0'), +('11', '57', '18', '1237', '436', '0'), +('11', '57', '19', '4407', '6257', '0'), +('11', '57', '19', '68239', '3989', '0'), +('11', '57', '19', '1368', '2016', '0'), +('11', '57', '19', '1652', '1834', '0'), +('11', '57', '13', '11689', '9291', '0'), +('11', '57', '13', '14759', '9253', '0'), +('11', '57', '13', '6359', '7739', '0'), +('11', '57', '13', '13500', '7324', '0'), +('11', '57', '14', '14759', '9253', '0'), +('11', '57', '14', '6359', '7739', '0'), +('11', '57', '14', '9246', '6898', '0'), +('11', '57', '14', '10404', '6497', '0'), +('11', '57', '11', '9246', '6898', '0'), +('11', '57', '11', '13169', '3566', '0'), +('11', '57', '11', '14762', '2204', '0'), +('11', '57', '11', '13353', '1500', '0'), +('11', '58', '22', '10323', '0', '0'), +('11', '58', '22', '9246', '0', '0'), +('11', '58', '22', '21509', '0', '0'), +('11', '58', '22', '8007', '0', '0'), +('11', '58', '1', '10082', '4300', '0'), +('11', '58', '1', '14702', '3750', '0'), +('11', '58', '1', '10107', '3503', '0'), +('11', '58', '1', '14701', '2862', '0'), +('11', '58', '2', '1232', '8035', '0'), +('11', '58', '2', '10141', '6318', '0'), +('11', '58', '2', '1211', '6305', '0'), +('11', '58', '2', '10143', '5368', '0'), +('11', '58', '3', '11052', '10510', '0'), +('11', '58', '3', '1544', '9155', '0'), +('11', '58', '3', '4505', '4935', '0'), +('11', '58', '3', '10101', '2120', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '58', '5', '14560', '9693', '0'), +('11', '58', '5', '11646', '8408', '0'), +('11', '58', '5', '14703', '6050', '0'), +('11', '58', '5', '10216', '5015', '0'), +('11', '58', '8', '11603', '14616', '0'), +('11', '58', '8', '1278', '8630', '0'), +('11', '58', '8', '1057', '3702', '0'), +('11', '58', '8', '2349', '3554', '0'), +('11', '58', '6', '1279', '10329', '0'), +('11', '58', '6', '1557', '5310', '0'), +('11', '58', '6', '1905', '5100', '0'), +('11', '58', '6', '1645', '3431', '0'), +('11', '58', '17', '11641', '16091', '0'), +('11', '58', '17', '1233', '13321', '0'), +('11', '58', '17', '1214', '12862', '0'), +('11', '58', '17', '1644', '11870', '0'), +('11', '58', '7', '27885', '6393', '0'), +('11', '58', '7', '1234', '5385', '0'), +('11', '58', '7', '1218', '5349', '0'), +('11', '58', '7', '1648', '4327', '0'), +('11', '58', '9', '12804', '6753', '0'), +('11', '58', '9', '27712', '6039', '0'), +('11', '58', '9', '1649', '3620', '0'), +('11', '58', '9', '4408', '3536', '0'), +('11', '58', '15', '27713', '8515', '0'), +('11', '58', '15', '20659', '5202', '0'), +('11', '58', '15', '20789', '3315', '0'), +('11', '58', '15', '10150', '3004', '0'), +('11', '58', '20', '11666', '8385', '0'), +('11', '58', '20', '2742', '5207', '0'), +('11', '58', '20', '2467', '3515', '0'), +('11', '58', '20', '1364', '2895', '0'), +('11', '58', '12', '1236', '7135', '0'), +('11', '58', '12', '2336', '4515', '0'), +('11', '58', '12', '20655', '4031', '0'), +('11', '58', '12', '4345', '3876', '0'), +('11', '58', '18', '1651', '3037', '0'), +('11', '58', '18', '4410', '1142', '0'), +('11', '58', '18', '1221', '454', '0'), +('11', '58', '18', '1237', '436', '0'), +('11', '58', '19', '4407', '6366', '0'), +('11', '58', '19', '68239', '4025', '0'), +('11', '58', '19', '1368', '2016', '0'), +('11', '58', '19', '1652', '1834', '0'), +('11', '58', '13', '11689', '9382', '0'), +('11', '58', '13', '14759', '9325', '0'), +('11', '58', '13', '6359', '7859', '0'), +('11', '58', '13', '13500', '7444', '0'), +('11', '58', '14', '14759', '9325', '0'), +('11', '58', '14', '6359', '7859', '0'), +('11', '58', '14', '9246', '7018', '0'), +('11', '58', '14', '10404', '6606', '0'), +('11', '58', '11', '9246', '7018', '0'), +('11', '58', '11', '13169', '3602', '0'), +('11', '58', '11', '14762', '2204', '0'), +('11', '58', '11', '13353', '1500', '0'), +('11', '59', '22', '10323', '0', '0'), +('11', '59', '22', '9246', '0', '0'), +('11', '59', '22', '21509', '0', '0'), +('11', '59', '22', '8007', '0', '0'), +('11', '59', '1', '10082', '4373', '0'), +('11', '59', '1', '14702', '3750', '0'), +('11', '59', '1', '10107', '3564', '0'), +('11', '59', '1', '14701', '2862', '0'), +('11', '59', '2', '1232', '8132', '0'), +('11', '59', '2', '10141', '6427', '0'), +('11', '59', '2', '1211', '6389', '0'), +('11', '59', '2', '10143', '5368', '0'), +('11', '59', '3', '11052', '10691', '0'), +('11', '59', '3', '1544', '9215', '0'), +('11', '59', '3', '4505', '5019', '0'), +('11', '59', '3', '10101', '2156', '0'), +('11', '59', '5', '14560', '9813', '0'), +('11', '59', '5', '11646', '8565', '0'), +('11', '59', '5', '14703', '6050', '0'), +('11', '59', '5', '10216', '5076', '0'), +('11', '59', '8', '11603', '14725', '0'), +('11', '59', '8', '1278', '8691', '0'), +('11', '59', '8', '1057', '3762', '0'), +('11', '59', '8', '2349', '3554', '0'), +('11', '59', '6', '1279', '10390', '0'), +('11', '59', '6', '1557', '5310', '0'), +('11', '59', '6', '1905', '5101', '0'), +('11', '59', '6', '1645', '3467', '0'), +('11', '59', '17', '11641', '16272', '0'), +('11', '59', '17', '1233', '13480', '0'), +('11', '59', '17', '1214', '13023', '0'), +('11', '59', '17', '1644', '11930', '0'), +('11', '59', '7', '27885', '6441', '0'), +('11', '59', '7', '1234', '5469', '0'), +('11', '59', '7', '1218', '5433', '0'), +('11', '59', '7', '1648', '4388', '0'), +('11', '59', '9', '12804', '6753', '0'), +('11', '59', '9', '27712', '6100', '0'), +('11', '59', '9', '1649', '3656', '0'), +('11', '59', '9', '4408', '3597', '0'), +('11', '59', '15', '27713', '8576', '0'), +('11', '59', '15', '20659', '5238', '0'), +('11', '59', '15', '20789', '3363', '0'), +('11', '59', '15', '10150', '3004', '0'), +('11', '59', '20', '11666', '8387', '0'), +('11', '59', '20', '2742', '5209', '0'), +('11', '59', '20', '2467', '3576', '0'), +('11', '59', '20', '1364', '2943', '0'), +('11', '59', '12', '1236', '7232', '0'), +('11', '59', '12', '2336', '4576', '0'), +('11', '59', '12', '20655', '4055', '0'), +('11', '59', '12', '4345', '3936', '0'), +('11', '59', '18', '1651', '3073', '0'), +('11', '59', '18', '4410', '1142', '0'), +('11', '59', '18', '1221', '454', '0'), +('11', '59', '18', '1237', '436', '0'), +('11', '59', '19', '4407', '6475', '0'), +('11', '59', '19', '68239', '4062', '0'), +('11', '59', '19', '1368', '2016', '0'), +('11', '59', '19', '1652', '1834', '0'), +('11', '59', '13', '11689', '9472', '0'), +('11', '59', '13', '14759', '9396', '0'), +('11', '59', '13', '6359', '7980', '0'), +('11', '59', '13', '13500', '7565', '0'), +('11', '59', '14', '14759', '9396', '0'), +('11', '59', '14', '6359', '7980', '0'), +('11', '59', '14', '9246', '7139', '0'), +('11', '59', '14', '10404', '6714', '0'), +('11', '59', '11', '9246', '7139', '0'), +('11', '59', '11', '13169', '3638', '0'), +('11', '59', '11', '14762', '2204', '0'), +('11', '59', '11', '13353', '1500', '0'), +('11', '60', '22', '66397', '0', '3'), +('11', '60', '22', '61948', '0', '3'), +('11', '60', '22', '21805', '0', '3'), +('11', '60', '22', '21807', '0', '3'), +('11', '60', '1', '30552', '19371', '3'), +('11', '60', '1', '28944', '13921', '3'), +('11', '60', '1', '29861', '12809', '3'), +('11', '60', '1', '63170', '12601', '3'), +('11', '60', '2', '26763', '32336', '3'), +('11', '60', '2', '1211', '21455', '3'), +('11', '60', '2', '1867', '15111', '3'), +('11', '60', '2', '51235', '14699', '3'), +('11', '60', '3', '5772', '20355', '3'), +('11', '60', '3', '30553', '13148', '3'), +('11', '60', '3', '31233', '12326', '3'), +('11', '60', '3', '7387', '12058', '3'), +('11', '60', '5', '26505', '24082', '3'), +('11', '60', '5', '8364', '17538', '3'), +('11', '60', '5', '29459', '15663', '3'), +('11', '60', '5', '28901', '14742', '3'), +('11', '60', '8', '28964', '16235', '3'), +('11', '60', '8', '28992', '16055', '3'), +('11', '60', '8', '28918', '14751', '3'), +('11', '60', '8', '8359', '14248', '3'), +('11', '60', '6', '28920', '14492', '3'), +('11', '60', '6', '28902', '12905', '3'), +('11', '60', '6', '28147', '12684', '3'), +('11', '60', '6', '28919', '10507', '3'), +('11', '60', '17', '26776', '17411', '3'), +('11', '60', '17', '28910', '17177', '3'), +('11', '60', '17', '26604', '16211', '3'), +('11', '60', '17', '55296', '15446', '3'), +('11', '60', '7', '28924', '15286', '3'), +('11', '60', '7', '7868', '14101', '3'), +('11', '60', '7', '8288', '12504', '3'), +('11', '60', '7', '26555', '11907', '3'), +('11', '60', '9', '31314', '24573', '3'), +('11', '60', '9', '59563', '22201', '3'), +('11', '60', '9', '30168', '20301', '3'), +('11', '60', '9', '30552', '19371', '3'), +('11', '60', '15', '51247', '35902', '3'), +('11', '60', '15', '11541', '23001', '3'), +('11', '60', '15', '28993', '15374', '3'), +('11', '60', '15', '28944', '13921', '3'), +('11', '60', '20', '11666', '28252', '3'), +('11', '60', '20', '28916', '16298', '3'), +('11', '60', '20', '30534', '13698', '3'), +('11', '60', '20', '26549', '13048', '3'), +('11', '60', '12', '28144', '50605', '3'), +('11', '60', '12', '30534', '13698', '3'), +('11', '60', '12', '28967', '12003', '3'), +('11', '60', '12', '28972', '10232', '3'), +('11', '60', '18', '26777', '14772', '3'), +('11', '60', '18', '28932', '12327', '3'), +('11', '60', '18', '8289', '12323', '3'), +('11', '60', '18', '27316', '10613', '3'), +('11', '60', '19', '31327', '30838', '3'), +('11', '60', '19', '31408', '23502', '3'), +('11', '60', '19', '28934', '16903', '3'), +('11', '60', '19', '30570', '15600', '3'), +('11', '60', '13', '28980', '38199', '3'), +('11', '60', '13', '26778', '19370', '3'), +('11', '60', '13', '28981', '15449', '3'), +('11', '60', '13', '28917', '14804', '3'), +('11', '60', '14', '28980', '38199', '3'), +('11', '60', '14', '26778', '19370', '3'), +('11', '60', '14', '26780', '16401', '3'), +('11', '60', '14', '28981', '15449', '3'), +('11', '60', '11', '26778', '19370', '3'), +('11', '60', '11', '30562', '13584', '3'), +('11', '60', '11', '1554', '12674', '3'), +('11', '60', '11', '28948', '12652', '3'), +('11', '60', '22', '10323', '0', '2'), +('11', '60', '22', '9248', '0', '2'), +('11', '60', '22', '12425', '0', '2'), +('11', '60', '22', '30014', '0', '2'), +('11', '60', '1', '31228', '12489', '2'), +('11', '60', '1', '10912', '7764', '2'), +('11', '60', '1', '62234', '6602', '2'), +('11', '60', '1', '1720', '5655', '2'), +('11', '60', '2', '10913', '12388', '2'), +('11', '60', '2', '48043', '10300', '2'), +('11', '60', '2', '29648', '9159', '2'), +('11', '60', '2', '1867', '9119', '2'), +('11', '60', '3', '31233', '13571', '2'), +('11', '60', '3', '1547', '11983', '2'), +('11', '60', '3', '31244', '11452', '2'), +('11', '60', '3', '31463', '10628', '2'), +('11', '60', '5', '31460', '12280', '2'), +('11', '60', '5', '31318', '10435', '2'), +('11', '60', '5', '29459', '9685', '2'), +('11', '60', '5', '27259', '9128', '2'), +('11', '60', '8', '1628', '13160', '2'), +('11', '60', '8', '31390', '10618', '2'), +('11', '60', '8', '11603', '9438', '2'), +('11', '60', '8', '5779', '9161', '2'), +('11', '60', '6', '29468', '10684', '2'), +('11', '60', '6', '1279', '7459', '2'), +('11', '60', '6', '29472', '6368', '2'), +('11', '60', '6', '1114', '5851', '2'), +('11', '60', '17', '31239', '16808', '2'), +('11', '60', '17', '10845', '15736', '2'), +('11', '60', '17', '1552', '14938', '2'), +('11', '60', '17', '29333', '11572', '2'), +('11', '60', '7', '31342', '8713', '2'), +('11', '60', '7', '29485', '7509', '2'), +('11', '60', '7', '31237', '7104', '2'), +('11', '60', '7', '31371', '4209', '2'), +('11', '60', '9', '31460', '12280', '2'), +('11', '60', '9', '31246', '8306', '2'), +('11', '60', '9', '1559', '7811', '2'), +('11', '60', '9', '12804', '6751', '2'), +('11', '60', '15', '25211', '12700', '2'), +('11', '60', '15', '31231', '12533', '2'), +('11', '60', '15', '25198', '9869', '2'), +('11', '60', '15', '62373', '7596', '2'), +('11', '60', '20', '25858', '13787', '2'), +('11', '60', '20', '2510', '12414', '2'), +('11', '60', '20', '1556', '12317', '2'), +('11', '60', '20', '6835', '8298', '2'), +('11', '60', '12', '25857', '10812', '2'), +('11', '60', '12', '31340', '10679', '2'), +('11', '60', '12', '31306', '8988', '2'), +('11', '60', '12', '25311', '3957', '2'), +('11', '60', '18', '31339', '10479', '2'), +('11', '60', '18', '31166', '6286', '2'), +('11', '60', '18', '31371', '4209', '2'), +('11', '60', '18', '26017', '3601', '2'), +('11', '60', '19', '29645', '15540', '2'), +('11', '60', '19', '31245', '14390', '2'), +('11', '60', '19', '31355', '9547', '2'), +('11', '60', '19', '31327', '8711', '2'), +('11', '60', '13', '1156', '14797', '2'), +('11', '60', '13', '31326', '13591', '2'), +('11', '60', '13', '1117', '12559', '2'), +('11', '60', '13', '20544', '12346', '2'), +('11', '60', '14', '2498', '13825', '2'), +('11', '60', '14', '31462', '11532', '2'), +('11', '60', '14', '29449', '10978', '2'), +('11', '60', '14', '31302', '10130', '2'), +('11', '60', '11', '31466', '14368', '2'), +('11', '60', '11', '1554', '13897', '2'), +('11', '60', '11', '2698', '10516', '2'), +('11', '60', '11', '31302', '10130', '2'), +('11', '60', '22', '10323', '0', '1'), +('11', '60', '22', '12425', '0', '1'), +('11', '60', '22', '9246', '0', '1'), +('11', '60', '22', '21509', '0', '1'), +('11', '60', '1', '10912', '12224', '1'), +('11', '60', '1', '62234', '8422', '1'), +('11', '60', '1', '5744', '3857', '1'), +('11', '60', '1', '14702', '3750', '1'), +('11', '60', '2', '10913', '18377', '1'), +('11', '60', '2', '48043', '14842', '1'), +('11', '60', '2', '1232', '5840', '1'), +('11', '60', '2', '1414', '5666', '1'), +('11', '60', '3', '1544', '7769', '1'), +('11', '60', '3', '5780', '7309', '1'), +('11', '60', '3', '11052', '6417', '1'), +('11', '60', '3', '46184', '5253', '1'), +('11', '60', '5', '14560', '6949', '1'), +('11', '60', '5', '14703', '6050', '1'), +('11', '60', '5', '11646', '4861', '1'), +('11', '60', '5', '8285', '4483', '1'), +('11', '60', '8', '1628', '16817', '1'), +('11', '60', '8', '11603', '12136', '1'), +('11', '60', '8', '1622', '10037', '1'), +('11', '60', '8', '5779', '9186', '1'), +('11', '60', '6', '29468', '14508', '1'), +('11', '60', '6', '1279', '8954', '1'), +('11', '60', '6', '1557', '5286', '1'), +('11', '60', '6', '1905', '5061', '1'), +('11', '60', '17', '10845', '21720', '1'), +('11', '60', '17', '11641', '11965', '1'), +('11', '60', '17', '24623', '11497', '1'), +('11', '60', '17', '1644', '10478', '1'), +('11', '60', '7', '27885', '5289', '1'), +('11', '60', '7', '1234', '3462', '1'), +('11', '60', '7', '1218', '3429', '1'), +('11', '60', '7', '1648', '2953', '1'), +('11', '60', '9', '12804', '6752', '1'), +('11', '60', '9', '1618', '4950', '1'), +('11', '60', '9', '27712', '4660', '1'), +('11', '60', '9', '4780', '3017', '1'), +('11', '60', '15', '27713', '7146', '1'), +('11', '60', '15', '5727', '6766', '1'), +('11', '60', '15', '5728', '5585', '1'), +('11', '60', '15', '14738', '5482', '1'), +('11', '60', '20', '1556', '15307', '1'), +('11', '60', '20', '11666', '8332', '1'), +('11', '60', '20', '5765', '8016', '1'), +('11', '60', '20', '2742', '5125', '1'), +('11', '60', '12', '4582', '9422', '1'), +('11', '60', '12', '1236', '4940', '1'), +('11', '60', '12', '20655', '3433', '1'), +('11', '60', '12', '2336', '3146', '1'), +('11', '60', '18', '5819', '4510', '1'), +('11', '60', '18', '24765', '3127', '1'), +('11', '60', '18', '1651', '2204', '1'), +('11', '60', '18', '4410', '1125', '1'), +('11', '60', '19', '5749', '4659', '1'), +('11', '60', '19', '4407', '3898', '1'), +('11', '60', '19', '68239', '3181', '1'), +('11', '60', '19', '1368', '2010', '1'), +('11', '60', '13', '20544', '18348', '1'), +('11', '60', '13', '24629', '13134', '1'), +('11', '60', '13', '24609', '11679', '1'), +('11', '60', '13', '24628', '8684', '1'), +('11', '60', '14', '24629', '13134', '1'), +('11', '60', '14', '24609', '11679', '1'), +('11', '60', '14', '14742', '8770', '1'), +('11', '60', '14', '14745', '8222', '1'), +('11', '60', '11', '46178', '7361', '1'), +('11', '60', '11', '5763', '7257', '1'), +('11', '60', '11', '5774', '7036', '1'), +('11', '60', '11', '5805', '5300', '1'), +('11', '61', '22', '66397', '0', '3'), +('11', '61', '22', '61948', '0', '3'), +('11', '61', '22', '21805', '0', '3'), +('11', '61', '22', '21807', '0', '3'), +('11', '61', '1', '30552', '19073', '3'), +('11', '61', '1', '28944', '13923', '3'), +('11', '61', '1', '29861', '12814', '3'), +('11', '61', '1', '63170', '12503', '3'), +('11', '61', '2', '26763', '31589', '3'), +('11', '61', '2', '1211', '20456', '3'), +('11', '61', '2', '1867', '14782', '3'), +('11', '61', '2', '51235', '14601', '3'), +('11', '61', '3', '5772', '20180', '3'), +('11', '61', '3', '30553', '13151', '3'), +('11', '61', '3', '31233', '12328', '3'), +('11', '61', '3', '7387', '12060', '3'), +('11', '61', '5', '26505', '22932', '3'), +('11', '61', '5', '8364', '17541', '3'), +('11', '61', '5', '29459', '15334', '3'), +('11', '61', '5', '28901', '14746', '3'), +('11', '61', '8', '28964', '16238', '3'), +('11', '61', '8', '28992', '16055', '3'), +('11', '61', '8', '28918', '14751', '3'), +('11', '61', '8', '8359', '14250', '3'), +('11', '61', '6', '28920', '14496', '3'), +('11', '61', '6', '28902', '12905', '3'), +('11', '61', '6', '28147', '12687', '3'), +('11', '61', '6', '28919', '10507', '3'), +('11', '61', '17', '26776', '17416', '3'), +('11', '61', '17', '28910', '17029', '3'), +('11', '61', '17', '26604', '16216', '3'), +('11', '61', '17', '55296', '15450', '3'), +('11', '61', '7', '28924', '15289', '3'), +('11', '61', '7', '7868', '14102', '3'), +('11', '61', '7', '8288', '12504', '3'), +('11', '61', '7', '26555', '11907', '3'), +('11', '61', '9', '31314', '23575', '3'), +('11', '61', '9', '59563', '21201', '3'), +('11', '61', '9', '30168', '19301', '3'), +('11', '61', '9', '30552', '19073', '3'), +('11', '61', '15', '51247', '34752', '3'), +('11', '61', '15', '11541', '21851', '3'), +('11', '61', '15', '28993', '15376', '3'), +('11', '61', '15', '28944', '13923', '3'), +('11', '61', '20', '11666', '27252', '3'), +('11', '61', '20', '28916', '16300', '3'), +('11', '61', '20', '30534', '13701', '3'), +('11', '61', '20', '26549', '13052', '3'), +('11', '61', '12', '28144', '49610', '3'), +('11', '61', '12', '30534', '13701', '3'), +('11', '61', '12', '28967', '12003', '3'), +('11', '61', '12', '28972', '10235', '3'), +('11', '61', '18', '26777', '14774', '3'), +('11', '61', '18', '28932', '12329', '3'), +('11', '61', '18', '8289', '12325', '3'), +('11', '61', '18', '27316', '10614', '3'), +('11', '61', '19', '31327', '29690', '3'), +('11', '61', '19', '31408', '22353', '3'), +('11', '61', '19', '28934', '16703', '3'), +('11', '61', '19', '30570', '15601', '3'), +('11', '61', '13', '28980', '37202', '3'), +('11', '61', '13', '26778', '19256', '3'), +('11', '61', '13', '28981', '15452', '3'), +('11', '61', '13', '28917', '14804', '3'), +('11', '61', '14', '28980', '37202', '3'), +('11', '61', '14', '26778', '19256', '3'), +('11', '61', '14', '26780', '16404', '3'), +('11', '61', '14', '28981', '15452', '3'), +('11', '61', '11', '26778', '19256', '3'), +('11', '61', '11', '30562', '13586', '3'), +('11', '61', '11', '1554', '12676', '3'), +('11', '61', '11', '28948', '12652', '3'), +('11', '62', '22', '66397', '0', '3'), +('11', '62', '22', '61948', '0', '3'), +('11', '62', '22', '21805', '0', '3'), +('11', '62', '22', '21807', '0', '3'), +('11', '62', '1', '30552', '18775', '3'), +('11', '62', '1', '28944', '13925', '3'), +('11', '62', '1', '29861', '12819', '3'), +('11', '62', '1', '63170', '12404', '3'), +('11', '62', '2', '26763', '30842', '3'), +('11', '62', '2', '1211', '19457', '3'), +('11', '62', '2', '51235', '14504', '3'), +('11', '62', '2', '1867', '14453', '3'), +('11', '62', '3', '5772', '20005', '3'), +('11', '62', '3', '30553', '13153', '3'), +('11', '62', '3', '31233', '12330', '3'), +('11', '62', '3', '7387', '12063', '3'), +('11', '62', '5', '26505', '21782', '3'), +('11', '62', '5', '8364', '17544', '3'), +('11', '62', '5', '29459', '15005', '3'), +('11', '62', '5', '28901', '14750', '3'), +('11', '62', '8', '28964', '16241', '3'), +('11', '62', '8', '28992', '16055', '3'), +('11', '62', '8', '28918', '14751', '3'), +('11', '62', '8', '8359', '14252', '3'), +('11', '62', '6', '28920', '14500', '3'), +('11', '62', '6', '28902', '12905', '3'), +('11', '62', '6', '28147', '12690', '3'), +('11', '62', '6', '28919', '10507', '3'), +('11', '62', '17', '26776', '17421', '3'), +('11', '62', '17', '28910', '16881', '3'), +('11', '62', '17', '26604', '16221', '3'), +('11', '62', '17', '55296', '15454', '3'), +('11', '62', '7', '28924', '15292', '3'), +('11', '62', '7', '7868', '14104', '3'), +('11', '62', '7', '8288', '12504', '3'), +('11', '62', '7', '26555', '11907', '3'), +('11', '62', '9', '31314', '22577', '3'), +('11', '62', '9', '59563', '20201', '3'), +('11', '62', '9', '30552', '18775', '3'), +('11', '62', '9', '30168', '18301', '3'), +('11', '62', '15', '51247', '33602', '3'), +('11', '62', '15', '11541', '20701', '3'), +('11', '62', '15', '28993', '15378', '3'), +('11', '62', '15', '28944', '13925', '3'), +('11', '62', '20', '11666', '26252', '3'), +('11', '62', '20', '28916', '16301', '3'), +('11', '62', '20', '30534', '13703', '3'), +('11', '62', '20', '26549', '13056', '3'), +('11', '62', '12', '28144', '48615', '3'), +('11', '62', '12', '30534', '13703', '3'), +('11', '62', '12', '28967', '12003', '3'), +('11', '62', '12', '28972', '10238', '3'), +('11', '62', '18', '26777', '14776', '3'), +('11', '62', '18', '28932', '12331', '3'), +('11', '62', '18', '8289', '12327', '3'), +('11', '62', '18', '27316', '10615', '3'), +('11', '62', '19', '31327', '28541', '3'), +('11', '62', '19', '31408', '21204', '3'), +('11', '62', '19', '28934', '16503', '3'), +('11', '62', '19', '30570', '15603', '3'), +('11', '62', '13', '28980', '36204', '3'), +('11', '62', '13', '26778', '19142', '3'), +('11', '62', '13', '28981', '15454', '3'), +('11', '62', '13', '28917', '14804', '3'), +('11', '62', '14', '28980', '36204', '3'), +('11', '62', '14', '26778', '19142', '3'), +('11', '62', '14', '26780', '16407', '3'), +('11', '62', '14', '28981', '15454', '3'), +('11', '62', '11', '26778', '19142', '3'), +('11', '62', '11', '30562', '13588', '3'), +('11', '62', '11', '1554', '12678', '3'), +('11', '62', '11', '28948', '12652', '3'), +('11', '63', '22', '66397', '0', '3'), +('11', '63', '22', '61948', '0', '3'), +('11', '63', '22', '21805', '0', '3'), +('11', '63', '22', '21807', '0', '3'), +('11', '63', '1', '30552', '18477', '3'), +('11', '63', '1', '28944', '13927', '3'), +('11', '63', '1', '29861', '12824', '3'), +('11', '63', '1', '63170', '12306', '3'), +('11', '63', '2', '26763', '30095', '3'), +('11', '63', '2', '1211', '18459', '3'), +('11', '63', '2', '51235', '14406', '3'), +('11', '63', '2', '1867', '14124', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '63', '3', '5772', '19831', '3'), +('11', '63', '3', '30553', '13156', '3'), +('11', '63', '3', '31233', '12332', '3'), +('11', '63', '3', '7387', '12065', '3'), +('11', '63', '5', '26505', '20632', '3'), +('11', '63', '5', '8364', '17547', '3'), +('11', '63', '5', '28901', '14754', '3'), +('11', '63', '5', '29459', '14676', '3'), +('11', '63', '8', '28964', '16244', '3'), +('11', '63', '8', '28992', '16055', '3'), +('11', '63', '8', '28918', '14751', '3'), +('11', '63', '8', '8359', '14255', '3'), +('11', '63', '6', '28920', '14504', '3'), +('11', '63', '6', '28902', '12905', '3'), +('11', '63', '6', '28147', '12693', '3'), +('11', '63', '6', '28919', '10507', '3'), +('11', '63', '17', '26776', '17426', '3'), +('11', '63', '17', '28910', '16733', '3'), +('11', '63', '17', '26604', '16226', '3'), +('11', '63', '17', '55296', '15459', '3'), +('11', '63', '7', '28924', '15295', '3'), +('11', '63', '7', '7868', '14105', '3'), +('11', '63', '7', '8288', '12504', '3'), +('11', '63', '7', '26555', '11907', '3'), +('11', '63', '9', '31314', '21579', '3'), +('11', '63', '9', '59563', '19201', '3'), +('11', '63', '9', '30552', '18477', '3'), +('11', '63', '9', '30168', '17301', '3'), +('11', '63', '15', '51247', '32452', '3'), +('11', '63', '15', '11541', '19551', '3'), +('11', '63', '15', '28993', '15380', '3'), +('11', '63', '15', '28944', '13927', '3'), +('11', '63', '20', '11666', '25252', '3'), +('11', '63', '20', '28916', '16303', '3'), +('11', '63', '20', '30534', '13705', '3'), +('11', '63', '20', '26549', '13061', '3'), +('11', '63', '12', '28144', '47621', '3'), +('11', '63', '12', '30534', '13705', '3'), +('11', '63', '12', '28967', '12003', '3'), +('11', '63', '12', '28972', '10241', '3'), +('11', '63', '18', '26777', '14778', '3'), +('11', '63', '18', '28932', '12333', '3'), +('11', '63', '18', '8289', '12329', '3'), +('11', '63', '18', '27316', '10616', '3'), +('11', '63', '19', '31327', '27392', '3'), +('11', '63', '19', '31408', '20055', '3'), +('11', '63', '19', '28934', '16303', '3'), +('11', '63', '19', '30570', '15604', '3'), +('11', '63', '13', '28980', '35206', '3'), +('11', '63', '13', '26778', '19029', '3'), +('11', '63', '13', '28981', '15456', '3'), +('11', '63', '13', '28917', '14804', '3'), +('11', '63', '14', '28980', '35206', '3'), +('11', '63', '14', '26778', '19029', '3'), +('11', '63', '14', '26780', '16410', '3'), +('11', '63', '14', '28981', '15456', '3'), +('11', '63', '11', '26778', '19029', '3'), +('11', '63', '11', '30562', '13590', '3'), +('11', '63', '11', '1554', '12680', '3'), +('11', '63', '11', '28948', '12652', '3'), +('11', '64', '22', '66397', '0', '3'), +('11', '64', '22', '61948', '0', '3'), +('11', '64', '22', '21805', '0', '3'), +('11', '64', '22', '21807', '0', '3'), +('11', '64', '1', '30552', '18179', '3'), +('11', '64', '1', '28944', '13929', '3'), +('11', '64', '1', '29861', '12829', '3'), +('11', '64', '1', '63170', '12208', '3'), +('11', '64', '2', '26763', '29348', '3'), +('11', '64', '2', '1211', '17460', '3'), +('11', '64', '2', '51235', '14309', '3'), +('11', '64', '2', '1867', '13795', '3'), +('11', '64', '3', '5772', '19656', '3'), +('11', '64', '3', '30553', '13158', '3'), +('11', '64', '3', '31233', '12334', '3'), +('11', '64', '3', '7387', '12068', '3'), +('11', '64', '5', '26505', '19482', '3'), +('11', '64', '5', '8364', '17550', '3'), +('11', '64', '5', '28901', '14758', '3'), +('11', '64', '5', '29459', '14347', '3'), +('11', '64', '8', '28964', '16247', '3'), +('11', '64', '8', '28992', '16055', '3'), +('11', '64', '8', '28918', '14751', '3'), +('11', '64', '8', '8359', '14257', '3'), +('11', '64', '6', '28920', '14508', '3'), +('11', '64', '6', '28902', '12905', '3'), +('11', '64', '6', '28147', '12696', '3'), +('11', '64', '6', '28919', '10507', '3'), +('11', '64', '17', '26776', '17431', '3'), +('11', '64', '17', '28910', '16585', '3'), +('11', '64', '17', '26604', '16231', '3'), +('11', '64', '17', '55296', '15463', '3'), +('11', '64', '7', '28924', '15299', '3'), +('11', '64', '7', '7868', '14107', '3'), +('11', '64', '7', '8288', '12504', '3'), +('11', '64', '7', '26555', '11907', '3'), +('11', '64', '9', '31314', '20581', '3'), +('11', '64', '9', '59563', '18201', '3'), +('11', '64', '9', '30552', '18179', '3'), +('11', '64', '9', '28891', '16802', '3'), +('11', '64', '15', '51247', '31302', '3'), +('11', '64', '15', '11541', '18401', '3'), +('11', '64', '15', '28993', '15382', '3'), +('11', '64', '15', '28944', '13929', '3'), +('11', '64', '20', '11666', '24252', '3'), +('11', '64', '20', '28916', '16304', '3'), +('11', '64', '20', '30534', '13708', '3'), +('11', '64', '20', '26549', '13065', '3'), +('11', '64', '12', '28144', '46626', '3'), +('11', '64', '12', '30534', '13708', '3'), +('11', '64', '12', '28967', '12003', '3'), +('11', '64', '12', '28972', '10244', '3'), +('11', '64', '18', '26777', '14780', '3'), +('11', '64', '18', '28932', '12335', '3'), +('11', '64', '18', '8289', '12331', '3'), +('11', '64', '18', '27316', '10617', '3'), +('11', '64', '19', '31327', '26244', '3'), +('11', '64', '19', '31408', '18905', '3'), +('11', '64', '19', '28934', '16103', '3'), +('11', '64', '19', '30570', '15606', '3'), +('11', '64', '13', '28980', '34209', '3'), +('11', '64', '13', '26778', '18915', '3'), +('11', '64', '13', '28981', '15459', '3'), +('11', '64', '13', '28917', '14804', '3'), +('11', '64', '14', '28980', '34209', '3'), +('11', '64', '14', '26778', '18915', '3'), +('11', '64', '14', '26780', '16413', '3'), +('11', '64', '14', '28981', '15459', '3'), +('11', '64', '11', '26778', '18915', '3'), +('11', '64', '11', '30562', '13592', '3'), +('11', '64', '11', '1554', '12682', '3'), +('11', '64', '11', '28948', '12652', '3'), +('11', '65', '22', '66397', '0', '7'), +('11', '65', '22', '62787', '0', '7'), +('11', '65', '22', '61948', '0', '7'), +('11', '65', '22', '21805', '0', '7'), +('11', '65', '1', '69106', '101822', '7'), +('11', '65', '1', '5594', '54631', '7'), +('11', '65', '1', '7130', '38058', '7'), +('11', '65', '1', '52121', '37978', '7'), +('11', '65', '2', '46141', '29571', '7'), +('11', '65', '2', '26763', '28602', '7'), +('11', '65', '2', '68007', '27500', '7'), +('11', '65', '2', '67733', '26882', '7'), +('11', '65', '3', '68819', '50202', '7'), +('11', '65', '3', '68783', '35488', '7'), +('11', '65', '3', '69132', '34779', '7'), +('11', '65', '3', '69157', '32620', '7'), +('11', '65', '5', '62446', '43528', '7'), +('11', '65', '5', '67625', '35284', '7'), +('11', '65', '5', '7756', '33759', '7'), +('11', '65', '5', '69135', '32323', '7'), +('11', '65', '8', '69164', '38409', '7'), +('11', '65', '8', '69064', '31033', '7'), +('11', '65', '8', '69072', '30219', '7'), +('11', '65', '8', '68954', '30203', '7'), +('11', '65', '6', '13638', '41857', '7'), +('11', '65', '6', '13634', '40791', '7'), +('11', '65', '6', '69163', '33884', '7'), +('11', '65', '6', '68841', '32367', '7'), +('11', '65', '17', '47653', '58752', '7'), +('11', '65', '17', '69153', '40053', '7'), +('11', '65', '17', '68782', '32334', '7'), +('11', '65', '17', '68990', '30585', '7'), +('11', '65', '7', '69176', '32568', '7'), +('11', '65', '7', '69082', '29653', '7'), +('11', '65', '7', '68007', '27500', '7'), +('11', '65', '7', '68921', '27081', '7'), +('11', '65', '9', '69129', '53529', '7'), +('11', '65', '9', '68767', '51883', '7'), +('11', '65', '9', '28665', '34512', '7'), +('11', '65', '9', '69100', '31982', '7'), +('11', '65', '15', '68672', '59600', '7'), +('11', '65', '15', '52121', '37978', '7'), +('11', '65', '15', '69160', '32710', '7'), +('11', '65', '15', '69060', '30948', '7'), +('11', '65', '20', '62446', '43528', '7'), +('11', '65', '20', '67625', '35284', '7'), +('11', '65', '20', '69134', '32785', '7'), +('11', '65', '20', '68951', '28335', '7'), +('11', '65', '12', '28144', '45631', '7'), +('11', '65', '12', '69086', '36133', '7'), +('11', '65', '12', '69255', '34342', '7'), +('11', '65', '12', '68007', '27500', '7'), +('11', '65', '18', '69149', '41461', '7'), +('11', '65', '18', '68991', '34770', '7'), +('11', '65', '18', '28649', '27985', '7'), +('11', '65', '18', '68007', '27500', '7'), +('11', '65', '19', '68923', '50168', '7'), +('11', '65', '19', '69251', '34083', '7'), +('11', '65', '19', '69078', '28719', '7'), +('11', '65', '19', '68007', '27500', '7'), +('11', '65', '13', '21876', '43548', '7'), +('11', '65', '13', '26748', '41987', '7'), +('11', '65', '13', '68445', '39749', '7'), +('11', '65', '13', '52054', '34949', '7'), +('11', '65', '14', '69404', '45187', '7'), +('11', '65', '14', '68117', '44268', '7'), +('11', '65', '14', '26748', '41987', '7'), +('11', '65', '14', '52054', '34949', '7'), +('11', '65', '11', '68952', '64594', '7'), +('11', '65', '11', '20508', '60559', '7'), +('11', '65', '11', '20898', '54198', '7'), +('11', '65', '11', '69162', '33652', '7'), +('11', '65', '22', '66397', '0', '6'), +('11', '65', '22', '62787', '0', '6'), +('11', '65', '22', '61948', '0', '6'), +('11', '65', '22', '21805', '0', '6'), +('11', '65', '1', '5594', '54631', '6'), +('11', '65', '1', '7130', '38058', '6'), +('11', '65', '1', '4118', '30805', '6'), +('11', '65', '1', '7132', '30483', '6'), +('11', '65', '2', '26763', '28602', '6'), +('11', '65', '2', '68007', '27500', '6'), +('11', '65', '2', '68006', '22000', '6'), +('11', '65', '2', '68195', '21781', '6'), +('11', '65', '3', '68007', '27500', '6'), +('11', '65', '3', '9435', '22838', '6'), +('11', '65', '3', '68006', '22000', '6'), +('11', '65', '3', '42230', '20000', '6'), +('11', '65', '5', '62446', '43528', '6'), +('11', '65', '5', '7756', '33759', '6'), +('11', '65', '5', '7769', '29688', '6'), +('11', '65', '5', '8774', '27541', '6'), +('11', '65', '8', '68007', '27500', '6'), +('11', '65', '8', '15815', '26752', '6'), +('11', '65', '8', '15805', '26196', '6'), +('11', '65', '8', '15847', '22713', '6'), +('11', '65', '6', '13638', '41857', '6'), +('11', '65', '6', '13634', '40791', '6'), +('11', '65', '6', '68007', '27500', '6'), +('11', '65', '6', '28661', '25683', '6'), +('11', '65', '17', '47653', '58752', '6'), +('11', '65', '17', '68007', '27500', '6'), +('11', '65', '17', '69403', '27455', '6'), +('11', '65', '17', '14747', '22011', '6'), +('11', '65', '7', '68007', '27500', '6'), +('11', '65', '7', '68006', '22000', '6'), +('11', '65', '7', '11618', '20716', '6'), +('11', '65', '7', '42230', '20000', '6'), +('11', '65', '9', '28665', '34512', '6'), +('11', '65', '9', '68007', '27500', '6'), +('11', '65', '9', '28668', '26001', '6'), +('11', '65', '9', '59564', '22201', '6'), +('11', '65', '15', '51247', '30152', '6'), +('11', '65', '15', '32109', '28457', '6'), +('11', '65', '15', '68007', '27500', '6'), +('11', '65', '15', '71237', '27006', '6'), +('11', '65', '20', '62446', '43528', '6'), +('11', '65', '20', '68007', '27500', '6'), +('11', '65', '20', '11666', '23252', '6'), +('11', '65', '20', '15927', '22953', '6'), +('11', '65', '12', '28144', '45631', '6'), +('11', '65', '12', '68007', '27500', '6'), +('11', '65', '12', '26996', '27033', '6'), +('11', '65', '12', '68006', '22000', '6'), +('11', '65', '18', '28649', '27985', '6'), +('11', '65', '18', '68007', '27500', '6'), +('11', '65', '18', '68006', '22000', '6'), +('11', '65', '18', '42230', '20000', '6'), +('11', '65', '19', '68007', '27500', '6'), +('11', '65', '19', '31327', '25095', '6'), +('11', '65', '19', '68196', '23447', '6'), +('11', '65', '19', '68006', '22000', '6'), +('11', '65', '13', '21876', '43548', '6'), +('11', '65', '13', '26748', '41987', '6'), +('11', '65', '13', '52054', '34949', '6'), +('11', '65', '13', '28980', '33211', '6'), +('11', '65', '14', '69404', '45187', '6'), +('11', '65', '14', '68117', '44268', '6'), +('11', '65', '14', '26748', '41987', '6'), +('11', '65', '14', '52054', '34949', '6'), +('11', '65', '11', '20508', '60559', '6'), +('11', '65', '11', '20898', '54198', '6'), +('11', '65', '11', '68007', '27500', '6'), +('11', '65', '11', '20496', '25869', '6'), +('11', '65', '22', '66397', '0', '5'), +('11', '65', '22', '62787', '0', '5'), +('11', '65', '22', '61948', '0', '5'), +('11', '65', '22', '21805', '0', '5'), +('11', '65', '1', '5594', '54631', '5'), +('11', '65', '1', '7130', '38058', '5'), +('11', '65', '1', '4118', '30805', '5'), +('11', '65', '1', '7132', '30483', '5'), +('11', '65', '2', '26763', '28602', '5'), +('11', '65', '2', '68195', '21781', '5'), +('11', '65', '2', '28653', '18177', '5'), +('11', '65', '2', '16158', '17567', '5'), +('11', '65', '3', '9435', '22838', '5'), +('11', '65', '3', '5772', '19481', '5'), +('11', '65', '3', '9444', '16766', '5'), +('11', '65', '3', '9468', '16159', '5'), +('11', '65', '5', '7756', '33759', '5'), +('11', '65', '5', '7769', '29688', '5'), +('11', '65', '5', '8774', '27541', '5'), +('11', '65', '5', '8782', '19203', '5'), +('11', '65', '8', '15815', '26752', '5'), +('11', '65', '8', '15805', '26196', '5'), +('11', '65', '8', '15847', '22713', '5'), +('11', '65', '8', '21998', '21863', '5'), +('11', '65', '6', '13638', '41857', '5'), +('11', '65', '6', '13634', '40791', '5'), +('11', '65', '6', '28661', '25683', '5'), +('11', '65', '6', '19144', '15214', '5'), +('11', '65', '17', '47653', '58752', '5'), +('11', '65', '17', '14747', '22011', '5'), +('11', '65', '17', '65242', '18496', '5'), +('11', '65', '17', '26776', '17436', '5'), +('11', '65', '7', '11618', '20716', '5'), +('11', '65', '7', '21994', '19616', '5'), +('11', '65', '7', '11324', '17303', '5'), +('11', '65', '7', '11323', '15816', '5'), +('11', '65', '9', '28665', '34512', '5'), +('11', '65', '9', '28668', '26001', '5'), +('11', '65', '9', '59564', '22201', '5'), +('11', '65', '9', '68198', '21639', '5'), +('11', '65', '15', '51247', '30152', '5'), +('11', '65', '15', '32109', '28457', '5'), +('11', '65', '15', '14818', '24133', '5'), +('11', '65', '15', '26990', '22391', '5'), +('11', '65', '20', '11666', '23252', '5'), +('11', '65', '20', '15927', '22953', '5'), +('11', '65', '20', '15877', '22374', '5'), +('11', '65', '20', '15881', '22158', '5'), +('11', '65', '12', '28144', '45631', '5'), +('11', '65', '12', '26996', '27033', '5'), +('11', '65', '12', '13623', '17089', '5'), +('11', '65', '12', '11878', '14939', '5'), +('11', '65', '18', '28649', '27985', '5'), +('11', '65', '18', '19024', '19004', '5'), +('11', '65', '18', '26777', '14782', '5'), +('11', '65', '18', '28932', '12337', '5'), +('11', '65', '19', '31327', '25095', '5'), +('11', '65', '19', '68196', '23447', '5'), +('11', '65', '19', '31408', '17756', '5'), +('11', '65', '19', '20431', '16965', '5'), +('11', '65', '13', '21876', '43548', '5'), +('11', '65', '13', '26748', '41987', '5'), +('11', '65', '13', '52054', '34949', '5'), +('11', '65', '13', '28980', '33211', '5'), +('11', '65', '14', '26748', '41987', '5'), +('11', '65', '14', '52054', '34949', '5'), +('11', '65', '14', '28980', '33211', '5'), +('11', '65', '14', '27285', '31414', '5'), +('11', '65', '11', '20508', '60559', '5'), +('11', '65', '11', '20898', '54198', '5'), +('11', '65', '11', '20496', '25869', '5'), +('11', '65', '11', '20519', '25559', '5'), +('11', '65', '22', '66397', '0', '4'), +('11', '65', '22', '62787', '0', '4'), +('11', '65', '22', '61948', '0', '4'), +('11', '65', '22', '21805', '0', '4'), +('11', '65', '1', '5594', '54631', '4'), +('11', '65', '1', '7130', '38058', '4'), +('11', '65', '1', '4118', '30805', '4'), +('11', '65', '1', '7132', '30483', '4'), +('11', '65', '2', '26763', '28602', '4'), +('11', '65', '2', '68195', '21781', '4'), +('11', '65', '2', '28653', '18177', '4'), +('11', '65', '2', '16158', '17567', '4'), +('11', '65', '3', '9435', '22838', '4'), +('11', '65', '3', '5772', '19481', '4'), +('11', '65', '3', '9444', '16766', '4'), +('11', '65', '3', '9468', '16159', '4'), +('11', '65', '5', '7756', '33759', '4'), +('11', '65', '5', '7769', '29688', '4'), +('11', '65', '5', '8774', '27541', '4'), +('11', '65', '5', '8782', '19203', '4'), +('11', '65', '8', '15815', '26752', '4'), +('11', '65', '8', '15805', '26196', '4'), +('11', '65', '8', '15847', '22713', '4'), +('11', '65', '8', '21998', '21863', '4'), +('11', '65', '6', '13638', '41857', '4'), +('11', '65', '6', '13634', '40791', '4'), +('11', '65', '6', '28661', '25683', '4'), +('11', '65', '6', '19144', '15214', '4'), +('11', '65', '17', '47653', '58752', '4'), +('11', '65', '17', '14747', '22011', '4'), +('11', '65', '17', '26776', '17436', '4'), +('11', '65', '17', '28910', '16437', '4'), +('11', '65', '7', '11618', '20716', '4'), +('11', '65', '7', '21994', '19616', '4'), +('11', '65', '7', '11324', '17303', '4'), +('11', '65', '7', '11323', '15816', '4'), +('11', '65', '9', '28665', '34512', '4'), +('11', '65', '9', '28668', '26001', '4'), +('11', '65', '9', '59564', '22201', '4'), +('11', '65', '9', '68198', '21639', '4'), +('11', '65', '15', '51247', '30152', '4'), +('11', '65', '15', '32109', '28457', '4'), +('11', '65', '15', '14818', '24133', '4'), +('11', '65', '15', '26990', '22391', '4'), +('11', '65', '20', '11666', '23252', '4'), +('11', '65', '20', '15927', '22953', '4'), +('11', '65', '20', '15877', '22374', '4'), +('11', '65', '20', '15881', '22158', '4'), +('11', '65', '12', '28144', '45631', '4'), +('11', '65', '12', '26996', '27033', '4'), +('11', '65', '12', '13623', '17089', '4'), +('11', '65', '12', '11878', '14939', '4'), +('11', '65', '18', '28649', '27985', '4'), +('11', '65', '18', '19024', '19004', '4'), +('11', '65', '18', '26777', '14782', '4'), +('11', '65', '18', '28932', '12337', '4'), +('11', '65', '19', '31327', '25095', '4'), +('11', '65', '19', '68196', '23447', '4'), +('11', '65', '19', '31408', '17756', '4'), +('11', '65', '19', '20431', '16965', '4'), +('11', '65', '13', '21876', '43548', '4'), +('11', '65', '13', '26748', '41987', '4'), +('11', '65', '13', '52054', '34949', '4'), +('11', '65', '13', '28980', '33211', '4'), +('11', '65', '14', '26748', '41987', '4'), +('11', '65', '14', '52054', '34949', '4'), +('11', '65', '14', '28980', '33211', '4'), +('11', '65', '14', '27285', '31414', '4'), +('11', '65', '11', '20508', '60559', '4'), +('11', '65', '11', '20898', '54198', '4'), +('11', '65', '11', '20496', '25869', '4'), +('11', '65', '11', '20519', '25559', '4'), +('11', '66', '22', '66397', '0', '7'), +('11', '66', '22', '62787', '0', '7'), +('11', '66', '22', '61948', '0', '7'), +('11', '66', '22', '21805', '0', '7'), +('11', '66', '1', '69106', '100078', '7'), +('11', '66', '1', '5594', '53136', '7'), +('11', '66', '1', '7130', '37563', '7'), +('11', '66', '1', '52121', '37481', '7'), +('11', '66', '2', '46141', '29575', '7'), +('11', '66', '2', '26763', '27855', '7'), +('11', '66', '2', '67733', '26887', '7'), +('11', '66', '2', '68007', '26250', '7'), +('11', '66', '3', '68819', '48705', '7'), +('11', '66', '3', '68783', '34992', '7'), +('11', '66', '3', '69132', '34784', '7'), +('11', '66', '3', '69157', '32624', '7'), +('11', '66', '5', '62446', '42281', '7'), +('11', '66', '5', '67625', '35289', '7'), +('11', '66', '5', '7756', '32610', '7'), +('11', '66', '5', '69135', '32327', '7'), +('11', '66', '8', '69164', '38264', '7'), +('11', '66', '8', '69064', '31038', '7'), +('11', '66', '8', '69072', '30223', '7'), +('11', '66', '8', '68954', '30206', '7'), +('11', '66', '6', '13638', '40861', '7'), +('11', '66', '6', '13634', '39794', '7'), +('11', '66', '6', '69163', '33889', '7'), +('11', '66', '6', '68841', '32172', '7'), +('11', '66', '17', '47653', '57258', '7'), +('11', '66', '17', '69153', '39879', '7'), +('11', '66', '17', '68782', '32139', '7'), +('11', '66', '17', '68990', '30590', '7'), +('11', '66', '7', '69176', '32572', '7'), +('11', '66', '7', '69082', '29656', '7'), +('11', '66', '7', '68921', '27086', '7'), +('11', '66', '7', '68007', '26250', '7'), +('11', '66', '9', '69129', '52732', '7'), +('11', '66', '9', '68767', '50385', '7'), +('11', '66', '9', '28665', '34015', '7'), +('11', '66', '9', '69100', '31987', '7'), +('11', '66', '15', '68672', '58353', '7'), +('11', '66', '15', '52121', '37481', '7'), +('11', '66', '15', '69160', '32710', '7'), +('11', '66', '15', '69060', '30954', '7'), +('11', '66', '20', '62446', '42281', '7'), +('11', '66', '20', '67625', '35289', '7'), +('11', '66', '20', '69134', '32790', '7'), +('11', '66', '20', '68951', '28340', '7'), +('11', '66', '12', '28144', '44636', '7'), +('11', '66', '12', '69086', '35838', '7'), +('11', '66', '12', '69255', '34345', '7'), +('11', '66', '12', '26996', '26838', '7'), +('11', '66', '18', '69149', '41216', '7'), +('11', '66', '18', '68991', '34475', '7'), +('11', '66', '18', '28649', '27990', '7'), +('11', '66', '18', '68751', '26834', '7'), +('11', '66', '19', '68923', '48672', '7'), +('11', '66', '19', '69251', '34088', '7'), +('11', '66', '19', '69078', '28723', '7'), +('11', '66', '19', '68007', '26250', '7'), +('11', '66', '13', '21876', '42553', '7'), +('11', '66', '13', '26748', '40741', '7'), +('11', '66', '13', '68445', '38502', '7'), +('11', '66', '13', '52054', '33802', '7'), +('11', '66', '14', '69404', '43940', '7'), +('11', '66', '14', '68117', '43018', '7'), +('11', '66', '14', '26748', '40741', '7'), +('11', '66', '14', '52054', '33802', '7'), +('11', '66', '11', '68952', '63098', '7'), +('11', '66', '11', '20508', '59309', '7'), +('11', '66', '11', '20898', '52701', '7'), +('11', '66', '11', '69162', '33658', '7'), +('11', '67', '22', '66397', '0', '7'), +('11', '67', '22', '62787', '0', '7'), +('11', '67', '22', '61948', '0', '7'), +('11', '67', '22', '21805', '0', '7'), +('11', '67', '1', '69106', '98334', '7'), +('11', '67', '1', '5594', '51641', '7'), +('11', '67', '1', '7130', '37068', '7'), +('11', '67', '1', '52121', '36984', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '67', '2', '46141', '29579', '7'), +('11', '67', '2', '26763', '27108', '7'), +('11', '67', '2', '67733', '26892', '7'), +('11', '67', '2', '68007', '25000', '7'), +('11', '67', '3', '68819', '47208', '7'), +('11', '67', '3', '69132', '34789', '7'), +('11', '67', '3', '68783', '34496', '7'), +('11', '67', '3', '69157', '32628', '7'), +('11', '67', '5', '62446', '41034', '7'), +('11', '67', '5', '67625', '35294', '7'), +('11', '67', '5', '69135', '32331', '7'), +('11', '67', '5', '7756', '31462', '7'), +('11', '67', '8', '69164', '38119', '7'), +('11', '67', '8', '69064', '31043', '7'), +('11', '67', '8', '69072', '30227', '7'), +('11', '67', '8', '68954', '30209', '7'), +('11', '67', '6', '13638', '39865', '7'), +('11', '67', '6', '13634', '38798', '7'), +('11', '67', '6', '69163', '33894', '7'), +('11', '67', '6', '68841', '31976', '7'), +('11', '67', '17', '47653', '55764', '7'), +('11', '67', '17', '69153', '39705', '7'), +('11', '67', '17', '68782', '31944', '7'), +('11', '67', '17', '68990', '30595', '7'), +('11', '67', '7', '69176', '32576', '7'), +('11', '67', '7', '69082', '29659', '7'), +('11', '67', '7', '68921', '27091', '7'), +('11', '67', '7', '68007', '25000', '7'), +('11', '67', '9', '69129', '51936', '7'), +('11', '67', '9', '68767', '48887', '7'), +('11', '67', '9', '28665', '33519', '7'), +('11', '67', '9', '69100', '31992', '7'), +('11', '67', '15', '68672', '57106', '7'), +('11', '67', '15', '52121', '36984', '7'), +('11', '67', '15', '69160', '32710', '7'), +('11', '67', '15', '69060', '30960', '7'), +('11', '67', '20', '62446', '41034', '7'), +('11', '67', '20', '67625', '35294', '7'), +('11', '67', '20', '69134', '32795', '7'), +('11', '67', '20', '68951', '28345', '7'), +('11', '67', '12', '28144', '43641', '7'), +('11', '67', '12', '69086', '35543', '7'), +('11', '67', '12', '69255', '34349', '7'), +('11', '67', '12', '26996', '26643', '7'), +('11', '67', '18', '69149', '40972', '7'), +('11', '67', '18', '68991', '34179', '7'), +('11', '67', '18', '28649', '27995', '7'), +('11', '67', '18', '68751', '26839', '7'), +('11', '67', '19', '68923', '47176', '7'), +('11', '67', '19', '69251', '34093', '7'), +('11', '67', '19', '69078', '28727', '7'), +('11', '67', '19', '68007', '25000', '7'), +('11', '67', '13', '21876', '41557', '7'), +('11', '67', '13', '26748', '39495', '7'), +('11', '67', '13', '68445', '37255', '7'), +('11', '67', '13', '69159', '33363', '7'), +('11', '67', '14', '69404', '42693', '7'), +('11', '67', '14', '68117', '41768', '7'), +('11', '67', '14', '26748', '39495', '7'), +('11', '67', '14', '69159', '33363', '7'), +('11', '67', '11', '68952', '61602', '7'), +('11', '67', '11', '20508', '58059', '7'), +('11', '67', '11', '20898', '51204', '7'), +('11', '67', '11', '69162', '33664', '7'), +('11', '68', '22', '66397', '0', '7'), +('11', '68', '22', '62787', '0', '7'), +('11', '68', '22', '61948', '0', '7'), +('11', '68', '22', '21805', '0', '7'), +('11', '68', '1', '69106', '96590', '7'), +('11', '68', '1', '5594', '50146', '7'), +('11', '68', '1', '7130', '36573', '7'), +('11', '68', '1', '52121', '36487', '7'), +('11', '68', '2', '46141', '29583', '7'), +('11', '68', '2', '67733', '26897', '7'), +('11', '68', '2', '26763', '26361', '7'), +('11', '68', '2', '68007', '23750', '7'), +('11', '68', '3', '68819', '45711', '7'), +('11', '68', '3', '69132', '34794', '7'), +('11', '68', '3', '68783', '34000', '7'), +('11', '68', '3', '69157', '32632', '7'), +('11', '68', '5', '62446', '39788', '7'), +('11', '68', '5', '67625', '35299', '7'), +('11', '68', '5', '69135', '32335', '7'), +('11', '68', '5', '69097', '30648', '7'), +('11', '68', '8', '69164', '37974', '7'), +('11', '68', '8', '69064', '31048', '7'), +('11', '68', '8', '69072', '30231', '7'), +('11', '68', '8', '68954', '30212', '7'), +('11', '68', '6', '13638', '38869', '7'), +('11', '68', '6', '13634', '37802', '7'), +('11', '68', '6', '69163', '33899', '7'), +('11', '68', '6', '68841', '31780', '7'), +('11', '68', '17', '47653', '54270', '7'), +('11', '68', '17', '69153', '39531', '7'), +('11', '68', '17', '68782', '31749', '7'), +('11', '68', '17', '68990', '30600', '7'), +('11', '68', '7', '69176', '32580', '7'), +('11', '68', '7', '69082', '29662', '7'), +('11', '68', '7', '68921', '27096', '7'), +('11', '68', '7', '68007', '23750', '7'), +('11', '68', '9', '69129', '51139', '7'), +('11', '68', '9', '68767', '47390', '7'), +('11', '68', '9', '28665', '33022', '7'), +('11', '68', '9', '69100', '31997', '7'), +('11', '68', '15', '68672', '55859', '7'), +('11', '68', '15', '52121', '36487', '7'), +('11', '68', '15', '69160', '32710', '7'), +('11', '68', '15', '69060', '30966', '7'), +('11', '68', '20', '62446', '39788', '7'), +('11', '68', '20', '67625', '35299', '7'), +('11', '68', '20', '69134', '32800', '7'), +('11', '68', '20', '68951', '28350', '7'), +('11', '68', '12', '28144', '42646', '7'), +('11', '68', '12', '69086', '35248', '7'), +('11', '68', '12', '69255', '34353', '7'), +('11', '68', '12', '26996', '26448', '7'), +('11', '68', '18', '69149', '40727', '7'), +('11', '68', '18', '68991', '33883', '7'), +('11', '68', '18', '28649', '28000', '7'), +('11', '68', '18', '68751', '26844', '7'), +('11', '68', '19', '68923', '45680', '7'), +('11', '68', '19', '69251', '34098', '7'), +('11', '68', '19', '69078', '28732', '7'), +('11', '68', '19', '68007', '23750', '7'), +('11', '68', '13', '21876', '40561', '7'), +('11', '68', '13', '26748', '38248', '7'), +('11', '68', '13', '68445', '36008', '7'), +('11', '68', '13', '69159', '33369', '7'), +('11', '68', '14', '69404', '41446', '7'), +('11', '68', '14', '68117', '40518', '7'), +('11', '68', '14', '26748', '38248', '7'), +('11', '68', '14', '69159', '33369', '7'), +('11', '68', '11', '68952', '60106', '7'), +('11', '68', '11', '20508', '56809', '7'), +('11', '68', '11', '20898', '49707', '7'), +('11', '68', '11', '69162', '33670', '7'), +('11', '69', '22', '66397', '0', '7'), +('11', '69', '22', '62787', '0', '7'), +('11', '69', '22', '61948', '0', '7'), +('11', '69', '22', '21805', '0', '7'), +('11', '69', '1', '69106', '94846', '7'), +('11', '69', '1', '5594', '48652', '7'), +('11', '69', '1', '7130', '36078', '7'), +('11', '69', '1', '52121', '35990', '7'), +('11', '69', '2', '46141', '29587', '7'), +('11', '69', '2', '67733', '26902', '7'), +('11', '69', '2', '26763', '25614', '7'), +('11', '69', '2', '68007', '22500', '7'), +('11', '69', '3', '68819', '44214', '7'), +('11', '69', '3', '69132', '34799', '7'), +('11', '69', '3', '68783', '33504', '7'), +('11', '69', '3', '69157', '32636', '7'), +('11', '69', '5', '62446', '38541', '7'), +('11', '69', '5', '67625', '35304', '7'), +('11', '69', '5', '69135', '32339', '7'), +('11', '69', '5', '69097', '30653', '7'), +('11', '69', '8', '69164', '37829', '7'), +('11', '69', '8', '69064', '31053', '7'), +('11', '69', '8', '69072', '30235', '7'), +('11', '69', '8', '68954', '30215', '7'), +('11', '69', '6', '13638', '37873', '7'), +('11', '69', '6', '13634', '36805', '7'), +('11', '69', '6', '69163', '33904', '7'), +('11', '69', '6', '68841', '31584', '7'), +('11', '69', '17', '47653', '52776', '7'), +('11', '69', '17', '69153', '39357', '7'), +('11', '69', '17', '68782', '31554', '7'), +('11', '69', '17', '68990', '30605', '7'), +('11', '69', '7', '69176', '32584', '7'), +('11', '69', '7', '69082', '29665', '7'), +('11', '69', '7', '68921', '27101', '7'), +('11', '69', '7', '68007', '22500', '7'), +('11', '69', '9', '69129', '50342', '7'), +('11', '69', '9', '68767', '45892', '7'), +('11', '69', '9', '28665', '32526', '7'), +('11', '69', '9', '69100', '32002', '7'), +('11', '69', '15', '68672', '54612', '7'), +('11', '69', '15', '52121', '35990', '7'), +('11', '69', '15', '69160', '32710', '7'), +('11', '69', '15', '69060', '30972', '7'), +('11', '69', '20', '62446', '38541', '7'), +('11', '69', '20', '67625', '35304', '7'), +('11', '69', '20', '69134', '32805', '7'), +('11', '69', '20', '68951', '28355', '7'), +('11', '69', '12', '28144', '41651', '7'), +('11', '69', '12', '69086', '34953', '7'), +('11', '69', '12', '69255', '34356', '7'), +('11', '69', '12', '26996', '26253', '7'), +('11', '69', '18', '69149', '40482', '7'), +('11', '69', '18', '68991', '33587', '7'), +('11', '69', '18', '28649', '28005', '7'), +('11', '69', '18', '68751', '26849', '7'), +('11', '69', '19', '68923', '44184', '7'), +('11', '69', '19', '69251', '34103', '7'), +('11', '69', '19', '69078', '28736', '7'), +('11', '69', '19', '68196', '23472', '7'), +('11', '69', '13', '21876', '39565', '7'), +('11', '69', '13', '26748', '37002', '7'), +('11', '69', '13', '68445', '34761', '7'), +('11', '69', '13', '69159', '33375', '7'), +('11', '69', '14', '69404', '40199', '7'), +('11', '69', '14', '68117', '39268', '7'), +('11', '69', '14', '26748', '37002', '7'), +('11', '69', '14', '69159', '33375', '7'), +('11', '69', '11', '68952', '58610', '7'), +('11', '69', '11', '20508', '55559', '7'), +('11', '69', '11', '20898', '48210', '7'), +('11', '69', '11', '69162', '33676', '7'), +('11', '70', '22', '21805', '0', '11'), +('11', '70', '22', '61948', '0', '11'), +('11', '70', '22', '21807', '0', '11'), +('11', '70', '22', '12425', '0', '11'), +('11', '70', '1', '83594', '93261', '11'), +('11', '70', '1', '69106', '93103', '11'), +('11', '70', '1', '70981', '61150', '11'), +('11', '70', '1', '5594', '47157', '11'), +('11', '70', '2', '39358', '50359', '11'), +('11', '70', '2', '83563', '42020', '11'), +('11', '70', '2', '39285', '41486', '11'), +('11', '70', '2', '70923', '38381', '11'), +('11', '70', '3', '39368', '50876', '11'), +('11', '70', '3', '70602', '49684', '11'), +('11', '70', '3', '83658', '47423', '11'), +('11', '70', '3', '39312', '43781', '11'), +('11', '70', '5', '83612', '68680', '11'), +('11', '70', '5', '51701', '50736', '11'), +('11', '70', '5', '39340', '46726', '11'), +('11', '70', '5', '39328', '43524', '11'), +('11', '70', '8', '70704', '95099', '11'), +('11', '70', '8', '83659', '44588', '11'), +('11', '70', '8', '39352', '44138', '11'), +('11', '70', '8', '39330', '43575', '11'), +('11', '70', '6', '39224', '88948', '11'), +('11', '70', '6', '83407', '53588', '11'), +('11', '70', '6', '39362', '46500', '11'), +('11', '70', '6', '39263', '45828', '11'), +('11', '70', '17', '47653', '51282', '11'), +('11', '70', '17', '83606', '50503', '11'), +('11', '70', '17', '70928', '43414', '11'), +('11', '70', '17', '69153', '39184', '11'), +('11', '70', '7', '83567', '41170', '11'), +('11', '70', '7', '70924', '37645', '11'), +('11', '70', '7', '47207', '35939', '11'), +('11', '70', '7', '83543', '35809', '11'), +('11', '70', '9', '39226', '75655', '11'), +('11', '70', '9', '69129', '49545', '11'), +('11', '70', '9', '39336', '47023', '11'), +('11', '70', '9', '51709', '44520', '11'), +('11', '70', '15', '68672', '53365', '11'), +('11', '70', '15', '39376', '50251', '11'), +('11', '70', '15', '83595', '47912', '11'), +('11', '70', '15', '83628', '42792', '11'), +('11', '70', '20', '47281', '73134', '11'), +('11', '70', '20', '47284', '67518', '11'), +('11', '70', '20', '71609', '49605', '11'), +('11', '70', '20', '39350', '46311', '11'), +('11', '70', '12', '83553', '41209', '11'), +('11', '70', '12', '28144', '40656', '11'), +('11', '70', '12', '83571', '40545', '11'), +('11', '70', '12', '70926', '37632', '11'), +('11', '70', '18', '83610', '71652', '11'), +('11', '70', '18', '70929', '58738', '11'), +('11', '70', '18', '69149', '40237', '11'), +('11', '70', '18', '71649', '38181', '11'), +('11', '70', '19', '83575', '80845', '11'), +('11', '70', '19', '70927', '69613', '11'), +('11', '70', '19', '68923', '42688', '11'), +('11', '70', '19', '83497', '40657', '11'), +('11', '70', '13', '83632', '79690', '11'), +('11', '70', '13', '39295', '49683', '11'), +('11', '70', '13', '39351', '44984', '11'), +('11', '70', '13', '39324', '42877', '11'), +('11', '70', '14', '83500', '70741', '11'), +('11', '70', '14', '83641', '50507', '11'), +('11', '70', '14', '39372', '50243', '11'), +('11', '70', '14', '39295', '49683', '11'), +('11', '70', '11', '83642', '94943', '11'), +('11', '70', '11', '68952', '57114', '11'), +('11', '70', '11', '20508', '54310', '11'), +('11', '70', '11', '39320', '50732', '11'), +('11', '70', '22', '61948', '0', '10'), +('11', '70', '22', '66397', '0', '10'), +('11', '70', '22', '21805', '0', '10'), +('11', '70', '22', '21807', '0', '10'), +('11', '70', '1', '83594', '93261', '10'), +('11', '70', '1', '69106', '93103', '10'), +('11', '70', '1', '70981', '61150', '10'), +('11', '70', '1', '5594', '47157', '10'), +('11', '70', '2', '83563', '42020', '10'), +('11', '70', '2', '70923', '38381', '10'), +('11', '70', '2', '47211', '35038', '10'), +('11', '70', '2', '83505', '34207', '10'), +('11', '70', '3', '70602', '49684', '10'), +('11', '70', '3', '83658', '47423', '10'), +('11', '70', '3', '47299', '43136', '10'), +('11', '70', '3', '68819', '42717', '10'), +('11', '70', '5', '83612', '68680', '10'), +('11', '70', '5', '47276', '42823', '10'), +('11', '70', '5', '83651', '42417', '10'), +('11', '70', '5', '83620', '42029', '10'), +('11', '70', '8', '70704', '95099', '10'), +('11', '70', '8', '83659', '44588', '10'), +('11', '70', '8', '47306', '43121', '10'), +('11', '70', '8', '71665', '40664', '10'), +('11', '70', '6', '83407', '53588', '10'), +('11', '70', '6', '83660', '43888', '10'), +('11', '70', '6', '83635', '41463', '10'), +('11', '70', '6', '47280', '38827', '10'), +('11', '70', '17', '47653', '51282', '10'), +('11', '70', '17', '83606', '50503', '10'), +('11', '70', '17', '70928', '43414', '10'), +('11', '70', '17', '69153', '39184', '10'), +('11', '70', '7', '83567', '41170', '10'), +('11', '70', '7', '70924', '37645', '10'), +('11', '70', '7', '47207', '35939', '10'), +('11', '70', '7', '83543', '35809', '10'), +('11', '70', '9', '69129', '49545', '10'), +('11', '70', '9', '68767', '44394', '10'), +('11', '70', '9', '83655', '44384', '10'), +('11', '70', '9', '70925', '36909', '10'), +('11', '70', '15', '68672', '53365', '10'), +('11', '70', '15', '83595', '47912', '10'), +('11', '70', '15', '83628', '42792', '10'), +('11', '70', '15', '83629', '41380', '10'), +('11', '70', '20', '47281', '73134', '10'), +('11', '70', '20', '47284', '67518', '10'), +('11', '70', '20', '71609', '49605', '10'), +('11', '70', '20', '83650', '42337', '10'), +('11', '70', '12', '83553', '41209', '10'), +('11', '70', '12', '28144', '40656', '10'), +('11', '70', '12', '83571', '40545', '10'), +('11', '70', '12', '70926', '37632', '10'), +('11', '70', '18', '83610', '71652', '10'), +('11', '70', '18', '70929', '58738', '10'), +('11', '70', '18', '69149', '40237', '10'), +('11', '70', '18', '71649', '38181', '10'), +('11', '70', '19', '83575', '80845', '10'), +('11', '70', '19', '70927', '69613', '10'), +('11', '70', '19', '68923', '42688', '10'), +('11', '70', '19', '83497', '40657', '10'), +('11', '70', '13', '83632', '79690', '10'), +('11', '70', '13', '64067', '41635', '10'), +('11', '70', '13', '71671', '40739', '10'), +('11', '70', '13', '21876', '38570', '10'), +('11', '70', '14', '83500', '70741', '10'), +('11', '70', '14', '83641', '50507', '10'), +('11', '70', '14', '83656', '45206', '10'), +('11', '70', '14', '39315', '43186', '10'), +('11', '70', '11', '83642', '94943', '10'), +('11', '70', '11', '68952', '57114', '10'), +('11', '70', '11', '20508', '54310', '10'), +('11', '70', '11', '71652', '49131', '10'), +('11', '70', '22', '66397', '0', '9'), +('11', '70', '22', '62787', '0', '9'), +('11', '70', '22', '61948', '0', '9'), +('11', '70', '22', '21805', '0', '9'), +('11', '70', '1', '69106', '93103', '9'), +('11', '70', '1', '70981', '61150', '9'), +('11', '70', '1', '5594', '47157', '9'), +('11', '70', '1', '47288', '39793', '9'), +('11', '70', '2', '70923', '38381', '9'), +('11', '70', '2', '47211', '35038', '9'), +('11', '70', '2', '70724', '33629', '9'), +('11', '70', '2', '46141', '29592', '9'), +('11', '70', '3', '70602', '49684', '9'), +('11', '70', '3', '47299', '43136', '9'), +('11', '70', '3', '68819', '42717', '9'), +('11', '70', '3', '47302', '37353', '9'), +('11', '70', '5', '47276', '42823', '9'), +('11', '70', '5', '62446', '37294', '9'), +('11', '70', '5', '67625', '35309', '9'), +('11', '70', '5', '47224', '34874', '9'), +('11', '70', '8', '70704', '95099', '9'), +('11', '70', '8', '47306', '43121', '9'), +('11', '70', '8', '71665', '40664', '9'), +('11', '70', '8', '69164', '37684', '9'), +('11', '70', '6', '47280', '38827', '9'), +('11', '70', '6', '13638', '36877', '9'), +('11', '70', '6', '13634', '35809', '9'), +('11', '70', '6', '47228', '34959', '9'), +('11', '70', '17', '47653', '51282', '9'), +('11', '70', '17', '70928', '43414', '9'), +('11', '70', '17', '69153', '39184', '9'), +('11', '70', '17', '70714', '35077', '9'), +('11', '70', '7', '70924', '37645', '9'), +('11', '70', '7', '47207', '35939', '9'), +('11', '70', '7', '69176', '32588', '9'), +('11', '70', '7', '69082', '29668', '9'), +('11', '70', '9', '69129', '49545', '9'), +('11', '70', '9', '68767', '44394', '9'), +('11', '70', '9', '70925', '36909', '9'), +('11', '70', '9', '47223', '35153', '9'), +('11', '70', '15', '68672', '53365', '9'), +('11', '70', '15', '47290', '38392', '9'), +('11', '70', '15', '47293', '38331', '9'), +('11', '70', '15', '47240', '36647', '9'), +('11', '70', '20', '47281', '73134', '9'), +('11', '70', '20', '47284', '67518', '9'), +('11', '70', '20', '71609', '49605', '9'), +('11', '70', '20', '47282', '37612', '9'), +('11', '70', '12', '28144', '40656', '9'), +('11', '70', '12', '70926', '37632', '9'), +('11', '70', '12', '47215', '35409', '9'), +('11', '70', '12', '69086', '34658', '9'), +('11', '70', '18', '70929', '58738', '9'), +('11', '70', '18', '69149', '40237', '9'), +('11', '70', '18', '71649', '38181', '9'), +('11', '70', '18', '47203', '35683', '9'), +('11', '70', '19', '70927', '69613', '9'), +('11', '70', '19', '68923', '42688', '9'), +('11', '70', '19', '47219', '38640', '9'), +('11', '70', '19', '69251', '34108', '9'), +('11', '70', '13', '64067', '41635', '9'), +('11', '70', '13', '71671', '40739', '9'), +('11', '70', '13', '21876', '38570', '9'), +('11', '70', '13', '47308', '38355', '9'), +('11', '70', '14', '39315', '43186', '9'), +('11', '70', '14', '71661', '42371', '9'), +('11', '70', '14', '71671', '40739', '9'), +('11', '70', '14', '71669', '39911', '9'), +('11', '70', '11', '68952', '57114', '9'), +('11', '70', '11', '20508', '54310', '9'), +('11', '70', '11', '71652', '49131', '9'), +('11', '70', '11', '20898', '46713', '9'), +('11', '70', '22', '66397', '0', '8'), +('11', '70', '22', '62787', '0', '8'), +('11', '70', '22', '61948', '0', '8'), +('11', '70', '22', '21805', '0', '8'), +('11', '70', '1', '69106', '93103', '8'), +('11', '70', '1', '5594', '47157', '8'), +('11', '70', '1', '47288', '39793', '8'), +('11', '70', '1', '47234', '38218', '8'), +('11', '70', '2', '70923', '38381', '8'), +('11', '70', '2', '47211', '35038', '8'), +('11', '70', '2', '70724', '33629', '8'), +('11', '70', '2', '46141', '29592', '8'), +('11', '70', '3', '70602', '49684', '8'), +('11', '70', '3', '47299', '43136', '8'), +('11', '70', '3', '68819', '42717', '8'), +('11', '70', '3', '47302', '37353', '8'), +('11', '70', '5', '47276', '42823', '8'), +('11', '70', '5', '62446', '37294', '8'), +('11', '70', '5', '67625', '35309', '8'), +('11', '70', '5', '47224', '34874', '8'), +('11', '70', '8', '70704', '95099', '8'), +('11', '70', '8', '47306', '43121', '8'), +('11', '70', '8', '69164', '37684', '8'), +('11', '70', '8', '47304', '35028', '8'), +('11', '70', '6', '47280', '38827', '8'), +('11', '70', '6', '13638', '36877', '8'), +('11', '70', '6', '13634', '35809', '8'), +('11', '70', '6', '47228', '34959', '8'), +('11', '70', '17', '47653', '51282', '8'), +('11', '70', '17', '70928', '43414', '8'), +('11', '70', '17', '69153', '39184', '8'), +('11', '70', '17', '70714', '35077', '8'), +('11', '70', '7', '70924', '37645', '8'), +('11', '70', '7', '47207', '35939', '8'), +('11', '70', '7', '69176', '32588', '8'), +('11', '70', '7', '69082', '29668', '8'), +('11', '70', '9', '69129', '49545', '8'), +('11', '70', '9', '68767', '44394', '8'), +('11', '70', '9', '70925', '36909', '8'), +('11', '70', '9', '47223', '35153', '8'), +('11', '70', '15', '68672', '53365', '8'), +('11', '70', '15', '47290', '38392', '8'), +('11', '70', '15', '47293', '38331', '8'), +('11', '70', '15', '47240', '36647', '8'), +('11', '70', '20', '47281', '73134', '8'), +('11', '70', '20', '47284', '67518', '8'), +('11', '70', '20', '47282', '37612', '8'), +('11', '70', '20', '62446', '37294', '8'), +('11', '70', '12', '28144', '40656', '8'), +('11', '70', '12', '70926', '37632', '8'), +('11', '70', '12', '47215', '35409', '8'), +('11', '70', '12', '69086', '34658', '8'), +('11', '70', '18', '70929', '58738', '8'), +('11', '70', '18', '69149', '40237', '8'), +('11', '70', '18', '47203', '35683', '8'), +('11', '70', '18', '68991', '33291', '8'), +('11', '70', '19', '70927', '69613', '8'), +('11', '70', '19', '68923', '42688', '8'), +('11', '70', '19', '47219', '38640', '8'), +('11', '70', '19', '69251', '34108', '8'), +('11', '70', '13', '64067', '41635', '8'), +('11', '70', '13', '21876', '38570', '8'), +('11', '70', '13', '47308', '38355', '8'), +('11', '70', '13', '47307', '36985', '8'), +('11', '70', '14', '39315', '43186', '8'), +('11', '70', '14', '69404', '38952', '8'), +('11', '70', '14', '47308', '38355', '8'), +('11', '70', '14', '68117', '38018', '8'), +('11', '70', '11', '68952', '57114', '8'), +('11', '70', '11', '20508', '54310', '8'), +('11', '70', '11', '20898', '46713', '8'), +('11', '70', '11', '70296', '40804', '8'), +('11', '71', '22', '21805', '0', '11'), +('11', '71', '22', '61948', '0', '11'), +('11', '71', '22', '21807', '0', '11'), +('11', '71', '22', '12425', '0', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '71', '1', '69106', '91359', '11'), +('11', '71', '1', '83594', '90866', '11'), +('11', '71', '1', '70981', '60157', '11'), +('11', '71', '1', '39353', '45881', '11'), +('11', '71', '2', '39358', '50164', '11'), +('11', '71', '2', '83563', '42028', '11'), +('11', '71', '2', '39285', '41491', '11'), +('11', '71', '2', '70923', '38387', '11'), +('11', '71', '3', '39368', '50883', '11'), +('11', '71', '3', '70602', '48438', '11'), +('11', '71', '3', '83658', '47228', '11'), +('11', '71', '3', '39312', '43787', '11'), +('11', '71', '5', '83612', '67486', '11'), +('11', '71', '5', '51701', '50391', '11'), +('11', '71', '5', '39340', '46733', '11'), +('11', '71', '5', '39328', '43530', '11'), +('11', '71', '8', '70704', '93355', '11'), +('11', '71', '8', '83659', '44588', '11'), +('11', '71', '8', '39352', '44138', '11'), +('11', '71', '8', '39330', '43581', '11'), +('11', '71', '6', '39224', '86552', '11'), +('11', '71', '6', '83407', '52341', '11'), +('11', '71', '6', '39362', '46507', '11'), +('11', '71', '6', '39263', '45632', '11'), +('11', '71', '17', '83606', '50310', '11'), +('11', '71', '17', '47653', '49789', '11'), +('11', '71', '17', '70928', '43414', '11'), +('11', '71', '17', '69153', '39010', '11'), +('11', '71', '7', '83567', '41178', '11'), +('11', '71', '7', '70924', '37649', '11'), +('11', '71', '7', '47207', '35943', '11'), +('11', '71', '7', '83543', '35814', '11'), +('11', '71', '9', '39226', '73910', '11'), +('11', '71', '9', '69129', '48748', '11'), +('11', '71', '9', '39336', '47030', '11'), +('11', '71', '9', '51709', '44525', '11'), +('11', '71', '15', '68672', '52118', '11'), +('11', '71', '15', '39376', '50258', '11'), +('11', '71', '15', '83595', '47567', '11'), +('11', '71', '15', '83628', '42797', '11'), +('11', '71', '20', '47281', '71334', '11'), +('11', '71', '20', '47284', '66021', '11'), +('11', '71', '20', '71609', '48358', '11'), +('11', '71', '20', '39350', '46316', '11'), +('11', '71', '12', '83553', '40914', '11'), +('11', '71', '12', '83571', '40553', '11'), +('11', '71', '12', '28144', '39661', '11'), +('11', '71', '12', '70926', '37638', '11'), +('11', '71', '18', '83610', '70459', '11'), +('11', '71', '18', '70929', '57843', '11'), +('11', '71', '18', '69149', '39992', '11'), +('11', '71', '18', '71649', '37936', '11'), +('11', '71', '19', '83575', '79103', '11'), +('11', '71', '19', '70927', '67621', '11'), +('11', '71', '19', '68923', '41193', '11'), +('11', '71', '19', '83497', '40362', '11'), +('11', '71', '13', '83632', '77946', '11'), +('11', '71', '13', '39295', '49338', '11'), +('11', '71', '13', '39351', '44989', '11'), +('11', '71', '13', '39324', '42884', '11'), +('11', '71', '14', '83500', '68945', '11'), +('11', '71', '14', '39372', '50249', '11'), +('11', '71', '14', '83641', '50163', '11'), +('11', '71', '14', '39295', '49338', '11'), +('11', '71', '11', '83642', '92547', '11'), +('11', '71', '11', '68952', '55618', '11'), +('11', '71', '11', '20508', '53060', '11'), +('11', '71', '11', '39320', '50388', '11'), +('11', '72', '22', '21805', '0', '11'), +('11', '72', '22', '61948', '0', '11'), +('11', '72', '22', '21807', '0', '11'), +('11', '72', '22', '12425', '0', '11'), +('11', '72', '1', '69106', '89615', '11'), +('11', '72', '1', '83594', '88471', '11'), +('11', '72', '1', '70981', '59164', '11'), +('11', '72', '1', '39353', '45889', '11'), +('11', '72', '2', '39358', '49970', '11'), +('11', '72', '2', '83563', '42036', '11'), +('11', '72', '2', '39285', '41497', '11'), +('11', '72', '2', '70923', '38394', '11'), +('11', '72', '3', '39368', '50890', '11'), +('11', '72', '3', '70602', '47192', '11'), +('11', '72', '3', '83658', '47032', '11'), +('11', '72', '3', '39312', '43793', '11'), +('11', '72', '5', '83612', '66292', '11'), +('11', '72', '5', '51701', '50046', '11'), +('11', '72', '5', '39340', '46740', '11'), +('11', '72', '5', '39328', '43536', '11'), +('11', '72', '8', '70704', '91611', '11'), +('11', '72', '8', '83659', '44588', '11'), +('11', '72', '8', '39352', '44138', '11'), +('11', '72', '8', '39330', '43587', '11'), +('11', '72', '6', '39224', '84155', '11'), +('11', '72', '6', '83407', '51093', '11'), +('11', '72', '6', '39362', '46514', '11'), +('11', '72', '6', '39263', '45436', '11'), +('11', '72', '17', '83606', '50117', '11'), +('11', '72', '17', '47653', '48295', '11'), +('11', '72', '17', '70928', '43414', '11'), +('11', '72', '17', '69153', '38836', '11'), +('11', '72', '7', '83567', '41186', '11'), +('11', '72', '7', '70924', '37653', '11'), +('11', '72', '7', '47207', '35948', '11'), +('11', '72', '7', '83543', '35819', '11'), +('11', '72', '9', '39226', '72164', '11'), +('11', '72', '9', '69129', '47951', '11'), +('11', '72', '9', '39336', '47037', '11'), +('11', '72', '9', '51709', '44530', '11'), +('11', '72', '15', '68672', '50872', '11'), +('11', '72', '15', '39376', '50265', '11'), +('11', '72', '15', '83595', '47222', '11'), +('11', '72', '15', '83628', '42801', '11'), +('11', '72', '20', '47281', '69534', '11'), +('11', '72', '20', '47284', '64524', '11'), +('11', '72', '20', '71609', '47111', '11'), +('11', '72', '20', '39350', '46321', '11'), +('11', '72', '12', '83553', '40619', '11'), +('11', '72', '12', '83571', '40562', '11'), +('11', '72', '12', '28144', '38666', '11'), +('11', '72', '12', '70926', '37644', '11'), +('11', '72', '18', '83610', '69266', '11'), +('11', '72', '18', '70929', '56949', '11'), +('11', '72', '18', '69149', '39747', '11'), +('11', '72', '18', '71649', '37690', '11'), +('11', '72', '19', '83575', '77362', '11'), +('11', '72', '19', '70927', '65629', '11'), +('11', '72', '19', '83497', '40067', '11'), +('11', '72', '19', '68923', '39697', '11'), +('11', '72', '13', '83632', '76202', '11'), +('11', '72', '13', '39295', '48993', '11'), +('11', '72', '13', '39351', '44994', '11'), +('11', '72', '13', '39324', '42891', '11'), +('11', '72', '14', '83500', '67149', '11'), +('11', '72', '14', '39372', '50255', '11'), +('11', '72', '14', '83641', '49820', '11'), +('11', '72', '14', '39295', '48993', '11'), +('11', '72', '11', '83642', '90151', '11'), +('11', '72', '11', '68952', '54122', '11'), +('11', '72', '11', '20508', '51810', '11'), +('11', '72', '11', '39371', '50102', '11'), +('11', '73', '22', '21805', '0', '11'), +('11', '73', '22', '61948', '0', '11'), +('11', '73', '22', '21807', '0', '11'), +('11', '73', '22', '12425', '0', '11'), +('11', '73', '1', '69106', '87871', '11'), +('11', '73', '1', '83594', '86076', '11'), +('11', '73', '1', '70981', '58171', '11'), +('11', '73', '1', '39353', '45896', '11'), +('11', '73', '2', '39358', '49775', '11'), +('11', '73', '2', '83563', '42044', '11'), +('11', '73', '2', '39285', '41502', '11'), +('11', '73', '2', '70923', '38400', '11'), +('11', '73', '3', '39368', '50897', '11'), +('11', '73', '3', '83658', '46837', '11'), +('11', '73', '3', '70602', '45946', '11'), +('11', '73', '3', '39312', '43800', '11'), +('11', '73', '5', '83612', '65098', '11'), +('11', '73', '5', '51701', '49701', '11'), +('11', '73', '5', '39340', '46747', '11'), +('11', '73', '5', '39328', '43542', '11'), +('11', '73', '8', '70704', '89867', '11'), +('11', '73', '8', '83659', '44588', '11'), +('11', '73', '8', '39352', '44138', '11'), +('11', '73', '8', '39330', '43593', '11'), +('11', '73', '6', '39224', '81759', '11'), +('11', '73', '6', '83407', '49845', '11'), +('11', '73', '6', '39362', '46521', '11'), +('11', '73', '6', '39263', '45240', '11'), +('11', '73', '17', '83606', '49924', '11'), +('11', '73', '17', '47653', '46801', '11'), +('11', '73', '17', '70928', '43414', '11'), +('11', '73', '17', '69153', '38662', '11'), +('11', '73', '7', '83567', '41195', '11'), +('11', '73', '7', '70924', '37657', '11'), +('11', '73', '7', '47207', '35952', '11'), +('11', '73', '7', '83543', '35824', '11'), +('11', '73', '9', '39226', '70419', '11'), +('11', '73', '9', '69129', '47154', '11'), +('11', '73', '9', '39336', '47045', '11'), +('11', '73', '9', '51709', '44535', '11'), +('11', '73', '15', '39376', '50272', '11'), +('11', '73', '15', '68672', '49625', '11'), +('11', '73', '15', '83595', '46877', '11'), +('11', '73', '15', '83628', '42805', '11'), +('11', '73', '20', '47281', '67734', '11'), +('11', '73', '20', '47284', '63027', '11'), +('11', '73', '20', '39350', '46326', '11'), +('11', '73', '20', '71609', '45864', '11'), +('11', '73', '12', '83571', '40570', '11'), +('11', '73', '12', '83553', '40324', '11'), +('11', '73', '12', '28144', '37671', '11'), +('11', '73', '12', '70926', '37650', '11'), +('11', '73', '18', '83610', '68073', '11'), +('11', '73', '18', '70929', '56054', '11'), +('11', '73', '18', '69149', '39502', '11'), +('11', '73', '18', '71649', '37445', '11'), +('11', '73', '19', '83575', '75620', '11'), +('11', '73', '19', '70927', '63637', '11'), +('11', '73', '19', '83497', '39772', '11'), +('11', '73', '19', '68923', '38201', '11'), +('11', '73', '13', '83632', '74459', '11'), +('11', '73', '13', '39295', '48649', '11'), +('11', '73', '13', '39351', '44999', '11'), +('11', '73', '13', '39324', '42898', '11'), +('11', '73', '14', '83500', '65353', '11'), +('11', '73', '14', '39372', '50262', '11'), +('11', '73', '14', '83641', '49476', '11'), +('11', '73', '14', '39295', '48649', '11'), +('11', '73', '11', '83642', '87755', '11'), +('11', '73', '11', '68952', '52626', '11'), +('11', '73', '11', '20508', '50560', '11'), +('11', '73', '11', '39371', '50106', '11'), +('11', '74', '22', '21805', '0', '11'), +('11', '74', '22', '61948', '0', '11'), +('11', '74', '22', '21807', '0', '11'), +('11', '74', '22', '12425', '0', '11'), +('11', '74', '1', '69106', '86127', '11'), +('11', '74', '1', '83594', '83681', '11'), +('11', '74', '1', '70981', '57178', '11'), +('11', '74', '1', '39353', '45903', '11'), +('11', '74', '2', '39358', '49580', '11'), +('11', '74', '2', '83563', '42052', '11'), +('11', '74', '2', '39285', '41508', '11'), +('11', '74', '2', '70923', '38406', '11'), +('11', '74', '3', '39368', '50904', '11'), +('11', '74', '3', '83658', '46641', '11'), +('11', '74', '3', '70602', '44700', '11'), +('11', '74', '3', '39312', '43806', '11'), +('11', '74', '5', '83612', '63904', '11'), +('11', '74', '5', '51701', '49356', '11'), +('11', '74', '5', '39340', '46754', '11'), +('11', '74', '5', '39328', '43548', '11'), +('11', '74', '8', '70704', '88123', '11'), +('11', '74', '8', '83659', '44588', '11'), +('11', '74', '8', '39352', '44138', '11'), +('11', '74', '8', '39330', '43599', '11'), +('11', '74', '6', '39224', '79362', '11'), +('11', '74', '6', '83407', '48597', '11'), +('11', '74', '6', '39362', '46528', '11'), +('11', '74', '6', '39263', '45044', '11'), +('11', '74', '17', '83606', '49731', '11'), +('11', '74', '17', '47653', '45307', '11'), +('11', '74', '17', '70928', '43414', '11'), +('11', '74', '17', '69153', '38488', '11'), +('11', '74', '7', '83567', '41203', '11'), +('11', '74', '7', '70924', '37661', '11'), +('11', '74', '7', '47207', '35956', '11'), +('11', '74', '7', '83543', '35829', '11'), +('11', '74', '9', '39226', '68674', '11'), +('11', '74', '9', '39336', '47052', '11'), +('11', '74', '9', '69129', '46357', '11'), +('11', '74', '9', '51709', '44540', '11'), +('11', '74', '15', '39376', '50279', '11'), +('11', '74', '15', '68672', '48378', '11'), +('11', '74', '15', '83595', '46532', '11'), +('11', '74', '15', '83628', '42809', '11'), +('11', '74', '20', '47281', '65934', '11'), +('11', '74', '20', '47284', '61530', '11'), +('11', '74', '20', '39350', '46331', '11'), +('11', '74', '20', '71609', '44618', '11'), +('11', '74', '12', '83571', '40578', '11'), +('11', '74', '12', '83553', '40029', '11'), +('11', '74', '12', '70926', '37656', '11'), +('11', '74', '12', '28144', '36676', '11'), +('11', '74', '18', '83610', '66880', '11'), +('11', '74', '18', '70929', '55159', '11'), +('11', '74', '18', '69149', '39257', '11'), +('11', '74', '18', '71649', '37200', '11'), +('11', '74', '19', '83575', '73878', '11'), +('11', '74', '19', '70927', '61645', '11'), +('11', '74', '19', '83497', '39477', '11'), +('11', '74', '19', '39223', '38179', '11'), +('11', '74', '13', '83632', '72715', '11'), +('11', '74', '13', '39295', '48304', '11'), +('11', '74', '13', '39351', '45004', '11'), +('11', '74', '13', '39324', '42906', '11'), +('11', '74', '14', '83500', '63558', '11'), +('11', '74', '14', '39372', '50268', '11'), +('11', '74', '14', '83641', '49132', '11'), +('11', '74', '14', '39295', '48304', '11'), +('11', '74', '11', '83642', '85359', '11'), +('11', '74', '11', '68952', '51131', '11'), +('11', '74', '11', '39371', '50110', '11'), +('11', '74', '11', '39320', '49356', '11'), +('11', '75', '22', '21807', '0', '13'), +('11', '75', '22', '21805', '0', '13'), +('11', '75', '22', '12425', '0', '13'), +('11', '75', '22', '39342', '0', '13'), +('11', '75', '1', '69106', '84383', '13'), +('11', '75', '1', '83594', '81286', '13'), +('11', '75', '1', '80676', '69837', '13'), +('11', '75', '1', '80639', '63710', '13'), +('11', '75', '2', '39358', '49385', '13'), +('11', '75', '2', '83563', '42060', '13'), +('11', '75', '2', '39285', '41513', '13'), +('11', '75', '2', '70923', '38412', '13'), +('11', '75', '3', '80647', '63886', '13'), +('11', '75', '3', '46874', '56540', '13'), +('11', '75', '3', '46852', '51239', '13'), +('11', '75', '3', '39368', '50911', '13'), +('11', '75', '5', '80661', '67756', '13'), +('11', '75', '5', '83612', '62710', '13'), +('11', '75', '5', '80615', '61755', '13'), +('11', '75', '5', '46934', '60743', '13'), +('11', '75', '8', '70704', '86379', '13'), +('11', '75', '8', '80679', '70183', '13'), +('11', '75', '8', '80649', '63686', '13'), +('11', '75', '8', '46936', '60834', '13'), +('11', '75', '6', '39224', '76966', '13'), +('11', '75', '6', '80646', '63406', '13'), +('11', '75', '6', '46883', '60742', '13'), +('11', '75', '6', '46933', '60239', '13'), +('11', '75', '17', '53436', '57557', '13'), +('11', '75', '17', '83606', '49538', '13'), +('11', '75', '17', '47653', '43813', '13'), +('11', '75', '17', '70928', '43414', '13'), +('11', '75', '7', '53432', '55062', '13'), +('11', '75', '7', '83567', '41211', '13'), +('11', '75', '7', '70924', '37666', '13'), +('11', '75', '7', '47207', '35960', '13'), +('11', '75', '9', '39226', '66929', '13'), +('11', '75', '9', '46938', '61261', '13'), +('11', '75', '9', '39336', '47059', '13'), +('11', '75', '9', '69129', '45560', '13'), +('11', '75', '15', '79909', '73588', '13'), +('11', '75', '15', '80666', '70407', '13'), +('11', '75', '15', '80686', '69798', '13'), +('11', '75', '15', '79908', '67157', '13'), +('11', '75', '20', '80680', '70048', '13'), +('11', '75', '20', '47281', '64134', '13'), +('11', '75', '20', '46886', '61341', '13'), +('11', '75', '20', '80620', '60041', '13'), +('11', '75', '12', '53434', '54762', '13'), +('11', '75', '12', '83571', '40586', '13'), +('11', '75', '12', '83553', '39734', '13'), +('11', '75', '12', '70926', '37662', '13'), +('11', '75', '18', '83610', '65687', '13'), +('11', '75', '18', '53437', '56739', '13'), +('11', '75', '18', '70929', '54264', '13'), +('11', '75', '18', '46810', '46184', '13'), +('11', '75', '19', '83575', '72136', '13'), +('11', '75', '19', '70927', '59653', '13'), +('11', '75', '19', '83497', '39182', '13'), +('11', '75', '19', '39223', '38184', '13'), +('11', '75', '13', '83632', '70971', '13'), +('11', '75', '13', '80633', '64542', '13'), +('11', '75', '13', '80624', '59241', '13'), +('11', '75', '13', '46906', '49911', '13'), +('11', '75', '14', '80665', '64907', '13'), +('11', '75', '14', '80635', '63301', '13'), +('11', '75', '14', '83500', '61762', '13'), +('11', '75', '14', '80625', '59604', '13'), +('11', '75', '11', '83642', '82964', '13'), +('11', '75', '11', '80668', '69922', '13'), +('11', '75', '11', '46939', '61665', '13'), +('11', '75', '11', '80629', '61264', '13'), +('11', '75', '22', '21807', '0', '12'), +('11', '75', '22', '21805', '0', '12'), +('11', '75', '22', '12425', '0', '12'), +('11', '75', '22', '39342', '0', '12'), +('11', '75', '1', '69106', '84383', '12'), +('11', '75', '1', '83594', '81286', '12'), +('11', '75', '1', '46882', '61234', '12'), +('11', '75', '1', '46914', '56540', '12'), +('11', '75', '2', '39358', '49385', '12'), +('11', '75', '2', '83563', '42060', '12'), +('11', '75', '2', '39285', '41513', '12'), +('11', '75', '2', '70923', '38412', '12'), +('11', '75', '3', '46874', '56540', '12'), +('11', '75', '3', '46852', '51239', '12'), +('11', '75', '3', '39368', '50911', '12'), +('11', '75', '3', '46902', '49771', '12'), +('11', '75', '5', '83612', '62710', '12'), +('11', '75', '5', '46934', '60743', '12'), +('11', '75', '5', '46860', '57015', '12'), +('11', '75', '5', '46868', '56791', '12'), +('11', '75', '8', '70704', '86379', '12'), +('11', '75', '8', '46936', '60834', '12'), +('11', '75', '8', '46847', '51084', '12'), +('11', '75', '8', '83659', '44588', '12'), +('11', '75', '6', '39224', '76966', '12'), +('11', '75', '6', '46883', '60742', '12'), +('11', '75', '6', '46933', '60239', '12'), +('11', '75', '6', '46884', '59768', '12'), +('11', '75', '17', '53436', '57557', '12'), +('11', '75', '17', '83606', '49538', '12'), +('11', '75', '17', '47653', '43813', '12'), +('11', '75', '17', '70928', '43414', '12'), +('11', '75', '7', '53432', '55062', '12'), +('11', '75', '7', '83567', '41211', '12'), +('11', '75', '7', '70924', '37666', '12'), +('11', '75', '7', '47207', '35960', '12'), +('11', '75', '9', '39226', '66929', '12'), +('11', '75', '9', '46938', '61261', '12'), +('11', '75', '9', '39336', '47059', '12'), +('11', '75', '9', '69129', '45560', '12'), +('11', '75', '15', '46932', '61314', '12'), +('11', '75', '15', '46864', '57319', '12'), +('11', '75', '15', '46843', '51838', '12'), +('11', '75', '15', '39376', '50286', '12'), +('11', '75', '20', '47281', '64134', '12'), +('11', '75', '20', '46886', '61341', '12'), +('11', '75', '20', '47284', '60033', '12'), +('11', '75', '20', '46920', '56607', '12'), +('11', '75', '12', '53434', '54762', '12'), +('11', '75', '12', '83571', '40586', '12'), +('11', '75', '12', '83553', '39734', '12'), +('11', '75', '12', '70926', '37662', '12'), +('11', '75', '18', '83610', '65687', '12'), +('11', '75', '18', '53437', '56739', '12'), +('11', '75', '18', '70929', '54264', '12'), +('11', '75', '18', '46810', '46184', '12'), +('11', '75', '19', '83575', '72136', '12'), +('11', '75', '19', '70927', '59653', '12'), +('11', '75', '19', '83497', '39182', '12'), +('11', '75', '19', '39223', '38184', '12'), +('11', '75', '13', '83632', '70971', '12'), +('11', '75', '13', '46906', '49911', '12'), +('11', '75', '13', '39295', '47959', '12'), +('11', '75', '13', '39351', '45009', '12'), +('11', '75', '14', '83500', '61762', '12'), +('11', '75', '14', '46925', '56405', '12'), +('11', '75', '14', '46875', '55183', '12'), +('11', '75', '14', '46903', '51571', '12'), +('11', '75', '11', '83642', '82964', '12'), +('11', '75', '11', '46939', '61665', '12'), +('11', '75', '11', '46889', '59391', '12'), +('11', '75', '11', '46900', '50984', '12'), +('11', '76', '22', '21807', '0', '13'), +('11', '76', '22', '21805', '0', '13'), +('11', '76', '22', '12425', '0', '13'), +('11', '76', '22', '39342', '0', '13'), +('11', '76', '1', '69106', '82639', '13'), +('11', '76', '1', '83594', '78891', '13'), +('11', '76', '1', '80676', '69844', '13'), +('11', '76', '1', '80639', '63717', '13'), +('11', '76', '2', '39358', '49190', '13'), +('11', '76', '2', '83563', '42068', '13'), +('11', '76', '2', '39285', '41519', '13'), +('11', '76', '2', '70923', '38418', '13'), +('11', '76', '3', '80647', '63893', '13'), +('11', '76', '3', '46874', '56547', '13'), +('11', '76', '3', '46852', '51246', '13'), +('11', '76', '3', '39368', '50918', '13'), +('11', '76', '5', '80661', '67763', '13'), +('11', '76', '5', '80615', '61761', '13'), +('11', '76', '5', '83612', '61516', '13'), +('11', '76', '5', '46934', '60750', '13'), +('11', '76', '8', '70704', '84635', '13'), +('11', '76', '8', '80679', '70183', '13'), +('11', '76', '8', '80649', '63693', '13'), +('11', '76', '8', '46936', '60842', '13'), +('11', '76', '6', '39224', '74569', '13'), +('11', '76', '6', '80646', '63406', '13'), +('11', '76', '6', '46883', '60749', '13'), +('11', '76', '6', '46933', '60246', '13'), +('11', '76', '17', '53436', '57564', '13'), +('11', '76', '17', '83606', '49345', '13'), +('11', '76', '17', '70928', '43414', '13'), +('11', '76', '17', '47653', '42319', '13'), +('11', '76', '7', '53432', '55068', '13'), +('11', '76', '7', '83567', '41219', '13'), +('11', '76', '7', '70924', '37670', '13'), +('11', '76', '7', '47207', '35964', '13'), +('11', '76', '9', '39226', '65183', '13'), +('11', '76', '9', '46938', '61269', '13'), +('11', '76', '9', '39336', '47066', '13'), +('11', '76', '9', '69129', '44763', '13'), +('11', '76', '15', '79909', '73594', '13'), +('11', '76', '15', '80666', '70407', '13'), +('11', '76', '15', '80686', '69805', '13'), +('11', '76', '15', '79908', '67163', '13'), +('11', '76', '20', '80680', '70055', '13'), +('11', '76', '20', '47281', '62335', '13'), +('11', '76', '20', '46886', '61349', '13'), +('11', '76', '20', '80620', '60041', '13'), +('11', '76', '12', '53434', '54766', '13'), +('11', '76', '12', '83571', '40594', '13'), +('11', '76', '12', '83553', '39439', '13'), +('11', '76', '12', '70926', '37668', '13'), +('11', '76', '18', '83610', '64494', '13'), +('11', '76', '18', '53437', '56746', '13'), +('11', '76', '18', '70929', '53369', '13'), +('11', '76', '18', '46810', '46189', '13'), +('11', '76', '19', '83575', '70394', '13'), +('11', '76', '19', '70927', '57661', '13'), +('11', '76', '19', '83497', '38887', '13'), +('11', '76', '19', '39223', '38189', '13'), +('11', '76', '13', '83632', '69228', '13'), +('11', '76', '13', '80633', '64547', '13'), +('11', '76', '13', '80624', '59246', '13'), +('11', '76', '13', '46906', '49919', '13'), +('11', '76', '14', '80665', '64912', '13'), +('11', '76', '14', '80635', '63306', '13'), +('11', '76', '14', '83500', '59966', '13'), +('11', '76', '14', '80625', '59609', '13'), +('11', '76', '11', '83642', '80568', '13'), +('11', '76', '11', '80668', '69929', '13'), +('11', '76', '11', '46939', '61672', '13'), +('11', '76', '11', '80629', '61270', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '77', '22', '21807', '0', '13'), +('11', '77', '22', '21805', '0', '13'), +('11', '77', '22', '12425', '0', '13'), +('11', '77', '22', '39342', '0', '13'), +('11', '77', '1', '69106', '80895', '13'), +('11', '77', '1', '83594', '76497', '13'), +('11', '77', '1', '80676', '69851', '13'), +('11', '77', '1', '80639', '63723', '13'), +('11', '77', '2', '39358', '48995', '13'), +('11', '77', '2', '83563', '42076', '13'), +('11', '77', '2', '39285', '41524', '13'), +('11', '77', '2', '70923', '38424', '13'), +('11', '77', '3', '80647', '63899', '13'), +('11', '77', '3', '46874', '56554', '13'), +('11', '77', '3', '46852', '51253', '13'), +('11', '77', '3', '39368', '50925', '13'), +('11', '77', '5', '80661', '67770', '13'), +('11', '77', '5', '80615', '61767', '13'), +('11', '77', '5', '46934', '60757', '13'), +('11', '77', '5', '83612', '60322', '13'), +('11', '77', '8', '70704', '82891', '13'), +('11', '77', '8', '80679', '70183', '13'), +('11', '77', '8', '80649', '63699', '13'), +('11', '77', '8', '46936', '60849', '13'), +('11', '77', '6', '39224', '72173', '13'), +('11', '77', '6', '80646', '63406', '13'), +('11', '77', '6', '46883', '60756', '13'), +('11', '77', '6', '46933', '60253', '13'), +('11', '77', '17', '53436', '57571', '13'), +('11', '77', '17', '83606', '49152', '13'), +('11', '77', '17', '70928', '43414', '13'), +('11', '77', '17', '47653', '40825', '13'), +('11', '77', '7', '53432', '55074', '13'), +('11', '77', '7', '83567', '41227', '13'), +('11', '77', '7', '70924', '37674', '13'), +('11', '77', '7', '47207', '35968', '13'), +('11', '77', '9', '39226', '63438', '13'), +('11', '77', '9', '46938', '61277', '13'), +('11', '77', '9', '39336', '47073', '13'), +('11', '77', '9', '51709', '44556', '13'), +('11', '77', '15', '79909', '73600', '13'), +('11', '77', '15', '80666', '70407', '13'), +('11', '77', '15', '80686', '69812', '13'), +('11', '77', '15', '79908', '67168', '13'), +('11', '77', '20', '80680', '70062', '13'), +('11', '77', '20', '46886', '61357', '13'), +('11', '77', '20', '47281', '60535', '13'), +('11', '77', '20', '80620', '60041', '13'), +('11', '77', '12', '53434', '54770', '13'), +('11', '77', '12', '83571', '40602', '13'), +('11', '77', '12', '83553', '39144', '13'), +('11', '77', '12', '70926', '37674', '13'), +('11', '77', '18', '83610', '63302', '13'), +('11', '77', '18', '53437', '56753', '13'), +('11', '77', '18', '70929', '52474', '13'), +('11', '77', '18', '46810', '46194', '13'), +('11', '77', '19', '83575', '68652', '13'), +('11', '77', '19', '70927', '55669', '13'), +('11', '77', '19', '83497', '38592', '13'), +('11', '77', '19', '39223', '38194', '13'), +('11', '77', '13', '83632', '67484', '13'), +('11', '77', '13', '80633', '64552', '13'), +('11', '77', '13', '80624', '59251', '13'), +('11', '77', '13', '46906', '49926', '13'), +('11', '77', '14', '80665', '64917', '13'), +('11', '77', '14', '80635', '63311', '13'), +('11', '77', '14', '80625', '59614', '13'), +('11', '77', '14', '83500', '58170', '13'), +('11', '77', '11', '83642', '78172', '13'), +('11', '77', '11', '80668', '69937', '13'), +('11', '77', '11', '46939', '61679', '13'), +('11', '77', '11', '80629', '61276', '13'), +('11', '78', '22', '21807', '0', '13'), +('11', '78', '22', '21805', '0', '13'), +('11', '78', '22', '12425', '0', '13'), +('11', '78', '22', '39342', '0', '13'), +('11', '78', '1', '69106', '79151', '13'), +('11', '78', '1', '83594', '74102', '13'), +('11', '78', '1', '80676', '69858', '13'), +('11', '78', '1', '80639', '63730', '13'), +('11', '78', '2', '39358', '48800', '13'), +('11', '78', '2', '83563', '42085', '13'), +('11', '78', '2', '39285', '41530', '13'), +('11', '78', '2', '70923', '38430', '13'), +('11', '78', '3', '80647', '63906', '13'), +('11', '78', '3', '46874', '56561', '13'), +('11', '78', '3', '46852', '51261', '13'), +('11', '78', '3', '39368', '50932', '13'), +('11', '78', '5', '80661', '67777', '13'), +('11', '78', '5', '80615', '61773', '13'), +('11', '78', '5', '46934', '60764', '13'), +('11', '78', '5', '83612', '59128', '13'), +('11', '78', '8', '70704', '81147', '13'), +('11', '78', '8', '80679', '70183', '13'), +('11', '78', '8', '80649', '63706', '13'), +('11', '78', '8', '46936', '60857', '13'), +('11', '78', '6', '39224', '69776', '13'), +('11', '78', '6', '80646', '63406', '13'), +('11', '78', '6', '46883', '60764', '13'), +('11', '78', '6', '46933', '60260', '13'), +('11', '78', '17', '53436', '57578', '13'), +('11', '78', '17', '83606', '48959', '13'), +('11', '78', '17', '70928', '43414', '13'), +('11', '78', '17', '47653', '39331', '13'), +('11', '78', '7', '53432', '55080', '13'), +('11', '78', '7', '83567', '41235', '13'), +('11', '78', '7', '70924', '37678', '13'), +('11', '78', '7', '47207', '35972', '13'), +('11', '78', '9', '39226', '61693', '13'), +('11', '78', '9', '46938', '61285', '13'), +('11', '78', '9', '39336', '47080', '13'), +('11', '78', '9', '51709', '44561', '13'), +('11', '78', '15', '79909', '73606', '13'), +('11', '78', '15', '80666', '70408', '13'), +('11', '78', '15', '80686', '69820', '13'), +('11', '78', '15', '79908', '67174', '13'), +('11', '78', '20', '80680', '70070', '13'), +('11', '78', '20', '46886', '61365', '13'), +('11', '78', '20', '80620', '60042', '13'), +('11', '78', '20', '47281', '58735', '13'), +('11', '78', '12', '53434', '54774', '13'), +('11', '78', '12', '83571', '40610', '13'), +('11', '78', '12', '83553', '38849', '13'), +('11', '78', '12', '70926', '37681', '13'), +('11', '78', '18', '83610', '62109', '13'), +('11', '78', '18', '53437', '56760', '13'), +('11', '78', '18', '70929', '51579', '13'), +('11', '78', '18', '46810', '46199', '13'), +('11', '78', '19', '83575', '66910', '13'), +('11', '78', '19', '70927', '53677', '13'), +('11', '78', '19', '83497', '38297', '13'), +('11', '78', '19', '39223', '38199', '13'), +('11', '78', '13', '83632', '65740', '13'), +('11', '78', '13', '80633', '64558', '13'), +('11', '78', '13', '80624', '59256', '13'), +('11', '78', '13', '46906', '49933', '13'), +('11', '78', '14', '80665', '64922', '13'), +('11', '78', '14', '80635', '63316', '13'), +('11', '78', '14', '80625', '59619', '13'), +('11', '78', '14', '46925', '56423', '13'), +('11', '78', '11', '83642', '75776', '13'), +('11', '78', '11', '80668', '69944', '13'), +('11', '78', '11', '46939', '61686', '13'), +('11', '78', '11', '80629', '61282', '13'), +('11', '79', '22', '21807', '0', '13'), +('11', '79', '22', '21805', '0', '13'), +('11', '79', '22', '12425', '0', '13'), +('11', '79', '22', '39342', '0', '13'), +('11', '79', '1', '69106', '77407', '13'), +('11', '79', '1', '83594', '71707', '13'), +('11', '79', '1', '80676', '69866', '13'), +('11', '79', '1', '80639', '63736', '13'), +('11', '79', '2', '39358', '48605', '13'), +('11', '79', '2', '83563', '42093', '13'), +('11', '79', '2', '39285', '41535', '13'), +('11', '79', '2', '70923', '38436', '13'), +('11', '79', '3', '80647', '63912', '13'), +('11', '79', '3', '46874', '56568', '13'), +('11', '79', '3', '46852', '51268', '13'), +('11', '79', '3', '39368', '50939', '13'), +('11', '79', '5', '80661', '67784', '13'), +('11', '79', '5', '80615', '61779', '13'), +('11', '79', '5', '46934', '60771', '13'), +('11', '79', '5', '83612', '57935', '13'), +('11', '79', '8', '70704', '79403', '13'), +('11', '79', '8', '80679', '70184', '13'), +('11', '79', '8', '80649', '63712', '13'), +('11', '79', '8', '46936', '60865', '13'), +('11', '79', '6', '39224', '67380', '13'), +('11', '79', '6', '80646', '63406', '13'), +('11', '79', '6', '46883', '60771', '13'), +('11', '79', '6', '46933', '60267', '13'), +('11', '79', '17', '53436', '57585', '13'), +('11', '79', '17', '83606', '48767', '13'), +('11', '79', '17', '70928', '43415', '13'), +('11', '79', '17', '47653', '37837', '13'), +('11', '79', '7', '53432', '55086', '13'), +('11', '79', '7', '83567', '41243', '13'), +('11', '79', '7', '70924', '37682', '13'), +('11', '79', '7', '47207', '35976', '13'), +('11', '79', '9', '46938', '61293', '13'), +('11', '79', '9', '39226', '59947', '13'), +('11', '79', '9', '39336', '47087', '13'), +('11', '79', '9', '51709', '44566', '13'), +('11', '79', '15', '79909', '73612', '13'), +('11', '79', '15', '80666', '70408', '13'), +('11', '79', '15', '80686', '69827', '13'), +('11', '79', '15', '79908', '67180', '13'), +('11', '79', '20', '80680', '70077', '13'), +('11', '79', '20', '46886', '61373', '13'), +('11', '79', '20', '80620', '60042', '13'), +('11', '79', '20', '47281', '56935', '13'), +('11', '79', '12', '53434', '54778', '13'), +('11', '79', '12', '83571', '40618', '13'), +('11', '79', '12', '83553', '38554', '13'), +('11', '79', '12', '70926', '37687', '13'), +('11', '79', '18', '83610', '60916', '13'), +('11', '79', '18', '53437', '56767', '13'), +('11', '79', '18', '70929', '50684', '13'), +('11', '79', '18', '46810', '46204', '13'), +('11', '79', '19', '83575', '65168', '13'), +('11', '79', '19', '70927', '51685', '13'), +('11', '79', '19', '39223', '38204', '13'), +('11', '79', '19', '83497', '38002', '13'), +('11', '79', '13', '80633', '64563', '13'), +('11', '79', '13', '83632', '63996', '13'), +('11', '79', '13', '80624', '59261', '13'), +('11', '79', '13', '46906', '49940', '13'), +('11', '79', '14', '80665', '64927', '13'), +('11', '79', '14', '80635', '63321', '13'), +('11', '79', '14', '80625', '59624', '13'), +('11', '79', '14', '46925', '56429', '13'), +('11', '79', '11', '83642', '73380', '13'), +('11', '79', '11', '80668', '69951', '13'), +('11', '79', '11', '46939', '61693', '13'), +('11', '79', '11', '80629', '61289', '13'), +('11', '80', '22', '21807', '0', '14'), +('11', '80', '22', '21805', '0', '14'), +('11', '80', '22', '12425', '0', '14'), +('11', '80', '22', '39342', '0', '14'), +('11', '80', '1', '102604', '93329', '14'), +('11', '80', '1', '102640', '91044', '14'), +('11', '80', '1', '102639', '90906', '14'), +('11', '80', '1', '102641', '90809', '14'), +('11', '80', '2', '102024', '63069', '14'), +('11', '80', '2', '102276', '57118', '14'), +('11', '80', '2', '39358', '48410', '14'), +('11', '80', '2', '83563', '42101', '14'), +('11', '80', '3', '102605', '98400', '14'), +('11', '80', '3', '102742', '88030', '14'), +('11', '80', '3', '102560', '84616', '14'), +('11', '80', '3', '102741', '81073', '14'), +('11', '80', '5', '102731', '101523', '14'), +('11', '80', '5', '102606', '97066', '14'), +('11', '80', '5', '102730', '87935', '14'), +('11', '80', '5', '102565', '84171', '14'), +('11', '80', '8', '102728', '99879', '14'), +('11', '80', '8', '102608', '98468', '14'), +('11', '80', '8', '102728', '84064', '14'), +('11', '80', '8', '70704', '77659', '14'), +('11', '80', '6', '102607', '98511', '14'), +('11', '80', '6', '102561', '84843', '14'), +('11', '80', '6', '39224', '64983', '14'), +('11', '80', '6', '80646', '63407', '14'), +('11', '80', '17', '102027', '66483', '14'), +('11', '80', '17', '102279', '60151', '14'), +('11', '80', '17', '53436', '57592', '14'), +('11', '80', '17', '83606', '48574', '14'), +('11', '80', '7', '102025', '63501', '14'), +('11', '80', '7', '102277', '57335', '14'), +('11', '80', '7', '53432', '55092', '14'), +('11', '80', '7', '83567', '41251', '14'), +('11', '80', '9', '67098', '159918', '14'), +('11', '80', '9', '46938', '61301', '14'), +('11', '80', '9', '39226', '58202', '14'), +('11', '80', '9', '102291', '53447', '14'), +('11', '80', '15', '102723', '100578', '14'), +('11', '80', '15', '102609', '94612', '14'), +('11', '80', '15', '102637', '91417', '14'), +('11', '80', '15', '102634', '91342', '14'), +('11', '80', '20', '102610', '98717', '14'), +('11', '80', '20', '102563', '84734', '14'), +('11', '80', '20', '80680', '70085', '14'), +('11', '80', '20', '46886', '61381', '14'), +('11', '80', '12', '53434', '54782', '14'), +('11', '80', '12', '102274', '54624', '14'), +('11', '80', '12', '83571', '40626', '14'), +('11', '80', '12', '83553', '38260', '14'), +('11', '80', '18', '102026', '64496', '14'), +('11', '80', '18', '83610', '59723', '14'), +('11', '80', '18', '102278', '58032', '14'), +('11', '80', '18', '53437', '56774', '14'), +('11', '80', '19', '83575', '63426', '14'), +('11', '80', '19', '102275', '54893', '14'), +('11', '80', '19', '70927', '49693', '14'), +('11', '80', '19', '39223', '38209', '14'), +('11', '80', '13', '102657', '89343', '14'), +('11', '80', '13', '102735', '87780', '14'), +('11', '80', '13', '102734', '80947', '14'), +('11', '80', '13', '102586', '78338', '14'), +('11', '80', '14', '102633', '96295', '14'), +('11', '80', '14', '102632', '96149', '14'), +('11', '80', '14', '102570', '84233', '14'), +('11', '80', '14', '80665', '64932', '14'), +('11', '80', '11', '102643', '93371', '14'), +('11', '80', '11', '83642', '70984', '14'), +('11', '80', '11', '80668', '69959', '14'), +('11', '80', '11', '46939', '61700', '14'), +('11', '81', '22', '21807', '0', '14'), +('11', '81', '22', '21805', '0', '14'), +('11', '81', '22', '12425', '0', '14'), +('11', '81', '22', '39342', '0', '14'), +('11', '81', '1', '102604', '93334', '14'), +('11', '81', '1', '102640', '91053', '14'), +('11', '81', '1', '102639', '90913', '14'), +('11', '81', '1', '102641', '90818', '14'), +('11', '81', '2', '102024', '63074', '14'), +('11', '81', '2', '102276', '57124', '14'), +('11', '81', '2', '39358', '48215', '14'), +('11', '81', '2', '83563', '42109', '14'), +('11', '81', '3', '102605', '98404', '14'), +('11', '81', '3', '102742', '88039', '14'), +('11', '81', '3', '102560', '84622', '14'), +('11', '81', '3', '102741', '81080', '14'), +('11', '81', '5', '102731', '101532', '14'), +('11', '81', '5', '102606', '97069', '14'), +('11', '81', '5', '102730', '87942', '14'), +('11', '81', '5', '102565', '84177', '14'), +('11', '81', '8', '102728', '99886', '14'), +('11', '81', '8', '102608', '98475', '14'), +('11', '81', '8', '102728', '84069', '14'), +('11', '81', '8', '70704', '75915', '14'), +('11', '81', '6', '102607', '98518', '14'), +('11', '81', '6', '102561', '84849', '14'), +('11', '81', '6', '80646', '63407', '14'), +('11', '81', '6', '39224', '62587', '14'), +('11', '81', '17', '102027', '66487', '14'), +('11', '81', '17', '102279', '60156', '14'), +('11', '81', '17', '53436', '57599', '14'), +('11', '81', '17', '83606', '48381', '14'), +('11', '81', '7', '102025', '63509', '14'), +('11', '81', '7', '102277', '57340', '14'), +('11', '81', '7', '53432', '55099', '14'), +('11', '81', '7', '83567', '41259', '14'), +('11', '81', '9', '67098', '161921', '14'), +('11', '81', '9', '46938', '61309', '14'), +('11', '81', '9', '39226', '56457', '14'), +('11', '81', '9', '102291', '53452', '14'), +('11', '81', '15', '102723', '100585', '14'), +('11', '81', '15', '102609', '94619', '14'), +('11', '81', '15', '102637', '91425', '14'), +('11', '81', '15', '102634', '91347', '14'), +('11', '81', '20', '102610', '98726', '14'), +('11', '81', '20', '102563', '84736', '14'), +('11', '81', '20', '80680', '70092', '14'), +('11', '81', '20', '46886', '61389', '14'), +('11', '81', '12', '53434', '54786', '14'), +('11', '81', '12', '102274', '54630', '14'), +('11', '81', '12', '83571', '40634', '14'), +('11', '81', '12', '83553', '37965', '14'), +('11', '81', '18', '102026', '64498', '14'), +('11', '81', '18', '83610', '58530', '14'), +('11', '81', '18', '102278', '58041', '14'), +('11', '81', '18', '53437', '56781', '14'), +('11', '81', '19', '83575', '61684', '14'), +('11', '81', '19', '102275', '54894', '14'), +('11', '81', '19', '70927', '47701', '14'), +('11', '81', '19', '39223', '38214', '14'), +('11', '81', '13', '102657', '89347', '14'), +('11', '81', '13', '102735', '87787', '14'), +('11', '81', '13', '102734', '80953', '14'), +('11', '81', '13', '102586', '78340', '14'), +('11', '81', '14', '102633', '96301', '14'), +('11', '81', '14', '102632', '96155', '14'), +('11', '81', '14', '102570', '84241', '14'), +('11', '81', '14', '80665', '64937', '14'), +('11', '81', '11', '102643', '93376', '14'), +('11', '81', '11', '80668', '69966', '14'), +('11', '81', '11', '83642', '68588', '14'), +('11', '81', '11', '46939', '61708', '14'), +('11', '82', '22', '21807', '0', '14'), +('11', '82', '22', '21805', '0', '14'), +('11', '82', '22', '12425', '0', '14'), +('11', '82', '22', '39342', '0', '14'), +('11', '82', '1', '102604', '93340', '14'), +('11', '82', '1', '102640', '91063', '14'), +('11', '82', '1', '102639', '90920', '14'), +('11', '82', '1', '102641', '90828', '14'), +('11', '82', '2', '102024', '63080', '14'), +('11', '82', '2', '102276', '57129', '14'), +('11', '82', '2', '39358', '48020', '14'), +('11', '82', '2', '83563', '42117', '14'), +('11', '82', '3', '102605', '98408', '14'), +('11', '82', '3', '102742', '88047', '14'), +('11', '82', '3', '102560', '84628', '14'), +('11', '82', '3', '102741', '81087', '14'), +('11', '82', '5', '102731', '101541', '14'), +('11', '82', '5', '102606', '97072', '14'), +('11', '82', '5', '102730', '87950', '14'), +('11', '82', '5', '102565', '84184', '14'), +('11', '82', '8', '102728', '99893', '14'), +('11', '82', '8', '102608', '98483', '14'), +('11', '82', '8', '102728', '84074', '14'), +('11', '82', '8', '70704', '74171', '14'), +('11', '82', '6', '102607', '98525', '14'), +('11', '82', '6', '102561', '84856', '14'), +('11', '82', '6', '80646', '63407', '14'), +('11', '82', '6', '102529', '61250', '14'), +('11', '82', '17', '102027', '66491', '14'), +('11', '82', '17', '102279', '60161', '14'), +('11', '82', '17', '53436', '57606', '14'), +('11', '82', '17', '83606', '48188', '14'), +('11', '82', '7', '102025', '63516', '14'), +('11', '82', '7', '102277', '57345', '14'), +('11', '82', '7', '53432', '55105', '14'), +('11', '82', '7', '83567', '41267', '14'), +('11', '82', '9', '67098', '163924', '14'), +('11', '82', '9', '46938', '61317', '14'), +('11', '82', '9', '39226', '54711', '14'), +('11', '82', '9', '102291', '53457', '14'), +('11', '82', '15', '102723', '100592', '14'), +('11', '82', '15', '102609', '94626', '14'), +('11', '82', '15', '102637', '91434', '14'), +('11', '82', '15', '102634', '91352', '14'), +('11', '82', '20', '102610', '98734', '14'), +('11', '82', '20', '102563', '84739', '14'), +('11', '82', '20', '80680', '70099', '14'), +('11', '82', '20', '46886', '61397', '14'), +('11', '82', '12', '53434', '54790', '14'), +('11', '82', '12', '102274', '54635', '14'), +('11', '82', '12', '83571', '40643', '14'), +('11', '82', '12', '70926', '37705', '14'), +('11', '82', '18', '102026', '64500', '14'), +('11', '82', '18', '102278', '58049', '14'), +('11', '82', '18', '83610', '57337', '14'), +('11', '82', '18', '53437', '56789', '14'), +('11', '82', '19', '83575', '59943', '14'), +('11', '82', '19', '102275', '54896', '14'), +('11', '82', '19', '70927', '45709', '14'), +('11', '82', '19', '39223', '38219', '14'), +('11', '82', '13', '102657', '89351', '14'), +('11', '82', '13', '102735', '87794', '14'), +('11', '82', '13', '102734', '80959', '14'), +('11', '82', '13', '102586', '78342', '14'), +('11', '82', '14', '102633', '96307', '14'), +('11', '82', '14', '102632', '96161', '14'), +('11', '82', '14', '102570', '84250', '14'), +('11', '82', '14', '80665', '64942', '14'), +('11', '82', '11', '102643', '93381', '14'), +('11', '82', '11', '80668', '69973', '14'), +('11', '82', '11', '83642', '66192', '14'), +('11', '82', '11', '46939', '61715', '14'), +('11', '83', '22', '21807', '0', '14'), +('11', '83', '22', '21805', '0', '14'), +('11', '83', '22', '12425', '0', '14'), +('11', '83', '22', '39342', '0', '14'), +('11', '83', '1', '102604', '93345', '14'), +('11', '83', '1', '102640', '91072', '14'), +('11', '83', '1', '102639', '90927', '14'), +('11', '83', '1', '102641', '90837', '14'), +('11', '83', '2', '102024', '63086', '14'), +('11', '83', '2', '102276', '57134', '14'), +('11', '83', '2', '39358', '47825', '14'), +('11', '83', '2', '83563', '42125', '14'), +('11', '83', '3', '102605', '98412', '14'), +('11', '83', '3', '102742', '88055', '14'), +('11', '83', '3', '102560', '84634', '14'), +('11', '83', '3', '102741', '81095', '14'), +('11', '83', '5', '102731', '101550', '14'), +('11', '83', '5', '102606', '97075', '14'), +('11', '83', '5', '102730', '87957', '14'), +('11', '83', '5', '102565', '84190', '14'), +('11', '83', '8', '102728', '99900', '14'), +('11', '83', '8', '102608', '98490', '14'), +('11', '83', '8', '102728', '84079', '14'), +('11', '83', '8', '70704', '72427', '14'), +('11', '83', '6', '102607', '98532', '14'), +('11', '83', '6', '102561', '84862', '14'), +('11', '83', '6', '80646', '63407', '14'), +('11', '83', '6', '102529', '61256', '14'), +('11', '83', '17', '102027', '66496', '14'), +('11', '83', '17', '102279', '60166', '14'), +('11', '83', '17', '53436', '57613', '14'), +('11', '83', '17', '83606', '47995', '14'), +('11', '83', '7', '102025', '63524', '14'), +('11', '83', '7', '102277', '57350', '14'), +('11', '83', '7', '53432', '55111', '14'), +('11', '83', '7', '83567', '41276', '14'), +('11', '83', '9', '67098', '165927', '14'), +('11', '83', '9', '46938', '61325', '14'), +('11', '83', '9', '102291', '53462', '14'), +('11', '83', '9', '39226', '52966', '14'), +('11', '83', '15', '102723', '100599', '14'), +('11', '83', '15', '102609', '94633', '14'), +('11', '83', '15', '102637', '91442', '14'), +('11', '83', '15', '102634', '91357', '14'), +('11', '83', '20', '102610', '98743', '14'), +('11', '83', '20', '102563', '84741', '14'), +('11', '83', '20', '80680', '70107', '14'), +('11', '83', '20', '46886', '61406', '14'), +('11', '83', '12', '53434', '54795', '14'), +('11', '83', '12', '102274', '54641', '14'), +('11', '83', '12', '83571', '40651', '14'), +('11', '83', '12', '70926', '37711', '14'), +('11', '83', '18', '102026', '64503', '14'), +('11', '83', '18', '102278', '58058', '14'), +('11', '83', '18', '53437', '56796', '14'), +('11', '83', '18', '83610', '56144', '14'), +('11', '83', '19', '83575', '58201', '14'), +('11', '83', '19', '102275', '54898', '14'), +('11', '83', '19', '70927', '43717', '14'), +('11', '83', '19', '39223', '38225', '14'), +('11', '83', '13', '102657', '89355', '14'), +('11', '83', '13', '102735', '87802', '14'), +('11', '83', '13', '102734', '80965', '14'), +('11', '83', '13', '102586', '78343', '14'), +('11', '83', '14', '102633', '96314', '14'), +('11', '83', '14', '102632', '96167', '14'), +('11', '83', '14', '102570', '84258', '14'), +('11', '83', '14', '80665', '64947', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '83', '11', '102643', '93386', '14'), +('11', '83', '11', '80668', '69981', '14'), +('11', '83', '11', '83642', '63797', '14'), +('11', '83', '11', '46939', '61722', '14'), +('11', '84', '22', '21807', '0', '14'), +('11', '84', '22', '21805', '0', '14'), +('11', '84', '22', '12425', '0', '14'), +('11', '84', '22', '39342', '0', '14'), +('11', '84', '1', '102604', '93351', '14'), +('11', '84', '1', '102640', '91082', '14'), +('11', '84', '1', '102639', '90934', '14'), +('11', '84', '1', '102641', '90846', '14'), +('11', '84', '2', '102024', '63092', '14'), +('11', '84', '2', '102276', '57139', '14'), +('11', '84', '2', '39358', '47630', '14'), +('11', '84', '2', '83563', '42133', '14'), +('11', '84', '3', '102605', '98417', '14'), +('11', '84', '3', '102742', '88063', '14'), +('11', '84', '3', '102560', '84640', '14'), +('11', '84', '3', '102741', '81102', '14'), +('11', '84', '5', '102731', '101559', '14'), +('11', '84', '5', '102606', '97078', '14'), +('11', '84', '5', '102730', '87964', '14'), +('11', '84', '5', '102565', '84196', '14'), +('11', '84', '8', '102728', '99907', '14'), +('11', '84', '8', '102608', '98497', '14'), +('11', '84', '8', '102728', '84084', '14'), +('11', '84', '8', '70704', '70683', '14'), +('11', '84', '6', '102607', '98539', '14'), +('11', '84', '6', '102561', '84868', '14'), +('11', '84', '6', '80646', '63407', '14'), +('11', '84', '6', '102529', '61261', '14'), +('11', '84', '17', '102027', '66500', '14'), +('11', '84', '17', '102279', '60170', '14'), +('11', '84', '17', '53436', '57620', '14'), +('11', '84', '17', '83606', '47802', '14'), +('11', '84', '7', '102025', '63531', '14'), +('11', '84', '7', '102277', '57355', '14'), +('11', '84', '7', '53432', '55117', '14'), +('11', '84', '7', '83567', '41284', '14'), +('11', '84', '9', '67098', '167930', '14'), +('11', '84', '9', '46938', '61334', '14'), +('11', '84', '9', '102291', '53467', '14'), +('11', '84', '9', '39226', '51221', '14'), +('11', '84', '15', '102723', '100606', '14'), +('11', '84', '15', '102609', '94640', '14'), +('11', '84', '15', '102637', '91451', '14'), +('11', '84', '15', '102634', '91362', '14'), +('11', '84', '20', '102610', '98752', '14'), +('11', '84', '20', '102563', '84743', '14'), +('11', '84', '20', '80680', '70114', '14'), +('11', '84', '20', '46886', '61414', '14'), +('11', '84', '12', '53434', '54799', '14'), +('11', '84', '12', '102274', '54646', '14'), +('11', '84', '12', '83571', '40659', '14'), +('11', '84', '12', '70926', '37717', '14'), +('11', '84', '18', '102026', '64505', '14'), +('11', '84', '18', '102278', '58066', '14'), +('11', '84', '18', '53437', '56803', '14'), +('11', '84', '18', '83610', '54951', '14'), +('11', '84', '19', '83575', '56459', '14'), +('11', '84', '19', '102275', '54899', '14'), +('11', '84', '19', '70927', '41725', '14'), +('11', '84', '19', '39223', '38230', '14'), +('11', '84', '13', '102657', '89360', '14'), +('11', '84', '13', '102735', '87809', '14'), +('11', '84', '13', '102734', '80972', '14'), +('11', '84', '13', '102586', '78345', '14'), +('11', '84', '14', '102633', '96320', '14'), +('11', '84', '14', '102632', '96174', '14'), +('11', '84', '14', '102570', '84267', '14'), +('11', '84', '14', '80665', '64952', '14'), +('11', '84', '11', '102643', '93391', '14'), +('11', '84', '11', '80668', '69988', '14'), +('11', '84', '11', '46939', '61729', '14'), +('11', '84', '11', '83642', '61401', '14'), +('11', '85', '22', '12425', '0', '16'), +('11', '85', '22', '21807', '0', '16'), +('11', '85', '22', '39342', '0', '16'), +('11', '85', '22', '23597', '0', '16'), +('11', '85', '1', '111311', '178878', '16'), +('11', '85', '1', '111307', '176729', '16'), +('11', '85', '1', '111306', '176548', '16'), +('11', '85', '1', '111304', '176260', '16'), +('11', '85', '2', '62985', '109924', '16'), +('11', '85', '2', '94056', '109850', '16'), +('11', '85', '2', '104424', '96011', '16'), +('11', '85', '2', '54845', '71062', '16'), +('11', '85', '3', '111314', '177232', '16'), +('11', '85', '3', '111316', '175462', '16'), +('11', '85', '3', '111315', '174577', '16'), +('11', '85', '3', '111013', '155381', '16'), +('11', '85', '5', '111319', '176738', '16'), +('11', '85', '5', '111321', '175950', '16'), +('11', '85', '5', '111318', '173992', '16'), +('11', '85', '5', '111018', '154888', '16'), +('11', '85', '8', '111332', '177320', '16'), +('11', '85', '8', '111329', '176302', '16'), +('11', '85', '8', '111331', '172730', '16'), +('11', '85', '8', '111031', '155570', '16'), +('11', '85', '6', '111323', '177189', '16'), +('11', '85', '6', '111326', '175717', '16'), +('11', '85', '6', '111325', '175671', '16'), +('11', '85', '6', '111022', '155338', '16'), +('11', '85', '17', '56043', '117674', '16'), +('11', '85', '17', '56084', '114253', '16'), +('11', '85', '17', '104427', '99659', '16'), +('11', '85', '17', '54854', '75099', '16'), +('11', '85', '7', '56080', '110001', '16'), +('11', '85', '7', '56040', '109322', '16'), +('11', '85', '7', '104425', '95449', '16'), +('11', '85', '7', '54848', '70202', '16'), +('11', '85', '9', '67098', '169933', '16'), +('11', '85', '9', '104834', '121623', '16'), +('11', '85', '9', '56070', '106382', '16'), +('11', '85', '9', '56031', '106268', '16'), +('11', '85', '15', '111349', '179189', '16'), +('11', '85', '15', '111344', '177460', '16'), +('11', '85', '15', '111340', '177008', '16'), +('11', '85', '15', '111346', '176797', '16'), +('11', '85', '20', '111356', '177333', '16'), +('11', '85', '20', '111352', '176330', '16'), +('11', '85', '20', '111351', '173837', '16'), +('11', '85', '20', '111054', '155482', '16'), +('11', '85', '12', '56035', '108322', '16'), +('11', '85', '12', '56074', '107146', '16'), +('11', '85', '12', '104422', '93327', '16'), +('11', '85', '12', '49656', '70149', '16'), +('11', '85', '18', '56041', '114128', '16'), +('11', '85', '18', '62986', '112297', '16'), +('11', '85', '18', '104426', '97176', '16'), +('11', '85', '18', '54851', '71458', '16'), +('11', '85', '19', '81763', '110788', '16'), +('11', '85', '19', '62990', '110654', '16'), +('11', '85', '19', '56075', '110070', '16'), +('11', '85', '19', '56037', '110007', '16'), +('11', '85', '13', '111521', '183105', '16'), +('11', '85', '13', '111524', '173737', '16'), +('11', '85', '13', '111519', '173706', '16'), +('11', '85', '13', '111221', '162251', '16'), +('11', '85', '14', '111537', '177345', '16'), +('11', '85', '14', '111535', '175126', '16'), +('11', '85', '14', '111237', '155494', '16'), +('11', '85', '14', '111235', '153374', '16'), +('11', '85', '11', '111335', '176352', '16'), +('11', '85', '11', '111337', '176230', '16'), +('11', '85', '11', '111338', '172743', '16'), +('11', '85', '11', '111034', '154601', '16'), +('11', '85', '22', '21807', '0', '15'), +('11', '85', '22', '21805', '0', '15'), +('11', '85', '22', '12425', '0', '15'), +('11', '85', '22', '7867', '0', '15'), +('11', '85', '1', '107040', '134005', '15'), +('11', '85', '1', '107039', '131455', '15'), +('11', '85', '1', '107053', '129474', '15'), +('11', '85', '1', '107052', '128131', '15'), +('11', '85', '2', '62985', '109924', '15'), +('11', '85', '2', '94056', '109850', '15'), +('11', '85', '2', '104424', '96011', '15'), +('11', '85', '2', '54845', '71062', '15'), +('11', '85', '3', '107041', '135359', '15'), +('11', '85', '3', '107055', '129021', '15'), +('11', '85', '3', '106828', '125872', '15'), +('11', '85', '3', '106841', '122324', '15'), +('11', '85', '5', '107042', '134128', '15'), +('11', '85', '5', '107056', '128629', '15'), +('11', '85', '5', '106829', '125788', '15'), +('11', '85', '5', '56090', '111532', '15'), +('11', '85', '8', '107044', '135397', '15'), +('11', '85', '8', '107058', '130351', '15'), +('11', '85', '8', '106831', '126647', '15'), +('11', '85', '8', '106844', '121694', '15'), +('11', '85', '6', '107043', '135260', '15'), +('11', '85', '6', '107057', '130139', '15'), +('11', '85', '6', '106830', '126231', '15'), +('11', '85', '6', '106843', '121782', '15'), +('11', '85', '17', '56043', '117674', '15'), +('11', '85', '17', '56084', '114253', '15'), +('11', '85', '17', '104427', '99659', '15'), +('11', '85', '17', '54854', '75099', '15'), +('11', '85', '7', '56080', '110001', '15'), +('11', '85', '7', '56040', '109322', '15'), +('11', '85', '7', '104425', '95449', '15'), +('11', '85', '7', '54848', '70202', '15'), +('11', '85', '9', '67098', '169933', '15'), +('11', '85', '9', '104834', '121623', '15'), +('11', '85', '9', '56070', '106382', '15'), +('11', '85', '9', '56031', '106268', '15'), +('11', '85', '15', '107046', '133773', '15'), +('11', '85', '15', '107047', '133388', '15'), +('11', '85', '15', '107061', '128590', '15'), +('11', '85', '15', '107050', '127206', '15'), +('11', '85', '20', '107048', '135514', '15'), +('11', '85', '20', '107059', '131474', '15'), +('11', '85', '20', '106834', '127467', '15'), +('11', '85', '20', '106845', '123295', '15'), +('11', '85', '12', '56035', '108322', '15'), +('11', '85', '12', '56074', '107146', '15'), +('11', '85', '12', '104422', '93327', '15'), +('11', '85', '12', '53434', '54803', '15'), +('11', '85', '18', '56041', '114128', '15'), +('11', '85', '18', '62986', '112297', '15'), +('11', '85', '18', '104426', '97176', '15'), +('11', '85', '18', '54851', '71458', '15'), +('11', '85', '19', '81763', '110788', '15'), +('11', '85', '19', '62990', '110654', '15'), +('11', '85', '19', '56075', '110070', '15'), +('11', '85', '19', '56037', '110007', '15'), +('11', '85', '13', '106864', '126330', '15'), +('11', '85', '13', '106861', '124705', '15'), +('11', '85', '13', '106764', '113318', '15'), +('11', '85', '13', '62932', '112350', '15'), +('11', '85', '14', '107063', '131398', '15'), +('11', '85', '14', '107065', '129574', '15'), +('11', '85', '14', '106850', '123984', '15'), +('11', '85', '14', '106852', '122296', '15'), +('11', '85', '11', '107045', '133387', '15'), +('11', '85', '11', '106832', '123829', '15'), +('11', '85', '11', '106739', '111016', '15'), +('11', '85', '11', '56099', '108914', '15'), +('11', '86', '22', '12425', '0', '16'), +('11', '86', '22', '21807', '0', '16'), +('11', '86', '22', '39342', '0', '16'), +('11', '86', '22', '23597', '0', '16'), +('11', '86', '1', '111311', '178882', '16'), +('11', '86', '1', '111307', '176737', '16'), +('11', '86', '1', '111306', '176554', '16'), +('11', '86', '1', '111304', '176265', '16'), +('11', '86', '2', '62985', '109928', '16'), +('11', '86', '2', '94056', '109853', '16'), +('11', '86', '2', '104424', '96019', '16'), +('11', '86', '2', '54845', '71068', '16'), +('11', '86', '3', '111314', '177238', '16'), +('11', '86', '3', '111316', '175468', '16'), +('11', '86', '3', '111315', '174583', '16'), +('11', '86', '3', '111013', '155388', '16'), +('11', '86', '5', '111319', '176746', '16'), +('11', '86', '5', '111321', '175956', '16'), +('11', '86', '5', '111318', '174000', '16'), +('11', '86', '5', '111018', '154895', '16'), +('11', '86', '8', '111332', '177327', '16'), +('11', '86', '8', '111329', '176310', '16'), +('11', '86', '8', '111331', '172736', '16'), +('11', '86', '8', '111031', '155576', '16'), +('11', '86', '6', '111323', '177195', '16'), +('11', '86', '6', '111326', '175725', '16'), +('11', '86', '6', '111325', '175676', '16'), +('11', '86', '6', '111022', '155344', '16'), +('11', '86', '17', '56043', '117680', '16'), +('11', '86', '17', '56084', '114259', '16'), +('11', '86', '17', '104427', '99666', '16'), +('11', '86', '17', '54854', '75103', '16'), +('11', '86', '7', '56080', '110008', '16'), +('11', '86', '7', '56040', '109332', '16'), +('11', '86', '7', '104425', '95454', '16'), +('11', '86', '7', '54848', '70208', '16'), +('11', '86', '9', '67098', '171937', '16'), +('11', '86', '9', '104834', '121629', '16'), +('11', '86', '9', '56070', '106387', '16'), +('11', '86', '9', '56031', '106278', '16'), +('11', '86', '15', '111349', '179197', '16'), +('11', '86', '15', '111344', '177464', '16'), +('11', '86', '15', '111340', '177013', '16'), +('11', '86', '15', '111346', '176803', '16'), +('11', '86', '20', '111356', '177339', '16'), +('11', '86', '20', '111352', '176335', '16'), +('11', '86', '20', '111351', '173844', '16'), +('11', '86', '20', '111054', '155488', '16'), +('11', '86', '12', '56035', '108331', '16'), +('11', '86', '12', '56074', '107152', '16'), +('11', '86', '12', '104422', '93335', '16'), +('11', '86', '12', '49656', '70150', '16'), +('11', '86', '18', '56041', '114137', '16'), +('11', '86', '18', '62986', '112302', '16'), +('11', '86', '18', '104426', '97178', '16'), +('11', '86', '18', '54851', '71462', '16'), +('11', '86', '19', '81763', '110798', '16'), +('11', '86', '19', '62990', '110662', '16'), +('11', '86', '19', '56075', '110074', '16'), +('11', '86', '19', '56037', '110009', '16'), +('11', '86', '13', '111521', '183111', '16'), +('11', '86', '13', '111524', '173743', '16'), +('11', '86', '13', '111519', '173713', '16'), +('11', '86', '13', '111221', '162257', '16'), +('11', '86', '14', '111537', '177350', '16'), +('11', '86', '14', '111535', '175129', '16'), +('11', '86', '14', '111237', '155499', '16'), +('11', '86', '14', '111235', '153378', '16'), +('11', '86', '11', '111335', '176358', '16'), +('11', '86', '11', '111337', '176236', '16'), +('11', '86', '11', '111338', '172749', '16'), +('11', '86', '11', '111034', '154607', '16'), +('11', '87', '22', '12425', '0', '16'), +('11', '87', '22', '21807', '0', '16'), +('11', '87', '22', '39342', '0', '16'), +('11', '87', '22', '23597', '0', '16'), +('11', '87', '1', '111311', '178886', '16'), +('11', '87', '1', '111307', '176745', '16'), +('11', '87', '1', '111306', '176559', '16'), +('11', '87', '1', '111304', '176270', '16'), +('11', '87', '2', '62985', '109932', '16'), +('11', '87', '2', '94056', '109856', '16'), +('11', '87', '2', '104424', '96027', '16'), +('11', '87', '2', '54845', '71073', '16'), +('11', '87', '3', '111314', '177245', '16'), +('11', '87', '3', '111316', '175474', '16'), +('11', '87', '3', '111315', '174589', '16'), +('11', '87', '3', '111013', '155394', '16'), +('11', '87', '5', '111319', '176753', '16'), +('11', '87', '5', '111321', '175961', '16'), +('11', '87', '5', '111318', '174007', '16'), +('11', '87', '5', '111018', '154902', '16'), +('11', '87', '8', '111332', '177334', '16'), +('11', '87', '8', '111329', '176317', '16'), +('11', '87', '8', '111331', '172741', '16'), +('11', '87', '8', '111031', '155583', '16'), +('11', '87', '6', '111323', '177200', '16'), +('11', '87', '6', '111326', '175732', '16'), +('11', '87', '6', '111325', '175680', '16'), +('11', '87', '6', '111022', '155350', '16'), +('11', '87', '17', '56043', '117685', '16'), +('11', '87', '17', '56084', '114265', '16'), +('11', '87', '17', '104427', '99672', '16'), +('11', '87', '17', '54854', '75108', '16'), +('11', '87', '7', '56080', '110015', '16'), +('11', '87', '7', '56040', '109342', '16'), +('11', '87', '7', '104425', '95460', '16'), +('11', '87', '7', '54848', '70214', '16'), +('11', '87', '9', '67098', '173940', '16'), +('11', '87', '9', '104834', '121635', '16'), +('11', '87', '9', '56070', '106393', '16'), +('11', '87', '9', '56031', '106288', '16'), +('11', '87', '15', '111349', '179205', '16'), +('11', '87', '15', '111344', '177469', '16'), +('11', '87', '15', '111340', '177019', '16'), +('11', '87', '15', '111346', '176809', '16'), +('11', '87', '20', '111356', '177345', '16'), +('11', '87', '20', '111352', '176340', '16'), +('11', '87', '20', '111351', '173852', '16'), +('11', '87', '20', '111054', '155495', '16'), +('11', '87', '12', '56035', '108341', '16'), +('11', '87', '12', '56074', '107158', '16'), +('11', '87', '12', '104422', '93343', '16'), +('11', '87', '12', '49656', '70150', '16'), +('11', '87', '18', '56041', '114145', '16'), +('11', '87', '18', '62986', '112307', '16'), +('11', '87', '18', '104426', '97180', '16'), +('11', '87', '18', '54851', '71466', '16'), +('11', '87', '19', '81763', '110808', '16'), +('11', '87', '19', '62990', '110669', '16'), +('11', '87', '19', '56075', '110079', '16'), +('11', '87', '19', '56037', '110012', '16'), +('11', '87', '13', '111521', '183116', '16'), +('11', '87', '13', '111524', '173750', '16'), +('11', '87', '13', '111519', '173720', '16'), +('11', '87', '13', '111221', '162263', '16'), +('11', '87', '14', '111537', '177355', '16'), +('11', '87', '14', '111535', '175133', '16'), +('11', '87', '14', '111237', '155504', '16'), +('11', '87', '14', '111235', '153382', '16'), +('11', '87', '11', '111335', '176364', '16'), +('11', '87', '11', '111337', '176242', '16'), +('11', '87', '11', '111338', '172755', '16'), +('11', '87', '11', '111034', '154613', '16'), +('11', '88', '22', '12425', '0', '16'), +('11', '88', '22', '21807', '0', '16'), +('11', '88', '22', '39342', '0', '16'), +('11', '88', '22', '23597', '0', '16'), +('11', '88', '1', '111311', '178891', '16'), +('11', '88', '1', '111307', '176754', '16'), +('11', '88', '1', '111306', '176565', '16'), +('11', '88', '1', '111304', '176275', '16'), +('11', '88', '2', '62985', '109935', '16'), +('11', '88', '2', '94056', '109860', '16'), +('11', '88', '2', '104424', '96035', '16'), +('11', '88', '2', '54845', '71079', '16'), +('11', '88', '3', '111314', '177252', '16'), +('11', '88', '3', '111316', '175480', '16'), +('11', '88', '3', '111315', '174596', '16'), +('11', '88', '3', '111013', '155401', '16'), +('11', '88', '5', '111319', '176760', '16'), +('11', '88', '5', '111321', '175966', '16'), +('11', '88', '5', '111318', '174015', '16'), +('11', '88', '5', '111018', '154909', '16'), +('11', '88', '8', '111332', '177340', '16'), +('11', '88', '8', '111329', '176325', '16'), +('11', '88', '8', '111331', '172747', '16'), +('11', '88', '8', '111031', '155590', '16'), +('11', '88', '6', '111323', '177206', '16'), +('11', '88', '6', '111326', '175740', '16'), +('11', '88', '6', '111325', '175685', '16'), +('11', '88', '6', '111022', '155356', '16'), +('11', '88', '17', '56043', '117691', '16'), +('11', '88', '17', '56084', '114271', '16'), +('11', '88', '17', '104427', '99678', '16'), +('11', '88', '17', '54854', '75113', '16'), +('11', '88', '7', '56080', '110022', '16'), +('11', '88', '7', '56040', '109353', '16'), +('11', '88', '7', '104425', '95465', '16'), +('11', '88', '7', '54848', '70220', '16'), +('11', '88', '9', '67098', '175944', '16'), +('11', '88', '9', '104834', '121641', '16'), +('11', '88', '9', '56070', '106398', '16'), +('11', '88', '9', '56031', '106298', '16'), +('11', '88', '15', '111349', '179213', '16'), +('11', '88', '15', '111344', '177474', '16'), +('11', '88', '15', '111340', '177024', '16'), +('11', '88', '15', '111346', '176815', '16'), +('11', '88', '20', '111356', '177351', '16'), +('11', '88', '20', '111352', '176346', '16'), +('11', '88', '20', '111351', '173859', '16'), +('11', '88', '20', '111054', '155501', '16'), +('11', '88', '12', '56035', '108350', '16'), +('11', '88', '12', '56074', '107164', '16'), +('11', '88', '12', '104422', '93351', '16'), +('11', '88', '12', '49656', '70151', '16'), +('11', '88', '18', '56041', '114154', '16'), +('11', '88', '18', '62986', '112312', '16'), +('11', '88', '18', '104426', '97181', '16'), +('11', '88', '18', '54851', '71470', '16'), +('11', '88', '19', '81763', '110818', '16'), +('11', '88', '19', '62990', '110677', '16'), +('11', '88', '19', '56075', '110084', '16'), +('11', '88', '19', '56037', '110014', '16'), +('11', '88', '13', '111521', '183121', '16'), +('11', '88', '13', '111524', '173757', '16'), +('11', '88', '13', '111519', '173728', '16'), +('11', '88', '13', '111221', '162269', '16'), +('11', '88', '14', '111537', '177360', '16'), +('11', '88', '14', '111535', '175137', '16'), +('11', '88', '14', '111237', '155509', '16'), +('11', '88', '14', '111235', '153386', '16'), +('11', '88', '11', '111335', '176369', '16'), +('11', '88', '11', '111337', '176248', '16'), +('11', '88', '11', '111338', '172761', '16'), +('11', '88', '11', '111034', '154619', '16'), +('11', '89', '22', '12425', '0', '16'), +('11', '89', '22', '21807', '0', '16'), +('11', '89', '22', '39342', '0', '16'), +('11', '89', '22', '23597', '0', '16'), +('11', '89', '1', '111311', '178895', '16'), +('11', '89', '1', '111307', '176762', '16'), +('11', '89', '1', '111306', '176571', '16'), +('11', '89', '1', '111304', '176280', '16'), +('11', '89', '2', '62985', '109939', '16'), +('11', '89', '2', '94056', '109863', '16'), +('11', '89', '2', '104424', '96043', '16'), +('11', '89', '2', '54845', '71085', '16'), +('11', '89', '3', '111314', '177258', '16'), +('11', '89', '3', '111316', '175486', '16'), +('11', '89', '3', '111315', '174602', '16'), +('11', '89', '3', '111013', '155407', '16'), +('11', '89', '5', '111319', '176767', '16'), +('11', '89', '5', '111321', '175971', '16'), +('11', '89', '5', '111318', '174022', '16'), +('11', '89', '5', '111018', '154917', '16'), +('11', '89', '8', '111332', '177347', '16'), +('11', '89', '8', '111329', '176332', '16'), +('11', '89', '8', '111331', '172752', '16'), +('11', '89', '8', '111031', '155596', '16'), +('11', '89', '6', '111323', '177212', '16'), +('11', '89', '6', '111326', '175748', '16'), +('11', '89', '6', '111325', '175690', '16'), +('11', '89', '6', '111022', '155361', '16'), +('11', '89', '17', '56043', '117697', '16'), +('11', '89', '17', '56084', '114277', '16'), +('11', '89', '17', '104427', '99684', '16'), +('11', '89', '17', '54854', '75117', '16'), +('11', '89', '7', '56080', '110030', '16'), +('11', '89', '7', '56040', '109363', '16'), +('11', '89', '7', '104425', '95471', '16'), +('11', '89', '7', '54848', '70226', '16'), +('11', '89', '9', '67098', '177947', '16'), +('11', '89', '9', '104834', '121647', '16'), +('11', '89', '9', '56070', '106403', '16'), +('11', '89', '9', '56031', '106309', '16'), +('11', '89', '15', '111349', '179221', '16'), +('11', '89', '15', '111344', '177478', '16'), +('11', '89', '15', '111340', '177030', '16'), +('11', '89', '15', '111346', '176821', '16'), +('11', '89', '20', '111356', '177357', '16'), +('11', '89', '20', '111352', '176351', '16'), +('11', '89', '20', '111351', '173867', '16'), +('11', '89', '20', '111054', '155507', '16'), +('11', '89', '12', '56035', '108360', '16'), +('11', '89', '12', '56074', '107170', '16'), +('11', '89', '12', '104422', '93359', '16'), +('11', '89', '12', '49656', '70152', '16'), +('11', '89', '18', '56041', '114162', '16'), +('11', '89', '18', '62986', '112317', '16'), +('11', '89', '18', '104426', '97183', '16'), +('11', '89', '18', '54851', '71474', '16'), +('11', '89', '19', '81763', '110828', '16'), +('11', '89', '19', '62990', '110684', '16'), +('11', '89', '19', '56075', '110088', '16'), +('11', '89', '19', '56037', '110017', '16'), +('11', '89', '13', '111521', '183127', '16'), +('11', '89', '13', '111524', '173763', '16'), +('11', '89', '13', '111519', '173735', '16'), +('11', '89', '13', '111221', '162275', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '89', '14', '111537', '177366', '16'), +('11', '89', '14', '111535', '175141', '16'), +('11', '89', '14', '111237', '155514', '16'), +('11', '89', '14', '111235', '153390', '16'), +('11', '89', '11', '111335', '176375', '16'), +('11', '89', '11', '111337', '176254', '16'), +('11', '89', '11', '111338', '172767', '16'), +('11', '89', '11', '111034', '154625', '16'), +('11', '90', '22', '12425', '0', '17'), +('11', '90', '22', '21807', '0', '17'), +('11', '90', '22', '39342', '0', '17'), +('11', '90', '22', '23597', '0', '17'), +('11', '90', '1', '111311', '178899', '17'), +('11', '90', '1', '111307', '176770', '17'), +('11', '90', '1', '111306', '176576', '17'), +('11', '90', '1', '111304', '176285', '17'), +('11', '90', '2', '62985', '109943', '17'), +('11', '90', '2', '94056', '109866', '17'), +('11', '90', '2', '104424', '96051', '17'), +('11', '90', '2', '54845', '71091', '17'), +('11', '90', '3', '111314', '177265', '17'), +('11', '90', '3', '111316', '175493', '17'), +('11', '90', '3', '111315', '174608', '17'), +('11', '90', '3', '111013', '155414', '17'), +('11', '90', '5', '111319', '176774', '17'), +('11', '90', '5', '111321', '175976', '17'), +('11', '90', '5', '111318', '174030', '17'), +('11', '90', '5', '111018', '154924', '17'), +('11', '90', '8', '111332', '177354', '17'), +('11', '90', '8', '111329', '176340', '17'), +('11', '90', '8', '111331', '172757', '17'), +('11', '90', '8', '111031', '155603', '17'), +('11', '90', '6', '111323', '177218', '17'), +('11', '90', '6', '111326', '175756', '17'), +('11', '90', '6', '111325', '175694', '17'), +('11', '90', '6', '111022', '155367', '17'), +('11', '90', '17', '56043', '117702', '17'), +('11', '90', '17', '56084', '114284', '17'), +('11', '90', '17', '104427', '99690', '17'), +('11', '90', '17', '54854', '75122', '17'), +('11', '90', '7', '56080', '110037', '17'), +('11', '90', '7', '56040', '109373', '17'), +('11', '90', '7', '104425', '95476', '17'), +('11', '90', '7', '54848', '70232', '17'), +('11', '90', '9', '67098', '179951', '17'), +('11', '90', '9', '104834', '121653', '17'), +('11', '90', '9', '56070', '106408', '17'), +('11', '90', '9', '56031', '106319', '17'), +('11', '90', '15', '111349', '179229', '17'), +('11', '90', '15', '111344', '177483', '17'), +('11', '90', '15', '111340', '177035', '17'), +('11', '90', '15', '111346', '176826', '17'), +('11', '90', '20', '111356', '177364', '17'), +('11', '90', '20', '111352', '176356', '17'), +('11', '90', '20', '111351', '173874', '17'), +('11', '90', '20', '111054', '155513', '17'), +('11', '90', '12', '56035', '108369', '17'), +('11', '90', '12', '56074', '107176', '17'), +('11', '90', '12', '104422', '93367', '17'), +('11', '90', '12', '49656', '70153', '17'), +('11', '90', '18', '56041', '114171', '17'), +('11', '90', '18', '62986', '112322', '17'), +('11', '90', '18', '104426', '97185', '17'), +('11', '90', '18', '54851', '71479', '17'), +('11', '90', '19', '81763', '110838', '17'), +('11', '90', '19', '62990', '110692', '17'), +('11', '90', '19', '56075', '110093', '17'), +('11', '90', '19', '56037', '110019', '17'), +('11', '90', '13', '111521', '183132', '17'), +('11', '90', '13', '111524', '173770', '17'), +('11', '90', '13', '111519', '173743', '17'), +('11', '90', '13', '111221', '162281', '17'), +('11', '90', '14', '111537', '177371', '17'), +('11', '90', '14', '111535', '175145', '17'), +('11', '90', '14', '111237', '155519', '17'), +('11', '90', '14', '111235', '153394', '17'), +('11', '90', '11', '111335', '176381', '17'), +('11', '90', '11', '111337', '176260', '17'), +('11', '90', '11', '111338', '172773', '17'), +('11', '90', '11', '111034', '154631', '17'), +('11', '91', '22', '12425', '0', '17'), +('11', '91', '22', '21807', '0', '17'), +('11', '91', '22', '39342', '0', '17'), +('11', '91', '22', '23597', '0', '17'), +('11', '91', '1', '111311', '178903', '17'), +('11', '91', '1', '111307', '176778', '17'), +('11', '91', '1', '111306', '176582', '17'), +('11', '91', '1', '111304', '176290', '17'), +('11', '91', '2', '62985', '109947', '17'), +('11', '91', '2', '94056', '109869', '17'), +('11', '91', '2', '104424', '96059', '17'), +('11', '91', '2', '54845', '71097', '17'), +('11', '91', '3', '111314', '177271', '17'), +('11', '91', '3', '111316', '175499', '17'), +('11', '91', '3', '111315', '174614', '17'), +('11', '91', '3', '111013', '155421', '17'), +('11', '91', '5', '111319', '176781', '17'), +('11', '91', '5', '111321', '175981', '17'), +('11', '91', '5', '111318', '174037', '17'), +('11', '91', '5', '111018', '154931', '17'), +('11', '91', '8', '111332', '177360', '17'), +('11', '91', '8', '111329', '176347', '17'), +('11', '91', '8', '111331', '172763', '17'), +('11', '91', '8', '111031', '155610', '17'), +('11', '91', '6', '111323', '177223', '17'), +('11', '91', '6', '111326', '175763', '17'), +('11', '91', '6', '111325', '175699', '17'), +('11', '91', '6', '111022', '155373', '17'), +('11', '91', '17', '56043', '117708', '17'), +('11', '91', '17', '56084', '114290', '17'), +('11', '91', '17', '104427', '99696', '17'), +('11', '91', '17', '54854', '75127', '17'), +('11', '91', '7', '56080', '110044', '17'), +('11', '91', '7', '56040', '109383', '17'), +('11', '91', '7', '104425', '95482', '17'), +('11', '91', '7', '54848', '70238', '17'), +('11', '91', '9', '67098', '179955', '17'), +('11', '91', '9', '104834', '121659', '17'), +('11', '91', '9', '56070', '106414', '17'), +('11', '91', '9', '56031', '106329', '17'), +('11', '91', '15', '111349', '179237', '17'), +('11', '91', '15', '111344', '177488', '17'), +('11', '91', '15', '111340', '177041', '17'), +('11', '91', '15', '111346', '176832', '17'), +('11', '91', '20', '111356', '177370', '17'), +('11', '91', '20', '111352', '176362', '17'), +('11', '91', '20', '111351', '173882', '17'), +('11', '91', '20', '111054', '155519', '17'), +('11', '91', '12', '56035', '108379', '17'), +('11', '91', '12', '56074', '107182', '17'), +('11', '91', '12', '104422', '93375', '17'), +('11', '91', '12', '49656', '70154', '17'), +('11', '91', '18', '56041', '114179', '17'), +('11', '91', '18', '62986', '112327', '17'), +('11', '91', '18', '104426', '97187', '17'), +('11', '91', '18', '54851', '71483', '17'), +('11', '91', '19', '81763', '110847', '17'), +('11', '91', '19', '62990', '110699', '17'), +('11', '91', '19', '56075', '110098', '17'), +('11', '91', '19', '56037', '110022', '17'), +('11', '91', '13', '111521', '183137', '17'), +('11', '91', '13', '111524', '173776', '17'), +('11', '91', '13', '111519', '173750', '17'), +('11', '91', '13', '111221', '162287', '17'), +('11', '91', '14', '111537', '177376', '17'), +('11', '91', '14', '111535', '175149', '17'), +('11', '91', '14', '111237', '155524', '17'), +('11', '91', '14', '111235', '153398', '17'), +('11', '91', '11', '111335', '176387', '17'), +('11', '91', '11', '111337', '176266', '17'), +('11', '91', '11', '111338', '172779', '17'), +('11', '91', '11', '111034', '154637', '17'), +('11', '92', '22', '12425', '0', '17'), +('11', '92', '22', '21807', '0', '17'), +('11', '92', '22', '39342', '0', '17'), +('11', '92', '22', '23597', '0', '17'), +('11', '92', '1', '111311', '178907', '17'), +('11', '92', '1', '111307', '176786', '17'), +('11', '92', '1', '111306', '176587', '17'), +('11', '92', '1', '111304', '176295', '17'), +('11', '92', '2', '62985', '109951', '17'), +('11', '92', '2', '94056', '109873', '17'), +('11', '92', '2', '104424', '96067', '17'), +('11', '92', '2', '54845', '71103', '17'), +('11', '92', '3', '111314', '177278', '17'), +('11', '92', '3', '111316', '175505', '17'), +('11', '92', '3', '111315', '174620', '17'), +('11', '92', '3', '111013', '155427', '17'), +('11', '92', '5', '111319', '176788', '17'), +('11', '92', '5', '111321', '175986', '17'), +('11', '92', '5', '111318', '174045', '17'), +('11', '92', '5', '111018', '154938', '17'), +('11', '92', '8', '111332', '177367', '17'), +('11', '92', '8', '111329', '176355', '17'), +('11', '92', '8', '111331', '172768', '17'), +('11', '92', '8', '111031', '155616', '17'), +('11', '92', '6', '111323', '177229', '17'), +('11', '92', '6', '111326', '175771', '17'), +('11', '92', '6', '111325', '175704', '17'), +('11', '92', '6', '111022', '155379', '17'), +('11', '92', '17', '56043', '117713', '17'), +('11', '92', '17', '56084', '114296', '17'), +('11', '92', '17', '104427', '99702', '17'), +('11', '92', '17', '54854', '75131', '17'), +('11', '92', '7', '56080', '110051', '17'), +('11', '92', '7', '56040', '109393', '17'), +('11', '92', '7', '104425', '95487', '17'), +('11', '92', '7', '54848', '70244', '17'), +('11', '92', '9', '67098', '179960', '17'), +('11', '92', '9', '104834', '121665', '17'), +('11', '92', '9', '56070', '106419', '17'), +('11', '92', '9', '56031', '106339', '17'), +('11', '92', '15', '111349', '179246', '17'), +('11', '92', '15', '111344', '177493', '17'), +('11', '92', '15', '111340', '177046', '17'), +('11', '92', '15', '111346', '176838', '17'), +('11', '92', '20', '111356', '177376', '17'), +('11', '92', '20', '111352', '176367', '17'), +('11', '92', '20', '111351', '173889', '17'), +('11', '92', '20', '111054', '155525', '17'), +('11', '92', '12', '56035', '108388', '17'), +('11', '92', '12', '56074', '107188', '17'), +('11', '92', '12', '104422', '93383', '17'), +('11', '92', '12', '49656', '70155', '17'), +('11', '92', '18', '56041', '114188', '17'), +('11', '92', '18', '62986', '112332', '17'), +('11', '92', '18', '104426', '97189', '17'), +('11', '92', '18', '54851', '71487', '17'), +('11', '92', '19', '81763', '110857', '17'), +('11', '92', '19', '62990', '110707', '17'), +('11', '92', '19', '56075', '110103', '17'), +('11', '92', '19', '56037', '110024', '17'), +('11', '92', '13', '111521', '183143', '17'), +('11', '92', '13', '111524', '173783', '17'), +('11', '92', '13', '111519', '173758', '17'), +('11', '92', '13', '111221', '162293', '17'), +('11', '92', '14', '111537', '177381', '17'), +('11', '92', '14', '111535', '175153', '17'), +('11', '92', '14', '111237', '155530', '17'), +('11', '92', '14', '111235', '153402', '17'), +('11', '92', '11', '111335', '176393', '17'), +('11', '92', '11', '111337', '176272', '17'), +('11', '92', '11', '111338', '172786', '17'), +('11', '92', '11', '111034', '154643', '17'), +('11', '93', '22', '12425', '0', '17'), +('11', '93', '22', '21807', '0', '17'), +('11', '93', '22', '39342', '0', '17'), +('11', '93', '22', '23597', '0', '17'), +('11', '93', '1', '111311', '178911', '17'), +('11', '93', '1', '111307', '176794', '17'), +('11', '93', '1', '111306', '176593', '17'), +('11', '93', '1', '111304', '176300', '17'), +('11', '93', '2', '62985', '109955', '17'), +('11', '93', '2', '94056', '109876', '17'), +('11', '93', '2', '104424', '96075', '17'), +('11', '93', '2', '54845', '71109', '17'), +('11', '93', '3', '111314', '177284', '17'), +('11', '93', '3', '111316', '175511', '17'), +('11', '93', '3', '111315', '174627', '17'), +('11', '93', '3', '111013', '155434', '17'), +('11', '93', '5', '111319', '176796', '17'), +('11', '93', '5', '111321', '175991', '17'), +('11', '93', '5', '111318', '174052', '17'), +('11', '93', '5', '111018', '154945', '17'), +('11', '93', '8', '111332', '177374', '17'), +('11', '93', '8', '111329', '176363', '17'), +('11', '93', '8', '111331', '172773', '17'), +('11', '93', '8', '111031', '155623', '17'), +('11', '93', '6', '111323', '177235', '17'), +('11', '93', '6', '111326', '175779', '17'), +('11', '93', '6', '111325', '175709', '17'), +('11', '93', '6', '111022', '155384', '17'), +('11', '93', '17', '56043', '117719', '17'), +('11', '93', '17', '56084', '114302', '17'), +('11', '93', '17', '104427', '99709', '17'), +('11', '93', '17', '54854', '75136', '17'), +('11', '93', '7', '56080', '110058', '17'), +('11', '93', '7', '56040', '109403', '17'), +('11', '93', '7', '104425', '95493', '17'), +('11', '93', '7', '54848', '70250', '17'), +('11', '93', '9', '67098', '179964', '17'), +('11', '93', '9', '104834', '121671', '17'), +('11', '93', '9', '56070', '106424', '17'), +('11', '93', '9', '56031', '106349', '17'), +('11', '93', '15', '111349', '179254', '17'), +('11', '93', '15', '111344', '177497', '17'), +('11', '93', '15', '111340', '177052', '17'), +('11', '93', '15', '111346', '176844', '17'), +('11', '93', '20', '111356', '177382', '17'), +('11', '93', '20', '111352', '176372', '17'), +('11', '93', '20', '111351', '173897', '17'), +('11', '93', '20', '111054', '155532', '17'), +('11', '93', '12', '56035', '108398', '17'), +('11', '93', '12', '56074', '107194', '17'), +('11', '93', '12', '104422', '93390', '17'), +('11', '93', '12', '49656', '70155', '17'), +('11', '93', '18', '56041', '114196', '17'), +('11', '93', '18', '62986', '112337', '17'), +('11', '93', '18', '104426', '97191', '17'), +('11', '93', '18', '54851', '71491', '17'), +('11', '93', '19', '81763', '110867', '17'), +('11', '93', '19', '62990', '110714', '17'), +('11', '93', '19', '56075', '110107', '17'), +('11', '93', '19', '56037', '110027', '17'), +('11', '93', '13', '111521', '183148', '17'), +('11', '93', '13', '111524', '173790', '17'), +('11', '93', '13', '111519', '173765', '17'), +('11', '93', '13', '111221', '162299', '17'), +('11', '93', '14', '111537', '177386', '17'), +('11', '93', '14', '111535', '175157', '17'), +('11', '93', '14', '111237', '155535', '17'), +('11', '93', '14', '111235', '153406', '17'), +('11', '93', '11', '111335', '176399', '17'), +('11', '93', '11', '111337', '176278', '17'), +('11', '93', '11', '111338', '172792', '17'), +('11', '93', '11', '111034', '154648', '17'), +('11', '94', '22', '12425', '0', '17'), +('11', '94', '22', '21807', '0', '17'), +('11', '94', '22', '39342', '0', '17'), +('11', '94', '22', '23597', '0', '17'), +('11', '94', '1', '111311', '178915', '17'), +('11', '94', '1', '111307', '176803', '17'), +('11', '94', '1', '111306', '176598', '17'), +('11', '94', '1', '111304', '176304', '17'), +('11', '94', '2', '62985', '109959', '17'), +('11', '94', '2', '94056', '109879', '17'), +('11', '94', '2', '104424', '96083', '17'), +('11', '94', '2', '54845', '71114', '17'), +('11', '94', '3', '111314', '177291', '17'), +('11', '94', '3', '111316', '175517', '17'), +('11', '94', '3', '111315', '174633', '17'), +('11', '94', '3', '111013', '155440', '17'), +('11', '94', '5', '111319', '176803', '17'), +('11', '94', '5', '111321', '175996', '17'), +('11', '94', '5', '111318', '174060', '17'), +('11', '94', '5', '111018', '154952', '17'), +('11', '94', '8', '111332', '177380', '17'), +('11', '94', '8', '111329', '176370', '17'), +('11', '94', '8', '111331', '172779', '17'), +('11', '94', '8', '111031', '155630', '17'), +('11', '94', '6', '111323', '177241', '17'), +('11', '94', '6', '111326', '175786', '17'), +('11', '94', '6', '111325', '175713', '17'), +('11', '94', '6', '111022', '155390', '17'), +('11', '94', '17', '56043', '117724', '17'), +('11', '94', '17', '56084', '114308', '17'), +('11', '94', '17', '104427', '99715', '17'), +('11', '94', '17', '54854', '75141', '17'), +('11', '94', '7', '56080', '110065', '17'), +('11', '94', '7', '56040', '109413', '17'), +('11', '94', '7', '104425', '95498', '17'), +('11', '94', '7', '54848', '70256', '17'), +('11', '94', '9', '67098', '179968', '17'), +('11', '94', '9', '104834', '121677', '17'), +('11', '94', '9', '56070', '106429', '17'), +('11', '94', '9', '56031', '106359', '17'), +('11', '94', '15', '111349', '179262', '17'), +('11', '94', '15', '111344', '177502', '17'), +('11', '94', '15', '111340', '177057', '17'), +('11', '94', '15', '111346', '176850', '17'), +('11', '94', '20', '111356', '177388', '17'), +('11', '94', '20', '111352', '176378', '17'), +('11', '94', '20', '111351', '173904', '17'), +('11', '94', '20', '111054', '155538', '17'), +('11', '94', '12', '56035', '108407', '17'), +('11', '94', '12', '56074', '107200', '17'), +('11', '94', '12', '104422', '93398', '17'), +('11', '94', '12', '49656', '70156', '17'), +('11', '94', '18', '56041', '114205', '17'), +('11', '94', '18', '62986', '112342', '17'), +('11', '94', '18', '104426', '97193', '17'), +('11', '94', '18', '54851', '71495', '17'), +('11', '94', '19', '81763', '110877', '17'), +('11', '94', '19', '62990', '110722', '17'), +('11', '94', '19', '56075', '110112', '17'), +('11', '94', '19', '56037', '110029', '17'), +('11', '94', '13', '111521', '183153', '17'), +('11', '94', '13', '111524', '173796', '17'), +('11', '94', '13', '111519', '173772', '17'), +('11', '94', '13', '111221', '162305', '17'), +('11', '94', '14', '111537', '177391', '17'), +('11', '94', '14', '111535', '175161', '17'), +('11', '94', '14', '111237', '155540', '17'), +('11', '94', '14', '111235', '153410', '17'), +('11', '94', '11', '111335', '176405', '17'), +('11', '94', '11', '111337', '176285', '17'), +('11', '94', '11', '111338', '172798', '17'), +('11', '94', '11', '111034', '154654', '17'), +('11', '95', '22', '12425', '0', '18'), +('11', '95', '22', '21807', '0', '18'), +('11', '95', '22', '39342', '0', '18'), +('11', '95', '22', '23597', '0', '18'), +('11', '95', '1', '128691', '229877', '18'), +('11', '95', '1', '111311', '178919', '18'), +('11', '95', '1', '111307', '176811', '18'), +('11', '95', '1', '111306', '176604', '18'), +('11', '95', '2', '62985', '109963', '18'), +('11', '95', '2', '94056', '109883', '18'), +('11', '95', '2', '104424', '96091', '18'), +('11', '95', '2', '54845', '71120', '18'), +('11', '95', '3', '111314', '177297', '18'), +('11', '95', '3', '111316', '175523', '18'), +('11', '95', '3', '111315', '174639', '18'), +('11', '95', '3', '111013', '155447', '18'), +('11', '95', '5', '111319', '176810', '18'), +('11', '95', '5', '111321', '176002', '18'), +('11', '95', '5', '111318', '174067', '18'), +('11', '95', '5', '111018', '154959', '18'), +('11', '95', '8', '111332', '177387', '18'), +('11', '95', '8', '111329', '176378', '18'), +('11', '95', '8', '111331', '172784', '18'), +('11', '95', '8', '111031', '155636', '18'), +('11', '95', '6', '111323', '177246', '18'), +('11', '95', '6', '111326', '175794', '18'), +('11', '95', '6', '111325', '175718', '18'), +('11', '95', '6', '111022', '155396', '18'), +('11', '95', '17', '56043', '117730', '18'), +('11', '95', '17', '56084', '114314', '18'), +('11', '95', '17', '104427', '99721', '18'), +('11', '95', '17', '54854', '75145', '18'), +('11', '95', '7', '56080', '110072', '18'), +('11', '95', '7', '56040', '109424', '18'), +('11', '95', '7', '104425', '95504', '18'), +('11', '95', '7', '54848', '70263', '18'), +('11', '95', '9', '67098', '179973', '18'), +('11', '95', '9', '104834', '121683', '18'), +('11', '95', '9', '56070', '106435', '18'), +('11', '95', '9', '56031', '106369', '18'), +('11', '95', '15', '111349', '179270', '18'), +('11', '95', '15', '111344', '177507', '18'), +('11', '95', '15', '111340', '177063', '18'), +('11', '95', '15', '111346', '176856', '18'), +('11', '95', '20', '128733', '227264', '18'), +('11', '95', '20', '111356', '177395', '18'), +('11', '95', '20', '111352', '176383', '18'), +('11', '95', '20', '111351', '173912', '18'), +('11', '95', '12', '56035', '108417', '18'), +('11', '95', '12', '56074', '107206', '18'), +('11', '95', '12', '104422', '93406', '18'), +('11', '95', '12', '49656', '70157', '18'), +('11', '95', '18', '56041', '114213', '18'), +('11', '95', '18', '62986', '112347', '18'), +('11', '95', '18', '104426', '97195', '18'), +('11', '95', '18', '54851', '71499', '18'), +('11', '95', '19', '81763', '110887', '18'), +('11', '95', '19', '62990', '110730', '18'), +('11', '95', '19', '56075', '110117', '18'), +('11', '95', '19', '56037', '110032', '18'), +('11', '95', '13', '111521', '183159', '18'), +('11', '95', '13', '111524', '173803', '18'), +('11', '95', '13', '111519', '173780', '18'), +('11', '95', '13', '111221', '162311', '18'), +('11', '95', '14', '111537', '177396', '18'), +('11', '95', '14', '111535', '175165', '18'), +('11', '95', '14', '111237', '155545', '18'), +('11', '95', '14', '111235', '153414', '18'), +('11', '95', '11', '111335', '176411', '18'), +('11', '95', '11', '111337', '176291', '18'), +('11', '95', '11', '111338', '172804', '18'), +('11', '95', '11', '111034', '154660', '18'), +('11', '96', '22', '12425', '0', '18'), +('11', '96', '22', '21807', '0', '18'), +('11', '96', '22', '39342', '0', '18'), +('11', '96', '22', '23597', '0', '18'), +('11', '96', '1', '128691', '229883', '18'), +('11', '96', '1', '111311', '178923', '18'), +('11', '96', '1', '111307', '176819', '18'), +('11', '96', '1', '111306', '176609', '18'), +('11', '96', '2', '62985', '109966', '18'), +('11', '96', '2', '94056', '109886', '18'), +('11', '96', '2', '104424', '96099', '18'), +('11', '96', '2', '54845', '71126', '18'), +('11', '96', '3', '111314', '177304', '18'), +('11', '96', '3', '111316', '175529', '18'), +('11', '96', '3', '111315', '174645', '18'), +('11', '96', '3', '111013', '155453', '18'), +('11', '96', '5', '111319', '176817', '18'), +('11', '96', '5', '111321', '176007', '18'), +('11', '96', '5', '111318', '174075', '18'), +('11', '96', '5', '111018', '154967', '18'), +('11', '96', '8', '111332', '177394', '18'), +('11', '96', '8', '111329', '176385', '18'), +('11', '96', '8', '111331', '172789', '18'), +('11', '96', '8', '111031', '155643', '18'), +('11', '96', '6', '111323', '177252', '18'), +('11', '96', '6', '111326', '175802', '18'), +('11', '96', '6', '111325', '175723', '18'), +('11', '96', '6', '111022', '155402', '18'), +('11', '96', '17', '56043', '117735', '18'), +('11', '96', '17', '56084', '114321', '18'), +('11', '96', '17', '104427', '99727', '18'), +('11', '96', '17', '54854', '75150', '18'), +('11', '96', '7', '56080', '110079', '18'), +('11', '96', '7', '56040', '109434', '18'), +('11', '96', '7', '104425', '95509', '18'), +('11', '96', '7', '54848', '70269', '18'), +('11', '96', '9', '67098', '179977', '18'), +('11', '96', '9', '104834', '121689', '18'), +('11', '96', '9', '56070', '106440', '18'), +('11', '96', '9', '56031', '106379', '18'), +('11', '96', '15', '111349', '179278', '18'), +('11', '96', '15', '111344', '177511', '18'), +('11', '96', '15', '111340', '177068', '18'), +('11', '96', '15', '111346', '176862', '18'), +('11', '96', '20', '128733', '227270', '18'), +('11', '96', '20', '111356', '177401', '18'), +('11', '96', '20', '111352', '176388', '18'), +('11', '96', '20', '111351', '173919', '18'), +('11', '96', '12', '56035', '108426', '18'), +('11', '96', '12', '56074', '107213', '18'), +('11', '96', '12', '104422', '93414', '18'), +('11', '96', '12', '49656', '70158', '18'), +('11', '96', '18', '56041', '114221', '18'), +('11', '96', '18', '62986', '112352', '18'), +('11', '96', '18', '104426', '97197', '18'), +('11', '96', '18', '54851', '71503', '18'), +('11', '96', '19', '81763', '110897', '18'), +('11', '96', '19', '62990', '110737', '18'), +('11', '96', '19', '56075', '110122', '18'), +('11', '96', '19', '56037', '110034', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '96', '13', '111521', '183164', '18'), +('11', '96', '13', '111524', '173810', '18'), +('11', '96', '13', '111519', '173787', '18'), +('11', '96', '13', '111221', '162317', '18'), +('11', '96', '14', '111537', '177402', '18'), +('11', '96', '14', '111535', '175169', '18'), +('11', '96', '14', '111237', '155550', '18'), +('11', '96', '14', '111235', '153417', '18'), +('11', '96', '11', '111335', '176417', '18'), +('11', '96', '11', '111337', '176297', '18'), +('11', '96', '11', '111338', '172810', '18'), +('11', '96', '11', '111034', '154666', '18'), +('11', '97', '22', '12425', '0', '18'), +('11', '97', '22', '21807', '0', '18'), +('11', '97', '22', '39342', '0', '18'), +('11', '97', '22', '23597', '0', '18'), +('11', '97', '1', '128691', '229890', '18'), +('11', '97', '1', '111311', '178927', '18'), +('11', '97', '1', '111307', '176827', '18'), +('11', '97', '1', '111306', '176615', '18'), +('11', '97', '2', '62985', '109970', '18'), +('11', '97', '2', '94056', '109889', '18'), +('11', '97', '2', '104424', '96107', '18'), +('11', '97', '2', '54845', '71132', '18'), +('11', '97', '3', '111314', '177310', '18'), +('11', '97', '3', '111316', '175535', '18'), +('11', '97', '3', '111315', '174651', '18'), +('11', '97', '3', '111013', '155460', '18'), +('11', '97', '5', '111319', '176824', '18'), +('11', '97', '5', '111321', '176012', '18'), +('11', '97', '5', '111318', '174082', '18'), +('11', '97', '5', '111018', '154974', '18'), +('11', '97', '8', '111332', '177400', '18'), +('11', '97', '8', '111329', '176393', '18'), +('11', '97', '8', '111331', '172795', '18'), +('11', '97', '8', '111031', '155650', '18'), +('11', '97', '6', '111323', '177258', '18'), +('11', '97', '6', '111326', '175810', '18'), +('11', '97', '6', '111325', '175727', '18'), +('11', '97', '6', '111022', '155407', '18'), +('11', '97', '17', '56043', '117741', '18'), +('11', '97', '17', '56084', '114327', '18'), +('11', '97', '17', '104427', '99733', '18'), +('11', '97', '17', '54854', '75155', '18'), +('11', '97', '7', '56080', '110087', '18'), +('11', '97', '7', '56040', '109444', '18'), +('11', '97', '7', '104425', '95515', '18'), +('11', '97', '7', '54848', '70275', '18'), +('11', '97', '9', '67098', '179981', '18'), +('11', '97', '9', '104834', '121695', '18'), +('11', '97', '9', '56070', '106445', '18'), +('11', '97', '9', '56031', '106389', '18'), +('11', '97', '15', '111349', '179286', '18'), +('11', '97', '15', '111344', '177516', '18'), +('11', '97', '15', '111340', '177074', '18'), +('11', '97', '15', '111346', '176868', '18'), +('11', '97', '20', '128733', '227276', '18'), +('11', '97', '20', '111356', '177407', '18'), +('11', '97', '20', '111352', '176393', '18'), +('11', '97', '20', '111351', '173927', '18'), +('11', '97', '12', '56035', '108436', '18'), +('11', '97', '12', '56074', '107219', '18'), +('11', '97', '12', '104422', '93422', '18'), +('11', '97', '12', '49656', '70159', '18'), +('11', '97', '18', '56041', '114230', '18'), +('11', '97', '18', '62986', '112357', '18'), +('11', '97', '18', '104426', '97199', '18'), +('11', '97', '18', '54851', '71507', '18'), +('11', '97', '19', '81763', '110907', '18'), +('11', '97', '19', '62990', '110745', '18'), +('11', '97', '19', '56075', '110126', '18'), +('11', '97', '19', '56037', '110037', '18'), +('11', '97', '13', '111521', '183169', '18'), +('11', '97', '13', '111524', '173816', '18'), +('11', '97', '13', '111519', '173795', '18'), +('11', '97', '13', '111221', '162323', '18'), +('11', '97', '14', '111537', '177407', '18'), +('11', '97', '14', '111535', '175173', '18'), +('11', '97', '14', '111237', '155555', '18'), +('11', '97', '14', '111235', '153421', '18'), +('11', '97', '11', '111335', '176423', '18'), +('11', '97', '11', '111337', '176303', '18'), +('11', '97', '11', '111338', '172816', '18'), +('11', '97', '11', '111034', '154672', '18'), +('11', '98', '22', '12425', '0', '18'), +('11', '98', '22', '21807', '0', '18'), +('11', '98', '22', '39342', '0', '18'), +('11', '98', '22', '23597', '0', '18'), +('11', '98', '1', '128691', '229896', '18'), +('11', '98', '1', '111311', '178932', '18'), +('11', '98', '1', '111307', '176835', '18'), +('11', '98', '1', '111306', '176620', '18'), +('11', '98', '2', '62985', '109974', '18'), +('11', '98', '2', '94056', '109893', '18'), +('11', '98', '2', '104424', '96115', '18'), +('11', '98', '2', '54845', '71138', '18'), +('11', '98', '3', '111314', '177317', '18'), +('11', '98', '3', '111316', '175541', '18'), +('11', '98', '3', '111315', '174657', '18'), +('11', '98', '3', '111013', '155466', '18'), +('11', '98', '5', '111319', '176831', '18'), +('11', '98', '5', '111321', '176017', '18'), +('11', '98', '5', '111318', '174090', '18'), +('11', '98', '5', '111018', '154981', '18'), +('11', '98', '8', '111332', '177407', '18'), +('11', '98', '8', '111329', '176400', '18'), +('11', '98', '8', '111331', '172800', '18'), +('11', '98', '8', '111031', '155656', '18'), +('11', '98', '6', '111323', '177264', '18'), +('11', '98', '6', '111326', '175817', '18'), +('11', '98', '6', '111325', '175732', '18'), +('11', '98', '6', '111022', '155413', '18'), +('11', '98', '17', '56043', '117746', '18'), +('11', '98', '17', '56084', '114333', '18'), +('11', '98', '17', '104427', '99739', '18'), +('11', '98', '17', '54854', '75160', '18'), +('11', '98', '7', '56080', '110094', '18'), +('11', '98', '7', '56040', '109454', '18'), +('11', '98', '7', '104425', '95520', '18'), +('11', '98', '7', '54848', '70281', '18'), +('11', '98', '9', '67098', '179986', '18'), +('11', '98', '9', '104834', '121701', '18'), +('11', '98', '9', '56070', '106450', '18'), +('11', '98', '9', '56031', '106399', '18'), +('11', '98', '15', '111349', '179294', '18'), +('11', '98', '15', '111344', '177521', '18'), +('11', '98', '15', '111340', '177079', '18'), +('11', '98', '15', '111346', '176874', '18'), +('11', '98', '20', '128733', '227282', '18'), +('11', '98', '20', '111356', '177413', '18'), +('11', '98', '20', '111352', '176399', '18'), +('11', '98', '20', '111351', '173934', '18'), +('11', '98', '12', '56035', '108445', '18'), +('11', '98', '12', '56074', '107225', '18'), +('11', '98', '12', '104422', '93430', '18'), +('11', '98', '12', '49656', '70159', '18'), +('11', '98', '18', '56041', '114238', '18'), +('11', '98', '18', '62986', '112362', '18'), +('11', '98', '18', '104426', '97201', '18'), +('11', '98', '18', '54851', '71511', '18'), +('11', '98', '19', '81763', '110917', '18'), +('11', '98', '19', '62990', '110752', '18'), +('11', '98', '19', '56075', '110131', '18'), +('11', '98', '19', '56037', '110040', '18'), +('11', '98', '13', '111521', '183175', '18'), +('11', '98', '13', '111524', '173823', '18'), +('11', '98', '13', '111519', '173802', '18'), +('11', '98', '13', '111221', '162329', '18'), +('11', '98', '14', '111537', '177412', '18'), +('11', '98', '14', '111535', '175177', '18'), +('11', '98', '14', '111237', '155560', '18'), +('11', '98', '14', '111235', '153425', '18'), +('11', '98', '11', '111335', '176429', '18'), +('11', '98', '11', '111337', '176309', '18'), +('11', '98', '11', '111338', '172822', '18'), +('11', '98', '11', '111034', '154678', '18'), +('11', '99', '22', '12425', '0', '18'), +('11', '99', '22', '21807', '0', '18'), +('11', '99', '22', '39342', '0', '18'), +('11', '99', '22', '23597', '0', '18'), +('11', '99', '1', '128691', '229903', '18'), +('11', '99', '1', '111311', '178936', '18'), +('11', '99', '1', '111307', '176843', '18'), +('11', '99', '1', '111306', '176626', '18'), +('11', '99', '2', '62985', '109978', '18'), +('11', '99', '2', '94056', '109896', '18'), +('11', '99', '2', '104424', '96123', '18'), +('11', '99', '2', '54845', '71144', '18'), +('11', '99', '3', '111314', '177323', '18'), +('11', '99', '3', '111316', '175548', '18'), +('11', '99', '3', '111315', '174664', '18'), +('11', '99', '3', '111013', '155473', '18'), +('11', '99', '5', '111319', '176839', '18'), +('11', '99', '5', '111321', '176022', '18'), +('11', '99', '5', '111318', '174097', '18'), +('11', '99', '5', '111018', '154988', '18'), +('11', '99', '8', '111332', '177414', '18'), +('11', '99', '8', '111329', '176408', '18'), +('11', '99', '8', '111331', '172805', '18'), +('11', '99', '8', '111031', '155663', '18'), +('11', '99', '6', '111323', '177269', '18'), +('11', '99', '6', '111326', '175825', '18'), +('11', '99', '6', '111325', '175737', '18'), +('11', '99', '6', '111022', '155419', '18'), +('11', '99', '17', '56043', '117752', '18'), +('11', '99', '17', '56084', '114339', '18'), +('11', '99', '17', '104427', '99745', '18'), +('11', '99', '17', '54854', '75164', '18'), +('11', '99', '7', '56080', '110101', '18'), +('11', '99', '7', '56040', '109464', '18'), +('11', '99', '7', '104425', '95526', '18'), +('11', '99', '7', '54848', '70287', '18'), +('11', '99', '9', '67098', '179990', '18'), +('11', '99', '9', '104834', '121707', '18'), +('11', '99', '9', '56070', '106456', '18'), +('11', '99', '9', '56031', '106409', '18'), +('11', '99', '15', '111349', '179302', '18'), +('11', '99', '15', '111344', '177525', '18'), +('11', '99', '15', '111340', '177085', '18'), +('11', '99', '15', '111346', '176880', '18'), +('11', '99', '20', '128733', '227288', '18'), +('11', '99', '20', '111356', '177419', '18'), +('11', '99', '20', '111352', '176404', '18'), +('11', '99', '20', '111351', '173941', '18'), +('11', '99', '12', '56035', '108454', '18'), +('11', '99', '12', '56074', '107231', '18'), +('11', '99', '12', '104422', '93438', '18'), +('11', '99', '12', '49656', '70160', '18'), +('11', '99', '18', '56041', '114247', '18'), +('11', '99', '18', '62986', '112367', '18'), +('11', '99', '18', '104426', '97203', '18'), +('11', '99', '18', '54851', '71515', '18'), +('11', '99', '19', '81763', '110927', '18'), +('11', '99', '19', '62990', '110760', '18'), +('11', '99', '19', '56075', '110136', '18'), +('11', '99', '19', '56037', '110042', '18'), +('11', '99', '13', '111521', '183180', '18'), +('11', '99', '13', '111524', '173829', '18'), +('11', '99', '13', '111519', '173810', '18'), +('11', '99', '13', '111221', '162335', '18'), +('11', '99', '14', '111537', '177417', '18'), +('11', '99', '14', '111535', '175181', '18'), +('11', '99', '14', '111237', '155565', '18'), +('11', '99', '14', '111235', '153429', '18'), +('11', '99', '11', '111335', '176434', '18'), +('11', '99', '11', '111337', '176315', '18'), +('11', '99', '11', '111338', '172829', '18'), +('11', '99', '11', '111034', '154684', '18'), +('11', '100', '22', '12425', '0', '20'), +('11', '100', '22', '21807', '0', '20'), +('11', '100', '22', '39342', '0', '20'), +('11', '100', '22', '23597', '0', '20'), +('11', '100', '1', '98769', '284382', '20'), +('11', '100', '1', '128691', '229909', '20'), +('11', '100', '1', '111311', '178940', '20'), +('11', '100', '1', '111307', '176852', '20'), +('11', '100', '2', '62985', '109982', '20'), +('11', '100', '2', '94056', '109899', '20'), +('11', '100', '2', '104424', '96131', '20'), +('11', '100', '2', '54845', '71150', '20'), +('11', '100', '3', '111314', '177330', '20'), +('11', '100', '3', '111316', '175554', '20'), +('11', '100', '3', '111315', '174670', '20'), +('11', '100', '3', '111013', '155479', '20'), +('11', '100', '5', '111319', '176846', '20'), +('11', '100', '5', '111321', '176027', '20'), +('11', '100', '5', '111318', '174105', '20'), +('11', '100', '5', '111018', '154995', '20'), +('11', '100', '8', '111332', '177420', '20'), +('11', '100', '8', '111329', '176415', '20'), +('11', '100', '8', '111331', '172811', '20'), +('11', '100', '8', '111031', '155670', '20'), +('11', '100', '6', '111323', '177275', '20'), +('11', '100', '6', '111326', '175833', '20'), +('11', '100', '6', '111325', '175741', '20'), +('11', '100', '6', '111022', '155425', '20'), +('11', '100', '17', '56043', '117758', '20'), +('11', '100', '17', '56084', '114345', '20'), +('11', '100', '17', '104427', '99752', '20'), +('11', '100', '17', '54854', '75169', '20'), +('11', '100', '7', '56080', '110108', '20'), +('11', '100', '7', '56040', '109474', '20'), +('11', '100', '7', '104425', '95531', '20'), +('11', '100', '7', '54848', '70293', '20'), +('11', '100', '9', '67098', '179994', '20'), +('11', '100', '9', '104834', '121713', '20'), +('11', '100', '9', '56070', '106461', '20'), +('11', '100', '9', '56031', '106419', '20'), +('11', '100', '15', '111349', '179311', '20'), +('11', '100', '15', '111344', '177530', '20'), +('11', '100', '15', '111340', '177090', '20'), +('11', '100', '15', '111346', '176886', '20'), +('11', '100', '20', '128733', '227294', '20'), +('11', '100', '20', '111356', '177426', '20'), +('11', '100', '20', '111352', '176409', '20'), +('11', '100', '20', '111351', '173949', '20'), +('11', '100', '12', '56035', '108464', '20'), +('11', '100', '12', '56074', '107237', '20'), +('11', '100', '12', '104422', '93446', '20'), +('11', '100', '12', '49656', '70161', '20'), +('11', '100', '18', '56041', '114255', '20'), +('11', '100', '18', '62986', '112372', '20'), +('11', '100', '18', '104426', '97205', '20'), +('11', '100', '18', '54851', '71520', '20'), +('11', '100', '19', '81763', '110937', '20'), +('11', '100', '19', '62990', '110767', '20'), +('11', '100', '19', '56075', '110140', '20'), +('11', '100', '19', '56037', '110045', '20'), +('11', '100', '13', '111521', '183186', '20'), +('11', '100', '13', '111524', '173837', '20'), +('11', '100', '13', '111519', '173817', '20'), +('11', '100', '13', '111221', '162341', '20'), +('11', '100', '14', '111537', '177422', '20'), +('11', '100', '14', '111535', '175185', '20'), +('11', '100', '14', '111237', '155571', '20'), +('11', '100', '14', '111235', '153433', '20'), +('11', '100', '11', '133816', '229826', '20'), +('11', '100', '11', '111335', '176440', '20'), +('11', '100', '11', '111337', '176321', '20'), +('11', '100', '11', '111338', '172835', '20'), +('11', '100', '22', '12425', '0', '19'), +('11', '100', '22', '21807', '0', '19'), +('11', '100', '22', '39342', '0', '19'), +('11', '100', '22', '23597', '0', '19'), +('11', '100', '1', '98769', '284382', '19'), +('11', '100', '1', '128691', '229909', '19'), +('11', '100', '1', '111311', '178940', '19'), +('11', '100', '1', '111307', '176852', '19'), +('11', '100', '2', '62985', '109982', '19'), +('11', '100', '2', '94056', '109899', '19'), +('11', '100', '2', '104424', '96131', '19'), +('11', '100', '2', '54845', '71150', '19'), +('11', '100', '3', '111314', '177330', '19'), +('11', '100', '3', '111316', '175554', '19'), +('11', '100', '3', '111315', '174670', '19'), +('11', '100', '3', '111013', '155479', '19'), +('11', '100', '5', '111319', '176846', '19'), +('11', '100', '5', '111321', '176027', '19'), +('11', '100', '5', '111318', '174105', '19'), +('11', '100', '5', '111018', '154995', '19'), +('11', '100', '8', '111332', '177420', '19'), +('11', '100', '8', '111329', '176415', '19'), +('11', '100', '8', '111331', '172811', '19'), +('11', '100', '8', '111031', '155670', '19'), +('11', '100', '6', '111323', '177275', '19'), +('11', '100', '6', '111326', '175833', '19'), +('11', '100', '6', '111325', '175741', '19'), +('11', '100', '6', '111022', '155425', '19'), +('11', '100', '17', '56043', '117758', '19'), +('11', '100', '17', '56084', '114345', '19'), +('11', '100', '17', '104427', '99752', '19'), +('11', '100', '17', '54854', '75169', '19'), +('11', '100', '7', '56080', '110108', '19'), +('11', '100', '7', '56040', '109474', '19'), +('11', '100', '7', '104425', '95531', '19'), +('11', '100', '7', '54848', '70293', '19'), +('11', '100', '9', '67098', '179994', '19'), +('11', '100', '9', '104834', '121713', '19'), +('11', '100', '9', '56070', '106461', '19'), +('11', '100', '9', '56031', '106419', '19'), +('11', '100', '15', '111349', '179311', '19'), +('11', '100', '15', '111344', '177530', '19'), +('11', '100', '15', '111340', '177090', '19'), +('11', '100', '15', '111346', '176886', '19'), +('11', '100', '20', '128733', '227294', '19'), +('11', '100', '20', '111356', '177426', '19'), +('11', '100', '20', '111352', '176409', '19'), +('11', '100', '20', '111351', '173949', '19'), +('11', '100', '12', '56035', '108464', '19'), +('11', '100', '12', '56074', '107237', '19'), +('11', '100', '12', '104422', '93446', '19'), +('11', '100', '12', '49656', '70161', '19'), +('11', '100', '18', '56041', '114255', '19'), +('11', '100', '18', '62986', '112372', '19'), +('11', '100', '18', '104426', '97205', '19'), +('11', '100', '18', '54851', '71520', '19'), +('11', '100', '19', '81763', '110937', '19'), +('11', '100', '19', '62990', '110767', '19'), +('11', '100', '19', '56075', '110140', '19'), +('11', '100', '19', '56037', '110045', '19'), +('11', '100', '13', '111521', '183185', '19'), +('11', '100', '13', '111524', '173836', '19'), +('11', '100', '13', '111519', '173817', '19'), +('11', '100', '13', '111221', '162341', '19'), +('11', '100', '14', '111537', '177422', '19'), +('11', '100', '14', '111535', '175185', '19'), +('11', '100', '14', '111237', '155571', '19'), +('11', '100', '14', '111235', '153433', '19'), +('11', '100', '11', '133816', '229826', '19'), +('11', '100', '11', '111335', '176440', '19'), +('11', '100', '11', '111337', '176321', '19'), +('11', '100', '11', '111338', '172835', '19'), +('11', '101', '22', '12425', '0', '20'), +('11', '101', '22', '21807', '0', '20'), +('11', '101', '22', '39342', '0', '20'), +('11', '101', '22', '23597', '0', '20'), +('11', '101', '1', '98769', '284386', '20'), +('11', '101', '1', '128691', '229915', '20'), +('11', '101', '1', '111311', '178944', '20'), +('11', '101', '1', '111307', '176860', '20'), +('11', '101', '2', '62985', '109986', '20'), +('11', '101', '2', '94056', '109903', '20'), +('11', '101', '2', '104424', '96139', '20'), +('11', '101', '2', '54845', '71156', '20'), +('11', '101', '3', '111314', '177337', '20'), +('11', '101', '3', '111316', '175560', '20'), +('11', '101', '3', '111315', '174676', '20'), +('11', '101', '3', '111013', '155486', '20'), +('11', '101', '5', '111319', '176853', '20'), +('11', '101', '5', '111321', '176032', '20'), +('11', '101', '5', '111318', '174112', '20'), +('11', '101', '5', '111018', '155002', '20'), +('11', '101', '8', '111332', '177427', '20'), +('11', '101', '8', '111329', '176423', '20'), +('11', '101', '8', '111331', '172816', '20'), +('11', '101', '8', '111031', '155677', '20'), +('11', '101', '6', '111323', '177281', '20'), +('11', '101', '6', '111326', '175840', '20'), +('11', '101', '6', '111325', '175746', '20'), +('11', '101', '6', '111022', '155430', '20'), +('11', '101', '17', '56043', '117763', '20'), +('11', '101', '17', '56084', '114351', '20'), +('11', '101', '17', '104427', '99758', '20'), +('11', '101', '17', '54854', '75174', '20'), +('11', '101', '7', '56080', '110115', '20'), +('11', '101', '7', '56040', '109484', '20'), +('11', '101', '7', '104425', '95537', '20'), +('11', '101', '7', '54848', '70299', '20'), +('11', '101', '9', '67098', '179999', '20'), +('11', '101', '9', '104834', '121720', '20'), +('11', '101', '9', '56070', '106466', '20'), +('11', '101', '9', '56031', '106429', '20'), +('11', '101', '15', '111349', '179319', '20'), +('11', '101', '15', '111344', '177535', '20'), +('11', '101', '15', '111340', '177096', '20'), +('11', '101', '15', '111346', '176891', '20'), +('11', '101', '20', '128733', '227299', '20'), +('11', '101', '20', '111356', '177432', '20'), +('11', '101', '20', '111352', '176415', '20'), +('11', '101', '20', '111351', '173956', '20'), +('11', '101', '12', '56035', '108473', '20'), +('11', '101', '12', '56074', '107243', '20'), +('11', '101', '12', '104422', '93454', '20'), +('11', '101', '12', '49656', '70162', '20'), +('11', '101', '18', '56041', '114264', '20'), +('11', '101', '18', '62986', '112377', '20'), +('11', '101', '18', '104426', '97207', '20'), +('11', '101', '18', '54851', '71524', '20'), +('11', '101', '19', '81763', '110946', '20'), +('11', '101', '19', '62990', '110775', '20'), +('11', '101', '19', '56075', '110145', '20'), +('11', '101', '19', '56037', '110047', '20'), +('11', '101', '13', '111521', '183191', '20'), +('11', '101', '13', '111524', '173843', '20'), +('11', '101', '13', '111519', '173825', '20'), +('11', '101', '13', '111221', '162347', '20'), +('11', '101', '14', '111537', '177427', '20'), +('11', '101', '14', '111535', '175189', '20'), +('11', '101', '14', '111237', '155576', '20'), +('11', '101', '14', '111235', '153437', '20'), +('11', '101', '11', '133816', '229830', '20'), +('11', '101', '11', '111335', '176446', '20'), +('11', '101', '11', '111337', '176327', '20'), +('11', '101', '11', '111338', '172841', '20'), +('11', '102', '22', '12425', '0', '20'), +('11', '102', '22', '21807', '0', '20'), +('11', '102', '22', '39342', '0', '20'), +('11', '102', '22', '23597', '0', '20'), +('11', '102', '1', '98769', '284390', '20'), +('11', '102', '1', '128691', '229922', '20'), +('11', '102', '1', '111311', '178948', '20'), +('11', '102', '1', '111307', '176868', '20'), +('11', '102', '2', '62985', '109990', '20'), +('11', '102', '2', '94056', '109906', '20'), +('11', '102', '2', '104424', '96147', '20'), +('11', '102', '2', '54845', '71161', '20'), +('11', '102', '3', '111314', '177343', '20'), +('11', '102', '3', '111316', '175566', '20'), +('11', '102', '3', '111315', '174682', '20'), +('11', '102', '3', '111013', '155492', '20'), +('11', '102', '5', '111319', '176860', '20'), +('11', '102', '5', '111321', '176037', '20'), +('11', '102', '5', '111318', '174120', '20'), +('11', '102', '5', '111018', '155010', '20'), +('11', '102', '8', '111332', '177434', '20'), +('11', '102', '8', '111329', '176430', '20'), +('11', '102', '8', '111331', '172821', '20'), +('11', '102', '8', '111031', '155683', '20'), +('11', '102', '6', '111323', '177287', '20'), +('11', '102', '6', '111326', '175848', '20'), +('11', '102', '6', '111325', '175751', '20'), +('11', '102', '6', '111022', '155436', '20'), +('11', '102', '17', '56043', '117769', '20'), +('11', '102', '17', '56084', '114358', '20'), +('11', '102', '17', '104427', '99764', '20'), +('11', '102', '17', '54854', '75178', '20'), +('11', '102', '7', '56080', '110122', '20'), +('11', '102', '7', '56040', '109494', '20'), +('11', '102', '7', '104425', '95542', '20'), +('11', '102', '7', '54848', '70305', '20'), +('11', '102', '9', '67098', '180003', '20'), +('11', '102', '9', '104834', '121726', '20'), +('11', '102', '9', '56070', '106471', '20'), +('11', '102', '9', '56031', '106440', '20'), +('11', '102', '15', '111349', '179327', '20'), +('11', '102', '15', '111344', '177540', '20'), +('11', '102', '15', '111340', '177101', '20'), +('11', '102', '15', '111346', '176897', '20'), +('11', '102', '20', '128733', '227305', '20'), +('11', '102', '20', '111356', '177438', '20'), +('11', '102', '20', '111352', '176420', '20'), +('11', '102', '20', '111351', '173964', '20'), +('11', '102', '12', '56035', '108483', '20'), +('11', '102', '12', '56074', '107249', '20'), +('11', '102', '12', '104422', '93461', '20'), +('11', '102', '12', '49656', '70163', '20'), +('11', '102', '18', '56041', '114272', '20'), +('11', '102', '18', '62986', '112382', '20'), +('11', '102', '18', '104426', '97209', '20'), +('11', '102', '18', '54851', '71528', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '102', '19', '81763', '110956', '20'), +('11', '102', '19', '62990', '110782', '20'), +('11', '102', '19', '56075', '110150', '20'), +('11', '102', '19', '56037', '110050', '20'), +('11', '102', '13', '111521', '183197', '20'), +('11', '102', '13', '111524', '173850', '20'), +('11', '102', '13', '111519', '173832', '20'), +('11', '102', '13', '111221', '162353', '20'), +('11', '102', '14', '111537', '177432', '20'), +('11', '102', '14', '111535', '175193', '20'), +('11', '102', '14', '111237', '155581', '20'), +('11', '102', '14', '111235', '153441', '20'), +('11', '102', '11', '133816', '229834', '20'), +('11', '102', '11', '111335', '176452', '20'), +('11', '102', '11', '111337', '176333', '20'), +('11', '102', '11', '111338', '172847', '20'), +('11', '103', '22', '12425', '0', '20'), +('11', '103', '22', '21807', '0', '20'), +('11', '103', '22', '39342', '0', '20'), +('11', '103', '22', '23597', '0', '20'), +('11', '103', '1', '98769', '284395', '20'), +('11', '103', '1', '128691', '229928', '20'), +('11', '103', '1', '111311', '178952', '20'), +('11', '103', '1', '111307', '176876', '20'), +('11', '103', '2', '62985', '109994', '20'), +('11', '103', '2', '94056', '109909', '20'), +('11', '103', '2', '104424', '96155', '20'), +('11', '103', '2', '54845', '71167', '20'), +('11', '103', '3', '111314', '177350', '20'), +('11', '103', '3', '111316', '175572', '20'), +('11', '103', '3', '111315', '174688', '20'), +('11', '103', '3', '111013', '155499', '20'), +('11', '103', '5', '111319', '176867', '20'), +('11', '103', '5', '111321', '176043', '20'), +('11', '103', '5', '111318', '174127', '20'), +('11', '103', '5', '111018', '155017', '20'), +('11', '103', '8', '111332', '177441', '20'), +('11', '103', '8', '111329', '176438', '20'), +('11', '103', '8', '111331', '172827', '20'), +('11', '103', '8', '111031', '155690', '20'), +('11', '103', '6', '111323', '177292', '20'), +('11', '103', '6', '111326', '175856', '20'), +('11', '103', '6', '111325', '175756', '20'), +('11', '103', '6', '111022', '155442', '20'), +('11', '103', '17', '56043', '117774', '20'), +('11', '103', '17', '56084', '114364', '20'), +('11', '103', '17', '104427', '99770', '20'), +('11', '103', '17', '54854', '75183', '20'), +('11', '103', '7', '56080', '110129', '20'), +('11', '103', '7', '56040', '109505', '20'), +('11', '103', '7', '104425', '95548', '20'), +('11', '103', '7', '54848', '70311', '20'), +('11', '103', '9', '67098', '180007', '20'), +('11', '103', '9', '104834', '121732', '20'), +('11', '103', '9', '56070', '106477', '20'), +('11', '103', '9', '56031', '106450', '20'), +('11', '103', '15', '111349', '179335', '20'), +('11', '103', '15', '111344', '177544', '20'), +('11', '103', '15', '111340', '177107', '20'), +('11', '103', '15', '111346', '176903', '20'), +('11', '103', '20', '128733', '227311', '20'), +('11', '103', '20', '111356', '177444', '20'), +('11', '103', '20', '111352', '176425', '20'), +('11', '103', '20', '111351', '173971', '20'), +('11', '103', '12', '56035', '108492', '20'), +('11', '103', '12', '56074', '107255', '20'), +('11', '103', '12', '104422', '93469', '20'), +('11', '103', '12', '49656', '70164', '20'), +('11', '103', '18', '56041', '114281', '20'), +('11', '103', '18', '62986', '112387', '20'), +('11', '103', '18', '104426', '97211', '20'), +('11', '103', '18', '54851', '71532', '20'), +('11', '103', '19', '81763', '110966', '20'), +('11', '103', '19', '62990', '110790', '20'), +('11', '103', '19', '56075', '110155', '20'), +('11', '103', '19', '56037', '110052', '20'), +('11', '103', '13', '111521', '183202', '20'), +('11', '103', '13', '111524', '173856', '20'), +('11', '103', '13', '111519', '173840', '20'), +('11', '103', '13', '111221', '162359', '20'), +('11', '103', '14', '111537', '177438', '20'), +('11', '103', '14', '111535', '175197', '20'), +('11', '103', '14', '111237', '155586', '20'), +('11', '103', '14', '111235', '153445', '20'), +('11', '103', '11', '133816', '229838', '20'), +('11', '103', '11', '111335', '176458', '20'), +('11', '103', '11', '111337', '176340', '20'), +('11', '103', '11', '111338', '172853', '20'), +('11', '104', '22', '12425', '0', '20'), +('11', '104', '22', '21807', '0', '20'), +('11', '104', '22', '39342', '0', '20'), +('11', '104', '22', '23597', '0', '20'), +('11', '104', '1', '98769', '284399', '20'), +('11', '104', '1', '128691', '229935', '20'), +('11', '104', '1', '111311', '178956', '20'), +('11', '104', '1', '111307', '176884', '20'), +('11', '104', '2', '62985', '109997', '20'), +('11', '104', '2', '94056', '109913', '20'), +('11', '104', '2', '104424', '96163', '20'), +('11', '104', '2', '54845', '71173', '20'), +('11', '104', '3', '111314', '177356', '20'), +('11', '104', '3', '111316', '175578', '20'), +('11', '104', '3', '111315', '174694', '20'), +('11', '104', '3', '111013', '155506', '20'), +('11', '104', '5', '111319', '176874', '20'), +('11', '104', '5', '111321', '176048', '20'), +('11', '104', '5', '111318', '174135', '20'), +('11', '104', '5', '111018', '155024', '20'), +('11', '104', '8', '111332', '177447', '20'), +('11', '104', '8', '111329', '176446', '20'), +('11', '104', '8', '111331', '172832', '20'), +('11', '104', '8', '111031', '155697', '20'), +('11', '104', '6', '111323', '177298', '20'), +('11', '104', '6', '111326', '175864', '20'), +('11', '104', '6', '111325', '175760', '20'), +('11', '104', '6', '111022', '155448', '20'), +('11', '104', '17', '56043', '117780', '20'), +('11', '104', '17', '56084', '114370', '20'), +('11', '104', '17', '104427', '99776', '20'), +('11', '104', '17', '54854', '75188', '20'), +('11', '104', '7', '56080', '110136', '20'), +('11', '104', '7', '56040', '109515', '20'), +('11', '104', '7', '104425', '95553', '20'), +('11', '104', '7', '54848', '70317', '20'), +('11', '104', '9', '67098', '180012', '20'), +('11', '104', '9', '104834', '121738', '20'), +('11', '104', '9', '56070', '106482', '20'), +('11', '104', '9', '56031', '106460', '20'), +('11', '104', '15', '111349', '179343', '20'), +('11', '104', '15', '111344', '177549', '20'), +('11', '104', '15', '111340', '177112', '20'), +('11', '104', '15', '111346', '176909', '20'), +('11', '104', '20', '128733', '227317', '20'), +('11', '104', '20', '111356', '177450', '20'), +('11', '104', '20', '111352', '176431', '20'), +('11', '104', '20', '111351', '173979', '20'), +('11', '104', '12', '56035', '108502', '20'), +('11', '104', '12', '56074', '107261', '20'), +('11', '104', '12', '104422', '93477', '20'), +('11', '104', '12', '49656', '70164', '20'), +('11', '104', '18', '56041', '114289', '20'), +('11', '104', '18', '62986', '112392', '20'), +('11', '104', '18', '104426', '97213', '20'), +('11', '104', '18', '54851', '71536', '20'), +('11', '104', '19', '81763', '110976', '20'), +('11', '104', '19', '62990', '110797', '20'), +('11', '104', '19', '56075', '110159', '20'), +('11', '104', '19', '56037', '110055', '20'), +('11', '104', '13', '111521', '183207', '20'), +('11', '104', '13', '111524', '173863', '20'), +('11', '104', '13', '111519', '173847', '20'), +('11', '104', '13', '111221', '162365', '20'), +('11', '104', '14', '111537', '177443', '20'), +('11', '104', '14', '111535', '175201', '20'), +('11', '104', '14', '111237', '155591', '20'), +('11', '104', '14', '111235', '153449', '20'), +('11', '104', '11', '133816', '229842', '20'), +('11', '104', '11', '111335', '176464', '20'), +('11', '104', '11', '111337', '176346', '20'), +('11', '104', '11', '111338', '172859', '20'), +('11', '105', '22', '12425', '0', '23'), +('11', '105', '22', '21807', '0', '23'), +('11', '105', '22', '39342', '0', '23'), +('11', '105', '22', '23597', '0', '23'), +('11', '105', '1', '98769', '284403', '23'), +('11', '105', '1', '128691', '229941', '23'), +('11', '105', '1', '111311', '178960', '23'), +('11', '105', '1', '111307', '176892', '23'), +('11', '105', '2', '62985', '110001', '23'), +('11', '105', '2', '94056', '109916', '23'), +('11', '105', '2', '104424', '96171', '23'), +('11', '105', '2', '54845', '71179', '23'), +('11', '105', '3', '111314', '177363', '23'), +('11', '105', '3', '111316', '175584', '23'), +('11', '105', '3', '111315', '174701', '23'), +('11', '105', '3', '111013', '155512', '23'), +('11', '105', '5', '111319', '176882', '23'), +('11', '105', '5', '111321', '176053', '23'), +('11', '105', '5', '111318', '174142', '23'), +('11', '105', '5', '111018', '155031', '23'), +('11', '105', '8', '111332', '177454', '23'), +('11', '105', '8', '111329', '176453', '23'), +('11', '105', '8', '111331', '172837', '23'), +('11', '105', '8', '111031', '155703', '23'), +('11', '105', '6', '111323', '177304', '23'), +('11', '105', '6', '111326', '175871', '23'), +('11', '105', '6', '111325', '175765', '23'), +('11', '105', '6', '111022', '155453', '23'), +('11', '105', '17', '56043', '117785', '23'), +('11', '105', '17', '56084', '114376', '23'), +('11', '105', '17', '104427', '99782', '23'), +('11', '105', '17', '54854', '75192', '23'), +('11', '105', '7', '56080', '110144', '23'), +('11', '105', '7', '56040', '109525', '23'), +('11', '105', '7', '104425', '95558', '23'), +('11', '105', '7', '54848', '70323', '23'), +('11', '105', '9', '67098', '180016', '23'), +('11', '105', '9', '104834', '121744', '23'), +('11', '105', '9', '56070', '106487', '23'), +('11', '105', '9', '56031', '106470', '23'), +('11', '105', '15', '111349', '179351', '23'), +('11', '105', '15', '111344', '177554', '23'), +('11', '105', '15', '111340', '177118', '23'), +('11', '105', '15', '111346', '176915', '23'), +('11', '105', '20', '128733', '227323', '23'), +('11', '105', '20', '111356', '177457', '23'), +('11', '105', '20', '111352', '176436', '23'), +('11', '105', '20', '111351', '173986', '23'), +('11', '105', '12', '56035', '108511', '23'), +('11', '105', '12', '56074', '107267', '23'), +('11', '105', '12', '104422', '93485', '23'), +('11', '105', '12', '49656', '70165', '23'), +('11', '105', '18', '56041', '114297', '23'), +('11', '105', '18', '62986', '112397', '23'), +('11', '105', '18', '104426', '97215', '23'), +('11', '105', '18', '54851', '71540', '23'), +('11', '105', '19', '81763', '110986', '23'), +('11', '105', '19', '62990', '110805', '23'), +('11', '105', '19', '56075', '110164', '23'), +('11', '105', '19', '56037', '110057', '23'), +('11', '105', '13', '111521', '183213', '23'), +('11', '105', '13', '111524', '173870', '23'), +('11', '105', '13', '111519', '173855', '23'), +('11', '105', '13', '111221', '162371', '23'), +('11', '105', '14', '111537', '177448', '23'), +('11', '105', '14', '111535', '175204', '23'), +('11', '105', '14', '111237', '155596', '23'), +('11', '105', '14', '111235', '153453', '23'), +('11', '105', '11', '133816', '229846', '23'), +('11', '105', '11', '111335', '176470', '23'), +('11', '105', '11', '111337', '176352', '23'), +('11', '105', '11', '111338', '172865', '23'), +('11', '105', '22', '12425', '0', '22'), +('11', '105', '22', '21807', '0', '22'), +('11', '105', '22', '39342', '0', '22'), +('11', '105', '22', '23597', '0', '22'), +('11', '105', '1', '98769', '284403', '22'), +('11', '105', '1', '128691', '229941', '22'), +('11', '105', '1', '111311', '178960', '22'), +('11', '105', '1', '111307', '176892', '22'), +('11', '105', '2', '62985', '110001', '22'), +('11', '105', '2', '94056', '109916', '22'), +('11', '105', '2', '104424', '96171', '22'), +('11', '105', '2', '54845', '71179', '22'), +('11', '105', '3', '111314', '177363', '22'), +('11', '105', '3', '111316', '175584', '22'), +('11', '105', '3', '111315', '174701', '22'), +('11', '105', '3', '111013', '155512', '22'), +('11', '105', '5', '111319', '176882', '22'), +('11', '105', '5', '111321', '176053', '22'), +('11', '105', '5', '111318', '174142', '22'), +('11', '105', '5', '111018', '155031', '22'), +('11', '105', '8', '111332', '177454', '22'), +('11', '105', '8', '111329', '176453', '22'), +('11', '105', '8', '111331', '172837', '22'), +('11', '105', '8', '111031', '155703', '22'), +('11', '105', '6', '111323', '177304', '22'), +('11', '105', '6', '111326', '175871', '22'), +('11', '105', '6', '111325', '175765', '22'), +('11', '105', '6', '111022', '155453', '22'), +('11', '105', '17', '56043', '117785', '22'), +('11', '105', '17', '56084', '114376', '22'), +('11', '105', '17', '104427', '99782', '22'), +('11', '105', '17', '54854', '75192', '22'), +('11', '105', '7', '56080', '110144', '22'), +('11', '105', '7', '56040', '109525', '22'), +('11', '105', '7', '104425', '95558', '22'), +('11', '105', '7', '54848', '70323', '22'), +('11', '105', '9', '67098', '180016', '22'), +('11', '105', '9', '104834', '121744', '22'), +('11', '105', '9', '56070', '106487', '22'), +('11', '105', '9', '56031', '106470', '22'), +('11', '105', '15', '111349', '179351', '22'), +('11', '105', '15', '111344', '177554', '22'), +('11', '105', '15', '111340', '177118', '22'), +('11', '105', '15', '111346', '176915', '22'), +('11', '105', '20', '128733', '227323', '22'), +('11', '105', '20', '111356', '177457', '22'), +('11', '105', '20', '111352', '176436', '22'), +('11', '105', '20', '111351', '173986', '22'), +('11', '105', '12', '56035', '108511', '22'), +('11', '105', '12', '56074', '107267', '22'), +('11', '105', '12', '104422', '93485', '22'), +('11', '105', '12', '49656', '70165', '22'), +('11', '105', '18', '56041', '114297', '22'), +('11', '105', '18', '62986', '112397', '22'), +('11', '105', '18', '104426', '97215', '22'), +('11', '105', '18', '54851', '71540', '22'), +('11', '105', '19', '81763', '110986', '22'), +('11', '105', '19', '62990', '110805', '22'), +('11', '105', '19', '56075', '110164', '22'), +('11', '105', '19', '56037', '110057', '22'), +('11', '105', '13', '111521', '183213', '22'), +('11', '105', '13', '111524', '173870', '22'), +('11', '105', '13', '111519', '173855', '22'), +('11', '105', '13', '111221', '162371', '22'), +('11', '105', '14', '111537', '177448', '22'), +('11', '105', '14', '111535', '175204', '22'), +('11', '105', '14', '111237', '155596', '22'), +('11', '105', '14', '111235', '153453', '22'), +('11', '105', '11', '133816', '229846', '22'), +('11', '105', '11', '111335', '176470', '22'), +('11', '105', '11', '111337', '176352', '22'), +('11', '105', '11', '111338', '172865', '22'), +('11', '105', '22', '12425', '0', '21'), +('11', '105', '22', '21807', '0', '21'), +('11', '105', '22', '39342', '0', '21'), +('11', '105', '22', '23597', '0', '21'), +('11', '105', '1', '98769', '284403', '21'), +('11', '105', '1', '128691', '229941', '21'), +('11', '105', '1', '111311', '178960', '21'), +('11', '105', '1', '111307', '176892', '21'), +('11', '105', '2', '62985', '110001', '21'), +('11', '105', '2', '94056', '109916', '21'), +('11', '105', '2', '104424', '96171', '21'), +('11', '105', '2', '54845', '71179', '21'), +('11', '105', '3', '111314', '177363', '21'), +('11', '105', '3', '111316', '175584', '21'), +('11', '105', '3', '111315', '174701', '21'), +('11', '105', '3', '111013', '155512', '21'), +('11', '105', '5', '111319', '176882', '21'), +('11', '105', '5', '111321', '176053', '21'), +('11', '105', '5', '111318', '174142', '21'), +('11', '105', '5', '111018', '155031', '21'), +('11', '105', '8', '111332', '177454', '21'), +('11', '105', '8', '111329', '176453', '21'), +('11', '105', '8', '111331', '172837', '21'), +('11', '105', '8', '111031', '155703', '21'), +('11', '105', '6', '111323', '177304', '21'), +('11', '105', '6', '111326', '175871', '21'), +('11', '105', '6', '111325', '175765', '21'), +('11', '105', '6', '111022', '155453', '21'), +('11', '105', '17', '56043', '117785', '21'), +('11', '105', '17', '56084', '114376', '21'), +('11', '105', '17', '104427', '99782', '21'), +('11', '105', '17', '54854', '75192', '21'), +('11', '105', '7', '56080', '110144', '21'), +('11', '105', '7', '56040', '109525', '21'), +('11', '105', '7', '104425', '95558', '21'), +('11', '105', '7', '54848', '70323', '21'), +('11', '105', '9', '67098', '180016', '21'), +('11', '105', '9', '104834', '121744', '21'), +('11', '105', '9', '56070', '106487', '21'), +('11', '105', '9', '56031', '106470', '21'), +('11', '105', '15', '111349', '179351', '21'), +('11', '105', '15', '111344', '177554', '21'), +('11', '105', '15', '111340', '177118', '21'), +('11', '105', '15', '111346', '176915', '21'), +('11', '105', '20', '128733', '227323', '21'), +('11', '105', '20', '111356', '177457', '21'), +('11', '105', '20', '111352', '176436', '21'), +('11', '105', '20', '111351', '173986', '21'), +('11', '105', '12', '56035', '108511', '21'), +('11', '105', '12', '56074', '107267', '21'), +('11', '105', '12', '104422', '93485', '21'), +('11', '105', '12', '49656', '70165', '21'), +('11', '105', '18', '56041', '114297', '21'), +('11', '105', '18', '62986', '112397', '21'), +('11', '105', '18', '104426', '97215', '21'), +('11', '105', '18', '54851', '71540', '21'), +('11', '105', '19', '81763', '110986', '21'), +('11', '105', '19', '62990', '110805', '21'), +('11', '105', '19', '56075', '110164', '21'), +('11', '105', '19', '56037', '110057', '21'), +('11', '105', '13', '111521', '183213', '21'), +('11', '105', '13', '111524', '173870', '21'), +('11', '105', '13', '111519', '173855', '21'), +('11', '105', '13', '111221', '162371', '21'), +('11', '105', '14', '111537', '177448', '21'), +('11', '105', '14', '111535', '175204', '21'), +('11', '105', '14', '111237', '155596', '21'), +('11', '105', '14', '111235', '153453', '21'), +('11', '105', '11', '133816', '229846', '21'), +('11', '105', '11', '111335', '176470', '21'), +('11', '105', '11', '111337', '176352', '21'), +('11', '105', '11', '111338', '172865', '21'), +('11', '106', '22', '12425', '0', '23'), +('11', '106', '22', '21807', '0', '23'), +('11', '106', '22', '39342', '0', '23'), +('11', '106', '22', '23597', '0', '23'), +('11', '106', '1', '98769', '284407', '23'), +('11', '106', '1', '128691', '229948', '23'), +('11', '106', '1', '111311', '178964', '23'), +('11', '106', '1', '111307', '176901', '23'), +('11', '106', '2', '62985', '110005', '23'), +('11', '106', '2', '94056', '109919', '23'), +('11', '106', '2', '104424', '96179', '23'), +('11', '106', '2', '54845', '71185', '23'), +('11', '106', '3', '111314', '177369', '23'), +('11', '106', '3', '111316', '175590', '23'), +('11', '106', '3', '111315', '174707', '23'), +('11', '106', '3', '111013', '155519', '23'), +('11', '106', '5', '111319', '176889', '23'), +('11', '106', '5', '111321', '176058', '23'), +('11', '106', '5', '111318', '174150', '23'), +('11', '106', '5', '111018', '155038', '23'), +('11', '106', '8', '111332', '177461', '23'), +('11', '106', '8', '111329', '176461', '23'), +('11', '106', '8', '111331', '172843', '23'), +('11', '106', '8', '111031', '155710', '23'), +('11', '106', '6', '111323', '177310', '23'), +('11', '106', '6', '111326', '175879', '23'), +('11', '106', '6', '111325', '175770', '23'), +('11', '106', '6', '111022', '155459', '23'), +('11', '106', '17', '56043', '117791', '23'), +('11', '106', '17', '56084', '114382', '23'), +('11', '106', '17', '104427', '99789', '23'), +('11', '106', '17', '54854', '75197', '23'), +('11', '106', '7', '56080', '110151', '23'), +('11', '106', '7', '56040', '109535', '23'), +('11', '106', '7', '104425', '95564', '23'), +('11', '106', '7', '54848', '70330', '23'), +('11', '106', '9', '67098', '180020', '23'), +('11', '106', '9', '104834', '121750', '23'), +('11', '106', '9', '56070', '106492', '23'), +('11', '106', '9', '56031', '106480', '23'), +('11', '106', '15', '111349', '179359', '23'), +('11', '106', '15', '111344', '177558', '23'), +('11', '106', '15', '111340', '177123', '23'), +('11', '106', '15', '111346', '176921', '23'), +('11', '106', '20', '128733', '227329', '23'), +('11', '106', '20', '111356', '177463', '23'), +('11', '106', '20', '111352', '176441', '23'), +('11', '106', '20', '111351', '173994', '23'), +('11', '106', '12', '56035', '108521', '23'), +('11', '106', '12', '56074', '107273', '23'), +('11', '106', '12', '104422', '93493', '23'), +('11', '106', '12', '49656', '70166', '23'), +('11', '106', '18', '56041', '114306', '23'), +('11', '106', '18', '62986', '112402', '23'), +('11', '106', '18', '104426', '97217', '23'), +('11', '106', '18', '54851', '71544', '23'), +('11', '106', '19', '81763', '110996', '23'), +('11', '106', '19', '62990', '110812', '23'), +('11', '106', '19', '56075', '110169', '23'), +('11', '106', '19', '56037', '110060', '23'), +('11', '106', '13', '111521', '183218', '23'), +('11', '106', '13', '111524', '173876', '23'), +('11', '106', '13', '111519', '173862', '23'), +('11', '106', '13', '111221', '162377', '23'), +('11', '106', '14', '111537', '177453', '23'), +('11', '106', '14', '111535', '175208', '23'), +('11', '106', '14', '111237', '155601', '23'), +('11', '106', '14', '111235', '153457', '23'), +('11', '106', '11', '133816', '229850', '23'), +('11', '106', '11', '111335', '176476', '23'), +('11', '106', '11', '111337', '176358', '23'), +('11', '106', '11', '111338', '172872', '23'), +('11', '107', '22', '12425', '0', '23'), +('11', '107', '22', '21807', '0', '23'), +('11', '107', '22', '39342', '0', '23'), +('11', '107', '22', '23597', '0', '23'), +('11', '107', '1', '98769', '284412', '23'), +('11', '107', '1', '128691', '229954', '23'), +('11', '107', '1', '111311', '178969', '23'), +('11', '107', '1', '111307', '176909', '23'), +('11', '107', '2', '62985', '110009', '23'), +('11', '107', '2', '94056', '109922', '23'), +('11', '107', '2', '104424', '96187', '23'), +('11', '107', '2', '54845', '71191', '23'), +('11', '107', '3', '111314', '177376', '23'), +('11', '107', '3', '111316', '175597', '23'), +('11', '107', '3', '111315', '174713', '23'), +('11', '107', '3', '111013', '155525', '23'), +('11', '107', '5', '111319', '176896', '23'), +('11', '107', '5', '111321', '176063', '23'), +('11', '107', '5', '111318', '174157', '23'), +('11', '107', '5', '111018', '155045', '23'), +('11', '107', '8', '111332', '177467', '23'), +('11', '107', '8', '111329', '176468', '23'), +('11', '107', '8', '111331', '172848', '23'), +('11', '107', '8', '111031', '155717', '23'), +('11', '107', '6', '111323', '177315', '23'), +('11', '107', '6', '111326', '175887', '23'), +('11', '107', '6', '111325', '175774', '23'), +('11', '107', '6', '111022', '155465', '23'), +('11', '107', '17', '56043', '117796', '23'), +('11', '107', '17', '56084', '114388', '23'), +('11', '107', '17', '104427', '99795', '23'), +('11', '107', '17', '54854', '75202', '23'), +('11', '107', '7', '56080', '110158', '23'), +('11', '107', '7', '56040', '109545', '23'), +('11', '107', '7', '104425', '95569', '23'), +('11', '107', '7', '54848', '70336', '23'), +('11', '107', '9', '67098', '180024', '23'), +('11', '107', '9', '104834', '121756', '23'), +('11', '107', '9', '56070', '106498', '23'), +('11', '107', '9', '56031', '106490', '23'), +('11', '107', '15', '111349', '179367', '23'), +('11', '107', '15', '111344', '177563', '23'), +('11', '107', '15', '111340', '177129', '23'), +('11', '107', '15', '111346', '176927', '23'), +('11', '107', '20', '128733', '227335', '23'), +('11', '107', '20', '111356', '177469', '23'), +('11', '107', '20', '111352', '176447', '23'), +('11', '107', '20', '111351', '174001', '23'), +('11', '107', '12', '56035', '108530', '23'), +('11', '107', '12', '56074', '107279', '23'), +('11', '107', '12', '104422', '93501', '23'), +('11', '107', '12', '49656', '70167', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '107', '18', '56041', '114314', '23'), +('11', '107', '18', '62986', '112407', '23'), +('11', '107', '18', '104426', '97219', '23'), +('11', '107', '18', '54851', '71548', '23'), +('11', '107', '19', '81763', '111006', '23'), +('11', '107', '19', '62990', '110820', '23'), +('11', '107', '19', '56075', '110173', '23'), +('11', '107', '19', '56037', '110062', '23'), +('11', '107', '13', '111521', '183223', '23'), +('11', '107', '13', '111524', '173883', '23'), +('11', '107', '13', '111519', '173869', '23'), +('11', '107', '13', '111221', '162383', '23'), +('11', '107', '14', '111537', '177458', '23'), +('11', '107', '14', '111535', '175212', '23'), +('11', '107', '14', '111237', '155607', '23'), +('11', '107', '14', '111235', '153461', '23'), +('11', '107', '11', '133816', '229854', '23'), +('11', '107', '11', '111335', '176482', '23'), +('11', '107', '11', '111337', '176364', '23'), +('11', '107', '11', '111338', '172878', '23'), +('11', '108', '22', '12425', '0', '23'), +('11', '108', '22', '21807', '0', '23'), +('11', '108', '22', '39342', '0', '23'), +('11', '108', '22', '23597', '0', '23'), +('11', '108', '1', '98769', '284416', '23'), +('11', '108', '1', '128691', '229961', '23'), +('11', '108', '1', '111311', '178973', '23'), +('11', '108', '1', '111307', '176917', '23'), +('11', '108', '2', '62985', '110013', '23'), +('11', '108', '2', '94056', '109926', '23'), +('11', '108', '2', '104424', '96195', '23'), +('11', '108', '2', '54845', '71197', '23'), +('11', '108', '3', '111314', '177382', '23'), +('11', '108', '3', '111316', '175603', '23'), +('11', '108', '3', '111315', '174719', '23'), +('11', '108', '3', '111013', '155532', '23'), +('11', '108', '5', '111319', '176903', '23'), +('11', '108', '5', '111321', '176068', '23'), +('11', '108', '5', '111318', '174165', '23'), +('11', '108', '5', '111018', '155052', '23'), +('11', '108', '8', '111332', '177474', '23'), +('11', '108', '8', '111329', '176476', '23'), +('11', '108', '8', '111331', '172853', '23'), +('11', '108', '8', '111031', '155723', '23'), +('11', '108', '6', '111323', '177321', '23'), +('11', '108', '6', '111326', '175894', '23'), +('11', '108', '6', '111325', '175779', '23'), +('11', '108', '6', '111022', '155471', '23'), +('11', '108', '17', '56043', '117802', '23'), +('11', '108', '17', '56084', '114395', '23'), +('11', '108', '17', '104427', '99801', '23'), +('11', '108', '17', '54854', '75206', '23'), +('11', '108', '7', '56080', '110165', '23'), +('11', '108', '7', '56040', '109555', '23'), +('11', '108', '7', '104425', '95575', '23'), +('11', '108', '7', '54848', '70342', '23'), +('11', '108', '9', '67098', '180029', '23'), +('11', '108', '9', '104834', '121762', '23'), +('11', '108', '9', '56070', '106503', '23'), +('11', '108', '9', '56031', '106500', '23'), +('11', '108', '15', '111349', '179375', '23'), +('11', '108', '15', '111344', '177568', '23'), +('11', '108', '15', '111340', '177134', '23'), +('11', '108', '15', '111346', '176933', '23'), +('11', '108', '20', '128733', '227341', '23'), +('11', '108', '20', '111356', '177475', '23'), +('11', '108', '20', '111352', '176452', '23'), +('11', '108', '20', '111351', '174009', '23'), +('11', '108', '12', '56035', '108540', '23'), +('11', '108', '12', '56074', '107285', '23'), +('11', '108', '12', '104422', '93509', '23'), +('11', '108', '12', '49656', '70168', '23'), +('11', '108', '18', '56041', '114323', '23'), +('11', '108', '18', '62986', '112412', '23'), +('11', '108', '18', '104426', '97221', '23'), +('11', '108', '18', '54851', '71552', '23'), +('11', '108', '19', '81763', '111016', '23'), +('11', '108', '19', '62990', '110827', '23'), +('11', '108', '19', '56075', '110178', '23'), +('11', '108', '19', '56037', '110065', '23'), +('11', '108', '13', '111521', '183229', '23'), +('11', '108', '13', '111524', '173890', '23'), +('11', '108', '13', '111519', '173877', '23'), +('11', '108', '13', '111221', '162389', '23'), +('11', '108', '14', '111537', '177463', '23'), +('11', '108', '14', '111535', '175216', '23'), +('11', '108', '14', '111237', '155612', '23'), +('11', '108', '14', '111235', '153465', '23'), +('11', '108', '11', '133816', '229858', '23'), +('11', '108', '11', '111335', '176488', '23'), +('11', '108', '11', '111337', '176370', '23'), +('11', '108', '11', '111338', '172884', '23'), +('11', '109', '22', '12425', '0', '23'), +('11', '109', '22', '21807', '0', '23'), +('11', '109', '22', '39342', '0', '23'), +('11', '109', '22', '23597', '0', '23'), +('11', '109', '1', '98769', '284420', '23'), +('11', '109', '1', '128691', '229967', '23'), +('11', '109', '1', '111311', '178977', '23'), +('11', '109', '1', '111307', '176925', '23'), +('11', '109', '2', '62985', '110017', '23'), +('11', '109', '2', '94056', '109929', '23'), +('11', '109', '2', '104424', '96203', '23'), +('11', '109', '2', '54845', '71203', '23'), +('11', '109', '3', '111314', '177389', '23'), +('11', '109', '3', '111316', '175609', '23'), +('11', '109', '3', '111315', '174725', '23'), +('11', '109', '3', '111013', '155538', '23'), +('11', '109', '5', '111319', '176910', '23'), +('11', '109', '5', '111321', '176073', '23'), +('11', '109', '5', '111318', '174172', '23'), +('11', '109', '5', '111018', '155060', '23'), +('11', '109', '8', '111332', '177481', '23'), +('11', '109', '8', '111329', '176483', '23'), +('11', '109', '8', '111331', '172859', '23'), +('11', '109', '8', '111031', '155730', '23'), +('11', '109', '6', '111323', '177327', '23'), +('11', '109', '6', '111326', '175902', '23'), +('11', '109', '6', '111325', '175784', '23'), +('11', '109', '6', '111022', '155476', '23'), +('11', '109', '17', '56043', '117807', '23'), +('11', '109', '17', '56084', '114401', '23'), +('11', '109', '17', '104427', '99807', '23'), +('11', '109', '17', '54854', '75211', '23'), +('11', '109', '7', '56080', '110172', '23'), +('11', '109', '7', '56040', '109565', '23'), +('11', '109', '7', '104425', '95580', '23'), +('11', '109', '7', '54848', '70348', '23'), +('11', '109', '9', '67098', '180033', '23'), +('11', '109', '9', '104834', '121768', '23'), +('11', '109', '9', '56031', '106510', '23'), +('11', '109', '9', '56070', '106508', '23'), +('11', '109', '15', '111349', '179384', '23'), +('11', '109', '15', '111344', '177573', '23'), +('11', '109', '15', '111340', '177140', '23'), +('11', '109', '15', '111346', '176939', '23'), +('11', '109', '20', '128733', '227347', '23'), +('11', '109', '20', '111356', '177481', '23'), +('11', '109', '20', '111352', '176457', '23'), +('11', '109', '20', '111351', '174016', '23'), +('11', '109', '12', '56035', '108549', '23'), +('11', '109', '12', '56074', '107291', '23'), +('11', '109', '12', '104422', '93517', '23'), +('11', '109', '12', '49656', '70168', '23'), +('11', '109', '18', '56041', '114331', '23'), +('11', '109', '18', '62986', '112417', '23'), +('11', '109', '18', '104426', '97223', '23'), +('11', '109', '18', '54851', '71557', '23'), +('11', '109', '19', '81763', '111026', '23'), +('11', '109', '19', '62990', '110835', '23'), +('11', '109', '19', '56075', '110183', '23'), +('11', '109', '19', '56037', '110067', '23'), +('11', '109', '13', '111521', '183234', '23'), +('11', '109', '13', '111524', '173896', '23'), +('11', '109', '13', '111519', '173884', '23'), +('11', '109', '13', '111221', '162395', '23'), +('11', '109', '14', '111537', '177468', '23'), +('11', '109', '14', '111535', '175220', '23'), +('11', '109', '14', '111237', '155617', '23'), +('11', '109', '14', '111235', '153469', '23'), +('11', '109', '11', '133816', '229862', '23'), +('11', '109', '11', '111335', '176493', '23'), +('11', '109', '11', '111337', '176376', '23'), +('11', '109', '11', '111338', '172890', '23'), +('11', '110', '22', '12425', '0', '25'), +('11', '110', '22', '39342', '0', '25'), +('11', '110', '22', '7867', '0', '25'), +('11', '110', '22', '53550', '0', '25'), +('11', '110', '1', '98769', '284425', '25'), +('11', '110', '1', '128691', '229973', '25'), +('11', '110', '1', '111311', '178981', '25'), +('11', '110', '1', '111307', '176933', '25'), +('11', '110', '2', '62985', '110021', '25'), +('11', '110', '2', '94056', '109932', '25'), +('11', '110', '2', '104424', '96211', '25'), +('11', '110', '2', '54845', '71208', '25'), +('11', '110', '3', '111314', '177395', '25'), +('11', '110', '3', '111316', '175615', '25'), +('11', '110', '3', '111315', '174732', '25'), +('11', '110', '3', '111013', '155545', '25'), +('11', '110', '5', '111319', '176917', '25'), +('11', '110', '5', '111321', '176078', '25'), +('11', '110', '5', '111318', '174180', '25'), +('11', '110', '5', '111018', '155067', '25'), +('11', '110', '8', '111332', '177487', '25'), +('11', '110', '8', '111329', '176491', '25'), +('11', '110', '8', '111331', '172864', '25'), +('11', '110', '8', '111031', '155737', '25'), +('11', '110', '6', '111323', '177333', '25'), +('11', '110', '6', '111326', '175910', '25'), +('11', '110', '6', '111325', '175789', '25'), +('11', '110', '6', '111022', '155482', '25'), +('11', '110', '17', '56043', '117813', '25'), +('11', '110', '17', '56084', '114407', '25'), +('11', '110', '17', '104427', '99813', '25'), +('11', '110', '17', '54854', '75216', '25'), +('11', '110', '7', '56080', '110179', '25'), +('11', '110', '7', '56040', '109576', '25'), +('11', '110', '7', '104425', '95586', '25'), +('11', '110', '7', '54848', '70354', '25'), +('11', '110', '9', '67098', '180037', '25'), +('11', '110', '9', '104834', '121774', '25'), +('11', '110', '9', '56031', '106520', '25'), +('11', '110', '9', '56070', '106514', '25'), +('11', '110', '15', '111349', '179392', '25'), +('11', '110', '15', '111344', '177577', '25'), +('11', '110', '15', '111340', '177145', '25'), +('11', '110', '15', '111346', '176945', '25'), +('11', '110', '20', '128733', '227353', '25'), +('11', '110', '20', '111356', '177488', '25'), +('11', '110', '20', '111352', '176463', '25'), +('11', '110', '20', '111351', '174024', '25'), +('11', '110', '12', '56035', '108559', '25'), +('11', '110', '12', '56074', '107297', '25'), +('11', '110', '12', '104422', '93525', '25'), +('11', '110', '12', '49656', '70169', '25'), +('11', '110', '18', '56041', '114340', '25'), +('11', '110', '18', '62986', '112422', '25'), +('11', '110', '18', '104426', '97225', '25'), +('11', '110', '18', '54851', '71561', '25'), +('11', '110', '19', '81763', '111036', '25'), +('11', '110', '19', '62990', '110842', '25'), +('11', '110', '19', '56075', '110188', '25'), +('11', '110', '19', '56037', '110070', '25'), +('11', '110', '13', '111521', '183240', '25'), +('11', '110', '13', '111524', '173903', '25'), +('11', '110', '13', '111519', '173892', '25'), +('11', '110', '13', '111221', '162401', '25'), +('11', '110', '14', '111537', '177473', '25'), +('11', '110', '14', '111535', '175224', '25'), +('11', '110', '14', '111237', '155622', '25'), +('11', '110', '14', '111235', '153473', '25'), +('11', '110', '11', '85213', '257097', '25'), +('11', '110', '11', '133816', '229867', '25'), +('11', '110', '11', '111335', '176499', '25'), +('11', '110', '11', '111337', '176382', '25'), +('11', '110', '22', '12425', '0', '24'), +('11', '110', '22', '39342', '0', '24'), +('11', '110', '22', '7867', '0', '24'), +('11', '110', '22', '53550', '0', '24'), +('11', '110', '1', '98769', '284425', '24'), +('11', '110', '1', '128691', '229973', '24'), +('11', '110', '1', '111311', '178981', '24'), +('11', '110', '1', '111307', '176933', '24'), +('11', '110', '2', '62985', '110021', '24'), +('11', '110', '2', '94056', '109932', '24'), +('11', '110', '2', '104424', '96211', '24'), +('11', '110', '2', '54845', '71208', '24'), +('11', '110', '3', '111314', '177395', '24'), +('11', '110', '3', '111316', '175615', '24'), +('11', '110', '3', '111315', '174732', '24'), +('11', '110', '3', '111013', '155545', '24'), +('11', '110', '5', '111319', '176917', '24'), +('11', '110', '5', '111321', '176078', '24'), +('11', '110', '5', '111318', '174180', '24'), +('11', '110', '5', '111018', '155067', '24'), +('11', '110', '8', '111332', '177487', '24'), +('11', '110', '8', '111329', '176491', '24'), +('11', '110', '8', '111331', '172864', '24'), +('11', '110', '8', '111031', '155737', '24'), +('11', '110', '6', '111323', '177333', '24'), +('11', '110', '6', '111326', '175910', '24'), +('11', '110', '6', '111325', '175789', '24'), +('11', '110', '6', '111022', '155482', '24'), +('11', '110', '17', '56043', '117813', '24'), +('11', '110', '17', '56084', '114407', '24'), +('11', '110', '17', '104427', '99813', '24'), +('11', '110', '17', '54854', '75216', '24'), +('11', '110', '7', '56080', '110179', '24'), +('11', '110', '7', '56040', '109576', '24'), +('11', '110', '7', '104425', '95586', '24'), +('11', '110', '7', '54848', '70354', '24'), +('11', '110', '9', '67098', '180037', '24'), +('11', '110', '9', '104834', '121774', '24'), +('11', '110', '9', '56031', '106520', '24'), +('11', '110', '9', '56070', '106514', '24'), +('11', '110', '15', '111349', '179392', '24'), +('11', '110', '15', '111344', '177577', '24'), +('11', '110', '15', '111340', '177145', '24'), +('11', '110', '15', '111346', '176945', '24'), +('11', '110', '20', '128733', '227353', '24'), +('11', '110', '20', '111356', '177488', '24'), +('11', '110', '20', '111352', '176463', '24'), +('11', '110', '20', '111351', '174024', '24'), +('11', '110', '12', '56035', '108559', '24'), +('11', '110', '12', '56074', '107297', '24'), +('11', '110', '12', '104422', '93525', '24'), +('11', '110', '12', '49656', '70169', '24'), +('11', '110', '18', '56041', '114340', '24'), +('11', '110', '18', '62986', '112422', '24'), +('11', '110', '18', '104426', '97225', '24'), +('11', '110', '18', '54851', '71561', '24'), +('11', '110', '19', '81763', '111036', '24'), +('11', '110', '19', '62990', '110842', '24'), +('11', '110', '19', '56075', '110188', '24'), +('11', '110', '19', '56037', '110070', '24'), +('11', '110', '13', '111521', '183240', '24'), +('11', '110', '13', '111524', '173903', '24'), +('11', '110', '13', '111519', '173892', '24'), +('11', '110', '13', '111221', '162401', '24'), +('11', '110', '14', '111537', '177473', '24'), +('11', '110', '14', '111535', '175224', '24'), +('11', '110', '14', '111237', '155622', '24'), +('11', '110', '14', '111235', '153473', '24'), +('11', '110', '11', '85213', '257097', '24'), +('11', '110', '11', '133816', '229867', '24'), +('11', '110', '11', '111335', '176499', '24'), +('11', '110', '11', '111337', '176382', '24'), +('11', '111', '22', '12425', '0', '25'), +('11', '111', '22', '39342', '0', '25'), +('11', '111', '22', '7867', '0', '25'), +('11', '111', '22', '53550', '0', '25'), +('11', '111', '1', '98769', '284429', '25'), +('11', '111', '1', '128691', '229980', '25'), +('11', '111', '1', '111311', '178985', '25'), +('11', '111', '1', '111307', '176941', '25'), +('11', '111', '2', '62985', '110024', '25'), +('11', '111', '2', '94056', '109936', '25'), +('11', '111', '2', '104424', '96219', '25'), +('11', '111', '2', '54845', '71214', '25'), +('11', '111', '3', '111314', '177402', '25'), +('11', '111', '3', '111316', '175621', '25'), +('11', '111', '3', '111315', '174738', '25'), +('11', '111', '3', '111013', '155551', '25'), +('11', '111', '5', '111319', '176924', '25'), +('11', '111', '5', '111321', '176084', '25'), +('11', '111', '5', '111318', '174187', '25'), +('11', '111', '5', '111018', '155074', '25'), +('11', '111', '8', '111332', '177494', '25'), +('11', '111', '8', '111329', '176498', '25'), +('11', '111', '8', '111331', '172869', '25'), +('11', '111', '8', '111031', '155743', '25'), +('11', '111', '6', '111323', '177338', '25'), +('11', '111', '6', '111326', '175918', '25'), +('11', '111', '6', '111325', '175793', '25'), +('11', '111', '6', '111022', '155488', '25'), +('11', '111', '17', '56043', '117819', '25'), +('11', '111', '17', '56084', '114413', '25'), +('11', '111', '17', '104427', '99819', '25'), +('11', '111', '17', '54854', '75220', '25'), +('11', '111', '7', '56080', '110186', '25'), +('11', '111', '7', '56040', '109586', '25'), +('11', '111', '7', '104425', '95591', '25'), +('11', '111', '7', '54848', '70360', '25'), +('11', '111', '9', '67098', '180042', '25'), +('11', '111', '9', '104834', '121780', '25'), +('11', '111', '9', '56031', '106530', '25'), +('11', '111', '9', '56070', '106519', '25'), +('11', '111', '15', '111349', '179400', '25'), +('11', '111', '15', '111344', '177582', '25'), +('11', '111', '15', '111340', '177151', '25'), +('11', '111', '15', '111346', '176951', '25'), +('11', '111', '20', '128733', '227359', '25'), +('11', '111', '20', '111356', '177494', '25'), +('11', '111', '20', '111352', '176468', '25'), +('11', '111', '20', '111351', '174031', '25'), +('11', '111', '12', '56035', '108568', '25'), +('11', '111', '12', '56074', '107304', '25'), +('11', '111', '12', '104422', '93532', '25'), +('11', '111', '12', '49656', '70170', '25'), +('11', '111', '18', '56041', '114348', '25'), +('11', '111', '18', '62986', '112427', '25'), +('11', '111', '18', '104426', '97226', '25'), +('11', '111', '18', '54851', '71565', '25'), +('11', '111', '19', '81763', '111045', '25'), +('11', '111', '19', '62990', '110850', '25'), +('11', '111', '19', '56075', '110192', '25'), +('11', '111', '19', '56037', '110072', '25'), +('11', '111', '13', '111521', '183245', '25'), +('11', '111', '13', '111524', '173910', '25'), +('11', '111', '13', '111519', '173900', '25'), +('11', '111', '13', '111221', '162407', '25'), +('11', '111', '14', '111537', '177479', '25'), +('11', '111', '14', '111535', '175228', '25'), +('11', '111', '14', '111237', '155627', '25'), +('11', '111', '14', '111235', '153477', '25'), +('11', '111', '11', '85213', '257102', '25'), +('11', '111', '11', '133816', '229871', '25'), +('11', '111', '11', '111335', '176505', '25'), +('11', '111', '11', '111337', '176388', '25'), +('11', '112', '22', '12425', '0', '25'), +('11', '112', '22', '39342', '0', '25'), +('11', '112', '22', '7867', '0', '25'), +('11', '112', '22', '53550', '0', '25'), +('11', '112', '1', '98769', '284433', '25'), +('11', '112', '1', '128691', '229986', '25'), +('11', '112', '1', '111311', '178989', '25'), +('11', '112', '1', '111307', '176950', '25'), +('11', '112', '2', '62985', '110028', '25'), +('11', '112', '2', '94056', '109939', '25'), +('11', '112', '2', '104424', '96227', '25'), +('11', '112', '2', '54845', '71220', '25'), +('11', '112', '3', '111314', '177408', '25'), +('11', '112', '3', '111316', '175627', '25'), +('11', '112', '3', '111315', '174744', '25'), +('11', '112', '3', '111013', '155558', '25'), +('11', '112', '5', '111319', '176932', '25'), +('11', '112', '5', '111321', '176089', '25'), +('11', '112', '5', '111318', '174195', '25'), +('11', '112', '5', '111018', '155081', '25'), +('11', '112', '8', '111332', '177501', '25'), +('11', '112', '8', '111329', '176506', '25'), +('11', '112', '8', '111331', '172875', '25'), +('11', '112', '8', '111031', '155750', '25'), +('11', '112', '6', '111323', '177344', '25'), +('11', '112', '6', '111326', '175925', '25'), +('11', '112', '6', '111325', '175798', '25'), +('11', '112', '6', '111022', '155493', '25'), +('11', '112', '17', '56043', '117824', '25'), +('11', '112', '17', '56084', '114419', '25'), +('11', '112', '17', '104427', '99825', '25'), +('11', '112', '17', '54854', '75225', '25'), +('11', '112', '7', '56080', '110193', '25'), +('11', '112', '7', '56040', '109596', '25'), +('11', '112', '7', '104425', '95597', '25'), +('11', '112', '7', '54848', '70366', '25'), +('11', '112', '9', '67098', '180046', '25'), +('11', '112', '9', '104834', '121786', '25'), +('11', '112', '9', '56031', '106540', '25'), +('11', '112', '9', '56070', '106524', '25'), +('11', '112', '15', '111349', '179408', '25'), +('11', '112', '15', '111344', '177587', '25'), +('11', '112', '15', '111340', '177156', '25'), +('11', '112', '15', '111346', '176957', '25'), +('11', '112', '20', '128733', '227365', '25'), +('11', '112', '20', '111356', '177500', '25'), +('11', '112', '20', '111352', '176473', '25'), +('11', '112', '20', '111351', '174039', '25'), +('11', '112', '12', '56035', '108578', '25'), +('11', '112', '12', '56074', '107310', '25'), +('11', '112', '12', '104422', '93540', '25'), +('11', '112', '12', '49656', '70171', '25'), +('11', '112', '18', '56041', '114357', '25'), +('11', '112', '18', '62986', '112432', '25'), +('11', '112', '18', '104426', '97228', '25'), +('11', '112', '18', '54851', '71569', '25'), +('11', '112', '19', '81763', '111055', '25'), +('11', '112', '19', '62990', '110857', '25'), +('11', '112', '19', '56075', '110197', '25'), +('11', '112', '19', '56037', '110075', '25'), +('11', '112', '13', '111521', '183251', '25'), +('11', '112', '13', '111524', '173917', '25'), +('11', '112', '13', '111519', '173907', '25'), +('11', '112', '13', '111221', '162413', '25'), +('11', '112', '14', '111537', '177484', '25'), +('11', '112', '14', '111535', '175232', '25'), +('11', '112', '14', '111237', '155632', '25'), +('11', '112', '14', '111235', '153481', '25'), +('11', '112', '11', '85213', '257106', '25'), +('11', '112', '11', '133816', '229875', '25'), +('11', '112', '11', '111335', '176511', '25'), +('11', '112', '11', '111337', '176395', '25'), +('11', '113', '22', '12425', '0', '25'), +('11', '113', '22', '39342', '0', '25'), +('11', '113', '22', '7867', '0', '25'), +('11', '113', '22', '53550', '0', '25'), +('11', '113', '1', '98769', '284437', '25'), +('11', '113', '1', '128691', '229993', '25'), +('11', '113', '1', '111311', '178993', '25'), +('11', '113', '1', '111307', '176958', '25'), +('11', '113', '2', '62985', '110032', '25'), +('11', '113', '2', '94056', '109942', '25'), +('11', '113', '2', '104424', '96235', '25'), +('11', '113', '2', '54845', '71226', '25'), +('11', '113', '3', '111314', '177415', '25'), +('11', '113', '3', '111316', '175633', '25'), +('11', '113', '3', '111315', '174750', '25'), +('11', '113', '3', '111013', '155564', '25'), +('11', '113', '5', '111319', '176939', '25'), +('11', '113', '5', '111321', '176094', '25'), +('11', '113', '5', '111318', '174202', '25'), +('11', '113', '5', '111018', '155088', '25'), +('11', '113', '8', '111332', '177507', '25'), +('11', '113', '8', '111329', '176513', '25'), +('11', '113', '8', '111331', '172880', '25'), +('11', '113', '8', '111031', '155757', '25'), +('11', '113', '6', '111323', '177350', '25'), +('11', '113', '6', '111326', '175933', '25'), +('11', '113', '6', '111325', '175803', '25'), +('11', '113', '6', '111022', '155499', '25'), +('11', '113', '17', '56043', '117830', '25'), +('11', '113', '17', '56084', '114425', '25'), +('11', '113', '17', '104427', '99832', '25'), +('11', '113', '17', '54854', '75230', '25'), +('11', '113', '7', '56080', '110201', '25'), +('11', '113', '7', '56040', '109606', '25'), +('11', '113', '7', '104425', '95602', '25'), +('11', '113', '7', '54848', '70372', '25'), +('11', '113', '9', '67098', '180050', '25'), +('11', '113', '9', '104834', '121792', '25'), +('11', '113', '9', '56031', '106550', '25'), +('11', '113', '9', '56070', '106529', '25'), +('11', '113', '15', '111349', '179416', '25'), +('11', '113', '15', '111344', '177591', '25'), +('11', '113', '15', '111340', '177162', '25'), +('11', '113', '15', '111346', '176962', '25'), +('11', '113', '20', '128733', '227370', '25'), +('11', '113', '20', '111356', '177506', '25'), +('11', '113', '20', '111352', '176479', '25'), +('11', '113', '20', '111351', '174046', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('11', '113', '12', '56035', '108587', '25'), +('11', '113', '12', '56074', '107316', '25'), +('11', '113', '12', '104422', '93548', '25'), +('11', '113', '12', '49656', '70172', '25'), +('11', '113', '18', '56041', '114365', '25'), +('11', '113', '18', '62986', '112437', '25'), +('11', '113', '18', '104426', '97230', '25'), +('11', '113', '18', '54851', '71573', '25'), +('11', '113', '19', '81763', '111065', '25'), +('11', '113', '19', '62990', '110865', '25'), +('11', '113', '19', '56075', '110202', '25'), +('11', '113', '19', '56037', '110077', '25'), +('11', '113', '13', '111521', '183256', '25'), +('11', '113', '13', '111524', '173923', '25'), +('11', '113', '13', '111519', '173915', '25'), +('11', '113', '13', '111221', '162419', '25'), +('11', '113', '14', '111537', '177489', '25'), +('11', '113', '14', '111535', '175236', '25'), +('11', '113', '14', '111237', '155637', '25'), +('11', '113', '14', '111235', '153485', '25'), +('11', '113', '11', '85213', '257110', '25'), +('11', '113', '11', '133816', '229879', '25'), +('11', '113', '11', '111335', '176517', '25'), +('11', '113', '11', '111337', '176401', '25'), +('11', '114', '22', '12425', '0', '25'), +('11', '114', '22', '39342', '0', '25'), +('11', '114', '22', '7867', '0', '25'), +('11', '114', '22', '53550', '0', '25'), +('11', '114', '1', '98769', '284442', '25'), +('11', '114', '1', '128691', '229999', '25'), +('11', '114', '1', '111311', '178997', '25'), +('11', '114', '1', '111307', '176966', '25'), +('11', '114', '2', '62985', '110036', '25'), +('11', '114', '2', '94056', '109946', '25'), +('11', '114', '2', '104424', '96243', '25'), +('11', '114', '2', '54845', '71232', '25'), +('11', '114', '3', '111314', '177421', '25'), +('11', '114', '3', '111316', '175639', '25'), +('11', '114', '3', '111315', '174756', '25'), +('11', '114', '3', '111013', '155571', '25'), +('11', '114', '5', '111319', '176946', '25'), +('11', '114', '5', '111321', '176099', '25'), +('11', '114', '5', '111318', '174210', '25'), +('11', '114', '5', '111018', '155095', '25'), +('11', '114', '8', '111332', '177514', '25'), +('11', '114', '8', '111329', '176521', '25'), +('11', '114', '8', '111331', '172885', '25'), +('11', '114', '8', '111031', '155764', '25'), +('11', '114', '6', '111323', '177355', '25'), +('11', '114', '6', '111326', '175941', '25'), +('11', '114', '6', '111325', '175807', '25'), +('11', '114', '6', '111022', '155505', '25'), +('11', '114', '17', '56043', '117835', '25'), +('11', '114', '17', '56084', '114432', '25'), +('11', '114', '17', '104427', '99838', '25'), +('11', '114', '17', '54854', '75235', '25'), +('11', '114', '7', '56080', '110208', '25'), +('11', '114', '7', '56040', '109616', '25'), +('11', '114', '7', '104425', '95608', '25'), +('11', '114', '7', '54848', '70378', '25'), +('11', '114', '9', '67098', '180055', '25'), +('11', '114', '9', '104834', '121798', '25'), +('11', '114', '9', '56031', '106560', '25'), +('11', '114', '9', '56070', '106535', '25'), +('11', '114', '15', '111349', '179424', '25'), +('11', '114', '15', '111344', '177596', '25'), +('11', '114', '15', '111340', '177167', '25'), +('11', '114', '15', '111346', '176968', '25'), +('11', '114', '20', '128733', '227376', '25'), +('11', '114', '20', '111356', '177512', '25'), +('11', '114', '20', '111352', '176484', '25'), +('11', '114', '20', '111351', '174054', '25'), +('11', '114', '12', '56035', '108597', '25'), +('11', '114', '12', '56074', '107322', '25'), +('11', '114', '12', '104422', '93556', '25'), +('11', '114', '12', '49656', '70172', '25'), +('11', '114', '18', '56041', '114374', '25'), +('11', '114', '18', '62986', '112442', '25'), +('11', '114', '18', '104426', '97232', '25'), +('11', '114', '18', '54851', '71577', '25'), +('11', '114', '19', '81763', '111075', '25'), +('11', '114', '19', '62990', '110872', '25'), +('11', '114', '19', '56075', '110206', '25'), +('11', '114', '19', '56037', '110080', '25'), +('11', '114', '13', '111521', '183262', '25'), +('11', '114', '13', '111524', '173930', '25'), +('11', '114', '13', '111519', '173922', '25'), +('11', '114', '13', '111221', '162425', '25'), +('11', '114', '14', '111537', '177494', '25'), +('11', '114', '14', '111535', '175240', '25'), +('11', '114', '14', '111237', '155643', '25'), +('11', '114', '14', '111235', '153489', '25'), +('11', '114', '11', '85213', '257114', '25'), +('11', '114', '11', '133816', '229883', '25'), +('11', '114', '11', '111335', '176523', '25'), +('11', '114', '11', '111337', '176407', '25'), +('11', '115', '22', '12425', '0', '26'), +('11', '115', '22', '39342', '0', '26'), +('11', '115', '22', '7867', '0', '26'), +('11', '115', '22', '53550', '0', '26'), +('11', '115', '1', '98769', '284446', '26'), +('11', '115', '1', '128691', '230006', '26'), +('11', '115', '1', '111311', '179001', '26'), +('11', '115', '1', '111307', '176974', '26'), +('11', '115', '2', '62985', '110040', '26'), +('11', '115', '2', '94056', '109949', '26'), +('11', '115', '2', '104424', '96251', '26'), +('11', '115', '2', '54845', '71238', '26'), +('11', '115', '3', '111314', '177428', '26'), +('11', '115', '3', '111316', '175646', '26'), +('11', '115', '3', '111315', '174762', '26'), +('11', '115', '3', '111013', '155577', '26'), +('11', '115', '5', '111319', '176953', '26'), +('11', '115', '5', '111321', '176104', '26'), +('11', '115', '5', '111318', '174217', '26'), +('11', '115', '5', '111018', '155103', '26'), +('11', '115', '8', '111332', '177521', '26'), +('11', '115', '8', '111329', '176529', '26'), +('11', '115', '8', '111331', '172891', '26'), +('11', '115', '8', '111031', '155770', '26'), +('11', '115', '6', '111323', '177361', '26'), +('11', '115', '6', '111326', '175948', '26'), +('11', '115', '6', '111325', '175812', '26'), +('11', '115', '6', '111022', '155511', '26'), +('11', '115', '17', '56043', '117841', '26'), +('11', '115', '17', '56084', '114438', '26'), +('11', '115', '17', '104427', '99844', '26'), +('11', '115', '17', '54854', '75239', '26'), +('11', '115', '7', '56080', '110215', '26'), +('11', '115', '7', '56040', '109626', '26'), +('11', '115', '7', '104425', '95613', '26'), +('11', '115', '7', '54848', '70384', '26'), +('11', '115', '9', '67098', '180059', '26'), +('11', '115', '9', '104834', '121804', '26'), +('11', '115', '9', '56031', '106571', '26'), +('11', '115', '9', '56070', '106540', '26'), +('11', '115', '15', '111349', '179432', '26'), +('11', '115', '15', '111344', '177601', '26'), +('11', '115', '15', '111340', '177173', '26'), +('11', '115', '15', '111346', '176974', '26'), +('11', '115', '20', '128733', '227382', '26'), +('11', '115', '20', '111356', '177519', '26'), +('11', '115', '20', '111352', '176489', '26'), +('11', '115', '20', '111351', '174061', '26'), +('11', '115', '12', '56035', '108606', '26'), +('11', '115', '12', '56074', '107328', '26'), +('11', '115', '12', '104422', '93564', '26'), +('11', '115', '12', '49656', '70173', '26'), +('11', '115', '18', '56041', '114382', '26'), +('11', '115', '18', '62986', '112447', '26'), +('11', '115', '18', '104426', '97234', '26'), +('11', '115', '18', '54851', '71581', '26'), +('11', '115', '19', '81763', '111085', '26'), +('11', '115', '19', '62990', '110880', '26'), +('11', '115', '19', '56075', '110211', '26'), +('11', '115', '19', '56037', '110082', '26'), +('11', '115', '13', '111521', '183267', '26'), +('11', '115', '13', '111524', '173936', '26'), +('11', '115', '13', '111519', '173929', '26'), +('11', '115', '13', '111221', '162431', '26'), +('11', '115', '14', '111537', '177499', '26'), +('11', '115', '14', '111535', '175244', '26'), +('11', '115', '14', '111237', '155648', '26'), +('11', '115', '14', '111235', '153492', '26'), +('11', '115', '11', '85213', '257118', '26'), +('11', '115', '11', '133816', '229887', '26'), +('11', '115', '11', '111335', '176529', '26'), +('11', '115', '11', '111337', '176413', '26'), +('12', '1', '22', '10323', '0', '0'), +('12', '1', '22', '9246', '0', '0'), +('12', '1', '22', '21509', '0', '0'), +('12', '1', '22', '8007', '0', '0'), +('12', '1', '1', '14702', '2350', '0'), +('12', '1', '1', '30361', '2040', '0'), +('12', '1', '1', '14701', '1862', '0'), +('12', '1', '1', '10321', '600', '0'), +('12', '1', '2', '10143', '3368', '0'), +('12', '1', '2', '30363', '2700', '0'), +('12', '1', '2', '1271', '2300', '0'), +('12', '1', '2', '10142', '1272', '0'), +('12', '1', '3', '14705', '990', '0'), +('12', '1', '3', '14706', '990', '0'), +('12', '1', '3', '1212', '925', '0'), +('12', '1', '3', '1272', '649', '0'), +('12', '1', '5', '14703', '3850', '0'), +('12', '1', '5', '27710', '3066', '0'), +('12', '1', '5', '14556', '3018', '0'), +('12', '1', '5', '30362', '2340', '0'), +('12', '1', '8', '11603', '5376', '0'), +('12', '1', '8', '2349', '2154', '0'), +('12', '1', '8', '11621', '1021', '0'), +('12', '1', '8', '1216', '939', '0'), +('12', '1', '6', '1557', '5310', '0'), +('12', '1', '6', '1905', '3031', '0'), +('12', '1', '6', '1542', '2237', '0'), +('12', '1', '6', '1273', '1416', '0'), +('12', '1', '17', '1253', '6051', '0'), +('12', '1', '17', '1644', '5203', '0'), +('12', '1', '17', '11641', '3690', '0'), +('12', '1', '17', '1357', '3468', '0'), +('12', '1', '7', '1362', '1624', '0'), +('12', '1', '7', '1321', '1146', '0'), +('12', '1', '7', '1648', '660', '0'), +('12', '1', '7', '1227', '575', '0'), +('12', '1', '9', '12803', '3470', '0'), +('12', '1', '9', '4344', '1251', '0'), +('12', '1', '9', '10408', '1202', '0'), +('12', '1', '9', '14650', '1062', '0'), +('12', '1', '15', '11686', '3070', '0'), +('12', '1', '15', '10150', '1804', '0'), +('12', '1', '15', '10163', '1500', '0'), +('12', '1', '15', '14651', '1424', '0'), +('12', '1', '20', '11666', '5289', '0'), +('12', '1', '20', '2742', '3069', '0'), +('12', '1', '20', '1217', '934', '0'), +('12', '1', '20', '1647', '934', '0'), +('12', '1', '12', '2923', '2074', '0'), +('12', '1', '12', '20655', '1816', '0'), +('12', '1', '12', '1404', '1512', '0'), +('12', '1', '12', '1229', '1282', '0'), +('12', '1', '18', '1651', '757', '0'), +('12', '1', '18', '4410', '742', '0'), +('12', '1', '18', '1230', '485', '0'), +('12', '1', '18', '1221', '454', '0'), +('12', '1', '19', '68239', '1345', '0'), +('12', '1', '19', '1652', '1234', '0'), +('12', '1', '19', '1368', '1216', '0'), +('12', '1', '19', '1222', '452', '0'), +('12', '1', '13', '20656', '3666', '0'), +('12', '1', '13', '14337', '3174', '0'), +('12', '1', '13', '11625', '2114', '0'), +('12', '1', '13', '13400', '1829', '0'), +('12', '1', '14', '10219', '3681', '0'), +('12', '1', '14', '20656', '3666', '0'), +('12', '1', '14', '11625', '2114', '0'), +('12', '1', '14', '13353', '1501', '0'), +('12', '1', '11', '13353', '1500', '0'), +('12', '1', '11', '14762', '1404', '0'), +('12', '1', '11', '20677', '450', '0'), +('12', '1', '11', '13942', '91', '0'), +('12', '2', '22', '10323', '0', '0'), +('12', '2', '22', '9246', '0', '0'), +('12', '2', '22', '21509', '0', '0'), +('12', '2', '22', '8007', '0', '0'), +('12', '2', '1', '14702', '2350', '0'), +('12', '2', '1', '30361', '2040', '0'), +('12', '2', '1', '14701', '1862', '0'), +('12', '2', '1', '10321', '600', '0'), +('12', '2', '2', '10143', '3368', '0'), +('12', '2', '2', '30363', '2700', '0'), +('12', '2', '2', '1271', '2358', '0'), +('12', '2', '2', '10142', '1272', '0'), +('12', '2', '3', '14705', '990', '0'), +('12', '2', '3', '14706', '990', '0'), +('12', '2', '3', '1212', '933', '0'), +('12', '2', '3', '1272', '714', '0'), +('12', '2', '5', '14703', '3850', '0'), +('12', '2', '5', '27710', '3103', '0'), +('12', '2', '5', '14556', '3018', '0'), +('12', '2', '5', '30362', '2340', '0'), +('12', '2', '8', '11603', '5441', '0'), +('12', '2', '8', '2349', '2154', '0'), +('12', '2', '8', '11621', '1021', '0'), +('12', '2', '8', '1216', '946', '0'), +('12', '2', '6', '1557', '5310', '0'), +('12', '2', '6', '1905', '3033', '0'), +('12', '2', '6', '1542', '2302', '0'), +('12', '2', '6', '1273', '1453', '0'), +('12', '2', '17', '1253', '6053', '0'), +('12', '2', '17', '1644', '5239', '0'), +('12', '2', '17', '11641', '3799', '0'), +('12', '2', '17', '1357', '3468', '0'), +('12', '2', '7', '1362', '1624', '0'), +('12', '2', '7', '1321', '1146', '0'), +('12', '2', '7', '1648', '697', '0'), +('12', '2', '7', '1227', '626', '0'), +('12', '2', '9', '12803', '3434', '0'), +('12', '2', '9', '4344', '1251', '0'), +('12', '2', '9', '10408', '1202', '0'), +('12', '2', '9', '14650', '1062', '0'), +('12', '2', '15', '11686', '3106', '0'), +('12', '2', '15', '10150', '1804', '0'), +('12', '2', '15', '10163', '1500', '0'), +('12', '2', '15', '14651', '1424', '0'), +('12', '2', '20', '11666', '5290', '0'), +('12', '2', '20', '2742', '3071', '0'), +('12', '2', '20', '1217', '941', '0'), +('12', '2', '20', '1647', '934', '0'), +('12', '2', '12', '2923', '2074', '0'), +('12', '2', '12', '20655', '1831', '0'), +('12', '2', '12', '1404', '1512', '0'), +('12', '2', '12', '1229', '1333', '0'), +('12', '2', '18', '1651', '779', '0'), +('12', '2', '18', '4410', '742', '0'), +('12', '2', '18', '1230', '485', '0'), +('12', '2', '18', '1221', '454', '0'), +('12', '2', '19', '68239', '1367', '0'), +('12', '2', '19', '1652', '1234', '0'), +('12', '2', '19', '1368', '1216', '0'), +('12', '2', '19', '1222', '452', '0'), +('12', '2', '13', '20656', '3703', '0'), +('12', '2', '13', '14337', '3246', '0'), +('12', '2', '13', '11625', '2116', '0'), +('12', '2', '13', '13400', '1858', '0'), +('12', '2', '14', '20656', '3703', '0'), +('12', '2', '14', '10219', '3681', '0'), +('12', '2', '14', '11625', '2116', '0'), +('12', '2', '14', '13353', '1501', '0'), +('12', '2', '11', '13353', '1500', '0'), +('12', '2', '11', '14762', '1404', '0'), +('12', '2', '11', '20677', '450', '0'), +('12', '2', '11', '9246', '157', '0'), +('12', '3', '22', '10323', '0', '0'), +('12', '3', '22', '9246', '0', '0'), +('12', '3', '22', '21509', '0', '0'), +('12', '3', '22', '8007', '0', '0'), +('12', '3', '1', '14702', '2350', '0'), +('12', '3', '1', '30361', '2040', '0'), +('12', '3', '1', '14701', '1862', '0'), +('12', '3', '1', '10321', '600', '0'), +('12', '3', '2', '10143', '3368', '0'), +('12', '3', '2', '30363', '2700', '0'), +('12', '3', '2', '1271', '2416', '0'), +('12', '3', '2', '10142', '1272', '0'), +('12', '3', '3', '14705', '990', '0'), +('12', '3', '3', '14706', '990', '0'), +('12', '3', '3', '1212', '940', '0'), +('12', '3', '3', '1272', '779', '0'), +('12', '3', '5', '14703', '3850', '0'), +('12', '3', '5', '27710', '3139', '0'), +('12', '3', '5', '14556', '3018', '0'), +('12', '3', '5', '30362', '2340', '0'), +('12', '3', '8', '11603', '5506', '0'), +('12', '3', '8', '2349', '2154', '0'), +('12', '3', '8', '11621', '1021', '0'), +('12', '3', '8', '1216', '953', '0'), +('12', '3', '6', '1557', '5310', '0'), +('12', '3', '6', '1905', '3034', '0'), +('12', '3', '6', '1542', '2367', '0'), +('12', '3', '6', '1273', '1489', '0'), +('12', '3', '17', '1253', '6056', '0'), +('12', '3', '17', '1644', '5275', '0'), +('12', '3', '17', '11641', '3908', '0'), +('12', '3', '17', '1357', '3468', '0'), +('12', '3', '7', '1362', '1624', '0'), +('12', '3', '7', '1321', '1146', '0'), +('12', '3', '7', '1648', '733', '0'), +('12', '3', '7', '1227', '676', '0'), +('12', '3', '9', '12803', '3397', '0'), +('12', '3', '9', '4344', '1251', '0'), +('12', '3', '9', '10408', '1202', '0'), +('12', '3', '9', '14650', '1062', '0'), +('12', '3', '15', '11686', '3143', '0'), +('12', '3', '15', '10150', '1804', '0'), +('12', '3', '15', '10163', '1500', '0'), +('12', '3', '15', '14651', '1424', '0'), +('12', '3', '20', '11666', '5292', '0'), +('12', '3', '20', '2742', '3074', '0'), +('12', '3', '20', '1217', '948', '0'), +('12', '3', '20', '1647', '934', '0'), +('12', '3', '12', '2923', '2074', '0'), +('12', '3', '12', '20655', '1846', '0'), +('12', '3', '12', '1404', '1512', '0'), +('12', '3', '12', '1229', '1384', '0'), +('12', '3', '18', '1651', '800', '0'), +('12', '3', '18', '4410', '742', '0'), +('12', '3', '18', '1230', '486', '0'), +('12', '3', '18', '1221', '454', '0'), +('12', '3', '19', '68239', '1389', '0'), +('12', '3', '19', '1652', '1234', '0'), +('12', '3', '19', '1368', '1216', '0'), +('12', '3', '19', '1222', '452', '0'), +('12', '3', '13', '20656', '3739', '0'), +('12', '3', '13', '14337', '3319', '0'), +('12', '3', '13', '11625', '2119', '0'), +('12', '3', '13', '13400', '1887', '0'), +('12', '3', '14', '20656', '3739', '0'), +('12', '3', '14', '10219', '3681', '0'), +('12', '3', '14', '11625', '2119', '0'), +('12', '3', '14', '13987', '1509', '0'), +('12', '3', '11', '13353', '1500', '0'), +('12', '3', '11', '14762', '1404', '0'), +('12', '3', '11', '20677', '450', '0'), +('12', '3', '11', '9246', '230', '0'), +('12', '4', '22', '10323', '0', '0'), +('12', '4', '22', '9246', '0', '0'), +('12', '4', '22', '21509', '0', '0'), +('12', '4', '22', '8007', '0', '0'), +('12', '4', '1', '14702', '2350', '0'), +('12', '4', '1', '30361', '2040', '0'), +('12', '4', '1', '14701', '1862', '0'), +('12', '4', '1', '10321', '600', '0'), +('12', '4', '2', '10143', '3368', '0'), +('12', '4', '2', '30363', '2700', '0'), +('12', '4', '2', '1271', '2474', '0'), +('12', '4', '2', '10142', '1272', '0'), +('12', '4', '3', '14705', '990', '0'), +('12', '4', '3', '14706', '990', '0'), +('12', '4', '3', '1212', '947', '0'), +('12', '4', '3', '1272', '844', '0'), +('12', '4', '5', '14703', '3850', '0'), +('12', '4', '5', '27710', '3175', '0'), +('12', '4', '5', '14556', '3018', '0'), +('12', '4', '5', '30362', '2340', '0'), +('12', '4', '8', '11603', '5571', '0'), +('12', '4', '8', '2349', '2154', '0'), +('12', '4', '8', '11621', '1021', '0'), +('12', '4', '8', '1216', '960', '0'), +('12', '4', '6', '1557', '5310', '0'), +('12', '4', '6', '1905', '3035', '0'), +('12', '4', '6', '1542', '2432', '0'), +('12', '4', '6', '1273', '1525', '0'), +('12', '4', '17', '1253', '6058', '0'), +('12', '4', '17', '1644', '5311', '0'), +('12', '4', '17', '11641', '4016', '0'), +('12', '4', '17', '1357', '3468', '0'), +('12', '4', '7', '1362', '1624', '0'), +('12', '4', '7', '1321', '1146', '0'), +('12', '4', '7', '1648', '769', '0'), +('12', '4', '7', '1227', '727', '0'), +('12', '4', '9', '12803', '3361', '0'), +('12', '4', '9', '4344', '1251', '0'), +('12', '4', '9', '10408', '1202', '0'), +('12', '4', '9', '14650', '1062', '0'), +('12', '4', '15', '11686', '3179', '0'), +('12', '4', '15', '10150', '1804', '0'), +('12', '4', '15', '10163', '1500', '0'), +('12', '4', '15', '14651', '1424', '0'), +('12', '4', '20', '11666', '5294', '0'), +('12', '4', '20', '2742', '3076', '0'), +('12', '4', '20', '1217', '956', '0'), +('12', '4', '20', '1647', '934', '0'), +('12', '4', '12', '2923', '2074', '0'), +('12', '4', '12', '20655', '1861', '0'), +('12', '4', '12', '1404', '1512', '0'), +('12', '4', '12', '1229', '1434', '0'), +('12', '4', '18', '1651', '822', '0'), +('12', '4', '18', '4410', '742', '0'), +('12', '4', '18', '1230', '487', '0'), +('12', '4', '18', '1221', '454', '0'), +('12', '4', '19', '68239', '1410', '0'), +('12', '4', '19', '1652', '1234', '0'), +('12', '4', '19', '1368', '1216', '0'), +('12', '4', '19', '1222', '452', '0'), +('12', '4', '13', '20656', '3775', '0'), +('12', '4', '13', '14337', '3391', '0'), +('12', '4', '13', '11625', '2121', '0'), +('12', '4', '13', '13400', '1916', '0'), +('12', '4', '14', '20656', '3775', '0'), +('12', '4', '14', '10219', '3681', '0'), +('12', '4', '14', '11625', '2121', '0'), +('12', '4', '14', '13987', '1545', '0'), +('12', '4', '11', '13353', '1500', '0'), +('12', '4', '11', '14762', '1404', '0'), +('12', '4', '11', '20677', '450', '0'), +('12', '4', '11', '9246', '302', '0'), +('12', '5', '22', '10323', '0', '0'), +('12', '5', '22', '9246', '0', '0'), +('12', '5', '22', '21509', '0', '0'), +('12', '5', '22', '8007', '0', '0'), +('12', '5', '1', '14702', '2350', '0'), +('12', '5', '1', '30361', '2040', '0'), +('12', '5', '1', '14701', '1862', '0'), +('12', '5', '1', '10321', '600', '0'), +('12', '5', '2', '10143', '3368', '0'), +('12', '5', '2', '30363', '2700', '0'), +('12', '5', '2', '1271', '2532', '0'), +('12', '5', '2', '1225', '1290', '0'), +('12', '5', '3', '14705', '990', '0'), +('12', '5', '3', '14706', '990', '0'), +('12', '5', '3', '1212', '954', '0'), +('12', '5', '3', '1272', '910', '0'), +('12', '5', '5', '14703', '3850', '0'), +('12', '5', '5', '27710', '3211', '0'), +('12', '5', '5', '14556', '3018', '0'), +('12', '5', '5', '30362', '2340', '0'), +('12', '5', '8', '11603', '5637', '0'), +('12', '5', '8', '2349', '2154', '0'), +('12', '5', '8', '11621', '1021', '0'), +('12', '5', '8', '1216', '968', '0'), +('12', '5', '6', '1557', '5310', '0'), +('12', '5', '6', '1905', '3036', '0'), +('12', '5', '6', '1542', '2497', '0'), +('12', '5', '6', '1273', '1561', '0'), +('12', '5', '17', '1253', '6060', '0'), +('12', '5', '17', '1644', '5348', '0'), +('12', '5', '17', '11641', '4125', '0'), +('12', '5', '17', '1357', '3468', '0'), +('12', '5', '7', '1362', '1624', '0'), +('12', '5', '7', '1321', '1146', '0'), +('12', '5', '7', '1648', '805', '0'), +('12', '5', '7', '1227', '778', '0'), +('12', '5', '9', '12803', '3325', '0'), +('12', '5', '9', '4344', '1251', '0'), +('12', '5', '9', '10408', '1202', '0'), +('12', '5', '9', '14650', '1062', '0'), +('12', '5', '15', '11686', '3215', '0'), +('12', '5', '15', '10150', '1804', '0'), +('12', '5', '15', '10163', '1500', '0'), +('12', '5', '15', '14651', '1424', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '5', '20', '11666', '5295', '0'), +('12', '5', '20', '2742', '3079', '0'), +('12', '5', '20', '1217', '963', '0'), +('12', '5', '20', '1647', '934', '0'), +('12', '5', '12', '2923', '2074', '0'), +('12', '5', '12', '20655', '1876', '0'), +('12', '5', '12', '1404', '1512', '0'), +('12', '5', '12', '1229', '1485', '0'), +('12', '5', '18', '1651', '844', '0'), +('12', '5', '18', '4410', '742', '0'), +('12', '5', '18', '1230', '487', '0'), +('12', '5', '18', '1221', '454', '0'), +('12', '5', '19', '68239', '1432', '0'), +('12', '5', '19', '1652', '1234', '0'), +('12', '5', '19', '1368', '1216', '0'), +('12', '5', '19', '1222', '452', '0'), +('12', '5', '13', '20656', '3811', '0'), +('12', '5', '13', '14337', '3464', '0'), +('12', '5', '13', '11625', '2123', '0'), +('12', '5', '13', '13400', '1945', '0'), +('12', '5', '14', '20656', '3811', '0'), +('12', '5', '14', '10219', '3681', '0'), +('12', '5', '14', '11625', '2123', '0'), +('12', '5', '14', '13987', '1581', '0'), +('12', '5', '11', '13353', '1500', '0'), +('12', '5', '11', '14762', '1404', '0'), +('12', '5', '11', '20677', '450', '0'), +('12', '5', '11', '9246', '374', '0'), +('12', '6', '22', '10323', '0', '0'), +('12', '6', '22', '9246', '0', '0'), +('12', '6', '22', '21509', '0', '0'), +('12', '6', '22', '8007', '0', '0'), +('12', '6', '1', '14702', '2350', '0'), +('12', '6', '1', '30361', '2040', '0'), +('12', '6', '1', '14701', '1862', '0'), +('12', '6', '1', '10321', '600', '0'), +('12', '6', '2', '10143', '3368', '0'), +('12', '6', '2', '30363', '2700', '0'), +('12', '6', '2', '1271', '2590', '0'), +('12', '6', '2', '1225', '1342', '0'), +('12', '6', '3', '14706', '990', '0'), +('12', '6', '3', '14705', '990', '0'), +('12', '6', '3', '1272', '975', '0'), +('12', '6', '3', '1212', '962', '0'), +('12', '6', '5', '14703', '3850', '0'), +('12', '6', '5', '27710', '3248', '0'), +('12', '6', '5', '14556', '3018', '0'), +('12', '6', '5', '30362', '2340', '0'), +('12', '6', '8', '11603', '5702', '0'), +('12', '6', '8', '2349', '2154', '0'), +('12', '6', '8', '11621', '1021', '0'), +('12', '6', '8', '1216', '975', '0'), +('12', '6', '6', '1557', '5310', '0'), +('12', '6', '6', '1905', '3037', '0'), +('12', '6', '6', '1542', '2563', '0'), +('12', '6', '6', '1273', '1598', '0'), +('12', '6', '17', '1253', '6063', '0'), +('12', '6', '17', '1644', '5384', '0'), +('12', '6', '17', '11641', '4234', '0'), +('12', '6', '17', '1357', '3468', '0'), +('12', '6', '7', '1362', '1624', '0'), +('12', '6', '7', '1321', '1146', '0'), +('12', '6', '7', '1648', '842', '0'), +('12', '6', '7', '1227', '829', '0'), +('12', '6', '9', '12803', '3289', '0'), +('12', '6', '9', '4344', '1251', '0'), +('12', '6', '9', '10408', '1202', '0'), +('12', '6', '9', '14650', '1062', '0'), +('12', '6', '15', '11686', '3251', '0'), +('12', '6', '15', '10150', '1804', '0'), +('12', '6', '15', '10163', '1500', '0'), +('12', '6', '15', '14651', '1424', '0'), +('12', '6', '20', '11666', '5297', '0'), +('12', '6', '20', '2742', '3081', '0'), +('12', '6', '20', '1217', '970', '0'), +('12', '6', '20', '1647', '934', '0'), +('12', '6', '12', '2923', '2074', '0'), +('12', '6', '12', '20655', '1891', '0'), +('12', '6', '12', '1229', '1536', '0'), +('12', '6', '12', '1404', '1512', '0'), +('12', '6', '18', '1651', '865', '0'), +('12', '6', '18', '4410', '742', '0'), +('12', '6', '18', '1230', '488', '0'), +('12', '6', '18', '1221', '454', '0'), +('12', '6', '19', '68239', '1454', '0'), +('12', '6', '19', '1652', '1234', '0'), +('12', '6', '19', '1368', '1216', '0'), +('12', '6', '19', '1222', '452', '0'), +('12', '6', '13', '20656', '3848', '0'), +('12', '6', '13', '14337', '3536', '0'), +('12', '6', '13', '11625', '2125', '0'), +('12', '6', '13', '13400', '1974', '0'), +('12', '6', '14', '20656', '3848', '0'), +('12', '6', '14', '10219', '3681', '0'), +('12', '6', '14', '11625', '2125', '0'), +('12', '6', '14', '9690', '1620', '0'), +('12', '6', '11', '13353', '1500', '0'), +('12', '6', '11', '14762', '1404', '0'), +('12', '6', '11', '20677', '450', '0'), +('12', '6', '11', '9246', '447', '0'), +('12', '7', '22', '10323', '0', '0'), +('12', '7', '22', '9246', '0', '0'), +('12', '7', '22', '21509', '0', '0'), +('12', '7', '22', '8007', '0', '0'), +('12', '7', '1', '14702', '2350', '0'), +('12', '7', '1', '30361', '2040', '0'), +('12', '7', '1', '14701', '1862', '0'), +('12', '7', '1', '10321', '600', '0'), +('12', '7', '2', '10143', '3368', '0'), +('12', '7', '2', '30363', '2700', '0'), +('12', '7', '2', '1271', '2648', '0'), +('12', '7', '2', '1225', '1394', '0'), +('12', '7', '3', '1272', '1040', '0'), +('12', '7', '3', '14705', '990', '0'), +('12', '7', '3', '14706', '990', '0'), +('12', '7', '3', '1212', '969', '0'), +('12', '7', '5', '14703', '3850', '0'), +('12', '7', '5', '27710', '3284', '0'), +('12', '7', '5', '14556', '3018', '0'), +('12', '7', '5', '30362', '2340', '0'), +('12', '7', '8', '11603', '5767', '0'), +('12', '7', '8', '2349', '2154', '0'), +('12', '7', '8', '11621', '1021', '0'), +('12', '7', '8', '1216', '982', '0'), +('12', '7', '6', '1557', '5310', '0'), +('12', '7', '6', '1905', '3039', '0'), +('12', '7', '6', '1542', '2628', '0'), +('12', '7', '6', '1273', '1634', '0'), +('12', '7', '17', '1253', '6065', '0'), +('12', '7', '17', '1644', '5420', '0'), +('12', '7', '17', '11641', '4343', '0'), +('12', '7', '17', '1357', '3468', '0'), +('12', '7', '7', '1362', '1624', '0'), +('12', '7', '7', '1321', '1146', '0'), +('12', '7', '7', '1227', '879', '0'), +('12', '7', '7', '1648', '878', '0'), +('12', '7', '9', '12803', '3252', '0'), +('12', '7', '9', '4344', '1251', '0'), +('12', '7', '9', '10408', '1202', '0'), +('12', '7', '9', '1649', '1070', '0'), +('12', '7', '15', '11686', '3288', '0'), +('12', '7', '15', '10150', '1804', '0'), +('12', '7', '15', '10163', '1500', '0'), +('12', '7', '15', '14651', '1424', '0'), +('12', '7', '20', '11666', '5299', '0'), +('12', '7', '20', '2742', '3083', '0'), +('12', '7', '20', '1217', '977', '0'), +('12', '7', '20', '1647', '934', '0'), +('12', '7', '12', '2923', '2074', '0'), +('12', '7', '12', '20655', '1906', '0'), +('12', '7', '12', '1229', '1587', '0'), +('12', '7', '12', '1404', '1512', '0'), +('12', '7', '18', '1651', '887', '0'), +('12', '7', '18', '4410', '742', '0'), +('12', '7', '18', '1230', '489', '0'), +('12', '7', '18', '1221', '454', '0'), +('12', '7', '19', '68239', '1476', '0'), +('12', '7', '19', '1652', '1234', '0'), +('12', '7', '19', '1368', '1216', '0'), +('12', '7', '19', '4407', '517', '0'), +('12', '7', '13', '20656', '3884', '0'), +('12', '7', '13', '14337', '3609', '0'), +('12', '7', '13', '11625', '2127', '0'), +('12', '7', '13', '13400', '2003', '0'), +('12', '7', '14', '20656', '3884', '0'), +('12', '7', '14', '10219', '3681', '0'), +('12', '7', '14', '11625', '2127', '0'), +('12', '7', '14', '9690', '1890', '0'), +('12', '7', '11', '13353', '1500', '0'), +('12', '7', '11', '14762', '1404', '0'), +('12', '7', '11', '9246', '519', '0'), +('12', '7', '11', '20677', '450', '0'), +('12', '8', '22', '10323', '0', '0'), +('12', '8', '22', '9246', '0', '0'), +('12', '8', '22', '21509', '0', '0'), +('12', '8', '22', '8007', '0', '0'), +('12', '8', '1', '14702', '2350', '0'), +('12', '8', '1', '30361', '2040', '0'), +('12', '8', '1', '14701', '1862', '0'), +('12', '8', '1', '10321', '600', '0'), +('12', '8', '2', '10143', '3368', '0'), +('12', '8', '2', '1271', '2706', '0'), +('12', '8', '2', '30363', '2700', '0'), +('12', '8', '2', '1225', '1446', '0'), +('12', '8', '3', '1272', '1105', '0'), +('12', '8', '3', '14705', '990', '0'), +('12', '8', '3', '14706', '990', '0'), +('12', '8', '3', '1212', '976', '0'), +('12', '8', '5', '14703', '3850', '0'), +('12', '8', '5', '27710', '3320', '0'), +('12', '8', '5', '14556', '3018', '0'), +('12', '8', '5', '30362', '2340', '0'), +('12', '8', '8', '11603', '5832', '0'), +('12', '8', '8', '2349', '2154', '0'), +('12', '8', '8', '11621', '1021', '0'), +('12', '8', '8', '1216', '989', '0'), +('12', '8', '6', '1557', '5310', '0'), +('12', '8', '6', '1905', '3040', '0'), +('12', '8', '6', '1542', '2693', '0'), +('12', '8', '6', '1273', '1670', '0'), +('12', '8', '17', '1253', '6068', '0'), +('12', '8', '17', '1644', '5456', '0'), +('12', '8', '17', '11641', '4451', '0'), +('12', '8', '17', '1357', '3468', '0'), +('12', '8', '7', '1362', '1624', '0'), +('12', '8', '7', '1321', '1146', '0'), +('12', '8', '7', '1227', '930', '0'), +('12', '8', '7', '1648', '914', '0'), +('12', '8', '9', '12803', '3216', '0'), +('12', '8', '9', '4344', '1251', '0'), +('12', '8', '9', '10408', '1202', '0'), +('12', '8', '9', '1649', '1092', '0'), +('12', '8', '15', '11686', '3324', '0'), +('12', '8', '15', '10150', '1804', '0'), +('12', '8', '15', '10163', '1500', '0'), +('12', '8', '15', '14651', '1424', '0'), +('12', '8', '20', '11666', '5300', '0'), +('12', '8', '20', '2742', '3086', '0'), +('12', '8', '20', '1217', '985', '0'), +('12', '8', '20', '1647', '934', '0'), +('12', '8', '12', '2923', '2074', '0'), +('12', '8', '12', '20655', '1921', '0'), +('12', '8', '12', '1229', '1637', '0'), +('12', '8', '12', '1404', '1512', '0'), +('12', '8', '18', '1651', '909', '0'), +('12', '8', '18', '4410', '742', '0'), +('12', '8', '18', '1230', '490', '0'), +('12', '8', '18', '1221', '454', '0'), +('12', '8', '19', '68239', '1497', '0'), +('12', '8', '19', '1652', '1234', '0'), +('12', '8', '19', '1368', '1216', '0'), +('12', '8', '19', '4407', '582', '0'), +('12', '8', '13', '20656', '3920', '0'), +('12', '8', '13', '14337', '3681', '0'), +('12', '8', '13', '9690', '2160', '0'), +('12', '8', '13', '11625', '2129', '0'), +('12', '8', '14', '20656', '3920', '0'), +('12', '8', '14', '10219', '3681', '0'), +('12', '8', '14', '9690', '2160', '0'), +('12', '8', '14', '11625', '2129', '0'), +('12', '8', '11', '13353', '1500', '0'), +('12', '8', '11', '14762', '1404', '0'), +('12', '8', '11', '9246', '592', '0'), +('12', '8', '11', '20677', '450', '0'), +('12', '9', '22', '10323', '0', '0'), +('12', '9', '22', '9246', '0', '0'), +('12', '9', '22', '21509', '0', '0'), +('12', '9', '22', '8007', '0', '0'), +('12', '9', '1', '14702', '2350', '0'), +('12', '9', '1', '30361', '2040', '0'), +('12', '9', '1', '14701', '1862', '0'), +('12', '9', '1', '10321', '600', '0'), +('12', '9', '2', '10143', '3368', '0'), +('12', '9', '2', '1271', '2764', '0'), +('12', '9', '2', '30363', '2700', '0'), +('12', '9', '2', '1225', '1498', '0'), +('12', '9', '3', '1272', '1171', '0'), +('12', '9', '3', '14705', '990', '0'), +('12', '9', '3', '14706', '990', '0'), +('12', '9', '3', '1212', '983', '0'), +('12', '9', '5', '14703', '3850', '0'), +('12', '9', '5', '27710', '3356', '0'), +('12', '9', '5', '14556', '3018', '0'), +('12', '9', '5', '30362', '2340', '0'), +('12', '9', '8', '11603', '5897', '0'), +('12', '9', '8', '2349', '2154', '0'), +('12', '9', '8', '11621', '1021', '0'), +('12', '9', '8', '1216', '997', '0'), +('12', '9', '6', '1557', '5310', '0'), +('12', '9', '6', '1905', '3041', '0'), +('12', '9', '6', '1542', '2758', '0'), +('12', '9', '6', '1273', '1706', '0'), +('12', '9', '17', '1253', '6070', '0'), +('12', '9', '17', '1644', '5493', '0'), +('12', '9', '17', '11641', '4560', '0'), +('12', '9', '17', '1357', '3468', '0'), +('12', '9', '7', '1362', '1624', '0'), +('12', '9', '7', '1321', '1146', '0'), +('12', '9', '7', '1227', '981', '0'), +('12', '9', '7', '1648', '950', '0'), +('12', '9', '9', '12803', '3180', '0'), +('12', '9', '9', '4344', '1251', '0'), +('12', '9', '9', '10408', '1202', '0'), +('12', '9', '9', '1649', '1114', '0'), +('12', '9', '15', '11686', '3360', '0'), +('12', '9', '15', '10150', '1804', '0'), +('12', '9', '15', '10163', '1500', '0'), +('12', '9', '15', '14651', '1424', '0'), +('12', '9', '20', '11666', '5302', '0'), +('12', '9', '20', '2742', '3088', '0'), +('12', '9', '20', '1217', '992', '0'), +('12', '9', '20', '1647', '934', '0'), +('12', '9', '12', '2923', '2074', '0'), +('12', '9', '12', '20655', '1936', '0'), +('12', '9', '12', '1229', '1688', '0'), +('12', '9', '12', '1404', '1512', '0'), +('12', '9', '18', '1651', '931', '0'), +('12', '9', '18', '4410', '742', '0'), +('12', '9', '18', '1230', '490', '0'), +('12', '9', '18', '1221', '454', '0'), +('12', '9', '19', '68239', '1519', '0'), +('12', '9', '19', '1652', '1234', '0'), +('12', '9', '19', '1368', '1216', '0'), +('12', '9', '19', '4407', '647', '0'), +('12', '9', '13', '20656', '3956', '0'), +('12', '9', '13', '14337', '3754', '0'), +('12', '9', '13', '9690', '2430', '0'), +('12', '9', '13', '11625', '2132', '0'), +('12', '9', '14', '20656', '3956', '0'), +('12', '9', '14', '10219', '3681', '0'), +('12', '9', '14', '9690', '2430', '0'), +('12', '9', '14', '11625', '2132', '0'), +('12', '9', '11', '13353', '1500', '0'), +('12', '9', '11', '14762', '1404', '0'), +('12', '9', '11', '9246', '664', '0'), +('12', '9', '11', '20677', '450', '0'), +('12', '10', '22', '10323', '0', '0'), +('12', '10', '22', '9246', '0', '0'), +('12', '10', '22', '21509', '0', '0'), +('12', '10', '22', '8007', '0', '0'), +('12', '10', '1', '14702', '2350', '0'), +('12', '10', '1', '30361', '2040', '0'), +('12', '10', '1', '14701', '1862', '0'), +('12', '10', '1', '10321', '600', '0'), +('12', '10', '2', '10143', '3368', '0'), +('12', '10', '2', '1271', '2822', '0'), +('12', '10', '2', '30363', '2700', '0'), +('12', '10', '2', '1225', '1550', '0'), +('12', '10', '3', '1272', '1236', '0'), +('12', '10', '3', '11052', '1087', '0'), +('12', '10', '3', '1212', '991', '0'), +('12', '10', '3', '14706', '990', '0'), +('12', '10', '5', '14703', '3850', '0'), +('12', '10', '5', '27710', '3393', '0'), +('12', '10', '5', '14556', '3018', '0'), +('12', '10', '5', '30362', '2340', '0'), +('12', '10', '8', '11603', '5963', '0'), +('12', '10', '8', '2349', '2154', '0'), +('12', '10', '8', '11621', '1021', '0'), +('12', '10', '8', '1216', '1004', '0'), +('12', '10', '6', '1557', '5310', '0'), +('12', '10', '6', '1905', '3042', '0'), +('12', '10', '6', '1542', '2824', '0'), +('12', '10', '6', '1273', '1743', '0'), +('12', '10', '17', '1253', '6072', '0'), +('12', '10', '17', '1644', '5529', '0'), +('12', '10', '17', '11641', '4669', '0'), +('12', '10', '17', '1357', '3468', '0'), +('12', '10', '7', '1362', '1624', '0'), +('12', '10', '7', '1321', '1146', '0'), +('12', '10', '7', '1227', '1032', '0'), +('12', '10', '7', '1648', '987', '0'), +('12', '10', '9', '12803', '3144', '0'), +('12', '10', '9', '4344', '1251', '0'), +('12', '10', '9', '10408', '1202', '0'), +('12', '10', '9', '1649', '1136', '0'), +('12', '10', '15', '11686', '3396', '0'), +('12', '10', '15', '10150', '1804', '0'), +('12', '10', '15', '10163', '1500', '0'), +('12', '10', '15', '14651', '1424', '0'), +('12', '10', '20', '11666', '5304', '0'), +('12', '10', '20', '2742', '3091', '0'), +('12', '10', '20', '1217', '999', '0'), +('12', '10', '20', '1647', '934', '0'), +('12', '10', '12', '2923', '2074', '0'), +('12', '10', '12', '20655', '1951', '0'), +('12', '10', '12', '1229', '1739', '0'), +('12', '10', '12', '1404', '1512', '0'), +('12', '10', '18', '1651', '952', '0'), +('12', '10', '18', '4410', '742', '0'), +('12', '10', '18', '1230', '491', '0'), +('12', '10', '18', '1221', '454', '0'), +('12', '10', '19', '68239', '1541', '0'), +('12', '10', '19', '1652', '1234', '0'), +('12', '10', '19', '1368', '1216', '0'), +('12', '10', '19', '4407', '713', '0'), +('12', '10', '13', '20656', '3993', '0'), +('12', '10', '13', '14337', '3826', '0'), +('12', '10', '13', '9690', '2700', '0'), +('12', '10', '13', '11625', '2134', '0'), +('12', '10', '14', '20656', '3993', '0'), +('12', '10', '14', '10219', '3681', '0'), +('12', '10', '14', '9690', '2700', '0'), +('12', '10', '14', '11625', '2134', '0'), +('12', '10', '11', '13353', '1500', '0'), +('12', '10', '11', '14762', '1404', '0'), +('12', '10', '11', '9246', '737', '0'), +('12', '10', '11', '20677', '450', '0'), +('12', '11', '22', '10323', '0', '0'), +('12', '11', '22', '9246', '0', '0'), +('12', '11', '22', '21509', '0', '0'), +('12', '11', '22', '8007', '0', '0'), +('12', '11', '1', '14702', '2350', '0'), +('12', '11', '1', '30361', '2040', '0'), +('12', '11', '1', '14701', '1862', '0'), +('12', '11', '1', '10321', '600', '0'), +('12', '11', '2', '10143', '3368', '0'), +('12', '11', '2', '1271', '2880', '0'), +('12', '11', '2', '30363', '2700', '0'), +('12', '11', '2', '1225', '1602', '0'), +('12', '11', '3', '1272', '1301', '0'), +('12', '11', '3', '11052', '1196', '0'), +('12', '11', '3', '1212', '998', '0'), +('12', '11', '3', '14706', '990', '0'), +('12', '11', '5', '14703', '3850', '0'), +('12', '11', '5', '27710', '3429', '0'), +('12', '11', '5', '14556', '3018', '0'), +('12', '11', '5', '30362', '2340', '0'), +('12', '11', '8', '11603', '6028', '0'), +('12', '11', '8', '2349', '2154', '0'), +('12', '11', '8', '11621', '1021', '0'), +('12', '11', '8', '1216', '1011', '0'), +('12', '11', '6', '1557', '5310', '0'), +('12', '11', '6', '1905', '3043', '0'), +('12', '11', '6', '1542', '2889', '0'), +('12', '11', '6', '1273', '1779', '0'), +('12', '11', '17', '1253', '6075', '0'), +('12', '11', '17', '1644', '5565', '0'), +('12', '11', '17', '11641', '4777', '0'), +('12', '11', '17', '1357', '3468', '0'), +('12', '11', '7', '1362', '1624', '0'), +('12', '11', '7', '1321', '1146', '0'), +('12', '11', '7', '1227', '1082', '0'), +('12', '11', '7', '1648', '1023', '0'), +('12', '11', '9', '12803', '3107', '0'), +('12', '11', '9', '4344', '1251', '0'), +('12', '11', '9', '10408', '1202', '0'), +('12', '11', '9', '1649', '1157', '0'), +('12', '11', '15', '11686', '3432', '0'), +('12', '11', '15', '10150', '1804', '0'), +('12', '11', '15', '10163', '1500', '0'), +('12', '11', '15', '14651', '1424', '0'), +('12', '11', '20', '11666', '5305', '0'), +('12', '11', '20', '2742', '3093', '0'), +('12', '11', '20', '1217', '1006', '0'), +('12', '11', '20', '1647', '934', '0'), +('12', '11', '12', '2923', '2074', '0'), +('12', '11', '12', '20655', '1966', '0'), +('12', '11', '12', '1229', '1790', '0'), +('12', '11', '12', '1404', '1512', '0'), +('12', '11', '18', '1651', '974', '0'), +('12', '11', '18', '4410', '742', '0'), +('12', '11', '18', '1230', '492', '0'), +('12', '11', '18', '1221', '454', '0'), +('12', '11', '19', '68239', '1563', '0'), +('12', '11', '19', '1652', '1234', '0'), +('12', '11', '19', '1368', '1216', '0'), +('12', '11', '19', '4407', '778', '0'), +('12', '11', '13', '20656', '4029', '0'), +('12', '11', '13', '14337', '3898', '0'), +('12', '11', '13', '9690', '2700', '0'), +('12', '11', '13', '11625', '2136', '0'), +('12', '11', '14', '20656', '4029', '0'), +('12', '11', '14', '10219', '3681', '0'), +('12', '11', '14', '9690', '2700', '0'), +('12', '11', '14', '11625', '2136', '0'), +('12', '11', '11', '13353', '1500', '0'), +('12', '11', '11', '14762', '1404', '0'), +('12', '11', '11', '9246', '809', '0'), +('12', '11', '11', '20677', '450', '0'), +('12', '12', '22', '10323', '0', '0'), +('12', '12', '22', '9246', '0', '0'), +('12', '12', '22', '21509', '0', '0'), +('12', '12', '22', '8007', '0', '0'), +('12', '12', '1', '14702', '2350', '0'), +('12', '12', '1', '30361', '2040', '0'), +('12', '12', '1', '14701', '1862', '0'), +('12', '12', '1', '10082', '618', '0'), +('12', '12', '2', '10143', '3368', '0'), +('12', '12', '2', '1271', '2938', '0'), +('12', '12', '2', '30363', '2700', '0'), +('12', '12', '2', '1225', '1654', '0'), +('12', '12', '3', '1272', '1366', '0'), +('12', '12', '3', '11052', '1305', '0'), +('12', '12', '3', '1212', '1005', '0'), +('12', '12', '3', '14705', '990', '0'), +('12', '12', '5', '14703', '3850', '0'), +('12', '12', '5', '27710', '3465', '0'), +('12', '12', '5', '14556', '3018', '0'), +('12', '12', '5', '30362', '2340', '0'), +('12', '12', '8', '11603', '6093', '0'), +('12', '12', '8', '2349', '2154', '0'), +('12', '12', '8', '11621', '1021', '0'), +('12', '12', '8', '1216', '1018', '0'), +('12', '12', '6', '1557', '5310', '0'), +('12', '12', '6', '1905', '3045', '0'), +('12', '12', '6', '1542', '2954', '0'), +('12', '12', '6', '1273', '1815', '0'), +('12', '12', '17', '1253', '6077', '0'), +('12', '12', '17', '1644', '5601', '0'), +('12', '12', '17', '11641', '4886', '0'), +('12', '12', '17', '1357', '3468', '0'), +('12', '12', '7', '1362', '1624', '0'), +('12', '12', '7', '1321', '1146', '0'), +('12', '12', '7', '1227', '1133', '0'), +('12', '12', '7', '1648', '1059', '0'), +('12', '12', '9', '12803', '3071', '0'), +('12', '12', '9', '4344', '1251', '0'), +('12', '12', '9', '10408', '1202', '0'), +('12', '12', '9', '1649', '1179', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '12', '15', '11686', '3469', '0'), +('12', '12', '15', '10150', '1804', '0'), +('12', '12', '15', '10163', '1500', '0'), +('12', '12', '15', '14651', '1424', '0'), +('12', '12', '20', '11666', '5307', '0'), +('12', '12', '20', '2742', '3095', '0'), +('12', '12', '20', '1217', '1014', '0'), +('12', '12', '20', '1647', '934', '0'), +('12', '12', '12', '2923', '2074', '0'), +('12', '12', '12', '20655', '1981', '0'), +('12', '12', '12', '1229', '1840', '0'), +('12', '12', '12', '1404', '1512', '0'), +('12', '12', '18', '1651', '996', '0'), +('12', '12', '18', '4410', '742', '0'), +('12', '12', '18', '1230', '493', '0'), +('12', '12', '18', '1221', '454', '0'), +('12', '12', '19', '68239', '1584', '0'), +('12', '12', '19', '1652', '1234', '0'), +('12', '12', '19', '1368', '1216', '0'), +('12', '12', '19', '4407', '843', '0'), +('12', '12', '13', '20656', '4065', '0'), +('12', '12', '13', '14337', '3971', '0'), +('12', '12', '13', '9690', '2700', '0'), +('12', '12', '13', '13400', '2148', '0'), +('12', '12', '14', '20656', '4065', '0'), +('12', '12', '14', '10219', '3681', '0'), +('12', '12', '14', '9690', '2700', '0'), +('12', '12', '14', '11625', '2138', '0'), +('12', '12', '11', '13353', '1500', '0'), +('12', '12', '11', '14762', '1404', '0'), +('12', '12', '11', '9246', '882', '0'), +('12', '12', '11', '20677', '450', '0'), +('12', '13', '22', '10323', '0', '0'), +('12', '13', '22', '9246', '0', '0'), +('12', '13', '22', '21509', '0', '0'), +('12', '13', '22', '8007', '0', '0'), +('12', '13', '1', '14702', '2350', '0'), +('12', '13', '1', '30361', '2040', '0'), +('12', '13', '1', '14701', '1862', '0'), +('12', '13', '1', '10082', '662', '0'), +('12', '13', '2', '10143', '3368', '0'), +('12', '13', '2', '1271', '2996', '0'), +('12', '13', '2', '30363', '2700', '0'), +('12', '13', '2', '1225', '1705', '0'), +('12', '13', '3', '1272', '1432', '0'), +('12', '13', '3', '11052', '1413', '0'), +('12', '13', '3', '1212', '1012', '0'), +('12', '13', '3', '14705', '990', '0'), +('12', '13', '5', '14703', '3850', '0'), +('12', '13', '5', '27710', '3501', '0'), +('12', '13', '5', '14556', '3018', '0'), +('12', '13', '5', '30362', '2340', '0'), +('12', '13', '8', '11603', '6158', '0'), +('12', '13', '8', '2349', '2154', '0'), +('12', '13', '8', '1216', '1026', '0'), +('12', '13', '8', '11621', '1021', '0'), +('12', '13', '6', '1557', '5310', '0'), +('12', '13', '6', '1905', '3046', '0'), +('12', '13', '6', '1542', '3019', '0'), +('12', '13', '6', '1273', '1851', '0'), +('12', '13', '17', '1253', '6080', '0'), +('12', '13', '17', '1644', '5638', '0'), +('12', '13', '17', '11641', '4995', '0'), +('12', '13', '17', '1357', '3468', '0'), +('12', '13', '7', '1362', '1624', '0'), +('12', '13', '7', '1227', '1184', '0'), +('12', '13', '7', '1321', '1146', '0'), +('12', '13', '7', '1218', '1104', '0'), +('12', '13', '9', '12803', '3035', '0'), +('12', '13', '9', '4344', '1251', '0'), +('12', '13', '9', '10408', '1202', '0'), +('12', '13', '9', '1649', '1201', '0'), +('12', '13', '15', '11686', '3505', '0'), +('12', '13', '15', '10150', '1804', '0'), +('12', '13', '15', '10163', '1500', '0'), +('12', '13', '15', '14651', '1424', '0'), +('12', '13', '20', '11666', '5309', '0'), +('12', '13', '20', '2742', '3098', '0'), +('12', '13', '20', '1217', '1021', '0'), +('12', '13', '20', '1647', '934', '0'), +('12', '13', '12', '2923', '2074', '0'), +('12', '13', '12', '20655', '1996', '0'), +('12', '13', '12', '1229', '1891', '0'), +('12', '13', '12', '1404', '1512', '0'), +('12', '13', '18', '1651', '1018', '0'), +('12', '13', '18', '4410', '742', '0'), +('12', '13', '18', '1230', '493', '0'), +('12', '13', '18', '1221', '454', '0'), +('12', '13', '19', '68239', '1606', '0'), +('12', '13', '19', '1652', '1234', '0'), +('12', '13', '19', '1368', '1216', '0'), +('12', '13', '19', '4407', '908', '0'), +('12', '13', '13', '20656', '4101', '0'), +('12', '13', '13', '14337', '4043', '0'), +('12', '13', '13', '9690', '2700', '0'), +('12', '13', '13', '13400', '2177', '0'), +('12', '13', '14', '20656', '4101', '0'), +('12', '13', '14', '10219', '3681', '0'), +('12', '13', '14', '9690', '2700', '0'), +('12', '13', '14', '11625', '2140', '0'), +('12', '13', '11', '13353', '1500', '0'), +('12', '13', '11', '14762', '1404', '0'), +('12', '13', '11', '9246', '954', '0'), +('12', '13', '11', '20677', '450', '0'), +('12', '14', '22', '10323', '0', '0'), +('12', '14', '22', '9246', '0', '0'), +('12', '14', '22', '21509', '0', '0'), +('12', '14', '22', '8007', '0', '0'), +('12', '14', '1', '14702', '2350', '0'), +('12', '14', '1', '30361', '2040', '0'), +('12', '14', '1', '14701', '1862', '0'), +('12', '14', '1', '10082', '705', '0'), +('12', '14', '2', '10143', '3368', '0'), +('12', '14', '2', '1271', '3054', '0'), +('12', '14', '2', '30363', '2700', '0'), +('12', '14', '2', '1225', '1757', '0'), +('12', '14', '3', '11052', '1522', '0'), +('12', '14', '3', '1272', '1497', '0'), +('12', '14', '3', '1212', '1020', '0'), +('12', '14', '3', '14705', '990', '0'), +('12', '14', '5', '14703', '3850', '0'), +('12', '14', '5', '27710', '3538', '0'), +('12', '14', '5', '14556', '3018', '0'), +('12', '14', '5', '30362', '2340', '0'), +('12', '14', '8', '11603', '6224', '0'), +('12', '14', '8', '2349', '2154', '0'), +('12', '14', '8', '1216', '1033', '0'), +('12', '14', '8', '11621', '1021', '0'), +('12', '14', '6', '1557', '5310', '0'), +('12', '14', '6', '1542', '3085', '0'), +('12', '14', '6', '1905', '3047', '0'), +('12', '14', '6', '1273', '1888', '0'), +('12', '14', '17', '1253', '6082', '0'), +('12', '14', '17', '1644', '5674', '0'), +('12', '14', '17', '11641', '5104', '0'), +('12', '14', '17', '1214', '3535', '0'), +('12', '14', '7', '1362', '1624', '0'), +('12', '14', '7', '1227', '1234', '0'), +('12', '14', '7', '1218', '1154', '0'), +('12', '14', '7', '1321', '1146', '0'), +('12', '14', '9', '12803', '2999', '0'), +('12', '14', '9', '4344', '1251', '0'), +('12', '14', '9', '1649', '1223', '0'), +('12', '14', '9', '10408', '1202', '0'), +('12', '14', '15', '11686', '3541', '0'), +('12', '14', '15', '10150', '1804', '0'), +('12', '14', '15', '10163', '1500', '0'), +('12', '14', '15', '14651', '1424', '0'), +('12', '14', '20', '11666', '5311', '0'), +('12', '14', '20', '2742', '3100', '0'), +('12', '14', '20', '1217', '1028', '0'), +('12', '14', '20', '1647', '934', '0'), +('12', '14', '12', '2923', '2074', '0'), +('12', '14', '12', '20655', '2011', '0'), +('12', '14', '12', '1229', '1942', '0'), +('12', '14', '12', '1404', '1512', '0'), +('12', '14', '18', '1651', '1039', '0'), +('12', '14', '18', '4410', '742', '0'), +('12', '14', '18', '1230', '494', '0'), +('12', '14', '18', '1221', '454', '0'), +('12', '14', '19', '68239', '1628', '0'), +('12', '14', '19', '1652', '1234', '0'), +('12', '14', '19', '1368', '1216', '0'), +('12', '14', '19', '4407', '973', '0'), +('12', '14', '13', '20656', '4138', '0'), +('12', '14', '13', '14337', '4116', '0'), +('12', '14', '13', '9690', '2700', '0'), +('12', '14', '13', '13400', '2206', '0'), +('12', '14', '14', '20656', '4138', '0'), +('12', '14', '14', '10219', '3681', '0'), +('12', '14', '14', '9690', '2700', '0'), +('12', '14', '14', '11625', '2142', '0'), +('12', '14', '11', '13353', '1500', '0'), +('12', '14', '11', '14762', '1404', '0'), +('12', '14', '11', '9246', '1027', '0'), +('12', '14', '11', '20677', '450', '0'), +('12', '15', '22', '10323', '0', '0'), +('12', '15', '22', '9246', '0', '0'), +('12', '15', '22', '21509', '0', '0'), +('12', '15', '22', '8007', '0', '0'), +('12', '15', '1', '14702', '2350', '0'), +('12', '15', '1', '30361', '2040', '0'), +('12', '15', '1', '14701', '1862', '0'), +('12', '15', '1', '10082', '749', '0'), +('12', '15', '2', '10143', '3368', '0'), +('12', '15', '2', '1271', '3112', '0'), +('12', '15', '2', '30363', '2700', '0'), +('12', '15', '2', '1225', '1809', '0'), +('12', '15', '3', '11052', '1631', '0'), +('12', '15', '3', '1272', '1562', '0'), +('12', '15', '3', '1212', '1027', '0'), +('12', '15', '3', '14705', '990', '0'), +('12', '15', '5', '14703', '3850', '0'), +('12', '15', '5', '27710', '3574', '0'), +('12', '15', '5', '14556', '3018', '0'), +('12', '15', '5', '30362', '2340', '0'), +('12', '15', '8', '11603', '6289', '0'), +('12', '15', '8', '2349', '2154', '0'), +('12', '15', '8', '1216', '1040', '0'), +('12', '15', '8', '11621', '1021', '0'), +('12', '15', '6', '1557', '5310', '0'), +('12', '15', '6', '1542', '3150', '0'), +('12', '15', '6', '1905', '3048', '0'), +('12', '15', '6', '1273', '1924', '0'), +('12', '15', '17', '1253', '6085', '0'), +('12', '15', '17', '1644', '5710', '0'), +('12', '15', '17', '11641', '5212', '0'), +('12', '15', '17', '1214', '3632', '0'), +('12', '15', '7', '1362', '1624', '0'), +('12', '15', '7', '1227', '1285', '0'), +('12', '15', '7', '1218', '1205', '0'), +('12', '15', '7', '1648', '1168', '0'), +('12', '15', '9', '12803', '2962', '0'), +('12', '15', '9', '4344', '1251', '0'), +('12', '15', '9', '1649', '1244', '0'), +('12', '15', '9', '10408', '1202', '0'), +('12', '15', '15', '11686', '3577', '0'), +('12', '15', '15', '10150', '1804', '0'), +('12', '15', '15', '10163', '1500', '0'), +('12', '15', '15', '14651', '1424', '0'), +('12', '15', '20', '11666', '5312', '0'), +('12', '15', '20', '2742', '3103', '0'), +('12', '15', '20', '1217', '1035', '0'), +('12', '15', '20', '1647', '934', '0'), +('12', '15', '12', '2923', '2074', '0'), +('12', '15', '12', '20655', '2026', '0'), +('12', '15', '12', '1229', '1992', '0'), +('12', '15', '12', '1404', '1512', '0'), +('12', '15', '18', '1651', '1061', '0'), +('12', '15', '18', '4410', '742', '0'), +('12', '15', '18', '1230', '495', '0'), +('12', '15', '18', '1221', '454', '0'), +('12', '15', '19', '68239', '1650', '0'), +('12', '15', '19', '1652', '1234', '0'), +('12', '15', '19', '1368', '1216', '0'), +('12', '15', '19', '4407', '1039', '0'), +('12', '15', '13', '14337', '4188', '0'), +('12', '15', '13', '20656', '4174', '0'), +('12', '15', '13', '9690', '2700', '0'), +('12', '15', '13', '13400', '2235', '0'), +('12', '15', '14', '20656', '4174', '0'), +('12', '15', '14', '10219', '3681', '0'), +('12', '15', '14', '9690', '2700', '0'), +('12', '15', '14', '11625', '2145', '0'), +('12', '15', '11', '13353', '1500', '0'), +('12', '15', '11', '14762', '1404', '0'), +('12', '15', '11', '9246', '1099', '0'), +('12', '15', '11', '20677', '450', '0'), +('12', '16', '22', '10323', '0', '0'), +('12', '16', '22', '9246', '0', '0'), +('12', '16', '22', '21509', '0', '0'), +('12', '16', '22', '8007', '0', '0'), +('12', '16', '1', '14702', '2350', '0'), +('12', '16', '1', '30361', '2040', '0'), +('12', '16', '1', '14701', '1862', '0'), +('12', '16', '1', '10082', '792', '0'), +('12', '16', '2', '10143', '3368', '0'), +('12', '16', '2', '1271', '3170', '0'), +('12', '16', '2', '30363', '2700', '0'), +('12', '16', '2', '1225', '1861', '0'), +('12', '16', '3', '11052', '1740', '0'), +('12', '16', '3', '1272', '1627', '0'), +('12', '16', '3', '1212', '1034', '0'), +('12', '16', '3', '14705', '990', '0'), +('12', '16', '5', '14703', '3850', '0'), +('12', '16', '5', '27710', '3610', '0'), +('12', '16', '5', '14556', '3018', '0'), +('12', '16', '5', '30362', '2340', '0'), +('12', '16', '8', '11603', '6354', '0'), +('12', '16', '8', '2349', '2154', '0'), +('12', '16', '8', '1216', '1047', '0'), +('12', '16', '8', '11621', '1021', '0'), +('12', '16', '6', '1557', '5310', '0'), +('12', '16', '6', '1542', '3215', '0'), +('12', '16', '6', '1905', '3050', '0'), +('12', '16', '6', '1273', '1960', '0'), +('12', '16', '17', '1253', '6087', '0'), +('12', '16', '17', '1644', '5746', '0'), +('12', '16', '17', '11641', '5321', '0'), +('12', '16', '17', '1214', '3730', '0'), +('12', '16', '7', '1362', '1624', '0'), +('12', '16', '7', '1227', '1336', '0'), +('12', '16', '7', '1218', '1256', '0'), +('12', '16', '7', '1648', '1204', '0'), +('12', '16', '9', '12803', '2926', '0'), +('12', '16', '9', '1649', '1266', '0'), +('12', '16', '9', '4344', '1251', '0'), +('12', '16', '9', '10408', '1202', '0'), +('12', '16', '15', '11686', '3614', '0'), +('12', '16', '15', '10150', '1804', '0'), +('12', '16', '15', '10163', '1500', '0'), +('12', '16', '15', '14651', '1424', '0'), +('12', '16', '20', '11666', '5314', '0'), +('12', '16', '20', '2742', '3105', '0'), +('12', '16', '20', '1217', '1043', '0'), +('12', '16', '20', '1647', '934', '0'), +('12', '16', '12', '2923', '2074', '0'), +('12', '16', '12', '1229', '2043', '0'), +('12', '16', '12', '20655', '2041', '0'), +('12', '16', '12', '1404', '1512', '0'), +('12', '16', '18', '1651', '1083', '0'), +('12', '16', '18', '4410', '742', '0'), +('12', '16', '18', '1230', '495', '0'), +('12', '16', '18', '1221', '454', '0'), +('12', '16', '19', '68239', '1671', '0'), +('12', '16', '19', '1652', '1234', '0'), +('12', '16', '19', '1368', '1216', '0'), +('12', '16', '19', '4407', '1104', '0'), +('12', '16', '13', '14337', '4261', '0'), +('12', '16', '13', '20656', '4210', '0'), +('12', '16', '13', '9690', '2700', '0'), +('12', '16', '13', '13400', '2264', '0'), +('12', '16', '14', '20656', '4210', '0'), +('12', '16', '14', '10219', '3681', '0'), +('12', '16', '14', '9690', '2700', '0'), +('12', '16', '14', '11625', '2147', '0'), +('12', '16', '11', '13353', '1500', '0'), +('12', '16', '11', '14762', '1404', '0'), +('12', '16', '11', '9246', '1172', '0'), +('12', '16', '11', '20677', '450', '0'), +('12', '17', '22', '10323', '0', '0'), +('12', '17', '22', '9246', '0', '0'), +('12', '17', '22', '21509', '0', '0'), +('12', '17', '22', '8007', '0', '0'), +('12', '17', '1', '14702', '2350', '0'), +('12', '17', '1', '30361', '2040', '0'), +('12', '17', '1', '14701', '1862', '0'), +('12', '17', '1', '10082', '836', '0'), +('12', '17', '2', '10143', '3368', '0'), +('12', '17', '2', '1271', '3228', '0'), +('12', '17', '2', '30363', '2700', '0'), +('12', '17', '2', '1225', '1913', '0'), +('12', '17', '3', '11052', '1848', '0'), +('12', '17', '3', '1272', '1692', '0'), +('12', '17', '3', '1212', '1041', '0'), +('12', '17', '3', '14705', '990', '0'), +('12', '17', '5', '14703', '3850', '0'), +('12', '17', '5', '27710', '3646', '0'), +('12', '17', '5', '14556', '3018', '0'), +('12', '17', '5', '30362', '2340', '0'), +('12', '17', '8', '11603', '6419', '0'), +('12', '17', '8', '2349', '2154', '0'), +('12', '17', '8', '1216', '1055', '0'), +('12', '17', '8', '11621', '1021', '0'), +('12', '17', '6', '1557', '5310', '0'), +('12', '17', '6', '1542', '3280', '0'), +('12', '17', '6', '1905', '3051', '0'), +('12', '17', '6', '1273', '1996', '0'), +('12', '17', '17', '1253', '6089', '0'), +('12', '17', '17', '1644', '5783', '0'), +('12', '17', '17', '11641', '5430', '0'), +('12', '17', '17', '1214', '3827', '0'), +('12', '17', '7', '1362', '1624', '0'), +('12', '17', '7', '1227', '1387', '0'), +('12', '17', '7', '1218', '1307', '0'), +('12', '17', '7', '1648', '1240', '0'), +('12', '17', '9', '12803', '2890', '0'), +('12', '17', '9', '1649', '1288', '0'), +('12', '17', '9', '4344', '1251', '0'), +('12', '17', '9', '10408', '1202', '0'), +('12', '17', '15', '11686', '3650', '0'), +('12', '17', '15', '10150', '1804', '0'), +('12', '17', '15', '10163', '1500', '0'), +('12', '17', '15', '14651', '1424', '0'), +('12', '17', '20', '11666', '5316', '0'), +('12', '17', '20', '2742', '3108', '0'), +('12', '17', '20', '1217', '1050', '0'), +('12', '17', '20', '1647', '934', '0'), +('12', '17', '12', '1229', '2094', '0'), +('12', '17', '12', '2923', '2074', '0'), +('12', '17', '12', '20655', '2056', '0'), +('12', '17', '12', '1404', '1512', '0'), +('12', '17', '18', '1651', '1105', '0'), +('12', '17', '18', '4410', '742', '0'), +('12', '17', '18', '1230', '496', '0'), +('12', '17', '18', '1221', '454', '0'), +('12', '17', '19', '68239', '1693', '0'), +('12', '17', '19', '1652', '1234', '0'), +('12', '17', '19', '1368', '1216', '0'), +('12', '17', '19', '4407', '1169', '0'), +('12', '17', '13', '14337', '4333', '0'), +('12', '17', '13', '20656', '4246', '0'), +('12', '17', '13', '9690', '2700', '0'), +('12', '17', '13', '13400', '2293', '0'), +('12', '17', '14', '20656', '4246', '0'), +('12', '17', '14', '10219', '3681', '0'), +('12', '17', '14', '9690', '2700', '0'), +('12', '17', '14', '11625', '2149', '0'), +('12', '17', '11', '13353', '1500', '0'), +('12', '17', '11', '14762', '1404', '0'), +('12', '17', '11', '9246', '1244', '0'), +('12', '17', '11', '20677', '450', '0'), +('12', '18', '22', '10323', '0', '0'), +('12', '18', '22', '9246', '0', '0'), +('12', '18', '22', '21509', '0', '0'), +('12', '18', '22', '8007', '0', '0'), +('12', '18', '1', '14702', '2350', '0'), +('12', '18', '1', '30361', '2040', '0'), +('12', '18', '1', '14701', '1862', '0'), +('12', '18', '1', '10082', '879', '0'), +('12', '18', '2', '10143', '3368', '0'), +('12', '18', '2', '1271', '3286', '0'), +('12', '18', '2', '30363', '2700', '0'), +('12', '18', '2', '1225', '1965', '0'), +('12', '18', '3', '11052', '1957', '0'), +('12', '18', '3', '1272', '1758', '0'), +('12', '18', '3', '1212', '1049', '0'), +('12', '18', '3', '14706', '990', '0'), +('12', '18', '5', '14703', '3850', '0'), +('12', '18', '5', '27710', '3683', '0'), +('12', '18', '5', '14556', '3018', '0'), +('12', '18', '5', '30362', '2340', '0'), +('12', '18', '8', '11603', '6485', '0'), +('12', '18', '8', '2349', '2154', '0'), +('12', '18', '8', '1216', '1062', '0'), +('12', '18', '8', '11621', '1021', '0'), +('12', '18', '6', '1557', '5310', '0'), +('12', '18', '6', '1542', '3345', '0'), +('12', '18', '6', '1905', '3052', '0'), +('12', '18', '6', '1273', '2033', '0'), +('12', '18', '17', '1253', '6092', '0'), +('12', '18', '17', '1644', '5819', '0'), +('12', '18', '17', '11641', '5539', '0'), +('12', '18', '17', '1214', '3924', '0'), +('12', '18', '7', '1362', '1624', '0'), +('12', '18', '7', '1227', '1437', '0'), +('12', '18', '7', '1218', '1357', '0'), +('12', '18', '7', '1648', '1276', '0'), +('12', '18', '9', '12803', '2854', '0'), +('12', '18', '9', '1649', '1310', '0'), +('12', '18', '9', '4344', '1251', '0'), +('12', '18', '9', '10408', '1202', '0'), +('12', '18', '15', '11686', '3686', '0'), +('12', '18', '15', '10150', '1804', '0'), +('12', '18', '15', '10163', '1500', '0'), +('12', '18', '15', '14651', '1424', '0'), +('12', '18', '20', '11666', '5317', '0'), +('12', '18', '20', '2742', '3110', '0'), +('12', '18', '20', '1217', '1057', '0'), +('12', '18', '20', '1647', '934', '0'), +('12', '18', '12', '1229', '2145', '0'), +('12', '18', '12', '2923', '2074', '0'), +('12', '18', '12', '20655', '2071', '0'), +('12', '18', '12', '1404', '1512', '0'), +('12', '18', '18', '1651', '1126', '0'), +('12', '18', '18', '4410', '742', '0'), +('12', '18', '18', '1230', '497', '0'), +('12', '18', '18', '1221', '454', '0'), +('12', '18', '19', '68239', '1715', '0'), +('12', '18', '19', '1652', '1234', '0'), +('12', '18', '19', '4407', '1234', '0'), +('12', '18', '19', '1368', '1216', '0'), +('12', '18', '13', '14337', '4406', '0'), +('12', '18', '13', '20656', '4283', '0'), +('12', '18', '13', '9690', '2700', '0'), +('12', '18', '13', '13400', '2322', '0'), +('12', '18', '14', '20656', '4283', '0'), +('12', '18', '14', '10219', '3681', '0'), +('12', '18', '14', '9690', '2700', '0'), +('12', '18', '14', '6359', '2158', '0'), +('12', '18', '11', '13353', '1500', '0'), +('12', '18', '11', '14762', '1404', '0'), +('12', '18', '11', '9246', '1317', '0'), +('12', '18', '11', '20677', '450', '0'), +('12', '19', '22', '10323', '0', '0'), +('12', '19', '22', '9246', '0', '0'), +('12', '19', '22', '21509', '0', '0'), +('12', '19', '22', '8007', '0', '0'), +('12', '19', '1', '14702', '2350', '0'), +('12', '19', '1', '30361', '2040', '0'), +('12', '19', '1', '14701', '1862', '0'), +('12', '19', '1', '10082', '923', '0'), +('12', '19', '2', '10143', '3368', '0'), +('12', '19', '2', '1271', '3344', '0'), +('12', '19', '2', '30363', '2700', '0'), +('12', '19', '2', '1225', '2017', '0'), +('12', '19', '3', '11052', '2066', '0'), +('12', '19', '3', '1272', '1823', '0'), +('12', '19', '3', '1212', '1056', '0'), +('12', '19', '3', '4505', '994', '0'), +('12', '19', '5', '14703', '3850', '0'), +('12', '19', '5', '27710', '3719', '0'), +('12', '19', '5', '14556', '3018', '0'), +('12', '19', '5', '30362', '2340', '0'), +('12', '19', '8', '11603', '6550', '0'), +('12', '19', '8', '2349', '2154', '0'), +('12', '19', '8', '1216', '1069', '0'), +('12', '19', '8', '11621', '1021', '0'), +('12', '19', '6', '1557', '5310', '0'), +('12', '19', '6', '1542', '3411', '0'), +('12', '19', '6', '1905', '3053', '0'), +('12', '19', '6', '1273', '2069', '0'), +('12', '19', '17', '1253', '6094', '0'), +('12', '19', '17', '1644', '5855', '0'), +('12', '19', '17', '11641', '5647', '0'), +('12', '19', '17', '1214', '4022', '0'), +('12', '19', '7', '1362', '1624', '0'), +('12', '19', '7', '1227', '1488', '0'), +('12', '19', '7', '1218', '1408', '0'), +('12', '19', '7', '1648', '1313', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '19', '9', '12803', '2817', '0'), +('12', '19', '9', '1649', '1331', '0'), +('12', '19', '9', '4344', '1251', '0'), +('12', '19', '9', '10408', '1202', '0'), +('12', '19', '15', '11686', '3722', '0'), +('12', '19', '15', '10150', '1804', '0'), +('12', '19', '15', '10163', '1500', '0'), +('12', '19', '15', '14651', '1424', '0'), +('12', '19', '20', '11666', '5319', '0'), +('12', '19', '20', '2742', '3112', '0'), +('12', '19', '20', '1217', '1064', '0'), +('12', '19', '20', '1647', '934', '0'), +('12', '19', '12', '1229', '2195', '0'), +('12', '19', '12', '20655', '2086', '0'), +('12', '19', '12', '2923', '2074', '0'), +('12', '19', '12', '1404', '1512', '0'), +('12', '19', '18', '1651', '1148', '0'), +('12', '19', '18', '4410', '742', '0'), +('12', '19', '18', '1230', '498', '0'), +('12', '19', '18', '1221', '454', '0'), +('12', '19', '19', '68239', '1737', '0'), +('12', '19', '19', '4407', '1300', '0'), +('12', '19', '19', '1652', '1234', '0'), +('12', '19', '19', '1368', '1216', '0'), +('12', '19', '13', '14337', '4478', '0'), +('12', '19', '13', '20656', '4319', '0'), +('12', '19', '13', '9690', '2700', '0'), +('12', '19', '13', '13400', '2351', '0'), +('12', '19', '14', '20656', '4319', '0'), +('12', '19', '14', '10219', '3681', '0'), +('12', '19', '14', '9690', '2700', '0'), +('12', '19', '14', '6359', '2230', '0'), +('12', '19', '11', '13353', '1500', '0'), +('12', '19', '11', '14762', '1404', '0'), +('12', '19', '11', '9246', '1389', '0'), +('12', '19', '11', '20677', '450', '0'), +('12', '20', '22', '10323', '0', '0'), +('12', '20', '22', '9246', '0', '0'), +('12', '20', '22', '21509', '0', '0'), +('12', '20', '22', '8007', '0', '0'), +('12', '20', '1', '14702', '2350', '0'), +('12', '20', '1', '30361', '2040', '0'), +('12', '20', '1', '14701', '1862', '0'), +('12', '20', '1', '10082', '966', '0'), +('12', '20', '2', '1271', '3402', '0'), +('12', '20', '2', '10143', '3368', '0'), +('12', '20', '2', '30363', '2700', '0'), +('12', '20', '2', '1225', '2069', '0'), +('12', '20', '3', '11052', '2174', '0'), +('12', '20', '3', '1272', '1888', '0'), +('12', '20', '3', '1212', '1063', '0'), +('12', '20', '3', '4505', '1045', '0'), +('12', '20', '5', '14703', '3850', '0'), +('12', '20', '5', '27710', '3755', '0'), +('12', '20', '5', '14556', '3018', '0'), +('12', '20', '5', '30362', '2340', '0'), +('12', '20', '8', '11603', '6615', '0'), +('12', '20', '8', '2349', '2154', '0'), +('12', '20', '8', '1216', '1076', '0'), +('12', '20', '8', '11621', '1021', '0'), +('12', '20', '6', '1557', '5310', '0'), +('12', '20', '6', '1542', '3476', '0'), +('12', '20', '6', '1905', '3054', '0'), +('12', '20', '6', '1273', '2105', '0'), +('12', '20', '17', '1253', '6097', '0'), +('12', '20', '17', '1644', '5891', '0'), +('12', '20', '17', '11641', '5756', '0'), +('12', '20', '17', '1214', '4119', '0'), +('12', '20', '7', '1362', '1624', '0'), +('12', '20', '7', '1227', '1539', '0'), +('12', '20', '7', '1218', '1459', '0'), +('12', '20', '7', '1648', '1349', '0'), +('12', '20', '9', '12803', '2781', '0'), +('12', '20', '9', '1649', '1353', '0'), +('12', '20', '9', '4344', '1251', '0'), +('12', '20', '9', '10408', '1202', '0'), +('12', '20', '15', '11686', '3759', '0'), +('12', '20', '15', '10150', '1804', '0'), +('12', '20', '15', '10163', '1500', '0'), +('12', '20', '15', '14651', '1424', '0'), +('12', '20', '20', '11666', '5321', '0'), +('12', '20', '20', '2742', '3115', '0'), +('12', '20', '20', '1217', '1072', '0'), +('12', '20', '20', '1647', '934', '0'), +('12', '20', '12', '1229', '2246', '0'), +('12', '20', '12', '20655', '2101', '0'), +('12', '20', '12', '2923', '2074', '0'), +('12', '20', '12', '1404', '1512', '0'), +('12', '20', '18', '1651', '1170', '0'), +('12', '20', '18', '4410', '742', '0'), +('12', '20', '18', '1230', '498', '0'), +('12', '20', '18', '1221', '454', '0'), +('12', '20', '19', '68239', '1758', '0'), +('12', '20', '19', '4407', '1365', '0'), +('12', '20', '19', '1652', '1234', '0'), +('12', '20', '19', '1368', '1216', '0'), +('12', '20', '13', '14337', '4551', '0'), +('12', '20', '13', '20656', '4355', '0'), +('12', '20', '13', '9690', '2700', '0'), +('12', '20', '13', '13400', '2380', '0'), +('12', '20', '14', '20656', '4355', '0'), +('12', '20', '14', '10219', '3681', '0'), +('12', '20', '14', '9690', '2700', '0'), +('12', '20', '14', '6359', '2303', '0'), +('12', '20', '11', '13353', '1500', '0'), +('12', '20', '11', '9246', '1462', '0'), +('12', '20', '11', '14762', '1404', '0'), +('12', '20', '11', '20677', '450', '0'), +('12', '21', '22', '10323', '0', '0'), +('12', '21', '22', '9246', '0', '0'), +('12', '21', '22', '21509', '0', '0'), +('12', '21', '22', '8007', '0', '0'), +('12', '21', '1', '14702', '2350', '0'), +('12', '21', '1', '30361', '2040', '0'), +('12', '21', '1', '14701', '1862', '0'), +('12', '21', '1', '10082', '1009', '0'), +('12', '21', '2', '1271', '3460', '0'), +('12', '21', '2', '10143', '3368', '0'), +('12', '21', '2', '30363', '2700', '0'), +('12', '21', '2', '1225', '2121', '0'), +('12', '21', '3', '11052', '2283', '0'), +('12', '21', '3', '1272', '1953', '0'), +('12', '21', '3', '4505', '1096', '0'), +('12', '21', '3', '1212', '1070', '0'), +('12', '21', '5', '14703', '3850', '0'), +('12', '21', '5', '27710', '3791', '0'), +('12', '21', '5', '14556', '3018', '0'), +('12', '21', '5', '30362', '2340', '0'), +('12', '21', '8', '11603', '6680', '0'), +('12', '21', '8', '2349', '2154', '0'), +('12', '21', '8', '1216', '1084', '0'), +('12', '21', '8', '11621', '1021', '0'), +('12', '21', '6', '1557', '5310', '0'), +('12', '21', '6', '1542', '3541', '0'), +('12', '21', '6', '1905', '3056', '0'), +('12', '21', '6', '1273', '2141', '0'), +('12', '21', '17', '1253', '6099', '0'), +('12', '21', '17', '1644', '5927', '0'), +('12', '21', '17', '11641', '5865', '0'), +('12', '21', '17', '1214', '4217', '0'), +('12', '21', '7', '1362', '1624', '0'), +('12', '21', '7', '1227', '1590', '0'), +('12', '21', '7', '1218', '1510', '0'), +('12', '21', '7', '1648', '1385', '0'), +('12', '21', '9', '12803', '2745', '0'), +('12', '21', '9', '1649', '1375', '0'), +('12', '21', '9', '4344', '1251', '0'), +('12', '21', '9', '10408', '1202', '0'), +('12', '21', '15', '11686', '3795', '0'), +('12', '21', '15', '10150', '1804', '0'), +('12', '21', '15', '10163', '1500', '0'), +('12', '21', '15', '14651', '1424', '0'), +('12', '21', '20', '11666', '5322', '0'), +('12', '21', '20', '2742', '3117', '0'), +('12', '21', '20', '1217', '1079', '0'), +('12', '21', '20', '1647', '934', '0'), +('12', '21', '12', '1229', '2297', '0'), +('12', '21', '12', '20655', '2116', '0'), +('12', '21', '12', '2923', '2074', '0'), +('12', '21', '12', '1404', '1512', '0'), +('12', '21', '18', '1651', '1192', '0'), +('12', '21', '18', '4410', '742', '0'), +('12', '21', '18', '1230', '499', '0'), +('12', '21', '18', '1221', '454', '0'), +('12', '21', '19', '68239', '1780', '0'), +('12', '21', '19', '4407', '1430', '0'), +('12', '21', '19', '1652', '1234', '0'), +('12', '21', '19', '1368', '1216', '0'), +('12', '21', '13', '14337', '4623', '0'), +('12', '21', '13', '20656', '4391', '0'), +('12', '21', '13', '9690', '2700', '0'), +('12', '21', '13', '13400', '2409', '0'), +('12', '21', '14', '20656', '4391', '0'), +('12', '21', '14', '10219', '3681', '0'), +('12', '21', '14', '9690', '2700', '0'), +('12', '21', '14', '6359', '2375', '0'), +('12', '21', '11', '9246', '1534', '0'), +('12', '21', '11', '13353', '1500', '0'), +('12', '21', '11', '14762', '1404', '0'), +('12', '21', '11', '20677', '450', '0'), +('12', '22', '22', '10323', '0', '0'), +('12', '22', '22', '9246', '0', '0'), +('12', '22', '22', '21509', '0', '0'), +('12', '22', '22', '8007', '0', '0'), +('12', '22', '1', '14702', '2350', '0'), +('12', '22', '1', '30361', '2040', '0'), +('12', '22', '1', '14701', '1862', '0'), +('12', '22', '1', '10082', '1053', '0'), +('12', '22', '2', '1271', '3518', '0'), +('12', '22', '2', '10143', '3368', '0'), +('12', '22', '2', '30363', '2700', '0'), +('12', '22', '2', '1225', '2173', '0'), +('12', '22', '3', '11052', '2392', '0'), +('12', '22', '3', '1272', '2019', '0'), +('12', '22', '3', '4505', '1146', '0'), +('12', '22', '3', '1212', '1078', '0'), +('12', '22', '5', '14703', '3850', '0'), +('12', '22', '5', '27710', '3827', '0'), +('12', '22', '5', '14556', '3018', '0'), +('12', '22', '5', '30362', '2340', '0'), +('12', '22', '8', '11603', '6746', '0'), +('12', '22', '8', '2349', '2154', '0'), +('12', '22', '8', '1216', '1091', '0'), +('12', '22', '8', '11621', '1021', '0'), +('12', '22', '6', '1557', '5310', '0'), +('12', '22', '6', '1542', '3606', '0'), +('12', '22', '6', '1905', '3057', '0'), +('12', '22', '6', '1273', '2177', '0'), +('12', '22', '17', '1253', '6101', '0'), +('12', '22', '17', '11641', '5973', '0'), +('12', '22', '17', '1644', '5964', '0'), +('12', '22', '17', '1214', '4314', '0'), +('12', '22', '7', '1227', '1640', '0'), +('12', '22', '7', '1362', '1624', '0'), +('12', '22', '7', '1218', '1560', '0'), +('12', '22', '7', '1648', '1421', '0'), +('12', '22', '9', '12803', '2709', '0'), +('12', '22', '9', '1649', '1396', '0'), +('12', '22', '9', '4344', '1251', '0'), +('12', '22', '9', '10408', '1202', '0'), +('12', '22', '15', '11686', '3831', '0'), +('12', '22', '15', '10150', '1804', '0'), +('12', '22', '15', '10163', '1500', '0'), +('12', '22', '15', '14651', '1424', '0'), +('12', '22', '20', '11666', '5324', '0'), +('12', '22', '20', '2742', '3120', '0'), +('12', '22', '20', '1217', '1086', '0'), +('12', '22', '20', '1647', '934', '0'), +('12', '22', '12', '1229', '2348', '0'), +('12', '22', '12', '20655', '2131', '0'), +('12', '22', '12', '2923', '2074', '0'), +('12', '22', '12', '1404', '1512', '0'), +('12', '22', '18', '1651', '1213', '0'), +('12', '22', '18', '4410', '742', '0'), +('12', '22', '18', '1230', '500', '0'), +('12', '22', '18', '1221', '454', '0'), +('12', '22', '19', '68239', '1802', '0'), +('12', '22', '19', '4407', '1495', '0'), +('12', '22', '19', '1652', '1234', '0'), +('12', '22', '19', '1368', '1216', '0'), +('12', '22', '13', '14337', '4696', '0'), +('12', '22', '13', '20656', '4427', '0'), +('12', '22', '13', '9690', '2700', '0'), +('12', '22', '13', '6359', '2448', '0'), +('12', '22', '14', '20656', '4427', '0'), +('12', '22', '14', '10219', '3681', '0'), +('12', '22', '14', '9690', '2700', '0'), +('12', '22', '14', '6359', '2448', '0'), +('12', '22', '11', '9246', '1607', '0'), +('12', '22', '11', '13353', '1500', '0'), +('12', '22', '11', '14762', '1404', '0'), +('12', '22', '11', '20677', '450', '0'), +('12', '23', '22', '10323', '0', '0'), +('12', '23', '22', '9246', '0', '0'), +('12', '23', '22', '21509', '0', '0'), +('12', '23', '22', '8007', '0', '0'), +('12', '23', '1', '14702', '2350', '0'), +('12', '23', '1', '30361', '2040', '0'), +('12', '23', '1', '14701', '1862', '0'), +('12', '23', '1', '10082', '1096', '0'), +('12', '23', '2', '1271', '3576', '0'), +('12', '23', '2', '10143', '3368', '0'), +('12', '23', '2', '30363', '2700', '0'), +('12', '23', '2', '1225', '2225', '0'), +('12', '23', '3', '11052', '2501', '0'), +('12', '23', '3', '1272', '2084', '0'), +('12', '23', '3', '4505', '1197', '0'), +('12', '23', '3', '1212', '1085', '0'), +('12', '23', '5', '27710', '3864', '0'), +('12', '23', '5', '14703', '3850', '0'), +('12', '23', '5', '14556', '3018', '0'), +('12', '23', '5', '30362', '2340', '0'), +('12', '23', '8', '11603', '6811', '0'), +('12', '23', '8', '2349', '2154', '0'), +('12', '23', '8', '1216', '1098', '0'), +('12', '23', '8', '1057', '1032', '0'), +('12', '23', '6', '1557', '5310', '0'), +('12', '23', '6', '1542', '3672', '0'), +('12', '23', '6', '1905', '3058', '0'), +('12', '23', '6', '1273', '2214', '0'), +('12', '23', '17', '1253', '6104', '0'), +('12', '23', '17', '11641', '6082', '0'), +('12', '23', '17', '1644', '6000', '0'), +('12', '23', '17', '1214', '4411', '0'), +('12', '23', '7', '1227', '1691', '0'), +('12', '23', '7', '1362', '1624', '0'), +('12', '23', '7', '1218', '1611', '0'), +('12', '23', '7', '1648', '1458', '0'), +('12', '23', '9', '12803', '2673', '0'), +('12', '23', '9', '1649', '1418', '0'), +('12', '23', '9', '4344', '1251', '0'), +('12', '23', '9', '10408', '1202', '0'), +('12', '23', '15', '11686', '3867', '0'), +('12', '23', '15', '10150', '1804', '0'), +('12', '23', '15', '10163', '1500', '0'), +('12', '23', '15', '14651', '1424', '0'), +('12', '23', '20', '11666', '5326', '0'), +('12', '23', '20', '2742', '3122', '0'), +('12', '23', '20', '1217', '1093', '0'), +('12', '23', '20', '1647', '934', '0'), +('12', '23', '12', '1229', '2398', '0'), +('12', '23', '12', '20655', '2146', '0'), +('12', '23', '12', '2923', '2074', '0'), +('12', '23', '12', '1404', '1512', '0'), +('12', '23', '18', '1651', '1235', '0'), +('12', '23', '18', '4410', '742', '0'), +('12', '23', '18', '1230', '500', '0'), +('12', '23', '18', '1221', '454', '0'), +('12', '23', '19', '68239', '1824', '0'), +('12', '23', '19', '4407', '1561', '0'), +('12', '23', '19', '1652', '1234', '0'), +('12', '23', '19', '1368', '1216', '0'), +('12', '23', '13', '14337', '4768', '0'), +('12', '23', '13', '20656', '4464', '0'), +('12', '23', '13', '9690', '2700', '0'), +('12', '23', '13', '6359', '2520', '0'), +('12', '23', '14', '20656', '4464', '0'), +('12', '23', '14', '10219', '3681', '0'), +('12', '23', '14', '9690', '2700', '0'), +('12', '23', '14', '6359', '2520', '0'), +('12', '23', '11', '9246', '1679', '0'), +('12', '23', '11', '13353', '1500', '0'), +('12', '23', '11', '14762', '1404', '0'), +('12', '23', '11', '20677', '450', '0'), +('12', '24', '22', '10323', '0', '0'), +('12', '24', '22', '9246', '0', '0'), +('12', '24', '22', '21509', '0', '0'), +('12', '24', '22', '8007', '0', '0'), +('12', '24', '1', '14702', '2350', '0'), +('12', '24', '1', '30361', '2040', '0'), +('12', '24', '1', '14701', '1862', '0'), +('12', '24', '1', '10082', '1140', '0'), +('12', '24', '2', '1271', '3634', '0'), +('12', '24', '2', '10143', '3368', '0'), +('12', '24', '2', '30363', '2700', '0'), +('12', '24', '2', '1225', '2277', '0'), +('12', '24', '3', '11052', '2609', '0'), +('12', '24', '3', '1272', '2149', '0'), +('12', '24', '3', '4505', '1248', '0'), +('12', '24', '3', '1212', '1092', '0'), +('12', '24', '5', '27710', '3900', '0'), +('12', '24', '5', '14703', '3850', '0'), +('12', '24', '5', '14556', '3018', '0'), +('12', '24', '5', '30362', '2340', '0'), +('12', '24', '8', '11603', '6876', '0'), +('12', '24', '8', '2349', '2154', '0'), +('12', '24', '8', '1216', '1105', '0'), +('12', '24', '8', '1057', '1068', '0'), +('12', '24', '6', '1557', '5310', '0'), +('12', '24', '6', '1542', '3737', '0'), +('12', '24', '6', '1905', '3059', '0'), +('12', '24', '6', '1273', '2250', '0'), +('12', '24', '17', '11641', '6191', '0'), +('12', '24', '17', '1253', '6106', '0'), +('12', '24', '17', '1644', '6036', '0'), +('12', '24', '17', '1214', '4509', '0'), +('12', '24', '7', '1227', '1742', '0'), +('12', '24', '7', '1218', '1662', '0'), +('12', '24', '7', '1362', '1624', '0'), +('12', '24', '7', '1648', '1494', '0'), +('12', '24', '9', '12803', '2636', '0'), +('12', '24', '9', '1649', '1440', '0'), +('12', '24', '9', '4344', '1251', '0'), +('12', '24', '9', '10408', '1202', '0'), +('12', '24', '15', '11686', '3904', '0'), +('12', '24', '15', '10150', '1804', '0'), +('12', '24', '15', '10163', '1500', '0'), +('12', '24', '15', '14651', '1424', '0'), +('12', '24', '20', '11666', '5327', '0'), +('12', '24', '20', '2742', '3124', '0'), +('12', '24', '20', '1217', '1101', '0'), +('12', '24', '20', '1647', '934', '0'), +('12', '24', '12', '1229', '2449', '0'), +('12', '24', '12', '20655', '2161', '0'), +('12', '24', '12', '2923', '2074', '0'), +('12', '24', '12', '1404', '1512', '0'), +('12', '24', '18', '1651', '1257', '0'), +('12', '24', '18', '4410', '742', '0'), +('12', '24', '18', '1230', '501', '0'), +('12', '24', '18', '1221', '454', '0'), +('12', '24', '19', '68239', '1845', '0'), +('12', '24', '19', '4407', '1626', '0'), +('12', '24', '19', '1652', '1234', '0'), +('12', '24', '19', '1368', '1216', '0'), +('12', '24', '13', '14337', '4841', '0'), +('12', '24', '13', '20656', '4500', '0'), +('12', '24', '13', '9690', '2700', '0'), +('12', '24', '13', '6359', '2593', '0'), +('12', '24', '14', '20656', '4500', '0'), +('12', '24', '14', '10219', '3681', '0'), +('12', '24', '14', '9690', '2700', '0'), +('12', '24', '14', '6359', '2593', '0'), +('12', '24', '11', '9246', '1752', '0'), +('12', '24', '11', '13353', '1500', '0'), +('12', '24', '11', '14762', '1404', '0'), +('12', '24', '11', '20677', '450', '0'), +('12', '25', '22', '10323', '0', '0'), +('12', '25', '22', '9246', '0', '0'), +('12', '25', '22', '21509', '0', '0'), +('12', '25', '22', '8007', '0', '0'), +('12', '25', '1', '14702', '2350', '0'), +('12', '25', '1', '30361', '2040', '0'), +('12', '25', '1', '14701', '1862', '0'), +('12', '25', '1', '10082', '1183', '0'), +('12', '25', '2', '1271', '3692', '0'), +('12', '25', '2', '10143', '3368', '0'), +('12', '25', '2', '30363', '2700', '0'), +('12', '25', '2', '1225', '2329', '0'), +('12', '25', '3', '11052', '2718', '0'), +('12', '25', '3', '1272', '2214', '0'), +('12', '25', '3', '4505', '1299', '0'), +('12', '25', '3', '1212', '1099', '0'), +('12', '25', '5', '27710', '3936', '0'), +('12', '25', '5', '14703', '3850', '0'), +('12', '25', '5', '14556', '3018', '0'), +('12', '25', '5', '30362', '2340', '0'), +('12', '25', '8', '11603', '6941', '0'), +('12', '25', '8', '2349', '2154', '0'), +('12', '25', '8', '1216', '1113', '0'), +('12', '25', '8', '1057', '1104', '0'), +('12', '25', '6', '1557', '5310', '0'), +('12', '25', '6', '1542', '3802', '0'), +('12', '25', '6', '1905', '3060', '0'), +('12', '25', '6', '1273', '2286', '0'), +('12', '25', '17', '11641', '6300', '0'), +('12', '25', '17', '1253', '6109', '0'), +('12', '25', '17', '1644', '6072', '0'), +('12', '25', '17', '1214', '4606', '0'), +('12', '25', '7', '1227', '1793', '0'), +('12', '25', '7', '1218', '1713', '0'), +('12', '25', '7', '1362', '1624', '0'), +('12', '25', '7', '1648', '1530', '0'), +('12', '25', '9', '12803', '2600', '0'), +('12', '25', '9', '1649', '1462', '0'), +('12', '25', '9', '4344', '1251', '0'), +('12', '25', '9', '10408', '1202', '0'), +('12', '25', '15', '11686', '3940', '0'), +('12', '25', '15', '10150', '1804', '0'), +('12', '25', '15', '10163', '1500', '0'), +('12', '25', '15', '14651', '1424', '0'), +('12', '25', '20', '11666', '5329', '0'), +('12', '25', '20', '2742', '3127', '0'), +('12', '25', '20', '1217', '1108', '0'), +('12', '25', '20', '1647', '934', '0'), +('12', '25', '12', '1229', '2500', '0'), +('12', '25', '12', '20655', '2176', '0'), +('12', '25', '12', '2923', '2074', '0'), +('12', '25', '12', '2336', '1518', '0'), +('12', '25', '18', '1651', '1279', '0'), +('12', '25', '18', '4410', '742', '0'), +('12', '25', '18', '1230', '502', '0'), +('12', '25', '18', '1221', '454', '0'), +('12', '25', '19', '68239', '1867', '0'), +('12', '25', '19', '4407', '1691', '0'), +('12', '25', '19', '1652', '1234', '0'), +('12', '25', '19', '1368', '1216', '0'), +('12', '25', '13', '14337', '4913', '0'), +('12', '25', '13', '20656', '4536', '0'), +('12', '25', '13', '9690', '2700', '0'), +('12', '25', '13', '6359', '2665', '0'), +('12', '25', '14', '20656', '4536', '0'), +('12', '25', '14', '10219', '3681', '0'), +('12', '25', '14', '9690', '2700', '0'), +('12', '25', '14', '6359', '2665', '0'), +('12', '25', '11', '9246', '1824', '0'), +('12', '25', '11', '13353', '1500', '0'), +('12', '25', '11', '14762', '1404', '0'), +('12', '25', '11', '20677', '450', '0'), +('12', '26', '22', '10323', '0', '0'), +('12', '26', '22', '9246', '0', '0'), +('12', '26', '22', '21509', '0', '0'), +('12', '26', '22', '8007', '0', '0'), +('12', '26', '1', '14702', '2350', '0'), +('12', '26', '1', '30361', '2040', '0'), +('12', '26', '1', '14701', '1862', '0'), +('12', '26', '1', '10082', '1227', '0'), +('12', '26', '2', '1271', '3750', '0'), +('12', '26', '2', '10143', '3368', '0'), +('12', '26', '2', '30363', '2700', '0'), +('12', '26', '2', '1225', '2381', '0'), +('12', '26', '3', '11052', '2827', '0'), +('12', '26', '3', '1272', '2280', '0'), +('12', '26', '3', '4505', '1349', '0'), +('12', '26', '3', '1212', '1107', '0'), +('12', '26', '5', '27710', '3972', '0'), +('12', '26', '5', '14703', '3850', '0'), +('12', '26', '5', '14556', '3018', '0'), +('12', '26', '5', '30362', '2340', '0'), +('12', '26', '8', '11603', '7006', '0'), +('12', '26', '8', '2349', '2154', '0'), +('12', '26', '8', '1057', '1141', '0'), +('12', '26', '8', '1216', '1120', '0'), +('12', '26', '6', '1557', '5310', '0'), +('12', '26', '6', '1542', '3867', '0'), +('12', '26', '6', '1905', '3062', '0'), +('12', '26', '6', '1273', '2322', '0'), +('12', '26', '17', '11641', '6408', '0'), +('12', '26', '17', '1253', '6111', '0'), +('12', '26', '17', '1644', '6109', '0'), +('12', '26', '17', '1214', '4703', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '26', '7', '1227', '1843', '0'), +('12', '26', '7', '1218', '1763', '0'), +('12', '26', '7', '1362', '1624', '0'), +('12', '26', '7', '1648', '1566', '0'), +('12', '26', '9', '12803', '2564', '0'), +('12', '26', '9', '1649', '1483', '0'), +('12', '26', '9', '4344', '1251', '0'), +('12', '26', '9', '10408', '1202', '0'), +('12', '26', '15', '11686', '3976', '0'), +('12', '26', '15', '10150', '1804', '0'), +('12', '26', '15', '10163', '1500', '0'), +('12', '26', '15', '14651', '1424', '0'), +('12', '26', '20', '11666', '5331', '0'), +('12', '26', '20', '2742', '3129', '0'), +('12', '26', '20', '1217', '1115', '0'), +('12', '26', '20', '1647', '934', '0'), +('12', '26', '12', '1229', '2551', '0'), +('12', '26', '12', '20655', '2191', '0'), +('12', '26', '12', '2923', '2074', '0'), +('12', '26', '12', '2336', '1554', '0'), +('12', '26', '18', '1651', '1300', '0'), +('12', '26', '18', '4410', '742', '0'), +('12', '26', '18', '1230', '503', '0'), +('12', '26', '18', '1221', '454', '0'), +('12', '26', '19', '68239', '1889', '0'), +('12', '26', '19', '4407', '1756', '0'), +('12', '26', '19', '1652', '1234', '0'), +('12', '26', '19', '1368', '1216', '0'), +('12', '26', '13', '14337', '4986', '0'), +('12', '26', '13', '20656', '4572', '0'), +('12', '26', '13', '6359', '2738', '0'), +('12', '26', '13', '9690', '2700', '0'), +('12', '26', '14', '20656', '4572', '0'), +('12', '26', '14', '10219', '3681', '0'), +('12', '26', '14', '6359', '2738', '0'), +('12', '26', '14', '9690', '2700', '0'), +('12', '26', '11', '9246', '1897', '0'), +('12', '26', '11', '13353', '1500', '0'), +('12', '26', '11', '14762', '1404', '0'), +('12', '26', '11', '20677', '450', '0'), +('12', '27', '22', '10323', '0', '0'), +('12', '27', '22', '9246', '0', '0'), +('12', '27', '22', '21509', '0', '0'), +('12', '27', '22', '8007', '0', '0'), +('12', '27', '1', '14702', '2350', '0'), +('12', '27', '1', '30361', '2040', '0'), +('12', '27', '1', '14701', '1862', '0'), +('12', '27', '1', '10082', '1270', '0'), +('12', '27', '2', '1271', '3808', '0'), +('12', '27', '2', '10143', '3368', '0'), +('12', '27', '2', '30363', '2700', '0'), +('12', '27', '2', '1225', '2433', '0'), +('12', '27', '3', '11052', '2935', '0'), +('12', '27', '3', '1272', '2345', '0'), +('12', '27', '3', '4505', '1400', '0'), +('12', '27', '3', '1212', '1114', '0'), +('12', '27', '5', '27710', '4009', '0'), +('12', '27', '5', '14703', '3850', '0'), +('12', '27', '5', '14556', '3018', '0'), +('12', '27', '5', '30362', '2340', '0'), +('12', '27', '8', '11603', '7072', '0'), +('12', '27', '8', '2349', '2154', '0'), +('12', '27', '8', '1057', '1177', '0'), +('12', '27', '8', '1216', '1127', '0'), +('12', '27', '6', '1557', '5310', '0'), +('12', '27', '6', '1542', '3933', '0'), +('12', '27', '6', '1905', '3063', '0'), +('12', '27', '6', '1273', '2359', '0'), +('12', '27', '17', '11641', '6517', '0'), +('12', '27', '17', '1644', '6145', '0'), +('12', '27', '17', '1253', '6114', '0'), +('12', '27', '17', '1214', '4801', '0'), +('12', '27', '7', '1227', '1894', '0'), +('12', '27', '7', '1218', '1814', '0'), +('12', '27', '7', '1362', '1624', '0'), +('12', '27', '7', '1648', '1603', '0'), +('12', '27', '9', '12803', '2528', '0'), +('12', '27', '9', '1649', '1505', '0'), +('12', '27', '9', '4344', '1251', '0'), +('12', '27', '9', '10408', '1202', '0'), +('12', '27', '15', '11686', '4012', '0'), +('12', '27', '15', '10150', '1804', '0'), +('12', '27', '15', '10163', '1500', '0'), +('12', '27', '15', '14651', '1424', '0'), +('12', '27', '20', '11666', '5333', '0'), +('12', '27', '20', '2742', '3132', '0'), +('12', '27', '20', '1217', '1122', '0'), +('12', '27', '20', '1647', '934', '0'), +('12', '27', '12', '1229', '2601', '0'), +('12', '27', '12', '20655', '2206', '0'), +('12', '27', '12', '2923', '2074', '0'), +('12', '27', '12', '2336', '1591', '0'), +('12', '27', '18', '1651', '1322', '0'), +('12', '27', '18', '4410', '742', '0'), +('12', '27', '18', '1230', '503', '0'), +('12', '27', '18', '1221', '454', '0'), +('12', '27', '19', '68239', '1911', '0'), +('12', '27', '19', '4407', '1821', '0'), +('12', '27', '19', '1652', '1234', '0'), +('12', '27', '19', '1368', '1216', '0'), +('12', '27', '13', '14337', '5058', '0'), +('12', '27', '13', '20656', '4609', '0'), +('12', '27', '13', '6359', '2810', '0'), +('12', '27', '13', '9690', '2700', '0'), +('12', '27', '14', '20656', '4609', '0'), +('12', '27', '14', '10219', '3681', '0'), +('12', '27', '14', '6359', '2810', '0'), +('12', '27', '14', '9690', '2700', '0'), +('12', '27', '11', '9246', '1969', '0'), +('12', '27', '11', '13353', '1500', '0'), +('12', '27', '11', '14762', '1404', '0'), +('12', '27', '11', '20677', '450', '0'), +('12', '28', '22', '10323', '0', '0'), +('12', '28', '22', '9246', '0', '0'), +('12', '28', '22', '21509', '0', '0'), +('12', '28', '22', '8007', '0', '0'), +('12', '28', '1', '14702', '2350', '0'), +('12', '28', '1', '30361', '2040', '0'), +('12', '28', '1', '14701', '1862', '0'), +('12', '28', '1', '10082', '1314', '0'), +('12', '28', '2', '1271', '3866', '0'), +('12', '28', '2', '10143', '3368', '0'), +('12', '28', '2', '30363', '2700', '0'), +('12', '28', '2', '1225', '2485', '0'), +('12', '28', '3', '11052', '3044', '0'), +('12', '28', '3', '1272', '2410', '0'), +('12', '28', '3', '4505', '1451', '0'), +('12', '28', '3', '1212', '1121', '0'), +('12', '28', '5', '27710', '4045', '0'), +('12', '28', '5', '14703', '3850', '0'), +('12', '28', '5', '14556', '3018', '0'), +('12', '28', '5', '30362', '2340', '0'), +('12', '28', '8', '11603', '7137', '0'), +('12', '28', '8', '2349', '2154', '0'), +('12', '28', '8', '1057', '1213', '0'), +('12', '28', '8', '1216', '1134', '0'), +('12', '28', '6', '1557', '5310', '0'), +('12', '28', '6', '1542', '3998', '0'), +('12', '28', '6', '1905', '3064', '0'), +('12', '28', '6', '1273', '2395', '0'), +('12', '28', '17', '11641', '6626', '0'), +('12', '28', '17', '1644', '6181', '0'), +('12', '28', '17', '1253', '6116', '0'), +('12', '28', '17', '1214', '4898', '0'), +('12', '28', '7', '1227', '1945', '0'), +('12', '28', '7', '1218', '1865', '0'), +('12', '28', '7', '1648', '1639', '0'), +('12', '28', '7', '1362', '1624', '0'), +('12', '28', '9', '12803', '2491', '0'), +('12', '28', '9', '1649', '1527', '0'), +('12', '28', '9', '4344', '1251', '0'), +('12', '28', '9', '10408', '1202', '0'), +('12', '28', '15', '11686', '4049', '0'), +('12', '28', '15', '10150', '1804', '0'), +('12', '28', '15', '10163', '1500', '0'), +('12', '28', '15', '14651', '1424', '0'), +('12', '28', '20', '11666', '5334', '0'), +('12', '28', '20', '2742', '3134', '0'), +('12', '28', '20', '1217', '1130', '0'), +('12', '28', '20', '1647', '934', '0'), +('12', '28', '12', '1229', '2652', '0'), +('12', '28', '12', '20655', '2221', '0'), +('12', '28', '12', '2923', '2074', '0'), +('12', '28', '12', '2336', '1627', '0'), +('12', '28', '18', '1651', '1344', '0'), +('12', '28', '18', '4410', '742', '0'), +('12', '28', '18', '1230', '504', '0'), +('12', '28', '18', '1221', '454', '0'), +('12', '28', '19', '68239', '1932', '0'), +('12', '28', '19', '4407', '1887', '0'), +('12', '28', '19', '1652', '1234', '0'), +('12', '28', '19', '1368', '1216', '0'), +('12', '28', '13', '14337', '5131', '0'), +('12', '28', '13', '20656', '4645', '0'), +('12', '28', '13', '6359', '2882', '0'), +('12', '28', '13', '14360', '2730', '0'), +('12', '28', '14', '20656', '4645', '0'), +('12', '28', '14', '10219', '3681', '0'), +('12', '28', '14', '6359', '2882', '0'), +('12', '28', '14', '9690', '2700', '0'), +('12', '28', '11', '9246', '2042', '0'), +('12', '28', '11', '13353', '1500', '0'), +('12', '28', '11', '14762', '1404', '0'), +('12', '28', '11', '20677', '450', '0'), +('12', '29', '22', '10323', '0', '0'), +('12', '29', '22', '9246', '0', '0'), +('12', '29', '22', '21509', '0', '0'), +('12', '29', '22', '8007', '0', '0'), +('12', '29', '1', '14702', '2350', '0'), +('12', '29', '1', '30361', '2040', '0'), +('12', '29', '1', '14701', '1862', '0'), +('12', '29', '1', '10082', '1357', '0'), +('12', '29', '2', '1271', '3924', '0'), +('12', '29', '2', '10143', '3368', '0'), +('12', '29', '2', '30363', '2700', '0'), +('12', '29', '2', '1225', '2537', '0'), +('12', '29', '3', '11052', '3153', '0'), +('12', '29', '3', '1272', '2475', '0'), +('12', '29', '3', '4505', '1502', '0'), +('12', '29', '3', '1212', '1128', '0'), +('12', '29', '5', '27710', '4081', '0'), +('12', '29', '5', '14703', '3850', '0'), +('12', '29', '5', '14556', '3018', '0'), +('12', '29', '5', '30362', '2340', '0'), +('12', '29', '8', '11603', '7202', '0'), +('12', '29', '8', '2349', '2154', '0'), +('12', '29', '8', '1057', '1249', '0'), +('12', '29', '8', '1216', '1142', '0'), +('12', '29', '6', '1557', '5310', '0'), +('12', '29', '6', '1542', '4063', '0'), +('12', '29', '6', '1905', '3065', '0'), +('12', '29', '6', '1273', '2431', '0'), +('12', '29', '17', '11641', '6734', '0'), +('12', '29', '17', '1644', '6217', '0'), +('12', '29', '17', '1253', '6118', '0'), +('12', '29', '17', '1214', '4995', '0'), +('12', '29', '7', '1227', '1996', '0'), +('12', '29', '7', '1218', '1916', '0'), +('12', '29', '7', '1648', '1675', '0'), +('12', '29', '7', '1362', '1624', '0'), +('12', '29', '9', '12803', '2455', '0'), +('12', '29', '9', '1649', '1549', '0'), +('12', '29', '9', '4344', '1251', '0'), +('12', '29', '9', '10408', '1202', '0'), +('12', '29', '15', '11686', '4085', '0'), +('12', '29', '15', '10150', '1804', '0'), +('12', '29', '15', '10163', '1500', '0'), +('12', '29', '15', '14651', '1424', '0'), +('12', '29', '20', '11666', '5336', '0'), +('12', '29', '20', '2742', '3137', '0'), +('12', '29', '20', '1217', '1137', '0'), +('12', '29', '20', '1647', '934', '0'), +('12', '29', '12', '1229', '2703', '0'), +('12', '29', '12', '20655', '2236', '0'), +('12', '29', '12', '2923', '2074', '0'), +('12', '29', '12', '2336', '1663', '0'), +('12', '29', '18', '1651', '1366', '0'), +('12', '29', '18', '4410', '742', '0'), +('12', '29', '18', '1230', '505', '0'), +('12', '29', '18', '1221', '454', '0'), +('12', '29', '19', '68239', '1954', '0'), +('12', '29', '19', '4407', '1952', '0'), +('12', '29', '19', '1652', '1234', '0'), +('12', '29', '19', '1368', '1216', '0'), +('12', '29', '13', '14337', '5203', '0'), +('12', '29', '13', '20656', '4681', '0'), +('12', '29', '13', '6359', '2955', '0'), +('12', '29', '13', '14360', '2802', '0'), +('12', '29', '14', '20656', '4681', '0'), +('12', '29', '14', '10219', '3681', '0'), +('12', '29', '14', '6359', '2955', '0'), +('12', '29', '14', '9690', '2700', '0'), +('12', '29', '11', '9246', '2114', '0'), +('12', '29', '11', '13353', '1500', '0'), +('12', '29', '11', '14762', '1404', '0'), +('12', '29', '11', '20677', '450', '0'), +('12', '30', '22', '10323', '0', '0'), +('12', '30', '22', '9246', '0', '0'), +('12', '30', '22', '21509', '0', '0'), +('12', '30', '22', '8007', '0', '0'), +('12', '30', '1', '14702', '2350', '0'), +('12', '30', '1', '30361', '2040', '0'), +('12', '30', '1', '14701', '1862', '0'), +('12', '30', '1', '10082', '1401', '0'), +('12', '30', '2', '1271', '3982', '0'), +('12', '30', '2', '10143', '3368', '0'), +('12', '30', '2', '30363', '2700', '0'), +('12', '30', '2', '1225', '2589', '0'), +('12', '30', '3', '11052', '3262', '0'), +('12', '30', '3', '1272', '2540', '0'), +('12', '30', '3', '4505', '1552', '0'), +('12', '30', '3', '1212', '1136', '0'), +('12', '30', '5', '27710', '4117', '0'), +('12', '30', '5', '14703', '3850', '0'), +('12', '30', '5', '14556', '3018', '0'), +('12', '30', '5', '30362', '2340', '0'), +('12', '30', '8', '11603', '7267', '0'), +('12', '30', '8', '2349', '2154', '0'), +('12', '30', '8', '1057', '1286', '0'), +('12', '30', '8', '1216', '1149', '0'), +('12', '30', '6', '1557', '5310', '0'), +('12', '30', '6', '1542', '4128', '0'), +('12', '30', '6', '1905', '3066', '0'), +('12', '30', '6', '1273', '2467', '0'), +('12', '30', '17', '11641', '6843', '0'), +('12', '30', '17', '1644', '6254', '0'), +('12', '30', '17', '1253', '6121', '0'), +('12', '30', '17', '1214', '5093', '0'), +('12', '30', '7', '1227', '2046', '0'), +('12', '30', '7', '1218', '1966', '0'), +('12', '30', '7', '1648', '1711', '0'), +('12', '30', '7', '1362', '1624', '0'), +('12', '30', '9', '12803', '2419', '0'), +('12', '30', '9', '1649', '1570', '0'), +('12', '30', '9', '4344', '1251', '0'), +('12', '30', '9', '10408', '1202', '0'), +('12', '30', '15', '11686', '4121', '0'), +('12', '30', '15', '10150', '1804', '0'), +('12', '30', '15', '10163', '1500', '0'), +('12', '30', '15', '14651', '1424', '0'), +('12', '30', '20', '11666', '5338', '0'), +('12', '30', '20', '2742', '3139', '0'), +('12', '30', '20', '1217', '1144', '0'), +('12', '30', '20', '1364', '962', '0'), +('12', '30', '12', '1229', '2753', '0'), +('12', '30', '12', '20655', '2251', '0'), +('12', '30', '12', '2923', '2074', '0'), +('12', '30', '12', '2336', '1699', '0'), +('12', '30', '18', '1651', '1387', '0'), +('12', '30', '18', '4410', '742', '0'), +('12', '30', '18', '1230', '506', '0'), +('12', '30', '18', '1221', '454', '0'), +('12', '30', '19', '4407', '2017', '0'), +('12', '30', '19', '68239', '1976', '0'), +('12', '30', '19', '1652', '1234', '0'), +('12', '30', '19', '1368', '1216', '0'), +('12', '30', '13', '14337', '5276', '0'), +('12', '30', '13', '20656', '4717', '0'), +('12', '30', '13', '6359', '3027', '0'), +('12', '30', '13', '14360', '2875', '0'), +('12', '30', '14', '20656', '4717', '0'), +('12', '30', '14', '10219', '3681', '0'), +('12', '30', '14', '6359', '3027', '0'), +('12', '30', '14', '9690', '2700', '0'), +('12', '30', '11', '9246', '2186', '0'), +('12', '30', '11', '13353', '1500', '0'), +('12', '30', '11', '14762', '1404', '0'), +('12', '30', '11', '20677', '450', '0'), +('12', '31', '22', '10323', '0', '0'), +('12', '31', '22', '9246', '0', '0'), +('12', '31', '22', '21509', '0', '0'), +('12', '31', '22', '8007', '0', '0'), +('12', '31', '1', '14702', '2350', '0'), +('12', '31', '1', '30361', '2040', '0'), +('12', '31', '1', '14701', '1862', '0'), +('12', '31', '1', '10082', '1444', '0'), +('12', '31', '2', '1271', '4040', '0'), +('12', '31', '2', '10143', '3368', '0'), +('12', '31', '2', '30363', '2700', '0'), +('12', '31', '2', '1225', '2640', '0'), +('12', '31', '3', '11052', '3370', '0'), +('12', '31', '3', '1272', '2606', '0'), +('12', '31', '3', '4505', '1603', '0'), +('12', '31', '3', '2366', '1148', '0'), +('12', '31', '5', '27710', '4154', '0'), +('12', '31', '5', '14703', '3850', '0'), +('12', '31', '5', '14556', '3018', '0'), +('12', '31', '5', '30362', '2340', '0'), +('12', '31', '8', '11603', '7333', '0'), +('12', '31', '8', '2349', '2154', '0'), +('12', '31', '8', '1057', '1322', '0'), +('12', '31', '8', '1216', '1156', '0'), +('12', '31', '6', '1557', '5310', '0'), +('12', '31', '6', '1542', '4193', '0'), +('12', '31', '6', '1905', '3068', '0'), +('12', '31', '6', '1273', '2504', '0'), +('12', '31', '17', '11641', '6952', '0'), +('12', '31', '17', '1644', '6290', '0'), +('12', '31', '17', '1253', '6123', '0'), +('12', '31', '17', '1214', '5190', '0'), +('12', '31', '7', '1227', '2097', '0'), +('12', '31', '7', '1218', '2017', '0'), +('12', '31', '7', '1648', '1748', '0'), +('12', '31', '7', '1362', '1624', '0'), +('12', '31', '9', '12803', '2383', '0'), +('12', '31', '9', '1649', '1592', '0'), +('12', '31', '9', '4344', '1251', '0'), +('12', '31', '9', '10408', '1202', '0'), +('12', '31', '15', '11686', '4157', '0'), +('12', '31', '15', '10150', '1804', '0'), +('12', '31', '15', '10163', '1500', '0'), +('12', '31', '15', '14651', '1424', '0'), +('12', '31', '20', '11666', '5339', '0'), +('12', '31', '20', '2742', '3141', '0'), +('12', '31', '20', '1217', '1151', '0'), +('12', '31', '20', '1364', '991', '0'), +('12', '31', '12', '1229', '2804', '0'), +('12', '31', '12', '20655', '2266', '0'), +('12', '31', '12', '2923', '2074', '0'), +('12', '31', '12', '2336', '1736', '0'), +('12', '31', '18', '1651', '1409', '0'), +('12', '31', '18', '4410', '742', '0'), +('12', '31', '18', '1230', '506', '0'), +('12', '31', '18', '1221', '454', '0'), +('12', '31', '19', '4407', '2082', '0'), +('12', '31', '19', '68239', '1997', '0'), +('12', '31', '19', '1652', '1234', '0'), +('12', '31', '19', '1368', '1216', '0'), +('12', '31', '13', '14337', '5348', '0'), +('12', '31', '13', '20656', '4754', '0'), +('12', '31', '13', '6359', '3100', '0'), +('12', '31', '13', '14360', '2947', '0'), +('12', '31', '14', '20656', '4754', '0'), +('12', '31', '14', '10219', '3681', '0'), +('12', '31', '14', '6359', '3100', '0'), +('12', '31', '14', '9690', '2700', '0'), +('12', '31', '11', '9246', '2259', '0'), +('12', '31', '11', '13353', '1500', '0'), +('12', '31', '11', '14762', '1404', '0'), +('12', '31', '11', '20677', '450', '0'), +('12', '32', '22', '10323', '0', '0'), +('12', '32', '22', '9246', '0', '0'), +('12', '32', '22', '21509', '0', '0'), +('12', '32', '22', '8007', '0', '0'), +('12', '32', '1', '14702', '2350', '0'), +('12', '32', '1', '30361', '2040', '0'), +('12', '32', '1', '14701', '1862', '0'), +('12', '32', '1', '10082', '1488', '0'), +('12', '32', '2', '1271', '4098', '0'), +('12', '32', '2', '10143', '3368', '0'), +('12', '32', '2', '30363', '2700', '0'), +('12', '32', '2', '1225', '2692', '0'), +('12', '32', '3', '11052', '3479', '0'), +('12', '32', '3', '1272', '2671', '0'), +('12', '32', '3', '4505', '1654', '0'), +('12', '32', '3', '2366', '1184', '0'), +('12', '32', '5', '27710', '4190', '0'), +('12', '32', '5', '14703', '3850', '0'), +('12', '32', '5', '14556', '3018', '0'), +('12', '32', '5', '30362', '2340', '0'), +('12', '32', '8', '11603', '7398', '0'), +('12', '32', '8', '2349', '2154', '0'), +('12', '32', '8', '1057', '1358', '0'), +('12', '32', '8', '1216', '1163', '0'), +('12', '32', '6', '1557', '5310', '0'), +('12', '32', '6', '1542', '4259', '0'), +('12', '32', '6', '1905', '3069', '0'), +('12', '32', '6', '1273', '2540', '0'), +('12', '32', '17', '11641', '7061', '0'), +('12', '32', '17', '1644', '6326', '0'), +('12', '32', '17', '1253', '6126', '0'), +('12', '32', '17', '1214', '5288', '0'), +('12', '32', '7', '1227', '2148', '0'), +('12', '32', '7', '1218', '2068', '0'), +('12', '32', '7', '1648', '1784', '0'), +('12', '32', '7', '1362', '1624', '0'), +('12', '32', '9', '12803', '2346', '0'), +('12', '32', '9', '1649', '1614', '0'), +('12', '32', '9', '4344', '1251', '0'), +('12', '32', '9', '10408', '1202', '0'), +('12', '32', '15', '11686', '4194', '0'), +('12', '32', '15', '10150', '1804', '0'), +('12', '32', '15', '10163', '1500', '0'), +('12', '32', '15', '14651', '1424', '0'), +('12', '32', '20', '11666', '5341', '0'), +('12', '32', '20', '2742', '3144', '0'), +('12', '32', '20', '1217', '1159', '0'), +('12', '32', '20', '1364', '1020', '0'), +('12', '32', '12', '1229', '2855', '0'), +('12', '32', '12', '20655', '2281', '0'), +('12', '32', '12', '2923', '2074', '0'), +('12', '32', '12', '2336', '1772', '0'), +('12', '32', '18', '1651', '1431', '0'), +('12', '32', '18', '4410', '742', '0'), +('12', '32', '18', '1230', '507', '0'), +('12', '32', '18', '1221', '454', '0'), +('12', '32', '19', '4407', '2148', '0'), +('12', '32', '19', '68239', '2019', '0'), +('12', '32', '19', '1652', '1234', '0'), +('12', '32', '19', '1368', '1216', '0'), +('12', '32', '13', '14337', '5421', '0'), +('12', '32', '13', '20656', '4790', '0'), +('12', '32', '13', '6359', '3172', '0'), +('12', '32', '13', '14360', '3020', '0'), +('12', '32', '14', '20656', '4790', '0'), +('12', '32', '14', '10219', '3681', '0'), +('12', '32', '14', '6359', '3172', '0'), +('12', '32', '14', '9690', '2700', '0'), +('12', '32', '11', '9246', '2331', '0'), +('12', '32', '11', '13353', '1500', '0'), +('12', '32', '11', '14762', '1404', '0'), +('12', '32', '11', '20677', '450', '0'), +('12', '33', '22', '10323', '0', '0'), +('12', '33', '22', '9246', '0', '0'), +('12', '33', '22', '21509', '0', '0'), +('12', '33', '22', '8007', '0', '0'), +('12', '33', '1', '14702', '2350', '0'), +('12', '33', '1', '30361', '2040', '0'), +('12', '33', '1', '14701', '1862', '0'), +('12', '33', '1', '10082', '1531', '0'), +('12', '33', '2', '1271', '4156', '0'), +('12', '33', '2', '10143', '3368', '0'), +('12', '33', '2', '1225', '2744', '0'), +('12', '33', '2', '30363', '2700', '0'), +('12', '33', '3', '11052', '3588', '0'), +('12', '33', '3', '1272', '2736', '0'), +('12', '33', '3', '4505', '1704', '0'), +('12', '33', '3', '2366', '1220', '0'), +('12', '33', '5', '27710', '4226', '0'), +('12', '33', '5', '14703', '3850', '0'), +('12', '33', '5', '14556', '3018', '0'), +('12', '33', '5', '11646', '2409', '0'), +('12', '33', '8', '11603', '7463', '0'), +('12', '33', '8', '2349', '2154', '0'), +('12', '33', '8', '1057', '1394', '0'), +('12', '33', '8', '1216', '1171', '0'), +('12', '33', '6', '1557', '5310', '0'), +('12', '33', '6', '1542', '4324', '0'), +('12', '33', '6', '1905', '3070', '0'), +('12', '33', '6', '1273', '2576', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '33', '17', '11641', '7169', '0'), +('12', '33', '17', '1644', '6362', '0'), +('12', '33', '17', '1253', '6128', '0'), +('12', '33', '17', '1214', '5385', '0'), +('12', '33', '7', '1227', '2198', '0'), +('12', '33', '7', '1218', '2118', '0'), +('12', '33', '7', '1648', '1820', '0'), +('12', '33', '7', '1362', '1624', '0'), +('12', '33', '9', '12803', '2310', '0'), +('12', '33', '9', '1649', '1636', '0'), +('12', '33', '9', '4344', '1251', '0'), +('12', '33', '9', '4408', '1229', '0'), +('12', '33', '15', '11686', '4230', '0'), +('12', '33', '15', '10150', '1804', '0'), +('12', '33', '15', '10163', '1500', '0'), +('12', '33', '15', '14651', '1424', '0'), +('12', '33', '20', '11666', '5343', '0'), +('12', '33', '20', '2742', '3146', '0'), +('12', '33', '20', '1217', '1166', '0'), +('12', '33', '20', '1364', '1049', '0'), +('12', '33', '12', '1229', '2906', '0'), +('12', '33', '12', '20655', '2296', '0'), +('12', '33', '12', '2923', '2074', '0'), +('12', '33', '12', '2336', '1808', '0'), +('12', '33', '18', '1651', '1453', '0'), +('12', '33', '18', '4410', '742', '0'), +('12', '33', '18', '1230', '508', '0'), +('12', '33', '18', '1221', '454', '0'), +('12', '33', '19', '4407', '2213', '0'), +('12', '33', '19', '68239', '2041', '0'), +('12', '33', '19', '1652', '1234', '0'), +('12', '33', '19', '1368', '1216', '0'), +('12', '33', '13', '14337', '5493', '0'), +('12', '33', '13', '20656', '4826', '0'), +('12', '33', '13', '6359', '3245', '0'), +('12', '33', '13', '14360', '3092', '0'), +('12', '33', '14', '20656', '4826', '0'), +('12', '33', '14', '10219', '3681', '0'), +('12', '33', '14', '6359', '3245', '0'), +('12', '33', '14', '9690', '2700', '0'), +('12', '33', '11', '9246', '2404', '0'), +('12', '33', '11', '13353', '1500', '0'), +('12', '33', '11', '14762', '1404', '0'), +('12', '33', '11', '20677', '450', '0'), +('12', '34', '22', '10323', '0', '0'), +('12', '34', '22', '9246', '0', '0'), +('12', '34', '22', '21509', '0', '0'), +('12', '34', '22', '8007', '0', '0'), +('12', '34', '1', '14702', '2350', '0'), +('12', '34', '1', '30361', '2040', '0'), +('12', '34', '1', '14701', '1862', '0'), +('12', '34', '1', '10082', '1575', '0'), +('12', '34', '2', '1271', '4214', '0'), +('12', '34', '2', '10143', '3368', '0'), +('12', '34', '2', '1225', '2796', '0'), +('12', '34', '2', '1211', '2725', '0'), +('12', '34', '3', '11052', '3696', '0'), +('12', '34', '3', '1272', '2801', '0'), +('12', '34', '3', '4505', '1755', '0'), +('12', '34', '3', '2366', '1256', '0'), +('12', '34', '5', '27710', '4262', '0'), +('12', '34', '5', '14703', '3850', '0'), +('12', '34', '5', '14556', '3018', '0'), +('12', '34', '5', '11646', '2504', '0'), +('12', '34', '8', '11603', '7528', '0'), +('12', '34', '8', '2349', '2154', '0'), +('12', '34', '8', '1057', '1430', '0'), +('12', '34', '8', '1216', '1178', '0'), +('12', '34', '6', '1557', '5310', '0'), +('12', '34', '6', '1542', '4389', '0'), +('12', '34', '6', '1905', '3071', '0'), +('12', '34', '6', '1273', '2612', '0'), +('12', '34', '17', '11641', '7278', '0'), +('12', '34', '17', '1644', '6399', '0'), +('12', '34', '17', '1253', '6130', '0'), +('12', '34', '17', '1214', '5482', '0'), +('12', '34', '7', '1227', '2249', '0'), +('12', '34', '7', '1218', '2169', '0'), +('12', '34', '7', '1648', '1856', '0'), +('12', '34', '7', '1362', '1624', '0'), +('12', '34', '9', '12803', '2274', '0'), +('12', '34', '9', '1649', '1657', '0'), +('12', '34', '9', '4408', '1265', '0'), +('12', '34', '9', '4344', '1251', '0'), +('12', '34', '15', '11686', '4266', '0'), +('12', '34', '15', '10150', '1804', '0'), +('12', '34', '15', '10163', '1500', '0'), +('12', '34', '15', '14651', '1424', '0'), +('12', '34', '20', '11666', '5344', '0'), +('12', '34', '20', '2742', '3149', '0'), +('12', '34', '20', '1217', '1173', '0'), +('12', '34', '20', '1364', '1078', '0'), +('12', '34', '12', '1229', '2956', '0'), +('12', '34', '12', '20655', '2311', '0'), +('12', '34', '12', '2923', '2074', '0'), +('12', '34', '12', '2336', '1844', '0'), +('12', '34', '18', '1651', '1474', '0'), +('12', '34', '18', '4410', '742', '0'), +('12', '34', '18', '1230', '508', '0'), +('12', '34', '18', '1221', '454', '0'), +('12', '34', '19', '4407', '2278', '0'), +('12', '34', '19', '68239', '2063', '0'), +('12', '34', '19', '1652', '1234', '0'), +('12', '34', '19', '1368', '1216', '0'), +('12', '34', '13', '14337', '5566', '0'), +('12', '34', '13', '20656', '4862', '0'), +('12', '34', '13', '6359', '3317', '0'), +('12', '34', '13', '14360', '3165', '0'), +('12', '34', '14', '20656', '4862', '0'), +('12', '34', '14', '10219', '3681', '0'), +('12', '34', '14', '6359', '3317', '0'), +('12', '34', '14', '9690', '2700', '0'), +('12', '34', '11', '9246', '2476', '0'), +('12', '34', '11', '13353', '1500', '0'), +('12', '34', '11', '14762', '1404', '0'), +('12', '34', '11', '20677', '450', '0'), +('12', '35', '22', '10323', '0', '0'), +('12', '35', '22', '9246', '0', '0'), +('12', '35', '22', '21509', '0', '0'), +('12', '35', '22', '8007', '0', '0'), +('12', '35', '1', '14702', '2350', '0'), +('12', '35', '1', '30361', '2040', '0'), +('12', '35', '1', '14701', '1862', '0'), +('12', '35', '1', '10082', '1618', '0'), +('12', '35', '2', '1271', '4272', '0'), +('12', '35', '2', '10143', '3368', '0'), +('12', '35', '2', '1225', '2848', '0'), +('12', '35', '2', '1211', '2776', '0'), +('12', '35', '3', '11052', '3805', '0'), +('12', '35', '3', '1272', '2867', '0'), +('12', '35', '3', '4505', '1806', '0'), +('12', '35', '3', '2366', '1293', '0'), +('12', '35', '5', '27710', '4299', '0'), +('12', '35', '5', '14703', '3850', '0'), +('12', '35', '5', '14556', '3018', '0'), +('12', '35', '5', '11646', '2598', '0'), +('12', '35', '8', '11603', '7594', '0'), +('12', '35', '8', '2349', '2154', '0'), +('12', '35', '8', '1057', '1467', '0'), +('12', '35', '8', '1216', '1185', '0'), +('12', '35', '6', '1557', '5310', '0'), +('12', '35', '6', '1542', '4454', '0'), +('12', '35', '6', '1905', '3072', '0'), +('12', '35', '6', '1273', '2649', '0'), +('12', '35', '17', '11641', '7387', '0'), +('12', '35', '17', '1644', '6435', '0'), +('12', '35', '17', '1253', '6133', '0'), +('12', '35', '17', '1214', '5580', '0'), +('12', '35', '7', '1227', '2300', '0'), +('12', '35', '7', '1218', '2220', '0'), +('12', '35', '7', '1648', '1893', '0'), +('12', '35', '7', '1362', '1624', '0'), +('12', '35', '9', '12803', '2238', '0'), +('12', '35', '9', '1649', '1679', '0'), +('12', '35', '9', '4408', '1302', '0'), +('12', '35', '9', '4344', '1251', '0'), +('12', '35', '15', '11686', '4302', '0'), +('12', '35', '15', '10150', '1804', '0'), +('12', '35', '15', '10163', '1500', '0'), +('12', '35', '15', '14651', '1424', '0'), +('12', '35', '20', '11666', '5346', '0'), +('12', '35', '20', '2742', '3151', '0'), +('12', '35', '20', '1217', '1180', '0'), +('12', '35', '20', '1364', '1107', '0'), +('12', '35', '12', '1229', '3007', '0'), +('12', '35', '12', '20655', '2326', '0'), +('12', '35', '12', '2923', '2074', '0'), +('12', '35', '12', '2336', '1880', '0'), +('12', '35', '18', '1651', '1496', '0'), +('12', '35', '18', '4410', '742', '0'), +('12', '35', '18', '1230', '509', '0'), +('12', '35', '18', '1221', '454', '0'), +('12', '35', '19', '4407', '2343', '0'), +('12', '35', '19', '68239', '2084', '0'), +('12', '35', '19', '1652', '1234', '0'), +('12', '35', '19', '1368', '1216', '0'), +('12', '35', '13', '14337', '5638', '0'), +('12', '35', '13', '20656', '4899', '0'), +('12', '35', '13', '6359', '3390', '0'), +('12', '35', '13', '14360', '3237', '0'), +('12', '35', '14', '20656', '4899', '0'), +('12', '35', '14', '10219', '3681', '0'), +('12', '35', '14', '6359', '3390', '0'), +('12', '35', '14', '9690', '2700', '0'), +('12', '35', '11', '9246', '2549', '0'), +('12', '35', '11', '13353', '1500', '0'), +('12', '35', '11', '14762', '1404', '0'), +('12', '35', '11', '20677', '450', '0'), +('12', '36', '22', '10323', '0', '0'), +('12', '36', '22', '9246', '0', '0'), +('12', '36', '22', '21509', '0', '0'), +('12', '36', '22', '8007', '0', '0'), +('12', '36', '1', '14702', '2350', '0'), +('12', '36', '1', '30361', '2040', '0'), +('12', '36', '1', '14701', '1862', '0'), +('12', '36', '1', '10082', '1662', '0'), +('12', '36', '2', '1271', '4330', '0'), +('12', '36', '2', '10143', '3368', '0'), +('12', '36', '2', '1225', '2900', '0'), +('12', '36', '2', '1211', '2827', '0'), +('12', '36', '3', '11052', '3914', '0'), +('12', '36', '3', '1272', '2932', '0'), +('12', '36', '3', '4505', '1857', '0'), +('12', '36', '3', '2366', '1329', '0'), +('12', '36', '5', '27710', '4335', '0'), +('12', '36', '5', '14703', '3850', '0'), +('12', '36', '5', '14556', '3018', '0'), +('12', '36', '5', '11646', '2692', '0'), +('12', '36', '8', '11603', '7659', '0'), +('12', '36', '8', '2349', '2154', '0'), +('12', '36', '8', '1057', '1503', '0'), +('12', '36', '8', '1216', '1192', '0'), +('12', '36', '6', '1557', '5310', '0'), +('12', '36', '6', '1542', '4520', '0'), +('12', '36', '6', '1905', '3074', '0'), +('12', '36', '6', '1273', '2685', '0'), +('12', '36', '17', '11641', '7495', '0'), +('12', '36', '17', '1644', '6471', '0'), +('12', '36', '17', '1253', '6135', '0'), +('12', '36', '17', '1214', '5677', '0'), +('12', '36', '7', '1227', '2351', '0'), +('12', '36', '7', '1218', '2271', '0'), +('12', '36', '7', '1648', '1929', '0'), +('12', '36', '7', '1362', '1624', '0'), +('12', '36', '9', '12803', '2201', '0'), +('12', '36', '9', '1649', '1701', '0'), +('12', '36', '9', '4408', '1338', '0'), +('12', '36', '9', '4344', '1251', '0'), +('12', '36', '15', '11686', '4338', '0'), +('12', '36', '15', '10150', '1804', '0'), +('12', '36', '15', '10163', '1500', '0'), +('12', '36', '15', '14651', '1424', '0'), +('12', '36', '20', '11666', '5348', '0'), +('12', '36', '20', '2742', '3153', '0'), +('12', '36', '20', '1217', '1188', '0'), +('12', '36', '20', '1364', '1136', '0'), +('12', '36', '12', '1229', '3058', '0'), +('12', '36', '12', '20655', '2341', '0'), +('12', '36', '12', '2923', '2074', '0'), +('12', '36', '12', '2336', '1917', '0'), +('12', '36', '18', '1651', '1518', '0'), +('12', '36', '18', '4410', '742', '0'), +('12', '36', '18', '1230', '510', '0'), +('12', '36', '18', '1221', '454', '0'), +('12', '36', '19', '4407', '2409', '0'), +('12', '36', '19', '68239', '2106', '0'), +('12', '36', '19', '1652', '1234', '0'), +('12', '36', '19', '1368', '1216', '0'), +('12', '36', '13', '14337', '5710', '0'), +('12', '36', '13', '20656', '4935', '0'), +('12', '36', '13', '6359', '3462', '0'), +('12', '36', '13', '14360', '3310', '0'), +('12', '36', '14', '20656', '4935', '0'), +('12', '36', '14', '10219', '3681', '0'), +('12', '36', '14', '6359', '3462', '0'), +('12', '36', '14', '13987', '2705', '0'), +('12', '36', '11', '9246', '2621', '0'), +('12', '36', '11', '13353', '1500', '0'), +('12', '36', '11', '14762', '1404', '0'), +('12', '36', '11', '20677', '450', '0'), +('12', '37', '22', '10323', '0', '0'), +('12', '37', '22', '9246', '0', '0'), +('12', '37', '22', '21509', '0', '0'), +('12', '37', '22', '8007', '0', '0'), +('12', '37', '1', '14702', '2350', '0'), +('12', '37', '1', '30361', '2040', '0'), +('12', '37', '1', '14701', '1862', '0'), +('12', '37', '1', '10082', '1705', '0'), +('12', '37', '2', '1271', '4388', '0'), +('12', '37', '2', '10143', '3368', '0'), +('12', '37', '2', '1225', '2952', '0'), +('12', '37', '2', '1211', '2877', '0'), +('12', '37', '3', '11052', '4023', '0'), +('12', '37', '3', '1272', '2997', '0'), +('12', '37', '3', '4505', '1907', '0'), +('12', '37', '3', '2366', '1365', '0'), +('12', '37', '5', '27710', '4371', '0'), +('12', '37', '5', '14703', '3850', '0'), +('12', '37', '5', '14556', '3018', '0'), +('12', '37', '5', '11646', '2786', '0'), +('12', '37', '8', '11603', '7724', '0'), +('12', '37', '8', '2349', '2154', '0'), +('12', '37', '8', '1057', '1539', '0'), +('12', '37', '8', '1216', '1200', '0'), +('12', '37', '6', '1557', '5310', '0'), +('12', '37', '6', '1542', '4585', '0'), +('12', '37', '6', '1905', '3075', '0'), +('12', '37', '6', '1273', '2721', '0'), +('12', '37', '17', '11641', '7604', '0'), +('12', '37', '17', '1644', '6507', '0'), +('12', '37', '17', '1253', '6138', '0'), +('12', '37', '17', '1214', '5774', '0'), +('12', '37', '7', '1227', '2401', '0'), +('12', '37', '7', '1218', '2321', '0'), +('12', '37', '7', '1648', '1965', '0'), +('12', '37', '7', '1362', '1624', '0'), +('12', '37', '9', '12803', '2165', '0'), +('12', '37', '9', '1649', '1723', '0'), +('12', '37', '9', '4408', '1374', '0'), +('12', '37', '9', '4344', '1251', '0'), +('12', '37', '15', '11686', '4375', '0'), +('12', '37', '15', '10150', '1804', '0'), +('12', '37', '15', '10163', '1500', '0'), +('12', '37', '15', '14651', '1424', '0'), +('12', '37', '20', '11666', '5349', '0'), +('12', '37', '20', '2742', '3156', '0'), +('12', '37', '20', '1217', '1195', '0'), +('12', '37', '20', '1364', '1165', '0'), +('12', '37', '12', '1229', '3109', '0'), +('12', '37', '12', '20655', '2356', '0'), +('12', '37', '12', '2923', '2074', '0'), +('12', '37', '12', '2336', '1953', '0'), +('12', '37', '18', '1651', '1540', '0'), +('12', '37', '18', '4410', '742', '0'), +('12', '37', '18', '1230', '511', '0'), +('12', '37', '18', '1221', '454', '0'), +('12', '37', '19', '4407', '2474', '0'), +('12', '37', '19', '68239', '2128', '0'), +('12', '37', '19', '1652', '1234', '0'), +('12', '37', '19', '1368', '1216', '0'), +('12', '37', '13', '14337', '5783', '0'), +('12', '37', '13', '20656', '4971', '0'), +('12', '37', '13', '6359', '3535', '0'), +('12', '37', '13', '14360', '3382', '0'), +('12', '37', '14', '20656', '4971', '0'), +('12', '37', '14', '10219', '3681', '0'), +('12', '37', '14', '6359', '3535', '0'), +('12', '37', '14', '13987', '2741', '0'), +('12', '37', '11', '9246', '2694', '0'), +('12', '37', '11', '13353', '1500', '0'), +('12', '37', '11', '14762', '1404', '0'), +('12', '37', '11', '20677', '450', '0'), +('12', '38', '22', '10323', '0', '0'), +('12', '38', '22', '9246', '0', '0'), +('12', '38', '22', '21509', '0', '0'), +('12', '38', '22', '8007', '0', '0'), +('12', '38', '1', '14702', '2350', '0'), +('12', '38', '1', '30361', '2040', '0'), +('12', '38', '1', '14701', '1862', '0'), +('12', '38', '1', '10082', '1749', '0'), +('12', '38', '2', '1271', '4446', '0'), +('12', '38', '2', '10143', '3368', '0'), +('12', '38', '2', '1225', '3004', '0'), +('12', '38', '2', '1211', '2928', '0'), +('12', '38', '3', '11052', '4131', '0'), +('12', '38', '3', '1272', '3062', '0'), +('12', '38', '3', '4505', '1958', '0'), +('12', '38', '3', '2366', '1401', '0'), +('12', '38', '5', '27710', '4407', '0'), +('12', '38', '5', '14703', '3850', '0'), +('12', '38', '5', '14556', '3018', '0'), +('12', '38', '5', '11646', '2881', '0'), +('12', '38', '8', '11603', '7789', '0'), +('12', '38', '8', '2349', '2154', '0'), +('12', '38', '8', '1057', '1575', '0'), +('12', '38', '8', '1216', '1207', '0'), +('12', '38', '6', '1557', '5310', '0'), +('12', '38', '6', '1542', '4650', '0'), +('12', '38', '6', '1905', '3076', '0'), +('12', '38', '6', '1273', '2757', '0'), +('12', '38', '17', '11641', '7713', '0'), +('12', '38', '17', '1644', '6544', '0'), +('12', '38', '17', '1253', '6140', '0'), +('12', '38', '17', '1214', '5872', '0'), +('12', '38', '7', '1227', '2452', '0'), +('12', '38', '7', '1218', '2372', '0'), +('12', '38', '7', '1648', '2001', '0'), +('12', '38', '7', '1362', '1624', '0'), +('12', '38', '9', '12803', '2129', '0'), +('12', '38', '9', '1649', '1744', '0'), +('12', '38', '9', '4408', '1410', '0'), +('12', '38', '9', '4344', '1251', '0'), +('12', '38', '15', '11686', '4411', '0'), +('12', '38', '15', '10150', '1804', '0'), +('12', '38', '15', '10163', '1500', '0'), +('12', '38', '15', '14651', '1424', '0'), +('12', '38', '20', '11666', '5351', '0'), +('12', '38', '20', '2742', '3158', '0'), +('12', '38', '20', '1217', '1202', '0'), +('12', '38', '20', '1364', '1194', '0'), +('12', '38', '12', '1229', '3159', '0'), +('12', '38', '12', '20655', '2371', '0'), +('12', '38', '12', '2923', '2074', '0'), +('12', '38', '12', '2336', '1989', '0'), +('12', '38', '18', '1651', '1561', '0'), +('12', '38', '18', '4410', '742', '0'), +('12', '38', '18', '1230', '511', '0'), +('12', '38', '18', '1221', '454', '0'), +('12', '38', '19', '4407', '2539', '0'), +('12', '38', '19', '68239', '2150', '0'), +('12', '38', '19', '1652', '1234', '0'), +('12', '38', '19', '1368', '1216', '0'), +('12', '38', '13', '14337', '5855', '0'), +('12', '38', '13', '20656', '5007', '0'), +('12', '38', '13', '6359', '3607', '0'), +('12', '38', '13', '14360', '3455', '0'), +('12', '38', '14', '20656', '5007', '0'), +('12', '38', '14', '10219', '3681', '0'), +('12', '38', '14', '6359', '3607', '0'), +('12', '38', '14', '10404', '2779', '0'), +('12', '38', '11', '9246', '2766', '0'), +('12', '38', '11', '13353', '1500', '0'), +('12', '38', '11', '14762', '1404', '0'), +('12', '38', '11', '20677', '450', '0'), +('12', '39', '22', '10323', '0', '0'), +('12', '39', '22', '9246', '0', '0'), +('12', '39', '22', '21509', '0', '0'), +('12', '39', '22', '8007', '0', '0'), +('12', '39', '1', '14702', '2350', '0'), +('12', '39', '1', '30361', '2040', '0'), +('12', '39', '1', '14701', '1862', '0'), +('12', '39', '1', '10082', '1792', '0'), +('12', '39', '2', '1271', '4504', '0'), +('12', '39', '2', '10143', '3368', '0'), +('12', '39', '2', '1225', '3056', '0'), +('12', '39', '2', '1211', '2979', '0'), +('12', '39', '3', '11052', '4240', '0'), +('12', '39', '3', '1272', '3128', '0'), +('12', '39', '3', '4505', '2009', '0'), +('12', '39', '3', '2366', '1438', '0'), +('12', '39', '5', '27710', '4444', '0'), +('12', '39', '5', '14703', '3850', '0'), +('12', '39', '5', '14556', '3018', '0'), +('12', '39', '5', '11646', '2975', '0'), +('12', '39', '8', '11603', '7854', '0'), +('12', '39', '8', '2349', '2154', '0'), +('12', '39', '8', '1057', '1612', '0'), +('12', '39', '8', '1216', '1214', '0'), +('12', '39', '6', '1557', '5310', '0'), +('12', '39', '6', '1542', '4715', '0'), +('12', '39', '6', '1905', '3077', '0'), +('12', '39', '6', '1273', '2794', '0'), +('12', '39', '17', '11641', '7822', '0'), +('12', '39', '17', '1644', '6580', '0'), +('12', '39', '17', '1253', '6143', '0'), +('12', '39', '17', '1214', '5969', '0'), +('12', '39', '7', '1227', '2503', '0'), +('12', '39', '7', '1218', '2423', '0'), +('12', '39', '7', '1648', '2038', '0'), +('12', '39', '7', '1362', '1624', '0'), +('12', '39', '9', '12803', '2093', '0'), +('12', '39', '9', '1649', '1766', '0'), +('12', '39', '9', '4408', '1447', '0'), +('12', '39', '9', '4344', '1251', '0'), +('12', '39', '15', '11686', '4447', '0'), +('12', '39', '15', '10150', '1804', '0'), +('12', '39', '15', '10163', '1500', '0'), +('12', '39', '15', '14651', '1424', '0'), +('12', '39', '20', '11666', '5353', '0'), +('12', '39', '20', '2742', '3161', '0'), +('12', '39', '20', '1364', '1223', '0'), +('12', '39', '20', '1217', '1209', '0'), +('12', '39', '12', '1229', '3210', '0'), +('12', '39', '12', '20655', '2386', '0'), +('12', '39', '12', '2923', '2074', '0'), +('12', '39', '12', '2336', '2025', '0'), +('12', '39', '18', '1651', '1583', '0'), +('12', '39', '18', '4410', '742', '0'), +('12', '39', '18', '1230', '512', '0'), +('12', '39', '18', '1221', '454', '0'), +('12', '39', '19', '4407', '2604', '0'), +('12', '39', '19', '68239', '2171', '0'), +('12', '39', '19', '1652', '1234', '0'), +('12', '39', '19', '1368', '1216', '0'), +('12', '39', '13', '14337', '5928', '0'), +('12', '39', '13', '20656', '5044', '0'), +('12', '39', '13', '6359', '3680', '0'), +('12', '39', '13', '14360', '3527', '0'), +('12', '39', '14', '20656', '5044', '0'), +('12', '39', '14', '10219', '3681', '0'), +('12', '39', '14', '6359', '3680', '0'), +('12', '39', '14', '10404', '2844', '0'), +('12', '39', '11', '9246', '2839', '0'), +('12', '39', '11', '13353', '1500', '0'), +('12', '39', '11', '14762', '1404', '0'), +('12', '39', '11', '20677', '450', '0'), +('12', '40', '22', '10323', '0', '0'), +('12', '40', '22', '9246', '0', '0'), +('12', '40', '22', '21509', '0', '0'), +('12', '40', '22', '8007', '0', '0'), +('12', '40', '1', '14702', '2350', '0'), +('12', '40', '1', '30361', '2040', '0'), +('12', '40', '1', '14701', '1862', '0'), +('12', '40', '1', '10082', '1836', '0'), +('12', '40', '2', '1271', '4562', '0'), +('12', '40', '2', '10143', '3368', '0'), +('12', '40', '2', '1225', '3108', '0'), +('12', '40', '2', '1211', '3030', '0'), +('12', '40', '3', '11052', '4349', '0'), +('12', '40', '3', '1272', '3193', '0'), +('12', '40', '3', '4505', '2060', '0'), +('12', '40', '3', '2366', '1474', '0'), +('12', '40', '5', '27710', '4480', '0'), +('12', '40', '5', '14703', '3850', '0'), +('12', '40', '5', '11646', '3069', '0'), +('12', '40', '5', '14556', '3018', '0'), +('12', '40', '8', '11603', '7920', '0'), +('12', '40', '8', '2349', '2154', '0'), +('12', '40', '8', '1057', '1648', '0'), +('12', '40', '8', '1216', '1221', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '40', '6', '1557', '5310', '0'), +('12', '40', '6', '1542', '4781', '0'), +('12', '40', '6', '1905', '3079', '0'), +('12', '40', '6', '1273', '2830', '0'), +('12', '40', '17', '11641', '7930', '0'), +('12', '40', '17', '1644', '6616', '0'), +('12', '40', '17', '1253', '6145', '0'), +('12', '40', '17', '1214', '6066', '0'), +('12', '40', '7', '1227', '2554', '0'), +('12', '40', '7', '1218', '2474', '0'), +('12', '40', '7', '1648', '2074', '0'), +('12', '40', '7', '1362', '1624', '0'), +('12', '40', '9', '12803', '2056', '0'), +('12', '40', '9', '1649', '1788', '0'), +('12', '40', '9', '4408', '1483', '0'), +('12', '40', '9', '4344', '1251', '0'), +('12', '40', '15', '11686', '4483', '0'), +('12', '40', '15', '10150', '1804', '0'), +('12', '40', '15', '10163', '1500', '0'), +('12', '40', '15', '14651', '1424', '0'), +('12', '40', '20', '11666', '5354', '0'), +('12', '40', '20', '2742', '3163', '0'), +('12', '40', '20', '1364', '1252', '0'), +('12', '40', '20', '1217', '1216', '0'), +('12', '40', '12', '1229', '3261', '0'), +('12', '40', '12', '20655', '2401', '0'), +('12', '40', '12', '2923', '2074', '0'), +('12', '40', '12', '2336', '2062', '0'), +('12', '40', '18', '1651', '1605', '0'), +('12', '40', '18', '4410', '742', '0'), +('12', '40', '18', '1230', '513', '0'), +('12', '40', '18', '1221', '454', '0'), +('12', '40', '19', '4407', '2669', '0'), +('12', '40', '19', '68239', '2193', '0'), +('12', '40', '19', '1652', '1234', '0'), +('12', '40', '19', '1368', '1216', '0'), +('12', '40', '13', '14337', '6000', '0'), +('12', '40', '13', '20656', '5080', '0'), +('12', '40', '13', '6359', '3752', '0'), +('12', '40', '13', '14360', '3600', '0'), +('12', '40', '14', '20656', '5080', '0'), +('12', '40', '14', '6359', '3752', '0'), +('12', '40', '14', '10219', '3681', '0'), +('12', '40', '14', '9246', '2911', '0'), +('12', '40', '11', '9246', '2911', '0'), +('12', '40', '11', '13353', '1500', '0'), +('12', '40', '11', '14762', '1404', '0'), +('12', '40', '11', '20677', '450', '0'), +('12', '41', '22', '10323', '0', '0'), +('12', '41', '22', '9246', '0', '0'), +('12', '41', '22', '21509', '0', '0'), +('12', '41', '22', '8007', '0', '0'), +('12', '41', '1', '14702', '2350', '0'), +('12', '41', '1', '30361', '2040', '0'), +('12', '41', '1', '10082', '1879', '0'), +('12', '41', '1', '14701', '1862', '0'), +('12', '41', '2', '1271', '4620', '0'), +('12', '41', '2', '10143', '3368', '0'), +('12', '41', '2', '1225', '3160', '0'), +('12', '41', '2', '1211', '3080', '0'), +('12', '41', '3', '11052', '4458', '0'), +('12', '41', '3', '1272', '3258', '0'), +('12', '41', '3', '4505', '2110', '0'), +('12', '41', '3', '2366', '1510', '0'), +('12', '41', '5', '27710', '4516', '0'), +('12', '41', '5', '14703', '3850', '0'), +('12', '41', '5', '11646', '3163', '0'), +('12', '41', '5', '14556', '3018', '0'), +('12', '41', '8', '11603', '7985', '0'), +('12', '41', '8', '2349', '2154', '0'), +('12', '41', '8', '1057', '1684', '0'), +('12', '41', '8', '1216', '1229', '0'), +('12', '41', '6', '1557', '5310', '0'), +('12', '41', '6', '1542', '4846', '0'), +('12', '41', '6', '1905', '3080', '0'), +('12', '41', '6', '1273', '2866', '0'), +('12', '41', '17', '11641', '8039', '0'), +('12', '41', '17', '1644', '6652', '0'), +('12', '41', '17', '1226', '6170', '0'), +('12', '41', '17', '1214', '6164', '0'), +('12', '41', '7', '1227', '2604', '0'), +('12', '41', '7', '1218', '2524', '0'), +('12', '41', '7', '1648', '2110', '0'), +('12', '41', '7', '1362', '1624', '0'), +('12', '41', '9', '12803', '2020', '0'), +('12', '41', '9', '1649', '1810', '0'), +('12', '41', '9', '4408', '1519', '0'), +('12', '41', '9', '4344', '1251', '0'), +('12', '41', '15', '11686', '4520', '0'), +('12', '41', '15', '10150', '1804', '0'), +('12', '41', '15', '10163', '1500', '0'), +('12', '41', '15', '14651', '1424', '0'), +('12', '41', '20', '11666', '5356', '0'), +('12', '41', '20', '2742', '3165', '0'), +('12', '41', '20', '1364', '1281', '0'), +('12', '41', '20', '1217', '1224', '0'), +('12', '41', '12', '1229', '3312', '0'), +('12', '41', '12', '20655', '2416', '0'), +('12', '41', '12', '2336', '2098', '0'), +('12', '41', '12', '2923', '2074', '0'), +('12', '41', '18', '1651', '1627', '0'), +('12', '41', '18', '4410', '742', '0'), +('12', '41', '18', '1230', '514', '0'), +('12', '41', '18', '1221', '454', '0'), +('12', '41', '19', '4407', '2735', '0'), +('12', '41', '19', '68239', '2215', '0'), +('12', '41', '19', '1652', '1234', '0'), +('12', '41', '19', '1368', '1216', '0'), +('12', '41', '13', '14337', '6073', '0'), +('12', '41', '13', '20656', '5116', '0'), +('12', '41', '13', '6359', '3825', '0'), +('12', '41', '13', '14360', '3672', '0'), +('12', '41', '14', '20656', '5116', '0'), +('12', '41', '14', '6359', '3825', '0'), +('12', '41', '14', '10219', '3681', '0'), +('12', '41', '14', '9246', '2984', '0'), +('12', '41', '11', '9246', '2984', '0'), +('12', '41', '11', '13353', '1500', '0'), +('12', '41', '11', '14762', '1404', '0'), +('12', '41', '11', '20677', '450', '0'), +('12', '42', '22', '10323', '0', '0'), +('12', '42', '22', '9246', '0', '0'), +('12', '42', '22', '21509', '0', '0'), +('12', '42', '22', '8007', '0', '0'), +('12', '42', '1', '14702', '2350', '0'), +('12', '42', '1', '30361', '2040', '0'), +('12', '42', '1', '10082', '1923', '0'), +('12', '42', '1', '14701', '1862', '0'), +('12', '42', '2', '1271', '4678', '0'), +('12', '42', '2', '10143', '3368', '0'), +('12', '42', '2', '1225', '3212', '0'), +('12', '42', '2', '1211', '3131', '0'), +('12', '42', '3', '11052', '4566', '0'), +('12', '42', '3', '1272', '3323', '0'), +('12', '42', '3', '4505', '2161', '0'), +('12', '42', '3', '2366', '1546', '0'), +('12', '42', '5', '27710', '4552', '0'), +('12', '42', '5', '14703', '3850', '0'), +('12', '42', '5', '11646', '3257', '0'), +('12', '42', '5', '14556', '3018', '0'), +('12', '42', '8', '11603', '8050', '0'), +('12', '42', '8', '2349', '2154', '0'), +('12', '42', '8', '1057', '1720', '0'), +('12', '42', '8', '2364', '1245', '0'), +('12', '42', '6', '1557', '5310', '0'), +('12', '42', '6', '1542', '4911', '0'), +('12', '42', '6', '1905', '3081', '0'), +('12', '42', '6', '1273', '2902', '0'), +('12', '42', '17', '11641', '8148', '0'), +('12', '42', '17', '1644', '6689', '0'), +('12', '42', '17', '1226', '6275', '0'), +('12', '42', '17', '1214', '6261', '0'), +('12', '42', '7', '1227', '2655', '0'), +('12', '42', '7', '1218', '2575', '0'), +('12', '42', '7', '1648', '2146', '0'), +('12', '42', '7', '1362', '1624', '0'), +('12', '42', '9', '12803', '1984', '0'), +('12', '42', '9', '1649', '1831', '0'), +('12', '42', '9', '4408', '1555', '0'), +('12', '42', '9', '4344', '1251', '0'), +('12', '42', '15', '11686', '4556', '0'), +('12', '42', '15', '10150', '1804', '0'), +('12', '42', '15', '10163', '1500', '0'), +('12', '42', '15', '14651', '1424', '0'), +('12', '42', '20', '11666', '5358', '0'), +('12', '42', '20', '2742', '3168', '0'), +('12', '42', '20', '1364', '1310', '0'), +('12', '42', '20', '1217', '1231', '0'), +('12', '42', '12', '1229', '3362', '0'), +('12', '42', '12', '20655', '2431', '0'), +('12', '42', '12', '2336', '2134', '0'), +('12', '42', '12', '2923', '2074', '0'), +('12', '42', '18', '1651', '1648', '0'), +('12', '42', '18', '4410', '742', '0'), +('12', '42', '18', '1230', '514', '0'), +('12', '42', '18', '1221', '454', '0'), +('12', '42', '19', '4407', '2800', '0'), +('12', '42', '19', '68239', '2237', '0'), +('12', '42', '19', '1652', '1234', '0'), +('12', '42', '19', '1368', '1216', '0'), +('12', '42', '13', '14337', '6145', '0'), +('12', '42', '13', '20656', '5152', '0'), +('12', '42', '13', '6359', '3897', '0'), +('12', '42', '13', '14360', '3745', '0'), +('12', '42', '14', '20656', '5152', '0'), +('12', '42', '14', '6359', '3897', '0'), +('12', '42', '14', '10219', '3681', '0'), +('12', '42', '14', '9246', '3056', '0'), +('12', '42', '11', '9246', '3056', '0'), +('12', '42', '11', '13353', '1500', '0'), +('12', '42', '11', '14762', '1404', '0'), +('12', '42', '11', '20677', '450', '0'), +('12', '43', '22', '10323', '0', '0'), +('12', '43', '22', '9246', '0', '0'), +('12', '43', '22', '21509', '0', '0'), +('12', '43', '22', '8007', '0', '0'), +('12', '43', '1', '14702', '2350', '0'), +('12', '43', '1', '30361', '2040', '0'), +('12', '43', '1', '10082', '1966', '0'), +('12', '43', '1', '14701', '1862', '0'), +('12', '43', '2', '1271', '4736', '0'), +('12', '43', '2', '10143', '3368', '0'), +('12', '43', '2', '1225', '3264', '0'), +('12', '43', '2', '1211', '3182', '0'), +('12', '43', '3', '11052', '4675', '0'), +('12', '43', '3', '1272', '3388', '0'), +('12', '43', '3', '4505', '2212', '0'), +('12', '43', '3', '2366', '1582', '0'), +('12', '43', '5', '27710', '4589', '0'), +('12', '43', '5', '14703', '3850', '0'), +('12', '43', '5', '11646', '3352', '0'), +('12', '43', '5', '14556', '3018', '0'), +('12', '43', '8', '11603', '8115', '0'), +('12', '43', '8', '2349', '2154', '0'), +('12', '43', '8', '1057', '1757', '0'), +('12', '43', '8', '2340', '1271', '0'), +('12', '43', '6', '1557', '5310', '0'), +('12', '43', '6', '1542', '4976', '0'), +('12', '43', '6', '1905', '3082', '0'), +('12', '43', '6', '1273', '2939', '0'), +('12', '43', '17', '11641', '8257', '0'), +('12', '43', '17', '1644', '6725', '0'), +('12', '43', '17', '1226', '6379', '0'), +('12', '43', '17', '1214', '6359', '0'), +('12', '43', '7', '1227', '2706', '0'), +('12', '43', '7', '1218', '2626', '0'), +('12', '43', '7', '1648', '2182', '0'), +('12', '43', '7', '1362', '1624', '0'), +('12', '43', '9', '12803', '1948', '0'), +('12', '43', '9', '1649', '1853', '0'), +('12', '43', '9', '4408', '1592', '0'), +('12', '43', '9', '4344', '1251', '0'), +('12', '43', '15', '11686', '4592', '0'), +('12', '43', '15', '10150', '1804', '0'), +('12', '43', '15', '10163', '1500', '0'), +('12', '43', '15', '14651', '1424', '0'), +('12', '43', '20', '11666', '5360', '0'), +('12', '43', '20', '2742', '3170', '0'), +('12', '43', '20', '1364', '1339', '0'), +('12', '43', '20', '1217', '1238', '0'), +('12', '43', '12', '1229', '3413', '0'), +('12', '43', '12', '20655', '2446', '0'), +('12', '43', '12', '2336', '2170', '0'), +('12', '43', '12', '2923', '2074', '0'), +('12', '43', '18', '1651', '1670', '0'), +('12', '43', '18', '4410', '742', '0'), +('12', '43', '18', '1230', '515', '0'), +('12', '43', '18', '1221', '454', '0'), +('12', '43', '19', '4407', '2865', '0'), +('12', '43', '19', '68239', '2258', '0'), +('12', '43', '19', '1652', '1234', '0'), +('12', '43', '19', '1368', '1216', '0'), +('12', '43', '13', '14337', '6218', '0'), +('12', '43', '13', '20656', '5189', '0'), +('12', '43', '13', '6359', '3970', '0'), +('12', '43', '13', '14360', '3817', '0'), +('12', '43', '14', '20656', '5189', '0'), +('12', '43', '14', '6359', '3970', '0'), +('12', '43', '14', '10219', '3681', '0'), +('12', '43', '14', '9246', '3129', '0'), +('12', '43', '11', '9246', '3129', '0'), +('12', '43', '11', '13353', '1500', '0'), +('12', '43', '11', '14762', '1404', '0'), +('12', '43', '11', '20677', '450', '0'), +('12', '44', '22', '10323', '0', '0'), +('12', '44', '22', '9246', '0', '0'), +('12', '44', '22', '21509', '0', '0'), +('12', '44', '22', '8007', '0', '0'), +('12', '44', '1', '14702', '2350', '0'), +('12', '44', '1', '30361', '2040', '0'), +('12', '44', '1', '10082', '2010', '0'), +('12', '44', '1', '14701', '1862', '0'), +('12', '44', '2', '1271', '4794', '0'), +('12', '44', '2', '10143', '3368', '0'), +('12', '44', '2', '1225', '3316', '0'), +('12', '44', '2', '1211', '3233', '0'), +('12', '44', '3', '11052', '4784', '0'), +('12', '44', '3', '1272', '3454', '0'), +('12', '44', '3', '4505', '2263', '0'), +('12', '44', '3', '2366', '1619', '0'), +('12', '44', '5', '27710', '4625', '0'), +('12', '44', '5', '14703', '3850', '0'), +('12', '44', '5', '11646', '3446', '0'), +('12', '44', '5', '14556', '3018', '0'), +('12', '44', '8', '11603', '8181', '0'), +('12', '44', '8', '2349', '2154', '0'), +('12', '44', '8', '1057', '1793', '0'), +('12', '44', '8', '2340', '1300', '0'), +('12', '44', '6', '1557', '5310', '0'), +('12', '44', '6', '1542', '5041', '0'), +('12', '44', '6', '1905', '3083', '0'), +('12', '44', '6', '1273', '2975', '0'), +('12', '44', '17', '11641', '8365', '0'), +('12', '44', '17', '1644', '6761', '0'), +('12', '44', '17', '1226', '6484', '0'), +('12', '44', '17', '1214', '6456', '0'), +('12', '44', '7', '1227', '2757', '0'), +('12', '44', '7', '1218', '2677', '0'), +('12', '44', '7', '1648', '2219', '0'), +('12', '44', '7', '1362', '1624', '0'), +('12', '44', '9', '12803', '1911', '0'), +('12', '44', '9', '1649', '1875', '0'), +('12', '44', '9', '4408', '1628', '0'), +('12', '44', '9', '4344', '1251', '0'), +('12', '44', '15', '11686', '4628', '0'), +('12', '44', '15', '10150', '1804', '0'), +('12', '44', '15', '10163', '1500', '0'), +('12', '44', '15', '14651', '1424', '0'), +('12', '44', '20', '11666', '5361', '0'), +('12', '44', '20', '2742', '3173', '0'), +('12', '44', '20', '1364', '1368', '0'), +('12', '44', '20', '1217', '1245', '0'), +('12', '44', '12', '1229', '3464', '0'), +('12', '44', '12', '20655', '2461', '0'), +('12', '44', '12', '2336', '2207', '0'), +('12', '44', '12', '2923', '2074', '0'), +('12', '44', '18', '1651', '1692', '0'), +('12', '44', '18', '4410', '742', '0'), +('12', '44', '18', '1230', '516', '0'), +('12', '44', '18', '1221', '454', '0'), +('12', '44', '19', '4407', '2930', '0'), +('12', '44', '19', '68239', '2280', '0'), +('12', '44', '19', '1652', '1234', '0'), +('12', '44', '19', '1368', '1216', '0'), +('12', '44', '13', '14337', '6290', '0'), +('12', '44', '13', '20656', '5225', '0'), +('12', '44', '13', '6359', '4042', '0'), +('12', '44', '13', '14360', '3890', '0'), +('12', '44', '14', '20656', '5225', '0'), +('12', '44', '14', '6359', '4042', '0'), +('12', '44', '14', '10219', '3681', '0'), +('12', '44', '14', '9246', '3201', '0'), +('12', '44', '11', '9246', '3201', '0'), +('12', '44', '11', '13353', '1500', '0'), +('12', '44', '11', '14762', '1404', '0'), +('12', '44', '11', '20677', '450', '0'), +('12', '45', '22', '10323', '0', '0'), +('12', '45', '22', '9246', '0', '0'), +('12', '45', '22', '21509', '0', '0'), +('12', '45', '22', '8007', '0', '0'), +('12', '45', '1', '14702', '2350', '0'), +('12', '45', '1', '10082', '2053', '0'), +('12', '45', '1', '30361', '2040', '0'), +('12', '45', '1', '14701', '1862', '0'), +('12', '45', '2', '1271', '4852', '0'), +('12', '45', '2', '10143', '3368', '0'), +('12', '45', '2', '1225', '3368', '0'), +('12', '45', '2', '1211', '3283', '0'), +('12', '45', '3', '11052', '4892', '0'), +('12', '45', '3', '1272', '3519', '0'), +('12', '45', '3', '4505', '2313', '0'), +('12', '45', '3', '2366', '1655', '0'), +('12', '45', '5', '27710', '4661', '0'), +('12', '45', '5', '14703', '3850', '0'), +('12', '45', '5', '11646', '3540', '0'), +('12', '45', '5', '14556', '3018', '0'), +('12', '45', '8', '11603', '8246', '0'), +('12', '45', '8', '2349', '2154', '0'), +('12', '45', '8', '1057', '1829', '0'), +('12', '45', '8', '2340', '1329', '0'), +('12', '45', '6', '1557', '5310', '0'), +('12', '45', '6', '1542', '5107', '0'), +('12', '45', '6', '1905', '3085', '0'), +('12', '45', '6', '1273', '3011', '0'), +('12', '45', '17', '11641', '8474', '0'), +('12', '45', '17', '1644', '6797', '0'), +('12', '45', '17', '1226', '6589', '0'), +('12', '45', '17', '1214', '6553', '0'), +('12', '45', '7', '1227', '2807', '0'), +('12', '45', '7', '1218', '2727', '0'), +('12', '45', '7', '1648', '2255', '0'), +('12', '45', '7', '1362', '1624', '0'), +('12', '45', '9', '1649', '1897', '0'), +('12', '45', '9', '12803', '1875', '0'), +('12', '45', '9', '4408', '1664', '0'), +('12', '45', '9', '4344', '1251', '0'), +('12', '45', '15', '11686', '4665', '0'), +('12', '45', '15', '10150', '1804', '0'), +('12', '45', '15', '10163', '1500', '0'), +('12', '45', '15', '14651', '1424', '0'), +('12', '45', '20', '11666', '5363', '0'), +('12', '45', '20', '2742', '3175', '0'), +('12', '45', '20', '1364', '1397', '0'), +('12', '45', '20', '1217', '1253', '0'), +('12', '45', '12', '1229', '3515', '0'), +('12', '45', '12', '20655', '2476', '0'), +('12', '45', '12', '2336', '2243', '0'), +('12', '45', '12', '2923', '2074', '0'), +('12', '45', '18', '1651', '1714', '0'), +('12', '45', '18', '4410', '742', '0'), +('12', '45', '18', '1230', '516', '0'), +('12', '45', '18', '1221', '454', '0'), +('12', '45', '19', '4407', '2996', '0'), +('12', '45', '19', '68239', '2302', '0'), +('12', '45', '19', '1652', '1234', '0'), +('12', '45', '19', '1368', '1216', '0'), +('12', '45', '13', '14337', '6363', '0'), +('12', '45', '13', '20656', '5261', '0'), +('12', '45', '13', '6359', '4115', '0'), +('12', '45', '13', '14360', '3962', '0'), +('12', '45', '14', '20656', '5261', '0'), +('12', '45', '14', '6359', '4115', '0'), +('12', '45', '14', '10219', '3681', '0'), +('12', '45', '14', '9246', '3274', '0'), +('12', '45', '11', '9246', '3274', '0'), +('12', '45', '11', '13353', '1500', '0'), +('12', '45', '11', '14762', '1404', '0'), +('12', '45', '11', '20677', '450', '0'), +('12', '46', '22', '10323', '0', '0'), +('12', '46', '22', '9246', '0', '0'), +('12', '46', '22', '21509', '0', '0'), +('12', '46', '22', '8007', '0', '0'), +('12', '46', '1', '14702', '2350', '0'), +('12', '46', '1', '10082', '2097', '0'), +('12', '46', '1', '30361', '2040', '0'), +('12', '46', '1', '14701', '1862', '0'), +('12', '46', '2', '1271', '4910', '0'), +('12', '46', '2', '1225', '3420', '0'), +('12', '46', '2', '10143', '3368', '0'), +('12', '46', '2', '1211', '3334', '0'), +('12', '46', '3', '11052', '5001', '0'), +('12', '46', '3', '1272', '3584', '0'), +('12', '46', '3', '4505', '2364', '0'), +('12', '46', '3', '2366', '1691', '0'), +('12', '46', '5', '27710', '4697', '0'), +('12', '46', '5', '14703', '3850', '0'), +('12', '46', '5', '11646', '3634', '0'), +('12', '46', '5', '14556', '3018', '0'), +('12', '46', '8', '11603', '8311', '0'), +('12', '46', '8', '2349', '2154', '0'), +('12', '46', '8', '1057', '1865', '0'), +('12', '46', '8', '2340', '1358', '0'), +('12', '46', '6', '1557', '5310', '0'), +('12', '46', '6', '1542', '5172', '0'), +('12', '46', '6', '1905', '3086', '0'), +('12', '46', '6', '1273', '3047', '0'), +('12', '46', '17', '11641', '8583', '0'), +('12', '46', '17', '1644', '6833', '0'), +('12', '46', '17', '1226', '6694', '0'), +('12', '46', '17', '1214', '6651', '0'), +('12', '46', '7', '1227', '2858', '0'), +('12', '46', '7', '1218', '2778', '0'), +('12', '46', '7', '1648', '2291', '0'), +('12', '46', '7', '1362', '1624', '0'), +('12', '46', '9', '1649', '1918', '0'), +('12', '46', '9', '12803', '1839', '0'), +('12', '46', '9', '4408', '1700', '0'), +('12', '46', '9', '4344', '1251', '0'), +('12', '46', '15', '11686', '4701', '0'), +('12', '46', '15', '10150', '1804', '0'), +('12', '46', '15', '10163', '1500', '0'), +('12', '46', '15', '14651', '1424', '0'), +('12', '46', '20', '11666', '5365', '0'), +('12', '46', '20', '2742', '3178', '0'), +('12', '46', '20', '1364', '1426', '0'), +('12', '46', '20', '1217', '1260', '0'), +('12', '46', '12', '1229', '3565', '0'), +('12', '46', '12', '20655', '2491', '0'), +('12', '46', '12', '2336', '2279', '0'), +('12', '46', '12', '2923', '2074', '0'), +('12', '46', '18', '1651', '1735', '0'), +('12', '46', '18', '4410', '742', '0'), +('12', '46', '18', '1230', '517', '0'), +('12', '46', '18', '1221', '454', '0'), +('12', '46', '19', '4407', '3061', '0'), +('12', '46', '19', '68239', '2324', '0'), +('12', '46', '19', '1652', '1234', '0'), +('12', '46', '19', '1368', '1216', '0'), +('12', '46', '13', '14337', '6435', '0'), +('12', '46', '13', '20656', '5297', '0'), +('12', '46', '13', '6359', '4187', '0'), +('12', '46', '13', '14360', '4034', '0'), +('12', '46', '14', '20656', '5297', '0'), +('12', '46', '14', '6359', '4187', '0'), +('12', '46', '14', '10219', '3681', '0'), +('12', '46', '14', '9246', '3346', '0'), +('12', '46', '11', '9246', '3346', '0'), +('12', '46', '11', '13353', '1500', '0'), +('12', '46', '11', '14762', '1404', '0'), +('12', '46', '11', '20677', '450', '0'), +('12', '47', '22', '10323', '0', '0'), +('12', '47', '22', '9246', '0', '0'), +('12', '47', '22', '21509', '0', '0'), +('12', '47', '22', '8007', '0', '0'), +('12', '47', '1', '14702', '2350', '0'), +('12', '47', '1', '10082', '2140', '0'), +('12', '47', '1', '30361', '2040', '0'), +('12', '47', '1', '14701', '1862', '0'), +('12', '47', '2', '1271', '4968', '0'), +('12', '47', '2', '1225', '3472', '0'), +('12', '47', '2', '1211', '3385', '0'), +('12', '47', '2', '10143', '3368', '0'), +('12', '47', '3', '11052', '5110', '0'), +('12', '47', '3', '1272', '3649', '0'), +('12', '47', '3', '4505', '2415', '0'), +('12', '47', '3', '2366', '1727', '0'), +('12', '47', '5', '27710', '4733', '0'), +('12', '47', '5', '14703', '3850', '0'), +('12', '47', '5', '11646', '3729', '0'), +('12', '47', '5', '14556', '3018', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '47', '8', '11603', '8376', '0'), +('12', '47', '8', '2349', '2154', '0'), +('12', '47', '8', '1057', '1902', '0'), +('12', '47', '8', '2340', '1387', '0'), +('12', '47', '6', '1557', '5310', '0'), +('12', '47', '6', '1542', '5237', '0'), +('12', '47', '6', '1905', '3087', '0'), +('12', '47', '6', '1273', '3083', '0'), +('12', '47', '17', '11641', '8691', '0'), +('12', '47', '17', '1644', '6870', '0'), +('12', '47', '17', '1226', '6799', '0'), +('12', '47', '17', '1214', '6748', '0'), +('12', '47', '7', '1227', '2909', '0'), +('12', '47', '7', '1218', '2829', '0'), +('12', '47', '7', '1648', '2327', '0'), +('12', '47', '7', '1362', '1624', '0'), +('12', '47', '9', '1649', '1940', '0'), +('12', '47', '9', '12803', '1803', '0'), +('12', '47', '9', '4408', '1737', '0'), +('12', '47', '9', '4344', '1251', '0'), +('12', '47', '15', '11686', '4737', '0'), +('12', '47', '15', '10150', '1804', '0'), +('12', '47', '15', '10163', '1500', '0'), +('12', '47', '15', '14651', '1424', '0'), +('12', '47', '20', '11666', '5366', '0'), +('12', '47', '20', '2742', '3180', '0'), +('12', '47', '20', '1364', '1455', '0'), +('12', '47', '20', '1217', '1267', '0'), +('12', '47', '12', '1229', '3616', '0'), +('12', '47', '12', '20655', '2505', '0'), +('12', '47', '12', '2336', '2315', '0'), +('12', '47', '12', '1650', '2092', '0'), +('12', '47', '18', '1651', '1757', '0'), +('12', '47', '18', '4410', '742', '0'), +('12', '47', '18', '1230', '518', '0'), +('12', '47', '18', '1221', '454', '0'), +('12', '47', '19', '4407', '3126', '0'), +('12', '47', '19', '68239', '2345', '0'), +('12', '47', '19', '1652', '1234', '0'), +('12', '47', '19', '1368', '1216', '0'), +('12', '47', '13', '14337', '6508', '0'), +('12', '47', '13', '20656', '5333', '0'), +('12', '47', '13', '6359', '4260', '0'), +('12', '47', '13', '14360', '4107', '0'), +('12', '47', '14', '20656', '5333', '0'), +('12', '47', '14', '6359', '4260', '0'), +('12', '47', '14', '10219', '3681', '0'), +('12', '47', '14', '9246', '3419', '0'), +('12', '47', '11', '9246', '3419', '0'), +('12', '47', '11', '13353', '1500', '0'), +('12', '47', '11', '14762', '1404', '0'), +('12', '47', '11', '20677', '450', '0'), +('12', '48', '22', '10323', '0', '0'), +('12', '48', '22', '9246', '0', '0'), +('12', '48', '22', '21509', '0', '0'), +('12', '48', '22', '8007', '0', '0'), +('12', '48', '1', '14702', '2350', '0'), +('12', '48', '1', '10082', '2184', '0'), +('12', '48', '1', '30361', '2040', '0'), +('12', '48', '1', '14701', '1862', '0'), +('12', '48', '2', '1271', '5026', '0'), +('12', '48', '2', '1225', '3524', '0'), +('12', '48', '2', '1211', '3436', '0'), +('12', '48', '2', '10143', '3368', '0'), +('12', '48', '3', '11052', '5219', '0'), +('12', '48', '3', '1272', '3715', '0'), +('12', '48', '3', '4505', '2466', '0'), +('12', '48', '3', '2366', '1764', '0'), +('12', '48', '5', '27710', '4770', '0'), +('12', '48', '5', '14703', '3850', '0'), +('12', '48', '5', '11646', '3823', '0'), +('12', '48', '5', '14556', '3018', '0'), +('12', '48', '8', '11603', '8442', '0'), +('12', '48', '8', '2349', '2154', '0'), +('12', '48', '8', '1057', '1938', '0'), +('12', '48', '8', '2340', '1416', '0'), +('12', '48', '6', '1557', '5310', '0'), +('12', '48', '6', '1542', '5302', '0'), +('12', '48', '6', '1273', '3120', '0'), +('12', '48', '6', '1905', '3088', '0'), +('12', '48', '17', '11641', '8800', '0'), +('12', '48', '17', '1644', '6906', '0'), +('12', '48', '17', '1226', '6904', '0'), +('12', '48', '17', '1214', '6845', '0'), +('12', '48', '7', '1227', '2959', '0'), +('12', '48', '7', '1218', '2879', '0'), +('12', '48', '7', '1648', '2364', '0'), +('12', '48', '7', '1362', '1624', '0'), +('12', '48', '9', '1649', '1962', '0'), +('12', '48', '9', '4408', '1773', '0'), +('12', '48', '9', '12803', '1767', '0'), +('12', '48', '9', '4344', '1251', '0'), +('12', '48', '15', '11686', '4773', '0'), +('12', '48', '15', '10150', '1804', '0'), +('12', '48', '15', '10163', '1500', '0'), +('12', '48', '15', '14651', '1424', '0'), +('12', '48', '20', '11666', '5368', '0'), +('12', '48', '20', '2742', '3182', '0'), +('12', '48', '20', '1364', '1484', '0'), +('12', '48', '20', '1217', '1274', '0'), +('12', '48', '12', '1229', '3667', '0'), +('12', '48', '12', '20655', '2520', '0'), +('12', '48', '12', '2336', '2352', '0'), +('12', '48', '12', '1650', '2121', '0'), +('12', '48', '18', '1651', '1779', '0'), +('12', '48', '18', '4410', '742', '0'), +('12', '48', '18', '1230', '519', '0'), +('12', '48', '18', '1221', '454', '0'), +('12', '48', '19', '4407', '3191', '0'), +('12', '48', '19', '68239', '2367', '0'), +('12', '48', '19', '1652', '1234', '0'), +('12', '48', '19', '1368', '1216', '0'), +('12', '48', '13', '14337', '6580', '0'), +('12', '48', '13', '20656', '5370', '0'), +('12', '48', '13', '6359', '4332', '0'), +('12', '48', '13', '14360', '4179', '0'), +('12', '48', '14', '20656', '5370', '0'), +('12', '48', '14', '6359', '4332', '0'), +('12', '48', '14', '10219', '3681', '0'), +('12', '48', '14', '9246', '3491', '0'), +('12', '48', '11', '9246', '3491', '0'), +('12', '48', '11', '13353', '1500', '0'), +('12', '48', '11', '14762', '1404', '0'), +('12', '48', '11', '20677', '450', '0'), +('12', '49', '22', '10323', '0', '0'), +('12', '49', '22', '9246', '0', '0'), +('12', '49', '22', '21509', '0', '0'), +('12', '49', '22', '8007', '0', '0'), +('12', '49', '1', '14702', '2350', '0'), +('12', '49', '1', '10082', '2227', '0'), +('12', '49', '1', '30361', '2040', '0'), +('12', '49', '1', '14701', '1862', '0'), +('12', '49', '2', '1271', '5083', '0'), +('12', '49', '2', '1225', '3575', '0'), +('12', '49', '2', '1211', '3486', '0'), +('12', '49', '2', '10143', '3368', '0'), +('12', '49', '3', '11052', '5327', '0'), +('12', '49', '3', '1272', '3780', '0'), +('12', '49', '3', '4505', '2516', '0'), +('12', '49', '3', '2366', '1800', '0'), +('12', '49', '5', '27710', '4806', '0'), +('12', '49', '5', '11646', '3917', '0'), +('12', '49', '5', '14703', '3850', '0'), +('12', '49', '5', '14556', '3018', '0'), +('12', '49', '8', '11603', '8507', '0'), +('12', '49', '8', '2349', '2154', '0'), +('12', '49', '8', '1057', '1974', '0'), +('12', '49', '8', '2340', '1445', '0'), +('12', '49', '6', '1542', '5368', '0'), +('12', '49', '6', '1557', '5310', '0'), +('12', '49', '6', '1273', '3156', '0'), +('12', '49', '6', '1905', '3089', '0'), +('12', '49', '17', '11641', '8909', '0'), +('12', '49', '17', '1226', '7009', '0'), +('12', '49', '17', '1214', '6943', '0'), +('12', '49', '17', '1644', '6942', '0'), +('12', '49', '7', '1227', '3010', '0'), +('12', '49', '7', '1218', '2930', '0'), +('12', '49', '7', '1648', '2400', '0'), +('12', '49', '7', '1362', '1624', '0'), +('12', '49', '9', '1649', '1984', '0'), +('12', '49', '9', '4408', '1809', '0'), +('12', '49', '9', '12803', '1730', '0'), +('12', '49', '9', '4344', '1251', '0'), +('12', '49', '15', '11686', '4810', '0'), +('12', '49', '15', '10150', '1804', '0'), +('12', '49', '15', '10163', '1500', '0'), +('12', '49', '15', '14651', '1424', '0'), +('12', '49', '20', '11666', '5370', '0'), +('12', '49', '20', '2742', '3185', '0'), +('12', '49', '20', '1364', '1513', '0'), +('12', '49', '20', '1217', '1282', '0'), +('12', '49', '12', '1229', '3717', '0'), +('12', '49', '12', '20655', '2535', '0'), +('12', '49', '12', '2336', '2388', '0'), +('12', '49', '12', '1650', '2150', '0'), +('12', '49', '18', '1651', '1800', '0'), +('12', '49', '18', '4410', '742', '0'), +('12', '49', '18', '1230', '519', '0'), +('12', '49', '18', '1221', '454', '0'), +('12', '49', '19', '4407', '3257', '0'), +('12', '49', '19', '68239', '2389', '0'), +('12', '49', '19', '1652', '1234', '0'), +('12', '49', '19', '1368', '1216', '0'), +('12', '49', '13', '14337', '6653', '0'), +('12', '49', '13', '20656', '5406', '0'), +('12', '49', '13', '6359', '4405', '0'), +('12', '49', '13', '14360', '4252', '0'), +('12', '49', '14', '20656', '5406', '0'), +('12', '49', '14', '6359', '4405', '0'), +('12', '49', '14', '10219', '3681', '0'), +('12', '49', '14', '9246', '3564', '0'), +('12', '49', '11', '9246', '3564', '0'), +('12', '49', '11', '13353', '1500', '0'), +('12', '49', '11', '14762', '1404', '0'), +('12', '49', '11', '20677', '450', '0'), +('12', '50', '22', '10323', '0', '0'), +('12', '50', '22', '9246', '0', '0'), +('12', '50', '22', '21509', '0', '0'), +('12', '50', '22', '8007', '0', '0'), +('12', '50', '1', '14702', '2350', '0'), +('12', '50', '1', '10082', '2271', '0'), +('12', '50', '1', '30361', '2040', '0'), +('12', '50', '1', '14701', '1862', '0'), +('12', '50', '2', '1271', '5141', '0'), +('12', '50', '2', '1225', '3627', '0'), +('12', '50', '2', '1211', '3537', '0'), +('12', '50', '2', '10143', '3368', '0'), +('12', '50', '3', '11052', '5436', '0'), +('12', '50', '3', '1272', '3845', '0'), +('12', '50', '3', '4505', '2567', '0'), +('12', '50', '3', '2366', '1836', '0'), +('12', '50', '5', '27710', '4842', '0'), +('12', '50', '5', '11646', '4011', '0'), +('12', '50', '5', '14703', '3850', '0'), +('12', '50', '5', '14556', '3018', '0'), +('12', '50', '8', '11603', '8572', '0'), +('12', '50', '8', '2349', '2154', '0'), +('12', '50', '8', '1057', '2010', '0'), +('12', '50', '8', '2340', '1474', '0'), +('12', '50', '6', '1542', '5433', '0'), +('12', '50', '6', '1557', '5310', '0'), +('12', '50', '6', '1273', '3192', '0'), +('12', '50', '6', '1905', '3091', '0'), +('12', '50', '17', '11641', '9018', '0'), +('12', '50', '17', '1226', '7113', '0'), +('12', '50', '17', '1214', '7040', '0'), +('12', '50', '17', '1644', '6978', '0'), +('12', '50', '7', '1227', '3061', '0'), +('12', '50', '7', '1218', '2981', '0'), +('12', '50', '7', '1648', '2436', '0'), +('12', '50', '7', '2458', '1636', '0'), +('12', '50', '9', '1649', '2005', '0'), +('12', '50', '9', '4408', '1845', '0'), +('12', '50', '9', '12803', '1694', '0'), +('12', '50', '9', '4344', '1251', '0'), +('12', '50', '15', '11686', '4846', '0'), +('12', '50', '15', '10150', '1804', '0'), +('12', '50', '15', '10163', '1500', '0'), +('12', '50', '15', '14639', '1450', '0'), +('12', '50', '20', '11666', '5371', '0'), +('12', '50', '20', '2742', '3187', '0'), +('12', '50', '20', '1364', '1542', '0'), +('12', '50', '20', '1217', '1289', '0'), +('12', '50', '12', '1229', '3768', '0'), +('12', '50', '12', '20655', '2550', '0'), +('12', '50', '12', '2336', '2424', '0'), +('12', '50', '12', '4345', '2184', '0'), +('12', '50', '18', '1651', '1822', '0'), +('12', '50', '18', '4410', '742', '0'), +('12', '50', '18', '1230', '520', '0'), +('12', '50', '18', '1221', '454', '0'), +('12', '50', '19', '4407', '3322', '0'), +('12', '50', '19', '68239', '2411', '0'), +('12', '50', '19', '1652', '1234', '0'), +('12', '50', '19', '1368', '1216', '0'), +('12', '50', '13', '14337', '6725', '0'), +('12', '50', '13', '20656', '5442', '0'), +('12', '50', '13', '6359', '4477', '0'), +('12', '50', '13', '14360', '4324', '0'), +('12', '50', '14', '20656', '5442', '0'), +('12', '50', '14', '6359', '4477', '0'), +('12', '50', '14', '10219', '3681', '0'), +('12', '50', '14', '9246', '3636', '0'), +('12', '50', '11', '9246', '3636', '0'), +('12', '50', '11', '13353', '1500', '0'), +('12', '50', '11', '14762', '1404', '0'), +('12', '50', '11', '20677', '450', '0'), +('12', '51', '22', '10323', '0', '0'), +('12', '51', '22', '9246', '0', '0'), +('12', '51', '22', '21509', '0', '0'), +('12', '51', '22', '8007', '0', '0'), +('12', '51', '1', '14702', '2350', '0'), +('12', '51', '1', '10082', '2314', '0'), +('12', '51', '1', '30361', '2040', '0'), +('12', '51', '1', '14701', '1862', '0'), +('12', '51', '2', '1271', '5199', '0'), +('12', '51', '2', '1225', '3679', '0'), +('12', '51', '2', '1211', '3588', '0'), +('12', '51', '2', '10143', '3368', '0'), +('12', '51', '3', '11052', '5545', '0'), +('12', '51', '3', '1272', '3910', '0'), +('12', '51', '3', '4505', '2618', '0'), +('12', '51', '3', '2366', '1872', '0'), +('12', '51', '5', '27710', '4878', '0'), +('12', '51', '5', '11646', '4105', '0'), +('12', '51', '5', '14703', '3850', '0'), +('12', '51', '5', '14556', '3018', '0'), +('12', '51', '8', '11603', '8637', '0'), +('12', '51', '8', '2349', '2154', '0'), +('12', '51', '8', '1057', '2047', '0'), +('12', '51', '8', '2340', '1503', '0'), +('12', '51', '6', '1542', '5498', '0'), +('12', '51', '6', '1557', '5310', '0'), +('12', '51', '6', '1273', '3228', '0'), +('12', '51', '6', '1905', '3092', '0'), +('12', '51', '17', '11641', '9126', '0'), +('12', '51', '17', '1226', '7218', '0'), +('12', '51', '17', '1214', '7137', '0'), +('12', '51', '17', '1644', '7015', '0'), +('12', '51', '7', '1227', '3112', '0'), +('12', '51', '7', '1218', '3032', '0'), +('12', '51', '7', '1648', '2472', '0'), +('12', '51', '7', '2458', '1665', '0'), +('12', '51', '9', '1649', '2027', '0'), +('12', '51', '9', '4408', '1881', '0'), +('12', '51', '9', '12803', '1658', '0'), +('12', '51', '9', '4344', '1251', '0'), +('12', '51', '15', '11686', '4882', '0'), +('12', '51', '15', '10150', '1804', '0'), +('12', '51', '15', '10163', '1500', '0'), +('12', '51', '15', '14639', '1479', '0'), +('12', '51', '20', '11666', '5373', '0'), +('12', '51', '20', '2742', '3190', '0'), +('12', '51', '20', '1364', '1571', '0'), +('12', '51', '20', '1217', '1296', '0'), +('12', '51', '12', '1229', '3819', '0'), +('12', '51', '12', '20655', '2565', '0'), +('12', '51', '12', '2336', '2460', '0'), +('12', '51', '12', '4345', '2221', '0'), +('12', '51', '18', '1651', '1844', '0'), +('12', '51', '18', '4410', '742', '0'), +('12', '51', '18', '1230', '521', '0'), +('12', '51', '18', '1221', '454', '0'), +('12', '51', '19', '4407', '3387', '0'), +('12', '51', '19', '68239', '2432', '0'), +('12', '51', '19', '1652', '1234', '0'), +('12', '51', '19', '1368', '1216', '0'), +('12', '51', '13', '14337', '6798', '0'), +('12', '51', '13', '20656', '5478', '0'), +('12', '51', '13', '6359', '4550', '0'), +('12', '51', '13', '14360', '4397', '0'), +('12', '51', '14', '20656', '5478', '0'), +('12', '51', '14', '6359', '4550', '0'), +('12', '51', '14', '9246', '3709', '0'), +('12', '51', '14', '10219', '3681', '0'), +('12', '51', '11', '9246', '3709', '0'), +('12', '51', '11', '13353', '1500', '0'), +('12', '51', '11', '14762', '1404', '0'), +('12', '51', '11', '20677', '450', '0'), +('12', '52', '22', '10323', '0', '0'), +('12', '52', '22', '9246', '0', '0'), +('12', '52', '22', '21509', '0', '0'), +('12', '52', '22', '8007', '0', '0'), +('12', '52', '1', '10082', '2358', '0'), +('12', '52', '1', '14702', '2350', '0'), +('12', '52', '1', '30361', '2040', '0'), +('12', '52', '1', '10107', '1884', '0'), +('12', '52', '2', '1271', '5257', '0'), +('12', '52', '2', '1225', '3731', '0'), +('12', '52', '2', '1211', '3638', '0'), +('12', '52', '2', '10141', '3404', '0'), +('12', '52', '3', '11052', '5653', '0'), +('12', '52', '3', '1272', '3976', '0'), +('12', '52', '3', '4505', '2668', '0'), +('12', '52', '3', '2366', '1909', '0'), +('12', '52', '5', '27710', '4915', '0'), +('12', '52', '5', '11646', '4200', '0'), +('12', '52', '5', '14703', '3850', '0'), +('12', '52', '5', '14556', '3018', '0'), +('12', '52', '8', '11603', '8702', '0'), +('12', '52', '8', '2349', '2154', '0'), +('12', '52', '8', '1057', '2083', '0'), +('12', '52', '8', '2340', '1532', '0'), +('12', '52', '6', '1542', '5563', '0'), +('12', '52', '6', '1557', '5310', '0'), +('12', '52', '6', '1273', '3265', '0'), +('12', '52', '6', '1905', '3093', '0'), +('12', '52', '17', '11641', '9235', '0'), +('12', '52', '17', '1226', '7323', '0'), +('12', '52', '17', '1214', '7235', '0'), +('12', '52', '17', '1644', '7051', '0'), +('12', '52', '7', '1227', '3162', '0'), +('12', '52', '7', '1218', '3082', '0'), +('12', '52', '7', '1648', '2509', '0'), +('12', '52', '7', '2458', '1694', '0'), +('12', '52', '9', '1649', '2049', '0'), +('12', '52', '9', '4408', '1918', '0'), +('12', '52', '9', '12803', '1622', '0'), +('12', '52', '9', '10360', '1257', '0'), +('12', '52', '15', '11686', '4918', '0'), +('12', '52', '15', '10150', '1804', '0'), +('12', '52', '15', '14639', '1508', '0'), +('12', '52', '15', '10163', '1500', '0'), +('12', '52', '20', '11666', '5375', '0'), +('12', '52', '20', '2742', '3192', '0'), +('12', '52', '20', '1364', '1600', '0'), +('12', '52', '20', '1217', '1303', '0'), +('12', '52', '12', '1229', '3870', '0'), +('12', '52', '12', '20655', '2580', '0'), +('12', '52', '12', '2336', '2497', '0'), +('12', '52', '12', '4345', '2257', '0'), +('12', '52', '18', '1651', '1866', '0'), +('12', '52', '18', '4410', '742', '0'), +('12', '52', '18', '1230', '522', '0'), +('12', '52', '18', '1221', '454', '0'), +('12', '52', '19', '4407', '3452', '0'), +('12', '52', '19', '68239', '2454', '0'), +('12', '52', '19', '1652', '1234', '0'), +('12', '52', '19', '1368', '1216', '0'), +('12', '52', '13', '14337', '6870', '0'), +('12', '52', '13', '20656', '5515', '0'), +('12', '52', '13', '6359', '4622', '0'), +('12', '52', '13', '14360', '4469', '0'), +('12', '52', '14', '20656', '5515', '0'), +('12', '52', '14', '6359', '4622', '0'), +('12', '52', '14', '9246', '3781', '0'), +('12', '52', '14', '10404', '3692', '0'), +('12', '52', '11', '9246', '3781', '0'), +('12', '52', '11', '13353', '1500', '0'), +('12', '52', '11', '14762', '1404', '0'), +('12', '52', '11', '20677', '450', '0'), +('12', '53', '22', '10323', '0', '0'), +('12', '53', '22', '9246', '0', '0'), +('12', '53', '22', '21509', '0', '0'), +('12', '53', '22', '8007', '0', '0'), +('12', '53', '1', '10082', '2401', '0'), +('12', '53', '1', '14702', '2350', '0'), +('12', '53', '1', '30361', '2040', '0'), +('12', '53', '1', '10107', '1921', '0'), +('12', '53', '2', '1271', '5315', '0'), +('12', '53', '2', '1225', '3783', '0'), +('12', '53', '2', '1211', '3689', '0'), +('12', '53', '2', '10141', '3469', '0'), +('12', '53', '3', '11052', '5762', '0'), +('12', '53', '3', '1272', '4041', '0'), +('12', '53', '3', '4505', '2719', '0'), +('12', '53', '3', '2366', '1945', '0'), +('12', '53', '5', '27710', '4951', '0'), +('12', '53', '5', '11646', '4294', '0'), +('12', '53', '5', '14703', '3850', '0'), +('12', '53', '5', '14556', '3018', '0'), +('12', '53', '8', '11603', '8768', '0'), +('12', '53', '8', '2349', '2154', '0'), +('12', '53', '8', '1057', '2119', '0'), +('12', '53', '8', '2340', '1561', '0'), +('12', '53', '6', '1542', '5629', '0'), +('12', '53', '6', '1557', '5310', '0'), +('12', '53', '6', '1273', '3301', '0'), +('12', '53', '6', '1905', '3094', '0'), +('12', '53', '17', '11641', '9344', '0'), +('12', '53', '17', '1226', '7428', '0'), +('12', '53', '17', '1214', '7332', '0'), +('12', '53', '17', '1644', '7087', '0'), +('12', '53', '7', '1227', '3213', '0'), +('12', '53', '7', '1218', '3133', '0'), +('12', '53', '7', '1648', '2545', '0'), +('12', '53', '7', '2458', '1723', '0'), +('12', '53', '9', '1649', '2071', '0'), +('12', '53', '9', '4408', '1954', '0'), +('12', '53', '9', '12803', '1585', '0'), +('12', '53', '9', '10360', '1278', '0'), +('12', '53', '15', '11686', '4955', '0'), +('12', '53', '15', '10150', '1804', '0'), +('12', '53', '15', '14639', '1537', '0'), +('12', '53', '15', '10163', '1500', '0'), +('12', '53', '20', '11666', '5376', '0'), +('12', '53', '20', '2742', '3194', '0'), +('12', '53', '20', '1364', '1629', '0'), +('12', '53', '20', '1217', '1311', '0'), +('12', '53', '12', '1229', '3920', '0'), +('12', '53', '12', '20655', '2595', '0'), +('12', '53', '12', '2336', '2533', '0'), +('12', '53', '12', '4345', '2293', '0'), +('12', '53', '18', '1651', '1887', '0'), +('12', '53', '18', '4410', '742', '0'), +('12', '53', '18', '1230', '522', '0'), +('12', '53', '18', '1221', '454', '0'), +('12', '53', '19', '4407', '3517', '0'), +('12', '53', '19', '68239', '2476', '0'), +('12', '53', '19', '1652', '1234', '0'), +('12', '53', '19', '1368', '1216', '0'), +('12', '53', '13', '14337', '6943', '0'), +('12', '53', '13', '20656', '5551', '0'), +('12', '53', '13', '6359', '4694', '0'), +('12', '53', '13', '14360', '4542', '0'), +('12', '53', '14', '20656', '5551', '0'), +('12', '53', '14', '6359', '4694', '0'), +('12', '53', '14', '9246', '3854', '0'), +('12', '53', '14', '10404', '3757', '0'), +('12', '53', '11', '9246', '3854', '0'), +('12', '53', '11', '13353', '1500', '0'), +('12', '53', '11', '14762', '1404', '0'), +('12', '53', '11', '20677', '450', '0'), +('12', '54', '22', '10323', '0', '0'), +('12', '54', '22', '9246', '0', '0'), +('12', '54', '22', '21509', '0', '0'), +('12', '54', '22', '8007', '0', '0'), +('12', '54', '1', '10082', '2445', '0'), +('12', '54', '1', '14702', '2350', '0'), +('12', '54', '1', '30361', '2040', '0'), +('12', '54', '1', '10107', '1957', '0'), +('12', '54', '2', '1271', '5373', '0'), +('12', '54', '2', '1225', '3835', '0'), +('12', '54', '2', '1211', '3740', '0'), +('12', '54', '2', '10141', '3535', '0'), +('12', '54', '3', '11052', '5871', '0'), +('12', '54', '3', '1272', '4106', '0'), +('12', '54', '3', '4505', '2770', '0'), +('12', '54', '3', '2366', '1981', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '54', '5', '27710', '4987', '0'), +('12', '54', '5', '11646', '4388', '0'), +('12', '54', '5', '14703', '3850', '0'), +('12', '54', '5', '14556', '3018', '0'), +('12', '54', '8', '11603', '8833', '0'), +('12', '54', '8', '1057', '2155', '0'), +('12', '54', '8', '2349', '2154', '0'), +('12', '54', '8', '2340', '1590', '0'), +('12', '54', '6', '1542', '5694', '0'), +('12', '54', '6', '1557', '5310', '0'), +('12', '54', '6', '1273', '3337', '0'), +('12', '54', '6', '1905', '3095', '0'), +('12', '54', '17', '11641', '9452', '0'), +('12', '54', '17', '1226', '7533', '0'), +('12', '54', '17', '1214', '7430', '0'), +('12', '54', '17', '1644', '7123', '0'), +('12', '54', '7', '1227', '3264', '0'), +('12', '54', '7', '1218', '3184', '0'), +('12', '54', '7', '1648', '2581', '0'), +('12', '54', '7', '2458', '1752', '0'), +('12', '54', '9', '1649', '2092', '0'), +('12', '54', '9', '4408', '1990', '0'), +('12', '54', '9', '12803', '1549', '0'), +('12', '54', '9', '10360', '1300', '0'), +('12', '54', '15', '11686', '4991', '0'), +('12', '54', '15', '10150', '1804', '0'), +('12', '54', '15', '14639', '1566', '0'), +('12', '54', '15', '10163', '1500', '0'), +('12', '54', '20', '11666', '5378', '0'), +('12', '54', '20', '2742', '3197', '0'), +('12', '54', '20', '1364', '1658', '0'), +('12', '54', '20', '1217', '1318', '0'), +('12', '54', '12', '1229', '3971', '0'), +('12', '54', '12', '20655', '2610', '0'), +('12', '54', '12', '2336', '2569', '0'), +('12', '54', '12', '4345', '2329', '0'), +('12', '54', '18', '1651', '1909', '0'), +('12', '54', '18', '4410', '742', '0'), +('12', '54', '18', '1230', '523', '0'), +('12', '54', '18', '1221', '454', '0'), +('12', '54', '19', '4407', '3583', '0'), +('12', '54', '19', '68239', '2498', '0'), +('12', '54', '19', '1652', '1234', '0'), +('12', '54', '19', '1368', '1216', '0'), +('12', '54', '13', '14337', '7015', '0'), +('12', '54', '13', '20656', '5587', '0'), +('12', '54', '13', '6359', '4767', '0'), +('12', '54', '13', '14360', '4614', '0'), +('12', '54', '14', '20656', '5587', '0'), +('12', '54', '14', '6359', '4767', '0'), +('12', '54', '14', '9246', '3926', '0'), +('12', '54', '14', '10404', '3823', '0'), +('12', '54', '11', '9246', '3926', '0'), +('12', '54', '11', '13353', '1500', '0'), +('12', '54', '11', '14762', '1404', '0'), +('12', '54', '11', '20677', '450', '0'), +('12', '55', '22', '10323', '0', '0'), +('12', '55', '22', '9246', '0', '0'), +('12', '55', '22', '21509', '0', '0'), +('12', '55', '22', '8007', '0', '0'), +('12', '55', '1', '10082', '2488', '0'), +('12', '55', '1', '14702', '2350', '0'), +('12', '55', '1', '30361', '2040', '0'), +('12', '55', '1', '10107', '1993', '0'), +('12', '55', '2', '1271', '5431', '0'), +('12', '55', '2', '1225', '3887', '0'), +('12', '55', '2', '1211', '3791', '0'), +('12', '55', '2', '10141', '3600', '0'), +('12', '55', '3', '11052', '5980', '0'), +('12', '55', '3', '1272', '4171', '0'), +('12', '55', '3', '4505', '2821', '0'), +('12', '55', '3', '2366', '2017', '0'), +('12', '55', '5', '27710', '5023', '0'), +('12', '55', '5', '11646', '4482', '0'), +('12', '55', '5', '14703', '3850', '0'), +('12', '55', '5', '14556', '3018', '0'), +('12', '55', '8', '11603', '8898', '0'), +('12', '55', '8', '1057', '2192', '0'), +('12', '55', '8', '2349', '2154', '0'), +('12', '55', '8', '2340', '1619', '0'), +('12', '55', '6', '1542', '5759', '0'), +('12', '55', '6', '1557', '5310', '0'), +('12', '55', '6', '1273', '3373', '0'), +('12', '55', '6', '1905', '3097', '0'), +('12', '55', '17', '11641', '9561', '0'), +('12', '55', '17', '1226', '7638', '0'), +('12', '55', '17', '1214', '7527', '0'), +('12', '55', '17', '1644', '7160', '0'), +('12', '55', '7', '1227', '3315', '0'), +('12', '55', '7', '1218', '3235', '0'), +('12', '55', '7', '1648', '2617', '0'), +('12', '55', '7', '2458', '1781', '0'), +('12', '55', '9', '1649', '2114', '0'), +('12', '55', '9', '4408', '2026', '0'), +('12', '55', '9', '12803', '1513', '0'), +('12', '55', '9', '10360', '1322', '0'), +('12', '55', '15', '11686', '5027', '0'), +('12', '55', '15', '10150', '1804', '0'), +('12', '55', '15', '14639', '1595', '0'), +('12', '55', '15', '10163', '1500', '0'), +('12', '55', '20', '11666', '5380', '0'), +('12', '55', '20', '2742', '3199', '0'), +('12', '55', '20', '1364', '1687', '0'), +('12', '55', '20', '1217', '1325', '0'), +('12', '55', '12', '1229', '4022', '0'), +('12', '55', '12', '20655', '2625', '0'), +('12', '55', '12', '2336', '2605', '0'), +('12', '55', '12', '4345', '2366', '0'), +('12', '55', '18', '1651', '1931', '0'), +('12', '55', '18', '4410', '742', '0'), +('12', '55', '18', '1230', '524', '0'), +('12', '55', '18', '1221', '454', '0'), +('12', '55', '19', '4407', '3648', '0'), +('12', '55', '19', '68239', '2519', '0'), +('12', '55', '19', '1652', '1234', '0'), +('12', '55', '19', '1368', '1216', '0'), +('12', '55', '13', '14337', '7088', '0'), +('12', '55', '13', '20656', '5623', '0'), +('12', '55', '13', '6359', '4839', '0'), +('12', '55', '13', '14360', '4687', '0'), +('12', '55', '14', '20656', '5623', '0'), +('12', '55', '14', '6359', '4839', '0'), +('12', '55', '14', '9246', '3998', '0'), +('12', '55', '14', '10404', '3888', '0'), +('12', '55', '11', '9246', '3998', '0'), +('12', '55', '11', '13353', '1500', '0'), +('12', '55', '11', '14762', '1404', '0'), +('12', '55', '11', '20677', '450', '0'), +('12', '56', '22', '10323', '0', '0'), +('12', '56', '22', '9246', '0', '0'), +('12', '56', '22', '21509', '0', '0'), +('12', '56', '22', '8007', '0', '0'), +('12', '56', '1', '10082', '2532', '0'), +('12', '56', '1', '14702', '2350', '0'), +('12', '56', '1', '30361', '2040', '0'), +('12', '56', '1', '10107', '2029', '0'), +('12', '56', '2', '1271', '5489', '0'), +('12', '56', '2', '1225', '3939', '0'), +('12', '56', '2', '1211', '3841', '0'), +('12', '56', '2', '10141', '3665', '0'), +('12', '56', '3', '11052', '6088', '0'), +('12', '56', '3', '1272', '4236', '0'), +('12', '56', '3', '4505', '2871', '0'), +('12', '56', '3', '2366', '2054', '0'), +('12', '56', '5', '27710', '5060', '0'), +('12', '56', '5', '11646', '4577', '0'), +('12', '56', '5', '14703', '3850', '0'), +('12', '56', '5', '14556', '3018', '0'), +('12', '56', '8', '11603', '8963', '0'), +('12', '56', '8', '1057', '2228', '0'), +('12', '56', '8', '2349', '2154', '0'), +('12', '56', '8', '2340', '1648', '0'), +('12', '56', '6', '1542', '5824', '0'), +('12', '56', '6', '1557', '5310', '0'), +('12', '56', '6', '1273', '3410', '0'), +('12', '56', '6', '1905', '3098', '0'), +('12', '56', '17', '11641', '9670', '0'), +('12', '56', '17', '1226', '7743', '0'), +('12', '56', '17', '1214', '7624', '0'), +('12', '56', '17', '1644', '7196', '0'), +('12', '56', '7', '1227', '3365', '0'), +('12', '56', '7', '1218', '3285', '0'), +('12', '56', '7', '1648', '2654', '0'), +('12', '56', '7', '2458', '1810', '0'), +('12', '56', '9', '1649', '2136', '0'), +('12', '56', '9', '4408', '2063', '0'), +('12', '56', '9', '12803', '1477', '0'), +('12', '56', '9', '10360', '1344', '0'), +('12', '56', '15', '11686', '5063', '0'), +('12', '56', '15', '10150', '1804', '0'), +('12', '56', '15', '14639', '1624', '0'), +('12', '56', '15', '10163', '1500', '0'), +('12', '56', '20', '11666', '5382', '0'), +('12', '56', '20', '2742', '3202', '0'), +('12', '56', '20', '1364', '1716', '0'), +('12', '56', '20', '1217', '1332', '0'), +('12', '56', '12', '1229', '4073', '0'), +('12', '56', '12', '2336', '2642', '0'), +('12', '56', '12', '20655', '2640', '0'), +('12', '56', '12', '4345', '2402', '0'), +('12', '56', '18', '1651', '1953', '0'), +('12', '56', '18', '4410', '742', '0'), +('12', '56', '18', '1230', '524', '0'), +('12', '56', '18', '1221', '454', '0'), +('12', '56', '19', '4407', '3713', '0'), +('12', '56', '19', '68239', '2541', '0'), +('12', '56', '19', '1652', '1234', '0'), +('12', '56', '19', '1368', '1216', '0'), +('12', '56', '13', '14337', '7160', '0'), +('12', '56', '13', '20656', '5660', '0'), +('12', '56', '13', '6359', '4912', '0'), +('12', '56', '13', '14360', '4759', '0'), +('12', '56', '14', '20656', '5660', '0'), +('12', '56', '14', '6359', '4912', '0'), +('12', '56', '14', '9246', '4071', '0'), +('12', '56', '14', '10404', '3953', '0'), +('12', '56', '11', '9246', '4071', '0'), +('12', '56', '11', '13353', '1500', '0'), +('12', '56', '11', '14762', '1404', '0'), +('12', '56', '11', '20677', '450', '0'), +('12', '57', '22', '10323', '0', '0'), +('12', '57', '22', '9246', '0', '0'), +('12', '57', '22', '21509', '0', '0'), +('12', '57', '22', '8007', '0', '0'), +('12', '57', '1', '10082', '2575', '0'), +('12', '57', '1', '14702', '2350', '0'), +('12', '57', '1', '10107', '2066', '0'), +('12', '57', '1', '30361', '2040', '0'), +('12', '57', '2', '1271', '5547', '0'), +('12', '57', '2', '1225', '3991', '0'), +('12', '57', '2', '1211', '3892', '0'), +('12', '57', '2', '10141', '3730', '0'), +('12', '57', '3', '11052', '6197', '0'), +('12', '57', '3', '1272', '4302', '0'), +('12', '57', '3', '4505', '2922', '0'), +('12', '57', '3', '2366', '2090', '0'), +('12', '57', '5', '27710', '5096', '0'), +('12', '57', '5', '11646', '4671', '0'), +('12', '57', '5', '14703', '3850', '0'), +('12', '57', '5', '14556', '3018', '0'), +('12', '57', '8', '11603', '9029', '0'), +('12', '57', '8', '1057', '2264', '0'), +('12', '57', '8', '2349', '2154', '0'), +('12', '57', '8', '2340', '1677', '0'), +('12', '57', '6', '1542', '5889', '0'), +('12', '57', '6', '1557', '5310', '0'), +('12', '57', '6', '1273', '3446', '0'), +('12', '57', '6', '1905', '3099', '0'), +('12', '57', '17', '11641', '9779', '0'), +('12', '57', '17', '1226', '7847', '0'), +('12', '57', '17', '1214', '7722', '0'), +('12', '57', '17', '1644', '7232', '0'), +('12', '57', '7', '1227', '3416', '0'), +('12', '57', '7', '1218', '3336', '0'), +('12', '57', '7', '1648', '2690', '0'), +('12', '57', '7', '2458', '1839', '0'), +('12', '57', '9', '1649', '2158', '0'), +('12', '57', '9', '4408', '2099', '0'), +('12', '57', '9', '12803', '1440', '0'), +('12', '57', '9', '10360', '1365', '0'), +('12', '57', '15', '11686', '5100', '0'), +('12', '57', '15', '10150', '1804', '0'), +('12', '57', '15', '14639', '1653', '0'), +('12', '57', '15', '10163', '1500', '0'), +('12', '57', '20', '11666', '5383', '0'), +('12', '57', '20', '2742', '3204', '0'), +('12', '57', '20', '1364', '1745', '0'), +('12', '57', '20', '1217', '1340', '0'), +('12', '57', '12', '1229', '4123', '0'), +('12', '57', '12', '2336', '2678', '0'), +('12', '57', '12', '20655', '2655', '0'), +('12', '57', '12', '4345', '2438', '0'), +('12', '57', '18', '1651', '1974', '0'), +('12', '57', '18', '4410', '742', '0'), +('12', '57', '18', '1230', '525', '0'), +('12', '57', '18', '1221', '454', '0'), +('12', '57', '19', '4407', '3778', '0'), +('12', '57', '19', '68239', '2563', '0'), +('12', '57', '19', '1652', '1234', '0'), +('12', '57', '19', '1368', '1216', '0'), +('12', '57', '13', '14337', '7233', '0'), +('12', '57', '13', '20656', '5696', '0'), +('12', '57', '13', '6359', '4984', '0'), +('12', '57', '13', '14360', '4832', '0'), +('12', '57', '14', '20656', '5696', '0'), +('12', '57', '14', '6359', '4984', '0'), +('12', '57', '14', '9246', '4143', '0'), +('12', '57', '14', '10404', '4018', '0'), +('12', '57', '11', '9246', '4143', '0'), +('12', '57', '11', '13353', '1500', '0'), +('12', '57', '11', '14762', '1404', '0'), +('12', '57', '11', '20677', '450', '0'), +('12', '58', '22', '10323', '0', '0'), +('12', '58', '22', '9246', '0', '0'), +('12', '58', '22', '21509', '0', '0'), +('12', '58', '22', '8007', '0', '0'), +('12', '58', '1', '10082', '2619', '0'), +('12', '58', '1', '14702', '2350', '0'), +('12', '58', '1', '10107', '2102', '0'), +('12', '58', '1', '30361', '2040', '0'), +('12', '58', '2', '1271', '5605', '0'), +('12', '58', '2', '1225', '4043', '0'), +('12', '58', '2', '1211', '3943', '0'), +('12', '58', '2', '10141', '3796', '0'), +('12', '58', '3', '11052', '6306', '0'), +('12', '58', '3', '1272', '4367', '0'), +('12', '58', '3', '4505', '2973', '0'), +('12', '58', '3', '2366', '2126', '0'), +('12', '58', '5', '27710', '5132', '0'), +('12', '58', '5', '11646', '4765', '0'), +('12', '58', '5', '14703', '3850', '0'), +('12', '58', '5', '14556', '3018', '0'), +('12', '58', '8', '11603', '9094', '0'), +('12', '58', '8', '1057', '2300', '0'), +('12', '58', '8', '2349', '2154', '0'), +('12', '58', '8', '2340', '1706', '0'), +('12', '58', '6', '1542', '5955', '0'), +('12', '58', '6', '1557', '5310', '0'), +('12', '58', '6', '1273', '3482', '0'), +('12', '58', '6', '1905', '3100', '0'), +('12', '58', '17', '11641', '9887', '0'), +('12', '58', '17', '1226', '7952', '0'), +('12', '58', '17', '1214', '7819', '0'), +('12', '58', '17', '1644', '7268', '0'), +('12', '58', '7', '1227', '3467', '0'), +('12', '58', '7', '1218', '3387', '0'), +('12', '58', '7', '1648', '2726', '0'), +('12', '58', '7', '2458', '1868', '0'), +('12', '58', '9', '1649', '2179', '0'), +('12', '58', '9', '4408', '2135', '0'), +('12', '58', '9', '12803', '1404', '0'), +('12', '58', '9', '10360', '1387', '0'), +('12', '58', '15', '11686', '5136', '0'), +('12', '58', '15', '10150', '1804', '0'), +('12', '58', '15', '14639', '1682', '0'), +('12', '58', '15', '10163', '1500', '0'), +('12', '58', '20', '11666', '5385', '0'), +('12', '58', '20', '2742', '3207', '0'), +('12', '58', '20', '1364', '1774', '0'), +('12', '58', '20', '1217', '1347', '0'), +('12', '58', '12', '1229', '4174', '0'), +('12', '58', '12', '2336', '2714', '0'), +('12', '58', '12', '20655', '2670', '0'), +('12', '58', '12', '4345', '2474', '0'), +('12', '58', '18', '1651', '1996', '0'), +('12', '58', '18', '4410', '742', '0'), +('12', '58', '18', '1230', '526', '0'), +('12', '58', '18', '1221', '454', '0'), +('12', '58', '19', '4407', '3844', '0'), +('12', '58', '19', '68239', '2585', '0'), +('12', '58', '19', '1652', '1234', '0'), +('12', '58', '19', '1368', '1216', '0'), +('12', '58', '13', '14337', '7305', '0'), +('12', '58', '13', '20656', '5732', '0'), +('12', '58', '13', '6359', '5057', '0'), +('12', '58', '13', '14360', '4904', '0'), +('12', '58', '14', '20656', '5732', '0'), +('12', '58', '14', '6359', '5057', '0'), +('12', '58', '14', '9246', '4216', '0'), +('12', '58', '14', '10404', '4083', '0'), +('12', '58', '11', '9246', '4216', '0'), +('12', '58', '11', '13353', '1500', '0'), +('12', '58', '11', '14762', '1404', '0'), +('12', '58', '11', '20677', '450', '0'), +('12', '59', '22', '10323', '0', '0'), +('12', '59', '22', '9246', '0', '0'), +('12', '59', '22', '21509', '0', '0'), +('12', '59', '22', '8007', '0', '0'), +('12', '59', '1', '10082', '2662', '0'), +('12', '59', '1', '14702', '2350', '0'), +('12', '59', '1', '10107', '2138', '0'), +('12', '59', '1', '30361', '2040', '0'), +('12', '59', '2', '1271', '5663', '0'), +('12', '59', '2', '1225', '4095', '0'), +('12', '59', '2', '1211', '3994', '0'), +('12', '59', '2', '10141', '3861', '0'), +('12', '59', '3', '11052', '6414', '0'), +('12', '59', '3', '1272', '4432', '0'), +('12', '59', '3', '4505', '3024', '0'), +('12', '59', '3', '2366', '2162', '0'), +('12', '59', '5', '27710', '5168', '0'), +('12', '59', '5', '11646', '4859', '0'), +('12', '59', '5', '14703', '3850', '0'), +('12', '59', '5', '10216', '3050', '0'), +('12', '59', '8', '11603', '9159', '0'), +('12', '59', '8', '1057', '2336', '0'), +('12', '59', '8', '2349', '2154', '0'), +('12', '59', '8', '2340', '1735', '0'), +('12', '59', '6', '1542', '6020', '0'), +('12', '59', '6', '1557', '5310', '0'), +('12', '59', '6', '1273', '3518', '0'), +('12', '59', '6', '1905', '3101', '0'), +('12', '59', '17', '11641', '9996', '0'), +('12', '59', '17', '1226', '8057', '0'), +('12', '59', '17', '1214', '7916', '0'), +('12', '59', '17', '1644', '7305', '0'), +('12', '59', '7', '1227', '3518', '0'), +('12', '59', '7', '1218', '3438', '0'), +('12', '59', '7', '1648', '2762', '0'), +('12', '59', '7', '2458', '1897', '0'), +('12', '59', '9', '1649', '2201', '0'), +('12', '59', '9', '4408', '2171', '0'), +('12', '59', '9', '10360', '1409', '0'), +('12', '59', '9', '12803', '1368', '0'), +('12', '59', '15', '11686', '5172', '0'), +('12', '59', '15', '10150', '1804', '0'), +('12', '59', '15', '14639', '1711', '0'), +('12', '59', '15', '10163', '1500', '0'), +('12', '59', '20', '11666', '5387', '0'), +('12', '59', '20', '2742', '3209', '0'), +('12', '59', '20', '1364', '1803', '0'), +('12', '59', '20', '1217', '1354', '0'), +('12', '59', '12', '1229', '4225', '0'), +('12', '59', '12', '2336', '2750', '0'), +('12', '59', '12', '20655', '2685', '0'), +('12', '59', '12', '4345', '2511', '0'), +('12', '59', '18', '1651', '2018', '0'), +('12', '59', '18', '4410', '742', '0'), +('12', '59', '18', '1230', '527', '0'), +('12', '59', '18', '1221', '454', '0'), +('12', '59', '19', '4407', '3909', '0'), +('12', '59', '19', '68239', '2606', '0'), +('12', '59', '19', '1652', '1234', '0'), +('12', '59', '19', '1368', '1216', '0'), +('12', '59', '13', '14337', '7378', '0'), +('12', '59', '13', '20656', '5768', '0'), +('12', '59', '13', '6359', '5129', '0'), +('12', '59', '13', '14360', '4977', '0'), +('12', '59', '14', '20656', '5768', '0'), +('12', '59', '14', '6359', '5129', '0'), +('12', '59', '14', '9246', '4288', '0'), +('12', '59', '14', '10404', '4149', '0'), +('12', '59', '11', '9246', '4288', '0'), +('12', '59', '11', '13353', '1500', '0'), +('12', '59', '11', '14762', '1404', '0'), +('12', '59', '11', '60396', '458', '0'), +('12', '60', '22', '66397', '0', '3'), +('12', '60', '22', '61948', '0', '3'), +('12', '60', '22', '21805', '0', '3'), +('12', '60', '22', '21807', '0', '3'), +('12', '60', '1', '28944', '34873', '3'), +('12', '60', '1', '51230', '29739', '3'), +('12', '60', '1', '28922', '20005', '3'), +('12', '60', '1', '63170', '19563', '3'), +('12', '60', '2', '27880', '24004', '3'), +('12', '60', '2', '51235', '20641', '3'), +('12', '60', '2', '26763', '9514', '3'), +('12', '60', '2', '26605', '8590', '3'), +('12', '60', '3', '5772', '33235', '3'), +('12', '60', '3', '29452', '23595', '3'), +('12', '60', '3', '29319', '20952', '3'), +('12', '60', '3', '31328', '13502', '3'), +('12', '60', '5', '27244', '23046', '3'), +('12', '60', '5', '28901', '22146', '3'), +('12', '60', '5', '51229', '20612', '3'), +('12', '60', '5', '28911', '20148', '3'), +('12', '60', '8', '11603', '25316', '3'), +('12', '60', '8', '30505', '11459', '3'), +('12', '60', '8', '28964', '11163', '3'), +('12', '60', '8', '28992', '11055', '3'), +('12', '60', '6', '4315', '11652', '3'), +('12', '60', '6', '28920', '9396', '3'), +('12', '60', '6', '28902', '9305', '3'), +('12', '60', '6', '28919', '7107', '3'), +('12', '60', '17', '28910', '28129', '3'), +('12', '60', '17', '32933', '18774', '3'), +('12', '60', '17', '26776', '12291', '3'), +('12', '60', '17', '26604', '11291', '3'), +('12', '60', '7', '28924', '10414', '3'), +('12', '60', '7', '7868', '10062', '3'), +('12', '60', '7', '8288', '8504', '3'), +('12', '60', '7', '26555', '7907', '3'), +('12', '60', '9', '23508', '21401', '3'), +('12', '60', '9', '26781', '18739', '3'), +('12', '60', '9', '30552', '15323', '3'), +('12', '60', '9', '28891', '15002', '3'), +('12', '60', '15', '28944', '34873', '3'), +('12', '60', '15', '28905', '33353', '3'), +('12', '60', '15', '63170', '19563', '3'), +('12', '60', '15', '28993', '10326', '3'), +('12', '60', '20', '28916', '11260', '3'), +('12', '60', '20', '30534', '9641', '3'), +('12', '60', '20', '26549', '8952', '3'), +('12', '60', '20', '28938', '8452', '3'), +('12', '60', '12', '30534', '9641', '3'), +('12', '60', '12', '28967', '8603', '3'), +('12', '60', '12', '28972', '7160', '3'), +('12', '60', '12', '28949', '6726', '3'), +('12', '60', '18', '26777', '39474', '3'), +('12', '60', '18', '28932', '8279', '3'), +('12', '60', '18', '8289', '8275', '3'), +('12', '60', '18', '27316', '7189', '3'), +('12', '60', '19', '28881', '38910', '3'), +('12', '60', '19', '28934', '32903', '3'), +('12', '60', '19', '30570', '10561', '3'), +('12', '60', '19', '30818', '10501', '3'), +('12', '60', '13', '28981', '35392', '3'), +('12', '60', '13', '26778', '26226', '3'), +('12', '60', '13', '28998', '10863', '3'), +('12', '60', '13', '31360', '10806', '3'), +('12', '60', '14', '28981', '35392', '3'), +('12', '60', '14', '26778', '26226', '3'), +('12', '60', '14', '28915', '18998', '3'), +('12', '60', '14', '26780', '11529', '3'), +('12', '60', '11', '26778', '26226', '3'), +('12', '60', '11', '51223', '17887', '3'), +('12', '60', '11', '2698', '15002', '3'), +('12', '60', '11', '28998', '10863', '3'), +('12', '60', '22', '10323', '0', '2'), +('12', '60', '22', '9248', '0', '2'), +('12', '60', '22', '12425', '0', '2'), +('12', '60', '22', '30014', '0', '2'), +('12', '60', '1', '31228', '8104', '2'), +('12', '60', '1', '10912', '4979', '2'), +('12', '60', '1', '62234', '4288', '2'), +('12', '60', '1', '31370', '3784', '2'), +('12', '60', '2', '10913', '8341', '2'), +('12', '60', '2', '29648', '6759', '2'), +('12', '60', '2', '1867', '5858', '2'), +('12', '60', '2', '31322', '5677', '2'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '60', '3', '31233', '9048', '2'), +('12', '60', '3', '1547', '7722', '2'), +('12', '60', '3', '31244', '7668', '2'), +('12', '60', '3', '31463', '6800', '2'), +('12', '60', '5', '31460', '8280', '2'), +('12', '60', '5', '31318', '7173', '2'), +('12', '60', '5', '29459', '6423', '2'), +('12', '60', '5', '27259', '6066', '2'), +('12', '60', '8', '1628', '8133', '2'), +('12', '60', '8', '5779', '6161', '2'), +('12', '60', '8', '11603', '5967', '2'), +('12', '60', '8', '1622', '5587', '2'), +('12', '60', '6', '29468', '6004', '2'), +('12', '60', '6', '1557', '5261', '2'), +('12', '60', '6', '29472', '4211', '2'), +('12', '60', '6', '1114', '4127', '2'), +('12', '60', '17', '31239', '11500', '2'), +('12', '60', '17', '10845', '10689', '2'), +('12', '60', '17', '1552', '9891', '2'), +('12', '60', '17', '6858', '9496', '2'), +('12', '60', '7', '31342', '5442', '2'), +('12', '60', '7', '29485', '5143', '2'), +('12', '60', '7', '31237', '4719', '2'), +('12', '60', '7', '31156', '3071', '2'), +('12', '60', '9', '31460', '8280', '2'), +('12', '60', '9', '31246', '5521', '2'), +('12', '60', '9', '1559', '4949', '2'), +('12', '60', '9', '31314', '3862', '2'), +('12', '60', '15', '31231', '8533', '2'), +('12', '60', '15', '25211', '8334', '2'), +('12', '60', '15', '25198', '6346', '2'), +('12', '60', '15', '62373', '5029', '2'), +('12', '60', '20', '25858', '8952', '2'), +('12', '60', '20', '2510', '8414', '2'), +('12', '60', '20', '1556', '7794', '2'), +('12', '60', '20', '6835', '5445', '2'), +('12', '60', '12', '25857', '7341', '2'), +('12', '60', '12', '31340', '6608', '2'), +('12', '60', '12', '31306', '5988', '2'), +('12', '60', '12', '25409', '3513', '2'), +('12', '60', '18', '31339', '6494', '2'), +('12', '60', '18', '31159', '3364', '2'), +('12', '60', '18', '31371', '3043', '2'), +('12', '60', '18', '5819', '2423', '2'), +('12', '60', '19', '29645', '10251', '2'), +('12', '60', '19', '31245', '9657', '2'), +('12', '60', '19', '31355', '5962', '2'), +('12', '60', '19', '31327', '5345', '2'), +('12', '60', '13', '1156', '9489', '2'), +('12', '60', '13', '14341', '9194', '2'), +('12', '60', '13', '31326', '9068', '2'), +('12', '60', '13', '1117', '8141', '2'), +('12', '60', '14', '2498', '9040', '2'), +('12', '60', '14', '31462', '7904', '2'), +('12', '60', '14', '29449', '7194', '2'), +('12', '60', '14', '1113', '6669', '2'), +('12', '60', '11', '31466', '9583', '2'), +('12', '60', '11', '1554', '9374', '2'), +('12', '60', '11', '2698', '7516', '2'), +('12', '60', '11', '1113', '6669', '2'), +('12', '60', '22', '10323', '0', '1'), +('12', '60', '22', '12425', '0', '1'), +('12', '60', '22', '9246', '0', '1'), +('12', '60', '22', '21509', '0', '1'), +('12', '60', '1', '10912', '7657', '1'), +('12', '60', '1', '62234', '5395', '1'), +('12', '60', '1', '14702', '2350', '1'), +('12', '60', '1', '30361', '2040', '1'), +('12', '60', '2', '10913', '11955', '1'), +('12', '60', '2', '1271', '4278', '1'), +('12', '60', '2', '1414', '3468', '1'), +('12', '60', '2', '10143', '3361', '1'), +('12', '60', '3', '5780', '4511', '1'), +('12', '60', '3', '11052', '3850', '1'), +('12', '60', '3', '46184', '3453', '1'), +('12', '60', '3', '1625', '2938', '1'), +('12', '60', '5', '27710', '4301', '1'), +('12', '60', '5', '14703', '3850', '1'), +('12', '60', '5', '14556', '3011', '1'), +('12', '60', '5', '14709', '2801', '1'), +('12', '60', '8', '1628', '10363', '1'), +('12', '60', '8', '11603', '7596', '1'), +('12', '60', '8', '1622', '6352', '1'), +('12', '60', '8', '5779', '6186', '1'), +('12', '60', '6', '29468', '8283', '1'), +('12', '60', '6', '1557', '5286', '1'), +('12', '60', '6', '1542', '4452', '1'), +('12', '60', '6', '1905', '3061', '1'), +('12', '60', '17', '10845', '14298', '1'), +('12', '60', '17', '24627', '7942', '1'), +('12', '60', '17', '11641', '7398', '1'), +('12', '60', '17', '1644', '6423', '1'), +('12', '60', '7', '1227', '2311', '1'), +('12', '60', '7', '1218', '2231', '1'), +('12', '60', '7', '1648', '1898', '1'), +('12', '60', '7', '1362', '1614', '1'), +('12', '60', '9', '1618', '3094', '1'), +('12', '60', '9', '12803', '2220', '1'), +('12', '60', '9', '4780', '1820', '1'), +('12', '60', '9', '1649', '1681', '1'), +('12', '60', '15', '5727', '4424', '1'), +('12', '60', '15', '11686', '4303', '1'), +('12', '60', '15', '5728', '3614', '1'), +('12', '60', '15', '14738', '3397', '1'), +('12', '60', '20', '1556', '9595', '1'), +('12', '60', '20', '11666', '5332', '1'), +('12', '60', '20', '5765', '4818', '1'), +('12', '60', '20', '2742', '3125', '1'), +('12', '60', '12', '4582', '6000', '1'), +('12', '60', '12', '1229', '3015', '1'), +('12', '60', '12', '20655', '2290', '1'), +('12', '60', '12', '2923', '2064', '1'), +('12', '60', '18', '5819', '2996', '1'), +('12', '60', '18', '24765', '2071', '1'), +('12', '60', '18', '1651', '1491', '1'), +('12', '60', '18', '4410', '725', '1'), +('12', '60', '19', '5749', '2803', '1'), +('12', '60', '19', '4407', '2358', '1'), +('12', '60', '19', '68239', '2067', '1'), +('12', '60', '19', '1652', '1220', '1'), +('12', '60', '13', '14341', '13714', '1'), +('12', '60', '13', '14338', '8052', '1'), +('12', '60', '13', '24629', '7880', '1'), +('12', '60', '13', '24609', '7310', '1'), +('12', '60', '14', '24629', '7880', '1'), +('12', '60', '14', '24609', '7310', '1'), +('12', '60', '14', '14745', '5053', '1'), +('12', '60', '14', '20656', '4901', '1'), +('12', '60', '11', '46178', '4705', '1'), +('12', '60', '11', '5763', '4601', '1'), +('12', '60', '11', '5805', '3300', '1'), +('12', '60', '11', '5738', '3167', '1'), +('12', '61', '22', '66397', '0', '3'), +('12', '61', '22', '61948', '0', '3'), +('12', '61', '22', '21805', '0', '3'), +('12', '61', '22', '21807', '0', '3'), +('12', '61', '1', '28944', '33834', '3'), +('12', '61', '1', '51230', '28819', '3'), +('12', '61', '1', '28922', '19505', '3'), +('12', '61', '1', '63170', '19064', '3'), +('12', '61', '2', '27880', '23005', '3'), +('12', '61', '2', '51235', '20143', '3'), +('12', '61', '2', '26763', '9516', '3'), +('12', '61', '2', '26605', '8592', '3'), +('12', '61', '3', '5772', '32338', '3'), +('12', '61', '3', '29452', '22597', '3'), +('12', '61', '3', '29319', '19952', '3'), +('12', '61', '3', '31328', '13002', '3'), +('12', '61', '5', '27244', '22046', '3'), +('12', '61', '5', '28901', '21648', '3'), +('12', '61', '5', '51229', '20113', '3'), +('12', '61', '5', '28911', '19649', '3'), +('12', '61', '8', '11603', '24317', '3'), +('12', '61', '8', '28964', '11165', '3'), +('12', '61', '8', '30505', '11085', '3'), +('12', '61', '8', '28992', '11055', '3'), +('12', '61', '6', '4315', '11152', '3'), +('12', '61', '6', '28920', '9398', '3'), +('12', '61', '6', '28902', '9305', '3'), +('12', '61', '6', '28919', '7107', '3'), +('12', '61', '17', '28910', '27380', '3'), +('12', '61', '17', '32933', '18275', '3'), +('12', '61', '17', '26776', '12294', '3'), +('12', '61', '17', '26604', '11294', '3'), +('12', '61', '7', '28924', '10416', '3'), +('12', '61', '7', '7868', '10063', '3'), +('12', '61', '7', '8288', '8504', '3'), +('12', '61', '7', '26555', '7907', '3'), +('12', '61', '9', '23508', '20401', '3'), +('12', '61', '9', '26781', '18366', '3'), +('12', '61', '9', '30552', '15024', '3'), +('12', '61', '9', '28891', '14702', '3'), +('12', '61', '15', '28944', '33834', '3'), +('12', '61', '15', '28905', '32313', '3'), +('12', '61', '15', '63170', '19064', '3'), +('12', '61', '15', '28993', '10327', '3'), +('12', '61', '20', '28916', '11261', '3'), +('12', '61', '20', '30534', '9642', '3'), +('12', '61', '20', '26549', '8955', '3'), +('12', '61', '20', '28938', '8453', '3'), +('12', '61', '12', '30534', '9642', '3'), +('12', '61', '12', '28967', '8603', '3'), +('12', '61', '12', '28972', '7161', '3'), +('12', '61', '12', '28949', '6728', '3'), +('12', '61', '18', '26777', '38325', '3'), +('12', '61', '18', '28932', '8280', '3'), +('12', '61', '18', '8289', '8276', '3'), +('12', '61', '18', '27316', '7189', '3'), +('12', '61', '19', '28881', '37612', '3'), +('12', '61', '19', '28934', '31903', '3'), +('12', '61', '19', '30570', '10562', '3'), +('12', '61', '19', '30818', '10002', '3'), +('12', '61', '13', '28981', '34393', '3'), +('12', '61', '13', '26778', '25630', '3'), +('12', '61', '13', '28998', '10865', '3'), +('12', '61', '13', '31360', '10306', '3'), +('12', '61', '14', '28981', '34393', '3'), +('12', '61', '14', '26778', '25630', '3'), +('12', '61', '14', '28915', '18625', '3'), +('12', '61', '14', '26780', '11530', '3'), +('12', '61', '11', '26778', '25630', '3'), +('12', '61', '11', '51223', '17514', '3'), +('12', '61', '11', '2698', '14627', '3'), +('12', '61', '11', '28998', '10865', '3'), +('12', '62', '22', '66397', '0', '3'), +('12', '62', '22', '61948', '0', '3'), +('12', '62', '22', '21805', '0', '3'), +('12', '62', '22', '21807', '0', '3'), +('12', '62', '1', '28944', '32796', '3'), +('12', '62', '1', '51230', '27900', '3'), +('12', '62', '1', '28922', '19005', '3'), +('12', '62', '1', '63170', '18565', '3'), +('12', '62', '2', '27880', '22006', '3'), +('12', '62', '2', '51235', '19644', '3'), +('12', '62', '2', '26763', '9518', '3'), +('12', '62', '2', '26605', '8593', '3'), +('12', '62', '3', '5772', '31441', '3'), +('12', '62', '3', '29452', '21598', '3'), +('12', '62', '3', '29319', '18952', '3'), +('12', '62', '3', '31328', '12502', '3'), +('12', '62', '5', '28901', '21151', '3'), +('12', '62', '5', '27244', '21047', '3'), +('12', '62', '5', '51229', '19614', '3'), +('12', '62', '5', '28911', '19150', '3'), +('12', '62', '8', '11603', '23318', '3'), +('12', '62', '8', '28964', '11167', '3'), +('12', '62', '8', '28992', '11055', '3'), +('12', '62', '8', '28918', '10751', '3'), +('12', '62', '6', '4315', '10652', '3'), +('12', '62', '6', '28920', '9401', '3'), +('12', '62', '6', '28902', '9305', '3'), +('12', '62', '6', '28919', '7107', '3'), +('12', '62', '17', '28910', '26632', '3'), +('12', '62', '17', '32933', '17776', '3'), +('12', '62', '17', '26776', '12297', '3'), +('12', '62', '17', '26604', '11297', '3'), +('12', '62', '7', '28924', '10418', '3'), +('12', '62', '7', '7868', '10064', '3'), +('12', '62', '7', '8288', '8504', '3'), +('12', '62', '7', '26555', '7907', '3'), +('12', '62', '9', '23508', '19401', '3'), +('12', '62', '9', '26781', '17993', '3'), +('12', '62', '9', '30552', '14726', '3'), +('12', '62', '9', '28891', '14402', '3'), +('12', '62', '15', '28944', '32796', '3'), +('12', '62', '15', '28905', '31273', '3'), +('12', '62', '15', '63170', '18565', '3'), +('12', '62', '15', '28993', '10329', '3'), +('12', '62', '20', '28916', '11262', '3'), +('12', '62', '20', '30534', '9643', '3'), +('12', '62', '20', '26549', '8957', '3'), +('12', '62', '20', '28938', '8454', '3'), +('12', '62', '12', '30534', '9643', '3'), +('12', '62', '12', '28967', '8603', '3'), +('12', '62', '12', '28972', '7163', '3'), +('12', '62', '12', '28949', '6729', '3'), +('12', '62', '18', '26777', '37176', '3'), +('12', '62', '18', '28932', '8281', '3'), +('12', '62', '18', '8289', '8277', '3'), +('12', '62', '18', '27316', '7190', '3'), +('12', '62', '19', '28881', '36314', '3'), +('12', '62', '19', '28934', '30903', '3'), +('12', '62', '19', '30570', '10563', '3'), +('12', '62', '19', '28148', '9664', '3'), +('12', '62', '13', '28981', '33395', '3'), +('12', '62', '13', '26778', '25034', '3'), +('12', '62', '13', '28998', '10867', '3'), +('12', '62', '13', '31360', '9806', '3'), +('12', '62', '14', '28981', '33395', '3'), +('12', '62', '14', '26778', '25034', '3'), +('12', '62', '14', '28915', '18252', '3'), +('12', '62', '14', '26780', '11532', '3'), +('12', '62', '11', '26778', '25034', '3'), +('12', '62', '11', '51223', '17141', '3'), +('12', '62', '11', '2698', '14252', '3'), +('12', '62', '11', '28998', '10867', '3'), +('12', '63', '22', '66397', '0', '3'), +('12', '63', '22', '61948', '0', '3'), +('12', '63', '22', '21805', '0', '3'), +('12', '63', '22', '21807', '0', '3'), +('12', '63', '1', '28944', '31757', '3'), +('12', '63', '1', '51230', '26980', '3'), +('12', '63', '1', '28922', '18505', '3'), +('12', '63', '1', '63170', '18066', '3'), +('12', '63', '2', '27880', '21006', '3'), +('12', '63', '2', '51235', '19146', '3'), +('12', '63', '2', '26763', '9520', '3'), +('12', '63', '2', '26605', '8595', '3'), +('12', '63', '3', '5772', '30545', '3'), +('12', '63', '3', '29452', '20599', '3'), +('12', '63', '3', '29319', '17952', '3'), +('12', '63', '3', '31328', '12002', '3'), +('12', '63', '5', '28901', '20653', '3'), +('12', '63', '5', '27244', '20048', '3'), +('12', '63', '5', '51229', '19115', '3'), +('12', '63', '5', '28911', '18652', '3'), +('12', '63', '8', '11603', '22319', '3'), +('12', '63', '8', '28964', '11169', '3'), +('12', '63', '8', '28992', '11055', '3'), +('12', '63', '8', '28918', '10751', '3'), +('12', '63', '6', '4315', '10152', '3'), +('12', '63', '6', '28920', '9403', '3'), +('12', '63', '6', '28902', '9305', '3'), +('12', '63', '6', '28919', '7107', '3'), +('12', '63', '17', '28910', '25883', '3'), +('12', '63', '17', '32933', '17276', '3'), +('12', '63', '17', '26776', '12300', '3'), +('12', '63', '17', '26604', '11300', '3'), +('12', '63', '7', '28924', '10420', '3'), +('12', '63', '7', '7868', '10065', '3'), +('12', '63', '7', '8288', '8504', '3'), +('12', '63', '7', '26555', '7907', '3'), +('12', '63', '9', '23508', '18401', '3'), +('12', '63', '9', '26781', '17620', '3'), +('12', '63', '9', '30552', '14427', '3'), +('12', '63', '9', '28891', '14102', '3'), +('12', '63', '15', '28944', '31757', '3'), +('12', '63', '15', '28905', '30233', '3'), +('12', '63', '15', '63170', '18066', '3'), +('12', '63', '15', '28993', '10330', '3'), +('12', '63', '20', '28916', '11262', '3'), +('12', '63', '20', '30534', '9645', '3'), +('12', '63', '20', '26549', '8960', '3'), +('12', '63', '20', '28938', '8454', '3'), +('12', '63', '12', '30534', '9645', '3'), +('12', '63', '12', '28967', '8603', '3'), +('12', '63', '12', '28972', '7165', '3'), +('12', '63', '12', '28949', '6730', '3'), +('12', '63', '18', '26777', '36028', '3'), +('12', '63', '18', '28932', '8283', '3'), +('12', '63', '18', '8289', '8278', '3'), +('12', '63', '18', '27316', '7191', '3'), +('12', '63', '19', '28881', '35015', '3'), +('12', '63', '19', '28934', '29903', '3'), +('12', '63', '19', '30570', '10564', '3'), +('12', '63', '19', '28148', '9665', '3'), +('12', '63', '13', '28981', '32396', '3'), +('12', '63', '13', '26778', '24437', '3'), +('12', '63', '13', '28998', '10869', '3'), +('12', '63', '13', '28917', '9804', '3'), +('12', '63', '14', '28981', '32396', '3'), +('12', '63', '14', '26778', '24437', '3'), +('12', '63', '14', '28915', '17878', '3'), +('12', '63', '14', '26780', '11534', '3'), +('12', '63', '11', '26778', '24437', '3'), +('12', '63', '11', '51223', '16768', '3'), +('12', '63', '11', '2698', '13877', '3'), +('12', '63', '11', '28998', '10869', '3'), +('12', '64', '22', '66397', '0', '3'), +('12', '64', '22', '61948', '0', '3'), +('12', '64', '22', '21805', '0', '3'), +('12', '64', '22', '21807', '0', '3'), +('12', '64', '1', '28944', '30718', '3'), +('12', '64', '1', '51230', '26061', '3'), +('12', '64', '1', '28922', '18005', '3'), +('12', '64', '1', '63170', '17567', '3'), +('12', '64', '2', '27880', '20007', '3'), +('12', '64', '2', '51235', '18647', '3'), +('12', '64', '2', '26763', '9522', '3'), +('12', '64', '2', '26605', '8596', '3'), +('12', '64', '3', '5772', '29648', '3'), +('12', '64', '3', '29452', '19600', '3'), +('12', '64', '3', '29319', '16952', '3'), +('12', '64', '3', '31328', '11502', '3'), +('12', '64', '5', '28901', '20156', '3'), +('12', '64', '5', '27244', '19049', '3'), +('12', '64', '5', '51229', '18616', '3'), +('12', '64', '5', '28911', '18153', '3'), +('12', '64', '8', '11603', '21320', '3'), +('12', '64', '8', '28964', '11171', '3'), +('12', '64', '8', '28992', '11055', '3'), +('12', '64', '8', '28918', '10751', '3'), +('12', '64', '6', '4315', '9652', '3'), +('12', '64', '6', '28920', '9406', '3'), +('12', '64', '6', '28902', '9305', '3'), +('12', '64', '6', '28919', '7107', '3'), +('12', '64', '17', '28910', '25134', '3'), +('12', '64', '17', '32933', '16777', '3'), +('12', '64', '17', '26776', '12303', '3'), +('12', '64', '17', '26604', '11303', '3'), +('12', '64', '7', '28924', '10422', '3'), +('12', '64', '7', '7868', '10066', '3'), +('12', '64', '7', '8288', '8504', '3'), +('12', '64', '7', '26555', '7907', '3'), +('12', '64', '9', '23508', '17401', '3'), +('12', '64', '9', '26781', '17247', '3'), +('12', '64', '9', '30552', '14128', '3'), +('12', '64', '9', '28891', '13802', '3'), +('12', '64', '15', '28944', '30718', '3'), +('12', '64', '15', '28905', '29193', '3'), +('12', '64', '15', '63170', '17567', '3'), +('12', '64', '15', '28993', '10331', '3'), +('12', '64', '20', '28916', '11263', '3'), +('12', '64', '20', '30534', '9646', '3'), +('12', '64', '20', '26549', '8962', '3'), +('12', '64', '20', '28938', '8455', '3'), +('12', '64', '12', '30534', '9646', '3'), +('12', '64', '12', '28967', '8603', '3'), +('12', '64', '12', '28972', '7167', '3'), +('12', '64', '12', '28949', '6731', '3'), +('12', '64', '18', '26777', '34879', '3'), +('12', '64', '18', '28932', '8284', '3'), +('12', '64', '18', '8289', '8280', '3'), +('12', '64', '18', '27316', '7191', '3'), +('12', '64', '19', '28881', '33717', '3'), +('12', '64', '19', '28934', '28903', '3'), +('12', '64', '19', '30570', '10565', '3'), +('12', '64', '19', '28148', '9667', '3'), +('12', '64', '13', '28981', '31398', '3'), +('12', '64', '13', '26778', '23841', '3'), +('12', '64', '13', '28998', '10870', '3'), +('12', '64', '13', '28917', '9804', '3'), +('12', '64', '14', '28981', '31398', '3'), +('12', '64', '14', '26778', '23841', '3'), +('12', '64', '14', '28915', '17505', '3'), +('12', '64', '14', '26780', '11536', '3'), +('12', '64', '11', '26778', '23841', '3'), +('12', '64', '11', '51223', '16394', '3'), +('12', '64', '11', '2698', '13502', '3'), +('12', '64', '11', '28998', '10870', '3'), +('12', '65', '22', '66397', '0', '7'), +('12', '65', '22', '62787', '0', '7'), +('12', '65', '22', '61948', '0', '7'), +('12', '65', '22', '21805', '0', '7'), +('12', '65', '1', '69062', '62337', '7'), +('12', '65', '1', '68949', '41605', '7'), +('12', '65', '1', '68807', '35200', '7'), +('12', '65', '1', '68058', '35200', '7'), +('12', '65', '2', '68195', '45251', '7'), +('12', '65', '2', '68807', '35200', '7'), +('12', '65', '2', '68058', '35200', '7'), +('12', '65', '2', '68060', '35200', '7'), +('12', '65', '3', '69074', '61625', '7'), +('12', '65', '3', '68818', '42834', '7'), +('12', '65', '3', '9444', '37462', '7'), +('12', '65', '3', '9436', '37022', '7'), +('12', '65', '5', '69135', '61619', '7'), +('12', '65', '5', '68808', '52252', '7'), +('12', '65', '5', '7769', '39059', '7'), +('12', '65', '5', '67625', '38079', '7'), +('12', '65', '8', '21998', '45559', '7'), +('12', '65', '8', '69164', '41754', '7'), +('12', '65', '8', '21996', '38949', '7'), +('12', '65', '8', '12082', '38465', '7'), +('12', '65', '6', '68788', '52659', '7'), +('12', '65', '6', '68841', '40663', '7'), +('12', '65', '6', '68807', '35200', '7'), +('12', '65', '6', '68057', '35200', '7'), +('12', '65', '17', '68984', '61855', '7'), +('12', '65', '17', '47654', '47895', '7'), +('12', '65', '17', '69153', '46147', '7'), +('12', '65', '17', '68782', '40554', '7'), +('12', '65', '7', '68060', '35200', '7'), +('12', '65', '7', '68807', '35200', '7'), +('12', '65', '7', '68057', '35200', '7'), +('12', '65', '7', '68058', '35200', '7'), +('12', '65', '9', '68606', '37184', '7'), +('12', '65', '9', '68058', '35200', '7'), +('12', '65', '9', '68807', '35200', '7'), +('12', '65', '9', '68060', '35200', '7'), +('12', '65', '15', '68957', '60664', '7'), +('12', '65', '15', '68846', '60015', '7'), +('12', '65', '15', '14818', '46803', '7'), +('12', '65', '15', '69453', '38861', '7'), +('12', '65', '20', '69134', '61805', '7'), +('12', '65', '20', '68726', '41967', '7'), +('12', '65', '20', '67625', '38079', '7'), +('12', '65', '20', '69445', '37073', '7'), +('12', '65', '12', '69255', '63048', '7'), +('12', '65', '12', '68912', '42496', '7'), +('12', '65', '12', '26996', '37103', '7'), +('12', '65', '12', '13627', '36145', '7'), +('12', '65', '18', '68751', '50849', '7'), +('12', '65', '18', '68807', '35200', '7'), +('12', '65', '18', '68058', '35200', '7'), +('12', '65', '18', '68057', '35200', '7'), +('12', '65', '19', '69078', '60615', '7'), +('12', '65', '19', '68913', '58864', '7'), +('12', '65', '19', '68807', '35200', '7'), +('12', '65', '19', '68060', '35200', '7'), +('12', '65', '13', '69046', '59801', '7'), +('12', '65', '13', '68744', '50968', '7'), +('12', '65', '13', '24793', '45170', '7'), +('12', '65', '13', '26788', '39215', '7'), +('12', '65', '14', '69046', '59801', '7'), +('12', '65', '14', '68745', '51396', '7'), +('12', '65', '14', '68744', '50968', '7'), +('12', '65', '14', '27274', '46445', '7'), +('12', '65', '11', '69162', '62496', '7'), +('12', '65', '11', '20496', '50365', '7'), +('12', '65', '11', '26788', '39215', '7'), +('12', '65', '11', '20486', '37072', '7'), +('12', '65', '22', '66397', '0', '6'), +('12', '65', '22', '62787', '0', '6'), +('12', '65', '22', '61948', '0', '6'), +('12', '65', '22', '21805', '0', '6'), +('12', '65', '1', '68807', '35200', '6'), +('12', '65', '1', '68057', '35200', '6'), +('12', '65', '1', '68060', '35200', '6'), +('12', '65', '1', '68058', '35200', '6'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '65', '2', '68195', '45251', '6'), +('12', '65', '2', '68807', '35200', '6'), +('12', '65', '2', '68058', '35200', '6'), +('12', '65', '2', '68057', '35200', '6'), +('12', '65', '3', '9444', '37462', '6'), +('12', '65', '3', '9436', '37022', '6'), +('12', '65', '3', '68057', '35200', '6'), +('12', '65', '3', '68058', '35200', '6'), +('12', '65', '5', '7769', '39059', '6'), +('12', '65', '5', '8774', '37512', '6'), +('12', '65', '5', '29198', '36383', '6'), +('12', '65', '5', '68057', '35200', '6'), +('12', '65', '8', '21998', '45559', '6'), +('12', '65', '8', '21996', '38949', '6'), +('12', '65', '8', '12082', '38465', '6'), +('12', '65', '8', '15815', '36874', '6'), +('12', '65', '6', '68807', '35200', '6'), +('12', '65', '6', '68058', '35200', '6'), +('12', '65', '6', '68060', '35200', '6'), +('12', '65', '6', '68057', '35200', '6'), +('12', '65', '17', '47654', '47895', '6'), +('12', '65', '17', '68057', '35200', '6'), +('12', '65', '17', '68058', '35200', '6'), +('12', '65', '17', '68807', '35200', '6'), +('12', '65', '7', '68060', '35200', '6'), +('12', '65', '7', '68807', '35200', '6'), +('12', '65', '7', '68057', '35200', '6'), +('12', '65', '7', '68058', '35200', '6'), +('12', '65', '9', '68807', '35200', '6'), +('12', '65', '9', '68058', '35200', '6'), +('12', '65', '9', '68060', '35200', '6'), +('12', '65', '9', '68057', '35200', '6'), +('12', '65', '15', '14818', '46803', '6'), +('12', '65', '15', '68807', '35200', '6'), +('12', '65', '15', '68058', '35200', '6'), +('12', '65', '15', '68060', '35200', '6'), +('12', '65', '20', '68057', '35200', '6'), +('12', '65', '20', '68058', '35200', '6'), +('12', '65', '20', '68060', '35200', '6'), +('12', '65', '20', '68807', '35200', '6'), +('12', '65', '12', '26996', '37103', '6'), +('12', '65', '12', '13627', '36145', '6'), +('12', '65', '12', '68060', '35200', '6'), +('12', '65', '12', '68057', '35200', '6'), +('12', '65', '18', '68060', '35200', '6'), +('12', '65', '18', '68057', '35200', '6'), +('12', '65', '18', '68058', '35200', '6'), +('12', '65', '18', '68807', '35200', '6'), +('12', '65', '19', '68060', '35200', '6'), +('12', '65', '19', '68057', '35200', '6'), +('12', '65', '19', '68058', '35200', '6'), +('12', '65', '19', '68807', '35200', '6'), +('12', '65', '13', '24793', '45170', '6'), +('12', '65', '13', '26788', '39215', '6'), +('12', '65', '13', '21875', '38668', '6'), +('12', '65', '13', '68057', '35200', '6'), +('12', '65', '14', '27274', '46445', '6'), +('12', '65', '14', '26788', '39215', '6'), +('12', '65', '14', '27272', '38888', '6'), +('12', '65', '14', '25998', '38643', '6'), +('12', '65', '11', '20496', '50365', '6'), +('12', '65', '11', '26788', '39215', '6'), +('12', '65', '11', '20486', '37072', '6'), +('12', '65', '11', '68057', '35200', '6'), +('12', '65', '22', '66397', '0', '5'), +('12', '65', '22', '62787', '0', '5'), +('12', '65', '22', '61948', '0', '5'), +('12', '65', '22', '21805', '0', '5'), +('12', '65', '1', '28944', '29679', '5'), +('12', '65', '1', '16257', '29405', '5'), +('12', '65', '1', '7130', '29053', '5'), +('12', '65', '1', '51230', '25142', '5'), +('12', '65', '2', '68195', '45251', '5'), +('12', '65', '2', '16158', '21563', '5'), +('12', '65', '2', '27880', '19008', '5'), +('12', '65', '2', '51235', '18149', '5'), +('12', '65', '3', '9444', '37462', '5'), +('12', '65', '3', '9436', '37022', '5'), +('12', '65', '3', '5772', '28751', '5'), +('12', '65', '3', '29452', '18602', '5'), +('12', '65', '5', '7769', '39059', '5'), +('12', '65', '5', '8774', '37512', '5'), +('12', '65', '5', '29198', '36383', '5'), +('12', '65', '5', '8772', '26595', '5'), +('12', '65', '8', '21998', '45559', '5'), +('12', '65', '8', '21996', '38949', '5'), +('12', '65', '8', '12082', '38465', '5'), +('12', '65', '8', '15815', '36874', '5'), +('12', '65', '6', '13654', '18718', '5'), +('12', '65', '6', '28661', '17153', '5'), +('12', '65', '6', '13638', '13153', '5'), +('12', '65', '6', '13634', '12297', '5'), +('12', '65', '17', '47654', '47895', '5'), +('12', '65', '17', '14747', '29006', '5'), +('12', '65', '17', '28910', '24385', '5'), +('12', '65', '17', '32933', '16278', '5'), +('12', '65', '7', '11876', '28211', '5'), +('12', '65', '7', '11323', '17812', '5'), +('12', '65', '7', '11620', '13499', '5'), +('12', '65', '7', '21994', '12998', '5'), +('12', '65', '9', '68198', '26915', '5'), +('12', '65', '9', '28665', '26543', '5'), +('12', '65', '9', '11019', '25346', '5'), +('12', '65', '9', '28668', '20323', '5'), +('12', '65', '15', '14818', '46803', '5'), +('12', '65', '15', '28944', '29679', '5'), +('12', '65', '15', '28905', '28153', '5'), +('12', '65', '15', '10232', '26963', '5'), +('12', '65', '20', '15881', '27203', '5'), +('12', '65', '20', '16158', '21563', '5'), +('12', '65', '20', '15927', '15275', '5'), +('12', '65', '20', '15877', '14886', '5'), +('12', '65', '12', '26996', '37103', '5'), +('12', '65', '12', '13627', '36145', '5'), +('12', '65', '12', '13626', '23849', '5'), +('12', '65', '12', '11878', '19745', '5'), +('12', '65', '18', '26777', '33730', '5'), +('12', '65', '18', '28649', '31255', '5'), +('12', '65', '18', '19027', '12885', '5'), +('12', '65', '18', '28932', '8285', '5'), +('12', '65', '19', '28881', '32419', '5'), +('12', '65', '19', '28934', '27903', '5'), +('12', '65', '19', '19079', '25421', '5'), +('12', '65', '19', '20434', '20012', '5'), +('12', '65', '13', '24793', '45170', '5'), +('12', '65', '13', '26788', '39215', '5'), +('12', '65', '13', '21875', '38668', '5'), +('12', '65', '13', '28981', '30399', '5'), +('12', '65', '14', '27274', '46445', '5'), +('12', '65', '14', '26788', '39215', '5'), +('12', '65', '14', '27272', '38888', '5'), +('12', '65', '14', '25998', '38643', '5'), +('12', '65', '11', '20496', '50365', '5'), +('12', '65', '11', '26788', '39215', '5'), +('12', '65', '11', '20486', '37072', '5'), +('12', '65', '11', '28798', '25124', '5'), +('12', '65', '22', '66397', '0', '4'), +('12', '65', '22', '62787', '0', '4'), +('12', '65', '22', '61948', '0', '4'), +('12', '65', '22', '21805', '0', '4'), +('12', '65', '1', '28944', '29679', '4'), +('12', '65', '1', '16257', '29405', '4'), +('12', '65', '1', '7130', '29053', '4'), +('12', '65', '1', '51230', '25142', '4'), +('12', '65', '2', '68195', '45251', '4'), +('12', '65', '2', '16158', '21563', '4'), +('12', '65', '2', '27880', '19008', '4'), +('12', '65', '2', '51235', '18149', '4'), +('12', '65', '3', '9444', '37462', '4'), +('12', '65', '3', '9436', '37022', '4'), +('12', '65', '3', '5772', '28751', '4'), +('12', '65', '3', '29452', '18602', '4'), +('12', '65', '5', '7769', '39059', '4'), +('12', '65', '5', '8774', '37512', '4'), +('12', '65', '5', '29198', '36383', '4'), +('12', '65', '5', '8772', '26595', '4'), +('12', '65', '8', '21998', '45559', '4'), +('12', '65', '8', '21996', '38949', '4'), +('12', '65', '8', '12082', '38465', '4'), +('12', '65', '8', '15815', '36874', '4'), +('12', '65', '6', '13654', '18718', '4'), +('12', '65', '6', '28661', '17153', '4'), +('12', '65', '6', '13638', '13153', '4'), +('12', '65', '6', '13634', '12297', '4'), +('12', '65', '17', '47654', '47895', '4'), +('12', '65', '17', '14747', '29006', '4'), +('12', '65', '17', '28910', '24385', '4'), +('12', '65', '17', '32933', '16278', '4'), +('12', '65', '7', '11876', '28211', '4'), +('12', '65', '7', '11323', '17812', '4'), +('12', '65', '7', '11620', '13499', '4'), +('12', '65', '7', '21994', '12998', '4'), +('12', '65', '9', '68198', '26915', '4'), +('12', '65', '9', '28665', '26543', '4'), +('12', '65', '9', '11019', '25346', '4'), +('12', '65', '9', '28668', '20323', '4'), +('12', '65', '15', '14818', '46803', '4'), +('12', '65', '15', '28944', '29679', '4'), +('12', '65', '15', '28905', '28153', '4'), +('12', '65', '15', '10232', '26963', '4'), +('12', '65', '20', '15881', '27203', '4'), +('12', '65', '20', '16158', '21563', '4'), +('12', '65', '20', '15927', '15275', '4'), +('12', '65', '20', '15877', '14886', '4'), +('12', '65', '12', '26996', '37103', '4'), +('12', '65', '12', '13627', '36145', '4'), +('12', '65', '12', '13626', '23849', '4'), +('12', '65', '12', '11878', '19745', '4'), +('12', '65', '18', '26777', '33730', '4'), +('12', '65', '18', '28649', '31255', '4'), +('12', '65', '18', '19027', '12885', '4'), +('12', '65', '18', '28932', '8285', '4'), +('12', '65', '19', '28881', '32419', '4'), +('12', '65', '19', '28934', '27903', '4'), +('12', '65', '19', '19079', '25421', '4'), +('12', '65', '19', '20434', '20012', '4'), +('12', '65', '13', '24793', '45170', '4'), +('12', '65', '13', '26788', '39215', '4'), +('12', '65', '13', '21875', '38668', '4'), +('12', '65', '13', '28981', '30399', '4'), +('12', '65', '14', '27274', '46445', '4'), +('12', '65', '14', '26788', '39215', '4'), +('12', '65', '14', '27272', '38888', '4'), +('12', '65', '14', '25998', '38643', '4'), +('12', '65', '11', '20496', '50365', '4'), +('12', '65', '11', '26788', '39215', '4'), +('12', '65', '11', '20486', '37072', '4'), +('12', '65', '11', '28798', '25124', '4'), +('12', '66', '22', '66397', '0', '7'), +('12', '66', '22', '62787', '0', '7'), +('12', '66', '22', '61948', '0', '7'), +('12', '66', '22', '21805', '0', '7'), +('12', '66', '1', '69062', '60541', '7'), +('12', '66', '1', '68949', '40608', '7'), +('12', '66', '1', '68807', '33600', '7'), +('12', '66', '1', '68058', '33600', '7'), +('12', '66', '2', '68195', '43854', '7'), +('12', '66', '2', '68807', '33600', '7'), +('12', '66', '2', '68057', '33600', '7'), +('12', '66', '2', '68060', '33600', '7'), +('12', '66', '3', '69074', '59827', '7'), +('12', '66', '3', '68818', '41435', '7'), +('12', '66', '3', '9444', '36265', '7'), +('12', '66', '3', '9436', '35774', '7'), +('12', '66', '5', '69135', '60021', '7'), +('12', '66', '5', '68808', '50656', '7'), +('12', '66', '5', '7769', '38062', '7'), +('12', '66', '5', '67625', '37507', '7'), +('12', '66', '8', '21998', '44161', '7'), +('12', '66', '8', '69164', '41007', '7'), +('12', '66', '8', '21996', '37751', '7'), +('12', '66', '8', '12082', '37268', '7'), +('12', '66', '6', '68788', '51059', '7'), +('12', '66', '6', '68841', '39666', '7'), +('12', '66', '6', '68807', '33600', '7'), +('12', '66', '6', '68057', '33600', '7'), +('12', '66', '17', '68984', '60058', '7'), +('12', '66', '17', '47654', '46498', '7'), +('12', '66', '17', '69153', '45251', '7'), +('12', '66', '17', '68782', '39557', '7'), +('12', '66', '7', '68060', '33600', '7'), +('12', '66', '7', '68807', '33600', '7'), +('12', '66', '7', '68057', '33600', '7'), +('12', '66', '7', '68058', '33600', '7'), +('12', '66', '9', '68606', '35985', '7'), +('12', '66', '9', '68060', '33600', '7'), +('12', '66', '9', '68807', '33600', '7'), +('12', '66', '9', '68058', '33600', '7'), +('12', '66', '15', '68957', '58867', '7'), +('12', '66', '15', '68846', '58217', '7'), +('12', '66', '15', '14818', '45406', '7'), +('12', '66', '15', '69453', '37663', '7'), +('12', '66', '20', '69134', '60208', '7'), +('12', '66', '20', '68726', '40568', '7'), +('12', '66', '20', '67625', '37507', '7'), +('12', '66', '20', '69445', '35875', '7'), +('12', '66', '12', '69255', '61450', '7'), +('12', '66', '12', '68912', '41248', '7'), +('12', '66', '12', '26996', '36106', '7'), +('12', '66', '12', '13627', '34897', '7'), +('12', '66', '18', '68751', '49352', '7'), +('12', '66', '18', '68807', '33600', '7'), +('12', '66', '18', '68058', '33600', '7'), +('12', '66', '18', '68057', '33600', '7'), +('12', '66', '19', '69078', '58818', '7'), +('12', '66', '19', '68913', '57066', '7'), +('12', '66', '19', '68807', '33600', '7'), +('12', '66', '19', '68060', '33600', '7'), +('12', '66', '13', '69046', '58004', '7'), +('12', '66', '13', '68744', '49370', '7'), +('12', '66', '13', '24793', '43673', '7'), +('12', '66', '13', '26788', '38017', '7'), +('12', '66', '14', '69046', '58004', '7'), +('12', '66', '14', '68745', '49798', '7'), +('12', '66', '14', '68744', '49370', '7'), +('12', '66', '14', '27274', '45048', '7'), +('12', '66', '11', '69162', '60900', '7'), +('12', '66', '11', '20496', '48868', '7'), +('12', '66', '11', '26788', '38017', '7'), +('12', '66', '11', '20486', '35874', '7'), +('12', '67', '22', '66397', '0', '7'), +('12', '67', '22', '62787', '0', '7'), +('12', '67', '22', '61948', '0', '7'), +('12', '67', '22', '21805', '0', '7'), +('12', '67', '1', '69062', '58744', '7'), +('12', '67', '1', '68949', '39611', '7'), +('12', '67', '1', '68807', '32000', '7'), +('12', '67', '1', '68057', '32000', '7'), +('12', '67', '2', '68195', '42457', '7'), +('12', '67', '2', '68807', '32000', '7'), +('12', '67', '2', '68057', '32000', '7'), +('12', '67', '2', '68060', '32000', '7'), +('12', '67', '3', '69074', '58029', '7'), +('12', '67', '3', '68818', '40036', '7'), +('12', '67', '3', '9444', '35067', '7'), +('12', '67', '3', '9436', '34526', '7'), +('12', '67', '5', '69135', '58424', '7'), +('12', '67', '5', '68808', '49059', '7'), +('12', '67', '5', '7769', '37064', '7'), +('12', '67', '5', '67625', '36935', '7'), +('12', '67', '8', '21998', '42764', '7'), +('12', '67', '8', '69164', '40260', '7'), +('12', '67', '8', '21996', '36553', '7'), +('12', '67', '8', '12082', '36070', '7'), +('12', '67', '6', '68788', '49459', '7'), +('12', '67', '6', '68841', '38668', '7'), +('12', '67', '6', '68807', '32000', '7'), +('12', '67', '6', '68057', '32000', '7'), +('12', '67', '17', '68984', '58261', '7'), +('12', '67', '17', '47654', '45102', '7'), +('12', '67', '17', '69153', '44354', '7'), +('12', '67', '17', '68782', '38560', '7'), +('12', '67', '7', '68060', '32000', '7'), +('12', '67', '7', '68807', '32000', '7'), +('12', '67', '7', '68057', '32000', '7'), +('12', '67', '7', '68058', '32000', '7'), +('12', '67', '9', '68606', '34786', '7'), +('12', '67', '9', '69100', '32808', '7'), +('12', '67', '9', '68057', '32000', '7'), +('12', '67', '9', '68058', '32000', '7'), +('12', '67', '15', '68957', '57069', '7'), +('12', '67', '15', '68846', '56420', '7'), +('12', '67', '15', '14818', '44009', '7'), +('12', '67', '15', '69453', '36466', '7'), +('12', '67', '20', '69134', '58611', '7'), +('12', '67', '20', '68726', '39169', '7'), +('12', '67', '20', '67625', '36935', '7'), +('12', '67', '20', '69445', '34677', '7'), +('12', '67', '12', '69255', '59853', '7'), +('12', '67', '12', '68912', '40001', '7'), +('12', '67', '12', '26996', '35109', '7'), +('12', '67', '12', '13627', '33649', '7'), +('12', '67', '18', '68751', '47855', '7'), +('12', '67', '18', '68807', '32000', '7'), +('12', '67', '18', '68058', '32000', '7'), +('12', '67', '18', '68057', '32000', '7'), +('12', '67', '19', '69078', '57020', '7'), +('12', '67', '19', '68913', '55269', '7'), +('12', '67', '19', '68807', '32000', '7'), +('12', '67', '19', '68060', '32000', '7'), +('12', '67', '13', '69046', '56208', '7'), +('12', '67', '13', '68744', '47772', '7'), +('12', '67', '13', '24793', '42175', '7'), +('12', '67', '13', '26788', '36820', '7'), +('12', '67', '14', '69046', '56208', '7'), +('12', '67', '14', '68745', '48199', '7'), +('12', '67', '14', '68744', '47772', '7'), +('12', '67', '14', '27274', '43650', '7'), +('12', '67', '11', '69162', '59303', '7'), +('12', '67', '11', '20496', '47370', '7'), +('12', '67', '11', '26788', '36820', '7'), +('12', '67', '11', '20486', '34675', '7'), +('12', '68', '22', '66397', '0', '7'), +('12', '68', '22', '62787', '0', '7'), +('12', '68', '22', '61948', '0', '7'), +('12', '68', '22', '21805', '0', '7'), +('12', '68', '1', '69062', '56948', '7'), +('12', '68', '1', '68949', '38614', '7'), +('12', '68', '1', '68057', '30400', '7'), +('12', '68', '1', '68058', '30400', '7'), +('12', '68', '2', '68195', '41060', '7'), +('12', '68', '2', '68807', '30400', '7'), +('12', '68', '2', '68057', '30400', '7'), +('12', '68', '2', '68060', '30400', '7'), +('12', '68', '3', '69074', '56231', '7'), +('12', '68', '3', '68818', '38637', '7'), +('12', '68', '3', '9444', '33869', '7'), +('12', '68', '3', '9436', '33278', '7'), +('12', '68', '5', '69135', '56826', '7'), +('12', '68', '5', '68808', '47462', '7'), +('12', '68', '5', '67625', '36363', '7'), +('12', '68', '5', '7769', '36067', '7'), +('12', '68', '8', '21998', '41366', '7'), +('12', '68', '8', '69164', '39513', '7'), +('12', '68', '8', '21996', '35355', '7'), +('12', '68', '8', '12082', '34873', '7'), +('12', '68', '6', '68788', '47859', '7'), +('12', '68', '6', '68841', '37671', '7'), +('12', '68', '6', '68807', '30400', '7'), +('12', '68', '6', '68057', '30400', '7'), +('12', '68', '17', '68984', '56464', '7'), +('12', '68', '17', '47654', '43706', '7'), +('12', '68', '17', '69153', '43458', '7'), +('12', '68', '17', '68782', '37563', '7'), +('12', '68', '7', '69082', '30905', '7'), +('12', '68', '7', '68060', '30400', '7'), +('12', '68', '7', '68057', '30400', '7'), +('12', '68', '7', '68058', '30400', '7'), +('12', '68', '9', '68606', '33587', '7'), +('12', '68', '9', '69100', '32236', '7'), +('12', '68', '9', '68057', '30400', '7'), +('12', '68', '9', '68058', '30400', '7'), +('12', '68', '15', '68957', '55272', '7'), +('12', '68', '15', '68846', '54622', '7'), +('12', '68', '15', '14818', '42612', '7'), +('12', '68', '15', '69453', '35268', '7'), +('12', '68', '20', '69134', '57014', '7'), +('12', '68', '20', '68726', '37770', '7'), +('12', '68', '20', '67625', '36363', '7'), +('12', '68', '20', '69445', '33479', '7'), +('12', '68', '12', '69255', '58255', '7'), +('12', '68', '12', '68912', '38753', '7'), +('12', '68', '12', '26996', '34112', '7'), +('12', '68', '12', '13627', '32401', '7'), +('12', '68', '18', '68751', '46358', '7'), +('12', '68', '18', '68807', '30400', '7'), +('12', '68', '18', '68058', '30400', '7'), +('12', '68', '18', '68057', '30400', '7'), +('12', '68', '19', '69078', '55223', '7'), +('12', '68', '19', '68913', '53471', '7'), +('12', '68', '19', '68807', '30400', '7'), +('12', '68', '19', '68060', '30400', '7'), +('12', '68', '13', '69046', '54411', '7'), +('12', '68', '13', '68744', '46174', '7'), +('12', '68', '13', '24793', '40678', '7'), +('12', '68', '13', '26788', '35622', '7'), +('12', '68', '14', '69046', '54411', '7'), +('12', '68', '14', '68745', '46601', '7'), +('12', '68', '14', '68744', '46174', '7'), +('12', '68', '14', '27274', '42253', '7'), +('12', '68', '11', '69162', '57707', '7'), +('12', '68', '11', '20496', '45873', '7'), +('12', '68', '11', '26788', '35622', '7'), +('12', '68', '11', '20486', '33477', '7'), +('12', '69', '22', '66397', '0', '7'), +('12', '69', '22', '62787', '0', '7'), +('12', '69', '22', '61948', '0', '7'), +('12', '69', '22', '21805', '0', '7'), +('12', '69', '1', '69062', '55151', '7'), +('12', '69', '1', '68949', '37617', '7'), +('12', '69', '1', '68057', '28800', '7'), +('12', '69', '1', '68807', '28800', '7'), +('12', '69', '2', '68195', '39663', '7'), +('12', '69', '2', '68807', '28800', '7'), +('12', '69', '2', '68057', '28800', '7'), +('12', '69', '2', '68058', '28800', '7'), +('12', '69', '3', '69074', '54433', '7'), +('12', '69', '3', '68818', '37239', '7'), +('12', '69', '3', '9444', '32672', '7'), +('12', '69', '3', '9436', '32030', '7'), +('12', '69', '5', '69135', '55229', '7'), +('12', '69', '5', '68808', '45865', '7'), +('12', '69', '5', '67625', '35791', '7'), +('12', '69', '5', '7769', '35069', '7'), +('12', '69', '8', '21998', '39968', '7'), +('12', '69', '8', '69164', '38766', '7'), +('12', '69', '8', '21996', '34158', '7'), +('12', '69', '8', '12082', '33675', '7'), +('12', '69', '6', '68788', '46259', '7'), +('12', '69', '6', '68841', '36673', '7'), +('12', '69', '6', '68060', '28800', '7'), +('12', '69', '6', '68807', '28800', '7'), +('12', '69', '17', '68984', '54667', '7'), +('12', '69', '17', '69153', '42562', '7'), +('12', '69', '17', '47654', '42309', '7'), +('12', '69', '17', '68782', '36566', '7'), +('12', '69', '7', '69082', '30332', '7'), +('12', '69', '7', '68060', '28800', '7'), +('12', '69', '7', '68057', '28800', '7'), +('12', '69', '7', '68058', '28800', '7'), +('12', '69', '9', '68606', '32389', '7'), +('12', '69', '9', '69100', '31664', '7'), +('12', '69', '9', '68060', '28800', '7'), +('12', '69', '9', '68057', '28800', '7'), +('12', '69', '15', '68957', '53474', '7'), +('12', '69', '15', '68846', '52825', '7'), +('12', '69', '15', '14818', '41215', '7'), +('12', '69', '15', '69453', '34071', '7'), +('12', '69', '20', '69134', '55417', '7'), +('12', '69', '20', '68726', '36371', '7'), +('12', '69', '20', '67625', '35791', '7'), +('12', '69', '20', '69445', '32281', '7'), +('12', '69', '12', '69255', '56657', '7'), +('12', '69', '12', '68912', '37505', '7'), +('12', '69', '12', '26996', '33115', '7'), +('12', '69', '12', '13627', '31153', '7'), +('12', '69', '18', '68751', '44861', '7'), +('12', '69', '18', '26777', '29135', '7'), +('12', '69', '18', '28649', '28967', '7'), +('12', '69', '18', '69149', '28819', '7'), +('12', '69', '19', '69078', '53425', '7'), +('12', '69', '19', '68913', '51674', '7'), +('12', '69', '19', '68807', '28800', '7'), +('12', '69', '19', '68060', '28800', '7'), +('12', '69', '13', '69046', '52614', '7'), +('12', '69', '13', '68744', '44576', '7'), +('12', '69', '13', '24793', '39180', '7'), +('12', '69', '13', '26788', '34425', '7'), +('12', '69', '14', '69046', '52614', '7'), +('12', '69', '14', '68745', '45003', '7'), +('12', '69', '14', '68744', '44576', '7'), +('12', '69', '14', '27274', '40856', '7'), +('12', '69', '11', '69162', '56111', '7'), +('12', '69', '11', '20496', '44375', '7'), +('12', '69', '11', '26788', '34425', '7'), +('12', '69', '11', '20486', '32279', '7'), +('12', '70', '22', '21805', '0', '11'), +('12', '70', '22', '61948', '0', '11'), +('12', '70', '22', '21807', '0', '11'), +('12', '70', '22', '12425', '0', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '70', '1', '51705', '80822', '11'), +('12', '70', '1', '47285', '60197', '11'), +('12', '70', '1', '69062', '53355', '11'), +('12', '70', '1', '83435', '40117', '11'), +('12', '70', '2', '39358', '52519', '11'), +('12', '70', '2', '68195', '38266', '11'), +('12', '70', '2', '83563', '27896', '11'), +('12', '70', '2', '39285', '27485', '11'), +('12', '70', '3', '83634', '80712', '11'), +('12', '70', '3', '71655', '63761', '11'), +('12', '70', '3', '83531', '54068', '11'), +('12', '70', '3', '69074', '52635', '11'), +('12', '70', '5', '39328', '81406', '11'), +('12', '70', '5', '69135', '53631', '11'), +('12', '70', '5', '47276', '45478', '11'), +('12', '70', '5', '68808', '44268', '11'), +('12', '70', '8', '39299', '80589', '11'), +('12', '70', '8', '71665', '67038', '11'), +('12', '70', '8', '47247', '50058', '11'), +('12', '70', '8', '47306', '45661', '11'), +('12', '70', '6', '39275', '80581', '11'), +('12', '70', '6', '83635', '80323', '11'), +('12', '70', '6', '39209', '53829', '11'), +('12', '70', '6', '39263', '47722', '11'), +('12', '70', '17', '70935', '84173', '11'), +('12', '70', '17', '70714', '55406', '11'), +('12', '70', '17', '71641', '54502', '11'), +('12', '70', '17', '68984', '52870', '11'), +('12', '70', '7', '71089', '42079', '11'), +('12', '70', '7', '69082', '29759', '11'), +('12', '70', '7', '68911', '27941', '11'), +('12', '70', '7', '83567', '27446', '11'), +('12', '70', '9', '51709', '82530', '11'), +('12', '70', '9', '68606', '31190', '11'), +('12', '70', '9', '39336', '31152', '11'), +('12', '70', '9', '69100', '31092', '11'), +('12', '70', '15', '51702', '79913', '11'), +('12', '70', '15', '39230', '52813', '11'), +('12', '70', '15', '68957', '51677', '11'), +('12', '70', '15', '68846', '51027', '11'), +('12', '70', '20', '39253', '81170', '11'), +('12', '70', '20', '83650', '80822', '11'), +('12', '70', '20', '39235', '78318', '11'), +('12', '70', '20', '69134', '53820', '11'), +('12', '70', '12', '83571', '80046', '11'), +('12', '70', '12', '69255', '55059', '11'), +('12', '70', '12', '71090', '42384', '11'), +('12', '70', '12', '68912', '36257', '11'), +('12', '70', '18', '70936', '63263', '11'), +('12', '70', '18', '68751', '43364', '11'), +('12', '70', '18', '83610', '30356', '11'), +('12', '70', '18', '69149', '28572', '11'), +('12', '70', '19', '69078', '51628', '11'), +('12', '70', '19', '68913', '49876', '11'), +('12', '70', '19', '71091', '42053', '11'), +('12', '70', '19', '47219', '41128', '11'), +('12', '70', '13', '47250', '51012', '11'), +('12', '70', '13', '69046', '50817', '11'), +('12', '70', '13', '70622', '46468', '11'), +('12', '70', '13', '68744', '42977', '11'), +('12', '70', '14', '71669', '66383', '11'), +('12', '70', '14', '47311', '61143', '11'), +('12', '70', '14', '47250', '51012', '11'), +('12', '70', '14', '69046', '50817', '11'), +('12', '70', '11', '83548', '59519', '11'), +('12', '70', '11', '69162', '54514', '11'), +('12', '70', '11', '47243', '49968', '11'), +('12', '70', '11', '71659', '43736', '11'), +('12', '70', '22', '61948', '0', '10'), +('12', '70', '22', '66397', '0', '10'), +('12', '70', '22', '21805', '0', '10'), +('12', '70', '22', '21807', '0', '10'), +('12', '70', '1', '47285', '60197', '10'), +('12', '70', '1', '69062', '53355', '10'), +('12', '70', '1', '83435', '40117', '10'), +('12', '70', '1', '70692', '39051', '10'), +('12', '70', '2', '68195', '38266', '10'), +('12', '70', '2', '83563', '27896', '10'), +('12', '70', '2', '68058', '27200', '10'), +('12', '70', '2', '68057', '27200', '10'), +('12', '70', '3', '83634', '80712', '10'), +('12', '70', '3', '71655', '63761', '10'), +('12', '70', '3', '83531', '54068', '10'), +('12', '70', '3', '69074', '52635', '10'), +('12', '70', '5', '69135', '53631', '10'), +('12', '70', '5', '47276', '45478', '10'), +('12', '70', '5', '68808', '44268', '10'), +('12', '70', '5', '83865', '37167', '10'), +('12', '70', '8', '71665', '67038', '10'), +('12', '70', '8', '47247', '50058', '10'), +('12', '70', '8', '47306', '45661', '10'), +('12', '70', '8', '83638', '39681', '10'), +('12', '70', '6', '83635', '80323', '10'), +('12', '70', '6', '68788', '44659', '10'), +('12', '70', '6', '71590', '40994', '10'), +('12', '70', '6', '68841', '35676', '10'), +('12', '70', '17', '70935', '84173', '10'), +('12', '70', '17', '70714', '55406', '10'), +('12', '70', '17', '71641', '54502', '10'), +('12', '70', '17', '68984', '52870', '10'), +('12', '70', '7', '71089', '42079', '10'), +('12', '70', '7', '69082', '29759', '10'), +('12', '70', '7', '68911', '27941', '10'), +('12', '70', '7', '83567', '27446', '10'), +('12', '70', '9', '68606', '31190', '10'), +('12', '70', '9', '69100', '31092', '10'), +('12', '70', '9', '83655', '29569', '10'), +('12', '70', '9', '68057', '27200', '10'), +('12', '70', '15', '68957', '51677', '10'), +('12', '70', '15', '68846', '51027', '10'), +('12', '70', '15', '83458', '46636', '10'), +('12', '70', '15', '47240', '39952', '10'), +('12', '70', '20', '83650', '80822', '10'), +('12', '70', '20', '69134', '53820', '10'), +('12', '70', '20', '83857', '38768', '10'), +('12', '70', '20', '67625', '35219', '10'), +('12', '70', '12', '83571', '80046', '10'), +('12', '70', '12', '69255', '55059', '10'), +('12', '70', '12', '71090', '42384', '10'), +('12', '70', '12', '68912', '36257', '10'), +('12', '70', '18', '70936', '63263', '10'), +('12', '70', '18', '68751', '43364', '10'), +('12', '70', '18', '83610', '30356', '10'), +('12', '70', '18', '69149', '28572', '10'), +('12', '70', '19', '69078', '51628', '10'), +('12', '70', '19', '68913', '49876', '10'), +('12', '70', '19', '71091', '42053', '10'), +('12', '70', '19', '47219', '41128', '10'), +('12', '70', '13', '47250', '51012', '10'), +('12', '70', '13', '69046', '50817', '10'), +('12', '70', '13', '70622', '46468', '10'), +('12', '70', '13', '68744', '42977', '10'), +('12', '70', '14', '71669', '66383', '10'), +('12', '70', '14', '47311', '61143', '10'), +('12', '70', '14', '47250', '51012', '10'), +('12', '70', '14', '69046', '50817', '10'), +('12', '70', '11', '83548', '59519', '10'), +('12', '70', '11', '69162', '54514', '10'), +('12', '70', '11', '47243', '49968', '10'), +('12', '70', '11', '71659', '43736', '10'), +('12', '70', '22', '66397', '0', '9'), +('12', '70', '22', '62787', '0', '9'), +('12', '70', '22', '61948', '0', '9'), +('12', '70', '22', '21805', '0', '9'), +('12', '70', '1', '47285', '60197', '9'), +('12', '70', '1', '69062', '53355', '9'), +('12', '70', '1', '70692', '39051', '9'), +('12', '70', '1', '68949', '36620', '9'), +('12', '70', '2', '68195', '38266', '9'), +('12', '70', '2', '68807', '27200', '9'), +('12', '70', '2', '68057', '27200', '9'), +('12', '70', '2', '68058', '27200', '9'), +('12', '70', '3', '71655', '63761', '9'), +('12', '70', '3', '69074', '52635', '9'), +('12', '70', '3', '68818', '35840', '9'), +('12', '70', '3', '9444', '31474', '9'), +('12', '70', '5', '69135', '53631', '9'), +('12', '70', '5', '47276', '45478', '9'), +('12', '70', '5', '68808', '44268', '9'), +('12', '70', '5', '67625', '35219', '9'), +('12', '70', '8', '71665', '67038', '9'), +('12', '70', '8', '47247', '50058', '9'), +('12', '70', '8', '47306', '45661', '9'), +('12', '70', '8', '21998', '38571', '9'), +('12', '70', '6', '68788', '44659', '9'), +('12', '70', '6', '71590', '40994', '9'), +('12', '70', '6', '68841', '35676', '9'), +('12', '70', '6', '68057', '27200', '9'), +('12', '70', '17', '70935', '84173', '9'), +('12', '70', '17', '70714', '55406', '9'), +('12', '70', '17', '71641', '54502', '9'), +('12', '70', '17', '68984', '52870', '9'), +('12', '70', '7', '71089', '42079', '9'), +('12', '70', '7', '69082', '29759', '9'), +('12', '70', '7', '68911', '27941', '9'), +('12', '70', '7', '68807', '27200', '9'), +('12', '70', '9', '68606', '31190', '9'), +('12', '70', '9', '69100', '31092', '9'), +('12', '70', '9', '68060', '27200', '9'), +('12', '70', '9', '68057', '27200', '9'), +('12', '70', '15', '68957', '51677', '9'), +('12', '70', '15', '68846', '51027', '9'), +('12', '70', '15', '47240', '39952', '9'), +('12', '70', '15', '14818', '39818', '9'), +('12', '70', '20', '69134', '53820', '9'), +('12', '70', '20', '67625', '35219', '9'), +('12', '70', '20', '68726', '34972', '9'), +('12', '70', '20', '69445', '31083', '9'), +('12', '70', '12', '69255', '55059', '9'), +('12', '70', '12', '71090', '42384', '9'), +('12', '70', '12', '68912', '36257', '9'), +('12', '70', '12', '26996', '32119', '9'), +('12', '70', '18', '70936', '63263', '9'), +('12', '70', '18', '68751', '43364', '9'), +('12', '70', '18', '69149', '28572', '9'), +('12', '70', '18', '28649', '28396', '9'), +('12', '70', '19', '69078', '51628', '9'), +('12', '70', '19', '68913', '49876', '9'), +('12', '70', '19', '71091', '42053', '9'), +('12', '70', '19', '47219', '41128', '9'), +('12', '70', '13', '47250', '51012', '9'), +('12', '70', '13', '69046', '50817', '9'), +('12', '70', '13', '70622', '46468', '9'), +('12', '70', '13', '68744', '42977', '9'), +('12', '70', '14', '71669', '66383', '9'), +('12', '70', '14', '47311', '61143', '9'), +('12', '70', '14', '47250', '51012', '9'), +('12', '70', '14', '69046', '50817', '9'), +('12', '70', '11', '69162', '54514', '9'), +('12', '70', '11', '47243', '49968', '9'), +('12', '70', '11', '71659', '43736', '9'), +('12', '70', '11', '20496', '42878', '9'), +('12', '70', '22', '66397', '0', '8'), +('12', '70', '22', '62787', '0', '8'), +('12', '70', '22', '61948', '0', '8'), +('12', '70', '22', '21805', '0', '8'), +('12', '70', '1', '47285', '60197', '8'), +('12', '70', '1', '69062', '53355', '8'), +('12', '70', '1', '70692', '39051', '8'), +('12', '70', '1', '68949', '36620', '8'), +('12', '70', '2', '68195', '38266', '8'), +('12', '70', '2', '68807', '27200', '8'), +('12', '70', '2', '68057', '27200', '8'), +('12', '70', '2', '68058', '27200', '8'), +('12', '70', '3', '69074', '52635', '8'), +('12', '70', '3', '68818', '35840', '8'), +('12', '70', '3', '9444', '31474', '8'), +('12', '70', '3', '9436', '30782', '8'), +('12', '70', '5', '69135', '53631', '8'), +('12', '70', '5', '47276', '45478', '8'), +('12', '70', '5', '68808', '44268', '8'), +('12', '70', '5', '67625', '35219', '8'), +('12', '70', '8', '47247', '50058', '8'), +('12', '70', '8', '47306', '45661', '8'), +('12', '70', '8', '21998', '38571', '8'), +('12', '70', '8', '69164', '38019', '8'), +('12', '70', '6', '68788', '44659', '8'), +('12', '70', '6', '68841', '35676', '8'), +('12', '70', '6', '68058', '27200', '8'), +('12', '70', '6', '68807', '27200', '8'), +('12', '70', '17', '70935', '84173', '8'), +('12', '70', '17', '70714', '55406', '8'), +('12', '70', '17', '68984', '52870', '8'), +('12', '70', '17', '69153', '41666', '8'), +('12', '70', '7', '71089', '42079', '8'), +('12', '70', '7', '69082', '29759', '8'), +('12', '70', '7', '68911', '27941', '8'), +('12', '70', '7', '68057', '27200', '8'), +('12', '70', '9', '68606', '31190', '8'), +('12', '70', '9', '69100', '31092', '8'), +('12', '70', '9', '68057', '27200', '8'), +('12', '70', '9', '68807', '27200', '8'), +('12', '70', '15', '68957', '51677', '8'), +('12', '70', '15', '68846', '51027', '8'), +('12', '70', '15', '47240', '39952', '8'), +('12', '70', '15', '14818', '39818', '8'), +('12', '70', '20', '69134', '53820', '8'), +('12', '70', '20', '67625', '35219', '8'), +('12', '70', '20', '68726', '34972', '8'), +('12', '70', '20', '69445', '31083', '8'), +('12', '70', '12', '69255', '55059', '8'), +('12', '70', '12', '71090', '42384', '8'), +('12', '70', '12', '68912', '36257', '8'), +('12', '70', '12', '26996', '32119', '8'), +('12', '70', '18', '70936', '63263', '8'), +('12', '70', '18', '68751', '43364', '8'), +('12', '70', '18', '69149', '28572', '8'), +('12', '70', '18', '28649', '28396', '8'), +('12', '70', '19', '69078', '51628', '8'), +('12', '70', '19', '68913', '49876', '8'), +('12', '70', '19', '71091', '42053', '8'), +('12', '70', '19', '47219', '41128', '8'), +('12', '70', '13', '47250', '51012', '8'), +('12', '70', '13', '69046', '50817', '8'), +('12', '70', '13', '70622', '46468', '8'), +('12', '70', '13', '68744', '42977', '8'), +('12', '70', '14', '47311', '61143', '8'), +('12', '70', '14', '47250', '51012', '8'), +('12', '70', '14', '69046', '50817', '8'), +('12', '70', '14', '70622', '46468', '8'), +('12', '70', '11', '69162', '54514', '8'), +('12', '70', '11', '47243', '49968', '8'), +('12', '70', '11', '20496', '42878', '8'), +('12', '70', '11', '26788', '33227', '8'), +('12', '71', '22', '21805', '0', '11'), +('12', '71', '22', '61948', '0', '11'), +('12', '71', '22', '21807', '0', '11'), +('12', '71', '22', '12425', '0', '11'), +('12', '71', '1', '51705', '78425', '11'), +('12', '71', '1', '47285', '58400', '11'), +('12', '71', '1', '69062', '51559', '11'), +('12', '71', '1', '83435', '38919', '11'), +('12', '71', '2', '39358', '51522', '11'), +('12', '71', '2', '68195', '36870', '11'), +('12', '71', '2', '83563', '27901', '11'), +('12', '71', '2', '39285', '27488', '11'), +('12', '71', '3', '83634', '78315', '11'), +('12', '71', '3', '71655', '61764', '11'), +('12', '71', '3', '83531', '52471', '11'), +('12', '71', '3', '69074', '50837', '11'), +('12', '71', '5', '39328', '79010', '11'), +('12', '71', '5', '69135', '52034', '11'), +('12', '71', '5', '47276', '44481', '11'), +('12', '71', '5', '68808', '42671', '11'), +('12', '71', '8', '39299', '78192', '11'), +('12', '71', '8', '71665', '65041', '11'), +('12', '71', '8', '47247', '48659', '11'), +('12', '71', '8', '47306', '44664', '11'), +('12', '71', '6', '39275', '78185', '11'), +('12', '71', '6', '83635', '77926', '11'), +('12', '71', '6', '39209', '52232', '11'), +('12', '71', '6', '39263', '46724', '11'), +('12', '71', '17', '70935', '81426', '11'), +('12', '71', '17', '70714', '53811', '11'), +('12', '71', '17', '71641', '52905', '11'), +('12', '71', '17', '83606', '51661', '11'), +('12', '71', '7', '71089', '40882', '11'), +('12', '71', '7', '69082', '29186', '11'), +('12', '71', '7', '83567', '27451', '11'), +('12', '71', '7', '68911', '27369', '11'), +('12', '71', '9', '51709', '80133', '11'), +('12', '71', '9', '39336', '31157', '11'), +('12', '71', '9', '69100', '30521', '11'), +('12', '71', '9', '68606', '29991', '11'), +('12', '71', '15', '51702', '77517', '11'), +('12', '71', '15', '39230', '51216', '11'), +('12', '71', '15', '68957', '49879', '11'), +('12', '71', '15', '68846', '49229', '11'), +('12', '71', '20', '39253', '78773', '11'), +('12', '71', '20', '83650', '78425', '11'), +('12', '71', '20', '39235', '75921', '11'), +('12', '71', '20', '69134', '52223', '11'), +('12', '71', '12', '83571', '77651', '11'), +('12', '71', '12', '69255', '53461', '11'), +('12', '71', '12', '71090', '41186', '11'), +('12', '71', '12', '68912', '35009', '11'), +('12', '71', '18', '70936', '61463', '11'), +('12', '71', '18', '68751', '41867', '11'), +('12', '71', '18', '83610', '30360', '11'), +('12', '71', '18', '69149', '28325', '11'), +('12', '71', '19', '69078', '49830', '11'), +('12', '71', '19', '68913', '48079', '11'), +('12', '71', '19', '71091', '40853', '11'), +('12', '71', '19', '47219', '40231', '11'), +('12', '71', '13', '47250', '49615', '11'), +('12', '71', '13', '69046', '49020', '11'), +('12', '71', '13', '70622', '45071', '11'), +('12', '71', '13', '68744', '41379', '11'), +('12', '71', '14', '71669', '64385', '11'), +('12', '71', '14', '47311', '59347', '11'), +('12', '71', '14', '47250', '49615', '11'), +('12', '71', '14', '69046', '49020', '11'), +('12', '71', '11', '83548', '57722', '11'), +('12', '71', '11', '69162', '52918', '11'), +('12', '71', '11', '47243', '48571', '11'), +('12', '71', '11', '71659', '42739', '11'), +('12', '72', '22', '21805', '0', '11'), +('12', '72', '22', '61948', '0', '11'), +('12', '72', '22', '21807', '0', '11'), +('12', '72', '22', '12425', '0', '11'), +('12', '72', '1', '51705', '76028', '11'), +('12', '72', '1', '47285', '56603', '11'), +('12', '72', '1', '69062', '49762', '11'), +('12', '72', '1', '83435', '37720', '11'), +('12', '72', '2', '39358', '50526', '11'), +('12', '72', '2', '68195', '35473', '11'), +('12', '72', '2', '83563', '27906', '11'), +('12', '72', '2', '39285', '27491', '11'), +('12', '72', '3', '83634', '75919', '11'), +('12', '72', '3', '71655', '59767', '11'), +('12', '72', '3', '83531', '50874', '11'), +('12', '72', '3', '69074', '49039', '11'), +('12', '72', '5', '39328', '76614', '11'), +('12', '72', '5', '69135', '50436', '11'), +('12', '72', '5', '47276', '43484', '11'), +('12', '72', '5', '68808', '41074', '11'), +('12', '72', '8', '39299', '75795', '11'), +('12', '72', '8', '71665', '63044', '11'), +('12', '72', '8', '47247', '47259', '11'), +('12', '72', '8', '47306', '43667', '11'), +('12', '72', '6', '39275', '75788', '11'), +('12', '72', '6', '83635', '75529', '11'), +('12', '72', '6', '39209', '50634', '11'), +('12', '72', '6', '39263', '45726', '11'), +('12', '72', '17', '70935', '78679', '11'), +('12', '72', '17', '70714', '52215', '11'), +('12', '72', '17', '71641', '51308', '11'), +('12', '72', '17', '83606', '50665', '11'), +('12', '72', '7', '71089', '39684', '11'), +('12', '72', '7', '69082', '28613', '11'), +('12', '72', '7', '83567', '27456', '11'), +('12', '72', '7', '68911', '26797', '11'), +('12', '72', '9', '51709', '77736', '11'), +('12', '72', '9', '39336', '31161', '11'), +('12', '72', '9', '69100', '29949', '11'), +('12', '72', '9', '83655', '29575', '11'), +('12', '72', '15', '51702', '75121', '11'), +('12', '72', '15', '39230', '49619', '11'), +('12', '72', '15', '68957', '48082', '11'), +('12', '72', '15', '68846', '47432', '11'), +('12', '72', '20', '39253', '76376', '11'), +('12', '72', '20', '83650', '76028', '11'), +('12', '72', '20', '39235', '73524', '11'), +('12', '72', '20', '69134', '50626', '11'), +('12', '72', '12', '83571', '75256', '11'), +('12', '72', '12', '69255', '51864', '11'), +('12', '72', '12', '71090', '39988', '11'), +('12', '72', '12', '68912', '33762', '11'), +('12', '72', '18', '70936', '59664', '11'), +('12', '72', '18', '68751', '40370', '11'), +('12', '72', '18', '83610', '30364', '11'), +('12', '72', '18', '69149', '28078', '11'), +('12', '72', '19', '69078', '48033', '11'), +('12', '72', '19', '68913', '46281', '11'), +('12', '72', '19', '71091', '39653', '11'), +('12', '72', '19', '47219', '39333', '11'), +('12', '72', '13', '47250', '48218', '11'), +('12', '72', '13', '69046', '47223', '11'), +('12', '72', '13', '70622', '43674', '11'), +('12', '72', '13', '68744', '39781', '11'), +('12', '72', '14', '71669', '62388', '11'), +('12', '72', '14', '47311', '57550', '11'), +('12', '72', '14', '47250', '48218', '11'), +('12', '72', '14', '69046', '47223', '11'), +('12', '72', '11', '83548', '55925', '11'), +('12', '72', '11', '69162', '51322', '11'), +('12', '72', '11', '47243', '47173', '11'), +('12', '72', '11', '83665', '41774', '11'), +('12', '73', '22', '21805', '0', '11'), +('12', '73', '22', '61948', '0', '11'), +('12', '73', '22', '21807', '0', '11'), +('12', '73', '22', '12425', '0', '11'), +('12', '73', '1', '51705', '73631', '11'), +('12', '73', '1', '47285', '54805', '11'), +('12', '73', '1', '69062', '47966', '11'), +('12', '73', '1', '83435', '36522', '11'), +('12', '73', '2', '39358', '49529', '11'), +('12', '73', '2', '68195', '34076', '11'), +('12', '73', '2', '83563', '27910', '11'), +('12', '73', '2', '39285', '27495', '11'), +('12', '73', '3', '83634', '73523', '11'), +('12', '73', '3', '71655', '57770', '11'), +('12', '73', '3', '83531', '49277', '11'), +('12', '73', '3', '83658', '47658', '11'), +('12', '73', '5', '39328', '74217', '11'), +('12', '73', '5', '69135', '48839', '11'), +('12', '73', '5', '47276', '42487', '11'), +('12', '73', '5', '68808', '39477', '11'), +('12', '73', '8', '39299', '73397', '11'), +('12', '73', '8', '71665', '61048', '11'), +('12', '73', '8', '47247', '45859', '11'), +('12', '73', '8', '47306', '42670', '11'), +('12', '73', '6', '39275', '73391', '11'), +('12', '73', '6', '83635', '73133', '11'), +('12', '73', '6', '39209', '49037', '11'), +('12', '73', '6', '39263', '44729', '11'), +('12', '73', '17', '70935', '75933', '11'), +('12', '73', '17', '70714', '50619', '11'), +('12', '73', '17', '71641', '49710', '11'), +('12', '73', '17', '83606', '49670', '11'), +('12', '73', '7', '71089', '38487', '11'), +('12', '73', '7', '69082', '28040', '11'), +('12', '73', '7', '83567', '27461', '11'), +('12', '73', '7', '68911', '26225', '11'), +('12', '73', '9', '51709', '75339', '11'), +('12', '73', '9', '39336', '31165', '11'), +('12', '73', '9', '83655', '29578', '11'), +('12', '73', '9', '69100', '29377', '11'), +('12', '73', '15', '51702', '72724', '11'), +('12', '73', '15', '39230', '48022', '11'), +('12', '73', '15', '68957', '46284', '11'), +('12', '73', '15', '68846', '45634', '11'), +('12', '73', '20', '39253', '73979', '11'), +('12', '73', '20', '83650', '73631', '11'), +('12', '73', '20', '39235', '71127', '11'), +('12', '73', '20', '69134', '49029', '11'), +('12', '73', '12', '83571', '72861', '11'), +('12', '73', '12', '69255', '50266', '11'), +('12', '73', '12', '71090', '38790', '11'), +('12', '73', '12', '68912', '32514', '11'), +('12', '73', '18', '70936', '57864', '11'), +('12', '73', '18', '68751', '38873', '11'), +('12', '73', '18', '83610', '30369', '11'), +('12', '73', '18', '69149', '27831', '11'), +('12', '73', '19', '69078', '46235', '11'), +('12', '73', '19', '68913', '44484', '11'), +('12', '73', '19', '71091', '38453', '11'), +('12', '73', '19', '47219', '38436', '11'), +('12', '73', '13', '47250', '46821', '11'), +('12', '73', '13', '69046', '45426', '11'), +('12', '73', '13', '70622', '42277', '11'), +('12', '73', '13', '68744', '38183', '11'), +('12', '73', '14', '71669', '60391', '11'), +('12', '73', '14', '47311', '55753', '11'), +('12', '73', '14', '47250', '46821', '11'), +('12', '73', '14', '69046', '45426', '11'), +('12', '73', '11', '83548', '54128', '11'), +('12', '73', '11', '69162', '49726', '11'), +('12', '73', '11', '47243', '45775', '11'), +('12', '73', '11', '83665', '41203', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '74', '22', '21805', '0', '11'), +('12', '74', '22', '61948', '0', '11'), +('12', '74', '22', '21807', '0', '11'), +('12', '74', '22', '12425', '0', '11'), +('12', '74', '1', '51705', '71234', '11'), +('12', '74', '1', '47285', '53008', '11'), +('12', '74', '1', '69062', '46169', '11'), +('12', '74', '1', '83435', '35323', '11'), +('12', '74', '2', '39358', '48532', '11'), +('12', '74', '2', '68195', '32679', '11'), +('12', '74', '2', '83563', '27915', '11'), +('12', '74', '2', '39285', '27498', '11'), +('12', '74', '3', '83634', '71126', '11'), +('12', '74', '3', '71655', '55773', '11'), +('12', '74', '3', '83531', '47680', '11'), +('12', '74', '3', '83658', '46661', '11'), +('12', '74', '5', '39328', '71821', '11'), +('12', '74', '5', '69135', '47241', '11'), +('12', '74', '5', '47276', '41491', '11'), +('12', '74', '5', '68808', '37880', '11'), +('12', '74', '8', '39299', '71000', '11'), +('12', '74', '8', '71665', '59051', '11'), +('12', '74', '8', '47247', '44459', '11'), +('12', '74', '8', '47306', '41673', '11'), +('12', '74', '6', '39275', '70994', '11'), +('12', '74', '6', '83635', '70736', '11'), +('12', '74', '6', '39209', '47439', '11'), +('12', '74', '6', '39263', '43731', '11'), +('12', '74', '17', '70935', '73186', '11'), +('12', '74', '17', '70714', '49024', '11'), +('12', '74', '17', '83606', '48674', '11'), +('12', '74', '17', '71641', '48113', '11'), +('12', '74', '7', '71089', '37289', '11'), +('12', '74', '7', '83567', '27466', '11'), +('12', '74', '7', '69082', '27466', '11'), +('12', '74', '7', '68911', '25653', '11'), +('12', '74', '9', '51709', '72942', '11'), +('12', '74', '9', '39336', '31169', '11'), +('12', '74', '9', '83655', '29581', '11'), +('12', '74', '9', '69100', '28805', '11'), +('12', '74', '15', '51702', '70328', '11'), +('12', '74', '15', '39230', '46425', '11'), +('12', '74', '15', '68957', '44487', '11'), +('12', '74', '15', '68846', '43837', '11'), +('12', '74', '20', '39253', '71582', '11'), +('12', '74', '20', '83650', '71234', '11'), +('12', '74', '20', '39235', '68730', '11'), +('12', '74', '20', '69134', '47432', '11'), +('12', '74', '12', '83571', '70466', '11'), +('12', '74', '12', '69255', '48668', '11'), +('12', '74', '12', '71090', '37592', '11'), +('12', '74', '12', '68912', '31266', '11'), +('12', '74', '18', '70936', '56064', '11'), +('12', '74', '18', '68751', '37376', '11'), +('12', '74', '18', '83610', '30373', '11'), +('12', '74', '18', '69149', '27584', '11'), +('12', '74', '19', '69078', '44438', '11'), +('12', '74', '19', '68913', '42686', '11'), +('12', '74', '19', '47219', '37538', '11'), +('12', '74', '19', '71091', '37253', '11'), +('12', '74', '13', '47250', '45424', '11'), +('12', '74', '13', '69046', '43629', '11'), +('12', '74', '13', '70622', '40881', '11'), +('12', '74', '13', '68744', '36585', '11'), +('12', '74', '14', '71669', '58394', '11'), +('12', '74', '14', '47311', '53956', '11'), +('12', '74', '14', '47250', '45424', '11'), +('12', '74', '14', '69046', '43629', '11'), +('12', '74', '11', '83548', '52331', '11'), +('12', '74', '11', '69162', '48129', '11'), +('12', '74', '11', '47243', '44378', '11'), +('12', '74', '11', '83665', '40633', '11'), +('12', '75', '22', '21807', '0', '13'), +('12', '75', '22', '21805', '0', '13'), +('12', '75', '22', '12425', '0', '13'), +('12', '75', '22', '39342', '0', '13'), +('12', '75', '1', '51705', '68838', '13'), +('12', '75', '1', '47285', '51211', '13'), +('12', '75', '1', '80676', '46621', '13'), +('12', '75', '1', '69062', '44373', '13'), +('12', '75', '2', '39358', '47535', '13'), +('12', '75', '2', '68195', '31282', '13'), +('12', '75', '2', '83563', '27920', '13'), +('12', '75', '2', '39285', '27501', '13'), +('12', '75', '3', '83634', '68730', '13'), +('12', '75', '3', '71655', '53776', '13'), +('12', '75', '3', '83531', '46083', '13'), +('12', '75', '3', '83658', '45664', '13'), +('12', '75', '5', '39328', '69424', '13'), +('12', '75', '5', '69135', '45644', '13'), +('12', '75', '5', '80661', '45102', '13'), +('12', '75', '5', '80615', '41175', '13'), +('12', '75', '8', '39299', '68603', '13'), +('12', '75', '8', '71665', '57054', '13'), +('12', '75', '8', '80679', '46708', '13'), +('12', '75', '8', '47247', '43059', '13'), +('12', '75', '6', '39275', '68598', '13'), +('12', '75', '6', '83635', '68339', '13'), +('12', '75', '6', '39209', '45842', '13'), +('12', '75', '6', '39263', '42734', '13'), +('12', '75', '17', '70935', '70439', '13'), +('12', '75', '17', '83606', '47678', '13'), +('12', '75', '17', '70714', '47428', '13'), +('12', '75', '17', '71641', '46516', '13'), +('12', '75', '7', '71089', '36092', '13'), +('12', '75', '7', '83567', '27471', '13'), +('12', '75', '7', '69082', '26893', '13'), +('12', '75', '7', '70931', '25346', '13'), +('12', '75', '9', '51709', '70545', '13'), +('12', '75', '9', '46938', '40771', '13'), +('12', '75', '9', '53440', '35930', '13'), +('12', '75', '9', '39336', '31174', '13'), +('12', '75', '15', '51702', '67932', '13'), +('12', '75', '15', '79909', '48883', '13'), +('12', '75', '15', '80666', '47007', '13'), +('12', '75', '15', '80686', '46532', '13'), +('12', '75', '20', '39253', '69185', '13'), +('12', '75', '20', '83650', '68837', '13'), +('12', '75', '20', '39235', '66333', '13'), +('12', '75', '20', '80680', '46782', '13'), +('12', '75', '12', '83571', '68071', '13'), +('12', '75', '12', '69255', '47070', '13'), +('12', '75', '12', '71090', '36394', '13'), +('12', '75', '12', '68912', '30018', '13'), +('12', '75', '18', '70936', '54264', '13'), +('12', '75', '18', '68751', '35879', '13'), +('12', '75', '18', '46810', '30484', '13'), +('12', '75', '18', '83610', '30377', '13'), +('12', '75', '19', '69078', '42640', '13'), +('12', '75', '19', '68913', '40889', '13'), +('12', '75', '19', '47219', '36641', '13'), +('12', '75', '19', '71091', '36053', '13'), +('12', '75', '13', '47250', '44027', '13'), +('12', '75', '13', '80633', '42392', '13'), +('12', '75', '13', '69046', '41832', '13'), +('12', '75', '13', '70622', '39484', '13'), +('12', '75', '14', '71669', '56397', '13'), +('12', '75', '14', '47311', '52159', '13'), +('12', '75', '14', '47250', '44027', '13'), +('12', '75', '14', '80665', '42682', '13'), +('12', '75', '11', '83548', '50534', '13'), +('12', '75', '11', '80668', '46631', '13'), +('12', '75', '11', '69162', '46533', '13'), +('12', '75', '11', '47243', '42980', '13'), +('12', '75', '22', '21807', '0', '12'), +('12', '75', '22', '21805', '0', '12'), +('12', '75', '22', '12425', '0', '12'), +('12', '75', '22', '39342', '0', '12'), +('12', '75', '1', '51705', '68838', '12'), +('12', '75', '1', '47285', '51211', '12'), +('12', '75', '1', '69062', '44373', '12'), +('12', '75', '1', '46882', '40606', '12'), +('12', '75', '2', '39358', '47535', '12'), +('12', '75', '2', '68195', '31282', '12'), +('12', '75', '2', '83563', '27920', '12'), +('12', '75', '2', '39285', '27501', '12'), +('12', '75', '3', '83634', '68730', '12'), +('12', '75', '3', '71655', '53776', '12'), +('12', '75', '3', '83531', '46083', '12'), +('12', '75', '3', '83658', '45664', '12'), +('12', '75', '5', '39328', '69424', '12'), +('12', '75', '5', '69135', '45644', '12'), +('12', '75', '5', '47276', '40494', '12'), +('12', '75', '5', '46934', '40383', '12'), +('12', '75', '8', '39299', '68603', '12'), +('12', '75', '8', '71665', '57054', '12'), +('12', '75', '8', '47247', '43059', '12'), +('12', '75', '8', '47306', '40676', '12'), +('12', '75', '6', '39275', '68598', '12'), +('12', '75', '6', '83635', '68339', '12'), +('12', '75', '6', '39209', '45842', '12'), +('12', '75', '6', '39263', '42734', '12'), +('12', '75', '17', '70935', '70439', '12'), +('12', '75', '17', '83606', '47678', '12'), +('12', '75', '17', '70714', '47428', '12'), +('12', '75', '17', '71641', '46516', '12'), +('12', '75', '7', '71089', '36092', '12'), +('12', '75', '7', '83567', '27471', '12'), +('12', '75', '7', '69082', '26893', '12'), +('12', '75', '7', '70931', '25346', '12'), +('12', '75', '9', '51709', '70545', '12'), +('12', '75', '9', '46938', '40771', '12'), +('12', '75', '9', '53440', '35930', '12'), +('12', '75', '9', '39336', '31174', '12'), +('12', '75', '15', '51702', '67932', '12'), +('12', '75', '15', '39230', '44828', '12'), +('12', '75', '15', '68957', '42689', '12'), +('12', '75', '15', '68846', '42039', '12'), +('12', '75', '20', '39253', '69185', '12'), +('12', '75', '20', '83650', '68837', '12'), +('12', '75', '20', '39235', '66333', '12'), +('12', '75', '20', '69134', '45836', '12'), +('12', '75', '12', '83571', '68071', '12'), +('12', '75', '12', '69255', '47070', '12'), +('12', '75', '12', '71090', '36394', '12'), +('12', '75', '12', '68912', '30018', '12'), +('12', '75', '18', '70936', '54264', '12'), +('12', '75', '18', '68751', '35879', '12'), +('12', '75', '18', '46810', '30484', '12'), +('12', '75', '18', '83610', '30377', '12'), +('12', '75', '19', '69078', '42640', '12'), +('12', '75', '19', '68913', '40889', '12'), +('12', '75', '19', '47219', '36641', '12'), +('12', '75', '19', '71091', '36053', '12'), +('12', '75', '13', '47250', '44027', '12'), +('12', '75', '13', '69046', '41832', '12'), +('12', '75', '13', '70622', '39484', '12'), +('12', '75', '13', '71671', '35579', '12'), +('12', '75', '14', '71669', '56397', '12'), +('12', '75', '14', '47311', '52159', '12'), +('12', '75', '14', '47250', '44027', '12'), +('12', '75', '14', '69046', '41832', '12'), +('12', '75', '11', '83548', '50534', '12'), +('12', '75', '11', '69162', '46533', '12'), +('12', '75', '11', '47243', '42980', '12'), +('12', '75', '11', '46939', '40880', '12'), +('12', '76', '22', '21807', '0', '13'), +('12', '76', '22', '21805', '0', '13'), +('12', '76', '22', '12425', '0', '13'), +('12', '76', '22', '39342', '0', '13'), +('12', '76', '1', '51705', '66441', '13'), +('12', '76', '1', '47285', '49414', '13'), +('12', '76', '1', '80676', '46625', '13'), +('12', '76', '1', '69062', '42577', '13'), +('12', '76', '2', '39358', '46538', '13'), +('12', '76', '2', '68195', '29885', '13'), +('12', '76', '2', '83563', '27925', '13'), +('12', '76', '2', '39285', '27505', '13'), +('12', '76', '3', '83634', '66334', '13'), +('12', '76', '3', '71655', '51779', '13'), +('12', '76', '3', '83658', '44666', '13'), +('12', '76', '3', '83531', '44486', '13'), +('12', '76', '5', '39328', '67028', '13'), +('12', '76', '5', '80661', '45106', '13'), +('12', '76', '5', '69135', '44046', '13'), +('12', '76', '5', '80615', '41179', '13'), +('12', '76', '8', '39299', '66205', '13'), +('12', '76', '8', '71665', '55058', '13'), +('12', '76', '8', '80679', '46708', '13'), +('12', '76', '8', '80649', '42448', '13'), +('12', '76', '6', '39275', '66201', '13'), +('12', '76', '6', '83635', '65942', '13'), +('12', '76', '6', '39209', '44244', '13'), +('12', '76', '6', '80646', '42056', '13'), +('12', '76', '17', '70935', '67692', '13'), +('12', '76', '17', '83606', '46682', '13'), +('12', '76', '17', '70714', '45832', '13'), +('12', '76', '17', '71641', '44919', '13'), +('12', '76', '7', '71089', '34894', '13'), +('12', '76', '7', '83567', '27476', '13'), +('12', '76', '7', '69082', '26320', '13'), +('12', '76', '7', '70931', '25348', '13'), +('12', '76', '9', '51709', '68149', '13'), +('12', '76', '9', '46938', '40776', '13'), +('12', '76', '9', '53440', '35933', '13'), +('12', '76', '9', '39336', '31178', '13'), +('12', '76', '15', '51702', '65535', '13'), +('12', '76', '15', '79909', '48886', '13'), +('12', '76', '15', '80666', '47007', '13'), +('12', '76', '15', '80686', '46536', '13'), +('12', '76', '20', '39253', '66788', '13'), +('12', '76', '20', '83650', '66440', '13'), +('12', '76', '20', '39235', '63937', '13'), +('12', '76', '20', '80680', '46786', '13'), +('12', '76', '12', '83571', '65676', '13'), +('12', '76', '12', '69255', '45473', '13'), +('12', '76', '12', '71090', '35195', '13'), +('12', '76', '12', '70933', '29286', '13'), +('12', '76', '18', '70936', '52464', '13'), +('12', '76', '18', '68751', '34382', '13'), +('12', '76', '18', '46810', '30487', '13'), +('12', '76', '18', '83610', '30382', '13'), +('12', '76', '19', '69078', '40843', '13'), +('12', '76', '19', '68913', '39091', '13'), +('12', '76', '19', '47219', '35743', '13'), +('12', '76', '19', '71091', '34853', '13'), +('12', '76', '13', '47250', '42630', '13'), +('12', '76', '13', '80633', '42395', '13'), +('12', '76', '13', '69046', '40035', '13'), +('12', '76', '13', '80624', '39094', '13'), +('12', '76', '14', '71669', '54400', '13'), +('12', '76', '14', '47311', '50362', '13'), +('12', '76', '14', '80665', '42685', '13'), +('12', '76', '14', '47250', '42630', '13'), +('12', '76', '11', '83548', '48737', '13'), +('12', '76', '11', '80668', '46636', '13'), +('12', '76', '11', '69162', '44937', '13'), +('12', '76', '11', '47243', '41582', '13'), +('12', '77', '22', '21807', '0', '13'), +('12', '77', '22', '21805', '0', '13'), +('12', '77', '22', '12425', '0', '13'), +('12', '77', '22', '39342', '0', '13'), +('12', '77', '1', '51705', '64044', '13'), +('12', '77', '1', '47285', '47616', '13'), +('12', '77', '1', '80676', '46629', '13'), +('12', '77', '1', '80639', '42401', '13'), +('12', '77', '2', '39358', '45541', '13'), +('12', '77', '2', '68195', '28488', '13'), +('12', '77', '2', '83563', '27930', '13'), +('12', '77', '2', '39285', '27508', '13'), +('12', '77', '3', '83634', '63937', '13'), +('12', '77', '3', '71655', '49782', '13'), +('12', '77', '3', '83658', '43669', '13'), +('12', '77', '3', '83531', '42889', '13'), +('12', '77', '5', '39328', '64632', '13'), +('12', '77', '5', '80661', '45110', '13'), +('12', '77', '5', '69135', '42449', '13'), +('12', '77', '5', '80615', '41182', '13'), +('12', '77', '8', '39299', '63808', '13'), +('12', '77', '8', '71665', '53061', '13'), +('12', '77', '8', '80679', '46708', '13'), +('12', '77', '8', '80649', '42452', '13'), +('12', '77', '6', '39275', '63804', '13'), +('12', '77', '6', '83635', '63545', '13'), +('12', '77', '6', '39209', '42647', '13'), +('12', '77', '6', '80646', '42056', '13'), +('12', '77', '17', '70935', '64945', '13'), +('12', '77', '17', '83606', '45687', '13'), +('12', '77', '17', '70714', '44237', '13'), +('12', '77', '17', '71641', '43322', '13'), +('12', '77', '7', '71089', '33697', '13'), +('12', '77', '7', '83567', '27481', '13'), +('12', '77', '7', '69082', '25747', '13'), +('12', '77', '7', '70931', '25351', '13'), +('12', '77', '9', '51709', '65752', '13'), +('12', '77', '9', '46938', '40780', '13'), +('12', '77', '9', '53440', '35937', '13'), +('12', '77', '9', '39336', '31182', '13'), +('12', '77', '15', '51702', '63139', '13'), +('12', '77', '15', '79909', '48890', '13'), +('12', '77', '15', '80666', '47007', '13'), +('12', '77', '15', '80686', '46541', '13'), +('12', '77', '20', '39253', '64391', '13'), +('12', '77', '20', '83650', '64043', '13'), +('12', '77', '20', '39235', '61540', '13'), +('12', '77', '20', '80680', '46791', '13'), +('12', '77', '12', '83571', '63281', '13'), +('12', '77', '12', '69255', '43875', '13'), +('12', '77', '12', '71090', '33997', '13'), +('12', '77', '12', '70933', '28990', '13'), +('12', '77', '18', '70936', '50664', '13'), +('12', '77', '18', '68751', '32885', '13'), +('12', '77', '18', '46810', '30490', '13'), +('12', '77', '18', '83610', '30386', '13'), +('12', '77', '19', '69078', '39045', '13'), +('12', '77', '19', '68913', '37294', '13'), +('12', '77', '19', '47219', '34846', '13'), +('12', '77', '19', '71091', '33653', '13'), +('12', '77', '13', '80633', '42398', '13'), +('12', '77', '13', '47250', '41233', '13'), +('12', '77', '13', '80624', '39097', '13'), +('12', '77', '13', '69046', '38238', '13'), +('12', '77', '14', '71669', '52403', '13'), +('12', '77', '14', '47311', '48565', '13'), +('12', '77', '14', '80665', '42688', '13'), +('12', '77', '14', '80635', '41432', '13'), +('12', '77', '11', '83548', '46940', '13'), +('12', '77', '11', '80668', '46640', '13'), +('12', '77', '11', '69162', '43340', '13'), +('12', '77', '11', '46939', '40888', '13'), +('12', '78', '22', '21807', '0', '13'), +('12', '78', '22', '21805', '0', '13'), +('12', '78', '22', '12425', '0', '13'), +('12', '78', '22', '39342', '0', '13'), +('12', '78', '1', '51705', '61647', '13'), +('12', '78', '1', '80676', '46634', '13'), +('12', '78', '1', '47285', '45819', '13'), +('12', '78', '1', '80639', '42405', '13'), +('12', '78', '2', '39358', '44544', '13'), +('12', '78', '2', '83563', '27935', '13'), +('12', '78', '2', '39285', '27511', '13'), +('12', '78', '2', '68195', '27091', '13'), +('12', '78', '3', '83634', '61541', '13'), +('12', '78', '3', '71655', '47785', '13'), +('12', '78', '3', '80647', '42706', '13'), +('12', '78', '3', '83658', '42672', '13'), +('12', '78', '5', '39328', '62235', '13'), +('12', '78', '5', '80661', '45115', '13'), +('12', '78', '5', '80615', '41186', '13'), +('12', '78', '5', '69135', '40851', '13'), +('12', '78', '8', '39299', '61411', '13'), +('12', '78', '8', '71665', '51064', '13'), +('12', '78', '8', '80679', '46708', '13'), +('12', '78', '8', '80649', '42456', '13'), +('12', '78', '6', '39275', '61407', '13'), +('12', '78', '6', '83635', '61148', '13'), +('12', '78', '6', '80646', '42056', '13'), +('12', '78', '6', '39209', '41049', '13'), +('12', '78', '17', '70935', '62198', '13'), +('12', '78', '17', '83606', '44691', '13'), +('12', '78', '17', '70714', '42641', '13'), +('12', '78', '17', '71641', '41725', '13'), +('12', '78', '7', '71089', '32499', '13'), +('12', '78', '7', '83567', '27485', '13'), +('12', '78', '7', '70931', '25353', '13'), +('12', '78', '7', '69082', '25174', '13'), +('12', '78', '9', '51709', '63355', '13'), +('12', '78', '9', '46938', '40785', '13'), +('12', '78', '9', '53440', '35941', '13'), +('12', '78', '9', '39336', '31187', '13'), +('12', '78', '15', '51702', '60743', '13'), +('12', '78', '15', '79909', '48894', '13'), +('12', '78', '15', '80666', '47008', '13'), +('12', '78', '15', '80686', '46545', '13'), +('12', '78', '20', '39253', '61994', '13'), +('12', '78', '20', '83650', '61646', '13'), +('12', '78', '20', '39235', '59143', '13'), +('12', '78', '20', '80680', '46795', '13'), +('12', '78', '12', '83571', '60886', '13'), +('12', '78', '12', '69255', '42277', '13'), +('12', '78', '12', '71090', '32799', '13'), +('12', '78', '12', '70933', '28693', '13'), +('12', '78', '18', '70936', '48864', '13'), +('12', '78', '18', '68751', '31388', '13'), +('12', '78', '18', '46810', '30493', '13'), +('12', '78', '18', '83610', '30390', '13'), +('12', '78', '19', '69078', '37248', '13'), +('12', '78', '19', '68913', '35496', '13'), +('12', '78', '19', '47219', '33948', '13'), +('12', '78', '19', '71091', '32453', '13'), +('12', '78', '13', '80633', '42402', '13'), +('12', '78', '13', '47250', '39836', '13'), +('12', '78', '13', '80624', '39100', '13'), +('12', '78', '13', '69046', '36441', '13'), +('12', '78', '14', '71669', '50405', '13'), +('12', '78', '14', '47311', '46768', '13'), +('12', '78', '14', '80665', '42691', '13'), +('12', '78', '14', '80635', '41435', '13'), +('12', '78', '11', '80668', '46644', '13'), +('12', '78', '11', '83548', '45143', '13'), +('12', '78', '11', '69162', '41744', '13'), +('12', '78', '11', '46939', '40893', '13'), +('12', '79', '22', '21807', '0', '13'), +('12', '79', '22', '21805', '0', '13'), +('12', '79', '22', '12425', '0', '13'), +('12', '79', '22', '39342', '0', '13'), +('12', '79', '1', '51705', '59250', '13'), +('12', '79', '1', '80676', '46638', '13'), +('12', '79', '1', '47285', '44022', '13'), +('12', '79', '1', '80639', '42409', '13'), +('12', '79', '2', '39358', '43547', '13'), +('12', '79', '2', '83563', '27940', '13'), +('12', '79', '2', '39285', '27514', '13'), +('12', '79', '2', '68195', '25694', '13'), +('12', '79', '3', '83634', '59145', '13'), +('12', '79', '3', '71655', '45788', '13'), +('12', '79', '3', '80647', '42710', '13'), +('12', '79', '3', '83658', '41675', '13'), +('12', '79', '5', '39328', '59839', '13'), +('12', '79', '5', '80661', '45119', '13'), +('12', '79', '5', '80615', '41190', '13'), +('12', '79', '5', '46934', '40400', '13'), +('12', '79', '8', '39299', '59013', '13'), +('12', '79', '8', '71665', '49068', '13'), +('12', '79', '8', '80679', '46709', '13'), +('12', '79', '8', '80649', '42460', '13'), +('12', '79', '6', '39275', '59011', '13'), +('12', '79', '6', '83635', '58751', '13'), +('12', '79', '6', '80646', '42056', '13'), +('12', '79', '6', '46883', '40400', '13'), +('12', '79', '17', '70935', '59451', '13'), +('12', '79', '17', '83606', '43695', '13'), +('12', '79', '17', '70714', '41045', '13'), +('12', '79', '17', '71641', '40127', '13'), +('12', '79', '7', '71089', '31302', '13'), +('12', '79', '7', '83567', '27490', '13'), +('12', '79', '7', '70931', '25356', '13'), +('12', '79', '7', '69082', '24601', '13'), +('12', '79', '9', '51709', '60958', '13'), +('12', '79', '9', '46938', '40790', '13'), +('12', '79', '9', '53440', '35944', '13'), +('12', '79', '9', '39336', '31191', '13'), +('12', '79', '15', '51702', '58347', '13'), +('12', '79', '15', '79909', '48898', '13'), +('12', '79', '15', '80666', '47008', '13'), +('12', '79', '15', '80686', '46550', '13'), +('12', '79', '20', '39253', '59597', '13'), +('12', '79', '20', '83650', '59249', '13'), +('12', '79', '20', '39235', '56746', '13'), +('12', '79', '20', '80680', '46800', '13'), +('12', '79', '12', '83571', '58490', '13'), +('12', '79', '12', '69255', '40679', '13'), +('12', '79', '12', '71090', '31601', '13'), +('12', '79', '12', '70933', '28397', '13'), +('12', '79', '18', '70936', '47064', '13'), +('12', '79', '18', '46810', '30496', '13'), +('12', '79', '18', '83610', '30395', '13'), +('12', '79', '18', '68751', '29891', '13'), +('12', '79', '19', '69078', '35450', '13'), +('12', '79', '19', '68913', '33699', '13'), +('12', '79', '19', '47219', '33051', '13'), +('12', '79', '19', '70934', '31357', '13'), +('12', '79', '13', '80633', '42405', '13'), +('12', '79', '13', '80624', '39103', '13'), +('12', '79', '13', '47250', '38439', '13'), +('12', '79', '13', '69046', '34645', '13'), +('12', '79', '14', '71669', '48408', '13'), +('12', '79', '14', '47311', '44971', '13'), +('12', '79', '14', '80665', '42694', '13'), +('12', '79', '14', '80635', '41438', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '79', '11', '80668', '46649', '13'), +('12', '79', '11', '83548', '43346', '13'), +('12', '79', '11', '46939', '40897', '13'), +('12', '79', '11', '80629', '40599', '13'), +('12', '80', '22', '21807', '0', '14'), +('12', '80', '22', '21805', '0', '14'), +('12', '80', '22', '12425', '0', '14'), +('12', '80', '22', '39342', '0', '14'), +('12', '80', '1', '102604', '62031', '14'), +('12', '80', '1', '102640', '60668', '14'), +('12', '80', '1', '102639', '60557', '14'), +('12', '80', '1', '102641', '60446', '14'), +('12', '80', '2', '39358', '42550', '14'), +('12', '80', '2', '102024', '41989', '14'), +('12', '80', '2', '102276', '38058', '14'), +('12', '80', '2', '83563', '27945', '14'), +('12', '80', '3', '102605', '65165', '14'), +('12', '80', '3', '102742', '58299', '14'), +('12', '80', '3', '83634', '56748', '14'), +('12', '80', '3', '102560', '56099', '14'), +('12', '80', '5', '102731', '67360', '14'), +('12', '80', '5', '102606', '64452', '14'), +('12', '80', '5', '102730', '57861', '14'), +('12', '80', '5', '39328', '57442', '14'), +('12', '80', '8', '102728', '66155', '14'), +('12', '80', '8', '102608', '65113', '14'), +('12', '80', '8', '39299', '56616', '14'), +('12', '80', '8', '102728', '55254', '14'), +('12', '80', '6', '102607', '65293', '14'), +('12', '80', '6', '39275', '56614', '14'), +('12', '80', '6', '102561', '56369', '14'), +('12', '80', '6', '83635', '56354', '14'), +('12', '80', '17', '70935', '56704', '14'), +('12', '80', '17', '102027', '44073', '14'), +('12', '80', '17', '83606', '42700', '14'), +('12', '80', '17', '102279', '39897', '14'), +('12', '80', '7', '102025', '42265', '14'), +('12', '80', '7', '102277', '38100', '14'), +('12', '80', '7', '71089', '30104', '14'), +('12', '80', '7', '83567', '27495', '14'), +('12', '80', '9', '67098', '103896', '14'), +('12', '80', '9', '51709', '58561', '14'), +('12', '80', '9', '46938', '40795', '14'), +('12', '80', '9', '53440', '35948', '14'), +('12', '80', '15', '102723', '66554', '14'), +('12', '80', '15', '102609', '62895', '14'), +('12', '80', '15', '102634', '60657', '14'), +('12', '80', '15', '102637', '60623', '14'), +('12', '80', '20', '102610', '65335', '14'), +('12', '80', '20', '39253', '57200', '14'), +('12', '80', '20', '83650', '56852', '14'), +('12', '80', '20', '102563', '56370', '14'), +('12', '80', '12', '83571', '56095', '14'), +('12', '80', '12', '69255', '39082', '14'), +('12', '80', '12', '102274', '36376', '14'), +('12', '80', '12', '71090', '30403', '14'), +('12', '80', '18', '70936', '45265', '14'), +('12', '80', '18', '102026', '42907', '14'), +('12', '80', '18', '102278', '38463', '14'), +('12', '80', '18', '46810', '30499', '14'), +('12', '80', '19', '102275', '36541', '14'), +('12', '80', '19', '69078', '33653', '14'), +('12', '80', '19', '47219', '32153', '14'), +('12', '80', '19', '68913', '31901', '14'), +('12', '80', '13', '102657', '59415', '14'), +('12', '80', '13', '102735', '58156', '14'), +('12', '80', '13', '102734', '53355', '14'), +('12', '80', '13', '102586', '52005', '14'), +('12', '80', '14', '102633', '64003', '14'), +('12', '80', '14', '102632', '63857', '14'), +('12', '80', '14', '102570', '55864', '14'), +('12', '80', '14', '71669', '46411', '14'), +('12', '80', '11', '102643', '62143', '14'), +('12', '80', '11', '80668', '46653', '14'), +('12', '80', '11', '83548', '41549', '14'), +('12', '80', '11', '46939', '40901', '14'), +('12', '81', '22', '21807', '0', '14'), +('12', '81', '22', '21805', '0', '14'), +('12', '81', '22', '12425', '0', '14'), +('12', '81', '22', '39342', '0', '14'), +('12', '81', '1', '102604', '62034', '14'), +('12', '81', '1', '102640', '60674', '14'), +('12', '81', '1', '102639', '60561', '14'), +('12', '81', '1', '102641', '60452', '14'), +('12', '81', '2', '102024', '41993', '14'), +('12', '81', '2', '39358', '41553', '14'), +('12', '81', '2', '102276', '38062', '14'), +('12', '81', '2', '83563', '27950', '14'), +('12', '81', '3', '102605', '65168', '14'), +('12', '81', '3', '102742', '58304', '14'), +('12', '81', '3', '102560', '56103', '14'), +('12', '81', '3', '83634', '54352', '14'), +('12', '81', '5', '102731', '67365', '14'), +('12', '81', '5', '102606', '64454', '14'), +('12', '81', '5', '102730', '57866', '14'), +('12', '81', '5', '102565', '55658', '14'), +('12', '81', '8', '102728', '66159', '14'), +('12', '81', '8', '102608', '65117', '14'), +('12', '81', '8', '102728', '55257', '14'), +('12', '81', '8', '39299', '54218', '14'), +('12', '81', '6', '102607', '65297', '14'), +('12', '81', '6', '102561', '56373', '14'), +('12', '81', '6', '39275', '54217', '14'), +('12', '81', '6', '83635', '53958', '14'), +('12', '81', '17', '70935', '53958', '14'), +('12', '81', '17', '102027', '44076', '14'), +('12', '81', '17', '83606', '41704', '14'), +('12', '81', '17', '102279', '39900', '14'), +('12', '81', '7', '102025', '42269', '14'), +('12', '81', '7', '102277', '38103', '14'), +('12', '81', '7', '71089', '28907', '14'), +('12', '81', '7', '83567', '27500', '14'), +('12', '81', '9', '67098', '105198', '14'), +('12', '81', '9', '51709', '56164', '14'), +('12', '81', '9', '46938', '40800', '14'), +('12', '81', '9', '53440', '35952', '14'), +('12', '81', '15', '102723', '66558', '14'), +('12', '81', '15', '102609', '62899', '14'), +('12', '81', '15', '102634', '60660', '14'), +('12', '81', '15', '102637', '60628', '14'), +('12', '81', '20', '102610', '65340', '14'), +('12', '81', '20', '102563', '56372', '14'), +('12', '81', '20', '39253', '54803', '14'), +('12', '81', '20', '83650', '54455', '14'), +('12', '81', '12', '83571', '53700', '14'), +('12', '81', '12', '69255', '37484', '14'), +('12', '81', '12', '102274', '36380', '14'), +('12', '81', '12', '71090', '29205', '14'), +('12', '81', '18', '70936', '43465', '14'), +('12', '81', '18', '102026', '42909', '14'), +('12', '81', '18', '102278', '38468', '14'), +('12', '81', '18', '46810', '30502', '14'), +('12', '81', '19', '102275', '36542', '14'), +('12', '81', '19', '69078', '31855', '14'), +('12', '81', '19', '47219', '31256', '14'), +('12', '81', '19', '70934', '30217', '14'), +('12', '81', '13', '102657', '59418', '14'), +('12', '81', '13', '102735', '58160', '14'), +('12', '81', '13', '102734', '53359', '14'), +('12', '81', '13', '102586', '52006', '14'), +('12', '81', '14', '102633', '64007', '14'), +('12', '81', '14', '102632', '63861', '14'), +('12', '81', '14', '102570', '55869', '14'), +('12', '81', '14', '71669', '44414', '14'), +('12', '81', '11', '102643', '62146', '14'), +('12', '81', '11', '80668', '46658', '14'), +('12', '81', '11', '46939', '40906', '14'), +('12', '81', '11', '80629', '40606', '14'), +('12', '82', '22', '21807', '0', '14'), +('12', '82', '22', '21805', '0', '14'), +('12', '82', '22', '12425', '0', '14'), +('12', '82', '22', '39342', '0', '14'), +('12', '82', '1', '102604', '62038', '14'), +('12', '82', '1', '102640', '60679', '14'), +('12', '82', '1', '102639', '60565', '14'), +('12', '82', '1', '102641', '60457', '14'), +('12', '82', '2', '102024', '41997', '14'), +('12', '82', '2', '39358', '40556', '14'), +('12', '82', '2', '102276', '38065', '14'), +('12', '82', '2', '83563', '27955', '14'), +('12', '82', '3', '102605', '65170', '14'), +('12', '82', '3', '102742', '58309', '14'), +('12', '82', '3', '102560', '56106', '14'), +('12', '82', '3', '102741', '53408', '14'), +('12', '82', '5', '102731', '67371', '14'), +('12', '82', '5', '102606', '64455', '14'), +('12', '82', '5', '102730', '57870', '14'), +('12', '82', '5', '102565', '55662', '14'), +('12', '82', '8', '102728', '66164', '14'), +('12', '82', '8', '102608', '65122', '14'), +('12', '82', '8', '102728', '55260', '14'), +('12', '82', '8', '39299', '51821', '14'), +('12', '82', '6', '102607', '65302', '14'), +('12', '82', '6', '102561', '56377', '14'), +('12', '82', '6', '39275', '51820', '14'), +('12', '82', '6', '83635', '51561', '14'), +('12', '82', '17', '70935', '51211', '14'), +('12', '82', '17', '102027', '44079', '14'), +('12', '82', '17', '83606', '40708', '14'), +('12', '82', '17', '102279', '39903', '14'), +('12', '82', '7', '102025', '42274', '14'), +('12', '82', '7', '102277', '38106', '14'), +('12', '82', '7', '71089', '27709', '14'), +('12', '82', '7', '83567', '27505', '14'), +('12', '82', '9', '67098', '106499', '14'), +('12', '82', '9', '51709', '53767', '14'), +('12', '82', '9', '46938', '40805', '14'), +('12', '82', '9', '53440', '35956', '14'), +('12', '82', '15', '102723', '66563', '14'), +('12', '82', '15', '102609', '62903', '14'), +('12', '82', '15', '102634', '60663', '14'), +('12', '82', '15', '102637', '60633', '14'), +('12', '82', '20', '102610', '65346', '14'), +('12', '82', '20', '102563', '56373', '14'), +('12', '82', '20', '39253', '52406', '14'), +('12', '82', '20', '83650', '52058', '14'), +('12', '82', '12', '83571', '51305', '14'), +('12', '82', '12', '102274', '36383', '14'), +('12', '82', '12', '69255', '35886', '14'), +('12', '82', '12', '71090', '28007', '14'), +('12', '82', '18', '102026', '42910', '14'), +('12', '82', '18', '70936', '41665', '14'), +('12', '82', '18', '102278', '38474', '14'), +('12', '82', '18', '46810', '30505', '14'), +('12', '82', '19', '102275', '36544', '14'), +('12', '82', '19', '47219', '30358', '14'), +('12', '82', '19', '69078', '30058', '14'), +('12', '82', '19', '70934', '29646', '14'), +('12', '82', '13', '102657', '59420', '14'), +('12', '82', '13', '102735', '58165', '14'), +('12', '82', '13', '102734', '53363', '14'), +('12', '82', '13', '102586', '52008', '14'), +('12', '82', '14', '102633', '64011', '14'), +('12', '82', '14', '102632', '63864', '14'), +('12', '82', '14', '102570', '55874', '14'), +('12', '82', '14', '80665', '42703', '14'), +('12', '82', '11', '102643', '62149', '14'), +('12', '82', '11', '80668', '46662', '14'), +('12', '82', '11', '46939', '40910', '14'), +('12', '82', '11', '80629', '40610', '14'), +('12', '83', '22', '21807', '0', '14'), +('12', '83', '22', '21805', '0', '14'), +('12', '83', '22', '12425', '0', '14'), +('12', '83', '22', '39342', '0', '14'), +('12', '83', '1', '102604', '62041', '14'), +('12', '83', '1', '102640', '60685', '14'), +('12', '83', '1', '102639', '60570', '14'), +('12', '83', '1', '102641', '60463', '14'), +('12', '83', '2', '102024', '42000', '14'), +('12', '83', '2', '39358', '39559', '14'), +('12', '83', '2', '102276', '38068', '14'), +('12', '83', '2', '83563', '27959', '14'), +('12', '83', '3', '102605', '65173', '14'), +('12', '83', '3', '102742', '58314', '14'), +('12', '83', '3', '102560', '56110', '14'), +('12', '83', '3', '102741', '53412', '14'), +('12', '83', '5', '102731', '67377', '14'), +('12', '83', '5', '102606', '64457', '14'), +('12', '83', '5', '102730', '57874', '14'), +('12', '83', '5', '102565', '55666', '14'), +('12', '83', '8', '102728', '66168', '14'), +('12', '83', '8', '102608', '65126', '14'), +('12', '83', '8', '102728', '55263', '14'), +('12', '83', '8', '39299', '49424', '14'), +('12', '83', '6', '102607', '65306', '14'), +('12', '83', '6', '102561', '56381', '14'), +('12', '83', '6', '39275', '49424', '14'), +('12', '83', '6', '83635', '49164', '14'), +('12', '83', '17', '70935', '48464', '14'), +('12', '83', '17', '102027', '44081', '14'), +('12', '83', '17', '102279', '39906', '14'), +('12', '83', '17', '83606', '39713', '14'), +('12', '83', '7', '102025', '42278', '14'), +('12', '83', '7', '102277', '38109', '14'), +('12', '83', '7', '83567', '27510', '14'), +('12', '83', '7', '71089', '26512', '14'), +('12', '83', '9', '67098', '107800', '14'), +('12', '83', '9', '51709', '51370', '14'), +('12', '83', '9', '46938', '40810', '14'), +('12', '83', '9', '53440', '35959', '14'), +('12', '83', '15', '102723', '66567', '14'), +('12', '83', '15', '102609', '62907', '14'), +('12', '83', '15', '102634', '60666', '14'), +('12', '83', '15', '102637', '60638', '14'), +('12', '83', '20', '102610', '65351', '14'), +('12', '83', '20', '102563', '56374', '14'), +('12', '83', '20', '39253', '50010', '14'), +('12', '83', '20', '83650', '49662', '14'), +('12', '83', '12', '83571', '48910', '14'), +('12', '83', '12', '102274', '36387', '14'), +('12', '83', '12', '69255', '34288', '14'), +('12', '83', '12', '70933', '27212', '14'), +('12', '83', '18', '102026', '42911', '14'), +('12', '83', '18', '70936', '39865', '14'), +('12', '83', '18', '102278', '38479', '14'), +('12', '83', '18', '46810', '30508', '14'), +('12', '83', '19', '102275', '36545', '14'), +('12', '83', '19', '47219', '29461', '14'), +('12', '83', '19', '70934', '29076', '14'), +('12', '83', '19', '83575', '28310', '14'), +('12', '83', '13', '102657', '59423', '14'), +('12', '83', '13', '102735', '58169', '14'), +('12', '83', '13', '102734', '53366', '14'), +('12', '83', '13', '102586', '52009', '14'), +('12', '83', '14', '102633', '64014', '14'), +('12', '83', '14', '102632', '63868', '14'), +('12', '83', '14', '102570', '55879', '14'), +('12', '83', '14', '80665', '42706', '14'), +('12', '83', '11', '102643', '62152', '14'), +('12', '83', '11', '80668', '46667', '14'), +('12', '83', '11', '46939', '40914', '14'), +('12', '83', '11', '80629', '40614', '14'), +('12', '84', '22', '21807', '0', '14'), +('12', '84', '22', '21805', '0', '14'), +('12', '84', '22', '12425', '0', '14'), +('12', '84', '22', '39342', '0', '14'), +('12', '84', '1', '102604', '62045', '14'), +('12', '84', '1', '102640', '60691', '14'), +('12', '84', '1', '102639', '60574', '14'), +('12', '84', '1', '102641', '60468', '14'), +('12', '84', '2', '102024', '42004', '14'), +('12', '84', '2', '39358', '38562', '14'), +('12', '84', '2', '102276', '38071', '14'), +('12', '84', '2', '83563', '27964', '14'), +('12', '84', '3', '102605', '65175', '14'), +('12', '84', '3', '102742', '58319', '14'), +('12', '84', '3', '102560', '56114', '14'), +('12', '84', '3', '102741', '53416', '14'), +('12', '84', '5', '102731', '67382', '14'), +('12', '84', '5', '102606', '64459', '14'), +('12', '84', '5', '102730', '57879', '14'), +('12', '84', '5', '102565', '55669', '14'), +('12', '84', '8', '102728', '66172', '14'), +('12', '84', '8', '102608', '65130', '14'), +('12', '84', '8', '102728', '55266', '14'), +('12', '84', '8', '39299', '47026', '14'), +('12', '84', '6', '102607', '65310', '14'), +('12', '84', '6', '102561', '56385', '14'), +('12', '84', '6', '39275', '47027', '14'), +('12', '84', '6', '83635', '46767', '14'), +('12', '84', '17', '70935', '45717', '14'), +('12', '84', '17', '102027', '44084', '14'), +('12', '84', '17', '102279', '39909', '14'), +('12', '84', '17', '83606', '38717', '14'), +('12', '84', '7', '102025', '42283', '14'), +('12', '84', '7', '102277', '38112', '14'), +('12', '84', '7', '83567', '27515', '14'), +('12', '84', '7', '70931', '25369', '14'), +('12', '84', '9', '67098', '109101', '14'), +('12', '84', '9', '51709', '48973', '14'), +('12', '84', '9', '46938', '40815', '14'), +('12', '84', '9', '53440', '35963', '14'), +('12', '84', '15', '102723', '66571', '14'), +('12', '84', '15', '102609', '62911', '14'), +('12', '84', '15', '102634', '60669', '14'), +('12', '84', '15', '102637', '60644', '14'), +('12', '84', '20', '102610', '65357', '14'), +('12', '84', '20', '102563', '56376', '14'), +('12', '84', '20', '39253', '47613', '14'), +('12', '84', '20', '83650', '47265', '14'), +('12', '84', '12', '83571', '46515', '14'), +('12', '84', '12', '102274', '36390', '14'), +('12', '84', '12', '69255', '32691', '14'), +('12', '84', '12', '70933', '26916', '14'), +('12', '84', '18', '102026', '42912', '14'), +('12', '84', '18', '102278', '38484', '14'), +('12', '84', '18', '70936', '38065', '14'), +('12', '84', '18', '46810', '30512', '14'), +('12', '84', '19', '102275', '36546', '14'), +('12', '84', '19', '47219', '28563', '14'), +('12', '84', '19', '70934', '28506', '14'), +('12', '84', '19', '83575', '28315', '14'), +('12', '84', '13', '102657', '59425', '14'), +('12', '84', '13', '102735', '58173', '14'), +('12', '84', '13', '102734', '53370', '14'), +('12', '84', '13', '102586', '52010', '14'), +('12', '84', '14', '102633', '64018', '14'), +('12', '84', '14', '102632', '63872', '14'), +('12', '84', '14', '102570', '55884', '14'), +('12', '84', '14', '80665', '42709', '14'), +('12', '84', '11', '102643', '62154', '14'), +('12', '84', '11', '80668', '46671', '14'), +('12', '84', '11', '46939', '40919', '14'), +('12', '84', '11', '80629', '40618', '14'), +('12', '85', '22', '12425', '0', '16'), +('12', '85', '22', '21807', '0', '16'), +('12', '85', '22', '39342', '0', '16'), +('12', '85', '22', '23597', '0', '16'), +('12', '85', '1', '111307', '115892', '16'), +('12', '85', '1', '111306', '115825', '16'), +('12', '85', '1', '111304', '115692', '16'), +('12', '85', '1', '111300', '114544', '16'), +('12', '85', '2', '62985', '72735', '16'), +('12', '85', '2', '94056', '72656', '16'), +('12', '85', '2', '104424', '63471', '16'), +('12', '85', '2', '54845', '46589', '16'), +('12', '85', '3', '111314', '116209', '16'), +('12', '85', '3', '111316', '114918', '16'), +('12', '85', '3', '111315', '114673', '16'), +('12', '85', '3', '111013', '102159', '16'), +('12', '85', '5', '111319', '115870', '16'), +('12', '85', '5', '111321', '115375', '16'), +('12', '85', '5', '111318', '114106', '16'), +('12', '85', '5', '111018', '101820', '16'), +('12', '85', '8', '111332', '116156', '16'), +('12', '85', '8', '111329', '115631', '16'), +('12', '85', '8', '111331', '113389', '16'), +('12', '85', '8', '111031', '102205', '16'), +('12', '85', '6', '111323', '116099', '16'), +('12', '85', '6', '111325', '115305', '16'), +('12', '85', '6', '111326', '114999', '16'), +('12', '85', '6', '111022', '102048', '16'), +('12', '85', '17', '56043', '77131', '16'), +('12', '85', '17', '56084', '75409', '16'), +('12', '85', '17', '104427', '65830', '16'), +('12', '85', '17', '54854', '49052', '16'), +('12', '85', '7', '56080', '72728', '16'), +('12', '85', '7', '56040', '72232', '16'), +('12', '85', '7', '104425', '63240', '16'), +('12', '85', '7', '49656', '46297', '16'), +('12', '85', '9', '67098', '110402', '16'), +('12', '85', '9', '56070', '70610', '16'), +('12', '85', '9', '62984', '70372', '16'), +('12', '85', '9', '56031', '70308', '16'), +('12', '85', '15', '111349', '117287', '16'), +('12', '85', '15', '111344', '116363', '16'), +('12', '85', '15', '111340', '116014', '16'), +('12', '85', '15', '111346', '115835', '16'), +('12', '85', '20', '111356', '116284', '16'), +('12', '85', '20', '111352', '115368', '16'), +('12', '85', '20', '111351', '114245', '16'), +('12', '85', '20', '111054', '102233', '16'), +('12', '85', '12', '56035', '71687', '16'), +('12', '85', '12', '56074', '70962', '16'), +('12', '85', '12', '104422', '61762', '16'), +('12', '85', '12', '49656', '46297', '16'), +('12', '85', '18', '56041', '75418', '16'), +('12', '85', '18', '62986', '74354', '16'), +('12', '85', '18', '104426', '64114', '16'), +('12', '85', '18', '54851', '46872', '16'), +('12', '85', '19', '62990', '73418', '16'), +('12', '85', '19', '81763', '73320', '16'), +('12', '85', '19', '56037', '72865', '16'), +('12', '85', '19', '56075', '72778', '16'), +('12', '85', '13', '111521', '119232', '16'), +('12', '85', '13', '111524', '113219', '16'), +('12', '85', '13', '111519', '113161', '16'), +('12', '85', '13', '111221', '105954', '16'), +('12', '85', '14', '111537', '116355', '16'), +('12', '85', '14', '111535', '114896', '16'), +('12', '85', '14', '111237', '102304', '16'), +('12', '85', '14', '111235', '100945', '16'), +('12', '85', '11', '111335', '115695', '16'), +('12', '85', '11', '111337', '115456', '16'), +('12', '85', '11', '111338', '113279', '16'), +('12', '85', '11', '111034', '101744', '16'), +('12', '85', '22', '21807', '0', '15'), +('12', '85', '22', '21805', '0', '15'), +('12', '85', '22', '12425', '0', '15'), +('12', '85', '22', '7867', '0', '15'), +('12', '85', '1', '107040', '88036', '15'), +('12', '85', '1', '107039', '86480', '15'), +('12', '85', '1', '107053', '85527', '15'), +('12', '85', '1', '107052', '84604', '15'), +('12', '85', '2', '62985', '72735', '15'), +('12', '85', '2', '94056', '72656', '15'), +('12', '85', '2', '104424', '63471', '15'), +('12', '85', '2', '54845', '46589', '15'), +('12', '85', '3', '107041', '89301', '15'), +('12', '85', '3', '107055', '85585', '15'), +('12', '85', '3', '106828', '83320', '15'), +('12', '85', '3', '106841', '81034', '15'), +('12', '85', '5', '107042', '88363', '15'), +('12', '85', '5', '107056', '84975', '15'), +('12', '85', '5', '106829', '83118', '15'), +('12', '85', '5', '56090', '73473', '15'), +('12', '85', '8', '107044', '89131', '15'), +('12', '85', '8', '107058', '86138', '15'), +('12', '85', '8', '106831', '83377', '15'), +('12', '85', '8', '106844', '80374', '15'), +('12', '85', '6', '107043', '88988', '15'), +('12', '85', '6', '107057', '85949', '15'), +('12', '85', '6', '106830', '83277', '15'), +('12', '85', '6', '106843', '80328', '15'), +('12', '85', '17', '56043', '77131', '15'), +('12', '85', '17', '56084', '75409', '15'), +('12', '85', '17', '104427', '65830', '15'), +('12', '85', '17', '54854', '49052', '15'), +('12', '85', '7', '56080', '72728', '15'), +('12', '85', '7', '56040', '72232', '15'), +('12', '85', '7', '104425', '63240', '15'), +('12', '85', '7', '54848', '46073', '15'), +('12', '85', '9', '67098', '110402', '15'), +('12', '85', '9', '56070', '70610', '15'), +('12', '85', '9', '62984', '70372', '15'), +('12', '85', '9', '56031', '70308', '15'), +('12', '85', '15', '107046', '88219', '15'), +('12', '85', '15', '107047', '87825', '15'), +('12', '85', '15', '107061', '85140', '15'), +('12', '85', '15', '107050', '84320', '15'), +('12', '85', '20', '107048', '89251', '15'), +('12', '85', '20', '107059', '86917', '15'), +('12', '85', '20', '106834', '84027', '15'), +('12', '85', '20', '106845', '81575', '15'), +('12', '85', '12', '56035', '71687', '15'), +('12', '85', '12', '56074', '70962', '15'), +('12', '85', '12', '104422', '61762', '15'), +('12', '85', '12', '83571', '44120', '15'), +('12', '85', '18', '56041', '75418', '15'), +('12', '85', '18', '62986', '74354', '15'), +('12', '85', '18', '104426', '64114', '15'), +('12', '85', '18', '54851', '46872', '15'), +('12', '85', '19', '62990', '73418', '15'), +('12', '85', '19', '81763', '73320', '15'), +('12', '85', '19', '56037', '72865', '15'), +('12', '85', '19', '56075', '72778', '15'), +('12', '85', '13', '106864', '82976', '15'), +('12', '85', '13', '106861', '82135', '15'), +('12', '85', '13', '106764', '74682', '15'), +('12', '85', '13', '62932', '73867', '15'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '85', '14', '107063', '86860', '15'), +('12', '85', '14', '107065', '85666', '15'), +('12', '85', '14', '106850', '82030', '15'), +('12', '85', '14', '106852', '80678', '15'), +('12', '85', '11', '107045', '87880', '15'), +('12', '85', '11', '106832', '81777', '15'), +('12', '85', '11', '106739', '73301', '15'), +('12', '85', '11', '56099', '72095', '15'), +('12', '86', '22', '12425', '0', '16'), +('12', '86', '22', '21807', '0', '16'), +('12', '86', '22', '39342', '0', '16'), +('12', '86', '22', '23597', '0', '16'), +('12', '86', '1', '111307', '115897', '16'), +('12', '86', '1', '111306', '115828', '16'), +('12', '86', '1', '111304', '115695', '16'), +('12', '86', '1', '111300', '114548', '16'), +('12', '86', '2', '62985', '72737', '16'), +('12', '86', '2', '94056', '72658', '16'), +('12', '86', '2', '104424', '63476', '16'), +('12', '86', '2', '54845', '46593', '16'), +('12', '86', '3', '111314', '116213', '16'), +('12', '86', '3', '111316', '114922', '16'), +('12', '86', '3', '111315', '114677', '16'), +('12', '86', '3', '111013', '102163', '16'), +('12', '86', '5', '111319', '115875', '16'), +('12', '86', '5', '111321', '115379', '16'), +('12', '86', '5', '111318', '114110', '16'), +('12', '86', '5', '111018', '101824', '16'), +('12', '86', '8', '111332', '116160', '16'), +('12', '86', '8', '111329', '115635', '16'), +('12', '86', '8', '111331', '113392', '16'), +('12', '86', '8', '111031', '102209', '16'), +('12', '86', '6', '111323', '116102', '16'), +('12', '86', '6', '111325', '115307', '16'), +('12', '86', '6', '111326', '115003', '16'), +('12', '86', '6', '111022', '102052', '16'), +('12', '86', '17', '56043', '77134', '16'), +('12', '86', '17', '56084', '75412', '16'), +('12', '86', '17', '104427', '65834', '16'), +('12', '86', '17', '54854', '49055', '16'), +('12', '86', '7', '56080', '72732', '16'), +('12', '86', '7', '56040', '72238', '16'), +('12', '86', '7', '104425', '63244', '16'), +('12', '86', '7', '49656', '46297', '16'), +('12', '86', '9', '67098', '111704', '16'), +('12', '86', '9', '56070', '70613', '16'), +('12', '86', '9', '62984', '70375', '16'), +('12', '86', '9', '56031', '70314', '16'), +('12', '86', '15', '111349', '117292', '16'), +('12', '86', '15', '111344', '116366', '16'), +('12', '86', '15', '111340', '116017', '16'), +('12', '86', '15', '111346', '115838', '16'), +('12', '86', '20', '111356', '116288', '16'), +('12', '86', '20', '111352', '115371', '16'), +('12', '86', '20', '111351', '114250', '16'), +('12', '86', '20', '111054', '102237', '16'), +('12', '86', '12', '56035', '71693', '16'), +('12', '86', '12', '56074', '70965', '16'), +('12', '86', '12', '104422', '61767', '16'), +('12', '86', '12', '49656', '46297', '16'), +('12', '86', '18', '56041', '75423', '16'), +('12', '86', '18', '62986', '74357', '16'), +('12', '86', '18', '104426', '64116', '16'), +('12', '86', '18', '54851', '46875', '16'), +('12', '86', '19', '62990', '73422', '16'), +('12', '86', '19', '81763', '73326', '16'), +('12', '86', '19', '56037', '72867', '16'), +('12', '86', '19', '56075', '72781', '16'), +('12', '86', '13', '111521', '119235', '16'), +('12', '86', '13', '111524', '113223', '16'), +('12', '86', '13', '111519', '113165', '16'), +('12', '86', '13', '111221', '105958', '16'), +('12', '86', '14', '111537', '116358', '16'), +('12', '86', '14', '111535', '114899', '16'), +('12', '86', '14', '111237', '102307', '16'), +('12', '86', '14', '111235', '100947', '16'), +('12', '86', '11', '111335', '115698', '16'), +('12', '86', '11', '111337', '115459', '16'), +('12', '86', '11', '111338', '113282', '16'), +('12', '86', '11', '111034', '101748', '16'), +('12', '87', '22', '12425', '0', '16'), +('12', '87', '22', '21807', '0', '16'), +('12', '87', '22', '39342', '0', '16'), +('12', '87', '22', '23597', '0', '16'), +('12', '87', '1', '111307', '115902', '16'), +('12', '87', '1', '111306', '115832', '16'), +('12', '87', '1', '111304', '115698', '16'), +('12', '87', '1', '111300', '114552', '16'), +('12', '87', '2', '62985', '72739', '16'), +('12', '87', '2', '94056', '72660', '16'), +('12', '87', '2', '104424', '63481', '16'), +('12', '87', '2', '54845', '46597', '16'), +('12', '87', '3', '111314', '116217', '16'), +('12', '87', '3', '111316', '114925', '16'), +('12', '87', '3', '111315', '114681', '16'), +('12', '87', '3', '111013', '102167', '16'), +('12', '87', '5', '111319', '115879', '16'), +('12', '87', '5', '111321', '115382', '16'), +('12', '87', '5', '111318', '114115', '16'), +('12', '87', '5', '111018', '101829', '16'), +('12', '87', '8', '111332', '116164', '16'), +('12', '87', '8', '111329', '115640', '16'), +('12', '87', '8', '111331', '113395', '16'), +('12', '87', '8', '111031', '102213', '16'), +('12', '87', '6', '111323', '116106', '16'), +('12', '87', '6', '111325', '115310', '16'), +('12', '87', '6', '111326', '115008', '16'), +('12', '87', '6', '111022', '102055', '16'), +('12', '87', '17', '56043', '77138', '16'), +('12', '87', '17', '56084', '75416', '16'), +('12', '87', '17', '104427', '65838', '16'), +('12', '87', '17', '54854', '49058', '16'), +('12', '87', '7', '56080', '72737', '16'), +('12', '87', '7', '56040', '72244', '16'), +('12', '87', '7', '104425', '63247', '16'), +('12', '87', '7', '49656', '46298', '16'), +('12', '87', '9', '67098', '113005', '16'), +('12', '87', '9', '56070', '70617', '16'), +('12', '87', '9', '62984', '70378', '16'), +('12', '87', '9', '56031', '70320', '16'), +('12', '87', '15', '111349', '117297', '16'), +('12', '87', '15', '111344', '116369', '16'), +('12', '87', '15', '111340', '116021', '16'), +('12', '87', '15', '111346', '115842', '16'), +('12', '87', '20', '111356', '116291', '16'), +('12', '87', '20', '111352', '115374', '16'), +('12', '87', '20', '111351', '114254', '16'), +('12', '87', '20', '111054', '102241', '16'), +('12', '87', '12', '56035', '71699', '16'), +('12', '87', '12', '56074', '70969', '16'), +('12', '87', '12', '104422', '61772', '16'), +('12', '87', '12', '49656', '46298', '16'), +('12', '87', '18', '56041', '75428', '16'), +('12', '87', '18', '62986', '74360', '16'), +('12', '87', '18', '104426', '64117', '16'), +('12', '87', '18', '54851', '46877', '16'), +('12', '87', '19', '62990', '73427', '16'), +('12', '87', '19', '81763', '73332', '16'), +('12', '87', '19', '56037', '72868', '16'), +('12', '87', '19', '56075', '72784', '16'), +('12', '87', '13', '111521', '119238', '16'), +('12', '87', '13', '111524', '113227', '16'), +('12', '87', '13', '111519', '113170', '16'), +('12', '87', '13', '111221', '105961', '16'), +('12', '87', '14', '111537', '116361', '16'), +('12', '87', '14', '111535', '114901', '16'), +('12', '87', '14', '111237', '102310', '16'), +('12', '87', '14', '111235', '100950', '16'), +('12', '87', '11', '111335', '115702', '16'), +('12', '87', '11', '111337', '115463', '16'), +('12', '87', '11', '111338', '113286', '16'), +('12', '87', '11', '111034', '101751', '16'), +('12', '88', '22', '12425', '0', '16'), +('12', '88', '22', '21807', '0', '16'), +('12', '88', '22', '39342', '0', '16'), +('12', '88', '22', '23597', '0', '16'), +('12', '88', '1', '111307', '115907', '16'), +('12', '88', '1', '111306', '115835', '16'), +('12', '88', '1', '111304', '115701', '16'), +('12', '88', '1', '111300', '114556', '16'), +('12', '88', '2', '62985', '72742', '16'), +('12', '88', '2', '94056', '72662', '16'), +('12', '88', '2', '104424', '63486', '16'), +('12', '88', '2', '54845', '46600', '16'), +('12', '88', '3', '111314', '116221', '16'), +('12', '88', '3', '111316', '114929', '16'), +('12', '88', '3', '111315', '114684', '16'), +('12', '88', '3', '111013', '102171', '16'), +('12', '88', '5', '111319', '115883', '16'), +('12', '88', '5', '111321', '115385', '16'), +('12', '88', '5', '111318', '114119', '16'), +('12', '88', '5', '111018', '101833', '16'), +('12', '88', '8', '111332', '116168', '16'), +('12', '88', '8', '111329', '115644', '16'), +('12', '88', '8', '111331', '113398', '16'), +('12', '88', '8', '111031', '102217', '16'), +('12', '88', '6', '111323', '116109', '16'), +('12', '88', '6', '111325', '115313', '16'), +('12', '88', '6', '111326', '115013', '16'), +('12', '88', '6', '111022', '102059', '16'), +('12', '88', '17', '56043', '77141', '16'), +('12', '88', '17', '56084', '75420', '16'), +('12', '88', '17', '104427', '65842', '16'), +('12', '88', '17', '54854', '49061', '16'), +('12', '88', '7', '56080', '72741', '16'), +('12', '88', '7', '56040', '72251', '16'), +('12', '88', '7', '104425', '63250', '16'), +('12', '88', '7', '49656', '46298', '16'), +('12', '88', '9', '67098', '114307', '16'), +('12', '88', '9', '56070', '70620', '16'), +('12', '88', '9', '62984', '70381', '16'), +('12', '88', '9', '56031', '70326', '16'), +('12', '88', '15', '111349', '117302', '16'), +('12', '88', '15', '111344', '116372', '16'), +('12', '88', '15', '111340', '116024', '16'), +('12', '88', '15', '111346', '115845', '16'), +('12', '88', '20', '111356', '116295', '16'), +('12', '88', '20', '111352', '115378', '16'), +('12', '88', '20', '111351', '114259', '16'), +('12', '88', '20', '111054', '102244', '16'), +('12', '88', '12', '56035', '71704', '16'), +('12', '88', '12', '56074', '70973', '16'), +('12', '88', '12', '104422', '61777', '16'), +('12', '88', '12', '49656', '46298', '16'), +('12', '88', '18', '56041', '75433', '16'), +('12', '88', '18', '62986', '74363', '16'), +('12', '88', '18', '104426', '64118', '16'), +('12', '88', '18', '54851', '46880', '16'), +('12', '88', '19', '62990', '73431', '16'), +('12', '88', '19', '81763', '73338', '16'), +('12', '88', '19', '56037', '72870', '16'), +('12', '88', '19', '56075', '72787', '16'), +('12', '88', '13', '111521', '119242', '16'), +('12', '88', '13', '111524', '113231', '16'), +('12', '88', '13', '111519', '113174', '16'), +('12', '88', '13', '111221', '105965', '16'), +('12', '88', '14', '111537', '116364', '16'), +('12', '88', '14', '111535', '114904', '16'), +('12', '88', '14', '111237', '102313', '16'), +('12', '88', '14', '111235', '100952', '16'), +('12', '88', '11', '111335', '115705', '16'), +('12', '88', '11', '111337', '115467', '16'), +('12', '88', '11', '111338', '113290', '16'), +('12', '88', '11', '111034', '101755', '16'), +('12', '89', '22', '12425', '0', '16'), +('12', '89', '22', '21807', '0', '16'), +('12', '89', '22', '39342', '0', '16'), +('12', '89', '22', '23597', '0', '16'), +('12', '89', '1', '111307', '115912', '16'), +('12', '89', '1', '111306', '115838', '16'), +('12', '89', '1', '111304', '115704', '16'), +('12', '89', '1', '111300', '114560', '16'), +('12', '89', '2', '62985', '72744', '16'), +('12', '89', '2', '94056', '72664', '16'), +('12', '89', '2', '104424', '63490', '16'), +('12', '89', '2', '54845', '46604', '16'), +('12', '89', '3', '111314', '116225', '16'), +('12', '89', '3', '111316', '114933', '16'), +('12', '89', '3', '111315', '114688', '16'), +('12', '89', '3', '111013', '102175', '16'), +('12', '89', '5', '111319', '115888', '16'), +('12', '89', '5', '111321', '115388', '16'), +('12', '89', '5', '111318', '114124', '16'), +('12', '89', '5', '111018', '101837', '16'), +('12', '89', '8', '111332', '116172', '16'), +('12', '89', '8', '111329', '115649', '16'), +('12', '89', '8', '111331', '113402', '16'), +('12', '89', '8', '111031', '102221', '16'), +('12', '89', '6', '111323', '116113', '16'), +('12', '89', '6', '111325', '115316', '16'), +('12', '89', '6', '111326', '115017', '16'), +('12', '89', '6', '111022', '102062', '16'), +('12', '89', '17', '56043', '77144', '16'), +('12', '89', '17', '56084', '75424', '16'), +('12', '89', '17', '104427', '65845', '16'), +('12', '89', '17', '54854', '49064', '16'), +('12', '89', '7', '56080', '72745', '16'), +('12', '89', '7', '56040', '72257', '16'), +('12', '89', '7', '104425', '63253', '16'), +('12', '89', '7', '49656', '46299', '16'), +('12', '89', '9', '67098', '115608', '16'), +('12', '89', '9', '56070', '70623', '16'), +('12', '89', '9', '62984', '70384', '16'), +('12', '89', '9', '56031', '70333', '16'), +('12', '89', '15', '111349', '117306', '16'), +('12', '89', '15', '111344', '116375', '16'), +('12', '89', '15', '111340', '116027', '16'), +('12', '89', '15', '111346', '115849', '16'), +('12', '89', '20', '111356', '116299', '16'), +('12', '89', '20', '111352', '115381', '16'), +('12', '89', '20', '111351', '114263', '16'), +('12', '89', '20', '111054', '102248', '16'), +('12', '89', '12', '56035', '71710', '16'), +('12', '89', '12', '56074', '70976', '16'), +('12', '89', '12', '104422', '61781', '16'), +('12', '89', '12', '49656', '46299', '16'), +('12', '89', '18', '56041', '75438', '16'), +('12', '89', '18', '62986', '74366', '16'), +('12', '89', '18', '104426', '64119', '16'), +('12', '89', '18', '54851', '46882', '16'), +('12', '89', '19', '62990', '73436', '16'), +('12', '89', '19', '81763', '73344', '16'), +('12', '89', '19', '56037', '72871', '16'), +('12', '89', '19', '56075', '72790', '16'), +('12', '89', '13', '111521', '119245', '16'), +('12', '89', '13', '111524', '113235', '16'), +('12', '89', '13', '111519', '113179', '16'), +('12', '89', '13', '111221', '105969', '16'), +('12', '89', '14', '111537', '116368', '16'), +('12', '89', '14', '111535', '114906', '16'), +('12', '89', '14', '111237', '102316', '16'), +('12', '89', '14', '111235', '100955', '16'), +('12', '89', '11', '111335', '115709', '16'), +('12', '89', '11', '111337', '115470', '16'), +('12', '89', '11', '111338', '113294', '16'), +('12', '89', '11', '111034', '101758', '16'), +('12', '90', '22', '12425', '0', '17'), +('12', '90', '22', '21807', '0', '17'), +('12', '90', '22', '39342', '0', '17'), +('12', '90', '22', '23597', '0', '17'), +('12', '90', '1', '111307', '115917', '17'), +('12', '90', '1', '111306', '115842', '17'), +('12', '90', '1', '111304', '115707', '17'), +('12', '90', '1', '111300', '114564', '17'), +('12', '90', '2', '62985', '72746', '17'), +('12', '90', '2', '94056', '72666', '17'), +('12', '90', '2', '104424', '63495', '17'), +('12', '90', '2', '54845', '46607', '17'), +('12', '90', '3', '111314', '116229', '17'), +('12', '90', '3', '111316', '114937', '17'), +('12', '90', '3', '111315', '114692', '17'), +('12', '90', '3', '111013', '102179', '17'), +('12', '90', '5', '111319', '115892', '17'), +('12', '90', '5', '111321', '115391', '17'), +('12', '90', '5', '111318', '114128', '17'), +('12', '90', '5', '111018', '101842', '17'), +('12', '90', '8', '111332', '116176', '17'), +('12', '90', '8', '111329', '115654', '17'), +('12', '90', '8', '111331', '113405', '17'), +('12', '90', '8', '111031', '102225', '17'), +('12', '90', '6', '111323', '116116', '17'), +('12', '90', '6', '111325', '115319', '17'), +('12', '90', '6', '111326', '115022', '17'), +('12', '90', '6', '111022', '102066', '17'), +('12', '90', '17', '56043', '77148', '17'), +('12', '90', '17', '56084', '75428', '17'), +('12', '90', '17', '104427', '65849', '17'), +('12', '90', '17', '54854', '49066', '17'), +('12', '90', '7', '56080', '72750', '17'), +('12', '90', '7', '56040', '72263', '17'), +('12', '90', '7', '104425', '63257', '17'), +('12', '90', '7', '49656', '46299', '17'), +('12', '90', '9', '67098', '116910', '17'), +('12', '90', '9', '56070', '70626', '17'), +('12', '90', '9', '62984', '70387', '17'), +('12', '90', '9', '56031', '70339', '17'), +('12', '90', '15', '111349', '117311', '17'), +('12', '90', '15', '111344', '116377', '17'), +('12', '90', '15', '111340', '116031', '17'), +('12', '90', '15', '111346', '115853', '17'), +('12', '90', '20', '111356', '116303', '17'), +('12', '90', '20', '111352', '115384', '17'), +('12', '90', '20', '111351', '114268', '17'), +('12', '90', '20', '111054', '102252', '17'), +('12', '90', '12', '56035', '71716', '17'), +('12', '90', '12', '56074', '70980', '17'), +('12', '90', '12', '104422', '61786', '17'), +('12', '90', '12', '49656', '46299', '17'), +('12', '90', '18', '56041', '75443', '17'), +('12', '90', '18', '62986', '74370', '17'), +('12', '90', '18', '104426', '64121', '17'), +('12', '90', '18', '54851', '46885', '17'), +('12', '90', '19', '62990', '73441', '17'), +('12', '90', '19', '81763', '73350', '17'), +('12', '90', '19', '56037', '72873', '17'), +('12', '90', '19', '56075', '72793', '17'), +('12', '90', '13', '111521', '119248', '17'), +('12', '90', '13', '111524', '113239', '17'), +('12', '90', '13', '111519', '113184', '17'), +('12', '90', '13', '111221', '105972', '17'), +('12', '90', '14', '111537', '116371', '17'), +('12', '90', '14', '111535', '114908', '17'), +('12', '90', '14', '111237', '102319', '17'), +('12', '90', '14', '111235', '100957', '17'), +('12', '90', '11', '111335', '115712', '17'), +('12', '90', '11', '111337', '115474', '17'), +('12', '90', '11', '111338', '113297', '17'), +('12', '90', '11', '111034', '101762', '17'), +('12', '91', '22', '12425', '0', '17'), +('12', '91', '22', '21807', '0', '17'), +('12', '91', '22', '39342', '0', '17'), +('12', '91', '22', '23597', '0', '17'), +('12', '91', '1', '111307', '115922', '17'), +('12', '91', '1', '111306', '115845', '17'), +('12', '91', '1', '111304', '115710', '17'), +('12', '91', '1', '111300', '114568', '17'), +('12', '91', '2', '62985', '72749', '17'), +('12', '91', '2', '94056', '72668', '17'), +('12', '91', '2', '104424', '63500', '17'), +('12', '91', '2', '54845', '46611', '17'), +('12', '91', '3', '111314', '116233', '17'), +('12', '91', '3', '111316', '114940', '17'), +('12', '91', '3', '111315', '114696', '17'), +('12', '91', '3', '111013', '102183', '17'), +('12', '91', '5', '111319', '115897', '17'), +('12', '91', '5', '111321', '115394', '17'), +('12', '91', '5', '111318', '114133', '17'), +('12', '91', '5', '111018', '101846', '17'), +('12', '91', '8', '111332', '116180', '17'), +('12', '91', '8', '111329', '115658', '17'), +('12', '91', '8', '111331', '113408', '17'), +('12', '91', '8', '111031', '102229', '17'), +('12', '91', '6', '111323', '116120', '17'), +('12', '91', '6', '111325', '115322', '17'), +('12', '91', '6', '111326', '115027', '17'), +('12', '91', '6', '111022', '102069', '17'), +('12', '91', '17', '56043', '77151', '17'), +('12', '91', '17', '56084', '75431', '17'), +('12', '91', '17', '104427', '65853', '17'), +('12', '91', '17', '54854', '49069', '17'), +('12', '91', '7', '56080', '72754', '17'), +('12', '91', '7', '56040', '72269', '17'), +('12', '91', '7', '104425', '63260', '17'), +('12', '91', '7', '49656', '46300', '17'), +('12', '91', '9', '67098', '116913', '17'), +('12', '91', '9', '56070', '70629', '17'), +('12', '91', '9', '62984', '70390', '17'), +('12', '91', '9', '56031', '70345', '17'), +('12', '91', '15', '111349', '117316', '17'), +('12', '91', '15', '111344', '116380', '17'), +('12', '91', '15', '111340', '116034', '17'), +('12', '91', '15', '111346', '115856', '17'), +('12', '91', '20', '111356', '116306', '17'), +('12', '91', '20', '111352', '115387', '17'), +('12', '91', '20', '111351', '114272', '17'), +('12', '91', '20', '111054', '102256', '17'), +('12', '91', '12', '56035', '71722', '17'), +('12', '91', '12', '56074', '70984', '17'), +('12', '91', '12', '104422', '61791', '17'), +('12', '91', '12', '49656', '46300', '17'), +('12', '91', '18', '56041', '75448', '17'), +('12', '91', '18', '62986', '74373', '17'), +('12', '91', '18', '104426', '64122', '17'), +('12', '91', '18', '54851', '46887', '17'), +('12', '91', '19', '62990', '73445', '17'), +('12', '91', '19', '81763', '73356', '17'), +('12', '91', '19', '56037', '72875', '17'), +('12', '91', '19', '56075', '72795', '17'), +('12', '91', '13', '111521', '119252', '17'), +('12', '91', '13', '111524', '113243', '17'), +('12', '91', '13', '111519', '113188', '17'), +('12', '91', '13', '111221', '105976', '17'), +('12', '91', '14', '111537', '116374', '17'), +('12', '91', '14', '111535', '114911', '17'), +('12', '91', '14', '111237', '102322', '17'), +('12', '91', '14', '111235', '100959', '17'), +('12', '91', '11', '111335', '115716', '17'), +('12', '91', '11', '111337', '115478', '17'), +('12', '91', '11', '111338', '113301', '17'), +('12', '91', '11', '111034', '101766', '17'), +('12', '92', '22', '12425', '0', '17'), +('12', '92', '22', '21807', '0', '17'), +('12', '92', '22', '39342', '0', '17'), +('12', '92', '22', '23597', '0', '17'), +('12', '92', '1', '111307', '115927', '17'), +('12', '92', '1', '111306', '115848', '17'), +('12', '92', '1', '111304', '115713', '17'), +('12', '92', '1', '111300', '114572', '17'), +('12', '92', '2', '62985', '72751', '17'), +('12', '92', '2', '94056', '72670', '17'), +('12', '92', '2', '104424', '63505', '17'), +('12', '92', '2', '54845', '46614', '17'), +('12', '92', '3', '111314', '116237', '17'), +('12', '92', '3', '111316', '114944', '17'), +('12', '92', '3', '111315', '114700', '17'), +('12', '92', '3', '111013', '102187', '17'), +('12', '92', '5', '111319', '115901', '17'), +('12', '92', '5', '111321', '115397', '17'), +('12', '92', '5', '111318', '114137', '17'), +('12', '92', '5', '111018', '101850', '17'), +('12', '92', '8', '111332', '116184', '17'), +('12', '92', '8', '111329', '115663', '17'), +('12', '92', '8', '111331', '113412', '17'), +('12', '92', '8', '111031', '102233', '17'), +('12', '92', '6', '111323', '116123', '17'), +('12', '92', '6', '111325', '115325', '17'), +('12', '92', '6', '111326', '115031', '17'), +('12', '92', '6', '111022', '102073', '17'), +('12', '92', '17', '56043', '77154', '17'), +('12', '92', '17', '56084', '75435', '17'), +('12', '92', '17', '104427', '65857', '17'), +('12', '92', '17', '54854', '49072', '17'), +('12', '92', '7', '56080', '72758', '17'), +('12', '92', '7', '56040', '72275', '17'), +('12', '92', '7', '104425', '63263', '17'), +('12', '92', '7', '49656', '46300', '17'), +('12', '92', '9', '67098', '116915', '17'), +('12', '92', '9', '56070', '70633', '17'), +('12', '92', '9', '62984', '70393', '17'), +('12', '92', '9', '56031', '70351', '17'), +('12', '92', '15', '111349', '117321', '17'), +('12', '92', '15', '111344', '116383', '17'), +('12', '92', '15', '111340', '116037', '17'), +('12', '92', '15', '111346', '115860', '17'), +('12', '92', '20', '111356', '116310', '17'), +('12', '92', '20', '111352', '115390', '17'), +('12', '92', '20', '111351', '114277', '17'), +('12', '92', '20', '111054', '102260', '17'), +('12', '92', '12', '56035', '71727', '17'), +('12', '92', '12', '56074', '70987', '17'), +('12', '92', '12', '104422', '61796', '17'), +('12', '92', '12', '49656', '46300', '17'), +('12', '92', '18', '56041', '75453', '17'), +('12', '92', '18', '62986', '74376', '17'), +('12', '92', '18', '104426', '64123', '17'), +('12', '92', '18', '54851', '46890', '17'), +('12', '92', '19', '62990', '73450', '17'), +('12', '92', '19', '81763', '73362', '17'), +('12', '92', '19', '56037', '72876', '17'), +('12', '92', '19', '56075', '72798', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '92', '13', '111521', '119255', '17'), +('12', '92', '13', '111524', '113248', '17'), +('12', '92', '13', '111519', '113193', '17'), +('12', '92', '13', '111221', '105980', '17'), +('12', '92', '14', '111537', '116377', '17'), +('12', '92', '14', '111535', '114913', '17'), +('12', '92', '14', '111237', '102326', '17'), +('12', '92', '14', '111235', '100962', '17'), +('12', '92', '11', '111335', '115720', '17'), +('12', '92', '11', '111337', '115482', '17'), +('12', '92', '11', '111338', '113305', '17'), +('12', '92', '11', '111034', '101769', '17'), +('12', '93', '22', '12425', '0', '17'), +('12', '93', '22', '21807', '0', '17'), +('12', '93', '22', '39342', '0', '17'), +('12', '93', '22', '23597', '0', '17'), +('12', '93', '1', '111307', '115932', '17'), +('12', '93', '1', '111306', '115852', '17'), +('12', '93', '1', '111304', '115716', '17'), +('12', '93', '1', '111300', '114576', '17'), +('12', '93', '2', '62985', '72753', '17'), +('12', '93', '2', '94056', '72672', '17'), +('12', '93', '2', '104424', '63510', '17'), +('12', '93', '2', '54845', '46618', '17'), +('12', '93', '3', '111314', '116241', '17'), +('12', '93', '3', '111316', '114948', '17'), +('12', '93', '3', '111315', '114703', '17'), +('12', '93', '3', '111013', '102191', '17'), +('12', '93', '5', '111319', '115905', '17'), +('12', '93', '5', '111321', '115400', '17'), +('12', '93', '5', '111318', '114142', '17'), +('12', '93', '5', '111018', '101855', '17'), +('12', '93', '8', '111332', '116188', '17'), +('12', '93', '8', '111329', '115667', '17'), +('12', '93', '8', '111331', '113415', '17'), +('12', '93', '8', '111031', '102238', '17'), +('12', '93', '6', '111323', '116127', '17'), +('12', '93', '6', '111325', '115327', '17'), +('12', '93', '6', '111326', '115036', '17'), +('12', '93', '6', '111022', '102076', '17'), +('12', '93', '17', '56043', '77158', '17'), +('12', '93', '17', '56084', '75439', '17'), +('12', '93', '17', '104427', '65860', '17'), +('12', '93', '17', '54854', '49075', '17'), +('12', '93', '7', '56080', '72763', '17'), +('12', '93', '7', '56040', '72281', '17'), +('12', '93', '7', '104425', '63267', '17'), +('12', '93', '7', '49656', '46301', '17'), +('12', '93', '9', '67098', '116918', '17'), +('12', '93', '9', '56070', '70636', '17'), +('12', '93', '9', '62984', '70396', '17'), +('12', '93', '9', '56031', '70357', '17'), +('12', '93', '15', '111349', '117326', '17'), +('12', '93', '15', '111344', '116386', '17'), +('12', '93', '15', '111340', '116041', '17'), +('12', '93', '15', '111346', '115863', '17'), +('12', '93', '20', '111356', '116314', '17'), +('12', '93', '20', '111352', '115394', '17'), +('12', '93', '20', '111351', '114281', '17'), +('12', '93', '20', '111054', '102263', '17'), +('12', '93', '12', '56035', '71733', '17'), +('12', '93', '12', '56074', '70991', '17'), +('12', '93', '12', '104422', '61800', '17'), +('12', '93', '12', '49656', '46301', '17'), +('12', '93', '18', '56041', '75459', '17'), +('12', '93', '18', '62986', '74379', '17'), +('12', '93', '18', '104426', '64124', '17'), +('12', '93', '18', '54851', '46892', '17'), +('12', '93', '19', '62990', '73454', '17'), +('12', '93', '19', '81763', '73368', '17'), +('12', '93', '19', '56037', '72878', '17'), +('12', '93', '19', '56075', '72801', '17'), +('12', '93', '13', '111521', '119258', '17'), +('12', '93', '13', '111524', '113252', '17'), +('12', '93', '13', '111519', '113197', '17'), +('12', '93', '13', '111221', '105983', '17'), +('12', '93', '14', '111537', '116380', '17'), +('12', '93', '14', '111535', '114916', '17'), +('12', '93', '14', '111237', '102329', '17'), +('12', '93', '14', '111235', '100964', '17'), +('12', '93', '11', '111335', '115723', '17'), +('12', '93', '11', '111337', '115485', '17'), +('12', '93', '11', '111338', '113308', '17'), +('12', '93', '11', '111034', '101773', '17'), +('12', '94', '22', '12425', '0', '17'), +('12', '94', '22', '21807', '0', '17'), +('12', '94', '22', '39342', '0', '17'), +('12', '94', '22', '23597', '0', '17'), +('12', '94', '1', '111307', '115937', '17'), +('12', '94', '1', '111306', '115855', '17'), +('12', '94', '1', '111304', '115719', '17'), +('12', '94', '1', '111300', '114580', '17'), +('12', '94', '2', '62985', '72756', '17'), +('12', '94', '2', '94056', '72674', '17'), +('12', '94', '2', '104424', '63515', '17'), +('12', '94', '2', '54845', '46621', '17'), +('12', '94', '3', '111314', '116245', '17'), +('12', '94', '3', '111316', '114951', '17'), +('12', '94', '3', '111315', '114707', '17'), +('12', '94', '3', '111013', '102195', '17'), +('12', '94', '5', '111319', '115910', '17'), +('12', '94', '5', '111321', '115403', '17'), +('12', '94', '5', '111318', '114147', '17'), +('12', '94', '5', '111018', '101859', '17'), +('12', '94', '8', '111332', '116192', '17'), +('12', '94', '8', '111329', '115672', '17'), +('12', '94', '8', '111331', '113418', '17'), +('12', '94', '8', '111031', '102242', '17'), +('12', '94', '6', '111323', '116130', '17'), +('12', '94', '6', '111325', '115330', '17'), +('12', '94', '6', '111326', '115041', '17'), +('12', '94', '6', '111022', '102080', '17'), +('12', '94', '17', '56043', '77161', '17'), +('12', '94', '17', '56084', '75443', '17'), +('12', '94', '17', '104427', '65864', '17'), +('12', '94', '17', '54854', '49078', '17'), +('12', '94', '7', '56080', '72767', '17'), +('12', '94', '7', '56040', '72287', '17'), +('12', '94', '7', '104425', '63270', '17'), +('12', '94', '7', '49656', '46301', '17'), +('12', '94', '9', '67098', '116920', '17'), +('12', '94', '9', '56070', '70639', '17'), +('12', '94', '9', '62984', '70399', '17'), +('12', '94', '9', '56031', '70363', '17'), +('12', '94', '15', '111349', '117331', '17'), +('12', '94', '15', '111344', '116389', '17'), +('12', '94', '15', '111340', '116044', '17'), +('12', '94', '15', '111346', '115867', '17'), +('12', '94', '20', '111356', '116318', '17'), +('12', '94', '20', '111352', '115397', '17'), +('12', '94', '20', '111351', '114286', '17'), +('12', '94', '20', '111054', '102267', '17'), +('12', '94', '12', '56035', '71739', '17'), +('12', '94', '12', '56074', '70995', '17'), +('12', '94', '12', '104422', '61805', '17'), +('12', '94', '12', '49656', '46301', '17'), +('12', '94', '18', '56041', '75464', '17'), +('12', '94', '18', '62986', '74382', '17'), +('12', '94', '18', '104426', '64126', '17'), +('12', '94', '18', '54851', '46895', '17'), +('12', '94', '19', '62990', '73459', '17'), +('12', '94', '19', '81763', '73374', '17'), +('12', '94', '19', '56037', '72879', '17'), +('12', '94', '19', '56075', '72804', '17'), +('12', '94', '13', '111521', '119262', '17'), +('12', '94', '13', '111524', '113256', '17'), +('12', '94', '13', '111519', '113202', '17'), +('12', '94', '13', '111221', '105987', '17'), +('12', '94', '14', '111537', '116383', '17'), +('12', '94', '14', '111535', '114918', '17'), +('12', '94', '14', '111237', '102332', '17'), +('12', '94', '14', '111235', '100967', '17'), +('12', '94', '11', '111335', '115727', '17'), +('12', '94', '11', '111337', '115489', '17'), +('12', '94', '11', '111338', '113312', '17'), +('12', '94', '11', '111034', '101776', '17'), +('12', '95', '22', '12425', '0', '18'), +('12', '95', '22', '21807', '0', '18'), +('12', '95', '22', '39342', '0', '18'), +('12', '95', '22', '23597', '0', '18'), +('12', '95', '1', '111307', '115942', '18'), +('12', '95', '1', '111306', '115858', '18'), +('12', '95', '1', '111304', '115722', '18'), +('12', '95', '1', '111300', '114584', '18'), +('12', '95', '2', '62985', '72758', '18'), +('12', '95', '2', '94056', '72676', '18'), +('12', '95', '2', '104424', '63520', '18'), +('12', '95', '2', '54845', '46625', '18'), +('12', '95', '3', '111314', '116249', '18'), +('12', '95', '3', '111316', '114955', '18'), +('12', '95', '3', '111315', '114711', '18'), +('12', '95', '3', '111013', '102199', '18'), +('12', '95', '5', '111319', '115914', '18'), +('12', '95', '5', '111321', '115407', '18'), +('12', '95', '5', '111318', '114151', '18'), +('12', '95', '5', '111018', '101863', '18'), +('12', '95', '8', '111332', '116196', '18'), +('12', '95', '8', '111329', '115676', '18'), +('12', '95', '8', '111331', '113421', '18'), +('12', '95', '8', '111031', '102246', '18'), +('12', '95', '6', '111323', '116134', '18'), +('12', '95', '6', '111325', '115333', '18'), +('12', '95', '6', '111326', '115045', '18'), +('12', '95', '6', '111022', '102083', '18'), +('12', '95', '17', '56043', '77165', '18'), +('12', '95', '17', '56084', '75446', '18'), +('12', '95', '17', '104427', '65868', '18'), +('12', '95', '17', '54854', '49081', '18'), +('12', '95', '7', '56080', '72771', '18'), +('12', '95', '7', '56040', '72294', '18'), +('12', '95', '7', '104425', '63273', '18'), +('12', '95', '7', '49656', '46302', '18'), +('12', '95', '9', '67098', '116923', '18'), +('12', '95', '9', '56070', '70642', '18'), +('12', '95', '9', '62984', '70402', '18'), +('12', '95', '9', '56031', '70369', '18'), +('12', '95', '15', '111349', '117336', '18'), +('12', '95', '15', '111344', '116392', '18'), +('12', '95', '15', '111340', '116047', '18'), +('12', '95', '15', '111346', '115871', '18'), +('12', '95', '20', '128733', '147344', '18'), +('12', '95', '20', '111356', '116322', '18'), +('12', '95', '20', '111352', '115400', '18'), +('12', '95', '20', '111351', '114290', '18'), +('12', '95', '12', '56035', '71744', '18'), +('12', '95', '12', '56074', '70998', '18'), +('12', '95', '12', '104422', '61810', '18'), +('12', '95', '12', '49656', '46302', '18'), +('12', '95', '18', '56041', '75469', '18'), +('12', '95', '18', '62986', '74385', '18'), +('12', '95', '18', '104426', '64127', '18'), +('12', '95', '18', '54851', '46897', '18'), +('12', '95', '19', '62990', '73463', '18'), +('12', '95', '19', '81763', '73380', '18'), +('12', '95', '19', '56037', '72881', '18'), +('12', '95', '19', '56075', '72807', '18'), +('12', '95', '13', '111521', '119265', '18'), +('12', '95', '13', '111524', '113260', '18'), +('12', '95', '13', '111519', '113206', '18'), +('12', '95', '13', '111221', '105991', '18'), +('12', '95', '14', '111537', '116386', '18'), +('12', '95', '14', '111535', '114921', '18'), +('12', '95', '14', '111237', '102335', '18'), +('12', '95', '14', '111235', '100969', '18'), +('12', '95', '11', '111335', '115730', '18'), +('12', '95', '11', '111337', '115493', '18'), +('12', '95', '11', '111338', '113316', '18'), +('12', '95', '11', '111034', '101780', '18'), +('12', '96', '22', '12425', '0', '18'), +('12', '96', '22', '21807', '0', '18'), +('12', '96', '22', '39342', '0', '18'), +('12', '96', '22', '23597', '0', '18'), +('12', '96', '1', '111307', '115947', '18'), +('12', '96', '1', '111306', '115862', '18'), +('12', '96', '1', '111304', '115725', '18'), +('12', '96', '1', '111300', '114588', '18'), +('12', '96', '2', '62985', '72760', '18'), +('12', '96', '2', '94056', '72678', '18'), +('12', '96', '2', '104424', '63524', '18'), +('12', '96', '2', '54845', '46629', '18'), +('12', '96', '3', '111314', '116253', '18'), +('12', '96', '3', '111316', '114959', '18'), +('12', '96', '3', '111315', '114715', '18'), +('12', '96', '3', '111013', '102202', '18'), +('12', '96', '5', '111319', '115918', '18'), +('12', '96', '5', '111321', '115410', '18'), +('12', '96', '5', '111318', '114156', '18'), +('12', '96', '5', '111018', '101868', '18'), +('12', '96', '8', '111332', '116200', '18'), +('12', '96', '8', '111329', '115681', '18'), +('12', '96', '8', '111331', '113425', '18'), +('12', '96', '8', '111031', '102250', '18'), +('12', '96', '6', '111323', '116137', '18'), +('12', '96', '6', '111325', '115336', '18'), +('12', '96', '6', '111326', '115050', '18'), +('12', '96', '6', '111022', '102087', '18'), +('12', '96', '17', '56043', '77168', '18'), +('12', '96', '17', '56084', '75450', '18'), +('12', '96', '17', '104427', '65872', '18'), +('12', '96', '17', '54854', '49084', '18'), +('12', '96', '7', '56080', '72776', '18'), +('12', '96', '7', '56040', '72300', '18'), +('12', '96', '7', '104425', '63277', '18'), +('12', '96', '7', '49656', '46302', '18'), +('12', '96', '9', '67098', '116926', '18'), +('12', '96', '9', '56070', '70645', '18'), +('12', '96', '9', '62984', '70405', '18'), +('12', '96', '9', '56031', '70375', '18'), +('12', '96', '15', '111349', '117341', '18'), +('12', '96', '15', '111344', '116395', '18'), +('12', '96', '15', '111340', '116051', '18'), +('12', '96', '15', '111346', '115874', '18'), +('12', '96', '20', '128733', '147347', '18'), +('12', '96', '20', '111356', '116325', '18'), +('12', '96', '20', '111352', '115403', '18'), +('12', '96', '20', '111351', '114295', '18'), +('12', '96', '12', '56035', '71750', '18'), +('12', '96', '12', '56074', '71002', '18'), +('12', '96', '12', '104422', '61815', '18'), +('12', '96', '12', '49656', '46302', '18'), +('12', '96', '18', '56041', '75474', '18'), +('12', '96', '18', '62986', '74388', '18'), +('12', '96', '18', '104426', '64128', '18'), +('12', '96', '18', '54851', '46900', '18'), +('12', '96', '19', '62990', '73468', '18'), +('12', '96', '19', '81763', '73386', '18'), +('12', '96', '19', '56037', '72882', '18'), +('12', '96', '19', '56075', '72810', '18'), +('12', '96', '13', '111521', '119268', '18'), +('12', '96', '13', '111524', '113264', '18'), +('12', '96', '13', '111519', '113211', '18'), +('12', '96', '13', '111221', '105994', '18'), +('12', '96', '14', '111537', '116390', '18'), +('12', '96', '14', '111535', '114923', '18'), +('12', '96', '14', '111237', '102338', '18'), +('12', '96', '14', '111235', '100972', '18'), +('12', '96', '11', '111335', '115734', '18'), +('12', '96', '11', '111337', '115496', '18'), +('12', '96', '11', '111338', '113320', '18'), +('12', '96', '11', '111034', '101783', '18'), +('12', '97', '22', '12425', '0', '18'), +('12', '97', '22', '21807', '0', '18'), +('12', '97', '22', '39342', '0', '18'), +('12', '97', '22', '23597', '0', '18'), +('12', '97', '1', '111307', '115952', '18'), +('12', '97', '1', '111306', '115865', '18'), +('12', '97', '1', '111304', '115728', '18'), +('12', '97', '1', '111300', '114592', '18'), +('12', '97', '2', '62985', '72763', '18'), +('12', '97', '2', '94056', '72680', '18'), +('12', '97', '2', '104424', '63529', '18'), +('12', '97', '2', '54845', '46632', '18'), +('12', '97', '3', '111314', '116257', '18'), +('12', '97', '3', '111316', '114963', '18'), +('12', '97', '3', '111315', '114718', '18'), +('12', '97', '3', '111013', '102206', '18'), +('12', '97', '5', '111319', '115923', '18'), +('12', '97', '5', '111321', '115413', '18'), +('12', '97', '5', '111318', '114160', '18'), +('12', '97', '5', '111018', '101872', '18'), +('12', '97', '8', '111332', '116204', '18'), +('12', '97', '8', '111329', '115686', '18'), +('12', '97', '8', '111331', '113428', '18'), +('12', '97', '8', '111031', '102254', '18'), +('12', '97', '6', '111323', '116141', '18'), +('12', '97', '6', '111325', '115339', '18'), +('12', '97', '6', '111326', '115055', '18'), +('12', '97', '6', '111022', '102090', '18'), +('12', '97', '17', '56043', '77171', '18'), +('12', '97', '17', '56084', '75454', '18'), +('12', '97', '17', '104427', '65875', '18'), +('12', '97', '17', '54854', '49086', '18'), +('12', '97', '7', '56080', '72780', '18'), +('12', '97', '7', '56040', '72306', '18'), +('12', '97', '7', '104425', '63280', '18'), +('12', '97', '7', '49656', '46303', '18'), +('12', '97', '9', '67098', '116928', '18'), +('12', '97', '9', '56070', '70648', '18'), +('12', '97', '9', '62984', '70408', '18'), +('12', '97', '9', '56031', '70381', '18'), +('12', '97', '15', '111349', '117346', '18'), +('12', '97', '15', '111344', '116398', '18'), +('12', '97', '15', '111340', '116054', '18'), +('12', '97', '15', '111346', '115878', '18'), +('12', '97', '20', '128733', '147351', '18'), +('12', '97', '20', '111356', '116329', '18'), +('12', '97', '20', '111352', '115407', '18'), +('12', '97', '20', '111351', '114299', '18'), +('12', '97', '12', '56035', '71756', '18'), +('12', '97', '12', '56074', '71006', '18'), +('12', '97', '12', '104422', '61819', '18'), +('12', '97', '12', '49656', '46303', '18'), +('12', '97', '18', '56041', '75479', '18'), +('12', '97', '18', '62986', '74391', '18'), +('12', '97', '18', '104426', '64129', '18'), +('12', '97', '18', '54851', '46902', '18'), +('12', '97', '19', '62990', '73472', '18'), +('12', '97', '19', '81763', '73392', '18'), +('12', '97', '19', '56037', '72884', '18'), +('12', '97', '19', '56075', '72813', '18'), +('12', '97', '13', '111521', '119272', '18'), +('12', '97', '13', '111524', '113268', '18'), +('12', '97', '13', '111519', '113215', '18'), +('12', '97', '13', '111221', '105998', '18'), +('12', '97', '14', '111537', '116393', '18'), +('12', '97', '14', '111535', '114925', '18'), +('12', '97', '14', '111237', '102341', '18'), +('12', '97', '14', '111235', '100974', '18'), +('12', '97', '11', '111335', '115738', '18'), +('12', '97', '11', '111337', '115500', '18'), +('12', '97', '11', '111338', '113323', '18'), +('12', '97', '11', '111034', '101787', '18'), +('12', '98', '22', '12425', '0', '18'), +('12', '98', '22', '21807', '0', '18'), +('12', '98', '22', '39342', '0', '18'), +('12', '98', '22', '23597', '0', '18'), +('12', '98', '1', '111307', '115957', '18'), +('12', '98', '1', '111306', '115869', '18'), +('12', '98', '1', '111304', '115731', '18'), +('12', '98', '1', '111300', '114596', '18'), +('12', '98', '2', '62985', '72765', '18'), +('12', '98', '2', '94056', '72682', '18'), +('12', '98', '2', '104424', '63534', '18'), +('12', '98', '2', '54845', '46636', '18'), +('12', '98', '3', '111314', '116261', '18'), +('12', '98', '3', '111316', '114966', '18'), +('12', '98', '3', '111315', '114722', '18'), +('12', '98', '3', '111013', '102210', '18'), +('12', '98', '5', '111319', '115927', '18'), +('12', '98', '5', '111321', '115416', '18'), +('12', '98', '5', '111318', '114165', '18'), +('12', '98', '5', '111018', '101877', '18'), +('12', '98', '8', '111332', '116208', '18'), +('12', '98', '8', '111329', '115690', '18'), +('12', '98', '8', '111331', '113431', '18'), +('12', '98', '8', '111031', '102258', '18'), +('12', '98', '6', '111323', '116144', '18'), +('12', '98', '6', '111325', '115342', '18'), +('12', '98', '6', '111326', '115059', '18'), +('12', '98', '6', '111022', '102094', '18'), +('12', '98', '17', '56043', '77175', '18'), +('12', '98', '17', '56084', '75458', '18'), +('12', '98', '17', '104427', '65879', '18'), +('12', '98', '17', '54854', '49089', '18'), +('12', '98', '7', '56080', '72784', '18'), +('12', '98', '7', '56040', '72312', '18'), +('12', '98', '7', '104425', '63283', '18'), +('12', '98', '7', '49656', '46303', '18'), +('12', '98', '9', '67098', '116931', '18'), +('12', '98', '9', '56070', '70652', '18'), +('12', '98', '9', '62984', '70411', '18'), +('12', '98', '9', '56031', '70387', '18'), +('12', '98', '15', '111349', '117351', '18'), +('12', '98', '15', '111344', '116400', '18'), +('12', '98', '15', '111340', '116057', '18'), +('12', '98', '15', '111346', '115881', '18'), +('12', '98', '20', '128733', '147354', '18'), +('12', '98', '20', '111356', '116333', '18'), +('12', '98', '20', '111352', '115410', '18'), +('12', '98', '20', '111351', '114304', '18'), +('12', '98', '12', '56035', '71762', '18'), +('12', '98', '12', '56074', '71009', '18'), +('12', '98', '12', '104422', '61824', '18'), +('12', '98', '12', '49656', '46303', '18'), +('12', '98', '18', '56041', '75484', '18'), +('12', '98', '18', '62986', '74394', '18'), +('12', '98', '18', '104426', '64130', '18'), +('12', '98', '18', '54851', '46905', '18'), +('12', '98', '19', '62990', '73477', '18'), +('12', '98', '19', '81763', '73398', '18'), +('12', '98', '19', '56037', '72885', '18'), +('12', '98', '19', '56075', '72816', '18'), +('12', '98', '13', '111521', '119275', '18'), +('12', '98', '13', '111524', '113272', '18'), +('12', '98', '13', '111519', '113220', '18'), +('12', '98', '13', '111221', '106002', '18'), +('12', '98', '14', '111537', '116396', '18'), +('12', '98', '14', '111535', '114928', '18'), +('12', '98', '14', '111237', '102344', '18'), +('12', '98', '14', '111235', '100976', '18'), +('12', '98', '11', '111335', '115741', '18'), +('12', '98', '11', '111337', '115504', '18'), +('12', '98', '11', '111338', '113327', '18'), +('12', '98', '11', '111034', '101791', '18'), +('12', '99', '22', '12425', '0', '18'), +('12', '99', '22', '21807', '0', '18'), +('12', '99', '22', '39342', '0', '18'), +('12', '99', '22', '23597', '0', '18'), +('12', '99', '1', '111307', '115962', '18'), +('12', '99', '1', '111306', '115872', '18'), +('12', '99', '1', '111304', '115734', '18'), +('12', '99', '1', '111300', '114601', '18'), +('12', '99', '2', '62985', '72768', '18'), +('12', '99', '2', '94056', '72684', '18'), +('12', '99', '2', '104424', '63539', '18'), +('12', '99', '2', '54845', '46639', '18'), +('12', '99', '3', '111314', '116265', '18'), +('12', '99', '3', '111316', '114970', '18'), +('12', '99', '3', '111315', '114726', '18'), +('12', '99', '3', '111013', '102214', '18'), +('12', '99', '5', '111319', '115931', '18'), +('12', '99', '5', '111321', '115419', '18'), +('12', '99', '5', '111318', '114169', '18'), +('12', '99', '5', '111018', '101881', '18'), +('12', '99', '8', '111332', '116212', '18'), +('12', '99', '8', '111329', '115695', '18'), +('12', '99', '8', '111331', '113434', '18'), +('12', '99', '8', '111031', '102262', '18'), +('12', '99', '6', '111323', '116148', '18'), +('12', '99', '6', '111325', '115345', '18'), +('12', '99', '6', '111326', '115064', '18'), +('12', '99', '6', '111022', '102097', '18'), +('12', '99', '17', '56043', '77178', '18'), +('12', '99', '17', '56084', '75461', '18'), +('12', '99', '17', '104427', '65883', '18'), +('12', '99', '17', '54854', '49092', '18'), +('12', '99', '7', '56080', '72789', '18'), +('12', '99', '7', '56040', '72318', '18'), +('12', '99', '7', '104425', '63287', '18'), +('12', '99', '7', '49656', '46304', '18'), +('12', '99', '9', '67098', '116934', '18'), +('12', '99', '9', '56070', '70655', '18'), +('12', '99', '9', '62984', '70413', '18'), +('12', '99', '9', '56031', '70393', '18'), +('12', '99', '15', '111349', '117356', '18'), +('12', '99', '15', '111344', '116403', '18'), +('12', '99', '15', '111340', '116061', '18'), +('12', '99', '15', '111346', '115885', '18'), +('12', '99', '20', '128733', '147358', '18'), +('12', '99', '20', '111356', '116337', '18'), +('12', '99', '20', '111352', '115413', '18'), +('12', '99', '20', '111351', '114308', '18'), +('12', '99', '12', '56035', '71767', '18'), +('12', '99', '12', '56074', '71013', '18'), +('12', '99', '12', '104422', '61829', '18'), +('12', '99', '12', '49656', '46304', '18'), +('12', '99', '18', '56041', '75489', '18'), +('12', '99', '18', '62986', '74397', '18'), +('12', '99', '18', '104426', '64132', '18'), +('12', '99', '18', '54851', '46907', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '99', '19', '62990', '73482', '18'), +('12', '99', '19', '81763', '73404', '18'), +('12', '99', '19', '56037', '72887', '18'), +('12', '99', '19', '56075', '72819', '18'), +('12', '99', '13', '111521', '119278', '18'), +('12', '99', '13', '111524', '113276', '18'), +('12', '99', '13', '111519', '113224', '18'), +('12', '99', '13', '111221', '106005', '18'), +('12', '99', '14', '111537', '116399', '18'), +('12', '99', '14', '111535', '114930', '18'), +('12', '99', '14', '111237', '102347', '18'), +('12', '99', '14', '111235', '100979', '18'), +('12', '99', '11', '111335', '115745', '18'), +('12', '99', '11', '111337', '115507', '18'), +('12', '99', '11', '111338', '113331', '18'), +('12', '99', '11', '111034', '101794', '18'), +('12', '100', '22', '12425', '0', '20'), +('12', '100', '22', '21807', '0', '20'), +('12', '100', '22', '39342', '0', '20'), +('12', '100', '22', '23597', '0', '20'), +('12', '100', '1', '98769', '184284', '20'), +('12', '100', '1', '111307', '115967', '20'), +('12', '100', '1', '111306', '115875', '20'), +('12', '100', '1', '111304', '115737', '20'), +('12', '100', '2', '62985', '72770', '20'), +('12', '100', '2', '94056', '72686', '20'), +('12', '100', '2', '104424', '63544', '20'), +('12', '100', '2', '54845', '46643', '20'), +('12', '100', '3', '111314', '116269', '20'), +('12', '100', '3', '111316', '114974', '20'), +('12', '100', '3', '111315', '114730', '20'), +('12', '100', '3', '111013', '102218', '20'), +('12', '100', '5', '111319', '115936', '20'), +('12', '100', '5', '111321', '115422', '20'), +('12', '100', '5', '111318', '114174', '20'), +('12', '100', '5', '111018', '101885', '20'), +('12', '100', '8', '111332', '116216', '20'), +('12', '100', '8', '111329', '115699', '20'), +('12', '100', '8', '111331', '113438', '20'), +('12', '100', '8', '111031', '102266', '20'), +('12', '100', '6', '111323', '116151', '20'), +('12', '100', '6', '111325', '115347', '20'), +('12', '100', '6', '111326', '115069', '20'), +('12', '100', '6', '111022', '102101', '20'), +('12', '100', '17', '56043', '77182', '20'), +('12', '100', '17', '56084', '75465', '20'), +('12', '100', '17', '104427', '65887', '20'), +('12', '100', '17', '54854', '49095', '20'), +('12', '100', '7', '56080', '72793', '20'), +('12', '100', '7', '56040', '72324', '20'), +('12', '100', '7', '104425', '63290', '20'), +('12', '100', '7', '49656', '46304', '20'), +('12', '100', '9', '67098', '116936', '20'), +('12', '100', '9', '56070', '70658', '20'), +('12', '100', '9', '62984', '70416', '20'), +('12', '100', '9', '56031', '70399', '20'), +('12', '100', '15', '111349', '117361', '20'), +('12', '100', '15', '111344', '116406', '20'), +('12', '100', '15', '111340', '116064', '20'), +('12', '100', '15', '111346', '115889', '20'), +('12', '100', '20', '128733', '147362', '20'), +('12', '100', '20', '111356', '116341', '20'), +('12', '100', '20', '111352', '115416', '20'), +('12', '100', '20', '111351', '114313', '20'), +('12', '100', '12', '56035', '71773', '20'), +('12', '100', '12', '56074', '71017', '20'), +('12', '100', '12', '104422', '61834', '20'), +('12', '100', '12', '49656', '46304', '20'), +('12', '100', '18', '56041', '75494', '20'), +('12', '100', '18', '62986', '74400', '20'), +('12', '100', '18', '104426', '64133', '20'), +('12', '100', '18', '54851', '46910', '20'), +('12', '100', '19', '62990', '73486', '20'), +('12', '100', '19', '81763', '73410', '20'), +('12', '100', '19', '56037', '72889', '20'), +('12', '100', '19', '56075', '72821', '20'), +('12', '100', '13', '111521', '119282', '20'), +('12', '100', '13', '111524', '113281', '20'), +('12', '100', '13', '111519', '113229', '20'), +('12', '100', '13', '111221', '106009', '20'), +('12', '100', '14', '111537', '116402', '20'), +('12', '100', '14', '111535', '114933', '20'), +('12', '100', '14', '111237', '102351', '20'), +('12', '100', '14', '111235', '100981', '20'), +('12', '100', '11', '133816', '148871', '20'), +('12', '100', '11', '111335', '115748', '20'), +('12', '100', '11', '111337', '115511', '20'), +('12', '100', '11', '111338', '113335', '20'), +('12', '100', '22', '12425', '0', '19'), +('12', '100', '22', '21807', '0', '19'), +('12', '100', '22', '39342', '0', '19'), +('12', '100', '22', '23597', '0', '19'), +('12', '100', '1', '98769', '184284', '19'), +('12', '100', '1', '111307', '115967', '19'), +('12', '100', '1', '111306', '115875', '19'), +('12', '100', '1', '111304', '115737', '19'), +('12', '100', '2', '62985', '72770', '19'), +('12', '100', '2', '94056', '72686', '19'), +('12', '100', '2', '104424', '63544', '19'), +('12', '100', '2', '54845', '46643', '19'), +('12', '100', '3', '111314', '116269', '19'), +('12', '100', '3', '111316', '114974', '19'), +('12', '100', '3', '111315', '114730', '19'), +('12', '100', '3', '111013', '102218', '19'), +('12', '100', '5', '111319', '115936', '19'), +('12', '100', '5', '111321', '115422', '19'), +('12', '100', '5', '111318', '114174', '19'), +('12', '100', '5', '111018', '101885', '19'), +('12', '100', '8', '111332', '116216', '19'), +('12', '100', '8', '111329', '115699', '19'), +('12', '100', '8', '111331', '113438', '19'), +('12', '100', '8', '111031', '102266', '19'), +('12', '100', '6', '111323', '116151', '19'), +('12', '100', '6', '111325', '115347', '19'), +('12', '100', '6', '111326', '115069', '19'), +('12', '100', '6', '111022', '102101', '19'), +('12', '100', '17', '56043', '77182', '19'), +('12', '100', '17', '56084', '75465', '19'), +('12', '100', '17', '104427', '65887', '19'), +('12', '100', '17', '54854', '49095', '19'), +('12', '100', '7', '56080', '72793', '19'), +('12', '100', '7', '56040', '72324', '19'), +('12', '100', '7', '104425', '63290', '19'), +('12', '100', '7', '49656', '46304', '19'), +('12', '100', '9', '67098', '116936', '19'), +('12', '100', '9', '56070', '70658', '19'), +('12', '100', '9', '62984', '70416', '19'), +('12', '100', '9', '56031', '70399', '19'), +('12', '100', '15', '111349', '117361', '19'), +('12', '100', '15', '111344', '116406', '19'), +('12', '100', '15', '111340', '116064', '19'), +('12', '100', '15', '111346', '115889', '19'), +('12', '100', '20', '128733', '147362', '19'), +('12', '100', '20', '111356', '116341', '19'), +('12', '100', '20', '111352', '115416', '19'), +('12', '100', '20', '111351', '114313', '19'), +('12', '100', '12', '56035', '71773', '19'), +('12', '100', '12', '56074', '71017', '19'), +('12', '100', '12', '104422', '61834', '19'), +('12', '100', '12', '49656', '46304', '19'), +('12', '100', '18', '56041', '75494', '19'), +('12', '100', '18', '62986', '74400', '19'), +('12', '100', '18', '104426', '64133', '19'), +('12', '100', '18', '54851', '46910', '19'), +('12', '100', '19', '62990', '73486', '19'), +('12', '100', '19', '81763', '73410', '19'), +('12', '100', '19', '56037', '72889', '19'), +('12', '100', '19', '56075', '72821', '19'), +('12', '100', '13', '111521', '119281', '19'), +('12', '100', '13', '111524', '113280', '19'), +('12', '100', '13', '111519', '113229', '19'), +('12', '100', '13', '111221', '106009', '19'), +('12', '100', '14', '111537', '116402', '19'), +('12', '100', '14', '111535', '114933', '19'), +('12', '100', '14', '111237', '102351', '19'), +('12', '100', '14', '111235', '100981', '19'), +('12', '100', '11', '133816', '148871', '19'), +('12', '100', '11', '111335', '115748', '19'), +('12', '100', '11', '111337', '115511', '19'), +('12', '100', '11', '111338', '113335', '19'), +('12', '101', '22', '12425', '0', '20'), +('12', '101', '22', '21807', '0', '20'), +('12', '101', '22', '39342', '0', '20'), +('12', '101', '22', '23597', '0', '20'), +('12', '101', '1', '98769', '184286', '20'), +('12', '101', '1', '111307', '115972', '20'), +('12', '101', '1', '111306', '115879', '20'), +('12', '101', '1', '111304', '115740', '20'), +('12', '101', '2', '62985', '72772', '20'), +('12', '101', '2', '94056', '72688', '20'), +('12', '101', '2', '104424', '63549', '20'), +('12', '101', '2', '54845', '46646', '20'), +('12', '101', '3', '111314', '116273', '20'), +('12', '101', '3', '111316', '114977', '20'), +('12', '101', '3', '111315', '114734', '20'), +('12', '101', '3', '111013', '102222', '20'), +('12', '101', '5', '111319', '115940', '20'), +('12', '101', '5', '111321', '115425', '20'), +('12', '101', '5', '111318', '114178', '20'), +('12', '101', '5', '111018', '101890', '20'), +('12', '101', '8', '111332', '116221', '20'), +('12', '101', '8', '111329', '115704', '20'), +('12', '101', '8', '111331', '113441', '20'), +('12', '101', '8', '111031', '102270', '20'), +('12', '101', '6', '111323', '116155', '20'), +('12', '101', '6', '111325', '115350', '20'), +('12', '101', '6', '111326', '115073', '20'), +('12', '101', '6', '111022', '102104', '20'), +('12', '101', '17', '56043', '77185', '20'), +('12', '101', '17', '56084', '75469', '20'), +('12', '101', '17', '104427', '65890', '20'), +('12', '101', '17', '54854', '49098', '20'), +('12', '101', '7', '56080', '72797', '20'), +('12', '101', '7', '56040', '72330', '20'), +('12', '101', '7', '104425', '63293', '20'), +('12', '101', '7', '49656', '46305', '20'), +('12', '101', '9', '67098', '116939', '20'), +('12', '101', '9', '56070', '70661', '20'), +('12', '101', '9', '62984', '70419', '20'), +('12', '101', '9', '56031', '70405', '20'), +('12', '101', '15', '111349', '117365', '20'), +('12', '101', '15', '111344', '116409', '20'), +('12', '101', '15', '111340', '116068', '20'), +('12', '101', '15', '111346', '115892', '20'), +('12', '101', '20', '128733', '147365', '20'), +('12', '101', '20', '111356', '116344', '20'), +('12', '101', '20', '111352', '115420', '20'), +('12', '101', '20', '111351', '114317', '20'), +('12', '101', '12', '56035', '71779', '20'), +('12', '101', '12', '56074', '71020', '20'), +('12', '101', '12', '104422', '61838', '20'), +('12', '101', '12', '49656', '46305', '20'), +('12', '101', '18', '56041', '75499', '20'), +('12', '101', '18', '62986', '74403', '20'), +('12', '101', '18', '104426', '64134', '20'), +('12', '101', '18', '54851', '46912', '20'), +('12', '101', '19', '62990', '73491', '20'), +('12', '101', '19', '81763', '73416', '20'), +('12', '101', '19', '56037', '72890', '20'), +('12', '101', '19', '56075', '72824', '20'), +('12', '101', '13', '111521', '119285', '20'), +('12', '101', '13', '111524', '113285', '20'), +('12', '101', '13', '111519', '113234', '20'), +('12', '101', '13', '111221', '106013', '20'), +('12', '101', '14', '111537', '116405', '20'), +('12', '101', '14', '111535', '114935', '20'), +('12', '101', '14', '111237', '102354', '20'), +('12', '101', '14', '111235', '100984', '20'), +('12', '101', '11', '133816', '148873', '20'), +('12', '101', '11', '111335', '115752', '20'), +('12', '101', '11', '111337', '115515', '20'), +('12', '101', '11', '111338', '113338', '20'), +('12', '102', '22', '12425', '0', '20'), +('12', '102', '22', '21807', '0', '20'), +('12', '102', '22', '39342', '0', '20'), +('12', '102', '22', '23597', '0', '20'), +('12', '102', '1', '98769', '184289', '20'), +('12', '102', '1', '111307', '115977', '20'), +('12', '102', '1', '111306', '115882', '20'), +('12', '102', '1', '111304', '115743', '20'), +('12', '102', '2', '62985', '72775', '20'), +('12', '102', '2', '94056', '72690', '20'), +('12', '102', '2', '104424', '63554', '20'), +('12', '102', '2', '54845', '46650', '20'), +('12', '102', '3', '111314', '116277', '20'), +('12', '102', '3', '111316', '114981', '20'), +('12', '102', '3', '111315', '114737', '20'), +('12', '102', '3', '111013', '102226', '20'), +('12', '102', '5', '111319', '115944', '20'), +('12', '102', '5', '111321', '115428', '20'), +('12', '102', '5', '111318', '114183', '20'), +('12', '102', '5', '111018', '101894', '20'), +('12', '102', '8', '111332', '116225', '20'), +('12', '102', '8', '111329', '115709', '20'), +('12', '102', '8', '111331', '113444', '20'), +('12', '102', '8', '111031', '102274', '20'), +('12', '102', '6', '111323', '116158', '20'), +('12', '102', '6', '111325', '115353', '20'), +('12', '102', '6', '111326', '115078', '20'), +('12', '102', '6', '111022', '102108', '20'), +('12', '102', '17', '56043', '77188', '20'), +('12', '102', '17', '56084', '75473', '20'), +('12', '102', '17', '104427', '65894', '20'), +('12', '102', '17', '54854', '49101', '20'), +('12', '102', '7', '56080', '72802', '20'), +('12', '102', '7', '56040', '72336', '20'), +('12', '102', '7', '104425', '63297', '20'), +('12', '102', '7', '49656', '46305', '20'), +('12', '102', '9', '67098', '116942', '20'), +('12', '102', '9', '56070', '70664', '20'), +('12', '102', '9', '62984', '70422', '20'), +('12', '102', '9', '56031', '70412', '20'), +('12', '102', '15', '111349', '117370', '20'), +('12', '102', '15', '111344', '116412', '20'), +('12', '102', '15', '111340', '116071', '20'), +('12', '102', '15', '111346', '115896', '20'), +('12', '102', '20', '128733', '147369', '20'), +('12', '102', '20', '111356', '116348', '20'), +('12', '102', '20', '111352', '115423', '20'), +('12', '102', '20', '111351', '114322', '20'), +('12', '102', '12', '56035', '71784', '20'), +('12', '102', '12', '56074', '71024', '20'), +('12', '102', '12', '104422', '61843', '20'), +('12', '102', '12', '49656', '46305', '20'), +('12', '102', '18', '56041', '75504', '20'), +('12', '102', '18', '62986', '74406', '20'), +('12', '102', '18', '104426', '64135', '20'), +('12', '102', '18', '54851', '46915', '20'), +('12', '102', '19', '62990', '73495', '20'), +('12', '102', '19', '81763', '73422', '20'), +('12', '102', '19', '56037', '72892', '20'), +('12', '102', '19', '56075', '72827', '20'), +('12', '102', '13', '111521', '119289', '20'), +('12', '102', '13', '111524', '113289', '20'), +('12', '102', '13', '111519', '113239', '20'), +('12', '102', '13', '111221', '106017', '20'), +('12', '102', '14', '111537', '116408', '20'), +('12', '102', '14', '111535', '114938', '20'), +('12', '102', '14', '111237', '102357', '20'), +('12', '102', '14', '111235', '100986', '20'), +('12', '102', '11', '133816', '148876', '20'), +('12', '102', '11', '111335', '115755', '20'), +('12', '102', '11', '111337', '115519', '20'), +('12', '102', '11', '111338', '113342', '20'), +('12', '103', '22', '12425', '0', '20'), +('12', '103', '22', '21807', '0', '20'), +('12', '103', '22', '39342', '0', '20'), +('12', '103', '22', '23597', '0', '20'), +('12', '103', '1', '98769', '184292', '20'), +('12', '103', '1', '111307', '115982', '20'), +('12', '103', '1', '111306', '115885', '20'), +('12', '103', '1', '111304', '115746', '20'), +('12', '103', '2', '62985', '72777', '20'), +('12', '103', '2', '94056', '72692', '20'), +('12', '103', '2', '104424', '63559', '20'), +('12', '103', '2', '54845', '46653', '20'), +('12', '103', '3', '111314', '116281', '20'), +('12', '103', '3', '111316', '114985', '20'), +('12', '103', '3', '111315', '114741', '20'), +('12', '103', '3', '111013', '102230', '20'), +('12', '103', '5', '111319', '115949', '20'), +('12', '103', '5', '111321', '115432', '20'), +('12', '103', '5', '111318', '114187', '20'), +('12', '103', '5', '111018', '101898', '20'), +('12', '103', '8', '111332', '116229', '20'), +('12', '103', '8', '111329', '115713', '20'), +('12', '103', '8', '111331', '113447', '20'), +('12', '103', '8', '111031', '102278', '20'), +('12', '103', '6', '111323', '116162', '20'), +('12', '103', '6', '111325', '115356', '20'), +('12', '103', '6', '111326', '115083', '20'), +('12', '103', '6', '111022', '102111', '20'), +('12', '103', '17', '56043', '77192', '20'), +('12', '103', '17', '56084', '75477', '20'), +('12', '103', '17', '104427', '65898', '20'), +('12', '103', '17', '54854', '49103', '20'), +('12', '103', '7', '56080', '72806', '20'), +('12', '103', '7', '56040', '72343', '20'), +('12', '103', '7', '104425', '63300', '20'), +('12', '103', '7', '49656', '46306', '20'), +('12', '103', '9', '67098', '116944', '20'), +('12', '103', '9', '56070', '70667', '20'), +('12', '103', '9', '62984', '70425', '20'), +('12', '103', '9', '56031', '70418', '20'), +('12', '103', '15', '111349', '117375', '20'), +('12', '103', '15', '111344', '116415', '20'), +('12', '103', '15', '111340', '116074', '20'), +('12', '103', '15', '111346', '115899', '20'), +('12', '103', '20', '128733', '147372', '20'), +('12', '103', '20', '111356', '116352', '20'), +('12', '103', '20', '111352', '115426', '20'), +('12', '103', '20', '111351', '114327', '20'), +('12', '103', '12', '56035', '71790', '20'), +('12', '103', '12', '56074', '71028', '20'), +('12', '103', '12', '104422', '61848', '20'), +('12', '103', '12', '49656', '46306', '20'), +('12', '103', '18', '56041', '75509', '20'), +('12', '103', '18', '62986', '74409', '20'), +('12', '103', '18', '104426', '64137', '20'), +('12', '103', '18', '54851', '46917', '20'), +('12', '103', '19', '62990', '73500', '20'), +('12', '103', '19', '81763', '73427', '20'), +('12', '103', '19', '56037', '72893', '20'), +('12', '103', '19', '56075', '72830', '20'), +('12', '103', '13', '111521', '119292', '20'), +('12', '103', '13', '111524', '113293', '20'), +('12', '103', '13', '111519', '113243', '20'), +('12', '103', '13', '111221', '106020', '20'), +('12', '103', '14', '111537', '116412', '20'), +('12', '103', '14', '111535', '114940', '20'), +('12', '103', '14', '111237', '102360', '20'), +('12', '103', '14', '111235', '100989', '20'), +('12', '103', '11', '133816', '148878', '20'), +('12', '103', '11', '111335', '115759', '20'), +('12', '103', '11', '111337', '115522', '20'), +('12', '103', '11', '111338', '113346', '20'), +('12', '104', '22', '12425', '0', '20'), +('12', '104', '22', '21807', '0', '20'), +('12', '104', '22', '39342', '0', '20'), +('12', '104', '22', '23597', '0', '20'), +('12', '104', '1', '98769', '184294', '20'), +('12', '104', '1', '111307', '115986', '20'), +('12', '104', '1', '111306', '115889', '20'), +('12', '104', '1', '111304', '115749', '20'), +('12', '104', '2', '62985', '72779', '20'), +('12', '104', '2', '94056', '72694', '20'), +('12', '104', '2', '104424', '63563', '20'), +('12', '104', '2', '54845', '46657', '20'), +('12', '104', '3', '111314', '116285', '20'), +('12', '104', '3', '111316', '114989', '20'), +('12', '104', '3', '111315', '114745', '20'), +('12', '104', '3', '111013', '102234', '20'), +('12', '104', '5', '111319', '115953', '20'), +('12', '104', '5', '111321', '115435', '20'), +('12', '104', '5', '111318', '114192', '20'), +('12', '104', '5', '111018', '101903', '20'), +('12', '104', '8', '111332', '116233', '20'), +('12', '104', '8', '111329', '115718', '20'), +('12', '104', '8', '111331', '113451', '20'), +('12', '104', '8', '111031', '102282', '20'), +('12', '104', '6', '111323', '116165', '20'), +('12', '104', '6', '111325', '115359', '20'), +('12', '104', '6', '111326', '115087', '20'), +('12', '104', '6', '111022', '102115', '20'), +('12', '104', '17', '56043', '77195', '20'), +('12', '104', '17', '56084', '75480', '20'), +('12', '104', '17', '104427', '65902', '20'), +('12', '104', '17', '54854', '49106', '20'), +('12', '104', '7', '56080', '72810', '20'), +('12', '104', '7', '56040', '72349', '20'), +('12', '104', '7', '104425', '63303', '20'), +('12', '104', '7', '49656', '46306', '20'), +('12', '104', '9', '67098', '116947', '20'), +('12', '104', '9', '56070', '70671', '20'), +('12', '104', '9', '62984', '70428', '20'), +('12', '104', '9', '56031', '70424', '20'), +('12', '104', '15', '111349', '117380', '20'), +('12', '104', '15', '111344', '116418', '20'), +('12', '104', '15', '111340', '116078', '20'), +('12', '104', '15', '111346', '115903', '20'), +('12', '104', '20', '128733', '147376', '20'), +('12', '104', '20', '111356', '116356', '20'), +('12', '104', '20', '111352', '115429', '20'), +('12', '104', '20', '111351', '114331', '20'), +('12', '104', '12', '56035', '71796', '20'), +('12', '104', '12', '56074', '71031', '20'), +('12', '104', '12', '104422', '61853', '20'), +('12', '104', '12', '49656', '46306', '20'), +('12', '104', '18', '56041', '75515', '20'), +('12', '104', '18', '62986', '74412', '20'), +('12', '104', '18', '104426', '64138', '20'), +('12', '104', '18', '54851', '46920', '20'), +('12', '104', '19', '62990', '73504', '20'), +('12', '104', '19', '81763', '73433', '20'), +('12', '104', '19', '56037', '72895', '20'), +('12', '104', '19', '56075', '72833', '20'), +('12', '104', '13', '111521', '119295', '20'), +('12', '104', '13', '111524', '113297', '20'), +('12', '104', '13', '111519', '113248', '20'), +('12', '104', '13', '111221', '106024', '20'), +('12', '104', '14', '111537', '116415', '20'), +('12', '104', '14', '111535', '114942', '20'), +('12', '104', '14', '111237', '102363', '20'), +('12', '104', '14', '111235', '100991', '20'), +('12', '104', '11', '133816', '148881', '20'), +('12', '104', '11', '111335', '115763', '20'), +('12', '104', '11', '111337', '115526', '20'), +('12', '104', '11', '111338', '113350', '20'), +('12', '105', '22', '12425', '0', '23'), +('12', '105', '22', '21807', '0', '23'), +('12', '105', '22', '39342', '0', '23'), +('12', '105', '22', '23597', '0', '23'), +('12', '105', '1', '98769', '184297', '23'), +('12', '105', '1', '111307', '115991', '23'), +('12', '105', '1', '111306', '115892', '23'), +('12', '105', '1', '111304', '115752', '23'), +('12', '105', '2', '62985', '72782', '23'), +('12', '105', '2', '94056', '72696', '23'), +('12', '105', '2', '104424', '63568', '23'), +('12', '105', '2', '54845', '46660', '23'), +('12', '105', '3', '111314', '116289', '23'), +('12', '105', '3', '111316', '114992', '23'), +('12', '105', '3', '111315', '114749', '23'), +('12', '105', '3', '111013', '102238', '23'), +('12', '105', '5', '111319', '115958', '23'), +('12', '105', '5', '111321', '115438', '23'), +('12', '105', '5', '111318', '114196', '23'), +('12', '105', '5', '111018', '101907', '23'), +('12', '105', '8', '111332', '116237', '23'), +('12', '105', '8', '111329', '115722', '23'), +('12', '105', '8', '111331', '113454', '23'), +('12', '105', '8', '111031', '102286', '23'), +('12', '105', '6', '111323', '116169', '23'), +('12', '105', '6', '111325', '115362', '23'), +('12', '105', '6', '111326', '115092', '23'), +('12', '105', '6', '111022', '102118', '23'), +('12', '105', '17', '56043', '77198', '23'), +('12', '105', '17', '56084', '75484', '23'), +('12', '105', '17', '104427', '65905', '23'), +('12', '105', '17', '54854', '49109', '23'), +('12', '105', '7', '56080', '72815', '23'), +('12', '105', '7', '56040', '72355', '23'), +('12', '105', '7', '104425', '63307', '23'), +('12', '105', '7', '49656', '46307', '23'), +('12', '105', '9', '67098', '116949', '23'), +('12', '105', '9', '56070', '70674', '23'), +('12', '105', '9', '62984', '70431', '23'), +('12', '105', '9', '56031', '70430', '23'), +('12', '105', '15', '111349', '117385', '23'), +('12', '105', '15', '111344', '116421', '23'), +('12', '105', '15', '111340', '116081', '23'), +('12', '105', '15', '111346', '115907', '23'), +('12', '105', '20', '128733', '147380', '23'), +('12', '105', '20', '111356', '116360', '23'), +('12', '105', '20', '111352', '115433', '23'), +('12', '105', '20', '111351', '114336', '23'), +('12', '105', '12', '56035', '71802', '23'), +('12', '105', '12', '56074', '71035', '23'), +('12', '105', '12', '104422', '61857', '23'), +('12', '105', '12', '49656', '46307', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '105', '18', '56041', '75520', '23'), +('12', '105', '18', '62986', '74415', '23'), +('12', '105', '18', '104426', '64139', '23'), +('12', '105', '18', '54851', '46922', '23'), +('12', '105', '19', '62990', '73509', '23'), +('12', '105', '19', '81763', '73439', '23'), +('12', '105', '19', '56037', '72896', '23'), +('12', '105', '19', '56075', '72836', '23'), +('12', '105', '13', '111521', '119299', '23'), +('12', '105', '13', '111524', '113301', '23'), +('12', '105', '13', '111519', '113252', '23'), +('12', '105', '13', '111221', '106028', '23'), +('12', '105', '14', '111537', '116418', '23'), +('12', '105', '14', '111535', '114945', '23'), +('12', '105', '14', '111237', '102366', '23'), +('12', '105', '14', '111235', '100993', '23'), +('12', '105', '11', '133816', '148883', '23'), +('12', '105', '11', '111335', '115766', '23'), +('12', '105', '11', '111337', '115530', '23'), +('12', '105', '11', '111338', '113353', '23'), +('12', '105', '22', '12425', '0', '22'), +('12', '105', '22', '21807', '0', '22'), +('12', '105', '22', '39342', '0', '22'), +('12', '105', '22', '23597', '0', '22'), +('12', '105', '1', '98769', '184297', '22'), +('12', '105', '1', '111307', '115991', '22'), +('12', '105', '1', '111306', '115892', '22'), +('12', '105', '1', '111304', '115752', '22'), +('12', '105', '2', '62985', '72782', '22'), +('12', '105', '2', '94056', '72696', '22'), +('12', '105', '2', '104424', '63568', '22'), +('12', '105', '2', '54845', '46660', '22'), +('12', '105', '3', '111314', '116289', '22'), +('12', '105', '3', '111316', '114992', '22'), +('12', '105', '3', '111315', '114749', '22'), +('12', '105', '3', '111013', '102238', '22'), +('12', '105', '5', '111319', '115958', '22'), +('12', '105', '5', '111321', '115438', '22'), +('12', '105', '5', '111318', '114196', '22'), +('12', '105', '5', '111018', '101907', '22'), +('12', '105', '8', '111332', '116237', '22'), +('12', '105', '8', '111329', '115722', '22'), +('12', '105', '8', '111331', '113454', '22'), +('12', '105', '8', '111031', '102286', '22'), +('12', '105', '6', '111323', '116169', '22'), +('12', '105', '6', '111325', '115362', '22'), +('12', '105', '6', '111326', '115092', '22'), +('12', '105', '6', '111022', '102118', '22'), +('12', '105', '17', '56043', '77198', '22'), +('12', '105', '17', '56084', '75484', '22'), +('12', '105', '17', '104427', '65905', '22'), +('12', '105', '17', '54854', '49109', '22'), +('12', '105', '7', '56080', '72815', '22'), +('12', '105', '7', '56040', '72355', '22'), +('12', '105', '7', '104425', '63307', '22'), +('12', '105', '7', '49656', '46307', '22'), +('12', '105', '9', '67098', '116949', '22'), +('12', '105', '9', '56070', '70674', '22'), +('12', '105', '9', '62984', '70431', '22'), +('12', '105', '9', '56031', '70430', '22'), +('12', '105', '15', '111349', '117385', '22'), +('12', '105', '15', '111344', '116421', '22'), +('12', '105', '15', '111340', '116081', '22'), +('12', '105', '15', '111346', '115907', '22'), +('12', '105', '20', '128733', '147380', '22'), +('12', '105', '20', '111356', '116360', '22'), +('12', '105', '20', '111352', '115433', '22'), +('12', '105', '20', '111351', '114336', '22'), +('12', '105', '12', '56035', '71802', '22'), +('12', '105', '12', '56074', '71035', '22'), +('12', '105', '12', '104422', '61857', '22'), +('12', '105', '12', '49656', '46307', '22'), +('12', '105', '18', '56041', '75520', '22'), +('12', '105', '18', '62986', '74415', '22'), +('12', '105', '18', '104426', '64139', '22'), +('12', '105', '18', '54851', '46922', '22'), +('12', '105', '19', '62990', '73509', '22'), +('12', '105', '19', '81763', '73439', '22'), +('12', '105', '19', '56037', '72896', '22'), +('12', '105', '19', '56075', '72836', '22'), +('12', '105', '13', '111521', '119299', '22'), +('12', '105', '13', '111524', '113301', '22'), +('12', '105', '13', '111519', '113252', '22'), +('12', '105', '13', '111221', '106028', '22'), +('12', '105', '14', '111537', '116418', '22'), +('12', '105', '14', '111535', '114945', '22'), +('12', '105', '14', '111237', '102366', '22'), +('12', '105', '14', '111235', '100993', '22'), +('12', '105', '11', '133816', '148883', '22'), +('12', '105', '11', '111335', '115766', '22'), +('12', '105', '11', '111337', '115530', '22'), +('12', '105', '11', '111338', '113353', '22'), +('12', '105', '22', '12425', '0', '21'), +('12', '105', '22', '21807', '0', '21'), +('12', '105', '22', '39342', '0', '21'), +('12', '105', '22', '23597', '0', '21'), +('12', '105', '1', '98769', '184297', '21'), +('12', '105', '1', '111307', '115991', '21'), +('12', '105', '1', '111306', '115892', '21'), +('12', '105', '1', '111304', '115752', '21'), +('12', '105', '2', '62985', '72782', '21'), +('12', '105', '2', '94056', '72696', '21'), +('12', '105', '2', '104424', '63568', '21'), +('12', '105', '2', '54845', '46660', '21'), +('12', '105', '3', '111314', '116289', '21'), +('12', '105', '3', '111316', '114992', '21'), +('12', '105', '3', '111315', '114749', '21'), +('12', '105', '3', '111013', '102238', '21'), +('12', '105', '5', '111319', '115958', '21'), +('12', '105', '5', '111321', '115438', '21'), +('12', '105', '5', '111318', '114196', '21'), +('12', '105', '5', '111018', '101907', '21'), +('12', '105', '8', '111332', '116237', '21'), +('12', '105', '8', '111329', '115722', '21'), +('12', '105', '8', '111331', '113454', '21'), +('12', '105', '8', '111031', '102286', '21'), +('12', '105', '6', '111323', '116169', '21'), +('12', '105', '6', '111325', '115362', '21'), +('12', '105', '6', '111326', '115092', '21'), +('12', '105', '6', '111022', '102118', '21'), +('12', '105', '17', '56043', '77198', '21'), +('12', '105', '17', '56084', '75484', '21'), +('12', '105', '17', '104427', '65905', '21'), +('12', '105', '17', '54854', '49109', '21'), +('12', '105', '7', '56080', '72815', '21'), +('12', '105', '7', '56040', '72355', '21'), +('12', '105', '7', '104425', '63307', '21'), +('12', '105', '7', '49656', '46307', '21'), +('12', '105', '9', '67098', '116949', '21'), +('12', '105', '9', '56070', '70674', '21'), +('12', '105', '9', '62984', '70431', '21'), +('12', '105', '9', '56031', '70430', '21'), +('12', '105', '15', '111349', '117385', '21'), +('12', '105', '15', '111344', '116421', '21'), +('12', '105', '15', '111340', '116081', '21'), +('12', '105', '15', '111346', '115907', '21'), +('12', '105', '20', '128733', '147380', '21'), +('12', '105', '20', '111356', '116360', '21'), +('12', '105', '20', '111352', '115433', '21'), +('12', '105', '20', '111351', '114336', '21'), +('12', '105', '12', '56035', '71802', '21'), +('12', '105', '12', '56074', '71035', '21'), +('12', '105', '12', '104422', '61857', '21'), +('12', '105', '12', '49656', '46307', '21'), +('12', '105', '18', '56041', '75520', '21'), +('12', '105', '18', '62986', '74415', '21'), +('12', '105', '18', '104426', '64139', '21'), +('12', '105', '18', '54851', '46922', '21'), +('12', '105', '19', '62990', '73509', '21'), +('12', '105', '19', '81763', '73439', '21'), +('12', '105', '19', '56037', '72896', '21'), +('12', '105', '19', '56075', '72836', '21'), +('12', '105', '13', '111521', '119299', '21'), +('12', '105', '13', '111524', '113301', '21'), +('12', '105', '13', '111519', '113252', '21'), +('12', '105', '13', '111221', '106028', '21'), +('12', '105', '14', '111537', '116418', '21'), +('12', '105', '14', '111535', '114945', '21'), +('12', '105', '14', '111237', '102366', '21'), +('12', '105', '14', '111235', '100993', '21'), +('12', '105', '11', '133816', '148883', '21'), +('12', '105', '11', '111335', '115766', '21'), +('12', '105', '11', '111337', '115530', '21'), +('12', '105', '11', '111338', '113353', '21'), +('12', '106', '22', '12425', '0', '23'), +('12', '106', '22', '21807', '0', '23'), +('12', '106', '22', '39342', '0', '23'), +('12', '106', '22', '23597', '0', '23'), +('12', '106', '1', '98769', '184299', '23'), +('12', '106', '1', '111307', '115996', '23'), +('12', '106', '1', '111306', '115895', '23'), +('12', '106', '1', '111304', '115755', '23'), +('12', '106', '2', '62985', '72784', '23'), +('12', '106', '2', '94056', '72698', '23'), +('12', '106', '2', '104424', '63573', '23'), +('12', '106', '2', '54845', '46664', '23'), +('12', '106', '3', '111314', '116293', '23'), +('12', '106', '3', '111316', '114996', '23'), +('12', '106', '3', '111315', '114752', '23'), +('12', '106', '3', '111013', '102242', '23'), +('12', '106', '5', '111319', '115962', '23'), +('12', '106', '5', '111321', '115441', '23'), +('12', '106', '5', '111318', '114201', '23'), +('12', '106', '5', '111018', '101911', '23'), +('12', '106', '8', '111332', '116241', '23'), +('12', '106', '8', '111329', '115727', '23'), +('12', '106', '8', '111331', '113457', '23'), +('12', '106', '8', '111031', '102290', '23'), +('12', '106', '6', '111323', '116172', '23'), +('12', '106', '6', '111325', '115365', '23'), +('12', '106', '6', '111326', '115097', '23'), +('12', '106', '6', '111022', '102122', '23'), +('12', '106', '17', '56043', '77202', '23'), +('12', '106', '17', '56084', '75488', '23'), +('12', '106', '17', '104427', '65909', '23'), +('12', '106', '17', '54854', '49112', '23'), +('12', '106', '7', '56080', '72819', '23'), +('12', '106', '7', '56040', '72361', '23'), +('12', '106', '7', '104425', '63310', '23'), +('12', '106', '7', '49656', '46307', '23'), +('12', '106', '9', '67098', '116952', '23'), +('12', '106', '9', '56070', '70677', '23'), +('12', '106', '9', '56031', '70436', '23'), +('12', '106', '9', '62984', '70434', '23'), +('12', '106', '15', '111349', '117390', '23'), +('12', '106', '15', '111344', '116423', '23'), +('12', '106', '15', '111340', '116084', '23'), +('12', '106', '15', '111346', '115910', '23'), +('12', '106', '20', '128733', '147383', '23'), +('12', '106', '20', '111356', '116363', '23'), +('12', '106', '20', '111352', '115436', '23'), +('12', '106', '20', '111351', '114340', '23'), +('12', '106', '12', '56035', '71807', '23'), +('12', '106', '12', '56074', '71039', '23'), +('12', '106', '12', '104422', '61862', '23'), +('12', '106', '12', '49656', '46307', '23'), +('12', '106', '18', '56041', '75525', '23'), +('12', '106', '18', '62986', '74418', '23'), +('12', '106', '18', '104426', '64140', '23'), +('12', '106', '18', '54851', '46925', '23'), +('12', '106', '19', '62990', '73513', '23'), +('12', '106', '19', '81763', '73445', '23'), +('12', '106', '19', '56037', '72898', '23'), +('12', '106', '19', '56075', '72839', '23'), +('12', '106', '13', '111521', '119302', '23'), +('12', '106', '13', '111524', '113305', '23'), +('12', '106', '13', '111519', '113257', '23'), +('12', '106', '13', '111221', '106031', '23'), +('12', '106', '14', '111537', '116421', '23'), +('12', '106', '14', '111535', '114947', '23'), +('12', '106', '14', '111237', '102369', '23'), +('12', '106', '14', '111235', '100996', '23'), +('12', '106', '11', '133816', '148886', '23'), +('12', '106', '11', '111335', '115770', '23'), +('12', '106', '11', '111337', '115533', '23'), +('12', '106', '11', '111338', '113357', '23'), +('12', '107', '22', '12425', '0', '23'), +('12', '107', '22', '21807', '0', '23'), +('12', '107', '22', '39342', '0', '23'), +('12', '107', '22', '23597', '0', '23'), +('12', '107', '1', '98769', '184302', '23'), +('12', '107', '1', '111307', '116001', '23'), +('12', '107', '1', '111306', '115899', '23'), +('12', '107', '1', '111304', '115758', '23'), +('12', '107', '2', '62985', '72786', '23'), +('12', '107', '2', '94056', '72700', '23'), +('12', '107', '2', '104424', '63578', '23'), +('12', '107', '2', '54845', '46668', '23'), +('12', '107', '3', '111314', '116297', '23'), +('12', '107', '3', '111316', '115000', '23'), +('12', '107', '3', '111315', '114756', '23'), +('12', '107', '3', '111013', '102246', '23'), +('12', '107', '5', '111319', '115966', '23'), +('12', '107', '5', '111321', '115444', '23'), +('12', '107', '5', '111318', '114205', '23'), +('12', '107', '5', '111018', '101916', '23'), +('12', '107', '8', '111332', '116245', '23'), +('12', '107', '8', '111329', '115731', '23'), +('12', '107', '8', '111331', '113460', '23'), +('12', '107', '8', '111031', '102294', '23'), +('12', '107', '6', '111323', '116176', '23'), +('12', '107', '6', '111325', '115368', '23'), +('12', '107', '6', '111326', '115101', '23'), +('12', '107', '6', '111022', '102125', '23'), +('12', '107', '17', '56043', '77205', '23'), +('12', '107', '17', '56084', '75492', '23'), +('12', '107', '17', '104427', '65913', '23'), +('12', '107', '17', '54854', '49115', '23'), +('12', '107', '7', '56080', '72823', '23'), +('12', '107', '7', '56040', '72367', '23'), +('12', '107', '7', '104425', '63313', '23'), +('12', '107', '7', '49656', '46308', '23'), +('12', '107', '9', '67098', '116955', '23'), +('12', '107', '9', '56070', '70680', '23'), +('12', '107', '9', '56031', '70442', '23'), +('12', '107', '9', '62984', '70437', '23'), +('12', '107', '15', '111349', '117395', '23'), +('12', '107', '15', '111344', '116426', '23'), +('12', '107', '15', '111340', '116088', '23'), +('12', '107', '15', '111346', '115914', '23'), +('12', '107', '20', '128733', '147387', '23'), +('12', '107', '20', '111356', '116367', '23'), +('12', '107', '20', '111352', '115439', '23'), +('12', '107', '20', '111351', '114345', '23'), +('12', '107', '12', '56035', '71813', '23'), +('12', '107', '12', '56074', '71042', '23'), +('12', '107', '12', '104422', '61867', '23'), +('12', '107', '12', '49656', '46308', '23'), +('12', '107', '18', '56041', '75530', '23'), +('12', '107', '18', '62986', '74421', '23'), +('12', '107', '18', '104426', '64142', '23'), +('12', '107', '18', '54851', '46927', '23'), +('12', '107', '19', '62990', '73518', '23'), +('12', '107', '19', '81763', '73451', '23'), +('12', '107', '19', '56037', '72899', '23'), +('12', '107', '19', '56075', '72842', '23'), +('12', '107', '13', '111521', '119305', '23'), +('12', '107', '13', '111524', '113309', '23'), +('12', '107', '13', '111519', '113261', '23'), +('12', '107', '13', '111221', '106035', '23'), +('12', '107', '14', '111537', '116424', '23'), +('12', '107', '14', '111535', '114950', '23'), +('12', '107', '14', '111237', '102373', '23'), +('12', '107', '14', '111235', '100998', '23'), +('12', '107', '11', '133816', '148888', '23'), +('12', '107', '11', '111335', '115773', '23'), +('12', '107', '11', '111337', '115537', '23'), +('12', '107', '11', '111338', '113361', '23'), +('12', '108', '22', '12425', '0', '23'), +('12', '108', '22', '21807', '0', '23'), +('12', '108', '22', '39342', '0', '23'), +('12', '108', '22', '23597', '0', '23'), +('12', '108', '1', '98769', '184305', '23'), +('12', '108', '1', '111307', '116006', '23'), +('12', '108', '1', '111306', '115902', '23'), +('12', '108', '1', '111304', '115761', '23'), +('12', '108', '2', '62985', '72789', '23'), +('12', '108', '2', '94056', '72702', '23'), +('12', '108', '2', '104424', '63583', '23'), +('12', '108', '2', '54845', '46671', '23'), +('12', '108', '3', '111314', '116301', '23'), +('12', '108', '3', '111316', '115003', '23'), +('12', '108', '3', '111315', '114760', '23'), +('12', '108', '3', '111013', '102250', '23'), +('12', '108', '5', '111319', '115971', '23'), +('12', '108', '5', '111321', '115447', '23'), +('12', '108', '5', '111318', '114210', '23'), +('12', '108', '5', '111018', '101920', '23'), +('12', '108', '8', '111332', '116249', '23'), +('12', '108', '8', '111329', '115736', '23'), +('12', '108', '8', '111331', '113464', '23'), +('12', '108', '8', '111031', '102298', '23'), +('12', '108', '6', '111323', '116179', '23'), +('12', '108', '6', '111325', '115370', '23'), +('12', '108', '6', '111326', '115106', '23'), +('12', '108', '6', '111022', '102129', '23'), +('12', '108', '17', '56043', '77209', '23'), +('12', '108', '17', '56084', '75495', '23'), +('12', '108', '17', '104427', '65917', '23'), +('12', '108', '17', '54854', '49118', '23'), +('12', '108', '7', '56080', '72828', '23'), +('12', '108', '7', '56040', '72373', '23'), +('12', '108', '7', '104425', '63317', '23'), +('12', '108', '7', '49656', '46308', '23'), +('12', '108', '9', '67098', '116957', '23'), +('12', '108', '9', '56070', '70683', '23'), +('12', '108', '9', '56031', '70448', '23'), +('12', '108', '9', '62984', '70440', '23'), +('12', '108', '15', '111349', '117400', '23'), +('12', '108', '15', '111344', '116429', '23'), +('12', '108', '15', '111340', '116091', '23'), +('12', '108', '15', '111346', '115917', '23'), +('12', '108', '20', '128733', '147390', '23'), +('12', '108', '20', '111356', '116371', '23'), +('12', '108', '20', '111352', '115442', '23'), +('12', '108', '20', '111351', '114349', '23'), +('12', '108', '12', '56035', '71819', '23'), +('12', '108', '12', '56074', '71046', '23'), +('12', '108', '12', '104422', '61872', '23'), +('12', '108', '12', '49656', '46308', '23'), +('12', '108', '18', '56041', '75535', '23'), +('12', '108', '18', '62986', '74425', '23'), +('12', '108', '18', '104426', '64143', '23'), +('12', '108', '18', '54851', '46930', '23'), +('12', '108', '19', '62990', '73523', '23'), +('12', '108', '19', '81763', '73457', '23'), +('12', '108', '19', '56037', '72901', '23'), +('12', '108', '19', '56075', '72844', '23'), +('12', '108', '13', '111521', '119308', '23'), +('12', '108', '13', '111524', '113313', '23'), +('12', '108', '13', '111519', '113266', '23'), +('12', '108', '13', '111221', '106039', '23'), +('12', '108', '14', '111537', '116427', '23'), +('12', '108', '14', '111535', '114952', '23'), +('12', '108', '14', '111237', '102376', '23'), +('12', '108', '14', '111235', '101001', '23'), +('12', '108', '11', '133816', '148891', '23'), +('12', '108', '11', '111335', '115777', '23'), +('12', '108', '11', '111337', '115541', '23'), +('12', '108', '11', '111338', '113365', '23'), +('12', '109', '22', '12425', '0', '23'), +('12', '109', '22', '21807', '0', '23'), +('12', '109', '22', '39342', '0', '23'), +('12', '109', '22', '23597', '0', '23'), +('12', '109', '1', '98769', '184307', '23'), +('12', '109', '1', '111307', '116011', '23'), +('12', '109', '1', '111306', '115905', '23'), +('12', '109', '1', '111304', '115764', '23'), +('12', '109', '2', '62985', '72791', '23'), +('12', '109', '2', '94056', '72705', '23'), +('12', '109', '2', '104424', '63588', '23'), +('12', '109', '2', '54845', '46675', '23'), +('12', '109', '3', '111314', '116305', '23'), +('12', '109', '3', '111316', '115007', '23'), +('12', '109', '3', '111315', '114764', '23'), +('12', '109', '3', '111013', '102254', '23'), +('12', '109', '5', '111319', '115975', '23'), +('12', '109', '5', '111321', '115450', '23'), +('12', '109', '5', '111318', '114215', '23'), +('12', '109', '5', '111018', '101924', '23'), +('12', '109', '8', '111332', '116253', '23'), +('12', '109', '8', '111329', '115741', '23'), +('12', '109', '8', '111331', '113467', '23'), +('12', '109', '8', '111031', '102302', '23'), +('12', '109', '6', '111323', '116183', '23'), +('12', '109', '6', '111325', '115373', '23'), +('12', '109', '6', '111326', '115111', '23'), +('12', '109', '6', '111022', '102132', '23'), +('12', '109', '17', '56043', '77212', '23'), +('12', '109', '17', '56084', '75499', '23'), +('12', '109', '17', '104427', '65920', '23'), +('12', '109', '17', '54854', '49121', '23'), +('12', '109', '7', '56080', '72832', '23'), +('12', '109', '7', '56040', '72379', '23'), +('12', '109', '7', '104425', '63320', '23'), +('12', '109', '7', '49656', '46309', '23'), +('12', '109', '9', '67098', '116960', '23'), +('12', '109', '9', '56070', '70687', '23'), +('12', '109', '9', '56031', '70454', '23'), +('12', '109', '9', '62984', '70443', '23'), +('12', '109', '15', '111349', '117405', '23'), +('12', '109', '15', '111344', '116432', '23'), +('12', '109', '15', '111340', '116094', '23'), +('12', '109', '15', '111346', '115921', '23'), +('12', '109', '20', '128733', '147394', '23'), +('12', '109', '20', '111356', '116375', '23'), +('12', '109', '20', '111352', '115446', '23'), +('12', '109', '20', '111351', '114354', '23'), +('12', '109', '12', '56035', '71824', '23'), +('12', '109', '12', '56074', '71050', '23'), +('12', '109', '12', '104422', '61877', '23'), +('12', '109', '12', '49656', '46309', '23'), +('12', '109', '18', '56041', '75540', '23'), +('12', '109', '18', '62986', '74428', '23'), +('12', '109', '18', '104426', '64144', '23'), +('12', '109', '18', '54851', '46932', '23'), +('12', '109', '19', '62990', '73527', '23'), +('12', '109', '19', '81763', '73463', '23'), +('12', '109', '19', '56037', '72903', '23'), +('12', '109', '19', '56075', '72847', '23'), +('12', '109', '13', '111521', '119312', '23'), +('12', '109', '13', '111524', '113317', '23'), +('12', '109', '13', '111519', '113270', '23'), +('12', '109', '13', '111221', '106042', '23'), +('12', '109', '14', '111537', '116430', '23'), +('12', '109', '14', '111535', '114955', '23'), +('12', '109', '14', '111237', '102379', '23'), +('12', '109', '14', '111235', '101003', '23'), +('12', '109', '11', '133816', '148893', '23'), +('12', '109', '11', '111335', '115781', '23'), +('12', '109', '11', '111337', '115545', '23'), +('12', '109', '11', '111338', '113368', '23'), +('12', '110', '22', '12425', '0', '25'), +('12', '110', '22', '39342', '0', '25'), +('12', '110', '22', '7867', '0', '25'), +('12', '110', '22', '53550', '0', '25'), +('12', '110', '1', '98769', '184310', '25'), +('12', '110', '1', '111307', '116016', '25'), +('12', '110', '1', '111306', '115909', '25'), +('12', '110', '1', '111304', '115766', '25'), +('12', '110', '2', '62985', '72793', '25'), +('12', '110', '2', '94056', '72707', '25'), +('12', '110', '2', '104424', '63593', '25'), +('12', '110', '2', '54845', '46678', '25'), +('12', '110', '3', '111314', '116309', '25'), +('12', '110', '3', '111316', '115011', '25'), +('12', '110', '3', '111315', '114768', '25'), +('12', '110', '3', '111013', '102258', '25'), +('12', '110', '5', '111319', '115979', '25'), +('12', '110', '5', '111321', '115453', '25'), +('12', '110', '5', '111318', '114219', '25'), +('12', '110', '5', '111018', '101929', '25'), +('12', '110', '8', '111332', '116257', '25'), +('12', '110', '8', '111329', '115745', '25'), +('12', '110', '8', '111331', '113470', '25'), +('12', '110', '8', '111031', '102306', '25'), +('12', '110', '6', '111323', '116186', '25'), +('12', '110', '6', '111325', '115376', '25'), +('12', '110', '6', '111326', '115116', '25'), +('12', '110', '6', '111022', '102136', '25'), +('12', '110', '17', '56043', '77215', '25'), +('12', '110', '17', '56084', '75503', '25'), +('12', '110', '17', '104427', '65924', '25'), +('12', '110', '17', '54854', '49123', '25'), +('12', '110', '7', '56080', '72836', '25'), +('12', '110', '7', '56040', '72386', '25'), +('12', '110', '7', '104425', '63323', '25'), +('12', '110', '7', '49656', '46309', '25'), +('12', '110', '9', '67098', '116963', '25'), +('12', '110', '9', '56070', '70690', '25'), +('12', '110', '9', '56031', '70460', '25'), +('12', '110', '9', '62984', '70446', '25'), +('12', '110', '15', '111349', '117410', '25'), +('12', '110', '15', '111344', '116435', '25'), +('12', '110', '15', '111340', '116098', '25'), +('12', '110', '15', '111346', '115924', '25'), +('12', '110', '20', '128733', '147398', '25'), +('12', '110', '20', '111356', '116379', '25'), +('12', '110', '20', '111352', '115449', '25'), +('12', '110', '20', '111351', '114358', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('12', '110', '12', '56035', '71830', '25'), +('12', '110', '12', '56074', '71053', '25'), +('12', '110', '12', '104422', '61881', '25'), +('12', '110', '12', '49656', '46309', '25'), +('12', '110', '18', '56041', '75545', '25'), +('12', '110', '18', '62986', '74431', '25'), +('12', '110', '18', '104426', '64145', '25'), +('12', '110', '18', '54851', '46935', '25'), +('12', '110', '19', '62990', '73532', '25'), +('12', '110', '19', '81763', '73469', '25'), +('12', '110', '19', '56037', '72904', '25'), +('12', '110', '19', '56075', '72850', '25'), +('12', '110', '13', '111521', '119316', '25'), +('12', '110', '13', '111524', '113322', '25'), +('12', '110', '13', '111519', '113275', '25'), +('12', '110', '13', '111221', '106046', '25'), +('12', '110', '14', '111537', '116433', '25'), +('12', '110', '14', '111535', '114957', '25'), +('12', '110', '14', '111237', '102382', '25'), +('12', '110', '14', '111235', '101006', '25'), +('12', '110', '11', '85213', '166671', '25'), +('12', '110', '11', '133816', '148896', '25'), +('12', '110', '11', '111335', '115784', '25'), +('12', '110', '11', '111337', '115548', '25'), +('12', '110', '22', '12425', '0', '24'), +('12', '110', '22', '39342', '0', '24'), +('12', '110', '22', '7867', '0', '24'), +('12', '110', '22', '53550', '0', '24'), +('12', '110', '1', '98769', '184310', '24'), +('12', '110', '1', '111307', '116016', '24'), +('12', '110', '1', '111306', '115909', '24'), +('12', '110', '1', '111304', '115766', '24'), +('12', '110', '2', '62985', '72793', '24'), +('12', '110', '2', '94056', '72707', '24'), +('12', '110', '2', '104424', '63593', '24'), +('12', '110', '2', '54845', '46678', '24'), +('12', '110', '3', '111314', '116309', '24'), +('12', '110', '3', '111316', '115011', '24'), +('12', '110', '3', '111315', '114768', '24'), +('12', '110', '3', '111013', '102258', '24'), +('12', '110', '5', '111319', '115979', '24'), +('12', '110', '5', '111321', '115453', '24'), +('12', '110', '5', '111318', '114219', '24'), +('12', '110', '5', '111018', '101929', '24'), +('12', '110', '8', '111332', '116257', '24'), +('12', '110', '8', '111329', '115745', '24'), +('12', '110', '8', '111331', '113470', '24'), +('12', '110', '8', '111031', '102306', '24'), +('12', '110', '6', '111323', '116186', '24'), +('12', '110', '6', '111325', '115376', '24'), +('12', '110', '6', '111326', '115116', '24'), +('12', '110', '6', '111022', '102136', '24'), +('12', '110', '17', '56043', '77215', '24'), +('12', '110', '17', '56084', '75503', '24'), +('12', '110', '17', '104427', '65924', '24'), +('12', '110', '17', '54854', '49123', '24'), +('12', '110', '7', '56080', '72836', '24'), +('12', '110', '7', '56040', '72386', '24'), +('12', '110', '7', '104425', '63323', '24'), +('12', '110', '7', '49656', '46309', '24'), +('12', '110', '9', '67098', '116963', '24'), +('12', '110', '9', '56070', '70690', '24'), +('12', '110', '9', '56031', '70460', '24'), +('12', '110', '9', '62984', '70446', '24'), +('12', '110', '15', '111349', '117410', '24'), +('12', '110', '15', '111344', '116435', '24'), +('12', '110', '15', '111340', '116098', '24'), +('12', '110', '15', '111346', '115924', '24'), +('12', '110', '20', '128733', '147398', '24'), +('12', '110', '20', '111356', '116379', '24'), +('12', '110', '20', '111352', '115449', '24'), +('12', '110', '20', '111351', '114358', '24'), +('12', '110', '12', '56035', '71830', '24'), +('12', '110', '12', '56074', '71053', '24'), +('12', '110', '12', '104422', '61881', '24'), +('12', '110', '12', '49656', '46309', '24'), +('12', '110', '18', '56041', '75545', '24'), +('12', '110', '18', '62986', '74431', '24'), +('12', '110', '18', '104426', '64145', '24'), +('12', '110', '18', '54851', '46935', '24'), +('12', '110', '19', '62990', '73532', '24'), +('12', '110', '19', '81763', '73469', '24'), +('12', '110', '19', '56037', '72904', '24'), +('12', '110', '19', '56075', '72850', '24'), +('12', '110', '13', '111521', '119316', '24'), +('12', '110', '13', '111524', '113322', '24'), +('12', '110', '13', '111519', '113275', '24'), +('12', '110', '13', '111221', '106046', '24'), +('12', '110', '14', '111537', '116433', '24'), +('12', '110', '14', '111535', '114957', '24'), +('12', '110', '14', '111237', '102382', '24'), +('12', '110', '14', '111235', '101006', '24'), +('12', '110', '11', '85213', '166671', '24'), +('12', '110', '11', '133816', '148896', '24'), +('12', '110', '11', '111335', '115784', '24'), +('12', '110', '11', '111337', '115548', '24'), +('12', '111', '22', '12425', '0', '25'), +('12', '111', '22', '39342', '0', '25'), +('12', '111', '22', '7867', '0', '25'), +('12', '111', '22', '53550', '0', '25'), +('12', '111', '1', '98769', '184312', '25'), +('12', '111', '1', '111307', '116021', '25'), +('12', '111', '1', '111306', '115912', '25'), +('12', '111', '1', '111304', '115769', '25'), +('12', '111', '2', '62985', '72796', '25'), +('12', '111', '2', '94056', '72709', '25'), +('12', '111', '2', '104424', '63597', '25'), +('12', '111', '2', '54845', '46682', '25'), +('12', '111', '3', '111314', '116313', '25'), +('12', '111', '3', '111316', '115015', '25'), +('12', '111', '3', '111315', '114771', '25'), +('12', '111', '3', '111013', '102262', '25'), +('12', '111', '5', '111319', '115984', '25'), +('12', '111', '5', '111321', '115457', '25'), +('12', '111', '5', '111318', '114224', '25'), +('12', '111', '5', '111018', '101933', '25'), +('12', '111', '8', '111332', '116261', '25'), +('12', '111', '8', '111329', '115750', '25'), +('12', '111', '8', '111331', '113473', '25'), +('12', '111', '8', '111031', '102310', '25'), +('12', '111', '6', '111323', '116190', '25'), +('12', '111', '6', '111325', '115379', '25'), +('12', '111', '6', '111326', '115120', '25'), +('12', '111', '6', '111022', '102139', '25'), +('12', '111', '17', '56043', '77219', '25'), +('12', '111', '17', '56084', '75507', '25'), +('12', '111', '17', '104427', '65928', '25'), +('12', '111', '17', '54854', '49126', '25'), +('12', '111', '7', '56080', '72841', '25'), +('12', '111', '7', '56040', '72392', '25'), +('12', '111', '7', '104425', '63327', '25'), +('12', '111', '7', '49656', '46310', '25'), +('12', '111', '9', '67098', '116965', '25'), +('12', '111', '9', '56070', '70693', '25'), +('12', '111', '9', '56031', '70466', '25'), +('12', '111', '9', '62984', '70449', '25'), +('12', '111', '15', '111349', '117415', '25'), +('12', '111', '15', '111344', '116438', '25'), +('12', '111', '15', '111340', '116101', '25'), +('12', '111', '15', '111346', '115928', '25'), +('12', '111', '20', '128733', '147401', '25'), +('12', '111', '20', '111356', '116382', '25'), +('12', '111', '20', '111352', '115452', '25'), +('12', '111', '20', '111351', '114363', '25'), +('12', '111', '12', '56035', '71836', '25'), +('12', '111', '12', '56074', '71057', '25'), +('12', '111', '12', '104422', '61886', '25'), +('12', '111', '12', '49656', '46310', '25'), +('12', '111', '18', '56041', '75550', '25'), +('12', '111', '18', '62986', '74434', '25'), +('12', '111', '18', '104426', '64147', '25'), +('12', '111', '18', '54851', '46937', '25'), +('12', '111', '19', '62990', '73536', '25'), +('12', '111', '19', '81763', '73475', '25'), +('12', '111', '19', '56037', '72906', '25'), +('12', '111', '19', '56075', '72853', '25'), +('12', '111', '13', '111521', '119319', '25'), +('12', '111', '13', '111524', '113326', '25'), +('12', '111', '13', '111519', '113280', '25'), +('12', '111', '13', '111221', '106050', '25'), +('12', '111', '14', '111537', '116437', '25'), +('12', '111', '14', '111535', '114959', '25'), +('12', '111', '14', '111237', '102385', '25'), +('12', '111', '14', '111235', '101008', '25'), +('12', '111', '11', '85213', '166674', '25'), +('12', '111', '11', '133816', '148898', '25'), +('12', '111', '11', '111335', '115788', '25'), +('12', '111', '11', '111337', '115552', '25'), +('12', '112', '22', '12425', '0', '25'), +('12', '112', '22', '39342', '0', '25'), +('12', '112', '22', '7867', '0', '25'), +('12', '112', '22', '53550', '0', '25'), +('12', '112', '1', '98769', '184315', '25'), +('12', '112', '1', '111307', '116026', '25'), +('12', '112', '1', '111306', '115916', '25'), +('12', '112', '1', '111304', '115772', '25'), +('12', '112', '2', '62985', '72798', '25'), +('12', '112', '2', '94056', '72711', '25'), +('12', '112', '2', '104424', '63602', '25'), +('12', '112', '2', '54845', '46685', '25'), +('12', '112', '3', '111314', '116317', '25'), +('12', '112', '3', '111316', '115018', '25'), +('12', '112', '3', '111315', '114775', '25'), +('12', '112', '3', '111013', '102266', '25'), +('12', '112', '5', '111319', '115988', '25'), +('12', '112', '5', '111321', '115460', '25'), +('12', '112', '5', '111318', '114228', '25'), +('12', '112', '5', '111018', '101938', '25'), +('12', '112', '8', '111332', '116265', '25'), +('12', '112', '8', '111329', '115754', '25'), +('12', '112', '8', '111331', '113477', '25'), +('12', '112', '8', '111031', '102314', '25'), +('12', '112', '6', '111323', '116193', '25'), +('12', '112', '6', '111325', '115382', '25'), +('12', '112', '6', '111326', '115125', '25'), +('12', '112', '6', '111022', '102143', '25'), +('12', '112', '17', '56043', '77222', '25'), +('12', '112', '17', '56084', '75510', '25'), +('12', '112', '17', '104427', '65932', '25'), +('12', '112', '17', '54854', '49129', '25'), +('12', '112', '7', '56080', '72845', '25'), +('12', '112', '7', '56040', '72398', '25'), +('12', '112', '7', '104425', '63330', '25'), +('12', '112', '7', '49656', '46310', '25'), +('12', '112', '9', '67098', '116968', '25'), +('12', '112', '9', '56070', '70696', '25'), +('12', '112', '9', '56031', '70472', '25'), +('12', '112', '9', '62984', '70452', '25'), +('12', '112', '15', '111349', '117420', '25'), +('12', '112', '15', '111344', '116441', '25'), +('12', '112', '15', '111340', '116104', '25'), +('12', '112', '15', '111346', '115932', '25'), +('12', '112', '20', '128733', '147405', '25'), +('12', '112', '20', '111356', '116386', '25'), +('12', '112', '20', '111352', '115455', '25'), +('12', '112', '20', '111351', '114367', '25'), +('12', '112', '12', '56035', '71841', '25'), +('12', '112', '12', '56074', '71061', '25'), +('12', '112', '12', '104422', '61891', '25'), +('12', '112', '12', '49656', '46310', '25'), +('12', '112', '18', '56041', '75555', '25'), +('12', '112', '18', '62986', '74437', '25'), +('12', '112', '18', '104426', '64148', '25'), +('12', '112', '18', '54851', '46940', '25'), +('12', '112', '19', '62990', '73541', '25'), +('12', '112', '19', '81763', '73481', '25'), +('12', '112', '19', '56037', '72907', '25'), +('12', '112', '19', '56075', '72856', '25'), +('12', '112', '13', '111521', '119322', '25'), +('12', '112', '13', '111524', '113330', '25'), +('12', '112', '13', '111519', '113285', '25'), +('12', '112', '13', '111221', '106054', '25'), +('12', '112', '14', '111537', '116440', '25'), +('12', '112', '14', '111535', '114962', '25'), +('12', '112', '14', '111237', '102388', '25'), +('12', '112', '14', '111235', '101010', '25'), +('12', '112', '11', '85213', '166676', '25'), +('12', '112', '11', '133816', '148901', '25'), +('12', '112', '11', '111335', '115791', '25'), +('12', '112', '11', '111337', '115556', '25'), +('12', '113', '22', '12425', '0', '25'), +('12', '113', '22', '39342', '0', '25'), +('12', '113', '22', '7867', '0', '25'), +('12', '113', '22', '53550', '0', '25'), +('12', '113', '1', '98769', '184318', '25'), +('12', '113', '1', '111307', '116031', '25'), +('12', '113', '1', '111306', '115919', '25'), +('12', '113', '1', '111304', '115775', '25'), +('12', '113', '2', '62985', '72800', '25'), +('12', '113', '2', '94056', '72713', '25'), +('12', '113', '2', '104424', '63607', '25'), +('12', '113', '2', '54845', '46689', '25'), +('12', '113', '3', '111314', '116321', '25'), +('12', '113', '3', '111316', '115022', '25'), +('12', '113', '3', '111315', '114779', '25'), +('12', '113', '3', '111013', '102270', '25'), +('12', '113', '5', '111319', '115992', '25'), +('12', '113', '5', '111321', '115463', '25'), +('12', '113', '5', '111318', '114233', '25'), +('12', '113', '5', '111018', '101942', '25'), +('12', '113', '8', '111332', '116269', '25'), +('12', '113', '8', '111329', '115759', '25'), +('12', '113', '8', '111331', '113480', '25'), +('12', '113', '8', '111031', '102318', '25'), +('12', '113', '6', '111323', '116197', '25'), +('12', '113', '6', '111325', '115385', '25'), +('12', '113', '6', '111326', '115130', '25'), +('12', '113', '6', '111022', '102146', '25'), +('12', '113', '17', '56043', '77226', '25'), +('12', '113', '17', '56084', '75514', '25'), +('12', '113', '17', '104427', '65935', '25'), +('12', '113', '17', '54854', '49132', '25'), +('12', '113', '7', '56080', '72849', '25'), +('12', '113', '7', '56040', '72404', '25'), +('12', '113', '7', '104425', '63333', '25'), +('12', '113', '7', '49656', '46311', '25'), +('12', '113', '9', '67098', '116971', '25'), +('12', '113', '9', '56070', '70699', '25'), +('12', '113', '9', '56031', '70478', '25'), +('12', '113', '9', '62984', '70455', '25'), +('12', '113', '15', '111349', '117424', '25'), +('12', '113', '15', '111344', '116443', '25'), +('12', '113', '15', '111340', '116108', '25'), +('12', '113', '15', '111346', '115935', '25'), +('12', '113', '20', '128733', '147408', '25'), +('12', '113', '20', '111356', '116390', '25'), +('12', '113', '20', '111352', '115459', '25'), +('12', '113', '20', '111351', '114372', '25'), +('12', '113', '12', '56035', '71847', '25'), +('12', '113', '12', '56074', '71064', '25'), +('12', '113', '12', '104422', '61896', '25'), +('12', '113', '12', '49656', '46311', '25'), +('12', '113', '18', '56041', '75560', '25'), +('12', '113', '18', '62986', '74440', '25'), +('12', '113', '18', '104426', '64149', '25'), +('12', '113', '18', '54851', '46942', '25'), +('12', '113', '19', '62990', '73545', '25'), +('12', '113', '19', '81763', '73487', '25'), +('12', '113', '19', '56037', '72909', '25'), +('12', '113', '19', '56075', '72859', '25'), +('12', '113', '13', '111521', '119326', '25'), +('12', '113', '13', '111524', '113334', '25'), +('12', '113', '13', '111519', '113289', '25'), +('12', '113', '13', '111221', '106057', '25'), +('12', '113', '14', '111537', '116443', '25'), +('12', '113', '14', '111535', '114964', '25'), +('12', '113', '14', '111237', '102391', '25'), +('12', '113', '14', '111235', '101013', '25'), +('12', '113', '11', '85213', '166679', '25'), +('12', '113', '11', '133816', '148903', '25'), +('12', '113', '11', '111335', '115795', '25'), +('12', '113', '11', '111337', '115559', '25'), +('12', '114', '22', '12425', '0', '25'), +('12', '114', '22', '39342', '0', '25'), +('12', '114', '22', '7867', '0', '25'), +('12', '114', '22', '53550', '0', '25'), +('12', '114', '1', '98769', '184320', '25'), +('12', '114', '1', '111307', '116036', '25'), +('12', '114', '1', '111306', '115922', '25'), +('12', '114', '1', '111304', '115778', '25'), +('12', '114', '2', '62985', '72803', '25'), +('12', '114', '2', '94056', '72715', '25'), +('12', '114', '2', '104424', '63612', '25'), +('12', '114', '2', '54845', '46692', '25'), +('12', '114', '3', '111314', '116325', '25'), +('12', '114', '3', '111316', '115026', '25'), +('12', '114', '3', '111315', '114783', '25'), +('12', '114', '3', '111013', '102274', '25'), +('12', '114', '5', '111319', '115997', '25'), +('12', '114', '5', '111321', '115466', '25'), +('12', '114', '5', '111318', '114237', '25'), +('12', '114', '5', '111018', '101946', '25'), +('12', '114', '8', '111332', '116273', '25'), +('12', '114', '8', '111329', '115764', '25'), +('12', '114', '8', '111331', '113483', '25'), +('12', '114', '8', '111031', '102323', '25'), +('12', '114', '6', '111323', '116200', '25'), +('12', '114', '6', '111325', '115388', '25'), +('12', '114', '6', '111326', '115134', '25'), +('12', '114', '6', '111022', '102150', '25'), +('12', '114', '17', '56043', '77229', '25'), +('12', '114', '17', '56084', '75518', '25'), +('12', '114', '17', '104427', '65939', '25'), +('12', '114', '17', '54854', '49135', '25'), +('12', '114', '7', '56080', '72853', '25'), +('12', '114', '7', '56040', '72410', '25'), +('12', '114', '7', '104425', '63337', '25'), +('12', '114', '7', '49656', '46311', '25'), +('12', '114', '9', '67098', '116973', '25'), +('12', '114', '9', '56070', '70702', '25'), +('12', '114', '9', '56031', '70484', '25'), +('12', '114', '9', '62984', '70458', '25'), +('12', '114', '15', '111349', '117429', '25'), +('12', '114', '15', '111344', '116446', '25'), +('12', '114', '15', '111340', '116111', '25'), +('12', '114', '15', '111346', '115939', '25'), +('12', '114', '20', '128733', '147412', '25'), +('12', '114', '20', '111356', '116394', '25'), +('12', '114', '20', '111352', '115462', '25'), +('12', '114', '20', '111351', '114376', '25'), +('12', '114', '12', '56035', '71853', '25'), +('12', '114', '12', '56074', '71068', '25'), +('12', '114', '12', '104422', '61900', '25'), +('12', '114', '12', '49656', '46311', '25'), +('12', '114', '18', '56041', '75566', '25'), +('12', '114', '18', '62986', '74443', '25'), +('12', '114', '18', '104426', '64150', '25'), +('12', '114', '18', '54851', '46945', '25'), +('12', '114', '19', '62990', '73550', '25'), +('12', '114', '19', '81763', '73493', '25'), +('12', '114', '19', '56037', '72910', '25'), +('12', '114', '19', '56075', '72862', '25'), +('12', '114', '13', '111521', '119329', '25'), +('12', '114', '13', '111524', '113338', '25'), +('12', '114', '13', '111519', '113294', '25'), +('12', '114', '13', '111221', '106061', '25'), +('12', '114', '14', '111537', '116446', '25'), +('12', '114', '14', '111535', '114967', '25'), +('12', '114', '14', '111237', '102395', '25'), +('12', '114', '14', '111235', '101015', '25'), +('12', '114', '11', '85213', '166681', '25'), +('12', '114', '11', '133816', '148906', '25'), +('12', '114', '11', '111335', '115798', '25'), +('12', '114', '11', '111337', '115563', '25'), +('12', '115', '22', '12425', '0', '26'), +('12', '115', '22', '39342', '0', '26'), +('12', '115', '22', '7867', '0', '26'), +('12', '115', '22', '53550', '0', '26'), +('12', '115', '1', '98769', '184323', '26'), +('12', '115', '1', '111307', '116041', '26'), +('12', '115', '1', '111306', '115926', '26'), +('12', '115', '1', '111304', '115781', '26'), +('12', '115', '2', '62985', '72805', '26'), +('12', '115', '2', '94056', '72717', '26'), +('12', '115', '2', '104424', '63617', '26'), +('12', '115', '2', '54845', '46696', '26'), +('12', '115', '3', '111314', '116329', '26'), +('12', '115', '3', '111316', '115030', '26'), +('12', '115', '3', '111315', '114786', '26'), +('12', '115', '3', '111013', '102278', '26'), +('12', '115', '5', '111319', '116001', '26'), +('12', '115', '5', '111321', '115469', '26'), +('12', '115', '5', '111318', '114242', '26'), +('12', '115', '5', '111018', '101951', '26'), +('12', '115', '8', '111332', '116277', '26'), +('12', '115', '8', '111329', '115768', '26'), +('12', '115', '8', '111331', '113486', '26'), +('12', '115', '8', '111031', '102327', '26'), +('12', '115', '6', '111323', '116204', '26'), +('12', '115', '6', '111325', '115390', '26'), +('12', '115', '6', '111326', '115139', '26'), +('12', '115', '6', '111022', '102153', '26'), +('12', '115', '17', '56043', '77232', '26'), +('12', '115', '17', '56084', '75522', '26'), +('12', '115', '17', '104427', '65943', '26'), +('12', '115', '17', '54854', '49138', '26'), +('12', '115', '7', '56080', '72858', '26'), +('12', '115', '7', '56040', '72416', '26'), +('12', '115', '7', '104425', '63340', '26'), +('12', '115', '7', '49656', '46312', '26'), +('12', '115', '9', '67098', '116976', '26'), +('12', '115', '9', '56070', '70706', '26'), +('12', '115', '9', '56031', '70491', '26'), +('12', '115', '9', '62984', '70461', '26'), +('12', '115', '15', '111349', '117434', '26'), +('12', '115', '15', '111344', '116449', '26'), +('12', '115', '15', '111340', '116114', '26'), +('12', '115', '15', '111346', '115942', '26'), +('12', '115', '20', '128733', '147416', '26'), +('12', '115', '20', '111356', '116398', '26'), +('12', '115', '20', '111352', '115465', '26'), +('12', '115', '20', '111351', '114381', '26'), +('12', '115', '12', '56035', '71859', '26'), +('12', '115', '12', '56074', '71072', '26'), +('12', '115', '12', '104422', '61905', '26'), +('12', '115', '12', '49656', '46312', '26'), +('12', '115', '18', '56041', '75571', '26'), +('12', '115', '18', '62986', '74446', '26'), +('12', '115', '18', '104426', '64151', '26'), +('12', '115', '18', '54851', '46947', '26'), +('12', '115', '19', '62990', '73555', '26'), +('12', '115', '19', '81763', '73499', '26'), +('12', '115', '19', '56037', '72912', '26'), +('12', '115', '19', '56075', '72865', '26'), +('12', '115', '13', '111521', '119332', '26'), +('12', '115', '13', '111524', '113342', '26'), +('12', '115', '13', '111519', '113298', '26'), +('12', '115', '13', '111221', '106064', '26'), +('12', '115', '14', '111537', '116449', '26'), +('12', '115', '14', '111535', '114969', '26'), +('12', '115', '14', '111237', '102398', '26'), +('12', '115', '14', '111235', '101018', '26'), +('12', '115', '11', '85213', '166684', '26'), +('12', '115', '11', '133816', '148908', '26'), +('12', '115', '11', '111335', '115802', '26'), +('12', '115', '11', '111337', '115567', '26'), +('13', '1', '22', '10323', '0', '0'), +('13', '1', '22', '9246', '0', '0'), +('13', '1', '22', '21509', '0', '0'), +('13', '1', '22', '8007', '0', '0'), +('13', '1', '1', '14702', '3750', '0'), +('13', '1', '1', '14701', '2862', '0'), +('13', '1', '1', '30361', '2640', '0'), +('13', '1', '1', '10321', '1000', '0'), +('13', '1', '2', '10143', '5368', '0'), +('13', '1', '2', '30363', '3700', '0'), +('13', '1', '2', '1239', '1539', '0'), +('13', '1', '2', '1211', '1485', '0'), +('13', '1', '3', '1212', '1330', '0'), +('13', '1', '3', '14705', '990', '0'), +('13', '1', '3', '14706', '990', '0'), +('13', '1', '3', '1642', '730', '0'), +('13', '1', '5', '14703', '6050', '0'), +('13', '1', '5', '14557', '5072', '0'), +('13', '1', '5', '14700', '3318', '0'), +('13', '1', '5', '30362', '3140', '0'), +('13', '1', '8', '11603', '8419', '0'), +('13', '1', '8', '2349', '3554', '0'), +('13', '1', '8', '1216', '1343', '0'), +('13', '1', '8', '1274', '1145', '0'), +('13', '1', '6', '2708', '5537', '0'), +('13', '1', '6', '1557', '5310', '0'), +('13', '1', '6', '1905', '5031', '0'), +('13', '1', '6', '1542', '3480', '0'), +('13', '1', '17', '1253', '10051', '0'), +('13', '1', '17', '1644', '8427', '0'), +('13', '1', '17', '11641', '5763', '0'), +('13', '1', '17', '1357', '5468', '0'), +('13', '1', '7', '1362', '2624', '0'), +('13', '1', '7', '1321', '1746', '0'), +('13', '1', '7', '1648', '885', '0'), +('13', '1', '7', '1241', '589', '0'), +('13', '1', '9', '12805', '4256', '0'), +('13', '1', '9', '4344', '2051', '0'), +('13', '1', '9', '1242', '2025', '0'), +('13', '1', '9', '10408', '2002', '0'), +('13', '1', '15', '11687', '3085', '0'), +('13', '1', '15', '10150', '3004', '0'), +('13', '1', '15', '10163', '2300', '0'), +('13', '1', '15', '14651', '2224', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '1', '20', '11666', '8289', '0'), +('13', '1', '20', '2742', '5069', '0'), +('13', '1', '20', '1217', '1339', '0'), +('13', '1', '20', '1647', '1334', '0'), +('13', '1', '12', '2923', '3074', '0'), +('13', '1', '12', '20655', '2626', '0'), +('13', '1', '12', '1404', '2512', '0'), +('13', '1', '12', '1243', '1617', '0'), +('13', '1', '18', '4410', '1142', '0'), +('13', '1', '18', '1651', '971', '0'), +('13', '1', '18', '1244', '586', '0'), +('13', '1', '18', '1221', '454', '0'), +('13', '1', '19', '1368', '2016', '0'), +('13', '1', '19', '68239', '1960', '0'), +('13', '1', '19', '1652', '1834', '0'), +('13', '1', '19', '1245', '512', '0'), +('13', '1', '13', '14759', '5262', '0'), +('13', '1', '13', '11650', '4442', '0'), +('13', '1', '13', '11625', '3514', '0'), +('13', '1', '13', '13400', '3048', '0'), +('13', '1', '14', '10219', '5681', '0'), +('13', '1', '14', '14759', '5262', '0'), +('13', '1', '14', '11625', '3514', '0'), +('13', '1', '14', '13987', '2260', '0'), +('13', '1', '11', '14762', '2204', '0'), +('13', '1', '11', '13353', '1500', '0'), +('13', '1', '11', '20677', '450', '0'), +('13', '1', '11', '9246', '133', '0'), +('13', '2', '22', '10323', '0', '0'), +('13', '2', '22', '9246', '0', '0'), +('13', '2', '22', '21509', '0', '0'), +('13', '2', '22', '8007', '0', '0'), +('13', '2', '1', '14702', '3750', '0'), +('13', '2', '1', '14701', '2862', '0'), +('13', '2', '1', '30361', '2640', '0'), +('13', '2', '1', '10321', '1000', '0'), +('13', '2', '2', '10143', '5368', '0'), +('13', '2', '2', '30363', '3700', '0'), +('13', '2', '2', '1239', '1648', '0'), +('13', '2', '2', '1211', '1569', '0'), +('13', '2', '3', '1212', '1342', '0'), +('13', '2', '3', '14705', '990', '0'), +('13', '2', '3', '14706', '990', '0'), +('13', '2', '3', '1642', '742', '0'), +('13', '2', '5', '14703', '6050', '0'), +('13', '2', '5', '14557', '5133', '0'), +('13', '2', '5', '14700', '3318', '0'), +('13', '2', '5', '30362', '3140', '0'), +('13', '2', '8', '11603', '8528', '0'), +('13', '2', '8', '2349', '3554', '0'), +('13', '2', '8', '1216', '1356', '0'), +('13', '2', '8', '1274', '1254', '0'), +('13', '2', '6', '2708', '5539', '0'), +('13', '2', '6', '1557', '5310', '0'), +('13', '2', '6', '1905', '5033', '0'), +('13', '2', '6', '1542', '3589', '0'), +('13', '2', '17', '1253', '10053', '0'), +('13', '2', '17', '1644', '8487', '0'), +('13', '2', '17', '11641', '5944', '0'), +('13', '2', '17', '1357', '5468', '0'), +('13', '2', '7', '1362', '2624', '0'), +('13', '2', '7', '1321', '1746', '0'), +('13', '2', '7', '1648', '945', '0'), +('13', '2', '7', '1241', '673', '0'), +('13', '2', '9', '12805', '4256', '0'), +('13', '2', '9', '4344', '2051', '0'), +('13', '2', '9', '1242', '2025', '0'), +('13', '2', '9', '10408', '2002', '0'), +('13', '2', '15', '11687', '3145', '0'), +('13', '2', '15', '10150', '3004', '0'), +('13', '2', '15', '10163', '2300', '0'), +('13', '2', '15', '14651', '2224', '0'), +('13', '2', '20', '11666', '8290', '0'), +('13', '2', '20', '2742', '5071', '0'), +('13', '2', '20', '1217', '1351', '0'), +('13', '2', '20', '1647', '1334', '0'), +('13', '2', '12', '2923', '3074', '0'), +('13', '2', '12', '20655', '2651', '0'), +('13', '2', '12', '1404', '2512', '0'), +('13', '2', '12', '1243', '1701', '0'), +('13', '2', '18', '4410', '1142', '0'), +('13', '2', '18', '1651', '1008', '0'), +('13', '2', '18', '1244', '586', '0'), +('13', '2', '18', '1221', '454', '0'), +('13', '2', '19', '1368', '2016', '0'), +('13', '2', '19', '68239', '1996', '0'), +('13', '2', '19', '1652', '1834', '0'), +('13', '2', '19', '1245', '512', '0'), +('13', '2', '13', '14759', '5333', '0'), +('13', '2', '13', '11650', '4533', '0'), +('13', '2', '13', '11625', '3516', '0'), +('13', '2', '13', '13400', '3097', '0'), +('13', '2', '14', '10219', '5681', '0'), +('13', '2', '14', '14759', '5333', '0'), +('13', '2', '14', '11625', '3516', '0'), +('13', '2', '14', '13987', '2321', '0'), +('13', '2', '11', '14762', '2204', '0'), +('13', '2', '11', '13353', '1500', '0'), +('13', '2', '11', '20677', '450', '0'), +('13', '2', '11', '9246', '254', '0'), +('13', '3', '22', '10323', '0', '0'), +('13', '3', '22', '9246', '0', '0'), +('13', '3', '22', '21509', '0', '0'), +('13', '3', '22', '8007', '0', '0'), +('13', '3', '1', '14702', '3750', '0'), +('13', '3', '1', '14701', '2862', '0'), +('13', '3', '1', '30361', '2640', '0'), +('13', '3', '1', '10321', '1000', '0'), +('13', '3', '2', '10143', '5368', '0'), +('13', '3', '2', '30363', '3700', '0'), +('13', '3', '2', '1239', '1756', '0'), +('13', '3', '2', '1211', '1654', '0'), +('13', '3', '3', '1212', '1354', '0'), +('13', '3', '3', '14705', '990', '0'), +('13', '3', '3', '14706', '990', '0'), +('13', '3', '3', '1642', '754', '0'), +('13', '3', '5', '14703', '6050', '0'), +('13', '3', '5', '14557', '5193', '0'), +('13', '3', '5', '14700', '3318', '0'), +('13', '3', '5', '30362', '3140', '0'), +('13', '3', '8', '11603', '8637', '0'), +('13', '3', '8', '2349', '3554', '0'), +('13', '3', '8', '1216', '1368', '0'), +('13', '3', '8', '1274', '1362', '0'), +('13', '3', '6', '2708', '5540', '0'), +('13', '3', '6', '1557', '5310', '0'), +('13', '3', '6', '1905', '5034', '0'), +('13', '3', '6', '1542', '3697', '0'), +('13', '3', '17', '1253', '10056', '0'), +('13', '3', '17', '1644', '8548', '0'), +('13', '3', '17', '11641', '6125', '0'), +('13', '3', '17', '1357', '5468', '0'), +('13', '3', '7', '1362', '2624', '0'), +('13', '3', '7', '1321', '1746', '0'), +('13', '3', '7', '1648', '1005', '0'), +('13', '3', '7', '1241', '758', '0'), +('13', '3', '9', '12805', '4256', '0'), +('13', '3', '9', '4344', '2051', '0'), +('13', '3', '9', '1242', '2025', '0'), +('13', '3', '9', '10408', '2002', '0'), +('13', '3', '15', '11687', '3205', '0'), +('13', '3', '15', '10150', '3004', '0'), +('13', '3', '15', '10163', '2300', '0'), +('13', '3', '15', '14651', '2224', '0'), +('13', '3', '20', '11666', '8292', '0'), +('13', '3', '20', '2742', '5074', '0'), +('13', '3', '20', '1217', '1363', '0'), +('13', '3', '20', '1647', '1334', '0'), +('13', '3', '12', '2923', '3074', '0'), +('13', '3', '12', '20655', '2675', '0'), +('13', '3', '12', '1404', '2512', '0'), +('13', '3', '12', '1243', '1786', '0'), +('13', '3', '18', '4410', '1142', '0'), +('13', '3', '18', '1651', '1044', '0'), +('13', '3', '18', '1244', '586', '0'), +('13', '3', '18', '1221', '454', '0'), +('13', '3', '19', '68239', '2032', '0'), +('13', '3', '19', '1368', '2016', '0'), +('13', '3', '19', '1652', '1834', '0'), +('13', '3', '19', '1245', '512', '0'), +('13', '3', '13', '14759', '5405', '0'), +('13', '3', '13', '11650', '4623', '0'), +('13', '3', '13', '11625', '3519', '0'), +('13', '3', '13', '13400', '3145', '0'), +('13', '3', '14', '10219', '5681', '0'), +('13', '3', '14', '14759', '5405', '0'), +('13', '3', '14', '11625', '3519', '0'), +('13', '3', '14', '13987', '2381', '0'), +('13', '3', '11', '14762', '2204', '0'), +('13', '3', '11', '13353', '1500', '0'), +('13', '3', '11', '20677', '450', '0'), +('13', '3', '11', '9246', '374', '0'), +('13', '4', '22', '10323', '0', '0'), +('13', '4', '22', '9246', '0', '0'), +('13', '4', '22', '21509', '0', '0'), +('13', '4', '22', '8007', '0', '0'), +('13', '4', '1', '14702', '3750', '0'), +('13', '4', '1', '14701', '2862', '0'), +('13', '4', '1', '30361', '2640', '0'), +('13', '4', '1', '10321', '1000', '0'), +('13', '4', '2', '10143', '5368', '0'), +('13', '4', '2', '30363', '3700', '0'), +('13', '4', '2', '1239', '1865', '0'), +('13', '4', '2', '1211', '1738', '0'), +('13', '4', '3', '1212', '1366', '0'), +('13', '4', '3', '14705', '990', '0'), +('13', '4', '3', '14706', '990', '0'), +('13', '4', '3', '1642', '766', '0'), +('13', '4', '5', '14703', '6050', '0'), +('13', '4', '5', '14557', '5254', '0'), +('13', '4', '5', '14700', '3318', '0'), +('13', '4', '5', '30362', '3140', '0'), +('13', '4', '8', '11603', '8745', '0'), +('13', '4', '8', '2349', '3554', '0'), +('13', '4', '8', '1274', '1471', '0'), +('13', '4', '8', '1216', '1380', '0'), +('13', '4', '6', '2708', '5541', '0'), +('13', '4', '6', '1557', '5310', '0'), +('13', '4', '6', '1905', '5035', '0'), +('13', '4', '6', '1542', '3806', '0'), +('13', '4', '17', '1253', '10058', '0'), +('13', '4', '17', '1644', '8608', '0'), +('13', '4', '17', '11641', '6306', '0'), +('13', '4', '17', '1357', '5468', '0'), +('13', '4', '7', '1362', '2624', '0'), +('13', '4', '7', '1321', '1746', '0'), +('13', '4', '7', '1648', '1066', '0'), +('13', '4', '7', '1241', '842', '0'), +('13', '4', '9', '12805', '4256', '0'), +('13', '4', '9', '4344', '2051', '0'), +('13', '4', '9', '1242', '2025', '0'), +('13', '4', '9', '10408', '2002', '0'), +('13', '4', '15', '11687', '3266', '0'), +('13', '4', '15', '10150', '3004', '0'), +('13', '4', '15', '10163', '2300', '0'), +('13', '4', '15', '14651', '2224', '0'), +('13', '4', '20', '11666', '8294', '0'), +('13', '4', '20', '2742', '5076', '0'), +('13', '4', '20', '1217', '1375', '0'), +('13', '4', '20', '1647', '1334', '0'), +('13', '4', '12', '2923', '3074', '0'), +('13', '4', '12', '20655', '2700', '0'), +('13', '4', '12', '1404', '2512', '0'), +('13', '4', '12', '1243', '1870', '0'), +('13', '4', '18', '4410', '1142', '0'), +('13', '4', '18', '1651', '1080', '0'), +('13', '4', '18', '1244', '586', '0'), +('13', '4', '18', '1221', '454', '0'), +('13', '4', '19', '68239', '2068', '0'), +('13', '4', '19', '1368', '2016', '0'), +('13', '4', '19', '1652', '1834', '0'), +('13', '4', '19', '1245', '512', '0'), +('13', '4', '13', '14759', '5476', '0'), +('13', '4', '13', '11650', '4714', '0'), +('13', '4', '13', '11625', '3521', '0'), +('13', '4', '13', '13400', '3193', '0'), +('13', '4', '14', '10219', '5681', '0'), +('13', '4', '14', '14759', '5476', '0'), +('13', '4', '14', '11625', '3521', '0'), +('13', '4', '14', '13987', '2442', '0'), +('13', '4', '11', '14762', '2204', '0'), +('13', '4', '11', '13353', '1500', '0'), +('13', '4', '11', '9246', '495', '0'), +('13', '4', '11', '20677', '450', '0'), +('13', '5', '22', '10323', '0', '0'), +('13', '5', '22', '9246', '0', '0'), +('13', '5', '22', '21509', '0', '0'), +('13', '5', '22', '8007', '0', '0'), +('13', '5', '1', '14702', '3750', '0'), +('13', '5', '1', '14701', '2862', '0'), +('13', '5', '1', '30361', '2640', '0'), +('13', '5', '1', '10321', '1000', '0'), +('13', '5', '2', '10143', '5368', '0'), +('13', '5', '2', '30363', '3700', '0'), +('13', '5', '2', '1239', '1974', '0'), +('13', '5', '2', '1211', '1823', '0'), +('13', '5', '3', '1212', '1379', '0'), +('13', '5', '3', '14705', '990', '0'), +('13', '5', '3', '14706', '990', '0'), +('13', '5', '3', '11052', '906', '0'), +('13', '5', '5', '14703', '6050', '0'), +('13', '5', '5', '14557', '5314', '0'), +('13', '5', '5', '14700', '3318', '0'), +('13', '5', '5', '30362', '3140', '0'), +('13', '5', '8', '11603', '8854', '0'), +('13', '5', '8', '2349', '3554', '0'), +('13', '5', '8', '1274', '1580', '0'), +('13', '5', '8', '1216', '1392', '0'), +('13', '5', '6', '2708', '5542', '0'), +('13', '5', '6', '1557', '5310', '0'), +('13', '5', '6', '1905', '5036', '0'), +('13', '5', '6', '1542', '3915', '0'), +('13', '5', '17', '1253', '10060', '0'), +('13', '5', '17', '1644', '8668', '0'), +('13', '5', '17', '11641', '6488', '0'), +('13', '5', '17', '1357', '5468', '0'), +('13', '5', '7', '1362', '2624', '0'), +('13', '5', '7', '1321', '1746', '0'), +('13', '5', '7', '1648', '1126', '0'), +('13', '5', '7', '1241', '927', '0'), +('13', '5', '9', '12805', '4256', '0'), +('13', '5', '9', '4344', '2051', '0'), +('13', '5', '9', '1242', '2025', '0'), +('13', '5', '9', '10408', '2002', '0'), +('13', '5', '15', '11687', '3326', '0'), +('13', '5', '15', '10150', '3004', '0'), +('13', '5', '15', '10163', '2300', '0'), +('13', '5', '15', '14651', '2224', '0'), +('13', '5', '20', '11666', '8295', '0'), +('13', '5', '20', '2742', '5079', '0'), +('13', '5', '20', '1217', '1387', '0'), +('13', '5', '20', '1647', '1334', '0'), +('13', '5', '12', '2923', '3074', '0'), +('13', '5', '12', '20655', '2725', '0'), +('13', '5', '12', '1404', '2512', '0'), +('13', '5', '12', '1243', '1955', '0'), +('13', '5', '18', '4410', '1142', '0'), +('13', '5', '18', '1651', '1116', '0'), +('13', '5', '18', '1244', '586', '0'), +('13', '5', '18', '1221', '454', '0'), +('13', '5', '19', '68239', '2105', '0'), +('13', '5', '19', '1368', '2016', '0'), +('13', '5', '19', '1652', '1834', '0'), +('13', '5', '19', '4407', '604', '0'), +('13', '5', '13', '14759', '5547', '0'), +('13', '5', '13', '11650', '4804', '0'), +('13', '5', '13', '11625', '3523', '0'), +('13', '5', '13', '13400', '3242', '0'), +('13', '5', '14', '10219', '5681', '0'), +('13', '5', '14', '14759', '5547', '0'), +('13', '5', '14', '11625', '3523', '0'), +('13', '5', '14', '13987', '2502', '0'), +('13', '5', '11', '14762', '2204', '0'), +('13', '5', '11', '13353', '1500', '0'), +('13', '5', '11', '9246', '616', '0'), +('13', '5', '11', '20677', '450', '0'), +('13', '6', '22', '10323', '0', '0'), +('13', '6', '22', '9246', '0', '0'), +('13', '6', '22', '21509', '0', '0'), +('13', '6', '22', '8007', '0', '0'), +('13', '6', '1', '14702', '3750', '0'), +('13', '6', '1', '14701', '2862', '0'), +('13', '6', '1', '30361', '2640', '0'), +('13', '6', '1', '10321', '1000', '0'), +('13', '6', '2', '10143', '5368', '0'), +('13', '6', '2', '30363', '3700', '0'), +('13', '6', '2', '1239', '2083', '0'), +('13', '6', '2', '1211', '1908', '0'), +('13', '6', '3', '1212', '1391', '0'), +('13', '6', '3', '11052', '1087', '0'), +('13', '6', '3', '14705', '990', '0'), +('13', '6', '3', '14706', '990', '0'), +('13', '6', '5', '14703', '6050', '0'), +('13', '6', '5', '14557', '5374', '0'), +('13', '6', '5', '14700', '3318', '0'), +('13', '6', '5', '30362', '3140', '0'), +('13', '6', '8', '11603', '8963', '0'), +('13', '6', '8', '2349', '3554', '0'), +('13', '6', '8', '1274', '1689', '0'), +('13', '6', '8', '1216', '1404', '0'), +('13', '6', '6', '2708', '5543', '0'), +('13', '6', '6', '1557', '5310', '0'), +('13', '6', '6', '1905', '5037', '0'), +('13', '6', '6', '1542', '4024', '0'), +('13', '6', '17', '1253', '10063', '0'), +('13', '6', '17', '1644', '8729', '0'), +('13', '6', '17', '11641', '6669', '0'), +('13', '6', '17', '1357', '5468', '0'), +('13', '6', '7', '1362', '2624', '0'), +('13', '6', '7', '1321', '1746', '0'), +('13', '6', '7', '1648', '1187', '0'), +('13', '6', '7', '1241', '1012', '0'), +('13', '6', '9', '12805', '4256', '0'), +('13', '6', '9', '4344', '2051', '0'), +('13', '6', '9', '1242', '2025', '0'), +('13', '6', '9', '10408', '2002', '0'), +('13', '6', '15', '11687', '3387', '0'), +('13', '6', '15', '10150', '3004', '0'), +('13', '6', '15', '10163', '2300', '0'), +('13', '6', '15', '14651', '2224', '0'), +('13', '6', '20', '11666', '8297', '0'), +('13', '6', '20', '2742', '5081', '0'), +('13', '6', '20', '1217', '1399', '0'), +('13', '6', '20', '1647', '1334', '0'), +('13', '6', '12', '2923', '3074', '0'), +('13', '6', '12', '20655', '2749', '0'), +('13', '6', '12', '1404', '2512', '0'), +('13', '6', '12', '1243', '2039', '0'), +('13', '6', '18', '1651', '1152', '0'), +('13', '6', '18', '4410', '1142', '0'), +('13', '6', '18', '1244', '586', '0'), +('13', '6', '18', '1221', '454', '0'), +('13', '6', '19', '68239', '2141', '0'), +('13', '6', '19', '1368', '2016', '0'), +('13', '6', '19', '1652', '1834', '0'), +('13', '6', '19', '4407', '713', '0'), +('13', '6', '13', '14759', '5619', '0'), +('13', '6', '13', '11650', '4895', '0'), +('13', '6', '13', '11625', '3525', '0'), +('13', '6', '13', '13400', '3290', '0'), +('13', '6', '14', '10219', '5681', '0'), +('13', '6', '14', '14759', '5619', '0'), +('13', '6', '14', '11625', '3525', '0'), +('13', '6', '14', '13987', '2562', '0'), +('13', '6', '11', '14762', '2204', '0'), +('13', '6', '11', '13353', '1500', '0'), +('13', '6', '11', '9246', '737', '0'), +('13', '6', '11', '20677', '450', '0'), +('13', '7', '22', '10323', '0', '0'), +('13', '7', '22', '9246', '0', '0'), +('13', '7', '22', '21509', '0', '0'), +('13', '7', '22', '8007', '0', '0'), +('13', '7', '1', '14702', '3750', '0'), +('13', '7', '1', '14701', '2862', '0'), +('13', '7', '1', '30361', '2640', '0'), +('13', '7', '1', '10321', '1000', '0'), +('13', '7', '2', '10143', '5368', '0'), +('13', '7', '2', '30363', '3700', '0'), +('13', '7', '2', '1239', '2191', '0'), +('13', '7', '2', '1211', '1992', '0'), +('13', '7', '3', '1212', '1403', '0'), +('13', '7', '3', '11052', '1268', '0'), +('13', '7', '3', '14705', '990', '0'), +('13', '7', '3', '14706', '990', '0'), +('13', '7', '5', '14703', '6050', '0'), +('13', '7', '5', '14557', '5435', '0'), +('13', '7', '5', '14700', '3318', '0'), +('13', '7', '5', '30362', '3140', '0'), +('13', '7', '8', '11603', '9071', '0'), +('13', '7', '8', '2349', '3554', '0'), +('13', '7', '8', '1274', '1797', '0'), +('13', '7', '8', '1216', '1416', '0'), +('13', '7', '6', '2708', '5545', '0'), +('13', '7', '6', '1557', '5310', '0'), +('13', '7', '6', '1905', '5039', '0'), +('13', '7', '6', '1542', '4132', '0'), +('13', '7', '17', '1253', '10065', '0'), +('13', '7', '17', '1644', '8789', '0'), +('13', '7', '17', '11641', '6850', '0'), +('13', '7', '17', '1357', '5468', '0'), +('13', '7', '7', '1362', '2624', '0'), +('13', '7', '7', '1321', '1746', '0'), +('13', '7', '7', '1648', '1247', '0'), +('13', '7', '7', '1241', '1096', '0'), +('13', '7', '9', '12805', '4256', '0'), +('13', '7', '9', '4344', '2051', '0'), +('13', '7', '9', '1242', '2025', '0'), +('13', '7', '9', '10408', '2002', '0'), +('13', '7', '15', '11687', '3447', '0'), +('13', '7', '15', '10150', '3004', '0'), +('13', '7', '15', '10163', '2300', '0'), +('13', '7', '15', '14651', '2224', '0'), +('13', '7', '20', '11666', '8299', '0'), +('13', '7', '20', '2742', '5083', '0'), +('13', '7', '20', '1217', '1411', '0'), +('13', '7', '20', '1647', '1334', '0'), +('13', '7', '12', '2923', '3074', '0'), +('13', '7', '12', '20655', '2774', '0'), +('13', '7', '12', '1404', '2512', '0'), +('13', '7', '12', '1243', '2124', '0'), +('13', '7', '18', '1651', '1189', '0'), +('13', '7', '18', '4410', '1142', '0'), +('13', '7', '18', '1244', '586', '0'), +('13', '7', '18', '1221', '454', '0'), +('13', '7', '19', '68239', '2177', '0'), +('13', '7', '19', '1368', '2016', '0'), +('13', '7', '19', '1652', '1834', '0'), +('13', '7', '19', '4407', '821', '0'), +('13', '7', '13', '14759', '5690', '0'), +('13', '7', '13', '11650', '4986', '0'), +('13', '7', '13', '11625', '3527', '0'), +('13', '7', '13', '13400', '3338', '0'), +('13', '7', '14', '14759', '5690', '0'), +('13', '7', '14', '10219', '5681', '0'), +('13', '7', '14', '11625', '3527', '0'), +('13', '7', '14', '13987', '2623', '0'), +('13', '7', '11', '14762', '2204', '0'), +('13', '7', '11', '13353', '1500', '0'), +('13', '7', '11', '9246', '858', '0'), +('13', '7', '11', '20677', '450', '0'), +('13', '8', '22', '10323', '0', '0'), +('13', '8', '22', '9246', '0', '0'), +('13', '8', '22', '21509', '0', '0'), +('13', '8', '22', '8007', '0', '0'), +('13', '8', '1', '14702', '3750', '0'), +('13', '8', '1', '14701', '2862', '0'), +('13', '8', '1', '30361', '2640', '0'), +('13', '8', '1', '10321', '1000', '0'), +('13', '8', '2', '10143', '5368', '0'), +('13', '8', '2', '30363', '3700', '0'), +('13', '8', '2', '1239', '2300', '0'), +('13', '8', '2', '1211', '2077', '0'), +('13', '8', '3', '11052', '1450', '0'), +('13', '8', '3', '1212', '1415', '0'), +('13', '8', '3', '14705', '990', '0'), +('13', '8', '3', '14706', '990', '0'), +('13', '8', '5', '14703', '6050', '0'), +('13', '8', '5', '14557', '5495', '0'), +('13', '8', '5', '14700', '3318', '0'), +('13', '8', '5', '30362', '3140', '0'), +('13', '8', '8', '11603', '9180', '0'), +('13', '8', '8', '2349', '3554', '0'), +('13', '8', '8', '1274', '1906', '0'), +('13', '8', '8', '1216', '1428', '0'), +('13', '8', '6', '2708', '5546', '0'), +('13', '8', '6', '1557', '5310', '0'), +('13', '8', '6', '1905', '5040', '0'), +('13', '8', '6', '1542', '4241', '0'), +('13', '8', '17', '1253', '10068', '0'), +('13', '8', '17', '1644', '8850', '0'), +('13', '8', '17', '11641', '7031', '0'), +('13', '8', '17', '1357', '5468', '0'), +('13', '8', '7', '1362', '2624', '0'), +('13', '8', '7', '1321', '1746', '0'), +('13', '8', '7', '1648', '1307', '0'), +('13', '8', '7', '1241', '1181', '0'), +('13', '8', '9', '12805', '4256', '0'), +('13', '8', '9', '4344', '2051', '0'), +('13', '8', '9', '1242', '2025', '0'), +('13', '8', '9', '10408', '2002', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '8', '15', '11687', '3507', '0'), +('13', '8', '15', '10150', '3004', '0'), +('13', '8', '15', '10163', '2300', '0'), +('13', '8', '15', '14651', '2224', '0'), +('13', '8', '20', '11666', '8300', '0'), +('13', '8', '20', '2742', '5086', '0'), +('13', '8', '20', '1217', '1423', '0'), +('13', '8', '20', '1647', '1334', '0'), +('13', '8', '12', '2923', '3074', '0'), +('13', '8', '12', '20655', '2799', '0'), +('13', '8', '12', '1404', '2512', '0'), +('13', '8', '12', '1243', '2208', '0'), +('13', '8', '18', '1651', '1225', '0'), +('13', '8', '18', '4410', '1142', '0'), +('13', '8', '18', '1244', '586', '0'), +('13', '8', '18', '1221', '454', '0'), +('13', '8', '19', '68239', '2213', '0'), +('13', '8', '19', '1368', '2016', '0'), +('13', '8', '19', '1652', '1834', '0'), +('13', '8', '19', '4407', '930', '0'), +('13', '8', '13', '14759', '5761', '0'), +('13', '8', '13', '11650', '5076', '0'), +('13', '8', '13', '11625', '3529', '0'), +('13', '8', '13', '13400', '3387', '0'), +('13', '8', '14', '14759', '5761', '0'), +('13', '8', '14', '10219', '5681', '0'), +('13', '8', '14', '11625', '3529', '0'), +('13', '8', '14', '9690', '2800', '0'), +('13', '8', '11', '14762', '2204', '0'), +('13', '8', '11', '13353', '1500', '0'), +('13', '8', '11', '9246', '978', '0'), +('13', '8', '11', '20677', '450', '0'), +('13', '9', '22', '10323', '0', '0'), +('13', '9', '22', '9246', '0', '0'), +('13', '9', '22', '21509', '0', '0'), +('13', '9', '22', '8007', '0', '0'), +('13', '9', '1', '14702', '3750', '0'), +('13', '9', '1', '14701', '2862', '0'), +('13', '9', '1', '30361', '2640', '0'), +('13', '9', '1', '10321', '1000', '0'), +('13', '9', '2', '10143', '5368', '0'), +('13', '9', '2', '30363', '3700', '0'), +('13', '9', '2', '1239', '2409', '0'), +('13', '9', '2', '1211', '2161', '0'), +('13', '9', '3', '11052', '1631', '0'), +('13', '9', '3', '1212', '1427', '0'), +('13', '9', '3', '14705', '990', '0'), +('13', '9', '3', '14706', '990', '0'), +('13', '9', '5', '14703', '6050', '0'), +('13', '9', '5', '14557', '5556', '0'), +('13', '9', '5', '14700', '3318', '0'), +('13', '9', '5', '30362', '3140', '0'), +('13', '9', '8', '11603', '9289', '0'), +('13', '9', '8', '2349', '3554', '0'), +('13', '9', '8', '1274', '2015', '0'), +('13', '9', '8', '1216', '1440', '0'), +('13', '9', '6', '2708', '5547', '0'), +('13', '9', '6', '1557', '5310', '0'), +('13', '9', '6', '1905', '5041', '0'), +('13', '9', '6', '1542', '4350', '0'), +('13', '9', '17', '1253', '10070', '0'), +('13', '9', '17', '1644', '8910', '0'), +('13', '9', '17', '11641', '7212', '0'), +('13', '9', '17', '1240', '5618', '0'), +('13', '9', '7', '1362', '2624', '0'), +('13', '9', '7', '1321', '1746', '0'), +('13', '9', '7', '1648', '1368', '0'), +('13', '9', '7', '1241', '1265', '0'), +('13', '9', '9', '12805', '4256', '0'), +('13', '9', '9', '4344', '2051', '0'), +('13', '9', '9', '1242', '2025', '0'), +('13', '9', '9', '1274', '2015', '0'), +('13', '9', '15', '11687', '3568', '0'), +('13', '9', '15', '10150', '3004', '0'), +('13', '9', '15', '10163', '2300', '0'), +('13', '9', '15', '14651', '2224', '0'), +('13', '9', '20', '11666', '8302', '0'), +('13', '9', '20', '2742', '5088', '0'), +('13', '9', '20', '1217', '1435', '0'), +('13', '9', '20', '1647', '1334', '0'), +('13', '9', '12', '2923', '3074', '0'), +('13', '9', '12', '20655', '2823', '0'), +('13', '9', '12', '1404', '2512', '0'), +('13', '9', '12', '1243', '2293', '0'), +('13', '9', '18', '1651', '1261', '0'), +('13', '9', '18', '4410', '1142', '0'), +('13', '9', '18', '1244', '586', '0'), +('13', '9', '18', '1221', '454', '0'), +('13', '9', '19', '68239', '2250', '0'), +('13', '9', '19', '1368', '2016', '0'), +('13', '9', '19', '1652', '1834', '0'), +('13', '9', '19', '4407', '1039', '0'), +('13', '9', '13', '14759', '5832', '0'), +('13', '9', '13', '11650', '5167', '0'), +('13', '9', '13', '11625', '3532', '0'), +('13', '9', '13', '13400', '3435', '0'), +('13', '9', '14', '14759', '5832', '0'), +('13', '9', '14', '10219', '5681', '0'), +('13', '9', '14', '11625', '3532', '0'), +('13', '9', '14', '9690', '3150', '0'), +('13', '9', '11', '14762', '2204', '0'), +('13', '9', '11', '13353', '1500', '0'), +('13', '9', '11', '9246', '1099', '0'), +('13', '9', '11', '20677', '450', '0'), +('13', '10', '22', '10323', '0', '0'), +('13', '10', '22', '9246', '0', '0'), +('13', '10', '22', '21509', '0', '0'), +('13', '10', '22', '8007', '0', '0'), +('13', '10', '1', '14702', '3750', '0'), +('13', '10', '1', '14701', '2862', '0'), +('13', '10', '1', '30361', '2640', '0'), +('13', '10', '1', '10321', '1000', '0'), +('13', '10', '2', '10143', '5368', '0'), +('13', '10', '2', '30363', '3700', '0'), +('13', '10', '2', '1239', '2517', '0'), +('13', '10', '2', '1211', '2246', '0'), +('13', '10', '3', '11052', '1812', '0'), +('13', '10', '3', '1212', '1439', '0'), +('13', '10', '3', '14705', '990', '0'), +('13', '10', '3', '14706', '990', '0'), +('13', '10', '5', '14703', '6050', '0'), +('13', '10', '5', '14557', '5616', '0'), +('13', '10', '5', '14700', '3318', '0'), +('13', '10', '5', '30362', '3140', '0'), +('13', '10', '8', '11603', '9398', '0'), +('13', '10', '8', '2349', '3554', '0'), +('13', '10', '8', '1274', '2123', '0'), +('13', '10', '8', '1216', '1452', '0'), +('13', '10', '6', '2708', '5548', '0'), +('13', '10', '6', '1557', '5310', '0'), +('13', '10', '6', '1905', '5042', '0'), +('13', '10', '6', '1542', '4458', '0'), +('13', '10', '17', '1253', '10072', '0'), +('13', '10', '17', '1644', '8970', '0'), +('13', '10', '17', '11641', '7394', '0'), +('13', '10', '17', '1240', '5790', '0'), +('13', '10', '7', '1362', '2624', '0'), +('13', '10', '7', '1321', '1746', '0'), +('13', '10', '7', '1648', '1428', '0'), +('13', '10', '7', '1241', '1350', '0'), +('13', '10', '9', '12805', '4256', '0'), +('13', '10', '9', '1274', '2123', '0'), +('13', '10', '9', '4344', '2051', '0'), +('13', '10', '9', '1242', '2025', '0'), +('13', '10', '15', '11687', '3628', '0'), +('13', '10', '15', '10150', '3004', '0'), +('13', '10', '15', '10163', '2300', '0'), +('13', '10', '15', '14651', '2224', '0'), +('13', '10', '20', '11666', '8304', '0'), +('13', '10', '20', '2742', '5091', '0'), +('13', '10', '20', '1217', '1447', '0'), +('13', '10', '20', '1647', '1334', '0'), +('13', '10', '12', '2923', '3074', '0'), +('13', '10', '12', '20655', '2848', '0'), +('13', '10', '12', '1404', '2512', '0'), +('13', '10', '12', '1243', '2378', '0'), +('13', '10', '18', '1651', '1297', '0'), +('13', '10', '18', '4410', '1142', '0'), +('13', '10', '18', '1244', '586', '0'), +('13', '10', '18', '1221', '454', '0'), +('13', '10', '19', '68239', '2286', '0'), +('13', '10', '19', '1368', '2016', '0'), +('13', '10', '19', '1652', '1834', '0'), +('13', '10', '19', '4407', '1147', '0'), +('13', '10', '13', '14759', '5904', '0'), +('13', '10', '13', '11650', '5257', '0'), +('13', '10', '13', '11625', '3534', '0'), +('13', '10', '13', '9690', '3500', '0'), +('13', '10', '14', '14759', '5904', '0'), +('13', '10', '14', '10219', '5681', '0'), +('13', '10', '14', '11625', '3534', '0'), +('13', '10', '14', '9690', '3500', '0'), +('13', '10', '11', '14762', '2204', '0'), +('13', '10', '11', '13353', '1500', '0'), +('13', '10', '11', '9246', '1220', '0'), +('13', '10', '11', '20677', '450', '0'), +('13', '11', '22', '10323', '0', '0'), +('13', '11', '22', '9246', '0', '0'), +('13', '11', '22', '21509', '0', '0'), +('13', '11', '22', '8007', '0', '0'), +('13', '11', '1', '14702', '3750', '0'), +('13', '11', '1', '14701', '2862', '0'), +('13', '11', '1', '30361', '2640', '0'), +('13', '11', '1', '10321', '1000', '0'), +('13', '11', '2', '10143', '5368', '0'), +('13', '11', '2', '30363', '3700', '0'), +('13', '11', '2', '1239', '2626', '0'), +('13', '11', '2', '1211', '2330', '0'), +('13', '11', '3', '11052', '1993', '0'), +('13', '11', '3', '1212', '1451', '0'), +('13', '11', '3', '14705', '990', '0'), +('13', '11', '3', '14706', '990', '0'), +('13', '11', '5', '14703', '6050', '0'), +('13', '11', '5', '14557', '5676', '0'), +('13', '11', '5', '14700', '3318', '0'), +('13', '11', '5', '30362', '3140', '0'), +('13', '11', '8', '11603', '9506', '0'), +('13', '11', '8', '2349', '3554', '0'), +('13', '11', '8', '1274', '2232', '0'), +('13', '11', '8', '1216', '1464', '0'), +('13', '11', '6', '2708', '5550', '0'), +('13', '11', '6', '1557', '5310', '0'), +('13', '11', '6', '1905', '5043', '0'), +('13', '11', '6', '1542', '4567', '0'), +('13', '11', '17', '1253', '10075', '0'), +('13', '11', '17', '1644', '9031', '0'), +('13', '11', '17', '11641', '7575', '0'), +('13', '11', '17', '1240', '5962', '0'), +('13', '11', '7', '1362', '2624', '0'), +('13', '11', '7', '1321', '1746', '0'), +('13', '11', '7', '1648', '1489', '0'), +('13', '11', '7', '1241', '1434', '0'), +('13', '11', '9', '12805', '4256', '0'), +('13', '11', '9', '1274', '2232', '0'), +('13', '11', '9', '4344', '2051', '0'), +('13', '11', '9', '1242', '2025', '0'), +('13', '11', '15', '11687', '3689', '0'), +('13', '11', '15', '10150', '3004', '0'), +('13', '11', '15', '10163', '2300', '0'), +('13', '11', '15', '14651', '2224', '0'), +('13', '11', '20', '11666', '8305', '0'), +('13', '11', '20', '2742', '5093', '0'), +('13', '11', '20', '1217', '1459', '0'), +('13', '11', '20', '1647', '1334', '0'), +('13', '11', '12', '2923', '3074', '0'), +('13', '11', '12', '20655', '2873', '0'), +('13', '11', '12', '1404', '2512', '0'), +('13', '11', '12', '1243', '2462', '0'), +('13', '11', '18', '1651', '1334', '0'), +('13', '11', '18', '4410', '1142', '0'), +('13', '11', '18', '1244', '586', '0'), +('13', '11', '18', '1221', '454', '0'), +('13', '11', '19', '68239', '2322', '0'), +('13', '11', '19', '1368', '2016', '0'), +('13', '11', '19', '1652', '1834', '0'), +('13', '11', '19', '4407', '1256', '0'), +('13', '11', '13', '14759', '5975', '0'), +('13', '11', '13', '11650', '5348', '0'), +('13', '11', '13', '11625', '3536', '0'), +('13', '11', '13', '13400', '3532', '0'), +('13', '11', '14', '14759', '5975', '0'), +('13', '11', '14', '10219', '5681', '0'), +('13', '11', '14', '11625', '3536', '0'), +('13', '11', '14', '9690', '3500', '0'), +('13', '11', '11', '14762', '2204', '0'), +('13', '11', '11', '13353', '1500', '0'), +('13', '11', '11', '9246', '1341', '0'), +('13', '11', '11', '20677', '450', '0'), +('13', '12', '22', '10323', '0', '0'), +('13', '12', '22', '9246', '0', '0'), +('13', '12', '22', '21509', '0', '0'), +('13', '12', '22', '8007', '0', '0'), +('13', '12', '1', '14702', '3750', '0'), +('13', '12', '1', '14701', '2862', '0'), +('13', '12', '1', '30361', '2640', '0'), +('13', '12', '1', '10321', '1000', '0'), +('13', '12', '2', '10143', '5368', '0'), +('13', '12', '2', '30363', '3700', '0'), +('13', '12', '2', '1239', '2735', '0'), +('13', '12', '2', '1211', '2415', '0'), +('13', '12', '3', '11052', '2174', '0'), +('13', '12', '3', '1212', '1463', '0'), +('13', '12', '3', '2707', '1047', '0'), +('13', '12', '3', '4505', '1045', '0'), +('13', '12', '5', '14703', '6050', '0'), +('13', '12', '5', '14557', '5737', '0'), +('13', '12', '5', '14700', '3318', '0'), +('13', '12', '5', '30362', '3140', '0'), +('13', '12', '8', '11603', '9615', '0'), +('13', '12', '8', '2349', '3554', '0'), +('13', '12', '8', '1274', '2341', '0'), +('13', '12', '8', '1216', '1476', '0'), +('13', '12', '6', '2708', '5551', '0'), +('13', '12', '6', '1557', '5310', '0'), +('13', '12', '6', '1905', '5045', '0'), +('13', '12', '6', '1542', '4676', '0'), +('13', '12', '17', '1253', '10077', '0'), +('13', '12', '17', '1644', '9091', '0'), +('13', '12', '17', '11641', '7756', '0'), +('13', '12', '17', '1240', '6134', '0'), +('13', '12', '7', '1362', '2624', '0'), +('13', '12', '7', '1321', '1746', '0'), +('13', '12', '7', '1648', '1549', '0'), +('13', '12', '7', '1241', '1519', '0'), +('13', '12', '9', '12805', '4256', '0'), +('13', '12', '9', '1274', '2341', '0'), +('13', '12', '9', '4344', '2051', '0'), +('13', '12', '9', '1242', '2025', '0'), +('13', '12', '15', '11687', '3749', '0'), +('13', '12', '15', '10150', '3004', '0'), +('13', '12', '15', '10163', '2300', '0'), +('13', '12', '15', '14651', '2224', '0'), +('13', '12', '20', '11666', '8307', '0'), +('13', '12', '20', '2742', '5095', '0'), +('13', '12', '20', '1217', '1472', '0'), +('13', '12', '20', '1647', '1334', '0'), +('13', '12', '12', '2923', '3074', '0'), +('13', '12', '12', '20655', '2897', '0'), +('13', '12', '12', '1243', '2547', '0'), +('13', '12', '12', '1404', '2512', '0'), +('13', '12', '18', '1651', '1370', '0'), +('13', '12', '18', '4410', '1142', '0'), +('13', '12', '18', '1244', '586', '0'), +('13', '12', '18', '1221', '454', '0'), +('13', '12', '19', '68239', '2358', '0'), +('13', '12', '19', '1368', '2016', '0'), +('13', '12', '19', '1652', '1834', '0'), +('13', '12', '19', '4407', '1365', '0'), +('13', '12', '13', '14759', '6046', '0'), +('13', '12', '13', '11650', '5439', '0'), +('13', '12', '13', '13400', '3580', '0'), +('13', '12', '13', '11625', '3538', '0'), +('13', '12', '14', '14759', '6046', '0'), +('13', '12', '14', '10219', '5681', '0'), +('13', '12', '14', '11625', '3538', '0'), +('13', '12', '14', '9690', '3500', '0'), +('13', '12', '11', '14762', '2204', '0'), +('13', '12', '11', '13353', '1500', '0'), +('13', '12', '11', '9246', '1462', '0'), +('13', '12', '11', '20677', '450', '0'), +('13', '13', '22', '10323', '0', '0'), +('13', '13', '22', '9246', '0', '0'), +('13', '13', '22', '21509', '0', '0'), +('13', '13', '22', '8007', '0', '0'), +('13', '13', '1', '14702', '3750', '0'), +('13', '13', '1', '14701', '2862', '0'), +('13', '13', '1', '30361', '2640', '0'), +('13', '13', '1', '10082', '1038', '0'), +('13', '13', '2', '10143', '5368', '0'), +('13', '13', '2', '30363', '3700', '0'), +('13', '13', '2', '1239', '2844', '0'), +('13', '13', '2', '1211', '2499', '0'), +('13', '13', '3', '11052', '2356', '0'), +('13', '13', '3', '1212', '1475', '0'), +('13', '13', '3', '2707', '1132', '0'), +('13', '13', '3', '4505', '1129', '0'), +('13', '13', '5', '14703', '6050', '0'), +('13', '13', '5', '14557', '5797', '0'), +('13', '13', '5', '14700', '3318', '0'), +('13', '13', '5', '30362', '3140', '0'), +('13', '13', '8', '11603', '9724', '0'), +('13', '13', '8', '2349', '3554', '0'), +('13', '13', '8', '1274', '2450', '0'), +('13', '13', '8', '1216', '1488', '0'), +('13', '13', '6', '2708', '5552', '0'), +('13', '13', '6', '1557', '5310', '0'), +('13', '13', '6', '1905', '5046', '0'), +('13', '13', '6', '1542', '4785', '0'), +('13', '13', '17', '1253', '10080', '0'), +('13', '13', '17', '1644', '9152', '0'), +('13', '13', '17', '11641', '7937', '0'), +('13', '13', '17', '1240', '6306', '0'), +('13', '13', '7', '1362', '2624', '0'), +('13', '13', '7', '1321', '1746', '0'), +('13', '13', '7', '1648', '1609', '0'), +('13', '13', '7', '1241', '1603', '0'), +('13', '13', '9', '12805', '4256', '0'), +('13', '13', '9', '1274', '2450', '0'), +('13', '13', '9', '4344', '2051', '0'), +('13', '13', '9', '1242', '2025', '0'), +('13', '13', '15', '11687', '3809', '0'), +('13', '13', '15', '10150', '3004', '0'), +('13', '13', '15', '10163', '2300', '0'), +('13', '13', '15', '14651', '2224', '0'), +('13', '13', '20', '11666', '8309', '0'), +('13', '13', '20', '2742', '5098', '0'), +('13', '13', '20', '1217', '1484', '0'), +('13', '13', '20', '1647', '1334', '0'), +('13', '13', '12', '2923', '3074', '0'), +('13', '13', '12', '20655', '2922', '0'), +('13', '13', '12', '1243', '2631', '0'), +('13', '13', '12', '1404', '2512', '0'), +('13', '13', '18', '1651', '1406', '0'), +('13', '13', '18', '4410', '1142', '0'), +('13', '13', '18', '1244', '586', '0'), +('13', '13', '18', '1221', '454', '0'), +('13', '13', '19', '68239', '2395', '0'), +('13', '13', '19', '1368', '2016', '0'), +('13', '13', '19', '1652', '1834', '0'), +('13', '13', '19', '4407', '1474', '0'), +('13', '13', '13', '14759', '6117', '0'), +('13', '13', '13', '11650', '5529', '0'), +('13', '13', '13', '13400', '3628', '0'), +('13', '13', '13', '11625', '3540', '0'), +('13', '13', '14', '14759', '6117', '0'), +('13', '13', '14', '10219', '5681', '0'), +('13', '13', '14', '11625', '3540', '0'), +('13', '13', '14', '9690', '3500', '0'), +('13', '13', '11', '14762', '2204', '0'), +('13', '13', '11', '9246', '1582', '0'), +('13', '13', '11', '13353', '1500', '0'), +('13', '13', '11', '20677', '450', '0'), +('13', '14', '22', '10323', '0', '0'), +('13', '14', '22', '9246', '0', '0'), +('13', '14', '22', '21509', '0', '0'), +('13', '14', '22', '8007', '0', '0'), +('13', '14', '1', '14702', '3750', '0'), +('13', '14', '1', '14701', '2862', '0'), +('13', '14', '1', '30361', '2640', '0'), +('13', '14', '1', '10082', '1111', '0'), +('13', '14', '2', '10143', '5368', '0'), +('13', '14', '2', '30363', '3700', '0'), +('13', '14', '2', '1239', '2952', '0'), +('13', '14', '2', '1211', '2584', '0'), +('13', '14', '3', '11052', '2537', '0'), +('13', '14', '3', '1212', '1487', '0'), +('13', '14', '3', '2707', '1216', '0'), +('13', '14', '3', '4505', '1214', '0'), +('13', '14', '5', '14703', '6050', '0'), +('13', '14', '5', '14557', '5858', '0'), +('13', '14', '5', '14700', '3318', '0'), +('13', '14', '5', '30362', '3140', '0'), +('13', '14', '8', '11603', '9832', '0'), +('13', '14', '8', '2349', '3554', '0'), +('13', '14', '8', '1274', '2558', '0'), +('13', '14', '8', '1216', '1501', '0'), +('13', '14', '6', '2708', '5553', '0'), +('13', '14', '6', '1557', '5310', '0'), +('13', '14', '6', '1905', '5047', '0'), +('13', '14', '6', '1542', '4893', '0'), +('13', '14', '17', '1253', '10082', '0'), +('13', '14', '17', '1644', '9212', '0'), +('13', '14', '17', '11641', '8118', '0'), +('13', '14', '17', '1240', '6478', '0'), +('13', '14', '7', '1362', '2624', '0'), +('13', '14', '7', '1321', '1746', '0'), +('13', '14', '7', '1241', '1688', '0'), +('13', '14', '7', '1648', '1670', '0'), +('13', '14', '9', '12805', '4256', '0'), +('13', '14', '9', '1274', '2558', '0'), +('13', '14', '9', '4344', '2051', '0'), +('13', '14', '9', '1242', '2025', '0'), +('13', '14', '15', '11687', '3870', '0'), +('13', '14', '15', '10150', '3004', '0'), +('13', '14', '15', '10163', '2300', '0'), +('13', '14', '15', '14651', '2224', '0'), +('13', '14', '20', '11666', '8311', '0'), +('13', '14', '20', '2742', '5100', '0'), +('13', '14', '20', '1217', '1496', '0'), +('13', '14', '20', '1647', '1334', '0'), +('13', '14', '12', '2923', '3074', '0'), +('13', '14', '12', '20655', '2946', '0'), +('13', '14', '12', '1243', '2716', '0'), +('13', '14', '12', '1404', '2512', '0'), +('13', '14', '18', '1651', '1442', '0'), +('13', '14', '18', '4410', '1142', '0'), +('13', '14', '18', '1244', '586', '0'), +('13', '14', '18', '1221', '454', '0'), +('13', '14', '19', '68239', '2431', '0'), +('13', '14', '19', '1368', '2016', '0'), +('13', '14', '19', '1652', '1834', '0'), +('13', '14', '19', '4407', '1582', '0'), +('13', '14', '13', '14759', '6189', '0'), +('13', '14', '13', '11650', '5620', '0'), +('13', '14', '13', '13400', '3676', '0'), +('13', '14', '13', '11625', '3542', '0'), +('13', '14', '14', '14759', '6189', '0'), +('13', '14', '14', '10219', '5681', '0'), +('13', '14', '14', '11625', '3542', '0'), +('13', '14', '14', '9690', '3500', '0'), +('13', '14', '11', '14762', '2204', '0'), +('13', '14', '11', '9246', '1703', '0'), +('13', '14', '11', '13353', '1500', '0'), +('13', '14', '11', '20677', '450', '0'), +('13', '15', '22', '10323', '0', '0'), +('13', '15', '22', '9246', '0', '0'), +('13', '15', '22', '21509', '0', '0'), +('13', '15', '22', '8007', '0', '0'), +('13', '15', '1', '14702', '3750', '0'), +('13', '15', '1', '14701', '2862', '0'), +('13', '15', '1', '30361', '2640', '0'), +('13', '15', '1', '10082', '1183', '0'), +('13', '15', '2', '10143', '5368', '0'), +('13', '15', '2', '30363', '3700', '0'), +('13', '15', '2', '1239', '3061', '0'), +('13', '15', '2', '1211', '2669', '0'), +('13', '15', '3', '11052', '2718', '0'), +('13', '15', '3', '1212', '1499', '0'), +('13', '15', '3', '2707', '1301', '0'), +('13', '15', '3', '4505', '1299', '0'), +('13', '15', '5', '14703', '6050', '0'), +('13', '15', '5', '14557', '5918', '0'), +('13', '15', '5', '14700', '3318', '0'), +('13', '15', '5', '30362', '3140', '0'), +('13', '15', '8', '11603', '9941', '0'), +('13', '15', '8', '2349', '3554', '0'), +('13', '15', '8', '1274', '2667', '0'), +('13', '15', '8', '1216', '1513', '0'), +('13', '15', '6', '2708', '5554', '0'), +('13', '15', '6', '1557', '5310', '0'), +('13', '15', '6', '1905', '5048', '0'), +('13', '15', '6', '1542', '5002', '0'), +('13', '15', '17', '1253', '10085', '0'), +('13', '15', '17', '1644', '9272', '0'), +('13', '15', '17', '11641', '8300', '0'), +('13', '15', '17', '1240', '6650', '0'), +('13', '15', '7', '1362', '2624', '0'), +('13', '15', '7', '1241', '1773', '0'), +('13', '15', '7', '1321', '1746', '0'), +('13', '15', '7', '1648', '1730', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '15', '9', '12805', '4256', '0'), +('13', '15', '9', '1274', '2667', '0'), +('13', '15', '9', '1649', '2062', '0'), +('13', '15', '9', '4344', '2051', '0'), +('13', '15', '15', '11687', '3930', '0'), +('13', '15', '15', '10150', '3004', '0'), +('13', '15', '15', '10163', '2300', '0'), +('13', '15', '15', '14651', '2224', '0'), +('13', '15', '20', '11666', '8312', '0'), +('13', '15', '20', '2742', '5103', '0'), +('13', '15', '20', '1217', '1508', '0'), +('13', '15', '20', '1647', '1334', '0'), +('13', '15', '12', '2923', '3074', '0'), +('13', '15', '12', '20655', '2971', '0'), +('13', '15', '12', '1243', '2800', '0'), +('13', '15', '12', '1404', '2512', '0'), +('13', '15', '18', '1651', '1479', '0'), +('13', '15', '18', '4410', '1142', '0'), +('13', '15', '18', '1244', '586', '0'), +('13', '15', '18', '1221', '454', '0'), +('13', '15', '19', '68239', '2467', '0'), +('13', '15', '19', '1368', '2016', '0'), +('13', '15', '19', '1652', '1834', '0'), +('13', '15', '19', '4407', '1691', '0'), +('13', '15', '13', '14759', '6260', '0'), +('13', '15', '13', '11650', '5710', '0'), +('13', '15', '13', '13400', '3725', '0'), +('13', '15', '13', '11625', '3545', '0'), +('13', '15', '14', '14759', '6260', '0'), +('13', '15', '14', '10219', '5681', '0'), +('13', '15', '14', '11625', '3545', '0'), +('13', '15', '14', '9690', '3500', '0'), +('13', '15', '11', '14762', '2204', '0'), +('13', '15', '11', '9246', '1824', '0'), +('13', '15', '11', '13353', '1500', '0'), +('13', '15', '11', '20677', '450', '0'), +('13', '16', '22', '10323', '0', '0'), +('13', '16', '22', '9246', '0', '0'), +('13', '16', '22', '21509', '0', '0'), +('13', '16', '22', '8007', '0', '0'), +('13', '16', '1', '14702', '3750', '0'), +('13', '16', '1', '14701', '2862', '0'), +('13', '16', '1', '30361', '2640', '0'), +('13', '16', '1', '10082', '1256', '0'), +('13', '16', '2', '10143', '5368', '0'), +('13', '16', '2', '30363', '3700', '0'), +('13', '16', '2', '1239', '3170', '0'), +('13', '16', '2', '1211', '2753', '0'), +('13', '16', '3', '11052', '2899', '0'), +('13', '16', '3', '1212', '1511', '0'), +('13', '16', '3', '2707', '1386', '0'), +('13', '16', '3', '4505', '1383', '0'), +('13', '16', '5', '14703', '6050', '0'), +('13', '16', '5', '14557', '5978', '0'), +('13', '16', '5', '14700', '3318', '0'), +('13', '16', '5', '30362', '3140', '0'), +('13', '16', '8', '11603', '10050', '0'), +('13', '16', '8', '2349', '3554', '0'), +('13', '16', '8', '1274', '2776', '0'), +('13', '16', '8', '1216', '1525', '0'), +('13', '16', '6', '2708', '5556', '0'), +('13', '16', '6', '1557', '5310', '0'), +('13', '16', '6', '1542', '5111', '0'), +('13', '16', '6', '1905', '5050', '0'), +('13', '16', '17', '1253', '10087', '0'), +('13', '16', '17', '1644', '9333', '0'), +('13', '16', '17', '11641', '8481', '0'), +('13', '16', '17', '1240', '6822', '0'), +('13', '16', '7', '1362', '2624', '0'), +('13', '16', '7', '1241', '1857', '0'), +('13', '16', '7', '1218', '1797', '0'), +('13', '16', '7', '1648', '1791', '0'), +('13', '16', '9', '12805', '4256', '0'), +('13', '16', '9', '1274', '2776', '0'), +('13', '16', '9', '1649', '2098', '0'), +('13', '16', '9', '4344', '2051', '0'), +('13', '16', '15', '11687', '3991', '0'), +('13', '16', '15', '10150', '3004', '0'), +('13', '16', '15', '10163', '2300', '0'), +('13', '16', '15', '14651', '2224', '0'), +('13', '16', '20', '11666', '8314', '0'), +('13', '16', '20', '2742', '5105', '0'), +('13', '16', '20', '1217', '1520', '0'), +('13', '16', '20', '1647', '1334', '0'), +('13', '16', '12', '2923', '3074', '0'), +('13', '16', '12', '20655', '2996', '0'), +('13', '16', '12', '1243', '2885', '0'), +('13', '16', '12', '1404', '2512', '0'), +('13', '16', '18', '1651', '1515', '0'), +('13', '16', '18', '4410', '1142', '0'), +('13', '16', '18', '1244', '586', '0'), +('13', '16', '18', '1221', '454', '0'), +('13', '16', '19', '68239', '2503', '0'), +('13', '16', '19', '1368', '2016', '0'), +('13', '16', '19', '1652', '1834', '0'), +('13', '16', '19', '4407', '1800', '0'), +('13', '16', '13', '14759', '6331', '0'), +('13', '16', '13', '11650', '5801', '0'), +('13', '16', '13', '13400', '3773', '0'), +('13', '16', '13', '11625', '3547', '0'), +('13', '16', '14', '14759', '6331', '0'), +('13', '16', '14', '10219', '5681', '0'), +('13', '16', '14', '11625', '3547', '0'), +('13', '16', '14', '9690', '3500', '0'), +('13', '16', '11', '14762', '2204', '0'), +('13', '16', '11', '9246', '1945', '0'), +('13', '16', '11', '13353', '1500', '0'), +('13', '16', '11', '20677', '450', '0'), +('13', '17', '22', '10323', '0', '0'), +('13', '17', '22', '9246', '0', '0'), +('13', '17', '22', '21509', '0', '0'), +('13', '17', '22', '8007', '0', '0'), +('13', '17', '1', '14702', '3750', '0'), +('13', '17', '1', '14701', '2862', '0'), +('13', '17', '1', '30361', '2640', '0'), +('13', '17', '1', '10082', '1328', '0'), +('13', '17', '2', '10143', '5368', '0'), +('13', '17', '2', '30363', '3700', '0'), +('13', '17', '2', '1239', '3278', '0'), +('13', '17', '2', '1211', '2838', '0'), +('13', '17', '3', '11052', '3080', '0'), +('13', '17', '3', '1212', '1523', '0'), +('13', '17', '3', '2707', '1470', '0'), +('13', '17', '3', '4505', '1468', '0'), +('13', '17', '5', '14703', '6050', '0'), +('13', '17', '5', '14557', '6039', '0'), +('13', '17', '5', '14700', '3318', '0'), +('13', '17', '5', '30362', '3140', '0'), +('13', '17', '8', '11603', '10159', '0'), +('13', '17', '8', '2349', '3554', '0'), +('13', '17', '8', '1274', '2884', '0'), +('13', '17', '8', '1216', '1537', '0'), +('13', '17', '6', '2708', '5557', '0'), +('13', '17', '6', '1557', '5310', '0'), +('13', '17', '6', '1542', '5220', '0'), +('13', '17', '6', '1905', '5051', '0'), +('13', '17', '17', '1253', '10089', '0'), +('13', '17', '17', '1644', '9393', '0'), +('13', '17', '17', '11641', '8662', '0'), +('13', '17', '17', '1240', '6994', '0'), +('13', '17', '7', '1362', '2624', '0'), +('13', '17', '7', '1241', '1942', '0'), +('13', '17', '7', '1218', '1882', '0'), +('13', '17', '7', '1648', '1851', '0'), +('13', '17', '9', '12805', '4256', '0'), +('13', '17', '9', '1274', '2884', '0'), +('13', '17', '9', '1649', '2134', '0'), +('13', '17', '9', '4344', '2051', '0'), +('13', '17', '15', '11687', '4051', '0'), +('13', '17', '15', '10150', '3004', '0'), +('13', '17', '15', '10163', '2300', '0'), +('13', '17', '15', '14651', '2224', '0'), +('13', '17', '20', '11666', '8316', '0'), +('13', '17', '20', '2742', '5108', '0'), +('13', '17', '20', '1217', '1532', '0'), +('13', '17', '20', '1647', '1334', '0'), +('13', '17', '12', '2923', '3074', '0'), +('13', '17', '12', '20655', '3020', '0'), +('13', '17', '12', '1243', '2970', '0'), +('13', '17', '12', '1404', '2512', '0'), +('13', '17', '18', '1651', '1551', '0'), +('13', '17', '18', '4410', '1142', '0'), +('13', '17', '18', '1244', '586', '0'), +('13', '17', '18', '1221', '454', '0'), +('13', '17', '19', '68239', '2540', '0'), +('13', '17', '19', '1368', '2016', '0'), +('13', '17', '19', '4407', '1908', '0'), +('13', '17', '19', '1652', '1834', '0'), +('13', '17', '13', '14759', '6403', '0'), +('13', '17', '13', '11650', '5892', '0'), +('13', '17', '13', '13400', '3821', '0'), +('13', '17', '13', '11625', '3549', '0'), +('13', '17', '14', '14759', '6403', '0'), +('13', '17', '14', '10219', '5681', '0'), +('13', '17', '14', '11625', '3549', '0'), +('13', '17', '14', '9690', '3500', '0'), +('13', '17', '11', '14762', '2204', '0'), +('13', '17', '11', '9246', '2066', '0'), +('13', '17', '11', '13353', '1500', '0'), +('13', '17', '11', '20677', '450', '0'), +('13', '18', '22', '10323', '0', '0'), +('13', '18', '22', '9246', '0', '0'), +('13', '18', '22', '21509', '0', '0'), +('13', '18', '22', '8007', '0', '0'), +('13', '18', '1', '14702', '3750', '0'), +('13', '18', '1', '14701', '2862', '0'), +('13', '18', '1', '30361', '2640', '0'), +('13', '18', '1', '10082', '1401', '0'), +('13', '18', '2', '10143', '5368', '0'), +('13', '18', '2', '30363', '3700', '0'), +('13', '18', '2', '1239', '3387', '0'), +('13', '18', '2', '1211', '2922', '0'), +('13', '18', '3', '11052', '3262', '0'), +('13', '18', '3', '2707', '1555', '0'), +('13', '18', '3', '4505', '1552', '0'), +('13', '18', '3', '1212', '1536', '0'), +('13', '18', '5', '14557', '6099', '0'), +('13', '18', '5', '14703', '6050', '0'), +('13', '18', '5', '14700', '3318', '0'), +('13', '18', '5', '30362', '3140', '0'), +('13', '18', '8', '11603', '10267', '0'), +('13', '18', '8', '2349', '3554', '0'), +('13', '18', '8', '1274', '2993', '0'), +('13', '18', '8', '1216', '1549', '0'), +('13', '18', '6', '2708', '5558', '0'), +('13', '18', '6', '1542', '5328', '0'), +('13', '18', '6', '1557', '5310', '0'), +('13', '18', '6', '1905', '5052', '0'), +('13', '18', '17', '1253', '10092', '0'), +('13', '18', '17', '1644', '9454', '0'), +('13', '18', '17', '11641', '8843', '0'), +('13', '18', '17', '1240', '7166', '0'), +('13', '18', '7', '1362', '2624', '0'), +('13', '18', '7', '1241', '2026', '0'), +('13', '18', '7', '1218', '1966', '0'), +('13', '18', '7', '1648', '1911', '0'), +('13', '18', '9', '12805', '4256', '0'), +('13', '18', '9', '1274', '2993', '0'), +('13', '18', '9', '1649', '2170', '0'), +('13', '18', '9', '4344', '2051', '0'), +('13', '18', '15', '11687', '4111', '0'), +('13', '18', '15', '10150', '3004', '0'), +('13', '18', '15', '10163', '2300', '0'), +('13', '18', '15', '14651', '2224', '0'), +('13', '18', '20', '11666', '8317', '0'), +('13', '18', '20', '2742', '5110', '0'), +('13', '18', '20', '1217', '1544', '0'), +('13', '18', '20', '1647', '1334', '0'), +('13', '18', '12', '2923', '3074', '0'), +('13', '18', '12', '1243', '3054', '0'), +('13', '18', '12', '20655', '3045', '0'), +('13', '18', '12', '1404', '2512', '0'), +('13', '18', '18', '1651', '1587', '0'), +('13', '18', '18', '4410', '1142', '0'), +('13', '18', '18', '1244', '586', '0'), +('13', '18', '18', '1221', '454', '0'), +('13', '18', '19', '68239', '2576', '0'), +('13', '18', '19', '4407', '2017', '0'), +('13', '18', '19', '1368', '2016', '0'), +('13', '18', '19', '1652', '1834', '0'), +('13', '18', '13', '14759', '6474', '0'), +('13', '18', '13', '11650', '5982', '0'), +('13', '18', '13', '13400', '3870', '0'), +('13', '18', '13', '11625', '3551', '0'), +('13', '18', '14', '14759', '6474', '0'), +('13', '18', '14', '10219', '5681', '0'), +('13', '18', '14', '11625', '3551', '0'), +('13', '18', '14', '9690', '3500', '0'), +('13', '18', '11', '14762', '2204', '0'), +('13', '18', '11', '9246', '2186', '0'), +('13', '18', '11', '13353', '1500', '0'), +('13', '18', '11', '20677', '450', '0'), +('13', '19', '22', '10323', '0', '0'), +('13', '19', '22', '9246', '0', '0'), +('13', '19', '22', '21509', '0', '0'), +('13', '19', '22', '8007', '0', '0'), +('13', '19', '1', '14702', '3750', '0'), +('13', '19', '1', '14701', '2862', '0'), +('13', '19', '1', '30361', '2640', '0'), +('13', '19', '1', '10082', '1473', '0'), +('13', '19', '2', '10143', '5368', '0'), +('13', '19', '2', '30363', '3700', '0'), +('13', '19', '2', '1239', '3496', '0'), +('13', '19', '2', '1211', '3007', '0'), +('13', '19', '3', '11052', '3443', '0'), +('13', '19', '3', '2707', '1639', '0'), +('13', '19', '3', '4505', '1637', '0'), +('13', '19', '3', '1212', '1548', '0'), +('13', '19', '5', '14557', '6160', '0'), +('13', '19', '5', '14703', '6050', '0'), +('13', '19', '5', '14700', '3318', '0'), +('13', '19', '5', '30362', '3140', '0'), +('13', '19', '8', '11603', '10376', '0'), +('13', '19', '8', '2349', '3554', '0'), +('13', '19', '8', '1274', '3102', '0'), +('13', '19', '8', '1216', '1561', '0'), +('13', '19', '6', '2708', '5559', '0'), +('13', '19', '6', '1542', '5437', '0'), +('13', '19', '6', '1557', '5310', '0'), +('13', '19', '6', '1905', '5053', '0'), +('13', '19', '17', '1253', '10094', '0'), +('13', '19', '17', '1644', '9514', '0'), +('13', '19', '17', '11641', '9024', '0'), +('13', '19', '17', '1240', '7338', '0'), +('13', '19', '7', '1362', '2624', '0'), +('13', '19', '7', '1241', '2111', '0'), +('13', '19', '7', '1218', '2051', '0'), +('13', '19', '7', '1648', '1972', '0'), +('13', '19', '9', '12805', '4256', '0'), +('13', '19', '9', '1274', '3102', '0'), +('13', '19', '9', '1649', '2207', '0'), +('13', '19', '9', '4344', '2051', '0'), +('13', '19', '15', '11687', '4172', '0'), +('13', '19', '15', '10150', '3004', '0'), +('13', '19', '15', '10163', '2300', '0'), +('13', '19', '15', '14651', '2224', '0'), +('13', '19', '20', '11666', '8319', '0'), +('13', '19', '20', '2742', '5112', '0'), +('13', '19', '20', '1217', '1556', '0'), +('13', '19', '20', '1647', '1334', '0'), +('13', '19', '12', '1243', '3139', '0'), +('13', '19', '12', '2923', '3074', '0'), +('13', '19', '12', '20655', '3070', '0'), +('13', '19', '12', '1404', '2512', '0'), +('13', '19', '18', '1651', '1624', '0'), +('13', '19', '18', '4410', '1142', '0'), +('13', '19', '18', '1244', '586', '0'), +('13', '19', '18', '1221', '454', '0'), +('13', '19', '19', '68239', '2612', '0'), +('13', '19', '19', '4407', '2126', '0'), +('13', '19', '19', '1368', '2016', '0'), +('13', '19', '19', '1652', '1834', '0'), +('13', '19', '13', '14759', '6545', '0'), +('13', '19', '13', '11650', '6073', '0'), +('13', '19', '13', '13400', '3918', '0'), +('13', '19', '13', '11625', '3553', '0'), +('13', '19', '14', '14759', '6545', '0'), +('13', '19', '14', '10219', '5681', '0'), +('13', '19', '14', '11625', '3553', '0'), +('13', '19', '14', '9690', '3500', '0'), +('13', '19', '11', '9246', '2307', '0'), +('13', '19', '11', '14762', '2204', '0'), +('13', '19', '11', '13353', '1500', '0'), +('13', '19', '11', '20677', '450', '0'), +('13', '20', '22', '10323', '0', '0'), +('13', '20', '22', '9246', '0', '0'), +('13', '20', '22', '21509', '0', '0'), +('13', '20', '22', '8007', '0', '0'), +('13', '20', '1', '14702', '3750', '0'), +('13', '20', '1', '14701', '2862', '0'), +('13', '20', '1', '30361', '2640', '0'), +('13', '20', '1', '10082', '1546', '0'), +('13', '20', '2', '10143', '5368', '0'), +('13', '20', '2', '30363', '3700', '0'), +('13', '20', '2', '1239', '3605', '0'), +('13', '20', '2', '1211', '3091', '0'), +('13', '20', '3', '11052', '3624', '0'), +('13', '20', '3', '2707', '1724', '0'), +('13', '20', '3', '4505', '1721', '0'), +('13', '20', '3', '1212', '1560', '0'), +('13', '20', '5', '14557', '6220', '0'), +('13', '20', '5', '14703', '6050', '0'), +('13', '20', '5', '14700', '3318', '0'), +('13', '20', '5', '30362', '3140', '0'), +('13', '20', '8', '11603', '10485', '0'), +('13', '20', '8', '2349', '3554', '0'), +('13', '20', '8', '1274', '3211', '0'), +('13', '20', '8', '1216', '1573', '0'), +('13', '20', '6', '2708', '5560', '0'), +('13', '20', '6', '1542', '5546', '0'), +('13', '20', '6', '1557', '5310', '0'), +('13', '20', '6', '1905', '5054', '0'), +('13', '20', '17', '1253', '10097', '0'), +('13', '20', '17', '1644', '9574', '0'), +('13', '20', '17', '11641', '9206', '0'), +('13', '20', '17', '1240', '7510', '0'), +('13', '20', '7', '1362', '2624', '0'), +('13', '20', '7', '1241', '2195', '0'), +('13', '20', '7', '1218', '2135', '0'), +('13', '20', '7', '1648', '2032', '0'), +('13', '20', '9', '12805', '4256', '0'), +('13', '20', '9', '1274', '3211', '0'), +('13', '20', '9', '1649', '2243', '0'), +('13', '20', '9', '4344', '2051', '0'), +('13', '20', '15', '11687', '4232', '0'), +('13', '20', '15', '10150', '3004', '0'), +('13', '20', '15', '10163', '2300', '0'), +('13', '20', '15', '14651', '2224', '0'), +('13', '20', '20', '11666', '8321', '0'), +('13', '20', '20', '2742', '5115', '0'), +('13', '20', '20', '1217', '1568', '0'), +('13', '20', '20', '1647', '1334', '0'), +('13', '20', '12', '1243', '3223', '0'), +('13', '20', '12', '20655', '3094', '0'), +('13', '20', '12', '2923', '3074', '0'), +('13', '20', '12', '1404', '2512', '0'), +('13', '20', '18', '1651', '1660', '0'), +('13', '20', '18', '4410', '1142', '0'), +('13', '20', '18', '1244', '586', '0'), +('13', '20', '18', '1221', '454', '0'), +('13', '20', '19', '68239', '2648', '0'), +('13', '20', '19', '4407', '2235', '0'), +('13', '20', '19', '1368', '2016', '0'), +('13', '20', '19', '1652', '1834', '0'), +('13', '20', '13', '14759', '6616', '0'), +('13', '20', '13', '11650', '6163', '0'), +('13', '20', '13', '13400', '3966', '0'), +('13', '20', '13', '11625', '3556', '0'), +('13', '20', '14', '14759', '6616', '0'), +('13', '20', '14', '10219', '5681', '0'), +('13', '20', '14', '11625', '3556', '0'), +('13', '20', '14', '9690', '3500', '0'), +('13', '20', '11', '9246', '2428', '0'), +('13', '20', '11', '14762', '2204', '0'), +('13', '20', '11', '13353', '1500', '0'), +('13', '20', '11', '20677', '450', '0'), +('13', '21', '22', '10323', '0', '0'), +('13', '21', '22', '9246', '0', '0'), +('13', '21', '22', '21509', '0', '0'), +('13', '21', '22', '8007', '0', '0'), +('13', '21', '1', '14702', '3750', '0'), +('13', '21', '1', '14701', '2862', '0'), +('13', '21', '1', '30361', '2640', '0'), +('13', '21', '1', '10082', '1618', '0'), +('13', '21', '2', '10143', '5368', '0'), +('13', '21', '2', '1239', '3713', '0'), +('13', '21', '2', '30363', '3700', '0'), +('13', '21', '2', '1211', '3176', '0'), +('13', '21', '3', '11052', '3805', '0'), +('13', '21', '3', '2707', '1808', '0'), +('13', '21', '3', '4505', '1806', '0'), +('13', '21', '3', '1212', '1572', '0'), +('13', '21', '5', '14557', '6280', '0'), +('13', '21', '5', '14703', '6050', '0'), +('13', '21', '5', '14700', '3318', '0'), +('13', '21', '5', '30362', '3140', '0'), +('13', '21', '8', '11603', '10594', '0'), +('13', '21', '8', '2349', '3554', '0'), +('13', '21', '8', '1274', '3319', '0'), +('13', '21', '8', '1216', '1585', '0'), +('13', '21', '6', '1542', '5654', '0'), +('13', '21', '6', '2708', '5562', '0'), +('13', '21', '6', '1557', '5310', '0'), +('13', '21', '6', '1905', '5056', '0'), +('13', '21', '17', '1253', '10099', '0'), +('13', '21', '17', '1644', '9635', '0'), +('13', '21', '17', '11641', '9387', '0'), +('13', '21', '17', '1240', '7682', '0'), +('13', '21', '7', '1362', '2624', '0'), +('13', '21', '7', '1241', '2280', '0'), +('13', '21', '7', '1218', '2220', '0'), +('13', '21', '7', '1648', '2093', '0'), +('13', '21', '9', '12805', '4256', '0'), +('13', '21', '9', '1274', '3319', '0'), +('13', '21', '9', '1649', '2279', '0'), +('13', '21', '9', '4344', '2051', '0'), +('13', '21', '15', '11687', '4293', '0'), +('13', '21', '15', '10150', '3004', '0'), +('13', '21', '15', '10163', '2300', '0'), +('13', '21', '15', '14651', '2224', '0'), +('13', '21', '20', '11666', '8322', '0'), +('13', '21', '20', '2742', '5117', '0'), +('13', '21', '20', '1217', '1580', '0'), +('13', '21', '20', '1647', '1334', '0'), +('13', '21', '12', '1243', '3308', '0'), +('13', '21', '12', '20655', '3119', '0'), +('13', '21', '12', '2923', '3074', '0'), +('13', '21', '12', '1404', '2512', '0'), +('13', '21', '18', '1651', '1696', '0'), +('13', '21', '18', '4410', '1142', '0'), +('13', '21', '18', '1244', '586', '0'), +('13', '21', '18', '1221', '454', '0'), +('13', '21', '19', '68239', '2684', '0'), +('13', '21', '19', '4407', '2343', '0'), +('13', '21', '19', '1368', '2016', '0'), +('13', '21', '19', '1652', '1834', '0'), +('13', '21', '13', '14759', '6688', '0'), +('13', '21', '13', '11650', '6254', '0'), +('13', '21', '13', '13400', '4015', '0'), +('13', '21', '13', '11625', '3558', '0'), +('13', '21', '14', '14759', '6688', '0'), +('13', '21', '14', '10219', '5681', '0'), +('13', '21', '14', '11625', '3558', '0'), +('13', '21', '14', '9690', '3500', '0'), +('13', '21', '11', '9246', '2549', '0'), +('13', '21', '11', '14762', '2204', '0'), +('13', '21', '11', '13353', '1500', '0'), +('13', '21', '11', '20677', '450', '0'), +('13', '22', '22', '10323', '0', '0'), +('13', '22', '22', '9246', '0', '0'), +('13', '22', '22', '21509', '0', '0'), +('13', '22', '22', '8007', '0', '0'), +('13', '22', '1', '14702', '3750', '0'), +('13', '22', '1', '14701', '2862', '0'), +('13', '22', '1', '30361', '2640', '0'), +('13', '22', '1', '10082', '1691', '0'), +('13', '22', '2', '10143', '5368', '0'), +('13', '22', '2', '1239', '3822', '0'), +('13', '22', '2', '30363', '3700', '0'), +('13', '22', '2', '1211', '3261', '0'), +('13', '22', '3', '11052', '3986', '0'), +('13', '22', '3', '2707', '1893', '0'), +('13', '22', '3', '4505', '1891', '0'), +('13', '22', '3', '1212', '1584', '0'), +('13', '22', '5', '14557', '6341', '0'), +('13', '22', '5', '14703', '6050', '0'), +('13', '22', '5', '14700', '3318', '0'), +('13', '22', '5', '30362', '3140', '0'), +('13', '22', '8', '11603', '10702', '0'), +('13', '22', '8', '2349', '3554', '0'), +('13', '22', '8', '1274', '3428', '0'), +('13', '22', '8', '1216', '1597', '0'), +('13', '22', '6', '1542', '5763', '0'), +('13', '22', '6', '2708', '5563', '0'), +('13', '22', '6', '1557', '5310', '0'), +('13', '22', '6', '1905', '5057', '0'), +('13', '22', '17', '1253', '10101', '0'), +('13', '22', '17', '1644', '9695', '0'), +('13', '22', '17', '11641', '9568', '0'), +('13', '22', '17', '1240', '7854', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '22', '7', '1362', '2624', '0'), +('13', '22', '7', '1241', '2364', '0'), +('13', '22', '7', '1218', '2304', '0'), +('13', '22', '7', '1648', '2153', '0'), +('13', '22', '9', '12805', '4256', '0'), +('13', '22', '9', '1274', '3428', '0'), +('13', '22', '9', '1649', '2315', '0'), +('13', '22', '9', '4344', '2051', '0'), +('13', '22', '15', '11687', '4353', '0'), +('13', '22', '15', '10150', '3004', '0'), +('13', '22', '15', '10163', '2300', '0'), +('13', '22', '15', '14651', '2224', '0'), +('13', '22', '20', '11666', '8324', '0'), +('13', '22', '20', '2742', '5120', '0'), +('13', '22', '20', '1217', '1592', '0'), +('13', '22', '20', '1647', '1334', '0'), +('13', '22', '12', '1243', '3392', '0'), +('13', '22', '12', '20655', '3144', '0'), +('13', '22', '12', '2923', '3074', '0'), +('13', '22', '12', '1404', '2512', '0'), +('13', '22', '18', '1651', '1732', '0'), +('13', '22', '18', '4410', '1142', '0'), +('13', '22', '18', '1244', '586', '0'), +('13', '22', '18', '1221', '454', '0'), +('13', '22', '19', '68239', '2721', '0'), +('13', '22', '19', '4407', '2452', '0'), +('13', '22', '19', '1368', '2016', '0'), +('13', '22', '19', '1652', '1834', '0'), +('13', '22', '13', '14759', '6759', '0'), +('13', '22', '13', '11650', '6345', '0'), +('13', '22', '13', '13400', '4063', '0'), +('13', '22', '13', '11625', '3560', '0'), +('13', '22', '14', '14759', '6759', '0'), +('13', '22', '14', '10219', '5681', '0'), +('13', '22', '14', '11625', '3560', '0'), +('13', '22', '14', '13987', '3529', '0'), +('13', '22', '11', '9246', '2670', '0'), +('13', '22', '11', '14762', '2204', '0'), +('13', '22', '11', '13353', '1500', '0'), +('13', '22', '11', '20677', '450', '0'), +('13', '23', '22', '10323', '0', '0'), +('13', '23', '22', '9246', '0', '0'), +('13', '23', '22', '21509', '0', '0'), +('13', '23', '22', '8007', '0', '0'), +('13', '23', '1', '14702', '3750', '0'), +('13', '23', '1', '14701', '2862', '0'), +('13', '23', '1', '30361', '2640', '0'), +('13', '23', '1', '10082', '1763', '0'), +('13', '23', '2', '10143', '5368', '0'), +('13', '23', '2', '1239', '3931', '0'), +('13', '23', '2', '30363', '3700', '0'), +('13', '23', '2', '1211', '3345', '0'), +('13', '23', '3', '11052', '4168', '0'), +('13', '23', '3', '2707', '1977', '0'), +('13', '23', '3', '4505', '1975', '0'), +('13', '23', '3', '1212', '1596', '0'), +('13', '23', '5', '14557', '6401', '0'), +('13', '23', '5', '14703', '6050', '0'), +('13', '23', '5', '14700', '3318', '0'), +('13', '23', '5', '30362', '3140', '0'), +('13', '23', '8', '11603', '10811', '0'), +('13', '23', '8', '2349', '3554', '0'), +('13', '23', '8', '1274', '3537', '0'), +('13', '23', '8', '1216', '1609', '0'), +('13', '23', '6', '1542', '5872', '0'), +('13', '23', '6', '2708', '5564', '0'), +('13', '23', '6', '1557', '5310', '0'), +('13', '23', '6', '1905', '5058', '0'), +('13', '23', '17', '1253', '10104', '0'), +('13', '23', '17', '1644', '9756', '0'), +('13', '23', '17', '11641', '9749', '0'), +('13', '23', '17', '1240', '8026', '0'), +('13', '23', '7', '1362', '2624', '0'), +('13', '23', '7', '1241', '2449', '0'), +('13', '23', '7', '1218', '2389', '0'), +('13', '23', '7', '1648', '2213', '0'), +('13', '23', '9', '12805', '4256', '0'), +('13', '23', '9', '1274', '3537', '0'), +('13', '23', '9', '1649', '2352', '0'), +('13', '23', '9', '4344', '2051', '0'), +('13', '23', '15', '11687', '4413', '0'), +('13', '23', '15', '10150', '3004', '0'), +('13', '23', '15', '10163', '2300', '0'), +('13', '23', '15', '14651', '2224', '0'), +('13', '23', '20', '11666', '8326', '0'), +('13', '23', '20', '2742', '5122', '0'), +('13', '23', '20', '1217', '1604', '0'), +('13', '23', '20', '1647', '1334', '0'), +('13', '23', '12', '1243', '3477', '0'), +('13', '23', '12', '20655', '3168', '0'), +('13', '23', '12', '2923', '3074', '0'), +('13', '23', '12', '1404', '2512', '0'), +('13', '23', '18', '1651', '1769', '0'), +('13', '23', '18', '4410', '1142', '0'), +('13', '23', '18', '1244', '586', '0'), +('13', '23', '18', '1221', '454', '0'), +('13', '23', '19', '68239', '2757', '0'), +('13', '23', '19', '4407', '2561', '0'), +('13', '23', '19', '1368', '2016', '0'), +('13', '23', '19', '1652', '1834', '0'), +('13', '23', '13', '14759', '6830', '0'), +('13', '23', '13', '11650', '6435', '0'), +('13', '23', '13', '13400', '4111', '0'), +('13', '23', '13', '6359', '3631', '0'), +('13', '23', '14', '14759', '6830', '0'), +('13', '23', '14', '10219', '5681', '0'), +('13', '23', '14', '6359', '3631', '0'), +('13', '23', '14', '13987', '3589', '0'), +('13', '23', '11', '9246', '2790', '0'), +('13', '23', '11', '14762', '2204', '0'), +('13', '23', '11', '13353', '1500', '0'), +('13', '23', '11', '20677', '450', '0'), +('13', '24', '22', '10323', '0', '0'), +('13', '24', '22', '9246', '0', '0'), +('13', '24', '22', '21509', '0', '0'), +('13', '24', '22', '8007', '0', '0'), +('13', '24', '1', '14702', '3750', '0'), +('13', '24', '1', '14701', '2862', '0'), +('13', '24', '1', '30361', '2640', '0'), +('13', '24', '1', '10082', '1836', '0'), +('13', '24', '2', '10143', '5368', '0'), +('13', '24', '2', '1239', '4039', '0'), +('13', '24', '2', '30363', '3700', '0'), +('13', '24', '2', '1211', '3430', '0'), +('13', '24', '3', '11052', '4349', '0'), +('13', '24', '3', '2707', '2062', '0'), +('13', '24', '3', '4505', '2060', '0'), +('13', '24', '3', '1212', '1608', '0'), +('13', '24', '5', '14557', '6462', '0'), +('13', '24', '5', '14703', '6050', '0'), +('13', '24', '5', '14700', '3318', '0'), +('13', '24', '5', '30362', '3140', '0'), +('13', '24', '8', '11603', '10920', '0'), +('13', '24', '8', '1274', '3646', '0'), +('13', '24', '8', '2349', '3554', '0'), +('13', '24', '8', '1057', '1648', '0'), +('13', '24', '6', '1542', '5981', '0'), +('13', '24', '6', '2708', '5565', '0'), +('13', '24', '6', '1557', '5310', '0'), +('13', '24', '6', '1905', '5059', '0'), +('13', '24', '17', '1253', '10106', '0'), +('13', '24', '17', '11641', '9930', '0'), +('13', '24', '17', '1644', '9816', '0'), +('13', '24', '17', '1240', '8198', '0'), +('13', '24', '7', '1362', '2624', '0'), +('13', '24', '7', '1241', '2534', '0'), +('13', '24', '7', '1218', '2474', '0'), +('13', '24', '7', '1648', '2274', '0'), +('13', '24', '9', '12805', '4256', '0'), +('13', '24', '9', '1274', '3646', '0'), +('13', '24', '9', '1649', '2388', '0'), +('13', '24', '9', '4344', '2051', '0'), +('13', '24', '15', '11687', '4474', '0'), +('13', '24', '15', '10150', '3004', '0'), +('13', '24', '15', '10163', '2300', '0'), +('13', '24', '15', '14651', '2224', '0'), +('13', '24', '20', '11666', '8327', '0'), +('13', '24', '20', '2742', '5124', '0'), +('13', '24', '20', '1217', '1616', '0'), +('13', '24', '20', '1647', '1334', '0'), +('13', '24', '12', '1243', '3561', '0'), +('13', '24', '12', '20655', '3193', '0'), +('13', '24', '12', '2923', '3074', '0'), +('13', '24', '12', '1404', '2512', '0'), +('13', '24', '18', '1651', '1805', '0'), +('13', '24', '18', '4410', '1142', '0'), +('13', '24', '18', '1244', '586', '0'), +('13', '24', '18', '1221', '454', '0'), +('13', '24', '19', '68239', '2793', '0'), +('13', '24', '19', '4407', '2669', '0'), +('13', '24', '19', '1368', '2016', '0'), +('13', '24', '19', '1652', '1834', '0'), +('13', '24', '13', '14759', '6901', '0'), +('13', '24', '13', '11650', '6526', '0'), +('13', '24', '13', '13400', '4160', '0'), +('13', '24', '13', '6359', '3752', '0'), +('13', '24', '14', '14759', '6901', '0'), +('13', '24', '14', '10219', '5681', '0'), +('13', '24', '14', '6359', '3752', '0'), +('13', '24', '14', '13987', '3650', '0'), +('13', '24', '11', '9246', '2911', '0'), +('13', '24', '11', '14762', '2204', '0'), +('13', '24', '11', '13353', '1500', '0'), +('13', '24', '11', '20677', '450', '0'), +('13', '25', '22', '10323', '0', '0'), +('13', '25', '22', '9246', '0', '0'), +('13', '25', '22', '21509', '0', '0'), +('13', '25', '22', '8007', '0', '0'), +('13', '25', '1', '14702', '3750', '0'), +('13', '25', '1', '14701', '2862', '0'), +('13', '25', '1', '30361', '2640', '0'), +('13', '25', '1', '10082', '1908', '0'), +('13', '25', '2', '10143', '5368', '0'), +('13', '25', '2', '1239', '4148', '0'), +('13', '25', '2', '30363', '3700', '0'), +('13', '25', '2', '1211', '3514', '0'), +('13', '25', '3', '11052', '4530', '0'), +('13', '25', '3', '2707', '2147', '0'), +('13', '25', '3', '4505', '2144', '0'), +('13', '25', '3', '1212', '1620', '0'), +('13', '25', '5', '14557', '6522', '0'), +('13', '25', '5', '14703', '6050', '0'), +('13', '25', '5', '14700', '3318', '0'), +('13', '25', '5', '11646', '3226', '0'), +('13', '25', '8', '11603', '11028', '0'), +('13', '25', '8', '1274', '3754', '0'), +('13', '25', '8', '2349', '3554', '0'), +('13', '25', '8', '1057', '1708', '0'), +('13', '25', '6', '1542', '6089', '0'), +('13', '25', '6', '2708', '5566', '0'), +('13', '25', '6', '1557', '5310', '0'), +('13', '25', '6', '1905', '5060', '0'), +('13', '25', '17', '11641', '10112', '0'), +('13', '25', '17', '1253', '10109', '0'), +('13', '25', '17', '1644', '9876', '0'), +('13', '25', '17', '1240', '8370', '0'), +('13', '25', '7', '1362', '2624', '0'), +('13', '25', '7', '1241', '2618', '0'), +('13', '25', '7', '1218', '2558', '0'), +('13', '25', '7', '1648', '2334', '0'), +('13', '25', '9', '12805', '4256', '0'), +('13', '25', '9', '1274', '3754', '0'), +('13', '25', '9', '1649', '2424', '0'), +('13', '25', '9', '4344', '2051', '0'), +('13', '25', '15', '11687', '4534', '0'), +('13', '25', '15', '10150', '3004', '0'), +('13', '25', '15', '10163', '2300', '0'), +('13', '25', '15', '14651', '2224', '0'), +('13', '25', '20', '11666', '8329', '0'), +('13', '25', '20', '2742', '5127', '0'), +('13', '25', '20', '1217', '1629', '0'), +('13', '25', '20', '1647', '1334', '0'), +('13', '25', '12', '1243', '3646', '0'), +('13', '25', '12', '20655', '3218', '0'), +('13', '25', '12', '2923', '3074', '0'), +('13', '25', '12', '2336', '2522', '0'), +('13', '25', '18', '1651', '1841', '0'), +('13', '25', '18', '4410', '1142', '0'), +('13', '25', '18', '1244', '586', '0'), +('13', '25', '18', '1221', '454', '0'), +('13', '25', '19', '68239', '2829', '0'), +('13', '25', '19', '4407', '2778', '0'), +('13', '25', '19', '1368', '2016', '0'), +('13', '25', '19', '1652', '1834', '0'), +('13', '25', '13', '14759', '6973', '0'), +('13', '25', '13', '11650', '6616', '0'), +('13', '25', '13', '13400', '4208', '0'), +('13', '25', '13', '6359', '3873', '0'), +('13', '25', '14', '14759', '6973', '0'), +('13', '25', '14', '10219', '5681', '0'), +('13', '25', '14', '6359', '3873', '0'), +('13', '25', '14', '13987', '3710', '0'), +('13', '25', '11', '9246', '3032', '0'), +('13', '25', '11', '14762', '2204', '0'), +('13', '25', '11', '13353', '1500', '0'), +('13', '25', '11', '20677', '450', '0'), +('13', '26', '22', '10323', '0', '0'), +('13', '26', '22', '9246', '0', '0'), +('13', '26', '22', '21509', '0', '0'), +('13', '26', '22', '8007', '0', '0'), +('13', '26', '1', '14702', '3750', '0'), +('13', '26', '1', '14701', '2862', '0'), +('13', '26', '1', '30361', '2640', '0'), +('13', '26', '1', '10082', '1981', '0'), +('13', '26', '2', '10143', '5368', '0'), +('13', '26', '2', '1239', '4257', '0'), +('13', '26', '2', '30363', '3700', '0'), +('13', '26', '2', '1211', '3599', '0'), +('13', '26', '3', '11052', '4711', '0'), +('13', '26', '3', '2707', '2231', '0'), +('13', '26', '3', '4505', '2229', '0'), +('13', '26', '3', '1212', '1632', '0'), +('13', '26', '5', '14557', '6582', '0'), +('13', '26', '5', '14703', '6050', '0'), +('13', '26', '5', '11646', '3383', '0'), +('13', '26', '5', '14700', '3318', '0'), +('13', '26', '8', '11603', '11137', '0'), +('13', '26', '8', '1274', '3863', '0'), +('13', '26', '8', '2349', '3554', '0'), +('13', '26', '8', '1057', '1769', '0'), +('13', '26', '6', '1542', '6198', '0'), +('13', '26', '6', '2708', '5568', '0'), +('13', '26', '6', '1557', '5310', '0'), +('13', '26', '6', '1905', '5062', '0'), +('13', '26', '17', '11641', '10293', '0'), +('13', '26', '17', '1253', '10111', '0'), +('13', '26', '17', '1644', '9937', '0'), +('13', '26', '17', '1240', '8542', '0'), +('13', '26', '7', '1241', '2703', '0'), +('13', '26', '7', '1218', '2643', '0'), +('13', '26', '7', '1362', '2624', '0'), +('13', '26', '7', '1648', '2395', '0'), +('13', '26', '9', '12805', '4256', '0'), +('13', '26', '9', '1274', '3863', '0'), +('13', '26', '9', '1649', '2460', '0'), +('13', '26', '9', '4344', '2051', '0'), +('13', '26', '15', '11687', '4595', '0'), +('13', '26', '15', '10150', '3004', '0'), +('13', '26', '15', '10163', '2300', '0'), +('13', '26', '15', '14651', '2224', '0'), +('13', '26', '20', '11666', '8331', '0'), +('13', '26', '20', '2742', '5129', '0'), +('13', '26', '20', '1217', '1641', '0'), +('13', '26', '20', '1364', '1348', '0'), +('13', '26', '12', '1243', '3731', '0'), +('13', '26', '12', '20655', '3242', '0'), +('13', '26', '12', '2923', '3074', '0'), +('13', '26', '12', '2336', '2582', '0'), +('13', '26', '18', '1651', '1877', '0'), +('13', '26', '18', '4410', '1142', '0'), +('13', '26', '18', '1244', '586', '0'), +('13', '26', '18', '1221', '454', '0'), +('13', '26', '19', '4407', '2887', '0'), +('13', '26', '19', '68239', '2866', '0'), +('13', '26', '19', '1368', '2016', '0'), +('13', '26', '19', '1652', '1834', '0'), +('13', '26', '13', '14759', '7044', '0'), +('13', '26', '13', '11650', '6707', '0'), +('13', '26', '13', '13400', '4256', '0'), +('13', '26', '13', '6359', '3994', '0'), +('13', '26', '14', '14759', '7044', '0'), +('13', '26', '14', '10219', '5681', '0'), +('13', '26', '14', '6359', '3994', '0'), +('13', '26', '14', '13987', '3770', '0'), +('13', '26', '11', '9246', '3153', '0'), +('13', '26', '11', '14762', '2204', '0'), +('13', '26', '11', '13353', '1500', '0'), +('13', '26', '11', '20677', '450', '0'), +('13', '27', '22', '10323', '0', '0'), +('13', '27', '22', '9246', '0', '0'), +('13', '27', '22', '21509', '0', '0'), +('13', '27', '22', '8007', '0', '0'), +('13', '27', '1', '14702', '3750', '0'), +('13', '27', '1', '14701', '2862', '0'), +('13', '27', '1', '30361', '2640', '0'), +('13', '27', '1', '10082', '2053', '0'), +('13', '27', '2', '10143', '5368', '0'), +('13', '27', '2', '1239', '4366', '0'), +('13', '27', '2', '30363', '3700', '0'), +('13', '27', '2', '1211', '3683', '0'), +('13', '27', '3', '11052', '4892', '0'), +('13', '27', '3', '2707', '2316', '0'), +('13', '27', '3', '4505', '2313', '0'), +('13', '27', '3', '1212', '1644', '0'), +('13', '27', '5', '14557', '6643', '0'), +('13', '27', '5', '14703', '6050', '0'), +('13', '27', '5', '11646', '3540', '0'), +('13', '27', '5', '14700', '3318', '0'), +('13', '27', '8', '11603', '11246', '0'), +('13', '27', '8', '1274', '3972', '0'), +('13', '27', '8', '2349', '3554', '0'), +('13', '27', '8', '1057', '1829', '0'), +('13', '27', '6', '1542', '6307', '0'), +('13', '27', '6', '2708', '5569', '0'), +('13', '27', '6', '1557', '5310', '0'), +('13', '27', '6', '1905', '5063', '0'), +('13', '27', '17', '11641', '10474', '0'), +('13', '27', '17', '1253', '10114', '0'), +('13', '27', '17', '1644', '9997', '0'), +('13', '27', '17', '1240', '8714', '0'), +('13', '27', '7', '1241', '2787', '0'), +('13', '27', '7', '1218', '2727', '0'), +('13', '27', '7', '1362', '2624', '0'), +('13', '27', '7', '1648', '2455', '0'), +('13', '27', '9', '12805', '4256', '0'), +('13', '27', '9', '1274', '3972', '0'), +('13', '27', '9', '1649', '2497', '0'), +('13', '27', '9', '4344', '2051', '0'), +('13', '27', '15', '11687', '4655', '0'), +('13', '27', '15', '10150', '3004', '0'), +('13', '27', '15', '10163', '2300', '0'), +('13', '27', '15', '14651', '2224', '0'), +('13', '27', '20', '11666', '8333', '0'), +('13', '27', '20', '2742', '5132', '0'), +('13', '27', '20', '1217', '1653', '0'), +('13', '27', '20', '1364', '1397', '0'), +('13', '27', '12', '1243', '3815', '0'), +('13', '27', '12', '20655', '3267', '0'), +('13', '27', '12', '2923', '3074', '0'), +('13', '27', '12', '2336', '2643', '0'), +('13', '27', '18', '1651', '1914', '0'), +('13', '27', '18', '4410', '1142', '0'), +('13', '27', '18', '1244', '586', '0'), +('13', '27', '18', '1221', '454', '0'), +('13', '27', '19', '4407', '2996', '0'), +('13', '27', '19', '68239', '2902', '0'), +('13', '27', '19', '1368', '2016', '0'), +('13', '27', '19', '1652', '1834', '0'), +('13', '27', '13', '14759', '7115', '0'), +('13', '27', '13', '11650', '6798', '0'), +('13', '27', '13', '13400', '4305', '0'), +('13', '27', '13', '6359', '4115', '0'), +('13', '27', '14', '14759', '7115', '0'), +('13', '27', '14', '10219', '5681', '0'), +('13', '27', '14', '6359', '4115', '0'), +('13', '27', '14', '13987', '3831', '0'), +('13', '27', '11', '9246', '3274', '0'), +('13', '27', '11', '14762', '2204', '0'), +('13', '27', '11', '13353', '1500', '0'), +('13', '27', '11', '20677', '450', '0'), +('13', '28', '22', '10323', '0', '0'), +('13', '28', '22', '9246', '0', '0'), +('13', '28', '22', '21509', '0', '0'), +('13', '28', '22', '8007', '0', '0'), +('13', '28', '1', '14702', '3750', '0'), +('13', '28', '1', '14701', '2862', '0'), +('13', '28', '1', '30361', '2640', '0'), +('13', '28', '1', '10082', '2126', '0'), +('13', '28', '2', '10143', '5368', '0'), +('13', '28', '2', '1239', '4474', '0'), +('13', '28', '2', '1211', '3768', '0'), +('13', '28', '2', '30363', '3700', '0'), +('13', '28', '3', '11052', '5074', '0'), +('13', '28', '3', '2707', '2400', '0'), +('13', '28', '3', '4505', '2398', '0'), +('13', '28', '3', '1212', '1656', '0'), +('13', '28', '5', '14557', '6703', '0'), +('13', '28', '5', '14703', '6050', '0'), +('13', '28', '5', '11646', '3697', '0'), +('13', '28', '5', '14700', '3318', '0'), +('13', '28', '8', '11603', '11355', '0'), +('13', '28', '8', '1274', '4080', '0'), +('13', '28', '8', '2349', '3554', '0'), +('13', '28', '8', '1057', '1890', '0'), +('13', '28', '6', '1542', '6415', '0'), +('13', '28', '6', '2708', '5570', '0'), +('13', '28', '6', '1557', '5310', '0'), +('13', '28', '6', '1905', '5064', '0'), +('13', '28', '17', '11641', '10655', '0'), +('13', '28', '17', '1253', '10116', '0'), +('13', '28', '17', '1644', '10058', '0'), +('13', '28', '17', '1240', '8886', '0'), +('13', '28', '7', '1241', '2872', '0'), +('13', '28', '7', '1218', '2812', '0'), +('13', '28', '7', '1362', '2624', '0'), +('13', '28', '7', '1648', '2515', '0'), +('13', '28', '9', '12805', '4256', '0'), +('13', '28', '9', '1274', '4080', '0'), +('13', '28', '9', '1649', '2533', '0'), +('13', '28', '9', '4344', '2051', '0'), +('13', '28', '15', '11687', '4715', '0'), +('13', '28', '15', '10150', '3004', '0'), +('13', '28', '15', '10163', '2300', '0'), +('13', '28', '15', '14651', '2224', '0'), +('13', '28', '20', '11666', '8334', '0'), +('13', '28', '20', '2742', '5134', '0'), +('13', '28', '20', '1217', '1665', '0'), +('13', '28', '20', '1364', '1445', '0'), +('13', '28', '12', '1243', '3900', '0'), +('13', '28', '12', '20655', '3291', '0'), +('13', '28', '12', '2923', '3074', '0'), +('13', '28', '12', '2336', '2703', '0'), +('13', '28', '18', '1651', '1950', '0'), +('13', '28', '18', '4410', '1142', '0'), +('13', '28', '18', '1244', '586', '0'), +('13', '28', '18', '1221', '454', '0'), +('13', '28', '19', '4407', '3104', '0'), +('13', '28', '19', '68239', '2938', '0'), +('13', '28', '19', '1368', '2016', '0'), +('13', '28', '19', '1652', '1834', '0'), +('13', '28', '13', '14759', '7187', '0'), +('13', '28', '13', '11650', '6888', '0'), +('13', '28', '13', '13400', '4353', '0'), +('13', '28', '13', '6359', '4235', '0'), +('13', '28', '14', '14759', '7187', '0'), +('13', '28', '14', '10219', '5681', '0'), +('13', '28', '14', '6359', '4235', '0'), +('13', '28', '14', '13987', '3891', '0'), +('13', '28', '11', '9246', '3394', '0'), +('13', '28', '11', '14762', '2204', '0'), +('13', '28', '11', '13353', '1500', '0'), +('13', '28', '11', '20677', '450', '0'), +('13', '29', '22', '10323', '0', '0'), +('13', '29', '22', '9246', '0', '0'), +('13', '29', '22', '21509', '0', '0'), +('13', '29', '22', '8007', '0', '0'), +('13', '29', '1', '14702', '3750', '0'), +('13', '29', '1', '14701', '2862', '0'), +('13', '29', '1', '30361', '2640', '0'), +('13', '29', '1', '10082', '2198', '0'), +('13', '29', '2', '10143', '5368', '0'), +('13', '29', '2', '1239', '4583', '0'), +('13', '29', '2', '1211', '3852', '0'), +('13', '29', '2', '30363', '3700', '0'), +('13', '29', '3', '11052', '5255', '0'), +('13', '29', '3', '2707', '2485', '0'), +('13', '29', '3', '4505', '2482', '0'), +('13', '29', '3', '1212', '1668', '0'), +('13', '29', '5', '14557', '6764', '0'), +('13', '29', '5', '14703', '6050', '0'), +('13', '29', '5', '11646', '3854', '0'), +('13', '29', '5', '14700', '3318', '0'), +('13', '29', '8', '11603', '11463', '0'), +('13', '29', '8', '1274', '4189', '0'), +('13', '29', '8', '2349', '3554', '0'), +('13', '29', '8', '1057', '1950', '0'), +('13', '29', '6', '1542', '6524', '0'), +('13', '29', '6', '2708', '5571', '0'), +('13', '29', '6', '1557', '5310', '0'), +('13', '29', '6', '1905', '5065', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '29', '17', '11641', '10836', '0'), +('13', '29', '17', '1644', '10118', '0'), +('13', '29', '17', '1253', '10118', '0'), +('13', '29', '17', '1240', '9058', '0'), +('13', '29', '7', '1241', '2956', '0'), +('13', '29', '7', '1218', '2896', '0'), +('13', '29', '7', '1362', '2624', '0'), +('13', '29', '7', '1648', '2576', '0'), +('13', '29', '9', '12805', '4256', '0'), +('13', '29', '9', '1274', '4189', '0'), +('13', '29', '9', '1649', '2569', '0'), +('13', '29', '9', '4344', '2051', '0'), +('13', '29', '15', '11687', '4776', '0'), +('13', '29', '15', '10150', '3004', '0'), +('13', '29', '15', '10163', '2300', '0'), +('13', '29', '15', '14651', '2224', '0'), +('13', '29', '20', '11666', '8336', '0'), +('13', '29', '20', '2742', '5137', '0'), +('13', '29', '20', '1217', '1677', '0'), +('13', '29', '20', '1364', '1493', '0'), +('13', '29', '12', '1243', '3984', '0'), +('13', '29', '12', '20655', '3316', '0'), +('13', '29', '12', '2923', '3074', '0'), +('13', '29', '12', '2336', '2764', '0'), +('13', '29', '18', '1651', '1986', '0'), +('13', '29', '18', '4410', '1142', '0'), +('13', '29', '18', '1244', '586', '0'), +('13', '29', '18', '1221', '454', '0'), +('13', '29', '19', '4407', '3213', '0'), +('13', '29', '19', '68239', '2974', '0'), +('13', '29', '19', '1368', '2016', '0'), +('13', '29', '19', '1652', '1834', '0'), +('13', '29', '13', '14759', '7258', '0'), +('13', '29', '13', '11650', '6979', '0'), +('13', '29', '13', '13400', '4401', '0'), +('13', '29', '13', '6359', '4356', '0'), +('13', '29', '14', '14759', '7258', '0'), +('13', '29', '14', '10219', '5681', '0'), +('13', '29', '14', '6359', '4356', '0'), +('13', '29', '14', '13987', '3952', '0'), +('13', '29', '11', '9246', '3515', '0'), +('13', '29', '11', '14762', '2204', '0'), +('13', '29', '11', '13353', '1500', '0'), +('13', '29', '11', '20677', '450', '0'), +('13', '30', '22', '10323', '0', '0'), +('13', '30', '22', '9246', '0', '0'), +('13', '30', '22', '21509', '0', '0'), +('13', '30', '22', '8007', '0', '0'), +('13', '30', '1', '14702', '3750', '0'), +('13', '30', '1', '14701', '2862', '0'), +('13', '30', '1', '30361', '2640', '0'), +('13', '30', '1', '10082', '2271', '0'), +('13', '30', '2', '10143', '5368', '0'), +('13', '30', '2', '1239', '4692', '0'), +('13', '30', '2', '1211', '3937', '0'), +('13', '30', '2', '30363', '3700', '0'), +('13', '30', '3', '11052', '5436', '0'), +('13', '30', '3', '2707', '2569', '0'), +('13', '30', '3', '4505', '2567', '0'), +('13', '30', '3', '1212', '1681', '0'), +('13', '30', '5', '14557', '6824', '0'), +('13', '30', '5', '14703', '6050', '0'), +('13', '30', '5', '11646', '4011', '0'), +('13', '30', '5', '10216', '3324', '0'), +('13', '30', '8', '11603', '11572', '0'), +('13', '30', '8', '1274', '4298', '0'), +('13', '30', '8', '2349', '3554', '0'), +('13', '30', '8', '1057', '2010', '0'), +('13', '30', '6', '1542', '6633', '0'), +('13', '30', '6', '2708', '5572', '0'), +('13', '30', '6', '1557', '5310', '0'), +('13', '30', '6', '1905', '5066', '0'), +('13', '30', '17', '11641', '11018', '0'), +('13', '30', '17', '1644', '10178', '0'), +('13', '30', '17', '1253', '10121', '0'), +('13', '30', '17', '1240', '9230', '0'), +('13', '30', '7', '1241', '3041', '0'), +('13', '30', '7', '1218', '2981', '0'), +('13', '30', '7', '1648', '2636', '0'), +('13', '30', '7', '1362', '2624', '0'), +('13', '30', '9', '1274', '4298', '0'), +('13', '30', '9', '12805', '4256', '0'), +('13', '30', '9', '1649', '2605', '0'), +('13', '30', '9', '4344', '2051', '0'), +('13', '30', '15', '11687', '4836', '0'), +('13', '30', '15', '10150', '3004', '0'), +('13', '30', '15', '10163', '2300', '0'), +('13', '30', '15', '14651', '2224', '0'), +('13', '30', '20', '11666', '8338', '0'), +('13', '30', '20', '2742', '5139', '0'), +('13', '30', '20', '1217', '1689', '0'), +('13', '30', '20', '1364', '1542', '0'), +('13', '30', '12', '1243', '4069', '0'), +('13', '30', '12', '20655', '3341', '0'), +('13', '30', '12', '2923', '3074', '0'), +('13', '30', '12', '2336', '2824', '0'), +('13', '30', '18', '1651', '2022', '0'), +('13', '30', '18', '4410', '1142', '0'), +('13', '30', '18', '1244', '586', '0'), +('13', '30', '18', '1221', '454', '0'), +('13', '30', '19', '4407', '3322', '0'), +('13', '30', '19', '68239', '3011', '0'), +('13', '30', '19', '1368', '2016', '0'), +('13', '30', '19', '1652', '1834', '0'), +('13', '30', '13', '14759', '7329', '0'), +('13', '30', '13', '11650', '7069', '0'), +('13', '30', '13', '6359', '4477', '0'), +('13', '30', '13', '13400', '4450', '0'), +('13', '30', '14', '14759', '7329', '0'), +('13', '30', '14', '10219', '5681', '0'), +('13', '30', '14', '6359', '4477', '0'), +('13', '30', '14', '13987', '4012', '0'), +('13', '30', '11', '9246', '3636', '0'), +('13', '30', '11', '14762', '2204', '0'), +('13', '30', '11', '13353', '1500', '0'), +('13', '30', '11', '20677', '450', '0'), +('13', '31', '22', '10323', '0', '0'), +('13', '31', '22', '9246', '0', '0'), +('13', '31', '22', '21509', '0', '0'), +('13', '31', '22', '8007', '0', '0'), +('13', '31', '1', '14702', '3750', '0'), +('13', '31', '1', '14701', '2862', '0'), +('13', '31', '1', '30361', '2640', '0'), +('13', '31', '1', '10082', '2343', '0'), +('13', '31', '2', '10143', '5368', '0'), +('13', '31', '2', '1239', '4801', '0'), +('13', '31', '2', '1211', '4022', '0'), +('13', '31', '2', '30363', '3700', '0'), +('13', '31', '3', '11052', '5617', '0'), +('13', '31', '3', '2707', '2654', '0'), +('13', '31', '3', '4505', '2652', '0'), +('13', '31', '3', '1212', '1693', '0'), +('13', '31', '5', '14557', '6884', '0'), +('13', '31', '5', '14703', '6050', '0'), +('13', '31', '5', '11646', '4168', '0'), +('13', '31', '5', '10216', '3384', '0'), +('13', '31', '8', '11603', '11681', '0'), +('13', '31', '8', '1274', '4407', '0'), +('13', '31', '8', '2349', '3554', '0'), +('13', '31', '8', '1057', '2071', '0'), +('13', '31', '6', '1542', '6742', '0'), +('13', '31', '6', '2708', '5574', '0'), +('13', '31', '6', '1557', '5310', '0'), +('13', '31', '6', '1905', '5068', '0'), +('13', '31', '17', '11641', '11199', '0'), +('13', '31', '17', '1644', '10239', '0'), +('13', '31', '17', '1253', '10123', '0'), +('13', '31', '17', '1240', '9402', '0'), +('13', '31', '7', '1241', '3126', '0'), +('13', '31', '7', '1218', '3066', '0'), +('13', '31', '7', '1648', '2697', '0'), +('13', '31', '7', '1362', '2624', '0'), +('13', '31', '9', '1274', '4407', '0'), +('13', '31', '9', '12805', '4256', '0'), +('13', '31', '9', '1649', '2642', '0'), +('13', '31', '9', '4344', '2051', '0'), +('13', '31', '15', '11687', '4897', '0'), +('13', '31', '15', '10150', '3004', '0'), +('13', '31', '15', '10163', '2300', '0'), +('13', '31', '15', '14651', '2224', '0'), +('13', '31', '20', '11666', '8339', '0'), +('13', '31', '20', '2742', '5141', '0'), +('13', '31', '20', '1217', '1701', '0'), +('13', '31', '20', '1364', '1590', '0'), +('13', '31', '12', '1243', '4153', '0'), +('13', '31', '12', '20655', '3365', '0'), +('13', '31', '12', '2923', '3074', '0'), +('13', '31', '12', '2336', '2884', '0'), +('13', '31', '18', '1651', '2058', '0'), +('13', '31', '18', '4410', '1142', '0'), +('13', '31', '18', '1244', '586', '0'), +('13', '31', '18', '1221', '454', '0'), +('13', '31', '19', '4407', '3431', '0'), +('13', '31', '19', '68239', '3047', '0'), +('13', '31', '19', '1368', '2016', '0'), +('13', '31', '19', '1652', '1834', '0'), +('13', '31', '13', '14759', '7400', '0'), +('13', '31', '13', '11650', '7160', '0'), +('13', '31', '13', '6359', '4598', '0'), +('13', '31', '13', '13400', '4498', '0'), +('13', '31', '14', '14759', '7400', '0'), +('13', '31', '14', '10219', '5681', '0'), +('13', '31', '14', '6359', '4598', '0'), +('13', '31', '14', '13987', '4072', '0'), +('13', '31', '11', '9246', '3757', '0'), +('13', '31', '11', '14762', '2204', '0'), +('13', '31', '11', '13353', '1500', '0'), +('13', '31', '11', '20677', '450', '0'), +('13', '32', '22', '10323', '0', '0'), +('13', '32', '22', '9246', '0', '0'), +('13', '32', '22', '21509', '0', '0'), +('13', '32', '22', '8007', '0', '0'), +('13', '32', '1', '14702', '3750', '0'), +('13', '32', '1', '14701', '2862', '0'), +('13', '32', '1', '30361', '2640', '0'), +('13', '32', '1', '10082', '2416', '0'), +('13', '32', '2', '10143', '5368', '0'), +('13', '32', '2', '1239', '4909', '0'), +('13', '32', '2', '1211', '4106', '0'), +('13', '32', '2', '30363', '3700', '0'), +('13', '32', '3', '11052', '5798', '0'), +('13', '32', '3', '2707', '2739', '0'), +('13', '32', '3', '4505', '2736', '0'), +('13', '32', '3', '1212', '1705', '0'), +('13', '32', '5', '14557', '6945', '0'), +('13', '32', '5', '14703', '6050', '0'), +('13', '32', '5', '11646', '4325', '0'), +('13', '32', '5', '10216', '3445', '0'), +('13', '32', '8', '11603', '11789', '0'), +('13', '32', '8', '1274', '4515', '0'), +('13', '32', '8', '2349', '3554', '0'), +('13', '32', '8', '1057', '2131', '0'), +('13', '32', '6', '1542', '6850', '0'), +('13', '32', '6', '2708', '5575', '0'), +('13', '32', '6', '1557', '5310', '0'), +('13', '32', '6', '1905', '5069', '0'), +('13', '32', '17', '11641', '11380', '0'), +('13', '32', '17', '1644', '10299', '0'), +('13', '32', '17', '1253', '10126', '0'), +('13', '32', '17', '1240', '9574', '0'), +('13', '32', '7', '1241', '3210', '0'), +('13', '32', '7', '1218', '3150', '0'), +('13', '32', '7', '1648', '2757', '0'), +('13', '32', '7', '1362', '2624', '0'), +('13', '32', '9', '1274', '4515', '0'), +('13', '32', '9', '12805', '4256', '0'), +('13', '32', '9', '1649', '2678', '0'), +('13', '32', '9', '4344', '2051', '0'), +('13', '32', '15', '11687', '4957', '0'), +('13', '32', '15', '10150', '3004', '0'), +('13', '32', '15', '10163', '2300', '0'), +('13', '32', '15', '14651', '2224', '0'), +('13', '32', '20', '11666', '8341', '0'), +('13', '32', '20', '2742', '5144', '0'), +('13', '32', '20', '1217', '1713', '0'), +('13', '32', '20', '1364', '1638', '0'), +('13', '32', '12', '1243', '4238', '0'), +('13', '32', '12', '20655', '3390', '0'), +('13', '32', '12', '2923', '3074', '0'), +('13', '32', '12', '2336', '2945', '0'), +('13', '32', '18', '1651', '2095', '0'), +('13', '32', '18', '4410', '1142', '0'), +('13', '32', '18', '1244', '586', '0'), +('13', '32', '18', '1221', '454', '0'), +('13', '32', '19', '4407', '3539', '0'), +('13', '32', '19', '68239', '3083', '0'), +('13', '32', '19', '1368', '2016', '0'), +('13', '32', '19', '1652', '1834', '0'), +('13', '32', '13', '14759', '7472', '0'), +('13', '32', '13', '11650', '7251', '0'), +('13', '32', '13', '6359', '4719', '0'), +('13', '32', '13', '13400', '4546', '0'), +('13', '32', '14', '14759', '7472', '0'), +('13', '32', '14', '10219', '5681', '0'), +('13', '32', '14', '6359', '4719', '0'), +('13', '32', '14', '13987', '4133', '0'), +('13', '32', '11', '9246', '3878', '0'), +('13', '32', '11', '14762', '2204', '0'), +('13', '32', '11', '13353', '1500', '0'), +('13', '32', '11', '20677', '450', '0'), +('13', '33', '22', '10323', '0', '0'), +('13', '33', '22', '9246', '0', '0'), +('13', '33', '22', '21509', '0', '0'), +('13', '33', '22', '8007', '0', '0'), +('13', '33', '1', '14702', '3750', '0'), +('13', '33', '1', '14701', '2862', '0'), +('13', '33', '1', '30361', '2640', '0'), +('13', '33', '1', '10082', '2488', '0'), +('13', '33', '2', '10143', '5368', '0'), +('13', '33', '2', '1239', '5018', '0'), +('13', '33', '2', '1211', '4191', '0'), +('13', '33', '2', '30363', '3700', '0'), +('13', '33', '3', '11052', '5980', '0'), +('13', '33', '3', '2707', '2823', '0'), +('13', '33', '3', '4505', '2821', '0'), +('13', '33', '3', '1212', '1717', '0'), +('13', '33', '5', '14557', '7005', '0'), +('13', '33', '5', '14703', '6050', '0'), +('13', '33', '5', '11646', '4482', '0'), +('13', '33', '5', '10216', '3505', '0'), +('13', '33', '8', '11603', '11898', '0'), +('13', '33', '8', '1274', '4624', '0'), +('13', '33', '8', '2349', '3554', '0'), +('13', '33', '8', '1057', '2192', '0'), +('13', '33', '6', '1542', '6959', '0'), +('13', '33', '6', '2708', '5576', '0'), +('13', '33', '6', '1557', '5310', '0'), +('13', '33', '6', '1905', '5070', '0'), +('13', '33', '17', '11641', '11561', '0'), +('13', '33', '17', '1644', '10360', '0'), +('13', '33', '17', '1253', '10128', '0'), +('13', '33', '17', '1240', '9746', '0'), +('13', '33', '7', '1241', '3295', '0'), +('13', '33', '7', '1218', '3235', '0'), +('13', '33', '7', '1648', '2817', '0'), +('13', '33', '7', '1362', '2624', '0'), +('13', '33', '9', '1274', '4624', '0'), +('13', '33', '9', '12805', '4256', '0'), +('13', '33', '9', '1649', '2714', '0'), +('13', '33', '9', '4344', '2051', '0'), +('13', '33', '15', '11687', '5017', '0'), +('13', '33', '15', '10150', '3004', '0'), +('13', '33', '15', '10163', '2300', '0'), +('13', '33', '15', '14651', '2224', '0'), +('13', '33', '20', '11666', '8343', '0'), +('13', '33', '20', '2742', '5146', '0'), +('13', '33', '20', '1217', '1725', '0'), +('13', '33', '20', '1364', '1687', '0'), +('13', '33', '12', '1243', '4322', '0'), +('13', '33', '12', '20655', '3415', '0'), +('13', '33', '12', '2923', '3074', '0'), +('13', '33', '12', '2336', '3005', '0'), +('13', '33', '18', '1651', '2131', '0'), +('13', '33', '18', '4410', '1142', '0'), +('13', '33', '18', '1244', '586', '0'), +('13', '33', '18', '1221', '454', '0'), +('13', '33', '19', '4407', '3648', '0'), +('13', '33', '19', '68239', '3119', '0'), +('13', '33', '19', '1368', '2016', '0'), +('13', '33', '19', '1652', '1834', '0'), +('13', '33', '13', '14759', '7543', '0'), +('13', '33', '13', '11650', '7341', '0'), +('13', '33', '13', '6359', '4839', '0'), +('13', '33', '13', '13400', '4595', '0'), +('13', '33', '14', '14759', '7543', '0'), +('13', '33', '14', '10219', '5681', '0'), +('13', '33', '14', '6359', '4839', '0'), +('13', '33', '14', '13987', '4193', '0'), +('13', '33', '11', '9246', '3998', '0'), +('13', '33', '11', '14762', '2204', '0'), +('13', '33', '11', '13353', '1500', '0'), +('13', '33', '11', '20677', '450', '0'), +('13', '34', '22', '10323', '0', '0'), +('13', '34', '22', '9246', '0', '0'), +('13', '34', '22', '21509', '0', '0'), +('13', '34', '22', '8007', '0', '0'), +('13', '34', '1', '14702', '3750', '0'), +('13', '34', '1', '14701', '2862', '0'), +('13', '34', '1', '30361', '2640', '0'), +('13', '34', '1', '10082', '2561', '0'), +('13', '34', '2', '10143', '5368', '0'), +('13', '34', '2', '1239', '5127', '0'), +('13', '34', '2', '1211', '4275', '0'), +('13', '34', '2', '10141', '3709', '0'), +('13', '34', '3', '11052', '6161', '0'), +('13', '34', '3', '2707', '2908', '0'), +('13', '34', '3', '4505', '2905', '0'), +('13', '34', '3', '1212', '1729', '0'), +('13', '34', '5', '14557', '7066', '0'), +('13', '34', '5', '14703', '6050', '0'), +('13', '34', '5', '11646', '4639', '0'), +('13', '34', '5', '10216', '3566', '0'), +('13', '34', '8', '11603', '12007', '0'), +('13', '34', '8', '1274', '4733', '0'), +('13', '34', '8', '2349', '3554', '0'), +('13', '34', '8', '1057', '2252', '0'), +('13', '34', '6', '1542', '7068', '0'), +('13', '34', '6', '2708', '5577', '0'), +('13', '34', '6', '1557', '5310', '0'), +('13', '34', '6', '1905', '5071', '0'), +('13', '34', '17', '11641', '11742', '0'), +('13', '34', '17', '1644', '10420', '0'), +('13', '34', '17', '1253', '10130', '0'), +('13', '34', '17', '1240', '9918', '0'), +('13', '34', '7', '1241', '3379', '0'), +('13', '34', '7', '1218', '3319', '0'), +('13', '34', '7', '1648', '2878', '0'), +('13', '34', '7', '1362', '2624', '0'), +('13', '34', '9', '1274', '4733', '0'), +('13', '34', '9', '12805', '4256', '0'), +('13', '34', '9', '1649', '2750', '0'), +('13', '34', '9', '4408', '2087', '0'), +('13', '34', '15', '11687', '5078', '0'), +('13', '34', '15', '10150', '3004', '0'), +('13', '34', '15', '10163', '2300', '0'), +('13', '34', '15', '14651', '2224', '0'), +('13', '34', '20', '11666', '8344', '0'), +('13', '34', '20', '2742', '5149', '0'), +('13', '34', '20', '1217', '1737', '0'), +('13', '34', '20', '1364', '1735', '0'), +('13', '34', '12', '1243', '4407', '0'), +('13', '34', '12', '20655', '3439', '0'), +('13', '34', '12', '2923', '3074', '0'), +('13', '34', '12', '2336', '3066', '0'), +('13', '34', '18', '1651', '2167', '0'), +('13', '34', '18', '4410', '1142', '0'), +('13', '34', '18', '1244', '586', '0'), +('13', '34', '18', '1221', '454', '0'), +('13', '34', '19', '4407', '3757', '0'), +('13', '34', '19', '68239', '3156', '0'), +('13', '34', '19', '1368', '2016', '0'), +('13', '34', '19', '1652', '1834', '0'), +('13', '34', '13', '14759', '7614', '0'), +('13', '34', '13', '11650', '7432', '0'), +('13', '34', '13', '6359', '4960', '0'), +('13', '34', '13', '13400', '4643', '0'), +('13', '34', '14', '14759', '7614', '0'), +('13', '34', '14', '10219', '5681', '0'), +('13', '34', '14', '6359', '4960', '0'), +('13', '34', '14', '13987', '4254', '0'), +('13', '34', '11', '9246', '4119', '0'), +('13', '34', '11', '14762', '2204', '0'), +('13', '34', '11', '13353', '1500', '0'), +('13', '34', '11', '20677', '450', '0'), +('13', '35', '22', '10323', '0', '0'), +('13', '35', '22', '9246', '0', '0'), +('13', '35', '22', '21509', '0', '0'), +('13', '35', '22', '8007', '0', '0'), +('13', '35', '1', '14702', '3750', '0'), +('13', '35', '1', '14701', '2862', '0'), +('13', '35', '1', '30361', '2640', '0'), +('13', '35', '1', '10082', '2633', '0'), +('13', '35', '2', '10143', '5368', '0'), +('13', '35', '2', '1239', '5235', '0'), +('13', '35', '2', '1211', '4360', '0'), +('13', '35', '2', '10141', '3817', '0'), +('13', '35', '3', '11052', '6342', '0'), +('13', '35', '3', '2707', '2992', '0'), +('13', '35', '3', '4505', '2990', '0'), +('13', '35', '3', '1212', '1741', '0'), +('13', '35', '5', '14557', '7126', '0'), +('13', '35', '5', '14703', '6050', '0'), +('13', '35', '5', '11646', '4796', '0'), +('13', '35', '5', '10216', '3626', '0'), +('13', '35', '8', '11603', '12116', '0'), +('13', '35', '8', '1274', '4841', '0'), +('13', '35', '8', '2349', '3554', '0'), +('13', '35', '8', '1057', '2312', '0'), +('13', '35', '6', '1542', '7176', '0'), +('13', '35', '6', '2708', '5579', '0'), +('13', '35', '6', '1557', '5310', '0'), +('13', '35', '6', '1905', '5072', '0'), +('13', '35', '17', '11641', '11924', '0'), +('13', '35', '17', '1644', '10480', '0'), +('13', '35', '17', '1253', '10133', '0'), +('13', '35', '17', '1240', '10090', '0'), +('13', '35', '7', '1241', '3464', '0'), +('13', '35', '7', '1218', '3404', '0'), +('13', '35', '7', '1648', '2938', '0'), +('13', '35', '7', '1362', '2624', '0'), +('13', '35', '9', '1274', '4841', '0'), +('13', '35', '9', '12805', '4256', '0'), +('13', '35', '9', '1649', '2787', '0'), +('13', '35', '9', '4408', '2147', '0'), +('13', '35', '15', '11687', '5138', '0'), +('13', '35', '15', '10150', '3004', '0'), +('13', '35', '15', '10163', '2300', '0'), +('13', '35', '15', '14651', '2224', '0'), +('13', '35', '20', '11666', '8346', '0'), +('13', '35', '20', '2742', '5151', '0'), +('13', '35', '20', '1364', '1783', '0'), +('13', '35', '20', '1217', '1749', '0'), +('13', '35', '12', '1243', '4492', '0'), +('13', '35', '12', '20655', '3464', '0'), +('13', '35', '12', '2336', '3126', '0'), +('13', '35', '12', '2923', '3074', '0'), +('13', '35', '18', '1651', '2203', '0'), +('13', '35', '18', '4410', '1142', '0'), +('13', '35', '18', '1244', '586', '0'), +('13', '35', '18', '1221', '454', '0'), +('13', '35', '19', '4407', '3865', '0'), +('13', '35', '19', '68239', '3192', '0'), +('13', '35', '19', '1368', '2016', '0'), +('13', '35', '19', '1652', '1834', '0'), +('13', '35', '13', '14759', '7685', '0'), +('13', '35', '13', '11650', '7522', '0'), +('13', '35', '13', '6359', '5081', '0'), +('13', '35', '13', '13400', '4691', '0'), +('13', '35', '14', '14759', '7685', '0'), +('13', '35', '14', '10219', '5681', '0'), +('13', '35', '14', '6359', '5081', '0'), +('13', '35', '14', '13987', '4314', '0'), +('13', '35', '11', '9246', '4240', '0'), +('13', '35', '11', '14762', '2204', '0'), +('13', '35', '11', '13353', '1500', '0'), +('13', '35', '11', '60396', '453', '0'), +('13', '36', '22', '10323', '0', '0'), +('13', '36', '22', '9246', '0', '0'), +('13', '36', '22', '21509', '0', '0'), +('13', '36', '22', '8007', '0', '0'), +('13', '36', '1', '14702', '3750', '0'), +('13', '36', '1', '14701', '2862', '0'), +('13', '36', '1', '10082', '2706', '0'), +('13', '36', '1', '30361', '2640', '0'), +('13', '36', '2', '10143', '5368', '0'), +('13', '36', '2', '1239', '5344', '0'), +('13', '36', '2', '1211', '4444', '0'), +('13', '36', '2', '10141', '3926', '0'), +('13', '36', '3', '11052', '6523', '0'), +('13', '36', '3', '2707', '3077', '0'), +('13', '36', '3', '4505', '3074', '0'), +('13', '36', '3', '1212', '1753', '0'), +('13', '36', '5', '14557', '7186', '0'), +('13', '36', '5', '14703', '6050', '0'), +('13', '36', '5', '11646', '4953', '0'), +('13', '36', '5', '10216', '3686', '0'), +('13', '36', '8', '11603', '12224', '0'), +('13', '36', '8', '1274', '4950', '0'), +('13', '36', '8', '2349', '3554', '0'), +('13', '36', '8', '1057', '2373', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '36', '6', '1542', '7285', '0'), +('13', '36', '6', '2708', '5580', '0'), +('13', '36', '6', '1557', '5310', '0'), +('13', '36', '6', '1905', '5074', '0'), +('13', '36', '17', '11641', '12105', '0'), +('13', '36', '17', '1644', '10541', '0'), +('13', '36', '17', '1240', '10262', '0'), +('13', '36', '17', '1253', '10135', '0'), +('13', '36', '7', '1241', '3548', '0'), +('13', '36', '7', '1218', '3488', '0'), +('13', '36', '7', '1648', '2999', '0'), +('13', '36', '7', '1362', '2624', '0'), +('13', '36', '9', '1274', '4950', '0'), +('13', '36', '9', '12805', '4256', '0'), +('13', '36', '9', '1649', '2823', '0'), +('13', '36', '9', '4408', '2208', '0'), +('13', '36', '15', '11687', '5199', '0'), +('13', '36', '15', '10150', '3004', '0'), +('13', '36', '15', '10163', '2300', '0'), +('13', '36', '15', '14651', '2224', '0'), +('13', '36', '20', '11666', '8348', '0'), +('13', '36', '20', '2742', '5153', '0'), +('13', '36', '20', '1364', '1832', '0'), +('13', '36', '20', '1217', '1761', '0'), +('13', '36', '12', '1243', '4576', '0'), +('13', '36', '12', '20655', '3489', '0'), +('13', '36', '12', '2336', '3186', '0'), +('13', '36', '12', '2923', '3074', '0'), +('13', '36', '18', '1651', '2240', '0'), +('13', '36', '18', '4410', '1142', '0'), +('13', '36', '18', '1244', '586', '0'), +('13', '36', '18', '1221', '454', '0'), +('13', '36', '19', '4407', '3974', '0'), +('13', '36', '19', '68239', '3228', '0'), +('13', '36', '19', '1368', '2016', '0'), +('13', '36', '19', '1652', '1834', '0'), +('13', '36', '13', '14759', '7757', '0'), +('13', '36', '13', '11650', '7613', '0'), +('13', '36', '13', '6359', '5202', '0'), +('13', '36', '13', '13500', '4787', '0'), +('13', '36', '14', '14759', '7757', '0'), +('13', '36', '14', '10219', '5681', '0'), +('13', '36', '14', '6359', '5202', '0'), +('13', '36', '14', '13987', '4374', '0'), +('13', '36', '11', '9246', '4361', '0'), +('13', '36', '11', '14762', '2204', '0'), +('13', '36', '11', '13353', '1500', '0'), +('13', '36', '11', '60396', '465', '0'), +('13', '37', '22', '10323', '0', '0'), +('13', '37', '22', '9246', '0', '0'), +('13', '37', '22', '21509', '0', '0'), +('13', '37', '22', '8007', '0', '0'), +('13', '37', '1', '14702', '3750', '0'), +('13', '37', '1', '14701', '2862', '0'), +('13', '37', '1', '10082', '2778', '0'), +('13', '37', '1', '30361', '2640', '0'), +('13', '37', '2', '1239', '5453', '0'), +('13', '37', '2', '10143', '5368', '0'), +('13', '37', '2', '1211', '4529', '0'), +('13', '37', '2', '10141', '4035', '0'), +('13', '37', '3', '11052', '6704', '0'), +('13', '37', '3', '2707', '3161', '0'), +('13', '37', '3', '4505', '3159', '0'), +('13', '37', '3', '1212', '1765', '0'), +('13', '37', '5', '14557', '7247', '0'), +('13', '37', '5', '14703', '6050', '0'), +('13', '37', '5', '11646', '5110', '0'), +('13', '37', '5', '10216', '3747', '0'), +('13', '37', '8', '11603', '12333', '0'), +('13', '37', '8', '1274', '5059', '0'), +('13', '37', '8', '2349', '3554', '0'), +('13', '37', '8', '1057', '2433', '0'), +('13', '37', '6', '1542', '7394', '0'), +('13', '37', '6', '2708', '5581', '0'), +('13', '37', '6', '1557', '5310', '0'), +('13', '37', '6', '1905', '5075', '0'), +('13', '37', '17', '11641', '12286', '0'), +('13', '37', '17', '1644', '10601', '0'), +('13', '37', '17', '1240', '10434', '0'), +('13', '37', '17', '1253', '10138', '0'), +('13', '37', '7', '1241', '3633', '0'), +('13', '37', '7', '1218', '3573', '0'), +('13', '37', '7', '1648', '3059', '0'), +('13', '37', '7', '1362', '2624', '0'), +('13', '37', '9', '1274', '5059', '0'), +('13', '37', '9', '12805', '4256', '0'), +('13', '37', '9', '1649', '2859', '0'), +('13', '37', '9', '4408', '2268', '0'), +('13', '37', '15', '11687', '5259', '0'), +('13', '37', '15', '10150', '3004', '0'), +('13', '37', '15', '10163', '2300', '0'), +('13', '37', '15', '14651', '2224', '0'), +('13', '37', '20', '11666', '8349', '0'), +('13', '37', '20', '2742', '5156', '0'), +('13', '37', '20', '1364', '1880', '0'), +('13', '37', '20', '1217', '1774', '0'), +('13', '37', '12', '1243', '4661', '0'), +('13', '37', '12', '20655', '3513', '0'), +('13', '37', '12', '2336', '3247', '0'), +('13', '37', '12', '2923', '3074', '0'), +('13', '37', '18', '1651', '2276', '0'), +('13', '37', '18', '4410', '1142', '0'), +('13', '37', '18', '1244', '586', '0'), +('13', '37', '18', '1221', '454', '0'), +('13', '37', '19', '4407', '4083', '0'), +('13', '37', '19', '68239', '3264', '0'), +('13', '37', '19', '1368', '2016', '0'), +('13', '37', '19', '1652', '1834', '0'), +('13', '37', '13', '14759', '7828', '0'), +('13', '37', '13', '11650', '7704', '0'), +('13', '37', '13', '6359', '5323', '0'), +('13', '37', '13', '13500', '4908', '0'), +('13', '37', '14', '14759', '7828', '0'), +('13', '37', '14', '10219', '5681', '0'), +('13', '37', '14', '6359', '5323', '0'), +('13', '37', '14', '9246', '4482', '0'), +('13', '37', '11', '9246', '4482', '0'), +('13', '37', '11', '14762', '2204', '0'), +('13', '37', '11', '13353', '1500', '0'), +('13', '37', '11', '60396', '477', '0'), +('13', '38', '22', '10323', '0', '0'), +('13', '38', '22', '9246', '0', '0'), +('13', '38', '22', '21509', '0', '0'), +('13', '38', '22', '8007', '0', '0'), +('13', '38', '1', '14702', '3750', '0'), +('13', '38', '1', '14701', '2862', '0'), +('13', '38', '1', '10082', '2850', '0'), +('13', '38', '1', '30361', '2640', '0'), +('13', '38', '2', '1239', '5562', '0'), +('13', '38', '2', '10143', '5368', '0'), +('13', '38', '2', '1211', '4613', '0'), +('13', '38', '2', '10141', '4143', '0'), +('13', '38', '3', '11052', '6886', '0'), +('13', '38', '3', '2707', '3246', '0'), +('13', '38', '3', '4505', '3243', '0'), +('13', '38', '3', '1212', '1777', '0'), +('13', '38', '5', '14557', '7307', '0'), +('13', '38', '5', '14703', '6050', '0'), +('13', '38', '5', '11646', '5268', '0'), +('13', '38', '5', '10216', '3807', '0'), +('13', '38', '8', '11603', '12442', '0'), +('13', '38', '8', '1274', '5168', '0'), +('13', '38', '8', '2349', '3554', '0'), +('13', '38', '8', '1057', '2494', '0'), +('13', '38', '6', '1542', '7503', '0'), +('13', '38', '6', '2708', '5582', '0'), +('13', '38', '6', '1557', '5310', '0'), +('13', '38', '6', '1905', '5076', '0'), +('13', '38', '17', '11641', '12467', '0'), +('13', '38', '17', '1644', '10662', '0'), +('13', '38', '17', '1240', '10606', '0'), +('13', '38', '17', '1253', '10140', '0'), +('13', '38', '7', '1241', '3717', '0'), +('13', '38', '7', '1218', '3657', '0'), +('13', '38', '7', '1648', '3119', '0'), +('13', '38', '7', '1362', '2624', '0'), +('13', '38', '9', '1274', '5168', '0'), +('13', '38', '9', '12805', '4256', '0'), +('13', '38', '9', '1649', '2895', '0'), +('13', '38', '9', '4408', '2328', '0'), +('13', '38', '15', '11687', '5319', '0'), +('13', '38', '15', '10150', '3004', '0'), +('13', '38', '15', '10163', '2300', '0'), +('13', '38', '15', '14651', '2224', '0'), +('13', '38', '20', '11666', '8351', '0'), +('13', '38', '20', '2742', '5158', '0'), +('13', '38', '20', '1364', '1928', '0'), +('13', '38', '20', '1217', '1786', '0'), +('13', '38', '12', '1243', '4745', '0'), +('13', '38', '12', '20655', '3538', '0'), +('13', '38', '12', '2336', '3307', '0'), +('13', '38', '12', '2923', '3074', '0'), +('13', '38', '18', '1651', '2312', '0'), +('13', '38', '18', '4410', '1142', '0'), +('13', '38', '18', '1244', '586', '0'), +('13', '38', '18', '1221', '454', '0'), +('13', '38', '19', '4407', '4192', '0'), +('13', '38', '19', '68239', '3301', '0'), +('13', '38', '19', '1368', '2016', '0'), +('13', '38', '19', '1652', '1834', '0'), +('13', '38', '13', '14759', '7899', '0'), +('13', '38', '13', '11650', '7794', '0'), +('13', '38', '13', '6359', '5443', '0'), +('13', '38', '13', '13500', '5028', '0'), +('13', '38', '14', '14759', '7899', '0'), +('13', '38', '14', '10219', '5681', '0'), +('13', '38', '14', '6359', '5443', '0'), +('13', '38', '14', '9246', '4602', '0'), +('13', '38', '11', '9246', '4602', '0'), +('13', '38', '11', '14762', '2204', '0'), +('13', '38', '11', '13353', '1500', '0'), +('13', '38', '11', '60396', '489', '0'), +('13', '39', '22', '10323', '0', '0'), +('13', '39', '22', '9246', '0', '0'), +('13', '39', '22', '21509', '0', '0'), +('13', '39', '22', '8007', '0', '0'), +('13', '39', '1', '14702', '3750', '0'), +('13', '39', '1', '10082', '2923', '0'), +('13', '39', '1', '14701', '2862', '0'), +('13', '39', '1', '30361', '2640', '0'), +('13', '39', '2', '1239', '5670', '0'), +('13', '39', '2', '10143', '5368', '0'), +('13', '39', '2', '1211', '4698', '0'), +('13', '39', '2', '10141', '4252', '0'), +('13', '39', '3', '11052', '7067', '0'), +('13', '39', '3', '2707', '3330', '0'), +('13', '39', '3', '4505', '3328', '0'), +('13', '39', '3', '1212', '1789', '0'), +('13', '39', '5', '14557', '7368', '0'), +('13', '39', '5', '14703', '6050', '0'), +('13', '39', '5', '11646', '5425', '0'), +('13', '39', '5', '10216', '3868', '0'), +('13', '39', '8', '11603', '12550', '0'), +('13', '39', '8', '1274', '5276', '0'), +('13', '39', '8', '2349', '3554', '0'), +('13', '39', '8', '1057', '2554', '0'), +('13', '39', '6', '1542', '7611', '0'), +('13', '39', '6', '2708', '5583', '0'), +('13', '39', '6', '1557', '5310', '0'), +('13', '39', '6', '1905', '5077', '0'), +('13', '39', '17', '11641', '12648', '0'), +('13', '39', '17', '1240', '10778', '0'), +('13', '39', '17', '1644', '10722', '0'), +('13', '39', '17', '1253', '10143', '0'), +('13', '39', '7', '1241', '3802', '0'), +('13', '39', '7', '1218', '3742', '0'), +('13', '39', '7', '1648', '3180', '0'), +('13', '39', '7', '1362', '2624', '0'), +('13', '39', '9', '1274', '5276', '0'), +('13', '39', '9', '12805', '4256', '0'), +('13', '39', '9', '1649', '2931', '0'), +('13', '39', '9', '4408', '2389', '0'), +('13', '39', '15', '11687', '5380', '0'), +('13', '39', '15', '10150', '3004', '0'), +('13', '39', '15', '10163', '2300', '0'), +('13', '39', '15', '14651', '2224', '0'), +('13', '39', '20', '11666', '8353', '0'), +('13', '39', '20', '2742', '5161', '0'), +('13', '39', '20', '1364', '1977', '0'), +('13', '39', '20', '1217', '1798', '0'), +('13', '39', '12', '1243', '4830', '0'), +('13', '39', '12', '20655', '3563', '0'), +('13', '39', '12', '2336', '3368', '0'), +('13', '39', '12', '2923', '3074', '0'), +('13', '39', '18', '1651', '2348', '0'), +('13', '39', '18', '4410', '1142', '0'), +('13', '39', '18', '1244', '586', '0'), +('13', '39', '18', '1221', '454', '0'), +('13', '39', '19', '4407', '4300', '0'), +('13', '39', '19', '68239', '3337', '0'), +('13', '39', '19', '1368', '2016', '0'), +('13', '39', '19', '1652', '1834', '0'), +('13', '39', '13', '14759', '7971', '0'), +('13', '39', '13', '11650', '7885', '0'), +('13', '39', '13', '6359', '5564', '0'), +('13', '39', '13', '13500', '5149', '0'), +('13', '39', '14', '14759', '7971', '0'), +('13', '39', '14', '10219', '5681', '0'), +('13', '39', '14', '6359', '5564', '0'), +('13', '39', '14', '9246', '4723', '0'), +('13', '39', '11', '9246', '4723', '0'), +('13', '39', '11', '14762', '2204', '0'), +('13', '39', '11', '13353', '1500', '0'), +('13', '39', '11', '60396', '501', '0'), +('13', '40', '22', '10323', '0', '0'), +('13', '40', '22', '9246', '0', '0'), +('13', '40', '22', '21509', '0', '0'), +('13', '40', '22', '8007', '0', '0'), +('13', '40', '1', '14702', '3750', '0'), +('13', '40', '1', '10082', '2995', '0'), +('13', '40', '1', '14701', '2862', '0'), +('13', '40', '1', '30361', '2640', '0'), +('13', '40', '2', '1239', '5779', '0'), +('13', '40', '2', '10143', '5368', '0'), +('13', '40', '2', '1211', '4783', '0'), +('13', '40', '2', '10141', '4361', '0'), +('13', '40', '3', '11052', '7248', '0'), +('13', '40', '3', '2707', '3415', '0'), +('13', '40', '3', '4505', '3413', '0'), +('13', '40', '3', '1212', '1801', '0'), +('13', '40', '5', '14557', '7428', '0'), +('13', '40', '5', '14703', '6050', '0'), +('13', '40', '5', '11646', '5582', '0'), +('13', '40', '5', '10216', '3928', '0'), +('13', '40', '8', '11603', '12659', '0'), +('13', '40', '8', '1274', '5385', '0'), +('13', '40', '8', '2349', '3554', '0'), +('13', '40', '8', '1057', '2614', '0'), +('13', '40', '6', '1542', '7720', '0'), +('13', '40', '6', '2708', '5585', '0'), +('13', '40', '6', '1557', '5310', '0'), +('13', '40', '6', '1905', '5079', '0'), +('13', '40', '17', '11641', '12830', '0'), +('13', '40', '17', '1240', '10950', '0'), +('13', '40', '17', '1644', '10782', '0'), +('13', '40', '17', '1253', '10145', '0'), +('13', '40', '7', '1241', '3887', '0'), +('13', '40', '7', '1218', '3827', '0'), +('13', '40', '7', '1648', '3240', '0'), +('13', '40', '7', '1362', '2624', '0'), +('13', '40', '9', '1274', '5385', '0'), +('13', '40', '9', '12805', '4256', '0'), +('13', '40', '9', '1649', '2968', '0'), +('13', '40', '9', '4408', '2449', '0'), +('13', '40', '15', '11687', '5440', '0'), +('13', '40', '15', '10150', '3004', '0'), +('13', '40', '15', '10163', '2300', '0'), +('13', '40', '15', '14651', '2224', '0'), +('13', '40', '20', '11666', '8354', '0'), +('13', '40', '20', '2742', '5163', '0'), +('13', '40', '20', '1364', '2025', '0'), +('13', '40', '20', '1217', '1810', '0'), +('13', '40', '12', '1243', '4914', '0'), +('13', '40', '12', '20655', '3587', '0'), +('13', '40', '12', '2336', '3428', '0'), +('13', '40', '12', '2923', '3074', '0'), +('13', '40', '18', '1651', '2385', '0'), +('13', '40', '18', '4410', '1142', '0'), +('13', '40', '18', '1244', '586', '0'), +('13', '40', '18', '1221', '454', '0'), +('13', '40', '19', '4407', '4409', '0'), +('13', '40', '19', '68239', '3373', '0'), +('13', '40', '19', '1368', '2016', '0'), +('13', '40', '19', '1652', '1834', '0'), +('13', '40', '13', '14759', '8042', '0'), +('13', '40', '13', '11650', '7975', '0'), +('13', '40', '13', '6359', '5685', '0'), +('13', '40', '13', '13500', '5270', '0'), +('13', '40', '14', '14759', '8042', '0'), +('13', '40', '14', '6359', '5685', '0'), +('13', '40', '14', '10219', '5681', '0'), +('13', '40', '14', '9246', '4844', '0'), +('13', '40', '11', '9246', '4844', '0'), +('13', '40', '11', '14762', '2204', '0'), +('13', '40', '11', '13353', '1500', '0'), +('13', '40', '11', '60396', '513', '0'), +('13', '41', '22', '10323', '0', '0'), +('13', '41', '22', '9246', '0', '0'), +('13', '41', '22', '21509', '0', '0'), +('13', '41', '22', '8007', '0', '0'), +('13', '41', '1', '14702', '3750', '0'), +('13', '41', '1', '10082', '3068', '0'), +('13', '41', '1', '14701', '2862', '0'), +('13', '41', '1', '30361', '2640', '0'), +('13', '41', '2', '1239', '5888', '0'), +('13', '41', '2', '10143', '5368', '0'), +('13', '41', '2', '1211', '4867', '0'), +('13', '41', '2', '10141', '4470', '0'), +('13', '41', '3', '11052', '7429', '0'), +('13', '41', '3', '2707', '3500', '0'), +('13', '41', '3', '4505', '3497', '0'), +('13', '41', '3', '1212', '1813', '0'), +('13', '41', '5', '14557', '7488', '0'), +('13', '41', '5', '14703', '6050', '0'), +('13', '41', '5', '11646', '5739', '0'), +('13', '41', '5', '10216', '3988', '0'), +('13', '41', '8', '11603', '12768', '0'), +('13', '41', '8', '1274', '5494', '0'), +('13', '41', '8', '2349', '3554', '0'), +('13', '41', '8', '1057', '2675', '0'), +('13', '41', '6', '1542', '7829', '0'), +('13', '41', '6', '2708', '5586', '0'), +('13', '41', '6', '1557', '5310', '0'), +('13', '41', '6', '1905', '5080', '0'), +('13', '41', '17', '11641', '13011', '0'), +('13', '41', '17', '1240', '11122', '0'), +('13', '41', '17', '1644', '10843', '0'), +('13', '41', '17', '1253', '10147', '0'), +('13', '41', '7', '1241', '3971', '0'), +('13', '41', '7', '1218', '3911', '0'), +('13', '41', '7', '1648', '3301', '0'), +('13', '41', '7', '1362', '2624', '0'), +('13', '41', '9', '1274', '5494', '0'), +('13', '41', '9', '12805', '4256', '0'), +('13', '41', '9', '1649', '3004', '0'), +('13', '41', '9', '4408', '2510', '0'), +('13', '41', '15', '11687', '5501', '0'), +('13', '41', '15', '10150', '3004', '0'), +('13', '41', '15', '10163', '2300', '0'), +('13', '41', '15', '14651', '2224', '0'), +('13', '41', '20', '11666', '8356', '0'), +('13', '41', '20', '2742', '5165', '0'), +('13', '41', '20', '1364', '2073', '0'), +('13', '41', '20', '1217', '1822', '0'), +('13', '41', '12', '1243', '4999', '0'), +('13', '41', '12', '20655', '3612', '0'), +('13', '41', '12', '2336', '3488', '0'), +('13', '41', '12', '2923', '3074', '0'), +('13', '41', '18', '1651', '2421', '0'), +('13', '41', '18', '4410', '1142', '0'), +('13', '41', '18', '1244', '586', '0'), +('13', '41', '18', '1221', '454', '0'), +('13', '41', '19', '4407', '4518', '0'), +('13', '41', '19', '68239', '3409', '0'), +('13', '41', '19', '1368', '2016', '0'), +('13', '41', '19', '1652', '1834', '0'), +('13', '41', '13', '14759', '8113', '0'), +('13', '41', '13', '11650', '8066', '0'), +('13', '41', '13', '6359', '5806', '0'), +('13', '41', '13', '13500', '5391', '0'), +('13', '41', '14', '14759', '8113', '0'), +('13', '41', '14', '6359', '5806', '0'), +('13', '41', '14', '10219', '5681', '0'), +('13', '41', '14', '9246', '4965', '0'), +('13', '41', '11', '9246', '4965', '0'), +('13', '41', '11', '14762', '2204', '0'), +('13', '41', '11', '13353', '1500', '0'), +('13', '41', '11', '60396', '525', '0'), +('13', '42', '22', '10323', '0', '0'), +('13', '42', '22', '9246', '0', '0'), +('13', '42', '22', '21509', '0', '0'), +('13', '42', '22', '8007', '0', '0'), +('13', '42', '1', '14702', '3750', '0'), +('13', '42', '1', '10082', '3140', '0'), +('13', '42', '1', '14701', '2862', '0'), +('13', '42', '1', '30361', '2640', '0'), +('13', '42', '2', '1239', '5996', '0'), +('13', '42', '2', '10143', '5368', '0'), +('13', '42', '2', '1211', '4952', '0'), +('13', '42', '2', '10141', '4578', '0'), +('13', '42', '3', '11052', '7610', '0'), +('13', '42', '3', '2707', '3584', '0'), +('13', '42', '3', '4505', '3582', '0'), +('13', '42', '3', '1212', '1825', '0'), +('13', '42', '5', '14557', '7549', '0'), +('13', '42', '5', '14703', '6050', '0'), +('13', '42', '5', '11646', '5896', '0'), +('13', '42', '5', '10216', '4049', '0'), +('13', '42', '8', '11603', '12877', '0'), +('13', '42', '8', '1274', '5602', '0'), +('13', '42', '8', '2349', '3554', '0'), +('13', '42', '8', '1057', '2735', '0'), +('13', '42', '6', '1542', '7938', '0'), +('13', '42', '6', '2708', '5587', '0'), +('13', '42', '6', '1557', '5310', '0'), +('13', '42', '6', '1905', '5081', '0'), +('13', '42', '17', '11641', '13192', '0'), +('13', '42', '17', '1240', '11294', '0'), +('13', '42', '17', '1644', '10903', '0'), +('13', '42', '17', '1214', '10299', '0'), +('13', '42', '7', '1241', '4056', '0'), +('13', '42', '7', '1218', '3996', '0'), +('13', '42', '7', '1648', '3361', '0'), +('13', '42', '7', '1362', '2624', '0'), +('13', '42', '9', '1274', '5602', '0'), +('13', '42', '9', '12805', '4256', '0'), +('13', '42', '9', '1649', '3040', '0'), +('13', '42', '9', '4408', '2570', '0'), +('13', '42', '15', '11687', '5561', '0'), +('13', '42', '15', '10150', '3004', '0'), +('13', '42', '15', '10163', '2300', '0'), +('13', '42', '15', '14651', '2224', '0'), +('13', '42', '20', '11666', '8358', '0'), +('13', '42', '20', '2742', '5168', '0'), +('13', '42', '20', '1364', '2122', '0'), +('13', '42', '20', '1217', '1834', '0'), +('13', '42', '12', '1243', '5084', '0'), +('13', '42', '12', '20655', '3636', '0'), +('13', '42', '12', '2336', '3549', '0'), +('13', '42', '12', '2923', '3074', '0'), +('13', '42', '18', '1651', '2457', '0'), +('13', '42', '18', '4410', '1142', '0'), +('13', '42', '18', '1244', '586', '0'), +('13', '42', '18', '1221', '454', '0'), +('13', '42', '19', '4407', '4626', '0'), +('13', '42', '19', '68239', '3446', '0'), +('13', '42', '19', '1368', '2016', '0'), +('13', '42', '19', '1652', '1834', '0'), +('13', '42', '13', '14759', '8184', '0'), +('13', '42', '13', '11650', '8157', '0'), +('13', '42', '13', '6359', '5927', '0'), +('13', '42', '13', '13500', '5512', '0'), +('13', '42', '14', '14759', '8184', '0'), +('13', '42', '14', '6359', '5927', '0'), +('13', '42', '14', '10219', '5681', '0'), +('13', '42', '14', '9246', '5086', '0'), +('13', '42', '11', '9246', '5086', '0'), +('13', '42', '11', '14762', '2204', '0'), +('13', '42', '11', '13353', '1500', '0'), +('13', '42', '11', '60396', '537', '0'), +('13', '43', '22', '10323', '0', '0'), +('13', '43', '22', '9246', '0', '0'), +('13', '43', '22', '21509', '0', '0'), +('13', '43', '22', '8007', '0', '0'), +('13', '43', '1', '14702', '3750', '0'), +('13', '43', '1', '10082', '3213', '0'), +('13', '43', '1', '14701', '2862', '0'), +('13', '43', '1', '30361', '2640', '0'), +('13', '43', '2', '1239', '6105', '0'), +('13', '43', '2', '10143', '5368', '0'), +('13', '43', '2', '1211', '5036', '0'), +('13', '43', '2', '10141', '4687', '0'), +('13', '43', '3', '11052', '7792', '0'), +('13', '43', '3', '2707', '3669', '0'), +('13', '43', '3', '4505', '3666', '0'), +('13', '43', '3', '1212', '1838', '0'), +('13', '43', '5', '14557', '7609', '0'), +('13', '43', '5', '11646', '6053', '0'), +('13', '43', '5', '14703', '6050', '0'), +('13', '43', '5', '10216', '4109', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '43', '8', '11603', '12985', '0'), +('13', '43', '8', '1274', '5711', '0'), +('13', '43', '8', '2349', '3554', '0'), +('13', '43', '8', '1057', '2796', '0'), +('13', '43', '6', '1542', '8046', '0'), +('13', '43', '6', '2708', '5588', '0'), +('13', '43', '6', '1557', '5310', '0'), +('13', '43', '6', '1905', '5082', '0'), +('13', '43', '17', '11641', '13373', '0'), +('13', '43', '17', '1240', '11466', '0'), +('13', '43', '17', '1644', '10964', '0'), +('13', '43', '17', '1214', '10460', '0'), +('13', '43', '7', '1241', '4140', '0'), +('13', '43', '7', '1218', '4080', '0'), +('13', '43', '7', '1648', '3421', '0'), +('13', '43', '7', '1362', '2624', '0'), +('13', '43', '9', '1274', '5711', '0'), +('13', '43', '9', '12805', '4256', '0'), +('13', '43', '9', '1649', '3076', '0'), +('13', '43', '9', '4408', '2630', '0'), +('13', '43', '15', '11687', '5621', '0'), +('13', '43', '15', '10150', '3004', '0'), +('13', '43', '15', '10163', '2300', '0'), +('13', '43', '15', '14651', '2224', '0'), +('13', '43', '20', '11666', '8360', '0'), +('13', '43', '20', '2742', '5170', '0'), +('13', '43', '20', '1364', '2170', '0'), +('13', '43', '20', '1217', '1846', '0'), +('13', '43', '12', '1243', '5168', '0'), +('13', '43', '12', '20655', '3661', '0'), +('13', '43', '12', '2336', '3609', '0'), +('13', '43', '12', '2923', '3074', '0'), +('13', '43', '18', '1651', '2493', '0'), +('13', '43', '18', '4410', '1142', '0'), +('13', '43', '18', '1244', '586', '0'), +('13', '43', '18', '1221', '454', '0'), +('13', '43', '19', '4407', '4735', '0'), +('13', '43', '19', '68239', '3482', '0'), +('13', '43', '19', '1368', '2016', '0'), +('13', '43', '19', '1652', '1834', '0'), +('13', '43', '13', '14759', '8256', '0'), +('13', '43', '13', '11650', '8247', '0'), +('13', '43', '13', '6359', '6047', '0'), +('13', '43', '13', '13500', '5632', '0'), +('13', '43', '14', '14759', '8256', '0'), +('13', '43', '14', '6359', '6047', '0'), +('13', '43', '14', '10219', '5681', '0'), +('13', '43', '14', '9246', '5206', '0'), +('13', '43', '11', '9246', '5206', '0'), +('13', '43', '11', '14762', '2204', '0'), +('13', '43', '11', '13353', '1500', '0'), +('13', '43', '11', '60396', '549', '0'), +('13', '44', '22', '10323', '0', '0'), +('13', '44', '22', '9246', '0', '0'), +('13', '44', '22', '21509', '0', '0'), +('13', '44', '22', '8007', '0', '0'), +('13', '44', '1', '14702', '3750', '0'), +('13', '44', '1', '10082', '3285', '0'), +('13', '44', '1', '14701', '2862', '0'), +('13', '44', '1', '10107', '2658', '0'), +('13', '44', '2', '1239', '6214', '0'), +('13', '44', '2', '10143', '5368', '0'), +('13', '44', '2', '1211', '5121', '0'), +('13', '44', '2', '10141', '4796', '0'), +('13', '44', '3', '11052', '7973', '0'), +('13', '44', '3', '2707', '3753', '0'), +('13', '44', '3', '4505', '3751', '0'), +('13', '44', '3', '1212', '1850', '0'), +('13', '44', '5', '14557', '7670', '0'), +('13', '44', '5', '11646', '6210', '0'), +('13', '44', '5', '14703', '6050', '0'), +('13', '44', '5', '10216', '4170', '0'), +('13', '44', '8', '11603', '13094', '0'), +('13', '44', '8', '1274', '5820', '0'), +('13', '44', '8', '2349', '3554', '0'), +('13', '44', '8', '1057', '2856', '0'), +('13', '44', '6', '1542', '8155', '0'), +('13', '44', '6', '2708', '5589', '0'), +('13', '44', '6', '1557', '5310', '0'), +('13', '44', '6', '1905', '5083', '0'), +('13', '44', '17', '11641', '13554', '0'), +('13', '44', '17', '1240', '11638', '0'), +('13', '44', '17', '1644', '11024', '0'), +('13', '44', '17', '1214', '10620', '0'), +('13', '44', '7', '1241', '4225', '0'), +('13', '44', '7', '1218', '4165', '0'), +('13', '44', '7', '1648', '3482', '0'), +('13', '44', '7', '1362', '2624', '0'), +('13', '44', '9', '1274', '5820', '0'), +('13', '44', '9', '12805', '4256', '0'), +('13', '44', '9', '1649', '3113', '0'), +('13', '44', '9', '4408', '2691', '0'), +('13', '44', '15', '11687', '5682', '0'), +('13', '44', '15', '10150', '3004', '0'), +('13', '44', '15', '10163', '2300', '0'), +('13', '44', '15', '14651', '2224', '0'), +('13', '44', '20', '11666', '8361', '0'), +('13', '44', '20', '2742', '5173', '0'), +('13', '44', '20', '1364', '2218', '0'), +('13', '44', '20', '1217', '1858', '0'), +('13', '44', '12', '1243', '5253', '0'), +('13', '44', '12', '20655', '3686', '0'), +('13', '44', '12', '2336', '3670', '0'), +('13', '44', '12', '2923', '3074', '0'), +('13', '44', '18', '1651', '2530', '0'), +('13', '44', '18', '4410', '1142', '0'), +('13', '44', '18', '1244', '586', '0'), +('13', '44', '18', '1221', '454', '0'), +('13', '44', '19', '4407', '4844', '0'), +('13', '44', '19', '68239', '3518', '0'), +('13', '44', '19', '1368', '2016', '0'), +('13', '44', '19', '1652', '1834', '0'), +('13', '44', '13', '11650', '8338', '0'), +('13', '44', '13', '14759', '8327', '0'), +('13', '44', '13', '6359', '6168', '0'), +('13', '44', '13', '13500', '5753', '0'), +('13', '44', '14', '14759', '8327', '0'), +('13', '44', '14', '6359', '6168', '0'), +('13', '44', '14', '10219', '5681', '0'), +('13', '44', '14', '9246', '5327', '0'), +('13', '44', '11', '9246', '5327', '0'), +('13', '44', '11', '14762', '2204', '0'), +('13', '44', '11', '13353', '1500', '0'), +('13', '44', '11', '60396', '562', '0'), +('13', '45', '22', '10323', '0', '0'), +('13', '45', '22', '9246', '0', '0'), +('13', '45', '22', '21509', '0', '0'), +('13', '45', '22', '8007', '0', '0'), +('13', '45', '1', '14702', '3750', '0'), +('13', '45', '1', '10082', '3358', '0'), +('13', '45', '1', '14701', '2862', '0'), +('13', '45', '1', '10107', '2718', '0'), +('13', '45', '2', '1239', '6323', '0'), +('13', '45', '2', '10143', '5368', '0'), +('13', '45', '2', '1211', '5205', '0'), +('13', '45', '2', '10141', '4904', '0'), +('13', '45', '3', '11052', '8154', '0'), +('13', '45', '3', '2707', '3838', '0'), +('13', '45', '3', '4505', '3835', '0'), +('13', '45', '3', '1212', '1862', '0'), +('13', '45', '5', '14557', '7730', '0'), +('13', '45', '5', '11646', '6367', '0'), +('13', '45', '5', '14703', '6050', '0'), +('13', '45', '5', '10216', '4230', '0'), +('13', '45', '8', '11603', '13203', '0'), +('13', '45', '8', '1274', '5929', '0'), +('13', '45', '8', '2349', '3554', '0'), +('13', '45', '8', '1057', '2916', '0'), +('13', '45', '6', '1542', '8264', '0'), +('13', '45', '6', '2708', '5591', '0'), +('13', '45', '6', '1557', '5310', '0'), +('13', '45', '6', '1905', '5085', '0'), +('13', '45', '17', '11641', '13736', '0'), +('13', '45', '17', '1240', '11810', '0'), +('13', '45', '17', '1644', '11084', '0'), +('13', '45', '17', '1214', '10780', '0'), +('13', '45', '7', '1241', '4309', '0'), +('13', '45', '7', '1218', '4249', '0'), +('13', '45', '7', '1648', '3542', '0'), +('13', '45', '7', '1362', '2624', '0'), +('13', '45', '9', '1274', '5929', '0'), +('13', '45', '9', '12805', '4256', '0'), +('13', '45', '9', '1649', '3149', '0'), +('13', '45', '9', '4408', '2751', '0'), +('13', '45', '15', '11687', '5742', '0'), +('13', '45', '15', '10150', '3004', '0'), +('13', '45', '15', '10163', '2300', '0'), +('13', '45', '15', '14651', '2224', '0'), +('13', '45', '20', '11666', '8363', '0'), +('13', '45', '20', '2742', '5175', '0'), +('13', '45', '20', '1364', '2266', '0'), +('13', '45', '20', '1217', '1870', '0'), +('13', '45', '12', '1243', '5337', '0'), +('13', '45', '12', '2336', '3730', '0'), +('13', '45', '12', '20655', '3710', '0'), +('13', '45', '12', '1650', '3103', '0'), +('13', '45', '18', '1651', '2566', '0'), +('13', '45', '18', '4410', '1142', '0'), +('13', '45', '18', '1244', '586', '0'), +('13', '45', '18', '1221', '454', '0'), +('13', '45', '19', '4407', '4953', '0'), +('13', '45', '19', '68239', '3554', '0'), +('13', '45', '19', '1368', '2016', '0'), +('13', '45', '19', '1652', '1834', '0'), +('13', '45', '13', '11650', '8428', '0'), +('13', '45', '13', '14759', '8398', '0'), +('13', '45', '13', '6359', '6289', '0'), +('13', '45', '13', '13500', '5874', '0'), +('13', '45', '14', '14759', '8398', '0'), +('13', '45', '14', '6359', '6289', '0'), +('13', '45', '14', '10219', '5681', '0'), +('13', '45', '14', '9246', '5448', '0'), +('13', '45', '11', '9246', '5448', '0'), +('13', '45', '11', '14762', '2204', '0'), +('13', '45', '11', '13353', '1500', '0'), +('13', '45', '11', '60396', '574', '0'), +('13', '46', '22', '10323', '0', '0'), +('13', '46', '22', '9246', '0', '0'), +('13', '46', '22', '21509', '0', '0'), +('13', '46', '22', '8007', '0', '0'), +('13', '46', '1', '14702', '3750', '0'), +('13', '46', '1', '10082', '3430', '0'), +('13', '46', '1', '14701', '2862', '0'), +('13', '46', '1', '10107', '2778', '0'), +('13', '46', '2', '1239', '6431', '0'), +('13', '46', '2', '10143', '5368', '0'), +('13', '46', '2', '1211', '5290', '0'), +('13', '46', '2', '10141', '5013', '0'), +('13', '46', '3', '11052', '8335', '0'), +('13', '46', '3', '2707', '3922', '0'), +('13', '46', '3', '4505', '3920', '0'), +('13', '46', '3', '1212', '1874', '0'), +('13', '46', '5', '14557', '7790', '0'), +('13', '46', '5', '11646', '6524', '0'), +('13', '46', '5', '14703', '6050', '0'), +('13', '46', '5', '10216', '4290', '0'), +('13', '46', '8', '11603', '13312', '0'), +('13', '46', '8', '1274', '6037', '0'), +('13', '46', '8', '2349', '3554', '0'), +('13', '46', '8', '1057', '2977', '0'), +('13', '46', '6', '1542', '8372', '0'), +('13', '46', '6', '2708', '5592', '0'), +('13', '46', '6', '1557', '5310', '0'), +('13', '46', '6', '1905', '5086', '0'), +('13', '46', '17', '11641', '13917', '0'), +('13', '46', '17', '1240', '11982', '0'), +('13', '46', '17', '1644', '11145', '0'), +('13', '46', '17', '1214', '10940', '0'), +('13', '46', '7', '1241', '4394', '0'), +('13', '46', '7', '1218', '4334', '0'), +('13', '46', '7', '1648', '3603', '0'), +('13', '46', '7', '1362', '2624', '0'), +('13', '46', '9', '1274', '6037', '0'), +('13', '46', '9', '12805', '4256', '0'), +('13', '46', '9', '1649', '3185', '0'), +('13', '46', '9', '4408', '2812', '0'), +('13', '46', '15', '11687', '5803', '0'), +('13', '46', '15', '10150', '3004', '0'), +('13', '46', '15', '10163', '2300', '0'), +('13', '46', '15', '14651', '2224', '0'), +('13', '46', '20', '11666', '8365', '0'), +('13', '46', '20', '2742', '5178', '0'), +('13', '46', '20', '1364', '2315', '0'), +('13', '46', '20', '1217', '1882', '0'), +('13', '46', '12', '1243', '5422', '0'), +('13', '46', '12', '2336', '3790', '0'), +('13', '46', '12', '20655', '3735', '0'), +('13', '46', '12', '1650', '3152', '0'), +('13', '46', '18', '1651', '2602', '0'), +('13', '46', '18', '4410', '1142', '0'), +('13', '46', '18', '1244', '586', '0'), +('13', '46', '18', '1221', '454', '0'), +('13', '46', '19', '4407', '5061', '0'), +('13', '46', '19', '68239', '3590', '0'), +('13', '46', '19', '1368', '2016', '0'), +('13', '46', '19', '1652', '1834', '0'), +('13', '46', '13', '11650', '8519', '0'), +('13', '46', '13', '14759', '8469', '0'), +('13', '46', '13', '6359', '6410', '0'), +('13', '46', '13', '13500', '5995', '0'), +('13', '46', '14', '14759', '8469', '0'), +('13', '46', '14', '6359', '6410', '0'), +('13', '46', '14', '10219', '5681', '0'), +('13', '46', '14', '9246', '5569', '0'), +('13', '46', '11', '9246', '5569', '0'), +('13', '46', '11', '14762', '2204', '0'), +('13', '46', '11', '13353', '1500', '0'), +('13', '46', '11', '60396', '586', '0'), +('13', '47', '22', '10323', '0', '0'), +('13', '47', '22', '9246', '0', '0'), +('13', '47', '22', '21509', '0', '0'), +('13', '47', '22', '8007', '0', '0'), +('13', '47', '1', '14702', '3750', '0'), +('13', '47', '1', '10082', '3503', '0'), +('13', '47', '1', '14701', '2862', '0'), +('13', '47', '1', '10107', '2839', '0'), +('13', '47', '2', '1239', '6540', '0'), +('13', '47', '2', '1211', '5375', '0'), +('13', '47', '2', '10143', '5368', '0'), +('13', '47', '2', '10141', '5122', '0'), +('13', '47', '3', '11052', '8516', '0'), +('13', '47', '3', '2707', '4007', '0'), +('13', '47', '3', '4505', '4005', '0'), +('13', '47', '3', '1212', '1886', '0'), +('13', '47', '5', '14557', '7851', '0'), +('13', '47', '5', '11646', '6681', '0'), +('13', '47', '5', '14703', '6050', '0'), +('13', '47', '5', '10216', '4351', '0'), +('13', '47', '8', '11603', '13420', '0'), +('13', '47', '8', '1274', '6146', '0'), +('13', '47', '8', '2349', '3554', '0'), +('13', '47', '8', '1057', '3037', '0'), +('13', '47', '6', '1542', '8481', '0'), +('13', '47', '6', '2708', '5593', '0'), +('13', '47', '6', '1557', '5310', '0'), +('13', '47', '6', '1905', '5087', '0'), +('13', '47', '17', '11641', '14098', '0'), +('13', '47', '17', '1240', '12154', '0'), +('13', '47', '17', '1644', '11205', '0'), +('13', '47', '17', '1214', '11100', '0'), +('13', '47', '7', '1241', '4478', '0'), +('13', '47', '7', '1218', '4418', '0'), +('13', '47', '7', '1648', '3663', '0'), +('13', '47', '7', '1362', '2624', '0'), +('13', '47', '9', '1274', '6146', '0'), +('13', '47', '9', '12805', '4256', '0'), +('13', '47', '9', '1649', '3221', '0'), +('13', '47', '9', '4408', '2872', '0'), +('13', '47', '15', '11687', '5863', '0'), +('13', '47', '15', '10150', '3004', '0'), +('13', '47', '15', '10163', '2300', '0'), +('13', '47', '15', '14639', '2271', '0'), +('13', '47', '20', '11666', '8366', '0'), +('13', '47', '20', '2742', '5180', '0'), +('13', '47', '20', '1364', '2363', '0'), +('13', '47', '20', '1217', '1894', '0'), +('13', '47', '12', '1243', '5506', '0'), +('13', '47', '12', '2336', '3851', '0'), +('13', '47', '12', '20655', '3760', '0'), +('13', '47', '12', '4345', '3211', '0'), +('13', '47', '18', '1651', '2638', '0'), +('13', '47', '18', '4410', '1142', '0'), +('13', '47', '18', '1244', '586', '0'), +('13', '47', '18', '1221', '454', '0'), +('13', '47', '19', '4407', '5170', '0'), +('13', '47', '19', '68239', '3627', '0'), +('13', '47', '19', '1368', '2016', '0'), +('13', '47', '19', '1652', '1834', '0'), +('13', '47', '13', '11650', '8610', '0'), +('13', '47', '13', '14759', '8541', '0'), +('13', '47', '13', '6359', '6531', '0'), +('13', '47', '13', '13500', '6116', '0'), +('13', '47', '14', '14759', '8541', '0'), +('13', '47', '14', '6359', '6531', '0'), +('13', '47', '14', '9246', '5690', '0'), +('13', '47', '14', '10219', '5681', '0'), +('13', '47', '11', '9246', '5690', '0'), +('13', '47', '11', '14762', '2204', '0'), +('13', '47', '11', '13353', '1500', '0'), +('13', '47', '11', '60396', '598', '0'), +('13', '48', '22', '10323', '0', '0'), +('13', '48', '22', '9246', '0', '0'), +('13', '48', '22', '21509', '0', '0'), +('13', '48', '22', '8007', '0', '0'), +('13', '48', '1', '14702', '3750', '0'), +('13', '48', '1', '10082', '3575', '0'), +('13', '48', '1', '10107', '2899', '0'), +('13', '48', '1', '14701', '2862', '0'), +('13', '48', '2', '1239', '6649', '0'), +('13', '48', '2', '1211', '5459', '0'), +('13', '48', '2', '10143', '5368', '0'), +('13', '48', '2', '10141', '5231', '0'), +('13', '48', '3', '11052', '8698', '0'), +('13', '48', '3', '2707', '4091', '0'), +('13', '48', '3', '4505', '4089', '0'), +('13', '48', '3', '1212', '1898', '0'), +('13', '48', '5', '14557', '7911', '0'), +('13', '48', '5', '11646', '6838', '0'), +('13', '48', '5', '14703', '6050', '0'), +('13', '48', '5', '10216', '4411', '0'), +('13', '48', '8', '11603', '13529', '0'), +('13', '48', '8', '1274', '6255', '0'), +('13', '48', '8', '2349', '3554', '0'), +('13', '48', '8', '1057', '3098', '0'), +('13', '48', '6', '1542', '8590', '0'), +('13', '48', '6', '2708', '5594', '0'), +('13', '48', '6', '1557', '5310', '0'), +('13', '48', '6', '1905', '5088', '0'), +('13', '48', '17', '11641', '14279', '0'), +('13', '48', '17', '1240', '12326', '0'), +('13', '48', '17', '1644', '11266', '0'), +('13', '48', '17', '1214', '11261', '0'), +('13', '48', '7', '1241', '4563', '0'), +('13', '48', '7', '1218', '4503', '0'), +('13', '48', '7', '1648', '3723', '0'), +('13', '48', '7', '1362', '2624', '0'), +('13', '48', '9', '1274', '6255', '0'), +('13', '48', '9', '12805', '4256', '0'), +('13', '48', '9', '1649', '3258', '0'), +('13', '48', '9', '4408', '2932', '0'), +('13', '48', '15', '11687', '5923', '0'), +('13', '48', '15', '10150', '3004', '0'), +('13', '48', '15', '14639', '2319', '0'), +('13', '48', '15', '10163', '2300', '0'), +('13', '48', '20', '11666', '8368', '0'), +('13', '48', '20', '2742', '5182', '0'), +('13', '48', '20', '1364', '2411', '0'), +('13', '48', '20', '1217', '1906', '0'), +('13', '48', '12', '1243', '5591', '0'), +('13', '48', '12', '2336', '3911', '0'), +('13', '48', '12', '20655', '3784', '0'), +('13', '48', '12', '4345', '3272', '0'), +('13', '48', '18', '1651', '2675', '0'), +('13', '48', '18', '4410', '1142', '0'), +('13', '48', '18', '1244', '586', '0'), +('13', '48', '18', '1221', '454', '0'), +('13', '48', '19', '4407', '5279', '0'), +('13', '48', '19', '68239', '3663', '0'), +('13', '48', '19', '1368', '2016', '0'), +('13', '48', '19', '1652', '1834', '0'), +('13', '48', '13', '11650', '8700', '0'), +('13', '48', '13', '14759', '8612', '0'), +('13', '48', '13', '6359', '6651', '0'), +('13', '48', '13', '13500', '6236', '0'), +('13', '48', '14', '14759', '8612', '0'), +('13', '48', '14', '6359', '6651', '0'), +('13', '48', '14', '9246', '5810', '0'), +('13', '48', '14', '10219', '5681', '0'), +('13', '48', '11', '9246', '5810', '0'), +('13', '48', '11', '14762', '2204', '0'), +('13', '48', '11', '13353', '1500', '0'), +('13', '48', '11', '60396', '610', '0'), +('13', '49', '22', '10323', '0', '0'), +('13', '49', '22', '9246', '0', '0'), +('13', '49', '22', '21509', '0', '0'), +('13', '49', '22', '8007', '0', '0'), +('13', '49', '1', '14702', '3750', '0'), +('13', '49', '1', '10082', '3648', '0'), +('13', '49', '1', '10107', '2960', '0'), +('13', '49', '1', '14701', '2862', '0'), +('13', '49', '2', '1239', '6757', '0'), +('13', '49', '2', '1211', '5544', '0'), +('13', '49', '2', '10143', '5368', '0'), +('13', '49', '2', '10141', '5339', '0'), +('13', '49', '3', '11052', '8879', '0'), +('13', '49', '3', '2707', '4176', '0'), +('13', '49', '3', '4505', '4174', '0'), +('13', '49', '3', '1212', '1910', '0'), +('13', '49', '5', '14557', '7972', '0'), +('13', '49', '5', '11646', '6995', '0'), +('13', '49', '5', '14703', '6050', '0'), +('13', '49', '5', '10216', '4472', '0'), +('13', '49', '8', '11603', '13638', '0'), +('13', '49', '8', '1274', '6364', '0'), +('13', '49', '8', '2349', '3554', '0'), +('13', '49', '8', '1057', '3158', '0'), +('13', '49', '6', '1542', '8699', '0'), +('13', '49', '6', '2708', '5595', '0'), +('13', '49', '6', '1557', '5310', '0'), +('13', '49', '6', '1905', '5089', '0'), +('13', '49', '17', '11641', '14460', '0'), +('13', '49', '17', '1240', '12498', '0'), +('13', '49', '17', '1214', '11421', '0'), +('13', '49', '17', '1644', '11326', '0'), +('13', '49', '7', '1241', '4648', '0'), +('13', '49', '7', '1218', '4588', '0'), +('13', '49', '7', '1648', '3784', '0'), +('13', '49', '7', '1362', '2624', '0'), +('13', '49', '9', '1274', '6364', '0'), +('13', '49', '9', '12805', '4256', '0'), +('13', '49', '9', '1649', '3294', '0'), +('13', '49', '9', '4408', '2993', '0'), +('13', '49', '15', '11687', '5984', '0'), +('13', '49', '15', '10150', '3004', '0'), +('13', '49', '15', '14639', '2368', '0'), +('13', '49', '15', '10163', '2300', '0'), +('13', '49', '20', '11666', '8370', '0'), +('13', '49', '20', '2742', '5185', '0'), +('13', '49', '20', '1364', '2460', '0'), +('13', '49', '20', '1217', '1918', '0'), +('13', '49', '12', '1243', '5675', '0'), +('13', '49', '12', '2336', '3972', '0'), +('13', '49', '12', '20655', '3809', '0'), +('13', '49', '12', '4345', '3332', '0'), +('13', '49', '18', '1651', '2711', '0'), +('13', '49', '18', '4410', '1142', '0'), +('13', '49', '18', '1244', '586', '0'), +('13', '49', '18', '1221', '454', '0'), +('13', '49', '19', '4407', '5387', '0'), +('13', '49', '19', '68239', '3699', '0'), +('13', '49', '19', '1368', '2016', '0'), +('13', '49', '19', '1652', '1834', '0'), +('13', '49', '13', '11650', '8791', '0'), +('13', '49', '13', '14759', '8683', '0'), +('13', '49', '13', '6359', '6772', '0'), +('13', '49', '13', '13500', '6357', '0'), +('13', '49', '14', '14759', '8683', '0'), +('13', '49', '14', '6359', '6772', '0'), +('13', '49', '14', '9246', '5931', '0'), +('13', '49', '14', '10219', '5681', '0'), +('13', '49', '11', '9246', '5931', '0'), +('13', '49', '11', '14762', '2204', '0'), +('13', '49', '11', '13353', '1500', '0'), +('13', '49', '11', '60396', '622', '0'), +('13', '50', '22', '10323', '0', '0'), +('13', '50', '22', '9246', '0', '0'), +('13', '50', '22', '21509', '0', '0'), +('13', '50', '22', '8007', '0', '0'), +('13', '50', '1', '14702', '3750', '0'), +('13', '50', '1', '10082', '3720', '0'), +('13', '50', '1', '10107', '3020', '0'), +('13', '50', '1', '14701', '2862', '0'), +('13', '50', '2', '1239', '6866', '0'), +('13', '50', '2', '1211', '5628', '0'), +('13', '50', '2', '10141', '5448', '0'), +('13', '50', '2', '10143', '5368', '0'), +('13', '50', '3', '11052', '9060', '0'), +('13', '50', '3', '2707', '4261', '0'), +('13', '50', '3', '4505', '4258', '0'), +('13', '50', '3', '1212', '1922', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '50', '5', '14557', '8032', '0'), +('13', '50', '5', '11646', '7152', '0'), +('13', '50', '5', '14703', '6050', '0'), +('13', '50', '5', '10216', '4532', '0'), +('13', '50', '8', '11603', '13746', '0'), +('13', '50', '8', '1274', '6472', '0'), +('13', '50', '8', '2349', '3554', '0'), +('13', '50', '8', '1057', '3218', '0'), +('13', '50', '6', '1542', '8807', '0'), +('13', '50', '6', '2708', '5597', '0'), +('13', '50', '6', '1557', '5310', '0'), +('13', '50', '6', '1905', '5091', '0'), +('13', '50', '17', '11641', '14642', '0'), +('13', '50', '17', '1240', '12670', '0'), +('13', '50', '17', '1214', '11581', '0'), +('13', '50', '17', '1644', '11386', '0'), +('13', '50', '7', '1241', '4732', '0'), +('13', '50', '7', '1218', '4672', '0'), +('13', '50', '7', '1648', '3844', '0'), +('13', '50', '7', '1362', '2624', '0'), +('13', '50', '9', '1274', '6472', '0'), +('13', '50', '9', '12805', '4256', '0'), +('13', '50', '9', '1649', '3330', '0'), +('13', '50', '9', '4408', '3053', '0'), +('13', '50', '15', '11687', '6044', '0'), +('13', '50', '15', '10150', '3004', '0'), +('13', '50', '15', '14639', '2416', '0'), +('13', '50', '15', '10163', '2300', '0'), +('13', '50', '20', '11666', '8371', '0'), +('13', '50', '20', '2742', '5187', '0'), +('13', '50', '20', '1364', '2508', '0'), +('13', '50', '20', '1217', '1931', '0'), +('13', '50', '12', '1243', '5760', '0'), +('13', '50', '12', '2336', '4032', '0'), +('13', '50', '12', '20655', '3834', '0'), +('13', '50', '12', '4345', '3392', '0'), +('13', '50', '18', '1651', '2747', '0'), +('13', '50', '18', '4410', '1142', '0'), +('13', '50', '18', '1244', '586', '0'), +('13', '50', '18', '1221', '454', '0'), +('13', '50', '19', '4407', '5496', '0'), +('13', '50', '19', '68239', '3735', '0'), +('13', '50', '19', '1368', '2016', '0'), +('13', '50', '19', '1652', '1834', '0'), +('13', '50', '13', '11650', '8881', '0'), +('13', '50', '13', '14759', '8755', '0'), +('13', '50', '13', '6359', '6893', '0'), +('13', '50', '13', '13500', '6478', '0'), +('13', '50', '14', '14759', '8755', '0'), +('13', '50', '14', '6359', '6893', '0'), +('13', '50', '14', '9246', '6052', '0'), +('13', '50', '14', '10404', '5736', '0'), +('13', '50', '11', '9246', '6052', '0'), +('13', '50', '11', '14762', '2204', '0'), +('13', '50', '11', '13353', '1500', '0'), +('13', '50', '11', '60396', '634', '0'), +('13', '51', '22', '10323', '0', '0'), +('13', '51', '22', '9246', '0', '0'), +('13', '51', '22', '21509', '0', '0'), +('13', '51', '22', '8007', '0', '0'), +('13', '51', '1', '10082', '3793', '0'), +('13', '51', '1', '14702', '3750', '0'), +('13', '51', '1', '10107', '3080', '0'), +('13', '51', '1', '14701', '2862', '0'), +('13', '51', '2', '1239', '6975', '0'), +('13', '51', '2', '1211', '5713', '0'), +('13', '51', '2', '10141', '5557', '0'), +('13', '51', '2', '10143', '5368', '0'), +('13', '51', '3', '11052', '9241', '0'), +('13', '51', '3', '2707', '4345', '0'), +('13', '51', '3', '4505', '4343', '0'), +('13', '51', '3', '1212', '1934', '0'), +('13', '51', '5', '14557', '8092', '0'), +('13', '51', '5', '11646', '7309', '0'), +('13', '51', '5', '14703', '6050', '0'), +('13', '51', '5', '10216', '4592', '0'), +('13', '51', '8', '11603', '13855', '0'), +('13', '51', '8', '1274', '6581', '0'), +('13', '51', '8', '2349', '3554', '0'), +('13', '51', '8', '1057', '3279', '0'), +('13', '51', '6', '1542', '8916', '0'), +('13', '51', '6', '2708', '5598', '0'), +('13', '51', '6', '1557', '5310', '0'), +('13', '51', '6', '1905', '5092', '0'), +('13', '51', '17', '11641', '14823', '0'), +('13', '51', '17', '1240', '12842', '0'), +('13', '51', '17', '1214', '11741', '0'), +('13', '51', '17', '1644', '11447', '0'), +('13', '51', '7', '27885', '6055', '0'), +('13', '51', '7', '1241', '4817', '0'), +('13', '51', '7', '1218', '4757', '0'), +('13', '51', '7', '1648', '3905', '0'), +('13', '51', '9', '1274', '6581', '0'), +('13', '51', '9', '12805', '4256', '0'), +('13', '51', '9', '1649', '3366', '0'), +('13', '51', '9', '4408', '3114', '0'), +('13', '51', '15', '11687', '6105', '0'), +('13', '51', '15', '10150', '3004', '0'), +('13', '51', '15', '14639', '2464', '0'), +('13', '51', '15', '10163', '2300', '0'), +('13', '51', '20', '11666', '8373', '0'), +('13', '51', '20', '2742', '5190', '0'), +('13', '51', '20', '1364', '2556', '0'), +('13', '51', '20', '1217', '1943', '0'), +('13', '51', '12', '1243', '5845', '0'), +('13', '51', '12', '2336', '4092', '0'), +('13', '51', '12', '20655', '3858', '0'), +('13', '51', '12', '4345', '3453', '0'), +('13', '51', '18', '1651', '2783', '0'), +('13', '51', '18', '4410', '1142', '0'), +('13', '51', '18', '1244', '586', '0'), +('13', '51', '18', '1221', '454', '0'), +('13', '51', '19', '4407', '5605', '0'), +('13', '51', '19', '68239', '3772', '0'), +('13', '51', '19', '1368', '2016', '0'), +('13', '51', '19', '1652', '1834', '0'), +('13', '51', '13', '11650', '8972', '0'), +('13', '51', '13', '14759', '8826', '0'), +('13', '51', '13', '6359', '7014', '0'), +('13', '51', '13', '13500', '6599', '0'), +('13', '51', '14', '14759', '8826', '0'), +('13', '51', '14', '6359', '7014', '0'), +('13', '51', '14', '9246', '6173', '0'), +('13', '51', '14', '10404', '5845', '0'), +('13', '51', '11', '9246', '6173', '0'), +('13', '51', '11', '14762', '2204', '0'), +('13', '51', '11', '13353', '1500', '0'), +('13', '51', '11', '60396', '646', '0'), +('13', '52', '22', '10323', '0', '0'), +('13', '52', '22', '9246', '0', '0'), +('13', '52', '22', '21509', '0', '0'), +('13', '52', '22', '8007', '0', '0'), +('13', '52', '1', '10082', '3865', '0'), +('13', '52', '1', '14702', '3750', '0'), +('13', '52', '1', '10107', '3141', '0'), +('13', '52', '1', '14701', '2862', '0'), +('13', '52', '2', '1239', '7084', '0'), +('13', '52', '2', '1211', '5797', '0'), +('13', '52', '2', '10141', '5666', '0'), +('13', '52', '2', '10143', '5368', '0'), +('13', '52', '3', '11052', '9422', '0'), +('13', '52', '3', '2707', '4430', '0'), +('13', '52', '3', '4505', '4427', '0'), +('13', '52', '3', '1212', '1946', '0'), +('13', '52', '5', '14557', '8153', '0'), +('13', '52', '5', '11646', '7466', '0'), +('13', '52', '5', '14703', '6050', '0'), +('13', '52', '5', '10216', '4653', '0'), +('13', '52', '8', '11603', '13964', '0'), +('13', '52', '8', '1274', '6690', '0'), +('13', '52', '8', '2349', '3554', '0'), +('13', '52', '8', '1057', '3339', '0'), +('13', '52', '6', '1542', '9025', '0'), +('13', '52', '6', '2708', '5599', '0'), +('13', '52', '6', '1557', '5310', '0'), +('13', '52', '6', '1905', '5093', '0'), +('13', '52', '17', '11641', '15004', '0'), +('13', '52', '17', '1240', '13014', '0'), +('13', '52', '17', '1214', '11901', '0'), +('13', '52', '17', '1644', '11507', '0'), +('13', '52', '7', '27885', '6103', '0'), +('13', '52', '7', '1241', '4901', '0'), +('13', '52', '7', '1218', '4841', '0'), +('13', '52', '7', '1648', '3965', '0'), +('13', '52', '9', '1274', '6690', '0'), +('13', '52', '9', '12805', '4256', '0'), +('13', '52', '9', '1649', '3403', '0'), +('13', '52', '9', '4408', '3174', '0'), +('13', '52', '15', '11687', '6165', '0'), +('13', '52', '15', '10150', '3004', '0'), +('13', '52', '15', '14639', '2513', '0'), +('13', '52', '15', '10163', '2300', '0'), +('13', '52', '20', '11666', '8375', '0'), +('13', '52', '20', '2742', '5192', '0'), +('13', '52', '20', '1364', '2605', '0'), +('13', '52', '20', '1217', '1955', '0'), +('13', '52', '12', '1243', '5929', '0'), +('13', '52', '12', '2336', '4153', '0'), +('13', '52', '12', '20655', '3883', '0'), +('13', '52', '12', '4345', '3513', '0'), +('13', '52', '18', '1651', '2820', '0'), +('13', '52', '18', '4410', '1142', '0'), +('13', '52', '18', '1244', '586', '0'), +('13', '52', '18', '1221', '454', '0'), +('13', '52', '19', '4407', '5714', '0'), +('13', '52', '19', '68239', '3808', '0'), +('13', '52', '19', '1368', '2016', '0'), +('13', '52', '19', '1652', '1834', '0'), +('13', '52', '13', '11650', '9063', '0'), +('13', '52', '13', '14759', '8897', '0'), +('13', '52', '13', '6359', '7135', '0'), +('13', '52', '13', '13500', '6720', '0'), +('13', '52', '14', '14759', '8897', '0'), +('13', '52', '14', '6359', '7135', '0'), +('13', '52', '14', '9246', '6294', '0'), +('13', '52', '14', '10404', '5953', '0'), +('13', '52', '11', '9246', '6294', '0'), +('13', '52', '11', '14762', '2204', '0'), +('13', '52', '11', '13353', '1500', '0'), +('13', '52', '11', '60396', '658', '0'), +('13', '53', '22', '10323', '0', '0'), +('13', '53', '22', '9246', '0', '0'), +('13', '53', '22', '21509', '0', '0'), +('13', '53', '22', '8007', '0', '0'), +('13', '53', '1', '10082', '3938', '0'), +('13', '53', '1', '14702', '3750', '0'), +('13', '53', '1', '10107', '3201', '0'), +('13', '53', '1', '14701', '2862', '0'), +('13', '53', '2', '1239', '7192', '0'), +('13', '53', '2', '1211', '5882', '0'), +('13', '53', '2', '10141', '5774', '0'), +('13', '53', '2', '10143', '5368', '0'), +('13', '53', '3', '11052', '9604', '0'), +('13', '53', '3', '2707', '4514', '0'), +('13', '53', '3', '4505', '4512', '0'), +('13', '53', '3', '1212', '1958', '0'), +('13', '53', '5', '14557', '8213', '0'), +('13', '53', '5', '11646', '7623', '0'), +('13', '53', '5', '14703', '6050', '0'), +('13', '53', '5', '10216', '4713', '0'), +('13', '53', '8', '11603', '14073', '0'), +('13', '53', '8', '1274', '6798', '0'), +('13', '53', '8', '2349', '3554', '0'), +('13', '53', '8', '1057', '3400', '0'), +('13', '53', '6', '1542', '9133', '0'), +('13', '53', '6', '2708', '5600', '0'), +('13', '53', '6', '1557', '5310', '0'), +('13', '53', '6', '1905', '5094', '0'), +('13', '53', '17', '11641', '15185', '0'), +('13', '53', '17', '1240', '13186', '0'), +('13', '53', '17', '1214', '12061', '0'), +('13', '53', '17', '1644', '11568', '0'), +('13', '53', '7', '27885', '6151', '0'), +('13', '53', '7', '1241', '4986', '0'), +('13', '53', '7', '1218', '4926', '0'), +('13', '53', '7', '1648', '4025', '0'), +('13', '53', '9', '1274', '6798', '0'), +('13', '53', '9', '12805', '4256', '0'), +('13', '53', '9', '1649', '3439', '0'), +('13', '53', '9', '4408', '3234', '0'), +('13', '53', '15', '11687', '6225', '0'), +('13', '53', '15', '10150', '3004', '0'), +('13', '53', '15', '14639', '2561', '0'), +('13', '53', '15', '10163', '2300', '0'), +('13', '53', '20', '11666', '8376', '0'), +('13', '53', '20', '2742', '5194', '0'), +('13', '53', '20', '1364', '2653', '0'), +('13', '53', '20', '1217', '1967', '0'), +('13', '53', '12', '1243', '6014', '0'), +('13', '53', '12', '2336', '4213', '0'), +('13', '53', '12', '20655', '3908', '0'), +('13', '53', '12', '4345', '3574', '0'), +('13', '53', '18', '1651', '2856', '0'), +('13', '53', '18', '4410', '1142', '0'), +('13', '53', '18', '1244', '586', '0'), +('13', '53', '18', '1221', '454', '0'), +('13', '53', '19', '4407', '5822', '0'), +('13', '53', '19', '68239', '3844', '0'), +('13', '53', '19', '1368', '2016', '0'), +('13', '53', '19', '1652', '1834', '0'), +('13', '53', '13', '11650', '9153', '0'), +('13', '53', '13', '14759', '8968', '0'), +('13', '53', '13', '6359', '7255', '0'), +('13', '53', '13', '13500', '6840', '0'), +('13', '53', '14', '14759', '8968', '0'), +('13', '53', '14', '6359', '7255', '0'), +('13', '53', '14', '9246', '6414', '0'), +('13', '53', '14', '10404', '6062', '0'), +('13', '53', '11', '9246', '6414', '0'), +('13', '53', '11', '14762', '2204', '0'), +('13', '53', '11', '13353', '1500', '0'), +('13', '53', '11', '60396', '670', '0'), +('13', '54', '22', '10323', '0', '0'), +('13', '54', '22', '9246', '0', '0'), +('13', '54', '22', '21509', '0', '0'), +('13', '54', '22', '8007', '0', '0'), +('13', '54', '1', '10082', '4010', '0'), +('13', '54', '1', '14702', '3750', '0'), +('13', '54', '1', '10107', '3262', '0'), +('13', '54', '1', '14701', '2862', '0'), +('13', '54', '2', '1239', '7301', '0'), +('13', '54', '2', '1211', '5966', '0'), +('13', '54', '2', '10141', '5883', '0'), +('13', '54', '2', '10143', '5368', '0'), +('13', '54', '3', '11052', '9785', '0'), +('13', '54', '3', '2707', '4599', '0'), +('13', '54', '3', '4505', '4596', '0'), +('13', '54', '3', '10101', '1975', '0'), +('13', '54', '5', '14557', '8274', '0'), +('13', '54', '5', '11646', '7780', '0'), +('13', '54', '5', '14703', '6050', '0'), +('13', '54', '5', '10216', '4774', '0'), +('13', '54', '8', '11603', '14181', '0'), +('13', '54', '8', '1274', '6907', '0'), +('13', '54', '8', '2349', '3554', '0'), +('13', '54', '8', '1057', '3460', '0'), +('13', '54', '6', '1542', '9242', '0'), +('13', '54', '6', '2708', '5601', '0'), +('13', '54', '6', '1557', '5310', '0'), +('13', '54', '6', '1905', '5095', '0'), +('13', '54', '17', '11641', '15366', '0'), +('13', '54', '17', '1240', '13358', '0'), +('13', '54', '17', '1214', '12222', '0'), +('13', '54', '17', '1644', '11628', '0'), +('13', '54', '7', '27885', '6199', '0'), +('13', '54', '7', '1241', '5070', '0'), +('13', '54', '7', '1218', '5010', '0'), +('13', '54', '7', '1648', '4086', '0'), +('13', '54', '9', '1274', '6907', '0'), +('13', '54', '9', '12805', '4256', '0'), +('13', '54', '9', '1649', '3475', '0'), +('13', '54', '9', '4408', '3295', '0'), +('13', '54', '15', '11687', '6286', '0'), +('13', '54', '15', '10150', '3004', '0'), +('13', '54', '15', '14639', '2609', '0'), +('13', '54', '15', '10163', '2300', '0'), +('13', '54', '20', '11666', '8378', '0'), +('13', '54', '20', '2742', '5197', '0'), +('13', '54', '20', '1364', '2701', '0'), +('13', '54', '20', '1217', '1979', '0'), +('13', '54', '12', '1243', '6098', '0'), +('13', '54', '12', '2336', '4274', '0'), +('13', '54', '12', '20655', '3932', '0'), +('13', '54', '12', '4345', '3634', '0'), +('13', '54', '18', '1651', '2892', '0'), +('13', '54', '18', '4410', '1142', '0'), +('13', '54', '18', '1244', '586', '0'), +('13', '54', '18', '1221', '454', '0'), +('13', '54', '19', '4407', '5931', '0'), +('13', '54', '19', '68239', '3880', '0'), +('13', '54', '19', '1368', '2016', '0'), +('13', '54', '19', '1652', '1834', '0'), +('13', '54', '13', '11650', '9244', '0'), +('13', '54', '13', '14759', '9040', '0'), +('13', '54', '13', '6359', '7376', '0'), +('13', '54', '13', '13500', '6961', '0'), +('13', '54', '14', '14759', '9040', '0'), +('13', '54', '14', '6359', '7376', '0'), +('13', '54', '14', '9246', '6535', '0'), +('13', '54', '14', '10404', '6171', '0'), +('13', '54', '11', '9246', '6535', '0'), +('13', '54', '11', '14762', '2204', '0'), +('13', '54', '11', '13353', '1500', '0'), +('13', '54', '11', '60396', '682', '0'), +('13', '55', '22', '10323', '0', '0'), +('13', '55', '22', '9246', '0', '0'), +('13', '55', '22', '21509', '0', '0'), +('13', '55', '22', '8007', '0', '0'), +('13', '55', '1', '10082', '4083', '0'), +('13', '55', '1', '14702', '3750', '0'), +('13', '55', '1', '10107', '3322', '0'), +('13', '55', '1', '14701', '2862', '0'), +('13', '55', '2', '1239', '7410', '0'), +('13', '55', '2', '1211', '6051', '0'), +('13', '55', '2', '10141', '5992', '0'), +('13', '55', '2', '10143', '5368', '0'), +('13', '55', '3', '11052', '9966', '0'), +('13', '55', '3', '2707', '4683', '0'), +('13', '55', '3', '4505', '4681', '0'), +('13', '55', '3', '10101', '2011', '0'), +('13', '55', '5', '14557', '8334', '0'), +('13', '55', '5', '11646', '7937', '0'), +('13', '55', '5', '14703', '6050', '0'), +('13', '55', '5', '10216', '4834', '0'), +('13', '55', '8', '11603', '14290', '0'), +('13', '55', '8', '1274', '7016', '0'), +('13', '55', '8', '2349', '3554', '0'), +('13', '55', '8', '1057', '3520', '0'), +('13', '55', '6', '1542', '9351', '0'), +('13', '55', '6', '2708', '5603', '0'), +('13', '55', '6', '1557', '5310', '0'), +('13', '55', '6', '1905', '5097', '0'), +('13', '55', '17', '11641', '15548', '0'), +('13', '55', '17', '1240', '13531', '0'), +('13', '55', '17', '1214', '12382', '0'), +('13', '55', '17', '1644', '11688', '0'), +('13', '55', '7', '27885', '6248', '0'), +('13', '55', '7', '1241', '5155', '0'), +('13', '55', '7', '1218', '5095', '0'), +('13', '55', '7', '1648', '4146', '0'), +('13', '55', '9', '1274', '7016', '0'), +('13', '55', '9', '12805', '4256', '0'), +('13', '55', '9', '1649', '3511', '0'), +('13', '55', '9', '4408', '3355', '0'), +('13', '55', '15', '11687', '6346', '0'), +('13', '55', '15', '10150', '3004', '0'), +('13', '55', '15', '14639', '2658', '0'), +('13', '55', '15', '10163', '2300', '0'), +('13', '55', '20', '11666', '8380', '0'), +('13', '55', '20', '2742', '5199', '0'), +('13', '55', '20', '1364', '2750', '0'), +('13', '55', '20', '1217', '1991', '0'), +('13', '55', '12', '1243', '6183', '0'), +('13', '55', '12', '2336', '4334', '0'), +('13', '55', '12', '20655', '3957', '0'), +('13', '55', '12', '4345', '3694', '0'), +('13', '55', '18', '1651', '2928', '0'), +('13', '55', '18', '4410', '1142', '0'), +('13', '55', '18', '1244', '586', '0'), +('13', '55', '18', '1221', '454', '0'), +('13', '55', '19', '4407', '6040', '0'), +('13', '55', '19', '68239', '3917', '0'), +('13', '55', '19', '1368', '2016', '0'), +('13', '55', '19', '1652', '1834', '0'), +('13', '55', '13', '11650', '9334', '0'), +('13', '55', '13', '14759', '9111', '0'), +('13', '55', '13', '6359', '7497', '0'), +('13', '55', '13', '13500', '7082', '0'), +('13', '55', '14', '14759', '9111', '0'), +('13', '55', '14', '6359', '7497', '0'), +('13', '55', '14', '9246', '6656', '0'), +('13', '55', '14', '10404', '6280', '0'), +('13', '55', '11', '9246', '6656', '0'), +('13', '55', '11', '14762', '2204', '0'), +('13', '55', '11', '13353', '1500', '0'), +('13', '55', '11', '60396', '694', '0'), +('13', '56', '22', '10323', '0', '0'), +('13', '56', '22', '9246', '0', '0'), +('13', '56', '22', '21509', '0', '0'), +('13', '56', '22', '8007', '0', '0'), +('13', '56', '1', '10082', '4155', '0'), +('13', '56', '1', '14702', '3750', '0'), +('13', '56', '1', '10107', '3382', '0'), +('13', '56', '1', '14701', '2862', '0'), +('13', '56', '2', '1239', '7519', '0'), +('13', '56', '2', '1211', '6136', '0'), +('13', '56', '2', '10141', '6100', '0'), +('13', '56', '2', '10143', '5368', '0'), +('13', '56', '3', '11052', '10147', '0'), +('13', '56', '3', '2707', '4768', '0'), +('13', '56', '3', '4505', '4766', '0'), +('13', '56', '3', '10101', '2048', '0'), +('13', '56', '5', '14557', '8394', '0'), +('13', '56', '5', '11646', '8094', '0'), +('13', '56', '5', '14703', '6050', '0'), +('13', '56', '5', '10216', '4894', '0'), +('13', '56', '8', '11603', '14399', '0'), +('13', '56', '8', '1274', '7125', '0'), +('13', '56', '8', '1057', '3581', '0'), +('13', '56', '8', '2349', '3554', '0'), +('13', '56', '6', '1542', '9460', '0'), +('13', '56', '6', '2708', '5604', '0'), +('13', '56', '6', '1557', '5310', '0'), +('13', '56', '6', '1905', '5098', '0'), +('13', '56', '17', '11641', '15729', '0'), +('13', '56', '17', '1240', '13703', '0'), +('13', '56', '17', '1214', '12542', '0'), +('13', '56', '17', '1644', '11749', '0'), +('13', '56', '7', '27885', '6296', '0'), +('13', '56', '7', '1241', '5240', '0'), +('13', '56', '7', '1218', '5180', '0'), +('13', '56', '7', '1648', '4207', '0'), +('13', '56', '9', '1274', '7125', '0'), +('13', '56', '9', '12805', '4256', '0'), +('13', '56', '9', '1649', '3548', '0'), +('13', '56', '9', '4408', '3416', '0'), +('13', '56', '15', '11687', '6407', '0'), +('13', '56', '15', '10150', '3004', '0'), +('13', '56', '15', '14639', '2706', '0'), +('13', '56', '15', '10163', '2300', '0'), +('13', '56', '20', '11666', '8382', '0'), +('13', '56', '20', '2742', '5202', '0'), +('13', '56', '20', '1364', '2798', '0'), +('13', '56', '20', '1217', '2003', '0'), +('13', '56', '12', '1243', '6267', '0'), +('13', '56', '12', '2336', '4394', '0'), +('13', '56', '12', '20655', '3981', '0'), +('13', '56', '12', '4345', '3755', '0'), +('13', '56', '18', '1651', '2964', '0'), +('13', '56', '18', '4410', '1142', '0'), +('13', '56', '18', '1244', '586', '0'), +('13', '56', '18', '1221', '454', '0'), +('13', '56', '19', '4407', '6149', '0'), +('13', '56', '19', '68239', '3953', '0'), +('13', '56', '19', '1368', '2016', '0'), +('13', '56', '19', '1652', '1834', '0'), +('13', '56', '13', '11650', '9425', '0'), +('13', '56', '13', '14759', '9182', '0'), +('13', '56', '13', '6359', '7618', '0'), +('13', '56', '13', '13500', '7203', '0'), +('13', '56', '14', '14759', '9182', '0'), +('13', '56', '14', '6359', '7618', '0'), +('13', '56', '14', '9246', '6777', '0'), +('13', '56', '14', '10404', '6388', '0'), +('13', '56', '11', '9246', '6777', '0'), +('13', '56', '11', '14762', '2204', '0'), +('13', '56', '11', '13353', '1500', '0'), +('13', '56', '11', '60396', '706', '0'), +('13', '57', '22', '10323', '0', '0'), +('13', '57', '22', '9246', '0', '0'), +('13', '57', '22', '21509', '0', '0'), +('13', '57', '22', '8007', '0', '0'), +('13', '57', '1', '10082', '4228', '0'), +('13', '57', '1', '14702', '3750', '0'), +('13', '57', '1', '10107', '3443', '0'), +('13', '57', '1', '14701', '2862', '0'), +('13', '57', '2', '1239', '7627', '0'), +('13', '57', '2', '1211', '6220', '0'), +('13', '57', '2', '10141', '6209', '0'), +('13', '57', '2', '10143', '5368', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '57', '3', '11052', '10328', '0'), +('13', '57', '3', '2707', '4853', '0'), +('13', '57', '3', '4505', '4850', '0'), +('13', '57', '3', '10101', '2084', '0'), +('13', '57', '5', '14557', '8455', '0'), +('13', '57', '5', '11646', '8251', '0'), +('13', '57', '5', '14703', '6050', '0'), +('13', '57', '5', '10216', '4955', '0'), +('13', '57', '8', '11603', '14507', '0'), +('13', '57', '8', '1274', '7233', '0'), +('13', '57', '8', '1057', '3641', '0'), +('13', '57', '8', '2349', '3554', '0'), +('13', '57', '6', '1542', '9568', '0'), +('13', '57', '6', '2708', '5605', '0'), +('13', '57', '6', '1557', '5310', '0'), +('13', '57', '6', '1905', '5099', '0'), +('13', '57', '17', '11641', '15910', '0'), +('13', '57', '17', '1240', '13875', '0'), +('13', '57', '17', '1214', '12702', '0'), +('13', '57', '17', '1644', '11809', '0'), +('13', '57', '7', '27885', '6344', '0'), +('13', '57', '7', '1241', '5324', '0'), +('13', '57', '7', '1218', '5264', '0'), +('13', '57', '7', '1648', '4267', '0'), +('13', '57', '9', '1274', '7233', '0'), +('13', '57', '9', '12805', '4256', '0'), +('13', '57', '9', '1649', '3584', '0'), +('13', '57', '9', '4408', '3476', '0'), +('13', '57', '15', '11687', '6467', '0'), +('13', '57', '15', '10150', '3004', '0'), +('13', '57', '15', '14639', '2754', '0'), +('13', '57', '15', '10163', '2300', '0'), +('13', '57', '20', '11666', '8383', '0'), +('13', '57', '20', '2742', '5204', '0'), +('13', '57', '20', '1364', '2846', '0'), +('13', '57', '20', '1217', '2015', '0'), +('13', '57', '12', '1243', '6352', '0'), +('13', '57', '12', '2336', '4455', '0'), +('13', '57', '12', '20655', '4006', '0'), +('13', '57', '12', '4345', '3815', '0'), +('13', '57', '18', '1651', '3001', '0'), +('13', '57', '18', '4410', '1142', '0'), +('13', '57', '18', '1244', '586', '0'), +('13', '57', '18', '1221', '454', '0'), +('13', '57', '19', '4407', '6257', '0'), +('13', '57', '19', '68239', '3989', '0'), +('13', '57', '19', '1368', '2016', '0'), +('13', '57', '19', '1652', '1834', '0'), +('13', '57', '13', '11650', '9516', '0'), +('13', '57', '13', '14759', '9253', '0'), +('13', '57', '13', '6359', '7739', '0'), +('13', '57', '13', '13500', '7324', '0'), +('13', '57', '14', '14759', '9253', '0'), +('13', '57', '14', '6359', '7739', '0'), +('13', '57', '14', '9246', '6898', '0'), +('13', '57', '14', '10404', '6497', '0'), +('13', '57', '11', '9246', '6898', '0'), +('13', '57', '11', '14762', '2204', '0'), +('13', '57', '11', '13353', '1500', '0'), +('13', '57', '11', '60396', '719', '0'), +('13', '58', '22', '10323', '0', '0'), +('13', '58', '22', '9246', '0', '0'), +('13', '58', '22', '21509', '0', '0'), +('13', '58', '22', '8007', '0', '0'), +('13', '58', '1', '10082', '4300', '0'), +('13', '58', '1', '14702', '3750', '0'), +('13', '58', '1', '10107', '3503', '0'), +('13', '58', '1', '14701', '2862', '0'), +('13', '58', '2', '1239', '7736', '0'), +('13', '58', '2', '10141', '6318', '0'), +('13', '58', '2', '1211', '6305', '0'), +('13', '58', '2', '10143', '5368', '0'), +('13', '58', '3', '11052', '10510', '0'), +('13', '58', '3', '2707', '4937', '0'), +('13', '58', '3', '4505', '4935', '0'), +('13', '58', '3', '10101', '2120', '0'), +('13', '58', '5', '14557', '8515', '0'), +('13', '58', '5', '11646', '8408', '0'), +('13', '58', '5', '14703', '6050', '0'), +('13', '58', '5', '10216', '5015', '0'), +('13', '58', '8', '11603', '14616', '0'), +('13', '58', '8', '1274', '7342', '0'), +('13', '58', '8', '1057', '3702', '0'), +('13', '58', '8', '2349', '3554', '0'), +('13', '58', '6', '1542', '9677', '0'), +('13', '58', '6', '2708', '5606', '0'), +('13', '58', '6', '1557', '5310', '0'), +('13', '58', '6', '1905', '5100', '0'), +('13', '58', '17', '11641', '16091', '0'), +('13', '58', '17', '1240', '14047', '0'), +('13', '58', '17', '1214', '12862', '0'), +('13', '58', '17', '1644', '11870', '0'), +('13', '58', '7', '27885', '6393', '0'), +('13', '58', '7', '1241', '5409', '0'), +('13', '58', '7', '1218', '5349', '0'), +('13', '58', '7', '1648', '4327', '0'), +('13', '58', '9', '1274', '7342', '0'), +('13', '58', '9', '12805', '4256', '0'), +('13', '58', '9', '1649', '3620', '0'), +('13', '58', '9', '4408', '3536', '0'), +('13', '58', '15', '11687', '6527', '0'), +('13', '58', '15', '10150', '3004', '0'), +('13', '58', '15', '14639', '2803', '0'), +('13', '58', '15', '10163', '2300', '0'), +('13', '58', '20', '11666', '8385', '0'), +('13', '58', '20', '2742', '5207', '0'), +('13', '58', '20', '1364', '2895', '0'), +('13', '58', '20', '1217', '2027', '0'), +('13', '58', '12', '1243', '6436', '0'), +('13', '58', '12', '2336', '4515', '0'), +('13', '58', '12', '20655', '4031', '0'), +('13', '58', '12', '4345', '3876', '0'), +('13', '58', '18', '1651', '3037', '0'), +('13', '58', '18', '4410', '1142', '0'), +('13', '58', '18', '1244', '586', '0'), +('13', '58', '18', '1221', '454', '0'), +('13', '58', '19', '4407', '6366', '0'), +('13', '58', '19', '68239', '4025', '0'), +('13', '58', '19', '1368', '2016', '0'), +('13', '58', '19', '1652', '1834', '0'), +('13', '58', '13', '11650', '9606', '0'), +('13', '58', '13', '14759', '9325', '0'), +('13', '58', '13', '6359', '7859', '0'), +('13', '58', '13', '13500', '7444', '0'), +('13', '58', '14', '14759', '9325', '0'), +('13', '58', '14', '6359', '7859', '0'), +('13', '58', '14', '9246', '7018', '0'), +('13', '58', '14', '10404', '6606', '0'), +('13', '58', '11', '9246', '7018', '0'), +('13', '58', '11', '14762', '2204', '0'), +('13', '58', '11', '13353', '1500', '0'), +('13', '58', '11', '60396', '731', '0'), +('13', '59', '22', '10323', '0', '0'), +('13', '59', '22', '9246', '0', '0'), +('13', '59', '22', '21509', '0', '0'), +('13', '59', '22', '8007', '0', '0'), +('13', '59', '1', '10082', '4373', '0'), +('13', '59', '1', '14702', '3750', '0'), +('13', '59', '1', '10107', '3564', '0'), +('13', '59', '1', '14701', '2862', '0'), +('13', '59', '2', '1239', '7845', '0'), +('13', '59', '2', '10141', '6427', '0'), +('13', '59', '2', '1211', '6389', '0'), +('13', '59', '2', '10143', '5368', '0'), +('13', '59', '3', '11052', '10691', '0'), +('13', '59', '3', '2707', '5022', '0'), +('13', '59', '3', '4505', '5019', '0'), +('13', '59', '3', '10101', '2156', '0'), +('13', '59', '5', '14557', '8576', '0'), +('13', '59', '5', '11646', '8565', '0'), +('13', '59', '5', '14703', '6050', '0'), +('13', '59', '5', '10216', '5076', '0'), +('13', '59', '8', '11603', '14725', '0'), +('13', '59', '8', '1274', '7451', '0'), +('13', '59', '8', '1057', '3762', '0'), +('13', '59', '8', '2349', '3554', '0'), +('13', '59', '6', '1542', '9786', '0'), +('13', '59', '6', '2708', '5608', '0'), +('13', '59', '6', '1557', '5310', '0'), +('13', '59', '6', '1905', '5101', '0'), +('13', '59', '17', '11641', '16272', '0'), +('13', '59', '17', '1240', '14219', '0'), +('13', '59', '17', '1214', '13023', '0'), +('13', '59', '17', '1644', '11930', '0'), +('13', '59', '7', '27885', '6441', '0'), +('13', '59', '7', '1241', '5493', '0'), +('13', '59', '7', '1218', '5433', '0'), +('13', '59', '7', '1648', '4388', '0'), +('13', '59', '9', '1274', '7451', '0'), +('13', '59', '9', '12805', '4256', '0'), +('13', '59', '9', '1649', '3656', '0'), +('13', '59', '9', '4408', '3597', '0'), +('13', '59', '15', '11687', '6588', '0'), +('13', '59', '15', '10150', '3004', '0'), +('13', '59', '15', '14639', '2851', '0'), +('13', '59', '15', '10163', '2300', '0'), +('13', '59', '20', '11666', '8387', '0'), +('13', '59', '20', '2742', '5209', '0'), +('13', '59', '20', '1364', '2943', '0'), +('13', '59', '20', '1217', '2039', '0'), +('13', '59', '12', '1243', '6521', '0'), +('13', '59', '12', '2336', '4576', '0'), +('13', '59', '12', '20655', '4055', '0'), +('13', '59', '12', '4345', '3936', '0'), +('13', '59', '18', '1651', '3073', '0'), +('13', '59', '18', '4410', '1142', '0'), +('13', '59', '18', '1244', '586', '0'), +('13', '59', '18', '1221', '454', '0'), +('13', '59', '19', '4407', '6475', '0'), +('13', '59', '19', '68239', '4062', '0'), +('13', '59', '19', '1368', '2016', '0'), +('13', '59', '19', '1652', '1834', '0'), +('13', '59', '13', '11650', '9697', '0'), +('13', '59', '13', '14759', '9396', '0'), +('13', '59', '13', '6359', '7980', '0'), +('13', '59', '13', '13500', '7565', '0'), +('13', '59', '14', '14759', '9396', '0'), +('13', '59', '14', '6359', '7980', '0'), +('13', '59', '14', '9246', '7139', '0'), +('13', '59', '14', '10404', '6714', '0'), +('13', '59', '11', '9246', '7139', '0'), +('13', '59', '11', '14762', '2204', '0'), +('13', '59', '11', '13353', '1500', '0'), +('13', '59', '11', '60396', '743', '0'), +('13', '60', '22', '66397', '0', '3'), +('13', '60', '22', '61948', '0', '3'), +('13', '60', '22', '21805', '0', '3'), +('13', '60', '22', '21807', '0', '3'), +('13', '60', '1', '28944', '39921', '3'), +('13', '60', '1', '51230', '33363', '3'), +('13', '60', '1', '28922', '24005', '3'), +('13', '60', '1', '63170', '22601', '3'), +('13', '60', '2', '51235', '24699', '3'), +('13', '60', '2', '26763', '13586', '3'), +('13', '60', '2', '26762', '13232', '3'), +('13', '60', '2', '26605', '12648', '3'), +('13', '60', '3', '5772', '38355', '3'), +('13', '60', '3', '29452', '25243', '3'), +('13', '60', '3', '29319', '20952', '3'), +('13', '60', '3', '31328', '15502', '3'), +('13', '60', '5', '28901', '27242', '3'), +('13', '60', '5', '51229', '24650', '3'), +('13', '60', '5', '27244', '24274', '3'), +('13', '60', '5', '28911', '23596', '3'), +('13', '60', '8', '11603', '28359', '3'), +('13', '60', '8', '28964', '16235', '3'), +('13', '60', '8', '28992', '16055', '3'), +('13', '60', '8', '28918', '14751', '3'), +('13', '60', '6', '28920', '14492', '3'), +('13', '60', '6', '28902', '12905', '3'), +('13', '60', '6', '4315', '12652', '3'), +('13', '60', '6', '28919', '10507', '3'), +('13', '60', '17', '28910', '32177', '3'), +('13', '60', '17', '32933', '22007', '3'), +('13', '60', '17', '26776', '17411', '3'), +('13', '60', '17', '26604', '16211', '3'), +('13', '60', '7', '28924', '15286', '3'), +('13', '60', '7', '7868', '14101', '3'), +('13', '60', '7', '8288', '12504', '3'), +('13', '60', '7', '26555', '11907', '3'), +('13', '60', '9', '26781', '22811', '3'), +('13', '60', '9', '23508', '22201', '3'), +('13', '60', '9', '30552', '19371', '3'), +('13', '60', '9', '28891', '18002', '3'), +('13', '60', '15', '28944', '39921', '3'), +('13', '60', '15', '28905', '36953', '3'), +('13', '60', '15', '63170', '22601', '3'), +('13', '60', '15', '28993', '15374', '3'), +('13', '60', '20', '28916', '16298', '3'), +('13', '60', '20', '30534', '13698', '3'), +('13', '60', '20', '26549', '13048', '3'), +('13', '60', '20', '28938', '12486', '3'), +('13', '60', '12', '28144', '50605', '3'), +('13', '60', '12', '30534', '13698', '3'), +('13', '60', '12', '28967', '12003', '3'), +('13', '60', '12', '28972', '10232', '3'), +('13', '60', '18', '26777', '43522', '3'), +('13', '60', '18', '28932', '12327', '3'), +('13', '60', '18', '8289', '12323', '3'), +('13', '60', '18', '27316', '10613', '3'), +('13', '60', '19', '28881', '41982', '3'), +('13', '60', '19', '28934', '36903', '3'), +('13', '60', '19', '30570', '15600', '3'), +('13', '60', '19', '28148', '14332', '3'), +('13', '60', '13', '28981', '40449', '3'), +('13', '60', '13', '26778', '31370', '3'), +('13', '60', '13', '28917', '14804', '3'), +('13', '60', '13', '28978', '13538', '3'), +('13', '60', '14', '28981', '40449', '3'), +('13', '60', '14', '26778', '31370', '3'), +('13', '60', '14', '28915', '24070', '3'), +('13', '60', '14', '26780', '16401', '3'), +('13', '60', '11', '26778', '31370', '3'), +('13', '60', '11', '51223', '21959', '3'), +('13', '60', '11', '2698', '18002', '3'), +('13', '60', '11', '30562', '13584', '3'), +('13', '60', '22', '10323', '0', '2'), +('13', '60', '22', '9248', '0', '2'), +('13', '60', '22', '12425', '0', '2'), +('13', '60', '22', '30014', '0', '2'), +('13', '60', '1', '31228', '12489', '2'), +('13', '60', '1', '10912', '7764', '2'), +('13', '60', '1', '62234', '6602', '2'), +('13', '60', '1', '1720', '5655', '2'), +('13', '60', '2', '10913', '12388', '2'), +('13', '60', '2', '29648', '9159', '2'), +('13', '60', '2', '1867', '9119', '2'), +('13', '60', '2', '31322', '8477', '2'), +('13', '60', '3', '31233', '13571', '2'), +('13', '60', '3', '1547', '11983', '2'), +('13', '60', '3', '31244', '11452', '2'), +('13', '60', '3', '31463', '10628', '2'), +('13', '60', '5', '31460', '12280', '2'), +('13', '60', '5', '31318', '10435', '2'), +('13', '60', '5', '29459', '9685', '2'), +('13', '60', '5', '27259', '9128', '2'), +('13', '60', '8', '1628', '13160', '2'), +('13', '60', '8', '11603', '9438', '2'), +('13', '60', '8', '5779', '9161', '2'), +('13', '60', '8', '1622', '8796', '2'), +('13', '60', '6', '29468', '10684', '2'), +('13', '60', '6', '29472', '6368', '2'), +('13', '60', '6', '1114', '5851', '2'), +('13', '60', '6', '2708', '5520', '2'), +('13', '60', '17', '31239', '16808', '2'), +('13', '60', '17', '10845', '15736', '2'), +('13', '60', '17', '1552', '14938', '2'), +('13', '60', '17', '6865', '13027', '2'), +('13', '60', '7', '31342', '8713', '2'), +('13', '60', '7', '29485', '7509', '2'), +('13', '60', '7', '31237', '7104', '2'), +('13', '60', '7', '31371', '4209', '2'), +('13', '60', '9', '31460', '12280', '2'), +('13', '60', '9', '31246', '8306', '2'), +('13', '60', '9', '1559', '7811', '2'), +('13', '60', '9', '31314', '5785', '2'), +('13', '60', '15', '25211', '12700', '2'), +('13', '60', '15', '31231', '12533', '2'), +('13', '60', '15', '25198', '9869', '2'), +('13', '60', '15', '62373', '7596', '2'), +('13', '60', '20', '25858', '13737', '2'), +('13', '60', '20', '2510', '12414', '2'), +('13', '60', '20', '1556', '12317', '2'), +('13', '60', '20', '6835', '8298', '2'), +('13', '60', '12', '25857', '10812', '2'), +('13', '60', '12', '31340', '10679', '2'), +('13', '60', '12', '31306', '8988', '2'), +('13', '60', '12', '6869', '6594', '2'), +('13', '60', '18', '31339', '10479', '2'), +('13', '60', '18', '31173', '6283', '2'), +('13', '60', '18', '6870', '4296', '2'), +('13', '60', '18', '31371', '4209', '2'), +('13', '60', '19', '29645', '15540', '2'), +('13', '60', '19', '31245', '14390', '2'), +('13', '60', '19', '31355', '9547', '2'), +('13', '60', '19', '31327', '8711', '2'), +('13', '60', '13', '1156', '14797', '2'), +('13', '60', '13', '28034', '14149', '2'), +('13', '60', '13', '31326', '13591', '2'), +('13', '60', '13', '1117', '12559', '2'), +('13', '60', '14', '2498', '13825', '2'), +('13', '60', '14', '31462', '11532', '2'), +('13', '60', '14', '29449', '10978', '2'), +('13', '60', '14', '31302', '10130', '2'), +('13', '60', '11', '31466', '14368', '2'), +('13', '60', '11', '1554', '13897', '2'), +('13', '60', '11', '2698', '10516', '2'), +('13', '60', '11', '31302', '10130', '2'), +('13', '60', '22', '10323', '0', '1'), +('13', '60', '22', '12425', '0', '1'), +('13', '60', '22', '9246', '0', '1'), +('13', '60', '22', '21509', '0', '1'), +('13', '60', '1', '10912', '12224', '1'), +('13', '60', '1', '62234', '8422', '1'), +('13', '60', '1', '5746', '3857', '1'), +('13', '60', '1', '14702', '3750', '1'), +('13', '60', '2', '10913', '18377', '1'), +('13', '60', '2', '1414', '5666', '1'), +('13', '60', '2', '10143', '5361', '1'), +('13', '60', '2', '1239', '5268', '1'), +('13', '60', '3', '5780', '7309', '1'), +('13', '60', '3', '11052', '6417', '1'), +('13', '60', '3', '46184', '5253', '1'), +('13', '60', '3', '1625', '4481', '1'), +('13', '60', '5', '14557', '7146', '1'), +('13', '60', '5', '14703', '6050', '1'), +('13', '60', '5', '11646', '4861', '1'), +('13', '60', '5', '8285', '4483', '1'), +('13', '60', '8', '1628', '16817', '1'), +('13', '60', '8', '11603', '12136', '1'), +('13', '60', '8', '1622', '10037', '1'), +('13', '60', '8', '5779', '9186', '1'), +('13', '60', '6', '29468', '14508', '1'), +('13', '60', '6', '1542', '7192', '1'), +('13', '60', '6', '2708', '5564', '1'), +('13', '60', '6', '1557', '5286', '1'), +('13', '60', '17', '10845', '21720', '1'), +('13', '60', '17', '11641', '11965', '1'), +('13', '60', '17', '1644', '10478', '1'), +('13', '60', '17', '24610', '10275', '1'), +('13', '60', '7', '27885', '5289', '1'), +('13', '60', '7', '1241', '3489', '1'), +('13', '60', '7', '1218', '3429', '1'), +('13', '60', '7', '1648', '2953', '1'), +('13', '60', '9', '1618', '4950', '1'), +('13', '60', '9', '1274', '4872', '1'), +('13', '60', '9', '12805', '4254', '1'), +('13', '60', '9', '4780', '3017', '1'), +('13', '60', '15', '5727', '6766', '1'), +('13', '60', '15', '5728', '5585', '1'), +('13', '60', '15', '14738', '5482', '1'), +('13', '60', '15', '5807', '5271', '1'), +('13', '60', '20', '1556', '15307', '1'), +('13', '60', '20', '11666', '8332', '1'), +('13', '60', '20', '5765', '8016', '1'), +('13', '60', '20', '2742', '5125', '1'), +('13', '60', '12', '4582', '9422', '1'), +('13', '60', '12', '1243', '4513', '1'), +('13', '60', '12', '20655', '3433', '1'), +('13', '60', '12', '2336', '3146', '1'), +('13', '60', '18', '5819', '4510', '1'), +('13', '60', '18', '24765', '3127', '1'), +('13', '60', '18', '1651', '2204', '1'), +('13', '60', '18', '4410', '1125', '1'), +('13', '60', '19', '5749', '4659', '1'), +('13', '60', '19', '4407', '3898', '1'), +('13', '60', '19', '68239', '3181', '1'), +('13', '60', '19', '1368', '2010', '1'), +('13', '60', '13', '28034', '20157', '1'), +('13', '60', '13', '24629', '13134', '1'), +('13', '60', '13', '24609', '11679', '1'), +('13', '60', '13', '24628', '8684', '1'), +('13', '60', '14', '24629', '13134', '1'), +('13', '60', '14', '24609', '11679', '1'), +('13', '60', '14', '14745', '8222', '1'), +('13', '60', '14', '14759', '7719', '1'), +('13', '60', '11', '46178', '7361', '1'), +('13', '60', '11', '5763', '7257', '1'), +('13', '60', '11', '5805', '5300', '1'), +('13', '60', '11', '5759', '5159', '1'), +('13', '61', '22', '66397', '0', '3'), +('13', '61', '22', '61948', '0', '3'), +('13', '61', '22', '21805', '0', '3'), +('13', '61', '22', '21807', '0', '3'), +('13', '61', '1', '28944', '38883', '3'), +('13', '61', '1', '51230', '32444', '3'), +('13', '61', '1', '28922', '23505', '3'), +('13', '61', '1', '63170', '22103', '3'), +('13', '61', '2', '51235', '24201', '3'), +('13', '61', '2', '26763', '13589', '3'), +('13', '61', '2', '26762', '13234', '3'), +('13', '61', '2', '26605', '12650', '3'), +('13', '61', '3', '5772', '37460', '3'), +('13', '61', '3', '29452', '24245', '3'), +('13', '61', '3', '29319', '19952', '3'), +('13', '61', '3', '31328', '15002', '3'), +('13', '61', '5', '28901', '26746', '3'), +('13', '61', '5', '51229', '24152', '3'), +('13', '61', '5', '27244', '23276', '3'), +('13', '61', '5', '28911', '23098', '3'), +('13', '61', '8', '11603', '27361', '3'), +('13', '61', '8', '28964', '16238', '3'), +('13', '61', '8', '28992', '16055', '3'), +('13', '61', '8', '28918', '14751', '3'), +('13', '61', '6', '28920', '14496', '3'), +('13', '61', '6', '28902', '12905', '3'), +('13', '61', '6', '4315', '12152', '3'), +('13', '61', '6', '28919', '10507', '3'), +('13', '61', '17', '28910', '31429', '3'), +('13', '61', '17', '32933', '21509', '3'), +('13', '61', '17', '26776', '17416', '3'), +('13', '61', '17', '26604', '16216', '3'), +('13', '61', '7', '28924', '15289', '3'), +('13', '61', '7', '7868', '14102', '3'), +('13', '61', '7', '8288', '12504', '3'), +('13', '61', '7', '26555', '11907', '3'), +('13', '61', '9', '26781', '22439', '3'), +('13', '61', '9', '23508', '21201', '3'), +('13', '61', '9', '30552', '19073', '3'), +('13', '61', '9', '28891', '17702', '3'), +('13', '61', '15', '28944', '38883', '3'), +('13', '61', '15', '28905', '35913', '3'), +('13', '61', '15', '63170', '22103', '3'), +('13', '61', '15', '28993', '15376', '3'), +('13', '61', '20', '28916', '16300', '3'), +('13', '61', '20', '30534', '13701', '3'), +('13', '61', '20', '26549', '13052', '3'), +('13', '61', '20', '28938', '12487', '3'), +('13', '61', '12', '28144', '49610', '3'), +('13', '61', '12', '30534', '13701', '3'), +('13', '61', '12', '28967', '12003', '3'), +('13', '61', '12', '28972', '10235', '3'), +('13', '61', '18', '26777', '42374', '3'), +('13', '61', '18', '28932', '12329', '3'), +('13', '61', '18', '8289', '12325', '3'), +('13', '61', '18', '27316', '10614', '3'), +('13', '61', '19', '28881', '40685', '3'), +('13', '61', '19', '28934', '35903', '3'), +('13', '61', '19', '30570', '15601', '3'), +('13', '61', '19', '28148', '14335', '3'), +('13', '61', '13', '28981', '39452', '3'), +('13', '61', '13', '26778', '30776', '3'), +('13', '61', '13', '28917', '14804', '3'), +('13', '61', '13', '28978', '13540', '3'), +('13', '61', '14', '28981', '39452', '3'), +('13', '61', '14', '26778', '30776', '3'), +('13', '61', '14', '28915', '23698', '3'), +('13', '61', '14', '26780', '16404', '3'), +('13', '61', '11', '26778', '30776', '3'), +('13', '61', '11', '51223', '21587', '3'), +('13', '61', '11', '2698', '17627', '3'), +('13', '61', '11', '30562', '13586', '3'), +('13', '62', '22', '66397', '0', '3'), +('13', '62', '22', '61948', '0', '3'), +('13', '62', '22', '21805', '0', '3'), +('13', '62', '22', '21807', '0', '3'), +('13', '62', '1', '28944', '37845', '3'), +('13', '62', '1', '51230', '31525', '3'), +('13', '62', '1', '28922', '23005', '3'), +('13', '62', '1', '63170', '21604', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '62', '2', '51235', '23704', '3'), +('13', '62', '2', '26763', '13592', '3'), +('13', '62', '2', '26762', '13236', '3'), +('13', '62', '2', '26605', '12653', '3'), +('13', '62', '3', '5772', '36565', '3'), +('13', '62', '3', '29452', '23247', '3'), +('13', '62', '3', '29319', '18952', '3'), +('13', '62', '3', '31328', '14502', '3'), +('13', '62', '5', '28901', '26250', '3'), +('13', '62', '5', '51229', '23654', '3'), +('13', '62', '5', '28911', '22600', '3'), +('13', '62', '5', '27244', '22277', '3'), +('13', '62', '8', '11603', '26363', '3'), +('13', '62', '8', '28964', '16241', '3'), +('13', '62', '8', '28992', '16055', '3'), +('13', '62', '8', '28918', '14751', '3'), +('13', '62', '6', '28920', '14500', '3'), +('13', '62', '6', '28902', '12905', '3'), +('13', '62', '6', '4315', '11652', '3'), +('13', '62', '6', '28919', '10507', '3'), +('13', '62', '17', '28910', '30681', '3'), +('13', '62', '17', '32933', '21010', '3'), +('13', '62', '17', '26776', '17421', '3'), +('13', '62', '17', '26604', '16221', '3'), +('13', '62', '7', '28924', '15292', '3'), +('13', '62', '7', '7868', '14104', '3'), +('13', '62', '7', '8288', '12504', '3'), +('13', '62', '7', '26555', '11907', '3'), +('13', '62', '9', '26781', '22067', '3'), +('13', '62', '9', '23508', '20201', '3'), +('13', '62', '9', '30552', '18775', '3'), +('13', '62', '9', '28891', '17402', '3'), +('13', '62', '15', '28944', '37845', '3'), +('13', '62', '15', '28905', '34873', '3'), +('13', '62', '15', '63170', '21604', '3'), +('13', '62', '15', '28993', '15378', '3'), +('13', '62', '20', '28916', '16301', '3'), +('13', '62', '20', '30534', '13703', '3'), +('13', '62', '20', '26549', '13056', '3'), +('13', '62', '20', '28938', '12488', '3'), +('13', '62', '12', '28144', '48615', '3'), +('13', '62', '12', '30534', '13703', '3'), +('13', '62', '12', '28967', '12003', '3'), +('13', '62', '12', '28972', '10238', '3'), +('13', '62', '18', '26777', '41226', '3'), +('13', '62', '18', '28932', '12331', '3'), +('13', '62', '18', '8289', '12327', '3'), +('13', '62', '18', '27316', '10615', '3'), +('13', '62', '19', '28881', '39388', '3'), +('13', '62', '19', '28934', '34903', '3'), +('13', '62', '19', '30570', '15603', '3'), +('13', '62', '19', '28148', '14338', '3'), +('13', '62', '13', '28981', '38454', '3'), +('13', '62', '13', '26778', '30182', '3'), +('13', '62', '13', '28917', '14804', '3'), +('13', '62', '13', '28978', '13541', '3'), +('13', '62', '14', '28981', '38454', '3'), +('13', '62', '14', '26778', '30182', '3'), +('13', '62', '14', '28915', '23326', '3'), +('13', '62', '14', '26780', '16407', '3'), +('13', '62', '11', '26778', '30182', '3'), +('13', '62', '11', '51223', '21215', '3'), +('13', '62', '11', '2698', '17252', '3'), +('13', '62', '11', '30562', '13588', '3'), +('13', '63', '22', '66397', '0', '3'), +('13', '63', '22', '61948', '0', '3'), +('13', '63', '22', '21805', '0', '3'), +('13', '63', '22', '21807', '0', '3'), +('13', '63', '1', '28944', '36807', '3'), +('13', '63', '1', '51230', '30606', '3'), +('13', '63', '1', '28922', '22505', '3'), +('13', '63', '1', '63170', '21106', '3'), +('13', '63', '2', '51235', '23206', '3'), +('13', '63', '2', '26763', '13595', '3'), +('13', '63', '2', '26762', '13238', '3'), +('13', '63', '2', '26605', '12655', '3'), +('13', '63', '3', '5772', '35671', '3'), +('13', '63', '3', '29452', '22250', '3'), +('13', '63', '3', '29319', '17952', '3'), +('13', '63', '3', '31328', '14002', '3'), +('13', '63', '5', '28901', '25754', '3'), +('13', '63', '5', '51229', '23155', '3'), +('13', '63', '5', '28911', '22102', '3'), +('13', '63', '5', '27244', '21278', '3'), +('13', '63', '8', '11603', '25364', '3'), +('13', '63', '8', '28964', '16244', '3'), +('13', '63', '8', '28992', '16055', '3'), +('13', '63', '8', '28918', '14751', '3'), +('13', '63', '6', '28920', '14504', '3'), +('13', '63', '6', '28902', '12905', '3'), +('13', '63', '6', '4315', '11152', '3'), +('13', '63', '6', '28919', '10507', '3'), +('13', '63', '17', '28910', '29933', '3'), +('13', '63', '17', '32933', '20512', '3'), +('13', '63', '17', '26776', '17426', '3'), +('13', '63', '17', '26604', '16226', '3'), +('13', '63', '7', '28924', '15295', '3'), +('13', '63', '7', '7868', '14105', '3'), +('13', '63', '7', '8288', '12504', '3'), +('13', '63', '7', '26555', '11907', '3'), +('13', '63', '9', '26781', '21695', '3'), +('13', '63', '9', '23508', '19201', '3'), +('13', '63', '9', '30552', '18477', '3'), +('13', '63', '9', '28891', '17102', '3'), +('13', '63', '15', '28944', '36807', '3'), +('13', '63', '15', '28905', '33833', '3'), +('13', '63', '15', '63170', '21106', '3'), +('13', '63', '15', '28993', '15380', '3'), +('13', '63', '20', '28916', '16303', '3'), +('13', '63', '20', '30534', '13705', '3'), +('13', '63', '20', '26549', '13061', '3'), +('13', '63', '20', '28938', '12490', '3'), +('13', '63', '12', '28144', '47621', '3'), +('13', '63', '12', '30534', '13705', '3'), +('13', '63', '12', '28967', '12003', '3'), +('13', '63', '12', '28972', '10241', '3'), +('13', '63', '18', '26777', '40078', '3'), +('13', '63', '18', '28932', '12333', '3'), +('13', '63', '18', '8289', '12329', '3'), +('13', '63', '18', '27316', '10616', '3'), +('13', '63', '19', '28881', '38091', '3'), +('13', '63', '19', '28934', '33903', '3'), +('13', '63', '19', '30570', '15604', '3'), +('13', '63', '19', '28148', '14341', '3'), +('13', '63', '13', '28981', '37456', '3'), +('13', '63', '13', '26778', '29589', '3'), +('13', '63', '13', '28917', '14804', '3'), +('13', '63', '13', '28978', '13543', '3'), +('13', '63', '14', '28981', '37456', '3'), +('13', '63', '14', '26778', '29589', '3'), +('13', '63', '14', '28915', '22954', '3'), +('13', '63', '14', '26780', '16410', '3'), +('13', '63', '11', '26778', '29589', '3'), +('13', '63', '11', '51223', '20843', '3'), +('13', '63', '11', '2698', '16877', '3'), +('13', '63', '11', '30562', '13590', '3'), +('13', '64', '22', '66397', '0', '3'), +('13', '64', '22', '61948', '0', '3'), +('13', '64', '22', '21805', '0', '3'), +('13', '64', '22', '21807', '0', '3'), +('13', '64', '1', '28944', '35769', '3'), +('13', '64', '1', '51230', '29687', '3'), +('13', '64', '1', '28922', '22005', '3'), +('13', '64', '1', '63170', '20608', '3'), +('13', '64', '2', '51235', '22709', '3'), +('13', '64', '2', '26763', '13598', '3'), +('13', '64', '2', '26762', '13240', '3'), +('13', '64', '2', '26605', '12657', '3'), +('13', '64', '3', '5772', '34776', '3'), +('13', '64', '3', '29452', '21252', '3'), +('13', '64', '3', '29319', '16952', '3'), +('13', '64', '3', '31328', '13502', '3'), +('13', '64', '5', '28901', '25258', '3'), +('13', '64', '5', '51229', '22657', '3'), +('13', '64', '5', '28911', '21604', '3'), +('13', '64', '5', '27244', '20279', '3'), +('13', '64', '8', '11603', '24366', '3'), +('13', '64', '8', '28964', '16247', '3'), +('13', '64', '8', '28992', '16055', '3'), +('13', '64', '8', '28918', '14751', '3'), +('13', '64', '6', '28920', '14508', '3'), +('13', '64', '6', '28902', '12905', '3'), +('13', '64', '6', '4315', '10652', '3'), +('13', '64', '6', '28919', '10507', '3'), +('13', '64', '17', '28910', '29185', '3'), +('13', '64', '17', '32933', '20013', '3'), +('13', '64', '17', '26776', '17431', '3'), +('13', '64', '17', '26604', '16231', '3'), +('13', '64', '7', '28924', '15299', '3'), +('13', '64', '7', '7868', '14107', '3'), +('13', '64', '7', '8288', '12504', '3'), +('13', '64', '7', '26555', '11907', '3'), +('13', '64', '9', '26781', '21323', '3'), +('13', '64', '9', '23508', '18201', '3'), +('13', '64', '9', '30552', '18179', '3'), +('13', '64', '9', '28891', '16802', '3'), +('13', '64', '15', '28944', '35769', '3'), +('13', '64', '15', '28905', '32793', '3'), +('13', '64', '15', '63170', '20608', '3'), +('13', '64', '15', '28993', '15382', '3'), +('13', '64', '20', '28916', '16304', '3'), +('13', '64', '20', '30534', '13708', '3'), +('13', '64', '20', '26549', '13065', '3'), +('13', '64', '20', '28938', '12491', '3'), +('13', '64', '12', '28144', '46626', '3'), +('13', '64', '12', '30534', '13708', '3'), +('13', '64', '12', '28967', '12003', '3'), +('13', '64', '12', '28972', '10244', '3'), +('13', '64', '18', '26777', '38930', '3'), +('13', '64', '18', '28932', '12335', '3'), +('13', '64', '18', '8289', '12331', '3'), +('13', '64', '18', '27316', '10617', '3'), +('13', '64', '19', '28881', '36794', '3'), +('13', '64', '19', '28934', '32903', '3'), +('13', '64', '19', '30570', '15606', '3'), +('13', '64', '19', '28148', '14344', '3'), +('13', '64', '13', '28981', '36459', '3'), +('13', '64', '13', '26778', '28995', '3'), +('13', '64', '13', '28917', '14804', '3'), +('13', '64', '13', '28978', '13544', '3'), +('13', '64', '14', '28981', '36459', '3'), +('13', '64', '14', '26778', '28995', '3'), +('13', '64', '14', '28915', '22582', '3'), +('13', '64', '14', '26780', '16413', '3'), +('13', '64', '11', '26778', '28995', '3'), +('13', '64', '11', '51223', '20471', '3'), +('13', '64', '11', '2698', '16502', '3'), +('13', '64', '11', '30562', '13592', '3'), +('13', '65', '22', '66397', '0', '7'), +('13', '65', '22', '62787', '0', '7'), +('13', '65', '22', '61948', '0', '7'), +('13', '65', '22', '21805', '0', '7'), +('13', '65', '1', '69106', '101747', '7'), +('13', '65', '1', '69062', '72693', '7'), +('13', '65', '1', '68949', '51135', '7'), +('13', '65', '1', '7130', '37983', '7'), +('13', '65', '2', '68195', '52581', '7'), +('13', '65', '2', '68057', '35200', '7'), +('13', '65', '2', '68058', '35200', '7'), +('13', '65', '2', '68807', '35200', '7'), +('13', '65', '3', '69074', '71303', '7'), +('13', '65', '3', '68818', '48886', '7'), +('13', '65', '3', '9444', '43166', '7'), +('13', '65', '3', '9436', '41700', '7'), +('13', '65', '5', '69135', '72323', '7'), +('13', '65', '5', '68808', '60382', '7'), +('13', '65', '5', '67625', '49609', '7'), +('13', '65', '5', '7769', '47163', '7'), +('13', '65', '8', '69164', '53284', '7'), +('13', '65', '8', '21998', '52663', '7'), +('13', '65', '8', '21996', '44842', '7'), +('13', '65', '8', '15815', '44352', '7'), +('13', '65', '6', '68788', '61459', '7'), +('13', '65', '6', '68841', '49967', '7'), +('13', '65', '6', '68789', '38652', '7'), +('13', '65', '6', '68060', '35200', '7'), +('13', '65', '17', '68986', '71985', '7'), +('13', '65', '17', '69153', '57903', '7'), +('13', '65', '17', '47655', '56552', '7'), +('13', '65', '17', '68782', '49684', '7'), +('13', '65', '7', '69082', '42303', '7'), +('13', '65', '7', '68916', '39581', '7'), +('13', '65', '7', '68060', '35200', '7'), +('13', '65', '7', '68057', '35200', '7'), +('13', '65', '9', '69100', '44482', '7'), +('13', '65', '9', '68606', '42636', '7'), +('13', '65', '9', '68060', '35200', '7'), +('13', '65', '9', '68807', '35200', '7'), +('13', '65', '15', '68957', '70168', '7'), +('13', '65', '15', '68846', '69519', '7'), +('13', '65', '15', '68672', '59600', '7'), +('13', '65', '15', '14818', '54933', '7'), +('13', '65', '20', '69134', '72535', '7'), +('13', '65', '20', '67625', '49609', '7'), +('13', '65', '20', '68726', '47409', '7'), +('13', '65', '20', '69445', '42351', '7'), +('13', '65', '12', '69255', '74342', '7'), +('13', '65', '12', '28144', '45631', '7'), +('13', '65', '12', '26996', '44633', '7'), +('13', '65', '12', '13619', '42090', '7'), +('13', '65', '18', '68751', '59579', '7'), +('13', '65', '18', '69149', '41336', '7'), +('13', '65', '18', '28649', '40385', '7'), +('13', '65', '18', '26777', '37782', '7'), +('13', '65', '19', '69078', '70119', '7'), +('13', '65', '19', '68918', '50318', '7'), +('13', '65', '19', '28881', '35497', '7'), +('13', '65', '19', '68058', '35200', '7'), +('13', '65', '13', '69046', '69131', '7'), +('13', '65', '13', '68744', '59046', '7'), +('13', '65', '13', '24793', '51274', '7'), +('13', '65', '13', '69159', '46001', '7'), +('13', '65', '14', '69046', '69131', '7'), +('13', '65', '14', '68745', '59274', '7'), +('13', '65', '14', '68744', '59046', '7'), +('13', '65', '14', '27274', '54159', '7'), +('13', '65', '11', '69162', '73652', '7'), +('13', '65', '11', '20508', '60559', '7'), +('13', '65', '11', '20496', '58869', '7'), +('13', '65', '11', '26788', '45519', '7'), +('13', '65', '22', '66397', '0', '6'), +('13', '65', '22', '62787', '0', '6'), +('13', '65', '22', '61948', '0', '6'), +('13', '65', '22', '21805', '0', '6'), +('13', '65', '1', '7130', '37983', '6'), +('13', '65', '1', '16257', '35535', '6'), +('13', '65', '1', '68807', '35200', '6'), +('13', '65', '1', '68060', '35200', '6'), +('13', '65', '2', '68195', '52581', '6'), +('13', '65', '2', '68058', '35200', '6'), +('13', '65', '2', '68057', '35200', '6'), +('13', '65', '2', '68807', '35200', '6'), +('13', '65', '3', '9444', '43166', '6'), +('13', '65', '3', '9436', '41700', '6'), +('13', '65', '3', '68807', '35200', '6'), +('13', '65', '3', '68057', '35200', '6'), +('13', '65', '5', '7769', '47163', '6'), +('13', '65', '5', '8774', '45016', '6'), +('13', '65', '5', '29198', '41235', '6'), +('13', '65', '5', '68057', '35200', '6'), +('13', '65', '8', '21998', '52663', '6'), +('13', '65', '8', '21996', '44842', '6'), +('13', '65', '8', '15815', '44352', '6'), +('13', '65', '8', '12082', '44169', '6'), +('13', '65', '6', '68807', '35200', '6'), +('13', '65', '6', '68057', '35200', '6'), +('13', '65', '6', '68060', '35200', '6'), +('13', '65', '6', '68058', '35200', '6'), +('13', '65', '17', '47655', '56552', '6'), +('13', '65', '17', '68058', '35200', '6'), +('13', '65', '17', '68057', '35200', '6'), +('13', '65', '17', '68807', '35200', '6'), +('13', '65', '7', '68807', '35200', '6'), +('13', '65', '7', '68057', '35200', '6'), +('13', '65', '7', '68060', '35200', '6'), +('13', '65', '7', '68058', '35200', '6'), +('13', '65', '9', '68057', '35200', '6'), +('13', '65', '9', '68058', '35200', '6'), +('13', '65', '9', '68060', '35200', '6'), +('13', '65', '9', '68807', '35200', '6'), +('13', '65', '15', '14818', '54933', '6'), +('13', '65', '15', '68060', '35200', '6'), +('13', '65', '15', '68807', '35200', '6'), +('13', '65', '15', '68057', '35200', '6'), +('13', '65', '20', '68057', '35200', '6'), +('13', '65', '20', '68058', '35200', '6'), +('13', '65', '20', '68060', '35200', '6'), +('13', '65', '20', '68807', '35200', '6'), +('13', '65', '12', '28144', '45631', '6'), +('13', '65', '12', '26996', '44633', '6'), +('13', '65', '12', '13619', '42090', '6'), +('13', '65', '12', '68807', '35200', '6'), +('13', '65', '18', '28649', '40385', '6'), +('13', '65', '18', '26777', '37782', '6'), +('13', '65', '18', '68057', '35200', '6'), +('13', '65', '18', '68058', '35200', '6'), +('13', '65', '19', '28881', '35497', '6'), +('13', '65', '19', '68058', '35200', '6'), +('13', '65', '19', '68057', '35200', '6'), +('13', '65', '19', '68807', '35200', '6'), +('13', '65', '13', '24793', '51274', '6'), +('13', '65', '13', '26788', '45519', '6'), +('13', '65', '13', '21875', '44372', '6'), +('13', '65', '13', '28981', '35461', '6'), +('13', '65', '14', '27274', '54159', '6'), +('13', '65', '14', '26788', '45519', '6'), +('13', '65', '14', '25998', '44747', '6'), +('13', '65', '14', '27272', '44566', '6'), +('13', '65', '11', '20508', '60559', '6'), +('13', '65', '11', '20496', '58869', '6'), +('13', '65', '11', '26788', '45519', '6'), +('13', '65', '11', '20486', '42550', '6'), +('13', '65', '22', '66397', '0', '5'), +('13', '65', '22', '62787', '0', '5'), +('13', '65', '22', '61948', '0', '5'), +('13', '65', '22', '21805', '0', '5'), +('13', '65', '1', '7130', '37983', '5'), +('13', '65', '1', '16257', '35535', '5'), +('13', '65', '1', '28944', '34731', '5'), +('13', '65', '1', '16679', '30244', '5'), +('13', '65', '2', '68195', '52581', '5'), +('13', '65', '2', '16158', '27467', '5'), +('13', '65', '2', '51235', '22211', '5'), +('13', '65', '2', '28653', '18102', '5'), +('13', '65', '3', '9444', '43166', '5'), +('13', '65', '3', '9436', '41700', '5'), +('13', '65', '3', '5772', '33881', '5'), +('13', '65', '3', '9435', '22838', '5'), +('13', '65', '5', '7769', '47163', '5'), +('13', '65', '5', '8774', '45016', '5'), +('13', '65', '5', '29198', '41235', '5'), +('13', '65', '5', '8772', '31689', '5'), +('13', '65', '8', '21998', '52663', '5'), +('13', '65', '8', '21996', '44842', '5'), +('13', '65', '8', '15815', '44352', '5'), +('13', '65', '8', '12082', '44169', '5'), +('13', '65', '6', '28661', '25683', '5'), +('13', '65', '6', '13654', '23196', '5'), +('13', '65', '6', '13638', '19857', '5'), +('13', '65', '6', '13634', '18791', '5'), +('13', '65', '17', '47655', '56552', '5'), +('13', '65', '17', '14747', '35136', '5'), +('13', '65', '17', '28910', '28437', '5'), +('13', '65', '17', '32933', '19515', '5'), +('13', '65', '7', '11598', '33915', '5'), +('13', '65', '7', '11323', '23316', '5'), +('13', '65', '7', '21994', '19491', '5'), +('13', '65', '7', '11324', '17303', '5'), +('13', '65', '9', '28665', '34437', '5'), +('13', '65', '9', '68198', '34239', '5'), +('13', '65', '9', '11019', '28808', '5'), +('13', '65', '9', '28668', '26001', '5'), +('13', '65', '15', '14818', '54933', '5'), +('13', '65', '15', '28944', '34731', '5'), +('13', '65', '15', '28905', '31753', '5'), +('13', '65', '15', '10232', '31630', '5'), +('13', '65', '20', '15881', '34733', '5'), +('13', '65', '20', '16158', '27467', '5'), +('13', '65', '20', '15927', '22753', '5'), +('13', '65', '20', '15877', '22374', '5'), +('13', '65', '12', '28144', '45631', '5'), +('13', '65', '12', '26996', '44633', '5'), +('13', '65', '12', '13619', '42090', '5'), +('13', '65', '12', '13618', '25880', '5'), +('13', '65', '18', '28649', '40385', '5'), +('13', '65', '18', '26777', '37782', '5'), +('13', '65', '18', '19021', '19006', '5'), +('13', '65', '18', '28932', '12337', '5'), +('13', '65', '19', '28881', '35497', '5'), +('13', '65', '19', '28934', '31903', '5'), +('13', '65', '19', '19079', '30099', '5'), +('13', '65', '19', '20428', '25965', '5'), +('13', '65', '13', '24793', '51274', '5'), +('13', '65', '13', '26788', '45519', '5'), +('13', '65', '13', '21875', '44372', '5'), +('13', '65', '13', '28981', '35461', '5'), +('13', '65', '14', '27274', '54159', '5'), +('13', '65', '14', '26788', '45519', '5'), +('13', '65', '14', '25998', '44747', '5'), +('13', '65', '14', '27272', '44566', '5'), +('13', '65', '11', '20508', '60559', '5'), +('13', '65', '11', '20496', '58869', '5'), +('13', '65', '11', '26788', '45519', '5'), +('13', '65', '11', '20486', '42550', '5'), +('13', '65', '22', '66397', '0', '4'), +('13', '65', '22', '62787', '0', '4'), +('13', '65', '22', '61948', '0', '4'), +('13', '65', '22', '21805', '0', '4'), +('13', '65', '1', '7130', '37983', '4'), +('13', '65', '1', '16257', '35535', '4'), +('13', '65', '1', '28944', '34731', '4'), +('13', '65', '1', '16679', '30244', '4'), +('13', '65', '2', '68195', '52581', '4'), +('13', '65', '2', '16158', '27467', '4'), +('13', '65', '2', '51235', '22211', '4'), +('13', '65', '2', '28653', '18102', '4'), +('13', '65', '3', '9444', '43166', '4'), +('13', '65', '3', '9436', '41700', '4'), +('13', '65', '3', '5772', '33881', '4'), +('13', '65', '3', '9435', '22838', '4'), +('13', '65', '5', '7769', '47163', '4'), +('13', '65', '5', '8774', '45016', '4'), +('13', '65', '5', '29198', '41235', '4'), +('13', '65', '5', '8772', '31689', '4'), +('13', '65', '8', '21998', '52663', '4'), +('13', '65', '8', '21996', '44842', '4'), +('13', '65', '8', '15815', '44352', '4'), +('13', '65', '8', '12082', '44169', '4'), +('13', '65', '6', '28661', '25683', '4'), +('13', '65', '6', '13654', '23196', '4'), +('13', '65', '6', '13638', '19857', '4'), +('13', '65', '6', '13634', '18791', '4'), +('13', '65', '17', '47655', '56552', '4'), +('13', '65', '17', '14747', '35136', '4'), +('13', '65', '17', '28910', '28437', '4'), +('13', '65', '17', '32933', '19515', '4'), +('13', '65', '7', '11598', '33915', '4'), +('13', '65', '7', '11323', '23316', '4'), +('13', '65', '7', '21994', '19491', '4'), +('13', '65', '7', '11324', '17303', '4'), +('13', '65', '9', '28665', '34437', '4'), +('13', '65', '9', '68198', '34239', '4'), +('13', '65', '9', '11019', '28808', '4'), +('13', '65', '9', '28668', '26001', '4'), +('13', '65', '15', '14818', '54933', '4'), +('13', '65', '15', '28944', '34731', '4'), +('13', '65', '15', '28905', '31753', '4'), +('13', '65', '15', '10232', '31630', '4'), +('13', '65', '20', '15881', '34733', '4'), +('13', '65', '20', '16158', '27467', '4'), +('13', '65', '20', '15927', '22753', '4'), +('13', '65', '20', '15877', '22374', '4'), +('13', '65', '12', '28144', '45631', '4'), +('13', '65', '12', '26996', '44633', '4'), +('13', '65', '12', '13619', '42090', '4'), +('13', '65', '12', '13618', '25880', '4'), +('13', '65', '18', '28649', '40385', '4'), +('13', '65', '18', '26777', '37782', '4'), +('13', '65', '18', '19021', '19006', '4'), +('13', '65', '18', '28932', '12337', '4'), +('13', '65', '19', '28881', '35497', '4'), +('13', '65', '19', '28934', '31903', '4'), +('13', '65', '19', '19079', '30099', '4'), +('13', '65', '19', '20428', '25965', '4'), +('13', '65', '13', '24793', '51274', '4'), +('13', '65', '13', '26788', '45519', '4'), +('13', '65', '13', '21875', '44372', '4'), +('13', '65', '13', '28981', '35461', '4'), +('13', '65', '14', '27274', '54159', '4'), +('13', '65', '14', '26788', '45519', '4'), +('13', '65', '14', '25998', '44747', '4'), +('13', '65', '14', '27272', '44566', '4'), +('13', '65', '11', '20508', '60559', '4'), +('13', '65', '11', '20496', '58869', '4'), +('13', '65', '11', '26788', '45519', '4'), +('13', '65', '11', '20486', '42550', '4'), +('13', '66', '22', '66397', '0', '7'), +('13', '66', '22', '62787', '0', '7'), +('13', '66', '22', '61948', '0', '7'), +('13', '66', '22', '21805', '0', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '66', '1', '69106', '100003', '7'), +('13', '66', '1', '69062', '70899', '7'), +('13', '66', '1', '68949', '50140', '7'), +('13', '66', '1', '7130', '37488', '7'), +('13', '66', '2', '68195', '51186', '7'), +('13', '66', '2', '68057', '33600', '7'), +('13', '66', '2', '68058', '33600', '7'), +('13', '66', '2', '68060', '33600', '7'), +('13', '66', '3', '69074', '69506', '7'), +('13', '66', '3', '68818', '47488', '7'), +('13', '66', '3', '9444', '41970', '7'), +('13', '66', '3', '9436', '40453', '7'), +('13', '66', '5', '69135', '70727', '7'), +('13', '66', '5', '68808', '58788', '7'), +('13', '66', '5', '67625', '49039', '7'), +('13', '66', '5', '7769', '46167', '7'), +('13', '66', '8', '69164', '52539', '7'), +('13', '66', '8', '21998', '51267', '7'), +('13', '66', '8', '21996', '43646', '7'), +('13', '66', '8', '15815', '43355', '7'), +('13', '66', '6', '68788', '59859', '7'), +('13', '66', '6', '68841', '48972', '7'), +('13', '66', '6', '68789', '38080', '7'), +('13', '66', '6', '69163', '33889', '7'), +('13', '66', '17', '68986', '70190', '7'), +('13', '66', '17', '69153', '57009', '7'), +('13', '66', '17', '47655', '55158', '7'), +('13', '66', '17', '68782', '48689', '7'), +('13', '66', '7', '69082', '41731', '7'), +('13', '66', '7', '68916', '39011', '7'), +('13', '66', '7', '68807', '33600', '7'), +('13', '66', '7', '68057', '33600', '7'), +('13', '66', '9', '69100', '43912', '7'), +('13', '66', '9', '68606', '41438', '7'), +('13', '66', '9', '28665', '33940', '7'), +('13', '66', '9', '68198', '33669', '7'), +('13', '66', '15', '68957', '68372', '7'), +('13', '66', '15', '68846', '67723', '7'), +('13', '66', '15', '68672', '58353', '7'), +('13', '66', '15', '14818', '53538', '7'), +('13', '66', '20', '69134', '70940', '7'), +('13', '66', '20', '67625', '49039', '7'), +('13', '66', '20', '68726', '46011', '7'), +('13', '66', '20', '69445', '41155', '7'), +('13', '66', '12', '69255', '72745', '7'), +('13', '66', '12', '28144', '44636', '7'), +('13', '66', '12', '26996', '43638', '7'), +('13', '66', '12', '13619', '40844', '7'), +('13', '66', '18', '68751', '58084', '7'), +('13', '66', '18', '69149', '41091', '7'), +('13', '66', '18', '28649', '39815', '7'), +('13', '66', '18', '26777', '36634', '7'), +('13', '66', '19', '69078', '68323', '7'), +('13', '66', '19', '68918', '48822', '7'), +('13', '66', '19', '28881', '34200', '7'), +('13', '66', '19', '69251', '34088', '7'), +('13', '66', '13', '69046', '67336', '7'), +('13', '66', '13', '68744', '57449', '7'), +('13', '66', '13', '24793', '49778', '7'), +('13', '66', '13', '69159', '45432', '7'), +('13', '66', '14', '69046', '67336', '7'), +('13', '66', '14', '68745', '57677', '7'), +('13', '66', '14', '68744', '57449', '7'), +('13', '66', '14', '27274', '52764', '7'), +('13', '66', '11', '69162', '72058', '7'), +('13', '66', '11', '20508', '59309', '7'), +('13', '66', '11', '20496', '57374', '7'), +('13', '66', '11', '26788', '44323', '7'), +('13', '67', '22', '66397', '0', '7'), +('13', '67', '22', '62787', '0', '7'), +('13', '67', '22', '61948', '0', '7'), +('13', '67', '22', '21805', '0', '7'), +('13', '67', '1', '69106', '98259', '7'), +('13', '67', '1', '69062', '69105', '7'), +('13', '67', '1', '68949', '49145', '7'), +('13', '67', '1', '7130', '36993', '7'), +('13', '67', '2', '68195', '49791', '7'), +('13', '67', '2', '68807', '32000', '7'), +('13', '67', '2', '68057', '32000', '7'), +('13', '67', '2', '68058', '32000', '7'), +('13', '67', '3', '69074', '67710', '7'), +('13', '67', '3', '68818', '46090', '7'), +('13', '67', '3', '9444', '40774', '7'), +('13', '67', '3', '9436', '39207', '7'), +('13', '67', '5', '69135', '69131', '7'), +('13', '67', '5', '68808', '57193', '7'), +('13', '67', '5', '67625', '48469', '7'), +('13', '67', '5', '7769', '45171', '7'), +('13', '67', '8', '69164', '51794', '7'), +('13', '67', '8', '21998', '49871', '7'), +('13', '67', '8', '21996', '42450', '7'), +('13', '67', '8', '15815', '42359', '7'), +('13', '67', '6', '68788', '58259', '7'), +('13', '67', '6', '68841', '47976', '7'), +('13', '67', '6', '68789', '37508', '7'), +('13', '67', '6', '69163', '33894', '7'), +('13', '67', '17', '68986', '68395', '7'), +('13', '67', '17', '69153', '56115', '7'), +('13', '67', '17', '47655', '53764', '7'), +('13', '67', '17', '68782', '47694', '7'), +('13', '67', '7', '69082', '41159', '7'), +('13', '67', '7', '68916', '38441', '7'), +('13', '67', '7', '69176', '32576', '7'), +('13', '67', '7', '11598', '32423', '7'), +('13', '67', '9', '69100', '43342', '7'), +('13', '67', '9', '68606', '40240', '7'), +('13', '67', '9', '28665', '33444', '7'), +('13', '67', '9', '69129', '33311', '7'), +('13', '67', '15', '68957', '66577', '7'), +('13', '67', '15', '68846', '65927', '7'), +('13', '67', '15', '68672', '57106', '7'), +('13', '67', '15', '14818', '52143', '7'), +('13', '67', '20', '69134', '69345', '7'), +('13', '67', '20', '67625', '48469', '7'), +('13', '67', '20', '68726', '44612', '7'), +('13', '67', '20', '69445', '39958', '7'), +('13', '67', '12', '69255', '71149', '7'), +('13', '67', '12', '28144', '43641', '7'), +('13', '67', '12', '26996', '42643', '7'), +('13', '67', '12', '13619', '39597', '7'), +('13', '67', '18', '68751', '56589', '7'), +('13', '67', '18', '69149', '40847', '7'), +('13', '67', '18', '28649', '39245', '7'), +('13', '67', '18', '26777', '35486', '7'), +('13', '67', '19', '69078', '66527', '7'), +('13', '67', '19', '68918', '47326', '7'), +('13', '67', '19', '69251', '34093', '7'), +('13', '67', '19', '28881', '32903', '7'), +('13', '67', '13', '69046', '65542', '7'), +('13', '67', '13', '68744', '55852', '7'), +('13', '67', '13', '24793', '48282', '7'), +('13', '67', '13', '69159', '44863', '7'), +('13', '67', '14', '69046', '65542', '7'), +('13', '67', '14', '68745', '56080', '7'), +('13', '67', '14', '68744', '55852', '7'), +('13', '67', '14', '27274', '51368', '7'), +('13', '67', '11', '69162', '70464', '7'), +('13', '67', '11', '20508', '58059', '7'), +('13', '67', '11', '20496', '55878', '7'), +('13', '67', '11', '26788', '43127', '7'), +('13', '68', '22', '66397', '0', '7'), +('13', '68', '22', '62787', '0', '7'), +('13', '68', '22', '61948', '0', '7'), +('13', '68', '22', '21805', '0', '7'), +('13', '68', '1', '69106', '96515', '7'), +('13', '68', '1', '69062', '67311', '7'), +('13', '68', '1', '68949', '48150', '7'), +('13', '68', '1', '7130', '36498', '7'), +('13', '68', '2', '68195', '48396', '7'), +('13', '68', '2', '68807', '30400', '7'), +('13', '68', '2', '68057', '30400', '7'), +('13', '68', '2', '68058', '30400', '7'), +('13', '68', '3', '69074', '65913', '7'), +('13', '68', '3', '68818', '44692', '7'), +('13', '68', '3', '9444', '39578', '7'), +('13', '68', '3', '9436', '37960', '7'), +('13', '68', '5', '69135', '67535', '7'), +('13', '68', '5', '68808', '55598', '7'), +('13', '68', '5', '67625', '47899', '7'), +('13', '68', '5', '7769', '44175', '7'), +('13', '68', '8', '69164', '51049', '7'), +('13', '68', '8', '21998', '48475', '7'), +('13', '68', '8', '15815', '41362', '7'), +('13', '68', '8', '21996', '41253', '7'), +('13', '68', '6', '68788', '56659', '7'), +('13', '68', '6', '68841', '46980', '7'), +('13', '68', '6', '68789', '36936', '7'), +('13', '68', '6', '69163', '33899', '7'), +('13', '68', '17', '68986', '66600', '7'), +('13', '68', '17', '69153', '55221', '7'), +('13', '68', '17', '47655', '52370', '7'), +('13', '68', '17', '68782', '46699', '7'), +('13', '68', '7', '69082', '40587', '7'), +('13', '68', '7', '68916', '37871', '7'), +('13', '68', '7', '69176', '32580', '7'), +('13', '68', '7', '11598', '31677', '7'), +('13', '68', '9', '69100', '42772', '7'), +('13', '68', '9', '68606', '39042', '7'), +('13', '68', '9', '69129', '33314', '7'), +('13', '68', '9', '28665', '32947', '7'), +('13', '68', '15', '68957', '64781', '7'), +('13', '68', '15', '68846', '64131', '7'), +('13', '68', '15', '68672', '55859', '7'), +('13', '68', '15', '14818', '50748', '7'), +('13', '68', '20', '69134', '67750', '7'), +('13', '68', '20', '67625', '47899', '7'), +('13', '68', '20', '68726', '43214', '7'), +('13', '68', '20', '69445', '38761', '7'), +('13', '68', '12', '69255', '69553', '7'), +('13', '68', '12', '28144', '42646', '7'), +('13', '68', '12', '26996', '41648', '7'), +('13', '68', '12', '13619', '38351', '7'), +('13', '68', '18', '68751', '55094', '7'), +('13', '68', '18', '69149', '40602', '7'), +('13', '68', '18', '28649', '38675', '7'), +('13', '68', '18', '26777', '34338', '7'), +('13', '68', '19', '69078', '64732', '7'), +('13', '68', '19', '68918', '45830', '7'), +('13', '68', '19', '69251', '34098', '7'), +('13', '68', '19', '28881', '31606', '7'), +('13', '68', '13', '69046', '63747', '7'), +('13', '68', '13', '68744', '54255', '7'), +('13', '68', '13', '24793', '46786', '7'), +('13', '68', '13', '69159', '44294', '7'), +('13', '68', '14', '69046', '63747', '7'), +('13', '68', '14', '68745', '54483', '7'), +('13', '68', '14', '68744', '54255', '7'), +('13', '68', '14', '27274', '49973', '7'), +('13', '68', '11', '69162', '68870', '7'), +('13', '68', '11', '20508', '56809', '7'), +('13', '68', '11', '20496', '54382', '7'), +('13', '68', '11', '26788', '41931', '7'), +('13', '69', '22', '66397', '0', '7'), +('13', '69', '22', '62787', '0', '7'), +('13', '69', '22', '61948', '0', '7'), +('13', '69', '22', '21805', '0', '7'), +('13', '69', '1', '69106', '94771', '7'), +('13', '69', '1', '69062', '65517', '7'), +('13', '69', '1', '68949', '47155', '7'), +('13', '69', '1', '7130', '36003', '7'), +('13', '69', '2', '68195', '47001', '7'), +('13', '69', '2', '46141', '29587', '7'), +('13', '69', '2', '68057', '28800', '7'), +('13', '69', '2', '68058', '28800', '7'), +('13', '69', '3', '69074', '64116', '7'), +('13', '69', '3', '68818', '43294', '7'), +('13', '69', '3', '9444', '38382', '7'), +('13', '69', '3', '9436', '36713', '7'), +('13', '69', '5', '69135', '65939', '7'), +('13', '69', '5', '68808', '54003', '7'), +('13', '69', '5', '67625', '47329', '7'), +('13', '69', '5', '7769', '43179', '7'), +('13', '69', '8', '69164', '50304', '7'), +('13', '69', '8', '21998', '47079', '7'), +('13', '69', '8', '15815', '40365', '7'), +('13', '69', '8', '21996', '40057', '7'), +('13', '69', '6', '68788', '55059', '7'), +('13', '69', '6', '68841', '45984', '7'), +('13', '69', '6', '68789', '36364', '7'), +('13', '69', '6', '69163', '33904', '7'), +('13', '69', '17', '68986', '64805', '7'), +('13', '69', '17', '69153', '54327', '7'), +('13', '69', '17', '47655', '50977', '7'), +('13', '69', '17', '68782', '45704', '7'), +('13', '69', '7', '69082', '40015', '7'), +('13', '69', '7', '68916', '37301', '7'), +('13', '69', '7', '69176', '32584', '7'), +('13', '69', '7', '11598', '30931', '7'), +('13', '69', '9', '69100', '42202', '7'), +('13', '69', '9', '68606', '37844', '7'), +('13', '69', '9', '69129', '33317', '7'), +('13', '69', '9', '28665', '32451', '7'), +('13', '69', '15', '68957', '62985', '7'), +('13', '69', '15', '68846', '62335', '7'), +('13', '69', '15', '68672', '54612', '7'), +('13', '69', '15', '14818', '49353', '7'), +('13', '69', '20', '69134', '66155', '7'), +('13', '69', '20', '67625', '47329', '7'), +('13', '69', '20', '68726', '41816', '7'), +('13', '69', '20', '69445', '37564', '7'), +('13', '69', '12', '69255', '67956', '7'), +('13', '69', '12', '28144', '41651', '7'), +('13', '69', '12', '26996', '40653', '7'), +('13', '69', '12', '13619', '37105', '7'), +('13', '69', '18', '68751', '53599', '7'), +('13', '69', '18', '69149', '40357', '7'), +('13', '69', '18', '28649', '38105', '7'), +('13', '69', '18', '68987', '33587', '7'), +('13', '69', '19', '69078', '62936', '7'), +('13', '69', '19', '68918', '44334', '7'), +('13', '69', '19', '69251', '34103', '7'), +('13', '69', '19', '28881', '30309', '7'), +('13', '69', '13', '69046', '61952', '7'), +('13', '69', '13', '68744', '52658', '7'), +('13', '69', '13', '24793', '45290', '7'), +('13', '69', '13', '69159', '43725', '7'), +('13', '69', '14', '69046', '61952', '7'), +('13', '69', '14', '68745', '52886', '7'), +('13', '69', '14', '68744', '52658', '7'), +('13', '69', '14', '27274', '48577', '7'), +('13', '69', '11', '69162', '67276', '7'), +('13', '69', '11', '20508', '55559', '7'), +('13', '69', '11', '20496', '52886', '7'), +('13', '69', '11', '26788', '40735', '7'), +('13', '70', '22', '21805', '0', '11'), +('13', '70', '22', '61948', '0', '11'), +('13', '70', '22', '21807', '0', '11'), +('13', '70', '22', '12425', '0', '11'), +('13', '70', '1', '51705', '94962', '11'), +('13', '70', '1', '69106', '93028', '11'), +('13', '70', '1', '47285', '72326', '11'), +('13', '70', '1', '69062', '63723', '11'), +('13', '70', '2', '39358', '67859', '11'), +('13', '70', '2', '68195', '45606', '11'), +('13', '70', '2', '83563', '41920', '11'), +('13', '70', '2', '39285', '41436', '11'), +('13', '70', '3', '83634', '95080', '11'), +('13', '70', '3', '71655', '75895', '11'), +('13', '70', '3', '83531', '65208', '11'), +('13', '70', '3', '83658', '64973', '11'), +('13', '70', '5', '39328', '96174', '11'), +('13', '70', '5', '69135', '64343', '11'), +('13', '70', '5', '47276', '58823', '11'), +('13', '70', '5', '68808', '52408', '11'), +('13', '70', '8', '70704', '95024', '11'), +('13', '70', '8', '39299', '94713', '11'), +('13', '70', '8', '71665', '80589', '11'), +('13', '70', '8', '47247', '61258', '11'), +('13', '70', '6', '39275', '94733', '11'), +('13', '70', '6', '83635', '94263', '11'), +('13', '70', '6', '39209', '64941', '11'), +('13', '70', '6', '39263', '61828', '11'), +('13', '70', '17', '83606', '67853', '11'), +('13', '70', '17', '70714', '67002', '11'), +('13', '70', '17', '71641', '66031', '11'), +('13', '70', '17', '68986', '63010', '11'), +('13', '70', '7', '71089', '51191', '11'), +('13', '70', '7', '83567', '41070', '11'), +('13', '70', '7', '69082', '39443', '11'), +('13', '70', '7', '70938', '37645', '11'), +('13', '70', '9', '51709', '97270', '11'), +('13', '70', '9', '39336', '46948', '11'), +('13', '70', '9', '83655', '44309', '11'), +('13', '70', '9', '69100', '41632', '11'), +('13', '70', '15', '51702', '93481', '11'), +('13', '70', '15', '39230', '63347', '11'), +('13', '70', '15', '68957', '61189', '11'), +('13', '70', '15', '68846', '60539', '11'), +('13', '70', '20', '39253', '95510', '11'), +('13', '70', '20', '83650', '94962', '11'), +('13', '70', '20', '39235', '91258', '11'), +('13', '70', '20', '69134', '64560', '11'), +('13', '70', '12', '83571', '93270', '11'), +('13', '70', '12', '69255', '66360', '11'), +('13', '70', '12', '71090', '51668', '11'), +('13', '70', '12', '70940', '49132', '11'), +('13', '70', '18', '70943', '76613', '11'), +('13', '70', '18', '68751', '52104', '11'), +('13', '70', '18', '83610', '45152', '11'), +('13', '70', '18', '69149', '40112', '11'), +('13', '70', '19', '70941', '69613', '11'), +('13', '70', '19', '69078', '61140', '11'), +('13', '70', '19', '47219', '53040', '11'), +('13', '70', '19', '71091', '51053', '11'), +('13', '70', '13', '47250', '62952', '11'), +('13', '70', '13', '69046', '60157', '11'), +('13', '70', '13', '70622', '55808', '11'), +('13', '70', '13', '71671', '51989', '11'), +('13', '70', '14', '71669', '79911', '11'), +('13', '70', '14', '47311', '73883', '11'), +('13', '70', '14', '47250', '62952', '11'), +('13', '70', '14', '69046', '60157', '11'), +('13', '70', '11', '83548', '71659', '11'), +('13', '70', '11', '69162', '65682', '11'), +('13', '70', '11', '47243', '61075', '11'), +('13', '70', '11', '83665', '58116', '11'), +('13', '70', '22', '61948', '0', '10'), +('13', '70', '22', '66397', '0', '10'), +('13', '70', '22', '21805', '0', '10'), +('13', '70', '22', '21807', '0', '10'), +('13', '70', '1', '69106', '93028', '10'), +('13', '70', '1', '47285', '72326', '10'), +('13', '70', '1', '69062', '63723', '10'), +('13', '70', '1', '70983', '52450', '10'), +('13', '70', '2', '68195', '45606', '10'), +('13', '70', '2', '83563', '41920', '10'), +('13', '70', '2', '70937', '38273', '10'), +('13', '70', '2', '47211', '35038', '10'), +('13', '70', '3', '83634', '95080', '10'), +('13', '70', '3', '71655', '75895', '10'), +('13', '70', '3', '83531', '65208', '10'), +('13', '70', '3', '83658', '64973', '10'), +('13', '70', '5', '69135', '64343', '10'), +('13', '70', '5', '47276', '58823', '10'), +('13', '70', '5', '68808', '52408', '10'), +('13', '70', '5', '67625', '46759', '10'), +('13', '70', '8', '70704', '95024', '10'), +('13', '70', '8', '71665', '80589', '10'), +('13', '70', '8', '47247', '61258', '10'), +('13', '70', '8', '47306', '58996', '10'), +('13', '70', '6', '83635', '94263', '10'), +('13', '70', '6', '83407', '53588', '10'), +('13', '70', '6', '68788', '53459', '10'), +('13', '70', '6', '71590', '49683', '10'), +('13', '70', '17', '83606', '67853', '10'), +('13', '70', '17', '70714', '67002', '10'), +('13', '70', '17', '71641', '66031', '10'), +('13', '70', '17', '68986', '63010', '10'), +('13', '70', '7', '71089', '51191', '10'), +('13', '70', '7', '83567', '41070', '10'), +('13', '70', '7', '69082', '39443', '10'), +('13', '70', '7', '70938', '37645', '10'), +('13', '70', '9', '83655', '44309', '10'), +('13', '70', '9', '69100', '41632', '10'), +('13', '70', '9', '70939', '36734', '10'), +('13', '70', '9', '68606', '36646', '10'), +('13', '70', '15', '68957', '61189', '10'), +('13', '70', '15', '68846', '60539', '10'), +('13', '70', '15', '83458', '56120', '10'), +('13', '70', '15', '68672', '53365', '10'), +('13', '70', '20', '83650', '94962', '10'), +('13', '70', '20', '69134', '64560', '10'), +('13', '70', '20', '71609', '49505', '10'), +('13', '70', '20', '67625', '46759', '10'), +('13', '70', '12', '83571', '93270', '10'), +('13', '70', '12', '69255', '66360', '10'), +('13', '70', '12', '71090', '51668', '10'), +('13', '70', '12', '70940', '49132', '10'), +('13', '70', '18', '70943', '76613', '10'), +('13', '70', '18', '68751', '52104', '10'), +('13', '70', '18', '83610', '45152', '10'), +('13', '70', '18', '69149', '40112', '10'), +('13', '70', '19', '70941', '69613', '10'), +('13', '70', '19', '69078', '61140', '10'), +('13', '70', '19', '47219', '53040', '10'), +('13', '70', '19', '71091', '51053', '10'), +('13', '70', '13', '47250', '62952', '10'), +('13', '70', '13', '69046', '60157', '10'), +('13', '70', '13', '70622', '55808', '10'), +('13', '70', '13', '71671', '51989', '10'), +('13', '70', '14', '71669', '79911', '10'), +('13', '70', '14', '47311', '73883', '10'), +('13', '70', '14', '47250', '62952', '10'), +('13', '70', '14', '69046', '60157', '10'), +('13', '70', '11', '83548', '71659', '10'), +('13', '70', '11', '69162', '65682', '10'), +('13', '70', '11', '47243', '61075', '10'), +('13', '70', '11', '83665', '58116', '10'), +('13', '70', '22', '66397', '0', '9'), +('13', '70', '22', '62787', '0', '9'), +('13', '70', '22', '61948', '0', '9'), +('13', '70', '22', '21805', '0', '9'), +('13', '70', '1', '69106', '93028', '9'), +('13', '70', '1', '47285', '72326', '9'), +('13', '70', '1', '69062', '63723', '9'), +('13', '70', '1', '70983', '52450', '9'), +('13', '70', '2', '68195', '45606', '9'), +('13', '70', '2', '70937', '38273', '9'), +('13', '70', '2', '47211', '35038', '9'), +('13', '70', '2', '70724', '33579', '9'), +('13', '70', '3', '71655', '75895', '9'), +('13', '70', '3', '69074', '62319', '9'), +('13', '70', '3', '47299', '43061', '9'), +('13', '70', '3', '68818', '41896', '9'), +('13', '70', '5', '69135', '64343', '9'), +('13', '70', '5', '47276', '58823', '9'), +('13', '70', '5', '68808', '52408', '9'), +('13', '70', '5', '67625', '46759', '9'), +('13', '70', '8', '70704', '95024', '9'), +('13', '70', '8', '71665', '80589', '9'), +('13', '70', '8', '47247', '61258', '9'), +('13', '70', '8', '47306', '58996', '9'), +('13', '70', '6', '68788', '53459', '9'), +('13', '70', '6', '71590', '49683', '9'), +('13', '70', '6', '68841', '44988', '9'), +('13', '70', '6', '47280', '38827', '9'), +('13', '70', '17', '70714', '67002', '9'), +('13', '70', '17', '71641', '66031', '9'), +('13', '70', '17', '68986', '63010', '9'), +('13', '70', '17', '69153', '53434', '9'), +('13', '70', '7', '71089', '51191', '9'), +('13', '70', '7', '69082', '39443', '9'), +('13', '70', '7', '70938', '37645', '9'), +('13', '70', '7', '68916', '36731', '9'), +('13', '70', '9', '69100', '41632', '9'), +('13', '70', '9', '70939', '36734', '9'), +('13', '70', '9', '68606', '36646', '9'), +('13', '70', '9', '47223', '35153', '9'), +('13', '70', '15', '68957', '61189', '9'), +('13', '70', '15', '68846', '60539', '9'), +('13', '70', '15', '68672', '53365', '9'), +('13', '70', '15', '47240', '51047', '9'), +('13', '70', '20', '69134', '64560', '9'), +('13', '70', '20', '71609', '49505', '9'), +('13', '70', '20', '67625', '46759', '9'), +('13', '70', '20', '68726', '40417', '9'), +('13', '70', '12', '69255', '66360', '9'), +('13', '70', '12', '71090', '51668', '9'), +('13', '70', '12', '70940', '49132', '9'), +('13', '70', '12', '28144', '40656', '9'), +('13', '70', '18', '70943', '76613', '9'), +('13', '70', '18', '68751', '52104', '9'), +('13', '70', '18', '69149', '40112', '9'), +('13', '70', '18', '71649', '38081', '9'), +('13', '70', '19', '70941', '69613', '9'), +('13', '70', '19', '69078', '61140', '9'), +('13', '70', '19', '47219', '53040', '9'), +('13', '70', '19', '71091', '51053', '9'), +('13', '70', '13', '47250', '62952', '9'), +('13', '70', '13', '69046', '60157', '9'), +('13', '70', '13', '70622', '55808', '9'), +('13', '70', '13', '71671', '51989', '9'), +('13', '70', '14', '71669', '79911', '9'), +('13', '70', '14', '47311', '73883', '9'), +('13', '70', '14', '47250', '62952', '9'), +('13', '70', '14', '69046', '60157', '9'), +('13', '70', '11', '69162', '65682', '9'), +('13', '70', '11', '47243', '61075', '9'), +('13', '70', '11', '71659', '55654', '9'), +('13', '70', '11', '20508', '54310', '9'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '70', '22', '66397', '0', '8'), +('13', '70', '22', '62787', '0', '8'), +('13', '70', '22', '61948', '0', '8'), +('13', '70', '22', '21805', '0', '8'), +('13', '70', '1', '69106', '93028', '8'), +('13', '70', '1', '47285', '72326', '8'), +('13', '70', '1', '69062', '63723', '8'), +('13', '70', '1', '70692', '46546', '8'), +('13', '70', '2', '68195', '45606', '8'), +('13', '70', '2', '70937', '38273', '8'), +('13', '70', '2', '47211', '35038', '8'), +('13', '70', '2', '70724', '33579', '8'), +('13', '70', '3', '69074', '62319', '8'), +('13', '70', '3', '47299', '43061', '8'), +('13', '70', '3', '68818', '41896', '8'), +('13', '70', '3', '47302', '37353', '8'), +('13', '70', '5', '69135', '64343', '8'), +('13', '70', '5', '47276', '58823', '8'), +('13', '70', '5', '68808', '52408', '8'), +('13', '70', '5', '67625', '46759', '8'), +('13', '70', '8', '70704', '95024', '8'), +('13', '70', '8', '47247', '61258', '8'), +('13', '70', '8', '47306', '58996', '8'), +('13', '70', '8', '69164', '49559', '8'), +('13', '70', '6', '68788', '53459', '8'), +('13', '70', '6', '68841', '44988', '8'), +('13', '70', '6', '47280', '38827', '8'), +('13', '70', '6', '68789', '35792', '8'), +('13', '70', '17', '70714', '67002', '8'), +('13', '70', '17', '68986', '63010', '8'), +('13', '70', '17', '69153', '53434', '8'), +('13', '70', '17', '47655', '49583', '8'), +('13', '70', '7', '71089', '51191', '8'), +('13', '70', '7', '69082', '39443', '8'), +('13', '70', '7', '70938', '37645', '8'), +('13', '70', '7', '68916', '36731', '8'), +('13', '70', '9', '69100', '41632', '8'), +('13', '70', '9', '70939', '36734', '8'), +('13', '70', '9', '68606', '36646', '8'), +('13', '70', '9', '47223', '35153', '8'), +('13', '70', '15', '68957', '61189', '8'), +('13', '70', '15', '68846', '60539', '8'), +('13', '70', '15', '68672', '53365', '8'), +('13', '70', '15', '47240', '51047', '8'), +('13', '70', '20', '69134', '64560', '8'), +('13', '70', '20', '67625', '46759', '8'), +('13', '70', '20', '68726', '40417', '8'), +('13', '70', '20', '47284', '37518', '8'), +('13', '70', '12', '69255', '66360', '8'), +('13', '70', '12', '71090', '51668', '8'), +('13', '70', '12', '70940', '49132', '8'), +('13', '70', '12', '28144', '40656', '8'), +('13', '70', '18', '70943', '76613', '8'), +('13', '70', '18', '68751', '52104', '8'), +('13', '70', '18', '69149', '40112', '8'), +('13', '70', '18', '28649', '37536', '8'), +('13', '70', '19', '70941', '69613', '8'), +('13', '70', '19', '69078', '61140', '8'), +('13', '70', '19', '47219', '53040', '8'), +('13', '70', '19', '71091', '51053', '8'), +('13', '70', '13', '47250', '62952', '8'), +('13', '70', '13', '69046', '60157', '8'), +('13', '70', '13', '70622', '55808', '8'), +('13', '70', '13', '68744', '51061', '8'), +('13', '70', '14', '47311', '73883', '8'), +('13', '70', '14', '47250', '62952', '8'), +('13', '70', '14', '69046', '60157', '8'), +('13', '70', '14', '70622', '55808', '8'), +('13', '70', '11', '69162', '65682', '8'), +('13', '70', '11', '47243', '61075', '8'), +('13', '70', '11', '20508', '54310', '8'), +('13', '70', '11', '20496', '51390', '8'), +('13', '71', '22', '21805', '0', '11'), +('13', '71', '22', '61948', '0', '11'), +('13', '71', '22', '21807', '0', '11'), +('13', '71', '22', '12425', '0', '11'), +('13', '71', '1', '51705', '92567', '11'), +('13', '71', '1', '69106', '91284', '11'), +('13', '71', '1', '47285', '70530', '11'), +('13', '71', '1', '69062', '61929', '11'), +('13', '71', '2', '39358', '66864', '11'), +('13', '71', '2', '68195', '44212', '11'), +('13', '71', '2', '83563', '41928', '11'), +('13', '71', '2', '39285', '41441', '11'), +('13', '71', '3', '83634', '92686', '11'), +('13', '71', '3', '71655', '73900', '11'), +('13', '71', '3', '83658', '63978', '11'), +('13', '71', '3', '83531', '63613', '11'), +('13', '71', '5', '39328', '93780', '11'), +('13', '71', '5', '69135', '62747', '11'), +('13', '71', '5', '47276', '57829', '11'), +('13', '71', '5', '68808', '50813', '11'), +('13', '71', '8', '70704', '93280', '11'), +('13', '71', '8', '39299', '92317', '11'), +('13', '71', '8', '71665', '78594', '11'), +('13', '71', '8', '47247', '59859', '11'), +('13', '71', '6', '39275', '92338', '11'), +('13', '71', '6', '83635', '91868', '11'), +('13', '71', '6', '39209', '63345', '11'), +('13', '71', '6', '39263', '60832', '11'), +('13', '71', '17', '83606', '66860', '11'), +('13', '71', '17', '70714', '65410', '11'), +('13', '71', '17', '71641', '64435', '11'), +('13', '71', '17', '68986', '61215', '11'), +('13', '71', '7', '71089', '49995', '11'), +('13', '71', '7', '83567', '41078', '11'), +('13', '71', '7', '69082', '38871', '11'), +('13', '71', '7', '70938', '37649', '11'), +('13', '71', '9', '51709', '94875', '11'), +('13', '71', '9', '39336', '46955', '11'), +('13', '71', '9', '83655', '44314', '11'), +('13', '71', '9', '39297', '41458', '11'), +('13', '71', '15', '51702', '91087', '11'), +('13', '71', '15', '39230', '61752', '11'), +('13', '71', '15', '68957', '59393', '11'), +('13', '71', '15', '68846', '58743', '11'), +('13', '71', '20', '39253', '93115', '11'), +('13', '71', '20', '83650', '92567', '11'), +('13', '71', '20', '39235', '88863', '11'), +('13', '71', '20', '69134', '62965', '11'), +('13', '71', '12', '83571', '90878', '11'), +('13', '71', '12', '69255', '64764', '11'), +('13', '71', '12', '71090', '50471', '11'), +('13', '71', '12', '70940', '48563', '11'), +('13', '71', '18', '70943', '74818', '11'), +('13', '71', '18', '68751', '50609', '11'), +('13', '71', '18', '83610', '45159', '11'), +('13', '71', '18', '69149', '39867', '11'), +('13', '71', '19', '70941', '67621', '11'), +('13', '71', '19', '69078', '59344', '11'), +('13', '71', '19', '47219', '52144', '11'), +('13', '71', '19', '71091', '49853', '11'), +('13', '71', '13', '47250', '61557', '11'), +('13', '71', '13', '69046', '58362', '11'), +('13', '71', '13', '70622', '54413', '11'), +('13', '71', '13', '71671', '51419', '11'), +('13', '71', '14', '71669', '77916', '11'), +('13', '71', '14', '47311', '72089', '11'), +('13', '71', '14', '47250', '61557', '11'), +('13', '71', '14', '69046', '58362', '11'), +('13', '71', '11', '83548', '69864', '11'), +('13', '71', '11', '69162', '64089', '11'), +('13', '71', '11', '47243', '59679', '11'), +('13', '71', '11', '83665', '57549', '11'), +('13', '72', '22', '21805', '0', '11'), +('13', '72', '22', '61948', '0', '11'), +('13', '72', '22', '21807', '0', '11'), +('13', '72', '22', '12425', '0', '11'), +('13', '72', '1', '51705', '90172', '11'), +('13', '72', '1', '69106', '89540', '11'), +('13', '72', '1', '47285', '68735', '11'), +('13', '72', '1', '69062', '60135', '11'), +('13', '72', '2', '39358', '65870', '11'), +('13', '72', '2', '68195', '42817', '11'), +('13', '72', '2', '83563', '41936', '11'), +('13', '72', '2', '39285', '41447', '11'), +('13', '72', '3', '83634', '90292', '11'), +('13', '72', '3', '71655', '71905', '11'), +('13', '72', '3', '83658', '62982', '11'), +('13', '72', '3', '83531', '62018', '11'), +('13', '72', '5', '39328', '91386', '11'), +('13', '72', '5', '69135', '61151', '11'), +('13', '72', '5', '47276', '56834', '11'), +('13', '72', '5', '51701', '49921', '11'), +('13', '72', '8', '70704', '91536', '11'), +('13', '72', '8', '39299', '89921', '11'), +('13', '72', '8', '71665', '76600', '11'), +('13', '72', '8', '47247', '58459', '11'), +('13', '72', '6', '39275', '89943', '11'), +('13', '72', '6', '83635', '89473', '11'), +('13', '72', '6', '39209', '61749', '11'), +('13', '72', '6', '39263', '59836', '11'), +('13', '72', '17', '83606', '65867', '11'), +('13', '72', '17', '70714', '63817', '11'), +('13', '72', '17', '71641', '62840', '11'), +('13', '72', '17', '68986', '59420', '11'), +('13', '72', '7', '71089', '48799', '11'), +('13', '72', '7', '83567', '41086', '11'), +('13', '72', '7', '69082', '38299', '11'), +('13', '72', '7', '70938', '37653', '11'), +('13', '72', '9', '51709', '92480', '11'), +('13', '72', '9', '39336', '46962', '11'), +('13', '72', '9', '83655', '44319', '11'), +('13', '72', '9', '39297', '41463', '11'), +('13', '72', '15', '51702', '88693', '11'), +('13', '72', '15', '39230', '60157', '11'), +('13', '72', '15', '68957', '57597', '11'), +('13', '72', '15', '68846', '56947', '11'), +('13', '72', '20', '39253', '90720', '11'), +('13', '72', '20', '83650', '90172', '11'), +('13', '72', '20', '39235', '86468', '11'), +('13', '72', '20', '69134', '61370', '11'), +('13', '72', '12', '83571', '88487', '11'), +('13', '72', '12', '69255', '63167', '11'), +('13', '72', '12', '71090', '49274', '11'), +('13', '72', '12', '70940', '47994', '11'), +('13', '72', '18', '70943', '73024', '11'), +('13', '72', '18', '68751', '49114', '11'), +('13', '72', '18', '83610', '45166', '11'), +('13', '72', '18', '69149', '39622', '11'), +('13', '72', '19', '70941', '65629', '11'), +('13', '72', '19', '69078', '57548', '11'), +('13', '72', '19', '47219', '51248', '11'), +('13', '72', '19', '71091', '48653', '11'), +('13', '72', '13', '47250', '60162', '11'), +('13', '72', '13', '69046', '56567', '11'), +('13', '72', '13', '70622', '53018', '11'), +('13', '72', '13', '71671', '50850', '11'), +('13', '72', '14', '71669', '75921', '11'), +('13', '72', '14', '47311', '70294', '11'), +('13', '72', '14', '47250', '60162', '11'), +('13', '72', '14', '69046', '56567', '11'), +('13', '72', '11', '83548', '68069', '11'), +('13', '72', '11', '69162', '62495', '11'), +('13', '72', '11', '47243', '58282', '11'), +('13', '72', '11', '83665', '56981', '11'), +('13', '73', '22', '21805', '0', '11'), +('13', '73', '22', '61948', '0', '11'), +('13', '73', '22', '21807', '0', '11'), +('13', '73', '22', '12425', '0', '11'), +('13', '73', '1', '69106', '87796', '11'), +('13', '73', '1', '51705', '87777', '11'), +('13', '73', '1', '47285', '66940', '11'), +('13', '73', '1', '69062', '58341', '11'), +('13', '73', '2', '39358', '64875', '11'), +('13', '73', '2', '83563', '41944', '11'), +('13', '73', '2', '39285', '41452', '11'), +('13', '73', '2', '68195', '41422', '11'), +('13', '73', '3', '83634', '87898', '11'), +('13', '73', '3', '71655', '69910', '11'), +('13', '73', '3', '83658', '61987', '11'), +('13', '73', '3', '83531', '60423', '11'), +('13', '73', '5', '39328', '88992', '11'), +('13', '73', '5', '69135', '59555', '11'), +('13', '73', '5', '47276', '55839', '11'), +('13', '73', '5', '51701', '49576', '11'), +('13', '73', '8', '70704', '89792', '11'), +('13', '73', '8', '39299', '87526', '11'), +('13', '73', '8', '71665', '74605', '11'), +('13', '73', '8', '47247', '57059', '11'), +('13', '73', '6', '39275', '87549', '11'), +('13', '73', '6', '83635', '87079', '11'), +('13', '73', '6', '39209', '60154', '11'), +('13', '73', '6', '39263', '58840', '11'), +('13', '73', '17', '83606', '64874', '11'), +('13', '73', '17', '70714', '62224', '11'), +('13', '73', '17', '71641', '61245', '11'), +('13', '73', '17', '68986', '57625', '11'), +('13', '73', '7', '71089', '47603', '11'), +('13', '73', '7', '83567', '41095', '11'), +('13', '73', '7', '69082', '37727', '11'), +('13', '73', '7', '70938', '37657', '11'), +('13', '73', '9', '51709', '90085', '11'), +('13', '73', '9', '39336', '46970', '11'), +('13', '73', '9', '83655', '44324', '11'), +('13', '73', '9', '39297', '41468', '11'), +('13', '73', '15', '51702', '86300', '11'), +('13', '73', '15', '39230', '58562', '11'), +('13', '73', '15', '68957', '55801', '11'), +('13', '73', '15', '68846', '55151', '11'), +('13', '73', '20', '39253', '88325', '11'), +('13', '73', '20', '83650', '87777', '11'), +('13', '73', '20', '39235', '84073', '11'), +('13', '73', '20', '69134', '59775', '11'), +('13', '73', '12', '83571', '86095', '11'), +('13', '73', '12', '69255', '61571', '11'), +('13', '73', '12', '71090', '48077', '11'), +('13', '73', '12', '70940', '47425', '11'), +('13', '73', '18', '70943', '71229', '11'), +('13', '73', '18', '68751', '47619', '11'), +('13', '73', '18', '83610', '45173', '11'), +('13', '73', '18', '69149', '39377', '11'), +('13', '73', '19', '70941', '63637', '11'), +('13', '73', '19', '69078', '55752', '11'), +('13', '73', '19', '47219', '50352', '11'), +('13', '73', '19', '71091', '47453', '11'), +('13', '73', '13', '47250', '58767', '11'), +('13', '73', '13', '69046', '54772', '11'), +('13', '73', '13', '70622', '51623', '11'), +('13', '73', '13', '71671', '50280', '11'), +('13', '73', '14', '71669', '73925', '11'), +('13', '73', '14', '47311', '68499', '11'), +('13', '73', '14', '47250', '58767', '11'), +('13', '73', '14', '69046', '54772', '11'), +('13', '73', '11', '83548', '66274', '11'), +('13', '73', '11', '69162', '60901', '11'), +('13', '73', '11', '47243', '56886', '11'), +('13', '73', '11', '83665', '56413', '11'), +('13', '74', '22', '21805', '0', '11'), +('13', '74', '22', '61948', '0', '11'), +('13', '74', '22', '21807', '0', '11'), +('13', '74', '22', '12425', '0', '11'), +('13', '74', '1', '69106', '86052', '11'), +('13', '74', '1', '51705', '85382', '11'), +('13', '74', '1', '47285', '65144', '11'), +('13', '74', '1', '69062', '56547', '11'), +('13', '74', '2', '39358', '63880', '11'), +('13', '74', '2', '83563', '41952', '11'), +('13', '74', '2', '39285', '41458', '11'), +('13', '74', '2', '68195', '40027', '11'), +('13', '74', '3', '83634', '85504', '11'), +('13', '74', '3', '71655', '67915', '11'), +('13', '74', '3', '83658', '60991', '11'), +('13', '74', '3', '83531', '58828', '11'), +('13', '74', '5', '39328', '86598', '11'), +('13', '74', '5', '69135', '57960', '11'), +('13', '74', '5', '47276', '54844', '11'), +('13', '74', '5', '51701', '49231', '11'), +('13', '74', '8', '70704', '88048', '11'), +('13', '74', '8', '39299', '85130', '11'), +('13', '74', '8', '71665', '72611', '11'), +('13', '74', '8', '47247', '55659', '11'), +('13', '74', '6', '39275', '85154', '11'), +('13', '74', '6', '83635', '84684', '11'), +('13', '74', '6', '39209', '58558', '11'), +('13', '74', '6', '39263', '57844', '11'), +('13', '74', '17', '83606', '63881', '11'), +('13', '74', '17', '70714', '60631', '11'), +('13', '74', '17', '71641', '59649', '11'), +('13', '74', '17', '68986', '55830', '11'), +('13', '74', '7', '71089', '46407', '11'), +('13', '74', '7', '83567', '41103', '11'), +('13', '74', '7', '70938', '37661', '11'), +('13', '74', '7', '69082', '37155', '11'), +('13', '74', '9', '51709', '87690', '11'), +('13', '74', '9', '39336', '46977', '11'), +('13', '74', '9', '83655', '44329', '11'), +('13', '74', '9', '39297', '41473', '11'), +('13', '74', '15', '51702', '83906', '11'), +('13', '74', '15', '39230', '56967', '11'), +('13', '74', '15', '68957', '54005', '11'), +('13', '74', '15', '68846', '53355', '11'), +('13', '74', '20', '39253', '85930', '11'), +('13', '74', '20', '83650', '85382', '11'), +('13', '74', '20', '39235', '81678', '11'), +('13', '74', '20', '69134', '58180', '11'), +('13', '74', '12', '83571', '83703', '11'), +('13', '74', '12', '69255', '59975', '11'), +('13', '74', '12', '71090', '46880', '11'), +('13', '74', '12', '70940', '46856', '11'), +('13', '74', '18', '70943', '69434', '11'), +('13', '74', '18', '68751', '46124', '11'), +('13', '74', '18', '83610', '45180', '11'), +('13', '74', '18', '69149', '39132', '11'), +('13', '74', '19', '70941', '61645', '11'), +('13', '74', '19', '69078', '53956', '11'), +('13', '74', '19', '47219', '49457', '11'), +('13', '74', '19', '71091', '46253', '11'), +('13', '74', '13', '47250', '57372', '11'), +('13', '74', '13', '69046', '52977', '11'), +('13', '74', '13', '70622', '50229', '11'), +('13', '74', '13', '71671', '49711', '11'), +('13', '74', '14', '71669', '71930', '11'), +('13', '74', '14', '47311', '66704', '11'), +('13', '74', '14', '47250', '57372', '11'), +('13', '74', '14', '69046', '52977', '11'), +('13', '74', '11', '83548', '64479', '11'), +('13', '74', '11', '69162', '59307', '11'), +('13', '74', '11', '83665', '55846', '11'), +('13', '74', '11', '47243', '55490', '11'), +('13', '75', '22', '21807', '0', '13'), +('13', '75', '22', '21805', '0', '13'), +('13', '75', '22', '12425', '0', '13'), +('13', '75', '22', '39342', '0', '13'), +('13', '75', '1', '69106', '84308', '13'), +('13', '75', '1', '51705', '82988', '13'), +('13', '75', '1', '80676', '69837', '13'), +('13', '75', '1', '80639', '63585', '13'), +('13', '75', '2', '39358', '62885', '13'), +('13', '75', '2', '83563', '41960', '13'), +('13', '75', '2', '39285', '41463', '13'), +('13', '75', '2', '68195', '38632', '13'), +('13', '75', '3', '83634', '83110', '13'), +('13', '75', '3', '71655', '65920', '13'), +('13', '75', '3', '80647', '63886', '13'), +('13', '75', '3', '83658', '59996', '13'), +('13', '75', '5', '39328', '84204', '13'), +('13', '75', '5', '80661', '67706', '13'), +('13', '75', '5', '80615', '61755', '13'), +('13', '75', '5', '46934', '60593', '13'), +('13', '75', '8', '70704', '86304', '13'), +('13', '75', '8', '39299', '82735', '13'), +('13', '75', '8', '71665', '70616', '13'), +('13', '75', '8', '80679', '70108', '13'), +('13', '75', '6', '39275', '82760', '13'), +('13', '75', '6', '83635', '82289', '13'), +('13', '75', '6', '80646', '63256', '13'), +('13', '75', '6', '46883', '60592', '13'), +('13', '75', '17', '83606', '62888', '13'), +('13', '75', '17', '70714', '59038', '13'), +('13', '75', '17', '71641', '58054', '13'), +('13', '75', '17', '68986', '54035', '13'), +('13', '75', '7', '71089', '45212', '13'), +('13', '75', '7', '83567', '41111', '13'), +('13', '75', '7', '70938', '37666', '13'), +('13', '75', '7', '69082', '36583', '13'), +('13', '75', '9', '51709', '85295', '13'), +('13', '75', '9', '46938', '61211', '13'), +('13', '75', '9', '39336', '46984', '13'), +('13', '75', '9', '83655', '44334', '13'), +('13', '75', '15', '51702', '81512', '13'), +('13', '75', '15', '79909', '73463', '13'), +('13', '75', '15', '80666', '70407', '13'), +('13', '75', '15', '80686', '69748', '13'), +('13', '75', '20', '39253', '83535', '13'), +('13', '75', '20', '83650', '82987', '13'), +('13', '75', '20', '39235', '79283', '13'), +('13', '75', '20', '80680', '69998', '13'), +('13', '75', '12', '83571', '81311', '13'), +('13', '75', '12', '69255', '58378', '13'), +('13', '75', '12', '70940', '46287', '13'), +('13', '75', '12', '71090', '45684', '13'), +('13', '75', '18', '70943', '67639', '13'), +('13', '75', '18', '46810', '46034', '13'), +('13', '75', '18', '83610', '45187', '13'), +('13', '75', '18', '68751', '44629', '13'), +('13', '75', '19', '70941', '59653', '13'), +('13', '75', '19', '69078', '52160', '13'), +('13', '75', '19', '47219', '48561', '13'), +('13', '75', '19', '71091', '45053', '13'), +('13', '75', '13', '80633', '64542', '13'), +('13', '75', '13', '80624', '59241', '13'), +('13', '75', '13', '47250', '55977', '13'), +('13', '75', '13', '69046', '51182', '13'), +('13', '75', '14', '71669', '69935', '13'), +('13', '75', '14', '47311', '64909', '13'), +('13', '75', '14', '80665', '64832', '13'), +('13', '75', '14', '80635', '63176', '13'), +('13', '75', '11', '80668', '69847', '13'), +('13', '75', '11', '83548', '62684', '13'), +('13', '75', '11', '46939', '61490', '13'), +('13', '75', '11', '80629', '61164', '13'), +('13', '75', '22', '21807', '0', '12'), +('13', '75', '22', '21805', '0', '12'), +('13', '75', '22', '12425', '0', '12'), +('13', '75', '22', '39342', '0', '12'), +('13', '75', '1', '69106', '84308', '12'), +('13', '75', '1', '51705', '82988', '12'), +('13', '75', '1', '47285', '63349', '12'), +('13', '75', '1', '46882', '61234', '12'), +('13', '75', '2', '39358', '62885', '12'), +('13', '75', '2', '83563', '41960', '12'), +('13', '75', '2', '39285', '41463', '12'), +('13', '75', '2', '68195', '38632', '12'), +('13', '75', '3', '83634', '83110', '12'), +('13', '75', '3', '71655', '65920', '12'), +('13', '75', '3', '83658', '59996', '12'), +('13', '75', '3', '83531', '57233', '12'), +('13', '75', '5', '39328', '84204', '12'), +('13', '75', '5', '46934', '60593', '12'), +('13', '75', '5', '46868', '56791', '12'), +('13', '75', '5', '69135', '56364', '12'), +('13', '75', '8', '70704', '86304', '12'), +('13', '75', '8', '39299', '82735', '12'), +('13', '75', '8', '71665', '70616', '12'), +('13', '75', '8', '46936', '60834', '12'), +('13', '75', '6', '39275', '82760', '12'), +('13', '75', '6', '83635', '82289', '12'), +('13', '75', '6', '46883', '60592', '12'), +('13', '75', '6', '46933', '60239', '12'), +('13', '75', '17', '83606', '62888', '12'), +('13', '75', '17', '70714', '59038', '12'), +('13', '75', '17', '71641', '58054', '12'), +('13', '75', '17', '68986', '54035', '12'), +('13', '75', '7', '71089', '45212', '12'), +('13', '75', '7', '83567', '41111', '12'), +('13', '75', '7', '70938', '37666', '12'), +('13', '75', '7', '69082', '36583', '12'), +('13', '75', '9', '51709', '85295', '12'), +('13', '75', '9', '46938', '61211', '12'), +('13', '75', '9', '39336', '46984', '12'), +('13', '75', '9', '83655', '44334', '12'), +('13', '75', '15', '51702', '81512', '12'), +('13', '75', '15', '46932', '61314', '12'), +('13', '75', '15', '46864', '57244', '12'), +('13', '75', '15', '39230', '55372', '12'), +('13', '75', '20', '39253', '83535', '12'), +('13', '75', '20', '83650', '82987', '12'), +('13', '75', '20', '39235', '79283', '12'), +('13', '75', '20', '46886', '61166', '12'), +('13', '75', '12', '83571', '81311', '12'), +('13', '75', '12', '69255', '58378', '12'), +('13', '75', '12', '70940', '46287', '12'), +('13', '75', '12', '71090', '45684', '12'), +('13', '75', '18', '70943', '67639', '12'), +('13', '75', '18', '46810', '46034', '12'), +('13', '75', '18', '83610', '45187', '12'), +('13', '75', '18', '68751', '44629', '12'), +('13', '75', '19', '70941', '59653', '12'), +('13', '75', '19', '69078', '52160', '12'), +('13', '75', '19', '47219', '48561', '12'), +('13', '75', '19', '71091', '45053', '12'), +('13', '75', '13', '47250', '55977', '12'), +('13', '75', '13', '69046', '51182', '12'), +('13', '75', '13', '46906', '49911', '12'), +('13', '75', '13', '71671', '49141', '12'), +('13', '75', '14', '71669', '69935', '12'), +('13', '75', '14', '47311', '64909', '12'), +('13', '75', '14', '46925', '56305', '12'), +('13', '75', '14', '47250', '55977', '12'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '75', '11', '83548', '62684', '12'), +('13', '75', '11', '46939', '61490', '12'), +('13', '75', '11', '46889', '59391', '12'), +('13', '75', '11', '69162', '57713', '12'), +('13', '76', '22', '21807', '0', '13'), +('13', '76', '22', '21805', '0', '13'), +('13', '76', '22', '12425', '0', '13'), +('13', '76', '22', '39342', '0', '13'), +('13', '76', '1', '69106', '82564', '13'), +('13', '76', '1', '51705', '80593', '13'), +('13', '76', '1', '80676', '69844', '13'), +('13', '76', '1', '80639', '63592', '13'), +('13', '76', '2', '39358', '61890', '13'), +('13', '76', '2', '83563', '41968', '13'), +('13', '76', '2', '39285', '41469', '13'), +('13', '76', '2', '70937', '38309', '13'), +('13', '76', '3', '83634', '80716', '13'), +('13', '76', '3', '71655', '63925', '13'), +('13', '76', '3', '80647', '63893', '13'), +('13', '76', '3', '83658', '59000', '13'), +('13', '76', '5', '39328', '81810', '13'), +('13', '76', '5', '80661', '67713', '13'), +('13', '76', '5', '80615', '61761', '13'), +('13', '76', '5', '46934', '60600', '13'), +('13', '76', '8', '70704', '84560', '13'), +('13', '76', '8', '39299', '80339', '13'), +('13', '76', '8', '80679', '70108', '13'), +('13', '76', '8', '71665', '68622', '13'), +('13', '76', '6', '39275', '80365', '13'), +('13', '76', '6', '83635', '79894', '13'), +('13', '76', '6', '80646', '63256', '13'), +('13', '76', '6', '46883', '60599', '13'), +('13', '76', '17', '83606', '61895', '13'), +('13', '76', '17', '70714', '57445', '13'), +('13', '76', '17', '71641', '56459', '13'), +('13', '76', '17', '68986', '52241', '13'), +('13', '76', '7', '71089', '44016', '13'), +('13', '76', '7', '83567', '41119', '13'), +('13', '76', '7', '70938', '37670', '13'), +('13', '76', '7', '69082', '36011', '13'), +('13', '76', '9', '51709', '82901', '13'), +('13', '76', '9', '46938', '61219', '13'), +('13', '76', '9', '39336', '46991', '13'), +('13', '76', '9', '83655', '44339', '13'), +('13', '76', '15', '51702', '79118', '13'), +('13', '76', '15', '79909', '73469', '13'), +('13', '76', '15', '80666', '70407', '13'), +('13', '76', '15', '80686', '69755', '13'), +('13', '76', '20', '39253', '81140', '13'), +('13', '76', '20', '83650', '80592', '13'), +('13', '76', '20', '39235', '76889', '13'), +('13', '76', '20', '80680', '70005', '13'), +('13', '76', '12', '83571', '78919', '13'), +('13', '76', '12', '69255', '56782', '13'), +('13', '76', '12', '70940', '45718', '13'), +('13', '76', '12', '71090', '44487', '13'), +('13', '76', '18', '70943', '65844', '13'), +('13', '76', '18', '46810', '46039', '13'), +('13', '76', '18', '83610', '45194', '13'), +('13', '76', '18', '68751', '43134', '13'), +('13', '76', '19', '70941', '57661', '13'), +('13', '76', '19', '69078', '50364', '13'), +('13', '76', '19', '47219', '47665', '13'), +('13', '76', '19', '71091', '43853', '13'), +('13', '76', '13', '80633', '64547', '13'), +('13', '76', '13', '80624', '59246', '13'), +('13', '76', '13', '47250', '54582', '13'), +('13', '76', '13', '46906', '49919', '13'), +('13', '76', '14', '71669', '67940', '13'), +('13', '76', '14', '80665', '64837', '13'), +('13', '76', '14', '80635', '63181', '13'), +('13', '76', '14', '47311', '63114', '13'), +('13', '76', '11', '80668', '69854', '13'), +('13', '76', '11', '46939', '61497', '13'), +('13', '76', '11', '80629', '61170', '13'), +('13', '76', '11', '83548', '60889', '13'), +('13', '77', '22', '21807', '0', '13'), +('13', '77', '22', '21805', '0', '13'), +('13', '77', '22', '12425', '0', '13'), +('13', '77', '22', '39342', '0', '13'), +('13', '77', '1', '69106', '80820', '13'), +('13', '77', '1', '51705', '78198', '13'), +('13', '77', '1', '80676', '69851', '13'), +('13', '77', '1', '80639', '63598', '13'), +('13', '77', '2', '39358', '60895', '13'), +('13', '77', '2', '83563', '41976', '13'), +('13', '77', '2', '39285', '41474', '13'), +('13', '77', '2', '70937', '38315', '13'), +('13', '77', '3', '83634', '78322', '13'), +('13', '77', '3', '80647', '63899', '13'), +('13', '77', '3', '71655', '61930', '13'), +('13', '77', '3', '83658', '58005', '13'), +('13', '77', '5', '39328', '79416', '13'), +('13', '77', '5', '80661', '67720', '13'), +('13', '77', '5', '80615', '61767', '13'), +('13', '77', '5', '46934', '60607', '13'), +('13', '77', '8', '70704', '82816', '13'), +('13', '77', '8', '39299', '77943', '13'), +('13', '77', '8', '80679', '70108', '13'), +('13', '77', '8', '71665', '66627', '13'), +('13', '77', '6', '39275', '77970', '13'), +('13', '77', '6', '83635', '77499', '13'), +('13', '77', '6', '80646', '63256', '13'), +('13', '77', '6', '46883', '60606', '13'), +('13', '77', '17', '83606', '60902', '13'), +('13', '77', '17', '70714', '55852', '13'), +('13', '77', '17', '71641', '54863', '13'), +('13', '77', '17', '68986', '50446', '13'), +('13', '77', '7', '71089', '42820', '13'), +('13', '77', '7', '83567', '41127', '13'), +('13', '77', '7', '70938', '37674', '13'), +('13', '77', '7', '47207', '35968', '13'), +('13', '77', '9', '51709', '80506', '13'), +('13', '77', '9', '46938', '61227', '13'), +('13', '77', '9', '39336', '46998', '13'), +('13', '77', '9', '83655', '44344', '13'), +('13', '77', '15', '51702', '76724', '13'), +('13', '77', '15', '79909', '73475', '13'), +('13', '77', '15', '80666', '70407', '13'), +('13', '77', '15', '80686', '69762', '13'), +('13', '77', '20', '39253', '78745', '13'), +('13', '77', '20', '83650', '78197', '13'), +('13', '77', '20', '39235', '74494', '13'), +('13', '77', '20', '80680', '70012', '13'), +('13', '77', '12', '83571', '76527', '13'), +('13', '77', '12', '69255', '55186', '13'), +('13', '77', '12', '70940', '45149', '13'), +('13', '77', '12', '71090', '43290', '13'), +('13', '77', '18', '70943', '64049', '13'), +('13', '77', '18', '46810', '46044', '13'), +('13', '77', '18', '83610', '45202', '13'), +('13', '77', '18', '68751', '41639', '13'), +('13', '77', '19', '70941', '55669', '13'), +('13', '77', '19', '69078', '48568', '13'), +('13', '77', '19', '47219', '46769', '13'), +('13', '77', '19', '71091', '42653', '13'), +('13', '77', '13', '80633', '64552', '13'), +('13', '77', '13', '80624', '59251', '13'), +('13', '77', '13', '47250', '53187', '13'), +('13', '77', '13', '46906', '49926', '13'), +('13', '77', '14', '71669', '65944', '13'), +('13', '77', '14', '80665', '64842', '13'), +('13', '77', '14', '80635', '63186', '13'), +('13', '77', '14', '47311', '61319', '13'), +('13', '77', '11', '80668', '69862', '13'), +('13', '77', '11', '46939', '61504', '13'), +('13', '77', '11', '80629', '61176', '13'), +('13', '77', '11', '46889', '59406', '13'), +('13', '78', '22', '21807', '0', '13'), +('13', '78', '22', '21805', '0', '13'), +('13', '78', '22', '12425', '0', '13'), +('13', '78', '22', '39342', '0', '13'), +('13', '78', '1', '69106', '79076', '13'), +('13', '78', '1', '51705', '75803', '13'), +('13', '78', '1', '80676', '69858', '13'), +('13', '78', '1', '80639', '63605', '13'), +('13', '78', '2', '39358', '59900', '13'), +('13', '78', '2', '83563', '41985', '13'), +('13', '78', '2', '39285', '41480', '13'), +('13', '78', '2', '70937', '38321', '13'), +('13', '78', '3', '83634', '75928', '13'), +('13', '78', '3', '80647', '63906', '13'), +('13', '78', '3', '71655', '59934', '13'), +('13', '78', '3', '83658', '57009', '13'), +('13', '78', '5', '39328', '77022', '13'), +('13', '78', '5', '80661', '67727', '13'), +('13', '78', '5', '80615', '61773', '13'), +('13', '78', '5', '46934', '60614', '13'), +('13', '78', '8', '70704', '81072', '13'), +('13', '78', '8', '39299', '75548', '13'), +('13', '78', '8', '80679', '70108', '13'), +('13', '78', '8', '71665', '64633', '13'), +('13', '78', '6', '39275', '75576', '13'), +('13', '78', '6', '83635', '75104', '13'), +('13', '78', '6', '80646', '63256', '13'), +('13', '78', '6', '46883', '60614', '13'), +('13', '78', '17', '83606', '59909', '13'), +('13', '78', '17', '70714', '54259', '13'), +('13', '78', '17', '71641', '53268', '13'), +('13', '78', '17', '68986', '48651', '13'), +('13', '78', '7', '71089', '41624', '13'), +('13', '78', '7', '83567', '41135', '13'), +('13', '78', '7', '70938', '37678', '13'), +('13', '78', '7', '47207', '35972', '13'), +('13', '78', '9', '51709', '78111', '13'), +('13', '78', '9', '46938', '61235', '13'), +('13', '78', '9', '39336', '47005', '13'), +('13', '78', '9', '83655', '44349', '13'), +('13', '78', '15', '51702', '74330', '13'), +('13', '78', '15', '79909', '73481', '13'), +('13', '78', '15', '80666', '70408', '13'), +('13', '78', '15', '80686', '69770', '13'), +('13', '78', '20', '39253', '76350', '13'), +('13', '78', '20', '83650', '75802', '13'), +('13', '78', '20', '39235', '72099', '13'), +('13', '78', '20', '80680', '70020', '13'), +('13', '78', '12', '83571', '74135', '13'), +('13', '78', '12', '69255', '53589', '13'), +('13', '78', '12', '70940', '44581', '13'), +('13', '78', '12', '71090', '42093', '13'), +('13', '78', '18', '70943', '62254', '13'), +('13', '78', '18', '46810', '46049', '13'), +('13', '78', '18', '83610', '45209', '13'), +('13', '78', '18', '68751', '40144', '13'), +('13', '78', '19', '70941', '53677', '13'), +('13', '78', '19', '69078', '46773', '13'), +('13', '78', '19', '47219', '45873', '13'), +('13', '78', '19', '83575', '42335', '13'), +('13', '78', '13', '80633', '64558', '13'), +('13', '78', '13', '80624', '59256', '13'), +('13', '78', '13', '47250', '51792', '13'), +('13', '78', '13', '46906', '49933', '13'), +('13', '78', '14', '80665', '64847', '13'), +('13', '78', '14', '71669', '63949', '13'), +('13', '78', '14', '80635', '63191', '13'), +('13', '78', '14', '80625', '59544', '13'), +('13', '78', '11', '80668', '69869', '13'), +('13', '78', '11', '46939', '61511', '13'), +('13', '78', '11', '80629', '61182', '13'), +('13', '78', '11', '46889', '59413', '13'), +('13', '79', '22', '21807', '0', '13'), +('13', '79', '22', '21805', '0', '13'), +('13', '79', '22', '12425', '0', '13'), +('13', '79', '22', '39342', '0', '13'), +('13', '79', '1', '69106', '77332', '13'), +('13', '79', '1', '51705', '73408', '13'), +('13', '79', '1', '80676', '69866', '13'), +('13', '79', '1', '80639', '63611', '13'), +('13', '79', '2', '39358', '58905', '13'), +('13', '79', '2', '83563', '41993', '13'), +('13', '79', '2', '39285', '41485', '13'), +('13', '79', '2', '70937', '38327', '13'), +('13', '79', '3', '83634', '73534', '13'), +('13', '79', '3', '80647', '63912', '13'), +('13', '79', '3', '71655', '57939', '13'), +('13', '79', '3', '46874', '56468', '13'), +('13', '79', '5', '39328', '74628', '13'), +('13', '79', '5', '80661', '67734', '13'), +('13', '79', '5', '80615', '61779', '13'), +('13', '79', '5', '46934', '60621', '13'), +('13', '79', '8', '70704', '79328', '13'), +('13', '79', '8', '39299', '73152', '13'), +('13', '79', '8', '80679', '70109', '13'), +('13', '79', '8', '80649', '63662', '13'), +('13', '79', '6', '39275', '73181', '13'), +('13', '79', '6', '83635', '72709', '13'), +('13', '79', '6', '80646', '63256', '13'), +('13', '79', '6', '46883', '60621', '13'), +('13', '79', '17', '83606', '58917', '13'), +('13', '79', '17', '70714', '52666', '13'), +('13', '79', '17', '71641', '51673', '13'), +('13', '79', '17', '68986', '46856', '13'), +('13', '79', '7', '83567', '41143', '13'), +('13', '79', '7', '71089', '40428', '13'), +('13', '79', '7', '70938', '37682', '13'), +('13', '79', '7', '47207', '35976', '13'), +('13', '79', '9', '51709', '75716', '13'), +('13', '79', '9', '46938', '61243', '13'), +('13', '79', '9', '39336', '47012', '13'), +('13', '79', '9', '83655', '44354', '13'), +('13', '79', '15', '79909', '73487', '13'), +('13', '79', '15', '51702', '71936', '13'), +('13', '79', '15', '80666', '70408', '13'), +('13', '79', '15', '80686', '69777', '13'), +('13', '79', '20', '39253', '73955', '13'), +('13', '79', '20', '83650', '73407', '13'), +('13', '79', '20', '80680', '70027', '13'), +('13', '79', '20', '39235', '69704', '13'), +('13', '79', '12', '83571', '71743', '13'), +('13', '79', '12', '69255', '51993', '13'), +('13', '79', '12', '70940', '44012', '13'), +('13', '79', '12', '71090', '40896', '13'), +('13', '79', '18', '70943', '60459', '13'), +('13', '79', '18', '46810', '46054', '13'), +('13', '79', '18', '83610', '45216', '13'), +('13', '79', '18', '68751', '38649', '13'), +('13', '79', '19', '70941', '51685', '13'), +('13', '79', '19', '69078', '44977', '13'), +('13', '79', '19', '47219', '44977', '13'), +('13', '79', '19', '83575', '42343', '13'), +('13', '79', '13', '80633', '64563', '13'), +('13', '79', '13', '80624', '59261', '13'), +('13', '79', '13', '47250', '50397', '13'), +('13', '79', '13', '46906', '49940', '13'), +('13', '79', '14', '80665', '64852', '13'), +('13', '79', '14', '80635', '63196', '13'), +('13', '79', '14', '71669', '61954', '13'), +('13', '79', '14', '80625', '59549', '13'), +('13', '79', '11', '80668', '69876', '13'), +('13', '79', '11', '46939', '61518', '13'), +('13', '79', '11', '80629', '61189', '13'), +('13', '79', '11', '46889', '59420', '13'), +('13', '80', '22', '21807', '0', '14'), +('13', '80', '22', '21805', '0', '14'), +('13', '80', '22', '12425', '0', '14'), +('13', '80', '22', '39342', '0', '14'), +('13', '80', '1', '102604', '93204', '14'), +('13', '80', '1', '102640', '90969', '14'), +('13', '80', '1', '102639', '90781', '14'), +('13', '80', '1', '102641', '90734', '14'), +('13', '80', '2', '102024', '62969', '14'), +('13', '80', '2', '39358', '57910', '14'), +('13', '80', '2', '102276', '57018', '14'), +('13', '80', '2', '83563', '42001', '14'), +('13', '80', '3', '102605', '98300', '14'), +('13', '80', '3', '102742', '87955', '14'), +('13', '80', '3', '102560', '84491', '14'), +('13', '80', '3', '102741', '81023', '14'), +('13', '80', '5', '102731', '101448', '14'), +('13', '80', '5', '102606', '96941', '14'), +('13', '80', '5', '102730', '87885', '14'), +('13', '80', '5', '102565', '84046', '14'), +('13', '80', '8', '102728', '99779', '14'), +('13', '80', '8', '102608', '98343', '14'), +('13', '80', '8', '102728', '84014', '14'), +('13', '80', '8', '70704', '77584', '14'), +('13', '80', '6', '102607', '98511', '14'), +('13', '80', '6', '102561', '84768', '14'), +('13', '80', '6', '39275', '70787', '14'), +('13', '80', '6', '83635', '70314', '14'), +('13', '80', '17', '102027', '66408', '14'), +('13', '80', '17', '102279', '60051', '14'), +('13', '80', '17', '83606', '57924', '14'), +('13', '80', '17', '70714', '51073', '14'), +('13', '80', '7', '102025', '63501', '14'), +('13', '80', '7', '102277', '57260', '14'), +('13', '80', '7', '83567', '41151', '14'), +('13', '80', '7', '71089', '39232', '14'), +('13', '80', '9', '67098', '159874', '14'), +('13', '80', '9', '51709', '73321', '14'), +('13', '80', '9', '46938', '61251', '14'), +('13', '80', '9', '102291', '53447', '14'), +('13', '80', '15', '102723', '100578', '14'), +('13', '80', '15', '102609', '94512', '14'), +('13', '80', '15', '102637', '91292', '14'), +('13', '80', '15', '102634', '91217', '14'), +('13', '80', '20', '102610', '98617', '14'), +('13', '80', '20', '102563', '84634', '14'), +('13', '80', '20', '39253', '71560', '14'), +('13', '80', '20', '83650', '71012', '14'), +('13', '80', '12', '83571', '69351', '14'), +('13', '80', '12', '102274', '54549', '14'), +('13', '80', '12', '69255', '50397', '14'), +('13', '80', '12', '70940', '43443', '14'), +('13', '80', '18', '102026', '64371', '14'), +('13', '80', '18', '70943', '58665', '14'), +('13', '80', '18', '102278', '57932', '14'), +('13', '80', '18', '46810', '46059', '14'), +('13', '80', '19', '102275', '54793', '14'), +('13', '80', '19', '70941', '49693', '14'), +('13', '80', '19', '47219', '44081', '14'), +('13', '80', '19', '69078', '43181', '14'), +('13', '80', '13', '102657', '89343', '14'), +('13', '80', '13', '102735', '87780', '14'), +('13', '80', '13', '102734', '80947', '14'), +('13', '80', '13', '102586', '78263', '14'), +('13', '80', '14', '102633', '96195', '14'), +('13', '80', '14', '102632', '96049', '14'), +('13', '80', '14', '102570', '84133', '14'), +('13', '80', '14', '80665', '64857', '14'), +('13', '80', '11', '102643', '93296', '14'), +('13', '80', '11', '80668', '69884', '14'), +('13', '80', '11', '46939', '61525', '14'), +('13', '80', '11', '80629', '61195', '14'), +('13', '81', '22', '21807', '0', '14'), +('13', '81', '22', '21805', '0', '14'), +('13', '81', '22', '12425', '0', '14'), +('13', '81', '22', '39342', '0', '14'), +('13', '81', '1', '102604', '93209', '14'), +('13', '81', '1', '102640', '90978', '14'), +('13', '81', '1', '102639', '90788', '14'), +('13', '81', '1', '102641', '90743', '14'), +('13', '81', '2', '102024', '62974', '14'), +('13', '81', '2', '102276', '57024', '14'), +('13', '81', '2', '39358', '56915', '14'), +('13', '81', '2', '83563', '42009', '14'), +('13', '81', '3', '102605', '98304', '14'), +('13', '81', '3', '102742', '87964', '14'), +('13', '81', '3', '102560', '84497', '14'), +('13', '81', '3', '102741', '81030', '14'), +('13', '81', '5', '102731', '101457', '14'), +('13', '81', '5', '102606', '96944', '14'), +('13', '81', '5', '102730', '87892', '14'), +('13', '81', '5', '102565', '84052', '14'), +('13', '81', '8', '102728', '99786', '14'), +('13', '81', '8', '102608', '98350', '14'), +('13', '81', '8', '102728', '84019', '14'), +('13', '81', '8', '70704', '75840', '14'), +('13', '81', '6', '102607', '98518', '14'), +('13', '81', '6', '102561', '84774', '14'), +('13', '81', '6', '39275', '68392', '14'), +('13', '81', '6', '83635', '67920', '14'), +('13', '81', '17', '102027', '66412', '14'), +('13', '81', '17', '102279', '60056', '14'), +('13', '81', '17', '83606', '56931', '14'), +('13', '81', '17', '70714', '49481', '14'), +('13', '81', '7', '102025', '63509', '14'), +('13', '81', '7', '102277', '57265', '14'), +('13', '81', '7', '83567', '41159', '14'), +('13', '81', '7', '71089', '38036', '14'), +('13', '81', '9', '67098', '161876', '14'), +('13', '81', '9', '51709', '70926', '14'), +('13', '81', '9', '46938', '61259', '14'), +('13', '81', '9', '102291', '53452', '14'), +('13', '81', '15', '102723', '100585', '14'), +('13', '81', '15', '102609', '94519', '14'), +('13', '81', '15', '102637', '91300', '14'), +('13', '81', '15', '102634', '91222', '14'), +('13', '81', '20', '102610', '98626', '14'), +('13', '81', '20', '102563', '84636', '14'), +('13', '81', '20', '80680', '70042', '14'), +('13', '81', '20', '39253', '69165', '14'), +('13', '81', '12', '83571', '66959', '14'), +('13', '81', '12', '102274', '54555', '14'), +('13', '81', '12', '69255', '48801', '14'), +('13', '81', '12', '70940', '42874', '14'), +('13', '81', '18', '102026', '64373', '14'), +('13', '81', '18', '102278', '57941', '14'), +('13', '81', '18', '70943', '56870', '14'), +('13', '81', '18', '46810', '46064', '14'), +('13', '81', '19', '102275', '54794', '14'), +('13', '81', '19', '70941', '47701', '14'), +('13', '81', '19', '47219', '43185', '14'), +('13', '81', '19', '83575', '42359', '14'), +('13', '81', '13', '102657', '89347', '14'), +('13', '81', '13', '102735', '87787', '14'), +('13', '81', '13', '102734', '80953', '14'), +('13', '81', '13', '102586', '78265', '14'), +('13', '81', '14', '102633', '96201', '14'), +('13', '81', '14', '102632', '96055', '14'), +('13', '81', '14', '102570', '84141', '14'), +('13', '81', '14', '80665', '64862', '14'), +('13', '81', '11', '102643', '93301', '14'), +('13', '81', '11', '80668', '69891', '14'), +('13', '81', '11', '46939', '61533', '14'), +('13', '81', '11', '80629', '61201', '14'), +('13', '82', '22', '21807', '0', '14'), +('13', '82', '22', '21805', '0', '14'), +('13', '82', '22', '12425', '0', '14'), +('13', '82', '22', '39342', '0', '14'), +('13', '82', '1', '102604', '93215', '14'), +('13', '82', '1', '102640', '90988', '14'), +('13', '82', '1', '102639', '90795', '14'), +('13', '82', '1', '102641', '90753', '14'), +('13', '82', '2', '102024', '62980', '14'), +('13', '82', '2', '102276', '57029', '14'), +('13', '82', '2', '39358', '55920', '14'), +('13', '82', '2', '83563', '42017', '14'), +('13', '82', '3', '102605', '98308', '14'), +('13', '82', '3', '102742', '87972', '14'), +('13', '82', '3', '102560', '84503', '14'), +('13', '82', '3', '102741', '81037', '14'), +('13', '82', '5', '102731', '101466', '14'), +('13', '82', '5', '102606', '96947', '14'), +('13', '82', '5', '102730', '87900', '14'), +('13', '82', '5', '102565', '84059', '14'), +('13', '82', '8', '102728', '99793', '14'), +('13', '82', '8', '102608', '98358', '14'), +('13', '82', '8', '102728', '84024', '14'), +('13', '82', '8', '70704', '74096', '14'), +('13', '82', '6', '102607', '98525', '14'), +('13', '82', '6', '102561', '84781', '14'), +('13', '82', '6', '39275', '65997', '14'), +('13', '82', '6', '83635', '65525', '14'), +('13', '82', '17', '102027', '66416', '14'), +('13', '82', '17', '102279', '60061', '14'), +('13', '82', '17', '83606', '55938', '14'), +('13', '82', '17', '70714', '47888', '14'), +('13', '82', '7', '102025', '63516', '14'), +('13', '82', '7', '102277', '57270', '14'), +('13', '82', '7', '83567', '41167', '14'), +('13', '82', '7', '70938', '37695', '14'), +('13', '82', '9', '67098', '163878', '14'), +('13', '82', '9', '51709', '68531', '14'), +('13', '82', '9', '46938', '61267', '14'), +('13', '82', '9', '102291', '53457', '14'), +('13', '82', '15', '102723', '100592', '14'), +('13', '82', '15', '102609', '94526', '14'), +('13', '82', '15', '102637', '91309', '14'), +('13', '82', '15', '102634', '91227', '14'), +('13', '82', '20', '102610', '98634', '14'), +('13', '82', '20', '102563', '84639', '14'), +('13', '82', '20', '80680', '70049', '14'), +('13', '82', '20', '39253', '66770', '14'), +('13', '82', '12', '83571', '64568', '14'), +('13', '82', '12', '102274', '54560', '14'), +('13', '82', '12', '69255', '47204', '14'), +('13', '82', '12', '70940', '42305', '14'), +('13', '82', '18', '102026', '64375', '14'), +('13', '82', '18', '102278', '57949', '14'), +('13', '82', '18', '70943', '55075', '14'), +('13', '82', '18', '46810', '46069', '14'), +('13', '82', '19', '102275', '54796', '14'), +('13', '82', '19', '70941', '45709', '14'), +('13', '82', '19', '83575', '42368', '14'), +('13', '82', '19', '47219', '42289', '14'), +('13', '82', '13', '102657', '89351', '14'), +('13', '82', '13', '102735', '87794', '14'), +('13', '82', '13', '102734', '80959', '14'), +('13', '82', '13', '102586', '78267', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '82', '14', '102633', '96207', '14'), +('13', '82', '14', '102632', '96061', '14'), +('13', '82', '14', '102570', '84150', '14'), +('13', '82', '14', '80665', '64867', '14'), +('13', '82', '11', '102643', '93306', '14'), +('13', '82', '11', '80668', '69898', '14'), +('13', '82', '11', '46939', '61540', '14'), +('13', '82', '11', '80629', '61207', '14'), +('13', '83', '22', '21807', '0', '14'), +('13', '83', '22', '21805', '0', '14'), +('13', '83', '22', '12425', '0', '14'), +('13', '83', '22', '39342', '0', '14'), +('13', '83', '1', '102604', '93220', '14'), +('13', '83', '1', '102640', '90997', '14'), +('13', '83', '1', '102639', '90802', '14'), +('13', '83', '1', '102641', '90762', '14'), +('13', '83', '2', '102024', '62986', '14'), +('13', '83', '2', '102276', '57034', '14'), +('13', '83', '2', '39358', '54925', '14'), +('13', '83', '2', '83563', '42025', '14'), +('13', '83', '3', '102605', '98312', '14'), +('13', '83', '3', '102742', '87980', '14'), +('13', '83', '3', '102560', '84509', '14'), +('13', '83', '3', '102741', '81045', '14'), +('13', '83', '5', '102731', '101475', '14'), +('13', '83', '5', '102606', '96950', '14'), +('13', '83', '5', '102730', '87907', '14'), +('13', '83', '5', '102565', '84065', '14'), +('13', '83', '8', '102728', '99800', '14'), +('13', '83', '8', '102608', '98365', '14'), +('13', '83', '8', '102728', '84029', '14'), +('13', '83', '8', '70704', '72352', '14'), +('13', '83', '6', '102607', '98532', '14'), +('13', '83', '6', '102561', '84787', '14'), +('13', '83', '6', '39275', '63603', '14'), +('13', '83', '6', '80646', '63257', '14'), +('13', '83', '17', '102027', '66421', '14'), +('13', '83', '17', '102279', '60066', '14'), +('13', '83', '17', '83606', '54945', '14'), +('13', '83', '17', '70714', '46295', '14'), +('13', '83', '7', '102025', '63524', '14'), +('13', '83', '7', '102277', '57275', '14'), +('13', '83', '7', '83567', '41176', '14'), +('13', '83', '7', '70938', '37699', '14'), +('13', '83', '9', '67098', '165881', '14'), +('13', '83', '9', '51709', '66136', '14'), +('13', '83', '9', '46938', '61275', '14'), +('13', '83', '9', '102291', '53462', '14'), +('13', '83', '15', '102723', '100599', '14'), +('13', '83', '15', '102609', '94533', '14'), +('13', '83', '15', '102637', '91317', '14'), +('13', '83', '15', '102634', '91232', '14'), +('13', '83', '20', '102610', '98643', '14'), +('13', '83', '20', '102563', '84641', '14'), +('13', '83', '20', '80680', '70057', '14'), +('13', '83', '20', '39253', '64376', '14'), +('13', '83', '12', '83571', '62176', '14'), +('13', '83', '12', '102274', '54566', '14'), +('13', '83', '12', '69255', '45608', '14'), +('13', '83', '12', '70940', '41736', '14'), +('13', '83', '18', '102026', '64378', '14'), +('13', '83', '18', '102278', '57958', '14'), +('13', '83', '18', '70943', '53280', '14'), +('13', '83', '18', '46810', '46074', '14'), +('13', '83', '19', '102275', '54798', '14'), +('13', '83', '19', '70941', '43717', '14'), +('13', '83', '19', '83575', '42376', '14'), +('13', '83', '19', '47219', '41393', '14'), +('13', '83', '13', '102657', '89355', '14'), +('13', '83', '13', '102735', '87802', '14'), +('13', '83', '13', '102734', '80965', '14'), +('13', '83', '13', '102586', '78268', '14'), +('13', '83', '14', '102633', '96214', '14'), +('13', '83', '14', '102632', '96067', '14'), +('13', '83', '14', '102570', '84158', '14'), +('13', '83', '14', '80665', '64872', '14'), +('13', '83', '11', '102643', '93311', '14'), +('13', '83', '11', '80668', '69906', '14'), +('13', '83', '11', '46939', '61547', '14'), +('13', '83', '11', '80629', '61213', '14'), +('13', '84', '22', '21807', '0', '14'), +('13', '84', '22', '21805', '0', '14'), +('13', '84', '22', '12425', '0', '14'), +('13', '84', '22', '39342', '0', '14'), +('13', '84', '1', '102604', '93226', '14'), +('13', '84', '1', '102640', '91007', '14'), +('13', '84', '1', '102639', '90809', '14'), +('13', '84', '1', '102641', '90771', '14'), +('13', '84', '2', '102024', '62992', '14'), +('13', '84', '2', '102276', '57039', '14'), +('13', '84', '2', '39358', '53930', '14'), +('13', '84', '2', '83563', '42033', '14'), +('13', '84', '3', '102605', '98317', '14'), +('13', '84', '3', '102742', '87988', '14'), +('13', '84', '3', '102560', '84515', '14'), +('13', '84', '3', '102741', '81052', '14'), +('13', '84', '5', '102731', '101484', '14'), +('13', '84', '5', '102606', '96953', '14'), +('13', '84', '5', '102730', '87914', '14'), +('13', '84', '5', '102565', '84071', '14'), +('13', '84', '8', '102728', '99807', '14'), +('13', '84', '8', '102608', '98372', '14'), +('13', '84', '8', '102728', '84034', '14'), +('13', '84', '8', '70704', '70608', '14'), +('13', '84', '6', '102607', '98539', '14'), +('13', '84', '6', '102561', '84793', '14'), +('13', '84', '6', '80646', '63257', '14'), +('13', '84', '6', '39275', '61208', '14'), +('13', '84', '17', '102027', '66425', '14'), +('13', '84', '17', '102279', '60070', '14'), +('13', '84', '17', '83606', '53952', '14'), +('13', '84', '17', '70714', '44702', '14'), +('13', '84', '7', '102025', '63531', '14'), +('13', '84', '7', '102277', '57280', '14'), +('13', '84', '7', '83567', '41184', '14'), +('13', '84', '7', '70938', '37703', '14'), +('13', '84', '9', '67098', '167884', '14'), +('13', '84', '9', '51709', '63741', '14'), +('13', '84', '9', '46938', '61284', '14'), +('13', '84', '9', '102291', '53467', '14'), +('13', '84', '15', '102723', '100606', '14'), +('13', '84', '15', '102609', '94540', '14'), +('13', '84', '15', '102637', '91326', '14'), +('13', '84', '15', '102634', '91237', '14'), +('13', '84', '20', '102610', '98652', '14'), +('13', '84', '20', '102563', '84643', '14'), +('13', '84', '20', '80680', '70064', '14'), +('13', '84', '20', '39253', '61981', '14'), +('13', '84', '12', '83571', '59784', '14'), +('13', '84', '12', '102274', '54571', '14'), +('13', '84', '12', '69255', '44012', '14'), +('13', '84', '12', '70940', '41167', '14'), +('13', '84', '18', '102026', '64380', '14'), +('13', '84', '18', '102278', '57966', '14'), +('13', '84', '18', '70943', '51485', '14'), +('13', '84', '18', '46810', '46080', '14'), +('13', '84', '19', '102275', '54799', '14'), +('13', '84', '19', '83575', '42384', '14'), +('13', '84', '19', '70941', '41725', '14'), +('13', '84', '19', '47219', '40498', '14'), +('13', '84', '13', '102657', '89360', '14'), +('13', '84', '13', '102735', '87809', '14'), +('13', '84', '13', '102734', '80972', '14'), +('13', '84', '13', '102586', '78270', '14'), +('13', '84', '14', '102633', '96220', '14'), +('13', '84', '14', '102632', '96074', '14'), +('13', '84', '14', '102570', '84167', '14'), +('13', '84', '14', '80665', '64877', '14'), +('13', '84', '11', '102643', '93316', '14'), +('13', '84', '11', '80668', '69913', '14'), +('13', '84', '11', '46939', '61554', '14'), +('13', '84', '11', '80629', '61219', '14'), +('13', '85', '22', '12425', '0', '16'), +('13', '85', '22', '21807', '0', '16'), +('13', '85', '22', '39342', '0', '16'), +('13', '85', '22', '23597', '0', '16'), +('13', '85', '1', '111311', '178778', '16'), +('13', '85', '1', '111307', '176604', '16'), +('13', '85', '1', '111306', '176448', '16'), +('13', '85', '1', '111304', '176135', '16'), +('13', '85', '2', '62985', '109824', '16'), +('13', '85', '2', '94056', '109725', '16'), +('13', '85', '2', '104424', '95936', '16'), +('13', '85', '2', '54845', '70987', '16'), +('13', '85', '3', '111314', '177107', '16'), +('13', '85', '3', '111316', '175362', '16'), +('13', '85', '3', '111315', '174477', '16'), +('13', '85', '3', '111013', '155256', '16'), +('13', '85', '5', '111319', '176588', '16'), +('13', '85', '5', '111321', '175825', '16'), +('13', '85', '5', '111318', '173917', '16'), +('13', '85', '5', '111018', '154738', '16'), +('13', '85', '8', '111332', '177220', '16'), +('13', '85', '8', '111329', '176202', '16'), +('13', '85', '8', '111331', '172605', '16'), +('13', '85', '8', '111031', '155470', '16'), +('13', '85', '6', '111323', '177089', '16'), +('13', '85', '6', '111325', '175621', '16'), +('13', '85', '6', '111326', '175617', '16'), +('13', '85', '6', '111022', '155238', '16'), +('13', '85', '17', '56043', '117674', '16'), +('13', '85', '17', '56084', '114053', '16'), +('13', '85', '17', '104427', '99634', '16'), +('13', '85', '17', '54854', '75049', '16'), +('13', '85', '7', '56080', '109926', '16'), +('13', '85', '7', '56040', '109172', '16'), +('13', '85', '7', '104425', '95424', '16'), +('13', '85', '7', '54849', '70172', '16'), +('13', '85', '9', '67098', '169886', '16'), +('13', '85', '9', '56070', '106307', '16'), +('13', '85', '9', '56031', '106168', '16'), +('13', '85', '9', '62984', '106049', '16'), +('13', '85', '15', '111349', '179039', '16'), +('13', '85', '15', '111344', '177360', '16'), +('13', '85', '15', '111340', '176958', '16'), +('13', '85', '15', '111346', '176672', '16'), +('13', '85', '20', '111356', '177208', '16'), +('13', '85', '20', '111352', '176305', '16'), +('13', '85', '20', '111351', '173737', '16'), +('13', '85', '20', '111054', '155357', '16'), +('13', '85', '12', '56035', '108247', '16'), +('13', '85', '12', '56074', '107046', '16'), +('13', '85', '12', '104422', '93227', '16'), +('13', '85', '12', '49656', '70124', '16'), +('13', '85', '18', '56041', '114103', '16'), +('13', '85', '18', '62986', '112197', '16'), +('13', '85', '18', '104426', '96976', '16'), +('13', '85', '18', '54851', '71408', '16'), +('13', '85', '19', '62990', '110629', '16'), +('13', '85', '19', '81763', '110613', '16'), +('13', '85', '19', '56037', '109907', '16'), +('13', '85', '19', '56075', '109895', '16'), +('13', '85', '13', '111521', '183005', '16'), +('13', '85', '13', '111524', '173637', '16'), +('13', '85', '13', '111519', '173606', '16'), +('13', '85', '13', '111221', '162151', '16'), +('13', '85', '14', '111537', '177245', '16'), +('13', '85', '14', '111535', '175026', '16'), +('13', '85', '14', '111237', '155394', '16'), +('13', '85', '14', '111235', '153274', '16'), +('13', '85', '11', '111335', '176252', '16'), +('13', '85', '11', '111337', '176180', '16'), +('13', '85', '11', '111338', '172643', '16'), +('13', '85', '11', '111034', '154501', '16'), +('13', '85', '22', '21807', '0', '15'), +('13', '85', '22', '21805', '0', '15'), +('13', '85', '22', '12425', '0', '15'), +('13', '85', '22', '7867', '0', '15'), +('13', '85', '1', '107040', '133880', '15'), +('13', '85', '1', '107039', '131355', '15'), +('13', '85', '1', '107053', '129399', '15'), +('13', '85', '1', '107052', '127931', '15'), +('13', '85', '2', '62985', '109824', '15'), +('13', '85', '2', '94056', '109725', '15'), +('13', '85', '2', '104424', '95936', '15'), +('13', '85', '2', '54845', '70987', '15'), +('13', '85', '3', '107041', '135284', '15'), +('13', '85', '3', '107055', '128846', '15'), +('13', '85', '3', '106828', '125822', '15'), +('13', '85', '3', '106841', '122174', '15'), +('13', '85', '5', '107042', '134028', '15'), +('13', '85', '5', '107056', '128579', '15'), +('13', '85', '5', '106829', '125688', '15'), +('13', '85', '5', '56090', '111357', '15'), +('13', '85', '8', '107044', '135322', '15'), +('13', '85', '8', '107058', '130226', '15'), +('13', '85', '8', '106831', '126547', '15'), +('13', '85', '8', '106844', '121544', '15'), +('13', '85', '6', '107043', '135135', '15'), +('13', '85', '6', '107057', '130089', '15'), +('13', '85', '6', '106830', '126081', '15'), +('13', '85', '6', '106843', '121732', '15'), +('13', '85', '17', '56043', '117674', '15'), +('13', '85', '17', '56084', '114053', '15'), +('13', '85', '17', '104427', '99634', '15'), +('13', '85', '17', '54854', '75049', '15'), +('13', '85', '7', '56080', '109926', '15'), +('13', '85', '7', '56040', '109172', '15'), +('13', '85', '7', '104425', '95424', '15'), +('13', '85', '7', '54849', '70172', '15'), +('13', '85', '9', '67098', '169886', '15'), +('13', '85', '9', '56070', '106307', '15'), +('13', '85', '9', '56031', '106168', '15'), +('13', '85', '9', '62984', '106049', '15'), +('13', '85', '15', '107046', '133698', '15'), +('13', '85', '15', '107047', '133263', '15'), +('13', '85', '15', '107061', '128490', '15'), +('13', '85', '15', '107050', '127056', '15'), +('13', '85', '20', '107048', '135414', '15'), +('13', '85', '20', '107059', '131349', '15'), +('13', '85', '20', '106834', '127367', '15'), +('13', '85', '20', '106845', '123145', '15'), +('13', '85', '12', '56035', '108247', '15'), +('13', '85', '12', '56074', '107046', '15'), +('13', '85', '12', '104422', '93227', '15'), +('13', '85', '12', '83571', '57392', '15'), +('13', '85', '18', '56041', '114103', '15'), +('13', '85', '18', '62986', '112197', '15'), +('13', '85', '18', '104426', '96976', '15'), +('13', '85', '18', '54851', '71408', '15'), +('13', '85', '19', '62990', '110629', '15'), +('13', '85', '19', '81763', '110613', '15'), +('13', '85', '19', '56037', '109907', '15'), +('13', '85', '19', '56075', '109895', '15'), +('13', '85', '13', '106864', '126180', '15'), +('13', '85', '13', '106861', '124705', '15'), +('13', '85', '13', '106764', '113218', '15'), +('13', '85', '13', '62932', '112150', '15'), +('13', '85', '14', '107063', '131298', '15'), +('13', '85', '14', '107065', '129524', '15'), +('13', '85', '14', '106850', '123834', '15'), +('13', '85', '14', '106852', '122146', '15'), +('13', '85', '11', '107045', '133237', '15'), +('13', '85', '11', '106832', '123679', '15'), +('13', '85', '11', '106739', '110891', '15'), +('13', '85', '11', '56099', '108739', '15'), +('13', '86', '22', '12425', '0', '16'), +('13', '86', '22', '21807', '0', '16'), +('13', '86', '22', '39342', '0', '16'), +('13', '86', '22', '23597', '0', '16'), +('13', '86', '1', '111311', '178782', '16'), +('13', '86', '1', '111307', '176612', '16'), +('13', '86', '1', '111306', '176454', '16'), +('13', '86', '1', '111304', '176140', '16'), +('13', '86', '2', '62985', '109828', '16'), +('13', '86', '2', '94056', '109728', '16'), +('13', '86', '2', '104424', '95944', '16'), +('13', '86', '2', '54845', '70993', '16'), +('13', '86', '3', '111314', '177113', '16'), +('13', '86', '3', '111316', '175368', '16'), +('13', '86', '3', '111315', '174483', '16'), +('13', '86', '3', '111013', '155263', '16'), +('13', '86', '5', '111319', '176596', '16'), +('13', '86', '5', '111321', '175831', '16'), +('13', '86', '5', '111318', '173925', '16'), +('13', '86', '5', '111018', '154745', '16'), +('13', '86', '8', '111332', '177227', '16'), +('13', '86', '8', '111329', '176210', '16'), +('13', '86', '8', '111331', '172611', '16'), +('13', '86', '8', '111031', '155476', '16'), +('13', '86', '6', '111323', '177095', '16'), +('13', '86', '6', '111325', '175626', '16'), +('13', '86', '6', '111326', '175625', '16'), +('13', '86', '6', '111022', '155244', '16'), +('13', '86', '17', '56043', '117680', '16'), +('13', '86', '17', '56084', '114059', '16'), +('13', '86', '17', '104427', '99641', '16'), +('13', '86', '17', '54854', '75053', '16'), +('13', '86', '7', '56080', '109933', '16'), +('13', '86', '7', '56040', '109182', '16'), +('13', '86', '7', '104425', '95429', '16'), +('13', '86', '7', '54849', '70175', '16'), +('13', '86', '9', '67098', '171889', '16'), +('13', '86', '9', '56070', '106312', '16'), +('13', '86', '9', '56031', '106178', '16'), +('13', '86', '9', '62984', '106053', '16'), +('13', '86', '15', '111349', '179047', '16'), +('13', '86', '15', '111344', '177364', '16'), +('13', '86', '15', '111340', '176963', '16'), +('13', '86', '15', '111346', '176678', '16'), +('13', '86', '20', '111356', '177214', '16'), +('13', '86', '20', '111352', '176310', '16'), +('13', '86', '20', '111351', '173744', '16'), +('13', '86', '20', '111054', '155363', '16'), +('13', '86', '12', '56035', '108256', '16'), +('13', '86', '12', '56074', '107052', '16'), +('13', '86', '12', '104422', '93235', '16'), +('13', '86', '12', '49656', '70125', '16'), +('13', '86', '18', '56041', '114112', '16'), +('13', '86', '18', '62986', '112202', '16'), +('13', '86', '18', '104426', '96978', '16'), +('13', '86', '18', '54851', '71412', '16'), +('13', '86', '19', '62990', '110637', '16'), +('13', '86', '19', '81763', '110623', '16'), +('13', '86', '19', '56037', '109909', '16'), +('13', '86', '19', '56075', '109899', '16'), +('13', '86', '13', '111521', '183011', '16'), +('13', '86', '13', '111524', '173643', '16'), +('13', '86', '13', '111519', '173613', '16'), +('13', '86', '13', '111221', '162157', '16'), +('13', '86', '14', '111537', '177250', '16'), +('13', '86', '14', '111535', '175029', '16'), +('13', '86', '14', '111237', '155399', '16'), +('13', '86', '14', '111235', '153278', '16'), +('13', '86', '11', '111335', '176258', '16'), +('13', '86', '11', '111337', '176186', '16'), +('13', '86', '11', '111338', '172649', '16'), +('13', '86', '11', '111034', '154507', '16'), +('13', '87', '22', '12425', '0', '16'), +('13', '87', '22', '21807', '0', '16'), +('13', '87', '22', '39342', '0', '16'), +('13', '87', '22', '23597', '0', '16'), +('13', '87', '1', '111311', '178786', '16'), +('13', '87', '1', '111307', '176620', '16'), +('13', '87', '1', '111306', '176459', '16'), +('13', '87', '1', '111304', '176145', '16'), +('13', '87', '2', '62985', '109832', '16'), +('13', '87', '2', '94056', '109731', '16'), +('13', '87', '2', '104424', '95952', '16'), +('13', '87', '2', '54845', '70998', '16'), +('13', '87', '3', '111314', '177120', '16'), +('13', '87', '3', '111316', '175374', '16'), +('13', '87', '3', '111315', '174489', '16'), +('13', '87', '3', '111013', '155269', '16'), +('13', '87', '5', '111319', '176603', '16'), +('13', '87', '5', '111321', '175836', '16'), +('13', '87', '5', '111318', '173932', '16'), +('13', '87', '5', '111018', '154752', '16'), +('13', '87', '8', '111332', '177234', '16'), +('13', '87', '8', '111329', '176217', '16'), +('13', '87', '8', '111331', '172616', '16'), +('13', '87', '8', '111031', '155483', '16'), +('13', '87', '6', '111323', '177100', '16'), +('13', '87', '6', '111326', '175632', '16'), +('13', '87', '6', '111325', '175630', '16'), +('13', '87', '6', '111022', '155250', '16'), +('13', '87', '17', '56043', '117685', '16'), +('13', '87', '17', '56084', '114065', '16'), +('13', '87', '17', '104427', '99647', '16'), +('13', '87', '17', '54854', '75058', '16'), +('13', '87', '7', '56080', '109940', '16'), +('13', '87', '7', '56040', '109192', '16'), +('13', '87', '7', '104425', '95435', '16'), +('13', '87', '7', '54849', '70179', '16'), +('13', '87', '9', '67098', '173892', '16'), +('13', '87', '9', '56070', '106318', '16'), +('13', '87', '9', '56031', '106188', '16'), +('13', '87', '9', '62984', '106058', '16'), +('13', '87', '15', '111349', '179055', '16'), +('13', '87', '15', '111344', '177369', '16'), +('13', '87', '15', '111340', '176969', '16'), +('13', '87', '15', '111346', '176684', '16'), +('13', '87', '20', '111356', '177220', '16'), +('13', '87', '20', '111352', '176315', '16'), +('13', '87', '20', '111351', '173752', '16'), +('13', '87', '20', '111054', '155370', '16'), +('13', '87', '12', '56035', '108266', '16'), +('13', '87', '12', '56074', '107058', '16'), +('13', '87', '12', '104422', '93243', '16'), +('13', '87', '12', '49656', '70125', '16'), +('13', '87', '18', '56041', '114120', '16'), +('13', '87', '18', '62986', '112207', '16'), +('13', '87', '18', '104426', '96980', '16'), +('13', '87', '18', '54851', '71416', '16'), +('13', '87', '19', '62990', '110644', '16'), +('13', '87', '19', '81763', '110633', '16'), +('13', '87', '19', '56037', '109912', '16'), +('13', '87', '19', '56075', '109904', '16'), +('13', '87', '13', '111521', '183016', '16'), +('13', '87', '13', '111524', '173650', '16'), +('13', '87', '13', '111519', '173620', '16'), +('13', '87', '13', '111221', '162163', '16'), +('13', '87', '14', '111537', '177255', '16'), +('13', '87', '14', '111535', '175033', '16'), +('13', '87', '14', '111237', '155404', '16'), +('13', '87', '14', '111235', '153282', '16'), +('13', '87', '11', '111335', '176264', '16'), +('13', '87', '11', '111337', '176192', '16'), +('13', '87', '11', '111338', '172655', '16'), +('13', '87', '11', '111034', '154513', '16'), +('13', '88', '22', '12425', '0', '16'), +('13', '88', '22', '21807', '0', '16'), +('13', '88', '22', '39342', '0', '16'), +('13', '88', '22', '23597', '0', '16'), +('13', '88', '1', '111311', '178791', '16'), +('13', '88', '1', '111307', '176629', '16'), +('13', '88', '1', '111306', '176465', '16'), +('13', '88', '1', '111304', '176150', '16'), +('13', '88', '2', '62985', '109835', '16'), +('13', '88', '2', '94056', '109735', '16'), +('13', '88', '2', '104424', '95960', '16'), +('13', '88', '2', '54845', '71004', '16'), +('13', '88', '3', '111314', '177127', '16'), +('13', '88', '3', '111316', '175380', '16'), +('13', '88', '3', '111315', '174496', '16'), +('13', '88', '3', '111013', '155276', '16'), +('13', '88', '5', '111319', '176610', '16'), +('13', '88', '5', '111321', '175841', '16'), +('13', '88', '5', '111318', '173940', '16'), +('13', '88', '5', '111018', '154759', '16'), +('13', '88', '8', '111332', '177240', '16'), +('13', '88', '8', '111329', '176225', '16'), +('13', '88', '8', '111331', '172622', '16'), +('13', '88', '8', '111031', '155490', '16'), +('13', '88', '6', '111323', '177106', '16'), +('13', '88', '6', '111326', '175640', '16'), +('13', '88', '6', '111325', '175635', '16'), +('13', '88', '6', '111022', '155256', '16'), +('13', '88', '17', '56043', '117691', '16'), +('13', '88', '17', '56084', '114071', '16'), +('13', '88', '17', '104427', '99653', '16'), +('13', '88', '17', '54854', '75063', '16'), +('13', '88', '7', '56080', '109947', '16'), +('13', '88', '7', '56040', '109203', '16'), +('13', '88', '7', '104425', '95440', '16'), +('13', '88', '7', '54849', '70182', '16'), +('13', '88', '9', '67098', '175895', '16'), +('13', '88', '9', '56070', '106323', '16'), +('13', '88', '9', '56031', '106198', '16'), +('13', '88', '9', '62984', '106063', '16'), +('13', '88', '15', '111349', '179063', '16'), +('13', '88', '15', '111344', '177374', '16'), +('13', '88', '15', '111340', '176974', '16'), +('13', '88', '15', '111346', '176690', '16'), +('13', '88', '20', '111356', '177226', '16'), +('13', '88', '20', '111352', '176321', '16'), +('13', '88', '20', '111351', '173759', '16'), +('13', '88', '20', '111054', '155376', '16'), +('13', '88', '12', '56035', '108275', '16'), +('13', '88', '12', '56074', '107064', '16'), +('13', '88', '12', '104422', '93251', '16'), +('13', '88', '12', '49656', '70126', '16'), +('13', '88', '18', '56041', '114129', '16'), +('13', '88', '18', '62986', '112212', '16'), +('13', '88', '18', '104426', '96981', '16'), +('13', '88', '18', '54851', '71420', '16'), +('13', '88', '19', '62990', '110652', '16'), +('13', '88', '19', '81763', '110643', '16'), +('13', '88', '19', '56037', '109914', '16'), +('13', '88', '19', '56075', '109909', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '88', '13', '111521', '183021', '16'), +('13', '88', '13', '111524', '173657', '16'), +('13', '88', '13', '111519', '173628', '16'), +('13', '88', '13', '111221', '162169', '16'), +('13', '88', '14', '111537', '177260', '16'), +('13', '88', '14', '111535', '175037', '16'), +('13', '88', '14', '111237', '155409', '16'), +('13', '88', '14', '111235', '153286', '16'), +('13', '88', '11', '111335', '176269', '16'), +('13', '88', '11', '111337', '176198', '16'), +('13', '88', '11', '111338', '172661', '16'), +('13', '88', '11', '111034', '154519', '16'), +('13', '89', '22', '12425', '0', '16'), +('13', '89', '22', '21807', '0', '16'), +('13', '89', '22', '39342', '0', '16'), +('13', '89', '22', '23597', '0', '16'), +('13', '89', '1', '111311', '178795', '16'), +('13', '89', '1', '111307', '176637', '16'), +('13', '89', '1', '111306', '176471', '16'), +('13', '89', '1', '111304', '176155', '16'), +('13', '89', '2', '62985', '109839', '16'), +('13', '89', '2', '94056', '109738', '16'), +('13', '89', '2', '104424', '95968', '16'), +('13', '89', '2', '54845', '71010', '16'), +('13', '89', '3', '111314', '177133', '16'), +('13', '89', '3', '111316', '175386', '16'), +('13', '89', '3', '111315', '174502', '16'), +('13', '89', '3', '111013', '155282', '16'), +('13', '89', '5', '111319', '176617', '16'), +('13', '89', '5', '111321', '175846', '16'), +('13', '89', '5', '111318', '173947', '16'), +('13', '89', '5', '111018', '154767', '16'), +('13', '89', '8', '111332', '177247', '16'), +('13', '89', '8', '111329', '176232', '16'), +('13', '89', '8', '111331', '172627', '16'), +('13', '89', '8', '111031', '155496', '16'), +('13', '89', '6', '111323', '177112', '16'), +('13', '89', '6', '111326', '175648', '16'), +('13', '89', '6', '111325', '175640', '16'), +('13', '89', '6', '111022', '155261', '16'), +('13', '89', '17', '56043', '117697', '16'), +('13', '89', '17', '56084', '114077', '16'), +('13', '89', '17', '104427', '99659', '16'), +('13', '89', '17', '54854', '75067', '16'), +('13', '89', '7', '56080', '109955', '16'), +('13', '89', '7', '56040', '109213', '16'), +('13', '89', '7', '104425', '95446', '16'), +('13', '89', '7', '54849', '70185', '16'), +('13', '89', '9', '67098', '177898', '16'), +('13', '89', '9', '56070', '106328', '16'), +('13', '89', '9', '56031', '106209', '16'), +('13', '89', '9', '62984', '106068', '16'), +('13', '89', '15', '111349', '179071', '16'), +('13', '89', '15', '111344', '177378', '16'), +('13', '89', '15', '111340', '176980', '16'), +('13', '89', '15', '111346', '176696', '16'), +('13', '89', '20', '111356', '177232', '16'), +('13', '89', '20', '111352', '176326', '16'), +('13', '89', '20', '111351', '173767', '16'), +('13', '89', '20', '111054', '155382', '16'), +('13', '89', '12', '56035', '108285', '16'), +('13', '89', '12', '56074', '107070', '16'), +('13', '89', '12', '104422', '93259', '16'), +('13', '89', '12', '49656', '70127', '16'), +('13', '89', '18', '56041', '114137', '16'), +('13', '89', '18', '62986', '112217', '16'), +('13', '89', '18', '104426', '96983', '16'), +('13', '89', '18', '54851', '71424', '16'), +('13', '89', '19', '62990', '110659', '16'), +('13', '89', '19', '81763', '110653', '16'), +('13', '89', '19', '56037', '109917', '16'), +('13', '89', '19', '56075', '109913', '16'), +('13', '89', '13', '111521', '183027', '16'), +('13', '89', '13', '111524', '173663', '16'), +('13', '89', '13', '111519', '173635', '16'), +('13', '89', '13', '111221', '162175', '16'), +('13', '89', '14', '111537', '177266', '16'), +('13', '89', '14', '111535', '175041', '16'), +('13', '89', '14', '111237', '155414', '16'), +('13', '89', '14', '111235', '153290', '16'), +('13', '89', '11', '111335', '176275', '16'), +('13', '89', '11', '111337', '176204', '16'), +('13', '89', '11', '111338', '172667', '16'), +('13', '89', '11', '111034', '154525', '16'), +('13', '90', '22', '12425', '0', '17'), +('13', '90', '22', '21807', '0', '17'), +('13', '90', '22', '39342', '0', '17'), +('13', '90', '22', '23597', '0', '17'), +('13', '90', '1', '111311', '178799', '17'), +('13', '90', '1', '111307', '176645', '17'), +('13', '90', '1', '111306', '176476', '17'), +('13', '90', '1', '111304', '176160', '17'), +('13', '90', '2', '62985', '109843', '17'), +('13', '90', '2', '94056', '109741', '17'), +('13', '90', '2', '104424', '95976', '17'), +('13', '90', '2', '54845', '71016', '17'), +('13', '90', '3', '111314', '177140', '17'), +('13', '90', '3', '111316', '175393', '17'), +('13', '90', '3', '111315', '174508', '17'), +('13', '90', '3', '111013', '155289', '17'), +('13', '90', '5', '111319', '176624', '17'), +('13', '90', '5', '111321', '175851', '17'), +('13', '90', '5', '111318', '173955', '17'), +('13', '90', '5', '111018', '154774', '17'), +('13', '90', '8', '111332', '177254', '17'), +('13', '90', '8', '111329', '176240', '17'), +('13', '90', '8', '111331', '172632', '17'), +('13', '90', '8', '111031', '155503', '17'), +('13', '90', '6', '111323', '177118', '17'), +('13', '90', '6', '111326', '175656', '17'), +('13', '90', '6', '111325', '175644', '17'), +('13', '90', '6', '111022', '155267', '17'), +('13', '90', '17', '56043', '117702', '17'), +('13', '90', '17', '56084', '114084', '17'), +('13', '90', '17', '104427', '99665', '17'), +('13', '90', '17', '54854', '75072', '17'), +('13', '90', '7', '56080', '109962', '17'), +('13', '90', '7', '56040', '109223', '17'), +('13', '90', '7', '104425', '95451', '17'), +('13', '90', '7', '54849', '70189', '17'), +('13', '90', '9', '67098', '179901', '17'), +('13', '90', '9', '56070', '106333', '17'), +('13', '90', '9', '56031', '106219', '17'), +('13', '90', '9', '62984', '106073', '17'), +('13', '90', '15', '111349', '179079', '17'), +('13', '90', '15', '111344', '177383', '17'), +('13', '90', '15', '111340', '176985', '17'), +('13', '90', '15', '111346', '176701', '17'), +('13', '90', '20', '111356', '177239', '17'), +('13', '90', '20', '111352', '176331', '17'), +('13', '90', '20', '111351', '173774', '17'), +('13', '90', '20', '111054', '155388', '17'), +('13', '90', '12', '56035', '108294', '17'), +('13', '90', '12', '56074', '107076', '17'), +('13', '90', '12', '104422', '93267', '17'), +('13', '90', '12', '49656', '70128', '17'), +('13', '90', '18', '56041', '114146', '17'), +('13', '90', '18', '62986', '112222', '17'), +('13', '90', '18', '104426', '96985', '17'), +('13', '90', '18', '54851', '71429', '17'), +('13', '90', '19', '62990', '110667', '17'), +('13', '90', '19', '81763', '110663', '17'), +('13', '90', '19', '56037', '109919', '17'), +('13', '90', '19', '56075', '109918', '17'), +('13', '90', '13', '111521', '183032', '17'), +('13', '90', '13', '111524', '173670', '17'), +('13', '90', '13', '111519', '173643', '17'), +('13', '90', '13', '111221', '162181', '17'), +('13', '90', '14', '111537', '177271', '17'), +('13', '90', '14', '111535', '175045', '17'), +('13', '90', '14', '111237', '155419', '17'), +('13', '90', '14', '111235', '153294', '17'), +('13', '90', '11', '111335', '176281', '17'), +('13', '90', '11', '111337', '176210', '17'), +('13', '90', '11', '111338', '172673', '17'), +('13', '90', '11', '111034', '154531', '17'), +('13', '91', '22', '12425', '0', '17'), +('13', '91', '22', '21807', '0', '17'), +('13', '91', '22', '39342', '0', '17'), +('13', '91', '22', '23597', '0', '17'), +('13', '91', '1', '111311', '178803', '17'), +('13', '91', '1', '111307', '176653', '17'), +('13', '91', '1', '111306', '176482', '17'), +('13', '91', '1', '111304', '176165', '17'), +('13', '91', '2', '62985', '109847', '17'), +('13', '91', '2', '94056', '109744', '17'), +('13', '91', '2', '104424', '95984', '17'), +('13', '91', '2', '54845', '71022', '17'), +('13', '91', '3', '111314', '177146', '17'), +('13', '91', '3', '111316', '175399', '17'), +('13', '91', '3', '111315', '174514', '17'), +('13', '91', '3', '111013', '155296', '17'), +('13', '91', '5', '111319', '176631', '17'), +('13', '91', '5', '111321', '175856', '17'), +('13', '91', '5', '111318', '173962', '17'), +('13', '91', '5', '111018', '154781', '17'), +('13', '91', '8', '111332', '177260', '17'), +('13', '91', '8', '111329', '176247', '17'), +('13', '91', '8', '111331', '172638', '17'), +('13', '91', '8', '111031', '155510', '17'), +('13', '91', '6', '111323', '177123', '17'), +('13', '91', '6', '111326', '175663', '17'), +('13', '91', '6', '111325', '175649', '17'), +('13', '91', '6', '111022', '155273', '17'), +('13', '91', '17', '56043', '117708', '17'), +('13', '91', '17', '56084', '114090', '17'), +('13', '91', '17', '104427', '99671', '17'), +('13', '91', '17', '54854', '75077', '17'), +('13', '91', '7', '56080', '109969', '17'), +('13', '91', '7', '56040', '109233', '17'), +('13', '91', '7', '104425', '95457', '17'), +('13', '91', '7', '54849', '70192', '17'), +('13', '91', '9', '67098', '179905', '17'), +('13', '91', '9', '56070', '106339', '17'), +('13', '91', '9', '56031', '106229', '17'), +('13', '91', '9', '62984', '106077', '17'), +('13', '91', '15', '111349', '179087', '17'), +('13', '91', '15', '111344', '177388', '17'), +('13', '91', '15', '111340', '176991', '17'), +('13', '91', '15', '111346', '176707', '17'), +('13', '91', '20', '111356', '177245', '17'), +('13', '91', '20', '111352', '176337', '17'), +('13', '91', '20', '111351', '173782', '17'), +('13', '91', '20', '111054', '155394', '17'), +('13', '91', '12', '56035', '108304', '17'), +('13', '91', '12', '56074', '107082', '17'), +('13', '91', '12', '104422', '93275', '17'), +('13', '91', '12', '49656', '70129', '17'), +('13', '91', '18', '56041', '114154', '17'), +('13', '91', '18', '62986', '112227', '17'), +('13', '91', '18', '104426', '96987', '17'), +('13', '91', '18', '54851', '71433', '17'), +('13', '91', '19', '62990', '110674', '17'), +('13', '91', '19', '81763', '110672', '17'), +('13', '91', '19', '56075', '109923', '17'), +('13', '91', '19', '56037', '109922', '17'), +('13', '91', '13', '111521', '183037', '17'), +('13', '91', '13', '111524', '173676', '17'), +('13', '91', '13', '111519', '173650', '17'), +('13', '91', '13', '111221', '162187', '17'), +('13', '91', '14', '111537', '177276', '17'), +('13', '91', '14', '111535', '175049', '17'), +('13', '91', '14', '111237', '155424', '17'), +('13', '91', '14', '111235', '153298', '17'), +('13', '91', '11', '111335', '176287', '17'), +('13', '91', '11', '111337', '176216', '17'), +('13', '91', '11', '111338', '172679', '17'), +('13', '91', '11', '111034', '154537', '17'), +('13', '92', '22', '12425', '0', '17'), +('13', '92', '22', '21807', '0', '17'), +('13', '92', '22', '39342', '0', '17'), +('13', '92', '22', '23597', '0', '17'), +('13', '92', '1', '111311', '178807', '17'), +('13', '92', '1', '111307', '176661', '17'), +('13', '92', '1', '111306', '176487', '17'), +('13', '92', '1', '111304', '176170', '17'), +('13', '92', '2', '62985', '109851', '17'), +('13', '92', '2', '94056', '109748', '17'), +('13', '92', '2', '104424', '95992', '17'), +('13', '92', '2', '54845', '71028', '17'), +('13', '92', '3', '111314', '177153', '17'), +('13', '92', '3', '111316', '175405', '17'), +('13', '92', '3', '111315', '174520', '17'), +('13', '92', '3', '111013', '155302', '17'), +('13', '92', '5', '111319', '176638', '17'), +('13', '92', '5', '111321', '175861', '17'), +('13', '92', '5', '111318', '173970', '17'), +('13', '92', '5', '111018', '154788', '17'), +('13', '92', '8', '111332', '177267', '17'), +('13', '92', '8', '111329', '176255', '17'), +('13', '92', '8', '111331', '172643', '17'), +('13', '92', '8', '111031', '155516', '17'), +('13', '92', '6', '111323', '177129', '17'), +('13', '92', '6', '111326', '175671', '17'), +('13', '92', '6', '111325', '175654', '17'), +('13', '92', '6', '111022', '155279', '17'), +('13', '92', '17', '56043', '117713', '17'), +('13', '92', '17', '56084', '114096', '17'), +('13', '92', '17', '104427', '99677', '17'), +('13', '92', '17', '54854', '75081', '17'), +('13', '92', '7', '56080', '109976', '17'), +('13', '92', '7', '56040', '109243', '17'), +('13', '92', '7', '104425', '95462', '17'), +('13', '92', '7', '54849', '70195', '17'), +('13', '92', '9', '67098', '179910', '17'), +('13', '92', '9', '56070', '106344', '17'), +('13', '92', '9', '56031', '106239', '17'), +('13', '92', '9', '62984', '106082', '17'), +('13', '92', '15', '111349', '179096', '17'), +('13', '92', '15', '111344', '177393', '17'), +('13', '92', '15', '111340', '176996', '17'), +('13', '92', '15', '111346', '176713', '17'), +('13', '92', '20', '111356', '177251', '17'), +('13', '92', '20', '111352', '176342', '17'), +('13', '92', '20', '111351', '173789', '17'), +('13', '92', '20', '111054', '155400', '17'), +('13', '92', '12', '56035', '108313', '17'), +('13', '92', '12', '56074', '107088', '17'), +('13', '92', '12', '104422', '93283', '17'), +('13', '92', '12', '49656', '70130', '17'), +('13', '92', '18', '56041', '114163', '17'), +('13', '92', '18', '62986', '112232', '17'), +('13', '92', '18', '104426', '96989', '17'), +('13', '92', '18', '54851', '71437', '17'), +('13', '92', '19', '62990', '110682', '17'), +('13', '92', '19', '81763', '110682', '17'), +('13', '92', '19', '56075', '109928', '17'), +('13', '92', '19', '56037', '109924', '17'), +('13', '92', '13', '111521', '183043', '17'), +('13', '92', '13', '111524', '173683', '17'), +('13', '92', '13', '111519', '173658', '17'), +('13', '92', '13', '111221', '162193', '17'), +('13', '92', '14', '111537', '177281', '17'), +('13', '92', '14', '111535', '175053', '17'), +('13', '92', '14', '111237', '155430', '17'), +('13', '92', '14', '111235', '153302', '17'), +('13', '92', '11', '111335', '176293', '17'), +('13', '92', '11', '111337', '176222', '17'), +('13', '92', '11', '111338', '172686', '17'), +('13', '92', '11', '111034', '154543', '17'), +('13', '93', '22', '12425', '0', '17'), +('13', '93', '22', '21807', '0', '17'), +('13', '93', '22', '39342', '0', '17'), +('13', '93', '22', '23597', '0', '17'), +('13', '93', '1', '111311', '178811', '17'), +('13', '93', '1', '111307', '176669', '17'), +('13', '93', '1', '111306', '176493', '17'), +('13', '93', '1', '111304', '176175', '17'), +('13', '93', '2', '62985', '109855', '17'), +('13', '93', '2', '94056', '109751', '17'), +('13', '93', '2', '104424', '96000', '17'), +('13', '93', '2', '54845', '71034', '17'), +('13', '93', '3', '111314', '177159', '17'), +('13', '93', '3', '111316', '175411', '17'), +('13', '93', '3', '111315', '174527', '17'), +('13', '93', '3', '111013', '155309', '17'), +('13', '93', '5', '111319', '176646', '17'), +('13', '93', '5', '111321', '175866', '17'), +('13', '93', '5', '111318', '173977', '17'), +('13', '93', '5', '111018', '154795', '17'), +('13', '93', '8', '111332', '177274', '17'), +('13', '93', '8', '111329', '176263', '17'), +('13', '93', '8', '111331', '172648', '17'), +('13', '93', '8', '111031', '155523', '17'), +('13', '93', '6', '111323', '177135', '17'), +('13', '93', '6', '111326', '175679', '17'), +('13', '93', '6', '111325', '175659', '17'), +('13', '93', '6', '111022', '155284', '17'), +('13', '93', '17', '56043', '117719', '17'), +('13', '93', '17', '56084', '114102', '17'), +('13', '93', '17', '104427', '99684', '17'), +('13', '93', '17', '54854', '75086', '17'), +('13', '93', '7', '56080', '109983', '17'), +('13', '93', '7', '56040', '109253', '17'), +('13', '93', '7', '104425', '95468', '17'), +('13', '93', '7', '54849', '70199', '17'), +('13', '93', '9', '67098', '179914', '17'), +('13', '93', '9', '56070', '106349', '17'), +('13', '93', '9', '56031', '106249', '17'), +('13', '93', '9', '62984', '106087', '17'), +('13', '93', '15', '111349', '179104', '17'), +('13', '93', '15', '111344', '177397', '17'), +('13', '93', '15', '111340', '177002', '17'), +('13', '93', '15', '111346', '176719', '17'), +('13', '93', '20', '111356', '177257', '17'), +('13', '93', '20', '111352', '176347', '17'), +('13', '93', '20', '111351', '173797', '17'), +('13', '93', '20', '111054', '155407', '17'), +('13', '93', '12', '56035', '108323', '17'), +('13', '93', '12', '56074', '107094', '17'), +('13', '93', '12', '104422', '93290', '17'), +('13', '93', '12', '49656', '70130', '17'), +('13', '93', '18', '56041', '114171', '17'), +('13', '93', '18', '62986', '112237', '17'), +('13', '93', '18', '104426', '96991', '17'), +('13', '93', '18', '54851', '71441', '17'), +('13', '93', '19', '81763', '110692', '17'), +('13', '93', '19', '62990', '110689', '17'), +('13', '93', '19', '56075', '109932', '17'), +('13', '93', '19', '56037', '109927', '17'), +('13', '93', '13', '111521', '183048', '17'), +('13', '93', '13', '111524', '173690', '17'), +('13', '93', '13', '111519', '173665', '17'), +('13', '93', '13', '111221', '162199', '17'), +('13', '93', '14', '111537', '177286', '17'), +('13', '93', '14', '111535', '175057', '17'), +('13', '93', '14', '111237', '155435', '17'), +('13', '93', '14', '111235', '153306', '17'), +('13', '93', '11', '111335', '176299', '17'), +('13', '93', '11', '111337', '176228', '17'), +('13', '93', '11', '111338', '172692', '17'), +('13', '93', '11', '111034', '154548', '17'), +('13', '94', '22', '12425', '0', '17'), +('13', '94', '22', '21807', '0', '17'), +('13', '94', '22', '39342', '0', '17'), +('13', '94', '22', '23597', '0', '17'), +('13', '94', '1', '111311', '178815', '17'), +('13', '94', '1', '111307', '176678', '17'), +('13', '94', '1', '111306', '176498', '17'), +('13', '94', '1', '111304', '176179', '17'), +('13', '94', '2', '62985', '109859', '17'), +('13', '94', '2', '94056', '109754', '17'), +('13', '94', '2', '104424', '96008', '17'), +('13', '94', '2', '54845', '71039', '17'), +('13', '94', '3', '111314', '177166', '17'), +('13', '94', '3', '111316', '175417', '17'), +('13', '94', '3', '111315', '174533', '17'), +('13', '94', '3', '111013', '155315', '17'), +('13', '94', '5', '111319', '176653', '17'), +('13', '94', '5', '111321', '175871', '17'), +('13', '94', '5', '111318', '173985', '17'), +('13', '94', '5', '111018', '154802', '17'), +('13', '94', '8', '111332', '177280', '17'), +('13', '94', '8', '111329', '176270', '17'), +('13', '94', '8', '111331', '172654', '17'), +('13', '94', '8', '111031', '155530', '17'), +('13', '94', '6', '111323', '177141', '17'), +('13', '94', '6', '111326', '175686', '17'), +('13', '94', '6', '111325', '175663', '17'), +('13', '94', '6', '111022', '155290', '17'), +('13', '94', '17', '56043', '117724', '17'), +('13', '94', '17', '56084', '114108', '17'), +('13', '94', '17', '104427', '99690', '17'), +('13', '94', '17', '54854', '75091', '17'), +('13', '94', '7', '56080', '109990', '17'), +('13', '94', '7', '56040', '109263', '17'), +('13', '94', '7', '104425', '95473', '17'), +('13', '94', '7', '54849', '70202', '17'), +('13', '94', '9', '67098', '179918', '17'), +('13', '94', '9', '56070', '106354', '17'), +('13', '94', '9', '56031', '106259', '17'), +('13', '94', '9', '62984', '106092', '17'), +('13', '94', '15', '111349', '179112', '17'), +('13', '94', '15', '111344', '177402', '17'), +('13', '94', '15', '111340', '177007', '17'), +('13', '94', '15', '111346', '176725', '17'), +('13', '94', '20', '111356', '177263', '17'), +('13', '94', '20', '111352', '176353', '17'), +('13', '94', '20', '111351', '173804', '17'), +('13', '94', '20', '111054', '155413', '17'), +('13', '94', '12', '56035', '108332', '17'), +('13', '94', '12', '56074', '107100', '17'), +('13', '94', '12', '104422', '93298', '17'), +('13', '94', '12', '49656', '70131', '17'), +('13', '94', '18', '56041', '114180', '17'), +('13', '94', '18', '62986', '112242', '17'), +('13', '94', '18', '104426', '96993', '17'), +('13', '94', '18', '54851', '71445', '17'), +('13', '94', '19', '81763', '110702', '17'), +('13', '94', '19', '62990', '110697', '17'), +('13', '94', '19', '56075', '109937', '17'), +('13', '94', '19', '56037', '109929', '17'), +('13', '94', '13', '111521', '183053', '17'), +('13', '94', '13', '111524', '173696', '17'), +('13', '94', '13', '111519', '173672', '17'), +('13', '94', '13', '111221', '162205', '17'), +('13', '94', '14', '111537', '177291', '17'), +('13', '94', '14', '111535', '175061', '17'), +('13', '94', '14', '111237', '155440', '17'), +('13', '94', '14', '111235', '153310', '17'), +('13', '94', '11', '111335', '176305', '17'), +('13', '94', '11', '111337', '176235', '17'), +('13', '94', '11', '111338', '172698', '17'), +('13', '94', '11', '111034', '154554', '17'), +('13', '95', '22', '12425', '0', '18'), +('13', '95', '22', '21807', '0', '18'), +('13', '95', '22', '39342', '0', '18'), +('13', '95', '22', '23597', '0', '18'), +('13', '95', '1', '128691', '229802', '18'), +('13', '95', '1', '111311', '178819', '18'), +('13', '95', '1', '111307', '176686', '18'), +('13', '95', '1', '111306', '176504', '18'), +('13', '95', '2', '62985', '109863', '18'), +('13', '95', '2', '94056', '109758', '18'), +('13', '95', '2', '104424', '96016', '18'), +('13', '95', '2', '54845', '71045', '18'), +('13', '95', '3', '111314', '177172', '18'), +('13', '95', '3', '111316', '175423', '18'), +('13', '95', '3', '111315', '174539', '18'), +('13', '95', '3', '111013', '155322', '18'), +('13', '95', '5', '111319', '176660', '18'), +('13', '95', '5', '111321', '175877', '18'), +('13', '95', '5', '111318', '173992', '18'), +('13', '95', '5', '111018', '154809', '18'), +('13', '95', '8', '111332', '177287', '18'), +('13', '95', '8', '111329', '176278', '18'), +('13', '95', '8', '111331', '172659', '18'), +('13', '95', '8', '111031', '155536', '18'), +('13', '95', '6', '111323', '177146', '18'), +('13', '95', '6', '111326', '175694', '18'), +('13', '95', '6', '111325', '175668', '18'), +('13', '95', '6', '111022', '155296', '18'), +('13', '95', '17', '56043', '117730', '18'), +('13', '95', '17', '56084', '114114', '18'), +('13', '95', '17', '104427', '99696', '18'), +('13', '95', '17', '54854', '75095', '18'), +('13', '95', '7', '128648', '231884', '18'), +('13', '95', '7', '56080', '109997', '18'), +('13', '95', '7', '56040', '109274', '18'), +('13', '95', '7', '104425', '95479', '18'), +('13', '95', '9', '67098', '179923', '18'), +('13', '95', '9', '56070', '106360', '18'), +('13', '95', '9', '56031', '106269', '18'), +('13', '95', '9', '62984', '106096', '18'), +('13', '95', '15', '111349', '179120', '18'), +('13', '95', '15', '111344', '177407', '18'), +('13', '95', '15', '111340', '177013', '18'), +('13', '95', '15', '111346', '176731', '18'), +('13', '95', '20', '128733', '227164', '18'), +('13', '95', '20', '111356', '177270', '18'), +('13', '95', '20', '111352', '176358', '18'), +('13', '95', '20', '111351', '173812', '18'), +('13', '95', '12', '56035', '108342', '18'), +('13', '95', '12', '56074', '107106', '18'), +('13', '95', '12', '104422', '93306', '18'), +('13', '95', '12', '49656', '70132', '18'), +('13', '95', '18', '56041', '114188', '18'), +('13', '95', '18', '62986', '112247', '18'), +('13', '95', '18', '104426', '96995', '18'), +('13', '95', '18', '54851', '71449', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '95', '19', '81763', '110712', '18'), +('13', '95', '19', '62990', '110705', '18'), +('13', '95', '19', '56075', '109942', '18'), +('13', '95', '19', '56037', '109932', '18'), +('13', '95', '13', '111521', '183059', '18'), +('13', '95', '13', '111524', '173703', '18'), +('13', '95', '13', '111519', '173680', '18'), +('13', '95', '13', '111221', '162211', '18'), +('13', '95', '14', '111537', '177296', '18'), +('13', '95', '14', '111535', '175065', '18'), +('13', '95', '14', '111237', '155445', '18'), +('13', '95', '14', '111235', '153314', '18'), +('13', '95', '11', '111335', '176311', '18'), +('13', '95', '11', '111337', '176241', '18'), +('13', '95', '11', '111338', '172704', '18'), +('13', '95', '11', '111034', '154560', '18'), +('13', '96', '22', '12425', '0', '18'), +('13', '96', '22', '21807', '0', '18'), +('13', '96', '22', '39342', '0', '18'), +('13', '96', '22', '23597', '0', '18'), +('13', '96', '1', '128691', '229808', '18'), +('13', '96', '1', '111311', '178823', '18'), +('13', '96', '1', '111307', '176694', '18'), +('13', '96', '1', '111306', '176509', '18'), +('13', '96', '2', '62985', '109866', '18'), +('13', '96', '2', '94056', '109761', '18'), +('13', '96', '2', '104424', '96024', '18'), +('13', '96', '2', '54845', '71051', '18'), +('13', '96', '3', '111314', '177179', '18'), +('13', '96', '3', '111316', '175429', '18'), +('13', '96', '3', '111315', '174545', '18'), +('13', '96', '3', '111013', '155328', '18'), +('13', '96', '5', '111319', '176667', '18'), +('13', '96', '5', '111321', '175882', '18'), +('13', '96', '5', '111318', '174000', '18'), +('13', '96', '5', '111018', '154817', '18'), +('13', '96', '8', '111332', '177294', '18'), +('13', '96', '8', '111329', '176285', '18'), +('13', '96', '8', '111331', '172664', '18'), +('13', '96', '8', '111031', '155543', '18'), +('13', '96', '6', '111323', '177152', '18'), +('13', '96', '6', '111326', '175702', '18'), +('13', '96', '6', '111325', '175673', '18'), +('13', '96', '6', '111022', '155302', '18'), +('13', '96', '17', '56043', '117735', '18'), +('13', '96', '17', '56084', '114121', '18'), +('13', '96', '17', '104427', '99702', '18'), +('13', '96', '17', '54854', '75100', '18'), +('13', '96', '7', '128648', '231887', '18'), +('13', '96', '7', '56080', '110004', '18'), +('13', '96', '7', '56040', '109284', '18'), +('13', '96', '7', '104425', '95484', '18'), +('13', '96', '9', '67098', '179927', '18'), +('13', '96', '9', '56070', '106365', '18'), +('13', '96', '9', '56031', '106279', '18'), +('13', '96', '9', '62984', '106101', '18'), +('13', '96', '15', '111349', '179128', '18'), +('13', '96', '15', '111344', '177411', '18'), +('13', '96', '15', '111340', '177018', '18'), +('13', '96', '15', '111346', '176737', '18'), +('13', '96', '20', '128733', '227170', '18'), +('13', '96', '20', '111356', '177276', '18'), +('13', '96', '20', '111352', '176363', '18'), +('13', '96', '20', '111351', '173819', '18'), +('13', '96', '12', '56035', '108351', '18'), +('13', '96', '12', '56074', '107113', '18'), +('13', '96', '12', '104422', '93314', '18'), +('13', '96', '12', '49656', '70133', '18'), +('13', '96', '18', '56041', '114196', '18'), +('13', '96', '18', '62986', '112252', '18'), +('13', '96', '18', '104426', '96997', '18'), +('13', '96', '18', '54851', '71453', '18'), +('13', '96', '19', '81763', '110722', '18'), +('13', '96', '19', '62990', '110712', '18'), +('13', '96', '19', '56075', '109947', '18'), +('13', '96', '19', '56037', '109934', '18'), +('13', '96', '13', '111521', '183064', '18'), +('13', '96', '13', '111524', '173710', '18'), +('13', '96', '13', '111519', '173687', '18'), +('13', '96', '13', '111221', '162217', '18'), +('13', '96', '14', '111537', '177302', '18'), +('13', '96', '14', '111535', '175069', '18'), +('13', '96', '14', '111237', '155450', '18'), +('13', '96', '14', '111235', '153317', '18'), +('13', '96', '11', '111335', '176317', '18'), +('13', '96', '11', '111337', '176247', '18'), +('13', '96', '11', '111338', '172710', '18'), +('13', '96', '11', '111034', '154566', '18'), +('13', '97', '22', '12425', '0', '18'), +('13', '97', '22', '21807', '0', '18'), +('13', '97', '22', '39342', '0', '18'), +('13', '97', '22', '23597', '0', '18'), +('13', '97', '1', '128691', '229815', '18'), +('13', '97', '1', '111311', '178827', '18'), +('13', '97', '1', '111307', '176702', '18'), +('13', '97', '1', '111306', '176515', '18'), +('13', '97', '2', '62985', '109870', '18'), +('13', '97', '2', '94056', '109764', '18'), +('13', '97', '2', '104424', '96032', '18'), +('13', '97', '2', '54845', '71057', '18'), +('13', '97', '3', '111314', '177185', '18'), +('13', '97', '3', '111316', '175435', '18'), +('13', '97', '3', '111315', '174551', '18'), +('13', '97', '3', '111013', '155335', '18'), +('13', '97', '5', '111319', '176674', '18'), +('13', '97', '5', '111321', '175887', '18'), +('13', '97', '5', '111318', '174007', '18'), +('13', '97', '5', '111018', '154824', '18'), +('13', '97', '8', '111332', '177300', '18'), +('13', '97', '8', '111329', '176293', '18'), +('13', '97', '8', '111331', '172670', '18'), +('13', '97', '8', '111031', '155550', '18'), +('13', '97', '6', '111323', '177158', '18'), +('13', '97', '6', '111326', '175710', '18'), +('13', '97', '6', '111325', '175677', '18'), +('13', '97', '6', '111022', '155307', '18'), +('13', '97', '17', '56043', '117741', '18'), +('13', '97', '17', '56084', '114127', '18'), +('13', '97', '17', '104427', '99708', '18'), +('13', '97', '17', '54854', '75105', '18'), +('13', '97', '7', '128648', '231891', '18'), +('13', '97', '7', '56080', '110012', '18'), +('13', '97', '7', '56040', '109294', '18'), +('13', '97', '7', '104425', '95490', '18'), +('13', '97', '9', '67098', '179931', '18'), +('13', '97', '9', '56070', '106370', '18'), +('13', '97', '9', '56031', '106289', '18'), +('13', '97', '9', '62984', '106106', '18'), +('13', '97', '15', '111349', '179136', '18'), +('13', '97', '15', '111344', '177416', '18'), +('13', '97', '15', '111340', '177024', '18'), +('13', '97', '15', '111346', '176743', '18'), +('13', '97', '20', '128733', '227176', '18'), +('13', '97', '20', '111356', '177282', '18'), +('13', '97', '20', '111352', '176368', '18'), +('13', '97', '20', '111351', '173827', '18'), +('13', '97', '12', '56035', '108361', '18'), +('13', '97', '12', '56074', '107119', '18'), +('13', '97', '12', '104422', '93322', '18'), +('13', '97', '12', '49656', '70134', '18'), +('13', '97', '18', '56041', '114205', '18'), +('13', '97', '18', '62986', '112257', '18'), +('13', '97', '18', '104426', '96999', '18'), +('13', '97', '18', '54851', '71457', '18'), +('13', '97', '19', '81763', '110732', '18'), +('13', '97', '19', '62990', '110720', '18'), +('13', '97', '19', '56075', '109951', '18'), +('13', '97', '19', '56037', '109937', '18'), +('13', '97', '13', '111521', '183069', '18'), +('13', '97', '13', '111524', '173716', '18'), +('13', '97', '13', '111519', '173695', '18'), +('13', '97', '13', '111221', '162223', '18'), +('13', '97', '14', '111537', '177307', '18'), +('13', '97', '14', '111535', '175073', '18'), +('13', '97', '14', '111237', '155455', '18'), +('13', '97', '14', '111235', '153321', '18'), +('13', '97', '11', '111335', '176323', '18'), +('13', '97', '11', '111337', '176253', '18'), +('13', '97', '11', '111338', '172716', '18'), +('13', '97', '11', '111034', '154572', '18'), +('13', '98', '22', '12425', '0', '18'), +('13', '98', '22', '21807', '0', '18'), +('13', '98', '22', '39342', '0', '18'), +('13', '98', '22', '23597', '0', '18'), +('13', '98', '1', '128691', '229821', '18'), +('13', '98', '1', '111311', '178832', '18'), +('13', '98', '1', '111307', '176710', '18'), +('13', '98', '1', '111306', '176520', '18'), +('13', '98', '2', '62985', '109874', '18'), +('13', '98', '2', '94056', '109768', '18'), +('13', '98', '2', '104424', '96040', '18'), +('13', '98', '2', '54845', '71063', '18'), +('13', '98', '3', '111314', '177192', '18'), +('13', '98', '3', '111316', '175441', '18'), +('13', '98', '3', '111315', '174557', '18'), +('13', '98', '3', '111013', '155341', '18'), +('13', '98', '5', '111319', '176681', '18'), +('13', '98', '5', '111321', '175892', '18'), +('13', '98', '5', '111318', '174015', '18'), +('13', '98', '5', '111018', '154831', '18'), +('13', '98', '8', '111332', '177307', '18'), +('13', '98', '8', '111329', '176300', '18'), +('13', '98', '8', '111331', '172675', '18'), +('13', '98', '8', '111031', '155556', '18'), +('13', '98', '6', '111323', '177164', '18'), +('13', '98', '6', '111326', '175717', '18'), +('13', '98', '6', '111325', '175682', '18'), +('13', '98', '6', '111022', '155313', '18'), +('13', '98', '17', '56043', '117746', '18'), +('13', '98', '17', '56084', '114133', '18'), +('13', '98', '17', '104427', '99714', '18'), +('13', '98', '17', '54854', '75110', '18'), +('13', '98', '7', '128648', '231895', '18'), +('13', '98', '7', '56080', '110019', '18'), +('13', '98', '7', '56040', '109304', '18'), +('13', '98', '7', '104425', '95495', '18'), +('13', '98', '9', '67098', '179936', '18'), +('13', '98', '9', '56070', '106375', '18'), +('13', '98', '9', '56031', '106299', '18'), +('13', '98', '9', '62984', '106111', '18'), +('13', '98', '15', '111349', '179144', '18'), +('13', '98', '15', '111344', '177421', '18'), +('13', '98', '15', '111340', '177029', '18'), +('13', '98', '15', '111346', '176749', '18'), +('13', '98', '20', '128733', '227182', '18'), +('13', '98', '20', '111356', '177288', '18'), +('13', '98', '20', '111352', '176374', '18'), +('13', '98', '20', '111351', '173834', '18'), +('13', '98', '12', '56035', '108370', '18'), +('13', '98', '12', '56074', '107125', '18'), +('13', '98', '12', '104422', '93330', '18'), +('13', '98', '12', '49656', '70134', '18'), +('13', '98', '18', '56041', '114213', '18'), +('13', '98', '18', '62986', '112262', '18'), +('13', '98', '18', '104426', '97001', '18'), +('13', '98', '18', '54851', '71461', '18'), +('13', '98', '19', '81763', '110742', '18'), +('13', '98', '19', '62990', '110727', '18'), +('13', '98', '19', '56075', '109956', '18'), +('13', '98', '19', '56037', '109940', '18'), +('13', '98', '13', '111521', '183075', '18'), +('13', '98', '13', '111524', '173723', '18'), +('13', '98', '13', '111519', '173702', '18'), +('13', '98', '13', '111221', '162229', '18'), +('13', '98', '14', '111537', '177312', '18'), +('13', '98', '14', '111535', '175077', '18'), +('13', '98', '14', '111237', '155460', '18'), +('13', '98', '14', '111235', '153325', '18'), +('13', '98', '11', '111335', '176329', '18'), +('13', '98', '11', '111337', '176259', '18'), +('13', '98', '11', '111338', '172722', '18'), +('13', '98', '11', '111034', '154578', '18'), +('13', '99', '22', '12425', '0', '18'), +('13', '99', '22', '21807', '0', '18'), +('13', '99', '22', '39342', '0', '18'), +('13', '99', '22', '23597', '0', '18'), +('13', '99', '1', '128691', '229828', '18'), +('13', '99', '1', '111311', '178836', '18'), +('13', '99', '1', '111307', '176718', '18'), +('13', '99', '1', '111306', '176526', '18'), +('13', '99', '2', '62985', '109878', '18'), +('13', '99', '2', '94056', '109771', '18'), +('13', '99', '2', '104424', '96048', '18'), +('13', '99', '2', '54845', '71069', '18'), +('13', '99', '3', '111314', '177198', '18'), +('13', '99', '3', '111316', '175448', '18'), +('13', '99', '3', '111315', '174564', '18'), +('13', '99', '3', '111013', '155348', '18'), +('13', '99', '5', '111319', '176689', '18'), +('13', '99', '5', '111321', '175897', '18'), +('13', '99', '5', '111318', '174022', '18'), +('13', '99', '5', '111018', '154838', '18'), +('13', '99', '8', '111332', '177314', '18'), +('13', '99', '8', '111329', '176308', '18'), +('13', '99', '8', '111331', '172680', '18'), +('13', '99', '8', '111031', '155563', '18'), +('13', '99', '6', '111323', '177169', '18'), +('13', '99', '6', '111326', '175725', '18'), +('13', '99', '6', '111325', '175687', '18'), +('13', '99', '6', '111022', '155319', '18'), +('13', '99', '17', '56043', '117752', '18'), +('13', '99', '17', '56084', '114139', '18'), +('13', '99', '17', '104427', '99720', '18'), +('13', '99', '17', '54854', '75114', '18'), +('13', '99', '7', '128648', '231899', '18'), +('13', '99', '7', '56080', '110026', '18'), +('13', '99', '7', '56040', '109314', '18'), +('13', '99', '7', '104425', '95501', '18'), +('13', '99', '9', '67098', '179940', '18'), +('13', '99', '9', '56070', '106381', '18'), +('13', '99', '9', '56031', '106309', '18'), +('13', '99', '9', '62984', '106116', '18'), +('13', '99', '15', '111349', '179152', '18'), +('13', '99', '15', '111344', '177425', '18'), +('13', '99', '15', '111340', '177035', '18'), +('13', '99', '15', '111346', '176755', '18'), +('13', '99', '20', '128733', '227188', '18'), +('13', '99', '20', '111356', '177294', '18'), +('13', '99', '20', '111352', '176379', '18'), +('13', '99', '20', '111351', '173841', '18'), +('13', '99', '12', '56035', '108379', '18'), +('13', '99', '12', '56074', '107131', '18'), +('13', '99', '12', '104422', '93338', '18'), +('13', '99', '12', '49656', '70135', '18'), +('13', '99', '18', '56041', '114222', '18'), +('13', '99', '18', '62986', '112267', '18'), +('13', '99', '18', '104426', '97003', '18'), +('13', '99', '18', '54851', '71465', '18'), +('13', '99', '19', '81763', '110752', '18'), +('13', '99', '19', '62990', '110735', '18'), +('13', '99', '19', '56075', '109961', '18'), +('13', '99', '19', '56037', '109942', '18'), +('13', '99', '13', '111521', '183080', '18'), +('13', '99', '13', '111524', '173729', '18'), +('13', '99', '13', '111519', '173710', '18'), +('13', '99', '13', '111221', '162235', '18'), +('13', '99', '14', '111537', '177317', '18'), +('13', '99', '14', '111535', '175081', '18'), +('13', '99', '14', '111237', '155465', '18'), +('13', '99', '14', '111235', '153329', '18'), +('13', '99', '11', '111335', '176334', '18'), +('13', '99', '11', '111337', '176265', '18'), +('13', '99', '11', '111338', '172729', '18'), +('13', '99', '11', '111034', '154584', '18'), +('13', '100', '22', '12425', '0', '20'), +('13', '100', '22', '21807', '0', '20'), +('13', '100', '22', '39342', '0', '20'), +('13', '100', '22', '23597', '0', '20'), +('13', '100', '1', '98769', '284332', '20'), +('13', '100', '1', '128691', '229834', '20'), +('13', '100', '1', '111311', '178840', '20'), +('13', '100', '1', '111307', '176727', '20'), +('13', '100', '2', '62985', '109882', '20'), +('13', '100', '2', '94056', '109774', '20'), +('13', '100', '2', '104424', '96056', '20'), +('13', '100', '2', '54845', '71075', '20'), +('13', '100', '3', '111314', '177205', '20'), +('13', '100', '3', '111316', '175454', '20'), +('13', '100', '3', '111315', '174570', '20'), +('13', '100', '3', '111013', '155354', '20'), +('13', '100', '5', '111319', '176696', '20'), +('13', '100', '5', '111321', '175902', '20'), +('13', '100', '5', '111318', '174030', '20'), +('13', '100', '5', '111018', '154845', '20'), +('13', '100', '8', '111332', '177320', '20'), +('13', '100', '8', '111329', '176315', '20'), +('13', '100', '8', '111331', '172686', '20'), +('13', '100', '8', '111031', '155570', '20'), +('13', '100', '6', '111323', '177175', '20'), +('13', '100', '6', '111326', '175733', '20'), +('13', '100', '6', '111325', '175691', '20'), +('13', '100', '6', '111022', '155325', '20'), +('13', '100', '17', '94535', '312834', '20'), +('13', '100', '17', '56043', '117758', '20'), +('13', '100', '17', '56084', '114145', '20'), +('13', '100', '17', '104427', '99727', '20'), +('13', '100', '7', '128648', '231902', '20'), +('13', '100', '7', '56080', '110033', '20'), +('13', '100', '7', '56040', '109324', '20'), +('13', '100', '7', '104425', '95506', '20'), +('13', '100', '9', '67098', '179944', '20'), +('13', '100', '9', '56070', '106386', '20'), +('13', '100', '9', '56031', '106319', '20'), +('13', '100', '9', '62984', '106120', '20'), +('13', '100', '15', '111349', '179161', '20'), +('13', '100', '15', '111344', '177430', '20'), +('13', '100', '15', '111340', '177040', '20'), +('13', '100', '15', '111346', '176761', '20'), +('13', '100', '20', '128733', '227194', '20'), +('13', '100', '20', '111356', '177301', '20'), +('13', '100', '20', '111352', '176384', '20'), +('13', '100', '20', '111351', '173849', '20'), +('13', '100', '12', '56035', '108389', '20'), +('13', '100', '12', '56074', '107137', '20'), +('13', '100', '12', '104422', '93346', '20'), +('13', '100', '12', '49656', '70136', '20'), +('13', '100', '18', '56041', '114230', '20'), +('13', '100', '18', '62986', '112272', '20'), +('13', '100', '18', '104426', '97005', '20'), +('13', '100', '18', '54851', '71470', '20'), +('13', '100', '19', '81763', '110762', '20'), +('13', '100', '19', '62990', '110742', '20'), +('13', '100', '19', '56075', '109965', '20'), +('13', '100', '19', '56037', '109945', '20'), +('13', '100', '13', '111521', '183086', '20'), +('13', '100', '13', '111524', '173737', '20'), +('13', '100', '13', '111519', '173717', '20'), +('13', '100', '13', '111221', '162241', '20'), +('13', '100', '14', '111537', '177322', '20'), +('13', '100', '14', '111535', '175085', '20'), +('13', '100', '14', '111237', '155471', '20'), +('13', '100', '14', '111235', '153333', '20'), +('13', '100', '11', '133816', '229751', '20'), +('13', '100', '11', '111335', '176340', '20'), +('13', '100', '11', '111337', '176271', '20'), +('13', '100', '11', '111338', '172735', '20'), +('13', '100', '22', '12425', '0', '19'), +('13', '100', '22', '21807', '0', '19'), +('13', '100', '22', '39342', '0', '19'), +('13', '100', '22', '23597', '0', '19'), +('13', '100', '1', '98769', '284332', '19'), +('13', '100', '1', '128691', '229834', '19'), +('13', '100', '1', '111311', '178840', '19'), +('13', '100', '1', '111307', '176727', '19'), +('13', '100', '2', '62985', '109882', '19'), +('13', '100', '2', '94056', '109774', '19'), +('13', '100', '2', '104424', '96056', '19'), +('13', '100', '2', '54845', '71075', '19'), +('13', '100', '3', '111314', '177205', '19'), +('13', '100', '3', '111316', '175454', '19'), +('13', '100', '3', '111315', '174570', '19'), +('13', '100', '3', '111013', '155354', '19'), +('13', '100', '5', '111319', '176696', '19'), +('13', '100', '5', '111321', '175902', '19'), +('13', '100', '5', '111318', '174030', '19'), +('13', '100', '5', '111018', '154845', '19'), +('13', '100', '8', '111332', '177320', '19'), +('13', '100', '8', '111329', '176315', '19'), +('13', '100', '8', '111331', '172686', '19'), +('13', '100', '8', '111031', '155570', '19'), +('13', '100', '6', '111323', '177175', '19'), +('13', '100', '6', '111326', '175733', '19'), +('13', '100', '6', '111325', '175691', '19'), +('13', '100', '6', '111022', '155325', '19'), +('13', '100', '17', '56043', '117758', '19'), +('13', '100', '17', '56084', '114145', '19'), +('13', '100', '17', '104427', '99727', '19'), +('13', '100', '17', '54854', '75119', '19'), +('13', '100', '7', '128648', '231902', '19'), +('13', '100', '7', '56080', '110033', '19'), +('13', '100', '7', '56040', '109324', '19'), +('13', '100', '7', '104425', '95506', '19'), +('13', '100', '9', '67098', '179944', '19'), +('13', '100', '9', '56070', '106386', '19'), +('13', '100', '9', '56031', '106319', '19'), +('13', '100', '9', '62984', '106120', '19'), +('13', '100', '15', '111349', '179161', '19'), +('13', '100', '15', '111344', '177430', '19'), +('13', '100', '15', '111340', '177040', '19'), +('13', '100', '15', '111346', '176761', '19'), +('13', '100', '20', '128733', '227194', '19'), +('13', '100', '20', '111356', '177301', '19'), +('13', '100', '20', '111352', '176384', '19'), +('13', '100', '20', '111351', '173849', '19'), +('13', '100', '12', '56035', '108389', '19'), +('13', '100', '12', '56074', '107137', '19'), +('13', '100', '12', '104422', '93346', '19'), +('13', '100', '12', '49656', '70136', '19'), +('13', '100', '18', '56041', '114230', '19'), +('13', '100', '18', '62986', '112272', '19'), +('13', '100', '18', '104426', '97005', '19'), +('13', '100', '18', '54851', '71470', '19'), +('13', '100', '19', '81763', '110762', '19'), +('13', '100', '19', '62990', '110742', '19'), +('13', '100', '19', '56075', '109965', '19'), +('13', '100', '19', '56037', '109945', '19'), +('13', '100', '13', '111521', '183085', '19'), +('13', '100', '13', '111524', '173736', '19'), +('13', '100', '13', '111519', '173717', '19'), +('13', '100', '13', '111221', '162241', '19'), +('13', '100', '14', '111537', '177322', '19'), +('13', '100', '14', '111535', '175085', '19'), +('13', '100', '14', '111237', '155471', '19'), +('13', '100', '14', '111235', '153333', '19'), +('13', '100', '11', '133816', '229751', '19'), +('13', '100', '11', '111335', '176340', '19'), +('13', '100', '11', '111337', '176271', '19'), +('13', '100', '11', '111338', '172735', '19'), +('13', '101', '22', '12425', '0', '20'), +('13', '101', '22', '21807', '0', '20'), +('13', '101', '22', '39342', '0', '20'), +('13', '101', '22', '23597', '0', '20'), +('13', '101', '1', '98769', '284336', '20'), +('13', '101', '1', '128691', '229840', '20'), +('13', '101', '1', '111311', '178844', '20'), +('13', '101', '1', '111307', '176735', '20'), +('13', '101', '2', '62985', '109886', '20'), +('13', '101', '2', '94056', '109778', '20'), +('13', '101', '2', '104424', '96064', '20'), +('13', '101', '2', '54845', '71081', '20'), +('13', '101', '3', '111314', '177212', '20'), +('13', '101', '3', '111316', '175460', '20'), +('13', '101', '3', '111315', '174576', '20'), +('13', '101', '3', '111013', '155361', '20'), +('13', '101', '5', '111319', '176703', '20'), +('13', '101', '5', '111321', '175907', '20'), +('13', '101', '5', '111318', '174037', '20'), +('13', '101', '5', '111018', '154852', '20'), +('13', '101', '8', '111332', '177327', '20'), +('13', '101', '8', '111329', '176323', '20'), +('13', '101', '8', '111331', '172691', '20'), +('13', '101', '8', '111031', '155577', '20'), +('13', '101', '6', '111323', '177181', '20'), +('13', '101', '6', '111326', '175740', '20'), +('13', '101', '6', '111325', '175696', '20'), +('13', '101', '6', '111022', '155330', '20'), +('13', '101', '17', '94535', '312843', '20'), +('13', '101', '17', '56043', '117763', '20'), +('13', '101', '17', '56084', '114151', '20'), +('13', '101', '17', '104427', '99733', '20'), +('13', '101', '7', '128648', '231906', '20'), +('13', '101', '7', '56080', '110040', '20'), +('13', '101', '7', '56040', '109334', '20'), +('13', '101', '7', '104425', '95512', '20'), +('13', '101', '9', '67098', '179949', '20'), +('13', '101', '9', '56070', '106391', '20'), +('13', '101', '9', '56031', '106329', '20'), +('13', '101', '9', '62984', '106125', '20'), +('13', '101', '15', '111349', '179169', '20'), +('13', '101', '15', '111344', '177435', '20'), +('13', '101', '15', '111340', '177046', '20'), +('13', '101', '15', '111346', '176766', '20'), +('13', '101', '20', '128733', '227199', '20'), +('13', '101', '20', '111356', '177307', '20'), +('13', '101', '20', '111352', '176390', '20'), +('13', '101', '20', '111351', '173856', '20'), +('13', '101', '12', '56035', '108398', '20'), +('13', '101', '12', '56074', '107143', '20'), +('13', '101', '12', '104422', '93354', '20'), +('13', '101', '12', '49656', '70137', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '101', '18', '56041', '114239', '20'), +('13', '101', '18', '62986', '112277', '20'), +('13', '101', '18', '104426', '97007', '20'), +('13', '101', '18', '54851', '71474', '20'), +('13', '101', '19', '81763', '110771', '20'), +('13', '101', '19', '62990', '110750', '20'), +('13', '101', '19', '56075', '109970', '20'), +('13', '101', '19', '56037', '109947', '20'), +('13', '101', '13', '111521', '183091', '20'), +('13', '101', '13', '111524', '173743', '20'), +('13', '101', '13', '111519', '173725', '20'), +('13', '101', '13', '111221', '162247', '20'), +('13', '101', '14', '111537', '177327', '20'), +('13', '101', '14', '111535', '175089', '20'), +('13', '101', '14', '111237', '155476', '20'), +('13', '101', '14', '111235', '153337', '20'), +('13', '101', '11', '133816', '229755', '20'), +('13', '101', '11', '111335', '176346', '20'), +('13', '101', '11', '111337', '176277', '20'), +('13', '101', '11', '111338', '172741', '20'), +('13', '102', '22', '12425', '0', '20'), +('13', '102', '22', '21807', '0', '20'), +('13', '102', '22', '39342', '0', '20'), +('13', '102', '22', '23597', '0', '20'), +('13', '102', '1', '98769', '284340', '20'), +('13', '102', '1', '128691', '229847', '20'), +('13', '102', '1', '111311', '178848', '20'), +('13', '102', '1', '111307', '176743', '20'), +('13', '102', '2', '62985', '109890', '20'), +('13', '102', '2', '94056', '109781', '20'), +('13', '102', '2', '104424', '96072', '20'), +('13', '102', '2', '54845', '71086', '20'), +('13', '102', '3', '111314', '177218', '20'), +('13', '102', '3', '111316', '175466', '20'), +('13', '102', '3', '111315', '174582', '20'), +('13', '102', '3', '111013', '155367', '20'), +('13', '102', '5', '111319', '176710', '20'), +('13', '102', '5', '111321', '175912', '20'), +('13', '102', '5', '111318', '174045', '20'), +('13', '102', '5', '111018', '154860', '20'), +('13', '102', '8', '111332', '177334', '20'), +('13', '102', '8', '111329', '176330', '20'), +('13', '102', '8', '111331', '172696', '20'), +('13', '102', '8', '111031', '155583', '20'), +('13', '102', '6', '111323', '177187', '20'), +('13', '102', '6', '111326', '175748', '20'), +('13', '102', '6', '111325', '175701', '20'), +('13', '102', '6', '111022', '155336', '20'), +('13', '102', '17', '94535', '312851', '20'), +('13', '102', '17', '56043', '117769', '20'), +('13', '102', '17', '56084', '114158', '20'), +('13', '102', '17', '104427', '99739', '20'), +('13', '102', '7', '128648', '231910', '20'), +('13', '102', '7', '56080', '110047', '20'), +('13', '102', '7', '56040', '109344', '20'), +('13', '102', '7', '104425', '95517', '20'), +('13', '102', '9', '67098', '179953', '20'), +('13', '102', '9', '56070', '106396', '20'), +('13', '102', '9', '56031', '106340', '20'), +('13', '102', '9', '62984', '106130', '20'), +('13', '102', '15', '111349', '179177', '20'), +('13', '102', '15', '111344', '177440', '20'), +('13', '102', '15', '111340', '177051', '20'), +('13', '102', '15', '111346', '176772', '20'), +('13', '102', '20', '128733', '227205', '20'), +('13', '102', '20', '111356', '177313', '20'), +('13', '102', '20', '111352', '176395', '20'), +('13', '102', '20', '111351', '173864', '20'), +('13', '102', '12', '56035', '108408', '20'), +('13', '102', '12', '56074', '107149', '20'), +('13', '102', '12', '104422', '93361', '20'), +('13', '102', '12', '49656', '70138', '20'), +('13', '102', '18', '56041', '114247', '20'), +('13', '102', '18', '62986', '112282', '20'), +('13', '102', '18', '104426', '97009', '20'), +('13', '102', '18', '54851', '71478', '20'), +('13', '102', '19', '81763', '110781', '20'), +('13', '102', '19', '62990', '110757', '20'), +('13', '102', '19', '56075', '109975', '20'), +('13', '102', '19', '56037', '109950', '20'), +('13', '102', '13', '111521', '183097', '20'), +('13', '102', '13', '111524', '173750', '20'), +('13', '102', '13', '111519', '173732', '20'), +('13', '102', '13', '111221', '162253', '20'), +('13', '102', '14', '111537', '177332', '20'), +('13', '102', '14', '111535', '175093', '20'), +('13', '102', '14', '111237', '155481', '20'), +('13', '102', '14', '111235', '153341', '20'), +('13', '102', '11', '133816', '229759', '20'), +('13', '102', '11', '111335', '176352', '20'), +('13', '102', '11', '111337', '176283', '20'), +('13', '102', '11', '111338', '172747', '20'), +('13', '103', '22', '12425', '0', '20'), +('13', '103', '22', '21807', '0', '20'), +('13', '103', '22', '39342', '0', '20'), +('13', '103', '22', '23597', '0', '20'), +('13', '103', '1', '98769', '284345', '20'), +('13', '103', '1', '128691', '229853', '20'), +('13', '103', '1', '111311', '178852', '20'), +('13', '103', '1', '111307', '176751', '20'), +('13', '103', '2', '62985', '109894', '20'), +('13', '103', '2', '94056', '109784', '20'), +('13', '103', '2', '104424', '96080', '20'), +('13', '103', '2', '54845', '71092', '20'), +('13', '103', '3', '111314', '177225', '20'), +('13', '103', '3', '111316', '175472', '20'), +('13', '103', '3', '111315', '174588', '20'), +('13', '103', '3', '111013', '155374', '20'), +('13', '103', '5', '111319', '176717', '20'), +('13', '103', '5', '111321', '175918', '20'), +('13', '103', '5', '111318', '174052', '20'), +('13', '103', '5', '111018', '154867', '20'), +('13', '103', '8', '111332', '177341', '20'), +('13', '103', '8', '111329', '176338', '20'), +('13', '103', '8', '111331', '172702', '20'), +('13', '103', '8', '111031', '155590', '20'), +('13', '103', '6', '111323', '177192', '20'), +('13', '103', '6', '111326', '175756', '20'), +('13', '103', '6', '111325', '175706', '20'), +('13', '103', '6', '111022', '155342', '20'), +('13', '103', '17', '94535', '312859', '20'), +('13', '103', '17', '56043', '117774', '20'), +('13', '103', '17', '56084', '114164', '20'), +('13', '103', '17', '104427', '99745', '20'), +('13', '103', '7', '128648', '231914', '20'), +('13', '103', '7', '56080', '110054', '20'), +('13', '103', '7', '56040', '109355', '20'), +('13', '103', '7', '104425', '95523', '20'), +('13', '103', '9', '67098', '179957', '20'), +('13', '103', '9', '56070', '106402', '20'), +('13', '103', '9', '56031', '106350', '20'), +('13', '103', '9', '62984', '106135', '20'), +('13', '103', '15', '111349', '179185', '20'), +('13', '103', '15', '111344', '177444', '20'), +('13', '103', '15', '111340', '177057', '20'), +('13', '103', '15', '111346', '176778', '20'), +('13', '103', '20', '128733', '227211', '20'), +('13', '103', '20', '111356', '177319', '20'), +('13', '103', '20', '111352', '176400', '20'), +('13', '103', '20', '111351', '173871', '20'), +('13', '103', '12', '56035', '108417', '20'), +('13', '103', '12', '56074', '107155', '20'), +('13', '103', '12', '104422', '93369', '20'), +('13', '103', '12', '49656', '70139', '20'), +('13', '103', '18', '56041', '114256', '20'), +('13', '103', '18', '62986', '112287', '20'), +('13', '103', '18', '104426', '97011', '20'), +('13', '103', '18', '54851', '71482', '20'), +('13', '103', '19', '81763', '110791', '20'), +('13', '103', '19', '62990', '110765', '20'), +('13', '103', '19', '56075', '109980', '20'), +('13', '103', '19', '56037', '109952', '20'), +('13', '103', '13', '111521', '183102', '20'), +('13', '103', '13', '111524', '173756', '20'), +('13', '103', '13', '111519', '173740', '20'), +('13', '103', '13', '111221', '162259', '20'), +('13', '103', '14', '111537', '177338', '20'), +('13', '103', '14', '111535', '175097', '20'), +('13', '103', '14', '111237', '155486', '20'), +('13', '103', '14', '111235', '153345', '20'), +('13', '103', '11', '133816', '229763', '20'), +('13', '103', '11', '111335', '176358', '20'), +('13', '103', '11', '111337', '176290', '20'), +('13', '103', '11', '111338', '172753', '20'), +('13', '104', '22', '12425', '0', '20'), +('13', '104', '22', '21807', '0', '20'), +('13', '104', '22', '39342', '0', '20'), +('13', '104', '22', '23597', '0', '20'), +('13', '104', '1', '98769', '284349', '20'), +('13', '104', '1', '128691', '229860', '20'), +('13', '104', '1', '111311', '178856', '20'), +('13', '104', '1', '111307', '176759', '20'), +('13', '104', '2', '62985', '109897', '20'), +('13', '104', '2', '94056', '109788', '20'), +('13', '104', '2', '104424', '96088', '20'), +('13', '104', '2', '54845', '71098', '20'), +('13', '104', '3', '111314', '177231', '20'), +('13', '104', '3', '111316', '175478', '20'), +('13', '104', '3', '111315', '174594', '20'), +('13', '104', '3', '111013', '155381', '20'), +('13', '104', '5', '111319', '176724', '20'), +('13', '104', '5', '111321', '175923', '20'), +('13', '104', '5', '111318', '174060', '20'), +('13', '104', '5', '111018', '154874', '20'), +('13', '104', '8', '111332', '177347', '20'), +('13', '104', '8', '111329', '176346', '20'), +('13', '104', '8', '111331', '172707', '20'), +('13', '104', '8', '111031', '155597', '20'), +('13', '104', '6', '111323', '177198', '20'), +('13', '104', '6', '111326', '175764', '20'), +('13', '104', '6', '111325', '175710', '20'), +('13', '104', '6', '111022', '155348', '20'), +('13', '104', '17', '94535', '312867', '20'), +('13', '104', '17', '56043', '117780', '20'), +('13', '104', '17', '56084', '114170', '20'), +('13', '104', '17', '104427', '99751', '20'), +('13', '104', '7', '128648', '231917', '20'), +('13', '104', '7', '56080', '110061', '20'), +('13', '104', '7', '56040', '109365', '20'), +('13', '104', '7', '104425', '95528', '20'), +('13', '104', '9', '67098', '179962', '20'), +('13', '104', '9', '56070', '106407', '20'), +('13', '104', '9', '56031', '106360', '20'), +('13', '104', '9', '62984', '106140', '20'), +('13', '104', '15', '111349', '179193', '20'), +('13', '104', '15', '111344', '177449', '20'), +('13', '104', '15', '111340', '177062', '20'), +('13', '104', '15', '111346', '176784', '20'), +('13', '104', '20', '128733', '227217', '20'), +('13', '104', '20', '111356', '177325', '20'), +('13', '104', '20', '111352', '176406', '20'), +('13', '104', '20', '111351', '173879', '20'), +('13', '104', '12', '56035', '108427', '20'), +('13', '104', '12', '56074', '107161', '20'), +('13', '104', '12', '104422', '93377', '20'), +('13', '104', '12', '49656', '70139', '20'), +('13', '104', '18', '56041', '114264', '20'), +('13', '104', '18', '62986', '112292', '20'), +('13', '104', '18', '104426', '97013', '20'), +('13', '104', '18', '54851', '71486', '20'), +('13', '104', '19', '81763', '110801', '20'), +('13', '104', '19', '62990', '110772', '20'), +('13', '104', '19', '56075', '109984', '20'), +('13', '104', '19', '56037', '109955', '20'), +('13', '104', '13', '111521', '183107', '20'), +('13', '104', '13', '111524', '173763', '20'), +('13', '104', '13', '111519', '173747', '20'), +('13', '104', '13', '111221', '162265', '20'), +('13', '104', '14', '111537', '177343', '20'), +('13', '104', '14', '111535', '175101', '20'), +('13', '104', '14', '111237', '155491', '20'), +('13', '104', '14', '111235', '153349', '20'), +('13', '104', '11', '133816', '229767', '20'), +('13', '104', '11', '111335', '176364', '20'), +('13', '104', '11', '111337', '176296', '20'), +('13', '104', '11', '111338', '172759', '20'), +('13', '105', '22', '12425', '0', '23'), +('13', '105', '22', '21807', '0', '23'), +('13', '105', '22', '39342', '0', '23'), +('13', '105', '22', '23597', '0', '23'), +('13', '105', '1', '98769', '284353', '23'), +('13', '105', '1', '128691', '229866', '23'), +('13', '105', '1', '111311', '178860', '23'), +('13', '105', '1', '111307', '176767', '23'), +('13', '105', '2', '62985', '109901', '23'), +('13', '105', '2', '94056', '109791', '23'), +('13', '105', '2', '104424', '96096', '23'), +('13', '105', '2', '54845', '71104', '23'), +('13', '105', '3', '111314', '177238', '23'), +('13', '105', '3', '111316', '175484', '23'), +('13', '105', '3', '111315', '174601', '23'), +('13', '105', '3', '111013', '155387', '23'), +('13', '105', '5', '111319', '176732', '23'), +('13', '105', '5', '111321', '175928', '23'), +('13', '105', '5', '111318', '174067', '23'), +('13', '105', '5', '111018', '154881', '23'), +('13', '105', '8', '111332', '177354', '23'), +('13', '105', '8', '111329', '176353', '23'), +('13', '105', '8', '111331', '172712', '23'), +('13', '105', '8', '111031', '155603', '23'), +('13', '105', '6', '111323', '177204', '23'), +('13', '105', '6', '111326', '175771', '23'), +('13', '105', '6', '111325', '175715', '23'), +('13', '105', '6', '111022', '155353', '23'), +('13', '105', '17', '94535', '312875', '23'), +('13', '105', '17', '56043', '117785', '23'), +('13', '105', '17', '56084', '114176', '23'), +('13', '105', '17', '104427', '99757', '23'), +('13', '105', '7', '128648', '231921', '23'), +('13', '105', '7', '56080', '110069', '23'), +('13', '105', '7', '56040', '109375', '23'), +('13', '105', '7', '104425', '95533', '23'), +('13', '105', '9', '67098', '179966', '23'), +('13', '105', '9', '56070', '106412', '23'), +('13', '105', '9', '56031', '106370', '23'), +('13', '105', '9', '62984', '106144', '23'), +('13', '105', '15', '111349', '179201', '23'), +('13', '105', '15', '111344', '177454', '23'), +('13', '105', '15', '111340', '177068', '23'), +('13', '105', '15', '111346', '176790', '23'), +('13', '105', '20', '128733', '227223', '23'), +('13', '105', '20', '111356', '177332', '23'), +('13', '105', '20', '111352', '176411', '23'), +('13', '105', '20', '111351', '173886', '23'), +('13', '105', '12', '56035', '108436', '23'), +('13', '105', '12', '56074', '107167', '23'), +('13', '105', '12', '104422', '93385', '23'), +('13', '105', '12', '49656', '70140', '23'), +('13', '105', '18', '56041', '114272', '23'), +('13', '105', '18', '62986', '112297', '23'), +('13', '105', '18', '104426', '97015', '23'), +('13', '105', '18', '54851', '71490', '23'), +('13', '105', '19', '81763', '110811', '23'), +('13', '105', '19', '62990', '110780', '23'), +('13', '105', '19', '56075', '109989', '23'), +('13', '105', '19', '56037', '109957', '23'), +('13', '105', '13', '111521', '183113', '23'), +('13', '105', '13', '111524', '173770', '23'), +('13', '105', '13', '111519', '173755', '23'), +('13', '105', '13', '111221', '162271', '23'), +('13', '105', '14', '111537', '177348', '23'), +('13', '105', '14', '111535', '175104', '23'), +('13', '105', '14', '111237', '155496', '23'), +('13', '105', '14', '111235', '153353', '23'), +('13', '105', '11', '133816', '229771', '23'), +('13', '105', '11', '111335', '176370', '23'), +('13', '105', '11', '111337', '176302', '23'), +('13', '105', '11', '111338', '172765', '23'), +('13', '105', '22', '12425', '0', '22'), +('13', '105', '22', '21807', '0', '22'), +('13', '105', '22', '39342', '0', '22'), +('13', '105', '22', '23597', '0', '22'), +('13', '105', '1', '98769', '284353', '22'), +('13', '105', '1', '128691', '229866', '22'), +('13', '105', '1', '111311', '178860', '22'), +('13', '105', '1', '111307', '176767', '22'), +('13', '105', '2', '62985', '109901', '22'), +('13', '105', '2', '94056', '109791', '22'), +('13', '105', '2', '104424', '96096', '22'), +('13', '105', '2', '54845', '71104', '22'), +('13', '105', '3', '111314', '177238', '22'), +('13', '105', '3', '111316', '175484', '22'), +('13', '105', '3', '111315', '174601', '22'), +('13', '105', '3', '111013', '155387', '22'), +('13', '105', '5', '111319', '176732', '22'), +('13', '105', '5', '111321', '175928', '22'), +('13', '105', '5', '111318', '174067', '22'), +('13', '105', '5', '111018', '154881', '22'), +('13', '105', '8', '111332', '177354', '22'), +('13', '105', '8', '111329', '176353', '22'), +('13', '105', '8', '111331', '172712', '22'), +('13', '105', '8', '111031', '155603', '22'), +('13', '105', '6', '111323', '177204', '22'), +('13', '105', '6', '111326', '175771', '22'), +('13', '105', '6', '111325', '175715', '22'), +('13', '105', '6', '111022', '155353', '22'), +('13', '105', '17', '94535', '312875', '22'), +('13', '105', '17', '56043', '117785', '22'), +('13', '105', '17', '56084', '114176', '22'), +('13', '105', '17', '104427', '99757', '22'), +('13', '105', '7', '128648', '231921', '22'), +('13', '105', '7', '56080', '110069', '22'), +('13', '105', '7', '56040', '109375', '22'), +('13', '105', '7', '104425', '95533', '22'), +('13', '105', '9', '67098', '179966', '22'), +('13', '105', '9', '56070', '106412', '22'), +('13', '105', '9', '56031', '106370', '22'), +('13', '105', '9', '62984', '106144', '22'), +('13', '105', '15', '111349', '179201', '22'), +('13', '105', '15', '111344', '177454', '22'), +('13', '105', '15', '111340', '177068', '22'), +('13', '105', '15', '111346', '176790', '22'), +('13', '105', '20', '128733', '227223', '22'), +('13', '105', '20', '111356', '177332', '22'), +('13', '105', '20', '111352', '176411', '22'), +('13', '105', '20', '111351', '173886', '22'), +('13', '105', '12', '56035', '108436', '22'), +('13', '105', '12', '56074', '107167', '22'), +('13', '105', '12', '104422', '93385', '22'), +('13', '105', '12', '49656', '70140', '22'), +('13', '105', '18', '56041', '114272', '22'), +('13', '105', '18', '62986', '112297', '22'), +('13', '105', '18', '104426', '97015', '22'), +('13', '105', '18', '54851', '71490', '22'), +('13', '105', '19', '81763', '110811', '22'), +('13', '105', '19', '62990', '110780', '22'), +('13', '105', '19', '56075', '109989', '22'), +('13', '105', '19', '56037', '109957', '22'), +('13', '105', '13', '111521', '183113', '22'), +('13', '105', '13', '111524', '173770', '22'), +('13', '105', '13', '111519', '173755', '22'), +('13', '105', '13', '111221', '162271', '22'), +('13', '105', '14', '111537', '177348', '22'), +('13', '105', '14', '111535', '175104', '22'), +('13', '105', '14', '111237', '155496', '22'), +('13', '105', '14', '111235', '153353', '22'), +('13', '105', '11', '133816', '229771', '22'), +('13', '105', '11', '111335', '176370', '22'), +('13', '105', '11', '111337', '176302', '22'), +('13', '105', '11', '111338', '172765', '22'), +('13', '105', '22', '12425', '0', '21'), +('13', '105', '22', '21807', '0', '21'), +('13', '105', '22', '39342', '0', '21'), +('13', '105', '22', '23597', '0', '21'), +('13', '105', '1', '98769', '284353', '21'), +('13', '105', '1', '128691', '229866', '21'), +('13', '105', '1', '111311', '178860', '21'), +('13', '105', '1', '111307', '176767', '21'), +('13', '105', '2', '62985', '109901', '21'), +('13', '105', '2', '94056', '109791', '21'), +('13', '105', '2', '104424', '96096', '21'), +('13', '105', '2', '54845', '71104', '21'), +('13', '105', '3', '111314', '177238', '21'), +('13', '105', '3', '111316', '175484', '21'), +('13', '105', '3', '111315', '174601', '21'), +('13', '105', '3', '111013', '155387', '21'), +('13', '105', '5', '111319', '176732', '21'), +('13', '105', '5', '111321', '175928', '21'), +('13', '105', '5', '111318', '174067', '21'), +('13', '105', '5', '111018', '154881', '21'), +('13', '105', '8', '111332', '177354', '21'), +('13', '105', '8', '111329', '176353', '21'), +('13', '105', '8', '111331', '172712', '21'), +('13', '105', '8', '111031', '155603', '21'), +('13', '105', '6', '111323', '177204', '21'), +('13', '105', '6', '111326', '175771', '21'), +('13', '105', '6', '111325', '175715', '21'), +('13', '105', '6', '111022', '155353', '21'), +('13', '105', '17', '94535', '312875', '21'), +('13', '105', '17', '56043', '117785', '21'), +('13', '105', '17', '56084', '114176', '21'), +('13', '105', '17', '104427', '99757', '21'), +('13', '105', '7', '128648', '231921', '21'), +('13', '105', '7', '56080', '110069', '21'), +('13', '105', '7', '56040', '109375', '21'), +('13', '105', '7', '104425', '95533', '21'), +('13', '105', '9', '67098', '179966', '21'), +('13', '105', '9', '56070', '106412', '21'), +('13', '105', '9', '56031', '106370', '21'), +('13', '105', '9', '62984', '106144', '21'), +('13', '105', '15', '111349', '179201', '21'), +('13', '105', '15', '111344', '177454', '21'), +('13', '105', '15', '111340', '177068', '21'), +('13', '105', '15', '111346', '176790', '21'), +('13', '105', '20', '128733', '227223', '21'), +('13', '105', '20', '111356', '177332', '21'), +('13', '105', '20', '111352', '176411', '21'), +('13', '105', '20', '111351', '173886', '21'), +('13', '105', '12', '56035', '108436', '21'), +('13', '105', '12', '56074', '107167', '21'), +('13', '105', '12', '104422', '93385', '21'), +('13', '105', '12', '49656', '70140', '21'), +('13', '105', '18', '56041', '114272', '21'), +('13', '105', '18', '62986', '112297', '21'), +('13', '105', '18', '104426', '97015', '21'), +('13', '105', '18', '54851', '71490', '21'), +('13', '105', '19', '81763', '110811', '21'), +('13', '105', '19', '62990', '110780', '21'), +('13', '105', '19', '56075', '109989', '21'), +('13', '105', '19', '56037', '109957', '21'), +('13', '105', '13', '111521', '183113', '21'), +('13', '105', '13', '111524', '173770', '21'), +('13', '105', '13', '111519', '173755', '21'), +('13', '105', '13', '111221', '162271', '21'), +('13', '105', '14', '111537', '177348', '21'), +('13', '105', '14', '111535', '175104', '21'), +('13', '105', '14', '111237', '155496', '21'), +('13', '105', '14', '111235', '153353', '21'), +('13', '105', '11', '133816', '229771', '21'), +('13', '105', '11', '111335', '176370', '21'), +('13', '105', '11', '111337', '176302', '21'), +('13', '105', '11', '111338', '172765', '21'), +('13', '106', '22', '12425', '0', '23'), +('13', '106', '22', '21807', '0', '23'), +('13', '106', '22', '39342', '0', '23'), +('13', '106', '22', '23597', '0', '23'), +('13', '106', '1', '98769', '284357', '23'), +('13', '106', '1', '128691', '229873', '23'), +('13', '106', '1', '111311', '178864', '23'), +('13', '106', '1', '111307', '176776', '23'), +('13', '106', '2', '62985', '109905', '23'), +('13', '106', '2', '94056', '109794', '23'), +('13', '106', '2', '104424', '96104', '23'), +('13', '106', '2', '54845', '71110', '23'), +('13', '106', '3', '111314', '177244', '23'), +('13', '106', '3', '111316', '175490', '23'), +('13', '106', '3', '111315', '174607', '23'), +('13', '106', '3', '111013', '155394', '23'), +('13', '106', '5', '111319', '176739', '23'), +('13', '106', '5', '111321', '175933', '23'), +('13', '106', '5', '111318', '174075', '23'), +('13', '106', '5', '111018', '154888', '23'), +('13', '106', '8', '111332', '177361', '23'), +('13', '106', '8', '111329', '176361', '23'), +('13', '106', '8', '111331', '172718', '23'), +('13', '106', '8', '111031', '155610', '23'), +('13', '106', '6', '111323', '177210', '23'), +('13', '106', '6', '111326', '175779', '23'), +('13', '106', '6', '111325', '175720', '23'), +('13', '106', '6', '111022', '155359', '23'), +('13', '106', '17', '94535', '312883', '23'), +('13', '106', '17', '56043', '117791', '23'), +('13', '106', '17', '56084', '114182', '23'), +('13', '106', '17', '104427', '99764', '23'), +('13', '106', '7', '128648', '231925', '23'), +('13', '106', '7', '56080', '110076', '23'), +('13', '106', '7', '56040', '109385', '23'), +('13', '106', '7', '104425', '95539', '23'), +('13', '106', '9', '67098', '179970', '23'), +('13', '106', '9', '56070', '106417', '23'), +('13', '106', '9', '56031', '106380', '23'), +('13', '106', '9', '62984', '106149', '23'), +('13', '106', '15', '111349', '179209', '23'), +('13', '106', '15', '111344', '177458', '23'), +('13', '106', '15', '111340', '177073', '23'), +('13', '106', '15', '111346', '176796', '23'), +('13', '106', '20', '128733', '227229', '23'), +('13', '106', '20', '111356', '177338', '23'), +('13', '106', '20', '111352', '176416', '23'), +('13', '106', '20', '111351', '173894', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '106', '12', '56035', '108446', '23'), +('13', '106', '12', '56074', '107173', '23'), +('13', '106', '12', '104422', '93393', '23'), +('13', '106', '12', '49656', '70141', '23'), +('13', '106', '18', '56041', '114281', '23'), +('13', '106', '18', '62986', '112302', '23'), +('13', '106', '18', '104426', '97017', '23'), +('13', '106', '18', '54851', '71494', '23'), +('13', '106', '19', '81763', '110821', '23'), +('13', '106', '19', '62990', '110787', '23'), +('13', '106', '19', '56075', '109994', '23'), +('13', '106', '19', '56037', '109960', '23'), +('13', '106', '13', '111521', '183118', '23'), +('13', '106', '13', '111524', '173776', '23'), +('13', '106', '13', '111519', '173762', '23'), +('13', '106', '13', '111221', '162277', '23'), +('13', '106', '14', '111537', '177353', '23'), +('13', '106', '14', '111535', '175108', '23'), +('13', '106', '14', '111237', '155501', '23'), +('13', '106', '14', '111235', '153357', '23'), +('13', '106', '11', '133816', '229775', '23'), +('13', '106', '11', '111335', '176376', '23'), +('13', '106', '11', '111337', '176308', '23'), +('13', '106', '11', '111338', '172772', '23'), +('13', '107', '22', '12425', '0', '23'), +('13', '107', '22', '21807', '0', '23'), +('13', '107', '22', '39342', '0', '23'), +('13', '107', '22', '23597', '0', '23'), +('13', '107', '1', '98769', '284362', '23'), +('13', '107', '1', '128691', '229879', '23'), +('13', '107', '1', '111311', '178869', '23'), +('13', '107', '1', '111307', '176784', '23'), +('13', '107', '2', '62985', '109909', '23'), +('13', '107', '2', '94056', '109797', '23'), +('13', '107', '2', '104424', '96112', '23'), +('13', '107', '2', '54845', '71116', '23'), +('13', '107', '3', '111314', '177251', '23'), +('13', '107', '3', '111316', '175497', '23'), +('13', '107', '3', '111315', '174613', '23'), +('13', '107', '3', '111013', '155400', '23'), +('13', '107', '5', '111319', '176746', '23'), +('13', '107', '5', '111321', '175938', '23'), +('13', '107', '5', '111318', '174082', '23'), +('13', '107', '5', '111018', '154895', '23'), +('13', '107', '8', '111332', '177367', '23'), +('13', '107', '8', '111329', '176368', '23'), +('13', '107', '8', '111331', '172723', '23'), +('13', '107', '8', '111031', '155617', '23'), +('13', '107', '6', '111323', '177215', '23'), +('13', '107', '6', '111326', '175787', '23'), +('13', '107', '6', '111325', '175724', '23'), +('13', '107', '6', '111022', '155365', '23'), +('13', '107', '17', '94535', '312891', '23'), +('13', '107', '17', '56043', '117796', '23'), +('13', '107', '17', '56084', '114188', '23'), +('13', '107', '17', '104427', '99770', '23'), +('13', '107', '7', '128648', '231928', '23'), +('13', '107', '7', '56080', '110083', '23'), +('13', '107', '7', '56040', '109395', '23'), +('13', '107', '7', '104425', '95544', '23'), +('13', '107', '9', '67098', '179974', '23'), +('13', '107', '9', '56070', '106423', '23'), +('13', '107', '9', '56031', '106390', '23'), +('13', '107', '9', '62984', '106154', '23'), +('13', '107', '15', '111349', '179217', '23'), +('13', '107', '15', '111344', '177463', '23'), +('13', '107', '15', '111340', '177079', '23'), +('13', '107', '15', '111346', '176802', '23'), +('13', '107', '20', '128733', '227235', '23'), +('13', '107', '20', '111356', '177344', '23'), +('13', '107', '20', '111352', '176422', '23'), +('13', '107', '20', '111351', '173901', '23'), +('13', '107', '12', '56035', '108455', '23'), +('13', '107', '12', '56074', '107179', '23'), +('13', '107', '12', '104422', '93401', '23'), +('13', '107', '12', '49656', '70142', '23'), +('13', '107', '18', '56041', '114289', '23'), +('13', '107', '18', '62986', '112307', '23'), +('13', '107', '18', '104426', '97019', '23'), +('13', '107', '18', '54851', '71498', '23'), +('13', '107', '19', '81763', '110831', '23'), +('13', '107', '19', '62990', '110795', '23'), +('13', '107', '19', '56075', '109998', '23'), +('13', '107', '19', '56037', '109962', '23'), +('13', '107', '13', '111521', '183123', '23'), +('13', '107', '13', '111524', '173783', '23'), +('13', '107', '13', '111519', '173769', '23'), +('13', '107', '13', '111221', '162283', '23'), +('13', '107', '14', '111537', '177358', '23'), +('13', '107', '14', '111535', '175112', '23'), +('13', '107', '14', '111237', '155507', '23'), +('13', '107', '14', '111235', '153361', '23'), +('13', '107', '11', '133816', '229779', '23'), +('13', '107', '11', '111335', '176382', '23'), +('13', '107', '11', '111337', '176314', '23'), +('13', '107', '11', '111338', '172778', '23'), +('13', '108', '22', '12425', '0', '23'), +('13', '108', '22', '21807', '0', '23'), +('13', '108', '22', '39342', '0', '23'), +('13', '108', '22', '23597', '0', '23'), +('13', '108', '1', '98769', '284366', '23'), +('13', '108', '1', '128691', '229886', '23'), +('13', '108', '1', '111311', '178873', '23'), +('13', '108', '1', '111307', '176792', '23'), +('13', '108', '2', '62985', '109913', '23'), +('13', '108', '2', '94056', '109801', '23'), +('13', '108', '2', '104424', '96120', '23'), +('13', '108', '2', '54845', '71122', '23'), +('13', '108', '3', '111314', '177257', '23'), +('13', '108', '3', '111316', '175503', '23'), +('13', '108', '3', '111315', '174619', '23'), +('13', '108', '3', '111013', '155407', '23'), +('13', '108', '5', '111319', '176753', '23'), +('13', '108', '5', '111321', '175943', '23'), +('13', '108', '5', '111318', '174090', '23'), +('13', '108', '5', '111018', '154902', '23'), +('13', '108', '8', '111332', '177374', '23'), +('13', '108', '8', '111329', '176376', '23'), +('13', '108', '8', '111331', '172728', '23'), +('13', '108', '8', '111031', '155623', '23'), +('13', '108', '6', '111323', '177221', '23'), +('13', '108', '6', '111326', '175794', '23'), +('13', '108', '6', '111325', '175729', '23'), +('13', '108', '6', '111022', '155371', '23'), +('13', '108', '17', '94535', '312900', '23'), +('13', '108', '17', '56043', '117802', '23'), +('13', '108', '17', '56084', '114195', '23'), +('13', '108', '17', '104427', '99776', '23'), +('13', '108', '7', '128648', '231932', '23'), +('13', '108', '7', '56080', '110090', '23'), +('13', '108', '7', '56040', '109405', '23'), +('13', '108', '7', '104425', '95550', '23'), +('13', '108', '9', '67098', '179979', '23'), +('13', '108', '9', '56070', '106428', '23'), +('13', '108', '9', '56031', '106400', '23'), +('13', '108', '9', '62984', '106159', '23'), +('13', '108', '15', '111349', '179225', '23'), +('13', '108', '15', '111344', '177468', '23'), +('13', '108', '15', '111340', '177084', '23'), +('13', '108', '15', '111346', '176808', '23'), +('13', '108', '20', '128733', '227241', '23'), +('13', '108', '20', '111356', '177350', '23'), +('13', '108', '20', '111352', '176427', '23'), +('13', '108', '20', '111351', '173909', '23'), +('13', '108', '12', '56035', '108465', '23'), +('13', '108', '12', '56074', '107185', '23'), +('13', '108', '12', '104422', '93409', '23'), +('13', '108', '12', '49656', '70143', '23'), +('13', '108', '18', '56041', '114298', '23'), +('13', '108', '18', '62986', '112312', '23'), +('13', '108', '18', '104426', '97021', '23'), +('13', '108', '18', '54851', '71502', '23'), +('13', '108', '19', '81763', '110841', '23'), +('13', '108', '19', '62990', '110802', '23'), +('13', '108', '19', '56075', '110003', '23'), +('13', '108', '19', '56037', '109965', '23'), +('13', '108', '13', '111521', '183129', '23'), +('13', '108', '13', '111524', '173790', '23'), +('13', '108', '13', '111519', '173777', '23'), +('13', '108', '13', '111221', '162289', '23'), +('13', '108', '14', '111537', '177363', '23'), +('13', '108', '14', '111535', '175116', '23'), +('13', '108', '14', '111237', '155512', '23'), +('13', '108', '14', '111235', '153365', '23'), +('13', '108', '11', '133816', '229783', '23'), +('13', '108', '11', '111335', '176388', '23'), +('13', '108', '11', '111337', '176320', '23'), +('13', '108', '11', '111338', '172784', '23'), +('13', '109', '22', '12425', '0', '23'), +('13', '109', '22', '21807', '0', '23'), +('13', '109', '22', '39342', '0', '23'), +('13', '109', '22', '23597', '0', '23'), +('13', '109', '1', '98769', '284370', '23'), +('13', '109', '1', '128691', '229892', '23'), +('13', '109', '1', '111311', '178877', '23'), +('13', '109', '1', '111307', '176800', '23'), +('13', '109', '2', '62985', '109917', '23'), +('13', '109', '2', '94056', '109804', '23'), +('13', '109', '2', '104424', '96128', '23'), +('13', '109', '2', '54845', '71128', '23'), +('13', '109', '3', '111314', '177264', '23'), +('13', '109', '3', '111316', '175509', '23'), +('13', '109', '3', '111315', '174625', '23'), +('13', '109', '3', '111013', '155413', '23'), +('13', '109', '5', '111319', '176760', '23'), +('13', '109', '5', '111321', '175948', '23'), +('13', '109', '5', '111318', '174097', '23'), +('13', '109', '5', '111018', '154910', '23'), +('13', '109', '8', '111332', '177381', '23'), +('13', '109', '8', '111329', '176383', '23'), +('13', '109', '8', '111331', '172734', '23'), +('13', '109', '8', '111031', '155630', '23'), +('13', '109', '6', '111323', '177227', '23'), +('13', '109', '6', '111326', '175802', '23'), +('13', '109', '6', '111325', '175734', '23'), +('13', '109', '6', '111022', '155376', '23'), +('13', '109', '17', '94535', '312908', '23'), +('13', '109', '17', '56043', '117807', '23'), +('13', '109', '17', '56084', '114201', '23'), +('13', '109', '17', '104427', '99782', '23'), +('13', '109', '7', '128648', '231936', '23'), +('13', '109', '7', '56080', '110097', '23'), +('13', '109', '7', '56040', '109415', '23'), +('13', '109', '7', '104425', '95555', '23'), +('13', '109', '9', '67098', '179983', '23'), +('13', '109', '9', '56070', '106433', '23'), +('13', '109', '9', '56031', '106410', '23'), +('13', '109', '9', '62984', '106163', '23'), +('13', '109', '15', '111349', '179234', '23'), +('13', '109', '15', '111344', '177473', '23'), +('13', '109', '15', '111340', '177090', '23'), +('13', '109', '15', '111346', '176814', '23'), +('13', '109', '20', '128733', '227247', '23'), +('13', '109', '20', '111356', '177356', '23'), +('13', '109', '20', '111352', '176432', '23'), +('13', '109', '20', '111351', '173916', '23'), +('13', '109', '12', '56035', '108474', '23'), +('13', '109', '12', '56074', '107191', '23'), +('13', '109', '12', '104422', '93417', '23'), +('13', '109', '12', '49656', '70143', '23'), +('13', '109', '18', '56041', '114306', '23'), +('13', '109', '18', '62986', '112317', '23'), +('13', '109', '18', '104426', '97023', '23'), +('13', '109', '18', '54851', '71507', '23'), +('13', '109', '19', '81763', '110851', '23'), +('13', '109', '19', '62990', '110810', '23'), +('13', '109', '19', '56075', '110008', '23'), +('13', '109', '19', '56037', '109967', '23'), +('13', '109', '13', '111521', '183134', '23'), +('13', '109', '13', '111524', '173796', '23'), +('13', '109', '13', '111519', '173784', '23'), +('13', '109', '13', '111221', '162295', '23'), +('13', '109', '14', '111537', '177368', '23'), +('13', '109', '14', '111535', '175120', '23'), +('13', '109', '14', '111237', '155517', '23'), +('13', '109', '14', '111235', '153369', '23'), +('13', '109', '11', '133816', '229787', '23'), +('13', '109', '11', '111335', '176393', '23'), +('13', '109', '11', '111337', '176326', '23'), +('13', '109', '11', '111338', '172790', '23'), +('13', '110', '22', '12425', '0', '25'), +('13', '110', '22', '39342', '0', '25'), +('13', '110', '22', '7867', '0', '25'), +('13', '110', '22', '53550', '0', '25'), +('13', '110', '1', '98769', '284375', '25'), +('13', '110', '1', '128691', '229898', '25'), +('13', '110', '1', '111311', '178881', '25'), +('13', '110', '1', '111307', '176808', '25'), +('13', '110', '2', '62985', '109921', '25'), +('13', '110', '2', '94056', '109807', '25'), +('13', '110', '2', '104424', '96136', '25'), +('13', '110', '2', '54845', '71133', '25'), +('13', '110', '3', '111314', '177270', '25'), +('13', '110', '3', '111316', '175515', '25'), +('13', '110', '3', '111315', '174632', '25'), +('13', '110', '3', '111013', '155420', '25'), +('13', '110', '5', '111319', '176767', '25'), +('13', '110', '5', '111321', '175953', '25'), +('13', '110', '5', '111318', '174105', '25'), +('13', '110', '5', '111018', '154917', '25'), +('13', '110', '8', '111332', '177387', '25'), +('13', '110', '8', '111329', '176391', '25'), +('13', '110', '8', '111331', '172739', '25'), +('13', '110', '8', '111031', '155637', '25'), +('13', '110', '6', '111323', '177233', '25'), +('13', '110', '6', '111326', '175810', '25'), +('13', '110', '6', '111325', '175739', '25'), +('13', '110', '6', '111022', '155382', '25'), +('13', '110', '17', '94535', '312916', '25'), +('13', '110', '17', '56043', '117813', '25'), +('13', '110', '17', '56084', '114207', '25'), +('13', '110', '17', '104427', '99788', '25'), +('13', '110', '7', '128648', '231940', '25'), +('13', '110', '7', '56080', '110104', '25'), +('13', '110', '7', '56040', '109426', '25'), +('13', '110', '7', '104425', '95561', '25'), +('13', '110', '9', '67098', '179987', '25'), +('13', '110', '9', '56070', '106439', '25'), +('13', '110', '9', '56031', '106420', '25'), +('13', '110', '9', '62984', '106168', '25'), +('13', '110', '15', '111349', '179242', '25'), +('13', '110', '15', '111344', '177477', '25'), +('13', '110', '15', '111340', '177095', '25'), +('13', '110', '15', '111346', '176820', '25'), +('13', '110', '20', '128733', '227253', '25'), +('13', '110', '20', '111356', '177363', '25'), +('13', '110', '20', '111352', '176438', '25'), +('13', '110', '20', '111351', '173924', '25'), +('13', '110', '12', '56035', '108484', '25'), +('13', '110', '12', '56074', '107197', '25'), +('13', '110', '12', '104422', '93425', '25'), +('13', '110', '12', '49656', '70144', '25'), +('13', '110', '18', '56041', '114315', '25'), +('13', '110', '18', '62986', '112322', '25'), +('13', '110', '18', '104426', '97025', '25'), +('13', '110', '18', '54851', '71511', '25'), +('13', '110', '19', '81763', '110861', '25'), +('13', '110', '19', '62990', '110817', '25'), +('13', '110', '19', '56075', '110013', '25'), +('13', '110', '19', '56037', '109970', '25'), +('13', '110', '13', '111521', '183140', '25'), +('13', '110', '13', '111524', '173803', '25'), +('13', '110', '13', '111519', '173792', '25'), +('13', '110', '13', '111221', '162301', '25'), +('13', '110', '14', '111537', '177373', '25'), +('13', '110', '14', '111535', '175124', '25'), +('13', '110', '14', '111237', '155522', '25'), +('13', '110', '14', '111235', '153373', '25'), +('13', '110', '11', '85213', '257047', '25'), +('13', '110', '11', '133816', '229792', '25'), +('13', '110', '11', '111335', '176399', '25'), +('13', '110', '11', '111337', '176332', '25'), +('13', '110', '22', '12425', '0', '24'), +('13', '110', '22', '39342', '0', '24'), +('13', '110', '22', '7867', '0', '24'), +('13', '110', '22', '53550', '0', '24'), +('13', '110', '1', '98769', '284375', '24'), +('13', '110', '1', '128691', '229898', '24'), +('13', '110', '1', '111311', '178881', '24'), +('13', '110', '1', '111307', '176808', '24'), +('13', '110', '2', '62985', '109921', '24'), +('13', '110', '2', '94056', '109807', '24'), +('13', '110', '2', '104424', '96136', '24'), +('13', '110', '2', '54845', '71133', '24'), +('13', '110', '3', '111314', '177270', '24'), +('13', '110', '3', '111316', '175515', '24'), +('13', '110', '3', '111315', '174632', '24'), +('13', '110', '3', '111013', '155420', '24'), +('13', '110', '5', '111319', '176767', '24'), +('13', '110', '5', '111321', '175953', '24'), +('13', '110', '5', '111318', '174105', '24'), +('13', '110', '5', '111018', '154917', '24'), +('13', '110', '8', '111332', '177387', '24'), +('13', '110', '8', '111329', '176391', '24'), +('13', '110', '8', '111331', '172739', '24'), +('13', '110', '8', '111031', '155637', '24'), +('13', '110', '6', '111323', '177233', '24'), +('13', '110', '6', '111326', '175810', '24'), +('13', '110', '6', '111325', '175739', '24'), +('13', '110', '6', '111022', '155382', '24'), +('13', '110', '17', '94535', '312916', '24'), +('13', '110', '17', '56043', '117813', '24'), +('13', '110', '17', '56084', '114207', '24'), +('13', '110', '17', '104427', '99788', '24'), +('13', '110', '7', '128648', '231940', '24'), +('13', '110', '7', '56080', '110104', '24'), +('13', '110', '7', '56040', '109426', '24'), +('13', '110', '7', '104425', '95561', '24'), +('13', '110', '9', '67098', '179987', '24'), +('13', '110', '9', '56070', '106439', '24'), +('13', '110', '9', '56031', '106420', '24'), +('13', '110', '9', '62984', '106168', '24'), +('13', '110', '15', '111349', '179242', '24'), +('13', '110', '15', '111344', '177477', '24'), +('13', '110', '15', '111340', '177095', '24'), +('13', '110', '15', '111346', '176820', '24'), +('13', '110', '20', '128733', '227253', '24'), +('13', '110', '20', '111356', '177363', '24'), +('13', '110', '20', '111352', '176438', '24'), +('13', '110', '20', '111351', '173924', '24'), +('13', '110', '12', '56035', '108484', '24'), +('13', '110', '12', '56074', '107197', '24'), +('13', '110', '12', '104422', '93425', '24'), +('13', '110', '12', '49656', '70144', '24'), +('13', '110', '18', '56041', '114315', '24'), +('13', '110', '18', '62986', '112322', '24'), +('13', '110', '18', '104426', '97025', '24'), +('13', '110', '18', '54851', '71511', '24'), +('13', '110', '19', '81763', '110861', '24'), +('13', '110', '19', '62990', '110817', '24'), +('13', '110', '19', '56075', '110013', '24'), +('13', '110', '19', '56037', '109970', '24'), +('13', '110', '13', '111521', '183140', '24'), +('13', '110', '13', '111524', '173803', '24'), +('13', '110', '13', '111519', '173792', '24'), +('13', '110', '13', '111221', '162301', '24'), +('13', '110', '14', '111537', '177373', '24'), +('13', '110', '14', '111535', '175124', '24'), +('13', '110', '14', '111237', '155522', '24'), +('13', '110', '14', '111235', '153373', '24'), +('13', '110', '11', '85213', '257047', '24'), +('13', '110', '11', '133816', '229792', '24'), +('13', '110', '11', '111335', '176399', '24'), +('13', '110', '11', '111337', '176332', '24'), +('13', '111', '22', '12425', '0', '25'), +('13', '111', '22', '39342', '0', '25'), +('13', '111', '22', '7867', '0', '25'), +('13', '111', '22', '53550', '0', '25'), +('13', '111', '1', '98769', '284379', '25'), +('13', '111', '1', '128691', '229905', '25'), +('13', '111', '1', '111311', '178885', '25'), +('13', '111', '1', '111307', '176816', '25'), +('13', '111', '2', '62985', '109924', '25'), +('13', '111', '2', '94056', '109811', '25'), +('13', '111', '2', '104424', '96144', '25'), +('13', '111', '2', '54845', '71139', '25'), +('13', '111', '3', '111314', '177277', '25'), +('13', '111', '3', '111316', '175521', '25'), +('13', '111', '3', '111315', '174638', '25'), +('13', '111', '3', '111013', '155426', '25'), +('13', '111', '5', '111319', '176774', '25'), +('13', '111', '5', '111321', '175959', '25'), +('13', '111', '5', '111318', '174112', '25'), +('13', '111', '5', '111018', '154924', '25'), +('13', '111', '8', '111332', '177394', '25'), +('13', '111', '8', '111329', '176398', '25'), +('13', '111', '8', '111331', '172744', '25'), +('13', '111', '8', '111031', '155643', '25'), +('13', '111', '6', '111323', '177238', '25'), +('13', '111', '6', '111326', '175818', '25'), +('13', '111', '6', '111325', '175743', '25'), +('13', '111', '6', '111022', '155388', '25'), +('13', '111', '17', '94535', '312924', '25'), +('13', '111', '17', '56043', '117819', '25'), +('13', '111', '17', '56084', '114213', '25'), +('13', '111', '17', '104427', '99794', '25'), +('13', '111', '7', '128648', '231943', '25'), +('13', '111', '7', '56080', '110111', '25'), +('13', '111', '7', '56040', '109436', '25'), +('13', '111', '7', '104425', '95566', '25'), +('13', '111', '9', '67098', '179992', '25'), +('13', '111', '9', '56070', '106444', '25'), +('13', '111', '9', '56031', '106430', '25'), +('13', '111', '9', '62984', '106173', '25'), +('13', '111', '15', '111349', '179250', '25'), +('13', '111', '15', '111344', '177482', '25'), +('13', '111', '15', '111340', '177101', '25'), +('13', '111', '15', '111346', '176826', '25'), +('13', '111', '20', '128733', '227259', '25'), +('13', '111', '20', '111356', '177369', '25'), +('13', '111', '20', '111352', '176443', '25'), +('13', '111', '20', '111351', '173931', '25'), +('13', '111', '12', '56035', '108493', '25'), +('13', '111', '12', '56074', '107204', '25'), +('13', '111', '12', '104422', '93432', '25'), +('13', '111', '12', '49656', '70145', '25'), +('13', '111', '18', '56041', '114323', '25'), +('13', '111', '18', '62986', '112327', '25'), +('13', '111', '18', '104426', '97026', '25'), +('13', '111', '18', '54851', '71515', '25'), +('13', '111', '19', '81763', '110870', '25'), +('13', '111', '19', '62990', '110825', '25'), +('13', '111', '19', '56075', '110017', '25'), +('13', '111', '19', '56037', '109972', '25'), +('13', '111', '13', '111521', '183145', '25'), +('13', '111', '13', '111524', '173810', '25'), +('13', '111', '13', '111519', '173800', '25'), +('13', '111', '13', '111221', '162307', '25'), +('13', '111', '14', '111537', '177379', '25'), +('13', '111', '14', '111535', '175128', '25'), +('13', '111', '14', '111237', '155527', '25'), +('13', '111', '14', '111235', '153377', '25'), +('13', '111', '11', '85213', '257052', '25'), +('13', '111', '11', '133816', '229796', '25'), +('13', '111', '11', '111335', '176405', '25'), +('13', '111', '11', '111337', '176338', '25'), +('13', '112', '22', '12425', '0', '25'), +('13', '112', '22', '39342', '0', '25'), +('13', '112', '22', '7867', '0', '25'), +('13', '112', '22', '53550', '0', '25'), +('13', '112', '1', '98769', '284383', '25'), +('13', '112', '1', '128691', '229911', '25'), +('13', '112', '1', '111311', '178889', '25'), +('13', '112', '1', '111307', '176825', '25'), +('13', '112', '2', '62985', '109928', '25'), +('13', '112', '2', '94056', '109814', '25'), +('13', '112', '2', '104424', '96152', '25'), +('13', '112', '2', '54845', '71145', '25'), +('13', '112', '3', '111314', '177283', '25'), +('13', '112', '3', '111316', '175527', '25'), +('13', '112', '3', '111315', '174644', '25'), +('13', '112', '3', '111013', '155433', '25'), +('13', '112', '5', '111319', '176782', '25'), +('13', '112', '5', '111321', '175964', '25'), +('13', '112', '5', '111318', '174120', '25'), +('13', '112', '5', '111018', '154931', '25'), +('13', '112', '8', '111332', '177401', '25'), +('13', '112', '8', '111329', '176406', '25'), +('13', '112', '8', '111331', '172750', '25'), +('13', '112', '8', '111031', '155650', '25'), +('13', '112', '6', '111323', '177244', '25'), +('13', '112', '6', '111326', '175825', '25'), +('13', '112', '6', '111325', '175748', '25'), +('13', '112', '6', '111022', '155393', '25'), +('13', '112', '17', '94535', '312932', '25'), +('13', '112', '17', '56043', '117824', '25'), +('13', '112', '17', '56084', '114219', '25'), +('13', '112', '17', '104427', '99800', '25'), +('13', '112', '7', '128648', '231947', '25'), +('13', '112', '7', '56080', '110118', '25'), +('13', '112', '7', '56040', '109446', '25'), +('13', '112', '7', '104425', '95572', '25'), +('13', '112', '9', '67098', '179996', '25'), +('13', '112', '9', '56070', '106449', '25'), +('13', '112', '9', '56031', '106440', '25'), +('13', '112', '9', '62984', '106178', '25'), +('13', '112', '15', '111349', '179258', '25'), +('13', '112', '15', '111344', '177487', '25'), +('13', '112', '15', '111340', '177106', '25'), +('13', '112', '15', '111346', '176832', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('13', '112', '20', '128733', '227265', '25'), +('13', '112', '20', '111356', '177375', '25'), +('13', '112', '20', '111352', '176448', '25'), +('13', '112', '20', '111351', '173939', '25'), +('13', '112', '12', '56035', '108503', '25'), +('13', '112', '12', '56074', '107210', '25'), +('13', '112', '12', '104422', '93440', '25'), +('13', '112', '12', '49656', '70146', '25'), +('13', '112', '18', '56041', '114332', '25'), +('13', '112', '18', '62986', '112332', '25'), +('13', '112', '18', '104426', '97028', '25'), +('13', '112', '18', '54851', '71519', '25'), +('13', '112', '19', '81763', '110880', '25'), +('13', '112', '19', '62990', '110832', '25'), +('13', '112', '19', '56075', '110022', '25'), +('13', '112', '19', '56037', '109975', '25'), +('13', '112', '13', '111521', '183151', '25'), +('13', '112', '13', '111524', '173817', '25'), +('13', '112', '13', '111519', '173807', '25'), +('13', '112', '13', '111221', '162313', '25'), +('13', '112', '14', '111537', '177384', '25'), +('13', '112', '14', '111535', '175132', '25'), +('13', '112', '14', '111237', '155532', '25'), +('13', '112', '14', '111235', '153381', '25'), +('13', '112', '11', '85213', '257056', '25'), +('13', '112', '11', '133816', '229800', '25'), +('13', '112', '11', '111335', '176411', '25'), +('13', '112', '11', '111337', '176345', '25'), +('13', '113', '22', '12425', '0', '25'), +('13', '113', '22', '39342', '0', '25'), +('13', '113', '22', '7867', '0', '25'), +('13', '113', '22', '53550', '0', '25'), +('13', '113', '1', '98769', '284387', '25'), +('13', '113', '1', '128691', '229918', '25'), +('13', '113', '1', '111311', '178893', '25'), +('13', '113', '1', '111307', '176833', '25'), +('13', '113', '2', '62985', '109932', '25'), +('13', '113', '2', '94056', '109817', '25'), +('13', '113', '2', '104424', '96160', '25'), +('13', '113', '2', '54845', '71151', '25'), +('13', '113', '3', '111314', '177290', '25'), +('13', '113', '3', '111316', '175533', '25'), +('13', '113', '3', '111315', '174650', '25'), +('13', '113', '3', '111013', '155439', '25'), +('13', '113', '5', '111319', '176789', '25'), +('13', '113', '5', '111321', '175969', '25'), +('13', '113', '5', '111318', '174127', '25'), +('13', '113', '5', '111018', '154938', '25'), +('13', '113', '8', '111332', '177407', '25'), +('13', '113', '8', '111329', '176413', '25'), +('13', '113', '8', '111331', '172755', '25'), +('13', '113', '8', '111031', '155657', '25'), +('13', '113', '6', '111323', '177250', '25'), +('13', '113', '6', '111326', '175833', '25'), +('13', '113', '6', '111325', '175753', '25'), +('13', '113', '6', '111022', '155399', '25'), +('13', '113', '17', '94535', '312940', '25'), +('13', '113', '17', '56043', '117830', '25'), +('13', '113', '17', '56084', '114225', '25'), +('13', '113', '17', '104427', '99807', '25'), +('13', '113', '7', '128648', '231951', '25'), +('13', '113', '7', '56080', '110126', '25'), +('13', '113', '7', '56040', '109456', '25'), +('13', '113', '7', '104425', '95577', '25'), +('13', '113', '9', '67098', '180000', '25'), +('13', '113', '9', '56070', '106454', '25'), +('13', '113', '9', '56031', '106450', '25'), +('13', '113', '9', '62984', '106183', '25'), +('13', '113', '15', '111349', '179266', '25'), +('13', '113', '15', '111344', '177491', '25'), +('13', '113', '15', '111340', '177112', '25'), +('13', '113', '15', '111346', '176837', '25'), +('13', '113', '20', '128733', '227270', '25'), +('13', '113', '20', '111356', '177381', '25'), +('13', '113', '20', '111352', '176454', '25'), +('13', '113', '20', '111351', '173946', '25'), +('13', '113', '12', '56035', '108512', '25'), +('13', '113', '12', '56074', '107216', '25'), +('13', '113', '12', '104422', '93448', '25'), +('13', '113', '12', '49656', '70147', '25'), +('13', '113', '18', '56041', '114340', '25'), +('13', '113', '18', '62986', '112337', '25'), +('13', '113', '18', '104426', '97030', '25'), +('13', '113', '18', '54851', '71523', '25'), +('13', '113', '19', '81763', '110890', '25'), +('13', '113', '19', '62990', '110840', '25'), +('13', '113', '19', '56075', '110027', '25'), +('13', '113', '19', '56037', '109977', '25'), +('13', '113', '13', '111521', '183156', '25'), +('13', '113', '13', '111524', '173823', '25'), +('13', '113', '13', '111519', '173815', '25'), +('13', '113', '13', '111221', '162319', '25'), +('13', '113', '14', '111537', '177389', '25'), +('13', '113', '14', '111535', '175136', '25'), +('13', '113', '14', '111237', '155537', '25'), +('13', '113', '14', '111235', '153385', '25'), +('13', '113', '11', '85213', '257060', '25'), +('13', '113', '11', '133816', '229804', '25'), +('13', '113', '11', '111335', '176417', '25'), +('13', '113', '11', '111337', '176351', '25'), +('13', '114', '22', '12425', '0', '25'), +('13', '114', '22', '39342', '0', '25'), +('13', '114', '22', '7867', '0', '25'), +('13', '114', '22', '53550', '0', '25'), +('13', '114', '1', '98769', '284392', '25'), +('13', '114', '1', '128691', '229924', '25'), +('13', '114', '1', '111311', '178897', '25'), +('13', '114', '1', '111307', '176841', '25'), +('13', '114', '2', '62985', '109936', '25'), +('13', '114', '2', '94056', '109821', '25'), +('13', '114', '2', '104424', '96168', '25'), +('13', '114', '2', '54845', '71157', '25'), +('13', '114', '3', '111314', '177296', '25'), +('13', '114', '3', '111316', '175539', '25'), +('13', '114', '3', '111315', '174656', '25'), +('13', '114', '3', '111013', '155446', '25'), +('13', '114', '5', '111319', '176796', '25'), +('13', '114', '5', '111321', '175974', '25'), +('13', '114', '5', '111318', '174135', '25'), +('13', '114', '5', '111018', '154945', '25'), +('13', '114', '8', '111332', '177414', '25'), +('13', '114', '8', '111329', '176421', '25'), +('13', '114', '8', '111331', '172760', '25'), +('13', '114', '8', '111031', '155664', '25'), +('13', '114', '6', '111323', '177255', '25'), +('13', '114', '6', '111326', '175841', '25'), +('13', '114', '6', '111325', '175757', '25'), +('13', '114', '6', '111022', '155405', '25'), +('13', '114', '17', '94535', '312949', '25'), +('13', '114', '17', '56043', '117835', '25'), +('13', '114', '17', '56084', '114232', '25'), +('13', '114', '17', '104427', '99813', '25'), +('13', '114', '7', '128648', '231955', '25'), +('13', '114', '7', '56080', '110133', '25'), +('13', '114', '7', '56040', '109466', '25'), +('13', '114', '7', '104425', '95583', '25'), +('13', '114', '9', '67098', '180005', '25'), +('13', '114', '9', '56070', '106460', '25'), +('13', '114', '9', '56031', '106460', '25'), +('13', '114', '9', '62984', '106187', '25'), +('13', '114', '15', '111349', '179274', '25'), +('13', '114', '15', '111344', '177496', '25'), +('13', '114', '15', '111340', '177117', '25'), +('13', '114', '15', '111346', '176843', '25'), +('13', '114', '20', '128733', '227276', '25'), +('13', '114', '20', '111356', '177387', '25'), +('13', '114', '20', '111352', '176459', '25'), +('13', '114', '20', '111351', '173954', '25'), +('13', '114', '12', '56035', '108522', '25'), +('13', '114', '12', '56074', '107222', '25'), +('13', '114', '12', '104422', '93456', '25'), +('13', '114', '12', '49656', '70147', '25'), +('13', '114', '18', '56041', '114349', '25'), +('13', '114', '18', '62986', '112342', '25'), +('13', '114', '18', '104426', '97032', '25'), +('13', '114', '18', '54851', '71527', '25'), +('13', '114', '19', '81763', '110900', '25'), +('13', '114', '19', '62990', '110847', '25'), +('13', '114', '19', '56075', '110031', '25'), +('13', '114', '19', '56037', '109980', '25'), +('13', '114', '13', '111521', '183162', '25'), +('13', '114', '13', '111524', '173830', '25'), +('13', '114', '13', '111519', '173822', '25'), +('13', '114', '13', '111221', '162325', '25'), +('13', '114', '14', '111537', '177394', '25'), +('13', '114', '14', '111535', '175140', '25'), +('13', '114', '14', '111237', '155543', '25'), +('13', '114', '14', '111235', '153389', '25'), +('13', '114', '11', '85213', '257064', '25'), +('13', '114', '11', '133816', '229808', '25'), +('13', '114', '11', '111335', '176423', '25'), +('13', '114', '11', '111337', '176357', '25'), +('13', '115', '22', '12425', '0', '26'), +('13', '115', '22', '39342', '0', '26'), +('13', '115', '22', '7867', '0', '26'), +('13', '115', '22', '53550', '0', '26'), +('13', '115', '1', '98769', '284396', '26'), +('13', '115', '1', '128691', '229931', '26'), +('13', '115', '1', '111311', '178901', '26'), +('13', '115', '1', '111307', '176849', '26'), +('13', '115', '2', '62985', '109940', '26'), +('13', '115', '2', '94056', '109824', '26'), +('13', '115', '2', '104424', '96176', '26'), +('13', '115', '2', '54845', '71163', '26'), +('13', '115', '3', '111314', '177303', '26'), +('13', '115', '3', '111316', '175546', '26'), +('13', '115', '3', '111315', '174662', '26'), +('13', '115', '3', '111013', '155452', '26'), +('13', '115', '5', '111319', '176803', '26'), +('13', '115', '5', '111321', '175979', '26'), +('13', '115', '5', '111318', '174142', '26'), +('13', '115', '5', '111018', '154953', '26'), +('13', '115', '8', '111332', '177421', '26'), +('13', '115', '8', '111329', '176429', '26'), +('13', '115', '8', '111331', '172766', '26'), +('13', '115', '8', '111031', '155670', '26'), +('13', '115', '6', '111323', '177261', '26'), +('13', '115', '6', '111326', '175848', '26'), +('13', '115', '6', '111325', '175762', '26'), +('13', '115', '6', '111022', '155411', '26'), +('13', '115', '17', '94535', '312957', '26'), +('13', '115', '17', '56043', '117841', '26'), +('13', '115', '17', '56084', '114238', '26'), +('13', '115', '17', '104427', '99819', '26'), +('13', '115', '7', '128648', '231958', '26'), +('13', '115', '7', '56080', '110140', '26'), +('13', '115', '7', '56040', '109476', '26'), +('13', '115', '7', '104425', '95588', '26'), +('13', '115', '9', '67098', '180009', '26'), +('13', '115', '9', '56031', '106471', '26'), +('13', '115', '9', '56070', '106465', '26'), +('13', '115', '9', '62984', '106192', '26'), +('13', '115', '15', '111349', '179282', '26'), +('13', '115', '15', '111344', '177501', '26'), +('13', '115', '15', '111340', '177123', '26'), +('13', '115', '15', '111346', '176849', '26'), +('13', '115', '20', '128733', '227282', '26'), +('13', '115', '20', '111356', '177394', '26'), +('13', '115', '20', '111352', '176464', '26'), +('13', '115', '20', '111351', '173961', '26'), +('13', '115', '12', '56035', '108531', '26'), +('13', '115', '12', '56074', '107228', '26'), +('13', '115', '12', '104422', '93464', '26'), +('13', '115', '12', '49656', '70148', '26'), +('13', '115', '18', '56041', '114357', '26'), +('13', '115', '18', '62986', '112347', '26'), +('13', '115', '18', '104426', '97034', '26'), +('13', '115', '18', '54851', '71531', '26'), +('13', '115', '19', '81763', '110910', '26'), +('13', '115', '19', '62990', '110855', '26'), +('13', '115', '19', '56075', '110036', '26'), +('13', '115', '19', '56037', '109982', '26'), +('13', '115', '13', '111521', '183167', '26'), +('13', '115', '13', '111524', '173836', '26'), +('13', '115', '13', '111519', '173829', '26'), +('13', '115', '13', '111221', '162331', '26'), +('13', '115', '14', '111537', '177399', '26'), +('13', '115', '14', '111535', '175144', '26'), +('13', '115', '14', '111237', '155548', '26'), +('13', '115', '14', '111235', '153392', '26'), +('13', '115', '11', '85213', '257068', '26'), +('13', '115', '11', '133816', '229812', '26'), +('13', '115', '11', '111335', '176429', '26'), +('13', '115', '11', '111337', '176363', '26'), +('14', '1', '22', '10323', '0', '0'), +('14', '1', '22', '9246', '0', '0'), +('14', '1', '22', '21509', '0', '0'), +('14', '1', '22', '8007', '0', '0'), +('14', '1', '1', '14702', '5000', '0'), +('14', '1', '1', '14701', '4624', '0'), +('14', '1', '1', '14559', '2693', '0'), +('14', '1', '1', '30361', '2640', '0'), +('14', '1', '2', '10143', '7136', '0'), +('14', '1', '2', '30363', '3700', '0'), +('14', '1', '2', '1246', '2407', '0'), +('14', '1', '2', '1211', '2251', '0'), +('14', '1', '3', '1275', '3254', '0'), +('14', '1', '3', '1642', '1803', '0'), +('14', '1', '3', '1212', '1385', '0'), +('14', '1', '3', '14705', '990', '0'), +('14', '1', '5', '14703', '8800', '0'), +('14', '1', '5', '14700', '4836', '0'), +('14', '1', '5', '10055', '4060', '0'), +('14', '1', '5', '14558', '3797', '0'), +('14', '1', '8', '11603', '8480', '0'), +('14', '1', '8', '2349', '3651', '0'), +('14', '1', '8', '11621', '3631', '0'), +('14', '1', '8', '1409', '2827', '0'), +('14', '1', '6', '1557', '5371', '0'), +('14', '1', '6', '1542', '5203', '0'), +('14', '1', '6', '1905', '5068', '0'), +('14', '1', '6', '1276', '3275', '0'), +('14', '1', '17', '1253', '10111', '0'), +('14', '1', '17', '1644', '8536', '0'), +('14', '1', '17', '11641', '8335', '0'), +('14', '1', '17', '1357', '5607', '0'), +('14', '1', '7', '1362', '3148', '0'), +('14', '1', '7', '1321', '1782', '0'), +('14', '1', '7', '1218', '1303', '0'), +('14', '1', '7', '1248', '1087', '0'), +('14', '1', '9', '14650', '2424', '0'), +('14', '1', '9', '12806', '2211', '0'), +('14', '1', '9', '4344', '2127', '0'), +('14', '1', '9', '10408', '2018', '0'), +('14', '1', '15', '10366', '4854', '0'), +('14', '1', '15', '10151', '4200', '0'), +('14', '1', '15', '10163', '3709', '0'), +('14', '1', '15', '14679', '3360', '0'), +('14', '1', '20', '11666', '12071', '0'), +('14', '1', '20', '2742', '5114', '0'), +('14', '1', '20', '2345', '1624', '0'), +('14', '1', '20', '1217', '1363', '0'), +('14', '1', '12', '2923', '4348', '0'), +('14', '1', '12', '20655', '3772', '0'), +('14', '1', '12', '1404', '2524', '0'), +('14', '1', '12', '1650', '1501', '0'), +('14', '1', '18', '4410', '1685', '0'), +('14', '1', '18', '1651', '1545', '0'), +('14', '1', '18', '1251', '1318', '0'), +('14', '1', '18', '1221', '1234', '0'), +('14', '1', '19', '68239', '2770', '0'), +('14', '1', '19', '1368', '2066', '0'), +('14', '1', '19', '1652', '2046', '0'), +('14', '1', '19', '1252', '1363', '0'), +('14', '1', '13', '14759', '7303', '0'), +('14', '1', '13', '27711', '4040', '0'), +('14', '1', '13', '11625', '3525', '0'), +('14', '1', '13', '13987', '3260', '0'), +('14', '1', '14', '10219', '8362', '0'), +('14', '1', '14', '14759', '7303', '0'), +('14', '1', '14', '11625', '3525', '0'), +('14', '1', '14', '13987', '3260', '0'), +('14', '1', '11', '14762', '3204', '0'), +('14', '1', '11', '13353', '1500', '0'), +('14', '1', '11', '20677', '1200', '0'), +('14', '1', '11', '9246', '1039', '0'), +('14', '2', '22', '10323', '0', '0'), +('14', '2', '22', '9246', '0', '0'), +('14', '2', '22', '21509', '0', '0'), +('14', '2', '22', '8007', '0', '0'), +('14', '2', '1', '14702', '5000', '0'), +('14', '2', '1', '14701', '4624', '0'), +('14', '2', '1', '14559', '2742', '0'), +('14', '2', '1', '30361', '2640', '0'), +('14', '2', '2', '10143', '7136', '0'), +('14', '2', '2', '30363', '3700', '0'), +('14', '2', '2', '1246', '2492', '0'), +('14', '2', '2', '1211', '2335', '0'), +('14', '2', '3', '1275', '3326', '0'), +('14', '2', '3', '1642', '1815', '0'), +('14', '2', '3', '1212', '1397', '0'), +('14', '2', '3', '14705', '990', '0'), +('14', '2', '5', '14703', '8800', '0'), +('14', '2', '5', '14700', '4836', '0'), +('14', '2', '5', '10055', '4060', '0'), +('14', '2', '5', '14558', '3865', '0'), +('14', '2', '8', '11603', '8588', '0'), +('14', '2', '8', '2349', '3651', '0'), +('14', '2', '8', '11621', '3631', '0'), +('14', '2', '8', '1409', '2827', '0'), +('14', '2', '6', '1557', '5371', '0'), +('14', '2', '6', '1542', '5312', '0'), +('14', '2', '6', '1905', '5075', '0'), +('14', '2', '6', '1276', '3275', '0'), +('14', '2', '17', '1253', '10126', '0'), +('14', '2', '17', '1644', '8596', '0'), +('14', '2', '17', '11641', '8516', '0'), +('14', '2', '17', '1357', '5607', '0'), +('14', '2', '7', '1362', '3148', '0'), +('14', '2', '7', '1321', '1782', '0'), +('14', '2', '7', '1218', '1387', '0'), +('14', '2', '7', '1248', '1172', '0'), +('14', '2', '9', '14650', '2424', '0'), +('14', '2', '9', '12806', '2296', '0'), +('14', '2', '9', '4344', '2127', '0'), +('14', '2', '9', '10408', '2018', '0'), +('14', '2', '15', '10366', '4854', '0'), +('14', '2', '15', '10151', '4200', '0'), +('14', '2', '15', '10163', '3709', '0'), +('14', '2', '15', '14679', '3360', '0'), +('14', '2', '20', '11666', '12081', '0'), +('14', '2', '20', '2742', '5129', '0'), +('14', '2', '20', '2345', '1624', '0'), +('14', '2', '20', '1217', '1375', '0'), +('14', '2', '12', '2923', '4348', '0'), +('14', '2', '12', '20655', '3799', '0'), +('14', '2', '12', '1404', '2524', '0'), +('14', '2', '12', '1650', '1550', '0'), +('14', '2', '18', '4410', '1685', '0'), +('14', '2', '18', '1651', '1581', '0'), +('14', '2', '18', '1251', '1318', '0'), +('14', '2', '18', '1221', '1234', '0'), +('14', '2', '19', '68239', '2806', '0'), +('14', '2', '19', '1368', '2066', '0'), +('14', '2', '19', '1652', '2046', '0'), +('14', '2', '19', '1252', '1363', '0'), +('14', '2', '13', '14759', '7368', '0'), +('14', '2', '13', '27711', '4131', '0'), +('14', '2', '13', '11625', '3538', '0'), +('14', '2', '13', '13987', '3321', '0'), +('14', '2', '14', '10219', '8362', '0'), +('14', '2', '14', '14759', '7368', '0'), +('14', '2', '14', '11625', '3538', '0'), +('14', '2', '14', '13987', '3321', '0'), +('14', '2', '11', '14762', '3204', '0'), +('14', '2', '11', '13353', '1500', '0'), +('14', '2', '11', '20677', '1200', '0'), +('14', '2', '11', '9246', '1160', '0'), +('14', '3', '22', '10323', '0', '0'), +('14', '3', '22', '9246', '0', '0'), +('14', '3', '22', '21509', '0', '0'), +('14', '3', '22', '8007', '0', '0'), +('14', '3', '1', '14702', '5000', '0'), +('14', '3', '1', '14701', '4624', '0'), +('14', '3', '1', '14559', '2790', '0'), +('14', '3', '1', '30361', '2640', '0'), +('14', '3', '2', '10143', '7136', '0'), +('14', '3', '2', '30363', '3700', '0'), +('14', '3', '2', '1246', '2576', '0'), +('14', '3', '2', '1211', '2420', '0'), +('14', '3', '3', '1275', '3399', '0'), +('14', '3', '3', '1642', '1827', '0'), +('14', '3', '3', '1212', '1409', '0'), +('14', '3', '3', '14705', '990', '0'), +('14', '3', '5', '14703', '8800', '0'), +('14', '3', '5', '14700', '4836', '0'), +('14', '3', '5', '10055', '4060', '0'), +('14', '3', '5', '14558', '3932', '0'), +('14', '3', '8', '11603', '8697', '0'), +('14', '3', '8', '2349', '3651', '0'), +('14', '3', '8', '11621', '3631', '0'), +('14', '3', '8', '1409', '2827', '0'), +('14', '3', '6', '1542', '5421', '0'), +('14', '3', '6', '1557', '5371', '0'), +('14', '3', '6', '1905', '5082', '0'), +('14', '3', '6', '1276', '3275', '0'), +('14', '3', '17', '1253', '10140', '0'), +('14', '3', '17', '11641', '8698', '0'), +('14', '3', '17', '1644', '8656', '0'), +('14', '3', '17', '1357', '5607', '0'), +('14', '3', '7', '1362', '3148', '0'), +('14', '3', '7', '1321', '1782', '0'), +('14', '3', '7', '1218', '1472', '0'), +('14', '3', '7', '1248', '1256', '0'), +('14', '3', '9', '14650', '2424', '0'), +('14', '3', '9', '12806', '2381', '0'), +('14', '3', '9', '4344', '2127', '0'), +('14', '3', '9', '10408', '2018', '0'), +('14', '3', '15', '10366', '4854', '0'), +('14', '3', '15', '10151', '4200', '0'), +('14', '3', '15', '10163', '3709', '0'), +('14', '3', '15', '14679', '3360', '0'), +('14', '3', '20', '11666', '12091', '0'), +('14', '3', '20', '2742', '5143', '0'), +('14', '3', '20', '2345', '1624', '0'), +('14', '3', '20', '1217', '1387', '0'), +('14', '3', '12', '2923', '4348', '0'), +('14', '3', '12', '20655', '3826', '0'), +('14', '3', '12', '1404', '2524', '0'), +('14', '3', '12', '1650', '1598', '0'), +('14', '3', '18', '4410', '1685', '0'), +('14', '3', '18', '1651', '1617', '0'), +('14', '3', '18', '1251', '1318', '0'), +('14', '3', '18', '1221', '1234', '0'), +('14', '3', '19', '68239', '2843', '0'), +('14', '3', '19', '1368', '2066', '0'), +('14', '3', '19', '1652', '2046', '0'), +('14', '3', '19', '1252', '1363', '0'), +('14', '3', '13', '14759', '7434', '0'), +('14', '3', '13', '27711', '4221', '0'), +('14', '3', '13', '11625', '3551', '0'), +('14', '3', '13', '13987', '3381', '0'), +('14', '3', '14', '10219', '8362', '0'), +('14', '3', '14', '14759', '7434', '0'), +('14', '3', '14', '11625', '3551', '0'), +('14', '3', '14', '13987', '3381', '0'), +('14', '3', '11', '14762', '3204', '0'), +('14', '3', '11', '13353', '1500', '0'), +('14', '3', '11', '9246', '1280', '0'), +('14', '3', '11', '20677', '1200', '0'), +('14', '4', '22', '10323', '0', '0'), +('14', '4', '22', '9246', '0', '0'), +('14', '4', '22', '21509', '0', '0'), +('14', '4', '22', '8007', '0', '0'), +('14', '4', '1', '14702', '5000', '0'), +('14', '4', '1', '14701', '4624', '0'), +('14', '4', '1', '14559', '2838', '0'), +('14', '4', '1', '30361', '2640', '0'), +('14', '4', '2', '10143', '7136', '0'), +('14', '4', '2', '30363', '3700', '0'), +('14', '4', '2', '1246', '2661', '0'), +('14', '4', '2', '1211', '2504', '0'), +('14', '4', '3', '1275', '3471', '0'), +('14', '4', '3', '1642', '1839', '0'), +('14', '4', '3', '1212', '1421', '0'), +('14', '4', '3', '14705', '990', '0'), +('14', '4', '5', '14703', '8800', '0'), +('14', '4', '5', '14700', '4836', '0'), +('14', '4', '5', '10055', '4060', '0'), +('14', '4', '5', '14558', '4000', '0'), +('14', '4', '8', '11603', '8806', '0'), +('14', '4', '8', '2349', '3651', '0'), +('14', '4', '8', '11621', '3631', '0'), +('14', '4', '8', '1409', '2827', '0'), +('14', '4', '6', '1542', '5530', '0'), +('14', '4', '6', '1557', '5371', '0'), +('14', '4', '6', '1905', '5089', '0'), +('14', '4', '6', '1276', '3275', '0'), +('14', '4', '17', '1253', '10155', '0'), +('14', '4', '17', '11641', '8879', '0'), +('14', '4', '17', '1644', '8717', '0'), +('14', '4', '17', '1357', '5607', '0'), +('14', '4', '7', '1362', '3148', '0'), +('14', '4', '7', '1321', '1782', '0'), +('14', '4', '7', '1218', '1557', '0'), +('14', '4', '7', '1248', '1341', '0'), +('14', '4', '9', '12806', '2465', '0'), +('14', '4', '9', '14650', '2424', '0'), +('14', '4', '9', '4344', '2127', '0'), +('14', '4', '9', '10408', '2018', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '4', '15', '10366', '4854', '0'), +('14', '4', '15', '10151', '4200', '0'), +('14', '4', '15', '10163', '3709', '0'), +('14', '4', '15', '14679', '3360', '0'), +('14', '4', '20', '11666', '12102', '0'), +('14', '4', '20', '2742', '5158', '0'), +('14', '4', '20', '2345', '1624', '0'), +('14', '4', '20', '1217', '1399', '0'), +('14', '4', '12', '2923', '4348', '0'), +('14', '4', '12', '20655', '3853', '0'), +('14', '4', '12', '1404', '2524', '0'), +('14', '4', '12', '1650', '1646', '0'), +('14', '4', '18', '4410', '1685', '0'), +('14', '4', '18', '1651', '1654', '0'), +('14', '4', '18', '1251', '1318', '0'), +('14', '4', '18', '1221', '1234', '0'), +('14', '4', '19', '68239', '2879', '0'), +('14', '4', '19', '1368', '2066', '0'), +('14', '4', '19', '1652', '2046', '0'), +('14', '4', '19', '1252', '1363', '0'), +('14', '4', '13', '14759', '7499', '0'), +('14', '4', '13', '27711', '4312', '0'), +('14', '4', '13', '11625', '3564', '0'), +('14', '4', '13', '13987', '3442', '0'), +('14', '4', '14', '10219', '8362', '0'), +('14', '4', '14', '14759', '7499', '0'), +('14', '4', '14', '11625', '3564', '0'), +('14', '4', '14', '13987', '3442', '0'), +('14', '4', '11', '14762', '3204', '0'), +('14', '4', '11', '13353', '1500', '0'), +('14', '4', '11', '9246', '1401', '0'), +('14', '4', '11', '20677', '1200', '0'), +('14', '5', '22', '10323', '0', '0'), +('14', '5', '22', '9246', '0', '0'), +('14', '5', '22', '21509', '0', '0'), +('14', '5', '22', '8007', '0', '0'), +('14', '5', '1', '14702', '5000', '0'), +('14', '5', '1', '14701', '4624', '0'), +('14', '5', '1', '14559', '2887', '0'), +('14', '5', '1', '30361', '2640', '0'), +('14', '5', '2', '10143', '7136', '0'), +('14', '5', '2', '30363', '3700', '0'), +('14', '5', '2', '1246', '2746', '0'), +('14', '5', '2', '1211', '2589', '0'), +('14', '5', '3', '1275', '3544', '0'), +('14', '5', '3', '1642', '1851', '0'), +('14', '5', '3', '1212', '1433', '0'), +('14', '5', '3', '14705', '990', '0'), +('14', '5', '5', '14703', '8800', '0'), +('14', '5', '5', '14700', '4836', '0'), +('14', '5', '5', '14558', '4068', '0'), +('14', '5', '5', '10055', '4060', '0'), +('14', '5', '8', '11603', '8914', '0'), +('14', '5', '8', '2349', '3651', '0'), +('14', '5', '8', '11621', '3631', '0'), +('14', '5', '8', '1409', '2827', '0'), +('14', '5', '6', '1542', '5638', '0'), +('14', '5', '6', '1557', '5371', '0'), +('14', '5', '6', '1905', '5097', '0'), +('14', '5', '6', '1276', '3275', '0'), +('14', '5', '17', '1253', '10169', '0'), +('14', '5', '17', '11641', '9060', '0'), +('14', '5', '17', '1644', '8777', '0'), +('14', '5', '17', '1357', '5607', '0'), +('14', '5', '7', '1362', '3148', '0'), +('14', '5', '7', '1321', '1782', '0'), +('14', '5', '7', '1218', '1641', '0'), +('14', '5', '7', '1248', '1425', '0'), +('14', '5', '9', '12806', '2550', '0'), +('14', '5', '9', '14650', '2424', '0'), +('14', '5', '9', '4344', '2127', '0'), +('14', '5', '9', '10408', '2018', '0'), +('14', '5', '15', '10366', '4854', '0'), +('14', '5', '15', '10151', '4200', '0'), +('14', '5', '15', '10163', '3709', '0'), +('14', '5', '15', '14679', '3360', '0'), +('14', '5', '20', '11666', '12112', '0'), +('14', '5', '20', '2742', '5172', '0'), +('14', '5', '20', '2345', '1624', '0'), +('14', '5', '20', '1217', '1411', '0'), +('14', '5', '12', '2923', '4348', '0'), +('14', '5', '12', '20655', '3881', '0'), +('14', '5', '12', '1404', '2524', '0'), +('14', '5', '12', '1650', '1695', '0'), +('14', '5', '18', '1651', '1690', '0'), +('14', '5', '18', '4410', '1685', '0'), +('14', '5', '18', '1251', '1318', '0'), +('14', '5', '18', '1221', '1234', '0'), +('14', '5', '19', '68239', '2915', '0'), +('14', '5', '19', '1368', '2066', '0'), +('14', '5', '19', '1652', '2046', '0'), +('14', '5', '19', '1252', '1363', '0'), +('14', '5', '13', '14759', '7564', '0'), +('14', '5', '13', '27711', '4403', '0'), +('14', '5', '13', '11625', '3577', '0'), +('14', '5', '13', '13987', '3502', '0'), +('14', '5', '14', '10219', '8362', '0'), +('14', '5', '14', '14759', '7564', '0'), +('14', '5', '14', '11625', '3577', '0'), +('14', '5', '14', '13987', '3502', '0'), +('14', '5', '11', '14762', '3204', '0'), +('14', '5', '11', '9246', '1522', '0'), +('14', '5', '11', '13353', '1500', '0'), +('14', '5', '11', '20677', '1200', '0'), +('14', '6', '22', '10323', '0', '0'), +('14', '6', '22', '9246', '0', '0'), +('14', '6', '22', '21509', '0', '0'), +('14', '6', '22', '8007', '0', '0'), +('14', '6', '1', '14702', '5000', '0'), +('14', '6', '1', '14701', '4624', '0'), +('14', '6', '1', '14559', '2935', '0'), +('14', '6', '1', '30361', '2640', '0'), +('14', '6', '2', '10143', '7136', '0'), +('14', '6', '2', '30363', '3700', '0'), +('14', '6', '2', '1246', '2830', '0'), +('14', '6', '2', '1211', '2673', '0'), +('14', '6', '3', '1275', '3616', '0'), +('14', '6', '3', '1642', '1863', '0'), +('14', '6', '3', '1212', '1445', '0'), +('14', '6', '3', '11052', '1087', '0'), +('14', '6', '5', '14703', '8800', '0'), +('14', '6', '5', '14700', '4836', '0'), +('14', '6', '5', '14558', '4135', '0'), +('14', '6', '5', '10055', '4060', '0'), +('14', '6', '8', '11603', '9023', '0'), +('14', '6', '8', '2349', '3651', '0'), +('14', '6', '8', '11621', '3631', '0'), +('14', '6', '8', '1409', '2827', '0'), +('14', '6', '6', '1542', '5747', '0'), +('14', '6', '6', '1557', '5371', '0'), +('14', '6', '6', '1905', '5104', '0'), +('14', '6', '6', '1276', '3275', '0'), +('14', '6', '17', '1253', '10184', '0'), +('14', '6', '17', '11641', '9241', '0'), +('14', '6', '17', '1644', '8838', '0'), +('14', '6', '17', '1357', '5607', '0'), +('14', '6', '7', '1362', '3148', '0'), +('14', '6', '7', '1321', '1782', '0'), +('14', '6', '7', '1218', '1726', '0'), +('14', '6', '7', '1248', '1510', '0'), +('14', '6', '9', '12806', '2634', '0'), +('14', '6', '9', '14650', '2424', '0'), +('14', '6', '9', '4344', '2127', '0'), +('14', '6', '9', '10408', '2018', '0'), +('14', '6', '15', '10366', '4854', '0'), +('14', '6', '15', '10151', '4200', '0'), +('14', '6', '15', '10163', '3709', '0'), +('14', '6', '15', '14679', '3360', '0'), +('14', '6', '20', '11666', '12122', '0'), +('14', '6', '20', '2742', '5187', '0'), +('14', '6', '20', '2345', '1624', '0'), +('14', '6', '20', '1217', '1423', '0'), +('14', '6', '12', '2923', '4348', '0'), +('14', '6', '12', '20655', '3908', '0'), +('14', '6', '12', '1404', '2524', '0'), +('14', '6', '12', '1650', '1743', '0'), +('14', '6', '18', '1651', '1726', '0'), +('14', '6', '18', '4410', '1685', '0'), +('14', '6', '18', '1251', '1318', '0'), +('14', '6', '18', '1221', '1234', '0'), +('14', '6', '19', '68239', '2951', '0'), +('14', '6', '19', '1368', '2066', '0'), +('14', '6', '19', '1652', '2046', '0'), +('14', '6', '19', '1252', '1363', '0'), +('14', '6', '13', '14759', '7629', '0'), +('14', '6', '13', '27711', '4493', '0'), +('14', '6', '13', '11625', '3590', '0'), +('14', '6', '13', '13987', '3562', '0'), +('14', '6', '14', '10219', '8362', '0'), +('14', '6', '14', '14759', '7629', '0'), +('14', '6', '14', '11625', '3590', '0'), +('14', '6', '14', '13987', '3562', '0'), +('14', '6', '11', '14762', '3204', '0'), +('14', '6', '11', '9246', '1643', '0'), +('14', '6', '11', '13353', '1500', '0'), +('14', '6', '11', '20677', '1200', '0'), +('14', '7', '22', '10323', '0', '0'), +('14', '7', '22', '9246', '0', '0'), +('14', '7', '22', '21509', '0', '0'), +('14', '7', '22', '8007', '0', '0'), +('14', '7', '1', '14702', '5000', '0'), +('14', '7', '1', '14701', '4624', '0'), +('14', '7', '1', '14559', '2983', '0'), +('14', '7', '1', '30361', '2640', '0'), +('14', '7', '2', '10143', '7136', '0'), +('14', '7', '2', '30363', '3700', '0'), +('14', '7', '2', '1246', '2915', '0'), +('14', '7', '2', '1211', '2758', '0'), +('14', '7', '3', '1275', '3689', '0'), +('14', '7', '3', '1642', '1875', '0'), +('14', '7', '3', '1212', '1457', '0'), +('14', '7', '3', '11052', '1268', '0'), +('14', '7', '5', '14703', '8800', '0'), +('14', '7', '5', '14700', '4836', '0'), +('14', '7', '5', '14558', '4203', '0'), +('14', '7', '5', '10055', '4060', '0'), +('14', '7', '8', '11603', '9132', '0'), +('14', '7', '8', '2349', '3651', '0'), +('14', '7', '8', '11621', '3631', '0'), +('14', '7', '8', '1409', '2827', '0'), +('14', '7', '6', '1542', '5856', '0'), +('14', '7', '6', '1557', '5371', '0'), +('14', '7', '6', '1905', '5111', '0'), +('14', '7', '6', '1276', '3275', '0'), +('14', '7', '17', '1253', '10198', '0'), +('14', '7', '17', '11641', '9422', '0'), +('14', '7', '17', '1644', '8898', '0'), +('14', '7', '17', '1357', '5607', '0'), +('14', '7', '7', '1362', '3148', '0'), +('14', '7', '7', '1218', '1810', '0'), +('14', '7', '7', '1321', '1782', '0'), +('14', '7', '7', '1248', '1595', '0'), +('14', '7', '9', '12806', '2719', '0'), +('14', '7', '9', '14650', '2424', '0'), +('14', '7', '9', '4344', '2127', '0'), +('14', '7', '9', '10408', '2018', '0'), +('14', '7', '15', '10366', '4854', '0'), +('14', '7', '15', '10151', '4200', '0'), +('14', '7', '15', '10163', '3709', '0'), +('14', '7', '15', '14679', '3360', '0'), +('14', '7', '20', '11666', '12132', '0'), +('14', '7', '20', '2742', '5201', '0'), +('14', '7', '20', '2345', '1624', '0'), +('14', '7', '20', '1277', '1462', '0'), +('14', '7', '12', '2923', '4348', '0'), +('14', '7', '12', '20655', '3935', '0'), +('14', '7', '12', '1404', '2524', '0'), +('14', '7', '12', '1650', '1791', '0'), +('14', '7', '18', '1651', '1762', '0'), +('14', '7', '18', '4410', '1685', '0'), +('14', '7', '18', '1251', '1318', '0'), +('14', '7', '18', '1221', '1234', '0'), +('14', '7', '19', '68239', '2988', '0'), +('14', '7', '19', '1368', '2066', '0'), +('14', '7', '19', '1652', '2046', '0'), +('14', '7', '19', '1252', '1363', '0'), +('14', '7', '13', '14759', '7695', '0'), +('14', '7', '13', '27711', '4584', '0'), +('14', '7', '13', '13987', '3623', '0'), +('14', '7', '13', '11625', '3603', '0'), +('14', '7', '14', '10219', '8362', '0'), +('14', '7', '14', '14759', '7695', '0'), +('14', '7', '14', '13987', '3623', '0'), +('14', '7', '14', '11625', '3603', '0'), +('14', '7', '11', '14762', '3204', '0'), +('14', '7', '11', '9246', '1764', '0'), +('14', '7', '11', '13353', '1500', '0'), +('14', '7', '11', '20677', '1200', '0'), +('14', '8', '22', '10323', '0', '0'), +('14', '8', '22', '9246', '0', '0'), +('14', '8', '22', '21509', '0', '0'), +('14', '8', '22', '8007', '0', '0'), +('14', '8', '1', '14702', '5000', '0'), +('14', '8', '1', '14701', '4624', '0'), +('14', '8', '1', '14559', '3032', '0'), +('14', '8', '1', '30361', '2640', '0'), +('14', '8', '2', '10143', '7136', '0'), +('14', '8', '2', '30363', '3700', '0'), +('14', '8', '2', '1246', '2999', '0'), +('14', '8', '2', '1211', '2842', '0'), +('14', '8', '3', '1275', '3761', '0'), +('14', '8', '3', '1642', '1887', '0'), +('14', '8', '3', '1212', '1469', '0'), +('14', '8', '3', '11052', '1450', '0'), +('14', '8', '5', '14703', '8800', '0'), +('14', '8', '5', '14700', '4836', '0'), +('14', '8', '5', '14558', '4271', '0'), +('14', '8', '5', '10055', '4060', '0'), +('14', '8', '8', '11603', '9241', '0'), +('14', '8', '8', '2349', '3651', '0'), +('14', '8', '8', '11621', '3631', '0'), +('14', '8', '8', '1409', '2827', '0'), +('14', '8', '6', '1542', '5965', '0'), +('14', '8', '6', '1557', '5371', '0'), +('14', '8', '6', '1905', '5118', '0'), +('14', '8', '6', '1276', '3275', '0'), +('14', '8', '17', '1253', '10213', '0'), +('14', '8', '17', '11641', '9604', '0'), +('14', '8', '17', '1644', '8958', '0'), +('14', '8', '17', '1357', '5607', '0'), +('14', '8', '7', '1362', '3148', '0'), +('14', '8', '7', '1218', '1895', '0'), +('14', '8', '7', '1321', '1782', '0'), +('14', '8', '7', '1248', '1679', '0'), +('14', '8', '9', '12806', '2803', '0'), +('14', '8', '9', '14650', '2424', '0'), +('14', '8', '9', '4344', '2127', '0'), +('14', '8', '9', '10408', '2018', '0'), +('14', '8', '15', '10366', '4854', '0'), +('14', '8', '15', '10151', '4200', '0'), +('14', '8', '15', '10163', '3709', '0'), +('14', '8', '15', '14679', '3360', '0'), +('14', '8', '20', '11666', '12142', '0'), +('14', '8', '20', '2742', '5216', '0'), +('14', '8', '20', '2345', '1624', '0'), +('14', '8', '20', '1277', '1522', '0'), +('14', '8', '12', '2923', '4348', '0'), +('14', '8', '12', '20655', '3962', '0'), +('14', '8', '12', '1404', '2524', '0'), +('14', '8', '12', '1650', '1840', '0'), +('14', '8', '18', '1651', '1799', '0'), +('14', '8', '18', '4410', '1685', '0'), +('14', '8', '18', '1251', '1318', '0'), +('14', '8', '18', '1221', '1234', '0'), +('14', '8', '19', '68239', '3024', '0'), +('14', '8', '19', '1368', '2066', '0'), +('14', '8', '19', '1652', '2046', '0'), +('14', '8', '19', '1252', '1363', '0'), +('14', '8', '13', '14759', '7760', '0'), +('14', '8', '13', '27711', '4674', '0'), +('14', '8', '13', '13987', '3683', '0'), +('14', '8', '13', '11625', '3616', '0'), +('14', '8', '14', '10219', '8362', '0'), +('14', '8', '14', '14759', '7760', '0'), +('14', '8', '14', '13987', '3683', '0'), +('14', '8', '14', '11625', '3616', '0'), +('14', '8', '11', '14762', '3204', '0'), +('14', '8', '11', '9246', '1884', '0'), +('14', '8', '11', '13353', '1500', '0'), +('14', '8', '11', '20677', '1200', '0'), +('14', '9', '22', '10323', '0', '0'), +('14', '9', '22', '9246', '0', '0'), +('14', '9', '22', '21509', '0', '0'), +('14', '9', '22', '8007', '0', '0'), +('14', '9', '1', '14702', '5000', '0'), +('14', '9', '1', '14701', '4624', '0'), +('14', '9', '1', '14559', '3080', '0'), +('14', '9', '1', '30361', '2640', '0'), +('14', '9', '2', '10143', '7136', '0'), +('14', '9', '2', '30363', '3700', '0'), +('14', '9', '2', '1246', '3084', '0'), +('14', '9', '2', '1211', '2927', '0'), +('14', '9', '3', '1275', '3834', '0'), +('14', '9', '3', '1642', '1899', '0'), +('14', '9', '3', '11052', '1631', '0'), +('14', '9', '3', '1212', '1481', '0'), +('14', '9', '5', '14703', '8800', '0'), +('14', '9', '5', '14700', '4836', '0'), +('14', '9', '5', '14558', '4338', '0'), +('14', '9', '5', '10055', '4060', '0'), +('14', '9', '8', '11603', '9349', '0'), +('14', '9', '8', '2349', '3651', '0'), +('14', '9', '8', '11621', '3631', '0'), +('14', '9', '8', '1409', '2827', '0'), +('14', '9', '6', '1542', '6073', '0'), +('14', '9', '6', '1557', '5371', '0'), +('14', '9', '6', '1905', '5126', '0'), +('14', '9', '6', '1276', '3275', '0'), +('14', '9', '17', '1253', '10227', '0'), +('14', '9', '17', '11641', '9785', '0'), +('14', '9', '17', '1644', '9019', '0'), +('14', '9', '17', '1357', '5607', '0'), +('14', '9', '7', '1362', '3148', '0'), +('14', '9', '7', '1218', '1979', '0'), +('14', '9', '7', '1321', '1782', '0'), +('14', '9', '7', '1248', '1764', '0'), +('14', '9', '9', '12806', '2888', '0'), +('14', '9', '9', '14650', '2424', '0'), +('14', '9', '9', '4344', '2127', '0'), +('14', '9', '9', '10408', '2018', '0'), +('14', '9', '15', '10366', '4854', '0'), +('14', '9', '15', '10151', '4200', '0'), +('14', '9', '15', '10163', '3709', '0'), +('14', '9', '15', '14679', '3360', '0'), +('14', '9', '20', '11666', '12152', '0'), +('14', '9', '20', '2742', '5230', '0'), +('14', '9', '20', '2345', '1624', '0'), +('14', '9', '20', '1277', '1583', '0'), +('14', '9', '12', '2923', '4348', '0'), +('14', '9', '12', '20655', '3989', '0'), +('14', '9', '12', '1404', '2524', '0'), +('14', '9', '12', '1650', '1888', '0'), +('14', '9', '18', '1651', '1835', '0'), +('14', '9', '18', '4410', '1685', '0'), +('14', '9', '18', '1251', '1318', '0'), +('14', '9', '18', '1221', '1234', '0'), +('14', '9', '19', '68239', '3060', '0'), +('14', '9', '19', '1368', '2066', '0'), +('14', '9', '19', '1652', '2046', '0'), +('14', '9', '19', '1252', '1363', '0'), +('14', '9', '13', '14759', '7825', '0'), +('14', '9', '13', '27711', '4765', '0'), +('14', '9', '13', '13987', '3744', '0'), +('14', '9', '13', '11625', '3629', '0'), +('14', '9', '14', '10219', '8362', '0'), +('14', '9', '14', '14759', '7825', '0'), +('14', '9', '14', '13987', '3744', '0'), +('14', '9', '14', '11625', '3629', '0'), +('14', '9', '11', '14762', '3204', '0'), +('14', '9', '11', '9246', '2005', '0'), +('14', '9', '11', '13353', '1500', '0'), +('14', '9', '11', '20677', '1200', '0'), +('14', '10', '22', '10323', '0', '0'), +('14', '10', '22', '9246', '0', '0'), +('14', '10', '22', '21509', '0', '0'), +('14', '10', '22', '8007', '0', '0'), +('14', '10', '1', '14702', '5000', '0'), +('14', '10', '1', '14701', '4624', '0'), +('14', '10', '1', '14559', '3128', '0'), +('14', '10', '1', '30361', '2640', '0'), +('14', '10', '2', '10143', '7136', '0'), +('14', '10', '2', '30363', '3700', '0'), +('14', '10', '2', '1246', '3168', '0'), +('14', '10', '2', '1211', '3012', '0'), +('14', '10', '3', '1275', '3906', '0'), +('14', '10', '3', '1642', '1911', '0'), +('14', '10', '3', '11052', '1812', '0'), +('14', '10', '3', '1212', '1493', '0'), +('14', '10', '5', '14703', '8800', '0'), +('14', '10', '5', '14700', '4836', '0'), +('14', '10', '5', '14558', '4406', '0'), +('14', '10', '5', '10055', '4060', '0'), +('14', '10', '8', '11603', '9458', '0'), +('14', '10', '8', '2349', '3651', '0'), +('14', '10', '8', '11621', '3631', '0'), +('14', '10', '8', '1409', '2827', '0'), +('14', '10', '6', '1542', '6182', '0'), +('14', '10', '6', '1557', '5371', '0'), +('14', '10', '6', '1905', '5133', '0'), +('14', '10', '6', '1276', '3275', '0'), +('14', '10', '17', '1253', '10242', '0'), +('14', '10', '17', '11641', '9966', '0'), +('14', '10', '17', '1644', '9079', '0'), +('14', '10', '17', '1357', '5607', '0'), +('14', '10', '7', '1362', '3148', '0'), +('14', '10', '7', '1218', '2064', '0'), +('14', '10', '7', '1248', '1848', '0'), +('14', '10', '7', '1321', '1782', '0'), +('14', '10', '9', '12806', '2972', '0'), +('14', '10', '9', '14650', '2424', '0'), +('14', '10', '9', '4344', '2127', '0'), +('14', '10', '9', '10408', '2018', '0'), +('14', '10', '15', '10366', '4854', '0'), +('14', '10', '15', '10151', '4200', '0'), +('14', '10', '15', '10163', '3709', '0'), +('14', '10', '15', '14679', '3360', '0'), +('14', '10', '20', '11666', '12162', '0'), +('14', '10', '20', '2742', '5245', '0'), +('14', '10', '20', '1277', '1643', '0'), +('14', '10', '20', '2345', '1624', '0'), +('14', '10', '12', '2923', '4348', '0'), +('14', '10', '12', '20655', '4016', '0'), +('14', '10', '12', '1404', '2524', '0'), +('14', '10', '12', '1650', '1936', '0'), +('14', '10', '18', '1651', '1871', '0'), +('14', '10', '18', '4410', '1685', '0'), +('14', '10', '18', '1251', '1318', '0'), +('14', '10', '18', '1221', '1234', '0'), +('14', '10', '19', '68239', '3096', '0'), +('14', '10', '19', '1368', '2066', '0'), +('14', '10', '19', '1652', '2046', '0'), +('14', '10', '19', '1252', '1363', '0'), +('14', '10', '13', '14759', '7890', '0'), +('14', '10', '13', '27711', '4856', '0'), +('14', '10', '13', '13987', '3804', '0'), +('14', '10', '13', '11625', '3642', '0'), +('14', '10', '14', '10219', '8362', '0'), +('14', '10', '14', '14759', '7890', '0'), +('14', '10', '14', '13987', '3804', '0'), +('14', '10', '14', '11625', '3642', '0'), +('14', '10', '11', '14762', '3204', '0'), +('14', '10', '11', '9246', '2126', '0'), +('14', '10', '11', '13353', '1500', '0'), +('14', '10', '11', '20677', '1200', '0'), +('14', '11', '22', '10323', '0', '0'), +('14', '11', '22', '9246', '0', '0'), +('14', '11', '22', '21509', '0', '0'), +('14', '11', '22', '8007', '0', '0'), +('14', '11', '1', '14702', '5000', '0'), +('14', '11', '1', '14701', '4624', '0'), +('14', '11', '1', '14559', '3176', '0'), +('14', '11', '1', '30361', '2640', '0'), +('14', '11', '2', '10143', '7136', '0'), +('14', '11', '2', '30363', '3700', '0'), +('14', '11', '2', '1246', '3253', '0'), +('14', '11', '2', '1211', '3096', '0'), +('14', '11', '3', '1275', '3978', '0'), +('14', '11', '3', '11052', '1993', '0'), +('14', '11', '3', '1642', '1923', '0'), +('14', '11', '3', '1212', '1505', '0'), +('14', '11', '5', '14703', '8800', '0'), +('14', '11', '5', '14700', '4836', '0'), +('14', '11', '5', '14558', '4474', '0'), +('14', '11', '5', '10055', '4060', '0'), +('14', '11', '8', '11603', '9567', '0'), +('14', '11', '8', '2349', '3651', '0'), +('14', '11', '8', '11621', '3631', '0'), +('14', '11', '8', '1409', '2827', '0'), +('14', '11', '6', '1542', '6291', '0'), +('14', '11', '6', '1557', '5371', '0'), +('14', '11', '6', '1905', '5140', '0'), +('14', '11', '6', '1276', '3275', '0'), +('14', '11', '17', '1253', '10256', '0'), +('14', '11', '17', '11641', '10147', '0'), +('14', '11', '17', '1644', '9140', '0'), +('14', '11', '17', '1357', '5607', '0'), +('14', '11', '7', '1362', '3148', '0'), +('14', '11', '7', '1218', '2148', '0'), +('14', '11', '7', '1248', '1933', '0'), +('14', '11', '7', '1321', '1782', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '11', '9', '12806', '3057', '0'), +('14', '11', '9', '14650', '2424', '0'), +('14', '11', '9', '4344', '2127', '0'), +('14', '11', '9', '10408', '2018', '0'), +('14', '11', '15', '10366', '4854', '0'), +('14', '11', '15', '10151', '4200', '0'), +('14', '11', '15', '10163', '3709', '0'), +('14', '11', '15', '14679', '3360', '0'), +('14', '11', '20', '11666', '12173', '0'), +('14', '11', '20', '2742', '5259', '0'), +('14', '11', '20', '1277', '1703', '0'), +('14', '11', '20', '2345', '1624', '0'), +('14', '11', '12', '2923', '4348', '0'), +('14', '11', '12', '20655', '4043', '0'), +('14', '11', '12', '1404', '2524', '0'), +('14', '11', '12', '1650', '1985', '0'), +('14', '11', '18', '1651', '1907', '0'), +('14', '11', '18', '4410', '1685', '0'), +('14', '11', '18', '1251', '1318', '0'), +('14', '11', '18', '1221', '1234', '0'), +('14', '11', '19', '68239', '3132', '0'), +('14', '11', '19', '1368', '2066', '0'), +('14', '11', '19', '1652', '2046', '0'), +('14', '11', '19', '1252', '1363', '0'), +('14', '11', '13', '14759', '7955', '0'), +('14', '11', '13', '27711', '4946', '0'), +('14', '11', '13', '13987', '3864', '0'), +('14', '11', '13', '11625', '3656', '0'), +('14', '11', '14', '10219', '8362', '0'), +('14', '11', '14', '14759', '7955', '0'), +('14', '11', '14', '13987', '3864', '0'), +('14', '11', '14', '11625', '3656', '0'), +('14', '11', '11', '14762', '3204', '0'), +('14', '11', '11', '9246', '2247', '0'), +('14', '11', '11', '13353', '1500', '0'), +('14', '11', '11', '20677', '1200', '0'), +('14', '12', '22', '10323', '0', '0'), +('14', '12', '22', '9246', '0', '0'), +('14', '12', '22', '21509', '0', '0'), +('14', '12', '22', '8007', '0', '0'), +('14', '12', '1', '14702', '5000', '0'), +('14', '12', '1', '14701', '4624', '0'), +('14', '12', '1', '14559', '3225', '0'), +('14', '12', '1', '30361', '2640', '0'), +('14', '12', '2', '10143', '7136', '0'), +('14', '12', '2', '30363', '3700', '0'), +('14', '12', '2', '1246', '3338', '0'), +('14', '12', '2', '1211', '3181', '0'), +('14', '12', '3', '1275', '4051', '0'), +('14', '12', '3', '11052', '2174', '0'), +('14', '12', '3', '1642', '1936', '0'), +('14', '12', '3', '1212', '1517', '0'), +('14', '12', '5', '14703', '8800', '0'), +('14', '12', '5', '14700', '4836', '0'), +('14', '12', '5', '14558', '4541', '0'), +('14', '12', '5', '10055', '4060', '0'), +('14', '12', '8', '11603', '9675', '0'), +('14', '12', '8', '2349', '3651', '0'), +('14', '12', '8', '11621', '3631', '0'), +('14', '12', '8', '1409', '2827', '0'), +('14', '12', '6', '1542', '6399', '0'), +('14', '12', '6', '1557', '5371', '0'), +('14', '12', '6', '1905', '5147', '0'), +('14', '12', '6', '1276', '3275', '0'), +('14', '12', '17', '11641', '10328', '0'), +('14', '12', '17', '1253', '10271', '0'), +('14', '12', '17', '1644', '9200', '0'), +('14', '12', '17', '1247', '5751', '0'), +('14', '12', '7', '1362', '3148', '0'), +('14', '12', '7', '1218', '2233', '0'), +('14', '12', '7', '1248', '2017', '0'), +('14', '12', '7', '1321', '1782', '0'), +('14', '12', '9', '12806', '3142', '0'), +('14', '12', '9', '14650', '2424', '0'), +('14', '12', '9', '4344', '2127', '0'), +('14', '12', '9', '1649', '2025', '0'), +('14', '12', '15', '10366', '4854', '0'), +('14', '12', '15', '10151', '4200', '0'), +('14', '12', '15', '10163', '3709', '0'), +('14', '12', '15', '14679', '3360', '0'), +('14', '12', '20', '11666', '12183', '0'), +('14', '12', '20', '2742', '5274', '0'), +('14', '12', '20', '1277', '1764', '0'), +('14', '12', '20', '2345', '1624', '0'), +('14', '12', '12', '2923', '4348', '0'), +('14', '12', '12', '20655', '4070', '0'), +('14', '12', '12', '1404', '2524', '0'), +('14', '12', '12', '1250', '2050', '0'), +('14', '12', '18', '1651', '1944', '0'), +('14', '12', '18', '4410', '1685', '0'), +('14', '12', '18', '1251', '1318', '0'), +('14', '12', '18', '1221', '1234', '0'), +('14', '12', '19', '68239', '3169', '0'), +('14', '12', '19', '1368', '2066', '0'), +('14', '12', '19', '1652', '2046', '0'), +('14', '12', '19', '4407', '1395', '0'), +('14', '12', '13', '14759', '8021', '0'), +('14', '12', '13', '27711', '5037', '0'), +('14', '12', '13', '13987', '3925', '0'), +('14', '12', '13', '11625', '3669', '0'), +('14', '12', '14', '10219', '8362', '0'), +('14', '12', '14', '14759', '8021', '0'), +('14', '12', '14', '13987', '3925', '0'), +('14', '12', '14', '11625', '3669', '0'), +('14', '12', '11', '14762', '3204', '0'), +('14', '12', '11', '9246', '2368', '0'), +('14', '12', '11', '13353', '1500', '0'), +('14', '12', '11', '20677', '1200', '0'), +('14', '13', '22', '10323', '0', '0'), +('14', '13', '22', '9246', '0', '0'), +('14', '13', '22', '21509', '0', '0'), +('14', '13', '22', '8007', '0', '0'), +('14', '13', '1', '14702', '5000', '0'), +('14', '13', '1', '14701', '4624', '0'), +('14', '13', '1', '14559', '3273', '0'), +('14', '13', '1', '30361', '2640', '0'), +('14', '13', '2', '10143', '7136', '0'), +('14', '13', '2', '30363', '3700', '0'), +('14', '13', '2', '1246', '3422', '0'), +('14', '13', '2', '1211', '3265', '0'), +('14', '13', '3', '1275', '4123', '0'), +('14', '13', '3', '11052', '2356', '0'), +('14', '13', '3', '1642', '1948', '0'), +('14', '13', '3', '1212', '1530', '0'), +('14', '13', '5', '14703', '8800', '0'), +('14', '13', '5', '14700', '4836', '0'), +('14', '13', '5', '14558', '4609', '0'), +('14', '13', '5', '10055', '4060', '0'), +('14', '13', '8', '11603', '9784', '0'), +('14', '13', '8', '2349', '3651', '0'), +('14', '13', '8', '11621', '3631', '0'), +('14', '13', '8', '1409', '2827', '0'), +('14', '13', '6', '1542', '6508', '0'), +('14', '13', '6', '1557', '5371', '0'), +('14', '13', '6', '1905', '5155', '0'), +('14', '13', '6', '1276', '3275', '0'), +('14', '13', '17', '11641', '10510', '0'), +('14', '13', '17', '1253', '10285', '0'), +('14', '13', '17', '1644', '9260', '0'), +('14', '13', '17', '1214', '5925', '0'), +('14', '13', '7', '1362', '3148', '0'), +('14', '13', '7', '1218', '2318', '0'), +('14', '13', '7', '1248', '2102', '0'), +('14', '13', '7', '1321', '1782', '0'), +('14', '13', '9', '12806', '3226', '0'), +('14', '13', '9', '14650', '2424', '0'), +('14', '13', '9', '4344', '2127', '0'), +('14', '13', '9', '1649', '2062', '0'), +('14', '13', '15', '10366', '4854', '0'), +('14', '13', '15', '10151', '4200', '0'), +('14', '13', '15', '10163', '3709', '0'), +('14', '13', '15', '14679', '3360', '0'), +('14', '13', '20', '11666', '12193', '0'), +('14', '13', '20', '2742', '5288', '0'), +('14', '13', '20', '1277', '1824', '0'), +('14', '13', '20', '2345', '1624', '0'), +('14', '13', '12', '2923', '4348', '0'), +('14', '13', '12', '20655', '4097', '0'), +('14', '13', '12', '1404', '2524', '0'), +('14', '13', '12', '1250', '2147', '0'), +('14', '13', '18', '1651', '1980', '0'), +('14', '13', '18', '4410', '1685', '0'), +('14', '13', '18', '1251', '1318', '0'), +('14', '13', '18', '1221', '1234', '0'), +('14', '13', '19', '68239', '3205', '0'), +('14', '13', '19', '1368', '2066', '0'), +('14', '13', '19', '1652', '2046', '0'), +('14', '13', '19', '4407', '1504', '0'), +('14', '13', '13', '14759', '8086', '0'), +('14', '13', '13', '27711', '5127', '0'), +('14', '13', '13', '13987', '3985', '0'), +('14', '13', '13', '11625', '3682', '0'), +('14', '13', '14', '10219', '8362', '0'), +('14', '13', '14', '14759', '8086', '0'), +('14', '13', '14', '13987', '3985', '0'), +('14', '13', '14', '11625', '3682', '0'), +('14', '13', '11', '14762', '3204', '0'), +('14', '13', '11', '9246', '2488', '0'), +('14', '13', '11', '13353', '1500', '0'), +('14', '13', '11', '20677', '1200', '0'), +('14', '14', '22', '10323', '0', '0'), +('14', '14', '22', '9246', '0', '0'), +('14', '14', '22', '21509', '0', '0'), +('14', '14', '22', '8007', '0', '0'), +('14', '14', '1', '14702', '5000', '0'), +('14', '14', '1', '14701', '4624', '0'), +('14', '14', '1', '14559', '3321', '0'), +('14', '14', '1', '30361', '2640', '0'), +('14', '14', '2', '10143', '7136', '0'), +('14', '14', '2', '30363', '3700', '0'), +('14', '14', '2', '1246', '3507', '0'), +('14', '14', '2', '1211', '3350', '0'), +('14', '14', '3', '1275', '4196', '0'), +('14', '14', '3', '11052', '2537', '0'), +('14', '14', '3', '1642', '1960', '0'), +('14', '14', '3', '1212', '1542', '0'), +('14', '14', '5', '14703', '8800', '0'), +('14', '14', '5', '14700', '4836', '0'), +('14', '14', '5', '14558', '4677', '0'), +('14', '14', '5', '10055', '4060', '0'), +('14', '14', '8', '11603', '9893', '0'), +('14', '14', '8', '2349', '3651', '0'), +('14', '14', '8', '11621', '3631', '0'), +('14', '14', '8', '1409', '2827', '0'), +('14', '14', '6', '1542', '6617', '0'), +('14', '14', '6', '1557', '5371', '0'), +('14', '14', '6', '1905', '5162', '0'), +('14', '14', '6', '1276', '3275', '0'), +('14', '14', '17', '11641', '10691', '0'), +('14', '14', '17', '1253', '10300', '0'), +('14', '14', '17', '1644', '9321', '0'), +('14', '14', '17', '1214', '6101', '0'), +('14', '14', '7', '1362', '3148', '0'), +('14', '14', '7', '1218', '2402', '0'), +('14', '14', '7', '1248', '2187', '0'), +('14', '14', '7', '1321', '1782', '0'), +('14', '14', '9', '12806', '3311', '0'), +('14', '14', '9', '14650', '2424', '0'), +('14', '14', '9', '4344', '2127', '0'), +('14', '14', '9', '1649', '2098', '0'), +('14', '14', '15', '10366', '4854', '0'), +('14', '14', '15', '10151', '4200', '0'), +('14', '14', '15', '10163', '3709', '0'), +('14', '14', '15', '14679', '3360', '0'), +('14', '14', '20', '11666', '12203', '0'), +('14', '14', '20', '2742', '5303', '0'), +('14', '14', '20', '1277', '1885', '0'), +('14', '14', '20', '2345', '1624', '0'), +('14', '14', '12', '2923', '4348', '0'), +('14', '14', '12', '20655', '4124', '0'), +('14', '14', '12', '1404', '2524', '0'), +('14', '14', '12', '1250', '2244', '0'), +('14', '14', '18', '1651', '2016', '0'), +('14', '14', '18', '4410', '1685', '0'), +('14', '14', '18', '1251', '1318', '0'), +('14', '14', '18', '1221', '1234', '0'), +('14', '14', '19', '68239', '3241', '0'), +('14', '14', '19', '1368', '2066', '0'), +('14', '14', '19', '1652', '2046', '0'), +('14', '14', '19', '4407', '1612', '0'), +('14', '14', '13', '14759', '8151', '0'), +('14', '14', '13', '27711', '5218', '0'), +('14', '14', '13', '13987', '4046', '0'), +('14', '14', '13', '11625', '3695', '0'), +('14', '14', '14', '10219', '8362', '0'), +('14', '14', '14', '14759', '8151', '0'), +('14', '14', '14', '13987', '4046', '0'), +('14', '14', '14', '11625', '3695', '0'), +('14', '14', '11', '14762', '3204', '0'), +('14', '14', '11', '9246', '2609', '0'), +('14', '14', '11', '13353', '1500', '0'), +('14', '14', '11', '20677', '1200', '0'), +('14', '15', '22', '10323', '0', '0'), +('14', '15', '22', '9246', '0', '0'), +('14', '15', '22', '21509', '0', '0'), +('14', '15', '22', '8007', '0', '0'), +('14', '15', '1', '14702', '5000', '0'), +('14', '15', '1', '14701', '4624', '0'), +('14', '15', '1', '14559', '3370', '0'), +('14', '15', '1', '30361', '2640', '0'), +('14', '15', '2', '10143', '7136', '0'), +('14', '15', '2', '30363', '3700', '0'), +('14', '15', '2', '1246', '3591', '0'), +('14', '15', '2', '1211', '3434', '0'), +('14', '15', '3', '1275', '4268', '0'), +('14', '15', '3', '11052', '2718', '0'), +('14', '15', '3', '1642', '1972', '0'), +('14', '15', '3', '1212', '1554', '0'), +('14', '15', '5', '14703', '8800', '0'), +('14', '15', '5', '14700', '4836', '0'), +('14', '15', '5', '14558', '4744', '0'), +('14', '15', '5', '10055', '4060', '0'), +('14', '15', '8', '11603', '10002', '0'), +('14', '15', '8', '2349', '3651', '0'), +('14', '15', '8', '11621', '3631', '0'), +('14', '15', '8', '1409', '2827', '0'), +('14', '15', '6', '1542', '6726', '0'), +('14', '15', '6', '1557', '5371', '0'), +('14', '15', '6', '1905', '5169', '0'), +('14', '15', '6', '1276', '3275', '0'), +('14', '15', '17', '11641', '10872', '0'), +('14', '15', '17', '1253', '10314', '0'), +('14', '15', '17', '1644', '9381', '0'), +('14', '15', '17', '1214', '6277', '0'), +('14', '15', '7', '1362', '3148', '0'), +('14', '15', '7', '1218', '2487', '0'), +('14', '15', '7', '1248', '2271', '0'), +('14', '15', '7', '1321', '1782', '0'), +('14', '15', '9', '12806', '3395', '0'), +('14', '15', '9', '14650', '2424', '0'), +('14', '15', '9', '1649', '2134', '0'), +('14', '15', '9', '4344', '2127', '0'), +('14', '15', '15', '10366', '4854', '0'), +('14', '15', '15', '10151', '4200', '0'), +('14', '15', '15', '10163', '3709', '0'), +('14', '15', '15', '14679', '3360', '0'), +('14', '15', '20', '11666', '12213', '0'), +('14', '15', '20', '2742', '5317', '0'), +('14', '15', '20', '1277', '1945', '0'), +('14', '15', '20', '2345', '1624', '0'), +('14', '15', '12', '2923', '4348', '0'), +('14', '15', '12', '20655', '4151', '0'), +('14', '15', '12', '1404', '2524', '0'), +('14', '15', '12', '1250', '2340', '0'), +('14', '15', '18', '1651', '2052', '0'), +('14', '15', '18', '4410', '1685', '0'), +('14', '15', '18', '1251', '1318', '0'), +('14', '15', '18', '1221', '1234', '0'), +('14', '15', '19', '68239', '3277', '0'), +('14', '15', '19', '1368', '2066', '0'), +('14', '15', '19', '1652', '2046', '0'), +('14', '15', '19', '4407', '1721', '0'), +('14', '15', '13', '14759', '8216', '0'), +('14', '15', '13', '27711', '5309', '0'), +('14', '15', '13', '13987', '4106', '0'), +('14', '15', '13', '13400', '3725', '0'), +('14', '15', '14', '10219', '8362', '0'), +('14', '15', '14', '14759', '8216', '0'), +('14', '15', '14', '13987', '4106', '0'), +('14', '15', '14', '9401', '3735', '0'), +('14', '15', '11', '14762', '3204', '0'), +('14', '15', '11', '9246', '2730', '0'), +('14', '15', '11', '13353', '1500', '0'), +('14', '15', '11', '20677', '1200', '0'), +('14', '16', '22', '10323', '0', '0'), +('14', '16', '22', '9246', '0', '0'), +('14', '16', '22', '21509', '0', '0'), +('14', '16', '22', '8007', '0', '0'), +('14', '16', '1', '14702', '5000', '0'), +('14', '16', '1', '14701', '4624', '0'), +('14', '16', '1', '14559', '3418', '0'), +('14', '16', '1', '30361', '2640', '0'), +('14', '16', '2', '10143', '7136', '0'), +('14', '16', '2', '30363', '3700', '0'), +('14', '16', '2', '1246', '3676', '0'), +('14', '16', '2', '1211', '3519', '0'), +('14', '16', '3', '1275', '4341', '0'), +('14', '16', '3', '11052', '2899', '0'), +('14', '16', '3', '1642', '1984', '0'), +('14', '16', '3', '1212', '1566', '0'), +('14', '16', '5', '14703', '8800', '0'), +('14', '16', '5', '14700', '4836', '0'), +('14', '16', '5', '14558', '4812', '0'), +('14', '16', '5', '10055', '4060', '0'), +('14', '16', '8', '11603', '10110', '0'), +('14', '16', '8', '2349', '3651', '0'), +('14', '16', '8', '11621', '3631', '0'), +('14', '16', '8', '1409', '2827', '0'), +('14', '16', '6', '1542', '6834', '0'), +('14', '16', '6', '1557', '5371', '0'), +('14', '16', '6', '1905', '5176', '0'), +('14', '16', '6', '1276', '3275', '0'), +('14', '16', '17', '11641', '11053', '0'), +('14', '16', '17', '1253', '10329', '0'), +('14', '16', '17', '1644', '9442', '0'), +('14', '16', '17', '1214', '6452', '0'), +('14', '16', '7', '1362', '3148', '0'), +('14', '16', '7', '1218', '2571', '0'), +('14', '16', '7', '1248', '2356', '0'), +('14', '16', '7', '1648', '1815', '0'), +('14', '16', '9', '12806', '3480', '0'), +('14', '16', '9', '14650', '2424', '0'), +('14', '16', '9', '1649', '2170', '0'), +('14', '16', '9', '4344', '2127', '0'), +('14', '16', '15', '10366', '4854', '0'), +('14', '16', '15', '10151', '4200', '0'), +('14', '16', '15', '10163', '3709', '0'), +('14', '16', '15', '14679', '3360', '0'), +('14', '16', '20', '11666', '12223', '0'), +('14', '16', '20', '2742', '5332', '0'), +('14', '16', '20', '1277', '2005', '0'), +('14', '16', '20', '2345', '1624', '0'), +('14', '16', '12', '2923', '4348', '0'), +('14', '16', '12', '20655', '4178', '0'), +('14', '16', '12', '1404', '2524', '0'), +('14', '16', '12', '1250', '2437', '0'), +('14', '16', '18', '1651', '2089', '0'), +('14', '16', '18', '4410', '1685', '0'), +('14', '16', '18', '1251', '1318', '0'), +('14', '16', '18', '1221', '1234', '0'), +('14', '16', '19', '68239', '3314', '0'), +('14', '16', '19', '1368', '2066', '0'), +('14', '16', '19', '1652', '2046', '0'), +('14', '16', '19', '4407', '1830', '0'), +('14', '16', '13', '14759', '8282', '0'), +('14', '16', '13', '27711', '5399', '0'), +('14', '16', '13', '13987', '4166', '0'), +('14', '16', '13', '13400', '3773', '0'), +('14', '16', '14', '10219', '8362', '0'), +('14', '16', '14', '14759', '8282', '0'), +('14', '16', '14', '13987', '4166', '0'), +('14', '16', '14', '9401', '3820', '0'), +('14', '16', '11', '14762', '3204', '0'), +('14', '16', '11', '9246', '2851', '0'), +('14', '16', '11', '13353', '1500', '0'), +('14', '16', '11', '20677', '1200', '0'), +('14', '17', '22', '10323', '0', '0'), +('14', '17', '22', '9246', '0', '0'), +('14', '17', '22', '21509', '0', '0'), +('14', '17', '22', '8007', '0', '0'), +('14', '17', '1', '14702', '5000', '0'), +('14', '17', '1', '14701', '4624', '0'), +('14', '17', '1', '14559', '3466', '0'), +('14', '17', '1', '30361', '2640', '0'), +('14', '17', '2', '10143', '7136', '0'), +('14', '17', '2', '1246', '3760', '0'), +('14', '17', '2', '30363', '3700', '0'), +('14', '17', '2', '1211', '3603', '0'), +('14', '17', '3', '1275', '4413', '0'), +('14', '17', '3', '11052', '3080', '0'), +('14', '17', '3', '1642', '1996', '0'), +('14', '17', '3', '1212', '1578', '0'), +('14', '17', '5', '14703', '8800', '0'), +('14', '17', '5', '14558', '4880', '0'), +('14', '17', '5', '14700', '4836', '0'), +('14', '17', '5', '10055', '4060', '0'), +('14', '17', '8', '11603', '10219', '0'), +('14', '17', '8', '2349', '3651', '0'), +('14', '17', '8', '11621', '3631', '0'), +('14', '17', '8', '1409', '2827', '0'), +('14', '17', '6', '1542', '6943', '0'), +('14', '17', '6', '1557', '5371', '0'), +('14', '17', '6', '1905', '5184', '0'), +('14', '17', '6', '1276', '3275', '0'), +('14', '17', '17', '11641', '11234', '0'), +('14', '17', '17', '1253', '10343', '0'), +('14', '17', '17', '1644', '9502', '0'), +('14', '17', '17', '1214', '6628', '0'), +('14', '17', '7', '1362', '3148', '0'), +('14', '17', '7', '1218', '2656', '0'), +('14', '17', '7', '1248', '2440', '0'), +('14', '17', '7', '1648', '1875', '0'), +('14', '17', '9', '12806', '3564', '0'), +('14', '17', '9', '14650', '2424', '0'), +('14', '17', '9', '1649', '2207', '0'), +('14', '17', '9', '4344', '2127', '0'), +('14', '17', '15', '10366', '4854', '0'), +('14', '17', '15', '10151', '4200', '0'), +('14', '17', '15', '10163', '3709', '0'), +('14', '17', '15', '14679', '3360', '0'), +('14', '17', '20', '11666', '12234', '0'), +('14', '17', '20', '2742', '5346', '0'), +('14', '17', '20', '1277', '2066', '0'), +('14', '17', '20', '2345', '1624', '0'), +('14', '17', '12', '2923', '4348', '0'), +('14', '17', '12', '20655', '4205', '0'), +('14', '17', '12', '1250', '2533', '0'), +('14', '17', '12', '1404', '2524', '0'), +('14', '17', '18', '1651', '2125', '0'), +('14', '17', '18', '4410', '1685', '0'), +('14', '17', '18', '1251', '1318', '0'), +('14', '17', '18', '1221', '1234', '0'), +('14', '17', '19', '68239', '3350', '0'), +('14', '17', '19', '1368', '2066', '0'), +('14', '17', '19', '1652', '2046', '0'), +('14', '17', '19', '4407', '1939', '0'), +('14', '17', '13', '14759', '8347', '0'), +('14', '17', '13', '27711', '5490', '0'), +('14', '17', '13', '13987', '4227', '0'), +('14', '17', '13', '13400', '3821', '0'), +('14', '17', '14', '10219', '8362', '0'), +('14', '17', '14', '14759', '8347', '0'), +('14', '17', '14', '13987', '4227', '0'), +('14', '17', '14', '9401', '3904', '0'), +('14', '17', '11', '14762', '3204', '0'), +('14', '17', '11', '9246', '2972', '0'), +('14', '17', '11', '13353', '1500', '0'), +('14', '17', '11', '20677', '1200', '0'), +('14', '18', '22', '10323', '0', '0'), +('14', '18', '22', '9246', '0', '0'), +('14', '18', '22', '21509', '0', '0'), +('14', '18', '22', '8007', '0', '0'), +('14', '18', '1', '14702', '5000', '0'), +('14', '18', '1', '14701', '4624', '0'), +('14', '18', '1', '14559', '3515', '0'), +('14', '18', '1', '30361', '2640', '0'), +('14', '18', '2', '10143', '7136', '0'), +('14', '18', '2', '1246', '3845', '0'), +('14', '18', '2', '30363', '3700', '0'), +('14', '18', '2', '1211', '3688', '0'), +('14', '18', '3', '1275', '4486', '0'), +('14', '18', '3', '11052', '3262', '0'), +('14', '18', '3', '1642', '2008', '0'), +('14', '18', '3', '1212', '1590', '0'), +('14', '18', '5', '14703', '8800', '0'), +('14', '18', '5', '14558', '4947', '0'), +('14', '18', '5', '14700', '4836', '0'), +('14', '18', '5', '10055', '4060', '0'), +('14', '18', '8', '11603', '10328', '0'), +('14', '18', '8', '2349', '3651', '0'), +('14', '18', '8', '11621', '3631', '0'), +('14', '18', '8', '1409', '2827', '0'), +('14', '18', '6', '1542', '7052', '0'), +('14', '18', '6', '1557', '5371', '0'), +('14', '18', '6', '1905', '5191', '0'), +('14', '18', '6', '1276', '3275', '0'), +('14', '18', '17', '11641', '11416', '0'), +('14', '18', '17', '1253', '10358', '0'), +('14', '18', '17', '1644', '9562', '0'), +('14', '18', '17', '1214', '6804', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '18', '7', '1362', '3148', '0'), +('14', '18', '7', '1218', '2740', '0'), +('14', '18', '7', '1248', '2525', '0'), +('14', '18', '7', '1648', '1936', '0'), +('14', '18', '9', '12806', '3649', '0'), +('14', '18', '9', '14650', '2424', '0'), +('14', '18', '9', '1649', '2243', '0'), +('14', '18', '9', '4344', '2127', '0'), +('14', '18', '15', '10366', '4854', '0'), +('14', '18', '15', '10151', '4200', '0'), +('14', '18', '15', '10163', '3709', '0'), +('14', '18', '15', '14679', '3360', '0'), +('14', '18', '20', '11666', '12244', '0'), +('14', '18', '20', '2742', '5361', '0'), +('14', '18', '20', '1277', '2126', '0'), +('14', '18', '20', '2345', '1624', '0'), +('14', '18', '12', '2923', '4348', '0'), +('14', '18', '12', '20655', '4232', '0'), +('14', '18', '12', '1250', '2630', '0'), +('14', '18', '12', '1404', '2524', '0'), +('14', '18', '18', '1651', '2161', '0'), +('14', '18', '18', '4410', '1685', '0'), +('14', '18', '18', '1251', '1318', '0'), +('14', '18', '18', '1221', '1234', '0'), +('14', '18', '19', '68239', '3386', '0'), +('14', '18', '19', '1368', '2066', '0'), +('14', '18', '19', '4407', '2047', '0'), +('14', '18', '19', '1652', '2046', '0'), +('14', '18', '13', '14759', '8412', '0'), +('14', '18', '13', '27711', '5580', '0'), +('14', '18', '13', '13987', '4287', '0'), +('14', '18', '13', '13400', '3870', '0'), +('14', '18', '14', '14759', '8412', '0'), +('14', '18', '14', '10219', '8362', '0'), +('14', '18', '14', '13987', '4287', '0'), +('14', '18', '14', '9401', '3989', '0'), +('14', '18', '11', '14762', '3204', '0'), +('14', '18', '11', '9246', '3092', '0'), +('14', '18', '11', '13353', '1500', '0'), +('14', '18', '11', '20677', '1200', '0'), +('14', '19', '22', '10323', '0', '0'), +('14', '19', '22', '9246', '0', '0'), +('14', '19', '22', '21509', '0', '0'), +('14', '19', '22', '8007', '0', '0'), +('14', '19', '1', '14702', '5000', '0'), +('14', '19', '1', '14701', '4624', '0'), +('14', '19', '1', '14559', '3563', '0'), +('14', '19', '1', '30361', '2640', '0'), +('14', '19', '2', '10143', '7136', '0'), +('14', '19', '2', '1246', '3929', '0'), +('14', '19', '2', '1211', '3773', '0'), +('14', '19', '2', '30363', '3700', '0'), +('14', '19', '3', '1275', '4558', '0'), +('14', '19', '3', '11052', '3443', '0'), +('14', '19', '3', '1642', '2020', '0'), +('14', '19', '3', '4505', '1667', '0'), +('14', '19', '5', '14703', '8800', '0'), +('14', '19', '5', '14558', '5015', '0'), +('14', '19', '5', '14700', '4836', '0'), +('14', '19', '5', '10055', '4060', '0'), +('14', '19', '8', '11603', '10436', '0'), +('14', '19', '8', '2349', '3651', '0'), +('14', '19', '8', '11621', '3631', '0'), +('14', '19', '8', '1409', '2827', '0'), +('14', '19', '6', '1542', '7160', '0'), +('14', '19', '6', '1557', '5371', '0'), +('14', '19', '6', '1905', '5198', '0'), +('14', '19', '6', '1276', '3275', '0'), +('14', '19', '17', '11641', '11597', '0'), +('14', '19', '17', '1253', '10372', '0'), +('14', '19', '17', '1644', '9623', '0'), +('14', '19', '17', '1214', '6980', '0'), +('14', '19', '7', '1362', '3148', '0'), +('14', '19', '7', '1218', '2825', '0'), +('14', '19', '7', '1248', '2609', '0'), +('14', '19', '7', '1648', '1996', '0'), +('14', '19', '9', '12806', '3733', '0'), +('14', '19', '9', '14650', '2424', '0'), +('14', '19', '9', '1649', '2279', '0'), +('14', '19', '9', '4344', '2127', '0'), +('14', '19', '15', '10366', '4854', '0'), +('14', '19', '15', '10151', '4200', '0'), +('14', '19', '15', '10163', '3709', '0'), +('14', '19', '15', '14679', '3360', '0'), +('14', '19', '20', '11666', '12254', '0'), +('14', '19', '20', '2742', '5375', '0'), +('14', '19', '20', '1277', '2187', '0'), +('14', '19', '20', '2345', '1624', '0'), +('14', '19', '12', '2923', '4348', '0'), +('14', '19', '12', '20655', '4259', '0'), +('14', '19', '12', '1250', '2727', '0'), +('14', '19', '12', '1404', '2524', '0'), +('14', '19', '18', '1651', '2197', '0'), +('14', '19', '18', '4410', '1685', '0'), +('14', '19', '18', '1251', '1318', '0'), +('14', '19', '18', '1221', '1234', '0'), +('14', '19', '19', '68239', '3422', '0'), +('14', '19', '19', '4407', '2156', '0'), +('14', '19', '19', '1368', '2066', '0'), +('14', '19', '19', '1652', '2046', '0'), +('14', '19', '13', '14759', '8477', '0'), +('14', '19', '13', '27711', '5671', '0'), +('14', '19', '13', '13987', '4348', '0'), +('14', '19', '13', '13400', '3918', '0'), +('14', '19', '14', '14759', '8477', '0'), +('14', '19', '14', '10219', '8362', '0'), +('14', '19', '14', '13987', '4348', '0'), +('14', '19', '14', '9401', '4073', '0'), +('14', '19', '11', '9246', '3213', '0'), +('14', '19', '11', '14762', '3204', '0'), +('14', '19', '11', '13353', '1500', '0'), +('14', '19', '11', '20677', '1200', '0'), +('14', '20', '22', '10323', '0', '0'), +('14', '20', '22', '9246', '0', '0'), +('14', '20', '22', '21509', '0', '0'), +('14', '20', '22', '8007', '0', '0'), +('14', '20', '1', '14702', '5000', '0'), +('14', '20', '1', '14701', '4624', '0'), +('14', '20', '1', '14559', '3611', '0'), +('14', '20', '1', '30361', '2640', '0'), +('14', '20', '2', '10143', '7136', '0'), +('14', '20', '2', '1246', '4014', '0'), +('14', '20', '2', '1211', '3857', '0'), +('14', '20', '2', '30363', '3700', '0'), +('14', '20', '3', '1275', '4631', '0'), +('14', '20', '3', '11052', '3624', '0'), +('14', '20', '3', '1642', '2032', '0'), +('14', '20', '3', '4505', '1752', '0'), +('14', '20', '5', '14703', '8800', '0'), +('14', '20', '5', '14558', '5082', '0'), +('14', '20', '5', '14700', '4836', '0'), +('14', '20', '5', '10055', '4060', '0'), +('14', '20', '8', '11603', '10545', '0'), +('14', '20', '8', '2349', '3651', '0'), +('14', '20', '8', '11621', '3631', '0'), +('14', '20', '8', '1409', '2827', '0'), +('14', '20', '6', '1542', '7269', '0'), +('14', '20', '6', '1557', '5371', '0'), +('14', '20', '6', '1905', '5205', '0'), +('14', '20', '6', '1276', '3275', '0'), +('14', '20', '17', '11641', '11778', '0'), +('14', '20', '17', '1253', '10387', '0'), +('14', '20', '17', '1644', '9683', '0'), +('14', '20', '17', '1214', '7156', '0'), +('14', '20', '7', '1362', '3148', '0'), +('14', '20', '7', '1218', '2910', '0'), +('14', '20', '7', '1248', '2694', '0'), +('14', '20', '7', '1648', '2056', '0'), +('14', '20', '9', '12806', '3818', '0'), +('14', '20', '9', '14650', '2424', '0'), +('14', '20', '9', '1649', '2315', '0'), +('14', '20', '9', '4344', '2127', '0'), +('14', '20', '15', '10366', '4854', '0'), +('14', '20', '15', '10151', '4200', '0'), +('14', '20', '15', '10163', '3709', '0'), +('14', '20', '15', '14679', '3360', '0'), +('14', '20', '20', '11666', '12264', '0'), +('14', '20', '20', '2742', '5390', '0'), +('14', '20', '20', '1277', '2247', '0'), +('14', '20', '20', '2345', '1624', '0'), +('14', '20', '12', '2923', '4348', '0'), +('14', '20', '12', '20655', '4286', '0'), +('14', '20', '12', '1250', '2823', '0'), +('14', '20', '12', '1404', '2524', '0'), +('14', '20', '18', '1651', '2234', '0'), +('14', '20', '18', '4410', '1685', '0'), +('14', '20', '18', '1251', '1318', '0'), +('14', '20', '18', '1221', '1234', '0'), +('14', '20', '19', '68239', '3459', '0'), +('14', '20', '19', '4407', '2265', '0'), +('14', '20', '19', '1368', '2066', '0'), +('14', '20', '19', '1652', '2046', '0'), +('14', '20', '13', '14759', '8543', '0'), +('14', '20', '13', '27711', '5762', '0'), +('14', '20', '13', '13987', '4408', '0'), +('14', '20', '13', '13400', '3966', '0'), +('14', '20', '14', '14759', '8543', '0'), +('14', '20', '14', '10219', '8362', '0'), +('14', '20', '14', '13987', '4408', '0'), +('14', '20', '14', '9401', '4158', '0'), +('14', '20', '11', '9246', '3334', '0'), +('14', '20', '11', '14762', '3204', '0'), +('14', '20', '11', '13353', '1500', '0'), +('14', '20', '11', '20677', '1200', '0'), +('14', '21', '22', '10323', '0', '0'), +('14', '21', '22', '9246', '0', '0'), +('14', '21', '22', '21509', '0', '0'), +('14', '21', '22', '8007', '0', '0'), +('14', '21', '1', '14702', '5000', '0'), +('14', '21', '1', '14701', '4624', '0'), +('14', '21', '1', '14559', '3660', '0'), +('14', '21', '1', '30361', '2640', '0'), +('14', '21', '2', '10143', '7136', '0'), +('14', '21', '2', '1246', '4099', '0'), +('14', '21', '2', '1211', '3942', '0'), +('14', '21', '2', '30363', '3700', '0'), +('14', '21', '3', '1275', '4703', '0'), +('14', '21', '3', '11052', '3805', '0'), +('14', '21', '3', '1642', '2044', '0'), +('14', '21', '3', '4505', '1836', '0'), +('14', '21', '5', '14703', '8800', '0'), +('14', '21', '5', '14558', '5150', '0'), +('14', '21', '5', '14700', '4836', '0'), +('14', '21', '5', '10055', '4060', '0'), +('14', '21', '8', '11603', '10654', '0'), +('14', '21', '8', '2349', '3651', '0'), +('14', '21', '8', '11621', '3631', '0'), +('14', '21', '8', '1409', '2827', '0'), +('14', '21', '6', '1542', '7378', '0'), +('14', '21', '6', '1557', '5371', '0'), +('14', '21', '6', '1905', '5213', '0'), +('14', '21', '6', '1276', '3275', '0'), +('14', '21', '17', '11641', '11959', '0'), +('14', '21', '17', '1253', '10401', '0'), +('14', '21', '17', '1644', '9744', '0'), +('14', '21', '17', '1214', '7332', '0'), +('14', '21', '7', '1362', '3148', '0'), +('14', '21', '7', '1218', '2994', '0'), +('14', '21', '7', '1248', '2778', '0'), +('14', '21', '7', '1648', '2117', '0'), +('14', '21', '9', '12806', '3903', '0'), +('14', '21', '9', '14650', '2424', '0'), +('14', '21', '9', '1649', '2352', '0'), +('14', '21', '9', '4344', '2127', '0'), +('14', '21', '15', '10366', '4854', '0'), +('14', '21', '15', '10151', '4200', '0'), +('14', '21', '15', '10163', '3709', '0'), +('14', '21', '15', '14679', '3360', '0'), +('14', '21', '20', '11666', '12274', '0'), +('14', '21', '20', '2742', '5404', '0'), +('14', '21', '20', '1277', '2307', '0'), +('14', '21', '20', '2345', '1624', '0'), +('14', '21', '12', '2923', '4348', '0'), +('14', '21', '12', '20655', '4313', '0'), +('14', '21', '12', '1250', '2920', '0'), +('14', '21', '12', '1404', '2524', '0'), +('14', '21', '18', '1651', '2270', '0'), +('14', '21', '18', '4410', '1685', '0'), +('14', '21', '18', '1251', '1318', '0'), +('14', '21', '18', '1221', '1234', '0'), +('14', '21', '19', '68239', '3495', '0'), +('14', '21', '19', '4407', '2374', '0'), +('14', '21', '19', '1368', '2066', '0'), +('14', '21', '19', '1652', '2046', '0'), +('14', '21', '13', '14759', '8608', '0'), +('14', '21', '13', '27711', '5852', '0'), +('14', '21', '13', '13987', '4468', '0'), +('14', '21', '13', '13400', '4015', '0'), +('14', '21', '14', '14759', '8608', '0'), +('14', '21', '14', '10219', '8362', '0'), +('14', '21', '14', '13987', '4468', '0'), +('14', '21', '14', '9401', '4242', '0'), +('14', '21', '11', '9246', '3455', '0'), +('14', '21', '11', '14762', '3204', '0'), +('14', '21', '11', '13353', '1500', '0'), +('14', '21', '11', '20677', '1200', '0'), +('14', '22', '22', '10323', '0', '0'), +('14', '22', '22', '9246', '0', '0'), +('14', '22', '22', '21509', '0', '0'), +('14', '22', '22', '8007', '0', '0'), +('14', '22', '1', '14702', '5000', '0'), +('14', '22', '1', '14701', '4624', '0'), +('14', '22', '1', '14559', '3708', '0'), +('14', '22', '1', '30361', '2640', '0'), +('14', '22', '2', '10143', '7136', '0'), +('14', '22', '2', '1246', '4183', '0'), +('14', '22', '2', '1211', '4026', '0'), +('14', '22', '2', '30363', '3700', '0'), +('14', '22', '3', '1275', '4776', '0'), +('14', '22', '3', '11052', '3986', '0'), +('14', '22', '3', '1642', '2056', '0'), +('14', '22', '3', '4505', '1921', '0'), +('14', '22', '5', '14703', '8800', '0'), +('14', '22', '5', '14558', '5218', '0'), +('14', '22', '5', '14700', '4836', '0'), +('14', '22', '5', '10055', '4060', '0'), +('14', '22', '8', '11603', '10763', '0'), +('14', '22', '8', '2349', '3651', '0'), +('14', '22', '8', '11621', '3631', '0'), +('14', '22', '8', '1409', '2827', '0'), +('14', '22', '6', '1542', '7487', '0'), +('14', '22', '6', '1557', '5371', '0'), +('14', '22', '6', '1905', '5220', '0'), +('14', '22', '6', '1276', '3275', '0'), +('14', '22', '17', '11641', '12140', '0'), +('14', '22', '17', '1253', '10416', '0'), +('14', '22', '17', '1644', '9804', '0'), +('14', '22', '17', '1214', '7508', '0'), +('14', '22', '7', '1362', '3148', '0'), +('14', '22', '7', '1218', '3079', '0'), +('14', '22', '7', '1248', '2863', '0'), +('14', '22', '7', '1648', '2177', '0'), +('14', '22', '9', '12806', '3987', '0'), +('14', '22', '9', '14650', '2424', '0'), +('14', '22', '9', '1649', '2388', '0'), +('14', '22', '9', '4344', '2127', '0'), +('14', '22', '15', '10366', '4854', '0'), +('14', '22', '15', '10151', '4200', '0'), +('14', '22', '15', '10163', '3709', '0'), +('14', '22', '15', '14679', '3360', '0'), +('14', '22', '20', '11666', '12284', '0'), +('14', '22', '20', '2742', '5419', '0'), +('14', '22', '20', '1277', '2368', '0'), +('14', '22', '20', '2345', '1624', '0'), +('14', '22', '12', '2923', '4348', '0'), +('14', '22', '12', '20655', '4341', '0'), +('14', '22', '12', '1250', '3017', '0'), +('14', '22', '12', '1404', '2524', '0'), +('14', '22', '18', '1651', '2306', '0'), +('14', '22', '18', '4410', '1685', '0'), +('14', '22', '18', '1251', '1318', '0'), +('14', '22', '18', '1221', '1234', '0'), +('14', '22', '19', '68239', '3531', '0'), +('14', '22', '19', '4407', '2482', '0'), +('14', '22', '19', '1368', '2066', '0'), +('14', '22', '19', '1652', '2046', '0'), +('14', '22', '13', '14759', '8673', '0'), +('14', '22', '13', '27711', '5943', '0'), +('14', '22', '13', '13987', '4529', '0'), +('14', '22', '13', '13400', '4063', '0'), +('14', '22', '14', '14759', '8673', '0'), +('14', '22', '14', '10219', '8362', '0'), +('14', '22', '14', '13987', '4529', '0'), +('14', '22', '14', '9401', '4327', '0'), +('14', '22', '11', '9246', '3576', '0'), +('14', '22', '11', '14762', '3204', '0'), +('14', '22', '11', '13353', '1500', '0'), +('14', '22', '11', '20677', '1200', '0'), +('14', '23', '22', '10323', '0', '0'), +('14', '23', '22', '9246', '0', '0'), +('14', '23', '22', '21509', '0', '0'), +('14', '23', '22', '8007', '0', '0'), +('14', '23', '1', '14702', '5000', '0'), +('14', '23', '1', '14701', '4624', '0'), +('14', '23', '1', '14559', '3756', '0'), +('14', '23', '1', '30361', '2640', '0'), +('14', '23', '2', '10143', '7136', '0'), +('14', '23', '2', '1246', '4268', '0'), +('14', '23', '2', '1211', '4111', '0'), +('14', '23', '2', '30363', '3700', '0'), +('14', '23', '3', '1275', '4848', '0'), +('14', '23', '3', '11052', '4168', '0'), +('14', '23', '3', '1642', '2068', '0'), +('14', '23', '3', '4505', '2005', '0'), +('14', '23', '5', '14703', '8800', '0'), +('14', '23', '5', '14558', '5285', '0'), +('14', '23', '5', '14700', '4836', '0'), +('14', '23', '5', '10055', '4060', '0'), +('14', '23', '8', '11603', '10871', '0'), +('14', '23', '8', '2349', '3651', '0'), +('14', '23', '8', '11621', '3631', '0'), +('14', '23', '8', '1409', '2827', '0'), +('14', '23', '6', '1542', '7595', '0'), +('14', '23', '6', '1557', '5371', '0'), +('14', '23', '6', '1905', '5227', '0'), +('14', '23', '6', '1276', '3275', '0'), +('14', '23', '17', '11641', '12322', '0'), +('14', '23', '17', '1253', '10430', '0'), +('14', '23', '17', '1644', '9864', '0'), +('14', '23', '17', '1214', '7684', '0'), +('14', '23', '7', '1218', '3163', '0'), +('14', '23', '7', '1362', '3148', '0'), +('14', '23', '7', '1248', '2948', '0'), +('14', '23', '7', '1648', '2238', '0'), +('14', '23', '9', '12806', '4072', '0'), +('14', '23', '9', '1649', '2424', '0'), +('14', '23', '9', '14650', '2424', '0'), +('14', '23', '9', '4344', '2127', '0'), +('14', '23', '15', '10366', '4854', '0'), +('14', '23', '15', '10151', '4200', '0'), +('14', '23', '15', '10163', '3709', '0'), +('14', '23', '15', '14679', '3360', '0'), +('14', '23', '20', '11666', '12294', '0'), +('14', '23', '20', '2742', '5433', '0'), +('14', '23', '20', '1277', '2428', '0'), +('14', '23', '20', '1217', '1629', '0'), +('14', '23', '12', '20655', '4368', '0'), +('14', '23', '12', '2923', '4348', '0'), +('14', '23', '12', '1250', '3113', '0'), +('14', '23', '12', '1650', '2565', '0'), +('14', '23', '18', '1651', '2342', '0'), +('14', '23', '18', '4410', '1685', '0'), +('14', '23', '18', '1251', '1318', '0'), +('14', '23', '18', '1221', '1234', '0'), +('14', '23', '19', '68239', '3567', '0'), +('14', '23', '19', '4407', '2591', '0'), +('14', '23', '19', '1368', '2066', '0'), +('14', '23', '19', '1652', '2046', '0'), +('14', '23', '13', '14759', '8738', '0'), +('14', '23', '13', '27711', '6033', '0'), +('14', '23', '13', '13987', '4589', '0'), +('14', '23', '13', '6359', '4131', '0'), +('14', '23', '14', '14759', '8738', '0'), +('14', '23', '14', '10219', '8362', '0'), +('14', '23', '14', '13987', '4589', '0'), +('14', '23', '14', '9401', '4412', '0'), +('14', '23', '11', '9246', '3696', '0'), +('14', '23', '11', '14762', '3204', '0'), +('14', '23', '11', '13353', '1500', '0'), +('14', '23', '11', '20677', '1200', '0'), +('14', '24', '22', '10323', '0', '0'), +('14', '24', '22', '9246', '0', '0'), +('14', '24', '22', '21509', '0', '0'), +('14', '24', '22', '8007', '0', '0'), +('14', '24', '1', '14702', '5000', '0'), +('14', '24', '1', '14701', '4624', '0'), +('14', '24', '1', '14559', '3805', '0'), +('14', '24', '1', '30361', '2640', '0'), +('14', '24', '2', '10143', '7136', '0'), +('14', '24', '2', '1246', '4352', '0'), +('14', '24', '2', '1211', '4195', '0'), +('14', '24', '2', '30363', '3700', '0'), +('14', '24', '3', '1275', '4921', '0'), +('14', '24', '3', '11052', '4349', '0'), +('14', '24', '3', '4505', '2090', '0'), +('14', '24', '3', '1642', '2081', '0'), +('14', '24', '5', '14703', '8800', '0'), +('14', '24', '5', '14558', '5353', '0'), +('14', '24', '5', '14700', '4836', '0'), +('14', '24', '5', '10055', '4060', '0'), +('14', '24', '8', '11603', '10980', '0'), +('14', '24', '8', '2349', '3651', '0'), +('14', '24', '8', '11621', '3631', '0'), +('14', '24', '8', '1409', '2827', '0'), +('14', '24', '6', '1542', '7704', '0'), +('14', '24', '6', '1557', '5371', '0'), +('14', '24', '6', '1905', '5234', '0'), +('14', '24', '6', '1276', '3275', '0'), +('14', '24', '17', '11641', '12503', '0'), +('14', '24', '17', '1253', '10445', '0'), +('14', '24', '17', '1644', '9925', '0'), +('14', '24', '17', '1214', '7860', '0'), +('14', '24', '7', '1218', '3248', '0'), +('14', '24', '7', '1362', '3148', '0'), +('14', '24', '7', '1248', '3032', '0'), +('14', '24', '7', '1648', '2298', '0'), +('14', '24', '9', '12806', '4156', '0'), +('14', '24', '9', '1649', '2460', '0'), +('14', '24', '9', '14650', '2424', '0'), +('14', '24', '9', '4344', '2127', '0'), +('14', '24', '15', '10366', '4854', '0'), +('14', '24', '15', '10151', '4200', '0'), +('14', '24', '15', '10163', '3709', '0'), +('14', '24', '15', '14679', '3360', '0'), +('14', '24', '20', '11666', '12305', '0'), +('14', '24', '20', '2742', '5448', '0'), +('14', '24', '20', '1277', '2489', '0'), +('14', '24', '20', '1364', '1664', '0'), +('14', '24', '12', '20655', '4395', '0'), +('14', '24', '12', '2923', '4348', '0'), +('14', '24', '12', '1250', '3210', '0'), +('14', '24', '12', '1650', '2613', '0'), +('14', '24', '18', '1651', '2378', '0'), +('14', '24', '18', '4410', '1685', '0'), +('14', '24', '18', '1251', '1318', '0'), +('14', '24', '18', '1221', '1234', '0'), +('14', '24', '19', '68239', '3604', '0'), +('14', '24', '19', '4407', '2700', '0'), +('14', '24', '19', '1368', '2066', '0'), +('14', '24', '19', '1652', '2046', '0'), +('14', '24', '13', '14759', '8804', '0'), +('14', '24', '13', '27711', '6124', '0'), +('14', '24', '13', '13987', '4650', '0'), +('14', '24', '13', '6359', '4252', '0'), +('14', '24', '14', '14759', '8804', '0'), +('14', '24', '14', '10219', '8362', '0'), +('14', '24', '14', '13987', '4650', '0'), +('14', '24', '14', '9401', '4496', '0'), +('14', '24', '11', '9246', '3817', '0'), +('14', '24', '11', '14762', '3204', '0'), +('14', '24', '11', '13353', '1500', '0'), +('14', '24', '11', '20677', '1200', '0'), +('14', '25', '22', '10323', '0', '0'), +('14', '25', '22', '9246', '0', '0'), +('14', '25', '22', '21509', '0', '0'), +('14', '25', '22', '8007', '0', '0'), +('14', '25', '1', '14702', '5000', '0'), +('14', '25', '1', '14701', '4624', '0'), +('14', '25', '1', '14559', '3853', '0'), +('14', '25', '1', '30361', '2640', '0'), +('14', '25', '2', '10143', '7136', '0'), +('14', '25', '2', '1246', '4437', '0'), +('14', '25', '2', '1211', '4280', '0'), +('14', '25', '2', '30363', '3700', '0'), +('14', '25', '3', '1275', '4993', '0'), +('14', '25', '3', '11052', '4530', '0'), +('14', '25', '3', '4505', '2174', '0'), +('14', '25', '3', '1642', '2093', '0'), +('14', '25', '5', '14703', '8800', '0'), +('14', '25', '5', '14558', '5421', '0'), +('14', '25', '5', '14700', '4836', '0'), +('14', '25', '5', '10055', '4060', '0'), +('14', '25', '8', '11603', '11089', '0'), +('14', '25', '8', '2349', '3651', '0'), +('14', '25', '8', '11621', '3631', '0'), +('14', '25', '8', '1409', '2827', '0'), +('14', '25', '6', '1542', '7813', '0'), +('14', '25', '6', '1557', '5371', '0'), +('14', '25', '6', '1905', '5242', '0'), +('14', '25', '6', '1276', '3275', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '25', '17', '11641', '12684', '0'), +('14', '25', '17', '1253', '10459', '0'), +('14', '25', '17', '1644', '9985', '0'), +('14', '25', '17', '1214', '8035', '0'), +('14', '25', '7', '1218', '3332', '0'), +('14', '25', '7', '1362', '3148', '0'), +('14', '25', '7', '1248', '3117', '0'), +('14', '25', '7', '1648', '2358', '0'), +('14', '25', '9', '12806', '4241', '0'), +('14', '25', '9', '1649', '2497', '0'), +('14', '25', '9', '14650', '2424', '0'), +('14', '25', '9', '4344', '2127', '0'), +('14', '25', '15', '10366', '4854', '0'), +('14', '25', '15', '10151', '4200', '0'), +('14', '25', '15', '10163', '3709', '0'), +('14', '25', '15', '14679', '3360', '0'), +('14', '25', '20', '11666', '12315', '0'), +('14', '25', '20', '2742', '5462', '0'), +('14', '25', '20', '1277', '2549', '0'), +('14', '25', '20', '1364', '1712', '0'), +('14', '25', '12', '20655', '4422', '0'), +('14', '25', '12', '2923', '4348', '0'), +('14', '25', '12', '1250', '3307', '0'), +('14', '25', '12', '1650', '2661', '0'), +('14', '25', '18', '1651', '2415', '0'), +('14', '25', '18', '4410', '1685', '0'), +('14', '25', '18', '1251', '1318', '0'), +('14', '25', '18', '1221', '1234', '0'), +('14', '25', '19', '68239', '3640', '0'), +('14', '25', '19', '4407', '2808', '0'), +('14', '25', '19', '1368', '2066', '0'), +('14', '25', '19', '1652', '2046', '0'), +('14', '25', '13', '14759', '8869', '0'), +('14', '25', '13', '27711', '6215', '0'), +('14', '25', '13', '13987', '4710', '0'), +('14', '25', '13', '6359', '4373', '0'), +('14', '25', '14', '14759', '8869', '0'), +('14', '25', '14', '10219', '8362', '0'), +('14', '25', '14', '13987', '4710', '0'), +('14', '25', '14', '9401', '4581', '0'), +('14', '25', '11', '9246', '3938', '0'), +('14', '25', '11', '14762', '3204', '0'), +('14', '25', '11', '13353', '1500', '0'), +('14', '25', '11', '20677', '1200', '0'), +('14', '26', '22', '10323', '0', '0'), +('14', '26', '22', '9246', '0', '0'), +('14', '26', '22', '21509', '0', '0'), +('14', '26', '22', '8007', '0', '0'), +('14', '26', '1', '14702', '5000', '0'), +('14', '26', '1', '14701', '4624', '0'), +('14', '26', '1', '14559', '3901', '0'), +('14', '26', '1', '30361', '2640', '0'), +('14', '26', '2', '10143', '7136', '0'), +('14', '26', '2', '1246', '4521', '0'), +('14', '26', '2', '1211', '4365', '0'), +('14', '26', '2', '30363', '3700', '0'), +('14', '26', '3', '1275', '5066', '0'), +('14', '26', '3', '11052', '4711', '0'), +('14', '26', '3', '4505', '2259', '0'), +('14', '26', '3', '1642', '2105', '0'), +('14', '26', '5', '14703', '8800', '0'), +('14', '26', '5', '14558', '5488', '0'), +('14', '26', '5', '14700', '4836', '0'), +('14', '26', '5', '10055', '4060', '0'), +('14', '26', '8', '11603', '11198', '0'), +('14', '26', '8', '2349', '3651', '0'), +('14', '26', '8', '11621', '3631', '0'), +('14', '26', '8', '1409', '2827', '0'), +('14', '26', '6', '1542', '7921', '0'), +('14', '26', '6', '1557', '5371', '0'), +('14', '26', '6', '1905', '5249', '0'), +('14', '26', '6', '1276', '3275', '0'), +('14', '26', '17', '11641', '12865', '0'), +('14', '26', '17', '1253', '10474', '0'), +('14', '26', '17', '1644', '10046', '0'), +('14', '26', '17', '1214', '8211', '0'), +('14', '26', '7', '1218', '3417', '0'), +('14', '26', '7', '1248', '3201', '0'), +('14', '26', '7', '1362', '3148', '0'), +('14', '26', '7', '1648', '2419', '0'), +('14', '26', '9', '12806', '4325', '0'), +('14', '26', '9', '1649', '2533', '0'), +('14', '26', '9', '14650', '2424', '0'), +('14', '26', '9', '4344', '2127', '0'), +('14', '26', '15', '10366', '4854', '0'), +('14', '26', '15', '10151', '4200', '0'), +('14', '26', '15', '10163', '3709', '0'), +('14', '26', '15', '14679', '3360', '0'), +('14', '26', '20', '11666', '12325', '0'), +('14', '26', '20', '2742', '5477', '0'), +('14', '26', '20', '1277', '2609', '0'), +('14', '26', '20', '1364', '1760', '0'), +('14', '26', '12', '20655', '4449', '0'), +('14', '26', '12', '2923', '4348', '0'), +('14', '26', '12', '1250', '3403', '0'), +('14', '26', '12', '1650', '2709', '0'), +('14', '26', '18', '1651', '2451', '0'), +('14', '26', '18', '4410', '1685', '0'), +('14', '26', '18', '1251', '1318', '0'), +('14', '26', '18', '1221', '1234', '0'), +('14', '26', '19', '68239', '3676', '0'), +('14', '26', '19', '4407', '2917', '0'), +('14', '26', '19', '1368', '2066', '0'), +('14', '26', '19', '1652', '2046', '0'), +('14', '26', '13', '14759', '8934', '0'), +('14', '26', '13', '27711', '6305', '0'), +('14', '26', '13', '13987', '4770', '0'), +('14', '26', '13', '6359', '4494', '0'), +('14', '26', '14', '14759', '8934', '0'), +('14', '26', '14', '10219', '8362', '0'), +('14', '26', '14', '13987', '4770', '0'), +('14', '26', '14', '9401', '4665', '0'), +('14', '26', '11', '9246', '4059', '0'), +('14', '26', '11', '14762', '3204', '0'), +('14', '26', '11', '13353', '1500', '0'), +('14', '26', '11', '20677', '1200', '0'), +('14', '27', '22', '10323', '0', '0'), +('14', '27', '22', '9246', '0', '0'), +('14', '27', '22', '21509', '0', '0'), +('14', '27', '22', '8007', '0', '0'), +('14', '27', '1', '14702', '5000', '0'), +('14', '27', '1', '14701', '4624', '0'), +('14', '27', '1', '14559', '3950', '0'), +('14', '27', '1', '30361', '2640', '0'), +('14', '27', '2', '10143', '7136', '0'), +('14', '27', '2', '1246', '4606', '0'), +('14', '27', '2', '1211', '4449', '0'), +('14', '27', '2', '30363', '3700', '0'), +('14', '27', '3', '1275', '5138', '0'), +('14', '27', '3', '11052', '4892', '0'), +('14', '27', '3', '4505', '2344', '0'), +('14', '27', '3', '1642', '2117', '0'), +('14', '27', '5', '14703', '8800', '0'), +('14', '27', '5', '14558', '5556', '0'), +('14', '27', '5', '14700', '4836', '0'), +('14', '27', '5', '10055', '4060', '0'), +('14', '27', '8', '11603', '11306', '0'), +('14', '27', '8', '2349', '3651', '0'), +('14', '27', '8', '11621', '3631', '0'), +('14', '27', '8', '1409', '2827', '0'), +('14', '27', '6', '1542', '8030', '0'), +('14', '27', '6', '1557', '5371', '0'), +('14', '27', '6', '1905', '5256', '0'), +('14', '27', '6', '1276', '3275', '0'), +('14', '27', '17', '11641', '13046', '0'), +('14', '27', '17', '1253', '10488', '0'), +('14', '27', '17', '1644', '10106', '0'), +('14', '27', '17', '1214', '8387', '0'), +('14', '27', '7', '1218', '3501', '0'), +('14', '27', '7', '1248', '3286', '0'), +('14', '27', '7', '1362', '3148', '0'), +('14', '27', '7', '1648', '2479', '0'), +('14', '27', '9', '12806', '4410', '0'), +('14', '27', '9', '1649', '2569', '0'), +('14', '27', '9', '14650', '2424', '0'), +('14', '27', '9', '4344', '2127', '0'), +('14', '27', '15', '10366', '4854', '0'), +('14', '27', '15', '10151', '4200', '0'), +('14', '27', '15', '10163', '3709', '0'), +('14', '27', '15', '14679', '3360', '0'), +('14', '27', '20', '11666', '12335', '0'), +('14', '27', '20', '2742', '5491', '0'), +('14', '27', '20', '1277', '2670', '0'), +('14', '27', '20', '1364', '1809', '0'), +('14', '27', '12', '20655', '4476', '0'), +('14', '27', '12', '2923', '4348', '0'), +('14', '27', '12', '1250', '3500', '0'), +('14', '27', '12', '1650', '2758', '0'), +('14', '27', '18', '1651', '2487', '0'), +('14', '27', '18', '4410', '1685', '0'), +('14', '27', '18', '1251', '1318', '0'), +('14', '27', '18', '1221', '1234', '0'), +('14', '27', '19', '68239', '3712', '0'), +('14', '27', '19', '4407', '3026', '0'), +('14', '27', '19', '1368', '2066', '0'), +('14', '27', '19', '1652', '2046', '0'), +('14', '27', '13', '14759', '8999', '0'), +('14', '27', '13', '27711', '6396', '0'), +('14', '27', '13', '13987', '4831', '0'), +('14', '27', '13', '6359', '4615', '0'), +('14', '27', '14', '14759', '8999', '0'), +('14', '27', '14', '10219', '8362', '0'), +('14', '27', '14', '13987', '4831', '0'), +('14', '27', '14', '9401', '4750', '0'), +('14', '27', '11', '9246', '4180', '0'), +('14', '27', '11', '14762', '3204', '0'), +('14', '27', '11', '13353', '1500', '0'), +('14', '27', '11', '20677', '1200', '0'), +('14', '28', '22', '10323', '0', '0'), +('14', '28', '22', '9246', '0', '0'), +('14', '28', '22', '21509', '0', '0'), +('14', '28', '22', '8007', '0', '0'), +('14', '28', '1', '14702', '5000', '0'), +('14', '28', '1', '14701', '4624', '0'), +('14', '28', '1', '14559', '3998', '0'), +('14', '28', '1', '30361', '2640', '0'), +('14', '28', '2', '10143', '7136', '0'), +('14', '28', '2', '1246', '4690', '0'), +('14', '28', '2', '1211', '4534', '0'), +('14', '28', '2', '30363', '3700', '0'), +('14', '28', '3', '1275', '5211', '0'), +('14', '28', '3', '11052', '5074', '0'), +('14', '28', '3', '4505', '2428', '0'), +('14', '28', '3', '1642', '2129', '0'), +('14', '28', '5', '14703', '8800', '0'), +('14', '28', '5', '14558', '5624', '0'), +('14', '28', '5', '14700', '4836', '0'), +('14', '28', '5', '10055', '4060', '0'), +('14', '28', '8', '11603', '11415', '0'), +('14', '28', '8', '2349', '3651', '0'), +('14', '28', '8', '11621', '3631', '0'), +('14', '28', '8', '1409', '2827', '0'), +('14', '28', '6', '1542', '8139', '0'), +('14', '28', '6', '1557', '5371', '0'), +('14', '28', '6', '1905', '5263', '0'), +('14', '28', '6', '1276', '3275', '0'), +('14', '28', '17', '11641', '13228', '0'), +('14', '28', '17', '1253', '10503', '0'), +('14', '28', '17', '1644', '10166', '0'), +('14', '28', '17', '1214', '8563', '0'), +('14', '28', '7', '1218', '3586', '0'), +('14', '28', '7', '1248', '3370', '0'), +('14', '28', '7', '1362', '3148', '0'), +('14', '28', '7', '1648', '2540', '0'), +('14', '28', '9', '12806', '4495', '0'), +('14', '28', '9', '1649', '2605', '0'), +('14', '28', '9', '14650', '2424', '0'), +('14', '28', '9', '4344', '2127', '0'), +('14', '28', '15', '10366', '4854', '0'), +('14', '28', '15', '10151', '4200', '0'), +('14', '28', '15', '10163', '3709', '0'), +('14', '28', '15', '14679', '3360', '0'), +('14', '28', '20', '11666', '12345', '0'), +('14', '28', '20', '2742', '5506', '0'), +('14', '28', '20', '1277', '2730', '0'), +('14', '28', '20', '1364', '1857', '0'), +('14', '28', '12', '20655', '4503', '0'), +('14', '28', '12', '2923', '4348', '0'), +('14', '28', '12', '1250', '3597', '0'), +('14', '28', '12', '1650', '2806', '0'), +('14', '28', '18', '1651', '2523', '0'), +('14', '28', '18', '4410', '1685', '0'), +('14', '28', '18', '1251', '1318', '0'), +('14', '28', '18', '1221', '1234', '0'), +('14', '28', '19', '68239', '3749', '0'), +('14', '28', '19', '4407', '3135', '0'), +('14', '28', '19', '1368', '2066', '0'), +('14', '28', '19', '1652', '2046', '0'), +('14', '28', '13', '14759', '9064', '0'), +('14', '28', '13', '27711', '6486', '0'), +('14', '28', '13', '13987', '4891', '0'), +('14', '28', '13', '6359', '4735', '0'), +('14', '28', '14', '14759', '9064', '0'), +('14', '28', '14', '10219', '8362', '0'), +('14', '28', '14', '13987', '4891', '0'), +('14', '28', '14', '9401', '4834', '0'), +('14', '28', '11', '9246', '4300', '0'), +('14', '28', '11', '14762', '3204', '0'), +('14', '28', '11', '13353', '1500', '0'), +('14', '28', '11', '20677', '1200', '0'), +('14', '29', '22', '10323', '0', '0'), +('14', '29', '22', '9246', '0', '0'), +('14', '29', '22', '21509', '0', '0'), +('14', '29', '22', '8007', '0', '0'), +('14', '29', '1', '14702', '5000', '0'), +('14', '29', '1', '14701', '4624', '0'), +('14', '29', '1', '14559', '4046', '0'), +('14', '29', '1', '30361', '2640', '0'), +('14', '29', '2', '10143', '7136', '0'), +('14', '29', '2', '1246', '4775', '0'), +('14', '29', '2', '1211', '4618', '0'), +('14', '29', '2', '30363', '3700', '0'), +('14', '29', '3', '1275', '5283', '0'), +('14', '29', '3', '11052', '5255', '0'), +('14', '29', '3', '4505', '2513', '0'), +('14', '29', '3', '1642', '2141', '0'), +('14', '29', '5', '14703', '8800', '0'), +('14', '29', '5', '14558', '5691', '0'), +('14', '29', '5', '14700', '4836', '0'), +('14', '29', '5', '10055', '4060', '0'), +('14', '29', '8', '11603', '11524', '0'), +('14', '29', '8', '2349', '3651', '0'), +('14', '29', '8', '11621', '3631', '0'), +('14', '29', '8', '1409', '2827', '0'), +('14', '29', '6', '1542', '8248', '0'), +('14', '29', '6', '1557', '5371', '0'), +('14', '29', '6', '1905', '5271', '0'), +('14', '29', '6', '1276', '3275', '0'), +('14', '29', '17', '11641', '13409', '0'), +('14', '29', '17', '1253', '10517', '0'), +('14', '29', '17', '1644', '10227', '0'), +('14', '29', '17', '1214', '8739', '0'), +('14', '29', '7', '1218', '3671', '0'), +('14', '29', '7', '1248', '3455', '0'), +('14', '29', '7', '1362', '3148', '0'), +('14', '29', '7', '1648', '2600', '0'), +('14', '29', '9', '12806', '4579', '0'), +('14', '29', '9', '1649', '2642', '0'), +('14', '29', '9', '14650', '2424', '0'), +('14', '29', '9', '4344', '2127', '0'), +('14', '29', '15', '10366', '4854', '0'), +('14', '29', '15', '10151', '4200', '0'), +('14', '29', '15', '10163', '3709', '0'), +('14', '29', '15', '14679', '3360', '0'), +('14', '29', '20', '11666', '12355', '0'), +('14', '29', '20', '2742', '5520', '0'), +('14', '29', '20', '1277', '2791', '0'), +('14', '29', '20', '1364', '1905', '0'), +('14', '29', '12', '20655', '4530', '0'), +('14', '29', '12', '2923', '4348', '0'), +('14', '29', '12', '1250', '3693', '0'), +('14', '29', '12', '1650', '2854', '0'), +('14', '29', '18', '1651', '2560', '0'), +('14', '29', '18', '4410', '1685', '0'), +('14', '29', '18', '1251', '1318', '0'), +('14', '29', '18', '1221', '1234', '0'), +('14', '29', '19', '68239', '3785', '0'), +('14', '29', '19', '4407', '3243', '0'), +('14', '29', '19', '1368', '2066', '0'), +('14', '29', '19', '1652', '2046', '0'), +('14', '29', '13', '14759', '9130', '0'), +('14', '29', '13', '27711', '6577', '0'), +('14', '29', '13', '13987', '4952', '0'), +('14', '29', '13', '6359', '4856', '0'), +('14', '29', '14', '14759', '9130', '0'), +('14', '29', '14', '10219', '8362', '0'), +('14', '29', '14', '13987', '4952', '0'), +('14', '29', '14', '9401', '4919', '0'), +('14', '29', '11', '9246', '4421', '0'), +('14', '29', '11', '14762', '3204', '0'), +('14', '29', '11', '13353', '1500', '0'), +('14', '29', '11', '20677', '1200', '0'), +('14', '30', '22', '10323', '0', '0'), +('14', '30', '22', '9246', '0', '0'), +('14', '30', '22', '21509', '0', '0'), +('14', '30', '22', '8007', '0', '0'), +('14', '30', '1', '14702', '5000', '0'), +('14', '30', '1', '14701', '4624', '0'), +('14', '30', '1', '14559', '4095', '0'), +('14', '30', '1', '30361', '2640', '0'), +('14', '30', '2', '10143', '7136', '0'), +('14', '30', '2', '1246', '4860', '0'), +('14', '30', '2', '1211', '4703', '0'), +('14', '30', '2', '30363', '3700', '0'), +('14', '30', '3', '11052', '5436', '0'), +('14', '30', '3', '1275', '5356', '0'), +('14', '30', '3', '4505', '2597', '0'), +('14', '30', '3', '1642', '2153', '0'), +('14', '30', '5', '14703', '8800', '0'), +('14', '30', '5', '14558', '5759', '0'), +('14', '30', '5', '14700', '4836', '0'), +('14', '30', '5', '68291', '4093', '0'), +('14', '30', '8', '11603', '11632', '0'), +('14', '30', '8', '2349', '3651', '0'), +('14', '30', '8', '11621', '3631', '0'), +('14', '30', '8', '1409', '2827', '0'), +('14', '30', '6', '1542', '8356', '0'), +('14', '30', '6', '1557', '5371', '0'), +('14', '30', '6', '1905', '5278', '0'), +('14', '30', '6', '1276', '3275', '0'), +('14', '30', '17', '11641', '13590', '0'), +('14', '30', '17', '1253', '10532', '0'), +('14', '30', '17', '1644', '10287', '0'), +('14', '30', '17', '1214', '8915', '0'), +('14', '30', '7', '1218', '3755', '0'), +('14', '30', '7', '1248', '3539', '0'), +('14', '30', '7', '1362', '3148', '0'), +('14', '30', '7', '1648', '2660', '0'), +('14', '30', '9', '12806', '4664', '0'), +('14', '30', '9', '1649', '2678', '0'), +('14', '30', '9', '14650', '2424', '0'), +('14', '30', '9', '4344', '2127', '0'), +('14', '30', '15', '10366', '4854', '0'), +('14', '30', '15', '10151', '4200', '0'), +('14', '30', '15', '10163', '3709', '0'), +('14', '30', '15', '14679', '3360', '0'), +('14', '30', '20', '11666', '12365', '0'), +('14', '30', '20', '2742', '5535', '0'), +('14', '30', '20', '1277', '2851', '0'), +('14', '30', '20', '1364', '1954', '0'), +('14', '30', '12', '20655', '4557', '0'), +('14', '30', '12', '2923', '4348', '0'), +('14', '30', '12', '1250', '3790', '0'), +('14', '30', '12', '1650', '2903', '0'), +('14', '30', '18', '1651', '2596', '0'), +('14', '30', '18', '4410', '1685', '0'), +('14', '30', '18', '1251', '1318', '0'), +('14', '30', '18', '1221', '1234', '0'), +('14', '30', '19', '68239', '3821', '0'), +('14', '30', '19', '4407', '3352', '0'), +('14', '30', '19', '1368', '2066', '0'), +('14', '30', '19', '1652', '2046', '0'), +('14', '30', '13', '14759', '9195', '0'), +('14', '30', '13', '27711', '6668', '0'), +('14', '30', '13', '13987', '5012', '0'), +('14', '30', '13', '6359', '4977', '0'), +('14', '30', '14', '14759', '9195', '0'), +('14', '30', '14', '10219', '8362', '0'), +('14', '30', '14', '13987', '5012', '0'), +('14', '30', '14', '9401', '5003', '0'), +('14', '30', '11', '9246', '4542', '0'), +('14', '30', '11', '14762', '3204', '0'), +('14', '30', '11', '13353', '1500', '0'), +('14', '30', '11', '20677', '1200', '0'), +('14', '31', '22', '10323', '0', '0'), +('14', '31', '22', '9246', '0', '0'), +('14', '31', '22', '21509', '0', '0'), +('14', '31', '22', '8007', '0', '0'), +('14', '31', '1', '14702', '5000', '0'), +('14', '31', '1', '14701', '4624', '0'), +('14', '31', '1', '14559', '4143', '0'), +('14', '31', '1', '10082', '2679', '0'), +('14', '31', '2', '10143', '7136', '0'), +('14', '31', '2', '1246', '4944', '0'), +('14', '31', '2', '1211', '4787', '0'), +('14', '31', '2', '30363', '3700', '0'), +('14', '31', '3', '11052', '5617', '0'), +('14', '31', '3', '1275', '5428', '0'), +('14', '31', '3', '4505', '2682', '0'), +('14', '31', '3', '1642', '2165', '0'), +('14', '31', '5', '14703', '8800', '0'), +('14', '31', '5', '14558', '5827', '0'), +('14', '31', '5', '14700', '4836', '0'), +('14', '31', '5', '68291', '4142', '0'), +('14', '31', '8', '11603', '11741', '0'), +('14', '31', '8', '2349', '3651', '0'), +('14', '31', '8', '11621', '3631', '0'), +('14', '31', '8', '1409', '2827', '0'), +('14', '31', '6', '1542', '8465', '0'), +('14', '31', '6', '1557', '5371', '0'), +('14', '31', '6', '1905', '5285', '0'), +('14', '31', '6', '1276', '3275', '0'), +('14', '31', '17', '11641', '13771', '0'), +('14', '31', '17', '1253', '10546', '0'), +('14', '31', '17', '1644', '10348', '0'), +('14', '31', '17', '1214', '9091', '0'), +('14', '31', '7', '1218', '3840', '0'), +('14', '31', '7', '1248', '3624', '0'), +('14', '31', '7', '1362', '3148', '0'), +('14', '31', '7', '1648', '2721', '0'), +('14', '31', '9', '12806', '4748', '0'), +('14', '31', '9', '1649', '2714', '0'), +('14', '31', '9', '14650', '2424', '0'), +('14', '31', '9', '4344', '2127', '0'), +('14', '31', '15', '10366', '4854', '0'), +('14', '31', '15', '10151', '4200', '0'), +('14', '31', '15', '10163', '3709', '0'), +('14', '31', '15', '14679', '3360', '0'), +('14', '31', '20', '11666', '12376', '0'), +('14', '31', '20', '2742', '5549', '0'), +('14', '31', '20', '1277', '2911', '0'), +('14', '31', '20', '1364', '2002', '0'), +('14', '31', '12', '20655', '4584', '0'), +('14', '31', '12', '2923', '4348', '0'), +('14', '31', '12', '1250', '3886', '0'), +('14', '31', '12', '1650', '2951', '0'), +('14', '31', '18', '1651', '2632', '0'), +('14', '31', '18', '4410', '1685', '0'), +('14', '31', '18', '1251', '1318', '0'), +('14', '31', '18', '1221', '1234', '0'), +('14', '31', '19', '68239', '3857', '0'), +('14', '31', '19', '4407', '3461', '0'), +('14', '31', '19', '1368', '2066', '0'), +('14', '31', '19', '1652', '2046', '0'), +('14', '31', '13', '14759', '9260', '0'), +('14', '31', '13', '27711', '6758', '0'), +('14', '31', '13', '6359', '5098', '0'), +('14', '31', '13', '13987', '5072', '0'), +('14', '31', '14', '14759', '9260', '0'), +('14', '31', '14', '10219', '8362', '0'), +('14', '31', '14', '6359', '5098', '0'), +('14', '31', '14', '9401', '5088', '0'), +('14', '31', '11', '9246', '4663', '0'), +('14', '31', '11', '14762', '3204', '0'), +('14', '31', '11', '13353', '1500', '0'), +('14', '31', '11', '20677', '1200', '0'), +('14', '32', '22', '10323', '0', '0'), +('14', '32', '22', '9246', '0', '0'), +('14', '32', '22', '21509', '0', '0'), +('14', '32', '22', '8007', '0', '0'), +('14', '32', '1', '14702', '5000', '0'), +('14', '32', '1', '14701', '4624', '0'), +('14', '32', '1', '14559', '4191', '0'), +('14', '32', '1', '10082', '2752', '0'), +('14', '32', '2', '10143', '7136', '0'), +('14', '32', '2', '1246', '5029', '0'), +('14', '32', '2', '1211', '4872', '0'), +('14', '32', '2', '30363', '3700', '0'), +('14', '32', '3', '11052', '5798', '0'), +('14', '32', '3', '1275', '5501', '0'), +('14', '32', '3', '4505', '2766', '0'), +('14', '32', '3', '1642', '2177', '0'), +('14', '32', '5', '14703', '8800', '0'), +('14', '32', '5', '14558', '5894', '0'), +('14', '32', '5', '14700', '4836', '0'), +('14', '32', '5', '68291', '4190', '0'), +('14', '32', '8', '11603', '11850', '0'), +('14', '32', '8', '2349', '3651', '0'), +('14', '32', '8', '11621', '3631', '0'), +('14', '32', '8', '1409', '2827', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '32', '6', '1542', '8574', '0'), +('14', '32', '6', '1557', '5371', '0'), +('14', '32', '6', '1905', '5292', '0'), +('14', '32', '6', '1276', '3275', '0'), +('14', '32', '17', '11641', '13952', '0'), +('14', '32', '17', '1253', '10561', '0'), +('14', '32', '17', '1644', '10408', '0'), +('14', '32', '17', '1214', '9267', '0'), +('14', '32', '7', '1218', '3924', '0'), +('14', '32', '7', '1248', '3709', '0'), +('14', '32', '7', '1362', '3148', '0'), +('14', '32', '7', '1648', '2781', '0'), +('14', '32', '9', '12806', '4833', '0'), +('14', '32', '9', '1649', '2750', '0'), +('14', '32', '9', '14650', '2424', '0'), +('14', '32', '9', '4344', '2127', '0'), +('14', '32', '15', '10366', '4854', '0'), +('14', '32', '15', '10151', '4200', '0'), +('14', '32', '15', '10163', '3709', '0'), +('14', '32', '15', '14679', '3360', '0'), +('14', '32', '20', '11666', '12386', '0'), +('14', '32', '20', '2742', '5564', '0'), +('14', '32', '20', '1277', '2972', '0'), +('14', '32', '20', '1364', '2050', '0'), +('14', '32', '12', '20655', '4611', '0'), +('14', '32', '12', '2923', '4348', '0'), +('14', '32', '12', '1250', '3983', '0'), +('14', '32', '12', '1650', '2999', '0'), +('14', '32', '18', '1651', '2668', '0'), +('14', '32', '18', '4410', '1685', '0'), +('14', '32', '18', '1251', '1318', '0'), +('14', '32', '18', '1221', '1234', '0'), +('14', '32', '19', '68239', '3894', '0'), +('14', '32', '19', '4407', '3569', '0'), +('14', '32', '19', '1368', '2066', '0'), +('14', '32', '19', '1652', '2046', '0'), +('14', '32', '13', '14759', '9325', '0'), +('14', '32', '13', '27711', '6849', '0'), +('14', '32', '13', '6359', '5219', '0'), +('14', '32', '13', '13987', '5133', '0'), +('14', '32', '14', '14759', '9325', '0'), +('14', '32', '14', '10219', '8362', '0'), +('14', '32', '14', '6359', '5219', '0'), +('14', '32', '14', '9401', '5173', '0'), +('14', '32', '11', '9246', '4784', '0'), +('14', '32', '11', '14762', '3204', '0'), +('14', '32', '11', '13353', '1500', '0'), +('14', '32', '11', '20677', '1200', '0'), +('14', '33', '22', '10323', '0', '0'), +('14', '33', '22', '9246', '0', '0'), +('14', '33', '22', '21509', '0', '0'), +('14', '33', '22', '8007', '0', '0'), +('14', '33', '1', '14702', '5000', '0'), +('14', '33', '1', '14701', '4624', '0'), +('14', '33', '1', '14559', '4240', '0'), +('14', '33', '1', '10082', '2824', '0'), +('14', '33', '2', '10143', '7136', '0'), +('14', '33', '2', '1246', '5113', '0'), +('14', '33', '2', '1211', '4956', '0'), +('14', '33', '2', '30363', '3700', '0'), +('14', '33', '3', '11052', '5980', '0'), +('14', '33', '3', '1275', '5573', '0'), +('14', '33', '3', '4505', '2851', '0'), +('14', '33', '3', '1642', '2189', '0'), +('14', '33', '5', '14703', '8800', '0'), +('14', '33', '5', '14558', '5962', '0'), +('14', '33', '5', '14700', '4836', '0'), +('14', '33', '5', '68291', '4238', '0'), +('14', '33', '8', '11603', '11959', '0'), +('14', '33', '8', '2349', '3651', '0'), +('14', '33', '8', '11621', '3631', '0'), +('14', '33', '8', '1409', '2827', '0'), +('14', '33', '6', '1542', '8683', '0'), +('14', '33', '6', '1557', '5371', '0'), +('14', '33', '6', '1905', '5300', '0'), +('14', '33', '6', '1276', '3275', '0'), +('14', '33', '17', '11641', '14134', '0'), +('14', '33', '17', '1253', '10575', '0'), +('14', '33', '17', '1644', '10468', '0'), +('14', '33', '17', '1214', '9443', '0'), +('14', '33', '7', '1218', '4009', '0'), +('14', '33', '7', '1248', '3793', '0'), +('14', '33', '7', '1362', '3148', '0'), +('14', '33', '7', '1648', '2842', '0'), +('14', '33', '9', '12806', '4917', '0'), +('14', '33', '9', '1649', '2787', '0'), +('14', '33', '9', '14650', '2424', '0'), +('14', '33', '9', '4344', '2127', '0'), +('14', '33', '15', '10366', '4854', '0'), +('14', '33', '15', '10151', '4200', '0'), +('14', '33', '15', '10163', '3709', '0'), +('14', '33', '15', '14679', '3360', '0'), +('14', '33', '20', '11666', '12396', '0'), +('14', '33', '20', '2742', '5578', '0'), +('14', '33', '20', '1277', '3032', '0'), +('14', '33', '20', '1364', '2099', '0'), +('14', '33', '12', '20655', '4638', '0'), +('14', '33', '12', '2923', '4348', '0'), +('14', '33', '12', '1250', '4080', '0'), +('14', '33', '12', '1650', '3048', '0'), +('14', '33', '18', '1651', '2705', '0'), +('14', '33', '18', '4410', '1685', '0'), +('14', '33', '18', '1251', '1318', '0'), +('14', '33', '18', '1221', '1234', '0'), +('14', '33', '19', '68239', '3930', '0'), +('14', '33', '19', '4407', '3678', '0'), +('14', '33', '19', '1368', '2066', '0'), +('14', '33', '19', '1652', '2046', '0'), +('14', '33', '13', '14759', '9391', '0'), +('14', '33', '13', '27711', '6939', '0'), +('14', '33', '13', '6359', '5339', '0'), +('14', '33', '13', '13987', '5193', '0'), +('14', '33', '14', '14759', '9391', '0'), +('14', '33', '14', '10219', '8362', '0'), +('14', '33', '14', '6359', '5339', '0'), +('14', '33', '14', '9401', '5257', '0'), +('14', '33', '11', '9246', '4904', '0'), +('14', '33', '11', '14762', '3204', '0'), +('14', '33', '11', '13353', '1500', '0'), +('14', '33', '11', '20677', '1200', '0'), +('14', '34', '22', '10323', '0', '0'), +('14', '34', '22', '9246', '0', '0'), +('14', '34', '22', '21509', '0', '0'), +('14', '34', '22', '8007', '0', '0'), +('14', '34', '1', '14702', '5000', '0'), +('14', '34', '1', '14701', '4624', '0'), +('14', '34', '1', '14559', '4288', '0'), +('14', '34', '1', '10082', '2897', '0'), +('14', '34', '2', '10143', '7136', '0'), +('14', '34', '2', '1246', '5198', '0'), +('14', '34', '2', '1211', '5041', '0'), +('14', '34', '2', '10141', '3721', '0'), +('14', '34', '3', '11052', '6161', '0'), +('14', '34', '3', '1275', '5646', '0'), +('14', '34', '3', '4505', '2935', '0'), +('14', '34', '3', '2350', '2217', '0'), +('14', '34', '5', '14703', '8800', '0'), +('14', '34', '5', '14558', '6030', '0'), +('14', '34', '5', '14700', '4836', '0'), +('14', '34', '5', '68291', '4287', '0'), +('14', '34', '8', '11603', '12067', '0'), +('14', '34', '8', '2349', '3651', '0'), +('14', '34', '8', '11621', '3631', '0'), +('14', '34', '8', '1409', '2827', '0'), +('14', '34', '6', '1542', '8791', '0'), +('14', '34', '6', '1557', '5371', '0'), +('14', '34', '6', '1905', '5307', '0'), +('14', '34', '6', '1276', '3275', '0'), +('14', '34', '17', '11641', '14315', '0'), +('14', '34', '17', '1253', '10590', '0'), +('14', '34', '17', '1644', '10529', '0'), +('14', '34', '17', '1214', '9618', '0'), +('14', '34', '7', '1218', '4093', '0'), +('14', '34', '7', '1248', '3878', '0'), +('14', '34', '7', '1362', '3148', '0'), +('14', '34', '7', '1648', '2902', '0'), +('14', '34', '9', '12806', '5002', '0'), +('14', '34', '9', '1649', '2823', '0'), +('14', '34', '9', '14650', '2424', '0'), +('14', '34', '9', '4408', '2144', '0'), +('14', '34', '15', '10366', '4854', '0'), +('14', '34', '15', '10151', '4200', '0'), +('14', '34', '15', '10163', '3709', '0'), +('14', '34', '15', '14679', '3360', '0'), +('14', '34', '20', '11666', '12406', '0'), +('14', '34', '20', '2742', '5593', '0'), +('14', '34', '20', '1277', '3093', '0'), +('14', '34', '20', '1364', '2147', '0'), +('14', '34', '12', '20655', '4665', '0'), +('14', '34', '12', '2923', '4348', '0'), +('14', '34', '12', '1250', '4176', '0'), +('14', '34', '12', '1650', '3096', '0'), +('14', '34', '18', '1651', '2741', '0'), +('14', '34', '18', '4410', '1685', '0'), +('14', '34', '18', '1251', '1318', '0'), +('14', '34', '18', '1221', '1234', '0'), +('14', '34', '19', '68239', '3966', '0'), +('14', '34', '19', '4407', '3787', '0'), +('14', '34', '19', '1368', '2066', '0'), +('14', '34', '19', '1652', '2046', '0'), +('14', '34', '13', '14759', '9456', '0'), +('14', '34', '13', '27711', '7030', '0'), +('14', '34', '13', '6359', '5460', '0'), +('14', '34', '13', '13500', '5295', '0'), +('14', '34', '14', '14759', '9456', '0'), +('14', '34', '14', '10219', '8362', '0'), +('14', '34', '14', '6359', '5460', '0'), +('14', '34', '14', '9401', '5342', '0'), +('14', '34', '11', '9246', '5025', '0'), +('14', '34', '11', '14762', '3204', '0'), +('14', '34', '11', '13353', '1500', '0'), +('14', '34', '11', '20677', '1200', '0'), +('14', '35', '22', '10323', '0', '0'), +('14', '35', '22', '9246', '0', '0'), +('14', '35', '22', '21509', '0', '0'), +('14', '35', '22', '8007', '0', '0'), +('14', '35', '1', '14702', '5000', '0'), +('14', '35', '1', '14701', '4624', '0'), +('14', '35', '1', '14559', '4336', '0'), +('14', '35', '1', '10082', '2969', '0'), +('14', '35', '2', '10143', '7136', '0'), +('14', '35', '2', '1246', '5282', '0'), +('14', '35', '2', '1211', '5126', '0'), +('14', '35', '2', '10141', '3829', '0'), +('14', '35', '3', '11052', '6342', '0'), +('14', '35', '3', '1275', '5718', '0'), +('14', '35', '3', '4505', '3020', '0'), +('14', '35', '3', '2350', '2277', '0'), +('14', '35', '5', '14703', '8800', '0'), +('14', '35', '5', '14558', '6097', '0'), +('14', '35', '5', '14700', '4836', '0'), +('14', '35', '5', '68291', '4335', '0'), +('14', '35', '8', '11603', '12176', '0'), +('14', '35', '8', '2349', '3651', '0'), +('14', '35', '8', '11621', '3631', '0'), +('14', '35', '8', '1409', '2827', '0'), +('14', '35', '6', '1542', '8900', '0'), +('14', '35', '6', '1557', '5371', '0'), +('14', '35', '6', '1905', '5314', '0'), +('14', '35', '6', '1276', '3275', '0'), +('14', '35', '17', '11641', '14496', '0'), +('14', '35', '17', '1253', '10604', '0'), +('14', '35', '17', '1644', '10589', '0'), +('14', '35', '17', '1214', '9794', '0'), +('14', '35', '7', '1218', '4178', '0'), +('14', '35', '7', '1248', '3962', '0'), +('14', '35', '7', '1362', '3148', '0'), +('14', '35', '7', '1648', '2962', '0'), +('14', '35', '9', '12806', '5086', '0'), +('14', '35', '9', '1649', '2859', '0'), +('14', '35', '9', '14650', '2424', '0'), +('14', '35', '9', '4408', '2205', '0'), +('14', '35', '15', '10366', '4854', '0'), +('14', '35', '15', '10151', '4200', '0'), +('14', '35', '15', '10163', '3709', '0'), +('14', '35', '15', '14679', '3360', '0'), +('14', '35', '20', '11666', '12416', '0'), +('14', '35', '20', '2742', '5607', '0'), +('14', '35', '20', '1277', '3153', '0'), +('14', '35', '20', '1364', '2195', '0'), +('14', '35', '12', '20655', '4692', '0'), +('14', '35', '12', '2923', '4348', '0'), +('14', '35', '12', '1250', '4273', '0'), +('14', '35', '12', '1650', '3144', '0'), +('14', '35', '18', '1651', '2777', '0'), +('14', '35', '18', '4410', '1685', '0'), +('14', '35', '18', '1251', '1318', '0'), +('14', '35', '18', '1221', '1234', '0'), +('14', '35', '19', '68239', '4002', '0'), +('14', '35', '19', '4407', '3896', '0'), +('14', '35', '19', '1368', '2066', '0'), +('14', '35', '19', '1652', '2046', '0'), +('14', '35', '13', '14759', '9521', '0'), +('14', '35', '13', '27711', '7121', '0'), +('14', '35', '13', '6359', '5581', '0'), +('14', '35', '13', '13500', '5416', '0'), +('14', '35', '14', '14759', '9521', '0'), +('14', '35', '14', '10219', '8362', '0'), +('14', '35', '14', '6359', '5581', '0'), +('14', '35', '14', '9401', '5426', '0'), +('14', '35', '11', '9246', '5146', '0'), +('14', '35', '11', '14762', '3204', '0'), +('14', '35', '11', '13353', '1500', '0'), +('14', '35', '11', '20677', '1200', '0'), +('14', '36', '22', '10323', '0', '0'), +('14', '36', '22', '9246', '0', '0'), +('14', '36', '22', '21509', '0', '0'), +('14', '36', '22', '8007', '0', '0'), +('14', '36', '1', '14702', '5000', '0'), +('14', '36', '1', '14701', '4624', '0'), +('14', '36', '1', '14559', '4384', '0'), +('14', '36', '1', '10082', '3042', '0'), +('14', '36', '2', '10143', '7136', '0'), +('14', '36', '2', '1246', '5367', '0'), +('14', '36', '2', '1211', '5210', '0'), +('14', '36', '2', '10141', '3938', '0'), +('14', '36', '3', '11052', '6523', '0'), +('14', '36', '3', '1275', '5790', '0'), +('14', '36', '3', '4505', '3105', '0'), +('14', '36', '3', '2350', '2337', '0'), +('14', '36', '5', '14703', '8800', '0'), +('14', '36', '5', '14558', '6165', '0'), +('14', '36', '5', '14700', '4836', '0'), +('14', '36', '5', '68291', '4383', '0'), +('14', '36', '8', '11603', '12285', '0'), +('14', '36', '8', '2349', '3651', '0'), +('14', '36', '8', '11621', '3631', '0'), +('14', '36', '8', '1409', '2827', '0'), +('14', '36', '6', '1542', '9009', '0'), +('14', '36', '6', '1557', '5371', '0'), +('14', '36', '6', '1905', '5321', '0'), +('14', '36', '6', '1276', '3275', '0'), +('14', '36', '17', '11641', '14677', '0'), +('14', '36', '17', '1644', '10650', '0'), +('14', '36', '17', '1253', '10618', '0'), +('14', '36', '17', '1214', '9970', '0'), +('14', '36', '7', '1218', '4262', '0'), +('14', '36', '7', '1248', '4047', '0'), +('14', '36', '7', '1362', '3148', '0'), +('14', '36', '7', '1648', '3023', '0'), +('14', '36', '9', '12806', '5171', '0'), +('14', '36', '9', '1649', '2895', '0'), +('14', '36', '9', '14650', '2424', '0'), +('14', '36', '9', '4408', '2265', '0'), +('14', '36', '15', '10366', '4854', '0'), +('14', '36', '15', '10151', '4200', '0'), +('14', '36', '15', '10163', '3709', '0'), +('14', '36', '15', '14679', '3360', '0'), +('14', '36', '20', '11666', '12426', '0'), +('14', '36', '20', '2742', '5622', '0'), +('14', '36', '20', '1277', '3213', '0'), +('14', '36', '20', '1364', '2244', '0'), +('14', '36', '12', '20655', '4719', '0'), +('14', '36', '12', '1250', '4370', '0'), +('14', '36', '12', '2923', '4348', '0'), +('14', '36', '12', '2336', '3199', '0'), +('14', '36', '18', '1651', '2813', '0'), +('14', '36', '18', '4410', '1685', '0'), +('14', '36', '18', '1251', '1318', '0'), +('14', '36', '18', '1221', '1234', '0'), +('14', '36', '19', '68239', '4038', '0'), +('14', '36', '19', '4407', '4004', '0'), +('14', '36', '19', '1368', '2066', '0'), +('14', '36', '19', '1652', '2046', '0'), +('14', '36', '13', '14759', '9586', '0'), +('14', '36', '13', '27711', '7211', '0'), +('14', '36', '13', '6359', '5702', '0'), +('14', '36', '13', '13500', '5537', '0'), +('14', '36', '14', '14759', '9586', '0'), +('14', '36', '14', '10219', '8362', '0'), +('14', '36', '14', '6359', '5702', '0'), +('14', '36', '14', '9401', '5511', '0'), +('14', '36', '11', '9246', '5267', '0'), +('14', '36', '11', '14762', '3204', '0'), +('14', '36', '11', '13353', '1500', '0'), +('14', '36', '11', '20677', '1200', '0'), +('14', '37', '22', '10323', '0', '0'), +('14', '37', '22', '9246', '0', '0'), +('14', '37', '22', '21509', '0', '0'), +('14', '37', '22', '8007', '0', '0'), +('14', '37', '1', '14702', '5000', '0'), +('14', '37', '1', '14701', '4624', '0'), +('14', '37', '1', '14559', '4433', '0'), +('14', '37', '1', '10082', '3114', '0'), +('14', '37', '2', '10143', '7136', '0'), +('14', '37', '2', '1246', '5452', '0'), +('14', '37', '2', '1211', '5295', '0'), +('14', '37', '2', '10141', '4047', '0'), +('14', '37', '3', '11052', '6704', '0'), +('14', '37', '3', '1275', '5863', '0'), +('14', '37', '3', '4505', '3189', '0'), +('14', '37', '3', '2350', '2398', '0'), +('14', '37', '5', '14703', '8800', '0'), +('14', '37', '5', '14558', '6232', '0'), +('14', '37', '5', '14700', '4836', '0'), +('14', '37', '5', '68291', '4431', '0'), +('14', '37', '8', '11603', '12393', '0'), +('14', '37', '8', '2349', '3651', '0'), +('14', '37', '8', '11621', '3631', '0'), +('14', '37', '8', '1409', '2827', '0'), +('14', '37', '6', '1542', '9117', '0'), +('14', '37', '6', '1557', '5371', '0'), +('14', '37', '6', '1905', '5329', '0'), +('14', '37', '6', '1276', '3275', '0'), +('14', '37', '17', '11641', '14858', '0'), +('14', '37', '17', '1644', '10710', '0'), +('14', '37', '17', '1253', '10633', '0'), +('14', '37', '17', '1214', '10146', '0'), +('14', '37', '7', '1218', '4347', '0'), +('14', '37', '7', '1248', '4131', '0'), +('14', '37', '7', '1362', '3148', '0'), +('14', '37', '7', '1648', '3083', '0'), +('14', '37', '9', '12806', '5256', '0'), +('14', '37', '9', '1649', '2931', '0'), +('14', '37', '9', '14650', '2424', '0'), +('14', '37', '9', '4408', '2325', '0'), +('14', '37', '15', '10366', '4854', '0'), +('14', '37', '15', '10151', '4200', '0'), +('14', '37', '15', '10163', '3709', '0'), +('14', '37', '15', '14679', '3360', '0'), +('14', '37', '20', '11666', '12436', '0'), +('14', '37', '20', '2742', '5636', '0'), +('14', '37', '20', '1277', '3274', '0'), +('14', '37', '20', '1364', '2292', '0'), +('14', '37', '12', '20655', '4746', '0'), +('14', '37', '12', '1250', '4466', '0'), +('14', '37', '12', '2923', '4348', '0'), +('14', '37', '12', '2336', '3259', '0'), +('14', '37', '18', '1651', '2850', '0'), +('14', '37', '18', '4410', '1685', '0'), +('14', '37', '18', '1251', '1318', '0'), +('14', '37', '18', '1221', '1234', '0'), +('14', '37', '19', '4407', '4113', '0'), +('14', '37', '19', '68239', '4075', '0'), +('14', '37', '19', '1368', '2066', '0'), +('14', '37', '19', '1652', '2046', '0'), +('14', '37', '13', '14759', '9652', '0'), +('14', '37', '13', '27711', '7302', '0'), +('14', '37', '13', '6359', '5823', '0'), +('14', '37', '13', '13500', '5658', '0'), +('14', '37', '14', '14759', '9652', '0'), +('14', '37', '14', '10219', '8362', '0'), +('14', '37', '14', '6359', '5823', '0'), +('14', '37', '14', '9401', '5595', '0'), +('14', '37', '11', '9246', '5388', '0'), +('14', '37', '11', '14762', '3204', '0'), +('14', '37', '11', '13353', '1500', '0'), +('14', '37', '11', '20677', '1200', '0'), +('14', '38', '22', '10323', '0', '0'), +('14', '38', '22', '9246', '0', '0'), +('14', '38', '22', '21509', '0', '0'), +('14', '38', '22', '8007', '0', '0'), +('14', '38', '1', '14702', '5000', '0'), +('14', '38', '1', '14701', '4624', '0'), +('14', '38', '1', '14559', '4481', '0'), +('14', '38', '1', '10082', '3187', '0'), +('14', '38', '2', '10143', '7136', '0'), +('14', '38', '2', '1246', '5536', '0'), +('14', '38', '2', '1211', '5379', '0'), +('14', '38', '2', '10141', '4156', '0'), +('14', '38', '3', '11052', '6886', '0'), +('14', '38', '3', '1275', '5935', '0'), +('14', '38', '3', '4505', '3274', '0'), +('14', '38', '3', '2350', '2458', '0'), +('14', '38', '5', '14703', '8800', '0'), +('14', '38', '5', '14558', '6300', '0'), +('14', '38', '5', '14700', '4836', '0'), +('14', '38', '5', '68291', '4480', '0'), +('14', '38', '8', '11603', '12502', '0'), +('14', '38', '8', '2349', '3651', '0'), +('14', '38', '8', '11621', '3631', '0'), +('14', '38', '8', '1409', '2827', '0'), +('14', '38', '6', '1542', '9226', '0'), +('14', '38', '6', '1557', '5371', '0'), +('14', '38', '6', '1905', '5336', '0'), +('14', '38', '6', '1276', '3275', '0'), +('14', '38', '17', '11641', '15040', '0'), +('14', '38', '17', '1644', '10770', '0'), +('14', '38', '17', '1253', '10647', '0'), +('14', '38', '17', '1214', '10322', '0'), +('14', '38', '7', '1218', '4432', '0'), +('14', '38', '7', '1248', '4216', '0'), +('14', '38', '7', '1362', '3148', '0'), +('14', '38', '7', '1648', '3144', '0'), +('14', '38', '9', '12806', '5340', '0'), +('14', '38', '9', '1649', '2968', '0'), +('14', '38', '9', '14650', '2424', '0'), +('14', '38', '9', '4408', '2386', '0'), +('14', '38', '15', '10366', '4854', '0'), +('14', '38', '15', '10151', '4200', '0'), +('14', '38', '15', '10163', '3709', '0'), +('14', '38', '15', '14679', '3360', '0'), +('14', '38', '20', '11666', '12447', '0'), +('14', '38', '20', '2742', '5651', '0'), +('14', '38', '20', '1277', '3334', '0'), +('14', '38', '20', '1364', '2340', '0'), +('14', '38', '12', '20655', '4773', '0'), +('14', '38', '12', '1250', '4563', '0'), +('14', '38', '12', '2923', '4348', '0'), +('14', '38', '12', '2336', '3319', '0'), +('14', '38', '18', '1651', '2886', '0'), +('14', '38', '18', '4410', '1685', '0'), +('14', '38', '18', '1251', '1318', '0'), +('14', '38', '18', '1221', '1234', '0'), +('14', '38', '19', '4407', '4222', '0'), +('14', '38', '19', '68239', '4111', '0'), +('14', '38', '19', '1368', '2066', '0'), +('14', '38', '19', '1652', '2046', '0'), +('14', '38', '13', '14759', '9717', '0'), +('14', '38', '13', '27711', '7392', '0'), +('14', '38', '13', '6359', '5943', '0'), +('14', '38', '13', '13500', '5778', '0'), +('14', '38', '14', '14759', '9717', '0'), +('14', '38', '14', '10219', '8362', '0'), +('14', '38', '14', '6359', '5943', '0'), +('14', '38', '14', '9401', '5680', '0'), +('14', '38', '11', '9246', '5508', '0'), +('14', '38', '11', '14762', '3204', '0'), +('14', '38', '11', '13353', '1500', '0'), +('14', '38', '11', '20677', '1200', '0'), +('14', '39', '22', '10323', '0', '0'), +('14', '39', '22', '9246', '0', '0'), +('14', '39', '22', '21509', '0', '0'), +('14', '39', '22', '8007', '0', '0'), +('14', '39', '1', '14702', '5000', '0'), +('14', '39', '1', '14701', '4624', '0'), +('14', '39', '1', '14559', '4529', '0'), +('14', '39', '1', '10082', '3259', '0'), +('14', '39', '2', '10143', '7136', '0'), +('14', '39', '2', '1246', '5621', '0'), +('14', '39', '2', '1211', '5464', '0'), +('14', '39', '2', '10141', '4264', '0'), +('14', '39', '3', '11052', '7067', '0'), +('14', '39', '3', '1275', '6008', '0'), +('14', '39', '3', '4505', '3358', '0'), +('14', '39', '3', '2350', '2519', '0'), +('14', '39', '5', '14703', '8800', '0'), +('14', '39', '5', '14558', '6368', '0'), +('14', '39', '5', '14700', '4836', '0'), +('14', '39', '5', '68291', '4528', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '39', '8', '11603', '12611', '0'), +('14', '39', '8', '2349', '3651', '0'), +('14', '39', '8', '11621', '3631', '0'), +('14', '39', '8', '1409', '2827', '0'), +('14', '39', '6', '1542', '9335', '0'), +('14', '39', '6', '1557', '5371', '0'), +('14', '39', '6', '1905', '5343', '0'), +('14', '39', '6', '1276', '3275', '0'), +('14', '39', '17', '11641', '15221', '0'), +('14', '39', '17', '1644', '10831', '0'), +('14', '39', '17', '1253', '10662', '0'), +('14', '39', '17', '1214', '10498', '0'), +('14', '39', '7', '1218', '4516', '0'), +('14', '39', '7', '1248', '4301', '0'), +('14', '39', '7', '1648', '3204', '0'), +('14', '39', '7', '1362', '3148', '0'), +('14', '39', '9', '12806', '5425', '0'), +('14', '39', '9', '1649', '3004', '0'), +('14', '39', '9', '4408', '2446', '0'), +('14', '39', '9', '14650', '2424', '0'), +('14', '39', '15', '10366', '4854', '0'), +('14', '39', '15', '10151', '4200', '0'), +('14', '39', '15', '10163', '3709', '0'), +('14', '39', '15', '14679', '3360', '0'), +('14', '39', '20', '11666', '12457', '0'), +('14', '39', '20', '2742', '5665', '0'), +('14', '39', '20', '1277', '3395', '0'), +('14', '39', '20', '1364', '2389', '0'), +('14', '39', '12', '20655', '4801', '0'), +('14', '39', '12', '1250', '4660', '0'), +('14', '39', '12', '2923', '4348', '0'), +('14', '39', '12', '2336', '3380', '0'), +('14', '39', '18', '1651', '2922', '0'), +('14', '39', '18', '4410', '1685', '0'), +('14', '39', '18', '1251', '1318', '0'), +('14', '39', '18', '1221', '1234', '0'), +('14', '39', '19', '4407', '4330', '0'), +('14', '39', '19', '68239', '4147', '0'), +('14', '39', '19', '1368', '2066', '0'), +('14', '39', '19', '1652', '2046', '0'), +('14', '39', '13', '14759', '9782', '0'), +('14', '39', '13', '27711', '7483', '0'), +('14', '39', '13', '6359', '6064', '0'), +('14', '39', '13', '13500', '5899', '0'), +('14', '39', '14', '14759', '9782', '0'), +('14', '39', '14', '10219', '8362', '0'), +('14', '39', '14', '6359', '6064', '0'), +('14', '39', '14', '9401', '5764', '0'), +('14', '39', '11', '9246', '5629', '0'), +('14', '39', '11', '14762', '3204', '0'), +('14', '39', '11', '13353', '1500', '0'), +('14', '39', '11', '20677', '1200', '0'), +('14', '40', '22', '10323', '0', '0'), +('14', '40', '22', '9246', '0', '0'), +('14', '40', '22', '21509', '0', '0'), +('14', '40', '22', '8007', '0', '0'), +('14', '40', '1', '14702', '5000', '0'), +('14', '40', '1', '14701', '4624', '0'), +('14', '40', '1', '14559', '4578', '0'), +('14', '40', '1', '10082', '3332', '0'), +('14', '40', '2', '10143', '7136', '0'), +('14', '40', '2', '1246', '5705', '0'), +('14', '40', '2', '1211', '5548', '0'), +('14', '40', '2', '10141', '4373', '0'), +('14', '40', '3', '11052', '7248', '0'), +('14', '40', '3', '1275', '6080', '0'), +('14', '40', '3', '4505', '3443', '0'), +('14', '40', '3', '2350', '2579', '0'), +('14', '40', '5', '14703', '8800', '0'), +('14', '40', '5', '14558', '6435', '0'), +('14', '40', '5', '14700', '4836', '0'), +('14', '40', '5', '68291', '4576', '0'), +('14', '40', '8', '11603', '12720', '0'), +('14', '40', '8', '2349', '3651', '0'), +('14', '40', '8', '11621', '3631', '0'), +('14', '40', '8', '1409', '2827', '0'), +('14', '40', '6', '1542', '9444', '0'), +('14', '40', '6', '1557', '5371', '0'), +('14', '40', '6', '1905', '5350', '0'), +('14', '40', '6', '1276', '3275', '0'), +('14', '40', '17', '11641', '15402', '0'), +('14', '40', '17', '1644', '10891', '0'), +('14', '40', '17', '1253', '10676', '0'), +('14', '40', '17', '1214', '10674', '0'), +('14', '40', '7', '1218', '4601', '0'), +('14', '40', '7', '1248', '4385', '0'), +('14', '40', '7', '1648', '3264', '0'), +('14', '40', '7', '1362', '3148', '0'), +('14', '40', '9', '12806', '5509', '0'), +('14', '40', '9', '1649', '3040', '0'), +('14', '40', '9', '4408', '2507', '0'), +('14', '40', '9', '14650', '2424', '0'), +('14', '40', '15', '10366', '4854', '0'), +('14', '40', '15', '10151', '4200', '0'), +('14', '40', '15', '10163', '3709', '0'), +('14', '40', '15', '14679', '3360', '0'), +('14', '40', '20', '11666', '12467', '0'), +('14', '40', '20', '2742', '5680', '0'), +('14', '40', '20', '1277', '3455', '0'), +('14', '40', '20', '1364', '2437', '0'), +('14', '40', '12', '20655', '4828', '0'), +('14', '40', '12', '1250', '4756', '0'), +('14', '40', '12', '2923', '4348', '0'), +('14', '40', '12', '2336', '3440', '0'), +('14', '40', '18', '1651', '2958', '0'), +('14', '40', '18', '4410', '1685', '0'), +('14', '40', '18', '1251', '1318', '0'), +('14', '40', '18', '1221', '1234', '0'), +('14', '40', '19', '4407', '4439', '0'), +('14', '40', '19', '68239', '4183', '0'), +('14', '40', '19', '1368', '2066', '0'), +('14', '40', '19', '1652', '2046', '0'), +('14', '40', '13', '14759', '9847', '0'), +('14', '40', '13', '27711', '7574', '0'), +('14', '40', '13', '6359', '6185', '0'), +('14', '40', '13', '13500', '6020', '0'), +('14', '40', '14', '14759', '9847', '0'), +('14', '40', '14', '10219', '8362', '0'), +('14', '40', '14', '6359', '6185', '0'), +('14', '40', '14', '9401', '5849', '0'), +('14', '40', '11', '9246', '5750', '0'), +('14', '40', '11', '14762', '3204', '0'), +('14', '40', '11', '13353', '1500', '0'), +('14', '40', '11', '20677', '1200', '0'), +('14', '41', '22', '10323', '0', '0'), +('14', '41', '22', '9246', '0', '0'), +('14', '41', '22', '21509', '0', '0'), +('14', '41', '22', '8007', '0', '0'), +('14', '41', '1', '14702', '5000', '0'), +('14', '41', '1', '14559', '4626', '0'), +('14', '41', '1', '14701', '4624', '0'), +('14', '41', '1', '10082', '3404', '0'), +('14', '41', '2', '10143', '7136', '0'), +('14', '41', '2', '1246', '5790', '0'), +('14', '41', '2', '1211', '5633', '0'), +('14', '41', '2', '10141', '4482', '0'), +('14', '41', '3', '11052', '7429', '0'), +('14', '41', '3', '1275', '6153', '0'), +('14', '41', '3', '4505', '3527', '0'), +('14', '41', '3', '2350', '2639', '0'), +('14', '41', '5', '14703', '8800', '0'), +('14', '41', '5', '14558', '6503', '0'), +('14', '41', '5', '14700', '4836', '0'), +('14', '41', '5', '68291', '4625', '0'), +('14', '41', '8', '11603', '12828', '0'), +('14', '41', '8', '2349', '3651', '0'), +('14', '41', '8', '11621', '3631', '0'), +('14', '41', '8', '1409', '2827', '0'), +('14', '41', '6', '1542', '9552', '0'), +('14', '41', '6', '1557', '5371', '0'), +('14', '41', '6', '1905', '5358', '0'), +('14', '41', '6', '1276', '3275', '0'), +('14', '41', '17', '11641', '15583', '0'), +('14', '41', '17', '1644', '10952', '0'), +('14', '41', '17', '1214', '10850', '0'), +('14', '41', '17', '1247', '10725', '0'), +('14', '41', '7', '1218', '4685', '0'), +('14', '41', '7', '1248', '4470', '0'), +('14', '41', '7', '1648', '3325', '0'), +('14', '41', '7', '1362', '3148', '0'), +('14', '41', '9', '12806', '5594', '0'), +('14', '41', '9', '1649', '3076', '0'), +('14', '41', '9', '4408', '2567', '0'), +('14', '41', '9', '14650', '2424', '0'), +('14', '41', '15', '10366', '4854', '0'), +('14', '41', '15', '10151', '4200', '0'), +('14', '41', '15', '10163', '3709', '0'), +('14', '41', '15', '14679', '3360', '0'), +('14', '41', '20', '11666', '12477', '0'), +('14', '41', '20', '2742', '5694', '0'), +('14', '41', '20', '1277', '3515', '0'), +('14', '41', '20', '1364', '2485', '0'), +('14', '41', '12', '20655', '4855', '0'), +('14', '41', '12', '1250', '4853', '0'), +('14', '41', '12', '2923', '4348', '0'), +('14', '41', '12', '2336', '3501', '0'), +('14', '41', '18', '1651', '2995', '0'), +('14', '41', '18', '4410', '1685', '0'), +('14', '41', '18', '1251', '1318', '0'), +('14', '41', '18', '1221', '1234', '0'), +('14', '41', '19', '4407', '4548', '0'), +('14', '41', '19', '68239', '4220', '0'), +('14', '41', '19', '1368', '2066', '0'), +('14', '41', '19', '1652', '2046', '0'), +('14', '41', '13', '14759', '9912', '0'), +('14', '41', '13', '27711', '7664', '0'), +('14', '41', '13', '6359', '6306', '0'), +('14', '41', '13', '13500', '6141', '0'), +('14', '41', '14', '14759', '9912', '0'), +('14', '41', '14', '10219', '8362', '0'), +('14', '41', '14', '6359', '6306', '0'), +('14', '41', '14', '9401', '5934', '0'), +('14', '41', '11', '9246', '5871', '0'), +('14', '41', '11', '14762', '3204', '0'), +('14', '41', '11', '13353', '1500', '0'), +('14', '41', '11', '20677', '1200', '0'), +('14', '42', '22', '10323', '0', '0'), +('14', '42', '22', '9246', '0', '0'), +('14', '42', '22', '21509', '0', '0'), +('14', '42', '22', '8007', '0', '0'), +('14', '42', '1', '14702', '5000', '0'), +('14', '42', '1', '14559', '4674', '0'), +('14', '42', '1', '14701', '4624', '0'), +('14', '42', '1', '10082', '3477', '0'), +('14', '42', '2', '10143', '7136', '0'), +('14', '42', '2', '1246', '5874', '0'), +('14', '42', '2', '1211', '5717', '0'), +('14', '42', '2', '10141', '4590', '0'), +('14', '42', '3', '11052', '7610', '0'), +('14', '42', '3', '1275', '6225', '0'), +('14', '42', '3', '4505', '3612', '0'), +('14', '42', '3', '2350', '2700', '0'), +('14', '42', '5', '14703', '8800', '0'), +('14', '42', '5', '14558', '6571', '0'), +('14', '42', '5', '14700', '4836', '0'), +('14', '42', '5', '68291', '4673', '0'), +('14', '42', '8', '11603', '12937', '0'), +('14', '42', '8', '2349', '3651', '0'), +('14', '42', '8', '11621', '3631', '0'), +('14', '42', '8', '1409', '2827', '0'), +('14', '42', '6', '1542', '9661', '0'), +('14', '42', '6', '1557', '5371', '0'), +('14', '42', '6', '1905', '5365', '0'), +('14', '42', '6', '1276', '3275', '0'), +('14', '42', '17', '11641', '15764', '0'), +('14', '42', '17', '1214', '11025', '0'), +('14', '42', '17', '1644', '11012', '0'), +('14', '42', '17', '1247', '10897', '0'), +('14', '42', '7', '1218', '4770', '0'), +('14', '42', '7', '1248', '4554', '0'), +('14', '42', '7', '1648', '3385', '0'), +('14', '42', '7', '1362', '3148', '0'), +('14', '42', '9', '12806', '5678', '0'), +('14', '42', '9', '1649', '3113', '0'), +('14', '42', '9', '4408', '2627', '0'), +('14', '42', '9', '14650', '2424', '0'), +('14', '42', '15', '10366', '4854', '0'), +('14', '42', '15', '10151', '4200', '0'), +('14', '42', '15', '10163', '3709', '0'), +('14', '42', '15', '14679', '3360', '0'), +('14', '42', '20', '11666', '12487', '0'), +('14', '42', '20', '2742', '5708', '0'), +('14', '42', '20', '1277', '3576', '0'), +('14', '42', '20', '1364', '2534', '0'), +('14', '42', '12', '1250', '4949', '0'), +('14', '42', '12', '20655', '4882', '0'), +('14', '42', '12', '2923', '4348', '0'), +('14', '42', '12', '2336', '3561', '0'), +('14', '42', '18', '1651', '3031', '0'), +('14', '42', '18', '4410', '1685', '0'), +('14', '42', '18', '1251', '1318', '0'), +('14', '42', '18', '1221', '1234', '0'), +('14', '42', '19', '4407', '4657', '0'), +('14', '42', '19', '68239', '4256', '0'), +('14', '42', '19', '1368', '2066', '0'), +('14', '42', '19', '1652', '2046', '0'), +('14', '42', '13', '14759', '9978', '0'), +('14', '42', '13', '27711', '7755', '0'), +('14', '42', '13', '6359', '6427', '0'), +('14', '42', '13', '13500', '6262', '0'), +('14', '42', '14', '14759', '9978', '0'), +('14', '42', '14', '10219', '8362', '0'), +('14', '42', '14', '6359', '6427', '0'), +('14', '42', '14', '9401', '6018', '0'), +('14', '42', '11', '9246', '5992', '0'), +('14', '42', '11', '14762', '3204', '0'), +('14', '42', '11', '13353', '1500', '0'), +('14', '42', '11', '20677', '1200', '0'), +('14', '43', '22', '10323', '0', '0'), +('14', '43', '22', '9246', '0', '0'), +('14', '43', '22', '21509', '0', '0'), +('14', '43', '22', '8007', '0', '0'), +('14', '43', '1', '14702', '5000', '0'), +('14', '43', '1', '14559', '4723', '0'), +('14', '43', '1', '14701', '4624', '0'), +('14', '43', '1', '10082', '3549', '0'), +('14', '43', '2', '10143', '7136', '0'), +('14', '43', '2', '1246', '5959', '0'), +('14', '43', '2', '1211', '5802', '0'), +('14', '43', '2', '10141', '4699', '0'), +('14', '43', '3', '11052', '7792', '0'), +('14', '43', '3', '1275', '6298', '0'), +('14', '43', '3', '4505', '3696', '0'), +('14', '43', '3', '2350', '2760', '0'), +('14', '43', '5', '14703', '8800', '0'), +('14', '43', '5', '14558', '6638', '0'), +('14', '43', '5', '14700', '4836', '0'), +('14', '43', '5', '68291', '4721', '0'), +('14', '43', '8', '11603', '13046', '0'), +('14', '43', '8', '2349', '3651', '0'), +('14', '43', '8', '11621', '3631', '0'), +('14', '43', '8', '1057', '2844', '0'), +('14', '43', '6', '1542', '9770', '0'), +('14', '43', '6', '1905', '5372', '0'), +('14', '43', '6', '1557', '5371', '0'), +('14', '43', '6', '1276', '3275', '0'), +('14', '43', '17', '11641', '15946', '0'), +('14', '43', '17', '1214', '11201', '0'), +('14', '43', '17', '1644', '11072', '0'), +('14', '43', '17', '1247', '11068', '0'), +('14', '43', '7', '1218', '4854', '0'), +('14', '43', '7', '1248', '4639', '0'), +('14', '43', '7', '1648', '3446', '0'), +('14', '43', '7', '1362', '3148', '0'), +('14', '43', '9', '12806', '5763', '0'), +('14', '43', '9', '1649', '3149', '0'), +('14', '43', '9', '4408', '2688', '0'), +('14', '43', '9', '14650', '2424', '0'), +('14', '43', '15', '10366', '4854', '0'), +('14', '43', '15', '10151', '4200', '0'), +('14', '43', '15', '10163', '3709', '0'), +('14', '43', '15', '14679', '3360', '0'), +('14', '43', '20', '11666', '12497', '0'), +('14', '43', '20', '2742', '5723', '0'), +('14', '43', '20', '1277', '3636', '0'), +('14', '43', '20', '1364', '2582', '0'), +('14', '43', '12', '1250', '5046', '0'), +('14', '43', '12', '20655', '4909', '0'), +('14', '43', '12', '2923', '4348', '0'), +('14', '43', '12', '2336', '3621', '0'), +('14', '43', '18', '1651', '3067', '0'), +('14', '43', '18', '4410', '1685', '0'), +('14', '43', '18', '1251', '1318', '0'), +('14', '43', '18', '1221', '1234', '0'), +('14', '43', '19', '4407', '4765', '0'), +('14', '43', '19', '68239', '4292', '0'), +('14', '43', '19', '1368', '2066', '0'), +('14', '43', '19', '1652', '2046', '0'), +('14', '43', '13', '14759', '10043', '0'), +('14', '43', '13', '27711', '7845', '0'), +('14', '43', '13', '6359', '6547', '0'), +('14', '43', '13', '13500', '6382', '0'), +('14', '43', '14', '14759', '10043', '0'), +('14', '43', '14', '10219', '8362', '0'), +('14', '43', '14', '6359', '6547', '0'), +('14', '43', '14', '9246', '6112', '0'), +('14', '43', '11', '9246', '6112', '0'), +('14', '43', '11', '14762', '3204', '0'), +('14', '43', '11', '13353', '1500', '0'), +('14', '43', '11', '20677', '1200', '0'), +('14', '44', '22', '10323', '0', '0'), +('14', '44', '22', '9246', '0', '0'), +('14', '44', '22', '21509', '0', '0'), +('14', '44', '22', '8007', '0', '0'), +('14', '44', '1', '14702', '5000', '0'), +('14', '44', '1', '14559', '4771', '0'), +('14', '44', '1', '14701', '4624', '0'), +('14', '44', '1', '10082', '3622', '0'), +('14', '44', '2', '10143', '7136', '0'), +('14', '44', '2', '1246', '6043', '0'), +('14', '44', '2', '1211', '5887', '0'), +('14', '44', '2', '10141', '4808', '0'), +('14', '44', '3', '11052', '7973', '0'), +('14', '44', '3', '1275', '6370', '0'), +('14', '44', '3', '4505', '3781', '0'), +('14', '44', '3', '2350', '2821', '0'), +('14', '44', '5', '14703', '8800', '0'), +('14', '44', '5', '14558', '6706', '0'), +('14', '44', '5', '14700', '4836', '0'), +('14', '44', '5', '68291', '4770', '0'), +('14', '44', '8', '11603', '13154', '0'), +('14', '44', '8', '2349', '3651', '0'), +('14', '44', '8', '11621', '3631', '0'), +('14', '44', '8', '1057', '2904', '0'), +('14', '44', '6', '1542', '9878', '0'), +('14', '44', '6', '1905', '5379', '0'), +('14', '44', '6', '1557', '5371', '0'), +('14', '44', '6', '1276', '3275', '0'), +('14', '44', '17', '11641', '16127', '0'), +('14', '44', '17', '1214', '11377', '0'), +('14', '44', '17', '1247', '11240', '0'), +('14', '44', '17', '1644', '11133', '0'), +('14', '44', '7', '1218', '4939', '0'), +('14', '44', '7', '1248', '4723', '0'), +('14', '44', '7', '1648', '3506', '0'), +('14', '44', '7', '1362', '3148', '0'), +('14', '44', '9', '12806', '5847', '0'), +('14', '44', '9', '1649', '3185', '0'), +('14', '44', '9', '4408', '2748', '0'), +('14', '44', '9', '14650', '2424', '0'), +('14', '44', '15', '10366', '4854', '0'), +('14', '44', '15', '10151', '4200', '0'), +('14', '44', '15', '10163', '3709', '0'), +('14', '44', '15', '14679', '3360', '0'), +('14', '44', '20', '11666', '12507', '0'), +('14', '44', '20', '2742', '5737', '0'), +('14', '44', '20', '1277', '3697', '0'), +('14', '44', '20', '1364', '2630', '0'), +('14', '44', '12', '1250', '5143', '0'), +('14', '44', '12', '20655', '4936', '0'), +('14', '44', '12', '2923', '4348', '0'), +('14', '44', '12', '2336', '3682', '0'), +('14', '44', '18', '1651', '3103', '0'), +('14', '44', '18', '4410', '1685', '0'), +('14', '44', '18', '1251', '1318', '0'), +('14', '44', '18', '1221', '1234', '0'), +('14', '44', '19', '4407', '4874', '0'), +('14', '44', '19', '68239', '4328', '0'), +('14', '44', '19', '1368', '2066', '0'), +('14', '44', '19', '1652', '2046', '0'), +('14', '44', '13', '14759', '10108', '0'), +('14', '44', '13', '27711', '7936', '0'), +('14', '44', '13', '6359', '6668', '0'), +('14', '44', '13', '13500', '6503', '0'), +('14', '44', '14', '14759', '10108', '0'), +('14', '44', '14', '10219', '8362', '0'), +('14', '44', '14', '6359', '6668', '0'), +('14', '44', '14', '9246', '6233', '0'), +('14', '44', '11', '9246', '6233', '0'), +('14', '44', '11', '14762', '3204', '0'), +('14', '44', '11', '13353', '1500', '0'), +('14', '44', '11', '20677', '1200', '0'), +('14', '45', '22', '10323', '0', '0'), +('14', '45', '22', '9246', '0', '0'), +('14', '45', '22', '21509', '0', '0'), +('14', '45', '22', '8007', '0', '0'), +('14', '45', '1', '14702', '5000', '0'), +('14', '45', '1', '14559', '4819', '0'), +('14', '45', '1', '14701', '4624', '0'), +('14', '45', '1', '10082', '3694', '0'), +('14', '45', '2', '10143', '7136', '0'), +('14', '45', '2', '1246', '6128', '0'), +('14', '45', '2', '1211', '5971', '0'), +('14', '45', '2', '10141', '4917', '0'), +('14', '45', '3', '11052', '8154', '0'), +('14', '45', '3', '1275', '6443', '0'), +('14', '45', '3', '4505', '3866', '0'), +('14', '45', '3', '2350', '2881', '0'), +('14', '45', '5', '14703', '8800', '0'), +('14', '45', '5', '14558', '6774', '0'), +('14', '45', '5', '14700', '4836', '0'), +('14', '45', '5', '68291', '4818', '0'), +('14', '45', '8', '11603', '13263', '0'), +('14', '45', '8', '2349', '3651', '0'), +('14', '45', '8', '11621', '3631', '0'), +('14', '45', '8', '1057', '2965', '0'), +('14', '45', '6', '1542', '9987', '0'), +('14', '45', '6', '1905', '5387', '0'), +('14', '45', '6', '1557', '5371', '0'), +('14', '45', '6', '1276', '3275', '0'), +('14', '45', '17', '11641', '16308', '0'), +('14', '45', '17', '1214', '11553', '0'), +('14', '45', '17', '1247', '11411', '0'), +('14', '45', '17', '1644', '11193', '0'), +('14', '45', '7', '1218', '5024', '0'), +('14', '45', '7', '1248', '4808', '0'), +('14', '45', '7', '1648', '3566', '0'), +('14', '45', '7', '1362', '3148', '0'), +('14', '45', '9', '12806', '5932', '0'), +('14', '45', '9', '1649', '3221', '0'), +('14', '45', '9', '4408', '2809', '0'), +('14', '45', '9', '14650', '2424', '0'), +('14', '45', '15', '10366', '4854', '0'), +('14', '45', '15', '10151', '4200', '0'), +('14', '45', '15', '10163', '3709', '0'), +('14', '45', '15', '14679', '3360', '0'), +('14', '45', '20', '11666', '12518', '0'), +('14', '45', '20', '2742', '5752', '0'), +('14', '45', '20', '1277', '3757', '0'), +('14', '45', '20', '1364', '2679', '0'), +('14', '45', '12', '1250', '5239', '0'), +('14', '45', '12', '20655', '4963', '0'), +('14', '45', '12', '2923', '4348', '0'), +('14', '45', '12', '2336', '3742', '0'), +('14', '45', '18', '1651', '3140', '0'), +('14', '45', '18', '4410', '1685', '0'), +('14', '45', '18', '1251', '1318', '0'), +('14', '45', '18', '1221', '1234', '0'), +('14', '45', '19', '4407', '4983', '0'), +('14', '45', '19', '68239', '4365', '0'), +('14', '45', '19', '1368', '2066', '0'), +('14', '45', '19', '1652', '2046', '0'), +('14', '45', '13', '14759', '10173', '0'), +('14', '45', '13', '27711', '8027', '0'), +('14', '45', '13', '6359', '6789', '0'), +('14', '45', '13', '13500', '6624', '0'), +('14', '45', '14', '14759', '10173', '0'), +('14', '45', '14', '10219', '8362', '0'), +('14', '45', '14', '6359', '6789', '0'), +('14', '45', '14', '9246', '6354', '0'), +('14', '45', '11', '9246', '6354', '0'), +('14', '45', '11', '14762', '3204', '0'), +('14', '45', '11', '13353', '1500', '0'), +('14', '45', '11', '20677', '1200', '0'), +('14', '46', '22', '10323', '0', '0'), +('14', '46', '22', '9246', '0', '0'), +('14', '46', '22', '21509', '0', '0'), +('14', '46', '22', '8007', '0', '0'), +('14', '46', '1', '14702', '5000', '0'), +('14', '46', '1', '14559', '4868', '0'), +('14', '46', '1', '14701', '4624', '0'), +('14', '46', '1', '10082', '3767', '0'), +('14', '46', '2', '10143', '7136', '0'), +('14', '46', '2', '1246', '6213', '0'), +('14', '46', '2', '1211', '6056', '0'), +('14', '46', '2', '10141', '5025', '0'), +('14', '46', '3', '11052', '8335', '0'), +('14', '46', '3', '1275', '6515', '0'), +('14', '46', '3', '4505', '3950', '0'), +('14', '46', '3', '2350', '2941', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '46', '5', '14703', '8800', '0'), +('14', '46', '5', '14558', '6841', '0'), +('14', '46', '5', '68291', '4866', '0'), +('14', '46', '5', '14700', '4836', '0'), +('14', '46', '8', '11603', '13372', '0'), +('14', '46', '8', '2349', '3651', '0'), +('14', '46', '8', '11621', '3631', '0'), +('14', '46', '8', '1057', '3025', '0'), +('14', '46', '6', '1542', '10096', '0'), +('14', '46', '6', '1905', '5394', '0'), +('14', '46', '6', '1557', '5371', '0'), +('14', '46', '6', '1276', '3275', '0'), +('14', '46', '17', '11641', '16489', '0'), +('14', '46', '17', '1214', '11729', '0'), +('14', '46', '17', '1247', '11583', '0'), +('14', '46', '17', '1644', '11254', '0'), +('14', '46', '7', '1218', '5108', '0'), +('14', '46', '7', '1248', '4892', '0'), +('14', '46', '7', '1648', '3627', '0'), +('14', '46', '7', '2458', '3195', '0'), +('14', '46', '9', '12806', '6017', '0'), +('14', '46', '9', '1649', '3258', '0'), +('14', '46', '9', '4408', '2869', '0'), +('14', '46', '9', '14650', '2424', '0'), +('14', '46', '15', '10366', '4854', '0'), +('14', '46', '15', '10151', '4200', '0'), +('14', '46', '15', '10163', '3709', '0'), +('14', '46', '15', '14679', '3360', '0'), +('14', '46', '20', '11666', '12528', '0'), +('14', '46', '20', '2742', '5766', '0'), +('14', '46', '20', '1277', '3817', '0'), +('14', '46', '20', '1364', '2727', '0'), +('14', '46', '12', '1250', '5336', '0'), +('14', '46', '12', '20655', '4990', '0'), +('14', '46', '12', '2923', '4348', '0'), +('14', '46', '12', '2336', '3803', '0'), +('14', '46', '18', '1651', '3176', '0'), +('14', '46', '18', '4410', '1685', '0'), +('14', '46', '18', '1251', '1318', '0'), +('14', '46', '18', '1221', '1234', '0'), +('14', '46', '19', '4407', '5092', '0'), +('14', '46', '19', '68239', '4401', '0'), +('14', '46', '19', '1368', '2066', '0'), +('14', '46', '19', '1652', '2046', '0'), +('14', '46', '13', '14759', '10239', '0'), +('14', '46', '13', '27711', '8117', '0'), +('14', '46', '13', '6359', '6910', '0'), +('14', '46', '13', '13500', '6745', '0'), +('14', '46', '14', '14759', '10239', '0'), +('14', '46', '14', '10219', '8362', '0'), +('14', '46', '14', '6359', '6910', '0'), +('14', '46', '14', '9246', '6475', '0'), +('14', '46', '11', '9246', '6475', '0'), +('14', '46', '11', '14762', '3204', '0'), +('14', '46', '11', '13353', '1500', '0'), +('14', '46', '11', '20677', '1200', '0'), +('14', '47', '22', '10323', '0', '0'), +('14', '47', '22', '9246', '0', '0'), +('14', '47', '22', '21509', '0', '0'), +('14', '47', '22', '8007', '0', '0'), +('14', '47', '1', '14702', '5000', '0'), +('14', '47', '1', '14559', '4916', '0'), +('14', '47', '1', '14701', '4624', '0'), +('14', '47', '1', '10082', '3839', '0'), +('14', '47', '2', '10143', '7136', '0'), +('14', '47', '2', '1246', '6297', '0'), +('14', '47', '2', '1211', '6140', '0'), +('14', '47', '2', '10141', '5134', '0'), +('14', '47', '3', '11052', '8516', '0'), +('14', '47', '3', '1275', '6588', '0'), +('14', '47', '3', '4505', '4035', '0'), +('14', '47', '3', '2350', '3002', '0'), +('14', '47', '5', '14703', '8800', '0'), +('14', '47', '5', '14558', '6909', '0'), +('14', '47', '5', '68291', '4915', '0'), +('14', '47', '5', '14700', '4836', '0'), +('14', '47', '8', '11603', '13481', '0'), +('14', '47', '8', '2349', '3651', '0'), +('14', '47', '8', '11621', '3631', '0'), +('14', '47', '8', '1057', '3085', '0'), +('14', '47', '6', '1542', '10205', '0'), +('14', '47', '6', '1905', '5401', '0'), +('14', '47', '6', '1557', '5371', '0'), +('14', '47', '6', '1276', '3275', '0'), +('14', '47', '17', '11641', '16670', '0'), +('14', '47', '17', '1214', '11905', '0'), +('14', '47', '17', '1247', '11754', '0'), +('14', '47', '17', '1644', '11314', '0'), +('14', '47', '7', '1218', '5193', '0'), +('14', '47', '7', '1248', '4977', '0'), +('14', '47', '7', '1648', '3687', '0'), +('14', '47', '7', '2458', '3244', '0'), +('14', '47', '9', '12806', '6101', '0'), +('14', '47', '9', '1649', '3294', '0'), +('14', '47', '9', '4408', '2929', '0'), +('14', '47', '9', '10360', '2435', '0'), +('14', '47', '15', '10366', '4854', '0'), +('14', '47', '15', '10151', '4200', '0'), +('14', '47', '15', '10163', '3709', '0'), +('14', '47', '15', '14679', '3360', '0'), +('14', '47', '20', '11666', '12538', '0'), +('14', '47', '20', '2742', '5781', '0'), +('14', '47', '20', '1277', '3878', '0'), +('14', '47', '20', '1364', '2775', '0'), +('14', '47', '12', '1250', '5433', '0'), +('14', '47', '12', '20655', '5017', '0'), +('14', '47', '12', '2923', '4348', '0'), +('14', '47', '12', '2336', '3863', '0'), +('14', '47', '18', '1651', '3212', '0'), +('14', '47', '18', '4410', '1685', '0'), +('14', '47', '18', '1251', '1318', '0'), +('14', '47', '18', '1221', '1234', '0'), +('14', '47', '19', '4407', '5200', '0'), +('14', '47', '19', '68239', '4437', '0'), +('14', '47', '19', '1368', '2066', '0'), +('14', '47', '19', '1652', '2046', '0'), +('14', '47', '13', '14759', '10304', '0'), +('14', '47', '13', '27711', '8208', '0'), +('14', '47', '13', '6359', '7031', '0'), +('14', '47', '13', '13500', '6866', '0'), +('14', '47', '14', '14759', '10304', '0'), +('14', '47', '14', '10219', '8362', '0'), +('14', '47', '14', '6359', '7031', '0'), +('14', '47', '14', '9246', '6596', '0'), +('14', '47', '11', '9246', '6596', '0'), +('14', '47', '11', '14762', '3204', '0'), +('14', '47', '11', '13353', '1500', '0'), +('14', '47', '11', '20677', '1200', '0'), +('14', '48', '22', '10323', '0', '0'), +('14', '48', '22', '9246', '0', '0'), +('14', '48', '22', '21509', '0', '0'), +('14', '48', '22', '8007', '0', '0'), +('14', '48', '1', '14702', '5000', '0'), +('14', '48', '1', '14559', '4964', '0'), +('14', '48', '1', '14701', '4624', '0'), +('14', '48', '1', '10082', '3912', '0'), +('14', '48', '2', '10143', '7136', '0'), +('14', '48', '2', '1246', '6382', '0'), +('14', '48', '2', '1211', '6225', '0'), +('14', '48', '2', '10141', '5243', '0'), +('14', '48', '3', '11052', '8698', '0'), +('14', '48', '3', '1275', '6660', '0'), +('14', '48', '3', '4505', '4119', '0'), +('14', '48', '3', '2350', '3062', '0'), +('14', '48', '5', '14703', '8800', '0'), +('14', '48', '5', '14558', '6977', '0'), +('14', '48', '5', '68291', '4963', '0'), +('14', '48', '5', '14700', '4836', '0'), +('14', '48', '8', '11603', '13589', '0'), +('14', '48', '8', '2349', '3651', '0'), +('14', '48', '8', '11621', '3631', '0'), +('14', '48', '8', '1057', '3146', '0'), +('14', '48', '6', '1542', '10313', '0'), +('14', '48', '6', '1905', '5408', '0'), +('14', '48', '6', '1557', '5371', '0'), +('14', '48', '6', '1276', '3275', '0'), +('14', '48', '17', '11641', '16852', '0'), +('14', '48', '17', '1214', '12081', '0'), +('14', '48', '17', '1247', '11926', '0'), +('14', '48', '17', '1644', '11374', '0'), +('14', '48', '7', '1218', '5277', '0'), +('14', '48', '7', '1248', '5062', '0'), +('14', '48', '7', '1648', '3748', '0'), +('14', '48', '7', '2458', '3292', '0'), +('14', '48', '9', '12806', '6186', '0'), +('14', '48', '9', '1649', '3330', '0'), +('14', '48', '9', '4408', '2990', '0'), +('14', '48', '9', '10360', '2472', '0'), +('14', '48', '15', '10366', '4854', '0'), +('14', '48', '15', '10151', '4200', '0'), +('14', '48', '15', '10163', '3709', '0'), +('14', '48', '15', '14679', '3360', '0'), +('14', '48', '20', '11666', '12548', '0'), +('14', '48', '20', '2742', '5795', '0'), +('14', '48', '20', '1277', '3938', '0'), +('14', '48', '20', '1364', '2824', '0'), +('14', '48', '12', '1250', '5529', '0'), +('14', '48', '12', '20655', '5044', '0'), +('14', '48', '12', '2923', '4348', '0'), +('14', '48', '12', '2336', '3923', '0'), +('14', '48', '18', '1651', '3248', '0'), +('14', '48', '18', '4410', '1685', '0'), +('14', '48', '18', '1251', '1318', '0'), +('14', '48', '18', '1221', '1234', '0'), +('14', '48', '19', '4407', '5309', '0'), +('14', '48', '19', '68239', '4473', '0'), +('14', '48', '19', '1368', '2066', '0'), +('14', '48', '19', '1652', '2046', '0'), +('14', '48', '13', '14759', '10369', '0'), +('14', '48', '13', '27711', '8298', '0'), +('14', '48', '13', '6359', '7151', '0'), +('14', '48', '13', '13500', '6986', '0'), +('14', '48', '14', '14759', '10369', '0'), +('14', '48', '14', '10219', '8362', '0'), +('14', '48', '14', '6359', '7151', '0'), +('14', '48', '14', '9246', '6716', '0'), +('14', '48', '11', '9246', '6716', '0'), +('14', '48', '11', '14762', '3204', '0'), +('14', '48', '11', '13353', '1500', '0'), +('14', '48', '11', '20677', '1200', '0'), +('14', '49', '22', '10323', '0', '0'), +('14', '49', '22', '9246', '0', '0'), +('14', '49', '22', '21509', '0', '0'), +('14', '49', '22', '8007', '0', '0'), +('14', '49', '1', '14559', '5013', '0'), +('14', '49', '1', '14702', '5000', '0'), +('14', '49', '1', '14701', '4624', '0'), +('14', '49', '1', '10082', '3984', '0'), +('14', '49', '2', '10143', '7136', '0'), +('14', '49', '2', '1246', '6466', '0'), +('14', '49', '2', '1211', '6309', '0'), +('14', '49', '2', '10141', '5351', '0'), +('14', '49', '3', '11052', '8879', '0'), +('14', '49', '3', '1275', '6733', '0'), +('14', '49', '3', '4505', '4204', '0'), +('14', '49', '3', '2350', '3123', '0'), +('14', '49', '5', '14703', '8800', '0'), +('14', '49', '5', '14558', '7044', '0'), +('14', '49', '5', '68291', '5011', '0'), +('14', '49', '5', '14700', '4836', '0'), +('14', '49', '8', '11603', '13698', '0'), +('14', '49', '8', '2349', '3651', '0'), +('14', '49', '8', '11621', '3631', '0'), +('14', '49', '8', '1057', '3206', '0'), +('14', '49', '6', '1542', '10422', '0'), +('14', '49', '6', '1905', '5416', '0'), +('14', '49', '6', '1557', '5371', '0'), +('14', '49', '6', '1276', '3275', '0'), +('14', '49', '17', '11641', '17033', '0'), +('14', '49', '17', '1214', '12257', '0'), +('14', '49', '17', '1247', '12097', '0'), +('14', '49', '17', '1644', '11435', '0'), +('14', '49', '7', '1218', '5362', '0'), +('14', '49', '7', '1248', '5146', '0'), +('14', '49', '7', '1648', '3808', '0'), +('14', '49', '7', '2458', '3340', '0'), +('14', '49', '9', '12806', '6270', '0'), +('14', '49', '9', '1649', '3366', '0'), +('14', '49', '9', '4408', '3050', '0'), +('14', '49', '9', '10360', '2508', '0'), +('14', '49', '15', '10366', '4854', '0'), +('14', '49', '15', '10151', '4200', '0'), +('14', '49', '15', '10163', '3709', '0'), +('14', '49', '15', '14679', '3360', '0'), +('14', '49', '20', '11666', '12558', '0'), +('14', '49', '20', '2742', '5810', '0'), +('14', '49', '20', '1277', '3999', '0'), +('14', '49', '20', '1364', '2872', '0'), +('14', '49', '12', '1250', '5626', '0'), +('14', '49', '12', '20655', '5071', '0'), +('14', '49', '12', '2923', '4348', '0'), +('14', '49', '12', '2336', '3984', '0'), +('14', '49', '18', '1651', '3284', '0'), +('14', '49', '18', '4410', '1685', '0'), +('14', '49', '18', '1251', '1318', '0'), +('14', '49', '18', '1221', '1234', '0'), +('14', '49', '19', '4407', '5418', '0'), +('14', '49', '19', '68239', '4510', '0'), +('14', '49', '19', '1368', '2066', '0'), +('14', '49', '19', '1652', '2046', '0'), +('14', '49', '13', '14759', '10434', '0'), +('14', '49', '13', '27711', '8389', '0'), +('14', '49', '13', '6359', '7272', '0'), +('14', '49', '13', '13500', '7107', '0'), +('14', '49', '14', '14759', '10434', '0'), +('14', '49', '14', '10219', '8362', '0'), +('14', '49', '14', '6359', '7272', '0'), +('14', '49', '14', '9246', '6837', '0'), +('14', '49', '11', '9246', '6837', '0'), +('14', '49', '11', '14762', '3204', '0'), +('14', '49', '11', '13353', '1500', '0'), +('14', '49', '11', '20677', '1200', '0'), +('14', '50', '22', '10323', '0', '0'), +('14', '50', '22', '9246', '0', '0'), +('14', '50', '22', '21509', '0', '0'), +('14', '50', '22', '8007', '0', '0'), +('14', '50', '1', '14559', '5061', '0'), +('14', '50', '1', '14702', '5000', '0'), +('14', '50', '1', '14701', '4624', '0'), +('14', '50', '1', '10082', '4056', '0'), +('14', '50', '2', '10143', '7136', '0'), +('14', '50', '2', '1246', '6551', '0'), +('14', '50', '2', '1211', '6394', '0'), +('14', '50', '2', '10141', '5460', '0'), +('14', '50', '3', '11052', '9060', '0'), +('14', '50', '3', '1275', '6805', '0'), +('14', '50', '3', '4505', '4288', '0'), +('14', '50', '3', '2350', '3183', '0'), +('14', '50', '5', '14703', '8800', '0'), +('14', '50', '5', '14558', '7112', '0'), +('14', '50', '5', '68291', '5060', '0'), +('14', '50', '5', '14700', '4836', '0'), +('14', '50', '8', '11603', '13807', '0'), +('14', '50', '8', '2349', '3651', '0'), +('14', '50', '8', '11621', '3631', '0'), +('14', '50', '8', '1057', '3267', '0'), +('14', '50', '6', '1542', '10531', '0'), +('14', '50', '6', '1905', '5423', '0'), +('14', '50', '6', '1557', '5371', '0'), +('14', '50', '6', '1276', '3275', '0'), +('14', '50', '17', '11641', '17214', '0'), +('14', '50', '17', '1214', '12433', '0'), +('14', '50', '17', '1247', '12269', '0'), +('14', '50', '17', '1644', '11495', '0'), +('14', '50', '7', '1218', '5446', '0'), +('14', '50', '7', '1248', '5231', '0'), +('14', '50', '7', '1648', '3868', '0'), +('14', '50', '7', '2458', '3388', '0'), +('14', '50', '9', '12806', '6355', '0'), +('14', '50', '9', '1649', '3403', '0'), +('14', '50', '9', '4408', '3111', '0'), +('14', '50', '9', '10360', '2544', '0'), +('14', '50', '15', '10366', '4854', '0'), +('14', '50', '15', '10151', '4200', '0'), +('14', '50', '15', '10163', '3709', '0'), +('14', '50', '15', '14679', '3360', '0'), +('14', '50', '20', '11666', '12568', '0'), +('14', '50', '20', '2742', '5824', '0'), +('14', '50', '20', '1277', '4059', '0'), +('14', '50', '20', '1364', '2920', '0'), +('14', '50', '12', '1250', '5723', '0'), +('14', '50', '12', '20655', '5098', '0'), +('14', '50', '12', '2923', '4348', '0'), +('14', '50', '12', '2336', '4044', '0'), +('14', '50', '18', '1651', '3321', '0'), +('14', '50', '18', '4410', '1685', '0'), +('14', '50', '18', '1251', '1318', '0'), +('14', '50', '18', '1221', '1234', '0'), +('14', '50', '19', '4407', '5526', '0'), +('14', '50', '19', '68239', '4546', '0'), +('14', '50', '19', '1368', '2066', '0'), +('14', '50', '19', '1652', '2046', '0'), +('14', '50', '13', '14759', '10500', '0'), +('14', '50', '13', '27711', '8480', '0'), +('14', '50', '13', '6359', '7393', '0'), +('14', '50', '13', '13500', '7228', '0'), +('14', '50', '14', '14759', '10500', '0'), +('14', '50', '14', '10219', '8362', '0'), +('14', '50', '14', '6359', '7393', '0'), +('14', '50', '14', '9246', '6958', '0'), +('14', '50', '11', '9246', '6958', '0'), +('14', '50', '11', '14762', '3204', '0'), +('14', '50', '11', '13353', '1500', '0'), +('14', '50', '11', '20677', '1200', '0'), +('14', '51', '22', '10323', '0', '0'), +('14', '51', '22', '9246', '0', '0'), +('14', '51', '22', '21509', '0', '0'), +('14', '51', '22', '8007', '0', '0'), +('14', '51', '1', '14559', '5109', '0'), +('14', '51', '1', '14702', '5000', '0'), +('14', '51', '1', '14701', '4624', '0'), +('14', '51', '1', '10082', '4129', '0'), +('14', '51', '2', '10143', '7136', '0'), +('14', '51', '2', '1246', '6635', '0'), +('14', '51', '2', '1211', '6479', '0'), +('14', '51', '2', '10141', '5569', '0'), +('14', '51', '3', '11052', '9241', '0'), +('14', '51', '3', '1275', '6878', '0'), +('14', '51', '3', '4505', '4373', '0'), +('14', '51', '3', '2350', '3243', '0'), +('14', '51', '5', '14703', '8800', '0'), +('14', '51', '5', '14558', '7180', '0'), +('14', '51', '5', '68291', '5108', '0'), +('14', '51', '5', '14700', '4836', '0'), +('14', '51', '8', '11603', '13916', '0'), +('14', '51', '8', '2349', '3651', '0'), +('14', '51', '8', '11621', '3631', '0'), +('14', '51', '8', '1057', '3327', '0'), +('14', '51', '6', '1542', '10639', '0'), +('14', '51', '6', '1905', '5430', '0'), +('14', '51', '6', '1557', '5371', '0'), +('14', '51', '6', '1276', '3275', '0'), +('14', '51', '17', '11641', '17395', '0'), +('14', '51', '17', '1214', '12608', '0'), +('14', '51', '17', '1247', '12440', '0'), +('14', '51', '17', '1644', '11556', '0'), +('14', '51', '7', '1218', '5531', '0'), +('14', '51', '7', '1248', '5315', '0'), +('14', '51', '7', '1648', '3929', '0'), +('14', '51', '7', '2458', '3437', '0'), +('14', '51', '9', '12806', '6439', '0'), +('14', '51', '9', '1649', '3439', '0'), +('14', '51', '9', '4408', '3171', '0'), +('14', '51', '9', '10360', '2580', '0'), +('14', '51', '15', '10366', '4854', '0'), +('14', '51', '15', '10151', '4200', '0'), +('14', '51', '15', '10163', '3709', '0'), +('14', '51', '15', '14679', '3360', '0'), +('14', '51', '20', '11666', '12579', '0'), +('14', '51', '20', '2742', '5839', '0'), +('14', '51', '20', '1277', '4119', '0'), +('14', '51', '20', '1364', '2968', '0'), +('14', '51', '12', '1250', '5819', '0'), +('14', '51', '12', '20655', '5125', '0'), +('14', '51', '12', '2923', '4348', '0'), +('14', '51', '12', '2336', '4105', '0'), +('14', '51', '18', '1651', '3357', '0'), +('14', '51', '18', '4410', '1685', '0'), +('14', '51', '18', '1251', '1318', '0'), +('14', '51', '18', '1221', '1234', '0'), +('14', '51', '19', '4407', '5635', '0'), +('14', '51', '19', '68239', '4582', '0'), +('14', '51', '19', '1368', '2066', '0'), +('14', '51', '19', '1652', '2046', '0'), +('14', '51', '13', '14759', '10565', '0'), +('14', '51', '13', '27711', '8570', '0'), +('14', '51', '13', '6359', '7514', '0'), +('14', '51', '13', '13500', '7349', '0'), +('14', '51', '14', '14759', '10565', '0'), +('14', '51', '14', '10219', '8362', '0'), +('14', '51', '14', '6359', '7514', '0'), +('14', '51', '14', '9246', '7079', '0'), +('14', '51', '11', '9246', '7079', '0'), +('14', '51', '11', '14762', '3204', '0'), +('14', '51', '11', '13353', '1500', '0'), +('14', '51', '11', '20677', '1200', '0'), +('14', '52', '22', '10323', '0', '0'), +('14', '52', '22', '9246', '0', '0'), +('14', '52', '22', '21509', '0', '0'), +('14', '52', '22', '8007', '0', '0'), +('14', '52', '1', '14559', '5158', '0'), +('14', '52', '1', '14702', '5000', '0'), +('14', '52', '1', '14701', '4624', '0'), +('14', '52', '1', '10082', '4201', '0'), +('14', '52', '2', '10143', '7136', '0'), +('14', '52', '2', '1246', '6720', '0'), +('14', '52', '2', '1211', '6563', '0'), +('14', '52', '2', '10141', '5678', '0'), +('14', '52', '3', '11052', '9422', '0'), +('14', '52', '3', '1275', '6950', '0'), +('14', '52', '3', '4505', '4458', '0'), +('14', '52', '3', '2350', '3304', '0'), +('14', '52', '5', '14703', '8800', '0'), +('14', '52', '5', '14558', '7247', '0'), +('14', '52', '5', '68291', '5156', '0'), +('14', '52', '5', '14700', '4836', '0'), +('14', '52', '8', '11603', '14024', '0'), +('14', '52', '8', '2349', '3651', '0'), +('14', '52', '8', '11621', '3631', '0'), +('14', '52', '8', '1057', '3387', '0'), +('14', '52', '6', '1542', '10748', '0'), +('14', '52', '6', '1905', '5437', '0'), +('14', '52', '6', '1557', '5371', '0'), +('14', '52', '6', '1645', '3281', '0'), +('14', '52', '17', '11641', '17576', '0'), +('14', '52', '17', '1214', '12784', '0'), +('14', '52', '17', '1247', '12612', '0'), +('14', '52', '17', '1644', '11616', '0'), +('14', '52', '7', '1218', '5615', '0'), +('14', '52', '7', '1248', '5400', '0'), +('14', '52', '7', '1648', '3989', '0'), +('14', '52', '7', '2458', '3485', '0'), +('14', '52', '9', '12806', '6524', '0'), +('14', '52', '9', '1649', '3475', '0'), +('14', '52', '9', '4408', '3231', '0'), +('14', '52', '9', '10360', '2617', '0'), +('14', '52', '15', '10366', '4854', '0'), +('14', '52', '15', '10151', '4200', '0'), +('14', '52', '15', '10163', '3709', '0'), +('14', '52', '15', '14679', '3360', '0'), +('14', '52', '20', '11666', '12589', '0'), +('14', '52', '20', '2742', '5853', '0'), +('14', '52', '20', '1277', '4180', '0'), +('14', '52', '20', '1364', '3017', '0'), +('14', '52', '12', '1250', '5916', '0'), +('14', '52', '12', '20655', '5152', '0'), +('14', '52', '12', '2923', '4348', '0'), +('14', '52', '12', '2336', '4165', '0'), +('14', '52', '18', '1651', '3393', '0'), +('14', '52', '18', '4410', '1685', '0'), +('14', '52', '18', '1251', '1318', '0'), +('14', '52', '18', '1221', '1234', '0'), +('14', '52', '19', '4407', '5744', '0'), +('14', '52', '19', '68239', '4618', '0'), +('14', '52', '19', '1368', '2066', '0'), +('14', '52', '19', '1652', '2046', '0'), +('14', '52', '13', '14759', '10630', '0'), +('14', '52', '13', '27711', '8661', '0'), +('14', '52', '13', '6359', '7635', '0'), +('14', '52', '13', '13500', '7470', '0'), +('14', '52', '14', '14759', '10630', '0'), +('14', '52', '14', '10219', '8362', '0'), +('14', '52', '14', '6359', '7635', '0'), +('14', '52', '14', '9246', '7200', '0'), +('14', '52', '11', '9246', '7200', '0'), +('14', '52', '11', '14762', '3204', '0'), +('14', '52', '11', '13353', '1500', '0'), +('14', '52', '11', '20677', '1200', '0'), +('14', '53', '22', '10323', '0', '0'), +('14', '53', '22', '9246', '0', '0'), +('14', '53', '22', '21509', '0', '0'), +('14', '53', '22', '8007', '0', '0'), +('14', '53', '1', '14559', '5206', '0'), +('14', '53', '1', '14702', '5000', '0'), +('14', '53', '1', '14701', '4624', '0'), +('14', '53', '1', '10082', '4274', '0'), +('14', '53', '2', '10143', '7136', '0'), +('14', '53', '2', '1246', '6804', '0'), +('14', '53', '2', '1211', '6648', '0'), +('14', '53', '2', '10141', '5786', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '53', '3', '11052', '9604', '0'), +('14', '53', '3', '1275', '7023', '0'), +('14', '53', '3', '4505', '4542', '0'), +('14', '53', '3', '2350', '3364', '0'), +('14', '53', '5', '14703', '8800', '0'), +('14', '53', '5', '14558', '7315', '0'), +('14', '53', '5', '68291', '5205', '0'), +('14', '53', '5', '14700', '4836', '0'), +('14', '53', '8', '11603', '14133', '0'), +('14', '53', '8', '2349', '3651', '0'), +('14', '53', '8', '11621', '3631', '0'), +('14', '53', '8', '1057', '3448', '0'), +('14', '53', '6', '1542', '10857', '0'), +('14', '53', '6', '1905', '5445', '0'), +('14', '53', '6', '1557', '5371', '0'), +('14', '53', '6', '1645', '3317', '0'), +('14', '53', '17', '11641', '17758', '0'), +('14', '53', '17', '1214', '12960', '0'), +('14', '53', '17', '1247', '12783', '0'), +('14', '53', '17', '1644', '11676', '0'), +('14', '53', '7', '1218', '5700', '0'), +('14', '53', '7', '1248', '5484', '0'), +('14', '53', '7', '1648', '4050', '0'), +('14', '53', '7', '2458', '3533', '0'), +('14', '53', '9', '12806', '6609', '0'), +('14', '53', '9', '1649', '3511', '0'), +('14', '53', '9', '4408', '3292', '0'), +('14', '53', '9', '10360', '2653', '0'), +('14', '53', '15', '10366', '4854', '0'), +('14', '53', '15', '10151', '4200', '0'), +('14', '53', '15', '10163', '3709', '0'), +('14', '53', '15', '14679', '3360', '0'), +('14', '53', '20', '11666', '12599', '0'), +('14', '53', '20', '2742', '5868', '0'), +('14', '53', '20', '1277', '4240', '0'), +('14', '53', '20', '1364', '3065', '0'), +('14', '53', '12', '1250', '6013', '0'), +('14', '53', '12', '20655', '5179', '0'), +('14', '53', '12', '2923', '4348', '0'), +('14', '53', '12', '2336', '4225', '0'), +('14', '53', '18', '1651', '3429', '0'), +('14', '53', '18', '4410', '1685', '0'), +('14', '53', '18', '1251', '1318', '0'), +('14', '53', '18', '1221', '1234', '0'), +('14', '53', '19', '4407', '5853', '0'), +('14', '53', '19', '68239', '4655', '0'), +('14', '53', '19', '1368', '2066', '0'), +('14', '53', '19', '1652', '2046', '0'), +('14', '53', '13', '14759', '10695', '0'), +('14', '53', '13', '27711', '8751', '0'), +('14', '53', '13', '6359', '7755', '0'), +('14', '53', '13', '13500', '7590', '0'), +('14', '53', '14', '14759', '10695', '0'), +('14', '53', '14', '10219', '8362', '0'), +('14', '53', '14', '6359', '7755', '0'), +('14', '53', '14', '9246', '7320', '0'), +('14', '53', '11', '9246', '7320', '0'), +('14', '53', '11', '14762', '3204', '0'), +('14', '53', '11', '13353', '1500', '0'), +('14', '53', '11', '20677', '1200', '0'), +('14', '54', '22', '10323', '0', '0'), +('14', '54', '22', '9246', '0', '0'), +('14', '54', '22', '21509', '0', '0'), +('14', '54', '22', '8007', '0', '0'), +('14', '54', '1', '14559', '5254', '0'), +('14', '54', '1', '14702', '5000', '0'), +('14', '54', '1', '14701', '4624', '0'), +('14', '54', '1', '10082', '4346', '0'), +('14', '54', '2', '10143', '7136', '0'), +('14', '54', '2', '1246', '6889', '0'), +('14', '54', '2', '1211', '6732', '0'), +('14', '54', '2', '10141', '5895', '0'), +('14', '54', '3', '11052', '9785', '0'), +('14', '54', '3', '1275', '7095', '0'), +('14', '54', '3', '4505', '4627', '0'), +('14', '54', '3', '2350', '3425', '0'), +('14', '54', '5', '14703', '8800', '0'), +('14', '54', '5', '14558', '7383', '0'), +('14', '54', '5', '68291', '5253', '0'), +('14', '54', '5', '14700', '4836', '0'), +('14', '54', '8', '11603', '14242', '0'), +('14', '54', '8', '2349', '3651', '0'), +('14', '54', '8', '11621', '3631', '0'), +('14', '54', '8', '1057', '3508', '0'), +('14', '54', '6', '1542', '10966', '0'), +('14', '54', '6', '1905', '5452', '0'), +('14', '54', '6', '1557', '5371', '0'), +('14', '54', '6', '1645', '3354', '0'), +('14', '54', '17', '11641', '17939', '0'), +('14', '54', '17', '1214', '13136', '0'), +('14', '54', '17', '1247', '12955', '0'), +('14', '54', '17', '1644', '11737', '0'), +('14', '54', '7', '1218', '5785', '0'), +('14', '54', '7', '1248', '5569', '0'), +('14', '54', '7', '1648', '4110', '0'), +('14', '54', '7', '2458', '3582', '0'), +('14', '54', '9', '12806', '6693', '0'), +('14', '54', '9', '1649', '3548', '0'), +('14', '54', '9', '4408', '3352', '0'), +('14', '54', '9', '10360', '2689', '0'), +('14', '54', '15', '10366', '4854', '0'), +('14', '54', '15', '10151', '4200', '0'), +('14', '54', '15', '10163', '3709', '0'), +('14', '54', '15', '14679', '3360', '0'), +('14', '54', '20', '11666', '12609', '0'), +('14', '54', '20', '2742', '5882', '0'), +('14', '54', '20', '1277', '4301', '0'), +('14', '54', '20', '1364', '3113', '0'), +('14', '54', '12', '1250', '6109', '0'), +('14', '54', '12', '20655', '5206', '0'), +('14', '54', '12', '2923', '4348', '0'), +('14', '54', '12', '2336', '4286', '0'), +('14', '54', '18', '1651', '3466', '0'), +('14', '54', '18', '4410', '1685', '0'), +('14', '54', '18', '1251', '1318', '0'), +('14', '54', '18', '1221', '1234', '0'), +('14', '54', '19', '4407', '5961', '0'), +('14', '54', '19', '68239', '4691', '0'), +('14', '54', '19', '1368', '2066', '0'), +('14', '54', '19', '1652', '2046', '0'), +('14', '54', '13', '14759', '10760', '0'), +('14', '54', '13', '27711', '8842', '0'), +('14', '54', '13', '6359', '7876', '0'), +('14', '54', '13', '13500', '7711', '0'), +('14', '54', '14', '14759', '10760', '0'), +('14', '54', '14', '10219', '8362', '0'), +('14', '54', '14', '6359', '7876', '0'), +('14', '54', '14', '9246', '7441', '0'), +('14', '54', '11', '9246', '7441', '0'), +('14', '54', '11', '14762', '3204', '0'), +('14', '54', '11', '13353', '1500', '0'), +('14', '54', '11', '20677', '1200', '0'), +('14', '55', '22', '10323', '0', '0'), +('14', '55', '22', '9246', '0', '0'), +('14', '55', '22', '21509', '0', '0'), +('14', '55', '22', '8007', '0', '0'), +('14', '55', '1', '14559', '5303', '0'), +('14', '55', '1', '14702', '5000', '0'), +('14', '55', '1', '14701', '4624', '0'), +('14', '55', '1', '10082', '4419', '0'), +('14', '55', '2', '10143', '7136', '0'), +('14', '55', '2', '1246', '6974', '0'), +('14', '55', '2', '1211', '6817', '0'), +('14', '55', '2', '10141', '6004', '0'), +('14', '55', '3', '11052', '9966', '0'), +('14', '55', '3', '1275', '7168', '0'), +('14', '55', '3', '4505', '4711', '0'), +('14', '55', '3', '2350', '3485', '0'), +('14', '55', '5', '14703', '8800', '0'), +('14', '55', '5', '14558', '7450', '0'), +('14', '55', '5', '68291', '5301', '0'), +('14', '55', '5', '10216', '4846', '0'), +('14', '55', '8', '11603', '14350', '0'), +('14', '55', '8', '2349', '3651', '0'), +('14', '55', '8', '11621', '3631', '0'), +('14', '55', '8', '1057', '3569', '0'), +('14', '55', '6', '1542', '11074', '0'), +('14', '55', '6', '1905', '5459', '0'), +('14', '55', '6', '1557', '5371', '0'), +('14', '55', '6', '1645', '3390', '0'), +('14', '55', '17', '11641', '18120', '0'), +('14', '55', '17', '1214', '13312', '0'), +('14', '55', '17', '1247', '13127', '0'), +('14', '55', '17', '1644', '11797', '0'), +('14', '55', '7', '1218', '5869', '0'), +('14', '55', '7', '1248', '5653', '0'), +('14', '55', '7', '1648', '4170', '0'), +('14', '55', '7', '2458', '3630', '0'), +('14', '55', '9', '12806', '6778', '0'), +('14', '55', '9', '1649', '3584', '0'), +('14', '55', '9', '4408', '3413', '0'), +('14', '55', '9', '10360', '2725', '0'), +('14', '55', '15', '10366', '4854', '0'), +('14', '55', '15', '10151', '4200', '0'), +('14', '55', '15', '10163', '3709', '0'), +('14', '55', '15', '14679', '3360', '0'), +('14', '55', '20', '11666', '12619', '0'), +('14', '55', '20', '2742', '5897', '0'), +('14', '55', '20', '1277', '4361', '0'), +('14', '55', '20', '1364', '3162', '0'), +('14', '55', '12', '1250', '6206', '0'), +('14', '55', '12', '20655', '5233', '0'), +('14', '55', '12', '2923', '4348', '0'), +('14', '55', '12', '2336', '4346', '0'), +('14', '55', '18', '1651', '3502', '0'), +('14', '55', '18', '4410', '1685', '0'), +('14', '55', '18', '1251', '1318', '0'), +('14', '55', '18', '1221', '1234', '0'), +('14', '55', '19', '4407', '6070', '0'), +('14', '55', '19', '68239', '4727', '0'), +('14', '55', '19', '1368', '2066', '0'), +('14', '55', '19', '1652', '2046', '0'), +('14', '55', '13', '14759', '10826', '0'), +('14', '55', '13', '27711', '8933', '0'), +('14', '55', '13', '6359', '7997', '0'), +('14', '55', '13', '13500', '7832', '0'), +('14', '55', '14', '14759', '10826', '0'), +('14', '55', '14', '10219', '8362', '0'), +('14', '55', '14', '6359', '7997', '0'), +('14', '55', '14', '9246', '7562', '0'), +('14', '55', '11', '9246', '7562', '0'), +('14', '55', '11', '14762', '3204', '0'), +('14', '55', '11', '13353', '1500', '0'), +('14', '55', '11', '20677', '1200', '0'), +('14', '56', '22', '10323', '0', '0'), +('14', '56', '22', '9246', '0', '0'), +('14', '56', '22', '21509', '0', '0'), +('14', '56', '22', '8007', '0', '0'), +('14', '56', '1', '14559', '5351', '0'), +('14', '56', '1', '14702', '5000', '0'), +('14', '56', '1', '14701', '4624', '0'), +('14', '56', '1', '10082', '4491', '0'), +('14', '56', '2', '10143', '7136', '0'), +('14', '56', '2', '1246', '7058', '0'), +('14', '56', '2', '1211', '6901', '0'), +('14', '56', '2', '10141', '6112', '0'), +('14', '56', '3', '11052', '10147', '0'), +('14', '56', '3', '1275', '7240', '0'), +('14', '56', '3', '4505', '4796', '0'), +('14', '56', '3', '2350', '3545', '0'), +('14', '56', '5', '14703', '8800', '0'), +('14', '56', '5', '14558', '7518', '0'), +('14', '56', '5', '68291', '5350', '0'), +('14', '56', '5', '10216', '4907', '0'), +('14', '56', '8', '11603', '14459', '0'), +('14', '56', '8', '2349', '3651', '0'), +('14', '56', '8', '11621', '3631', '0'), +('14', '56', '8', '1057', '3629', '0'), +('14', '56', '6', '1542', '11183', '0'), +('14', '56', '6', '1905', '5466', '0'), +('14', '56', '6', '1557', '5371', '0'), +('14', '56', '6', '1645', '3426', '0'), +('14', '56', '17', '11641', '18301', '0'), +('14', '56', '17', '1214', '13488', '0'), +('14', '56', '17', '1247', '13298', '0'), +('14', '56', '17', '1644', '11858', '0'), +('14', '56', '7', '1218', '5954', '0'), +('14', '56', '7', '1248', '5738', '0'), +('14', '56', '7', '1648', '4231', '0'), +('14', '56', '7', '2458', '3678', '0'), +('14', '56', '9', '12806', '6862', '0'), +('14', '56', '9', '1649', '3620', '0'), +('14', '56', '9', '4408', '3473', '0'), +('14', '56', '9', '10360', '2762', '0'), +('14', '56', '15', '10366', '4854', '0'), +('14', '56', '15', '10151', '4200', '0'), +('14', '56', '15', '10163', '3709', '0'), +('14', '56', '15', '14679', '3360', '0'), +('14', '56', '20', '11666', '12629', '0'), +('14', '56', '20', '2742', '5911', '0'), +('14', '56', '20', '1277', '4421', '0'), +('14', '56', '20', '1364', '3210', '0'), +('14', '56', '12', '1250', '6302', '0'), +('14', '56', '12', '20655', '5261', '0'), +('14', '56', '12', '2336', '4407', '0'), +('14', '56', '12', '2923', '4348', '0'), +('14', '56', '18', '1651', '3538', '0'), +('14', '56', '18', '4410', '1685', '0'), +('14', '56', '18', '1251', '1318', '0'), +('14', '56', '18', '1221', '1234', '0'), +('14', '56', '19', '4407', '6179', '0'), +('14', '56', '19', '68239', '4763', '0'), +('14', '56', '19', '1368', '2066', '0'), +('14', '56', '19', '1652', '2046', '0'), +('14', '56', '13', '14759', '10891', '0'), +('14', '56', '13', '27711', '9023', '0'), +('14', '56', '13', '6359', '8118', '0'), +('14', '56', '13', '13500', '7953', '0'), +('14', '56', '14', '14759', '10891', '0'), +('14', '56', '14', '10219', '8362', '0'), +('14', '56', '14', '6359', '8118', '0'), +('14', '56', '14', '9246', '7683', '0'), +('14', '56', '11', '9246', '7683', '0'), +('14', '56', '11', '14762', '3204', '0'), +('14', '56', '11', '13353', '1500', '0'), +('14', '56', '11', '20677', '1200', '0'), +('14', '57', '22', '10323', '0', '0'), +('14', '57', '22', '9246', '0', '0'), +('14', '57', '22', '21509', '0', '0'), +('14', '57', '22', '8007', '0', '0'), +('14', '57', '1', '14559', '5399', '0'), +('14', '57', '1', '14702', '5000', '0'), +('14', '57', '1', '14701', '4624', '0'), +('14', '57', '1', '10082', '4564', '0'), +('14', '57', '2', '1246', '7143', '0'), +('14', '57', '2', '10143', '7136', '0'), +('14', '57', '2', '1211', '6986', '0'), +('14', '57', '2', '10141', '6221', '0'), +('14', '57', '3', '11052', '10328', '0'), +('14', '57', '3', '1275', '7313', '0'), +('14', '57', '3', '4505', '4880', '0'), +('14', '57', '3', '2350', '3606', '0'), +('14', '57', '5', '14703', '8800', '0'), +('14', '57', '5', '14558', '7585', '0'), +('14', '57', '5', '68291', '5398', '0'), +('14', '57', '5', '10216', '4967', '0'), +('14', '57', '8', '11603', '14568', '0'), +('14', '57', '8', '1057', '3689', '0'), +('14', '57', '8', '2349', '3651', '0'), +('14', '57', '8', '11621', '3631', '0'), +('14', '57', '6', '1542', '11292', '0'), +('14', '57', '6', '1905', '5474', '0'), +('14', '57', '6', '1557', '5371', '0'), +('14', '57', '6', '1645', '3462', '0'), +('14', '57', '17', '11641', '18482', '0'), +('14', '57', '17', '1214', '13664', '0'), +('14', '57', '17', '1247', '13470', '0'), +('14', '57', '17', '1644', '11918', '0'), +('14', '57', '7', '1218', '6038', '0'), +('14', '57', '7', '1248', '5823', '0'), +('14', '57', '7', '1648', '4291', '0'), +('14', '57', '7', '2458', '3727', '0'), +('14', '57', '9', '12806', '6947', '0'), +('14', '57', '9', '1649', '3656', '0'), +('14', '57', '9', '4408', '3533', '0'), +('14', '57', '9', '10360', '2798', '0'), +('14', '57', '15', '10366', '4854', '0'), +('14', '57', '15', '10151', '4200', '0'), +('14', '57', '15', '10163', '3709', '0'), +('14', '57', '15', '14679', '3360', '0'), +('14', '57', '20', '11666', '12639', '0'), +('14', '57', '20', '2742', '5926', '0'), +('14', '57', '20', '1277', '4482', '0'), +('14', '57', '20', '1364', '3258', '0'), +('14', '57', '12', '1250', '6399', '0'), +('14', '57', '12', '20655', '5288', '0'), +('14', '57', '12', '2336', '4467', '0'), +('14', '57', '12', '2923', '4348', '0'), +('14', '57', '18', '1651', '3574', '0'), +('14', '57', '18', '4410', '1685', '0'), +('14', '57', '18', '1251', '1318', '0'), +('14', '57', '18', '1221', '1234', '0'), +('14', '57', '19', '4407', '6287', '0'), +('14', '57', '19', '68239', '4800', '0'), +('14', '57', '19', '1368', '2066', '0'), +('14', '57', '19', '1652', '2046', '0'), +('14', '57', '13', '14759', '10956', '0'), +('14', '57', '13', '27711', '9114', '0'), +('14', '57', '13', '6359', '8239', '0'), +('14', '57', '13', '13500', '8074', '0'), +('14', '57', '14', '14759', '10956', '0'), +('14', '57', '14', '10219', '8362', '0'), +('14', '57', '14', '6359', '8239', '0'), +('14', '57', '14', '9246', '7804', '0'), +('14', '57', '11', '9246', '7804', '0'), +('14', '57', '11', '14762', '3204', '0'), +('14', '57', '11', '13353', '1500', '0'), +('14', '57', '11', '20677', '1200', '0'), +('14', '58', '22', '10323', '0', '0'), +('14', '58', '22', '9246', '0', '0'), +('14', '58', '22', '21509', '0', '0'), +('14', '58', '22', '8007', '0', '0'), +('14', '58', '1', '14559', '5448', '0'), +('14', '58', '1', '14702', '5000', '0'), +('14', '58', '1', '10082', '4636', '0'), +('14', '58', '1', '14701', '4624', '0'), +('14', '58', '2', '1246', '7227', '0'), +('14', '58', '2', '10143', '7136', '0'), +('14', '58', '2', '1211', '7070', '0'), +('14', '58', '2', '10141', '6330', '0'), +('14', '58', '3', '11052', '10510', '0'), +('14', '58', '3', '1275', '7385', '0'), +('14', '58', '3', '4505', '4965', '0'), +('14', '58', '3', '2350', '3666', '0'), +('14', '58', '5', '14703', '8800', '0'), +('14', '58', '5', '14558', '7653', '0'), +('14', '58', '5', '68291', '5446', '0'), +('14', '58', '5', '10216', '5027', '0'), +('14', '58', '8', '11603', '14677', '0'), +('14', '58', '8', '1057', '3750', '0'), +('14', '58', '8', '2349', '3651', '0'), +('14', '58', '8', '11621', '3631', '0'), +('14', '58', '6', '1542', '11401', '0'), +('14', '58', '6', '1905', '5481', '0'), +('14', '58', '6', '1557', '5371', '0'), +('14', '58', '6', '1645', '3499', '0'), +('14', '58', '17', '11641', '18664', '0'), +('14', '58', '17', '1214', '13840', '0'), +('14', '58', '17', '1247', '13641', '0'), +('14', '58', '17', '1644', '11978', '0'), +('14', '58', '7', '1218', '6123', '0'), +('14', '58', '7', '1248', '5907', '0'), +('14', '58', '7', '1648', '4352', '0'), +('14', '58', '7', '2458', '3775', '0'), +('14', '58', '9', '12806', '7031', '0'), +('14', '58', '9', '1649', '3693', '0'), +('14', '58', '9', '4408', '3594', '0'), +('14', '58', '9', '10360', '2834', '0'), +('14', '58', '15', '10366', '4854', '0'), +('14', '58', '15', '10151', '4200', '0'), +('14', '58', '15', '10163', '3709', '0'), +('14', '58', '15', '14679', '3360', '0'), +('14', '58', '20', '11666', '12650', '0'), +('14', '58', '20', '2742', '5940', '0'), +('14', '58', '20', '1277', '4542', '0'), +('14', '58', '20', '1364', '3307', '0'), +('14', '58', '12', '1250', '6496', '0'), +('14', '58', '12', '20655', '5315', '0'), +('14', '58', '12', '2336', '4527', '0'), +('14', '58', '12', '2923', '4348', '0'), +('14', '58', '18', '1651', '3611', '0'), +('14', '58', '18', '4410', '1685', '0'), +('14', '58', '18', '1251', '1318', '0'), +('14', '58', '18', '1221', '1234', '0'), +('14', '58', '19', '4407', '6396', '0'), +('14', '58', '19', '68239', '4836', '0'), +('14', '58', '19', '1368', '2066', '0'), +('14', '58', '19', '1652', '2046', '0'), +('14', '58', '13', '14759', '11021', '0'), +('14', '58', '13', '27711', '9204', '0'), +('14', '58', '13', '6359', '8359', '0'), +('14', '58', '13', '13500', '8194', '0'), +('14', '58', '14', '14759', '11021', '0'), +('14', '58', '14', '10219', '8362', '0'), +('14', '58', '14', '6359', '8359', '0'), +('14', '58', '14', '9246', '7924', '0'), +('14', '58', '11', '9246', '7924', '0'), +('14', '58', '11', '14762', '3204', '0'), +('14', '58', '11', '13353', '1500', '0'), +('14', '58', '11', '20677', '1200', '0'), +('14', '59', '22', '10323', '0', '0'), +('14', '59', '22', '9246', '0', '0'), +('14', '59', '22', '21509', '0', '0'), +('14', '59', '22', '8007', '0', '0'), +('14', '59', '1', '14559', '5496', '0'), +('14', '59', '1', '14702', '5000', '0'), +('14', '59', '1', '10082', '4709', '0'), +('14', '59', '1', '14701', '4624', '0'), +('14', '59', '2', '1246', '7312', '0'), +('14', '59', '2', '1211', '7155', '0'), +('14', '59', '2', '10143', '7136', '0'), +('14', '59', '2', '10141', '6439', '0'), +('14', '59', '3', '11052', '10691', '0'), +('14', '59', '3', '1275', '7458', '0'), +('14', '59', '3', '4505', '5049', '0'), +('14', '59', '3', '2350', '3727', '0'), +('14', '59', '5', '14703', '8800', '0'), +('14', '59', '5', '14558', '7721', '0'), +('14', '59', '5', '68291', '5495', '0'), +('14', '59', '5', '10216', '5088', '0'), +('14', '59', '8', '11603', '14785', '0'), +('14', '59', '8', '1057', '3810', '0'), +('14', '59', '8', '2349', '3651', '0'), +('14', '59', '8', '11621', '3631', '0'), +('14', '59', '6', '1542', '11509', '0'), +('14', '59', '6', '1905', '5488', '0'), +('14', '59', '6', '1557', '5371', '0'), +('14', '59', '6', '1645', '3535', '0'), +('14', '59', '17', '11641', '18845', '0'), +('14', '59', '17', '1214', '14016', '0'), +('14', '59', '17', '1247', '13813', '0'), +('14', '59', '17', '1644', '12039', '0'), +('14', '59', '7', '1218', '6207', '0'), +('14', '59', '7', '1248', '5992', '0'), +('14', '59', '7', '1648', '4412', '0'), +('14', '59', '7', '2458', '3823', '0'), +('14', '59', '9', '12806', '7116', '0'), +('14', '59', '9', '1649', '3729', '0'), +('14', '59', '9', '4408', '3654', '0'), +('14', '59', '9', '10360', '2870', '0'), +('14', '59', '15', '10366', '4854', '0'), +('14', '59', '15', '10151', '4200', '0'), +('14', '59', '15', '10163', '3709', '0'), +('14', '59', '15', '14679', '3360', '0'), +('14', '59', '20', '11666', '12660', '0'), +('14', '59', '20', '2742', '5955', '0'), +('14', '59', '20', '1277', '4603', '0'), +('14', '59', '20', '1364', '3355', '0'), +('14', '59', '12', '1250', '6592', '0'), +('14', '59', '12', '20655', '5342', '0'), +('14', '59', '12', '2336', '4588', '0'), +('14', '59', '12', '2923', '4348', '0'), +('14', '59', '18', '1651', '3647', '0'), +('14', '59', '18', '4410', '1685', '0'), +('14', '59', '18', '1251', '1318', '0'), +('14', '59', '18', '1221', '1234', '0'), +('14', '59', '19', '4407', '6505', '0'), +('14', '59', '19', '68239', '4872', '0'), +('14', '59', '19', '1368', '2066', '0'), +('14', '59', '19', '1652', '2046', '0'), +('14', '59', '13', '14759', '11087', '0'), +('14', '59', '13', '27711', '9295', '0'), +('14', '59', '13', '6359', '8480', '0'), +('14', '59', '13', '13500', '8315', '0'), +('14', '59', '14', '14759', '11087', '0'), +('14', '59', '14', '6359', '8480', '0'), +('14', '59', '14', '10219', '8362', '0'), +('14', '59', '14', '9246', '8045', '0'), +('14', '59', '11', '9246', '8045', '0'), +('14', '59', '11', '14762', '3204', '0'), +('14', '59', '11', '13353', '1500', '0'), +('14', '59', '11', '20677', '1200', '0'), +('14', '60', '22', '66397', '0', '3'), +('14', '60', '22', '61948', '0', '3'), +('14', '60', '22', '21805', '0', '3'), +('14', '60', '22', '21807', '0', '3'), +('14', '60', '1', '63170', '27617', '3'), +('14', '60', '1', '30552', '24372', '3'), +('14', '60', '1', '29861', '17842', '3'), +('14', '60', '1', '28944', '16422', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '60', '2', '26763', '37357', '3'), +('14', '60', '2', '26605', '17663', '3'), +('14', '60', '2', '26762', '17527', '3'), +('14', '60', '2', '28909', '17329', '3'), +('14', '60', '3', '5772', '44628', '3'), +('14', '60', '3', '1157', '23168', '3'), +('14', '60', '3', '30553', '18163', '3'), +('14', '60', '3', '31328', '18004', '3'), +('14', '60', '5', '51229', '29665', '3'), +('14', '60', '5', '28911', '27868', '3'), +('14', '60', '5', '8364', '23615', '3'), +('14', '60', '5', '31234', '23259', '3'), +('14', '60', '8', '28964', '22505', '3'), +('14', '60', '8', '28992', '22325', '3'), +('14', '60', '8', '30505', '21001', '3'), +('14', '60', '8', '8359', '19758', '3'), +('14', '60', '6', '1200', '34462', '3'), +('14', '60', '6', '28920', '19494', '3'), +('14', '60', '6', '28902', '17426', '3'), +('14', '60', '6', '28919', '16783', '3'), +('14', '60', '17', '32933', '25018', '3'), +('14', '60', '17', '26776', '23703', '3'), +('14', '60', '17', '26604', '22253', '3'), +('14', '60', '17', '55296', '20470', '3'), +('14', '60', '7', '28924', '19561', '3'), +('14', '60', '7', '7868', '19113', '3'), +('14', '60', '7', '8288', '17509', '3'), +('14', '60', '7', '26555', '14683', '3'), +('14', '60', '9', '26781', '37211', '3'), +('14', '60', '9', '30552', '24372', '3'), +('14', '60', '9', '28891', '21753', '3'), +('14', '60', '9', '7868', '19113', '3'), +('14', '60', '15', '51242', '30931', '3'), +('14', '60', '15', '63170', '27617', '3'), +('14', '60', '15', '28993', '21638', '3'), +('14', '60', '15', '23511', '18201', '3'), +('14', '60', '20', '28916', '22550', '3'), +('14', '60', '20', '30534', '18710', '3'), +('14', '60', '20', '26549', '18079', '3'), +('14', '60', '20', '2510', '17377', '3'), +('14', '60', '12', '30534', '18710', '3'), +('14', '60', '12', '28967', '18255', '3'), +('14', '60', '12', '28949', '13988', '3'), +('14', '60', '12', '28972', '13985', '3'), +('14', '60', '18', '26755', '21009', '3'), +('14', '60', '18', '26777', '18524', '3'), +('14', '60', '18', '28932', '17353', '3'), +('14', '60', '18', '8289', '17326', '3'), +('14', '60', '19', '28148', '26086', '3'), +('14', '60', '19', '30570', '20613', '3'), +('14', '60', '19', '29645', '17757', '3'), +('14', '60', '19', '31245', '17692', '3'), +('14', '60', '13', '26778', '37655', '3'), +('14', '60', '13', '28917', '21054', '3'), +('14', '60', '13', '28981', '20469', '3'), +('14', '60', '13', '28980', '19469', '3'), +('14', '60', '14', '28915', '39710', '3'), +('14', '60', '14', '26778', '37655', '3'), +('14', '60', '14', '10219', '23006', '3'), +('14', '60', '14', '26780', '22436', '3'), +('14', '60', '11', '26778', '37655', '3'), +('14', '60', '11', '2698', '29253', '3'), +('14', '60', '11', '31321', '21070', '3'), +('14', '60', '11', '30562', '18585', '3'), +('14', '60', '22', '10323', '0', '2'), +('14', '60', '22', '9248', '0', '2'), +('14', '60', '22', '12425', '0', '2'), +('14', '60', '22', '30014', '0', '2'), +('14', '60', '1', '31228', '17017', '2'), +('14', '60', '1', '10912', '9516', '2'), +('14', '60', '1', '62234', '9159', '2'), +('14', '60', '1', '62348', '8045', '2'), +('14', '60', '2', '10913', '16155', '2'), +('14', '60', '2', '29648', '14340', '2'), +('14', '60', '2', '31322', '12005', '2'), +('14', '60', '2', '1867', '11632', '2'), +('14', '60', '3', '31233', '18777', '2'), +('14', '60', '3', '31244', '15240', '2'), +('14', '60', '3', '1547', '14483', '2'), +('14', '60', '3', '31463', '11812', '2'), +('14', '60', '5', '31460', '17514', '2'), +('14', '60', '5', '31318', '14266', '2'), +('14', '60', '5', '29459', '13516', '2'), +('14', '60', '5', '27259', '12723', '2'), +('14', '60', '8', '1628', '16065', '2'), +('14', '60', '8', '5779', '12922', '2'), +('14', '60', '8', '1622', '12627', '2'), +('14', '60', '8', '11603', '9449', '2'), +('14', '60', '6', '29472', '8936', '2'), +('14', '60', '6', '1114', '7498', '2'), +('14', '60', '6', '24070', '6936', '2'), +('14', '60', '6', '5723', '6555', '2'), +('14', '60', '17', '31239', '22307', '2'), +('14', '60', '17', '10845', '20005', '2'), +('14', '60', '17', '31176', '15910', '2'), +('14', '60', '17', '1552', '14960', '2'), +('14', '60', '7', '29485', '10152', '2'), +('14', '60', '7', '31342', '8925', '2'), +('14', '60', '7', '31237', '7398', '2'), +('14', '60', '7', '5723', '6555', '2'), +('14', '60', '9', '31460', '17514', '2'), +('14', '60', '9', '31246', '11105', '2'), +('14', '60', '9', '1559', '11067', '2'), +('14', '60', '9', '31461', '8300', '2'), +('14', '60', '15', '25211', '17733', '2'), +('14', '60', '15', '31231', '17565', '2'), +('14', '60', '15', '25198', '13630', '2'), +('14', '60', '15', '62373', '10465', '2'), +('14', '60', '20', '25858', '18759', '2'), +('14', '60', '20', '2510', '17647', '2'), +('14', '60', '20', '1556', '17325', '2'), +('14', '60', '20', '11666', '12121', '2'), +('14', '60', '12', '25857', '14595', '2'), +('14', '60', '12', '31306', '14026', '2'), +('14', '60', '12', '31340', '10701', '2'), +('14', '60', '12', '31179', '8080', '2'), +('14', '60', '18', '31339', '10621', '2'), +('14', '60', '18', '31180', '6838', '2'), +('14', '60', '18', '31371', '5352', '2'), +('14', '60', '18', '5819', '4891', '2'), +('14', '60', '19', '29645', '19806', '2'), +('14', '60', '19', '31245', '19595', '2'), +('14', '60', '19', '31355', '11634', '2'), +('14', '60', '19', '31327', '10080', '2'), +('14', '60', '13', '31326', '17472', '2'), +('14', '60', '13', '1156', '14928', '2'), +('14', '60', '13', '31396', '14865', '2'), +('14', '60', '13', '24609', '13050', '2'), +('14', '60', '14', '2498', '16406', '2'), +('14', '60', '14', '31462', '15516', '2'), +('14', '60', '14', '24609', '13050', '2'), +('14', '60', '14', '25098', '12883', '2'), +('14', '60', '11', '1554', '18957', '2'), +('14', '60', '11', '31466', '17080', '2'), +('14', '60', '11', '2698', '14283', '2'), +('14', '60', '11', '31302', '11402', '2'), +('14', '60', '22', '10323', '0', '1'), +('14', '60', '22', '12425', '0', '1'), +('14', '60', '22', '9246', '0', '1'), +('14', '60', '22', '21509', '0', '1'), +('14', '60', '1', '10912', '13981', '1'), +('14', '60', '1', '62234', '11111', '1'), +('14', '60', '1', '5713', '5646', '1'), +('14', '60', '1', '5702', '5636', '1'), +('14', '60', '2', '10913', '22184', '1'), +('14', '60', '2', '10143', '7121', '1'), +('14', '60', '2', '62138', '5593', '1'), +('14', '60', '2', '1414', '5527', '1'), +('14', '60', '3', '46184', '7753', '1'), +('14', '60', '3', '5780', '7323', '1'), +('14', '60', '3', '11052', '6417', '1'), +('14', '60', '3', '1625', '6006', '1'), +('14', '60', '5', '14703', '8800', '1'), +('14', '60', '5', '14558', '6031', '1'), +('14', '60', '5', '8285', '5764', '1'), +('14', '60', '5', '14709', '4858', '1'), +('14', '60', '8', '1628', '20074', '1'), +('14', '60', '8', '1622', '14049', '1'), +('14', '60', '8', '5779', '12971', '1'), +('14', '60', '8', '11603', '12172', '1'), +('14', '60', '6', '29468', '8854', '1'), +('14', '60', '6', '1542', '8824', '1'), +('14', '60', '6', '5723', '6792', '1'), +('14', '60', '6', '1557', '5321', '1'), +('14', '60', '17', '10845', '26034', '1'), +('14', '60', '17', '11641', '14508', '1'), +('14', '60', '17', '24604', '12175', '1'), +('14', '60', '17', '1253', '10570', '1'), +('14', '60', '7', '5723', '6792', '1'), +('14', '60', '7', '1218', '4193', '1'), +('14', '60', '7', '1248', '3955', '1'), +('14', '60', '7', '1362', '3129', '1'), +('14', '60', '9', '5723', '6792', '1'), +('14', '60', '9', '12806', '5069', '1'), +('14', '60', '9', '1618', '4960', '1'), +('14', '60', '9', '4780', '3035', '1'), +('14', '60', '15', '5727', '11269', '1'), +('14', '60', '15', '5728', '8853', '1'), +('14', '60', '15', '14738', '6750', '1'), +('14', '60', '15', '5807', '6543', '1'), +('14', '60', '20', '1556', '20335', '1'), +('14', '60', '20', '11666', '12395', '1'), +('14', '60', '20', '5765', '8112', '1'), +('14', '60', '20', '2742', '5572', '1'), +('14', '60', '12', '4582', '9903', '1'), +('14', '60', '12', '20655', '4603', '1'), +('14', '60', '12', '2923', '4329', '1'), +('14', '60', '12', '1250', '4276', '1'), +('14', '60', '18', '5819', '5959', '1'), +('14', '60', '18', '24765', '4209', '1'), +('14', '60', '18', '1651', '2748', '1'), +('14', '60', '18', '4410', '1650', '1'), +('14', '60', '19', '5749', '4730', '1'), +('14', '60', '19', '68239', '3966', '1'), +('14', '60', '19', '4407', '3916', '1'), +('14', '60', '19', '24616', '2220', '1'), +('14', '60', '13', '10650', '19135', '1'), +('14', '60', '13', '24609', '15429', '1'), +('14', '60', '13', '24629', '13134', '1'), +('14', '60', '13', '24637', '10793', '1'), +('14', '60', '14', '24609', '15429', '1'), +('14', '60', '14', '24629', '13134', '1'), +('14', '60', '14', '14759', '9737', '1'), +('14', '60', '14', '14745', '8222', '1'), +('14', '60', '11', '46178', '9656', '1'), +('14', '60', '11', '5763', '7275', '1'), +('14', '60', '11', '79631', '5897', '1'), +('14', '60', '11', '5805', '5300', '1'), +('14', '61', '22', '66397', '0', '3'), +('14', '61', '22', '61948', '0', '3'), +('14', '61', '22', '21805', '0', '3'), +('14', '61', '22', '21807', '0', '3'), +('14', '61', '1', '63170', '27119', '3'), +('14', '61', '1', '30552', '24074', '3'), +('14', '61', '1', '29861', '17847', '3'), +('14', '61', '1', '28944', '16424', '3'), +('14', '61', '2', '26763', '36610', '3'), +('14', '61', '2', '26605', '17666', '3'), +('14', '61', '2', '26762', '17529', '3'), +('14', '61', '2', '28909', '17331', '3'), +('14', '61', '3', '5772', '43733', '3'), +('14', '61', '3', '1157', '22421', '3'), +('14', '61', '3', '30553', '18166', '3'), +('14', '61', '3', '31328', '17504', '3'), +('14', '61', '5', '51229', '29167', '3'), +('14', '61', '5', '28911', '27370', '3'), +('14', '61', '5', '8364', '23618', '3'), +('14', '61', '5', '31234', '22509', '3'), +('14', '61', '8', '28964', '22508', '3'), +('14', '61', '8', '28992', '22325', '3'), +('14', '61', '8', '30505', '20253', '3'), +('14', '61', '8', '8359', '19760', '3'), +('14', '61', '6', '1200', '33463', '3'), +('14', '61', '6', '28920', '19498', '3'), +('14', '61', '6', '28902', '17426', '3'), +('14', '61', '6', '28919', '16783', '3'), +('14', '61', '17', '32933', '24520', '3'), +('14', '61', '17', '26776', '23708', '3'), +('14', '61', '17', '26604', '22259', '3'), +('14', '61', '17', '55296', '20474', '3'), +('14', '61', '7', '28924', '19565', '3'), +('14', '61', '7', '7868', '19114', '3'), +('14', '61', '7', '8288', '17509', '3'), +('14', '61', '7', '26555', '14683', '3'), +('14', '61', '9', '26781', '36464', '3'), +('14', '61', '9', '30552', '24074', '3'), +('14', '61', '9', '28891', '21453', '3'), +('14', '61', '9', '7868', '19114', '3'), +('14', '61', '15', '51242', '30182', '3'), +('14', '61', '15', '63170', '27119', '3'), +('14', '61', '15', '28993', '21640', '3'), +('14', '61', '15', '7870', '17878', '3'), +('14', '61', '20', '28916', '22552', '3'), +('14', '61', '20', '30534', '18712', '3'), +('14', '61', '20', '26549', '18083', '3'), +('14', '61', '20', '2510', '17378', '3'), +('14', '61', '12', '30534', '18712', '3'), +('14', '61', '12', '28967', '18255', '3'), +('14', '61', '12', '28949', '13990', '3'), +('14', '61', '12', '28972', '13988', '3'), +('14', '61', '18', '26755', '20709', '3'), +('14', '61', '18', '26777', '18526', '3'), +('14', '61', '18', '28932', '17355', '3'), +('14', '61', '18', '8289', '17328', '3'), +('14', '61', '19', '28148', '25789', '3'), +('14', '61', '19', '30570', '20615', '3'), +('14', '61', '19', '29645', '17760', '3'), +('14', '61', '19', '31245', '17695', '3'), +('14', '61', '13', '26778', '37062', '3'), +('14', '61', '13', '28917', '21054', '3'), +('14', '61', '13', '28981', '20471', '3'), +('14', '61', '13', '28980', '19471', '3'), +('14', '61', '14', '28915', '38963', '3'), +('14', '61', '14', '26778', '37062', '3'), +('14', '61', '14', '26780', '22439', '3'), +('14', '61', '14', '10219', '22256', '3'), +('14', '61', '11', '26778', '37062', '3'), +('14', '61', '11', '2698', '28503', '3'), +('14', '61', '11', '31321', '20320', '3'), +('14', '61', '11', '30562', '18587', '3'), +('14', '62', '22', '66397', '0', '3'), +('14', '62', '22', '61948', '0', '3'), +('14', '62', '22', '21805', '0', '3'), +('14', '62', '22', '21807', '0', '3'), +('14', '62', '1', '63170', '26621', '3'), +('14', '62', '1', '30552', '23776', '3'), +('14', '62', '1', '29861', '17853', '3'), +('14', '62', '1', '28944', '16426', '3'), +('14', '62', '2', '26763', '35863', '3'), +('14', '62', '2', '26605', '17668', '3'), +('14', '62', '2', '26762', '17532', '3'), +('14', '62', '2', '28909', '17333', '3'), +('14', '62', '3', '5772', '42838', '3'), +('14', '62', '3', '1157', '21673', '3'), +('14', '62', '3', '30553', '18168', '3'), +('14', '62', '3', '31233', '17349', '3'), +('14', '62', '5', '51229', '28669', '3'), +('14', '62', '5', '28911', '26872', '3'), +('14', '62', '5', '8364', '23622', '3'), +('14', '62', '5', '31234', '21759', '3'), +('14', '62', '8', '28964', '22511', '3'), +('14', '62', '8', '28992', '22325', '3'), +('14', '62', '8', '8359', '19763', '3'), +('14', '62', '8', '28918', '19752', '3'), +('14', '62', '6', '1200', '32465', '3'), +('14', '62', '6', '28920', '19502', '3'), +('14', '62', '6', '28902', '17426', '3'), +('14', '62', '6', '28919', '16784', '3'), +('14', '62', '17', '32933', '24021', '3'), +('14', '62', '17', '26776', '23714', '3'), +('14', '62', '17', '26604', '22265', '3'), +('14', '62', '17', '55296', '20479', '3'), +('14', '62', '7', '28924', '19568', '3'), +('14', '62', '7', '7868', '19116', '3'), +('14', '62', '7', '8288', '17509', '3'), +('14', '62', '7', '26555', '14683', '3'), +('14', '62', '9', '26781', '35717', '3'), +('14', '62', '9', '30552', '23776', '3'), +('14', '62', '9', '28891', '21153', '3'), +('14', '62', '9', '7868', '19116', '3'), +('14', '62', '15', '51242', '29433', '3'), +('14', '62', '15', '63170', '26621', '3'), +('14', '62', '15', '28993', '21642', '3'), +('14', '62', '15', '7870', '17880', '3'), +('14', '62', '20', '28916', '22553', '3'), +('14', '62', '20', '30534', '18715', '3'), +('14', '62', '20', '26549', '18088', '3'), +('14', '62', '20', '2510', '17378', '3'), +('14', '62', '12', '30534', '18715', '3'), +('14', '62', '12', '28967', '18255', '3'), +('14', '62', '12', '28949', '13992', '3'), +('14', '62', '12', '28972', '13991', '3'), +('14', '62', '18', '26755', '20409', '3'), +('14', '62', '18', '26777', '18528', '3'), +('14', '62', '18', '28932', '17358', '3'), +('14', '62', '18', '8289', '17330', '3'), +('14', '62', '19', '28148', '25492', '3'), +('14', '62', '19', '30570', '20617', '3'), +('14', '62', '19', '29645', '17764', '3'), +('14', '62', '19', '31245', '17698', '3'), +('14', '62', '13', '26778', '36468', '3'), +('14', '62', '13', '28917', '21054', '3'), +('14', '62', '13', '28981', '20474', '3'), +('14', '62', '13', '28980', '19474', '3'), +('14', '62', '14', '28915', '38216', '3'), +('14', '62', '14', '26778', '36468', '3'), +('14', '62', '14', '26780', '22442', '3'), +('14', '62', '14', '10219', '21506', '3'), +('14', '62', '11', '26778', '36468', '3'), +('14', '62', '11', '2698', '27753', '3'), +('14', '62', '11', '31321', '19570', '3'), +('14', '62', '11', '30562', '18589', '3'), +('14', '63', '22', '66397', '0', '3'), +('14', '63', '22', '61948', '0', '3'), +('14', '63', '22', '21805', '0', '3'), +('14', '63', '22', '21807', '0', '3'), +('14', '63', '1', '63170', '26123', '3'), +('14', '63', '1', '30552', '23478', '3'), +('14', '63', '1', '29861', '17858', '3'), +('14', '63', '1', '28944', '16428', '3'), +('14', '63', '2', '26763', '35117', '3'), +('14', '63', '2', '26605', '17671', '3'), +('14', '63', '2', '26762', '17535', '3'), +('14', '63', '2', '28909', '17335', '3'), +('14', '63', '3', '5772', '41944', '3'), +('14', '63', '3', '1157', '20926', '3'), +('14', '63', '3', '30553', '18171', '3'), +('14', '63', '3', '31233', '17351', '3'), +('14', '63', '5', '51229', '28171', '3'), +('14', '63', '5', '28911', '26375', '3'), +('14', '63', '5', '8364', '23625', '3'), +('14', '63', '5', '31234', '21009', '3'), +('14', '63', '8', '28964', '22515', '3'), +('14', '63', '8', '28992', '22326', '3'), +('14', '63', '8', '8359', '19766', '3'), +('14', '63', '8', '28918', '19752', '3'), +('14', '63', '6', '1200', '31467', '3'), +('14', '63', '6', '28920', '19506', '3'), +('14', '63', '6', '28902', '17427', '3'), +('14', '63', '6', '28919', '16784', '3'), +('14', '63', '17', '26776', '23719', '3'), +('14', '63', '17', '32933', '23523', '3'), +('14', '63', '17', '26604', '22270', '3'), +('14', '63', '17', '55296', '20483', '3'), +('14', '63', '7', '28924', '19572', '3'), +('14', '63', '7', '7868', '19118', '3'), +('14', '63', '7', '8288', '17509', '3'), +('14', '63', '7', '26555', '14684', '3'), +('14', '63', '9', '26781', '34971', '3'), +('14', '63', '9', '30552', '23478', '3'), +('14', '63', '9', '28891', '20853', '3'), +('14', '63', '9', '7868', '19118', '3'), +('14', '63', '15', '51242', '28685', '3'), +('14', '63', '15', '63170', '26123', '3'), +('14', '63', '15', '28993', '21644', '3'), +('14', '63', '15', '7870', '17882', '3'), +('14', '63', '20', '28916', '22555', '3'), +('14', '63', '20', '30534', '18717', '3'), +('14', '63', '20', '26549', '18092', '3'), +('14', '63', '20', '2510', '17378', '3'), +('14', '63', '12', '30534', '18717', '3'), +('14', '63', '12', '28967', '18255', '3'), +('14', '63', '12', '28949', '13995', '3'), +('14', '63', '12', '28972', '13994', '3'), +('14', '63', '18', '26755', '20109', '3'), +('14', '63', '18', '26777', '18530', '3'), +('14', '63', '18', '28932', '17360', '3'), +('14', '63', '18', '8289', '17332', '3'), +('14', '63', '19', '28148', '25195', '3'), +('14', '63', '19', '30570', '20618', '3'), +('14', '63', '19', '29645', '17767', '3'), +('14', '63', '19', '31245', '17702', '3'), +('14', '63', '13', '26778', '35875', '3'), +('14', '63', '13', '28917', '21054', '3'), +('14', '63', '13', '28981', '20477', '3'), +('14', '63', '13', '28980', '19477', '3'), +('14', '63', '14', '28915', '37469', '3'), +('14', '63', '14', '26778', '35875', '3'), +('14', '63', '14', '26780', '22446', '3'), +('14', '63', '14', '10219', '20756', '3'), +('14', '63', '11', '26778', '35875', '3'), +('14', '63', '11', '2698', '27003', '3'), +('14', '63', '11', '31321', '18820', '3'), +('14', '63', '11', '30562', '18592', '3'), +('14', '64', '22', '66397', '0', '3'), +('14', '64', '22', '61948', '0', '3'), +('14', '64', '22', '21805', '0', '3'), +('14', '64', '22', '21807', '0', '3'), +('14', '64', '1', '63170', '25625', '3'), +('14', '64', '1', '30552', '23180', '3'), +('14', '64', '1', '29861', '17864', '3'), +('14', '64', '1', '28944', '16430', '3'), +('14', '64', '2', '26763', '34370', '3'), +('14', '64', '2', '26605', '17674', '3'), +('14', '64', '2', '26762', '17538', '3'), +('14', '64', '2', '28909', '17337', '3'), +('14', '64', '3', '5772', '41049', '3'), +('14', '64', '3', '1157', '20178', '3'), +('14', '64', '3', '30553', '18174', '3'), +('14', '64', '3', '31233', '17354', '3'), +('14', '64', '5', '51229', '27673', '3'), +('14', '64', '5', '28911', '25877', '3'), +('14', '64', '5', '8364', '23628', '3'), +('14', '64', '5', '31234', '20259', '3'), +('14', '64', '8', '28964', '22518', '3'), +('14', '64', '8', '28992', '22326', '3'), +('14', '64', '8', '8359', '19768', '3'), +('14', '64', '8', '28918', '19752', '3'), +('14', '64', '6', '1200', '30469', '3'), +('14', '64', '6', '28920', '19510', '3'), +('14', '64', '6', '28902', '17427', '3'), +('14', '64', '6', '28919', '16785', '3'), +('14', '64', '17', '26776', '23725', '3'), +('14', '64', '17', '32933', '23024', '3'), +('14', '64', '17', '26604', '22276', '3'), +('14', '64', '17', '55296', '20488', '3'), +('14', '64', '7', '28924', '19575', '3'), +('14', '64', '7', '7868', '19120', '3'), +('14', '64', '7', '8288', '17509', '3'), +('14', '64', '7', '26555', '14684', '3'), +('14', '64', '9', '26781', '34224', '3'), +('14', '64', '9', '30552', '23180', '3'), +('14', '64', '9', '28891', '20553', '3'), +('14', '64', '9', '7868', '19120', '3'), +('14', '64', '15', '51242', '27936', '3'), +('14', '64', '15', '63170', '25625', '3'), +('14', '64', '15', '28993', '21647', '3'), +('14', '64', '15', '7870', '17884', '3'), +('14', '64', '20', '28916', '22556', '3'), +('14', '64', '20', '30534', '18720', '3'), +('14', '64', '20', '26549', '18097', '3'), +('14', '64', '20', '2510', '17379', '3'), +('14', '64', '12', '30534', '18720', '3'), +('14', '64', '12', '28967', '18255', '3'), +('14', '64', '12', '28972', '13997', '3'), +('14', '64', '12', '28949', '13997', '3'), +('14', '64', '18', '26755', '19809', '3'), +('14', '64', '18', '26777', '18532', '3'), +('14', '64', '18', '28932', '17363', '3'), +('14', '64', '18', '8289', '17334', '3'), +('14', '64', '19', '28148', '24898', '3'), +('14', '64', '19', '30570', '20620', '3'), +('14', '64', '19', '29645', '17771', '3'), +('14', '64', '19', '31245', '17705', '3'), +('14', '64', '13', '26778', '35282', '3'), +('14', '64', '13', '28917', '21054', '3'), +('14', '64', '13', '28981', '20480', '3'), +('14', '64', '13', '28980', '19480', '3'), +('14', '64', '14', '28915', '36722', '3'), +('14', '64', '14', '26778', '35282', '3'), +('14', '64', '14', '26780', '22449', '3'), +('14', '64', '14', '28981', '20480', '3'), +('14', '64', '11', '26778', '35282', '3'), +('14', '64', '11', '2698', '26253', '3'), +('14', '64', '11', '30562', '18594', '3'), +('14', '64', '11', '31321', '18070', '3'), +('14', '65', '22', '66397', '0', '7'), +('14', '65', '22', '62787', '0', '7'), +('14', '65', '22', '61948', '0', '7'), +('14', '65', '22', '21805', '0', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '65', '1', '68949', '63426', '7'), +('14', '65', '1', '69166', '54375', '7'), +('14', '65', '1', '52121', '49183', '7'), +('14', '65', '1', '7130', '48520', '7'), +('14', '65', '2', '16158', '44647', '7'), +('14', '65', '2', '46141', '40614', '7'), +('14', '65', '2', '67734', '36758', '7'), +('14', '65', '2', '15929', '33974', '7'), +('14', '65', '3', '69132', '79541', '7'), +('14', '65', '3', '69157', '45907', '7'), +('14', '65', '3', '68783', '44922', '7'), +('14', '65', '3', '69074', '41934', '7'), +('14', '65', '5', '7769', '58174', '7'), +('14', '65', '5', '67625', '49514', '7'), +('14', '65', '5', '69135', '46618', '7'), +('14', '65', '5', '16158', '44647', '7'), +('14', '65', '8', '69164', '47571', '7'), +('14', '65', '8', '69064', '43556', '7'), +('14', '65', '8', '69065', '42683', '7'), +('14', '65', '8', '69072', '42505', '7'), +('14', '65', '6', '69066', '74189', '7'), +('14', '65', '6', '68841', '60247', '7'), +('14', '65', '6', '69163', '47171', '7'), +('14', '65', '6', '69073', '41738', '7'), +('14', '65', '17', '68782', '59970', '7'), +('14', '65', '17', '69153', '48446', '7'), +('14', '65', '17', '14747', '42678', '7'), +('14', '65', '17', '47656', '35046', '7'), +('14', '65', '7', '68926', '62250', '7'), +('14', '65', '7', '69176', '45353', '7'), +('14', '65', '7', '69082', '40691', '7'), +('14', '65', '7', '11578', '40495', '7'), +('14', '65', '9', '69100', '68662', '7'), +('14', '65', '9', '69129', '45841', '7'), +('14', '65', '9', '28665', '43196', '7'), +('14', '65', '9', '68929', '34672', '7'), +('14', '65', '15', '69070', '74540', '7'), +('14', '65', '15', '26993', '59012', '7'), +('14', '65', '15', '68664', '50571', '7'), +('14', '65', '15', '52121', '49183', '7'), +('14', '65', '20', '67625', '49514', '7'), +('14', '65', '20', '69134', '46816', '7'), +('14', '65', '20', '68821', '46250', '7'), +('14', '65', '20', '69386', '45986', '7'), +('14', '65', '12', '26996', '52669', '7'), +('14', '65', '12', '69255', '47628', '7'), +('14', '65', '12', '69086', '47413', '7'), +('14', '65', '12', '68927', '36612', '7'), +('14', '65', '18', '28649', '64075', '7'), +('14', '65', '18', '69149', '54879', '7'), +('14', '65', '18', '68989', '44815', '7'), +('14', '65', '18', '68751', '36340', '7'), +('14', '65', '19', '69251', '47119', '7'), +('14', '65', '19', '20425', '41737', '7'), +('14', '65', '19', '69078', '40016', '7'), +('14', '65', '19', '68928', '36600', '7'), +('14', '65', '13', '69098', '72382', '7'), +('14', '65', '13', '69159', '46148', '7'), +('14', '65', '13', '69125', '43618', '7'), +('14', '65', '13', '69051', '42322', '7'), +('14', '65', '14', '69098', '72382', '7'), +('14', '65', '14', '69155', '46388', '7'), +('14', '65', '14', '69159', '46148', '7'), +('14', '65', '14', '69048', '42934', '7'), +('14', '65', '11', '67606', '45155', '7'), +('14', '65', '11', '68952', '42251', '7'), +('14', '65', '11', '68848', '40481', '7'), +('14', '65', '11', '69055', '38071', '7'), +('14', '65', '22', '66397', '0', '6'), +('14', '65', '22', '62787', '0', '6'), +('14', '65', '22', '61948', '0', '6'), +('14', '65', '22', '21805', '0', '6'), +('14', '65', '1', '7130', '48520', '6'), +('14', '65', '1', '10242', '47788', '6'), +('14', '65', '1', '16257', '42072', '6'), +('14', '65', '1', '26980', '39271', '6'), +('14', '65', '2', '16158', '44647', '6'), +('14', '65', '2', '15929', '33974', '6'), +('14', '65', '2', '26763', '33624', '6'), +('14', '65', '2', '68195', '30055', '6'), +('14', '65', '3', '5772', '40154', '6'), +('14', '65', '3', '9435', '32093', '6'), +('14', '65', '3', '9444', '23293', '6'), +('14', '65', '3', '62463', '23212', '6'), +('14', '65', '5', '7769', '58174', '6'), +('14', '65', '5', '16158', '44647', '6'), +('14', '65', '5', '8774', '31042', '6'), +('14', '65', '5', '7768', '28833', '6'), +('14', '65', '8', '15805', '36621', '6'), +('14', '65', '8', '15804', '36403', '6'), +('14', '65', '8', '15847', '31974', '6'), +('14', '65', '8', '21998', '30370', '6'), +('14', '65', '6', '28661', '36220', '6'), +('14', '65', '6', '1200', '29470', '6'), +('14', '65', '6', '13654', '28702', '6'), +('14', '65', '6', '13638', '27385', '6'), +('14', '65', '17', '14747', '42678', '6'), +('14', '65', '17', '47656', '35046', '6'), +('14', '65', '17', '69403', '34936', '6'), +('14', '65', '17', '68075', '26235', '6'), +('14', '65', '7', '11578', '40495', '6'), +('14', '65', '7', '11323', '35842', '6'), +('14', '65', '7', '21994', '26770', '6'), +('14', '65', '7', '11324', '24085', '6'), +('14', '65', '9', '28665', '43196', '6'), +('14', '65', '9', '26781', '33477', '6'), +('14', '65', '9', '28668', '32767', '6'), +('14', '65', '9', '68198', '29872', '6'), +('14', '65', '15', '26993', '59012', '6'), +('14', '65', '15', '32109', '36160', '6'), +('14', '65', '15', '14818', '32668', '6'), +('14', '65', '15', '26990', '31664', '6'), +('14', '65', '20', '15871', '45515', '6'), +('14', '65', '20', '16158', '44647', '6'), +('14', '65', '20', '15929', '33974', '6'), +('14', '65', '20', '15927', '32032', '6'), +('14', '65', '12', '26996', '52669', '6'), +('14', '65', '12', '13614', '24807', '6'), +('14', '65', '12', '11878', '19961', '6'), +('14', '65', '12', '30534', '18723', '6'), +('14', '65', '18', '28649', '64075', '6'), +('14', '65', '18', '16931', '26289', '6'), +('14', '65', '18', '26755', '19509', '6'), +('14', '65', '18', '26777', '18534', '6'), +('14', '65', '19', '20425', '41737', '6'), +('14', '65', '19', '68196', '32480', '6'), +('14', '65', '19', '28148', '24601', '6'), +('14', '65', '19', '62445', '23151', '6'), +('14', '65', '13', '26778', '34688', '6'), +('14', '65', '13', '22959', '30021', '6'), +('14', '65', '13', '21876', '29826', '6'), +('14', '65', '13', '26788', '26905', '6'), +('14', '65', '14', '28915', '35975', '6'), +('14', '65', '14', '26778', '34688', '6'), +('14', '65', '14', '27274', '32409', '6'), +('14', '65', '14', '28656', '29780', '6'), +('14', '65', '11', '68116', '37560', '6'), +('14', '65', '11', '20496', '36412', '6'), +('14', '65', '11', '26778', '34688', '6'), +('14', '65', '11', '54039', '33099', '6'), +('14', '65', '22', '66397', '0', '5'), +('14', '65', '22', '62787', '0', '5'), +('14', '65', '22', '61948', '0', '5'), +('14', '65', '22', '21805', '0', '5'), +('14', '65', '1', '7130', '48520', '5'), +('14', '65', '1', '10242', '47788', '5'), +('14', '65', '1', '16257', '42072', '5'), +('14', '65', '1', '26980', '39271', '5'), +('14', '65', '2', '16158', '44647', '5'), +('14', '65', '2', '15929', '33974', '5'), +('14', '65', '2', '26763', '33624', '5'), +('14', '65', '2', '68195', '30055', '5'), +('14', '65', '3', '5772', '40154', '5'), +('14', '65', '3', '9435', '32093', '5'), +('14', '65', '3', '9444', '23293', '5'), +('14', '65', '3', '9468', '21173', '5'), +('14', '65', '5', '7769', '58174', '5'), +('14', '65', '5', '16158', '44647', '5'), +('14', '65', '5', '8774', '31042', '5'), +('14', '65', '5', '7768', '28833', '5'), +('14', '65', '8', '15805', '36621', '5'), +('14', '65', '8', '15804', '36403', '5'), +('14', '65', '8', '15847', '31974', '5'), +('14', '65', '8', '21998', '30370', '5'), +('14', '65', '6', '28661', '36220', '5'), +('14', '65', '6', '1200', '29470', '5'), +('14', '65', '6', '13654', '28702', '5'), +('14', '65', '6', '13638', '27385', '5'), +('14', '65', '17', '14747', '42678', '5'), +('14', '65', '17', '47656', '35046', '5'), +('14', '65', '17', '26776', '23731', '5'), +('14', '65', '17', '32933', '22526', '5'), +('14', '65', '7', '11578', '40495', '5'), +('14', '65', '7', '11323', '35842', '5'), +('14', '65', '7', '21994', '26770', '5'), +('14', '65', '7', '11324', '24085', '5'), +('14', '65', '9', '28665', '43196', '5'), +('14', '65', '9', '26781', '33477', '5'), +('14', '65', '9', '28668', '32767', '5'), +('14', '65', '9', '68198', '29872', '5'), +('14', '65', '15', '26993', '59012', '5'), +('14', '65', '15', '32109', '36160', '5'), +('14', '65', '15', '14818', '32668', '5'), +('14', '65', '15', '26990', '31664', '5'), +('14', '65', '20', '15871', '45515', '5'), +('14', '65', '20', '16158', '44647', '5'), +('14', '65', '20', '15929', '33974', '5'), +('14', '65', '20', '15927', '32032', '5'), +('14', '65', '12', '26996', '52669', '5'), +('14', '65', '12', '13614', '24807', '5'), +('14', '65', '12', '11878', '19961', '5'), +('14', '65', '12', '30534', '18723', '5'), +('14', '65', '18', '28649', '64075', '5'), +('14', '65', '18', '16931', '26289', '5'), +('14', '65', '18', '26755', '19509', '5'), +('14', '65', '18', '26777', '18534', '5'), +('14', '65', '19', '20425', '41737', '5'), +('14', '65', '19', '68196', '32480', '5'), +('14', '65', '19', '28148', '24601', '5'), +('14', '65', '19', '20424', '21757', '5'), +('14', '65', '13', '26778', '34688', '5'), +('14', '65', '13', '22959', '30021', '5'), +('14', '65', '13', '21876', '29826', '5'), +('14', '65', '13', '26788', '26905', '5'), +('14', '65', '14', '28915', '35975', '5'), +('14', '65', '14', '26778', '34688', '5'), +('14', '65', '14', '27274', '32409', '5'), +('14', '65', '14', '28656', '29780', '5'), +('14', '65', '11', '20496', '36412', '5'), +('14', '65', '11', '26778', '34688', '5'), +('14', '65', '11', '54039', '33099', '5'), +('14', '65', '11', '9574', '31607', '5'), +('14', '65', '22', '66397', '0', '4'), +('14', '65', '22', '62787', '0', '4'), +('14', '65', '22', '61948', '0', '4'), +('14', '65', '22', '21805', '0', '4'), +('14', '65', '1', '7130', '48520', '4'), +('14', '65', '1', '10242', '47788', '4'), +('14', '65', '1', '16257', '42072', '4'), +('14', '65', '1', '26980', '39271', '4'), +('14', '65', '2', '16158', '44647', '4'), +('14', '65', '2', '15929', '33974', '4'), +('14', '65', '2', '26763', '33624', '4'), +('14', '65', '2', '68195', '30055', '4'), +('14', '65', '3', '5772', '40154', '4'), +('14', '65', '3', '9435', '32093', '4'), +('14', '65', '3', '9444', '23293', '4'), +('14', '65', '3', '9468', '21173', '4'), +('14', '65', '5', '7769', '58174', '4'), +('14', '65', '5', '16158', '44647', '4'), +('14', '65', '5', '8774', '31042', '4'), +('14', '65', '5', '7768', '28833', '4'), +('14', '65', '8', '15805', '36621', '4'), +('14', '65', '8', '15804', '36403', '4'), +('14', '65', '8', '15847', '31974', '4'), +('14', '65', '8', '21998', '30370', '4'), +('14', '65', '6', '28661', '36220', '4'), +('14', '65', '6', '1200', '29470', '4'), +('14', '65', '6', '13654', '28702', '4'), +('14', '65', '6', '13638', '27385', '4'), +('14', '65', '17', '14747', '42678', '4'), +('14', '65', '17', '47656', '35046', '4'), +('14', '65', '17', '26776', '23731', '4'), +('14', '65', '17', '32933', '22526', '4'), +('14', '65', '7', '11578', '40495', '4'), +('14', '65', '7', '11323', '35842', '4'), +('14', '65', '7', '21994', '26770', '4'), +('14', '65', '7', '11324', '24085', '4'), +('14', '65', '9', '28665', '43196', '4'), +('14', '65', '9', '26781', '33477', '4'), +('14', '65', '9', '28668', '32767', '4'), +('14', '65', '9', '68198', '29872', '4'), +('14', '65', '15', '26993', '59012', '4'), +('14', '65', '15', '32109', '36160', '4'), +('14', '65', '15', '14818', '32668', '4'), +('14', '65', '15', '26990', '31664', '4'), +('14', '65', '20', '15871', '45515', '4'), +('14', '65', '20', '16158', '44647', '4'), +('14', '65', '20', '15929', '33974', '4'), +('14', '65', '20', '15927', '32032', '4'), +('14', '65', '12', '26996', '52669', '4'), +('14', '65', '12', '13614', '24807', '4'), +('14', '65', '12', '11878', '19961', '4'), +('14', '65', '12', '30534', '18723', '4'), +('14', '65', '18', '28649', '64075', '4'), +('14', '65', '18', '16931', '26289', '4'), +('14', '65', '18', '26755', '19509', '4'), +('14', '65', '18', '26777', '18534', '4'), +('14', '65', '19', '20425', '41737', '4'), +('14', '65', '19', '68196', '32480', '4'), +('14', '65', '19', '28148', '24601', '4'), +('14', '65', '19', '20424', '21757', '4'), +('14', '65', '13', '26778', '34688', '4'), +('14', '65', '13', '22959', '30021', '4'), +('14', '65', '13', '21876', '29826', '4'), +('14', '65', '13', '26788', '26905', '4'), +('14', '65', '14', '28915', '35975', '4'), +('14', '65', '14', '26778', '34688', '4'), +('14', '65', '14', '27274', '32409', '4'), +('14', '65', '14', '28656', '29780', '4'), +('14', '65', '11', '20496', '36412', '4'), +('14', '65', '11', '26778', '34688', '4'), +('14', '65', '11', '9574', '31607', '4'), +('14', '65', '11', '20896', '30762', '4'), +('14', '66', '22', '66397', '0', '7'), +('14', '66', '22', '62787', '0', '7'), +('14', '66', '22', '61948', '0', '7'), +('14', '66', '22', '21805', '0', '7'), +('14', '66', '1', '68949', '62431', '7'), +('14', '66', '1', '69166', '54079', '7'), +('14', '66', '1', '52121', '48686', '7'), +('14', '66', '1', '7130', '48025', '7'), +('14', '66', '2', '16158', '43752', '7'), +('14', '66', '2', '46141', '40619', '7'), +('14', '66', '2', '67734', '36764', '7'), +('14', '66', '2', '15929', '33227', '7'), +('14', '66', '3', '69132', '78296', '7'), +('14', '66', '3', '69157', '45912', '7'), +('14', '66', '3', '68783', '44426', '7'), +('14', '66', '3', '69074', '41938', '7'), +('14', '66', '5', '7769', '57178', '7'), +('14', '66', '5', '67625', '49520', '7'), +('14', '66', '5', '69135', '46623', '7'), +('14', '66', '5', '16158', '43752', '7'), +('14', '66', '8', '69164', '47577', '7'), +('14', '66', '8', '69064', '43562', '7'), +('14', '66', '8', '69065', '42685', '7'), +('14', '66', '8', '69072', '42510', '7'), +('14', '66', '6', '69066', '72942', '7'), +('14', '66', '6', '68841', '59251', '7'), +('14', '66', '6', '69163', '47177', '7'), +('14', '66', '6', '69073', '41743', '7'), +('14', '66', '17', '68782', '58975', '7'), +('14', '66', '17', '69153', '48453', '7'), +('14', '66', '17', '14747', '41934', '7'), +('14', '66', '17', '47656', '35052', '7'), +('14', '66', '7', '68926', '61105', '7'), +('14', '66', '7', '69176', '45358', '7'), +('14', '66', '7', '69082', '40695', '7'), +('14', '66', '7', '11578', '39750', '7'), +('14', '66', '9', '69100', '67517', '7'), +('14', '66', '9', '69129', '45844', '7'), +('14', '66', '9', '28665', '42699', '7'), +('14', '66', '9', '68929', '34677', '7'), +('14', '66', '15', '69070', '73294', '7'), +('14', '66', '15', '26993', '57762', '7'), +('14', '66', '15', '68664', '49575', '7'), +('14', '66', '15', '52121', '48686', '7'), +('14', '66', '20', '67625', '49520', '7'), +('14', '66', '20', '69134', '46822', '7'), +('14', '66', '20', '68821', '45253', '7'), +('14', '66', '20', '69386', '44989', '7'), +('14', '66', '12', '26996', '51674', '7'), +('14', '66', '12', '69255', '47632', '7'), +('14', '66', '12', '69086', '47118', '7'), +('14', '66', '12', '68927', '36616', '7'), +('14', '66', '18', '28649', '62931', '7'), +('14', '66', '18', '69149', '54634', '7'), +('14', '66', '18', '68989', '44520', '7'), +('14', '66', '18', '68751', '36345', '7'), +('14', '66', '19', '69251', '47125', '7'), +('14', '66', '19', '20425', '40841', '7'), +('14', '66', '19', '69078', '40020', '7'), +('14', '66', '19', '68928', '36605', '7'), +('14', '66', '13', '69098', '70889', '7'), +('14', '66', '13', '69159', '46155', '7'), +('14', '66', '13', '69125', '43624', '7'), +('14', '66', '13', '69051', '42328', '7'), +('14', '66', '14', '69098', '70889', '7'), +('14', '66', '14', '69155', '46388', '7'), +('14', '66', '14', '69159', '46155', '7'), +('14', '66', '14', '69048', '42938', '7'), +('14', '66', '11', '67606', '45160', '7'), +('14', '66', '11', '68952', '42255', '7'), +('14', '66', '11', '68848', '40484', '7'), +('14', '66', '11', '69055', '38076', '7'), +('14', '67', '22', '66397', '0', '7'), +('14', '67', '22', '62787', '0', '7'), +('14', '67', '22', '61948', '0', '7'), +('14', '67', '22', '21805', '0', '7'), +('14', '67', '1', '68949', '61437', '7'), +('14', '67', '1', '69166', '53783', '7'), +('14', '67', '1', '52121', '48190', '7'), +('14', '67', '1', '7130', '47531', '7'), +('14', '67', '2', '16158', '42856', '7'), +('14', '67', '2', '46141', '40623', '7'), +('14', '67', '2', '67734', '36769', '7'), +('14', '67', '2', '15929', '32479', '7'), +('14', '67', '3', '69132', '77051', '7'), +('14', '67', '3', '69157', '45916', '7'), +('14', '67', '3', '68783', '43930', '7'), +('14', '67', '3', '69074', '41941', '7'), +('14', '67', '5', '7769', '56182', '7'), +('14', '67', '5', '67625', '49525', '7'), +('14', '67', '5', '69135', '46628', '7'), +('14', '67', '5', '16158', '42856', '7'), +('14', '67', '8', '69164', '47582', '7'), +('14', '67', '8', '69064', '43567', '7'), +('14', '67', '8', '69065', '42688', '7'), +('14', '67', '8', '69072', '42514', '7'), +('14', '67', '6', '69066', '71696', '7'), +('14', '67', '6', '68841', '58255', '7'), +('14', '67', '6', '69163', '47182', '7'), +('14', '67', '6', '69073', '41748', '7'), +('14', '67', '17', '68782', '57981', '7'), +('14', '67', '17', '69153', '48460', '7'), +('14', '67', '17', '14747', '41189', '7'), +('14', '67', '17', '47656', '35059', '7'), +('14', '67', '7', '68926', '59960', '7'), +('14', '67', '7', '69176', '45362', '7'), +('14', '67', '7', '69082', '40698', '7'), +('14', '67', '7', '11578', '39004', '7'), +('14', '67', '9', '69100', '66373', '7'), +('14', '67', '9', '69129', '45848', '7'), +('14', '67', '9', '28665', '42203', '7'), +('14', '67', '9', '68929', '34681', '7'), +('14', '67', '15', '69070', '72049', '7'), +('14', '67', '15', '26993', '56512', '7'), +('14', '67', '15', '68664', '48578', '7'), +('14', '67', '15', '52121', '48190', '7'), +('14', '67', '20', '67625', '49525', '7'), +('14', '67', '20', '69134', '46827', '7'), +('14', '67', '20', '68821', '44256', '7'), +('14', '67', '20', '69386', '43993', '7'), +('14', '67', '12', '26996', '50680', '7'), +('14', '67', '12', '69255', '47636', '7'), +('14', '67', '12', '69086', '46824', '7'), +('14', '67', '12', '68927', '36620', '7'), +('14', '67', '18', '28649', '61786', '7'), +('14', '67', '18', '69149', '54390', '7'), +('14', '67', '18', '68989', '44225', '7'), +('14', '67', '18', '68751', '36350', '7'), +('14', '67', '19', '69251', '47130', '7'), +('14', '67', '19', '69078', '40025', '7'), +('14', '67', '19', '20425', '39945', '7'), +('14', '67', '19', '68928', '36609', '7'), +('14', '67', '13', '69098', '69395', '7'), +('14', '67', '13', '69159', '46162', '7'), +('14', '67', '13', '69125', '43629', '7'), +('14', '67', '13', '69051', '42333', '7'), +('14', '67', '14', '69098', '69395', '7'), +('14', '67', '14', '69155', '46389', '7'), +('14', '67', '14', '69159', '46162', '7'), +('14', '67', '14', '69048', '42941', '7'), +('14', '67', '11', '67606', '45164', '7'), +('14', '67', '11', '68952', '42260', '7'), +('14', '67', '11', '68848', '40488', '7'), +('14', '67', '11', '69055', '38082', '7'), +('14', '68', '22', '66397', '0', '7'), +('14', '68', '22', '62787', '0', '7'), +('14', '68', '22', '61948', '0', '7'), +('14', '68', '22', '21805', '0', '7'), +('14', '68', '1', '68949', '60442', '7'), +('14', '68', '1', '69166', '53487', '7'), +('14', '68', '1', '52121', '47693', '7'), +('14', '68', '1', '7130', '47036', '7'), +('14', '68', '2', '16158', '41961', '7'), +('14', '68', '2', '46141', '40628', '7'), +('14', '68', '2', '67734', '36775', '7'), +('14', '68', '2', '15929', '31732', '7'), +('14', '68', '3', '69132', '75806', '7'), +('14', '68', '3', '69157', '45921', '7'), +('14', '68', '3', '68783', '43434', '7'), +('14', '68', '3', '69074', '41945', '7'), +('14', '68', '5', '7769', '55186', '7'), +('14', '68', '5', '67625', '49530', '7'), +('14', '68', '5', '69135', '46632', '7'), +('14', '68', '5', '69097', '42736', '7'), +('14', '68', '8', '69164', '47588', '7'), +('14', '68', '8', '69064', '43572', '7'), +('14', '68', '8', '69065', '42691', '7'), +('14', '68', '8', '69072', '42519', '7'), +('14', '68', '6', '69066', '70449', '7'), +('14', '68', '6', '68841', '57260', '7'), +('14', '68', '6', '69163', '47188', '7'), +('14', '68', '6', '69073', '41753', '7'), +('14', '68', '17', '68782', '56986', '7'), +('14', '68', '17', '69153', '48466', '7'), +('14', '68', '17', '14747', '40445', '7'), +('14', '68', '17', '47656', '35066', '7'), +('14', '68', '7', '68926', '58816', '7'), +('14', '68', '7', '69176', '45367', '7'), +('14', '68', '7', '69082', '40702', '7'), +('14', '68', '7', '11578', '38259', '7'), +('14', '68', '9', '69100', '65228', '7'), +('14', '68', '9', '69129', '45851', '7'), +('14', '68', '9', '28665', '41707', '7'), +('14', '68', '9', '68929', '34685', '7'), +('14', '68', '15', '69070', '70803', '7'), +('14', '68', '15', '26993', '55262', '7'), +('14', '68', '15', '52121', '47693', '7'), +('14', '68', '15', '68664', '47581', '7'), +('14', '68', '20', '67625', '49530', '7'), +('14', '68', '20', '69134', '46833', '7'), +('14', '68', '20', '68821', '43259', '7'), +('14', '68', '20', '69386', '42996', '7'), +('14', '68', '12', '26996', '49685', '7'), +('14', '68', '12', '69255', '47640', '7'), +('14', '68', '12', '69086', '46529', '7'), +('14', '68', '12', '68927', '36624', '7'), +('14', '68', '18', '28649', '60642', '7'), +('14', '68', '18', '69149', '54146', '7'), +('14', '68', '18', '68989', '43929', '7'), +('14', '68', '18', '68751', '36355', '7'), +('14', '68', '19', '69251', '47136', '7'), +('14', '68', '19', '69078', '40029', '7'), +('14', '68', '19', '20425', '39050', '7'), +('14', '68', '19', '68928', '36614', '7'), +('14', '68', '13', '69098', '67902', '7'), +('14', '68', '13', '69159', '46168', '7'), +('14', '68', '13', '69125', '43635', '7'), +('14', '68', '13', '69051', '42339', '7'), +('14', '68', '14', '69098', '67902', '7'), +('14', '68', '14', '69155', '46389', '7'), +('14', '68', '14', '69159', '46168', '7'), +('14', '68', '14', '69048', '42945', '7'), +('14', '68', '11', '67606', '45169', '7'), +('14', '68', '11', '68952', '42264', '7'), +('14', '68', '11', '68848', '40491', '7'), +('14', '68', '11', '69055', '38087', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '69', '22', '66397', '0', '7'), +('14', '69', '22', '62787', '0', '7'), +('14', '69', '22', '61948', '0', '7'), +('14', '69', '22', '21805', '0', '7'), +('14', '69', '1', '68949', '59448', '7'), +('14', '69', '1', '69166', '53191', '7'), +('14', '69', '1', '52121', '47197', '7'), +('14', '69', '1', '7130', '46542', '7'), +('14', '69', '2', '16158', '41065', '7'), +('14', '69', '2', '46141', '40633', '7'), +('14', '69', '2', '67734', '36780', '7'), +('14', '69', '2', '15929', '30985', '7'), +('14', '69', '3', '69132', '74561', '7'), +('14', '69', '3', '69157', '45925', '7'), +('14', '69', '3', '68783', '42938', '7'), +('14', '69', '3', '69074', '41948', '7'), +('14', '69', '5', '7769', '54190', '7'), +('14', '69', '5', '67625', '49536', '7'), +('14', '69', '5', '69135', '46637', '7'), +('14', '69', '5', '69097', '42741', '7'), +('14', '69', '8', '69164', '47593', '7'), +('14', '69', '8', '69064', '43578', '7'), +('14', '69', '8', '69065', '42693', '7'), +('14', '69', '8', '69072', '42523', '7'), +('14', '69', '6', '69066', '69203', '7'), +('14', '69', '6', '68841', '56264', '7'), +('14', '69', '6', '69163', '47193', '7'), +('14', '69', '6', '69073', '41758', '7'), +('14', '69', '17', '68782', '55992', '7'), +('14', '69', '17', '69153', '48473', '7'), +('14', '69', '17', '14747', '39700', '7'), +('14', '69', '17', '47656', '35072', '7'), +('14', '69', '7', '68926', '57671', '7'), +('14', '69', '7', '69176', '45371', '7'), +('14', '69', '7', '69082', '40705', '7'), +('14', '69', '7', '11578', '37513', '7'), +('14', '69', '9', '69100', '64083', '7'), +('14', '69', '9', '69129', '45855', '7'), +('14', '69', '9', '28665', '41210', '7'), +('14', '69', '9', '68929', '34689', '7'), +('14', '69', '15', '69070', '69557', '7'), +('14', '69', '15', '26993', '54012', '7'), +('14', '69', '15', '52121', '47197', '7'), +('14', '69', '15', '68664', '46585', '7'), +('14', '69', '20', '67625', '49536', '7'), +('14', '69', '20', '69134', '46838', '7'), +('14', '69', '20', '68821', '42262', '7'), +('14', '69', '20', '69386', '42000', '7'), +('14', '69', '12', '26996', '48691', '7'), +('14', '69', '12', '69255', '47644', '7'), +('14', '69', '12', '69086', '46235', '7'), +('14', '69', '12', '68927', '36628', '7'), +('14', '69', '18', '28649', '59498', '7'), +('14', '69', '18', '69149', '53901', '7'), +('14', '69', '18', '68989', '43634', '7'), +('14', '69', '18', '68751', '36360', '7'), +('14', '69', '19', '69251', '47141', '7'), +('14', '69', '19', '69078', '40034', '7'), +('14', '69', '19', '20425', '38154', '7'), +('14', '69', '19', '68928', '36618', '7'), +('14', '69', '13', '69098', '66409', '7'), +('14', '69', '13', '69159', '46175', '7'), +('14', '69', '13', '69125', '43640', '7'), +('14', '69', '13', '69051', '42344', '7'), +('14', '69', '14', '69098', '66409', '7'), +('14', '69', '14', '69155', '46390', '7'), +('14', '69', '14', '69159', '46175', '7'), +('14', '69', '14', '69048', '42948', '7'), +('14', '69', '11', '67606', '45173', '7'), +('14', '69', '11', '68952', '42268', '7'), +('14', '69', '11', '68848', '40494', '7'), +('14', '69', '11', '69055', '38093', '7'), +('14', '70', '22', '21805', '0', '11'), +('14', '70', '22', '61948', '0', '11'), +('14', '70', '22', '21807', '0', '11'), +('14', '70', '22', '12425', '0', '11'), +('14', '70', '1', '39353', '64290', '11'), +('14', '70', '1', '83662', '62617', '11'), +('14', '70', '1', '39329', '60062', '11'), +('14', '70', '1', '39271', '59408', '11'), +('14', '70', '2', '39358', '64393', '11'), +('14', '70', '2', '39285', '58718', '11'), +('14', '70', '2', '83563', '58216', '11'), +('14', '70', '2', '70944', '52668', '11'), +('14', '70', '3', '69132', '73316', '11'), +('14', '70', '3', '39368', '71086', '11'), +('14', '70', '3', '83658', '61785', '11'), +('14', '70', '3', '39312', '61079', '11'), +('14', '70', '5', '70705', '76109', '11'), +('14', '70', '5', '51701', '68399', '11'), +('14', '70', '5', '39340', '64643', '11'), +('14', '70', '5', '39328', '60628', '11'), +('14', '70', '8', '39352', '62561', '11'), +('14', '70', '8', '83659', '62307', '11'), +('14', '70', '8', '39330', '61080', '11'), +('14', '70', '8', '39299', '58925', '11'), +('14', '70', '6', '83660', '100563', '11'), +('14', '70', '6', '47280', '83583', '11'), +('14', '70', '6', '47229', '72292', '11'), +('14', '70', '6', '69066', '67956', '11'), +('14', '70', '17', '83606', '64655', '11'), +('14', '70', '17', '70949', '59317', '11'), +('14', '70', '17', '68782', '54997', '11'), +('14', '70', '17', '70714', '48544', '11'), +('14', '70', '7', '83567', '57866', '11'), +('14', '70', '7', '68926', '56526', '11'), +('14', '70', '7', '70945', '52201', '11'), +('14', '70', '7', '83543', '50297', '11'), +('14', '70', '9', '39336', '64988', '11'), +('14', '70', '9', '69100', '62939', '11'), +('14', '70', '9', '51709', '62759', '11'), +('14', '70', '9', '83655', '62591', '11'), +('14', '70', '15', '39259', '71440', '11'), +('14', '70', '15', '39376', '69935', '11'), +('14', '70', '15', '69070', '68312', '11'), +('14', '70', '15', '83595', '64553', '11'), +('14', '70', '20', '39350', '64605', '11'), +('14', '70', '20', '39322', '61056', '11'), +('14', '70', '20', '83650', '59703', '11'), +('14', '70', '20', '39253', '59499', '11'), +('14', '70', '12', '83571', '57761', '11'), +('14', '70', '12', '83553', '56192', '11'), +('14', '70', '12', '70947', '52518', '11'), +('14', '70', '12', '47215', '47948', '11'), +('14', '70', '18', '83610', '63443', '11'), +('14', '70', '18', '28649', '58353', '11'), +('14', '70', '18', '70950', '55162', '11'), +('14', '70', '18', '69149', '53657', '11'), +('14', '70', '19', '83575', '58560', '11'), +('14', '70', '19', '83497', '54686', '11'), +('14', '70', '19', '39223', '53296', '11'), +('14', '70', '19', '70948', '51568', '11'), +('14', '70', '13', '39295', '66640', '11'), +('14', '70', '13', '69098', '64915', '11'), +('14', '70', '13', '39351', '63701', '11'), +('14', '70', '13', '39324', '60599', '11'), +('14', '70', '14', '39372', '70963', '11'), +('14', '70', '14', '83641', '68326', '11'), +('14', '70', '14', '39295', '66640', '11'), +('14', '70', '14', '69098', '64915', '11'), +('14', '70', '11', '39371', '70904', '11'), +('14', '70', '11', '39320', '68281', '11'), +('14', '70', '11', '83665', '63268', '11'), +('14', '70', '11', '83657', '61724', '11'), +('14', '70', '22', '61948', '0', '10'), +('14', '70', '22', '66397', '0', '10'), +('14', '70', '22', '21805', '0', '10'), +('14', '70', '22', '21807', '0', '10'), +('14', '70', '1', '83662', '62617', '10'), +('14', '70', '1', '83630', '58545', '10'), +('14', '70', '1', '68949', '58454', '10'), +('14', '70', '1', '83594', '57255', '10'), +('14', '70', '2', '83563', '58216', '10'), +('14', '70', '2', '70944', '52668', '10'), +('14', '70', '2', '83505', '48482', '10'), +('14', '70', '2', '47211', '47817', '10'), +('14', '70', '3', '69132', '73316', '10'), +('14', '70', '3', '83658', '61785', '10'), +('14', '70', '3', '83634', '59070', '10'), +('14', '70', '3', '83636', '59015', '10'), +('14', '70', '5', '70705', '76109', '10'), +('14', '70', '5', '83651', '59788', '10'), +('14', '70', '5', '83612', '59071', '10'), +('14', '70', '5', '70984', '57243', '10'), +('14', '70', '8', '83659', '62307', '10'), +('14', '70', '8', '83638', '58347', '10'), +('14', '70', '8', '83589', '58319', '10'), +('14', '70', '8', '83598', '57456', '10'), +('14', '70', '6', '83660', '100563', '10'), +('14', '70', '6', '47280', '83583', '10'), +('14', '70', '6', '47229', '72292', '10'), +('14', '70', '6', '69066', '67956', '10'), +('14', '70', '17', '83606', '64655', '10'), +('14', '70', '17', '70949', '59317', '10'), +('14', '70', '17', '68782', '54997', '10'), +('14', '70', '17', '70714', '48544', '10'), +('14', '70', '7', '83567', '57866', '10'), +('14', '70', '7', '68926', '56526', '10'), +('14', '70', '7', '70945', '52201', '10'), +('14', '70', '7', '83543', '50297', '10'), +('14', '70', '9', '69100', '62939', '10'), +('14', '70', '9', '83655', '62591', '10'), +('14', '70', '9', '70946', '51123', '10'), +('14', '70', '9', '83467', '48490', '10'), +('14', '70', '15', '69070', '68312', '10'), +('14', '70', '15', '83595', '64553', '10'), +('14', '70', '15', '83628', '59590', '10'), +('14', '70', '15', '83629', '58664', '10'), +('14', '70', '20', '83650', '59703', '10'), +('14', '70', '20', '83600', '57215', '10'), +('14', '70', '20', '47282', '54026', '10'), +('14', '70', '20', '47284', '51799', '10'), +('14', '70', '12', '83571', '57761', '10'), +('14', '70', '12', '83553', '56192', '10'), +('14', '70', '12', '70947', '52518', '10'), +('14', '70', '12', '47215', '47948', '10'), +('14', '70', '18', '83610', '63443', '10'), +('14', '70', '18', '28649', '58353', '10'), +('14', '70', '18', '70950', '55162', '10'), +('14', '70', '18', '69149', '53657', '10'), +('14', '70', '19', '83575', '58560', '10'), +('14', '70', '19', '83497', '54686', '10'), +('14', '70', '19', '70948', '51568', '10'), +('14', '70', '19', '47219', '47839', '10'), +('14', '70', '13', '69098', '64915', '10'), +('14', '70', '13', '52962', '57631', '10'), +('14', '70', '13', '83632', '57453', '10'), +('14', '70', '13', '71671', '56787', '10'), +('14', '70', '14', '83641', '68326', '10'), +('14', '70', '14', '69098', '64915', '10'), +('14', '70', '14', '83656', '63540', '10'), +('14', '70', '14', '39315', '61131', '10'), +('14', '70', '11', '83665', '63268', '10'), +('14', '70', '11', '83657', '61724', '10'), +('14', '70', '11', '83642', '58942', '10'), +('14', '70', '11', '47298', '51333', '10'), +('14', '70', '22', '66397', '0', '9'), +('14', '70', '22', '62787', '0', '9'), +('14', '70', '22', '61948', '0', '9'), +('14', '70', '22', '21805', '0', '9'), +('14', '70', '1', '68949', '58454', '9'), +('14', '70', '1', '71668', '55927', '9'), +('14', '70', '1', '47288', '54955', '9'), +('14', '70', '1', '69166', '52895', '9'), +('14', '70', '2', '70944', '52668', '9'), +('14', '70', '2', '47211', '47817', '9'), +('14', '70', '2', '70724', '46621', '9'), +('14', '70', '2', '46141', '40637', '9'), +('14', '70', '3', '69132', '73316', '9'), +('14', '70', '3', '47299', '58592', '9'), +('14', '70', '3', '47302', '51641', '9'), +('14', '70', '3', '71655', '50437', '9'), +('14', '70', '5', '70705', '76109', '9'), +('14', '70', '5', '70984', '57243', '9'), +('14', '70', '5', '47276', '53363', '9'), +('14', '70', '5', '7769', '53194', '9'), +('14', '70', '8', '71665', '56886', '9'), +('14', '70', '8', '47306', '54531', '9'), +('14', '70', '8', '47304', '50730', '9'), +('14', '70', '8', '69164', '47598', '9'), +('14', '70', '6', '47280', '83583', '9'), +('14', '70', '6', '47229', '72292', '9'), +('14', '70', '6', '69066', '67956', '9'), +('14', '70', '6', '68841', '55269', '9'), +('14', '70', '17', '70949', '59317', '9'), +('14', '70', '17', '68782', '54997', '9'), +('14', '70', '17', '70714', '48544', '9'), +('14', '70', '17', '69153', '48480', '9'), +('14', '70', '7', '68926', '56526', '9'), +('14', '70', '7', '70945', '52201', '9'), +('14', '70', '7', '47207', '48472', '9'), +('14', '70', '7', '69176', '45376', '9'), +('14', '70', '9', '69100', '62939', '9'), +('14', '70', '9', '70946', '51123', '9'), +('14', '70', '9', '47223', '47661', '9'), +('14', '70', '9', '69129', '45859', '9'), +('14', '70', '15', '69070', '68312', '9'), +('14', '70', '15', '47290', '54401', '9'), +('14', '70', '15', '26993', '52762', '9'), +('14', '70', '15', '47291', '52418', '9'), +('14', '70', '20', '47282', '54026', '9'), +('14', '70', '20', '47284', '51799', '9'), +('14', '70', '20', '47281', '51544', '9'), +('14', '70', '20', '67625', '49541', '9'), +('14', '70', '12', '70947', '52518', '9'), +('14', '70', '12', '47215', '47948', '9'), +('14', '70', '12', '26996', '47696', '9'), +('14', '70', '12', '69255', '47648', '9'), +('14', '70', '18', '28649', '58353', '9'), +('14', '70', '18', '70950', '55162', '9'), +('14', '70', '18', '69149', '53657', '9'), +('14', '70', '18', '71649', '51112', '9'), +('14', '70', '19', '70948', '51568', '9'), +('14', '70', '19', '47219', '47839', '9'), +('14', '70', '19', '69251', '47146', '9'), +('14', '70', '19', '69078', '40039', '9'), +('14', '70', '13', '69098', '64915', '9'), +('14', '70', '13', '52962', '57631', '9'), +('14', '70', '13', '71671', '56787', '9'), +('14', '70', '13', '47308', '52255', '9'), +('14', '70', '14', '69098', '64915', '9'), +('14', '70', '14', '39315', '61131', '9'), +('14', '70', '14', '71661', '56840', '9'), +('14', '70', '14', '71671', '56787', '9'), +('14', '70', '11', '47298', '51333', '9'), +('14', '70', '11', '47296', '50827', '9'), +('14', '70', '11', '71659', '50447', '9'), +('14', '70', '11', '71627', '49664', '9'), +('14', '70', '22', '66397', '0', '8'), +('14', '70', '22', '62787', '0', '8'), +('14', '70', '22', '61948', '0', '8'), +('14', '70', '22', '21805', '0', '8'), +('14', '70', '1', '68949', '58454', '8'), +('14', '70', '1', '47288', '54955', '8'), +('14', '70', '1', '69166', '52895', '8'), +('14', '70', '1', '47234', '51996', '8'), +('14', '70', '2', '70944', '52668', '8'), +('14', '70', '2', '47211', '47817', '8'), +('14', '70', '2', '70724', '46621', '8'), +('14', '70', '2', '46141', '40637', '8'), +('14', '70', '3', '69132', '73316', '8'), +('14', '70', '3', '47299', '58592', '8'), +('14', '70', '3', '47302', '51641', '8'), +('14', '70', '3', '56017', '48952', '8'), +('14', '70', '5', '70705', '76109', '8'), +('14', '70', '5', '47276', '53363', '8'), +('14', '70', '5', '7769', '53194', '8'), +('14', '70', '5', '67625', '49541', '8'), +('14', '70', '8', '47306', '54531', '8'), +('14', '70', '8', '47304', '50730', '8'), +('14', '70', '8', '69164', '47598', '8'), +('14', '70', '8', '47247', '46791', '8'), +('14', '70', '6', '47280', '83583', '8'), +('14', '70', '6', '47229', '72292', '8'), +('14', '70', '6', '69066', '67956', '8'), +('14', '70', '6', '68841', '55269', '8'), +('14', '70', '17', '70949', '59317', '8'), +('14', '70', '17', '68782', '54997', '8'), +('14', '70', '17', '70714', '48544', '8'), +('14', '70', '17', '69153', '48480', '8'), +('14', '70', '7', '68926', '56526', '8'), +('14', '70', '7', '70945', '52201', '8'), +('14', '70', '7', '47207', '48472', '8'), +('14', '70', '7', '69176', '45376', '8'), +('14', '70', '9', '69100', '62939', '8'), +('14', '70', '9', '70946', '51123', '8'), +('14', '70', '9', '47223', '47661', '8'), +('14', '70', '9', '69129', '45859', '8'), +('14', '70', '15', '69070', '68312', '8'), +('14', '70', '15', '47290', '54401', '8'), +('14', '70', '15', '26993', '52762', '8'), +('14', '70', '15', '47291', '52418', '8'), +('14', '70', '20', '47282', '54026', '8'), +('14', '70', '20', '47284', '51799', '8'), +('14', '70', '20', '47281', '51544', '8'), +('14', '70', '20', '67625', '49541', '8'), +('14', '70', '12', '70947', '52518', '8'), +('14', '70', '12', '47215', '47948', '8'), +('14', '70', '12', '26996', '47696', '8'), +('14', '70', '12', '69255', '47648', '8'), +('14', '70', '18', '28649', '58353', '8'), +('14', '70', '18', '70950', '55162', '8'), +('14', '70', '18', '69149', '53657', '8'), +('14', '70', '18', '47203', '48640', '8'), +('14', '70', '19', '70948', '51568', '8'), +('14', '70', '19', '47219', '47839', '8'), +('14', '70', '19', '69251', '47146', '8'), +('14', '70', '19', '69078', '40039', '8'), +('14', '70', '13', '69098', '64915', '8'), +('14', '70', '13', '52962', '57631', '8'), +('14', '70', '13', '47308', '52255', '8'), +('14', '70', '13', '47307', '51399', '8'), +('14', '70', '14', '69098', '64915', '8'), +('14', '70', '14', '39315', '61131', '8'), +('14', '70', '14', '47308', '52255', '8'), +('14', '70', '14', '47311', '52189', '8'), +('14', '70', '11', '47298', '51333', '8'), +('14', '70', '11', '47296', '50827', '8'), +('14', '70', '11', '47241', '47681', '8'), +('14', '70', '11', '70706', '47629', '8'), +('14', '71', '22', '21805', '0', '11'), +('14', '71', '22', '61948', '0', '11'), +('14', '71', '22', '21807', '0', '11'), +('14', '71', '22', '12425', '0', '11'), +('14', '71', '1', '39353', '64298', '11'), +('14', '71', '1', '83662', '62624', '11'), +('14', '71', '1', '39329', '60067', '11'), +('14', '71', '1', '39271', '59413', '11'), +('14', '71', '2', '39358', '64399', '11'), +('14', '71', '2', '39285', '58724', '11'), +('14', '71', '2', '83563', '58225', '11'), +('14', '71', '2', '70944', '52668', '11'), +('14', '71', '3', '69132', '72071', '11'), +('14', '71', '3', '39368', '71093', '11'), +('14', '71', '3', '83658', '61790', '11'), +('14', '71', '3', '39312', '61086', '11'), +('14', '71', '5', '70705', '74615', '11'), +('14', '71', '5', '51701', '68055', '11'), +('14', '71', '5', '39340', '64650', '11'), +('14', '71', '5', '39328', '60634', '11'), +('14', '71', '8', '39352', '62561', '11'), +('14', '71', '8', '83659', '62308', '11'), +('14', '71', '8', '39330', '61086', '11'), +('14', '71', '8', '39299', '58930', '11'), +('14', '71', '6', '83660', '98814', '11'), +('14', '71', '6', '47280', '82088', '11'), +('14', '71', '6', '47229', '71047', '11'), +('14', '71', '6', '69066', '66710', '11'), +('14', '71', '17', '83606', '64663', '11'), +('14', '71', '17', '70949', '59322', '11'), +('14', '71', '17', '68782', '54002', '11'), +('14', '71', '17', '70714', '48552', '11'), +('14', '71', '7', '83567', '57874', '11'), +('14', '71', '7', '68926', '55381', '11'), +('14', '71', '7', '70945', '52210', '11'), +('14', '71', '7', '83543', '50303', '11'), +('14', '71', '9', '39336', '64995', '11'), +('14', '71', '9', '51709', '62764', '11'), +('14', '71', '9', '83655', '62596', '11'), +('14', '71', '9', '69100', '61794', '11'), +('14', '71', '15', '39259', '70195', '11'), +('14', '71', '15', '39376', '69943', '11'), +('14', '71', '15', '69070', '67066', '11'), +('14', '71', '15', '83595', '64209', '11'), +('14', '71', '20', '39350', '64610', '11'), +('14', '71', '20', '39322', '61061', '11'), +('14', '71', '20', '83650', '59708', '11'), +('14', '71', '20', '39253', '59504', '11'), +('14', '71', '12', '83571', '57769', '11'), +('14', '71', '12', '83553', '55897', '11'), +('14', '71', '12', '70947', '52468', '11'), +('14', '71', '12', '47215', '47953', '11'), +('14', '71', '18', '83610', '63450', '11'), +('14', '71', '18', '28649', '57209', '11'), +('14', '71', '18', '70950', '55167', '11'), +('14', '71', '18', '69149', '53412', '11'), +('14', '71', '19', '83575', '58569', '11'), +('14', '71', '19', '83497', '54391', '11'), +('14', '71', '19', '39223', '53301', '11'), +('14', '71', '19', '70948', '51568', '11'), +('14', '71', '13', '39295', '66295', '11'), +('14', '71', '13', '39351', '63707', '11'), +('14', '71', '13', '69098', '63422', '11'), +('14', '71', '13', '39324', '60607', '11'), +('14', '71', '14', '39372', '70970', '11'), +('14', '71', '14', '83641', '67982', '11'), +('14', '71', '14', '39295', '66295', '11'), +('14', '71', '14', '39351', '63707', '11'), +('14', '71', '11', '39371', '70908', '11'), +('14', '71', '11', '39320', '67938', '11'), +('14', '71', '11', '83665', '63276', '11'), +('14', '71', '11', '83657', '61729', '11'), +('14', '72', '22', '21805', '0', '11'), +('14', '72', '22', '61948', '0', '11'), +('14', '72', '22', '21807', '0', '11'), +('14', '72', '22', '12425', '0', '11'), +('14', '72', '1', '39353', '64305', '11'), +('14', '72', '1', '83662', '62631', '11'), +('14', '72', '1', '39329', '60072', '11'), +('14', '72', '1', '39271', '59419', '11'), +('14', '72', '2', '39358', '64404', '11'), +('14', '72', '2', '39285', '58730', '11'), +('14', '72', '2', '83563', '58233', '11'), +('14', '72', '2', '70944', '52669', '11'), +('14', '72', '3', '39368', '71101', '11'), +('14', '72', '3', '69132', '70826', '11'), +('14', '72', '3', '83658', '61795', '11'), +('14', '72', '3', '39312', '61092', '11'), +('14', '72', '5', '70705', '73120', '11'), +('14', '72', '5', '51701', '67710', '11'), +('14', '72', '5', '39340', '64658', '11'), +('14', '72', '5', '39328', '60640', '11'), +('14', '72', '8', '39352', '62562', '11'), +('14', '72', '8', '83659', '62309', '11'), +('14', '72', '8', '39330', '61092', '11'), +('14', '72', '8', '39299', '58934', '11'), +('14', '72', '6', '83660', '97065', '11'), +('14', '72', '6', '47280', '80592', '11'), +('14', '72', '6', '47229', '69802', '11'), +('14', '72', '6', '69066', '65463', '11'), +('14', '72', '17', '83606', '64671', '11'), +('14', '72', '17', '70949', '59328', '11'), +('14', '72', '17', '68782', '53008', '11'), +('14', '72', '17', '70714', '48560', '11'), +('14', '72', '7', '83567', '57883', '11'), +('14', '72', '7', '68926', '54237', '11'), +('14', '72', '7', '70945', '52218', '11'), +('14', '72', '7', '83543', '50308', '11'), +('14', '72', '9', '39336', '65003', '11'), +('14', '72', '9', '51709', '62770', '11'), +('14', '72', '9', '83655', '62602', '11'), +('14', '72', '9', '69100', '60649', '11'), +('14', '72', '15', '39376', '69950', '11'), +('14', '72', '15', '39259', '68949', '11'), +('14', '72', '15', '69070', '65820', '11'), +('14', '72', '15', '83595', '63864', '11'), +('14', '72', '20', '39350', '64615', '11'), +('14', '72', '20', '39322', '61066', '11'), +('14', '72', '20', '83650', '59714', '11'), +('14', '72', '20', '39253', '59510', '11'), +('14', '72', '12', '83571', '57778', '11'), +('14', '72', '12', '83553', '55602', '11'), +('14', '72', '12', '70947', '52419', '11'), +('14', '72', '12', '47215', '47958', '11'), +('14', '72', '18', '83610', '63458', '11'), +('14', '72', '18', '28649', '56064', '11'), +('14', '72', '18', '70950', '55173', '11'), +('14', '72', '18', '69149', '53168', '11'), +('14', '72', '19', '83575', '58577', '11'), +('14', '72', '19', '83497', '54097', '11'), +('14', '72', '19', '39223', '53307', '11'), +('14', '72', '19', '70948', '51568', '11'), +('14', '72', '13', '39295', '65951', '11'), +('14', '72', '13', '39351', '63712', '11'), +('14', '72', '13', '69098', '61928', '11'), +('14', '72', '13', '39324', '60615', '11'), +('14', '72', '14', '39372', '70977', '11'), +('14', '72', '14', '83641', '67639', '11'), +('14', '72', '14', '39295', '65951', '11'), +('14', '72', '14', '39351', '63712', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '72', '11', '39371', '70913', '11'), +('14', '72', '11', '39320', '67595', '11'), +('14', '72', '11', '83665', '63284', '11'), +('14', '72', '11', '83657', '61735', '11'), +('14', '73', '22', '21805', '0', '11'), +('14', '73', '22', '61948', '0', '11'), +('14', '73', '22', '21807', '0', '11'), +('14', '73', '22', '12425', '0', '11'), +('14', '73', '1', '39353', '64313', '11'), +('14', '73', '1', '83662', '62638', '11'), +('14', '73', '1', '39329', '60077', '11'), +('14', '73', '1', '39271', '59425', '11'), +('14', '73', '2', '39358', '64410', '11'), +('14', '73', '2', '39285', '58735', '11'), +('14', '73', '2', '83563', '58242', '11'), +('14', '73', '2', '70944', '52670', '11'), +('14', '73', '3', '39368', '71108', '11'), +('14', '73', '3', '69132', '69581', '11'), +('14', '73', '3', '83658', '61800', '11'), +('14', '73', '3', '39312', '61099', '11'), +('14', '73', '5', '70705', '71626', '11'), +('14', '73', '5', '51701', '67366', '11'), +('14', '73', '5', '39340', '64665', '11'), +('14', '73', '5', '39328', '60646', '11'), +('14', '73', '8', '39352', '62562', '11'), +('14', '73', '8', '83659', '62309', '11'), +('14', '73', '8', '39330', '61098', '11'), +('14', '73', '8', '39299', '58939', '11'), +('14', '73', '6', '83660', '95316', '11'), +('14', '73', '6', '47280', '79097', '11'), +('14', '73', '6', '47229', '68557', '11'), +('14', '73', '6', '39362', '64764', '11'), +('14', '73', '17', '83606', '64678', '11'), +('14', '73', '17', '70949', '59334', '11'), +('14', '73', '17', '68782', '52013', '11'), +('14', '73', '17', '70714', '48567', '11'), +('14', '73', '7', '83567', '57891', '11'), +('14', '73', '7', '68926', '53092', '11'), +('14', '73', '7', '70945', '52227', '11'), +('14', '73', '7', '83543', '50314', '11'), +('14', '73', '9', '39336', '65010', '11'), +('14', '73', '9', '51709', '62776', '11'), +('14', '73', '9', '83655', '62607', '11'), +('14', '73', '9', '69100', '59505', '11'), +('14', '73', '15', '39376', '69958', '11'), +('14', '73', '15', '39259', '67704', '11'), +('14', '73', '15', '69070', '64575', '11'), +('14', '73', '15', '83595', '63520', '11'), +('14', '73', '20', '39350', '64621', '11'), +('14', '73', '20', '39322', '61071', '11'), +('14', '73', '20', '83650', '59719', '11'), +('14', '73', '20', '39253', '59515', '11'), +('14', '73', '12', '83571', '57786', '11'), +('14', '73', '12', '83553', '55308', '11'), +('14', '73', '12', '70947', '52370', '11'), +('14', '73', '12', '47215', '47964', '11'), +('14', '73', '18', '83610', '63466', '11'), +('14', '73', '18', '70950', '55178', '11'), +('14', '73', '18', '28649', '54920', '11'), +('14', '73', '18', '69149', '52924', '11'), +('14', '73', '19', '83575', '58586', '11'), +('14', '73', '19', '83497', '53802', '11'), +('14', '73', '19', '39223', '53312', '11'), +('14', '73', '19', '70948', '51568', '11'), +('14', '73', '13', '39295', '65606', '11'), +('14', '73', '13', '39351', '63718', '11'), +('14', '73', '13', '39324', '60622', '11'), +('14', '73', '13', '69098', '60435', '11'), +('14', '73', '14', '39372', '70984', '11'), +('14', '73', '14', '83641', '67295', '11'), +('14', '73', '14', '39295', '65606', '11'), +('14', '73', '14', '39351', '63718', '11'), +('14', '73', '11', '39371', '70918', '11'), +('14', '73', '11', '39320', '67251', '11'), +('14', '73', '11', '83665', '63292', '11'), +('14', '73', '11', '83657', '61741', '11'), +('14', '74', '22', '21805', '0', '11'), +('14', '74', '22', '61948', '0', '11'), +('14', '74', '22', '21807', '0', '11'), +('14', '74', '22', '12425', '0', '11'), +('14', '74', '1', '39353', '64320', '11'), +('14', '74', '1', '83662', '62645', '11'), +('14', '74', '1', '39329', '60082', '11'), +('14', '74', '1', '39271', '59430', '11'), +('14', '74', '2', '39358', '64415', '11'), +('14', '74', '2', '39285', '58741', '11'), +('14', '74', '2', '83563', '58251', '11'), +('14', '74', '2', '70944', '52670', '11'), +('14', '74', '3', '39368', '71116', '11'), +('14', '74', '3', '69132', '68336', '11'), +('14', '74', '3', '83658', '61805', '11'), +('14', '74', '3', '39312', '61106', '11'), +('14', '74', '5', '70705', '70131', '11'), +('14', '74', '5', '51701', '67021', '11'), +('14', '74', '5', '39340', '64673', '11'), +('14', '74', '5', '39328', '60652', '11'), +('14', '74', '8', '39352', '62563', '11'), +('14', '74', '8', '83659', '62310', '11'), +('14', '74', '8', '39330', '61104', '11'), +('14', '74', '8', '39299', '58943', '11'), +('14', '74', '6', '83660', '93567', '11'), +('14', '74', '6', '47280', '77601', '11'), +('14', '74', '6', '47229', '67312', '11'), +('14', '74', '6', '39362', '64771', '11'), +('14', '74', '17', '83606', '64686', '11'), +('14', '74', '17', '70949', '59340', '11'), +('14', '74', '17', '68782', '51019', '11'), +('14', '74', '17', '70714', '48575', '11'), +('14', '74', '7', '83567', '57900', '11'), +('14', '74', '7', '70945', '52235', '11'), +('14', '74', '7', '68926', '51947', '11'), +('14', '74', '7', '83543', '50319', '11'), +('14', '74', '9', '39336', '65018', '11'), +('14', '74', '9', '51709', '62781', '11'), +('14', '74', '9', '83655', '62613', '11'), +('14', '74', '9', '39297', '58732', '11'), +('14', '74', '15', '39376', '69965', '11'), +('14', '74', '15', '39259', '66459', '11'), +('14', '74', '15', '69070', '63329', '11'), +('14', '74', '15', '83595', '63176', '11'), +('14', '74', '20', '39350', '64626', '11'), +('14', '74', '20', '39322', '61076', '11'), +('14', '74', '20', '83650', '59725', '11'), +('14', '74', '20', '39253', '59521', '11'), +('14', '74', '12', '83571', '57795', '11'), +('14', '74', '12', '83553', '55013', '11'), +('14', '74', '12', '70947', '52320', '11'), +('14', '74', '12', '47215', '47969', '11'), +('14', '74', '18', '83610', '63473', '11'), +('14', '74', '18', '70950', '55184', '11'), +('14', '74', '18', '28649', '53776', '11'), +('14', '74', '18', '69149', '52679', '11'), +('14', '74', '19', '83575', '58595', '11'), +('14', '74', '19', '83497', '53507', '11'), +('14', '74', '19', '39223', '53318', '11'), +('14', '74', '19', '70948', '51568', '11'), +('14', '74', '13', '39295', '65262', '11'), +('14', '74', '13', '39351', '63723', '11'), +('14', '74', '13', '39324', '60630', '11'), +('14', '74', '13', '69098', '58942', '11'), +('14', '74', '14', '39372', '70991', '11'), +('14', '74', '14', '83641', '66952', '11'), +('14', '74', '14', '39295', '65262', '11'), +('14', '74', '14', '39351', '63723', '11'), +('14', '74', '11', '39371', '70922', '11'), +('14', '74', '11', '39320', '66908', '11'), +('14', '74', '11', '83665', '63300', '11'), +('14', '74', '11', '83657', '61747', '11'), +('14', '75', '22', '21807', '0', '13'), +('14', '75', '22', '21805', '0', '13'), +('14', '75', '22', '12425', '0', '13'), +('14', '75', '22', '39342', '0', '13'), +('14', '75', '1', '80676', '98606', '13'), +('14', '75', '1', '80639', '89901', '13'), +('14', '75', '1', '80628', '86025', '13'), +('14', '75', '1', '46882', '85782', '13'), +('14', '75', '2', '53452', '77188', '13'), +('14', '75', '2', '39358', '64421', '13'), +('14', '75', '2', '39285', '58747', '13'), +('14', '75', '2', '83563', '58259', '13'), +('14', '75', '3', '80647', '90202', '13'), +('14', '75', '3', '46874', '79246', '13'), +('14', '75', '3', '46852', '72043', '13'), +('14', '75', '3', '46902', '71335', '13'), +('14', '75', '5', '80661', '95275', '13'), +('14', '75', '5', '80615', '86271', '13'), +('14', '75', '5', '46934', '85668', '13'), +('14', '75', '5', '46868', '79351', '13'), +('14', '75', '8', '80679', '98432', '13'), +('14', '75', '8', '80649', '89952', '13'), +('14', '75', '8', '46936', '85630', '13'), +('14', '75', '8', '46847', '72142', '13'), +('14', '75', '6', '83660', '91817', '13'), +('14', '75', '6', '80646', '89322', '13'), +('14', '75', '6', '46883', '85667', '13'), +('14', '75', '6', '46933', '85534', '13'), +('14', '75', '17', '53457', '79485', '13'), +('14', '75', '17', '83606', '64693', '13'), +('14', '75', '17', '70949', '59345', '13'), +('14', '75', '17', '68782', '50024', '13'), +('14', '75', '7', '53453', '76817', '13'), +('14', '75', '7', '83567', '57909', '13'), +('14', '75', '7', '70945', '52244', '13'), +('14', '75', '7', '68926', '50802', '13'), +('14', '75', '9', '46938', '86012', '13'), +('14', '75', '9', '53454', '76679', '13'), +('14', '75', '9', '39336', '65025', '13'), +('14', '75', '9', '51709', '62787', '13'), +('14', '75', '15', '79909', '102272', '13'), +('14', '75', '15', '80666', '98730', '13'), +('14', '75', '15', '80686', '98568', '13'), +('14', '75', '15', '79908', '93587', '13'), +('14', '75', '20', '80680', '98822', '13'), +('14', '75', '20', '46886', '85725', '13'), +('14', '75', '20', '80620', '85029', '13'), +('14', '75', '20', '46911', '79493', '13'), +('14', '75', '12', '53455', '76768', '13'), +('14', '75', '12', '83571', '57804', '13'), +('14', '75', '12', '83553', '54719', '13'), +('14', '75', '12', '70947', '52271', '13'), +('14', '75', '18', '53458', '78947', '13'), +('14', '75', '18', '46810', '63820', '13'), +('14', '75', '18', '83610', '63481', '13'), +('14', '75', '18', '70950', '55190', '13'), +('14', '75', '19', '53456', '76865', '13'), +('14', '75', '19', '83575', '58603', '13'), +('14', '75', '19', '39223', '53323', '13'), +('14', '75', '19', '83497', '53213', '13'), +('14', '75', '13', '80633', '89592', '13'), +('14', '75', '13', '80624', '83291', '13'), +('14', '75', '13', '46906', '69470', '13'), +('14', '75', '13', '39295', '64917', '13'), +('14', '75', '14', '80665', '92427', '13'), +('14', '75', '14', '80635', '88265', '13'), +('14', '75', '14', '80625', '84621', '13'), +('14', '75', '14', '46925', '79162', '13'), +('14', '75', '11', '80668', '98667', '13'), +('14', '75', '11', '46939', '86051', '13'), +('14', '75', '11', '80629', '85716', '13'), +('14', '75', '11', '46889', '84960', '13'), +('14', '75', '22', '21807', '0', '12'), +('14', '75', '22', '21805', '0', '12'), +('14', '75', '22', '12425', '0', '12'), +('14', '75', '22', '39342', '0', '12'), +('14', '75', '1', '46882', '85782', '12'), +('14', '75', '1', '46914', '78952', '12'), +('14', '75', '1', '46844', '71931', '12'), +('14', '75', '1', '46894', '71490', '12'), +('14', '75', '2', '53452', '77188', '12'), +('14', '75', '2', '39358', '64421', '12'), +('14', '75', '2', '39285', '58747', '12'), +('14', '75', '2', '83563', '58259', '12'), +('14', '75', '3', '46874', '79246', '12'), +('14', '75', '3', '46852', '72043', '12'), +('14', '75', '3', '46902', '71335', '12'), +('14', '75', '3', '39368', '71123', '12'), +('14', '75', '5', '46934', '85668', '12'), +('14', '75', '5', '46868', '79351', '12'), +('14', '75', '5', '70705', '68637', '12'), +('14', '75', '5', '51701', '66677', '12'), +('14', '75', '8', '46936', '85630', '12'), +('14', '75', '8', '46847', '72142', '12'), +('14', '75', '8', '39352', '62564', '12'), +('14', '75', '8', '83659', '62311', '12'), +('14', '75', '6', '83660', '91817', '12'), +('14', '75', '6', '46883', '85667', '12'), +('14', '75', '6', '46933', '85534', '12'), +('14', '75', '6', '46884', '85093', '12'), +('14', '75', '17', '53457', '79485', '12'), +('14', '75', '17', '83606', '64693', '12'), +('14', '75', '17', '70949', '59345', '12'), +('14', '75', '17', '68782', '50024', '12'), +('14', '75', '7', '53453', '76817', '12'), +('14', '75', '7', '83567', '57909', '12'), +('14', '75', '7', '70945', '52244', '12'), +('14', '75', '7', '68926', '50802', '12'), +('14', '75', '9', '46938', '86012', '12'), +('14', '75', '9', '53454', '76679', '12'), +('14', '75', '9', '39336', '65025', '12'), +('14', '75', '9', '51709', '62787', '12'), +('14', '75', '15', '46932', '85873', '12'), +('14', '75', '15', '46864', '79556', '12'), +('14', '75', '15', '46843', '72383', '12'), +('14', '75', '15', '46893', '71538', '12'), +('14', '75', '20', '46886', '85725', '12'), +('14', '75', '20', '46911', '79493', '12'), +('14', '75', '20', '46920', '79025', '12'), +('14', '75', '20', '39350', '64632', '12'), +('14', '75', '12', '53455', '76768', '12'), +('14', '75', '12', '83571', '57804', '12'), +('14', '75', '12', '83553', '54719', '12'), +('14', '75', '12', '70947', '52271', '12'), +('14', '75', '18', '53458', '78947', '12'), +('14', '75', '18', '46810', '63820', '12'), +('14', '75', '18', '83610', '63481', '12'), +('14', '75', '18', '70950', '55190', '12'), +('14', '75', '19', '53456', '76865', '12'), +('14', '75', '19', '83575', '58603', '12'), +('14', '75', '19', '39223', '53323', '12'), +('14', '75', '19', '83497', '53213', '12'), +('14', '75', '13', '46906', '69470', '12'), +('14', '75', '13', '39295', '64917', '12'), +('14', '75', '13', '39351', '63729', '12'), +('14', '75', '13', '39324', '60638', '12'), +('14', '75', '14', '46925', '79162', '12'), +('14', '75', '14', '46875', '78439', '12'), +('14', '75', '14', '46903', '72399', '12'), +('14', '75', '14', '39372', '70998', '12'), +('14', '75', '11', '46939', '86051', '12'), +('14', '75', '11', '46889', '84960', '12'), +('14', '75', '11', '39371', '70927', '12'), +('14', '75', '11', '46880', '68304', '12'), +('14', '76', '22', '21807', '0', '13'), +('14', '76', '22', '21805', '0', '13'), +('14', '76', '22', '12425', '0', '13'), +('14', '76', '22', '39342', '0', '13'), +('14', '76', '1', '80676', '98613', '13'), +('14', '76', '1', '80639', '89908', '13'), +('14', '76', '1', '80628', '86031', '13'), +('14', '76', '1', '46882', '85790', '13'), +('14', '76', '2', '53452', '77195', '13'), +('14', '76', '2', '39358', '64426', '13'), +('14', '76', '2', '39285', '58753', '13'), +('14', '76', '2', '83563', '58268', '13'), +('14', '76', '3', '80647', '90209', '13'), +('14', '76', '3', '46874', '79253', '13'), +('14', '76', '3', '46852', '72050', '13'), +('14', '76', '3', '46902', '71341', '13'), +('14', '76', '5', '80661', '95283', '13'), +('14', '76', '5', '80615', '86277', '13'), +('14', '76', '5', '46934', '85676', '13'), +('14', '76', '5', '46868', '79359', '13'), +('14', '76', '8', '80679', '98433', '13'), +('14', '76', '8', '80649', '89960', '13'), +('14', '76', '8', '46936', '85638', '13'), +('14', '76', '8', '46847', '72148', '13'), +('14', '76', '6', '83660', '90068', '13'), +('14', '76', '6', '80646', '89322', '13'), +('14', '76', '6', '46883', '85675', '13'), +('14', '76', '6', '46933', '85542', '13'), +('14', '76', '17', '53457', '79492', '13'), +('14', '76', '17', '83606', '64701', '13'), +('14', '76', '17', '70949', '59351', '13'), +('14', '76', '17', '68782', '49030', '13'), +('14', '76', '7', '53453', '76823', '13'), +('14', '76', '7', '83567', '57917', '13'), +('14', '76', '7', '70945', '52252', '13'), +('14', '76', '7', '83543', '50330', '13'), +('14', '76', '9', '46938', '86021', '13'), +('14', '76', '9', '53454', '76686', '13'), +('14', '76', '9', '39336', '65033', '13'), +('14', '76', '9', '51709', '62792', '13'), +('14', '76', '15', '79909', '102279', '13'), +('14', '76', '15', '80666', '98731', '13'), +('14', '76', '15', '80686', '98576', '13'), +('14', '76', '15', '79908', '93594', '13'), +('14', '76', '20', '80680', '98830', '13'), +('14', '76', '20', '46886', '85734', '13'), +('14', '76', '20', '80620', '85030', '13'), +('14', '76', '20', '46911', '79501', '13'), +('14', '76', '12', '53455', '76772', '13'), +('14', '76', '12', '83571', '57812', '13'), +('14', '76', '12', '83553', '54424', '13'), +('14', '76', '12', '70947', '52222', '13'), +('14', '76', '18', '53458', '78955', '13'), +('14', '76', '18', '46810', '63825', '13'), +('14', '76', '18', '83610', '63488', '13'), +('14', '76', '18', '70950', '55195', '13'), +('14', '76', '19', '53456', '76866', '13'), +('14', '76', '19', '83575', '58612', '13'), +('14', '76', '19', '39223', '53329', '13'), +('14', '76', '19', '83497', '52918', '13'), +('14', '76', '13', '80633', '89598', '13'), +('14', '76', '13', '80624', '83296', '13'), +('14', '76', '13', '46906', '69478', '13'), +('14', '76', '13', '39295', '64573', '13'), +('14', '76', '14', '80665', '92432', '13'), +('14', '76', '14', '80635', '88270', '13'), +('14', '76', '14', '80625', '84626', '13'), +('14', '76', '14', '46925', '79169', '13'), +('14', '76', '11', '80668', '98675', '13'), +('14', '76', '11', '46939', '86059', '13'), +('14', '76', '11', '80629', '85722', '13'), +('14', '76', '11', '46889', '84968', '13'), +('14', '77', '22', '21807', '0', '13'), +('14', '77', '22', '21805', '0', '13'), +('14', '77', '22', '12425', '0', '13'), +('14', '77', '22', '39342', '0', '13'), +('14', '77', '1', '80676', '98621', '13'), +('14', '77', '1', '80639', '89915', '13'), +('14', '77', '1', '80628', '86038', '13'), +('14', '77', '1', '46882', '85798', '13'), +('14', '77', '2', '53452', '77203', '13'), +('14', '77', '2', '39358', '64432', '13'), +('14', '77', '2', '39285', '58759', '13'), +('14', '77', '2', '83563', '58276', '13'), +('14', '77', '3', '80647', '90217', '13'), +('14', '77', '3', '46874', '79261', '13'), +('14', '77', '3', '46852', '72058', '13'), +('14', '77', '3', '46902', '71347', '13'), +('14', '77', '5', '80661', '95291', '13'), +('14', '77', '5', '80615', '86283', '13'), +('14', '77', '5', '46934', '85684', '13'), +('14', '77', '5', '46868', '79367', '13'), +('14', '77', '8', '80679', '98434', '13'), +('14', '77', '8', '80649', '89967', '13'), +('14', '77', '8', '46936', '85646', '13'), +('14', '77', '8', '46847', '72155', '13'), +('14', '77', '6', '80646', '89323', '13'), +('14', '77', '6', '83660', '88319', '13'), +('14', '77', '6', '46883', '85683', '13'), +('14', '77', '6', '46933', '85550', '13'), +('14', '77', '17', '53457', '79500', '13'), +('14', '77', '17', '83606', '64709', '13'), +('14', '77', '17', '70949', '59357', '13'), +('14', '77', '17', '70714', '48598', '13'), +('14', '77', '7', '53453', '76829', '13'), +('14', '77', '7', '83567', '57926', '13'), +('14', '77', '7', '70945', '52261', '13'), +('14', '77', '7', '83543', '50335', '13'), +('14', '77', '9', '46938', '86030', '13'), +('14', '77', '9', '53454', '76693', '13'), +('14', '77', '9', '39336', '65040', '13'), +('14', '77', '9', '51709', '62798', '13'), +('14', '77', '15', '79909', '102285', '13'), +('14', '77', '15', '80666', '98732', '13'), +('14', '77', '15', '80686', '98584', '13'), +('14', '77', '15', '79908', '93600', '13'), +('14', '77', '20', '80680', '98838', '13'), +('14', '77', '20', '46886', '85743', '13'), +('14', '77', '20', '80620', '85030', '13'), +('14', '77', '20', '46911', '79508', '13'), +('14', '77', '12', '53455', '76776', '13'), +('14', '77', '12', '83571', '57821', '13'), +('14', '77', '12', '83553', '54130', '13'), +('14', '77', '12', '70947', '52173', '13'), +('14', '77', '18', '53458', '78962', '13'), +('14', '77', '18', '46810', '63830', '13'), +('14', '77', '18', '83610', '63496', '13'), +('14', '77', '18', '70950', '55201', '13'), +('14', '77', '19', '53456', '76866', '13'), +('14', '77', '19', '83575', '58620', '13'), +('14', '77', '19', '39223', '53334', '13'), +('14', '77', '19', '83497', '52624', '13'), +('14', '77', '13', '80633', '89603', '13'), +('14', '77', '13', '80624', '83302', '13'), +('14', '77', '13', '46906', '69486', '13'), +('14', '77', '13', '39295', '64228', '13'), +('14', '77', '14', '80665', '92438', '13'), +('14', '77', '14', '80635', '88276', '13'), +('14', '77', '14', '80625', '84632', '13'), +('14', '77', '14', '46925', '79176', '13'), +('14', '77', '11', '80668', '98683', '13'), +('14', '77', '11', '46939', '86067', '13'), +('14', '77', '11', '80629', '85729', '13'), +('14', '77', '11', '46889', '84976', '13'), +('14', '78', '22', '21807', '0', '13'), +('14', '78', '22', '21805', '0', '13'), +('14', '78', '22', '12425', '0', '13'), +('14', '78', '22', '39342', '0', '13'), +('14', '78', '1', '80676', '98628', '13'), +('14', '78', '1', '80639', '89922', '13'), +('14', '78', '1', '80628', '86045', '13'), +('14', '78', '1', '46882', '85806', '13'), +('14', '78', '2', '53452', '77210', '13'), +('14', '78', '2', '39358', '64437', '13'), +('14', '78', '2', '39285', '58764', '13'), +('14', '78', '2', '83563', '58285', '13'), +('14', '78', '3', '80647', '90224', '13'), +('14', '78', '3', '46874', '79269', '13'), +('14', '78', '3', '46852', '72065', '13'), +('14', '78', '3', '46902', '71353', '13'), +('14', '78', '5', '80661', '95298', '13'), +('14', '78', '5', '80615', '86289', '13'), +('14', '78', '5', '46934', '85692', '13'), +('14', '78', '5', '46868', '79375', '13'), +('14', '78', '8', '80679', '98434', '13'), +('14', '78', '8', '80649', '89974', '13'), +('14', '78', '8', '46936', '85654', '13'), +('14', '78', '8', '46847', '72161', '13'), +('14', '78', '6', '80646', '89324', '13'), +('14', '78', '6', '83660', '86570', '13'), +('14', '78', '6', '46883', '85691', '13'), +('14', '78', '6', '46933', '85557', '13'), +('14', '78', '17', '53457', '79507', '13'), +('14', '78', '17', '83606', '64716', '13'), +('14', '78', '17', '70949', '59362', '13'), +('14', '78', '17', '70714', '48605', '13'), +('14', '78', '7', '53453', '76835', '13'), +('14', '78', '7', '83567', '57934', '13'), +('14', '78', '7', '70945', '52269', '13'), +('14', '78', '7', '83543', '50341', '13'), +('14', '78', '9', '46938', '86038', '13'), +('14', '78', '9', '53454', '76700', '13'), +('14', '78', '9', '39336', '65048', '13'), +('14', '78', '9', '51709', '62804', '13'), +('14', '78', '15', '79909', '102292', '13'), +('14', '78', '15', '80666', '98733', '13'), +('14', '78', '15', '80686', '98592', '13'), +('14', '78', '15', '79908', '93606', '13'), +('14', '78', '20', '80680', '98846', '13'), +('14', '78', '20', '46886', '85752', '13'), +('14', '78', '20', '80620', '85031', '13'), +('14', '78', '20', '46911', '79516', '13'), +('14', '78', '12', '53455', '76780', '13'), +('14', '78', '12', '83571', '57829', '13'), +('14', '78', '12', '83553', '53835', '13'), +('14', '78', '12', '70947', '52123', '13'), +('14', '78', '18', '53458', '78970', '13'), +('14', '78', '18', '46810', '63836', '13'), +('14', '78', '18', '83610', '63504', '13'), +('14', '78', '18', '70950', '55206', '13'), +('14', '78', '19', '53456', '76867', '13'), +('14', '78', '19', '83575', '58629', '13'), +('14', '78', '19', '39223', '53340', '13'), +('14', '78', '19', '83497', '52329', '13'), +('14', '78', '13', '80633', '89609', '13'), +('14', '78', '13', '80624', '83308', '13'), +('14', '78', '13', '46906', '69494', '13'), +('14', '78', '13', '39295', '63883', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '78', '14', '80665', '92444', '13'), +('14', '78', '14', '80635', '88282', '13'), +('14', '78', '14', '80625', '84638', '13'), +('14', '78', '14', '46925', '79183', '13'), +('14', '78', '11', '80668', '98691', '13'), +('14', '78', '11', '46939', '86074', '13'), +('14', '78', '11', '80629', '85736', '13'), +('14', '78', '11', '46889', '84984', '13'), +('14', '79', '22', '21807', '0', '13'), +('14', '79', '22', '21805', '0', '13'), +('14', '79', '22', '12425', '0', '13'), +('14', '79', '22', '39342', '0', '13'), +('14', '79', '1', '80676', '98635', '13'), +('14', '79', '1', '80639', '89930', '13'), +('14', '79', '1', '80628', '86052', '13'), +('14', '79', '1', '46882', '85815', '13'), +('14', '79', '2', '53452', '77218', '13'), +('14', '79', '2', '39358', '64443', '13'), +('14', '79', '2', '39285', '58770', '13'), +('14', '79', '2', '83563', '58294', '13'), +('14', '79', '3', '80647', '90231', '13'), +('14', '79', '3', '46874', '79276', '13'), +('14', '79', '3', '46852', '72073', '13'), +('14', '79', '3', '46902', '71359', '13'), +('14', '79', '5', '80661', '95306', '13'), +('14', '79', '5', '80615', '86295', '13'), +('14', '79', '5', '46934', '85700', '13'), +('14', '79', '5', '46868', '79382', '13'), +('14', '79', '8', '80679', '98435', '13'), +('14', '79', '8', '80649', '89981', '13'), +('14', '79', '8', '46936', '85663', '13'), +('14', '79', '8', '46847', '72167', '13'), +('14', '79', '6', '80646', '89325', '13'), +('14', '79', '6', '46883', '85699', '13'), +('14', '79', '6', '46933', '85565', '13'), +('14', '79', '6', '46884', '85121', '13'), +('14', '79', '17', '53457', '79515', '13'), +('14', '79', '17', '83606', '64724', '13'), +('14', '79', '17', '70949', '59368', '13'), +('14', '79', '17', '70714', '48613', '13'), +('14', '79', '7', '53453', '76841', '13'), +('14', '79', '7', '83567', '57943', '13'), +('14', '79', '7', '70945', '52278', '13'), +('14', '79', '7', '83543', '50346', '13'), +('14', '79', '9', '46938', '86047', '13'), +('14', '79', '9', '53454', '76707', '13'), +('14', '79', '9', '39336', '65055', '13'), +('14', '79', '9', '51709', '62809', '13'), +('14', '79', '15', '79909', '102299', '13'), +('14', '79', '15', '80666', '98734', '13'), +('14', '79', '15', '80686', '98601', '13'), +('14', '79', '15', '79908', '93613', '13'), +('14', '79', '20', '80680', '98854', '13'), +('14', '79', '20', '46886', '85760', '13'), +('14', '79', '20', '80620', '85032', '13'), +('14', '79', '20', '46911', '79524', '13'), +('14', '79', '12', '53455', '76784', '13'), +('14', '79', '12', '83571', '57838', '13'), +('14', '79', '12', '83553', '53541', '13'), +('14', '79', '12', '70947', '52074', '13'), +('14', '79', '18', '53458', '78978', '13'), +('14', '79', '18', '46810', '63841', '13'), +('14', '79', '18', '83610', '63511', '13'), +('14', '79', '18', '70950', '55212', '13'), +('14', '79', '19', '53456', '76867', '13'), +('14', '79', '19', '83575', '58638', '13'), +('14', '79', '19', '39223', '53345', '13'), +('14', '79', '19', '83497', '52034', '13'), +('14', '79', '13', '80633', '89615', '13'), +('14', '79', '13', '80624', '83313', '13'), +('14', '79', '13', '46906', '69502', '13'), +('14', '79', '13', '39351', '63751', '13'), +('14', '79', '14', '80665', '92449', '13'), +('14', '79', '14', '80635', '88287', '13'), +('14', '79', '14', '80625', '84643', '13'), +('14', '79', '14', '46925', '79189', '13'), +('14', '79', '11', '80668', '98699', '13'), +('14', '79', '11', '46939', '86082', '13'), +('14', '79', '11', '80629', '85743', '13'), +('14', '79', '11', '46889', '84992', '13'), +('14', '80', '22', '21807', '0', '14'), +('14', '80', '22', '21805', '0', '14'), +('14', '80', '22', '12425', '0', '14'), +('14', '80', '22', '39342', '0', '14'), +('14', '80', '1', '102604', '130101', '14'), +('14', '80', '1', '102639', '128970', '14'), +('14', '80', '1', '102641', '128894', '14'), +('14', '80', '1', '102640', '128534', '14'), +('14', '80', '2', '102024', '87857', '14'), +('14', '80', '2', '102276', '79095', '14'), +('14', '80', '2', '53452', '77226', '14'), +('14', '80', '2', '39358', '64448', '14'), +('14', '80', '3', '102605', '138300', '14'), +('14', '80', '3', '102742', '124266', '14'), +('14', '80', '3', '102560', '119677', '14'), +('14', '80', '3', '102741', '114724', '14'), +('14', '80', '5', '102731', '142572', '14'), +('14', '80', '5', '102606', '135611', '14'), +('14', '80', '5', '102730', '123899', '14'), +('14', '80', '5', '102565', '117865', '14'), +('14', '80', '8', '102728', '141505', '14'), +('14', '80', '8', '102608', '137764', '14'), +('14', '80', '8', '102728', '119519', '14'), +('14', '80', '8', '80679', '98436', '14'), +('14', '80', '6', '102607', '138522', '14'), +('14', '80', '6', '102561', '119611', '14'), +('14', '80', '6', '80646', '89325', '14'), +('14', '80', '6', '102529', '86229', '14'), +('14', '80', '17', '102027', '93139', '14'), +('14', '80', '17', '102279', '84355', '14'), +('14', '80', '17', '53457', '79523', '14'), +('14', '80', '17', '83606', '64731', '14'), +('14', '80', '7', '102025', '88686', '14'), +('14', '80', '7', '102277', '80047', '14'), +('14', '80', '7', '53453', '76847', '14'), +('14', '80', '7', '83567', '57952', '14'), +('14', '80', '9', '67098', '231311', '14'), +('14', '80', '9', '46938', '86055', '14'), +('14', '80', '9', '53454', '76713', '14'), +('14', '80', '9', '102291', '74257', '14'), +('14', '80', '15', '102723', '141203', '14'), +('14', '80', '15', '102609', '132534', '14'), +('14', '80', '15', '102637', '129976', '14'), +('14', '80', '15', '102635', '129566', '14'), +('14', '80', '20', '102610', '138010', '14'), +('14', '80', '20', '102563', '119484', '14'), +('14', '80', '20', '80680', '98862', '14'), +('14', '80', '20', '46886', '85769', '14'), +('14', '80', '12', '53455', '76788', '14'), +('14', '80', '12', '102274', '75868', '14'), +('14', '80', '12', '83571', '57847', '14'), +('14', '80', '12', '83553', '53246', '14'), +('14', '80', '18', '102026', '89656', '14'), +('14', '80', '18', '102278', '80718', '14'), +('14', '80', '18', '53458', '78985', '14'), +('14', '80', '18', '46810', '63846', '14'), +('14', '80', '19', '53456', '76868', '14'), +('14', '80', '19', '102275', '76347', '14'), +('14', '80', '19', '83575', '58646', '14'), +('14', '80', '19', '39223', '53351', '14'), +('14', '80', '13', '102657', '124411', '14'), +('14', '80', '13', '102735', '123073', '14'), +('14', '80', '13', '102734', '113730', '14'), +('14', '80', '13', '102586', '108814', '14'), +('14', '80', '14', '102633', '136300', '14'), +('14', '80', '14', '102632', '136177', '14'), +('14', '80', '14', '102570', '119237', '14'), +('14', '80', '14', '80665', '92455', '14'), +('14', '80', '11', '102643', '132693', '14'), +('14', '80', '11', '80668', '98707', '14'), +('14', '80', '11', '46939', '86090', '14'), +('14', '80', '11', '80629', '85749', '14'), +('14', '81', '22', '21807', '0', '14'), +('14', '81', '22', '21805', '0', '14'), +('14', '81', '22', '12425', '0', '14'), +('14', '81', '22', '39342', '0', '14'), +('14', '81', '1', '102604', '130107', '14'), +('14', '81', '1', '102639', '128978', '14'), +('14', '81', '1', '102641', '128903', '14'), +('14', '81', '1', '102640', '128544', '14'), +('14', '81', '2', '102024', '87864', '14'), +('14', '81', '2', '102276', '79101', '14'), +('14', '81', '2', '53452', '77233', '14'), +('14', '81', '2', '39358', '64454', '14'), +('14', '81', '3', '102605', '138305', '14'), +('14', '81', '3', '102742', '124275', '14'), +('14', '81', '3', '102560', '119683', '14'), +('14', '81', '3', '102741', '114731', '14'), +('14', '81', '5', '102731', '142582', '14'), +('14', '81', '5', '102606', '135614', '14'), +('14', '81', '5', '102730', '123907', '14'), +('14', '81', '5', '102565', '117871', '14'), +('14', '81', '8', '102728', '141513', '14'), +('14', '81', '8', '102608', '137772', '14'), +('14', '81', '8', '102728', '119525', '14'), +('14', '81', '8', '80679', '98437', '14'), +('14', '81', '6', '102607', '138530', '14'), +('14', '81', '6', '102561', '119618', '14'), +('14', '81', '6', '80646', '89326', '14'), +('14', '81', '6', '102529', '86235', '14'), +('14', '81', '17', '102027', '93144', '14'), +('14', '81', '17', '102279', '84361', '14'), +('14', '81', '17', '53457', '79530', '14'), +('14', '81', '17', '83606', '64739', '14'), +('14', '81', '7', '102025', '88694', '14'), +('14', '81', '7', '102277', '80052', '14'), +('14', '81', '7', '53453', '76853', '14'), +('14', '81', '7', '83567', '57960', '14'), +('14', '81', '9', '67098', '234207', '14'), +('14', '81', '9', '46938', '86064', '14'), +('14', '81', '9', '53454', '76720', '14'), +('14', '81', '9', '102291', '74263', '14'), +('14', '81', '15', '102723', '141211', '14'), +('14', '81', '15', '102609', '132542', '14'), +('14', '81', '15', '102637', '129985', '14'), +('14', '81', '15', '102635', '129569', '14'), +('14', '81', '20', '102610', '138019', '14'), +('14', '81', '20', '102563', '119487', '14'), +('14', '81', '20', '80680', '98870', '14'), +('14', '81', '20', '46886', '85778', '14'), +('14', '81', '12', '53455', '76792', '14'), +('14', '81', '12', '102274', '75875', '14'), +('14', '81', '12', '83571', '57855', '14'), +('14', '81', '12', '83553', '52952', '14'), +('14', '81', '18', '102026', '89658', '14'), +('14', '81', '18', '102278', '80727', '14'), +('14', '81', '18', '53458', '78993', '14'), +('14', '81', '18', '46810', '63852', '14'), +('14', '81', '19', '53456', '76869', '14'), +('14', '81', '19', '102275', '76350', '14'), +('14', '81', '19', '83575', '58655', '14'), +('14', '81', '19', '39223', '53356', '14'), +('14', '81', '13', '102657', '124416', '14'), +('14', '81', '13', '102735', '123081', '14'), +('14', '81', '13', '102734', '113736', '14'), +('14', '81', '13', '102586', '108816', '14'), +('14', '81', '14', '102633', '136307', '14'), +('14', '81', '14', '102632', '136184', '14'), +('14', '81', '14', '102570', '119246', '14'), +('14', '81', '14', '80665', '92460', '14'), +('14', '81', '11', '102643', '132698', '14'), +('14', '81', '11', '80668', '98715', '14'), +('14', '81', '11', '46939', '86098', '14'), +('14', '81', '11', '80629', '85756', '14'), +('14', '82', '22', '21807', '0', '14'), +('14', '82', '22', '21805', '0', '14'), +('14', '82', '22', '12425', '0', '14'), +('14', '82', '22', '39342', '0', '14'), +('14', '82', '1', '102604', '130114', '14'), +('14', '82', '1', '102639', '128986', '14'), +('14', '82', '1', '102641', '128913', '14'), +('14', '82', '1', '102640', '128555', '14'), +('14', '82', '2', '102024', '87871', '14'), +('14', '82', '2', '102276', '79107', '14'), +('14', '82', '2', '53452', '77241', '14'), +('14', '82', '2', '39358', '64459', '14'), +('14', '82', '3', '102605', '138309', '14'), +('14', '82', '3', '102742', '124283', '14'), +('14', '82', '3', '102560', '119690', '14'), +('14', '82', '3', '102741', '114739', '14'), +('14', '82', '5', '102731', '142592', '14'), +('14', '82', '5', '102606', '135618', '14'), +('14', '82', '5', '102730', '123914', '14'), +('14', '82', '5', '102565', '117878', '14'), +('14', '82', '8', '102728', '141521', '14'), +('14', '82', '8', '102608', '137780', '14'), +('14', '82', '8', '102728', '119530', '14'), +('14', '82', '8', '80679', '98438', '14'), +('14', '82', '6', '102607', '138538', '14'), +('14', '82', '6', '102561', '119625', '14'), +('14', '82', '6', '80646', '89327', '14'), +('14', '82', '6', '102529', '86242', '14'), +('14', '82', '17', '102027', '93149', '14'), +('14', '82', '17', '102279', '84366', '14'), +('14', '82', '17', '53457', '79538', '14'), +('14', '82', '17', '83606', '64747', '14'), +('14', '82', '7', '102025', '88702', '14'), +('14', '82', '7', '102277', '80057', '14'), +('14', '82', '7', '53453', '76859', '14'), +('14', '82', '7', '83567', '57969', '14'), +('14', '82', '9', '67098', '237102', '14'), +('14', '82', '9', '46938', '86073', '14'), +('14', '82', '9', '53454', '76727', '14'), +('14', '82', '9', '102291', '74268', '14'), +('14', '82', '15', '102723', '141219', '14'), +('14', '82', '15', '102609', '132550', '14'), +('14', '82', '15', '102637', '129995', '14'), +('14', '82', '15', '102635', '129573', '14'), +('14', '82', '20', '102610', '138029', '14'), +('14', '82', '20', '102563', '119490', '14'), +('14', '82', '20', '80680', '98878', '14'), +('14', '82', '20', '46886', '85786', '14'), +('14', '82', '12', '53455', '76796', '14'), +('14', '82', '12', '102274', '75881', '14'), +('14', '82', '12', '83571', '57864', '14'), +('14', '82', '12', '83553', '52657', '14'), +('14', '82', '18', '102026', '89660', '14'), +('14', '82', '18', '102278', '80735', '14'), +('14', '82', '18', '53458', '79001', '14'), +('14', '82', '18', '46810', '63857', '14'), +('14', '82', '19', '53456', '76869', '14'), +('14', '82', '19', '102275', '76352', '14'), +('14', '82', '19', '83575', '58663', '14'), +('14', '82', '19', '39223', '53362', '14'), +('14', '82', '13', '102657', '124420', '14'), +('14', '82', '13', '102735', '123088', '14'), +('14', '82', '13', '102734', '113743', '14'), +('14', '82', '13', '102586', '108819', '14'), +('14', '82', '14', '102633', '136313', '14'), +('14', '82', '14', '102632', '136191', '14'), +('14', '82', '14', '102570', '119255', '14'), +('14', '82', '14', '80665', '92466', '14'), +('14', '82', '11', '102643', '132703', '14'), +('14', '82', '11', '80668', '98724', '14'), +('14', '82', '11', '46939', '86105', '14'), +('14', '82', '11', '80629', '85763', '14'), +('14', '83', '22', '21807', '0', '14'), +('14', '83', '22', '21805', '0', '14'), +('14', '83', '22', '12425', '0', '14'), +('14', '83', '22', '39342', '0', '14'), +('14', '83', '1', '102604', '130121', '14'), +('14', '83', '1', '102639', '128994', '14'), +('14', '83', '1', '102641', '128923', '14'), +('14', '83', '1', '102640', '128565', '14'), +('14', '83', '2', '102024', '87877', '14'), +('14', '83', '2', '102276', '79113', '14'), +('14', '83', '2', '53452', '77248', '14'), +('14', '83', '2', '39358', '64465', '14'), +('14', '83', '3', '102605', '138314', '14'), +('14', '83', '3', '102742', '124292', '14'), +('14', '83', '3', '102560', '119696', '14'), +('14', '83', '3', '102741', '114746', '14'), +('14', '83', '5', '102731', '142602', '14'), +('14', '83', '5', '102606', '135622', '14'), +('14', '83', '5', '102730', '123922', '14'), +('14', '83', '5', '102565', '117885', '14'), +('14', '83', '8', '102728', '141529', '14'), +('14', '83', '8', '102608', '137788', '14'), +('14', '83', '8', '102728', '119536', '14'), +('14', '83', '8', '80679', '98439', '14'), +('14', '83', '6', '102607', '138545', '14'), +('14', '83', '6', '102561', '119633', '14'), +('14', '83', '6', '80646', '89328', '14'), +('14', '83', '6', '102529', '86248', '14'), +('14', '83', '17', '102027', '93154', '14'), +('14', '83', '17', '102279', '84371', '14'), +('14', '83', '17', '53457', '79545', '14'), +('14', '83', '17', '83606', '64754', '14'), +('14', '83', '7', '102025', '88709', '14'), +('14', '83', '7', '102277', '80063', '14'), +('14', '83', '7', '53453', '76865', '14'), +('14', '83', '7', '83567', '57977', '14'), +('14', '83', '9', '67098', '239998', '14'), +('14', '83', '9', '46938', '86081', '14'), +('14', '83', '9', '53454', '76734', '14'), +('14', '83', '9', '102291', '74274', '14'), +('14', '83', '15', '102723', '141227', '14'), +('14', '83', '15', '102609', '132557', '14'), +('14', '83', '15', '102637', '130004', '14'), +('14', '83', '15', '102635', '129577', '14'), +('14', '83', '20', '102610', '138038', '14'), +('14', '83', '20', '102563', '119494', '14'), +('14', '83', '20', '80680', '98886', '14'), +('14', '83', '20', '46886', '85795', '14'), +('14', '83', '12', '53455', '76800', '14'), +('14', '83', '12', '102274', '75887', '14'), +('14', '83', '12', '83571', '57872', '14'), +('14', '83', '12', '83553', '52363', '14'), +('14', '83', '18', '102026', '89663', '14'), +('14', '83', '18', '102278', '80744', '14'), +('14', '83', '18', '53458', '79009', '14'), +('14', '83', '18', '46810', '63862', '14'), +('14', '83', '19', '53456', '76870', '14'), +('14', '83', '19', '102275', '76354', '14'), +('14', '83', '19', '83575', '58672', '14'), +('14', '83', '19', '39223', '53367', '14'), +('14', '83', '13', '102657', '124425', '14'), +('14', '83', '13', '102735', '123096', '14'), +('14', '83', '13', '102734', '113749', '14'), +('14', '83', '13', '102586', '108821', '14'), +('14', '83', '14', '102633', '136320', '14'), +('14', '83', '14', '102632', '136198', '14'), +('14', '83', '14', '102570', '119264', '14'), +('14', '83', '14', '80665', '92472', '14'), +('14', '83', '11', '102643', '132708', '14'), +('14', '83', '11', '80668', '98732', '14'), +('14', '83', '11', '46939', '86113', '14'), +('14', '83', '11', '80629', '85769', '14'), +('14', '84', '22', '21807', '0', '14'), +('14', '84', '22', '21805', '0', '14'), +('14', '84', '22', '12425', '0', '14'), +('14', '84', '22', '39342', '0', '14'), +('14', '84', '1', '102604', '130127', '14'), +('14', '84', '1', '102639', '129002', '14'), +('14', '84', '1', '102641', '128932', '14'), +('14', '84', '1', '102640', '128575', '14'), +('14', '84', '2', '102024', '87884', '14'), +('14', '84', '2', '102276', '79118', '14'), +('14', '84', '2', '53452', '77256', '14'), +('14', '84', '2', '39358', '64470', '14'), +('14', '84', '3', '102605', '138318', '14'), +('14', '84', '3', '102742', '124301', '14'), +('14', '84', '3', '102560', '119702', '14'), +('14', '84', '3', '102741', '114754', '14'), +('14', '84', '5', '102731', '142612', '14'), +('14', '84', '5', '102606', '135625', '14'), +('14', '84', '5', '102730', '123930', '14'), +('14', '84', '5', '102565', '117891', '14'), +('14', '84', '8', '102728', '141537', '14'), +('14', '84', '8', '102608', '137796', '14'), +('14', '84', '8', '102728', '119542', '14'), +('14', '84', '8', '80679', '98440', '14'), +('14', '84', '6', '102607', '138553', '14'), +('14', '84', '6', '102561', '119640', '14'), +('14', '84', '6', '80646', '89328', '14'), +('14', '84', '6', '102529', '86254', '14'), +('14', '84', '17', '102027', '93159', '14'), +('14', '84', '17', '102279', '84377', '14'), +('14', '84', '17', '53457', '79553', '14'), +('14', '84', '17', '83606', '64762', '14'), +('14', '84', '7', '102025', '88717', '14'), +('14', '84', '7', '102277', '80068', '14'), +('14', '84', '7', '53453', '76871', '14'), +('14', '84', '7', '83567', '57986', '14'), +('14', '84', '9', '67098', '242895', '14'), +('14', '84', '9', '46938', '86090', '14'), +('14', '84', '9', '53454', '76741', '14'), +('14', '84', '9', '102291', '74279', '14'), +('14', '84', '15', '102723', '141235', '14'), +('14', '84', '15', '102609', '132565', '14'), +('14', '84', '15', '102637', '130014', '14'), +('14', '84', '15', '102635', '129580', '14'), +('14', '84', '20', '102610', '138047', '14'), +('14', '84', '20', '102563', '119497', '14'), +('14', '84', '20', '80680', '98894', '14'), +('14', '84', '20', '46886', '85804', '14'), +('14', '84', '12', '53455', '76804', '14'), +('14', '84', '12', '102274', '75893', '14'), +('14', '84', '12', '83571', '57881', '14'), +('14', '84', '12', '83553', '52068', '14'), +('14', '84', '18', '102026', '89665', '14'), +('14', '84', '18', '102278', '80753', '14'), +('14', '84', '18', '53458', '79016', '14'), +('14', '84', '18', '46810', '63868', '14'), +('14', '84', '19', '53456', '76870', '14'), +('14', '84', '19', '102275', '76356', '14'), +('14', '84', '19', '83575', '58681', '14'), +('14', '84', '19', '39223', '53372', '14'), +('14', '84', '13', '102657', '124430', '14'), +('14', '84', '13', '102735', '123103', '14'), +('14', '84', '13', '102734', '113755', '14'), +('14', '84', '13', '102586', '108823', '14'), +('14', '84', '14', '102633', '136326', '14'), +('14', '84', '14', '102632', '136205', '14'), +('14', '84', '14', '102570', '119273', '14'), +('14', '84', '14', '80665', '92477', '14'), +('14', '84', '11', '102643', '132713', '14'), +('14', '84', '11', '80668', '98740', '14'), +('14', '84', '11', '46939', '86121', '14'), +('14', '84', '11', '80629', '85776', '14'), +('14', '85', '22', '12425', '0', '16'), +('14', '85', '22', '21807', '0', '16'), +('14', '85', '22', '39342', '0', '16'), +('14', '85', '22', '23597', '0', '16'), +('14', '85', '1', '111306', '251923', '16'), +('14', '85', '1', '111304', '251395', '16'), +('14', '85', '1', '111307', '251345', '16'), +('14', '85', '1', '111300', '250921', '16'), +('14', '85', '2', '94056', '157353', '16'), +('14', '85', '2', '62985', '156928', '16'), +('14', '85', '2', '104424', '133932', '16'), +('14', '85', '2', '54846', '100961', '16'), +('14', '85', '3', '111314', '252137', '16'), +('14', '85', '3', '111316', '250836', '16'), +('14', '85', '3', '111315', '250371', '16'), +('14', '85', '3', '111013', '220436', '16'), +('14', '85', '5', '111319', '252125', '16'), +('14', '85', '5', '111321', '250897', '16'), +('14', '85', '5', '111318', '250527', '16'), +('14', '85', '5', '111018', '220424', '16'), +('14', '85', '8', '111332', '252327', '16'), +('14', '85', '8', '111329', '251886', '16'), +('14', '85', '8', '111330', '250665', '16'), +('14', '85', '8', '111331', '249886', '16'), +('14', '85', '6', '111323', '252222', '16'), +('14', '85', '6', '111326', '251133', '16'), +('14', '85', '6', '111325', '250939', '16'), +('14', '85', '6', '111022', '220621', '16'), +('14', '85', '17', '56043', '163506', '16'), +('14', '85', '17', '56084', '162700', '16'), +('14', '85', '17', '104427', '139517', '16'), +('14', '85', '17', '54854', '105109', '16'), +('14', '85', '7', '56080', '155399', '16'), +('14', '85', '7', '56040', '155397', '16'), +('14', '85', '7', '104425', '133277', '16'), +('14', '85', '7', '54848', '100480', '16'), +('14', '85', '9', '67098', '245791', '16'), +('14', '85', '9', '56070', '152005', '16'), +('14', '85', '9', '56031', '151972', '16'), +('14', '85', '9', '62984', '151792', '16'), +('14', '85', '15', '111349', '253356', '16'), +('14', '85', '15', '111340', '252525', '16'), +('14', '85', '15', '111344', '252172', '16'), +('14', '85', '15', '111346', '251440', '16'), +('14', '85', '20', '111356', '252315', '16'), +('14', '85', '20', '111352', '251329', '16'), +('14', '85', '20', '111351', '251042', '16'), +('14', '85', '20', '111054', '220614', '16'), +('14', '85', '12', '56035', '153097', '16'), +('14', '85', '12', '56074', '152350', '16'), +('14', '85', '12', '104422', '130531', '16'), +('14', '85', '12', '49656', '100386', '16'), +('14', '85', '18', '56041', '162855', '16'), +('14', '85', '18', '62986', '160447', '16'), +('14', '85', '18', '104426', '136219', '16'), +('14', '85', '18', '54851', '102073', '16'), +('14', '85', '19', '81763', '158222', '16'), +('14', '85', '19', '62990', '157948', '16'), +('14', '85', '19', '56075', '157823', '16'), +('14', '85', '19', '56037', '157535', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '85', '13', '111521', '255821', '16'), +('14', '85', '13', '111524', '243454', '16'), +('14', '85', '13', '111519', '243175', '16'), +('14', '85', '13', '111221', '225968', '16'), +('14', '85', '14', '111537', '252935', '16'), +('14', '85', '14', '111535', '252018', '16'), +('14', '85', '14', '111237', '221232', '16'), +('14', '85', '14', '111235', '220415', '16'), +('14', '85', '11', '111335', '251666', '16'), +('14', '85', '11', '111337', '251147', '16'), +('14', '85', '11', '111338', '249275', '16'), +('14', '85', '11', '111034', '220065', '16'), +('14', '85', '22', '21807', '0', '15'), +('14', '85', '22', '21805', '0', '15'), +('14', '85', '22', '12425', '0', '15'), +('14', '85', '22', '7867', '0', '15'), +('14', '85', '1', '107040', '184254', '15'), +('14', '85', '1', '107053', '184123', '15'), +('14', '85', '1', '107052', '183382', '15'), +('14', '85', '1', '107054', '183075', '15'), +('14', '85', '2', '94056', '157353', '15'), +('14', '85', '2', '62985', '156928', '15'), +('14', '85', '2', '104424', '133932', '15'), +('14', '85', '2', '54846', '100961', '15'), +('14', '85', '3', '107041', '187081', '15'), +('14', '85', '3', '107055', '185487', '15'), +('14', '85', '3', '106828', '175990', '15'), +('14', '85', '3', '106841', '174468', '15'), +('14', '85', '5', '107042', '185085', '15'), +('14', '85', '5', '107056', '184849', '15'), +('14', '85', '5', '106829', '175132', '15'), +('14', '85', '5', '106747', '155473', '15'), +('14', '85', '8', '107044', '188169', '15'), +('14', '85', '8', '107058', '187974', '15'), +('14', '85', '8', '106831', '177082', '15'), +('14', '85', '8', '106844', '175118', '15'), +('14', '85', '6', '107043', '187148', '15'), +('14', '85', '6', '107057', '186163', '15'), +('14', '85', '6', '106830', '176363', '15'), +('14', '85', '6', '106843', '173569', '15'), +('14', '85', '17', '56043', '163506', '15'), +('14', '85', '17', '56084', '162700', '15'), +('14', '85', '17', '104427', '139517', '15'), +('14', '85', '17', '54854', '105109', '15'), +('14', '85', '7', '56080', '155399', '15'), +('14', '85', '7', '56040', '155397', '15'), +('14', '85', '7', '104425', '133277', '15'), +('14', '85', '7', '54848', '100480', '15'), +('14', '85', '9', '67098', '245791', '15'), +('14', '85', '9', '56070', '152005', '15'), +('14', '85', '9', '56031', '151972', '15'), +('14', '85', '9', '62984', '151792', '15'), +('14', '85', '15', '107046', '185637', '15'), +('14', '85', '15', '107047', '184933', '15'), +('14', '85', '15', '107051', '182432', '15'), +('14', '85', '15', '107050', '181812', '15'), +('14', '85', '20', '107059', '188872', '15'), +('14', '85', '20', '107048', '188619', '15'), +('14', '85', '20', '106834', '178433', '15'), +('14', '85', '20', '106845', '176314', '15'), +('14', '85', '12', '56035', '153097', '15'), +('14', '85', '12', '56074', '152350', '15'), +('14', '85', '12', '104422', '130531', '15'), +('14', '85', '12', '53455', '76808', '15'), +('14', '85', '18', '56041', '162855', '15'), +('14', '85', '18', '62986', '160447', '15'), +('14', '85', '18', '104426', '136219', '15'), +('14', '85', '18', '54851', '102073', '15'), +('14', '85', '19', '81763', '158222', '15'), +('14', '85', '19', '62990', '157948', '15'), +('14', '85', '19', '56075', '157823', '15'), +('14', '85', '19', '56037', '157535', '15'), +('14', '85', '13', '106864', '176222', '15'), +('14', '85', '13', '106861', '175548', '15'), +('14', '85', '13', '106764', '158050', '15'), +('14', '85', '13', '62932', '156794', '15'), +('14', '85', '14', '107065', '186464', '15'), +('14', '85', '14', '107063', '185904', '15'), +('14', '85', '14', '106850', '175454', '15'), +('14', '85', '14', '106852', '175174', '15'), +('14', '85', '11', '107045', '186039', '15'), +('14', '85', '11', '106832', '174173', '15'), +('14', '85', '11', '56099', '156312', '15'), +('14', '85', '11', '106739', '155289', '15'), +('14', '86', '22', '12425', '0', '16'), +('14', '86', '22', '21807', '0', '16'), +('14', '86', '22', '39342', '0', '16'), +('14', '86', '22', '23597', '0', '16'), +('14', '86', '1', '111306', '251929', '16'), +('14', '86', '1', '111304', '251400', '16'), +('14', '86', '1', '111307', '251354', '16'), +('14', '86', '1', '111300', '250928', '16'), +('14', '86', '2', '94056', '157356', '16'), +('14', '86', '2', '62985', '156932', '16'), +('14', '86', '2', '104424', '133940', '16'), +('14', '86', '2', '54846', '100966', '16'), +('14', '86', '3', '111314', '252144', '16'), +('14', '86', '3', '111316', '250842', '16'), +('14', '86', '3', '111315', '250378', '16'), +('14', '86', '3', '111013', '220443', '16'), +('14', '86', '5', '111319', '252133', '16'), +('14', '86', '5', '111321', '250903', '16'), +('14', '86', '5', '111318', '250535', '16'), +('14', '86', '5', '111018', '220432', '16'), +('14', '86', '8', '111332', '252334', '16'), +('14', '86', '8', '111329', '251894', '16'), +('14', '86', '8', '111330', '250671', '16'), +('14', '86', '8', '111331', '249892', '16'), +('14', '86', '6', '111323', '252229', '16'), +('14', '86', '6', '111326', '251141', '16'), +('14', '86', '6', '111325', '250945', '16'), +('14', '86', '6', '111022', '220628', '16'), +('14', '86', '17', '56043', '163512', '16'), +('14', '86', '17', '56084', '162707', '16'), +('14', '86', '17', '104427', '139524', '16'), +('14', '86', '17', '54854', '105114', '16'), +('14', '86', '7', '56040', '155408', '16'), +('14', '86', '7', '56080', '155407', '16'), +('14', '86', '7', '104425', '133283', '16'), +('14', '86', '7', '54848', '100487', '16'), +('14', '86', '9', '67098', '248687', '16'), +('14', '86', '9', '56070', '152010', '16'), +('14', '86', '9', '56031', '151982', '16'), +('14', '86', '9', '62984', '151798', '16'), +('14', '86', '15', '111349', '253365', '16'), +('14', '86', '15', '111340', '252531', '16'), +('14', '86', '15', '111344', '252177', '16'), +('14', '86', '15', '111346', '251447', '16'), +('14', '86', '20', '111356', '252322', '16'), +('14', '86', '20', '111352', '251335', '16'), +('14', '86', '20', '111351', '251050', '16'), +('14', '86', '20', '111054', '220621', '16'), +('14', '86', '12', '56035', '153107', '16'), +('14', '86', '12', '56074', '152357', '16'), +('14', '86', '12', '104422', '130540', '16'), +('14', '86', '12', '49656', '100387', '16'), +('14', '86', '18', '56041', '162864', '16'), +('14', '86', '18', '62986', '160453', '16'), +('14', '86', '18', '104426', '136222', '16'), +('14', '86', '18', '54851', '102077', '16'), +('14', '86', '19', '81763', '158233', '16'), +('14', '86', '19', '62990', '157956', '16'), +('14', '86', '19', '56075', '157828', '16'), +('14', '86', '19', '56037', '157539', '16'), +('14', '86', '13', '111521', '255827', '16'), +('14', '86', '13', '111524', '243461', '16'), +('14', '86', '13', '111519', '243183', '16'), +('14', '86', '13', '111221', '225974', '16'), +('14', '86', '14', '111537', '252941', '16'), +('14', '86', '14', '111535', '252023', '16'), +('14', '86', '14', '111237', '221238', '16'), +('14', '86', '14', '111235', '220420', '16'), +('14', '86', '11', '111335', '251673', '16'), +('14', '86', '11', '111337', '251154', '16'), +('14', '86', '11', '111338', '249281', '16'), +('14', '86', '11', '111034', '220072', '16'), +('14', '87', '22', '12425', '0', '16'), +('14', '87', '22', '21807', '0', '16'), +('14', '87', '22', '39342', '0', '16'), +('14', '87', '22', '23597', '0', '16'), +('14', '87', '1', '111306', '251935', '16'), +('14', '87', '1', '111304', '251405', '16'), +('14', '87', '1', '111307', '251363', '16'), +('14', '87', '1', '111300', '250935', '16'), +('14', '87', '2', '94056', '157360', '16'), +('14', '87', '2', '62985', '156937', '16'), +('14', '87', '2', '104424', '133949', '16'), +('14', '87', '2', '54846', '100971', '16'), +('14', '87', '3', '111314', '252152', '16'), +('14', '87', '3', '111316', '250849', '16'), +('14', '87', '3', '111315', '250385', '16'), +('14', '87', '3', '111013', '220450', '16'), +('14', '87', '5', '111319', '252141', '16'), +('14', '87', '5', '111321', '250909', '16'), +('14', '87', '5', '111318', '250543', '16'), +('14', '87', '5', '111018', '220440', '16'), +('14', '87', '8', '111332', '252341', '16'), +('14', '87', '8', '111329', '251902', '16'), +('14', '87', '8', '111330', '250677', '16'), +('14', '87', '8', '111331', '249898', '16'), +('14', '87', '6', '111323', '252235', '16'), +('14', '87', '6', '111326', '251149', '16'), +('14', '87', '6', '111325', '250950', '16'), +('14', '87', '6', '111022', '220634', '16'), +('14', '87', '17', '56043', '163518', '16'), +('14', '87', '17', '56084', '162714', '16'), +('14', '87', '17', '104427', '139531', '16'), +('14', '87', '17', '54854', '105119', '16'), +('14', '87', '7', '56040', '155418', '16'), +('14', '87', '7', '56080', '155415', '16'), +('14', '87', '7', '104425', '133289', '16'), +('14', '87', '7', '54848', '100494', '16'), +('14', '87', '9', '67098', '251584', '16'), +('14', '87', '9', '56070', '152016', '16'), +('14', '87', '9', '56031', '151993', '16'), +('14', '87', '9', '62984', '151804', '16'), +('14', '87', '15', '111349', '253374', '16'), +('14', '87', '15', '111340', '252538', '16'), +('14', '87', '15', '111344', '252182', '16'), +('14', '87', '15', '111346', '251453', '16'), +('14', '87', '20', '111356', '252329', '16'), +('14', '87', '20', '111352', '251341', '16'), +('14', '87', '20', '111351', '251057', '16'), +('14', '87', '20', '111054', '220628', '16'), +('14', '87', '12', '56035', '153117', '16'), +('14', '87', '12', '56074', '152363', '16'), +('14', '87', '12', '104422', '130548', '16'), +('14', '87', '12', '49656', '100388', '16'), +('14', '87', '18', '56041', '162873', '16'), +('14', '87', '18', '62986', '160459', '16'), +('14', '87', '18', '104426', '136225', '16'), +('14', '87', '18', '54851', '102082', '16'), +('14', '87', '19', '81763', '158243', '16'), +('14', '87', '19', '62990', '157964', '16'), +('14', '87', '19', '56075', '157833', '16'), +('14', '87', '19', '56037', '157542', '16'), +('14', '87', '13', '111521', '255833', '16'), +('14', '87', '13', '111524', '243469', '16'), +('14', '87', '13', '111519', '243191', '16'), +('14', '87', '13', '111221', '225981', '16'), +('14', '87', '14', '111537', '252946', '16'), +('14', '87', '14', '111535', '252028', '16'), +('14', '87', '14', '111237', '221243', '16'), +('14', '87', '14', '111235', '220425', '16'), +('14', '87', '11', '111335', '251679', '16'), +('14', '87', '11', '111337', '251161', '16'), +('14', '87', '11', '111338', '249288', '16'), +('14', '87', '11', '111034', '220078', '16'), +('14', '88', '22', '12425', '0', '16'), +('14', '88', '22', '21807', '0', '16'), +('14', '88', '22', '39342', '0', '16'), +('14', '88', '22', '23597', '0', '16'), +('14', '88', '1', '111306', '251941', '16'), +('14', '88', '1', '111304', '251411', '16'), +('14', '88', '1', '111307', '251372', '16'), +('14', '88', '1', '111300', '250942', '16'), +('14', '88', '2', '94056', '157364', '16'), +('14', '88', '2', '62985', '156941', '16'), +('14', '88', '2', '104424', '133958', '16'), +('14', '88', '2', '54846', '100976', '16'), +('14', '88', '3', '111314', '252159', '16'), +('14', '88', '3', '111316', '250856', '16'), +('14', '88', '3', '111315', '250392', '16'), +('14', '88', '3', '111013', '220458', '16'), +('14', '88', '5', '111319', '252149', '16'), +('14', '88', '5', '111321', '250914', '16'), +('14', '88', '5', '111318', '250551', '16'), +('14', '88', '5', '111018', '220448', '16'), +('14', '88', '8', '111332', '252349', '16'), +('14', '88', '8', '111329', '251910', '16'), +('14', '88', '8', '111330', '250683', '16'), +('14', '88', '8', '111331', '249904', '16'), +('14', '88', '6', '111323', '252242', '16'), +('14', '88', '6', '111326', '251157', '16'), +('14', '88', '6', '111325', '250955', '16'), +('14', '88', '6', '111022', '220641', '16'), +('14', '88', '17', '56043', '163525', '16'), +('14', '88', '17', '56084', '162721', '16'), +('14', '88', '17', '104427', '139538', '16'), +('14', '88', '17', '54854', '105124', '16'), +('14', '88', '7', '56040', '155429', '16'), +('14', '88', '7', '56080', '155423', '16'), +('14', '88', '7', '104425', '133295', '16'), +('14', '88', '7', '54848', '100500', '16'), +('14', '88', '9', '67098', '254480', '16'), +('14', '88', '9', '56070', '152021', '16'), +('14', '88', '9', '56031', '152003', '16'), +('14', '88', '9', '62984', '151809', '16'), +('14', '88', '15', '111349', '253383', '16'), +('14', '88', '15', '111340', '252544', '16'), +('14', '88', '15', '111344', '252188', '16'), +('14', '88', '15', '111346', '251460', '16'), +('14', '88', '20', '111356', '252336', '16'), +('14', '88', '20', '111352', '251347', '16'), +('14', '88', '20', '111351', '251065', '16'), +('14', '88', '20', '111054', '220635', '16'), +('14', '88', '12', '56035', '153127', '16'), +('14', '88', '12', '56074', '152369', '16'), +('14', '88', '12', '104422', '130556', '16'), +('14', '88', '12', '49656', '100389', '16'), +('14', '88', '18', '56041', '162882', '16'), +('14', '88', '18', '62986', '160464', '16'), +('14', '88', '18', '104426', '136227', '16'), +('14', '88', '18', '54851', '102087', '16'), +('14', '88', '19', '81763', '158254', '16'), +('14', '88', '19', '62990', '157972', '16'), +('14', '88', '19', '56075', '157839', '16'), +('14', '88', '19', '56037', '157545', '16'), +('14', '88', '13', '111521', '255839', '16'), +('14', '88', '13', '111524', '243476', '16'), +('14', '88', '13', '111519', '243199', '16'), +('14', '88', '13', '111221', '225987', '16'), +('14', '88', '14', '111537', '252952', '16'), +('14', '88', '14', '111535', '252032', '16'), +('14', '88', '14', '111237', '221249', '16'), +('14', '88', '14', '111235', '220429', '16'), +('14', '88', '11', '111335', '251686', '16'), +('14', '88', '11', '111337', '251167', '16'), +('14', '88', '11', '111338', '249295', '16'), +('14', '88', '11', '111034', '220085', '16'), +('14', '89', '22', '12425', '0', '16'), +('14', '89', '22', '21807', '0', '16'), +('14', '89', '22', '39342', '0', '16'), +('14', '89', '22', '23597', '0', '16'), +('14', '89', '1', '111306', '251947', '16'), +('14', '89', '1', '111304', '251416', '16'), +('14', '89', '1', '111307', '251381', '16'), +('14', '89', '1', '111300', '250949', '16'), +('14', '89', '2', '94056', '157368', '16'), +('14', '89', '2', '62985', '156945', '16'), +('14', '89', '2', '104424', '133967', '16'), +('14', '89', '2', '54846', '100981', '16'), +('14', '89', '3', '111314', '252166', '16'), +('14', '89', '3', '111316', '250862', '16'), +('14', '89', '3', '111315', '250399', '16'), +('14', '89', '3', '111013', '220465', '16'), +('14', '89', '5', '111319', '252157', '16'), +('14', '89', '5', '111321', '250920', '16'), +('14', '89', '5', '111318', '250559', '16'), +('14', '89', '5', '111018', '220456', '16'), +('14', '89', '8', '111332', '252356', '16'), +('14', '89', '8', '111329', '251919', '16'), +('14', '89', '8', '111330', '250689', '16'), +('14', '89', '8', '111331', '249910', '16'), +('14', '89', '6', '111323', '252248', '16'), +('14', '89', '6', '111326', '251166', '16'), +('14', '89', '6', '111325', '250960', '16'), +('14', '89', '6', '111022', '220647', '16'), +('14', '89', '17', '56043', '163531', '16'), +('14', '89', '17', '56084', '162728', '16'), +('14', '89', '17', '104427', '139544', '16'), +('14', '89', '17', '54854', '105130', '16'), +('14', '89', '7', '56040', '155440', '16'), +('14', '89', '7', '56080', '155430', '16'), +('14', '89', '7', '104425', '133301', '16'), +('14', '89', '7', '54848', '100507', '16'), +('14', '89', '9', '67098', '257377', '16'), +('14', '89', '9', '56070', '152027', '16'), +('14', '89', '9', '56031', '152013', '16'), +('14', '89', '9', '62984', '151815', '16'), +('14', '89', '15', '111349', '253391', '16'), +('14', '89', '15', '111340', '252550', '16'), +('14', '89', '15', '111344', '252193', '16'), +('14', '89', '15', '111346', '251466', '16'), +('14', '89', '20', '111356', '252343', '16'), +('14', '89', '20', '111352', '251353', '16'), +('14', '89', '20', '111351', '251073', '16'), +('14', '89', '20', '111054', '220642', '16'), +('14', '89', '12', '56035', '153137', '16'), +('14', '89', '12', '56074', '152376', '16'), +('14', '89', '12', '104422', '130564', '16'), +('14', '89', '12', '49656', '100390', '16'), +('14', '89', '18', '56041', '162890', '16'), +('14', '89', '18', '62986', '160470', '16'), +('14', '89', '18', '104426', '136230', '16'), +('14', '89', '18', '54851', '102091', '16'), +('14', '89', '19', '81763', '158264', '16'), +('14', '89', '19', '62990', '157980', '16'), +('14', '89', '19', '56075', '157844', '16'), +('14', '89', '19', '56037', '157548', '16'), +('14', '89', '13', '111521', '255845', '16'), +('14', '89', '13', '111524', '243483', '16'), +('14', '89', '13', '111519', '243207', '16'), +('14', '89', '13', '111221', '225994', '16'), +('14', '89', '14', '111537', '252958', '16'), +('14', '89', '14', '111535', '252037', '16'), +('14', '89', '14', '111237', '221255', '16'), +('14', '89', '14', '111235', '220434', '16'), +('14', '89', '11', '111335', '251692', '16'), +('14', '89', '11', '111337', '251174', '16'), +('14', '89', '11', '111338', '249302', '16'), +('14', '89', '11', '111034', '220091', '16'), +('14', '90', '22', '12425', '0', '17'), +('14', '90', '22', '21807', '0', '17'), +('14', '90', '22', '39342', '0', '17'), +('14', '90', '22', '23597', '0', '17'), +('14', '90', '1', '111306', '251953', '17'), +('14', '90', '1', '111304', '251421', '17'), +('14', '90', '1', '111307', '251390', '17'), +('14', '90', '1', '111300', '250957', '17'), +('14', '90', '2', '94056', '157372', '17'), +('14', '90', '2', '62985', '156949', '17'), +('14', '90', '2', '104424', '133976', '17'), +('14', '90', '2', '54846', '100986', '17'), +('14', '90', '3', '111314', '252173', '17'), +('14', '90', '3', '111316', '250869', '17'), +('14', '90', '3', '111315', '250406', '17'), +('14', '90', '3', '111013', '220472', '17'), +('14', '90', '5', '111319', '252165', '17'), +('14', '90', '5', '111321', '250926', '17'), +('14', '90', '5', '111318', '250567', '17'), +('14', '90', '5', '111018', '220464', '17'), +('14', '90', '8', '111332', '252363', '17'), +('14', '90', '8', '111329', '251927', '17'), +('14', '90', '8', '111330', '250695', '17'), +('14', '90', '8', '111331', '249916', '17'), +('14', '90', '6', '111323', '252255', '17'), +('14', '90', '6', '111326', '251174', '17'), +('14', '90', '6', '111325', '250965', '17'), +('14', '90', '6', '111022', '220654', '17'), +('14', '90', '17', '56043', '163537', '17'), +('14', '90', '17', '56084', '162735', '17'), +('14', '90', '17', '104427', '139551', '17'), +('14', '90', '17', '54854', '105135', '17'), +('14', '90', '7', '56040', '155451', '17'), +('14', '90', '7', '56080', '155438', '17'), +('14', '90', '7', '104425', '133307', '17'), +('14', '90', '7', '54848', '100513', '17'), +('14', '90', '9', '67098', '260274', '17'), +('14', '90', '9', '56070', '152032', '17'), +('14', '90', '9', '56031', '152024', '17'), +('14', '90', '9', '62984', '151821', '17'), +('14', '90', '15', '111349', '253400', '17'), +('14', '90', '15', '111340', '252556', '17'), +('14', '90', '15', '111344', '252198', '17'), +('14', '90', '15', '111346', '251473', '17'), +('14', '90', '20', '111356', '252351', '17'), +('14', '90', '20', '111352', '251359', '17'), +('14', '90', '20', '111351', '251081', '17'), +('14', '90', '20', '111054', '220649', '17'), +('14', '90', '12', '56035', '153147', '17'), +('14', '90', '12', '56074', '152382', '17'), +('14', '90', '12', '104422', '130573', '17'), +('14', '90', '12', '49656', '100391', '17'), +('14', '90', '18', '56041', '162899', '17'), +('14', '90', '18', '62986', '160476', '17'), +('14', '90', '18', '104426', '136233', '17'), +('14', '90', '18', '54851', '102096', '17'), +('14', '90', '19', '81763', '158274', '17'), +('14', '90', '19', '62990', '157988', '17'), +('14', '90', '19', '56075', '157849', '17'), +('14', '90', '19', '56037', '157551', '17'), +('14', '90', '13', '111521', '255851', '17'), +('14', '90', '13', '111524', '243490', '17'), +('14', '90', '13', '111519', '243215', '17'), +('14', '90', '13', '111221', '226000', '17'), +('14', '90', '14', '111537', '252964', '17'), +('14', '90', '14', '111535', '252042', '17'), +('14', '90', '14', '111237', '221261', '17'), +('14', '90', '14', '111235', '220439', '17'), +('14', '90', '11', '111335', '251698', '17'), +('14', '90', '11', '111337', '251181', '17'), +('14', '90', '11', '111338', '249309', '17'), +('14', '90', '11', '111034', '220097', '17'), +('14', '91', '22', '12425', '0', '17'), +('14', '91', '22', '21807', '0', '17'), +('14', '91', '22', '39342', '0', '17'), +('14', '91', '22', '23597', '0', '17'), +('14', '91', '1', '111306', '251960', '17'), +('14', '91', '1', '111304', '251427', '17'), +('14', '91', '1', '111307', '251399', '17'), +('14', '91', '1', '111300', '250964', '17'), +('14', '91', '2', '94056', '157376', '17'), +('14', '91', '2', '62985', '156954', '17'), +('14', '91', '2', '104424', '133985', '17'), +('14', '91', '2', '54846', '100992', '17'), +('14', '91', '3', '111314', '252180', '17'), +('14', '91', '3', '111316', '250876', '17'), +('14', '91', '3', '111315', '250413', '17'), +('14', '91', '3', '111013', '220479', '17'), +('14', '91', '5', '111319', '252173', '17'), +('14', '91', '5', '111321', '250931', '17'), +('14', '91', '5', '111318', '250575', '17'), +('14', '91', '5', '111018', '220472', '17'), +('14', '91', '8', '111332', '252370', '17'), +('14', '91', '8', '111329', '251935', '17'), +('14', '91', '8', '111330', '250701', '17'), +('14', '91', '8', '111331', '249922', '17'), +('14', '91', '6', '111323', '252261', '17'), +('14', '91', '6', '111326', '251182', '17'), +('14', '91', '6', '111325', '250971', '17'), +('14', '91', '6', '111022', '220660', '17'), +('14', '91', '17', '56043', '163543', '17'), +('14', '91', '17', '56084', '162742', '17'), +('14', '91', '17', '104427', '139558', '17'), +('14', '91', '17', '54854', '105140', '17'), +('14', '91', '7', '56040', '155462', '17'), +('14', '91', '7', '56080', '155446', '17'), +('14', '91', '7', '104425', '133313', '17'), +('14', '91', '7', '54848', '100520', '17'), +('14', '91', '9', '67098', '260278', '17'), +('14', '91', '9', '56070', '152038', '17'), +('14', '91', '9', '56031', '152034', '17'), +('14', '91', '9', '62984', '151827', '17'), +('14', '91', '15', '111349', '253409', '17'), +('14', '91', '15', '111340', '252562', '17'), +('14', '91', '15', '111344', '252203', '17'), +('14', '91', '15', '111346', '251479', '17'), +('14', '91', '20', '111356', '252358', '17'), +('14', '91', '20', '111352', '251365', '17'), +('14', '91', '20', '111351', '251089', '17'), +('14', '91', '20', '111054', '220657', '17'), +('14', '91', '12', '56035', '153156', '17'), +('14', '91', '12', '56074', '152389', '17'), +('14', '91', '12', '104422', '130581', '17'), +('14', '91', '12', '49656', '100392', '17'), +('14', '91', '18', '56041', '162908', '17'), +('14', '91', '18', '62986', '160482', '17'), +('14', '91', '18', '104426', '136236', '17'), +('14', '91', '18', '54851', '102100', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '91', '19', '81763', '158285', '17'), +('14', '91', '19', '62990', '157996', '17'), +('14', '91', '19', '56075', '157855', '17'), +('14', '91', '19', '56037', '157554', '17'), +('14', '91', '13', '111521', '255857', '17'), +('14', '91', '13', '111524', '243498', '17'), +('14', '91', '13', '111519', '243223', '17'), +('14', '91', '13', '111221', '226007', '17'), +('14', '91', '14', '111537', '252970', '17'), +('14', '91', '14', '111535', '252047', '17'), +('14', '91', '14', '111237', '221267', '17'), +('14', '91', '14', '111235', '220444', '17'), +('14', '91', '11', '111335', '251705', '17'), +('14', '91', '11', '111337', '251187', '17'), +('14', '91', '11', '111338', '249316', '17'), +('14', '91', '11', '111034', '220104', '17'), +('14', '92', '22', '12425', '0', '17'), +('14', '92', '22', '21807', '0', '17'), +('14', '92', '22', '39342', '0', '17'), +('14', '92', '22', '23597', '0', '17'), +('14', '92', '1', '111306', '251966', '17'), +('14', '92', '1', '111304', '251432', '17'), +('14', '92', '1', '111307', '251408', '17'), +('14', '92', '1', '111300', '250971', '17'), +('14', '92', '2', '94056', '157380', '17'), +('14', '92', '2', '62985', '156958', '17'), +('14', '92', '2', '104424', '133994', '17'), +('14', '92', '2', '54846', '100997', '17'), +('14', '92', '3', '111314', '252188', '17'), +('14', '92', '3', '111316', '250883', '17'), +('14', '92', '3', '111315', '250421', '17'), +('14', '92', '3', '111013', '220486', '17'), +('14', '92', '5', '111319', '252181', '17'), +('14', '92', '5', '111321', '250937', '17'), +('14', '92', '5', '111318', '250583', '17'), +('14', '92', '5', '111018', '220480', '17'), +('14', '92', '8', '111332', '252377', '17'), +('14', '92', '8', '111329', '251943', '17'), +('14', '92', '8', '111330', '250707', '17'), +('14', '92', '8', '111331', '249928', '17'), +('14', '92', '6', '111323', '252268', '17'), +('14', '92', '6', '111326', '251191', '17'), +('14', '92', '6', '111325', '250976', '17'), +('14', '92', '6', '111022', '220667', '17'), +('14', '92', '17', '56043', '163550', '17'), +('14', '92', '17', '56084', '162749', '17'), +('14', '92', '17', '104427', '139565', '17'), +('14', '92', '17', '54854', '105145', '17'), +('14', '92', '7', '56040', '155472', '17'), +('14', '92', '7', '56080', '155454', '17'), +('14', '92', '7', '104425', '133319', '17'), +('14', '92', '7', '54848', '100526', '17'), +('14', '92', '9', '67098', '260283', '17'), +('14', '92', '9', '56031', '152045', '17'), +('14', '92', '9', '56070', '152043', '17'), +('14', '92', '9', '62984', '151832', '17'), +('14', '92', '15', '111349', '253417', '17'), +('14', '92', '15', '111340', '252568', '17'), +('14', '92', '15', '111344', '252209', '17'), +('14', '92', '15', '111346', '251486', '17'), +('14', '92', '20', '111356', '252365', '17'), +('14', '92', '20', '111352', '251371', '17'), +('14', '92', '20', '111351', '251097', '17'), +('14', '92', '20', '111054', '220664', '17'), +('14', '92', '12', '56035', '153166', '17'), +('14', '92', '12', '56074', '152395', '17'), +('14', '92', '12', '104422', '130589', '17'), +('14', '92', '12', '49656', '100393', '17'), +('14', '92', '18', '56041', '162916', '17'), +('14', '92', '18', '62986', '160488', '17'), +('14', '92', '18', '104426', '136238', '17'), +('14', '92', '18', '54851', '102105', '17'), +('14', '92', '19', '81763', '158295', '17'), +('14', '92', '19', '62990', '158004', '17'), +('14', '92', '19', '56075', '157860', '17'), +('14', '92', '19', '56037', '157557', '17'), +('14', '92', '13', '111521', '255863', '17'), +('14', '92', '13', '111524', '243505', '17'), +('14', '92', '13', '111519', '243231', '17'), +('14', '92', '13', '111221', '226013', '17'), +('14', '92', '14', '111537', '252975', '17'), +('14', '92', '14', '111535', '252051', '17'), +('14', '92', '14', '111237', '221272', '17'), +('14', '92', '14', '111235', '220448', '17'), +('14', '92', '11', '111335', '251711', '17'), +('14', '92', '11', '111337', '251194', '17'), +('14', '92', '11', '111338', '249323', '17'), +('14', '92', '11', '111034', '220110', '17'), +('14', '93', '22', '12425', '0', '17'), +('14', '93', '22', '21807', '0', '17'), +('14', '93', '22', '39342', '0', '17'), +('14', '93', '22', '23597', '0', '17'), +('14', '93', '1', '111306', '251972', '17'), +('14', '93', '1', '111304', '251437', '17'), +('14', '93', '1', '111307', '251417', '17'), +('14', '93', '1', '111300', '250978', '17'), +('14', '93', '2', '94056', '157383', '17'), +('14', '93', '2', '62985', '156962', '17'), +('14', '93', '2', '104424', '134003', '17'), +('14', '93', '2', '54846', '101002', '17'), +('14', '93', '3', '111314', '252195', '17'), +('14', '93', '3', '111316', '250889', '17'), +('14', '93', '3', '111315', '250428', '17'), +('14', '93', '3', '111013', '220494', '17'), +('14', '93', '5', '111319', '252189', '17'), +('14', '93', '5', '111321', '250943', '17'), +('14', '93', '5', '111318', '250591', '17'), +('14', '93', '5', '111018', '220488', '17'), +('14', '93', '8', '111332', '252384', '17'), +('14', '93', '8', '111329', '251952', '17'), +('14', '93', '8', '111330', '250713', '17'), +('14', '93', '8', '111331', '249934', '17'), +('14', '93', '6', '111323', '252274', '17'), +('14', '93', '6', '111326', '251199', '17'), +('14', '93', '6', '111325', '250981', '17'), +('14', '93', '6', '111022', '220673', '17'), +('14', '93', '17', '56043', '163556', '17'), +('14', '93', '17', '56084', '162756', '17'), +('14', '93', '17', '104427', '139572', '17'), +('14', '93', '17', '54854', '105150', '17'), +('14', '93', '7', '56040', '155483', '17'), +('14', '93', '7', '56080', '155461', '17'), +('14', '93', '7', '104425', '133324', '17'), +('14', '93', '7', '54848', '100533', '17'), +('14', '93', '9', '67098', '260288', '17'), +('14', '93', '9', '56031', '152055', '17'), +('14', '93', '9', '56070', '152049', '17'), +('14', '93', '9', '62984', '151838', '17'), +('14', '93', '15', '111349', '253426', '17'), +('14', '93', '15', '111340', '252574', '17'), +('14', '93', '15', '111344', '252214', '17'), +('14', '93', '15', '111346', '251492', '17'), +('14', '93', '20', '111356', '252372', '17'), +('14', '93', '20', '111352', '251377', '17'), +('14', '93', '20', '111351', '251105', '17'), +('14', '93', '20', '111054', '220671', '17'), +('14', '93', '12', '56035', '153176', '17'), +('14', '93', '12', '56074', '152401', '17'), +('14', '93', '12', '104422', '130598', '17'), +('14', '93', '12', '49656', '100394', '17'), +('14', '93', '18', '56041', '162925', '17'), +('14', '93', '18', '62986', '160494', '17'), +('14', '93', '18', '104426', '136241', '17'), +('14', '93', '18', '54851', '102110', '17'), +('14', '93', '19', '81763', '158305', '17'), +('14', '93', '19', '62990', '158013', '17'), +('14', '93', '19', '56075', '157865', '17'), +('14', '93', '19', '56037', '157560', '17'), +('14', '93', '13', '111521', '255869', '17'), +('14', '93', '13', '111524', '243512', '17'), +('14', '93', '13', '111519', '243239', '17'), +('14', '93', '13', '111221', '226020', '17'), +('14', '93', '14', '111537', '252981', '17'), +('14', '93', '14', '111535', '252056', '17'), +('14', '93', '14', '111237', '221278', '17'), +('14', '93', '14', '111235', '220453', '17'), +('14', '93', '11', '111335', '251718', '17'), +('14', '93', '11', '111337', '251201', '17'), +('14', '93', '11', '111338', '249329', '17'), +('14', '93', '11', '111034', '220117', '17'), +('14', '94', '22', '12425', '0', '17'), +('14', '94', '22', '21807', '0', '17'), +('14', '94', '22', '39342', '0', '17'), +('14', '94', '22', '23597', '0', '17'), +('14', '94', '1', '111306', '251978', '17'), +('14', '94', '1', '111304', '251443', '17'), +('14', '94', '1', '111307', '251426', '17'), +('14', '94', '1', '111300', '250985', '17'), +('14', '94', '2', '94056', '157387', '17'), +('14', '94', '2', '62985', '156966', '17'), +('14', '94', '2', '104424', '134011', '17'), +('14', '94', '2', '54846', '101007', '17'), +('14', '94', '3', '111314', '252202', '17'), +('14', '94', '3', '111316', '250896', '17'), +('14', '94', '3', '111315', '250435', '17'), +('14', '94', '3', '111013', '220501', '17'), +('14', '94', '5', '111319', '252197', '17'), +('14', '94', '5', '111321', '250949', '17'), +('14', '94', '5', '111318', '250599', '17'), +('14', '94', '5', '111018', '220496', '17'), +('14', '94', '8', '111332', '252391', '17'), +('14', '94', '8', '111329', '251960', '17'), +('14', '94', '8', '111330', '250719', '17'), +('14', '94', '8', '111331', '249940', '17'), +('14', '94', '6', '111323', '252281', '17'), +('14', '94', '6', '111326', '251207', '17'), +('14', '94', '6', '111325', '250986', '17'), +('14', '94', '6', '111022', '220680', '17'), +('14', '94', '17', '56043', '163562', '17'), +('14', '94', '17', '56084', '162763', '17'), +('14', '94', '17', '104427', '139579', '17'), +('14', '94', '17', '54854', '105155', '17'), +('14', '94', '7', '56040', '155494', '17'), +('14', '94', '7', '56080', '155469', '17'), +('14', '94', '7', '104425', '133330', '17'), +('14', '94', '7', '54848', '100539', '17'), +('14', '94', '9', '67098', '260293', '17'), +('14', '94', '9', '56031', '152066', '17'), +('14', '94', '9', '56070', '152054', '17'), +('14', '94', '9', '62984', '151844', '17'), +('14', '94', '15', '111349', '253435', '17'), +('14', '94', '15', '111340', '252580', '17'), +('14', '94', '15', '111344', '252219', '17'), +('14', '94', '15', '111346', '251498', '17'), +('14', '94', '20', '111356', '252379', '17'), +('14', '94', '20', '111352', '251383', '17'), +('14', '94', '20', '111351', '251112', '17'), +('14', '94', '20', '111054', '220678', '17'), +('14', '94', '12', '56035', '153186', '17'), +('14', '94', '12', '56074', '152408', '17'), +('14', '94', '12', '104422', '130606', '17'), +('14', '94', '12', '49656', '100395', '17'), +('14', '94', '18', '56041', '162934', '17'), +('14', '94', '18', '62986', '160500', '17'), +('14', '94', '18', '104426', '136244', '17'), +('14', '94', '18', '54851', '102114', '17'), +('14', '94', '19', '81763', '158316', '17'), +('14', '94', '19', '62990', '158021', '17'), +('14', '94', '19', '56075', '157871', '17'), +('14', '94', '19', '56037', '157563', '17'), +('14', '94', '13', '111521', '255874', '17'), +('14', '94', '13', '111524', '243519', '17'), +('14', '94', '13', '111519', '243247', '17'), +('14', '94', '13', '111221', '226027', '17'), +('14', '94', '14', '111537', '252987', '17'), +('14', '94', '14', '111535', '252061', '17'), +('14', '94', '14', '111237', '221284', '17'), +('14', '94', '14', '111235', '220458', '17'), +('14', '94', '11', '111335', '251724', '17'), +('14', '94', '11', '111337', '251207', '17'), +('14', '94', '11', '111338', '249336', '17'), +('14', '94', '11', '111034', '220123', '17'), +('14', '95', '22', '12425', '0', '18'), +('14', '95', '22', '21807', '0', '18'), +('14', '95', '22', '39342', '0', '18'), +('14', '95', '22', '23597', '0', '18'), +('14', '95', '1', '111306', '251984', '18'), +('14', '95', '1', '111304', '251448', '18'), +('14', '95', '1', '111307', '251435', '18'), +('14', '95', '1', '111300', '250992', '18'), +('14', '95', '2', '94056', '157391', '18'), +('14', '95', '2', '62985', '156971', '18'), +('14', '95', '2', '104424', '134020', '18'), +('14', '95', '2', '54846', '101012', '18'), +('14', '95', '3', '111314', '252209', '18'), +('14', '95', '3', '111316', '250903', '18'), +('14', '95', '3', '111315', '250442', '18'), +('14', '95', '3', '111013', '220508', '18'), +('14', '95', '5', '111319', '252205', '18'), +('14', '95', '5', '111321', '250954', '18'), +('14', '95', '5', '111318', '250607', '18'), +('14', '95', '5', '111018', '220504', '18'), +('14', '95', '8', '111332', '252398', '18'), +('14', '95', '8', '111329', '251968', '18'), +('14', '95', '8', '111330', '250725', '18'), +('14', '95', '8', '111331', '249947', '18'), +('14', '95', '6', '111323', '252287', '18'), +('14', '95', '6', '111326', '251216', '18'), +('14', '95', '6', '111325', '250992', '18'), +('14', '95', '6', '111022', '220686', '18'), +('14', '95', '17', '56043', '163569', '18'), +('14', '95', '17', '56084', '162770', '18'), +('14', '95', '17', '104427', '139586', '18'), +('14', '95', '17', '54854', '105160', '18'), +('14', '95', '7', '56040', '155505', '18'), +('14', '95', '7', '56080', '155477', '18'), +('14', '95', '7', '104425', '133336', '18'), +('14', '95', '7', '54848', '100546', '18'), +('14', '95', '9', '67098', '260298', '18'), +('14', '95', '9', '56031', '152076', '18'), +('14', '95', '9', '56070', '152060', '18'), +('14', '95', '9', '62984', '151849', '18'), +('14', '95', '15', '111349', '253443', '18'), +('14', '95', '15', '111340', '252586', '18'), +('14', '95', '15', '111344', '252224', '18'), +('14', '95', '15', '111346', '251505', '18'), +('14', '95', '20', '128733', '325991', '18'), +('14', '95', '20', '111356', '252386', '18'), +('14', '95', '20', '111352', '251389', '18'), +('14', '95', '20', '111351', '251120', '18'), +('14', '95', '12', '56035', '153196', '18'), +('14', '95', '12', '56074', '152414', '18'), +('14', '95', '12', '104422', '130614', '18'), +('14', '95', '12', '49656', '100395', '18'), +('14', '95', '18', '56041', '162943', '18'), +('14', '95', '18', '62986', '160505', '18'), +('14', '95', '18', '104426', '136247', '18'), +('14', '95', '18', '54851', '102119', '18'), +('14', '95', '19', '81763', '158326', '18'), +('14', '95', '19', '62990', '158029', '18'), +('14', '95', '19', '56075', '157876', '18'), +('14', '95', '19', '56037', '157567', '18'), +('14', '95', '13', '111521', '255880', '18'), +('14', '95', '13', '111524', '243526', '18'), +('14', '95', '13', '111519', '243255', '18'), +('14', '95', '13', '111221', '226033', '18'), +('14', '95', '14', '111537', '252993', '18'), +('14', '95', '14', '111535', '252065', '18'), +('14', '95', '14', '111237', '221290', '18'), +('14', '95', '14', '111235', '220462', '18'), +('14', '95', '11', '111335', '251730', '18'), +('14', '95', '11', '111337', '251214', '18'), +('14', '95', '11', '111338', '249343', '18'), +('14', '95', '11', '111034', '220129', '18'), +('14', '96', '22', '12425', '0', '18'), +('14', '96', '22', '21807', '0', '18'), +('14', '96', '22', '39342', '0', '18'), +('14', '96', '22', '23597', '0', '18'), +('14', '96', '1', '111306', '251990', '18'), +('14', '96', '1', '111304', '251453', '18'), +('14', '96', '1', '111307', '251444', '18'), +('14', '96', '1', '111300', '251000', '18'), +('14', '96', '2', '94056', '157395', '18'), +('14', '96', '2', '62985', '156975', '18'), +('14', '96', '2', '104424', '134029', '18'), +('14', '96', '2', '54846', '101017', '18'), +('14', '96', '3', '111314', '252216', '18'), +('14', '96', '3', '111316', '250909', '18'), +('14', '96', '3', '111315', '250449', '18'), +('14', '96', '3', '111013', '220515', '18'), +('14', '96', '5', '111319', '252212', '18'), +('14', '96', '5', '111321', '250960', '18'), +('14', '96', '5', '111318', '250615', '18'), +('14', '96', '5', '111018', '220511', '18'), +('14', '96', '8', '111332', '252406', '18'), +('14', '96', '8', '111329', '251976', '18'), +('14', '96', '8', '111330', '250731', '18'), +('14', '96', '8', '111331', '249953', '18'), +('14', '96', '6', '111323', '252293', '18'), +('14', '96', '6', '111326', '251224', '18'), +('14', '96', '6', '111325', '250997', '18'), +('14', '96', '6', '111022', '220692', '18'), +('14', '96', '17', '56043', '163575', '18'), +('14', '96', '17', '56084', '162777', '18'), +('14', '96', '17', '104427', '139592', '18'), +('14', '96', '17', '54854', '105165', '18'), +('14', '96', '7', '56040', '155516', '18'), +('14', '96', '7', '56080', '155485', '18'), +('14', '96', '7', '104425', '133342', '18'), +('14', '96', '7', '54848', '100553', '18'), +('14', '96', '9', '67098', '260303', '18'), +('14', '96', '9', '56031', '152087', '18'), +('14', '96', '9', '56070', '152065', '18'), +('14', '96', '9', '62984', '151855', '18'), +('14', '96', '15', '111349', '253452', '18'), +('14', '96', '15', '111340', '252592', '18'), +('14', '96', '15', '111344', '252230', '18'), +('14', '96', '15', '111346', '251511', '18'), +('14', '96', '20', '128733', '325998', '18'), +('14', '96', '20', '111356', '252394', '18'), +('14', '96', '20', '111352', '251395', '18'), +('14', '96', '20', '111351', '251128', '18'), +('14', '96', '12', '56035', '153206', '18'), +('14', '96', '12', '56074', '152421', '18'), +('14', '96', '12', '104422', '130623', '18'), +('14', '96', '12', '49656', '100396', '18'), +('14', '96', '18', '56041', '162951', '18'), +('14', '96', '18', '62986', '160511', '18'), +('14', '96', '18', '104426', '136249', '18'), +('14', '96', '18', '54851', '102124', '18'), +('14', '96', '19', '81763', '158337', '18'), +('14', '96', '19', '62990', '158037', '18'), +('14', '96', '19', '56075', '157881', '18'), +('14', '96', '19', '56037', '157570', '18'), +('14', '96', '13', '111521', '255886', '18'), +('14', '96', '13', '111524', '243534', '18'), +('14', '96', '13', '111519', '243263', '18'), +('14', '96', '13', '111221', '226040', '18'), +('14', '96', '14', '111537', '252999', '18'), +('14', '96', '14', '111535', '252070', '18'), +('14', '96', '14', '111237', '221296', '18'), +('14', '96', '14', '111235', '220467', '18'), +('14', '96', '11', '111335', '251737', '18'), +('14', '96', '11', '111337', '251221', '18'), +('14', '96', '11', '111338', '249350', '18'), +('14', '96', '11', '111034', '220136', '18'), +('14', '97', '22', '12425', '0', '18'), +('14', '97', '22', '21807', '0', '18'), +('14', '97', '22', '39342', '0', '18'), +('14', '97', '22', '23597', '0', '18'), +('14', '97', '1', '111306', '251996', '18'), +('14', '97', '1', '111304', '251459', '18'), +('14', '97', '1', '111307', '251453', '18'), +('14', '97', '1', '111300', '251007', '18'), +('14', '97', '2', '94056', '157399', '18'), +('14', '97', '2', '62985', '156979', '18'), +('14', '97', '2', '104424', '134038', '18'), +('14', '97', '2', '54846', '101023', '18'), +('14', '97', '3', '111314', '252224', '18'), +('14', '97', '3', '111316', '250916', '18'), +('14', '97', '3', '111315', '250456', '18'), +('14', '97', '3', '111013', '220522', '18'), +('14', '97', '5', '111319', '252220', '18'), +('14', '97', '5', '111321', '250966', '18'), +('14', '97', '5', '111318', '250623', '18'), +('14', '97', '5', '111018', '220519', '18'), +('14', '97', '8', '111332', '252413', '18'), +('14', '97', '8', '111329', '251985', '18'), +('14', '97', '8', '111330', '250737', '18'), +('14', '97', '8', '111331', '249959', '18'), +('14', '97', '6', '111323', '252300', '18'), +('14', '97', '6', '111326', '251232', '18'), +('14', '97', '6', '111325', '251002', '18'), +('14', '97', '6', '111022', '220699', '18'), +('14', '97', '17', '56043', '163581', '18'), +('14', '97', '17', '56084', '162784', '18'), +('14', '97', '17', '104427', '139599', '18'), +('14', '97', '17', '54854', '105171', '18'), +('14', '97', '7', '56040', '155527', '18'), +('14', '97', '7', '56080', '155492', '18'), +('14', '97', '7', '104425', '133348', '18'), +('14', '97', '7', '54848', '100559', '18'), +('14', '97', '9', '67098', '260308', '18'), +('14', '97', '9', '56031', '152097', '18'), +('14', '97', '9', '56070', '152071', '18'), +('14', '97', '9', '62984', '151861', '18'), +('14', '97', '15', '111349', '253461', '18'), +('14', '97', '15', '111340', '252598', '18'), +('14', '97', '15', '111344', '252235', '18'), +('14', '97', '15', '111346', '251518', '18'), +('14', '97', '20', '128733', '326004', '18'), +('14', '97', '20', '111356', '252401', '18'), +('14', '97', '20', '111352', '251401', '18'), +('14', '97', '20', '111351', '251136', '18'), +('14', '97', '12', '56035', '153215', '18'), +('14', '97', '12', '56074', '152427', '18'), +('14', '97', '12', '104422', '130631', '18'), +('14', '97', '12', '49656', '100397', '18'), +('14', '97', '18', '56041', '162960', '18'), +('14', '97', '18', '62986', '160517', '18'), +('14', '97', '18', '104426', '136252', '18'), +('14', '97', '18', '54851', '102128', '18'), +('14', '97', '19', '81763', '158347', '18'), +('14', '97', '19', '62990', '158045', '18'), +('14', '97', '19', '56075', '157887', '18'), +('14', '97', '19', '56037', '157573', '18'), +('14', '97', '13', '111521', '255892', '18'), +('14', '97', '13', '111524', '243541', '18'), +('14', '97', '13', '111519', '243271', '18'), +('14', '97', '13', '111221', '226046', '18'), +('14', '97', '14', '111537', '253004', '18'), +('14', '97', '14', '111535', '252075', '18'), +('14', '97', '14', '111237', '221301', '18'), +('14', '97', '14', '111235', '220472', '18'), +('14', '97', '11', '111335', '251743', '18'), +('14', '97', '11', '111337', '251227', '18'), +('14', '97', '11', '111338', '249357', '18'), +('14', '97', '11', '111034', '220142', '18'), +('14', '98', '22', '12425', '0', '18'), +('14', '98', '22', '21807', '0', '18'), +('14', '98', '22', '39342', '0', '18'), +('14', '98', '22', '23597', '0', '18'), +('14', '98', '1', '111306', '252002', '18'), +('14', '98', '1', '111304', '251464', '18'), +('14', '98', '1', '111307', '251462', '18'), +('14', '98', '1', '111300', '251014', '18'), +('14', '98', '2', '94056', '157403', '18'), +('14', '98', '2', '62985', '156983', '18'), +('14', '98', '2', '104424', '134047', '18'), +('14', '98', '2', '54846', '101028', '18'), +('14', '98', '3', '111314', '252231', '18'), +('14', '98', '3', '111316', '250923', '18'), +('14', '98', '3', '111315', '250463', '18'), +('14', '98', '3', '111013', '220530', '18'), +('14', '98', '5', '111319', '252228', '18'), +('14', '98', '5', '111321', '250971', '18'), +('14', '98', '5', '111318', '250630', '18'), +('14', '98', '5', '111018', '220527', '18'), +('14', '98', '8', '111332', '252420', '18'), +('14', '98', '8', '111329', '251993', '18'), +('14', '98', '8', '111330', '250743', '18'), +('14', '98', '8', '111331', '249965', '18'), +('14', '98', '6', '111323', '252306', '18'), +('14', '98', '6', '111326', '251240', '18'), +('14', '98', '6', '111325', '251007', '18'), +('14', '98', '6', '111022', '220705', '18'), +('14', '98', '17', '56043', '163587', '18'), +('14', '98', '17', '56084', '162791', '18'), +('14', '98', '17', '104427', '139606', '18'), +('14', '98', '17', '54854', '105176', '18'), +('14', '98', '7', '56040', '155537', '18'), +('14', '98', '7', '56080', '155500', '18'), +('14', '98', '7', '104425', '133354', '18'), +('14', '98', '7', '54848', '100566', '18'), +('14', '98', '9', '67098', '260313', '18'), +('14', '98', '9', '56031', '152108', '18'), +('14', '98', '9', '56070', '152077', '18'), +('14', '98', '9', '62984', '151866', '18'), +('14', '98', '15', '111349', '253469', '18'), +('14', '98', '15', '111340', '252604', '18'), +('14', '98', '15', '111344', '252240', '18'), +('14', '98', '15', '111346', '251524', '18'), +('14', '98', '20', '128733', '326011', '18'), +('14', '98', '20', '111356', '252408', '18'), +('14', '98', '20', '111352', '251407', '18'), +('14', '98', '20', '111351', '251144', '18'), +('14', '98', '12', '56035', '153225', '18'), +('14', '98', '12', '56074', '152433', '18'), +('14', '98', '12', '104422', '130639', '18'), +('14', '98', '12', '49656', '100398', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '98', '18', '56041', '162969', '18'), +('14', '98', '18', '62986', '160523', '18'), +('14', '98', '18', '104426', '136255', '18'), +('14', '98', '18', '54851', '102133', '18'), +('14', '98', '19', '81763', '158357', '18'), +('14', '98', '19', '62990', '158053', '18'), +('14', '98', '19', '56075', '157892', '18'), +('14', '98', '19', '56037', '157576', '18'), +('14', '98', '13', '111521', '255898', '18'), +('14', '98', '13', '111524', '243548', '18'), +('14', '98', '13', '111519', '243279', '18'), +('14', '98', '13', '111221', '226053', '18'), +('14', '98', '14', '111537', '253010', '18'), +('14', '98', '14', '111535', '252079', '18'), +('14', '98', '14', '111237', '221307', '18'), +('14', '98', '14', '111235', '220476', '18'), +('14', '98', '11', '111335', '251750', '18'), +('14', '98', '11', '111337', '251234', '18'), +('14', '98', '11', '111338', '249364', '18'), +('14', '98', '11', '111034', '220149', '18'), +('14', '99', '22', '12425', '0', '18'), +('14', '99', '22', '21807', '0', '18'), +('14', '99', '22', '39342', '0', '18'), +('14', '99', '22', '23597', '0', '18'), +('14', '99', '1', '111306', '252009', '18'), +('14', '99', '1', '111307', '251471', '18'), +('14', '99', '1', '111304', '251469', '18'), +('14', '99', '1', '111300', '251021', '18'), +('14', '99', '2', '94056', '157406', '18'), +('14', '99', '2', '62985', '156987', '18'), +('14', '99', '2', '104424', '134056', '18'), +('14', '99', '2', '54846', '101033', '18'), +('14', '99', '3', '111314', '252238', '18'), +('14', '99', '3', '111316', '250930', '18'), +('14', '99', '3', '111315', '250470', '18'), +('14', '99', '3', '111013', '220537', '18'), +('14', '99', '5', '111319', '252236', '18'), +('14', '99', '5', '111321', '250977', '18'), +('14', '99', '5', '111318', '250638', '18'), +('14', '99', '5', '111018', '220535', '18'), +('14', '99', '8', '111332', '252427', '18'), +('14', '99', '8', '111329', '252001', '18'), +('14', '99', '8', '111330', '250749', '18'), +('14', '99', '8', '111331', '249971', '18'), +('14', '99', '6', '111323', '252313', '18'), +('14', '99', '6', '111326', '251249', '18'), +('14', '99', '6', '111325', '251012', '18'), +('14', '99', '6', '111022', '220712', '18'), +('14', '99', '17', '56043', '163594', '18'), +('14', '99', '17', '56084', '162798', '18'), +('14', '99', '17', '104427', '139613', '18'), +('14', '99', '17', '54854', '105181', '18'), +('14', '99', '7', '56040', '155548', '18'), +('14', '99', '7', '56080', '155508', '18'), +('14', '99', '7', '104425', '133360', '18'), +('14', '99', '7', '54848', '100572', '18'), +('14', '99', '9', '67098', '260318', '18'), +('14', '99', '9', '56031', '152118', '18'), +('14', '99', '9', '56070', '152082', '18'), +('14', '99', '9', '62984', '151872', '18'), +('14', '99', '15', '111349', '253478', '18'), +('14', '99', '15', '111340', '252610', '18'), +('14', '99', '15', '111344', '252245', '18'), +('14', '99', '15', '111346', '251531', '18'), +('14', '99', '20', '128733', '326017', '18'), +('14', '99', '20', '111356', '252415', '18'), +('14', '99', '20', '111352', '251413', '18'), +('14', '99', '20', '111351', '251152', '18'), +('14', '99', '12', '56035', '153235', '18'), +('14', '99', '12', '56074', '152440', '18'), +('14', '99', '12', '104422', '130647', '18'), +('14', '99', '12', '49656', '100399', '18'), +('14', '99', '18', '56041', '162977', '18'), +('14', '99', '18', '62986', '160529', '18'), +('14', '99', '18', '104426', '136258', '18'), +('14', '99', '18', '54851', '102137', '18'), +('14', '99', '19', '81763', '158368', '18'), +('14', '99', '19', '62990', '158061', '18'), +('14', '99', '19', '56075', '157897', '18'), +('14', '99', '19', '56037', '157579', '18'), +('14', '99', '13', '111521', '255904', '18'), +('14', '99', '13', '111524', '243555', '18'), +('14', '99', '13', '111519', '243287', '18'), +('14', '99', '13', '111221', '226059', '18'), +('14', '99', '14', '111537', '253016', '18'), +('14', '99', '14', '111535', '252084', '18'), +('14', '99', '14', '111237', '221313', '18'), +('14', '99', '14', '111235', '220481', '18'), +('14', '99', '11', '111335', '251756', '18'), +('14', '99', '11', '111337', '251241', '18'), +('14', '99', '11', '111338', '249371', '18'), +('14', '99', '11', '111034', '220155', '18'), +('14', '100', '22', '12425', '0', '20'), +('14', '100', '22', '21807', '0', '20'), +('14', '100', '22', '39342', '0', '20'), +('14', '100', '22', '23597', '0', '20'), +('14', '100', '1', '98769', '417998', '20'), +('14', '100', '1', '111306', '252015', '20'), +('14', '100', '1', '111307', '251480', '20'), +('14', '100', '1', '111304', '251475', '20'), +('14', '100', '2', '94056', '157410', '20'), +('14', '100', '2', '62985', '156992', '20'), +('14', '100', '2', '104424', '134065', '20'), +('14', '100', '2', '54846', '101038', '20'), +('14', '100', '3', '111314', '252245', '20'), +('14', '100', '3', '111316', '250936', '20'), +('14', '100', '3', '111315', '250477', '20'), +('14', '100', '3', '111013', '220544', '20'), +('14', '100', '5', '111319', '252244', '20'), +('14', '100', '5', '111321', '250983', '20'), +('14', '100', '5', '111318', '250646', '20'), +('14', '100', '5', '111018', '220543', '20'), +('14', '100', '8', '111332', '252434', '20'), +('14', '100', '8', '111329', '252010', '20'), +('14', '100', '8', '111330', '250755', '20'), +('14', '100', '8', '111331', '249977', '20'), +('14', '100', '6', '111323', '252319', '20'), +('14', '100', '6', '111326', '251257', '20'), +('14', '100', '6', '111325', '251018', '20'), +('14', '100', '6', '111022', '220718', '20'), +('14', '100', '17', '56043', '163600', '20'), +('14', '100', '17', '56084', '162805', '20'), +('14', '100', '17', '104427', '139620', '20'), +('14', '100', '17', '54854', '105186', '20'), +('14', '100', '7', '56040', '155559', '20'), +('14', '100', '7', '56080', '155516', '20'), +('14', '100', '7', '104425', '133366', '20'), +('14', '100', '7', '54848', '100579', '20'), +('14', '100', '9', '67098', '260323', '20'), +('14', '100', '9', '56031', '152128', '20'), +('14', '100', '9', '56070', '152088', '20'), +('14', '100', '9', '62984', '151878', '20'), +('14', '100', '15', '111349', '253487', '20'), +('14', '100', '15', '111340', '252616', '20'), +('14', '100', '15', '111344', '252251', '20'), +('14', '100', '15', '111346', '251537', '20'), +('14', '100', '20', '128733', '326024', '20'), +('14', '100', '20', '111356', '252422', '20'), +('14', '100', '20', '111352', '251419', '20'), +('14', '100', '20', '111351', '251160', '20'), +('14', '100', '12', '56035', '153245', '20'), +('14', '100', '12', '56074', '152446', '20'), +('14', '100', '12', '104422', '130656', '20'), +('14', '100', '12', '49656', '100400', '20'), +('14', '100', '18', '56041', '162986', '20'), +('14', '100', '18', '62986', '160535', '20'), +('14', '100', '18', '104426', '136260', '20'), +('14', '100', '18', '54851', '102142', '20'), +('14', '100', '19', '81763', '158378', '20'), +('14', '100', '19', '62990', '158069', '20'), +('14', '100', '19', '56075', '157903', '20'), +('14', '100', '19', '56037', '157582', '20'), +('14', '100', '13', '111521', '255911', '20'), +('14', '100', '13', '111524', '243563', '20'), +('14', '100', '13', '111519', '243296', '20'), +('14', '100', '13', '111221', '226066', '20'), +('14', '100', '14', '111537', '253022', '20'), +('14', '100', '14', '111535', '252089', '20'), +('14', '100', '14', '111237', '221319', '20'), +('14', '100', '14', '111235', '220486', '20'), +('14', '100', '11', '133816', '330821', '20'), +('14', '100', '11', '111335', '251763', '20'), +('14', '100', '11', '111337', '251248', '20'), +('14', '100', '11', '111338', '249378', '20'), +('14', '100', '22', '12425', '0', '19'), +('14', '100', '22', '21807', '0', '19'), +('14', '100', '22', '39342', '0', '19'), +('14', '100', '22', '23597', '0', '19'), +('14', '100', '1', '98769', '417998', '19'), +('14', '100', '1', '111306', '252015', '19'), +('14', '100', '1', '111307', '251480', '19'), +('14', '100', '1', '111304', '251475', '19'), +('14', '100', '2', '94056', '157410', '19'), +('14', '100', '2', '62985', '156992', '19'), +('14', '100', '2', '104424', '134065', '19'), +('14', '100', '2', '54846', '101038', '19'), +('14', '100', '3', '111314', '252245', '19'), +('14', '100', '3', '111316', '250936', '19'), +('14', '100', '3', '111315', '250477', '19'), +('14', '100', '3', '111013', '220544', '19'), +('14', '100', '5', '111319', '252244', '19'), +('14', '100', '5', '111321', '250983', '19'), +('14', '100', '5', '111318', '250646', '19'), +('14', '100', '5', '111018', '220543', '19'), +('14', '100', '8', '111332', '252434', '19'), +('14', '100', '8', '111329', '252010', '19'), +('14', '100', '8', '111330', '250755', '19'), +('14', '100', '8', '111331', '249977', '19'), +('14', '100', '6', '111323', '252319', '19'), +('14', '100', '6', '111326', '251257', '19'), +('14', '100', '6', '111325', '251018', '19'), +('14', '100', '6', '111022', '220718', '19'), +('14', '100', '17', '56043', '163600', '19'), +('14', '100', '17', '56084', '162805', '19'), +('14', '100', '17', '104427', '139620', '19'), +('14', '100', '17', '54854', '105186', '19'), +('14', '100', '7', '56040', '155559', '19'), +('14', '100', '7', '56080', '155516', '19'), +('14', '100', '7', '104425', '133366', '19'), +('14', '100', '7', '54848', '100579', '19'), +('14', '100', '9', '67098', '260323', '19'), +('14', '100', '9', '56031', '152128', '19'), +('14', '100', '9', '56070', '152088', '19'), +('14', '100', '9', '62984', '151878', '19'), +('14', '100', '15', '111349', '253487', '19'), +('14', '100', '15', '111340', '252616', '19'), +('14', '100', '15', '111344', '252251', '19'), +('14', '100', '15', '111346', '251537', '19'), +('14', '100', '20', '128733', '326024', '19'), +('14', '100', '20', '111356', '252422', '19'), +('14', '100', '20', '111352', '251419', '19'), +('14', '100', '20', '111351', '251160', '19'), +('14', '100', '12', '56035', '153245', '19'), +('14', '100', '12', '56074', '152446', '19'), +('14', '100', '12', '104422', '130656', '19'), +('14', '100', '12', '49656', '100400', '19'), +('14', '100', '18', '56041', '162986', '19'), +('14', '100', '18', '62986', '160535', '19'), +('14', '100', '18', '104426', '136260', '19'), +('14', '100', '18', '54851', '102142', '19'), +('14', '100', '19', '81763', '158378', '19'), +('14', '100', '19', '62990', '158069', '19'), +('14', '100', '19', '56075', '157903', '19'), +('14', '100', '19', '56037', '157582', '19'), +('14', '100', '13', '111521', '255910', '19'), +('14', '100', '13', '111524', '243563', '19'), +('14', '100', '13', '111519', '243295', '19'), +('14', '100', '13', '111221', '226066', '19'), +('14', '100', '14', '111537', '253022', '19'), +('14', '100', '14', '111535', '252089', '19'), +('14', '100', '14', '111237', '221319', '19'), +('14', '100', '14', '111235', '220486', '19'), +('14', '100', '11', '133816', '330821', '19'), +('14', '100', '11', '111335', '251763', '19'), +('14', '100', '11', '111337', '251248', '19'), +('14', '100', '11', '111338', '249378', '19'), +('14', '101', '22', '12425', '0', '20'), +('14', '101', '22', '21807', '0', '20'), +('14', '101', '22', '39342', '0', '20'), +('14', '101', '22', '23597', '0', '20'), +('14', '101', '1', '98769', '418003', '20'), +('14', '101', '1', '111306', '252021', '20'), +('14', '101', '1', '111307', '251489', '20'), +('14', '101', '1', '111304', '251480', '20'), +('14', '101', '2', '94056', '157414', '20'), +('14', '101', '2', '62985', '156996', '20'), +('14', '101', '2', '104424', '134074', '20'), +('14', '101', '2', '54846', '101043', '20'), +('14', '101', '3', '111314', '252253', '20'), +('14', '101', '3', '111316', '250943', '20'), +('14', '101', '3', '111315', '250484', '20'), +('14', '101', '3', '111013', '220551', '20'), +('14', '101', '5', '111319', '252252', '20'), +('14', '101', '5', '111321', '250989', '20'), +('14', '101', '5', '111318', '250654', '20'), +('14', '101', '5', '111018', '220551', '20'), +('14', '101', '8', '111332', '252441', '20'), +('14', '101', '8', '111329', '252018', '20'), +('14', '101', '8', '111330', '250761', '20'), +('14', '101', '8', '111331', '249983', '20'), +('14', '101', '6', '111323', '252326', '20'), +('14', '101', '6', '111326', '251265', '20'), +('14', '101', '6', '111325', '251023', '20'), +('14', '101', '6', '111022', '220725', '20'), +('14', '101', '17', '56043', '163606', '20'), +('14', '101', '17', '56084', '162812', '20'), +('14', '101', '17', '104427', '139627', '20'), +('14', '101', '17', '54854', '105191', '20'), +('14', '101', '7', '56040', '155570', '20'), +('14', '101', '7', '56080', '155523', '20'), +('14', '101', '7', '104425', '133372', '20'), +('14', '101', '7', '54848', '100585', '20'), +('14', '101', '9', '67098', '260327', '20'), +('14', '101', '9', '56031', '152139', '20'), +('14', '101', '9', '56070', '152093', '20'), +('14', '101', '9', '62984', '151884', '20'), +('14', '101', '15', '111349', '253496', '20'), +('14', '101', '15', '111340', '252622', '20'), +('14', '101', '15', '111344', '252256', '20'), +('14', '101', '15', '111346', '251544', '20'), +('14', '101', '20', '128733', '326031', '20'), +('14', '101', '20', '111356', '252430', '20'), +('14', '101', '20', '111352', '251425', '20'), +('14', '101', '20', '111351', '251167', '20'), +('14', '101', '12', '56035', '153255', '20'), +('14', '101', '12', '56074', '152453', '20'), +('14', '101', '12', '104422', '130664', '20'), +('14', '101', '12', '49656', '100401', '20'), +('14', '101', '18', '56041', '162995', '20'), +('14', '101', '18', '62986', '160541', '20'), +('14', '101', '18', '104426', '136263', '20'), +('14', '101', '18', '54851', '102147', '20'), +('14', '101', '19', '81763', '158388', '20'), +('14', '101', '19', '62990', '158078', '20'), +('14', '101', '19', '56075', '157908', '20'), +('14', '101', '19', '56037', '157585', '20'), +('14', '101', '13', '111521', '255917', '20'), +('14', '101', '13', '111524', '243570', '20'), +('14', '101', '13', '111519', '243304', '20'), +('14', '101', '13', '111221', '226073', '20'), +('14', '101', '14', '111537', '253028', '20'), +('14', '101', '14', '111535', '252093', '20'), +('14', '101', '14', '111237', '221325', '20'), +('14', '101', '14', '111235', '220490', '20'), +('14', '101', '11', '133816', '330825', '20'), +('14', '101', '11', '111335', '251769', '20'), +('14', '101', '11', '111337', '251254', '20'), +('14', '101', '11', '111338', '249384', '20'), +('14', '102', '22', '12425', '0', '20'), +('14', '102', '22', '21807', '0', '20'), +('14', '102', '22', '39342', '0', '20'), +('14', '102', '22', '23597', '0', '20'), +('14', '102', '1', '98769', '418008', '20'), +('14', '102', '1', '111306', '252027', '20'), +('14', '102', '1', '111307', '251498', '20'), +('14', '102', '1', '111304', '251486', '20'), +('14', '102', '2', '94056', '157418', '20'), +('14', '102', '2', '62985', '157000', '20'), +('14', '102', '2', '104424', '134082', '20'), +('14', '102', '2', '54846', '101048', '20'), +('14', '102', '3', '111314', '252260', '20'), +('14', '102', '3', '111316', '250950', '20'), +('14', '102', '3', '111315', '250491', '20'), +('14', '102', '3', '111013', '220559', '20'), +('14', '102', '5', '111319', '252260', '20'), +('14', '102', '5', '111321', '250994', '20'), +('14', '102', '5', '111318', '250662', '20'), +('14', '102', '5', '111018', '220559', '20'), +('14', '102', '8', '111332', '252448', '20'), +('14', '102', '8', '111329', '252026', '20'), +('14', '102', '8', '111330', '250767', '20'), +('14', '102', '8', '111331', '249989', '20'), +('14', '102', '6', '111323', '252332', '20'), +('14', '102', '6', '111326', '251274', '20'), +('14', '102', '6', '111325', '251028', '20'), +('14', '102', '6', '111022', '220731', '20'), +('14', '102', '17', '56043', '163612', '20'), +('14', '102', '17', '56084', '162819', '20'), +('14', '102', '17', '104427', '139634', '20'), +('14', '102', '17', '54854', '105196', '20'), +('14', '102', '7', '56040', '155581', '20'), +('14', '102', '7', '56080', '155531', '20'), +('14', '102', '7', '104425', '133378', '20'), +('14', '102', '7', '54848', '100592', '20'), +('14', '102', '9', '67098', '260332', '20'), +('14', '102', '9', '56031', '152149', '20'), +('14', '102', '9', '56070', '152099', '20'), +('14', '102', '9', '62984', '151889', '20'), +('14', '102', '15', '111349', '253504', '20'), +('14', '102', '15', '111340', '252628', '20'), +('14', '102', '15', '111344', '252261', '20'), +('14', '102', '15', '111346', '251550', '20'), +('14', '102', '20', '128733', '326037', '20'), +('14', '102', '20', '111356', '252437', '20'), +('14', '102', '20', '111352', '251431', '20'), +('14', '102', '20', '111351', '251175', '20'), +('14', '102', '12', '56035', '153265', '20'), +('14', '102', '12', '56074', '152459', '20'), +('14', '102', '12', '104422', '130672', '20'), +('14', '102', '12', '49656', '100402', '20'), +('14', '102', '18', '56041', '163004', '20'), +('14', '102', '18', '62986', '160546', '20'), +('14', '102', '18', '104426', '136266', '20'), +('14', '102', '18', '54851', '102151', '20'), +('14', '102', '19', '81763', '158399', '20'), +('14', '102', '19', '62990', '158086', '20'), +('14', '102', '19', '56075', '157913', '20'), +('14', '102', '19', '56037', '157588', '20'), +('14', '102', '13', '111521', '255922', '20'), +('14', '102', '13', '111524', '243578', '20'), +('14', '102', '13', '111519', '243312', '20'), +('14', '102', '13', '111221', '226079', '20'), +('14', '102', '14', '111537', '253034', '20'), +('14', '102', '14', '111535', '252098', '20'), +('14', '102', '14', '111237', '221331', '20'), +('14', '102', '14', '111235', '220495', '20'), +('14', '102', '11', '133816', '330830', '20'), +('14', '102', '11', '111335', '251775', '20'), +('14', '102', '11', '111337', '251261', '20'), +('14', '102', '11', '111338', '249391', '20'), +('14', '103', '22', '12425', '0', '20'), +('14', '103', '22', '21807', '0', '20'), +('14', '103', '22', '39342', '0', '20'), +('14', '103', '22', '23597', '0', '20'), +('14', '103', '1', '98769', '418013', '20'), +('14', '103', '1', '111306', '252033', '20'), +('14', '103', '1', '111307', '251507', '20'), +('14', '103', '1', '111304', '251491', '20'), +('14', '103', '2', '94056', '157422', '20'), +('14', '103', '2', '62985', '157004', '20'), +('14', '103', '2', '104424', '134091', '20'), +('14', '103', '2', '54846', '101053', '20'), +('14', '103', '3', '111314', '252267', '20'), +('14', '103', '3', '111316', '250956', '20'), +('14', '103', '3', '111315', '250498', '20'), +('14', '103', '3', '111013', '220566', '20'), +('14', '103', '5', '111319', '252268', '20'), +('14', '103', '5', '111321', '251000', '20'), +('14', '103', '5', '111318', '250670', '20'), +('14', '103', '5', '111018', '220567', '20'), +('14', '103', '8', '111332', '252456', '20'), +('14', '103', '8', '111329', '252034', '20'), +('14', '103', '8', '111330', '250773', '20'), +('14', '103', '8', '111331', '249995', '20'), +('14', '103', '6', '111323', '252339', '20'), +('14', '103', '6', '111326', '251282', '20'), +('14', '103', '6', '111325', '251033', '20'), +('14', '103', '6', '111022', '220738', '20'), +('14', '103', '17', '56043', '163619', '20'), +('14', '103', '17', '56084', '162826', '20'), +('14', '103', '17', '104427', '139641', '20'), +('14', '103', '17', '54854', '105201', '20'), +('14', '103', '7', '56040', '155591', '20'), +('14', '103', '7', '56080', '155539', '20'), +('14', '103', '7', '104425', '133383', '20'), +('14', '103', '7', '54848', '100598', '20'), +('14', '103', '9', '67098', '260337', '20'), +('14', '103', '9', '56031', '152160', '20'), +('14', '103', '9', '56070', '152104', '20'), +('14', '103', '9', '62984', '151895', '20'), +('14', '103', '15', '111349', '253513', '20'), +('14', '103', '15', '111340', '252634', '20'), +('14', '103', '15', '111344', '252266', '20'), +('14', '103', '15', '111346', '251557', '20'), +('14', '103', '20', '128733', '326044', '20'), +('14', '103', '20', '111356', '252444', '20'), +('14', '103', '20', '111352', '251437', '20'), +('14', '103', '20', '111351', '251183', '20'), +('14', '103', '12', '56035', '153274', '20'), +('14', '103', '12', '56074', '152466', '20'), +('14', '103', '12', '104422', '130681', '20'), +('14', '103', '12', '49656', '100403', '20'), +('14', '103', '18', '56041', '163012', '20'), +('14', '103', '18', '62986', '160552', '20'), +('14', '103', '18', '104426', '136269', '20'), +('14', '103', '18', '54851', '102156', '20'), +('14', '103', '19', '81763', '158409', '20'), +('14', '103', '19', '62990', '158094', '20'), +('14', '103', '19', '56075', '157919', '20'), +('14', '103', '19', '56037', '157592', '20'), +('14', '103', '13', '111521', '255928', '20'), +('14', '103', '13', '111524', '243585', '20'), +('14', '103', '13', '111519', '243320', '20'), +('14', '103', '13', '111221', '226086', '20'), +('14', '103', '14', '111537', '253039', '20'), +('14', '103', '14', '111535', '252103', '20'), +('14', '103', '14', '111237', '221336', '20'), +('14', '103', '14', '111235', '220500', '20'), +('14', '103', '11', '133816', '330835', '20'), +('14', '103', '11', '111335', '251782', '20'), +('14', '103', '11', '111337', '251268', '20'), +('14', '103', '11', '111338', '249398', '20'), +('14', '104', '22', '12425', '0', '20'), +('14', '104', '22', '21807', '0', '20'), +('14', '104', '22', '39342', '0', '20'), +('14', '104', '22', '23597', '0', '20'), +('14', '104', '1', '98769', '418017', '20'), +('14', '104', '1', '111306', '252039', '20'), +('14', '104', '1', '111307', '251516', '20'), +('14', '104', '1', '111304', '251496', '20'), +('14', '104', '2', '94056', '157426', '20'), +('14', '104', '2', '62985', '157009', '20'), +('14', '104', '2', '104424', '134100', '20'), +('14', '104', '2', '54846', '101059', '20'), +('14', '104', '3', '111314', '252274', '20'), +('14', '104', '3', '111316', '250963', '20'), +('14', '104', '3', '111315', '250505', '20'), +('14', '104', '3', '111013', '220573', '20'), +('14', '104', '5', '111319', '252276', '20'), +('14', '104', '5', '111321', '251006', '20'), +('14', '104', '5', '111318', '250678', '20'), +('14', '104', '5', '111018', '220575', '20'), +('14', '104', '8', '111332', '252463', '20'), +('14', '104', '8', '111329', '252043', '20'), +('14', '104', '8', '111330', '250779', '20'), +('14', '104', '8', '111331', '250001', '20'), +('14', '104', '6', '111323', '252345', '20'), +('14', '104', '6', '111326', '251290', '20'), +('14', '104', '6', '111325', '251039', '20'), +('14', '104', '6', '111022', '220744', '20'), +('14', '104', '17', '56043', '163625', '20'), +('14', '104', '17', '56084', '162833', '20'), +('14', '104', '17', '104427', '139647', '20'), +('14', '104', '17', '54854', '105206', '20'), +('14', '104', '7', '56040', '155602', '20'), +('14', '104', '7', '56080', '155547', '20'), +('14', '104', '7', '104425', '133389', '20'), +('14', '104', '7', '54848', '100605', '20'), +('14', '104', '9', '67098', '260342', '20'), +('14', '104', '9', '56031', '152170', '20'), +('14', '104', '9', '56070', '152110', '20'), +('14', '104', '9', '62984', '151901', '20'), +('14', '104', '15', '111349', '253522', '20'), +('14', '104', '15', '111340', '252640', '20'), +('14', '104', '15', '111344', '252272', '20'), +('14', '104', '15', '111346', '251563', '20'), +('14', '104', '20', '128733', '326050', '20'), +('14', '104', '20', '111356', '252451', '20'), +('14', '104', '20', '111352', '251443', '20'), +('14', '104', '20', '111351', '251191', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '104', '12', '56035', '153284', '20'), +('14', '104', '12', '56074', '152472', '20'), +('14', '104', '12', '104422', '130689', '20'), +('14', '104', '12', '49656', '100404', '20'), +('14', '104', '18', '56041', '163021', '20'), +('14', '104', '18', '62986', '160558', '20'), +('14', '104', '18', '104426', '136271', '20'), +('14', '104', '18', '54851', '102161', '20'), +('14', '104', '19', '81763', '158420', '20'), +('14', '104', '19', '62990', '158102', '20'), +('14', '104', '19', '56075', '157924', '20'), +('14', '104', '19', '56037', '157595', '20'), +('14', '104', '13', '111521', '255934', '20'), +('14', '104', '13', '111524', '243592', '20'), +('14', '104', '13', '111519', '243328', '20'), +('14', '104', '13', '111221', '226093', '20'), +('14', '104', '14', '111537', '253045', '20'), +('14', '104', '14', '111535', '252107', '20'), +('14', '104', '14', '111237', '221342', '20'), +('14', '104', '14', '111235', '220504', '20'), +('14', '104', '11', '133816', '330839', '20'), +('14', '104', '11', '111335', '251788', '20'), +('14', '104', '11', '111337', '251274', '20'), +('14', '104', '11', '111338', '249405', '20'), +('14', '105', '22', '12425', '0', '23'), +('14', '105', '22', '21807', '0', '23'), +('14', '105', '22', '39342', '0', '23'), +('14', '105', '22', '23597', '0', '23'), +('14', '105', '1', '98769', '418022', '23'), +('14', '105', '1', '111306', '252045', '23'), +('14', '105', '1', '111307', '251525', '23'), +('14', '105', '1', '111304', '251502', '23'), +('14', '105', '2', '94056', '157430', '23'), +('14', '105', '2', '62985', '157013', '23'), +('14', '105', '2', '104424', '134109', '23'), +('14', '105', '2', '54846', '101064', '23'), +('14', '105', '3', '111314', '252281', '23'), +('14', '105', '3', '111316', '250970', '23'), +('14', '105', '3', '111315', '250513', '23'), +('14', '105', '3', '111013', '220580', '23'), +('14', '105', '5', '111319', '252284', '23'), +('14', '105', '5', '111321', '251012', '23'), +('14', '105', '5', '111318', '250686', '23'), +('14', '105', '5', '111018', '220583', '23'), +('14', '105', '8', '111332', '252470', '23'), +('14', '105', '8', '111329', '252051', '23'), +('14', '105', '8', '111330', '250785', '23'), +('14', '105', '8', '111331', '250007', '23'), +('14', '105', '6', '111323', '252352', '23'), +('14', '105', '6', '111326', '251299', '23'), +('14', '105', '6', '111325', '251044', '23'), +('14', '105', '6', '111022', '220751', '23'), +('14', '105', '17', '56043', '163631', '23'), +('14', '105', '17', '56084', '162840', '23'), +('14', '105', '17', '104427', '139654', '23'), +('14', '105', '17', '54854', '105212', '23'), +('14', '105', '7', '56040', '155613', '23'), +('14', '105', '7', '56080', '155554', '23'), +('14', '105', '7', '104425', '133395', '23'), +('14', '105', '7', '54848', '100612', '23'), +('14', '105', '9', '67098', '260347', '23'), +('14', '105', '9', '56031', '152181', '23'), +('14', '105', '9', '56070', '152115', '23'), +('14', '105', '9', '62984', '151906', '23'), +('14', '105', '15', '111349', '253530', '23'), +('14', '105', '15', '111340', '252646', '23'), +('14', '105', '15', '111344', '252277', '23'), +('14', '105', '15', '111346', '251570', '23'), +('14', '105', '20', '128733', '326057', '23'), +('14', '105', '20', '111356', '252458', '23'), +('14', '105', '20', '111352', '251449', '23'), +('14', '105', '20', '111351', '251199', '23'), +('14', '105', '12', '56035', '153294', '23'), +('14', '105', '12', '56074', '152478', '23'), +('14', '105', '12', '104422', '130697', '23'), +('14', '105', '12', '49656', '100404', '23'), +('14', '105', '18', '56041', '163030', '23'), +('14', '105', '18', '62986', '160564', '23'), +('14', '105', '18', '104426', '136274', '23'), +('14', '105', '18', '54851', '102165', '23'), +('14', '105', '19', '81763', '158430', '23'), +('14', '105', '19', '62990', '158110', '23'), +('14', '105', '19', '56075', '157929', '23'), +('14', '105', '19', '56037', '157598', '23'), +('14', '105', '13', '111521', '255940', '23'), +('14', '105', '13', '111524', '243599', '23'), +('14', '105', '13', '111519', '243336', '23'), +('14', '105', '13', '111221', '226099', '23'), +('14', '105', '14', '111537', '253051', '23'), +('14', '105', '14', '111535', '252112', '23'), +('14', '105', '14', '111237', '221348', '23'), +('14', '105', '14', '111235', '220509', '23'), +('14', '105', '11', '133816', '330844', '23'), +('14', '105', '11', '111335', '251795', '23'), +('14', '105', '11', '111337', '251281', '23'), +('14', '105', '11', '111338', '249412', '23'), +('14', '105', '22', '12425', '0', '22'), +('14', '105', '22', '21807', '0', '22'), +('14', '105', '22', '39342', '0', '22'), +('14', '105', '22', '23597', '0', '22'), +('14', '105', '1', '98769', '418022', '22'), +('14', '105', '1', '111306', '252045', '22'), +('14', '105', '1', '111307', '251525', '22'), +('14', '105', '1', '111304', '251502', '22'), +('14', '105', '2', '94056', '157430', '22'), +('14', '105', '2', '62985', '157013', '22'), +('14', '105', '2', '104424', '134109', '22'), +('14', '105', '2', '54846', '101064', '22'), +('14', '105', '3', '111314', '252281', '22'), +('14', '105', '3', '111316', '250970', '22'), +('14', '105', '3', '111315', '250513', '22'), +('14', '105', '3', '111013', '220580', '22'), +('14', '105', '5', '111319', '252284', '22'), +('14', '105', '5', '111321', '251012', '22'), +('14', '105', '5', '111318', '250686', '22'), +('14', '105', '5', '111018', '220583', '22'), +('14', '105', '8', '111332', '252470', '22'), +('14', '105', '8', '111329', '252051', '22'), +('14', '105', '8', '111330', '250785', '22'), +('14', '105', '8', '111331', '250007', '22'), +('14', '105', '6', '111323', '252352', '22'), +('14', '105', '6', '111326', '251299', '22'), +('14', '105', '6', '111325', '251044', '22'), +('14', '105', '6', '111022', '220751', '22'), +('14', '105', '17', '56043', '163631', '22'), +('14', '105', '17', '56084', '162840', '22'), +('14', '105', '17', '104427', '139654', '22'), +('14', '105', '17', '54854', '105212', '22'), +('14', '105', '7', '56040', '155613', '22'), +('14', '105', '7', '56080', '155554', '22'), +('14', '105', '7', '104425', '133395', '22'), +('14', '105', '7', '54848', '100612', '22'), +('14', '105', '9', '67098', '260347', '22'), +('14', '105', '9', '56031', '152181', '22'), +('14', '105', '9', '56070', '152115', '22'), +('14', '105', '9', '62984', '151906', '22'), +('14', '105', '15', '111349', '253530', '22'), +('14', '105', '15', '111340', '252646', '22'), +('14', '105', '15', '111344', '252277', '22'), +('14', '105', '15', '111346', '251570', '22'), +('14', '105', '20', '128733', '326057', '22'), +('14', '105', '20', '111356', '252458', '22'), +('14', '105', '20', '111352', '251449', '22'), +('14', '105', '20', '111351', '251199', '22'), +('14', '105', '12', '56035', '153294', '22'), +('14', '105', '12', '56074', '152478', '22'), +('14', '105', '12', '104422', '130697', '22'), +('14', '105', '12', '49656', '100404', '22'), +('14', '105', '18', '56041', '163030', '22'), +('14', '105', '18', '62986', '160564', '22'), +('14', '105', '18', '104426', '136274', '22'), +('14', '105', '18', '54851', '102165', '22'), +('14', '105', '19', '81763', '158430', '22'), +('14', '105', '19', '62990', '158110', '22'), +('14', '105', '19', '56075', '157929', '22'), +('14', '105', '19', '56037', '157598', '22'), +('14', '105', '13', '111521', '255940', '22'), +('14', '105', '13', '111524', '243599', '22'), +('14', '105', '13', '111519', '243336', '22'), +('14', '105', '13', '111221', '226099', '22'), +('14', '105', '14', '111537', '253051', '22'), +('14', '105', '14', '111535', '252112', '22'), +('14', '105', '14', '111237', '221348', '22'), +('14', '105', '14', '111235', '220509', '22'), +('14', '105', '11', '133816', '330844', '22'), +('14', '105', '11', '111335', '251795', '22'), +('14', '105', '11', '111337', '251281', '22'), +('14', '105', '11', '111338', '249412', '22'), +('14', '105', '22', '12425', '0', '21'), +('14', '105', '22', '21807', '0', '21'), +('14', '105', '22', '39342', '0', '21'), +('14', '105', '22', '23597', '0', '21'), +('14', '105', '1', '98769', '418022', '21'), +('14', '105', '1', '111306', '252045', '21'), +('14', '105', '1', '111307', '251525', '21'), +('14', '105', '1', '111304', '251502', '21'), +('14', '105', '2', '94056', '157430', '21'), +('14', '105', '2', '62985', '157013', '21'), +('14', '105', '2', '104424', '134109', '21'), +('14', '105', '2', '54846', '101064', '21'), +('14', '105', '3', '111314', '252281', '21'), +('14', '105', '3', '111316', '250970', '21'), +('14', '105', '3', '111315', '250513', '21'), +('14', '105', '3', '111013', '220580', '21'), +('14', '105', '5', '111319', '252284', '21'), +('14', '105', '5', '111321', '251012', '21'), +('14', '105', '5', '111318', '250686', '21'), +('14', '105', '5', '111018', '220583', '21'), +('14', '105', '8', '111332', '252470', '21'), +('14', '105', '8', '111329', '252051', '21'), +('14', '105', '8', '111330', '250785', '21'), +('14', '105', '8', '111331', '250007', '21'), +('14', '105', '6', '111323', '252352', '21'), +('14', '105', '6', '111326', '251299', '21'), +('14', '105', '6', '111325', '251044', '21'), +('14', '105', '6', '111022', '220751', '21'), +('14', '105', '17', '56043', '163631', '21'), +('14', '105', '17', '56084', '162840', '21'), +('14', '105', '17', '104427', '139654', '21'), +('14', '105', '17', '54854', '105212', '21'), +('14', '105', '7', '56040', '155613', '21'), +('14', '105', '7', '56080', '155554', '21'), +('14', '105', '7', '104425', '133395', '21'), +('14', '105', '7', '54848', '100612', '21'), +('14', '105', '9', '67098', '260347', '21'), +('14', '105', '9', '56031', '152181', '21'), +('14', '105', '9', '56070', '152115', '21'), +('14', '105', '9', '62984', '151906', '21'), +('14', '105', '15', '111349', '253530', '21'), +('14', '105', '15', '111340', '252646', '21'), +('14', '105', '15', '111344', '252277', '21'), +('14', '105', '15', '111346', '251570', '21'), +('14', '105', '20', '128733', '326057', '21'), +('14', '105', '20', '111356', '252458', '21'), +('14', '105', '20', '111352', '251449', '21'), +('14', '105', '20', '111351', '251199', '21'), +('14', '105', '12', '56035', '153294', '21'), +('14', '105', '12', '56074', '152478', '21'), +('14', '105', '12', '104422', '130697', '21'), +('14', '105', '12', '49656', '100404', '21'), +('14', '105', '18', '56041', '163030', '21'), +('14', '105', '18', '62986', '160564', '21'), +('14', '105', '18', '104426', '136274', '21'), +('14', '105', '18', '54851', '102165', '21'), +('14', '105', '19', '81763', '158430', '21'), +('14', '105', '19', '62990', '158110', '21'), +('14', '105', '19', '56075', '157929', '21'), +('14', '105', '19', '56037', '157598', '21'), +('14', '105', '13', '111521', '255940', '21'), +('14', '105', '13', '111524', '243599', '21'), +('14', '105', '13', '111519', '243336', '21'), +('14', '105', '13', '111221', '226099', '21'), +('14', '105', '14', '111537', '253051', '21'), +('14', '105', '14', '111535', '252112', '21'), +('14', '105', '14', '111237', '221348', '21'), +('14', '105', '14', '111235', '220509', '21'), +('14', '105', '11', '133816', '330844', '21'), +('14', '105', '11', '111335', '251795', '21'), +('14', '105', '11', '111337', '251281', '21'), +('14', '105', '11', '111338', '249412', '21'), +('14', '106', '22', '12425', '0', '23'), +('14', '106', '22', '21807', '0', '23'), +('14', '106', '22', '39342', '0', '23'), +('14', '106', '22', '23597', '0', '23'), +('14', '106', '1', '98769', '418027', '23'), +('14', '106', '1', '111306', '252051', '23'), +('14', '106', '1', '111307', '251534', '23'), +('14', '106', '1', '111304', '251507', '23'), +('14', '106', '2', '94056', '157433', '23'), +('14', '106', '2', '62985', '157017', '23'), +('14', '106', '2', '104424', '134118', '23'), +('14', '106', '2', '54846', '101069', '23'), +('14', '106', '3', '111314', '252289', '23'), +('14', '106', '3', '111316', '250977', '23'), +('14', '106', '3', '111315', '250520', '23'), +('14', '106', '3', '111013', '220587', '23'), +('14', '106', '5', '111319', '252292', '23'), +('14', '106', '5', '111321', '251017', '23'), +('14', '106', '5', '111318', '250694', '23'), +('14', '106', '5', '111018', '220591', '23'), +('14', '106', '8', '111332', '252477', '23'), +('14', '106', '8', '111329', '252059', '23'), +('14', '106', '8', '111330', '250791', '23'), +('14', '106', '8', '111331', '250013', '23'), +('14', '106', '6', '111323', '252358', '23'), +('14', '106', '6', '111326', '251307', '23'), +('14', '106', '6', '111325', '251049', '23'), +('14', '106', '6', '111022', '220757', '23'), +('14', '106', '17', '56043', '163637', '23'), +('14', '106', '17', '56084', '162847', '23'), +('14', '106', '17', '104427', '139661', '23'), +('14', '106', '17', '54854', '105217', '23'), +('14', '106', '7', '56040', '155624', '23'), +('14', '106', '7', '56080', '155562', '23'), +('14', '106', '7', '104425', '133401', '23'), +('14', '106', '7', '54848', '100618', '23'), +('14', '106', '9', '67098', '260352', '23'), +('14', '106', '9', '56031', '152191', '23'), +('14', '106', '9', '56070', '152121', '23'), +('14', '106', '9', '62984', '151912', '23'), +('14', '106', '15', '111349', '253539', '23'), +('14', '106', '15', '111340', '252652', '23'), +('14', '106', '15', '111344', '252282', '23'), +('14', '106', '15', '111346', '251576', '23'), +('14', '106', '20', '128733', '326063', '23'), +('14', '106', '20', '111356', '252465', '23'), +('14', '106', '20', '111352', '251455', '23'), +('14', '106', '20', '111351', '251207', '23'), +('14', '106', '12', '56035', '153304', '23'), +('14', '106', '12', '56074', '152485', '23'), +('14', '106', '12', '104422', '130706', '23'), +('14', '106', '12', '49656', '100405', '23'), +('14', '106', '18', '56041', '163038', '23'), +('14', '106', '18', '62986', '160570', '23'), +('14', '106', '18', '104426', '136277', '23'), +('14', '106', '18', '54851', '102170', '23'), +('14', '106', '19', '81763', '158440', '23'), +('14', '106', '19', '62990', '158118', '23'), +('14', '106', '19', '56075', '157935', '23'), +('14', '106', '19', '56037', '157601', '23'), +('14', '106', '13', '111521', '255946', '23'), +('14', '106', '13', '111524', '243606', '23'), +('14', '106', '13', '111519', '243344', '23'), +('14', '106', '13', '111221', '226106', '23'), +('14', '106', '14', '111537', '253057', '23'), +('14', '106', '14', '111535', '252117', '23'), +('14', '106', '14', '111237', '221354', '23'), +('14', '106', '14', '111235', '220514', '23'), +('14', '106', '11', '133816', '330849', '23'), +('14', '106', '11', '111335', '251801', '23'), +('14', '106', '11', '111337', '251288', '23'), +('14', '106', '11', '111338', '249419', '23'), +('14', '107', '22', '12425', '0', '23'), +('14', '107', '22', '21807', '0', '23'), +('14', '107', '22', '39342', '0', '23'), +('14', '107', '22', '23597', '0', '23'), +('14', '107', '1', '98769', '418032', '23'), +('14', '107', '1', '111306', '252057', '23'), +('14', '107', '1', '111307', '251543', '23'), +('14', '107', '1', '111304', '251512', '23'), +('14', '107', '2', '94056', '157437', '23'), +('14', '107', '2', '62985', '157021', '23'), +('14', '107', '2', '104424', '134127', '23'), +('14', '107', '2', '54846', '101074', '23'), +('14', '107', '3', '111314', '252296', '23'), +('14', '107', '3', '111316', '250983', '23'), +('14', '107', '3', '111315', '250527', '23'), +('14', '107', '3', '111013', '220595', '23'), +('14', '107', '5', '111319', '252300', '23'), +('14', '107', '5', '111321', '251023', '23'), +('14', '107', '5', '111318', '250702', '23'), +('14', '107', '5', '111018', '220599', '23'), +('14', '107', '8', '111332', '252484', '23'), +('14', '107', '8', '111329', '252067', '23'), +('14', '107', '8', '111330', '250797', '23'), +('14', '107', '8', '111331', '250019', '23'), +('14', '107', '6', '111323', '252365', '23'), +('14', '107', '6', '111326', '251315', '23'), +('14', '107', '6', '111325', '251054', '23'), +('14', '107', '6', '111022', '220764', '23'), +('14', '107', '17', '56043', '163644', '23'), +('14', '107', '17', '56084', '162854', '23'), +('14', '107', '17', '104427', '139668', '23'), +('14', '107', '17', '54854', '105222', '23'), +('14', '107', '7', '56040', '155635', '23'), +('14', '107', '7', '56080', '155570', '23'), +('14', '107', '7', '104425', '133407', '23'), +('14', '107', '7', '54848', '100625', '23'), +('14', '107', '9', '67098', '260357', '23'), +('14', '107', '9', '56031', '152202', '23'), +('14', '107', '9', '56070', '152126', '23'), +('14', '107', '9', '62984', '151918', '23'), +('14', '107', '15', '111349', '253548', '23'), +('14', '107', '15', '111340', '252659', '23'), +('14', '107', '15', '111344', '252287', '23'), +('14', '107', '15', '111346', '251583', '23'), +('14', '107', '20', '128733', '326070', '23'), +('14', '107', '20', '111356', '252473', '23'), +('14', '107', '20', '111352', '251461', '23'), +('14', '107', '20', '111351', '251215', '23'), +('14', '107', '12', '56035', '153314', '23'), +('14', '107', '12', '56074', '152491', '23'), +('14', '107', '12', '104422', '130714', '23'), +('14', '107', '12', '49656', '100406', '23'), +('14', '107', '18', '56041', '163047', '23'), +('14', '107', '18', '62986', '160576', '23'), +('14', '107', '18', '104426', '136279', '23'), +('14', '107', '18', '54851', '102174', '23'), +('14', '107', '19', '81763', '158451', '23'), +('14', '107', '19', '62990', '158126', '23'), +('14', '107', '19', '56075', '157940', '23'), +('14', '107', '19', '56037', '157604', '23'), +('14', '107', '13', '111521', '255952', '23'), +('14', '107', '13', '111524', '243614', '23'), +('14', '107', '13', '111519', '243352', '23'), +('14', '107', '13', '111221', '226112', '23'), +('14', '107', '14', '111537', '253063', '23'), +('14', '107', '14', '111535', '252122', '23'), +('14', '107', '14', '111237', '221360', '23'), +('14', '107', '14', '111235', '220519', '23'), +('14', '107', '11', '133816', '330853', '23'), +('14', '107', '11', '111335', '251808', '23'), +('14', '107', '11', '111337', '251294', '23'), +('14', '107', '11', '111338', '249426', '23'), +('14', '108', '22', '12425', '0', '23'), +('14', '108', '22', '21807', '0', '23'), +('14', '108', '22', '39342', '0', '23'), +('14', '108', '22', '23597', '0', '23'), +('14', '108', '1', '98769', '418036', '23'), +('14', '108', '1', '111306', '252064', '23'), +('14', '108', '1', '111307', '251552', '23'), +('14', '108', '1', '111304', '251518', '23'), +('14', '108', '2', '94056', '157441', '23'), +('14', '108', '2', '62985', '157026', '23'), +('14', '108', '2', '104424', '134136', '23'), +('14', '108', '2', '54846', '101079', '23'), +('14', '108', '3', '111314', '252303', '23'), +('14', '108', '3', '111316', '250990', '23'), +('14', '108', '3', '111315', '250534', '23'), +('14', '108', '3', '111013', '220602', '23'), +('14', '108', '5', '111319', '252308', '23'), +('14', '108', '5', '111321', '251029', '23'), +('14', '108', '5', '111318', '250710', '23'), +('14', '108', '5', '111018', '220607', '23'), +('14', '108', '8', '111332', '252491', '23'), +('14', '108', '8', '111329', '252076', '23'), +('14', '108', '8', '111330', '250803', '23'), +('14', '108', '8', '111331', '250025', '23'), +('14', '108', '6', '111323', '252371', '23'), +('14', '108', '6', '111326', '251323', '23'), +('14', '108', '6', '111325', '251060', '23'), +('14', '108', '6', '111022', '220770', '23'), +('14', '108', '17', '56043', '163650', '23'), +('14', '108', '17', '56084', '162861', '23'), +('14', '108', '17', '104427', '139675', '23'), +('14', '108', '17', '54854', '105227', '23'), +('14', '108', '7', '56040', '155645', '23'), +('14', '108', '7', '56080', '155578', '23'), +('14', '108', '7', '104425', '133413', '23'), +('14', '108', '7', '54848', '100631', '23'), +('14', '108', '9', '67098', '260362', '23'), +('14', '108', '9', '56031', '152212', '23'), +('14', '108', '9', '56070', '152132', '23'), +('14', '108', '9', '62984', '151923', '23'), +('14', '108', '15', '111349', '253556', '23'), +('14', '108', '15', '111340', '252665', '23'), +('14', '108', '15', '111344', '252293', '23'), +('14', '108', '15', '111346', '251589', '23'), +('14', '108', '20', '128733', '326076', '23'), +('14', '108', '20', '111356', '252480', '23'), +('14', '108', '20', '111352', '251467', '23'), +('14', '108', '20', '111351', '251222', '23'), +('14', '108', '12', '56035', '153323', '23'), +('14', '108', '12', '56074', '152498', '23'), +('14', '108', '12', '104422', '130722', '23'), +('14', '108', '12', '49656', '100407', '23'), +('14', '108', '18', '56041', '163056', '23'), +('14', '108', '18', '62986', '160582', '23'), +('14', '108', '18', '104426', '136282', '23'), +('14', '108', '18', '54851', '102179', '23'), +('14', '108', '19', '81763', '158461', '23'), +('14', '108', '19', '62990', '158134', '23'), +('14', '108', '19', '56075', '157945', '23'), +('14', '108', '19', '56037', '157607', '23'), +('14', '108', '13', '111521', '255958', '23'), +('14', '108', '13', '111524', '243621', '23'), +('14', '108', '13', '111519', '243360', '23'), +('14', '108', '13', '111221', '226119', '23'), +('14', '108', '14', '111537', '253068', '23'), +('14', '108', '14', '111535', '252126', '23'), +('14', '108', '14', '111237', '221365', '23'), +('14', '108', '14', '111235', '220523', '23'), +('14', '108', '11', '133816', '330858', '23'), +('14', '108', '11', '111335', '251814', '23'), +('14', '108', '11', '111337', '251301', '23'), +('14', '108', '11', '111338', '249432', '23'), +('14', '109', '22', '12425', '0', '23'), +('14', '109', '22', '21807', '0', '23'), +('14', '109', '22', '39342', '0', '23'), +('14', '109', '22', '23597', '0', '23'), +('14', '109', '1', '98769', '418041', '23'), +('14', '109', '1', '111306', '252070', '23'), +('14', '109', '1', '111307', '251561', '23'), +('14', '109', '1', '111304', '251523', '23'), +('14', '109', '2', '94056', '157445', '23'), +('14', '109', '2', '62985', '157030', '23'), +('14', '109', '2', '104424', '134145', '23'), +('14', '109', '2', '54846', '101084', '23'), +('14', '109', '3', '111314', '252310', '23'), +('14', '109', '3', '111316', '250997', '23'), +('14', '109', '3', '111315', '250541', '23'), +('14', '109', '3', '111013', '220609', '23'), +('14', '109', '5', '111319', '252316', '23'), +('14', '109', '5', '111321', '251034', '23'), +('14', '109', '5', '111318', '250718', '23'), +('14', '109', '5', '111018', '220615', '23'), +('14', '109', '8', '111332', '252498', '23'), +('14', '109', '8', '111329', '252084', '23'), +('14', '109', '8', '111330', '250809', '23'), +('14', '109', '8', '111331', '250031', '23'), +('14', '109', '6', '111323', '252377', '23'), +('14', '109', '6', '111326', '251332', '23'), +('14', '109', '6', '111325', '251065', '23'), +('14', '109', '6', '111022', '220776', '23'), +('14', '109', '17', '56043', '163656', '23'), +('14', '109', '17', '56084', '162868', '23'), +('14', '109', '17', '104427', '139682', '23'), +('14', '109', '17', '54854', '105232', '23'), +('14', '109', '7', '56040', '155656', '23'), +('14', '109', '7', '56080', '155585', '23'), +('14', '109', '7', '104425', '133419', '23'), +('14', '109', '7', '54848', '100638', '23'), +('14', '109', '9', '67098', '260367', '23'), +('14', '109', '9', '56031', '152223', '23'), +('14', '109', '9', '56070', '152137', '23'), +('14', '109', '9', '62984', '151929', '23'), +('14', '109', '15', '111349', '253565', '23'), +('14', '109', '15', '111340', '252671', '23'), +('14', '109', '15', '111344', '252298', '23'), +('14', '109', '15', '111346', '251596', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '109', '20', '128733', '326083', '23'), +('14', '109', '20', '111356', '252487', '23'), +('14', '109', '20', '111352', '251473', '23'), +('14', '109', '20', '111351', '251230', '23'), +('14', '109', '12', '56035', '153333', '23'), +('14', '109', '12', '56074', '152504', '23'), +('14', '109', '12', '104422', '130731', '23'), +('14', '109', '12', '49656', '100408', '23'), +('14', '109', '18', '56041', '163064', '23'), +('14', '109', '18', '62986', '160587', '23'), +('14', '109', '18', '104426', '136285', '23'), +('14', '109', '18', '54851', '102184', '23'), +('14', '109', '19', '81763', '158472', '23'), +('14', '109', '19', '62990', '158143', '23'), +('14', '109', '19', '56075', '157950', '23'), +('14', '109', '19', '56037', '157610', '23'), +('14', '109', '13', '111521', '255964', '23'), +('14', '109', '13', '111524', '243628', '23'), +('14', '109', '13', '111519', '243368', '23'), +('14', '109', '13', '111221', '226125', '23'), +('14', '109', '14', '111537', '253074', '23'), +('14', '109', '14', '111535', '252131', '23'), +('14', '109', '14', '111237', '221371', '23'), +('14', '109', '14', '111235', '220528', '23'), +('14', '109', '11', '133816', '330862', '23'), +('14', '109', '11', '111335', '251820', '23'), +('14', '109', '11', '111337', '251308', '23'), +('14', '109', '11', '111338', '249439', '23'), +('14', '110', '22', '12425', '0', '25'), +('14', '110', '22', '39342', '0', '25'), +('14', '110', '22', '7867', '0', '25'), +('14', '110', '22', '53550', '0', '25'), +('14', '110', '1', '98769', '418046', '25'), +('14', '110', '1', '111306', '252076', '25'), +('14', '110', '1', '111307', '251571', '25'), +('14', '110', '1', '111304', '251528', '25'), +('14', '110', '2', '94056', '157449', '25'), +('14', '110', '2', '62985', '157034', '25'), +('14', '110', '2', '104424', '134154', '25'), +('14', '110', '2', '54846', '101089', '25'), +('14', '110', '3', '111314', '252318', '25'), +('14', '110', '3', '111316', '251004', '25'), +('14', '110', '3', '111315', '250548', '25'), +('14', '110', '3', '111013', '220616', '25'), +('14', '110', '5', '111319', '252324', '25'), +('14', '110', '5', '111321', '251040', '25'), +('14', '110', '5', '111318', '250726', '25'), +('14', '110', '5', '111018', '220623', '25'), +('14', '110', '8', '111332', '252505', '25'), +('14', '110', '8', '111329', '252092', '25'), +('14', '110', '8', '111330', '250815', '25'), +('14', '110', '8', '111331', '250037', '25'), +('14', '110', '6', '111323', '252384', '25'), +('14', '110', '6', '111326', '251340', '25'), +('14', '110', '6', '111325', '251070', '25'), +('14', '110', '6', '111022', '220783', '25'), +('14', '110', '17', '56043', '163663', '25'), +('14', '110', '17', '56084', '162875', '25'), +('14', '110', '17', '104427', '139689', '25'), +('14', '110', '17', '54854', '105237', '25'), +('14', '110', '7', '56040', '155667', '25'), +('14', '110', '7', '56080', '155593', '25'), +('14', '110', '7', '104425', '133425', '25'), +('14', '110', '7', '54848', '100644', '25'), +('14', '110', '9', '67098', '260371', '25'), +('14', '110', '9', '56031', '152233', '25'), +('14', '110', '9', '56070', '152143', '25'), +('14', '110', '9', '62984', '151935', '25'), +('14', '110', '15', '111349', '253574', '25'), +('14', '110', '15', '111340', '252677', '25'), +('14', '110', '15', '111344', '252303', '25'), +('14', '110', '15', '111346', '251602', '25'), +('14', '110', '20', '128733', '326089', '25'), +('14', '110', '20', '111356', '252494', '25'), +('14', '110', '20', '111352', '251479', '25'), +('14', '110', '20', '111351', '251238', '25'), +('14', '110', '12', '56035', '153343', '25'), +('14', '110', '12', '56074', '152510', '25'), +('14', '110', '12', '104422', '130739', '25'), +('14', '110', '12', '49656', '100409', '25'), +('14', '110', '18', '56041', '163073', '25'), +('14', '110', '18', '62986', '160593', '25'), +('14', '110', '18', '104426', '136288', '25'), +('14', '110', '18', '54851', '102188', '25'), +('14', '110', '19', '81763', '158482', '25'), +('14', '110', '19', '62990', '158151', '25'), +('14', '110', '19', '56075', '157956', '25'), +('14', '110', '19', '56037', '157613', '25'), +('14', '110', '13', '111521', '255971', '25'), +('14', '110', '13', '111524', '243636', '25'), +('14', '110', '13', '111519', '243377', '25'), +('14', '110', '13', '111221', '226132', '25'), +('14', '110', '14', '111537', '253080', '25'), +('14', '110', '14', '111535', '252136', '25'), +('14', '110', '14', '111237', '221377', '25'), +('14', '110', '14', '111235', '220533', '25'), +('14', '110', '11', '85213', '375613', '25'), +('14', '110', '11', '133816', '330867', '25'), +('14', '110', '11', '111335', '251827', '25'), +('14', '110', '11', '111337', '251314', '25'), +('14', '110', '22', '12425', '0', '24'), +('14', '110', '22', '39342', '0', '24'), +('14', '110', '22', '7867', '0', '24'), +('14', '110', '22', '53550', '0', '24'), +('14', '110', '1', '98769', '418046', '24'), +('14', '110', '1', '111306', '252076', '24'), +('14', '110', '1', '111307', '251571', '24'), +('14', '110', '1', '111304', '251528', '24'), +('14', '110', '2', '94056', '157449', '24'), +('14', '110', '2', '62985', '157034', '24'), +('14', '110', '2', '104424', '134154', '24'), +('14', '110', '2', '54846', '101089', '24'), +('14', '110', '3', '111314', '252318', '24'), +('14', '110', '3', '111316', '251004', '24'), +('14', '110', '3', '111315', '250548', '24'), +('14', '110', '3', '111013', '220616', '24'), +('14', '110', '5', '111319', '252324', '24'), +('14', '110', '5', '111321', '251040', '24'), +('14', '110', '5', '111318', '250726', '24'), +('14', '110', '5', '111018', '220623', '24'), +('14', '110', '8', '111332', '252505', '24'), +('14', '110', '8', '111329', '252092', '24'), +('14', '110', '8', '111330', '250815', '24'), +('14', '110', '8', '111331', '250037', '24'), +('14', '110', '6', '111323', '252384', '24'), +('14', '110', '6', '111326', '251340', '24'), +('14', '110', '6', '111325', '251070', '24'), +('14', '110', '6', '111022', '220783', '24'), +('14', '110', '17', '56043', '163663', '24'), +('14', '110', '17', '56084', '162875', '24'), +('14', '110', '17', '104427', '139689', '24'), +('14', '110', '17', '54854', '105237', '24'), +('14', '110', '7', '56040', '155667', '24'), +('14', '110', '7', '56080', '155593', '24'), +('14', '110', '7', '104425', '133425', '24'), +('14', '110', '7', '54848', '100644', '24'), +('14', '110', '9', '67098', '260371', '24'), +('14', '110', '9', '56031', '152233', '24'), +('14', '110', '9', '56070', '152143', '24'), +('14', '110', '9', '62984', '151935', '24'), +('14', '110', '15', '111349', '253574', '24'), +('14', '110', '15', '111340', '252677', '24'), +('14', '110', '15', '111344', '252303', '24'), +('14', '110', '15', '111346', '251602', '24'), +('14', '110', '20', '128733', '326089', '24'), +('14', '110', '20', '111356', '252494', '24'), +('14', '110', '20', '111352', '251479', '24'), +('14', '110', '20', '111351', '251238', '24'), +('14', '110', '12', '56035', '153343', '24'), +('14', '110', '12', '56074', '152510', '24'), +('14', '110', '12', '104422', '130739', '24'), +('14', '110', '12', '49656', '100409', '24'), +('14', '110', '18', '56041', '163073', '24'), +('14', '110', '18', '62986', '160593', '24'), +('14', '110', '18', '104426', '136288', '24'), +('14', '110', '18', '54851', '102188', '24'), +('14', '110', '19', '81763', '158482', '24'), +('14', '110', '19', '62990', '158151', '24'), +('14', '110', '19', '56075', '157956', '24'), +('14', '110', '19', '56037', '157613', '24'), +('14', '110', '13', '111521', '255971', '24'), +('14', '110', '13', '111524', '243636', '24'), +('14', '110', '13', '111519', '243377', '24'), +('14', '110', '13', '111221', '226132', '24'), +('14', '110', '14', '111537', '253080', '24'), +('14', '110', '14', '111535', '252136', '24'), +('14', '110', '14', '111237', '221377', '24'), +('14', '110', '14', '111235', '220533', '24'), +('14', '110', '11', '85213', '375613', '24'), +('14', '110', '11', '133816', '330867', '24'), +('14', '110', '11', '111335', '251827', '24'), +('14', '110', '11', '111337', '251314', '24'), +('14', '111', '22', '12425', '0', '25'), +('14', '111', '22', '39342', '0', '25'), +('14', '111', '22', '7867', '0', '25'), +('14', '111', '22', '53550', '0', '25'), +('14', '111', '1', '98769', '418051', '25'), +('14', '111', '1', '111306', '252082', '25'), +('14', '111', '1', '111307', '251580', '25'), +('14', '111', '1', '111304', '251534', '25'), +('14', '111', '2', '94056', '157453', '25'), +('14', '111', '2', '62985', '157038', '25'), +('14', '111', '2', '104424', '134162', '25'), +('14', '111', '2', '54846', '101095', '25'), +('14', '111', '3', '111314', '252325', '25'), +('14', '111', '3', '111316', '251010', '25'), +('14', '111', '3', '111315', '250555', '25'), +('14', '111', '3', '111013', '220624', '25'), +('14', '111', '5', '111319', '252331', '25'), +('14', '111', '5', '111321', '251046', '25'), +('14', '111', '5', '111318', '250734', '25'), +('14', '111', '5', '111018', '220630', '25'), +('14', '111', '8', '111332', '252513', '25'), +('14', '111', '8', '111329', '252100', '25'), +('14', '111', '8', '111330', '250821', '25'), +('14', '111', '8', '111331', '250043', '25'), +('14', '111', '6', '111323', '252390', '25'), +('14', '111', '6', '111326', '251348', '25'), +('14', '111', '6', '111325', '251075', '25'), +('14', '111', '6', '111022', '220789', '25'), +('14', '111', '17', '56043', '163669', '25'), +('14', '111', '17', '56084', '162882', '25'), +('14', '111', '17', '104427', '139695', '25'), +('14', '111', '17', '54854', '105242', '25'), +('14', '111', '7', '56040', '155678', '25'), +('14', '111', '7', '56080', '155601', '25'), +('14', '111', '7', '104425', '133431', '25'), +('14', '111', '7', '54848', '100651', '25'), +('14', '111', '9', '67098', '260376', '25'), +('14', '111', '9', '56031', '152243', '25'), +('14', '111', '9', '56070', '152148', '25'), +('14', '111', '9', '62984', '151941', '25'), +('14', '111', '15', '111349', '253583', '25'), +('14', '111', '15', '111340', '252683', '25'), +('14', '111', '15', '111344', '252308', '25'), +('14', '111', '15', '111346', '251609', '25'), +('14', '111', '20', '128733', '326096', '25'), +('14', '111', '20', '111356', '252501', '25'), +('14', '111', '20', '111352', '251485', '25'), +('14', '111', '20', '111351', '251246', '25'), +('14', '111', '12', '56035', '153353', '25'), +('14', '111', '12', '56074', '152517', '25'), +('14', '111', '12', '104422', '130747', '25'), +('14', '111', '12', '49656', '100410', '25'), +('14', '111', '18', '56041', '163082', '25'), +('14', '111', '18', '62986', '160599', '25'), +('14', '111', '18', '104426', '136290', '25'), +('14', '111', '18', '54851', '102193', '25'), +('14', '111', '19', '81763', '158492', '25'), +('14', '111', '19', '62990', '158159', '25'), +('14', '111', '19', '56075', '157961', '25'), +('14', '111', '19', '56037', '157617', '25'), +('14', '111', '13', '111521', '255976', '25'), +('14', '111', '13', '111524', '243643', '25'), +('14', '111', '13', '111519', '243385', '25'), +('14', '111', '13', '111221', '226139', '25'), +('14', '111', '14', '111537', '253086', '25'), +('14', '111', '14', '111535', '252140', '25'), +('14', '111', '14', '111237', '221383', '25'), +('14', '111', '14', '111235', '220537', '25'), +('14', '111', '11', '85213', '375618', '25'), +('14', '111', '11', '133816', '330872', '25'), +('14', '111', '11', '111335', '251833', '25'), +('14', '111', '11', '111337', '251321', '25'), +('14', '112', '22', '12425', '0', '25'), +('14', '112', '22', '39342', '0', '25'), +('14', '112', '22', '7867', '0', '25'), +('14', '112', '22', '53550', '0', '25'), +('14', '112', '1', '98769', '418055', '25'), +('14', '112', '1', '111306', '252088', '25'), +('14', '112', '1', '111307', '251589', '25'), +('14', '112', '1', '111304', '251539', '25'), +('14', '112', '2', '94056', '157457', '25'), +('14', '112', '2', '62985', '157042', '25'), +('14', '112', '2', '104424', '134171', '25'), +('14', '112', '2', '54846', '101100', '25'), +('14', '112', '3', '111314', '252332', '25'), +('14', '112', '3', '111316', '251017', '25'), +('14', '112', '3', '111315', '250562', '25'), +('14', '112', '3', '111013', '220631', '25'), +('14', '112', '5', '111319', '252339', '25'), +('14', '112', '5', '111321', '251052', '25'), +('14', '112', '5', '111318', '250742', '25'), +('14', '112', '5', '111018', '220638', '25'), +('14', '112', '8', '111332', '252520', '25'), +('14', '112', '8', '111329', '252109', '25'), +('14', '112', '8', '111330', '250827', '25'), +('14', '112', '8', '111331', '250049', '25'), +('14', '112', '6', '111323', '252397', '25'), +('14', '112', '6', '111326', '251357', '25'), +('14', '112', '6', '111325', '251080', '25'), +('14', '112', '6', '111022', '220796', '25'), +('14', '112', '17', '56043', '163675', '25'), +('14', '112', '17', '56084', '162889', '25'), +('14', '112', '17', '104427', '139702', '25'), +('14', '112', '17', '54854', '105247', '25'), +('14', '112', '7', '56040', '155689', '25'), +('14', '112', '7', '56080', '155609', '25'), +('14', '112', '7', '104425', '133437', '25'), +('14', '112', '7', '54848', '100657', '25'), +('14', '112', '9', '67098', '260381', '25'), +('14', '112', '9', '56031', '152254', '25'), +('14', '112', '9', '56070', '152154', '25'), +('14', '112', '9', '62984', '151946', '25'), +('14', '112', '15', '111349', '253591', '25'), +('14', '112', '15', '111340', '252689', '25'), +('14', '112', '15', '111344', '252314', '25'), +('14', '112', '15', '111346', '251615', '25'), +('14', '112', '20', '128733', '326102', '25'), +('14', '112', '20', '111356', '252508', '25'), +('14', '112', '20', '111352', '251491', '25'), +('14', '112', '20', '111351', '251254', '25'), +('14', '112', '12', '56035', '153363', '25'), +('14', '112', '12', '56074', '152523', '25'), +('14', '112', '12', '104422', '130755', '25'), +('14', '112', '12', '49656', '100411', '25'), +('14', '112', '18', '56041', '163091', '25'), +('14', '112', '18', '62986', '160605', '25'), +('14', '112', '18', '104426', '136293', '25'), +('14', '112', '18', '54851', '102198', '25'), +('14', '112', '19', '81763', '158503', '25'), +('14', '112', '19', '62990', '158167', '25'), +('14', '112', '19', '56075', '157966', '25'), +('14', '112', '19', '56037', '157620', '25'), +('14', '112', '13', '111521', '255982', '25'), +('14', '112', '13', '111524', '243650', '25'), +('14', '112', '13', '111519', '243393', '25'), +('14', '112', '13', '111221', '226145', '25'), +('14', '112', '14', '111537', '253092', '25'), +('14', '112', '14', '111535', '252145', '25'), +('14', '112', '14', '111237', '221389', '25'), +('14', '112', '14', '111235', '220542', '25'), +('14', '112', '11', '85213', '375623', '25'), +('14', '112', '11', '133816', '330876', '25'), +('14', '112', '11', '111335', '251840', '25'), +('14', '112', '11', '111337', '251328', '25'), +('14', '113', '22', '12425', '0', '25'), +('14', '113', '22', '39342', '0', '25'), +('14', '113', '22', '7867', '0', '25'), +('14', '113', '22', '53550', '0', '25'), +('14', '113', '1', '98769', '418060', '25'), +('14', '113', '1', '111306', '252094', '25'), +('14', '113', '1', '111307', '251598', '25'), +('14', '113', '1', '111304', '251544', '25'), +('14', '113', '2', '94056', '157460', '25'), +('14', '113', '2', '62985', '157047', '25'), +('14', '113', '2', '104424', '134180', '25'), +('14', '113', '2', '54846', '101105', '25'), +('14', '113', '3', '111314', '252339', '25'), +('14', '113', '3', '111316', '251024', '25'), +('14', '113', '3', '111315', '250569', '25'), +('14', '113', '3', '111013', '220638', '25'), +('14', '113', '5', '111319', '252347', '25'), +('14', '113', '5', '111321', '251057', '25'), +('14', '113', '5', '111318', '250750', '25'), +('14', '113', '5', '111018', '220646', '25'), +('14', '113', '8', '111332', '252527', '25'), +('14', '113', '8', '111329', '252117', '25'), +('14', '113', '8', '111330', '250833', '25'), +('14', '113', '8', '111331', '250055', '25'), +('14', '113', '6', '111323', '252403', '25'), +('14', '113', '6', '111326', '251365', '25'), +('14', '113', '6', '111325', '251086', '25'), +('14', '113', '6', '111022', '220802', '25'), +('14', '113', '17', '56043', '163681', '25'), +('14', '113', '17', '56084', '162896', '25'), +('14', '113', '17', '104427', '139709', '25'), +('14', '113', '17', '54854', '105253', '25'), +('14', '113', '7', '56040', '155700', '25'), +('14', '113', '7', '56080', '155616', '25'), +('14', '113', '7', '104425', '133442', '25'), +('14', '113', '7', '54848', '100664', '25'), +('14', '113', '9', '67098', '260386', '25'), +('14', '113', '9', '56031', '152264', '25'), +('14', '113', '9', '56070', '152160', '25'), +('14', '113', '9', '62984', '151952', '25'), +('14', '113', '15', '111349', '253600', '25'), +('14', '113', '15', '111340', '252695', '25'), +('14', '113', '15', '111344', '252319', '25'), +('14', '113', '15', '111346', '251621', '25'), +('14', '113', '20', '128733', '326109', '25'), +('14', '113', '20', '111356', '252516', '25'), +('14', '113', '20', '111352', '251497', '25'), +('14', '113', '20', '111351', '251262', '25'), +('14', '113', '12', '56035', '153373', '25'), +('14', '113', '12', '56074', '152530', '25'), +('14', '113', '12', '104422', '130764', '25'), +('14', '113', '12', '49656', '100412', '25'), +('14', '113', '18', '56041', '163099', '25'), +('14', '113', '18', '62986', '160611', '25'), +('14', '113', '18', '104426', '136296', '25'), +('14', '113', '18', '54851', '102202', '25'), +('14', '113', '19', '81763', '158513', '25'), +('14', '113', '19', '62990', '158175', '25'), +('14', '113', '19', '56075', '157972', '25'), +('14', '113', '19', '56037', '157623', '25'), +('14', '113', '13', '111521', '255988', '25'), +('14', '113', '13', '111524', '243658', '25'), +('14', '113', '13', '111519', '243401', '25'), +('14', '113', '13', '111221', '226152', '25'), +('14', '113', '14', '111537', '253098', '25'), +('14', '113', '14', '111535', '252150', '25'), +('14', '113', '14', '111237', '221395', '25'), +('14', '113', '14', '111235', '220547', '25'), +('14', '113', '11', '85213', '375627', '25'), +('14', '113', '11', '133816', '330881', '25'), +('14', '113', '11', '111335', '251846', '25'), +('14', '113', '11', '111337', '251334', '25'), +('14', '114', '22', '12425', '0', '25'), +('14', '114', '22', '39342', '0', '25'), +('14', '114', '22', '7867', '0', '25'), +('14', '114', '22', '53550', '0', '25'), +('14', '114', '1', '98769', '418065', '25'), +('14', '114', '1', '111306', '252100', '25'), +('14', '114', '1', '111307', '251607', '25'), +('14', '114', '1', '111304', '251550', '25'), +('14', '114', '2', '94056', '157464', '25'), +('14', '114', '2', '62985', '157051', '25'), +('14', '114', '2', '104424', '134189', '25'), +('14', '114', '2', '54846', '101110', '25'), +('14', '114', '3', '111314', '252346', '25'), +('14', '114', '3', '111316', '251030', '25'), +('14', '114', '3', '111315', '250576', '25'), +('14', '114', '3', '111013', '220645', '25'), +('14', '114', '5', '111319', '252355', '25'), +('14', '114', '5', '111321', '251063', '25'), +('14', '114', '5', '111318', '250758', '25'), +('14', '114', '5', '111018', '220654', '25'), +('14', '114', '8', '111332', '252534', '25'), +('14', '114', '8', '111329', '252125', '25'), +('14', '114', '8', '111330', '250839', '25'), +('14', '114', '8', '111331', '250061', '25'), +('14', '114', '6', '111323', '252410', '25'), +('14', '114', '6', '111326', '251373', '25'), +('14', '114', '6', '111325', '251091', '25'), +('14', '114', '6', '111022', '220809', '25'), +('14', '114', '17', '56043', '163688', '25'), +('14', '114', '17', '56084', '162903', '25'), +('14', '114', '17', '104427', '139716', '25'), +('14', '114', '17', '54854', '105258', '25'), +('14', '114', '7', '56040', '155710', '25'), +('14', '114', '7', '56080', '155624', '25'), +('14', '114', '7', '104425', '133448', '25'), +('14', '114', '7', '54848', '100670', '25'), +('14', '114', '9', '67098', '260391', '25'), +('14', '114', '9', '56031', '152275', '25'), +('14', '114', '9', '56070', '152165', '25'), +('14', '114', '9', '62984', '151958', '25'), +('14', '114', '15', '111349', '253609', '25'), +('14', '114', '15', '111340', '252701', '25'), +('14', '114', '15', '111344', '252324', '25'), +('14', '114', '15', '111346', '251628', '25'), +('14', '114', '20', '128733', '326115', '25'), +('14', '114', '20', '111356', '252523', '25'), +('14', '114', '20', '111352', '251503', '25'), +('14', '114', '20', '111351', '251270', '25'), +('14', '114', '12', '56035', '153382', '25'), +('14', '114', '12', '56074', '152536', '25'), +('14', '114', '12', '104422', '130772', '25'), +('14', '114', '12', '49656', '100412', '25'), +('14', '114', '18', '56041', '163108', '25'), +('14', '114', '18', '62986', '160617', '25'), +('14', '114', '18', '104426', '136299', '25'), +('14', '114', '18', '54851', '102207', '25'), +('14', '114', '19', '81763', '158523', '25'), +('14', '114', '19', '62990', '158183', '25'), +('14', '114', '19', '56075', '157977', '25'), +('14', '114', '19', '56037', '157626', '25'), +('14', '114', '13', '111521', '255994', '25'), +('14', '114', '13', '111524', '243665', '25'), +('14', '114', '13', '111519', '243409', '25'), +('14', '114', '13', '111221', '226158', '25'), +('14', '114', '14', '111537', '253103', '25'), +('14', '114', '14', '111535', '252154', '25'), +('14', '114', '14', '111237', '221400', '25'), +('14', '114', '14', '111235', '220551', '25'), +('14', '114', '11', '85213', '375632', '25'), +('14', '114', '11', '133816', '330886', '25'), +('14', '114', '11', '111335', '251853', '25'), +('14', '114', '11', '111337', '251341', '25'), +('14', '115', '22', '12425', '0', '26'), +('14', '115', '22', '39342', '0', '26'), +('14', '115', '22', '7867', '0', '26'), +('14', '115', '22', '53550', '0', '26'), +('14', '115', '1', '98769', '418070', '26'), +('14', '115', '1', '111306', '252106', '26'), +('14', '115', '1', '111307', '251616', '26'), +('14', '115', '1', '111304', '251555', '26'), +('14', '115', '2', '94056', '157468', '26'), +('14', '115', '2', '62985', '157055', '26'), +('14', '115', '2', '104424', '134198', '26'), +('14', '115', '2', '54846', '101115', '26'), +('14', '115', '3', '111314', '252354', '26'), +('14', '115', '3', '111316', '251037', '26'), +('14', '115', '3', '111315', '250583', '26'), +('14', '115', '3', '111013', '220652', '26'), +('14', '115', '5', '111319', '252363', '26'), +('14', '115', '5', '111321', '251069', '26'), +('14', '115', '5', '111318', '250766', '26'), +('14', '115', '5', '111018', '220662', '26'), +('14', '115', '8', '111332', '252541', '26'), +('14', '115', '8', '111329', '252134', '26'), +('14', '115', '8', '111330', '250845', '26'), +('14', '115', '8', '111331', '250067', '26'), +('14', '115', '6', '111323', '252416', '26'), +('14', '115', '6', '111326', '251381', '26'), +('14', '115', '6', '111325', '251096', '26'), +('14', '115', '6', '111022', '220815', '26'), +('14', '115', '17', '56043', '163694', '26'), +('14', '115', '17', '56084', '162910', '26'), +('14', '115', '17', '104427', '139723', '26'), +('14', '115', '17', '54854', '105263', '26'), +('14', '115', '7', '56040', '155721', '26'), +('14', '115', '7', '56080', '155632', '26'), +('14', '115', '7', '104425', '133454', '26'), +('14', '115', '7', '54848', '100677', '26'), +('14', '115', '9', '67098', '260396', '26'), +('14', '115', '9', '56031', '152285', '26'), +('14', '115', '9', '56070', '152171', '26'), +('14', '115', '9', '62984', '151963', '26'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('14', '115', '15', '111349', '253617', '26'), +('14', '115', '15', '111340', '252707', '26'), +('14', '115', '15', '111344', '252329', '26'), +('14', '115', '15', '111346', '251634', '26'), +('14', '115', '20', '128733', '326122', '26'), +('14', '115', '20', '111356', '252530', '26'), +('14', '115', '20', '111352', '251509', '26'), +('14', '115', '20', '111351', '251277', '26'), +('14', '115', '12', '56035', '153392', '26'), +('14', '115', '12', '56074', '152542', '26'), +('14', '115', '12', '104422', '130780', '26'), +('14', '115', '12', '49656', '100413', '26'), +('14', '115', '18', '56041', '163117', '26'), +('14', '115', '18', '62986', '160623', '26'), +('14', '115', '18', '104426', '136301', '26'), +('14', '115', '18', '54851', '102211', '26'), +('14', '115', '19', '81763', '158534', '26'), +('14', '115', '19', '62990', '158191', '26'), +('14', '115', '19', '56075', '157982', '26'), +('14', '115', '19', '56037', '157629', '26'), +('14', '115', '13', '111521', '256000', '26'), +('14', '115', '13', '111524', '243672', '26'), +('14', '115', '13', '111519', '243417', '26'), +('14', '115', '13', '111221', '226165', '26'), +('14', '115', '14', '111537', '253109', '26'), +('14', '115', '14', '111535', '252159', '26'), +('14', '115', '14', '111237', '221406', '26'), +('14', '115', '14', '111235', '220556', '26'), +('14', '115', '11', '85213', '375636', '26'), +('14', '115', '11', '133816', '330890', '26'), +('14', '115', '11', '111335', '251859', '26'), +('14', '115', '11', '111337', '251348', '26'), +('15', '1', '22', '10323', '0', '0'), +('15', '1', '22', '10664', '0', '0'), +('15', '1', '22', '9246', '0', '0'), +('15', '1', '22', '21509', '0', '0'), +('15', '1', '1', '14701', '5052', '0'), +('15', '1', '1', '14702', '4250', '0'), +('15', '1', '1', '30361', '1890', '0'), +('15', '1', '1', '10165', '1683', '0'), +('15', '1', '2', '1519', '3207', '0'), +('15', '1', '2', '10142', '3012', '0'), +('15', '1', '2', '4341', '2712', '0'), +('15', '1', '2', '4504', '2563', '0'), +('15', '1', '3', '10144', '1304', '0'), +('15', '1', '3', '14705', '990', '0'), +('15', '1', '3', '14706', '990', '0'), +('15', '1', '3', '2295', '965', '0'), +('15', '1', '5', '14703', '8250', '0'), +('15', '1', '5', '14700', '4953', '0'), +('15', '1', '5', '10055', '4505', '0'), +('15', '1', '5', '2583', '3055', '0'), +('15', '1', '8', '11621', '14220', '0'), +('15', '1', '8', '1546', '10429', '0'), +('15', '1', '8', '1409', '6312', '0'), +('15', '1', '8', '11603', '6064', '0'), +('15', '1', '6', '1557', '6760', '0'), +('15', '1', '6', '2286', '2124', '0'), +('15', '1', '6', '25062', '1833', '0'), +('15', '1', '6', '2463', '948', '0'), +('15', '1', '17', '2285', '6485', '0'), +('15', '1', '17', '4342', '3382', '0'), +('15', '1', '17', '3305', '2867', '0'), +('15', '1', '17', '2348', '1860', '0'), +('15', '1', '7', '2458', '2406', '0'), +('15', '1', '7', '4343', '1884', '0'), +('15', '1', '7', '1361', '1812', '0'), +('15', '1', '7', '2342', '1615', '0'), +('15', '1', '9', '14650', '2552', '0'), +('15', '1', '9', '10149', '2273', '0'), +('15', '1', '9', '12189', '2263', '0'), +('15', '1', '9', '4344', '2211', '0'), +('15', '1', '15', '10366', '8005', '0'), +('15', '1', '15', '10151', '7200', '0'), +('15', '1', '15', '14679', '6255', '0'), +('15', '1', '15', '14678', '5104', '0'), +('15', '1', '20', '11601', '7656', '0'), +('15', '1', '20', '2742', '4617', '0'), +('15', '1', '20', '1365', '4200', '0'), +('15', '1', '20', '2288', '3235', '0'), +('15', '1', '12', '20655', '5869', '0'), +('15', '1', '12', '2923', '4654', '0'), +('15', '1', '12', '2291', '2805', '0'), +('15', '1', '12', '11624', '2420', '0'), +('15', '1', '18', '2461', '2581', '0'), +('15', '1', '18', '4410', '2557', '0'), +('15', '1', '18', '4346', '2331', '0'), +('15', '1', '18', '2292', '1485', '0'), +('15', '1', '19', '2293', '5371', '0'), +('15', '1', '19', '68239', '4018', '0'), +('15', '1', '19', '2337', '1757', '0'), +('15', '1', '19', '3312', '1419', '0'), +('15', '1', '13', '7257', '14151', '0'), +('15', '1', '13', '6692', '13290', '0'), +('15', '1', '13', '11610', '12687', '0'), +('15', '1', '13', '6691', '11768', '0'), +('15', '1', '14', '7257', '14151', '0'), +('15', '1', '14', '6692', '13290', '0'), +('15', '1', '14', '11551', '12679', '0'), +('15', '1', '14', '6691', '11768', '0'), +('15', '1', '11', '14762', '3181', '0'), +('15', '1', '11', '20677', '1800', '0'), +('15', '1', '11', '13353', '1500', '0'), +('15', '1', '11', '9246', '664', '0'), +('15', '2', '22', '10323', '0', '0'), +('15', '2', '22', '10664', '0', '0'), +('15', '2', '22', '9246', '0', '0'), +('15', '2', '22', '21509', '0', '0'), +('15', '2', '1', '14701', '5052', '0'), +('15', '2', '1', '14702', '4250', '0'), +('15', '2', '1', '30361', '1890', '0'), +('15', '2', '1', '10165', '1683', '0'), +('15', '2', '2', '1519', '3207', '0'), +('15', '2', '2', '10142', '3012', '0'), +('15', '2', '2', '4341', '2712', '0'), +('15', '2', '2', '4504', '2563', '0'), +('15', '2', '3', '10144', '1304', '0'), +('15', '2', '3', '14705', '990', '0'), +('15', '2', '3', '14706', '990', '0'), +('15', '2', '3', '2295', '977', '0'), +('15', '2', '5', '14703', '8250', '0'), +('15', '2', '5', '14700', '4953', '0'), +('15', '2', '5', '10055', '4505', '0'), +('15', '2', '5', '2583', '3073', '0'), +('15', '2', '8', '11621', '14220', '0'), +('15', '2', '8', '1546', '10490', '0'), +('15', '2', '8', '1409', '6312', '0'), +('15', '2', '8', '11603', '6119', '0'), +('15', '2', '6', '1557', '6760', '0'), +('15', '2', '6', '2286', '2142', '0'), +('15', '2', '6', '25062', '1833', '0'), +('15', '2', '6', '2463', '948', '0'), +('15', '2', '17', '2285', '6509', '0'), +('15', '2', '17', '4342', '3443', '0'), +('15', '2', '17', '3305', '2867', '0'), +('15', '2', '17', '2348', '1878', '0'), +('15', '2', '7', '2458', '2406', '0'), +('15', '2', '7', '4343', '1921', '0'), +('15', '2', '7', '1361', '1812', '0'), +('15', '2', '7', '2342', '1626', '0'), +('15', '2', '9', '14650', '2552', '0'), +('15', '2', '9', '10149', '2291', '0'), +('15', '2', '9', '12189', '2263', '0'), +('15', '2', '9', '4344', '2211', '0'), +('15', '2', '15', '10366', '8005', '0'), +('15', '2', '15', '10151', '7200', '0'), +('15', '2', '15', '14679', '6255', '0'), +('15', '2', '15', '14678', '5104', '0'), +('15', '2', '20', '11601', '7692', '0'), +('15', '2', '20', '2742', '4653', '0'), +('15', '2', '20', '1365', '4200', '0'), +('15', '2', '20', '2288', '3235', '0'), +('15', '2', '12', '20655', '5889', '0'), +('15', '2', '12', '2923', '4654', '0'), +('15', '2', '12', '2291', '2805', '0'), +('15', '2', '12', '11624', '2446', '0'), +('15', '2', '18', '2461', '2605', '0'), +('15', '2', '18', '4410', '2557', '0'), +('15', '2', '18', '4346', '2331', '0'), +('15', '2', '18', '2292', '1509', '0'), +('15', '2', '19', '2293', '5390', '0'), +('15', '2', '19', '68239', '4036', '0'), +('15', '2', '19', '2337', '1757', '0'), +('15', '2', '19', '3312', '1419', '0'), +('15', '2', '13', '7257', '14151', '0'), +('15', '2', '13', '6692', '13290', '0'), +('15', '2', '13', '11610', '12687', '0'), +('15', '2', '13', '6691', '11768', '0'), +('15', '2', '14', '7257', '14151', '0'), +('15', '2', '14', '6692', '13290', '0'), +('15', '2', '14', '11551', '12679', '0'), +('15', '2', '14', '6691', '11768', '0'), +('15', '2', '11', '14762', '3181', '0'), +('15', '2', '11', '20677', '1800', '0'), +('15', '2', '11', '13353', '1500', '0'), +('15', '2', '11', '9246', '725', '0'), +('15', '3', '22', '10323', '0', '0'), +('15', '3', '22', '10664', '0', '0'), +('15', '3', '22', '9246', '0', '0'), +('15', '3', '22', '21509', '0', '0'), +('15', '3', '1', '14701', '5052', '0'), +('15', '3', '1', '14702', '4250', '0'), +('15', '3', '1', '30361', '1890', '0'), +('15', '3', '1', '10165', '1683', '0'), +('15', '3', '2', '1519', '3207', '0'), +('15', '3', '2', '10142', '3012', '0'), +('15', '3', '2', '4341', '2712', '0'), +('15', '3', '2', '4504', '2563', '0'), +('15', '3', '3', '10144', '1304', '0'), +('15', '3', '3', '14705', '990', '0'), +('15', '3', '3', '14706', '990', '0'), +('15', '3', '3', '2295', '989', '0'), +('15', '3', '5', '14703', '8250', '0'), +('15', '3', '5', '14700', '4953', '0'), +('15', '3', '5', '10055', '4505', '0'), +('15', '3', '5', '2583', '3091', '0'), +('15', '3', '8', '11621', '14220', '0'), +('15', '3', '8', '1546', '10550', '0'), +('15', '3', '8', '1409', '6312', '0'), +('15', '3', '8', '11603', '6173', '0'), +('15', '3', '6', '1557', '6760', '0'), +('15', '3', '6', '2286', '2160', '0'), +('15', '3', '6', '25062', '1833', '0'), +('15', '3', '6', '2463', '948', '0'), +('15', '3', '17', '2285', '6533', '0'), +('15', '3', '17', '4342', '3503', '0'), +('15', '3', '17', '3305', '2867', '0'), +('15', '3', '17', '2348', '1897', '0'), +('15', '3', '7', '2458', '2406', '0'), +('15', '3', '7', '4343', '1957', '0'), +('15', '3', '7', '1361', '1812', '0'), +('15', '3', '7', '2342', '1637', '0'), +('15', '3', '9', '14650', '2552', '0'), +('15', '3', '9', '10149', '2309', '0'), +('15', '3', '9', '12189', '2263', '0'), +('15', '3', '9', '4344', '2211', '0'), +('15', '3', '15', '10366', '8005', '0'), +('15', '3', '15', '10151', '7200', '0'), +('15', '3', '15', '14679', '6255', '0'), +('15', '3', '15', '14678', '5104', '0'), +('15', '3', '20', '11601', '7728', '0'), +('15', '3', '20', '2742', '4690', '0'), +('15', '3', '20', '1365', '4200', '0'), +('15', '3', '20', '2288', '3235', '0'), +('15', '3', '12', '20655', '5908', '0'), +('15', '3', '12', '2923', '4654', '0'), +('15', '3', '12', '2291', '2805', '0'), +('15', '3', '12', '11624', '2471', '0'), +('15', '3', '18', '2461', '2629', '0'), +('15', '3', '18', '4410', '2557', '0'), +('15', '3', '18', '4346', '2331', '0'), +('15', '3', '18', '2292', '1533', '0'), +('15', '3', '19', '2293', '5408', '0'), +('15', '3', '19', '68239', '4055', '0'), +('15', '3', '19', '2337', '1757', '0'), +('15', '3', '19', '3312', '1419', '0'), +('15', '3', '13', '7257', '14151', '0'), +('15', '3', '13', '6692', '13290', '0'), +('15', '3', '13', '11610', '12687', '0'), +('15', '3', '13', '6691', '11768', '0'), +('15', '3', '14', '7257', '14151', '0'), +('15', '3', '14', '6692', '13290', '0'), +('15', '3', '14', '11551', '12679', '0'), +('15', '3', '14', '6691', '11768', '0'), +('15', '3', '11', '14762', '3181', '0'), +('15', '3', '11', '20677', '1800', '0'), +('15', '3', '11', '13353', '1500', '0'), +('15', '3', '11', '9246', '785', '0'), +('15', '4', '22', '10323', '0', '0'), +('15', '4', '22', '10664', '0', '0'), +('15', '4', '22', '9246', '0', '0'), +('15', '4', '22', '21509', '0', '0'), +('15', '4', '1', '14701', '5052', '0'), +('15', '4', '1', '14702', '4250', '0'), +('15', '4', '1', '30361', '1890', '0'), +('15', '4', '1', '10165', '1683', '0'), +('15', '4', '2', '1519', '3207', '0'), +('15', '4', '2', '10142', '3012', '0'), +('15', '4', '2', '4341', '2712', '0'), +('15', '4', '2', '4504', '2563', '0'), +('15', '4', '3', '10144', '1304', '0'), +('15', '4', '3', '2295', '1001', '0'), +('15', '4', '3', '14705', '990', '0'), +('15', '4', '3', '14706', '990', '0'), +('15', '4', '5', '14703', '8250', '0'), +('15', '4', '5', '14700', '4953', '0'), +('15', '4', '5', '10055', '4505', '0'), +('15', '4', '5', '2583', '3109', '0'), +('15', '4', '8', '11621', '14220', '0'), +('15', '4', '8', '1546', '10611', '0'), +('15', '4', '8', '1409', '6312', '0'), +('15', '4', '8', '11603', '6227', '0'), +('15', '4', '6', '1557', '6760', '0'), +('15', '4', '6', '2286', '2178', '0'), +('15', '4', '6', '25062', '1833', '0'), +('15', '4', '6', '2463', '948', '0'), +('15', '4', '17', '2285', '6558', '0'), +('15', '4', '17', '4342', '3564', '0'), +('15', '4', '17', '3305', '2867', '0'), +('15', '4', '17', '2348', '1915', '0'), +('15', '4', '7', '2458', '2406', '0'), +('15', '4', '7', '4343', '1993', '0'), +('15', '4', '7', '1361', '1812', '0'), +('15', '4', '7', '2289', '1652', '0'), +('15', '4', '9', '14650', '2552', '0'), +('15', '4', '9', '10149', '2327', '0'), +('15', '4', '9', '12189', '2263', '0'), +('15', '4', '9', '4344', '2211', '0'), +('15', '4', '15', '10366', '8005', '0'), +('15', '4', '15', '10151', '7200', '0'), +('15', '4', '15', '14679', '6255', '0'), +('15', '4', '15', '14678', '5104', '0'), +('15', '4', '20', '11601', '7764', '0'), +('15', '4', '20', '2742', '4726', '0'), +('15', '4', '20', '1365', '4200', '0'), +('15', '4', '20', '2288', '3235', '0'), +('15', '4', '12', '20655', '5927', '0'), +('15', '4', '12', '2923', '4654', '0'), +('15', '4', '12', '2291', '2805', '0'), +('15', '4', '12', '11624', '2497', '0'), +('15', '4', '18', '2461', '2654', '0'), +('15', '4', '18', '4410', '2557', '0'), +('15', '4', '18', '4346', '2331', '0'), +('15', '4', '18', '2292', '1557', '0'), +('15', '4', '19', '2293', '5426', '0'), +('15', '4', '19', '68239', '4073', '0'), +('15', '4', '19', '2337', '1757', '0'), +('15', '4', '19', '3312', '1419', '0'), +('15', '4', '13', '7257', '14151', '0'), +('15', '4', '13', '6692', '13290', '0'), +('15', '4', '13', '11610', '12687', '0'), +('15', '4', '13', '6691', '11768', '0'), +('15', '4', '14', '7257', '14151', '0'), +('15', '4', '14', '6692', '13290', '0'), +('15', '4', '14', '11551', '12679', '0'), +('15', '4', '14', '6691', '11768', '0'), +('15', '4', '11', '14762', '3181', '0'), +('15', '4', '11', '20677', '1800', '0'), +('15', '4', '11', '13353', '1500', '0'), +('15', '4', '11', '9246', '846', '0'), +('15', '5', '22', '10323', '0', '0'), +('15', '5', '22', '10664', '0', '0'), +('15', '5', '22', '9246', '0', '0'), +('15', '5', '22', '21509', '0', '0'), +('15', '5', '1', '14701', '5052', '0'), +('15', '5', '1', '14702', '4250', '0'), +('15', '5', '1', '30361', '1890', '0'), +('15', '5', '1', '10165', '1683', '0'), +('15', '5', '2', '1519', '3207', '0'), +('15', '5', '2', '10142', '3012', '0'), +('15', '5', '2', '4341', '2712', '0'), +('15', '5', '2', '4504', '2563', '0'), +('15', '5', '3', '10144', '1304', '0'), +('15', '5', '3', '2295', '1013', '0'), +('15', '5', '3', '14705', '990', '0'), +('15', '5', '3', '14706', '990', '0'), +('15', '5', '5', '14703', '8250', '0'), +('15', '5', '5', '14700', '4953', '0'), +('15', '5', '5', '10055', '4505', '0'), +('15', '5', '5', '2583', '3128', '0'), +('15', '5', '8', '11621', '14220', '0'), +('15', '5', '8', '1546', '10671', '0'), +('15', '5', '8', '1409', '6312', '0'), +('15', '5', '8', '11603', '6282', '0'), +('15', '5', '6', '1557', '6760', '0'), +('15', '5', '6', '2286', '2197', '0'), +('15', '5', '6', '25062', '1833', '0'), +('15', '5', '6', '2463', '948', '0'), +('15', '5', '17', '2285', '6582', '0'), +('15', '5', '17', '4342', '3624', '0'), +('15', '5', '17', '3305', '2867', '0'), +('15', '5', '17', '2348', '1933', '0'), +('15', '5', '7', '2458', '2406', '0'), +('15', '5', '7', '4343', '2029', '0'), +('15', '5', '7', '1361', '1812', '0'), +('15', '5', '7', '2289', '1676', '0'), +('15', '5', '9', '14650', '2552', '0'), +('15', '5', '9', '10149', '2346', '0'), +('15', '5', '9', '12189', '2263', '0'), +('15', '5', '9', '4344', '2211', '0'), +('15', '5', '15', '10366', '8005', '0'), +('15', '5', '15', '10151', '7200', '0'), +('15', '5', '15', '14679', '6255', '0'), +('15', '5', '15', '14678', '5104', '0'), +('15', '5', '20', '11601', '7801', '0'), +('15', '5', '20', '2742', '4762', '0'), +('15', '5', '20', '1365', '4200', '0'), +('15', '5', '20', '2288', '3235', '0'), +('15', '5', '12', '20655', '5947', '0'), +('15', '5', '12', '2923', '4654', '0'), +('15', '5', '12', '2291', '2805', '0'), +('15', '5', '12', '11624', '2522', '0'), +('15', '5', '18', '2461', '2678', '0'), +('15', '5', '18', '4410', '2557', '0'), +('15', '5', '18', '4346', '2331', '0'), +('15', '5', '18', '2292', '1582', '0'), +('15', '5', '19', '2293', '5444', '0'), +('15', '5', '19', '68239', '4091', '0'), +('15', '5', '19', '2337', '1757', '0'), +('15', '5', '19', '3312', '1419', '0'), +('15', '5', '13', '7257', '14151', '0'), +('15', '5', '13', '6692', '13290', '0'), +('15', '5', '13', '11610', '12687', '0'), +('15', '5', '13', '6691', '11768', '0'), +('15', '5', '14', '7257', '14151', '0'), +('15', '5', '14', '6692', '13290', '0'), +('15', '5', '14', '11551', '12679', '0'), +('15', '5', '14', '6691', '11768', '0'), +('15', '5', '11', '14762', '3181', '0'), +('15', '5', '11', '20677', '1800', '0'), +('15', '5', '11', '13353', '1500', '0'), +('15', '5', '11', '9246', '906', '0'), +('15', '6', '22', '10323', '0', '0'), +('15', '6', '22', '10664', '0', '0'), +('15', '6', '22', '9246', '0', '0'), +('15', '6', '22', '21509', '0', '0'), +('15', '6', '1', '14701', '5052', '0'), +('15', '6', '1', '14702', '4250', '0'), +('15', '6', '1', '30361', '1890', '0'), +('15', '6', '1', '10165', '1683', '0'), +('15', '6', '2', '1519', '3207', '0'), +('15', '6', '2', '10142', '3012', '0'), +('15', '6', '2', '4341', '2712', '0'), +('15', '6', '2', '4504', '2563', '0'), +('15', '6', '3', '10144', '1304', '0'), +('15', '6', '3', '2295', '1025', '0'), +('15', '6', '3', '4505', '1009', '0'), +('15', '6', '3', '14705', '990', '0'), +('15', '6', '5', '14703', '8250', '0'), +('15', '6', '5', '14700', '4953', '0'), +('15', '6', '5', '10055', '4505', '0'), +('15', '6', '5', '2583', '3146', '0'), +('15', '6', '8', '11621', '14220', '0'), +('15', '6', '8', '1546', '10731', '0'), +('15', '6', '8', '11603', '6336', '0'), +('15', '6', '8', '1409', '6312', '0'), +('15', '6', '6', '1557', '6760', '0'), +('15', '6', '6', '2286', '2215', '0'), +('15', '6', '6', '25062', '1833', '0'), +('15', '6', '6', '2463', '948', '0'), +('15', '6', '17', '2285', '6606', '0'), +('15', '6', '17', '4342', '3684', '0'), +('15', '6', '17', '3305', '2867', '0'), +('15', '6', '17', '2348', '1951', '0'), +('15', '6', '7', '2458', '2406', '0'), +('15', '6', '7', '4343', '2066', '0'), +('15', '6', '7', '1361', '1812', '0'), +('15', '6', '7', '2289', '1700', '0'), +('15', '6', '9', '14650', '2552', '0'), +('15', '6', '9', '10149', '2364', '0'), +('15', '6', '9', '12189', '2263', '0'), +('15', '6', '9', '4344', '2211', '0'), +('15', '6', '15', '10366', '8005', '0'), +('15', '6', '15', '10151', '7200', '0'), +('15', '6', '15', '14679', '6255', '0'), +('15', '6', '15', '14678', '5104', '0'), +('15', '6', '20', '11601', '7837', '0'), +('15', '6', '20', '2742', '4798', '0'), +('15', '6', '20', '1365', '4200', '0'), +('15', '6', '20', '1543', '3293', '0'), +('15', '6', '12', '20655', '5966', '0'), +('15', '6', '12', '2923', '4654', '0'), +('15', '6', '12', '2291', '2805', '0'), +('15', '6', '12', '11624', '2547', '0'), +('15', '6', '18', '2461', '2702', '0'), +('15', '6', '18', '4410', '2557', '0'), +('15', '6', '18', '4346', '2331', '0'), +('15', '6', '18', '2292', '1606', '0'), +('15', '6', '19', '2293', '5462', '0'), +('15', '6', '19', '68239', '4109', '0'), +('15', '6', '19', '2337', '1757', '0'), +('15', '6', '19', '3312', '1419', '0'), +('15', '6', '13', '7257', '14151', '0'), +('15', '6', '13', '6692', '13290', '0'), +('15', '6', '13', '11610', '12687', '0'), +('15', '6', '13', '6691', '11768', '0'), +('15', '6', '14', '7257', '14151', '0'), +('15', '6', '14', '6692', '13290', '0'), +('15', '6', '14', '11551', '12679', '0'), +('15', '6', '14', '6691', '11768', '0'), +('15', '6', '11', '14762', '3181', '0'), +('15', '6', '11', '20677', '1800', '0'), +('15', '6', '11', '13353', '1500', '0'), +('15', '6', '11', '9246', '966', '0'), +('15', '7', '22', '10323', '0', '0'), +('15', '7', '22', '10664', '0', '0'), +('15', '7', '22', '9246', '0', '0'), +('15', '7', '22', '21509', '0', '0'), +('15', '7', '1', '14701', '5052', '0'), +('15', '7', '1', '14702', '4250', '0'), +('15', '7', '1', '30361', '1890', '0'), +('15', '7', '1', '10165', '1683', '0'), +('15', '7', '2', '1519', '3207', '0'), +('15', '7', '2', '10142', '3012', '0'), +('15', '7', '2', '4341', '2712', '0'), +('15', '7', '2', '4504', '2563', '0'), +('15', '7', '3', '10144', '1304', '0'), +('15', '7', '3', '4505', '1051', '0'), +('15', '7', '3', '2295', '1038', '0'), +('15', '7', '3', '14705', '990', '0'), +('15', '7', '5', '14703', '8250', '0'), +('15', '7', '5', '14700', '4953', '0'), +('15', '7', '5', '10055', '4505', '0'), +('15', '7', '5', '2583', '3164', '0'), +('15', '7', '8', '11621', '14220', '0'), +('15', '7', '8', '1546', '10792', '0'), +('15', '7', '8', '11603', '6391', '0'), +('15', '7', '8', '1409', '6312', '0'), +('15', '7', '6', '1557', '6760', '0'), +('15', '7', '6', '2286', '2236', '0'), +('15', '7', '6', '25062', '1833', '0'), +('15', '7', '6', '2463', '948', '0'), +('15', '7', '17', '2285', '6630', '0'), +('15', '7', '17', '4342', '3745', '0'), +('15', '7', '17', '3305', '2867', '0'), +('15', '7', '17', '2348', '1972', '0'), +('15', '7', '7', '2458', '2406', '0'), +('15', '7', '7', '4343', '2108', '0'), +('15', '7', '7', '1361', '1812', '0'), +('15', '7', '7', '2289', '1724', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '7', '9', '14650', '2552', '0'), +('15', '7', '9', '10149', '2382', '0'), +('15', '7', '9', '12189', '2263', '0'), +('15', '7', '9', '4344', '2211', '0'), +('15', '7', '15', '10366', '8005', '0'), +('15', '7', '15', '10151', '7200', '0'), +('15', '7', '15', '14679', '6255', '0'), +('15', '7', '15', '14678', '5104', '0'), +('15', '7', '20', '11601', '7879', '0'), +('15', '7', '20', '2742', '4841', '0'), +('15', '7', '20', '1365', '4200', '0'), +('15', '7', '20', '1543', '3353', '0'), +('15', '7', '12', '20655', '5987', '0'), +('15', '7', '12', '2923', '4654', '0'), +('15', '7', '12', '2291', '2805', '0'), +('15', '7', '12', '11624', '2577', '0'), +('15', '7', '18', '2461', '2726', '0'), +('15', '7', '18', '4410', '2557', '0'), +('15', '7', '18', '4346', '2331', '0'), +('15', '7', '18', '2292', '1630', '0'), +('15', '7', '19', '2293', '5480', '0'), +('15', '7', '19', '68239', '4127', '0'), +('15', '7', '19', '2337', '1757', '0'), +('15', '7', '19', '3312', '1419', '0'), +('15', '7', '13', '7257', '14151', '0'), +('15', '7', '13', '6692', '13290', '0'), +('15', '7', '13', '11610', '12687', '0'), +('15', '7', '13', '6691', '11768', '0'), +('15', '7', '14', '7257', '14151', '0'), +('15', '7', '14', '6692', '13290', '0'), +('15', '7', '14', '11551', '12679', '0'), +('15', '7', '14', '6691', '11768', '0'), +('15', '7', '11', '14762', '3181', '0'), +('15', '7', '11', '20677', '1800', '0'), +('15', '7', '11', '13353', '1500', '0'), +('15', '7', '11', '9246', '1027', '0'), +('15', '8', '22', '10323', '0', '0'), +('15', '8', '22', '10664', '0', '0'), +('15', '8', '22', '9246', '0', '0'), +('15', '8', '22', '21509', '0', '0'), +('15', '8', '1', '14701', '5052', '0'), +('15', '8', '1', '14702', '4250', '0'), +('15', '8', '1', '30361', '1890', '0'), +('15', '8', '1', '10165', '1683', '0'), +('15', '8', '2', '1519', '3207', '0'), +('15', '8', '2', '10142', '3012', '0'), +('15', '8', '2', '4341', '2712', '0'), +('15', '8', '2', '4504', '2563', '0'), +('15', '8', '3', '10144', '1304', '0'), +('15', '8', '3', '4505', '1093', '0'), +('15', '8', '3', '2295', '1050', '0'), +('15', '8', '3', '14705', '990', '0'), +('15', '8', '5', '14703', '8250', '0'), +('15', '8', '5', '14700', '4953', '0'), +('15', '8', '5', '10055', '4505', '0'), +('15', '8', '5', '2583', '3182', '0'), +('15', '8', '8', '11621', '14220', '0'), +('15', '8', '8', '1546', '10852', '0'), +('15', '8', '8', '11603', '6445', '0'), +('15', '8', '8', '1409', '6312', '0'), +('15', '8', '6', '1557', '6760', '0'), +('15', '8', '6', '2286', '2254', '0'), +('15', '8', '6', '25062', '1833', '0'), +('15', '8', '6', '2463', '948', '0'), +('15', '8', '17', '2285', '6654', '0'), +('15', '8', '17', '4342', '3805', '0'), +('15', '8', '17', '3305', '2867', '0'), +('15', '8', '17', '2348', '1990', '0'), +('15', '8', '7', '2458', '2406', '0'), +('15', '8', '7', '4343', '2144', '0'), +('15', '8', '7', '1361', '1812', '0'), +('15', '8', '7', '2289', '1748', '0'), +('15', '8', '9', '14650', '2552', '0'), +('15', '8', '9', '10149', '2400', '0'), +('15', '8', '9', '12189', '2263', '0'), +('15', '8', '9', '4344', '2211', '0'), +('15', '8', '15', '10366', '8005', '0'), +('15', '8', '15', '10151', '7200', '0'), +('15', '8', '15', '14679', '6255', '0'), +('15', '8', '15', '14678', '5104', '0'), +('15', '8', '20', '11601', '7915', '0'), +('15', '8', '20', '2742', '4877', '0'), +('15', '8', '20', '1365', '4200', '0'), +('15', '8', '20', '1543', '3414', '0'), +('15', '8', '12', '20655', '6006', '0'), +('15', '8', '12', '2923', '4654', '0'), +('15', '8', '12', '2291', '2805', '0'), +('15', '8', '12', '11624', '2602', '0'), +('15', '8', '18', '2461', '2750', '0'), +('15', '8', '18', '4410', '2557', '0'), +('15', '8', '18', '4346', '2331', '0'), +('15', '8', '18', '2292', '1654', '0'), +('15', '8', '19', '2293', '5498', '0'), +('15', '8', '19', '68239', '4145', '0'), +('15', '8', '19', '2337', '1757', '0'), +('15', '8', '19', '3312', '1419', '0'), +('15', '8', '13', '7257', '14151', '0'), +('15', '8', '13', '6692', '13290', '0'), +('15', '8', '13', '11610', '12687', '0'), +('15', '8', '13', '6691', '11768', '0'), +('15', '8', '14', '7257', '14151', '0'), +('15', '8', '14', '6692', '13290', '0'), +('15', '8', '14', '11551', '12679', '0'), +('15', '8', '14', '6691', '11768', '0'), +('15', '8', '11', '14762', '3181', '0'), +('15', '8', '11', '20677', '1800', '0'), +('15', '8', '11', '13353', '1500', '0'), +('15', '8', '11', '9246', '1087', '0'), +('15', '9', '22', '10323', '0', '0'), +('15', '9', '22', '10664', '0', '0'), +('15', '9', '22', '9246', '0', '0'), +('15', '9', '22', '21509', '0', '0'), +('15', '9', '1', '14701', '5052', '0'), +('15', '9', '1', '14702', '4250', '0'), +('15', '9', '1', '30361', '1890', '0'), +('15', '9', '1', '10165', '1683', '0'), +('15', '9', '2', '1519', '3207', '0'), +('15', '9', '2', '10142', '3012', '0'), +('15', '9', '2', '4341', '2712', '0'), +('15', '9', '2', '4504', '2563', '0'), +('15', '9', '3', '10144', '1304', '0'), +('15', '9', '3', '4505', '1136', '0'), +('15', '9', '3', '2295', '1062', '0'), +('15', '9', '3', '14705', '990', '0'), +('15', '9', '5', '14703', '8250', '0'), +('15', '9', '5', '14700', '4953', '0'), +('15', '9', '5', '10055', '4505', '0'), +('15', '9', '5', '2583', '3200', '0'), +('15', '9', '8', '11621', '14220', '0'), +('15', '9', '8', '1546', '10913', '0'), +('15', '9', '8', '11603', '6499', '0'), +('15', '9', '8', '1409', '6312', '0'), +('15', '9', '6', '1557', '6760', '0'), +('15', '9', '6', '2286', '2272', '0'), +('15', '9', '6', '25062', '1833', '0'), +('15', '9', '6', '2463', '948', '0'), +('15', '9', '17', '2285', '6678', '0'), +('15', '9', '17', '4342', '3866', '0'), +('15', '9', '17', '3305', '2867', '0'), +('15', '9', '17', '2348', '2008', '0'), +('15', '9', '7', '2458', '2406', '0'), +('15', '9', '7', '4343', '2180', '0'), +('15', '9', '7', '1361', '1812', '0'), +('15', '9', '7', '2289', '1772', '0'), +('15', '9', '9', '14650', '2552', '0'), +('15', '9', '9', '10149', '2418', '0'), +('15', '9', '9', '12189', '2263', '0'), +('15', '9', '9', '4344', '2211', '0'), +('15', '9', '15', '10366', '8005', '0'), +('15', '9', '15', '10151', '7200', '0'), +('15', '9', '15', '14679', '6255', '0'), +('15', '9', '15', '14678', '5104', '0'), +('15', '9', '20', '11601', '7952', '0'), +('15', '9', '20', '2742', '4913', '0'), +('15', '9', '20', '1365', '4200', '0'), +('15', '9', '20', '1543', '3474', '0'), +('15', '9', '12', '20655', '6025', '0'), +('15', '9', '12', '2923', '4654', '0'), +('15', '9', '12', '2291', '2805', '0'), +('15', '9', '12', '11624', '2628', '0'), +('15', '9', '18', '2461', '2774', '0'), +('15', '9', '18', '4410', '2557', '0'), +('15', '9', '18', '4346', '2331', '0'), +('15', '9', '18', '2292', '1678', '0'), +('15', '9', '19', '2293', '5516', '0'), +('15', '9', '19', '68239', '4163', '0'), +('15', '9', '19', '2337', '1757', '0'), +('15', '9', '19', '3312', '1419', '0'), +('15', '9', '13', '7257', '14151', '0'), +('15', '9', '13', '6692', '13290', '0'), +('15', '9', '13', '11610', '12687', '0'), +('15', '9', '13', '6691', '11768', '0'), +('15', '9', '14', '7257', '14151', '0'), +('15', '9', '14', '6692', '13290', '0'), +('15', '9', '14', '11551', '12679', '0'), +('15', '9', '14', '6691', '11768', '0'), +('15', '9', '11', '14762', '3181', '0'), +('15', '9', '11', '20677', '1800', '0'), +('15', '9', '11', '13353', '1500', '0'), +('15', '9', '11', '9246', '1148', '0'), +('15', '10', '22', '10323', '0', '0'), +('15', '10', '22', '10664', '0', '0'), +('15', '10', '22', '9246', '0', '0'), +('15', '10', '22', '21509', '0', '0'), +('15', '10', '1', '14701', '5052', '0'), +('15', '10', '1', '14702', '4250', '0'), +('15', '10', '1', '30361', '1890', '0'), +('15', '10', '1', '10165', '1683', '0'), +('15', '10', '2', '1519', '3207', '0'), +('15', '10', '2', '10142', '3012', '0'), +('15', '10', '2', '4341', '2712', '0'), +('15', '10', '2', '4504', '2563', '0'), +('15', '10', '3', '10144', '1304', '0'), +('15', '10', '3', '4505', '1178', '0'), +('15', '10', '3', '2295', '1074', '0'), +('15', '10', '3', '14705', '990', '0'), +('15', '10', '5', '14703', '8250', '0'), +('15', '10', '5', '14700', '4953', '0'), +('15', '10', '5', '10055', '4505', '0'), +('15', '10', '5', '2583', '3218', '0'), +('15', '10', '8', '11621', '14220', '0'), +('15', '10', '8', '1546', '10973', '0'), +('15', '10', '8', '11603', '6554', '0'), +('15', '10', '8', '1409', '6312', '0'), +('15', '10', '6', '1557', '6760', '0'), +('15', '10', '6', '2286', '2290', '0'), +('15', '10', '6', '25062', '1833', '0'), +('15', '10', '6', '2463', '948', '0'), +('15', '10', '17', '2285', '6703', '0'), +('15', '10', '17', '4342', '3926', '0'), +('15', '10', '17', '3305', '2867', '0'), +('15', '10', '17', '2348', '2026', '0'), +('15', '10', '7', '2458', '2406', '0'), +('15', '10', '7', '4343', '2217', '0'), +('15', '10', '7', '1361', '1812', '0'), +('15', '10', '7', '2289', '1797', '0'), +('15', '10', '9', '14650', '2552', '0'), +('15', '10', '9', '10149', '2436', '0'), +('15', '10', '9', '12189', '2263', '0'), +('15', '10', '9', '4344', '2211', '0'), +('15', '10', '15', '10366', '8005', '0'), +('15', '10', '15', '10151', '7200', '0'), +('15', '10', '15', '14679', '6255', '0'), +('15', '10', '15', '14678', '5104', '0'), +('15', '10', '20', '11601', '7988', '0'), +('15', '10', '20', '2742', '4949', '0'), +('15', '10', '20', '1365', '4200', '0'), +('15', '10', '20', '1543', '3534', '0'), +('15', '10', '12', '20655', '6045', '0'), +('15', '10', '12', '2923', '4654', '0'), +('15', '10', '12', '2291', '2805', '0'), +('15', '10', '12', '11624', '2653', '0'), +('15', '10', '18', '2461', '2799', '0'), +('15', '10', '18', '4410', '2557', '0'), +('15', '10', '18', '4346', '2331', '0'), +('15', '10', '18', '2292', '1702', '0'), +('15', '10', '19', '2293', '5535', '0'), +('15', '10', '19', '68239', '4181', '0'), +('15', '10', '19', '2337', '1757', '0'), +('15', '10', '19', '3312', '1419', '0'), +('15', '10', '13', '7257', '14151', '0'), +('15', '10', '13', '6692', '13290', '0'), +('15', '10', '13', '11610', '12687', '0'), +('15', '10', '13', '6691', '11768', '0'), +('15', '10', '14', '7257', '14151', '0'), +('15', '10', '14', '6692', '13290', '0'), +('15', '10', '14', '11551', '12679', '0'), +('15', '10', '14', '6691', '11768', '0'), +('15', '10', '11', '14762', '3181', '0'), +('15', '10', '11', '20677', '1800', '0'), +('15', '10', '11', '13353', '1500', '0'), +('15', '10', '11', '9246', '1208', '0'), +('15', '11', '22', '10323', '0', '0'), +('15', '11', '22', '10664', '0', '0'), +('15', '11', '22', '9246', '0', '0'), +('15', '11', '22', '21509', '0', '0'), +('15', '11', '1', '14701', '5052', '0'), +('15', '11', '1', '14702', '4250', '0'), +('15', '11', '1', '30361', '1890', '0'), +('15', '11', '1', '10165', '1683', '0'), +('15', '11', '2', '1519', '3207', '0'), +('15', '11', '2', '10142', '3012', '0'), +('15', '11', '2', '4341', '2712', '0'), +('15', '11', '2', '4504', '2563', '0'), +('15', '11', '3', '10144', '1304', '0'), +('15', '11', '3', '4505', '1220', '0'), +('15', '11', '3', '2295', '1086', '0'), +('15', '11', '3', '11052', '997', '0'), +('15', '11', '5', '14703', '8250', '0'), +('15', '11', '5', '14700', '4953', '0'), +('15', '11', '5', '10055', '4505', '0'), +('15', '11', '5', '2583', '3236', '0'), +('15', '11', '8', '11621', '14220', '0'), +('15', '11', '8', '1546', '11033', '0'), +('15', '11', '8', '11603', '6608', '0'), +('15', '11', '8', '1409', '6312', '0'), +('15', '11', '6', '1557', '6760', '0'), +('15', '11', '6', '2286', '2311', '0'), +('15', '11', '6', '25062', '1833', '0'), +('15', '11', '6', '2331', '954', '0'), +('15', '11', '17', '2285', '6727', '0'), +('15', '11', '17', '4342', '3986', '0'), +('15', '11', '17', '3305', '2867', '0'), +('15', '11', '17', '2348', '2048', '0'), +('15', '11', '7', '2458', '2406', '0'), +('15', '11', '7', '4343', '2259', '0'), +('15', '11', '7', '2289', '1821', '0'), +('15', '11', '7', '1361', '1812', '0'), +('15', '11', '9', '14650', '2552', '0'), +('15', '11', '9', '10149', '2454', '0'), +('15', '11', '9', '12189', '2263', '0'), +('15', '11', '9', '4344', '2211', '0'), +('15', '11', '15', '10366', '8005', '0'), +('15', '11', '15', '10151', '7200', '0'), +('15', '11', '15', '14679', '6255', '0'), +('15', '11', '15', '14678', '5104', '0'), +('15', '11', '20', '11601', '8030', '0'), +('15', '11', '20', '2742', '4992', '0'), +('15', '11', '20', '1365', '4200', '0'), +('15', '11', '20', '1543', '3595', '0'), +('15', '11', '12', '20655', '6065', '0'), +('15', '11', '12', '2923', '4654', '0'), +('15', '11', '12', '2291', '2805', '0'), +('15', '11', '12', '11624', '2683', '0'), +('15', '11', '18', '2461', '2823', '0'), +('15', '11', '18', '4410', '2557', '0'), +('15', '11', '18', '4346', '2331', '0'), +('15', '11', '18', '2292', '1727', '0'), +('15', '11', '19', '2293', '5553', '0'), +('15', '11', '19', '68239', '4200', '0'), +('15', '11', '19', '2337', '1757', '0'), +('15', '11', '19', '3312', '1419', '0'), +('15', '11', '13', '7257', '14151', '0'), +('15', '11', '13', '6692', '13290', '0'), +('15', '11', '13', '11610', '12687', '0'), +('15', '11', '13', '6691', '11768', '0'), +('15', '11', '14', '7257', '14151', '0'), +('15', '11', '14', '6692', '13290', '0'), +('15', '11', '14', '11551', '12679', '0'), +('15', '11', '14', '6691', '11768', '0'), +('15', '11', '11', '14762', '3181', '0'), +('15', '11', '11', '20677', '1800', '0'), +('15', '11', '11', '13353', '1500', '0'), +('15', '11', '11', '9246', '1268', '0'), +('15', '12', '22', '10323', '0', '0'), +('15', '12', '22', '10664', '0', '0'), +('15', '12', '22', '9246', '0', '0'), +('15', '12', '22', '21509', '0', '0'), +('15', '12', '1', '14701', '5052', '0'), +('15', '12', '1', '14702', '4250', '0'), +('15', '12', '1', '30361', '1890', '0'), +('15', '12', '1', '10165', '1683', '0'), +('15', '12', '2', '1519', '3207', '0'), +('15', '12', '2', '10142', '3012', '0'), +('15', '12', '2', '4341', '2712', '0'), +('15', '12', '2', '4504', '2563', '0'), +('15', '12', '3', '10144', '1304', '0'), +('15', '12', '3', '4505', '1262', '0'), +('15', '12', '3', '2295', '1098', '0'), +('15', '12', '3', '11052', '1087', '0'), +('15', '12', '5', '14703', '8250', '0'), +('15', '12', '5', '14700', '4953', '0'), +('15', '12', '5', '10055', '4505', '0'), +('15', '12', '5', '2583', '3254', '0'), +('15', '12', '8', '11621', '14220', '0'), +('15', '12', '8', '1546', '11094', '0'), +('15', '12', '8', '11603', '6662', '0'), +('15', '12', '8', '1409', '6312', '0'), +('15', '12', '6', '1557', '6760', '0'), +('15', '12', '6', '2286', '2329', '0'), +('15', '12', '6', '25062', '1833', '0'), +('15', '12', '6', '2331', '972', '0'), +('15', '12', '17', '2285', '6751', '0'), +('15', '12', '17', '4342', '4047', '0'), +('15', '12', '17', '3305', '2867', '0'), +('15', '12', '17', '2348', '2066', '0'), +('15', '12', '7', '2458', '2406', '0'), +('15', '12', '7', '4343', '2295', '0'), +('15', '12', '7', '2289', '1845', '0'), +('15', '12', '7', '1361', '1812', '0'), +('15', '12', '9', '14650', '2552', '0'), +('15', '12', '9', '10149', '2472', '0'), +('15', '12', '9', '12189', '2263', '0'), +('15', '12', '9', '4344', '2211', '0'), +('15', '12', '15', '10366', '8005', '0'), +('15', '12', '15', '10151', '7200', '0'), +('15', '12', '15', '14679', '6255', '0'), +('15', '12', '15', '14678', '5104', '0'), +('15', '12', '20', '11601', '8066', '0'), +('15', '12', '20', '2742', '5028', '0'), +('15', '12', '20', '1365', '4200', '0'), +('15', '12', '20', '1543', '3655', '0'), +('15', '12', '12', '20655', '6084', '0'), +('15', '12', '12', '2923', '4654', '0'), +('15', '12', '12', '2291', '2805', '0'), +('15', '12', '12', '11624', '2708', '0'), +('15', '12', '18', '2461', '2847', '0'), +('15', '12', '18', '4410', '2557', '0'), +('15', '12', '18', '4346', '2331', '0'), +('15', '12', '18', '2292', '1751', '0'), +('15', '12', '19', '2293', '5571', '0'), +('15', '12', '19', '68239', '4218', '0'), +('15', '12', '19', '2337', '1757', '0'), +('15', '12', '19', '4407', '1437', '0'), +('15', '12', '13', '7257', '14151', '0'), +('15', '12', '13', '6692', '13290', '0'), +('15', '12', '13', '11610', '12687', '0'), +('15', '12', '13', '6691', '11768', '0'), +('15', '12', '14', '7257', '14151', '0'), +('15', '12', '14', '6692', '13290', '0'), +('15', '12', '14', '11551', '12679', '0'), +('15', '12', '14', '6691', '11768', '0'), +('15', '12', '11', '14762', '3181', '0'), +('15', '12', '11', '20677', '1800', '0'), +('15', '12', '11', '13353', '1500', '0'), +('15', '12', '11', '9246', '1329', '0'), +('15', '13', '22', '10323', '0', '0'), +('15', '13', '22', '10664', '0', '0'), +('15', '13', '22', '9246', '0', '0'), +('15', '13', '22', '21509', '0', '0'), +('15', '13', '1', '14701', '5052', '0'), +('15', '13', '1', '14702', '4250', '0'), +('15', '13', '1', '30361', '1890', '0'), +('15', '13', '1', '10165', '1683', '0'), +('15', '13', '2', '1519', '3207', '0'), +('15', '13', '2', '10142', '3012', '0'), +('15', '13', '2', '4341', '2712', '0'), +('15', '13', '2', '4504', '2563', '0'), +('15', '13', '3', '4505', '1305', '0'), +('15', '13', '3', '10144', '1304', '0'), +('15', '13', '3', '11052', '1178', '0'), +('15', '13', '3', '2295', '1110', '0'), +('15', '13', '5', '14703', '8250', '0'), +('15', '13', '5', '14700', '4953', '0'), +('15', '13', '5', '10055', '4505', '0'), +('15', '13', '5', '2583', '3273', '0'), +('15', '13', '8', '11621', '14220', '0'), +('15', '13', '8', '1546', '11154', '0'), +('15', '13', '8', '11603', '6717', '0'), +('15', '13', '8', '1409', '6312', '0'), +('15', '13', '6', '1557', '6760', '0'), +('15', '13', '6', '2286', '2348', '0'), +('15', '13', '6', '25062', '1833', '0'), +('15', '13', '6', '2331', '991', '0'), +('15', '13', '17', '2285', '6775', '0'), +('15', '13', '17', '4342', '4107', '0'), +('15', '13', '17', '3305', '2867', '0'), +('15', '13', '17', '2348', '2084', '0'), +('15', '13', '7', '2458', '2406', '0'), +('15', '13', '7', '4343', '2331', '0'), +('15', '13', '7', '2289', '1869', '0'), +('15', '13', '7', '1361', '1812', '0'), +('15', '13', '9', '14650', '2552', '0'), +('15', '13', '9', '10149', '2491', '0'), +('15', '13', '9', '12189', '2263', '0'), +('15', '13', '9', '4344', '2211', '0'), +('15', '13', '15', '10366', '8005', '0'), +('15', '13', '15', '10151', '7200', '0'), +('15', '13', '15', '14679', '6255', '0'), +('15', '13', '15', '14678', '5104', '0'), +('15', '13', '20', '11601', '8103', '0'), +('15', '13', '20', '2742', '5064', '0'), +('15', '13', '20', '1365', '4200', '0'), +('15', '13', '20', '1543', '3716', '0'), +('15', '13', '12', '20655', '6104', '0'), +('15', '13', '12', '2923', '4654', '0'), +('15', '13', '12', '2291', '2805', '0'), +('15', '13', '12', '11624', '2733', '0'), +('15', '13', '18', '2461', '2871', '0'), +('15', '13', '18', '4410', '2557', '0'), +('15', '13', '18', '4346', '2331', '0'), +('15', '13', '18', '2292', '1775', '0'), +('15', '13', '19', '2293', '5589', '0'), +('15', '13', '19', '68239', '4236', '0'), +('15', '13', '19', '2337', '1757', '0'), +('15', '13', '19', '4407', '1492', '0'), +('15', '13', '13', '7257', '14151', '0'), +('15', '13', '13', '6692', '13290', '0'), +('15', '13', '13', '11610', '12687', '0'), +('15', '13', '13', '6691', '11768', '0'), +('15', '13', '14', '7257', '14151', '0'), +('15', '13', '14', '6692', '13290', '0'), +('15', '13', '14', '11551', '12679', '0'), +('15', '13', '14', '6691', '11768', '0'), +('15', '13', '11', '14762', '3181', '0'), +('15', '13', '11', '20677', '1800', '0'), +('15', '13', '11', '13353', '1500', '0'), +('15', '13', '11', '9246', '1389', '0'), +('15', '14', '22', '10323', '0', '0'), +('15', '14', '22', '10664', '0', '0'), +('15', '14', '22', '9246', '0', '0'), +('15', '14', '22', '21509', '0', '0'), +('15', '14', '1', '14701', '5052', '0'), +('15', '14', '1', '14702', '4250', '0'), +('15', '14', '1', '30361', '1890', '0'), +('15', '14', '1', '10165', '1683', '0'), +('15', '14', '2', '1519', '3207', '0'), +('15', '14', '2', '10142', '3012', '0'), +('15', '14', '2', '4341', '2712', '0'), +('15', '14', '2', '4504', '2563', '0'), +('15', '14', '3', '4505', '1347', '0'), +('15', '14', '3', '10144', '1304', '0'), +('15', '14', '3', '11052', '1268', '0'), +('15', '14', '3', '2295', '1122', '0'), +('15', '14', '5', '14703', '8250', '0'), +('15', '14', '5', '14700', '4953', '0'), +('15', '14', '5', '10055', '4505', '0'), +('15', '14', '5', '2583', '3291', '0'), +('15', '14', '8', '11621', '14220', '0'), +('15', '14', '8', '1546', '11215', '0'), +('15', '14', '8', '11603', '6771', '0'), +('15', '14', '8', '1409', '6312', '0'), +('15', '14', '6', '1557', '6760', '0'), +('15', '14', '6', '2286', '2369', '0'), +('15', '14', '6', '25062', '1833', '0'), +('15', '14', '6', '2331', '1009', '0'), +('15', '14', '17', '2285', '6799', '0'), +('15', '14', '17', '4342', '4168', '0'), +('15', '14', '17', '3305', '2867', '0'), +('15', '14', '17', '2348', '2105', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '14', '7', '2458', '2406', '0'), +('15', '14', '7', '4343', '2374', '0'), +('15', '14', '7', '2289', '1893', '0'), +('15', '14', '7', '1361', '1812', '0'), +('15', '14', '9', '14650', '2552', '0'), +('15', '14', '9', '10149', '2509', '0'), +('15', '14', '9', '12189', '2263', '0'), +('15', '14', '9', '4344', '2211', '0'), +('15', '14', '15', '10366', '8005', '0'), +('15', '14', '15', '10151', '7200', '0'), +('15', '14', '15', '14679', '6255', '0'), +('15', '14', '15', '14678', '5104', '0'), +('15', '14', '20', '11601', '8145', '0'), +('15', '14', '20', '2742', '5106', '0'), +('15', '14', '20', '1365', '4200', '0'), +('15', '14', '20', '1543', '3776', '0'), +('15', '14', '12', '20655', '6124', '0'), +('15', '14', '12', '2923', '4654', '0'), +('15', '14', '12', '2291', '2805', '0'), +('15', '14', '12', '11624', '2763', '0'), +('15', '14', '18', '2461', '2895', '0'), +('15', '14', '18', '4410', '2557', '0'), +('15', '14', '18', '4346', '2331', '0'), +('15', '14', '18', '2292', '1799', '0'), +('15', '14', '19', '2293', '5607', '0'), +('15', '14', '19', '68239', '4254', '0'), +('15', '14', '19', '2337', '1757', '0'), +('15', '14', '19', '4407', '1546', '0'), +('15', '14', '13', '7257', '14151', '0'), +('15', '14', '13', '6692', '13290', '0'), +('15', '14', '13', '11610', '12687', '0'), +('15', '14', '13', '6691', '11768', '0'), +('15', '14', '14', '7257', '14151', '0'), +('15', '14', '14', '6692', '13290', '0'), +('15', '14', '14', '11551', '12679', '0'), +('15', '14', '14', '6691', '11768', '0'), +('15', '14', '11', '14762', '3181', '0'), +('15', '14', '11', '20677', '1800', '0'), +('15', '14', '11', '13353', '1500', '0'), +('15', '14', '11', '9246', '1450', '0'), +('15', '15', '22', '10323', '0', '0'), +('15', '15', '22', '10664', '0', '0'), +('15', '15', '22', '9246', '0', '0'), +('15', '15', '22', '21509', '0', '0'), +('15', '15', '1', '14701', '5052', '0'), +('15', '15', '1', '14702', '4250', '0'), +('15', '15', '1', '30361', '1890', '0'), +('15', '15', '1', '10165', '1683', '0'), +('15', '15', '2', '1519', '3207', '0'), +('15', '15', '2', '10142', '3012', '0'), +('15', '15', '2', '4341', '2712', '0'), +('15', '15', '2', '4504', '2563', '0'), +('15', '15', '3', '4505', '1389', '0'), +('15', '15', '3', '11052', '1359', '0'), +('15', '15', '3', '10144', '1304', '0'), +('15', '15', '3', '2295', '1134', '0'), +('15', '15', '5', '14703', '8250', '0'), +('15', '15', '5', '14700', '4953', '0'), +('15', '15', '5', '10055', '4505', '0'), +('15', '15', '5', '2583', '3309', '0'), +('15', '15', '8', '11621', '14220', '0'), +('15', '15', '8', '1546', '11275', '0'), +('15', '15', '8', '11603', '6825', '0'), +('15', '15', '8', '1409', '6312', '0'), +('15', '15', '6', '1557', '6760', '0'), +('15', '15', '6', '2286', '2387', '0'), +('15', '15', '6', '25062', '1833', '0'), +('15', '15', '6', '2331', '1027', '0'), +('15', '15', '17', '2285', '6823', '0'), +('15', '15', '17', '4342', '4228', '0'), +('15', '15', '17', '3305', '2867', '0'), +('15', '15', '17', '2405', '2132', '0'), +('15', '15', '7', '4343', '2410', '0'), +('15', '15', '7', '2458', '2406', '0'), +('15', '15', '7', '2289', '1917', '0'), +('15', '15', '7', '1361', '1812', '0'), +('15', '15', '9', '14650', '2552', '0'), +('15', '15', '9', '10149', '2527', '0'), +('15', '15', '9', '12189', '2263', '0'), +('15', '15', '9', '4344', '2211', '0'), +('15', '15', '15', '10366', '8005', '0'), +('15', '15', '15', '10151', '7200', '0'), +('15', '15', '15', '14679', '6255', '0'), +('15', '15', '15', '14678', '5104', '0'), +('15', '15', '20', '11601', '8181', '0'), +('15', '15', '20', '2742', '5143', '0'), +('15', '15', '20', '1365', '4200', '0'), +('15', '15', '20', '1543', '3836', '0'), +('15', '15', '12', '20655', '6144', '0'), +('15', '15', '12', '2923', '4654', '0'), +('15', '15', '12', '2291', '2805', '0'), +('15', '15', '12', '11624', '2788', '0'), +('15', '15', '18', '2461', '2919', '0'), +('15', '15', '18', '4410', '2557', '0'), +('15', '15', '18', '4346', '2331', '0'), +('15', '15', '18', '2292', '1823', '0'), +('15', '15', '19', '2293', '5625', '0'), +('15', '15', '19', '68239', '4272', '0'), +('15', '15', '19', '2337', '1757', '0'), +('15', '15', '19', '4407', '1600', '0'), +('15', '15', '13', '7257', '14151', '0'), +('15', '15', '13', '6692', '13290', '0'), +('15', '15', '13', '11610', '12687', '0'), +('15', '15', '13', '6691', '11768', '0'), +('15', '15', '14', '7257', '14151', '0'), +('15', '15', '14', '6692', '13290', '0'), +('15', '15', '14', '11551', '12679', '0'), +('15', '15', '14', '6691', '11768', '0'), +('15', '15', '11', '14762', '3181', '0'), +('15', '15', '11', '20677', '1800', '0'), +('15', '15', '11', '9246', '1510', '0'), +('15', '15', '11', '13353', '1500', '0'), +('15', '16', '22', '10323', '0', '0'), +('15', '16', '22', '10664', '0', '0'), +('15', '16', '22', '9246', '0', '0'), +('15', '16', '22', '21509', '0', '0'), +('15', '16', '1', '14701', '5052', '0'), +('15', '16', '1', '14702', '4250', '0'), +('15', '16', '1', '30361', '1890', '0'), +('15', '16', '1', '10165', '1683', '0'), +('15', '16', '2', '1519', '3207', '0'), +('15', '16', '2', '10142', '3012', '0'), +('15', '16', '2', '4341', '2712', '0'), +('15', '16', '2', '4504', '2563', '0'), +('15', '16', '3', '11052', '1450', '0'), +('15', '16', '3', '4505', '1431', '0'), +('15', '16', '3', '10144', '1304', '0'), +('15', '16', '3', '2295', '1146', '0'), +('15', '16', '5', '14703', '8250', '0'), +('15', '16', '5', '14700', '4953', '0'), +('15', '16', '5', '10055', '4505', '0'), +('15', '16', '5', '2583', '3327', '0'), +('15', '16', '8', '11621', '14220', '0'), +('15', '16', '8', '1546', '11335', '0'), +('15', '16', '8', '11603', '6880', '0'), +('15', '16', '8', '1409', '6312', '0'), +('15', '16', '6', '1557', '6760', '0'), +('15', '16', '6', '2286', '2405', '0'), +('15', '16', '6', '25062', '1833', '0'), +('15', '16', '6', '2331', '1045', '0'), +('15', '16', '17', '2285', '6848', '0'), +('15', '16', '17', '4342', '4288', '0'), +('15', '16', '17', '3305', '2867', '0'), +('15', '16', '17', '2405', '2173', '0'), +('15', '16', '7', '4343', '2446', '0'), +('15', '16', '7', '2458', '2406', '0'), +('15', '16', '7', '2289', '1942', '0'), +('15', '16', '7', '1361', '1812', '0'), +('15', '16', '9', '14650', '2552', '0'), +('15', '16', '9', '10149', '2545', '0'), +('15', '16', '9', '12189', '2263', '0'), +('15', '16', '9', '4344', '2211', '0'), +('15', '16', '15', '10366', '8005', '0'), +('15', '16', '15', '10151', '7200', '0'), +('15', '16', '15', '14679', '6255', '0'), +('15', '16', '15', '14678', '5104', '0'), +('15', '16', '20', '11601', '8217', '0'), +('15', '16', '20', '2742', '5179', '0'), +('15', '16', '20', '1365', '4200', '0'), +('15', '16', '20', '1543', '3897', '0'), +('15', '16', '12', '20655', '6163', '0'), +('15', '16', '12', '2923', '4654', '0'), +('15', '16', '12', '11624', '2814', '0'), +('15', '16', '12', '2291', '2805', '0'), +('15', '16', '18', '2461', '2944', '0'), +('15', '16', '18', '4410', '2557', '0'), +('15', '16', '18', '4346', '2331', '0'), +('15', '16', '18', '2292', '1847', '0'), +('15', '16', '19', '2293', '5643', '0'), +('15', '16', '19', '68239', '4290', '0'), +('15', '16', '19', '2337', '1757', '0'), +('15', '16', '19', '4407', '1655', '0'), +('15', '16', '13', '7257', '14151', '0'), +('15', '16', '13', '6692', '13290', '0'), +('15', '16', '13', '11610', '12687', '0'), +('15', '16', '13', '6691', '11768', '0'), +('15', '16', '14', '7257', '14151', '0'), +('15', '16', '14', '6692', '13290', '0'), +('15', '16', '14', '11551', '12679', '0'), +('15', '16', '14', '6691', '11768', '0'), +('15', '16', '11', '14762', '3181', '0'), +('15', '16', '11', '20677', '1800', '0'), +('15', '16', '11', '9246', '1570', '0'), +('15', '16', '11', '13353', '1500', '0'), +('15', '17', '22', '10323', '0', '0'), +('15', '17', '22', '10664', '0', '0'), +('15', '17', '22', '9246', '0', '0'), +('15', '17', '22', '21509', '0', '0'), +('15', '17', '1', '14701', '5052', '0'), +('15', '17', '1', '14702', '4250', '0'), +('15', '17', '1', '30361', '1890', '0'), +('15', '17', '1', '10165', '1683', '0'), +('15', '17', '2', '1519', '3207', '0'), +('15', '17', '2', '10142', '3012', '0'), +('15', '17', '2', '4341', '2712', '0'), +('15', '17', '2', '4504', '2563', '0'), +('15', '17', '3', '11052', '1540', '0'), +('15', '17', '3', '4505', '1474', '0'), +('15', '17', '3', '10144', '1304', '0'), +('15', '17', '3', '2295', '1158', '0'), +('15', '17', '5', '14703', '8250', '0'), +('15', '17', '5', '14700', '4953', '0'), +('15', '17', '5', '10055', '4505', '0'), +('15', '17', '5', '2583', '3345', '0'), +('15', '17', '8', '11621', '14220', '0'), +('15', '17', '8', '1546', '11396', '0'), +('15', '17', '8', '11603', '6934', '0'), +('15', '17', '8', '1409', '6312', '0'), +('15', '17', '6', '1557', '6760', '0'), +('15', '17', '6', '2286', '2426', '0'), +('15', '17', '6', '25062', '1833', '0'), +('15', '17', '6', '2331', '1063', '0'), +('15', '17', '17', '2285', '6872', '0'), +('15', '17', '17', '4342', '4349', '0'), +('15', '17', '17', '3305', '2867', '0'), +('15', '17', '17', '2405', '2215', '0'), +('15', '17', '7', '4343', '2488', '0'), +('15', '17', '7', '2458', '2406', '0'), +('15', '17', '7', '2289', '1966', '0'), +('15', '17', '7', '1361', '1812', '0'), +('15', '17', '9', '10149', '2563', '0'), +('15', '17', '9', '14650', '2552', '0'), +('15', '17', '9', '12189', '2263', '0'), +('15', '17', '9', '4344', '2211', '0'), +('15', '17', '15', '10366', '8005', '0'), +('15', '17', '15', '10151', '7200', '0'), +('15', '17', '15', '14679', '6255', '0'), +('15', '17', '15', '14678', '5104', '0'), +('15', '17', '20', '11601', '8260', '0'), +('15', '17', '20', '2742', '5221', '0'), +('15', '17', '20', '1365', '4200', '0'), +('15', '17', '20', '1543', '3957', '0'), +('15', '17', '12', '20655', '6183', '0'), +('15', '17', '12', '2923', '4654', '0'), +('15', '17', '12', '11624', '2843', '0'), +('15', '17', '12', '2291', '2805', '0'), +('15', '17', '18', '2461', '2968', '0'), +('15', '17', '18', '4410', '2557', '0'), +('15', '17', '18', '4346', '2331', '0'), +('15', '17', '18', '2292', '1872', '0'), +('15', '17', '19', '2293', '5661', '0'), +('15', '17', '19', '68239', '4308', '0'), +('15', '17', '19', '2337', '1757', '0'), +('15', '17', '19', '4407', '1709', '0'), +('15', '17', '13', '7257', '14151', '0'), +('15', '17', '13', '6692', '13290', '0'), +('15', '17', '13', '11610', '12687', '0'), +('15', '17', '13', '6691', '11768', '0'), +('15', '17', '14', '7257', '14151', '0'), +('15', '17', '14', '6692', '13290', '0'), +('15', '17', '14', '11551', '12679', '0'), +('15', '17', '14', '6691', '11768', '0'), +('15', '17', '11', '14762', '3181', '0'), +('15', '17', '11', '20677', '1800', '0'), +('15', '17', '11', '9246', '1631', '0'), +('15', '17', '11', '13353', '1500', '0'), +('15', '18', '22', '10323', '0', '0'), +('15', '18', '22', '10664', '0', '0'), +('15', '18', '22', '9246', '0', '0'), +('15', '18', '22', '21509', '0', '0'), +('15', '18', '1', '14701', '5052', '0'), +('15', '18', '1', '14702', '4250', '0'), +('15', '18', '1', '30361', '1890', '0'), +('15', '18', '1', '10165', '1683', '0'), +('15', '18', '2', '1519', '3207', '0'), +('15', '18', '2', '10142', '3012', '0'), +('15', '18', '2', '4341', '2712', '0'), +('15', '18', '2', '4504', '2563', '0'), +('15', '18', '3', '11052', '1631', '0'), +('15', '18', '3', '4505', '1516', '0'), +('15', '18', '3', '10144', '1304', '0'), +('15', '18', '3', '14695', '1184', '0'), +('15', '18', '5', '14703', '8250', '0'), +('15', '18', '5', '14700', '4953', '0'), +('15', '18', '5', '10055', '4505', '0'), +('15', '18', '5', '2583', '3363', '0'), +('15', '18', '8', '11621', '14220', '0'), +('15', '18', '8', '1546', '11456', '0'), +('15', '18', '8', '11603', '6988', '0'), +('15', '18', '8', '1409', '6312', '0'), +('15', '18', '6', '1557', '6760', '0'), +('15', '18', '6', '2286', '2444', '0'), +('15', '18', '6', '25062', '1833', '0'), +('15', '18', '6', '2331', '1081', '0'), +('15', '18', '17', '2285', '6896', '0'), +('15', '18', '17', '4342', '4409', '0'), +('15', '18', '17', '3305', '2867', '0'), +('15', '18', '17', '2405', '2257', '0'), +('15', '18', '7', '4343', '2525', '0'), +('15', '18', '7', '2458', '2406', '0'), +('15', '18', '7', '2289', '1990', '0'), +('15', '18', '7', '1361', '1812', '0'), +('15', '18', '9', '10149', '2581', '0'), +('15', '18', '9', '14650', '2552', '0'), +('15', '18', '9', '12189', '2263', '0'), +('15', '18', '9', '4344', '2211', '0'), +('15', '18', '15', '10366', '8005', '0'), +('15', '18', '15', '10151', '7200', '0'), +('15', '18', '15', '14679', '6255', '0'), +('15', '18', '15', '14678', '5104', '0'), +('15', '18', '20', '11601', '8296', '0'), +('15', '18', '20', '2742', '5257', '0'), +('15', '18', '20', '1365', '4200', '0'), +('15', '18', '20', '1543', '4018', '0'), +('15', '18', '12', '20655', '6203', '0'), +('15', '18', '12', '2923', '4654', '0'), +('15', '18', '12', '11624', '2869', '0'), +('15', '18', '12', '2291', '2805', '0'), +('15', '18', '18', '2461', '2992', '0'), +('15', '18', '18', '4410', '2557', '0'), +('15', '18', '18', '4346', '2331', '0'), +('15', '18', '18', '2292', '1896', '0'), +('15', '18', '19', '2293', '5679', '0'), +('15', '18', '19', '68239', '4326', '0'), +('15', '18', '19', '4407', '1763', '0'), +('15', '18', '19', '2337', '1757', '0'), +('15', '18', '13', '7257', '14151', '0'), +('15', '18', '13', '6692', '13290', '0'), +('15', '18', '13', '11610', '12687', '0'), +('15', '18', '13', '6691', '11768', '0'), +('15', '18', '14', '7257', '14151', '0'), +('15', '18', '14', '6692', '13290', '0'), +('15', '18', '14', '11551', '12679', '0'), +('15', '18', '14', '6691', '11768', '0'), +('15', '18', '11', '14762', '3181', '0'), +('15', '18', '11', '20677', '1800', '0'), +('15', '18', '11', '9246', '1691', '0'), +('15', '18', '11', '13353', '1500', '0'), +('15', '19', '22', '10323', '0', '0'), +('15', '19', '22', '10664', '0', '0'), +('15', '19', '22', '9246', '0', '0'), +('15', '19', '22', '21509', '0', '0'), +('15', '19', '1', '14701', '5052', '0'), +('15', '19', '1', '14702', '4250', '0'), +('15', '19', '1', '30361', '1890', '0'), +('15', '19', '1', '10165', '1683', '0'), +('15', '19', '2', '1519', '3207', '0'), +('15', '19', '2', '10142', '3012', '0'), +('15', '19', '2', '4341', '2712', '0'), +('15', '19', '2', '2191', '2565', '0'), +('15', '19', '3', '11052', '1721', '0'), +('15', '19', '3', '4505', '1558', '0'), +('15', '19', '3', '10144', '1304', '0'), +('15', '19', '3', '14695', '1226', '0'), +('15', '19', '5', '14703', '8250', '0'), +('15', '19', '5', '14700', '4953', '0'), +('15', '19', '5', '10055', '4505', '0'), +('15', '19', '5', '2583', '3381', '0'), +('15', '19', '8', '11621', '14220', '0'), +('15', '19', '8', '1546', '11517', '0'), +('15', '19', '8', '11603', '7043', '0'), +('15', '19', '8', '1409', '6312', '0'), +('15', '19', '6', '1557', '6760', '0'), +('15', '19', '6', '2286', '2465', '0'), +('15', '19', '6', '25062', '1833', '0'), +('15', '19', '6', '2331', '1099', '0'), +('15', '19', '17', '2285', '6920', '0'), +('15', '19', '17', '4342', '4470', '0'), +('15', '19', '17', '3305', '2867', '0'), +('15', '19', '17', '2405', '2299', '0'), +('15', '19', '7', '4343', '2567', '0'), +('15', '19', '7', '2458', '2406', '0'), +('15', '19', '7', '2289', '2014', '0'), +('15', '19', '7', '2342', '1820', '0'), +('15', '19', '9', '10149', '2599', '0'), +('15', '19', '9', '14650', '2552', '0'), +('15', '19', '9', '12189', '2263', '0'), +('15', '19', '9', '4344', '2211', '0'), +('15', '19', '15', '10366', '8005', '0'), +('15', '19', '15', '10151', '7200', '0'), +('15', '19', '15', '14679', '6255', '0'), +('15', '19', '15', '14678', '5104', '0'), +('15', '19', '20', '11601', '8338', '0'), +('15', '19', '20', '2742', '5300', '0'), +('15', '19', '20', '1365', '4200', '0'), +('15', '19', '20', '1543', '4078', '0'), +('15', '19', '12', '20655', '6223', '0'), +('15', '19', '12', '2923', '4654', '0'), +('15', '19', '12', '11624', '2898', '0'), +('15', '19', '12', '2291', '2805', '0'), +('15', '19', '18', '2461', '3016', '0'), +('15', '19', '18', '4410', '2557', '0'), +('15', '19', '18', '4346', '2331', '0'), +('15', '19', '18', '2292', '1920', '0'), +('15', '19', '19', '2293', '5698', '0'), +('15', '19', '19', '68239', '4344', '0'), +('15', '19', '19', '4407', '1818', '0'), +('15', '19', '19', '2337', '1757', '0'), +('15', '19', '13', '7257', '14151', '0'), +('15', '19', '13', '6692', '13290', '0'), +('15', '19', '13', '11610', '12687', '0'), +('15', '19', '13', '6691', '11768', '0'), +('15', '19', '14', '7257', '14151', '0'), +('15', '19', '14', '6692', '13290', '0'), +('15', '19', '14', '11551', '12679', '0'), +('15', '19', '14', '6691', '11768', '0'), +('15', '19', '11', '14762', '3181', '0'), +('15', '19', '11', '20677', '1800', '0'), +('15', '19', '11', '9246', '1752', '0'), +('15', '19', '11', '13353', '1500', '0'), +('15', '20', '22', '10323', '0', '0'), +('15', '20', '22', '10664', '0', '0'), +('15', '20', '22', '9246', '0', '0'), +('15', '20', '22', '21509', '0', '0'), +('15', '20', '1', '14701', '5052', '0'), +('15', '20', '1', '14702', '4250', '0'), +('15', '20', '1', '30361', '1890', '0'), +('15', '20', '1', '10165', '1683', '0'), +('15', '20', '2', '1519', '3207', '0'), +('15', '20', '2', '10142', '3012', '0'), +('15', '20', '2', '4341', '2712', '0'), +('15', '20', '2', '2191', '2601', '0'), +('15', '20', '3', '11052', '1812', '0'), +('15', '20', '3', '4505', '1601', '0'), +('15', '20', '3', '10144', '1304', '0'), +('15', '20', '3', '14695', '1268', '0'), +('15', '20', '5', '14703', '8250', '0'), +('15', '20', '5', '14700', '4953', '0'), +('15', '20', '5', '10055', '4505', '0'), +('15', '20', '5', '2583', '3399', '0'), +('15', '20', '8', '11621', '14220', '0'), +('15', '20', '8', '1546', '11577', '0'), +('15', '20', '8', '11603', '7097', '0'), +('15', '20', '8', '1409', '6312', '0'), +('15', '20', '6', '1557', '6760', '0'), +('15', '20', '6', '2286', '2484', '0'), +('15', '20', '6', '25062', '1833', '0'), +('15', '20', '6', '2331', '1117', '0'), +('15', '20', '17', '2285', '6944', '0'), +('15', '20', '17', '4342', '4530', '0'), +('15', '20', '17', '3305', '2867', '0'), +('15', '20', '17', '2405', '2341', '0'), +('15', '20', '7', '4343', '2603', '0'), +('15', '20', '7', '2458', '2406', '0'), +('15', '20', '7', '2289', '2038', '0'), +('15', '20', '7', '2342', '1831', '0'), +('15', '20', '9', '10149', '2617', '0'), +('15', '20', '9', '14650', '2552', '0'), +('15', '20', '9', '12189', '2263', '0'), +('15', '20', '9', '4344', '2211', '0'), +('15', '20', '15', '10366', '8005', '0'), +('15', '20', '15', '10151', '7200', '0'), +('15', '20', '15', '14679', '6255', '0'), +('15', '20', '15', '14678', '5104', '0'), +('15', '20', '20', '11601', '8374', '0'), +('15', '20', '20', '2742', '5336', '0'), +('15', '20', '20', '1365', '4200', '0'), +('15', '20', '20', '1543', '4138', '0'), +('15', '20', '12', '20655', '6243', '0'), +('15', '20', '12', '2923', '4654', '0'), +('15', '20', '12', '11624', '2924', '0'), +('15', '20', '12', '2291', '2805', '0'), +('15', '20', '18', '2461', '3040', '0'), +('15', '20', '18', '4410', '2557', '0'), +('15', '20', '18', '4346', '2331', '0'), +('15', '20', '18', '2292', '1944', '0'), +('15', '20', '19', '2293', '5716', '0'), +('15', '20', '19', '68239', '4363', '0'), +('15', '20', '19', '4407', '1872', '0'), +('15', '20', '19', '2337', '1757', '0'), +('15', '20', '13', '7257', '14151', '0'), +('15', '20', '13', '6692', '13290', '0'), +('15', '20', '13', '11610', '12687', '0'), +('15', '20', '13', '6691', '11768', '0'), +('15', '20', '14', '7257', '14151', '0'), +('15', '20', '14', '6692', '13290', '0'), +('15', '20', '14', '11551', '12679', '0'), +('15', '20', '14', '6691', '11768', '0'), +('15', '20', '11', '14762', '3181', '0'), +('15', '20', '11', '9246', '1812', '0'), +('15', '20', '11', '20677', '1800', '0'), +('15', '20', '11', '13353', '1500', '0'), +('15', '21', '22', '10323', '0', '0'), +('15', '21', '22', '10664', '0', '0'), +('15', '21', '22', '9246', '0', '0'), +('15', '21', '22', '21509', '0', '0'), +('15', '21', '1', '14701', '5052', '0'), +('15', '21', '1', '14702', '4250', '0'), +('15', '21', '1', '30361', '1890', '0'), +('15', '21', '1', '10165', '1683', '0'), +('15', '21', '2', '1519', '3207', '0'), +('15', '21', '2', '10142', '3012', '0'), +('15', '21', '2', '4341', '2712', '0'), +('15', '21', '2', '2191', '2637', '0'), +('15', '21', '3', '11052', '1903', '0'), +('15', '21', '3', '4505', '1643', '0'), +('15', '21', '3', '14695', '1311', '0'), +('15', '21', '3', '10144', '1304', '0'), +('15', '21', '5', '14703', '8250', '0'), +('15', '21', '5', '14700', '4953', '0'), +('15', '21', '5', '10055', '4505', '0'), +('15', '21', '5', '2583', '3418', '0'), +('15', '21', '8', '11621', '14220', '0'), +('15', '21', '8', '1546', '11637', '0'), +('15', '21', '8', '11603', '7152', '0'), +('15', '21', '8', '1409', '6312', '0'), +('15', '21', '6', '1557', '6760', '0'), +('15', '21', '6', '2286', '2505', '0'), +('15', '21', '6', '25062', '1833', '0'), +('15', '21', '6', '2331', '1136', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '21', '17', '2285', '6968', '0'), +('15', '21', '17', '4342', '4590', '0'), +('15', '21', '17', '3305', '2867', '0'), +('15', '21', '17', '2405', '2383', '0'), +('15', '21', '7', '4343', '2646', '0'), +('15', '21', '7', '2458', '2406', '0'), +('15', '21', '7', '2289', '2062', '0'), +('15', '21', '7', '2342', '1843', '0'), +('15', '21', '9', '10149', '2636', '0'), +('15', '21', '9', '14650', '2552', '0'), +('15', '21', '9', '12189', '2263', '0'), +('15', '21', '9', '4344', '2211', '0'), +('15', '21', '15', '10366', '8005', '0'), +('15', '21', '15', '10151', '7200', '0'), +('15', '21', '15', '14679', '6255', '0'), +('15', '21', '15', '14678', '5104', '0'), +('15', '21', '20', '11601', '8417', '0'), +('15', '21', '20', '2742', '5378', '0'), +('15', '21', '20', '1365', '4200', '0'), +('15', '21', '20', '1543', '4199', '0'), +('15', '21', '12', '20655', '6263', '0'), +('15', '21', '12', '2923', '4654', '0'), +('15', '21', '12', '11624', '2953', '0'), +('15', '21', '12', '2291', '2805', '0'), +('15', '21', '18', '2461', '3064', '0'), +('15', '21', '18', '4410', '2557', '0'), +('15', '21', '18', '4346', '2331', '0'), +('15', '21', '18', '2292', '1968', '0'), +('15', '21', '19', '2293', '5734', '0'), +('15', '21', '19', '68239', '4381', '0'), +('15', '21', '19', '4407', '1927', '0'), +('15', '21', '19', '2337', '1757', '0'), +('15', '21', '13', '7257', '14151', '0'), +('15', '21', '13', '6692', '13290', '0'), +('15', '21', '13', '11610', '12687', '0'), +('15', '21', '13', '6691', '11768', '0'), +('15', '21', '14', '7257', '14151', '0'), +('15', '21', '14', '6692', '13290', '0'), +('15', '21', '14', '11551', '12679', '0'), +('15', '21', '14', '6691', '11768', '0'), +('15', '21', '11', '14762', '3181', '0'), +('15', '21', '11', '9246', '1872', '0'), +('15', '21', '11', '20677', '1800', '0'), +('15', '21', '11', '13353', '1500', '0'), +('15', '22', '22', '10323', '0', '0'), +('15', '22', '22', '10664', '0', '0'), +('15', '22', '22', '9246', '0', '0'), +('15', '22', '22', '21509', '0', '0'), +('15', '22', '1', '14701', '5052', '0'), +('15', '22', '1', '14702', '4250', '0'), +('15', '22', '1', '30361', '1890', '0'), +('15', '22', '1', '10165', '1683', '0'), +('15', '22', '2', '1519', '3207', '0'), +('15', '22', '2', '10142', '3012', '0'), +('15', '22', '2', '4341', '2712', '0'), +('15', '22', '2', '2191', '2673', '0'), +('15', '22', '3', '11052', '1993', '0'), +('15', '22', '3', '4505', '1685', '0'), +('15', '22', '3', '14695', '1353', '0'), +('15', '22', '3', '10144', '1304', '0'), +('15', '22', '5', '14703', '8250', '0'), +('15', '22', '5', '14700', '4953', '0'), +('15', '22', '5', '10055', '4505', '0'), +('15', '22', '5', '2583', '3436', '0'), +('15', '22', '8', '11621', '14220', '0'), +('15', '22', '8', '1546', '11698', '0'), +('15', '22', '8', '11603', '7206', '0'), +('15', '22', '8', '1409', '6312', '0'), +('15', '22', '6', '1557', '6760', '0'), +('15', '22', '6', '2286', '2523', '0'), +('15', '22', '6', '25062', '1833', '0'), +('15', '22', '6', '2331', '1154', '0'), +('15', '22', '17', '2285', '6993', '0'), +('15', '22', '17', '4342', '4651', '0'), +('15', '22', '17', '3305', '2867', '0'), +('15', '22', '17', '2405', '2424', '0'), +('15', '22', '7', '4343', '2682', '0'), +('15', '22', '7', '2458', '2406', '0'), +('15', '22', '7', '2289', '2087', '0'), +('15', '22', '7', '2342', '1854', '0'), +('15', '22', '9', '10149', '2654', '0'), +('15', '22', '9', '14650', '2552', '0'), +('15', '22', '9', '12189', '2263', '0'), +('15', '22', '9', '4344', '2211', '0'), +('15', '22', '15', '10366', '8005', '0'), +('15', '22', '15', '10151', '7200', '0'), +('15', '22', '15', '14679', '6255', '0'), +('15', '22', '15', '14678', '5104', '0'), +('15', '22', '20', '11601', '8453', '0'), +('15', '22', '20', '2742', '5414', '0'), +('15', '22', '20', '1543', '4259', '0'), +('15', '22', '20', '1365', '4200', '0'), +('15', '22', '12', '20655', '6283', '0'), +('15', '22', '12', '2923', '4654', '0'), +('15', '22', '12', '11624', '2979', '0'), +('15', '22', '12', '2291', '2805', '0'), +('15', '22', '18', '2461', '3089', '0'), +('15', '22', '18', '4410', '2557', '0'), +('15', '22', '18', '4346', '2331', '0'), +('15', '22', '18', '2292', '1992', '0'), +('15', '22', '19', '2293', '5752', '0'), +('15', '22', '19', '68239', '4399', '0'), +('15', '22', '19', '4407', '1981', '0'), +('15', '22', '19', '2337', '1757', '0'), +('15', '22', '13', '7257', '14151', '0'), +('15', '22', '13', '6692', '13290', '0'), +('15', '22', '13', '11610', '12687', '0'), +('15', '22', '13', '6691', '11768', '0'), +('15', '22', '14', '7257', '14151', '0'), +('15', '22', '14', '6692', '13290', '0'), +('15', '22', '14', '11551', '12679', '0'), +('15', '22', '14', '6691', '11768', '0'), +('15', '22', '11', '14762', '3181', '0'), +('15', '22', '11', '9246', '1933', '0'), +('15', '22', '11', '20677', '1800', '0'), +('15', '22', '11', '13353', '1500', '0'), +('15', '23', '22', '10323', '0', '0'), +('15', '23', '22', '10664', '0', '0'), +('15', '23', '22', '9246', '0', '0'), +('15', '23', '22', '21509', '0', '0'), +('15', '23', '1', '14701', '5052', '0'), +('15', '23', '1', '14702', '4250', '0'), +('15', '23', '1', '30361', '1890', '0'), +('15', '23', '1', '10165', '1683', '0'), +('15', '23', '2', '1519', '3207', '0'), +('15', '23', '2', '10142', '3012', '0'), +('15', '23', '2', '4341', '2712', '0'), +('15', '23', '2', '2191', '2710', '0'), +('15', '23', '3', '11052', '2084', '0'), +('15', '23', '3', '4505', '1727', '0'), +('15', '23', '3', '14695', '1395', '0'), +('15', '23', '3', '10144', '1304', '0'), +('15', '23', '5', '14703', '8250', '0'), +('15', '23', '5', '14700', '4953', '0'), +('15', '23', '5', '10055', '4505', '0'), +('15', '23', '5', '2583', '3454', '0'), +('15', '23', '8', '11621', '14220', '0'), +('15', '23', '8', '1546', '11758', '0'), +('15', '23', '8', '11603', '7260', '0'), +('15', '23', '8', '1409', '6312', '0'), +('15', '23', '6', '1557', '6760', '0'), +('15', '23', '6', '2286', '2544', '0'), +('15', '23', '6', '25062', '1833', '0'), +('15', '23', '6', '2331', '1172', '0'), +('15', '23', '17', '2285', '7017', '0'), +('15', '23', '17', '4342', '4711', '0'), +('15', '23', '17', '3305', '2867', '0'), +('15', '23', '17', '2405', '2467', '0'), +('15', '23', '7', '4343', '2724', '0'), +('15', '23', '7', '2458', '2406', '0'), +('15', '23', '7', '2289', '2111', '0'), +('15', '23', '7', '2342', '1867', '0'), +('15', '23', '9', '10149', '2672', '0'), +('15', '23', '9', '14650', '2552', '0'), +('15', '23', '9', '12189', '2263', '0'), +('15', '23', '9', '4344', '2211', '0'), +('15', '23', '15', '10366', '8005', '0'), +('15', '23', '15', '10151', '7200', '0'), +('15', '23', '15', '14679', '6255', '0'), +('15', '23', '15', '14678', '5104', '0'), +('15', '23', '20', '11601', '8495', '0'), +('15', '23', '20', '2742', '5457', '0'), +('15', '23', '20', '1543', '4320', '0'), +('15', '23', '20', '1365', '4200', '0'), +('15', '23', '12', '20655', '6303', '0'), +('15', '23', '12', '2923', '4654', '0'), +('15', '23', '12', '11624', '3008', '0'), +('15', '23', '12', '4345', '2807', '0'), +('15', '23', '18', '2461', '3113', '0'), +('15', '23', '18', '4410', '2557', '0'), +('15', '23', '18', '4346', '2331', '0'), +('15', '23', '18', '2292', '2017', '0'), +('15', '23', '19', '2293', '5770', '0'), +('15', '23', '19', '68239', '4417', '0'), +('15', '23', '19', '4407', '2035', '0'), +('15', '23', '19', '2337', '1757', '0'), +('15', '23', '13', '7257', '14151', '0'), +('15', '23', '13', '6692', '13290', '0'), +('15', '23', '13', '11610', '12687', '0'), +('15', '23', '13', '6691', '11768', '0'), +('15', '23', '14', '7257', '14151', '0'), +('15', '23', '14', '6692', '13290', '0'), +('15', '23', '14', '11551', '12679', '0'), +('15', '23', '14', '6691', '11768', '0'), +('15', '23', '11', '14762', '3181', '0'), +('15', '23', '11', '9246', '1993', '0'), +('15', '23', '11', '20677', '1800', '0'), +('15', '23', '11', '13353', '1500', '0'), +('15', '24', '22', '10323', '0', '0'), +('15', '24', '22', '10664', '0', '0'), +('15', '24', '22', '9246', '0', '0'), +('15', '24', '22', '21509', '0', '0'), +('15', '24', '1', '14701', '5052', '0'), +('15', '24', '1', '14702', '4250', '0'), +('15', '24', '1', '30361', '1890', '0'), +('15', '24', '1', '10165', '1683', '0'), +('15', '24', '2', '1519', '3207', '0'), +('15', '24', '2', '10142', '3012', '0'), +('15', '24', '2', '2191', '2746', '0'), +('15', '24', '2', '4341', '2712', '0'), +('15', '24', '3', '11052', '2174', '0'), +('15', '24', '3', '4505', '1770', '0'), +('15', '24', '3', '14695', '1438', '0'), +('15', '24', '3', '10144', '1304', '0'), +('15', '24', '5', '14703', '8250', '0'), +('15', '24', '5', '14700', '4953', '0'), +('15', '24', '5', '10055', '4505', '0'), +('15', '24', '5', '68291', '3617', '0'), +('15', '24', '8', '11621', '14220', '0'), +('15', '24', '8', '1546', '11819', '0'), +('15', '24', '8', '11603', '7315', '0'), +('15', '24', '8', '1409', '6312', '0'), +('15', '24', '6', '1557', '6760', '0'), +('15', '24', '6', '2286', '2565', '0'), +('15', '24', '6', '25062', '1833', '0'), +('15', '24', '6', '2331', '1190', '0'), +('15', '24', '17', '2285', '7041', '0'), +('15', '24', '17', '4342', '4772', '0'), +('15', '24', '17', '3305', '2867', '0'), +('15', '24', '17', '2405', '2510', '0'), +('15', '24', '7', '4343', '2766', '0'), +('15', '24', '7', '2458', '2406', '0'), +('15', '24', '7', '2289', '2135', '0'), +('15', '24', '7', '2342', '1879', '0'), +('15', '24', '9', '10149', '2690', '0'), +('15', '24', '9', '14650', '2552', '0'), +('15', '24', '9', '12189', '2263', '0'), +('15', '24', '9', '4344', '2211', '0'), +('15', '24', '15', '10366', '8005', '0'), +('15', '24', '15', '10151', '7200', '0'), +('15', '24', '15', '14679', '6255', '0'), +('15', '24', '15', '14678', '5104', '0'), +('15', '24', '20', '11601', '8537', '0'), +('15', '24', '20', '2742', '5499', '0'), +('15', '24', '20', '1543', '4380', '0'), +('15', '24', '20', '1365', '4200', '0'), +('15', '24', '12', '20655', '6324', '0'), +('15', '24', '12', '2923', '4654', '0'), +('15', '24', '12', '11624', '3038', '0'), +('15', '24', '12', '4345', '2837', '0'), +('15', '24', '18', '2461', '3137', '0'), +('15', '24', '18', '4410', '2557', '0'), +('15', '24', '18', '4346', '2331', '0'), +('15', '24', '18', '2292', '2041', '0'), +('15', '24', '19', '2293', '5788', '0'), +('15', '24', '19', '68239', '4435', '0'), +('15', '24', '19', '4407', '2090', '0'), +('15', '24', '19', '2337', '1757', '0'), +('15', '24', '13', '7257', '14151', '0'), +('15', '24', '13', '6692', '13290', '0'), +('15', '24', '13', '11610', '12687', '0'), +('15', '24', '13', '6691', '11768', '0'), +('15', '24', '14', '7257', '14151', '0'), +('15', '24', '14', '6692', '13290', '0'), +('15', '24', '14', '11551', '12679', '0'), +('15', '24', '14', '6691', '11768', '0'), +('15', '24', '11', '14762', '3181', '0'), +('15', '24', '11', '9246', '2054', '0'), +('15', '24', '11', '20677', '1800', '0'), +('15', '24', '11', '13353', '1500', '0'), +('15', '25', '22', '10323', '0', '0'), +('15', '25', '22', '10664', '0', '0'), +('15', '25', '22', '9246', '0', '0'), +('15', '25', '22', '21509', '0', '0'), +('15', '25', '1', '14701', '5052', '0'), +('15', '25', '1', '14702', '4250', '0'), +('15', '25', '1', '30361', '1890', '0'), +('15', '25', '1', '10165', '1683', '0'), +('15', '25', '2', '1519', '3207', '0'), +('15', '25', '2', '10142', '3012', '0'), +('15', '25', '2', '2191', '2782', '0'), +('15', '25', '2', '4341', '2712', '0'), +('15', '25', '3', '11052', '2265', '0'), +('15', '25', '3', '4505', '1812', '0'), +('15', '25', '3', '14695', '1480', '0'), +('15', '25', '3', '10144', '1304', '0'), +('15', '25', '5', '14703', '8250', '0'), +('15', '25', '5', '14700', '4953', '0'), +('15', '25', '5', '10055', '4505', '0'), +('15', '25', '5', '68291', '3792', '0'), +('15', '25', '8', '11621', '14220', '0'), +('15', '25', '8', '1546', '11879', '0'), +('15', '25', '8', '11603', '7369', '0'), +('15', '25', '8', '1409', '6312', '0'), +('15', '25', '6', '1557', '6760', '0'), +('15', '25', '6', '2286', '2583', '0'), +('15', '25', '6', '25062', '1833', '0'), +('15', '25', '6', '2331', '1208', '0'), +('15', '25', '17', '2285', '7065', '0'), +('15', '25', '17', '4342', '4832', '0'), +('15', '25', '17', '3305', '2867', '0'), +('15', '25', '17', '2405', '2551', '0'), +('15', '25', '7', '4343', '2803', '0'), +('15', '25', '7', '2458', '2406', '0'), +('15', '25', '7', '2289', '2159', '0'), +('15', '25', '7', '2342', '1890', '0'), +('15', '25', '9', '10149', '2708', '0'), +('15', '25', '9', '14650', '2552', '0'), +('15', '25', '9', '12189', '2263', '0'), +('15', '25', '9', '4344', '2211', '0'), +('15', '25', '15', '10366', '8005', '0'), +('15', '25', '15', '10151', '7200', '0'), +('15', '25', '15', '14679', '6255', '0'), +('15', '25', '15', '14678', '5104', '0'), +('15', '25', '20', '11601', '8574', '0'), +('15', '25', '20', '2742', '5535', '0'), +('15', '25', '20', '1543', '4440', '0'), +('15', '25', '20', '1365', '4200', '0'), +('15', '25', '12', '20655', '6343', '0'), +('15', '25', '12', '2923', '4654', '0'), +('15', '25', '12', '11624', '3063', '0'), +('15', '25', '12', '4345', '2867', '0'), +('15', '25', '18', '2461', '3161', '0'), +('15', '25', '18', '4410', '2557', '0'), +('15', '25', '18', '4346', '2331', '0'), +('15', '25', '18', '2292', '2065', '0'), +('15', '25', '19', '2293', '5806', '0'), +('15', '25', '19', '68239', '4453', '0'), +('15', '25', '19', '4407', '2144', '0'), +('15', '25', '19', '2337', '1757', '0'), +('15', '25', '13', '7257', '14151', '0'), +('15', '25', '13', '6692', '13290', '0'), +('15', '25', '13', '11610', '12687', '0'), +('15', '25', '13', '6691', '11768', '0'), +('15', '25', '14', '7257', '14151', '0'), +('15', '25', '14', '6692', '13290', '0'), +('15', '25', '14', '11551', '12679', '0'), +('15', '25', '14', '6691', '11768', '0'), +('15', '25', '11', '14762', '3181', '0'), +('15', '25', '11', '9246', '2114', '0'), +('15', '25', '11', '20677', '1800', '0'), +('15', '25', '11', '13353', '1500', '0'), +('15', '26', '22', '10323', '0', '0'), +('15', '26', '22', '10664', '0', '0'), +('15', '26', '22', '9246', '0', '0'), +('15', '26', '22', '21509', '0', '0'), +('15', '26', '1', '14701', '5052', '0'), +('15', '26', '1', '14702', '4250', '0'), +('15', '26', '1', '30361', '1890', '0'), +('15', '26', '1', '10165', '1683', '0'), +('15', '26', '2', '1519', '3207', '0'), +('15', '26', '2', '10142', '3012', '0'), +('15', '26', '2', '2191', '2818', '0'), +('15', '26', '2', '4341', '2712', '0'), +('15', '26', '3', '11052', '2356', '0'), +('15', '26', '3', '4505', '1854', '0'), +('15', '26', '3', '14695', '1522', '0'), +('15', '26', '3', '10144', '1304', '0'), +('15', '26', '5', '14703', '8250', '0'), +('15', '26', '5', '14700', '4953', '0'), +('15', '26', '5', '10055', '4505', '0'), +('15', '26', '5', '68291', '3816', '0'), +('15', '26', '8', '11621', '14220', '0'), +('15', '26', '8', '1546', '11939', '0'), +('15', '26', '8', '11603', '7423', '0'), +('15', '26', '8', '1409', '6312', '0'), +('15', '26', '6', '1557', '6760', '0'), +('15', '26', '6', '2286', '2604', '0'), +('15', '26', '6', '25062', '1833', '0'), +('15', '26', '6', '2331', '1226', '0'), +('15', '26', '17', '2285', '7089', '0'), +('15', '26', '17', '4342', '4892', '0'), +('15', '26', '17', '3305', '2867', '0'), +('15', '26', '17', '2405', '2594', '0'), +('15', '26', '7', '4343', '2845', '0'), +('15', '26', '7', '2458', '2406', '0'), +('15', '26', '7', '2289', '2183', '0'), +('15', '26', '7', '2342', '1903', '0'), +('15', '26', '9', '10149', '2726', '0'), +('15', '26', '9', '14650', '2552', '0'), +('15', '26', '9', '12189', '2263', '0'), +('15', '26', '9', '4344', '2211', '0'), +('15', '26', '15', '10366', '8005', '0'), +('15', '26', '15', '10151', '7200', '0'), +('15', '26', '15', '14679', '6255', '0'), +('15', '26', '15', '14678', '5104', '0'), +('15', '26', '20', '11601', '8616', '0'), +('15', '26', '20', '2742', '5577', '0'), +('15', '26', '20', '1543', '4501', '0'), +('15', '26', '20', '1365', '4200', '0'), +('15', '26', '12', '20655', '6363', '0'), +('15', '26', '12', '2923', '4654', '0'), +('15', '26', '12', '11624', '3093', '0'), +('15', '26', '12', '4345', '2897', '0'), +('15', '26', '18', '2461', '3185', '0'), +('15', '26', '18', '4410', '2557', '0'), +('15', '26', '18', '4346', '2331', '0'), +('15', '26', '18', '2292', '2089', '0'), +('15', '26', '19', '2293', '5824', '0'), +('15', '26', '19', '68239', '4471', '0'), +('15', '26', '19', '4407', '2198', '0'), +('15', '26', '19', '2337', '1757', '0'), +('15', '26', '13', '7257', '14151', '0'), +('15', '26', '13', '6692', '13290', '0'), +('15', '26', '13', '11610', '12687', '0'), +('15', '26', '13', '6691', '11768', '0'), +('15', '26', '14', '7257', '14151', '0'), +('15', '26', '14', '6692', '13290', '0'), +('15', '26', '14', '11551', '12679', '0'), +('15', '26', '14', '6691', '11768', '0'), +('15', '26', '11', '14762', '3181', '0'), +('15', '26', '11', '9246', '2174', '0'), +('15', '26', '11', '20677', '1800', '0'), +('15', '26', '11', '13353', '1500', '0'), +('15', '27', '22', '10323', '0', '0'), +('15', '27', '22', '10664', '0', '0'), +('15', '27', '22', '9246', '0', '0'), +('15', '27', '22', '21509', '0', '0'), +('15', '27', '1', '14701', '5052', '0'), +('15', '27', '1', '14702', '4250', '0'), +('15', '27', '1', '30361', '1890', '0'), +('15', '27', '1', '10165', '1683', '0'), +('15', '27', '2', '1519', '3207', '0'), +('15', '27', '2', '10142', '3012', '0'), +('15', '27', '2', '2191', '2855', '0'), +('15', '27', '2', '4341', '2712', '0'), +('15', '27', '3', '11052', '2446', '0'), +('15', '27', '3', '4505', '1897', '0'), +('15', '27', '3', '14695', '1564', '0'), +('15', '27', '3', '10144', '1304', '0'), +('15', '27', '5', '14703', '8250', '0'), +('15', '27', '5', '14700', '4953', '0'), +('15', '27', '5', '10055', '4505', '0'), +('15', '27', '5', '68291', '3841', '0'), +('15', '27', '8', '11621', '14220', '0'), +('15', '27', '8', '1546', '12000', '0'), +('15', '27', '8', '11603', '7478', '0'), +('15', '27', '8', '1409', '6312', '0'), +('15', '27', '6', '1557', '6760', '0'), +('15', '27', '6', '2286', '2625', '0'), +('15', '27', '6', '25062', '1833', '0'), +('15', '27', '6', '2331', '1244', '0'), +('15', '27', '17', '2285', '7113', '0'), +('15', '27', '17', '4342', '4953', '0'), +('15', '27', '17', '3305', '2867', '0'), +('15', '27', '17', '2405', '2637', '0'), +('15', '27', '7', '4343', '2887', '0'), +('15', '27', '7', '2458', '2406', '0'), +('15', '27', '7', '2289', '2207', '0'), +('15', '27', '7', '2342', '1916', '0'), +('15', '27', '9', '10149', '2744', '0'), +('15', '27', '9', '14650', '2552', '0'), +('15', '27', '9', '12189', '2263', '0'), +('15', '27', '9', '4344', '2211', '0'), +('15', '27', '15', '10366', '8005', '0'), +('15', '27', '15', '10151', '7200', '0'), +('15', '27', '15', '14679', '6255', '0'), +('15', '27', '15', '14678', '5104', '0'), +('15', '27', '20', '11601', '8658', '0'), +('15', '27', '20', '2742', '5620', '0'), +('15', '27', '20', '1543', '4561', '0'), +('15', '27', '20', '1365', '4200', '0'), +('15', '27', '12', '20655', '6384', '0'), +('15', '27', '12', '2923', '4654', '0'), +('15', '27', '12', '11624', '3122', '0'), +('15', '27', '12', '4345', '2927', '0'), +('15', '27', '18', '2461', '3209', '0'), +('15', '27', '18', '4410', '2557', '0'), +('15', '27', '18', '4346', '2331', '0'), +('15', '27', '18', '2292', '2113', '0'), +('15', '27', '19', '2293', '5843', '0'), +('15', '27', '19', '68239', '4489', '0'), +('15', '27', '19', '4407', '2253', '0'), +('15', '27', '19', '2337', '1757', '0'), +('15', '27', '13', '7257', '14151', '0'), +('15', '27', '13', '6692', '13290', '0'), +('15', '27', '13', '11610', '12687', '0'), +('15', '27', '13', '6691', '11768', '0'), +('15', '27', '14', '7257', '14151', '0'), +('15', '27', '14', '6692', '13290', '0'), +('15', '27', '14', '11551', '12679', '0'), +('15', '27', '14', '6691', '11768', '0'), +('15', '27', '11', '14762', '3181', '0'), +('15', '27', '11', '9246', '2235', '0'), +('15', '27', '11', '20677', '1800', '0'), +('15', '27', '11', '13353', '1500', '0'), +('15', '28', '22', '10323', '0', '0'), +('15', '28', '22', '10664', '0', '0'), +('15', '28', '22', '9246', '0', '0'), +('15', '28', '22', '21509', '0', '0'), +('15', '28', '1', '14701', '5052', '0'), +('15', '28', '1', '14702', '4250', '0'), +('15', '28', '1', '30361', '1890', '0'), +('15', '28', '1', '10165', '1683', '0'), +('15', '28', '2', '1519', '3207', '0'), +('15', '28', '2', '10142', '3012', '0'), +('15', '28', '2', '2191', '2891', '0'), +('15', '28', '2', '4341', '2712', '0'), +('15', '28', '3', '11052', '2537', '0'), +('15', '28', '3', '4505', '1939', '0'), +('15', '28', '3', '14695', '1607', '0'), +('15', '28', '3', '10144', '1304', '0'), +('15', '28', '5', '14703', '8250', '0'), +('15', '28', '5', '14700', '4953', '0'), +('15', '28', '5', '10055', '4505', '0'), +('15', '28', '5', '68291', '3865', '0'), +('15', '28', '8', '11621', '14220', '0'), +('15', '28', '8', '1546', '12060', '0'), +('15', '28', '8', '11603', '7532', '0'), +('15', '28', '8', '1409', '6312', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '28', '6', '1557', '6760', '0'), +('15', '28', '6', '2286', '2644', '0'), +('15', '28', '6', '25062', '1833', '0'), +('15', '28', '6', '2331', '1262', '0'), +('15', '28', '17', '2285', '7137', '0'), +('15', '28', '17', '4342', '5013', '0'), +('15', '28', '17', '3305', '2867', '0'), +('15', '28', '17', '2405', '2678', '0'), +('15', '28', '7', '4343', '2923', '0'), +('15', '28', '7', '2458', '2406', '0'), +('15', '28', '7', '2289', '2231', '0'), +('15', '28', '7', '2342', '1927', '0'), +('15', '28', '9', '10149', '2762', '0'), +('15', '28', '9', '14650', '2552', '0'), +('15', '28', '9', '12189', '2263', '0'), +('15', '28', '9', '4344', '2211', '0'), +('15', '28', '15', '10366', '8005', '0'), +('15', '28', '15', '10151', '7200', '0'), +('15', '28', '15', '14679', '6255', '0'), +('15', '28', '15', '14678', '5104', '0'), +('15', '28', '20', '11601', '8695', '0'), +('15', '28', '20', '2742', '5656', '0'), +('15', '28', '20', '1543', '4622', '0'), +('15', '28', '20', '1365', '4200', '0'), +('15', '28', '12', '20655', '6403', '0'), +('15', '28', '12', '2923', '4654', '0'), +('15', '28', '12', '11624', '3148', '0'), +('15', '28', '12', '4345', '2958', '0'), +('15', '28', '18', '2461', '3233', '0'), +('15', '28', '18', '4410', '2557', '0'), +('15', '28', '18', '4346', '2331', '0'), +('15', '28', '18', '2292', '2137', '0'), +('15', '28', '19', '2293', '5861', '0'), +('15', '28', '19', '68239', '4508', '0'), +('15', '28', '19', '4407', '2307', '0'), +('15', '28', '19', '2337', '1757', '0'), +('15', '28', '13', '7257', '14151', '0'), +('15', '28', '13', '6692', '13290', '0'), +('15', '28', '13', '11610', '12687', '0'), +('15', '28', '13', '6691', '11768', '0'), +('15', '28', '14', '7257', '14151', '0'), +('15', '28', '14', '6692', '13290', '0'), +('15', '28', '14', '11551', '12679', '0'), +('15', '28', '14', '6691', '11768', '0'), +('15', '28', '11', '14762', '3181', '0'), +('15', '28', '11', '9246', '2295', '0'), +('15', '28', '11', '20677', '1800', '0'), +('15', '28', '11', '13353', '1500', '0'), +('15', '29', '22', '10323', '0', '0'), +('15', '29', '22', '10664', '0', '0'), +('15', '29', '22', '9246', '0', '0'), +('15', '29', '22', '21509', '0', '0'), +('15', '29', '1', '14701', '5052', '0'), +('15', '29', '1', '14702', '4250', '0'), +('15', '29', '1', '30361', '1890', '0'), +('15', '29', '1', '10165', '1683', '0'), +('15', '29', '2', '1519', '3207', '0'), +('15', '29', '2', '10142', '3012', '0'), +('15', '29', '2', '2191', '2927', '0'), +('15', '29', '2', '4341', '2712', '0'), +('15', '29', '3', '11052', '2627', '0'), +('15', '29', '3', '4505', '1981', '0'), +('15', '29', '3', '14695', '1649', '0'), +('15', '29', '3', '10144', '1304', '0'), +('15', '29', '5', '14703', '8250', '0'), +('15', '29', '5', '14700', '4953', '0'), +('15', '29', '5', '10055', '4505', '0'), +('15', '29', '5', '68291', '3889', '0'), +('15', '29', '8', '11621', '14220', '0'), +('15', '29', '8', '1546', '12121', '0'), +('15', '29', '8', '11603', '7586', '0'), +('15', '29', '8', '1409', '6312', '0'), +('15', '29', '6', '1557', '6760', '0'), +('15', '29', '6', '2286', '2665', '0'), +('15', '29', '6', '25062', '1833', '0'), +('15', '29', '6', '2331', '1280', '0'), +('15', '29', '17', '2285', '7162', '0'), +('15', '29', '17', '4342', '5074', '0'), +('15', '29', '17', '3305', '2867', '0'), +('15', '29', '17', '2405', '2721', '0'), +('15', '29', '7', '4343', '2966', '0'), +('15', '29', '7', '2458', '2406', '0'), +('15', '29', '7', '2289', '2256', '0'), +('15', '29', '7', '2342', '1939', '0'), +('15', '29', '9', '10149', '2780', '0'), +('15', '29', '9', '14650', '2552', '0'), +('15', '29', '9', '12189', '2263', '0'), +('15', '29', '9', '4344', '2211', '0'), +('15', '29', '15', '10366', '8005', '0'), +('15', '29', '15', '10151', '7200', '0'), +('15', '29', '15', '14679', '6255', '0'), +('15', '29', '15', '14678', '5104', '0'), +('15', '29', '20', '11601', '8737', '0'), +('15', '29', '20', '2742', '5698', '0'), +('15', '29', '20', '1543', '4682', '0'), +('15', '29', '20', '1365', '4200', '0'), +('15', '29', '12', '20655', '6424', '0'), +('15', '29', '12', '2923', '4654', '0'), +('15', '29', '12', '11624', '3177', '0'), +('15', '29', '12', '4345', '2988', '0'), +('15', '29', '18', '2461', '3258', '0'), +('15', '29', '18', '4410', '2557', '0'), +('15', '29', '18', '4346', '2331', '0'), +('15', '29', '18', '2292', '2161', '0'), +('15', '29', '19', '2293', '5879', '0'), +('15', '29', '19', '68239', '4526', '0'), +('15', '29', '19', '4407', '2361', '0'), +('15', '29', '19', '2337', '1757', '0'), +('15', '29', '13', '7257', '14151', '0'), +('15', '29', '13', '6692', '13290', '0'), +('15', '29', '13', '11610', '12687', '0'), +('15', '29', '13', '6691', '11768', '0'), +('15', '29', '14', '7257', '14151', '0'), +('15', '29', '14', '6692', '13290', '0'), +('15', '29', '14', '11551', '12679', '0'), +('15', '29', '14', '6691', '11768', '0'), +('15', '29', '11', '14762', '3181', '0'), +('15', '29', '11', '9246', '2356', '0'), +('15', '29', '11', '20677', '1800', '0'), +('15', '29', '11', '13353', '1500', '0'), +('15', '30', '22', '10323', '0', '0'), +('15', '30', '22', '10664', '0', '0'), +('15', '30', '22', '9246', '0', '0'), +('15', '30', '22', '21509', '0', '0'), +('15', '30', '1', '14701', '5052', '0'), +('15', '30', '1', '14702', '4250', '0'), +('15', '30', '1', '30361', '1890', '0'), +('15', '30', '1', '10165', '1683', '0'), +('15', '30', '2', '1519', '3207', '0'), +('15', '30', '2', '10142', '3012', '0'), +('15', '30', '2', '2191', '2963', '0'), +('15', '30', '2', '4341', '2712', '0'), +('15', '30', '3', '11052', '2718', '0'), +('15', '30', '3', '4505', '2023', '0'), +('15', '30', '3', '14695', '1691', '0'), +('15', '30', '3', '2295', '1315', '0'), +('15', '30', '5', '14703', '8250', '0'), +('15', '30', '5', '14700', '4953', '0'), +('15', '30', '5', '10055', '4505', '0'), +('15', '30', '5', '68291', '3913', '0'), +('15', '30', '8', '11621', '14220', '0'), +('15', '30', '8', '1546', '12181', '0'), +('15', '30', '8', '11603', '7641', '0'), +('15', '30', '8', '1409', '6312', '0'), +('15', '30', '6', '1557', '6760', '0'), +('15', '30', '6', '2286', '2686', '0'), +('15', '30', '6', '25062', '1833', '0'), +('15', '30', '6', '2331', '1299', '0'), +('15', '30', '17', '2285', '7186', '0'), +('15', '30', '17', '4342', '5134', '0'), +('15', '30', '17', '3305', '2867', '0'), +('15', '30', '17', '2405', '2764', '0'), +('15', '30', '7', '4343', '3008', '0'), +('15', '30', '7', '2458', '2406', '0'), +('15', '30', '7', '2289', '2280', '0'), +('15', '30', '7', '2342', '1952', '0'), +('15', '30', '9', '10149', '2799', '0'), +('15', '30', '9', '14650', '2552', '0'), +('15', '30', '9', '12189', '2263', '0'), +('15', '30', '9', '4344', '2211', '0'), +('15', '30', '15', '10366', '8005', '0'), +('15', '30', '15', '10151', '7200', '0'), +('15', '30', '15', '14679', '6255', '0'), +('15', '30', '15', '14678', '5104', '0'), +('15', '30', '20', '11601', '8779', '0'), +('15', '30', '20', '2742', '5740', '0'), +('15', '30', '20', '1543', '4742', '0'), +('15', '30', '20', '1365', '4200', '0'), +('15', '30', '12', '20655', '6444', '0'), +('15', '30', '12', '2923', '4654', '0'), +('15', '30', '12', '11624', '3207', '0'), +('15', '30', '12', '4345', '3018', '0'), +('15', '30', '18', '2461', '3282', '0'), +('15', '30', '18', '4410', '2557', '0'), +('15', '30', '18', '4346', '2331', '0'), +('15', '30', '18', '2292', '2186', '0'), +('15', '30', '19', '2293', '5897', '0'), +('15', '30', '19', '68239', '4544', '0'), +('15', '30', '19', '4407', '2416', '0'), +('15', '30', '19', '2337', '1757', '0'), +('15', '30', '13', '7257', '14151', '0'), +('15', '30', '13', '6692', '13290', '0'), +('15', '30', '13', '11610', '12687', '0'), +('15', '30', '13', '6691', '11768', '0'), +('15', '30', '14', '7257', '14151', '0'), +('15', '30', '14', '6692', '13290', '0'), +('15', '30', '14', '11551', '12679', '0'), +('15', '30', '14', '6691', '11768', '0'), +('15', '30', '11', '14762', '3181', '0'), +('15', '30', '11', '9246', '2416', '0'), +('15', '30', '11', '20677', '1800', '0'), +('15', '30', '11', '13353', '1500', '0'), +('15', '31', '22', '10323', '0', '0'), +('15', '31', '22', '10664', '0', '0'), +('15', '31', '22', '9246', '0', '0'), +('15', '31', '22', '21509', '0', '0'), +('15', '31', '1', '14701', '5052', '0'), +('15', '31', '1', '14702', '4250', '0'), +('15', '31', '1', '30361', '1890', '0'), +('15', '31', '1', '10165', '1683', '0'), +('15', '31', '2', '1519', '3207', '0'), +('15', '31', '2', '10142', '3012', '0'), +('15', '31', '2', '2191', '2999', '0'), +('15', '31', '2', '4341', '2712', '0'), +('15', '31', '3', '11052', '2809', '0'), +('15', '31', '3', '4505', '2066', '0'), +('15', '31', '3', '14695', '1733', '0'), +('15', '31', '3', '2295', '1327', '0'), +('15', '31', '5', '14703', '8250', '0'), +('15', '31', '5', '14700', '4953', '0'), +('15', '31', '5', '10055', '4505', '0'), +('15', '31', '5', '68291', '3937', '0'), +('15', '31', '8', '11621', '14220', '0'), +('15', '31', '8', '1546', '12241', '0'), +('15', '31', '8', '11603', '7695', '0'), +('15', '31', '8', '1409', '6312', '0'), +('15', '31', '6', '1557', '6760', '0'), +('15', '31', '6', '2286', '2707', '0'), +('15', '31', '6', '25062', '1833', '0'), +('15', '31', '6', '2331', '1317', '0'), +('15', '31', '17', '2285', '7210', '0'), +('15', '31', '17', '4342', '5194', '0'), +('15', '31', '17', '3305', '2867', '0'), +('15', '31', '17', '2405', '2807', '0'), +('15', '31', '7', '4343', '3050', '0'), +('15', '31', '7', '2458', '2406', '0'), +('15', '31', '7', '2289', '2304', '0'), +('15', '31', '7', '2342', '1965', '0'), +('15', '31', '9', '10149', '2817', '0'), +('15', '31', '9', '14650', '2552', '0'), +('15', '31', '9', '12189', '2263', '0'), +('15', '31', '9', '4344', '2211', '0'), +('15', '31', '15', '10366', '8005', '0'), +('15', '31', '15', '10151', '7200', '0'), +('15', '31', '15', '14679', '6255', '0'), +('15', '31', '15', '14678', '5104', '0'), +('15', '31', '20', '11601', '8821', '0'), +('15', '31', '20', '2742', '5783', '0'), +('15', '31', '20', '1543', '4803', '0'), +('15', '31', '20', '1365', '4200', '0'), +('15', '31', '12', '20655', '6465', '0'), +('15', '31', '12', '2923', '4654', '0'), +('15', '31', '12', '11624', '3236', '0'), +('15', '31', '12', '4345', '3048', '0'), +('15', '31', '18', '2461', '3306', '0'), +('15', '31', '18', '4410', '2557', '0'), +('15', '31', '18', '4346', '2331', '0'), +('15', '31', '18', '2292', '2210', '0'), +('15', '31', '19', '2293', '5915', '0'), +('15', '31', '19', '68239', '4562', '0'), +('15', '31', '19', '4407', '2470', '0'), +('15', '31', '19', '2337', '1757', '0'), +('15', '31', '13', '7257', '14151', '0'), +('15', '31', '13', '6692', '13290', '0'), +('15', '31', '13', '11610', '12687', '0'), +('15', '31', '13', '6691', '11768', '0'), +('15', '31', '14', '7257', '14151', '0'), +('15', '31', '14', '6692', '13290', '0'), +('15', '31', '14', '11551', '12679', '0'), +('15', '31', '14', '6691', '11768', '0'), +('15', '31', '11', '14762', '3181', '0'), +('15', '31', '11', '9246', '2476', '0'), +('15', '31', '11', '20677', '1800', '0'), +('15', '31', '11', '13353', '1500', '0'), +('15', '32', '22', '10323', '0', '0'), +('15', '32', '22', '10664', '0', '0'), +('15', '32', '22', '9246', '0', '0'), +('15', '32', '22', '21509', '0', '0'), +('15', '32', '1', '14701', '5052', '0'), +('15', '32', '1', '14702', '4250', '0'), +('15', '32', '1', '30361', '1890', '0'), +('15', '32', '1', '10165', '1683', '0'), +('15', '32', '2', '1519', '3207', '0'), +('15', '32', '2', '2191', '3036', '0'), +('15', '32', '2', '10142', '3012', '0'), +('15', '32', '2', '4341', '2712', '0'), +('15', '32', '3', '11052', '2899', '0'), +('15', '32', '3', '4505', '2108', '0'), +('15', '32', '3', '14695', '1776', '0'), +('15', '32', '3', '2295', '1340', '0'), +('15', '32', '5', '14703', '8250', '0'), +('15', '32', '5', '14700', '4953', '0'), +('15', '32', '5', '10055', '4505', '0'), +('15', '32', '5', '68291', '3961', '0'), +('15', '32', '8', '11621', '14220', '0'), +('15', '32', '8', '1546', '12302', '0'), +('15', '32', '8', '11603', '7750', '0'), +('15', '32', '8', '1409', '6312', '0'), +('15', '32', '6', '1557', '6760', '0'), +('15', '32', '6', '2286', '2728', '0'), +('15', '32', '6', '25062', '1833', '0'), +('15', '32', '6', '2331', '1335', '0'), +('15', '32', '17', '2285', '7234', '0'), +('15', '32', '17', '4342', '5255', '0'), +('15', '32', '17', '3305', '2867', '0'), +('15', '32', '17', '2405', '2850', '0'), +('15', '32', '7', '4343', '3092', '0'), +('15', '32', '7', '2458', '2406', '0'), +('15', '32', '7', '2289', '2328', '0'), +('15', '32', '7', '2342', '1977', '0'), +('15', '32', '9', '10149', '2835', '0'), +('15', '32', '9', '14650', '2552', '0'), +('15', '32', '9', '12189', '2263', '0'), +('15', '32', '9', '4344', '2211', '0'), +('15', '32', '15', '10366', '8005', '0'), +('15', '32', '15', '10151', '7200', '0'), +('15', '32', '15', '14679', '6255', '0'), +('15', '32', '15', '14678', '5104', '0'), +('15', '32', '20', '11601', '8864', '0'), +('15', '32', '20', '2742', '5825', '0'), +('15', '32', '20', '1543', '4863', '0'), +('15', '32', '20', '1365', '4200', '0'), +('15', '32', '12', '20655', '6485', '0'), +('15', '32', '12', '2923', '4654', '0'), +('15', '32', '12', '11624', '3266', '0'), +('15', '32', '12', '4345', '3078', '0'), +('15', '32', '18', '2461', '3330', '0'), +('15', '32', '18', '4410', '2557', '0'), +('15', '32', '18', '4346', '2331', '0'), +('15', '32', '18', '2292', '2234', '0'), +('15', '32', '19', '2293', '5933', '0'), +('15', '32', '19', '68239', '4580', '0'), +('15', '32', '19', '4407', '2525', '0'), +('15', '32', '19', '2337', '1757', '0'), +('15', '32', '13', '7257', '14151', '0'), +('15', '32', '13', '6692', '13290', '0'), +('15', '32', '13', '11610', '12687', '0'), +('15', '32', '13', '6691', '11768', '0'), +('15', '32', '14', '7257', '14151', '0'), +('15', '32', '14', '6692', '13290', '0'), +('15', '32', '14', '11551', '12679', '0'), +('15', '32', '14', '6691', '11768', '0'), +('15', '32', '11', '14762', '3181', '0'), +('15', '32', '11', '9246', '2537', '0'), +('15', '32', '11', '20677', '1800', '0'), +('15', '32', '11', '13353', '1500', '0'), +('15', '33', '22', '10323', '0', '0'), +('15', '33', '22', '10664', '0', '0'), +('15', '33', '22', '9246', '0', '0'), +('15', '33', '22', '21509', '0', '0'), +('15', '33', '1', '14701', '5052', '0'), +('15', '33', '1', '14702', '4250', '0'), +('15', '33', '1', '30361', '1890', '0'), +('15', '33', '1', '10165', '1683', '0'), +('15', '33', '2', '1519', '3207', '0'), +('15', '33', '2', '2191', '3072', '0'), +('15', '33', '2', '10142', '3012', '0'), +('15', '33', '2', '4341', '2712', '0'), +('15', '33', '3', '11052', '2990', '0'), +('15', '33', '3', '4505', '2150', '0'), +('15', '33', '3', '14695', '1818', '0'), +('15', '33', '3', '2295', '1352', '0'), +('15', '33', '5', '14703', '8250', '0'), +('15', '33', '5', '14700', '4953', '0'), +('15', '33', '5', '10055', '4505', '0'), +('15', '33', '5', '68291', '3986', '0'), +('15', '33', '8', '11621', '14220', '0'), +('15', '33', '8', '1546', '12362', '0'), +('15', '33', '8', '11603', '7804', '0'), +('15', '33', '8', '1409', '6312', '0'), +('15', '33', '6', '1557', '6760', '0'), +('15', '33', '6', '2286', '2749', '0'), +('15', '33', '6', '25062', '1833', '0'), +('15', '33', '6', '2331', '1353', '0'), +('15', '33', '17', '2285', '7258', '0'), +('15', '33', '17', '4342', '5315', '0'), +('15', '33', '17', '2405', '2893', '0'), +('15', '33', '17', '3305', '2867', '0'), +('15', '33', '7', '4343', '3135', '0'), +('15', '33', '7', '2458', '2406', '0'), +('15', '33', '7', '2289', '2352', '0'), +('15', '33', '7', '2342', '1990', '0'), +('15', '33', '9', '10149', '2853', '0'), +('15', '33', '9', '14650', '2552', '0'), +('15', '33', '9', '12189', '2263', '0'), +('15', '33', '9', '4344', '2211', '0'), +('15', '33', '15', '10366', '8005', '0'), +('15', '33', '15', '10151', '7200', '0'), +('15', '33', '15', '14679', '6255', '0'), +('15', '33', '15', '14678', '5104', '0'), +('15', '33', '20', '11601', '8906', '0'), +('15', '33', '20', '2742', '5867', '0'), +('15', '33', '20', '1543', '4924', '0'), +('15', '33', '20', '1365', '4200', '0'), +('15', '33', '12', '20655', '6506', '0'), +('15', '33', '12', '2923', '4654', '0'), +('15', '33', '12', '11624', '3296', '0'), +('15', '33', '12', '4345', '3109', '0'), +('15', '33', '18', '2461', '3354', '0'), +('15', '33', '18', '4410', '2557', '0'), +('15', '33', '18', '4346', '2331', '0'), +('15', '33', '18', '2292', '2258', '0'), +('15', '33', '19', '2293', '5951', '0'), +('15', '33', '19', '68239', '4598', '0'), +('15', '33', '19', '4407', '2579', '0'), +('15', '33', '19', '2337', '1757', '0'), +('15', '33', '13', '7257', '14151', '0'), +('15', '33', '13', '6692', '13290', '0'), +('15', '33', '13', '11610', '12687', '0'), +('15', '33', '13', '6691', '11768', '0'), +('15', '33', '14', '7257', '14151', '0'), +('15', '33', '14', '6692', '13290', '0'), +('15', '33', '14', '11551', '12679', '0'), +('15', '33', '14', '6691', '11768', '0'), +('15', '33', '11', '14762', '3181', '0'), +('15', '33', '11', '9246', '2597', '0'), +('15', '33', '11', '20677', '1800', '0'), +('15', '33', '11', '13353', '1500', '0'), +('15', '34', '22', '10323', '0', '0'), +('15', '34', '22', '10664', '0', '0'), +('15', '34', '22', '9246', '0', '0'), +('15', '34', '22', '21509', '0', '0'), +('15', '34', '1', '14701', '5052', '0'), +('15', '34', '1', '14702', '4250', '0'), +('15', '34', '1', '30361', '1890', '0'), +('15', '34', '1', '10165', '1683', '0'), +('15', '34', '2', '1519', '3207', '0'), +('15', '34', '2', '2191', '3108', '0'), +('15', '34', '2', '10142', '3012', '0'), +('15', '34', '2', '4341', '2712', '0'), +('15', '34', '3', '11052', '3080', '0'), +('15', '34', '3', '4505', '2193', '0'), +('15', '34', '3', '14695', '1860', '0'), +('15', '34', '3', '2295', '1364', '0'), +('15', '34', '5', '14703', '8250', '0'), +('15', '34', '5', '14700', '4953', '0'), +('15', '34', '5', '10055', '4505', '0'), +('15', '34', '5', '68291', '4010', '0'), +('15', '34', '8', '11621', '14220', '0'), +('15', '34', '8', '1546', '12423', '0'), +('15', '34', '8', '11603', '7858', '0'), +('15', '34', '8', '1409', '6312', '0'), +('15', '34', '6', '1557', '6760', '0'), +('15', '34', '6', '2286', '2767', '0'), +('15', '34', '6', '25062', '1833', '0'), +('15', '34', '6', '2331', '1371', '0'), +('15', '34', '17', '2285', '7282', '0'), +('15', '34', '17', '4342', '5376', '0'), +('15', '34', '17', '2405', '2934', '0'), +('15', '34', '17', '3305', '2867', '0'), +('15', '34', '7', '4343', '3171', '0'), +('15', '34', '7', '2458', '2406', '0'), +('15', '34', '7', '2289', '2376', '0'), +('15', '34', '7', '2342', '2001', '0'), +('15', '34', '9', '10149', '2871', '0'), +('15', '34', '9', '14650', '2552', '0'), +('15', '34', '9', '12189', '2263', '0'), +('15', '34', '9', '4344', '2211', '0'), +('15', '34', '15', '10366', '8005', '0'), +('15', '34', '15', '10151', '7200', '0'), +('15', '34', '15', '14679', '6255', '0'), +('15', '34', '15', '14678', '5104', '0'), +('15', '34', '20', '11601', '8942', '0'), +('15', '34', '20', '2742', '5904', '0'), +('15', '34', '20', '1543', '4984', '0'), +('15', '34', '20', '1365', '4200', '0'), +('15', '34', '12', '20655', '6525', '0'), +('15', '34', '12', '2923', '4654', '0'), +('15', '34', '12', '11624', '3321', '0'), +('15', '34', '12', '4345', '3139', '0'), +('15', '34', '18', '2461', '3378', '0'), +('15', '34', '18', '4410', '2557', '0'), +('15', '34', '18', '4346', '2331', '0'), +('15', '34', '18', '2292', '2282', '0'), +('15', '34', '19', '2293', '5969', '0'), +('15', '34', '19', '68239', '4616', '0'), +('15', '34', '19', '4407', '2633', '0'), +('15', '34', '19', '2337', '1757', '0'), +('15', '34', '13', '7257', '14151', '0'), +('15', '34', '13', '6692', '13290', '0'), +('15', '34', '13', '11610', '12687', '0'), +('15', '34', '13', '6691', '11768', '0'), +('15', '34', '14', '7257', '14151', '0'), +('15', '34', '14', '6692', '13290', '0'), +('15', '34', '14', '11551', '12679', '0'), +('15', '34', '14', '6691', '11768', '0'), +('15', '34', '11', '14762', '3181', '0'), +('15', '34', '11', '9246', '2658', '0'), +('15', '34', '11', '20677', '1800', '0'), +('15', '34', '11', '13353', '1500', '0'), +('15', '35', '22', '10323', '0', '0'), +('15', '35', '22', '10664', '0', '0'), +('15', '35', '22', '9246', '0', '0'), +('15', '35', '22', '21509', '0', '0'), +('15', '35', '1', '14701', '5052', '0'), +('15', '35', '1', '14702', '4250', '0'), +('15', '35', '1', '30361', '1890', '0'), +('15', '35', '1', '10165', '1683', '0'), +('15', '35', '2', '1519', '3207', '0'), +('15', '35', '2', '2191', '3144', '0'), +('15', '35', '2', '10142', '3012', '0'), +('15', '35', '2', '4341', '2712', '0'), +('15', '35', '3', '11052', '3171', '0'), +('15', '35', '3', '4505', '2235', '0'), +('15', '35', '3', '14695', '1903', '0'), +('15', '35', '3', '2295', '1376', '0'), +('15', '35', '5', '14703', '8250', '0'), +('15', '35', '5', '14700', '4953', '0'), +('15', '35', '5', '10055', '4505', '0'), +('15', '35', '5', '68291', '4034', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '35', '8', '11621', '14220', '0'), +('15', '35', '8', '1546', '12483', '0'), +('15', '35', '8', '11603', '7913', '0'), +('15', '35', '8', '1409', '6312', '0'), +('15', '35', '6', '1557', '6760', '0'), +('15', '35', '6', '2286', '2789', '0'), +('15', '35', '6', '25062', '1833', '0'), +('15', '35', '6', '2331', '1389', '0'), +('15', '35', '17', '2285', '7307', '0'), +('15', '35', '17', '4342', '5436', '0'), +('15', '35', '17', '2405', '2977', '0'), +('15', '35', '17', '3305', '2867', '0'), +('15', '35', '7', '4343', '3213', '0'), +('15', '35', '7', '2458', '2406', '0'), +('15', '35', '7', '2289', '2401', '0'), +('15', '35', '7', '2342', '2014', '0'), +('15', '35', '9', '10149', '2889', '0'), +('15', '35', '9', '14650', '2552', '0'), +('15', '35', '9', '12189', '2263', '0'), +('15', '35', '9', '2290', '2214', '0'), +('15', '35', '15', '10366', '8005', '0'), +('15', '35', '15', '10151', '7200', '0'), +('15', '35', '15', '14679', '6255', '0'), +('15', '35', '15', '14678', '5104', '0'), +('15', '35', '20', '11601', '8984', '0'), +('15', '35', '20', '2742', '5946', '0'), +('15', '35', '20', '1543', '5044', '0'), +('15', '35', '20', '1365', '4200', '0'), +('15', '35', '12', '20655', '6546', '0'), +('15', '35', '12', '2923', '4654', '0'), +('15', '35', '12', '11624', '3351', '0'), +('15', '35', '12', '4345', '3169', '0'), +('15', '35', '18', '2461', '3403', '0'), +('15', '35', '18', '4410', '2557', '0'), +('15', '35', '18', '4346', '2331', '0'), +('15', '35', '18', '2292', '2306', '0'), +('15', '35', '19', '2293', '5988', '0'), +('15', '35', '19', '68239', '4634', '0'), +('15', '35', '19', '4407', '2688', '0'), +('15', '35', '19', '2337', '1757', '0'), +('15', '35', '13', '7257', '14151', '0'), +('15', '35', '13', '6692', '13290', '0'), +('15', '35', '13', '11610', '12687', '0'), +('15', '35', '13', '6691', '11768', '0'), +('15', '35', '14', '7257', '14151', '0'), +('15', '35', '14', '6692', '13290', '0'), +('15', '35', '14', '11551', '12679', '0'), +('15', '35', '14', '6691', '11768', '0'), +('15', '35', '11', '14762', '3181', '0'), +('15', '35', '11', '9246', '2718', '0'), +('15', '35', '11', '20677', '1800', '0'), +('15', '35', '11', '13353', '1500', '0'), +('15', '36', '22', '10323', '0', '0'), +('15', '36', '22', '10664', '0', '0'), +('15', '36', '22', '9246', '0', '0'), +('15', '36', '22', '21509', '0', '0'), +('15', '36', '1', '14701', '5052', '0'), +('15', '36', '1', '14702', '4250', '0'), +('15', '36', '1', '30361', '1890', '0'), +('15', '36', '1', '10165', '1683', '0'), +('15', '36', '2', '1519', '3207', '0'), +('15', '36', '2', '2191', '3181', '0'), +('15', '36', '2', '10142', '3012', '0'), +('15', '36', '2', '4341', '2712', '0'), +('15', '36', '3', '11052', '3262', '0'), +('15', '36', '3', '4505', '2277', '0'), +('15', '36', '3', '14695', '1945', '0'), +('15', '36', '3', '2295', '1388', '0'), +('15', '36', '5', '14703', '8250', '0'), +('15', '36', '5', '14700', '4953', '0'), +('15', '36', '5', '10055', '4505', '0'), +('15', '36', '5', '68291', '4058', '0'), +('15', '36', '8', '11621', '14220', '0'), +('15', '36', '8', '1546', '12543', '0'), +('15', '36', '8', '11603', '7967', '0'), +('15', '36', '8', '1409', '6312', '0'), +('15', '36', '6', '1557', '6760', '0'), +('15', '36', '6', '2286', '2810', '0'), +('15', '36', '6', '25062', '1833', '0'), +('15', '36', '6', '2331', '1407', '0'), +('15', '36', '17', '2285', '7331', '0'), +('15', '36', '17', '4342', '5496', '0'), +('15', '36', '17', '2405', '3019', '0'), +('15', '36', '17', '3305', '2867', '0'), +('15', '36', '7', '4343', '3256', '0'), +('15', '36', '7', '2289', '2425', '0'), +('15', '36', '7', '2458', '2406', '0'), +('15', '36', '7', '2342', '2026', '0'), +('15', '36', '9', '10149', '2907', '0'), +('15', '36', '9', '14650', '2552', '0'), +('15', '36', '9', '12189', '2263', '0'), +('15', '36', '9', '2290', '2253', '0'), +('15', '36', '15', '10366', '8005', '0'), +('15', '36', '15', '10151', '7200', '0'), +('15', '36', '15', '14679', '6255', '0'), +('15', '36', '15', '14678', '5104', '0'), +('15', '36', '20', '11601', '9027', '0'), +('15', '36', '20', '2742', '5988', '0'), +('15', '36', '20', '1543', '5105', '0'), +('15', '36', '20', '1365', '4200', '0'), +('15', '36', '12', '20655', '6566', '0'), +('15', '36', '12', '2923', '4654', '0'), +('15', '36', '12', '11624', '3380', '0'), +('15', '36', '12', '4345', '3199', '0'), +('15', '36', '18', '2461', '3427', '0'), +('15', '36', '18', '4410', '2557', '0'), +('15', '36', '18', '4346', '2331', '0'), +('15', '36', '18', '2292', '2331', '0'), +('15', '36', '19', '2293', '6006', '0'), +('15', '36', '19', '68239', '4653', '0'), +('15', '36', '19', '4407', '2742', '0'), +('15', '36', '19', '2337', '1757', '0'), +('15', '36', '13', '7257', '14151', '0'), +('15', '36', '13', '6692', '13290', '0'), +('15', '36', '13', '11610', '12687', '0'), +('15', '36', '13', '6691', '11768', '0'), +('15', '36', '14', '7257', '14151', '0'), +('15', '36', '14', '6692', '13290', '0'), +('15', '36', '14', '11551', '12679', '0'), +('15', '36', '14', '6691', '11768', '0'), +('15', '36', '11', '14762', '3181', '0'), +('15', '36', '11', '9246', '2778', '0'), +('15', '36', '11', '20677', '1800', '0'), +('15', '36', '11', '13353', '1500', '0'), +('15', '37', '22', '10323', '0', '0'), +('15', '37', '22', '10664', '0', '0'), +('15', '37', '22', '9246', '0', '0'), +('15', '37', '22', '21509', '0', '0'), +('15', '37', '1', '14701', '5052', '0'), +('15', '37', '1', '14702', '4250', '0'), +('15', '37', '1', '30361', '1890', '0'), +('15', '37', '1', '10165', '1683', '0'), +('15', '37', '2', '2191', '3217', '0'), +('15', '37', '2', '1519', '3207', '0'), +('15', '37', '2', '10142', '3012', '0'), +('15', '37', '2', '4341', '2712', '0'), +('15', '37', '3', '11052', '3352', '0'), +('15', '37', '3', '4505', '2319', '0'), +('15', '37', '3', '14695', '1987', '0'), +('15', '37', '3', '2295', '1400', '0'), +('15', '37', '5', '14703', '8250', '0'), +('15', '37', '5', '14700', '4953', '0'), +('15', '37', '5', '10055', '4505', '0'), +('15', '37', '5', '68291', '4082', '0'), +('15', '37', '8', '11621', '14220', '0'), +('15', '37', '8', '1546', '12604', '0'), +('15', '37', '8', '11603', '8021', '0'), +('15', '37', '8', '1409', '6312', '0'), +('15', '37', '6', '1557', '6760', '0'), +('15', '37', '6', '2286', '2831', '0'), +('15', '37', '6', '25062', '1833', '0'), +('15', '37', '6', '2331', '1425', '0'), +('15', '37', '17', '2285', '7355', '0'), +('15', '37', '17', '4342', '5557', '0'), +('15', '37', '17', '2405', '3062', '0'), +('15', '37', '17', '3305', '2867', '0'), +('15', '37', '7', '4343', '3298', '0'), +('15', '37', '7', '2289', '2449', '0'), +('15', '37', '7', '2458', '2406', '0'), +('15', '37', '7', '2342', '2039', '0'), +('15', '37', '9', '10149', '2925', '0'), +('15', '37', '9', '14650', '2552', '0'), +('15', '37', '9', '2290', '2292', '0'), +('15', '37', '9', '12189', '2263', '0'), +('15', '37', '15', '10366', '8005', '0'), +('15', '37', '15', '10151', '7200', '0'), +('15', '37', '15', '14679', '6255', '0'), +('15', '37', '15', '14678', '5104', '0'), +('15', '37', '20', '11601', '9069', '0'), +('15', '37', '20', '2742', '6030', '0'), +('15', '37', '20', '1543', '5165', '0'), +('15', '37', '20', '1365', '4200', '0'), +('15', '37', '12', '20655', '6587', '0'), +('15', '37', '12', '2923', '4654', '0'), +('15', '37', '12', '11624', '3410', '0'), +('15', '37', '12', '4345', '3229', '0'), +('15', '37', '18', '2461', '3451', '0'), +('15', '37', '18', '4410', '2557', '0'), +('15', '37', '18', '2292', '2355', '0'), +('15', '37', '18', '4346', '2331', '0'), +('15', '37', '19', '2293', '6024', '0'), +('15', '37', '19', '68239', '4671', '0'), +('15', '37', '19', '4407', '2796', '0'), +('15', '37', '19', '2337', '1757', '0'), +('15', '37', '13', '7257', '14151', '0'), +('15', '37', '13', '6692', '13290', '0'), +('15', '37', '13', '11610', '12687', '0'), +('15', '37', '13', '6691', '11768', '0'), +('15', '37', '14', '7257', '14151', '0'), +('15', '37', '14', '6692', '13290', '0'), +('15', '37', '14', '11551', '12679', '0'), +('15', '37', '14', '6691', '11768', '0'), +('15', '37', '11', '14762', '3181', '0'), +('15', '37', '11', '9246', '2839', '0'), +('15', '37', '11', '20677', '1800', '0'), +('15', '37', '11', '13353', '1500', '0'), +('15', '38', '22', '10323', '0', '0'), +('15', '38', '22', '10664', '0', '0'), +('15', '38', '22', '9246', '0', '0'), +('15', '38', '22', '21509', '0', '0'), +('15', '38', '1', '14701', '5052', '0'), +('15', '38', '1', '14702', '4250', '0'), +('15', '38', '1', '30361', '1890', '0'), +('15', '38', '1', '10165', '1683', '0'), +('15', '38', '2', '2191', '3253', '0'), +('15', '38', '2', '1519', '3207', '0'), +('15', '38', '2', '10142', '3012', '0'), +('15', '38', '2', '4341', '2712', '0'), +('15', '38', '3', '11052', '3443', '0'), +('15', '38', '3', '4505', '2362', '0'), +('15', '38', '3', '14695', '2029', '0'), +('15', '38', '3', '2295', '1412', '0'), +('15', '38', '5', '14703', '8250', '0'), +('15', '38', '5', '14700', '4953', '0'), +('15', '38', '5', '10055', '4505', '0'), +('15', '38', '5', '68291', '4106', '0'), +('15', '38', '8', '11621', '14220', '0'), +('15', '38', '8', '1546', '12664', '0'), +('15', '38', '8', '11603', '8076', '0'), +('15', '38', '8', '1409', '6312', '0'), +('15', '38', '6', '1557', '6760', '0'), +('15', '38', '6', '2286', '2852', '0'), +('15', '38', '6', '25062', '1833', '0'), +('15', '38', '6', '2331', '1444', '0'), +('15', '38', '17', '2285', '7379', '0'), +('15', '38', '17', '4342', '5617', '0'), +('15', '38', '17', '2405', '3105', '0'), +('15', '38', '17', '3305', '2867', '0'), +('15', '38', '7', '4343', '3340', '0'), +('15', '38', '7', '2289', '2473', '0'), +('15', '38', '7', '2458', '2406', '0'), +('15', '38', '7', '2342', '2052', '0'), +('15', '38', '9', '10149', '2944', '0'), +('15', '38', '9', '14650', '2552', '0'), +('15', '38', '9', '2290', '2330', '0'), +('15', '38', '9', '12189', '2263', '0'), +('15', '38', '15', '10366', '8005', '0'), +('15', '38', '15', '10151', '7200', '0'), +('15', '38', '15', '14679', '6255', '0'), +('15', '38', '15', '14678', '5104', '0'), +('15', '38', '20', '11601', '9111', '0'), +('15', '38', '20', '2742', '6073', '0'), +('15', '38', '20', '1543', '5226', '0'), +('15', '38', '20', '1365', '4200', '0'), +('15', '38', '12', '20655', '6608', '0'), +('15', '38', '12', '2923', '4654', '0'), +('15', '38', '12', '11624', '3439', '0'), +('15', '38', '12', '4345', '3260', '0'), +('15', '38', '18', '2461', '3475', '0'), +('15', '38', '18', '4410', '2557', '0'), +('15', '38', '18', '2292', '2379', '0'), +('15', '38', '18', '4346', '2331', '0'), +('15', '38', '19', '2293', '6042', '0'), +('15', '38', '19', '68239', '4689', '0'), +('15', '38', '19', '4407', '2851', '0'), +('15', '38', '19', '2337', '1757', '0'), +('15', '38', '13', '7257', '14151', '0'), +('15', '38', '13', '6692', '13290', '0'), +('15', '38', '13', '11610', '12687', '0'), +('15', '38', '13', '6691', '11768', '0'), +('15', '38', '14', '7257', '14151', '0'), +('15', '38', '14', '6692', '13290', '0'), +('15', '38', '14', '11551', '12679', '0'), +('15', '38', '14', '6691', '11768', '0'), +('15', '38', '11', '14762', '3181', '0'), +('15', '38', '11', '9246', '2899', '0'), +('15', '38', '11', '20677', '1800', '0'), +('15', '38', '11', '13353', '1500', '0'), +('15', '39', '22', '10323', '0', '0'), +('15', '39', '22', '10664', '0', '0'), +('15', '39', '22', '9246', '0', '0'), +('15', '39', '22', '21509', '0', '0'), +('15', '39', '1', '14701', '5052', '0'), +('15', '39', '1', '14702', '4250', '0'), +('15', '39', '1', '30361', '1890', '0'), +('15', '39', '1', '10165', '1683', '0'), +('15', '39', '2', '2191', '3289', '0'), +('15', '39', '2', '1519', '3207', '0'), +('15', '39', '2', '10142', '3012', '0'), +('15', '39', '2', '4341', '2712', '0'), +('15', '39', '3', '11052', '3533', '0'), +('15', '39', '3', '4505', '2404', '0'), +('15', '39', '3', '14695', '2072', '0'), +('15', '39', '3', '2295', '1424', '0'), +('15', '39', '5', '14703', '8250', '0'), +('15', '39', '5', '14700', '4953', '0'), +('15', '39', '5', '10055', '4505', '0'), +('15', '39', '5', '68291', '4130', '0'), +('15', '39', '8', '11621', '14220', '0'), +('15', '39', '8', '1546', '12725', '0'), +('15', '39', '8', '11603', '8130', '0'), +('15', '39', '8', '1409', '6312', '0'), +('15', '39', '6', '1557', '6760', '0'), +('15', '39', '6', '2286', '2873', '0'), +('15', '39', '6', '25062', '1833', '0'), +('15', '39', '6', '2331', '1462', '0'), +('15', '39', '17', '2285', '7403', '0'), +('15', '39', '17', '4342', '5678', '0'), +('15', '39', '17', '2405', '3148', '0'), +('15', '39', '17', '3305', '2867', '0'), +('15', '39', '7', '4343', '3382', '0'), +('15', '39', '7', '2289', '2497', '0'), +('15', '39', '7', '2458', '2406', '0'), +('15', '39', '7', '2342', '2064', '0'), +('15', '39', '9', '10149', '2962', '0'), +('15', '39', '9', '14650', '2552', '0'), +('15', '39', '9', '2290', '2369', '0'), +('15', '39', '9', '12189', '2263', '0'), +('15', '39', '15', '10366', '8005', '0'), +('15', '39', '15', '10151', '7200', '0'), +('15', '39', '15', '14679', '6255', '0'), +('15', '39', '15', '14678', '5104', '0'), +('15', '39', '20', '11601', '9154', '0'), +('15', '39', '20', '2742', '6115', '0'), +('15', '39', '20', '1543', '5286', '0'), +('15', '39', '20', '1365', '4200', '0'), +('15', '39', '12', '20655', '6628', '0'), +('15', '39', '12', '2923', '4654', '0'), +('15', '39', '12', '11624', '3469', '0'), +('15', '39', '12', '4345', '3290', '0'), +('15', '39', '18', '2461', '3499', '0'), +('15', '39', '18', '4410', '2557', '0'), +('15', '39', '18', '2292', '2403', '0'), +('15', '39', '18', '4346', '2331', '0'), +('15', '39', '19', '2293', '6060', '0'), +('15', '39', '19', '68239', '4707', '0'), +('15', '39', '19', '4407', '2905', '0'), +('15', '39', '19', '2337', '1757', '0'), +('15', '39', '13', '7257', '14151', '0'), +('15', '39', '13', '6692', '13290', '0'), +('15', '39', '13', '11610', '12687', '0'), +('15', '39', '13', '6691', '11768', '0'), +('15', '39', '14', '7257', '14151', '0'), +('15', '39', '14', '6692', '13290', '0'), +('15', '39', '14', '11551', '12679', '0'), +('15', '39', '14', '6691', '11768', '0'), +('15', '39', '11', '14762', '3181', '0'), +('15', '39', '11', '9246', '2960', '0'), +('15', '39', '11', '20677', '1800', '0'), +('15', '39', '11', '13353', '1500', '0'), +('15', '40', '22', '10323', '0', '0'), +('15', '40', '22', '10664', '0', '0'), +('15', '40', '22', '9246', '0', '0'), +('15', '40', '22', '21509', '0', '0'), +('15', '40', '1', '14701', '5052', '0'), +('15', '40', '1', '14702', '4250', '0'), +('15', '40', '1', '30361', '1890', '0'), +('15', '40', '1', '10165', '1683', '0'), +('15', '40', '2', '2191', '3326', '0'), +('15', '40', '2', '1519', '3207', '0'), +('15', '40', '2', '10142', '3012', '0'), +('15', '40', '2', '4341', '2712', '0'), +('15', '40', '3', '11052', '3624', '0'), +('15', '40', '3', '4505', '2446', '0'), +('15', '40', '3', '14695', '2114', '0'), +('15', '40', '3', '2295', '1436', '0'), +('15', '40', '5', '14703', '8250', '0'), +('15', '40', '5', '14700', '4953', '0'), +('15', '40', '5', '10055', '4505', '0'), +('15', '40', '5', '4501', '4198', '0'), +('15', '40', '8', '11621', '14220', '0'), +('15', '40', '8', '1546', '12785', '0'), +('15', '40', '8', '11603', '8184', '0'), +('15', '40', '8', '1409', '6312', '0'), +('15', '40', '6', '1557', '6760', '0'), +('15', '40', '6', '2286', '2894', '0'), +('15', '40', '6', '25062', '1833', '0'), +('15', '40', '6', '2331', '1480', '0'), +('15', '40', '17', '2285', '7427', '0'), +('15', '40', '17', '4342', '5738', '0'), +('15', '40', '17', '2405', '3191', '0'), +('15', '40', '17', '3305', '2867', '0'), +('15', '40', '7', '4343', '3425', '0'), +('15', '40', '7', '2289', '2521', '0'), +('15', '40', '7', '2458', '2406', '0'), +('15', '40', '7', '2342', '2077', '0'), +('15', '40', '9', '10149', '2980', '0'), +('15', '40', '9', '14650', '2552', '0'), +('15', '40', '9', '2290', '2407', '0'), +('15', '40', '9', '12189', '2263', '0'), +('15', '40', '15', '10366', '8005', '0'), +('15', '40', '15', '10151', '7200', '0'), +('15', '40', '15', '14679', '6255', '0'), +('15', '40', '15', '14678', '5104', '0'), +('15', '40', '20', '11601', '9196', '0'), +('15', '40', '20', '2742', '6157', '0'), +('15', '40', '20', '1543', '5346', '0'), +('15', '40', '20', '1365', '4200', '0'), +('15', '40', '12', '20655', '6649', '0'), +('15', '40', '12', '2923', '4654', '0'), +('15', '40', '12', '11624', '3499', '0'), +('15', '40', '12', '4345', '3320', '0'), +('15', '40', '18', '2461', '3523', '0'), +('15', '40', '18', '4410', '2557', '0'), +('15', '40', '18', '2292', '2427', '0'), +('15', '40', '18', '4346', '2331', '0'), +('15', '40', '19', '2293', '6078', '0'), +('15', '40', '19', '68239', '4725', '0'), +('15', '40', '19', '4407', '2959', '0'), +('15', '40', '19', '2337', '1757', '0'), +('15', '40', '13', '7257', '14151', '0'), +('15', '40', '13', '6692', '13290', '0'), +('15', '40', '13', '11610', '12687', '0'), +('15', '40', '13', '6691', '11768', '0'), +('15', '40', '14', '7257', '14151', '0'), +('15', '40', '14', '6692', '13290', '0'), +('15', '40', '14', '11551', '12679', '0'), +('15', '40', '14', '6691', '11768', '0'), +('15', '40', '11', '14762', '3181', '0'), +('15', '40', '11', '9246', '3020', '0'), +('15', '40', '11', '20677', '1800', '0'), +('15', '40', '11', '13353', '1500', '0'), +('15', '41', '22', '10323', '0', '0'), +('15', '41', '22', '10664', '0', '0'), +('15', '41', '22', '9246', '0', '0'), +('15', '41', '22', '21509', '0', '0'), +('15', '41', '1', '14701', '5052', '0'), +('15', '41', '1', '14702', '4250', '0'), +('15', '41', '1', '30361', '1890', '0'), +('15', '41', '1', '10165', '1683', '0'), +('15', '41', '2', '2191', '3362', '0'), +('15', '41', '2', '1519', '3207', '0'), +('15', '41', '2', '10142', '3012', '0'), +('15', '41', '2', '4341', '2712', '0'), +('15', '41', '3', '11052', '3715', '0'), +('15', '41', '3', '4505', '2488', '0'), +('15', '41', '3', '14695', '2156', '0'), +('15', '41', '3', '2295', '1448', '0'), +('15', '41', '5', '14703', '8250', '0'), +('15', '41', '5', '14700', '4953', '0'), +('15', '41', '5', '10055', '4505', '0'), +('15', '41', '5', '4501', '4276', '0'), +('15', '41', '8', '11621', '14220', '0'), +('15', '41', '8', '1546', '12845', '0'), +('15', '41', '8', '11603', '8239', '0'), +('15', '41', '8', '1409', '6312', '0'), +('15', '41', '6', '1557', '6760', '0'), +('15', '41', '6', '2286', '2915', '0'), +('15', '41', '6', '25062', '1833', '0'), +('15', '41', '6', '2331', '1498', '0'), +('15', '41', '17', '2285', '7452', '0'), +('15', '41', '17', '4342', '5798', '0'), +('15', '41', '17', '2405', '3234', '0'), +('15', '41', '17', '3305', '2867', '0'), +('15', '41', '7', '4343', '3467', '0'), +('15', '41', '7', '2289', '2546', '0'), +('15', '41', '7', '2458', '2406', '0'), +('15', '41', '7', '2342', '2090', '0'), +('15', '41', '9', '10149', '2998', '0'), +('15', '41', '9', '14650', '2552', '0'), +('15', '41', '9', '2290', '2446', '0'), +('15', '41', '9', '12189', '2263', '0'), +('15', '41', '15', '10366', '8005', '0'), +('15', '41', '15', '10151', '7200', '0'), +('15', '41', '15', '14679', '6255', '0'), +('15', '41', '15', '14678', '5104', '0'), +('15', '41', '20', '11601', '9238', '0'), +('15', '41', '20', '2742', '6200', '0'), +('15', '41', '20', '1543', '5407', '0'), +('15', '41', '20', '1365', '4200', '0'), +('15', '41', '12', '20655', '6669', '0'), +('15', '41', '12', '2923', '4654', '0'), +('15', '41', '12', '11624', '3528', '0'), +('15', '41', '12', '4345', '3350', '0'), +('15', '41', '18', '2461', '3548', '0'), +('15', '41', '18', '4410', '2557', '0'), +('15', '41', '18', '2292', '2451', '0'), +('15', '41', '18', '4346', '2331', '0'), +('15', '41', '19', '2293', '6096', '0'), +('15', '41', '19', '68239', '4743', '0'), +('15', '41', '19', '4407', '3014', '0'), +('15', '41', '19', '2337', '1757', '0'), +('15', '41', '13', '7257', '14151', '0'), +('15', '41', '13', '6692', '13290', '0'), +('15', '41', '13', '11610', '12687', '0'), +('15', '41', '13', '6691', '11768', '0'), +('15', '41', '14', '7257', '14151', '0'), +('15', '41', '14', '6692', '13290', '0'), +('15', '41', '14', '11551', '12679', '0'), +('15', '41', '14', '6691', '11768', '0'), +('15', '41', '11', '14762', '3181', '0'), +('15', '41', '11', '9246', '3080', '0'), +('15', '41', '11', '20677', '1800', '0'), +('15', '41', '11', '13353', '1500', '0'), +('15', '42', '22', '10323', '0', '0'), +('15', '42', '22', '10664', '0', '0'), +('15', '42', '22', '9246', '0', '0'), +('15', '42', '22', '21509', '0', '0'), +('15', '42', '1', '14701', '5052', '0'), +('15', '42', '1', '14702', '4250', '0'), +('15', '42', '1', '30361', '1890', '0'), +('15', '42', '1', '10165', '1683', '0'), +('15', '42', '2', '2191', '3398', '0'), +('15', '42', '2', '1519', '3207', '0'), +('15', '42', '2', '10142', '3012', '0'), +('15', '42', '2', '4341', '2712', '0'), +('15', '42', '3', '11052', '3805', '0'), +('15', '42', '3', '4505', '2531', '0'), +('15', '42', '3', '14695', '2199', '0'), +('15', '42', '3', '2295', '1460', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '42', '5', '14703', '8250', '0'), +('15', '42', '5', '14700', '4953', '0'), +('15', '42', '5', '10055', '4505', '0'), +('15', '42', '5', '4501', '4355', '0'), +('15', '42', '8', '11621', '14220', '0'), +('15', '42', '8', '1546', '12906', '0'), +('15', '42', '8', '11603', '8293', '0'), +('15', '42', '8', '1409', '6312', '0'), +('15', '42', '6', '1557', '6760', '0'), +('15', '42', '6', '2286', '2940', '0'), +('15', '42', '6', '25062', '1833', '0'), +('15', '42', '6', '2331', '1516', '0'), +('15', '42', '17', '2285', '7476', '0'), +('15', '42', '17', '4342', '5859', '0'), +('15', '42', '17', '2405', '3279', '0'), +('15', '42', '17', '3305', '2867', '0'), +('15', '42', '7', '4343', '3515', '0'), +('15', '42', '7', '2289', '2570', '0'), +('15', '42', '7', '2458', '2406', '0'), +('15', '42', '7', '2342', '2104', '0'), +('15', '42', '9', '10149', '3016', '0'), +('15', '42', '9', '14650', '2552', '0'), +('15', '42', '9', '2290', '2486', '0'), +('15', '42', '9', '12189', '2263', '0'), +('15', '42', '15', '10366', '8005', '0'), +('15', '42', '15', '10151', '7200', '0'), +('15', '42', '15', '14679', '6255', '0'), +('15', '42', '15', '14678', '5104', '0'), +('15', '42', '20', '11601', '9286', '0'), +('15', '42', '20', '2742', '6248', '0'), +('15', '42', '20', '1543', '5467', '0'), +('15', '42', '20', '1365', '4200', '0'), +('15', '42', '12', '20655', '6691', '0'), +('15', '42', '12', '2923', '4654', '0'), +('15', '42', '12', '11624', '3562', '0'), +('15', '42', '12', '4345', '3380', '0'), +('15', '42', '18', '2461', '3572', '0'), +('15', '42', '18', '4410', '2557', '0'), +('15', '42', '18', '2292', '2476', '0'), +('15', '42', '18', '4346', '2331', '0'), +('15', '42', '19', '2293', '6114', '0'), +('15', '42', '19', '68239', '4761', '0'), +('15', '42', '19', '4407', '3068', '0'), +('15', '42', '19', '2337', '1757', '0'), +('15', '42', '13', '7257', '14151', '0'), +('15', '42', '13', '6692', '13290', '0'), +('15', '42', '13', '11610', '12687', '0'), +('15', '42', '13', '6691', '11768', '0'), +('15', '42', '14', '7257', '14151', '0'), +('15', '42', '14', '6692', '13290', '0'), +('15', '42', '14', '11551', '12679', '0'), +('15', '42', '14', '6691', '11768', '0'), +('15', '42', '11', '14762', '3181', '0'), +('15', '42', '11', '9246', '3141', '0'), +('15', '42', '11', '20677', '1800', '0'), +('15', '42', '11', '13353', '1500', '0'), +('15', '43', '22', '10323', '0', '0'), +('15', '43', '22', '10664', '0', '0'), +('15', '43', '22', '9246', '0', '0'), +('15', '43', '22', '21509', '0', '0'), +('15', '43', '1', '14701', '5052', '0'), +('15', '43', '1', '14702', '4250', '0'), +('15', '43', '1', '30361', '1890', '0'), +('15', '43', '1', '10165', '1683', '0'), +('15', '43', '2', '2191', '3434', '0'), +('15', '43', '2', '1519', '3207', '0'), +('15', '43', '2', '10142', '3012', '0'), +('15', '43', '2', '4341', '2712', '0'), +('15', '43', '3', '11052', '3896', '0'), +('15', '43', '3', '4505', '2573', '0'), +('15', '43', '3', '14695', '2241', '0'), +('15', '43', '3', '2295', '1472', '0'), +('15', '43', '5', '14703', '8250', '0'), +('15', '43', '5', '14700', '4953', '0'), +('15', '43', '5', '10055', '4505', '0'), +('15', '43', '5', '4501', '4433', '0'), +('15', '43', '8', '11621', '14220', '0'), +('15', '43', '8', '1546', '12966', '0'), +('15', '43', '8', '11603', '8347', '0'), +('15', '43', '8', '1409', '6312', '0'), +('15', '43', '6', '1557', '6760', '0'), +('15', '43', '6', '2286', '2961', '0'), +('15', '43', '6', '25062', '1833', '0'), +('15', '43', '6', '2331', '1534', '0'), +('15', '43', '17', '2285', '7500', '0'), +('15', '43', '17', '4342', '5919', '0'), +('15', '43', '17', '2405', '3321', '0'), +('15', '43', '17', '3305', '2867', '0'), +('15', '43', '7', '4343', '3558', '0'), +('15', '43', '7', '2289', '2594', '0'), +('15', '43', '7', '2458', '2406', '0'), +('15', '43', '7', '2342', '2117', '0'), +('15', '43', '9', '10149', '3034', '0'), +('15', '43', '9', '14650', '2552', '0'), +('15', '43', '9', '2290', '2525', '0'), +('15', '43', '9', '12189', '2263', '0'), +('15', '43', '15', '10366', '8005', '0'), +('15', '43', '15', '10151', '7200', '0'), +('15', '43', '15', '14679', '6255', '0'), +('15', '43', '15', '14678', '5104', '0'), +('15', '43', '20', '11601', '9329', '0'), +('15', '43', '20', '2742', '6290', '0'), +('15', '43', '20', '1543', '5528', '0'), +('15', '43', '20', '1365', '4200', '0'), +('15', '43', '12', '20655', '6711', '0'), +('15', '43', '12', '2923', '4654', '0'), +('15', '43', '12', '11624', '3592', '0'), +('15', '43', '12', '4345', '3411', '0'), +('15', '43', '18', '2461', '3596', '0'), +('15', '43', '18', '4410', '2557', '0'), +('15', '43', '18', '2292', '2500', '0'), +('15', '43', '18', '4346', '2331', '0'), +('15', '43', '19', '2293', '6132', '0'), +('15', '43', '19', '68239', '4779', '0'), +('15', '43', '19', '4407', '3122', '0'), +('15', '43', '19', '2337', '1757', '0'), +('15', '43', '13', '7257', '14151', '0'), +('15', '43', '13', '6692', '13290', '0'), +('15', '43', '13', '11610', '12687', '0'), +('15', '43', '13', '6691', '11768', '0'), +('15', '43', '14', '7257', '14151', '0'), +('15', '43', '14', '6692', '13290', '0'), +('15', '43', '14', '11551', '12679', '0'), +('15', '43', '14', '6691', '11768', '0'), +('15', '43', '11', '9246', '3201', '0'), +('15', '43', '11', '14762', '3181', '0'), +('15', '43', '11', '20677', '1800', '0'), +('15', '43', '11', '13353', '1500', '0'), +('15', '44', '22', '10323', '0', '0'), +('15', '44', '22', '10664', '0', '0'), +('15', '44', '22', '9246', '0', '0'), +('15', '44', '22', '21509', '0', '0'), +('15', '44', '1', '14701', '5052', '0'), +('15', '44', '1', '14702', '4250', '0'), +('15', '44', '1', '30361', '1890', '0'), +('15', '44', '1', '10165', '1683', '0'), +('15', '44', '2', '2191', '3471', '0'), +('15', '44', '2', '1519', '3207', '0'), +('15', '44', '2', '10142', '3012', '0'), +('15', '44', '2', '4341', '2712', '0'), +('15', '44', '3', '11052', '3986', '0'), +('15', '44', '3', '4505', '2615', '0'), +('15', '44', '3', '14695', '2283', '0'), +('15', '44', '3', '2295', '1485', '0'), +('15', '44', '5', '14703', '8250', '0'), +('15', '44', '5', '14700', '4953', '0'), +('15', '44', '5', '4501', '4512', '0'), +('15', '44', '5', '10055', '4505', '0'), +('15', '44', '8', '11621', '14220', '0'), +('15', '44', '8', '1546', '13027', '0'), +('15', '44', '8', '11603', '8402', '0'), +('15', '44', '8', '1409', '6312', '0'), +('15', '44', '6', '1557', '6760', '0'), +('15', '44', '6', '2286', '2982', '0'), +('15', '44', '6', '25062', '1833', '0'), +('15', '44', '6', '2331', '1552', '0'), +('15', '44', '17', '2285', '7524', '0'), +('15', '44', '17', '4342', '5980', '0'), +('15', '44', '17', '2405', '3364', '0'), +('15', '44', '17', '3305', '2867', '0'), +('15', '44', '7', '4343', '3600', '0'), +('15', '44', '7', '2289', '2618', '0'), +('15', '44', '7', '2458', '2406', '0'), +('15', '44', '7', '2342', '2129', '0'), +('15', '44', '9', '10149', '3052', '0'), +('15', '44', '9', '2290', '2563', '0'), +('15', '44', '9', '14650', '2552', '0'), +('15', '44', '9', '12189', '2263', '0'), +('15', '44', '15', '10366', '8005', '0'), +('15', '44', '15', '10151', '7200', '0'), +('15', '44', '15', '14679', '6255', '0'), +('15', '44', '15', '14678', '5104', '0'), +('15', '44', '20', '11601', '9371', '0'), +('15', '44', '20', '2742', '6332', '0'), +('15', '44', '20', '1543', '5588', '0'), +('15', '44', '20', '1365', '4200', '0'), +('15', '44', '12', '20655', '6732', '0'), +('15', '44', '12', '2923', '4654', '0'), +('15', '44', '12', '11624', '3621', '0'), +('15', '44', '12', '4345', '3441', '0'), +('15', '44', '18', '2461', '3620', '0'), +('15', '44', '18', '4410', '2557', '0'), +('15', '44', '18', '2292', '2524', '0'), +('15', '44', '18', '4346', '2331', '0'), +('15', '44', '19', '2293', '6151', '0'), +('15', '44', '19', '68239', '4797', '0'), +('15', '44', '19', '4407', '3177', '0'), +('15', '44', '19', '2337', '1757', '0'), +('15', '44', '13', '7257', '14151', '0'), +('15', '44', '13', '6692', '13290', '0'), +('15', '44', '13', '11610', '12687', '0'), +('15', '44', '13', '6691', '11768', '0'), +('15', '44', '14', '7257', '14151', '0'), +('15', '44', '14', '6692', '13290', '0'), +('15', '44', '14', '11551', '12679', '0'), +('15', '44', '14', '6691', '11768', '0'), +('15', '44', '11', '9246', '3262', '0'), +('15', '44', '11', '14762', '3181', '0'), +('15', '44', '11', '20677', '1800', '0'), +('15', '44', '11', '13353', '1500', '0'), +('15', '45', '22', '10323', '0', '0'), +('15', '45', '22', '10664', '0', '0'), +('15', '45', '22', '9246', '0', '0'), +('15', '45', '22', '21509', '0', '0'), +('15', '45', '1', '14701', '5052', '0'), +('15', '45', '1', '14702', '4250', '0'), +('15', '45', '1', '30361', '1890', '0'), +('15', '45', '1', '10165', '1683', '0'), +('15', '45', '2', '2191', '3507', '0'), +('15', '45', '2', '1519', '3207', '0'), +('15', '45', '2', '10142', '3012', '0'), +('15', '45', '2', '4341', '2712', '0'), +('15', '45', '3', '11052', '4077', '0'), +('15', '45', '3', '4505', '2658', '0'), +('15', '45', '3', '14695', '2325', '0'), +('15', '45', '3', '2295', '1497', '0'), +('15', '45', '5', '14703', '8250', '0'), +('15', '45', '5', '14700', '4953', '0'), +('15', '45', '5', '4501', '4590', '0'), +('15', '45', '5', '10055', '4505', '0'), +('15', '45', '8', '11621', '14220', '0'), +('15', '45', '8', '1546', '13087', '0'), +('15', '45', '8', '11603', '8456', '0'), +('15', '45', '8', '1409', '6312', '0'), +('15', '45', '6', '1557', '6760', '0'), +('15', '45', '6', '2286', '3003', '0'), +('15', '45', '6', '25062', '1833', '0'), +('15', '45', '6', '2331', '1570', '0'), +('15', '45', '17', '2285', '7548', '0'), +('15', '45', '17', '4342', '6040', '0'), +('15', '45', '17', '2405', '3407', '0'), +('15', '45', '17', '3305', '2867', '0'), +('15', '45', '7', '4343', '3642', '0'), +('15', '45', '7', '2289', '2642', '0'), +('15', '45', '7', '2458', '2406', '0'), +('15', '45', '7', '2342', '2142', '0'), +('15', '45', '9', '10149', '3070', '0'), +('15', '45', '9', '2290', '2602', '0'), +('15', '45', '9', '14650', '2552', '0'), +('15', '45', '9', '12189', '2263', '0'), +('15', '45', '15', '10366', '8005', '0'), +('15', '45', '15', '10151', '7200', '0'), +('15', '45', '15', '14679', '6255', '0'), +('15', '45', '15', '14678', '5104', '0'), +('15', '45', '20', '11601', '9413', '0'), +('15', '45', '20', '2742', '6375', '0'), +('15', '45', '20', '1543', '5648', '0'), +('15', '45', '20', '1365', '4200', '0'), +('15', '45', '12', '20655', '6752', '0'), +('15', '45', '12', '2923', '4654', '0'), +('15', '45', '12', '11624', '3651', '0'), +('15', '45', '12', '4345', '3471', '0'), +('15', '45', '18', '2461', '3644', '0'), +('15', '45', '18', '4410', '2557', '0'), +('15', '45', '18', '2292', '2548', '0'), +('15', '45', '18', '4346', '2331', '0'), +('15', '45', '19', '2293', '6169', '0'), +('15', '45', '19', '68239', '4816', '0'), +('15', '45', '19', '4407', '3231', '0'), +('15', '45', '19', '2337', '1757', '0'), +('15', '45', '13', '7257', '14151', '0'), +('15', '45', '13', '6692', '13290', '0'), +('15', '45', '13', '11610', '12687', '0'), +('15', '45', '13', '6691', '11768', '0'), +('15', '45', '14', '7257', '14151', '0'), +('15', '45', '14', '6692', '13290', '0'), +('15', '45', '14', '11551', '12679', '0'), +('15', '45', '14', '6691', '11768', '0'), +('15', '45', '11', '9246', '3322', '0'), +('15', '45', '11', '14762', '3181', '0'), +('15', '45', '11', '20677', '1800', '0'), +('15', '45', '11', '13353', '1500', '0'), +('15', '46', '22', '10323', '0', '0'), +('15', '46', '22', '10664', '0', '0'), +('15', '46', '22', '9246', '0', '0'), +('15', '46', '22', '21509', '0', '0'), +('15', '46', '1', '14701', '5052', '0'), +('15', '46', '1', '14702', '4250', '0'), +('15', '46', '1', '30361', '1890', '0'), +('15', '46', '1', '10165', '1683', '0'), +('15', '46', '2', '2191', '3543', '0'), +('15', '46', '2', '1519', '3207', '0'), +('15', '46', '2', '10142', '3012', '0'), +('15', '46', '2', '4341', '2712', '0'), +('15', '46', '3', '11052', '4168', '0'), +('15', '46', '3', '4505', '2700', '0'), +('15', '46', '3', '14695', '2368', '0'), +('15', '46', '3', '2295', '1509', '0'), +('15', '46', '5', '14703', '8250', '0'), +('15', '46', '5', '14700', '4953', '0'), +('15', '46', '5', '4501', '4669', '0'), +('15', '46', '5', '10055', '4505', '0'), +('15', '46', '8', '11621', '14220', '0'), +('15', '46', '8', '1546', '13147', '0'), +('15', '46', '8', '11603', '8511', '0'), +('15', '46', '8', '1409', '6312', '0'), +('15', '46', '6', '1557', '6760', '0'), +('15', '46', '6', '2286', '3024', '0'), +('15', '46', '6', '25062', '1833', '0'), +('15', '46', '6', '2331', '1589', '0'), +('15', '46', '17', '2285', '7572', '0'), +('15', '46', '17', '4342', '6100', '0'), +('15', '46', '17', '2405', '3450', '0'), +('15', '46', '17', '3305', '2867', '0'), +('15', '46', '7', '4343', '3684', '0'), +('15', '46', '7', '2289', '2666', '0'), +('15', '46', '7', '2458', '2406', '0'), +('15', '46', '7', '2342', '2155', '0'), +('15', '46', '9', '10149', '3089', '0'), +('15', '46', '9', '2290', '2641', '0'), +('15', '46', '9', '14650', '2552', '0'), +('15', '46', '9', '4311', '2282', '0'), +('15', '46', '15', '10366', '8005', '0'), +('15', '46', '15', '10151', '7200', '0'), +('15', '46', '15', '14679', '6255', '0'), +('15', '46', '15', '14678', '5104', '0'), +('15', '46', '20', '11601', '9456', '0'), +('15', '46', '20', '2742', '6417', '0'), +('15', '46', '20', '1543', '5709', '0'), +('15', '46', '20', '1365', '4200', '0'), +('15', '46', '12', '20655', '6773', '0'), +('15', '46', '12', '2923', '4654', '0'), +('15', '46', '12', '11624', '3680', '0'), +('15', '46', '12', '4345', '3501', '0'), +('15', '46', '18', '2461', '3668', '0'), +('15', '46', '18', '2292', '2572', '0'), +('15', '46', '18', '4410', '2557', '0'), +('15', '46', '18', '4346', '2331', '0'), +('15', '46', '19', '2293', '6187', '0'), +('15', '46', '19', '68239', '4834', '0'), +('15', '46', '19', '4407', '3286', '0'), +('15', '46', '19', '2337', '1757', '0'), +('15', '46', '13', '7257', '14151', '0'), +('15', '46', '13', '6692', '13290', '0'), +('15', '46', '13', '11610', '12687', '0'), +('15', '46', '13', '6691', '11768', '0'), +('15', '46', '14', '7257', '14151', '0'), +('15', '46', '14', '6692', '13290', '0'), +('15', '46', '14', '11551', '12679', '0'), +('15', '46', '14', '6691', '11768', '0'), +('15', '46', '11', '9246', '3382', '0'), +('15', '46', '11', '14762', '3181', '0'), +('15', '46', '11', '20677', '1800', '0'), +('15', '46', '11', '13353', '1500', '0'), +('15', '47', '22', '10323', '0', '0'), +('15', '47', '22', '10664', '0', '0'), +('15', '47', '22', '9246', '0', '0'), +('15', '47', '22', '21509', '0', '0'), +('15', '47', '1', '14701', '5052', '0'), +('15', '47', '1', '14702', '4250', '0'), +('15', '47', '1', '30361', '1890', '0'), +('15', '47', '1', '10165', '1683', '0'), +('15', '47', '2', '2191', '3579', '0'), +('15', '47', '2', '1519', '3207', '0'), +('15', '47', '2', '10142', '3012', '0'), +('15', '47', '2', '4341', '2712', '0'), +('15', '47', '3', '11052', '4258', '0'), +('15', '47', '3', '4505', '2742', '0'), +('15', '47', '3', '14695', '2410', '0'), +('15', '47', '3', '2295', '1521', '0'), +('15', '47', '5', '14703', '8250', '0'), +('15', '47', '5', '14700', '4953', '0'), +('15', '47', '5', '4501', '4747', '0'), +('15', '47', '5', '10055', '4505', '0'), +('15', '47', '8', '11621', '14220', '0'), +('15', '47', '8', '1546', '13208', '0'), +('15', '47', '8', '11603', '8565', '0'), +('15', '47', '8', '1409', '6312', '0'), +('15', '47', '6', '1557', '6760', '0'), +('15', '47', '6', '2286', '3045', '0'), +('15', '47', '6', '25062', '1833', '0'), +('15', '47', '6', '2331', '1607', '0'), +('15', '47', '17', '2285', '7597', '0'), +('15', '47', '17', '4342', '6161', '0'), +('15', '47', '17', '2405', '3493', '0'), +('15', '47', '17', '3305', '2867', '0'), +('15', '47', '7', '4343', '3727', '0'), +('15', '47', '7', '2289', '2691', '0'), +('15', '47', '7', '2458', '2406', '0'), +('15', '47', '7', '2342', '2168', '0'), +('15', '47', '9', '10149', '3107', '0'), +('15', '47', '9', '2290', '2679', '0'), +('15', '47', '9', '14650', '2552', '0'), +('15', '47', '9', '4311', '2312', '0'), +('15', '47', '15', '10366', '8005', '0'), +('15', '47', '15', '10151', '7200', '0'), +('15', '47', '15', '14679', '6255', '0'), +('15', '47', '15', '14678', '5104', '0'), +('15', '47', '20', '11601', '9498', '0'), +('15', '47', '20', '2742', '6459', '0'), +('15', '47', '20', '1543', '5769', '0'), +('15', '47', '20', '1365', '4200', '0'), +('15', '47', '12', '20655', '6794', '0'), +('15', '47', '12', '2923', '4654', '0'), +('15', '47', '12', '11624', '3710', '0'), +('15', '47', '12', '4345', '3531', '0'), +('15', '47', '18', '2461', '3693', '0'), +('15', '47', '18', '2292', '2596', '0'), +('15', '47', '18', '4410', '2557', '0'), +('15', '47', '18', '4346', '2331', '0'), +('15', '47', '19', '2293', '6205', '0'), +('15', '47', '19', '68239', '4852', '0'), +('15', '47', '19', '4407', '3340', '0'), +('15', '47', '19', '2337', '1757', '0'), +('15', '47', '13', '7257', '14151', '0'), +('15', '47', '13', '6692', '13290', '0'), +('15', '47', '13', '11610', '12687', '0'), +('15', '47', '13', '6691', '11768', '0'), +('15', '47', '14', '7257', '14151', '0'), +('15', '47', '14', '6692', '13290', '0'), +('15', '47', '14', '11551', '12679', '0'), +('15', '47', '14', '6691', '11768', '0'), +('15', '47', '11', '9246', '3443', '0'), +('15', '47', '11', '14762', '3181', '0'), +('15', '47', '11', '20677', '1800', '0'), +('15', '47', '11', '13353', '1500', '0'), +('15', '48', '22', '10323', '0', '0'), +('15', '48', '22', '10664', '0', '0'), +('15', '48', '22', '9246', '0', '0'), +('15', '48', '22', '21509', '0', '0'), +('15', '48', '1', '14701', '5052', '0'), +('15', '48', '1', '14702', '4250', '0'), +('15', '48', '1', '30361', '1890', '0'), +('15', '48', '1', '10165', '1683', '0'), +('15', '48', '2', '2191', '3616', '0'), +('15', '48', '2', '1519', '3207', '0'), +('15', '48', '2', '10142', '3012', '0'), +('15', '48', '2', '4341', '2712', '0'), +('15', '48', '3', '11052', '4349', '0'), +('15', '48', '3', '4505', '2784', '0'), +('15', '48', '3', '14695', '2452', '0'), +('15', '48', '3', '2295', '1533', '0'), +('15', '48', '5', '14703', '8250', '0'), +('15', '48', '5', '14700', '4953', '0'), +('15', '48', '5', '4501', '4826', '0'), +('15', '48', '5', '10055', '4505', '0'), +('15', '48', '8', '11621', '14220', '0'), +('15', '48', '8', '1546', '13268', '0'), +('15', '48', '8', '11603', '8619', '0'), +('15', '48', '8', '1409', '6312', '0'), +('15', '48', '6', '1557', '6760', '0'), +('15', '48', '6', '2286', '3069', '0'), +('15', '48', '6', '25062', '1833', '0'), +('15', '48', '6', '2331', '1625', '0'), +('15', '48', '17', '2285', '7621', '0'), +('15', '48', '17', '4342', '6221', '0'), +('15', '48', '17', '2405', '3538', '0'), +('15', '48', '17', '3305', '2867', '0'), +('15', '48', '7', '4343', '3775', '0'), +('15', '48', '7', '2289', '2715', '0'), +('15', '48', '7', '2458', '2406', '0'), +('15', '48', '7', '2342', '2182', '0'), +('15', '48', '9', '10149', '3125', '0'), +('15', '48', '9', '2290', '2719', '0'), +('15', '48', '9', '14650', '2552', '0'), +('15', '48', '9', '4311', '2345', '0'), +('15', '48', '15', '10366', '8005', '0'), +('15', '48', '15', '10151', '7200', '0'), +('15', '48', '15', '14679', '6255', '0'), +('15', '48', '15', '14678', '5104', '0'), +('15', '48', '20', '11601', '9546', '0'), +('15', '48', '20', '2742', '6508', '0'), +('15', '48', '20', '1543', '5830', '0'), +('15', '48', '20', '1365', '4200', '0'), +('15', '48', '12', '20655', '6815', '0'), +('15', '48', '12', '2923', '4654', '0'), +('15', '48', '12', '11624', '3744', '0'), +('15', '48', '12', '4345', '3562', '0'), +('15', '48', '18', '2461', '3717', '0'), +('15', '48', '18', '2292', '2621', '0'), +('15', '48', '18', '4410', '2557', '0'), +('15', '48', '18', '4346', '2331', '0'), +('15', '48', '19', '2293', '6223', '0'), +('15', '48', '19', '68239', '4870', '0'), +('15', '48', '19', '4407', '3394', '0'), +('15', '48', '19', '2337', '1757', '0'), +('15', '48', '13', '7257', '14151', '0'), +('15', '48', '13', '6692', '13290', '0'), +('15', '48', '13', '11610', '12687', '0'), +('15', '48', '13', '6691', '11768', '0'), +('15', '48', '14', '7257', '14151', '0'), +('15', '48', '14', '6692', '13290', '0'), +('15', '48', '14', '11551', '12679', '0'), +('15', '48', '14', '6691', '11768', '0'), +('15', '48', '11', '9246', '3503', '0'), +('15', '48', '11', '14762', '3181', '0'), +('15', '48', '11', '20677', '1800', '0'), +('15', '48', '11', '13353', '1500', '0'), +('15', '49', '22', '10323', '0', '0'), +('15', '49', '22', '10664', '0', '0'), +('15', '49', '22', '9246', '0', '0'), +('15', '49', '22', '21509', '0', '0'), +('15', '49', '1', '14701', '5052', '0'), +('15', '49', '1', '14702', '4250', '0'), +('15', '49', '1', '30361', '1890', '0'), +('15', '49', '1', '10165', '1683', '0'), +('15', '49', '2', '2191', '3652', '0'), +('15', '49', '2', '1519', '3207', '0'), +('15', '49', '2', '10142', '3012', '0'), +('15', '49', '2', '4341', '2712', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '49', '3', '11052', '4439', '0'), +('15', '49', '3', '4505', '2827', '0'), +('15', '49', '3', '14695', '2495', '0'), +('15', '49', '3', '2295', '1545', '0'), +('15', '49', '5', '14703', '8250', '0'), +('15', '49', '5', '14700', '4953', '0'), +('15', '49', '5', '4501', '4904', '0'), +('15', '49', '5', '10055', '4505', '0'), +('15', '49', '8', '11621', '14220', '0'), +('15', '49', '8', '1546', '13329', '0'), +('15', '49', '8', '11603', '8674', '0'), +('15', '49', '8', '1409', '6312', '0'), +('15', '49', '6', '1557', '6760', '0'), +('15', '49', '6', '2286', '3091', '0'), +('15', '49', '6', '25062', '1833', '0'), +('15', '49', '6', '2331', '1643', '0'), +('15', '49', '17', '2285', '7645', '0'), +('15', '49', '17', '4342', '6282', '0'), +('15', '49', '17', '2405', '3581', '0'), +('15', '49', '17', '3305', '2867', '0'), +('15', '49', '7', '4343', '3817', '0'), +('15', '49', '7', '2289', '2739', '0'), +('15', '49', '7', '2458', '2406', '0'), +('15', '49', '7', '2342', '2195', '0'), +('15', '49', '9', '10149', '3143', '0'), +('15', '49', '9', '2290', '2758', '0'), +('15', '49', '9', '14650', '2552', '0'), +('15', '49', '9', '4311', '2375', '0'), +('15', '49', '15', '10366', '8005', '0'), +('15', '49', '15', '10151', '7200', '0'), +('15', '49', '15', '14679', '6255', '0'), +('15', '49', '15', '14678', '5104', '0'), +('15', '49', '20', '11601', '9588', '0'), +('15', '49', '20', '2742', '6550', '0'), +('15', '49', '20', '1543', '5890', '0'), +('15', '49', '20', '1365', '4200', '0'), +('15', '49', '12', '20655', '6836', '0'), +('15', '49', '12', '2923', '4654', '0'), +('15', '49', '12', '11624', '3773', '0'), +('15', '49', '12', '4345', '3592', '0'), +('15', '49', '18', '2461', '3741', '0'), +('15', '49', '18', '2292', '2645', '0'), +('15', '49', '18', '4410', '2557', '0'), +('15', '49', '18', '4346', '2331', '0'), +('15', '49', '19', '2293', '6241', '0'), +('15', '49', '19', '68239', '4888', '0'), +('15', '49', '19', '4407', '3449', '0'), +('15', '49', '19', '2337', '1757', '0'), +('15', '49', '13', '7257', '14151', '0'), +('15', '49', '13', '6692', '13290', '0'), +('15', '49', '13', '11610', '12687', '0'), +('15', '49', '13', '6691', '11768', '0'), +('15', '49', '14', '7257', '14151', '0'), +('15', '49', '14', '6692', '13290', '0'), +('15', '49', '14', '11551', '12679', '0'), +('15', '49', '14', '6691', '11768', '0'), +('15', '49', '11', '9246', '3564', '0'), +('15', '49', '11', '14762', '3181', '0'), +('15', '49', '11', '20677', '1800', '0'), +('15', '49', '11', '13353', '1500', '0'), +('15', '50', '22', '10323', '0', '0'), +('15', '50', '22', '10664', '0', '0'), +('15', '50', '22', '9246', '0', '0'), +('15', '50', '22', '21509', '0', '0'), +('15', '50', '1', '14701', '5052', '0'), +('15', '50', '1', '14702', '4250', '0'), +('15', '50', '1', '30361', '1890', '0'), +('15', '50', '1', '10165', '1683', '0'), +('15', '50', '2', '2191', '3688', '0'), +('15', '50', '2', '1519', '3207', '0'), +('15', '50', '2', '10142', '3012', '0'), +('15', '50', '2', '4341', '2712', '0'), +('15', '50', '3', '11052', '4530', '0'), +('15', '50', '3', '4505', '2869', '0'), +('15', '50', '3', '14695', '2537', '0'), +('15', '50', '3', '2295', '1557', '0'), +('15', '50', '5', '14703', '8250', '0'), +('15', '50', '5', '4501', '4983', '0'), +('15', '50', '5', '14700', '4953', '0'), +('15', '50', '5', '10055', '4505', '0'), +('15', '50', '8', '11621', '14220', '0'), +('15', '50', '8', '1546', '13389', '0'), +('15', '50', '8', '11603', '8728', '0'), +('15', '50', '8', '1409', '6312', '0'), +('15', '50', '6', '1557', '6760', '0'), +('15', '50', '6', '2286', '3112', '0'), +('15', '50', '6', '25062', '1833', '0'), +('15', '50', '6', '2331', '1661', '0'), +('15', '50', '17', '2285', '7669', '0'), +('15', '50', '17', '4342', '6342', '0'), +('15', '50', '17', '2405', '3623', '0'), +('15', '50', '17', '3305', '2867', '0'), +('15', '50', '7', '4343', '3860', '0'), +('15', '50', '7', '2289', '2763', '0'), +('15', '50', '7', '2458', '2406', '0'), +('15', '50', '7', '2342', '2207', '0'), +('15', '50', '9', '10149', '3161', '0'), +('15', '50', '9', '2290', '2796', '0'), +('15', '50', '9', '14650', '2552', '0'), +('15', '50', '9', '4311', '2405', '0'), +('15', '50', '15', '10366', '8005', '0'), +('15', '50', '15', '10151', '7200', '0'), +('15', '50', '15', '14679', '6255', '0'), +('15', '50', '15', '14678', '5104', '0'), +('15', '50', '20', '11601', '9631', '0'), +('15', '50', '20', '2742', '6592', '0'), +('15', '50', '20', '1543', '5950', '0'), +('15', '50', '20', '1365', '4200', '0'), +('15', '50', '12', '20655', '6856', '0'), +('15', '50', '12', '2923', '4654', '0'), +('15', '50', '12', '11624', '3803', '0'), +('15', '50', '12', '4345', '3622', '0'), +('15', '50', '18', '2461', '3765', '0'), +('15', '50', '18', '2292', '2669', '0'), +('15', '50', '18', '4410', '2557', '0'), +('15', '50', '18', '4346', '2331', '0'), +('15', '50', '19', '2293', '6259', '0'), +('15', '50', '19', '68239', '4906', '0'), +('15', '50', '19', '4407', '3503', '0'), +('15', '50', '19', '2337', '1757', '0'), +('15', '50', '13', '7257', '14151', '0'), +('15', '50', '13', '6692', '13290', '0'), +('15', '50', '13', '11610', '12687', '0'), +('15', '50', '13', '6691', '11768', '0'), +('15', '50', '14', '7257', '14151', '0'), +('15', '50', '14', '6692', '13290', '0'), +('15', '50', '14', '11551', '12679', '0'), +('15', '50', '14', '6691', '11768', '0'), +('15', '50', '11', '9246', '3624', '0'), +('15', '50', '11', '14762', '3181', '0'), +('15', '50', '11', '20677', '1800', '0'), +('15', '50', '11', '13353', '1500', '0'), +('15', '51', '22', '10323', '0', '0'), +('15', '51', '22', '10664', '0', '0'), +('15', '51', '22', '9246', '0', '0'), +('15', '51', '22', '21509', '0', '0'), +('15', '51', '1', '14701', '5052', '0'), +('15', '51', '1', '14702', '4250', '0'), +('15', '51', '1', '30361', '1890', '0'), +('15', '51', '1', '10165', '1683', '0'), +('15', '51', '2', '2191', '3724', '0'), +('15', '51', '2', '1519', '3207', '0'), +('15', '51', '2', '10142', '3012', '0'), +('15', '51', '2', '4341', '2712', '0'), +('15', '51', '3', '11052', '4621', '0'), +('15', '51', '3', '4505', '2911', '0'), +('15', '51', '3', '14695', '2579', '0'), +('15', '51', '3', '2295', '1569', '0'), +('15', '51', '5', '14703', '8250', '0'), +('15', '51', '5', '4501', '5062', '0'), +('15', '51', '5', '14700', '4953', '0'), +('15', '51', '5', '10055', '4505', '0'), +('15', '51', '8', '11621', '14220', '0'), +('15', '51', '8', '1546', '13449', '0'), +('15', '51', '8', '11603', '8782', '0'), +('15', '51', '8', '1409', '6312', '0'), +('15', '51', '6', '1557', '6760', '0'), +('15', '51', '6', '2286', '3136', '0'), +('15', '51', '6', '25062', '1833', '0'), +('15', '51', '6', '2331', '1679', '0'), +('15', '51', '17', '2285', '7693', '0'), +('15', '51', '17', '4342', '6402', '0'), +('15', '51', '17', '2405', '3668', '0'), +('15', '51', '17', '2348', '2872', '0'), +('15', '51', '7', '4343', '3908', '0'), +('15', '51', '7', '2289', '2787', '0'), +('15', '51', '7', '2458', '2406', '0'), +('15', '51', '7', '2342', '2222', '0'), +('15', '51', '9', '10149', '3179', '0'), +('15', '51', '9', '2290', '2836', '0'), +('15', '51', '9', '14650', '2552', '0'), +('15', '51', '9', '4311', '2438', '0'), +('15', '51', '15', '10366', '8005', '0'), +('15', '51', '15', '10151', '7200', '0'), +('15', '51', '15', '14679', '6255', '0'), +('15', '51', '15', '14678', '5104', '0'), +('15', '51', '20', '11601', '9679', '0'), +('15', '51', '20', '2742', '6640', '0'), +('15', '51', '20', '1543', '6011', '0'), +('15', '51', '20', '1365', '4200', '0'), +('15', '51', '12', '20655', '6878', '0'), +('15', '51', '12', '2923', '4654', '0'), +('15', '51', '12', '11624', '3837', '0'), +('15', '51', '12', '4345', '3652', '0'), +('15', '51', '18', '2461', '3789', '0'), +('15', '51', '18', '2292', '2693', '0'), +('15', '51', '18', '4410', '2557', '0'), +('15', '51', '18', '4346', '2331', '0'), +('15', '51', '19', '2293', '6277', '0'), +('15', '51', '19', '68239', '4924', '0'), +('15', '51', '19', '4407', '3557', '0'), +('15', '51', '19', '2337', '1757', '0'), +('15', '51', '13', '7257', '14151', '0'), +('15', '51', '13', '6692', '13290', '0'), +('15', '51', '13', '11610', '12687', '0'), +('15', '51', '13', '6691', '11768', '0'), +('15', '51', '14', '7257', '14151', '0'), +('15', '51', '14', '6692', '13290', '0'), +('15', '51', '14', '11551', '12679', '0'), +('15', '51', '14', '6691', '11768', '0'), +('15', '51', '11', '9246', '3684', '0'), +('15', '51', '11', '14762', '3181', '0'), +('15', '51', '11', '20677', '1800', '0'), +('15', '51', '11', '13353', '1500', '0'), +('15', '52', '22', '10323', '0', '0'), +('15', '52', '22', '10664', '0', '0'), +('15', '52', '22', '9246', '0', '0'), +('15', '52', '22', '21509', '0', '0'), +('15', '52', '1', '14701', '5052', '0'), +('15', '52', '1', '14702', '4250', '0'), +('15', '52', '1', '30361', '1890', '0'), +('15', '52', '1', '10165', '1683', '0'), +('15', '52', '2', '2191', '3761', '0'), +('15', '52', '2', '1519', '3207', '0'), +('15', '52', '2', '10142', '3012', '0'), +('15', '52', '2', '2294', '2715', '0'), +('15', '52', '3', '11052', '4711', '0'), +('15', '52', '3', '4505', '2954', '0'), +('15', '52', '3', '14695', '2621', '0'), +('15', '52', '3', '2295', '1581', '0'), +('15', '52', '5', '14703', '8250', '0'), +('15', '52', '5', '4501', '5140', '0'), +('15', '52', '5', '14700', '4953', '0'), +('15', '52', '5', '10055', '4505', '0'), +('15', '52', '8', '11621', '14220', '0'), +('15', '52', '8', '1546', '13510', '0'), +('15', '52', '8', '11603', '8837', '0'), +('15', '52', '8', '1409', '6312', '0'), +('15', '52', '6', '1557', '6760', '0'), +('15', '52', '6', '2286', '3157', '0'), +('15', '52', '6', '25062', '1833', '0'), +('15', '52', '6', '2331', '1697', '0'), +('15', '52', '17', '2285', '7717', '0'), +('15', '52', '17', '4342', '6463', '0'), +('15', '52', '17', '2405', '3711', '0'), +('15', '52', '17', '2348', '2893', '0'), +('15', '52', '7', '4343', '3950', '0'), +('15', '52', '7', '2289', '2811', '0'), +('15', '52', '7', '2458', '2406', '0'), +('15', '52', '7', '2342', '2235', '0'), +('15', '52', '9', '10149', '3197', '0'), +('15', '52', '9', '2290', '2875', '0'), +('15', '52', '9', '14650', '2552', '0'), +('15', '52', '9', '4311', '2468', '0'), +('15', '52', '15', '10366', '8005', '0'), +('15', '52', '15', '10151', '7200', '0'), +('15', '52', '15', '14679', '6255', '0'), +('15', '52', '15', '14678', '5104', '0'), +('15', '52', '20', '11601', '9721', '0'), +('15', '52', '20', '2742', '6683', '0'), +('15', '52', '20', '1543', '6071', '0'), +('15', '52', '20', '1365', '4200', '0'), +('15', '52', '12', '20655', '6899', '0'), +('15', '52', '12', '2923', '4654', '0'), +('15', '52', '12', '11624', '3866', '0'), +('15', '52', '12', '4345', '3682', '0'), +('15', '52', '18', '2461', '3813', '0'), +('15', '52', '18', '2292', '2717', '0'), +('15', '52', '18', '4410', '2557', '0'), +('15', '52', '18', '4346', '2331', '0'), +('15', '52', '19', '2293', '6296', '0'), +('15', '52', '19', '68239', '4942', '0'), +('15', '52', '19', '4407', '3612', '0'), +('15', '52', '19', '2337', '1757', '0'), +('15', '52', '13', '7257', '14151', '0'), +('15', '52', '13', '6692', '13290', '0'), +('15', '52', '13', '11610', '12687', '0'), +('15', '52', '13', '6691', '11768', '0'), +('15', '52', '14', '7257', '14151', '0'), +('15', '52', '14', '6692', '13290', '0'), +('15', '52', '14', '11551', '12679', '0'), +('15', '52', '14', '6691', '11768', '0'), +('15', '52', '11', '9246', '3745', '0'), +('15', '52', '11', '14762', '3181', '0'), +('15', '52', '11', '20677', '1800', '0'), +('15', '52', '11', '13353', '1500', '0'), +('15', '53', '22', '10323', '0', '0'), +('15', '53', '22', '10664', '0', '0'), +('15', '53', '22', '9246', '0', '0'), +('15', '53', '22', '21509', '0', '0'), +('15', '53', '1', '14701', '5052', '0'), +('15', '53', '1', '14702', '4250', '0'), +('15', '53', '1', '30361', '1890', '0'), +('15', '53', '1', '10165', '1683', '0'), +('15', '53', '2', '2191', '3797', '0'), +('15', '53', '2', '1519', '3207', '0'), +('15', '53', '2', '10142', '3012', '0'), +('15', '53', '2', '2294', '2727', '0'), +('15', '53', '3', '11052', '4802', '0'), +('15', '53', '3', '4505', '2996', '0'), +('15', '53', '3', '14695', '2664', '0'), +('15', '53', '3', '2295', '1593', '0'), +('15', '53', '5', '14703', '8250', '0'), +('15', '53', '5', '4501', '5219', '0'), +('15', '53', '5', '14700', '4953', '0'), +('15', '53', '5', '10055', '4505', '0'), +('15', '53', '8', '11621', '14220', '0'), +('15', '53', '8', '1546', '13570', '0'), +('15', '53', '8', '11603', '8891', '0'), +('15', '53', '8', '1409', '6312', '0'), +('15', '53', '6', '1557', '6760', '0'), +('15', '53', '6', '2286', '3178', '0'), +('15', '53', '6', '25062', '1833', '0'), +('15', '53', '6', '2331', '1715', '0'), +('15', '53', '17', '2285', '7741', '0'), +('15', '53', '17', '4342', '6523', '0'), +('15', '53', '17', '2405', '3754', '0'), +('15', '53', '17', '2348', '2914', '0'), +('15', '53', '7', '4343', '3992', '0'), +('15', '53', '7', '2289', '2835', '0'), +('15', '53', '7', '2458', '2406', '0'), +('15', '53', '7', '2342', '2247', '0'), +('15', '53', '9', '10149', '3215', '0'), +('15', '53', '9', '2290', '2914', '0'), +('15', '53', '9', '14650', '2552', '0'), +('15', '53', '9', '4311', '2498', '0'), +('15', '53', '15', '10366', '8005', '0'), +('15', '53', '15', '10151', '7200', '0'), +('15', '53', '15', '14679', '6255', '0'), +('15', '53', '15', '14678', '5104', '0'), +('15', '53', '20', '11601', '9764', '0'), +('15', '53', '20', '2742', '6725', '0'), +('15', '53', '20', '1543', '6132', '0'), +('15', '53', '20', '1365', '4200', '0'), +('15', '53', '12', '20655', '6919', '0'), +('15', '53', '12', '2923', '4654', '0'), +('15', '53', '12', '11624', '3896', '0'), +('15', '53', '12', '4345', '3713', '0'), +('15', '53', '18', '2461', '3837', '0'), +('15', '53', '18', '2292', '2741', '0'), +('15', '53', '18', '4410', '2557', '0'), +('15', '53', '18', '4346', '2331', '0'), +('15', '53', '19', '2293', '6314', '0'), +('15', '53', '19', '68239', '4961', '0'), +('15', '53', '19', '4407', '3666', '0'), +('15', '53', '19', '2337', '1757', '0'), +('15', '53', '13', '7257', '14151', '0'), +('15', '53', '13', '6692', '13290', '0'), +('15', '53', '13', '11610', '12687', '0'), +('15', '53', '13', '6691', '11768', '0'), +('15', '53', '14', '7257', '14151', '0'), +('15', '53', '14', '6692', '13290', '0'), +('15', '53', '14', '11551', '12679', '0'), +('15', '53', '14', '6691', '11768', '0'), +('15', '53', '11', '9246', '3805', '0'), +('15', '53', '11', '14762', '3181', '0'), +('15', '53', '11', '20677', '1800', '0'), +('15', '53', '11', '13353', '1500', '0'), +('15', '54', '22', '10323', '0', '0'), +('15', '54', '22', '10664', '0', '0'), +('15', '54', '22', '9246', '0', '0'), +('15', '54', '22', '21509', '0', '0'), +('15', '54', '1', '14701', '5052', '0'), +('15', '54', '1', '14702', '4250', '0'), +('15', '54', '1', '30361', '1890', '0'), +('15', '54', '1', '10165', '1683', '0'), +('15', '54', '2', '2191', '3833', '0'), +('15', '54', '2', '1519', '3207', '0'), +('15', '54', '2', '10142', '3012', '0'), +('15', '54', '2', '2294', '2740', '0'), +('15', '54', '3', '11052', '4892', '0'), +('15', '54', '3', '4505', '3038', '0'), +('15', '54', '3', '14695', '2706', '0'), +('15', '54', '3', '2295', '1605', '0'), +('15', '54', '5', '14703', '8250', '0'), +('15', '54', '5', '4501', '5297', '0'), +('15', '54', '5', '14700', '4953', '0'), +('15', '54', '5', '10055', '4505', '0'), +('15', '54', '8', '11621', '14220', '0'), +('15', '54', '8', '1546', '13631', '0'), +('15', '54', '8', '11603', '8945', '0'), +('15', '54', '8', '1409', '6312', '0'), +('15', '54', '6', '1557', '6760', '0'), +('15', '54', '6', '2286', '3202', '0'), +('15', '54', '6', '25062', '1833', '0'), +('15', '54', '6', '2331', '1733', '0'), +('15', '54', '17', '2285', '7766', '0'), +('15', '54', '17', '4342', '6584', '0'), +('15', '54', '17', '2405', '3799', '0'), +('15', '54', '17', '2348', '2938', '0'), +('15', '54', '7', '4343', '4041', '0'), +('15', '54', '7', '2289', '2860', '0'), +('15', '54', '7', '2458', '2406', '0'), +('15', '54', '7', '2342', '2262', '0'), +('15', '54', '9', '10149', '3233', '0'), +('15', '54', '9', '2290', '2954', '0'), +('15', '54', '9', '14650', '2552', '0'), +('15', '54', '9', '4311', '2531', '0'), +('15', '54', '15', '10366', '8005', '0'), +('15', '54', '15', '10151', '7200', '0'), +('15', '54', '15', '14679', '6255', '0'), +('15', '54', '15', '14678', '5104', '0'), +('15', '54', '20', '11601', '9812', '0'), +('15', '54', '20', '2742', '6773', '0'), +('15', '54', '20', '1543', '6192', '0'), +('15', '54', '20', '1365', '4200', '0'), +('15', '54', '12', '20655', '6941', '0'), +('15', '54', '12', '2923', '4654', '0'), +('15', '54', '12', '11624', '3930', '0'), +('15', '54', '12', '4345', '3743', '0'), +('15', '54', '18', '2461', '3862', '0'), +('15', '54', '18', '2292', '2765', '0'), +('15', '54', '18', '4410', '2557', '0'), +('15', '54', '18', '4346', '2331', '0'), +('15', '54', '19', '2293', '6332', '0'), +('15', '54', '19', '68239', '4979', '0'), +('15', '54', '19', '4407', '3720', '0'), +('15', '54', '19', '2337', '1757', '0'), +('15', '54', '13', '7257', '14151', '0'), +('15', '54', '13', '6692', '13290', '0'), +('15', '54', '13', '11610', '12687', '0'), +('15', '54', '13', '6691', '11768', '0'), +('15', '54', '14', '7257', '14151', '0'), +('15', '54', '14', '6692', '13290', '0'), +('15', '54', '14', '11551', '12679', '0'), +('15', '54', '14', '6691', '11768', '0'), +('15', '54', '11', '9246', '3866', '0'), +('15', '54', '11', '14762', '3181', '0'), +('15', '54', '11', '20677', '1800', '0'), +('15', '54', '11', '13353', '1500', '0'), +('15', '55', '22', '10323', '0', '0'), +('15', '55', '22', '10664', '0', '0'), +('15', '55', '22', '9246', '0', '0'), +('15', '55', '22', '21509', '0', '0'), +('15', '55', '1', '14701', '5052', '0'), +('15', '55', '1', '14702', '4250', '0'), +('15', '55', '1', '30361', '1890', '0'), +('15', '55', '1', '10165', '1683', '0'), +('15', '55', '2', '2191', '3869', '0'), +('15', '55', '2', '1519', '3207', '0'), +('15', '55', '2', '10142', '3012', '0'), +('15', '55', '2', '2294', '2752', '0'), +('15', '55', '3', '11052', '4983', '0'), +('15', '55', '3', '4505', '3080', '0'), +('15', '55', '3', '14695', '2748', '0'), +('15', '55', '3', '2295', '1617', '0'), +('15', '55', '5', '14703', '8250', '0'), +('15', '55', '5', '4501', '5376', '0'), +('15', '55', '5', '14700', '4953', '0'), +('15', '55', '5', '68291', '4517', '0'), +('15', '55', '8', '11621', '14220', '0'), +('15', '55', '8', '1546', '13691', '0'), +('15', '55', '8', '11603', '9000', '0'), +('15', '55', '8', '1409', '6312', '0'), +('15', '55', '6', '1557', '6760', '0'), +('15', '55', '6', '2286', '3223', '0'), +('15', '55', '6', '25062', '1833', '0'), +('15', '55', '6', '2331', '1752', '0'), +('15', '55', '17', '2285', '7790', '0'), +('15', '55', '17', '4342', '6644', '0'), +('15', '55', '17', '2405', '3841', '0'), +('15', '55', '17', '2348', '2960', '0'), +('15', '55', '7', '4343', '4083', '0'), +('15', '55', '7', '2289', '2884', '0'), +('15', '55', '7', '2458', '2406', '0'), +('15', '55', '7', '2342', '2274', '0'), +('15', '55', '9', '10149', '3252', '0'), +('15', '55', '9', '2290', '2992', '0'), +('15', '55', '9', '4311', '2561', '0'), +('15', '55', '9', '14650', '2552', '0'), +('15', '55', '15', '10366', '8005', '0'), +('15', '55', '15', '10151', '7200', '0'), +('15', '55', '15', '14679', '6255', '0'), +('15', '55', '15', '14678', '5104', '0'), +('15', '55', '20', '11601', '9854', '0'), +('15', '55', '20', '2742', '6816', '0'), +('15', '55', '20', '1543', '6252', '0'), +('15', '55', '20', '1365', '4200', '0'), +('15', '55', '12', '20655', '6961', '0'), +('15', '55', '12', '2923', '4654', '0'), +('15', '55', '12', '11624', '3959', '0'), +('15', '55', '12', '4345', '3773', '0'), +('15', '55', '18', '2461', '3886', '0'), +('15', '55', '18', '2292', '2790', '0'), +('15', '55', '18', '4410', '2557', '0'), +('15', '55', '18', '4346', '2331', '0'), +('15', '55', '19', '2293', '6350', '0'), +('15', '55', '19', '68239', '4997', '0'), +('15', '55', '19', '4407', '3775', '0'), +('15', '55', '19', '2337', '1757', '0'), +('15', '55', '13', '7257', '14151', '0'), +('15', '55', '13', '6692', '13290', '0'), +('15', '55', '13', '11610', '12687', '0'), +('15', '55', '13', '6691', '11768', '0'), +('15', '55', '14', '7257', '14151', '0'), +('15', '55', '14', '6692', '13290', '0'), +('15', '55', '14', '11551', '12679', '0'), +('15', '55', '14', '6691', '11768', '0'), +('15', '55', '11', '9246', '3926', '0'), +('15', '55', '11', '14762', '3181', '0'), +('15', '55', '11', '20677', '1800', '0'), +('15', '55', '11', '13353', '1500', '0'), +('15', '56', '22', '10323', '0', '0'), +('15', '56', '22', '10664', '0', '0'), +('15', '56', '22', '9246', '0', '0'), +('15', '56', '22', '21509', '0', '0'), +('15', '56', '1', '14701', '5052', '0'), +('15', '56', '1', '14702', '4250', '0'), +('15', '56', '1', '30361', '1890', '0'), +('15', '56', '1', '10165', '1683', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '56', '2', '2191', '3905', '0'), +('15', '56', '2', '1519', '3207', '0'), +('15', '56', '2', '10142', '3012', '0'), +('15', '56', '2', '2294', '2764', '0'), +('15', '56', '3', '11052', '5074', '0'), +('15', '56', '3', '4505', '3123', '0'), +('15', '56', '3', '14695', '2790', '0'), +('15', '56', '3', '2295', '1629', '0'), +('15', '56', '5', '14703', '8250', '0'), +('15', '56', '5', '4501', '5454', '0'), +('15', '56', '5', '14700', '4953', '0'), +('15', '56', '5', '68291', '4541', '0'), +('15', '56', '8', '11621', '14220', '0'), +('15', '56', '8', '1546', '13751', '0'), +('15', '56', '8', '11603', '9054', '0'), +('15', '56', '8', '1409', '6312', '0'), +('15', '56', '6', '1557', '6760', '0'), +('15', '56', '6', '2286', '3248', '0'), +('15', '56', '6', '25062', '1833', '0'), +('15', '56', '6', '2331', '1770', '0'), +('15', '56', '17', '2285', '7814', '0'), +('15', '56', '17', '4342', '6704', '0'), +('15', '56', '17', '2405', '3886', '0'), +('15', '56', '17', '2348', '2984', '0'), +('15', '56', '7', '4343', '4131', '0'), +('15', '56', '7', '2289', '2908', '0'), +('15', '56', '7', '2458', '2406', '0'), +('15', '56', '7', '2342', '2289', '0'), +('15', '56', '9', '10149', '3270', '0'), +('15', '56', '9', '2290', '3032', '0'), +('15', '56', '9', '4311', '2595', '0'), +('15', '56', '9', '14650', '2552', '0'), +('15', '56', '15', '10366', '8005', '0'), +('15', '56', '15', '10151', '7200', '0'), +('15', '56', '15', '14679', '6255', '0'), +('15', '56', '15', '14678', '5104', '0'), +('15', '56', '20', '11601', '9903', '0'), +('15', '56', '20', '2742', '6864', '0'), +('15', '56', '20', '1543', '6313', '0'), +('15', '56', '20', '1365', '4200', '0'), +('15', '56', '12', '20655', '6983', '0'), +('15', '56', '12', '2923', '4654', '0'), +('15', '56', '12', '11624', '3993', '0'), +('15', '56', '12', '4345', '3803', '0'), +('15', '56', '18', '2461', '3910', '0'), +('15', '56', '18', '2292', '2814', '0'), +('15', '56', '18', '4410', '2557', '0'), +('15', '56', '18', '4346', '2331', '0'), +('15', '56', '19', '2293', '6368', '0'), +('15', '56', '19', '68239', '5015', '0'), +('15', '56', '19', '4407', '3829', '0'), +('15', '56', '19', '2337', '1757', '0'), +('15', '56', '13', '7257', '14151', '0'), +('15', '56', '13', '6692', '13290', '0'), +('15', '56', '13', '11610', '12687', '0'), +('15', '56', '13', '6691', '11768', '0'), +('15', '56', '14', '7257', '14151', '0'), +('15', '56', '14', '6692', '13290', '0'), +('15', '56', '14', '11551', '12679', '0'), +('15', '56', '14', '6691', '11768', '0'), +('15', '56', '11', '9246', '3986', '0'), +('15', '56', '11', '14762', '3181', '0'), +('15', '56', '11', '20677', '1800', '0'), +('15', '56', '11', '13353', '1500', '0'), +('15', '57', '22', '10323', '0', '0'), +('15', '57', '22', '10664', '0', '0'), +('15', '57', '22', '9246', '0', '0'), +('15', '57', '22', '21509', '0', '0'), +('15', '57', '1', '14701', '5052', '0'), +('15', '57', '1', '14702', '4250', '0'), +('15', '57', '1', '30361', '1890', '0'), +('15', '57', '1', '10165', '1683', '0'), +('15', '57', '2', '2191', '3942', '0'), +('15', '57', '2', '1519', '3207', '0'), +('15', '57', '2', '10142', '3012', '0'), +('15', '57', '2', '2294', '2776', '0'), +('15', '57', '3', '11052', '5164', '0'), +('15', '57', '3', '4505', '3165', '0'), +('15', '57', '3', '14695', '2833', '0'), +('15', '57', '3', '2295', '1642', '0'), +('15', '57', '5', '14703', '8250', '0'), +('15', '57', '5', '4501', '5533', '0'), +('15', '57', '5', '14700', '4953', '0'), +('15', '57', '5', '68291', '4565', '0'), +('15', '57', '8', '11621', '14220', '0'), +('15', '57', '8', '1546', '13812', '0'), +('15', '57', '8', '11603', '9109', '0'), +('15', '57', '8', '1409', '6312', '0'), +('15', '57', '6', '1557', '6760', '0'), +('15', '57', '6', '2286', '3269', '0'), +('15', '57', '6', '25062', '1833', '0'), +('15', '57', '6', '2331', '1788', '0'), +('15', '57', '17', '2285', '7838', '0'), +('15', '57', '17', '4342', '6765', '0'), +('15', '57', '17', '2405', '3929', '0'), +('15', '57', '17', '2348', '3005', '0'), +('15', '57', '7', '4343', '4174', '0'), +('15', '57', '7', '2289', '2932', '0'), +('15', '57', '7', '2458', '2406', '0'), +('15', '57', '7', '2342', '2302', '0'), +('15', '57', '9', '10149', '3288', '0'), +('15', '57', '9', '2290', '3071', '0'), +('15', '57', '9', '4311', '2624', '0'), +('15', '57', '9', '14650', '2552', '0'), +('15', '57', '15', '10366', '8005', '0'), +('15', '57', '15', '10151', '7200', '0'), +('15', '57', '15', '14679', '6255', '0'), +('15', '57', '15', '14678', '5104', '0'), +('15', '57', '20', '11601', '9945', '0'), +('15', '57', '20', '2742', '6906', '0'), +('15', '57', '20', '1543', '6373', '0'), +('15', '57', '20', '1365', '4200', '0'), +('15', '57', '12', '20655', '7004', '0'), +('15', '57', '12', '2923', '4654', '0'), +('15', '57', '12', '11624', '4023', '0'), +('15', '57', '12', '4345', '3833', '0'), +('15', '57', '18', '2461', '3934', '0'), +('15', '57', '18', '2292', '2838', '0'), +('15', '57', '18', '4410', '2557', '0'), +('15', '57', '18', '4346', '2331', '0'), +('15', '57', '19', '2293', '6386', '0'), +('15', '57', '19', '68239', '5033', '0'), +('15', '57', '19', '4407', '3884', '0'), +('15', '57', '19', '2337', '1757', '0'), +('15', '57', '13', '7257', '14151', '0'), +('15', '57', '13', '6692', '13290', '0'), +('15', '57', '13', '11610', '12687', '0'), +('15', '57', '13', '6691', '11768', '0'), +('15', '57', '14', '7257', '14151', '0'), +('15', '57', '14', '6692', '13290', '0'), +('15', '57', '14', '11551', '12679', '0'), +('15', '57', '14', '6691', '11768', '0'), +('15', '57', '11', '9246', '4047', '0'), +('15', '57', '11', '14762', '3181', '0'), +('15', '57', '11', '20677', '1800', '0'), +('15', '57', '11', '13353', '1500', '0'), +('15', '58', '22', '10323', '0', '0'), +('15', '58', '22', '10664', '0', '0'), +('15', '58', '22', '9246', '0', '0'), +('15', '58', '22', '21509', '0', '0'), +('15', '58', '1', '14701', '5052', '0'), +('15', '58', '1', '14702', '4250', '0'), +('15', '58', '1', '30361', '1890', '0'), +('15', '58', '1', '10165', '1683', '0'), +('15', '58', '2', '2191', '3978', '0'), +('15', '58', '2', '1519', '3207', '0'), +('15', '58', '2', '10142', '3012', '0'), +('15', '58', '2', '2294', '2788', '0'), +('15', '58', '3', '11052', '5255', '0'), +('15', '58', '3', '4505', '3207', '0'), +('15', '58', '3', '14695', '2875', '0'), +('15', '58', '3', '2295', '1654', '0'), +('15', '58', '5', '14703', '8250', '0'), +('15', '58', '5', '4501', '5611', '0'), +('15', '58', '5', '14700', '4953', '0'), +('15', '58', '5', '68291', '4590', '0'), +('15', '58', '8', '11621', '14220', '0'), +('15', '58', '8', '1546', '13872', '0'), +('15', '58', '8', '11603', '9163', '0'), +('15', '58', '8', '1409', '6312', '0'), +('15', '58', '6', '1557', '6760', '0'), +('15', '58', '6', '2286', '3293', '0'), +('15', '58', '6', '25062', '1833', '0'), +('15', '58', '6', '2331', '1806', '0'), +('15', '58', '17', '2285', '7862', '0'), +('15', '58', '17', '4342', '6825', '0'), +('15', '58', '17', '2405', '3974', '0'), +('15', '58', '17', '2348', '3029', '0'), +('15', '58', '7', '4343', '4222', '0'), +('15', '58', '7', '2289', '2956', '0'), +('15', '58', '7', '2458', '2406', '0'), +('15', '58', '7', '2342', '2316', '0'), +('15', '58', '9', '10149', '3306', '0'), +('15', '58', '9', '2290', '3111', '0'), +('15', '58', '9', '4311', '2658', '0'), +('15', '58', '9', '14650', '2552', '0'), +('15', '58', '15', '10366', '8005', '0'), +('15', '58', '15', '10151', '7200', '0'), +('15', '58', '15', '14679', '6255', '0'), +('15', '58', '15', '14678', '5104', '0'), +('15', '58', '20', '11601', '9993', '0'), +('15', '58', '20', '2742', '6955', '0'), +('15', '58', '20', '1543', '6434', '0'), +('15', '58', '20', '1365', '4200', '0'), +('15', '58', '12', '20655', '7025', '0'), +('15', '58', '12', '2923', '4654', '0'), +('15', '58', '12', '11624', '4057', '0'), +('15', '58', '12', '4345', '3864', '0'), +('15', '58', '18', '2461', '3958', '0'), +('15', '58', '18', '2292', '2862', '0'), +('15', '58', '18', '4410', '2557', '0'), +('15', '58', '18', '4346', '2331', '0'), +('15', '58', '19', '2293', '6404', '0'), +('15', '58', '19', '68239', '5051', '0'), +('15', '58', '19', '4407', '3938', '0'), +('15', '58', '19', '2337', '1757', '0'), +('15', '58', '13', '7257', '14151', '0'), +('15', '58', '13', '6692', '13290', '0'), +('15', '58', '13', '11610', '12687', '0'), +('15', '58', '13', '6691', '11768', '0'), +('15', '58', '14', '7257', '14151', '0'), +('15', '58', '14', '6692', '13290', '0'), +('15', '58', '14', '11551', '12679', '0'), +('15', '58', '14', '6691', '11768', '0'), +('15', '58', '11', '9246', '4107', '0'), +('15', '58', '11', '14762', '3181', '0'), +('15', '58', '11', '20677', '1800', '0'), +('15', '58', '11', '13353', '1500', '0'), +('15', '59', '22', '10323', '0', '0'), +('15', '59', '22', '10664', '0', '0'), +('15', '59', '22', '9246', '0', '0'), +('15', '59', '22', '21509', '0', '0'), +('15', '59', '1', '14701', '5052', '0'), +('15', '59', '1', '14702', '4250', '0'), +('15', '59', '1', '30361', '1890', '0'), +('15', '59', '1', '10165', '1683', '0'), +('15', '59', '2', '2191', '4014', '0'), +('15', '59', '2', '1519', '3207', '0'), +('15', '59', '2', '10142', '3012', '0'), +('15', '59', '2', '2294', '2800', '0'), +('15', '59', '3', '11052', '5345', '0'), +('15', '59', '3', '4505', '3250', '0'), +('15', '59', '3', '14695', '2917', '0'), +('15', '59', '3', '14692', '1667', '0'), +('15', '59', '5', '14703', '8250', '0'), +('15', '59', '5', '4501', '5690', '0'), +('15', '59', '5', '14700', '4953', '0'), +('15', '59', '5', '68291', '4614', '0'), +('15', '59', '8', '11621', '14220', '0'), +('15', '59', '8', '1546', '13933', '0'), +('15', '59', '8', '11603', '9217', '0'), +('15', '59', '8', '1409', '6312', '0'), +('15', '59', '6', '1557', '6760', '0'), +('15', '59', '6', '2286', '3314', '0'), +('15', '59', '6', '25062', '1833', '0'), +('15', '59', '6', '2331', '1824', '0'), +('15', '59', '17', '2285', '7886', '0'), +('15', '59', '17', '4342', '6886', '0'), +('15', '59', '17', '2405', '4017', '0'), +('15', '59', '17', '2348', '3050', '0'), +('15', '59', '7', '4343', '4264', '0'), +('15', '59', '7', '2289', '2980', '0'), +('15', '59', '7', '2458', '2406', '0'), +('15', '59', '7', '2342', '2329', '0'), +('15', '59', '9', '10149', '3324', '0'), +('15', '59', '9', '2290', '3149', '0'), +('15', '59', '9', '4311', '2688', '0'), +('15', '59', '9', '4406', '2567', '0'), +('15', '59', '15', '10366', '8005', '0'), +('15', '59', '15', '10151', '7200', '0'), +('15', '59', '15', '14679', '6255', '0'), +('15', '59', '15', '14678', '5104', '0'), +('15', '59', '20', '11601', '10035', '0'), +('15', '59', '20', '2742', '6997', '0'), +('15', '59', '20', '1543', '6494', '0'), +('15', '59', '20', '1365', '4200', '0'), +('15', '59', '12', '20655', '7046', '0'), +('15', '59', '12', '2923', '4654', '0'), +('15', '59', '12', '11624', '4086', '0'), +('15', '59', '12', '4345', '3894', '0'), +('15', '59', '18', '2461', '3982', '0'), +('15', '59', '18', '2292', '2886', '0'), +('15', '59', '18', '4410', '2557', '0'), +('15', '59', '18', '4346', '2331', '0'), +('15', '59', '19', '2293', '6422', '0'), +('15', '59', '19', '68239', '5069', '0'), +('15', '59', '19', '4407', '3992', '0'), +('15', '59', '19', '2337', '1757', '0'), +('15', '59', '13', '7257', '14151', '0'), +('15', '59', '13', '6692', '13290', '0'), +('15', '59', '13', '11610', '12687', '0'), +('15', '59', '13', '6691', '11768', '0'), +('15', '59', '14', '7257', '14151', '0'), +('15', '59', '14', '6692', '13290', '0'), +('15', '59', '14', '11551', '12679', '0'), +('15', '59', '14', '6691', '11768', '0'), +('15', '59', '11', '9246', '4168', '0'), +('15', '59', '11', '14762', '3181', '0'), +('15', '59', '11', '20677', '1800', '0'), +('15', '59', '11', '13353', '1500', '0'), +('15', '60', '22', '66397', '0', '3'), +('15', '60', '22', '62787', '0', '3'), +('15', '60', '22', '61948', '0', '3'), +('15', '60', '22', '21805', '0', '3'), +('15', '60', '1', '26775', '18886', '3'), +('15', '60', '1', '28962', '17654', '3'), +('15', '60', '1', '29861', '16840', '3'), +('15', '60', '1', '28945', '16338', '3'), +('15', '60', '2', '26759', '18138', '3'), +('15', '60', '2', '28909', '16358', '3'), +('15', '60', '2', '7385', '15980', '3'), +('15', '60', '2', '26581', '15935', '3'), +('15', '60', '3', '26773', '21704', '3'), +('15', '60', '3', '31233', '16387', '3'), +('15', '60', '3', '26756', '16018', '3'), +('15', '60', '3', '7387', '15949', '3'), +('15', '60', '5', '8364', '24555', '3'), +('15', '60', '5', '7868', '18151', '3'), +('15', '60', '5', '26584', '17421', '3'), +('15', '60', '5', '31460', '16359', '3'), +('15', '60', '8', '26766', '24905', '3'), +('15', '60', '8', '31471', '19188', '3'), +('15', '60', '8', '28918', '18775', '3'), +('15', '60', '8', '28959', '17364', '3'), +('15', '60', '6', '28902', '24799', '3'), +('15', '60', '6', '30551', '18125', '3'), +('15', '60', '6', '28919', '17632', '3'), +('15', '60', '6', '26753', '16577', '3'), +('15', '60', '17', '59949', '19671', '3'), +('15', '60', '17', '29456', '19671', '3'), +('15', '60', '17', '28951', '16938', '3'), +('15', '60', '17', '10845', '15915', '3'), +('15', '60', '7', '28926', '18610', '3'), +('15', '60', '7', '7868', '18151', '3'), +('15', '60', '7', '26584', '17421', '3'), +('15', '60', '7', '8288', '16590', '3'), +('15', '60', '9', '31461', '19156', '3'), +('15', '60', '9', '7868', '18151', '3'), +('15', '60', '9', '26584', '17421', '3'), +('15', '60', '9', '31460', '16359', '3'), +('15', '60', '15', '26749', '21201', '3'), +('15', '60', '15', '7870', '16711', '3'), +('15', '60', '15', '31231', '16575', '3'), +('15', '60', '15', '25211', '15874', '3'), +('15', '60', '20', '28890', '21789', '3'), +('15', '60', '20', '28957', '20630', '3'), +('15', '60', '20', '26551', '18789', '3'), +('15', '60', '20', '31235', '18384', '3'), +('15', '60', '12', '25857', '20938', '3'), +('15', '60', '12', '28967', '19063', '3'), +('15', '60', '12', '26774', '17414', '3'), +('15', '60', '12', '31227', '16773', '3'), +('15', '60', '18', '26772', '21658', '3'), +('15', '60', '18', '28965', '18192', '3'), +('15', '60', '18', '28932', '16393', '3'), +('15', '60', '18', '8289', '16324', '3'), +('15', '60', '19', '30569', '24964', '3'), +('15', '60', '19', '28888', '18853', '3'), +('15', '60', '19', '7871', '16405', '3'), +('15', '60', '19', '28934', '15967', '3'), +('15', '60', '13', '27315', '50044', '3'), +('15', '60', '13', '26809', '49899', '3'), +('15', '60', '13', '26861', '47762', '3'), +('15', '60', '13', '26849', '45161', '3'), +('15', '60', '14', '27315', '50044', '3'), +('15', '60', '14', '26809', '49899', '3'), +('15', '60', '14', '26861', '47762', '3'), +('15', '60', '14', '26859', '46473', '3'), +('15', '60', '11', '30562', '17454', '3'), +('15', '60', '11', '28948', '16701', '3'), +('15', '60', '11', '1554', '16661', '3'), +('15', '60', '11', '26563', '16419', '3'), +('15', '60', '22', '9248', '0', '2'), +('15', '60', '22', '12425', '0', '2'), +('15', '60', '22', '30014', '0', '2'), +('15', '60', '22', '10664', '0', '2'), +('15', '60', '1', '2065', '10590', '2'), +('15', '60', '1', '30391', '10420', '2'), +('15', '60', '1', '2748', '8649', '2'), +('15', '60', '1', '62234', '8550', '2'), +('15', '60', '2', '29648', '16359', '2'), +('15', '60', '2', '10913', '14712', '2'), +('15', '60', '2', '25194', '13667', '2'), +('15', '60', '2', '26025', '13488', '2'), +('15', '60', '3', '31233', '18237', '2'), +('15', '60', '3', '31244', '14494', '2'), +('15', '60', '3', '1547', '11733', '2'), +('15', '60', '3', '31328', '8575', '2'), +('15', '60', '5', '31460', '17930', '2'), +('15', '60', '5', '27266', '16322', '2'), +('15', '60', '5', '31318', '13763', '2'), +('15', '60', '5', '31234', '13385', '2'), +('15', '60', '8', '31471', '20553', '2'), +('15', '60', '8', '27261', '13526', '2'), +('15', '60', '8', '11621', '12933', '2'), +('15', '60', '8', '1628', '12646', '2'), +('15', '60', '6', '31472', '14621', '2'), +('15', '60', '6', '5723', '12049', '2'), +('15', '60', '6', '24070', '11472', '2'), +('15', '60', '6', '31240', '10944', '2'), +('15', '60', '17', '59949', '20375', '2'), +('15', '60', '17', '29456', '20375', '2'), +('15', '60', '17', '10845', '17549', '2'), +('15', '60', '17', '5447', '14860', '2'), +('15', '60', '7', '5723', '12049', '2'), +('15', '60', '7', '29485', '9949', '2'), +('15', '60', '7', '5448', '6135', '2'), +('15', '60', '7', '31371', '5449', '2'), +('15', '60', '9', '31461', '21193', '2'), +('15', '60', '9', '31460', '17930', '2'), +('15', '60', '9', '5723', '12049', '2'), +('15', '60', '9', '31354', '11431', '2'), +('15', '60', '15', '31231', '17318', '2'), +('15', '60', '15', '25211', '17102', '2'), +('15', '60', '15', '5727', '11489', '2'), +('15', '60', '15', '30385', '11126', '2'), +('15', '60', '20', '31235', '20209', '2'), +('15', '60', '20', '25858', '18490', '2'), +('15', '60', '20', '31334', '17921', '2'), +('15', '60', '20', '2510', '17580', '2'), +('15', '60', '12', '25857', '22304', '2'), +('15', '60', '12', '31227', '19474', '2'), +('15', '60', '12', '31306', '15154', '2'), +('15', '60', '12', '31402', '10041', '2'), +('15', '60', '18', '5451', '8197', '2'), +('15', '60', '18', '31332', '7148', '2'), +('15', '60', '18', '31386', '6856', '2'), +('15', '60', '18', '5465', '6551', '2'), +('15', '60', '19', '24616', '11715', '2'), +('15', '60', '19', '31327', '7700', '2'), +('15', '60', '19', '2293', '4891', '2'), +('15', '60', '19', '5452', '4874', '2'), +('15', '60', '13', '1154', '45584', '2'), +('15', '60', '13', '7207', '44321', '2'), +('15', '60', '13', '5776', '37604', '2'), +('15', '60', '13', '31241', '37376', '2'), +('15', '60', '14', '1154', '45584', '2'), +('15', '60', '14', '7207', '44321', '2'), +('15', '60', '14', '5776', '37604', '2'), +('15', '60', '14', '31241', '37376', '2'), +('15', '60', '11', '1554', '18005', '2'), +('15', '60', '11', '2698', '13909', '2'), +('15', '60', '11', '31469', '11274', '2'), +('15', '60', '11', '31303', '10999', '2'), +('15', '60', '22', '10323', '0', '1'), +('15', '60', '22', '12425', '0', '1'), +('15', '60', '22', '10664', '0', '1'), +('15', '60', '22', '9246', '0', '1'), +('15', '60', '1', '62234', '10253', '1'), +('15', '60', '1', '10912', '9837', '1'), +('15', '60', '1', '5716', '7477', '1'), +('15', '60', '1', '5715', '5433', '1'), +('15', '60', '2', '10913', '19167', '1'), +('15', '60', '2', '5799', '4889', '1'), +('15', '60', '2', '1630', '3846', '1'), +('15', '60', '2', '1519', '2774', '1'), +('15', '60', '3', '46184', '8410', '1'), +('15', '60', '3', '1625', '5852', '1'), +('15', '60', '3', '5712', '3835', '1'), +('15', '60', '3', '11052', '3209', '1'), +('15', '60', '5', '14703', '8250', '1'), +('15', '60', '5', '8285', '5195', '1'), +('15', '60', '5', '14700', '4767', '1'), +('15', '60', '5', '14709', '4690', '1'), +('15', '60', '8', '1628', '16384', '1'), +('15', '60', '8', '1622', '13737', '1'), +('15', '60', '8', '11621', '13577', '1'), +('15', '60', '8', '5779', '13041', '1'), +('15', '60', '6', '5723', '13297', '1'), +('15', '60', '6', '5706', '7771', '1'), +('15', '60', '6', '1557', '6141', '1'), +('15', '60', '6', '4315', '3767', '1'), +('15', '60', '17', '10845', '21632', '1'), +('15', '60', '17', '5461', '11534', '1'), +('15', '60', '17', '2285', '6636', '1'), +('15', '60', '17', '4342', '4100', '1'), +('15', '60', '7', '5723', '13297', '1'), +('15', '60', '7', '62046', '5918', '1'), +('15', '60', '7', '4343', '2545', '1'), +('15', '60', '7', '2289', '2101', '1'), +('15', '60', '9', '5723', '13297', '1'), +('15', '60', '9', '5794', '2620', '1'), +('15', '60', '9', '10149', '2587', '1'), +('15', '60', '9', '14650', '2428', '1'), +('15', '60', '15', '5727', '12601', '1'), +('15', '60', '15', '5728', '9142', '1'), +('15', '60', '15', '10366', '8003', '1'), +('15', '60', '15', '10151', '7200', '1'), +('15', '60', '20', '1620', '11251', '1'), +('15', '60', '20', '11601', '8492', '1'), +('15', '60', '20', '2742', '5183', '1'), +('15', '60', '20', '1623', '4978', '1'), +('15', '60', '12', '20655', '5524', '1'), +('15', '60', '12', '2923', '4407', '1'), +('15', '60', '12', '11624', '2604', '1'), +('15', '60', '12', '2291', '2496', '1'), +('15', '60', '18', '5465', '8938', '1'), +('15', '60', '18', '2461', '2979', '1'), +('15', '60', '18', '4410', '2124', '1'), +('15', '60', '18', '5781', '2047', '1'), +('15', '60', '19', '24616', '12658', '1'), +('15', '60', '19', '2293', '5666', '1'), +('15', '60', '19', '68239', '4011', '1'), +('15', '60', '19', '4318', '3571', '1'), +('15', '60', '13', '7207', '44321', '1'), +('15', '60', '13', '24609', '28115', '1'), +('15', '60', '13', '5748', '24182', '1'), +('15', '60', '13', '7205', '22029', '1'), +('15', '60', '14', '7207', '44321', '1'), +('15', '60', '14', '24609', '28115', '1'), +('15', '60', '14', '5748', '24182', '1'), +('15', '60', '14', '5722', '20327', '1'), +('15', '60', '11', '46178', '8792', '1'), +('15', '60', '11', '79631', '6673', '1'), +('15', '60', '11', '5803', '5727', '1'), +('15', '60', '11', '7205', '5602', '1'), +('15', '61', '22', '66397', '0', '3'), +('15', '61', '22', '62787', '0', '3'), +('15', '61', '22', '61948', '0', '3'), +('15', '61', '22', '21805', '0', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '61', '1', '26775', '18888', '3'), +('15', '61', '1', '28962', '17655', '3'), +('15', '61', '1', '29861', '16844', '3'), +('15', '61', '1', '28945', '16339', '3'), +('15', '61', '2', '26759', '18138', '3'), +('15', '61', '2', '28909', '16359', '3'), +('15', '61', '2', '7385', '15983', '3'), +('15', '61', '2', '26581', '15936', '3'), +('15', '61', '3', '26773', '21707', '3'), +('15', '61', '3', '31233', '16389', '3'), +('15', '61', '3', '26756', '16019', '3'), +('15', '61', '3', '7387', '15950', '3'), +('15', '61', '5', '8364', '24558', '3'), +('15', '61', '5', '7868', '18153', '3'), +('15', '61', '5', '26584', '17424', '3'), +('15', '61', '5', '31460', '16360', '3'), +('15', '61', '8', '26766', '24908', '3'), +('15', '61', '8', '31471', '19189', '3'), +('15', '61', '8', '28918', '18775', '3'), +('15', '61', '8', '28959', '17364', '3'), +('15', '61', '6', '28902', '24800', '3'), +('15', '61', '6', '30551', '18126', '3'), +('15', '61', '6', '28919', '17633', '3'), +('15', '61', '6', '26753', '16577', '3'), +('15', '61', '17', '59949', '19671', '3'), +('15', '61', '17', '29456', '19671', '3'), +('15', '61', '17', '28951', '16938', '3'), +('15', '61', '17', '10845', '15917', '3'), +('15', '61', '7', '28926', '18611', '3'), +('15', '61', '7', '7868', '18153', '3'), +('15', '61', '7', '26584', '17424', '3'), +('15', '61', '7', '8288', '16590', '3'), +('15', '61', '9', '31461', '19158', '3'), +('15', '61', '9', '7868', '18153', '3'), +('15', '61', '9', '26584', '17424', '3'), +('15', '61', '9', '31460', '16360', '3'), +('15', '61', '15', '26749', '21204', '3'), +('15', '61', '15', '7870', '16712', '3'), +('15', '61', '15', '31231', '16575', '3'), +('15', '61', '15', '25211', '15875', '3'), +('15', '61', '20', '28890', '21789', '3'), +('15', '61', '20', '28957', '20630', '3'), +('15', '61', '20', '26551', '18790', '3'), +('15', '61', '20', '31235', '18386', '3'), +('15', '61', '12', '25857', '20939', '3'), +('15', '61', '12', '28967', '19063', '3'), +('15', '61', '12', '26774', '17415', '3'), +('15', '61', '12', '31227', '16776', '3'), +('15', '61', '18', '26772', '21660', '3'), +('15', '61', '18', '28965', '18194', '3'), +('15', '61', '18', '28932', '16395', '3'), +('15', '61', '18', '8289', '16325', '3'), +('15', '61', '19', '30569', '24965', '3'), +('15', '61', '19', '28888', '18855', '3'), +('15', '61', '19', '7871', '16407', '3'), +('15', '61', '19', '28934', '15967', '3'), +('15', '61', '13', '27315', '50184', '3'), +('15', '61', '13', '26809', '50039', '3'), +('15', '61', '13', '26861', '47900', '3'), +('15', '61', '13', '1154', '45324', '3'), +('15', '61', '14', '27315', '50184', '3'), +('15', '61', '14', '26809', '50039', '3'), +('15', '61', '14', '26861', '47900', '3'), +('15', '61', '14', '26859', '46612', '3'), +('15', '61', '11', '30562', '17455', '3'), +('15', '61', '11', '28948', '16701', '3'), +('15', '61', '11', '1554', '16663', '3'), +('15', '61', '11', '26563', '16420', '3'), +('15', '62', '22', '66397', '0', '3'), +('15', '62', '22', '62787', '0', '3'), +('15', '62', '22', '61948', '0', '3'), +('15', '62', '22', '21805', '0', '3'), +('15', '62', '1', '26775', '18889', '3'), +('15', '62', '1', '28962', '17657', '3'), +('15', '62', '1', '29861', '16848', '3'), +('15', '62', '1', '28945', '16340', '3'), +('15', '62', '2', '26759', '18138', '3'), +('15', '62', '2', '28909', '16360', '3'), +('15', '62', '2', '7385', '15986', '3'), +('15', '62', '2', '26581', '15937', '3'), +('15', '62', '3', '26773', '21709', '3'), +('15', '62', '3', '31233', '16390', '3'), +('15', '62', '3', '26756', '16020', '3'), +('15', '62', '3', '7387', '15951', '3'), +('15', '62', '5', '8364', '24561', '3'), +('15', '62', '5', '7868', '18154', '3'), +('15', '62', '5', '26584', '17426', '3'), +('15', '62', '5', '31460', '16361', '3'), +('15', '62', '8', '26766', '24911', '3'), +('15', '62', '8', '31471', '19190', '3'), +('15', '62', '8', '28918', '18775', '3'), +('15', '62', '8', '28959', '17364', '3'), +('15', '62', '6', '28902', '24801', '3'), +('15', '62', '6', '30551', '18127', '3'), +('15', '62', '6', '28919', '17635', '3'), +('15', '62', '6', '26753', '16577', '3'), +('15', '62', '17', '59949', '19671', '3'), +('15', '62', '17', '29456', '19671', '3'), +('15', '62', '17', '28951', '16938', '3'), +('15', '62', '17', '10845', '15919', '3'), +('15', '62', '7', '28926', '18611', '3'), +('15', '62', '7', '7868', '18154', '3'), +('15', '62', '7', '26584', '17426', '3'), +('15', '62', '7', '8288', '16590', '3'), +('15', '62', '9', '31461', '19159', '3'), +('15', '62', '9', '7868', '18154', '3'), +('15', '62', '9', '26584', '17426', '3'), +('15', '62', '9', '31460', '16361', '3'), +('15', '62', '15', '26749', '21206', '3'), +('15', '62', '15', '7870', '16713', '3'), +('15', '62', '15', '31231', '16575', '3'), +('15', '62', '15', '25211', '15875', '3'), +('15', '62', '20', '28890', '21789', '3'), +('15', '62', '20', '28957', '20630', '3'), +('15', '62', '20', '26551', '18792', '3'), +('15', '62', '20', '31235', '18387', '3'), +('15', '62', '12', '25857', '20940', '3'), +('15', '62', '12', '28967', '19063', '3'), +('15', '62', '12', '26774', '17416', '3'), +('15', '62', '12', '31227', '16778', '3'), +('15', '62', '18', '26772', '21662', '3'), +('15', '62', '18', '28965', '18195', '3'), +('15', '62', '18', '28932', '16398', '3'), +('15', '62', '18', '8289', '16326', '3'), +('15', '62', '19', '30569', '24966', '3'), +('15', '62', '19', '28888', '18856', '3'), +('15', '62', '19', '7871', '16409', '3'), +('15', '62', '19', '28934', '15967', '3'), +('15', '62', '13', '27315', '50324', '3'), +('15', '62', '13', '26809', '50179', '3'), +('15', '62', '13', '26861', '48037', '3'), +('15', '62', '13', '1154', '45577', '3'), +('15', '62', '14', '27315', '50324', '3'), +('15', '62', '14', '26809', '50179', '3'), +('15', '62', '14', '26861', '48037', '3'), +('15', '62', '14', '26859', '46751', '3'), +('15', '62', '11', '30562', '17456', '3'), +('15', '62', '11', '28948', '16701', '3'), +('15', '62', '11', '1554', '16664', '3'), +('15', '62', '11', '26563', '16421', '3'), +('15', '63', '22', '66397', '0', '3'), +('15', '63', '22', '62787', '0', '3'), +('15', '63', '22', '61948', '0', '3'), +('15', '63', '22', '21805', '0', '3'), +('15', '63', '1', '26775', '18890', '3'), +('15', '63', '1', '28962', '17659', '3'), +('15', '63', '1', '29861', '16853', '3'), +('15', '63', '1', '28945', '16341', '3'), +('15', '63', '2', '26759', '18138', '3'), +('15', '63', '2', '28909', '16361', '3'), +('15', '63', '2', '7385', '15988', '3'), +('15', '63', '2', '26581', '15938', '3'), +('15', '63', '3', '26773', '21712', '3'), +('15', '63', '3', '31233', '16392', '3'), +('15', '63', '3', '26756', '16021', '3'), +('15', '63', '3', '7387', '15952', '3'), +('15', '63', '5', '8364', '24563', '3'), +('15', '63', '5', '7868', '18155', '3'), +('15', '63', '5', '26584', '17428', '3'), +('15', '63', '5', '31460', '16362', '3'), +('15', '63', '8', '26766', '24913', '3'), +('15', '63', '8', '31471', '19191', '3'), +('15', '63', '8', '28918', '18775', '3'), +('15', '63', '8', '28959', '17364', '3'), +('15', '63', '6', '28902', '24802', '3'), +('15', '63', '6', '30551', '18128', '3'), +('15', '63', '6', '28919', '17636', '3'), +('15', '63', '6', '26753', '16577', '3'), +('15', '63', '17', '59949', '19671', '3'), +('15', '63', '17', '29456', '19671', '3'), +('15', '63', '17', '28951', '16938', '3'), +('15', '63', '17', '10845', '15921', '3'), +('15', '63', '7', '28926', '18612', '3'), +('15', '63', '7', '7868', '18155', '3'), +('15', '63', '7', '26584', '17428', '3'), +('15', '63', '7', '8288', '16590', '3'), +('15', '63', '9', '31461', '19161', '3'), +('15', '63', '9', '7868', '18155', '3'), +('15', '63', '9', '26584', '17428', '3'), +('15', '63', '9', '31460', '16362', '3'), +('15', '63', '15', '26749', '21209', '3'), +('15', '63', '15', '7870', '16714', '3'), +('15', '63', '15', '31231', '16575', '3'), +('15', '63', '15', '25211', '15876', '3'), +('15', '63', '20', '28890', '21789', '3'), +('15', '63', '20', '28957', '20630', '3'), +('15', '63', '20', '26551', '18793', '3'), +('15', '63', '20', '31235', '18389', '3'), +('15', '63', '12', '25857', '20941', '3'), +('15', '63', '12', '28967', '19063', '3'), +('15', '63', '12', '26774', '17417', '3'), +('15', '63', '12', '31227', '16781', '3'), +('15', '63', '18', '26772', '21663', '3'), +('15', '63', '18', '28965', '18197', '3'), +('15', '63', '18', '28932', '16400', '3'), +('15', '63', '18', '8289', '16327', '3'), +('15', '63', '19', '30569', '24967', '3'), +('15', '63', '19', '28888', '18857', '3'), +('15', '63', '19', '7871', '16412', '3'), +('15', '63', '19', '28934', '15967', '3'), +('15', '63', '13', '27315', '50464', '3'), +('15', '63', '13', '26809', '50319', '3'), +('15', '63', '13', '26861', '48175', '3'), +('15', '63', '13', '7207', '46040', '3'), +('15', '63', '14', '27315', '50464', '3'), +('15', '63', '14', '26809', '50319', '3'), +('15', '63', '14', '26861', '48175', '3'), +('15', '63', '14', '26859', '46890', '3'), +('15', '63', '11', '30562', '17457', '3'), +('15', '63', '11', '28948', '16701', '3'), +('15', '63', '11', '1554', '16666', '3'), +('15', '63', '11', '26563', '16422', '3'), +('15', '64', '22', '66397', '0', '3'), +('15', '64', '22', '62787', '0', '3'), +('15', '64', '22', '61948', '0', '3'), +('15', '64', '22', '21805', '0', '3'), +('15', '64', '1', '26775', '18891', '3'), +('15', '64', '1', '28962', '17660', '3'), +('15', '64', '1', '29861', '16857', '3'), +('15', '64', '1', '28945', '16342', '3'), +('15', '64', '2', '26759', '18138', '3'), +('15', '64', '2', '28909', '16362', '3'), +('15', '64', '2', '7385', '15991', '3'), +('15', '64', '2', '26581', '15939', '3'), +('15', '64', '3', '26773', '21715', '3'), +('15', '64', '3', '31233', '16394', '3'), +('15', '64', '3', '26756', '16023', '3'), +('15', '64', '3', '7387', '15954', '3'), +('15', '64', '5', '8364', '24566', '3'), +('15', '64', '5', '7868', '18157', '3'), +('15', '64', '5', '26584', '17430', '3'), +('15', '64', '5', '31460', '16363', '3'), +('15', '64', '8', '26766', '24916', '3'), +('15', '64', '8', '31471', '19193', '3'), +('15', '64', '8', '28918', '18775', '3'), +('15', '64', '8', '28959', '17364', '3'), +('15', '64', '6', '28902', '24803', '3'), +('15', '64', '6', '30551', '18129', '3'), +('15', '64', '6', '28919', '17638', '3'), +('15', '64', '6', '26753', '16577', '3'), +('15', '64', '17', '59949', '19671', '3'), +('15', '64', '17', '29456', '19671', '3'), +('15', '64', '17', '28951', '16938', '3'), +('15', '64', '17', '10845', '15923', '3'), +('15', '64', '7', '28926', '18613', '3'), +('15', '64', '7', '7868', '18157', '3'), +('15', '64', '7', '26584', '17430', '3'), +('15', '64', '7', '8288', '16590', '3'), +('15', '64', '9', '31461', '19163', '3'), +('15', '64', '9', '7868', '18157', '3'), +('15', '64', '9', '26584', '17430', '3'), +('15', '64', '9', '31460', '16363', '3'), +('15', '64', '15', '26749', '21212', '3'), +('15', '64', '15', '7870', '16715', '3'), +('15', '64', '15', '31231', '16575', '3'), +('15', '64', '15', '25211', '15877', '3'), +('15', '64', '20', '28890', '21789', '3'), +('15', '64', '20', '28957', '20630', '3'), +('15', '64', '20', '26551', '18795', '3'), +('15', '64', '20', '31235', '18391', '3'), +('15', '64', '12', '25857', '20942', '3'), +('15', '64', '12', '28967', '19063', '3'), +('15', '64', '12', '26774', '17419', '3'), +('15', '64', '12', '31227', '16784', '3'), +('15', '64', '18', '26772', '21665', '3'), +('15', '64', '18', '28965', '18199', '3'), +('15', '64', '18', '28932', '16403', '3'), +('15', '64', '18', '8289', '16328', '3'), +('15', '64', '19', '30569', '24968', '3'), +('15', '64', '19', '28888', '18858', '3'), +('15', '64', '19', '7871', '16414', '3'), +('15', '64', '19', '28934', '15967', '3'), +('15', '64', '13', '27315', '50603', '3'), +('15', '64', '13', '26809', '50458', '3'), +('15', '64', '13', '26861', '48312', '3'), +('15', '64', '13', '7207', '46613', '3'), +('15', '64', '14', '27315', '50603', '3'), +('15', '64', '14', '26809', '50458', '3'), +('15', '64', '14', '26861', '48312', '3'), +('15', '64', '14', '26859', '47029', '3'), +('15', '64', '11', '30562', '17458', '3'), +('15', '64', '11', '28948', '16701', '3'), +('15', '64', '11', '1554', '16668', '3'), +('15', '64', '11', '26563', '16422', '3'), +('15', '65', '22', '62787', '0', '7'), +('15', '65', '22', '21810', '0', '7'), +('15', '65', '22', '66397', '0', '7'), +('15', '65', '22', '61948', '0', '7'), +('15', '65', '1', '68949', '49493', '7'), +('15', '65', '1', '69166', '49113', '7'), +('15', '65', '1', '69106', '42396', '7'), +('15', '65', '1', '69062', '41185', '7'), +('15', '65', '2', '69089', '38399', '7'), +('15', '65', '2', '28648', '38000', '7'), +('15', '65', '2', '67730', '34456', '7'), +('15', '65', '2', '68703', '27869', '7'), +('15', '65', '3', '69157', '45694', '7'), +('15', '65', '3', '69069', '41259', '7'), +('15', '65', '3', '69074', '39536', '7'), +('15', '65', '3', '69068', '39125', '7'), +('15', '65', '5', '67625', '48852', '7'), +('15', '65', '5', '69135', '44934', '7'), +('15', '65', '5', '68808', '41325', '7'), +('15', '65', '5', '69097', '40584', '7'), +('15', '65', '8', '69165', '56987', '7'), +('15', '65', '8', '69064', '53421', '7'), +('15', '65', '8', '69072', '49303', '7'), +('15', '65', '8', '69065', '41146', '7'), +('15', '65', '6', '68757', '45814', '7'), +('15', '65', '6', '69130', '45416', '7'), +('15', '65', '6', '69073', '42824', '7'), +('15', '65', '6', '69066', '42132', '7'), +('15', '65', '17', '69152', '51332', '7'), +('15', '65', '17', '68982', '39134', '7'), +('15', '65', '17', '68750', '37854', '7'), +('15', '65', '17', '47652', '33249', '7'), +('15', '65', '7', '69175', '42684', '7'), +('15', '65', '7', '69081', '40144', '7'), +('15', '65', '7', '68906', '37274', '7'), +('15', '65', '7', '16097', '31531', '7'), +('15', '65', '9', '69128', '45788', '7'), +('15', '65', '9', '69099', '41064', '7'), +('15', '65', '9', '32110', '34054', '7'), +('15', '65', '9', '68909', '34037', '7'), +('15', '65', '15', '69160', '46551', '7'), +('15', '65', '15', '69131', '44217', '7'), +('15', '65', '15', '69070', '43694', '7'), +('15', '65', '15', '69061', '41071', '7'), +('15', '65', '20', '69134', '50314', '7'), +('15', '65', '20', '67625', '48852', '7'), +('15', '65', '20', '16156', '46726', '7'), +('15', '65', '20', '68951', '40936', '7'), +('15', '65', '12', '69254', '44951', '7'), +('15', '65', '12', '69085', '38141', '7'), +('15', '65', '12', '68907', '36481', '7'), +('15', '65', '12', '68643', '36124', '7'), +('15', '65', '18', '69148', '49684', '7'), +('15', '65', '18', '68983', '37757', '7'), +('15', '65', '18', '68781', '36914', '7'), +('15', '65', '18', '28652', '33987', '7'), +('15', '65', '19', '69179', '44154', '7'), +('15', '65', '19', '69077', '40387', '7'), +('15', '65', '19', '68908', '34655', '7'), +('15', '65', '19', '68711', '31709', '7'), +('15', '65', '13', '69052', '120934', '7'), +('15', '65', '13', '22998', '94189', '7'), +('15', '65', '13', '69121', '93723', '7'), +('15', '65', '13', '69156', '82274', '7'), +('15', '65', '14', '69052', '120934', '7'), +('15', '65', '14', '22998', '94189', '7'), +('15', '65', '14', '69121', '93723', '7'), +('15', '65', '14', '69156', '82274', '7'), +('15', '65', '11', '67606', '47533', '7'), +('15', '65', '11', '69158', '45541', '7'), +('15', '65', '11', '68952', '44890', '7'), +('15', '65', '11', '69162', '42724', '7'), +('15', '65', '22', '62787', '0', '6'), +('15', '65', '22', '21810', '0', '6'), +('15', '65', '22', '66397', '0', '6'), +('15', '65', '22', '61948', '0', '6'), +('15', '65', '1', '7125', '38238', '6'), +('15', '65', '1', '7123', '35022', '6'), +('15', '65', '1', '32106', '33739', '6'), +('15', '65', '1', '4119', '30187', '6'), +('15', '65', '2', '28648', '38000', '6'), +('15', '65', '2', '28653', '23942', '6'), +('15', '65', '2', '9824', '22713', '6'), +('15', '65', '2', '68122', '20357', '6'), +('15', '65', '3', '9435', '30219', '6'), +('15', '65', '3', '29174', '28878', '6'), +('15', '65', '3', '12592', '26963', '6'), +('15', '65', '3', '9481', '23824', '6'), +('15', '65', '5', '7769', '40032', '6'), +('15', '65', '5', '8977', '33774', '6'), +('15', '65', '5', '28654', '31632', '6'), +('15', '65', '5', '8774', '28027', '6'), +('15', '65', '8', '15805', '35369', '6'), +('15', '65', '8', '15842', '30324', '6'), +('15', '65', '8', '15847', '30074', '6'), +('15', '65', '8', '21998', '28195', '6'), +('15', '65', '6', '13674', '39137', '6'), +('15', '65', '6', '28658', '30037', '6'), +('15', '65', '6', '13673', '29524', '6'), +('15', '65', '6', '19144', '29382', '6'), +('15', '65', '17', '47652', '33249', '6'), +('15', '65', '17', '14943', '28191', '6'), +('15', '65', '17', '69403', '26704', '6'), +('15', '65', '17', '68078', '24664', '6'), +('15', '65', '7', '16097', '31531', '6'), +('15', '65', '7', '21994', '27169', '6'), +('15', '65', '7', '11450', '25553', '6'), +('15', '65', '7', '27648', '21461', '6'), +('15', '65', '9', '32110', '34054', '6'), +('15', '65', '9', '16097', '31531', '6'), +('15', '65', '9', '28667', '30213', '6'), +('15', '65', '9', '11054', '29917', '6'), +('15', '65', '15', '26989', '34769', '6'), +('15', '65', '15', '10948', '30539', '6'), +('15', '65', '15', '26993', '30249', '6'), +('15', '65', '15', '9959', '30243', '6'), +('15', '65', '20', '16156', '46726', '6'), +('15', '65', '20', '16097', '31531', '6'), +('15', '65', '20', '28663', '30929', '6'), +('15', '65', '20', '15927', '30212', '6'), +('15', '65', '12', '27000', '32655', '6'), +('15', '65', '12', '13553', '25782', '6'), +('15', '65', '12', '62469', '21944', '6'), +('15', '65', '12', '25857', '20943', '6'), +('15', '65', '18', '28652', '33987', '6'), +('15', '65', '18', '16787', '29109', '6'), +('15', '65', '18', '16605', '22992', '6'), +('15', '65', '18', '26772', '21667', '6'), +('15', '65', '19', '19094', '29861', '6'), +('15', '65', '19', '26986', '28134', '6'), +('15', '65', '19', '30569', '24968', '6'), +('15', '65', '19', '20032', '24591', '6'), +('15', '65', '13', '22998', '94189', '6'), +('15', '65', '13', '22894', '65426', '6'), +('15', '65', '13', '26737', '61905', '6'), +('15', '65', '13', '26740', '61075', '6'), +('15', '65', '14', '22998', '94189', '6'), +('15', '65', '14', '22894', '65426', '6'), +('15', '65', '14', '26737', '61905', '6'), +('15', '65', '14', '26740', '61075', '6'), +('15', '65', '11', '26987', '39202', '6'), +('15', '65', '11', '20496', '36687', '6'), +('15', '65', '11', '20625', '30274', '6'), +('15', '65', '11', '9574', '29741', '6'), +('15', '65', '22', '62787', '0', '5'), +('15', '65', '22', '21810', '0', '5'), +('15', '65', '22', '66397', '0', '5'), +('15', '65', '22', '61948', '0', '5'), +('15', '65', '1', '7125', '38238', '5'), +('15', '65', '1', '7123', '35022', '5'), +('15', '65', '1', '32106', '33739', '5'), +('15', '65', '1', '4119', '30187', '5'), +('15', '65', '2', '28648', '38000', '5'), +('15', '65', '2', '28653', '23942', '5'), +('15', '65', '2', '9824', '22713', '5'), +('15', '65', '2', '9586', '18627', '5'), +('15', '65', '3', '9435', '30219', '5'), +('15', '65', '3', '29174', '28878', '5'), +('15', '65', '3', '12592', '26963', '5'), +('15', '65', '3', '9481', '23824', '5'), +('15', '65', '5', '7769', '40032', '5'), +('15', '65', '5', '8977', '33774', '5'), +('15', '65', '5', '28654', '31632', '5'), +('15', '65', '5', '8774', '28027', '5'), +('15', '65', '8', '15805', '35369', '5'), +('15', '65', '8', '15842', '30324', '5'), +('15', '65', '8', '15847', '30074', '5'), +('15', '65', '8', '21998', '28195', '5'), +('15', '65', '6', '13674', '39137', '5'), +('15', '65', '6', '28658', '30037', '5'), +('15', '65', '6', '13673', '29524', '5'), +('15', '65', '6', '19144', '29382', '5'), +('15', '65', '17', '47652', '33249', '5'), +('15', '65', '17', '14943', '28191', '5'), +('15', '65', '17', '29456', '19671', '5'), +('15', '65', '17', '59949', '19671', '5'), +('15', '65', '7', '16097', '31531', '5'), +('15', '65', '7', '21994', '27169', '5'), +('15', '65', '7', '11450', '25553', '5'), +('15', '65', '7', '27648', '21461', '5'), +('15', '65', '9', '32110', '34054', '5'), +('15', '65', '9', '16097', '31531', '5'), +('15', '65', '9', '28667', '30213', '5'), +('15', '65', '9', '11054', '29917', '5'), +('15', '65', '15', '26989', '34769', '5'), +('15', '65', '15', '10948', '30539', '5'), +('15', '65', '15', '26993', '30249', '5'), +('15', '65', '15', '9959', '30243', '5'), +('15', '65', '20', '16156', '46726', '5'), +('15', '65', '20', '16097', '31531', '5'), +('15', '65', '20', '28663', '30929', '5'), +('15', '65', '20', '15927', '30212', '5'), +('15', '65', '12', '27000', '32655', '5'), +('15', '65', '12', '13553', '25782', '5'), +('15', '65', '12', '25857', '20943', '5'), +('15', '65', '12', '11879', '19376', '5'), +('15', '65', '18', '28652', '33987', '5'), +('15', '65', '18', '16787', '29109', '5'), +('15', '65', '18', '16605', '22992', '5'), +('15', '65', '18', '26772', '21667', '5'), +('15', '65', '19', '19094', '29861', '5'), +('15', '65', '19', '26986', '28134', '5'), +('15', '65', '19', '30569', '24968', '5'), +('15', '65', '19', '20032', '24591', '5'), +('15', '65', '13', '22998', '94189', '5'), +('15', '65', '13', '22894', '65426', '5'), +('15', '65', '13', '26737', '61905', '5'), +('15', '65', '13', '26740', '61075', '5'), +('15', '65', '14', '22998', '94189', '5'), +('15', '65', '14', '22894', '65426', '5'), +('15', '65', '14', '26737', '61905', '5'), +('15', '65', '14', '26740', '61075', '5'), +('15', '65', '11', '26987', '39202', '5'), +('15', '65', '11', '20496', '36687', '5'), +('15', '65', '11', '20625', '30274', '5'), +('15', '65', '11', '9574', '29741', '5'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '65', '22', '62787', '0', '4'), +('15', '65', '22', '21810', '0', '4'), +('15', '65', '22', '66397', '0', '4'), +('15', '65', '22', '61948', '0', '4'), +('15', '65', '1', '7125', '38238', '4'), +('15', '65', '1', '7123', '35022', '4'), +('15', '65', '1', '32106', '33739', '4'), +('15', '65', '1', '4119', '30187', '4'), +('15', '65', '2', '28648', '38000', '4'), +('15', '65', '2', '28653', '23942', '4'), +('15', '65', '2', '9824', '22713', '4'), +('15', '65', '2', '9586', '18627', '4'), +('15', '65', '3', '9435', '30219', '4'), +('15', '65', '3', '29174', '28878', '4'), +('15', '65', '3', '12592', '26963', '4'), +('15', '65', '3', '9481', '23824', '4'), +('15', '65', '5', '7769', '40032', '4'), +('15', '65', '5', '8977', '33774', '4'), +('15', '65', '5', '28654', '31632', '4'), +('15', '65', '5', '8774', '28027', '4'), +('15', '65', '8', '15805', '35369', '4'), +('15', '65', '8', '15842', '30324', '4'), +('15', '65', '8', '15847', '30074', '4'), +('15', '65', '8', '21998', '28195', '4'), +('15', '65', '6', '13674', '39137', '4'), +('15', '65', '6', '28658', '30037', '4'), +('15', '65', '6', '13673', '29524', '4'), +('15', '65', '6', '19144', '29382', '4'), +('15', '65', '17', '47652', '33249', '4'), +('15', '65', '17', '14943', '28191', '4'), +('15', '65', '17', '29456', '19671', '4'), +('15', '65', '17', '59949', '19671', '4'), +('15', '65', '7', '16097', '31531', '4'), +('15', '65', '7', '21994', '27169', '4'), +('15', '65', '7', '11450', '25553', '4'), +('15', '65', '7', '27648', '21461', '4'), +('15', '65', '9', '32110', '34054', '4'), +('15', '65', '9', '16097', '31531', '4'), +('15', '65', '9', '28667', '30213', '4'), +('15', '65', '9', '11054', '29917', '4'), +('15', '65', '15', '26989', '34769', '4'), +('15', '65', '15', '10948', '30539', '4'), +('15', '65', '15', '26993', '30249', '4'), +('15', '65', '15', '9959', '30243', '4'), +('15', '65', '20', '16156', '46726', '4'), +('15', '65', '20', '16097', '31531', '4'), +('15', '65', '20', '28663', '30929', '4'), +('15', '65', '20', '15927', '30212', '4'), +('15', '65', '12', '27000', '32655', '4'), +('15', '65', '12', '13553', '25782', '4'), +('15', '65', '12', '25857', '20943', '4'), +('15', '65', '12', '11879', '19376', '4'), +('15', '65', '18', '28652', '33987', '4'), +('15', '65', '18', '16787', '29109', '4'), +('15', '65', '18', '16605', '22992', '4'), +('15', '65', '18', '26772', '21667', '4'), +('15', '65', '19', '19094', '29861', '4'), +('15', '65', '19', '26986', '28134', '4'), +('15', '65', '19', '30569', '24968', '4'), +('15', '65', '19', '20032', '24591', '4'), +('15', '65', '13', '22998', '94189', '4'), +('15', '65', '13', '22894', '65426', '4'), +('15', '65', '13', '26737', '61905', '4'), +('15', '65', '13', '26740', '61075', '4'), +('15', '65', '14', '22998', '94189', '4'), +('15', '65', '14', '22894', '65426', '4'), +('15', '65', '14', '26737', '61905', '4'), +('15', '65', '14', '26740', '61075', '4'), +('15', '65', '11', '26987', '39202', '4'), +('15', '65', '11', '20496', '36687', '4'), +('15', '65', '11', '20625', '30274', '4'), +('15', '65', '11', '9574', '29741', '4'), +('15', '66', '22', '62787', '0', '7'), +('15', '66', '22', '21810', '0', '7'), +('15', '66', '22', '66397', '0', '7'), +('15', '66', '22', '61948', '0', '7'), +('15', '66', '1', '68949', '49498', '7'), +('15', '66', '1', '69166', '49117', '7'), +('15', '66', '1', '69106', '42400', '7'), +('15', '66', '1', '69062', '41188', '7'), +('15', '66', '2', '69089', '38402', '7'), +('15', '66', '2', '28648', '38002', '7'), +('15', '66', '2', '67730', '34459', '7'), +('15', '66', '2', '68703', '27872', '7'), +('15', '66', '3', '69157', '45698', '7'), +('15', '66', '3', '69069', '41262', '7'), +('15', '66', '3', '69074', '39540', '7'), +('15', '66', '3', '69068', '39129', '7'), +('15', '66', '5', '67625', '48856', '7'), +('15', '66', '5', '69135', '44939', '7'), +('15', '66', '5', '68808', '41328', '7'), +('15', '66', '5', '69097', '40588', '7'), +('15', '66', '8', '69165', '56991', '7'), +('15', '66', '8', '69064', '53425', '7'), +('15', '66', '8', '69072', '49307', '7'), +('15', '66', '8', '69065', '41149', '7'), +('15', '66', '6', '68757', '45817', '7'), +('15', '66', '6', '69130', '45418', '7'), +('15', '66', '6', '69073', '42827', '7'), +('15', '66', '6', '69066', '42135', '7'), +('15', '66', '17', '69152', '51336', '7'), +('15', '66', '17', '68982', '39138', '7'), +('15', '66', '17', '68750', '37858', '7'), +('15', '66', '17', '47652', '33253', '7'), +('15', '66', '7', '69175', '42688', '7'), +('15', '66', '7', '69081', '40147', '7'), +('15', '66', '7', '68906', '37278', '7'), +('15', '66', '7', '16097', '31535', '7'), +('15', '66', '9', '69128', '45791', '7'), +('15', '66', '9', '69099', '41066', '7'), +('15', '66', '9', '32110', '34057', '7'), +('15', '66', '9', '68909', '34040', '7'), +('15', '66', '15', '69160', '46553', '7'), +('15', '66', '15', '69131', '44220', '7'), +('15', '66', '15', '69070', '43697', '7'), +('15', '66', '15', '69061', '41075', '7'), +('15', '66', '20', '69134', '50318', '7'), +('15', '66', '20', '67625', '48856', '7'), +('15', '66', '20', '16156', '46730', '7'), +('15', '66', '20', '68951', '40940', '7'), +('15', '66', '12', '69254', '44955', '7'), +('15', '66', '12', '69085', '38143', '7'), +('15', '66', '12', '68907', '36484', '7'), +('15', '66', '12', '68643', '36126', '7'), +('15', '66', '18', '69148', '49687', '7'), +('15', '66', '18', '68983', '37760', '7'), +('15', '66', '18', '68781', '36918', '7'), +('15', '66', '18', '28652', '33989', '7'), +('15', '66', '19', '69179', '44158', '7'), +('15', '66', '19', '69077', '40391', '7'), +('15', '66', '19', '68908', '34658', '7'), +('15', '66', '19', '68711', '31712', '7'), +('15', '66', '13', '69052', '121623', '7'), +('15', '66', '13', '22998', '94775', '7'), +('15', '66', '13', '69121', '93863', '7'), +('15', '66', '13', '69156', '82276', '7'), +('15', '66', '14', '69052', '121623', '7'), +('15', '66', '14', '22998', '94775', '7'), +('15', '66', '14', '69121', '93863', '7'), +('15', '66', '14', '69156', '82276', '7'), +('15', '66', '11', '67606', '47537', '7'), +('15', '66', '11', '69158', '45545', '7'), +('15', '66', '11', '68952', '44894', '7'), +('15', '66', '11', '69162', '42729', '7'), +('15', '67', '22', '62787', '0', '7'), +('15', '67', '22', '21810', '0', '7'), +('15', '67', '22', '66397', '0', '7'), +('15', '67', '22', '61948', '0', '7'), +('15', '67', '1', '68949', '49502', '7'), +('15', '67', '1', '69166', '49120', '7'), +('15', '67', '1', '69106', '42404', '7'), +('15', '67', '1', '69062', '41191', '7'), +('15', '67', '2', '69089', '38406', '7'), +('15', '67', '2', '28648', '38004', '7'), +('15', '67', '2', '67730', '34463', '7'), +('15', '67', '2', '68703', '27875', '7'), +('15', '67', '3', '69157', '45701', '7'), +('15', '67', '3', '69069', '41264', '7'), +('15', '67', '3', '69074', '39543', '7'), +('15', '67', '3', '69068', '39133', '7'), +('15', '67', '5', '67625', '48860', '7'), +('15', '67', '5', '69135', '44943', '7'), +('15', '67', '5', '68808', '41332', '7'), +('15', '67', '5', '69097', '40592', '7'), +('15', '67', '8', '69165', '56995', '7'), +('15', '67', '8', '69064', '53428', '7'), +('15', '67', '8', '69072', '49311', '7'), +('15', '67', '8', '69065', '41152', '7'), +('15', '67', '6', '68757', '45820', '7'), +('15', '67', '6', '69130', '45419', '7'), +('15', '67', '6', '69073', '42829', '7'), +('15', '67', '6', '69066', '42138', '7'), +('15', '67', '17', '69152', '51340', '7'), +('15', '67', '17', '68982', '39142', '7'), +('15', '67', '17', '68750', '37861', '7'), +('15', '67', '17', '47652', '33258', '7'), +('15', '67', '7', '69175', '42691', '7'), +('15', '67', '7', '69081', '40151', '7'), +('15', '67', '7', '68906', '37282', '7'), +('15', '67', '7', '16097', '31538', '7'), +('15', '67', '9', '69128', '45794', '7'), +('15', '67', '9', '69099', '41069', '7'), +('15', '67', '9', '32110', '34060', '7'), +('15', '67', '9', '68909', '34042', '7'), +('15', '67', '15', '69160', '46555', '7'), +('15', '67', '15', '69131', '44222', '7'), +('15', '67', '15', '69070', '43700', '7'), +('15', '67', '15', '69061', '41079', '7'), +('15', '67', '20', '69134', '50322', '7'), +('15', '67', '20', '67625', '48860', '7'), +('15', '67', '20', '16156', '46733', '7'), +('15', '67', '20', '68951', '40944', '7'), +('15', '67', '12', '69254', '44958', '7'), +('15', '67', '12', '69085', '38146', '7'), +('15', '67', '12', '68907', '36487', '7'), +('15', '67', '12', '68643', '36129', '7'), +('15', '67', '18', '69148', '49691', '7'), +('15', '67', '18', '68983', '37764', '7'), +('15', '67', '18', '68781', '36922', '7'), +('15', '67', '18', '28652', '33992', '7'), +('15', '67', '19', '69179', '44162', '7'), +('15', '67', '19', '69077', '40394', '7'), +('15', '67', '19', '68908', '34662', '7'), +('15', '67', '19', '68711', '31714', '7'), +('15', '67', '13', '69052', '122312', '7'), +('15', '67', '13', '22998', '95361', '7'), +('15', '67', '13', '69121', '94003', '7'), +('15', '67', '13', '69156', '82277', '7'), +('15', '67', '14', '69052', '122312', '7'), +('15', '67', '14', '22998', '95361', '7'), +('15', '67', '14', '69121', '94003', '7'), +('15', '67', '14', '69156', '82277', '7'), +('15', '67', '11', '67606', '47541', '7'), +('15', '67', '11', '69158', '45548', '7'), +('15', '67', '11', '68952', '44897', '7'), +('15', '67', '11', '69162', '42735', '7'), +('15', '68', '22', '62787', '0', '7'), +('15', '68', '22', '21810', '0', '7'), +('15', '68', '22', '66397', '0', '7'), +('15', '68', '22', '61948', '0', '7'), +('15', '68', '1', '68949', '49507', '7'), +('15', '68', '1', '69166', '49124', '7'), +('15', '68', '1', '69106', '42408', '7'), +('15', '68', '1', '69062', '41194', '7'), +('15', '68', '2', '69089', '38409', '7'), +('15', '68', '2', '28648', '38006', '7'), +('15', '68', '2', '67730', '34467', '7'), +('15', '68', '2', '68703', '27878', '7'), +('15', '68', '3', '69157', '45705', '7'), +('15', '68', '3', '69069', '41267', '7'), +('15', '68', '3', '69074', '39546', '7'), +('15', '68', '3', '69068', '39137', '7'), +('15', '68', '5', '67625', '48863', '7'), +('15', '68', '5', '69135', '44947', '7'), +('15', '68', '5', '68808', '41336', '7'), +('15', '68', '5', '69097', '40597', '7'), +('15', '68', '8', '69165', '56998', '7'), +('15', '68', '8', '69064', '53432', '7'), +('15', '68', '8', '69072', '49314', '7'), +('15', '68', '8', '69065', '41155', '7'), +('15', '68', '6', '68757', '45823', '7'), +('15', '68', '6', '69130', '45421', '7'), +('15', '68', '6', '69073', '42832', '7'), +('15', '68', '6', '69066', '42141', '7'), +('15', '68', '17', '69152', '51345', '7'), +('15', '68', '17', '68982', '39145', '7'), +('15', '68', '17', '68750', '37865', '7'), +('15', '68', '17', '47652', '33262', '7'), +('15', '68', '7', '69175', '42695', '7'), +('15', '68', '7', '69081', '40154', '7'), +('15', '68', '7', '68906', '37286', '7'), +('15', '68', '7', '16097', '31542', '7'), +('15', '68', '9', '69128', '45798', '7'), +('15', '68', '9', '69099', '41072', '7'), +('15', '68', '9', '32110', '34063', '7'), +('15', '68', '9', '68909', '34045', '7'), +('15', '68', '15', '69160', '46556', '7'), +('15', '68', '15', '69131', '44225', '7'), +('15', '68', '15', '69070', '43703', '7'), +('15', '68', '15', '69061', '41083', '7'), +('15', '68', '20', '69134', '50326', '7'), +('15', '68', '20', '67625', '48863', '7'), +('15', '68', '20', '16156', '46737', '7'), +('15', '68', '20', '68951', '40948', '7'), +('15', '68', '12', '69254', '44962', '7'), +('15', '68', '12', '69085', '38148', '7'), +('15', '68', '12', '68907', '36489', '7'), +('15', '68', '12', '68643', '36132', '7'), +('15', '68', '18', '69148', '49695', '7'), +('15', '68', '18', '68983', '37767', '7'), +('15', '68', '18', '68781', '36926', '7'), +('15', '68', '18', '28652', '33995', '7'), +('15', '68', '19', '69179', '44166', '7'), +('15', '68', '19', '69077', '40398', '7'), +('15', '68', '19', '68908', '34665', '7'), +('15', '68', '19', '68711', '31717', '7'), +('15', '68', '13', '69052', '123001', '7'), +('15', '68', '13', '22998', '95947', '7'), +('15', '68', '13', '69121', '94143', '7'), +('15', '68', '13', '69156', '82279', '7'), +('15', '68', '14', '69052', '123001', '7'), +('15', '68', '14', '22998', '95947', '7'), +('15', '68', '14', '69121', '94143', '7'), +('15', '68', '14', '69156', '82279', '7'), +('15', '68', '11', '67606', '47544', '7'), +('15', '68', '11', '69158', '45552', '7'), +('15', '68', '11', '68952', '44901', '7'), +('15', '68', '11', '69162', '42740', '7'), +('15', '69', '22', '62787', '0', '7'), +('15', '69', '22', '21810', '0', '7'), +('15', '69', '22', '66397', '0', '7'), +('15', '69', '22', '61948', '0', '7'), +('15', '69', '1', '68949', '49511', '7'), +('15', '69', '1', '69166', '49127', '7'), +('15', '69', '1', '69106', '42412', '7'), +('15', '69', '1', '69062', '41197', '7'), +('15', '69', '2', '69089', '38412', '7'), +('15', '69', '2', '28648', '38008', '7'), +('15', '69', '2', '67730', '34470', '7'), +('15', '69', '2', '68703', '27880', '7'), +('15', '69', '3', '69157', '45708', '7'), +('15', '69', '3', '69069', '41269', '7'), +('15', '69', '3', '69074', '39549', '7'), +('15', '69', '3', '69068', '39141', '7'), +('15', '69', '5', '67625', '48867', '7'), +('15', '69', '5', '69135', '44951', '7'), +('15', '69', '5', '68808', '41339', '7'), +('15', '69', '5', '69097', '40600', '7'), +('15', '69', '8', '69165', '57002', '7'), +('15', '69', '8', '69064', '53436', '7'), +('15', '69', '8', '69072', '49318', '7'), +('15', '69', '8', '69065', '41158', '7'), +('15', '69', '6', '68757', '45826', '7'), +('15', '69', '6', '69130', '45422', '7'), +('15', '69', '6', '69073', '42834', '7'), +('15', '69', '6', '69066', '42144', '7'), +('15', '69', '17', '69152', '51348', '7'), +('15', '69', '17', '68982', '39149', '7'), +('15', '69', '17', '68750', '37868', '7'), +('15', '69', '17', '47652', '33267', '7'), +('15', '69', '7', '69175', '42698', '7'), +('15', '69', '7', '69081', '40157', '7'), +('15', '69', '7', '68906', '37290', '7'), +('15', '69', '7', '16097', '31545', '7'), +('15', '69', '9', '69128', '45800', '7'), +('15', '69', '9', '69099', '41074', '7'), +('15', '69', '9', '32110', '34066', '7'), +('15', '69', '9', '68909', '34047', '7'), +('15', '69', '15', '69160', '46558', '7'), +('15', '69', '15', '69131', '44227', '7'), +('15', '69', '15', '69070', '43706', '7'), +('15', '69', '15', '69061', '41086', '7'), +('15', '69', '20', '69134', '50330', '7'), +('15', '69', '20', '67625', '48867', '7'), +('15', '69', '20', '16156', '46740', '7'), +('15', '69', '20', '68951', '40952', '7'), +('15', '69', '12', '69254', '44965', '7'), +('15', '69', '12', '69085', '38151', '7'), +('15', '69', '12', '68907', '36492', '7'), +('15', '69', '12', '68643', '36134', '7'), +('15', '69', '18', '69148', '49698', '7'), +('15', '69', '18', '68983', '37770', '7'), +('15', '69', '18', '68781', '36929', '7'), +('15', '69', '18', '28652', '33997', '7'), +('15', '69', '19', '69179', '44170', '7'), +('15', '69', '19', '69077', '40401', '7'), +('15', '69', '19', '68908', '34669', '7'), +('15', '69', '19', '68711', '31719', '7'), +('15', '69', '13', '69052', '123690', '7'), +('15', '69', '13', '22998', '96533', '7'), +('15', '69', '13', '69121', '94283', '7'), +('15', '69', '13', '69156', '82280', '7'), +('15', '69', '14', '69052', '123690', '7'), +('15', '69', '14', '22998', '96533', '7'), +('15', '69', '14', '69121', '94283', '7'), +('15', '69', '14', '69156', '82280', '7'), +('15', '69', '11', '67606', '47548', '7'), +('15', '69', '11', '69158', '45555', '7'), +('15', '69', '11', '68952', '44904', '7'), +('15', '69', '11', '69162', '42745', '7'), +('15', '70', '22', '66397', '0', '11'), +('15', '70', '22', '62787', '0', '11'), +('15', '70', '22', '61948', '0', '11'), +('15', '70', '22', '21805', '0', '11'), +('15', '70', '1', '39276', '66835', '11'), +('15', '70', '1', '83594', '65687', '11'), +('15', '70', '1', '39343', '60860', '11'), +('15', '70', '1', '51705', '59006', '11'), +('15', '70', '2', '70951', '61306', '11'), +('15', '70', '2', '83562', '57868', '11'), +('15', '70', '2', '83542', '49350', '11'), +('15', '70', '2', '47210', '44700', '11'), +('15', '70', '3', '39368', '66170', '11'), +('15', '70', '3', '39361', '63998', '11'), +('15', '70', '3', '83658', '60879', '11'), +('15', '70', '3', '39338', '60201', '11'), +('15', '70', '5', '39349', '69895', '11'), +('15', '70', '5', '39366', '66444', '11'), +('15', '70', '5', '39340', '59664', '11'), +('15', '70', '5', '39262', '58982', '11'), +('15', '70', '8', '39330', '65765', '11'), +('15', '70', '8', '83659', '61532', '11'), +('15', '70', '8', '39286', '59932', '11'), +('15', '70', '8', '39352', '59828', '11'), +('15', '70', '6', '39367', '69871', '11'), +('15', '70', '6', '83660', '60585', '11'), +('15', '70', '6', '39348', '60064', '11'), +('15', '70', '6', '39362', '59894', '11'), +('15', '70', '17', '70956', '114948', '11'), +('15', '70', '17', '83605', '74345', '11'), +('15', '70', '17', '69152', '51353', '11'), +('15', '70', '17', '70702', '49099', '11'), +('15', '70', '7', '39357', '62731', '11'), +('15', '70', '7', '83566', '57963', '11'), +('15', '70', '7', '70952', '51791', '11'), +('15', '70', '7', '39220', '50458', '11'), +('15', '70', '9', '39346', '63844', '11'), +('15', '70', '9', '51708', '61398', '11'), +('15', '70', '9', '83654', '60662', '11'), +('15', '70', '9', '39297', '58674', '11'), +('15', '70', '15', '39374', '70205', '11'), +('15', '70', '15', '51703', '59671', '11'), +('15', '70', '15', '83661', '59316', '11'), +('15', '70', '15', '39321', '57675', '11'), +('15', '70', '20', '39339', '64623', '11'), +('15', '70', '20', '39360', '60401', '11'), +('15', '70', '20', '39350', '59817', '11'), +('15', '70', '20', '83650', '59237', '11'), +('15', '70', '12', '83570', '54292', '11'), +('15', '70', '12', '47214', '52416', '11'), +('15', '70', '12', '70954', '49381', '11'), +('15', '70', '12', '83496', '47202', '11'), +('15', '70', '18', '83609', '64090', '11'), +('15', '70', '18', '70957', '57193', '11'), +('15', '70', '18', '69148', '49702', '11'), +('15', '70', '18', '83134', '48708', '11'), +('15', '70', '19', '39279', '57322', '11'), +('15', '70', '19', '83574', '56916', '11'), +('15', '70', '19', '70955', '51618', '11'), +('15', '70', '19', '83504', '46990', '11'), +('15', '70', '13', '83639', '160756', '11'), +('15', '70', '13', '69052', '129192', '11'), +('15', '70', '13', '39323', '120188', '11'), +('15', '70', '13', '83580', '117630', '11'), +('15', '70', '14', '83639', '160756', '11'), +('15', '70', '14', '69052', '129192', '11'), +('15', '70', '14', '39323', '120188', '11'), +('15', '70', '14', '83580', '117630', '11'), +('15', '70', '11', '39371', '69938', '11'), +('15', '70', '11', '39311', '66801', '11'), +('15', '70', '11', '83657', '63654', '11'), +('15', '70', '11', '83665', '58545', '11'), +('15', '70', '22', '62787', '0', '10'), +('15', '70', '22', '21810', '0', '10'), +('15', '70', '22', '66397', '0', '10'), +('15', '70', '22', '61948', '0', '10'), +('15', '70', '1', '83594', '65687', '10'), +('15', '70', '1', '83630', '58521', '10'), +('15', '70', '1', '83627', '56053', '10'), +('15', '70', '1', '47287', '53971', '10'), +('15', '70', '2', '70951', '61306', '10'), +('15', '70', '2', '83562', '57868', '10'), +('15', '70', '2', '83542', '49350', '10'), +('15', '70', '2', '47210', '44700', '10'), +('15', '70', '3', '83658', '60879', '10'), +('15', '70', '3', '83636', '58674', '10'), +('15', '70', '3', '89512', '55675', '10'), +('15', '70', '3', '83601', '54514', '10'), +('15', '70', '5', '70985', '56870', '10'), +('15', '70', '5', '83651', '56301', '10'), +('15', '70', '5', '83599', '55826', '10'), +('15', '70', '5', '47275', '54177', '10'), +('15', '70', '8', '83659', '61532', '10'), +('15', '70', '8', '83637', '58692', '10'), +('15', '70', '8', '69165', '57005', '10'), +('15', '70', '8', '83598', '53954', '10'), +('15', '70', '6', '83660', '60585', '10'), +('15', '70', '6', '83635', '55676', '10'), +('15', '70', '6', '70717', '55452', '10'), +('15', '70', '6', '83530', '53937', '10'), +('15', '70', '17', '70956', '114948', '10'), +('15', '70', '17', '83605', '74345', '10'), +('15', '70', '17', '69152', '51353', '10'), +('15', '70', '17', '70702', '49099', '10'), +('15', '70', '7', '83566', '57963', '10'), +('15', '70', '7', '70952', '51791', '10'), +('15', '70', '7', '83552', '49006', '10'), +('15', '70', '7', '47206', '46445', '10'), +('15', '70', '9', '83654', '60662', '10'), +('15', '70', '9', '70953', '50427', '10'), +('15', '70', '9', '83463', '47749', '10'), +('15', '70', '9', '47222', '46094', '10'), +('15', '70', '15', '83661', '59316', '10'), +('15', '70', '15', '83629', '55400', '10'), +('15', '70', '15', '83592', '55013', '10'), +('15', '70', '15', '83595', '54089', '10'), +('15', '70', '20', '83650', '59237', '10'), +('15', '70', '20', '83611', '57978', '10'), +('15', '70', '20', '47283', '57735', '10'), +('15', '70', '20', '83591', '53826', '10'), +('15', '70', '12', '83570', '54292', '10'), +('15', '70', '12', '47214', '52416', '10'), +('15', '70', '12', '70954', '49381', '10'), +('15', '70', '12', '83496', '47202', '10'), +('15', '70', '18', '83609', '64090', '10'), +('15', '70', '18', '70957', '57193', '10'), +('15', '70', '18', '69148', '49702', '10'), +('15', '70', '18', '83134', '48708', '10'), +('15', '70', '19', '83574', '56916', '10'), +('15', '70', '19', '70955', '51618', '10'), +('15', '70', '19', '83504', '46990', '10'), +('15', '70', '19', '70712', '45698', '10'), +('15', '70', '13', '83639', '160756', '10'), +('15', '70', '13', '69052', '129192', '10'), +('15', '70', '13', '83580', '117630', '10'), +('15', '70', '13', '47314', '117466', '10'), +('15', '70', '14', '83639', '160756', '10'), +('15', '70', '14', '69052', '129192', '10'), +('15', '70', '14', '83580', '117630', '10'), +('15', '70', '14', '47314', '117466', '10'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '70', '11', '83657', '63654', '10'), +('15', '70', '11', '83665', '58545', '10'), +('15', '70', '11', '83590', '56929', '10'), +('15', '70', '11', '83666', '56300', '10'), +('15', '70', '22', '62787', '0', '9'), +('15', '70', '22', '21810', '0', '9'), +('15', '70', '22', '66397', '0', '9'), +('15', '70', '22', '61948', '0', '9'), +('15', '70', '1', '47287', '53971', '9'), +('15', '70', '1', '71668', '52912', '9'), +('15', '70', '1', '71624', '52493', '9'), +('15', '70', '1', '47289', '51303', '9'), +('15', '70', '2', '70951', '61306', '9'), +('15', '70', '2', '47210', '44700', '9'), +('15', '70', '2', '69089', '38415', '9'), +('15', '70', '2', '28648', '38010', '9'), +('15', '70', '3', '47245', '53577', '9'), +('15', '70', '3', '47299', '51719', '9'), +('15', '70', '3', '47301', '48179', '9'), +('15', '70', '3', '56017', '47968', '9'), +('15', '70', '5', '70985', '56870', '9'), +('15', '70', '5', '47275', '54177', '9'), +('15', '70', '5', '47273', '53232', '9'), +('15', '70', '5', '67625', '48871', '9'), +('15', '70', '8', '69165', '57005', '9'), +('15', '70', '8', '69064', '53439', '9'), +('15', '70', '8', '71665', '52922', '9'), +('15', '70', '8', '47305', '52646', '9'), +('15', '70', '6', '70717', '55452', '9'), +('15', '70', '6', '71666', '52698', '9'), +('15', '70', '6', '47279', '50171', '9'), +('15', '70', '6', '71654', '49628', '9'), +('15', '70', '17', '70956', '114948', '9'), +('15', '70', '17', '69152', '51353', '9'), +('15', '70', '17', '70702', '49099', '9'), +('15', '70', '17', '71640', '44955', '9'), +('15', '70', '7', '70952', '51791', '9'), +('15', '70', '7', '47206', '46445', '9'), +('15', '70', '7', '69175', '42702', '9'), +('15', '70', '7', '69081', '40161', '9'), +('15', '70', '9', '70953', '50427', '9'), +('15', '70', '9', '47222', '46094', '9'), +('15', '70', '9', '69128', '45804', '9'), +('15', '70', '9', '69099', '41077', '9'), +('15', '70', '15', '47290', '51077', '9'), +('15', '70', '15', '47291', '50291', '9'), +('15', '70', '15', '47294', '50141', '9'), +('15', '70', '15', '47292', '48130', '9'), +('15', '70', '20', '47283', '57735', '9'), +('15', '70', '20', '71664', '53161', '9'), +('15', '70', '20', '47282', '51834', '9'), +('15', '70', '20', '69134', '50334', '9'), +('15', '70', '12', '47214', '52416', '9'), +('15', '70', '12', '70954', '49381', '9'), +('15', '70', '12', '71085', '46066', '9'), +('15', '70', '12', '69254', '44968', '9'), +('15', '70', '18', '70957', '57193', '9'), +('15', '70', '18', '69148', '49702', '9'), +('15', '70', '18', '83134', '48708', '9'), +('15', '70', '18', '47202', '48025', '9'), +('15', '70', '19', '70955', '51618', '9'), +('15', '70', '19', '70712', '45698', '9'), +('15', '70', '19', '47218', '44545', '9'), +('15', '70', '19', '69179', '44174', '9'), +('15', '70', '13', '69052', '129192', '9'), +('15', '70', '13', '47314', '117466', '9'), +('15', '70', '13', '47318', '111795', '9'), +('15', '70', '13', '57054', '104575', '9'), +('15', '70', '14', '69052', '129192', '9'), +('15', '70', '14', '47314', '117466', '9'), +('15', '70', '14', '47318', '111795', '9'), +('15', '70', '14', '57054', '104575', '9'), +('15', '70', '11', '47295', '51523', '9'), +('15', '70', '11', '47297', '51093', '9'), +('15', '70', '11', '71659', '49336', '9'), +('15', '70', '11', '47296', '48772', '9'), +('15', '70', '22', '62787', '0', '8'), +('15', '70', '22', '21810', '0', '8'), +('15', '70', '22', '66397', '0', '8'), +('15', '70', '22', '61948', '0', '8'), +('15', '70', '1', '47287', '53971', '8'), +('15', '70', '1', '47289', '51303', '8'), +('15', '70', '1', '68949', '49515', '8'), +('15', '70', '1', '69166', '49130', '8'), +('15', '70', '2', '70951', '61306', '8'), +('15', '70', '2', '47210', '44700', '8'), +('15', '70', '2', '69089', '38415', '8'), +('15', '70', '2', '28648', '38010', '8'), +('15', '70', '3', '47245', '53577', '8'), +('15', '70', '3', '47299', '51719', '8'), +('15', '70', '3', '47301', '48179', '8'), +('15', '70', '3', '56017', '47968', '8'), +('15', '70', '5', '47275', '54177', '8'), +('15', '70', '5', '47273', '53232', '8'), +('15', '70', '5', '67625', '48871', '8'), +('15', '70', '5', '47274', '48486', '8'), +('15', '70', '8', '69165', '57005', '8'), +('15', '70', '8', '69064', '53439', '8'), +('15', '70', '8', '47305', '52646', '8'), +('15', '70', '8', '47303', '50908', '8'), +('15', '70', '6', '70717', '55452', '8'), +('15', '70', '6', '47279', '50171', '8'), +('15', '70', '6', '47277', '48573', '8'), +('15', '70', '6', '47228', '46051', '8'), +('15', '70', '17', '70956', '114948', '8'), +('15', '70', '17', '69152', '51353', '8'), +('15', '70', '17', '70702', '49099', '8'), +('15', '70', '17', '68982', '39152', '8'), +('15', '70', '7', '70952', '51791', '8'), +('15', '70', '7', '47206', '46445', '8'), +('15', '70', '7', '69175', '42702', '8'), +('15', '70', '7', '69081', '40161', '8'), +('15', '70', '9', '70953', '50427', '8'), +('15', '70', '9', '47222', '46094', '8'), +('15', '70', '9', '69128', '45804', '8'), +('15', '70', '9', '69099', '41077', '8'), +('15', '70', '15', '47290', '51077', '8'), +('15', '70', '15', '47291', '50291', '8'), +('15', '70', '15', '47294', '50141', '8'), +('15', '70', '15', '47292', '48130', '8'), +('15', '70', '20', '47283', '57735', '8'), +('15', '70', '20', '47282', '51834', '8'), +('15', '70', '20', '69134', '50334', '8'), +('15', '70', '20', '67625', '48871', '8'), +('15', '70', '12', '47214', '52416', '8'), +('15', '70', '12', '70954', '49381', '8'), +('15', '70', '12', '71085', '46066', '8'), +('15', '70', '12', '69254', '44968', '8'), +('15', '70', '18', '70957', '57193', '8'), +('15', '70', '18', '69148', '49702', '8'), +('15', '70', '18', '47202', '48025', '8'), +('15', '70', '18', '71098', '42246', '8'), +('15', '70', '19', '70955', '51618', '8'), +('15', '70', '19', '70712', '45698', '8'), +('15', '70', '19', '47218', '44545', '8'), +('15', '70', '19', '69179', '44174', '8'), +('15', '70', '13', '69052', '127817', '8'), +('15', '70', '13', '47314', '117053', '8'), +('15', '70', '13', '47318', '111428', '8'), +('15', '70', '13', '57054', '104575', '8'), +('15', '70', '14', '69052', '127817', '8'), +('15', '70', '14', '47314', '117053', '8'), +('15', '70', '14', '47318', '111428', '8'), +('15', '70', '14', '57054', '104575', '8'), +('15', '70', '11', '47295', '51523', '8'), +('15', '70', '11', '47297', '51093', '8'), +('15', '70', '11', '47296', '48772', '8'), +('15', '70', '11', '67606', '47551', '8'), +('15', '71', '22', '66397', '0', '11'), +('15', '71', '22', '62787', '0', '11'), +('15', '71', '22', '61948', '0', '11'), +('15', '71', '22', '21805', '0', '11'), +('15', '71', '1', '39276', '66839', '11'), +('15', '71', '1', '83594', '65691', '11'), +('15', '71', '1', '39343', '60865', '11'), +('15', '71', '1', '51705', '59011', '11'), +('15', '71', '2', '70951', '61308', '11'), +('15', '71', '2', '83562', '57874', '11'), +('15', '71', '2', '83542', '49352', '11'), +('15', '71', '2', '47210', '44704', '11'), +('15', '71', '3', '39368', '66175', '11'), +('15', '71', '3', '39361', '64002', '11'), +('15', '71', '3', '83658', '60884', '11'), +('15', '71', '3', '39338', '60206', '11'), +('15', '71', '5', '39349', '69899', '11'), +('15', '71', '5', '39366', '66449', '11'), +('15', '71', '5', '39340', '59669', '11'), +('15', '71', '5', '39262', '58985', '11'), +('15', '71', '8', '39330', '65768', '11'), +('15', '71', '8', '83659', '61534', '11'), +('15', '71', '8', '39286', '59936', '11'), +('15', '71', '8', '39352', '59830', '11'), +('15', '71', '6', '39367', '69873', '11'), +('15', '71', '6', '83660', '60588', '11'), +('15', '71', '6', '39348', '60069', '11'), +('15', '71', '6', '39362', '59899', '11'), +('15', '71', '17', '70956', '112203', '11'), +('15', '71', '17', '83605', '74350', '11'), +('15', '71', '17', '69152', '51357', '11'), +('15', '71', '17', '70702', '49104', '11'), +('15', '71', '7', '39357', '62735', '11'), +('15', '71', '7', '83566', '57969', '11'), +('15', '71', '7', '70952', '51795', '11'), +('15', '71', '7', '39220', '50462', '11'), +('15', '71', '9', '39346', '63849', '11'), +('15', '71', '9', '51708', '61403', '11'), +('15', '71', '9', '83654', '60666', '11'), +('15', '71', '9', '39297', '58677', '11'), +('15', '71', '15', '39374', '70210', '11'), +('15', '71', '15', '51703', '59676', '11'), +('15', '71', '15', '83661', '59321', '11'), +('15', '71', '15', '39321', '57680', '11'), +('15', '71', '20', '39339', '64627', '11'), +('15', '71', '20', '39360', '60406', '11'), +('15', '71', '20', '39350', '59821', '11'), +('15', '71', '20', '83650', '59241', '11'), +('15', '71', '12', '83570', '54297', '11'), +('15', '71', '12', '47214', '52418', '11'), +('15', '71', '12', '70954', '49386', '11'), +('15', '71', '12', '83496', '47206', '11'), +('15', '71', '18', '83609', '64095', '11'), +('15', '71', '18', '70957', '57198', '11'), +('15', '71', '18', '69148', '49706', '11'), +('15', '71', '18', '83134', '48710', '11'), +('15', '71', '19', '39279', '57325', '11'), +('15', '71', '19', '83574', '56921', '11'), +('15', '71', '19', '70955', '51618', '11'), +('15', '71', '19', '83504', '46993', '11'), +('15', '71', '13', '83639', '161567', '11'), +('15', '71', '13', '69052', '129881', '11'), +('15', '71', '13', '39323', '120397', '11'), +('15', '71', '13', '83580', '117817', '11'), +('15', '71', '14', '83639', '161567', '11'), +('15', '71', '14', '69052', '129881', '11'), +('15', '71', '14', '39323', '120397', '11'), +('15', '71', '14', '83580', '117817', '11'), +('15', '71', '11', '39371', '69942', '11'), +('15', '71', '11', '39311', '66806', '11'), +('15', '71', '11', '83657', '63659', '11'), +('15', '71', '11', '83665', '58551', '11'), +('15', '72', '22', '66397', '0', '11'), +('15', '72', '22', '62787', '0', '11'), +('15', '72', '22', '61948', '0', '11'), +('15', '72', '22', '21805', '0', '11'), +('15', '72', '1', '39276', '66842', '11'), +('15', '72', '1', '83594', '65696', '11'), +('15', '72', '1', '39343', '60870', '11'), +('15', '72', '1', '51705', '59016', '11'), +('15', '72', '2', '70951', '61311', '11'), +('15', '72', '2', '83562', '57879', '11'), +('15', '72', '2', '83542', '49354', '11'), +('15', '72', '2', '47210', '44707', '11'), +('15', '72', '3', '39368', '66180', '11'), +('15', '72', '3', '39361', '64005', '11'), +('15', '72', '3', '83658', '60889', '11'), +('15', '72', '3', '39338', '60212', '11'), +('15', '72', '5', '39349', '69903', '11'), +('15', '72', '5', '39366', '66455', '11'), +('15', '72', '5', '39340', '59674', '11'), +('15', '72', '5', '39262', '58989', '11'), +('15', '72', '8', '39330', '65771', '11'), +('15', '72', '8', '83659', '61536', '11'), +('15', '72', '8', '39286', '59939', '11'), +('15', '72', '8', '39352', '59832', '11'), +('15', '72', '6', '39367', '69876', '11'), +('15', '72', '6', '83660', '60590', '11'), +('15', '72', '6', '39348', '60074', '11'), +('15', '72', '6', '39362', '59904', '11'), +('15', '72', '17', '70956', '109458', '11'), +('15', '72', '17', '83605', '74355', '11'), +('15', '72', '17', '69152', '51361', '11'), +('15', '72', '17', '70702', '49109', '11'), +('15', '72', '7', '39357', '62739', '11'), +('15', '72', '7', '83566', '57974', '11'), +('15', '72', '7', '70952', '51798', '11'), +('15', '72', '7', '39220', '50465', '11'), +('15', '72', '9', '39346', '63854', '11'), +('15', '72', '9', '51708', '61407', '11'), +('15', '72', '9', '83654', '60670', '11'), +('15', '72', '9', '39297', '58679', '11'), +('15', '72', '15', '39374', '70215', '11'), +('15', '72', '15', '51703', '59681', '11'), +('15', '72', '15', '83661', '59326', '11'), +('15', '72', '15', '39321', '57685', '11'), +('15', '72', '20', '39339', '64630', '11'), +('15', '72', '20', '39360', '60412', '11'), +('15', '72', '20', '39350', '59825', '11'), +('15', '72', '20', '83650', '59245', '11'), +('15', '72', '12', '83570', '54303', '11'), +('15', '72', '12', '47214', '52421', '11'), +('15', '72', '12', '70954', '49392', '11'), +('15', '72', '12', '83496', '47209', '11'), +('15', '72', '18', '83609', '64101', '11'), +('15', '72', '18', '70957', '57203', '11'), +('15', '72', '18', '69148', '49709', '11'), +('15', '72', '18', '83134', '48713', '11'), +('15', '72', '19', '39279', '57328', '11'), +('15', '72', '19', '83574', '56926', '11'), +('15', '72', '19', '70955', '51618', '11'), +('15', '72', '19', '83504', '46997', '11'), +('15', '72', '13', '83639', '162378', '11'), +('15', '72', '13', '69052', '130570', '11'), +('15', '72', '13', '39323', '120605', '11'), +('15', '72', '13', '83580', '118004', '11'), +('15', '72', '14', '83639', '162378', '11'), +('15', '72', '14', '69052', '130570', '11'), +('15', '72', '14', '39323', '120605', '11'), +('15', '72', '14', '83580', '118004', '11'), +('15', '72', '11', '39371', '69947', '11'), +('15', '72', '11', '39311', '66811', '11'), +('15', '72', '11', '83657', '63665', '11'), +('15', '72', '11', '83665', '58557', '11'), +('15', '73', '22', '66397', '0', '11'), +('15', '73', '22', '62787', '0', '11'), +('15', '73', '22', '61948', '0', '11'), +('15', '73', '22', '21805', '0', '11'), +('15', '73', '1', '39276', '66846', '11'), +('15', '73', '1', '83594', '65700', '11'), +('15', '73', '1', '39343', '60874', '11'), +('15', '73', '1', '51705', '59021', '11'), +('15', '73', '2', '70951', '61313', '11'), +('15', '73', '2', '83562', '57885', '11'), +('15', '73', '2', '83542', '49356', '11'), +('15', '73', '2', '47210', '44710', '11'), +('15', '73', '3', '39368', '66185', '11'), +('15', '73', '3', '39361', '64009', '11'), +('15', '73', '3', '83658', '60894', '11'), +('15', '73', '3', '39338', '60217', '11'), +('15', '73', '5', '39349', '69907', '11'), +('15', '73', '5', '39366', '66460', '11'), +('15', '73', '5', '39340', '59680', '11'), +('15', '73', '5', '39262', '58993', '11'), +('15', '73', '8', '39330', '65774', '11'), +('15', '73', '8', '83659', '61538', '11'), +('15', '73', '8', '39286', '59943', '11'), +('15', '73', '8', '39352', '59834', '11'), +('15', '73', '6', '39367', '69878', '11'), +('15', '73', '6', '83660', '60593', '11'), +('15', '73', '6', '39348', '60080', '11'), +('15', '73', '6', '39362', '59910', '11'), +('15', '73', '17', '70956', '106713', '11'), +('15', '73', '17', '83605', '74361', '11'), +('15', '73', '17', '69152', '51365', '11'), +('15', '73', '17', '70702', '49114', '11'), +('15', '73', '7', '39357', '62743', '11'), +('15', '73', '7', '83566', '57979', '11'), +('15', '73', '7', '70952', '51802', '11'), +('15', '73', '7', '39220', '50469', '11'), +('15', '73', '9', '39346', '63859', '11'), +('15', '73', '9', '51708', '61412', '11'), +('15', '73', '9', '83654', '60674', '11'), +('15', '73', '9', '39297', '58682', '11'), +('15', '73', '15', '39374', '70220', '11'), +('15', '73', '15', '51703', '59686', '11'), +('15', '73', '15', '83661', '59331', '11'), +('15', '73', '15', '39321', '57690', '11'), +('15', '73', '20', '39339', '64634', '11'), +('15', '73', '20', '39360', '60417', '11'), +('15', '73', '20', '39350', '59829', '11'), +('15', '73', '20', '83650', '59249', '11'), +('15', '73', '12', '83570', '54308', '11'), +('15', '73', '12', '47214', '52423', '11'), +('15', '73', '12', '70954', '49397', '11'), +('15', '73', '12', '83496', '47213', '11'), +('15', '73', '18', '83609', '64106', '11'), +('15', '73', '18', '70957', '57208', '11'), +('15', '73', '18', '69148', '49713', '11'), +('15', '73', '18', '83134', '48715', '11'), +('15', '73', '19', '39279', '57331', '11'), +('15', '73', '19', '83574', '56932', '11'), +('15', '73', '19', '70955', '51618', '11'), +('15', '73', '19', '83504', '47000', '11'), +('15', '73', '13', '83639', '163188', '11'), +('15', '73', '13', '69052', '131259', '11'), +('15', '73', '13', '39323', '120813', '11'), +('15', '73', '13', '83580', '118191', '11'), +('15', '73', '14', '83639', '163188', '11'), +('15', '73', '14', '69052', '131259', '11'), +('15', '73', '14', '39323', '120813', '11'), +('15', '73', '14', '83580', '118191', '11'), +('15', '73', '11', '39371', '69951', '11'), +('15', '73', '11', '39311', '66815', '11'), +('15', '73', '11', '83657', '63670', '11'), +('15', '73', '11', '83665', '58563', '11'), +('15', '74', '22', '66397', '0', '11'), +('15', '74', '22', '62787', '0', '11'), +('15', '74', '22', '61948', '0', '11'), +('15', '74', '22', '21805', '0', '11'), +('15', '74', '1', '39276', '66850', '11'), +('15', '74', '1', '83594', '65705', '11'), +('15', '74', '1', '39343', '60879', '11'), +('15', '74', '1', '51705', '59026', '11'), +('15', '74', '2', '70951', '61315', '11'), +('15', '74', '2', '83562', '57890', '11'), +('15', '74', '2', '83542', '49358', '11'), +('15', '74', '2', '47210', '44713', '11'), +('15', '74', '3', '39368', '66190', '11'), +('15', '74', '3', '39361', '64013', '11'), +('15', '74', '3', '83658', '60899', '11'), +('15', '74', '3', '39338', '60223', '11'), +('15', '74', '5', '39349', '69911', '11'), +('15', '74', '5', '39366', '66466', '11'), +('15', '74', '5', '39340', '59685', '11'), +('15', '74', '5', '39262', '58996', '11'), +('15', '74', '8', '39330', '65777', '11'), +('15', '74', '8', '83659', '61540', '11'), +('15', '74', '8', '39286', '59947', '11'), +('15', '74', '8', '39352', '59836', '11'), +('15', '74', '6', '39367', '69880', '11'), +('15', '74', '6', '83660', '60596', '11'), +('15', '74', '6', '39348', '60085', '11'), +('15', '74', '6', '39362', '59915', '11'), +('15', '74', '17', '70956', '103968', '11'), +('15', '74', '17', '83605', '74366', '11'), +('15', '74', '17', '69152', '51369', '11'), +('15', '74', '17', '70702', '49120', '11'), +('15', '74', '7', '39357', '62747', '11'), +('15', '74', '7', '83566', '57985', '11'), +('15', '74', '7', '70952', '51805', '11'), +('15', '74', '7', '39220', '50473', '11'), +('15', '74', '9', '39346', '63864', '11'), +('15', '74', '9', '51708', '61416', '11'), +('15', '74', '9', '83654', '60678', '11'), +('15', '74', '9', '39297', '58684', '11'), +('15', '74', '15', '39374', '70226', '11'), +('15', '74', '15', '51703', '59690', '11'), +('15', '74', '15', '83661', '59336', '11'), +('15', '74', '15', '39321', '57695', '11'), +('15', '74', '20', '39339', '64638', '11'), +('15', '74', '20', '39360', '60423', '11'), +('15', '74', '20', '39350', '59833', '11'), +('15', '74', '20', '83650', '59253', '11'), +('15', '74', '12', '83570', '54314', '11'), +('15', '74', '12', '47214', '52426', '11'), +('15', '74', '12', '70954', '49402', '11'), +('15', '74', '12', '83496', '47217', '11'), +('15', '74', '18', '83609', '64111', '11'), +('15', '74', '18', '70957', '57213', '11'), +('15', '74', '18', '69148', '49717', '11'), +('15', '74', '18', '83134', '48718', '11'), +('15', '74', '19', '39279', '57334', '11'), +('15', '74', '19', '83574', '56937', '11'), +('15', '74', '19', '70955', '51618', '11'), +('15', '74', '19', '83504', '47004', '11'), +('15', '74', '13', '83639', '163999', '11'), +('15', '74', '13', '69052', '131948', '11'), +('15', '74', '13', '39323', '121021', '11'), +('15', '74', '13', '83580', '118377', '11'), +('15', '74', '14', '83639', '163999', '11'), +('15', '74', '14', '69052', '131948', '11'), +('15', '74', '14', '39323', '121021', '11'), +('15', '74', '14', '83580', '118377', '11'), +('15', '74', '11', '39371', '69955', '11'), +('15', '74', '11', '39311', '66820', '11'), +('15', '74', '11', '83657', '63675', '11'), +('15', '74', '11', '83665', '58569', '11'), +('15', '75', '22', '61948', '0', '13'), +('15', '75', '22', '66397', '0', '13'), +('15', '75', '22', '21805', '0', '13'), +('15', '75', '22', '21807', '0', '13'), +('15', '75', '1', '80676', '92760', '13'), +('15', '75', '1', '80660', '88731', '13'), +('15', '75', '1', '80648', '88332', '13'), +('15', '75', '1', '80639', '84679', '13'), +('15', '75', '2', '53459', '75428', '13'), +('15', '75', '2', '70951', '61318', '13'), +('15', '75', '2', '83562', '57895', '13'), +('15', '75', '2', '83542', '49360', '13'), +('15', '75', '3', '80637', '88397', '13'), +('15', '75', '3', '46924', '74565', '13'), +('15', '75', '3', '46923', '74016', '13'), +('15', '75', '3', '46874', '74013', '13'), +('15', '75', '5', '80670', '93345', '13'), +('15', '75', '5', '46918', '85467', '13'), +('15', '75', '5', '80616', '84278', '13'), +('15', '75', '5', '46934', '80750', '13'), +('15', '75', '8', '80677', '96783', '13'), +('15', '75', '8', '46885', '93622', '13'), +('15', '75', '8', '80649', '84723', '13'), +('15', '75', '8', '46848', '68607', '13'), +('15', '75', '6', '80638', '97429', '13'), +('15', '75', '6', '46933', '82700', '13'), +('15', '75', '6', '46884', '82519', '13'), +('15', '75', '6', '46883', '80714', '13'), +('15', '75', '17', '70956', '101223', '13'), +('15', '75', '17', '53464', '79676', '13'), +('15', '75', '17', '83605', '74371', '13'), +('15', '75', '17', '46817', '63443', '13'), +('15', '75', '7', '53460', '76187', '13'), +('15', '75', '7', '39357', '62751', '13'), +('15', '75', '7', '83566', '57990', '13'), +('15', '75', '7', '70952', '51809', '13'), +('15', '75', '9', '46888', '82949', '13'), +('15', '75', '9', '53461', '75992', '13'), +('15', '75', '9', '39346', '63868', '13'), +('15', '75', '9', '51708', '61421', '13'), +('15', '75', '15', '79909', '98778', '13'), +('15', '75', '15', '80667', '96318', '13'), +('15', '75', '15', '80686', '93259', '13'), +('15', '75', '15', '79908', '89401', '13'), +('15', '75', '20', '80678', '105824', '13'), +('15', '75', '20', '46935', '85393', '13'), +('15', '75', '20', '80620', '80766', '13'), +('15', '75', '20', '46870', '74628', '13'), +('15', '75', '12', '53462', '84059', '13'), +('15', '75', '12', '83570', '54319', '13'), +('15', '75', '12', '47214', '52428', '13'), +('15', '75', '12', '70954', '49408', '13'), +('15', '75', '18', '53465', '78419', '13'), +('15', '75', '18', '83609', '64117', '13'), +('15', '75', '18', '70957', '57218', '13'), +('15', '75', '18', '69148', '49720', '13'), +('15', '75', '19', '53463', '76446', '13'), +('15', '75', '19', '39279', '57338', '13'), +('15', '75', '19', '83574', '56943', '13'), +('15', '75', '19', '70955', '51618', '13'), +('15', '75', '13', '46856', '190246', '13'), +('15', '75', '13', '46854', '188926', '13'), +('15', '75', '13', '83639', '168853', '13'), +('15', '75', '13', '80684', '161301', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '75', '14', '46856', '190246', '13'), +('15', '75', '14', '46854', '188926', '13'), +('15', '75', '14', '83639', '168853', '13'), +('15', '75', '14', '80684', '161301', '13'), +('15', '75', '11', '80668', '92944', '13'), +('15', '75', '11', '80618', '84258', '13'), +('15', '75', '11', '46889', '83299', '13'), +('15', '75', '11', '46850', '81075', '13'), +('15', '75', '22', '61948', '0', '12'), +('15', '75', '22', '66397', '0', '12'), +('15', '75', '22', '21805', '0', '12'), +('15', '75', '22', '21807', '0', '12'), +('15', '75', '1', '46931', '81175', '12'), +('15', '75', '1', '46866', '74992', '12'), +('15', '75', '1', '46914', '73794', '12'), +('15', '75', '1', '46865', '73749', '12'), +('15', '75', '2', '53459', '75428', '12'), +('15', '75', '2', '70951', '61318', '12'), +('15', '75', '2', '83562', '57895', '12'), +('15', '75', '2', '83542', '49360', '12'), +('15', '75', '3', '46924', '74565', '12'), +('15', '75', '3', '46923', '74016', '12'), +('15', '75', '3', '46874', '74013', '12'), +('15', '75', '3', '46902', '68486', '12'), +('15', '75', '5', '46918', '85467', '12'), +('15', '75', '5', '46934', '80750', '12'), +('15', '75', '5', '46917', '73754', '12'), +('15', '75', '5', '46868', '73717', '12'), +('15', '75', '8', '46885', '93622', '12'), +('15', '75', '8', '46848', '68607', '12'), +('15', '75', '8', '46847', '67832', '12'), +('15', '75', '8', '46898', '67354', '12'), +('15', '75', '6', '46933', '82700', '12'), +('15', '75', '6', '46884', '82519', '12'), +('15', '75', '6', '46883', '80714', '12'), +('15', '75', '6', '46896', '71072', '12'), +('15', '75', '17', '70956', '101223', '12'), +('15', '75', '17', '53464', '79676', '12'), +('15', '75', '17', '83605', '74371', '12'), +('15', '75', '17', '46817', '63443', '12'), +('15', '75', '7', '53460', '76187', '12'), +('15', '75', '7', '39357', '62751', '12'), +('15', '75', '7', '83566', '57990', '12'), +('15', '75', '7', '70952', '51809', '12'), +('15', '75', '9', '46888', '82949', '12'), +('15', '75', '9', '53461', '75992', '12'), +('15', '75', '9', '39346', '63868', '12'), +('15', '75', '9', '51708', '61421', '12'), +('15', '75', '15', '46881', '83809', '12'), +('15', '75', '15', '46912', '76366', '12'), +('15', '75', '15', '46916', '74317', '12'), +('15', '75', '15', '46915', '73821', '12'), +('15', '75', '20', '46935', '85393', '12'), +('15', '75', '20', '46870', '74628', '12'), +('15', '75', '20', '46869', '74019', '12'), +('15', '75', '20', '46920', '73455', '12'), +('15', '75', '12', '53462', '84059', '12'), +('15', '75', '12', '83570', '54319', '12'), +('15', '75', '12', '47214', '52428', '12'), +('15', '75', '12', '70954', '49408', '12'), +('15', '75', '18', '53465', '78419', '12'), +('15', '75', '18', '83609', '64117', '12'), +('15', '75', '18', '70957', '57218', '12'), +('15', '75', '18', '69148', '49720', '12'), +('15', '75', '19', '53463', '76446', '12'), +('15', '75', '19', '39279', '57338', '12'), +('15', '75', '19', '83574', '56943', '12'), +('15', '75', '19', '70955', '51618', '12'), +('15', '75', '13', '46856', '190246', '12'), +('15', '75', '13', '46854', '188926', '12'), +('15', '75', '13', '83639', '168853', '12'), +('15', '75', '13', '46878', '148007', '12'), +('15', '75', '14', '46856', '190246', '12'), +('15', '75', '14', '46854', '188926', '12'), +('15', '75', '14', '83639', '168853', '12'), +('15', '75', '14', '46878', '148007', '12'), +('15', '75', '11', '46889', '83299', '12'), +('15', '75', '11', '46850', '81075', '12'), +('15', '75', '11', '46939', '80204', '12'), +('15', '75', '11', '39371', '69960', '12'), +('15', '76', '22', '61948', '0', '13'), +('15', '76', '22', '66397', '0', '13'), +('15', '76', '22', '21805', '0', '13'), +('15', '76', '22', '21807', '0', '13'), +('15', '76', '1', '80676', '92764', '13'), +('15', '76', '1', '80660', '88737', '13'), +('15', '76', '1', '80648', '88337', '13'), +('15', '76', '1', '80639', '84685', '13'), +('15', '76', '2', '53459', '75431', '13'), +('15', '76', '2', '70951', '61320', '13'), +('15', '76', '2', '83562', '57901', '13'), +('15', '76', '2', '83542', '49362', '13'), +('15', '76', '3', '80637', '88402', '13'), +('15', '76', '3', '46924', '74570', '13'), +('15', '76', '3', '46923', '74021', '13'), +('15', '76', '3', '46874', '74018', '13'), +('15', '76', '5', '80670', '93352', '13'), +('15', '76', '5', '46918', '85472', '13'), +('15', '76', '5', '80616', '84281', '13'), +('15', '76', '5', '46934', '80756', '13'), +('15', '76', '8', '80677', '96789', '13'), +('15', '76', '8', '46885', '93629', '13'), +('15', '76', '8', '80649', '84729', '13'), +('15', '76', '8', '46848', '68612', '13'), +('15', '76', '6', '80638', '97434', '13'), +('15', '76', '6', '46933', '82705', '13'), +('15', '76', '6', '46884', '82525', '13'), +('15', '76', '6', '46883', '80721', '13'), +('15', '76', '17', '70956', '98477', '13'), +('15', '76', '17', '53464', '79678', '13'), +('15', '76', '17', '83605', '74377', '13'), +('15', '76', '17', '46817', '63447', '13'), +('15', '76', '7', '53460', '76193', '13'), +('15', '76', '7', '39357', '62755', '13'), +('15', '76', '7', '83566', '57996', '13'), +('15', '76', '7', '70952', '51813', '13'), +('15', '76', '9', '46888', '82956', '13'), +('15', '76', '9', '53461', '75997', '13'), +('15', '76', '9', '39346', '63873', '13'), +('15', '76', '9', '51708', '61425', '13'), +('15', '76', '15', '79909', '98784', '13'), +('15', '76', '15', '80667', '96324', '13'), +('15', '76', '15', '80686', '93265', '13'), +('15', '76', '15', '79908', '89406', '13'), +('15', '76', '20', '80678', '105830', '13'), +('15', '76', '20', '46935', '85399', '13'), +('15', '76', '20', '80620', '80768', '13'), +('15', '76', '20', '46870', '74632', '13'), +('15', '76', '12', '53462', '84063', '13'), +('15', '76', '12', '83570', '54324', '13'), +('15', '76', '12', '47214', '52431', '13'), +('15', '76', '12', '70954', '49413', '13'), +('15', '76', '18', '53465', '78424', '13'), +('15', '76', '18', '83609', '64122', '13'), +('15', '76', '18', '70957', '57223', '13'), +('15', '76', '18', '69148', '49724', '13'), +('15', '76', '19', '53463', '76449', '13'), +('15', '76', '19', '39279', '57341', '13'), +('15', '76', '19', '83574', '56948', '13'), +('15', '76', '19', '70955', '51618', '13'), +('15', '76', '13', '46856', '191059', '13'), +('15', '76', '13', '46854', '189739', '13'), +('15', '76', '13', '83639', '169664', '13'), +('15', '76', '13', '80684', '161305', '13'), +('15', '76', '14', '46856', '191059', '13'), +('15', '76', '14', '46854', '189739', '13'), +('15', '76', '14', '83639', '169664', '13'), +('15', '76', '14', '80684', '161305', '13'), +('15', '76', '11', '80668', '92950', '13'), +('15', '76', '11', '80618', '84264', '13'), +('15', '76', '11', '46889', '83305', '13'), +('15', '76', '11', '46850', '81080', '13'), +('15', '77', '22', '61948', '0', '13'), +('15', '77', '22', '66397', '0', '13'), +('15', '77', '22', '21805', '0', '13'), +('15', '77', '22', '21807', '0', '13'), +('15', '77', '1', '80676', '92767', '13'), +('15', '77', '1', '80660', '88743', '13'), +('15', '77', '1', '80648', '88343', '13'), +('15', '77', '1', '80639', '84691', '13'), +('15', '77', '2', '53459', '75434', '13'), +('15', '77', '2', '70951', '61323', '13'), +('15', '77', '2', '83562', '57906', '13'), +('15', '77', '2', '83542', '49364', '13'), +('15', '77', '3', '80637', '88408', '13'), +('15', '77', '3', '46924', '74575', '13'), +('15', '77', '3', '46923', '74026', '13'), +('15', '77', '3', '46874', '74024', '13'), +('15', '77', '5', '80670', '93358', '13'), +('15', '77', '5', '46918', '85477', '13'), +('15', '77', '5', '80616', '84284', '13'), +('15', '77', '5', '46934', '80763', '13'), +('15', '77', '8', '80677', '96796', '13'), +('15', '77', '8', '46885', '93635', '13'), +('15', '77', '8', '80649', '84734', '13'), +('15', '77', '8', '46848', '68618', '13'), +('15', '77', '6', '80638', '97440', '13'), +('15', '77', '6', '46933', '82711', '13'), +('15', '77', '6', '46884', '82531', '13'), +('15', '77', '6', '46883', '80727', '13'), +('15', '77', '17', '70956', '95732', '13'), +('15', '77', '17', '53464', '79681', '13'), +('15', '77', '17', '83605', '74382', '13'), +('15', '77', '17', '46817', '63451', '13'), +('15', '77', '7', '53460', '76198', '13'), +('15', '77', '7', '39357', '62759', '13'), +('15', '77', '7', '83566', '58001', '13'), +('15', '77', '7', '70952', '51816', '13'), +('15', '77', '9', '46888', '82962', '13'), +('15', '77', '9', '53461', '76002', '13'), +('15', '77', '9', '39346', '63878', '13'), +('15', '77', '9', '51708', '61430', '13'), +('15', '77', '15', '79909', '98789', '13'), +('15', '77', '15', '80667', '96331', '13'), +('15', '77', '15', '80686', '93272', '13'), +('15', '77', '15', '79908', '89411', '13'), +('15', '77', '20', '80678', '105837', '13'), +('15', '77', '20', '46935', '85405', '13'), +('15', '77', '20', '80620', '80771', '13'), +('15', '77', '20', '46870', '74637', '13'), +('15', '77', '12', '53462', '84068', '13'), +('15', '77', '12', '83570', '54330', '13'), +('15', '77', '12', '47214', '52433', '13'), +('15', '77', '12', '70954', '49419', '13'), +('15', '77', '18', '53465', '78429', '13'), +('15', '77', '18', '83609', '64127', '13'), +('15', '77', '18', '70957', '57228', '13'), +('15', '77', '18', '69148', '49728', '13'), +('15', '77', '19', '53463', '76452', '13'), +('15', '77', '19', '39279', '57344', '13'), +('15', '77', '19', '83574', '56953', '13'), +('15', '77', '19', '70955', '51618', '13'), +('15', '77', '13', '46856', '191872', '13'), +('15', '77', '13', '46854', '190552', '13'), +('15', '77', '13', '83639', '170475', '13'), +('15', '77', '13', '80684', '161310', '13'), +('15', '77', '14', '46856', '191872', '13'), +('15', '77', '14', '46854', '190552', '13'), +('15', '77', '14', '83639', '170475', '13'), +('15', '77', '14', '80684', '161310', '13'), +('15', '77', '11', '80668', '92957', '13'), +('15', '77', '11', '80618', '84269', '13'), +('15', '77', '11', '46889', '83312', '13'), +('15', '77', '11', '46850', '81085', '13'), +('15', '78', '22', '61948', '0', '13'), +('15', '78', '22', '66397', '0', '13'), +('15', '78', '22', '21805', '0', '13'), +('15', '78', '22', '21807', '0', '13'), +('15', '78', '1', '80676', '92771', '13'), +('15', '78', '1', '80660', '88750', '13'), +('15', '78', '1', '80648', '88349', '13'), +('15', '78', '1', '80639', '84696', '13'), +('15', '78', '2', '53459', '75437', '13'), +('15', '78', '2', '70951', '61325', '13'), +('15', '78', '2', '83562', '57912', '13'), +('15', '78', '2', '83542', '49366', '13'), +('15', '78', '3', '80637', '88414', '13'), +('15', '78', '3', '46924', '74581', '13'), +('15', '78', '3', '46923', '74032', '13'), +('15', '78', '3', '46874', '74030', '13'), +('15', '78', '5', '80670', '93365', '13'), +('15', '78', '5', '46918', '85482', '13'), +('15', '78', '5', '80616', '84287', '13'), +('15', '78', '5', '46934', '80769', '13'), +('15', '78', '8', '80677', '96802', '13'), +('15', '78', '8', '46885', '93642', '13'), +('15', '78', '8', '80649', '84740', '13'), +('15', '78', '8', '46848', '68623', '13'), +('15', '78', '6', '80638', '97446', '13'), +('15', '78', '6', '46933', '82716', '13'), +('15', '78', '6', '46884', '82537', '13'), +('15', '78', '6', '46883', '80734', '13'), +('15', '78', '17', '70956', '92987', '13'), +('15', '78', '17', '53464', '79683', '13'), +('15', '78', '17', '83605', '74387', '13'), +('15', '78', '17', '46817', '63455', '13'), +('15', '78', '7', '53460', '76203', '13'), +('15', '78', '7', '39357', '62763', '13'), +('15', '78', '7', '83566', '58006', '13'), +('15', '78', '7', '70952', '51820', '13'), +('15', '78', '9', '46888', '82969', '13'), +('15', '78', '9', '53461', '76007', '13'), +('15', '78', '9', '39346', '63883', '13'), +('15', '78', '9', '51708', '61434', '13'), +('15', '78', '15', '79909', '98795', '13'), +('15', '78', '15', '80667', '96337', '13'), +('15', '78', '15', '80686', '93278', '13'), +('15', '78', '15', '79908', '89416', '13'), +('15', '78', '20', '80678', '105843', '13'), +('15', '78', '20', '46935', '85411', '13'), +('15', '78', '20', '80620', '80773', '13'), +('15', '78', '20', '46870', '74642', '13'), +('15', '78', '12', '53462', '84072', '13'), +('15', '78', '12', '83570', '54335', '13'), +('15', '78', '12', '47214', '52436', '13'), +('15', '78', '12', '70954', '49424', '13'), +('15', '78', '18', '53465', '78433', '13'), +('15', '78', '18', '83609', '64133', '13'), +('15', '78', '18', '70957', '57232', '13'), +('15', '78', '18', '69148', '49732', '13'), +('15', '78', '19', '53463', '76455', '13'), +('15', '78', '19', '39279', '57347', '13'), +('15', '78', '19', '83574', '56959', '13'), +('15', '78', '19', '70955', '51618', '13'), +('15', '78', '13', '46856', '192685', '13'), +('15', '78', '13', '46854', '191365', '13'), +('15', '78', '13', '83639', '171285', '13'), +('15', '78', '13', '80684', '161314', '13'), +('15', '78', '14', '46856', '192685', '13'), +('15', '78', '14', '46854', '191365', '13'), +('15', '78', '14', '83639', '171285', '13'), +('15', '78', '14', '80684', '161314', '13'), +('15', '78', '11', '80668', '92963', '13'), +('15', '78', '11', '80618', '84275', '13'), +('15', '78', '11', '46889', '83318', '13'), +('15', '78', '11', '46850', '81090', '13'), +('15', '79', '22', '61948', '0', '13'), +('15', '79', '22', '66397', '0', '13'), +('15', '79', '22', '21805', '0', '13'), +('15', '79', '22', '21807', '0', '13'), +('15', '79', '1', '80676', '92774', '13'), +('15', '79', '1', '80660', '88756', '13'), +('15', '79', '1', '80648', '88355', '13'), +('15', '79', '1', '80639', '84702', '13'), +('15', '79', '2', '53459', '75440', '13'), +('15', '79', '2', '70951', '61327', '13'), +('15', '79', '2', '83562', '57917', '13'), +('15', '79', '2', '83542', '49368', '13'), +('15', '79', '3', '80637', '88420', '13'), +('15', '79', '3', '46924', '74586', '13'), +('15', '79', '3', '46923', '74037', '13'), +('15', '79', '3', '46874', '74035', '13'), +('15', '79', '5', '80670', '93371', '13'), +('15', '79', '5', '46918', '85487', '13'), +('15', '79', '5', '80616', '84290', '13'), +('15', '79', '5', '46934', '80776', '13'), +('15', '79', '8', '80677', '96809', '13'), +('15', '79', '8', '46885', '93648', '13'), +('15', '79', '8', '80649', '84746', '13'), +('15', '79', '8', '46848', '68629', '13'), +('15', '79', '6', '80638', '97452', '13'), +('15', '79', '6', '46933', '82722', '13'), +('15', '79', '6', '46884', '82544', '13'), +('15', '79', '6', '46883', '80740', '13'), +('15', '79', '17', '70956', '90242', '13'), +('15', '79', '17', '53464', '79685', '13'), +('15', '79', '17', '83605', '74392', '13'), +('15', '79', '17', '46817', '63459', '13'), +('15', '79', '7', '53460', '76209', '13'), +('15', '79', '7', '39357', '62767', '13'), +('15', '79', '7', '83566', '58012', '13'), +('15', '79', '7', '70952', '51823', '13'), +('15', '79', '9', '46888', '82975', '13'), +('15', '79', '9', '53461', '76012', '13'), +('15', '79', '9', '39346', '63888', '13'), +('15', '79', '9', '51708', '61439', '13'), +('15', '79', '15', '79909', '98800', '13'), +('15', '79', '15', '80667', '96344', '13'), +('15', '79', '15', '80686', '93285', '13'), +('15', '79', '15', '79908', '89421', '13'), +('15', '79', '20', '80678', '105850', '13'), +('15', '79', '20', '46935', '85418', '13'), +('15', '79', '20', '80620', '80775', '13'), +('15', '79', '20', '46870', '74646', '13'), +('15', '79', '12', '53462', '84076', '13'), +('15', '79', '12', '83570', '54341', '13'), +('15', '79', '12', '47214', '52438', '13'), +('15', '79', '12', '70954', '49429', '13'), +('15', '79', '18', '53465', '78438', '13'), +('15', '79', '18', '83609', '64138', '13'), +('15', '79', '18', '70957', '57237', '13'), +('15', '79', '18', '69148', '49735', '13'), +('15', '79', '19', '53463', '76458', '13'), +('15', '79', '19', '39279', '57351', '13'), +('15', '79', '19', '83574', '56964', '13'), +('15', '79', '19', '70955', '51618', '13'), +('15', '79', '13', '46856', '193498', '13'), +('15', '79', '13', '46854', '192178', '13'), +('15', '79', '13', '83639', '172096', '13'), +('15', '79', '13', '80684', '161319', '13'), +('15', '79', '14', '46856', '193498', '13'), +('15', '79', '14', '46854', '192178', '13'), +('15', '79', '14', '83639', '172096', '13'), +('15', '79', '14', '80684', '161319', '13'), +('15', '79', '11', '80668', '92970', '13'), +('15', '79', '11', '80618', '84280', '13'), +('15', '79', '11', '46889', '83324', '13'), +('15', '79', '11', '46850', '81094', '13'), +('15', '80', '22', '61948', '0', '14'), +('15', '80', '22', '66397', '0', '14'), +('15', '80', '22', '21805', '0', '14'), +('15', '80', '22', '21807', '0', '14'), +('15', '80', '1', '102641', '125457', '14'), +('15', '80', '1', '102597', '124985', '14'), +('15', '80', '1', '102625', '124910', '14'), +('15', '80', '1', '102639', '124152', '14'), +('15', '80', '2', '102017', '85508', '14'), +('15', '80', '2', '102269', '76933', '14'), +('15', '80', '2', '53459', '75443', '14'), +('15', '80', '2', '70951', '61330', '14'), +('15', '80', '3', '102726', '136576', '14'), +('15', '80', '3', '102598', '133249', '14'), +('15', '80', '3', '102626', '132727', '14'), +('15', '80', '3', '102725', '118727', '14'), +('15', '80', '5', '102599', '131750', '14'), +('15', '80', '5', '102627', '129002', '14'), +('15', '80', '5', '102745', '120637', '14'), +('15', '80', '5', '102551', '114987', '14'), +('15', '80', '8', '102601', '142504', '14'), +('15', '80', '8', '102629', '132728', '14'), +('15', '80', '8', '102552', '125243', '14'), +('15', '80', '8', '80677', '96815', '14'), +('15', '80', '6', '102600', '132572', '14'), +('15', '80', '6', '102628', '132167', '14'), +('15', '80', '6', '102558', '116464', '14'), +('15', '80', '6', '80638', '97457', '14'), +('15', '80', '17', '102020', '90888', '14'), +('15', '80', '17', '70956', '87497', '14'), +('15', '80', '17', '102272', '82519', '14'), +('15', '80', '17', '53464', '79688', '14'), +('15', '80', '7', '102018', '86507', '14'), +('15', '80', '7', '102270', '78330', '14'), +('15', '80', '7', '53460', '76214', '14'), +('15', '80', '7', '39357', '62771', '14'), +('15', '80', '9', '67098', '220895', '14'), +('15', '80', '9', '46888', '82982', '14'), +('15', '80', '9', '53461', '76017', '14'), +('15', '80', '9', '102289', '70995', '14'), +('15', '80', '15', '102630', '127636', '14'), +('15', '80', '15', '102636', '127375', '14'), +('15', '80', '15', '102602', '126993', '14'), +('15', '80', '15', '102637', '126328', '14'), +('15', '80', '20', '102631', '142644', '14'), +('15', '80', '20', '102603', '141905', '14'), +('15', '80', '20', '102553', '124368', '14'), +('15', '80', '20', '80678', '105856', '14'), +('15', '80', '12', '53462', '84081', '14'), +('15', '80', '12', '102267', '73413', '14'), +('15', '80', '12', '83570', '54346', '14'), +('15', '80', '12', '47214', '52441', '14'), +('15', '80', '18', '102019', '88257', '14'), +('15', '80', '18', '102271', '79912', '14'), +('15', '80', '18', '53465', '78443', '14'), +('15', '80', '18', '83609', '64143', '14'), +('15', '80', '19', '76131', '79556', '14'), +('15', '80', '19', '53463', '76461', '14'), +('15', '80', '19', '102268', '74352', '14'), +('15', '80', '19', '39279', '57354', '14'), +('15', '80', '13', '102720', '226975', '14'), +('15', '80', '13', '102665', '224617', '14'), +('15', '80', '13', '102660', '220041', '14'), +('15', '80', '13', '102655', '219639', '14'), +('15', '80', '14', '102720', '226975', '14'), +('15', '80', '14', '102665', '224617', '14'), +('15', '80', '14', '102660', '220041', '14'), +('15', '80', '14', '102661', '219881', '14'), +('15', '80', '11', '102643', '127796', '14'), +('15', '80', '11', '102747', '118353', '14'), +('15', '80', '11', '80668', '92976', '14'), +('15', '80', '11', '102747', '90306', '14'), +('15', '81', '22', '61948', '0', '14'), +('15', '81', '22', '66397', '0', '14'), +('15', '81', '22', '21805', '0', '14'), +('15', '81', '22', '21807', '0', '14'), +('15', '81', '1', '102641', '125462', '14'), +('15', '81', '1', '102597', '124991', '14'), +('15', '81', '1', '102625', '124917', '14'), +('15', '81', '1', '102639', '124157', '14'), +('15', '81', '2', '102017', '85513', '14'), +('15', '81', '2', '102269', '76937', '14'), +('15', '81', '2', '53459', '75446', '14'), +('15', '81', '2', '70951', '61332', '14'), +('15', '81', '3', '102726', '136582', '14'), +('15', '81', '3', '102598', '133254', '14'), +('15', '81', '3', '102626', '132733', '14'), +('15', '81', '3', '102725', '118731', '14'), +('15', '81', '5', '102599', '131755', '14'), +('15', '81', '5', '102627', '129006', '14'), +('15', '81', '5', '102745', '120642', '14'), +('15', '81', '5', '102551', '114990', '14'), +('15', '81', '8', '102601', '142511', '14'), +('15', '81', '8', '102629', '132732', '14'), +('15', '81', '8', '102552', '125248', '14'), +('15', '81', '8', '80677', '96822', '14'), +('15', '81', '6', '102600', '132578', '14'), +('15', '81', '6', '102628', '132172', '14'), +('15', '81', '6', '102558', '116470', '14'), +('15', '81', '6', '80638', '97463', '14'), +('15', '81', '17', '102020', '90892', '14'), +('15', '81', '17', '70956', '84752', '14'), +('15', '81', '17', '102272', '82525', '14'), +('15', '81', '17', '53464', '79690', '14'), +('15', '81', '7', '102018', '86513', '14'), +('15', '81', '7', '102270', '78335', '14'), +('15', '81', '7', '53460', '76220', '14'), +('15', '81', '7', '39357', '62775', '14'), +('15', '81', '9', '67098', '223661', '14'), +('15', '81', '9', '46888', '82988', '14'), +('15', '81', '9', '53461', '76022', '14'), +('15', '81', '9', '102289', '70998', '14'), +('15', '81', '15', '102630', '127641', '14'), +('15', '81', '15', '102636', '127381', '14'), +('15', '81', '15', '102602', '126999', '14'), +('15', '81', '15', '102637', '126333', '14'), +('15', '81', '20', '102631', '142651', '14'), +('15', '81', '20', '102603', '141911', '14'), +('15', '81', '20', '102553', '124373', '14'), +('15', '81', '20', '80678', '105862', '14'), +('15', '81', '12', '53462', '84085', '14'), +('15', '81', '12', '102267', '73417', '14'), +('15', '81', '12', '83570', '54351', '14'), +('15', '81', '12', '47214', '52443', '14'), +('15', '81', '18', '102019', '88262', '14'), +('15', '81', '18', '102271', '79918', '14'), +('15', '81', '18', '53465', '78448', '14'), +('15', '81', '18', '83609', '64148', '14'), +('15', '81', '19', '76131', '79557', '14'), +('15', '81', '19', '53463', '76464', '14'), +('15', '81', '19', '102268', '74356', '14'), +('15', '81', '19', '39279', '57357', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '81', '13', '102720', '227117', '14'), +('15', '81', '13', '102665', '224783', '14'), +('15', '81', '13', '102660', '220205', '14'), +('15', '81', '13', '102655', '219805', '14'), +('15', '81', '14', '102720', '227117', '14'), +('15', '81', '14', '102665', '224783', '14'), +('15', '81', '14', '102660', '220205', '14'), +('15', '81', '14', '102661', '220046', '14'), +('15', '81', '11', '102643', '127799', '14'), +('15', '81', '11', '102747', '118357', '14'), +('15', '81', '11', '80668', '92982', '14'), +('15', '81', '11', '102747', '90308', '14'), +('15', '82', '22', '61948', '0', '14'), +('15', '82', '22', '66397', '0', '14'), +('15', '82', '22', '21805', '0', '14'), +('15', '82', '22', '21807', '0', '14'), +('15', '82', '1', '102641', '125467', '14'), +('15', '82', '1', '102597', '124997', '14'), +('15', '82', '1', '102625', '124923', '14'), +('15', '82', '1', '102639', '124164', '14'), +('15', '82', '2', '102017', '85518', '14'), +('15', '82', '2', '102269', '76941', '14'), +('15', '82', '2', '53459', '75449', '14'), +('15', '82', '2', '70951', '61335', '14'), +('15', '82', '3', '102726', '136588', '14'), +('15', '82', '3', '102598', '133259', '14'), +('15', '82', '3', '102626', '132739', '14'), +('15', '82', '3', '102725', '118736', '14'), +('15', '82', '5', '102599', '131761', '14'), +('15', '82', '5', '102627', '129010', '14'), +('15', '82', '5', '102745', '120648', '14'), +('15', '82', '5', '102551', '114995', '14'), +('15', '82', '8', '102601', '142517', '14'), +('15', '82', '8', '102629', '132736', '14'), +('15', '82', '8', '102552', '125254', '14'), +('15', '82', '8', '80677', '96829', '14'), +('15', '82', '6', '102600', '132584', '14'), +('15', '82', '6', '102628', '132178', '14'), +('15', '82', '6', '102558', '116477', '14'), +('15', '82', '6', '80638', '97469', '14'), +('15', '82', '17', '102020', '90896', '14'), +('15', '82', '17', '102272', '82531', '14'), +('15', '82', '17', '70956', '82007', '14'), +('15', '82', '17', '53464', '79693', '14'), +('15', '82', '7', '102018', '86520', '14'), +('15', '82', '7', '102270', '78339', '14'), +('15', '82', '7', '53460', '76225', '14'), +('15', '82', '7', '39357', '62779', '14'), +('15', '82', '9', '67098', '226427', '14'), +('15', '82', '9', '46888', '82995', '14'), +('15', '82', '9', '53461', '76027', '14'), +('15', '82', '9', '102289', '71002', '14'), +('15', '82', '15', '102630', '127646', '14'), +('15', '82', '15', '102636', '127387', '14'), +('15', '82', '15', '102602', '127004', '14'), +('15', '82', '15', '102637', '126338', '14'), +('15', '82', '20', '102631', '142660', '14'), +('15', '82', '20', '102603', '141916', '14'), +('15', '82', '20', '102553', '124379', '14'), +('15', '82', '20', '80678', '105869', '14'), +('15', '82', '12', '53462', '84090', '14'), +('15', '82', '12', '102267', '73421', '14'), +('15', '82', '12', '83570', '54357', '14'), +('15', '82', '12', '47214', '52446', '14'), +('15', '82', '18', '102019', '88268', '14'), +('15', '82', '18', '102271', '79924', '14'), +('15', '82', '18', '53465', '78453', '14'), +('15', '82', '18', '83609', '64154', '14'), +('15', '82', '19', '76131', '79559', '14'), +('15', '82', '19', '53463', '76467', '14'), +('15', '82', '19', '102268', '74360', '14'), +('15', '82', '19', '39279', '57360', '14'), +('15', '82', '13', '102720', '227259', '14'), +('15', '82', '13', '102665', '224950', '14'), +('15', '82', '13', '102660', '220369', '14'), +('15', '82', '13', '102655', '219972', '14'), +('15', '82', '14', '102720', '227259', '14'), +('15', '82', '14', '102665', '224950', '14'), +('15', '82', '14', '102660', '220369', '14'), +('15', '82', '14', '102661', '220211', '14'), +('15', '82', '11', '102643', '127802', '14'), +('15', '82', '11', '102747', '118362', '14'), +('15', '82', '11', '80668', '92989', '14'), +('15', '82', '11', '102747', '90310', '14'), +('15', '83', '22', '61948', '0', '14'), +('15', '83', '22', '66397', '0', '14'), +('15', '83', '22', '21805', '0', '14'), +('15', '83', '22', '21807', '0', '14'), +('15', '83', '1', '102641', '125472', '14'), +('15', '83', '1', '102597', '125002', '14'), +('15', '83', '1', '102625', '124930', '14'), +('15', '83', '1', '102639', '124169', '14'), +('15', '83', '2', '102017', '85522', '14'), +('15', '83', '2', '102269', '76944', '14'), +('15', '83', '2', '53459', '75452', '14'), +('15', '83', '2', '70951', '61337', '14'), +('15', '83', '3', '102726', '136594', '14'), +('15', '83', '3', '102598', '133263', '14'), +('15', '83', '3', '102626', '132745', '14'), +('15', '83', '3', '102725', '118740', '14'), +('15', '83', '5', '102599', '131766', '14'), +('15', '83', '5', '102627', '129013', '14'), +('15', '83', '5', '102745', '120653', '14'), +('15', '83', '5', '102551', '114999', '14'), +('15', '83', '8', '102601', '142524', '14'), +('15', '83', '8', '102629', '132741', '14'), +('15', '83', '8', '102552', '125259', '14'), +('15', '83', '8', '80677', '96835', '14'), +('15', '83', '6', '102600', '132589', '14'), +('15', '83', '6', '102628', '132184', '14'), +('15', '83', '6', '102558', '116483', '14'), +('15', '83', '6', '80638', '97475', '14'), +('15', '83', '17', '102020', '90899', '14'), +('15', '83', '17', '102272', '82536', '14'), +('15', '83', '17', '53464', '79695', '14'), +('15', '83', '17', '70956', '79262', '14'), +('15', '83', '7', '102018', '86526', '14'), +('15', '83', '7', '102270', '78344', '14'), +('15', '83', '7', '53460', '76231', '14'), +('15', '83', '7', '39357', '62783', '14'), +('15', '83', '9', '67098', '229193', '14'), +('15', '83', '9', '46888', '83002', '14'), +('15', '83', '9', '53461', '76032', '14'), +('15', '83', '9', '102289', '71005', '14'), +('15', '83', '15', '102630', '127651', '14'), +('15', '83', '15', '102636', '127393', '14'), +('15', '83', '15', '102602', '127009', '14'), +('15', '83', '15', '102637', '126342', '14'), +('15', '83', '20', '102631', '142667', '14'), +('15', '83', '20', '102603', '141922', '14'), +('15', '83', '20', '102553', '124384', '14'), +('15', '83', '20', '80678', '105876', '14'), +('15', '83', '12', '53462', '84094', '14'), +('15', '83', '12', '102267', '73424', '14'), +('15', '83', '12', '83570', '54363', '14'), +('15', '83', '12', '47214', '52448', '14'), +('15', '83', '18', '102019', '88273', '14'), +('15', '83', '18', '102271', '79930', '14'), +('15', '83', '18', '53465', '78458', '14'), +('15', '83', '18', '83609', '64159', '14'), +('15', '83', '19', '76131', '79560', '14'), +('15', '83', '19', '53463', '76470', '14'), +('15', '83', '19', '102268', '74364', '14'), +('15', '83', '19', '39279', '57364', '14'), +('15', '83', '13', '102720', '227401', '14'), +('15', '83', '13', '102665', '225116', '14'), +('15', '83', '13', '102660', '220533', '14'), +('15', '83', '13', '102655', '220138', '14'), +('15', '83', '14', '102720', '227401', '14'), +('15', '83', '14', '102665', '225116', '14'), +('15', '83', '14', '102660', '220533', '14'), +('15', '83', '14', '102661', '220376', '14'), +('15', '83', '11', '102643', '127805', '14'), +('15', '83', '11', '102747', '118366', '14'), +('15', '83', '11', '80668', '92996', '14'), +('15', '83', '11', '102747', '90312', '14'), +('15', '84', '22', '61948', '0', '14'), +('15', '84', '22', '66397', '0', '14'), +('15', '84', '22', '21805', '0', '14'), +('15', '84', '22', '21807', '0', '14'), +('15', '84', '1', '102641', '125477', '14'), +('15', '84', '1', '102597', '125008', '14'), +('15', '84', '1', '102625', '124936', '14'), +('15', '84', '1', '102639', '124175', '14'), +('15', '84', '2', '102017', '85527', '14'), +('15', '84', '2', '102269', '76948', '14'), +('15', '84', '2', '53459', '75455', '14'), +('15', '84', '2', '70951', '61340', '14'), +('15', '84', '3', '102726', '136599', '14'), +('15', '84', '3', '102598', '133268', '14'), +('15', '84', '3', '102626', '132751', '14'), +('15', '84', '3', '102725', '118745', '14'), +('15', '84', '5', '102599', '131771', '14'), +('15', '84', '5', '102627', '129017', '14'), +('15', '84', '5', '102745', '120658', '14'), +('15', '84', '5', '102551', '115002', '14'), +('15', '84', '8', '102601', '142530', '14'), +('15', '84', '8', '102629', '132745', '14'), +('15', '84', '8', '102552', '125265', '14'), +('15', '84', '8', '80677', '96842', '14'), +('15', '84', '6', '102600', '132595', '14'), +('15', '84', '6', '102628', '132189', '14'), +('15', '84', '6', '102558', '116490', '14'), +('15', '84', '6', '80638', '97481', '14'), +('15', '84', '17', '102020', '90903', '14'), +('15', '84', '17', '102272', '82542', '14'), +('15', '84', '17', '53464', '79698', '14'), +('15', '84', '17', '70956', '76517', '14'), +('15', '84', '7', '102018', '86533', '14'), +('15', '84', '7', '102270', '78348', '14'), +('15', '84', '7', '53460', '76236', '14'), +('15', '84', '7', '39357', '62787', '14'), +('15', '84', '9', '67098', '231959', '14'), +('15', '84', '9', '46888', '83008', '14'), +('15', '84', '9', '53461', '76037', '14'), +('15', '84', '9', '102289', '71009', '14'), +('15', '84', '15', '102630', '127655', '14'), +('15', '84', '15', '102636', '127399', '14'), +('15', '84', '15', '102602', '127015', '14'), +('15', '84', '15', '102637', '126346', '14'), +('15', '84', '20', '102631', '142675', '14'), +('15', '84', '20', '102603', '141927', '14'), +('15', '84', '20', '102553', '124389', '14'), +('15', '84', '20', '80678', '105882', '14'), +('15', '84', '12', '53462', '84099', '14'), +('15', '84', '12', '102267', '73428', '14'), +('15', '84', '12', '83570', '54368', '14'), +('15', '84', '12', '47214', '52451', '14'), +('15', '84', '18', '102019', '88278', '14'), +('15', '84', '18', '102271', '79936', '14'), +('15', '84', '18', '53465', '78463', '14'), +('15', '84', '18', '83609', '64165', '14'), +('15', '84', '19', '76131', '79562', '14'), +('15', '84', '19', '53463', '76473', '14'), +('15', '84', '19', '102268', '74369', '14'), +('15', '84', '19', '39279', '57367', '14'), +('15', '84', '13', '102720', '227543', '14'), +('15', '84', '13', '102665', '225282', '14'), +('15', '84', '13', '102660', '220697', '14'), +('15', '84', '13', '102655', '220305', '14'), +('15', '84', '14', '102720', '227543', '14'), +('15', '84', '14', '102665', '225282', '14'), +('15', '84', '14', '102660', '220697', '14'), +('15', '84', '14', '102661', '220542', '14'), +('15', '84', '11', '102643', '127808', '14'), +('15', '84', '11', '102747', '118371', '14'), +('15', '84', '11', '80668', '93002', '14'), +('15', '84', '11', '102747', '90313', '14'), +('15', '85', '22', '21805', '0', '16'), +('15', '85', '22', '61948', '0', '16'), +('15', '85', '22', '21807', '0', '16'), +('15', '85', '22', '12425', '0', '16'), +('15', '85', '1', '111303', '240925', '16'), +('15', '85', '1', '111300', '240860', '16'), +('15', '85', '1', '111302', '240136', '16'), +('15', '85', '1', '111306', '239600', '16'), +('15', '85', '2', '94056', '153426', '16'), +('15', '85', '2', '62985', '152029', '16'), +('15', '85', '2', '104417', '128829', '16'), +('15', '85', '2', '54846', '97719', '16'), +('15', '85', '3', '111315', '241154', '16'), +('15', '85', '3', '111313', '240628', '16'), +('15', '85', '3', '111316', '238455', '16'), +('15', '85', '3', '111014', '211439', '16'), +('15', '85', '5', '111317', '241545', '16'), +('15', '85', '5', '111321', '240563', '16'), +('15', '85', '5', '111318', '240098', '16'), +('15', '85', '5', '111319', '238012', '16'), +('15', '85', '8', '111331', '242474', '16'), +('15', '85', '8', '111332', '239554', '16'), +('15', '85', '8', '111329', '238350', '16'), +('15', '85', '8', '111030', '212834', '16'), +('15', '85', '6', '111325', '241310', '16'), +('15', '85', '6', '111322', '240446', '16'), +('15', '85', '6', '111326', '237833', '16'), +('15', '85', '6', '111024', '211595', '16'), +('15', '85', '17', '56084', '157186', '16'), +('15', '85', '17', '56045', '154340', '16'), +('15', '85', '17', '104420', '132997', '16'), +('15', '85', '17', '54855', '100961', '16'), +('15', '85', '7', '56079', '152158', '16'), +('15', '85', '7', '56040', '150601', '16'), +('15', '85', '7', '104418', '127297', '16'), +('15', '85', '7', '54850', '97009', '16'), +('15', '85', '9', '67098', '234725', '16'), +('15', '85', '9', '56033', '148478', '16'), +('15', '85', '9', '56070', '148373', '16'), +('15', '85', '9', '56031', '148309', '16'), +('15', '85', '15', '111348', '242413', '16'), +('15', '85', '15', '111343', '241561', '16'), +('15', '85', '15', '111342', '241544', '16'), +('15', '85', '15', '111346', '239800', '16'), +('15', '85', '20', '111355', '250318', '16'), +('15', '85', '20', '111351', '248913', '16'), +('15', '85', '20', '111352', '248609', '16'), +('15', '85', '20', '111053', '220678', '16'), +('15', '85', '12', '81795', '148574', '16'), +('15', '85', '12', '56074', '146978', '16'), +('15', '85', '12', '104415', '126482', '16'), +('15', '85', '12', '49656', '95970', '16'), +('15', '85', '18', '62986', '155981', '16'), +('15', '85', '18', '56041', '155783', '16'), +('15', '85', '18', '104419', '133247', '16'), +('15', '85', '18', '54851', '98130', '16'), +('15', '85', '19', '62990', '154642', '16'), +('15', '85', '19', '56037', '153483', '16'), +('15', '85', '19', '56075', '151626', '16'), +('15', '85', '19', '81763', '150694', '16'), +('15', '85', '13', '111871', '397916', '16'), +('15', '85', '13', '111815', '393898', '16'), +('15', '85', '13', '111527', '381952', '16'), +('15', '85', '13', '111515', '374960', '16'), +('15', '85', '14', '111871', '397916', '16'), +('15', '85', '14', '111815', '393898', '16'), +('15', '85', '14', '111527', '381952', '16'), +('15', '85', '14', '111515', '374960', '16'), +('15', '85', '11', '111338', '241158', '16'), +('15', '85', '11', '111335', '239784', '16'), +('15', '85', '11', '111333', '239758', '16'), +('15', '85', '11', '111337', '238959', '16'), +('15', '85', '22', '21805', '0', '15'), +('15', '85', '22', '61948', '0', '15'), +('15', '85', '22', '21807', '0', '15'), +('15', '85', '22', '12425', '0', '15'), +('15', '85', '1', '107054', '178585', '15'), +('15', '85', '1', '107053', '176289', '15'), +('15', '85', '1', '107019', '174609', '15'), +('15', '85', '1', '107052', '172954', '15'), +('15', '85', '2', '94056', '153426', '15'), +('15', '85', '2', '62985', '152029', '15'), +('15', '85', '2', '104417', '128829', '15'), +('15', '85', '2', '54846', '97719', '15'), +('15', '85', '3', '107020', '179695', '15'), +('15', '85', '3', '107055', '179333', '15'), +('15', '85', '3', '106810', '166949', '15'), +('15', '85', '3', '106841', '166853', '15'), +('15', '85', '5', '107021', '177978', '15'), +('15', '85', '5', '107056', '176990', '15'), +('15', '85', '5', '106811', '165563', '15'), +('15', '85', '5', '106725', '150769', '15'), +('15', '85', '8', '107023', '183459', '15'), +('15', '85', '8', '107058', '182090', '15'), +('15', '85', '8', '106813', '170941', '15'), +('15', '85', '8', '106844', '168682', '15'), +('15', '85', '6', '107022', '181265', '15'), +('15', '85', '6', '107057', '179154', '15'), +('15', '85', '6', '106812', '178581', '15'), +('15', '85', '6', '106843', '175985', '15'), +('15', '85', '17', '56084', '157186', '15'), +('15', '85', '17', '56045', '154340', '15'), +('15', '85', '17', '104420', '132997', '15'), +('15', '85', '17', '54855', '100961', '15'), +('15', '85', '7', '56079', '152158', '15'), +('15', '85', '7', '56040', '150601', '15'), +('15', '85', '7', '104418', '127297', '15'), +('15', '85', '7', '54850', '97009', '15'), +('15', '85', '9', '67098', '234725', '15'), +('15', '85', '9', '56033', '148478', '15'), +('15', '85', '9', '56070', '148373', '15'), +('15', '85', '9', '56031', '148309', '15'), +('15', '85', '15', '107025', '181076', '15'), +('15', '85', '15', '107062', '176624', '15'), +('15', '85', '15', '107051', '175689', '15'), +('15', '85', '15', '107050', '172881', '15'), +('15', '85', '20', '107026', '191035', '15'), +('15', '85', '20', '107059', '190321', '15'), +('15', '85', '20', '106816', '178799', '15'), +('15', '85', '20', '106845', '177321', '15'), +('15', '85', '12', '81795', '148574', '15'), +('15', '85', '12', '56074', '146978', '15'), +('15', '85', '12', '104415', '126482', '15'), +('15', '85', '12', '53462', '84103', '15'), +('15', '85', '18', '62986', '155981', '15'), +('15', '85', '18', '56041', '155783', '15'), +('15', '85', '18', '104419', '133247', '15'), +('15', '85', '18', '54851', '98130', '15'), +('15', '85', '19', '62990', '154642', '15'), +('15', '85', '19', '56037', '153483', '15'), +('15', '85', '19', '56075', '151626', '15'), +('15', '85', '19', '81763', '150694', '15'), +('15', '85', '13', '106761', '314162', '15'), +('15', '85', '13', '106868', '283874', '15'), +('15', '85', '13', '106867', '283530', '15'), +('15', '85', '13', '106858', '282175', '15'), +('15', '85', '14', '106761', '314162', '15'), +('15', '85', '14', '106868', '283874', '15'), +('15', '85', '14', '106867', '283530', '15'), +('15', '85', '14', '106858', '282175', '15'), +('15', '85', '11', '107024', '183060', '15'), +('15', '85', '11', '106814', '170241', '15'), +('15', '85', '11', '62965', '153470', '15'), +('15', '85', '11', '56099', '148697', '15'), +('15', '86', '22', '21805', '0', '16'), +('15', '86', '22', '61948', '0', '16'), +('15', '86', '22', '21807', '0', '16'), +('15', '86', '22', '12425', '0', '16'), +('15', '86', '1', '111303', '240930', '16'), +('15', '86', '1', '111300', '240865', '16'), +('15', '86', '1', '111302', '240142', '16'), +('15', '86', '1', '111306', '239606', '16'), +('15', '86', '2', '94056', '153431', '16'), +('15', '86', '2', '62985', '152034', '16'), +('15', '86', '2', '104417', '128833', '16'), +('15', '86', '2', '54846', '97724', '16'), +('15', '86', '3', '111315', '241161', '16'), +('15', '86', '3', '111313', '240634', '16'), +('15', '86', '3', '111316', '238460', '16'), +('15', '86', '3', '111014', '211446', '16'), +('15', '86', '5', '111317', '241552', '16'), +('15', '86', '5', '111321', '240569', '16'), +('15', '86', '5', '111318', '240103', '16'), +('15', '86', '5', '111319', '238018', '16'), +('15', '86', '8', '111331', '242481', '16'), +('15', '86', '8', '111332', '239560', '16'), +('15', '86', '8', '111329', '238355', '16'), +('15', '86', '8', '111030', '212841', '16'), +('15', '86', '6', '111325', '241315', '16'), +('15', '86', '6', '111322', '240450', '16'), +('15', '86', '6', '111326', '237840', '16'), +('15', '86', '6', '111024', '211600', '16'), +('15', '86', '17', '56084', '157195', '16'), +('15', '86', '17', '56045', '154345', '16'), +('15', '86', '17', '104420', '133004', '16'), +('15', '86', '17', '54855', '100966', '16'), +('15', '86', '7', '56079', '152164', '16'), +('15', '86', '7', '56040', '150607', '16'), +('15', '86', '7', '104418', '127302', '16'), +('15', '86', '7', '54850', '97013', '16'), +('15', '86', '9', '67098', '237491', '16'), +('15', '86', '9', '56033', '148482', '16'), +('15', '86', '9', '56070', '148378', '16'), +('15', '86', '9', '56031', '148313', '16'), +('15', '86', '15', '111348', '242420', '16'), +('15', '86', '15', '111343', '241566', '16'), +('15', '86', '15', '111342', '241551', '16'), +('15', '86', '15', '111346', '239804', '16'), +('15', '86', '20', '111355', '250322', '16'), +('15', '86', '20', '111351', '248918', '16'), +('15', '86', '20', '111352', '248615', '16'), +('15', '86', '20', '111053', '220682', '16'), +('15', '86', '12', '81795', '148579', '16'), +('15', '86', '12', '56074', '146982', '16'), +('15', '86', '12', '104415', '126487', '16'), +('15', '86', '12', '49656', '95971', '16'), +('15', '86', '18', '62986', '155988', '16'), +('15', '86', '18', '56041', '155788', '16'), +('15', '86', '18', '104419', '133254', '16'), +('15', '86', '18', '54851', '98136', '16'), +('15', '86', '19', '62990', '154647', '16'), +('15', '86', '19', '56037', '153489', '16'), +('15', '86', '19', '56075', '151632', '16'), +('15', '86', '19', '81763', '150701', '16'), +('15', '86', '13', '111871', '398215', '16'), +('15', '86', '13', '111815', '394197', '16'), +('15', '86', '13', '111527', '382251', '16'), +('15', '86', '13', '111515', '375258', '16'), +('15', '86', '14', '111871', '398215', '16'), +('15', '86', '14', '111815', '394197', '16'), +('15', '86', '14', '111527', '382251', '16'), +('15', '86', '14', '111515', '375258', '16'), +('15', '86', '11', '111338', '241164', '16'), +('15', '86', '11', '111335', '239790', '16'), +('15', '86', '11', '111333', '239762', '16'), +('15', '86', '11', '111337', '238966', '16'), +('15', '87', '22', '21805', '0', '16'), +('15', '87', '22', '61948', '0', '16'), +('15', '87', '22', '21807', '0', '16'), +('15', '87', '22', '12425', '0', '16'), +('15', '87', '1', '111303', '240936', '16'), +('15', '87', '1', '111300', '240870', '16'), +('15', '87', '1', '111302', '240149', '16'), +('15', '87', '1', '111306', '239613', '16'), +('15', '87', '2', '94056', '153436', '16'), +('15', '87', '2', '62985', '152040', '16'), +('15', '87', '2', '104417', '128837', '16'), +('15', '87', '2', '54846', '97729', '16'), +('15', '87', '3', '111315', '241168', '16'), +('15', '87', '3', '111313', '240639', '16'), +('15', '87', '3', '111316', '238466', '16'), +('15', '87', '3', '111014', '211453', '16'), +('15', '87', '5', '111317', '241558', '16'), +('15', '87', '5', '111321', '240575', '16'), +('15', '87', '5', '111318', '240107', '16'), +('15', '87', '5', '111319', '238024', '16'), +('15', '87', '8', '111331', '242488', '16'), +('15', '87', '8', '111332', '239565', '16'), +('15', '87', '8', '111329', '238360', '16'), +('15', '87', '8', '111030', '212848', '16'), +('15', '87', '6', '111325', '241320', '16'), +('15', '87', '6', '111322', '240453', '16'), +('15', '87', '6', '111326', '237847', '16'), +('15', '87', '6', '111024', '211605', '16'), +('15', '87', '17', '56084', '157202', '16'), +('15', '87', '17', '56045', '154349', '16'), +('15', '87', '17', '104420', '133010', '16'), +('15', '87', '17', '54855', '100970', '16'), +('15', '87', '7', '56079', '152169', '16'), +('15', '87', '7', '56040', '150613', '16'), +('15', '87', '7', '104418', '127308', '16'), +('15', '87', '7', '54850', '97016', '16'), +('15', '87', '9', '67098', '240257', '16'), +('15', '87', '9', '56033', '148486', '16'), +('15', '87', '9', '56070', '148382', '16'), +('15', '87', '9', '56031', '148317', '16'), +('15', '87', '15', '111348', '242426', '16'), +('15', '87', '15', '111343', '241571', '16'), +('15', '87', '15', '111342', '241557', '16'), +('15', '87', '15', '111346', '239809', '16'), +('15', '87', '20', '111355', '250326', '16'), +('15', '87', '20', '111351', '248923', '16'), +('15', '87', '20', '111352', '248621', '16'), +('15', '87', '20', '111053', '220686', '16'), +('15', '87', '12', '81795', '148584', '16'), +('15', '87', '12', '56074', '146987', '16'), +('15', '87', '12', '104415', '126491', '16'), +('15', '87', '12', '49656', '95972', '16'), +('15', '87', '18', '62986', '155995', '16'), +('15', '87', '18', '56041', '155792', '16'), +('15', '87', '18', '104419', '133262', '16'), +('15', '87', '18', '54851', '98141', '16'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '87', '19', '62990', '154651', '16'), +('15', '87', '19', '56037', '153495', '16'), +('15', '87', '19', '56075', '151638', '16'), +('15', '87', '19', '81763', '150708', '16'), +('15', '87', '13', '111871', '398514', '16'), +('15', '87', '13', '111815', '394496', '16'), +('15', '87', '13', '111527', '382549', '16'), +('15', '87', '13', '111515', '375557', '16'), +('15', '87', '14', '111871', '398514', '16'), +('15', '87', '14', '111815', '394496', '16'), +('15', '87', '14', '111527', '382549', '16'), +('15', '87', '14', '111515', '375557', '16'), +('15', '87', '11', '111338', '241169', '16'), +('15', '87', '11', '111335', '239796', '16'), +('15', '87', '11', '111333', '239765', '16'), +('15', '87', '11', '111337', '238972', '16'), +('15', '88', '22', '21805', '0', '16'), +('15', '88', '22', '61948', '0', '16'), +('15', '88', '22', '21807', '0', '16'), +('15', '88', '22', '12425', '0', '16'), +('15', '88', '1', '111303', '240941', '16'), +('15', '88', '1', '111300', '240874', '16'), +('15', '88', '1', '111302', '240155', '16'), +('15', '88', '1', '111306', '239619', '16'), +('15', '88', '2', '94056', '153441', '16'), +('15', '88', '2', '62985', '152045', '16'), +('15', '88', '2', '104417', '128841', '16'), +('15', '88', '2', '54846', '97734', '16'), +('15', '88', '3', '111315', '241174', '16'), +('15', '88', '3', '111313', '240644', '16'), +('15', '88', '3', '111316', '238471', '16'), +('15', '88', '3', '111014', '211459', '16'), +('15', '88', '5', '111317', '241563', '16'), +('15', '88', '5', '111321', '240581', '16'), +('15', '88', '5', '111318', '240111', '16'), +('15', '88', '5', '111319', '238030', '16'), +('15', '88', '8', '111331', '242494', '16'), +('15', '88', '8', '111332', '239570', '16'), +('15', '88', '8', '111329', '238365', '16'), +('15', '88', '8', '111030', '212854', '16'), +('15', '88', '6', '111325', '241325', '16'), +('15', '88', '6', '111322', '240457', '16'), +('15', '88', '6', '111326', '237854', '16'), +('15', '88', '6', '111024', '211610', '16'), +('15', '88', '17', '56084', '157210', '16'), +('15', '88', '17', '56045', '154354', '16'), +('15', '88', '17', '104420', '133017', '16'), +('15', '88', '17', '54855', '100974', '16'), +('15', '88', '7', '56079', '152175', '16'), +('15', '88', '7', '56040', '150618', '16'), +('15', '88', '7', '104418', '127313', '16'), +('15', '88', '7', '54850', '97019', '16'), +('15', '88', '9', '67098', '243024', '16'), +('15', '88', '9', '56033', '148490', '16'), +('15', '88', '9', '56070', '148386', '16'), +('15', '88', '9', '56031', '148322', '16'), +('15', '88', '15', '111348', '242432', '16'), +('15', '88', '15', '111343', '241576', '16'), +('15', '88', '15', '111342', '241563', '16'), +('15', '88', '15', '111346', '239814', '16'), +('15', '88', '20', '111355', '250330', '16'), +('15', '88', '20', '111351', '248928', '16'), +('15', '88', '20', '111352', '248627', '16'), +('15', '88', '20', '111053', '220690', '16'), +('15', '88', '12', '81795', '148589', '16'), +('15', '88', '12', '56074', '146991', '16'), +('15', '88', '12', '104415', '126496', '16'), +('15', '88', '12', '49656', '95972', '16'), +('15', '88', '18', '62986', '156002', '16'), +('15', '88', '18', '56041', '155796', '16'), +('15', '88', '18', '104419', '133269', '16'), +('15', '88', '18', '54851', '98147', '16'), +('15', '88', '19', '62990', '154656', '16'), +('15', '88', '19', '56037', '153501', '16'), +('15', '88', '19', '56075', '151645', '16'), +('15', '88', '19', '81763', '150715', '16'), +('15', '88', '13', '111871', '398813', '16'), +('15', '88', '13', '111815', '394795', '16'), +('15', '88', '13', '111527', '382848', '16'), +('15', '88', '13', '111515', '375855', '16'), +('15', '88', '14', '111871', '398813', '16'), +('15', '88', '14', '111815', '394795', '16'), +('15', '88', '14', '111527', '382848', '16'), +('15', '88', '14', '111515', '375855', '16'), +('15', '88', '11', '111338', '241174', '16'), +('15', '88', '11', '111335', '239802', '16'), +('15', '88', '11', '111333', '239769', '16'), +('15', '88', '11', '111337', '238979', '16'), +('15', '89', '22', '21805', '0', '16'), +('15', '89', '22', '61948', '0', '16'), +('15', '89', '22', '21807', '0', '16'), +('15', '89', '22', '12425', '0', '16'), +('15', '89', '1', '111303', '240947', '16'), +('15', '89', '1', '111300', '240879', '16'), +('15', '89', '1', '111302', '240162', '16'), +('15', '89', '1', '111306', '239626', '16'), +('15', '89', '2', '94056', '153446', '16'), +('15', '89', '2', '62985', '152051', '16'), +('15', '89', '2', '104417', '128845', '16'), +('15', '89', '2', '54846', '97739', '16'), +('15', '89', '3', '111315', '241181', '16'), +('15', '89', '3', '111313', '240650', '16'), +('15', '89', '3', '111316', '238477', '16'), +('15', '89', '3', '111014', '211466', '16'), +('15', '89', '5', '111317', '241570', '16'), +('15', '89', '5', '111321', '240587', '16'), +('15', '89', '5', '111318', '240116', '16'), +('15', '89', '5', '111319', '238036', '16'), +('15', '89', '8', '111331', '242501', '16'), +('15', '89', '8', '111332', '239576', '16'), +('15', '89', '8', '111329', '238370', '16'), +('15', '89', '8', '111030', '212861', '16'), +('15', '89', '6', '111325', '241330', '16'), +('15', '89', '6', '111322', '240461', '16'), +('15', '89', '6', '111326', '237861', '16'), +('15', '89', '6', '111024', '211615', '16'), +('15', '89', '17', '56084', '157218', '16'), +('15', '89', '17', '56045', '154358', '16'), +('15', '89', '17', '104420', '133024', '16'), +('15', '89', '17', '54855', '100979', '16'), +('15', '89', '7', '56079', '152181', '16'), +('15', '89', '7', '56040', '150624', '16'), +('15', '89', '7', '104418', '127318', '16'), +('15', '89', '7', '54850', '97022', '16'), +('15', '89', '9', '67098', '245791', '16'), +('15', '89', '9', '56033', '148495', '16'), +('15', '89', '9', '56070', '148390', '16'), +('15', '89', '9', '56031', '148326', '16'), +('15', '89', '15', '111348', '242439', '16'), +('15', '89', '15', '111343', '241581', '16'), +('15', '89', '15', '111342', '241570', '16'), +('15', '89', '15', '111346', '239818', '16'), +('15', '89', '20', '111355', '250334', '16'), +('15', '89', '20', '111351', '248933', '16'), +('15', '89', '20', '111352', '248633', '16'), +('15', '89', '20', '111053', '220694', '16'), +('15', '89', '12', '81795', '148595', '16'), +('15', '89', '12', '56074', '146996', '16'), +('15', '89', '12', '104415', '126501', '16'), +('15', '89', '12', '49656', '95973', '16'), +('15', '89', '18', '62986', '156010', '16'), +('15', '89', '18', '56041', '155800', '16'), +('15', '89', '18', '104419', '133276', '16'), +('15', '89', '18', '54851', '98153', '16'), +('15', '89', '19', '62990', '154661', '16'), +('15', '89', '19', '56037', '153507', '16'), +('15', '89', '19', '56075', '151651', '16'), +('15', '89', '19', '81763', '150722', '16'), +('15', '89', '13', '111871', '399112', '16'), +('15', '89', '13', '111815', '395094', '16'), +('15', '89', '13', '111527', '383147', '16'), +('15', '89', '13', '111515', '376154', '16'), +('15', '89', '14', '111871', '399112', '16'), +('15', '89', '14', '111815', '395094', '16'), +('15', '89', '14', '111527', '383147', '16'), +('15', '89', '14', '111515', '376154', '16'), +('15', '89', '11', '111338', '241180', '16'), +('15', '89', '11', '111335', '239808', '16'), +('15', '89', '11', '111333', '239773', '16'), +('15', '89', '11', '111337', '238986', '16'), +('15', '90', '22', '21805', '0', '17'), +('15', '90', '22', '61948', '0', '17'), +('15', '90', '22', '21807', '0', '17'), +('15', '90', '22', '12425', '0', '17'), +('15', '90', '1', '111303', '240952', '17'), +('15', '90', '1', '111300', '240883', '17'), +('15', '90', '1', '111302', '240168', '17'), +('15', '90', '1', '111306', '239632', '17'), +('15', '90', '2', '94056', '153451', '17'), +('15', '90', '2', '62985', '152057', '17'), +('15', '90', '2', '104417', '128849', '17'), +('15', '90', '2', '54846', '97744', '17'), +('15', '90', '3', '111315', '241188', '17'), +('15', '90', '3', '111313', '240655', '17'), +('15', '90', '3', '111316', '238482', '17'), +('15', '90', '3', '111014', '211473', '17'), +('15', '90', '5', '111317', '241576', '17'), +('15', '90', '5', '111321', '240593', '17'), +('15', '90', '5', '111318', '240120', '17'), +('15', '90', '5', '111319', '238041', '17'), +('15', '90', '8', '111331', '242507', '17'), +('15', '90', '8', '111332', '239581', '17'), +('15', '90', '8', '111329', '238375', '17'), +('15', '90', '8', '111030', '212867', '17'), +('15', '90', '6', '111325', '241334', '17'), +('15', '90', '6', '111322', '240465', '17'), +('15', '90', '6', '111326', '237867', '17'), +('15', '90', '6', '111024', '211619', '17'), +('15', '90', '17', '56084', '157226', '17'), +('15', '90', '17', '56045', '154363', '17'), +('15', '90', '17', '104420', '133031', '17'), +('15', '90', '17', '54855', '100983', '17'), +('15', '90', '7', '56079', '152186', '17'), +('15', '90', '7', '56040', '150630', '17'), +('15', '90', '7', '104418', '127324', '17'), +('15', '90', '7', '54850', '97025', '17'), +('15', '90', '9', '67098', '248557', '17'), +('15', '90', '9', '56033', '148499', '17'), +('15', '90', '9', '56070', '148394', '17'), +('15', '90', '9', '56031', '148330', '17'), +('15', '90', '15', '111348', '242446', '17'), +('15', '90', '15', '111343', '241586', '17'), +('15', '90', '15', '111342', '241576', '17'), +('15', '90', '15', '111346', '239823', '17'), +('15', '90', '20', '111355', '250338', '17'), +('15', '90', '20', '111351', '248938', '17'), +('15', '90', '20', '111352', '248639', '17'), +('15', '90', '20', '111053', '220698', '17'), +('15', '90', '12', '81795', '148600', '17'), +('15', '90', '12', '56074', '147000', '17'), +('15', '90', '12', '104415', '126505', '17'), +('15', '90', '12', '49656', '95974', '17'), +('15', '90', '18', '62986', '156017', '17'), +('15', '90', '18', '56041', '155804', '17'), +('15', '90', '18', '104419', '133284', '17'), +('15', '90', '18', '54851', '98159', '17'), +('15', '90', '19', '62990', '154665', '17'), +('15', '90', '19', '56037', '153513', '17'), +('15', '90', '19', '56075', '151658', '17'), +('15', '90', '19', '81763', '150729', '17'), +('15', '90', '13', '111871', '399411', '17'), +('15', '90', '13', '111815', '395393', '17'), +('15', '90', '13', '111527', '383446', '17'), +('15', '90', '13', '111515', '376452', '17'), +('15', '90', '14', '111871', '399411', '17'), +('15', '90', '14', '111815', '395393', '17'), +('15', '90', '14', '111527', '383446', '17'), +('15', '90', '14', '111515', '376452', '17'), +('15', '90', '11', '111338', '241185', '17'), +('15', '90', '11', '111335', '239814', '17'), +('15', '90', '11', '111333', '239777', '17'), +('15', '90', '11', '111337', '238993', '17'), +('15', '91', '22', '21805', '0', '17'), +('15', '91', '22', '61948', '0', '17'), +('15', '91', '22', '21807', '0', '17'), +('15', '91', '22', '12425', '0', '17'), +('15', '91', '1', '111303', '240957', '17'), +('15', '91', '1', '111300', '240888', '17'), +('15', '91', '1', '111302', '240175', '17'), +('15', '91', '1', '111306', '239639', '17'), +('15', '91', '2', '94056', '153456', '17'), +('15', '91', '2', '62985', '152062', '17'), +('15', '91', '2', '104417', '128853', '17'), +('15', '91', '2', '54846', '97749', '17'), +('15', '91', '3', '111315', '241195', '17'), +('15', '91', '3', '111313', '240660', '17'), +('15', '91', '3', '111316', '238488', '17'), +('15', '91', '3', '111014', '211480', '17'), +('15', '91', '5', '111317', '241582', '17'), +('15', '91', '5', '111321', '240599', '17'), +('15', '91', '5', '111318', '240125', '17'), +('15', '91', '5', '111319', '238047', '17'), +('15', '91', '8', '111331', '242514', '17'), +('15', '91', '8', '111332', '239586', '17'), +('15', '91', '8', '111329', '238380', '17'), +('15', '91', '8', '111030', '212874', '17'), +('15', '91', '6', '111325', '241339', '17'), +('15', '91', '6', '111322', '240469', '17'), +('15', '91', '6', '111326', '237874', '17'), +('15', '91', '6', '111024', '211624', '17'), +('15', '91', '17', '56084', '157234', '17'), +('15', '91', '17', '56045', '154367', '17'), +('15', '91', '17', '104420', '133037', '17'), +('15', '91', '17', '54855', '100987', '17'), +('15', '91', '7', '56079', '152192', '17'), +('15', '91', '7', '56040', '150636', '17'), +('15', '91', '7', '104418', '127329', '17'), +('15', '91', '7', '54850', '97028', '17'), +('15', '91', '9', '67098', '248562', '17'), +('15', '91', '9', '56033', '148503', '17'), +('15', '91', '9', '56070', '148398', '17'), +('15', '91', '9', '56031', '148334', '17'), +('15', '91', '15', '111348', '242452', '17'), +('15', '91', '15', '111343', '241591', '17'), +('15', '91', '15', '111342', '241582', '17'), +('15', '91', '15', '111346', '239827', '17'), +('15', '91', '20', '111355', '250342', '17'), +('15', '91', '20', '111351', '248943', '17'), +('15', '91', '20', '111352', '248644', '17'), +('15', '91', '20', '111053', '220702', '17'), +('15', '91', '12', '81795', '148605', '17'), +('15', '91', '12', '56074', '147004', '17'), +('15', '91', '12', '104415', '126510', '17'), +('15', '91', '12', '49656', '95975', '17'), +('15', '91', '18', '62986', '156024', '17'), +('15', '91', '18', '56041', '155808', '17'), +('15', '91', '18', '104419', '133291', '17'), +('15', '91', '18', '54851', '98165', '17'), +('15', '91', '19', '62990', '154670', '17'), +('15', '91', '19', '56037', '153519', '17'), +('15', '91', '19', '56075', '151664', '17'), +('15', '91', '19', '81763', '150736', '17'), +('15', '91', '13', '111871', '399710', '17'), +('15', '91', '13', '111815', '395691', '17'), +('15', '91', '13', '111527', '383744', '17'), +('15', '91', '13', '111515', '376751', '17'), +('15', '91', '14', '111871', '399710', '17'), +('15', '91', '14', '111815', '395691', '17'), +('15', '91', '14', '111527', '383744', '17'), +('15', '91', '14', '111515', '376751', '17'), +('15', '91', '11', '111338', '241190', '17'), +('15', '91', '11', '111335', '239819', '17'), +('15', '91', '11', '111333', '239780', '17'), +('15', '91', '11', '111337', '239000', '17'), +('15', '92', '22', '21805', '0', '17'), +('15', '92', '22', '61948', '0', '17'), +('15', '92', '22', '21807', '0', '17'), +('15', '92', '22', '12425', '0', '17'), +('15', '92', '1', '111303', '240963', '17'), +('15', '92', '1', '111300', '240893', '17'), +('15', '92', '1', '111302', '240181', '17'), +('15', '92', '1', '111306', '239645', '17'), +('15', '92', '2', '94056', '153461', '17'), +('15', '92', '2', '62985', '152068', '17'), +('15', '92', '2', '104417', '128857', '17'), +('15', '92', '2', '54846', '97755', '17'), +('15', '92', '3', '111315', '241202', '17'), +('15', '92', '3', '111313', '240666', '17'), +('15', '92', '3', '111316', '238493', '17'), +('15', '92', '3', '111014', '211487', '17'), +('15', '92', '5', '111317', '241588', '17'), +('15', '92', '5', '111321', '240605', '17'), +('15', '92', '5', '111318', '240129', '17'), +('15', '92', '5', '111319', '238053', '17'), +('15', '92', '8', '111331', '242521', '17'), +('15', '92', '8', '111332', '239592', '17'), +('15', '92', '8', '111329', '238385', '17'), +('15', '92', '8', '111030', '212881', '17'), +('15', '92', '6', '111325', '241344', '17'), +('15', '92', '6', '111322', '240473', '17'), +('15', '92', '6', '111326', '237881', '17'), +('15', '92', '6', '111024', '211629', '17'), +('15', '92', '17', '56084', '157242', '17'), +('15', '92', '17', '56045', '154372', '17'), +('15', '92', '17', '104420', '133044', '17'), +('15', '92', '17', '54855', '100992', '17'), +('15', '92', '7', '56079', '152198', '17'), +('15', '92', '7', '56040', '150642', '17'), +('15', '92', '7', '104418', '127334', '17'), +('15', '92', '7', '54850', '97031', '17'), +('15', '92', '9', '67098', '248567', '17'), +('15', '92', '9', '56033', '148507', '17'), +('15', '92', '9', '56070', '148403', '17'), +('15', '92', '9', '56031', '148339', '17'), +('15', '92', '15', '111348', '242459', '17'), +('15', '92', '15', '111343', '241596', '17'), +('15', '92', '15', '111342', '241589', '17'), +('15', '92', '15', '111346', '239832', '17'), +('15', '92', '20', '111355', '250346', '17'), +('15', '92', '20', '111351', '248948', '17'), +('15', '92', '20', '111352', '248650', '17'), +('15', '92', '20', '111053', '220706', '17'), +('15', '92', '12', '81795', '148610', '17'), +('15', '92', '12', '56074', '147009', '17'), +('15', '92', '12', '104415', '126515', '17'), +('15', '92', '12', '49656', '95975', '17'), +('15', '92', '18', '62986', '156032', '17'), +('15', '92', '18', '56041', '155812', '17'), +('15', '92', '18', '104419', '133298', '17'), +('15', '92', '18', '54851', '98171', '17'), +('15', '92', '19', '62990', '154675', '17'), +('15', '92', '19', '56037', '153525', '17'), +('15', '92', '19', '56075', '151671', '17'), +('15', '92', '19', '81763', '150743', '17'), +('15', '92', '13', '111871', '400009', '17'), +('15', '92', '13', '111815', '395991', '17'), +('15', '92', '13', '111527', '384043', '17'), +('15', '92', '13', '111515', '377049', '17'), +('15', '92', '14', '111871', '400009', '17'), +('15', '92', '14', '111815', '395991', '17'), +('15', '92', '14', '111527', '384043', '17'), +('15', '92', '14', '111515', '377049', '17'), +('15', '92', '11', '111338', '241196', '17'), +('15', '92', '11', '111335', '239826', '17'), +('15', '92', '11', '111333', '239784', '17'), +('15', '92', '11', '111337', '239007', '17'), +('15', '93', '22', '21805', '0', '17'), +('15', '93', '22', '61948', '0', '17'), +('15', '93', '22', '21807', '0', '17'), +('15', '93', '22', '12425', '0', '17'), +('15', '93', '1', '111303', '240968', '17'), +('15', '93', '1', '111300', '240897', '17'), +('15', '93', '1', '111302', '240188', '17'), +('15', '93', '1', '111306', '239652', '17'), +('15', '93', '2', '94056', '153465', '17'), +('15', '93', '2', '62985', '152073', '17'), +('15', '93', '2', '104417', '128861', '17'), +('15', '93', '2', '54846', '97759', '17'), +('15', '93', '3', '111315', '241208', '17'), +('15', '93', '3', '111313', '240671', '17'), +('15', '93', '3', '111316', '238499', '17'), +('15', '93', '3', '111014', '211493', '17'), +('15', '93', '5', '111317', '241594', '17'), +('15', '93', '5', '111321', '240611', '17'), +('15', '93', '5', '111318', '240134', '17'), +('15', '93', '5', '111319', '238059', '17'), +('15', '93', '8', '111331', '242527', '17'), +('15', '93', '8', '111332', '239597', '17'), +('15', '93', '8', '111329', '238389', '17'), +('15', '93', '8', '111030', '212887', '17'), +('15', '93', '6', '111325', '241349', '17'), +('15', '93', '6', '111322', '240477', '17'), +('15', '93', '6', '111326', '237888', '17'), +('15', '93', '6', '111024', '211634', '17'), +('15', '93', '17', '56084', '157250', '17'), +('15', '93', '17', '56045', '154376', '17'), +('15', '93', '17', '104420', '133051', '17'), +('15', '93', '17', '54855', '100996', '17'), +('15', '93', '7', '56079', '152203', '17'), +('15', '93', '7', '56040', '150648', '17'), +('15', '93', '7', '104418', '127340', '17'), +('15', '93', '7', '54850', '97034', '17'), +('15', '93', '9', '67098', '248572', '17'), +('15', '93', '9', '56033', '148511', '17'), +('15', '93', '9', '56070', '148407', '17'), +('15', '93', '9', '56031', '148343', '17'), +('15', '93', '15', '111348', '242465', '17'), +('15', '93', '15', '111343', '241601', '17'), +('15', '93', '15', '111342', '241595', '17'), +('15', '93', '15', '111346', '239837', '17'), +('15', '93', '20', '111355', '250350', '17'), +('15', '93', '20', '111351', '248953', '17'), +('15', '93', '20', '111352', '248656', '17'), +('15', '93', '20', '111053', '220710', '17'), +('15', '93', '12', '81795', '148615', '17'), +('15', '93', '12', '56074', '147013', '17'), +('15', '93', '12', '104415', '126520', '17'), +('15', '93', '12', '49656', '95976', '17'), +('15', '93', '18', '62986', '156039', '17'), +('15', '93', '18', '56041', '155816', '17'), +('15', '93', '18', '104419', '133305', '17'), +('15', '93', '18', '54851', '98177', '17'), +('15', '93', '19', '62990', '154679', '17'), +('15', '93', '19', '56037', '153531', '17'), +('15', '93', '19', '56075', '151677', '17'), +('15', '93', '19', '81763', '150750', '17'), +('15', '93', '13', '111871', '400308', '17'), +('15', '93', '13', '111815', '396289', '17'), +('15', '93', '13', '111527', '384342', '17'), +('15', '93', '13', '111515', '377348', '17'), +('15', '93', '14', '111871', '400308', '17'), +('15', '93', '14', '111815', '396289', '17'), +('15', '93', '14', '111527', '384342', '17'), +('15', '93', '14', '111515', '377348', '17'), +('15', '93', '11', '111338', '241201', '17'), +('15', '93', '11', '111335', '239832', '17'), +('15', '93', '11', '111333', '239788', '17'), +('15', '93', '11', '111337', '239013', '17'), +('15', '94', '22', '21805', '0', '17'), +('15', '94', '22', '61948', '0', '17'), +('15', '94', '22', '21807', '0', '17'), +('15', '94', '22', '12425', '0', '17'), +('15', '94', '1', '111303', '240974', '17'), +('15', '94', '1', '111300', '240902', '17'), +('15', '94', '1', '111302', '240194', '17'), +('15', '94', '1', '111306', '239658', '17'), +('15', '94', '2', '94056', '153470', '17'), +('15', '94', '2', '62985', '152079', '17'), +('15', '94', '2', '104417', '128866', '17'), +('15', '94', '2', '54846', '97765', '17'), +('15', '94', '3', '111315', '241215', '17'), +('15', '94', '3', '111313', '240676', '17'), +('15', '94', '3', '111316', '238504', '17'), +('15', '94', '3', '111014', '211500', '17'), +('15', '94', '5', '111317', '241600', '17'), +('15', '94', '5', '111321', '240617', '17'), +('15', '94', '5', '111318', '240138', '17'), +('15', '94', '5', '111319', '238065', '17'), +('15', '94', '8', '111331', '242534', '17'), +('15', '94', '8', '111332', '239603', '17'), +('15', '94', '8', '111329', '238395', '17'), +('15', '94', '8', '111030', '212894', '17'), +('15', '94', '6', '111325', '241353', '17'), +('15', '94', '6', '111322', '240481', '17'), +('15', '94', '6', '111326', '237895', '17'), +('15', '94', '6', '111024', '211638', '17'), +('15', '94', '17', '56084', '157258', '17'), +('15', '94', '17', '56045', '154380', '17'), +('15', '94', '17', '104420', '133058', '17'), +('15', '94', '17', '54855', '101000', '17'), +('15', '94', '7', '56079', '152209', '17'), +('15', '94', '7', '56040', '150654', '17'), +('15', '94', '7', '104418', '127345', '17'), +('15', '94', '7', '54850', '97037', '17'), +('15', '94', '9', '67098', '248577', '17'), +('15', '94', '9', '56033', '148516', '17'), +('15', '94', '9', '56070', '148411', '17'), +('15', '94', '9', '56031', '148347', '17'), +('15', '94', '15', '111348', '242472', '17'), +('15', '94', '15', '111343', '241606', '17'), +('15', '94', '15', '111342', '241601', '17'), +('15', '94', '15', '111346', '239842', '17'), +('15', '94', '20', '111355', '250354', '17'), +('15', '94', '20', '111351', '248958', '17'), +('15', '94', '20', '111352', '248662', '17'), +('15', '94', '20', '111053', '220714', '17'), +('15', '94', '12', '81795', '148621', '17'), +('15', '94', '12', '56074', '147018', '17'), +('15', '94', '12', '104415', '126525', '17'), +('15', '94', '12', '49656', '95977', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '94', '18', '62986', '156046', '17'), +('15', '94', '18', '56041', '155820', '17'), +('15', '94', '18', '104419', '133313', '17'), +('15', '94', '18', '54851', '98183', '17'), +('15', '94', '19', '62990', '154684', '17'), +('15', '94', '19', '56037', '153537', '17'), +('15', '94', '19', '56075', '151683', '17'), +('15', '94', '19', '81763', '150757', '17'), +('15', '94', '13', '111871', '400607', '17'), +('15', '94', '13', '111815', '396588', '17'), +('15', '94', '13', '111527', '384641', '17'), +('15', '94', '13', '111515', '377646', '17'), +('15', '94', '14', '111871', '400607', '17'), +('15', '94', '14', '111815', '396588', '17'), +('15', '94', '14', '111527', '384641', '17'), +('15', '94', '14', '111515', '377646', '17'), +('15', '94', '11', '111338', '241207', '17'), +('15', '94', '11', '111335', '239838', '17'), +('15', '94', '11', '111333', '239792', '17'), +('15', '94', '11', '111337', '239020', '17'), +('15', '95', '22', '21807', '0', '18'), +('15', '95', '22', '21805', '0', '18'), +('15', '95', '22', '12425', '0', '18'), +('15', '95', '22', '7867', '0', '18'), +('15', '95', '1', '128691', '300345', '18'), +('15', '95', '1', '111303', '240979', '18'), +('15', '95', '1', '111300', '240907', '18'), +('15', '95', '1', '111302', '240201', '18'), +('15', '95', '2', '94056', '153475', '18'), +('15', '95', '2', '62985', '152085', '18'), +('15', '95', '2', '104417', '128869', '18'), +('15', '95', '2', '54846', '97770', '18'), +('15', '95', '3', '111315', '241222', '18'), +('15', '95', '3', '111313', '240682', '18'), +('15', '95', '3', '111316', '238510', '18'), +('15', '95', '3', '111014', '211507', '18'), +('15', '95', '5', '111317', '241606', '18'), +('15', '95', '5', '111321', '240623', '18'), +('15', '95', '5', '111318', '240142', '18'), +('15', '95', '5', '111319', '238071', '18'), +('15', '95', '8', '111331', '242541', '18'), +('15', '95', '8', '111332', '239608', '18'), +('15', '95', '8', '111329', '238399', '18'), +('15', '95', '8', '111030', '212901', '18'), +('15', '95', '6', '111325', '241358', '18'), +('15', '95', '6', '111322', '240484', '18'), +('15', '95', '6', '111326', '237902', '18'), +('15', '95', '6', '111024', '211643', '18'), +('15', '95', '17', '56084', '157266', '18'), +('15', '95', '17', '56045', '154385', '18'), +('15', '95', '17', '104420', '133065', '18'), +('15', '95', '17', '54855', '101005', '18'), +('15', '95', '7', '56079', '152214', '18'), +('15', '95', '7', '56040', '150659', '18'), +('15', '95', '7', '104418', '127350', '18'), +('15', '95', '7', '54850', '97040', '18'), +('15', '95', '9', '67098', '248582', '18'), +('15', '95', '9', '56033', '148520', '18'), +('15', '95', '9', '56070', '148415', '18'), +('15', '95', '9', '56031', '148352', '18'), +('15', '95', '15', '111348', '242479', '18'), +('15', '95', '15', '111343', '241611', '18'), +('15', '95', '15', '111342', '241608', '18'), +('15', '95', '15', '111346', '239846', '18'), +('15', '95', '20', '111355', '250357', '18'), +('15', '95', '20', '111351', '248963', '18'), +('15', '95', '20', '111352', '248668', '18'), +('15', '95', '20', '111053', '220717', '18'), +('15', '95', '12', '81795', '148626', '18'), +('15', '95', '12', '56074', '147022', '18'), +('15', '95', '12', '104415', '126529', '18'), +('15', '95', '12', '49656', '95978', '18'), +('15', '95', '18', '62986', '156054', '18'), +('15', '95', '18', '56041', '155824', '18'), +('15', '95', '18', '104419', '133320', '18'), +('15', '95', '18', '54851', '98188', '18'), +('15', '95', '19', '62990', '154688', '18'), +('15', '95', '19', '56037', '153543', '18'), +('15', '95', '19', '56075', '151690', '18'), +('15', '95', '19', '81763', '150764', '18'), +('15', '95', '13', '111871', '400906', '18'), +('15', '95', '13', '111815', '396887', '18'), +('15', '95', '13', '111527', '384940', '18'), +('15', '95', '13', '111515', '377945', '18'), +('15', '95', '14', '111871', '400906', '18'), +('15', '95', '14', '111815', '396887', '18'), +('15', '95', '14', '111527', '384940', '18'), +('15', '95', '14', '111515', '377945', '18'), +('15', '95', '11', '111338', '241212', '18'), +('15', '95', '11', '111335', '239844', '18'), +('15', '95', '11', '111333', '239796', '18'), +('15', '95', '11', '111337', '239027', '18'), +('15', '96', '22', '21807', '0', '18'), +('15', '96', '22', '21805', '0', '18'), +('15', '96', '22', '12425', '0', '18'), +('15', '96', '22', '7867', '0', '18'), +('15', '96', '1', '128691', '300349', '18'), +('15', '96', '1', '111303', '240985', '18'), +('15', '96', '1', '111300', '240911', '18'), +('15', '96', '1', '111302', '240207', '18'), +('15', '96', '2', '94056', '153480', '18'), +('15', '96', '2', '62985', '152090', '18'), +('15', '96', '2', '104417', '128874', '18'), +('15', '96', '2', '54846', '97775', '18'), +('15', '96', '3', '111315', '241229', '18'), +('15', '96', '3', '111313', '240687', '18'), +('15', '96', '3', '111316', '238516', '18'), +('15', '96', '3', '111014', '211514', '18'), +('15', '96', '5', '111317', '241613', '18'), +('15', '96', '5', '111321', '240629', '18'), +('15', '96', '5', '111318', '240147', '18'), +('15', '96', '5', '111319', '238077', '18'), +('15', '96', '8', '111331', '242547', '18'), +('15', '96', '8', '111332', '239613', '18'), +('15', '96', '8', '111329', '238405', '18'), +('15', '96', '8', '111030', '212907', '18'), +('15', '96', '6', '111325', '241363', '18'), +('15', '96', '6', '111322', '240489', '18'), +('15', '96', '6', '111326', '237909', '18'), +('15', '96', '6', '111024', '211648', '18'), +('15', '96', '17', '56084', '157274', '18'), +('15', '96', '17', '56045', '154389', '18'), +('15', '96', '17', '104420', '133072', '18'), +('15', '96', '17', '54855', '101009', '18'), +('15', '96', '7', '56079', '152220', '18'), +('15', '96', '7', '56040', '150665', '18'), +('15', '96', '7', '104418', '127356', '18'), +('15', '96', '7', '54850', '97043', '18'), +('15', '96', '9', '67098', '248588', '18'), +('15', '96', '9', '56033', '148524', '18'), +('15', '96', '9', '56070', '148419', '18'), +('15', '96', '9', '56031', '148356', '18'), +('15', '96', '15', '111348', '242485', '18'), +('15', '96', '15', '111343', '241616', '18'), +('15', '96', '15', '111342', '241614', '18'), +('15', '96', '15', '111346', '239851', '18'), +('15', '96', '20', '111355', '250362', '18'), +('15', '96', '20', '111351', '248968', '18'), +('15', '96', '20', '111352', '248674', '18'), +('15', '96', '20', '111053', '220722', '18'), +('15', '96', '12', '81795', '148631', '18'), +('15', '96', '12', '56074', '147027', '18'), +('15', '96', '12', '104415', '126534', '18'), +('15', '96', '12', '49656', '95978', '18'), +('15', '96', '18', '62986', '156061', '18'), +('15', '96', '18', '56041', '155829', '18'), +('15', '96', '18', '104419', '133328', '18'), +('15', '96', '18', '54851', '98194', '18'), +('15', '96', '19', '62990', '154693', '18'), +('15', '96', '19', '56037', '153549', '18'), +('15', '96', '19', '56075', '151696', '18'), +('15', '96', '19', '81763', '150771', '18'), +('15', '96', '13', '111871', '401205', '18'), +('15', '96', '13', '111815', '397186', '18'), +('15', '96', '13', '111527', '385239', '18'), +('15', '96', '13', '111515', '378243', '18'), +('15', '96', '14', '111871', '401205', '18'), +('15', '96', '14', '111815', '397186', '18'), +('15', '96', '14', '111527', '385239', '18'), +('15', '96', '14', '111515', '378243', '18'), +('15', '96', '11', '111338', '241218', '18'), +('15', '96', '11', '111335', '239850', '18'), +('15', '96', '11', '111333', '239800', '18'), +('15', '96', '11', '111337', '239034', '18'), +('15', '97', '22', '21807', '0', '18'), +('15', '97', '22', '21805', '0', '18'), +('15', '97', '22', '12425', '0', '18'), +('15', '97', '22', '7867', '0', '18'), +('15', '97', '1', '128691', '300353', '18'), +('15', '97', '1', '111303', '240990', '18'), +('15', '97', '1', '111300', '240916', '18'), +('15', '97', '1', '111302', '240214', '18'), +('15', '97', '2', '94056', '153485', '18'), +('15', '97', '2', '62985', '152096', '18'), +('15', '97', '2', '104417', '128878', '18'), +('15', '97', '2', '54846', '97780', '18'), +('15', '97', '3', '111315', '241235', '18'), +('15', '97', '3', '111313', '240692', '18'), +('15', '97', '3', '111316', '238521', '18'), +('15', '97', '3', '111014', '211520', '18'), +('15', '97', '5', '111317', '241618', '18'), +('15', '97', '5', '111321', '240635', '18'), +('15', '97', '5', '111318', '240151', '18'), +('15', '97', '5', '111319', '238083', '18'), +('15', '97', '8', '111331', '242554', '18'), +('15', '97', '8', '111332', '239619', '18'), +('15', '97', '8', '111329', '238409', '18'), +('15', '97', '8', '111030', '212914', '18'), +('15', '97', '6', '111325', '241368', '18'), +('15', '97', '6', '111322', '240492', '18'), +('15', '97', '6', '111326', '237915', '18'), +('15', '97', '6', '111024', '211653', '18'), +('15', '97', '17', '56084', '157282', '18'), +('15', '97', '17', '56045', '154394', '18'), +('15', '97', '17', '104420', '133078', '18'), +('15', '97', '17', '54855', '101013', '18'), +('15', '97', '7', '56079', '152226', '18'), +('15', '97', '7', '56040', '150671', '18'), +('15', '97', '7', '104418', '127361', '18'), +('15', '97', '7', '54850', '97046', '18'), +('15', '97', '9', '67098', '248592', '18'), +('15', '97', '9', '56033', '148528', '18'), +('15', '97', '9', '56070', '148423', '18'), +('15', '97', '9', '56031', '148360', '18'), +('15', '97', '15', '111348', '242492', '18'), +('15', '97', '15', '111343', '241621', '18'), +('15', '97', '15', '111342', '241620', '18'), +('15', '97', '15', '111346', '239856', '18'), +('15', '97', '20', '111355', '250365', '18'), +('15', '97', '20', '111351', '248973', '18'), +('15', '97', '20', '111352', '248680', '18'), +('15', '97', '20', '111053', '220725', '18'), +('15', '97', '12', '81795', '148636', '18'), +('15', '97', '12', '56074', '147031', '18'), +('15', '97', '12', '104415', '126539', '18'), +('15', '97', '12', '49656', '95979', '18'), +('15', '97', '18', '62986', '156068', '18'), +('15', '97', '18', '56041', '155833', '18'), +('15', '97', '18', '104419', '133335', '18'), +('15', '97', '18', '54851', '98200', '18'), +('15', '97', '19', '62990', '154698', '18'), +('15', '97', '19', '56037', '153555', '18'), +('15', '97', '19', '56075', '151703', '18'), +('15', '97', '19', '81763', '150777', '18'), +('15', '97', '13', '111871', '401504', '18'), +('15', '97', '13', '111815', '397485', '18'), +('15', '97', '13', '111527', '385537', '18'), +('15', '97', '13', '111515', '378542', '18'), +('15', '97', '14', '111871', '401504', '18'), +('15', '97', '14', '111815', '397485', '18'), +('15', '97', '14', '111527', '385537', '18'), +('15', '97', '14', '111515', '378542', '18'), +('15', '97', '11', '111338', '241223', '18'), +('15', '97', '11', '111335', '239856', '18'), +('15', '97', '11', '111333', '239803', '18'), +('15', '97', '11', '111337', '239041', '18'), +('15', '98', '22', '21807', '0', '18'), +('15', '98', '22', '21805', '0', '18'), +('15', '98', '22', '12425', '0', '18'), +('15', '98', '22', '7867', '0', '18'), +('15', '98', '1', '128691', '300357', '18'), +('15', '98', '1', '111303', '240996', '18'), +('15', '98', '1', '111300', '240921', '18'), +('15', '98', '1', '111302', '240221', '18'), +('15', '98', '2', '94056', '153490', '18'), +('15', '98', '2', '62985', '152102', '18'), +('15', '98', '2', '104417', '128882', '18'), +('15', '98', '2', '54846', '97785', '18'), +('15', '98', '3', '111315', '241243', '18'), +('15', '98', '3', '111313', '240698', '18'), +('15', '98', '3', '111316', '238527', '18'), +('15', '98', '3', '111014', '211528', '18'), +('15', '98', '5', '111317', '241625', '18'), +('15', '98', '5', '111321', '240641', '18'), +('15', '98', '5', '111318', '240156', '18'), +('15', '98', '5', '111319', '238089', '18'), +('15', '98', '8', '111331', '242561', '18'), +('15', '98', '8', '111332', '239624', '18'), +('15', '98', '8', '111329', '238414', '18'), +('15', '98', '8', '111030', '212921', '18'), +('15', '98', '6', '111325', '241373', '18'), +('15', '98', '6', '111322', '240496', '18'), +('15', '98', '6', '111326', '237922', '18'), +('15', '98', '6', '111024', '211658', '18'), +('15', '98', '17', '56084', '157290', '18'), +('15', '98', '17', '56045', '154398', '18'), +('15', '98', '17', '104420', '133085', '18'), +('15', '98', '17', '54855', '101018', '18'), +('15', '98', '7', '56079', '152232', '18'), +('15', '98', '7', '56040', '150677', '18'), +('15', '98', '7', '104418', '127367', '18'), +('15', '98', '7', '54850', '97049', '18'), +('15', '98', '9', '67098', '248598', '18'), +('15', '98', '9', '56033', '148533', '18'), +('15', '98', '9', '56070', '148428', '18'), +('15', '98', '9', '56031', '148365', '18'), +('15', '98', '15', '111348', '242499', '18'), +('15', '98', '15', '111342', '241627', '18'), +('15', '98', '15', '111343', '241626', '18'), +('15', '98', '15', '111346', '239860', '18'), +('15', '98', '20', '111355', '250370', '18'), +('15', '98', '20', '111351', '248978', '18'), +('15', '98', '20', '111352', '248686', '18'), +('15', '98', '20', '111053', '220730', '18'), +('15', '98', '12', '81795', '148642', '18'), +('15', '98', '12', '56074', '147036', '18'), +('15', '98', '12', '104415', '126544', '18'), +('15', '98', '12', '49656', '95980', '18'), +('15', '98', '18', '62986', '156076', '18'), +('15', '98', '18', '56041', '155837', '18'), +('15', '98', '18', '104419', '133342', '18'), +('15', '98', '18', '54851', '98206', '18'), +('15', '98', '19', '62990', '154702', '18'), +('15', '98', '19', '56037', '153561', '18'), +('15', '98', '19', '56075', '151709', '18'), +('15', '98', '19', '81763', '150784', '18'), +('15', '98', '13', '111871', '401803', '18'), +('15', '98', '13', '111815', '397784', '18'), +('15', '98', '13', '111527', '385836', '18'), +('15', '98', '13', '111515', '378840', '18'), +('15', '98', '14', '111871', '401803', '18'), +('15', '98', '14', '111815', '397784', '18'), +('15', '98', '14', '111527', '385836', '18'), +('15', '98', '14', '111515', '378840', '18'), +('15', '98', '11', '111338', '241229', '18'), +('15', '98', '11', '111335', '239862', '18'), +('15', '98', '11', '111333', '239807', '18'), +('15', '98', '11', '111337', '239048', '18'), +('15', '99', '22', '21807', '0', '18'), +('15', '99', '22', '21805', '0', '18'), +('15', '99', '22', '12425', '0', '18'), +('15', '99', '22', '7867', '0', '18'), +('15', '99', '1', '128691', '300362', '18'), +('15', '99', '1', '111303', '241002', '18'), +('15', '99', '1', '111300', '240925', '18'), +('15', '99', '1', '111302', '240227', '18'), +('15', '99', '2', '94056', '153495', '18'), +('15', '99', '2', '62985', '152107', '18'), +('15', '99', '2', '104417', '128886', '18'), +('15', '99', '2', '54846', '97790', '18'), +('15', '99', '3', '111315', '241250', '18'), +('15', '99', '3', '111313', '240703', '18'), +('15', '99', '3', '111316', '238532', '18'), +('15', '99', '3', '111014', '211535', '18'), +('15', '99', '5', '111317', '241631', '18'), +('15', '99', '5', '111321', '240647', '18'), +('15', '99', '5', '111318', '240161', '18'), +('15', '99', '5', '111319', '238095', '18'), +('15', '99', '8', '111331', '242568', '18'), +('15', '99', '8', '111332', '239630', '18'), +('15', '99', '8', '111329', '238420', '18'), +('15', '99', '8', '111030', '212928', '18'), +('15', '99', '6', '111325', '241378', '18'), +('15', '99', '6', '111322', '240500', '18'), +('15', '99', '6', '111326', '237929', '18'), +('15', '99', '6', '111024', '211663', '18'), +('15', '99', '17', '56084', '157298', '18'), +('15', '99', '17', '56045', '154403', '18'), +('15', '99', '17', '104420', '133092', '18'), +('15', '99', '17', '54855', '101022', '18'), +('15', '99', '7', '56079', '152237', '18'), +('15', '99', '7', '56040', '150683', '18'), +('15', '99', '7', '104418', '127372', '18'), +('15', '99', '7', '54850', '97052', '18'), +('15', '99', '9', '67098', '248603', '18'), +('15', '99', '9', '56033', '148537', '18'), +('15', '99', '9', '56070', '148432', '18'), +('15', '99', '9', '56031', '148369', '18'), +('15', '99', '15', '111348', '242506', '18'), +('15', '99', '15', '111342', '241634', '18'), +('15', '99', '15', '111343', '241632', '18'), +('15', '99', '15', '111346', '239865', '18'), +('15', '99', '20', '111355', '250374', '18'), +('15', '99', '20', '111351', '248983', '18'), +('15', '99', '20', '111352', '248692', '18'), +('15', '99', '20', '111053', '220734', '18'), +('15', '99', '12', '81795', '148647', '18'), +('15', '99', '12', '56074', '147040', '18'), +('15', '99', '12', '104415', '126549', '18'), +('15', '99', '12', '49656', '95981', '18'), +('15', '99', '18', '62986', '156083', '18'), +('15', '99', '18', '56041', '155841', '18'), +('15', '99', '18', '104419', '133350', '18'), +('15', '99', '18', '54851', '98212', '18'), +('15', '99', '19', '62990', '154707', '18'), +('15', '99', '19', '56037', '153568', '18'), +('15', '99', '19', '56075', '151716', '18'), +('15', '99', '19', '81763', '150792', '18'), +('15', '99', '13', '111871', '402103', '18'), +('15', '99', '13', '111815', '398083', '18'), +('15', '99', '13', '111527', '386135', '18'), +('15', '99', '13', '111515', '379139', '18'), +('15', '99', '14', '111871', '402103', '18'), +('15', '99', '14', '111815', '398083', '18'), +('15', '99', '14', '111527', '386135', '18'), +('15', '99', '14', '111515', '379139', '18'), +('15', '99', '11', '111338', '241234', '18'), +('15', '99', '11', '111335', '239868', '18'), +('15', '99', '11', '111333', '239811', '18'), +('15', '99', '11', '111337', '239055', '18'), +('15', '100', '22', '21807', '0', '20'), +('15', '100', '22', '21805', '0', '20'), +('15', '100', '22', '12425', '0', '20'), +('15', '100', '22', '7867', '0', '20'), +('15', '100', '1', '98769', '402283', '20'), +('15', '100', '1', '128691', '300366', '20'), +('15', '100', '1', '111303', '241007', '20'), +('15', '100', '1', '111300', '240930', '20'), +('15', '100', '2', '94056', '153500', '20'), +('15', '100', '2', '62985', '152113', '20'), +('15', '100', '2', '104417', '128890', '20'), +('15', '100', '2', '54846', '97795', '20'), +('15', '100', '3', '111315', '241256', '20'), +('15', '100', '3', '111313', '240709', '20'), +('15', '100', '3', '111316', '238538', '20'), +('15', '100', '3', '111014', '211541', '20'), +('15', '100', '5', '111317', '241637', '20'), +('15', '100', '5', '111321', '240653', '20'), +('15', '100', '5', '111318', '240165', '20'), +('15', '100', '5', '111319', '238101', '20'), +('15', '100', '8', '111331', '242574', '20'), +('15', '100', '8', '111332', '239635', '20'), +('15', '100', '8', '111329', '238424', '20'), +('15', '100', '8', '111030', '212934', '20'), +('15', '100', '6', '111325', '241382', '20'), +('15', '100', '6', '111322', '240504', '20'), +('15', '100', '6', '111326', '237936', '20'), +('15', '100', '6', '111024', '211667', '20'), +('15', '100', '17', '56084', '157306', '20'), +('15', '100', '17', '56045', '154407', '20'), +('15', '100', '17', '104420', '133099', '20'), +('15', '100', '17', '54855', '101026', '20'), +('15', '100', '7', '56079', '152243', '20'), +('15', '100', '7', '56040', '150689', '20'), +('15', '100', '7', '104418', '127377', '20'), +('15', '100', '7', '54850', '97055', '20'), +('15', '100', '9', '67098', '248608', '20'), +('15', '100', '9', '56033', '148541', '20'), +('15', '100', '9', '56070', '148436', '20'), +('15', '100', '9', '56031', '148373', '20'), +('15', '100', '15', '111348', '242512', '20'), +('15', '100', '15', '111342', '241640', '20'), +('15', '100', '15', '111343', '241637', '20'), +('15', '100', '15', '111346', '239870', '20'), +('15', '100', '20', '111355', '250378', '20'), +('15', '100', '20', '111351', '248988', '20'), +('15', '100', '20', '111352', '248698', '20'), +('15', '100', '20', '111053', '220738', '20'), +('15', '100', '12', '81795', '148652', '20'), +('15', '100', '12', '56074', '147045', '20'), +('15', '100', '12', '104415', '126554', '20'), +('15', '100', '12', '49656', '95981', '20'), +('15', '100', '18', '62986', '156091', '20'), +('15', '100', '18', '56041', '155845', '20'), +('15', '100', '18', '104419', '133357', '20'), +('15', '100', '18', '54851', '98218', '20'), +('15', '100', '19', '62990', '154712', '20'), +('15', '100', '19', '56037', '153573', '20'), +('15', '100', '19', '56075', '151722', '20'), +('15', '100', '19', '81763', '150798', '20'), +('15', '100', '13', '111871', '403868', '20'), +('15', '100', '13', '111815', '399849', '20'), +('15', '100', '13', '111527', '387901', '20'), +('15', '100', '13', '111515', '380904', '20'), +('15', '100', '14', '111871', '403868', '20'), +('15', '100', '14', '111815', '399849', '20'), +('15', '100', '14', '111527', '387901', '20'), +('15', '100', '14', '111515', '380904', '20'), +('15', '100', '11', '133816', '312712', '20'), +('15', '100', '11', '111338', '241240', '20'), +('15', '100', '11', '111335', '239874', '20'), +('15', '100', '11', '111333', '239815', '20'), +('15', '100', '22', '21807', '0', '19'), +('15', '100', '22', '21805', '0', '19'), +('15', '100', '22', '12425', '0', '19'), +('15', '100', '22', '7867', '0', '19'), +('15', '100', '1', '98769', '402283', '19'), +('15', '100', '1', '128691', '300366', '19'), +('15', '100', '1', '111303', '241007', '19'), +('15', '100', '1', '111300', '240930', '19'), +('15', '100', '2', '94056', '153500', '19'), +('15', '100', '2', '62985', '152113', '19'), +('15', '100', '2', '104417', '128890', '19'), +('15', '100', '2', '54846', '97795', '19'), +('15', '100', '3', '111315', '241256', '19'), +('15', '100', '3', '111313', '240709', '19'), +('15', '100', '3', '111316', '238538', '19'), +('15', '100', '3', '111014', '211541', '19'), +('15', '100', '5', '111317', '241637', '19'), +('15', '100', '5', '111321', '240653', '19'), +('15', '100', '5', '111318', '240165', '19'), +('15', '100', '5', '111319', '238101', '19'), +('15', '100', '8', '111331', '242574', '19'), +('15', '100', '8', '111332', '239635', '19'), +('15', '100', '8', '111329', '238424', '19'), +('15', '100', '8', '111030', '212934', '19'), +('15', '100', '6', '111325', '241382', '19'), +('15', '100', '6', '111322', '240504', '19'), +('15', '100', '6', '111326', '237936', '19'), +('15', '100', '6', '111024', '211667', '19'), +('15', '100', '17', '56084', '157306', '19'), +('15', '100', '17', '56045', '154407', '19'), +('15', '100', '17', '104420', '133099', '19'), +('15', '100', '17', '54855', '101026', '19'), +('15', '100', '7', '56079', '152243', '19'), +('15', '100', '7', '56040', '150689', '19'), +('15', '100', '7', '104418', '127377', '19'), +('15', '100', '7', '54850', '97055', '19'), +('15', '100', '9', '67098', '248608', '19'), +('15', '100', '9', '56033', '148541', '19'), +('15', '100', '9', '56070', '148436', '19'), +('15', '100', '9', '56031', '148373', '19'), +('15', '100', '15', '111348', '242512', '19'), +('15', '100', '15', '111342', '241640', '19'), +('15', '100', '15', '111343', '241637', '19'), +('15', '100', '15', '111346', '239870', '19'), +('15', '100', '20', '111355', '250378', '19'), +('15', '100', '20', '111351', '248988', '19'), +('15', '100', '20', '111352', '248698', '19'), +('15', '100', '20', '111053', '220738', '19'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '100', '12', '81795', '148652', '19'), +('15', '100', '12', '56074', '147045', '19'), +('15', '100', '12', '104415', '126554', '19'), +('15', '100', '12', '49656', '95981', '19'), +('15', '100', '18', '62986', '156091', '19'), +('15', '100', '18', '56041', '155845', '19'), +('15', '100', '18', '104419', '133357', '19'), +('15', '100', '18', '54851', '98218', '19'), +('15', '100', '19', '62990', '154712', '19'), +('15', '100', '19', '56037', '153573', '19'), +('15', '100', '19', '56075', '151722', '19'), +('15', '100', '19', '81763', '150798', '19'), +('15', '100', '13', '111871', '402401', '19'), +('15', '100', '13', '111815', '398382', '19'), +('15', '100', '13', '111527', '386434', '19'), +('15', '100', '13', '111515', '379437', '19'), +('15', '100', '14', '111871', '402401', '19'), +('15', '100', '14', '111815', '398382', '19'), +('15', '100', '14', '111527', '386434', '19'), +('15', '100', '14', '111515', '379437', '19'), +('15', '100', '11', '133816', '312712', '19'), +('15', '100', '11', '111338', '241240', '19'), +('15', '100', '11', '111335', '239874', '19'), +('15', '100', '11', '111333', '239815', '19'), +('15', '101', '22', '21807', '0', '20'), +('15', '101', '22', '21805', '0', '20'), +('15', '101', '22', '12425', '0', '20'), +('15', '101', '22', '7867', '0', '20'), +('15', '101', '1', '98769', '402287', '20'), +('15', '101', '1', '128691', '300370', '20'), +('15', '101', '1', '111303', '241013', '20'), +('15', '101', '1', '111300', '240935', '20'), +('15', '101', '2', '94056', '153505', '20'), +('15', '101', '2', '62985', '152119', '20'), +('15', '101', '2', '104417', '128894', '20'), +('15', '101', '2', '54846', '97800', '20'), +('15', '101', '3', '111315', '241263', '20'), +('15', '101', '3', '111313', '240714', '20'), +('15', '101', '3', '111316', '238543', '20'), +('15', '101', '3', '111014', '211548', '20'), +('15', '101', '5', '111317', '241643', '20'), +('15', '101', '5', '111321', '240659', '20'), +('15', '101', '5', '111318', '240169', '20'), +('15', '101', '5', '111319', '238107', '20'), +('15', '101', '8', '111331', '242581', '20'), +('15', '101', '8', '111332', '239640', '20'), +('15', '101', '8', '111329', '238430', '20'), +('15', '101', '8', '111030', '212941', '20'), +('15', '101', '6', '111325', '241387', '20'), +('15', '101', '6', '111322', '240508', '20'), +('15', '101', '6', '111326', '237943', '20'), +('15', '101', '6', '111024', '211672', '20'), +('15', '101', '17', '56084', '157314', '20'), +('15', '101', '17', '56045', '154412', '20'), +('15', '101', '17', '104420', '133106', '20'), +('15', '101', '17', '54855', '101031', '20'), +('15', '101', '7', '56079', '152249', '20'), +('15', '101', '7', '56040', '150695', '20'), +('15', '101', '7', '104418', '127383', '20'), +('15', '101', '7', '54850', '97059', '20'), +('15', '101', '9', '67098', '248613', '20'), +('15', '101', '9', '56033', '148546', '20'), +('15', '101', '9', '56070', '148440', '20'), +('15', '101', '9', '56031', '148378', '20'), +('15', '101', '15', '111348', '242519', '20'), +('15', '101', '15', '111342', '241646', '20'), +('15', '101', '15', '111343', '241642', '20'), +('15', '101', '15', '111346', '239875', '20'), +('15', '101', '20', '111355', '250382', '20'), +('15', '101', '20', '111351', '248993', '20'), +('15', '101', '20', '111352', '248704', '20'), +('15', '101', '20', '111053', '220742', '20'), +('15', '101', '12', '81795', '148658', '20'), +('15', '101', '12', '56074', '147049', '20'), +('15', '101', '12', '104415', '126559', '20'), +('15', '101', '12', '49656', '95982', '20'), +('15', '101', '18', '62986', '156098', '20'), +('15', '101', '18', '56041', '155849', '20'), +('15', '101', '18', '104419', '133365', '20'), +('15', '101', '18', '54851', '98224', '20'), +('15', '101', '19', '62990', '154717', '20'), +('15', '101', '19', '56037', '153580', '20'), +('15', '101', '19', '56075', '151729', '20'), +('15', '101', '19', '81763', '150805', '20'), +('15', '101', '13', '111871', '404167', '20'), +('15', '101', '13', '111815', '400148', '20'), +('15', '101', '13', '111527', '388200', '20'), +('15', '101', '13', '111515', '381203', '20'), +('15', '101', '14', '111871', '404167', '20'), +('15', '101', '14', '111815', '400148', '20'), +('15', '101', '14', '111527', '388200', '20'), +('15', '101', '14', '111515', '381203', '20'), +('15', '101', '11', '133816', '312716', '20'), +('15', '101', '11', '111338', '241245', '20'), +('15', '101', '11', '111335', '239880', '20'), +('15', '101', '11', '111333', '239819', '20'), +('15', '102', '22', '21807', '0', '20'), +('15', '102', '22', '21805', '0', '20'), +('15', '102', '22', '12425', '0', '20'), +('15', '102', '22', '7867', '0', '20'), +('15', '102', '1', '98769', '402291', '20'), +('15', '102', '1', '128691', '300374', '20'), +('15', '102', '1', '111303', '241018', '20'), +('15', '102', '1', '111300', '240939', '20'), +('15', '102', '2', '94056', '153510', '20'), +('15', '102', '2', '62985', '152124', '20'), +('15', '102', '2', '104417', '128898', '20'), +('15', '102', '2', '54846', '97805', '20'), +('15', '102', '3', '111315', '241270', '20'), +('15', '102', '3', '111313', '240720', '20'), +('15', '102', '3', '111316', '238549', '20'), +('15', '102', '3', '111014', '211555', '20'), +('15', '102', '5', '111317', '241650', '20'), +('15', '102', '5', '111321', '240666', '20'), +('15', '102', '5', '111318', '240174', '20'), +('15', '102', '5', '111319', '238113', '20'), +('15', '102', '8', '111331', '242588', '20'), +('15', '102', '8', '111332', '239646', '20'), +('15', '102', '8', '111329', '238435', '20'), +('15', '102', '8', '111030', '212948', '20'), +('15', '102', '6', '111325', '241392', '20'), +('15', '102', '6', '111322', '240512', '20'), +('15', '102', '6', '111326', '237950', '20'), +('15', '102', '6', '111024', '211677', '20'), +('15', '102', '17', '56084', '157322', '20'), +('15', '102', '17', '56045', '154416', '20'), +('15', '102', '17', '104420', '133113', '20'), +('15', '102', '17', '54855', '101035', '20'), +('15', '102', '7', '56079', '152255', '20'), +('15', '102', '7', '56040', '150701', '20'), +('15', '102', '7', '104418', '127388', '20'), +('15', '102', '7', '54850', '97062', '20'), +('15', '102', '9', '67098', '248618', '20'), +('15', '102', '9', '56033', '148550', '20'), +('15', '102', '9', '56070', '148445', '20'), +('15', '102', '9', '56031', '148382', '20'), +('15', '102', '15', '111348', '242526', '20'), +('15', '102', '15', '111342', '241653', '20'), +('15', '102', '15', '111343', '241647', '20'), +('15', '102', '15', '111346', '239879', '20'), +('15', '102', '20', '111355', '250386', '20'), +('15', '102', '20', '111351', '248998', '20'), +('15', '102', '20', '111352', '248710', '20'), +('15', '102', '20', '111053', '220746', '20'), +('15', '102', '12', '81795', '148663', '20'), +('15', '102', '12', '56074', '147054', '20'), +('15', '102', '12', '104415', '126564', '20'), +('15', '102', '12', '49656', '95983', '20'), +('15', '102', '18', '62986', '156106', '20'), +('15', '102', '18', '56041', '155853', '20'), +('15', '102', '18', '104419', '133372', '20'), +('15', '102', '18', '54851', '98230', '20'), +('15', '102', '19', '62990', '154721', '20'), +('15', '102', '19', '56037', '153586', '20'), +('15', '102', '19', '56075', '151735', '20'), +('15', '102', '19', '81763', '150812', '20'), +('15', '102', '13', '111871', '404466', '20'), +('15', '102', '13', '111815', '400447', '20'), +('15', '102', '13', '111527', '388499', '20'), +('15', '102', '13', '111515', '381501', '20'), +('15', '102', '14', '111871', '404466', '20'), +('15', '102', '14', '111815', '400447', '20'), +('15', '102', '14', '111527', '388499', '20'), +('15', '102', '14', '111515', '381501', '20'), +('15', '102', '11', '133816', '312721', '20'), +('15', '102', '11', '111338', '241251', '20'), +('15', '102', '11', '111335', '239886', '20'), +('15', '102', '11', '111333', '239823', '20'), +('15', '103', '22', '21807', '0', '20'), +('15', '103', '22', '21805', '0', '20'), +('15', '103', '22', '12425', '0', '20'), +('15', '103', '22', '7867', '0', '20'), +('15', '103', '1', '98769', '402295', '20'), +('15', '103', '1', '128691', '300378', '20'), +('15', '103', '1', '111303', '241024', '20'), +('15', '103', '1', '111300', '240944', '20'), +('15', '103', '2', '94056', '153515', '20'), +('15', '103', '2', '62985', '152130', '20'), +('15', '103', '2', '104417', '128902', '20'), +('15', '103', '2', '54846', '97810', '20'), +('15', '103', '3', '111315', '241277', '20'), +('15', '103', '3', '111313', '240725', '20'), +('15', '103', '3', '111316', '238555', '20'), +('15', '103', '3', '111014', '211562', '20'), +('15', '103', '5', '111317', '241656', '20'), +('15', '103', '5', '111321', '240672', '20'), +('15', '103', '5', '111318', '240178', '20'), +('15', '103', '5', '111319', '238119', '20'), +('15', '103', '8', '111331', '242594', '20'), +('15', '103', '8', '111332', '239651', '20'), +('15', '103', '8', '111329', '238439', '20'), +('15', '103', '8', '111030', '212954', '20'), +('15', '103', '6', '111325', '241397', '20'), +('15', '103', '6', '111322', '240516', '20'), +('15', '103', '6', '111326', '237957', '20'), +('15', '103', '6', '111024', '211682', '20'), +('15', '103', '17', '56084', '157330', '20'), +('15', '103', '17', '56045', '154421', '20'), +('15', '103', '17', '104420', '133120', '20'), +('15', '103', '17', '54855', '101040', '20'), +('15', '103', '7', '56079', '152260', '20'), +('15', '103', '7', '56040', '150707', '20'), +('15', '103', '7', '104418', '127394', '20'), +('15', '103', '7', '54850', '97065', '20'), +('15', '103', '9', '67098', '248623', '20'), +('15', '103', '9', '56033', '148554', '20'), +('15', '103', '9', '56070', '148449', '20'), +('15', '103', '9', '56031', '148386', '20'), +('15', '103', '15', '111348', '242532', '20'), +('15', '103', '15', '111342', '241659', '20'), +('15', '103', '15', '111343', '241652', '20'), +('15', '103', '15', '111346', '239884', '20'), +('15', '103', '20', '111355', '250390', '20'), +('15', '103', '20', '111351', '249003', '20'), +('15', '103', '20', '111352', '248716', '20'), +('15', '103', '20', '111053', '220750', '20'), +('15', '103', '12', '81795', '148668', '20'), +('15', '103', '12', '56074', '147058', '20'), +('15', '103', '12', '104415', '126568', '20'), +('15', '103', '12', '49656', '95984', '20'), +('15', '103', '18', '62986', '156113', '20'), +('15', '103', '18', '56041', '155857', '20'), +('15', '103', '18', '104419', '133379', '20'), +('15', '103', '18', '54851', '98236', '20'), +('15', '103', '19', '62990', '154726', '20'), +('15', '103', '19', '56037', '153592', '20'), +('15', '103', '19', '56075', '151742', '20'), +('15', '103', '19', '81763', '150819', '20'), +('15', '103', '13', '111871', '404765', '20'), +('15', '103', '13', '111815', '400746', '20'), +('15', '103', '13', '111527', '388797', '20'), +('15', '103', '13', '111515', '381800', '20'), +('15', '103', '14', '111871', '404765', '20'), +('15', '103', '14', '111815', '400746', '20'), +('15', '103', '14', '111527', '388797', '20'), +('15', '103', '14', '111515', '381800', '20'), +('15', '103', '11', '133816', '312726', '20'), +('15', '103', '11', '111338', '241256', '20'), +('15', '103', '11', '111335', '239892', '20'), +('15', '103', '11', '111333', '239827', '20'), +('15', '104', '22', '21807', '0', '20'), +('15', '104', '22', '21805', '0', '20'), +('15', '104', '22', '12425', '0', '20'), +('15', '104', '22', '7867', '0', '20'), +('15', '104', '1', '98769', '402299', '20'), +('15', '104', '1', '128691', '300382', '20'), +('15', '104', '1', '111303', '241029', '20'), +('15', '104', '1', '111300', '240949', '20'), +('15', '104', '2', '94056', '153520', '20'), +('15', '104', '2', '62985', '152136', '20'), +('15', '104', '2', '104417', '128906', '20'), +('15', '104', '2', '54846', '97815', '20'), +('15', '104', '3', '111315', '241284', '20'), +('15', '104', '3', '111313', '240730', '20'), +('15', '104', '3', '111316', '238560', '20'), +('15', '104', '3', '111014', '211569', '20'), +('15', '104', '5', '111317', '241662', '20'), +('15', '104', '5', '111321', '240678', '20'), +('15', '104', '5', '111318', '240183', '20'), +('15', '104', '5', '111319', '238125', '20'), +('15', '104', '8', '111331', '242601', '20'), +('15', '104', '8', '111332', '239657', '20'), +('15', '104', '8', '111329', '238445', '20'), +('15', '104', '8', '111030', '212961', '20'), +('15', '104', '6', '111325', '241402', '20'), +('15', '104', '6', '111322', '240520', '20'), +('15', '104', '6', '111326', '237964', '20'), +('15', '104', '6', '111024', '211687', '20'), +('15', '104', '17', '56084', '157338', '20'), +('15', '104', '17', '56045', '154425', '20'), +('15', '104', '17', '104420', '133127', '20'), +('15', '104', '17', '54855', '101044', '20'), +('15', '104', '7', '56079', '152266', '20'), +('15', '104', '7', '56040', '150713', '20'), +('15', '104', '7', '104418', '127399', '20'), +('15', '104', '7', '54850', '97068', '20'), +('15', '104', '9', '67098', '248628', '20'), +('15', '104', '9', '56033', '148558', '20'), +('15', '104', '9', '56070', '148453', '20'), +('15', '104', '9', '56031', '148391', '20'), +('15', '104', '15', '111348', '242539', '20'), +('15', '104', '15', '111342', '241666', '20'), +('15', '104', '15', '111343', '241657', '20'), +('15', '104', '15', '111346', '239889', '20'), +('15', '104', '20', '111355', '250394', '20'), +('15', '104', '20', '111351', '249009', '20'), +('15', '104', '20', '111352', '248722', '20'), +('15', '104', '20', '111053', '220754', '20'), +('15', '104', '12', '81795', '148673', '20'), +('15', '104', '12', '56074', '147062', '20'), +('15', '104', '12', '104415', '126573', '20'), +('15', '104', '12', '49656', '95984', '20'), +('15', '104', '18', '62986', '156120', '20'), +('15', '104', '18', '56041', '155861', '20'), +('15', '104', '18', '104419', '133387', '20'), +('15', '104', '18', '54851', '98242', '20'), +('15', '104', '19', '62990', '154731', '20'), +('15', '104', '19', '56037', '153598', '20'), +('15', '104', '19', '56075', '151748', '20'), +('15', '104', '19', '81763', '150826', '20'), +('15', '104', '13', '111871', '405064', '20'), +('15', '104', '13', '111815', '401045', '20'), +('15', '104', '13', '111527', '389096', '20'), +('15', '104', '13', '111515', '382098', '20'), +('15', '104', '14', '111871', '405064', '20'), +('15', '104', '14', '111815', '401045', '20'), +('15', '104', '14', '111527', '389096', '20'), +('15', '104', '14', '111515', '382098', '20'), +('15', '104', '11', '133816', '312730', '20'), +('15', '104', '11', '111338', '241262', '20'), +('15', '104', '11', '111335', '239898', '20'), +('15', '104', '11', '111333', '239831', '20'), +('15', '105', '22', '21807', '0', '23'), +('15', '105', '22', '21805', '0', '23'), +('15', '105', '22', '12425', '0', '23'), +('15', '105', '22', '7867', '0', '23'), +('15', '105', '1', '98769', '402303', '23'), +('15', '105', '1', '128691', '300386', '23'), +('15', '105', '1', '111303', '241035', '23'), +('15', '105', '1', '111300', '240954', '23'), +('15', '105', '2', '94056', '153525', '23'), +('15', '105', '2', '62985', '152141', '23'), +('15', '105', '2', '104417', '128911', '23'), +('15', '105', '2', '54846', '97821', '23'), +('15', '105', '3', '111315', '241291', '23'), +('15', '105', '3', '111313', '240736', '23'), +('15', '105', '3', '111316', '238566', '23'), +('15', '105', '3', '111014', '211576', '23'), +('15', '105', '5', '111317', '241668', '23'), +('15', '105', '5', '111321', '240684', '23'), +('15', '105', '5', '111318', '240187', '23'), +('15', '105', '5', '111319', '238131', '23'), +('15', '105', '8', '111331', '242608', '23'), +('15', '105', '8', '111332', '239662', '23'), +('15', '105', '8', '111329', '238450', '23'), +('15', '105', '8', '111030', '212968', '23'), +('15', '105', '6', '111325', '241407', '23'), +('15', '105', '6', '111322', '240524', '23'), +('15', '105', '6', '111326', '237971', '23'), +('15', '105', '6', '111024', '211692', '23'), +('15', '105', '17', '56084', '157346', '23'), +('15', '105', '17', '56045', '154430', '23'), +('15', '105', '17', '104420', '133134', '23'), +('15', '105', '17', '54855', '101048', '23'), +('15', '105', '7', '56079', '152272', '23'), +('15', '105', '7', '56040', '150719', '23'), +('15', '105', '7', '104418', '127405', '23'), +('15', '105', '7', '54850', '97071', '23'), +('15', '105', '9', '67098', '248634', '23'), +('15', '105', '9', '56033', '148563', '23'), +('15', '105', '9', '56070', '148457', '23'), +('15', '105', '9', '56031', '148395', '23'), +('15', '105', '15', '111348', '242546', '23'), +('15', '105', '15', '111342', '241672', '23'), +('15', '105', '15', '111343', '241662', '23'), +('15', '105', '15', '111346', '239894', '23'), +('15', '105', '20', '111355', '250398', '23'), +('15', '105', '20', '111351', '249014', '23'), +('15', '105', '20', '111352', '248728', '23'), +('15', '105', '20', '111053', '220758', '23'), +('15', '105', '12', '81795', '148679', '23'), +('15', '105', '12', '56074', '147067', '23'), +('15', '105', '12', '104415', '126578', '23'), +('15', '105', '12', '49656', '95985', '23'), +('15', '105', '18', '62986', '156128', '23'), +('15', '105', '18', '56041', '155866', '23'), +('15', '105', '18', '104419', '133394', '23'), +('15', '105', '18', '54851', '98248', '23'), +('15', '105', '19', '62990', '154735', '23'), +('15', '105', '19', '56037', '153604', '23'), +('15', '105', '19', '56075', '151755', '23'), +('15', '105', '19', '81763', '150833', '23'), +('15', '105', '13', '111871', '405364', '23'), +('15', '105', '13', '111815', '401344', '23'), +('15', '105', '13', '111527', '389395', '23'), +('15', '105', '13', '111515', '382397', '23'), +('15', '105', '14', '111871', '405364', '23'), +('15', '105', '14', '111815', '401344', '23'), +('15', '105', '14', '111527', '389395', '23'), +('15', '105', '14', '111515', '382397', '23'), +('15', '105', '11', '133816', '312735', '23'), +('15', '105', '11', '111338', '241268', '23'), +('15', '105', '11', '111335', '239904', '23'), +('15', '105', '11', '111333', '239835', '23'), +('15', '105', '22', '21807', '0', '22'), +('15', '105', '22', '21805', '0', '22'), +('15', '105', '22', '12425', '0', '22'), +('15', '105', '22', '7867', '0', '22'), +('15', '105', '1', '98769', '402303', '22'), +('15', '105', '1', '128691', '300386', '22'), +('15', '105', '1', '111303', '241035', '22'), +('15', '105', '1', '111300', '240954', '22'), +('15', '105', '2', '94056', '153525', '22'), +('15', '105', '2', '62985', '152141', '22'), +('15', '105', '2', '104417', '128911', '22'), +('15', '105', '2', '54846', '97821', '22'), +('15', '105', '3', '111315', '241291', '22'), +('15', '105', '3', '111313', '240736', '22'), +('15', '105', '3', '111316', '238566', '22'), +('15', '105', '3', '111014', '211576', '22'), +('15', '105', '5', '111317', '241668', '22'), +('15', '105', '5', '111321', '240684', '22'), +('15', '105', '5', '111318', '240187', '22'), +('15', '105', '5', '111319', '238131', '22'), +('15', '105', '8', '111331', '242608', '22'), +('15', '105', '8', '111332', '239662', '22'), +('15', '105', '8', '111329', '238450', '22'), +('15', '105', '8', '111030', '212968', '22'), +('15', '105', '6', '111325', '241407', '22'), +('15', '105', '6', '111322', '240524', '22'), +('15', '105', '6', '111326', '237971', '22'), +('15', '105', '6', '111024', '211692', '22'), +('15', '105', '17', '56084', '157346', '22'), +('15', '105', '17', '56045', '154430', '22'), +('15', '105', '17', '104420', '133134', '22'), +('15', '105', '17', '54855', '101048', '22'), +('15', '105', '7', '56079', '152272', '22'), +('15', '105', '7', '56040', '150719', '22'), +('15', '105', '7', '104418', '127405', '22'), +('15', '105', '7', '54850', '97071', '22'), +('15', '105', '9', '67098', '248634', '22'), +('15', '105', '9', '56033', '148563', '22'), +('15', '105', '9', '56070', '148457', '22'), +('15', '105', '9', '56031', '148395', '22'), +('15', '105', '15', '111348', '242546', '22'), +('15', '105', '15', '111342', '241672', '22'), +('15', '105', '15', '111343', '241662', '22'), +('15', '105', '15', '111346', '239894', '22'), +('15', '105', '20', '111355', '250398', '22'), +('15', '105', '20', '111351', '249014', '22'), +('15', '105', '20', '111352', '248728', '22'), +('15', '105', '20', '111053', '220758', '22'), +('15', '105', '12', '81795', '148679', '22'), +('15', '105', '12', '56074', '147067', '22'), +('15', '105', '12', '104415', '126578', '22'), +('15', '105', '12', '49656', '95985', '22'), +('15', '105', '18', '62986', '156128', '22'), +('15', '105', '18', '56041', '155866', '22'), +('15', '105', '18', '104419', '133394', '22'), +('15', '105', '18', '54851', '98248', '22'), +('15', '105', '19', '62990', '154735', '22'), +('15', '105', '19', '56037', '153604', '22'), +('15', '105', '19', '56075', '151755', '22'), +('15', '105', '19', '81763', '150833', '22'), +('15', '105', '13', '111871', '405364', '22'), +('15', '105', '13', '111815', '401344', '22'), +('15', '105', '13', '111527', '389395', '22'), +('15', '105', '13', '111515', '382397', '22'), +('15', '105', '14', '111871', '405364', '22'), +('15', '105', '14', '111815', '401344', '22'), +('15', '105', '14', '111527', '389395', '22'), +('15', '105', '14', '111515', '382397', '22'), +('15', '105', '11', '133816', '312735', '22'), +('15', '105', '11', '111338', '241268', '22'), +('15', '105', '11', '111335', '239904', '22'), +('15', '105', '11', '111333', '239835', '22'), +('15', '105', '22', '21807', '0', '21'), +('15', '105', '22', '21805', '0', '21'), +('15', '105', '22', '12425', '0', '21'), +('15', '105', '22', '7867', '0', '21'), +('15', '105', '1', '98769', '402303', '21'), +('15', '105', '1', '128691', '300386', '21'), +('15', '105', '1', '111303', '241035', '21'), +('15', '105', '1', '111300', '240954', '21'), +('15', '105', '2', '94056', '153525', '21'), +('15', '105', '2', '62985', '152141', '21'), +('15', '105', '2', '104417', '128911', '21'), +('15', '105', '2', '54846', '97821', '21'), +('15', '105', '3', '111315', '241291', '21'), +('15', '105', '3', '111313', '240736', '21'), +('15', '105', '3', '111316', '238566', '21'), +('15', '105', '3', '111014', '211576', '21'), +('15', '105', '5', '111317', '241668', '21'), +('15', '105', '5', '111321', '240684', '21'), +('15', '105', '5', '111318', '240187', '21'), +('15', '105', '5', '111319', '238131', '21'), +('15', '105', '8', '111331', '242608', '21'), +('15', '105', '8', '111332', '239662', '21'), +('15', '105', '8', '111329', '238450', '21'), +('15', '105', '8', '111030', '212968', '21'), +('15', '105', '6', '111325', '241407', '21'), +('15', '105', '6', '111322', '240524', '21'), +('15', '105', '6', '111326', '237971', '21'), +('15', '105', '6', '111024', '211692', '21'), +('15', '105', '17', '56084', '157346', '21'), +('15', '105', '17', '56045', '154430', '21'), +('15', '105', '17', '104420', '133134', '21'), +('15', '105', '17', '54855', '101048', '21'), +('15', '105', '7', '56079', '152272', '21'), +('15', '105', '7', '56040', '150719', '21'), +('15', '105', '7', '104418', '127405', '21'), +('15', '105', '7', '54850', '97071', '21'), +('15', '105', '9', '67098', '248634', '21'), +('15', '105', '9', '56033', '148563', '21'), +('15', '105', '9', '56070', '148457', '21'), +('15', '105', '9', '56031', '148395', '21'), +('15', '105', '15', '111348', '242546', '21'), +('15', '105', '15', '111342', '241672', '21'), +('15', '105', '15', '111343', '241662', '21'), +('15', '105', '15', '111346', '239894', '21'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '105', '20', '111355', '250398', '21'), +('15', '105', '20', '111351', '249014', '21'), +('15', '105', '20', '111352', '248728', '21'), +('15', '105', '20', '111053', '220758', '21'), +('15', '105', '12', '81795', '148679', '21'), +('15', '105', '12', '56074', '147067', '21'), +('15', '105', '12', '104415', '126578', '21'), +('15', '105', '12', '49656', '95985', '21'), +('15', '105', '18', '62986', '156128', '21'), +('15', '105', '18', '56041', '155866', '21'), +('15', '105', '18', '104419', '133394', '21'), +('15', '105', '18', '54851', '98248', '21'), +('15', '105', '19', '62990', '154735', '21'), +('15', '105', '19', '56037', '153604', '21'), +('15', '105', '19', '56075', '151755', '21'), +('15', '105', '19', '81763', '150833', '21'), +('15', '105', '13', '111871', '405364', '21'), +('15', '105', '13', '111815', '401344', '21'), +('15', '105', '13', '111527', '389395', '21'), +('15', '105', '13', '111515', '382397', '21'), +('15', '105', '14', '111871', '405364', '21'), +('15', '105', '14', '111815', '401344', '21'), +('15', '105', '14', '111527', '389395', '21'), +('15', '105', '14', '111515', '382397', '21'), +('15', '105', '11', '133816', '312735', '21'), +('15', '105', '11', '111338', '241268', '21'), +('15', '105', '11', '111335', '239904', '21'), +('15', '105', '11', '111333', '239835', '21'), +('15', '106', '22', '21807', '0', '23'), +('15', '106', '22', '21805', '0', '23'), +('15', '106', '22', '12425', '0', '23'), +('15', '106', '22', '7867', '0', '23'), +('15', '106', '1', '98769', '402307', '23'), +('15', '106', '1', '128691', '300391', '23'), +('15', '106', '1', '111303', '241041', '23'), +('15', '106', '1', '111300', '240958', '23'), +('15', '106', '2', '94056', '153530', '23'), +('15', '106', '2', '62985', '152147', '23'), +('15', '106', '2', '104417', '128915', '23'), +('15', '106', '2', '54846', '97826', '23'), +('15', '106', '3', '111315', '241298', '23'), +('15', '106', '3', '111313', '240741', '23'), +('15', '106', '3', '111316', '238572', '23'), +('15', '106', '3', '111014', '211583', '23'), +('15', '106', '5', '111317', '241675', '23'), +('15', '106', '5', '111321', '240690', '23'), +('15', '106', '5', '111318', '240192', '23'), +('15', '106', '5', '111319', '238137', '23'), +('15', '106', '8', '111331', '242615', '23'), +('15', '106', '8', '111332', '239667', '23'), +('15', '106', '8', '111329', '238455', '23'), +('15', '106', '8', '111030', '212975', '23'), +('15', '106', '6', '111325', '241412', '23'), +('15', '106', '6', '111322', '240528', '23'), +('15', '106', '6', '111326', '237978', '23'), +('15', '106', '6', '111024', '211697', '23'), +('15', '106', '17', '56084', '157354', '23'), +('15', '106', '17', '56045', '154435', '23'), +('15', '106', '17', '104420', '133141', '23'), +('15', '106', '17', '54855', '101053', '23'), +('15', '106', '7', '56079', '152278', '23'), +('15', '106', '7', '56040', '150725', '23'), +('15', '106', '7', '104418', '127410', '23'), +('15', '106', '7', '54850', '97074', '23'), +('15', '106', '9', '67098', '248639', '23'), +('15', '106', '9', '56033', '148567', '23'), +('15', '106', '9', '56070', '148462', '23'), +('15', '106', '9', '56031', '148400', '23'), +('15', '106', '15', '111348', '242553', '23'), +('15', '106', '15', '111342', '241679', '23'), +('15', '106', '15', '111343', '241667', '23'), +('15', '106', '15', '111346', '239898', '23'), +('15', '106', '20', '111355', '250402', '23'), +('15', '106', '20', '111351', '249019', '23'), +('15', '106', '20', '111352', '248734', '23'), +('15', '106', '20', '111053', '220762', '23'), +('15', '106', '12', '81795', '148684', '23'), +('15', '106', '12', '56074', '147072', '23'), +('15', '106', '12', '104415', '126583', '23'), +('15', '106', '12', '49656', '95986', '23'), +('15', '106', '18', '62986', '156135', '23'), +('15', '106', '18', '56041', '155870', '23'), +('15', '106', '18', '104419', '133402', '23'), +('15', '106', '18', '54851', '98254', '23'), +('15', '106', '19', '62990', '154740', '23'), +('15', '106', '19', '56037', '153610', '23'), +('15', '106', '19', '56075', '151761', '23'), +('15', '106', '19', '81763', '150840', '23'), +('15', '106', '13', '111871', '405663', '23'), +('15', '106', '13', '111815', '401643', '23'), +('15', '106', '13', '111527', '389694', '23'), +('15', '106', '13', '111515', '382696', '23'), +('15', '106', '14', '111871', '405663', '23'), +('15', '106', '14', '111815', '401643', '23'), +('15', '106', '14', '111527', '389694', '23'), +('15', '106', '14', '111515', '382696', '23'), +('15', '106', '11', '133816', '312740', '23'), +('15', '106', '11', '111338', '241273', '23'), +('15', '106', '11', '111335', '239910', '23'), +('15', '106', '11', '111333', '239839', '23'), +('15', '107', '22', '21807', '0', '23'), +('15', '107', '22', '21805', '0', '23'), +('15', '107', '22', '12425', '0', '23'), +('15', '107', '22', '7867', '0', '23'), +('15', '107', '1', '98769', '402311', '23'), +('15', '107', '1', '128691', '300395', '23'), +('15', '107', '1', '111303', '241046', '23'), +('15', '107', '1', '111300', '240963', '23'), +('15', '107', '2', '94056', '153535', '23'), +('15', '107', '2', '62985', '152153', '23'), +('15', '107', '2', '104417', '128919', '23'), +('15', '107', '2', '54846', '97831', '23'), +('15', '107', '3', '111315', '241305', '23'), +('15', '107', '3', '111313', '240747', '23'), +('15', '107', '3', '111316', '238577', '23'), +('15', '107', '3', '111014', '211590', '23'), +('15', '107', '5', '111317', '241681', '23'), +('15', '107', '5', '111321', '240696', '23'), +('15', '107', '5', '111318', '240197', '23'), +('15', '107', '5', '111319', '238143', '23'), +('15', '107', '8', '111331', '242622', '23'), +('15', '107', '8', '111332', '239673', '23'), +('15', '107', '8', '111329', '238460', '23'), +('15', '107', '8', '111030', '212982', '23'), +('15', '107', '6', '111325', '241417', '23'), +('15', '107', '6', '111322', '240532', '23'), +('15', '107', '6', '111326', '237985', '23'), +('15', '107', '6', '111024', '211702', '23'), +('15', '107', '17', '56084', '157363', '23'), +('15', '107', '17', '56045', '154439', '23'), +('15', '107', '17', '104420', '133148', '23'), +('15', '107', '17', '54855', '101057', '23'), +('15', '107', '7', '56079', '152284', '23'), +('15', '107', '7', '56040', '150731', '23'), +('15', '107', '7', '104418', '127416', '23'), +('15', '107', '7', '54850', '97077', '23'), +('15', '107', '9', '67098', '248644', '23'), +('15', '107', '9', '56033', '148571', '23'), +('15', '107', '9', '56070', '148466', '23'), +('15', '107', '9', '56031', '148404', '23'), +('15', '107', '15', '111348', '242559', '23'), +('15', '107', '15', '111342', '241685', '23'), +('15', '107', '15', '111343', '241673', '23'), +('15', '107', '15', '111346', '239903', '23'), +('15', '107', '20', '111355', '250406', '23'), +('15', '107', '20', '111351', '249024', '23'), +('15', '107', '20', '111352', '248740', '23'), +('15', '107', '20', '111053', '220766', '23'), +('15', '107', '12', '81795', '148690', '23'), +('15', '107', '12', '56074', '147076', '23'), +('15', '107', '12', '104415', '126588', '23'), +('15', '107', '12', '49656', '95987', '23'), +('15', '107', '18', '62986', '156143', '23'), +('15', '107', '18', '56041', '155874', '23'), +('15', '107', '18', '104419', '133409', '23'), +('15', '107', '18', '54851', '98260', '23'), +('15', '107', '19', '62990', '154745', '23'), +('15', '107', '19', '56037', '153617', '23'), +('15', '107', '19', '56075', '151768', '23'), +('15', '107', '19', '81763', '150848', '23'), +('15', '107', '13', '111871', '405962', '23'), +('15', '107', '13', '111815', '401942', '23'), +('15', '107', '13', '111527', '389993', '23'), +('15', '107', '13', '111515', '382994', '23'), +('15', '107', '14', '111871', '405962', '23'), +('15', '107', '14', '111815', '401942', '23'), +('15', '107', '14', '111527', '389993', '23'), +('15', '107', '14', '111515', '382994', '23'), +('15', '107', '11', '133816', '312745', '23'), +('15', '107', '11', '111338', '241279', '23'), +('15', '107', '11', '111335', '239916', '23'), +('15', '107', '11', '111333', '239843', '23'), +('15', '108', '22', '21807', '0', '23'), +('15', '108', '22', '21805', '0', '23'), +('15', '108', '22', '12425', '0', '23'), +('15', '108', '22', '7867', '0', '23'), +('15', '108', '1', '98769', '402315', '23'), +('15', '108', '1', '128691', '300399', '23'), +('15', '108', '1', '111303', '241052', '23'), +('15', '108', '1', '111300', '240968', '23'), +('15', '108', '2', '94056', '153540', '23'), +('15', '108', '2', '62985', '152159', '23'), +('15', '108', '2', '104417', '128923', '23'), +('15', '108', '2', '54846', '97836', '23'), +('15', '108', '3', '111315', '241312', '23'), +('15', '108', '3', '111313', '240752', '23'), +('15', '108', '3', '111316', '238583', '23'), +('15', '108', '3', '111014', '211597', '23'), +('15', '108', '5', '111317', '241687', '23'), +('15', '108', '5', '111321', '240703', '23'), +('15', '108', '5', '111318', '240201', '23'), +('15', '108', '5', '111319', '238149', '23'), +('15', '108', '8', '111331', '242629', '23'), +('15', '108', '8', '111332', '239678', '23'), +('15', '108', '8', '111329', '238465', '23'), +('15', '108', '8', '111030', '212989', '23'), +('15', '108', '6', '111325', '241422', '23'), +('15', '108', '6', '111322', '240536', '23'), +('15', '108', '6', '111326', '237992', '23'), +('15', '108', '6', '111024', '211707', '23'), +('15', '108', '17', '56084', '157371', '23'), +('15', '108', '17', '56045', '154444', '23'), +('15', '108', '17', '104420', '133155', '23'), +('15', '108', '17', '54855', '101061', '23'), +('15', '108', '7', '56079', '152289', '23'), +('15', '108', '7', '56040', '150737', '23'), +('15', '108', '7', '104418', '127421', '23'), +('15', '108', '7', '54850', '97080', '23'), +('15', '108', '9', '67098', '248649', '23'), +('15', '108', '9', '56033', '148576', '23'), +('15', '108', '9', '56070', '148470', '23'), +('15', '108', '9', '56031', '148408', '23'), +('15', '108', '15', '111348', '242566', '23'), +('15', '108', '15', '111342', '241692', '23'), +('15', '108', '15', '111343', '241678', '23'), +('15', '108', '15', '111346', '239908', '23'), +('15', '108', '20', '111355', '250410', '23'), +('15', '108', '20', '111351', '249029', '23'), +('15', '108', '20', '111352', '248746', '23'), +('15', '108', '20', '111053', '220770', '23'), +('15', '108', '12', '81795', '148695', '23'), +('15', '108', '12', '56074', '147081', '23'), +('15', '108', '12', '104415', '126593', '23'), +('15', '108', '12', '49656', '95987', '23'), +('15', '108', '18', '62986', '156151', '23'), +('15', '108', '18', '56041', '155878', '23'), +('15', '108', '18', '104419', '133417', '23'), +('15', '108', '18', '54851', '98266', '23'), +('15', '108', '19', '62990', '154750', '23'), +('15', '108', '19', '56037', '153623', '23'), +('15', '108', '19', '56075', '151775', '23'), +('15', '108', '19', '81763', '150855', '23'), +('15', '108', '13', '111871', '406261', '23'), +('15', '108', '13', '111815', '402241', '23'), +('15', '108', '13', '111527', '390292', '23'), +('15', '108', '13', '111515', '383293', '23'), +('15', '108', '14', '111871', '406261', '23'), +('15', '108', '14', '111815', '402241', '23'), +('15', '108', '14', '111527', '390292', '23'), +('15', '108', '14', '111515', '383293', '23'), +('15', '108', '11', '133816', '312749', '23'), +('15', '108', '11', '111338', '241284', '23'), +('15', '108', '11', '111335', '239923', '23'), +('15', '108', '11', '111333', '239846', '23'), +('15', '109', '22', '21807', '0', '23'), +('15', '109', '22', '21805', '0', '23'), +('15', '109', '22', '12425', '0', '23'), +('15', '109', '22', '7867', '0', '23'), +('15', '109', '1', '98769', '402319', '23'), +('15', '109', '1', '128691', '300403', '23'), +('15', '109', '1', '111303', '241057', '23'), +('15', '109', '1', '111300', '240972', '23'), +('15', '109', '2', '94056', '153544', '23'), +('15', '109', '2', '62985', '152164', '23'), +('15', '109', '2', '104417', '128927', '23'), +('15', '109', '2', '54846', '97841', '23'), +('15', '109', '3', '111315', '241319', '23'), +('15', '109', '3', '111313', '240757', '23'), +('15', '109', '3', '111316', '238588', '23'), +('15', '109', '3', '111014', '211604', '23'), +('15', '109', '5', '111317', '241693', '23'), +('15', '109', '5', '111321', '240708', '23'), +('15', '109', '5', '111318', '240206', '23'), +('15', '109', '5', '111319', '238155', '23'), +('15', '109', '8', '111331', '242635', '23'), +('15', '109', '8', '111332', '239684', '23'), +('15', '109', '8', '111329', '238470', '23'), +('15', '109', '8', '111030', '212995', '23'), +('15', '109', '6', '111325', '241426', '23'), +('15', '109', '6', '111322', '240540', '23'), +('15', '109', '6', '111326', '237999', '23'), +('15', '109', '6', '111024', '211711', '23'), +('15', '109', '17', '56084', '157378', '23'), +('15', '109', '17', '56045', '154448', '23'), +('15', '109', '17', '104420', '133161', '23'), +('15', '109', '17', '54855', '101066', '23'), +('15', '109', '7', '56079', '152295', '23'), +('15', '109', '7', '56040', '150743', '23'), +('15', '109', '7', '104418', '127426', '23'), +('15', '109', '7', '54850', '97083', '23'), +('15', '109', '9', '67098', '248654', '23'), +('15', '109', '9', '56033', '148580', '23'), +('15', '109', '9', '56070', '148474', '23'), +('15', '109', '9', '56031', '148413', '23'), +('15', '109', '15', '111348', '242573', '23'), +('15', '109', '15', '111342', '241698', '23'), +('15', '109', '15', '111343', '241683', '23'), +('15', '109', '15', '111346', '239913', '23'), +('15', '109', '20', '111355', '250414', '23'), +('15', '109', '20', '111351', '249034', '23'), +('15', '109', '20', '111352', '248752', '23'), +('15', '109', '20', '111053', '220774', '23'), +('15', '109', '12', '81795', '148700', '23'), +('15', '109', '12', '56074', '147085', '23'), +('15', '109', '12', '104415', '126598', '23'), +('15', '109', '12', '49656', '95988', '23'), +('15', '109', '18', '62986', '156158', '23'), +('15', '109', '18', '56041', '155882', '23'), +('15', '109', '18', '104419', '133424', '23'), +('15', '109', '18', '54851', '98272', '23'), +('15', '109', '19', '62990', '154754', '23'), +('15', '109', '19', '56037', '153629', '23'), +('15', '109', '19', '56075', '151781', '23'), +('15', '109', '19', '81763', '150861', '23'), +('15', '109', '13', '111871', '406560', '23'), +('15', '109', '13', '111815', '402540', '23'), +('15', '109', '13', '111527', '390591', '23'), +('15', '109', '13', '111515', '383591', '23'), +('15', '109', '14', '111871', '406560', '23'), +('15', '109', '14', '111815', '402540', '23'), +('15', '109', '14', '111527', '390591', '23'), +('15', '109', '14', '111515', '383591', '23'), +('15', '109', '11', '133816', '312754', '23'), +('15', '109', '11', '111338', '241290', '23'), +('15', '109', '11', '111335', '239928', '23'), +('15', '109', '11', '111333', '239850', '23'), +('15', '110', '22', '12425', '0', '25'), +('15', '110', '22', '21807', '0', '25'), +('15', '110', '22', '21805', '0', '25'), +('15', '110', '22', '39342', '0', '25'), +('15', '110', '1', '98769', '402323', '25'), +('15', '110', '1', '128691', '300407', '25'), +('15', '110', '1', '111303', '241063', '25'), +('15', '110', '1', '111300', '240977', '25'), +('15', '110', '2', '94056', '153550', '25'), +('15', '110', '2', '62985', '152170', '25'), +('15', '110', '2', '104417', '128931', '25'), +('15', '110', '2', '54846', '97846', '25'), +('15', '110', '3', '111315', '241326', '25'), +('15', '110', '3', '111313', '240763', '25'), +('15', '110', '3', '111316', '238594', '25'), +('15', '110', '3', '111014', '211611', '25'), +('15', '110', '5', '111317', '241699', '25'), +('15', '110', '5', '111321', '240715', '25'), +('15', '110', '5', '111318', '240210', '25'), +('15', '110', '5', '111319', '238161', '25'), +('15', '110', '8', '111331', '242642', '25'), +('15', '110', '8', '111332', '239689', '25'), +('15', '110', '8', '111329', '238475', '25'), +('15', '110', '8', '111030', '213002', '25'), +('15', '110', '6', '111325', '241431', '25'), +('15', '110', '6', '111322', '240544', '25'), +('15', '110', '6', '111326', '238006', '25'), +('15', '110', '6', '111024', '211716', '25'), +('15', '110', '17', '56084', '157387', '25'), +('15', '110', '17', '56045', '154453', '25'), +('15', '110', '17', '104420', '133169', '25'), +('15', '110', '17', '54855', '101070', '25'), +('15', '110', '7', '56079', '152301', '25'), +('15', '110', '7', '56040', '150749', '25'), +('15', '110', '7', '104418', '127432', '25'), +('15', '110', '7', '54850', '97086', '25'), +('15', '110', '9', '67098', '248659', '25'), +('15', '110', '9', '56033', '148584', '25'), +('15', '110', '9', '56070', '148478', '25'), +('15', '110', '9', '56031', '148417', '25'), +('15', '110', '15', '111348', '242579', '25'), +('15', '110', '15', '111342', '241705', '25'), +('15', '110', '15', '111343', '241688', '25'), +('15', '110', '15', '111346', '239917', '25'), +('15', '110', '20', '111355', '250418', '25'), +('15', '110', '20', '111351', '249039', '25'), +('15', '110', '20', '111352', '248758', '25'), +('15', '110', '20', '111053', '220778', '25'), +('15', '110', '12', '81795', '148706', '25'), +('15', '110', '12', '56074', '147089', '25'), +('15', '110', '12', '104415', '126603', '25'), +('15', '110', '12', '49656', '95989', '25'), +('15', '110', '18', '62986', '156165', '25'), +('15', '110', '18', '56041', '155886', '25'), +('15', '110', '18', '104419', '133431', '25'), +('15', '110', '18', '54851', '98278', '25'), +('15', '110', '19', '62990', '154759', '25'), +('15', '110', '19', '56037', '153635', '25'), +('15', '110', '19', '56075', '151788', '25'), +('15', '110', '19', '81763', '150868', '25'), +('15', '110', '13', '111871', '408326', '25'), +('15', '110', '13', '111815', '404306', '25'), +('15', '110', '13', '111527', '392357', '25'), +('15', '110', '13', '111515', '385357', '25'), +('15', '110', '14', '111871', '408326', '25'), +('15', '110', '14', '111815', '404306', '25'), +('15', '110', '14', '111527', '392357', '25'), +('15', '110', '14', '111515', '385357', '25'), +('15', '110', '11', '85213', '359921', '25'), +('15', '110', '11', '133816', '312759', '25'), +('15', '110', '11', '111338', '241295', '25'), +('15', '110', '11', '111335', '239935', '25'), +('15', '110', '22', '12425', '0', '24'), +('15', '110', '22', '21807', '0', '24'), +('15', '110', '22', '21805', '0', '24'), +('15', '110', '22', '39342', '0', '24'), +('15', '110', '1', '98769', '402323', '24'), +('15', '110', '1', '128691', '300407', '24'), +('15', '110', '1', '111303', '241063', '24'), +('15', '110', '1', '111300', '240977', '24'), +('15', '110', '2', '94056', '153550', '24'), +('15', '110', '2', '62985', '152170', '24'), +('15', '110', '2', '104417', '128931', '24'), +('15', '110', '2', '54846', '97846', '24'), +('15', '110', '3', '111315', '241326', '24'), +('15', '110', '3', '111313', '240763', '24'), +('15', '110', '3', '111316', '238594', '24'), +('15', '110', '3', '111014', '211611', '24'), +('15', '110', '5', '111317', '241699', '24'), +('15', '110', '5', '111321', '240715', '24'), +('15', '110', '5', '111318', '240210', '24'), +('15', '110', '5', '111319', '238161', '24'), +('15', '110', '8', '111331', '242642', '24'), +('15', '110', '8', '111332', '239689', '24'), +('15', '110', '8', '111329', '238475', '24'), +('15', '110', '8', '111030', '213002', '24'), +('15', '110', '6', '111325', '241431', '24'), +('15', '110', '6', '111322', '240544', '24'), +('15', '110', '6', '111326', '238006', '24'), +('15', '110', '6', '111024', '211716', '24'), +('15', '110', '17', '56084', '157387', '24'), +('15', '110', '17', '56045', '154453', '24'), +('15', '110', '17', '104420', '133169', '24'), +('15', '110', '17', '54855', '101070', '24'), +('15', '110', '7', '56079', '152301', '24'), +('15', '110', '7', '56040', '150749', '24'), +('15', '110', '7', '104418', '127432', '24'), +('15', '110', '7', '54850', '97086', '24'), +('15', '110', '9', '67098', '248659', '24'), +('15', '110', '9', '56033', '148584', '24'), +('15', '110', '9', '56070', '148478', '24'), +('15', '110', '9', '56031', '148417', '24'), +('15', '110', '15', '111348', '242579', '24'), +('15', '110', '15', '111342', '241705', '24'), +('15', '110', '15', '111343', '241688', '24'), +('15', '110', '15', '111346', '239917', '24'), +('15', '110', '20', '111355', '250418', '24'), +('15', '110', '20', '111351', '249039', '24'), +('15', '110', '20', '111352', '248758', '24'), +('15', '110', '20', '111053', '220778', '24'), +('15', '110', '12', '81795', '148706', '24'), +('15', '110', '12', '56074', '147089', '24'), +('15', '110', '12', '104415', '126603', '24'), +('15', '110', '12', '49656', '95989', '24'), +('15', '110', '18', '62986', '156165', '24'), +('15', '110', '18', '56041', '155886', '24'), +('15', '110', '18', '104419', '133431', '24'), +('15', '110', '18', '54851', '98278', '24'), +('15', '110', '19', '62990', '154759', '24'), +('15', '110', '19', '56037', '153635', '24'), +('15', '110', '19', '56075', '151788', '24'), +('15', '110', '19', '81763', '150868', '24'), +('15', '110', '13', '111871', '408326', '24'), +('15', '110', '13', '111815', '404306', '24'), +('15', '110', '13', '111527', '392357', '24'), +('15', '110', '13', '111515', '385357', '24'), +('15', '110', '14', '111871', '408326', '24'), +('15', '110', '14', '111815', '404306', '24'), +('15', '110', '14', '111527', '392357', '24'), +('15', '110', '14', '111515', '385357', '24'), +('15', '110', '11', '85213', '359921', '24'), +('15', '110', '11', '133816', '312759', '24'), +('15', '110', '11', '111338', '241295', '24'), +('15', '110', '11', '111335', '239935', '24'), +('15', '111', '22', '12425', '0', '25'), +('15', '111', '22', '21807', '0', '25'), +('15', '111', '22', '21805', '0', '25'), +('15', '111', '22', '39342', '0', '25'), +('15', '111', '1', '98769', '402327', '25'), +('15', '111', '1', '128691', '300411', '25'), +('15', '111', '1', '111303', '241069', '25'), +('15', '111', '1', '111300', '240982', '25'), +('15', '111', '2', '94056', '153555', '25'), +('15', '111', '2', '62985', '152176', '25'), +('15', '111', '2', '104417', '128935', '25'), +('15', '111', '2', '54846', '97851', '25'), +('15', '111', '3', '111315', '241333', '25'), +('15', '111', '3', '111313', '240768', '25'), +('15', '111', '3', '111316', '238600', '25'), +('15', '111', '3', '111014', '211618', '25'), +('15', '111', '5', '111317', '241706', '25'), +('15', '111', '5', '111321', '240721', '25'), +('15', '111', '5', '111318', '240215', '25'), +('15', '111', '5', '111319', '238167', '25'), +('15', '111', '8', '111331', '242649', '25'), +('15', '111', '8', '111332', '239695', '25'), +('15', '111', '8', '111329', '238480', '25'), +('15', '111', '8', '111030', '213009', '25'), +('15', '111', '6', '111325', '241436', '25'), +('15', '111', '6', '111322', '240548', '25'), +('15', '111', '6', '111326', '238013', '25'), +('15', '111', '6', '111024', '211721', '25'), +('15', '111', '17', '56084', '157395', '25'), +('15', '111', '17', '56045', '154457', '25'), +('15', '111', '17', '104420', '133176', '25'), +('15', '111', '17', '54855', '101075', '25'), +('15', '111', '7', '56079', '152307', '25'), +('15', '111', '7', '56040', '150755', '25'), +('15', '111', '7', '104418', '127437', '25'), +('15', '111', '7', '54850', '97089', '25'), +('15', '111', '9', '67098', '248665', '25'), +('15', '111', '9', '56033', '148589', '25'), +('15', '111', '9', '56070', '148483', '25'), +('15', '111', '9', '56031', '148422', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('15', '111', '15', '111348', '242586', '25'), +('15', '111', '15', '111342', '241711', '25'), +('15', '111', '15', '111343', '241693', '25'), +('15', '111', '15', '111346', '239922', '25'), +('15', '111', '20', '111355', '250422', '25'), +('15', '111', '20', '111351', '249044', '25'), +('15', '111', '20', '111352', '248764', '25'), +('15', '111', '20', '111053', '220782', '25'), +('15', '111', '12', '81795', '148711', '25'), +('15', '111', '12', '56074', '147094', '25'), +('15', '111', '12', '104415', '126608', '25'), +('15', '111', '12', '49656', '95990', '25'), +('15', '111', '18', '62986', '156173', '25'), +('15', '111', '18', '56041', '155891', '25'), +('15', '111', '18', '104419', '133439', '25'), +('15', '111', '18', '54851', '98284', '25'), +('15', '111', '19', '62990', '154764', '25'), +('15', '111', '19', '56037', '153641', '25'), +('15', '111', '19', '56075', '151794', '25'), +('15', '111', '19', '81763', '150876', '25'), +('15', '111', '13', '111871', '408625', '25'), +('15', '111', '13', '111815', '404605', '25'), +('15', '111', '13', '111527', '392656', '25'), +('15', '111', '13', '111515', '385655', '25'), +('15', '111', '14', '111871', '408625', '25'), +('15', '111', '14', '111815', '404605', '25'), +('15', '111', '14', '111527', '392656', '25'), +('15', '111', '14', '111515', '385655', '25'), +('15', '111', '11', '85213', '359925', '25'), +('15', '111', '11', '133816', '312763', '25'), +('15', '111', '11', '111338', '241301', '25'), +('15', '111', '11', '111335', '239941', '25'), +('15', '112', '22', '12425', '0', '25'), +('15', '112', '22', '21807', '0', '25'), +('15', '112', '22', '21805', '0', '25'), +('15', '112', '22', '39342', '0', '25'), +('15', '112', '1', '98769', '402331', '25'), +('15', '112', '1', '128691', '300416', '25'), +('15', '112', '1', '111303', '241074', '25'), +('15', '112', '1', '111300', '240987', '25'), +('15', '112', '2', '94056', '153560', '25'), +('15', '112', '2', '62985', '152181', '25'), +('15', '112', '2', '104417', '128940', '25'), +('15', '112', '2', '54846', '97857', '25'), +('15', '112', '3', '111315', '241340', '25'), +('15', '112', '3', '111313', '240774', '25'), +('15', '112', '3', '111316', '238606', '25'), +('15', '112', '3', '111014', '211625', '25'), +('15', '112', '5', '111317', '241712', '25'), +('15', '112', '5', '111321', '240727', '25'), +('15', '112', '5', '111318', '240219', '25'), +('15', '112', '5', '111319', '238173', '25'), +('15', '112', '8', '111331', '242656', '25'), +('15', '112', '8', '111332', '239700', '25'), +('15', '112', '8', '111329', '238485', '25'), +('15', '112', '8', '111030', '213016', '25'), +('15', '112', '6', '111325', '241441', '25'), +('15', '112', '6', '111322', '240552', '25'), +('15', '112', '6', '111326', '238020', '25'), +('15', '112', '6', '111024', '211726', '25'), +('15', '112', '17', '56084', '157403', '25'), +('15', '112', '17', '56045', '154462', '25'), +('15', '112', '17', '104420', '133183', '25'), +('15', '112', '17', '54855', '101079', '25'), +('15', '112', '7', '56079', '152312', '25'), +('15', '112', '7', '56040', '150761', '25'), +('15', '112', '7', '104418', '127443', '25'), +('15', '112', '7', '54850', '97093', '25'), +('15', '112', '9', '67098', '248670', '25'), +('15', '112', '9', '56033', '148593', '25'), +('15', '112', '9', '56070', '148487', '25'), +('15', '112', '9', '56031', '148426', '25'), +('15', '112', '15', '111348', '242593', '25'), +('15', '112', '15', '111342', '241718', '25'), +('15', '112', '15', '111343', '241698', '25'), +('15', '112', '15', '111346', '239927', '25'), +('15', '112', '20', '111355', '250426', '25'), +('15', '112', '20', '111351', '249049', '25'), +('15', '112', '20', '111352', '248770', '25'), +('15', '112', '20', '111053', '220786', '25'), +('15', '112', '12', '81795', '148717', '25'), +('15', '112', '12', '56074', '147099', '25'), +('15', '112', '12', '104415', '126613', '25'), +('15', '112', '12', '49656', '95990', '25'), +('15', '112', '18', '62986', '156180', '25'), +('15', '112', '18', '56041', '155895', '25'), +('15', '112', '18', '104419', '133446', '25'), +('15', '112', '18', '54851', '98290', '25'), +('15', '112', '19', '62990', '154769', '25'), +('15', '112', '19', '56037', '153647', '25'), +('15', '112', '19', '56075', '151801', '25'), +('15', '112', '19', '81763', '150883', '25'), +('15', '112', '13', '111871', '408924', '25'), +('15', '112', '13', '111815', '404904', '25'), +('15', '112', '13', '111527', '392955', '25'), +('15', '112', '13', '111515', '385954', '25'), +('15', '112', '14', '111871', '408924', '25'), +('15', '112', '14', '111815', '404904', '25'), +('15', '112', '14', '111527', '392955', '25'), +('15', '112', '14', '111515', '385954', '25'), +('15', '112', '11', '85213', '359929', '25'), +('15', '112', '11', '133816', '312768', '25'), +('15', '112', '11', '111338', '241307', '25'), +('15', '112', '11', '111335', '239947', '25'), +('15', '113', '22', '12425', '0', '25'), +('15', '113', '22', '21807', '0', '25'), +('15', '113', '22', '21805', '0', '25'), +('15', '113', '22', '39342', '0', '25'), +('15', '113', '1', '98769', '402335', '25'), +('15', '113', '1', '128691', '300420', '25'), +('15', '113', '1', '111303', '241080', '25'), +('15', '113', '1', '111300', '240991', '25'), +('15', '113', '2', '94056', '153565', '25'), +('15', '113', '2', '62985', '152187', '25'), +('15', '113', '2', '104417', '128944', '25'), +('15', '113', '2', '54846', '97862', '25'), +('15', '113', '3', '111315', '241347', '25'), +('15', '113', '3', '111313', '240779', '25'), +('15', '113', '3', '111316', '238611', '25'), +('15', '113', '3', '111014', '211632', '25'), +('15', '113', '5', '111317', '241718', '25'), +('15', '113', '5', '111321', '240733', '25'), +('15', '113', '5', '111318', '240224', '25'), +('15', '113', '5', '111319', '238179', '25'), +('15', '113', '8', '111331', '242662', '25'), +('15', '113', '8', '111332', '239706', '25'), +('15', '113', '8', '111329', '238490', '25'), +('15', '113', '8', '111030', '213022', '25'), +('15', '113', '6', '111325', '241446', '25'), +('15', '113', '6', '111322', '240556', '25'), +('15', '113', '6', '111326', '238027', '25'), +('15', '113', '6', '111024', '211731', '25'), +('15', '113', '17', '56084', '157411', '25'), +('15', '113', '17', '56045', '154467', '25'), +('15', '113', '17', '104420', '133190', '25'), +('15', '113', '17', '54855', '101083', '25'), +('15', '113', '7', '56079', '152318', '25'), +('15', '113', '7', '56040', '150767', '25'), +('15', '113', '7', '104418', '127448', '25'), +('15', '113', '7', '54850', '97096', '25'), +('15', '113', '9', '67098', '248675', '25'), +('15', '113', '9', '56033', '148597', '25'), +('15', '113', '9', '56070', '148491', '25'), +('15', '113', '9', '56031', '148430', '25'), +('15', '113', '15', '111348', '242600', '25'), +('15', '113', '15', '111342', '241724', '25'), +('15', '113', '15', '111343', '241703', '25'), +('15', '113', '15', '111346', '239932', '25'), +('15', '113', '20', '111355', '250430', '25'), +('15', '113', '20', '111351', '249054', '25'), +('15', '113', '20', '111352', '248776', '25'), +('15', '113', '20', '111053', '220790', '25'), +('15', '113', '12', '81795', '148722', '25'), +('15', '113', '12', '56074', '147103', '25'), +('15', '113', '12', '104415', '126618', '25'), +('15', '113', '12', '49656', '95991', '25'), +('15', '113', '18', '62986', '156188', '25'), +('15', '113', '18', '56041', '155899', '25'), +('15', '113', '18', '104419', '133454', '25'), +('15', '113', '18', '54851', '98296', '25'), +('15', '113', '19', '62990', '154774', '25'), +('15', '113', '19', '56037', '153653', '25'), +('15', '113', '19', '56075', '151807', '25'), +('15', '113', '19', '81763', '150890', '25'), +('15', '113', '13', '111871', '409224', '25'), +('15', '113', '13', '111815', '405203', '25'), +('15', '113', '13', '111527', '393254', '25'), +('15', '113', '13', '111515', '386253', '25'), +('15', '113', '14', '111871', '409224', '25'), +('15', '113', '14', '111815', '405203', '25'), +('15', '113', '14', '111527', '393254', '25'), +('15', '113', '14', '111515', '386253', '25'), +('15', '113', '11', '85213', '359933', '25'), +('15', '113', '11', '133816', '312773', '25'), +('15', '113', '11', '111338', '241312', '25'), +('15', '113', '11', '111335', '239953', '25'), +('15', '114', '22', '12425', '0', '25'), +('15', '114', '22', '21807', '0', '25'), +('15', '114', '22', '21805', '0', '25'), +('15', '114', '22', '39342', '0', '25'), +('15', '114', '1', '98769', '402339', '25'), +('15', '114', '1', '128691', '300424', '25'), +('15', '114', '1', '111303', '241086', '25'), +('15', '114', '1', '111300', '240996', '25'), +('15', '114', '2', '94056', '153570', '25'), +('15', '114', '2', '62985', '152193', '25'), +('15', '114', '2', '104417', '128948', '25'), +('15', '114', '2', '54846', '97867', '25'), +('15', '114', '3', '111315', '241354', '25'), +('15', '114', '3', '111313', '240785', '25'), +('15', '114', '3', '111316', '238617', '25'), +('15', '114', '3', '111014', '211639', '25'), +('15', '114', '5', '111317', '241725', '25'), +('15', '114', '5', '111321', '240739', '25'), +('15', '114', '5', '111318', '240228', '25'), +('15', '114', '5', '111319', '238185', '25'), +('15', '114', '8', '111331', '242669', '25'), +('15', '114', '8', '111332', '239711', '25'), +('15', '114', '8', '111329', '238496', '25'), +('15', '114', '8', '111030', '213029', '25'), +('15', '114', '6', '111325', '241451', '25'), +('15', '114', '6', '111322', '240560', '25'), +('15', '114', '6', '111326', '238034', '25'), +('15', '114', '6', '111024', '211736', '25'), +('15', '114', '17', '56084', '157419', '25'), +('15', '114', '17', '56045', '154471', '25'), +('15', '114', '17', '104420', '133197', '25'), +('15', '114', '17', '54855', '101088', '25'), +('15', '114', '7', '56079', '152324', '25'), +('15', '114', '7', '56040', '150773', '25'), +('15', '114', '7', '104418', '127454', '25'), +('15', '114', '7', '54850', '97099', '25'), +('15', '114', '9', '67098', '248680', '25'), +('15', '114', '9', '56033', '148602', '25'), +('15', '114', '9', '56070', '148495', '25'), +('15', '114', '9', '56031', '148435', '25'), +('15', '114', '15', '111348', '242607', '25'), +('15', '114', '15', '111342', '241731', '25'), +('15', '114', '15', '111343', '241709', '25'), +('15', '114', '15', '111346', '239937', '25'), +('15', '114', '20', '111355', '250434', '25'), +('15', '114', '20', '111351', '249059', '25'), +('15', '114', '20', '111352', '248782', '25'), +('15', '114', '20', '111053', '220794', '25'), +('15', '114', '12', '81795', '148727', '25'), +('15', '114', '12', '56074', '147108', '25'), +('15', '114', '12', '104415', '126623', '25'), +('15', '114', '12', '49656', '95992', '25'), +('15', '114', '18', '62986', '156195', '25'), +('15', '114', '18', '56041', '155903', '25'), +('15', '114', '18', '104419', '133461', '25'), +('15', '114', '18', '54851', '98302', '25'), +('15', '114', '19', '62990', '154778', '25'), +('15', '114', '19', '56037', '153660', '25'), +('15', '114', '19', '56075', '151814', '25'), +('15', '114', '19', '81763', '150897', '25'), +('15', '114', '13', '111871', '409523', '25'), +('15', '114', '13', '111815', '405502', '25'), +('15', '114', '13', '111527', '393552', '25'), +('15', '114', '13', '111515', '386551', '25'), +('15', '114', '14', '111871', '409523', '25'), +('15', '114', '14', '111815', '405502', '25'), +('15', '114', '14', '111527', '393552', '25'), +('15', '114', '14', '111515', '386551', '25'), +('15', '114', '11', '85213', '359937', '25'), +('15', '114', '11', '133816', '312777', '25'), +('15', '114', '11', '111338', '241318', '25'), +('15', '114', '11', '111335', '239959', '25'), +('15', '115', '22', '12425', '0', '26'), +('15', '115', '22', '21807', '0', '26'), +('15', '115', '22', '21805', '0', '26'), +('15', '115', '22', '39342', '0', '26'), +('15', '115', '1', '98769', '402343', '26'), +('15', '115', '1', '128691', '300428', '26'), +('15', '115', '1', '111303', '241092', '26'), +('15', '115', '1', '111300', '241001', '26'), +('15', '115', '2', '94056', '153575', '26'), +('15', '115', '2', '62985', '152198', '26'), +('15', '115', '2', '104417', '128952', '26'), +('15', '115', '2', '54846', '97872', '26'), +('15', '115', '3', '111315', '241361', '26'), +('15', '115', '3', '111313', '240790', '26'), +('15', '115', '3', '111316', '238623', '26'), +('15', '115', '3', '111014', '211646', '26'), +('15', '115', '5', '111317', '241731', '26'), +('15', '115', '5', '111321', '240746', '26'), +('15', '115', '5', '111318', '240233', '26'), +('15', '115', '5', '111319', '238192', '26'), +('15', '115', '8', '111331', '242676', '26'), +('15', '115', '8', '111332', '239717', '26'), +('15', '115', '8', '111329', '238501', '26'), +('15', '115', '8', '111030', '213036', '26'), +('15', '115', '6', '111325', '241456', '26'), +('15', '115', '6', '111322', '240564', '26'), +('15', '115', '6', '111326', '238041', '26'), +('15', '115', '6', '111024', '211741', '26'), +('15', '115', '17', '56084', '157428', '26'), +('15', '115', '17', '56045', '154476', '26'), +('15', '115', '17', '104420', '133204', '26'), +('15', '115', '17', '54855', '101092', '26'), +('15', '115', '7', '56079', '152330', '26'), +('15', '115', '7', '56040', '150779', '26'), +('15', '115', '7', '104418', '127459', '26'), +('15', '115', '7', '54850', '97102', '26'), +('15', '115', '9', '67098', '248685', '26'), +('15', '115', '9', '56033', '148606', '26'), +('15', '115', '9', '56070', '148500', '26'), +('15', '115', '9', '56031', '148439', '26'), +('15', '115', '15', '111348', '242614', '26'), +('15', '115', '15', '111342', '241737', '26'), +('15', '115', '15', '111343', '241714', '26'), +('15', '115', '15', '111346', '239941', '26'), +('15', '115', '20', '111355', '250438', '26'), +('15', '115', '20', '111351', '249065', '26'), +('15', '115', '20', '111352', '248788', '26'), +('15', '115', '20', '111053', '220798', '26'), +('15', '115', '12', '81795', '148733', '26'), +('15', '115', '12', '56074', '147112', '26'), +('15', '115', '12', '104415', '126628', '26'), +('15', '115', '12', '49656', '95993', '26'), +('15', '115', '18', '62986', '156203', '26'), +('15', '115', '18', '56041', '155907', '26'), +('15', '115', '18', '104419', '133469', '26'), +('15', '115', '18', '54851', '98308', '26'), +('15', '115', '19', '62990', '154783', '26'), +('15', '115', '19', '56037', '153666', '26'), +('15', '115', '19', '56075', '151821', '26'), +('15', '115', '19', '81763', '150904', '26'), +('15', '115', '13', '111871', '409822', '26'), +('15', '115', '13', '111815', '405802', '26'), +('15', '115', '13', '111527', '393851', '26'), +('15', '115', '13', '111515', '386850', '26'), +('15', '115', '14', '111871', '409822', '26'), +('15', '115', '14', '111815', '405802', '26'), +('15', '115', '14', '111527', '393851', '26'), +('15', '115', '14', '111515', '386850', '26'), +('15', '115', '11', '85213', '359941', '26'), +('15', '115', '11', '133816', '312782', '26'), +('15', '115', '11', '111338', '241324', '26'), +('15', '115', '11', '111335', '239965', '26'), +('16', '1', '22', '10323', '0', '0'), +('16', '1', '22', '10664', '0', '0'), +('16', '1', '22', '9246', '0', '0'), +('16', '1', '22', '21509', '0', '0'), +('16', '1', '1', '14701', '3802', '0'), +('16', '1', '1', '14702', '2500', '0'), +('16', '1', '1', '10165', '1683', '0'), +('16', '1', '1', '30361', '1140', '0'), +('16', '1', '2', '1519', '3207', '0'), +('16', '1', '2', '4831', '3020', '0'), +('16', '1', '2', '10142', '3012', '0'), +('16', '1', '2', '4341', '2712', '0'), +('16', '1', '3', '10144', '1304', '0'), +('16', '1', '3', '14706', '990', '0'), +('16', '1', '3', '14705', '990', '0'), +('16', '1', '3', '3314', '785', '0'), +('16', '1', '5', '14703', '5500', '0'), +('16', '1', '5', '14700', '3453', '0'), +('16', '1', '5', '10055', '3255', '0'), +('16', '1', '5', '2583', '2287', '0'), +('16', '1', '8', '11621', '14171', '0'), +('16', '1', '8', '1409', '6312', '0'), +('16', '1', '8', '11551', '5129', '0'), +('16', '1', '8', '2400', '2808', '0'), +('16', '1', '6', '1557', '6760', '0'), +('16', '1', '6', '25062', '1817', '0'), +('16', '1', '6', '4165', '1812', '0'), +('16', '1', '6', '4302', '1686', '0'), +('16', '1', '17', '4832', '6263', '0'), +('16', '1', '17', '4309', '5576', '0'), +('16', '1', '17', '11623', '4979', '0'), +('16', '1', '17', '4342', '3322', '0'), +('16', '1', '7', '4833', '3567', '0'), +('16', '1', '7', '71303', '2689', '0'), +('16', '1', '7', '2458', '2406', '0'), +('16', '1', '7', '4411', '2083', '0'), +('16', '1', '9', '4834', '2625', '0'), +('16', '1', '9', '12189', '2263', '0'), +('16', '1', '9', '10149', '2255', '0'), +('16', '1', '9', '14650', '1802', '0'), +('16', '1', '15', '10366', '8005', '0'), +('16', '1', '15', '10151', '7200', '0'), +('16', '1', '15', '14679', '6255', '0'), +('16', '1', '15', '14678', '5104', '0'), +('16', '1', '20', '11601', '7607', '0'), +('16', '1', '20', '1365', '4200', '0'), +('16', '1', '20', '2471', '3804', '0'), +('16', '1', '20', '1543', '2876', '0'), +('16', '1', '12', '4835', '7440', '0'), +('16', '1', '12', '20655', '4848', '0'), +('16', '1', '12', '2923', '3404', '0'), +('16', '1', '12', '11624', '2387', '0'), +('16', '1', '18', '4836', '3346', '0'), +('16', '1', '18', '2461', '2557', '0'), +('16', '1', '18', '4346', '2276', '0'), +('16', '1', '18', '4412', '2083', '0'), +('16', '1', '19', '4837', '3923', '0'), +('16', '1', '19', '68239', '3223', '0'), +('16', '1', '19', '2337', '1757', '0'), +('16', '1', '19', '3312', '1392', '0'), +('16', '1', '13', '5622', '28028', '0'), +('16', '1', '13', '11609', '27927', '0'), +('16', '1', '13', '5412', '25806', '0'), +('16', '1', '13', '5401', '24664', '0'), +('16', '1', '14', '11551', '12679', '0'), +('16', '1', '14', '14762', '2181', '0'), +('16', '1', '14', '6359', '1753', '0'), +('16', '1', '14', '10323', '755', '0'), +('16', '1', '11', '14762', '2181', '0'), +('16', '1', '11', '20677', '1800', '0'), +('16', '1', '11', '9246', '604', '0'), +('16', '1', '11', '13748', '454', '0'), +('16', '2', '22', '10323', '0', '0'), +('16', '2', '22', '10664', '0', '0'), +('16', '2', '22', '9246', '0', '0'), +('16', '2', '22', '21509', '0', '0'), +('16', '2', '1', '14701', '3802', '0'), +('16', '2', '1', '14702', '2500', '0'), +('16', '2', '1', '10165', '1683', '0'), +('16', '2', '1', '30361', '1140', '0'), +('16', '2', '2', '1519', '3207', '0'), +('16', '2', '2', '4831', '3020', '0'), +('16', '2', '2', '10142', '3012', '0'), +('16', '2', '2', '4341', '2712', '0'), +('16', '2', '3', '10144', '1304', '0'), +('16', '2', '3', '14706', '990', '0'), +('16', '2', '3', '14705', '990', '0'), +('16', '2', '3', '3314', '785', '0'), +('16', '2', '5', '14703', '5500', '0'), +('16', '2', '5', '14700', '3453', '0'), +('16', '2', '5', '10055', '3255', '0'), +('16', '2', '5', '2583', '2287', '0'), +('16', '2', '8', '11621', '14171', '0'), +('16', '2', '8', '1409', '6312', '0'), +('16', '2', '8', '11551', '5129', '0'), +('16', '2', '8', '2400', '2808', '0'), +('16', '2', '6', '1557', '6760', '0'), +('16', '2', '6', '25062', '1817', '0'), +('16', '2', '6', '4165', '1812', '0'), +('16', '2', '6', '4302', '1712', '0'), +('16', '2', '17', '4832', '6327', '0'), +('16', '2', '17', '4309', '5576', '0'), +('16', '2', '17', '11623', '4979', '0'), +('16', '2', '17', '4342', '3322', '0'), +('16', '2', '7', '4833', '3567', '0'), +('16', '2', '7', '71303', '2689', '0'), +('16', '2', '7', '2458', '2406', '0'), +('16', '2', '7', '4411', '2083', '0'), +('16', '2', '9', '4834', '2625', '0'), +('16', '2', '9', '12189', '2263', '0'), +('16', '2', '9', '10149', '2255', '0'), +('16', '2', '9', '14650', '1802', '0'), +('16', '2', '15', '10366', '8005', '0'), +('16', '2', '15', '10151', '7200', '0'), +('16', '2', '15', '14679', '6255', '0'), +('16', '2', '15', '14678', '5104', '0'), +('16', '2', '20', '11601', '7650', '0'), +('16', '2', '20', '1365', '4200', '0'), +('16', '2', '20', '2471', '3804', '0'), +('16', '2', '20', '1543', '2876', '0'), +('16', '2', '12', '4835', '7461', '0'), +('16', '2', '12', '20655', '4856', '0'), +('16', '2', '12', '2923', '3404', '0'), +('16', '2', '12', '11624', '2416', '0'), +('16', '2', '18', '4836', '3367', '0'), +('16', '2', '18', '2461', '2557', '0'), +('16', '2', '18', '4346', '2276', '0'), +('16', '2', '18', '4412', '2083', '0'), +('16', '2', '19', '4837', '3923', '0'), +('16', '2', '19', '68239', '3223', '0'), +('16', '2', '19', '2337', '1757', '0'), +('16', '2', '19', '3312', '1392', '0'), +('16', '2', '13', '5622', '28028', '0'), +('16', '2', '13', '11609', '27927', '0'), +('16', '2', '13', '5412', '25806', '0'), +('16', '2', '13', '5401', '24664', '0'), +('16', '2', '14', '11551', '12679', '0'), +('16', '2', '14', '14762', '2181', '0'), +('16', '2', '14', '6359', '1753', '0'), +('16', '2', '14', '10323', '755', '0'), +('16', '2', '11', '14762', '2181', '0'), +('16', '2', '11', '20677', '1800', '0'), +('16', '2', '11', '9246', '604', '0'), +('16', '2', '11', '13748', '454', '0'), +('16', '3', '22', '10323', '0', '0'), +('16', '3', '22', '10664', '0', '0'), +('16', '3', '22', '9246', '0', '0'), +('16', '3', '22', '21509', '0', '0'), +('16', '3', '1', '14701', '3802', '0'), +('16', '3', '1', '14702', '2500', '0'), +('16', '3', '1', '10165', '1683', '0'), +('16', '3', '1', '30361', '1140', '0'), +('16', '3', '2', '1519', '3207', '0'), +('16', '3', '2', '4831', '3020', '0'), +('16', '3', '2', '10142', '3012', '0'), +('16', '3', '2', '4341', '2712', '0'), +('16', '3', '3', '10144', '1304', '0'), +('16', '3', '3', '14706', '990', '0'), +('16', '3', '3', '14705', '990', '0'), +('16', '3', '3', '3314', '785', '0'), +('16', '3', '5', '14703', '5500', '0'), +('16', '3', '5', '14700', '3453', '0'), +('16', '3', '5', '10055', '3255', '0'), +('16', '3', '5', '2583', '2287', '0'), +('16', '3', '8', '11621', '14171', '0'), +('16', '3', '8', '1409', '6312', '0'), +('16', '3', '8', '11551', '5129', '0'), +('16', '3', '8', '2400', '2808', '0'), +('16', '3', '6', '1557', '6760', '0'), +('16', '3', '6', '25062', '1817', '0'), +('16', '3', '6', '4165', '1812', '0'), +('16', '3', '6', '4302', '1737', '0'), +('16', '3', '17', '4832', '6390', '0'), +('16', '3', '17', '4309', '5576', '0'), +('16', '3', '17', '11623', '4979', '0'), +('16', '3', '17', '4342', '3322', '0'), +('16', '3', '7', '4833', '3567', '0'), +('16', '3', '7', '71303', '2689', '0'), +('16', '3', '7', '2458', '2406', '0'), +('16', '3', '7', '4411', '2083', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '3', '9', '4834', '2625', '0'), +('16', '3', '9', '12189', '2263', '0'), +('16', '3', '9', '10149', '2255', '0'), +('16', '3', '9', '14650', '1802', '0'), +('16', '3', '15', '10366', '8005', '0'), +('16', '3', '15', '10151', '7200', '0'), +('16', '3', '15', '14679', '6255', '0'), +('16', '3', '15', '14678', '5104', '0'), +('16', '3', '20', '11601', '7692', '0'), +('16', '3', '20', '1365', '4200', '0'), +('16', '3', '20', '2471', '3804', '0'), +('16', '3', '20', '1543', '2876', '0'), +('16', '3', '12', '4835', '7482', '0'), +('16', '3', '12', '20655', '4865', '0'), +('16', '3', '12', '2923', '3404', '0'), +('16', '3', '12', '11624', '2446', '0'), +('16', '3', '18', '4836', '3388', '0'), +('16', '3', '18', '2461', '2557', '0'), +('16', '3', '18', '4346', '2276', '0'), +('16', '3', '18', '4412', '2083', '0'), +('16', '3', '19', '4837', '3923', '0'), +('16', '3', '19', '68239', '3223', '0'), +('16', '3', '19', '2337', '1757', '0'), +('16', '3', '19', '3312', '1392', '0'), +('16', '3', '13', '5622', '28028', '0'), +('16', '3', '13', '11609', '27927', '0'), +('16', '3', '13', '5412', '25806', '0'), +('16', '3', '13', '5401', '24664', '0'), +('16', '3', '14', '11551', '12679', '0'), +('16', '3', '14', '14762', '2181', '0'), +('16', '3', '14', '6359', '1753', '0'), +('16', '3', '14', '10323', '755', '0'), +('16', '3', '11', '14762', '2181', '0'), +('16', '3', '11', '20677', '1800', '0'), +('16', '3', '11', '9246', '604', '0'), +('16', '3', '11', '13748', '454', '0'), +('16', '4', '22', '10323', '0', '0'), +('16', '4', '22', '10664', '0', '0'), +('16', '4', '22', '9246', '0', '0'), +('16', '4', '22', '21509', '0', '0'), +('16', '4', '1', '14701', '3802', '0'), +('16', '4', '1', '14702', '2500', '0'), +('16', '4', '1', '10165', '1683', '0'), +('16', '4', '1', '30361', '1140', '0'), +('16', '4', '2', '1519', '3207', '0'), +('16', '4', '2', '4831', '3020', '0'), +('16', '4', '2', '10142', '3012', '0'), +('16', '4', '2', '4341', '2712', '0'), +('16', '4', '3', '10144', '1304', '0'), +('16', '4', '3', '14706', '990', '0'), +('16', '4', '3', '14705', '990', '0'), +('16', '4', '3', '3314', '785', '0'), +('16', '4', '5', '14703', '5500', '0'), +('16', '4', '5', '14700', '3453', '0'), +('16', '4', '5', '10055', '3255', '0'), +('16', '4', '5', '2583', '2287', '0'), +('16', '4', '8', '11621', '14171', '0'), +('16', '4', '8', '1409', '6312', '0'), +('16', '4', '8', '11551', '5129', '0'), +('16', '4', '8', '2400', '2808', '0'), +('16', '4', '6', '1557', '6760', '0'), +('16', '4', '6', '25062', '1817', '0'), +('16', '4', '6', '4165', '1812', '0'), +('16', '4', '6', '4302', '1762', '0'), +('16', '4', '17', '4832', '6454', '0'), +('16', '4', '17', '4309', '5576', '0'), +('16', '4', '17', '11623', '4979', '0'), +('16', '4', '17', '4342', '3322', '0'), +('16', '4', '7', '4833', '3567', '0'), +('16', '4', '7', '71303', '2689', '0'), +('16', '4', '7', '2458', '2406', '0'), +('16', '4', '7', '4411', '2083', '0'), +('16', '4', '9', '4834', '2625', '0'), +('16', '4', '9', '12189', '2263', '0'), +('16', '4', '9', '10149', '2255', '0'), +('16', '4', '9', '14650', '1802', '0'), +('16', '4', '15', '10366', '8005', '0'), +('16', '4', '15', '10151', '7200', '0'), +('16', '4', '15', '14679', '6255', '0'), +('16', '4', '15', '14678', '5104', '0'), +('16', '4', '20', '11601', '7734', '0'), +('16', '4', '20', '1365', '4200', '0'), +('16', '4', '20', '2471', '3804', '0'), +('16', '4', '20', '1543', '2876', '0'), +('16', '4', '12', '4835', '7504', '0'), +('16', '4', '12', '20655', '4873', '0'), +('16', '4', '12', '2923', '3404', '0'), +('16', '4', '12', '11624', '2475', '0'), +('16', '4', '18', '4836', '3410', '0'), +('16', '4', '18', '2461', '2557', '0'), +('16', '4', '18', '4346', '2276', '0'), +('16', '4', '18', '4412', '2083', '0'), +('16', '4', '19', '4837', '3923', '0'), +('16', '4', '19', '68239', '3223', '0'), +('16', '4', '19', '2337', '1757', '0'), +('16', '4', '19', '3312', '1392', '0'), +('16', '4', '13', '5622', '28028', '0'), +('16', '4', '13', '11609', '27927', '0'), +('16', '4', '13', '5412', '25806', '0'), +('16', '4', '13', '5401', '24664', '0'), +('16', '4', '14', '11551', '12679', '0'), +('16', '4', '14', '14762', '2181', '0'), +('16', '4', '14', '6359', '1753', '0'), +('16', '4', '14', '10323', '755', '0'), +('16', '4', '11', '14762', '2181', '0'), +('16', '4', '11', '20677', '1800', '0'), +('16', '4', '11', '9246', '604', '0'), +('16', '4', '11', '13748', '454', '0'), +('16', '5', '22', '10323', '0', '0'), +('16', '5', '22', '10664', '0', '0'), +('16', '5', '22', '9246', '0', '0'), +('16', '5', '22', '21509', '0', '0'), +('16', '5', '1', '14701', '3802', '0'), +('16', '5', '1', '14702', '2500', '0'), +('16', '5', '1', '10165', '1683', '0'), +('16', '5', '1', '30361', '1140', '0'), +('16', '5', '2', '1519', '3207', '0'), +('16', '5', '2', '4831', '3020', '0'), +('16', '5', '2', '10142', '3012', '0'), +('16', '5', '2', '4341', '2712', '0'), +('16', '5', '3', '10144', '1304', '0'), +('16', '5', '3', '14706', '990', '0'), +('16', '5', '3', '14705', '990', '0'), +('16', '5', '3', '3314', '785', '0'), +('16', '5', '5', '14703', '5500', '0'), +('16', '5', '5', '14700', '3453', '0'), +('16', '5', '5', '10055', '3255', '0'), +('16', '5', '5', '2583', '2287', '0'), +('16', '5', '8', '11621', '14171', '0'), +('16', '5', '8', '1409', '6312', '0'), +('16', '5', '8', '11551', '5129', '0'), +('16', '5', '8', '2400', '2808', '0'), +('16', '5', '6', '1557', '6760', '0'), +('16', '5', '6', '25062', '1817', '0'), +('16', '5', '6', '4165', '1812', '0'), +('16', '5', '6', '4302', '1791', '0'), +('16', '5', '17', '4832', '6526', '0'), +('16', '5', '17', '4309', '5576', '0'), +('16', '5', '17', '11623', '4979', '0'), +('16', '5', '17', '4342', '3322', '0'), +('16', '5', '7', '4833', '3567', '0'), +('16', '5', '7', '71303', '2689', '0'), +('16', '5', '7', '2458', '2406', '0'), +('16', '5', '7', '4411', '2083', '0'), +('16', '5', '9', '4834', '2625', '0'), +('16', '5', '9', '12189', '2263', '0'), +('16', '5', '9', '10149', '2255', '0'), +('16', '5', '9', '14650', '1802', '0'), +('16', '5', '15', '10366', '8005', '0'), +('16', '5', '15', '10151', '7200', '0'), +('16', '5', '15', '14679', '6255', '0'), +('16', '5', '15', '14678', '5104', '0'), +('16', '5', '20', '11601', '7782', '0'), +('16', '5', '20', '1365', '4200', '0'), +('16', '5', '20', '2471', '3804', '0'), +('16', '5', '20', '1543', '2876', '0'), +('16', '5', '12', '4835', '7528', '0'), +('16', '5', '12', '20655', '4883', '0'), +('16', '5', '12', '2923', '3404', '0'), +('16', '5', '12', '11624', '2509', '0'), +('16', '5', '18', '4836', '3434', '0'), +('16', '5', '18', '2461', '2557', '0'), +('16', '5', '18', '4346', '2276', '0'), +('16', '5', '18', '4412', '2083', '0'), +('16', '5', '19', '4837', '3923', '0'), +('16', '5', '19', '68239', '3223', '0'), +('16', '5', '19', '2337', '1757', '0'), +('16', '5', '19', '3312', '1392', '0'), +('16', '5', '13', '5622', '28028', '0'), +('16', '5', '13', '11609', '27927', '0'), +('16', '5', '13', '5412', '25806', '0'), +('16', '5', '13', '5401', '24664', '0'), +('16', '5', '14', '11551', '12679', '0'), +('16', '5', '14', '14762', '2181', '0'), +('16', '5', '14', '6359', '1753', '0'), +('16', '5', '14', '10323', '755', '0'), +('16', '5', '11', '14762', '2181', '0'), +('16', '5', '11', '20677', '1800', '0'), +('16', '5', '11', '9246', '604', '0'), +('16', '5', '11', '13748', '454', '0'), +('16', '6', '22', '10323', '0', '0'), +('16', '6', '22', '10664', '0', '0'), +('16', '6', '22', '9246', '0', '0'), +('16', '6', '22', '21509', '0', '0'), +('16', '6', '1', '14701', '3802', '0'), +('16', '6', '1', '14702', '2500', '0'), +('16', '6', '1', '10165', '1683', '0'), +('16', '6', '1', '30361', '1140', '0'), +('16', '6', '2', '1519', '3207', '0'), +('16', '6', '2', '4831', '3020', '0'), +('16', '6', '2', '10142', '3012', '0'), +('16', '6', '2', '4341', '2712', '0'), +('16', '6', '3', '10144', '1304', '0'), +('16', '6', '3', '14706', '990', '0'), +('16', '6', '3', '14705', '990', '0'), +('16', '6', '3', '3314', '785', '0'), +('16', '6', '5', '14703', '5500', '0'), +('16', '6', '5', '14700', '3453', '0'), +('16', '6', '5', '10055', '3255', '0'), +('16', '6', '5', '2583', '2287', '0'), +('16', '6', '8', '11621', '14171', '0'), +('16', '6', '8', '1409', '6312', '0'), +('16', '6', '8', '11551', '5129', '0'), +('16', '6', '8', '2400', '2808', '0'), +('16', '6', '6', '1557', '6760', '0'), +('16', '6', '6', '4302', '1817', '0'), +('16', '6', '6', '25062', '1817', '0'), +('16', '6', '6', '4165', '1812', '0'), +('16', '6', '17', '4832', '6590', '0'), +('16', '6', '17', '4309', '5576', '0'), +('16', '6', '17', '11623', '4979', '0'), +('16', '6', '17', '4342', '3322', '0'), +('16', '6', '7', '4833', '3567', '0'), +('16', '6', '7', '71303', '2689', '0'), +('16', '6', '7', '2458', '2406', '0'), +('16', '6', '7', '4411', '2083', '0'), +('16', '6', '9', '4834', '2625', '0'), +('16', '6', '9', '12189', '2263', '0'), +('16', '6', '9', '10149', '2255', '0'), +('16', '6', '9', '14650', '1802', '0'), +('16', '6', '15', '10366', '8005', '0'), +('16', '6', '15', '10151', '7200', '0'), +('16', '6', '15', '14679', '6255', '0'), +('16', '6', '15', '14678', '5104', '0'), +('16', '6', '20', '11601', '7825', '0'), +('16', '6', '20', '1365', '4200', '0'), +('16', '6', '20', '2471', '3804', '0'), +('16', '6', '20', '1543', '2876', '0'), +('16', '6', '12', '4835', '7549', '0'), +('16', '6', '12', '20655', '4891', '0'), +('16', '6', '12', '2923', '3404', '0'), +('16', '6', '12', '11624', '2539', '0'), +('16', '6', '18', '4836', '3455', '0'), +('16', '6', '18', '2461', '2557', '0'), +('16', '6', '18', '4346', '2276', '0'), +('16', '6', '18', '4412', '2083', '0'), +('16', '6', '19', '4837', '3923', '0'), +('16', '6', '19', '68239', '3223', '0'), +('16', '6', '19', '2337', '1757', '0'), +('16', '6', '19', '3312', '1392', '0'), +('16', '6', '13', '5622', '28028', '0'), +('16', '6', '13', '11609', '27927', '0'), +('16', '6', '13', '5412', '25806', '0'), +('16', '6', '13', '5401', '24664', '0'), +('16', '6', '14', '11551', '12679', '0'), +('16', '6', '14', '14762', '2181', '0'), +('16', '6', '14', '6359', '1753', '0'), +('16', '6', '14', '9690', '900', '0'), +('16', '6', '11', '14762', '2181', '0'), +('16', '6', '11', '20677', '1800', '0'), +('16', '6', '11', '9246', '604', '0'), +('16', '6', '11', '13748', '454', '0'), +('16', '7', '22', '10323', '0', '0'), +('16', '7', '22', '10664', '0', '0'), +('16', '7', '22', '9246', '0', '0'), +('16', '7', '22', '21509', '0', '0'), +('16', '7', '1', '14701', '3802', '0'), +('16', '7', '1', '14702', '2500', '0'), +('16', '7', '1', '10165', '1683', '0'), +('16', '7', '1', '30361', '1140', '0'), +('16', '7', '2', '1519', '3207', '0'), +('16', '7', '2', '4831', '3020', '0'), +('16', '7', '2', '10142', '3012', '0'), +('16', '7', '2', '4341', '2712', '0'), +('16', '7', '3', '10144', '1304', '0'), +('16', '7', '3', '14706', '990', '0'), +('16', '7', '3', '14705', '990', '0'), +('16', '7', '3', '3314', '785', '0'), +('16', '7', '5', '14703', '5500', '0'), +('16', '7', '5', '14700', '3453', '0'), +('16', '7', '5', '10055', '3255', '0'), +('16', '7', '5', '2583', '2287', '0'), +('16', '7', '8', '11621', '14171', '0'), +('16', '7', '8', '1409', '6312', '0'), +('16', '7', '8', '11551', '5129', '0'), +('16', '7', '8', '2400', '2808', '0'), +('16', '7', '6', '1557', '6760', '0'), +('16', '7', '6', '4302', '1842', '0'), +('16', '7', '6', '25062', '1817', '0'), +('16', '7', '6', '4165', '1812', '0'), +('16', '7', '17', '4832', '6653', '0'), +('16', '7', '17', '4309', '5576', '0'), +('16', '7', '17', '11623', '4979', '0'), +('16', '7', '17', '4342', '3322', '0'), +('16', '7', '7', '4833', '3567', '0'), +('16', '7', '7', '71303', '2689', '0'), +('16', '7', '7', '2458', '2406', '0'), +('16', '7', '7', '4343', '2118', '0'), +('16', '7', '9', '4834', '2625', '0'), +('16', '7', '9', '12189', '2263', '0'), +('16', '7', '9', '10149', '2255', '0'), +('16', '7', '9', '14650', '1802', '0'), +('16', '7', '15', '10366', '8005', '0'), +('16', '7', '15', '10151', '7200', '0'), +('16', '7', '15', '14679', '6255', '0'), +('16', '7', '15', '14678', '5104', '0'), +('16', '7', '20', '11601', '7867', '0'), +('16', '7', '20', '1365', '4200', '0'), +('16', '7', '20', '2471', '3804', '0'), +('16', '7', '20', '1543', '2876', '0'), +('16', '7', '12', '4835', '7570', '0'), +('16', '7', '12', '20655', '4900', '0'), +('16', '7', '12', '2923', '3404', '0'), +('16', '7', '12', '11624', '2568', '0'), +('16', '7', '18', '4836', '3476', '0'), +('16', '7', '18', '2461', '2557', '0'), +('16', '7', '18', '4346', '2276', '0'), +('16', '7', '18', '4412', '2083', '0'), +('16', '7', '19', '4837', '3923', '0'), +('16', '7', '19', '68239', '3223', '0'), +('16', '7', '19', '2337', '1757', '0'), +('16', '7', '19', '3312', '1392', '0'), +('16', '7', '13', '5622', '28028', '0'), +('16', '7', '13', '11609', '27927', '0'), +('16', '7', '13', '5412', '25806', '0'), +('16', '7', '13', '5401', '24664', '0'), +('16', '7', '14', '11551', '12679', '0'), +('16', '7', '14', '14762', '2181', '0'), +('16', '7', '14', '6359', '1753', '0'), +('16', '7', '14', '9690', '1050', '0'), +('16', '7', '11', '14762', '2181', '0'), +('16', '7', '11', '20677', '1800', '0'), +('16', '7', '11', '9246', '604', '0'), +('16', '7', '11', '13748', '454', '0'), +('16', '8', '22', '10323', '0', '0'), +('16', '8', '22', '10664', '0', '0'), +('16', '8', '22', '9246', '0', '0'), +('16', '8', '22', '21509', '0', '0'), +('16', '8', '1', '14701', '3802', '0'), +('16', '8', '1', '14702', '2500', '0'), +('16', '8', '1', '10165', '1683', '0'), +('16', '8', '1', '30361', '1140', '0'), +('16', '8', '2', '1519', '3207', '0'), +('16', '8', '2', '4831', '3020', '0'), +('16', '8', '2', '10142', '3012', '0'), +('16', '8', '2', '4341', '2712', '0'), +('16', '8', '3', '10144', '1304', '0'), +('16', '8', '3', '14706', '990', '0'), +('16', '8', '3', '14705', '990', '0'), +('16', '8', '3', '3314', '785', '0'), +('16', '8', '5', '14703', '5500', '0'), +('16', '8', '5', '14700', '3453', '0'), +('16', '8', '5', '10055', '3255', '0'), +('16', '8', '5', '2583', '2287', '0'), +('16', '8', '8', '11621', '14171', '0'), +('16', '8', '8', '1409', '6312', '0'), +('16', '8', '8', '11551', '5129', '0'), +('16', '8', '8', '2400', '2808', '0'), +('16', '8', '6', '1557', '6760', '0'), +('16', '8', '6', '4302', '1871', '0'), +('16', '8', '6', '25062', '1817', '0'), +('16', '8', '6', '4165', '1812', '0'), +('16', '8', '17', '4832', '6726', '0'), +('16', '8', '17', '4309', '5576', '0'), +('16', '8', '17', '11623', '4979', '0'), +('16', '8', '17', '4342', '3322', '0'), +('16', '8', '7', '4833', '3567', '0'), +('16', '8', '7', '71303', '2689', '0'), +('16', '8', '7', '2458', '2406', '0'), +('16', '8', '7', '4343', '2166', '0'), +('16', '8', '9', '4834', '2625', '0'), +('16', '8', '9', '12189', '2263', '0'), +('16', '8', '9', '10149', '2255', '0'), +('16', '8', '9', '14650', '1802', '0'), +('16', '8', '15', '10366', '8005', '0'), +('16', '8', '15', '10151', '7200', '0'), +('16', '8', '15', '14679', '6255', '0'), +('16', '8', '15', '14678', '5104', '0'), +('16', '8', '20', '11601', '7915', '0'), +('16', '8', '20', '1365', '4200', '0'), +('16', '8', '20', '2471', '3804', '0'), +('16', '8', '20', '1543', '2876', '0'), +('16', '8', '12', '4835', '7594', '0'), +('16', '8', '12', '20655', '4909', '0'), +('16', '8', '12', '2923', '3404', '0'), +('16', '8', '12', '11624', '2602', '0'), +('16', '8', '18', '4836', '3500', '0'), +('16', '8', '18', '2461', '2557', '0'), +('16', '8', '18', '4346', '2276', '0'), +('16', '8', '18', '4412', '2083', '0'), +('16', '8', '19', '4837', '3923', '0'), +('16', '8', '19', '68239', '3223', '0'), +('16', '8', '19', '2337', '1757', '0'), +('16', '8', '19', '3312', '1392', '0'), +('16', '8', '13', '5622', '28028', '0'), +('16', '8', '13', '11609', '27927', '0'), +('16', '8', '13', '5412', '25806', '0'), +('16', '8', '13', '5401', '24664', '0'), +('16', '8', '14', '11551', '12679', '0'), +('16', '8', '14', '14762', '2181', '0'), +('16', '8', '14', '6359', '1753', '0'), +('16', '8', '14', '9690', '1200', '0'), +('16', '8', '11', '14762', '2181', '0'), +('16', '8', '11', '20677', '1800', '0'), +('16', '8', '11', '9246', '604', '0'), +('16', '8', '11', '13748', '454', '0'), +('16', '9', '22', '10323', '0', '0'), +('16', '9', '22', '10664', '0', '0'), +('16', '9', '22', '9246', '0', '0'), +('16', '9', '22', '21509', '0', '0'), +('16', '9', '1', '14701', '3802', '0'), +('16', '9', '1', '14702', '2500', '0'), +('16', '9', '1', '10165', '1683', '0'), +('16', '9', '1', '30361', '1140', '0'), +('16', '9', '2', '1519', '3207', '0'), +('16', '9', '2', '4831', '3020', '0'), +('16', '9', '2', '10142', '3012', '0'), +('16', '9', '2', '4341', '2712', '0'), +('16', '9', '3', '10144', '1304', '0'), +('16', '9', '3', '14706', '990', '0'), +('16', '9', '3', '14705', '990', '0'), +('16', '9', '3', '3314', '785', '0'), +('16', '9', '5', '14703', '5500', '0'), +('16', '9', '5', '14700', '3453', '0'), +('16', '9', '5', '10055', '3255', '0'), +('16', '9', '5', '2583', '2287', '0'), +('16', '9', '8', '11621', '14171', '0'), +('16', '9', '8', '1409', '6312', '0'), +('16', '9', '8', '11551', '5129', '0'), +('16', '9', '8', '2400', '2808', '0'), +('16', '9', '6', '1557', '6760', '0'), +('16', '9', '6', '4302', '1897', '0'), +('16', '9', '6', '25062', '1817', '0'), +('16', '9', '6', '4165', '1812', '0'), +('16', '9', '17', '4832', '6789', '0'), +('16', '9', '17', '4309', '5576', '0'), +('16', '9', '17', '11623', '4979', '0'), +('16', '9', '17', '4342', '3322', '0'), +('16', '9', '7', '4833', '3567', '0'), +('16', '9', '7', '71303', '2689', '0'), +('16', '9', '7', '2458', '2406', '0'), +('16', '9', '7', '4343', '2208', '0'), +('16', '9', '9', '4834', '2625', '0'), +('16', '9', '9', '12189', '2263', '0'), +('16', '9', '9', '10149', '2255', '0'), +('16', '9', '9', '14650', '1802', '0'), +('16', '9', '15', '10366', '8005', '0'), +('16', '9', '15', '10151', '7200', '0'), +('16', '9', '15', '14679', '6255', '0'), +('16', '9', '15', '14678', '5104', '0'), +('16', '9', '20', '11601', '7958', '0'), +('16', '9', '20', '1365', '4200', '0'), +('16', '9', '20', '2471', '3804', '0'), +('16', '9', '20', '1543', '2876', '0'), +('16', '9', '12', '4835', '7615', '0'), +('16', '9', '12', '20655', '4918', '0'), +('16', '9', '12', '2923', '3404', '0'), +('16', '9', '12', '11624', '2632', '0'), +('16', '9', '18', '4836', '3521', '0'), +('16', '9', '18', '2461', '2557', '0'), +('16', '9', '18', '4346', '2276', '0'), +('16', '9', '18', '4412', '2083', '0'), +('16', '9', '19', '4837', '3923', '0'), +('16', '9', '19', '68239', '3223', '0'), +('16', '9', '19', '2337', '1757', '0'), +('16', '9', '19', '3312', '1392', '0'), +('16', '9', '13', '5622', '28028', '0'), +('16', '9', '13', '11609', '27927', '0'), +('16', '9', '13', '5412', '25806', '0'), +('16', '9', '13', '5401', '24664', '0'), +('16', '9', '14', '11551', '12679', '0'), +('16', '9', '14', '14762', '2181', '0'), +('16', '9', '14', '6359', '1753', '0'), +('16', '9', '14', '9690', '1350', '0'), +('16', '9', '11', '14762', '2181', '0'), +('16', '9', '11', '20677', '1800', '0'), +('16', '9', '11', '9246', '604', '0'), +('16', '9', '11', '13748', '454', '0'), +('16', '10', '22', '10323', '0', '0'), +('16', '10', '22', '10664', '0', '0'), +('16', '10', '22', '9246', '0', '0'), +('16', '10', '22', '21509', '0', '0'), +('16', '10', '1', '14701', '3802', '0'), +('16', '10', '1', '14702', '2500', '0'), +('16', '10', '1', '10165', '1683', '0'), +('16', '10', '1', '30361', '1140', '0'), +('16', '10', '2', '1519', '3207', '0'), +('16', '10', '2', '4831', '3020', '0'), +('16', '10', '2', '10142', '3012', '0'), +('16', '10', '2', '4341', '2712', '0'), +('16', '10', '3', '10144', '1304', '0'), +('16', '10', '3', '14706', '990', '0'), +('16', '10', '3', '14705', '990', '0'), +('16', '10', '3', '3314', '785', '0'), +('16', '10', '5', '14703', '5500', '0'), +('16', '10', '5', '14700', '3453', '0'), +('16', '10', '5', '10055', '3255', '0'), +('16', '10', '5', '2583', '2287', '0'), +('16', '10', '8', '11621', '14171', '0'), +('16', '10', '8', '1409', '6312', '0'), +('16', '10', '8', '11551', '5129', '0'), +('16', '10', '8', '2400', '2808', '0'), +('16', '10', '6', '1557', '6760', '0'), +('16', '10', '6', '4302', '1926', '0'), +('16', '10', '6', '25062', '1817', '0'), +('16', '10', '6', '4165', '1812', '0'), +('16', '10', '17', '4832', '6861', '0'), +('16', '10', '17', '4309', '5576', '0'), +('16', '10', '17', '11623', '4979', '0'), +('16', '10', '17', '4342', '3322', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '10', '7', '4833', '3567', '0'), +('16', '10', '7', '71303', '2689', '0'), +('16', '10', '7', '2458', '2406', '0'), +('16', '10', '7', '4343', '2257', '0'), +('16', '10', '9', '4834', '2625', '0'), +('16', '10', '9', '12189', '2263', '0'), +('16', '10', '9', '10149', '2255', '0'), +('16', '10', '9', '14650', '1802', '0'), +('16', '10', '15', '10366', '8005', '0'), +('16', '10', '15', '10151', '7200', '0'), +('16', '10', '15', '14679', '6255', '0'), +('16', '10', '15', '14678', '5104', '0'), +('16', '10', '20', '11601', '8006', '0'), +('16', '10', '20', '1365', '4200', '0'), +('16', '10', '20', '2471', '3804', '0'), +('16', '10', '20', '1543', '2876', '0'), +('16', '10', '12', '4835', '7639', '0'), +('16', '10', '12', '20655', '4927', '0'), +('16', '10', '12', '2923', '3404', '0'), +('16', '10', '12', '11624', '2666', '0'), +('16', '10', '18', '4836', '3545', '0'), +('16', '10', '18', '2461', '2557', '0'), +('16', '10', '18', '4346', '2276', '0'), +('16', '10', '18', '4412', '2083', '0'), +('16', '10', '19', '4837', '3923', '0'), +('16', '10', '19', '68239', '3223', '0'), +('16', '10', '19', '2337', '1757', '0'), +('16', '10', '19', '3312', '1392', '0'), +('16', '10', '13', '5622', '28028', '0'), +('16', '10', '13', '11609', '27927', '0'), +('16', '10', '13', '5412', '25806', '0'), +('16', '10', '13', '5401', '24664', '0'), +('16', '10', '14', '11551', '12679', '0'), +('16', '10', '14', '14762', '2181', '0'), +('16', '10', '14', '6359', '1753', '0'), +('16', '10', '14', '9690', '1500', '0'), +('16', '10', '11', '14762', '2181', '0'), +('16', '10', '11', '20677', '1800', '0'), +('16', '10', '11', '9246', '604', '0'), +('16', '10', '11', '13748', '454', '0'), +('16', '11', '22', '10323', '0', '0'), +('16', '11', '22', '10664', '0', '0'), +('16', '11', '22', '9246', '0', '0'), +('16', '11', '22', '21509', '0', '0'), +('16', '11', '1', '14701', '3802', '0'), +('16', '11', '1', '14702', '2500', '0'), +('16', '11', '1', '10165', '1683', '0'), +('16', '11', '1', '30361', '1140', '0'), +('16', '11', '2', '1519', '3207', '0'), +('16', '11', '2', '4831', '3020', '0'), +('16', '11', '2', '10142', '3012', '0'), +('16', '11', '2', '4620', '2724', '0'), +('16', '11', '3', '10144', '1304', '0'), +('16', '11', '3', '14706', '990', '0'), +('16', '11', '3', '14705', '990', '0'), +('16', '11', '3', '3314', '785', '0'), +('16', '11', '5', '14703', '5500', '0'), +('16', '11', '5', '14700', '3453', '0'), +('16', '11', '5', '10055', '3255', '0'), +('16', '11', '5', '2583', '2287', '0'), +('16', '11', '8', '11621', '14171', '0'), +('16', '11', '8', '1409', '6312', '0'), +('16', '11', '8', '11551', '5129', '0'), +('16', '11', '8', '2400', '2808', '0'), +('16', '11', '6', '1557', '6760', '0'), +('16', '11', '6', '4302', '1951', '0'), +('16', '11', '6', '25062', '1817', '0'), +('16', '11', '6', '4165', '1812', '0'), +('16', '11', '17', '4832', '6925', '0'), +('16', '11', '17', '4309', '5576', '0'), +('16', '11', '17', '11623', '4979', '0'), +('16', '11', '17', '4342', '3322', '0'), +('16', '11', '7', '4833', '3567', '0'), +('16', '11', '7', '71303', '2689', '0'), +('16', '11', '7', '2458', '2406', '0'), +('16', '11', '7', '4343', '2299', '0'), +('16', '11', '9', '4834', '2625', '0'), +('16', '11', '9', '12189', '2263', '0'), +('16', '11', '9', '10149', '2255', '0'), +('16', '11', '9', '14650', '1802', '0'), +('16', '11', '15', '10366', '8005', '0'), +('16', '11', '15', '10151', '7200', '0'), +('16', '11', '15', '14679', '6255', '0'), +('16', '11', '15', '14678', '5104', '0'), +('16', '11', '20', '11601', '8048', '0'), +('16', '11', '20', '1365', '4200', '0'), +('16', '11', '20', '2471', '3804', '0'), +('16', '11', '20', '1543', '2876', '0'), +('16', '11', '12', '4835', '7661', '0'), +('16', '11', '12', '20655', '4936', '0'), +('16', '11', '12', '2923', '3404', '0'), +('16', '11', '12', '11624', '2695', '0'), +('16', '11', '18', '4836', '3567', '0'), +('16', '11', '18', '2461', '2557', '0'), +('16', '11', '18', '4346', '2276', '0'), +('16', '11', '18', '4412', '2083', '0'), +('16', '11', '19', '4837', '3923', '0'), +('16', '11', '19', '68239', '3223', '0'), +('16', '11', '19', '2337', '1757', '0'), +('16', '11', '19', '3312', '1392', '0'), +('16', '11', '13', '5622', '28028', '0'), +('16', '11', '13', '11609', '27927', '0'), +('16', '11', '13', '5412', '25806', '0'), +('16', '11', '13', '5401', '24664', '0'), +('16', '11', '14', '11551', '12679', '0'), +('16', '11', '14', '14762', '2181', '0'), +('16', '11', '14', '6359', '1753', '0'), +('16', '11', '14', '9690', '1500', '0'), +('16', '11', '11', '14762', '2181', '0'), +('16', '11', '11', '20677', '1800', '0'), +('16', '11', '11', '9246', '604', '0'), +('16', '11', '11', '13748', '454', '0'), +('16', '12', '22', '10323', '0', '0'), +('16', '12', '22', '10664', '0', '0'), +('16', '12', '22', '9246', '0', '0'), +('16', '12', '22', '21509', '0', '0'), +('16', '12', '1', '14701', '3802', '0'), +('16', '12', '1', '14702', '2500', '0'), +('16', '12', '1', '10165', '1683', '0'), +('16', '12', '1', '30361', '1140', '0'), +('16', '12', '2', '1519', '3207', '0'), +('16', '12', '2', '4831', '3020', '0'), +('16', '12', '2', '10142', '3012', '0'), +('16', '12', '2', '4620', '2758', '0'), +('16', '12', '3', '10144', '1304', '0'), +('16', '12', '3', '14706', '990', '0'), +('16', '12', '3', '14705', '990', '0'), +('16', '12', '3', '3314', '785', '0'), +('16', '12', '5', '14703', '5500', '0'), +('16', '12', '5', '14700', '3453', '0'), +('16', '12', '5', '10055', '3255', '0'), +('16', '12', '5', '2583', '2287', '0'), +('16', '12', '8', '11621', '14171', '0'), +('16', '12', '8', '1409', '6312', '0'), +('16', '12', '8', '11551', '5129', '0'), +('16', '12', '8', '2400', '2808', '0'), +('16', '12', '6', '1557', '6760', '0'), +('16', '12', '6', '4302', '1980', '0'), +('16', '12', '6', '25062', '1817', '0'), +('16', '12', '6', '4165', '1812', '0'), +('16', '12', '17', '4832', '6997', '0'), +('16', '12', '17', '4309', '5576', '0'), +('16', '12', '17', '11623', '4979', '0'), +('16', '12', '17', '4342', '3322', '0'), +('16', '12', '7', '4833', '3567', '0'), +('16', '12', '7', '71303', '2689', '0'), +('16', '12', '7', '2458', '2406', '0'), +('16', '12', '7', '4343', '2347', '0'), +('16', '12', '9', '4834', '2625', '0'), +('16', '12', '9', '12189', '2263', '0'), +('16', '12', '9', '10149', '2255', '0'), +('16', '12', '9', '14650', '1802', '0'), +('16', '12', '15', '10366', '8005', '0'), +('16', '12', '15', '10151', '7200', '0'), +('16', '12', '15', '14679', '6255', '0'), +('16', '12', '15', '14678', '5104', '0'), +('16', '12', '20', '11601', '8097', '0'), +('16', '12', '20', '1365', '4200', '0'), +('16', '12', '20', '2471', '3804', '0'), +('16', '12', '20', '1543', '2876', '0'), +('16', '12', '12', '4835', '7685', '0'), +('16', '12', '12', '20655', '4946', '0'), +('16', '12', '12', '2923', '3404', '0'), +('16', '12', '12', '11624', '2729', '0'), +('16', '12', '18', '4836', '3591', '0'), +('16', '12', '18', '2461', '2557', '0'), +('16', '12', '18', '4346', '2276', '0'), +('16', '12', '18', '4412', '2083', '0'), +('16', '12', '19', '4837', '3923', '0'), +('16', '12', '19', '68239', '3223', '0'), +('16', '12', '19', '2337', '1757', '0'), +('16', '12', '19', '3312', '1392', '0'), +('16', '12', '13', '5622', '28028', '0'), +('16', '12', '13', '11609', '27927', '0'), +('16', '12', '13', '5412', '25806', '0'), +('16', '12', '13', '5401', '24664', '0'), +('16', '12', '14', '11551', '12679', '0'), +('16', '12', '14', '14762', '2181', '0'), +('16', '12', '14', '6359', '1753', '0'), +('16', '12', '14', '9690', '1500', '0'), +('16', '12', '11', '14762', '2181', '0'), +('16', '12', '11', '20677', '1800', '0'), +('16', '12', '11', '9246', '604', '0'), +('16', '12', '11', '13748', '454', '0'), +('16', '13', '22', '10323', '0', '0'), +('16', '13', '22', '10664', '0', '0'), +('16', '13', '22', '9246', '0', '0'), +('16', '13', '22', '21509', '0', '0'), +('16', '13', '1', '14701', '3802', '0'), +('16', '13', '1', '14702', '2500', '0'), +('16', '13', '1', '10165', '1683', '0'), +('16', '13', '1', '30361', '1140', '0'), +('16', '13', '2', '1519', '3207', '0'), +('16', '13', '2', '4831', '3020', '0'), +('16', '13', '2', '10142', '3012', '0'), +('16', '13', '2', '4620', '2792', '0'), +('16', '13', '3', '10144', '1304', '0'), +('16', '13', '3', '14706', '990', '0'), +('16', '13', '3', '14705', '990', '0'), +('16', '13', '3', '3314', '785', '0'), +('16', '13', '5', '14703', '5500', '0'), +('16', '13', '5', '14700', '3453', '0'), +('16', '13', '5', '10055', '3255', '0'), +('16', '13', '5', '2583', '2287', '0'), +('16', '13', '8', '11621', '14171', '0'), +('16', '13', '8', '1409', '6312', '0'), +('16', '13', '8', '11551', '5129', '0'), +('16', '13', '8', '2400', '2808', '0'), +('16', '13', '6', '1557', '6760', '0'), +('16', '13', '6', '4302', '2009', '0'), +('16', '13', '6', '25062', '1817', '0'), +('16', '13', '6', '4165', '1812', '0'), +('16', '13', '17', '4832', '7070', '0'), +('16', '13', '17', '4309', '5576', '0'), +('16', '13', '17', '11623', '4979', '0'), +('16', '13', '17', '4342', '3322', '0'), +('16', '13', '7', '4833', '3567', '0'), +('16', '13', '7', '71303', '2689', '0'), +('16', '13', '7', '2458', '2406', '0'), +('16', '13', '7', '4343', '2395', '0'), +('16', '13', '9', '4834', '2625', '0'), +('16', '13', '9', '12189', '2263', '0'), +('16', '13', '9', '10149', '2255', '0'), +('16', '13', '9', '14650', '1802', '0'), +('16', '13', '15', '10366', '8005', '0'), +('16', '13', '15', '10151', '7200', '0'), +('16', '13', '15', '14679', '6255', '0'), +('16', '13', '15', '14678', '5104', '0'), +('16', '13', '20', '11601', '8145', '0'), +('16', '13', '20', '1365', '4200', '0'), +('16', '13', '20', '2471', '3804', '0'), +('16', '13', '20', '1543', '2876', '0'), +('16', '13', '12', '4835', '7709', '0'), +('16', '13', '12', '20655', '4955', '0'), +('16', '13', '12', '2923', '3404', '0'), +('16', '13', '12', '11624', '2763', '0'), +('16', '13', '18', '4836', '3615', '0'), +('16', '13', '18', '2461', '2557', '0'), +('16', '13', '18', '4346', '2276', '0'), +('16', '13', '18', '4412', '2083', '0'), +('16', '13', '19', '4837', '3923', '0'), +('16', '13', '19', '68239', '3223', '0'), +('16', '13', '19', '2337', '1757', '0'), +('16', '13', '19', '3312', '1392', '0'), +('16', '13', '13', '5622', '28028', '0'), +('16', '13', '13', '11609', '27927', '0'), +('16', '13', '13', '5412', '25806', '0'), +('16', '13', '13', '5401', '24664', '0'), +('16', '13', '14', '11551', '12679', '0'), +('16', '13', '14', '14762', '2181', '0'), +('16', '13', '14', '6359', '1753', '0'), +('16', '13', '14', '9690', '1500', '0'), +('16', '13', '11', '14762', '2181', '0'), +('16', '13', '11', '20677', '1800', '0'), +('16', '13', '11', '9246', '604', '0'), +('16', '13', '11', '13748', '454', '0'), +('16', '14', '22', '10323', '0', '0'), +('16', '14', '22', '10664', '0', '0'), +('16', '14', '22', '9246', '0', '0'), +('16', '14', '22', '21509', '0', '0'), +('16', '14', '1', '14701', '3802', '0'), +('16', '14', '1', '14702', '2500', '0'), +('16', '14', '1', '10165', '1683', '0'), +('16', '14', '1', '30361', '1140', '0'), +('16', '14', '2', '1519', '3207', '0'), +('16', '14', '2', '4831', '3020', '0'), +('16', '14', '2', '10142', '3012', '0'), +('16', '14', '2', '4620', '2821', '0'), +('16', '14', '3', '10144', '1304', '0'), +('16', '14', '3', '14706', '990', '0'), +('16', '14', '3', '14705', '990', '0'), +('16', '14', '3', '3314', '785', '0'), +('16', '14', '5', '14703', '5500', '0'), +('16', '14', '5', '14700', '3453', '0'), +('16', '14', '5', '10055', '3255', '0'), +('16', '14', '5', '2583', '2287', '0'), +('16', '14', '8', '11621', '14171', '0'), +('16', '14', '8', '1409', '6312', '0'), +('16', '14', '8', '11551', '5129', '0'), +('16', '14', '8', '2400', '2808', '0'), +('16', '14', '6', '1557', '6760', '0'), +('16', '14', '6', '4302', '2034', '0'), +('16', '14', '6', '25062', '1817', '0'), +('16', '14', '6', '4165', '1812', '0'), +('16', '14', '17', '4832', '7133', '0'), +('16', '14', '17', '4309', '5576', '0'), +('16', '14', '17', '11623', '4979', '0'), +('16', '14', '17', '4342', '3322', '0'), +('16', '14', '7', '4833', '3567', '0'), +('16', '14', '7', '71303', '2689', '0'), +('16', '14', '7', '4343', '2438', '0'), +('16', '14', '7', '2458', '2406', '0'), +('16', '14', '9', '4834', '2625', '0'), +('16', '14', '9', '12189', '2263', '0'), +('16', '14', '9', '10149', '2255', '0'), +('16', '14', '9', '14650', '1802', '0'), +('16', '14', '15', '10366', '8005', '0'), +('16', '14', '15', '10151', '7200', '0'), +('16', '14', '15', '14679', '6255', '0'), +('16', '14', '15', '14678', '5104', '0'), +('16', '14', '20', '11601', '8187', '0'), +('16', '14', '20', '1365', '4200', '0'), +('16', '14', '20', '2471', '3804', '0'), +('16', '14', '20', '1543', '2876', '0'), +('16', '14', '12', '4835', '7730', '0'), +('16', '14', '12', '20655', '4964', '0'), +('16', '14', '12', '2923', '3404', '0'), +('16', '14', '12', '11624', '2793', '0'), +('16', '14', '18', '4836', '3636', '0'), +('16', '14', '18', '2461', '2557', '0'), +('16', '14', '18', '4346', '2276', '0'), +('16', '14', '18', '4412', '2083', '0'), +('16', '14', '19', '4837', '3923', '0'), +('16', '14', '19', '68239', '3223', '0'), +('16', '14', '19', '2337', '1757', '0'), +('16', '14', '19', '3312', '1392', '0'), +('16', '14', '13', '5622', '28028', '0'), +('16', '14', '13', '11609', '27927', '0'), +('16', '14', '13', '5412', '25806', '0'), +('16', '14', '13', '5401', '24664', '0'), +('16', '14', '14', '11551', '12679', '0'), +('16', '14', '14', '14762', '2181', '0'), +('16', '14', '14', '6359', '1753', '0'), +('16', '14', '14', '9690', '1500', '0'), +('16', '14', '11', '14762', '2181', '0'), +('16', '14', '11', '20677', '1800', '0'), +('16', '14', '11', '9246', '604', '0'), +('16', '14', '11', '13748', '454', '0'), +('16', '15', '22', '10323', '0', '0'), +('16', '15', '22', '10664', '0', '0'), +('16', '15', '22', '9246', '0', '0'), +('16', '15', '22', '21509', '0', '0'), +('16', '15', '1', '14701', '3802', '0'), +('16', '15', '1', '14702', '2500', '0'), +('16', '15', '1', '10165', '1683', '0'), +('16', '15', '1', '30361', '1140', '0'), +('16', '15', '2', '1519', '3207', '0'), +('16', '15', '2', '4831', '3020', '0'), +('16', '15', '2', '10142', '3012', '0'), +('16', '15', '2', '4620', '2855', '0'), +('16', '15', '3', '10144', '1304', '0'), +('16', '15', '3', '14706', '990', '0'), +('16', '15', '3', '14705', '990', '0'), +('16', '15', '3', '3314', '785', '0'), +('16', '15', '5', '14703', '5500', '0'), +('16', '15', '5', '14700', '3453', '0'), +('16', '15', '5', '10055', '3255', '0'), +('16', '15', '5', '2583', '2287', '0'), +('16', '15', '8', '11621', '14171', '0'), +('16', '15', '8', '1409', '6312', '0'), +('16', '15', '8', '11551', '5129', '0'), +('16', '15', '8', '2400', '2808', '0'), +('16', '15', '6', '1557', '6760', '0'), +('16', '15', '6', '4302', '2063', '0'), +('16', '15', '6', '25062', '1817', '0'), +('16', '15', '6', '4165', '1812', '0'), +('16', '15', '17', '4832', '7206', '0'), +('16', '15', '17', '4309', '5576', '0'), +('16', '15', '17', '11623', '4979', '0'), +('16', '15', '17', '4342', '3322', '0'), +('16', '15', '7', '4833', '3567', '0'), +('16', '15', '7', '71303', '2689', '0'), +('16', '15', '7', '4343', '2486', '0'), +('16', '15', '7', '2458', '2406', '0'), +('16', '15', '9', '4834', '2625', '0'), +('16', '15', '9', '12189', '2263', '0'), +('16', '15', '9', '10149', '2255', '0'), +('16', '15', '9', '14650', '1802', '0'), +('16', '15', '15', '10366', '8005', '0'), +('16', '15', '15', '10151', '7200', '0'), +('16', '15', '15', '14679', '6255', '0'), +('16', '15', '15', '14678', '5104', '0'), +('16', '15', '20', '11601', '8235', '0'), +('16', '15', '20', '1365', '4200', '0'), +('16', '15', '20', '2471', '3804', '0'), +('16', '15', '20', '1543', '2876', '0'), +('16', '15', '12', '4835', '7754', '0'), +('16', '15', '12', '20655', '4973', '0'), +('16', '15', '12', '2923', '3404', '0'), +('16', '15', '12', '11624', '2826', '0'), +('16', '15', '18', '4836', '3660', '0'), +('16', '15', '18', '2461', '2557', '0'), +('16', '15', '18', '4346', '2276', '0'), +('16', '15', '18', '4412', '2083', '0'), +('16', '15', '19', '4837', '3923', '0'), +('16', '15', '19', '68239', '3223', '0'), +('16', '15', '19', '2337', '1757', '0'), +('16', '15', '19', '3312', '1392', '0'), +('16', '15', '13', '5622', '28028', '0'), +('16', '15', '13', '11609', '27927', '0'), +('16', '15', '13', '5412', '25806', '0'), +('16', '15', '13', '5401', '24664', '0'), +('16', '15', '14', '11551', '12679', '0'), +('16', '15', '14', '14762', '2181', '0'), +('16', '15', '14', '6359', '1753', '0'), +('16', '15', '14', '9690', '1500', '0'), +('16', '15', '11', '14762', '2181', '0'), +('16', '15', '11', '20677', '1800', '0'), +('16', '15', '11', '9246', '604', '0'), +('16', '15', '11', '13748', '454', '0'), +('16', '16', '22', '10323', '0', '0'), +('16', '16', '22', '10664', '0', '0'), +('16', '16', '22', '9246', '0', '0'), +('16', '16', '22', '21509', '0', '0'), +('16', '16', '1', '14701', '3802', '0'), +('16', '16', '1', '14702', '2500', '0'), +('16', '16', '1', '10165', '1683', '0'), +('16', '16', '1', '30361', '1140', '0'), +('16', '16', '2', '1519', '3207', '0'), +('16', '16', '2', '4831', '3020', '0'), +('16', '16', '2', '10142', '3012', '0'), +('16', '16', '2', '4620', '2889', '0'), +('16', '16', '3', '10144', '1304', '0'), +('16', '16', '3', '14706', '990', '0'), +('16', '16', '3', '14705', '990', '0'), +('16', '16', '3', '3314', '785', '0'), +('16', '16', '5', '14703', '5500', '0'), +('16', '16', '5', '14700', '3453', '0'), +('16', '16', '5', '10055', '3255', '0'), +('16', '16', '5', '2583', '2287', '0'), +('16', '16', '8', '11621', '14171', '0'), +('16', '16', '8', '1409', '6312', '0'), +('16', '16', '8', '11551', '5129', '0'), +('16', '16', '8', '2400', '2808', '0'), +('16', '16', '6', '1557', '6760', '0'), +('16', '16', '6', '4302', '2092', '0'), +('16', '16', '6', '25062', '1817', '0'), +('16', '16', '6', '4165', '1812', '0'), +('16', '16', '17', '4832', '7278', '0'), +('16', '16', '17', '4309', '5576', '0'), +('16', '16', '17', '11623', '4979', '0'), +('16', '16', '17', '4342', '3322', '0'), +('16', '16', '7', '4833', '3567', '0'), +('16', '16', '7', '71303', '2689', '0'), +('16', '16', '7', '4343', '2534', '0'), +('16', '16', '7', '2458', '2406', '0'), +('16', '16', '9', '4834', '2625', '0'), +('16', '16', '9', '12189', '2263', '0'), +('16', '16', '9', '10149', '2255', '0'), +('16', '16', '9', '14650', '1802', '0'), +('16', '16', '15', '10366', '8005', '0'), +('16', '16', '15', '10151', '7200', '0'), +('16', '16', '15', '14679', '6255', '0'), +('16', '16', '15', '14678', '5104', '0'), +('16', '16', '20', '11601', '8284', '0'), +('16', '16', '20', '1365', '4200', '0'), +('16', '16', '20', '2471', '3804', '0'), +('16', '16', '20', '1543', '2876', '0'), +('16', '16', '12', '4835', '7778', '0'), +('16', '16', '12', '20655', '4983', '0'), +('16', '16', '12', '2923', '3404', '0'), +('16', '16', '12', '11624', '2860', '0'), +('16', '16', '18', '4836', '3684', '0'), +('16', '16', '18', '2461', '2557', '0'), +('16', '16', '18', '4346', '2276', '0'), +('16', '16', '18', '4412', '2083', '0'), +('16', '16', '19', '4837', '3923', '0'), +('16', '16', '19', '68239', '3223', '0'), +('16', '16', '19', '2337', '1757', '0'), +('16', '16', '19', '3312', '1392', '0'), +('16', '16', '13', '5622', '28028', '0'), +('16', '16', '13', '11609', '27927', '0'), +('16', '16', '13', '5412', '25806', '0'), +('16', '16', '13', '5401', '24664', '0'), +('16', '16', '14', '11551', '12679', '0'), +('16', '16', '14', '14762', '2181', '0'), +('16', '16', '14', '6359', '1753', '0'), +('16', '16', '14', '9690', '1500', '0'), +('16', '16', '11', '14762', '2181', '0'), +('16', '16', '11', '20677', '1800', '0'), +('16', '16', '11', '9246', '604', '0'), +('16', '16', '11', '13748', '454', '0'), +('16', '17', '22', '10323', '0', '0'), +('16', '17', '22', '10664', '0', '0'), +('16', '17', '22', '9246', '0', '0'), +('16', '17', '22', '21509', '0', '0'), +('16', '17', '1', '14701', '3802', '0'), +('16', '17', '1', '14702', '2500', '0'), +('16', '17', '1', '10165', '1683', '0'), +('16', '17', '1', '30361', '1140', '0'), +('16', '17', '2', '1519', '3207', '0'), +('16', '17', '2', '4831', '3020', '0'), +('16', '17', '2', '10142', '3012', '0'), +('16', '17', '2', '4620', '2923', '0'), +('16', '17', '3', '10144', '1304', '0'), +('16', '17', '3', '14706', '990', '0'), +('16', '17', '3', '14705', '990', '0'), +('16', '17', '3', '3314', '785', '0'), +('16', '17', '5', '14703', '5500', '0'), +('16', '17', '5', '14700', '3453', '0'), +('16', '17', '5', '10055', '3255', '0'), +('16', '17', '5', '2583', '2287', '0'), +('16', '17', '8', '11621', '14171', '0'), +('16', '17', '8', '1409', '6312', '0'), +('16', '17', '8', '11551', '5129', '0'), +('16', '17', '8', '2400', '2808', '0'), +('16', '17', '6', '1557', '6760', '0'), +('16', '17', '6', '4302', '2121', '0'), +('16', '17', '6', '25062', '1817', '0'), +('16', '17', '6', '4165', '1812', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '17', '17', '4832', '7351', '0'), +('16', '17', '17', '4309', '5576', '0'), +('16', '17', '17', '11623', '4979', '0'), +('16', '17', '17', '4342', '3322', '0'), +('16', '17', '7', '4833', '3567', '0'), +('16', '17', '7', '71303', '2689', '0'), +('16', '17', '7', '4343', '2583', '0'), +('16', '17', '7', '2458', '2406', '0'), +('16', '17', '9', '4834', '2625', '0'), +('16', '17', '9', '12189', '2263', '0'), +('16', '17', '9', '10149', '2255', '0'), +('16', '17', '9', '14650', '1802', '0'), +('16', '17', '15', '10366', '8005', '0'), +('16', '17', '15', '10151', '7200', '0'), +('16', '17', '15', '14679', '6255', '0'), +('16', '17', '15', '14678', '5104', '0'), +('16', '17', '20', '11601', '8332', '0'), +('16', '17', '20', '1365', '4200', '0'), +('16', '17', '20', '2471', '3804', '0'), +('16', '17', '20', '1543', '2876', '0'), +('16', '17', '12', '4835', '7803', '0'), +('16', '17', '12', '20655', '4993', '0'), +('16', '17', '12', '2923', '3404', '0'), +('16', '17', '12', '11624', '2894', '0'), +('16', '17', '18', '4836', '3709', '0'), +('16', '17', '18', '2461', '2557', '0'), +('16', '17', '18', '4346', '2276', '0'), +('16', '17', '18', '4412', '2083', '0'), +('16', '17', '19', '4837', '3923', '0'), +('16', '17', '19', '68239', '3223', '0'), +('16', '17', '19', '2337', '1757', '0'), +('16', '17', '19', '3312', '1392', '0'), +('16', '17', '13', '5622', '28028', '0'), +('16', '17', '13', '11609', '27927', '0'), +('16', '17', '13', '5412', '25806', '0'), +('16', '17', '13', '5401', '24664', '0'), +('16', '17', '14', '11551', '12679', '0'), +('16', '17', '14', '14762', '2181', '0'), +('16', '17', '14', '6359', '1753', '0'), +('16', '17', '14', '9690', '1500', '0'), +('16', '17', '11', '14762', '2181', '0'), +('16', '17', '11', '20677', '1800', '0'), +('16', '17', '11', '9246', '604', '0'), +('16', '17', '11', '13748', '454', '0'), +('16', '18', '22', '10323', '0', '0'), +('16', '18', '22', '10664', '0', '0'), +('16', '18', '22', '9246', '0', '0'), +('16', '18', '22', '21509', '0', '0'), +('16', '18', '1', '14701', '3802', '0'), +('16', '18', '1', '14702', '2500', '0'), +('16', '18', '1', '10165', '1683', '0'), +('16', '18', '1', '30361', '1140', '0'), +('16', '18', '2', '1519', '3207', '0'), +('16', '18', '2', '4831', '3020', '0'), +('16', '18', '2', '10142', '3012', '0'), +('16', '18', '2', '4620', '2957', '0'), +('16', '18', '3', '10144', '1304', '0'), +('16', '18', '3', '14706', '990', '0'), +('16', '18', '3', '14705', '990', '0'), +('16', '18', '3', '3314', '785', '0'), +('16', '18', '5', '14703', '5500', '0'), +('16', '18', '5', '14700', '3453', '0'), +('16', '18', '5', '10055', '3255', '0'), +('16', '18', '5', '2583', '2287', '0'), +('16', '18', '8', '11621', '14171', '0'), +('16', '18', '8', '1409', '6312', '0'), +('16', '18', '8', '11551', '5129', '0'), +('16', '18', '8', '2400', '2808', '0'), +('16', '18', '6', '1557', '6760', '0'), +('16', '18', '6', '4302', '2150', '0'), +('16', '18', '6', '25062', '1817', '0'), +('16', '18', '6', '4165', '1812', '0'), +('16', '18', '17', '4832', '7423', '0'), +('16', '18', '17', '4309', '5576', '0'), +('16', '18', '17', '11623', '4979', '0'), +('16', '18', '17', '4342', '3322', '0'), +('16', '18', '7', '4833', '3567', '0'), +('16', '18', '7', '71303', '2689', '0'), +('16', '18', '7', '4343', '2631', '0'), +('16', '18', '7', '2458', '2406', '0'), +('16', '18', '9', '4834', '2625', '0'), +('16', '18', '9', '12189', '2263', '0'), +('16', '18', '9', '10149', '2255', '0'), +('16', '18', '9', '14650', '1802', '0'), +('16', '18', '15', '10366', '8005', '0'), +('16', '18', '15', '10151', '7200', '0'), +('16', '18', '15', '14679', '6255', '0'), +('16', '18', '15', '14678', '5104', '0'), +('16', '18', '20', '11601', '8380', '0'), +('16', '18', '20', '1365', '4200', '0'), +('16', '18', '20', '2471', '3804', '0'), +('16', '18', '20', '2742', '2923', '0'), +('16', '18', '12', '4835', '7827', '0'), +('16', '18', '12', '20655', '5002', '0'), +('16', '18', '12', '2923', '3404', '0'), +('16', '18', '12', '11624', '2928', '0'), +('16', '18', '18', '4836', '3733', '0'), +('16', '18', '18', '2461', '2557', '0'), +('16', '18', '18', '4346', '2276', '0'), +('16', '18', '18', '4412', '2083', '0'), +('16', '18', '19', '4837', '3923', '0'), +('16', '18', '19', '68239', '3223', '0'), +('16', '18', '19', '2337', '1757', '0'), +('16', '18', '19', '3312', '1392', '0'), +('16', '18', '13', '5622', '28028', '0'), +('16', '18', '13', '11609', '27927', '0'), +('16', '18', '13', '5412', '25806', '0'), +('16', '18', '13', '5401', '24664', '0'), +('16', '18', '14', '11551', '12679', '0'), +('16', '18', '14', '14762', '2181', '0'), +('16', '18', '14', '6359', '1753', '0'), +('16', '18', '14', '9690', '1500', '0'), +('16', '18', '11', '14762', '2181', '0'), +('16', '18', '11', '20677', '1800', '0'), +('16', '18', '11', '9246', '604', '0'), +('16', '18', '11', '13748', '454', '0'), +('16', '19', '22', '10323', '0', '0'), +('16', '19', '22', '10664', '0', '0'), +('16', '19', '22', '9246', '0', '0'), +('16', '19', '22', '21509', '0', '0'), +('16', '19', '1', '14701', '3802', '0'), +('16', '19', '1', '14702', '2500', '0'), +('16', '19', '1', '10165', '1683', '0'), +('16', '19', '1', '30361', '1140', '0'), +('16', '19', '2', '1519', '3207', '0'), +('16', '19', '2', '4831', '3020', '0'), +('16', '19', '2', '10142', '3012', '0'), +('16', '19', '2', '4620', '2990', '0'), +('16', '19', '3', '10144', '1304', '0'), +('16', '19', '3', '14706', '990', '0'), +('16', '19', '3', '14705', '990', '0'), +('16', '19', '3', '3314', '785', '0'), +('16', '19', '5', '14703', '5500', '0'), +('16', '19', '5', '14700', '3453', '0'), +('16', '19', '5', '10055', '3255', '0'), +('16', '19', '5', '2583', '2287', '0'), +('16', '19', '8', '11621', '14171', '0'), +('16', '19', '8', '1409', '6312', '0'), +('16', '19', '8', '11551', '5129', '0'), +('16', '19', '8', '2400', '2808', '0'), +('16', '19', '6', '1557', '6760', '0'), +('16', '19', '6', '4302', '2179', '0'), +('16', '19', '6', '25062', '1817', '0'), +('16', '19', '6', '4165', '1812', '0'), +('16', '19', '17', '4832', '7496', '0'), +('16', '19', '17', '4309', '5576', '0'), +('16', '19', '17', '11623', '4979', '0'), +('16', '19', '17', '3307', '3335', '0'), +('16', '19', '7', '4833', '3567', '0'), +('16', '19', '7', '71303', '2689', '0'), +('16', '19', '7', '4343', '2679', '0'), +('16', '19', '7', '2458', '2406', '0'), +('16', '19', '9', '4834', '2625', '0'), +('16', '19', '9', '12189', '2263', '0'), +('16', '19', '9', '10149', '2255', '0'), +('16', '19', '9', '14650', '1802', '0'), +('16', '19', '15', '10366', '8005', '0'), +('16', '19', '15', '10151', '7200', '0'), +('16', '19', '15', '14679', '6255', '0'), +('16', '19', '15', '14678', '5104', '0'), +('16', '19', '20', '11601', '8429', '0'), +('16', '19', '20', '1365', '4200', '0'), +('16', '19', '20', '2471', '3804', '0'), +('16', '19', '20', '2742', '2972', '0'), +('16', '19', '12', '4835', '7851', '0'), +('16', '19', '12', '20655', '5012', '0'), +('16', '19', '12', '2923', '3404', '0'), +('16', '19', '12', '11624', '2962', '0'), +('16', '19', '18', '4836', '3757', '0'), +('16', '19', '18', '2461', '2557', '0'), +('16', '19', '18', '4346', '2276', '0'), +('16', '19', '18', '4412', '2083', '0'), +('16', '19', '19', '4837', '3923', '0'), +('16', '19', '19', '68239', '3223', '0'), +('16', '19', '19', '2337', '1757', '0'), +('16', '19', '19', '3312', '1392', '0'), +('16', '19', '13', '5622', '28028', '0'), +('16', '19', '13', '11609', '27927', '0'), +('16', '19', '13', '5412', '25806', '0'), +('16', '19', '13', '5401', '24664', '0'), +('16', '19', '14', '11551', '12679', '0'), +('16', '19', '14', '14762', '2181', '0'), +('16', '19', '14', '6359', '1753', '0'), +('16', '19', '14', '9690', '1500', '0'), +('16', '19', '11', '14762', '2181', '0'), +('16', '19', '11', '20677', '1800', '0'), +('16', '19', '11', '9246', '604', '0'), +('16', '19', '11', '13748', '454', '0'), +('16', '20', '22', '10323', '0', '0'), +('16', '20', '22', '10664', '0', '0'), +('16', '20', '22', '9246', '0', '0'), +('16', '20', '22', '21509', '0', '0'), +('16', '20', '1', '14701', '3802', '0'), +('16', '20', '1', '14702', '2500', '0'), +('16', '20', '1', '10165', '1683', '0'), +('16', '20', '1', '30361', '1140', '0'), +('16', '20', '2', '1519', '3207', '0'), +('16', '20', '2', '4620', '3024', '0'), +('16', '20', '2', '4831', '3020', '0'), +('16', '20', '2', '10142', '3012', '0'), +('16', '20', '3', '10144', '1304', '0'), +('16', '20', '3', '14706', '990', '0'), +('16', '20', '3', '14705', '990', '0'), +('16', '20', '3', '3314', '785', '0'), +('16', '20', '5', '14703', '5500', '0'), +('16', '20', '5', '14700', '3453', '0'), +('16', '20', '5', '10055', '3255', '0'), +('16', '20', '5', '2583', '2287', '0'), +('16', '20', '8', '11621', '14171', '0'), +('16', '20', '8', '1409', '6312', '0'), +('16', '20', '8', '11551', '5129', '0'), +('16', '20', '8', '2400', '2808', '0'), +('16', '20', '6', '1557', '6760', '0'), +('16', '20', '6', '4302', '2208', '0'), +('16', '20', '6', '25062', '1817', '0'), +('16', '20', '6', '4165', '1812', '0'), +('16', '20', '17', '4832', '7568', '0'), +('16', '20', '17', '4309', '5576', '0'), +('16', '20', '17', '11623', '4979', '0'), +('16', '20', '17', '3307', '3355', '0'), +('16', '20', '7', '4833', '3567', '0'), +('16', '20', '7', '4343', '2728', '0'), +('16', '20', '7', '71303', '2689', '0'), +('16', '20', '7', '2458', '2406', '0'), +('16', '20', '9', '4834', '2625', '0'), +('16', '20', '9', '12189', '2263', '0'), +('16', '20', '9', '10149', '2255', '0'), +('16', '20', '9', '14650', '1802', '0'), +('16', '20', '15', '10366', '8005', '0'), +('16', '20', '15', '10151', '7200', '0'), +('16', '20', '15', '14679', '6255', '0'), +('16', '20', '15', '14678', '5104', '0'), +('16', '20', '20', '11601', '8477', '0'), +('16', '20', '20', '1365', '4200', '0'), +('16', '20', '20', '2471', '3804', '0'), +('16', '20', '20', '2742', '3020', '0'), +('16', '20', '12', '4835', '7875', '0'), +('16', '20', '12', '20655', '5022', '0'), +('16', '20', '12', '2923', '3404', '0'), +('16', '20', '12', '11624', '2995', '0'), +('16', '20', '18', '4836', '3781', '0'), +('16', '20', '18', '2461', '2557', '0'), +('16', '20', '18', '4346', '2276', '0'), +('16', '20', '18', '4412', '2083', '0'), +('16', '20', '19', '4837', '3923', '0'), +('16', '20', '19', '68239', '3223', '0'), +('16', '20', '19', '2337', '1757', '0'), +('16', '20', '19', '3312', '1392', '0'), +('16', '20', '13', '5622', '29139', '0'), +('16', '20', '13', '11609', '29038', '0'), +('16', '20', '13', '5412', '26816', '0'), +('16', '20', '13', '5401', '25522', '0'), +('16', '20', '14', '11551', '12679', '0'), +('16', '20', '14', '14762', '2181', '0'), +('16', '20', '14', '6359', '1753', '0'), +('16', '20', '14', '9690', '1500', '0'), +('16', '20', '11', '14762', '2181', '0'), +('16', '20', '11', '20677', '1800', '0'), +('16', '20', '11', '9246', '604', '0'), +('16', '20', '11', '13748', '454', '0'), +('16', '21', '22', '10323', '0', '0'), +('16', '21', '22', '10664', '0', '0'), +('16', '21', '22', '9246', '0', '0'), +('16', '21', '22', '21509', '0', '0'), +('16', '21', '1', '14701', '3802', '0'), +('16', '21', '1', '14702', '2500', '0'), +('16', '21', '1', '10165', '1683', '0'), +('16', '21', '1', '30361', '1140', '0'), +('16', '21', '2', '1519', '3207', '0'), +('16', '21', '2', '4620', '3058', '0'), +('16', '21', '2', '4831', '3020', '0'), +('16', '21', '2', '10142', '3012', '0'), +('16', '21', '3', '10144', '1304', '0'), +('16', '21', '3', '14706', '990', '0'), +('16', '21', '3', '14705', '990', '0'), +('16', '21', '3', '3314', '785', '0'), +('16', '21', '5', '14703', '5500', '0'), +('16', '21', '5', '14700', '3453', '0'), +('16', '21', '5', '10055', '3255', '0'), +('16', '21', '5', '2583', '2287', '0'), +('16', '21', '8', '11621', '14171', '0'), +('16', '21', '8', '1409', '6312', '0'), +('16', '21', '8', '11551', '5129', '0'), +('16', '21', '8', '2400', '2808', '0'), +('16', '21', '6', '1557', '6760', '0'), +('16', '21', '6', '4302', '2237', '0'), +('16', '21', '6', '25062', '1817', '0'), +('16', '21', '6', '4165', '1812', '0'), +('16', '21', '17', '4832', '7641', '0'), +('16', '21', '17', '4309', '5576', '0'), +('16', '21', '17', '11623', '4979', '0'), +('16', '21', '17', '3307', '3374', '0'), +('16', '21', '7', '4833', '3567', '0'), +('16', '21', '7', '4343', '2776', '0'), +('16', '21', '7', '71303', '2689', '0'), +('16', '21', '7', '2458', '2406', '0'), +('16', '21', '9', '4834', '2625', '0'), +('16', '21', '9', '12189', '2263', '0'), +('16', '21', '9', '10149', '2255', '0'), +('16', '21', '9', '14650', '1802', '0'), +('16', '21', '15', '10366', '8005', '0'), +('16', '21', '15', '10151', '7200', '0'), +('16', '21', '15', '14679', '6255', '0'), +('16', '21', '15', '14678', '5104', '0'), +('16', '21', '20', '11601', '8525', '0'), +('16', '21', '20', '1365', '4200', '0'), +('16', '21', '20', '2471', '3804', '0'), +('16', '21', '20', '2742', '3068', '0'), +('16', '21', '12', '4835', '7899', '0'), +('16', '21', '12', '20655', '5031', '0'), +('16', '21', '12', '2923', '3404', '0'), +('16', '21', '12', '11624', '3029', '0'), +('16', '21', '18', '4836', '3805', '0'), +('16', '21', '18', '2461', '2557', '0'), +('16', '21', '18', '4346', '2276', '0'), +('16', '21', '18', '4412', '2083', '0'), +('16', '21', '19', '4837', '3923', '0'), +('16', '21', '19', '68239', '3223', '0'), +('16', '21', '19', '2337', '1757', '0'), +('16', '21', '19', '3312', '1392', '0'), +('16', '21', '13', '5622', '29492', '0'), +('16', '21', '13', '11609', '29391', '0'), +('16', '21', '13', '5412', '27169', '0'), +('16', '21', '13', '5401', '25775', '0'), +('16', '21', '14', '11551', '12679', '0'), +('16', '21', '14', '14762', '2181', '0'), +('16', '21', '14', '6359', '1753', '0'), +('16', '21', '14', '9690', '1500', '0'), +('16', '21', '11', '14762', '2181', '0'), +('16', '21', '11', '20677', '1800', '0'), +('16', '21', '11', '9246', '604', '0'), +('16', '21', '11', '13748', '454', '0'), +('16', '22', '22', '10323', '0', '0'), +('16', '22', '22', '10664', '0', '0'), +('16', '22', '22', '9246', '0', '0'), +('16', '22', '22', '21509', '0', '0'), +('16', '22', '1', '14701', '3802', '0'), +('16', '22', '1', '14702', '2500', '0'), +('16', '22', '1', '10165', '1683', '0'), +('16', '22', '1', '30361', '1140', '0'), +('16', '22', '2', '1519', '3207', '0'), +('16', '22', '2', '4620', '3092', '0'), +('16', '22', '2', '4831', '3020', '0'), +('16', '22', '2', '10142', '3012', '0'), +('16', '22', '3', '10144', '1304', '0'), +('16', '22', '3', '14706', '990', '0'), +('16', '22', '3', '14705', '990', '0'), +('16', '22', '3', '3314', '785', '0'), +('16', '22', '5', '14703', '5500', '0'), +('16', '22', '5', '14700', '3453', '0'), +('16', '22', '5', '10055', '3255', '0'), +('16', '22', '5', '2583', '2287', '0'), +('16', '22', '8', '11621', '14171', '0'), +('16', '22', '8', '1409', '6312', '0'), +('16', '22', '8', '11551', '5129', '0'), +('16', '22', '8', '2400', '2808', '0'), +('16', '22', '6', '1557', '6760', '0'), +('16', '22', '6', '4302', '2266', '0'), +('16', '22', '6', '25062', '1817', '0'), +('16', '22', '6', '4165', '1812', '0'), +('16', '22', '17', '4832', '7713', '0'), +('16', '22', '17', '4309', '5576', '0'), +('16', '22', '17', '11623', '4979', '0'), +('16', '22', '17', '3307', '3393', '0'), +('16', '22', '7', '4833', '3567', '0'), +('16', '22', '7', '4343', '2824', '0'), +('16', '22', '7', '71303', '2689', '0'), +('16', '22', '7', '2458', '2406', '0'), +('16', '22', '9', '4834', '2625', '0'), +('16', '22', '9', '12189', '2263', '0'), +('16', '22', '9', '10149', '2255', '0'), +('16', '22', '9', '14650', '1802', '0'), +('16', '22', '15', '10366', '8005', '0'), +('16', '22', '15', '10151', '7200', '0'), +('16', '22', '15', '14679', '6255', '0'), +('16', '22', '15', '14678', '5104', '0'), +('16', '22', '20', '11601', '8574', '0'), +('16', '22', '20', '1365', '4200', '0'), +('16', '22', '20', '2471', '3804', '0'), +('16', '22', '20', '2742', '3117', '0'), +('16', '22', '12', '4835', '7923', '0'), +('16', '22', '12', '20655', '5041', '0'), +('16', '22', '12', '2923', '3404', '0'), +('16', '22', '12', '11624', '3063', '0'), +('16', '22', '18', '4836', '3829', '0'), +('16', '22', '18', '2461', '2557', '0'), +('16', '22', '18', '4346', '2276', '0'), +('16', '22', '18', '4412', '2083', '0'), +('16', '22', '19', '4837', '3923', '0'), +('16', '22', '19', '68239', '3223', '0'), +('16', '22', '19', '2337', '1757', '0'), +('16', '22', '19', '3312', '1392', '0'), +('16', '22', '13', '5622', '29795', '0'), +('16', '22', '13', '11609', '29694', '0'), +('16', '22', '13', '5412', '27472', '0'), +('16', '22', '13', '5401', '26027', '0'), +('16', '22', '14', '11551', '12679', '0'), +('16', '22', '14', '14762', '2181', '0'), +('16', '22', '14', '6359', '1753', '0'), +('16', '22', '14', '9690', '1500', '0'), +('16', '22', '11', '14762', '2181', '0'), +('16', '22', '11', '20677', '1800', '0'), +('16', '22', '11', '9246', '604', '0'), +('16', '22', '11', '13748', '454', '0'), +('16', '23', '22', '10323', '0', '0'), +('16', '23', '22', '10664', '0', '0'), +('16', '23', '22', '9246', '0', '0'), +('16', '23', '22', '21509', '0', '0'), +('16', '23', '1', '14701', '3802', '0'), +('16', '23', '1', '14702', '2500', '0'), +('16', '23', '1', '10165', '1683', '0'), +('16', '23', '1', '30361', '1140', '0'), +('16', '23', '2', '1519', '3207', '0'), +('16', '23', '2', '4620', '3126', '0'), +('16', '23', '2', '4831', '3020', '0'), +('16', '23', '2', '10142', '3012', '0'), +('16', '23', '3', '10144', '1304', '0'), +('16', '23', '3', '14706', '990', '0'), +('16', '23', '3', '14705', '990', '0'), +('16', '23', '3', '3314', '785', '0'), +('16', '23', '5', '14703', '5500', '0'), +('16', '23', '5', '14700', '3453', '0'), +('16', '23', '5', '10055', '3255', '0'), +('16', '23', '5', '2583', '2287', '0'), +('16', '23', '8', '11621', '14171', '0'), +('16', '23', '8', '1409', '6312', '0'), +('16', '23', '8', '11551', '5129', '0'), +('16', '23', '8', '2400', '2808', '0'), +('16', '23', '6', '1557', '6760', '0'), +('16', '23', '6', '4302', '2295', '0'), +('16', '23', '6', '25062', '1817', '0'), +('16', '23', '6', '4165', '1812', '0'), +('16', '23', '17', '4832', '7786', '0'), +('16', '23', '17', '4309', '5576', '0'), +('16', '23', '17', '11623', '4979', '0'), +('16', '23', '17', '3307', '3413', '0'), +('16', '23', '7', '4833', '3567', '0'), +('16', '23', '7', '4343', '2873', '0'), +('16', '23', '7', '71303', '2689', '0'), +('16', '23', '7', '2458', '2406', '0'), +('16', '23', '9', '4834', '2625', '0'), +('16', '23', '9', '12189', '2263', '0'), +('16', '23', '9', '10149', '2255', '0'), +('16', '23', '9', '14650', '1802', '0'), +('16', '23', '15', '10366', '8005', '0'), +('16', '23', '15', '10151', '7200', '0'), +('16', '23', '15', '14679', '6255', '0'), +('16', '23', '15', '14678', '5104', '0'), +('16', '23', '20', '11601', '8622', '0'), +('16', '23', '20', '1365', '4200', '0'), +('16', '23', '20', '2471', '3804', '0'), +('16', '23', '20', '2742', '3165', '0'), +('16', '23', '12', '4835', '7948', '0'), +('16', '23', '12', '20655', '5051', '0'), +('16', '23', '12', '2923', '3404', '0'), +('16', '23', '12', '11624', '3097', '0'), +('16', '23', '18', '4836', '3854', '0'), +('16', '23', '18', '2461', '2557', '0'), +('16', '23', '18', '4346', '2276', '0'), +('16', '23', '18', '4412', '2083', '0'), +('16', '23', '19', '4837', '3923', '0'), +('16', '23', '19', '68239', '3223', '0'), +('16', '23', '19', '2337', '1757', '0'), +('16', '23', '19', '3312', '1392', '0'), +('16', '23', '13', '5622', '30149', '0'), +('16', '23', '13', '11609', '30048', '0'), +('16', '23', '13', '5412', '27775', '0'), +('16', '23', '13', '5401', '26280', '0'), +('16', '23', '14', '11551', '12679', '0'), +('16', '23', '14', '14762', '2181', '0'), +('16', '23', '14', '6359', '1753', '0'), +('16', '23', '14', '9690', '1500', '0'), +('16', '23', '11', '14762', '2181', '0'), +('16', '23', '11', '20677', '1800', '0'), +('16', '23', '11', '9246', '604', '0'), +('16', '23', '11', '13748', '454', '0'), +('16', '24', '22', '10323', '0', '0'), +('16', '24', '22', '10664', '0', '0'), +('16', '24', '22', '9246', '0', '0'), +('16', '24', '22', '21509', '0', '0'), +('16', '24', '1', '14701', '3802', '0'), +('16', '24', '1', '14702', '2500', '0'), +('16', '24', '1', '10165', '1683', '0'), +('16', '24', '1', '30361', '1140', '0'), +('16', '24', '2', '1519', '3207', '0'), +('16', '24', '2', '4620', '3160', '0'), +('16', '24', '2', '4831', '3020', '0'), +('16', '24', '2', '10142', '3012', '0'), +('16', '24', '3', '10144', '1304', '0'), +('16', '24', '3', '14706', '990', '0'), +('16', '24', '3', '14705', '990', '0'), +('16', '24', '3', '3314', '785', '0'), +('16', '24', '5', '14703', '5500', '0'), +('16', '24', '5', '14700', '3453', '0'), +('16', '24', '5', '10055', '3255', '0'), +('16', '24', '5', '68291', '2315', '0'), +('16', '24', '8', '11621', '14171', '0'), +('16', '24', '8', '1409', '6312', '0'), +('16', '24', '8', '11551', '5129', '0'), +('16', '24', '8', '2400', '2808', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '24', '6', '1557', '6760', '0'), +('16', '24', '6', '4302', '2324', '0'), +('16', '24', '6', '25062', '1817', '0'), +('16', '24', '6', '4165', '1812', '0'), +('16', '24', '17', '4832', '7858', '0'), +('16', '24', '17', '4309', '5576', '0'), +('16', '24', '17', '11623', '4979', '0'), +('16', '24', '17', '3307', '3432', '0'), +('16', '24', '7', '4833', '3567', '0'), +('16', '24', '7', '4343', '2921', '0'), +('16', '24', '7', '71303', '2689', '0'), +('16', '24', '7', '2458', '2406', '0'), +('16', '24', '9', '4834', '2625', '0'), +('16', '24', '9', '12189', '2263', '0'), +('16', '24', '9', '10149', '2255', '0'), +('16', '24', '9', '14650', '1802', '0'), +('16', '24', '15', '10366', '8005', '0'), +('16', '24', '15', '10151', '7200', '0'), +('16', '24', '15', '14679', '6255', '0'), +('16', '24', '15', '14678', '5104', '0'), +('16', '24', '20', '11601', '8670', '0'), +('16', '24', '20', '1365', '4200', '0'), +('16', '24', '20', '2471', '3804', '0'), +('16', '24', '20', '2742', '3213', '0'), +('16', '24', '12', '4835', '7972', '0'), +('16', '24', '12', '20655', '5060', '0'), +('16', '24', '12', '2923', '3404', '0'), +('16', '24', '12', '11624', '3131', '0'), +('16', '24', '18', '4836', '3878', '0'), +('16', '24', '18', '2461', '2557', '0'), +('16', '24', '18', '4346', '2276', '0'), +('16', '24', '18', '4412', '2083', '0'), +('16', '24', '19', '4837', '3923', '0'), +('16', '24', '19', '68239', '3223', '0'), +('16', '24', '19', '2337', '1757', '0'), +('16', '24', '19', '3312', '1392', '0'), +('16', '24', '13', '5622', '30502', '0'), +('16', '24', '13', '11609', '30401', '0'), +('16', '24', '13', '5412', '28078', '0'), +('16', '24', '13', '5401', '26532', '0'), +('16', '24', '14', '11551', '12679', '0'), +('16', '24', '14', '14762', '2181', '0'), +('16', '24', '14', '6359', '1753', '0'), +('16', '24', '14', '9690', '1500', '0'), +('16', '24', '11', '14762', '2181', '0'), +('16', '24', '11', '20677', '1800', '0'), +('16', '24', '11', '9246', '604', '0'), +('16', '24', '11', '13748', '454', '0'), +('16', '25', '22', '10323', '0', '0'), +('16', '25', '22', '10664', '0', '0'), +('16', '25', '22', '9246', '0', '0'), +('16', '25', '22', '21509', '0', '0'), +('16', '25', '1', '14701', '3802', '0'), +('16', '25', '1', '14702', '2500', '0'), +('16', '25', '1', '10165', '1683', '0'), +('16', '25', '1', '30361', '1140', '0'), +('16', '25', '2', '1519', '3207', '0'), +('16', '25', '2', '4620', '3198', '0'), +('16', '25', '2', '4831', '3020', '0'), +('16', '25', '2', '10142', '3012', '0'), +('16', '25', '3', '10144', '1304', '0'), +('16', '25', '3', '14706', '990', '0'), +('16', '25', '3', '14705', '990', '0'), +('16', '25', '3', '3314', '785', '0'), +('16', '25', '5', '14703', '5500', '0'), +('16', '25', '5', '14700', '3453', '0'), +('16', '25', '5', '10055', '3255', '0'), +('16', '25', '5', '68291', '2411', '0'), +('16', '25', '8', '11621', '14171', '0'), +('16', '25', '8', '1409', '6312', '0'), +('16', '25', '8', '11551', '5129', '0'), +('16', '25', '8', '2400', '2808', '0'), +('16', '25', '6', '1557', '6760', '0'), +('16', '25', '6', '4302', '2357', '0'), +('16', '25', '6', '25062', '1817', '0'), +('16', '25', '6', '4165', '1812', '0'), +('16', '25', '17', '4832', '7940', '0'), +('16', '25', '17', '4309', '5576', '0'), +('16', '25', '17', '11623', '4979', '0'), +('16', '25', '17', '3307', '3454', '0'), +('16', '25', '7', '4833', '3567', '0'), +('16', '25', '7', '4343', '2975', '0'), +('16', '25', '7', '71303', '2689', '0'), +('16', '25', '7', '2458', '2406', '0'), +('16', '25', '9', '4834', '2625', '0'), +('16', '25', '9', '12189', '2263', '0'), +('16', '25', '9', '10149', '2255', '0'), +('16', '25', '9', '4311', '1808', '0'), +('16', '25', '15', '10366', '8005', '0'), +('16', '25', '15', '10151', '7200', '0'), +('16', '25', '15', '14679', '6255', '0'), +('16', '25', '15', '14678', '5104', '0'), +('16', '25', '20', '11601', '8725', '0'), +('16', '25', '20', '1365', '4200', '0'), +('16', '25', '20', '2471', '3804', '0'), +('16', '25', '20', '2742', '3268', '0'), +('16', '25', '12', '4835', '7999', '0'), +('16', '25', '12', '20655', '5071', '0'), +('16', '25', '12', '2923', '3404', '0'), +('16', '25', '12', '11624', '3169', '0'), +('16', '25', '18', '4836', '3905', '0'), +('16', '25', '18', '2461', '2557', '0'), +('16', '25', '18', '4346', '2276', '0'), +('16', '25', '18', '4412', '2083', '0'), +('16', '25', '19', '4837', '3923', '0'), +('16', '25', '19', '68239', '3223', '0'), +('16', '25', '19', '2337', '1757', '0'), +('16', '25', '19', '3312', '1392', '0'), +('16', '25', '13', '5622', '30805', '0'), +('16', '25', '13', '11609', '30704', '0'), +('16', '25', '13', '5412', '28381', '0'), +('16', '25', '13', '5401', '26785', '0'), +('16', '25', '14', '11551', '12679', '0'), +('16', '25', '14', '14762', '2181', '0'), +('16', '25', '14', '6359', '1753', '0'), +('16', '25', '14', '9690', '1500', '0'), +('16', '25', '11', '14762', '2181', '0'), +('16', '25', '11', '20677', '1800', '0'), +('16', '25', '11', '9246', '604', '0'), +('16', '25', '11', '13748', '454', '0'), +('16', '26', '22', '10323', '0', '0'), +('16', '26', '22', '10664', '0', '0'), +('16', '26', '22', '9246', '0', '0'), +('16', '26', '22', '21509', '0', '0'), +('16', '26', '1', '14701', '3802', '0'), +('16', '26', '1', '14702', '2500', '0'), +('16', '26', '1', '10165', '1683', '0'), +('16', '26', '1', '30361', '1140', '0'), +('16', '26', '2', '4620', '3231', '0'), +('16', '26', '2', '1519', '3207', '0'), +('16', '26', '2', '4831', '3020', '0'), +('16', '26', '2', '10142', '3012', '0'), +('16', '26', '3', '10144', '1304', '0'), +('16', '26', '3', '14706', '990', '0'), +('16', '26', '3', '14705', '990', '0'), +('16', '26', '3', '3314', '785', '0'), +('16', '26', '5', '14703', '5500', '0'), +('16', '26', '5', '14700', '3453', '0'), +('16', '26', '5', '10055', '3255', '0'), +('16', '26', '5', '68291', '2411', '0'), +('16', '26', '8', '11621', '14171', '0'), +('16', '26', '8', '1409', '6312', '0'), +('16', '26', '8', '11551', '5129', '0'), +('16', '26', '8', '2400', '2808', '0'), +('16', '26', '6', '1557', '6760', '0'), +('16', '26', '6', '4302', '2386', '0'), +('16', '26', '6', '25062', '1817', '0'), +('16', '26', '6', '4165', '1812', '0'), +('16', '26', '17', '4832', '8012', '0'), +('16', '26', '17', '4309', '5576', '0'), +('16', '26', '17', '11623', '4979', '0'), +('16', '26', '17', '3307', '3473', '0'), +('16', '26', '7', '4833', '3567', '0'), +('16', '26', '7', '4343', '3024', '0'), +('16', '26', '7', '71303', '2689', '0'), +('16', '26', '7', '2458', '2406', '0'), +('16', '26', '9', '4834', '2625', '0'), +('16', '26', '9', '12189', '2263', '0'), +('16', '26', '9', '10149', '2255', '0'), +('16', '26', '9', '4311', '1842', '0'), +('16', '26', '15', '10366', '8005', '0'), +('16', '26', '15', '10151', '7200', '0'), +('16', '26', '15', '14679', '6255', '0'), +('16', '26', '15', '14678', '5104', '0'), +('16', '26', '20', '11601', '8773', '0'), +('16', '26', '20', '1365', '4200', '0'), +('16', '26', '20', '2471', '3804', '0'), +('16', '26', '20', '2742', '3316', '0'), +('16', '26', '12', '4835', '8023', '0'), +('16', '26', '12', '20655', '5081', '0'), +('16', '26', '12', '2923', '3404', '0'), +('16', '26', '12', '11624', '3203', '0'), +('16', '26', '18', '4836', '3929', '0'), +('16', '26', '18', '2461', '2557', '0'), +('16', '26', '18', '4346', '2276', '0'), +('16', '26', '18', '4412', '2083', '0'), +('16', '26', '19', '4837', '3923', '0'), +('16', '26', '19', '68239', '3223', '0'), +('16', '26', '19', '2337', '1757', '0'), +('16', '26', '19', '3312', '1392', '0'), +('16', '26', '13', '5622', '31159', '0'), +('16', '26', '13', '11609', '31058', '0'), +('16', '26', '13', '5412', '28684', '0'), +('16', '26', '13', '5401', '27037', '0'), +('16', '26', '14', '11551', '12679', '0'), +('16', '26', '14', '14762', '2181', '0'), +('16', '26', '14', '6359', '1753', '0'), +('16', '26', '14', '9690', '1500', '0'), +('16', '26', '11', '14762', '2181', '0'), +('16', '26', '11', '20677', '1800', '0'), +('16', '26', '11', '9246', '604', '0'), +('16', '26', '11', '13748', '454', '0'), +('16', '27', '22', '10323', '0', '0'), +('16', '27', '22', '10664', '0', '0'), +('16', '27', '22', '9246', '0', '0'), +('16', '27', '22', '21509', '0', '0'), +('16', '27', '1', '14701', '3802', '0'), +('16', '27', '1', '14702', '2500', '0'), +('16', '27', '1', '10165', '1683', '0'), +('16', '27', '1', '30361', '1140', '0'), +('16', '27', '2', '4620', '3265', '0'), +('16', '27', '2', '1519', '3207', '0'), +('16', '27', '2', '4831', '3020', '0'), +('16', '27', '2', '10142', '3012', '0'), +('16', '27', '3', '10144', '1304', '0'), +('16', '27', '3', '14706', '990', '0'), +('16', '27', '3', '14705', '990', '0'), +('16', '27', '3', '3314', '785', '0'), +('16', '27', '5', '14703', '5500', '0'), +('16', '27', '5', '14700', '3453', '0'), +('16', '27', '5', '10055', '3255', '0'), +('16', '27', '5', '68291', '2411', '0'), +('16', '27', '8', '11621', '14171', '0'), +('16', '27', '8', '1409', '6312', '0'), +('16', '27', '8', '11551', '5129', '0'), +('16', '27', '8', '2400', '2808', '0'), +('16', '27', '6', '1557', '6760', '0'), +('16', '27', '6', '4302', '2415', '0'), +('16', '27', '6', '25062', '1817', '0'), +('16', '27', '6', '4165', '1812', '0'), +('16', '27', '17', '4832', '8085', '0'), +('16', '27', '17', '4309', '5576', '0'), +('16', '27', '17', '11623', '4979', '0'), +('16', '27', '17', '3307', '3492', '0'), +('16', '27', '7', '4833', '3567', '0'), +('16', '27', '7', '4343', '3072', '0'), +('16', '27', '7', '71303', '2689', '0'), +('16', '27', '7', '2458', '2406', '0'), +('16', '27', '9', '4834', '2625', '0'), +('16', '27', '9', '12189', '2263', '0'), +('16', '27', '9', '10149', '2255', '0'), +('16', '27', '9', '4311', '1876', '0'), +('16', '27', '15', '10366', '8005', '0'), +('16', '27', '15', '10151', '7200', '0'), +('16', '27', '15', '14679', '6255', '0'), +('16', '27', '15', '14678', '5104', '0'), +('16', '27', '20', '11601', '8821', '0'), +('16', '27', '20', '1365', '4200', '0'), +('16', '27', '20', '2471', '3804', '0'), +('16', '27', '20', '2742', '3364', '0'), +('16', '27', '12', '4835', '8047', '0'), +('16', '27', '12', '20655', '5090', '0'), +('16', '27', '12', '2923', '3404', '0'), +('16', '27', '12', '11624', '3236', '0'), +('16', '27', '18', '4836', '3953', '0'), +('16', '27', '18', '2461', '2557', '0'), +('16', '27', '18', '4346', '2276', '0'), +('16', '27', '18', '4412', '2083', '0'), +('16', '27', '19', '4837', '3923', '0'), +('16', '27', '19', '68239', '3223', '0'), +('16', '27', '19', '2337', '1757', '0'), +('16', '27', '19', '3312', '1392', '0'), +('16', '27', '13', '5622', '31512', '0'), +('16', '27', '13', '11609', '31411', '0'), +('16', '27', '13', '5412', '28987', '0'), +('16', '27', '13', '5401', '27290', '0'), +('16', '27', '14', '11551', '12679', '0'), +('16', '27', '14', '14762', '2181', '0'), +('16', '27', '14', '6359', '1753', '0'), +('16', '27', '14', '9690', '1500', '0'), +('16', '27', '11', '14762', '2181', '0'), +('16', '27', '11', '20677', '1800', '0'), +('16', '27', '11', '9246', '604', '0'), +('16', '27', '11', '13748', '454', '0'), +('16', '28', '22', '10323', '0', '0'), +('16', '28', '22', '10664', '0', '0'), +('16', '28', '22', '9246', '0', '0'), +('16', '28', '22', '21509', '0', '0'), +('16', '28', '1', '14701', '3802', '0'), +('16', '28', '1', '14702', '2500', '0'), +('16', '28', '1', '10165', '1683', '0'), +('16', '28', '1', '30361', '1140', '0'), +('16', '28', '2', '4620', '3303', '0'), +('16', '28', '2', '1519', '3207', '0'), +('16', '28', '2', '4831', '3020', '0'), +('16', '28', '2', '10142', '3012', '0'), +('16', '28', '3', '10144', '1304', '0'), +('16', '28', '3', '14706', '990', '0'), +('16', '28', '3', '14705', '990', '0'), +('16', '28', '3', '3314', '785', '0'), +('16', '28', '5', '14703', '5500', '0'), +('16', '28', '5', '14700', '3453', '0'), +('16', '28', '5', '10055', '3255', '0'), +('16', '28', '5', '68291', '2411', '0'), +('16', '28', '8', '11621', '14171', '0'), +('16', '28', '8', '1409', '6312', '0'), +('16', '28', '8', '11551', '5129', '0'), +('16', '28', '8', '2400', '2808', '0'), +('16', '28', '6', '1557', '6760', '0'), +('16', '28', '6', '4302', '2447', '0'), +('16', '28', '6', '25062', '1817', '0'), +('16', '28', '6', '4165', '1812', '0'), +('16', '28', '17', '4832', '8166', '0'), +('16', '28', '17', '4309', '5576', '0'), +('16', '28', '17', '11623', '4979', '0'), +('16', '28', '17', '3307', '3514', '0'), +('16', '28', '7', '4833', '3567', '0'), +('16', '28', '7', '4343', '3126', '0'), +('16', '28', '7', '71303', '2689', '0'), +('16', '28', '7', '2458', '2406', '0'), +('16', '28', '9', '4834', '2625', '0'), +('16', '28', '9', '12189', '2263', '0'), +('16', '28', '9', '10149', '2255', '0'), +('16', '28', '9', '4311', '1914', '0'), +('16', '28', '15', '10366', '8005', '0'), +('16', '28', '15', '10151', '7200', '0'), +('16', '28', '15', '14679', '6255', '0'), +('16', '28', '15', '14678', '5104', '0'), +('16', '28', '20', '11601', '8876', '0'), +('16', '28', '20', '1365', '4200', '0'), +('16', '28', '20', '2471', '3804', '0'), +('16', '28', '20', '2742', '3419', '0'), +('16', '28', '12', '4835', '8074', '0'), +('16', '28', '12', '20655', '5101', '0'), +('16', '28', '12', '2923', '3404', '0'), +('16', '28', '12', '11624', '3275', '0'), +('16', '28', '18', '4836', '3980', '0'), +('16', '28', '18', '2461', '2557', '0'), +('16', '28', '18', '4346', '2276', '0'), +('16', '28', '18', '4412', '2083', '0'), +('16', '28', '19', '4837', '3923', '0'), +('16', '28', '19', '68239', '3223', '0'), +('16', '28', '19', '2337', '1757', '0'), +('16', '28', '19', '3312', '1392', '0'), +('16', '28', '13', '5622', '31815', '0'), +('16', '28', '13', '11609', '31714', '0'), +('16', '28', '13', '5412', '29341', '0'), +('16', '28', '13', '5401', '27593', '0'), +('16', '28', '14', '11551', '12679', '0'), +('16', '28', '14', '14762', '2181', '0'), +('16', '28', '14', '6359', '1753', '0'), +('16', '28', '14', '9690', '1500', '0'), +('16', '28', '11', '14762', '2181', '0'), +('16', '28', '11', '20677', '1800', '0'), +('16', '28', '11', '9246', '604', '0'), +('16', '28', '11', '13748', '454', '0'), +('16', '29', '22', '10323', '0', '0'), +('16', '29', '22', '10664', '0', '0'), +('16', '29', '22', '9246', '0', '0'), +('16', '29', '22', '21509', '0', '0'), +('16', '29', '1', '14701', '3802', '0'), +('16', '29', '1', '14702', '2500', '0'), +('16', '29', '1', '10165', '1683', '0'), +('16', '29', '1', '30361', '1140', '0'), +('16', '29', '2', '4620', '3337', '0'), +('16', '29', '2', '1519', '3207', '0'), +('16', '29', '2', '4831', '3020', '0'), +('16', '29', '2', '10142', '3012', '0'), +('16', '29', '3', '10144', '1304', '0'), +('16', '29', '3', '14706', '990', '0'), +('16', '29', '3', '14705', '990', '0'), +('16', '29', '3', '3314', '785', '0'), +('16', '29', '5', '14703', '5500', '0'), +('16', '29', '5', '14700', '3453', '0'), +('16', '29', '5', '10055', '3255', '0'), +('16', '29', '5', '68291', '2411', '0'), +('16', '29', '8', '11621', '14171', '0'), +('16', '29', '8', '1409', '6312', '0'), +('16', '29', '8', '11551', '5129', '0'), +('16', '29', '8', '2400', '2808', '0'), +('16', '29', '6', '1557', '6760', '0'), +('16', '29', '6', '4302', '2476', '0'), +('16', '29', '6', '25062', '1817', '0'), +('16', '29', '6', '4165', '1812', '0'), +('16', '29', '17', '4832', '8239', '0'), +('16', '29', '17', '4309', '5576', '0'), +('16', '29', '17', '11623', '4979', '0'), +('16', '29', '17', '3307', '3533', '0'), +('16', '29', '7', '4833', '3567', '0'), +('16', '29', '7', '4343', '3175', '0'), +('16', '29', '7', '71303', '2689', '0'), +('16', '29', '7', '2458', '2406', '0'), +('16', '29', '9', '4834', '2625', '0'), +('16', '29', '9', '12189', '2263', '0'), +('16', '29', '9', '10149', '2255', '0'), +('16', '29', '9', '4311', '1948', '0'), +('16', '29', '15', '10366', '8005', '0'), +('16', '29', '15', '10151', '7200', '0'), +('16', '29', '15', '14679', '6255', '0'), +('16', '29', '15', '14678', '5104', '0'), +('16', '29', '20', '11601', '8924', '0'), +('16', '29', '20', '1365', '4200', '0'), +('16', '29', '20', '2471', '3804', '0'), +('16', '29', '20', '2742', '3467', '0'), +('16', '29', '12', '4835', '8099', '0'), +('16', '29', '12', '20655', '5111', '0'), +('16', '29', '12', '2923', '3404', '0'), +('16', '29', '12', '11624', '3308', '0'), +('16', '29', '18', '4836', '4005', '0'), +('16', '29', '18', '2461', '2557', '0'), +('16', '29', '18', '4346', '2276', '0'), +('16', '29', '18', '4412', '2083', '0'), +('16', '29', '19', '4837', '3923', '0'), +('16', '29', '19', '68239', '3223', '0'), +('16', '29', '19', '2337', '1757', '0'), +('16', '29', '19', '3312', '1392', '0'), +('16', '29', '13', '5622', '32169', '0'), +('16', '29', '13', '11609', '32068', '0'), +('16', '29', '13', '5412', '29644', '0'), +('16', '29', '13', '5401', '27845', '0'), +('16', '29', '14', '11551', '12679', '0'), +('16', '29', '14', '14762', '2181', '0'), +('16', '29', '14', '6359', '1753', '0'), +('16', '29', '14', '9690', '1500', '0'), +('16', '29', '11', '14762', '2181', '0'), +('16', '29', '11', '20677', '1800', '0'), +('16', '29', '11', '9246', '604', '0'), +('16', '29', '11', '13748', '454', '0'), +('16', '30', '22', '10323', '0', '0'), +('16', '30', '22', '10664', '0', '0'), +('16', '30', '22', '9246', '0', '0'), +('16', '30', '22', '21509', '0', '0'), +('16', '30', '1', '14701', '3802', '0'), +('16', '30', '1', '14702', '2500', '0'), +('16', '30', '1', '10165', '1683', '0'), +('16', '30', '1', '30361', '1140', '0'), +('16', '30', '2', '4620', '3375', '0'), +('16', '30', '2', '1519', '3207', '0'), +('16', '30', '2', '4831', '3020', '0'), +('16', '30', '2', '10142', '3012', '0'), +('16', '30', '3', '10144', '1304', '0'), +('16', '30', '3', '14706', '990', '0'), +('16', '30', '3', '14705', '990', '0'), +('16', '30', '3', '3314', '785', '0'), +('16', '30', '5', '14703', '5500', '0'), +('16', '30', '5', '14700', '3453', '0'), +('16', '30', '5', '10055', '3255', '0'), +('16', '30', '5', '68291', '2411', '0'), +('16', '30', '8', '11621', '14171', '0'), +('16', '30', '8', '1409', '6312', '0'), +('16', '30', '8', '11551', '5129', '0'), +('16', '30', '8', '2400', '2808', '0'), +('16', '30', '6', '1557', '6760', '0'), +('16', '30', '6', '4302', '2509', '0'), +('16', '30', '6', '25062', '1817', '0'), +('16', '30', '6', '4165', '1812', '0'), +('16', '30', '17', '4832', '8320', '0'), +('16', '30', '17', '4309', '5576', '0'), +('16', '30', '17', '11623', '4979', '0'), +('16', '30', '17', '3307', '3555', '0'), +('16', '30', '7', '4833', '3567', '0'), +('16', '30', '7', '4343', '3229', '0'), +('16', '30', '7', '71303', '2689', '0'), +('16', '30', '7', '2458', '2406', '0'), +('16', '30', '9', '4834', '2625', '0'), +('16', '30', '9', '12189', '2263', '0'), +('16', '30', '9', '10149', '2255', '0'), +('16', '30', '9', '4311', '1986', '0'), +('16', '30', '15', '10366', '8005', '0'), +('16', '30', '15', '10151', '7200', '0'), +('16', '30', '15', '14679', '6255', '0'), +('16', '30', '15', '14678', '5104', '0'), +('16', '30', '20', '11601', '8978', '0'), +('16', '30', '20', '1365', '4200', '0'), +('16', '30', '20', '2471', '3804', '0'), +('16', '30', '20', '2742', '3521', '0'), +('16', '30', '12', '4835', '8126', '0'), +('16', '30', '12', '20655', '5122', '0'), +('16', '30', '12', '2923', '3404', '0'), +('16', '30', '12', '11624', '3346', '0'), +('16', '30', '18', '4836', '4032', '0'), +('16', '30', '18', '2461', '2557', '0'), +('16', '30', '18', '4346', '2276', '0'), +('16', '30', '18', '4412', '2083', '0'), +('16', '30', '19', '4837', '3923', '0'), +('16', '30', '19', '68239', '3223', '0'), +('16', '30', '19', '2337', '1757', '0'), +('16', '30', '19', '3312', '1392', '0'), +('16', '30', '13', '5622', '32522', '0'), +('16', '30', '13', '11609', '32421', '0'), +('16', '30', '13', '5412', '29947', '0'), +('16', '30', '13', '5401', '28098', '0'), +('16', '30', '14', '11551', '12679', '0'), +('16', '30', '14', '14762', '2181', '0'), +('16', '30', '14', '6359', '1753', '0'), +('16', '30', '14', '9690', '1500', '0'), +('16', '30', '11', '14762', '2181', '0'), +('16', '30', '11', '20677', '1800', '0'), +('16', '30', '11', '9246', '604', '0'), +('16', '30', '11', '13748', '454', '0'), +('16', '31', '22', '10323', '0', '0'), +('16', '31', '22', '10664', '0', '0'), +('16', '31', '22', '9246', '0', '0'), +('16', '31', '22', '21509', '0', '0'), +('16', '31', '1', '14701', '3802', '0'), +('16', '31', '1', '14702', '2500', '0'), +('16', '31', '1', '10165', '1683', '0'), +('16', '31', '1', '30361', '1140', '0'), +('16', '31', '2', '4620', '3413', '0'), +('16', '31', '2', '1519', '3207', '0'), +('16', '31', '2', '4831', '3020', '0'), +('16', '31', '2', '10142', '3012', '0'), +('16', '31', '3', '10144', '1304', '0'), +('16', '31', '3', '14706', '990', '0'), +('16', '31', '3', '14705', '990', '0'), +('16', '31', '3', '3314', '785', '0'), +('16', '31', '5', '14703', '5500', '0'), +('16', '31', '5', '14700', '3453', '0'), +('16', '31', '5', '10055', '3255', '0'), +('16', '31', '5', '68291', '2411', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '31', '8', '11621', '14171', '0'), +('16', '31', '8', '1409', '6312', '0'), +('16', '31', '8', '11551', '5129', '0'), +('16', '31', '8', '2400', '2808', '0'), +('16', '31', '6', '1557', '6760', '0'), +('16', '31', '6', '4302', '2542', '0'), +('16', '31', '6', '25062', '1817', '0'), +('16', '31', '6', '4165', '1812', '0'), +('16', '31', '17', '4832', '8402', '0'), +('16', '31', '17', '4309', '5576', '0'), +('16', '31', '17', '11623', '4979', '0'), +('16', '31', '17', '3307', '3577', '0'), +('16', '31', '7', '4833', '3567', '0'), +('16', '31', '7', '4343', '3283', '0'), +('16', '31', '7', '71303', '2689', '0'), +('16', '31', '7', '2458', '2406', '0'), +('16', '31', '9', '4834', '2625', '0'), +('16', '31', '9', '12189', '2263', '0'), +('16', '31', '9', '10149', '2255', '0'), +('16', '31', '9', '4311', '2024', '0'), +('16', '31', '15', '10366', '8005', '0'), +('16', '31', '15', '10151', '7200', '0'), +('16', '31', '15', '14679', '6255', '0'), +('16', '31', '15', '14678', '5104', '0'), +('16', '31', '20', '11601', '9033', '0'), +('16', '31', '20', '1365', '4200', '0'), +('16', '31', '20', '2471', '3804', '0'), +('16', '31', '20', '2742', '3576', '0'), +('16', '31', '12', '4835', '8153', '0'), +('16', '31', '12', '20655', '5133', '0'), +('16', '31', '12', '2923', '3404', '0'), +('16', '31', '12', '11624', '3384', '0'), +('16', '31', '18', '4836', '4059', '0'), +('16', '31', '18', '2461', '2557', '0'), +('16', '31', '18', '4346', '2276', '0'), +('16', '31', '18', '4412', '2083', '0'), +('16', '31', '19', '4837', '3923', '0'), +('16', '31', '19', '68239', '3223', '0'), +('16', '31', '19', '2337', '1757', '0'), +('16', '31', '19', '3312', '1392', '0'), +('16', '31', '13', '5622', '32825', '0'), +('16', '31', '13', '11609', '32724', '0'), +('16', '31', '13', '5412', '30250', '0'), +('16', '31', '13', '5401', '28350', '0'), +('16', '31', '14', '11551', '12679', '0'), +('16', '31', '14', '14762', '2181', '0'), +('16', '31', '14', '6359', '1753', '0'), +('16', '31', '14', '9690', '1500', '0'), +('16', '31', '11', '14762', '2181', '0'), +('16', '31', '11', '20677', '1800', '0'), +('16', '31', '11', '9246', '604', '0'), +('16', '31', '11', '13748', '454', '0'), +('16', '32', '22', '10323', '0', '0'), +('16', '32', '22', '10664', '0', '0'), +('16', '32', '22', '9246', '0', '0'), +('16', '32', '22', '21509', '0', '0'), +('16', '32', '1', '14701', '3802', '0'), +('16', '32', '1', '14702', '2500', '0'), +('16', '32', '1', '10165', '1683', '0'), +('16', '32', '1', '30361', '1140', '0'), +('16', '32', '2', '4620', '3447', '0'), +('16', '32', '2', '1519', '3207', '0'), +('16', '32', '2', '4831', '3020', '0'), +('16', '32', '2', '10142', '3012', '0'), +('16', '32', '3', '10144', '1304', '0'), +('16', '32', '3', '14706', '990', '0'), +('16', '32', '3', '14705', '990', '0'), +('16', '32', '3', '3314', '785', '0'), +('16', '32', '5', '14703', '5500', '0'), +('16', '32', '5', '14700', '3453', '0'), +('16', '32', '5', '10055', '3255', '0'), +('16', '32', '5', '68291', '2411', '0'), +('16', '32', '8', '11621', '14171', '0'), +('16', '32', '8', '1409', '6312', '0'), +('16', '32', '8', '11551', '5129', '0'), +('16', '32', '8', '2400', '2808', '0'), +('16', '32', '6', '1557', '6760', '0'), +('16', '32', '6', '4302', '2571', '0'), +('16', '32', '6', '25062', '1817', '0'), +('16', '32', '6', '4165', '1812', '0'), +('16', '32', '17', '4832', '8474', '0'), +('16', '32', '17', '4309', '5576', '0'), +('16', '32', '17', '11623', '4979', '0'), +('16', '32', '17', '3307', '3596', '0'), +('16', '32', '7', '4833', '3567', '0'), +('16', '32', '7', '4343', '3332', '0'), +('16', '32', '7', '71303', '2689', '0'), +('16', '32', '7', '2458', '2406', '0'), +('16', '32', '9', '4834', '2625', '0'), +('16', '32', '9', '12189', '2263', '0'), +('16', '32', '9', '10149', '2255', '0'), +('16', '32', '9', '4311', '2058', '0'), +('16', '32', '15', '10366', '8005', '0'), +('16', '32', '15', '10151', '7200', '0'), +('16', '32', '15', '14679', '6255', '0'), +('16', '32', '15', '14678', '5104', '0'), +('16', '32', '20', '11601', '9081', '0'), +('16', '32', '20', '1365', '4200', '0'), +('16', '32', '20', '2471', '3804', '0'), +('16', '32', '20', '2742', '3624', '0'), +('16', '32', '12', '4835', '8177', '0'), +('16', '32', '12', '20655', '5142', '0'), +('16', '32', '12', '11624', '3418', '0'), +('16', '32', '12', '2923', '3404', '0'), +('16', '32', '18', '4836', '4083', '0'), +('16', '32', '18', '2461', '2557', '0'), +('16', '32', '18', '4346', '2276', '0'), +('16', '32', '18', '4412', '2083', '0'), +('16', '32', '19', '4837', '3923', '0'), +('16', '32', '19', '68239', '3223', '0'), +('16', '32', '19', '2337', '1757', '0'), +('16', '32', '19', '3312', '1392', '0'), +('16', '32', '13', '5622', '33179', '0'), +('16', '32', '13', '11609', '33078', '0'), +('16', '32', '13', '5412', '30553', '0'), +('16', '32', '13', '5401', '28603', '0'), +('16', '32', '14', '11551', '12679', '0'), +('16', '32', '14', '14762', '2181', '0'), +('16', '32', '14', '6359', '1753', '0'), +('16', '32', '14', '13355', '1516', '0'), +('16', '32', '11', '14762', '2181', '0'), +('16', '32', '11', '20677', '1800', '0'), +('16', '32', '11', '9246', '604', '0'), +('16', '32', '11', '13748', '454', '0'), +('16', '33', '22', '10323', '0', '0'), +('16', '33', '22', '10664', '0', '0'), +('16', '33', '22', '9246', '0', '0'), +('16', '33', '22', '21509', '0', '0'), +('16', '33', '1', '14701', '3802', '0'), +('16', '33', '1', '14702', '2500', '0'), +('16', '33', '1', '10165', '1683', '0'), +('16', '33', '1', '30361', '1140', '0'), +('16', '33', '2', '4620', '3485', '0'), +('16', '33', '2', '1519', '3207', '0'), +('16', '33', '2', '4831', '3020', '0'), +('16', '33', '2', '10142', '3012', '0'), +('16', '33', '3', '10144', '1304', '0'), +('16', '33', '3', '14706', '990', '0'), +('16', '33', '3', '14705', '990', '0'), +('16', '33', '3', '3314', '785', '0'), +('16', '33', '5', '14703', '5500', '0'), +('16', '33', '5', '14700', '3453', '0'), +('16', '33', '5', '10055', '3255', '0'), +('16', '33', '5', '68291', '2411', '0'), +('16', '33', '8', '11621', '14171', '0'), +('16', '33', '8', '1409', '6312', '0'), +('16', '33', '8', '11551', '5129', '0'), +('16', '33', '8', '2400', '2808', '0'), +('16', '33', '6', '1557', '6760', '0'), +('16', '33', '6', '4302', '2603', '0'), +('16', '33', '6', '25062', '1817', '0'), +('16', '33', '6', '4165', '1812', '0'), +('16', '33', '17', '4832', '8556', '0'), +('16', '33', '17', '4309', '5576', '0'), +('16', '33', '17', '11623', '4979', '0'), +('16', '33', '17', '3307', '3618', '0'), +('16', '33', '7', '4833', '3567', '0'), +('16', '33', '7', '4343', '3386', '0'), +('16', '33', '7', '71303', '2689', '0'), +('16', '33', '7', '2458', '2406', '0'), +('16', '33', '9', '4834', '2625', '0'), +('16', '33', '9', '12189', '2263', '0'), +('16', '33', '9', '10149', '2255', '0'), +('16', '33', '9', '4311', '2096', '0'), +('16', '33', '15', '10366', '8005', '0'), +('16', '33', '15', '10151', '7200', '0'), +('16', '33', '15', '14679', '6255', '0'), +('16', '33', '15', '14678', '5104', '0'), +('16', '33', '20', '11601', '9135', '0'), +('16', '33', '20', '1365', '4200', '0'), +('16', '33', '20', '2471', '3804', '0'), +('16', '33', '20', '2742', '3678', '0'), +('16', '33', '12', '4835', '8204', '0'), +('16', '33', '12', '20655', '5153', '0'), +('16', '33', '12', '11624', '3456', '0'), +('16', '33', '12', '2923', '3404', '0'), +('16', '33', '18', '4836', '4110', '0'), +('16', '33', '18', '2461', '2557', '0'), +('16', '33', '18', '4346', '2276', '0'), +('16', '33', '18', '4412', '2083', '0'), +('16', '33', '19', '4837', '3923', '0'), +('16', '33', '19', '68239', '3223', '0'), +('16', '33', '19', '2337', '1757', '0'), +('16', '33', '19', '3312', '1392', '0'), +('16', '33', '13', '5622', '33532', '0'), +('16', '33', '13', '11609', '33381', '0'), +('16', '33', '13', '5412', '30856', '0'), +('16', '33', '13', '5401', '28855', '0'), +('16', '33', '14', '11551', '12679', '0'), +('16', '33', '14', '14762', '2181', '0'), +('16', '33', '14', '6359', '1753', '0'), +('16', '33', '14', '13355', '1570', '0'), +('16', '33', '11', '14762', '2181', '0'), +('16', '33', '11', '20677', '1800', '0'), +('16', '33', '11', '9246', '604', '0'), +('16', '33', '11', '13748', '454', '0'), +('16', '34', '22', '10323', '0', '0'), +('16', '34', '22', '10664', '0', '0'), +('16', '34', '22', '9246', '0', '0'), +('16', '34', '22', '21509', '0', '0'), +('16', '34', '1', '14701', '3802', '0'), +('16', '34', '1', '14702', '2500', '0'), +('16', '34', '1', '10165', '1683', '0'), +('16', '34', '1', '30361', '1140', '0'), +('16', '34', '2', '4620', '3523', '0'), +('16', '34', '2', '1519', '3207', '0'), +('16', '34', '2', '4831', '3020', '0'), +('16', '34', '2', '10142', '3012', '0'), +('16', '34', '3', '10144', '1304', '0'), +('16', '34', '3', '14706', '990', '0'), +('16', '34', '3', '14705', '990', '0'), +('16', '34', '3', '3314', '785', '0'), +('16', '34', '5', '14703', '5500', '0'), +('16', '34', '5', '14700', '3453', '0'), +('16', '34', '5', '10055', '3255', '0'), +('16', '34', '5', '68291', '2411', '0'), +('16', '34', '8', '11621', '14171', '0'), +('16', '34', '8', '1409', '6312', '0'), +('16', '34', '8', '11551', '5129', '0'), +('16', '34', '8', '2400', '2808', '0'), +('16', '34', '6', '1557', '6760', '0'), +('16', '34', '6', '4302', '2636', '0'), +('16', '34', '6', '25062', '1817', '0'), +('16', '34', '6', '4165', '1812', '0'), +('16', '34', '17', '4832', '8637', '0'), +('16', '34', '17', '4309', '5576', '0'), +('16', '34', '17', '11623', '4979', '0'), +('16', '34', '17', '3307', '3640', '0'), +('16', '34', '7', '4833', '3567', '0'), +('16', '34', '7', '4343', '3440', '0'), +('16', '34', '7', '71303', '2689', '0'), +('16', '34', '7', '2458', '2406', '0'), +('16', '34', '9', '4834', '2625', '0'), +('16', '34', '9', '12189', '2263', '0'), +('16', '34', '9', '10149', '2255', '0'), +('16', '34', '9', '4311', '2134', '0'), +('16', '34', '15', '10366', '8005', '0'), +('16', '34', '15', '10151', '7200', '0'), +('16', '34', '15', '14679', '6255', '0'), +('16', '34', '15', '14678', '5104', '0'), +('16', '34', '20', '11601', '9190', '0'), +('16', '34', '20', '1365', '4200', '0'), +('16', '34', '20', '2471', '3804', '0'), +('16', '34', '20', '2742', '3733', '0'), +('16', '34', '12', '4835', '8231', '0'), +('16', '34', '12', '20655', '5164', '0'), +('16', '34', '12', '11624', '3494', '0'), +('16', '34', '12', '2923', '3404', '0'), +('16', '34', '18', '4836', '4137', '0'), +('16', '34', '18', '2461', '2557', '0'), +('16', '34', '18', '4346', '2276', '0'), +('16', '34', '18', '4412', '2083', '0'), +('16', '34', '19', '4837', '3923', '0'), +('16', '34', '19', '68239', '3223', '0'), +('16', '34', '19', '2337', '1757', '0'), +('16', '34', '19', '3312', '1392', '0'), +('16', '34', '13', '5622', '33835', '0'), +('16', '34', '13', '11609', '33734', '0'), +('16', '34', '13', '5412', '31159', '0'), +('16', '34', '13', '45120', '29327', '0'), +('16', '34', '14', '11551', '12679', '0'), +('16', '34', '14', '14762', '2181', '0'), +('16', '34', '14', '6359', '1753', '0'), +('16', '34', '14', '13355', '1625', '0'), +('16', '34', '11', '14762', '2181', '0'), +('16', '34', '11', '20677', '1800', '0'), +('16', '34', '11', '9246', '604', '0'), +('16', '34', '11', '13748', '454', '0'), +('16', '35', '22', '10323', '0', '0'), +('16', '35', '22', '10664', '0', '0'), +('16', '35', '22', '9246', '0', '0'), +('16', '35', '22', '21509', '0', '0'), +('16', '35', '1', '14701', '3802', '0'), +('16', '35', '1', '14702', '2500', '0'), +('16', '35', '1', '10165', '1683', '0'), +('16', '35', '1', '30361', '1140', '0'), +('16', '35', '2', '4620', '3561', '0'), +('16', '35', '2', '1519', '3207', '0'), +('16', '35', '2', '4831', '3020', '0'), +('16', '35', '2', '10142', '3012', '0'), +('16', '35', '3', '10144', '1304', '0'), +('16', '35', '3', '14706', '990', '0'), +('16', '35', '3', '14705', '990', '0'), +('16', '35', '3', '3314', '785', '0'), +('16', '35', '5', '14703', '5500', '0'), +('16', '35', '5', '14700', '3453', '0'), +('16', '35', '5', '10055', '3255', '0'), +('16', '35', '5', '68291', '2411', '0'), +('16', '35', '8', '11621', '14171', '0'), +('16', '35', '8', '1409', '6312', '0'), +('16', '35', '8', '11551', '5129', '0'), +('16', '35', '8', '2400', '2808', '0'), +('16', '35', '6', '1557', '6760', '0'), +('16', '35', '6', '4302', '2668', '0'), +('16', '35', '6', '25062', '1817', '0'), +('16', '35', '6', '4165', '1812', '0'), +('16', '35', '17', '4832', '8719', '0'), +('16', '35', '17', '4309', '5576', '0'), +('16', '35', '17', '11623', '4979', '0'), +('16', '35', '17', '3307', '3661', '0'), +('16', '35', '7', '4833', '3567', '0'), +('16', '35', '7', '4343', '3495', '0'), +('16', '35', '7', '71303', '2689', '0'), +('16', '35', '7', '2458', '2406', '0'), +('16', '35', '9', '4834', '2625', '0'), +('16', '35', '9', '12189', '2263', '0'), +('16', '35', '9', '10149', '2255', '0'), +('16', '35', '9', '4311', '2172', '0'), +('16', '35', '15', '10366', '8005', '0'), +('16', '35', '15', '10151', '7200', '0'), +('16', '35', '15', '14679', '6255', '0'), +('16', '35', '15', '14678', '5104', '0'), +('16', '35', '20', '11601', '9244', '0'), +('16', '35', '20', '1365', '4200', '0'), +('16', '35', '20', '2471', '3804', '0'), +('16', '35', '20', '2742', '3787', '0'), +('16', '35', '12', '4835', '8259', '0'), +('16', '35', '12', '20655', '5175', '0'), +('16', '35', '12', '11624', '3532', '0'), +('16', '35', '12', '2923', '3404', '0'), +('16', '35', '18', '4836', '4165', '0'), +('16', '35', '18', '2461', '2557', '0'), +('16', '35', '18', '4346', '2276', '0'), +('16', '35', '18', '4412', '2083', '0'), +('16', '35', '19', '4837', '3923', '0'), +('16', '35', '19', '68239', '3223', '0'), +('16', '35', '19', '2337', '1757', '0'), +('16', '35', '19', '3312', '1392', '0'), +('16', '35', '13', '5622', '34189', '0'), +('16', '35', '13', '11609', '34088', '0'), +('16', '35', '13', '5412', '31462', '0'), +('16', '35', '13', '45120', '30593', '0'), +('16', '35', '14', '11551', '12679', '0'), +('16', '35', '14', '14762', '2181', '0'), +('16', '35', '14', '6359', '1753', '0'), +('16', '35', '14', '13355', '1679', '0'), +('16', '35', '11', '14762', '2181', '0'), +('16', '35', '11', '20677', '1800', '0'), +('16', '35', '11', '9246', '604', '0'), +('16', '35', '11', '13748', '454', '0'), +('16', '36', '22', '10323', '0', '0'), +('16', '36', '22', '10664', '0', '0'), +('16', '36', '22', '9246', '0', '0'), +('16', '36', '22', '21509', '0', '0'), +('16', '36', '1', '14701', '3802', '0'), +('16', '36', '1', '14702', '2500', '0'), +('16', '36', '1', '10165', '1683', '0'), +('16', '36', '1', '30361', '1140', '0'), +('16', '36', '2', '4620', '3599', '0'), +('16', '36', '2', '1519', '3207', '0'), +('16', '36', '2', '4831', '3020', '0'), +('16', '36', '2', '10142', '3012', '0'), +('16', '36', '3', '10144', '1304', '0'), +('16', '36', '3', '14706', '990', '0'), +('16', '36', '3', '14705', '990', '0'), +('16', '36', '3', '3314', '785', '0'), +('16', '36', '5', '14703', '5500', '0'), +('16', '36', '5', '14700', '3453', '0'), +('16', '36', '5', '10055', '3255', '0'), +('16', '36', '5', '68291', '2411', '0'), +('16', '36', '8', '11621', '14171', '0'), +('16', '36', '8', '1409', '6312', '0'), +('16', '36', '8', '11551', '5129', '0'), +('16', '36', '8', '2400', '2808', '0'), +('16', '36', '6', '1557', '6760', '0'), +('16', '36', '6', '4302', '2701', '0'), +('16', '36', '6', '25062', '1817', '0'), +('16', '36', '6', '4165', '1812', '0'), +('16', '36', '17', '4832', '8800', '0'), +('16', '36', '17', '4309', '5576', '0'), +('16', '36', '17', '11623', '4979', '0'), +('16', '36', '17', '3307', '3683', '0'), +('16', '36', '7', '4833', '3567', '0'), +('16', '36', '7', '4343', '3549', '0'), +('16', '36', '7', '71303', '2689', '0'), +('16', '36', '7', '2458', '2406', '0'), +('16', '36', '9', '4834', '2625', '0'), +('16', '36', '9', '12189', '2263', '0'), +('16', '36', '9', '10149', '2255', '0'), +('16', '36', '9', '4311', '2210', '0'), +('16', '36', '15', '10366', '8005', '0'), +('16', '36', '15', '10151', '7200', '0'), +('16', '36', '15', '14679', '6255', '0'), +('16', '36', '15', '14678', '5104', '0'), +('16', '36', '20', '11601', '9299', '0'), +('16', '36', '20', '1365', '4200', '0'), +('16', '36', '20', '2742', '3841', '0'), +('16', '36', '20', '2471', '3804', '0'), +('16', '36', '12', '4835', '8286', '0'), +('16', '36', '12', '20655', '5186', '0'), +('16', '36', '12', '11624', '3570', '0'), +('16', '36', '12', '2923', '3404', '0'), +('16', '36', '18', '4836', '4192', '0'), +('16', '36', '18', '2461', '2557', '0'), +('16', '36', '18', '4346', '2276', '0'), +('16', '36', '18', '4412', '2083', '0'), +('16', '36', '19', '4837', '3923', '0'), +('16', '36', '19', '68239', '3223', '0'), +('16', '36', '19', '2337', '1757', '0'), +('16', '36', '19', '3312', '1392', '0'), +('16', '36', '13', '5622', '34542', '0'), +('16', '36', '13', '11609', '34391', '0'), +('16', '36', '13', '5412', '31815', '0'), +('16', '36', '13', '45120', '31608', '0'), +('16', '36', '14', '11551', '12679', '0'), +('16', '36', '14', '14762', '2181', '0'), +('16', '36', '14', '6359', '1753', '0'), +('16', '36', '14', '13355', '1733', '0'), +('16', '36', '11', '14762', '2181', '0'), +('16', '36', '11', '20677', '1800', '0'), +('16', '36', '11', '9246', '604', '0'), +('16', '36', '11', '13748', '454', '0'), +('16', '37', '22', '10323', '0', '0'), +('16', '37', '22', '10664', '0', '0'), +('16', '37', '22', '9246', '0', '0'), +('16', '37', '22', '21509', '0', '0'), +('16', '37', '1', '14701', '3802', '0'), +('16', '37', '1', '14702', '2500', '0'), +('16', '37', '1', '10165', '1683', '0'), +('16', '37', '1', '30361', '1140', '0'), +('16', '37', '2', '4620', '3637', '0'), +('16', '37', '2', '1519', '3207', '0'), +('16', '37', '2', '4831', '3020', '0'), +('16', '37', '2', '10142', '3012', '0'), +('16', '37', '3', '10144', '1304', '0'), +('16', '37', '3', '14706', '990', '0'), +('16', '37', '3', '14705', '990', '0'), +('16', '37', '3', '3314', '785', '0'), +('16', '37', '5', '14703', '5500', '0'), +('16', '37', '5', '14700', '3453', '0'), +('16', '37', '5', '10055', '3255', '0'), +('16', '37', '5', '68291', '2411', '0'), +('16', '37', '8', '11621', '14171', '0'), +('16', '37', '8', '1409', '6312', '0'), +('16', '37', '8', '11551', '5129', '0'), +('16', '37', '8', '2400', '2808', '0'), +('16', '37', '6', '1557', '6760', '0'), +('16', '37', '6', '4302', '2734', '0'), +('16', '37', '6', '25062', '1817', '0'), +('16', '37', '6', '4165', '1812', '0'), +('16', '37', '17', '4832', '8882', '0'), +('16', '37', '17', '4309', '5576', '0'), +('16', '37', '17', '11623', '4979', '0'), +('16', '37', '17', '3307', '3705', '0'), +('16', '37', '7', '4343', '3603', '0'), +('16', '37', '7', '4833', '3567', '0'), +('16', '37', '7', '71303', '2689', '0'), +('16', '37', '7', '2458', '2406', '0'), +('16', '37', '9', '4834', '2625', '0'), +('16', '37', '9', '12189', '2263', '0'), +('16', '37', '9', '10149', '2255', '0'), +('16', '37', '9', '4311', '2248', '0'), +('16', '37', '15', '10366', '8005', '0'), +('16', '37', '15', '10151', '7200', '0'), +('16', '37', '15', '14679', '6255', '0'), +('16', '37', '15', '14678', '5104', '0'), +('16', '37', '20', '11601', '9353', '0'), +('16', '37', '20', '1365', '4200', '0'), +('16', '37', '20', '2742', '3896', '0'), +('16', '37', '20', '2471', '3804', '0'), +('16', '37', '12', '4835', '8313', '0'), +('16', '37', '12', '20655', '5197', '0'), +('16', '37', '12', '11624', '3609', '0'), +('16', '37', '12', '2923', '3404', '0'), +('16', '37', '18', '4836', '4219', '0'), +('16', '37', '18', '2461', '2557', '0'), +('16', '37', '18', '4346', '2276', '0'), +('16', '37', '18', '4412', '2083', '0'), +('16', '37', '19', '4837', '3923', '0'), +('16', '37', '19', '68239', '3223', '0'), +('16', '37', '19', '2337', '1757', '0'), +('16', '37', '19', '3312', '1392', '0'), +('16', '37', '13', '5622', '34845', '0'), +('16', '37', '13', '11609', '34744', '0'), +('16', '37', '13', '45120', '33027', '0'), +('16', '37', '13', '5412', '32118', '0'), +('16', '37', '14', '11551', '12679', '0'), +('16', '37', '14', '14762', '2181', '0'), +('16', '37', '14', '13355', '1788', '0'), +('16', '37', '14', '6359', '1753', '0'), +('16', '37', '11', '14762', '2181', '0'), +('16', '37', '11', '20677', '1800', '0'), +('16', '37', '11', '9246', '604', '0'), +('16', '37', '11', '13748', '454', '0'), +('16', '38', '22', '10323', '0', '0'), +('16', '38', '22', '10664', '0', '0'), +('16', '38', '22', '9246', '0', '0'), +('16', '38', '22', '21509', '0', '0'), +('16', '38', '1', '14701', '3802', '0'), +('16', '38', '1', '14702', '2500', '0'), +('16', '38', '1', '10165', '1683', '0'), +('16', '38', '1', '30361', '1140', '0'), +('16', '38', '2', '4620', '3675', '0'), +('16', '38', '2', '1519', '3207', '0'), +('16', '38', '2', '4831', '3020', '0'), +('16', '38', '2', '10142', '3012', '0'), +('16', '38', '3', '10144', '1304', '0'), +('16', '38', '3', '14706', '990', '0'), +('16', '38', '3', '14705', '990', '0'), +('16', '38', '3', '3314', '785', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '38', '5', '14703', '5500', '0'), +('16', '38', '5', '14700', '3453', '0'), +('16', '38', '5', '10055', '3255', '0'), +('16', '38', '5', '68291', '2411', '0'), +('16', '38', '8', '11621', '14171', '0'), +('16', '38', '8', '1409', '6312', '0'), +('16', '38', '8', '11551', '5129', '0'), +('16', '38', '8', '2400', '2808', '0'), +('16', '38', '6', '1557', '6760', '0'), +('16', '38', '6', '4302', '2766', '0'), +('16', '38', '6', '25062', '1817', '0'), +('16', '38', '6', '4165', '1812', '0'), +('16', '38', '17', '4832', '8963', '0'), +('16', '38', '17', '4309', '5576', '0'), +('16', '38', '17', '11623', '4979', '0'), +('16', '38', '17', '3307', '3727', '0'), +('16', '38', '7', '4343', '3658', '0'), +('16', '38', '7', '4833', '3567', '0'), +('16', '38', '7', '71303', '2689', '0'), +('16', '38', '7', '2458', '2406', '0'), +('16', '38', '9', '4834', '2625', '0'), +('16', '38', '9', '4311', '2286', '0'), +('16', '38', '9', '12189', '2263', '0'), +('16', '38', '9', '10149', '2255', '0'), +('16', '38', '15', '10366', '8005', '0'), +('16', '38', '15', '10151', '7200', '0'), +('16', '38', '15', '14679', '6255', '0'), +('16', '38', '15', '14678', '5104', '0'), +('16', '38', '20', '11601', '9407', '0'), +('16', '38', '20', '1365', '4200', '0'), +('16', '38', '20', '2742', '3950', '0'), +('16', '38', '20', '2471', '3804', '0'), +('16', '38', '12', '4835', '8340', '0'), +('16', '38', '12', '20655', '5208', '0'), +('16', '38', '12', '11624', '3647', '0'), +('16', '38', '12', '2923', '3404', '0'), +('16', '38', '18', '4836', '4246', '0'), +('16', '38', '18', '2461', '2557', '0'), +('16', '38', '18', '4346', '2276', '0'), +('16', '38', '18', '4412', '2083', '0'), +('16', '38', '19', '4837', '3923', '0'), +('16', '38', '19', '68239', '3223', '0'), +('16', '38', '19', '2337', '1757', '0'), +('16', '38', '19', '3312', '1392', '0'), +('16', '38', '13', '5622', '35199', '0'), +('16', '38', '13', '11609', '35098', '0'), +('16', '38', '13', '45120', '34397', '0'), +('16', '38', '13', '5412', '32421', '0'), +('16', '38', '14', '11551', '12679', '0'), +('16', '38', '14', '14762', '2181', '0'), +('16', '38', '14', '13355', '1842', '0'), +('16', '38', '14', '6359', '1753', '0'), +('16', '38', '11', '14762', '2181', '0'), +('16', '38', '11', '20677', '1800', '0'), +('16', '38', '11', '9246', '604', '0'), +('16', '38', '11', '13748', '454', '0'), +('16', '39', '22', '10323', '0', '0'), +('16', '39', '22', '10664', '0', '0'), +('16', '39', '22', '9246', '0', '0'), +('16', '39', '22', '21509', '0', '0'), +('16', '39', '1', '14701', '3802', '0'), +('16', '39', '1', '14702', '2500', '0'), +('16', '39', '1', '10165', '1683', '0'), +('16', '39', '1', '30361', '1140', '0'), +('16', '39', '2', '4620', '3713', '0'), +('16', '39', '2', '1519', '3207', '0'), +('16', '39', '2', '4831', '3020', '0'), +('16', '39', '2', '10142', '3012', '0'), +('16', '39', '3', '10144', '1304', '0'), +('16', '39', '3', '14706', '990', '0'), +('16', '39', '3', '14705', '990', '0'), +('16', '39', '3', '3314', '785', '0'), +('16', '39', '5', '14703', '5500', '0'), +('16', '39', '5', '14700', '3453', '0'), +('16', '39', '5', '10055', '3255', '0'), +('16', '39', '5', '68291', '2411', '0'), +('16', '39', '8', '11621', '14171', '0'), +('16', '39', '8', '1409', '6312', '0'), +('16', '39', '8', '11551', '5129', '0'), +('16', '39', '8', '2400', '2808', '0'), +('16', '39', '6', '1557', '6760', '0'), +('16', '39', '6', '4302', '2799', '0'), +('16', '39', '6', '25062', '1817', '0'), +('16', '39', '6', '4165', '1812', '0'), +('16', '39', '17', '4832', '9045', '0'), +('16', '39', '17', '4309', '5576', '0'), +('16', '39', '17', '11623', '4979', '0'), +('16', '39', '17', '3307', '3748', '0'), +('16', '39', '7', '4343', '3712', '0'), +('16', '39', '7', '4833', '3567', '0'), +('16', '39', '7', '71303', '2689', '0'), +('16', '39', '7', '2458', '2406', '0'), +('16', '39', '9', '4834', '2625', '0'), +('16', '39', '9', '4311', '2324', '0'), +('16', '39', '9', '12189', '2263', '0'), +('16', '39', '9', '10149', '2255', '0'), +('16', '39', '15', '10366', '8005', '0'), +('16', '39', '15', '10151', '7200', '0'), +('16', '39', '15', '14679', '6255', '0'), +('16', '39', '15', '14678', '5104', '0'), +('16', '39', '20', '11601', '9462', '0'), +('16', '39', '20', '1365', '4200', '0'), +('16', '39', '20', '2742', '4005', '0'), +('16', '39', '20', '2471', '3804', '0'), +('16', '39', '12', '4835', '8367', '0'), +('16', '39', '12', '20655', '5219', '0'), +('16', '39', '12', '11624', '3685', '0'), +('16', '39', '12', '2923', '3404', '0'), +('16', '39', '18', '4836', '4273', '0'), +('16', '39', '18', '2461', '2557', '0'), +('16', '39', '18', '4346', '2276', '0'), +('16', '39', '18', '4412', '2083', '0'), +('16', '39', '19', '4837', '3923', '0'), +('16', '39', '19', '68239', '3223', '0'), +('16', '39', '19', '2337', '1757', '0'), +('16', '39', '19', '3312', '1392', '0'), +('16', '39', '13', '5622', '35552', '0'), +('16', '39', '13', '45120', '35465', '0'), +('16', '39', '13', '11609', '35401', '0'), +('16', '39', '13', '5412', '32724', '0'), +('16', '39', '14', '11551', '12679', '0'), +('16', '39', '14', '14762', '2181', '0'), +('16', '39', '14', '13355', '1897', '0'), +('16', '39', '14', '6359', '1753', '0'), +('16', '39', '11', '14762', '2181', '0'), +('16', '39', '11', '20677', '1800', '0'), +('16', '39', '11', '9246', '604', '0'), +('16', '39', '11', '13748', '454', '0'), +('16', '40', '22', '10323', '0', '0'), +('16', '40', '22', '10664', '0', '0'), +('16', '40', '22', '9246', '0', '0'), +('16', '40', '22', '21509', '0', '0'), +('16', '40', '1', '14701', '3802', '0'), +('16', '40', '1', '14702', '2500', '0'), +('16', '40', '1', '10165', '1683', '0'), +('16', '40', '1', '14623', '1171', '0'), +('16', '40', '2', '4620', '3751', '0'), +('16', '40', '2', '1519', '3207', '0'), +('16', '40', '2', '4831', '3020', '0'), +('16', '40', '2', '10142', '3012', '0'), +('16', '40', '3', '10144', '1304', '0'), +('16', '40', '3', '14706', '990', '0'), +('16', '40', '3', '14705', '990', '0'), +('16', '40', '3', '3314', '785', '0'), +('16', '40', '5', '14703', '5500', '0'), +('16', '40', '5', '14700', '3453', '0'), +('16', '40', '5', '10055', '3255', '0'), +('16', '40', '5', '68291', '2411', '0'), +('16', '40', '8', '11621', '14171', '0'), +('16', '40', '8', '1409', '6312', '0'), +('16', '40', '8', '11551', '5129', '0'), +('16', '40', '8', '2400', '2808', '0'), +('16', '40', '6', '1557', '6760', '0'), +('16', '40', '6', '4302', '2832', '0'), +('16', '40', '6', '25062', '1817', '0'), +('16', '40', '6', '4165', '1812', '0'), +('16', '40', '17', '4832', '9126', '0'), +('16', '40', '17', '4309', '5576', '0'), +('16', '40', '17', '11623', '4979', '0'), +('16', '40', '17', '3307', '3770', '0'), +('16', '40', '7', '4343', '3767', '0'), +('16', '40', '7', '4833', '3567', '0'), +('16', '40', '7', '71303', '2689', '0'), +('16', '40', '7', '2458', '2406', '0'), +('16', '40', '9', '4834', '2625', '0'), +('16', '40', '9', '4311', '2362', '0'), +('16', '40', '9', '12189', '2263', '0'), +('16', '40', '9', '10149', '2255', '0'), +('16', '40', '15', '10366', '8005', '0'), +('16', '40', '15', '10151', '7200', '0'), +('16', '40', '15', '14679', '6255', '0'), +('16', '40', '15', '14678', '5104', '0'), +('16', '40', '20', '11601', '9516', '0'), +('16', '40', '20', '1365', '4200', '0'), +('16', '40', '20', '2742', '4059', '0'), +('16', '40', '20', '2471', '3804', '0'), +('16', '40', '12', '4835', '8394', '0'), +('16', '40', '12', '20655', '5229', '0'), +('16', '40', '12', '11624', '3723', '0'), +('16', '40', '12', '2923', '3404', '0'), +('16', '40', '18', '4836', '4300', '0'), +('16', '40', '18', '2461', '2557', '0'), +('16', '40', '18', '4346', '2276', '0'), +('16', '40', '18', '4412', '2083', '0'), +('16', '40', '19', '4837', '3923', '0'), +('16', '40', '19', '68239', '3223', '0'), +('16', '40', '19', '2337', '1757', '0'), +('16', '40', '19', '3312', '1392', '0'), +('16', '40', '13', '45120', '36837', '0'), +('16', '40', '13', '5622', '35855', '0'), +('16', '40', '13', '11609', '35754', '0'), +('16', '40', '13', '5412', '33027', '0'), +('16', '40', '14', '11551', '12679', '0'), +('16', '40', '14', '14762', '2181', '0'), +('16', '40', '14', '13355', '1951', '0'), +('16', '40', '14', '6359', '1753', '0'), +('16', '40', '11', '14762', '2181', '0'), +('16', '40', '11', '20677', '1800', '0'), +('16', '40', '11', '9246', '604', '0'), +('16', '40', '11', '13748', '454', '0'), +('16', '41', '22', '10323', '0', '0'), +('16', '41', '22', '10664', '0', '0'), +('16', '41', '22', '9246', '0', '0'), +('16', '41', '22', '21509', '0', '0'), +('16', '41', '1', '14701', '3802', '0'), +('16', '41', '1', '14702', '2500', '0'), +('16', '41', '1', '10165', '1683', '0'), +('16', '41', '1', '14623', '1203', '0'), +('16', '41', '2', '4620', '3789', '0'), +('16', '41', '2', '1519', '3207', '0'), +('16', '41', '2', '4831', '3020', '0'), +('16', '41', '2', '10142', '3012', '0'), +('16', '41', '3', '10144', '1304', '0'), +('16', '41', '3', '14706', '990', '0'), +('16', '41', '3', '14705', '990', '0'), +('16', '41', '3', '3314', '785', '0'), +('16', '41', '5', '14703', '5500', '0'), +('16', '41', '5', '14700', '3453', '0'), +('16', '41', '5', '10055', '3255', '0'), +('16', '41', '5', '68291', '2411', '0'), +('16', '41', '8', '11621', '14171', '0'), +('16', '41', '8', '1409', '6312', '0'), +('16', '41', '8', '11551', '5129', '0'), +('16', '41', '8', '2400', '2808', '0'), +('16', '41', '6', '1557', '6760', '0'), +('16', '41', '6', '4302', '2864', '0'), +('16', '41', '6', '25062', '1817', '0'), +('16', '41', '6', '4165', '1812', '0'), +('16', '41', '17', '4832', '9208', '0'), +('16', '41', '17', '4309', '5576', '0'), +('16', '41', '17', '11623', '4979', '0'), +('16', '41', '17', '3307', '3792', '0'), +('16', '41', '7', '4343', '3821', '0'), +('16', '41', '7', '4833', '3567', '0'), +('16', '41', '7', '71303', '2689', '0'), +('16', '41', '7', '2458', '2406', '0'), +('16', '41', '9', '4834', '2625', '0'), +('16', '41', '9', '4311', '2400', '0'), +('16', '41', '9', '12189', '2263', '0'), +('16', '41', '9', '10149', '2255', '0'), +('16', '41', '15', '10366', '8005', '0'), +('16', '41', '15', '10151', '7200', '0'), +('16', '41', '15', '14679', '6255', '0'), +('16', '41', '15', '14678', '5104', '0'), +('16', '41', '20', '11601', '9570', '0'), +('16', '41', '20', '1365', '4200', '0'), +('16', '41', '20', '2742', '4113', '0'), +('16', '41', '20', '2471', '3804', '0'), +('16', '41', '12', '4835', '8422', '0'), +('16', '41', '12', '20655', '5240', '0'), +('16', '41', '12', '11624', '3761', '0'), +('16', '41', '12', '2923', '3404', '0'), +('16', '41', '18', '4836', '4328', '0'), +('16', '41', '18', '2461', '2557', '0'), +('16', '41', '18', '4346', '2276', '0'), +('16', '41', '18', '4412', '2083', '0'), +('16', '41', '19', '4837', '3923', '0'), +('16', '41', '19', '68239', '3223', '0'), +('16', '41', '19', '2337', '1757', '0'), +('16', '41', '19', '3312', '1392', '0'), +('16', '41', '13', '45120', '37907', '0'), +('16', '41', '13', '5622', '36209', '0'), +('16', '41', '13', '11609', '36108', '0'), +('16', '41', '13', '5412', '33330', '0'), +('16', '41', '14', '11551', '12679', '0'), +('16', '41', '14', '14762', '2181', '0'), +('16', '41', '14', '13355', '2005', '0'), +('16', '41', '14', '6359', '1753', '0'), +('16', '41', '11', '14762', '2181', '0'), +('16', '41', '11', '20677', '1800', '0'), +('16', '41', '11', '9246', '604', '0'), +('16', '41', '11', '13748', '454', '0'), +('16', '42', '22', '10323', '0', '0'), +('16', '42', '22', '10664', '0', '0'), +('16', '42', '22', '9246', '0', '0'), +('16', '42', '22', '21509', '0', '0'), +('16', '42', '1', '14701', '3802', '0'), +('16', '42', '1', '14702', '2500', '0'), +('16', '42', '1', '10165', '1683', '0'), +('16', '42', '1', '14623', '1236', '0'), +('16', '42', '2', '4620', '3828', '0'), +('16', '42', '2', '1519', '3207', '0'), +('16', '42', '2', '4831', '3020', '0'), +('16', '42', '2', '10142', '3012', '0'), +('16', '42', '3', '10144', '1304', '0'), +('16', '42', '3', '14706', '990', '0'), +('16', '42', '3', '14705', '990', '0'), +('16', '42', '3', '3314', '785', '0'), +('16', '42', '5', '14703', '5500', '0'), +('16', '42', '5', '14700', '3453', '0'), +('16', '42', '5', '10055', '3255', '0'), +('16', '42', '5', '68291', '2411', '0'), +('16', '42', '8', '11621', '14171', '0'), +('16', '42', '8', '1409', '6312', '0'), +('16', '42', '8', '11551', '5129', '0'), +('16', '42', '8', '2400', '2808', '0'), +('16', '42', '6', '1557', '6760', '0'), +('16', '42', '6', '4302', '2897', '0'), +('16', '42', '6', '25062', '1817', '0'), +('16', '42', '6', '4165', '1812', '0'), +('16', '42', '17', '4832', '9290', '0'), +('16', '42', '17', '4309', '5576', '0'), +('16', '42', '17', '11623', '4979', '0'), +('16', '42', '17', '3307', '3814', '0'), +('16', '42', '7', '4343', '3875', '0'), +('16', '42', '7', '4833', '3567', '0'), +('16', '42', '7', '71303', '2689', '0'), +('16', '42', '7', '2458', '2406', '0'), +('16', '42', '9', '4834', '2625', '0'), +('16', '42', '9', '4311', '2438', '0'), +('16', '42', '9', '12189', '2263', '0'), +('16', '42', '9', '10149', '2255', '0'), +('16', '42', '15', '10366', '8005', '0'), +('16', '42', '15', '10151', '7200', '0'), +('16', '42', '15', '14679', '6255', '0'), +('16', '42', '15', '14678', '5104', '0'), +('16', '42', '20', '11601', '9625', '0'), +('16', '42', '20', '1365', '4200', '0'), +('16', '42', '20', '2742', '4168', '0'), +('16', '42', '20', '2471', '3804', '0'), +('16', '42', '12', '4835', '8449', '0'), +('16', '42', '12', '20655', '5251', '0'), +('16', '42', '12', '11624', '3799', '0'), +('16', '42', '12', '2923', '3404', '0'), +('16', '42', '18', '4836', '4355', '0'), +('16', '42', '18', '2461', '2557', '0'), +('16', '42', '18', '4346', '2276', '0'), +('16', '42', '18', '4412', '2083', '0'), +('16', '42', '19', '4837', '3923', '0'), +('16', '42', '19', '68239', '3223', '0'), +('16', '42', '19', '2337', '1757', '0'), +('16', '42', '19', '3312', '1392', '0'), +('16', '42', '13', '45120', '39331', '0'), +('16', '42', '13', '5622', '36562', '0'), +('16', '42', '13', '11609', '36411', '0'), +('16', '42', '13', '5412', '33633', '0'), +('16', '42', '14', '11551', '12679', '0'), +('16', '42', '14', '14762', '2181', '0'), +('16', '42', '14', '13355', '2060', '0'), +('16', '42', '14', '6359', '1753', '0'), +('16', '42', '11', '14762', '2181', '0'), +('16', '42', '11', '20677', '1800', '0'), +('16', '42', '11', '9246', '604', '0'), +('16', '42', '11', '13748', '454', '0'), +('16', '43', '22', '10323', '0', '0'), +('16', '43', '22', '10664', '0', '0'), +('16', '43', '22', '9246', '0', '0'), +('16', '43', '22', '21509', '0', '0'), +('16', '43', '1', '14701', '3802', '0'), +('16', '43', '1', '14702', '2500', '0'), +('16', '43', '1', '10165', '1683', '0'), +('16', '43', '1', '14623', '1268', '0'), +('16', '43', '2', '4620', '3866', '0'), +('16', '43', '2', '1519', '3207', '0'), +('16', '43', '2', '4831', '3020', '0'), +('16', '43', '2', '10142', '3012', '0'), +('16', '43', '3', '10144', '1304', '0'), +('16', '43', '3', '14706', '990', '0'), +('16', '43', '3', '14705', '990', '0'), +('16', '43', '3', '3314', '785', '0'), +('16', '43', '5', '14703', '5500', '0'), +('16', '43', '5', '14700', '3453', '0'), +('16', '43', '5', '10055', '3255', '0'), +('16', '43', '5', '68291', '2411', '0'), +('16', '43', '8', '11621', '14171', '0'), +('16', '43', '8', '1409', '6312', '0'), +('16', '43', '8', '11551', '5129', '0'), +('16', '43', '8', '2400', '2808', '0'), +('16', '43', '6', '1557', '6760', '0'), +('16', '43', '6', '4302', '2929', '0'), +('16', '43', '6', '25062', '1817', '0'), +('16', '43', '6', '4165', '1812', '0'), +('16', '43', '17', '4832', '9371', '0'), +('16', '43', '17', '4309', '5576', '0'), +('16', '43', '17', '11623', '4979', '0'), +('16', '43', '17', '3307', '3835', '0'), +('16', '43', '7', '4343', '3930', '0'), +('16', '43', '7', '4833', '3567', '0'), +('16', '43', '7', '71303', '2689', '0'), +('16', '43', '7', '2458', '2406', '0'), +('16', '43', '9', '4834', '2625', '0'), +('16', '43', '9', '4311', '2476', '0'), +('16', '43', '9', '12189', '2263', '0'), +('16', '43', '9', '10149', '2255', '0'), +('16', '43', '15', '10366', '8005', '0'), +('16', '43', '15', '10151', '7200', '0'), +('16', '43', '15', '14679', '6255', '0'), +('16', '43', '15', '14678', '5104', '0'), +('16', '43', '20', '11601', '9679', '0'), +('16', '43', '20', '2742', '4222', '0'), +('16', '43', '20', '1365', '4200', '0'), +('16', '43', '20', '2471', '3804', '0'), +('16', '43', '12', '4835', '8476', '0'), +('16', '43', '12', '20655', '5262', '0'), +('16', '43', '12', '11624', '3837', '0'), +('16', '43', '12', '2923', '3404', '0'), +('16', '43', '18', '4836', '4382', '0'), +('16', '43', '18', '2461', '2557', '0'), +('16', '43', '18', '4346', '2276', '0'), +('16', '43', '18', '2462', '2084', '0'), +('16', '43', '19', '4837', '3923', '0'), +('16', '43', '19', '68239', '3223', '0'), +('16', '43', '19', '2337', '1757', '0'), +('16', '43', '19', '3312', '1392', '0'), +('16', '43', '13', '45120', '40454', '0'), +('16', '43', '13', '5622', '36865', '0'), +('16', '43', '13', '11609', '36764', '0'), +('16', '43', '13', '5412', '33987', '0'), +('16', '43', '14', '11551', '12679', '0'), +('16', '43', '14', '14762', '2181', '0'), +('16', '43', '14', '13355', '2114', '0'), +('16', '43', '14', '6359', '1753', '0'), +('16', '43', '11', '14762', '2181', '0'), +('16', '43', '11', '20677', '1800', '0'), +('16', '43', '11', '9246', '604', '0'), +('16', '43', '11', '13748', '454', '0'), +('16', '44', '22', '10323', '0', '0'), +('16', '44', '22', '10664', '0', '0'), +('16', '44', '22', '9246', '0', '0'), +('16', '44', '22', '21509', '0', '0'), +('16', '44', '1', '14701', '3802', '0'), +('16', '44', '1', '14702', '2500', '0'), +('16', '44', '1', '10165', '1683', '0'), +('16', '44', '1', '14623', '1305', '0'), +('16', '44', '2', '4620', '3908', '0'), +('16', '44', '2', '1519', '3207', '0'), +('16', '44', '2', '4831', '3020', '0'), +('16', '44', '2', '10142', '3012', '0'), +('16', '44', '3', '10144', '1304', '0'), +('16', '44', '3', '14706', '990', '0'), +('16', '44', '3', '14705', '990', '0'), +('16', '44', '3', '3314', '785', '0'), +('16', '44', '5', '14703', '5500', '0'), +('16', '44', '5', '14700', '3453', '0'), +('16', '44', '5', '10055', '3255', '0'), +('16', '44', '5', '68291', '2411', '0'), +('16', '44', '8', '11621', '14171', '0'), +('16', '44', '8', '1409', '6312', '0'), +('16', '44', '8', '11551', '5129', '0'), +('16', '44', '8', '2400', '2808', '0'), +('16', '44', '6', '1557', '6760', '0'), +('16', '44', '6', '4302', '2966', '0'), +('16', '44', '6', '25062', '1817', '0'), +('16', '44', '6', '4165', '1812', '0'), +('16', '44', '17', '4832', '9462', '0'), +('16', '44', '17', '4309', '5576', '0'), +('16', '44', '17', '11623', '4979', '0'), +('16', '44', '17', '3307', '3860', '0'), +('16', '44', '7', '4343', '3990', '0'), +('16', '44', '7', '4833', '3567', '0'), +('16', '44', '7', '71303', '2689', '0'), +('16', '44', '7', '2458', '2406', '0'), +('16', '44', '9', '4834', '2625', '0'), +('16', '44', '9', '4311', '2519', '0'), +('16', '44', '9', '12189', '2263', '0'), +('16', '44', '9', '10149', '2255', '0'), +('16', '44', '15', '10366', '8005', '0'), +('16', '44', '15', '10151', '7200', '0'), +('16', '44', '15', '14679', '6255', '0'), +('16', '44', '15', '14678', '5104', '0'), +('16', '44', '20', '11601', '9739', '0'), +('16', '44', '20', '2742', '4282', '0'), +('16', '44', '20', '1365', '4200', '0'), +('16', '44', '20', '2471', '3804', '0'), +('16', '44', '12', '4835', '8506', '0'), +('16', '44', '12', '20655', '5274', '0'), +('16', '44', '12', '11624', '3879', '0'), +('16', '44', '12', '2923', '3404', '0'), +('16', '44', '18', '4836', '4412', '0'), +('16', '44', '18', '2461', '2557', '0'), +('16', '44', '18', '4346', '2276', '0'), +('16', '44', '18', '2462', '2126', '0'), +('16', '44', '19', '4837', '3923', '0'), +('16', '44', '19', '68239', '3223', '0'), +('16', '44', '19', '2337', '1757', '0'), +('16', '44', '19', '3312', '1392', '0'), +('16', '44', '13', '45120', '41883', '0'), +('16', '44', '13', '5622', '37219', '0'), +('16', '44', '13', '11609', '37118', '0'), +('16', '44', '13', '5412', '34290', '0'), +('16', '44', '14', '11551', '12679', '0'), +('16', '44', '14', '14762', '2181', '0'), +('16', '44', '14', '13355', '2174', '0'), +('16', '44', '14', '6359', '1753', '0'), +('16', '44', '11', '14762', '2181', '0'), +('16', '44', '11', '20677', '1800', '0'), +('16', '44', '11', '9246', '604', '0'), +('16', '44', '11', '13748', '454', '0'), +('16', '45', '22', '10323', '0', '0'), +('16', '45', '22', '10664', '0', '0'), +('16', '45', '22', '9246', '0', '0'), +('16', '45', '22', '21509', '0', '0'), +('16', '45', '1', '14701', '3802', '0'), +('16', '45', '1', '14702', '2500', '0'), +('16', '45', '1', '10165', '1683', '0'), +('16', '45', '1', '14623', '1337', '0'), +('16', '45', '2', '4620', '3946', '0'), +('16', '45', '2', '1519', '3207', '0'), +('16', '45', '2', '4831', '3020', '0'), +('16', '45', '2', '10142', '3012', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '45', '3', '10144', '1304', '0'), +('16', '45', '3', '14706', '990', '0'), +('16', '45', '3', '14705', '990', '0'), +('16', '45', '3', '3314', '785', '0'), +('16', '45', '5', '14703', '5500', '0'), +('16', '45', '5', '14700', '3453', '0'), +('16', '45', '5', '10055', '3255', '0'), +('16', '45', '5', '68291', '2411', '0'), +('16', '45', '8', '11621', '14171', '0'), +('16', '45', '8', '1409', '6312', '0'), +('16', '45', '8', '11551', '5129', '0'), +('16', '45', '8', '2400', '2808', '0'), +('16', '45', '6', '1557', '6760', '0'), +('16', '45', '6', '4302', '2998', '0'), +('16', '45', '6', '25062', '1817', '0'), +('16', '45', '6', '4165', '1812', '0'), +('16', '45', '17', '4832', '9543', '0'), +('16', '45', '17', '4309', '5576', '0'), +('16', '45', '17', '11623', '4979', '0'), +('16', '45', '17', '3307', '3881', '0'), +('16', '45', '7', '4343', '4044', '0'), +('16', '45', '7', '4833', '3567', '0'), +('16', '45', '7', '71303', '2689', '0'), +('16', '45', '7', '2458', '2406', '0'), +('16', '45', '9', '4834', '2625', '0'), +('16', '45', '9', '4311', '2557', '0'), +('16', '45', '9', '12189', '2263', '0'), +('16', '45', '9', '10149', '2255', '0'), +('16', '45', '15', '10366', '8005', '0'), +('16', '45', '15', '10151', '7200', '0'), +('16', '45', '15', '14679', '6255', '0'), +('16', '45', '15', '14678', '5104', '0'), +('16', '45', '20', '11601', '9794', '0'), +('16', '45', '20', '2742', '4337', '0'), +('16', '45', '20', '1365', '4200', '0'), +('16', '45', '20', '2471', '3804', '0'), +('16', '45', '12', '4835', '8533', '0'), +('16', '45', '12', '20655', '5285', '0'), +('16', '45', '12', '11624', '3917', '0'), +('16', '45', '12', '2923', '3404', '0'), +('16', '45', '18', '4836', '4439', '0'), +('16', '45', '18', '2461', '2557', '0'), +('16', '45', '18', '4346', '2276', '0'), +('16', '45', '18', '2462', '2164', '0'), +('16', '45', '19', '4837', '3923', '0'), +('16', '45', '19', '68239', '3223', '0'), +('16', '45', '19', '2337', '1757', '0'), +('16', '45', '19', '3312', '1392', '0'), +('16', '45', '13', '45120', '43058', '0'), +('16', '45', '13', '5622', '37572', '0'), +('16', '45', '13', '11609', '37421', '0'), +('16', '45', '13', '5412', '34593', '0'), +('16', '45', '14', '11551', '12679', '0'), +('16', '45', '14', '13355', '2229', '0'), +('16', '45', '14', '14762', '2181', '0'), +('16', '45', '14', '6359', '1753', '0'), +('16', '45', '11', '14762', '2181', '0'), +('16', '45', '11', '20677', '1800', '0'), +('16', '45', '11', '9246', '604', '0'), +('16', '45', '11', '13748', '454', '0'), +('16', '46', '22', '10323', '0', '0'), +('16', '46', '22', '10664', '0', '0'), +('16', '46', '22', '9246', '0', '0'), +('16', '46', '22', '21509', '0', '0'), +('16', '46', '1', '14701', '3802', '0'), +('16', '46', '1', '14702', '2500', '0'), +('16', '46', '1', '10165', '1683', '0'), +('16', '46', '1', '14623', '1370', '0'), +('16', '46', '2', '4620', '3984', '0'), +('16', '46', '2', '1519', '3207', '0'), +('16', '46', '2', '4831', '3020', '0'), +('16', '46', '2', '10142', '3012', '0'), +('16', '46', '3', '10144', '1304', '0'), +('16', '46', '3', '14706', '990', '0'), +('16', '46', '3', '14705', '990', '0'), +('16', '46', '3', '3314', '785', '0'), +('16', '46', '5', '14703', '5500', '0'), +('16', '46', '5', '14700', '3453', '0'), +('16', '46', '5', '10055', '3255', '0'), +('16', '46', '5', '68291', '2411', '0'), +('16', '46', '8', '11621', '14171', '0'), +('16', '46', '8', '1409', '6312', '0'), +('16', '46', '8', '11551', '5129', '0'), +('16', '46', '8', '2400', '2808', '0'), +('16', '46', '6', '1557', '6760', '0'), +('16', '46', '6', '4302', '3031', '0'), +('16', '46', '6', '25062', '1817', '0'), +('16', '46', '6', '4165', '1812', '0'), +('16', '46', '17', '4832', '9625', '0'), +('16', '46', '17', '4309', '5576', '0'), +('16', '46', '17', '11623', '4979', '0'), +('16', '46', '17', '3307', '3903', '0'), +('16', '46', '7', '4343', '4099', '0'), +('16', '46', '7', '4833', '3567', '0'), +('16', '46', '7', '71303', '2689', '0'), +('16', '46', '7', '2458', '2406', '0'), +('16', '46', '9', '4834', '2625', '0'), +('16', '46', '9', '4311', '2595', '0'), +('16', '46', '9', '12189', '2263', '0'), +('16', '46', '9', '10149', '2255', '0'), +('16', '46', '15', '10366', '8005', '0'), +('16', '46', '15', '10151', '7200', '0'), +('16', '46', '15', '14679', '6255', '0'), +('16', '46', '15', '14678', '5104', '0'), +('16', '46', '20', '11601', '9848', '0'), +('16', '46', '20', '2742', '4391', '0'), +('16', '46', '20', '1365', '4200', '0'), +('16', '46', '20', '2471', '3804', '0'), +('16', '46', '12', '4835', '8561', '0'), +('16', '46', '12', '20655', '5296', '0'), +('16', '46', '12', '11624', '3955', '0'), +('16', '46', '12', '2923', '3404', '0'), +('16', '46', '18', '4836', '4467', '0'), +('16', '46', '18', '2461', '2557', '0'), +('16', '46', '18', '4346', '2276', '0'), +('16', '46', '18', '2462', '2202', '0'), +('16', '46', '19', '4837', '3923', '0'), +('16', '46', '19', '68239', '3223', '0'), +('16', '46', '19', '2337', '1757', '0'), +('16', '46', '19', '3312', '1392', '0'), +('16', '46', '13', '45120', '47769', '0'), +('16', '46', '13', '5622', '40501', '0'), +('16', '46', '13', '11609', '40350', '0'), +('16', '46', '13', '5412', '37269', '0'), +('16', '46', '14', '11551', '12679', '0'), +('16', '46', '14', '13355', '2283', '0'), +('16', '46', '14', '14762', '2181', '0'), +('16', '46', '14', '6359', '1753', '0'), +('16', '46', '11', '14762', '2181', '0'), +('16', '46', '11', '20677', '1800', '0'), +('16', '46', '11', '9246', '604', '0'), +('16', '46', '11', '13748', '454', '0'), +('16', '47', '22', '10323', '0', '0'), +('16', '47', '22', '10664', '0', '0'), +('16', '47', '22', '9246', '0', '0'), +('16', '47', '22', '21509', '0', '0'), +('16', '47', '1', '14701', '3802', '0'), +('16', '47', '1', '14702', '2500', '0'), +('16', '47', '1', '10165', '1683', '0'), +('16', '47', '1', '14623', '1406', '0'), +('16', '47', '2', '4620', '4026', '0'), +('16', '47', '2', '1519', '3207', '0'), +('16', '47', '2', '4831', '3020', '0'), +('16', '47', '2', '10142', '3012', '0'), +('16', '47', '3', '10144', '1304', '0'), +('16', '47', '3', '14706', '990', '0'), +('16', '47', '3', '14705', '990', '0'), +('16', '47', '3', '3314', '785', '0'), +('16', '47', '5', '14703', '5500', '0'), +('16', '47', '5', '14700', '3453', '0'), +('16', '47', '5', '10055', '3255', '0'), +('16', '47', '5', '68291', '2411', '0'), +('16', '47', '8', '11621', '14171', '0'), +('16', '47', '8', '1409', '6312', '0'), +('16', '47', '8', '11551', '5129', '0'), +('16', '47', '8', '2400', '2808', '0'), +('16', '47', '6', '1557', '6760', '0'), +('16', '47', '6', '4302', '3067', '0'), +('16', '47', '6', '25062', '1817', '0'), +('16', '47', '6', '4165', '1812', '0'), +('16', '47', '17', '4832', '9715', '0'), +('16', '47', '17', '4309', '5576', '0'), +('16', '47', '17', '11623', '4979', '0'), +('16', '47', '17', '3307', '3927', '0'), +('16', '47', '7', '4343', '4159', '0'), +('16', '47', '7', '4833', '3567', '0'), +('16', '47', '7', '71303', '2689', '0'), +('16', '47', '7', '2458', '2406', '0'), +('16', '47', '9', '4311', '2637', '0'), +('16', '47', '9', '4834', '2625', '0'), +('16', '47', '9', '12189', '2263', '0'), +('16', '47', '9', '10149', '2255', '0'), +('16', '47', '15', '10366', '8005', '0'), +('16', '47', '15', '10151', '7200', '0'), +('16', '47', '15', '14679', '6255', '0'), +('16', '47', '15', '14678', '5104', '0'), +('16', '47', '20', '11601', '9909', '0'), +('16', '47', '20', '2742', '4451', '0'), +('16', '47', '20', '1365', '4200', '0'), +('16', '47', '20', '2471', '3804', '0'), +('16', '47', '12', '4835', '8591', '0'), +('16', '47', '12', '20655', '5308', '0'), +('16', '47', '12', '11624', '3997', '0'), +('16', '47', '12', '2923', '3404', '0'), +('16', '47', '18', '4836', '4497', '0'), +('16', '47', '18', '2461', '2557', '0'), +('16', '47', '18', '4346', '2276', '0'), +('16', '47', '18', '2462', '2244', '0'), +('16', '47', '19', '4837', '3923', '0'), +('16', '47', '19', '68239', '3223', '0'), +('16', '47', '19', '2337', '1757', '0'), +('16', '47', '19', '3312', '1392', '0'), +('16', '47', '13', '45120', '50009', '0'), +('16', '47', '13', '5622', '41663', '0'), +('16', '47', '13', '11609', '41511', '0'), +('16', '47', '13', '5412', '38380', '0'), +('16', '47', '14', '11551', '12679', '0'), +('16', '47', '14', '13355', '2344', '0'), +('16', '47', '14', '14762', '2181', '0'), +('16', '47', '14', '6359', '1753', '0'), +('16', '47', '11', '14762', '2181', '0'), +('16', '47', '11', '20677', '1800', '0'), +('16', '47', '11', '9246', '604', '0'), +('16', '47', '11', '13748', '454', '0'), +('16', '48', '22', '10323', '0', '0'), +('16', '48', '22', '10664', '0', '0'), +('16', '48', '22', '9246', '0', '0'), +('16', '48', '22', '21509', '0', '0'), +('16', '48', '1', '14701', '3802', '0'), +('16', '48', '1', '14702', '2500', '0'), +('16', '48', '1', '10165', '1683', '0'), +('16', '48', '1', '14623', '1439', '0'), +('16', '48', '2', '4620', '4064', '0'), +('16', '48', '2', '1519', '3207', '0'), +('16', '48', '2', '4831', '3020', '0'), +('16', '48', '2', '10142', '3012', '0'), +('16', '48', '3', '10144', '1304', '0'), +('16', '48', '3', '14706', '990', '0'), +('16', '48', '3', '14705', '990', '0'), +('16', '48', '3', '3314', '785', '0'), +('16', '48', '5', '14703', '5500', '0'), +('16', '48', '5', '14700', '3453', '0'), +('16', '48', '5', '10055', '3255', '0'), +('16', '48', '5', '68291', '2411', '0'), +('16', '48', '8', '11621', '14171', '0'), +('16', '48', '8', '1409', '6312', '0'), +('16', '48', '8', '11551', '5129', '0'), +('16', '48', '8', '2400', '2808', '0'), +('16', '48', '6', '1557', '6760', '0'), +('16', '48', '6', '4302', '3100', '0'), +('16', '48', '6', '25062', '1817', '0'), +('16', '48', '6', '4165', '1812', '0'), +('16', '48', '17', '4832', '9797', '0'), +('16', '48', '17', '4309', '5576', '0'), +('16', '48', '17', '11623', '4979', '0'), +('16', '48', '17', '3307', '3949', '0'), +('16', '48', '7', '4343', '4214', '0'), +('16', '48', '7', '4833', '3567', '0'), +('16', '48', '7', '71303', '2689', '0'), +('16', '48', '7', '2458', '2406', '0'), +('16', '48', '9', '4311', '2675', '0'), +('16', '48', '9', '4834', '2625', '0'), +('16', '48', '9', '12189', '2263', '0'), +('16', '48', '9', '10149', '2255', '0'), +('16', '48', '15', '10366', '8005', '0'), +('16', '48', '15', '10151', '7200', '0'), +('16', '48', '15', '14679', '6255', '0'), +('16', '48', '15', '14678', '5104', '0'), +('16', '48', '20', '11601', '9963', '0'), +('16', '48', '20', '2742', '4506', '0'), +('16', '48', '20', '1365', '4200', '0'), +('16', '48', '20', '2471', '3804', '0'), +('16', '48', '12', '4835', '8618', '0'), +('16', '48', '12', '20655', '5319', '0'), +('16', '48', '12', '11624', '4036', '0'), +('16', '48', '12', '2923', '3404', '0'), +('16', '48', '18', '4836', '4524', '0'), +('16', '48', '18', '2461', '2557', '0'), +('16', '48', '18', '2462', '2283', '0'), +('16', '48', '18', '4346', '2276', '0'), +('16', '48', '19', '4837', '3923', '0'), +('16', '48', '19', '68239', '3223', '0'), +('16', '48', '19', '2337', '1757', '0'), +('16', '48', '19', '3312', '1392', '0'), +('16', '48', '13', '45120', '52601', '0'), +('16', '48', '13', '5622', '42875', '0'), +('16', '48', '13', '11609', '42723', '0'), +('16', '48', '13', '5412', '39491', '0'), +('16', '48', '14', '11551', '12679', '0'), +('16', '48', '14', '13355', '2398', '0'), +('16', '48', '14', '14762', '2181', '0'), +('16', '48', '14', '6359', '1753', '0'), +('16', '48', '11', '14762', '2181', '0'), +('16', '48', '11', '20677', '1800', '0'), +('16', '48', '11', '9246', '604', '0'), +('16', '48', '11', '13748', '454', '0'), +('16', '49', '22', '10323', '0', '0'), +('16', '49', '22', '10664', '0', '0'), +('16', '49', '22', '9246', '0', '0'), +('16', '49', '22', '21509', '0', '0'), +('16', '49', '1', '14701', '3802', '0'), +('16', '49', '1', '14702', '2500', '0'), +('16', '49', '1', '10165', '1683', '0'), +('16', '49', '1', '14623', '1475', '0'), +('16', '49', '2', '4620', '4107', '0'), +('16', '49', '2', '1519', '3207', '0'), +('16', '49', '2', '4831', '3020', '0'), +('16', '49', '2', '10142', '3012', '0'), +('16', '49', '3', '10144', '1304', '0'), +('16', '49', '3', '14705', '990', '0'), +('16', '49', '3', '14706', '990', '0'), +('16', '49', '3', '1411', '794', '0'), +('16', '49', '5', '14703', '5500', '0'), +('16', '49', '5', '14700', '3453', '0'), +('16', '49', '5', '10055', '3255', '0'), +('16', '49', '5', '68291', '2411', '0'), +('16', '49', '8', '11621', '14171', '0'), +('16', '49', '8', '1409', '6312', '0'), +('16', '49', '8', '11551', '5129', '0'), +('16', '49', '8', '2400', '2808', '0'), +('16', '49', '6', '1557', '6760', '0'), +('16', '49', '6', '4302', '3136', '0'), +('16', '49', '6', '25062', '1817', '0'), +('16', '49', '6', '4165', '1812', '0'), +('16', '49', '17', '4832', '9887', '0'), +('16', '49', '17', '4309', '5576', '0'), +('16', '49', '17', '11623', '4979', '0'), +('16', '49', '17', '3307', '3973', '0'), +('16', '49', '7', '4343', '4274', '0'), +('16', '49', '7', '4833', '3567', '0'), +('16', '49', '7', '71303', '2689', '0'), +('16', '49', '7', '2458', '2406', '0'), +('16', '49', '9', '4311', '2717', '0'), +('16', '49', '9', '4834', '2625', '0'), +('16', '49', '9', '12189', '2263', '0'), +('16', '49', '9', '10149', '2255', '0'), +('16', '49', '15', '10366', '8005', '0'), +('16', '49', '15', '10151', '7200', '0'), +('16', '49', '15', '14679', '6255', '0'), +('16', '49', '15', '14678', '5104', '0'), +('16', '49', '20', '11601', '10023', '0'), +('16', '49', '20', '2742', '4566', '0'), +('16', '49', '20', '1365', '4200', '0'), +('16', '49', '20', '2471', '3804', '0'), +('16', '49', '12', '4835', '8648', '0'), +('16', '49', '12', '20655', '5331', '0'), +('16', '49', '12', '11624', '4078', '0'), +('16', '49', '12', '2923', '3404', '0'), +('16', '49', '18', '4836', '4554', '0'), +('16', '49', '18', '2461', '2557', '0'), +('16', '49', '18', '2462', '2325', '0'), +('16', '49', '18', '4346', '2276', '0'), +('16', '49', '19', '4837', '3923', '0'), +('16', '49', '19', '68239', '3223', '0'), +('16', '49', '19', '2337', '1757', '0'), +('16', '49', '19', '3312', '1392', '0'), +('16', '49', '13', '45120', '54944', '0'), +('16', '49', '13', '5622', '44036', '0'), +('16', '49', '13', '11609', '43885', '0'), +('16', '49', '13', '5412', '40552', '0'), +('16', '49', '14', '11551', '12679', '0'), +('16', '49', '14', '13355', '2458', '0'), +('16', '49', '14', '14762', '2181', '0'), +('16', '49', '14', '6359', '1753', '0'), +('16', '49', '11', '14762', '2181', '0'), +('16', '49', '11', '20677', '1800', '0'), +('16', '49', '11', '9246', '604', '0'), +('16', '49', '11', '13748', '454', '0'), +('16', '50', '22', '10323', '0', '0'), +('16', '50', '22', '10664', '0', '0'), +('16', '50', '22', '9246', '0', '0'), +('16', '50', '22', '21509', '0', '0'), +('16', '50', '1', '14701', '3802', '0'), +('16', '50', '1', '14702', '2500', '0'), +('16', '50', '1', '10165', '1683', '0'), +('16', '50', '1', '14623', '1511', '0'), +('16', '50', '2', '4620', '4149', '0'), +('16', '50', '2', '1519', '3207', '0'), +('16', '50', '2', '4831', '3020', '0'), +('16', '50', '2', '10142', '3012', '0'), +('16', '50', '3', '10144', '1304', '0'), +('16', '50', '3', '14705', '990', '0'), +('16', '50', '3', '14706', '990', '0'), +('16', '50', '3', '1411', '806', '0'), +('16', '50', '5', '14703', '5500', '0'), +('16', '50', '5', '14700', '3453', '0'), +('16', '50', '5', '10055', '3255', '0'), +('16', '50', '5', '68291', '2411', '0'), +('16', '50', '8', '11621', '14171', '0'), +('16', '50', '8', '1409', '6312', '0'), +('16', '50', '8', '11551', '5129', '0'), +('16', '50', '8', '2400', '2808', '0'), +('16', '50', '6', '1557', '6760', '0'), +('16', '50', '6', '4302', '3172', '0'), +('16', '50', '6', '25062', '1817', '0'), +('16', '50', '6', '4165', '1812', '0'), +('16', '50', '17', '4832', '9978', '0'), +('16', '50', '17', '4309', '5576', '0'), +('16', '50', '17', '11623', '4979', '0'), +('16', '50', '17', '3307', '3997', '0'), +('16', '50', '7', '4343', '4334', '0'), +('16', '50', '7', '4833', '3567', '0'), +('16', '50', '7', '71303', '2689', '0'), +('16', '50', '7', '2458', '2406', '0'), +('16', '50', '9', '4311', '2760', '0'), +('16', '50', '9', '4834', '2625', '0'), +('16', '50', '9', '12189', '2263', '0'), +('16', '50', '9', '10149', '2255', '0'), +('16', '50', '15', '10366', '8005', '0'), +('16', '50', '15', '10151', '7200', '0'), +('16', '50', '15', '14679', '6255', '0'), +('16', '50', '15', '14678', '5104', '0'), +('16', '50', '20', '11601', '10084', '0'), +('16', '50', '20', '2742', '4627', '0'), +('16', '50', '20', '1365', '4200', '0'), +('16', '50', '20', '2471', '3804', '0'), +('16', '50', '12', '4835', '8678', '0'), +('16', '50', '12', '20655', '5343', '0'), +('16', '50', '12', '11624', '4120', '0'), +('16', '50', '12', '2923', '3404', '0'), +('16', '50', '18', '4836', '4584', '0'), +('16', '50', '18', '2461', '2557', '0'), +('16', '50', '18', '2462', '2367', '0'), +('16', '50', '18', '4346', '2276', '0'), +('16', '50', '19', '4837', '3923', '0'), +('16', '50', '19', '68239', '3223', '0'), +('16', '50', '19', '2337', '1757', '0'), +('16', '50', '19', '3312', '1392', '0'), +('16', '50', '13', '45120', '57692', '0'), +('16', '50', '13', '5622', '45248', '0'), +('16', '50', '13', '11609', '45097', '0'), +('16', '50', '13', '5412', '41663', '0'), +('16', '50', '14', '11551', '12679', '0'), +('16', '50', '14', '13355', '2519', '0'), +('16', '50', '14', '14762', '2181', '0'), +('16', '50', '14', '6359', '1753', '0'), +('16', '50', '11', '14762', '2181', '0'), +('16', '50', '11', '20677', '1800', '0'), +('16', '50', '11', '9246', '604', '0'), +('16', '50', '11', '13748', '454', '0'), +('16', '51', '22', '10323', '0', '0'), +('16', '51', '22', '10664', '0', '0'), +('16', '51', '22', '9246', '0', '0'), +('16', '51', '22', '21509', '0', '0'), +('16', '51', '1', '27822', '4565', '0'), +('16', '51', '1', '14701', '3802', '0'), +('16', '51', '1', '14702', '2500', '0'), +('16', '51', '1', '10165', '1683', '0'), +('16', '51', '2', '4620', '4187', '0'), +('16', '51', '2', '1519', '3207', '0'), +('16', '51', '2', '4831', '3020', '0'), +('16', '51', '2', '10142', '3012', '0'), +('16', '51', '3', '10144', '1304', '0'), +('16', '51', '3', '14705', '990', '0'), +('16', '51', '3', '14706', '990', '0'), +('16', '51', '3', '1411', '817', '0'), +('16', '51', '5', '14703', '5500', '0'), +('16', '51', '5', '14700', '3453', '0'), +('16', '51', '5', '10055', '3255', '0'), +('16', '51', '5', '68291', '2411', '0'), +('16', '51', '8', '11621', '14171', '0'), +('16', '51', '8', '1409', '6312', '0'), +('16', '51', '8', '11551', '5129', '0'), +('16', '51', '8', '2400', '2808', '0'), +('16', '51', '6', '1557', '6760', '0'), +('16', '51', '6', '4302', '3205', '0'), +('16', '51', '6', '25062', '1817', '0'), +('16', '51', '6', '4165', '1812', '0'), +('16', '51', '17', '4832', '10060', '0'), +('16', '51', '17', '4309', '5576', '0'), +('16', '51', '17', '11623', '4979', '0'), +('16', '51', '17', '3307', '4019', '0'), +('16', '51', '7', '4343', '4389', '0'), +('16', '51', '7', '4833', '3567', '0'), +('16', '51', '7', '71303', '2689', '0'), +('16', '51', '7', '2458', '2406', '0'), +('16', '51', '9', '4311', '2798', '0'), +('16', '51', '9', '4834', '2625', '0'), +('16', '51', '9', '12189', '2263', '0'), +('16', '51', '9', '10149', '2255', '0'), +('16', '51', '15', '10366', '8005', '0'), +('16', '51', '15', '10151', '7200', '0'), +('16', '51', '15', '14679', '6255', '0'), +('16', '51', '15', '14678', '5104', '0'), +('16', '51', '20', '11601', '10138', '0'), +('16', '51', '20', '2742', '4681', '0'), +('16', '51', '20', '1365', '4200', '0'), +('16', '51', '20', '2471', '3804', '0'), +('16', '51', '12', '4835', '8706', '0'), +('16', '51', '12', '20655', '5354', '0'), +('16', '51', '12', '11624', '4158', '0'), +('16', '51', '12', '2923', '3404', '0'), +('16', '51', '18', '4836', '4612', '0'), +('16', '51', '18', '2461', '2557', '0'), +('16', '51', '18', '2462', '2405', '0'), +('16', '51', '18', '4346', '2276', '0'), +('16', '51', '19', '4837', '3923', '0'), +('16', '51', '19', '68239', '3223', '0'), +('16', '51', '19', '2337', '1757', '0'), +('16', '51', '19', '3312', '1392', '0'), +('16', '51', '13', '27961', '80449', '0'), +('16', '51', '13', '45120', '60136', '0'), +('16', '51', '13', '5622', '46460', '0'), +('16', '51', '13', '11609', '46309', '0'), +('16', '51', '14', '11551', '12679', '0'), +('16', '51', '14', '13355', '2573', '0'), +('16', '51', '14', '14762', '2181', '0'), +('16', '51', '14', '6359', '1753', '0'), +('16', '51', '11', '14762', '2181', '0'), +('16', '51', '11', '20677', '1800', '0'), +('16', '51', '11', '9246', '604', '0'), +('16', '51', '11', '13748', '454', '0'), +('16', '52', '22', '10323', '0', '0'), +('16', '52', '22', '10664', '0', '0'), +('16', '52', '22', '9246', '0', '0'), +('16', '52', '22', '21509', '0', '0'), +('16', '52', '1', '27822', '4565', '0'), +('16', '52', '1', '14701', '3802', '0'), +('16', '52', '1', '14702', '2500', '0'), +('16', '52', '1', '10165', '1683', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '52', '2', '4620', '4229', '0'), +('16', '52', '2', '1519', '3207', '0'), +('16', '52', '2', '4831', '3020', '0'), +('16', '52', '2', '10142', '3012', '0'), +('16', '52', '3', '10144', '1304', '0'), +('16', '52', '3', '14705', '990', '0'), +('16', '52', '3', '14706', '990', '0'), +('16', '52', '3', '1411', '829', '0'), +('16', '52', '5', '14703', '5500', '0'), +('16', '52', '5', '14700', '3453', '0'), +('16', '52', '5', '10055', '3255', '0'), +('16', '52', '5', '68291', '2411', '0'), +('16', '52', '8', '11621', '14171', '0'), +('16', '52', '8', '1409', '6312', '0'), +('16', '52', '8', '11551', '5129', '0'), +('16', '52', '8', '2400', '2808', '0'), +('16', '52', '6', '1557', '6760', '0'), +('16', '52', '6', '4302', '3241', '0'), +('16', '52', '6', '25062', '1817', '0'), +('16', '52', '6', '4165', '1812', '0'), +('16', '52', '17', '4832', '10150', '0'), +('16', '52', '17', '4309', '5576', '0'), +('16', '52', '17', '11623', '4979', '0'), +('16', '52', '17', '3307', '4043', '0'), +('16', '52', '7', '4343', '4449', '0'), +('16', '52', '7', '4833', '3567', '0'), +('16', '52', '7', '71303', '2689', '0'), +('16', '52', '7', '2458', '2406', '0'), +('16', '52', '9', '4311', '2840', '0'), +('16', '52', '9', '4834', '2625', '0'), +('16', '52', '9', '12189', '2263', '0'), +('16', '52', '9', '10149', '2255', '0'), +('16', '52', '15', '10366', '8005', '0'), +('16', '52', '15', '10151', '7200', '0'), +('16', '52', '15', '14679', '6255', '0'), +('16', '52', '15', '14678', '5104', '0'), +('16', '52', '20', '11601', '10198', '0'), +('16', '52', '20', '2742', '4741', '0'), +('16', '52', '20', '1365', '4200', '0'), +('16', '52', '20', '2471', '3804', '0'), +('16', '52', '12', '4835', '8736', '0'), +('16', '52', '12', '20655', '5366', '0'), +('16', '52', '12', '11624', '4200', '0'), +('16', '52', '12', '2923', '3404', '0'), +('16', '52', '18', '4836', '4642', '0'), +('16', '52', '18', '2461', '2557', '0'), +('16', '52', '18', '2462', '2447', '0'), +('16', '52', '18', '4346', '2276', '0'), +('16', '52', '19', '4837', '3923', '0'), +('16', '52', '19', '68239', '3223', '0'), +('16', '52', '19', '2337', '1757', '0'), +('16', '52', '19', '3312', '1392', '0'), +('16', '52', '13', '27961', '82499', '0'), +('16', '52', '13', '45120', '63038', '0'), +('16', '52', '13', '5622', '47622', '0'), +('16', '52', '13', '11609', '47470', '0'), +('16', '52', '14', '11551', '12679', '0'), +('16', '52', '14', '13355', '2633', '0'), +('16', '52', '14', '14762', '2181', '0'), +('16', '52', '14', '6359', '1753', '0'), +('16', '52', '11', '14762', '2181', '0'), +('16', '52', '11', '20677', '1800', '0'), +('16', '52', '11', '9246', '604', '0'), +('16', '52', '11', '13748', '454', '0'), +('16', '53', '22', '10323', '0', '0'), +('16', '53', '22', '10664', '0', '0'), +('16', '53', '22', '9246', '0', '0'), +('16', '53', '22', '21509', '0', '0'), +('16', '53', '1', '27822', '4565', '0'), +('16', '53', '1', '14701', '3802', '0'), +('16', '53', '1', '14702', '2500', '0'), +('16', '53', '1', '10165', '1683', '0'), +('16', '53', '2', '4620', '4271', '0'), +('16', '53', '2', '1519', '3207', '0'), +('16', '53', '2', '4831', '3020', '0'), +('16', '53', '2', '10142', '3012', '0'), +('16', '53', '3', '10144', '1304', '0'), +('16', '53', '3', '14705', '990', '0'), +('16', '53', '3', '14706', '990', '0'), +('16', '53', '3', '1411', '841', '0'), +('16', '53', '5', '14703', '5500', '0'), +('16', '53', '5', '14700', '3453', '0'), +('16', '53', '5', '10055', '3255', '0'), +('16', '53', '5', '14670', '2428', '0'), +('16', '53', '8', '11621', '14171', '0'), +('16', '53', '8', '1409', '6312', '0'), +('16', '53', '8', '11551', '5129', '0'), +('16', '53', '8', '2400', '2808', '0'), +('16', '53', '6', '1557', '6760', '0'), +('16', '53', '6', '4302', '3277', '0'), +('16', '53', '6', '25062', '1817', '0'), +('16', '53', '6', '4165', '1812', '0'), +('16', '53', '17', '4832', '10241', '0'), +('16', '53', '17', '4309', '5576', '0'), +('16', '53', '17', '11623', '4979', '0'), +('16', '53', '17', '3307', '4067', '0'), +('16', '53', '7', '4343', '4509', '0'), +('16', '53', '7', '4833', '3567', '0'), +('16', '53', '7', '71303', '2689', '0'), +('16', '53', '7', '2342', '2412', '0'), +('16', '53', '9', '4311', '2882', '0'), +('16', '53', '9', '4834', '2625', '0'), +('16', '53', '9', '12189', '2263', '0'), +('16', '53', '9', '10149', '2255', '0'), +('16', '53', '15', '10366', '8005', '0'), +('16', '53', '15', '10151', '7200', '0'), +('16', '53', '15', '14679', '6255', '0'), +('16', '53', '15', '14678', '5104', '0'), +('16', '53', '20', '11601', '10259', '0'), +('16', '53', '20', '2742', '4802', '0'), +('16', '53', '20', '1365', '4200', '0'), +('16', '53', '20', '2471', '3804', '0'), +('16', '53', '12', '4835', '8766', '0'), +('16', '53', '12', '20655', '5378', '0'), +('16', '53', '12', '11624', '4243', '0'), +('16', '53', '12', '2923', '3404', '0'), +('16', '53', '18', '4836', '4672', '0'), +('16', '53', '18', '2461', '2557', '0'), +('16', '53', '18', '2462', '2490', '0'), +('16', '53', '18', '4346', '2276', '0'), +('16', '53', '19', '4837', '3923', '0'), +('16', '53', '19', '68239', '3223', '0'), +('16', '53', '19', '2337', '1757', '0'), +('16', '53', '19', '3312', '1392', '0'), +('16', '53', '13', '27961', '84549', '0'), +('16', '53', '13', '45120', '65587', '0'), +('16', '53', '13', '5622', '48834', '0'), +('16', '53', '13', '11609', '48682', '0'), +('16', '53', '14', '11551', '12679', '0'), +('16', '53', '14', '13355', '2694', '0'), +('16', '53', '14', '14762', '2181', '0'), +('16', '53', '14', '6359', '1753', '0'), +('16', '53', '11', '14762', '2181', '0'), +('16', '53', '11', '20677', '1800', '0'), +('16', '53', '11', '9246', '604', '0'), +('16', '53', '11', '13748', '454', '0'), +('16', '54', '22', '10323', '0', '0'), +('16', '54', '22', '10664', '0', '0'), +('16', '54', '22', '9246', '0', '0'), +('16', '54', '22', '21509', '0', '0'), +('16', '54', '1', '27822', '4565', '0'), +('16', '54', '1', '14701', '3802', '0'), +('16', '54', '1', '14702', '2500', '0'), +('16', '54', '1', '10165', '1683', '0'), +('16', '54', '2', '4620', '4314', '0'), +('16', '54', '2', '1519', '3207', '0'), +('16', '54', '2', '4831', '3020', '0'), +('16', '54', '2', '10142', '3012', '0'), +('16', '54', '3', '10144', '1304', '0'), +('16', '54', '3', '14705', '990', '0'), +('16', '54', '3', '14706', '990', '0'), +('16', '54', '3', '1411', '853', '0'), +('16', '54', '5', '14703', '5500', '0'), +('16', '54', '5', '14700', '3453', '0'), +('16', '54', '5', '10055', '3255', '0'), +('16', '54', '5', '14670', '2482', '0'), +('16', '54', '8', '11621', '14171', '0'), +('16', '54', '8', '1409', '6312', '0'), +('16', '54', '8', '11551', '5129', '0'), +('16', '54', '8', '2400', '2808', '0'), +('16', '54', '6', '1557', '6760', '0'), +('16', '54', '6', '4302', '3314', '0'), +('16', '54', '6', '25062', '1817', '0'), +('16', '54', '6', '4165', '1812', '0'), +('16', '54', '17', '4832', '10331', '0'), +('16', '54', '17', '4309', '5576', '0'), +('16', '54', '17', '11623', '4979', '0'), +('16', '54', '17', '3307', '4091', '0'), +('16', '54', '7', '4343', '4570', '0'), +('16', '54', '7', '4833', '3567', '0'), +('16', '54', '7', '71303', '2689', '0'), +('16', '54', '7', '2342', '2430', '0'), +('16', '54', '9', '4311', '2925', '0'), +('16', '54', '9', '4834', '2625', '0'), +('16', '54', '9', '12189', '2263', '0'), +('16', '54', '9', '10149', '2255', '0'), +('16', '54', '15', '10366', '8005', '0'), +('16', '54', '15', '10151', '7200', '0'), +('16', '54', '15', '14679', '6255', '0'), +('16', '54', '15', '14678', '5104', '0'), +('16', '54', '20', '11601', '10319', '0'), +('16', '54', '20', '2742', '4862', '0'), +('16', '54', '20', '1365', '4200', '0'), +('16', '54', '20', '2471', '3804', '0'), +('16', '54', '12', '4835', '8796', '0'), +('16', '54', '12', '20655', '5390', '0'), +('16', '54', '12', '11624', '4285', '0'), +('16', '54', '12', '2923', '3404', '0'), +('16', '54', '18', '4836', '4702', '0'), +('16', '54', '18', '2461', '2557', '0'), +('16', '54', '18', '2462', '2532', '0'), +('16', '54', '18', '4346', '2276', '0'), +('16', '54', '19', '4837', '3923', '0'), +('16', '54', '19', '68239', '3223', '0'), +('16', '54', '19', '2337', '1757', '0'), +('16', '54', '19', '3312', '1392', '0'), +('16', '54', '13', '27961', '86600', '0'), +('16', '54', '13', '45120', '68592', '0'), +('16', '54', '13', '5622', '50046', '0'), +('16', '54', '13', '11609', '49844', '0'), +('16', '54', '14', '11551', '12679', '0'), +('16', '54', '14', '13355', '2754', '0'), +('16', '54', '14', '14762', '2181', '0'), +('16', '54', '14', '6359', '1753', '0'), +('16', '54', '11', '14762', '2181', '0'), +('16', '54', '11', '20677', '1800', '0'), +('16', '54', '11', '9246', '604', '0'), +('16', '54', '11', '13748', '454', '0'), +('16', '55', '22', '10323', '0', '0'), +('16', '55', '22', '10664', '0', '0'), +('16', '55', '22', '9246', '0', '0'), +('16', '55', '22', '21509', '0', '0'), +('16', '55', '1', '27822', '4565', '0'), +('16', '55', '1', '14701', '3802', '0'), +('16', '55', '1', '14702', '2500', '0'), +('16', '55', '1', '14623', '1689', '0'), +('16', '55', '2', '4620', '4356', '0'), +('16', '55', '2', '1519', '3207', '0'), +('16', '55', '2', '4831', '3020', '0'), +('16', '55', '2', '10142', '3012', '0'), +('16', '55', '3', '10144', '1304', '0'), +('16', '55', '3', '14705', '990', '0'), +('16', '55', '3', '14706', '990', '0'), +('16', '55', '3', '1411', '865', '0'), +('16', '55', '5', '14703', '5500', '0'), +('16', '55', '5', '14700', '3453', '0'), +('16', '55', '5', '10055', '3255', '0'), +('16', '55', '5', '14670', '2537', '0'), +('16', '55', '8', '11621', '14171', '0'), +('16', '55', '8', '1409', '6312', '0'), +('16', '55', '8', '11551', '5129', '0'), +('16', '55', '8', '2400', '2808', '0'), +('16', '55', '6', '1557', '6760', '0'), +('16', '55', '6', '4302', '3350', '0'), +('16', '55', '6', '25062', '1817', '0'), +('16', '55', '6', '4165', '1812', '0'), +('16', '55', '17', '4832', '10422', '0'), +('16', '55', '17', '4309', '5576', '0'), +('16', '55', '17', '11623', '4979', '0'), +('16', '55', '17', '3307', '4116', '0'), +('16', '55', '7', '4343', '4630', '0'), +('16', '55', '7', '4833', '3567', '0'), +('16', '55', '7', '71303', '2689', '0'), +('16', '55', '7', '2342', '2448', '0'), +('16', '55', '9', '4311', '2967', '0'), +('16', '55', '9', '4834', '2625', '0'), +('16', '55', '9', '12189', '2263', '0'), +('16', '55', '9', '10149', '2255', '0'), +('16', '55', '15', '10366', '8005', '0'), +('16', '55', '15', '10151', '7200', '0'), +('16', '55', '15', '14679', '6255', '0'), +('16', '55', '15', '14678', '5104', '0'), +('16', '55', '20', '11601', '10380', '0'), +('16', '55', '20', '2742', '4923', '0'), +('16', '55', '20', '1365', '4200', '0'), +('16', '55', '20', '2471', '3804', '0'), +('16', '55', '12', '4835', '8826', '0'), +('16', '55', '12', '20655', '5402', '0'), +('16', '55', '12', '11624', '4327', '0'), +('16', '55', '12', '2923', '3404', '0'), +('16', '55', '18', '4836', '4732', '0'), +('16', '55', '18', '2462', '2574', '0'), +('16', '55', '18', '2461', '2557', '0'), +('16', '55', '18', '4346', '2276', '0'), +('16', '55', '19', '4837', '3923', '0'), +('16', '55', '19', '68239', '3223', '0'), +('16', '55', '19', '2337', '1757', '0'), +('16', '55', '19', '3312', '1392', '0'), +('16', '55', '13', '27961', '88650', '0'), +('16', '55', '13', '45120', '71851', '0'), +('16', '55', '13', '5622', '51207', '0'), +('16', '55', '13', '11609', '51056', '0'), +('16', '55', '14', '11551', '12679', '0'), +('16', '55', '14', '13355', '2815', '0'), +('16', '55', '14', '14762', '2181', '0'), +('16', '55', '14', '6359', '1753', '0'), +('16', '55', '11', '14762', '2181', '0'), +('16', '55', '11', '20677', '1800', '0'), +('16', '55', '11', '9246', '604', '0'), +('16', '55', '11', '13748', '454', '0'), +('16', '56', '22', '10323', '0', '0'), +('16', '56', '22', '10664', '0', '0'), +('16', '56', '22', '9246', '0', '0'), +('16', '56', '22', '21509', '0', '0'), +('16', '56', '1', '27822', '4565', '0'), +('16', '56', '1', '14701', '3802', '0'), +('16', '56', '1', '14702', '2500', '0'), +('16', '56', '1', '14623', '1725', '0'), +('16', '56', '2', '4620', '4398', '0'), +('16', '56', '2', '1519', '3207', '0'), +('16', '56', '2', '4831', '3020', '0'), +('16', '56', '2', '10142', '3012', '0'), +('16', '56', '3', '10144', '1304', '0'), +('16', '56', '3', '14705', '990', '0'), +('16', '56', '3', '14706', '990', '0'), +('16', '56', '3', '1411', '877', '0'), +('16', '56', '5', '14703', '5500', '0'), +('16', '56', '5', '14700', '3453', '0'), +('16', '56', '5', '10055', '3255', '0'), +('16', '56', '5', '14670', '2591', '0'), +('16', '56', '8', '11621', '14171', '0'), +('16', '56', '8', '1409', '6312', '0'), +('16', '56', '8', '11551', '5129', '0'), +('16', '56', '8', '2400', '2808', '0'), +('16', '56', '6', '1557', '6760', '0'), +('16', '56', '6', '4302', '3386', '0'), +('16', '56', '6', '25062', '1817', '0'), +('16', '56', '6', '4165', '1812', '0'), +('16', '56', '17', '4832', '10513', '0'), +('16', '56', '17', '4309', '5576', '0'), +('16', '56', '17', '11623', '4979', '0'), +('16', '56', '17', '3307', '4140', '0'), +('16', '56', '7', '4343', '4691', '0'), +('16', '56', '7', '4833', '3567', '0'), +('16', '56', '7', '71303', '2689', '0'), +('16', '56', '7', '2342', '2467', '0'), +('16', '56', '9', '4311', '3009', '0'), +('16', '56', '9', '4834', '2625', '0'), +('16', '56', '9', '12189', '2263', '0'), +('16', '56', '9', '10149', '2255', '0'), +('16', '56', '15', '10366', '8005', '0'), +('16', '56', '15', '10151', '7200', '0'), +('16', '56', '15', '14679', '6255', '0'), +('16', '56', '15', '14678', '5104', '0'), +('16', '56', '20', '11601', '10440', '0'), +('16', '56', '20', '2742', '4983', '0'), +('16', '56', '20', '1365', '4200', '0'), +('16', '56', '20', '2471', '3804', '0'), +('16', '56', '12', '4835', '8857', '0'), +('16', '56', '12', '20655', '5414', '0'), +('16', '56', '12', '11624', '4370', '0'), +('16', '56', '12', '2923', '3404', '0'), +('16', '56', '18', '4836', '4763', '0'), +('16', '56', '18', '2462', '2617', '0'), +('16', '56', '18', '2461', '2557', '0'), +('16', '56', '18', '4346', '2276', '0'), +('16', '56', '19', '4837', '3923', '0'), +('16', '56', '19', '68239', '3223', '0'), +('16', '56', '19', '2337', '1757', '0'), +('16', '56', '19', '3312', '1392', '0'), +('16', '56', '13', '27961', '90700', '0'), +('16', '56', '13', '45120', '73497', '0'), +('16', '56', '13', '5622', '52419', '0'), +('16', '56', '13', '11609', '52217', '0'), +('16', '56', '14', '11551', '12679', '0'), +('16', '56', '14', '13355', '2875', '0'), +('16', '56', '14', '14762', '2181', '0'), +('16', '56', '14', '6359', '1753', '0'), +('16', '56', '11', '14762', '2181', '0'), +('16', '56', '11', '20677', '1800', '0'), +('16', '56', '11', '9246', '604', '0'), +('16', '56', '11', '13748', '454', '0'), +('16', '57', '22', '10323', '0', '0'), +('16', '57', '22', '10664', '0', '0'), +('16', '57', '22', '9246', '0', '0'), +('16', '57', '22', '21509', '0', '0'), +('16', '57', '1', '27822', '4565', '0'), +('16', '57', '1', '14701', '3802', '0'), +('16', '57', '1', '14702', '2500', '0'), +('16', '57', '1', '14623', '1761', '0'), +('16', '57', '2', '4620', '4441', '0'), +('16', '57', '2', '1519', '3207', '0'), +('16', '57', '2', '4831', '3020', '0'), +('16', '57', '2', '10142', '3012', '0'), +('16', '57', '3', '10144', '1304', '0'), +('16', '57', '3', '14705', '990', '0'), +('16', '57', '3', '14706', '990', '0'), +('16', '57', '3', '1411', '889', '0'), +('16', '57', '5', '14703', '5500', '0'), +('16', '57', '5', '14700', '3453', '0'), +('16', '57', '5', '10055', '3255', '0'), +('16', '57', '5', '14670', '2646', '0'), +('16', '57', '8', '11621', '14171', '0'), +('16', '57', '8', '1409', '6312', '0'), +('16', '57', '8', '11551', '5129', '0'), +('16', '57', '8', '2400', '2808', '0'), +('16', '57', '6', '1557', '6760', '0'), +('16', '57', '6', '4302', '3422', '0'), +('16', '57', '6', '25062', '1817', '0'), +('16', '57', '6', '4165', '1812', '0'), +('16', '57', '17', '4832', '10603', '0'), +('16', '57', '17', '4309', '5576', '0'), +('16', '57', '17', '11623', '4979', '0'), +('16', '57', '17', '3307', '4164', '0'), +('16', '57', '7', '4343', '4751', '0'), +('16', '57', '7', '4833', '3567', '0'), +('16', '57', '7', '71303', '2689', '0'), +('16', '57', '7', '2342', '2485', '0'), +('16', '57', '9', '4311', '3051', '0'), +('16', '57', '9', '4834', '2625', '0'), +('16', '57', '9', '12189', '2263', '0'), +('16', '57', '9', '10149', '2255', '0'), +('16', '57', '15', '10366', '8005', '0'), +('16', '57', '15', '10151', '7200', '0'), +('16', '57', '15', '14679', '6255', '0'), +('16', '57', '15', '14678', '5104', '0'), +('16', '57', '20', '11601', '10500', '0'), +('16', '57', '20', '2742', '5043', '0'), +('16', '57', '20', '1365', '4200', '0'), +('16', '57', '20', '2471', '3804', '0'), +('16', '57', '12', '4835', '8887', '0'), +('16', '57', '12', '20655', '5426', '0'), +('16', '57', '12', '11624', '4412', '0'), +('16', '57', '12', '2923', '3404', '0'), +('16', '57', '18', '4836', '4793', '0'), +('16', '57', '18', '2462', '2659', '0'), +('16', '57', '18', '2461', '2557', '0'), +('16', '57', '18', '4346', '2276', '0'), +('16', '57', '19', '4837', '3923', '0'), +('16', '57', '19', '68239', '3223', '0'), +('16', '57', '19', '2337', '1757', '0'), +('16', '57', '19', '3312', '1392', '0'), +('16', '57', '13', '27961', '92750', '0'), +('16', '57', '13', '45120', '75143', '0'), +('16', '57', '13', '5622', '53631', '0'), +('16', '57', '13', '11609', '53429', '0'), +('16', '57', '14', '11551', '12679', '0'), +('16', '57', '14', '13355', '2935', '0'), +('16', '57', '14', '14762', '2181', '0'), +('16', '57', '14', '6359', '1753', '0'), +('16', '57', '11', '14762', '2181', '0'), +('16', '57', '11', '20677', '1800', '0'), +('16', '57', '11', '9246', '604', '0'), +('16', '57', '11', '13748', '454', '0'), +('16', '58', '22', '10323', '0', '0'), +('16', '58', '22', '10664', '0', '0'), +('16', '58', '22', '9246', '0', '0'), +('16', '58', '22', '21509', '0', '0'), +('16', '58', '1', '27822', '4565', '0'), +('16', '58', '1', '14701', '3802', '0'), +('16', '58', '1', '14702', '2500', '0'), +('16', '58', '1', '14623', '1798', '0'), +('16', '58', '2', '4620', '4483', '0'), +('16', '58', '2', '1519', '3207', '0'), +('16', '58', '2', '4831', '3020', '0'), +('16', '58', '2', '10142', '3012', '0'), +('16', '58', '3', '10144', '1304', '0'), +('16', '58', '3', '14705', '990', '0'), +('16', '58', '3', '14706', '990', '0'), +('16', '58', '3', '1411', '901', '0'), +('16', '58', '5', '14703', '5500', '0'), +('16', '58', '5', '14700', '3453', '0'), +('16', '58', '5', '10055', '3255', '0'), +('16', '58', '5', '14670', '2700', '0'), +('16', '58', '8', '11621', '14171', '0'), +('16', '58', '8', '1409', '6312', '0'), +('16', '58', '8', '11551', '5129', '0'), +('16', '58', '8', '2400', '2808', '0'), +('16', '58', '6', '1557', '6760', '0'), +('16', '58', '6', '4302', '3459', '0'), +('16', '58', '6', '25062', '1817', '0'), +('16', '58', '6', '4165', '1812', '0'), +('16', '58', '17', '4832', '10694', '0'), +('16', '58', '17', '4309', '5576', '0'), +('16', '58', '17', '11623', '4979', '0'), +('16', '58', '17', '3307', '4188', '0'), +('16', '58', '7', '4343', '4811', '0'), +('16', '58', '7', '4833', '3567', '0'), +('16', '58', '7', '71303', '2689', '0'), +('16', '58', '7', '2342', '2503', '0'), +('16', '58', '9', '4311', '3094', '0'), +('16', '58', '9', '4834', '2625', '0'), +('16', '58', '9', '12189', '2263', '0'), +('16', '58', '9', '10149', '2255', '0'), +('16', '58', '15', '10366', '8005', '0'), +('16', '58', '15', '10151', '7200', '0'), +('16', '58', '15', '14679', '6255', '0'), +('16', '58', '15', '14678', '5104', '0'), +('16', '58', '20', '11601', '10561', '0'), +('16', '58', '20', '2742', '5104', '0'), +('16', '58', '20', '1365', '4200', '0'), +('16', '58', '20', '2471', '3804', '0'), +('16', '58', '12', '4835', '8917', '0'), +('16', '58', '12', '20655', '5438', '0'), +('16', '58', '12', '11624', '4454', '0'), +('16', '58', '12', '2923', '3404', '0'), +('16', '58', '18', '4836', '4823', '0'), +('16', '58', '18', '2462', '2701', '0'), +('16', '58', '18', '2461', '2557', '0'), +('16', '58', '18', '4346', '2276', '0'), +('16', '58', '19', '4837', '3923', '0'), +('16', '58', '19', '68239', '3223', '0'), +('16', '58', '19', '2337', '1757', '0'), +('16', '58', '19', '3312', '1392', '0'), +('16', '58', '13', '27961', '94800', '0'), +('16', '58', '13', '45120', '76789', '0'), +('16', '58', '13', '5622', '54793', '0'), +('16', '58', '13', '11609', '54641', '0'), +('16', '58', '14', '11551', '12679', '0'), +('16', '58', '14', '13355', '2996', '0'), +('16', '58', '14', '14762', '2181', '0'), +('16', '58', '14', '6359', '1753', '0'), +('16', '58', '11', '14762', '2181', '0'), +('16', '58', '11', '20677', '1800', '0'), +('16', '58', '11', '9246', '604', '0'), +('16', '58', '11', '13748', '454', '0'), +('16', '59', '22', '10323', '0', '0'), +('16', '59', '22', '10664', '0', '0'), +('16', '59', '22', '9246', '0', '0'), +('16', '59', '22', '21509', '0', '0'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '59', '1', '27822', '4565', '0'), +('16', '59', '1', '14701', '3802', '0'), +('16', '59', '1', '14702', '2500', '0'), +('16', '59', '1', '14623', '1834', '0'), +('16', '59', '2', '4620', '4525', '0'), +('16', '59', '2', '1519', '3207', '0'), +('16', '59', '2', '4831', '3020', '0'), +('16', '59', '2', '10142', '3012', '0'), +('16', '59', '3', '10144', '1304', '0'), +('16', '59', '3', '14705', '990', '0'), +('16', '59', '3', '14706', '990', '0'), +('16', '59', '3', '1411', '913', '0'), +('16', '59', '5', '14703', '5500', '0'), +('16', '59', '5', '14700', '3453', '0'), +('16', '59', '5', '10055', '3255', '0'), +('16', '59', '5', '14670', '2754', '0'), +('16', '59', '8', '11621', '14171', '0'), +('16', '59', '8', '1409', '6312', '0'), +('16', '59', '8', '11551', '5129', '0'), +('16', '59', '8', '2400', '2808', '0'), +('16', '59', '6', '1557', '6760', '0'), +('16', '59', '6', '4302', '3495', '0'), +('16', '59', '6', '25062', '1817', '0'), +('16', '59', '6', '4165', '1812', '0'), +('16', '59', '17', '4832', '10784', '0'), +('16', '59', '17', '4309', '5576', '0'), +('16', '59', '17', '11623', '4979', '0'), +('16', '59', '17', '3307', '4212', '0'), +('16', '59', '7', '4343', '4872', '0'), +('16', '59', '7', '4833', '3567', '0'), +('16', '59', '7', '71303', '2689', '0'), +('16', '59', '7', '2342', '2521', '0'), +('16', '59', '9', '4311', '3136', '0'), +('16', '59', '9', '4834', '2625', '0'), +('16', '59', '9', '12189', '2263', '0'), +('16', '59', '9', '10149', '2255', '0'), +('16', '59', '15', '10366', '8005', '0'), +('16', '59', '15', '10151', '7200', '0'), +('16', '59', '15', '14679', '6255', '0'), +('16', '59', '15', '14678', '5104', '0'), +('16', '59', '20', '11601', '10621', '0'), +('16', '59', '20', '2742', '5164', '0'), +('16', '59', '20', '1365', '4200', '0'), +('16', '59', '20', '2471', '3804', '0'), +('16', '59', '12', '4835', '8947', '0'), +('16', '59', '12', '20655', '5450', '0'), +('16', '59', '12', '11624', '4496', '0'), +('16', '59', '12', '2923', '3404', '0'), +('16', '59', '18', '4836', '4853', '0'), +('16', '59', '18', '2462', '2743', '0'), +('16', '59', '18', '2461', '2557', '0'), +('16', '59', '18', '4346', '2276', '0'), +('16', '59', '19', '4837', '3923', '0'), +('16', '59', '19', '68239', '3223', '0'), +('16', '59', '19', '2337', '1757', '0'), +('16', '59', '19', '3312', '1392', '0'), +('16', '59', '13', '27961', '96851', '0'), +('16', '59', '13', '45120', '78436', '0'), +('16', '59', '13', '5622', '56005', '0'), +('16', '59', '13', '11609', '55803', '0'), +('16', '59', '14', '11551', '12679', '0'), +('16', '59', '14', '13355', '3056', '0'), +('16', '59', '14', '14762', '2181', '0'), +('16', '59', '14', '6359', '1753', '0'), +('16', '59', '11', '14762', '2181', '0'), +('16', '59', '11', '20677', '1800', '0'), +('16', '59', '11', '9246', '604', '0'), +('16', '59', '11', '13748', '454', '0'), +('16', '60', '22', '66397', '0', '3'), +('16', '60', '22', '62787', '0', '3'), +('16', '60', '22', '61948', '0', '3'), +('16', '60', '22', '21805', '0', '3'), +('16', '60', '1', '26775', '16400', '3'), +('16', '60', '1', '28962', '15117', '3'), +('16', '60', '1', '28945', '12563', '3'), +('16', '60', '1', '29861', '11717', '3'), +('16', '60', '2', '26759', '14388', '3'), +('16', '60', '2', '2612', '12737', '3'), +('16', '60', '2', '26025', '12737', '3'), +('16', '60', '2', '29648', '12227', '3'), +('16', '60', '3', '26773', '16669', '3'), +('16', '60', '3', '28942', '13377', '3'), +('16', '60', '3', '28963', '11889', '3'), +('16', '60', '3', '31233', '11337', '3'), +('16', '60', '5', '8364', '18230', '3'), +('16', '60', '5', '28885', '17512', '3'), +('16', '60', '5', '27266', '13313', '3'), +('16', '60', '5', '7868', '13112', '3'), +('16', '60', '8', '26765', '20093', '3'), +('16', '60', '8', '26766', '19830', '3'), +('16', '60', '8', '31471', '19203', '3'), +('16', '60', '8', '28918', '13775', '3'), +('16', '60', '6', '28902', '20315', '3'), +('16', '60', '6', '28919', '13403', '3'), +('16', '60', '6', '31472', '13165', '3'), +('16', '60', '6', '30551', '13137', '3'), +('16', '60', '17', '28951', '12313', '3'), +('16', '60', '17', '30564', '11445', '3'), +('16', '60', '17', '10845', '10795', '3'), +('16', '60', '17', '27159', '10181', '3'), +('16', '60', '7', '26771', '16637', '3'), +('16', '60', '7', '28926', '14823', '3'), +('16', '60', '7', '7868', '13112', '3'), +('16', '60', '7', '26584', '12378', '3'), +('16', '60', '9', '31461', '19107', '3'), +('16', '60', '9', '7868', '13112', '3'), +('16', '60', '9', '26584', '12378', '3'), +('16', '60', '9', '5723', '11606', '3'), +('16', '60', '15', '26749', '14877', '3'), +('16', '60', '15', '27950', '11682', '3'), +('16', '60', '15', '26757', '11644', '3'), +('16', '60', '15', '63170', '11615', '3'), +('16', '60', '20', '31235', '18404', '3'), +('16', '60', '20', '28890', '17538', '3'), +('16', '60', '20', '31334', '16223', '3'), +('16', '60', '20', '26551', '15059', '3'), +('16', '60', '12', '25857', '17134', '3'), +('16', '60', '12', '28967', '14813', '3'), +('16', '60', '12', '28958', '12692', '3'), +('16', '60', '12', '26774', '12430', '3'), +('16', '60', '18', '28965', '14415', '3'), +('16', '60', '18', '26755', '11577', '3'), +('16', '60', '18', '28932', '11353', '3'), +('16', '60', '18', '8289', '11263', '3'), +('16', '60', '19', '30569', '19974', '3'), +('16', '60', '19', '51226', '17424', '3'), +('16', '60', '19', '28888', '15568', '3'), +('16', '60', '19', '7871', '11437', '3'), +('16', '60', '13', '28824', '124341', '3'), +('16', '60', '13', '31242', '116716', '3'), +('16', '60', '13', '30530', '116636', '3'), +('16', '60', '13', '2580', '114377', '3'), +('16', '60', '14', '26758', '11065', '3'), +('16', '60', '14', '27960', '5553', '3'), +('16', '60', '14', '27929', '3162', '3'), +('16', '60', '14', '14762', '2003', '3'), +('16', '60', '11', '26563', '16429', '3'), +('16', '60', '11', '30565', '12937', '3'), +('16', '60', '11', '1554', '11587', '3'), +('16', '60', '11', '26758', '11065', '3'), +('16', '60', '22', '9248', '0', '2'), +('16', '60', '22', '10323', '0', '2'), +('16', '60', '22', '12425', '0', '2'), +('16', '60', '22', '30014', '0', '2'), +('16', '60', '1', '2748', '8112', '2'), +('16', '60', '1', '5716', '7691', '2'), +('16', '60', '1', '31236', '7270', '2'), +('16', '60', '1', '62234', '5705', '2'), +('16', '60', '2', '26025', '13594', '2'), +('16', '60', '2', '2612', '13594', '2'), +('16', '60', '2', '29648', '13485', '2'), +('16', '60', '2', '25194', '13013', '2'), +('16', '60', '3', '31233', '12691', '2'), +('16', '60', '3', '31464', '11638', '2'), +('16', '60', '3', '31244', '9763', '2'), +('16', '60', '3', '1547', '6440', '2'), +('16', '60', '5', '27266', '13940', '2'), +('16', '60', '5', '31234', '13371', '2'), +('16', '60', '5', '31460', '13106', '2'), +('16', '60', '5', '1550', '11695', '2'), +('16', '60', '8', '31471', '20714', '2'), +('16', '60', '8', '11621', '12924', '2'), +('16', '60', '8', '1551', '11416', '2'), +('16', '60', '8', '25207', '11245', '2'), +('16', '60', '6', '31472', '14797', '2'), +('16', '60', '6', '5723', '12158', '2'), +('16', '60', '6', '24070', '11472', '2'), +('16', '60', '6', '31240', '11061', '2'), +('16', '60', '17', '27159', '11475', '2'), +('16', '60', '17', '10845', '11241', '2'), +('16', '60', '17', '27261', '10531', '2'), +('16', '60', '17', '27148', '10231', '2'), +('16', '60', '7', '5723', '12158', '2'), +('16', '60', '7', '29485', '7067', '2'), +('16', '60', '7', '31381', '6205', '2'), +('16', '60', '7', '31371', '4067', '2'), +('16', '60', '9', '31461', '20657', '2'), +('16', '60', '9', '31460', '13106', '2'), +('16', '60', '9', '5723', '12158', '2'), +('16', '60', '9', '31246', '7992', '2'), +('16', '60', '15', '31231', '12318', '2'), +('16', '60', '15', '25211', '11644', '2'), +('16', '60', '15', '30385', '11244', '2'), +('16', '60', '15', '31377', '9835', '2'), +('16', '60', '20', '31235', '20420', '2'), +('16', '60', '20', '31334', '16940', '2'), +('16', '60', '20', '2510', '12742', '2'), +('16', '60', '20', '25858', '12559', '2'), +('16', '60', '12', '25857', '17966', '2'), +('16', '60', '12', '31227', '13655', '2'), +('16', '60', '12', '31306', '11404', '2'), +('16', '60', '12', '31402', '10124', '2'), +('16', '60', '18', '31332', '7266', '2'), +('16', '60', '18', '31386', '7032', '2'), +('16', '60', '18', '31371', '4067', '2'), +('16', '60', '18', '26017', '3009', '2'), +('16', '60', '19', '24616', '11715', '2'), +('16', '60', '19', '29455', '8183', '2'), +('16', '60', '19', '1099', '7166', '2'), +('16', '60', '19', '31336', '4216', '2'), +('16', '60', '13', '31242', '117175', '2'), +('16', '60', '13', '2580', '115634', '2'), +('16', '60', '13', '31232', '111005', '2'), +('16', '60', '13', '31317', '105674', '2'), +('16', '60', '14', '11551', '2903', '2'), +('16', '60', '14', '14762', '2033', '2'), +('16', '60', '14', '6359', '1751', '2'), +('16', '60', '14', '9690', '1500', '2'), +('16', '60', '11', '1554', '12444', '2'), +('16', '60', '11', '2698', '10159', '2'), +('16', '60', '11', '31321', '7295', '2'), +('16', '60', '11', '29462', '6883', '2'), +('16', '60', '22', '10323', '0', '1'), +('16', '60', '22', '12425', '0', '1'), +('16', '60', '22', '10664', '0', '1'), +('16', '60', '22', '9246', '0', '1'), +('16', '60', '1', '5716', '7785', '1'), +('16', '60', '1', '62234', '6624', '1'), +('16', '60', '1', '5704', '5818', '1'), +('16', '60', '1', '5715', '5818', '1'), +('16', '60', '2', '10913', '11139', '1'), +('16', '60', '2', '62236', '4165', '1'), +('16', '60', '2', '1630', '3846', '1'), +('16', '60', '2', '3213', '3400', '1'), +('16', '60', '3', '46184', '6314', '1'), +('16', '60', '3', '1625', '3924', '1'), +('16', '60', '3', '5712', '2835', '1'), +('16', '60', '3', '11477', '2232', '1'), +('16', '60', '5', '14703', '5500', '1'), +('16', '60', '5', '14709', '3297', '1'), +('16', '60', '5', '14700', '3267', '1'), +('16', '60', '5', '8285', '3090', '1'), +('16', '60', '8', '11621', '13548', '1'), +('16', '60', '8', '1619', '12985', '1'), +('16', '60', '8', '5779', '9291', '1'), +('16', '60', '8', '1622', '9273', '1'), +('16', '60', '6', '5723', '13539', '1'), +('16', '60', '6', '5706', '8348', '1'), +('16', '60', '6', '1557', '6141', '1'), +('16', '60', '6', '11975', '3370', '1'), +('16', '60', '17', '10845', '12354', '1'), +('16', '60', '17', '55495', '11408', '1'), +('16', '60', '17', '4832', '6419', '1'), +('16', '60', '17', '4309', '4520', '1'), +('16', '60', '7', '5723', '13539', '1'), +('16', '60', '7', '62046', '4312', '1'), +('16', '60', '7', '4295', '3801', '1'), +('16', '60', '7', '4343', '2911', '1'), +('16', '60', '9', '5723', '13539', '1'), +('16', '60', '9', '5794', '2967', '1'), +('16', '60', '9', '4294', '2801', '1'), +('16', '60', '9', '10149', '1946', '1'), +('16', '60', '15', '5727', '9865', '1'), +('16', '60', '15', '10366', '8003', '1'), +('16', '60', '15', '10151', '7200', '1'), +('16', '60', '15', '5728', '6678', '1'), +('16', '60', '20', '1620', '10284', '1'), +('16', '60', '20', '11601', '8845', '1'), +('16', '60', '20', '1623', '4978', '1'), +('16', '60', '20', '1365', '4200', '1'), +('16', '60', '12', '4835', '7348', '1'), +('16', '60', '12', '20655', '4167', '1'), +('16', '60', '12', '2923', '3157', '1'), +('16', '60', '12', '3255', '2891', '1'), +('16', '60', '18', '4836', '2882', '1'), +('16', '60', '18', '2461', '2124', '1'), +('16', '60', '18', '1065', '2050', '1'), +('16', '60', '18', '4317', '1904', '1'), +('16', '60', '19', '24616', '12658', '1'), +('16', '60', '19', '4318', '3571', '1'), +('16', '60', '19', '4920', '2850', '1'), +('16', '60', '19', '4837', '2684', '1'), +('16', '60', '13', '27961', '97981', '1'), +('16', '60', '13', '5603', '86792', '1'), +('16', '60', '13', '24624', '81647', '1'), +('16', '60', '13', '45120', '79133', '1'), +('16', '60', '14', '11551', '7791', '1'), +('16', '60', '14', '14754', '2607', '1'), +('16', '60', '14', '14762', '2107', '1'), +('16', '60', '14', '13355', '1840', '1'), +('16', '60', '11', '5803', '5920', '1'), +('16', '60', '11', '46178', '5457', '1'), +('16', '60', '11', '62242', '4971', '1'), +('16', '60', '11', '79631', '4887', '1'), +('16', '61', '22', '66397', '0', '3'), +('16', '61', '22', '62787', '0', '3'), +('16', '61', '22', '61948', '0', '3'), +('16', '61', '22', '21805', '0', '3'), +('16', '61', '1', '26775', '16402', '3'), +('16', '61', '1', '28962', '15118', '3'), +('16', '61', '1', '28945', '12564', '3'), +('16', '61', '1', '29861', '11719', '3'), +('16', '61', '2', '26759', '14388', '3'), +('16', '61', '2', '2612', '12737', '3'), +('16', '61', '2', '26025', '12737', '3'), +('16', '61', '2', '29648', '12228', '3'), +('16', '61', '3', '26773', '16672', '3'), +('16', '61', '3', '28942', '13379', '3'), +('16', '61', '3', '28963', '11890', '3'), +('16', '61', '3', '31233', '11338', '3'), +('16', '61', '5', '8364', '18232', '3'), +('16', '61', '5', '28885', '17513', '3'), +('16', '61', '5', '27266', '13314', '3'), +('16', '61', '5', '7868', '13113', '3'), +('16', '61', '8', '26765', '20094', '3'), +('16', '61', '8', '26766', '19832', '3'), +('16', '61', '8', '31471', '19204', '3'), +('16', '61', '8', '28918', '13775', '3'), +('16', '61', '6', '28902', '20317', '3'), +('16', '61', '6', '28919', '13405', '3'), +('16', '61', '6', '31472', '13166', '3'), +('16', '61', '6', '30551', '13138', '3'), +('16', '61', '17', '28951', '12313', '3'), +('16', '61', '17', '30564', '11447', '3'), +('16', '61', '17', '10845', '10795', '3'), +('16', '61', '17', '27159', '10181', '3'), +('16', '61', '7', '26771', '16638', '3'), +('16', '61', '7', '28926', '14823', '3'), +('16', '61', '7', '7868', '13113', '3'), +('16', '61', '7', '26584', '12379', '3'), +('16', '61', '9', '31461', '19108', '3'), +('16', '61', '9', '7868', '13113', '3'), +('16', '61', '9', '26584', '12379', '3'), +('16', '61', '9', '5723', '11606', '3'), +('16', '61', '15', '26749', '14879', '3'), +('16', '61', '15', '27950', '11683', '3'), +('16', '61', '15', '26757', '11644', '3'), +('16', '61', '15', '63170', '11616', '3'), +('16', '61', '20', '31235', '18406', '3'), +('16', '61', '20', '28890', '17538', '3'), +('16', '61', '20', '31334', '16223', '3'), +('16', '61', '20', '26551', '15061', '3'), +('16', '61', '12', '25857', '17134', '3'), +('16', '61', '12', '28967', '14813', '3'), +('16', '61', '12', '28958', '12693', '3'), +('16', '61', '12', '26774', '12432', '3'), +('16', '61', '18', '28965', '14417', '3'), +('16', '61', '18', '26755', '11577', '3'), +('16', '61', '18', '28932', '11355', '3'), +('16', '61', '18', '8289', '11263', '3'), +('16', '61', '19', '30569', '19975', '3'), +('16', '61', '19', '51226', '17424', '3'), +('16', '61', '19', '28888', '15569', '3'), +('16', '61', '19', '7871', '11440', '3'), +('16', '61', '13', '28824', '124796', '3'), +('16', '61', '13', '31242', '116969', '3'), +('16', '61', '13', '30530', '116839', '3'), +('16', '61', '13', '2580', '114580', '3'), +('16', '61', '14', '26758', '11066', '3'), +('16', '61', '14', '27960', '5554', '3'), +('16', '61', '14', '27929', '3163', '3'), +('16', '61', '14', '14762', '2003', '3'), +('16', '61', '11', '26563', '16430', '3'), +('16', '61', '11', '30565', '12938', '3'), +('16', '61', '11', '1554', '11588', '3'), +('16', '61', '11', '26758', '11066', '3'), +('16', '62', '22', '66397', '0', '3'), +('16', '62', '22', '62787', '0', '3'), +('16', '62', '22', '61948', '0', '3'), +('16', '62', '22', '21805', '0', '3'), +('16', '62', '1', '26775', '16403', '3'), +('16', '62', '1', '28962', '15119', '3'), +('16', '62', '1', '28945', '12564', '3'), +('16', '62', '1', '29861', '11722', '3'), +('16', '62', '2', '26759', '14388', '3'), +('16', '62', '2', '2612', '12738', '3'), +('16', '62', '2', '26025', '12738', '3'), +('16', '62', '2', '29648', '12230', '3'), +('16', '62', '3', '26773', '16674', '3'), +('16', '62', '3', '28942', '13381', '3'), +('16', '62', '3', '28963', '11891', '3'), +('16', '62', '3', '31233', '11339', '3'), +('16', '62', '5', '8364', '18233', '3'), +('16', '62', '5', '28885', '17514', '3'), +('16', '62', '5', '27266', '13315', '3'), +('16', '62', '5', '7868', '13113', '3'), +('16', '62', '8', '26765', '20094', '3'), +('16', '62', '8', '26766', '19833', '3'), +('16', '62', '8', '31471', '19206', '3'), +('16', '62', '8', '28918', '13775', '3'), +('16', '62', '6', '28902', '20318', '3'), +('16', '62', '6', '28919', '13407', '3'), +('16', '62', '6', '31472', '13168', '3'), +('16', '62', '6', '30551', '13139', '3'), +('16', '62', '17', '28951', '12313', '3'), +('16', '62', '17', '30564', '11450', '3'), +('16', '62', '17', '10845', '10795', '3'), +('16', '62', '17', '27159', '10182', '3'), +('16', '62', '7', '26771', '16639', '3'), +('16', '62', '7', '28926', '14823', '3'), +('16', '62', '7', '7868', '13113', '3'), +('16', '62', '7', '26584', '12381', '3'), +('16', '62', '9', '31461', '19109', '3'), +('16', '62', '9', '7868', '13113', '3'), +('16', '62', '9', '26584', '12381', '3'), +('16', '62', '9', '5723', '11607', '3'), +('16', '62', '15', '26749', '14881', '3'), +('16', '62', '15', '27950', '11684', '3'), +('16', '62', '15', '26757', '11644', '3'), +('16', '62', '15', '63170', '11618', '3'), +('16', '62', '20', '31235', '18408', '3'), +('16', '62', '20', '28890', '17538', '3'), +('16', '62', '20', '31334', '16223', '3'), +('16', '62', '20', '26551', '15063', '3'), +('16', '62', '12', '25857', '17134', '3'), +('16', '62', '12', '28967', '14813', '3'), +('16', '62', '12', '28958', '12694', '3'), +('16', '62', '12', '26774', '12433', '3'), +('16', '62', '18', '28965', '14418', '3'), +('16', '62', '18', '26755', '11577', '3'), +('16', '62', '18', '28932', '11358', '3'), +('16', '62', '18', '8289', '11263', '3'), +('16', '62', '19', '30569', '19976', '3'), +('16', '62', '19', '51226', '17425', '3'), +('16', '62', '19', '28888', '15570', '3'), +('16', '62', '19', '7871', '11444', '3'), +('16', '62', '13', '28824', '125251', '3'), +('16', '62', '13', '31242', '117172', '3'), +('16', '62', '13', '30530', '117093', '3'), +('16', '62', '13', '2580', '114834', '3'), +('16', '62', '14', '26758', '11068', '3'), +('16', '62', '14', '27960', '5556', '3'), +('16', '62', '14', '27929', '3164', '3'), +('16', '62', '14', '14762', '2003', '3'), +('16', '62', '11', '26563', '16431', '3'), +('16', '62', '11', '30565', '12939', '3'), +('16', '62', '11', '1554', '11589', '3'), +('16', '62', '11', '26758', '11068', '3'), +('16', '63', '22', '66397', '0', '3'), +('16', '63', '22', '62787', '0', '3'), +('16', '63', '22', '61948', '0', '3'), +('16', '63', '22', '21805', '0', '3'), +('16', '63', '1', '26775', '16405', '3'), +('16', '63', '1', '28962', '15120', '3'), +('16', '63', '1', '28945', '12565', '3'), +('16', '63', '1', '29861', '11724', '3'), +('16', '63', '2', '26759', '14388', '3'), +('16', '63', '2', '2612', '12739', '3'), +('16', '63', '2', '26025', '12739', '3'), +('16', '63', '2', '29648', '12231', '3'), +('16', '63', '3', '26773', '16677', '3'), +('16', '63', '3', '28942', '13382', '3'), +('16', '63', '3', '28963', '11892', '3'), +('16', '63', '3', '31233', '11340', '3'), +('16', '63', '5', '8364', '18235', '3'), +('16', '63', '5', '28885', '17514', '3'), +('16', '63', '5', '27266', '13315', '3'), +('16', '63', '5', '7868', '13114', '3'), +('16', '63', '8', '26765', '20095', '3'), +('16', '63', '8', '26766', '19835', '3'), +('16', '63', '8', '31471', '19207', '3'), +('16', '63', '8', '28918', '13775', '3'), +('16', '63', '6', '28902', '20320', '3'), +('16', '63', '6', '28919', '13409', '3'), +('16', '63', '6', '31472', '13170', '3'), +('16', '63', '6', '30551', '13140', '3'), +('16', '63', '17', '28951', '12313', '3'), +('16', '63', '17', '30564', '11453', '3'), +('16', '63', '17', '10845', '10795', '3'), +('16', '63', '17', '27159', '10183', '3'), +('16', '63', '7', '26771', '16640', '3'), +('16', '63', '7', '28926', '14823', '3'), +('16', '63', '7', '7868', '13114', '3'), +('16', '63', '7', '26584', '12382', '3'), +('16', '63', '9', '31461', '19110', '3'), +('16', '63', '9', '7868', '13114', '3'), +('16', '63', '9', '26584', '12382', '3'), +('16', '63', '9', '5723', '11607', '3'), +('16', '63', '15', '26749', '14882', '3'), +('16', '63', '15', '27950', '11685', '3'), +('16', '63', '15', '26757', '11644', '3'), +('16', '63', '15', '63170', '11619', '3'), +('16', '63', '20', '31235', '18410', '3'), +('16', '63', '20', '28890', '17538', '3'), +('16', '63', '20', '31334', '16223', '3'), +('16', '63', '20', '26551', '15065', '3'), +('16', '63', '12', '25857', '17134', '3'), +('16', '63', '12', '28967', '14813', '3'), +('16', '63', '12', '28958', '12695', '3'), +('16', '63', '12', '26774', '12435', '3'), +('16', '63', '18', '28965', '14420', '3'), +('16', '63', '18', '26755', '11577', '3'), +('16', '63', '18', '28932', '11360', '3'), +('16', '63', '18', '8289', '11263', '3'), +('16', '63', '19', '30569', '19977', '3'), +('16', '63', '19', '51226', '17426', '3'), +('16', '63', '19', '28888', '15570', '3'), +('16', '63', '19', '7871', '11447', '3'), +('16', '63', '13', '28824', '125706', '3'), +('16', '63', '13', '31242', '117375', '3'), +('16', '63', '13', '30530', '117296', '3'), +('16', '63', '13', '2580', '115037', '3'), +('16', '63', '14', '26758', '11070', '3'), +('16', '63', '14', '27960', '5557', '3'), +('16', '63', '14', '27929', '3166', '3'), +('16', '63', '14', '14762', '2003', '3'), +('16', '63', '11', '26563', '16432', '3'), +('16', '63', '11', '30565', '12940', '3'), +('16', '63', '11', '1554', '11590', '3'), +('16', '63', '11', '26758', '11070', '3'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '64', '22', '66397', '0', '3'), +('16', '64', '22', '62787', '0', '3'), +('16', '64', '22', '61948', '0', '3'), +('16', '64', '22', '21805', '0', '3'), +('16', '64', '1', '26775', '16406', '3'), +('16', '64', '1', '28962', '15121', '3'), +('16', '64', '1', '28945', '12565', '3'), +('16', '64', '1', '29861', '11727', '3'), +('16', '64', '2', '26759', '14388', '3'), +('16', '64', '2', '2612', '12740', '3'), +('16', '64', '2', '26025', '12740', '3'), +('16', '64', '2', '29648', '12232', '3'), +('16', '64', '3', '26773', '16679', '3'), +('16', '64', '3', '28942', '13384', '3'), +('16', '64', '3', '28963', '11893', '3'), +('16', '64', '3', '31233', '11341', '3'), +('16', '64', '5', '8364', '18236', '3'), +('16', '64', '5', '28885', '17515', '3'), +('16', '64', '5', '27266', '13316', '3'), +('16', '64', '5', '7868', '13115', '3'), +('16', '64', '8', '26765', '20095', '3'), +('16', '64', '8', '26766', '19836', '3'), +('16', '64', '8', '31471', '19209', '3'), +('16', '64', '8', '28918', '13775', '3'), +('16', '64', '6', '28902', '20321', '3'), +('16', '64', '6', '28919', '13411', '3'), +('16', '64', '6', '31472', '13171', '3'), +('16', '64', '6', '30551', '13142', '3'), +('16', '64', '17', '28951', '12313', '3'), +('16', '64', '17', '30564', '11455', '3'), +('16', '64', '17', '10845', '10795', '3'), +('16', '64', '17', '27159', '10184', '3'), +('16', '64', '7', '26771', '16641', '3'), +('16', '64', '7', '28926', '14823', '3'), +('16', '64', '7', '7868', '13115', '3'), +('16', '64', '7', '26584', '12384', '3'), +('16', '64', '9', '31461', '19111', '3'), +('16', '64', '9', '7868', '13115', '3'), +('16', '64', '9', '26584', '12384', '3'), +('16', '64', '9', '5723', '11608', '3'), +('16', '64', '15', '26749', '14884', '3'), +('16', '64', '15', '27950', '11686', '3'), +('16', '64', '15', '26757', '11645', '3'), +('16', '64', '15', '63170', '11620', '3'), +('16', '64', '20', '31235', '18412', '3'), +('16', '64', '20', '28890', '17538', '3'), +('16', '64', '20', '31334', '16223', '3'), +('16', '64', '20', '26551', '15067', '3'), +('16', '64', '12', '25857', '17134', '3'), +('16', '64', '12', '28967', '14813', '3'), +('16', '64', '12', '28958', '12696', '3'), +('16', '64', '12', '26774', '12436', '3'), +('16', '64', '18', '28965', '14421', '3'), +('16', '64', '18', '26755', '11577', '3'), +('16', '64', '18', '28932', '11362', '3'), +('16', '64', '18', '8289', '11263', '3'), +('16', '64', '19', '30569', '19978', '3'), +('16', '64', '19', '51226', '17426', '3'), +('16', '64', '19', '28888', '15571', '3'), +('16', '64', '19', '7871', '11450', '3'), +('16', '64', '13', '28824', '126160', '3'), +('16', '64', '13', '31242', '117628', '3'), +('16', '64', '13', '30530', '117499', '3'), +('16', '64', '13', '28825', '115301', '3'), +('16', '64', '14', '26758', '11071', '3'), +('16', '64', '14', '27960', '5559', '3'), +('16', '64', '14', '27929', '3167', '3'), +('16', '64', '14', '14762', '2003', '3'), +('16', '64', '11', '26563', '16433', '3'), +('16', '64', '11', '30565', '12941', '3'), +('16', '64', '11', '1554', '11591', '3'), +('16', '64', '11', '26758', '11071', '3'), +('16', '65', '22', '62787', '0', '7'), +('16', '65', '22', '21810', '0', '7'), +('16', '65', '22', '66397', '0', '7'), +('16', '65', '22', '61948', '0', '7'), +('16', '65', '1', '68949', '37460', '7'), +('16', '65', '1', '69166', '35119', '7'), +('16', '65', '1', '7125', '29920', '7'), +('16', '65', '1', '69063', '28861', '7'), +('16', '65', '2', '28605', '29479', '7'), +('16', '65', '2', '28648', '29368', '7'), +('16', '65', '2', '69088', '27242', '7'), +('16', '65', '2', '67727', '24697', '7'), +('16', '65', '3', '69157', '32087', '7'), +('16', '65', '3', '69069', '29593', '7'), +('16', '65', '3', '69074', '27437', '7'), +('16', '65', '3', '69068', '27059', '7'), +('16', '65', '5', '67625', '34381', '7'), +('16', '65', '5', '69135', '31691', '7'), +('16', '65', '5', '68808', '31530', '7'), +('16', '65', '5', '7769', '30025', '7'), +('16', '65', '8', '69165', '43655', '7'), +('16', '65', '8', '69064', '40676', '7'), +('16', '65', '8', '69072', '36996', '7'), +('16', '65', '8', '69065', '29110', '7'), +('16', '65', '6', '68757', '35989', '7'), +('16', '65', '6', '69130', '31439', '7'), +('16', '65', '6', '69073', '30710', '7'), +('16', '65', '6', '13674', '30096', '7'), +('16', '65', '17', '69151', '38322', '7'), +('16', '65', '17', '68976', '28230', '7'), +('16', '65', '17', '68780', '28017', '7'), +('16', '65', '17', '55511', '24615', '7'), +('16', '65', '7', '69169', '29684', '7'), +('16', '65', '7', '69080', '29139', '7'), +('16', '65', '7', '68706', '29096', '7'), +('16', '65', '7', '68891', '27297', '7'), +('16', '65', '9', '69127', '33381', '7'), +('16', '65', '9', '69099', '29433', '7'), +('16', '65', '9', '68766', '26731', '7'), +('16', '65', '9', '68894', '25038', '7'), +('16', '65', '15', '69160', '32924', '7'), +('16', '65', '15', '69070', '31206', '7'), +('16', '65', '15', '69131', '30803', '7'), +('16', '65', '15', '69061', '29058', '7'), +('16', '65', '20', '69134', '37274', '7'), +('16', '65', '20', '16156', '37134', '7'), +('16', '65', '20', '67625', '34381', '7'), +('16', '65', '20', '68951', '29271', '7'), +('16', '65', '12', '69253', '31417', '7'), +('16', '65', '12', '69084', '26695', '7'), +('16', '65', '12', '28246', '25259', '7'), +('16', '65', '12', '68892', '23933', '7'), +('16', '65', '18', '69147', '36201', '7'), +('16', '65', '18', '68977', '30373', '7'), +('16', '65', '18', '68749', '27319', '7'), +('16', '65', '18', '28651', '24851', '7'), +('16', '65', '19', '69178', '30743', '7'), +('16', '65', '19', '69076', '28568', '7'), +('16', '65', '19', '68893', '27127', '7'), +('16', '65', '19', '19094', '23046', '7'), +('16', '65', '13', '69117', '208898', '7'), +('16', '65', '13', '69043', '191301', '7'), +('16', '65', '13', '68741', '186265', '7'), +('16', '65', '13', '69096', '186166', '7'), +('16', '65', '14', '69155', '30509', '7'), +('16', '65', '14', '28656', '20306', '7'), +('16', '65', '14', '69428', '18218', '7'), +('16', '65', '14', '26788', '17498', '7'), +('16', '65', '11', '68809', '42065', '7'), +('16', '65', '11', '67606', '34151', '7'), +('16', '65', '11', '69158', '32734', '7'), +('16', '65', '11', '68952', '32605', '7'), +('16', '65', '22', '62787', '0', '6'), +('16', '65', '22', '21810', '0', '6'), +('16', '65', '22', '66397', '0', '6'), +('16', '65', '22', '61948', '0', '6'), +('16', '65', '1', '7125', '29920', '6'), +('16', '65', '1', '32106', '25884', '6'), +('16', '65', '1', '7123', '25405', '6'), +('16', '65', '1', '4119', '20820', '6'), +('16', '65', '2', '28605', '29479', '6'), +('16', '65', '2', '28648', '29368', '6'), +('16', '65', '2', '28653', '16613', '6'), +('16', '65', '2', '55513', '16198', '6'), +('16', '65', '3', '26982', '25509', '6'), +('16', '65', '3', '29174', '21302', '6'), +('16', '65', '3', '9435', '20850', '6'), +('16', '65', '3', '12592', '19956', '6'), +('16', '65', '5', '7769', '30025', '6'), +('16', '65', '5', '8977', '24493', '6'), +('16', '65', '5', '28654', '23125', '6'), +('16', '65', '5', '8774', '18795', '6'), +('16', '65', '8', '15805', '25001', '6'), +('16', '65', '8', '15824', '22989', '6'), +('16', '65', '8', '15842', '21478', '6'), +('16', '65', '8', '15847', '20692', '6'), +('16', '65', '6', '13674', '30096', '6'), +('16', '65', '6', '19144', '23076', '6'), +('16', '65', '6', '28658', '21438', '6'), +('16', '65', '6', '28902', '20323', '6'), +('16', '65', '17', '55511', '24615', '6'), +('16', '65', '17', '14961', '20601', '6'), +('16', '65', '17', '69403', '19129', '6'), +('16', '65', '17', '68076', '17068', '6'), +('16', '65', '7', '16097', '24212', '6'), +('16', '65', '7', '68197', '22537', '6'), +('16', '65', '7', '55508', '19690', '6'), +('16', '65', '7', '26771', '16642', '6'), +('16', '65', '9', '16097', '24212', '6'), +('16', '65', '9', '21993', '24120', '6'), +('16', '65', '9', '11096', '23632', '6'), +('16', '65', '9', '28666', '23388', '6'), +('16', '65', '15', '26989', '23917', '6'), +('16', '65', '15', '68111', '23150', '6'), +('16', '65', '15', '9959', '23008', '6'), +('16', '65', '15', '10948', '21702', '6'), +('16', '65', '20', '16156', '37134', '6'), +('16', '65', '20', '22880', '24374', '6'), +('16', '65', '20', '16097', '24212', '6'), +('16', '65', '20', '15873', '22035', '6'), +('16', '65', '12', '28246', '25259', '6'), +('16', '65', '12', '27000', '23650', '6'), +('16', '65', '12', '55514', '19319', '6'), +('16', '65', '12', '25857', '17134', '6'), +('16', '65', '18', '28651', '24851', '6'), +('16', '65', '18', '55512', '22177', '6'), +('16', '65', '18', '28965', '14423', '6'), +('16', '65', '18', '26755', '11577', '6'), +('16', '65', '19', '19094', '23046', '6'), +('16', '65', '19', '30569', '19980', '6'), +('16', '65', '19', '26988', '19785', '6'), +('16', '65', '19', '55509', '18151', '6'), +('16', '65', '13', '26092', '174705', '6'), +('16', '65', '13', '24879', '156197', '6'), +('16', '65', '13', '29172', '149436', '6'), +('16', '65', '13', '68199', '143505', '6'), +('16', '65', '14', '28656', '20306', '6'), +('16', '65', '14', '26788', '17498', '6'), +('16', '65', '14', '28798', '13251', '6'), +('16', '65', '14', '26758', '11073', '6'), +('16', '65', '11', '26987', '29853', '6'), +('16', '65', '11', '20496', '25962', '6'), +('16', '65', '11', '14733', '23338', '6'), +('16', '65', '11', '20625', '21437', '6'), +('16', '65', '22', '62787', '0', '5'), +('16', '65', '22', '21810', '0', '5'), +('16', '65', '22', '66397', '0', '5'), +('16', '65', '22', '61948', '0', '5'), +('16', '65', '1', '7125', '29920', '5'), +('16', '65', '1', '32106', '25884', '5'), +('16', '65', '1', '7123', '25405', '5'), +('16', '65', '1', '4119', '20820', '5'), +('16', '65', '2', '28605', '29479', '5'), +('16', '65', '2', '28648', '29368', '5'), +('16', '65', '2', '28653', '16613', '5'), +('16', '65', '2', '55513', '16198', '5'), +('16', '65', '3', '26982', '25509', '5'), +('16', '65', '3', '29174', '21302', '5'), +('16', '65', '3', '9435', '20850', '5'), +('16', '65', '3', '12592', '19956', '5'), +('16', '65', '5', '7769', '30025', '5'), +('16', '65', '5', '8977', '24493', '5'), +('16', '65', '5', '28654', '23125', '5'), +('16', '65', '5', '8774', '18795', '5'), +('16', '65', '8', '15805', '25001', '5'), +('16', '65', '8', '15824', '22989', '5'), +('16', '65', '8', '15842', '21478', '5'), +('16', '65', '8', '15847', '20692', '5'), +('16', '65', '6', '13674', '30096', '5'), +('16', '65', '6', '19144', '23076', '5'), +('16', '65', '6', '28658', '21438', '5'), +('16', '65', '6', '28902', '20323', '5'), +('16', '65', '17', '55511', '24615', '5'), +('16', '65', '17', '14961', '20601', '5'), +('16', '65', '17', '30923', '13088', '5'), +('16', '65', '17', '14962', '12451', '5'), +('16', '65', '7', '16097', '24212', '5'), +('16', '65', '7', '68197', '22537', '5'), +('16', '65', '7', '55508', '19690', '5'), +('16', '65', '7', '26771', '16642', '5'), +('16', '65', '9', '16097', '24212', '5'), +('16', '65', '9', '21993', '24120', '5'), +('16', '65', '9', '11096', '23632', '5'), +('16', '65', '9', '28666', '23388', '5'), +('16', '65', '15', '26989', '23917', '5'), +('16', '65', '15', '9959', '23008', '5'), +('16', '65', '15', '10948', '21702', '5'), +('16', '65', '15', '26993', '21030', '5'), +('16', '65', '20', '16156', '37134', '5'), +('16', '65', '20', '22880', '24374', '5'), +('16', '65', '20', '16097', '24212', '5'), +('16', '65', '20', '15873', '22035', '5'), +('16', '65', '12', '28246', '25259', '5'), +('16', '65', '12', '27000', '23650', '5'), +('16', '65', '12', '55514', '19319', '5'), +('16', '65', '12', '25857', '17134', '5'), +('16', '65', '18', '28651', '24851', '5'), +('16', '65', '18', '55512', '22177', '5'), +('16', '65', '18', '28965', '14423', '5'), +('16', '65', '18', '26755', '11577', '5'), +('16', '65', '19', '19094', '23046', '5'), +('16', '65', '19', '30569', '19980', '5'), +('16', '65', '19', '26988', '19785', '5'), +('16', '65', '19', '55509', '18151', '5'), +('16', '65', '13', '26092', '174705', '5'), +('16', '65', '13', '24879', '156197', '5'), +('16', '65', '13', '29172', '149436', '5'), +('16', '65', '13', '68199', '143505', '5'), +('16', '65', '14', '28656', '20306', '5'), +('16', '65', '14', '26788', '17498', '5'), +('16', '65', '14', '28798', '13251', '5'), +('16', '65', '14', '26758', '11073', '5'), +('16', '65', '11', '26987', '29853', '5'), +('16', '65', '11', '20496', '25962', '5'), +('16', '65', '11', '14733', '23338', '5'), +('16', '65', '11', '20625', '21437', '5'), +('16', '65', '22', '62787', '0', '4'), +('16', '65', '22', '21810', '0', '4'), +('16', '65', '22', '66397', '0', '4'), +('16', '65', '22', '61948', '0', '4'), +('16', '65', '1', '7125', '29920', '4'), +('16', '65', '1', '32106', '25884', '4'), +('16', '65', '1', '7123', '25405', '4'), +('16', '65', '1', '4119', '20820', '4'), +('16', '65', '2', '28605', '29479', '4'), +('16', '65', '2', '28648', '29368', '4'), +('16', '65', '2', '28653', '16613', '4'), +('16', '65', '2', '55513', '16198', '4'), +('16', '65', '3', '26982', '25509', '4'), +('16', '65', '3', '29174', '21302', '4'), +('16', '65', '3', '9435', '20850', '4'), +('16', '65', '3', '12592', '19956', '4'), +('16', '65', '5', '7769', '30025', '4'), +('16', '65', '5', '8977', '24493', '4'), +('16', '65', '5', '28654', '23125', '4'), +('16', '65', '5', '8774', '18795', '4'), +('16', '65', '8', '15805', '25001', '4'), +('16', '65', '8', '15824', '22989', '4'), +('16', '65', '8', '15842', '21478', '4'), +('16', '65', '8', '15847', '20692', '4'), +('16', '65', '6', '13674', '30096', '4'), +('16', '65', '6', '19144', '23076', '4'), +('16', '65', '6', '28658', '21438', '4'), +('16', '65', '6', '28902', '20323', '4'), +('16', '65', '17', '55511', '24615', '4'), +('16', '65', '17', '14961', '20601', '4'), +('16', '65', '17', '30923', '13088', '4'), +('16', '65', '17', '14962', '12451', '4'), +('16', '65', '7', '16097', '24212', '4'), +('16', '65', '7', '68197', '22537', '4'), +('16', '65', '7', '55508', '19690', '4'), +('16', '65', '7', '26771', '16642', '4'), +('16', '65', '9', '16097', '24212', '4'), +('16', '65', '9', '21993', '24120', '4'), +('16', '65', '9', '11096', '23632', '4'), +('16', '65', '9', '28666', '23388', '4'), +('16', '65', '15', '26989', '23917', '4'), +('16', '65', '15', '9959', '23008', '4'), +('16', '65', '15', '10948', '21702', '4'), +('16', '65', '15', '26993', '21030', '4'), +('16', '65', '20', '16156', '37134', '4'), +('16', '65', '20', '22880', '24374', '4'), +('16', '65', '20', '16097', '24212', '4'), +('16', '65', '20', '15873', '22035', '4'), +('16', '65', '12', '28246', '25259', '4'), +('16', '65', '12', '27000', '23650', '4'), +('16', '65', '12', '55514', '19319', '4'), +('16', '65', '12', '25857', '17134', '4'), +('16', '65', '18', '28651', '24851', '4'), +('16', '65', '18', '55512', '22177', '4'), +('16', '65', '18', '28965', '14423', '4'), +('16', '65', '18', '26755', '11577', '4'), +('16', '65', '19', '19094', '23046', '4'), +('16', '65', '19', '30569', '19980', '4'), +('16', '65', '19', '26988', '19785', '4'), +('16', '65', '19', '55509', '18151', '4'), +('16', '65', '13', '26092', '174705', '4'), +('16', '65', '13', '24879', '156197', '4'), +('16', '65', '13', '29172', '149436', '4'), +('16', '65', '13', '68199', '143505', '4'), +('16', '65', '14', '28656', '20306', '4'), +('16', '65', '14', '26788', '17498', '4'), +('16', '65', '14', '28798', '13251', '4'), +('16', '65', '14', '26758', '11073', '4'), +('16', '65', '11', '26987', '29853', '4'), +('16', '65', '11', '20496', '25962', '4'), +('16', '65', '11', '14733', '23338', '4'), +('16', '65', '11', '20625', '21437', '4'), +('16', '66', '22', '62787', '0', '7'), +('16', '66', '22', '21810', '0', '7'), +('16', '66', '22', '66397', '0', '7'), +('16', '66', '22', '61948', '0', '7'), +('16', '66', '1', '68949', '37462', '7'), +('16', '66', '1', '69166', '35121', '7'), +('16', '66', '1', '7125', '29921', '7'), +('16', '66', '1', '69063', '28863', '7'), +('16', '66', '2', '28605', '29480', '7'), +('16', '66', '2', '28648', '29368', '7'), +('16', '66', '2', '69088', '27244', '7'), +('16', '66', '2', '67727', '24700', '7'), +('16', '66', '3', '69157', '32089', '7'), +('16', '66', '3', '69069', '29596', '7'), +('16', '66', '3', '69074', '27439', '7'), +('16', '66', '3', '69068', '27061', '7'), +('16', '66', '5', '67625', '34382', '7'), +('16', '66', '5', '69135', '31694', '7'), +('16', '66', '5', '68808', '31532', '7'), +('16', '66', '5', '7769', '30025', '7'), +('16', '66', '8', '69165', '43658', '7'), +('16', '66', '8', '69064', '40677', '7'), +('16', '66', '8', '69072', '36998', '7'), +('16', '66', '8', '69065', '29112', '7'), +('16', '66', '6', '68757', '35991', '7'), +('16', '66', '6', '69130', '31441', '7'), +('16', '66', '6', '69073', '30710', '7'), +('16', '66', '6', '13674', '30098', '7'), +('16', '66', '17', '69151', '38325', '7'), +('16', '66', '17', '68976', '28232', '7'), +('16', '66', '17', '68780', '28020', '7'), +('16', '66', '17', '55511', '24618', '7'), +('16', '66', '7', '69169', '29686', '7'), +('16', '66', '7', '69080', '29141', '7'), +('16', '66', '7', '68706', '29097', '7'), +('16', '66', '7', '68891', '27300', '7'), +('16', '66', '9', '69127', '33382', '7'), +('16', '66', '9', '69099', '29435', '7'), +('16', '66', '9', '68766', '26733', '7'), +('16', '66', '9', '68894', '25040', '7'), +('16', '66', '15', '69160', '32926', '7'), +('16', '66', '15', '69070', '31207', '7'), +('16', '66', '15', '69131', '30803', '7'), +('16', '66', '15', '69061', '29061', '7'), +('16', '66', '20', '69134', '37276', '7'), +('16', '66', '20', '16156', '37136', '7'), +('16', '66', '20', '67625', '34382', '7'), +('16', '66', '20', '68951', '29273', '7'), +('16', '66', '12', '69253', '31420', '7'), +('16', '66', '12', '69084', '26695', '7'), +('16', '66', '12', '28246', '25260', '7'), +('16', '66', '12', '68892', '23935', '7'), +('16', '66', '18', '69147', '36203', '7'), +('16', '66', '18', '68977', '30375', '7'), +('16', '66', '18', '68749', '27321', '7'), +('16', '66', '18', '28651', '24854', '7'), +('16', '66', '19', '69178', '30745', '7'), +('16', '66', '19', '69076', '28570', '7'), +('16', '66', '19', '68893', '27128', '7'), +('16', '66', '19', '19094', '23047', '7'), +('16', '66', '13', '69117', '209424', '7'), +('16', '66', '13', '69043', '191795', '7'), +('16', '66', '13', '68741', '186771', '7'), +('16', '66', '13', '69096', '186659', '7'), +('16', '66', '14', '69155', '30511', '7'), +('16', '66', '14', '28656', '20306', '7'), +('16', '66', '14', '69428', '18219', '7'), +('16', '66', '14', '26788', '17500', '7'), +('16', '66', '11', '68809', '42318', '7'), +('16', '66', '11', '67606', '34153', '7'), +('16', '66', '11', '69158', '32736', '7'), +('16', '66', '11', '68952', '32607', '7'), +('16', '67', '22', '62787', '0', '7'), +('16', '67', '22', '21810', '0', '7'), +('16', '67', '22', '66397', '0', '7'), +('16', '67', '22', '61948', '0', '7'), +('16', '67', '1', '68949', '37465', '7'), +('16', '67', '1', '69166', '35123', '7'), +('16', '67', '1', '7125', '29922', '7'), +('16', '67', '1', '69063', '28866', '7'), +('16', '67', '2', '28605', '29482', '7'), +('16', '67', '2', '28648', '29368', '7'), +('16', '67', '2', '69088', '27246', '7'), +('16', '67', '2', '67727', '24703', '7'), +('16', '67', '3', '69157', '32091', '7'), +('16', '67', '3', '69069', '29600', '7'), +('16', '67', '3', '69074', '27441', '7'), +('16', '67', '3', '69068', '27063', '7'), +('16', '67', '5', '67625', '34384', '7'), +('16', '67', '5', '69135', '31697', '7'), +('16', '67', '5', '68808', '31534', '7'), +('16', '67', '5', '7769', '30025', '7'), +('16', '67', '8', '69165', '43661', '7'), +('16', '67', '8', '69064', '40679', '7'), +('16', '67', '8', '69072', '37001', '7'), +('16', '67', '8', '69065', '29115', '7'), +('16', '67', '6', '68757', '35993', '7'), +('16', '67', '6', '69130', '31443', '7'), +('16', '67', '6', '69073', '30710', '7'), +('16', '67', '6', '13674', '30100', '7'), +('16', '67', '17', '69151', '38327', '7'), +('16', '67', '17', '68976', '28235', '7'), +('16', '67', '17', '68780', '28023', '7'), +('16', '67', '17', '55511', '24620', '7'), +('16', '67', '7', '69169', '29688', '7'), +('16', '67', '7', '69080', '29143', '7'), +('16', '67', '7', '68706', '29099', '7'), +('16', '67', '7', '68891', '27303', '7'), +('16', '67', '9', '69127', '33384', '7'), +('16', '67', '9', '69099', '29436', '7'), +('16', '67', '9', '68766', '26735', '7'), +('16', '67', '9', '68894', '25041', '7'), +('16', '67', '15', '69160', '32928', '7'), +('16', '67', '15', '69070', '31209', '7'), +('16', '67', '15', '69131', '30803', '7'), +('16', '67', '15', '69061', '29065', '7'), +('16', '67', '20', '69134', '37278', '7'), +('16', '67', '20', '16156', '37138', '7'), +('16', '67', '20', '67625', '34384', '7'), +('16', '67', '20', '68951', '29276', '7'), +('16', '67', '12', '69253', '31423', '7'), +('16', '67', '12', '69084', '26695', '7'), +('16', '67', '12', '28246', '25262', '7'), +('16', '67', '12', '68892', '23937', '7'), +('16', '67', '18', '69147', '36206', '7'), +('16', '67', '18', '68977', '30376', '7'), +('16', '67', '18', '68749', '27323', '7'), +('16', '67', '18', '28651', '24857', '7'), +('16', '67', '19', '69178', '30748', '7'), +('16', '67', '19', '69076', '28571', '7'), +('16', '67', '19', '68893', '27129', '7'), +('16', '67', '19', '19094', '23049', '7'), +('16', '67', '13', '69117', '210000', '7'), +('16', '67', '13', '69043', '192290', '7'), +('16', '67', '13', '68741', '187328', '7'), +('16', '67', '13', '69096', '187152', '7'), +('16', '67', '14', '69155', '30513', '7'), +('16', '67', '14', '28656', '20306', '7'), +('16', '67', '14', '69428', '18220', '7'), +('16', '67', '14', '26788', '17503', '7'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '67', '11', '68809', '42570', '7'), +('16', '67', '11', '67606', '34156', '7'), +('16', '67', '11', '69158', '32738', '7'), +('16', '67', '11', '68952', '32609', '7'), +('16', '68', '22', '62787', '0', '7'), +('16', '68', '22', '21810', '0', '7'), +('16', '68', '22', '66397', '0', '7'), +('16', '68', '22', '61948', '0', '7'), +('16', '68', '1', '68949', '37468', '7'), +('16', '68', '1', '69166', '35125', '7'), +('16', '68', '1', '7125', '29923', '7'), +('16', '68', '1', '69063', '28868', '7'), +('16', '68', '2', '28605', '29483', '7'), +('16', '68', '2', '28648', '29368', '7'), +('16', '68', '2', '69088', '27248', '7'), +('16', '68', '2', '67727', '24705', '7'), +('16', '68', '3', '69157', '32093', '7'), +('16', '68', '3', '69069', '29603', '7'), +('16', '68', '3', '69074', '27443', '7'), +('16', '68', '3', '69068', '27065', '7'), +('16', '68', '5', '67625', '34385', '7'), +('16', '68', '5', '69135', '31700', '7'), +('16', '68', '5', '68808', '31535', '7'), +('16', '68', '5', '7769', '30025', '7'), +('16', '68', '8', '69165', '43663', '7'), +('16', '68', '8', '69064', '40680', '7'), +('16', '68', '8', '69072', '37003', '7'), +('16', '68', '8', '69065', '29117', '7'), +('16', '68', '6', '68757', '35995', '7'), +('16', '68', '6', '69130', '31445', '7'), +('16', '68', '6', '69073', '30710', '7'), +('16', '68', '6', '13674', '30102', '7'), +('16', '68', '17', '69151', '38330', '7'), +('16', '68', '17', '68976', '28238', '7'), +('16', '68', '17', '68780', '28025', '7'), +('16', '68', '17', '55511', '24623', '7'), +('16', '68', '7', '69169', '29690', '7'), +('16', '68', '7', '69080', '29145', '7'), +('16', '68', '7', '68706', '29100', '7'), +('16', '68', '7', '68891', '27306', '7'), +('16', '68', '9', '69127', '33385', '7'), +('16', '68', '9', '69099', '29438', '7'), +('16', '68', '9', '68766', '26737', '7'), +('16', '68', '9', '68894', '25043', '7'), +('16', '68', '15', '69160', '32930', '7'), +('16', '68', '15', '69070', '31210', '7'), +('16', '68', '15', '69131', '30803', '7'), +('16', '68', '15', '69061', '29068', '7'), +('16', '68', '20', '69134', '37280', '7'), +('16', '68', '20', '16156', '37140', '7'), +('16', '68', '20', '67625', '34385', '7'), +('16', '68', '20', '68951', '29278', '7'), +('16', '68', '12', '69253', '31425', '7'), +('16', '68', '12', '69084', '26695', '7'), +('16', '68', '12', '28246', '25263', '7'), +('16', '68', '12', '68892', '23940', '7'), +('16', '68', '18', '69147', '36208', '7'), +('16', '68', '18', '68977', '30378', '7'), +('16', '68', '18', '68749', '27325', '7'), +('16', '68', '18', '28651', '24860', '7'), +('16', '68', '19', '69178', '30750', '7'), +('16', '68', '19', '69076', '28573', '7'), +('16', '68', '19', '68893', '27130', '7'), +('16', '68', '19', '19094', '23050', '7'), +('16', '68', '13', '69117', '210525', '7'), +('16', '68', '13', '69043', '192784', '7'), +('16', '68', '13', '68741', '187884', '7'), +('16', '68', '13', '69096', '187645', '7'), +('16', '68', '14', '69155', '30515', '7'), +('16', '68', '14', '28656', '20306', '7'), +('16', '68', '14', '69428', '18222', '7'), +('16', '68', '14', '26788', '17506', '7'), +('16', '68', '11', '68809', '42823', '7'), +('16', '68', '11', '67606', '34158', '7'), +('16', '68', '11', '69158', '32740', '7'), +('16', '68', '11', '68952', '32611', '7'), +('16', '69', '22', '62787', '0', '7'), +('16', '69', '22', '21810', '0', '7'), +('16', '69', '22', '66397', '0', '7'), +('16', '69', '22', '61948', '0', '7'), +('16', '69', '1', '68949', '37470', '7'), +('16', '69', '1', '69166', '35127', '7'), +('16', '69', '1', '7125', '29924', '7'), +('16', '69', '1', '69063', '28870', '7'), +('16', '69', '2', '28605', '29484', '7'), +('16', '69', '2', '28648', '29368', '7'), +('16', '69', '2', '69088', '27250', '7'), +('16', '69', '2', '67727', '24708', '7'), +('16', '69', '3', '69157', '32095', '7'), +('16', '69', '3', '69069', '29606', '7'), +('16', '69', '3', '69074', '27445', '7'), +('16', '69', '3', '69068', '27067', '7'), +('16', '69', '5', '67625', '34387', '7'), +('16', '69', '5', '69135', '31703', '7'), +('16', '69', '5', '68808', '31537', '7'), +('16', '69', '5', '7769', '30025', '7'), +('16', '69', '8', '69165', '43666', '7'), +('16', '69', '8', '69064', '40682', '7'), +('16', '69', '8', '69072', '37005', '7'), +('16', '69', '8', '69065', '29120', '7'), +('16', '69', '6', '68757', '35997', '7'), +('16', '69', '6', '69130', '31447', '7'), +('16', '69', '6', '69073', '30710', '7'), +('16', '69', '6', '13674', '30105', '7'), +('16', '69', '17', '69151', '38333', '7'), +('16', '69', '17', '68976', '28240', '7'), +('16', '69', '17', '68780', '28028', '7'), +('16', '69', '17', '55511', '24626', '7'), +('16', '69', '7', '69169', '29692', '7'), +('16', '69', '7', '69080', '29147', '7'), +('16', '69', '7', '68706', '29102', '7'), +('16', '69', '7', '68891', '27309', '7'), +('16', '69', '9', '69127', '33387', '7'), +('16', '69', '9', '69099', '29439', '7'), +('16', '69', '9', '68766', '26740', '7'), +('16', '69', '9', '68894', '25044', '7'), +('16', '69', '15', '69160', '32932', '7'), +('16', '69', '15', '69070', '31212', '7'), +('16', '69', '15', '69131', '30803', '7'), +('16', '69', '15', '69061', '29071', '7'), +('16', '69', '20', '69134', '37282', '7'), +('16', '69', '20', '16156', '37142', '7'), +('16', '69', '20', '67625', '34387', '7'), +('16', '69', '20', '68951', '29280', '7'), +('16', '69', '12', '69253', '31428', '7'), +('16', '69', '12', '69084', '26695', '7'), +('16', '69', '12', '28246', '25264', '7'), +('16', '69', '12', '68892', '23942', '7'), +('16', '69', '18', '69147', '36210', '7'), +('16', '69', '18', '68977', '30379', '7'), +('16', '69', '18', '68749', '27327', '7'), +('16', '69', '18', '28651', '24863', '7'), +('16', '69', '19', '69178', '30752', '7'), +('16', '69', '19', '69076', '28574', '7'), +('16', '69', '19', '68893', '27132', '7'), +('16', '69', '19', '19094', '23051', '7'), +('16', '69', '13', '69117', '211101', '7'), +('16', '69', '13', '69043', '193278', '7'), +('16', '69', '13', '68741', '188441', '7'), +('16', '69', '13', '69096', '188138', '7'), +('16', '69', '14', '69155', '30517', '7'), +('16', '69', '14', '28656', '20306', '7'), +('16', '69', '14', '69428', '18223', '7'), +('16', '69', '14', '26788', '17508', '7'), +('16', '69', '11', '68809', '43075', '7'), +('16', '69', '11', '67606', '34160', '7'), +('16', '69', '11', '69158', '32742', '7'), +('16', '69', '11', '68952', '32613', '7'), +('16', '70', '22', '61948', '0', '11'), +('16', '70', '22', '66397', '0', '11'), +('16', '70', '22', '62787', '0', '11'), +('16', '70', '22', '21805', '0', '11'), +('16', '70', '1', '39276', '49730', '11'), +('16', '70', '1', '83594', '48593', '11'), +('16', '70', '1', '39363', '42338', '11'), +('16', '70', '1', '39329', '41290', '11'), +('16', '70', '2', '70958', '46662', '11'), +('16', '70', '2', '83561', '41034', '11'), +('16', '70', '2', '83551', '33811', '11'), +('16', '70', '2', '47209', '31280', '11'), +('16', '70', '3', '39361', '45182', '11'), +('16', '70', '3', '39218', '44569', '11'), +('16', '70', '3', '83658', '43118', '11'), +('16', '70', '3', '39319', '41424', '11'), +('16', '70', '5', '39349', '51386', '11'), +('16', '70', '5', '39262', '41849', '11'), +('16', '70', '5', '39274', '41284', '11'), +('16', '70', '5', '39313', '39734', '11'), +('16', '70', '8', '39330', '47328', '11'), +('16', '70', '8', '69165', '43669', '11'), +('16', '70', '8', '39286', '43099', '11'), +('16', '70', '8', '83659', '42815', '11'), +('16', '70', '6', '39367', '49284', '11'), +('16', '70', '6', '83660', '42355', '11'), +('16', '70', '6', '39327', '42340', '11'), +('16', '70', '6', '70717', '42093', '11'), +('16', '70', '17', '83604', '55735', '11'), +('16', '70', '17', '70963', '47942', '11'), +('16', '70', '17', '69151', '38335', '11'), +('16', '70', '17', '70713', '35629', '11'), +('16', '70', '7', '83565', '41124', '11'), +('16', '70', '7', '39273', '40206', '11'), +('16', '70', '7', '70959', '37391', '11'), +('16', '70', '7', '83495', '33172', '11'), +('16', '70', '9', '39345', '45820', '11'), +('16', '70', '9', '51707', '43101', '11'), +('16', '70', '9', '83653', '42653', '11'), +('16', '70', '9', '39291', '41498', '11'), +('16', '70', '15', '39373', '50145', '11'), +('16', '70', '15', '51703', '42062', '11'), +('16', '70', '15', '83661', '41482', '11'), +('16', '70', '15', '39321', '40357', '11'), +('16', '70', '20', '39339', '46007', '11'), +('16', '70', '20', '47283', '43005', '11'), +('16', '70', '20', '83650', '41612', '11'), +('16', '70', '20', '83611', '41129', '11'), +('16', '70', '12', '39356', '44228', '11'), +('16', '70', '12', '47213', '38760', '11'), +('16', '70', '12', '83569', '36909', '11'), +('16', '70', '12', '71080', '35482', '11'), +('16', '70', '18', '83608', '45700', '11'), +('16', '70', '18', '70964', '42654', '11'), +('16', '70', '18', '69147', '36212', '11'), +('16', '70', '18', '47201', '34305', '11'), +('16', '70', '19', '83573', '40434', '11'), +('16', '70', '19', '70962', '37175', '11'), +('16', '70', '19', '83541', '34745', '11'), +('16', '70', '19', '39231', '31071', '11'), +('16', '70', '13', '39294', '274769', '11'), +('16', '70', '13', '39254', '274699', '11'), +('16', '70', '13', '18609', '260276', '11'), +('16', '70', '13', '83579', '258536', '11'), +('16', '70', '14', '83640', '40192', '11'), +('16', '70', '14', '47309', '35631', '11'), +('16', '70', '14', '70708', '31864', '11'), +('16', '70', '14', '69155', '30520', '11'), +('16', '70', '11', '39311', '49417', '11'), +('16', '70', '11', '39371', '48812', '11'), +('16', '70', '11', '83657', '45978', '11'), +('16', '70', '11', '68809', '45095', '11'), +('16', '70', '22', '62787', '0', '10'), +('16', '70', '22', '21810', '0', '10'), +('16', '70', '22', '66397', '0', '10'), +('16', '70', '22', '61948', '0', '10'), +('16', '70', '1', '83594', '48593', '10'), +('16', '70', '1', '83630', '41169', '10'), +('16', '70', '1', '71624', '39651', '10'), +('16', '70', '1', '83627', '39317', '10'), +('16', '70', '2', '70958', '46662', '10'), +('16', '70', '2', '83561', '41034', '10'), +('16', '70', '2', '83551', '33811', '10'), +('16', '70', '2', '47209', '31280', '10'), +('16', '70', '3', '83658', '43118', '10'), +('16', '70', '3', '83636', '41087', '10'), +('16', '70', '3', '47245', '40100', '10'), +('16', '70', '3', '89512', '39099', '10'), +('16', '70', '5', '83599', '39724', '10'), +('16', '70', '5', '83651', '38643', '10'), +('16', '70', '5', '47273', '38215', '10'), +('16', '70', '5', '47275', '38031', '10'), +('16', '70', '8', '69165', '43669', '10'), +('16', '70', '8', '83659', '42815', '10'), +('16', '70', '8', '83637', '40760', '10'), +('16', '70', '8', '70986', '40716', '10'), +('16', '70', '6', '83660', '42355', '10'), +('16', '70', '6', '70717', '42093', '10'), +('16', '70', '6', '83530', '40206', '10'), +('16', '70', '6', '83622', '40061', '10'), +('16', '70', '17', '83604', '55735', '10'), +('16', '70', '17', '70963', '47942', '10'), +('16', '70', '17', '69151', '38335', '10'), +('16', '70', '17', '70713', '35629', '10'), +('16', '70', '7', '83565', '41124', '10'), +('16', '70', '7', '70959', '37391', '10'), +('16', '70', '7', '83495', '33172', '10'), +('16', '70', '7', '47205', '32744', '10'), +('16', '70', '9', '83653', '42653', '10'), +('16', '70', '9', '70960', '37041', '10'), +('16', '70', '9', '83466', '33443', '10'), +('16', '70', '9', '69127', '33389', '10'), +('16', '70', '15', '83661', '41482', '10'), +('16', '70', '15', '83592', '38864', '10'), +('16', '70', '15', '83629', '38017', '10'), +('16', '70', '15', '83595', '37348', '10'), +('16', '70', '20', '47283', '43005', '10'), +('16', '70', '20', '83650', '41612', '10'), +('16', '70', '20', '83611', '41129', '10'), +('16', '70', '20', '69134', '37285', '10'), +('16', '70', '12', '47213', '38760', '10'), +('16', '70', '12', '83569', '36909', '10'), +('16', '70', '12', '71080', '35482', '10'), +('16', '70', '12', '70961', '34852', '10'), +('16', '70', '18', '83608', '45700', '10'), +('16', '70', '18', '70964', '42654', '10'), +('16', '70', '18', '69147', '36212', '10'), +('16', '70', '18', '47201', '34305', '10'), +('16', '70', '19', '83573', '40434', '10'), +('16', '70', '19', '70962', '37175', '10'), +('16', '70', '19', '83541', '34745', '10'), +('16', '70', '19', '69178', '30754', '10'), +('16', '70', '13', '18609', '260276', '10'), +('16', '70', '13', '83579', '258536', '10'), +('16', '70', '13', '47320', '253347', '10'), +('16', '70', '13', '83664', '252421', '10'), +('16', '70', '14', '83640', '40192', '10'), +('16', '70', '14', '47309', '35631', '10'), +('16', '70', '14', '70708', '31864', '10'), +('16', '70', '14', '69155', '30520', '10'), +('16', '70', '11', '83657', '45978', '10'), +('16', '70', '11', '68809', '45095', '10'), +('16', '70', '11', '83666', '40325', '10'), +('16', '70', '11', '83633', '40325', '10'), +('16', '70', '22', '62787', '0', '9'), +('16', '70', '22', '21810', '0', '9'), +('16', '70', '22', '66397', '0', '9'), +('16', '70', '22', '61948', '0', '9'), +('16', '70', '1', '71624', '39651', '9'), +('16', '70', '1', '47287', '38500', '9'), +('16', '70', '1', '68949', '37473', '9'), +('16', '70', '1', '71668', '36430', '9'), +('16', '70', '2', '70958', '46662', '9'), +('16', '70', '2', '47209', '31280', '9'), +('16', '70', '2', '28605', '29485', '9'), +('16', '70', '2', '28648', '29368', '9'), +('16', '70', '3', '47245', '40100', '9'), +('16', '70', '3', '47299', '36113', '9'), +('16', '70', '3', '56017', '33376', '9'), +('16', '70', '3', '47301', '33199', '9'), +('16', '70', '5', '47273', '38215', '9'), +('16', '70', '5', '47275', '38031', '9'), +('16', '70', '5', '67625', '34389', '9'), +('16', '70', '5', '47274', '34230', '9'), +('16', '70', '8', '69165', '43669', '9'), +('16', '70', '8', '70986', '40716', '9'), +('16', '70', '8', '69064', '40683', '9'), +('16', '70', '8', '69072', '37007', '9'), +('16', '70', '6', '70717', '42093', '9'), +('16', '70', '6', '68757', '36000', '9'), +('16', '70', '6', '47279', '35439', '9'), +('16', '70', '6', '71654', '35156', '9'), +('16', '70', '17', '70963', '47942', '9'), +('16', '70', '17', '69151', '38335', '9'), +('16', '70', '17', '70713', '35629', '9'), +('16', '70', '17', '71639', '31431', '9'), +('16', '70', '7', '70959', '37391', '9'), +('16', '70', '7', '47205', '32744', '9'), +('16', '70', '7', '70711', '32618', '9'), +('16', '70', '7', '69169', '29694', '9'), +('16', '70', '9', '70960', '37041', '9'), +('16', '70', '9', '69127', '33389', '9'), +('16', '70', '9', '47221', '31966', '9'), +('16', '70', '9', '69099', '29441', '9'), +('16', '70', '15', '47291', '35125', '9'), +('16', '70', '15', '47294', '34978', '9'), +('16', '70', '15', '71117', '34573', '9'), +('16', '70', '15', '70621', '33957', '9'), +('16', '70', '20', '47283', '43005', '9'), +('16', '70', '20', '69134', '37285', '9'), +('16', '70', '20', '16156', '37144', '9'), +('16', '70', '20', '71664', '36942', '9'), +('16', '70', '12', '47213', '38760', '9'), +('16', '70', '12', '71080', '35482', '9'), +('16', '70', '12', '70961', '34852', '9'), +('16', '70', '12', '69253', '31431', '9'), +('16', '70', '18', '70964', '42654', '9'), +('16', '70', '18', '69147', '36212', '9'), +('16', '70', '18', '47201', '34305', '9'), +('16', '70', '18', '71647', '32762', '9'), +('16', '70', '19', '70962', '37175', '9'), +('16', '70', '19', '69178', '30754', '9'), +('16', '70', '19', '47217', '30459', '9'), +('16', '70', '19', '69076', '28576', '9'), +('16', '70', '13', '18609', '260276', '9'), +('16', '70', '13', '47320', '253347', '9'), +('16', '70', '13', '47324', '251251', '9'), +('16', '70', '13', '71663', '248995', '9'), +('16', '70', '14', '47309', '35631', '9'), +('16', '70', '14', '70708', '31864', '9'), +('16', '70', '14', '69155', '30520', '9'), +('16', '70', '14', '28656', '20306', '9'), +('16', '70', '11', '68809', '45095', '9'), +('16', '70', '11', '47297', '35963', '9'), +('16', '70', '11', '47295', '35404', '9'), +('16', '70', '11', '71659', '34319', '9'), +('16', '70', '22', '62787', '0', '8'), +('16', '70', '22', '21810', '0', '8'), +('16', '70', '22', '66397', '0', '8'), +('16', '70', '22', '61948', '0', '8'), +('16', '70', '1', '47287', '38500', '8'), +('16', '70', '1', '68949', '37473', '8'), +('16', '70', '1', '47289', '36206', '8'), +('16', '70', '1', '69166', '35129', '8'), +('16', '70', '2', '70958', '46662', '8'), +('16', '70', '2', '47209', '31280', '8'), +('16', '70', '2', '28605', '29485', '8'), +('16', '70', '2', '28648', '29368', '8'), +('16', '70', '3', '47245', '40100', '8'), +('16', '70', '3', '47299', '36113', '8'), +('16', '70', '3', '56017', '33376', '8'), +('16', '70', '3', '47301', '33199', '8'), +('16', '70', '5', '47273', '38215', '8'), +('16', '70', '5', '47275', '38031', '8'), +('16', '70', '5', '67625', '34389', '8'), +('16', '70', '5', '47274', '34230', '8'), +('16', '70', '8', '69165', '43669', '8'), +('16', '70', '8', '69064', '40683', '8'), +('16', '70', '8', '69072', '37007', '8'), +('16', '70', '8', '47305', '36974', '8'), +('16', '70', '6', '70717', '42093', '8'), +('16', '70', '6', '68757', '36000', '8'), +('16', '70', '6', '47279', '35439', '8'), +('16', '70', '6', '47277', '33488', '8'), +('16', '70', '17', '70963', '47942', '8'), +('16', '70', '17', '69151', '38335', '8'), +('16', '70', '17', '70713', '35629', '8'), +('16', '70', '17', '68976', '28243', '8'), +('16', '70', '7', '70959', '37391', '8'), +('16', '70', '7', '47205', '32744', '8'), +('16', '70', '7', '70711', '32618', '8'), +('16', '70', '7', '69169', '29694', '8'), +('16', '70', '9', '70960', '37041', '8'), +('16', '70', '9', '69127', '33389', '8'), +('16', '70', '9', '47221', '31966', '8'), +('16', '70', '9', '69099', '29441', '8'), +('16', '70', '15', '47291', '35125', '8'), +('16', '70', '15', '47294', '34978', '8'), +('16', '70', '15', '71117', '34573', '8'), +('16', '70', '15', '70621', '33957', '8'), +('16', '70', '20', '47283', '43005', '8'), +('16', '70', '20', '69134', '37285', '8'), +('16', '70', '20', '16156', '37144', '8'), +('16', '70', '20', '47282', '36252', '8'), +('16', '70', '12', '47213', '38760', '8'), +('16', '70', '12', '71080', '35482', '8'), +('16', '70', '12', '70961', '34852', '8'), +('16', '70', '12', '69253', '31431', '8'), +('16', '70', '18', '70964', '42654', '8'), +('16', '70', '18', '69147', '36212', '8'), +('16', '70', '18', '47201', '34305', '8'), +('16', '70', '18', '71096', '30951', '8'), +('16', '70', '19', '70962', '37175', '8'), +('16', '70', '19', '69178', '30754', '8'), +('16', '70', '19', '47217', '30459', '8'), +('16', '70', '19', '69076', '28576', '8'), +('16', '70', '13', '18609', '260276', '8'), +('16', '70', '13', '47320', '252589', '8'), +('16', '70', '13', '47324', '250494', '8'), +('16', '70', '13', '47321', '233694', '8'), +('16', '70', '14', '47309', '35631', '8'), +('16', '70', '14', '70708', '31864', '8'), +('16', '70', '14', '69155', '30520', '8'), +('16', '70', '14', '28656', '20306', '8'), +('16', '70', '11', '68809', '44590', '8'), +('16', '70', '11', '47297', '35963', '8'), +('16', '70', '11', '47295', '35404', '8'), +('16', '70', '11', '67606', '34162', '8'), +('16', '71', '22', '61948', '0', '11'), +('16', '71', '22', '66397', '0', '11'), +('16', '71', '22', '62787', '0', '11'), +('16', '71', '22', '21805', '0', '11'), +('16', '71', '1', '39276', '49732', '11'), +('16', '71', '1', '83594', '48596', '11'), +('16', '71', '1', '39363', '42341', '11'), +('16', '71', '1', '39329', '41290', '11'), +('16', '71', '2', '70958', '46665', '11'), +('16', '71', '2', '83561', '41037', '11'), +('16', '71', '2', '83551', '33813', '11'), +('16', '71', '2', '47209', '31282', '11'), +('16', '71', '3', '39361', '45184', '11'), +('16', '71', '3', '39218', '44570', '11'), +('16', '71', '3', '83658', '43121', '11'), +('16', '71', '3', '39319', '41427', '11'), +('16', '71', '5', '39349', '51388', '11'), +('16', '71', '5', '39262', '41850', '11'), +('16', '71', '5', '39274', '41287', '11'), +('16', '71', '5', '39313', '39737', '11'), +('16', '71', '8', '39330', '47328', '11'), +('16', '71', '8', '69165', '43671', '11'), +('16', '71', '8', '39286', '43102', '11'), +('16', '71', '8', '83659', '42818', '11'), +('16', '71', '6', '39367', '49287', '11'), +('16', '71', '6', '83660', '42358', '11'), +('16', '71', '6', '39327', '42340', '11'), +('16', '71', '6', '70717', '42096', '11'), +('16', '71', '17', '83604', '55739', '11'), +('16', '71', '17', '70963', '47945', '11'), +('16', '71', '17', '69151', '38338', '11'), +('16', '71', '17', '70713', '35631', '11'), +('16', '71', '7', '83565', '41127', '11'), +('16', '71', '7', '39273', '40208', '11'), +('16', '71', '7', '70959', '37395', '11'), +('16', '71', '7', '83495', '33174', '11'), +('16', '71', '9', '39345', '45824', '11'), +('16', '71', '9', '51707', '43103', '11'), +('16', '71', '9', '83653', '42656', '11'), +('16', '71', '9', '39291', '41500', '11'), +('16', '71', '15', '39373', '50149', '11'), +('16', '71', '15', '51703', '42065', '11'), +('16', '71', '15', '83661', '41486', '11'), +('16', '71', '15', '39321', '40359', '11'), +('16', '71', '20', '39339', '46009', '11'), +('16', '71', '20', '47283', '43007', '11'), +('16', '71', '20', '83650', '41614', '11'), +('16', '71', '20', '83611', '41132', '11'), +('16', '71', '12', '39356', '44231', '11'), +('16', '71', '12', '47213', '38760', '11'), +('16', '71', '12', '83569', '36912', '11'), +('16', '71', '12', '71080', '35484', '11'), +('16', '71', '18', '83608', '45704', '11'), +('16', '71', '18', '70964', '42657', '11'), +('16', '71', '18', '69147', '36214', '11'), +('16', '71', '18', '47201', '34307', '11'), +('16', '71', '19', '83573', '40437', '11'), +('16', '71', '19', '70962', '37175', '11'), +('16', '71', '19', '83541', '34745', '11'), +('16', '71', '19', '39231', '31073', '11'), +('16', '71', '13', '39294', '275553', '11'), +('16', '71', '13', '39254', '275484', '11'), +('16', '71', '13', '18609', '260682', '11'), +('16', '71', '13', '83579', '259270', '11'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '71', '14', '83640', '40195', '11'), +('16', '71', '14', '47309', '35631', '11'), +('16', '71', '14', '70708', '31866', '11'), +('16', '71', '14', '69155', '30522', '11'), +('16', '71', '11', '39311', '49420', '11'), +('16', '71', '11', '39371', '48815', '11'), +('16', '71', '11', '83657', '45981', '11'), +('16', '71', '11', '68809', '45348', '11'), +('16', '72', '22', '61948', '0', '11'), +('16', '72', '22', '66397', '0', '11'), +('16', '72', '22', '62787', '0', '11'), +('16', '72', '22', '21805', '0', '11'), +('16', '72', '1', '39276', '49734', '11'), +('16', '72', '1', '83594', '48598', '11'), +('16', '72', '1', '39363', '42343', '11'), +('16', '72', '1', '39329', '41290', '11'), +('16', '72', '2', '70958', '46668', '11'), +('16', '72', '2', '83561', '41040', '11'), +('16', '72', '2', '83551', '33816', '11'), +('16', '72', '2', '47209', '31284', '11'), +('16', '72', '3', '39361', '45187', '11'), +('16', '72', '3', '39218', '44572', '11'), +('16', '72', '3', '83658', '43125', '11'), +('16', '72', '3', '39319', '41430', '11'), +('16', '72', '5', '39349', '51391', '11'), +('16', '72', '5', '39262', '41852', '11'), +('16', '72', '5', '39274', '41290', '11'), +('16', '72', '5', '39313', '39740', '11'), +('16', '72', '8', '39330', '47328', '11'), +('16', '72', '8', '69165', '43674', '11'), +('16', '72', '8', '39286', '43105', '11'), +('16', '72', '8', '83659', '42821', '11'), +('16', '72', '6', '39367', '49291', '11'), +('16', '72', '6', '83660', '42362', '11'), +('16', '72', '6', '39327', '42340', '11'), +('16', '72', '6', '70717', '42099', '11'), +('16', '72', '17', '83604', '55743', '11'), +('16', '72', '17', '70963', '47948', '11'), +('16', '72', '17', '69151', '38341', '11'), +('16', '72', '17', '70713', '35634', '11'), +('16', '72', '7', '83565', '41131', '11'), +('16', '72', '7', '39273', '40211', '11'), +('16', '72', '7', '70959', '37400', '11'), +('16', '72', '7', '83495', '33176', '11'), +('16', '72', '9', '39345', '45828', '11'), +('16', '72', '9', '51707', '43106', '11'), +('16', '72', '9', '83653', '42658', '11'), +('16', '72', '9', '39291', '41502', '11'), +('16', '72', '15', '39373', '50153', '11'), +('16', '72', '15', '51703', '42068', '11'), +('16', '72', '15', '83661', '41489', '11'), +('16', '72', '15', '39321', '40361', '11'), +('16', '72', '20', '39339', '46012', '11'), +('16', '72', '20', '47283', '43009', '11'), +('16', '72', '20', '83650', '41616', '11'), +('16', '72', '20', '83611', '41135', '11'), +('16', '72', '12', '39356', '44233', '11'), +('16', '72', '12', '47213', '38760', '11'), +('16', '72', '12', '83569', '36915', '11'), +('16', '72', '12', '71080', '35486', '11'), +('16', '72', '18', '83608', '45708', '11'), +('16', '72', '18', '70964', '42661', '11'), +('16', '72', '18', '69147', '36216', '11'), +('16', '72', '18', '47201', '34309', '11'), +('16', '72', '19', '83573', '40441', '11'), +('16', '72', '19', '70962', '37175', '11'), +('16', '72', '19', '83541', '34745', '11'), +('16', '72', '19', '39231', '31076', '11'), +('16', '72', '13', '39294', '276337', '11'), +('16', '72', '13', '39254', '276268', '11'), +('16', '72', '13', '18609', '261139', '11'), +('16', '72', '13', '83579', '260055', '11'), +('16', '72', '14', '83640', '40198', '11'), +('16', '72', '14', '47309', '35631', '11'), +('16', '72', '14', '70708', '31869', '11'), +('16', '72', '14', '69155', '30524', '11'), +('16', '72', '11', '39311', '49423', '11'), +('16', '72', '11', '39371', '48818', '11'), +('16', '72', '11', '83657', '45985', '11'), +('16', '72', '11', '68809', '45600', '11'), +('16', '73', '22', '61948', '0', '11'), +('16', '73', '22', '66397', '0', '11'), +('16', '73', '22', '62787', '0', '11'), +('16', '73', '22', '21805', '0', '11'), +('16', '73', '1', '39276', '49737', '11'), +('16', '73', '1', '83594', '48601', '11'), +('16', '73', '1', '39363', '42346', '11'), +('16', '73', '1', '39329', '41290', '11'), +('16', '73', '2', '70958', '46671', '11'), +('16', '73', '2', '83561', '41044', '11'), +('16', '73', '2', '83551', '33819', '11'), +('16', '73', '2', '47209', '31286', '11'), +('16', '73', '3', '39361', '45189', '11'), +('16', '73', '3', '39218', '44573', '11'), +('16', '73', '3', '83658', '43128', '11'), +('16', '73', '3', '39319', '41434', '11'), +('16', '73', '5', '39349', '51394', '11'), +('16', '73', '5', '39262', '41854', '11'), +('16', '73', '5', '39274', '41293', '11'), +('16', '73', '5', '39313', '39744', '11'), +('16', '73', '8', '39330', '47328', '11'), +('16', '73', '8', '69165', '43677', '11'), +('16', '73', '8', '39286', '43108', '11'), +('16', '73', '8', '83659', '42824', '11'), +('16', '73', '6', '39367', '49294', '11'), +('16', '73', '6', '83660', '42365', '11'), +('16', '73', '6', '39327', '42340', '11'), +('16', '73', '6', '70717', '42101', '11'), +('16', '73', '17', '83604', '55747', '11'), +('16', '73', '17', '70963', '47951', '11'), +('16', '73', '17', '69151', '38343', '11'), +('16', '73', '17', '70713', '35636', '11'), +('16', '73', '7', '83565', '41134', '11'), +('16', '73', '7', '39273', '40214', '11'), +('16', '73', '7', '70959', '37404', '11'), +('16', '73', '7', '83495', '33178', '11'), +('16', '73', '9', '39345', '45831', '11'), +('16', '73', '9', '51707', '43109', '11'), +('16', '73', '9', '83653', '42661', '11'), +('16', '73', '9', '39291', '41504', '11'), +('16', '73', '15', '39373', '50157', '11'), +('16', '73', '15', '51703', '42071', '11'), +('16', '73', '15', '83661', '41493', '11'), +('16', '73', '15', '39321', '40363', '11'), +('16', '73', '20', '39339', '46014', '11'), +('16', '73', '20', '47283', '43010', '11'), +('16', '73', '20', '83650', '41619', '11'), +('16', '73', '20', '83611', '41139', '11'), +('16', '73', '12', '39356', '44236', '11'), +('16', '73', '12', '47213', '38760', '11'), +('16', '73', '12', '83569', '36919', '11'), +('16', '73', '12', '71080', '35488', '11'), +('16', '73', '18', '83608', '45712', '11'), +('16', '73', '18', '70964', '42664', '11'), +('16', '73', '18', '69147', '36218', '11'), +('16', '73', '18', '47201', '34311', '11'), +('16', '73', '19', '83573', '40444', '11'), +('16', '73', '19', '70962', '37175', '11'), +('16', '73', '19', '83541', '34745', '11'), +('16', '73', '19', '39231', '31078', '11'), +('16', '73', '13', '39294', '277122', '11'), +('16', '73', '13', '39254', '277053', '11'), +('16', '73', '13', '18609', '261595', '11'), +('16', '73', '13', '83579', '260839', '11'), +('16', '73', '14', '83640', '40201', '11'), +('16', '73', '14', '47309', '35631', '11'), +('16', '73', '14', '70708', '31871', '11'), +('16', '73', '14', '69155', '30526', '11'), +('16', '73', '11', '39311', '49426', '11'), +('16', '73', '11', '39371', '48821', '11'), +('16', '73', '11', '83657', '45989', '11'), +('16', '73', '11', '68809', '45853', '11'), +('16', '74', '22', '61948', '0', '11'), +('16', '74', '22', '66397', '0', '11'), +('16', '74', '22', '62787', '0', '11'), +('16', '74', '22', '21805', '0', '11'), +('16', '74', '1', '39276', '49739', '11'), +('16', '74', '1', '83594', '48604', '11'), +('16', '74', '1', '39363', '42349', '11'), +('16', '74', '1', '39329', '41290', '11'), +('16', '74', '2', '70958', '46675', '11'), +('16', '74', '2', '83561', '41047', '11'), +('16', '74', '2', '83551', '33821', '11'), +('16', '74', '2', '47209', '31288', '11'), +('16', '74', '3', '39361', '45191', '11'), +('16', '74', '3', '39218', '44575', '11'), +('16', '74', '3', '83658', '43132', '11'), +('16', '74', '3', '39319', '41437', '11'), +('16', '74', '5', '39349', '51397', '11'), +('16', '74', '5', '39262', '41856', '11'), +('16', '74', '5', '39274', '41296', '11'), +('16', '74', '5', '39313', '39747', '11'), +('16', '74', '8', '39330', '47328', '11'), +('16', '74', '8', '69165', '43679', '11'), +('16', '74', '8', '39286', '43111', '11'), +('16', '74', '8', '83659', '42827', '11'), +('16', '74', '6', '39367', '49297', '11'), +('16', '74', '6', '83660', '42369', '11'), +('16', '74', '6', '39327', '42340', '11'), +('16', '74', '6', '70717', '42104', '11'), +('16', '74', '17', '83604', '55750', '11'), +('16', '74', '17', '70963', '47955', '11'), +('16', '74', '17', '69151', '38346', '11'), +('16', '74', '17', '70713', '35638', '11'), +('16', '74', '7', '83565', '41137', '11'), +('16', '74', '7', '39273', '40217', '11'), +('16', '74', '7', '70959', '37409', '11'), +('16', '74', '7', '83495', '33181', '11'), +('16', '74', '9', '39345', '45835', '11'), +('16', '74', '9', '51707', '43111', '11'), +('16', '74', '9', '83653', '42664', '11'), +('16', '74', '9', '39291', '41506', '11'), +('16', '74', '15', '39373', '50160', '11'), +('16', '74', '15', '51703', '42075', '11'), +('16', '74', '15', '83661', '41496', '11'), +('16', '74', '15', '39321', '40366', '11'), +('16', '74', '20', '39339', '46016', '11'), +('16', '74', '20', '47283', '43012', '11'), +('16', '74', '20', '83650', '41621', '11'), +('16', '74', '20', '83611', '41142', '11'), +('16', '74', '12', '39356', '44239', '11'), +('16', '74', '12', '47213', '38760', '11'), +('16', '74', '12', '83569', '36922', '11'), +('16', '74', '12', '71080', '35491', '11'), +('16', '74', '18', '83608', '45715', '11'), +('16', '74', '18', '70964', '42667', '11'), +('16', '74', '18', '69147', '36221', '11'), +('16', '74', '18', '47201', '34313', '11'), +('16', '74', '19', '83573', '40447', '11'), +('16', '74', '19', '70962', '37175', '11'), +('16', '74', '19', '83541', '34745', '11'), +('16', '74', '19', '39231', '31081', '11'), +('16', '74', '13', '39294', '277957', '11'), +('16', '74', '13', '39254', '277888', '11'), +('16', '74', '13', '18609', '262051', '11'), +('16', '74', '13', '83579', '261573', '11'), +('16', '74', '14', '83640', '40204', '11'), +('16', '74', '14', '47309', '35631', '11'), +('16', '74', '14', '70708', '31873', '11'), +('16', '74', '14', '69155', '30528', '11'), +('16', '74', '11', '39311', '49429', '11'), +('16', '74', '11', '39371', '48825', '11'), +('16', '74', '11', '68809', '46105', '11'), +('16', '74', '11', '83657', '45993', '11'), +('16', '75', '22', '21805', '0', '13'), +('16', '75', '22', '61948', '0', '13'), +('16', '75', '22', '66397', '0', '13'), +('16', '75', '22', '21807', '0', '13'), +('16', '75', '1', '80676', '63637', '13'), +('16', '75', '1', '80648', '61987', '13'), +('16', '75', '1', '80639', '58284', '13'), +('16', '75', '1', '46931', '56617', '13'), +('16', '75', '2', '53988', '49653', '13'), +('16', '75', '2', '70958', '46678', '13'), +('16', '75', '2', '83561', '41050', '13'), +('16', '75', '2', '83551', '33824', '13'), +('16', '75', '3', '80636', '62168', '13'), +('16', '75', '3', '46924', '51677', '13'), +('16', '75', '3', '46902', '47828', '13'), +('16', '75', '3', '46852', '46469', '13'), +('16', '75', '5', '80669', '66780', '13'), +('16', '75', '5', '46918', '62952', '13'), +('16', '75', '5', '80616', '59626', '13'), +('16', '75', '5', '46934', '55494', '13'), +('16', '75', '8', '80687', '68874', '13'), +('16', '75', '8', '46885', '68715', '13'), +('16', '75', '8', '80649', '58206', '13'), +('16', '75', '8', '46814', '50444', '13'), +('16', '75', '6', '80638', '71334', '13'), +('16', '75', '6', '46884', '57551', '13'), +('16', '75', '6', '46933', '57471', '13'), +('16', '75', '6', '46883', '55559', '13'), +('16', '75', '17', '83604', '55754', '13'), +('16', '75', '17', '53993', '51811', '13'), +('16', '75', '17', '70963', '47958', '13'), +('16', '75', '17', '46825', '45907', '13'), +('16', '75', '7', '53467', '53998', '13'), +('16', '75', '7', '83565', '41140', '13'), +('16', '75', '7', '39273', '40220', '13'), +('16', '75', '7', '70959', '37413', '13'), +('16', '75', '9', '46937', '57944', '13'), +('16', '75', '9', '39345', '45839', '13'), +('16', '75', '9', '51707', '43114', '13'), +('16', '75', '9', '83653', '42667', '13'), +('16', '75', '15', '79909', '69296', '13'), +('16', '75', '15', '80686', '64264', '13'), +('16', '75', '15', '80657', '64025', '13'), +('16', '75', '15', '79908', '62430', '13'), +('16', '75', '20', '80688', '77079', '13'), +('16', '75', '20', '46935', '60626', '13'), +('16', '75', '20', '80620', '55908', '13'), +('16', '75', '20', '46870', '51728', '13'), +('16', '75', '12', '53469', '61614', '13'), +('16', '75', '12', '53991', '49614', '13'), +('16', '75', '12', '39356', '44242', '13'), +('16', '75', '12', '47213', '38760', '13'), +('16', '75', '18', '53994', '51136', '13'), +('16', '75', '18', '83608', '45719', '13'), +('16', '75', '18', '70964', '42671', '13'), +('16', '75', '18', '46818', '41113', '13'), +('16', '75', '19', '53470', '54448', '13'), +('16', '75', '19', '53992', '50148', '13'), +('16', '75', '19', '83573', '40450', '13'), +('16', '75', '19', '70962', '37175', '13'), +('16', '75', '13', '80685', '349059', '13'), +('16', '75', '13', '46929', '343218', '13'), +('16', '75', '13', '80673', '340998', '13'), +('16', '75', '13', '80632', '319992', '13'), +('16', '75', '14', '46875', '52542', '13'), +('16', '75', '14', '46925', '51524', '13'), +('16', '75', '14', '83640', '40208', '13'), +('16', '75', '14', '47309', '35631', '13'), +('16', '75', '11', '80668', '63924', '13'), +('16', '75', '11', '46850', '60321', '13'), +('16', '75', '11', '80630', '58778', '13'), +('16', '75', '11', '46889', '58637', '13'), +('16', '75', '22', '21805', '0', '12'), +('16', '75', '22', '61948', '0', '12'), +('16', '75', '22', '66397', '0', '12'), +('16', '75', '22', '21807', '0', '12'), +('16', '75', '1', '46931', '56617', '12'), +('16', '75', '1', '46866', '52604', '12'), +('16', '75', '1', '39276', '49741', '12'), +('16', '75', '1', '83594', '48607', '12'), +('16', '75', '2', '53988', '49653', '12'), +('16', '75', '2', '70958', '46678', '12'), +('16', '75', '2', '83561', '41050', '12'), +('16', '75', '2', '83551', '33824', '12'), +('16', '75', '3', '46924', '51677', '12'), +('16', '75', '3', '46902', '47828', '12'), +('16', '75', '3', '46852', '46469', '12'), +('16', '75', '3', '39361', '45193', '12'), +('16', '75', '5', '46918', '62952', '12'), +('16', '75', '5', '46934', '55494', '12'), +('16', '75', '5', '46862', '55013', '12'), +('16', '75', '5', '39349', '51399', '12'), +('16', '75', '8', '46885', '68715', '12'), +('16', '75', '8', '46814', '50444', '12'), +('16', '75', '8', '46848', '47946', '12'), +('16', '75', '8', '39330', '47328', '12'), +('16', '75', '6', '46884', '57551', '12'), +('16', '75', '6', '46933', '57471', '12'), +('16', '75', '6', '46883', '55559', '12'), +('16', '75', '6', '46896', '50072', '12'), +('16', '75', '17', '83604', '55754', '12'), +('16', '75', '17', '53993', '51811', '12'), +('16', '75', '17', '70963', '47958', '12'), +('16', '75', '17', '46825', '45907', '12'), +('16', '75', '7', '53467', '53998', '12'), +('16', '75', '7', '83565', '41140', '12'), +('16', '75', '7', '39273', '40220', '12'), +('16', '75', '7', '70959', '37413', '12'), +('16', '75', '9', '46937', '57944', '12'), +('16', '75', '9', '39345', '45839', '12'), +('16', '75', '9', '51707', '43114', '12'), +('16', '75', '9', '83653', '42667', '12'), +('16', '75', '15', '46881', '59141', '12'), +('16', '75', '15', '46893', '52344', '12'), +('16', '75', '15', '46916', '51529', '12'), +('16', '75', '15', '39373', '50164', '12'), +('16', '75', '20', '46935', '60626', '12'), +('16', '75', '20', '46870', '51728', '12'), +('16', '75', '20', '39339', '46018', '12'), +('16', '75', '20', '47283', '43014', '12'), +('16', '75', '12', '53469', '61614', '12'), +('16', '75', '12', '53991', '49614', '12'), +('16', '75', '12', '39356', '44242', '12'), +('16', '75', '12', '47213', '38760', '12'), +('16', '75', '18', '53994', '51136', '12'), +('16', '75', '18', '83608', '45719', '12'), +('16', '75', '18', '70964', '42671', '12'), +('16', '75', '18', '46818', '41113', '12'), +('16', '75', '19', '53470', '54448', '12'), +('16', '75', '19', '53992', '50148', '12'), +('16', '75', '19', '83573', '40450', '12'), +('16', '75', '19', '70962', '37175', '12'), +('16', '75', '13', '46929', '343218', '12'), +('16', '75', '13', '46879', '315439', '12'), +('16', '75', '13', '46890', '290820', '12'), +('16', '75', '13', '39294', '280635', '12'), +('16', '75', '14', '46875', '52542', '12'), +('16', '75', '14', '46925', '51524', '12'), +('16', '75', '14', '83640', '40208', '12'), +('16', '75', '14', '47309', '35631', '12'), +('16', '75', '11', '46850', '60321', '12'), +('16', '75', '11', '46889', '58637', '12'), +('16', '75', '11', '46939', '54483', '12'), +('16', '75', '11', '39311', '49433', '12'), +('16', '76', '22', '21805', '0', '13'), +('16', '76', '22', '61948', '0', '13'), +('16', '76', '22', '66397', '0', '13'), +('16', '76', '22', '21807', '0', '13'), +('16', '76', '1', '80676', '63637', '13'), +('16', '76', '1', '80648', '61990', '13'), +('16', '76', '1', '80639', '58288', '13'), +('16', '76', '1', '46931', '56621', '13'), +('16', '76', '2', '53988', '49656', '13'), +('16', '76', '2', '70958', '46681', '13'), +('16', '76', '2', '83561', '41054', '13'), +('16', '76', '2', '83551', '33827', '13'), +('16', '76', '3', '80636', '62168', '13'), +('16', '76', '3', '46924', '51681', '13'), +('16', '76', '3', '46902', '47832', '13'), +('16', '76', '3', '46852', '46471', '13'), +('16', '76', '5', '80669', '66784', '13'), +('16', '76', '5', '46918', '62956', '13'), +('16', '76', '5', '80616', '59626', '13'), +('16', '76', '5', '46934', '55498', '13'), +('16', '76', '8', '80687', '68878', '13'), +('16', '76', '8', '46885', '68719', '13'), +('16', '76', '8', '80649', '58209', '13'), +('16', '76', '8', '46814', '50446', '13'), +('16', '76', '6', '80638', '71337', '13'), +('16', '76', '6', '46884', '57555', '13'), +('16', '76', '6', '46933', '57474', '13'), +('16', '76', '6', '46883', '55563', '13'), +('16', '76', '17', '83604', '55758', '13'), +('16', '76', '17', '53993', '51814', '13'), +('16', '76', '17', '70963', '47961', '13'), +('16', '76', '17', '46825', '45910', '13'), +('16', '76', '7', '53467', '54000', '13'), +('16', '76', '7', '83565', '41144', '13'), +('16', '76', '7', '39273', '40223', '13'), +('16', '76', '7', '70959', '37417', '13'), +('16', '76', '9', '46937', '57948', '13'), +('16', '76', '9', '39345', '45843', '13'), +('16', '76', '9', '51707', '43117', '13'), +('16', '76', '9', '83653', '42669', '13'), +('16', '76', '15', '79909', '69299', '13'), +('16', '76', '15', '80686', '64268', '13'), +('16', '76', '15', '80657', '64025', '13'), +('16', '76', '15', '79908', '62433', '13'), +('16', '76', '20', '80688', '77083', '13'), +('16', '76', '20', '46935', '60630', '13'), +('16', '76', '20', '80620', '55911', '13'), +('16', '76', '20', '46870', '51731', '13'), +('16', '76', '12', '53469', '61617', '13'), +('16', '76', '12', '53991', '49617', '13'), +('16', '76', '12', '39356', '44244', '13'), +('16', '76', '12', '47213', '38760', '13'), +('16', '76', '18', '53994', '51138', '13'), +('16', '76', '18', '83608', '45723', '13'), +('16', '76', '18', '70964', '42674', '13'), +('16', '76', '18', '46818', '41115', '13'), +('16', '76', '19', '53470', '54451', '13'), +('16', '76', '19', '53992', '50151', '13'), +('16', '76', '19', '83573', '40454', '13'), +('16', '76', '19', '70962', '37175', '13'), +('16', '76', '13', '80685', '349667', '13'), +('16', '76', '13', '46929', '344498', '13'), +('16', '76', '13', '80673', '341555', '13'), +('16', '76', '13', '80632', '320499', '13'), +('16', '76', '14', '46875', '52545', '13'), +('16', '76', '14', '46925', '51528', '13'), +('16', '76', '14', '83640', '40211', '13'), +('16', '76', '14', '47309', '35631', '13'), +('16', '76', '11', '80668', '63928', '13'), +('16', '76', '11', '46850', '60324', '13'), +('16', '76', '11', '80630', '58781', '13'), +('16', '76', '11', '46889', '58640', '13'), +('16', '77', '22', '21805', '0', '13'), +('16', '77', '22', '61948', '0', '13'), +('16', '77', '22', '66397', '0', '13'), +('16', '77', '22', '21807', '0', '13'), +('16', '77', '1', '80676', '63637', '13'), +('16', '77', '1', '80648', '61994', '13'), +('16', '77', '1', '80639', '58291', '13'), +('16', '77', '1', '46931', '56625', '13'), +('16', '77', '2', '53988', '49660', '13'), +('16', '77', '2', '70958', '46684', '13'), +('16', '77', '2', '83561', '41057', '13'), +('16', '77', '2', '83551', '33830', '13'), +('16', '77', '3', '80636', '62168', '13'), +('16', '77', '3', '46924', '51685', '13'), +('16', '77', '3', '46902', '47835', '13'), +('16', '77', '3', '46852', '46474', '13'), +('16', '77', '5', '80669', '66788', '13'), +('16', '77', '5', '46918', '62960', '13'), +('16', '77', '5', '80616', '59626', '13'), +('16', '77', '5', '46934', '55503', '13'), +('16', '77', '8', '80687', '68882', '13'), +('16', '77', '8', '46885', '68723', '13'), +('16', '77', '8', '80649', '58213', '13'), +('16', '77', '8', '46814', '50448', '13'), +('16', '77', '6', '80638', '71341', '13'), +('16', '77', '6', '46884', '57559', '13'), +('16', '77', '6', '46933', '57477', '13'), +('16', '77', '6', '46883', '55567', '13'), +('16', '77', '17', '83604', '55762', '13'), +('16', '77', '17', '53993', '51817', '13'), +('16', '77', '17', '70963', '47965', '13'), +('16', '77', '17', '46825', '45912', '13'), +('16', '77', '7', '53467', '54002', '13'), +('16', '77', '7', '83565', '41147', '13'), +('16', '77', '7', '39273', '40226', '13'), +('16', '77', '7', '70959', '37422', '13'), +('16', '77', '9', '46937', '57952', '13'), +('16', '77', '9', '39345', '45847', '13'), +('16', '77', '9', '51707', '43120', '13'), +('16', '77', '9', '83653', '42672', '13'), +('16', '77', '15', '79909', '69302', '13'), +('16', '77', '15', '80686', '64272', '13'), +('16', '77', '15', '80657', '64025', '13'), +('16', '77', '15', '79908', '62436', '13'), +('16', '77', '20', '80688', '77087', '13'), +('16', '77', '20', '46935', '60634', '13'), +('16', '77', '20', '80620', '55915', '13'), +('16', '77', '20', '46870', '51734', '13'), +('16', '77', '12', '53469', '61620', '13'), +('16', '77', '12', '53991', '49620', '13'), +('16', '77', '12', '39356', '44247', '13'), +('16', '77', '12', '47213', '38760', '13'), +('16', '77', '18', '53994', '51140', '13'), +('16', '77', '18', '83608', '45727', '13'), +('16', '77', '18', '70964', '42677', '13'), +('16', '77', '18', '46818', '41117', '13'), +('16', '77', '19', '53470', '54455', '13'), +('16', '77', '19', '53992', '50155', '13'), +('16', '77', '19', '83573', '40457', '13'), +('16', '77', '19', '70962', '37175', '13'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '77', '13', '80685', '350275', '13'), +('16', '77', '13', '46929', '345778', '13'), +('16', '77', '13', '80673', '342163', '13'), +('16', '77', '13', '80632', '321057', '13'), +('16', '77', '14', '46875', '52549', '13'), +('16', '77', '14', '46925', '51532', '13'), +('16', '77', '14', '83640', '40214', '13'), +('16', '77', '14', '47309', '35631', '13'), +('16', '77', '11', '80668', '63932', '13'), +('16', '77', '11', '46850', '60327', '13'), +('16', '77', '11', '80630', '58784', '13'), +('16', '77', '11', '46889', '58644', '13'), +('16', '78', '22', '21805', '0', '13'), +('16', '78', '22', '61948', '0', '13'), +('16', '78', '22', '66397', '0', '13'), +('16', '78', '22', '21807', '0', '13'), +('16', '78', '1', '80676', '63637', '13'), +('16', '78', '1', '80648', '61997', '13'), +('16', '78', '1', '80639', '58295', '13'), +('16', '78', '1', '46931', '56630', '13'), +('16', '78', '2', '53988', '49663', '13'), +('16', '78', '2', '70958', '46688', '13'), +('16', '78', '2', '83561', '41060', '13'), +('16', '78', '2', '83551', '33832', '13'), +('16', '78', '3', '80636', '62168', '13'), +('16', '78', '3', '46924', '51688', '13'), +('16', '78', '3', '46902', '47838', '13'), +('16', '78', '3', '46852', '46477', '13'), +('16', '78', '5', '80669', '66792', '13'), +('16', '78', '5', '46918', '62963', '13'), +('16', '78', '5', '80616', '59626', '13'), +('16', '78', '5', '46934', '55507', '13'), +('16', '78', '8', '80687', '68886', '13'), +('16', '78', '8', '46885', '68727', '13'), +('16', '78', '8', '80649', '58216', '13'), +('16', '78', '8', '46814', '50449', '13'), +('16', '78', '6', '80638', '71344', '13'), +('16', '78', '6', '46884', '57564', '13'), +('16', '78', '6', '46933', '57480', '13'), +('16', '78', '6', '46883', '55571', '13'), +('16', '78', '17', '83604', '55766', '13'), +('16', '78', '17', '53993', '51820', '13'), +('16', '78', '17', '70963', '47968', '13'), +('16', '78', '17', '46825', '45915', '13'), +('16', '78', '7', '53467', '54005', '13'), +('16', '78', '7', '83565', '41150', '13'), +('16', '78', '7', '39273', '40229', '13'), +('16', '78', '7', '70959', '37426', '13'), +('16', '78', '9', '46937', '57956', '13'), +('16', '78', '9', '39345', '45851', '13'), +('16', '78', '9', '51707', '43122', '13'), +('16', '78', '9', '83653', '42675', '13'), +('16', '78', '15', '79909', '69306', '13'), +('16', '78', '15', '80686', '64276', '13'), +('16', '78', '15', '80657', '64025', '13'), +('16', '78', '15', '79908', '62439', '13'), +('16', '78', '20', '80688', '77091', '13'), +('16', '78', '20', '46935', '60639', '13'), +('16', '78', '20', '80620', '55918', '13'), +('16', '78', '20', '46870', '51737', '13'), +('16', '78', '12', '53469', '61623', '13'), +('16', '78', '12', '53991', '49623', '13'), +('16', '78', '12', '39356', '44250', '13'), +('16', '78', '12', '47213', '38760', '13'), +('16', '78', '18', '53994', '51142', '13'), +('16', '78', '18', '83608', '45731', '13'), +('16', '78', '18', '70964', '42680', '13'), +('16', '78', '18', '46818', '41120', '13'), +('16', '78', '19', '53470', '54458', '13'), +('16', '78', '19', '53992', '50158', '13'), +('16', '78', '19', '83573', '40460', '13'), +('16', '78', '19', '70962', '37175', '13'), +('16', '78', '13', '80685', '350833', '13'), +('16', '78', '13', '46929', '347109', '13'), +('16', '78', '13', '80673', '342721', '13'), +('16', '78', '13', '80632', '321614', '13'), +('16', '78', '14', '46875', '52553', '13'), +('16', '78', '14', '46925', '51536', '13'), +('16', '78', '14', '83640', '40218', '13'), +('16', '78', '14', '47309', '35631', '13'), +('16', '78', '11', '80668', '63936', '13'), +('16', '78', '11', '46850', '60330', '13'), +('16', '78', '11', '80630', '58788', '13'), +('16', '78', '11', '46889', '58648', '13'), +('16', '79', '22', '21805', '0', '13'), +('16', '79', '22', '61948', '0', '13'), +('16', '79', '22', '66397', '0', '13'), +('16', '79', '22', '21807', '0', '13'), +('16', '79', '1', '80676', '63637', '13'), +('16', '79', '1', '80648', '62001', '13'), +('16', '79', '1', '80639', '58298', '13'), +('16', '79', '1', '46931', '56634', '13'), +('16', '79', '2', '53988', '49666', '13'), +('16', '79', '2', '70958', '46691', '13'), +('16', '79', '2', '83561', '41063', '13'), +('16', '79', '2', '83551', '33835', '13'), +('16', '79', '3', '80636', '62168', '13'), +('16', '79', '3', '46924', '51692', '13'), +('16', '79', '3', '46902', '47841', '13'), +('16', '79', '3', '46852', '46480', '13'), +('16', '79', '5', '80669', '66796', '13'), +('16', '79', '5', '46918', '62967', '13'), +('16', '79', '5', '80616', '59626', '13'), +('16', '79', '5', '46934', '55511', '13'), +('16', '79', '8', '80687', '68890', '13'), +('16', '79', '8', '46885', '68731', '13'), +('16', '79', '8', '80649', '58220', '13'), +('16', '79', '8', '46814', '50451', '13'), +('16', '79', '6', '80638', '71348', '13'), +('16', '79', '6', '46884', '57568', '13'), +('16', '79', '6', '46933', '57482', '13'), +('16', '79', '6', '46883', '55575', '13'), +('16', '79', '17', '83604', '55770', '13'), +('16', '79', '17', '53993', '51824', '13'), +('16', '79', '17', '70963', '47971', '13'), +('16', '79', '17', '46825', '45918', '13'), +('16', '79', '7', '53467', '54007', '13'), +('16', '79', '7', '83565', '41154', '13'), +('16', '79', '7', '39273', '40232', '13'), +('16', '79', '7', '70959', '37431', '13'), +('16', '79', '9', '46937', '57960', '13'), +('16', '79', '9', '39345', '45855', '13'), +('16', '79', '9', '51707', '43125', '13'), +('16', '79', '9', '83653', '42678', '13'), +('16', '79', '15', '79909', '69309', '13'), +('16', '79', '15', '80686', '64280', '13'), +('16', '79', '15', '80657', '64025', '13'), +('16', '79', '15', '79908', '62442', '13'), +('16', '79', '20', '80688', '77095', '13'), +('16', '79', '20', '46935', '60643', '13'), +('16', '79', '20', '80620', '55921', '13'), +('16', '79', '20', '46870', '51740', '13'), +('16', '79', '12', '53469', '61625', '13'), +('16', '79', '12', '53991', '49625', '13'), +('16', '79', '12', '39356', '44253', '13'), +('16', '79', '12', '47213', '38760', '13'), +('16', '79', '18', '53994', '51144', '13'), +('16', '79', '18', '83608', '45735', '13'), +('16', '79', '18', '70964', '42684', '13'), +('16', '79', '18', '46818', '41122', '13'), +('16', '79', '19', '53470', '54461', '13'), +('16', '79', '19', '53992', '50161', '13'), +('16', '79', '19', '83573', '40464', '13'), +('16', '79', '19', '70962', '37175', '13'), +('16', '79', '13', '80685', '351441', '13'), +('16', '79', '13', '46929', '348389', '13'), +('16', '79', '13', '80673', '343278', '13'), +('16', '79', '13', '80632', '322121', '13'), +('16', '79', '14', '46875', '52557', '13'), +('16', '79', '14', '46925', '51540', '13'), +('16', '79', '14', '83640', '40221', '13'), +('16', '79', '14', '47309', '35631', '13'), +('16', '79', '11', '80668', '63940', '13'), +('16', '79', '11', '46850', '60334', '13'), +('16', '79', '11', '80630', '58791', '13'), +('16', '79', '11', '46889', '58652', '13'), +('16', '80', '22', '21805', '0', '14'), +('16', '80', '22', '61948', '0', '14'), +('16', '80', '22', '66397', '0', '14'), +('16', '80', '22', '21807', '0', '14'), +('16', '80', '1', '102590', '87751', '14'), +('16', '80', '1', '102641', '87605', '14'), +('16', '80', '1', '102639', '86371', '14'), +('16', '80', '1', '102642', '86075', '14'), +('16', '80', '2', '102010', '60330', '14'), +('16', '80', '2', '102262', '54071', '14'), +('16', '80', '2', '53988', '49670', '14'), +('16', '80', '2', '70958', '46695', '14'), +('16', '80', '3', '102726', '96415', '14'), +('16', '80', '3', '102591', '93381', '14'), +('16', '80', '3', '102725', '83515', '14'), +('16', '80', '3', '102554', '82499', '14'), +('16', '80', '5', '102592', '91776', '14'), +('16', '80', '5', '102745', '84317', '14'), +('16', '80', '5', '102551', '80663', '14'), +('16', '80', '5', '80669', '66800', '14'), +('16', '80', '8', '102594', '92901', '14'), +('16', '80', '8', '102552', '90425', '14'), +('16', '80', '8', '102527', '69811', '14'), +('16', '80', '8', '80687', '68895', '14'), +('16', '80', '6', '102593', '93155', '14'), +('16', '80', '6', '102555', '81415', '14'), +('16', '80', '6', '80638', '71352', '14'), +('16', '80', '6', '46884', '57573', '14'), +('16', '80', '17', '102013', '63733', '14'), +('16', '80', '17', '102265', '58405', '14'), +('16', '80', '17', '83604', '55774', '14'), +('16', '80', '17', '53993', '51827', '14'), +('16', '80', '7', '102011', '60918', '14'), +('16', '80', '7', '102263', '55497', '14'), +('16', '80', '7', '53467', '54009', '14'), +('16', '80', '7', '83565', '41157', '14'), +('16', '80', '9', '67098', '150840', '14'), +('16', '80', '9', '46937', '57965', '14'), +('16', '80', '9', '102288', '49807', '14'), +('16', '80', '9', '39345', '45859', '14'), +('16', '80', '15', '102595', '90284', '14'), +('16', '80', '15', '102636', '88922', '14'), +('16', '80', '15', '102637', '88472', '14'), +('16', '80', '15', '102635', '87608', '14'), +('16', '80', '20', '102596', '101773', '14'), +('16', '80', '20', '102553', '89560', '14'), +('16', '80', '20', '80688', '77100', '14'), +('16', '80', '20', '46935', '60648', '14'), +('16', '80', '12', '53469', '61628', '14'), +('16', '80', '12', '102260', '51935', '14'), +('16', '80', '12', '53991', '49628', '14'), +('16', '80', '12', '39356', '44256', '14'), +('16', '80', '18', '102012', '62457', '14'), +('16', '80', '18', '102264', '56508', '14'), +('16', '80', '18', '53994', '51147', '14'), +('16', '80', '18', '83608', '45739', '14'), +('16', '80', '19', '76131', '57650', '14'), +('16', '80', '19', '53470', '54465', '14'), +('16', '80', '19', '102261', '52087', '14'), +('16', '80', '19', '53992', '50165', '14'), +('16', '80', '13', '102663', '451492', '14'), +('16', '80', '13', '102653', '427152', '14'), +('16', '80', '13', '102658', '422613', '14'), +('16', '80', '13', '102580', '420364', '14'), +('16', '80', '14', '46875', '52561', '14'), +('16', '80', '14', '46925', '51544', '14'), +('16', '80', '14', '83640', '40225', '14'), +('16', '80', '14', '47309', '35631', '14'), +('16', '80', '11', '102643', '89021', '14'), +('16', '80', '11', '102747', '82941', '14'), +('16', '80', '11', '80668', '63945', '14'), +('16', '80', '11', '102747', '62466', '14'), +('16', '81', '22', '21805', '0', '14'), +('16', '81', '22', '61948', '0', '14'), +('16', '81', '22', '66397', '0', '14'), +('16', '81', '22', '21807', '0', '14'), +('16', '81', '1', '102590', '87756', '14'), +('16', '81', '1', '102641', '87608', '14'), +('16', '81', '1', '102639', '86376', '14'), +('16', '81', '1', '102642', '86076', '14'), +('16', '81', '2', '102010', '60334', '14'), +('16', '81', '2', '102262', '54074', '14'), +('16', '81', '2', '53988', '49673', '14'), +('16', '81', '2', '70958', '46698', '14'), +('16', '81', '3', '102726', '96420', '14'), +('16', '81', '3', '102591', '93384', '14'), +('16', '81', '3', '102725', '83518', '14'), +('16', '81', '3', '102554', '82503', '14'), +('16', '81', '5', '102592', '91779', '14'), +('16', '81', '5', '102745', '84320', '14'), +('16', '81', '5', '102551', '80664', '14'), +('16', '81', '5', '80669', '66804', '14'), +('16', '81', '8', '102594', '92902', '14'), +('16', '81', '8', '102552', '90428', '14'), +('16', '81', '8', '102527', '69816', '14'), +('16', '81', '8', '80687', '68898', '14'), +('16', '81', '6', '102593', '93160', '14'), +('16', '81', '6', '102555', '81419', '14'), +('16', '81', '6', '80638', '71355', '14'), +('16', '81', '6', '46884', '57577', '14'), +('16', '81', '17', '102013', '63735', '14'), +('16', '81', '17', '102265', '58409', '14'), +('16', '81', '17', '83604', '55778', '14'), +('16', '81', '17', '53993', '51831', '14'), +('16', '81', '7', '102011', '60921', '14'), +('16', '81', '7', '102263', '55499', '14'), +('16', '81', '7', '53467', '54011', '14'), +('16', '81', '7', '83565', '41161', '14'), +('16', '81', '9', '67098', '152728', '14'), +('16', '81', '9', '46937', '57969', '14'), +('16', '81', '9', '102288', '49810', '14'), +('16', '81', '9', '39345', '45863', '14'), +('16', '81', '15', '102595', '90288', '14'), +('16', '81', '15', '102636', '88925', '14'), +('16', '81', '15', '102637', '88476', '14'), +('16', '81', '15', '102635', '87610', '14'), +('16', '81', '20', '102596', '101776', '14'), +('16', '81', '20', '102553', '89565', '14'), +('16', '81', '20', '80688', '77103', '14'), +('16', '81', '20', '46935', '60652', '14'), +('16', '81', '12', '53469', '61631', '14'), +('16', '81', '12', '102260', '51937', '14'), +('16', '81', '12', '53991', '49631', '14'), +('16', '81', '12', '39356', '44258', '14'), +('16', '81', '18', '102012', '62462', '14'), +('16', '81', '18', '102264', '56512', '14'), +('16', '81', '18', '53994', '51149', '14'), +('16', '81', '18', '83608', '45743', '14'), +('16', '81', '19', '76131', '57650', '14'), +('16', '81', '19', '53470', '54468', '14'), +('16', '81', '19', '102261', '52089', '14'), +('16', '81', '19', '53992', '50168', '14'), +('16', '81', '13', '102663', '452403', '14'), +('16', '81', '13', '102653', '427861', '14'), +('16', '81', '13', '102658', '423323', '14'), +('16', '81', '13', '102580', '421193', '14'), +('16', '81', '14', '46875', '52565', '14'), +('16', '81', '14', '46925', '51548', '14'), +('16', '81', '14', '83640', '40228', '14'), +('16', '81', '14', '47309', '35631', '14'), +('16', '81', '11', '102643', '89022', '14'), +('16', '81', '11', '102747', '82943', '14'), +('16', '81', '11', '80668', '63948', '14'), +('16', '81', '11', '102747', '62467', '14'), +('16', '82', '22', '21805', '0', '14'), +('16', '82', '22', '61948', '0', '14'), +('16', '82', '22', '66397', '0', '14'), +('16', '82', '22', '21807', '0', '14'), +('16', '82', '1', '102590', '87760', '14'), +('16', '82', '1', '102641', '87610', '14'), +('16', '82', '1', '102639', '86381', '14'), +('16', '82', '1', '102642', '86077', '14'), +('16', '82', '2', '102010', '60339', '14'), +('16', '82', '2', '102262', '54076', '14'), +('16', '82', '2', '53988', '49677', '14'), +('16', '82', '2', '70958', '46701', '14'), +('16', '82', '3', '102726', '96424', '14'), +('16', '82', '3', '102591', '93387', '14'), +('16', '82', '3', '102725', '83521', '14'), +('16', '82', '3', '102554', '82506', '14'), +('16', '82', '5', '102592', '91782', '14'), +('16', '82', '5', '102745', '84324', '14'), +('16', '82', '5', '102551', '80666', '14'), +('16', '82', '5', '80669', '66808', '14'), +('16', '82', '8', '102594', '92903', '14'), +('16', '82', '8', '102552', '90431', '14'), +('16', '82', '8', '102527', '69821', '14'), +('16', '82', '8', '80687', '68902', '14'), +('16', '82', '6', '102593', '93166', '14'), +('16', '82', '6', '102555', '81422', '14'), +('16', '82', '6', '80638', '71359', '14'), +('16', '82', '6', '46884', '57582', '14'), +('16', '82', '17', '102013', '63736', '14'), +('16', '82', '17', '102265', '58413', '14'), +('16', '82', '17', '83604', '55782', '14'), +('16', '82', '17', '53993', '51834', '14'), +('16', '82', '7', '102011', '60924', '14'), +('16', '82', '7', '102263', '55501', '14'), +('16', '82', '7', '53467', '54014', '14'), +('16', '82', '7', '83565', '41164', '14'), +('16', '82', '9', '67098', '154616', '14'), +('16', '82', '9', '46937', '57973', '14'), +('16', '82', '9', '102288', '49814', '14'), +('16', '82', '9', '39345', '45866', '14'), +('16', '82', '15', '102595', '90292', '14'), +('16', '82', '15', '102636', '88928', '14'), +('16', '82', '15', '102637', '88481', '14'), +('16', '82', '15', '102635', '87612', '14'), +('16', '82', '20', '102596', '101778', '14'), +('16', '82', '20', '102553', '89570', '14'), +('16', '82', '20', '80688', '77107', '14'), +('16', '82', '20', '46935', '60657', '14'), +('16', '82', '12', '53469', '61634', '14'), +('16', '82', '12', '102260', '51939', '14'), +('16', '82', '12', '53991', '49634', '14'), +('16', '82', '12', '39356', '44261', '14'), +('16', '82', '18', '102012', '62466', '14'), +('16', '82', '18', '102264', '56515', '14'), +('16', '82', '18', '53994', '51151', '14'), +('16', '82', '18', '83608', '45747', '14'), +('16', '82', '19', '76131', '57650', '14'), +('16', '82', '19', '53470', '54471', '14'), +('16', '82', '19', '102261', '52091', '14'), +('16', '82', '19', '53992', '50171', '14'), +('16', '82', '13', '102663', '453314', '14'), +('16', '82', '13', '102653', '428519', '14'), +('16', '82', '13', '102658', '423981', '14'), +('16', '82', '13', '102580', '422074', '14'), +('16', '82', '14', '46875', '52569', '14'), +('16', '82', '14', '46925', '51552', '14'), +('16', '82', '14', '83640', '40231', '14'), +('16', '82', '14', '47309', '35631', '14'), +('16', '82', '11', '102643', '89024', '14'), +('16', '82', '11', '102747', '82946', '14'), +('16', '82', '11', '80668', '63952', '14'), +('16', '82', '11', '102747', '62468', '14'), +('16', '83', '22', '21805', '0', '14'), +('16', '83', '22', '61948', '0', '14'), +('16', '83', '22', '66397', '0', '14'), +('16', '83', '22', '21807', '0', '14'), +('16', '83', '1', '102590', '87765', '14'), +('16', '83', '1', '102641', '87613', '14'), +('16', '83', '1', '102639', '86386', '14'), +('16', '83', '1', '102642', '86079', '14'), +('16', '83', '2', '102010', '60345', '14'), +('16', '83', '2', '102262', '54078', '14'), +('16', '83', '2', '53988', '49680', '14'), +('16', '83', '2', '70958', '46705', '14'), +('16', '83', '3', '102726', '96429', '14'), +('16', '83', '3', '102591', '93391', '14'), +('16', '83', '3', '102725', '83525', '14'), +('16', '83', '3', '102554', '82509', '14'), +('16', '83', '5', '102592', '91785', '14'), +('16', '83', '5', '102745', '84329', '14'), +('16', '83', '5', '102551', '80667', '14'), +('16', '83', '5', '80669', '66812', '14'), +('16', '83', '8', '102594', '92904', '14'), +('16', '83', '8', '102552', '90435', '14'), +('16', '83', '8', '102527', '69827', '14'), +('16', '83', '8', '80687', '68907', '14'), +('16', '83', '6', '102593', '93172', '14'), +('16', '83', '6', '102555', '81426', '14'), +('16', '83', '6', '80638', '71362', '14'), +('16', '83', '6', '46884', '57587', '14'), +('16', '83', '17', '102013', '63737', '14'), +('16', '83', '17', '102265', '58418', '14'), +('16', '83', '17', '83604', '55786', '14'), +('16', '83', '17', '53993', '51838', '14'), +('16', '83', '7', '102011', '60928', '14'), +('16', '83', '7', '102263', '55502', '14'), +('16', '83', '7', '53467', '54016', '14'), +('16', '83', '7', '83565', '41167', '14'), +('16', '83', '9', '67098', '156505', '14'), +('16', '83', '9', '46937', '57978', '14'), +('16', '83', '9', '102288', '49817', '14'), +('16', '83', '9', '39345', '45871', '14'), +('16', '83', '15', '102595', '90295', '14'), +('16', '83', '15', '102636', '88931', '14'), +('16', '83', '15', '102637', '88485', '14'), +('16', '83', '15', '102635', '87614', '14'), +('16', '83', '20', '102596', '101781', '14'), +('16', '83', '20', '102553', '89575', '14'), +('16', '83', '20', '80688', '77112', '14'), +('16', '83', '20', '46935', '60662', '14'), +('16', '83', '12', '53469', '61637', '14'), +('16', '83', '12', '102260', '51941', '14'), +('16', '83', '12', '53991', '49637', '14'), +('16', '83', '12', '39356', '44264', '14'), +('16', '83', '18', '102012', '62471', '14'), +('16', '83', '18', '102264', '56519', '14'), +('16', '83', '18', '53994', '51154', '14'), +('16', '83', '18', '83608', '45751', '14'), +('16', '83', '19', '76131', '57650', '14'), +('16', '83', '19', '53470', '54475', '14'), +('16', '83', '19', '102261', '52094', '14'), +('16', '83', '19', '53992', '50175', '14'), +('16', '83', '13', '102663', '454276', '14'), +('16', '83', '13', '102653', '429177', '14'), +('16', '83', '13', '102658', '424641', '14'), +('16', '83', '13', '102580', '422904', '14'), +('16', '83', '14', '46875', '52573', '14'), +('16', '83', '14', '46925', '51556', '14'), +('16', '83', '14', '83640', '40235', '14'), +('16', '83', '14', '47309', '35631', '14'), +('16', '83', '11', '102643', '89025', '14'), +('16', '83', '11', '102747', '82949', '14'), +('16', '83', '11', '80668', '63957', '14'), +('16', '83', '11', '102747', '62469', '14'), +('16', '84', '22', '21805', '0', '14'), +('16', '84', '22', '61948', '0', '14'), +('16', '84', '22', '66397', '0', '14'), +('16', '84', '22', '21807', '0', '14'), +('16', '84', '1', '102590', '87770', '14'), +('16', '84', '1', '102641', '87616', '14'), +('16', '84', '1', '102639', '86391', '14'), +('16', '84', '1', '102642', '86080', '14'), +('16', '84', '2', '102010', '60349', '14'), +('16', '84', '2', '102262', '54081', '14'), +('16', '84', '2', '53988', '49683', '14'), +('16', '84', '2', '70958', '46708', '14'), +('16', '84', '3', '102726', '96433', '14'), +('16', '84', '3', '102591', '93394', '14'), +('16', '84', '3', '102725', '83528', '14'), +('16', '84', '3', '102554', '82513', '14'), +('16', '84', '5', '102592', '91788', '14'), +('16', '84', '5', '102745', '84332', '14'), +('16', '84', '5', '102551', '80668', '14'), +('16', '84', '5', '80669', '66816', '14'), +('16', '84', '8', '102594', '92906', '14'), +('16', '84', '8', '102552', '90438', '14'), +('16', '84', '8', '102527', '69832', '14'), +('16', '84', '8', '80687', '68911', '14'), +('16', '84', '6', '102593', '93177', '14'), +('16', '84', '6', '102555', '81429', '14'), +('16', '84', '6', '80638', '71366', '14'), +('16', '84', '6', '46884', '57591', '14'), +('16', '84', '17', '102013', '63738', '14'), +('16', '84', '17', '102265', '58422', '14'), +('16', '84', '17', '83604', '55790', '14'), +('16', '84', '17', '53993', '51841', '14'), +('16', '84', '7', '102011', '60931', '14'), +('16', '84', '7', '102263', '55504', '14'), +('16', '84', '7', '53467', '54018', '14'), +('16', '84', '7', '83565', '41171', '14'), +('16', '84', '9', '67098', '158394', '14'), +('16', '84', '9', '46937', '57982', '14'), +('16', '84', '9', '102288', '49821', '14'), +('16', '84', '9', '39345', '45875', '14'), +('16', '84', '15', '102595', '90299', '14'), +('16', '84', '15', '102636', '88934', '14'), +('16', '84', '15', '102637', '88490', '14'), +('16', '84', '15', '102635', '87616', '14'), +('16', '84', '20', '102596', '101783', '14'), +('16', '84', '20', '102553', '89580', '14'), +('16', '84', '20', '80688', '77116', '14'), +('16', '84', '20', '46935', '60666', '14'), +('16', '84', '12', '53469', '61640', '14'), +('16', '84', '12', '102260', '51943', '14'), +('16', '84', '12', '53991', '49640', '14'), +('16', '84', '12', '39356', '44267', '14'), +('16', '84', '18', '102012', '62475', '14'), +('16', '84', '18', '102264', '56523', '14'), +('16', '84', '18', '53994', '51156', '14'), +('16', '84', '18', '83608', '45755', '14'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '84', '19', '76131', '57650', '14'), +('16', '84', '19', '53470', '54478', '14'), +('16', '84', '19', '102261', '52096', '14'), +('16', '84', '19', '53992', '50178', '14'), +('16', '84', '13', '102663', '455187', '14'), +('16', '84', '13', '102653', '429886', '14'), +('16', '84', '13', '102658', '425299', '14'), +('16', '84', '13', '102580', '423784', '14'), +('16', '84', '14', '46875', '52577', '14'), +('16', '84', '14', '46925', '51560', '14'), +('16', '84', '14', '83640', '40238', '14'), +('16', '84', '14', '47309', '35631', '14'), +('16', '84', '11', '102643', '89027', '14'), +('16', '84', '11', '102747', '82952', '14'), +('16', '84', '11', '80668', '63961', '14'), +('16', '84', '11', '102747', '62470', '14'), +('16', '85', '22', '21807', '0', '16'), +('16', '85', '22', '21805', '0', '16'), +('16', '85', '22', '61948', '0', '16'), +('16', '85', '22', '12425', '0', '16'), +('16', '85', '1', '111303', '167165', '16'), +('16', '85', '1', '111308', '166809', '16'), +('16', '85', '1', '111300', '165794', '16'), +('16', '85', '1', '111305', '165543', '16'), +('16', '85', '2', '94056', '107028', '16'), +('16', '85', '2', '62985', '105434', '16'), +('16', '85', '2', '104410', '87143', '16'), +('16', '85', '2', '54846', '67394', '16'), +('16', '85', '3', '111315', '166004', '16'), +('16', '85', '3', '111313', '165804', '16'), +('16', '85', '3', '111316', '162801', '16'), +('16', '85', '3', '111014', '146089', '16'), +('16', '85', '5', '111318', '165325', '16'), +('16', '85', '5', '111320', '164898', '16'), +('16', '85', '5', '111319', '161834', '16'), +('16', '85', '5', '111017', '145487', '16'), +('16', '85', '8', '111331', '168396', '16'), +('16', '85', '8', '111328', '167064', '16'), +('16', '85', '8', '111332', '162869', '16'), +('16', '85', '8', '111030', '148531', '16'), +('16', '85', '6', '111322', '165970', '16'), +('16', '85', '6', '111324', '165761', '16'), +('16', '85', '6', '111326', '161934', '16'), +('16', '85', '6', '111021', '146105', '16'), +('16', '85', '17', '56046', '112028', '16'), +('16', '85', '17', '81765', '110229', '16'), +('16', '85', '17', '56083', '110039', '16'), +('16', '85', '17', '104413', '93175', '16'), +('16', '85', '7', '94053', '108121', '16'), +('16', '85', '7', '56079', '106639', '16'), +('16', '85', '7', '104411', '91691', '16'), +('16', '85', '7', '54850', '67327', '16'), +('16', '85', '9', '67098', '160283', '16'), +('16', '85', '9', '56033', '103793', '16'), +('16', '85', '9', '56031', '103786', '16'), +('16', '85', '9', '56070', '103516', '16'), +('16', '85', '15', '111343', '167627', '16'), +('16', '85', '15', '111347', '166692', '16'), +('16', '85', '15', '111345', '164820', '16'), +('16', '85', '15', '111339', '163818', '16'), +('16', '85', '20', '111354', '179415', '16'), +('16', '85', '20', '111355', '176140', '16'), +('16', '85', '20', '111351', '174231', '16'), +('16', '85', '20', '111352', '172393', '16'), +('16', '85', '12', '81795', '104134', '16'), +('16', '85', '12', '56073', '103973', '16'), +('16', '85', '12', '104408', '87880', '16'), +('16', '85', '12', '49656', '66068', '16'), +('16', '85', '18', '62986', '108477', '16'), +('16', '85', '18', '56041', '107400', '16'), +('16', '85', '18', '94054', '105753', '16'), +('16', '85', '18', '104412', '93534', '16'), +('16', '85', '19', '62990', '107966', '16'), +('16', '85', '19', '56037', '106912', '16'), +('16', '85', '19', '56075', '105221', '16'), +('16', '85', '19', '81763', '104045', '16'), +('16', '85', '13', '111514', '683315', '16'), +('16', '85', '13', '111520', '674236', '16'), +('16', '85', '13', '111525', '670156', '16'), +('16', '85', '13', '111220', '633144', '16'), +('16', '85', '14', '62980', '111148', '16'), +('16', '85', '14', '54901', '68208', '16'), +('16', '85', '14', '46875', '52581', '16'), +('16', '85', '14', '46925', '51564', '16'), +('16', '85', '11', '111338', '167217', '16'), +('16', '85', '11', '111333', '165770', '16'), +('16', '85', '11', '111337', '162626', '16'), +('16', '85', '11', '111334', '162009', '16'), +('16', '85', '22', '21805', '0', '15'), +('16', '85', '22', '61948', '0', '15'), +('16', '85', '22', '66397', '0', '15'), +('16', '85', '22', '21807', '0', '15'), +('16', '85', '1', '107054', '125048', '15'), +('16', '85', '1', '107010', '122802', '15'), +('16', '85', '1', '107053', '121343', '15'), +('16', '85', '1', '107052', '118798', '15'), +('16', '85', '2', '94056', '107028', '15'), +('16', '85', '2', '62985', '105434', '15'), +('16', '85', '2', '104410', '87143', '15'), +('16', '85', '2', '54846', '67394', '15'), +('16', '85', '3', '107011', '125484', '15'), +('16', '85', '3', '107055', '124910', '15'), +('16', '85', '3', '106801', '117448', '15'), +('16', '85', '3', '106841', '115670', '15'), +('16', '85', '5', '107012', '122572', '15'), +('16', '85', '5', '107056', '122548', '15'), +('16', '85', '5', '106802', '117067', '15'), +('16', '85', '5', '106714', '105449', '15'), +('16', '85', '8', '106804', '127477', '15'), +('16', '85', '8', '107058', '126786', '15'), +('16', '85', '8', '107014', '125983', '15'), +('16', '85', '8', '106844', '117197', '15'), +('16', '85', '6', '106803', '125334', '15'), +('16', '85', '6', '107013', '124186', '15'), +('16', '85', '6', '107057', '124048', '15'), +('16', '85', '6', '106843', '124041', '15'), +('16', '85', '17', '56046', '112028', '15'), +('16', '85', '17', '81765', '110229', '15'), +('16', '85', '17', '56083', '110039', '15'), +('16', '85', '17', '104413', '93175', '15'), +('16', '85', '7', '94053', '108121', '15'), +('16', '85', '7', '56079', '106639', '15'), +('16', '85', '7', '104411', '91691', '15'), +('16', '85', '7', '54850', '67327', '15'), +('16', '85', '9', '67098', '160283', '15'), +('16', '85', '9', '56033', '103793', '15'), +('16', '85', '9', '56031', '103786', '15'), +('16', '85', '9', '56070', '103516', '15'), +('16', '85', '15', '107062', '123196', '15'), +('16', '85', '15', '107051', '121539', '15'), +('16', '85', '15', '107016', '121106', '15'), +('16', '85', '15', '107050', '119372', '15'), +('16', '85', '20', '107059', '134648', '15'), +('16', '85', '20', '107017', '132069', '15'), +('16', '85', '20', '106845', '125324', '15'), +('16', '85', '20', '106807', '116548', '15'), +('16', '85', '12', '81795', '104134', '15'), +('16', '85', '12', '56073', '103973', '15'), +('16', '85', '12', '104408', '87880', '15'), +('16', '85', '12', '53469', '61643', '15'), +('16', '85', '18', '62986', '108477', '15'), +('16', '85', '18', '56041', '107400', '15'), +('16', '85', '18', '94054', '105753', '15'), +('16', '85', '18', '104412', '93534', '15'), +('16', '85', '19', '62990', '107966', '15'), +('16', '85', '19', '56037', '106912', '15'), +('16', '85', '19', '56075', '105221', '15'), +('16', '85', '19', '81763', '104045', '15'), +('16', '85', '13', '106857', '519896', '15'), +('16', '85', '13', '106862', '516803', '15'), +('16', '85', '13', '106865', '509733', '15'), +('16', '85', '13', '106762', '489743', '15'), +('16', '85', '14', '62980', '111148', '15'), +('16', '85', '14', '54901', '68208', '15'), +('16', '85', '14', '46875', '52581', '15'), +('16', '85', '14', '46925', '51564', '15'), +('16', '85', '11', '107015', '121720', '15'), +('16', '85', '11', '106805', '115353', '15'), +('16', '85', '11', '62965', '107690', '15'), +('16', '85', '11', '106717', '104523', '15'), +('16', '86', '22', '21807', '0', '16'), +('16', '86', '22', '21805', '0', '16'), +('16', '86', '22', '61948', '0', '16'), +('16', '86', '22', '12425', '0', '16'), +('16', '86', '1', '111303', '167169', '16'), +('16', '86', '1', '111308', '166813', '16'), +('16', '86', '1', '111300', '165797', '16'), +('16', '86', '1', '111305', '165546', '16'), +('16', '86', '2', '94056', '107031', '16'), +('16', '86', '2', '62985', '105436', '16'), +('16', '86', '2', '104410', '87146', '16'), +('16', '86', '2', '54846', '67397', '16'), +('16', '86', '3', '111315', '166009', '16'), +('16', '86', '3', '111313', '165807', '16'), +('16', '86', '3', '111316', '162804', '16'), +('16', '86', '3', '111014', '146094', '16'), +('16', '86', '5', '111318', '165327', '16'), +('16', '86', '5', '111320', '164902', '16'), +('16', '86', '5', '111319', '161839', '16'), +('16', '86', '5', '111017', '145490', '16'), +('16', '86', '8', '111331', '168400', '16'), +('16', '86', '8', '111328', '167068', '16'), +('16', '86', '8', '111332', '162872', '16'), +('16', '86', '8', '111030', '148535', '16'), +('16', '86', '6', '111322', '165973', '16'), +('16', '86', '6', '111324', '165765', '16'), +('16', '86', '6', '111326', '161937', '16'), +('16', '86', '6', '111021', '146108', '16'), +('16', '86', '17', '56046', '112033', '16'), +('16', '86', '17', '81765', '110232', '16'), +('16', '86', '17', '56083', '110041', '16'), +('16', '86', '17', '104413', '93178', '16'), +('16', '86', '7', '94053', '108124', '16'), +('16', '86', '7', '56079', '106643', '16'), +('16', '86', '7', '104411', '91694', '16'), +('16', '86', '7', '54850', '67328', '16'), +('16', '86', '9', '67098', '162171', '16'), +('16', '86', '9', '56033', '103795', '16'), +('16', '86', '9', '56031', '103789', '16'), +('16', '86', '9', '56070', '103518', '16'), +('16', '86', '15', '111343', '167629', '16'), +('16', '86', '15', '111347', '166696', '16'), +('16', '86', '15', '111345', '164822', '16'), +('16', '86', '15', '111339', '163820', '16'), +('16', '86', '20', '111354', '179418', '16'), +('16', '86', '20', '111355', '176142', '16'), +('16', '86', '20', '111351', '174233', '16'), +('16', '86', '20', '111352', '172396', '16'), +('16', '86', '12', '81795', '104138', '16'), +('16', '86', '12', '56073', '103978', '16'), +('16', '86', '12', '104408', '87883', '16'), +('16', '86', '12', '49656', '66069', '16'), +('16', '86', '18', '62986', '108482', '16'), +('16', '86', '18', '56041', '107402', '16'), +('16', '86', '18', '94054', '105757', '16'), +('16', '86', '18', '104412', '93535', '16'), +('16', '86', '19', '62990', '107969', '16'), +('16', '86', '19', '56037', '106915', '16'), +('16', '86', '19', '56075', '105224', '16'), +('16', '86', '19', '81763', '104047', '16'), +('16', '86', '13', '111514', '684682', '16'), +('16', '86', '13', '111520', '675602', '16'), +('16', '86', '13', '111525', '671523', '16'), +('16', '86', '13', '111220', '634459', '16'), +('16', '86', '14', '62980', '111150', '16'), +('16', '86', '14', '54901', '68210', '16'), +('16', '86', '14', '46875', '52585', '16'), +('16', '86', '14', '46925', '51568', '16'), +('16', '86', '11', '111338', '167221', '16'), +('16', '86', '11', '111333', '165772', '16'), +('16', '86', '11', '111337', '162629', '16'), +('16', '86', '11', '111334', '162012', '16'), +('16', '87', '22', '21807', '0', '16'), +('16', '87', '22', '21805', '0', '16'), +('16', '87', '22', '61948', '0', '16'), +('16', '87', '22', '12425', '0', '16'), +('16', '87', '1', '111303', '167174', '16'), +('16', '87', '1', '111308', '166816', '16'), +('16', '87', '1', '111300', '165800', '16'), +('16', '87', '1', '111305', '165550', '16'), +('16', '87', '2', '94056', '107034', '16'), +('16', '87', '2', '62985', '105438', '16'), +('16', '87', '2', '104410', '87149', '16'), +('16', '87', '2', '54846', '67400', '16'), +('16', '87', '3', '111315', '166014', '16'), +('16', '87', '3', '111313', '165810', '16'), +('16', '87', '3', '111316', '162808', '16'), +('16', '87', '3', '111014', '146099', '16'), +('16', '87', '5', '111318', '165330', '16'), +('16', '87', '5', '111320', '164906', '16'), +('16', '87', '5', '111319', '161843', '16'), +('16', '87', '5', '111017', '145493', '16'), +('16', '87', '8', '111331', '168404', '16'), +('16', '87', '8', '111328', '167072', '16'), +('16', '87', '8', '111332', '162875', '16'), +('16', '87', '8', '111030', '148539', '16'), +('16', '87', '6', '111322', '165976', '16'), +('16', '87', '6', '111324', '165769', '16'), +('16', '87', '6', '111326', '161941', '16'), +('16', '87', '6', '111021', '146111', '16'), +('16', '87', '17', '56046', '112038', '16'), +('16', '87', '17', '81765', '110235', '16'), +('16', '87', '17', '56083', '110043', '16'), +('16', '87', '17', '104413', '93182', '16'), +('16', '87', '7', '94053', '108128', '16'), +('16', '87', '7', '56079', '106647', '16'), +('16', '87', '7', '104411', '91697', '16'), +('16', '87', '7', '54850', '67329', '16'), +('16', '87', '9', '67098', '164061', '16'), +('16', '87', '9', '56033', '103797', '16'), +('16', '87', '9', '56031', '103791', '16'), +('16', '87', '9', '56070', '103519', '16'), +('16', '87', '15', '111343', '167632', '16'), +('16', '87', '15', '111347', '166700', '16'), +('16', '87', '15', '111345', '164825', '16'), +('16', '87', '15', '111339', '163823', '16'), +('16', '87', '20', '111354', '179422', '16'), +('16', '87', '20', '111355', '176145', '16'), +('16', '87', '20', '111351', '174236', '16'), +('16', '87', '20', '111352', '172400', '16'), +('16', '87', '12', '81795', '104143', '16'), +('16', '87', '12', '56073', '103983', '16'), +('16', '87', '12', '104408', '87886', '16'), +('16', '87', '12', '49656', '66069', '16'), +('16', '87', '18', '62986', '108487', '16'), +('16', '87', '18', '56041', '107403', '16'), +('16', '87', '18', '94054', '105761', '16'), +('16', '87', '18', '104412', '93537', '16'), +('16', '87', '19', '62990', '107972', '16'), +('16', '87', '19', '56037', '106919', '16'), +('16', '87', '19', '56075', '105228', '16'), +('16', '87', '19', '81763', '104050', '16'), +('16', '87', '13', '111514', '686099', '16'), +('16', '87', '13', '111520', '676968', '16'), +('16', '87', '13', '111525', '672889', '16'), +('16', '87', '13', '111220', '635775', '16'), +('16', '87', '14', '62980', '111153', '16'), +('16', '87', '14', '54901', '68213', '16'), +('16', '87', '14', '46875', '52589', '16'), +('16', '87', '14', '46925', '51572', '16'), +('16', '87', '11', '111338', '167225', '16'), +('16', '87', '11', '111333', '165775', '16'), +('16', '87', '11', '111337', '162632', '16'), +('16', '87', '11', '111334', '162016', '16'), +('16', '88', '22', '21807', '0', '16'), +('16', '88', '22', '21805', '0', '16'), +('16', '88', '22', '61948', '0', '16'), +('16', '88', '22', '12425', '0', '16'), +('16', '88', '1', '111303', '167179', '16'), +('16', '88', '1', '111308', '166820', '16'), +('16', '88', '1', '111300', '165802', '16'), +('16', '88', '1', '111305', '165553', '16'), +('16', '88', '2', '94056', '107037', '16'), +('16', '88', '2', '62985', '105440', '16'), +('16', '88', '2', '104410', '87152', '16'), +('16', '88', '2', '54846', '67402', '16'), +('16', '88', '3', '111315', '166019', '16'), +('16', '88', '3', '111313', '165812', '16'), +('16', '88', '3', '111316', '162812', '16'), +('16', '88', '3', '111014', '146104', '16'), +('16', '88', '5', '111318', '165333', '16'), +('16', '88', '5', '111320', '164910', '16'), +('16', '88', '5', '111319', '161848', '16'), +('16', '88', '5', '111017', '145495', '16'), +('16', '88', '8', '111331', '168409', '16'), +('16', '88', '8', '111328', '167077', '16'), +('16', '88', '8', '111332', '162877', '16'), +('16', '88', '8', '111030', '148544', '16'), +('16', '88', '6', '111322', '165979', '16'), +('16', '88', '6', '111324', '165773', '16'), +('16', '88', '6', '111326', '161944', '16'), +('16', '88', '6', '111021', '146114', '16'), +('16', '88', '17', '56046', '112043', '16'), +('16', '88', '17', '81765', '110238', '16'), +('16', '88', '17', '56083', '110045', '16'), +('16', '88', '17', '104413', '93186', '16'), +('16', '88', '7', '94053', '108132', '16'), +('16', '88', '7', '56079', '106652', '16'), +('16', '88', '7', '104411', '91700', '16'), +('16', '88', '7', '54850', '67330', '16'), +('16', '88', '9', '67098', '165950', '16'), +('16', '88', '9', '56033', '103799', '16'), +('16', '88', '9', '56031', '103793', '16'), +('16', '88', '9', '56070', '103521', '16'), +('16', '88', '15', '111343', '167634', '16'), +('16', '88', '15', '111347', '166704', '16'), +('16', '88', '15', '111345', '164828', '16'), +('16', '88', '15', '111339', '163826', '16'), +('16', '88', '20', '111354', '179425', '16'), +('16', '88', '20', '111355', '176147', '16'), +('16', '88', '20', '111351', '174238', '16'), +('16', '88', '20', '111352', '172404', '16'), +('16', '88', '12', '81795', '104147', '16'), +('16', '88', '12', '56073', '103988', '16'), +('16', '88', '12', '104408', '87890', '16'), +('16', '88', '12', '49656', '66070', '16'), +('16', '88', '18', '62986', '108492', '16'), +('16', '88', '18', '56041', '107405', '16'), +('16', '88', '18', '94054', '105765', '16'), +('16', '88', '18', '104412', '93539', '16'), +('16', '88', '19', '62990', '107976', '16'), +('16', '88', '19', '56037', '106922', '16'), +('16', '88', '19', '56075', '105231', '16'), +('16', '88', '19', '81763', '104053', '16'), +('16', '88', '13', '111514', '687465', '16'), +('16', '88', '13', '111520', '678334', '16'), +('16', '88', '13', '111525', '674256', '16'), +('16', '88', '13', '111220', '637091', '16'), +('16', '88', '14', '62980', '111155', '16'), +('16', '88', '14', '54901', '68216', '16'), +('16', '88', '14', '46875', '52593', '16'), +('16', '88', '14', '46925', '51576', '16'), +('16', '88', '11', '111338', '167229', '16'), +('16', '88', '11', '111333', '165778', '16'), +('16', '88', '11', '111337', '162635', '16'), +('16', '88', '11', '111334', '162020', '16'), +('16', '89', '22', '21807', '0', '16'), +('16', '89', '22', '21805', '0', '16'), +('16', '89', '22', '61948', '0', '16'), +('16', '89', '22', '12425', '0', '16'), +('16', '89', '1', '111303', '167183', '16'), +('16', '89', '1', '111308', '166823', '16'), +('16', '89', '1', '111300', '165805', '16'), +('16', '89', '1', '111305', '165557', '16'), +('16', '89', '2', '94056', '107040', '16'), +('16', '89', '2', '62985', '105442', '16'), +('16', '89', '2', '104410', '87155', '16'), +('16', '89', '2', '54846', '67405', '16'), +('16', '89', '3', '111315', '166024', '16'), +('16', '89', '3', '111313', '165815', '16'), +('16', '89', '3', '111316', '162815', '16'), +('16', '89', '3', '111014', '146109', '16'), +('16', '89', '5', '111318', '165335', '16'), +('16', '89', '5', '111320', '164913', '16'), +('16', '89', '5', '111319', '161852', '16'), +('16', '89', '5', '111017', '145498', '16'), +('16', '89', '8', '111331', '168412', '16'), +('16', '89', '8', '111328', '167081', '16'), +('16', '89', '8', '111332', '162880', '16'), +('16', '89', '8', '111030', '148547', '16'), +('16', '89', '6', '111322', '165982', '16'), +('16', '89', '6', '111324', '165777', '16'), +('16', '89', '6', '111326', '161947', '16'), +('16', '89', '6', '111021', '146117', '16'), +('16', '89', '17', '56046', '112048', '16'), +('16', '89', '17', '81765', '110241', '16'), +('16', '89', '17', '56083', '110047', '16'), +('16', '89', '17', '104413', '93190', '16'), +('16', '89', '7', '94053', '108135', '16'), +('16', '89', '7', '56079', '106656', '16'), +('16', '89', '7', '104411', '91703', '16'), +('16', '89', '7', '54850', '67331', '16'), +('16', '89', '9', '67098', '167839', '16'), +('16', '89', '9', '56033', '103801', '16'), +('16', '89', '9', '56031', '103795', '16'), +('16', '89', '9', '56070', '103523', '16'), +('16', '89', '15', '111343', '167637', '16'), +('16', '89', '15', '111347', '166708', '16'), +('16', '89', '15', '111345', '164830', '16'), +('16', '89', '15', '111339', '163829', '16'), +('16', '89', '20', '111354', '179428', '16'), +('16', '89', '20', '111355', '176149', '16'), +('16', '89', '20', '111351', '174240', '16'), +('16', '89', '20', '111352', '172408', '16'), +('16', '89', '12', '81795', '104151', '16'), +('16', '89', '12', '56073', '103993', '16'), +('16', '89', '12', '104408', '87893', '16'), +('16', '89', '12', '49656', '66070', '16'), +('16', '89', '18', '62986', '108497', '16'), +('16', '89', '18', '56041', '107406', '16'), +('16', '89', '18', '94054', '105768', '16'), +('16', '89', '18', '104412', '93541', '16'), +('16', '89', '19', '62990', '107979', '16'), +('16', '89', '19', '56037', '106926', '16'), +('16', '89', '19', '56075', '105235', '16'), +('16', '89', '19', '81763', '104056', '16'), +('16', '89', '13', '111514', '688832', '16'), +('16', '89', '13', '111520', '679700', '16'), +('16', '89', '13', '111525', '675622', '16'), +('16', '89', '13', '111220', '638357', '16'), +('16', '89', '14', '62980', '111158', '16'), +('16', '89', '14', '54901', '68218', '16'), +('16', '89', '14', '46875', '52597', '16'), +('16', '89', '14', '46925', '51580', '16'), +('16', '89', '11', '111338', '167233', '16'), +('16', '89', '11', '111333', '165781', '16'), +('16', '89', '11', '111337', '162638', '16'), +('16', '89', '11', '111334', '162023', '16'), +('16', '90', '22', '21807', '0', '17'), +('16', '90', '22', '21805', '0', '17'), +('16', '90', '22', '61948', '0', '17'), +('16', '90', '22', '12425', '0', '17'), +('16', '90', '1', '111303', '167188', '17'), +('16', '90', '1', '111308', '166827', '17'), +('16', '90', '1', '111300', '165808', '17'), +('16', '90', '1', '111305', '165560', '17'), +('16', '90', '2', '94056', '107043', '17'), +('16', '90', '2', '62985', '105445', '17'), +('16', '90', '2', '104410', '87158', '17'), +('16', '90', '2', '54846', '67408', '17'), +('16', '90', '3', '111315', '166030', '17'), +('16', '90', '3', '111313', '165818', '17'), +('16', '90', '3', '111316', '162818', '17'), +('16', '90', '3', '111014', '146115', '17'), +('16', '90', '5', '111318', '165338', '17'), +('16', '90', '5', '111320', '164917', '17'), +('16', '90', '5', '111319', '161857', '17'), +('16', '90', '5', '111017', '145501', '17'), +('16', '90', '8', '111331', '168417', '17'), +('16', '90', '8', '111328', '167085', '17'), +('16', '90', '8', '111332', '162882', '17'), +('16', '90', '8', '111030', '148552', '17'), +('16', '90', '6', '111322', '165985', '17'), +('16', '90', '6', '111324', '165781', '17'), +('16', '90', '6', '111326', '161951', '17'), +('16', '90', '6', '111021', '146120', '17'), +('16', '90', '17', '56046', '112053', '17'), +('16', '90', '17', '81765', '110244', '17'), +('16', '90', '17', '56083', '110049', '17'), +('16', '90', '17', '104413', '93194', '17'), +('16', '90', '7', '94053', '108139', '17'), +('16', '90', '7', '56079', '106660', '17'), +('16', '90', '7', '104411', '91706', '17'), +('16', '90', '7', '54850', '67332', '17'), +('16', '90', '9', '67098', '169728', '17'), +('16', '90', '9', '56033', '103803', '17'), +('16', '90', '9', '56031', '103798', '17'), +('16', '90', '9', '56070', '103524', '17'), +('16', '90', '15', '111343', '167639', '17'), +('16', '90', '15', '111347', '166713', '17'), +('16', '90', '15', '111345', '164833', '17'), +('16', '90', '15', '111339', '163832', '17'), +('16', '90', '20', '111354', '179432', '17'), +('16', '90', '20', '111355', '176152', '17'), +('16', '90', '20', '111351', '174242', '17'), +('16', '90', '20', '111352', '172411', '17'), +('16', '90', '12', '81795', '104156', '17'), +('16', '90', '12', '56073', '103998', '17'), +('16', '90', '12', '104408', '87897', '17'), +('16', '90', '12', '49656', '66070', '17'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '90', '18', '62986', '108502', '17'), +('16', '90', '18', '56041', '107408', '17'), +('16', '90', '18', '94054', '105772', '17'), +('16', '90', '18', '104412', '93543', '17'), +('16', '90', '19', '62990', '107983', '17'), +('16', '90', '19', '56037', '106929', '17'), +('16', '90', '19', '56075', '105238', '17'), +('16', '90', '19', '81763', '104059', '17'), +('16', '90', '13', '111514', '690249', '17'), +('16', '90', '13', '111520', '681066', '17'), +('16', '90', '13', '111525', '676989', '17'), +('16', '90', '13', '111220', '639673', '17'), +('16', '90', '14', '62980', '111160', '17'), +('16', '90', '14', '54901', '68221', '17'), +('16', '90', '14', '46875', '52601', '17'), +('16', '90', '14', '46925', '51584', '17'), +('16', '90', '11', '111338', '167238', '17'), +('16', '90', '11', '111333', '165784', '17'), +('16', '90', '11', '111337', '162642', '17'), +('16', '90', '11', '111334', '162026', '17'), +('16', '91', '22', '21807', '0', '17'), +('16', '91', '22', '21805', '0', '17'), +('16', '91', '22', '61948', '0', '17'), +('16', '91', '22', '12425', '0', '17'), +('16', '91', '1', '111303', '167193', '17'), +('16', '91', '1', '111308', '166831', '17'), +('16', '91', '1', '111300', '165810', '17'), +('16', '91', '1', '111305', '165564', '17'), +('16', '91', '2', '94056', '107047', '17'), +('16', '91', '2', '62985', '105447', '17'), +('16', '91', '2', '104410', '87161', '17'), +('16', '91', '2', '54846', '67410', '17'), +('16', '91', '3', '111315', '166035', '17'), +('16', '91', '3', '111313', '165820', '17'), +('16', '91', '3', '111316', '162822', '17'), +('16', '91', '3', '111014', '146120', '17'), +('16', '91', '5', '111318', '165341', '17'), +('16', '91', '5', '111320', '164921', '17'), +('16', '91', '5', '111319', '161862', '17'), +('16', '91', '5', '111017', '145503', '17'), +('16', '91', '8', '111331', '168421', '17'), +('16', '91', '8', '111328', '167089', '17'), +('16', '91', '8', '111332', '162885', '17'), +('16', '91', '8', '111030', '148556', '17'), +('16', '91', '6', '111322', '165988', '17'), +('16', '91', '6', '111324', '165785', '17'), +('16', '91', '6', '111326', '161954', '17'), +('16', '91', '6', '111021', '146123', '17'), +('16', '91', '17', '56046', '112058', '17'), +('16', '91', '17', '81765', '110247', '17'), +('16', '91', '17', '56083', '110052', '17'), +('16', '91', '17', '104413', '93198', '17'), +('16', '91', '7', '94053', '108143', '17'), +('16', '91', '7', '56079', '106664', '17'), +('16', '91', '7', '104411', '91710', '17'), +('16', '91', '7', '54850', '67333', '17'), +('16', '91', '9', '67098', '169731', '17'), +('16', '91', '9', '56033', '103805', '17'), +('16', '91', '9', '56031', '103800', '17'), +('16', '91', '9', '56070', '103526', '17'), +('16', '91', '15', '111343', '167642', '17'), +('16', '91', '15', '111347', '166717', '17'), +('16', '91', '15', '111345', '164836', '17'), +('16', '91', '15', '111339', '163835', '17'), +('16', '91', '20', '111354', '179435', '17'), +('16', '91', '20', '111355', '176154', '17'), +('16', '91', '20', '111351', '174245', '17'), +('16', '91', '20', '111352', '172415', '17'), +('16', '91', '12', '81795', '104160', '17'), +('16', '91', '12', '56073', '104003', '17'), +('16', '91', '12', '104408', '87901', '17'), +('16', '91', '12', '49656', '66071', '17'), +('16', '91', '18', '62986', '108508', '17'), +('16', '91', '18', '56041', '107410', '17'), +('16', '91', '18', '94054', '105776', '17'), +('16', '91', '18', '104412', '93544', '17'), +('16', '91', '19', '62990', '107987', '17'), +('16', '91', '19', '56037', '106933', '17'), +('16', '91', '19', '56075', '105242', '17'), +('16', '91', '19', '81763', '104061', '17'), +('16', '91', '13', '111514', '691616', '17'), +('16', '91', '13', '111520', '682432', '17'), +('16', '91', '13', '111525', '678305', '17'), +('16', '91', '13', '111220', '640989', '17'), +('16', '91', '14', '62980', '111163', '17'), +('16', '91', '14', '54901', '68224', '17'), +('16', '91', '14', '46875', '52606', '17'), +('16', '91', '14', '46925', '51588', '17'), +('16', '91', '11', '111338', '167242', '17'), +('16', '91', '11', '111333', '165787', '17'), +('16', '91', '11', '111337', '162645', '17'), +('16', '91', '11', '111334', '162030', '17'), +('16', '92', '22', '21807', '0', '17'), +('16', '92', '22', '21805', '0', '17'), +('16', '92', '22', '61948', '0', '17'), +('16', '92', '22', '12425', '0', '17'), +('16', '92', '1', '111303', '167198', '17'), +('16', '92', '1', '111308', '166835', '17'), +('16', '92', '1', '111300', '165813', '17'), +('16', '92', '1', '111305', '165568', '17'), +('16', '92', '2', '94056', '107050', '17'), +('16', '92', '2', '62985', '105449', '17'), +('16', '92', '2', '104410', '87165', '17'), +('16', '92', '2', '54846', '67413', '17'), +('16', '92', '3', '111315', '166041', '17'), +('16', '92', '3', '111313', '165823', '17'), +('16', '92', '3', '111316', '162826', '17'), +('16', '92', '3', '111014', '146126', '17'), +('16', '92', '5', '111318', '165344', '17'), +('16', '92', '5', '111320', '164925', '17'), +('16', '92', '5', '111319', '161866', '17'), +('16', '92', '5', '111017', '145506', '17'), +('16', '92', '8', '111331', '168425', '17'), +('16', '92', '8', '111328', '167093', '17'), +('16', '92', '8', '111332', '162888', '17'), +('16', '92', '8', '111030', '148560', '17'), +('16', '92', '6', '111322', '165991', '17'), +('16', '92', '6', '111324', '165789', '17'), +('16', '92', '6', '111326', '161958', '17'), +('16', '92', '6', '111021', '146126', '17'), +('16', '92', '17', '56046', '112063', '17'), +('16', '92', '17', '81765', '110250', '17'), +('16', '92', '17', '56083', '110054', '17'), +('16', '92', '17', '104413', '93202', '17'), +('16', '92', '7', '94053', '108147', '17'), +('16', '92', '7', '56079', '106668', '17'), +('16', '92', '7', '104411', '91713', '17'), +('16', '92', '7', '54850', '67334', '17'), +('16', '92', '9', '67098', '169735', '17'), +('16', '92', '9', '56033', '103807', '17'), +('16', '92', '9', '56031', '103802', '17'), +('16', '92', '9', '56070', '103528', '17'), +('16', '92', '15', '111343', '167645', '17'), +('16', '92', '15', '111347', '166721', '17'), +('16', '92', '15', '111345', '164838', '17'), +('16', '92', '15', '111339', '163838', '17'), +('16', '92', '20', '111354', '179438', '17'), +('16', '92', '20', '111355', '176157', '17'), +('16', '92', '20', '111351', '174247', '17'), +('16', '92', '20', '111352', '172419', '17'), +('16', '92', '12', '81795', '104164', '17'), +('16', '92', '12', '56073', '104008', '17'), +('16', '92', '12', '104408', '87904', '17'), +('16', '92', '12', '49656', '66071', '17'), +('16', '92', '18', '62986', '108513', '17'), +('16', '92', '18', '56041', '107411', '17'), +('16', '92', '18', '94054', '105780', '17'), +('16', '92', '18', '104412', '93546', '17'), +('16', '92', '19', '62990', '107990', '17'), +('16', '92', '19', '56037', '106936', '17'), +('16', '92', '19', '56075', '105246', '17'), +('16', '92', '19', '81763', '104064', '17'), +('16', '92', '13', '111514', '692982', '17'), +('16', '92', '13', '111520', '683747', '17'), +('16', '92', '13', '111525', '679672', '17'), +('16', '92', '13', '111220', '642305', '17'), +('16', '92', '14', '62980', '111165', '17'), +('16', '92', '14', '54901', '68227', '17'), +('16', '92', '14', '46875', '52610', '17'), +('16', '92', '14', '46925', '51593', '17'), +('16', '92', '11', '111338', '167246', '17'), +('16', '92', '11', '111333', '165789', '17'), +('16', '92', '11', '111337', '162649', '17'), +('16', '92', '11', '111334', '162034', '17'), +('16', '93', '22', '21807', '0', '17'), +('16', '93', '22', '21805', '0', '17'), +('16', '93', '22', '61948', '0', '17'), +('16', '93', '22', '12425', '0', '17'), +('16', '93', '1', '111303', '167203', '17'), +('16', '93', '1', '111308', '166838', '17'), +('16', '93', '1', '111300', '165816', '17'), +('16', '93', '1', '111305', '165571', '17'), +('16', '93', '2', '94056', '107053', '17'), +('16', '93', '2', '62985', '105451', '17'), +('16', '93', '2', '104410', '87168', '17'), +('16', '93', '2', '54846', '67416', '17'), +('16', '93', '3', '111315', '166046', '17'), +('16', '93', '3', '111313', '165826', '17'), +('16', '93', '3', '111316', '162829', '17'), +('16', '93', '3', '111014', '146131', '17'), +('16', '93', '5', '111318', '165346', '17'), +('16', '93', '5', '111320', '164928', '17'), +('16', '93', '5', '111319', '161871', '17'), +('16', '93', '5', '111017', '145509', '17'), +('16', '93', '8', '111331', '168429', '17'), +('16', '93', '8', '111328', '167097', '17'), +('16', '93', '8', '111332', '162890', '17'), +('16', '93', '8', '111030', '148564', '17'), +('16', '93', '6', '111322', '165995', '17'), +('16', '93', '6', '111324', '165793', '17'), +('16', '93', '6', '111326', '161961', '17'), +('16', '93', '6', '111021', '146130', '17'), +('16', '93', '17', '56046', '112068', '17'), +('16', '93', '17', '81765', '110253', '17'), +('16', '93', '17', '56083', '110056', '17'), +('16', '93', '17', '104413', '93206', '17'), +('16', '93', '7', '94053', '108151', '17'), +('16', '93', '7', '56079', '106672', '17'), +('16', '93', '7', '104411', '91716', '17'), +('16', '93', '7', '54850', '67335', '17'), +('16', '93', '9', '67098', '169738', '17'), +('16', '93', '9', '56033', '103809', '17'), +('16', '93', '9', '56031', '103804', '17'), +('16', '93', '9', '56070', '103529', '17'), +('16', '93', '15', '111343', '167647', '17'), +('16', '93', '15', '111347', '166726', '17'), +('16', '93', '15', '111345', '164841', '17'), +('16', '93', '15', '111339', '163841', '17'), +('16', '93', '20', '111354', '179442', '17'), +('16', '93', '20', '111355', '176159', '17'), +('16', '93', '20', '111351', '174249', '17'), +('16', '93', '20', '111352', '172423', '17'), +('16', '93', '12', '81795', '104169', '17'), +('16', '93', '12', '56073', '104013', '17'), +('16', '93', '12', '104408', '87908', '17'), +('16', '93', '12', '49656', '66072', '17'), +('16', '93', '18', '62986', '108518', '17'), +('16', '93', '18', '56041', '107413', '17'), +('16', '93', '18', '94054', '105784', '17'), +('16', '93', '18', '104412', '93548', '17'), +('16', '93', '19', '62990', '107994', '17'), +('16', '93', '19', '56037', '106940', '17'), +('16', '93', '19', '56075', '105249', '17'), +('16', '93', '19', '81763', '104067', '17'), +('16', '93', '13', '111514', '694400', '17'), +('16', '93', '13', '111520', '685113', '17'), +('16', '93', '13', '111525', '681039', '17'), +('16', '93', '13', '111220', '643621', '17'), +('16', '93', '14', '62980', '111168', '17'), +('16', '93', '14', '54901', '68229', '17'), +('16', '93', '14', '46875', '52614', '17'), +('16', '93', '14', '46925', '51597', '17'), +('16', '93', '11', '111338', '167251', '17'), +('16', '93', '11', '111333', '165792', '17'), +('16', '93', '11', '111337', '162652', '17'), +('16', '93', '11', '111334', '162037', '17'), +('16', '94', '22', '21807', '0', '17'), +('16', '94', '22', '21805', '0', '17'), +('16', '94', '22', '61948', '0', '17'), +('16', '94', '22', '12425', '0', '17'), +('16', '94', '1', '111303', '167207', '17'), +('16', '94', '1', '111308', '166842', '17'), +('16', '94', '1', '111300', '165819', '17'), +('16', '94', '1', '111305', '165575', '17'), +('16', '94', '2', '94056', '107056', '17'), +('16', '94', '2', '62985', '105453', '17'), +('16', '94', '2', '104410', '87171', '17'), +('16', '94', '2', '54846', '67419', '17'), +('16', '94', '3', '111315', '166051', '17'), +('16', '94', '3', '111313', '165829', '17'), +('16', '94', '3', '111316', '162833', '17'), +('16', '94', '3', '111014', '146136', '17'), +('16', '94', '5', '111318', '165349', '17'), +('16', '94', '5', '111320', '164932', '17'), +('16', '94', '5', '111319', '161876', '17'), +('16', '94', '5', '111017', '145512', '17'), +('16', '94', '8', '111331', '168433', '17'), +('16', '94', '8', '111328', '167102', '17'), +('16', '94', '8', '111332', '162893', '17'), +('16', '94', '8', '111030', '148568', '17'), +('16', '94', '6', '111322', '165998', '17'), +('16', '94', '6', '111324', '165797', '17'), +('16', '94', '6', '111326', '161965', '17'), +('16', '94', '6', '111021', '146133', '17'), +('16', '94', '17', '56046', '112073', '17'), +('16', '94', '17', '81765', '110256', '17'), +('16', '94', '17', '56083', '110058', '17'), +('16', '94', '17', '104413', '93210', '17'), +('16', '94', '7', '94053', '108155', '17'), +('16', '94', '7', '56079', '106677', '17'), +('16', '94', '7', '104411', '91719', '17'), +('16', '94', '7', '54850', '67337', '17'), +('16', '94', '9', '67098', '169742', '17'), +('16', '94', '9', '56033', '103811', '17'), +('16', '94', '9', '56031', '103807', '17'), +('16', '94', '9', '56070', '103531', '17'), +('16', '94', '15', '111343', '167650', '17'), +('16', '94', '15', '111347', '166730', '17'), +('16', '94', '15', '111345', '164844', '17'), +('16', '94', '15', '111339', '163844', '17'), +('16', '94', '20', '111354', '179445', '17'), +('16', '94', '20', '111355', '176162', '17'), +('16', '94', '20', '111351', '174252', '17'), +('16', '94', '20', '111352', '172427', '17'), +('16', '94', '12', '81795', '104173', '17'), +('16', '94', '12', '56073', '104018', '17'), +('16', '94', '12', '104408', '87911', '17'), +('16', '94', '12', '49656', '66072', '17'), +('16', '94', '18', '62986', '108523', '17'), +('16', '94', '18', '56041', '107414', '17'), +('16', '94', '18', '94054', '105788', '17'), +('16', '94', '18', '104412', '93550', '17'), +('16', '94', '19', '62990', '107997', '17'), +('16', '94', '19', '56037', '106944', '17'), +('16', '94', '19', '56075', '105253', '17'), +('16', '94', '19', '81763', '104070', '17'), +('16', '94', '13', '111514', '695766', '17'), +('16', '94', '13', '111520', '686479', '17'), +('16', '94', '13', '111525', '682405', '17'), +('16', '94', '13', '111220', '644937', '17'), +('16', '94', '14', '62980', '111170', '17'), +('16', '94', '14', '54901', '68232', '17'), +('16', '94', '14', '46875', '52618', '17'), +('16', '94', '14', '46925', '51601', '17'), +('16', '94', '11', '111338', '167255', '17'), +('16', '94', '11', '111333', '165795', '17'), +('16', '94', '11', '111337', '162655', '17'), +('16', '94', '11', '111334', '162041', '17'), +('16', '95', '22', '12425', '0', '18'), +('16', '95', '22', '21807', '0', '18'), +('16', '95', '22', '21805', '0', '18'), +('16', '95', '22', '39342', '0', '18'), +('16', '95', '1', '111303', '167212', '18'), +('16', '95', '1', '111308', '166846', '18'), +('16', '95', '1', '111300', '165821', '18'), +('16', '95', '1', '111305', '165578', '18'), +('16', '95', '2', '94056', '107060', '18'), +('16', '95', '2', '62985', '105455', '18'), +('16', '95', '2', '104410', '87174', '18'), +('16', '95', '2', '54846', '67422', '18'), +('16', '95', '3', '111315', '166057', '18'), +('16', '95', '3', '111313', '165831', '18'), +('16', '95', '3', '111316', '162836', '18'), +('16', '95', '3', '111014', '146142', '18'), +('16', '95', '5', '111318', '165352', '18'), +('16', '95', '5', '111320', '164936', '18'), +('16', '95', '5', '111319', '161880', '18'), +('16', '95', '5', '111017', '145514', '18'), +('16', '95', '8', '111331', '168438', '18'), +('16', '95', '8', '111328', '167106', '18'), +('16', '95', '8', '111332', '162895', '18'), +('16', '95', '8', '111030', '148573', '18'), +('16', '95', '6', '111322', '166001', '18'), +('16', '95', '6', '111324', '165802', '18'), +('16', '95', '6', '111326', '161968', '18'), +('16', '95', '6', '111021', '146136', '18'), +('16', '95', '17', '56046', '112079', '18'), +('16', '95', '17', '81765', '110259', '18'), +('16', '95', '17', '56083', '110060', '18'), +('16', '95', '17', '104413', '93214', '18'), +('16', '95', '7', '94053', '108158', '18'), +('16', '95', '7', '56079', '106681', '18'), +('16', '95', '7', '104411', '91722', '18'), +('16', '95', '7', '54850', '67338', '18'), +('16', '95', '9', '67098', '169745', '18'), +('16', '95', '9', '56033', '103813', '18'), +('16', '95', '9', '56031', '103809', '18'), +('16', '95', '9', '56070', '103533', '18'), +('16', '95', '15', '111343', '167652', '18'), +('16', '95', '15', '111347', '166734', '18'), +('16', '95', '15', '111345', '164847', '18'), +('16', '95', '15', '111339', '163847', '18'), +('16', '95', '20', '111354', '179448', '18'), +('16', '95', '20', '111355', '176165', '18'), +('16', '95', '20', '111351', '174254', '18'), +('16', '95', '20', '111352', '172431', '18'), +('16', '95', '12', '81795', '104178', '18'), +('16', '95', '12', '56073', '104024', '18'), +('16', '95', '12', '104408', '87915', '18'), +('16', '95', '12', '49656', '66073', '18'), +('16', '95', '18', '62986', '108529', '18'), +('16', '95', '18', '56041', '107416', '18'), +('16', '95', '18', '94054', '105792', '18'), +('16', '95', '18', '104412', '93552', '18'), +('16', '95', '19', '62990', '108001', '18'), +('16', '95', '19', '56037', '106947', '18'), +('16', '95', '19', '56075', '105256', '18'), +('16', '95', '19', '81763', '104073', '18'), +('16', '95', '13', '111514', '697133', '18'), +('16', '95', '13', '111520', '687845', '18'), +('16', '95', '13', '111525', '683772', '18'), +('16', '95', '13', '111220', '646253', '18'), +('16', '95', '14', '62980', '111173', '18'), +('16', '95', '14', '54901', '68235', '18'), +('16', '95', '14', '46875', '52622', '18'), +('16', '95', '14', '46925', '51605', '18'), +('16', '95', '11', '111338', '167259', '18'), +('16', '95', '11', '111333', '165798', '18'), +('16', '95', '11', '111337', '162659', '18'), +('16', '95', '11', '111334', '162044', '18'), +('16', '96', '22', '12425', '0', '18'), +('16', '96', '22', '21807', '0', '18'), +('16', '96', '22', '21805', '0', '18'), +('16', '96', '22', '39342', '0', '18'), +('16', '96', '1', '111303', '167217', '18'), +('16', '96', '1', '111308', '166849', '18'), +('16', '96', '1', '111300', '165824', '18'), +('16', '96', '1', '111305', '165582', '18'), +('16', '96', '2', '94056', '107063', '18'), +('16', '96', '2', '62985', '105457', '18'), +('16', '96', '2', '104410', '87178', '18'), +('16', '96', '2', '54846', '67424', '18'), +('16', '96', '3', '111315', '166062', '18'), +('16', '96', '3', '111313', '165834', '18'), +('16', '96', '3', '111316', '162840', '18'), +('16', '96', '3', '111014', '146147', '18'), +('16', '96', '5', '111318', '165355', '18'), +('16', '96', '5', '111320', '164940', '18'), +('16', '96', '5', '111319', '161885', '18'), +('16', '96', '5', '111017', '145517', '18'), +('16', '96', '8', '111331', '168442', '18'), +('16', '96', '8', '111328', '167110', '18'), +('16', '96', '8', '111332', '162898', '18'), +('16', '96', '8', '111030', '148577', '18'), +('16', '96', '6', '111322', '166004', '18'), +('16', '96', '6', '111324', '165806', '18'), +('16', '96', '6', '111326', '161972', '18'), +('16', '96', '6', '111021', '146139', '18'), +('16', '96', '17', '56046', '112084', '18'), +('16', '96', '17', '81765', '110262', '18'), +('16', '96', '17', '56083', '110062', '18'), +('16', '96', '17', '104413', '93218', '18'), +('16', '96', '7', '94053', '108162', '18'), +('16', '96', '7', '56079', '106685', '18'), +('16', '96', '7', '104411', '91726', '18'), +('16', '96', '7', '54850', '67339', '18'), +('16', '96', '9', '67098', '169749', '18'), +('16', '96', '9', '56033', '103815', '18'), +('16', '96', '9', '56031', '103811', '18'), +('16', '96', '9', '56070', '103534', '18'), +('16', '96', '15', '111343', '167655', '18'), +('16', '96', '15', '111347', '166739', '18'), +('16', '96', '15', '111345', '164849', '18'), +('16', '96', '15', '111339', '163850', '18'), +('16', '96', '20', '111354', '179452', '18'), +('16', '96', '20', '111355', '176167', '18'), +('16', '96', '20', '111351', '174256', '18'), +('16', '96', '20', '111352', '172434', '18'), +('16', '96', '12', '81795', '104182', '18'), +('16', '96', '12', '56073', '104029', '18'), +('16', '96', '12', '104408', '87919', '18'), +('16', '96', '12', '49656', '66073', '18'), +('16', '96', '18', '62986', '108534', '18'), +('16', '96', '18', '56041', '107417', '18'), +('16', '96', '18', '94054', '105796', '18'), +('16', '96', '18', '104412', '93553', '18'), +('16', '96', '19', '62990', '108005', '18'), +('16', '96', '19', '56037', '106951', '18'), +('16', '96', '19', '56075', '105260', '18'), +('16', '96', '19', '81763', '104076', '18'), +('16', '96', '13', '111514', '698500', '18'), +('16', '96', '13', '111520', '689211', '18'), +('16', '96', '13', '111525', '685139', '18'), +('16', '96', '13', '111220', '647569', '18'), +('16', '96', '14', '62980', '111175', '18'), +('16', '96', '14', '54901', '68238', '18'), +('16', '96', '14', '46875', '52627', '18'), +('16', '96', '14', '46925', '51609', '18'), +('16', '96', '11', '111338', '167264', '18'), +('16', '96', '11', '111333', '165801', '18'), +('16', '96', '11', '111337', '162662', '18'), +('16', '96', '11', '111334', '162048', '18'), +('16', '97', '22', '12425', '0', '18'), +('16', '97', '22', '21807', '0', '18'), +('16', '97', '22', '21805', '0', '18'), +('16', '97', '22', '39342', '0', '18'), +('16', '97', '1', '111303', '167222', '18'), +('16', '97', '1', '111308', '166853', '18'), +('16', '97', '1', '111300', '165827', '18'), +('16', '97', '1', '111305', '165586', '18'), +('16', '97', '2', '94056', '107066', '18'), +('16', '97', '2', '62985', '105460', '18'), +('16', '97', '2', '104410', '87181', '18'), +('16', '97', '2', '54846', '67427', '18'), +('16', '97', '3', '111315', '166068', '18'), +('16', '97', '3', '111313', '165837', '18'), +('16', '97', '3', '111316', '162844', '18'), +('16', '97', '3', '111014', '146153', '18'), +('16', '97', '5', '111318', '165357', '18'), +('16', '97', '5', '111320', '164944', '18'), +('16', '97', '5', '111319', '161890', '18'), +('16', '97', '5', '111017', '145520', '18'), +('16', '97', '8', '111331', '168446', '18'), +('16', '97', '8', '111328', '167114', '18'), +('16', '97', '8', '111332', '162901', '18'), +('16', '97', '8', '111030', '148581', '18'), +('16', '97', '6', '111322', '166007', '18'), +('16', '97', '6', '111324', '165810', '18'), +('16', '97', '6', '111326', '161975', '18'), +('16', '97', '6', '111021', '146142', '18'), +('16', '97', '17', '56046', '112089', '18'), +('16', '97', '17', '81765', '110266', '18'), +('16', '97', '17', '56083', '110065', '18'), +('16', '97', '17', '104413', '93221', '18'), +('16', '97', '7', '94053', '108166', '18'), +('16', '97', '7', '56079', '106689', '18'), +('16', '97', '7', '104411', '91729', '18'), +('16', '97', '7', '54850', '67340', '18'), +('16', '97', '9', '67098', '169752', '18'), +('16', '97', '9', '56033', '103817', '18'), +('16', '97', '9', '56031', '103813', '18'), +('16', '97', '9', '56070', '103536', '18'), +('16', '97', '15', '111343', '167658', '18'), +('16', '97', '15', '111347', '166743', '18'), +('16', '97', '15', '111345', '164852', '18'), +('16', '97', '15', '111339', '163853', '18'), +('16', '97', '20', '111354', '179455', '18'), +('16', '97', '20', '111355', '176170', '18'), +('16', '97', '20', '111351', '174258', '18'), +('16', '97', '20', '111352', '172438', '18'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '97', '12', '81795', '104187', '18'), +('16', '97', '12', '56073', '104034', '18'), +('16', '97', '12', '104408', '87922', '18'), +('16', '97', '12', '49656', '66074', '18'), +('16', '97', '18', '62986', '108539', '18'), +('16', '97', '18', '56041', '107419', '18'), +('16', '97', '18', '94054', '105800', '18'), +('16', '97', '18', '104412', '93555', '18'), +('16', '97', '19', '62990', '108008', '18'), +('16', '97', '19', '56037', '106954', '18'), +('16', '97', '19', '56075', '105264', '18'), +('16', '97', '19', '81763', '104079', '18'), +('16', '97', '13', '111514', '699917', '18'), +('16', '97', '13', '111520', '690578', '18'), +('16', '97', '13', '111525', '686455', '18'), +('16', '97', '13', '111220', '648885', '18'), +('16', '97', '14', '62980', '111178', '18'), +('16', '97', '14', '54901', '68240', '18'), +('16', '97', '14', '46875', '52631', '18'), +('16', '97', '14', '46925', '51614', '18'), +('16', '97', '11', '111338', '167268', '18'), +('16', '97', '11', '111333', '165804', '18'), +('16', '97', '11', '111337', '162665', '18'), +('16', '97', '11', '111334', '162052', '18'), +('16', '98', '22', '12425', '0', '18'), +('16', '98', '22', '21807', '0', '18'), +('16', '98', '22', '21805', '0', '18'), +('16', '98', '22', '39342', '0', '18'), +('16', '98', '1', '111303', '167227', '18'), +('16', '98', '1', '111308', '166857', '18'), +('16', '98', '1', '111300', '165830', '18'), +('16', '98', '1', '111305', '165589', '18'), +('16', '98', '2', '94056', '107069', '18'), +('16', '98', '2', '62985', '105462', '18'), +('16', '98', '2', '104410', '87184', '18'), +('16', '98', '2', '54846', '67430', '18'), +('16', '98', '3', '111315', '166073', '18'), +('16', '98', '3', '111313', '165840', '18'), +('16', '98', '3', '111316', '162847', '18'), +('16', '98', '3', '111014', '146158', '18'), +('16', '98', '5', '111318', '165360', '18'), +('16', '98', '5', '111320', '164948', '18'), +('16', '98', '5', '111319', '161894', '18'), +('16', '98', '5', '111017', '145523', '18'), +('16', '98', '8', '111331', '168450', '18'), +('16', '98', '8', '111328', '167118', '18'), +('16', '98', '8', '111332', '162903', '18'), +('16', '98', '8', '111030', '148585', '18'), +('16', '98', '6', '111322', '166010', '18'), +('16', '98', '6', '111324', '165814', '18'), +('16', '98', '6', '111326', '161979', '18'), +('16', '98', '6', '111021', '146145', '18'), +('16', '98', '17', '56046', '112094', '18'), +('16', '98', '17', '81765', '110269', '18'), +('16', '98', '17', '56083', '110067', '18'), +('16', '98', '17', '104413', '93225', '18'), +('16', '98', '7', '94053', '108170', '18'), +('16', '98', '7', '56079', '106693', '18'), +('16', '98', '7', '104411', '91732', '18'), +('16', '98', '7', '54850', '67341', '18'), +('16', '98', '9', '67098', '169756', '18'), +('16', '98', '9', '56033', '103819', '18'), +('16', '98', '9', '56031', '103816', '18'), +('16', '98', '9', '56070', '103538', '18'), +('16', '98', '15', '111343', '167660', '18'), +('16', '98', '15', '111347', '166747', '18'), +('16', '98', '15', '111345', '164855', '18'), +('16', '98', '15', '111339', '163856', '18'), +('16', '98', '20', '111354', '179458', '18'), +('16', '98', '20', '111355', '176172', '18'), +('16', '98', '20', '111351', '174261', '18'), +('16', '98', '20', '111352', '172442', '18'), +('16', '98', '12', '81795', '104191', '18'), +('16', '98', '12', '56073', '104039', '18'), +('16', '98', '12', '104408', '87926', '18'), +('16', '98', '12', '49656', '66074', '18'), +('16', '98', '18', '62986', '108545', '18'), +('16', '98', '18', '56041', '107420', '18'), +('16', '98', '18', '94054', '105804', '18'), +('16', '98', '18', '104412', '93557', '18'), +('16', '98', '19', '62990', '108012', '18'), +('16', '98', '19', '56037', '106958', '18'), +('16', '98', '19', '56075', '105267', '18'), +('16', '98', '19', '81763', '104082', '18'), +('16', '98', '13', '111514', '701283', '18'), +('16', '98', '13', '111520', '691944', '18'), +('16', '98', '13', '111525', '687821', '18'), +('16', '98', '13', '111220', '650201', '18'), +('16', '98', '14', '62980', '111180', '18'), +('16', '98', '14', '54901', '68243', '18'), +('16', '98', '14', '46875', '52635', '18'), +('16', '98', '14', '46925', '51618', '18'), +('16', '98', '11', '111338', '167272', '18'), +('16', '98', '11', '111333', '165807', '18'), +('16', '98', '11', '111337', '162669', '18'), +('16', '98', '11', '111334', '162055', '18'), +('16', '99', '22', '12425', '0', '18'), +('16', '99', '22', '21807', '0', '18'), +('16', '99', '22', '21805', '0', '18'), +('16', '99', '22', '39342', '0', '18'), +('16', '99', '1', '111303', '167231', '18'), +('16', '99', '1', '111308', '166861', '18'), +('16', '99', '1', '111300', '165832', '18'), +('16', '99', '1', '111305', '165593', '18'), +('16', '99', '2', '94056', '107073', '18'), +('16', '99', '2', '62985', '105464', '18'), +('16', '99', '2', '104410', '87187', '18'), +('16', '99', '2', '54846', '67433', '18'), +('16', '99', '3', '111315', '166078', '18'), +('16', '99', '3', '111313', '165842', '18'), +('16', '99', '3', '111316', '162851', '18'), +('16', '99', '3', '111014', '146163', '18'), +('16', '99', '5', '111318', '165363', '18'), +('16', '99', '5', '111320', '164951', '18'), +('16', '99', '5', '111319', '161899', '18'), +('16', '99', '5', '111017', '145525', '18'), +('16', '99', '8', '111331', '168454', '18'), +('16', '99', '8', '111328', '167123', '18'), +('16', '99', '8', '111332', '162906', '18'), +('16', '99', '8', '111030', '148589', '18'), +('16', '99', '6', '111322', '166013', '18'), +('16', '99', '6', '111324', '165818', '18'), +('16', '99', '6', '111326', '161982', '18'), +('16', '99', '6', '111021', '146148', '18'), +('16', '99', '17', '56046', '112099', '18'), +('16', '99', '17', '81765', '110272', '18'), +('16', '99', '17', '56083', '110069', '18'), +('16', '99', '17', '104413', '93229', '18'), +('16', '99', '7', '94053', '108174', '18'), +('16', '99', '7', '56079', '106698', '18'), +('16', '99', '7', '104411', '91735', '18'), +('16', '99', '7', '54850', '67342', '18'), +('16', '99', '9', '67098', '169759', '18'), +('16', '99', '9', '56033', '103821', '18'), +('16', '99', '9', '56031', '103818', '18'), +('16', '99', '9', '56070', '103539', '18'), +('16', '99', '15', '111343', '167663', '18'), +('16', '99', '15', '111347', '166752', '18'), +('16', '99', '15', '111345', '164858', '18'), +('16', '99', '15', '111339', '163859', '18'), +('16', '99', '20', '111354', '179462', '18'), +('16', '99', '20', '111355', '176175', '18'), +('16', '99', '20', '111351', '174263', '18'), +('16', '99', '20', '111352', '172446', '18'), +('16', '99', '12', '81795', '104196', '18'), +('16', '99', '12', '56073', '104044', '18'), +('16', '99', '12', '104408', '87929', '18'), +('16', '99', '12', '49656', '66075', '18'), +('16', '99', '18', '62986', '108550', '18'), +('16', '99', '18', '56041', '107422', '18'), +('16', '99', '18', '94054', '105808', '18'), +('16', '99', '18', '104412', '93559', '18'), +('16', '99', '19', '62990', '108015', '18'), +('16', '99', '19', '56037', '106962', '18'), +('16', '99', '19', '56075', '105271', '18'), +('16', '99', '19', '81763', '104084', '18'), +('16', '99', '13', '111514', '702650', '18'), +('16', '99', '13', '111520', '693310', '18'), +('16', '99', '13', '111525', '689188', '18'), +('16', '99', '13', '111220', '651466', '18'), +('16', '99', '14', '62980', '111183', '18'), +('16', '99', '14', '54901', '68246', '18'), +('16', '99', '14', '46875', '52639', '18'), +('16', '99', '14', '46925', '51622', '18'), +('16', '99', '11', '111338', '167277', '18'), +('16', '99', '11', '111333', '165810', '18'), +('16', '99', '11', '111337', '162672', '18'), +('16', '99', '11', '111334', '162059', '18'), +('16', '100', '22', '12425', '0', '20'), +('16', '100', '22', '21807', '0', '20'), +('16', '100', '22', '21805', '0', '20'), +('16', '100', '22', '39342', '0', '20'), +('16', '100', '1', '98769', '277159', '20'), +('16', '100', '1', '111303', '167237', '20'), +('16', '100', '1', '111308', '166865', '20'), +('16', '100', '1', '111300', '165835', '20'), +('16', '100', '2', '94056', '107076', '20'), +('16', '100', '2', '62985', '105466', '20'), +('16', '100', '2', '104410', '87191', '20'), +('16', '100', '2', '54846', '67436', '20'), +('16', '100', '3', '111315', '166084', '20'), +('16', '100', '3', '111313', '165845', '20'), +('16', '100', '3', '111316', '162855', '20'), +('16', '100', '3', '111014', '146169', '20'), +('16', '100', '5', '111318', '165366', '20'), +('16', '100', '5', '111320', '164956', '20'), +('16', '100', '5', '111319', '161904', '20'), +('16', '100', '5', '111017', '145528', '20'), +('16', '100', '8', '111331', '168459', '20'), +('16', '100', '8', '111328', '167127', '20'), +('16', '100', '8', '111332', '162909', '20'), +('16', '100', '8', '111030', '148594', '20'), +('16', '100', '6', '111322', '166017', '20'), +('16', '100', '6', '111324', '165822', '20'), +('16', '100', '6', '111326', '161986', '20'), +('16', '100', '6', '111021', '146152', '20'), +('16', '100', '17', '56046', '112105', '20'), +('16', '100', '17', '81765', '110275', '20'), +('16', '100', '17', '56083', '110071', '20'), +('16', '100', '17', '104413', '93234', '20'), +('16', '100', '7', '94053', '108178', '20'), +('16', '100', '7', '56079', '106702', '20'), +('16', '100', '7', '104411', '91739', '20'), +('16', '100', '7', '54850', '67343', '20'), +('16', '100', '9', '67098', '169763', '20'), +('16', '100', '9', '56033', '103823', '20'), +('16', '100', '9', '56031', '103820', '20'), +('16', '100', '9', '56070', '103541', '20'), +('16', '100', '15', '111343', '167666', '20'), +('16', '100', '15', '111347', '166756', '20'), +('16', '100', '15', '111345', '164861', '20'), +('16', '100', '15', '111339', '163862', '20'), +('16', '100', '20', '111354', '179465', '20'), +('16', '100', '20', '111355', '176177', '20'), +('16', '100', '20', '111351', '174265', '20'), +('16', '100', '20', '111352', '172450', '20'), +('16', '100', '12', '81795', '104200', '20'), +('16', '100', '12', '56073', '104050', '20'), +('16', '100', '12', '104408', '87933', '20'), +('16', '100', '12', '49656', '66075', '20'), +('16', '100', '18', '62986', '108556', '20'), +('16', '100', '18', '56041', '107424', '20'), +('16', '100', '18', '94054', '105812', '20'), +('16', '100', '18', '104412', '93561', '20'), +('16', '100', '19', '62990', '108019', '20'), +('16', '100', '19', '56037', '106965', '20'), +('16', '100', '19', '56075', '105275', '20'), +('16', '100', '19', '81763', '104088', '20'), +('16', '100', '13', '111514', '706340', '20'), +('16', '100', '13', '111520', '696948', '20'), +('16', '100', '13', '111525', '692828', '20'), +('16', '100', '13', '111220', '655055', '20'), +('16', '100', '14', '62980', '111186', '20'), +('16', '100', '14', '54901', '68249', '20'), +('16', '100', '14', '46875', '52644', '20'), +('16', '100', '14', '46925', '51626', '20'), +('16', '100', '11', '133816', '211505', '20'), +('16', '100', '11', '111338', '167281', '20'), +('16', '100', '11', '111333', '165813', '20'), +('16', '100', '11', '111337', '162676', '20'), +('16', '100', '22', '12425', '0', '19'), +('16', '100', '22', '21807', '0', '19'), +('16', '100', '22', '21805', '0', '19'), +('16', '100', '22', '39342', '0', '19'), +('16', '100', '1', '98769', '277159', '19'), +('16', '100', '1', '111303', '167237', '19'), +('16', '100', '1', '111308', '166865', '19'), +('16', '100', '1', '111300', '165835', '19'), +('16', '100', '2', '94056', '107076', '19'), +('16', '100', '2', '62985', '105466', '19'), +('16', '100', '2', '104410', '87191', '19'), +('16', '100', '2', '54846', '67436', '19'), +('16', '100', '3', '111315', '166084', '19'), +('16', '100', '3', '111313', '165845', '19'), +('16', '100', '3', '111316', '162855', '19'), +('16', '100', '3', '111014', '146169', '19'), +('16', '100', '5', '111318', '165366', '19'), +('16', '100', '5', '111320', '164956', '19'), +('16', '100', '5', '111319', '161904', '19'), +('16', '100', '5', '111017', '145528', '19'), +('16', '100', '8', '111331', '168459', '19'), +('16', '100', '8', '111328', '167127', '19'), +('16', '100', '8', '111332', '162909', '19'), +('16', '100', '8', '111030', '148594', '19'), +('16', '100', '6', '111322', '166017', '19'), +('16', '100', '6', '111324', '165822', '19'), +('16', '100', '6', '111326', '161986', '19'), +('16', '100', '6', '111021', '146152', '19'), +('16', '100', '17', '56046', '112105', '19'), +('16', '100', '17', '81765', '110275', '19'), +('16', '100', '17', '56083', '110071', '19'), +('16', '100', '17', '104413', '93234', '19'), +('16', '100', '7', '94053', '108178', '19'), +('16', '100', '7', '56079', '106702', '19'), +('16', '100', '7', '104411', '91739', '19'), +('16', '100', '7', '54850', '67343', '19'), +('16', '100', '9', '67098', '169763', '19'), +('16', '100', '9', '56033', '103823', '19'), +('16', '100', '9', '56031', '103820', '19'), +('16', '100', '9', '56070', '103541', '19'), +('16', '100', '15', '111343', '167666', '19'), +('16', '100', '15', '111347', '166756', '19'), +('16', '100', '15', '111345', '164861', '19'), +('16', '100', '15', '111339', '163862', '19'), +('16', '100', '20', '111354', '179465', '19'), +('16', '100', '20', '111355', '176177', '19'), +('16', '100', '20', '111351', '174265', '19'), +('16', '100', '20', '111352', '172450', '19'), +('16', '100', '12', '81795', '104200', '19'), +('16', '100', '12', '56073', '104050', '19'), +('16', '100', '12', '104408', '87933', '19'), +('16', '100', '12', '49656', '66075', '19'), +('16', '100', '18', '62986', '108556', '19'), +('16', '100', '18', '56041', '107424', '19'), +('16', '100', '18', '94054', '105812', '19'), +('16', '100', '18', '104412', '93561', '19'), +('16', '100', '19', '62990', '108019', '19'), +('16', '100', '19', '56037', '106965', '19'), +('16', '100', '19', '56075', '105275', '19'), +('16', '100', '19', '81763', '104088', '19'), +('16', '100', '13', '111514', '704068', '19'), +('16', '100', '13', '111520', '694676', '19'), +('16', '100', '13', '111525', '690555', '19'), +('16', '100', '13', '111220', '652782', '19'), +('16', '100', '14', '62980', '111186', '19'), +('16', '100', '14', '54901', '68249', '19'), +('16', '100', '14', '46875', '52644', '19'), +('16', '100', '14', '46925', '51626', '19'), +('16', '100', '11', '133816', '211505', '19'), +('16', '100', '11', '111338', '167281', '19'), +('16', '100', '11', '111333', '165813', '19'), +('16', '100', '11', '111337', '162676', '19'), +('16', '101', '22', '12425', '0', '20'), +('16', '101', '22', '21807', '0', '20'), +('16', '101', '22', '21805', '0', '20'), +('16', '101', '22', '39342', '0', '20'), +('16', '101', '1', '98769', '277162', '20'), +('16', '101', '1', '111303', '167241', '20'), +('16', '101', '1', '111308', '166868', '20'), +('16', '101', '1', '111300', '165838', '20'), +('16', '101', '2', '94056', '107079', '20'), +('16', '101', '2', '62985', '105468', '20'), +('16', '101', '2', '104410', '87194', '20'), +('16', '101', '2', '54846', '67438', '20'), +('16', '101', '3', '111315', '166090', '20'), +('16', '101', '3', '111313', '165848', '20'), +('16', '101', '3', '111316', '162858', '20'), +('16', '101', '3', '111014', '146175', '20'), +('16', '101', '5', '111318', '165369', '20'), +('16', '101', '5', '111320', '164959', '20'), +('16', '101', '5', '111319', '161909', '20'), +('16', '101', '5', '111017', '145531', '20'), +('16', '101', '8', '111331', '168463', '20'), +('16', '101', '8', '111328', '167131', '20'), +('16', '101', '8', '111332', '162911', '20'), +('16', '101', '8', '111030', '148598', '20'), +('16', '101', '6', '111322', '166020', '20'), +('16', '101', '6', '111324', '165826', '20'), +('16', '101', '6', '111326', '161989', '20'), +('16', '101', '6', '111021', '146155', '20'), +('16', '101', '17', '56046', '112110', '20'), +('16', '101', '17', '81765', '110278', '20'), +('16', '101', '17', '56083', '110073', '20'), +('16', '101', '17', '104413', '93238', '20'), +('16', '101', '7', '94053', '108182', '20'), +('16', '101', '7', '56079', '106706', '20'), +('16', '101', '7', '104411', '91742', '20'), +('16', '101', '7', '54850', '67344', '20'), +('16', '101', '9', '67098', '169767', '20'), +('16', '101', '9', '56033', '103825', '20'), +('16', '101', '9', '56031', '103823', '20'), +('16', '101', '9', '56070', '103543', '20'), +('16', '101', '15', '111343', '167669', '20'), +('16', '101', '15', '111347', '166761', '20'), +('16', '101', '15', '111345', '164863', '20'), +('16', '101', '15', '111339', '163865', '20'), +('16', '101', '20', '111354', '179469', '20'), +('16', '101', '20', '111355', '176180', '20'), +('16', '101', '20', '111351', '174268', '20'), +('16', '101', '20', '111352', '172454', '20'), +('16', '101', '12', '81795', '104205', '20'), +('16', '101', '12', '56073', '104055', '20'), +('16', '101', '12', '104408', '87937', '20'), +('16', '101', '12', '49656', '66076', '20'), +('16', '101', '18', '62986', '108561', '20'), +('16', '101', '18', '56041', '107425', '20'), +('16', '101', '18', '94054', '105816', '20'), +('16', '101', '18', '104412', '93562', '20'), +('16', '101', '19', '62990', '108023', '20'), +('16', '101', '19', '56037', '106969', '20'), +('16', '101', '19', '56075', '105278', '20'), +('16', '101', '19', '81763', '104090', '20'), +('16', '101', '13', '111514', '707707', '20'), +('16', '101', '13', '111520', '698314', '20'), +('16', '101', '13', '111525', '694194', '20'), +('16', '101', '13', '111220', '656371', '20'), +('16', '101', '14', '62980', '111188', '20'), +('16', '101', '14', '54901', '68252', '20'), +('16', '101', '14', '46875', '52648', '20'), +('16', '101', '14', '46925', '51631', '20'), +('16', '101', '11', '133816', '211509', '20'), +('16', '101', '11', '111338', '167286', '20'), +('16', '101', '11', '111333', '165816', '20'), +('16', '101', '11', '111337', '162679', '20'), +('16', '102', '22', '12425', '0', '20'), +('16', '102', '22', '21807', '0', '20'), +('16', '102', '22', '21805', '0', '20'), +('16', '102', '22', '39342', '0', '20'), +('16', '102', '1', '98769', '277165', '20'), +('16', '102', '1', '111303', '167246', '20'), +('16', '102', '1', '111308', '166872', '20'), +('16', '102', '1', '111300', '165841', '20'), +('16', '102', '2', '94056', '107083', '20'), +('16', '102', '2', '62985', '105471', '20'), +('16', '102', '2', '104410', '87197', '20'), +('16', '102', '2', '54846', '67441', '20'), +('16', '102', '3', '111315', '166095', '20'), +('16', '102', '3', '111313', '165851', '20'), +('16', '102', '3', '111316', '162862', '20'), +('16', '102', '3', '111014', '146180', '20'), +('16', '102', '5', '111318', '165372', '20'), +('16', '102', '5', '111320', '164963', '20'), +('16', '102', '5', '111319', '161914', '20'), +('16', '102', '5', '111017', '145534', '20'), +('16', '102', '8', '111331', '168467', '20'), +('16', '102', '8', '111328', '167135', '20'), +('16', '102', '8', '111332', '162914', '20'), +('16', '102', '8', '111030', '148602', '20'), +('16', '102', '6', '111322', '166023', '20'), +('16', '102', '6', '111324', '165830', '20'), +('16', '102', '6', '111326', '161993', '20'), +('16', '102', '6', '111021', '146158', '20'), +('16', '102', '17', '56046', '112115', '20'), +('16', '102', '17', '81765', '110281', '20'), +('16', '102', '17', '56083', '110075', '20'), +('16', '102', '17', '104413', '93242', '20'), +('16', '102', '7', '94053', '108186', '20'), +('16', '102', '7', '56079', '106710', '20'), +('16', '102', '7', '104411', '91745', '20'), +('16', '102', '7', '54850', '67345', '20'), +('16', '102', '9', '67098', '169770', '20'), +('16', '102', '9', '56033', '103827', '20'), +('16', '102', '9', '56031', '103825', '20'), +('16', '102', '9', '56070', '103545', '20'), +('16', '102', '15', '111343', '167671', '20'), +('16', '102', '15', '111347', '166765', '20'), +('16', '102', '15', '111345', '164866', '20'), +('16', '102', '15', '111339', '163868', '20'), +('16', '102', '20', '111354', '179472', '20'), +('16', '102', '20', '111355', '176182', '20'), +('16', '102', '20', '111351', '174270', '20'), +('16', '102', '20', '111352', '172458', '20'), +('16', '102', '12', '81795', '104209', '20'), +('16', '102', '12', '56073', '104060', '20'), +('16', '102', '12', '104408', '87940', '20'), +('16', '102', '12', '49656', '66076', '20'), +('16', '102', '18', '62986', '108566', '20'), +('16', '102', '18', '56041', '107427', '20'), +('16', '102', '18', '94054', '105820', '20'), +('16', '102', '18', '104412', '93564', '20'), +('16', '102', '19', '62990', '108026', '20'), +('16', '102', '19', '56037', '106973', '20'), +('16', '102', '19', '56075', '105282', '20'), +('16', '102', '19', '81763', '104093', '20'), +('16', '102', '13', '111514', '709073', '20'), +('16', '102', '13', '111520', '699680', '20'), +('16', '102', '13', '111525', '695561', '20'), +('16', '102', '13', '111220', '657687', '20'), +('16', '102', '14', '62980', '111191', '20'), +('16', '102', '14', '54901', '68254', '20'), +('16', '102', '14', '46875', '52652', '20'), +('16', '102', '14', '46925', '51635', '20'), +('16', '102', '11', '133816', '211512', '20'), +('16', '102', '11', '111338', '167290', '20'), +('16', '102', '11', '111333', '165819', '20'), +('16', '102', '11', '111337', '162682', '20'), +('16', '103', '22', '12425', '0', '20'), +('16', '103', '22', '21807', '0', '20'), +('16', '103', '22', '21805', '0', '20'), +('16', '103', '22', '39342', '0', '20'), +('16', '103', '1', '98769', '277167', '20'), +('16', '103', '1', '111303', '167251', '20'), +('16', '103', '1', '111308', '166876', '20'), +('16', '103', '1', '111300', '165844', '20'), +('16', '103', '2', '94056', '107086', '20'), +('16', '103', '2', '62985', '105473', '20'), +('16', '103', '2', '104410', '87201', '20'), +('16', '103', '2', '54846', '67444', '20'), +('16', '103', '3', '111315', '166101', '20'), +('16', '103', '3', '111313', '165854', '20'), +('16', '103', '3', '111316', '162866', '20'), +('16', '103', '3', '111014', '146186', '20'), +('16', '103', '5', '111318', '165374', '20'), +('16', '103', '5', '111320', '164967', '20'), +('16', '103', '5', '111319', '161919', '20'), +('16', '103', '5', '111017', '145537', '20'), +('16', '103', '8', '111331', '168472', '20'), +('16', '103', '8', '111328', '167140', '20'), +('16', '103', '8', '111332', '162917', '20'), +('16', '103', '8', '111030', '148607', '20'), +('16', '103', '6', '111322', '166026', '20'), +('16', '103', '6', '111324', '165835', '20'), +('16', '103', '6', '111326', '161997', '20'), +('16', '103', '6', '111021', '146161', '20'), +('16', '103', '17', '56046', '112121', '20'), +('16', '103', '17', '81765', '110285', '20'), +('16', '103', '17', '56083', '110078', '20'), +('16', '103', '17', '104413', '93246', '20'), +('16', '103', '7', '94053', '108190', '20'), +('16', '103', '7', '56079', '106715', '20'), +('16', '103', '7', '104411', '91749', '20'), +('16', '103', '7', '54850', '67346', '20'), +('16', '103', '9', '67098', '169774', '20'), +('16', '103', '9', '56033', '103829', '20'), +('16', '103', '9', '56031', '103828', '20'), +('16', '103', '9', '56070', '103546', '20'), +('16', '103', '15', '111343', '167674', '20'), +('16', '103', '15', '111347', '166770', '20'), +('16', '103', '15', '111345', '164869', '20'), +('16', '103', '15', '111339', '163872', '20'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '103', '20', '111354', '179476', '20'), +('16', '103', '20', '111355', '176185', '20'), +('16', '103', '20', '111351', '174272', '20'), +('16', '103', '20', '111352', '172462', '20'), +('16', '103', '12', '81795', '104214', '20'), +('16', '103', '12', '56073', '104066', '20'), +('16', '103', '12', '104408', '87944', '20'), +('16', '103', '12', '49656', '66077', '20'), +('16', '103', '18', '62986', '108572', '20'), +('16', '103', '18', '56041', '107429', '20'), +('16', '103', '18', '94054', '105824', '20'), +('16', '103', '18', '104412', '93566', '20'), +('16', '103', '19', '62990', '108030', '20'), +('16', '103', '19', '56037', '106977', '20'), +('16', '103', '19', '56075', '105286', '20'), +('16', '103', '19', '81763', '104096', '20'), +('16', '103', '13', '111514', '710491', '20'), +('16', '103', '13', '111520', '701047', '20'), +('16', '103', '13', '111525', '696877', '20'), +('16', '103', '13', '111220', '659003', '20'), +('16', '103', '14', '62980', '111194', '20'), +('16', '103', '14', '54901', '68257', '20'), +('16', '103', '14', '46875', '52657', '20'), +('16', '103', '14', '46925', '51639', '20'), +('16', '103', '11', '133816', '211515', '20'), +('16', '103', '11', '111338', '167295', '20'), +('16', '103', '11', '111333', '165822', '20'), +('16', '103', '11', '111337', '162686', '20'), +('16', '104', '22', '12425', '0', '20'), +('16', '104', '22', '21807', '0', '20'), +('16', '104', '22', '21805', '0', '20'), +('16', '104', '22', '39342', '0', '20'), +('16', '104', '1', '98769', '277170', '20'), +('16', '104', '1', '111303', '167256', '20'), +('16', '104', '1', '111308', '166880', '20'), +('16', '104', '1', '111300', '165847', '20'), +('16', '104', '2', '94056', '107089', '20'), +('16', '104', '2', '62985', '105475', '20'), +('16', '104', '2', '104410', '87204', '20'), +('16', '104', '2', '54846', '67447', '20'), +('16', '104', '3', '111315', '166106', '20'), +('16', '104', '3', '111313', '165857', '20'), +('16', '104', '3', '111316', '162869', '20'), +('16', '104', '3', '111014', '146191', '20'), +('16', '104', '5', '111318', '165377', '20'), +('16', '104', '5', '111320', '164971', '20'), +('16', '104', '5', '111319', '161923', '20'), +('16', '104', '5', '111017', '145540', '20'), +('16', '104', '8', '111331', '168476', '20'), +('16', '104', '8', '111328', '167144', '20'), +('16', '104', '8', '111332', '162920', '20'), +('16', '104', '8', '111030', '148611', '20'), +('16', '104', '6', '111322', '166029', '20'), +('16', '104', '6', '111324', '165839', '20'), +('16', '104', '6', '111326', '162000', '20'), +('16', '104', '6', '111021', '146164', '20'), +('16', '104', '17', '56046', '112126', '20'), +('16', '104', '17', '81765', '110288', '20'), +('16', '104', '17', '56083', '110080', '20'), +('16', '104', '17', '104413', '93250', '20'), +('16', '104', '7', '94053', '108194', '20'), +('16', '104', '7', '56079', '106719', '20'), +('16', '104', '7', '104411', '91752', '20'), +('16', '104', '7', '54850', '67348', '20'), +('16', '104', '9', '67098', '169777', '20'), +('16', '104', '9', '56033', '103831', '20'), +('16', '104', '9', '56031', '103830', '20'), +('16', '104', '9', '56070', '103548', '20'), +('16', '104', '15', '111343', '167677', '20'), +('16', '104', '15', '111347', '166774', '20'), +('16', '104', '15', '111345', '164872', '20'), +('16', '104', '15', '111339', '163875', '20'), +('16', '104', '20', '111354', '179479', '20'), +('16', '104', '20', '111355', '176188', '20'), +('16', '104', '20', '111351', '174275', '20'), +('16', '104', '20', '111352', '172466', '20'), +('16', '104', '12', '81795', '104218', '20'), +('16', '104', '12', '56073', '104071', '20'), +('16', '104', '12', '104408', '87948', '20'), +('16', '104', '12', '49656', '66077', '20'), +('16', '104', '18', '62986', '108577', '20'), +('16', '104', '18', '56041', '107430', '20'), +('16', '104', '18', '94054', '105828', '20'), +('16', '104', '18', '104412', '93568', '20'), +('16', '104', '19', '62990', '108034', '20'), +('16', '104', '19', '56037', '106980', '20'), +('16', '104', '19', '56075', '105289', '20'), +('16', '104', '19', '81763', '104099', '20'), +('16', '104', '13', '111514', '711858', '20'), +('16', '104', '13', '111520', '702413', '20'), +('16', '104', '13', '111525', '698244', '20'), +('16', '104', '13', '111220', '660319', '20'), +('16', '104', '14', '62980', '111196', '20'), +('16', '104', '14', '54901', '68260', '20'), +('16', '104', '14', '46875', '52661', '20'), +('16', '104', '14', '46925', '51644', '20'), +('16', '104', '11', '133816', '211518', '20'), +('16', '104', '11', '111338', '167299', '20'), +('16', '104', '11', '111333', '165825', '20'), +('16', '104', '11', '111337', '162689', '20'), +('16', '105', '22', '12425', '0', '23'), +('16', '105', '22', '21807', '0', '23'), +('16', '105', '22', '21805', '0', '23'), +('16', '105', '22', '39342', '0', '23'), +('16', '105', '1', '98769', '277173', '23'), +('16', '105', '1', '111303', '167261', '23'), +('16', '105', '1', '111308', '166884', '23'), +('16', '105', '1', '111300', '165850', '23'), +('16', '105', '2', '94056', '107093', '23'), +('16', '105', '2', '62985', '105477', '23'), +('16', '105', '2', '104410', '87208', '23'), +('16', '105', '2', '54846', '67450', '23'), +('16', '105', '3', '111315', '166112', '23'), +('16', '105', '3', '111313', '165860', '23'), +('16', '105', '3', '111316', '162873', '23'), +('16', '105', '3', '111014', '146197', '23'), +('16', '105', '5', '111318', '165380', '23'), +('16', '105', '5', '111320', '164975', '23'), +('16', '105', '5', '111319', '161928', '23'), +('16', '105', '5', '111017', '145543', '23'), +('16', '105', '8', '111331', '168481', '23'), +('16', '105', '8', '111328', '167149', '23'), +('16', '105', '8', '111332', '162922', '23'), +('16', '105', '8', '111030', '148616', '23'), +('16', '105', '6', '111322', '166033', '23'), +('16', '105', '6', '111324', '165843', '23'), +('16', '105', '6', '111326', '162004', '23'), +('16', '105', '6', '111021', '146168', '23'), +('16', '105', '17', '56046', '112131', '23'), +('16', '105', '17', '81765', '110291', '23'), +('16', '105', '17', '56083', '110082', '23'), +('16', '105', '17', '104413', '93254', '23'), +('16', '105', '7', '94053', '108198', '23'), +('16', '105', '7', '56079', '106724', '23'), +('16', '105', '7', '104411', '91756', '23'), +('16', '105', '7', '54850', '67349', '23'), +('16', '105', '9', '67098', '169781', '23'), +('16', '105', '9', '56033', '103834', '23'), +('16', '105', '9', '56031', '103832', '23'), +('16', '105', '9', '56070', '103550', '23'), +('16', '105', '15', '111343', '167680', '23'), +('16', '105', '15', '111347', '166779', '23'), +('16', '105', '15', '111345', '164875', '23'), +('16', '105', '15', '111339', '163878', '23'), +('16', '105', '20', '111354', '179483', '23'), +('16', '105', '20', '111355', '176190', '23'), +('16', '105', '20', '111351', '174277', '23'), +('16', '105', '20', '111352', '172470', '23'), +('16', '105', '12', '81795', '104223', '23'), +('16', '105', '12', '56073', '104076', '23'), +('16', '105', '12', '104408', '87952', '23'), +('16', '105', '12', '49656', '66078', '23'), +('16', '105', '18', '62986', '108583', '23'), +('16', '105', '18', '56041', '107432', '23'), +('16', '105', '18', '94054', '105833', '23'), +('16', '105', '18', '104412', '93570', '23'), +('16', '105', '19', '62990', '108038', '23'), +('16', '105', '19', '56037', '106984', '23'), +('16', '105', '19', '56075', '105293', '23'), +('16', '105', '19', '81763', '104102', '23'), +('16', '105', '13', '111514', '713224', '23'), +('16', '105', '13', '111520', '703779', '23'), +('16', '105', '13', '111525', '699611', '23'), +('16', '105', '13', '111220', '661635', '23'), +('16', '105', '14', '62980', '111199', '23'), +('16', '105', '14', '54901', '68263', '23'), +('16', '105', '14', '46875', '52665', '23'), +('16', '105', '14', '46925', '51648', '23'), +('16', '105', '11', '133816', '211522', '23'), +('16', '105', '11', '111338', '167304', '23'), +('16', '105', '11', '111333', '165828', '23'), +('16', '105', '11', '111337', '162693', '23'), +('16', '105', '22', '12425', '0', '22'), +('16', '105', '22', '21807', '0', '22'), +('16', '105', '22', '21805', '0', '22'), +('16', '105', '22', '39342', '0', '22'), +('16', '105', '1', '98769', '277173', '22'), +('16', '105', '1', '111303', '167261', '22'), +('16', '105', '1', '111308', '166884', '22'), +('16', '105', '1', '111300', '165850', '22'), +('16', '105', '2', '94056', '107093', '22'), +('16', '105', '2', '62985', '105477', '22'), +('16', '105', '2', '104410', '87208', '22'), +('16', '105', '2', '54846', '67450', '22'), +('16', '105', '3', '111315', '166112', '22'), +('16', '105', '3', '111313', '165860', '22'), +('16', '105', '3', '111316', '162873', '22'), +('16', '105', '3', '111014', '146197', '22'), +('16', '105', '5', '111318', '165380', '22'), +('16', '105', '5', '111320', '164975', '22'), +('16', '105', '5', '111319', '161928', '22'), +('16', '105', '5', '111017', '145543', '22'), +('16', '105', '8', '111331', '168481', '22'), +('16', '105', '8', '111328', '167149', '22'), +('16', '105', '8', '111332', '162922', '22'), +('16', '105', '8', '111030', '148616', '22'), +('16', '105', '6', '111322', '166033', '22'), +('16', '105', '6', '111324', '165843', '22'), +('16', '105', '6', '111326', '162004', '22'), +('16', '105', '6', '111021', '146168', '22'), +('16', '105', '17', '56046', '112131', '22'), +('16', '105', '17', '81765', '110291', '22'), +('16', '105', '17', '56083', '110082', '22'), +('16', '105', '17', '104413', '93254', '22'), +('16', '105', '7', '94053', '108198', '22'), +('16', '105', '7', '56079', '106724', '22'), +('16', '105', '7', '104411', '91756', '22'), +('16', '105', '7', '54850', '67349', '22'), +('16', '105', '9', '67098', '169781', '22'), +('16', '105', '9', '56033', '103834', '22'), +('16', '105', '9', '56031', '103832', '22'), +('16', '105', '9', '56070', '103550', '22'), +('16', '105', '15', '111343', '167680', '22'), +('16', '105', '15', '111347', '166779', '22'), +('16', '105', '15', '111345', '164875', '22'), +('16', '105', '15', '111339', '163878', '22'), +('16', '105', '20', '111354', '179483', '22'), +('16', '105', '20', '111355', '176190', '22'), +('16', '105', '20', '111351', '174277', '22'), +('16', '105', '20', '111352', '172470', '22'), +('16', '105', '12', '81795', '104223', '22'), +('16', '105', '12', '56073', '104076', '22'), +('16', '105', '12', '104408', '87952', '22'), +('16', '105', '12', '49656', '66078', '22'), +('16', '105', '18', '62986', '108583', '22'), +('16', '105', '18', '56041', '107432', '22'), +('16', '105', '18', '94054', '105833', '22'), +('16', '105', '18', '104412', '93570', '22'), +('16', '105', '19', '62990', '108038', '22'), +('16', '105', '19', '56037', '106984', '22'), +('16', '105', '19', '56075', '105293', '22'), +('16', '105', '19', '81763', '104102', '22'), +('16', '105', '13', '111514', '713224', '22'), +('16', '105', '13', '111520', '703779', '22'), +('16', '105', '13', '111525', '699611', '22'), +('16', '105', '13', '111220', '661635', '22'), +('16', '105', '14', '62980', '111199', '22'), +('16', '105', '14', '54901', '68263', '22'), +('16', '105', '14', '46875', '52665', '22'), +('16', '105', '14', '46925', '51648', '22'), +('16', '105', '11', '133816', '211522', '22'), +('16', '105', '11', '111338', '167304', '22'), +('16', '105', '11', '111333', '165828', '22'), +('16', '105', '11', '111337', '162693', '22'), +('16', '105', '22', '12425', '0', '21'), +('16', '105', '22', '21807', '0', '21'), +('16', '105', '22', '21805', '0', '21'), +('16', '105', '22', '39342', '0', '21'), +('16', '105', '1', '98769', '277173', '21'), +('16', '105', '1', '111303', '167261', '21'), +('16', '105', '1', '111308', '166884', '21'), +('16', '105', '1', '111300', '165850', '21'), +('16', '105', '2', '94056', '107093', '21'), +('16', '105', '2', '62985', '105477', '21'), +('16', '105', '2', '104410', '87208', '21'), +('16', '105', '2', '54846', '67450', '21'), +('16', '105', '3', '111315', '166112', '21'), +('16', '105', '3', '111313', '165860', '21'), +('16', '105', '3', '111316', '162873', '21'), +('16', '105', '3', '111014', '146197', '21'), +('16', '105', '5', '111318', '165380', '21'), +('16', '105', '5', '111320', '164975', '21'), +('16', '105', '5', '111319', '161928', '21'), +('16', '105', '5', '111017', '145543', '21'), +('16', '105', '8', '111331', '168481', '21'), +('16', '105', '8', '111328', '167149', '21'), +('16', '105', '8', '111332', '162922', '21'), +('16', '105', '8', '111030', '148616', '21'), +('16', '105', '6', '111322', '166033', '21'), +('16', '105', '6', '111324', '165843', '21'), +('16', '105', '6', '111326', '162004', '21'), +('16', '105', '6', '111021', '146168', '21'), +('16', '105', '17', '56046', '112131', '21'), +('16', '105', '17', '81765', '110291', '21'), +('16', '105', '17', '56083', '110082', '21'), +('16', '105', '17', '104413', '93254', '21'), +('16', '105', '7', '94053', '108198', '21'), +('16', '105', '7', '56079', '106724', '21'), +('16', '105', '7', '104411', '91756', '21'), +('16', '105', '7', '54850', '67349', '21'), +('16', '105', '9', '67098', '169781', '21'), +('16', '105', '9', '56033', '103834', '21'), +('16', '105', '9', '56031', '103832', '21'), +('16', '105', '9', '56070', '103550', '21'), +('16', '105', '15', '111343', '167680', '21'), +('16', '105', '15', '111347', '166779', '21'), +('16', '105', '15', '111345', '164875', '21'), +('16', '105', '15', '111339', '163878', '21'), +('16', '105', '20', '111354', '179483', '21'), +('16', '105', '20', '111355', '176190', '21'), +('16', '105', '20', '111351', '174277', '21'), +('16', '105', '20', '111352', '172470', '21'), +('16', '105', '12', '81795', '104223', '21'), +('16', '105', '12', '56073', '104076', '21'), +('16', '105', '12', '104408', '87952', '21'), +('16', '105', '12', '49656', '66078', '21'), +('16', '105', '18', '62986', '108583', '21'), +('16', '105', '18', '56041', '107432', '21'), +('16', '105', '18', '94054', '105833', '21'), +('16', '105', '18', '104412', '93570', '21'), +('16', '105', '19', '62990', '108038', '21'), +('16', '105', '19', '56037', '106984', '21'), +('16', '105', '19', '56075', '105293', '21'), +('16', '105', '19', '81763', '104102', '21'), +('16', '105', '13', '111514', '713224', '21'), +('16', '105', '13', '111520', '703779', '21'), +('16', '105', '13', '111525', '699611', '21'), +('16', '105', '13', '111220', '661635', '21'), +('16', '105', '14', '62980', '111199', '21'), +('16', '105', '14', '54901', '68263', '21'), +('16', '105', '14', '46875', '52665', '21'), +('16', '105', '14', '46925', '51648', '21'), +('16', '105', '11', '133816', '211522', '21'), +('16', '105', '11', '111338', '167304', '21'), +('16', '105', '11', '111333', '165828', '21'), +('16', '105', '11', '111337', '162693', '21'), +('16', '106', '22', '12425', '0', '23'), +('16', '106', '22', '21807', '0', '23'), +('16', '106', '22', '21805', '0', '23'), +('16', '106', '22', '39342', '0', '23'), +('16', '106', '1', '98769', '277176', '23'), +('16', '106', '1', '111303', '167267', '23'), +('16', '106', '1', '111308', '166888', '23'), +('16', '106', '1', '111300', '165853', '23'), +('16', '106', '2', '94056', '107096', '23'), +('16', '106', '2', '62985', '105480', '23'), +('16', '106', '2', '104410', '87211', '23'), +('16', '106', '2', '54846', '67453', '23'), +('16', '106', '3', '111315', '166118', '23'), +('16', '106', '3', '111313', '165863', '23'), +('16', '106', '3', '111316', '162877', '23'), +('16', '106', '3', '111014', '146203', '23'), +('16', '106', '5', '111318', '165383', '23'), +('16', '106', '5', '111320', '164980', '23'), +('16', '106', '5', '111319', '161933', '23'), +('16', '106', '5', '111017', '145546', '23'), +('16', '106', '8', '111331', '168485', '23'), +('16', '106', '8', '111328', '167153', '23'), +('16', '106', '8', '111332', '162925', '23'), +('16', '106', '8', '111030', '148620', '23'), +('16', '106', '6', '111322', '166036', '23'), +('16', '106', '6', '111324', '165848', '23'), +('16', '106', '6', '111326', '162008', '23'), +('16', '106', '6', '111021', '146171', '23'), +('16', '106', '17', '56046', '112137', '23'), +('16', '106', '17', '81765', '110295', '23'), +('16', '106', '17', '56083', '110085', '23'), +('16', '106', '17', '104413', '93258', '23'), +('16', '106', '7', '94053', '108202', '23'), +('16', '106', '7', '56079', '106728', '23'), +('16', '106', '7', '104411', '91759', '23'), +('16', '106', '7', '54850', '67350', '23'), +('16', '106', '9', '67098', '169785', '23'), +('16', '106', '9', '56033', '103836', '23'), +('16', '106', '9', '56031', '103835', '23'), +('16', '106', '9', '56070', '103552', '23'), +('16', '106', '15', '111343', '167682', '23'), +('16', '106', '15', '111347', '166783', '23'), +('16', '106', '15', '111345', '164878', '23'), +('16', '106', '15', '111339', '163881', '23'), +('16', '106', '20', '111354', '179486', '23'), +('16', '106', '20', '111355', '176193', '23'), +('16', '106', '20', '111351', '174280', '23'), +('16', '106', '20', '111352', '172474', '23'), +('16', '106', '12', '81795', '104228', '23'), +('16', '106', '12', '56073', '104082', '23'), +('16', '106', '12', '104408', '87956', '23'), +('16', '106', '12', '49656', '66078', '23'), +('16', '106', '18', '62986', '108589', '23'), +('16', '106', '18', '56041', '107433', '23'), +('16', '106', '18', '94054', '105837', '23'), +('16', '106', '18', '104412', '93572', '23'), +('16', '106', '19', '62990', '108042', '23'), +('16', '106', '19', '56037', '106988', '23'), +('16', '106', '19', '56075', '105297', '23'), +('16', '106', '19', '81763', '104106', '23'), +('16', '106', '13', '111514', '714642', '23'), +('16', '106', '13', '111520', '705145', '23'), +('16', '106', '13', '111525', '700978', '23'), +('16', '106', '13', '111220', '662952', '23'), +('16', '106', '14', '62980', '111201', '23'), +('16', '106', '14', '54901', '68266', '23'), +('16', '106', '14', '46875', '52670', '23'), +('16', '106', '14', '46925', '51653', '23'), +('16', '106', '11', '133816', '211525', '23'), +('16', '106', '11', '111338', '167308', '23'), +('16', '106', '11', '111333', '165831', '23'), +('16', '106', '11', '111337', '162697', '23'), +('16', '107', '22', '12425', '0', '23'), +('16', '107', '22', '21807', '0', '23'), +('16', '107', '22', '21805', '0', '23'), +('16', '107', '22', '39342', '0', '23'), +('16', '107', '1', '98769', '277179', '23'), +('16', '107', '1', '111303', '167271', '23'), +('16', '107', '1', '111308', '166892', '23'), +('16', '107', '1', '111300', '165855', '23'), +('16', '107', '2', '94056', '107100', '23'), +('16', '107', '2', '62985', '105482', '23'), +('16', '107', '2', '104410', '87214', '23'), +('16', '107', '2', '54846', '67456', '23'), +('16', '107', '3', '111315', '166123', '23'), +('16', '107', '3', '111313', '165865', '23'), +('16', '107', '3', '111316', '162881', '23'), +('16', '107', '3', '111014', '146208', '23'), +('16', '107', '5', '111318', '165386', '23'), +('16', '107', '5', '111320', '164983', '23'), +('16', '107', '5', '111319', '161938', '23'), +('16', '107', '5', '111017', '145548', '23'), +('16', '107', '8', '111331', '168489', '23'), +('16', '107', '8', '111328', '167158', '23'), +('16', '107', '8', '111332', '162928', '23'), +('16', '107', '8', '111030', '148624', '23'), +('16', '107', '6', '111322', '166039', '23'), +('16', '107', '6', '111324', '165852', '23'), +('16', '107', '6', '111326', '162011', '23'), +('16', '107', '6', '111021', '146174', '23'), +('16', '107', '17', '56046', '112142', '23'), +('16', '107', '17', '81765', '110298', '23'), +('16', '107', '17', '56083', '110087', '23'), +('16', '107', '17', '104413', '93262', '23'), +('16', '107', '7', '94053', '108206', '23'), +('16', '107', '7', '56079', '106733', '23'), +('16', '107', '7', '104411', '91762', '23'), +('16', '107', '7', '54850', '67351', '23'), +('16', '107', '9', '67098', '169788', '23'), +('16', '107', '9', '56033', '103838', '23'), +('16', '107', '9', '56031', '103837', '23'), +('16', '107', '9', '56070', '103553', '23'), +('16', '107', '15', '111343', '167685', '23'), +('16', '107', '15', '111347', '166788', '23'), +('16', '107', '15', '111345', '164881', '23'), +('16', '107', '15', '111339', '163884', '23'), +('16', '107', '20', '111354', '179490', '23'), +('16', '107', '20', '111355', '176196', '23'), +('16', '107', '20', '111351', '174282', '23'), +('16', '107', '20', '111352', '172478', '23'), +('16', '107', '12', '81795', '104233', '23'), +('16', '107', '12', '56073', '104087', '23'), +('16', '107', '12', '104408', '87959', '23'), +('16', '107', '12', '49656', '66079', '23'), +('16', '107', '18', '62986', '108594', '23'), +('16', '107', '18', '56041', '107435', '23'), +('16', '107', '18', '94054', '105841', '23'), +('16', '107', '18', '104412', '93574', '23'), +('16', '107', '19', '62990', '108045', '23'), +('16', '107', '19', '56037', '106992', '23'), +('16', '107', '19', '56075', '105301', '23'), +('16', '107', '19', '81763', '104108', '23'), +('16', '107', '13', '111514', '716009', '23'), +('16', '107', '13', '111520', '706511', '23'), +('16', '107', '13', '111525', '702345', '23'), +('16', '107', '13', '111220', '664268', '23'), +('16', '107', '14', '62980', '111204', '23'), +('16', '107', '14', '54901', '68269', '23'), +('16', '107', '14', '46875', '52674', '23'), +('16', '107', '14', '46925', '51657', '23'), +('16', '107', '11', '133816', '211528', '23'), +('16', '107', '11', '111338', '167313', '23'), +('16', '107', '11', '111333', '165834', '23'), +('16', '107', '11', '111337', '162700', '23'), +('16', '108', '22', '12425', '0', '23'), +('16', '108', '22', '21807', '0', '23'), +('16', '108', '22', '21805', '0', '23'), +('16', '108', '22', '39342', '0', '23'), +('16', '108', '1', '98769', '277182', '23'), +('16', '108', '1', '111303', '167277', '23'), +('16', '108', '1', '111308', '166896', '23'), +('16', '108', '1', '111300', '165858', '23'), +('16', '108', '2', '94056', '107103', '23'), +('16', '108', '2', '62985', '105484', '23'), +('16', '108', '2', '104410', '87218', '23'), +('16', '108', '2', '54846', '67459', '23'), +('16', '108', '3', '111315', '166129', '23'), +('16', '108', '3', '111313', '165868', '23'), +('16', '108', '3', '111316', '162885', '23'), +('16', '108', '3', '111014', '146214', '23'), +('16', '108', '5', '111318', '165389', '23'), +('16', '108', '5', '111320', '164988', '23'), +('16', '108', '5', '111319', '161943', '23'), +('16', '108', '5', '111017', '145551', '23'), +('16', '108', '8', '111331', '168494', '23'), +('16', '108', '8', '111328', '167162', '23'), +('16', '108', '8', '111332', '162931', '23'), +('16', '108', '8', '111030', '148629', '23'), +('16', '108', '6', '111322', '166043', '23'), +('16', '108', '6', '111324', '165856', '23'), +('16', '108', '6', '111326', '162015', '23'), +('16', '108', '6', '111021', '146178', '23'), +('16', '108', '17', '56046', '112148', '23'), +('16', '108', '17', '81765', '110301', '23'), +('16', '108', '17', '56083', '110089', '23'), +('16', '108', '17', '104413', '93267', '23'), +('16', '108', '7', '94053', '108210', '23'), +('16', '108', '7', '56079', '106737', '23'), +('16', '108', '7', '104411', '91766', '23'), +('16', '108', '7', '54850', '67352', '23'), +('16', '108', '9', '67098', '169792', '23'), +('16', '108', '9', '56033', '103840', '23'), +('16', '108', '9', '56031', '103839', '23'), +('16', '108', '9', '56070', '103555', '23'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '108', '15', '111343', '167688', '23'), +('16', '108', '15', '111347', '166792', '23'), +('16', '108', '15', '111345', '164884', '23'), +('16', '108', '15', '111339', '163887', '23'), +('16', '108', '20', '111354', '179493', '23'), +('16', '108', '20', '111355', '176198', '23'), +('16', '108', '20', '111351', '174284', '23'), +('16', '108', '20', '111352', '172482', '23'), +('16', '108', '12', '81795', '104237', '23'), +('16', '108', '12', '56073', '104093', '23'), +('16', '108', '12', '104408', '87963', '23'), +('16', '108', '12', '49656', '66079', '23'), +('16', '108', '18', '62986', '108600', '23'), +('16', '108', '18', '56041', '107437', '23'), +('16', '108', '18', '94054', '105845', '23'), +('16', '108', '18', '104412', '93576', '23'), +('16', '108', '19', '62990', '108049', '23'), +('16', '108', '19', '56037', '106995', '23'), +('16', '108', '19', '56075', '105305', '23'), +('16', '108', '19', '81763', '104112', '23'), +('16', '108', '13', '111514', '717376', '23'), +('16', '108', '13', '111520', '707877', '23'), +('16', '108', '13', '111525', '703712', '23'), +('16', '108', '13', '111220', '665584', '23'), +('16', '108', '14', '62980', '111207', '23'), +('16', '108', '14', '54901', '68272', '23'), +('16', '108', '14', '46875', '52679', '23'), +('16', '108', '14', '46925', '51661', '23'), +('16', '108', '11', '133816', '211531', '23'), +('16', '108', '11', '111338', '167317', '23'), +('16', '108', '11', '111333', '165837', '23'), +('16', '108', '11', '111337', '162704', '23'), +('16', '109', '22', '12425', '0', '23'), +('16', '109', '22', '21807', '0', '23'), +('16', '109', '22', '21805', '0', '23'), +('16', '109', '22', '39342', '0', '23'), +('16', '109', '1', '98769', '277185', '23'), +('16', '109', '1', '111303', '167282', '23'), +('16', '109', '1', '111308', '166900', '23'), +('16', '109', '1', '111300', '165861', '23'), +('16', '109', '2', '94056', '107107', '23'), +('16', '109', '2', '62985', '105487', '23'), +('16', '109', '2', '104410', '87221', '23'), +('16', '109', '2', '54846', '67462', '23'), +('16', '109', '3', '111315', '166135', '23'), +('16', '109', '3', '111313', '165871', '23'), +('16', '109', '3', '111316', '162889', '23'), +('16', '109', '3', '111014', '146220', '23'), +('16', '109', '5', '111318', '165392', '23'), +('16', '109', '5', '111320', '164992', '23'), +('16', '109', '5', '111319', '161948', '23'), +('16', '109', '5', '111017', '145554', '23'), +('16', '109', '8', '111331', '168498', '23'), +('16', '109', '8', '111328', '167167', '23'), +('16', '109', '8', '111332', '162934', '23'), +('16', '109', '8', '111030', '148633', '23'), +('16', '109', '6', '111322', '166046', '23'), +('16', '109', '6', '111324', '165861', '23'), +('16', '109', '6', '111326', '162019', '23'), +('16', '109', '6', '111021', '146181', '23'), +('16', '109', '17', '56046', '112153', '23'), +('16', '109', '17', '81765', '110305', '23'), +('16', '109', '17', '56083', '110092', '23'), +('16', '109', '17', '104413', '93271', '23'), +('16', '109', '7', '94053', '108214', '23'), +('16', '109', '7', '56079', '106742', '23'), +('16', '109', '7', '104411', '91769', '23'), +('16', '109', '7', '54850', '67353', '23'), +('16', '109', '9', '67098', '169796', '23'), +('16', '109', '9', '56033', '103842', '23'), +('16', '109', '9', '56031', '103842', '23'), +('16', '109', '9', '56070', '103557', '23'), +('16', '109', '15', '111343', '167691', '23'), +('16', '109', '15', '111347', '166797', '23'), +('16', '109', '15', '111345', '164887', '23'), +('16', '109', '15', '111339', '163891', '23'), +('16', '109', '20', '111354', '179497', '23'), +('16', '109', '20', '111355', '176201', '23'), +('16', '109', '20', '111351', '174287', '23'), +('16', '109', '20', '111352', '172486', '23'), +('16', '109', '12', '81795', '104242', '23'), +('16', '109', '12', '56073', '104098', '23'), +('16', '109', '12', '104408', '87967', '23'), +('16', '109', '12', '49656', '66080', '23'), +('16', '109', '18', '62986', '108605', '23'), +('16', '109', '18', '56041', '107438', '23'), +('16', '109', '18', '94054', '105849', '23'), +('16', '109', '18', '104412', '93578', '23'), +('16', '109', '19', '62990', '108053', '23'), +('16', '109', '19', '56037', '106999', '23'), +('16', '109', '19', '56075', '105309', '23'), +('16', '109', '19', '81763', '104115', '23'), +('16', '109', '13', '111514', '718793', '23'), +('16', '109', '13', '111520', '709244', '23'), +('16', '109', '13', '111525', '705028', '23'), +('16', '109', '13', '111220', '666850', '23'), +('16', '109', '14', '62980', '111209', '23'), +('16', '109', '14', '54901', '68275', '23'), +('16', '109', '14', '46875', '52683', '23'), +('16', '109', '14', '46925', '51666', '23'), +('16', '109', '11', '133816', '211535', '23'), +('16', '109', '11', '111338', '167322', '23'), +('16', '109', '11', '111333', '165840', '23'), +('16', '109', '11', '111337', '162707', '23'), +('16', '110', '22', '12425', '0', '25'), +('16', '110', '22', '21807', '0', '25'), +('16', '110', '22', '39342', '0', '25'), +('16', '110', '22', '7867', '0', '25'), +('16', '110', '1', '98769', '277188', '25'), +('16', '110', '1', '111303', '167287', '25'), +('16', '110', '1', '111308', '166904', '25'), +('16', '110', '1', '111300', '165864', '25'), +('16', '110', '2', '94056', '107110', '25'), +('16', '110', '2', '62985', '105489', '25'), +('16', '110', '2', '104410', '87225', '25'), +('16', '110', '2', '54846', '67465', '25'), +('16', '110', '3', '111315', '166141', '25'), +('16', '110', '3', '111313', '165874', '25'), +('16', '110', '3', '111316', '162893', '25'), +('16', '110', '3', '111014', '146226', '25'), +('16', '110', '5', '111318', '165395', '25'), +('16', '110', '5', '111320', '164996', '25'), +('16', '110', '5', '111319', '161953', '25'), +('16', '110', '5', '111017', '145557', '25'), +('16', '110', '8', '111331', '168503', '25'), +('16', '110', '8', '111328', '167171', '25'), +('16', '110', '8', '111332', '162937', '25'), +('16', '110', '8', '111030', '148638', '25'), +('16', '110', '6', '111322', '166049', '25'), +('16', '110', '6', '111324', '165865', '25'), +('16', '110', '6', '111326', '162023', '25'), +('16', '110', '6', '111021', '146184', '25'), +('16', '110', '17', '56046', '112159', '25'), +('16', '110', '17', '81765', '110308', '25'), +('16', '110', '17', '56083', '110094', '25'), +('16', '110', '17', '104413', '93275', '25'), +('16', '110', '7', '94053', '108218', '25'), +('16', '110', '7', '56079', '106746', '25'), +('16', '110', '7', '104411', '91773', '25'), +('16', '110', '7', '54850', '67354', '25'), +('16', '110', '9', '67098', '169800', '25'), +('16', '110', '9', '56033', '103845', '25'), +('16', '110', '9', '56031', '103844', '25'), +('16', '110', '9', '56070', '103559', '25'), +('16', '110', '15', '111343', '167694', '25'), +('16', '110', '15', '111347', '166802', '25'), +('16', '110', '15', '111345', '164890', '25'), +('16', '110', '15', '111339', '163894', '25'), +('16', '110', '20', '111354', '179501', '25'), +('16', '110', '20', '111355', '176204', '25'), +('16', '110', '20', '111351', '174289', '25'), +('16', '110', '20', '111352', '172490', '25'), +('16', '110', '12', '81795', '104247', '25'), +('16', '110', '12', '56073', '104104', '25'), +('16', '110', '12', '104408', '87971', '25'), +('16', '110', '12', '49656', '66080', '25'), +('16', '110', '18', '62986', '108611', '25'), +('16', '110', '18', '56041', '107440', '25'), +('16', '110', '18', '94054', '105854', '25'), +('16', '110', '18', '104412', '93580', '25'), +('16', '110', '19', '62904', '144191', '25'), +('16', '110', '19', '62990', '108057', '25'), +('16', '110', '19', '56037', '107003', '25'), +('16', '110', '19', '56075', '105312', '25'), +('16', '110', '13', '111514', '722432', '25'), +('16', '110', '13', '111520', '712882', '25'), +('16', '110', '13', '111525', '708667', '25'), +('16', '110', '13', '111220', '670438', '25'), +('16', '110', '14', '62980', '111212', '25'), +('16', '110', '14', '54901', '68278', '25'), +('16', '110', '14', '46875', '52688', '25'), +('16', '110', '14', '46925', '51671', '25'), +('16', '110', '11', '85213', '246861', '25'), +('16', '110', '11', '133816', '211538', '25'), +('16', '110', '11', '111338', '167327', '25'), +('16', '110', '11', '111333', '165843', '25'), +('16', '110', '22', '12425', '0', '24'), +('16', '110', '22', '21807', '0', '24'), +('16', '110', '22', '39342', '0', '24'), +('16', '110', '22', '7867', '0', '24'), +('16', '110', '1', '98769', '277188', '24'), +('16', '110', '1', '111303', '167287', '24'), +('16', '110', '1', '111308', '166904', '24'), +('16', '110', '1', '111300', '165864', '24'), +('16', '110', '2', '94056', '107110', '24'), +('16', '110', '2', '62985', '105489', '24'), +('16', '110', '2', '104410', '87225', '24'), +('16', '110', '2', '54846', '67465', '24'), +('16', '110', '3', '111315', '166141', '24'), +('16', '110', '3', '111313', '165874', '24'), +('16', '110', '3', '111316', '162893', '24'), +('16', '110', '3', '111014', '146226', '24'), +('16', '110', '5', '111318', '165395', '24'), +('16', '110', '5', '111320', '164996', '24'), +('16', '110', '5', '111319', '161953', '24'), +('16', '110', '5', '111017', '145557', '24'), +('16', '110', '8', '111331', '168503', '24'), +('16', '110', '8', '111328', '167171', '24'), +('16', '110', '8', '111332', '162937', '24'), +('16', '110', '8', '111030', '148638', '24'), +('16', '110', '6', '111322', '166049', '24'), +('16', '110', '6', '111324', '165865', '24'), +('16', '110', '6', '111326', '162023', '24'), +('16', '110', '6', '111021', '146184', '24'), +('16', '110', '17', '56046', '112159', '24'), +('16', '110', '17', '81765', '110308', '24'), +('16', '110', '17', '56083', '110094', '24'), +('16', '110', '17', '104413', '93275', '24'), +('16', '110', '7', '94053', '108218', '24'), +('16', '110', '7', '56079', '106746', '24'), +('16', '110', '7', '104411', '91773', '24'), +('16', '110', '7', '54850', '67354', '24'), +('16', '110', '9', '67098', '169800', '24'), +('16', '110', '9', '56033', '103845', '24'), +('16', '110', '9', '56031', '103844', '24'), +('16', '110', '9', '56070', '103559', '24'), +('16', '110', '15', '111343', '167694', '24'), +('16', '110', '15', '111347', '166802', '24'), +('16', '110', '15', '111345', '164890', '24'), +('16', '110', '15', '111339', '163894', '24'), +('16', '110', '20', '111354', '179501', '24'), +('16', '110', '20', '111355', '176204', '24'), +('16', '110', '20', '111351', '174289', '24'), +('16', '110', '20', '111352', '172490', '24'), +('16', '110', '12', '81795', '104247', '24'), +('16', '110', '12', '56073', '104104', '24'), +('16', '110', '12', '104408', '87971', '24'), +('16', '110', '12', '49656', '66080', '24'), +('16', '110', '18', '62986', '108611', '24'), +('16', '110', '18', '56041', '107440', '24'), +('16', '110', '18', '94054', '105854', '24'), +('16', '110', '18', '104412', '93580', '24'), +('16', '110', '19', '62990', '108057', '24'), +('16', '110', '19', '56037', '107003', '24'), +('16', '110', '19', '56075', '105312', '24'), +('16', '110', '19', '81763', '104118', '24'), +('16', '110', '13', '111514', '722432', '24'), +('16', '110', '13', '111520', '712882', '24'), +('16', '110', '13', '111525', '708667', '24'), +('16', '110', '13', '111220', '670438', '24'), +('16', '110', '14', '62980', '111212', '24'), +('16', '110', '14', '54901', '68278', '24'), +('16', '110', '14', '46875', '52688', '24'), +('16', '110', '14', '46925', '51671', '24'), +('16', '110', '11', '85213', '246861', '24'), +('16', '110', '11', '133816', '211538', '24'), +('16', '110', '11', '111338', '167327', '24'), +('16', '110', '11', '111333', '165843', '24'), +('16', '111', '22', '12425', '0', '25'), +('16', '111', '22', '21807', '0', '25'), +('16', '111', '22', '39342', '0', '25'), +('16', '111', '22', '7867', '0', '25'), +('16', '111', '1', '98769', '277191', '25'), +('16', '111', '1', '111303', '167292', '25'), +('16', '111', '1', '111308', '166908', '25'), +('16', '111', '1', '111300', '165867', '25'), +('16', '111', '2', '94056', '107114', '25'), +('16', '111', '2', '62985', '105491', '25'), +('16', '111', '2', '104410', '87228', '25'), +('16', '111', '2', '54846', '67468', '25'), +('16', '111', '3', '111315', '166147', '25'), +('16', '111', '3', '111313', '165877', '25'), +('16', '111', '3', '111316', '162896', '25'), +('16', '111', '3', '111014', '146232', '25'), +('16', '111', '5', '111318', '165398', '25'), +('16', '111', '5', '111320', '165000', '25'), +('16', '111', '5', '111319', '161958', '25'), +('16', '111', '5', '111017', '145560', '25'), +('16', '111', '8', '111331', '168508', '25'), +('16', '111', '8', '111328', '167176', '25'), +('16', '111', '8', '111332', '162939', '25'), +('16', '111', '8', '111030', '148643', '25'), +('16', '111', '6', '111322', '166053', '25'), +('16', '111', '6', '111324', '165870', '25'), +('16', '111', '6', '111326', '162026', '25'), +('16', '111', '6', '111021', '146188', '25'), +('16', '111', '17', '56046', '112165', '25'), +('16', '111', '17', '81765', '110311', '25'), +('16', '111', '17', '56083', '110096', '25'), +('16', '111', '17', '104413', '93280', '25'), +('16', '111', '7', '94053', '108222', '25'), +('16', '111', '7', '56079', '106751', '25'), +('16', '111', '7', '104411', '91776', '25'), +('16', '111', '7', '54850', '67356', '25'), +('16', '111', '9', '67098', '169803', '25'), +('16', '111', '9', '56031', '103847', '25'), +('16', '111', '9', '56033', '103847', '25'), +('16', '111', '9', '56070', '103561', '25'), +('16', '111', '15', '111343', '167696', '25'), +('16', '111', '15', '111347', '166806', '25'), +('16', '111', '15', '111345', '164893', '25'), +('16', '111', '15', '111339', '163897', '25'), +('16', '111', '20', '111354', '179504', '25'), +('16', '111', '20', '111355', '176207', '25'), +('16', '111', '20', '111351', '174292', '25'), +('16', '111', '20', '111352', '172495', '25'), +('16', '111', '12', '81795', '104252', '25'), +('16', '111', '12', '56073', '104110', '25'), +('16', '111', '12', '104408', '87975', '25'), +('16', '111', '12', '49656', '66081', '25'), +('16', '111', '18', '62986', '108617', '25'), +('16', '111', '18', '56041', '107442', '25'), +('16', '111', '18', '94054', '105858', '25'), +('16', '111', '18', '104412', '93582', '25'), +('16', '111', '19', '62904', '144196', '25'), +('16', '111', '19', '62990', '108061', '25'), +('16', '111', '19', '56037', '107007', '25'), +('16', '111', '19', '56075', '105316', '25'), +('16', '111', '13', '111514', '723799', '25'), +('16', '111', '13', '111520', '714248', '25'), +('16', '111', '13', '111525', '710034', '25'), +('16', '111', '13', '111220', '671755', '25'), +('16', '111', '14', '62980', '111215', '25'), +('16', '111', '14', '54901', '68281', '25'), +('16', '111', '14', '46875', '52692', '25'), +('16', '111', '14', '46925', '51675', '25'), +('16', '111', '11', '85213', '246864', '25'), +('16', '111', '11', '133816', '211542', '25'), +('16', '111', '11', '111338', '167331', '25'), +('16', '111', '11', '111333', '165846', '25'), +('16', '112', '22', '12425', '0', '25'), +('16', '112', '22', '21807', '0', '25'), +('16', '112', '22', '39342', '0', '25'), +('16', '112', '22', '7867', '0', '25'), +('16', '112', '1', '98769', '277194', '25'), +('16', '112', '1', '111303', '167297', '25'), +('16', '112', '1', '111308', '166912', '25'), +('16', '112', '1', '111300', '165870', '25'), +('16', '112', '2', '94056', '107117', '25'), +('16', '112', '2', '62985', '105494', '25'), +('16', '112', '2', '104410', '87232', '25'), +('16', '112', '2', '54846', '67471', '25'), +('16', '112', '3', '111315', '166153', '25'), +('16', '112', '3', '111313', '165880', '25'), +('16', '112', '3', '111316', '162900', '25'), +('16', '112', '3', '111014', '146238', '25'), +('16', '112', '5', '111318', '165401', '25'), +('16', '112', '5', '111320', '165004', '25'), +('16', '112', '5', '111319', '161963', '25'), +('16', '112', '5', '111017', '145563', '25'), +('16', '112', '8', '111331', '168512', '25'), +('16', '112', '8', '111328', '167180', '25'), +('16', '112', '8', '111332', '162942', '25'), +('16', '112', '8', '111030', '148647', '25'), +('16', '112', '6', '111322', '166056', '25'), +('16', '112', '6', '111324', '165874', '25'), +('16', '112', '6', '111326', '162030', '25'), +('16', '112', '6', '111021', '146191', '25'), +('16', '112', '17', '56046', '112170', '25'), +('16', '112', '17', '81765', '110315', '25'), +('16', '112', '17', '56083', '110099', '25'), +('16', '112', '17', '104413', '93284', '25'), +('16', '112', '7', '94053', '108227', '25'), +('16', '112', '7', '56079', '106755', '25'), +('16', '112', '7', '104411', '91780', '25'), +('16', '112', '7', '54850', '67357', '25'), +('16', '112', '9', '67098', '169807', '25'), +('16', '112', '9', '56031', '103849', '25'), +('16', '112', '9', '56033', '103849', '25'), +('16', '112', '9', '56070', '103562', '25'), +('16', '112', '15', '111343', '167699', '25'), +('16', '112', '15', '111347', '166811', '25'), +('16', '112', '15', '111345', '164896', '25'), +('16', '112', '15', '111339', '163900', '25'), +('16', '112', '20', '111354', '179508', '25'), +('16', '112', '20', '111355', '176209', '25'), +('16', '112', '20', '111351', '174294', '25'), +('16', '112', '20', '111352', '172499', '25'), +('16', '112', '12', '81795', '104257', '25'), +('16', '112', '12', '56073', '104115', '25'), +('16', '112', '12', '104408', '87979', '25'), +('16', '112', '12', '49656', '66081', '25'), +('16', '112', '18', '62986', '108622', '25'), +('16', '112', '18', '56041', '107443', '25'), +('16', '112', '18', '94054', '105862', '25'), +('16', '112', '18', '104412', '93583', '25'), +('16', '112', '19', '62904', '144200', '25'), +('16', '112', '19', '62990', '108065', '25'), +('16', '112', '19', '56037', '107011', '25'), +('16', '112', '19', '56075', '105320', '25'), +('16', '112', '13', '111514', '725217', '25'), +('16', '112', '13', '111520', '715615', '25'), +('16', '112', '13', '111525', '711401', '25'), +('16', '112', '13', '111220', '673071', '25'), +('16', '112', '14', '62980', '111218', '25'), +('16', '112', '14', '54901', '68284', '25'), +('16', '112', '14', '46875', '52697', '25'), +('16', '112', '14', '46925', '51680', '25'), +('16', '112', '11', '85213', '246867', '25'), +('16', '112', '11', '133816', '211545', '25'), +('16', '112', '11', '111338', '167336', '25'), +('16', '112', '11', '111333', '165849', '25'), +('16', '113', '22', '12425', '0', '25'), +('16', '113', '22', '21807', '0', '25'), +('16', '113', '22', '39342', '0', '25'), +('16', '113', '22', '7867', '0', '25'), +('16', '113', '1', '98769', '277197', '25'), +('16', '113', '1', '111303', '167303', '25'), +('16', '113', '1', '111308', '166916', '25'), +('16', '113', '1', '111300', '165873', '25'), +('16', '113', '2', '94056', '107121', '25'), +('16', '113', '2', '62985', '105496', '25'), +('16', '113', '2', '104410', '87235', '25'), +('16', '113', '2', '54846', '67473', '25'), +('16', '113', '3', '111315', '166158', '25'), +('16', '113', '3', '111313', '165883', '25'), +('16', '113', '3', '111316', '162904', '25'), +('16', '113', '3', '111014', '146243', '25'), +('16', '113', '5', '111318', '165404', '25'), +('16', '113', '5', '111320', '165008', '25'), +('16', '113', '5', '111319', '161969', '25'), +('16', '113', '5', '111017', '145566', '25'), +('16', '113', '8', '111331', '168517', '25'), +('16', '113', '8', '111328', '167185', '25'), +('16', '113', '8', '111332', '162945', '25'), +('16', '113', '8', '111030', '148652', '25'), +('16', '113', '6', '111322', '166060', '25'), +('16', '113', '6', '111324', '165878', '25'), +('16', '113', '6', '111326', '162034', '25'), +('16', '113', '6', '111021', '146195', '25'), +('16', '113', '17', '56046', '112176', '25'), +('16', '113', '17', '81765', '110318', '25'), +('16', '113', '17', '56083', '110101', '25'), +('16', '113', '17', '104413', '93288', '25'), +('16', '113', '7', '94053', '108231', '25'), +('16', '113', '7', '56079', '106760', '25'), +('16', '113', '7', '104411', '91784', '25'), +('16', '113', '7', '54850', '67358', '25'), +('16', '113', '9', '67098', '169811', '25'), +('16', '113', '9', '56031', '103852', '25'), +('16', '113', '9', '56033', '103851', '25'), +('16', '113', '9', '56070', '103564', '25'), +('16', '113', '15', '111343', '167702', '25'), +('16', '113', '15', '111347', '166816', '25'), +('16', '113', '15', '111345', '164899', '25'), +('16', '113', '15', '111339', '163904', '25'), +('16', '113', '20', '111354', '179512', '25'), +('16', '113', '20', '111355', '176212', '25'), +('16', '113', '20', '111351', '174297', '25'), +('16', '113', '20', '111352', '172503', '25'), +('16', '113', '12', '81795', '104261', '25'), +('16', '113', '12', '56073', '104121', '25'), +('16', '113', '12', '104408', '87983', '25'), +('16', '113', '12', '49656', '66082', '25'), +('16', '113', '18', '62986', '108628', '25'), +('16', '113', '18', '56041', '107445', '25'), +('16', '113', '18', '94054', '105867', '25'), +('16', '113', '18', '104412', '93585', '25'), +('16', '113', '19', '62904', '144205', '25'), +('16', '113', '19', '62990', '108069', '25'), +('16', '113', '19', '56037', '107015', '25'), +('16', '113', '19', '56075', '105324', '25'), +('16', '113', '13', '111514', '726584', '25'), +('16', '113', '13', '111520', '716981', '25'), +('16', '113', '13', '111525', '712768', '25'), +('16', '113', '13', '111220', '674387', '25'), +('16', '113', '14', '62980', '111220', '25'), +('16', '113', '14', '54901', '68287', '25'), +('16', '113', '14', '46875', '52701', '25'), +('16', '113', '14', '46925', '51684', '25'), +('16', '113', '11', '85213', '246870', '25'), +('16', '113', '11', '133816', '211548', '25'), +('16', '113', '11', '111338', '167341', '25'), +('16', '113', '11', '111333', '165852', '25'), +('16', '114', '22', '12425', '0', '25'), +('16', '114', '22', '21807', '0', '25'), +('16', '114', '22', '39342', '0', '25'), +('16', '114', '22', '7867', '0', '25'), +('16', '114', '1', '98769', '277200', '25'), +('16', '114', '1', '111303', '167308', '25'), +('16', '114', '1', '111308', '166920', '25'), +('16', '114', '1', '111300', '165876', '25'), +('16', '114', '2', '94056', '107124', '25'), +('16', '114', '2', '62985', '105498', '25'), +('16', '114', '2', '104410', '87239', '25'), +('16', '114', '2', '54846', '67476', '25'), +('16', '114', '3', '111315', '166164', '25'), +('16', '114', '3', '111313', '165886', '25'), +('16', '114', '3', '111316', '162908', '25'), +('16', '114', '3', '111014', '146249', '25'), +('16', '114', '5', '111318', '165407', '25'), +('16', '114', '5', '111320', '165013', '25'), +('16', '114', '5', '111319', '161974', '25'), +('16', '114', '5', '111017', '145569', '25'), +('16', '114', '8', '111331', '168521', '25'), +('16', '114', '8', '111328', '167189', '25'), +('16', '114', '8', '111332', '162948', '25'), +('16', '114', '8', '111030', '148656', '25'), +('16', '114', '6', '111322', '166063', '25'), +('16', '114', '6', '111324', '165883', '25'), +('16', '114', '6', '111326', '162038', '25'), +('16', '114', '6', '111021', '146198', '25'), +('16', '114', '17', '56046', '112181', '25'), +('16', '114', '17', '81765', '110322', '25'), +('16', '114', '17', '56083', '110103', '25'), +('16', '114', '17', '104413', '93292', '25'), +('16', '114', '7', '94053', '108235', '25'), +('16', '114', '7', '56079', '106764', '25'), +('16', '114', '7', '104411', '91787', '25'), +('16', '114', '7', '54850', '67359', '25'); +INSERT INTO `tool_gearup_armor_sets` (`class`, `level`, `slot`, `item_id`, `score`, `expansion`) VALUES +('16', '114', '9', '67098', '169815', '25'), +('16', '114', '9', '56031', '103854', '25'), +('16', '114', '9', '56033', '103853', '25'), +('16', '114', '9', '56070', '103566', '25'), +('16', '114', '15', '111343', '167705', '25'), +('16', '114', '15', '111347', '166820', '25'), +('16', '114', '15', '111345', '164902', '25'), +('16', '114', '15', '111339', '163907', '25'), +('16', '114', '20', '111354', '179515', '25'), +('16', '114', '20', '111355', '176215', '25'), +('16', '114', '20', '111351', '174299', '25'), +('16', '114', '20', '111352', '172507', '25'), +('16', '114', '12', '81795', '104266', '25'), +('16', '114', '12', '56073', '104126', '25'), +('16', '114', '12', '104408', '87987', '25'), +('16', '114', '12', '49656', '66082', '25'), +('16', '114', '18', '62986', '108634', '25'), +('16', '114', '18', '56041', '107447', '25'), +('16', '114', '18', '94054', '105871', '25'), +('16', '114', '18', '104412', '93587', '25'), +('16', '114', '19', '62904', '144210', '25'), +('16', '114', '19', '62990', '108073', '25'), +('16', '114', '19', '56037', '107019', '25'), +('16', '114', '19', '56075', '105328', '25'), +('16', '114', '13', '111514', '727951', '25'), +('16', '114', '13', '111520', '718347', '25'), +('16', '114', '13', '111525', '714135', '25'), +('16', '114', '13', '111220', '675703', '25'), +('16', '114', '14', '62980', '111223', '25'), +('16', '114', '14', '54901', '68290', '25'), +('16', '114', '14', '46875', '52706', '25'), +('16', '114', '14', '46925', '51689', '25'), +('16', '114', '11', '85213', '246873', '25'), +('16', '114', '11', '133816', '211552', '25'), +('16', '114', '11', '111338', '167345', '25'), +('16', '114', '11', '111333', '165855', '25'), +('16', '115', '22', '12425', '0', '26'), +('16', '115', '22', '21807', '0', '26'), +('16', '115', '22', '39342', '0', '26'), +('16', '115', '22', '7867', '0', '26'), +('16', '115', '1', '98769', '277203', '26'), +('16', '115', '1', '111303', '167313', '26'), +('16', '115', '1', '111308', '166924', '26'), +('16', '115', '1', '111300', '165879', '26'), +('16', '115', '2', '94056', '107128', '26'), +('16', '115', '2', '62985', '105501', '26'), +('16', '115', '2', '104410', '87242', '26'), +('16', '115', '2', '54846', '67479', '26'), +('16', '115', '3', '111315', '166170', '26'), +('16', '115', '3', '111313', '165889', '26'), +('16', '115', '3', '111316', '162912', '26'), +('16', '115', '3', '111014', '146255', '26'), +('16', '115', '5', '111318', '165410', '26'), +('16', '115', '5', '111320', '165017', '26'), +('16', '115', '5', '111319', '161979', '26'), +('16', '115', '5', '111017', '145572', '26'), +('16', '115', '8', '111331', '168526', '26'), +('16', '115', '8', '111328', '167194', '26'), +('16', '115', '8', '111332', '162951', '26'), +('16', '115', '8', '111030', '148661', '26'), +('16', '115', '6', '111322', '166066', '26'), +('16', '115', '6', '111324', '165887', '26'), +('16', '115', '6', '111326', '162041', '26'), +('16', '115', '6', '111021', '146201', '26'), +('16', '115', '17', '56046', '112187', '26'), +('16', '115', '17', '81765', '110325', '26'), +('16', '115', '17', '56083', '110106', '26'), +('16', '115', '17', '104413', '93297', '26'), +('16', '115', '7', '94053', '108239', '26'), +('16', '115', '7', '56079', '106769', '26'), +('16', '115', '7', '104411', '91791', '26'), +('16', '115', '7', '54850', '67360', '26'), +('16', '115', '9', '67098', '169818', '26'), +('16', '115', '9', '56031', '103857', '26'), +('16', '115', '9', '56033', '103856', '26'), +('16', '115', '9', '56070', '103568', '26'), +('16', '115', '15', '111343', '167708', '26'), +('16', '115', '15', '111347', '166825', '26'), +('16', '115', '15', '111345', '164905', '26'), +('16', '115', '15', '111339', '163910', '26'), +('16', '115', '20', '111354', '179519', '26'), +('16', '115', '20', '111355', '176217', '26'), +('16', '115', '20', '111351', '174302', '26'), +('16', '115', '20', '111352', '172511', '26'), +('16', '115', '12', '81795', '104271', '26'), +('16', '115', '12', '56073', '104132', '26'), +('16', '115', '12', '104408', '87991', '26'), +('16', '115', '12', '49656', '66083', '26'), +('16', '115', '18', '62986', '108640', '26'), +('16', '115', '18', '56041', '107449', '26'), +('16', '115', '18', '94054', '105875', '26'), +('16', '115', '18', '104412', '93589', '26'), +('16', '115', '19', '62904', '144214', '26'), +('16', '115', '19', '62990', '108077', '26'), +('16', '115', '19', '56037', '107023', '26'), +('16', '115', '19', '56075', '105332', '26'), +('16', '115', '13', '111514', '729318', '26'), +('16', '115', '13', '111520', '719713', '26'), +('16', '115', '13', '111525', '715452', '26'), +('16', '115', '13', '111220', '677020', '26'), +('16', '115', '14', '62980', '111226', '26'), +('16', '115', '14', '54901', '68293', '26'), +('16', '115', '14', '46875', '52711', '26'), +('16', '115', '14', '46925', '51693', '26'), +('16', '115', '11', '85213', '246876', '26'), +('16', '115', '11', '133816', '211555', '26'), +('16', '115', '11', '111338', '167350', '26'), +('16', '115', '11', '111333', '165859', '26'); diff --git a/zone/command.cpp b/zone/command.cpp index 5a01f6a92..8ee74854b 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -72,6 +72,7 @@ #include "fastmath.h" #include "mob_movement_manager.h" #include "npc_scale_manager.h" +#include "../common/content/world_content_service.h" extern QueryServ* QServ; extern WorldServer worldserver; @@ -218,6 +219,7 @@ int command_init(void) command_add("fov", "- Check wether you're behind or in your target's field of view", 80, command_fov) || command_add("freeze", "- Freeze your target", 80, command_freeze) || command_add("gassign", "[id] - Assign targetted NPC to predefined wandering grid id", 100, command_gassign) || + command_add("gearup", "Developer tool to quickly equip a character", 200, command_gearup) || command_add("gender", "[0/1/2] - Change your or your target's gender to male/female/neuter", 50, command_gender) || command_add("getplayerburiedcorpsecount", "- Get the target's total number of buried player corpses.", 100, command_getplayerburiedcorpsecount) || command_add("getvariable", "[varname] - Get the value of a variable from the database", 200, command_getvariable) || @@ -2887,6 +2889,119 @@ void command_race(Client *c, const Seperator *sep) } } +void command_gearup(Client *c, const Seperator *sep) +{ + std::string tool_table_name = "tool_gearup_armor_sets"; + + if (!database.DoesTableExist(tool_table_name)) { + c->Message( + Chat::Red, + fmt::format( + "Table [{}] does not exist, please source in the optional SQL required for this tool", + tool_table_name + ).c_str() + ); + return; + } + + std::string expansion_arg = sep->arg[1]; + std::string expansion_filter; + if (expansion_arg.length() > 0) { + expansion_filter = fmt::format("and `expansion` = {}", expansion_arg); + } + + auto results = database.QueryDatabase( + fmt::format( + SQL ( + select + item_id, + slot + from + {} + where + `class` = {} + and `level` = {} + {} + order by score desc, expansion desc + ), + tool_table_name, + c->GetClass(), + c->GetLevel(), + expansion_filter + ) + ); + + std::set equipped; + for (auto row = results.begin(); row != results.end(); ++row) { + int item_id = atoi(row[0]); + int slot_id = atoi(row[1]); + + if (equipped.find(slot_id) != equipped.end()) { + if (slot_id == EQ::invslot::slotEar1) { + slot_id = EQ::invslot::slotEar2; + } + if (slot_id == EQ::invslot::slotFinger1) { + slot_id = EQ::invslot::slotFinger2; + } + if (slot_id == EQ::invslot::slotWrist1) { + slot_id = EQ::invslot::slotWrist2; + } + } + + if (equipped.find(slot_id) == equipped.end()) { + if (c->CastToMob()->CanClassEquipItem(item_id)) { + equipped.insert(slot_id); + c->SummonItem( + item_id, + 0, 0, 0, 0, 0, 0, 0, 0, + slot_id + ); + } + } + } + + if (expansion_arg.empty()) { + results = database.QueryDatabase( + fmt::format( + SQL ( + select + expansion + from + {} + where + class = {} + and level = {} + group by + expansion; + ), + tool_table_name, + c->GetClass(), + c->GetLevel() + ) + ); + + c->Message(Chat::White, "Choose armor from a specific era"); + std::string message; + for (auto row = results.begin(); row != results.end(); ++row) { + int expansion = atoi(row[0]); + message += "[" + EQ::SayLinkEngine::GenerateQuestSaylink( + fmt::format("#gearup {}", expansion), + false, + Expansion::ExpansionName[expansion] + ) + "] "; + + if (message.length() > 2000) { + c->Message(Chat::White, message.c_str()); + message = ""; + } + } + if (message.length() > 0) { + c->Message(Chat::White, message.c_str()); + } + } + +} + void command_gender(Client *c, const Seperator *sep) { Mob *t=c->CastToMob(); diff --git a/zone/command.h b/zone/command.h index f2f22fbcf..36f84d934 100644 --- a/zone/command.h +++ b/zone/command.h @@ -113,6 +113,7 @@ void command_flymode(Client *c, const Seperator *sep); void command_fov(Client *c, const Seperator *sep); void command_freeze(Client *c, const Seperator *sep); void command_gassign(Client *c, const Seperator *sep); +void command_gearup(Client *c, const Seperator *sep); void command_gender(Client *c, const Seperator *sep); void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep); void command_getvariable(Client *c, const Seperator *sep); From ff7c3aff92e34fec3064f5337a973368238a8b61 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 3 Aug 2020 23:14:39 -0400 Subject: [PATCH 240/272] Custom changes. --- common/classes.cpp | 14 ++++++++++++++ common/classes.h | 1 + common/ruletypes.h | 6 ++++++ world/clientlist.cpp | 34 ++++++++++++++++++---------------- zone/attack.cpp | 12 ++++++++++-- zone/client.cpp | 16 +++++++++++++++- zone/effects.cpp | 32 ++++++++++++++++++++++++++++++++ zone/embparser_api.cpp | 18 ++++++++++++++++++ zone/lua_general.cpp | 10 ++++++++++ zone/mob.cpp | 8 ++++++++ zone/questmgr.cpp | 34 ++++++++++++++++++++++++++++++++++ zone/questmgr.h | 1 + zone/special_attacks.cpp | 8 ++++++++ zone/spell_effects.cpp | 16 +++++++++++++++- 14 files changed, 190 insertions(+), 20 deletions(-) diff --git a/common/classes.cpp b/common/classes.cpp index 3aaeeded3..61a379cb7 100644 --- a/common/classes.cpp +++ b/common/classes.cpp @@ -378,6 +378,8 @@ const char *GetClassIDName(uint8 class_id, uint8 level) return "Berserker Guildmaster"; case MERCHANT: return "Merchant"; + case DISCORD_MERCHANT: + return "Discord Merchant"; case ADVENTURERECRUITER: return "Adventure Recruiter"; case ADVENTUREMERCHANT: @@ -388,6 +390,18 @@ const char *GetClassIDName(uint8 class_id, uint8 level) return "Tribute Master"; case GUILD_TRIBUTE_MASTER: return "Guild Tribute Master"; + case GUILD_BANKER: + return "Guild Banker"; + case NORRATHS_KEEPERS_MERCHANT: + return "Radiant Crystal Merchant"; + case DARK_REIGN_MERCHANT: + return "Radiant Crystal Merchant"; + case FELLOWSHIP_MASTER: + return "Fellowship Master"; + case ALT_CURRENCY_MERCHANT: + return "Alternate Currency Merchant"; + case MERCERNARY_MASTER: + return "Mercenary Liaison"; default: return "Unknown"; } diff --git a/common/classes.h b/common/classes.h index f63758937..a35014d94 100644 --- a/common/classes.h +++ b/common/classes.h @@ -61,6 +61,7 @@ #define CORPSE_CLASS 62 // only seen on Danvi's Corpse in Akheva so far.. #define TRIBUTE_MASTER 63 #define GUILD_TRIBUTE_MASTER 64 // not sure +#define GUILD_BANKER 66 #define NORRATHS_KEEPERS_MERCHANT 67 #define DARK_REIGN_MERCHANT 68 #define FELLOWSHIP_MASTER 69 diff --git a/common/ruletypes.h b/common/ruletypes.h index bf61585f7..31944b77c 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -497,6 +497,12 @@ RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind") RULE_BOOL(Combat, UseNPCDamageClassLevelMods, true, "Uses GetClassLevelDamageMod calc in npc_scale_manager") RULE_BOOL(Combat, UseExtendedPoisonProcs, false, "Allow old school poisons to last until characrer zones, at a lower proc rate") +RULE_BOOL(Combat, CustomScaling, false, "Use Custom Scaling.") +RULE_REAL(Combat, CustomScalingMeleeMitigation, 2500.0, "Custom Melee Mitigation Scaling (AGI / VALUE)") +RULE_REAL(Combat, CustomScalingMeleeDamage, 100.0, "Custom Melee Damage Scaling (STR / VALUE)") +RULE_REAL(Combat, CustomScalingSkillDamage, 100.0, "Custom Skill Damage Scaling (DEX / VALUE)") +RULE_REAL(Combat, CustomScalingSpellDamage, 100.0, "Custom Spell Damage Scaling (INT / VALUE)") +RULE_REAL(Combat, CustomScalingSpellHealing, 100.0, "Custom Spell Healing Scaling (WIS / VALUE)") RULE_CATEGORY_END() RULE_CATEGORY(NPC) diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 92a02b6ec..941e810f9 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -605,35 +605,37 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S continue; } else if (cle->GetGM()) { if (cle->Admin() >=250) - rankstring=5021; + rankstring = 5021; else if (cle->Admin() >= 200) - rankstring=5020; + rankstring = 5020; else if (cle->Admin() >= 180) - rankstring=5019; + rankstring = 5019; else if (cle->Admin() >= 170) - rankstring=5018; + rankstring = 5018; else if (cle->Admin() >= 160) - rankstring=5017; + rankstring = 5017; else if (cle->Admin() >= 150) - rankstring=5016; + rankstring = 5016; else if (cle->Admin() >= 100) - rankstring=5015; + rankstring = 5015; else if (cle->Admin() >= 95) - rankstring=5014; + rankstring = 5014; else if (cle->Admin() >= 90) - rankstring=5013; + rankstring = 5013; else if (cle->Admin() >= 85) - rankstring=5012; + rankstring = 5012; else if (cle->Admin() >= 81) - rankstring=5011; + rankstring = 5011; else if (cle->Admin() >= 80) - rankstring=5010; + rankstring = 5010; else if (cle->Admin() >= 50) - rankstring=5009; + rankstring = 5009; else if (cle->Admin() >= 20) - rankstring=5008; - else if (cle->Admin() >= 10) - rankstring=5007; + rankstring = 5008; + } + + if (cle->Admin() == 1) { + rankstring = 5007; } idx++; char guildbuffer[67]={0}; diff --git a/zone/attack.cpp b/zone/attack.cpp index 39fceb568..e9aad208b 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -87,7 +87,7 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea break; case EQ::item::ItemType2HBlunt: // 2H Blunt skillinuse = EQ::skills::Skill2HBlunt; - type = anim2HSlashing; //anim2HWeapon + type = anim2HWeapon; //anim2HWeapon break; case EQ::item::ItemType2HPiercing: // 2H Piercing if (IsClient() && CastToClient()->ClientVersion() < EQ::versions::ClientVersion::RoF2) @@ -121,7 +121,7 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea type = anim1HWeapon; break; case EQ::skills::Skill2HBlunt: // 2H Blunt - type = anim2HSlashing; //anim2HWeapon + type = anim2HWeapon; //anim2HWeapon break; case EQ::skills::Skill2HPiercing: // 2H Piercing type = anim2HWeapon; @@ -1531,6 +1531,14 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b SpellFinished(aabonuses.SkillAttackProc[2], other, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } + + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.STR; + float melee_damage_scale = RuleR(Combat, CustomScalingMeleeDamage); + if (scale_value > int(melee_damage_scale)) { + my_hit.damage_done = int(static_cast(my_hit.damage_done) * static_cast(scale_value / melee_damage_scale)); + } + } other->Damage(this, my_hit.damage_done, SPELL_UNKNOWN, my_hit.skill, true, -1, false, m_specialattacks); if (IsDead()) return false; diff --git a/zone/client.cpp b/zone/client.cpp index 7b03fa4cb..89cad3c92 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -1034,7 +1034,21 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s return; } } - + uint8 admin_level = Admin(); + char *custom_rank = ( + admin_level ? + ( + admin_level == 1 ? + "[Donator] " : + ( + admin_level == 255 ? + "[Admin] " : + "" + ) + ) : + "" + ); + strn0cpy(message, strcat(custom_rank, message), 4096); if (!worldserver.SendChannelMessage(this, 0, chan_num, 0, language, lang_skill, message)) { Message(0, "Error: World server disconnected"); diff --git a/zone/effects.cpp b/zone/effects.cpp index 67ad52314..beedcd647 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -159,6 +159,14 @@ int32 Mob::GetActSpellDamage(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetSpellScale()) value = int(static_cast(value) * CastToNPC()->GetSpellScale() / 100.0f); + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.INT; + float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); + if (scale_value > int(spell_damage_scale)) { + value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); + } + } + return value; } @@ -228,6 +236,14 @@ int32 Mob::GetActDoTDamage(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetSpellScale()) value = int(static_cast(value) * CastToNPC()->GetSpellScale() / 100.0f); + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.INT; + float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); + if (scale_value > spell_damage_scale) { + value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); + } + } + return value; } @@ -315,6 +331,14 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) { MessageString(Chat::SpellCrit, YOU_CRIT_HEAL, itoa(value)); } + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.WIS; + float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); + if (scale_value > int(spell_damage_scale)) { + value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); + } + } + return value; } @@ -335,6 +359,14 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetHealScale()) value = int(static_cast(value) * CastToNPC()->GetHealScale() / 100.0f); + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.WIS; + float spell_healing_scale = RuleR(Combat, CustomScalingSpellHealing); + if (scale_value > int(spell_healing_scale)) { + value = int(static_cast(value) * static_cast(scale_value / spell_healing_scale)); + } + } + return value; } diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index ae5a79f10..bcf503aac 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -2912,6 +2912,23 @@ XS(XS__countitem) { XSRETURN_IV(quantity); } +XS(XS__removeitem); +XS(XS__removeitem) { + dXSARGS; + if (items < 1 || items > 2) + Perl_croak(aTHX_ "Usage: quest::removeitem(int item_id, [int quantity = 1])"); + + uint32 item_id = (int) SvIV(ST(0)); + uint32 quantity = 1; + if (items > 1) { + quantity = (int) SvIV(ST(1)); + } + + quest_manager.removeitem(item_id, quantity); + + XSRETURN_EMPTY; +} + XS(XS__getitemname); XS(XS__getitemname) { dXSARGS; @@ -5620,6 +5637,7 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "rain"), XS__rain, file); newXS(strcpy(buf, "rebind"), XS__rebind, file); newXS(strcpy(buf, "reloadzonestaticdata"), XS__reloadzonestaticdata, file); + newXS(strcpy(buf, "removeitem"), XS__removeitem, file); newXS(strcpy(buf, "removetitle"), XS__removetitle, file); newXS(strcpy(buf, "repopzone"), XS__repopzone, file); newXS(strcpy(buf, "resettaskactivity"), XS__resettaskactivity, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 5ad1b2266..564f14df3 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -801,6 +801,14 @@ int lua_count_item(uint32 item_id) { return quest_manager.countitem(item_id); } +void lua_remove_item(uint32 item_id) { + quest_manager.removeitem(item_id); +} + +void lua_remove_item(uint32 item_id, uint32 quantity) { + quest_manager.removeitem(item_id, quantity); +} + void lua_update_spawn_timer(uint32 id, uint32 new_time) { quest_manager.UpdateSpawnTimer(id, new_time); } @@ -2253,6 +2261,8 @@ luabind::scope lua_register_general() { luabind::def("modify_npc_stat", &lua_modify_npc_stat), luabind::def("collect_items", &lua_collect_items), luabind::def("count_item", &lua_count_item), + luabind::def("remove_item", (void(*)(uint32))&lua_remove_item), + luabind::def("remove_item", (void(*)(uint32,uint32))&lua_remove_item), luabind::def("update_spawn_timer", &lua_update_spawn_timer), luabind::def("merchant_set_item", (void(*)(uint32,uint32))&lua_merchant_set_item), luabind::def("merchant_set_item", (void(*)(uint32,uint32,uint32))&lua_merchant_set_item), diff --git a/zone/mob.cpp b/zone/mob.cpp index 63eb351cb..73890b17f 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -5677,6 +5677,14 @@ int32 Mob::GetMeleeMitigation() { mitigation += spellbonuses.MeleeMitigationEffect; mitigation += itembonuses.MeleeMitigationEffect; mitigation += aabonuses.MeleeMitigationEffect; + + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.AGI; + float melee_mitigation_scale = RuleR(Combat, CustomScalingMeleeMitigation); + if (scale_value > int(melee_mitigation_scale)) { + mitigation = int(static_cast(mitigation) + static_cast(scale_value / melee_mitigation_scale)); + } + } return mitigation; } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 9daf2d351..0475b0b45 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2719,6 +2719,40 @@ int QuestManager::countitem(uint32 item_id) { return quantity; } +void QuestManager::removeitem(uint32 item_id, uint32 quantity) { + QuestManagerCurrentQuestVars(); + EQ::ItemInstance *item = nullptr; + static const int16 slots[][2] = { + { EQ::invslot::POSSESSIONS_BEGIN, EQ::invslot::POSSESSIONS_END }, + { EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END }, + { EQ::invbag::CURSOR_BAG_BEGIN, EQ::invbag::CURSOR_BAG_END}, + { EQ::invslot::BANK_BEGIN, EQ::invslot::BANK_END }, + { EQ::invbag::BANK_BAGS_BEGIN, EQ::invbag::BANK_BAGS_END }, + { EQ::invslot::SHARED_BANK_BEGIN, EQ::invslot::SHARED_BANK_END }, + { EQ::invbag::SHARED_BANK_BAGS_BEGIN, EQ::invbag::SHARED_BANK_BAGS_END }, + }; + int removed_count = 0; + const size_t size = sizeof(slots) / sizeof(slots[0]); + for (int slot_index = 0; slot_index < size; ++slot_index) { + for (int slot_id = slots[slot_index][0]; slot_id <= slots[slot_index][1]; ++slot_id) { + item = initiator->GetInv().GetItem(slot_id); + if (item && item->GetID() == item_id) { + int stack_size = item->IsStackable() ? item->GetCharges() : 1; + if ((removed_count + stack_size) <= quantity) { + removed_count += stack_size; + initiator->DeleteItemInInventory(slot_id, stack_size, true); + } else { + int amount_left = (quantity - removed_count); + if (amount_left > 0 && stack_size >= amount_left) { + removed_count += amount_left; + initiator->DeleteItemInInventory(slot_id, amount_left, true); + } + } + } + } + } +} + void QuestManager::UpdateSpawnTimer(uint32 id, uint32 newTime) { bool found = false; diff --git a/zone/questmgr.h b/zone/questmgr.h index 8e9d84cf9..e9ca67b17 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -226,6 +226,7 @@ public: int collectitems(uint32 item_id, bool remove); int collectitems_processSlot(int16 slot_id, uint32 item_id, bool remove); int countitem(uint32 item_id); + void removeitem(uint32 item_id, uint32 quantity = 1); std::string getitemname(uint32 item_id); void enabletitle(int titleset); bool checktitle(int titlecheck); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 717bc4fbf..6aa740f3a 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -200,6 +200,14 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas SpellFinished(aabonuses.SkillAttackProc[2], who, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } + + if (RuleB(Combat, CustomScaling) && IsClient()) { + int scale_value = itembonuses.DEX; + float skill_damage_scale = RuleR(Combat, CustomScalingSkillDamage); + if (scale_value > int(skill_damage_scale)) { + my_hit.damage_done = int(static_cast(my_hit.damage_done) * static_cast(scale_value / skill_damage_scale)); + } + } who->Damage(this, my_hit.damage_done, SPELL_UNKNOWN, skill, false); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 2eb17eb29..20ba55770 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2408,7 +2408,13 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove //need a bard version of this prolly... //if(caster) // dmg = caster->GetActSpellDamage(spell_id, dmg); - + if (RuleB(Combat, CustomScaling) && caster && caster->IsClient()) { + int scale_value = caster->GetItemBonuses().INT; + float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); + if (scale_value > int(spell_damage_scale)) { + dmg = int(static_cast(dmg) * static_cast(scale_value / spell_damage_scale)); + } + } dmg = -dmg; Damage(caster, dmg, spell_id, spell.skill, false, buffslot, false); } else if(dmg > 0) { @@ -3575,6 +3581,14 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) if ((!RuleB(Spells, PreNerfBardAEDoT) && IsMoving()) || invulnerable || /*effect_value > 0 ||*/ DivineAura()) break; + + if (RuleB(Combat, CustomScaling) && caster && caster->IsClient()) { + int scale_value = caster->GetItemBonuses().INT; + float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); + if (scale_value > int(spell_damage_scale)) { + effect_value = int(static_cast(effect_value) * static_cast(scale_value / spell_damage_scale)); + } + } if (effect_value < 0) { effect_value = -effect_value; From bda13383ef2d95ea14b7374e0936655f246f5cea Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 3 Aug 2020 22:21:51 -0500 Subject: [PATCH 241/272] Revert "Merge pull request #1101 from KinglyKrab/custom" This reverts commit 43108acae1ef5eb5d127226c3fc0659dbdc10b9d, reversing changes made to daa1db65b92cb9403c48071a044cb62b458c9afd. --- common/classes.cpp | 14 -------------- common/classes.h | 1 - common/ruletypes.h | 6 ------ world/clientlist.cpp | 34 ++++++++++++++++------------------ zone/attack.cpp | 12 ++---------- zone/client.cpp | 16 +--------------- zone/effects.cpp | 32 -------------------------------- zone/embparser_api.cpp | 18 ------------------ zone/lua_general.cpp | 10 ---------- zone/mob.cpp | 8 -------- zone/questmgr.cpp | 34 ---------------------------------- zone/questmgr.h | 1 - zone/special_attacks.cpp | 8 -------- zone/spell_effects.cpp | 16 +--------------- 14 files changed, 20 insertions(+), 190 deletions(-) diff --git a/common/classes.cpp b/common/classes.cpp index 61a379cb7..3aaeeded3 100644 --- a/common/classes.cpp +++ b/common/classes.cpp @@ -378,8 +378,6 @@ const char *GetClassIDName(uint8 class_id, uint8 level) return "Berserker Guildmaster"; case MERCHANT: return "Merchant"; - case DISCORD_MERCHANT: - return "Discord Merchant"; case ADVENTURERECRUITER: return "Adventure Recruiter"; case ADVENTUREMERCHANT: @@ -390,18 +388,6 @@ const char *GetClassIDName(uint8 class_id, uint8 level) return "Tribute Master"; case GUILD_TRIBUTE_MASTER: return "Guild Tribute Master"; - case GUILD_BANKER: - return "Guild Banker"; - case NORRATHS_KEEPERS_MERCHANT: - return "Radiant Crystal Merchant"; - case DARK_REIGN_MERCHANT: - return "Radiant Crystal Merchant"; - case FELLOWSHIP_MASTER: - return "Fellowship Master"; - case ALT_CURRENCY_MERCHANT: - return "Alternate Currency Merchant"; - case MERCERNARY_MASTER: - return "Mercenary Liaison"; default: return "Unknown"; } diff --git a/common/classes.h b/common/classes.h index a35014d94..f63758937 100644 --- a/common/classes.h +++ b/common/classes.h @@ -61,7 +61,6 @@ #define CORPSE_CLASS 62 // only seen on Danvi's Corpse in Akheva so far.. #define TRIBUTE_MASTER 63 #define GUILD_TRIBUTE_MASTER 64 // not sure -#define GUILD_BANKER 66 #define NORRATHS_KEEPERS_MERCHANT 67 #define DARK_REIGN_MERCHANT 68 #define FELLOWSHIP_MASTER 69 diff --git a/common/ruletypes.h b/common/ruletypes.h index 439e4ba97..594bcd85e 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -497,12 +497,6 @@ RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind") RULE_BOOL(Combat, UseNPCDamageClassLevelMods, true, "Uses GetClassLevelDamageMod calc in npc_scale_manager") RULE_BOOL(Combat, UseExtendedPoisonProcs, false, "Allow old school poisons to last until characrer zones, at a lower proc rate") -RULE_BOOL(Combat, CustomScaling, false, "Use Custom Scaling.") -RULE_REAL(Combat, CustomScalingMeleeMitigation, 2500.0, "Custom Melee Mitigation Scaling (AGI / VALUE)") -RULE_REAL(Combat, CustomScalingMeleeDamage, 100.0, "Custom Melee Damage Scaling (STR / VALUE)") -RULE_REAL(Combat, CustomScalingSkillDamage, 100.0, "Custom Skill Damage Scaling (DEX / VALUE)") -RULE_REAL(Combat, CustomScalingSpellDamage, 100.0, "Custom Spell Damage Scaling (INT / VALUE)") -RULE_REAL(Combat, CustomScalingSpellHealing, 100.0, "Custom Spell Healing Scaling (WIS / VALUE)") RULE_CATEGORY_END() RULE_CATEGORY(NPC) diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 64879c15c..0149b3b9f 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -606,37 +606,35 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S continue; } else if (cle->GetGM()) { if (cle->Admin() >=250) - rankstring = 5021; + rankstring=5021; else if (cle->Admin() >= 200) - rankstring = 5020; + rankstring=5020; else if (cle->Admin() >= 180) - rankstring = 5019; + rankstring=5019; else if (cle->Admin() >= 170) - rankstring = 5018; + rankstring=5018; else if (cle->Admin() >= 160) - rankstring = 5017; + rankstring=5017; else if (cle->Admin() >= 150) - rankstring = 5016; + rankstring=5016; else if (cle->Admin() >= 100) - rankstring = 5015; + rankstring=5015; else if (cle->Admin() >= 95) - rankstring = 5014; + rankstring=5014; else if (cle->Admin() >= 90) - rankstring = 5013; + rankstring=5013; else if (cle->Admin() >= 85) - rankstring = 5012; + rankstring=5012; else if (cle->Admin() >= 81) - rankstring = 5011; + rankstring=5011; else if (cle->Admin() >= 80) - rankstring = 5010; + rankstring=5010; else if (cle->Admin() >= 50) - rankstring = 5009; + rankstring=5009; else if (cle->Admin() >= 20) - rankstring = 5008; - } - - if (cle->Admin() == 1) { - rankstring = 5007; + rankstring=5008; + else if (cle->Admin() >= 10) + rankstring=5007; } idx++; char guildbuffer[67]={0}; diff --git a/zone/attack.cpp b/zone/attack.cpp index b4f4bd353..88dbc7bd4 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -87,7 +87,7 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea break; case EQ::item::ItemType2HBlunt: // 2H Blunt skillinuse = EQ::skills::Skill2HBlunt; - type = anim2HWeapon; //anim2HWeapon + type = anim2HSlashing; //anim2HWeapon break; case EQ::item::ItemType2HPiercing: // 2H Piercing if (IsClient() && CastToClient()->ClientVersion() < EQ::versions::ClientVersion::RoF2) @@ -121,7 +121,7 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea type = anim1HWeapon; break; case EQ::skills::Skill2HBlunt: // 2H Blunt - type = anim2HWeapon; //anim2HWeapon + type = anim2HSlashing; //anim2HWeapon break; case EQ::skills::Skill2HPiercing: // 2H Piercing type = anim2HWeapon; @@ -1532,14 +1532,6 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b SpellFinished(aabonuses.SkillAttackProc[2], other, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } - - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.STR; - float melee_damage_scale = RuleR(Combat, CustomScalingMeleeDamage); - if (scale_value > int(melee_damage_scale)) { - my_hit.damage_done = int(static_cast(my_hit.damage_done) * static_cast(scale_value / melee_damage_scale)); - } - } other->Damage(this, my_hit.damage_done, SPELL_UNKNOWN, my_hit.skill, true, -1, false, m_specialattacks); if (IsDead()) return false; diff --git a/zone/client.cpp b/zone/client.cpp index 26544160a..406382662 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -1035,21 +1035,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s return; } } - uint8 admin_level = Admin(); - char *custom_rank = ( - admin_level ? - ( - admin_level == 1 ? - "[Donator] " : - ( - admin_level == 255 ? - "[Admin] " : - "" - ) - ) : - "" - ); - strn0cpy(message, strcat(custom_rank, message), 4096); + if (!worldserver.SendChannelMessage(this, 0, chan_num, 0, language, lang_skill, message)) { Message(0, "Error: World server disconnected"); diff --git a/zone/effects.cpp b/zone/effects.cpp index 5a41fdb5a..c2a20cf71 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -160,14 +160,6 @@ int32 Mob::GetActSpellDamage(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetSpellScale()) value = int(static_cast(value) * CastToNPC()->GetSpellScale() / 100.0f); - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.INT; - float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); - if (scale_value > int(spell_damage_scale)) { - value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); - } - } - return value; } @@ -237,14 +229,6 @@ int32 Mob::GetActDoTDamage(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetSpellScale()) value = int(static_cast(value) * CastToNPC()->GetSpellScale() / 100.0f); - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.INT; - float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); - if (scale_value > spell_damage_scale) { - value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); - } - } - return value; } @@ -332,14 +316,6 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) { MessageString(Chat::SpellCrit, YOU_CRIT_HEAL, itoa(value)); } - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.WIS; - float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); - if (scale_value > int(spell_damage_scale)) { - value = int(static_cast(value) * static_cast(scale_value / spell_damage_scale)); - } - } - return value; } @@ -360,14 +336,6 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) { if (IsNPC() && CastToNPC()->GetHealScale()) value = int(static_cast(value) * CastToNPC()->GetHealScale() / 100.0f); - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.WIS; - float spell_healing_scale = RuleR(Combat, CustomScalingSpellHealing); - if (scale_value > int(spell_healing_scale)) { - value = int(static_cast(value) * static_cast(scale_value / spell_healing_scale)); - } - } - return value; } diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 7538897e5..af7b5acf7 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -2913,23 +2913,6 @@ XS(XS__countitem) { XSRETURN_IV(quantity); } -XS(XS__removeitem); -XS(XS__removeitem) { - dXSARGS; - if (items < 1 || items > 2) - Perl_croak(aTHX_ "Usage: quest::removeitem(int item_id, [int quantity = 1])"); - - uint32 item_id = (int) SvIV(ST(0)); - uint32 quantity = 1; - if (items > 1) { - quantity = (int) SvIV(ST(1)); - } - - quest_manager.removeitem(item_id, quantity); - - XSRETURN_EMPTY; -} - XS(XS__getitemname); XS(XS__getitemname) { dXSARGS; @@ -6314,7 +6297,6 @@ EXTERN_C XS(boot_quest) { newXS(strcpy(buf, "rain"), XS__rain, file); newXS(strcpy(buf, "rebind"), XS__rebind, file); newXS(strcpy(buf, "reloadzonestaticdata"), XS__reloadzonestaticdata, file); - newXS(strcpy(buf, "removeitem"), XS__removeitem, file); newXS(strcpy(buf, "removetitle"), XS__removetitle, file); newXS(strcpy(buf, "repopzone"), XS__repopzone, file); newXS(strcpy(buf, "resettaskactivity"), XS__resettaskactivity, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 6312d0030..6f678709e 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -802,14 +802,6 @@ int lua_count_item(uint32 item_id) { return quest_manager.countitem(item_id); } -void lua_remove_item(uint32 item_id) { - quest_manager.removeitem(item_id); -} - -void lua_remove_item(uint32 item_id, uint32 quantity) { - quest_manager.removeitem(item_id, quantity); -} - void lua_update_spawn_timer(uint32 id, uint32 new_time) { quest_manager.UpdateSpawnTimer(id, new_time); } @@ -2490,8 +2482,6 @@ luabind::scope lua_register_general() { luabind::def("modify_npc_stat", &lua_modify_npc_stat), luabind::def("collect_items", &lua_collect_items), luabind::def("count_item", &lua_count_item), - luabind::def("remove_item", (void(*)(uint32))&lua_remove_item), - luabind::def("remove_item", (void(*)(uint32,uint32))&lua_remove_item), luabind::def("update_spawn_timer", &lua_update_spawn_timer), luabind::def("merchant_set_item", (void(*)(uint32,uint32))&lua_merchant_set_item), luabind::def("merchant_set_item", (void(*)(uint32,uint32,uint32))&lua_merchant_set_item), diff --git a/zone/mob.cpp b/zone/mob.cpp index 73890b17f..63eb351cb 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -5677,14 +5677,6 @@ int32 Mob::GetMeleeMitigation() { mitigation += spellbonuses.MeleeMitigationEffect; mitigation += itembonuses.MeleeMitigationEffect; mitigation += aabonuses.MeleeMitigationEffect; - - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.AGI; - float melee_mitigation_scale = RuleR(Combat, CustomScalingMeleeMitigation); - if (scale_value > int(melee_mitigation_scale)) { - mitigation = int(static_cast(mitigation) + static_cast(scale_value / melee_mitigation_scale)); - } - } return mitigation; } diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index e56b8c929..59fd887e2 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -2720,40 +2720,6 @@ int QuestManager::countitem(uint32 item_id) { return quantity; } -void QuestManager::removeitem(uint32 item_id, uint32 quantity) { - QuestManagerCurrentQuestVars(); - EQ::ItemInstance *item = nullptr; - static const int16 slots[][2] = { - { EQ::invslot::POSSESSIONS_BEGIN, EQ::invslot::POSSESSIONS_END }, - { EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END }, - { EQ::invbag::CURSOR_BAG_BEGIN, EQ::invbag::CURSOR_BAG_END}, - { EQ::invslot::BANK_BEGIN, EQ::invslot::BANK_END }, - { EQ::invbag::BANK_BAGS_BEGIN, EQ::invbag::BANK_BAGS_END }, - { EQ::invslot::SHARED_BANK_BEGIN, EQ::invslot::SHARED_BANK_END }, - { EQ::invbag::SHARED_BANK_BAGS_BEGIN, EQ::invbag::SHARED_BANK_BAGS_END }, - }; - int removed_count = 0; - const size_t size = sizeof(slots) / sizeof(slots[0]); - for (int slot_index = 0; slot_index < size; ++slot_index) { - for (int slot_id = slots[slot_index][0]; slot_id <= slots[slot_index][1]; ++slot_id) { - item = initiator->GetInv().GetItem(slot_id); - if (item && item->GetID() == item_id) { - int stack_size = item->IsStackable() ? item->GetCharges() : 1; - if ((removed_count + stack_size) <= quantity) { - removed_count += stack_size; - initiator->DeleteItemInInventory(slot_id, stack_size, true); - } else { - int amount_left = (quantity - removed_count); - if (amount_left > 0 && stack_size >= amount_left) { - removed_count += amount_left; - initiator->DeleteItemInInventory(slot_id, amount_left, true); - } - } - } - } - } -} - void QuestManager::UpdateSpawnTimer(uint32 id, uint32 newTime) { bool found = false; diff --git a/zone/questmgr.h b/zone/questmgr.h index e9ca67b17..8e9d84cf9 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -226,7 +226,6 @@ public: int collectitems(uint32 item_id, bool remove); int collectitems_processSlot(int16 slot_id, uint32 item_id, bool remove); int countitem(uint32 item_id); - void removeitem(uint32 item_id, uint32 quantity = 1); std::string getitemname(uint32 item_id); void enabletitle(int titleset); bool checktitle(int titlecheck); diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index 6aa740f3a..717bc4fbf 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -200,14 +200,6 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas SpellFinished(aabonuses.SkillAttackProc[2], who, EQ::spells::CastingSlot::Item, 0, -1, spells[aabonuses.SkillAttackProc[2]].ResistDiff); } - - if (RuleB(Combat, CustomScaling) && IsClient()) { - int scale_value = itembonuses.DEX; - float skill_damage_scale = RuleR(Combat, CustomScalingSkillDamage); - if (scale_value > int(skill_damage_scale)) { - my_hit.damage_done = int(static_cast(my_hit.damage_done) * static_cast(scale_value / skill_damage_scale)); - } - } who->Damage(this, my_hit.damage_done, SPELL_UNKNOWN, skill, false); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 20ba55770..2eb17eb29 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2408,13 +2408,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove //need a bard version of this prolly... //if(caster) // dmg = caster->GetActSpellDamage(spell_id, dmg); - if (RuleB(Combat, CustomScaling) && caster && caster->IsClient()) { - int scale_value = caster->GetItemBonuses().INT; - float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); - if (scale_value > int(spell_damage_scale)) { - dmg = int(static_cast(dmg) * static_cast(scale_value / spell_damage_scale)); - } - } + dmg = -dmg; Damage(caster, dmg, spell_id, spell.skill, false, buffslot, false); } else if(dmg > 0) { @@ -3581,14 +3575,6 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster) if ((!RuleB(Spells, PreNerfBardAEDoT) && IsMoving()) || invulnerable || /*effect_value > 0 ||*/ DivineAura()) break; - - if (RuleB(Combat, CustomScaling) && caster && caster->IsClient()) { - int scale_value = caster->GetItemBonuses().INT; - float spell_damage_scale = RuleR(Combat, CustomScalingSpellDamage); - if (scale_value > int(spell_damage_scale)) { - effect_value = int(static_cast(effect_value) * static_cast(scale_value / spell_damage_scale)); - } - } if (effect_value < 0) { effect_value = -effect_value; From 3245fa61236ce7574e8a86ad21713ddd6f982df9 Mon Sep 17 00:00:00 2001 From: Trust Date: Sun, 9 Aug 2020 14:04:03 -0400 Subject: [PATCH 242/272] [Combat] AE Ramp now allows Max Melee Range RuleR AERampageSafeZone - Reduce AE Ramp range by this amount to allow for a small safe zone on AE Ramp. --- common/ruletypes.h | 2 ++ zone/aggro.cpp | 31 +++++++++++++++++++++++++------ zone/hate_list.cpp | 7 ++++--- zone/mob.h | 2 +- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 594bcd85e..d31d27e8e 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -391,6 +391,7 @@ RULE_BOOL(Spells, NPCSpellPush, false, "Enable spell push on NPCs") RULE_CATEGORY_END() RULE_CATEGORY(Combat) +RULE_REAL(Combat, AERampageSafeZone, 0.018, "max hit ae ramp reduction range") RULE_INT(Combat, PetBaseCritChance, 0, "Pet base crit chance") RULE_INT(Combat, NPCBashKickLevel, 6, "The level that NPCcan KICK/BASH") RULE_INT(Combat, NPCBashKickStunChance, 15, "Percent chance that a bash/kick will stun") @@ -492,6 +493,7 @@ RULE_INT(Combat, NPCAssistCap, 5, "Maxiumium number of NPCthat will assist anoth RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time a NPC will take to clear assist aggro cap space (milliseconds)") RULE_BOOL(Combat, UseRevampHandToHand, false, "Use h2h revamped dmg/delays I believe this was implemented during SoF") RULE_BOOL(Combat, ClassicMasterWu, false, "Classic master wu uses a random special, modern doesn't") +RULE_REAL(Combat, HitBoxMod, 1.00, "Added to test hit boxes.") RULE_INT(Combat, LevelToStopDamageCaps, 0, "Level to stop damage caps. 1 will effectively disable them, 20 should give basically same results as old incorrect system") RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink control. 1 will effectively disable it, 50 should give basically same results as current system") RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind") diff --git a/zone/aggro.cpp b/zone/aggro.cpp index 0cc2d7691..a3aa301ac 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -800,7 +800,7 @@ bool Mob::IsBeneficialAllowed(Mob *target) return false; } -bool Mob::CombatRange(Mob* other) +bool Mob::CombatRange(Mob* other, float fixed_size_mod, bool aeRampage) { if(!other) return(false); @@ -825,13 +825,25 @@ bool Mob::CombatRange(Mob* other) // this could still use some work, but for now it's an improvement.... - if (size_mod > 29) + if (size_mod > 29) { size_mod *= size_mod; - else if (size_mod > 19) + } else if (size_mod > 19) { size_mod *= size_mod * 2; - else + } else { size_mod *= size_mod * 4; + } + if (other->GetRace() == 184) // Lord Vyemm and other velious dragons + { + size_mod *= 1.75; + } + if (other->GetRace() == 122) // Dracoliche in Fear. Skeletal Dragon + { + size_mod *= 2.25; + } + + size_mod *= RuleR(Combat,HitBoxMod); // used for testing sizemods on different races. + size_mod *= fixed_size_mod; // used to extend the size_mod // prevention of ridiculously sized hit boxes if (size_mod > 10000) @@ -865,6 +877,15 @@ bool Mob::CombatRange(Mob* other) else SetPseudoRoot(false); } + if(aeRampage) { + float multiplyer = GetSize() * RuleR(Combat, AERampageSafeZone); + float ramp_range = (size_mod * multiplyer); + if (_DistNoRoot <= ramp_range) { + return true; + } else { + return false; + } + } if (_DistNoRoot <= size_mod) { @@ -872,13 +893,11 @@ bool Mob::CombatRange(Mob* other) if (flymode != GravityBehavior::Flying && _zDist > 500 && !CheckLastLosState()) { return false; } - return true; } return false; } -//Father Nitwit's LOS code bool Mob::CheckLosFN(Mob *other) { bool Result = false; diff --git a/zone/hate_list.cpp b/zone/hate_list.cpp index 725918762..67d98be22 100644 --- a/zone/hate_list.cpp +++ b/zone/hate_list.cpp @@ -675,10 +675,12 @@ int HateList::AreaRampage(Mob *caster, Mob *target, int count, ExtraAttackOption std::vector id_list; for (auto &h : list) { if (h->entity_on_hatelist && h->entity_on_hatelist != caster && h->entity_on_hatelist != target && - caster->CombatRange(h->entity_on_hatelist)) + caster->CombatRange(h->entity_on_hatelist, 1.0, true)) { id_list.push_back(h->entity_on_hatelist->GetID()); - if (count != -1 && id_list.size() > count) + } + if (count != -1 && id_list.size() > count) { break; + } } for (auto &id : id_list) { @@ -688,7 +690,6 @@ int HateList::AreaRampage(Mob *caster, Mob *target, int count, ExtraAttackOption caster->ProcessAttackRounds(mob, opts); } } - return hit_count; } diff --git a/zone/mob.h b/zone/mob.h index b07f51ceb..6fd040175 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -222,7 +222,7 @@ public: inline int GetMitigationAC() { return mitigation_ac; } void MeleeMitigation(Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr); double RollD20(int offense, int mitigation); // CALL THIS FROM THE DEFENDER - bool CombatRange(Mob* other); + bool CombatRange(Mob* other, float fixed_size_mod = 1.0, bool aeRampage = false); virtual inline bool IsBerserk() { return false; } // only clients void RogueEvade(Mob *other); void CommonOutgoingHitSuccess(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr); From 94d87584aa51f10a98cd775df55849696097e29f Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 16:37:38 -0500 Subject: [PATCH 243/272] Lootdrop level filtering adjustments --- common/eq_packet_structs.h | 26 +- common/eqemu_logsys.h | 4 +- common/eqemu_logsys_log_aliases.h | 10 + common/loottable.h | 16 +- common/shareddb.cpp | 63 +++-- common/version.h | 2 +- utils/sql/db_update_manifest.txt | 1 + .../2020_08_15_lootdrop_level_filtering.sql | 7 + zone/aa.cpp | 2 +- zone/attack.cpp | 2 +- zone/loottables.cpp | 260 +++++++++++------- zone/npc.cpp | 35 ++- zone/npc.h | 22 +- zone/pets.cpp | 4 +- zone/trading.cpp | 16 +- zone/zonedb.h | 2 +- 16 files changed, 300 insertions(+), 172 deletions(-) create mode 100644 utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 0bd59d360..d6e8b0c97 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -5341,18 +5341,20 @@ struct MercenaryMerchantResponse_Struct { struct ServerLootItem_Struct { uint32 item_id; // uint32 item_id; - int16 equip_slot; // int16 equip_slot; - uint16 charges; // uint8 charges; - uint16 lootslot; // uint16 lootslot; - uint32 aug_1; // uint32 aug_1; - uint32 aug_2; // uint32 aug_2; - uint32 aug_3; // uint32 aug_3; - uint32 aug_4; // uint32 aug_4; - uint32 aug_5; // uint32 aug_5; - uint32 aug_6; // uint32 aug_5; - uint8 attuned; - uint8 min_level; - uint8 max_level; + int16 equip_slot; // int16 equip_slot; + uint16 charges; // uint8 charges; + uint16 lootslot; // uint16 lootslot; + uint32 aug_1; // uint32 aug_1; + uint32 aug_2; // uint32 aug_2; + uint32 aug_3; // uint32 aug_3; + uint32 aug_4; // uint32 aug_4; + uint32 aug_5; // uint32 aug_5; + uint32 aug_6; // uint32 aug_5; + uint8 attuned; + uint16 trivial_min_level; + uint16 trivial_max_level; + uint16 npc_min_level; + uint16 npc_max_level; }; //Found in client near a ref to the string: diff --git a/common/eqemu_logsys.h b/common/eqemu_logsys.h index 6c3aca086..80cf9851f 100644 --- a/common/eqemu_logsys.h +++ b/common/eqemu_logsys.h @@ -117,6 +117,7 @@ namespace Logs { HotReload, Merchants, ZonePoints, + Loot, MaxCategoryID /* Don't Remove this */ }; @@ -192,7 +193,8 @@ namespace Logs { "Aura", "HotReload", "Merchants", - "ZonePoints" + "ZonePoints", + "Loot" }; } diff --git a/common/eqemu_logsys_log_aliases.h b/common/eqemu_logsys_log_aliases.h index ceb45c1a7..514f37e21 100644 --- a/common/eqemu_logsys_log_aliases.h +++ b/common/eqemu_logsys_log_aliases.h @@ -591,6 +591,16 @@ OutF(LogSys, Logs::Detail, Logs::ZonePoints, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ } while (0) +#define LogLoot(message, ...) do {\ + if (LogSys.log_settings[Logs::Loot].is_category_enabled == 1)\ + OutF(LogSys, Logs::General, Logs::Loot, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + +#define LogLootDetail(message, ...) do {\ + if (LogSys.log_settings[Logs::Loot].is_category_enabled == 1)\ + OutF(LogSys, Logs::Detail, Logs::Loot, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ +} while (0) + #define Log(debug_level, log_category, message, ...) do {\ if (LogSys.log_settings[log_category].is_category_enabled == 1)\ LogSys.Out(debug_level, log_category, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\ diff --git a/common/loottable.h b/common/loottable.h index d046c0c08..2b9a13926 100644 --- a/common/loottable.h +++ b/common/loottable.h @@ -39,13 +39,15 @@ struct LootTable_Struct { }; struct LootDropEntries_Struct { - uint32 item_id; - int8 item_charges; - uint8 equip_item; - float chance; - uint8 minlevel; - uint8 maxlevel; - uint8 multiplier; + uint32 item_id; + int8 item_charges; + uint8 equip_item; + float chance; + uint16 trivial_min_level; + uint16 trivial_max_level; + uint16 npc_min_level; + uint16 npc_max_level; + uint8 multiplier; }; struct LootDrop_Struct { diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 6c9723e7f..d26d2d820 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -2142,7 +2142,7 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) { EQ::FixedMemoryVariableHashSet hash(reinterpret_cast(data), size); uint8 loot_drop[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)]; - LootDrop_Struct *ld = reinterpret_cast(loot_drop); + LootDrop_Struct *p_loot_drop_struct = reinterpret_cast(loot_drop); const std::string query = fmt::format( SQL( @@ -2152,8 +2152,10 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) { lootdrop_entries.item_charges, lootdrop_entries.equip_item, lootdrop_entries.chance, - lootdrop_entries.minlevel, - lootdrop_entries.maxlevel, + lootdrop_entries.trivial_min_level, + lootdrop_entries.trivial_max_level, + lootdrop_entries.npc_min_level, + lootdrop_entries.npc_max_level, lootdrop_entries.multiplier FROM lootdrop @@ -2171,37 +2173,44 @@ void SharedDatabase::LoadLootDrops(void *data, uint32 size) { return; } - uint32 current_id = 0; - uint32 current_entry = 0; + uint32 current_id = 0; + uint32 current_entry = 0; - for (auto row = results.begin(); row != results.end(); ++row) { - uint32 id = static_cast(atoul(row[0])); - if(id != current_id) { - if(current_id != 0) - hash.insert(current_id, loot_drop, (sizeof(LootDrop_Struct) +(sizeof(LootDropEntries_Struct) * ld->NumEntries))); + for (auto row = results.begin(); row != results.end(); ++row) { + auto id = static_cast(atoul(row[0])); + if (id != current_id) { + if (current_id != 0) { + hash.insert( + current_id, + loot_drop, + (sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * p_loot_drop_struct->NumEntries))); + } - memset(loot_drop, 0, sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)); + memset(loot_drop, 0, sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * 1260)); current_entry = 0; - current_id = id; - } + current_id = id; + } - if(current_entry >= 1260) - continue; + if (current_entry >= 1260) { + continue; + } - ld->Entries[current_entry].item_id = static_cast(atoul(row[1])); - ld->Entries[current_entry].item_charges = static_cast(atoi(row[2])); - ld->Entries[current_entry].equip_item = static_cast(atoi(row[3])); - ld->Entries[current_entry].chance = static_cast(atof(row[4])); - ld->Entries[current_entry].minlevel = static_cast(atoi(row[5])); - ld->Entries[current_entry].maxlevel = static_cast(atoi(row[6])); - ld->Entries[current_entry].multiplier = static_cast(atoi(row[7])); + p_loot_drop_struct->Entries[current_entry].item_id = static_cast(atoul(row[1])); + p_loot_drop_struct->Entries[current_entry].item_charges = static_cast(atoi(row[2])); + p_loot_drop_struct->Entries[current_entry].equip_item = static_cast(atoi(row[3])); + p_loot_drop_struct->Entries[current_entry].chance = static_cast(atof(row[4])); + p_loot_drop_struct->Entries[current_entry].trivial_min_level = static_cast(atoi(row[5])); + p_loot_drop_struct->Entries[current_entry].trivial_max_level = static_cast(atoi(row[6])); + p_loot_drop_struct->Entries[current_entry].npc_min_level = static_cast(atoi(row[7])); + p_loot_drop_struct->Entries[current_entry].npc_max_level = static_cast(atoi(row[8])); + p_loot_drop_struct->Entries[current_entry].multiplier = static_cast(atoi(row[9])); - ++(ld->NumEntries); - ++current_entry; - } + ++(p_loot_drop_struct->NumEntries); + ++current_entry; + } - if(current_id != 0) - hash.insert(current_id, loot_drop, (sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * ld->NumEntries))); + if(current_id != 0) + hash.insert(current_id, loot_drop, (sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * p_loot_drop_struct->NumEntries))); } diff --git a/common/version.h b/common/version.h index fb60b794e..0dd15a90f 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9154 +#define CURRENT_BINARY_DATABASE_VERSION 9155 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9027 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 4adc4bca0..383293eac 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -408,6 +408,7 @@ 9152|2020_03_09_convert_myisam_to_innodb.sql|SELECT * FROM db_version WHERE version >= 9152|empty| 9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| 9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| +9155|2020_08_15_lootdrop_level_filtering.sql|SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql b/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql new file mode 100644 index 000000000..00084a59f --- /dev/null +++ b/utils/sql/git/required/2020_08_15_lootdrop_level_filtering.sql @@ -0,0 +1,7 @@ +ALTER TABLE `lootdrop_entries` CHANGE `minlevel` `trivial_min_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `maxlevel` `trivial_max_level` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_min_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `lootdrop_entries` ADD COLUMN `npc_max_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `trivial_min_level` `trivial_min_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; +ALTER TABLE `lootdrop_entries` CHANGE `trivial_max_level` `trivial_max_level` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT ''; +UPDATE `lootdrop_entries` SET `trivial_max_level` = 0 WHERE `trivial_max_level` = 127; \ No newline at end of file diff --git a/zone/aa.cpp b/zone/aa.cpp index ec66d517f..110885fef 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -448,7 +448,7 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) sitem = CorpseToUse->GetWornItem(x); if(sitem){ const EQ::ItemData * itm = database.GetItem(sitem); - npca->AddLootDrop(itm, &npca->itemlist, 1, 1, 255, true, true); + npca->AddLootDrop(itm, &npca->itemlist, LootDropEntries_Struct{ .equip_item = true }, true); } } diff --git a/zone/attack.cpp b/zone/attack.cpp index 88dbc7bd4..86c326e53 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -2464,7 +2464,7 @@ bool NPC::Death(Mob* killer_mob, int32 damage, uint16 spell, EQ::skills::SkillTy killer = killer->GetOwner(); if (killer->IsClient() && !killer->CastToClient()->GetGM()) - this->CheckMinMaxLevel(killer); + this->CheckTrivialMinMaxLevelDrop(killer); } entity_list.RemoveFromAutoXTargets(this); diff --git a/zone/loottables.cpp b/zone/loottables.cpp index b64a9f7e0..0f8bd0ab6 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -29,6 +29,7 @@ #include "zone_store.h" #include "global_loot_manager.h" #include "../common/repositories/criteria/content_filter_criteria.h" +#include "../common/say_link.h" #include #include @@ -116,110 +117,127 @@ void ZoneDatabase::AddLootTableToNPC(NPC* npc,uint32 loottable_id, ItemList* ite // Called by AddLootTableToNPC // maxdrops = size of the array npcd -void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* itemlist, uint8 droplimit, uint8 mindrop) { - const LootDrop_Struct* lds = GetLootDrop(lootdrop_id); - if (!lds) { +void ZoneDatabase::AddLootDropToNPC(NPC *npc, uint32 lootdrop_id, ItemList *item_list, uint8 droplimit, uint8 mindrop) +{ + const LootDrop_Struct *loot_drop = GetLootDrop(lootdrop_id); + if (!loot_drop) { return; } - if(lds->NumEntries == 0) + if (loot_drop->NumEntries == 0) { return; + } - if(droplimit == 0 && mindrop == 0) { - for(uint32 i = 0; i < lds->NumEntries; ++i) { - int charges = lds->Entries[i].multiplier; - for(int j = 0; j < charges; ++j) { - if(zone->random.Real(0.0, 100.0) <= lds->Entries[i].chance) { - const EQ::ItemData* dbitem = GetItem(lds->Entries[i].item_id); - npc->AddLootDrop(dbitem, itemlist, lds->Entries[i].item_charges, lds->Entries[i].minlevel, - lds->Entries[i].maxlevel, lds->Entries[i].equip_item > 0 ? true : false, false); + if (droplimit == 0 && mindrop == 0) { + for (uint32 i = 0; i < loot_drop->NumEntries; ++i) { + int charges = loot_drop->Entries[i].multiplier; + for (int j = 0; j < charges; ++j) { + if (zone->random.Real(0.0, 100.0) <= loot_drop->Entries[i].chance && npc->MeetsLevelRequirements(loot_drop->Entries[i])) { + const EQ::ItemData *database_item = GetItem(loot_drop->Entries[i].item_id); + npc->AddLootDrop( + database_item, + item_list, + loot_drop->Entries[i] + ); } } } return; } - if(lds->NumEntries > 100 && droplimit == 0) { + if (loot_drop->NumEntries > 100 && droplimit == 0) { droplimit = 10; } - if(droplimit < mindrop) { + if (droplimit < mindrop) { droplimit = mindrop; } - float roll_t = 0.0f; - float roll_t_min = 0.0f; - bool active_item_list = false; - for(uint32 i = 0; i < lds->NumEntries; ++i) { - const EQ::ItemData* db_item = GetItem(lds->Entries[i].item_id); - if(db_item) { - roll_t += lds->Entries[i].chance; + float roll_t = 0.0f; + float roll_t_min = 0.0f; + bool active_item_list = false; + for (uint32 i = 0; i < loot_drop->NumEntries; ++i) { + const EQ::ItemData *db_item = GetItem(loot_drop->Entries[i].item_id); + if (db_item) { + roll_t += loot_drop->Entries[i].chance; active_item_list = true; } } roll_t_min = roll_t; - roll_t = EQ::ClampLower(roll_t, 100.0f); + roll_t = EQ::ClampLower(roll_t, 100.0f); - if(!active_item_list) { + if (!active_item_list) { return; } - for(int i = 0; i < mindrop; ++i) { - float roll = (float)zone->random.Real(0.0, roll_t_min); - for(uint32 j = 0; j < lds->NumEntries; ++j) { - const EQ::ItemData* db_item = GetItem(lds->Entries[j].item_id); - if(db_item) { - if(roll < lds->Entries[j].chance) { - npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, - lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); + for (int i = 0; i < mindrop; ++i) { + float roll = (float) zone->random.Real(0.0, roll_t_min); + for (uint32 j = 0; j < loot_drop->NumEntries; ++j) { + const EQ::ItemData *db_item = GetItem(loot_drop->Entries[j].item_id); + if (db_item) { + if (roll < loot_drop->Entries[j].chance && npc->MeetsLevelRequirements(loot_drop->Entries[j])) { + npc->AddLootDrop( + db_item, + item_list, + loot_drop->Entries[j] + ); - int charges = (int)lds->Entries[i].multiplier; + int charges = (int) loot_drop->Entries[i].multiplier; charges = EQ::ClampLower(charges, 1); - for(int k = 1; k < charges; ++k) { - float c_roll = (float)zone->random.Real(0.0, 100.0); - if(c_roll <= lds->Entries[i].chance) { - npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, - lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); + for (int k = 1; k < charges; ++k) { + float c_roll = (float) zone->random.Real(0.0, 100.0); + if (c_roll <= loot_drop->Entries[i].chance) { + npc->AddLootDrop( + db_item, + item_list, + loot_drop->Entries[i] + ); } } - j = lds->NumEntries; + j = loot_drop->NumEntries; break; } else { - roll -= lds->Entries[j].chance; + roll -= loot_drop->Entries[j].chance; } } } } - for(int i = mindrop; i < droplimit; ++i) { - float roll = (float)zone->random.Real(0.0, roll_t); - for(uint32 j = 0; j < lds->NumEntries; ++j) { - const EQ::ItemData* db_item = GetItem(lds->Entries[j].item_id); - if(db_item) { - if(roll < lds->Entries[j].chance) { - npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, - lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); + for (int i = mindrop; i < droplimit; ++i) { + float roll = (float) zone->random.Real(0.0, roll_t); + for (uint32 j = 0; j < loot_drop->NumEntries; ++j) { + const EQ::ItemData *db_item = GetItem(loot_drop->Entries[j].item_id); + if (db_item) { + if (roll < loot_drop->Entries[j].chance && npc->MeetsLevelRequirements(loot_drop->Entries[j])) { + npc->AddLootDrop( + db_item, + item_list, + loot_drop->Entries[j] + ); - int charges = (int)lds->Entries[i].multiplier; + int charges = (int) loot_drop->Entries[i].multiplier; charges = EQ::ClampLower(charges, 1); - for(int k = 1; k < charges; ++k) { - float c_roll = (float)zone->random.Real(0.0, 100.0); - if(c_roll <= lds->Entries[i].chance) { - npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel, - lds->Entries[j].maxlevel, lds->Entries[j].equip_item > 0 ? true : false, false); + for (int k = 1; k < charges; ++k) { + float c_roll = (float) zone->random.Real(0.0, 100.0); + if (c_roll <= loot_drop->Entries[i].chance) { + npc->AddLootDrop( + db_item, + item_list, + loot_drop->Entries[i] + ); } } - j = lds->NumEntries; + j = loot_drop->NumEntries; break; } else { - roll -= lds->Entries[j].chance; + roll -= loot_drop->Entries[j].chance; } } } @@ -231,43 +249,86 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml // npc->SendAppearancePacket(AT_Light, npc->GetActiveLightValue()); } -//if itemlist is null, just send wear changes -void NPC::AddLootDrop(const EQ::ItemData *item2, ItemList* itemlist, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { - if(item2 == nullptr) - return; - - //make sure we are doing something... - if(!itemlist && !wearchange) - return; - - auto item = new ServerLootItem_Struct; -#if EQDEBUG>=11 - LogDebug("Adding drop to npc: [{}], Item: [{}]", GetName(), item2->ID); -#endif - - EQApplicationPacket* outapp = nullptr; - WearChange_Struct* wc = nullptr; - if(wearchange) { - outapp = new EQApplicationPacket(OP_WearChange, sizeof(WearChange_Struct)); - wc = (WearChange_Struct*)outapp->pBuffer; - wc->spawn_id = GetID(); - wc->material=0; +bool NPC::MeetsLevelRequirements(LootDropEntries_Struct loot_drop) +{ + if (loot_drop.npc_min_level > 0 && GetLevel() < loot_drop.npc_min_level) { + return false; } - item->item_id = item2->ID; - item->charges = charges; - item->aug_1 = aug1; - item->aug_2 = aug2; - item->aug_3 = aug3; - item->aug_4 = aug4; - item->aug_5 = aug5; - item->aug_6 = aug6; - item->attuned = 0; - item->min_level = minlevel; - item->max_level = maxlevel; - item->equip_slot = EQ::invslot::SLOT_INVALID; + if (loot_drop.npc_max_level > 0 && GetLevel() > loot_drop.npc_max_level) { + return false; + } - if (equipit) { + return true; +} + +//if itemlist is null, just send wear changes +void NPC::AddLootDrop( + const EQ::ItemData *item2, + ItemList *itemlist, + LootDropEntries_Struct loot_drop, + bool wear_change, + uint32 aug1, + uint32 aug2, + uint32 aug3, + uint32 aug4, + uint32 aug5, + uint32 aug6 +) +{ + if (item2 == nullptr) { + return; + } + + //make sure we are doing something... + if (!itemlist && !wear_change) { + return; + } + + auto item = new ServerLootItem_Struct; + + if (LogSys.log_settings[Logs::Loot].is_category_enabled == 1) { + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); + linker.SetItemData(item2); + + LogLoot( + "[NPC::AddLootDrop] NPC [{}] Item ({}) [{}] charges [{}] chance [{}] trivial min/max [{}/{}] npc min/max [{}/{}]", + GetName(), + item2->ID, + linker.GenerateLink(), + loot_drop.item_charges, + loot_drop.chance, + loot_drop.trivial_min_level, + loot_drop.trivial_max_level, + loot_drop.npc_min_level, + loot_drop.npc_max_level + ); + } + + EQApplicationPacket *outapp = nullptr; + WearChange_Struct *p_wear_change_struct = nullptr; + if (wear_change) { + outapp = new EQApplicationPacket(OP_WearChange, sizeof(WearChange_Struct)); + p_wear_change_struct = (WearChange_Struct *) outapp->pBuffer; + p_wear_change_struct->spawn_id = GetID(); + p_wear_change_struct->material = 0; + } + + item->item_id = item2->ID; + item->charges = loot_drop.item_charges; + item->aug_1 = aug1; + item->aug_2 = aug2; + item->aug_3 = aug3; + item->aug_4 = aug4; + item->aug_5 = aug5; + item->aug_6 = aug6; + item->attuned = 0; + item->trivial_min_level = loot_drop.trivial_min_level; + item->trivial_max_level = loot_drop.trivial_max_level; + item->equip_slot = EQ::invslot::SLOT_INVALID; + + if (loot_drop.equip_item > 0) { uint8 eslot = 0xFF; char newid[20]; const EQ::ItemData* compitem = nullptr; @@ -403,9 +464,9 @@ void NPC::AddLootDrop(const EQ::ItemData *item2, ItemList* itemlist, int16 charg //if we found an open slot it goes in... if(eslot != 0xFF) { - if(wearchange) { - wc->wear_slot_id = eslot; - wc->material = emat; + if(wear_change) { + p_wear_change_struct->wear_slot_id = eslot; + p_wear_change_struct->material = emat; } } @@ -415,24 +476,25 @@ void NPC::AddLootDrop(const EQ::ItemData *item2, ItemList* itemlist, int16 charg } } - if(itemlist != nullptr) + if (itemlist != nullptr) { itemlist->push_back(item); - else - safe_delete(item); + } + else safe_delete(item); - if(wearchange && outapp) { + if (wear_change && outapp) { entity_list.QueueClients(this, outapp); safe_delete(outapp); } UpdateEquipmentLight(); - if (UpdateActiveLight()) + if (UpdateActiveLight()) { SendAppearancePacket(AT_Light, GetActiveLightType()); + } } void NPC::AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem) { //slot isnt needed, its determined from the item. - AddLootDrop(item, &itemlist, charges, 1, 255, equipitem, equipitem); + AddLootDrop(item, &itemlist, LootDropEntries_Struct{ .equip_item = equipitem }, true); } void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { @@ -440,7 +502,7 @@ void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, ui const EQ::ItemData * i = database.GetItem(itemid); if(i == nullptr) return; - AddLootDrop(i, &itemlist, charges, 1, 255, equipitem, equipitem, aug1, aug2, aug3, aug4, aug5, aug6); + AddLootDrop(i, &itemlist, LootDropEntries_Struct{ .equip_item = equipitem }, true, aug1, aug2, aug3, aug4, aug5, aug6); } void NPC::AddLootTable() { diff --git a/zone/npc.cpp b/zone/npc.cpp index 278c7dc7c..b0b9e65f7 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -576,25 +576,33 @@ void NPC::RemoveItem(uint32 item_id, uint16 quantity, uint16 slot) { } } -void NPC::CheckMinMaxLevel(Mob *them) +void NPC::CheckTrivialMinMaxLevelDrop(Mob *killer) { - if(them == nullptr || !them->IsClient()) + if (killer == nullptr || !killer->IsClient()) { return; + } - uint16 themlevel = them->GetLevel(); - uint8 material; + uint16 killer_level = killer->GetLevel(); + uint8 material; auto cur = itemlist.begin(); - while(cur != itemlist.end()) - { - if(!(*cur)) + while (cur != itemlist.end()) { + if (!(*cur)) { return; + } - if(themlevel < (*cur)->min_level || themlevel > (*cur)->max_level) - { + uint16 trivial_min_level = (*cur)->trivial_min_level; + uint16 trivial_max_level = (*cur)->trivial_max_level; + bool fits_trivial_criteria = ( + (trivial_min_level > 0 && killer_level < trivial_min_level) || + (trivial_max_level > 0 && killer_level > trivial_max_level) + ); + + if (fits_trivial_criteria) { material = EQ::InventoryProfile::CalcMaterialFromSlot((*cur)->equip_slot); - if (material != EQ::textures::materialInvalid) + if (material != EQ::textures::materialInvalid) { SendWearChange(material); + } cur = itemlist.erase(cur); continue; @@ -603,8 +611,9 @@ void NPC::CheckMinMaxLevel(Mob *them) } UpdateEquipmentLight(); - if (UpdateActiveLight()) + if (UpdateActiveLight()) { SendAppearancePacket(AT_Light, GetActiveLightType()); + } } void NPC::ClearItemList() { @@ -647,8 +656,8 @@ void NPC::QueryLoot(Client* to) item_count, linker.GenerateLink().c_str(), (*cur)->item_id, - (*cur)->min_level, - (*cur)->max_level + (*cur)->trivial_min_level, + (*cur)->trivial_max_level ); } diff --git a/zone/npc.h b/zone/npc.h index ba9ab54b3..4ea8b6ecd 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -25,6 +25,7 @@ #include "zonedb.h" #include "zone_store.h" #include "zonedump.h" +#include "../common/loottable.h" #include #include @@ -193,7 +194,7 @@ public: void CheckGlobalLootTables(); void DescribeAggro(Client *towho, Mob *mob, bool verbose); void RemoveItem(uint32 item_id, uint16 quantity = 0, uint16 slot = 0); - void CheckMinMaxLevel(Mob *them); + void CheckTrivialMinMaxLevelDrop(Mob *killer); void ClearItemList(); ServerLootItem_Struct* GetItem(int slot_id); void AddCash(uint16 in_copper, uint16 in_silver, uint16 in_gold, uint16 in_platinum); @@ -291,7 +292,22 @@ public: void PickPocket(Client* thief); void Disarm(Client* client, int chance); void StartSwarmTimer(uint32 duration) { swarm_timer.Start(duration); } - void AddLootDrop(const EQ::ItemData*dbitem, ItemList* itemlistconst, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange = false, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0); + + void AddLootDrop( + const EQ::ItemData *item2, + ItemList *itemlist, + LootDropEntries_Struct loot_drop, + bool wear_change = false, + uint32 aug1 = 0, + uint32 aug2 = 0, + uint32 aug3 = 0, + uint32 aug4 = 0, + uint32 aug5 = 0, + uint32 aug6 = 0 + ); + + bool MeetsLevelRequirements(LootDropEntries_Struct loot_drop); + virtual void DoClassAttacks(Mob *target); void CheckSignal(); inline bool IsNotTargetableWithHotkey() const { return no_target_hotkey; } @@ -620,12 +636,12 @@ protected: bool ignore_despawn; //NPCs with this set to 1 will ignore the despawn value in spawngroup - private: uint32 loottable_id; bool skip_global_loot; bool skip_auto_scale; bool p_depop; + }; #endif diff --git a/zone/pets.cpp b/zone/pets.cpp index 32c0dae1e..f8d0a6c37 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -394,7 +394,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) if (petinv[i]) { item = database.GetItem(petinv[i]); - npc->AddLootDrop(item, &npc->itemlist, 0, 1, 127, true, true); + npc->AddLootDrop(item, &npc->itemlist, LootDropEntries_Struct{ .equip_item = true }, true); } } @@ -625,7 +625,7 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { _CLIENTPET(this) && GetPetType() <= petOther); if (!noDrop || petCanHaveNoDrop) { - AddLootDrop(item2, &itemlist, 0, 1, 255, true, true); + AddLootDrop(item2, &itemlist, LootDropEntries_Struct{.equip_item = true }, true); } } } diff --git a/zone/trading.cpp b/zone/trading.cpp index 91ac17870..b192ae8fe 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -899,8 +899,12 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st if (baginst) { const EQ::ItemData* bagitem = baginst->GetItem(); if (bagitem && (GetGM() || (bagitem->NoDrop != 0 && baginst->IsAttuned() == false))) { - tradingWith->CastToNPC()->AddLootDrop(bagitem, &tradingWith->CastToNPC()->itemlist, - baginst->GetCharges(), 1, 127, true, true); + tradingWith->CastToNPC()->AddLootDrop( + bagitem, + &tradingWith->CastToNPC()->itemlist, + LootDropEntries_Struct{.item_charges = static_cast(baginst->GetCharges()), .equip_item = true }, + true + ); } else if (RuleB(NPC, ReturnNonQuestNoDropItems)) { PushItemOnCursor(*baginst, true); @@ -909,8 +913,12 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } } - tradingWith->CastToNPC()->AddLootDrop(item, &tradingWith->CastToNPC()->itemlist, - inst->GetCharges(), 1, 127, true, true); + tradingWith->CastToNPC()->AddLootDrop( + item, + &tradingWith->CastToNPC()->itemlist, + LootDropEntries_Struct{.item_charges = static_cast(inst->GetCharges()), .equip_item = true }, + true + ); } // Return NO DROP and Attuned items being handed into a non-quest NPC if the rule is true else if (RuleB(NPC, ReturnNonQuestNoDropItems)) { diff --git a/zone/zonedb.h b/zone/zonedb.h index 1ed875a02..f3766c05c 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -453,7 +453,7 @@ public: bool GetPoweredPetEntry(const char *pet_type, int16 petpower, PetRecord *into); bool GetBasePetItems(int32 equipmentset, uint32 *items); void AddLootTableToNPC(NPC* npc, uint32 loottable_id, ItemList* itemlist, uint32* copper, uint32* silver, uint32* gold, uint32* plat); - void AddLootDropToNPC(NPC* npc, uint32 lootdrop_id, ItemList* itemlist, uint8 droplimit, uint8 mindrop); + void AddLootDropToNPC(NPC* npc, uint32 lootdrop_id, ItemList* item_list, uint8 droplimit, uint8 mindrop); uint32 GetMaxNPCSpellsID(); uint32 GetMaxNPCSpellsEffectsID(); bool GetAuraEntry(uint16 spell_id, AuraRecord &record); From 0e31302a7d4e963748c768d1853100e027c02f9e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 17:25:09 -0500 Subject: [PATCH 244/272] Add an easy way to pull item saylinks --- common/shareddb.h | 9 +++++++++ zone/loottables.cpp | 23 +++++++++++++++++++---- zone/npc.h | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/common/shareddb.h b/common/shareddb.h index fc8c8c00a..13548c0d3 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -29,6 +29,7 @@ #include "base_data.h" #include "fixed_memory_hash_set.h" #include "fixed_memory_variable_hash_set.h" +#include "say_link.h" #include #include @@ -189,6 +190,14 @@ public: void LoadBaseData(void *data, int max_level); const BaseDataStruct *GetBaseData(int lvl, int cl); + std::string CreateItemLink(uint32 item_id) { + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemData); + const EQ::ItemData *item = GetItem(item_id); + linker.SetItemData(item); + return linker.GenerateLink(); + } + protected: std::unique_ptr skill_caps_mmf; diff --git a/zone/loottables.cpp b/zone/loottables.cpp index 0f8bd0ab6..ea563de38 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -132,7 +132,8 @@ void ZoneDatabase::AddLootDropToNPC(NPC *npc, uint32 lootdrop_id, ItemList *item for (uint32 i = 0; i < loot_drop->NumEntries; ++i) { int charges = loot_drop->Entries[i].multiplier; for (int j = 0; j < charges; ++j) { - if (zone->random.Real(0.0, 100.0) <= loot_drop->Entries[i].chance && npc->MeetsLevelRequirements(loot_drop->Entries[i])) { + if (zone->random.Real(0.0, 100.0) <= loot_drop->Entries[i].chance && + npc->MeetsLootDropLevelRequirements(loot_drop->Entries[i])) { const EQ::ItemData *database_item = GetItem(loot_drop->Entries[i].item_id); npc->AddLootDrop( database_item, @@ -176,7 +177,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC *npc, uint32 lootdrop_id, ItemList *item for (uint32 j = 0; j < loot_drop->NumEntries; ++j) { const EQ::ItemData *db_item = GetItem(loot_drop->Entries[j].item_id); if (db_item) { - if (roll < loot_drop->Entries[j].chance && npc->MeetsLevelRequirements(loot_drop->Entries[j])) { + if (roll < loot_drop->Entries[j].chance && npc->MeetsLootDropLevelRequirements(loot_drop->Entries[j])) { npc->AddLootDrop( db_item, item_list, @@ -212,7 +213,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC *npc, uint32 lootdrop_id, ItemList *item for (uint32 j = 0; j < loot_drop->NumEntries; ++j) { const EQ::ItemData *db_item = GetItem(loot_drop->Entries[j].item_id); if (db_item) { - if (roll < loot_drop->Entries[j].chance && npc->MeetsLevelRequirements(loot_drop->Entries[j])) { + if (roll < loot_drop->Entries[j].chance && npc->MeetsLootDropLevelRequirements(loot_drop->Entries[j])) { npc->AddLootDrop( db_item, item_list, @@ -249,13 +250,27 @@ void ZoneDatabase::AddLootDropToNPC(NPC *npc, uint32 lootdrop_id, ItemList *item // npc->SendAppearancePacket(AT_Light, npc->GetActiveLightValue()); } -bool NPC::MeetsLevelRequirements(LootDropEntries_Struct loot_drop) +bool NPC::MeetsLootDropLevelRequirements(LootDropEntries_Struct loot_drop) { if (loot_drop.npc_min_level > 0 && GetLevel() < loot_drop.npc_min_level) { + LogLootDetail( + "NPC [{}] does not meet loot_drop level requirements (min_level) level [{}] current [{}] for item [{}]", + GetCleanName(), + loot_drop.npc_min_level, + GetLevel(), + database.CreateItemLink(loot_drop.item_id) + ); return false; } if (loot_drop.npc_max_level > 0 && GetLevel() > loot_drop.npc_max_level) { + LogLootDetail( + "NPC [{}] does not meet loot_drop level requirements (max_level) level [{}] current [{}] for item [{}]", + GetCleanName(), + loot_drop.npc_max_level, + GetLevel(), + database.CreateItemLink(loot_drop.item_id) + ); return false; } diff --git a/zone/npc.h b/zone/npc.h index 4ea8b6ecd..f0b9871bd 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -306,7 +306,7 @@ public: uint32 aug6 = 0 ); - bool MeetsLevelRequirements(LootDropEntries_Struct loot_drop); + bool MeetsLootDropLevelRequirements(LootDropEntries_Struct loot_drop); virtual void DoClassAttacks(Mob *target); void CheckSignal(); From 45f08b464551c8ec6f718eb18e1decaf1c365f0a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 17:43:20 -0500 Subject: [PATCH 245/272] Cleanup some logic --- zone/aa.cpp | 2 +- zone/loottables.cpp | 2 +- zone/pets.cpp | 14 +++++++------- zone/trading.cpp | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index 110885fef..c15d5ba8c 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -448,7 +448,7 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) sitem = CorpseToUse->GetWornItem(x); if(sitem){ const EQ::ItemData * itm = database.GetItem(sitem); - npca->AddLootDrop(itm, &npca->itemlist, LootDropEntries_Struct{ .equip_item = true }, true); + npca->AddLootDrop(itm, &npca->itemlist, LootDropEntries_Struct{ .equip_item = 1 }, true); } } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index ea563de38..b3f46f649 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -509,7 +509,7 @@ void NPC::AddLootDrop( void NPC::AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem) { //slot isnt needed, its determined from the item. - AddLootDrop(item, &itemlist, LootDropEntries_Struct{ .equip_item = equipitem }, true); + AddLootDrop(item, &itemlist, LootDropEntries_Struct{ .equip_item = static_cast(equipitem ? 1 : 0) }, true); } void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { diff --git a/zone/pets.cpp b/zone/pets.cpp index f8d0a6c37..5d4359d64 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -394,7 +394,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) if (petinv[i]) { item = database.GetItem(petinv[i]); - npc->AddLootDrop(item, &npc->itemlist, LootDropEntries_Struct{ .equip_item = true }, true); + npc->AddLootDrop(item, &npc->itemlist, LootDropEntries_Struct{ .equip_item = 1 }, true); } } @@ -614,18 +614,18 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { //restore their equipment... for (i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) { - if(items[i] == 0) + if (items[i] == 0) { continue; + } - const EQ::ItemData* item2 = database.GetItem(items[i]); + const EQ::ItemData *item2 = database.GetItem(items[i]); if (item2) { - bool noDrop=(item2->NoDrop == 0); // Field is reverse logic - bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && - _CLIENTPET(this) && GetPetType() <= petOther); + bool noDrop = (item2->NoDrop == 0); // Field is reverse logic + bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(this) && GetPetType() <= petOther); if (!noDrop || petCanHaveNoDrop) { - AddLootDrop(item2, &itemlist, LootDropEntries_Struct{.equip_item = true }, true); + AddLootDrop(item2, &itemlist, LootDropEntries_Struct{.equip_item = 1}, true); } } } diff --git a/zone/trading.cpp b/zone/trading.cpp index b192ae8fe..9a58d46a6 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -902,7 +902,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st tradingWith->CastToNPC()->AddLootDrop( bagitem, &tradingWith->CastToNPC()->itemlist, - LootDropEntries_Struct{.item_charges = static_cast(baginst->GetCharges()), .equip_item = true }, + LootDropEntries_Struct{.item_charges = static_cast(baginst->GetCharges()), .equip_item = 1 }, true ); } @@ -916,7 +916,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st tradingWith->CastToNPC()->AddLootDrop( item, &tradingWith->CastToNPC()->itemlist, - LootDropEntries_Struct{.item_charges = static_cast(inst->GetCharges()), .equip_item = true }, + LootDropEntries_Struct{.item_charges = static_cast(inst->GetCharges()), .equip_item = 1 }, true ); } From 4b764e2cc57b63b5557b90e57901aef65585e537 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 17:48:10 -0500 Subject: [PATCH 246/272] Set loot default log [skip ci] --- common/eqemu_logsys.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/common/eqemu_logsys.cpp b/common/eqemu_logsys.cpp index dca47dfb8..368d8fbec 100644 --- a/common/eqemu_logsys.cpp +++ b/common/eqemu_logsys.cpp @@ -126,6 +126,7 @@ void EQEmuLogSys::LoadLogSettingsDefaults() log_settings[Logs::NPCScaling].log_to_gmsay = static_cast(Logs::General); log_settings[Logs::HotReload].log_to_gmsay = static_cast(Logs::General); log_settings[Logs::HotReload].log_to_console = static_cast(Logs::General); + log_settings[Logs::Loot].log_to_gmsay = static_cast(Logs::General); /** * RFC 5424 From 3ffb5299a8fed07ba278ed3fd2f95141e24f701a Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 18:28:34 -0500 Subject: [PATCH 247/272] Update repositories --- ...base_char_create_combinations_repository.h | 39 +-- .../repositories/base/base_doors_repository.h | 281 +++++++++--------- .../base/base_fishing_repository.h | 89 +++--- .../base/base_forage_repository.h | 73 +++-- .../base/base_global_loot_repository.h | 137 +++++---- .../base/base_ground_spawns_repository.h | 145 ++++----- .../base/base_lootdrop_entries_repository.h | 110 ++++--- .../base/base_lootdrop_repository.h | 49 +-- .../base/base_loottable_repository.h | 81 ++--- .../base/base_merchantlist_repository.h | 97 +++--- .../base/base_object_repository.h | 244 ++++++++------- .../base/base_spawn2_repository.h | 156 ++++++---- .../base/base_start_zones_repository.h | 153 +++++----- .../base/base_starting_items_repository.h | 105 ++++--- .../base/base_titles_repository.h | 27 -- .../base/base_tradeskill_recipe_repository.h | 121 ++++---- .../repositories/base/base_traps_repository.h | 9 + .../base/base_zone_points_repository.h | 169 ++++++----- .../repositories/base/base_zone_repository.h | 36 +++ 19 files changed, 1155 insertions(+), 966 deletions(-) diff --git a/common/repositories/base/base_char_create_combinations_repository.h b/common/repositories/base/base_char_create_combinations_repository.h index cf103ec8a..7f8fc49ef 100644 --- a/common/repositories/base/base_char_create_combinations_repository.h +++ b/common/repositories/base/base_char_create_combinations_repository.h @@ -35,15 +35,12 @@ class BaseCharCreateCombinationsRepository { public: struct CharCreateCombinations { - int allocation_id; - int race; - int class; - int deity; - int start_zone; - int expansions_req; - int min_expansion; - int max_expansion; - std::string content_flags; + int allocation_id; + int race; + int class; + int deity; + int start_zone; + int expansions_req; }; static std::string PrimaryKey() @@ -60,9 +57,6 @@ public: "deity", "start_zone", "expansions_req", - "min_expansion", - "max_expansion", - "content_flags", }; } @@ -119,9 +113,6 @@ public: entry.deity = 0; entry.start_zone = 0; entry.expansions_req = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; return entry; } @@ -162,9 +153,6 @@ public: entry.deity = atoi(row[3]); entry.start_zone = atoi(row[4]); entry.expansions_req = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; return entry; } @@ -202,9 +190,6 @@ public: update_values.push_back(columns[3] + " = " + std::to_string(char_create_combinations_entry.deity)); update_values.push_back(columns[4] + " = " + std::to_string(char_create_combinations_entry.start_zone)); update_values.push_back(columns[5] + " = " + std::to_string(char_create_combinations_entry.expansions_req)); - update_values.push_back(columns[6] + " = " + std::to_string(char_create_combinations_entry.min_expansion)); - update_values.push_back(columns[7] + " = " + std::to_string(char_create_combinations_entry.max_expansion)); - update_values.push_back(columns[8] + " = '" + EscapeString(char_create_combinations_entry.content_flags) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -231,9 +216,6 @@ public: insert_values.push_back(std::to_string(char_create_combinations_entry.deity)); insert_values.push_back(std::to_string(char_create_combinations_entry.start_zone)); insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); - insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); - insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); - insert_values.push_back("'" + EscapeString(char_create_combinations_entry.content_flags) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -268,9 +250,6 @@ public: insert_values.push_back(std::to_string(char_create_combinations_entry.deity)); insert_values.push_back(std::to_string(char_create_combinations_entry.start_zone)); insert_values.push_back(std::to_string(char_create_combinations_entry.expansions_req)); - insert_values.push_back(std::to_string(char_create_combinations_entry.min_expansion)); - insert_values.push_back(std::to_string(char_create_combinations_entry.max_expansion)); - insert_values.push_back("'" + EscapeString(char_create_combinations_entry.content_flags) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -310,9 +289,6 @@ public: entry.deity = atoi(row[3]); entry.start_zone = atoi(row[4]); entry.expansions_req = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; all_entries.push_back(entry); } @@ -343,9 +319,6 @@ public: entry.deity = atoi(row[3]); entry.start_zone = atoi(row[4]); entry.expansions_req = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_doors_repository.h b/common/repositories/base/base_doors_repository.h index 3ca9dcd86..9dd6f2d4d 100644 --- a/common/repositories/base/base_doors_repository.h +++ b/common/repositories/base/base_doors_repository.h @@ -69,6 +69,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -113,6 +114,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -163,40 +165,41 @@ public: { Doors entry{}; - entry.id = 0; - entry.doorid = 0; - entry.zone = ""; - entry.version = 0; - entry.name = ""; - entry.pos_y = 0; - entry.pos_x = 0; - entry.pos_z = 0; - entry.heading = 0; - entry.opentype = 0; - entry.guild = 0; - entry.lockpick = 0; - entry.keyitem = 0; - entry.nokeyring = 0; - entry.triggerdoor = 0; - entry.triggertype = 0; - entry.disable_timer = 0; - entry.doorisopen = 0; - entry.door_param = 0; - entry.dest_zone = "NONE"; - entry.dest_instance = 0; - entry.dest_x = 0; - entry.dest_y = 0; - entry.dest_z = 0; - entry.dest_heading = 0; - entry.invert_state = 0; - entry.incline = 0; - entry.size = 100; - entry.buffer = 0; - entry.client_version_mask = 4294967295; - entry.is_ldon_door = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.doorid = 0; + entry.zone = ""; + entry.version = 0; + entry.name = ""; + entry.pos_y = 0; + entry.pos_x = 0; + entry.pos_z = 0; + entry.heading = 0; + entry.opentype = 0; + entry.guild = 0; + entry.lockpick = 0; + entry.keyitem = 0; + entry.nokeyring = 0; + entry.triggerdoor = 0; + entry.triggertype = 0; + entry.disable_timer = 0; + entry.doorisopen = 0; + entry.door_param = 0; + entry.dest_zone = "NONE"; + entry.dest_instance = 0; + entry.dest_x = 0; + entry.dest_y = 0; + entry.dest_z = 0; + entry.dest_heading = 0; + entry.invert_state = 0; + entry.incline = 0; + entry.size = 100; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + entry.is_ldon_door = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -231,40 +234,41 @@ public: if (results.RowCount() == 1) { Doors entry{}; - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = static_cast(atof(row[5])); - entry.pos_x = static_cast(atof(row[6])); - entry.pos_z = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = static_cast(atof(row[21])); - entry.dest_y = static_cast(atof(row[22])); - entry.dest_z = static_cast(atof(row[23])); - entry.dest_heading = static_cast(atof(row[24])); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = static_cast(atof(row[28])); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - entry.min_expansion = atoi(row[31]); - entry.max_expansion = atoi(row[32]); - entry.content_flags = row[33] ? row[33] : ""; + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = static_cast(atof(row[28])); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + entry.content_flags_disabled = row[34] ? row[34] : ""; return entry; } @@ -329,6 +333,7 @@ public: update_values.push_back(columns[31] + " = " + std::to_string(doors_entry.min_expansion)); update_values.push_back(columns[32] + " = " + std::to_string(doors_entry.max_expansion)); update_values.push_back(columns[33] + " = '" + EscapeString(doors_entry.content_flags) + "'"); + update_values.push_back(columns[34] + " = '" + EscapeString(doors_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -382,6 +387,7 @@ public: insert_values.push_back(std::to_string(doors_entry.min_expansion)); insert_values.push_back(std::to_string(doors_entry.max_expansion)); insert_values.push_back("'" + EscapeString(doors_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -443,6 +449,7 @@ public: insert_values.push_back(std::to_string(doors_entry.min_expansion)); insert_values.push_back(std::to_string(doors_entry.max_expansion)); insert_values.push_back("'" + EscapeString(doors_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(doors_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -476,40 +483,41 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Doors entry{}; - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = static_cast(atof(row[5])); - entry.pos_x = static_cast(atof(row[6])); - entry.pos_z = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = static_cast(atof(row[21])); - entry.dest_y = static_cast(atof(row[22])); - entry.dest_z = static_cast(atof(row[23])); - entry.dest_heading = static_cast(atof(row[24])); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = static_cast(atof(row[28])); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - entry.min_expansion = atoi(row[31]); - entry.max_expansion = atoi(row[32]); - entry.content_flags = row[33] ? row[33] : ""; + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = static_cast(atof(row[28])); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + entry.content_flags_disabled = row[34] ? row[34] : ""; all_entries.push_back(entry); } @@ -534,40 +542,41 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Doors entry{}; - entry.id = atoi(row[0]); - entry.doorid = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.name = row[4] ? row[4] : ""; - entry.pos_y = static_cast(atof(row[5])); - entry.pos_x = static_cast(atof(row[6])); - entry.pos_z = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.opentype = atoi(row[9]); - entry.guild = atoi(row[10]); - entry.lockpick = atoi(row[11]); - entry.keyitem = atoi(row[12]); - entry.nokeyring = atoi(row[13]); - entry.triggerdoor = atoi(row[14]); - entry.triggertype = atoi(row[15]); - entry.disable_timer = atoi(row[16]); - entry.doorisopen = atoi(row[17]); - entry.door_param = atoi(row[18]); - entry.dest_zone = row[19] ? row[19] : ""; - entry.dest_instance = atoi(row[20]); - entry.dest_x = static_cast(atof(row[21])); - entry.dest_y = static_cast(atof(row[22])); - entry.dest_z = static_cast(atof(row[23])); - entry.dest_heading = static_cast(atof(row[24])); - entry.invert_state = atoi(row[25]); - entry.incline = atoi(row[26]); - entry.size = atoi(row[27]); - entry.buffer = static_cast(atof(row[28])); - entry.client_version_mask = atoi(row[29]); - entry.is_ldon_door = atoi(row[30]); - entry.min_expansion = atoi(row[31]); - entry.max_expansion = atoi(row[32]); - entry.content_flags = row[33] ? row[33] : ""; + entry.id = atoi(row[0]); + entry.doorid = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.name = row[4] ? row[4] : ""; + entry.pos_y = static_cast(atof(row[5])); + entry.pos_x = static_cast(atof(row[6])); + entry.pos_z = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.opentype = atoi(row[9]); + entry.guild = atoi(row[10]); + entry.lockpick = atoi(row[11]); + entry.keyitem = atoi(row[12]); + entry.nokeyring = atoi(row[13]); + entry.triggerdoor = atoi(row[14]); + entry.triggertype = atoi(row[15]); + entry.disable_timer = atoi(row[16]); + entry.doorisopen = atoi(row[17]); + entry.door_param = atoi(row[18]); + entry.dest_zone = row[19] ? row[19] : ""; + entry.dest_instance = atoi(row[20]); + entry.dest_x = static_cast(atof(row[21])); + entry.dest_y = static_cast(atof(row[22])); + entry.dest_z = static_cast(atof(row[23])); + entry.dest_heading = static_cast(atof(row[24])); + entry.invert_state = atoi(row[25]); + entry.incline = atoi(row[26]); + entry.size = atoi(row[27]); + entry.buffer = static_cast(atof(row[28])); + entry.client_version_mask = atoi(row[29]); + entry.is_ldon_door = atoi(row[30]); + entry.min_expansion = atoi(row[31]); + entry.max_expansion = atoi(row[32]); + entry.content_flags = row[33] ? row[33] : ""; + entry.content_flags_disabled = row[34] ? row[34] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_fishing_repository.h b/common/repositories/base/base_fishing_repository.h index 43f5a90c0..15b21accd 100644 --- a/common/repositories/base/base_fishing_repository.h +++ b/common/repositories/base/base_fishing_repository.h @@ -45,6 +45,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -65,6 +66,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -115,16 +117,17 @@ public: { Fishing entry{}; - entry.id = 0; - entry.zoneid = 0; - entry.Itemid = 0; - entry.skill_level = 0; - entry.chance = 0; - entry.npc_id = 0; - entry.npc_chance = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.skill_level = 0; + entry.chance = 0; + entry.npc_id = 0; + entry.npc_chance = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -159,16 +162,17 @@ public: if (results.RowCount() == 1) { Fishing entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - entry.min_expansion = atoi(row[7]); - entry.max_expansion = atoi(row[8]); - entry.content_flags = row[9] ? row[9] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + entry.content_flags_disabled = row[10] ? row[10] : ""; return entry; } @@ -209,6 +213,7 @@ public: update_values.push_back(columns[7] + " = " + std::to_string(fishing_entry.min_expansion)); update_values.push_back(columns[8] + " = " + std::to_string(fishing_entry.max_expansion)); update_values.push_back(columns[9] + " = '" + EscapeString(fishing_entry.content_flags) + "'"); + update_values.push_back(columns[10] + " = '" + EscapeString(fishing_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -238,6 +243,7 @@ public: insert_values.push_back(std::to_string(fishing_entry.min_expansion)); insert_values.push_back(std::to_string(fishing_entry.max_expansion)); insert_values.push_back("'" + EscapeString(fishing_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(fishing_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -275,6 +281,7 @@ public: insert_values.push_back(std::to_string(fishing_entry.min_expansion)); insert_values.push_back(std::to_string(fishing_entry.max_expansion)); insert_values.push_back("'" + EscapeString(fishing_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(fishing_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -308,16 +315,17 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Fishing entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - entry.min_expansion = atoi(row[7]); - entry.max_expansion = atoi(row[8]); - entry.content_flags = row[9] ? row[9] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + entry.content_flags_disabled = row[10] ? row[10] : ""; all_entries.push_back(entry); } @@ -342,16 +350,17 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Fishing entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.skill_level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.npc_id = atoi(row[5]); - entry.npc_chance = atoi(row[6]); - entry.min_expansion = atoi(row[7]); - entry.max_expansion = atoi(row[8]); - entry.content_flags = row[9] ? row[9] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.skill_level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.npc_id = atoi(row[5]); + entry.npc_chance = atoi(row[6]); + entry.min_expansion = atoi(row[7]); + entry.max_expansion = atoi(row[8]); + entry.content_flags = row[9] ? row[9] : ""; + entry.content_flags_disabled = row[10] ? row[10] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_forage_repository.h b/common/repositories/base/base_forage_repository.h index 2f3690be4..b4bde6abb 100644 --- a/common/repositories/base/base_forage_repository.h +++ b/common/repositories/base/base_forage_repository.h @@ -43,6 +43,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -61,6 +62,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -111,14 +113,15 @@ public: { Forage entry{}; - entry.id = 0; - entry.zoneid = 0; - entry.Itemid = 0; - entry.level = 0; - entry.chance = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.zoneid = 0; + entry.Itemid = 0; + entry.level = 0; + entry.chance = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -153,14 +156,15 @@ public: if (results.RowCount() == 1) { Forage entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.min_expansion = atoi(row[5]); - entry.max_expansion = atoi(row[6]); - entry.content_flags = row[7] ? row[7] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + entry.content_flags_disabled = row[8] ? row[8] : ""; return entry; } @@ -199,6 +203,7 @@ public: update_values.push_back(columns[5] + " = " + std::to_string(forage_entry.min_expansion)); update_values.push_back(columns[6] + " = " + std::to_string(forage_entry.max_expansion)); update_values.push_back(columns[7] + " = '" + EscapeString(forage_entry.content_flags) + "'"); + update_values.push_back(columns[8] + " = '" + EscapeString(forage_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -226,6 +231,7 @@ public: insert_values.push_back(std::to_string(forage_entry.min_expansion)); insert_values.push_back(std::to_string(forage_entry.max_expansion)); insert_values.push_back("'" + EscapeString(forage_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(forage_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -261,6 +267,7 @@ public: insert_values.push_back(std::to_string(forage_entry.min_expansion)); insert_values.push_back(std::to_string(forage_entry.max_expansion)); insert_values.push_back("'" + EscapeString(forage_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(forage_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -294,14 +301,15 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Forage entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.min_expansion = atoi(row[5]); - entry.max_expansion = atoi(row[6]); - entry.content_flags = row[7] ? row[7] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + entry.content_flags_disabled = row[8] ? row[8] : ""; all_entries.push_back(entry); } @@ -326,14 +334,15 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Forage entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.Itemid = atoi(row[2]); - entry.level = atoi(row[3]); - entry.chance = atoi(row[4]); - entry.min_expansion = atoi(row[5]); - entry.max_expansion = atoi(row[6]); - entry.content_flags = row[7] ? row[7] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.Itemid = atoi(row[2]); + entry.level = atoi(row[3]); + entry.chance = atoi(row[4]); + entry.min_expansion = atoi(row[5]); + entry.max_expansion = atoi(row[6]); + entry.content_flags = row[7] ? row[7] : ""; + entry.content_flags_disabled = row[8] ? row[8] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_global_loot_repository.h b/common/repositories/base/base_global_loot_repository.h index 0d86b6cdf..ace50ed31 100644 --- a/common/repositories/base/base_global_loot_repository.h +++ b/common/repositories/base/base_global_loot_repository.h @@ -51,6 +51,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -77,6 +78,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -127,22 +129,23 @@ public: { GlobalLoot entry{}; - entry.id = 0; - entry.description = ""; - entry.loottable_id = 0; - entry.enabled = 1; - entry.min_level = 0; - entry.max_level = 0; - entry.rare = 0; - entry.raid = 0; - entry.race = ""; - entry.class = ""; - entry.bodytype = ""; - entry.zone = ""; - entry.hot_zone = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.description = ""; + entry.loottable_id = 0; + entry.enabled = 1; + entry.min_level = 0; + entry.max_level = 0; + entry.rare = 0; + entry.raid = 0; + entry.race = ""; + entry.class = ""; + entry.bodytype = ""; + entry.zone = ""; + entry.hot_zone = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -177,22 +180,23 @@ public: if (results.RowCount() == 1) { GlobalLoot entry{}; - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - entry.min_expansion = atoi(row[13]); - entry.max_expansion = atoi(row[14]); - entry.content_flags = row[15] ? row[15] : ""; + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + entry.content_flags_disabled = row[16] ? row[16] : ""; return entry; } @@ -239,6 +243,7 @@ public: update_values.push_back(columns[13] + " = " + std::to_string(global_loot_entry.min_expansion)); update_values.push_back(columns[14] + " = " + std::to_string(global_loot_entry.max_expansion)); update_values.push_back(columns[15] + " = '" + EscapeString(global_loot_entry.content_flags) + "'"); + update_values.push_back(columns[16] + " = '" + EscapeString(global_loot_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -274,6 +279,7 @@ public: insert_values.push_back(std::to_string(global_loot_entry.min_expansion)); insert_values.push_back(std::to_string(global_loot_entry.max_expansion)); insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -317,6 +323,7 @@ public: insert_values.push_back(std::to_string(global_loot_entry.min_expansion)); insert_values.push_back(std::to_string(global_loot_entry.max_expansion)); insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(global_loot_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -350,22 +357,23 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GlobalLoot entry{}; - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - entry.min_expansion = atoi(row[13]); - entry.max_expansion = atoi(row[14]); - entry.content_flags = row[15] ? row[15] : ""; + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + entry.content_flags_disabled = row[16] ? row[16] : ""; all_entries.push_back(entry); } @@ -390,22 +398,23 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GlobalLoot entry{}; - entry.id = atoi(row[0]); - entry.description = row[1] ? row[1] : ""; - entry.loottable_id = atoi(row[2]); - entry.enabled = atoi(row[3]); - entry.min_level = atoi(row[4]); - entry.max_level = atoi(row[5]); - entry.rare = atoi(row[6]); - entry.raid = atoi(row[7]); - entry.race = row[8] ? row[8] : ""; - entry.class = row[9] ? row[9] : ""; - entry.bodytype = row[10] ? row[10] : ""; - entry.zone = row[11] ? row[11] : ""; - entry.hot_zone = atoi(row[12]); - entry.min_expansion = atoi(row[13]); - entry.max_expansion = atoi(row[14]); - entry.content_flags = row[15] ? row[15] : ""; + entry.id = atoi(row[0]); + entry.description = row[1] ? row[1] : ""; + entry.loottable_id = atoi(row[2]); + entry.enabled = atoi(row[3]); + entry.min_level = atoi(row[4]); + entry.max_level = atoi(row[5]); + entry.rare = atoi(row[6]); + entry.raid = atoi(row[7]); + entry.race = row[8] ? row[8] : ""; + entry.class = row[9] ? row[9] : ""; + entry.bodytype = row[10] ? row[10] : ""; + entry.zone = row[11] ? row[11] : ""; + entry.hot_zone = atoi(row[12]); + entry.min_expansion = atoi(row[13]); + entry.max_expansion = atoi(row[14]); + entry.content_flags = row[15] ? row[15] : ""; + entry.content_flags_disabled = row[16] ? row[16] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_ground_spawns_repository.h b/common/repositories/base/base_ground_spawns_repository.h index 7e21389fe..30ee6b124 100644 --- a/common/repositories/base/base_ground_spawns_repository.h +++ b/common/repositories/base/base_ground_spawns_repository.h @@ -52,6 +52,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -79,6 +80,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -129,23 +131,24 @@ public: { GroundSpawns entry{}; - entry.id = 0; - entry.zoneid = 0; - entry.version = 0; - entry.max_x = 2000; - entry.max_y = 2000; - entry.max_z = 10000; - entry.min_x = -2000; - entry.min_y = -2000; - entry.heading = 0; - entry.name = ""; - entry.item = 0; - entry.max_allowed = 1; - entry.comment = ""; - entry.respawn_timer = 300; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.max_x = 2000; + entry.max_y = 2000; + entry.max_z = 10000; + entry.min_x = -2000; + entry.min_y = -2000; + entry.heading = 0; + entry.name = ""; + entry.item = 0; + entry.max_allowed = 1; + entry.comment = ""; + entry.respawn_timer = 300; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -180,23 +183,24 @@ public: if (results.RowCount() == 1) { GroundSpawns entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = static_cast(atof(row[3])); - entry.max_y = static_cast(atof(row[4])); - entry.max_z = static_cast(atof(row[5])); - entry.min_x = static_cast(atof(row[6])); - entry.min_y = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + entry.content_flags_disabled = row[17] ? row[17] : ""; return entry; } @@ -244,6 +248,7 @@ public: update_values.push_back(columns[14] + " = " + std::to_string(ground_spawns_entry.min_expansion)); update_values.push_back(columns[15] + " = " + std::to_string(ground_spawns_entry.max_expansion)); update_values.push_back(columns[16] + " = '" + EscapeString(ground_spawns_entry.content_flags) + "'"); + update_values.push_back(columns[17] + " = '" + EscapeString(ground_spawns_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -280,6 +285,7 @@ public: insert_values.push_back(std::to_string(ground_spawns_entry.min_expansion)); insert_values.push_back(std::to_string(ground_spawns_entry.max_expansion)); insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -324,6 +330,7 @@ public: insert_values.push_back(std::to_string(ground_spawns_entry.min_expansion)); insert_values.push_back(std::to_string(ground_spawns_entry.max_expansion)); insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(ground_spawns_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -357,23 +364,24 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GroundSpawns entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = static_cast(atof(row[3])); - entry.max_y = static_cast(atof(row[4])); - entry.max_z = static_cast(atof(row[5])); - entry.min_x = static_cast(atof(row[6])); - entry.min_y = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + entry.content_flags_disabled = row[17] ? row[17] : ""; all_entries.push_back(entry); } @@ -398,23 +406,24 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { GroundSpawns entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.max_x = static_cast(atof(row[3])); - entry.max_y = static_cast(atof(row[4])); - entry.max_z = static_cast(atof(row[5])); - entry.min_x = static_cast(atof(row[6])); - entry.min_y = static_cast(atof(row[7])); - entry.heading = static_cast(atof(row[8])); - entry.name = row[9] ? row[9] : ""; - entry.item = atoi(row[10]); - entry.max_allowed = atoi(row[11]); - entry.comment = row[12] ? row[12] : ""; - entry.respawn_timer = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.max_x = static_cast(atof(row[3])); + entry.max_y = static_cast(atof(row[4])); + entry.max_z = static_cast(atof(row[5])); + entry.min_x = static_cast(atof(row[6])); + entry.min_y = static_cast(atof(row[7])); + entry.heading = static_cast(atof(row[8])); + entry.name = row[9] ? row[9] : ""; + entry.item = atoi(row[10]); + entry.max_allowed = atoi(row[11]); + entry.comment = row[12] ? row[12] : ""; + entry.respawn_timer = atoi(row[13]); + entry.min_expansion = atoi(row[14]); + entry.max_expansion = atoi(row[15]); + entry.content_flags = row[16] ? row[16] : ""; + entry.content_flags_disabled = row[17] ? row[17] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_lootdrop_entries_repository.h b/common/repositories/base/base_lootdrop_entries_repository.h index c513956e8..136c581aa 100644 --- a/common/repositories/base/base_lootdrop_entries_repository.h +++ b/common/repositories/base/base_lootdrop_entries_repository.h @@ -41,9 +41,11 @@ public: int equip_item; float chance; float disabled_chance; - int minlevel; - int maxlevel; + int trivial_min_level; + int trivial_max_level; int multiplier; + int npc_min_level; + int npc_max_level; }; static std::string PrimaryKey() @@ -60,9 +62,11 @@ public: "equip_item", "chance", "disabled_chance", - "minlevel", - "maxlevel", + "trivial_min_level", + "trivial_max_level", "multiplier", + "npc_min_level", + "npc_max_level", }; } @@ -113,15 +117,17 @@ public: { LootdropEntries entry{}; - entry.lootdrop_id = 0; - entry.item_id = 0; - entry.item_charges = 1; - entry.equip_item = 0; - entry.chance = 1; - entry.disabled_chance = 0; - entry.minlevel = 0; - entry.maxlevel = 127; - entry.multiplier = 1; + entry.lootdrop_id = 0; + entry.item_id = 0; + entry.item_charges = 1; + entry.equip_item = 0; + entry.chance = 1; + entry.disabled_chance = 0; + entry.trivial_min_level = 0; + entry.trivial_max_level = 0; + entry.multiplier = 1; + entry.npc_min_level = 0; + entry.npc_max_level = 0; return entry; } @@ -156,15 +162,17 @@ public: if (results.RowCount() == 1) { LootdropEntries entry{}; - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = static_cast(atof(row[4])); - entry.disabled_chance = static_cast(atof(row[5])); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); + entry.trivial_min_level = atoi(row[6]); + entry.trivial_max_level = atoi(row[7]); + entry.multiplier = atoi(row[8]); + entry.npc_min_level = atoi(row[9]); + entry.npc_max_level = atoi(row[10]); return entry; } @@ -202,9 +210,11 @@ public: update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entries_entry.equip_item)); update_values.push_back(columns[4] + " = " + std::to_string(lootdrop_entries_entry.chance)); update_values.push_back(columns[5] + " = " + std::to_string(lootdrop_entries_entry.disabled_chance)); - update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.minlevel)); - update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.maxlevel)); + update_values.push_back(columns[6] + " = " + std::to_string(lootdrop_entries_entry.trivial_min_level)); + update_values.push_back(columns[7] + " = " + std::to_string(lootdrop_entries_entry.trivial_max_level)); update_values.push_back(columns[8] + " = " + std::to_string(lootdrop_entries_entry.multiplier)); + update_values.push_back(columns[9] + " = " + std::to_string(lootdrop_entries_entry.npc_min_level)); + update_values.push_back(columns[10] + " = " + std::to_string(lootdrop_entries_entry.npc_max_level)); auto results = content_db.QueryDatabase( fmt::format( @@ -231,9 +241,11 @@ public: insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.trivial_min_level)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.trivial_max_level)); insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.npc_min_level)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.npc_max_level)); auto results = content_db.QueryDatabase( fmt::format( @@ -268,9 +280,11 @@ public: insert_values.push_back(std::to_string(lootdrop_entries_entry.equip_item)); insert_values.push_back(std::to_string(lootdrop_entries_entry.chance)); insert_values.push_back(std::to_string(lootdrop_entries_entry.disabled_chance)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.minlevel)); - insert_values.push_back(std::to_string(lootdrop_entries_entry.maxlevel)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.trivial_min_level)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.trivial_max_level)); insert_values.push_back(std::to_string(lootdrop_entries_entry.multiplier)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.npc_min_level)); + insert_values.push_back(std::to_string(lootdrop_entries_entry.npc_max_level)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -304,15 +318,17 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { LootdropEntries entry{}; - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = static_cast(atof(row[4])); - entry.disabled_chance = static_cast(atof(row[5])); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); + entry.trivial_min_level = atoi(row[6]); + entry.trivial_max_level = atoi(row[7]); + entry.multiplier = atoi(row[8]); + entry.npc_min_level = atoi(row[9]); + entry.npc_max_level = atoi(row[10]); all_entries.push_back(entry); } @@ -337,15 +353,17 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { LootdropEntries entry{}; - entry.lootdrop_id = atoi(row[0]); - entry.item_id = atoi(row[1]); - entry.item_charges = atoi(row[2]); - entry.equip_item = atoi(row[3]); - entry.chance = static_cast(atof(row[4])); - entry.disabled_chance = static_cast(atof(row[5])); - entry.minlevel = atoi(row[6]); - entry.maxlevel = atoi(row[7]); - entry.multiplier = atoi(row[8]); + entry.lootdrop_id = atoi(row[0]); + entry.item_id = atoi(row[1]); + entry.item_charges = atoi(row[2]); + entry.equip_item = atoi(row[3]); + entry.chance = static_cast(atof(row[4])); + entry.disabled_chance = static_cast(atof(row[5])); + entry.trivial_min_level = atoi(row[6]); + entry.trivial_max_level = atoi(row[7]); + entry.multiplier = atoi(row[8]); + entry.npc_min_level = atoi(row[9]); + entry.npc_max_level = atoi(row[10]); all_entries.push_back(entry); } diff --git a/common/repositories/base/base_lootdrop_repository.h b/common/repositories/base/base_lootdrop_repository.h index 081adb9bf..9ed44f815 100644 --- a/common/repositories/base/base_lootdrop_repository.h +++ b/common/repositories/base/base_lootdrop_repository.h @@ -40,6 +40,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -55,6 +56,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -105,11 +107,12 @@ public: { Lootdrop entry{}; - entry.id = 0; - entry.name = ""; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.name = ""; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -144,11 +147,12 @@ public: if (results.RowCount() == 1) { Lootdrop entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.min_expansion = atoi(row[2]); - entry.max_expansion = atoi(row[3]); - entry.content_flags = row[4] ? row[4] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + entry.content_flags_disabled = row[5] ? row[5] : ""; return entry; } @@ -184,6 +188,7 @@ public: update_values.push_back(columns[2] + " = " + std::to_string(lootdrop_entry.min_expansion)); update_values.push_back(columns[3] + " = " + std::to_string(lootdrop_entry.max_expansion)); update_values.push_back(columns[4] + " = '" + EscapeString(lootdrop_entry.content_flags) + "'"); + update_values.push_back(columns[5] + " = '" + EscapeString(lootdrop_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -208,6 +213,7 @@ public: insert_values.push_back(std::to_string(lootdrop_entry.min_expansion)); insert_values.push_back(std::to_string(lootdrop_entry.max_expansion)); insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -240,6 +246,7 @@ public: insert_values.push_back(std::to_string(lootdrop_entry.min_expansion)); insert_values.push_back(std::to_string(lootdrop_entry.max_expansion)); insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(lootdrop_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -273,11 +280,12 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Lootdrop entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.min_expansion = atoi(row[2]); - entry.max_expansion = atoi(row[3]); - entry.content_flags = row[4] ? row[4] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + entry.content_flags_disabled = row[5] ? row[5] : ""; all_entries.push_back(entry); } @@ -302,11 +310,12 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Lootdrop entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.min_expansion = atoi(row[2]); - entry.max_expansion = atoi(row[3]); - entry.content_flags = row[4] ? row[4] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.min_expansion = atoi(row[2]); + entry.max_expansion = atoi(row[3]); + entry.content_flags = row[4] ? row[4] : ""; + entry.content_flags_disabled = row[5] ? row[5] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_loottable_repository.h b/common/repositories/base/base_loottable_repository.h index 2fee78710..1981aa5e2 100644 --- a/common/repositories/base/base_loottable_repository.h +++ b/common/repositories/base/base_loottable_repository.h @@ -44,6 +44,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -63,6 +64,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -113,15 +115,16 @@ public: { Loottable entry{}; - entry.id = 0; - entry.name = ""; - entry.mincash = 0; - entry.maxcash = 0; - entry.avgcoin = 0; - entry.done = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.name = ""; + entry.mincash = 0; + entry.maxcash = 0; + entry.avgcoin = 0; + entry.done = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -156,15 +159,16 @@ public: if (results.RowCount() == 1) { Loottable entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + entry.content_flags_disabled = row[9] ? row[9] : ""; return entry; } @@ -204,6 +208,7 @@ public: update_values.push_back(columns[6] + " = " + std::to_string(loottable_entry.min_expansion)); update_values.push_back(columns[7] + " = " + std::to_string(loottable_entry.max_expansion)); update_values.push_back(columns[8] + " = '" + EscapeString(loottable_entry.content_flags) + "'"); + update_values.push_back(columns[9] + " = '" + EscapeString(loottable_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -232,6 +237,7 @@ public: insert_values.push_back(std::to_string(loottable_entry.min_expansion)); insert_values.push_back(std::to_string(loottable_entry.max_expansion)); insert_values.push_back("'" + EscapeString(loottable_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(loottable_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -268,6 +274,7 @@ public: insert_values.push_back(std::to_string(loottable_entry.min_expansion)); insert_values.push_back(std::to_string(loottable_entry.max_expansion)); insert_values.push_back("'" + EscapeString(loottable_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(loottable_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -301,15 +308,16 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Loottable entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + entry.content_flags_disabled = row[9] ? row[9] : ""; all_entries.push_back(entry); } @@ -334,15 +342,16 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Loottable entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.mincash = atoi(row[2]); - entry.maxcash = atoi(row[3]); - entry.avgcoin = atoi(row[4]); - entry.done = atoi(row[5]); - entry.min_expansion = atoi(row[6]); - entry.max_expansion = atoi(row[7]); - entry.content_flags = row[8] ? row[8] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.mincash = atoi(row[2]); + entry.maxcash = atoi(row[3]); + entry.avgcoin = atoi(row[4]); + entry.done = atoi(row[5]); + entry.min_expansion = atoi(row[6]); + entry.max_expansion = atoi(row[7]); + entry.content_flags = row[8] ? row[8] : ""; + entry.content_flags_disabled = row[9] ? row[9] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_merchantlist_repository.h b/common/repositories/base/base_merchantlist_repository.h index 0d72eaa5b..d9aef8427 100644 --- a/common/repositories/base/base_merchantlist_repository.h +++ b/common/repositories/base/base_merchantlist_repository.h @@ -46,6 +46,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -67,6 +68,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -117,17 +119,18 @@ public: { Merchantlist entry{}; - entry.merchantid = 0; - entry.slot = 0; - entry.item = 0; - entry.faction_required = -100; - entry.level_required = 0; - entry.alt_currency_cost = 0; - entry.classes_required = 65535; - entry.probability = 100; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.merchantid = 0; + entry.slot = 0; + entry.item = 0; + entry.faction_required = -100; + entry.level_required = 0; + entry.alt_currency_cost = 0; + entry.classes_required = 65535; + entry.probability = 100; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -162,17 +165,18 @@ public: if (results.RowCount() == 1) { Merchantlist entry{}; - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - entry.min_expansion = atoi(row[8]); - entry.max_expansion = atoi(row[9]); - entry.content_flags = row[10] ? row[10] : ""; + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + entry.content_flags_disabled = row[11] ? row[11] : ""; return entry; } @@ -215,6 +219,7 @@ public: update_values.push_back(columns[8] + " = " + std::to_string(merchantlist_entry.min_expansion)); update_values.push_back(columns[9] + " = " + std::to_string(merchantlist_entry.max_expansion)); update_values.push_back(columns[10] + " = '" + EscapeString(merchantlist_entry.content_flags) + "'"); + update_values.push_back(columns[11] + " = '" + EscapeString(merchantlist_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -246,6 +251,7 @@ public: insert_values.push_back(std::to_string(merchantlist_entry.min_expansion)); insert_values.push_back(std::to_string(merchantlist_entry.max_expansion)); insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -285,6 +291,7 @@ public: insert_values.push_back(std::to_string(merchantlist_entry.min_expansion)); insert_values.push_back(std::to_string(merchantlist_entry.max_expansion)); insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(merchantlist_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -318,17 +325,18 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Merchantlist entry{}; - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - entry.min_expansion = atoi(row[8]); - entry.max_expansion = atoi(row[9]); - entry.content_flags = row[10] ? row[10] : ""; + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + entry.content_flags_disabled = row[11] ? row[11] : ""; all_entries.push_back(entry); } @@ -353,17 +361,18 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Merchantlist entry{}; - entry.merchantid = atoi(row[0]); - entry.slot = atoi(row[1]); - entry.item = atoi(row[2]); - entry.faction_required = atoi(row[3]); - entry.level_required = atoi(row[4]); - entry.alt_currency_cost = atoi(row[5]); - entry.classes_required = atoi(row[6]); - entry.probability = atoi(row[7]); - entry.min_expansion = atoi(row[8]); - entry.max_expansion = atoi(row[9]); - entry.content_flags = row[10] ? row[10] : ""; + entry.merchantid = atoi(row[0]); + entry.slot = atoi(row[1]); + entry.item = atoi(row[2]); + entry.faction_required = atoi(row[3]); + entry.level_required = atoi(row[4]); + entry.alt_currency_cost = atoi(row[5]); + entry.classes_required = atoi(row[6]); + entry.probability = atoi(row[7]); + entry.min_expansion = atoi(row[8]); + entry.max_expansion = atoi(row[9]); + entry.content_flags = row[10] ? row[10] : ""; + entry.content_flags_disabled = row[11] ? row[11] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_object_repository.h b/common/repositories/base/base_object_repository.h index c44685202..a135dbbe7 100644 --- a/common/repositories/base/base_object_repository.h +++ b/common/repositories/base/base_object_repository.h @@ -61,6 +61,10 @@ public: float tilt_x; float tilt_y; std::string display_name; + int min_expansion; + int max_expansion; + std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -97,6 +101,10 @@ public: "tilt_x", "tilt_y", "display_name", + "min_expansion", + "max_expansion", + "content_flags", + "content_flags_disabled", }; } @@ -147,32 +155,36 @@ public: { Object entry{}; - entry.id = 0; - entry.zoneid = 0; - entry.version = 0; - entry.xpos = 0; - entry.ypos = 0; - entry.zpos = 0; - entry.heading = 0; - entry.itemid = 0; - entry.charges = 0; - entry.objectname = ""; - entry.type = 0; - entry.icon = 0; - entry.unknown08 = 0; - entry.unknown10 = 0; - entry.unknown20 = 0; - entry.unknown24 = 0; - entry.unknown60 = 0; - entry.unknown64 = 0; - entry.unknown68 = 0; - entry.unknown72 = 0; - entry.unknown76 = 0; - entry.unknown84 = 0; - entry.size = 100; - entry.tilt_x = 0; - entry.tilt_y = 0; - entry.display_name = ""; + entry.id = 0; + entry.zoneid = 0; + entry.version = 0; + entry.xpos = 0; + entry.ypos = 0; + entry.zpos = 0; + entry.heading = 0; + entry.itemid = 0; + entry.charges = 0; + entry.objectname = ""; + entry.type = 0; + entry.icon = 0; + entry.unknown08 = 0; + entry.unknown10 = 0; + entry.unknown20 = 0; + entry.unknown24 = 0; + entry.unknown60 = 0; + entry.unknown64 = 0; + entry.unknown68 = 0; + entry.unknown72 = 0; + entry.unknown76 = 0; + entry.unknown84 = 0; + entry.size = 100; + entry.tilt_x = 0; + entry.tilt_y = 0; + entry.display_name = ""; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -207,32 +219,36 @@ public: if (results.RowCount() == 1) { Object entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = static_cast(atof(row[3])); - entry.ypos = static_cast(atof(row[4])); - entry.zpos = static_cast(atof(row[5])); - entry.heading = static_cast(atof(row[6])); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = static_cast(atof(row[22])); - entry.tilt_x = static_cast(atof(row[23])); - entry.tilt_y = static_cast(atof(row[24])); - entry.display_name = row[25] ? row[25] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); + entry.display_name = row[25] ? row[25] : ""; + entry.min_expansion = atoi(row[26]); + entry.max_expansion = atoi(row[27]); + entry.content_flags = row[28] ? row[28] : ""; + entry.content_flags_disabled = row[29] ? row[29] : ""; return entry; } @@ -289,6 +305,10 @@ public: update_values.push_back(columns[23] + " = " + std::to_string(object_entry.tilt_x)); update_values.push_back(columns[24] + " = " + std::to_string(object_entry.tilt_y)); update_values.push_back(columns[25] + " = '" + EscapeString(object_entry.display_name) + "'"); + update_values.push_back(columns[26] + " = " + std::to_string(object_entry.min_expansion)); + update_values.push_back(columns[27] + " = " + std::to_string(object_entry.max_expansion)); + update_values.push_back(columns[28] + " = '" + EscapeString(object_entry.content_flags) + "'"); + update_values.push_back(columns[29] + " = '" + EscapeString(object_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -334,6 +354,10 @@ public: insert_values.push_back(std::to_string(object_entry.tilt_x)); insert_values.push_back(std::to_string(object_entry.tilt_y)); insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + insert_values.push_back(std::to_string(object_entry.min_expansion)); + insert_values.push_back(std::to_string(object_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(object_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -387,6 +411,10 @@ public: insert_values.push_back(std::to_string(object_entry.tilt_x)); insert_values.push_back(std::to_string(object_entry.tilt_y)); insert_values.push_back("'" + EscapeString(object_entry.display_name) + "'"); + insert_values.push_back(std::to_string(object_entry.min_expansion)); + insert_values.push_back(std::to_string(object_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(object_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(object_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -420,32 +448,36 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Object entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = static_cast(atof(row[3])); - entry.ypos = static_cast(atof(row[4])); - entry.zpos = static_cast(atof(row[5])); - entry.heading = static_cast(atof(row[6])); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = static_cast(atof(row[22])); - entry.tilt_x = static_cast(atof(row[23])); - entry.tilt_y = static_cast(atof(row[24])); - entry.display_name = row[25] ? row[25] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); + entry.display_name = row[25] ? row[25] : ""; + entry.min_expansion = atoi(row[26]); + entry.max_expansion = atoi(row[27]); + entry.content_flags = row[28] ? row[28] : ""; + entry.content_flags_disabled = row[29] ? row[29] : ""; all_entries.push_back(entry); } @@ -470,32 +502,36 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Object entry{}; - entry.id = atoi(row[0]); - entry.zoneid = atoi(row[1]); - entry.version = atoi(row[2]); - entry.xpos = static_cast(atof(row[3])); - entry.ypos = static_cast(atof(row[4])); - entry.zpos = static_cast(atof(row[5])); - entry.heading = static_cast(atof(row[6])); - entry.itemid = atoi(row[7]); - entry.charges = atoi(row[8]); - entry.objectname = row[9] ? row[9] : ""; - entry.type = atoi(row[10]); - entry.icon = atoi(row[11]); - entry.unknown08 = atoi(row[12]); - entry.unknown10 = atoi(row[13]); - entry.unknown20 = atoi(row[14]); - entry.unknown24 = atoi(row[15]); - entry.unknown60 = atoi(row[16]); - entry.unknown64 = atoi(row[17]); - entry.unknown68 = atoi(row[18]); - entry.unknown72 = atoi(row[19]); - entry.unknown76 = atoi(row[20]); - entry.unknown84 = atoi(row[21]); - entry.size = static_cast(atof(row[22])); - entry.tilt_x = static_cast(atof(row[23])); - entry.tilt_y = static_cast(atof(row[24])); - entry.display_name = row[25] ? row[25] : ""; + entry.id = atoi(row[0]); + entry.zoneid = atoi(row[1]); + entry.version = atoi(row[2]); + entry.xpos = static_cast(atof(row[3])); + entry.ypos = static_cast(atof(row[4])); + entry.zpos = static_cast(atof(row[5])); + entry.heading = static_cast(atof(row[6])); + entry.itemid = atoi(row[7]); + entry.charges = atoi(row[8]); + entry.objectname = row[9] ? row[9] : ""; + entry.type = atoi(row[10]); + entry.icon = atoi(row[11]); + entry.unknown08 = atoi(row[12]); + entry.unknown10 = atoi(row[13]); + entry.unknown20 = atoi(row[14]); + entry.unknown24 = atoi(row[15]); + entry.unknown60 = atoi(row[16]); + entry.unknown64 = atoi(row[17]); + entry.unknown68 = atoi(row[18]); + entry.unknown72 = atoi(row[19]); + entry.unknown76 = atoi(row[20]); + entry.unknown84 = atoi(row[21]); + entry.size = static_cast(atof(row[22])); + entry.tilt_x = static_cast(atof(row[23])); + entry.tilt_y = static_cast(atof(row[24])); + entry.display_name = row[25] ? row[25] : ""; + entry.min_expansion = atoi(row[26]); + entry.max_expansion = atoi(row[27]); + entry.content_flags = row[28] ? row[28] : ""; + entry.content_flags_disabled = row[29] ? row[29] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_spawn2_repository.h b/common/repositories/base/base_spawn2_repository.h index 51e96a36b..00d519f1f 100644 --- a/common/repositories/base/base_spawn2_repository.h +++ b/common/repositories/base/base_spawn2_repository.h @@ -50,6 +50,10 @@ public: int cond_value; int enabled; int animation; + int min_expansion; + int max_expansion; + std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -75,6 +79,10 @@ public: "cond_value", "enabled", "animation", + "min_expansion", + "max_expansion", + "content_flags", + "content_flags_disabled", }; } @@ -125,21 +133,25 @@ public: { Spawn2 entry{}; - entry.id = 0; - entry.spawngroupID = 0; - entry.zone = ""; - entry.version = 0; - entry.x = 0.000000; - entry.y = 0.000000; - entry.z = 0.000000; - entry.heading = 0.000000; - entry.respawntime = 0; - entry.variance = 0; - entry.pathgrid = 0; - entry._condition = 0; - entry.cond_value = 1; - entry.enabled = 1; - entry.animation = 0; + entry.id = 0; + entry.spawngroupID = 0; + entry.zone = ""; + entry.version = 0; + entry.x = 0.000000; + entry.y = 0.000000; + entry.z = 0.000000; + entry.heading = 0.000000; + entry.respawntime = 0; + entry.variance = 0; + entry.pathgrid = 0; + entry._condition = 0; + entry.cond_value = 1; + entry.enabled = 1; + entry.animation = 0; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -174,21 +186,25 @@ public: if (results.RowCount() == 1) { Spawn2 entry{}; - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = static_cast(atof(row[4])); - entry.y = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; return entry; } @@ -234,6 +250,10 @@ public: update_values.push_back(columns[12] + " = " + std::to_string(spawn2_entry.cond_value)); update_values.push_back(columns[13] + " = " + std::to_string(spawn2_entry.enabled)); update_values.push_back(columns[14] + " = " + std::to_string(spawn2_entry.animation)); + update_values.push_back(columns[15] + " = " + std::to_string(spawn2_entry.min_expansion)); + update_values.push_back(columns[16] + " = " + std::to_string(spawn2_entry.max_expansion)); + update_values.push_back(columns[17] + " = '" + EscapeString(spawn2_entry.content_flags) + "'"); + update_values.push_back(columns[18] + " = '" + EscapeString(spawn2_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -268,6 +288,10 @@ public: insert_values.push_back(std::to_string(spawn2_entry.cond_value)); insert_values.push_back(std::to_string(spawn2_entry.enabled)); insert_values.push_back(std::to_string(spawn2_entry.animation)); + insert_values.push_back(std::to_string(spawn2_entry.min_expansion)); + insert_values.push_back(std::to_string(spawn2_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(spawn2_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -310,6 +334,10 @@ public: insert_values.push_back(std::to_string(spawn2_entry.cond_value)); insert_values.push_back(std::to_string(spawn2_entry.enabled)); insert_values.push_back(std::to_string(spawn2_entry.animation)); + insert_values.push_back(std::to_string(spawn2_entry.min_expansion)); + insert_values.push_back(std::to_string(spawn2_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(spawn2_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(spawn2_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -343,21 +371,25 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Spawn2 entry{}; - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = static_cast(atof(row[4])); - entry.y = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; all_entries.push_back(entry); } @@ -382,21 +414,25 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { Spawn2 entry{}; - entry.id = atoi(row[0]); - entry.spawngroupID = atoi(row[1]); - entry.zone = row[2] ? row[2] : ""; - entry.version = atoi(row[3]); - entry.x = static_cast(atof(row[4])); - entry.y = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.respawntime = atoi(row[8]); - entry.variance = atoi(row[9]); - entry.pathgrid = atoi(row[10]); - entry._condition = atoi(row[11]); - entry.cond_value = atoi(row[12]); - entry.enabled = atoi(row[13]); - entry.animation = atoi(row[14]); + entry.id = atoi(row[0]); + entry.spawngroupID = atoi(row[1]); + entry.zone = row[2] ? row[2] : ""; + entry.version = atoi(row[3]); + entry.x = static_cast(atof(row[4])); + entry.y = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.respawntime = atoi(row[8]); + entry.variance = atoi(row[9]); + entry.pathgrid = atoi(row[10]); + entry._condition = atoi(row[11]); + entry.cond_value = atoi(row[12]); + entry.enabled = atoi(row[13]); + entry.animation = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_start_zones_repository.h b/common/repositories/base/base_start_zones_repository.h index 60cfd072a..3df5ac131 100644 --- a/common/repositories/base/base_start_zones_repository.h +++ b/common/repositories/base/base_start_zones_repository.h @@ -53,6 +53,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -81,6 +82,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -131,24 +133,25 @@ public: { StartZones entry{}; - entry.x = 0; - entry.y = 0; - entry.z = 0; - entry.heading = 0; - entry.zone_id = 0; - entry.bind_id = 0; - entry.player_choice = 0; - entry.player_class = 0; - entry.player_deity = 0; - entry.player_race = 0; - entry.start_zone = 0; - entry.bind_x = 0; - entry.bind_y = 0; - entry.bind_z = 0; - entry.select_rank = 50; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.x = 0; + entry.y = 0; + entry.z = 0; + entry.heading = 0; + entry.zone_id = 0; + entry.bind_id = 0; + entry.player_choice = 0; + entry.player_class = 0; + entry.player_deity = 0; + entry.player_race = 0; + entry.start_zone = 0; + entry.bind_x = 0; + entry.bind_y = 0; + entry.bind_z = 0; + entry.select_rank = 50; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -183,24 +186,25 @@ public: if (results.RowCount() == 1) { StartZones entry{}; - entry.x = static_cast(atof(row[0])); - entry.y = static_cast(atof(row[1])); - entry.z = static_cast(atof(row[2])); - entry.heading = static_cast(atof(row[3])); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = static_cast(atof(row[11])); - entry.bind_y = static_cast(atof(row[12])); - entry.bind_z = static_cast(atof(row[13])); - entry.select_rank = atoi(row[14]); - entry.min_expansion = atoi(row[15]); - entry.max_expansion = atoi(row[16]); - entry.content_flags = row[17] ? row[17] : ""; + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; return entry; } @@ -250,6 +254,7 @@ public: update_values.push_back(columns[15] + " = " + std::to_string(start_zones_entry.min_expansion)); update_values.push_back(columns[16] + " = " + std::to_string(start_zones_entry.max_expansion)); update_values.push_back(columns[17] + " = '" + EscapeString(start_zones_entry.content_flags) + "'"); + update_values.push_back(columns[18] + " = '" + EscapeString(start_zones_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -288,6 +293,7 @@ public: insert_values.push_back(std::to_string(start_zones_entry.min_expansion)); insert_values.push_back(std::to_string(start_zones_entry.max_expansion)); insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -334,6 +340,7 @@ public: insert_values.push_back(std::to_string(start_zones_entry.min_expansion)); insert_values.push_back(std::to_string(start_zones_entry.max_expansion)); insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(start_zones_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -367,24 +374,25 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartZones entry{}; - entry.x = static_cast(atof(row[0])); - entry.y = static_cast(atof(row[1])); - entry.z = static_cast(atof(row[2])); - entry.heading = static_cast(atof(row[3])); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = static_cast(atof(row[11])); - entry.bind_y = static_cast(atof(row[12])); - entry.bind_z = static_cast(atof(row[13])); - entry.select_rank = atoi(row[14]); - entry.min_expansion = atoi(row[15]); - entry.max_expansion = atoi(row[16]); - entry.content_flags = row[17] ? row[17] : ""; + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; all_entries.push_back(entry); } @@ -409,24 +417,25 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartZones entry{}; - entry.x = static_cast(atof(row[0])); - entry.y = static_cast(atof(row[1])); - entry.z = static_cast(atof(row[2])); - entry.heading = static_cast(atof(row[3])); - entry.zone_id = atoi(row[4]); - entry.bind_id = atoi(row[5]); - entry.player_choice = atoi(row[6]); - entry.player_class = atoi(row[7]); - entry.player_deity = atoi(row[8]); - entry.player_race = atoi(row[9]); - entry.start_zone = atoi(row[10]); - entry.bind_x = static_cast(atof(row[11])); - entry.bind_y = static_cast(atof(row[12])); - entry.bind_z = static_cast(atof(row[13])); - entry.select_rank = atoi(row[14]); - entry.min_expansion = atoi(row[15]); - entry.max_expansion = atoi(row[16]); - entry.content_flags = row[17] ? row[17] : ""; + entry.x = static_cast(atof(row[0])); + entry.y = static_cast(atof(row[1])); + entry.z = static_cast(atof(row[2])); + entry.heading = static_cast(atof(row[3])); + entry.zone_id = atoi(row[4]); + entry.bind_id = atoi(row[5]); + entry.player_choice = atoi(row[6]); + entry.player_class = atoi(row[7]); + entry.player_deity = atoi(row[8]); + entry.player_race = atoi(row[9]); + entry.start_zone = atoi(row[10]); + entry.bind_x = static_cast(atof(row[11])); + entry.bind_y = static_cast(atof(row[12])); + entry.bind_z = static_cast(atof(row[13])); + entry.select_rank = atoi(row[14]); + entry.min_expansion = atoi(row[15]); + entry.max_expansion = atoi(row[16]); + entry.content_flags = row[17] ? row[17] : ""; + entry.content_flags_disabled = row[18] ? row[18] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_starting_items_repository.h b/common/repositories/base/base_starting_items_repository.h index 5efab9ab4..e904831d8 100644 --- a/common/repositories/base/base_starting_items_repository.h +++ b/common/repositories/base/base_starting_items_repository.h @@ -47,6 +47,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -69,6 +70,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -119,18 +121,19 @@ public: { StartingItems entry{}; - entry.id = 0; - entry.race = 0; - entry.class = 0; - entry.deityid = 0; - entry.zoneid = 0; - entry.itemid = 0; - entry.item_charges = 1; - entry.gm = 0; - entry.slot = -1; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.race = 0; + entry.class = 0; + entry.deityid = 0; + entry.zoneid = 0; + entry.itemid = 0; + entry.item_charges = 1; + entry.gm = 0; + entry.slot = -1; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -165,18 +168,19 @@ public: if (results.RowCount() == 1) { StartingItems entry{}; - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - entry.min_expansion = atoi(row[9]); - entry.max_expansion = atoi(row[10]); - entry.content_flags = row[11] ? row[11] : ""; + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + entry.content_flags_disabled = row[12] ? row[12] : ""; return entry; } @@ -219,6 +223,7 @@ public: update_values.push_back(columns[9] + " = " + std::to_string(starting_items_entry.min_expansion)); update_values.push_back(columns[10] + " = " + std::to_string(starting_items_entry.max_expansion)); update_values.push_back(columns[11] + " = '" + EscapeString(starting_items_entry.content_flags) + "'"); + update_values.push_back(columns[12] + " = '" + EscapeString(starting_items_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -250,6 +255,7 @@ public: insert_values.push_back(std::to_string(starting_items_entry.min_expansion)); insert_values.push_back(std::to_string(starting_items_entry.max_expansion)); insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -289,6 +295,7 @@ public: insert_values.push_back(std::to_string(starting_items_entry.min_expansion)); insert_values.push_back(std::to_string(starting_items_entry.max_expansion)); insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(starting_items_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -322,18 +329,19 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartingItems entry{}; - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - entry.min_expansion = atoi(row[9]); - entry.max_expansion = atoi(row[10]); - entry.content_flags = row[11] ? row[11] : ""; + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + entry.content_flags_disabled = row[12] ? row[12] : ""; all_entries.push_back(entry); } @@ -358,18 +366,19 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { StartingItems entry{}; - entry.id = atoi(row[0]); - entry.race = atoi(row[1]); - entry.class = atoi(row[2]); - entry.deityid = atoi(row[3]); - entry.zoneid = atoi(row[4]); - entry.itemid = atoi(row[5]); - entry.item_charges = atoi(row[6]); - entry.gm = atoi(row[7]); - entry.slot = atoi(row[8]); - entry.min_expansion = atoi(row[9]); - entry.max_expansion = atoi(row[10]); - entry.content_flags = row[11] ? row[11] : ""; + entry.id = atoi(row[0]); + entry.race = atoi(row[1]); + entry.class = atoi(row[2]); + entry.deityid = atoi(row[3]); + entry.zoneid = atoi(row[4]); + entry.itemid = atoi(row[5]); + entry.item_charges = atoi(row[6]); + entry.gm = atoi(row[7]); + entry.slot = atoi(row[8]); + entry.min_expansion = atoi(row[9]); + entry.max_expansion = atoi(row[10]); + entry.content_flags = row[11] ? row[11] : ""; + entry.content_flags_disabled = row[12] ? row[12] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_titles_repository.h b/common/repositories/base/base_titles_repository.h index 5bb5cd9f5..c71ba4c04 100644 --- a/common/repositories/base/base_titles_repository.h +++ b/common/repositories/base/base_titles_repository.h @@ -49,9 +49,6 @@ public: std::string prefix; std::string suffix; int title_set; - int min_expansion; - int max_expansion; - std::string content_flags; }; static std::string PrimaryKey() @@ -76,9 +73,6 @@ public: "prefix", "suffix", "title_set", - "min_expansion", - "max_expansion", - "content_flags", }; } @@ -143,9 +137,6 @@ public: entry.prefix = ""; entry.suffix = ""; entry.title_set = 0; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; return entry; } @@ -194,9 +185,6 @@ public: entry.prefix = row[11] ? row[11] : ""; entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; return entry; } @@ -241,9 +229,6 @@ public: update_values.push_back(columns[11] + " = '" + EscapeString(titles_entry.prefix) + "'"); update_values.push_back(columns[12] + " = '" + EscapeString(titles_entry.suffix) + "'"); update_values.push_back(columns[13] + " = " + std::to_string(titles_entry.title_set)); - update_values.push_back(columns[14] + " = " + std::to_string(titles_entry.min_expansion)); - update_values.push_back(columns[15] + " = " + std::to_string(titles_entry.max_expansion)); - update_values.push_back(columns[16] + " = '" + EscapeString(titles_entry.content_flags) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -277,9 +262,6 @@ public: insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); insert_values.push_back(std::to_string(titles_entry.title_set)); - insert_values.push_back(std::to_string(titles_entry.min_expansion)); - insert_values.push_back(std::to_string(titles_entry.max_expansion)); - insert_values.push_back("'" + EscapeString(titles_entry.content_flags) + "'"); auto results = database.QueryDatabase( fmt::format( @@ -321,9 +303,6 @@ public: insert_values.push_back("'" + EscapeString(titles_entry.prefix) + "'"); insert_values.push_back("'" + EscapeString(titles_entry.suffix) + "'"); insert_values.push_back(std::to_string(titles_entry.title_set)); - insert_values.push_back(std::to_string(titles_entry.min_expansion)); - insert_values.push_back(std::to_string(titles_entry.max_expansion)); - insert_values.push_back("'" + EscapeString(titles_entry.content_flags) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -371,9 +350,6 @@ public: entry.prefix = row[11] ? row[11] : ""; entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; all_entries.push_back(entry); } @@ -412,9 +388,6 @@ public: entry.prefix = row[11] ? row[11] : ""; entry.suffix = row[12] ? row[12] : ""; entry.title_set = atoi(row[13]); - entry.min_expansion = atoi(row[14]); - entry.max_expansion = atoi(row[15]); - entry.content_flags = row[16] ? row[16] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_tradeskill_recipe_repository.h b/common/repositories/base/base_tradeskill_recipe_repository.h index 2716abbb7..df88d096d 100644 --- a/common/repositories/base/base_tradeskill_recipe_repository.h +++ b/common/repositories/base/base_tradeskill_recipe_repository.h @@ -49,6 +49,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -73,6 +74,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -123,20 +125,21 @@ public: { TradeskillRecipe entry{}; - entry.id = 0; - entry.name = ""; - entry.tradeskill = 0; - entry.skillneeded = 0; - entry.trivial = 0; - entry.nofail = 0; - entry.replace_container = 0; - entry.notes = ""; - entry.must_learn = 0; - entry.quest = 0; - entry.enabled = 1; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.name = ""; + entry.tradeskill = 0; + entry.skillneeded = 0; + entry.trivial = 0; + entry.nofail = 0; + entry.replace_container = 0; + entry.notes = ""; + entry.must_learn = 0; + entry.quest = 0; + entry.enabled = 1; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -171,20 +174,21 @@ public: if (results.RowCount() == 1) { TradeskillRecipe entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.tradeskill = atoi(row[2]); - entry.skillneeded = atoi(row[3]); - entry.trivial = atoi(row[4]); - entry.nofail = atoi(row[5]); - entry.replace_container = atoi(row[6]); - entry.notes = row[7] ? row[7] : ""; - entry.must_learn = atoi(row[8]); - entry.quest = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.min_expansion = atoi(row[11]); - entry.max_expansion = atoi(row[12]); - entry.content_flags = row[13] ? row[13] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + entry.content_flags_disabled = row[14] ? row[14] : ""; return entry; } @@ -229,6 +233,7 @@ public: update_values.push_back(columns[11] + " = " + std::to_string(tradeskill_recipe_entry.min_expansion)); update_values.push_back(columns[12] + " = " + std::to_string(tradeskill_recipe_entry.max_expansion)); update_values.push_back(columns[13] + " = '" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + update_values.push_back(columns[14] + " = '" + EscapeString(tradeskill_recipe_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -262,6 +267,7 @@ public: insert_values.push_back(std::to_string(tradeskill_recipe_entry.min_expansion)); insert_values.push_back(std::to_string(tradeskill_recipe_entry.max_expansion)); insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -303,6 +309,7 @@ public: insert_values.push_back(std::to_string(tradeskill_recipe_entry.min_expansion)); insert_values.push_back(std::to_string(tradeskill_recipe_entry.max_expansion)); insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(tradeskill_recipe_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -336,20 +343,21 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { TradeskillRecipe entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.tradeskill = atoi(row[2]); - entry.skillneeded = atoi(row[3]); - entry.trivial = atoi(row[4]); - entry.nofail = atoi(row[5]); - entry.replace_container = atoi(row[6]); - entry.notes = row[7] ? row[7] : ""; - entry.must_learn = atoi(row[8]); - entry.quest = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.min_expansion = atoi(row[11]); - entry.max_expansion = atoi(row[12]); - entry.content_flags = row[13] ? row[13] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + entry.content_flags_disabled = row[14] ? row[14] : ""; all_entries.push_back(entry); } @@ -374,20 +382,21 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { TradeskillRecipe entry{}; - entry.id = atoi(row[0]); - entry.name = row[1] ? row[1] : ""; - entry.tradeskill = atoi(row[2]); - entry.skillneeded = atoi(row[3]); - entry.trivial = atoi(row[4]); - entry.nofail = atoi(row[5]); - entry.replace_container = atoi(row[6]); - entry.notes = row[7] ? row[7] : ""; - entry.must_learn = atoi(row[8]); - entry.quest = atoi(row[9]); - entry.enabled = atoi(row[10]); - entry.min_expansion = atoi(row[11]); - entry.max_expansion = atoi(row[12]); - entry.content_flags = row[13] ? row[13] : ""; + entry.id = atoi(row[0]); + entry.name = row[1] ? row[1] : ""; + entry.tradeskill = atoi(row[2]); + entry.skillneeded = atoi(row[3]); + entry.trivial = atoi(row[4]); + entry.nofail = atoi(row[5]); + entry.replace_container = atoi(row[6]); + entry.notes = row[7] ? row[7] : ""; + entry.must_learn = atoi(row[8]); + entry.quest = atoi(row[9]); + entry.enabled = atoi(row[10]); + entry.min_expansion = atoi(row[11]); + entry.max_expansion = atoi(row[12]); + entry.content_flags = row[13] ? row[13] : ""; + entry.content_flags_disabled = row[14] ? row[14] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_traps_repository.h b/common/repositories/base/base_traps_repository.h index 213de6b6d..dad97592a 100644 --- a/common/repositories/base/base_traps_repository.h +++ b/common/repositories/base/base_traps_repository.h @@ -59,6 +59,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -93,6 +94,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -167,6 +169,7 @@ public: entry.min_expansion = 0; entry.max_expansion = 0; entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -225,6 +228,7 @@ public: entry.min_expansion = atoi(row[21]); entry.max_expansion = atoi(row[22]); entry.content_flags = row[23] ? row[23] : ""; + entry.content_flags_disabled = row[24] ? row[24] : ""; return entry; } @@ -279,6 +283,7 @@ public: update_values.push_back(columns[21] + " = " + std::to_string(traps_entry.min_expansion)); update_values.push_back(columns[22] + " = " + std::to_string(traps_entry.max_expansion)); update_values.push_back(columns[23] + " = '" + EscapeString(traps_entry.content_flags) + "'"); + update_values.push_back(columns[24] + " = '" + EscapeString(traps_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -322,6 +327,7 @@ public: insert_values.push_back(std::to_string(traps_entry.min_expansion)); insert_values.push_back(std::to_string(traps_entry.max_expansion)); insert_values.push_back("'" + EscapeString(traps_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(traps_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -373,6 +379,7 @@ public: insert_values.push_back(std::to_string(traps_entry.min_expansion)); insert_values.push_back(std::to_string(traps_entry.max_expansion)); insert_values.push_back("'" + EscapeString(traps_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(traps_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -430,6 +437,7 @@ public: entry.min_expansion = atoi(row[21]); entry.max_expansion = atoi(row[22]); entry.content_flags = row[23] ? row[23] : ""; + entry.content_flags_disabled = row[24] ? row[24] : ""; all_entries.push_back(entry); } @@ -478,6 +486,7 @@ public: entry.min_expansion = atoi(row[21]); entry.max_expansion = atoi(row[22]); entry.content_flags = row[23] ? row[23] : ""; + entry.content_flags_disabled = row[24] ? row[24] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index 8867e37d7..80cb1be7c 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -55,6 +55,7 @@ public: int min_expansion; int max_expansion; std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -85,6 +86,7 @@ public: "min_expansion", "max_expansion", "content_flags", + "content_flags_disabled", }; } @@ -135,26 +137,27 @@ public: { ZonePoints entry{}; - entry.id = 0; - entry.zone = ""; - entry.version = 0; - entry.number = 1; - entry.y = 0; - entry.x = 0; - entry.z = 0; - entry.heading = 0; - entry.target_y = 0; - entry.target_x = 0; - entry.target_z = 0; - entry.target_heading = 0; - entry.zoneinst = 0; - entry.target_zone_id = 0; - entry.target_instance = 0; - entry.buffer = 0; - entry.client_version_mask = 4294967295; - entry.min_expansion = 0; - entry.max_expansion = 0; - entry.content_flags = ""; + entry.id = 0; + entry.zone = ""; + entry.version = 0; + entry.number = 1; + entry.y = 0; + entry.x = 0; + entry.z = 0; + entry.heading = 0; + entry.target_y = 0; + entry.target_x = 0; + entry.target_z = 0; + entry.target_heading = 0; + entry.zoneinst = 0; + entry.target_zone_id = 0; + entry.target_instance = 0; + entry.buffer = 0; + entry.client_version_mask = 4294967295; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -189,26 +192,27 @@ public: if (results.RowCount() == 1) { ZonePoints entry{}; - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = static_cast(atof(row[4])); - entry.x = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.target_y = static_cast(atof(row[8])); - entry.target_x = static_cast(atof(row[9])); - entry.target_z = static_cast(atof(row[10])); - entry.target_heading = static_cast(atof(row[11])); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = static_cast(atof(row[15])); - entry.client_version_mask = atoi(row[16]); - entry.min_expansion = atoi(row[17]); - entry.max_expansion = atoi(row[18]); - entry.content_flags = row[19] ? row[19] : ""; + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = static_cast(atof(row[15])); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + entry.content_flags_disabled = row[20] ? row[20] : ""; return entry; } @@ -259,6 +263,7 @@ public: update_values.push_back(columns[17] + " = " + std::to_string(zone_points_entry.min_expansion)); update_values.push_back(columns[18] + " = " + std::to_string(zone_points_entry.max_expansion)); update_values.push_back(columns[19] + " = '" + EscapeString(zone_points_entry.content_flags) + "'"); + update_values.push_back(columns[20] + " = '" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -298,6 +303,7 @@ public: insert_values.push_back(std::to_string(zone_points_entry.min_expansion)); insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -345,6 +351,7 @@ public: insert_values.push_back(std::to_string(zone_points_entry.min_expansion)); insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -378,26 +385,27 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { ZonePoints entry{}; - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = static_cast(atof(row[4])); - entry.x = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.target_y = static_cast(atof(row[8])); - entry.target_x = static_cast(atof(row[9])); - entry.target_z = static_cast(atof(row[10])); - entry.target_heading = static_cast(atof(row[11])); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = static_cast(atof(row[15])); - entry.client_version_mask = atoi(row[16]); - entry.min_expansion = atoi(row[17]); - entry.max_expansion = atoi(row[18]); - entry.content_flags = row[19] ? row[19] : ""; + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = static_cast(atof(row[15])); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + entry.content_flags_disabled = row[20] ? row[20] : ""; all_entries.push_back(entry); } @@ -422,26 +430,27 @@ public: for (auto row = results.begin(); row != results.end(); ++row) { ZonePoints entry{}; - entry.id = atoi(row[0]); - entry.zone = row[1] ? row[1] : ""; - entry.version = atoi(row[2]); - entry.number = atoi(row[3]); - entry.y = static_cast(atof(row[4])); - entry.x = static_cast(atof(row[5])); - entry.z = static_cast(atof(row[6])); - entry.heading = static_cast(atof(row[7])); - entry.target_y = static_cast(atof(row[8])); - entry.target_x = static_cast(atof(row[9])); - entry.target_z = static_cast(atof(row[10])); - entry.target_heading = static_cast(atof(row[11])); - entry.zoneinst = atoi(row[12]); - entry.target_zone_id = atoi(row[13]); - entry.target_instance = atoi(row[14]); - entry.buffer = static_cast(atof(row[15])); - entry.client_version_mask = atoi(row[16]); - entry.min_expansion = atoi(row[17]); - entry.max_expansion = atoi(row[18]); - entry.content_flags = row[19] ? row[19] : ""; + entry.id = atoi(row[0]); + entry.zone = row[1] ? row[1] : ""; + entry.version = atoi(row[2]); + entry.number = atoi(row[3]); + entry.y = static_cast(atof(row[4])); + entry.x = static_cast(atof(row[5])); + entry.z = static_cast(atof(row[6])); + entry.heading = static_cast(atof(row[7])); + entry.target_y = static_cast(atof(row[8])); + entry.target_x = static_cast(atof(row[9])); + entry.target_z = static_cast(atof(row[10])); + entry.target_heading = static_cast(atof(row[11])); + entry.zoneinst = atoi(row[12]); + entry.target_zone_id = atoi(row[13]); + entry.target_instance = atoi(row[14]); + entry.buffer = static_cast(atof(row[15])); + entry.client_version_mask = atoi(row[16]); + entry.min_expansion = atoi(row[17]); + entry.max_expansion = atoi(row[18]); + entry.content_flags = row[19] ? row[19] : ""; + entry.content_flags_disabled = row[20] ? row[20] : ""; all_entries.push_back(entry); } diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 1229ca2ec..83c18086a 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -121,6 +121,10 @@ public: int fast_regen_endurance; int npc_max_aggro_dist; int max_movement_update_range; + int min_expansion; + int max_expansion; + std::string content_flags; + std::string content_flags_disabled; }; static std::string PrimaryKey() @@ -217,6 +221,10 @@ public: "fast_regen_endurance", "npc_max_aggro_dist", "max_movement_update_range", + "min_expansion", + "max_expansion", + "content_flags", + "content_flags_disabled", }; } @@ -353,6 +361,10 @@ public: entry.fast_regen_endurance = 180; entry.npc_max_aggro_dist = 600; entry.max_movement_update_range = 600; + entry.min_expansion = 0; + entry.max_expansion = 0; + entry.content_flags = ""; + entry.content_flags_disabled = ""; return entry; } @@ -473,6 +485,10 @@ public: entry.fast_regen_endurance = atoi(row[83]); entry.npc_max_aggro_dist = atoi(row[84]); entry.max_movement_update_range = atoi(row[85]); + entry.min_expansion = atoi(row[86]); + entry.max_expansion = atoi(row[87]); + entry.content_flags = row[88] ? row[88] : ""; + entry.content_flags_disabled = row[89] ? row[89] : ""; return entry; } @@ -589,6 +605,10 @@ public: update_values.push_back(columns[83] + " = " + std::to_string(zone_entry.fast_regen_endurance)); update_values.push_back(columns[84] + " = " + std::to_string(zone_entry.npc_max_aggro_dist)); update_values.push_back(columns[85] + " = " + std::to_string(zone_entry.max_movement_update_range)); + update_values.push_back(columns[86] + " = " + std::to_string(zone_entry.min_expansion)); + update_values.push_back(columns[87] + " = " + std::to_string(zone_entry.max_expansion)); + update_values.push_back(columns[88] + " = '" + EscapeString(zone_entry.content_flags) + "'"); + update_values.push_back(columns[89] + " = '" + EscapeString(zone_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -694,6 +714,10 @@ public: insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + insert_values.push_back(std::to_string(zone_entry.min_expansion)); + insert_values.push_back(std::to_string(zone_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(zone_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.content_flags_disabled) + "'"); auto results = content_db.QueryDatabase( fmt::format( @@ -807,6 +831,10 @@ public: insert_values.push_back(std::to_string(zone_entry.fast_regen_endurance)); insert_values.push_back(std::to_string(zone_entry.npc_max_aggro_dist)); insert_values.push_back(std::to_string(zone_entry.max_movement_update_range)); + insert_values.push_back(std::to_string(zone_entry.min_expansion)); + insert_values.push_back(std::to_string(zone_entry.max_expansion)); + insert_values.push_back("'" + EscapeString(zone_entry.content_flags) + "'"); + insert_values.push_back("'" + EscapeString(zone_entry.content_flags_disabled) + "'"); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -926,6 +954,10 @@ public: entry.fast_regen_endurance = atoi(row[83]); entry.npc_max_aggro_dist = atoi(row[84]); entry.max_movement_update_range = atoi(row[85]); + entry.min_expansion = atoi(row[86]); + entry.max_expansion = atoi(row[87]); + entry.content_flags = row[88] ? row[88] : ""; + entry.content_flags_disabled = row[89] ? row[89] : ""; all_entries.push_back(entry); } @@ -1036,6 +1068,10 @@ public: entry.fast_regen_endurance = atoi(row[83]); entry.npc_max_aggro_dist = atoi(row[84]); entry.max_movement_update_range = atoi(row[85]); + entry.min_expansion = atoi(row[86]); + entry.max_expansion = atoi(row[87]); + entry.content_flags = row[88] ? row[88] : ""; + entry.content_flags_disabled = row[89] ? row[89] : ""; all_entries.push_back(entry); } From 9d0f7781b4af25c37616c6def130a684c84775cd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 15 Aug 2020 19:03:25 -0500 Subject: [PATCH 248/272] Fix compiler warnings --- zone/aa.cpp | 2 +- zone/loottables.cpp | 27 +++++++++++++++++++++++++-- zone/npc.h | 1 + zone/pets.cpp | 4 ++-- zone/trading.cpp | 13 +++++++++++-- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/zone/aa.cpp b/zone/aa.cpp index c15d5ba8c..f71ea2c04 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -448,7 +448,7 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration) sitem = CorpseToUse->GetWornItem(x); if(sitem){ const EQ::ItemData * itm = database.GetItem(sitem); - npca->AddLootDrop(itm, &npca->itemlist, LootDropEntries_Struct{ .equip_item = 1 }, true); + npca->AddLootDrop(itm, &npca->itemlist, NPC::NewLootDropEntry(), true); } } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index b3f46f649..b7c343810 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -277,6 +277,22 @@ bool NPC::MeetsLootDropLevelRequirements(LootDropEntries_Struct loot_drop) return true; } +LootDropEntries_Struct NPC::NewLootDropEntry() +{ + LootDropEntries_Struct loot_drop{}; + loot_drop.item_id = 0; + loot_drop.item_charges = 1; + loot_drop.equip_item = 1; + loot_drop.chance = 0; + loot_drop.trivial_min_level = 0; + loot_drop.trivial_max_level = 0; + loot_drop.npc_min_level = 0; + loot_drop.npc_max_level = 0; + loot_drop.multiplier = 0; + + return loot_drop; +} + //if itemlist is null, just send wear changes void NPC::AddLootDrop( const EQ::ItemData *item2, @@ -509,7 +525,10 @@ void NPC::AddLootDrop( void NPC::AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem) { //slot isnt needed, its determined from the item. - AddLootDrop(item, &itemlist, LootDropEntries_Struct{ .equip_item = static_cast(equipitem ? 1 : 0) }, true); + auto loot_drop_entry = NPC::NewLootDropEntry(); + loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + + AddLootDrop(item, &itemlist, loot_drop_entry, true); } void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { @@ -517,7 +536,11 @@ void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, ui const EQ::ItemData * i = database.GetItem(itemid); if(i == nullptr) return; - AddLootDrop(i, &itemlist, LootDropEntries_Struct{ .equip_item = equipitem }, true, aug1, aug2, aug3, aug4, aug5, aug6); + + auto loot_drop_entry = NPC::NewLootDropEntry(); + loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + + AddLootDrop(i, &itemlist, loot_drop_entry, true, aug1, aug2, aug3, aug4, aug5, aug6); } void NPC::AddLootTable() { diff --git a/zone/npc.h b/zone/npc.h index f0b9871bd..37bf88f8e 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -495,6 +495,7 @@ public: void RecalculateSkills(); + static LootDropEntries_Struct NewLootDropEntry(); protected: const NPCType* NPCTypedata; diff --git a/zone/pets.cpp b/zone/pets.cpp index 5d4359d64..baaa779f0 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -394,7 +394,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower, for (int i = EQ::invslot::EQUIPMENT_BEGIN; i <= EQ::invslot::EQUIPMENT_END; i++) if (petinv[i]) { item = database.GetItem(petinv[i]); - npc->AddLootDrop(item, &npc->itemlist, LootDropEntries_Struct{ .equip_item = 1 }, true); + npc->AddLootDrop(item, &npc->itemlist, NPC::NewLootDropEntry(), true); } } @@ -625,7 +625,7 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) { bool petCanHaveNoDrop = (RuleB(Pets, CanTakeNoDrop) && _CLIENTPET(this) && GetPetType() <= petOther); if (!noDrop || petCanHaveNoDrop) { - AddLootDrop(item2, &itemlist, LootDropEntries_Struct{.equip_item = 1}, true); + AddLootDrop(item2, &itemlist, NPC::NewLootDropEntry(), true); } } } diff --git a/zone/trading.cpp b/zone/trading.cpp index 9a58d46a6..632fd4fb7 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -899,10 +899,15 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st if (baginst) { const EQ::ItemData* bagitem = baginst->GetItem(); if (bagitem && (GetGM() || (bagitem->NoDrop != 0 && baginst->IsAttuned() == false))) { + + auto loot_drop_entry = NPC::NewLootDropEntry(); + loot_drop_entry.equip_item = 1; + loot_drop_entry.item_charges = static_cast(baginst->GetCharges()); + tradingWith->CastToNPC()->AddLootDrop( bagitem, &tradingWith->CastToNPC()->itemlist, - LootDropEntries_Struct{.item_charges = static_cast(baginst->GetCharges()), .equip_item = 1 }, + loot_drop_entry, true ); } @@ -913,10 +918,14 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st } } + auto new_loot_drop_entry = NPC::NewLootDropEntry(); + new_loot_drop_entry.equip_item = 1; + new_loot_drop_entry.item_charges = static_cast(inst->GetCharges()); + tradingWith->CastToNPC()->AddLootDrop( item, &tradingWith->CastToNPC()->itemlist, - LootDropEntries_Struct{.item_charges = static_cast(inst->GetCharges()), .equip_item = 1 }, + new_loot_drop_entry, true ); } From f78828216de32467d07a1af374051938f341ae23 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 16 Aug 2020 00:06:20 -0500 Subject: [PATCH 249/272] Add support for virtual zonepoints --- .../base/base_zone_points_repository.h | 27 +++ common/version.h | 2 +- utils/sql/db_update_manifest.txt | 1 + .../2020_08_16_virtual_zonepoints.sql | 3 + zone/client.cpp | 93 ++++++++++ zone/client.h | 6 + zone/client_packet.cpp | 8 + zone/command.cpp | 174 +++++++++++++++--- zone/command.h | 1 + zone/npc.cpp | 38 ++++ zone/npc.h | 1 + zone/spells.cpp | 2 + zone/zone.cpp | 76 +++++--- zone/zone.h | 14 +- 14 files changed, 387 insertions(+), 59 deletions(-) create mode 100644 utils/sql/git/required/2020_08_16_virtual_zonepoints.sql diff --git a/common/repositories/base/base_zone_points_repository.h b/common/repositories/base/base_zone_points_repository.h index 80cb1be7c..f6182cc0d 100644 --- a/common/repositories/base/base_zone_points_repository.h +++ b/common/repositories/base/base_zone_points_repository.h @@ -56,6 +56,9 @@ public: int max_expansion; std::string content_flags; std::string content_flags_disabled; + int is_virtual; + int height; + int width; }; static std::string PrimaryKey() @@ -87,6 +90,9 @@ public: "max_expansion", "content_flags", "content_flags_disabled", + "is_virtual", + "height", + "width", }; } @@ -158,6 +164,9 @@ public: entry.max_expansion = 0; entry.content_flags = ""; entry.content_flags_disabled = ""; + entry.is_virtual = 0; + entry.height = 0; + entry.width = 0; return entry; } @@ -213,6 +222,9 @@ public: entry.max_expansion = atoi(row[18]); entry.content_flags = row[19] ? row[19] : ""; entry.content_flags_disabled = row[20] ? row[20] : ""; + entry.is_virtual = atoi(row[21]); + entry.height = atoi(row[22]); + entry.width = atoi(row[23]); return entry; } @@ -264,6 +276,9 @@ public: update_values.push_back(columns[18] + " = " + std::to_string(zone_points_entry.max_expansion)); update_values.push_back(columns[19] + " = '" + EscapeString(zone_points_entry.content_flags) + "'"); update_values.push_back(columns[20] + " = '" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); + update_values.push_back(columns[21] + " = " + std::to_string(zone_points_entry.is_virtual)); + update_values.push_back(columns[22] + " = " + std::to_string(zone_points_entry.height)); + update_values.push_back(columns[23] + " = " + std::to_string(zone_points_entry.width)); auto results = content_db.QueryDatabase( fmt::format( @@ -304,6 +319,9 @@ public: insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.is_virtual)); + insert_values.push_back(std::to_string(zone_points_entry.height)); + insert_values.push_back(std::to_string(zone_points_entry.width)); auto results = content_db.QueryDatabase( fmt::format( @@ -352,6 +370,9 @@ public: insert_values.push_back(std::to_string(zone_points_entry.max_expansion)); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags) + "'"); insert_values.push_back("'" + EscapeString(zone_points_entry.content_flags_disabled) + "'"); + insert_values.push_back(std::to_string(zone_points_entry.is_virtual)); + insert_values.push_back(std::to_string(zone_points_entry.height)); + insert_values.push_back(std::to_string(zone_points_entry.width)); insert_chunks.push_back("(" + implode(",", insert_values) + ")"); } @@ -406,6 +427,9 @@ public: entry.max_expansion = atoi(row[18]); entry.content_flags = row[19] ? row[19] : ""; entry.content_flags_disabled = row[20] ? row[20] : ""; + entry.is_virtual = atoi(row[21]); + entry.height = atoi(row[22]); + entry.width = atoi(row[23]); all_entries.push_back(entry); } @@ -451,6 +475,9 @@ public: entry.max_expansion = atoi(row[18]); entry.content_flags = row[19] ? row[19] : ""; entry.content_flags_disabled = row[20] ? row[20] : ""; + entry.is_virtual = atoi(row[21]); + entry.height = atoi(row[22]); + entry.width = atoi(row[23]); all_entries.push_back(entry); } diff --git a/common/version.h b/common/version.h index 0dd15a90f..a481fd1f4 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9155 +#define CURRENT_BINARY_DATABASE_VERSION 9156 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9027 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 383293eac..7a3824470 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -409,6 +409,7 @@ 9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| 9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| 9155|2020_08_15_lootdrop_level_filtering.sql|SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'|empty| +9156|2020_08_16_virtual_zonepoints.sql|SHOW COLUMNS from `zonepoints` LIKE 'is_virtual'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql b/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql new file mode 100644 index 000000000..3fb21cd0a --- /dev/null +++ b/utils/sql/git/required/2020_08_16_virtual_zonepoints.sql @@ -0,0 +1,3 @@ +ALTER TABLE `zone_points` ADD COLUMN `is_virtual` tinyint NOT NULL DEFAULT '0' COMMENT '' AFTER `content_flags_disabled`; +ALTER TABLE `zone_points` ADD COLUMN `height` int NOT NULL DEFAULT '0' COMMENT ''; +ALTER TABLE `zone_points` ADD COLUMN `width` int NOT NULL DEFAULT '0' COMMENT ''; \ No newline at end of file diff --git a/zone/client.cpp b/zone/client.cpp index 406382662..fef09f14d 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -9345,3 +9345,96 @@ void Client::SendToGuildHall() AssignToInstance(instance_id); MovePC(345, instance_id, -1.00, -1.00, 3.34, 0, 1); } + +void Client::CheckVirtualZoneLines() +{ + for (auto &virtual_zone_point : zone->virtual_zone_point_list) { + float half_width = ((float) virtual_zone_point.width / 2); + + if ( + GetX() > (virtual_zone_point.x - half_width) && + GetX() < (virtual_zone_point.x + half_width) && + GetY() > (virtual_zone_point.y - half_width) && + GetY() < (virtual_zone_point.y + half_width) && + GetZ() >= (virtual_zone_point.z - 10) && + GetZ() < (virtual_zone_point.z + (float) virtual_zone_point.height) + ) { + + MovePC( + virtual_zone_point.target_zone_id, + virtual_zone_point.target_instance, + virtual_zone_point.target_x, + virtual_zone_point.target_y, + virtual_zone_point.target_z, + virtual_zone_point.target_heading + ); + + LogZonePoints( + "Virtual Zone Box Sending player [{}] to [{}]", + GetCleanName(), + zone_store.GetZoneLongName(virtual_zone_point.target_zone_id) + ); + } + } +} + +void Client::ShowDevToolsMenu() +{ + std::string menu_commands_search; + std::string menu_commands_show; + std::string reload_commands_show; + std::string window_toggle_command; + + /** + * Search entity commands + */ + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list npcs", false, "NPC") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list players", false, "Players") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list corpses", false, "Corpses") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list doors", false, "Doors") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list objects", false, "Objects") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#fz", false, "Zones") + "] "; + menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#fi", false, "Items") + "] "; + + /** + * Show + */ + menu_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#showzonepoints", false, "Zone Points") + "] "; + menu_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#showzonegloballoot", false, "Zone Global Loot") + "] "; + + /** + * Reload + */ + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#rq", false, "Quests") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadmerchants", false, "Merchants") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadallrules", false, "Rules Globally") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadstatic", false, "Ground Spawns") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadstatic", false, "Alternate Currencies") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadstatic", false, "DB Emotes") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadstatic", false, "Doors") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadtraps", false, "Traps") + "] "; + reload_commands_show += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#reloadzps", false, "Zone Points") + "] "; + + /** + * Show window status + */ + window_toggle_command = "Disabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools enable_window", false, "Enable") + "] "; + if (IsDevToolsWindowEnabled()) { + window_toggle_command = "Enabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools disable_window", false, "Disable") + "] "; + } + + /** + * Print menu + */ + SendChatLineBreak(); + Message(Chat::White, "| [Devtools] Window %s Show this menu with %s", window_toggle_command.c_str(), EQ::SayLinkEngine::GenerateQuestSaylink("#dev", false, "#dev").c_str()); + Message(Chat::White, "| [Devtools] Search %s", menu_commands_search.c_str()); + Message(Chat::White, "| [Devtools] Show %s", menu_commands_show.c_str()); + Message(Chat::White, "| [Devtools] Reload %s", reload_commands_show.c_str()); + Message(Chat::White, "| [Devtools] Search commands with #help "); + SendChatLineBreak(); +} + +void Client::SendChatLineBreak(uint16 color) { + Message(color, "------------------------------------------------"); +} \ No newline at end of file diff --git a/zone/client.h b/zone/client.h index 036f03baa..d2778d55a 100644 --- a/zone/client.h +++ b/zone/client.h @@ -238,6 +238,8 @@ public: void SetPrimaryWeaponOrnamentation(uint32 model_id); void SetSecondaryWeaponOrnamentation(uint32 model_id); + void SendChatLineBreak(uint16 color = Chat::White); + bool GotoPlayer(std::string player_name); //abstract virtual function implementations required by base abstract class @@ -446,6 +448,8 @@ public: inline float ProximityZ() const { return m_Proximity.z; } inline void ClearAllProximities() { entity_list.ProcessMove(this, glm::vec3(FLT_MAX, FLT_MAX, FLT_MAX)); m_Proximity = glm::vec3(FLT_MAX,FLT_MAX,FLT_MAX); } + void CheckVirtualZoneLines(); + /* Begin client modifiers */ @@ -1317,6 +1321,8 @@ public: Raid *p_raid_instance; + void ShowDevToolsMenu(); + protected: friend class Mob; void CalcItemBonuses(StatBonuses* newbon); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index b88105aaf..19773f3a4 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -918,6 +918,11 @@ void Client::CompleteConnect() worldserver.RequestTellQueue(GetName()); entity_list.ScanCloseMobs(close_mobs, this, true); + + if (GetGM()) { + ShowDevToolsMenu(); + } + } // connecting opcode handlers @@ -4640,6 +4645,9 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) { } CheckRegionTypeChanges(); } + + CheckVirtualZoneLines(); + } void Client::Handle_OP_CombatAbility(const EQApplicationPacket *app) diff --git a/zone/command.cpp b/zone/command.cpp index 8ee74854b..ec9af64e8 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -387,6 +387,7 @@ int command_init(void) command_add("showspellslist", "Shows spell list of targeted NPC", 100, command_showspellslist) || command_add("showstats", "- Show details about you or your target", 50, command_showstats) || command_add("showzonegloballoot", "Show GlobalLoot entires on this zone", 50, command_showzonegloballoot) || + command_add("showzonepoints", "Show zone points for current zone", 50, command_showzonepoints) || command_add("shutdown", "- Shut this zone process down", 150, command_shutdown) || command_add("size", "[size] - Change size of you or your target", 50, command_size) || command_add("spawn", "[name] [race] [level] [material] [hp] [gender] [class] [priweapon] [secweapon] [merchantid] - Spawn an NPC", 10, command_spawn) || @@ -5364,7 +5365,6 @@ void command_memspell(Client *c, const Seperator *sep) } } } - void command_save(Client *c, const Seperator *sep) { if (c->GetTarget() == 0) @@ -5399,6 +5399,152 @@ void command_showzonegloballoot(Client *c, const Seperator *sep) zone->ShowZoneGlobalLoot(c); } +void command_showzonepoints(Client *c, const Seperator *sep) +{ + auto &mob_list = entity_list.GetMobList(); + for (auto itr : mob_list) { + Mob *mob = itr.second; + if (mob->IsNPC() && mob->GetRace() == 2254) { + mob->Depop(); + } + } + + int found_zone_points = 0; + + c->Message(Chat::White, "Listing zone points..."); + c->SendChatLineBreak(); + + for (auto &virtual_zone_point : zone->virtual_zone_point_list) { + std::string zone_long_name = zone_store.GetZoneLongName(virtual_zone_point.target_zone_id); + + c->Message( + Chat::White, + fmt::format( + "Virtual Zone Point x [{}] y [{}] z [{}] h [{}] width [{}] height [{}] | To [{}] ({}) x [{}] y [{}] z [{}] h [{}]", + virtual_zone_point.x, + virtual_zone_point.y, + virtual_zone_point.z, + virtual_zone_point.width, + virtual_zone_point.height, + zone_long_name.c_str(), + virtual_zone_point.target_zone_id, + virtual_zone_point.target_x, + virtual_zone_point.target_y, + virtual_zone_point.target_z, + virtual_zone_point.target_heading + ).c_str() + ); + + std::string node_name = fmt::format("ZonePoint To [{}]", zone_long_name); + + float half_width = ((float) virtual_zone_point.width / 2); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x + half_width, + (float) virtual_zone_point.y + half_width, + virtual_zone_point.z, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x + half_width, + (float) virtual_zone_point.y - half_width, + virtual_zone_point.z, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x - half_width, + (float) virtual_zone_point.y - half_width, + virtual_zone_point.z, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x - half_width, + (float) virtual_zone_point.y + half_width, + virtual_zone_point.z, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x + half_width, + (float) virtual_zone_point.y + half_width, + (float) virtual_zone_point.z + (float) virtual_zone_point.height, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x + half_width, + (float) virtual_zone_point.y - half_width, + (float) virtual_zone_point.z + (float) virtual_zone_point.height, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x - half_width, + (float) virtual_zone_point.y - half_width, + (float) virtual_zone_point.z + (float) virtual_zone_point.height, + virtual_zone_point.heading + )); + + NPC::SpawnZonePointNodeNPC(node_name, glm::vec4( + (float) virtual_zone_point.x - half_width, + (float) virtual_zone_point.y + half_width, + (float) virtual_zone_point.z + (float) virtual_zone_point.height, + virtual_zone_point.heading + )); + + found_zone_points++; + } + + LinkedListIterator iterator(zone->zone_point_list); + iterator.Reset(); + while (iterator.MoreElements()) { + ZonePoint *zone_point = iterator.GetData(); + std::string zone_long_name = zone_store.GetZoneLongName(zone_point->target_zone_id); + std::string node_name = fmt::format("ZonePoint To [{}]", zone_long_name); + + NPC::SpawnZonePointNodeNPC( + node_name, glm::vec4( + zone_point->x, + zone_point->y, + zone_point->z, + zone_point->heading + ) + ); + + c->Message( + Chat::White, + fmt::format( + "Client Side Zone Point x [{}] y [{}] z [{}] h [{}] number [{}] | To [{}] ({}) x [{}] y [{}] z [{}] h [{}]", + zone_point->x, + zone_point->y, + zone_point->z, + zone_point->heading, + zone_point->number, + zone_long_name.c_str(), + zone_point->target_zone_id, + zone_point->target_x, + zone_point->target_y, + zone_point->target_z, + zone_point->target_heading + ).c_str() + ); + + iterator.Advance(); + + found_zone_points++; + } + + if (found_zone_points == 0) { + c->Message(Chat::White, "There were no zone points found..."); + } + + c->SendChatLineBreak(); + +} + void command_mystats(Client *c, const Seperator *sep) { if (c->GetTarget() && c->GetPet()) { @@ -5445,18 +5591,6 @@ void command_depopzone(Client *c, const Seperator *sep) void command_devtools(Client *c, const Seperator *sep) { - std::string menu_commands_search; - std::string window_toggle_command; - - /** - * Search entity commands - */ - menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list npcs", false, "NPC") + "] "; - menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list players", false, "Players") + "] "; - menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list corpses", false, "Corpses") + "] "; - menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list doors", false, "Doors") + "] "; - menu_commands_search += "[" + EQ::SayLinkEngine::GenerateQuestSaylink("#list objects", false, "Objects") + "] "; - std::string dev_tools_window_key = StringFormat("%i-dev-tools-window-disabled", c->AccountID()); /** @@ -5471,19 +5605,7 @@ void command_devtools(Client *c, const Seperator *sep) c->SetDevToolsWindowEnabled(true); } - /** - * Show window status - */ - window_toggle_command = "Disabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools enable_window", false, "Enable") + "] "; - if (c->IsDevToolsWindowEnabled()) { - window_toggle_command = "Enabled [" + EQ::SayLinkEngine::GenerateQuestSaylink("#devtools disable_window", false, "Disable") + "] "; - } - - /** - * Print menu - */ - c->Message(Chat::White, "| [Devtools] Window %s", window_toggle_command.c_str()); - c->Message(Chat::White, "| [Devtools] Search %s", menu_commands_search.c_str()); + c->ShowDevToolsMenu(); } void command_repop(Client *c, const Seperator *sep) diff --git a/zone/command.h b/zone/command.h index 36f84d934..87e01ae49 100644 --- a/zone/command.h +++ b/zone/command.h @@ -290,6 +290,7 @@ void command_showskills(Client *c, const Seperator *sep); void command_showspellslist(Client *c, const Seperator *sep); void command_showstats(Client *c, const Seperator *sep); void command_showzonegloballoot(Client *c, const Seperator *sep); +void command_showzonepoints(Client *c, const Seperator *sep); void command_shutdown(Client *c, const Seperator *sep); void command_size(Client *c, const Seperator *sep); void command_spawn(Client *c, const Seperator *sep); diff --git a/zone/npc.cpp b/zone/npc.cpp index b0b9e65f7..2cd5cd095 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -1118,6 +1118,44 @@ void NPC::SpawnGridNodeNPC(const glm::vec4 &position, int32 grid_number, int32 z entity_list.AddNPC(npc); } +void NPC::SpawnZonePointNodeNPC(std::string name, const glm::vec4 &position) +{ + auto npc_type = new NPCType; + memset(npc_type, 0, sizeof(NPCType)); + + char node_name[64]; + strn0cpy(node_name, name.c_str(), 64); + + strcpy(npc_type->name, entity_list.MakeNameUnique(node_name)); + + npc_type->current_hp = 4000000; + npc_type->max_hp = 4000000; + npc_type->race = 2254; + npc_type->gender = 2; + npc_type->class_ = 9; + npc_type->deity = 1; + npc_type->level = 200; + npc_type->npc_id = 0; + npc_type->loottable_id = 0; + npc_type->texture = 1; + npc_type->light = 1; + npc_type->size = 5; + npc_type->runspeed = 0; + npc_type->merchanttype = 1; + npc_type->bodytype = 1; + npc_type->show_name = true; + npc_type->findable = true; + + auto node_position = glm::vec4(position.x, position.y, position.z, position.w); + auto npc = new NPC(npc_type, nullptr, node_position, GravityBehavior::Flying); + + npc->name[strlen(npc->name)-3] = (char) NULL; + + npc->GiveNPCTypeData(npc_type); + + entity_list.AddNPC(npc); +} + NPC * NPC::SpawnNodeNPC(std::string name, std::string last_name, const glm::vec4 &position) { auto npc_type = new NPCType; memset(npc_type, 0, sizeof(NPCType)); diff --git a/zone/npc.h b/zone/npc.h index 37bf88f8e..12c6df6fd 100644 --- a/zone/npc.h +++ b/zone/npc.h @@ -115,6 +115,7 @@ public: static NPC *SpawnNodeNPC(std::string name, std::string last_name, const glm::vec4 &position); static void SpawnGridNodeNPC(const glm::vec4 &position, int32 grid_number, int32 zoffset); + static void SpawnZonePointNodeNPC(std::string name, const glm::vec4 &position); //abstract virtual function implementations requird by base abstract class virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, EQ::skills::SkillType attack_skill); diff --git a/zone/spells.cpp b/zone/spells.cpp index 8e70df06d..282d8d0d4 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -101,6 +101,7 @@ Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org) #endif #include "mob_movement_manager.h" +#include "client.h" extern Zone* zone; @@ -6004,3 +6005,4 @@ bool Client::IsLinkedSpellReuseTimerReady(uint32 timer_id) return GetPTimers().Expired(&database, pTimerLinkedSpellReuseStart + timer_id, false); } + diff --git a/zone/zone.cpp b/zone/zone.cpp index 01850dc93..9997f9ac9 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -58,6 +58,7 @@ #include "zone_reload.h" #include "../common/repositories/criteria/content_filter_criteria.h" #include "../common/repositories/content_flags_repository.h" +#include "../common/repositories/zone_points_repository.h" #include #include @@ -1944,41 +1945,59 @@ bool ZoneDatabase::LoadStaticZonePoints(LinkedList *zone_point_list { zone_point_list->Clear(); zone->numzonepoints = 0; + zone->virtual_zone_point_list.clear(); - std::string query = StringFormat( - "SELECT x, y, z, target_x, target_y, " - "target_z, target_zone_id, heading, target_heading, " - "number, target_instance, client_version_mask " - "FROM zone_points WHERE zone='%s' AND (version=%i OR version=-1) %s" - "ORDER BY number", - zonename, - version, - ContentFilterCriteria::apply().c_str() + auto zone_points = ZonePointsRepository::GetWhere( + fmt::format( + "zone = '{}' AND (version = {} OR version = -1) {} ORDER BY number", + zonename, + version, + ContentFilterCriteria::apply() + ) ); - auto results = QueryDatabase(query); - if (!results.Success()) { - return false; - } - - for (auto row = results.begin(); row != results.end(); ++row) { + for (auto &zone_point : zone_points) { auto zp = new ZonePoint; - zp->x = atof(row[0]); - zp->y = atof(row[1]); - zp->z = atof(row[2]); - zp->target_x = atof(row[3]); - zp->target_y = atof(row[4]); - zp->target_z = atof(row[5]); - zp->target_zone_id = atoi(row[6]); - zp->heading = atof(row[7]); - zp->target_heading = atof(row[8]); - zp->number = atoi(row[9]); - zp->target_zone_instance = atoi(row[10]); - zp->client_version_mask = (uint32)strtoul(row[11], nullptr, 0); + zp->x = zone_point.x; + zp->y = zone_point.y; + zp->z = zone_point.z; + zp->target_x = zone_point.target_x; + zp->target_y = zone_point.target_y; + zp->target_z = zone_point.target_z; + zp->target_zone_id = zone_point.target_zone_id; + zp->heading = zone_point.heading; + zp->target_heading = zone_point.target_heading; + zp->number = zone_point.number; + zp->target_zone_instance = zone_point.target_instance; + zp->client_version_mask = zone_point.client_version_mask; + zp->is_virtual = zone_point.is_virtual > 0; + zp->height = zone_point.height; + zp->width = zone_point.width; + + LogZonePoints( + "Loading ZP x [{}] y [{}] z [{}] heading [{}] target x y z zone_id instance_id [{}] [{}] [{}] [{}] [{}] number [{}] is_virtual [{}] height [{}] width [{}]", + zp->x, + zp->y, + zp->z, + zp->heading, + zp->target_x, + zp->target_y, + zp->target_z, + zp->target_zone_id, + zp->target_zone_instance, + zp->number, + zp->is_virtual ? "true" : "false", + zp->height, + zp->width + ); + + if (zone_point.is_virtual) { + zone->virtual_zone_point_list.emplace_back(zone_point); + continue; + } zone_point_list->Insert(zp); - zone->numzonepoints++; } @@ -2671,3 +2690,4 @@ void Zone::SetInstanceTimeRemaining(uint32 instance_time_remaining) { Zone::instance_time_remaining = instance_time_remaining; } + diff --git a/zone/zone.h b/zone/zone.h index 75fd9d4cb..821165fe2 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -28,6 +28,7 @@ #include "zone_store.h" #include "../common/repositories/grid_repository.h" #include "../common/repositories/grid_entries_repository.h" +#include "../common/repositories/zone_points_repository.h" #include "qglobals.h" #include "spawn2.h" #include "spawngroup.h" @@ -48,6 +49,9 @@ struct ZonePoint { uint16 target_zone_id; int32 target_zone_instance; uint32 client_version_mask; + bool is_virtual; + int height; + int width; }; struct ZoneClientAuth_Struct { @@ -171,10 +175,12 @@ public: int SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charges, bool sold = false); int32 MobsAggroCount() { return aggroedmobs; } - IPathfinder *pathing; - LinkedList NPCEmoteList; - LinkedList spawn2_list; - LinkedList zone_point_list; + IPathfinder *pathing; + LinkedList NPCEmoteList; + LinkedList spawn2_list; + LinkedList zone_point_list; + std::vector virtual_zone_point_list; + Map *zonemap; MercTemplate *GetMercTemplate(uint32 template_id); NewZone_Struct newzone_data; From e319746ca944c1a46daddaf90f5c93af51052ed9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 16 Aug 2020 00:16:50 -0500 Subject: [PATCH 250/272] Typos --- utils/sql/db_update_manifest.txt | 2 +- zone/command.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 7a3824470..58cb8930f 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -409,7 +409,7 @@ 9153|2020_05_09_items_subtype.sql|SHOW COLUMNS from `items` LIKE 'UNK219'|not_empty| 9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| 9155|2020_08_15_lootdrop_level_filtering.sql|SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'|empty| -9156|2020_08_16_virtual_zonepoints.sql|SHOW COLUMNS from `zonepoints` LIKE 'is_virtual'|empty| +9156|2020_08_16_virtual_zonepoints.sql|SHOW COLUMNS from `zone_points` LIKE 'is_virtual'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/zone/command.cpp b/zone/command.cpp index ec9af64e8..0a240f33b 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -5424,6 +5424,7 @@ void command_showzonepoints(Client *c, const Seperator *sep) virtual_zone_point.x, virtual_zone_point.y, virtual_zone_point.z, + virtual_zone_point.heading, virtual_zone_point.width, virtual_zone_point.height, zone_long_name.c_str(), From efdead0b0a630648b3d8c18a5a8aec6b63a8d6e8 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 16 Aug 2020 01:12:30 -0500 Subject: [PATCH 251/272] Add expansion info --- zone/client.cpp | 10 ++++++++-- zone/zoning.cpp | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index fef09f14d..a413c7899 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -56,6 +56,7 @@ extern volatile bool RunLoops; #include "quest_parser_collection.h" #include "queryserv.h" #include "mob_movement_manager.h" +#include "../common/content/world_content_service.h" extern QueryServ* QServ; extern EntityList entity_list; @@ -9427,7 +9428,12 @@ void Client::ShowDevToolsMenu() * Print menu */ SendChatLineBreak(); - Message(Chat::White, "| [Devtools] Window %s Show this menu with %s", window_toggle_command.c_str(), EQ::SayLinkEngine::GenerateQuestSaylink("#dev", false, "#dev").c_str()); + Message( + Chat::White, "| [Devtools] Window %s Show this menu with %s | Current expansion [%s]", + window_toggle_command.c_str(), + EQ::SayLinkEngine::GenerateQuestSaylink("#dev", false, "#dev").c_str(), + content_service.GetCurrentExpansionName().c_str() + ); Message(Chat::White, "| [Devtools] Search %s", menu_commands_search.c_str()); Message(Chat::White, "| [Devtools] Show %s", menu_commands_show.c_str()); Message(Chat::White, "| [Devtools] Reload %s", reload_commands_show.c_str()); @@ -9437,4 +9443,4 @@ void Client::ShowDevToolsMenu() void Client::SendChatLineBreak(uint16 color) { Message(color, "------------------------------------------------"); -} \ No newline at end of file +} diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 2e0b46d78..ac8732e82 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -336,6 +336,10 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { } } + if (content_service.GetCurrentExpansion() >= Expansion::Classic && GetGM()) { + LogInfo("[{}] Bypassing Expansion zone checks because GM status is set", GetCleanName()); + } + if(myerror == 1) { //we have successfully zoned DoZoneSuccess(zc, target_zone_id, target_instance_id, dest_x, dest_y, dest_z, dest_h, ignorerestrictions); From bd4810351d17bfd6518c7c5d9316de5555a79f34 Mon Sep 17 00:00:00 2001 From: Trust Date: Sun, 16 Aug 2020 18:32:26 -0400 Subject: [PATCH 252/272] [Aggro] PercentalHeal should be included in aggro generation Per January 15th 2003 Patch Notes: "NPCs will now notice Druid and Shaman Percentage Heal spells in a manner similar to traditional healing spells." Added SE_PercetalHeal to the same CheckHealAggroAmount as SE_CurrentHP to be similar to traditional healing spells. --- zone/aggro.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zone/aggro.cpp b/zone/aggro.cpp index a3aa301ac..d23732df4 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -1144,7 +1144,9 @@ int32 Mob::CheckHealAggroAmount(uint16 spell_id, Mob *target, uint32 heal_possib for (int o = 0; o < EFFECT_COUNT; o++) { switch (spells[spell_id].effectid[o]) { - case SE_CurrentHP: { + case SE_CurrentHP: + case SE_PercentalHeal: + { if (heal_possible == 0) { AggroAmount += 1; break; From 78776df1075b049ab001a4979484ce9c5febc377 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 16 Aug 2020 20:04:49 -0500 Subject: [PATCH 253/272] Update world content service API's to consider all expansions enabled --- common/content/world_content_service.h | 54 +++++++++++++------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/common/content/world_content_service.h b/common/content/world_content_service.h index 662ec20cc..1edc91160 100644 --- a/common/content/world_content_service.h +++ b/common/content/world_content_service.h @@ -102,33 +102,33 @@ public: int GetCurrentExpansion() const; void SetCurrentExpansion(int current_expansion); - bool IsClassicEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Classic; } - bool IsTheRuinsOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheRuinsOfKunark; } - bool IsTheScarsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheScarsOfVelious; } - bool IsTheShadowsOfLuclinEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShadowsOfLuclin; } - bool IsThePlanesOfPowerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ThePlanesOfPower; } - bool IsTheLegacyOfYkeshaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheLegacyOfYkesha; } - bool IsLostDungeonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::LostDungeonsOfNorrath; } - bool IsGatesOfDiscordEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::GatesOfDiscord; } - bool IsOmensOfWarEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::OmensOfWar; } - bool IsDragonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DragonsOfNorrath; } - bool IsDepthsOfDarkhollowEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DepthsOfDarkhollow; } - bool IsProphecyOfRoEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ProphecyOfRo; } - bool IsTheSerpentsSpineEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheSerpentsSpine; } - bool IsTheBuriedSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBuriedSea; } - bool IsSecretsOfFaydwerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SecretsOfFaydwer; } - bool IsSeedsOfDestructionEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SeedsOfDestruction; } - bool IsUnderfootEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Underfoot; } - bool IsHouseOfThuleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::HouseOfThule; } - bool IsVeilOfAlarisEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::VeilOfAlaris; } - bool IsRainOfFearEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RainOfFear; } - bool IsCallOfTheForsakenEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::CallOfTheForsaken; } - bool IsTheDarkendSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheDarkendSea; } - bool IsTheBrokenMirrorEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBrokenMirror; } - bool IsEmpiresOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::EmpiresOfKunark; } - bool IsRingOfScaleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RingOfScale; } - bool IsTheBurningLandsEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBurningLands; } - bool IsTormentOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TormentOfVelious; } + bool IsClassicEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Classic || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheRuinsOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheRuinsOfKunark || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheScarsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheScarsOfVelious || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheShadowsOfLuclinEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShadowsOfLuclin || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsThePlanesOfPowerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ThePlanesOfPower || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheLegacyOfYkeshaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheLegacyOfYkesha || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsLostDungeonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::LostDungeonsOfNorrath || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsGatesOfDiscordEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::GatesOfDiscord || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsOmensOfWarEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::OmensOfWar || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsDragonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DragonsOfNorrath || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsDepthsOfDarkhollowEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DepthsOfDarkhollow || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsProphecyOfRoEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ProphecyOfRo || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheSerpentsSpineEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheSerpentsSpine || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheBuriedSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBuriedSea || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsSecretsOfFaydwerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SecretsOfFaydwer || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsSeedsOfDestructionEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SeedsOfDestruction || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsUnderfootEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Underfoot || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsHouseOfThuleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::HouseOfThule || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsVeilOfAlarisEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::VeilOfAlaris || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsRainOfFearEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RainOfFear || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsCallOfTheForsakenEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::CallOfTheForsaken || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheDarkendSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheDarkendSea || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheBrokenMirrorEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBrokenMirror || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsEmpiresOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::EmpiresOfKunark || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsRingOfScaleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RingOfScale || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTheBurningLandsEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBurningLands || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } + bool IsTormentOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TormentOfVelious || GetCurrentExpansion() == Expansion::EXPANSION_ALL; } bool IsCurrentExpansionClassic() { return current_expansion == Expansion::ExpansionNumber::Classic; } bool IsCurrentExpansionTheRuinsOfKunark() { return current_expansion == Expansion::ExpansionNumber::TheRuinsOfKunark; } From f7e997fba1cf8bed2031b9fa8769bd23cbb5d6ba Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Mon, 17 Aug 2020 18:04:52 -0400 Subject: [PATCH 254/272] Fix NPC AI casting of ST_AEClientV1 As noted, I think we do this check incorrectly, but this should work fine and matches other similar spells, let's get it good enough first. --- zone/mob_ai.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zone/mob_ai.cpp b/zone/mob_ai.cpp index df4a70e12..994724f0d 100644 --- a/zone/mob_ai.cpp +++ b/zone/mob_ai.cpp @@ -117,7 +117,8 @@ bool NPC::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes, bool bInnates ( (spells[AIspells[i].spellid].targettype == ST_HateList || spells[AIspells[i].spellid].targettype == ST_AETargetHateList) || ( - (spells[AIspells[i].spellid].targettype==ST_AECaster || spells[AIspells[i].spellid].targettype==ST_AEBard) + // note: I think this check is actually wrong and we should be checking range instead in all cases, BUT if range is 0, range check is skipped? Works for now + (spells[AIspells[i].spellid].targettype==ST_AECaster || spells[AIspells[i].spellid].targettype==ST_AEBard || spells[AIspells[i].spellid].targettype==ST_AEClientV1) && dist2 <= spells[AIspells[i].spellid].aoerange*spells[AIspells[i].spellid].aoerange ) || dist2 <= spells[AIspells[i].spellid].range*spells[AIspells[i].spellid].range From 9ab61d4ed4262247e7f64c6a16b52d2091c40588 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 18 Aug 2020 11:15:33 -0400 Subject: [PATCH 255/272] Fix so an untargettable mob is not opened for trade when client pressed the 'u' key. Discovered this on untargettable mobs at doors. --- zone/client_packet.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 19773f3a4..47066a5aa 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -14246,12 +14246,19 @@ void Client::Handle_OP_TradeRequest(const EQApplicationPacket *app) // Client requesting a trade session from an npc/client // Trade session not started until OP_TradeRequestAck is sent - CommonBreakInvisible(); - - // Pass trade request on to recipient TradeRequest_Struct* msg = (TradeRequest_Struct*)app->pBuffer; Mob* tradee = entity_list.GetMob(msg->to_mob_id); + // If the tradee is an untargettable mob - ignore + // Helps in cases where servers use invisible_man, body type 11 for quests + // and the client opens a trade by mistake. + if (tradee && (tradee->GetBodyType() == 11)) { + return; + } + + CommonBreakInvisible(); + + // Pass trade request on to recipient if (tradee && tradee->IsClient()) { tradee->CastToClient()->QueuePacket(app); } From 539de20a11e5a272d524ca8157e5e04d1d357000 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Tue, 18 Aug 2020 23:32:45 -0400 Subject: [PATCH 256/272] Fix memory leak for virtual zone line branch --- zone/zone.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/zone/zone.cpp b/zone/zone.cpp index d331d7866..66644edf1 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -2001,6 +2001,7 @@ bool ZoneDatabase::LoadStaticZonePoints(LinkedList *zone_point_list if (zone_point.is_virtual) { zone->virtual_zone_point_list.emplace_back(zone_point); + safe_delete(zp); continue; } From 7cc23fcbebd438e3fcd246aa70d9fe6ee37d855c Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Wed, 19 Aug 2020 14:48:28 -0400 Subject: [PATCH 257/272] Removed duplicate code for pruning merhantlist_temp The code already exists, guarded by a rule. --- world/main.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 49e02859f..0ec3ae0bf 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -327,9 +327,6 @@ int main(int argc, char** argv) { } } - LogInfo("Purging expired data buckets"); - database.PurgeAllDeletedDataBuckets(); - LogInfo("Loading zones"); world_store.LoadZones(); From b8586bf9cb0b8d53103525ffd1272e3aed4f193d Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Wed, 19 Aug 2020 14:57:21 -0400 Subject: [PATCH 258/272] Update main.cpp --- world/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 0ec3ae0bf..03ec9fbee 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -326,7 +326,10 @@ int main(int argc, char** argv) { LogInfo("Current hotfix in use: [{}]", hotfix_name.c_str()); } } - + + LogInfo("Purging expired data buckets"); + database.PurgeAllDeletedDataBuckets(); + LogInfo("Loading zones"); world_store.LoadZones(); @@ -341,9 +344,6 @@ int main(int argc, char** argv) { database.ClearInvSnapshots(); LogInfo("Loading items"); - LogInfo("Purging player sold merchant items"); - MerchantlistTempRepository::Truncate(); - if (!content_db.LoadItems(hotfix_name)) { LogError("Error: Could not load item data. But ignoring"); } From 9be5ac4ca641461dd25e1117bfa8b2e7ac70393d Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Wed, 19 Aug 2020 14:58:04 -0400 Subject: [PATCH 259/272] Update main.cpp --- world/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/world/main.cpp b/world/main.cpp index 03ec9fbee..b94ecea4c 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -326,10 +326,10 @@ int main(int argc, char** argv) { LogInfo("Current hotfix in use: [{}]", hotfix_name.c_str()); } } - + LogInfo("Purging expired data buckets"); database.PurgeAllDeletedDataBuckets(); - + LogInfo("Loading zones"); world_store.LoadZones(); From 84a75f2a778e6646bf4ba4392140c48c38268c01 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Wed, 19 Aug 2020 17:13:28 -0400 Subject: [PATCH 260/272] Fix missing arg to client message in #task --- zone/command.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/command.cpp b/zone/command.cpp index 0a240f33b..9b42adacd 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -9966,7 +9966,7 @@ void command_task(Client *c, const Seperator *sep) { if(!strcasecmp(sep->arg[2], "task") && (sep->arg[3][0] != '\0')) { int TaskID = atoi(sep->arg[3]); if((TaskID > 0) && (TaskID < MAXTASKS)) { - c->Message(Chat::Yellow, "Sending reload task %i to world"); + c->Message(Chat::Yellow, "Sending reload task %i to world", TaskID); worldserver.SendReloadTasks(RELOADTASKS, TaskID); c->Message(Chat::Yellow, "Back again"); return; From 51356610b29bd162b178bde8d900d386440140fd Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 21 Aug 2020 00:23:13 -0500 Subject: [PATCH 261/272] Fix overflow issue with character corpse creation using the wrong struct in allocation --- zone/corpse.cpp | 8 ++++---- zone/loottables.cpp | 27 +++++++++++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/zone/corpse.cpp b/zone/corpse.cpp index cfcfb0397..e0e1d1992 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -621,7 +621,7 @@ bool Corpse::Save() { end = itemlist.end(); for (; cur != end; ++cur) { ServerLootItem_Struct* item = *cur; - memcpy((char*)&dbpc->items[x++], (char*)item, sizeof(ServerLootItem_Struct)); + memcpy((char*)&dbpc->items[x++], (char*)item, sizeof(player_lootitem::ServerLootItem_Struct)); } /* Create New Corpse*/ @@ -1573,10 +1573,10 @@ void Corpse::UpdateEquipmentLight() for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { if ((*iter)->equip_slot < EQ::invslot::EQUIPMENT_BEGIN || (*iter)->equip_slot > EQ::invslot::EQUIPMENT_END) { continue; } if ((*iter)->equip_slot == EQ::invslot::slotAmmo) { continue; } - + auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } - + if (EQ::lightsource::IsLevelGreater(item->Light, m_Light.Type[EQ::lightsource::LightEquipment])) m_Light.Type[EQ::lightsource::LightEquipment] = item->Light; } @@ -1584,7 +1584,7 @@ void Corpse::UpdateEquipmentLight() uint8 general_light_type = 0; for (auto iter = itemlist.begin(); iter != itemlist.end(); ++iter) { if ((*iter)->equip_slot < EQ::invslot::GENERAL_BEGIN || (*iter)->equip_slot > EQ::invslot::GENERAL_END) { continue; } - + auto item = database.GetItem((*iter)->item_id); if (item == nullptr) { continue; } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index b7c343810..b4e0f00f0 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -523,22 +523,37 @@ void NPC::AddLootDrop( } } -void NPC::AddItem(const EQ::ItemData* item, uint16 charges, bool equipitem) { +void NPC::AddItem(const EQ::ItemData *item, uint16 charges, bool equipitem) +{ //slot isnt needed, its determined from the item. auto loot_drop_entry = NPC::NewLootDropEntry(); - loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + loot_drop_entry.item_charges = charges; AddLootDrop(item, &itemlist, loot_drop_entry, true); } -void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6) { +void NPC::AddItem( + uint32 itemid, + uint16 charges, + bool equipitem, + uint32 aug1, + uint32 aug2, + uint32 aug3, + uint32 aug4, + uint32 aug5, + uint32 aug6 +) +{ //slot isnt needed, its determined from the item. - const EQ::ItemData * i = database.GetItem(itemid); - if(i == nullptr) + const EQ::ItemData *i = database.GetItem(itemid); + if (i == nullptr) { return; + } auto loot_drop_entry = NPC::NewLootDropEntry(); - loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + loot_drop_entry.equip_item = static_cast(equipitem ? 1 : 0); + loot_drop_entry.item_charges = charges; AddLootDrop(i, &itemlist, loot_drop_entry, true, aug1, aug2, aug3, aug4, aug5, aug6); } From 32407dbb56d609d82ca2f2f0a591c2f69b0d593e Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 21 Aug 2020 01:04:18 -0500 Subject: [PATCH 262/272] Add rule Character:FinalExpMultiplier - Added on top of everything else, easy for setting EXP events --- common/ruletypes.h | 1 + zone/exp.cpp | 60 ++++++++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index d31d27e8e..016fefc7d 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -52,6 +52,7 @@ RULE_BOOL(Character, LeaveCorpses, true, "Setting whether you leave a corpse beh RULE_BOOL(Character, LeaveNakedCorpses, false, "Setting whether you leave a corpse without items") RULE_INT(Character, MaxDraggedCorpses, 2, "Maximum number of corpses you can drag at once") RULE_REAL(Character, DragCorpseDistance, 400, "If a player is using /corpsedrag and moving, the corpse will not move until the player exceeds this distance") +RULE_REAL(Character, FinalExpMultiplier, 1, "Added on top of everything else, easy for setting EXP events") RULE_REAL(Character, ExpMultiplier, 0.5, "If greater than 0, the experience gained is multiplied by this value. ") RULE_REAL(Character, AAExpMultiplier, 0.5, "If greater than 0, the AA experience gained is multiplied by this value. ") RULE_REAL(Character, GroupExpMultiplier, 0.5, "The experience in a group is multiplied by this value in addition to the group multiplier. The group multiplier is: 2 members=x 1.2, 3=x1.4, 4=x1.6, 5=x1.8, 6=x2.16") diff --git a/zone/exp.cpp b/zone/exp.cpp index 1a314b479..8f722b1f3 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -194,6 +194,10 @@ uint32 Client::CalcEXP(uint8 conlevel) { } } + if (RuleR(Character, FinalExpMultiplier) >= 0) { + in_add_exp *= RuleR(Character, FinalExpMultiplier); + } + return in_add_exp; } @@ -311,6 +315,10 @@ void Client::CalculateStandardAAExp(uint32 &add_aaxp, uint8 conlevel, bool resex } } + if (RuleR(Character, FinalExpMultiplier) >= 0) { + add_aaxp *= RuleR(Character, FinalExpMultiplier); + } + add_aaxp = (uint32)(RuleR(Character, AAExpMultiplier) * add_aaxp * aatotalmod); } @@ -466,6 +474,10 @@ void Client::CalculateExp(uint32 in_add_exp, uint32 &add_exp, uint32 &add_aaxp, } } + if (RuleR(Character, FinalExpMultiplier) >= 0) { + add_exp *= RuleR(Character, FinalExpMultiplier); + } + add_exp = GetEXP() + add_exp; } @@ -563,22 +575,22 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) { } if (isrezzexp) { - if (RuleI(Character, ShowExpValues) > 0) + if (RuleI(Character, ShowExpValues) > 0) Message(Chat::Experience, "You regain %s experience from resurrection. %s", exp_amount_message.c_str(), exp_percent_message.c_str()); else MessageString(Chat::Experience, REZ_REGAIN); } else { if (membercount > 1) { - if (RuleI(Character, ShowExpValues) > 0) + if (RuleI(Character, ShowExpValues) > 0) Message(Chat::Experience, "You have gained %s party experience! %s", exp_amount_message.c_str(), exp_percent_message.c_str()); else MessageString(Chat::Experience, GAIN_GROUPXP); } else if (IsRaidGrouped()) { - if (RuleI(Character, ShowExpValues) > 0) + if (RuleI(Character, ShowExpValues) > 0) Message(Chat::Experience, "You have gained %s raid experience! %s", exp_amount_message.c_str(), exp_percent_message.c_str()); else MessageString(Chat::Experience, GAIN_RAIDEXP); - } + } else { - if (RuleI(Character, ShowExpValues) > 0) + if (RuleI(Character, ShowExpValues) > 0) Message(Chat::Experience, "You have gained %s experience! %s", exp_amount_message.c_str(), exp_percent_message.c_str()); else MessageString(Chat::Experience, GAIN_XP); } @@ -660,7 +672,7 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) { if (RuleB(AA, SoundForAAEarned)) { SendSound(); } - + /* QS: PlayerLogAARate */ if (RuleB(QueryServ, PlayerLogAARate)){ int add_points = (m_pp.aapoints - last_unspentAA); @@ -801,7 +813,7 @@ void Client::SetLevel(uint8 set_level, bool command) /* QS: PlayerLogLevels */ if (RuleB(QueryServ, PlayerLogLevels)){ std::string event_desc = StringFormat("Leveled UP :: to Level:%i from Level:%i in zoneid:%i instid:%i", set_level, m_pp.level, this->GetZoneID(), this->GetInstanceID()); - QServ->PlayerLogEvent(Player_Log_Levels, this->CharacterID(), event_desc); + QServ->PlayerLogEvent(Player_Log_Levels, this->CharacterID(), event_desc); } } else if (set_level < m_pp.level){ @@ -839,7 +851,7 @@ void Client::SetLevel(uint8 set_level, bool command) SetHP(CalcMaxHP()); // Why not, lets give them a free heal } - if (RuleI(World, PVPMinLevel) > 0 && level >= RuleI(World, PVPMinLevel) && m_pp.pvp == 0) SetPVP(true); + if (RuleI(World, PVPMinLevel) > 0 && level >= RuleI(World, PVPMinLevel) && m_pp.pvp == 0) SetPVP(true); DoTributeUpdate(); SendHPUpdate(); @@ -943,32 +955,34 @@ uint32 Client::GetEXPForLevel(uint16 check_level) return finalxp; } -void Client::AddLevelBasedExp(uint8 exp_percentage, uint8 max_level, bool ignore_mods) -{ +void Client::AddLevelBasedExp(uint8 exp_percentage, uint8 max_level, bool ignore_mods) +{ uint32 award; uint32 xp_for_level; - if (exp_percentage > 100) - { - exp_percentage = 100; - } + if (exp_percentage > 100) + { + exp_percentage = 100; + } if (!max_level || GetLevel() < max_level) - { - max_level = GetLevel(); - } + { + max_level = GetLevel(); + } xp_for_level = GetEXPForLevel(max_level + 1) - GetEXPForLevel(max_level); - award = xp_for_level * exp_percentage / 100; + award = xp_for_level * exp_percentage / 100; - if(RuleB(Zone, LevelBasedEXPMods) && !ignore_mods) - { - if(zone->level_exp_mod[GetLevel()].ExpMod) - { + if (RuleB(Zone, LevelBasedEXPMods) && !ignore_mods) { + if (zone->level_exp_mod[GetLevel()].ExpMod) { award *= zone->level_exp_mod[GetLevel()].ExpMod; } } + if (RuleR(Character, FinalExpMultiplier) >= 0) { + award *= RuleR(Character, FinalExpMultiplier); + } + uint32 newexp = GetEXP() + award; SetEXP(newexp, GetAAXP()); } @@ -1126,7 +1140,7 @@ uint32 Client::GetCharMaxLevelFromQGlobal() { while(iter != globalMap.end()) { if((*iter).name.compare("CharMaxLevel") == 0){ return atoi((*iter).value.c_str()); - } + } ++iter; ++gcount; } From ebf1cc2bc662a113ad1c7dcbd0f9aff97d84c054 Mon Sep 17 00:00:00 2001 From: Xackery Xtal Date: Sun, 23 Aug 2020 18:17:23 -0700 Subject: [PATCH 263/272] changed build dir to /bin, updated peq db dump --- .vscode/tasks.json | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1c6e5c871..a955aa60c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,7 +6,7 @@ { "label": "make", "type": "shell", - "command": "cd build && make", + "command": "cd bin && make", "group": { "kind": "build", "isDefault": true @@ -18,7 +18,7 @@ { "label": "make clean", "type": "shell", - "command": "cd build && make clean", + "command": "cd bin && make clean", "group": { "kind": "build", "isDefault": true @@ -30,7 +30,7 @@ { "label": "cmake", "type": "shell", - "command": "mkdir -p build && cd build && rm CMakeCache.txt && cmake -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -G 'Unix Makefiles' ..", + "command": "mkdir -p bin && cd bin && rm CMakeCache.txt && cmake -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -G 'Unix Makefiles' ..", "group": { "kind": "build", "isDefault": true @@ -52,7 +52,7 @@ { "label": "download maps", "type": "shell", - "command": "mkdir -p build/bin && cd build/bin && wget https://codeload.github.com/Akkadius/EQEmuMaps/zip/master -O maps.zip && unzip -o maps.zip && rm ./maps -rf && mv EQEmuMaps-master maps && rm maps.zip", + "command": "mkdir -p bin && cd bin && wget https://codeload.github.com/Akkadius/EQEmuMaps/zip/master -O maps.zip && unzip -o maps.zip && rm ./maps -rf && mv EQEmuMaps-master maps && rm maps.zip", "group": { "kind": "build", "isDefault": true @@ -64,7 +64,7 @@ { "label": "download quests", "type": "shell", - "command": "mkdir -p build/bin && cd build/bin && cd server && git -C ./quests pull 2> /dev/null || git clone https://github.com/ProjectEQ/projecteqquests.git quests", + "command": "mkdir -p bin && cd bin && cd server && git -C ./quests pull 2> /dev/null || git clone https://github.com/ProjectEQ/projecteqquests.git quests", "group": { "kind": "build", "isDefault": true @@ -76,7 +76,7 @@ { "label": "download eqemu_config", "type": "shell", - "command": "mkdir -p build/bin && cd build/bin && wget --no-check-certificate https://raw.githubusercontent.com/Akkadius/EQEmuInstall/master/eqemu_config_docker.json -O eqemu_config.json", + "command": "mkdir -p bin && cd bin && wget --no-check-certificate https://raw.githubusercontent.com/Akkadius/EQEmuInstall/master/eqemu_config_docker.json -O eqemu_config.json", "group": { "kind": "build", "isDefault": true @@ -88,7 +88,7 @@ { "label": "rebuild database (mariadb must be started)", "type": "shell", - "command": "mkdir -p build/bin && cd build/bin && docker run -i --rm --privileged -v ${HOST_PROJECT_PATH}/build/bin:/src --network=eqemu -it eqemu/server:0.0.3 bash -c './eqemu_server.pl source_peq_db && ./eqemu_server.pl check_db_updates && ./eqemu_server.pl linux_login_server_setup'", + "command": "mkdir -p bin && cd bin && docker run -i --rm --privileged -v ${HOST_PROJECT_PATH}/bin:/src --network=eqemu -it eqemu/server:0.0.3 bash -c './eqemu_server.pl source_peq_db && ./eqemu_server.pl check_db_updates && ./eqemu_server.pl linux_login_server_setup'", "group": { "kind": "build", "isDefault": true @@ -100,7 +100,7 @@ { "label": "zone 7000", "type": "shell", - "command": "docker stop zone7000 | true && docker network create eqemu | true && docker run -i --rm --name zone7000 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/build/bin:/src --ulimit core=10000000 --network=eqemu -p 7000:7000/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7000:7000", + "command": "docker stop zone7000 | true && docker network create eqemu | true && docker run -i --rm --name zone7000 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu -p 7000:7000/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7000:7000", "group": { "kind": "test", "isDefault": true @@ -109,7 +109,7 @@ { "label": "zone 7001", "type": "shell", - "command": "docker stop zone7001 | true && docker network create eqemu | true && docker run -i --rm --name zone7001 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/build/bin:/src --ulimit core=10000000 --network=eqemu -p 7001:7001/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7001:7001", + "command": "docker stop zone7001 | true && docker network create eqemu | true && docker run -i --rm --name zone7001 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu -p 7001:7001/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7001:7001", "group": { "kind": "test", "isDefault": true @@ -118,7 +118,7 @@ { "label": "loginserver", "type": "shell", - "command": "docker stop loginserver | true && docker network create eqemu | true && docker run -i --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/build/bin:/src --ulimit core=10000000 --network=eqemu --name loginserver -p 5999:5999/udp -p 5998:5998/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./loginserver", + "command": "docker stop loginserver | true && docker network create eqemu | true && docker run -i --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu --name loginserver -p 5999:5999/udp -p 5998:5998/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./loginserver", "group": { "kind": "test", "isDefault": true @@ -127,7 +127,7 @@ { "label": "shared_memory, world", "type": "shell", - "command": "docker stop sharedmemory | true && docker stop world | true && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/build/bin:/src --network=eqemu --name sharedmemory eqemu/server:0.0.3 ./shared_memory && docker run --rm -v ${HOST_PROJECT_PATH}/build/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name world -p 9000:9000 -p 9000:9000/udp -p 9001:9001 -p 9080:9080 eqemu/server:0.0.3 gdb -ex run ./world", + "command": "docker stop sharedmemory | true && docker stop world | true && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --network=eqemu --name sharedmemory eqemu/server:0.0.3 ./shared_memory && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name world -p 9000:9000 -p 9000:9000/udp -p 9001:9001 -p 9080:9080 eqemu/server:0.0.3 gdb -ex run ./world", "group": { "kind": "test", "isDefault": true @@ -136,7 +136,7 @@ { "label": "queryserv", "type": "shell", - "command": "docker stop queryserv | true && docker run --rm -v ${HOST_PROJECT_PATH}/build/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name queryserv eqemu/server:0.0.3 gdb -ex run ./queryserv", + "command": "docker stop queryserv | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name queryserv eqemu/server:0.0.3 gdb -ex run ./queryserv", "group": { "kind": "test", "isDefault": true @@ -145,7 +145,16 @@ { "label": "mariadb", "type": "shell", - "command": "docker stop mariadb | true && cd build/bin && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/build/bin/db:/bitnami/mariadb -p 3306:3306 -e MARIADB_DATABASE=peq -e MARIADB_USER=eqemu -e MARIADB_PASSWORD=eqemupass -e ALLOW_EMPTY_PASSWORD=yes --name mariadb --network=eqemu bitnami/mariadb:latest", + "command": "docker stop mariadb | true && cd bin && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin/db:/bitnami/mariadb -p 3306:3306 -e MARIADB_DATABASE=peq -e MARIADB_USER=eqemu -e MARIADB_PASSWORD=eqemupass -e ALLOW_EMPTY_PASSWORD=yes --name mariadb --network=eqemu bitnami/mariadb:latest", + "group": { + "kind": "test", + "isDefault": true + } + }, + { + "label": "ucs", + "type": "shell", + "command": "docker stop ucs | true && cd bin && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src -p 7778:7778 --name ucs --network=eqemu eqemu/server:0.0.3 gdb -ex run ./ucs", "group": { "kind": "test", "isDefault": true From 29f7bc7a9c60aee06d5d871addda69dc72681279 Mon Sep 17 00:00:00 2001 From: Noudess Date: Mon, 31 Aug 2020 13:39:42 -0400 Subject: [PATCH 264/272] Fix bugged pet window sit button and pet sit based regen. --- zone/attack.cpp | 28 ++++++++++++++++++++++++++++ zone/client_packet.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/zone/attack.cpp b/zone/attack.cpp index 86c326e53..951d922ed 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -3445,6 +3445,22 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const // emote goes with every one ... even npcs entity_list.MessageClose(this, true, RuleI(Range, SpellMessages), Chat::Emote, "%s beams a smile at %s", attacker->GetCleanName(), this->GetCleanName()); } + + // If a client pet is damaged while sitting, stand, fix sit button, + // and remove sitting regen. Removes bug where client clicks sit + // during battle and gains pet hp-regen and bugs the sit button. + if (IsPet()) { + Mob *owner = this->GetOwner(); + if (owner && owner->IsClient()) { + if (GetPetOrder() == SPO_Sit) { + SetPetOrder(SPO_Follow); + } + // fix GUI sit button to be unpressed and stop sitting regen + owner->CastToClient()->SetPetCommandState(PET_BUTTON_SIT, 0); + SetAppearance(eaStanding); + } + } + } //end `if there is some damage being done and theres anattacker person involved` Mob *pet = GetPet(); @@ -3455,6 +3471,18 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const { if (!pet->IsHeld()) { LogAggro("Sending pet [{}] into battle due to attack", pet->GetName()); + if (IsClient()) { + // if pet was sitting his new mode is follow + // following after the battle (live verified) + if (pet->GetPetOrder() == SPO_Sit) { + pet->SetPetOrder(SPO_Follow); + } + + // fix GUI sit button to be unpressed and stop sitting regen + this->CastToClient()->SetPetCommandState(PET_BUTTON_SIT, 0); + pet->SetAppearance(eaStanding); + } + pet->AddToHateList(attacker, 1, 0, true, false, false, spell_id); pet->SetTarget(attacker); MessageString(Chat::NPCQuestSay, PET_ATTACKING, pet->GetCleanName(), attacker->GetCleanName()); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 47066a5aa..33a47c3a4 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -10069,6 +10069,11 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) mypet->SetPetRegroup(false); SetPetCommandState(PET_BUTTON_REGROUP, 0); } + + // fix GUI sit button to be unpressed and stop sitting regen + SetPetCommandState(PET_BUTTON_SIT, 0); + mypet->SetAppearance(eaStanding); + zone->AddAggroMob(); // classic acts like qattack int hate = 1; @@ -10110,6 +10115,11 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) mypet->SetPetRegroup(false); SetPetCommandState(PET_BUTTON_REGROUP, 0); } + + // fix GUI sit button to be unpressed and stop sitting regen + SetPetCommandState(PET_BUTTON_SIT, 0); + mypet->SetAppearance(eaStanding); + zone->AddAggroMob(); mypet->AddToHateList(GetTarget(), 1, 0, true, false, false, SPELL_UNKNOWN, true); MessageString(Chat::PetResponse, PET_ATTACKING, mypet->GetCleanName(), GetTarget()->GetCleanName()); @@ -10170,6 +10180,11 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if ((mypet->GetPetType() == petAnimation && aabonuses.PetCommands[PetCommand]) || mypet->GetPetType() != petAnimation) { if (mypet->IsNPC()) { + + // Set Sit button to unpressed - send stand anim/end hpregen + SetPetCommandState(PET_BUTTON_SIT, 0); + mypet->SendAppearancePacket(AT_Anim, ANIM_STAND); + mypet->SayString(this, Chat::PetResponse, PET_GUARDINGLIFE); mypet->SetPetOrder(SPO_Guard); mypet->CastToNPC()->SaveGuardSpot(mypet->GetPosition()); @@ -10189,7 +10204,11 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if ((mypet->GetPetType() == petAnimation && aabonuses.PetCommands[PetCommand]) || mypet->GetPetType() != petAnimation) { mypet->SayString(this, Chat::PetResponse, PET_FOLLOWING); mypet->SetPetOrder(SPO_Follow); + + // fix GUI sit button to be unpressed - send stand anim/end hpregen + SetPetCommandState(PET_BUTTON_SIT, 0); mypet->SendAppearancePacket(AT_Anim, ANIM_STAND); + if (mypet->IsPetStop()) { mypet->SetPetStop(false); SetPetCommandState(PET_BUTTON_STOP, 0); @@ -10232,7 +10251,11 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if ((mypet->GetPetType() == petAnimation && aabonuses.PetCommands[PetCommand]) || mypet->GetPetType() != petAnimation) { mypet->SayString(this, Chat::PetResponse, PET_GUARDME_STRING); mypet->SetPetOrder(SPO_Follow); + + // Set Sit button to unpressed - send stand anim/end hpregen + SetPetCommandState(PET_BUTTON_SIT, 0); mypet->SendAppearancePacket(AT_Anim, ANIM_STAND); + if (mypet->IsPetStop()) { mypet->SetPetStop(false); SetPetCommandState(PET_BUTTON_STOP, 0); @@ -10267,6 +10290,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if ((mypet->GetPetType() == petAnimation && aabonuses.PetCommands[PetCommand]) || mypet->GetPetType() != petAnimation) { mypet->SayString(this, Chat::PetResponse, PET_SIT_STRING); + SetPetCommandState(PET_BUTTON_SIT, 0); mypet->SetPetOrder(SPO_Follow); mypet->SendAppearancePacket(AT_Anim, ANIM_STAND); } @@ -10277,6 +10301,7 @@ void Client::Handle_OP_PetCommands(const EQApplicationPacket *app) if ((mypet->GetPetType() == petAnimation && aabonuses.PetCommands[PetCommand]) || mypet->GetPetType() != petAnimation) { mypet->SayString(this, Chat::PetResponse, PET_SIT_STRING); + SetPetCommandState(PET_BUTTON_SIT, 1); mypet->SetPetOrder(SPO_Sit); mypet->SetRunAnimSpeed(0); if (!mypet->UseBardSpellLogic()) //maybe we can have a bard pet From 56afa0404bf236415f93bcf4cd79c84ea856f4ce Mon Sep 17 00:00:00 2001 From: Noudess Date: Wed, 2 Sep 2020 12:50:11 -0400 Subject: [PATCH 265/272] Updates to fix taunt button on PET UI to match live behavior. --- common/version.h | 2 +- utils/sql/db_update_manifest.txt | 1 + utils/sql/git/required/2020_09_02_pet_taunting.sql | 1 + zone/client.cpp | 6 +++++- zone/client_packet.cpp | 7 ++++++- zone/pets.cpp | 2 +- zone/spell_effects.cpp | 7 +++++-- zone/zonedb.cpp | 14 ++++++++------ zone/zonedb.h | 1 + 9 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 utils/sql/git/required/2020_09_02_pet_taunting.sql diff --git a/common/version.h b/common/version.h index a481fd1f4..e524afb01 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9156 +#define CURRENT_BINARY_DATABASE_VERSION 9157 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9027 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index 58cb8930f..63af98bbd 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -410,6 +410,7 @@ 9154|2020_04_11_expansions_content_filters.sql|SHOW COLUMNS from `zone` LIKE 'min_expansion'|empty| 9155|2020_08_15_lootdrop_level_filtering.sql|SHOW COLUMNS from `lootdrop_entries` LIKE 'trivial_min_level'|empty| 9156|2020_08_16_virtual_zonepoints.sql|SHOW COLUMNS from `zone_points` LIKE 'is_virtual'|empty| +9157|2020_09_02_pet_taunting.sql|SHOW COLUMNS from `character_pet_info` LIKE 'taunting'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2020_09_02_pet_taunting.sql b/utils/sql/git/required/2020_09_02_pet_taunting.sql new file mode 100644 index 000000000..f4de1138f --- /dev/null +++ b/utils/sql/git/required/2020_09_02_pet_taunting.sql @@ -0,0 +1 @@ +ALTER TABLE `character_pet_info` ADD COLUMN `taunting` tinyint(1) NOT NULL DEFAULT '1' COMMENT ''; diff --git a/zone/client.cpp b/zone/client.cpp index a413c7899..fdc75cfe6 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -687,6 +687,7 @@ bool Client::Save(uint8 iCommitNow) { pet->GetPetState(m_petinfo.Buffs, m_petinfo.Items, m_petinfo.Name); m_petinfo.petpower = pet->GetPetPower(); m_petinfo.size = pet->GetSize(); + m_petinfo.taunting = pet->CastToNPC()->IsTaunting(); } else { memset(&m_petinfo, 0, sizeof(struct PetInfo)); } @@ -5642,6 +5643,8 @@ void Client::SuspendMinion() CurrentPet->SetMana(m_suspendedminion.Mana); + CurrentPet->SetTaunting(m_suspendedminion.taunting); + MessageString(Chat::Magenta, SUSPEND_MINION_UNSUSPEND, CurrentPet->GetCleanName()); memset(&m_suspendedminion, 0, sizeof(struct PetInfo)); @@ -5653,7 +5656,8 @@ void Client::SuspendMinion() SetPetCommandState(PET_BUTTON_REGROUP, 0); SetPetCommandState(PET_BUTTON_FOLLOW, 1); SetPetCommandState(PET_BUTTON_GUARD, 0); - SetPetCommandState(PET_BUTTON_TAUNT, 1); + // Taunt saved on client side for logging on with pet + // In our db for when we zone. SetPetCommandState(PET_BUTTON_HOLD, 0); SetPetCommandState(PET_BUTTON_GHOLD, 0); SetPetCommandState(PET_BUTTON_FOCUS, 0); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 33a47c3a4..bfb9fd90c 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -904,7 +904,8 @@ void Client::CompleteConnect() SetPetCommandState(PET_BUTTON_REGROUP, 0); SetPetCommandState(PET_BUTTON_FOLLOW, 1); SetPetCommandState(PET_BUTTON_GUARD, 0); - SetPetCommandState(PET_BUTTON_TAUNT, 1); + // Taunt saved on client side for logging on with pet + // In our db for when we zone. SetPetCommandState(PET_BUTTON_HOLD, 0); SetPetCommandState(PET_BUTTON_GHOLD, 0); SetPetCommandState(PET_BUTTON_FOCUS, 0); @@ -1631,6 +1632,10 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) pet->CalcBonuses(); pet->SetHP(m_petinfo.HP); pet->SetMana(m_petinfo.Mana); + // 1st login, client takes care of this from button status + if (!firstlogon) { + pet->SetTaunting(m_petinfo.taunting); + } } m_petinfo.SpellID = 0; } diff --git a/zone/pets.cpp b/zone/pets.cpp index baaa779f0..dd66fccad 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -433,7 +433,7 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po petpower = power; SetOwnerID(owner->GetID()); SetPetSpellID(spell_id); - taunting = true; + taunting = false; // Class should use npc constructor to set light properties } diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 2eb17eb29..8c3599aca 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -1245,7 +1245,8 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove MakePet(spell_id, spell.teleport_zone); // TODO: we need to sync the states for these clients ... // Will fix buttons for now - if (IsClient()) { + Mob *pet=GetPet(); + if (IsClient() && pet) { auto c = CastToClient(); if (c->ClientVersionBit() & EQ::versions::maskUFAndLater) { c->SetPetCommandState(PET_BUTTON_SIT, 0); @@ -1253,7 +1254,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove c->SetPetCommandState(PET_BUTTON_REGROUP, 0); c->SetPetCommandState(PET_BUTTON_FOLLOW, 1); c->SetPetCommandState(PET_BUTTON_GUARD, 0); - c->SetPetCommandState(PET_BUTTON_TAUNT, 1); + // Creating pet from spell - taunt always false + // If suspended pet - that will be restore there + // If logging in, client will send toggle c->SetPetCommandState(PET_BUTTON_HOLD, 0); c->SetPetCommandState(PET_BUTTON_GHOLD, 0); c->SetPetCommandState(PET_BUTTON_FOCUS, 0); diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index ad29b10dc..bc1b542dd 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -3788,13 +3788,14 @@ void ZoneDatabase::SavePetInfo(Client *client) continue; query = StringFormat("INSERT INTO `character_pet_info` " - "(`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size`) " - "VALUES (%u, %u, '%s', %i, %u, %u, %u, %f) " + "(`char_id`, `pet`, `petname`, `petpower`, `spell_id`, `hp`, `mana`, `size`, `taunting`) " + "VALUES (%u, %u, '%s', %i, %u, %u, %u, %f, %u) " "ON DUPLICATE KEY UPDATE `petname` = '%s', `petpower` = %i, `spell_id` = %u, " - "`hp` = %u, `mana` = %u, `size` = %f", + "`hp` = %u, `mana` = %u, `size` = %f, `taunting` = %u", client->CharacterID(), pet, petinfo->Name, petinfo->petpower, petinfo->SpellID, - petinfo->HP, petinfo->Mana, petinfo->size, // and now the ON DUPLICATE ENTRIES - petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana, petinfo->size); + petinfo->HP, petinfo->Mana, petinfo->size, (petinfo->taunting) ? 1 : 0, + // and now the ON DUPLICATE ENTRIES + petinfo->Name, petinfo->petpower, petinfo->SpellID, petinfo->HP, petinfo->Mana, petinfo->size, (petinfo->taunting) ? 1 : 0); results = database.QueryDatabase(query); if (!results.Success()) return; @@ -3866,7 +3867,7 @@ void ZoneDatabase::LoadPetInfo(Client *client) memset(suspended, 0, sizeof(PetInfo)); std::string query = StringFormat("SELECT `pet`, `petname`, `petpower`, `spell_id`, " - "`hp`, `mana`, `size` FROM `character_pet_info` " + "`hp`, `mana`, `size` , `taunting` FROM `character_pet_info` " "WHERE `char_id` = %u", client->CharacterID()); auto results = database.QueryDatabase(query); @@ -3891,6 +3892,7 @@ void ZoneDatabase::LoadPetInfo(Client *client) pi->HP = atoul(row[4]); pi->Mana = atoul(row[5]); pi->size = atof(row[6]); + pi->taunting = (bool) atoi(row[7]); } query = StringFormat("SELECT `pet`, `slot`, `spell_id`, `caster_level`, `castername`, " diff --git a/zone/zonedb.h b/zone/zonedb.h index f3766c05c..bb6311eb0 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -155,6 +155,7 @@ struct PetInfo { SpellBuff_Struct Buffs[PET_BUFF_COUNT]; uint32 Items[EQ::invslot::EQUIPMENT_COUNT]; char Name[64]; + bool taunting; }; struct ZoneSpellsBlocked { From 96fb156c4718003002ccb9a8cc5576a627b59c6a Mon Sep 17 00:00:00 2001 From: Noudess Date: Wed, 2 Sep 2020 14:50:51 -0400 Subject: [PATCH 266/272] Change Older clients to not use persistant taunt button & default to taunt on. --- zone/client_packet.cpp | 9 ++++++--- zone/pets.cpp | 13 ++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index bfb9fd90c..316c08cd9 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1632,9 +1632,12 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) pet->CalcBonuses(); pet->SetHP(m_petinfo.HP); pet->SetMana(m_petinfo.Mana); - // 1st login, client takes care of this from button status - if (!firstlogon) { - pet->SetTaunting(m_petinfo.taunting); + + // Taunt persists when zoning on newer clients, overwrite default. + if (m_ClientVersionBit & EQ::versions::maskUFAndLater) { + if (!firstlogon) { + pet->SetTaunting(m_petinfo.taunting); + } } } m_petinfo.SpellID = 0; diff --git a/zone/pets.cpp b/zone/pets.cpp index dd66fccad..a8b69f77f 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -433,7 +433,18 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po petpower = power; SetOwnerID(owner->GetID()); SetPetSpellID(spell_id); - taunting = false; + + bool non_persistant_pet_states_client = false; + + // Deault to on in older clients, off in new clients that control state. + if (owner && owner->IsClient()) { + if (!(owner->CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater)) { + LogError("Titanium"); + non_persistant_pet_states_client = true; + } + + taunting = non_persistant_pet_states_client; + } // Class should use npc constructor to set light properties } From d5451c5d7719b1b54141383faedf0a29f911f2a9 Mon Sep 17 00:00:00 2001 From: Noudess Date: Wed, 2 Sep 2020 14:56:12 -0400 Subject: [PATCH 267/272] Remove left over logging. --- zone/pets.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/zone/pets.cpp b/zone/pets.cpp index a8b69f77f..d16334645 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -439,7 +439,6 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po // Deault to on in older clients, off in new clients that control state. if (owner && owner->IsClient()) { if (!(owner->CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater)) { - LogError("Titanium"); non_persistant_pet_states_client = true; } From ff6de1938bdffd87068cd7532c72f83d326d3aea Mon Sep 17 00:00:00 2001 From: Noudess Date: Thu, 3 Sep 2020 15:38:35 -0400 Subject: [PATCH 268/272] Change older clients to default to taunting=true only for taunt eligble pets. --- zone/pets.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/zone/pets.cpp b/zone/pets.cpp index d16334645..734be3ef4 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -434,15 +434,19 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po SetOwnerID(owner->GetID()); SetPetSpellID(spell_id); - bool non_persistant_pet_states_client = false; + // All pets start at false on newer clients. The client + // turns it on and tracks the state. + taunting=false; - // Deault to on in older clients, off in new clients that control state. + // Older clients didn't track state, and default taunting is on (per @mackal) + // Familiar and animation pets don't get taunt until an AA. if (owner && owner->IsClient()) { if (!(owner->CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater)) { - non_persistant_pet_states_client = true; + if ((typeofpet != petFamiliar && typeofpet != petAnimation) || + GetAA(aaAnimationEmpathy) >= 3) { + taunting=true; + } } - - taunting = non_persistant_pet_states_client; } // Class should use npc constructor to set light properties From 6f2b39792a8fe47474f3d7d167e0d7abbbb8f4b0 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Tue, 8 Sep 2020 15:57:17 -0400 Subject: [PATCH 269/272] Fix issue where a group buff was casted on a solo player The pet affinity in this case was checking the caster's AAs not the target's like it should --- zone/spells.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/spells.cpp b/zone/spells.cpp index 282d8d0d4..ea925ecda 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -2353,7 +2353,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, ui SpellOnTarget(spell_id, spell_target); #ifdef GROUP_BUFF_PETS //pet too - if (spells[spell_id].targettype != ST_GroupNoPets && spell_target->GetPet() && HasPetAffinity() && !spell_target->GetPet()->IsCharmed()) + if (spells[spell_id].targettype != ST_GroupNoPets && spell_target->GetPet() && spell_target->HasPetAffinity() && !spell_target->GetPet()->IsCharmed()) SpellOnTarget(spell_id, spell_target->GetPet()); #endif } From cd2b2c3c19a555b919a670f56acbc3950ba1dc9b Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 8 Sep 2020 16:48:09 -0400 Subject: [PATCH 270/272] Fix indentation. --- zone/attack.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zone/attack.cpp b/zone/attack.cpp index 951d922ed..1d780a27e 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -3455,9 +3455,9 @@ void Mob::CommonDamage(Mob* attacker, int &damage, const uint16 spell_id, const if (GetPetOrder() == SPO_Sit) { SetPetOrder(SPO_Follow); } - // fix GUI sit button to be unpressed and stop sitting regen - owner->CastToClient()->SetPetCommandState(PET_BUTTON_SIT, 0); - SetAppearance(eaStanding); + // fix GUI sit button to be unpressed and stop sitting regen + owner->CastToClient()->SetPetCommandState(PET_BUTTON_SIT, 0); + SetAppearance(eaStanding); } } From 05dfe748d38c7187b9b076e58a9dcd13172e27a7 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 8 Sep 2020 19:10:48 -0400 Subject: [PATCH 271/272] Use aabonuses.PetCommands instead of checking AA level --- zone/pets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/pets.cpp b/zone/pets.cpp index 734be3ef4..e88f0f246 100644 --- a/zone/pets.cpp +++ b/zone/pets.cpp @@ -443,7 +443,7 @@ Pet::Pet(NPCType *type_data, Mob *owner, PetType type, uint16 spell_id, int16 po if (owner && owner->IsClient()) { if (!(owner->CastToClient()->ClientVersionBit() & EQ::versions::maskUFAndLater)) { if ((typeofpet != petFamiliar && typeofpet != petAnimation) || - GetAA(aaAnimationEmpathy) >= 3) { + aabonuses.PetCommands[PET_TAUNT]) { taunting=true; } } From 0e2c918479922cdf9348b983af404682e726d6c4 Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 9 Sep 2020 21:29:29 -0700 Subject: [PATCH 272/272] Added alias to lua skills that don't start with a number so i can use them with typescript which don't allow identifiers starting with 0-9 --- zone/lua_general.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index ebb63b0bd..1fb257150 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -3085,9 +3085,13 @@ luabind::scope lua_register_skills() { .enum_("constants") [ luabind::value("1HBlunt", EQ::skills::Skill1HBlunt), + luabind::value("Blunt1H", EQ::skills::Skill1HBlunt), luabind::value("1HSlashing", EQ::skills::Skill1HSlashing), + luabind::value("Slashing1H", EQ::skills::Skill1HSlashing), luabind::value("2HBlunt", EQ::skills::Skill2HBlunt), + luabind::value("Blunt2H", EQ::skills::Skill2HBlunt), luabind::value("2HSlashing", EQ::skills::Skill2HSlashing), + luabind::value("Slashing2H", EQ::skills::Skill2HSlashing), luabind::value("Abjuration", EQ::skills::SkillAbjuration), luabind::value("Alteration", EQ::skills::SkillAlteration), luabind::value("ApplyPoison", EQ::skills::SkillApplyPoison), @@ -3122,6 +3126,7 @@ luabind::scope lua_register_skills() { luabind::value("Parry", EQ::skills::SkillParry), luabind::value("PickLock", EQ::skills::SkillPickLock), luabind::value("1HPiercing", EQ::skills::Skill1HPiercing), + luabind::value("Piercing1H", EQ::skills::Skill1HPiercing), luabind::value("Riposte", EQ::skills::SkillRiposte), luabind::value("RoundKick", EQ::skills::SkillRoundKick), luabind::value("SafeFall", EQ::skills::SkillSafeFall), @@ -3163,6 +3168,7 @@ luabind::scope lua_register_skills() { luabind::value("RemoveTraps", EQ::skills::SkillRemoveTraps), luabind::value("TripleAttack", EQ::skills::SkillTripleAttack), luabind::value("2HPiercing", EQ::skills::Skill2HPiercing), + luabind::value("Piercing2H", EQ::skills::Skill2HPiercing), luabind::value("HIGHEST_SKILL", EQ::skills::HIGHEST_SKILL) ]; }